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

-- 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()
							print("click")
						end,
						"Button",
						nil,
						style:GetColor(Enums.ColorRoleType.OnPrimary),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant),
						style:GetColor(Enums.ColorRoleType.SurfaceVariant),
						true,
						0,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(
					Module.new(
						function()
							print("click")
						end,
						"Disabled",
						nil,
						style:GetColor(Enums.ColorRoleType.OnPrimary),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant),
						style:GetColor(Enums.ColorRoleType.SurfaceVariant),
						false,
						0,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(
					Module.new(
						function()
							print("click")
						end,
						"Icon",
						Icons.waterfall_chart,
						style:GetColor(Enums.ColorRoleType.OnPrimary),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant),
						style:GetColor(Enums.ColorRoleType.SurfaceVariant),
						true,
						0,
						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.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.primary(style, function()
					print("click")
				end, "primary", nil))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.secondary(style, function()
					print("click")
				end, "secondary", nil))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.tertiary(style, function()
					print("click")
				end, "tertiary", nil))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.primaryContainer(style, function()
					print("click")
				end, "primary-container", nil))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.secondaryContainer(style, function()
					print("click")
				end, "secondary-container", nil))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.tertiaryContainer(style, function()
					print("click")
				end, "tertiary-container", nil))
				button.Parent = halfFrame
			end

			return halfFrame
		end

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

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

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

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


--!strict
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services

-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))

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

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

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

-- Class
local Interface = {}

