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

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

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

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

do
	local NewDialog = Roact.Component:extend("NewDialog")
	NewDialog.defaultProps = {
		buttons = DEFAULTS.NEW.BUTTONS,
		icon = DEFAULTS.NEW.ICON,
		headline = DEFAULTS.NEW.HEADLINE,
		description = DEFAULTS.NEW.DESCRIPTION,
		surfaceColor = DEFAULTS.NEW.SURFACE_COLOR,
		buttonTextColor = DEFAULTS.NEW.BUTTON_TEXT_COLOR,
		disabledTextColor = DEFAULTS.NEW.DISABLED_TEXT_COLOR,
		headlineColor = DEFAULTS.NEW.HEADLINE_COLOR,
		descriptionColor = DEFAULTS.NEW.DESCRIPTION_COLOR,
		scrimColor = DEFAULTS.NEW.SCRIM_COLOR,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		headlineFontData = DEFAULTS.NEW.HEADLINE_FONT_DATA,
		bodyFontData = DEFAULTS.NEW.BODY_FONT_DATA,
		buttonFontData = DEFAULTS.NEW.BUTTON_FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewDialog:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			buttons = _Value(self.defaultProps.buttons),
			icon = _Value(self.defaultProps.icon),
			headline = _Value(self.defaultProps.headline),
			description = _Value(self.defaultProps.description),
			surfaceColor = _Value(self.defaultProps.surfaceColor),
			buttonTextColor = _Value(self.defaultProps.buttonTextColor),
			disabledTextColor = _Value(self.defaultProps.disabledTextColor),
			headlineColor = _Value(self.defaultProps.headlineColor),
			descriptionColor = _Value(self.defaultProps.descriptionColor),
			scrimColor = _Value(self.defaultProps.scrimColor),
			schemeType = _Value(self.defaultProps.schemeType),
			headlineFontData = _Value(self.defaultProps.headlineFontData),
			bodyFontData = _Value(self.defaultProps.bodyFontData),
			buttonFontData = _Value(self.defaultProps.buttonFontData),
			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.buttons,
			self._internalStates.icon,
			self._internalStates.headline,
			self._internalStates.description,
			self._internalStates.surfaceColor,
			self._internalStates.buttonTextColor,
			self._internalStates.disabledTextColor,
			self._internalStates.headlineColor,
			self._internalStates.descriptionColor,
			self._internalStates.scrimColor,
			self._internalStates.schemeType,
			self._internalStates.headlineFontData,
			self._internalStates.bodyFontData,
			self._internalStates.buttonFontData,
			self._internalStates.scale
		)
	end

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

do
	local PrimaryDialog = Roact.Component:extend("PrimaryDialog")
	PrimaryDialog.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		buttons = DEFAULTS.PRIMARY.BUTTONS,
		icon = DEFAULTS.PRIMARY.ICON,
		headline = DEFAULTS.PRIMARY.HEADLINE,
		description = DEFAULTS.PRIMARY.DESCRIPTION,
	}
	function PrimaryDialog: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),
			buttons = _Value(self.defaultProps.buttons),
			icon = _Value(self.defaultProps.icon),
			headline = _Value(self.defaultProps.headline),
			description = _Value(self.defaultProps.description),
		}
		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.buttons,
			self._internalStates.icon,
			self._internalStates.headline,
			self._internalStates.description
		)
	end

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

do
	local SecondaryDialog = Roact.Component:extend("SecondaryDialog")
	SecondaryDialog.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		buttons = DEFAULTS.SECONDARY.BUTTONS,
		icon = DEFAULTS.SECONDARY.ICON,
		headline = DEFAULTS.SECONDARY.HEADLINE,
		description = DEFAULTS.SECONDARY.DESCRIPTION,
	}
	function SecondaryDialog: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),
			buttons = _Value(self.defaultProps.buttons),
			icon = _Value(self.defaultProps.icon),
			headline = _Value(self.defaultProps.headline),
			description = _Value(self.defaultProps.description),
		}
		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.buttons,
			self._internalStates.icon,
			self._internalStates.headline,
			self._internalStates.description
		)
	end

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

do
	local TertiaryDialog = Roact.Component:extend("TertiaryDialog")
	TertiaryDialog.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		buttons = DEFAULTS.TERTIARY.BUTTONS,
		icon = DEFAULTS.TERTIARY.ICON,
		headline = DEFAULTS.TERTIARY.HEADLINE,
		description = DEFAULTS.TERTIARY.DESCRIPTION,
	}
	function TertiaryDialog: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),
			buttons = _Value(self.defaultProps.buttons),
			icon = _Value(self.defaultProps.icon),
			headline = _Value(self.defaultProps.headline),
			description = _Value(self.defaultProps.description),
		}
		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.buttons,
			self._internalStates.icon,
			self._internalStates.headline,
			self._internalStates.description
		)
	end

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

return Interface


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

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

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

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

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

export type DialogWrapperDefinition = {
	Buttons: { ButtonData },
	Icon: ImageData?,
	Headline: string?,
	Description: string?,
	SurfaceColor: Color3,
	ButtonTextColor: Color3,
	DisabledTextColor: Color3,
	HeadlineColor: Color3,
	DescriptionColor: Color3,
	ScrimColor: Color3,
	SchemeType: Enums.SchemeType,
	HeadlineFontData: FontData,
	BodyFontData: FontData,
	ButtonFontData: FontData,
	Scale: number,
}
export type DialogWrapper = Wrapper<GuiObject, DialogWrapperDefinition, "Dialog">

export type StyledDialogWrapperDefinition = {
	Style: Style,
	Buttons: { ButtonData },
	Icon: ImageData?,
	Headline: string?,
	Description: string?,
}
export type StyledDialogWrapper = Wrapper<GuiObject, StyledDialogWrapperDefinition, "StyledDialog">
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Interface
local Interface = {}

