--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))
local Roact = require(_Packages:WaitForChild("Roact"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))

local Source = require(script.Parent:WaitForChild("ColdFusion"))

-- Types
type Maid = Maid.Maid
type Style = Style.Style
type FontData = Types.FontData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type ImageData = Types.ImageData
type CanBeState<V> = ColdFusion.CanBeState<V>
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Class
local Interface = {}

do
	local NewTextFieldFilled = Roact.Component:extend("NewTextFieldFilled")
	NewTextFieldFilled.defaultProps = {
		onSubmit = DEFAULTS.NEW.ON_SUBMIT,
		onInput = DEFAULTS.NEW.ON_INPUT,
		initialText = DEFAULTS.NEW.INITIAL_TEXT,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		isError = DEFAULTS.NEW.IS_ERROR,
		label = DEFAULTS.NEW.LABEL,
		characterLimit = DEFAULTS.NEW.CHARACTER_LIMIT,
		supportingText = DEFAULTS.NEW.SUPPORTING_TEXT,
		icon = DEFAULTS.NEW.ICON,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		hightlightColor = DEFAULTS.NEW.HIGHTLIGHT_COLOR,
		errorColor = DEFAULTS.NEW.ERROR_COLOR,
		borderColor = DEFAULTS.NEW.BORDER_COLOR,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		labelColor = DEFAULTS.NEW.LABEL_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		bodyFontData = DEFAULTS.NEW.BODY_FONT_DATA,
		supportFontData = DEFAULTS.NEW.SUPPORT_FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewTextFieldFilled:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			onSubmit = _Value(self.defaultProps.onSubmit),
			onInput = _Value(self.defaultProps.onInput),
			initialText = _Value(self.defaultProps.initialText),
			isEnabled = _Value(self.defaultProps.isEnabled),
			isError = _Value(self.defaultProps.isError),
			label = _Value(self.defaultProps.label),
			characterLimit = _Value(self.defaultProps.characterLimit),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			backgroundColor = _Value(self.defaultProps.backgroundColor),
			hightlightColor = _Value(self.defaultProps.hightlightColor),
			errorColor = _Value(self.defaultProps.errorColor),
			borderColor = _Value(self.defaultProps.borderColor),
			textColor = _Value(self.defaultProps.textColor),
			labelColor = _Value(self.defaultProps.labelColor),
			elevation = _Value(self.defaultProps.elevation),
			schemeType = _Value(self.defaultProps.schemeType),
			bodyFontData = _Value(self.defaultProps.bodyFontData),
			supportFontData = _Value(self.defaultProps.supportFontData),
			scale = _Value(self.defaultProps.scale),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.new(
			self._internalStates.onSubmit,
			self._internalStates.onInput,
			self._internalStates.initialText,
			self._internalStates.isEnabled,
			self._internalStates.isError,
			self._internalStates.label,
			self._internalStates.characterLimit,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.backgroundColor,
			self._internalStates.hightlightColor,
			self._internalStates.errorColor,
			self._internalStates.borderColor,
			self._internalStates.textColor,
			self._internalStates.labelColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.bodyFontData,
			self._internalStates.supportFontData,
			self._internalStates.scale
		)
	end

	function NewTextFieldFilled:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return Roact.createElement(Roact.Portal, props)
	end
	function NewTextFieldFilled:didMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function NewTextFieldFilled:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.New = NewTextFieldFilled
end

do
	local PrimaryTextFieldFilled = Roact.Component:extend("PrimaryTextFieldFilled")
	PrimaryTextFieldFilled.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		onSubmit = DEFAULTS.PRIMARY.ON_SUBMIT,
		label = DEFAULTS.PRIMARY.LABEL,
		initialText = DEFAULTS.PRIMARY.INITIAL_TEXT,
		onInput = DEFAULTS.PRIMARY.ON_INPUT,
		supportingText = DEFAULTS.PRIMARY.SUPPORTING_TEXT,
		icon = DEFAULTS.PRIMARY.ICON,
		characterLimit = DEFAULTS.PRIMARY.CHARACTER_LIMIT,
		isError = DEFAULTS.PRIMARY.IS_ERROR,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	function PrimaryTextFieldFilled:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.primary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function PrimaryTextFieldFilled:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return Roact.createElement(Roact.Portal, props)
	end
	function PrimaryTextFieldFilled:didMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function PrimaryTextFieldFilled:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Primary = PrimaryTextFieldFilled
end

do
	local SecondaryTextFieldFilled = Roact.Component:extend("SecondaryTextFieldFilled")
	SecondaryTextFieldFilled.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		onSubmit = DEFAULTS.SECONDARY.ON_SUBMIT,
		label = DEFAULTS.SECONDARY.LABEL,
		initialText = DEFAULTS.SECONDARY.INITIAL_TEXT,
		onInput = DEFAULTS.SECONDARY.ON_INPUT,
		supportingText = DEFAULTS.SECONDARY.SUPPORTING_TEXT,
		icon = DEFAULTS.SECONDARY.ICON,
		characterLimit = DEFAULTS.SECONDARY.CHARACTER_LIMIT,
		isError = DEFAULTS.SECONDARY.IS_ERROR,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	function SecondaryTextFieldFilled:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.secondary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function SecondaryTextFieldFilled:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return Roact.createElement(Roact.Portal, props)
	end
	function SecondaryTextFieldFilled:didMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function SecondaryTextFieldFilled:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Secondary = SecondaryTextFieldFilled
end

do
	local TertiaryTextFieldFilled = Roact.Component:extend("TertiaryTextFieldFilled")
	TertiaryTextFieldFilled.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		onSubmit = DEFAULTS.TERTIARY.ON_SUBMIT,
		label = DEFAULTS.TERTIARY.LABEL,
		initialText = DEFAULTS.TERTIARY.INITIAL_TEXT,
		onInput = DEFAULTS.TERTIARY.ON_INPUT,
		supportingText = DEFAULTS.TERTIARY.SUPPORTING_TEXT,
		icon = DEFAULTS.TERTIARY.ICON,
		characterLimit = DEFAULTS.TERTIARY.CHARACTER_LIMIT,
		isError = DEFAULTS.TERTIARY.IS_ERROR,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	function TertiaryTextFieldFilled:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.tertiary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function TertiaryTextFieldFilled:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return Roact.createElement(Roact.Portal, props)
	end
	function TertiaryTextFieldFilled:didMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function TertiaryTextFieldFilled:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Tertiary = TertiaryTextFieldFilled
end

return Interface


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))

local Translators = require(_Package:WaitForChild("Translators"))

local Source = require(script.Parent:WaitForChild("ColdFusion"))

-- Types
type Maid = Maid.Maid
type Style = Style.Style
type FontData = Types.FontData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type ImageData = Types.ImageData
type CanBeState<V> = ColdFusion.CanBeState<V>
type Wrapper<BaseInstance, Definition, ClassName> = Translators.Wrapper<BaseInstance, Definition, ClassName>

export type FilledWrapperDefinition = {
	OnSubmit: (text: string?) -> string?,
	OnInput: (text: string?) -> string?,
	InitialText: string?,
	IsEnabled: boolean,
	IsError: boolean,
	Label: string,
	CharacterLimit: number?,
	SupportingText: string?,
	Icon: ImageData?,
	BackgroundColor: Color3,
	HightlightColor: Color3,
	ErrorColor: Color3,
	BorderColor: Color3,
	TextColor: Color3,
	LabelColor: Color3,
	Elevation: number,
	SchemeType: Enums.SchemeType,
	BodyFontData: FontData,
	SupportFontData: FontData,
	Scale: number,
}
export type FilledWrapper = Wrapper<GuiObject, FilledWrapperDefinition, "Filled">

export type StyledFilledWrapperDefinition = {
	Style: Style,
	OnSubmit: (text: string?) -> string?,
	Label: string,
	InitialText: string?,
	OnInput: ((text: string?) -> string?)?,
	SupportingText: string?,
	Icon: ImageData?,
	CharacterLimit: number?,
	IsError: boolean?,
	Elevation: number?,
	IsEnabled: boolean?,
}
export type StyledFilledWrapper = Wrapper<GuiObject, StyledFilledWrapperDefinition, "StyledFilled">
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Interface
local Interface = {}

