-- Compiled with roblox-ts v3.0.0 local TS = _G[script] local _core = TS.import(script, TS.getModule(script, "@lattice-ui", "core").out) local React = _core.React local useControllableState = _core.useControllableState local defaultLightTheme = TS.import(script, TS.getModule(script, "@lattice-ui", "style").out).defaultLightTheme local DensityProvider = TS.import(script, script.Parent.Parent, "density", "DensityProvider").DensityProvider local SystemBaseThemeContextProvider = TS.import(script, script.Parent, "baseThemeContext").SystemBaseThemeContextProvider local useSystemThemeContext = TS.import(script, script.Parent, "systemThemeContext").useSystemThemeContext local function SystemProvider(props) -- SystemProvider owns raw/base theme state. Density is applied in DensityProvider. local _binding = useControllableState({ value = props.theme, defaultValue = props.defaultTheme or defaultLightTheme, onChange = props.onThemeChange, }) local baseThemeValue = _binding[1] local setBaseThemeValue = _binding[2] local setBaseTheme = React.useCallback(function(nextTheme) -- Write-path contract: updates should target baseTheme, not resolved theme. setBaseThemeValue(nextTheme) end, { setBaseThemeValue }) local baseThemeContextValue = React.useMemo(function() return { baseTheme = baseThemeValue, setBaseTheme = setBaseTheme, } end, { baseThemeValue, setBaseTheme }) return React.createElement(SystemBaseThemeContextProvider, { value = baseThemeContextValue, }, React.createElement(DensityProvider, { defaultDensity = props.defaultDensity, density = props.density, onDensityChange = props.onDensityChange, }, props.children)) end local function useSystemTheme() return useSystemThemeContext() end return { SystemProvider = SystemProvider, useSystemTheme = useSystemTheme, }