--!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 NewSlider = Roact.Component:extend("NewSlider")
	NewSlider.defaultProps = {
		onChange = DEFAULTS.NEW.ON_CHANGE,
		initialValue = DEFAULTS.NEW.INITIAL_VALUE,
		minimum = DEFAULTS.NEW.MINIMUM,
		maximum = DEFAULTS.NEW.MAXIMUM,
		increment = DEFAULTS.NEW.INCREMENT,
		leftTextOrIcon = DEFAULTS.NEW.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.NEW.RIGHT_TEXT_OR_ICON,
		onBackgroundColor = DEFAULTS.NEW.ON_BACKGROUND_COLOR,
		onBackgroundTextColor = DEFAULTS.NEW.ON_BACKGROUND_TEXT_COLOR,
		fillColor = DEFAULTS.NEW.FILL_COLOR,
		fillContainerColor = DEFAULTS.NEW.FILL_CONTAINER_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewSlider:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			onChange = _Value(self.defaultProps.onChange),
			initialValue = _Value(self.defaultProps.initialValue),
			minimum = _Value(self.defaultProps.minimum),
			maximum = _Value(self.defaultProps.maximum),
			increment = _Value(self.defaultProps.increment),
			leftTextOrIcon = _Value(self.defaultProps.leftTextOrIcon),
			rightTextOrIcon = _Value(self.defaultProps.rightTextOrIcon),
			onBackgroundColor = _Value(self.defaultProps.onBackgroundColor),
			onBackgroundTextColor = _Value(self.defaultProps.onBackgroundTextColor),
			fillColor = _Value(self.defaultProps.fillColor),
			fillContainerColor = _Value(self.defaultProps.fillContainerColor),
			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.onChange,
			self._internalStates.initialValue,
			self._internalStates.minimum,
			self._internalStates.maximum,
			self._internalStates.increment,
			self._internalStates.leftTextOrIcon,
			self._internalStates.rightTextOrIcon,
			self._internalStates.onBackgroundColor,
			self._internalStates.onBackgroundTextColor,
			self._internalStates.fillColor,
			self._internalStates.fillContainerColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

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

do
	local PrimarySlider = Roact.Component:extend("PrimarySlider")
	PrimarySlider.defaultProps = {
		style = DEFAULTS.PRIMARY.STYLE,
		onChange = DEFAULTS.PRIMARY.ON_CHANGE,
		initialValue = DEFAULTS.PRIMARY.INITIAL_VALUE,
		minimum = DEFAULTS.PRIMARY.MINIMUM,
		maximum = DEFAULTS.PRIMARY.MAXIMUM,
		increment = DEFAULTS.PRIMARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.PRIMARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.PRIMARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
	}
	function PrimarySlider: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),
			onChange = _Value(self.defaultProps.onChange),
			initialValue = _Value(self.defaultProps.initialValue),
			minimum = _Value(self.defaultProps.minimum),
			maximum = _Value(self.defaultProps.maximum),
			increment = _Value(self.defaultProps.increment),
			leftTextOrIcon = _Value(self.defaultProps.leftTextOrIcon),
			rightTextOrIcon = _Value(self.defaultProps.rightTextOrIcon),
			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.onChange,
			self._internalStates.initialValue,
			self._internalStates.minimum,
			self._internalStates.maximum,
			self._internalStates.increment,
			self._internalStates.leftTextOrIcon,
			self._internalStates.rightTextOrIcon,
			self._internalStates.elevation
		)
	end

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

do
	local SecondarySlider = Roact.Component:extend("SecondarySlider")
	SecondarySlider.defaultProps = {
		style = DEFAULTS.SECONDARY.STYLE,
		onChange = DEFAULTS.SECONDARY.ON_CHANGE,
		initialValue = DEFAULTS.SECONDARY.INITIAL_VALUE,
		minimum = DEFAULTS.SECONDARY.MINIMUM,
		maximum = DEFAULTS.SECONDARY.MAXIMUM,
		increment = DEFAULTS.SECONDARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.SECONDARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.SECONDARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
	}
	function SecondarySlider: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),
			onChange = _Value(self.defaultProps.onChange),
			initialValue = _Value(self.defaultProps.initialValue),
			minimum = _Value(self.defaultProps.minimum),
			maximum = _Value(self.defaultProps.maximum),
			increment = _Value(self.defaultProps.increment),
			leftTextOrIcon = _Value(self.defaultProps.leftTextOrIcon),
			rightTextOrIcon = _Value(self.defaultProps.rightTextOrIcon),
			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.onChange,
			self._internalStates.initialValue,
			self._internalStates.minimum,
			self._internalStates.maximum,
			self._internalStates.increment,
			self._internalStates.leftTextOrIcon,
			self._internalStates.rightTextOrIcon,
			self._internalStates.elevation
		)
	end

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

do
	local TertiarySlider = Roact.Component:extend("TertiarySlider")
	TertiarySlider.defaultProps = {
		style = DEFAULTS.TERTIARY.STYLE,
		onChange = DEFAULTS.TERTIARY.ON_CHANGE,
		initialValue = DEFAULTS.TERTIARY.INITIAL_VALUE,
		minimum = DEFAULTS.TERTIARY.MINIMUM,
		maximum = DEFAULTS.TERTIARY.MAXIMUM,
		increment = DEFAULTS.TERTIARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.TERTIARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.TERTIARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
	}
	function TertiarySlider: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),
			onChange = _Value(self.defaultProps.onChange),
			initialValue = _Value(self.defaultProps.initialValue),
			minimum = _Value(self.defaultProps.minimum),
			maximum = _Value(self.defaultProps.maximum),
			increment = _Value(self.defaultProps.increment),
			leftTextOrIcon = _Value(self.defaultProps.leftTextOrIcon),
			rightTextOrIcon = _Value(self.defaultProps.rightTextOrIcon),
			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.onChange,
			self._internalStates.initialValue,
			self._internalStates.minimum,
			self._internalStates.maximum,
			self._internalStates.increment,
			self._internalStates.leftTextOrIcon,
			self._internalStates.rightTextOrIcon,
			self._internalStates.elevation
		)
	end

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

do
	local OnPrimarySlider = Roact.Component:extend("OnPrimarySlider")
	OnPrimarySlider.defaultProps = {
		style = DEFAULTS.ON_PRIMARY.STYLE,
		onChange = DEFAULTS.ON_PRIMARY.ON_CHANGE,
		initialValue = DEFAULTS.ON_PRIMARY.INITIAL_VALUE,
		minimum = DEFAULTS.ON_PRIMARY.MINIMUM,
		maximum = DEFAULTS.ON_PRIMARY.MAXIMUM,
		increment = DEFAULTS.ON_PRIMARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.ON_PRIMARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.ON_PRIMARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.ON_PRIMARY.ELEVATION,
	}
	function OnPrimarySlider: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),
			onChange = _Value(self.defaultProps.onChange),
			initialValue = _Value(self.defaultProps.initialValue),
			minimum = _Value(self.defaultProps.minimum),
			maximum = _Value(self.defaultProps.maximum),
			increment = _Value(self.defaultProps.increment),
			leftTextOrIcon = _Value(self.defaultProps.leftTextOrIcon),
			rightTextOrIcon = _Value(self.defaultProps.rightTextOrIcon),
			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.onPrimary(
			self._internalStates.style,
			self._internalStates.onChange,
			self._internalStates.initialValue,
			self._internalStates.minimum,
			self._internalStates.maximum,
			self._internalStates.increment,
			self._internalStates.leftTextOrIcon,
			self._internalStates.rightTextOrIcon,
			self._internalStates.elevation
		)
	end

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