function Interface.new(): StyledFilledWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		OnSubmit = _Value(function(text: string?)
			return text
		end),
		OnInput = _Value(function(text: string?)
			return text
		end),
		InitialText = _Value(""),
		IsEnabled = _Value(true),
		IsError = _Value(false),
		Label = _Value("Label"),
		CharacterLimit = _Value(nil),
		SupportingText = _Value(""),
		Icon = _Value(nil),
		BackgroundColor = _Value(Color3.new()),
		HightlightColor = _Value(Color3.new()),
		ErrorColor = _Value(Color3.new()),
		BorderColor = _Value(Color3.new()),
		TextColor = _Value(Color3.new()),
		LabelColor = _Value(Color3.new()),
		Elevation = _Value(0),
		SchemeType = _Value(Enums.SchemeType.Light),
		BodyFontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		SupportFontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		Scale = _Value(1),
	}
	local defaults: { [string]: unknown? } = {
		onSubmit = DEFAULTS.NEW.ON_SUBMIT,
		onInput = DEFAULTS.NEW.ON_INPUT,
		initialText = DEFAULTS.NEW.INITIAL_TEXT,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		isError = DEFAULTS.NEW.IS_ERROR,
		label = DEFAULTS.NEW.LABEL,
		characterLimit = DEFAULTS.NEW.CHARACTER_LIMIT,
		supportingText = DEFAULTS.NEW.SUPPORTING_TEXT,
		icon = DEFAULTS.NEW.ICON,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		hightlightColor = DEFAULTS.NEW.HIGHTLIGHT_COLOR,
		errorColor = DEFAULTS.NEW.ERROR_COLOR,
		borderColor = DEFAULTS.NEW.BORDER_COLOR,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		labelColor = DEFAULTS.NEW.LABEL_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		bodyFontData = DEFAULTS.NEW.BODY_FONT_DATA,
		supportFontData = DEFAULTS.NEW.SUPPORT_FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	local inst: GuiObject = Source.new(
		definition.OnSubmit,
		definition.OnInput,
		definition.InitialText,
		definition.IsEnabled,
		definition.IsError,
		definition.Label,
		definition.CharacterLimit,
		definition.SupportingText,
		definition.Icon,
		definition.BackgroundColor,
		definition.HightlightColor,
		definition.ErrorColor,
		definition.BorderColor,
		definition.TextColor,
		definition.LabelColor,
		definition.Elevation,
		definition.SchemeType,
		definition.BodyFontData,
		definition.SupportFontData,
		definition.Scale
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledFilled", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primary(): StyledFilledWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Style = _Value(Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7))),
		OnSubmit = _Value(function(text: string?)
			return text
		end),
		Label = _Value("Label"),
		InitialText = _Value(""),
		OnInput = _Value(function(text: string?)
			return text
		end),
		SupportingText = _Value(""),
		Icon = _Value(nil),
		CharacterLimit = _Value(nil),
		IsError = _Value(false),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY.STYLE,
		onSubmit = DEFAULTS.PRIMARY.ON_SUBMIT,
		label = DEFAULTS.PRIMARY.LABEL,
		initialText = DEFAULTS.PRIMARY.INITIAL_TEXT,
		onInput = DEFAULTS.PRIMARY.ON_INPUT,
		supportingText = DEFAULTS.PRIMARY.SUPPORTING_TEXT,
		icon = DEFAULTS.PRIMARY.ICON,
		characterLimit = DEFAULTS.PRIMARY.CHARACTER_LIMIT,
		isError = DEFAULTS.PRIMARY.IS_ERROR,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.primary(
		definition.Style,
		definition.OnSubmit,
		definition.Label,
		definition.InitialText,
		definition.OnInput,
		definition.SupportingText,
		definition.Icon,
		definition.CharacterLimit,
		definition.IsError,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledFilled", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondary(): StyledFilledWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Style = _Value(Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7))),
		OnSubmit = _Value(function(text: string?)
			return text
		end),
		Label = _Value("Label"),
		InitialText = _Value(""),
		OnInput = _Value(function(text: string?)
			return text
		end),
		SupportingText = _Value(""),
		Icon = _Value(nil),
		CharacterLimit = _Value(nil),
		IsError = _Value(false),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY.STYLE,
		onSubmit = DEFAULTS.SECONDARY.ON_SUBMIT,
		label = DEFAULTS.SECONDARY.LABEL,
		initialText = DEFAULTS.SECONDARY.INITIAL_TEXT,
		onInput = DEFAULTS.SECONDARY.ON_INPUT,
		supportingText = DEFAULTS.SECONDARY.SUPPORTING_TEXT,
		icon = DEFAULTS.SECONDARY.ICON,
		characterLimit = DEFAULTS.SECONDARY.CHARACTER_LIMIT,
		isError = DEFAULTS.SECONDARY.IS_ERROR,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.secondary(
		definition.Style,
		definition.OnSubmit,
		definition.Label,
		definition.InitialText,
		definition.OnInput,
		definition.SupportingText,
		definition.Icon,
		definition.CharacterLimit,
		definition.IsError,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledFilled", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiary(): StyledFilledWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Style = _Value(Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7))),
		OnSubmit = _Value(function(text: string?)
			return text
		end),
		Label = _Value("Label"),
		InitialText = _Value(""),
		OnInput = _Value(function(text: string?)
			return text
		end),
		SupportingText = _Value(""),
		Icon = _Value(nil),
		CharacterLimit = _Value(nil),
		IsError = _Value(false),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY.STYLE,
		onSubmit = DEFAULTS.TERTIARY.ON_SUBMIT,
		label = DEFAULTS.TERTIARY.LABEL,
		initialText = DEFAULTS.TERTIARY.INITIAL_TEXT,
		onInput = DEFAULTS.TERTIARY.ON_INPUT,
		supportingText = DEFAULTS.TERTIARY.SUPPORTING_TEXT,
		icon = DEFAULTS.TERTIARY.ICON,
		characterLimit = DEFAULTS.TERTIARY.CHARACTER_LIMIT,
		isError = DEFAULTS.TERTIARY.IS_ERROR,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.tertiary(
		definition.Style,
		definition.OnSubmit,
		definition.Label,
		definition.InitialText,
		definition.OnInput,
		definition.SupportingText,
		definition.Icon,
		definition.CharacterLimit,
		definition.IsError,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledFilled", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

return Interface


--!strict
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(game:GetService("ReplicatedStorage"):WaitForChild("Packages"):WaitForChild("Maid"))

-- Modules
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))
local Icons = require(_Packages:WaitForChild("MaterialIcons"))

-- Types
-- Constants
-- Variables
-- References

-- Private Functions
-- Class
return function(frame: Frame)
	local maid = Maid.new()
	task.spawn(function()
		local function makeHalfFrame(isDarkMode: boolean, color: Color3): Frame
			local style = Style.new(
				1.5,
				Enum.Font.SourceSans,
				if isDarkMode then Enums.SchemeType.Dark else Enums.SchemeType.Light,
				color
			)

			local halfFrame = maid:GiveTask(Instance.new("Frame"))
			halfFrame.BackgroundColor3 = style:GetColor(Enums.ColorRoleType.Surface)
			halfFrame.BorderSizePixel = 0

			local listLayout = maid:GiveTask(Instance.new("UIListLayout"))
			listLayout.FillDirection = Enum.FillDirection.Vertical
			listLayout.Padding = UDim.new(0, 10)
			listLayout.VerticalAlignment = Enum.VerticalAlignment.Center
			listLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
			listLayout.Parent = halfFrame

			local Module = require(script.Parent:WaitForChild("ColdFusion"))

			do
				local button = maid:GiveTask(
					Module.new(
						function(input: string?): string?
							print(`submit: {input}`)
							return input
						end,
						function(input: string?): string?
							print(`input: {input}`)
							return input
						end,
						nil,
						true,
						false,
						"Label",
						20,
						"Supporting Text",
						Icons.settings,
						style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest, 1),
						style:GetColor(Enums.ColorRoleType.Primary, 1),
						style:GetColor(Enums.ColorRoleType.Error, 1),
						style:GetColor(Enums.ColorRoleType.Outline, 1),
						style:GetColor(Enums.ColorRoleType.OnSurface, 1),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),
						0,
						style.SchemeType,
						style:GetFontData(Enums.FontType.BodyLarge),
						style:GetFontData(Enums.FontType.BodySmall),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end
			do
				local button = maid:GiveTask(
					Module.new(
						function(input: string?): string?
							print(`submit: {input}`)
							return input
						end,
						function(input: string?): string?
							print(`input: {input}`)
							return input
						end,
						nil,
						true,
						true,
						"Label",
						nil,
						nil,
						nil,
						style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest, 1),
						style:GetColor(Enums.ColorRoleType.Primary, 1),
						style:GetColor(Enums.ColorRoleType.Error, 1),
						style:GetColor(Enums.ColorRoleType.Outline, 1),
						style:GetColor(Enums.ColorRoleType.OnSurface, 1),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),

						0,
						style.SchemeType,
						style:GetFontData(Enums.FontType.BodyLarge),
						style:GetFontData(Enums.FontType.BodySmall),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end
			-- do
			-- 	local button = maid:GiveTask(
			-- 		Module.new(
			-- 			function(input: string?): string?
			-- 				print(`submit: {input}`)
			-- 				return input
			-- 			end,
			-- 			function(input: string?): string?
			-- 				print(`input: {input}`)
			-- 				return input
			-- 			end,
			-- 			nil,
			-- 			false,
			-- 			false,
			-- 			"Label",
			-- 			20,
			-- 			"Supporting Text",
			-- 			nil,
			-- 			style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Primary, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Error, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Outline, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurface, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),

			-- 			0,
			-- 			style.SchemeType,
			-- 			style:GetFontData(Enums.FontType.BodyLarge),
			-- 			style:GetFontData(Enums.FontType.BodySmall),
			-- 			style.Scale
			-- 		)
			-- 	)
			-- 	button.Parent = halfFrame
			-- end
			-- do
			-- 	local button = maid:GiveTask(
			-- 		Module.new(
			-- 			function(input: string?): string?
			-- 				print(`submit: {input}`)
			-- 				return input
			-- 			end,
			-- 			function(input: string?): string?
			-- 				print(`input: {input}`)
			-- 				return input
			-- 			end,
			-- 			nil,
			-- 			true,
			-- 			true,
			-- 			"Label",
			-- 			20,
			-- 			"Supporting Text",
			-- 			Icons.settings,
			-- 			style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Primary, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Error, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Outline, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurface, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),

			-- 			0,
			-- 			style.SchemeType,
			-- 			style:GetFontData(Enums.FontType.BodyLarge),
			-- 			style:GetFontData(Enums.FontType.BodySmall),
			-- 			style.Scale
			-- 		)
			-- 	)
			-- 	button.Parent = halfFrame
			-- end

			-- do
			-- 	local button = maid:GiveTask(
			-- 		Module.new(
			-- 			function(input: string?): string?
			-- 				print(`submit: {input}`)
			-- 				return input
			-- 			end,
			-- 			function(input: string?): string?
			-- 				print(`input: {input}`)
			-- 				return input
			-- 			end,
			-- 			nil,
			-- 			true,
			-- 			false,
			-- 			"Label",
			-- 			20,
			-- 			"Supporting Text",
			-- 			Icons.settings,
			-- 			style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Primary, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Error, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Outline, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurface, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),

			-- 			0,
			-- 			style.SchemeType,
			-- 			style:GetFontData(Enums.FontType.BodyLarge),
			-- 			style:GetFontData(Enums.FontType.BodySmall),
			-- 			style.Scale
			-- 		)
			-- 	)
			-- 	button.Parent = halfFrame
			-- end

			return halfFrame
		end

		local COLORS: { [number]: Color3 } = {
			Color3.fromHSV(0, 0.9, 0.8),
			-- Color3.fromHSV(0, 0.25, 0.8),
			-- Color3.fromHSV(0, 0.9, 0.5),
			Color3.fromHSV(0.6, 0.9, 0.7),
			-- Color3.fromHSV(0.35, 0.9, 0.7),
			-- Color3.fromHSV(0.1, 0.9, 0.7),
		}

		for i, color in ipairs(COLORS) do
			local x = (i - 1) / #COLORS
			local width = 1 / #COLORS
			local dark = makeHalfFrame(true, color)

			dark.Size = UDim2.fromScale(width, 0.5)
			dark.Position = UDim2.fromScale(x, 0.5)
			dark.Parent = frame

			local bright = makeHalfFrame(false, color)
			bright.Size = UDim2.fromScale(width, 0.5)
			bright.Position = UDim2.fromScale(x, 0)
			bright.Parent = frame
		end
	end)

	return function()
		maid:Destroy()
	end