-- Private Functions
function newThemedComponent(
	themeDefaults: typeof(DEFAULTS.PRIMARY),
	textColor: Enums.ColorRoleType,
	surfaceColor: Enums.ColorRoleType,
	disabledTextColor: Enums.ColorRoleType,
	disabledSurfaceColor: Enums.ColorRoleType,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	style: CanBeState<Style>,
	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(onClick, themeDefaults.ON_CLICK),
		_import(icon, themeDefaults.ICON),
		_Computed(function(s: Style): Color3
			return s:GetColor(textColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(surfaceColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(disabledTextColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(disabledSurfaceColor)
		end, styleState),
		_import(isEnabled, themeDefaults.IS_ENABLED),
		_import(elevation, themeDefaults.ELEVATION),
		_Computed(function(s: Style): any
			return s.SchemeType
		end, styleState),
		_Computed(function(s: Style): FontData
			return s:GetFontData(Enums.FontType.LabelLarge)
		end, styleState),
		_Computed(function(s: Style): number
			return s.Scale
		end, styleState)
	)

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

	return out
end

Interface = {}

function Interface.primary(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.PRIMARY,
		Enums.ColorRoleType.OnPrimary,
		Enums.ColorRoleType.Primary,
		Enums.ColorRoleType.OnSurfaceVariant,
		Enums.ColorRoleType.SurfaceVariant,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.secondary(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.SECONDARY,
		Enums.ColorRoleType.OnSecondary,
		Enums.ColorRoleType.Secondary,
		Enums.ColorRoleType.OnSurfaceVariant,
		Enums.ColorRoleType.SurfaceVariant,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.tertiary(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.TERTIARY,
		Enums.ColorRoleType.OnTertiary,
		Enums.ColorRoleType.Tertiary,
		Enums.ColorRoleType.OnSurfaceVariant,
		Enums.ColorRoleType.SurfaceVariant,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.primaryContainer(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.PRIMARY_CONTAINER,
		Enums.ColorRoleType.OnPrimaryContainer,
		Enums.ColorRoleType.PrimaryContainer,
		Enums.ColorRoleType.OnSecondaryContainer,
		Enums.ColorRoleType.SurfaceContainer,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.secondaryContainer(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.SECONDARY_CONTAINER,
		Enums.ColorRoleType.OnSecondaryContainer,
		Enums.ColorRoleType.SecondaryContainer,
		Enums.ColorRoleType.OnSecondaryContainer,
		Enums.ColorRoleType.SurfaceContainer,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.tertiaryContainer(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.TERTIARY_CONTAINER,
		Enums.ColorRoleType.OnTertiaryContainer,
		Enums.ColorRoleType.TertiaryContainer,
		Enums.ColorRoleType.OnSecondaryContainer,
		Enums.ColorRoleType.SurfaceContainer,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.new(
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	textColor: CanBeState<Color3>,
	surfaceColor: CanBeState<Color3>,
	disabledTextColor: CanBeState<Color3>,
	disabledSurfaceColor: CanBeState<Color3>,
	isEnabled: CanBeState<boolean>,
	elevation: CanBeState<number>,
	schemeType: CanBeState<Enums.SchemeType>,
	fontData: 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, DEFAULTS.NEW.SCALE)
	local schemeTypeState: State<Enums.SchemeType> = _import(schemeType, DEFAULTS.NEW.SCHEME_TYPE)
	local fontDataState: State<FontData> = _import(fontData, DEFAULTS.NEW.FONT_DATA)
	local elevationState: State<number> = _import(elevation, DEFAULTS.NEW.ELEVATION)

	local textColorState: State<Color3> = _import(textColor, DEFAULTS.NEW.TEXT_COLOR)
	local surfaceColorState: State<Color3> = _import(surfaceColor, DEFAULTS.NEW.SURFACE_COLOR)

	local disabledTextColorState: State<Color3> = _import(disabledTextColor, DEFAULTS.NEW.DISABLED_TEXT_COLOR)
	local disabledSurfaceColorState: State<Color3> =
		_import(disabledSurfaceColor, DEFAULTS.NEW.DISABLED_SURFACE_COLOR)

	local iconState: State<ImageData?> = _import(icon, DEFAULTS.NEW.ICON)

	local button = Base.new(
		maid,
		_import(onClick, DEFAULTS.NEW.ON_CLICK),
		"",
		_import(isEnabled, DEFAULTS.NEW.IS_ENABLED),
		_Computed(
			function(
				st: Enums.SchemeType,
				sc: number,
				f: FontData,
				e: number,
				tC: Color3,
				sC: Color3,
				dTC: Color3,
				dSC: Color3,
				i: ImageData?
			): { [Enums.ButtonStateType]: RenderData }
				e += 1
				return {
					[Enums.ButtonStateType.Enabled] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(sC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(sC, e, st), 0),
						Types._AppearanceData.new(Theme.getElevatedColor(tC, e, st), 0),
						f,
						i,
						nil,
						nil
					),
					[Enums.ButtonStateType.Disabled] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(dSC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(dSC, e, st), 0.12),
						Types._AppearanceData.new(Theme.getElevatedColor(dTC, e, st), 0.12),
						f,
						i,
						nil,
						nil
					),
					[Enums.ButtonStateType.Hovered] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(sC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(sC, e + 1, st), 0.08),
						Types._AppearanceData.new(Theme.getElevatedColor(tC, e + 1, st), 0.08),
						f,
						i,
						nil,
						nil
					),
					[Enums.ButtonStateType.Focused] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(sC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(sC, e, st), 0.1),
						Types._AppearanceData.new(Theme.getElevatedColor(tC, e, st), 0.1),
						f,
						i,
						nil,
						nil
					),
					[Enums.ButtonStateType.Pressed] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(sC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(sC, e - 1, st), 0.1),
						Types._AppearanceData.new(Theme.getElevatedColor(tC, e - 1, st), 0.1),
						f,
						i,
						Types._SoundData.new(Sounds.Library[Enums.SoundType.ui_tap_variant_01], 0),
						nil
					),
				}
			end,
			schemeTypeState,
			scaleState,
			fontDataState,
			elevationState,
			textColorState,
			surfaceColorState,
			disabledTextColorState,
			disabledSurfaceColorState,
			iconState
		),
		false,
		nil,
		0.8,
		true
	)
	maid:GiveTask(button.Destroying:Connect(function()
		maid:Destroy()
	end))

	return button
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_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		TEXT_COLOR = Color3.new(),
		SURFACE_COLOR = Color3.new(),
		DISABLED_TEXT_COLOR = Color3.new(),
		DISABLED_SURFACE_COLOR = Color3.new(),
		IS_ENABLED = true,
		ELEVATION = 0,
		SCHEME_TYPE = Enums.SchemeType.Light,
		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_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	SECONDARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	TERTIARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	PRIMARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	SECONDARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	TERTIARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		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(
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	textColor: FusionCanBeState<Color3>,
	surfaceColor: FusionCanBeState<Color3>,
	disabledTextColor: FusionCanBeState<Color3>,
	disabledSurfaceColor: FusionCanBeState<Color3>,
	isEnabled: FusionCanBeState<boolean>,
	elevation: FusionCanBeState<number>,
	schemeType: FusionCanBeState<Enums.SchemeType>,
	fontData: 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(onClick, DEFAULTS.NEW.ON_CLICK),
		convert(icon, DEFAULTS.NEW.ICON),
		convert(textColor, DEFAULTS.NEW.TEXT_COLOR),
		convert(surfaceColor, DEFAULTS.NEW.SURFACE_COLOR),
		convert(disabledTextColor, DEFAULTS.NEW.DISABLED_TEXT_COLOR),
		convert(disabledSurfaceColor, DEFAULTS.NEW.DISABLED_SURFACE_COLOR),
		convert(isEnabled, DEFAULTS.NEW.IS_ENABLED),
		convert(elevation, DEFAULTS.NEW.ELEVATION),
		convert(schemeType, DEFAULTS.NEW.SCHEME_TYPE),
		convert(fontData, DEFAULTS.NEW.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>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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(onClick, DEFAULTS.PRIMARY.ON_CLICK),
		convert(icon, DEFAULTS.PRIMARY.ICON),
		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>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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(onClick, DEFAULTS.SECONDARY.ON_CLICK),
		convert(icon, DEFAULTS.SECONDARY.ICON),
		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>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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(onClick, DEFAULTS.TERTIARY.ON_CLICK),
		convert(icon, DEFAULTS.TERTIARY.ICON),
		convert(elevation, DEFAULTS.TERTIARY.ELEVATION),
		convert(isEnabled, DEFAULTS.TERTIARY.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.primaryContainer(
	style: FusionCanBeState<Style>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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.primaryContainer(
		convert(style, DEFAULTS.PRIMARY_CONTAINER.STYLE),
		convert(onClick, DEFAULTS.PRIMARY_CONTAINER.ON_CLICK),
		convert(icon, DEFAULTS.PRIMARY_CONTAINER.ICON),
		convert(elevation, DEFAULTS.PRIMARY_CONTAINER.ELEVATION),
		convert(isEnabled, DEFAULTS.PRIMARY_CONTAINER.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.secondaryContainer(
	style: FusionCanBeState<Style>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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.secondaryContainer(
		convert(style, DEFAULTS.SECONDARY_CONTAINER.STYLE),
		convert(onClick, DEFAULTS.SECONDARY_CONTAINER.ON_CLICK),
		convert(icon, DEFAULTS.SECONDARY_CONTAINER.ICON),
		convert(elevation, DEFAULTS.SECONDARY_CONTAINER.ELEVATION),
		convert(isEnabled, DEFAULTS.SECONDARY_CONTAINER.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.tertiaryContainer(
	style: FusionCanBeState<Style>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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.tertiaryContainer(
		convert(style, DEFAULTS.TERTIARY_CONTAINER.STYLE),
		convert(onClick, DEFAULTS.TERTIARY_CONTAINER.ON_CLICK),
		convert(icon, DEFAULTS.TERTIARY_CONTAINER.ICON),
		convert(elevation, DEFAULTS.TERTIARY_CONTAINER.ELEVATION),
		convert(isEnabled, DEFAULTS.TERTIARY_CONTAINER.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 NewButtonFilledIconButton = React.Component:extend("NewButtonFilledIconButton")
	NewButtonFilledIconButton.defaultProps = {
		onClick = DEFAULTS.NEW.ON_CLICK,
		icon = DEFAULTS.NEW.ICON,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		surfaceColor = DEFAULTS.NEW.SURFACE_COLOR,
		disabledTextColor = DEFAULTS.NEW.DISABLED_TEXT_COLOR,
		disabledSurfaceColor = DEFAULTS.NEW.DISABLED_SURFACE_COLOR,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewButtonFilledIconButton:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			textColor = _Value(self.defaultProps.textColor),
			surfaceColor = _Value(self.defaultProps.surfaceColor),
			disabledTextColor = _Value(self.defaultProps.disabledTextColor),
			disabledSurfaceColor = _Value(self.defaultProps.disabledSurfaceColor),
			isEnabled = _Value(self.defaultProps.isEnabled),
			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.onClick,
			self._internalStates.icon,
			self._internalStates.textColor,
			self._internalStates.surfaceColor,
			self._internalStates.disabledTextColor,
			self._internalStates.disabledSurfaceColor,
			self._internalStates.isEnabled,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

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

do
	local PrimaryButtonFilledIconButton = React.Component:extend("PrimaryButtonFilledIconButton")
	PrimaryButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		onClick = DEFAULTS.PRIMARY.ON_CLICK,
		icon = DEFAULTS.PRIMARY.ICON,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	function PrimaryButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local SecondaryButtonFilledIconButton = React.Component:extend("SecondaryButtonFilledIconButton")
	SecondaryButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		onClick = DEFAULTS.SECONDARY.ON_CLICK,
		icon = DEFAULTS.SECONDARY.ICON,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	function SecondaryButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local TertiaryButtonFilledIconButton = React.Component:extend("TertiaryButtonFilledIconButton")
	TertiaryButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		onClick = DEFAULTS.TERTIARY.ON_CLICK,
		icon = DEFAULTS.TERTIARY.ICON,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	function TertiaryButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local PrimaryContainerButtonFilledIconButton =
		React.Component:extend("PrimaryContainerButtonFilledIconButton")
	PrimaryContainerButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.PRIMARY_CONTAINER.STYLE,
		onClick = DEFAULTS.PRIMARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.PRIMARY_CONTAINER.ICON,
		elevation = DEFAULTS.PRIMARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY_CONTAINER.IS_ENABLED,
	}
	function PrimaryContainerButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.primaryContainer(
			self._internalStates.style,
			self._internalStates.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local SecondaryContainerButtonFilledIconButton =
		React.Component:extend("SecondaryContainerButtonFilledIconButton")
	SecondaryContainerButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.SECONDARY_CONTAINER.STYLE,
		onClick = DEFAULTS.SECONDARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.SECONDARY_CONTAINER.ICON,
		elevation = DEFAULTS.SECONDARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY_CONTAINER.IS_ENABLED,
	}
	function SecondaryContainerButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.secondaryContainer(
			self._internalStates.style,
			self._internalStates.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local TertiaryContainerButtonFilledIconButton =
		React.Component:extend("TertiaryContainerButtonFilledIconButton")
	TertiaryContainerButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.TERTIARY_CONTAINER.STYLE,
		onClick = DEFAULTS.TERTIARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.TERTIARY_CONTAINER.ICON,
		elevation = DEFAULTS.TERTIARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY_CONTAINER.IS_ENABLED,
	}
	function TertiaryContainerButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.tertiaryContainer(
			self._internalStates.style,
			self._internalStates.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

return Interface


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

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

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

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

do
	local NewButtonFilledIconButton = Roact.Component:extend("NewButtonFilledIconButton")
	NewButtonFilledIconButton.defaultProps = {
		onClick = DEFAULTS.NEW.ON_CLICK,
		icon = DEFAULTS.NEW.ICON,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		surfaceColor = DEFAULTS.NEW.SURFACE_COLOR,
		disabledTextColor = DEFAULTS.NEW.DISABLED_TEXT_COLOR,
		disabledSurfaceColor = DEFAULTS.NEW.DISABLED_SURFACE_COLOR,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewButtonFilledIconButton:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			textColor = _Value(self.defaultProps.textColor),
			surfaceColor = _Value(self.defaultProps.surfaceColor),
			disabledTextColor = _Value(self.defaultProps.disabledTextColor),
			disabledSurfaceColor = _Value(self.defaultProps.disabledSurfaceColor),
			isEnabled = _Value(self.defaultProps.isEnabled),
			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.onClick,
			self._internalStates.icon,
			self._internalStates.textColor,
			self._internalStates.surfaceColor,
			self._internalStates.disabledTextColor,
			self._internalStates.disabledSurfaceColor,
			self._internalStates.isEnabled,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

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

do
	local PrimaryButtonFilledIconButton = Roact.Component:extend("PrimaryButtonFilledIconButton")
	PrimaryButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		onClick = DEFAULTS.PRIMARY.ON_CLICK,
		icon = DEFAULTS.PRIMARY.ICON,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	function PrimaryButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local SecondaryButtonFilledIconButton = Roact.Component:extend("SecondaryButtonFilledIconButton")
	SecondaryButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		onClick = DEFAULTS.SECONDARY.ON_CLICK,
		icon = DEFAULTS.SECONDARY.ICON,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	function SecondaryButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local TertiaryButtonFilledIconButton = Roact.Component:extend("TertiaryButtonFilledIconButton")
	TertiaryButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		onClick = DEFAULTS.TERTIARY.ON_CLICK,
		icon = DEFAULTS.TERTIARY.ICON,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	function TertiaryButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local PrimaryContainerButtonFilledIconButton =
		Roact.Component:extend("PrimaryContainerButtonFilledIconButton")
	PrimaryContainerButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.PRIMARY_CONTAINER.STYLE,
		onClick = DEFAULTS.PRIMARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.PRIMARY_CONTAINER.ICON,
		elevation = DEFAULTS.PRIMARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY_CONTAINER.IS_ENABLED,
	}
	function PrimaryContainerButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.primaryContainer(
			self._internalStates.style,
			self._internalStates.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local SecondaryContainerButtonFilledIconButton =
		Roact.Component:extend("SecondaryContainerButtonFilledIconButton")
	SecondaryContainerButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.SECONDARY_CONTAINER.STYLE,
		onClick = DEFAULTS.SECONDARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.SECONDARY_CONTAINER.ICON,
		elevation = DEFAULTS.SECONDARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY_CONTAINER.IS_ENABLED,
	}
	function SecondaryContainerButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.secondaryContainer(
			self._internalStates.style,
			self._internalStates.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

do
	local TertiaryContainerButtonFilledIconButton =
		Roact.Component:extend("TertiaryContainerButtonFilledIconButton")
	TertiaryContainerButtonFilledIconButton.defaultProps = {
		style = DEFAULTS.TERTIARY_CONTAINER.STYLE,
		onClick = DEFAULTS.TERTIARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.TERTIARY_CONTAINER.ICON,
		elevation = DEFAULTS.TERTIARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY_CONTAINER.IS_ENABLED,
	}
	function TertiaryContainerButtonFilledIconButton: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),
			onClick = _Value(self.defaultProps.onClick),
			icon = _Value(self.defaultProps.icon),
			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.tertiaryContainer(
			self._internalStates.style,
			self._internalStates.onClick,
			self._internalStates.icon,
			self._internalStates.elevation,
			self._internalStates.isEnabled
		)
	end

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

return Interface


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

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

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

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

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

export type FilledIconButtonWrapperDefinition = {
	OnClick: () -> (),
	Icon: ImageData,
	TextColor: Color3,
	SurfaceColor: Color3,
	DisabledTextColor: Color3,
	DisabledSurfaceColor: Color3,
	IsEnabled: boolean,
	Elevation: number,
	SchemeType: Enums.SchemeType,
	FontData: FontData,
	Scale: number,
}
export type FilledIconButtonWrapper = Wrapper<
	GuiObject,
	FilledIconButtonWrapperDefinition,
	"FilledIconButton"
>

export type StyledFilledIconButtonWrapperDefinition = {
	Style: Style,
	OnClick: () -> (),
	Icon: ImageData,
	Elevation: number,
	IsEnabled: boolean,
}
export type StyledFilledIconButtonWrapper = Wrapper<
	GuiObject,
	StyledFilledIconButtonWrapperDefinition,
	"StyledFilledIconButton"
>
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Interface
local Interface = {}

function Interface.new(): StyledFilledIconButtonWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		OnClick = _Value(function() end),
		Icon = _Value(Types.ImageData.new("")),
		TextColor = _Value(Color3.new()),
		SurfaceColor = _Value(Color3.new()),
		DisabledTextColor = _Value(Color3.new()),
		DisabledSurfaceColor = _Value(Color3.new()),
		IsEnabled = _Value(true),
		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? } = {
		onClick = DEFAULTS.NEW.ON_CLICK,
		icon = DEFAULTS.NEW.ICON,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		surfaceColor = DEFAULTS.NEW.SURFACE_COLOR,
		disabledTextColor = DEFAULTS.NEW.DISABLED_TEXT_COLOR,
		disabledSurfaceColor = DEFAULTS.NEW.DISABLED_SURFACE_COLOR,
		isEnabled = DEFAULTS.NEW.IS_ENABLED,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	local inst: GuiObject = Source.new(
		definition.OnClick,
		definition.Icon,
		definition.TextColor,
		definition.SurfaceColor,
		definition.DisabledTextColor,
		definition.DisabledSurfaceColor,
		definition.IsEnabled,
		definition.Elevation,
		definition.SchemeType,
		definition.FontData,
		definition.Scale
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp =
		Translators.ColdFusion.toWrapper("StyledFilledIconButton", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primary(): StyledFilledIconButtonWrapper
	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))),
		OnClick = _Value(function() end),
		Icon = _Value(Types.ImageData.new("")),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY.STYLE,
		onClick = DEFAULTS.PRIMARY.ON_CLICK,
		icon = DEFAULTS.PRIMARY.ICON,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.primary(
		definition.Style,
		definition.OnClick,
		definition.Icon,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp =
		Translators.ColdFusion.toWrapper("StyledFilledIconButton", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondary(): StyledFilledIconButtonWrapper
	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))),
		OnClick = _Value(function() end),
		Icon = _Value(Types.ImageData.new("")),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY.STYLE,
		onClick = DEFAULTS.SECONDARY.ON_CLICK,
		icon = DEFAULTS.SECONDARY.ICON,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.secondary(
		definition.Style,
		definition.OnClick,
		definition.Icon,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp =
		Translators.ColdFusion.toWrapper("StyledFilledIconButton", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiary(): StyledFilledIconButtonWrapper
	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))),
		OnClick = _Value(function() end),
		Icon = _Value(Types.ImageData.new("")),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY.STYLE,
		onClick = DEFAULTS.TERTIARY.ON_CLICK,
		icon = DEFAULTS.TERTIARY.ICON,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY.IS_ENABLED,
	}
	local inst: GuiObject = Source.tertiary(
		definition.Style,
		definition.OnClick,
		definition.Icon,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp =
		Translators.ColdFusion.toWrapper("StyledFilledIconButton", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primaryContainer(): StyledFilledIconButtonWrapper
	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))),
		OnClick = _Value(function() end),
		Icon = _Value(Types.ImageData.new("")),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY_CONTAINER.STYLE,
		onClick = DEFAULTS.PRIMARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.PRIMARY_CONTAINER.ICON,
		elevation = DEFAULTS.PRIMARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.PRIMARY_CONTAINER.IS_ENABLED,
	}
	local inst: GuiObject = Source.primaryContainer(
		definition.Style,
		definition.OnClick,
		definition.Icon,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp =
		Translators.ColdFusion.toWrapper("StyledFilledIconButton", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondaryContainer(): StyledFilledIconButtonWrapper
	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))),
		OnClick = _Value(function() end),
		Icon = _Value(Types.ImageData.new("")),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY_CONTAINER.STYLE,
		onClick = DEFAULTS.SECONDARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.SECONDARY_CONTAINER.ICON,
		elevation = DEFAULTS.SECONDARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.SECONDARY_CONTAINER.IS_ENABLED,
	}
	local inst: GuiObject = Source.secondaryContainer(
		definition.Style,
		definition.OnClick,
		definition.Icon,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp =
		Translators.ColdFusion.toWrapper("StyledFilledIconButton", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiaryContainer(): StyledFilledIconButtonWrapper
	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))),
		OnClick = _Value(function() end),
		Icon = _Value(Types.ImageData.new("")),
		Elevation = _Value(0),
		IsEnabled = _Value(true),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY_CONTAINER.STYLE,
		onClick = DEFAULTS.TERTIARY_CONTAINER.ON_CLICK,
		icon = DEFAULTS.TERTIARY_CONTAINER.ICON,
		elevation = DEFAULTS.TERTIARY_CONTAINER.ELEVATION,
		isEnabled = DEFAULTS.TERTIARY_CONTAINER.IS_ENABLED,
	}
	local inst: GuiObject = Source.tertiaryContainer(
		definition.Style,
		definition.OnClick,
		definition.Icon,
		definition.Elevation,
		definition.IsEnabled
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp =
		Translators.ColdFusion.toWrapper("StyledFilledIconButton", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

return Interface


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

-- 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()
							print("click")
						end,
						Icons.plus_one,
						style:GetColor(Enums.ColorRoleType.OnPrimary),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant),
						style:GetColor(Enums.ColorRoleType.SurfaceVariant),
						true,
						0,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(
					Module.new(
						function()
							print("click")
						end,
						Icons.disabled_by_default,
						style:GetColor(Enums.ColorRoleType.OnPrimary),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant),
						style:GetColor(Enums.ColorRoleType.SurfaceVariant),
						false,
						0,
						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.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local Icons = require(_Packages:WaitForChild("MaterialIcons"))

-- 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()
					print("click")
				end, Icons["1k"]))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.secondary(style, function()
					print("click")
				end, Icons["2k"]))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.tertiary(style, function()
					print("click")
				end, Icons["3k"]))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.primaryContainer(style, function()
					print("click")
				end, Icons["1k_plus"]))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.secondaryContainer(style, function()
					print("click")
				end, Icons["2k_plus"]))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.tertiaryContainer(style, function()
					print("click")
				end, Icons["3k_plus"]))
				button.Parent = halfFrame
			end

			return halfFrame
		end

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

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

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

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


--!strict
local _Package = script.Parent.Parent.Parent.Parent
local _Packages = _Package.Parent
-- Services

-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))

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

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

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