do
	local OnSecondarySlider = Roact.Component:extend("OnSecondarySlider")
	OnSecondarySlider.defaultProps = {
		style = DEFAULTS.ON_SECONDARY.STYLE,
		onChange = DEFAULTS.ON_SECONDARY.ON_CHANGE,
		initialValue = DEFAULTS.ON_SECONDARY.INITIAL_VALUE,
		minimum = DEFAULTS.ON_SECONDARY.MINIMUM,
		maximum = DEFAULTS.ON_SECONDARY.MAXIMUM,
		increment = DEFAULTS.ON_SECONDARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.ON_SECONDARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.ON_SECONDARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.ON_SECONDARY.ELEVATION,
	}
	function OnSecondarySlider: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),
			onChange = _Value(self.defaultProps.onChange),
			initialValue = _Value(self.defaultProps.initialValue),
			minimum = _Value(self.defaultProps.minimum),
			maximum = _Value(self.defaultProps.maximum),
			increment = _Value(self.defaultProps.increment),
			leftTextOrIcon = _Value(self.defaultProps.leftTextOrIcon),
			rightTextOrIcon = _Value(self.defaultProps.rightTextOrIcon),
			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.onSecondary(
			self._internalStates.style,
			self._internalStates.onChange,
			self._internalStates.initialValue,
			self._internalStates.minimum,
			self._internalStates.maximum,
			self._internalStates.increment,
			self._internalStates.leftTextOrIcon,
			self._internalStates.rightTextOrIcon,
			self._internalStates.elevation
		)
	end

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

do
	local OnTertiarySlider = Roact.Component:extend("OnTertiarySlider")
	OnTertiarySlider.defaultProps = {
		style = DEFAULTS.ON_TERTIARY.STYLE,
		onChange = DEFAULTS.ON_TERTIARY.ON_CHANGE,
		initialValue = DEFAULTS.ON_TERTIARY.INITIAL_VALUE,
		minimum = DEFAULTS.ON_TERTIARY.MINIMUM,
		maximum = DEFAULTS.ON_TERTIARY.MAXIMUM,
		increment = DEFAULTS.ON_TERTIARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.ON_TERTIARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.ON_TERTIARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.ON_TERTIARY.ELEVATION,
	}
	function OnTertiarySlider: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),
			onChange = _Value(self.defaultProps.onChange),
			initialValue = _Value(self.defaultProps.initialValue),
			minimum = _Value(self.defaultProps.minimum),
			maximum = _Value(self.defaultProps.maximum),
			increment = _Value(self.defaultProps.increment),
			leftTextOrIcon = _Value(self.defaultProps.leftTextOrIcon),
			rightTextOrIcon = _Value(self.defaultProps.rightTextOrIcon),
			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.onTertiary(
			self._internalStates.style,
			self._internalStates.onChange,
			self._internalStates.initialValue,
			self._internalStates.minimum,
			self._internalStates.maximum,
			self._internalStates.increment,
			self._internalStates.leftTextOrIcon,
			self._internalStates.rightTextOrIcon,
			self._internalStates.elevation
		)
	end

	function OnTertiarySlider: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 OnTertiarySlider: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 OnTertiarySlider:willUnmount()
		self._maid:Destroy()
		self._instance:Destroy()
	end
	Interface.OnTertiary = OnTertiarySlider
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 SliderWrapperDefinition = {
	OnChange: (onChange: number) -> (),
	InitialValue: number,
	Minimum: number?,
	Maximum: number?,
	Increment: number?,
	LeftTextOrIcon: (string | ImageData)?,
	RightTextOrIcon: (string | ImageData)?,
	OnBackgroundColor: Color3,
	OnBackgroundTextColor: Color3,
	FillColor: Color3,
	FillContainerColor: Color3,
	Elevation: number,
	SchemeType: Enums.SchemeType,
	FontData: FontData,
	Scale: number,
}
export type SliderWrapper = Wrapper<GuiObject, SliderWrapperDefinition, "Slider">

export type StyledSliderWrapperDefinition = {
	Style: Style,
	OnChange: (onChange: number) -> (),
	InitialValue: number,
	Minimum: number,
	Maximum: number,
	Increment: number?,
	LeftTextOrIcon: (string | ImageData)?,
	RightTextOrIcon: (string | ImageData)?,
	Elevation: number?,
}
export type StyledSliderWrapper = Wrapper<GuiObject, StyledSliderWrapperDefinition, "StyledSlider">
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Interface
local Interface = {}