function Interface.new(): StyledDialogWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Buttons = _Value({}),
		Icon = _Value(nil),
		Headline = _Value(""),
		Description = _Value(""),
		SurfaceColor = _Value(Color3.new()),
		ButtonTextColor = _Value(Color3.new()),
		DisabledTextColor = _Value(Color3.new()),
		HeadlineColor = _Value(Color3.new()),
		DescriptionColor = _Value(Color3.new()),
		ScrimColor = _Value(Color3.new()),
		SchemeType = _Value(Enums.SchemeType.Light),
		HeadlineFontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		BodyFontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		ButtonFontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		Scale = _Value(1),
	}
	local defaults: { [string]: unknown? } = {
		buttons = DEFAULTS.NEW.BUTTONS,
		icon = DEFAULTS.NEW.ICON,
		headline = DEFAULTS.NEW.HEADLINE,
		description = DEFAULTS.NEW.DESCRIPTION,
		surfaceColor = DEFAULTS.NEW.SURFACE_COLOR,
		buttonTextColor = DEFAULTS.NEW.BUTTON_TEXT_COLOR,
		disabledTextColor = DEFAULTS.NEW.DISABLED_TEXT_COLOR,
		headlineColor = DEFAULTS.NEW.HEADLINE_COLOR,
		descriptionColor = DEFAULTS.NEW.DESCRIPTION_COLOR,
		scrimColor = DEFAULTS.NEW.SCRIM_COLOR,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		headlineFontData = DEFAULTS.NEW.HEADLINE_FONT_DATA,
		bodyFontData = DEFAULTS.NEW.BODY_FONT_DATA,
		buttonFontData = DEFAULTS.NEW.BUTTON_FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	local inst: GuiObject = Source.new(
		definition.Buttons,
		definition.Icon,
		definition.Headline,
		definition.Description,
		definition.SurfaceColor,
		definition.ButtonTextColor,
		definition.DisabledTextColor,
		definition.HeadlineColor,
		definition.DescriptionColor,
		definition.ScrimColor,
		definition.SchemeType,
		definition.HeadlineFontData,
		definition.BodyFontData,
		definition.ButtonFontData,
		definition.Scale
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledDialog", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primary(): StyledDialogWrapper
	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))),
		Buttons = _Value({}),
		Icon = _Value(nil),
		Headline = _Value(""),
		Description = _Value(""),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY.STYLE,
		buttons = DEFAULTS.PRIMARY.BUTTONS,
		icon = DEFAULTS.PRIMARY.ICON,
		headline = DEFAULTS.PRIMARY.HEADLINE,
		description = DEFAULTS.PRIMARY.DESCRIPTION,
	}
	local inst: GuiObject = Source.primary(
		definition.Style,
		definition.Buttons,
		definition.Icon,
		definition.Headline,
		definition.Description
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledDialog", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondary(): StyledDialogWrapper
	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))),
		Buttons = _Value({}),
		Icon = _Value(nil),
		Headline = _Value(""),
		Description = _Value(""),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY.STYLE,
		buttons = DEFAULTS.SECONDARY.BUTTONS,
		icon = DEFAULTS.SECONDARY.ICON,
		headline = DEFAULTS.SECONDARY.HEADLINE,
		description = DEFAULTS.SECONDARY.DESCRIPTION,
	}
	local inst: GuiObject = Source.secondary(
		definition.Style,
		definition.Buttons,
		definition.Icon,
		definition.Headline,
		definition.Description
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledDialog", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiary(): StyledDialogWrapper
	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))),
		Buttons = _Value({}),
		Icon = _Value(nil),
		Headline = _Value(""),
		Description = _Value(""),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY.STYLE,
		buttons = DEFAULTS.TERTIARY.BUTTONS,
		icon = DEFAULTS.TERTIARY.ICON,
		headline = DEFAULTS.TERTIARY.HEADLINE,
		description = DEFAULTS.TERTIARY.DESCRIPTION,
	}
	local inst: GuiObject = Source.tertiary(
		definition.Style,
		definition.Buttons,
		definition.Icon,
		definition.Headline,
		definition.Description
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledDialog", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

return Interface


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

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

-- 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.Background)
			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(
						{
							Types.ButtonData.new(function()
								print("Click 1")
							end, nil, "Select", true),
							Types.ButtonData.new(function()
								print("Click 2")
							end, nil, "Disabled", false),
						},
						Icons.usb,
						"Dialog",
						"Material Design is an adaptable system of guidelines, components, and tools that support the best practices of user interface design.",
						style:GetColor(Enums.ColorRoleType.SurfaceContainerHigh),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.OnSurface),
						style:GetColor(Enums.ColorRoleType.OnSurface),
						style:GetColor(Enums.ColorRoleType.OnSurfaceVariant),
						style:GetColor(Enums.ColorRoleType.SurfaceTint),
						style.SchemeType,
						style:GetFontData(Enums.FontType.HeadlineSmall),
						style:GetFontData(Enums.FontType.BodyMedium),
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Size = UDim2.fromScale(1, 1)
				button.Parent = halfFrame
			end

			return halfFrame
		end

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

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

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

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


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

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

-- 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.Background)
			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,
						{
							Types.ButtonData.new(function()
								print("Click 1")
							end, nil, "Primary 1", true),
							Types.ButtonData.new(function()
								print("Click 2")
							end, nil, "Primary 2", false),
						},
						Icons.usb,
						"Dialog",
						"Material Design is an adaptable system of guidelines, components, and tools that support the best practices of user interface design."
					)
				)
				button.Size = UDim2.fromScale(1, 1)
				button.Parent = halfFrame
			end

			return halfFrame
		end

		local COLORS: { [number]: Color3 } = {
			Color3.fromHSV(0, 0.9, 0.8),
			Color3.fromHSV(0.6, 0.9, 0.7),
			Color3.fromHSV(0.35, 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.Parent.Parent
local _Packages = _Package.Parent
-- Services
-- Packages
local Maid = require(_Packages:WaitForChild("Maid"))
local ColdFusion = require(_Packages:WaitForChild("ColdFusion"))
local Icons = require(_Packages:WaitForChild("MaterialIcons"))

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local IconButton = require(
	_Package
		:WaitForChild("Component")
		:WaitForChild("Button")
		:WaitForChild("IconButton")
		:WaitForChild("ColdFusion")
)
local FAB = require(
	_Package:WaitForChild("Component"):WaitForChild("Button"):WaitForChild("FAB"):WaitForChild("ColdFusion")
)
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))
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 ImageData = Types.ImageData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type Style = Style.Style
type FontData = Types.FontData

-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
local MAX_BUTTONS = 4
local ERROR_ICON = Icons.error
local BUTTON_SEPARATION_DP = 10
local BAR_TOP_BOTTOM_PADDING_DP = 6
local BAR_LEFT_RIGHT_PADDING_DP = 10
-- Variables
-- References
-- Private Functions

-- Class
local Interface = {}

