-- Compiled with roblox-ts v3.0.0 local TS = _G[script] local _core = TS.import(script, TS.getModule(script, "@lattice-ui", "core").out) local createStrictContext = _core.createStrictContext local React = _core.React local useControllableState = _core.useControllableState local ThemeProvider = TS.import(script, TS.getModule(script, "@lattice-ui", "style").out).ThemeProvider local useSystemBaseThemeContext = TS.import(script, script.Parent.Parent, "system", "baseThemeContext").useSystemBaseThemeContext local SystemThemeContextProvider = TS.import(script, script.Parent.Parent, "system", "systemThemeContext").SystemThemeContextProvider local applyDensity = TS.import(script, script.Parent, "density").applyDensity local _binding = createStrictContext("DensityProvider") local DensityContextProvider = _binding[1] local useDensityContext = _binding[2] local DEFAULT_DENSITY = "comfortable" local function DensityProvider(props) local _binding_1 = useSystemBaseThemeContext() local baseTheme = _binding_1.baseTheme local setBaseTheme = _binding_1.setBaseTheme local _binding_2 = useControllableState({ value = props.density, defaultValue = props.defaultDensity or DEFAULT_DENSITY, onChange = props.onDensityChange, }) local densityValue = _binding_2[1] local setDensityValue = _binding_2[2] -- Read-path contract: resolvedTheme is derived from baseTheme + current density. local resolvedTheme = React.useMemo(function() return applyDensity(baseTheme, densityValue) end, { baseTheme, densityValue }) local setDensity = React.useCallback(function(nextDensity) setDensityValue(nextDensity) end, { setDensityValue }) local densityContextValue = React.useMemo(function() return { density = densityValue, setDensity = setDensity, } end, { densityValue, setDensity }) local systemThemeContextValue = React.useMemo(function() return { theme = resolvedTheme, baseTheme = baseTheme, density = densityValue, setBaseTheme = setBaseTheme, setDensity = setDensity, } end, { baseTheme, densityValue, resolvedTheme, setBaseTheme, setDensity }) return React.createElement(DensityContextProvider, { value = densityContextValue, }, React.createElement(SystemThemeContextProvider, { value = systemThemeContextValue, }, React.createElement(ThemeProvider, { theme = resolvedTheme, }, props.children))) end local function useDensity() return useDensityContext() end return { DensityProvider = DensityProvider, useDensity = useDensity, }