function Interface.new(): StyledSliderWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		OnChange = _Value(function(onChange: number) end),
		InitialValue = _Value(50),
		Minimum = _Value(0),
		Maximum = _Value(100),
		Increment = _Value(nil),
		LeftTextOrIcon = _Value(nil),
		RightTextOrIcon = _Value(nil),
		OnBackgroundColor = _Value(Color3.new()),
		OnBackgroundTextColor = _Value(Color3.new()),
		FillColor = _Value(Color3.new()),
		FillContainerColor = _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? } = {
		onChange = DEFAULTS.NEW.ON_CHANGE,
		initialValue = DEFAULTS.NEW.INITIAL_VALUE,
		minimum = DEFAULTS.NEW.MINIMUM,
		maximum = DEFAULTS.NEW.MAXIMUM,
		increment = DEFAULTS.NEW.INCREMENT,
		leftTextOrIcon = DEFAULTS.NEW.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.NEW.RIGHT_TEXT_OR_ICON,
		onBackgroundColor = DEFAULTS.NEW.ON_BACKGROUND_COLOR,
		onBackgroundTextColor = DEFAULTS.NEW.ON_BACKGROUND_TEXT_COLOR,
		fillColor = DEFAULTS.NEW.FILL_COLOR,
		fillContainerColor = DEFAULTS.NEW.FILL_CONTAINER_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.OnChange,
		definition.InitialValue,
		definition.Minimum,
		definition.Maximum,
		definition.Increment,
		definition.LeftTextOrIcon,
		definition.RightTextOrIcon,
		definition.OnBackgroundColor,
		definition.OnBackgroundTextColor,
		definition.FillColor,
		definition.FillContainerColor,
		definition.Elevation,
		definition.SchemeType,
		definition.FontData,
		definition.Scale
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSlider", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primary(): StyledSliderWrapper
	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))),
		OnChange = _Value(function(onChange: number) end),
		InitialValue = _Value(50),
		Minimum = _Value(0),
		Maximum = _Value(100),
		Increment = _Value(nil),
		LeftTextOrIcon = _Value(nil),
		RightTextOrIcon = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY.STYLE,
		onChange = DEFAULTS.PRIMARY.ON_CHANGE,
		initialValue = DEFAULTS.PRIMARY.INITIAL_VALUE,
		minimum = DEFAULTS.PRIMARY.MINIMUM,
		maximum = DEFAULTS.PRIMARY.MAXIMUM,
		increment = DEFAULTS.PRIMARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.PRIMARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.PRIMARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.PRIMARY.ELEVATION,
	}
	local inst: GuiObject = Source.primary(
		definition.Style,
		definition.OnChange,
		definition.InitialValue,
		definition.Minimum,
		definition.Maximum,
		definition.Increment,
		definition.LeftTextOrIcon,
		definition.RightTextOrIcon,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSlider", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondary(): StyledSliderWrapper
	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))),
		OnChange = _Value(function(onChange: number) end),
		InitialValue = _Value(50),
		Minimum = _Value(0),
		Maximum = _Value(100),
		Increment = _Value(nil),
		LeftTextOrIcon = _Value(nil),
		RightTextOrIcon = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY.STYLE,
		onChange = DEFAULTS.SECONDARY.ON_CHANGE,
		initialValue = DEFAULTS.SECONDARY.INITIAL_VALUE,
		minimum = DEFAULTS.SECONDARY.MINIMUM,
		maximum = DEFAULTS.SECONDARY.MAXIMUM,
		increment = DEFAULTS.SECONDARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.SECONDARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.SECONDARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.SECONDARY.ELEVATION,
	}
	local inst: GuiObject = Source.secondary(
		definition.Style,
		definition.OnChange,
		definition.InitialValue,
		definition.Minimum,
		definition.Maximum,
		definition.Increment,
		definition.LeftTextOrIcon,
		definition.RightTextOrIcon,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSlider", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiary(): StyledSliderWrapper
	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))),
		OnChange = _Value(function(onChange: number) end),
		InitialValue = _Value(50),
		Minimum = _Value(0),
		Maximum = _Value(100),
		Increment = _Value(nil),
		LeftTextOrIcon = _Value(nil),
		RightTextOrIcon = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY.STYLE,
		onChange = DEFAULTS.TERTIARY.ON_CHANGE,
		initialValue = DEFAULTS.TERTIARY.INITIAL_VALUE,
		minimum = DEFAULTS.TERTIARY.MINIMUM,
		maximum = DEFAULTS.TERTIARY.MAXIMUM,
		increment = DEFAULTS.TERTIARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.TERTIARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.TERTIARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.TERTIARY.ELEVATION,
	}
	local inst: GuiObject = Source.tertiary(
		definition.Style,
		definition.OnChange,
		definition.InitialValue,
		definition.Minimum,
		definition.Maximum,
		definition.Increment,
		definition.LeftTextOrIcon,
		definition.RightTextOrIcon,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSlider", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.onPrimary(): StyledSliderWrapper
	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))),
		OnChange = _Value(function(onChange: number) end),
		InitialValue = _Value(50),
		Minimum = _Value(0),
		Maximum = _Value(100),
		Increment = _Value(nil),
		LeftTextOrIcon = _Value(nil),
		RightTextOrIcon = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.ON_PRIMARY.STYLE,
		onChange = DEFAULTS.ON_PRIMARY.ON_CHANGE,
		initialValue = DEFAULTS.ON_PRIMARY.INITIAL_VALUE,
		minimum = DEFAULTS.ON_PRIMARY.MINIMUM,
		maximum = DEFAULTS.ON_PRIMARY.MAXIMUM,
		increment = DEFAULTS.ON_PRIMARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.ON_PRIMARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.ON_PRIMARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.ON_PRIMARY.ELEVATION,
	}
	local inst: GuiObject = Source.onPrimary(
		definition.Style,
		definition.OnChange,
		definition.InitialValue,
		definition.Minimum,
		definition.Maximum,
		definition.Increment,
		definition.LeftTextOrIcon,
		definition.RightTextOrIcon,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSlider", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.onSecondary(): StyledSliderWrapper
	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))),
		OnChange = _Value(function(onChange: number) end),
		InitialValue = _Value(50),
		Minimum = _Value(0),
		Maximum = _Value(100),
		Increment = _Value(nil),
		LeftTextOrIcon = _Value(nil),
		RightTextOrIcon = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.ON_SECONDARY.STYLE,
		onChange = DEFAULTS.ON_SECONDARY.ON_CHANGE,
		initialValue = DEFAULTS.ON_SECONDARY.INITIAL_VALUE,
		minimum = DEFAULTS.ON_SECONDARY.MINIMUM,
		maximum = DEFAULTS.ON_SECONDARY.MAXIMUM,
		increment = DEFAULTS.ON_SECONDARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.ON_SECONDARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.ON_SECONDARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.ON_SECONDARY.ELEVATION,
	}
	local inst: GuiObject = Source.onSecondary(
		definition.Style,
		definition.OnChange,
		definition.InitialValue,
		definition.Minimum,
		definition.Maximum,
		definition.Increment,
		definition.LeftTextOrIcon,
		definition.RightTextOrIcon,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSlider", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.onTertiary(): StyledSliderWrapper
	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))),
		OnChange = _Value(function(onChange: number) end),
		InitialValue = _Value(50),
		Minimum = _Value(0),
		Maximum = _Value(100),
		Increment = _Value(nil),
		LeftTextOrIcon = _Value(nil),
		RightTextOrIcon = _Value(nil),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.ON_TERTIARY.STYLE,
		onChange = DEFAULTS.ON_TERTIARY.ON_CHANGE,
		initialValue = DEFAULTS.ON_TERTIARY.INITIAL_VALUE,
		minimum = DEFAULTS.ON_TERTIARY.MINIMUM,
		maximum = DEFAULTS.ON_TERTIARY.MAXIMUM,
		increment = DEFAULTS.ON_TERTIARY.INCREMENT,
		leftTextOrIcon = DEFAULTS.ON_TERTIARY.LEFT_TEXT_OR_ICON,
		rightTextOrIcon = DEFAULTS.ON_TERTIARY.RIGHT_TEXT_OR_ICON,
		elevation = DEFAULTS.ON_TERTIARY.ELEVATION,
	}
	local inst: GuiObject = Source.onTertiary(
		definition.Style,
		definition.OnChange,
		definition.InitialValue,
		definition.Minimum,
		definition.Maximum,
		definition.Increment,
		definition.LeftTextOrIcon,
		definition.RightTextOrIcon,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledSlider", 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"))