end


--!strict
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(game:GetService("ReplicatedStorage"):WaitForChild("Packages"):WaitForChild("Maid"))

-- Modules
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))

-- Types
-- Constants
-- Variables
-- References

-- Private Functions
-- Class
return function(frame: Frame)
	local maid = Maid.new()
	task.spawn(function()
		local function makeHalfFrame(isDarkMode: boolean, color: Color3): Frame
			local style = Style.new(
				1,
				Enum.Font.SourceSans,
				if isDarkMode then Enums.SchemeType.Dark else Enums.SchemeType.Light,
				color
			)

			local halfFrame = maid:GiveTask(Instance.new("Frame"))
			halfFrame.BackgroundColor3 = style:GetColor(Enums.ColorRoleType.Surface)
			halfFrame.BorderSizePixel = 0

			local listLayout = maid:GiveTask(Instance.new("UIListLayout"))
			listLayout.FillDirection = Enum.FillDirection.Vertical
			listLayout.Padding = UDim.new(0, 10)
			listLayout.VerticalAlignment = Enum.VerticalAlignment.Center
			listLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
			listLayout.Parent = halfFrame

			local Module = require(script.Parent:WaitForChild("ColdFusion"))

			do
				local button = maid:GiveTask(Module.primary(style, function(input: string?): string?
					print(`submit: {input}`)
					return input
				end, "primary"))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.secondary(style, function(input: string?): string?
					print(`submit: {input}`)
					return input
				end, "secondary"))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.tertiary(style, function(input: string?): string?
					print(`submit: {input}`)
					return input
				end, "tertiary"))
				button.Parent = halfFrame
			end

			return halfFrame
		end

		local COLORS: { [number]: Color3 } = {
			Color3.fromHSV(0, 0.9, 0.8),
			-- Color3.fromHSV(0, 0.25, 0.8),
			-- Color3.fromHSV(0, 0.9, 0.5),
			Color3.fromHSV(0.6, 0.9, 0.7),
			Color3.fromHSV(0.35, 0.9, 0.7),
			Color3.fromHSV(0.1, 0.9, 0.7),
		}

		for i, color in ipairs(COLORS) do
			local x = (i - 1) / #COLORS
			local width = 1 / #COLORS
			local dark = makeHalfFrame(true, color)

			dark.Size = UDim2.fromScale(width, 0.5)
			dark.Position = UDim2.fromScale(x, 0.5)
			dark.Parent = frame

			local bright = makeHalfFrame(false, color)
			bright.Size = UDim2.fromScale(width, 0.5)
			bright.Position = UDim2.fromScale(x, 0)
			bright.Parent = frame
		end
	end)

	return function()
		maid:Destroy()
	end
end


--!strict
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))
local Base = require(script.Parent.Parent:WaitForChild("Base"))
local Enums = require(_Package:WaitForChild("Enums"))

-- Types
type Maid = Maid.Maid
type State<V> = ColdFusion.State<V>
type ValueState<V> = ColdFusion.ValueState<V>
type CanBeState<V> = ColdFusion.CanBeState<V>
type AppearanceData = Types.AppearanceData
type ImageData = Types.ImageData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type Style = Style.Style
type FontData = Types.FontData

-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))

-- Variables
-- References
-- Private Functions