function newThemedComponent(
	themeDefaults: typeof(DEFAULTS.PRIMARY),
	style: CanBeState<Style>,

	backgroundColor: Enums.ColorRoleType,
	iconColor: Enums.ColorRoleType,
	fabColor: Enums.ColorRoleType,
	fabIconColor: Enums.ColorRoleType,

	buttons: CanBeState<{ ButtonData }>,
	fab: CanBeState<ButtonData?>,
	elevation: 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 styleState: State<Style> = _import(style, themeDefaults.STYLE)

	local out = Interface.new(
		_import(buttons, themeDefaults.BUTTONS),
		_import(fab, themeDefaults.FAB),
		_Computed(function(s: Style): Color3
			return s:GetColor(backgroundColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(iconColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(fabColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(fabIconColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(Enums.ColorRoleType.Shadow)
		end, styleState),
		_import(elevation, themeDefaults.ELEVATION),
		_Computed(function(s: Style): any
			return s.SchemeType
		end, styleState),
		_Computed(function(s: Style): FontData
			return s:GetFontData(Enums.FontType.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>,
	buttons: CanBeState<{ ButtonData }>,
	fab: CanBeState<ButtonData?>,
	elevation: CanBeState<number?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.PRIMARY,
		style,
		Enums.ColorRoleType.Primary,
		Enums.ColorRoleType.OnPrimary,
		Enums.ColorRoleType.OnSurface,
		Enums.ColorRoleType.PrimaryContainer,
		buttons,
		fab,
		elevation
	)
end

function Interface.secondary(
	style: CanBeState<Style>,
	buttons: CanBeState<{ ButtonData }>,
	fab: CanBeState<ButtonData?>,
	elevation: CanBeState<number?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.SECONDARY,
		style,
		Enums.ColorRoleType.Secondary,
		Enums.ColorRoleType.OnSecondary,
		Enums.ColorRoleType.OnSurface,
		Enums.ColorRoleType.SecondaryContainer,
		buttons,
		fab,
		elevation
	)
end

function Interface.tertiary(
	style: CanBeState<Style>,
	buttons: CanBeState<{ ButtonData }>,
	fab: CanBeState<ButtonData?>,
	elevation: CanBeState<number?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.TERTIARY,
		style,
		Enums.ColorRoleType.Tertiary,
		Enums.ColorRoleType.OnTertiary,
		Enums.ColorRoleType.OnSurface,
		Enums.ColorRoleType.TertiaryContainer,
		buttons,
		fab,
		elevation
	)
end

function Interface.new(
	buttons: CanBeState<{ ButtonData }>,
	fab: CanBeState<ButtonData?>,
	backgroundColor: CanBeState<Color3>,
	iconColor: CanBeState<Color3>,
	fabColor: CanBeState<Color3>,
	fabIconColor: CanBeState<Color3>,
	fabShadowColor: CanBeState<Color3>,
	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 buttonsState: State<{ ButtonData }> = _import(buttons, DEFAULTS.NEW.BUTTONS)

	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 backgroundColorState: State<Color3> = _import(backgroundColor, DEFAULTS.NEW.BACKGROUND_COLOR)
	local elevationState: State<number> = _import(elevation, DEFAULTS.NEW.ELEVATION)

	local fabState: State<ButtonData?> = _import(fab, DEFAULTS.NEW.FAB)

	local inst = _new("Frame")({
		AutomaticSize = Enum.AutomaticSize.XY,
		BackgroundColor3 = _Computed(function(color: Color3, e: number, st: Enums.SchemeType): Color3
			return Theme.getElevatedColor(color, e, st)
		end, backgroundColorState, elevationState, schemeTypeState),
		Children = {
			_new("UIListLayout")({
				Padding = _Computed(function(s: number): UDim
					return UDim.new(0, 0)
				end, scaleState),
				HorizontalFlex = Enum.UIFlexAlignment.Fill,
				SortOrder = Enum.SortOrder.LayoutOrder,
				FillDirection = Enum.FillDirection.Horizontal,
				ItemLineAlignment = Enum.ItemLineAlignment.Center,
				VerticalAlignment = Enum.VerticalAlignment.Center,
				HorizontalAlignment = Enum.HorizontalAlignment.Center,
			}),
			_new("UIPadding")({
				PaddingLeft = _Computed(function(s: number): UDim
					return UDim.new(0, BAR_LEFT_RIGHT_PADDING_DP * s)
				end, scaleState),
				PaddingRight = _Computed(function(s: number): UDim
					return UDim.new(0, BAR_LEFT_RIGHT_PADDING_DP * s)
				end, scaleState),
				PaddingTop = _Computed(function(s: number): UDim
					return UDim.new(0, BAR_TOP_BOTTOM_PADDING_DP * s)
				end, scaleState),
				PaddingBottom = _Computed(function(s: number): UDim
					return UDim.new(0, BAR_TOP_BOTTOM_PADDING_DP * s)
				end, scaleState),
			}),
		},
	}) :: Frame

	_new("Frame")({
		AutomaticSize = Enum.AutomaticSize.XY,
		Parent = inst,
		LayoutOrder = 2,
		BackgroundTransparency = 1,
		Children = {
			_new("UIListLayout")({
				Padding = _Computed(function(s: number): UDim
					return UDim.new(0, s * BUTTON_SEPARATION_DP)
				end, scaleState),
				SortOrder = Enum.SortOrder.LayoutOrder,
				FillDirection = Enum.FillDirection.Horizontal,
				ItemLineAlignment = Enum.ItemLineAlignment.Center,
				VerticalAlignment = Enum.VerticalAlignment.Center,
				HorizontalAlignment = Enum.HorizontalAlignment.Right,
			}),
			_bind(FAB.new(
				_Computed(function(fData: ButtonData?)
					return if fData then fData.OnClick else function() end
				end, fabState),
				_Computed(function(fData: ButtonData?): ImageData
					return if fData and fData.Icon then fData.Icon else ERROR_ICON
				end, fabState),
				fabIconColor,
				fabColor,
				fabIconColor,
				fabColor,
				fabShadowColor,
				_Computed(function(fData: ButtonData?): boolean
					return if fData then fData.Enabled else false
				end, fabState),
				_Computed(function(e: number): number
					return e + 1
				end, elevationState),
				schemeTypeState,
				fontDataState,
				scaleState
			))({
				Visible = _Computed(function(fData: ButtonData?): boolean
					return if fData then fData.Enabled else false
				end, fabState),
				Parent = inst,
			}),
		},
	})

	local buttonContainer = _new("Frame")({
		AutomaticSize = Enum.AutomaticSize.XY,
		Parent = inst,
		LayoutOrder = 1,
		BackgroundTransparency = 1,
		Children = {
			_new("UIListLayout")({
				Padding = _Computed(function(s: number): UDim
					return UDim.new(0, s * BUTTON_SEPARATION_DP)
				end, scaleState),
				SortOrder = Enum.SortOrder.LayoutOrder,
				FillDirection = Enum.FillDirection.Horizontal,
				ItemLineAlignment = Enum.ItemLineAlignment.Center,
				VerticalAlignment = Enum.VerticalAlignment.Center,
				HorizontalAlignment = Enum.HorizontalAlignment.Left,
			}),
		},
	}) :: Frame

	for i = 1, MAX_BUTTONS do
		local buttonData = _Computed(function(bs: { ButtonData }): ButtonData?
			return bs[i]
		end, buttonsState)

		_bind(IconButton.new(
			_Computed(function(bData: ButtonData?)
				return if bData then bData.OnClick else function() end
			end, buttonData),
			_Computed(function(bData: ButtonData?): ImageData
				return if bData and bData.Icon then bData.Icon else ERROR_ICON
			end, buttonData),
			iconColor,
			iconColor,
			_Computed(function(bData: ButtonData?): boolean
				return if bData then bData.Enabled else false
			end, buttonData),
			elevationState,
			schemeTypeState,
			fontDataState,
			scaleState
		))({
			LayoutOrder = i,
			Visible = _Computed(function(bData: ButtonData?): boolean
				return if bData then bData.Enabled else false
			end, buttonData),
			Parent = buttonContainer,
		})
	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.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 = {
		BUTTONS = {},
		FAB = nil :: ButtonData?,
		BACKGROUND_COLOR = Color3.new(),
		ICON_COLOR = Color3.new(),
		FAB_COLOR = Color3.new(),
		FAB_ICON_COLOR = Color3.new(),
		FAB_SHADOW_COLOR = Color3.new(),
		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)),
		BUTTONS = {},
		FAB = nil :: ButtonData?,
		ELEVATION = 0,
	},
	SECONDARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		BUTTONS = {},
		FAB = nil :: ButtonData?,
		ELEVATION = 0,
	},
	TERTIARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		BUTTONS = {},
		FAB = nil :: ButtonData?,
		ELEVATION = 0,
	},
}


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.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(
	buttons: FusionCanBeState<{ ButtonData }>,
	fab: FusionCanBeState<ButtonData?>,
	backgroundColor: FusionCanBeState<Color3>,
	iconColor: FusionCanBeState<Color3>,
	fabColor: FusionCanBeState<Color3>,
	fabIconColor: FusionCanBeState<Color3>,
	fabShadowColor: FusionCanBeState<Color3>,
	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(buttons, DEFAULTS.NEW.BUTTONS),
		convert(fab, DEFAULTS.NEW.FAB),
		convert(backgroundColor, DEFAULTS.NEW.BACKGROUND_COLOR),
		convert(iconColor, DEFAULTS.NEW.ICON_COLOR),
		convert(fabColor, DEFAULTS.NEW.FAB_COLOR),
		convert(fabIconColor, DEFAULTS.NEW.FAB_ICON_COLOR),
		convert(fabShadowColor, DEFAULTS.NEW.FAB_SHADOW_COLOR),
		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>,
	buttons: FusionCanBeState<{ ButtonData }>,
	fab: FusionCanBeState<ButtonData?>,
	elevation: 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.primary(
		convert(style, DEFAULTS.PRIMARY.STYLE),
		convert(buttons, DEFAULTS.PRIMARY.BUTTONS),
		convert(fab, DEFAULTS.PRIMARY.FAB),
		convert(elevation, DEFAULTS.PRIMARY.ELEVATION)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.secondary(
	style: FusionCanBeState<Style>,
	buttons: FusionCanBeState<{ ButtonData }>,
	fab: FusionCanBeState<ButtonData?>,
	elevation: 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.secondary(
		convert(style, DEFAULTS.SECONDARY.STYLE),
		convert(buttons, DEFAULTS.SECONDARY.BUTTONS),
		convert(fab, DEFAULTS.SECONDARY.FAB),
		convert(elevation, DEFAULTS.SECONDARY.ELEVATION)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.tertiary(
	style: FusionCanBeState<Style>,
	buttons: FusionCanBeState<{ ButtonData }>,
	fab: FusionCanBeState<ButtonData?>,
	elevation: 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.tertiary(
		convert(style, DEFAULTS.TERTIARY.STYLE),
		convert(buttons, DEFAULTS.TERTIARY.BUTTONS),
		convert(fab, DEFAULTS.TERTIARY.FAB),
		convert(elevation, DEFAULTS.TERTIARY.ELEVATION)
	)
	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.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 NewMenuRowBarBottom = React.Component:extend("NewMenuRowBarBottom")
	NewMenuRowBarBottom.defaultProps = {
		buttons = DEFAULTS.NEW.BUTTONS,
		fab = DEFAULTS.NEW.FAB,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		iconColor = DEFAULTS.NEW.ICON_COLOR,
		fabColor = DEFAULTS.NEW.FAB_COLOR,
		fabIconColor = DEFAULTS.NEW.FAB_ICON_COLOR,
		fabShadowColor = DEFAULTS.NEW.FAB_SHADOW_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewMenuRowBarBottom:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			buttons = _Value(self.defaultProps.buttons),
			fab = _Value(self.defaultProps.fab),
			backgroundColor = _Value(self.defaultProps.backgroundColor),
			iconColor = _Value(self.defaultProps.iconColor),
			fabColor = _Value(self.defaultProps.fabColor),
			fabIconColor = _Value(self.defaultProps.fabIconColor),
			fabShadowColor = _Value(self.defaultProps.fabShadowColor),
			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.buttons,
			self._internalStates.fab,
			self._internalStates.backgroundColor,
			self._internalStates.iconColor,
			self._internalStates.fabColor,
			self._internalStates.fabIconColor,
			self._internalStates.fabShadowColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

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

do
	local PrimaryMenuRowBarBottom = React.Component:extend("PrimaryMenuRowBarBottom")
	PrimaryMenuRowBarBottom.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		buttons = DEFAULTS.PRIMARY.BUTTONS,
		fab = DEFAULTS.PRIMARY.FAB,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
	}
	function PrimaryMenuRowBarBottom: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),
			buttons = _Value(self.defaultProps.buttons),
			fab = _Value(self.defaultProps.fab),
			elevation = _Value(self.defaultProps.elevation),
		}
		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.buttons,
			self._internalStates.fab,
			self._internalStates.elevation
		)
	end

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

do
	local SecondaryMenuRowBarBottom = React.Component:extend("SecondaryMenuRowBarBottom")
	SecondaryMenuRowBarBottom.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		buttons = DEFAULTS.SECONDARY.BUTTONS,
		fab = DEFAULTS.SECONDARY.FAB,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
	}
	function SecondaryMenuRowBarBottom: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),
			buttons = _Value(self.defaultProps.buttons),
			fab = _Value(self.defaultProps.fab),
			elevation = _Value(self.defaultProps.elevation),
		}
		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.buttons,
			self._internalStates.fab,
			self._internalStates.elevation
		)
	end

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

do
	local TertiaryMenuRowBarBottom = React.Component:extend("TertiaryMenuRowBarBottom")
	TertiaryMenuRowBarBottom.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		buttons = DEFAULTS.TERTIARY.BUTTONS,
		fab = DEFAULTS.TERTIARY.FAB,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
	}
	function TertiaryMenuRowBarBottom: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),
			buttons = _Value(self.defaultProps.buttons),
			fab = _Value(self.defaultProps.fab),
			elevation = _Value(self.defaultProps.elevation),
		}
		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.buttons,
			self._internalStates.fab,
			self._internalStates.elevation
		)
	end

	function TertiaryMenuRowBarBottom: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 TertiaryMenuRowBarBottom: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 TertiaryMenuRowBarBottom:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Tertiary = TertiaryMenuRowBarBottom
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.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 NewMenuRowBarBottom = Roact.Component:extend("NewMenuRowBarBottom")
	NewMenuRowBarBottom.defaultProps = {
		buttons = DEFAULTS.NEW.BUTTONS,
		fab = DEFAULTS.NEW.FAB,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		iconColor = DEFAULTS.NEW.ICON_COLOR,
		fabColor = DEFAULTS.NEW.FAB_COLOR,
		fabIconColor = DEFAULTS.NEW.FAB_ICON_COLOR,
		fabShadowColor = DEFAULTS.NEW.FAB_SHADOW_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewMenuRowBarBottom:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			buttons = _Value(self.defaultProps.buttons),
			fab = _Value(self.defaultProps.fab),
			backgroundColor = _Value(self.defaultProps.backgroundColor),
			iconColor = _Value(self.defaultProps.iconColor),
			fabColor = _Value(self.defaultProps.fabColor),
			fabIconColor = _Value(self.defaultProps.fabIconColor),
			fabShadowColor = _Value(self.defaultProps.fabShadowColor),
			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.buttons,
			self._internalStates.fab,
			self._internalStates.backgroundColor,
			self._internalStates.iconColor,
			self._internalStates.fabColor,
			self._internalStates.fabIconColor,
			self._internalStates.fabShadowColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

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

do
	local PrimaryMenuRowBarBottom = Roact.Component:extend("PrimaryMenuRowBarBottom")
	PrimaryMenuRowBarBottom.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		buttons = DEFAULTS.PRIMARY.BUTTONS,
		fab = DEFAULTS.PRIMARY.FAB,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
	}
	function PrimaryMenuRowBarBottom: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),
			buttons = _Value(self.defaultProps.buttons),
			fab = _Value(self.defaultProps.fab),
			elevation = _Value(self.defaultProps.elevation),
		}
		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.buttons,
			self._internalStates.fab,
			self._internalStates.elevation
		)
	end

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