-- 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.45,
				Enum.Font.SourceSans,
				if isDarkMode then Enums.SchemeType.Dark else Enums.SchemeType.Light,
				color
			)

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

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

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

			do
				local button = maid:GiveTask(
					Module.new(
						function(val: number)
							print(`value={val}`)
						end,
						50,
						0,
						100,
						10,
						Icons.remove,
						Icons.add,
						style:GetColor(Enums.ColorRoleType.OnSurface),
						style:GetColor(Enums.ColorRoleType.Surface),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			do
				local button = maid:GiveTask(
					Module.new(
						function(val: number)
							print(`value={val}`)
						end,
						40,
						0,
						50,
						nil,
						"Low",
						"High",
						style:GetColor(Enums.ColorRoleType.OnSurface),
						style:GetColor(Enums.ColorRoleType.Surface),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			-- do
			-- 	local button = maid:GiveTask(
			-- 		Module.new(
			-- 			function(val: number)
			-- 				print(`value={val}`)
			-- 			end,
			-- 			50,
			-- 			0,
			-- 			100,
			-- 			10,
			-- 			Icons.remove,
			-- 			Icons.add,
			-- 			style:GetColor(Enums.ColorRoleType.OnSurface),
			-- 			style:GetColor(Enums.ColorRoleType.Surface),
			-- 			style:GetColor(Enums.ColorRoleType.Primary),
			-- 			style:GetColor(Enums.ColorRoleType.PrimaryContainer),
			-- 			1,
			-- 			style.SchemeType,
			-- 			style:GetFontData(Enums.FontType.LabelLarge),
			-- 			style.Scale
			-- 		)
			-- 	)
			-- 	button.Parent = halfFrame
			-- end

			do
				local button = maid:GiveTask(
					Module.new(
						function(val: number)
							print(`value={val}`)
						end,
						50,
						0,
						150,
						nil,
						nil,
						nil,
						style:GetColor(Enums.ColorRoleType.OnSurface),
						style:GetColor(Enums.ColorRoleType.Surface),
						style:GetColor(Enums.ColorRoleType.Primary),
						style:GetColor(Enums.ColorRoleType.PrimaryContainer),
						1,
						style.SchemeType,
						style:GetFontData(Enums.FontType.LabelLarge),
						style.Scale
					)
				)
				button.Parent = halfFrame
			end

			return halfFrame
		end

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

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

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

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


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

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

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

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

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

			do
				local button = maid:GiveTask(Module.primary(style, function(val: number)
					print(`value={val}`)
				end, 50, 50, 150, 25))
				button.Parent = halfFrame
			end
			-- do
			-- 	local button = maid:GiveTask(Module.secondary(style, function(val: number)
			-- 		print(`value={val}`)
			-- 	end, 50, 0, 100, 25, nil, nil, 1))
			-- 	button.Parent = halfFrame
			-- end
			-- do
			-- 	local button = maid:GiveTask(Module.tertiary(style, function(val: number)
			-- 		print(`value={val}`)
			-- 	end, 50, 0, 100, 25, nil, nil, 1))
			-- 	button.Parent = halfFrame
			-- end
			-- do
			-- 	local button = maid:GiveTask(Module.onPrimary(style, function(val: number)
			-- 		print(`value={val}`)
			-- 	end, 50, 0, 100, 25, nil, nil, 1))
			-- 	button.Parent = halfFrame
			-- end
			-- do
			-- 	local button = maid:GiveTask(Module.onSecondary(style, function(val: number)
			-- 		print(`value={val}`)
			-- 	end, 50, 0, 100, 25, nil, nil, 1))
			-- 	button.Parent = halfFrame
			-- end
			-- do
			-- 	local button = maid:GiveTask(Module.onTertiary(style, function(val: number)
			-- 		print(`value={val}`)
			-- 	end, 50, 0, 100, 25, nil, nil, 1))
			-- 	button.Parent = halfFrame
			-- end
			return halfFrame
		end

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

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

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

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


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

-- Modules
local IconButton = require(
	_Package
		:WaitForChild("Component")
		:WaitForChild("Button")
		:WaitForChild("IconButton")
		:WaitForChild("ColdFusion")
)
local TextButton = require(
	_Package
		:WaitForChild("Component")
		:WaitForChild("Button")
		:WaitForChild("TextButton")
		:WaitForChild("ColdFusion")
)
local Util = require(_Package:WaitForChild("Util"))
local Types = require(_Package:WaitForChild("Types"))
local Style = require(_Package:WaitForChild("Style"))
local Enums = require(_Package:WaitForChild("Enums"))
local Typography = require(_Package:WaitForChild("Typography"))

-- Types
type Maid = Maid.Maid
type State<V> = ColdFusion.State<V>
type ValueState<V> = ColdFusion.ValueState<V>
type CanBeState<V> = ColdFusion.CanBeState<V>
type RenderData = Types.RenderData
type ImageData = Types.ImageData
type OptionData = Types.OptionData
type ButtonData = Types.ButtonData
type Style = Style.Style
type Method = () -> ()
type FontData = Types.FontData

-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
local PADDING_DP = 8
local CORNER_DP = 4
-- Variables
-- References

-- Private Functions

-- Class
local Interface = {}

function Interface.surfaceContainer(
	style: CanBeState<Style>,
	text: CanBeState<string>,
	buttonText: CanBeState<string?>,
	onButtonClick: CanBeState<Method?>,
	onCloseClick: CanBeState<Method?>,
	elevation: CanBeState<number?>
)
	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, DEFAULTS.SURFACE_CONTAINER.STYLE)
	local elevationState: State<number> = _import(elevation, DEFAULTS.SURFACE_CONTAINER.ELEVATION or 0)

	local inst = Interface.new(
		_import(text, DEFAULTS.SURFACE_CONTAINER.TEXT or ""),
		_import(buttonText, DEFAULTS.SURFACE_CONTAINER.BUTTON_TEXT or ""),
		_import(onButtonClick, DEFAULTS.SURFACE_CONTAINER.ON_BUTTON_CLICK),
		_import(onCloseClick, DEFAULTS.SURFACE_CONTAINER.ON_CLOSE_CLICK),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.OnSurface, e)
		end, styleState, elevationState),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.Primary, e)
		end, styleState, elevationState),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.SurfaceContainer, e)
		end, styleState, elevationState),
		elevationState,
		_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(inst.Destroying:Connect(function()
		maid:Destroy()
	end))

	return inst
end

function Interface.primaryContainer(
	style: CanBeState<Style>,
	text: CanBeState<string>,
	buttonText: CanBeState<string?>,
	onButtonClick: CanBeState<Method?>,
	onCloseClick: CanBeState<Method?>,
	elevation: CanBeState<number?>
)
	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, DEFAULTS.PRIMARY_CONTAINER.STYLE)
	local elevationState: State<number> = _import(elevation, DEFAULTS.PRIMARY_CONTAINER.ELEVATION or 0)

	local inst = Interface.new(
		_import(text, DEFAULTS.PRIMARY_CONTAINER.TEXT or ""),
		_import(buttonText, DEFAULTS.PRIMARY_CONTAINER.BUTTON_TEXT or ""),
		_import(onButtonClick, DEFAULTS.PRIMARY_CONTAINER.ON_BUTTON_CLICK),
		_import(onCloseClick, DEFAULTS.PRIMARY_CONTAINER.ON_CLOSE_CLICK),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.OnPrimaryContainer, e)
		end, styleState, elevationState),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.Primary, e)
		end, styleState, elevationState),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.PrimaryContainer, e)
		end, styleState, elevationState),
		elevationState,
		_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(inst.Destroying:Connect(function()
		maid:Destroy()
	end))

	return inst
end

