--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.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 NewSwitch = React.Component:extend("NewSwitch")
	NewSwitch.defaultProps = {
		onSelect = DEFAULTS.NEW.ON_SELECT,
		initialSelection = DEFAULTS.NEW.INITIAL_SELECTION,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		includeIconOnSelected = DEFAULTS.NEW.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.NEW.INCLUDE_ICON_ON_DESELECTED,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		onBackgroundColor = DEFAULTS.NEW.ON_BACKGROUND_COLOR,
		fillColor = DEFAULTS.NEW.FILL_COLOR,
		buttonColor = DEFAULTS.NEW.BUTTON_COLOR,
		onButtonColor = DEFAULTS.NEW.ON_BUTTON_COLOR,
		disabledColor = DEFAULTS.NEW.DISABLED_COLOR,
		onDisabledColor = DEFAULTS.NEW.ON_DISABLED_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewSwitch:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			onSelect = _Value(self.defaultProps.onSelect),
			initialSelection = _Value(self.defaultProps.initialSelection),
			isEnabled = _Value(self.defaultProps.isEnabled),
			includeIconOnSelected = _Value(self.defaultProps.includeIconOnSelected),
			includeIconOnDeselected = _Value(self.defaultProps.includeIconOnDeselected),
			backgroundColor = _Value(self.defaultProps.backgroundColor),
			onBackgroundColor = _Value(self.defaultProps.onBackgroundColor),
			fillColor = _Value(self.defaultProps.fillColor),
			buttonColor = _Value(self.defaultProps.buttonColor),
			onButtonColor = _Value(self.defaultProps.onButtonColor),
			disabledColor = _Value(self.defaultProps.disabledColor),
			onDisabledColor = _Value(self.defaultProps.onDisabledColor),
			elevation = _Value(self.defaultProps.elevation),
			schemeType = _Value(self.defaultProps.schemeType),
			fontData = _Value(self.defaultProps.fontData),
			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.onSelect,
			self._internalStates.initialSelection,
			self._internalStates.isEnabled,
			self._internalStates.includeIconOnSelected,
			self._internalStates.includeIconOnDeselected,
			self._internalStates.backgroundColor,
			self._internalStates.onBackgroundColor,
			self._internalStates.fillColor,
			self._internalStates.buttonColor,
			self._internalStates.onButtonColor,
			self._internalStates.disabledColor,
			self._internalStates.onDisabledColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

	function NewSwitch: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 NewSwitch: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 NewSwitch:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.New = NewSwitch
end

do
	local PrimarySwitch = React.Component:extend("PrimarySwitch")
	PrimarySwitch.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		onSelect = DEFAULTS.PRIMARY.ON_SELECT,
		initialSelection = DEFAULTS.PRIMARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.PRIMARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.PRIMARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	function PrimarySwitch: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),
			onSelect = _Value(self.defaultProps.onSelect),
			initialSelection = _Value(self.defaultProps.initialSelection),
			includeIconOnSelected = _Value(self.defaultProps.includeIconOnSelected),
			includeIconOnDeselected = _Value(self.defaultProps.includeIconOnDeselected),
			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.onSelect,
			self._internalStates.initialSelection,
			self._internalStates.includeIconOnSelected,
			self._internalStates.includeIconOnDeselected,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function PrimarySwitch: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 PrimarySwitch: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 PrimarySwitch:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Primary = PrimarySwitch
end

do
	local SecondarySwitch = React.Component:extend("SecondarySwitch")
	SecondarySwitch.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		onSelect = DEFAULTS.SECONDARY.ON_SELECT,
		initialSelection = DEFAULTS.SECONDARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.SECONDARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.SECONDARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	function SecondarySwitch: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),
			onSelect = _Value(self.defaultProps.onSelect),
			initialSelection = _Value(self.defaultProps.initialSelection),
			includeIconOnSelected = _Value(self.defaultProps.includeIconOnSelected),
			includeIconOnDeselected = _Value(self.defaultProps.includeIconOnDeselected),
			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.onSelect,
			self._internalStates.initialSelection,
			self._internalStates.includeIconOnSelected,
			self._internalStates.includeIconOnDeselected,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function SecondarySwitch: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 SecondarySwitch: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 SecondarySwitch:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Secondary = SecondarySwitch
end

do
	local TertiarySwitch = React.Component:extend("TertiarySwitch")
	TertiarySwitch.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		onSelect = DEFAULTS.TERTIARY.ON_SELECT,
		initialSelection = DEFAULTS.TERTIARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.TERTIARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.TERTIARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	function TertiarySwitch: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),
			onSelect = _Value(self.defaultProps.onSelect),
			initialSelection = _Value(self.defaultProps.initialSelection),
			includeIconOnSelected = _Value(self.defaultProps.includeIconOnSelected),
			includeIconOnDeselected = _Value(self.defaultProps.includeIconOnDeselected),
			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.onSelect,
			self._internalStates.initialSelection,
			self._internalStates.includeIconOnSelected,
			self._internalStates.includeIconOnDeselected,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function TertiarySwitch: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 TertiarySwitch: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 TertiarySwitch:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Tertiary = TertiarySwitch
end