do
	local SecondaryMenuRowBarBottom = Roact.Component:extend("SecondaryMenuRowBarBottom")
	SecondaryMenuRowBarBottom.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		buttons = DEFAULTS.SECONDARY.BUTTONS,
		fab = DEFAULTS.SECONDARY.FAB,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
	}
	function SecondaryMenuRowBarBottom: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),
			buttons = _Value(self.defaultProps.buttons),
			fab = _Value(self.defaultProps.fab),
			elevation = _Value(self.defaultProps.elevation),
		}
		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.buttons,
			self._internalStates.fab,
			self._internalStates.elevation
		)
	end

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

do
	local TertiaryMenuRowBarBottom = Roact.Component:extend("TertiaryMenuRowBarBottom")
	TertiaryMenuRowBarBottom.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		buttons = DEFAULTS.TERTIARY.BUTTONS,
		fab = DEFAULTS.TERTIARY.FAB,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
	}
	function TertiaryMenuRowBarBottom: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),
			buttons = _Value(self.defaultProps.buttons),
			fab = _Value(self.defaultProps.fab),
			elevation = _Value(self.defaultProps.elevation),
		}
		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.buttons,
			self._internalStates.fab,
			self._internalStates.elevation
		)
	end

	function TertiaryMenuRowBarBottom: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 TertiaryMenuRowBarBottom: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 TertiaryMenuRowBarBottom:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.Tertiary = TertiaryMenuRowBarBottom
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.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 BottomWrapperDefinition = {
	Buttons: { ButtonData },
	Fab: ButtonData?,
	BackgroundColor: Color3,
	IconColor: Color3,
	FabColor: Color3,
	FabIconColor: Color3,
	FabShadowColor: Color3,
	Elevation: number,
	SchemeType: Enums.SchemeType,
	FontData: FontData,
	Scale: number,
}
export type BottomWrapper = Wrapper<GuiObject, BottomWrapperDefinition, "Bottom">

