feat(spec): add 9 standard CSS component sub-tokens#89
Conversation
Extend the component_sub_tokens vocabulary from 8 to 17 entries to support real-world design systems that use standard CSS properties within component definitions. Added sub-tokens (with usage examples): - minHeight / minWidth: touch-target compliance (44px, 56px buttons) - fontFamily / fontWeight / fontStyle: per-component type overrides (serif CTAs, italic margin-notes) - borderColor: card, chip, and container borders - borderLeftColor / borderLeftWidth: directional border patterns (left-edge accent for margin-note components) - paddingLeft: directional padding (margin-note inset pattern) - elevation: shadow classes (floating SOS button) All follow existing spec patterns: Color for colour references, Dimension for px/rem values, string for named values. Directional variants use CSS box-model naming conventions.
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
|
Hey @tn819, thank you for this. The table of real-world usage is helpful and clearly thought through. I've been working through a set of similar proposals (#41, #47, #49, #65) and recently published a PHILOSOPHY.md that explains the direction for how the spec evolves. The spec defines a structural minimum and the prose is where the design lives. We're cautious about expanding the token vocabulary toward CSS coverage because the model already knows CSS. It doesn't need That said, the problem you're describing is real. Getting a wall of "not a recognized component sub-token" warnings for standard properties like I think the fix is in the warning behavior, not in the token list. Right now the linter warns on every unknown component sub-token. That made sense when the list was meant to be exhaustive, but it doesn't fit a format that's designed to be extensible. A better approach would be to either:
Either approach solves the noisy-output problem without adding CSS properties to the spec one by one, which is a path that doesn't have a natural stopping point. Would either of those approaches address what you're running into? If you're interested in taking on the fix, I'd be happy to work with you on it. |
Summary
Extends the
component_sub_tokensvocabulary from 8 to 17 entries to support real-world design systems that use standard CSS properties within component definitions.Problem
The current 8-token vocabulary (
backgroundColor,textColor,typography,rounded,padding,size,height,width) is insufficient for production design systems. Real-world components need additional standard CSS properties:minHeight/minWidthfontFamily/fontWeight/fontStyleborderColorborderLeftColor/borderLeftWidthpaddingLeftelevationWithout these in the spec, every real design system that uses them gets a wall of "not a recognized component sub-token" warnings. This makes
lintoutput noisy and obscures actual issues.Change
Adds 9 new entries to
component_sub_tokensinspec-config.yaml, each with:Color,Dimension,string, ornumber | string)All additions follow existing spec patterns. Directional variants (
borderLeftColor,paddingLeft) use standard CSS box-model naming.Testing
Existing tests should pass (no token removals, only additions). The change is backwards-compatible — existing valid DESIGN.md files continue to validate, and the new tokens are recognized.