function Interface.secondaryContainer(
	style: CanBeState<Style>,
	text: CanBeState<string>,
	buttonText: CanBeState<string?>,
	onButtonClick: CanBeState<Method?>,
	onCloseClick: CanBeState<Method?>,
	elevation: CanBeState<number?>
)
	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, DEFAULTS.SECONDARY_CONTAINER.STYLE)
	local elevationState: State<number> = _import(elevation, DEFAULTS.SECONDARY_CONTAINER.ELEVATION or 0)

	local inst = Interface.new(
		_import(text, DEFAULTS.SECONDARY_CONTAINER.TEXT or ""),
		_import(buttonText, DEFAULTS.SECONDARY_CONTAINER.BUTTON_TEXT or ""),
		_import(onButtonClick, DEFAULTS.SECONDARY_CONTAINER.ON_BUTTON_CLICK),
		_import(onCloseClick, DEFAULTS.SECONDARY_CONTAINER.ON_CLOSE_CLICK),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.OnSecondaryContainer, e)
		end, styleState, elevationState),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.Secondary, e)
		end, styleState, elevationState),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.SecondaryContainer, e)
		end, styleState, elevationState),
		elevationState,
		_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(inst.Destroying:Connect(function()
		maid:Destroy()
	end))

	return inst
end

function Interface.tertiaryContainer(
	style: CanBeState<Style>,
	text: CanBeState<string>,
	buttonText: CanBeState<string?>,
	onButtonClick: CanBeState<Method?>,
	onCloseClick: CanBeState<Method?>,
	elevation: CanBeState<number?>
)
	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, DEFAULTS.TERTIARY_CONTAINER.STYLE)
	local elevationState: State<number> = _import(elevation, DEFAULTS.TERTIARY_CONTAINER.ELEVATION or 0)

	local inst = Interface.new(
		_import(text, DEFAULTS.TERTIARY_CONTAINER.TEXT or ""),
		_import(buttonText, DEFAULTS.TERTIARY_CONTAINER.BUTTON_TEXT or ""),
		_import(onButtonClick, DEFAULTS.TERTIARY_CONTAINER.ON_BUTTON_CLICK),
		_import(onCloseClick, DEFAULTS.TERTIARY_CONTAINER.ON_CLOSE_CLICK),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.OnTertiaryContainer, e)
		end, styleState, elevationState),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.Tertiary, e)
		end, styleState, elevationState),
		_Computed(function(s: Style, e: number?): Color3
			return s:GetColor(Enums.ColorRoleType.TertiaryContainer, e)
		end, styleState, elevationState),
		elevationState,
		_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(inst.Destroying:Connect(function()
		maid:Destroy()
	end))

	return inst
end

function Interface.new(
	text: CanBeState<string>,
	buttonText: CanBeState<string?>,
	onButtonClick: CanBeState<Method?>,
	onCloseClick: CanBeState<Method?>,
	textColor: CanBeState<Color3>,
	buttonTextColor: CanBeState<Color3>,
	backgroundColor: 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 scaleState: State<number> = _import(scale, DEFAULTS.NEW.SCALE or 1)
	local schemeTypeState: State<Enums.SchemeType> = _import(schemeType, DEFAULTS.NEW.SCHEME_TYPE)
	local fontDataState: State<FontData> = _import(fontData, DEFAULTS.NEW.FONT_DATA)

	local buttonTextState: State<string> = _import(buttonText, DEFAULTS.NEW.BUTTON_TEXT or "")

	local textState: State<string> = _import(text, DEFAULTS.NEW.TEXT or "")
	local elevationState: State<number> = _import(elevation, DEFAULTS.NEW.ELEVATION or 0)

	local onButtonClickState = _import(onButtonClick, DEFAULTS.NEW.ON_BUTTON_CLICK)
	local onCloseClickState = _import(onCloseClick, DEFAULTS.NEW.ON_CLOSE_CLICK)

	local backgroundColorState = _import(backgroundColor, DEFAULTS.NEW.BACKGROUND_COLOR)
	local textColorState = _import(textColor, DEFAULTS.NEW.TEXT_COLOR)
	local buttonTextColorState = _import(buttonTextColor, DEFAULTS.NEW.BUTTON_TEXT_COLOR)

	local inst: Frame = _new("Frame")({
		Name = "Snackbar",
		AutomaticSize = Enum.AutomaticSize.XY,
		BackgroundColor3 = backgroundColorState,
		Children = {
			maid:GiveTask(Util.Padding.ColdFusion.new(
				_Computed(function(sc: number): UDim
					return UDim.new(0, sc * PADDING_DP)
				end, scaleState),
				_Computed(function(sc: number): UDim
					return UDim.new(0, sc * PADDING_DP)
				end, scaleState)
			)) :: Instance,
			maid:GiveTask(_new("UICorner")({
				CornerRadius = _Computed(function(sc: number): UDim
					return UDim.new(0, sc * CORNER_DP)
				end, scaleState),
			})),
			maid:GiveTask(
				Util.List.ColdFusion.new(
					Enum.VerticalAlignment.Center,
					Enum.HorizontalAlignment.Right,
					Enum.FillDirection.Vertical,
					_Computed(function(sc: number): UDim
						return UDim.new(0, sc * PADDING_DP)
					end, scaleState),
					Enum.UIFlexAlignment.None,
					Enum.UIFlexAlignment.Fill,
					Enum.ItemLineAlignment.Stretch,
					false
				)
			),
			_new("TextLabel")({
				Name = "Text",
				Text = textState,
				RichText = true,
				TextWrapped = true,
				TextYAlignment = Enum.TextYAlignment.Top,
				TextXAlignment = Enum.TextXAlignment.Left,
				LayoutOrder = 1,
				Visible = _Computed(function(h: string): boolean
					return h:len() > 0
				end, textState),
				TextColor3 = textColorState,
				TextTransparency = 0,
				BackgroundTransparency = 1,
				AutomaticSize = Enum.AutomaticSize.XY,
				TextSize = _Computed(function(f: FontData, sc: number): number
					return Typography.getTextSize(f.Size, sc)
				end, fontDataState, scaleState),
				LineHeight = _Computed(function(f: FontData, sc: number): number
					return Typography.getGuiLineHeight(f.LineHeight, f.Size)
				end, fontDataState, scaleState),
				FontFace = _Computed(function(f: FontData): Font
					return f.Font
				end, fontDataState),
				Size = UDim2.fromOffset(0, 0),
				Children = {
					_new("UIFlexItem")({
						FlexMode = Enum.UIFlexMode.Shrink,
						ItemLineAlignment = Enum.ItemLineAlignment.Center,
					}),
				},
			}) :: Instance,
			_bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
				LayoutOrder = 3,
				Name = "Buttons",
				Children = {
					maid:GiveTask(
						Util.List.ColdFusion.new(
							Enum.VerticalAlignment.Center,
							Enum.HorizontalAlignment.Right,
							Enum.FillDirection.Horizontal,
							UDim.new(0, 0),
							Enum.UIFlexAlignment.None,
							Enum.UIFlexAlignment.None,
							Enum.ItemLineAlignment.Stretch,
							false
						)
					) :: Instance,
					_bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
						LayoutOrder = 2,
						Name = "Button",
						Visible = _Computed(function(onClick: Method?): boolean
							return onClick ~= nil
						end, onButtonClickState),
						Children = {
							maid:GiveTask(Util.List.ColdFusion.center()) :: Instance,
							maid:GiveTask(
								TextButton.new(
									_Computed(function(onClick: Method?): Method
										return onClick or function() end
									end, onButtonClickState),
									buttonTextState,
									nil,
									buttonTextColorState,
									textColorState,
									_Computed(function(onClick: Method?): boolean
										return onClick ~= nil
									end, onButtonClickState),
									elevationState,
									schemeTypeState,
									fontDataState,
									scaleState
								)
							) :: Instance,
						},
					}),
					_bind(maid:GiveTask(Util.Container.ColdFusion.new()))({
						LayoutOrder = 3,
						Name = "ExitButton",
						Visible = _Computed(function(onClick: Method?): boolean
							return onClick ~= nil
						end, onCloseClickState),
						Children = {
							maid:GiveTask(Util.List.ColdFusion.center()) :: Instance,
							maid:GiveTask(
								IconButton.new(
									_Computed(function(onClick: Method?): Method
										return onClick or function() end
									end, onCloseClickState),
									Icons.close,
									textColorState,
									textColorState,
									_Computed(function(onClick: Method?): boolean
										return onClick ~= nil
									end, onCloseClickState),
									elevationState,
									schemeTypeState,
									fontDataState,
									scaleState
								)
							) :: Instance,
						},
					}),
				},
			}),
		},
	}) :: Frame

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

	return inst