return Interface


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.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 NewSwitch = Roact.Component:extend("NewSwitch")
	NewSwitch.defaultProps = {
		onSelect = DEFAULTS.NEW.ON_SELECT,
		initialSelection = DEFAULTS.NEW.INITIAL_SELECTION,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		includeIconOnSelected = DEFAULTS.NEW.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.NEW.INCLUDE_ICON_ON_DESELECTED,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		onBackgroundColor = DEFAULTS.NEW.ON_BACKGROUND_COLOR,
		fillColor = DEFAULTS.NEW.FILL_COLOR,
		buttonColor = DEFAULTS.NEW.BUTTON_COLOR,
		onButtonColor = DEFAULTS.NEW.ON_BUTTON_COLOR,
		disabledColor = DEFAULTS.NEW.DISABLED_COLOR,
		onDisabledColor = DEFAULTS.NEW.ON_DISABLED_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewSwitch:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			onSelect = _Value(self.defaultProps.onSelect),
			initialSelection = _Value(self.defaultProps.initialSelection),
			isEnabled = _Value(self.defaultProps.isEnabled),
			includeIconOnSelected = _Value(self.defaultProps.includeIconOnSelected),
			includeIconOnDeselected = _Value(self.defaultProps.includeIconOnDeselected),
			backgroundColor = _Value(self.defaultProps.backgroundColor),
			onBackgroundColor = _Value(self.defaultProps.onBackgroundColor),
			fillColor = _Value(self.defaultProps.fillColor),
			buttonColor = _Value(self.defaultProps.buttonColor),
			onButtonColor = _Value(self.defaultProps.onButtonColor),
			disabledColor = _Value(self.defaultProps.disabledColor),
			onDisabledColor = _Value(self.defaultProps.onDisabledColor),
			elevation = _Value(self.defaultProps.elevation),
			schemeType = _Value(self.defaultProps.schemeType),
			fontData = _Value(self.defaultProps.fontData),
			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.onSelect,
			self._internalStates.initialSelection,
			self._internalStates.isEnabled,
			self._internalStates.includeIconOnSelected,
			self._internalStates.includeIconOnDeselected,
			self._internalStates.backgroundColor,
			self._internalStates.onBackgroundColor,
			self._internalStates.fillColor,
			self._internalStates.buttonColor,
			self._internalStates.onButtonColor,
			self._internalStates.disabledColor,
			self._internalStates.onDisabledColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

	function NewSwitch: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 NewSwitch: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 NewSwitch:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.New = NewSwitch
end

do
	local PrimarySwitch = Roact.Component:extend("PrimarySwitch")
	PrimarySwitch.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		onSelect = DEFAULTS.PRIMARY.ON_SELECT,
		initialSelection = DEFAULTS.PRIMARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.PRIMARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.PRIMARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	function PrimarySwitch: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),
			onSelect = _Value(self.defaultProps.onSelect),
			initialSelection = _Value(self.defaultProps.initialSelection),
			includeIconOnSelected = _Value(self.defaultProps.includeIconOnSelected),
			includeIconOnDeselected = _Value(self.defaultProps.includeIconOnDeselected),
			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.onSelect,
			self._internalStates.initialSelection,
			self._internalStates.includeIconOnSelected,
			self._internalStates.includeIconOnDeselected,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function PrimarySwitch: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 PrimarySwitch: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 PrimarySwitch:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Primary = PrimarySwitch
end

do
	local SecondarySwitch = Roact.Component:extend("SecondarySwitch")
	SecondarySwitch.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		onSelect = DEFAULTS.SECONDARY.ON_SELECT,
		initialSelection = DEFAULTS.SECONDARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.SECONDARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.SECONDARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	function SecondarySwitch: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),
			onSelect = _Value(self.defaultProps.onSelect),
			initialSelection = _Value(self.defaultProps.initialSelection),
			includeIconOnSelected = _Value(self.defaultProps.includeIconOnSelected),
			includeIconOnDeselected = _Value(self.defaultProps.includeIconOnDeselected),
			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.onSelect,
			self._internalStates.initialSelection,
			self._internalStates.includeIconOnSelected,
			self._internalStates.includeIconOnDeselected,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function SecondarySwitch: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 SecondarySwitch: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 SecondarySwitch:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Secondary = SecondarySwitch
end

do
	local TertiarySwitch = Roact.Component:extend("TertiarySwitch")
	TertiarySwitch.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		onSelect = DEFAULTS.TERTIARY.ON_SELECT,
		initialSelection = DEFAULTS.TERTIARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.TERTIARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.TERTIARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	function TertiarySwitch: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),
			onSelect = _Value(self.defaultProps.onSelect),
			initialSelection = _Value(self.defaultProps.initialSelection),
			includeIconOnSelected = _Value(self.defaultProps.includeIconOnSelected),
			includeIconOnDeselected = _Value(self.defaultProps.includeIconOnDeselected),
			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.onSelect,
			self._internalStates.initialSelection,
			self._internalStates.includeIconOnSelected,
			self._internalStates.includeIconOnDeselected,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

	function TertiarySwitch: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 TertiarySwitch: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 TertiarySwitch:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Tertiary = TertiarySwitch
end

return Interface


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.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 SwitchWrapperDefinition = {
	OnSelect: (isSelected: boolean) -> (),
	InitialSelection: boolean,
	IsEnabled: boolean,
	IncludeIconOnSelected: boolean,
	IncludeIconOnDeselected: boolean,
	BackgroundColor: Color3,
	OnBackgroundColor: Color3,
	FillColor: Color3,
	ButtonColor: Color3,
	OnButtonColor: Color3,
	DisabledColor: Color3,
	OnDisabledColor: Color3,
	Elevation: number,
	SchemeType: Enums.SchemeType,
	FontData: FontData,
	Scale: number,
}
export type SwitchWrapper = Wrapper<GuiObject, SwitchWrapperDefinition, "Switch">