-- Class
local Interface = {}

-- Private Functions
function newThemedComponent(
	themeDefaults: typeof(DEFAULTS.PRIMARY),
	textColor: Enums.ColorRoleType,
	disabledTextColor: Enums.ColorRoleType,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	style: CanBeState<Style>,
	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(onClick, themeDefaults.ON_CLICK),
		_import(icon, themeDefaults.ICON),
		_Computed(function(s: Style): Color3
			return s:GetColor(textColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(disabledTextColor)
		end, styleState),
		_import(isEnabled, themeDefaults.IS_ENABLED),
		_import(elevation, themeDefaults.ELEVATION),
		_Computed(function(s: Style): any
			return s.SchemeType
		end, styleState),
		_Computed(function(s: Style): FontData
			return s:GetFontData(Enums.FontType.LabelLarge)
		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>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.PRIMARY,
		Enums.ColorRoleType.Primary,
		Enums.ColorRoleType.OnSurfaceVariant,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.secondary(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.SECONDARY,
		Enums.ColorRoleType.Secondary,
		Enums.ColorRoleType.OnSurfaceVariant,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.tertiary(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.TERTIARY,
		Enums.ColorRoleType.Tertiary,
		Enums.ColorRoleType.OnSurfaceVariant,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.primaryContainer(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.PRIMARY_CONTAINER,
		Enums.ColorRoleType.PrimaryContainer,
		Enums.ColorRoleType.OnSecondaryContainer,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.secondaryContainer(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.SECONDARY_CONTAINER,
		Enums.ColorRoleType.SecondaryContainer,
		Enums.ColorRoleType.OnSecondaryContainer,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.tertiaryContainer(
	style: CanBeState<Style>,
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	elevation: CanBeState<number?>,
	isEnabled: CanBeState<boolean?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.TERTIARY_CONTAINER,
		Enums.ColorRoleType.TertiaryContainer,
		Enums.ColorRoleType.OnSecondaryContainer,
		onClick,
		icon,
		style,
		elevation,
		isEnabled
	)
end

function Interface.new(
	onClick: CanBeState<() -> ()>,
	icon: CanBeState<ImageData>,
	textColor: CanBeState<Color3>,
	disabledTextColor: CanBeState<Color3>,
	isEnabled: CanBeState<boolean>,
	elevation: CanBeState<number>,
	schemeType: CanBeState<Enums.SchemeType>,
	fontData: 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, DEFAULTS.NEW.SCALE)
	local schemeTypeState: State<Enums.SchemeType> = _import(schemeType, DEFAULTS.NEW.SCHEME_TYPE)
	local fontDataState: State<FontData> = _import(fontData, DEFAULTS.NEW.FONT_DATA)

	local elevationState: State<number> = _import(elevation, DEFAULTS.NEW.ELEVATION)

	local textColorState: State<Color3> = _import(textColor, DEFAULTS.NEW.TEXT_COLOR)
	local hoverColorState: State<Color3> = _import(textColor, DEFAULTS.NEW.TEXT_COLOR)

	local disabledTextColorState: State<Color3> = _import(disabledTextColor, DEFAULTS.NEW.DISABLED_TEXT_COLOR)
	local disabledHoverColorState: State<Color3> =
		_import(disabledTextColor, DEFAULTS.NEW.DISABLED_TEXT_COLOR)

	local iconState: State<ImageData?> = _import(icon, nil :: ImageData?)

	local button = Base.new(
		maid,
		_import(onClick, DEFAULTS.NEW.ON_CLICK),
		"",
		_import(isEnabled, DEFAULTS.NEW.IS_ENABLED),
		_Computed(
			function(
				st: Enums.SchemeType,
				sc: number,
				f: FontData,
				e: number,
				tC: Color3,
				hC: Color3,
				dTC: Color3,
				dHC: Color3,
				i: ImageData?
			): { [Enums.ButtonStateType]: RenderData }
				e += 1
				return {
					[Enums.ButtonStateType.Enabled] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(hC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(hC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(tC, e, st), 0),
						f,
						i,
						nil,
						nil
					),
					[Enums.ButtonStateType.Disabled] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(dHC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(dHC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(dTC, e, st), 1 - 0.38),
						f,
						i,
						nil,
						nil
					),
					[Enums.ButtonStateType.Hovered] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(hC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(hC, e + 1, st), 1 - 0.08),
						Types._AppearanceData.new(Theme.getElevatedColor(tC, e + 1, st), 0.08),
						f,
						i,
						nil,
						nil
					),
					[Enums.ButtonStateType.Focused] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(hC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(hC, e, st), 1 - 0.1),
						Types._AppearanceData.new(Theme.getElevatedColor(tC, e, st), 0.1),
						f,
						i,
						nil,
						nil
					),
					[Enums.ButtonStateType.Pressed] = Types._RenderData.new(
						sc,
						Types._AppearanceData.new(Theme.getElevatedColor(hC, e, st), 1),
						Types._AppearanceData.new(Theme.getElevatedColor(hC, e - 1, st), 1 - 0.1),
						Types._AppearanceData.new(Theme.getElevatedColor(tC, e - 1, st), 0.1),
						f,
						i,
						Types._SoundData.new(Sounds.Library[Enums.SoundType.ui_tap_variant_01], 0),
						nil
					),
				}
			end,
			schemeTypeState,
			scaleState,
			fontDataState,
			elevationState,
			textColorState,
			hoverColorState,
			disabledTextColorState,
			disabledHoverColorState,
			iconState
		),
		false,
		nil,
		0.8,
		true
	)
	maid:GiveTask(button.Destroying:Connect(function()
		maid:Destroy()
	end))

	return button
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_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		TEXT_COLOR = Color3.new(),
		DISABLED_TEXT_COLOR = Color3.new(),
		IS_ENABLED = true,
		ELEVATION = 0,
		SCHEME_TYPE = Enums.SchemeType.Light,
		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_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	SECONDARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	TERTIARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	PRIMARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	SECONDARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		ELEVATION = 0,
		IS_ENABLED = true,
	},
	TERTIARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		ON_CLICK = function() end,
		ICON = Types.ImageData.new(""),
		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(
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	textColor: FusionCanBeState<Color3>,
	disabledTextColor: FusionCanBeState<Color3>,
	isEnabled: FusionCanBeState<boolean>,
	elevation: FusionCanBeState<number>,
	schemeType: FusionCanBeState<Enums.SchemeType>,
	fontData: 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(onClick, DEFAULTS.NEW.ON_CLICK),
		convert(icon, DEFAULTS.NEW.ICON),
		convert(textColor, DEFAULTS.NEW.TEXT_COLOR),
		convert(disabledTextColor, DEFAULTS.NEW.DISABLED_TEXT_COLOR),
		convert(isEnabled, DEFAULTS.NEW.IS_ENABLED),
		convert(elevation, DEFAULTS.NEW.ELEVATION),
		convert(schemeType, DEFAULTS.NEW.SCHEME_TYPE),
		convert(fontData, DEFAULTS.NEW.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>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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(onClick, DEFAULTS.PRIMARY.ON_CLICK),
		convert(icon, DEFAULTS.PRIMARY.ICON),
		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>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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(onClick, DEFAULTS.SECONDARY.ON_CLICK),
		convert(icon, DEFAULTS.SECONDARY.ICON),
		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>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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(onClick, DEFAULTS.TERTIARY.ON_CLICK),
		convert(icon, DEFAULTS.TERTIARY.ICON),
		convert(elevation, DEFAULTS.TERTIARY.ELEVATION),
		convert(isEnabled, DEFAULTS.TERTIARY.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.primaryContainer(
	style: FusionCanBeState<Style>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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.primaryContainer(
		convert(style, DEFAULTS.PRIMARY_CONTAINER.STYLE),
		convert(onClick, DEFAULTS.PRIMARY_CONTAINER.ON_CLICK),
		convert(icon, DEFAULTS.PRIMARY_CONTAINER.ICON),
		convert(elevation, DEFAULTS.PRIMARY_CONTAINER.ELEVATION),
		convert(isEnabled, DEFAULTS.PRIMARY_CONTAINER.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.secondaryContainer(
	style: FusionCanBeState<Style>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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.secondaryContainer(
		convert(style, DEFAULTS.SECONDARY_CONTAINER.STYLE),
		convert(onClick, DEFAULTS.SECONDARY_CONTAINER.ON_CLICK),
		convert(icon, DEFAULTS.SECONDARY_CONTAINER.ICON),
		convert(elevation, DEFAULTS.SECONDARY_CONTAINER.ELEVATION),
		convert(isEnabled, DEFAULTS.SECONDARY_CONTAINER.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.tertiaryContainer(
	style: FusionCanBeState<Style>,
	onClick: FusionCanBeState<() -> ()>,
	icon: FusionCanBeState<ImageData>,
	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.tertiaryContainer(
		convert(style, DEFAULTS.TERTIARY_CONTAINER.STYLE),
		convert(onClick, DEFAULTS.TERTIARY_CONTAINER.ON_CLICK),
		convert(icon, DEFAULTS.TERTIARY_CONTAINER.ICON),
		convert(elevation, DEFAULTS.TERTIARY_CONTAINER.ELEVATION),
		convert(isEnabled, DEFAULTS.TERTIARY_CONTAINER.IS_ENABLED)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

return Interface