Layers explicitly user-requested styling (ComponentSpec.styleOverrides) over
theme-resolved styles, producing the styles a component actually receives.
This is what lets "make the charts blue" be honored without a color literal ever
entering generated code: the request is carried as spec data and resolved here,
above the org theme, so the component keeps reading styles.chartPalette and
friends. Of the color slots only visualization ones are merged — the override
contract deliberately has no background/text/border slots, since those cannot be
flipped for dark mode without derived per-mode variants.
fontScale is the one non-color slot, and it rescales the typography.fontSize
ladder in place. Doing it here rather than in the generator is what makes a type
scale hold: every token moves at once, so text inside registry components and
third-party libraries scales along with the generated markup.
Returns base unchanged when there are no overrides, and never mutates base.
Layers explicitly user-requested styling (
ComponentSpec.styleOverrides) over theme-resolved styles, producing thestylesa component actually receives.This is what lets "make the charts blue" be honored without a color literal ever entering generated code: the request is carried as spec data and resolved here, above the org theme, so the component keeps reading
styles.chartPaletteand friends. Of the color slots only visualization ones are merged — the override contract deliberately has no background/text/border slots, since those cannot be flipped for dark mode without derived per-mode variants.fontScaleis the one non-color slot, and it rescales thetypography.fontSizeladder in place. Doing it here rather than in the generator is what makes a type scale hold: every token moves at once, so text inside registry components and third-party libraries scales along with the generated markup.Returns
baseunchanged when there are no overrides, and never mutatesbase.