-- Compiled with roblox-ts v3.0.0 local DENSITY_SCALES = { compact = { space = 0.85, radius = 0.9, typography = 0.92, }, comfortable = { space = 1, radius = 1, typography = 1, }, spacious = { space = 1.15, radius = 1.1, typography = 1.08, }, } local function scaleNonNegative(value, factor) return math.max(0, math.round(value * factor)) end local function scaleTextSize(value, factor) return math.max(10, math.round(value * factor)) end local function scaleSpace(theme, factor) return { [0] = scaleNonNegative(theme.space[0], factor), [2] = scaleNonNegative(theme.space[2], factor), [4] = scaleNonNegative(theme.space[4], factor), [6] = scaleNonNegative(theme.space[6], factor), [8] = scaleNonNegative(theme.space[8], factor), [10] = scaleNonNegative(theme.space[10], factor), [12] = scaleNonNegative(theme.space[12], factor), [14] = scaleNonNegative(theme.space[14], factor), [16] = scaleNonNegative(theme.space[16], factor), [20] = scaleNonNegative(theme.space[20], factor), [24] = scaleNonNegative(theme.space[24], factor), [32] = scaleNonNegative(theme.space[32], factor), } end local function scaleRadius(theme, factor) return { none = scaleNonNegative(theme.radius.none, factor), sm = scaleNonNegative(theme.radius.sm, factor), md = scaleNonNegative(theme.radius.md, factor), lg = scaleNonNegative(theme.radius.lg, factor), xl = scaleNonNegative(theme.radius.xl, factor), full = scaleNonNegative(theme.radius.full, factor), } end local function scaleTypography(theme, factor) return { labelSm = { font = theme.typography.labelSm.font, textSize = scaleTextSize(theme.typography.labelSm.textSize, factor), }, bodyMd = { font = theme.typography.bodyMd.font, textSize = scaleTextSize(theme.typography.bodyMd.textSize, factor), }, titleMd = { font = theme.typography.titleMd.font, textSize = scaleTextSize(theme.typography.titleMd.textSize, factor), }, } end --[[ * * M1 limitation: density is a pure theme transformer. * It does not create layout or child instances. ]] local function applyDensity(theme, token) local scale = DENSITY_SCALES[token] local _object = {} local _left = "colors" local _object_1 = table.clone(theme.colors) setmetatable(_object_1, nil) _object[_left] = _object_1 _object.space = scaleSpace(theme, scale.space) _object.radius = scaleRadius(theme, scale.radius) _object.typography = scaleTypography(theme, scale.typography) return _object end --[[ * * M1 limitation: this helper only returns a theme transformer. * It does not modify instance graphs or perform runtime layout composition. ]] local function density(token) return function(theme) return applyDensity(theme, token) end end return { applyDensity = applyDensity, density = density, }