export type StyledSwitchWrapperDefinition = {
	Style: Style,
	OnSelect: (isSelected: boolean) -> (),
	InitialSelection: boolean,
	IncludeIconOnSelected: boolean?,
	IncludeIconOnDeselected: boolean?,
	Elevation: number?,
	IsEnabled: boolean?,
}
export type StyledSwitchWrapper = Wrapper<GuiObject, StyledSwitchWrapperDefinition, "StyledSwitch">
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Interface
local Interface = {}

function Interface.new(): StyledSwitchWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		OnSelect = _Value(function(isSelected: boolean) end),
		InitialSelection = _Value(false),
		IsEnabled = _Value(true),
		IncludeIconOnSelected = _Value(true),
		IncludeIconOnDeselected = _Value(true),
		BackgroundColor = _Value(Color3.new()),
		OnBackgroundColor = _Value(Color3.new()),
		FillColor = _Value(Color3.new()),
		ButtonColor = _Value(Color3.new()),
		OnButtonColor = _Value(Color3.new()),
		DisabledColor = _Value(Color3.new()),
		OnDisabledColor = _Value(Color3.new()),
		Elevation = _Value(0),
		SchemeType = _Value(Enums.SchemeType.Light),
		FontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		Scale = _Value(1),
	}
	local defaults: { [string]: unknown? } = {
		onSelect = DEFAULTS.NEW.ON_SELECT,
		initialSelection = DEFAULTS.NEW.INITIAL_SELECTION,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		includeIconOnSelected = DEFAULTS.NEW.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.NEW.INCLUDE_ICON_ON_DESELECTED,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		onBackgroundColor = DEFAULTS.NEW.ON_BACKGROUND_COLOR,
		fillColor = DEFAULTS.NEW.FILL_COLOR,
		buttonColor = DEFAULTS.NEW.BUTTON_COLOR,
		onButtonColor = DEFAULTS.NEW.ON_BUTTON_COLOR,
		disabledColor = DEFAULTS.NEW.DISABLED_COLOR,
		onDisabledColor = DEFAULTS.NEW.ON_DISABLED_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	local inst: GuiObject = Source.new(
		definition.OnSelect,
		definition.InitialSelection,
		definition.IsEnabled,
		definition.IncludeIconOnSelected,
		definition.IncludeIconOnDeselected,
		definition.BackgroundColor,
		definition.OnBackgroundColor,
		definition.FillColor,
		definition.ButtonColor,
		definition.OnButtonColor,
		definition.DisabledColor,
		definition.OnDisabledColor,
		definition.Elevation,
		definition.SchemeType,
		definition.FontData,
		definition.Scale
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSwitch", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primary(): StyledSwitchWrapper
	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))),
		OnSelect = _Value(function(isSelected: boolean) end),
		InitialSelection = _Value(false),
		IncludeIconOnSelected = _Value(true),
		IncludeIconOnDeselected = _Value(true),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY.STYLE,
		onSelect = DEFAULTS.PRIMARY.ON_SELECT,
		initialSelection = DEFAULTS.PRIMARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.PRIMARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.PRIMARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.primary(
		definition.Style,
		definition.OnSelect,
		definition.InitialSelection,
		definition.IncludeIconOnSelected,
		definition.IncludeIconOnDeselected,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSwitch", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondary(): StyledSwitchWrapper
	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))),
		OnSelect = _Value(function(isSelected: boolean) end),
		InitialSelection = _Value(false),
		IncludeIconOnSelected = _Value(true),
		IncludeIconOnDeselected = _Value(true),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY.STYLE,
		onSelect = DEFAULTS.SECONDARY.ON_SELECT,
		initialSelection = DEFAULTS.SECONDARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.SECONDARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.SECONDARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.secondary(
		definition.Style,
		definition.OnSelect,
		definition.InitialSelection,
		definition.IncludeIconOnSelected,
		definition.IncludeIconOnDeselected,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSwitch", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiary(): StyledSwitchWrapper
	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))),
		OnSelect = _Value(function(isSelected: boolean) end),
		InitialSelection = _Value(false),
		IncludeIconOnSelected = _Value(true),
		IncludeIconOnDeselected = _Value(true),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY.STYLE,
		onSelect = DEFAULTS.TERTIARY.ON_SELECT,
		initialSelection = DEFAULTS.TERTIARY.INITIAL_SELECTION,
		includeIconOnSelected = DEFAULTS.TERTIARY.INCLUDE_ICON_ON_SELECTED,
		includeIconOnDeselected = DEFAULTS.TERTIARY.INCLUDE_ICON_ON_DESELECTED,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.tertiary(
		definition.Style,
		definition.OnSelect,
		definition.InitialSelection,
		definition.IncludeIconOnSelected,
		definition.IncludeIconOnDeselected,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSwitch", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

return Interface


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

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

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

-- 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(isSelected: boolean?)
							print("is selected", isSelected)
						end,
						true,
						true,
						true,
						true,
						style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest),
						style:GetColor(Enums.ColorRoleType.Outline),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						style:GetColor(Enums.ColorRoleType.OnPrimaryContainer),
						style:GetColor(Enums.ColorRoleType.Surface),
						style:GetColor(Enums.ColorRoleType.OnSurface),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(
					Module.new(
						function(isSelected: boolean?)
							print("is selected", isSelected)
						end,
						true,
						false,
						true,
						true,
						style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest),
						style:GetColor(Enums.ColorRoleType.Outline),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						style:GetColor(Enums.ColorRoleType.OnPrimaryContainer),
						style:GetColor(Enums.ColorRoleType.Surface),
						style:GetColor(Enums.ColorRoleType.OnSurface),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(
					Module.new(
						function(isSelected: boolean?)
							print("is selected", isSelected)
						end,
						false,
						false,
						true,
						true,
						style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest),
						style:GetColor(Enums.ColorRoleType.Outline),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						style:GetColor(Enums.ColorRoleType.OnPrimaryContainer),
						style:GetColor(Enums.ColorRoleType.Surface),
						style:GetColor(Enums.ColorRoleType.OnSurface),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(
					Module.new(
						function(isSelected: boolean?)
							print("is selected", isSelected)
						end,
						false,
						false,
						false,
						false,
						style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest),
						style:GetColor(Enums.ColorRoleType.Outline),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						style:GetColor(Enums.ColorRoleType.OnPrimaryContainer),
						style:GetColor(Enums.ColorRoleType.Surface),
						style:GetColor(Enums.ColorRoleType.OnSurface),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(
					Module.new(
						function(isSelected: boolean?)
							print("is selected", isSelected)
						end,
						false,
						true,
						false,
						false,
						style:GetColor(Enums.ColorRoleType.SurfaceContainerHighest),
						style:GetColor(Enums.ColorRoleType.Outline),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						style:GetColor(Enums.ColorRoleType.OnPrimaryContainer),
						style:GetColor(Enums.ColorRoleType.Surface),
						style:GetColor(Enums.ColorRoleType.OnSurface),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						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
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))

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

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

-- 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(isSelected: boolean)
					print("is selected", isSelected)
				end, true))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.secondary(style, function(isSelected: boolean)
					print("is selected", isSelected)
				end, true))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.tertiary(style, function(isSelected: boolean)
					print("is selected", isSelected)
				end, true))
				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
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))
local Icons = require(_Packages:WaitForChild("MaterialIcons"))
local OutlineIcons = require(_Packages:WaitForChild("OutlinedMaterialIcons"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))
local Util = require(_Package:WaitForChild("Util"))
local Theme = require(_Package:WaitForChild("Theme"))
local Typography = require(_Package:WaitForChild("Typography"))
-- 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 SwitchRenderData = {
	Text: AppearanceData,
	Button: AppearanceData,
	Background: AppearanceData,
	Outline: AppearanceData,
}
type FontData = Types.FontData