-- Class
local Interface = {}
function newThemedComponent(
	themeDefaults: typeof(DEFAULTS.PRIMARY),
	style: CanBeState<Style>,

	hightlightColor: Enums.ColorRoleType,
	errorColor: Enums.ColorRoleType,
	borderColor: Enums.ColorRoleType,
	textColor: Enums.ColorRoleType,
	labelColor: Enums.ColorRoleType,

	onSubmit: CanBeState<(text: string?) -> string?>,
	onInput: CanBeState<(((text: string?) -> string?)?)>,
	label: CanBeState<string>,
	initialText: CanBeState<string?>,
	supportingText: CanBeState<string?>,
	icon: CanBeState<ImageData?>,

	characterLimit: CanBeState<number?>,

	isError: CanBeState<boolean?>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	local maid = Maid.new()

	local _fuse = ColdFusion.fuse(maid)

	local _new = _fuse.new
	local _bind = _fuse.bind
	local _clone = _fuse.clone
	local _import = _fuse.import

	local _Value = _fuse.Value
	local _Computed = _fuse.Computed

	local styleState: State<Style> = _import(style, themeDefaults.STYLE)

	local out = Interface.new(
		_import(onSubmit, themeDefaults.ON_SUBMIT),
		_import(onInput, themeDefaults.ON_INPUT or function(txt: string?): string?
			return txt
		end),
		_import(initialText, themeDefaults.INITIAL_TEXT),
		_import(isEnabled, themeDefaults.IS_ENABLED),
		_import(isError, themeDefaults.IS_ERROR),
		_import(label, themeDefaults.LABEL or ""),
		_import(characterLimit, themeDefaults.CHARACTER_LIMIT),
		_import(supportingText, themeDefaults.SUPPORTING_TEXT),
		_import(icon, themeDefaults.ICON),
		_Computed(function(s: Style): Color3
			return s:GetColor(hightlightColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(errorColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(borderColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(textColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(labelColor)
		end, styleState),
		_import(elevation, themeDefaults.ELEVATION),
		_Computed(function(s: Style): any
			return s.SchemeType
		end, styleState),
		_Computed(function(s: Style): FontData
			return s:GetFontData(Enums.FontType.BodyLarge)
		end, styleState),
		_Computed(function(s: Style): FontData
			return s:GetFontData(Enums.FontType.BodySmall)
		end, styleState),
		_Computed(function(s: Style): number
			return s.Scale
		end, styleState)
	)

	maid:GiveTask(out.Destroying:Connect(function()
		maid:Destroy()
	end))

	return out
end

Interface = {}

function Interface.primary(
	style: CanBeState<Style>,
	onSubmit: CanBeState<(text: string?) -> string?>,
	label: CanBeState<string>,
	initialText: CanBeState<string?>,
	onInput: CanBeState<(((text: string?) -> string?)?)>,
	supportingText: CanBeState<string?>,
	icon: CanBeState<ImageData?>,
	characterLimit: CanBeState<number?>,
	isError: CanBeState<boolean?>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.PRIMARY,
		style,
		Enums.ColorRoleType.Primary,
		Enums.ColorRoleType.Error,
		Enums.ColorRoleType.Outline,
		Enums.ColorRoleType.OnSurface,
		Enums.ColorRoleType.OnSurfaceVariant,
		onSubmit,
		onInput,
		label,
		initialText,
		supportingText,
		icon,
		characterLimit,
		isError,
		elevation,
		isEnabled
	)
end

function Interface.secondary(
	style: CanBeState<Style>,
	onSubmit: CanBeState<(text: string?) -> string?>,
	label: CanBeState<string>,
	initialText: CanBeState<string?>,
	onInput: CanBeState<(((text: string?) -> string?)?)>,
	supportingText: CanBeState<string?>,
	icon: CanBeState<ImageData?>,
	characterLimit: CanBeState<number?>,
	isError: CanBeState<boolean?>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.SECONDARY,
		style,
		Enums.ColorRoleType.Secondary,
		Enums.ColorRoleType.Error,
		Enums.ColorRoleType.Outline,
		Enums.ColorRoleType.OnSurface,
		Enums.ColorRoleType.OnSurfaceVariant,
		onSubmit,
		onInput,
		label,
		initialText,
		supportingText,
		icon,
		characterLimit,
		isError,
		elevation,
		isEnabled
	)
end

function Interface.tertiary(
	style: CanBeState<Style>,
	onSubmit: CanBeState<(text: string?) -> string?>,
	label: CanBeState<string>,
	initialText: CanBeState<string?>,
	onInput: CanBeState<(((text: string?) -> string?)?)>,
	supportingText: CanBeState<string?>,
	icon: CanBeState<ImageData?>,
	characterLimit: CanBeState<number?>,
	isError: CanBeState<boolean?>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.TERTIARY,
		style,
		Enums.ColorRoleType.Tertiary,
		Enums.ColorRoleType.Error,
		Enums.ColorRoleType.Outline,
		Enums.ColorRoleType.OnSurface,
		Enums.ColorRoleType.OnSurfaceVariant,
		onSubmit,
		onInput,
		label,
		initialText,
		supportingText,
		icon,
		characterLimit,
		isError,
		elevation,
		isEnabled
	)
end

function Interface.new(
	onSubmit: CanBeState<(text: string?) -> string?>,
	onInput: CanBeState<(text: string?) -> string?>,
	initialText: CanBeState<string?>,
	isEnabled: CanBeState<boolean>,
	isError: CanBeState<boolean>,
	label: CanBeState<string>,
	characterLimit: CanBeState<number?>,
	supportingText: CanBeState<string?>,
	icon: CanBeState<ImageData?>,
	hightlightColor: CanBeState<Color3>,
	errorColor: CanBeState<Color3>,
	borderColor: CanBeState<Color3>,
	textColor: CanBeState<Color3>,
	labelColor: CanBeState<Color3>,
	elevation: CanBeState<number>,
	schemeType: CanBeState<Enums.SchemeType>,
	bodyFontData: CanBeState<FontData>,
	supportFontData: CanBeState<FontData>,
	scale: CanBeState<number>
): GuiObject
	return Base.new(
		if onSubmit ~= nil then onSubmit else DEFAULTS.NEW.ON_SUBMIT,
		if onInput ~= nil then onInput else DEFAULTS.NEW.ON_INPUT,
		if initialText ~= nil then initialText else DEFAULTS.NEW.INITIAL_TEXT,
		if isEnabled ~= nil
			then isEnabled
			elseif DEFAULTS.NEW.IS_ENABLED ~= nil then DEFAULTS.NEW.IS_ENABLED
			else true,
		if isError ~= nil
			then isError
			elseif DEFAULTS.NEW.IS_ERROR ~= nil then DEFAULTS.NEW.IS_ERROR
			else false,
		if label ~= nil then label else DEFAULTS.NEW.LABEL or "",
		if characterLimit ~= nil then characterLimit else DEFAULTS.NEW.CHARACTER_LIMIT,
		if supportingText ~= nil then supportingText else DEFAULTS.NEW.SUPPORTING_TEXT,
		if icon ~= nil then icon else DEFAULTS.NEW.ICON,
		if textColor ~= nil then textColor else DEFAULTS.NEW.TEXT_COLOR,
		if labelColor ~= nil then labelColor else DEFAULTS.NEW.LABEL_COLOR,
		if hightlightColor ~= nil then hightlightColor else DEFAULTS.NEW.HIGHTLIGHT_COLOR,
		if errorColor ~= nil then errorColor else DEFAULTS.NEW.ERROR_COLOR,
		if borderColor ~= nil then borderColor else DEFAULTS.NEW.BORDER_COLOR,
		if borderColor ~= nil then borderColor else DEFAULTS.NEW.BORDER_COLOR,
		if labelColor ~= nil then labelColor else DEFAULTS.NEW.LABEL_COLOR,
		if elevation ~= nil then elevation else DEFAULTS.NEW.ELEVATION or 0,
		true,
		if schemeType ~= nil then schemeType else DEFAULTS.NEW.SCHEME_TYPE,
		if bodyFontData ~= nil then bodyFontData else DEFAULTS.NEW.BODY_FONT_DATA,
		if supportFontData ~= nil then supportFontData else DEFAULTS.NEW.SUPPORT_FONT_DATA,
		if scale ~= nil then scale else DEFAULTS.NEW.SCALE
	)
end

return Interface


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))

-- Types
type Maid = Maid.Maid
type Style = Style.Style
type FontData = Types.FontData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type ImageData = Types.ImageData
type CanBeState<V> = ColdFusion.CanBeState<V>

return {
	NEW = {
		ON_SUBMIT = function(text: string?)
			return text
		end,
		ON_INPUT = function(text: string?)
			return text
		end,
		INITIAL_TEXT = "",
		IS_ENABLED = true,
		IS_ERROR = false,
		LABEL = "Label",
		CHARACTER_LIMIT = nil :: number?,
		SUPPORTING_TEXT = "",
		ICON = nil :: ImageData?,
		HIGHTLIGHT_COLOR = Color3.new(),
		ERROR_COLOR = Color3.new(),
		BORDER_COLOR = Color3.new(),
		TEXT_COLOR = Color3.new(),
		LABEL_COLOR = Color3.new(),
		ELEVATION = 0,
		SCHEME_TYPE = Enums.SchemeType.Light,
		BODY_FONT_DATA = Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14),
		SUPPORT_FONT_DATA = Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14),
		SCALE = 1,
	},
	PRIMARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_SUBMIT = function(text: string?)
			return text
		end,
		LABEL = "Label",
		INITIAL_TEXT = "",
		ON_INPUT = function(text: string?)
			return text
		end,
		SUPPORTING_TEXT = "",
		ICON = nil :: ImageData?,
		CHARACTER_LIMIT = nil :: number?,
		IS_ERROR = false,
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	SECONDARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_SUBMIT = function(text: string?)
			return text
		end,
		LABEL = "Label",
		INITIAL_TEXT = "",
		ON_INPUT = function(text: string?)
			return text
		end,
		SUPPORTING_TEXT = "",
		ICON = nil :: ImageData?,
		CHARACTER_LIMIT = nil :: number?,
		IS_ERROR = false,
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	TERTIARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_SUBMIT = function(text: string?)
			return text
		end,
		LABEL = "Label",
		INITIAL_TEXT = "",
		ON_INPUT = function(text: string?)
			return text
		end,
		SUPPORTING_TEXT = "",
		ICON = nil :: ImageData?,
		CHARACTER_LIMIT = nil :: number?,
		IS_ERROR = false,
		ELEVATION = 0,
		IS_ENABLED = true,
	},
}


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))

local Translators = require(_Package:WaitForChild("Translators"))

local Source = require(script.Parent:WaitForChild("ColdFusion"))

-- Types
type Maid = Maid.Maid
type Style = Style.Style
type FontData = Types.FontData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type ImageData = Types.ImageData
type CanBeState<V> = ColdFusion.CanBeState<V>
type FusionCanBeState<V> = Translators.FusionCanBeState<V>

-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Class
local Interface = {}