export type StyledBottomWrapperDefinition = {
	Style: Style,
	Buttons: { ButtonData },
	Fab: ButtonData?,
	Elevation: number?,
}
export type StyledBottomWrapper = Wrapper<GuiObject, StyledBottomWrapperDefinition, "StyledBottom">
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Interface
local Interface = {}

function Interface.new(): StyledBottomWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Buttons = _Value({}),
		Fab = _Value(nil),
		BackgroundColor = _Value(Color3.new()),
		IconColor = _Value(Color3.new()),
		FabColor = _Value(Color3.new()),
		FabIconColor = _Value(Color3.new()),
		FabShadowColor = _Value(Color3.new()),
		Elevation = _Value(0),
		SchemeType = _Value(Enums.SchemeType.Light),
		FontData = _Value(Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14)),
		Scale = _Value(1),
	}
	local defaults: { [string]: unknown? } = {
		buttons = DEFAULTS.NEW.BUTTONS,
		fab = DEFAULTS.NEW.FAB,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		iconColor = DEFAULTS.NEW.ICON_COLOR,
		fabColor = DEFAULTS.NEW.FAB_COLOR,
		fabIconColor = DEFAULTS.NEW.FAB_ICON_COLOR,
		fabShadowColor = DEFAULTS.NEW.FAB_SHADOW_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	local inst: GuiObject = Source.new(
		definition.Buttons,
		definition.Fab,
		definition.BackgroundColor,
		definition.IconColor,
		definition.FabColor,
		definition.FabIconColor,
		definition.FabShadowColor,
		definition.Elevation,
		definition.SchemeType,
		definition.FontData,
		definition.Scale
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledBottom", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primary(): StyledBottomWrapper
	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))),
		Buttons = _Value({}),
		Fab = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY.STYLE,
		buttons = DEFAULTS.PRIMARY.BUTTONS,
		fab = DEFAULTS.PRIMARY.FAB,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
	}
	local inst: GuiObject =
		Source.primary(definition.Style, definition.Buttons, definition.Fab, definition.Elevation)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledBottom", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondary(): StyledBottomWrapper
	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))),
		Buttons = _Value({}),
		Fab = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY.STYLE,
		buttons = DEFAULTS.SECONDARY.BUTTONS,
		fab = DEFAULTS.SECONDARY.FAB,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
	}
	local inst: GuiObject =
		Source.secondary(definition.Style, definition.Buttons, definition.Fab, definition.Elevation)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledBottom", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiary(): StyledBottomWrapper
	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))),
		Buttons = _Value({}),
		Fab = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY.STYLE,
		buttons = DEFAULTS.TERTIARY.BUTTONS,
		fab = DEFAULTS.TERTIARY.FAB,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
	}
	local inst: GuiObject =
		Source.tertiary(definition.Style, definition.Buttons, definition.Fab, definition.Elevation)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledBottom", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

return Interface


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

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

-- Types
type ButtonData = Types.ButtonData
-- 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 = Color3.new(0.7, 0.7, 0.7) --style:GetColor(Enums.ColorRoleType.Background)
			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.HorizontalFlex = Enum.UIFlexAlignment.Fill
			listLayout.Parent = halfFrame

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

			do
				local button = maid:GiveTask(
					Module.new(
						{
							Types.ButtonData.new(function()
								print("click 1")
							end, Icons.gamepad, nil, true),
							Types.ButtonData.new(function()
								print("click 2")
							end, Icons.waves, nil, true),
							Types.ButtonData.new(function()
								print("click 3")
							end, Icons.work_off, nil, true),
						},
						Types.ButtonData.new(function()
							print("click fab")
						end, Icons.plus_one, nil, isDarkMode),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.OnPrimary),
						style:GetColor(Enums.ColorRoleType.OnSurface),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						style:GetColor(Enums.ColorRoleType.Shadow),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			-- do
			-- 	local button = maid:GiveTask(
			-- 		Module.new(
			-- 			{
			-- 				Types.ButtonData.new(function()
			-- 					print("click 1")
			-- 				end, Icons.gamepad, nil, true),
			-- 				Types.ButtonData.new(function()
			-- 					print("click 2")
			-- 				end, Icons.waves, nil, false),
			-- 			},
			-- 			nil,
			-- 			style:GetColor(Enums.ColorRoleType.Primary),
			-- 			style:GetColor(Enums.ColorRoleType.OnPrimary),
			-- 			style:GetColor(Enums.ColorRoleType.OnSurface),
			-- 			style:GetColor(Enums.ColorRoleType.PrimaryContainer),
			-- 			style:GetColor(Enums.ColorRoleType.Shadow),
			-- 			1,
			-- 			style.SchemeType,
			-- 			style:GetFontData(Enums.FontType.LabelLarge),
			-- 			style.Scale
			-- 		)
			-- 	)
			-- 	button.Parent = halfFrame
			-- end

			return halfFrame
		end

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

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

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

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


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

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

-- Types
type ButtonData = Types.ButtonData
-- 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.Background)
			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.HorizontalFlex = Enum.UIFlexAlignment.Fill
			listLayout.Parent = halfFrame

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

			do
				local button = maid:GiveTask(Module.primary(
					style,
					{
						Types.ButtonData.new(function()
							print("click 1")
						end, Icons.gamepad, nil, true),
						Types.ButtonData.new(function()
							print("click 2")
						end, Icons.waves, nil, true),
						Types.ButtonData.new(function()
							print("click 3")
						end, Icons.work_off, nil, true),
					},
					Types.ButtonData.new(function()
						print("click fab")
					end, Icons.plus_one, nil, true)
				))
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(Module.secondary(
					style,
					{
						Types.ButtonData.new(function()
							print("click 1")
						end, Icons.gamepad, nil, true),
						Types.ButtonData.new(function()
							print("click 2")
						end, Icons.waves, nil, true),
						Types.ButtonData.new(function()
							print("click 3")
						end, Icons.work_off, nil, true),
					},
					Types.ButtonData.new(function()
						print("click fab")
					end, Icons.plus_one, nil, true)
				))
				button.Parent = halfFrame
			end
			do
				local button = maid:GiveTask(Module.tertiary(
					style,
					{
						Types.ButtonData.new(function()
							print("click 1")
						end, Icons.gamepad, nil, true),
						Types.ButtonData.new(function()
							print("click 2")
						end, Icons.waves, nil, true),
						Types.ButtonData.new(function()
							print("click 3")
						end, Icons.work_off, nil, true),
					},
					Types.ButtonData.new(function()
						print("click fab")
					end, Icons.plus_one, nil, true)
				))
				button.Parent = halfFrame
			end

			return halfFrame
		end

		local COLORS: { [number]: Color3 } = {
			-- 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(1, width * 0.5)
			dark.Position = UDim2.fromScale(0, x)
			dark.Parent = frame

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


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

-- Modules
local Types = require(_Package:WaitForChild("Types"))
local IconButton = require(
	_Package
		:WaitForChild("Component")
		:WaitForChild("Button")
		:WaitForChild("IconButton")
		:WaitForChild("ColdFusion")
)
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))
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 ImageData = Types.ImageData
type OptionData = Types.OptionData
type Signal = Signal.Signal
type ButtonData = Types.ButtonData
type Style = Style.Style
type FontData = Types.FontData