end

return Interface


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

-- 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 = {
		TEXT = "",
		BUTTON_TEXT = nil :: string?,
		ON_BUTTON_CLICK = nil :: ((() -> ())?),
		ON_CLOSE_CLICK = nil :: ((() -> ())?),
		TEXT_COLOR = Color3.new(),
		BUTTON_TEXT_COLOR = Color3.new(),
		BACKGROUND_COLOR = Color3.new(),
		ELEVATION = 0,
		SCHEME_TYPE = Enums.SchemeType.Light,
		FONT_DATA = Types.FontData.new(Font.fromEnum(Enum.Font.SourceSans), 14),
		SCALE = 1,
	},
	SURFACE_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		TEXT = "",
		BUTTON_TEXT = nil :: string?,
		ON_BUTTON_CLICK = nil :: ((() -> ())?),
		ON_CLOSE_CLICK = nil :: ((() -> ())?),
		ELEVATION = 0,
	},
	PRIMARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		TEXT = "",
		BUTTON_TEXT = nil :: string?,
		ON_BUTTON_CLICK = nil :: ((() -> ())?),
		ON_CLOSE_CLICK = nil :: ((() -> ())?),
		ELEVATION = 0,
	},
	SECONDARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		TEXT = "",
		BUTTON_TEXT = nil :: string?,
		ON_BUTTON_CLICK = nil :: ((() -> ())?),
		ON_CLOSE_CLICK = nil :: ((() -> ())?),
		ELEVATION = 0,
	},
	TERTIARY_CONTAINER = {
		STYLE = Style.new(1, Enum.Font.SourceSans, "Light", Color3.new(0, 0.4, 0.7)),
		TEXT = "",
		BUTTON_TEXT = nil :: string?,
		ON_BUTTON_CLICK = nil :: ((() -> ())?),
		ON_CLOSE_CLICK = nil :: ((() -> ())?),
		ELEVATION = 0,
	},
}


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

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

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

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

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

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