function Interface.new(
	onSubmit: FusionCanBeState<((text: string?) -> string?)>,
	onInput: FusionCanBeState<((text: string?) -> string?)>,
	initialText: FusionCanBeState<string?>,
	isEnabled: FusionCanBeState<boolean>,
	isError: FusionCanBeState<boolean>,
	label: FusionCanBeState<string>,
	characterLimit: FusionCanBeState<number?>,
	supportingText: FusionCanBeState<string?>,
	icon: FusionCanBeState<ImageData?>,
	hightlightColor: FusionCanBeState<Color3>,
	errorColor: FusionCanBeState<Color3>,
	borderColor: FusionCanBeState<Color3>,
	textColor: FusionCanBeState<Color3>,
	labelColor: FusionCanBeState<Color3>,
	elevation: FusionCanBeState<number>,
	schemeType: FusionCanBeState<Enums.SchemeType>,
	bodyFontData: FusionCanBeState<FontData>,
	supportFontData: FusionCanBeState<FontData>,
	scale: FusionCanBeState<number>
): GuiObject
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local function convert<V>(value: FusionCanBeState<V>, default: V): CanBeState<V>
		return Translators.Fusion.toColdFusion(maid, _fuse, value, default)
	end
	local inst = Source.new(
		convert(onSubmit, DEFAULTS.NEW.ON_SUBMIT),
		convert(onInput, DEFAULTS.NEW.ON_INPUT),
		convert(initialText, DEFAULTS.NEW.INITIAL_TEXT),
		convert(isEnabled, DEFAULTS.NEW.IS_ENABLED),
		convert(isError, DEFAULTS.NEW.IS_ERROR),
		convert(label, DEFAULTS.NEW.LABEL),
		convert(characterLimit, DEFAULTS.NEW.CHARACTER_LIMIT),
		convert(supportingText, DEFAULTS.NEW.SUPPORTING_TEXT),
		convert(icon, DEFAULTS.NEW.ICON),
		convert(hightlightColor, DEFAULTS.NEW.HIGHTLIGHT_COLOR),
		convert(errorColor, DEFAULTS.NEW.ERROR_COLOR),
		convert(borderColor, DEFAULTS.NEW.BORDER_COLOR),
		convert(textColor, DEFAULTS.NEW.TEXT_COLOR),
		convert(labelColor, DEFAULTS.NEW.LABEL_COLOR),
		convert(elevation, DEFAULTS.NEW.ELEVATION),
		convert(schemeType, DEFAULTS.NEW.SCHEME_TYPE),
		convert(bodyFontData, DEFAULTS.NEW.BODY_FONT_DATA),
		convert(supportFontData, DEFAULTS.NEW.SUPPORT_FONT_DATA),
		convert(scale, DEFAULTS.NEW.SCALE)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.primary(
	style: FusionCanBeState<Style>,
	onSubmit: FusionCanBeState<((text: string?) -> string?)>,
	label: FusionCanBeState<string>,
	initialText: FusionCanBeState<string?>,
	onInput: FusionCanBeState<(((text: string?) -> string?)?)>,
	supportingText: FusionCanBeState<string?>,
	icon: FusionCanBeState<ImageData?>,
	characterLimit: FusionCanBeState<number?>,
	isError: FusionCanBeState<boolean?>,
	elevation: FusionCanBeState<number?>,
	isEnabled: FusionCanBeState<boolean?>
): GuiObject
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local function convert<V>(value: FusionCanBeState<V>, default: V): CanBeState<V>
		return Translators.Fusion.toColdFusion(maid, _fuse, value, default)
	end
	local inst = Source.primary(
		convert(style, DEFAULTS.PRIMARY.STYLE),
		convert(onSubmit, DEFAULTS.PRIMARY.ON_SUBMIT),
		convert(label, DEFAULTS.PRIMARY.LABEL),
		convert(initialText, DEFAULTS.PRIMARY.INITIAL_TEXT),
		convert(onInput, DEFAULTS.PRIMARY.ON_INPUT),
		convert(supportingText, DEFAULTS.PRIMARY.SUPPORTING_TEXT),
		convert(icon, DEFAULTS.PRIMARY.ICON),
		convert(characterLimit, DEFAULTS.PRIMARY.CHARACTER_LIMIT),
		convert(isError, DEFAULTS.PRIMARY.IS_ERROR),
		convert(elevation, DEFAULTS.PRIMARY.ELEVATION),
		convert(isEnabled, DEFAULTS.PRIMARY.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.secondary(
	style: FusionCanBeState<Style>,
	onSubmit: FusionCanBeState<((text: string?) -> string?)>,
	label: FusionCanBeState<string>,
	initialText: FusionCanBeState<string?>,
	onInput: FusionCanBeState<(((text: string?) -> string?)?)>,
	supportingText: FusionCanBeState<string?>,
	icon: FusionCanBeState<ImageData?>,
	characterLimit: FusionCanBeState<number?>,
	isError: FusionCanBeState<boolean?>,
	elevation: FusionCanBeState<number?>,
	isEnabled: FusionCanBeState<boolean?>
): GuiObject
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local function convert<V>(value: FusionCanBeState<V>, default: V): CanBeState<V>
		return Translators.Fusion.toColdFusion(maid, _fuse, value, default)
	end
	local inst = Source.secondary(
		convert(style, DEFAULTS.SECONDARY.STYLE),
		convert(onSubmit, DEFAULTS.SECONDARY.ON_SUBMIT),
		convert(label, DEFAULTS.SECONDARY.LABEL),
		convert(initialText, DEFAULTS.SECONDARY.INITIAL_TEXT),
		convert(onInput, DEFAULTS.SECONDARY.ON_INPUT),
		convert(supportingText, DEFAULTS.SECONDARY.SUPPORTING_TEXT),
		convert(icon, DEFAULTS.SECONDARY.ICON),
		convert(characterLimit, DEFAULTS.SECONDARY.CHARACTER_LIMIT),
		convert(isError, DEFAULTS.SECONDARY.IS_ERROR),
		convert(elevation, DEFAULTS.SECONDARY.ELEVATION),
		convert(isEnabled, DEFAULTS.SECONDARY.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.tertiary(
	style: FusionCanBeState<Style>,
	onSubmit: FusionCanBeState<((text: string?) -> string?)>,
	label: FusionCanBeState<string>,
	initialText: FusionCanBeState<string?>,
	onInput: FusionCanBeState<(((text: string?) -> string?)?)>,
	supportingText: FusionCanBeState<string?>,
	icon: FusionCanBeState<ImageData?>,
	characterLimit: FusionCanBeState<number?>,
	isError: FusionCanBeState<boolean?>,
	elevation: FusionCanBeState<number?>,
	isEnabled: FusionCanBeState<boolean?>
): GuiObject
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local function convert<V>(value: FusionCanBeState<V>, default: V): CanBeState<V>
		return Translators.Fusion.toColdFusion(maid, _fuse, value, default)
	end
	local inst = Source.tertiary(
		convert(style, DEFAULTS.TERTIARY.STYLE),
		convert(onSubmit, DEFAULTS.TERTIARY.ON_SUBMIT),
		convert(label, DEFAULTS.TERTIARY.LABEL),
		convert(initialText, DEFAULTS.TERTIARY.INITIAL_TEXT),
		convert(onInput, DEFAULTS.TERTIARY.ON_INPUT),
		convert(supportingText, DEFAULTS.TERTIARY.SUPPORTING_TEXT),
		convert(icon, DEFAULTS.TERTIARY.ICON),
		convert(characterLimit, DEFAULTS.TERTIARY.CHARACTER_LIMIT),
		convert(isError, DEFAULTS.TERTIARY.IS_ERROR),
		convert(elevation, DEFAULTS.TERTIARY.ELEVATION),
		convert(isEnabled, DEFAULTS.TERTIARY.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

return Interface


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))

local React = require(_Packages:WaitForChild("React"))
local ReactRoblox = require(_Packages:WaitForChild("ReactRoblox"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))

local Source = require(script.Parent:WaitForChild("ColdFusion"))

-- Types
type Maid = Maid.Maid
type Style = Style.Style
type FontData = Types.FontData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type ImageData = Types.ImageData
type CanBeState<V> = ColdFusion.CanBeState<V>
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Class
local Interface = {}

do
	local NewTextFieldOutlined = React.Component:extend("NewTextFieldOutlined")
	NewTextFieldOutlined.defaultProps = {
		onSubmit = DEFAULTS.NEW.ON_SUBMIT,
		onInput = DEFAULTS.NEW.ON_INPUT,
		initialText = DEFAULTS.NEW.INITIAL_TEXT,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		isError = DEFAULTS.NEW.IS_ERROR,
		label = DEFAULTS.NEW.LABEL,
		characterLimit = DEFAULTS.NEW.CHARACTER_LIMIT,
		supportingText = DEFAULTS.NEW.SUPPORTING_TEXT,
		icon = DEFAULTS.NEW.ICON,
		hightlightColor = DEFAULTS.NEW.HIGHTLIGHT_COLOR,
		errorColor = DEFAULTS.NEW.ERROR_COLOR,
		borderColor = DEFAULTS.NEW.BORDER_COLOR,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		labelColor = DEFAULTS.NEW.LABEL_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		bodyFontData = DEFAULTS.NEW.BODY_FONT_DATA,
		supportFontData = DEFAULTS.NEW.SUPPORT_FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewTextFieldOutlined:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			onSubmit = _Value(self.defaultProps.onSubmit),
			onInput = _Value(self.defaultProps.onInput),
			initialText = _Value(self.defaultProps.initialText),
			isEnabled = _Value(self.defaultProps.isEnabled),
			isError = _Value(self.defaultProps.isError),
			label = _Value(self.defaultProps.label),
			characterLimit = _Value(self.defaultProps.characterLimit),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			hightlightColor = _Value(self.defaultProps.hightlightColor),
			errorColor = _Value(self.defaultProps.errorColor),
			borderColor = _Value(self.defaultProps.borderColor),
			textColor = _Value(self.defaultProps.textColor),
			labelColor = _Value(self.defaultProps.labelColor),
			elevation = _Value(self.defaultProps.elevation),
			schemeType = _Value(self.defaultProps.schemeType),
			bodyFontData = _Value(self.defaultProps.bodyFontData),
			supportFontData = _Value(self.defaultProps.supportFontData),
			scale = _Value(self.defaultProps.scale),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.new(
			self._internalStates.onSubmit,
			self._internalStates.onInput,
			self._internalStates.initialText,
			self._internalStates.isEnabled,
			self._internalStates.isError,
			self._internalStates.label,
			self._internalStates.characterLimit,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.hightlightColor,
			self._internalStates.errorColor,
			self._internalStates.borderColor,
			self._internalStates.textColor,
			self._internalStates.labelColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.bodyFontData,
			self._internalStates.supportFontData,
			self._internalStates.scale
		)
	end

	function NewTextFieldOutlined:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return React.createElement(ReactRoblox.createPortal, props)
	end
	function NewTextFieldOutlined:componentDidMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function NewTextFieldOutlined:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.New = NewTextFieldOutlined
end

do
	local PrimaryTextFieldOutlined = React.Component:extend("PrimaryTextFieldOutlined")
	PrimaryTextFieldOutlined.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		onSubmit = DEFAULTS.PRIMARY.ON_SUBMIT,
		label = DEFAULTS.PRIMARY.LABEL,
		initialText = DEFAULTS.PRIMARY.INITIAL_TEXT,
		onInput = DEFAULTS.PRIMARY.ON_INPUT,
		supportingText = DEFAULTS.PRIMARY.SUPPORTING_TEXT,
		icon = DEFAULTS.PRIMARY.ICON,
		characterLimit = DEFAULTS.PRIMARY.CHARACTER_LIMIT,
		isError = DEFAULTS.PRIMARY.IS_ERROR,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	function PrimaryTextFieldOutlined:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.primary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function PrimaryTextFieldOutlined:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return React.createElement(ReactRoblox.createPortal, props)
	end
	function PrimaryTextFieldOutlined:componentDidMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function PrimaryTextFieldOutlined:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Primary = PrimaryTextFieldOutlined
end

do
	local SecondaryTextFieldOutlined = React.Component:extend("SecondaryTextFieldOutlined")
	SecondaryTextFieldOutlined.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		onSubmit = DEFAULTS.SECONDARY.ON_SUBMIT,
		label = DEFAULTS.SECONDARY.LABEL,
		initialText = DEFAULTS.SECONDARY.INITIAL_TEXT,
		onInput = DEFAULTS.SECONDARY.ON_INPUT,
		supportingText = DEFAULTS.SECONDARY.SUPPORTING_TEXT,
		icon = DEFAULTS.SECONDARY.ICON,
		characterLimit = DEFAULTS.SECONDARY.CHARACTER_LIMIT,
		isError = DEFAULTS.SECONDARY.IS_ERROR,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	function SecondaryTextFieldOutlined:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.secondary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function SecondaryTextFieldOutlined:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return React.createElement(ReactRoblox.createPortal, props)
	end
	function SecondaryTextFieldOutlined:componentDidMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function SecondaryTextFieldOutlined:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Secondary = SecondaryTextFieldOutlined
end

do
	local TertiaryTextFieldOutlined = React.Component:extend("TertiaryTextFieldOutlined")
	TertiaryTextFieldOutlined.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		onSubmit = DEFAULTS.TERTIARY.ON_SUBMIT,
		label = DEFAULTS.TERTIARY.LABEL,
		initialText = DEFAULTS.TERTIARY.INITIAL_TEXT,
		onInput = DEFAULTS.TERTIARY.ON_INPUT,
		supportingText = DEFAULTS.TERTIARY.SUPPORTING_TEXT,
		icon = DEFAULTS.TERTIARY.ICON,
		characterLimit = DEFAULTS.TERTIARY.CHARACTER_LIMIT,
		isError = DEFAULTS.TERTIARY.IS_ERROR,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	function TertiaryTextFieldOutlined:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.tertiary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function TertiaryTextFieldOutlined:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return React.createElement(ReactRoblox.createPortal, props)
	end
	function TertiaryTextFieldOutlined:componentDidMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function TertiaryTextFieldOutlined:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Tertiary = TertiaryTextFieldOutlined
end

return Interface


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))
local Roact = require(_Packages:WaitForChild("Roact"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))

local Source = require(script.Parent:WaitForChild("ColdFusion"))

-- Types
type Maid = Maid.Maid
type Style = Style.Style
type FontData = Types.FontData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type ImageData = Types.ImageData
type CanBeState<V> = ColdFusion.CanBeState<V>
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Class
local Interface = {}

do
	local NewTextFieldOutlined = Roact.Component:extend("NewTextFieldOutlined")
	NewTextFieldOutlined.defaultProps = {
		onSubmit = DEFAULTS.NEW.ON_SUBMIT,
		onInput = DEFAULTS.NEW.ON_INPUT,
		initialText = DEFAULTS.NEW.INITIAL_TEXT,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		isError = DEFAULTS.NEW.IS_ERROR,
		label = DEFAULTS.NEW.LABEL,
		characterLimit = DEFAULTS.NEW.CHARACTER_LIMIT,
		supportingText = DEFAULTS.NEW.SUPPORTING_TEXT,
		icon = DEFAULTS.NEW.ICON,
		hightlightColor = DEFAULTS.NEW.HIGHTLIGHT_COLOR,
		errorColor = DEFAULTS.NEW.ERROR_COLOR,
		borderColor = DEFAULTS.NEW.BORDER_COLOR,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		labelColor = DEFAULTS.NEW.LABEL_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		bodyFontData = DEFAULTS.NEW.BODY_FONT_DATA,
		supportFontData = DEFAULTS.NEW.SUPPORT_FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewTextFieldOutlined:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			onSubmit = _Value(self.defaultProps.onSubmit),
			onInput = _Value(self.defaultProps.onInput),
			initialText = _Value(self.defaultProps.initialText),
			isEnabled = _Value(self.defaultProps.isEnabled),
			isError = _Value(self.defaultProps.isError),
			label = _Value(self.defaultProps.label),
			characterLimit = _Value(self.defaultProps.characterLimit),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			hightlightColor = _Value(self.defaultProps.hightlightColor),
			errorColor = _Value(self.defaultProps.errorColor),
			borderColor = _Value(self.defaultProps.borderColor),
			textColor = _Value(self.defaultProps.textColor),
			labelColor = _Value(self.defaultProps.labelColor),
			elevation = _Value(self.defaultProps.elevation),
			schemeType = _Value(self.defaultProps.schemeType),
			bodyFontData = _Value(self.defaultProps.bodyFontData),
			supportFontData = _Value(self.defaultProps.supportFontData),
			scale = _Value(self.defaultProps.scale),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.new(
			self._internalStates.onSubmit,
			self._internalStates.onInput,
			self._internalStates.initialText,
			self._internalStates.isEnabled,
			self._internalStates.isError,
			self._internalStates.label,
			self._internalStates.characterLimit,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.hightlightColor,
			self._internalStates.errorColor,
			self._internalStates.borderColor,
			self._internalStates.textColor,
			self._internalStates.labelColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.bodyFontData,
			self._internalStates.supportFontData,
			self._internalStates.scale
		)
	end

	function NewTextFieldOutlined:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return Roact.createElement(Roact.Portal, props)
	end
	function NewTextFieldOutlined:didMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function NewTextFieldOutlined:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.New = NewTextFieldOutlined
end

do
	local PrimaryTextFieldOutlined = Roact.Component:extend("PrimaryTextFieldOutlined")
	PrimaryTextFieldOutlined.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		onSubmit = DEFAULTS.PRIMARY.ON_SUBMIT,
		label = DEFAULTS.PRIMARY.LABEL,
		initialText = DEFAULTS.PRIMARY.INITIAL_TEXT,
		onInput = DEFAULTS.PRIMARY.ON_INPUT,
		supportingText = DEFAULTS.PRIMARY.SUPPORTING_TEXT,
		icon = DEFAULTS.PRIMARY.ICON,
		characterLimit = DEFAULTS.PRIMARY.CHARACTER_LIMIT,
		isError = DEFAULTS.PRIMARY.IS_ERROR,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	function PrimaryTextFieldOutlined:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.primary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function PrimaryTextFieldOutlined:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return Roact.createElement(Roact.Portal, props)
	end
	function PrimaryTextFieldOutlined:didMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function PrimaryTextFieldOutlined:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Primary = PrimaryTextFieldOutlined
end

do
	local SecondaryTextFieldOutlined = Roact.Component:extend("SecondaryTextFieldOutlined")
	SecondaryTextFieldOutlined.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		onSubmit = DEFAULTS.SECONDARY.ON_SUBMIT,
		label = DEFAULTS.SECONDARY.LABEL,
		initialText = DEFAULTS.SECONDARY.INITIAL_TEXT,
		onInput = DEFAULTS.SECONDARY.ON_INPUT,
		supportingText = DEFAULTS.SECONDARY.SUPPORTING_TEXT,
		icon = DEFAULTS.SECONDARY.ICON,
		characterLimit = DEFAULTS.SECONDARY.CHARACTER_LIMIT,
		isError = DEFAULTS.SECONDARY.IS_ERROR,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	function SecondaryTextFieldOutlined:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.secondary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function SecondaryTextFieldOutlined:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return Roact.createElement(Roact.Portal, props)
	end
	function SecondaryTextFieldOutlined:didMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function SecondaryTextFieldOutlined:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Secondary = SecondaryTextFieldOutlined
end

do
	local TertiaryTextFieldOutlined = Roact.Component:extend("TertiaryTextFieldOutlined")
	TertiaryTextFieldOutlined.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		onSubmit = DEFAULTS.TERTIARY.ON_SUBMIT,
		label = DEFAULTS.TERTIARY.LABEL,
		initialText = DEFAULTS.TERTIARY.INITIAL_TEXT,
		onInput = DEFAULTS.TERTIARY.ON_INPUT,
		supportingText = DEFAULTS.TERTIARY.SUPPORTING_TEXT,
		icon = DEFAULTS.TERTIARY.ICON,
		characterLimit = DEFAULTS.TERTIARY.CHARACTER_LIMIT,
		isError = DEFAULTS.TERTIARY.IS_ERROR,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	function TertiaryTextFieldOutlined:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			style = _Value(self.defaultProps.style),
			onSubmit = _Value(self.defaultProps.onSubmit),
			label = _Value(self.defaultProps.label),
			initialText = _Value(self.defaultProps.initialText),
			onInput = _Value(self.defaultProps.onInput),
			supportingText = _Value(self.defaultProps.supportingText),
			icon = _Value(self.defaultProps.icon),
			characterLimit = _Value(self.defaultProps.characterLimit),
			isError = _Value(self.defaultProps.isError),
			elevation = _Value(self.defaultProps.elevation),
			isEnabled = _Value(self.defaultProps.isEnabled),
		}
		table.freeze(self._internalStates)
		for k, v in pairs(initialProps) do
			if self._internalStates[k] then
				self._internalStates[k]:Set(v)
			end
		end
		self._instance = Source.tertiary(
			self._internalStates.style,
			self._internalStates.onSubmit,
			self._internalStates.label,
			self._internalStates.initialText,
			self._internalStates.onInput,
			self._internalStates.supportingText,
			self._internalStates.icon,
			self._internalStates.characterLimit,
			self._internalStates.isError,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function TertiaryTextFieldOutlined:render()
		local props = {
			target = self._instance,
		}
		for k, v in pairs(self.props) do
			if self.props[k] ~= v then
				if self._internalStates[k] then
					if v == nil then
						v = self.defaultProps[k]
					end
					self._internalStates[k]:Set(v)
				else
					props[k] = v
				end
			end
		end
		return Roact.createElement(Roact.Portal, props)
	end
	function TertiaryTextFieldOutlined:didMount()
		for k, v in pairs(self) do
			if typeof(v) == "table" then
				if v["virtualNode"] then
					if self._instance.Parent ~= v["virtualNode"]["hostParent"] then
						self._instance.Parent = v["virtualNode"]["hostParent"]
					end
					break
				end
			end
		end
	end
	function TertiaryTextFieldOutlined:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Tertiary = TertiaryTextFieldOutlined
end

return Interface


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))

local Translators = require(_Package:WaitForChild("Translators"))

local Source = require(script.Parent:WaitForChild("ColdFusion"))

-- Types
type Maid = Maid.Maid
type Style = Style.Style
type FontData = Types.FontData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type ImageData = Types.ImageData
type CanBeState<V> = ColdFusion.CanBeState<V>
type Wrapper<BaseInstance, Definition, ClassName> = Translators.Wrapper<BaseInstance, Definition, ClassName>

export type OutlinedWrapperDefinition = {
	OnSubmit: (text: string?) -> string?,
	OnInput: (text: string?) -> string?,
	InitialText: string?,
	IsEnabled: boolean,
	IsError: boolean,
	Label: string,
	CharacterLimit: number?,
	SupportingText: string?,
	Icon: ImageData?,
	HightlightColor: Color3,
	ErrorColor: Color3,
	BorderColor: Color3,
	TextColor: Color3,
	LabelColor: Color3,
	Elevation: number,
	SchemeType: Enums.SchemeType,
	BodyFontData: FontData,
	SupportFontData: FontData,
	Scale: number,
}
export type OutlinedWrapper = Wrapper<GuiObject, OutlinedWrapperDefinition, "Outlined">

export type StyledOutlinedWrapperDefinition = {
	Style: Style,
	OnSubmit: (text: string?) -> string?,
	Label: string,
	InitialText: string?,
	OnInput: ((text: string?) -> string?)?,
	SupportingText: string?,
	Icon: ImageData?,
	CharacterLimit: number?,
	IsError: boolean?,
	Elevation: number?,
	IsEnabled: boolean?,
}
export type StyledOutlinedWrapper = Wrapper<GuiObject, StyledOutlinedWrapperDefinition, "StyledOutlined">
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Interface
local Interface = {}

function Interface.new(): StyledOutlinedWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		OnSubmit = _Value(function(text: string?)
			return text
		end),
		OnInput = _Value(function(text: string?)
			return text
		end),
		InitialText = _Value(""),
		IsEnabled = _Value(true),
		IsError = _Value(false),
		Label = _Value("Label"),
		CharacterLimit = _Value(nil),
		SupportingText = _Value(""),
		Icon = _Value(nil),
		HightlightColor = _Value(Color3.new()),
		ErrorColor = _Value(Color3.new()),
		BorderColor = _Value(Color3.new()),
		TextColor = _Value(Color3.new()),
		LabelColor = _Value(Color3.new()),
		Elevation = _Value(0),
		SchemeType = _Value(Enums.SchemeType.Light),
		BodyFontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		SupportFontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		Scale = _Value(1),
	}
	local defaults: { [string]: unknown? } = {
		onSubmit = DEFAULTS.NEW.ON_SUBMIT,
		onInput = DEFAULTS.NEW.ON_INPUT,
		initialText = DEFAULTS.NEW.INITIAL_TEXT,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		isError = DEFAULTS.NEW.IS_ERROR,
		label = DEFAULTS.NEW.LABEL,
		characterLimit = DEFAULTS.NEW.CHARACTER_LIMIT,
		supportingText = DEFAULTS.NEW.SUPPORTING_TEXT,
		icon = DEFAULTS.NEW.ICON,
		hightlightColor = DEFAULTS.NEW.HIGHTLIGHT_COLOR,
		errorColor = DEFAULTS.NEW.ERROR_COLOR,
		borderColor = DEFAULTS.NEW.BORDER_COLOR,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		labelColor = DEFAULTS.NEW.LABEL_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		bodyFontData = DEFAULTS.NEW.BODY_FONT_DATA,
		supportFontData = DEFAULTS.NEW.SUPPORT_FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	local inst: GuiObject = Source.new(
		definition.OnSubmit,
		definition.OnInput,
		definition.InitialText,
		definition.IsEnabled,
		definition.IsError,
		definition.Label,
		definition.CharacterLimit,
		definition.SupportingText,
		definition.Icon,
		definition.HightlightColor,
		definition.ErrorColor,
		definition.BorderColor,
		definition.TextColor,
		definition.LabelColor,
		definition.Elevation,
		definition.SchemeType,
		definition.BodyFontData,
		definition.SupportFontData,
		definition.Scale
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledOutlined", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primary(): StyledOutlinedWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Style = _Value(Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7))),
		OnSubmit = _Value(function(text: string?)
			return text
		end),
		Label = _Value("Label"),
		InitialText = _Value(""),
		OnInput = _Value(function(text: string?)
			return text
		end),
		SupportingText = _Value(""),
		Icon = _Value(nil),
		CharacterLimit = _Value(nil),
		IsError = _Value(false),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY.STYLE,
		onSubmit = DEFAULTS.PRIMARY.ON_SUBMIT,
		label = DEFAULTS.PRIMARY.LABEL,
		initialText = DEFAULTS.PRIMARY.INITIAL_TEXT,
		onInput = DEFAULTS.PRIMARY.ON_INPUT,
		supportingText = DEFAULTS.PRIMARY.SUPPORTING_TEXT,
		icon = DEFAULTS.PRIMARY.ICON,
		characterLimit = DEFAULTS.PRIMARY.CHARACTER_LIMIT,
		isError = DEFAULTS.PRIMARY.IS_ERROR,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.primary(
		definition.Style,
		definition.OnSubmit,
		definition.Label,
		definition.InitialText,
		definition.OnInput,
		definition.SupportingText,
		definition.Icon,
		definition.CharacterLimit,
		definition.IsError,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledOutlined", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondary(): StyledOutlinedWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Style = _Value(Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7))),
		OnSubmit = _Value(function(text: string?)
			return text
		end),
		Label = _Value("Label"),
		InitialText = _Value(""),
		OnInput = _Value(function(text: string?)
			return text
		end),
		SupportingText = _Value(""),
		Icon = _Value(nil),
		CharacterLimit = _Value(nil),
		IsError = _Value(false),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY.STYLE,
		onSubmit = DEFAULTS.SECONDARY.ON_SUBMIT,
		label = DEFAULTS.SECONDARY.LABEL,
		initialText = DEFAULTS.SECONDARY.INITIAL_TEXT,
		onInput = DEFAULTS.SECONDARY.ON_INPUT,
		supportingText = DEFAULTS.SECONDARY.SUPPORTING_TEXT,
		icon = DEFAULTS.SECONDARY.ICON,
		characterLimit = DEFAULTS.SECONDARY.CHARACTER_LIMIT,
		isError = DEFAULTS.SECONDARY.IS_ERROR,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.secondary(
		definition.Style,
		definition.OnSubmit,
		definition.Label,
		definition.InitialText,
		definition.OnInput,
		definition.SupportingText,
		definition.Icon,
		definition.CharacterLimit,
		definition.IsError,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledOutlined", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiary(): StyledOutlinedWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Style = _Value(Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7))),
		OnSubmit = _Value(function(text: string?)
			return text
		end),
		Label = _Value("Label"),
		InitialText = _Value(""),
		OnInput = _Value(function(text: string?)
			return text
		end),
		SupportingText = _Value(""),
		Icon = _Value(nil),
		CharacterLimit = _Value(nil),
		IsError = _Value(false),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY.STYLE,
		onSubmit = DEFAULTS.TERTIARY.ON_SUBMIT,
		label = DEFAULTS.TERTIARY.LABEL,
		initialText = DEFAULTS.TERTIARY.INITIAL_TEXT,
		onInput = DEFAULTS.TERTIARY.ON_INPUT,
		supportingText = DEFAULTS.TERTIARY.SUPPORTING_TEXT,
		icon = DEFAULTS.TERTIARY.ICON,
		characterLimit = DEFAULTS.TERTIARY.CHARACTER_LIMIT,
		isError = DEFAULTS.TERTIARY.IS_ERROR,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.tertiary(
		definition.Style,
		definition.OnSubmit,
		definition.Label,
		definition.InitialText,
		definition.OnInput,
		definition.SupportingText,
		definition.Icon,
		definition.CharacterLimit,
		definition.IsError,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledOutlined", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

return Interface


--!strict
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(game:GetService("ReplicatedStorage"):WaitForChild("Packages"):WaitForChild("Maid"))

-- Modules
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))
local Icons = require(_Packages:WaitForChild("MaterialIcons"))

-- Types
-- Constants
-- Variables
-- References

-- Private Functions
-- Class
return function(frame: Frame)
	local maid = Maid.new()
	task.spawn(function()
		local function makeHalfFrame(isDarkMode: boolean, color: Color3): Frame
			local style = Style.new(
				1.5,
				Enum.Font.SourceSans,
				if isDarkMode then Enums.SchemeType.Dark else Enums.SchemeType.Light,
				color
			)

			local halfFrame = maid:GiveTask(Instance.new("Frame"))
			halfFrame.BackgroundColor3 = style:GetColor(Enums.ColorRoleType.Surface)
			halfFrame.BorderSizePixel = 0

			local listLayout = maid:GiveTask(Instance.new("UIListLayout"))
			listLayout.FillDirection = Enum.FillDirection.Vertical
			listLayout.Padding = UDim.new(0, 10)
			listLayout.VerticalAlignment = Enum.VerticalAlignment.Center
			listLayout.HorizontalAlignment = Enum.HorizontalAlignment.Center
			listLayout.Parent = halfFrame

			local Module = require(script.Parent:WaitForChild("ColdFusion"))

			do
				local button = maid:GiveTask(
					Module.new(
						function(input: string?): string?
							print(`submit: {input}`)
							return input
						end,
						function(input: string?): string?
							print(`input: {input}`)
							return input
						end,
						nil,
						true,
						false,
						"Label",
						20,
						"Supporting Text",
						Icons.settings,
						style:GetColor(Enums.ColorRoleType.Primary, 1),
						style:GetColor(Enums.ColorRoleType.Error, 1),
						style:GetColor(Enums.ColorRoleType.Outline, 1),
						style:GetColor(Enums.ColorRoleType.OnSurface, 1),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),
						0,
						style.SchemeType,
						style:GetFontData(Enums.FontType.BodyLarge),
						style:GetFontData(Enums.FontType.BodySmall),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end
			do
				local button = maid:GiveTask(
					Module.new(
						function(input: string?): string?
							print(`submit: {input}`)
							return input
						end,
						function(input: string?): string?
							print(`input: {input}`)
							return input
						end,
						nil,
						true,
						false,
						"Label",
						nil,
						nil,
						nil,
						style:GetColor(Enums.ColorRoleType.Primary, 1),
						style:GetColor(Enums.ColorRoleType.Error, 1),
						style:GetColor(Enums.ColorRoleType.Outline, 1),
						style:GetColor(Enums.ColorRoleType.OnSurface, 1),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),
						0,
						style.SchemeType,
						style:GetFontData(Enums.FontType.BodyLarge),
						style:GetFontData(Enums.FontType.BodySmall),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end
			-- do
			-- 	local button = maid:GiveTask(
			-- 		Module.new(
			-- 			function(input: string?): string?
			-- 				print(`submit: {input}`)
			-- 				return input
			-- 			end,
			-- 			function(input: string?): string?
			-- 				print(`input: {input}`)
			-- 				return input
			-- 			end,
			-- 			nil,
			-- 			true,
			-- 			true,
			-- 			"Label",
			-- 			20,
			-- 			"Supporting Text",
			-- 			Icons.settings,
			-- 			style:GetColor(Enums.ColorRoleType.Primary, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Error, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Outline, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurface, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),

			-- 			0,
			-- 			style.SchemeType,
			-- 			style:GetFontData(Enums.FontType.BodyLarge),
			-- 			style:GetFontData(Enums.FontType.BodySmall),
			-- 			style.Scale
			-- 		)
			-- 	)
			-- 	button.Parent = halfFrame
			-- end

			-- do
			-- 	local button = maid:GiveTask(
			-- 		Module.new(
			-- 			function(input: string?): string?
			-- 				print(`submit: {input}`)
			-- 				return input
			-- 			end,
			-- 			function(input: string?): string?
			-- 				print(`input: {input}`)
			-- 				return input
			-- 			end,
			-- 			nil,
			-- 			false,
			-- 			false,
			-- 			"Label",
			-- 			20,
			-- 			"Supporting Text",
			-- 			Icons.settings,
			-- 			style:GetColor(Enums.ColorRoleType.Primary, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Error, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Outline, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurface, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),

			-- 			0,
			-- 			style.SchemeType,
			-- 			style:GetFontData(Enums.FontType.BodyLarge),
			-- 			style:GetFontData(Enums.FontType.BodySmall),
			-- 			style.Scale
			-- 		)
			-- 	)
			-- 	button.Parent = halfFrame
			-- end

			-- do
			-- 	local button = maid:GiveTask(
			-- 		Module.new(
			-- 			function(input: string?): string?
			-- 				print(`submit: {input}`)
			-- 				return input
			-- 			end,
			-- 			function(input: string?): string?
			-- 				print(`input: {input}`)
			-- 				return input
			-- 			end,
			-- 			nil,
			-- 			true,
			-- 			false,
			-- 			"Label",
			-- 			20,
			-- 			"Supporting Text",
			-- 			Icons.settings,
			-- 			style:GetColor(Enums.ColorRoleType.Primary, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Error, 1),
			-- 			style:GetColor(Enums.ColorRoleType.Outline, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurface, 1),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurfaceVariant, 1),

			-- 			0,
			-- 			style.SchemeType,
			-- 			style:GetFontData(Enums.FontType.BodyLarge),
			-- 			style:GetFontData(Enums.FontType.BodySmall),
			-- 			style.Scale
			-- 		)
			-- 	)
			-- 	button.Parent = halfFrame
			-- end

			return halfFrame
		end

		local COLORS: { [number]: Color3 } = {
			Color3.fromHSV(0, 0.9, 0.8),
			-- Color3.fromHSV(0, 0.25, 0.8),
			-- Color3.fromHSV(0, 0.9, 0.5),
			Color3.fromHSV(0.6, 0.9, 0.7),
			-- Color3.fromHSV(0.35, 0.9, 0.7),
			-- Color3.fromHSV(0.1, 0.9, 0.7),
		}

		for i, color in ipairs(COLORS) do
			local x = (i - 1) / #COLORS
			local width = 1 / #COLORS
			local dark = makeHalfFrame(true, color)

			dark.Size = UDim2.fromScale(width, 0.5)
			dark.Position = UDim2.fromScale(x, 0.5)
			dark.Parent = frame

			local bright = makeHalfFrame(false, color)
			bright.Size = UDim2.fromScale(width, 0.5)
			bright.Position = UDim2.fromScale(x, 0)
			bright.Parent = frame
		end
	end)

	return function()
		maid:Destroy()
	end
end