export type BarVariant = "Center" | "Small" | "Medium" | "Large"
-- Constants
local MAX_BUTTONS = 3
local ERROR_ICON = Icons.error
local BUTTON_SEPARATION_DP = 10
local BAR_TOP_BOTTOM_PADDING_DP = 12
local BAR_LEFT_RIGHT_PADDING_DP = 10
local LOWER_TEXT_MEDIUM_HEIGHT_DP = 36
local LOWER_TEXT_LARGE_HEIGHT_DP = 48
local LOWER_TEXT_MEDIUM_PADDING_DP = 18
local LOWER_TEXT_LARGE_PADDING_DP = 24
local UPPER_TEXT_HEIGHT_DP = 36
-- Variables
-- References
-- Private Functions

-- Class
local Interface = {}

function Interface.new(
	title: CanBeState<string>,
	buttons: CanBeState<{ ButtonData }>,
	navigationButton: CanBeState<ButtonData?>,
	variant: CanBeState<BarVariant>,
	backgroundColor: CanBeState<Color3>,
	textColor: CanBeState<Color3>,
	elevation: CanBeState<number>,
	schemeType: CanBeState<Enums.SchemeType>,
	titleFontData: CanBeState<FontData>,
	subHeadingFontData: CanBeState<FontData>,
	buttonFontData: 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 buttonsState: State<{ ButtonData }> = _import(buttons, {})

	local scaleState: State<number> = _import(scale, 1)
	local schemeTypeState: State<Enums.SchemeType> = _import(schemeType, Enums.SchemeType.Light)
	local titleFontDataState: State<FontData> = _import(titleFontData, nil :: any)
	local subHeadingFontDataState: State<FontData> = _import(subHeadingFontData, nil :: any)
	local buttonFontDataState: State<FontData> = _import(buttonFontData, nil :: any)

	local navState: State<ButtonData?> = _import(navigationButton, nil :: ButtonData?)
	local variantState: State<BarVariant> = _import(variant, "Center" :: BarVariant)
	local backgroundColorState: State<Color3> = _import(backgroundColor, Color3.new(1, 1, 1))
	local elevationState: State<number> = _import(elevation, 1)
	local textColorState: State<Color3> = _import(textColor, Color3.new(1, 1, 1))

	local inst = _new("Frame")({
		AutomaticSize = Enum.AutomaticSize.XY,
		BackgroundColor3 = _Computed(function(color: Color3, e: number, st: Enums.SchemeType): Color3
			return Theme.getElevatedColor(color, e, st)
		end, backgroundColorState, elevationState, schemeTypeState),
		Children = {
			_new("UIListLayout")({
				Padding = _Computed(function(s: number, var: BarVariant): UDim
					if var == "Medium" then
						return UDim.new(0, LOWER_TEXT_MEDIUM_PADDING_DP * s)
					elseif var == "Large" then
						return UDim.new(0, LOWER_TEXT_LARGE_PADDING_DP * s)
					else
						return UDim.new(0, 0)
					end
				end, scaleState, variantState),
				HorizontalFlex = Enum.UIFlexAlignment.Fill,
				SortOrder = Enum.SortOrder.LayoutOrder,
				FillDirection = Enum.FillDirection.Vertical,
				ItemLineAlignment = Enum.ItemLineAlignment.Stretch,
				VerticalAlignment = Enum.VerticalAlignment.Center,
				HorizontalAlignment = Enum.HorizontalAlignment.Center,
			}),
			_new("UIPadding")({
				PaddingLeft = _Computed(function(s: number): UDim
					return UDim.new(0, BAR_LEFT_RIGHT_PADDING_DP * s)
				end, scaleState),
				PaddingRight = _Computed(function(s: number): UDim
					return UDim.new(0, BAR_LEFT_RIGHT_PADDING_DP * s)
				end, scaleState),
				PaddingTop = _Computed(function(s: number): UDim
					return UDim.new(0, BAR_TOP_BOTTOM_PADDING_DP * s)
				end, scaleState),
				PaddingBottom = _Computed(function(s: number): UDim
					return UDim.new(0, BAR_TOP_BOTTOM_PADDING_DP * s)
				end, scaleState),
			}),
			_new("TextLabel")({
				Name = "LowerText",
				Text = title,
				TextXAlignment = Enum.TextXAlignment.Left,
				AutomaticSize = Enum.AutomaticSize.X,
				LayoutOrder = 2,
				BackgroundTransparency = 1,
				TextColor3 = _Computed(function(color: Color3, e: number, st: Enums.SchemeType): Color3
					return Theme.getElevatedColor(color, e, st)
				end, textColorState, elevationState, schemeTypeState),
				Visible = _Computed(function(var: BarVariant): boolean
					return var == "Medium" or var == "Large"
				end, variantState),
				Size = _Computed(function(s: number, var: BarVariant): UDim2
					if var == "Medium" then
						return UDim2.fromOffset(0, LOWER_TEXT_MEDIUM_HEIGHT_DP * s)
					else
						return UDim2.fromOffset(0, LOWER_TEXT_LARGE_HEIGHT_DP * s)
					end
				end, scaleState, variantState),
				TextScaled = true,
				FontFace = _Computed(function(f: FontData): Font
					return f.Font
				end, subHeadingFontDataState),
			}),
		},
	}) :: Frame

	local main = _new("Frame")({
		AutomaticSize = Enum.AutomaticSize.XY,
		Parent = inst,
		LayoutOrder = 1,
		BackgroundTransparency = 1,
		Children = {
			_new("UIListLayout")({
				Padding = _Computed(function(s: number): UDim
					return UDim.new(0, 0)
				end, scaleState),
				HorizontalFlex = _Computed(function(var: BarVariant): Enum.UIFlexAlignment
					if var == "Center" then
						return Enum.UIFlexAlignment.SpaceBetween
					else
						return Enum.UIFlexAlignment.Fill
					end
				end, variantState),
				SortOrder = Enum.SortOrder.LayoutOrder,
				FillDirection = Enum.FillDirection.Horizontal,
				ItemLineAlignment = Enum.ItemLineAlignment.Center,
				VerticalAlignment = Enum.VerticalAlignment.Center,
				HorizontalAlignment = Enum.HorizontalAlignment.Center,
			}),
			_new("TextLabel")({
				Name = "MiddleText",
				Text = title,
				TextXAlignment = Enum.TextXAlignment.Center,
				AutomaticSize = Enum.AutomaticSize.X,
				LayoutOrder = 2,
				BackgroundTransparency = 1,
				Visible = _Computed(function(var: BarVariant): boolean
					return var == "Center"
				end, variantState),
				TextColor3 = _Computed(function(color: Color3, e: number, st: Enums.SchemeType): Color3
					return Theme.getElevatedColor(color, e, st)
				end, textColorState, elevationState, schemeTypeState),
				Size = _Computed(function(s: number): UDim2
					return UDim2.fromOffset(0, UPPER_TEXT_HEIGHT_DP * s)
				end, scaleState),
				TextScaled = true,
				FontFace = _Computed(function(f: FontData): Font
					return f.Font
				end, titleFontDataState),
			}),
			_new("Frame")({
				AutomaticSize = Enum.AutomaticSize.XY,
				LayoutOrder = 1,
				BackgroundTransparency = 1,
				Children = {
					_new("UIListLayout")({
						Padding = _Computed(function(s: number): UDim
							return UDim.new(0, s * BUTTON_SEPARATION_DP)
						end, scaleState),
						SortOrder = Enum.SortOrder.LayoutOrder,
						FillDirection = Enum.FillDirection.Horizontal,
						ItemLineAlignment = Enum.ItemLineAlignment.Center,
						VerticalAlignment = Enum.VerticalAlignment.Center,
						HorizontalAlignment = Enum.HorizontalAlignment.Left,
					}),
					_new("TextLabel")({
						Name = "LeftText",
						Text = title,
						TextXAlignment = Enum.TextXAlignment.Center,
						AutomaticSize = Enum.AutomaticSize.X,
						LayoutOrder = 2,
						BackgroundTransparency = 1,
						Visible = _Computed(function(var: BarVariant): boolean
							return var == "Small"
						end, variantState),
						TextColor3 = _Computed(
							function(color: Color3, e: number, st: Enums.SchemeType): Color3
								return Theme.getElevatedColor(color, e, st)
							end,
							textColorState,
							elevationState,
							schemeTypeState
						),
						Size = _Computed(function(s: number): UDim2
							return UDim2.fromOffset(0, UPPER_TEXT_HEIGHT_DP * s)
						end, scaleState),
						TextScaled = true,
						FontFace = _Computed(function(f: FontData): Font
							return f.Font
						end, titleFontDataState),
					}),
					_bind(IconButton.new(
						_Computed(function(nData: ButtonData?)
							return if nData then nData.OnClick else function() end
						end, navState),
						_Computed(function(nData: ButtonData?): ImageData
							return if nData and nData.Icon then nData.Icon else ERROR_ICON
						end, navState),
						textColor,
						textColor,
						_Computed(function(nData: ButtonData?): boolean
							return if nData then nData.Enabled else false
						end, navState),
						elevation,
						schemeTypeState,
						buttonFontDataState,
						scaleState
					))({
						LayoutOrder = 1,
						Visible = _Computed(function(nData: ButtonData?): boolean
							return if nData then nData.Enabled else false
						end, navState),
					}),
				},
			}),
		},
	})

	local buttonContainer = _new("Frame")({
		AutomaticSize = Enum.AutomaticSize.XY,
		Parent = main,
		LayoutOrder = 3,
		BackgroundTransparency = 1,
		Children = {
			_new("UIListLayout")({
				Padding = _Computed(function(s: number): UDim
					return UDim.new(0, s * BUTTON_SEPARATION_DP)
				end, scaleState),
				SortOrder = Enum.SortOrder.LayoutOrder,
				FillDirection = Enum.FillDirection.Horizontal,
				ItemLineAlignment = Enum.ItemLineAlignment.Center,
				VerticalAlignment = Enum.VerticalAlignment.Center,
				HorizontalAlignment = Enum.HorizontalAlignment.Right,
			}),
		},
	}) :: Frame

	for i = 1, MAX_BUTTONS do
		local buttonData = _Computed(function(bs: { ButtonData }): ButtonData?
			return bs[i]
		end, buttonsState)

		_bind(IconButton.new(
			_Computed(function(nData: ButtonData?)
				return if nData then nData.OnClick else function() end
			end, buttonData),
			_Computed(function(nData: ButtonData?): ImageData
				return if nData and nData.Icon then nData.Icon else ERROR_ICON
			end, buttonData),
			textColor,
			textColor,
			_Computed(function(nData: ButtonData?): boolean
				return if nData then nData.Enabled else false
			end, buttonData),
			elevation,
			schemeTypeState,
			buttonFontDataState,
			scaleState
		))({
			LayoutOrder = i,
			Visible = _Computed(function(nData: ButtonData?): boolean
				return if nData then nData.Enabled else false
			end, buttonData),
			Parent = buttonContainer,
		})
	end

	return inst
end

return Interface


--!strict
local _Package = script.Parent.Parent.Parent.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 TopBase = require(script.Parent.Parent:WaitForChild("Base"))
local Enums = require(_Package:WaitForChild("Enums"))

-- Types
type Maid = Maid.Maid
type State<V> = ColdFusion.State<V>
type ValueState<V> = ColdFusion.ValueState<V>
type CanBeState<V> = ColdFusion.CanBeState<V>
type ImageData = Types.ImageData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type Style = Style.Style
type FontData = Types.FontData
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))