-- Constants
local CONTAINER_HEIGHT_DP = 42
local LEFT_RIGHT_NO_ICONS_PADDING_DP = 14
local LEFT_RIGHT_YES_ICONS_PADDING_DP = 10
local TEXT_AND_ICON_PADDING_DP = 14
local SUPPORTING_TEXT_PADDING_DP = 4
local MIN_WIDTH_DP = math.round(CONTAINER_HEIGHT_DP * 1.5)
local DEFAULT_OUTLINE_THICKNESS_DP = 1
local FOCUSED_OUTLINE_THICKNESS_DP = 2
local RADIUS_DP = 4
local ICON_WIDTH_DP = 18
local DISABLED_TEXT_TRANSPARENCY = 1 - 0.38
local DISABLED_OUTLINE_TRANSPARENCY = 1 - 0.12
local DISABLED_BACKGROUND_TRANSPARENCY = 1 - 0.04

-- Variables
-- References

-- Private Functions

-- Class
local Interface = {}

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?>,
	leadingIcon: CanBeState<ImageData?>,

	textColor: CanBeState<Color3>,
	labelColor: CanBeState<Color3>,
	hightlightColor: CanBeState<Color3>,
	errorColor: CanBeState<Color3>,
	backgroundColor: CanBeState<Color3>,
	borderColor: CanBeState<Color3>,
	supportingTextColor: CanBeState<Color3>,

	elevation: CanBeState<number>,
	isOutlined: CanBeState<boolean>,
	schemeType: CanBeState<Enums.SchemeType>,
	bodyFontData: CanBeState<FontData>,
	supportFontData: CanBeState<FontData>,
	scale: CanBeState<number>
): 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 scaleState: State<number> = _import(scale, 1)
	local schemeTypeState: State<Enums.SchemeType> = _import(schemeType, Enums.SchemeType.Light)
	local bodyFontDataState: State<FontData> = _import(bodyFontData, nil :: any)
	local supportFontDataState: State<FontData> = _import(supportFontData, nil :: any)

	local onSubmitState = _import(onSubmit, function(input: string?): string?
		return nil
	end)
	local onInputState = _import(onInput, function(input: string?): string?
		return nil
	end)

	local elevationState = _import(elevation, 0)
	local isEnabledState = _import(isEnabled, true)
	local initialTextState = _import(initialText, nil :: string?)
	local labelTextState = _import(label, nil :: string?)

	local characterLimitState: State<number?> = _import(characterLimit, nil :: number?)

	local supportingTextState: State<string?> = _import(supportingText, nil :: string?)
	local leadingIconState = _import(leadingIcon, nil :: ImageData?)
	local dropdownOptionsState: State<{ string }?> = _import(nil, nil :: { string }?)

	local function applyElevation(state: State<Color3>): State<Color3>
		return _Computed(function(c: Color3, e: number, st: Enums.SchemeType): Color3
			return Theme.getElevatedColor(c, e, st)
		end, state, elevationState, schemeTypeState)
	end

	local textColorState = applyElevation(_import(textColor, Color3.new()))
	local borderColorState = applyElevation(_import(borderColor, Color3.new()))
	local backgroundColorState = applyElevation(_import(backgroundColor, Color3.new()))
	local labelColorState = applyElevation(_import(labelColor, Color3.new()))
	local inputHighlightColorState = applyElevation(_import(hightlightColor, Color3.new()))
	local errorColorState = applyElevation(_import(errorColor, Color3.new()))
	local supportingTextColorState = applyElevation(_import(supportingTextColor, Color3.new()))

	local isOutlinedState = _import(isOutlined, true)
	local isErrorState = _import(isError, true)

	local highlightColorState = _Computed(function(isErr: boolean, hCol: Color3, eCol: Color3): Color3
		return if isErr then eCol else hCol
	end, isErrorState, inputHighlightColorState, errorColorState)

	local isFocusedState = _Value(false)
	local isPressedState = _Value(false)
	local isHoveredState = _Value(false)

	local valueState: ValueState<string?> = _Value(initialTextState:Get())
	local inputValueState: ValueState<string?> = _Value(initialTextState:Get())

	local buttonStateTypeState = _Computed(
		function(
			isEnab: boolean,
			isFocused: boolean,
			isPressed: boolean,
			isHovered: boolean
		): Enums.ButtonStateType
			if isEnab then
				if isPressed then
					return Enums.ButtonStateType.Pressed
				else
					if isHovered then
						return Enums.ButtonStateType.Hovered
					else
						if isFocused then
							return Enums.ButtonStateType.Focused
						else
							return Enums.ButtonStateType.Enabled
						end
					end
				end
			else
				return Enums.ButtonStateType.Disabled
			end
		end,
		isEnabledState,
		isFocusedState,
		isPressedState,
		isHoveredState
	) :: State<any>

	local isLabelMinimizedState = _Computed(function(isFoc: boolean, val: string?): boolean
		return if isFoc or (val and val:len() > 0) then true else false
	end, isFocusedState, valueState)

	local labelFontData: State<FontData> = _Computed(
		function(isMin: boolean, bF: FontData, sF: FontData): FontData
			if isMin then
				return sF
			else
				return bF
			end
		end,
		isLabelMinimizedState,
		bodyFontDataState,
		supportFontDataState
	)

	local rightIconState = _Computed(function(iE: boolean, d: { string }?, v: string?): ImageData?
		if iE then
			return Icons.error
		elseif v ~= nil then
			return OutlineIcons.cancel
		elseif d ~= nil then
			return Icons.arrow_drop_down
		else
			return nil
		end
	end, isErrorState, dropdownOptionsState, valueState)

	local iconAddedWidthState = _Computed(function(lead: ImageData?, sc: number): number
		local leftOffset = if lead then ICON_WIDTH_DP + TEXT_AND_ICON_PADDING_DP else 0
		local rightOffset = ICON_WIDTH_DP + TEXT_AND_ICON_PADDING_DP
		return (leftOffset + rightOffset) * sc
	end, leadingIconState, scaleState)

	local textBox: TextBox

	local function updateValue()
		local current = textBox.Text
		local oSubmit = onSubmitState:Get()
		if oSubmit then
			local fmt = oSubmit(current) or ""
			print(`fmt: {fmt}`)
			textBox.Text = fmt or ""
			valueState:Set(if textBox.Text == "" then nil else textBox.Text)
		end
	end

	textBox = _new("TextBox")({
		LayoutOrder = 2,
		RichText = true,
		Visible = true,
		TextColor3 = textColorState,
		TextTransparency = _Computed(function(isMin: boolean, isEnab: boolean): number
			return if isMin then if isEnab then 0 else DISABLED_TEXT_TRANSPARENCY else 1
		end, isLabelMinimizedState, isEnabledState),
		BackgroundTransparency = 1,
		Text = "",
		Selectable = false,
		TextXAlignment = Enum.TextXAlignment.Left,
		AutomaticSize = Enum.AutomaticSize.X,
		TextSize = _Computed(function(f: FontData, sc: number): number
			return Typography.getTextSize(f.Size, sc)
		end, bodyFontDataState, scaleState),
		LineHeight = _Computed(function(f: FontData, sc: number): number
			return Typography.getGuiLineHeight(f.LineHeight, f.Size)
		end, bodyFontDataState, scaleState),
		FontFace = _Computed(function(f: FontData): Font
			return f.Font
		end, bodyFontDataState),
		Size = _Computed(function(sc: number, isMin: boolean, f: FontData): UDim2
			if isMin then
				return UDim2.fromOffset(
					0,
					sc
						* Typography.getTextSize(f.Size, sc)
						* Typography.getGuiLineHeight(f.LineHeight, f.Size)
				)
			else
				return UDim2.fromOffset(0, 0)
			end
		end, scaleState, isLabelMinimizedState, bodyFontDataState),
		Events = {
			Focused = function()
				isFocusedState:Set(true)
			end,
			FocusLost = function()
				isFocusedState:Set(false)

				updateValue()
			end,
		},
		Children = {
			-- maid:GiveTask(Util.Padding.ColdFusion.new(
			-- 	UDim.new(0,0),
			-- 	_Computed(function(s: Style): UDim
			-- 		return UDim.new(0, s.Scale * 8)
			-- 	end, styleState)
			-- )) :: Instance,
		},
	}) :: TextBox

	maid:GiveTask(textBox:GetPropertyChangedSignal("Text"):Connect(function()
		local current = textBox.Text
		local lim = characterLimitState:Get()
		if lim and current:len() > lim then
			current = current:sub(1, lim)
		end
		local oInput = onInputState:Get()
		if oInput then
			local fmt = oInput(current) or ""
			textBox.Text = fmt or ""
		end
		inputValueState:Set(textBox.Text)
	end))

	maid:GiveTask(initialTextState:Connect(function()
		textBox.Text = if initialTextState:Get() then initialTextState:Get() else ""
	end))
	textBox.Text = if initialTextState:Get() then initialTextState:Get() else ""

	local outlineThicknessState = _Computed(function(sc: number, isFoc: boolean): number
		return sc * if isFoc == false then DEFAULT_OUTLINE_THICKNESS_DP else FOCUSED_OUTLINE_THICKNESS_DP
	end, scaleState, isFocusedState)

	local inst = _bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
		Name = "TextField",
		Children = {
			maid:GiveTask(
				Util.List.ColdFusion.new(
					Enum.VerticalAlignment.Center,
					Enum.HorizontalAlignment.Left,
					Enum.FillDirection.Vertical,
					_Computed(function(sc: number): UDim
						return UDim.new(0, sc * SUPPORTING_TEXT_PADDING_DP)
					end, scaleState),
					Enum.UIFlexAlignment.None,
					Enum.UIFlexAlignment.Fill,
					Enum.ItemLineAlignment.Stretch,
					false
				)
			) :: Instance,
			_bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
				LayoutOrder = 1,
				Name = "UpperLabelContainer",
				Children = {
					maid:GiveTask(
						Util.List.ColdFusion.new(
							Enum.VerticalAlignment.Center,
							Enum.HorizontalAlignment.Center,
							Enum.FillDirection.Horizontal,
							_Computed(function(sc: number): UDim
								return UDim.new(0, sc * TEXT_AND_ICON_PADDING_DP)
							end, scaleState),
							Enum.UIFlexAlignment.Fill,
							Enum.UIFlexAlignment.Fill,
							Enum.ItemLineAlignment.Center,
							false
						)
					) :: Instance,
					maid:GiveTask(
						Util.Padding.ColdFusion.new(
							_Computed(function(sc: number, l: ImageData?): UDim
								return if l
									then UDim.new(0, sc * LEFT_RIGHT_YES_ICONS_PADDING_DP)
									else UDim.new(0, sc * LEFT_RIGHT_NO_ICONS_PADDING_DP)
							end, scaleState, leadingIconState),
							UDim.new(0, 0)
						)
					) :: Instance,
					_bind(
						maid:GiveTask(
							Util.TextLabel.ColdFusion.new(
								labelTextState,
								_Computed(
									function(
										lCol: Color3,
										hCol: Color3,
										isFoc: boolean,
										isErr: boolean
									): Color3
										return if isFoc or isErr then hCol else lCol
									end,
									labelColorState,
									highlightColorState,
									isFocusedState,
									isErrorState
								),
								_Computed(function(isMin: boolean, isOut: boolean): number
									if isOut then
										return if isMin == true then 0 else 1
									else
										return 1
									end
								end, isLabelMinimizedState, isOutlinedState),
								supportFontDataState,
								scaleState,
								nil,
								nil,
								0,
								true,
								nil
							)
						)
					)({
						Name = "Label",
					}),
				},
			}),
			_new("TextButton")({
				LayoutOrder = 2,
				Size = _Computed(function(sc: number): UDim2
					return UDim2.fromOffset(0, math.round(sc * CONTAINER_HEIGHT_DP))
				end, scaleState),
				Text = "",
				BackgroundColor3 = backgroundColorState,
				BackgroundTransparency = _Computed(function(isOut: boolean, isEnab: boolean): number
					return if isOut then 1 elseif isEnab then 0 else DISABLED_BACKGROUND_TRANSPARENCY
				end, isOutlinedState, isEnabledState),
				AutomaticSize = Enum.AutomaticSize.XY,
				Events = {
					Activated = function()
						if isEnabledState:Get() == false then
							return
						end
						textBox:CaptureFocus()
					end,
					MouseButton1Down = function()
						if isEnabledState:Get() == false then
							return
						end
						isPressedState:Set(true)
					end,
					MouseButton1Up = function()
						if isEnabledState:Get() == false then
							return
						end
						isPressedState:Set(false)
					end,
					MouseEnter = function()
						isHoveredState:Set(true)
					end,
					MouseLeave = function()
						isHoveredState:Set(false)
					end,
				},
				Children = {
					_new("UIStroke")({
						ApplyStrokeMode = Enum.ApplyStrokeMode.Border,
						Color = _Computed(
							function(
								bCol: Color3,
								hCol: Color3,
								isFoc: boolean,
								isErr: boolean,
								bState: Enums.ButtonStateType,
								tCol: Color3
							): Color3
								return if isFoc or isErr
									then hCol
									elseif bState == Enums.ButtonStateType.Hovered then tCol
									else bCol
							end,
							borderColorState,
							highlightColorState,
							isFocusedState,
							isErrorState,
							buttonStateTypeState,
							textColorState
						),
						Enabled = isOutlinedState,
						LineJoinMode = Enum.LineJoinMode.Round,
						Thickness = outlineThicknessState,
						Transparency = _Computed(function(isEnab: boolean): number
							return if isEnab then 0 else DISABLED_OUTLINE_TRANSPARENCY
						end, isEnabledState),
					}),
					_new("UICorner")({
						CornerRadius = _Computed(function(sc: number): UDim
							return UDim.new(0, sc * RADIUS_DP)
						end, scaleState),
					}),
					_new("UISizeConstraint")({
						MaxSize = Vector2.new(math.huge, math.huge),
						MinSize = _Computed(function(sc: number, add: number): Vector2
							return Vector2.new((sc * MIN_WIDTH_DP) + add, 0)
						end, scaleState, iconAddedWidthState),
					}),
					_bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
						LayoutOrder = 3,
						AutomaticSize = Enum.AutomaticSize.X,
						Size = _Computed(function(sc: number): UDim2
							return UDim2.fromOffset(0, sc * ICON_WIDTH_DP)
						end, scaleState),
						Children = {
							textBox :: Instance,
							_bind(
								maid:GiveTask(
									Util.TextLabel.ColdFusion.new(
										labelTextState,
										_Computed(function(isMin: boolean, lab: Color3, high: Color3): Color3
											return if isMin then high else lab
										end, isLabelMinimizedState, labelColorState, highlightColorState),
										_Computed(function(isEnab: boolean): number
											return if isEnab then 0 else DISABLED_TEXT_TRANSPARENCY
										end, isEnabledState),
										labelFontData,
										scaleState,
										nil,
										nil,
										0,
										true,
										nil
									)
								)
							)({
								Visible = _Computed(function(isMin: boolean, isOut: boolean): boolean
									if isOut then
										return isMin == false
									else
										return true
									end
								end, isLabelMinimizedState, isOutlinedState),
							}),
							maid:GiveTask(
								Util.List.ColdFusion.new(
									Enum.VerticalAlignment.Center,
									Enum.HorizontalAlignment.Left,
									Enum.FillDirection.Vertical,
									UDim.new(0, 0),
									Enum.UIFlexAlignment.None,
									Enum.UIFlexAlignment.Fill,
									Enum.ItemLineAlignment.Stretch,
									false
								)
							) :: Instance,
						},
					}),
					_bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
						LayoutOrder = 1,
						Children = {
							_bind(
								maid:GiveTask(
									Util.ImageLabel.ColdFusion.new(
										leadingIcon,
										textColorState,
										_Computed(function(isEnab: boolean): number
											return if isEnab then 0 else DISABLED_TEXT_TRANSPARENCY
										end, isEnabledState)
									)
								)
							)({
								Visible = _Computed(function(i: ImageData?): boolean
									return i ~= nil
								end, leadingIconState),
								Size = _Computed(function(sc: number): UDim2
									return UDim2.fromOffset(sc * ICON_WIDTH_DP, sc * ICON_WIDTH_DP)
								end, scaleState),
							}),
							maid:GiveTask(_new("UIAspectRatioConstraint")({
								AspectRatio = 1,
								AspectType = Enum.AspectType.FitWithinMaxSize,
								DominantAxis = Enum.DominantAxis.Height,
							})),
							maid:GiveTask(Util.List.ColdFusion.center()) :: Instance,
						},
					}),
					_bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
						LayoutOrder = 3,
						Children = {
							_new("ImageButton")({
								Image = _Computed(function(i: ImageData?): string
									return if i then i.Image else ""
								end, rightIconState),
								ImageRectOffset = _Computed(function(i: ImageData?): Vector2
									return if i then i.ImageRectOffset else Vector2.zero
								end, rightIconState),
								ImageRectSize = _Computed(function(i: ImageData?): Vector2
									return if i then i.ImageRectSize else Vector2.zero
								end, rightIconState),
								BackgroundTransparency = 1,
								ImageColor3 = _Computed(
									function(tCol: Color3, eCol: Color3, isErr: boolean): Color3
										return if isErr then eCol else tCol
									end,
									textColorState,
									errorColorState,
									isErrorState
								),
								ImageTransparency = _Computed(
									function(i: ImageData?, isEnab: boolean): number
										return if i ~= nil
											then if isEnab then 0 else DISABLED_TEXT_TRANSPARENCY
											else 1
									end,
									rightIconState,
									isEnabledState
								),
								Size = _Computed(function(sc: number): UDim2
									return UDim2.fromOffset(sc * ICON_WIDTH_DP, sc * ICON_WIDTH_DP)
								end, scaleState),
								Events = {
									Activated = function()
										if valueState:Get() and isErrorState:Get() == false then
											textBox.Text = ""
											updateValue()
										else
											local drops = dropdownOptionsState:Get()
											if drops and #drops > 0 then
												print("drop it")
											end
										end
									end,
								},
							}) :: Instance,
							maid:GiveTask(_new("UIAspectRatioConstraint")({
								AspectRatio = 1,
								AspectType = Enum.AspectType.FitWithinMaxSize,
								DominantAxis = Enum.DominantAxis.Height,
							})),
							maid:GiveTask(Util.List.ColdFusion.center()) :: Instance,
						},
					}),
					maid:GiveTask(
						Util.List.ColdFusion.new(
							Enum.VerticalAlignment.Center,
							Enum.HorizontalAlignment.Center,
							Enum.FillDirection.Horizontal,
							_Computed(function(sc: number): UDim
								return UDim.new(0, sc * TEXT_AND_ICON_PADDING_DP)
							end, scaleState),
							Enum.UIFlexAlignment.Fill,
							Enum.UIFlexAlignment.Fill,
							Enum.ItemLineAlignment.Center,
							false
						)
					) :: Instance,
					maid:GiveTask(
						Util.Padding.ColdFusion.new(
							_Computed(function(sc: number, l: ImageData?): UDim
								return if l
									then UDim.new(0, sc * LEFT_RIGHT_YES_ICONS_PADDING_DP)
									else UDim.new(0, sc * LEFT_RIGHT_NO_ICONS_PADDING_DP)
							end, scaleState, leadingIconState),
							UDim.new(0, 0)
						)
					) :: Instance,
				},
			}) :: Instance,
			_bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
				Name = "SupportingTextContainer",
				LayoutOrder = 3,
				Children = {
					maid:GiveTask(
						Util.List.ColdFusion.new(
							Enum.VerticalAlignment.Center,
							Enum.HorizontalAlignment.Center,
							Enum.FillDirection.Horizontal,
							_Computed(function(sc: number): UDim
								return UDim.new(0, sc * TEXT_AND_ICON_PADDING_DP)
							end, scaleState),
							Enum.UIFlexAlignment.Fill,
							Enum.UIFlexAlignment.SpaceBetween,
							Enum.ItemLineAlignment.Center,
							false
						)
					) :: Instance,
					maid:GiveTask(
						Util.Padding.ColdFusion.new(
							_Computed(function(sc: number, l: ImageData?): UDim
								return if l
									then UDim.new(0, sc * LEFT_RIGHT_YES_ICONS_PADDING_DP)
									else UDim.new(0, sc * LEFT_RIGHT_NO_ICONS_PADDING_DP)
							end, scaleState, leadingIconState),
							UDim.new(0, 0)
						)
					) :: Instance,
					_bind(
						maid:GiveTask(
							Util.TextLabel.ColdFusion.new(
								_Computed(function(txt: string?): string
									return if txt then txt else ""
								end, supportingTextState),
								_Computed(function(sCol: Color3, eCol: Color3, isErr: boolean): Color3
									return if isErr then eCol else sCol
								end, supportingTextColorState, errorColorState, isErrorState),
								_Computed(function(txt: string?, isEnab: boolean): number
									return if txt and txt:len() > 0
										then if isEnab then 0 else DISABLED_TEXT_TRANSPARENCY
										else 1
								end, supportingTextState, isEnabledState),
								supportFontDataState,
								scaleState,
								nil,
								nil,
								0,
								true,
								nil
							)
						)
					)({
						LayoutOrder = 1,
					}),
					_bind(
						maid:GiveTask(
							Util.TextLabel.ColdFusion.new(
								_Computed(function(lim: number?, txt: string?): string
									if lim then
										local count = if txt then txt:len() else 0
										return `{count}/{lim}`
									else
										return ""
									end
								end, characterLimitState, inputValueState),
								supportingTextColorState,
								_Computed(function(lim: number?, isEnab: boolean): number
									return if lim then if isEnab then 0 else DISABLED_TEXT_TRANSPARENCY else 1
								end, characterLimitState, isEnabledState),
								supportFontDataState,
								scaleState,
								nil,
								nil,
								0,
								true,
								Enum.TextXAlignment.Right
							)
						)
					)({
						LayoutOrder = 2,
					}),
				},
			}),
		},
	}) :: GuiObject

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

	return inst