function Interface.new(
	text: FusionCanBeState<string>,
	buttonText: FusionCanBeState<string?>,
	onButtonClick: FusionCanBeState<((() -> ())?)>,
	onCloseClick: FusionCanBeState<((() -> ())?)>,
	textColor: FusionCanBeState<Color3>,
	buttonTextColor: FusionCanBeState<Color3>,
	backgroundColor: 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(text, DEFAULTS.NEW.TEXT),
		convert(buttonText, DEFAULTS.NEW.BUTTON_TEXT),
		convert(onButtonClick, DEFAULTS.NEW.ON_BUTTON_CLICK),
		convert(onCloseClick, DEFAULTS.NEW.ON_CLOSE_CLICK),
		convert(textColor, DEFAULTS.NEW.TEXT_COLOR),
		convert(buttonTextColor, DEFAULTS.NEW.BUTTON_TEXT_COLOR),
		convert(backgroundColor, DEFAULTS.NEW.BACKGROUND_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.surfaceContainer(
	style: FusionCanBeState<Style>,
	text: FusionCanBeState<string>,
	buttonText: FusionCanBeState<string?>,
	onButtonClick: FusionCanBeState<((() -> ())?)>,
	onCloseClick: FusionCanBeState<((() -> ())?)>,
	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.surfaceContainer(
		convert(style, DEFAULTS.SURFACE_CONTAINER.STYLE),
		convert(text, DEFAULTS.SURFACE_CONTAINER.TEXT),
		convert(buttonText, DEFAULTS.SURFACE_CONTAINER.BUTTON_TEXT),
		convert(onButtonClick, DEFAULTS.SURFACE_CONTAINER.ON_BUTTON_CLICK),
		convert(onCloseClick, DEFAULTS.SURFACE_CONTAINER.ON_CLOSE_CLICK),
		convert(elevation, DEFAULTS.SURFACE_CONTAINER.ELEVATION)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.primaryContainer(
	style: FusionCanBeState<Style>,
	text: FusionCanBeState<string>,
	buttonText: FusionCanBeState<string?>,
	onButtonClick: FusionCanBeState<((() -> ())?)>,
	onCloseClick: FusionCanBeState<((() -> ())?)>,
	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.primaryContainer(
		convert(style, DEFAULTS.PRIMARY_CONTAINER.STYLE),
		convert(text, DEFAULTS.PRIMARY_CONTAINER.TEXT),
		convert(buttonText, DEFAULTS.PRIMARY_CONTAINER.BUTTON_TEXT),
		convert(onButtonClick, DEFAULTS.PRIMARY_CONTAINER.ON_BUTTON_CLICK),
		convert(onCloseClick, DEFAULTS.PRIMARY_CONTAINER.ON_CLOSE_CLICK),
		convert(elevation, DEFAULTS.PRIMARY_CONTAINER.ELEVATION)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.secondaryContainer(
	style: FusionCanBeState<Style>,
	text: FusionCanBeState<string>,
	buttonText: FusionCanBeState<string?>,
	onButtonClick: FusionCanBeState<((() -> ())?)>,
	onCloseClick: FusionCanBeState<((() -> ())?)>,
	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.secondaryContainer(
		convert(style, DEFAULTS.SECONDARY_CONTAINER.STYLE),
		convert(text, DEFAULTS.SECONDARY_CONTAINER.TEXT),
		convert(buttonText, DEFAULTS.SECONDARY_CONTAINER.BUTTON_TEXT),
		convert(onButtonClick, DEFAULTS.SECONDARY_CONTAINER.ON_BUTTON_CLICK),
		convert(onCloseClick, DEFAULTS.SECONDARY_CONTAINER.ON_CLOSE_CLICK),
		convert(elevation, DEFAULTS.SECONDARY_CONTAINER.ELEVATION)
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	return inst
end

function Interface.tertiaryContainer(
	style: FusionCanBeState<Style>,
	text: FusionCanBeState<string>,
	buttonText: FusionCanBeState<string?>,
	onButtonClick: FusionCanBeState<((() -> ())?)>,
	onCloseClick: FusionCanBeState<((() -> ())?)>,
	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.tertiaryContainer(
		convert(style, DEFAULTS.TERTIARY_CONTAINER.STYLE),
		convert(text, DEFAULTS.TERTIARY_CONTAINER.TEXT),
		convert(buttonText, DEFAULTS.TERTIARY_CONTAINER.BUTTON_TEXT),
		convert(onButtonClick, DEFAULTS.TERTIARY_CONTAINER.ON_BUTTON_CLICK),
		convert(onCloseClick, DEFAULTS.TERTIARY_CONTAINER.ON_CLOSE_CLICK),
		convert(elevation, DEFAULTS.TERTIARY_CONTAINER.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
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 NewSnackbarLarge = React.Component:extend("NewSnackbarLarge")
	NewSnackbarLarge.defaultProps = {
		text = DEFAULTS.NEW.TEXT,
		buttonText = DEFAULTS.NEW.BUTTON_TEXT,
		onButtonClick = DEFAULTS.NEW.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.NEW.ON_CLOSE_CLICK,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		buttonTextColor = DEFAULTS.NEW.BUTTON_TEXT_COLOR,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewSnackbarLarge:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			textColor = _Value(self.defaultProps.textColor),
			buttonTextColor = _Value(self.defaultProps.buttonTextColor),
			backgroundColor = _Value(self.defaultProps.backgroundColor),
			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.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.textColor,
			self._internalStates.buttonTextColor,
			self._internalStates.backgroundColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

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

do
	local SurfaceContainerSnackbarLarge = React.Component:extend("SurfaceContainerSnackbarLarge")
	SurfaceContainerSnackbarLarge.defaultProps = {
		style = DEFAULTS.SURFACE_CONTAINER.STYLE,
		text = DEFAULTS.SURFACE_CONTAINER.TEXT,
		buttonText = DEFAULTS.SURFACE_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.SURFACE_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.SURFACE_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.SURFACE_CONTAINER.ELEVATION,
	}
	function SurfaceContainerSnackbarLarge: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),
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			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.surfaceContainer(
			self._internalStates.style,
			self._internalStates.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.elevation
		)
	end

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

do
	local PrimaryContainerSnackbarLarge = React.Component:extend("PrimaryContainerSnackbarLarge")
	PrimaryContainerSnackbarLarge.defaultProps = {
		style = DEFAULTS.PRIMARY_CONTAINER.STYLE,
		text = DEFAULTS.PRIMARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.PRIMARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.PRIMARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.PRIMARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.PRIMARY_CONTAINER.ELEVATION,
	}
	function PrimaryContainerSnackbarLarge: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),
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			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.primaryContainer(
			self._internalStates.style,
			self._internalStates.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.elevation
		)
	end

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

do
	local SecondaryContainerSnackbarLarge = React.Component:extend("SecondaryContainerSnackbarLarge")
	SecondaryContainerSnackbarLarge.defaultProps = {
		style = DEFAULTS.SECONDARY_CONTAINER.STYLE,
		text = DEFAULTS.SECONDARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.SECONDARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.SECONDARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.SECONDARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.SECONDARY_CONTAINER.ELEVATION,
	}
	function SecondaryContainerSnackbarLarge: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),
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			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.secondaryContainer(
			self._internalStates.style,
			self._internalStates.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.elevation
		)
	end

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

do
	local TertiaryContainerSnackbarLarge = React.Component:extend("TertiaryContainerSnackbarLarge")
	TertiaryContainerSnackbarLarge.defaultProps = {
		style = DEFAULTS.TERTIARY_CONTAINER.STYLE,
		text = DEFAULTS.TERTIARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.TERTIARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.TERTIARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.TERTIARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.TERTIARY_CONTAINER.ELEVATION,
	}
	function TertiaryContainerSnackbarLarge: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),
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			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.tertiaryContainer(
			self._internalStates.style,
			self._internalStates.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.elevation
		)
	end

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

return Interface


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

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

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

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

do
	local NewSnackbarLarge = Roact.Component:extend("NewSnackbarLarge")
	NewSnackbarLarge.defaultProps = {
		text = DEFAULTS.NEW.TEXT,
		buttonText = DEFAULTS.NEW.BUTTON_TEXT,
		onButtonClick = DEFAULTS.NEW.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.NEW.ON_CLOSE_CLICK,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		buttonTextColor = DEFAULTS.NEW.BUTTON_TEXT_COLOR,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_COLOR,
		elevation = DEFAULTS.NEW.ELEVATION,
		schemeType = DEFAULTS.NEW.SCHEME_TYPE,
		fontData = DEFAULTS.NEW.FONT_DATA,
		scale = DEFAULTS.NEW.SCALE,
	}
	function NewSnackbarLarge:init(initialProps: { [string]: unknown })
		self._maid = Maid.new()
		local _fuse = ColdFusion.fuse(self._maid)
		local _Value = _fuse.Value
		self._internalStates = {
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			textColor = _Value(self.defaultProps.textColor),
			buttonTextColor = _Value(self.defaultProps.buttonTextColor),
			backgroundColor = _Value(self.defaultProps.backgroundColor),
			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.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.textColor,
			self._internalStates.buttonTextColor,
			self._internalStates.backgroundColor,
			self._internalStates.elevation,
			self._internalStates.schemeType,
			self._internalStates.fontData,
			self._internalStates.scale
		)
	end

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

do
	local SurfaceContainerSnackbarLarge = Roact.Component:extend("SurfaceContainerSnackbarLarge")
	SurfaceContainerSnackbarLarge.defaultProps = {
		style = DEFAULTS.SURFACE_CONTAINER.STYLE,
		text = DEFAULTS.SURFACE_CONTAINER.TEXT,
		buttonText = DEFAULTS.SURFACE_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.SURFACE_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.SURFACE_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.SURFACE_CONTAINER.ELEVATION,
	}
	function SurfaceContainerSnackbarLarge: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),
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			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.surfaceContainer(
			self._internalStates.style,
			self._internalStates.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.elevation
		)
	end

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

do
	local PrimaryContainerSnackbarLarge = Roact.Component:extend("PrimaryContainerSnackbarLarge")
	PrimaryContainerSnackbarLarge.defaultProps = {
		style = DEFAULTS.PRIMARY_CONTAINER.STYLE,
		text = DEFAULTS.PRIMARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.PRIMARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.PRIMARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.PRIMARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.PRIMARY_CONTAINER.ELEVATION,
	}
	function PrimaryContainerSnackbarLarge: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),
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			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.primaryContainer(
			self._internalStates.style,
			self._internalStates.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.elevation
		)
	end

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

do
	local SecondaryContainerSnackbarLarge = Roact.Component:extend("SecondaryContainerSnackbarLarge")
	SecondaryContainerSnackbarLarge.defaultProps = {
		style = DEFAULTS.SECONDARY_CONTAINER.STYLE,
		text = DEFAULTS.SECONDARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.SECONDARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.SECONDARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.SECONDARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.SECONDARY_CONTAINER.ELEVATION,
	}
	function SecondaryContainerSnackbarLarge: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),
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			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.secondaryContainer(
			self._internalStates.style,
			self._internalStates.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.elevation
		)
	end

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

do
	local TertiaryContainerSnackbarLarge = Roact.Component:extend("TertiaryContainerSnackbarLarge")
	TertiaryContainerSnackbarLarge.defaultProps = {
		style = DEFAULTS.TERTIARY_CONTAINER.STYLE,
		text = DEFAULTS.TERTIARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.TERTIARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.TERTIARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.TERTIARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.TERTIARY_CONTAINER.ELEVATION,
	}
	function TertiaryContainerSnackbarLarge: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),
			text = _Value(self.defaultProps.text),
			buttonText = _Value(self.defaultProps.buttonText),
			onButtonClick = _Value(self.defaultProps.onButtonClick),
			onCloseClick = _Value(self.defaultProps.onCloseClick),
			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.tertiaryContainer(
			self._internalStates.style,
			self._internalStates.text,
			self._internalStates.buttonText,
			self._internalStates.onButtonClick,
			self._internalStates.onCloseClick,
			self._internalStates.elevation
		)
	end

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

return Interface


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

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

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

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

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

export type LargeWrapperDefinition = {
	Text: string,
	ButtonText: string?,
	OnButtonClick: (() -> ())?,
	OnCloseClick: (() -> ())?,
	TextColor: Color3,
	ButtonTextColor: Color3,
	BackgroundColor: Color3,
	Elevation: number,
	SchemeType: Enums.SchemeType,
	FontData: FontData,
	Scale: number,
}
export type LargeWrapper = Wrapper<GuiObject, LargeWrapperDefinition, "Large">

export type StyledLargeWrapperDefinition = {
	Style: Style,
	Text: string,
	ButtonText: string?,
	OnButtonClick: (() -> ())?,
	OnCloseClick: (() -> ())?,
	Elevation: number?,
}
export type StyledLargeWrapper = Wrapper<GuiObject, StyledLargeWrapperDefinition, "StyledLarge">
-- Constants
local DEFAULTS = require(script.Parent:WaitForChild("Defaults"))
-- Variables
-- References
-- Private Functions
-- Interface
local Interface = {}

function Interface.new(): StyledLargeWrapper
	local maid = Maid.new()
	local _fuse = ColdFusion.fuse(maid)
	local _Value = _fuse.Value
	local definition = {
		Text = _Value(""),
		ButtonText = _Value("Action"),
		OnButtonClick = _Value(function() end),
		OnCloseClick = _Value(function() end),
		TextColor = _Value(Color3.new()),
		ButtonTextColor = _Value(Color3.new()),
		BackgroundColor = _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? } = {
		text = DEFAULTS.NEW.TEXT,
		buttonText = DEFAULTS.NEW.BUTTON_TEXT,
		onButtonClick = DEFAULTS.NEW.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.NEW.ON_CLOSE_CLICK,
		textColor = DEFAULTS.NEW.TEXT_COLOR,
		buttonTextColor = DEFAULTS.NEW.BUTTON_TEXT_COLOR,
		backgroundColor = DEFAULTS.NEW.BACKGROUND_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.Text,
		definition.ButtonText,
		definition.OnButtonClick,
		definition.OnCloseClick,
		definition.TextColor,
		definition.ButtonTextColor,
		definition.BackgroundColor,
		definition.Elevation,
		definition.SchemeType,
		definition.FontData,
		definition.Scale
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledLarge", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.surfaceContainer(): StyledLargeWrapper
	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))),
		Text = _Value(""),
		ButtonText = _Value("Action"),
		OnButtonClick = _Value(function() end),
		OnCloseClick = _Value(function() end),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SURFACE_CONTAINER.STYLE,
		text = DEFAULTS.SURFACE_CONTAINER.TEXT,
		buttonText = DEFAULTS.SURFACE_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.SURFACE_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.SURFACE_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.SURFACE_CONTAINER.ELEVATION,
	}
	local inst: GuiObject = Source.surfaceContainer(
		definition.Style,
		definition.Text,
		definition.ButtonText,
		definition.OnButtonClick,
		definition.OnCloseClick,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledLarge", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.primaryContainer(): StyledLargeWrapper
	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))),
		Text = _Value(""),
		ButtonText = _Value("Action"),
		OnButtonClick = _Value(function() end),
		OnCloseClick = _Value(function() end),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.PRIMARY_CONTAINER.STYLE,
		text = DEFAULTS.PRIMARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.PRIMARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.PRIMARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.PRIMARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.PRIMARY_CONTAINER.ELEVATION,
	}
	local inst: GuiObject = Source.primaryContainer(
		definition.Style,
		definition.Text,
		definition.ButtonText,
		definition.OnButtonClick,
		definition.OnCloseClick,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledLarge", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.secondaryContainer(): StyledLargeWrapper
	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))),
		Text = _Value(""),
		ButtonText = _Value("Action"),
		OnButtonClick = _Value(function() end),
		OnCloseClick = _Value(function() end),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.SECONDARY_CONTAINER.STYLE,
		text = DEFAULTS.SECONDARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.SECONDARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.SECONDARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.SECONDARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.SECONDARY_CONTAINER.ELEVATION,
	}
	local inst: GuiObject = Source.secondaryContainer(
		definition.Style,
		definition.Text,
		definition.ButtonText,
		definition.OnButtonClick,
		definition.OnCloseClick,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledLarge", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

function Interface.tertiaryContainer(): StyledLargeWrapper
	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))),
		Text = _Value(""),
		ButtonText = _Value("Action"),
		OnButtonClick = _Value(function() end),
		OnCloseClick = _Value(function() end),
		Elevation = _Value(0),
	}
	local defaults: { [string]: unknown? } = {
		style = DEFAULTS.TERTIARY_CONTAINER.STYLE,
		text = DEFAULTS.TERTIARY_CONTAINER.TEXT,
		buttonText = DEFAULTS.TERTIARY_CONTAINER.BUTTON_TEXT,
		onButtonClick = DEFAULTS.TERTIARY_CONTAINER.ON_BUTTON_CLICK,
		onCloseClick = DEFAULTS.TERTIARY_CONTAINER.ON_CLOSE_CLICK,
		elevation = DEFAULTS.TERTIARY_CONTAINER.ELEVATION,
	}
	local inst: GuiObject = Source.tertiaryContainer(
		definition.Style,
		definition.Text,
		definition.ButtonText,
		definition.OnButtonClick,
		definition.OnCloseClick,
		definition.Elevation
	)
	maid:GiveTask(inst.Destroying:Connect(function()
		maid:Destroy()
	end))
	local wrapper, cleanUp = Translators.ColdFusion.toWrapper("StyledLarge", inst, definition, defaults)
	maid:GiveTask(cleanUp)
	return wrapper
end

return Interface