-- Variables
-- References
-- Private Functions

-- Class
local Interface = {}

function newThemedComponent(
	themeDefaults: typeof(DEFAULTS.PRIMARY),
	style: CanBeState<Style>,

	backgroundColor: Enums.ColorRoleType,
	textColor: Enums.ColorRoleType,

	title: CanBeState<string>,
	buttons: CanBeState<{ ButtonData }>,
	navigation: CanBeState<ButtonData?>,
	elevation: 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 styleState: State<Style> = _import(style, themeDefaults.STYLE)

	local out = Interface.new(
		_import(title, themeDefaults.TITLE),
		_import(buttons, themeDefaults.BUTTONS),
		_import(navigation, themeDefaults.NAVIGATION),
		_Computed(function(s: Style): Color3
			return s:GetColor(backgroundColor)
		end, styleState),
		_Computed(function(s: Style): Color3
			return s:GetColor(textColor)
		end, styleState),
		_import(elevation, themeDefaults.ELEVATION),
		_Computed(function(s: Style): any
			return s.SchemeType
		end, styleState),
		_Computed(function(s: Style): FontData
			return s:GetFontData(Enums.FontType.TitleLarge)
		end, styleState),
		_Computed(function(s: Style): FontData
			return s:GetFontData(Enums.FontType.HeadlineMedium)
		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>,
	title: CanBeState<string>,
	buttons: CanBeState<{ ButtonData }>,
	navigation: CanBeState<ButtonData?>,
	elevation: CanBeState<number?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.PRIMARY,
		style,
		Enums.ColorRoleType.Primary,
		Enums.ColorRoleType.OnPrimary,
		title,
		buttons,
		navigation,
		elevation
	)
end

function Interface.secondary(
	style: CanBeState<Style>,
	title: CanBeState<string>,
	buttons: CanBeState<{ ButtonData }>,
	navigation: CanBeState<ButtonData?>,
	elevation: CanBeState<number?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.SECONDARY,
		style,
		Enums.ColorRoleType.Secondary,
		Enums.ColorRoleType.OnSecondary,
		title,
		buttons,
		navigation,
		elevation
	)
end

function Interface.tertiary(
	style: CanBeState<Style>,
	title: CanBeState<string>,
	buttons: CanBeState<{ ButtonData }>,
	navigation: CanBeState<ButtonData?>,
	elevation: CanBeState<number?>
): GuiObject
	return newThemedComponent(
		DEFAULTS.TERTIARY,
		style,
		Enums.ColorRoleType.Tertiary,
		Enums.ColorRoleType.OnTertiary,
		title,
		buttons,
		navigation,
		elevation
	)
end

function Interface.new(
	title: CanBeState<string>,
	buttons: CanBeState<{ ButtonData }>,
	navigation: CanBeState<ButtonData?>,
	backgroundColor: CanBeState<Color3>,
	textColor: CanBeState<Color3>,
	elevation: CanBeState<number>,
	schemeType: CanBeState<Enums.SchemeType>,
	titleFontData: CanBeState<FontData>,
	subHeadingFontData: CanBeState<FontData>,
	buttonFontData: CanBeState<FontData>,
	scale: CanBeState<number>
): GuiObject
	return TopBase.new(
		if title then title else DEFAULTS.NEW.TITLE,
		if buttons then buttons else DEFAULTS.NEW.BUTTONS,
		if navigation then navigation else DEFAULTS.NEW.NAVIGATION,
		"Center",
		if backgroundColor then backgroundColor else DEFAULTS.NEW.BACKGROUND_COLOR,
		if textColor then textColor else DEFAULTS.NEW.TEXT_COLOR,
		if elevation then elevation elseif DEFAULTS.NEW.ELEVATION then DEFAULTS.NEW.ELEVATION else 0,
		if schemeType then schemeType else DEFAULTS.NEW.SCHEME_TYPE,
		if titleFontData then titleFontData else DEFAULTS.NEW.TITLE_FONT_DATA,
		if subHeadingFontData then subHeadingFontData else DEFAULTS.NEW.SUB_HEADING_FONT_DATA,
		if buttonFontData then buttonFontData else DEFAULTS.NEW.BUTTON_FONT_DATA,
		if scale then scale else DEFAULTS.NEW.SCALE
	)
end

return Interface


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.Parent.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 = {
		TITLE = "Title",
		BUTTONS = {},
		NAVIGATION = nil :: ButtonData?,
		BACKGROUND_COLOR = Color3.new(),
		TEXT_COLOR = Color3.new(),
		ELEVATION = 0,
		SCHEME_TYPE = Enums.SchemeType.Light,
		TITLE_FONT_DATA = Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14),
		SUB_HEADING_FONT_DATA = Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14),
		BUTTON_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)),
		TITLE = "Title",
		BUTTONS = {},
		NAVIGATION = nil :: ButtonData?,
		ELEVATION = 0,
	},
	SECONDARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		TITLE = "Title",
		BUTTONS = {},
		NAVIGATION = nil :: ButtonData?,
		ELEVATION = 0,
	},
	TERTIARY = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		TITLE = "Title",
		BUTTONS = {},
		NAVIGATION = nil :: ButtonData?,
		ELEVATION = 0,
	},
}