end

return Interface


--!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>,

	backgroundColor: Enums.ColorRoleType,
	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(backgroundColor)
		end, styleState),
		_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

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.SurfaceContainerHighest,
		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.SurfaceContainerHighest,
		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.SurfaceContainerHighest,
		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?>,
	backgroundColor: CanBeState<Color3>,
	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 backgroundColor ~= nil then backgroundColor else DEFAULTS.NEW.BACKGROUND_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,
		false,
		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 or 1
	)
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?,
		BACKGROUND_COLOR = Color3.new(),
		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?>,
	backgroundColor: FusionCanBeState<Color3>,
	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(backgroundColor, DEFAULTS.NEW.BACKGROUND_COLOR),
		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 NewTextFieldFilled = React.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 React.createElement(ReactRoblox.createPortal, props)
	end
	function NewTextFieldFilled: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 NewTextFieldFilled:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.New = NewTextFieldFilled
end

do
	local PrimaryTextFieldFilled = React.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 React.createElement(ReactRoblox.createPortal, props)
	end
	function PrimaryTextFieldFilled: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 PrimaryTextFieldFilled:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Primary = PrimaryTextFieldFilled
end

do
	local SecondaryTextFieldFilled = React.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 React.createElement(ReactRoblox.createPortal, props)
	end
	function SecondaryTextFieldFilled: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 SecondaryTextFieldFilled:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Secondary = SecondaryTextFieldFilled
end

do
	local TertiaryTextFieldFilled = React.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 React.createElement(ReactRoblox.createPortal, props)
	end
	function TertiaryTextFieldFilled: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 TertiaryTextFieldFilled:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Tertiary = TertiaryTextFieldFilled
end

return Interface