--!strict
-- this script was generated by the build system, please do not make manual edits
local _Package = script.Parent.Parent.Parent.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(
	title: FusionCanBeState<string>,
	buttons: FusionCanBeState<{ ButtonData }>,
	navigation: FusionCanBeState<ButtonData?>,
	backgroundColor: FusionCanBeState<Color3>,
	textColor: FusionCanBeState<Color3>,
	elevation: FusionCanBeState<number>,
	schemeType: FusionCanBeState<Enums.SchemeType>,
	titleFontData: FusionCanBeState<FontData>,
	subHeadingFontData: FusionCanBeState<FontData>,
	buttonFontData: 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(title, DEFAULTS.NEW.TITLE),
		convert(buttons, DEFAULTS.NEW.BUTTONS),
		convert(navigation, DEFAULTS.NEW.NAVIGATION),
		convert(backgroundColor, DEFAULTS.NEW.BACKGROUND_COLOR),
		convert(textColor, DEFAULTS.NEW.TEXT_COLOR),
		convert(elevation, DEFAULTS.NEW.ELEVATION),
		convert(schemeType, DEFAULTS.NEW.SCHEME_TYPE),
		convert(titleFontData, DEFAULTS.NEW.TITLE_FONT_DATA),
		convert(subHeadingFontData, DEFAULTS.NEW.SUB_HEADING_FONT_DATA),
		convert(buttonFontData, DEFAULTS.NEW.BUTTON_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>,
	title: FusionCanBeState<string>,
	buttons: FusionCanBeState<{ ButtonData }>,
	navigation: FusionCanBeState<ButtonData?>,
	elevation: 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.primary(
		convert(style, DEFAULTS.PRIMARY.STYLE),
		convert(title, DEFAULTS.PRIMARY.TITLE),
		convert(buttons, DEFAULTS.PRIMARY.BUTTONS),
		convert(navigation, DEFAULTS.PRIMARY.NAVIGATION),
		convert(elevation, DEFAULTS.PRIMARY.ELEVATION)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.secondary(
	style: FusionCanBeState<Style>,
	title: FusionCanBeState<string>,
	buttons: FusionCanBeState<{ ButtonData }>,
	navigation: FusionCanBeState<ButtonData?>,
	elevation: 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.secondary(
		convert(style, DEFAULTS.SECONDARY.STYLE),
		convert(title, DEFAULTS.SECONDARY.TITLE),
		convert(buttons, DEFAULTS.SECONDARY.BUTTONS),
		convert(navigation, DEFAULTS.SECONDARY.NAVIGATION),
		convert(elevation, DEFAULTS.SECONDARY.ELEVATION)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.tertiary(
	style: FusionCanBeState<Style>,
	title: FusionCanBeState<string>,
	buttons: FusionCanBeState<{ ButtonData }>,
	navigation: FusionCanBeState<ButtonData?>,
	elevation: 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.tertiary(
		convert(style, DEFAULTS.TERTIARY.STYLE),
		convert(title, DEFAULTS.TERTIARY.TITLE),
		convert(buttons, DEFAULTS.TERTIARY.BUTTONS),
		convert(navigation, DEFAULTS.TERTIARY.NAVIGATION),
		convert(elevation, DEFAULTS.TERTIARY.ELEVATION)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

return Interface