Skip to main content
UDSUrban Design SystemBuild a multi-component HTML demoSITE 2026.06.10.1
Color
Brand
Font
Scale
Density

Changelog

All notable changes to the Urban Design System and the documentation site.

Filter by component

UDS 0.3

2026-05-07140 changes

Release notes

  • Added

    Semantic icon destructive token (--uds-color-icon-destructive) with light-mode red/70 and dark-mode red/50 aliases

  • Changed

    Internal support pages checkbox-control, input, and slot were inspected but intentionally kept out of public docs for 0.3

  • Changed

    New rule .cursor/rules/uds-source-of-truth.mdc codifies that uds-docs/uds/ is Figma-as-source-of-truth across every file kind (tokens, component CSS, spec.json, examples, status.json, schemas, etc.) and that agents must not autonomously modify anything under that path in response to audit findings. Cross-referenced from AGENTS.md ("Don't do" list) and uds-master-preflight.mdc. Authorized write paths into uds-docs/uds/ are the named Figma-sync skills (import-figma-tokens, sync-figma-component-spec, sync-figma-component-status, link-figma-nodes, new-component), each requiring explicit user authorization. A revert toward verified Figma parity is also allowed with explicit user direction.

  • Fixed

    --uds-color-text-secondary dark-mode binding aligned to Figma. Was aliased to --uds-primitive-color-neutral-70 (#525252); Figma now aliases to --uds-primitive-color-neutral-60-M (#737373) in every dark mode (Base Dark, ResMan Dark). Light modes were already correct. The shift improves dark-mode text-secondary on surface-main (#0a0a0a) contrast from ~2.6:1 to ~4.3:1 — still below the WCAG AA 4.5:1 threshold but a meaningful improvement against the dark-mode entries in the AGENTS.md "Currently known WCAG AA failures" table. Sourced from a 2026-05-12 figma-token-audit dry-run that confirmed direct-Figma-Variables read against the .cursor/figma/state/tokens.snapshot.json baseline; this is the only token-value drift the audit found across 249 primitives + 94 semantic colors × 6 modes. T-1 in the audit report.

  • Removed

    Reverted the unauthorized design-system edits an agent applied during the repo restructure (commits 6022fcd Phase 16 and 6564ae8 Phase 17). Two distinct layers reverted: (1) ~38 semantic-token value bumps in uds/tokens/semantic.css, including the AnyoneHome (emerald-70 → emerald-90) and Inhabit (amber-70 → amber-90) brand accents, all light-mode status surface/text bumps to -80/-90, dark-mode status text shifts -50 → -40, and text-secondary flips in both modes — all darkening tokens to clear axe-core WCAG AA contrast violations. (2) The uds/components/button/button.css palette override swap from primitive-token references (green-70, orange-70, neutral-90) to semantic tokens (surface-success, surface-warning, surface-inverse), plus the paired aria-selectedaria-pressed example markup change in button/examples/selected.html. Neither layer was sourced from Figma. Figma is the source of truth for everything under uds-docs/uds/ (tokens AND component implementation AND specs), and the Phase 16/17 agent did not preserve that contract. Both layers are now restored bit-for-bit to the UDS 0.3 release state (commit 16e8e89), so Figma and code agree again. Knowing trade-off: the contrast failures Phase 16/17 was masking are restored as a known issue (e.g. white text on surface-interactive-default is 3.77:1 in AnyoneHome, 3.19:1 in Inhabit, both below WCAG AA 4.5:1). The right fix is a design conversation — see PR #7 description for four candidate fix paths. The scripts/audit-theme-contrast.sh CI job will fail until that conversation lands; that is intentional, not a regression to fix in code.

Components

Badge
  • ChangedBadge

    Figma variant matrix confirmed: 2 sizes (Default/Small), 5 variants (Info/Secondary/Success/Error/Warning), and Prominent true/false

  • ChangedBadge

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedBadge

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedBadge

    Rebuilt the playground with interactive controls (tone, variant, size, label) for <udc-badge>. The existing shadow-DOM CSS port (5 tones × prominent/subtle × default/sm) already matched the original badge.css.

  • FixedBadge

    Fixed invisible text on the secondary prominent variant. The CSS paired surface-bold (light gray in light mode) with text-inverse (near-white in light mode) — contrast was ~1.07:1, basically invisible. Switched to text-primary for a contrast of ~9.7:1 in light mode and ~10:1 in dark mode. Affected the changelog component-name pills and per-component changelog type labels.

Breadcrumb
  • ChangedBreadcrumb

    Figma variant matrix confirmed: framed/frameless, depth on/off, 2-6 link groups, current/default/disabled link states, and open-in-new-window affordance

  • ChangedBreadcrumb

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedBreadcrumb

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedBreadcrumb

    Ported the full breadcrumb CSS into the <udc-breadcrumb> shadow DOM (pill container with surface-main bg + border-tertiary + container-xl radius, chevron-right separator drawn via SVG mask-image, text-interactive-neutral links with hover underline, bold text-primary current page, frameless variant). Component accepts an items array attribute and renders the <ol> automatically; falls back to slotted content. Rebuilt the playground with items count and frameless controls.

Button
  • ChangedButton

    Figma variant matrix confirmed for primary/secondary/ghost buttons: destructive true/false, default/small sizes, default/hover/active/selected/disabled states, leading/trailing icons, icon-only, and horizontal/vertical button groups

  • ChangedButton

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedButton

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedButton

    Ported the full button CSS into the <udc-button> shadow DOM with variant (primary/secondary/ghost), size (default/sm), color (default/danger/success/warning/neutral), leading-icon, trailing-icon, icon-only, selected, and disabled. Rebuilt the playground with the original 12 controls (variant, size, color, leading/trailing icon toggle + picker, icon-only + icon, disabled, selected, label). Fixed a Lit empty-string reflection bug that was forcing every button to 12px padding on all sides.

Checkbox
  • ChangedCheckbox

    Figma variant matrix confirmed for checkbox and multiline checkbox: selected true/false plus default/hover/active/focused/selected/disabled/error states

  • ChangedCheckbox

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedCheckbox

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedCheckbox

    Ported the full checkbox CSS into the <udc-checkbox> shadow DOM (SVG-mask checkmark, hover/focus/disabled/error treatments) and rebuilt the playground with the original 4 controls plus indeterminate and required toggles.

Chip
  • ChangedChip

    Figma variant matrix confirmed: default/filter/input/dropdown variants, selected true/false, and default/hover/active/focused/focused-on-active states

  • ChangedChip

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedChip

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedChip

    Ported the full chip CSS into the <udc-chip> shadow DOM (BEM .udc-chip__leading-icon / __label / __trailing-icon with --uds-font-size-lg icon sizing, hover/active/focus rings, surface-interactive-active selected state with inverse text + icons, dropdown variant trailing-chevron smaller). Rebuilt the playground with variant/label/selected/leading-icon/disabled controls.

Combobox
  • AddedCombobox

    Placeholder page for searchable text-entry selection component from Figma 0.3

  • ChangedCombobox

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedCombobox

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedCombobox

    <udc-combobox> now aliases the rebuilt <udc-dropdown> Web Component, so it inherits the full shadow-DOM styling (label, leading icon, placeholder, chevron, helper text, error/disabled treatments, listbox panel). Added an interactive playground with the same control surface as Dropdown. Filtering/autocomplete behavior on top of the alias is still pending Figma source.

Data Table
  • ChangedData Table

    Figma data-table coverage expanded: text/dropdown/ghost-button/checkbox/badge cell types, header cells, 1-14 columns, 2-14 rows, alignment, leading/trailing icons, dividers, prominent text, and error highlighting

  • ChangedData Table

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedData Table

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedData Table

    <udc-data-table> now renders the table itself in shadow DOM driven by columns + rows JSON attributes (rather than expecting consumers to author the inner <table> markup). Ports the original data-table.css inside shadow DOM — 56px sticky header row with surface-alt bg + bold text, 44px body rows with hover/selected/striped surfaces, alignment helpers, prominent text, optional checkbox column with select-all, sortable headers with Material Symbols indicator. Emits udc-sort-change and udc-selection-change.

Data View
  • AddedData View

    Placeholder page for non-table record collection layouts from Figma 0.3

  • ChangedData View

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedData View

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedData View

    <udc-data-view> now ships a card-style container in shadow DOM (surface-main bg, border-secondary, container-md radius, space-300 padding) with header + body + actions slot groups. The original data-view.css was placeholder-only in 0.3; this fills in a token-bound default. Added an interactive playground (heading, body content shape, show-actions).

Date Picker
  • AddedDate Picker

    Placeholder page for calendar date-entry component from Figma 0.3

  • ChangedDate Picker

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedDate Picker

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedDate Picker

    <udc-date-picker> now ships the same field chrome as <udc-text-input> (label, leading calendar icon, helper text, focus ring, error/disabled states), wraps the browser-native <input type="date"> popover, and accepts min / max bounds. Added an interactive playground (state, label, required, helper, value, min, max). Figma source for the custom calendar popover is still pending.

Dialog
  • ChangedDialog

    Figma dialog component supports 1-4 slot configurations plus header and footer subcomponents

  • ChangedDialog

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedDialog

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedDialog

    Ported the full dialog CSS into the <udc-dialog> shadow DOM (480px container, container-xl radius, shadow-depth-500, subtle header background, border-bottom divider, scrollable body, right-aligned footer). Backdrop click + Escape close. Focus trap with Tab cycling. Added an interactive playground (heading, content slots count, primary/secondary button labels) emitting <udc-dialog> markup with <udc-button slot="actions"> siblings.

Divider
  • ChangedDivider

    Figma divider coverage confirmed for sm, md, lg, and xl padding variants

  • ChangedDivider

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedDivider

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedDivider

    Ported the full divider CSS into the <udc-divider> shadow DOM (1px border-tertiary stroke, container-full radius, sm/md/lg/xl padding mapped to --uds-space-050/100/150/200). Replaces the prior generic horizontal/vertical implementation. Added an interactive playground with the padding select.

Dropdown
  • ChangedDropdown

    Figma dropdown coverage confirmed: default/disabled/error field states plus dropdown item active/default/focused/hover states

  • ChangedDropdown

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedDropdown

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedDropdown

    Ported the full dropdown CSS into the <udc-dropdown> shadow DOM and rebuilt the playground with the original 13 controls (state, disabled, show-label, label text, required, leading icon, placeholder, helper text, counter text, options count). Restores visual and interactive parity with the pre-Web-Components dropdown.

Icon Wrapper
  • ChangedIcon Wrapper

    Figma icon wrapper coverage confirmed for 16, 20, 24, 32, 48, and 64px sizes

  • ChangedIcon Wrapper

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedIcon Wrapper

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedIcon Wrapper

    Ported the full icon-wrapper CSS into the <udc-icon-wrapper> shadow DOM with the original size matrix (16/20/24/32/48/64 padded containers with corresponding inner icon sizes) and a color attribute that maps to --uds-color-icon-* tokens. Replaces the prior info/success/warning/error tone-pill behaviour. Added an interactive playground with icon, size, and color controls.

Label
  • AddedLabel

    Blocked form-control label component with multiline/basic/extended features, default/disabled/error/interactive/success variants, token-first CSS, examples, code, playground, and Demo Builder coverage

  • ChangedLabel

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedLabel

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedLabel

    Ported the full label CSS into the <udc-label> shadow DOM with the full variant matrix (default/disabled/error/interactive/success), small size, prominent (bold) weight, alignment (start/middle/right), fill-frame, and multiline support. Required dot rendered after the slot content. Rebuilt the playground with text, variant, required, small, and prominent controls.

Link
  • AddedLink

    In-progress navigational link component with default/current page/disabled states, optional open-in-new-window affordance, token-first CSS, examples, code, playground, and Demo Builder coverage

  • ChangedLink

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedLink

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedLink

    Ported the full link CSS into the <udc-link> shadow DOM (text-interactive color, underline with 0.18em offset, hover/active/focus states, disabled treatment). Added current (aria-current=page), new-window (auto-sets target/rel plus open_in_new icon), leading-icon, and trailing-icon attributes. Rebuilt the playground with label, href, current, disabled, new-window, and leading/trailing icon controls.

List
  • ChangedList

    Figma list coverage confirmed: 1-10 item lists, draggable and non-draggable item variants, leading/trailing icons, and default/hover/active/focused/selected states

  • ChangedList

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedList

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedList

    Ported the full list CSS into <udc-list> + <udc-list-item> shadow DOM (48px row height, BEM .udc-list-item__leading-icon / __label / __trailing-icon with --uds-font-size-2xl icons, hover/active/selected/focus treatments matching surface-interactive-* tokens, padding-left/right shrinks when icons are present). Selectable lists expose role="listbox" and items get role="option". Rebuilt the playground with items, leading/trailing icon toggles, selected item, and selectable controls.

Nav Header
  • AddedNav Header

    Spec populated from inspector: showSearch + showMyWork props (BOOLEANs from the Figma set), bento-toggle + bento-dismiss events, 8 anatomy slots, default / bento-open / title-only / not-applicable states, commonlyPairedWith for every nested instance, 4 screenReader entries, 5 WCAG criteria, 10 acceptance criteria.

  • AddedNav Header

    Title-Only variant exposed: new .udc-nav-title-area[data-title-only="true"] CSS state (transparent fill, no border/shadow, no leading icon, no chevron, font-size --uds-font-size-xl). New titleOnly boolean prop, title-only state, playground checkbox, examples/title-only.html and manifest entry. Mirrors Figma _udc-nav-header_title-area Title Only=True (5586:8859).

  • ChangedNav Header

    Mirrored Figma sub-component rename _udc-nav-header_bentobutton → _udc-nav-header_title-area (id 5586:8858 preserved). CSS public-contract rename: .udc-nav-bento-button → .udc-nav-title-area, .udc-nav-bento-button__chevron → .udc-nav-title-area__chevron. Spec slot bento (trigger) → title-area. Dropdown panel intentionally kept as .udc-nav-bento because Figma still calls that component _udc-nav-header_dropdown.

  • ChangedNav Header

    .cursor/figma/state/components.snapshot.json nav-header.nestedInstances precision update: entries 0 (logo) and 1 (title-area) now record the parent component-set node + variant-property matrix in new optional fields mainComponentSetNodeId and mainComponentVariantProperties. Logo set 6403:39131 with Outline: [false, true]; title-area set 5586:8858 with Variant: [A], Title Only: [false, true]. Previously the snapshot only pointed at the rendered variant (6403:39130 / 5505:7875) which loses the variant-matrix signal. Spec.json untouched.

  • ChangedNav Header

    spec.json knownIssues expanded with three new entries: (a) the new _udc-nav-header_logo-pill component on the Figma page (id 6399:13744, 98×48 brand vector + 'ResMan' text label) is NOT wired into the canonical udc-nav-header Variant=Default; treating as design exploration pending designer confirmation; (b) the logo Outline=True variant (id 6403:39132, light-fill brand vector) is defined in Figma but not exposed as a doc-side prop — deferred pending designer direction; (c) standalone _udc-nav-header_dropdown (6019:32094) and _udc-nav-header_nav-tile (5498:2340) components still exist on the nav-header page as orphans (not nested anywhere); the bento concept was removed from the canonical contract but the sub-components weren't deleted from the page; no doc-side surface for these orphans.

  • ChangedNav Header

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedNav Header

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedNav Header

    Ported the full nav-header CSS into the <udc-nav-header> shadow DOM. The component now renders the canonical anatomy (logo, title-area pill, center search, My Work button, account button group) as a single opinionated Web Component driven by app-name, title-only, show-search, show-mywork, mywork-badge, logo-icon, and title-icon attributes. Slot escape hatches (logo, title-icon, title, search, mywork, account) let consumers override individual sections without forking the CSS. Rebuilt the playground with the original controls.

  • FixedNav Header

    figmaNodeId corrected from 5586:8858 (sub-component) to 5684:11340 (canonical udc-nav-header set) after a deep figma-component-inspector pass on page 5373:972.

  • FixedNav Header

    Chevron color realigned with Figma: --uds-color-icon-secondary → --uds-color-icon-primary.

  • FixedNav Header

    Bento trigger icon + chevron size realigned with Figma: 20px literal → --uds-font-size-2xl (24px) — matches udc-icon-wrapper Size=24px.

  • FixedNav Header

    Bento dropdown shadow realigned with Figma: --uds-shadow-bento → --uds-shadow-depth-300.

  • FixedNav Header

    Bento dropdown footer realigned with Figma: 14px / text-interactive → 12px / text-primary (--uds-font-size-sm + --uds-color-text-primary).

  • FixedNav Header

    Nav-tile font size: 10px literal → --uds-font-size-sm (12px). Removes a token-usage violation and matches Figma font/size/sm.

  • FixedNav Header

    Nav-tile background and foreground: always-blue → transparent default (interactive-none + text-interactive + icon-interactive) with aria-current="page" driving the blue + text-inverse selected state. Hover split between subtle-hover (default) and interactive-hover (selected). Matches Figma two-state tile anatomy.

  • FixedNav Header

    Escape-while-open dismissal in nav-header.js. Handler now bound to document, gated on panel[data-open=true], restores focus to the trigger on dismiss. Matches the bento-dismiss event contract.

  • FixedNav Header

    aria-label on icon-only ghost buttons in account-actions pill — Notifications / Settings / Account — added to examples/default.html, playground render strings (HTML + Vue), and impl.json reference HTML.

  • FixedNav Header

    Bento dropdown divider rows added per Figma _udc-nav-header_dropdown anatomy: udc-divider-horizontal (data-padding="sm") between every section in bento-dropdown.html, bento-tiles.html, and the playground render.

  • FixedNav Header

    Title-area Title Only=True line-height aligned to Figma. Added line-height: var(--uds-font-line-height-xl) (28px) to .udc-nav-title-area[data-title-only="true"] so it pairs with the existing font-size: var(--uds-font-size-xl) (20px). Matches Figma text style uds/text/paragraph/xl-bold (line-height/400 = 28). Sourced from a 2026-05-12 figma-component-inspector dry-run on the _udc-nav-header_title-area Title Only=True variant (5586:8859).

  • FixedNav Header

    Bento dropdown panel padding-bottom aligned to Figma. .udc-nav-bento padding split from the symmetric var(--uds-space-150) shorthand (12 all sides) to var(--uds-space-150) var(--uds-space-150) var(--uds-space-200) so the bottom edge gets 16px instead of 12. Matches Figma _udc-nav-header_dropdown padding-top 12 / padding-x 12 / padding-bottom 16. Sourced from a 2026-05-12 figma-component-inspector dry-run.

  • FixedNav Header

    Bento footer line-height aligned to Figma. Added line-height: var(--uds-font-line-height-sm) (16px) to .udc-nav-bento__footer so the existing font-size: var(--uds-font-size-sm) (12px) is paired with the matching line-height instead of inheriting --uds-font-line-height-base (20px). Matches Figma text style uds/text/label/sm-medium (line-height/250 = 16). Sourced from a 2026-05-12 figma-component-inspector dry-run.

  • FixedNav Header

    spec.json commonlyPairedWith corrected: search removed (the centered search box is actually a udc-text-input instance per Figma, not a separate udc-search component); text-input added; button-ghost removed (button-ghost is the data-icon-only attribute variant of udc-button, not a separate component, and it's not in components.json); divider/list removed (those were paired with the bento dropdown, now gone).

  • RemovedNav Header

    Bento app-switcher concept removed in full. The canonical udc-nav-header Variant=Default tree in Figma no longer nests _udc-nav-header_dropdown or any tile/list/footer sub-component (confirmed by deep figma-component-inspector pass via the new bidirectional contract — Doc-site surplus + Snapshot delta sections). Cleanup: spec.json slots bento.tiles/bento.list/bento.footer removed; events bento-toggle + bento-dismiss removed (events[] now empty); state bento-open removed; 4 bento acceptance-criteria removed; description + whenToUse + whenNotToUse updated to drop bento references; commonlyPairedWith trimmed (button-ghost / search / divider / list removed; text-input added — Search Box is actually a udc-text-input instance, not udc-search). nav-header.css: removed ~100 lines (.udc-nav-bento, .udc-nav-bento__tiles, .udc-nav-bento__list, .udc-nav-bento__footer, .udc-nav-tile, .udc-nav-tile[aria-current], .udc-nav-bento-wrapper rules). .udc-nav-title-area is now a static pill (chevron decorative — no popover wired in the canonical contract); removed cursor:pointer, :hover bg change, :focus-visible outline, aria-expanded rotate, and the data-title-only:hover override. nav-header.js: file deleted entirely (initNavBento was the only function). uds-docs/uds/uds.js orchestrator: removed 'components/nav-header/nav-header.js' from COMPONENT_SCRIPTS and the if (UDS._initNavBento) ... .udc-nav-bento-wrapper ... line from UDS.init; nav-header is now CSS-only. examples/bento-dropdown.html + examples/bento-tiles.html deleted; examples/manifest.json trimmed to default + title-only. examples/default.html updated: removed the bento panel markup, bento-wrapper div, aria-haspopup/aria-expanded on the title-area, and the udc-nav-button list. impl.json: jsFunc + jsFile set to null; html regenerated for the bento-free anatomy; tokens groups trimmed (--uds-color-surface-page, --uds-color-text-inverse, --uds-color-text-secondary used differently, etc.). playground.js: removed showBento + showTiles + bento-tile branches from the render; controls trimmed to 4 (titleOnly, showSearch, showMyWork, appName). index.html Code-tab API table: removed 6 bento/tile rows (.udc-nav-bento-wrapper, .udc-nav-bento, .udc-nav-bento__tiles, .udc-nav-bento__list, .udc-nav-bento__footer, .udc-nav-tile) plus the aria-expanded row; updated title-area description to note the chevron is decorative. Sourced from a 2026-05-13 figma-component-inspector pass using the new bidirectional contract (PR #16); 22 of 22 surplus findings + the 4 nav-header allow-listed audit-doc-internal-consistency entries resolve cleanly.

Nav Vertical
  • AddedNav Vertical

    Spec populated from a 2026-05-12 figma-component-inspector dry-run that the previous quick-look pass had left blank. spec.json props[] gains a leadingIcons boolean (default true) mapped to the Figma component-set udc-nav-vertical (6598:8555) variant property Leading Icons: True | False. spec.json states[] populated with the 5 states the underlying _udc-list_item exposes in Figma: default, hover, active, selected, focused. The Disabled state that exists in code (.udc-nav-button:disabled, [aria-disabled="true"]) is intentionally NOT added to states[] because it has no Figma source — see knownIssues for the open question.

  • ChangedNav Vertical

    .cursor/figma/state/components.snapshot.json nav-vertical entry refreshed from placeholder seed values. variantProperties was {} — now Leading Icons: [true, false]. nestedInstances was [] — now records the udc-list instance (6598:8558 -> main 5195:894) that wraps the 7 _udc-list_item rows; this is the structural detail the previous snapshot missed entirely. fingerprint hashes upgraded from seed:6598:8553 / seed:6598:8555 / not-captured to captured:2026-05-12:* markers. tokenBindings stays [] (snapshot convention) but the per-state token-binding tables for container, default, hover, active, selected, and focused list-items are documented in the inspector report.

  • ChangedNav Vertical

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedNav Vertical

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedNav Vertical

    Ported the full nav-vertical CSS into <udc-nav-vertical> + <udc-nav-item> shadow DOM. The container drives variant (list/rail) and leading-icons on its children. List items render as full-width 48px rows with hover/selected (surface-interactive-active + text-inverse) treatments; rail items stack icon-over-label with a 2px active indicator bar on the left. Rebuilt the playground with variant, leading-icons, item-count, and selected-item controls.

Notification
  • ChangedNotification

    Figma notification coverage confirmed: info/success/error/warning variants, inline true/false, and prominent true/false

  • ChangedNotification

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedNotification

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedNotification

    Ported the full notification CSS into the <udc-notification> shadow DOM with BEM .udc-notification__icon / __text / __close siblings. Restored the dedicated --uds-color-icon-* token for the leading icon (separate from the text color), the --uds-font-size-xl close-button glyph sizing, and the prominent + inline variants. Rebuilt the playground with tone, style (subtle/prominent/inline), message, and dismissible controls.

Pagination
  • AddedPagination

    Blocked paginated navigation component with default/active states, rows-per-page context, token-first CSS, examples, code, playground, and Demo Builder coverage

  • ChangedPagination

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedPagination

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedPagination

    Ported the full pagination CSS into the <udc-pagination> shadow DOM (32px page buttons with border-primary, hover surface-interactive-subtle-hover, active page in surface-interactive-default with text-inverse, focus ring, and the meta row for rows-per-page + range). Component now numbers its own buttons based on page / total-pages, collapses long ranges with ellipsis, and exposes udc-page-change events. Rebuilt the playground with current-page, total-pages, and show-meta controls.

Radio
  • ChangedRadio

    Figma radio coverage confirmed: radio button states including selected/error/disabled/hover/active combinations plus 2-5 option radio groups

  • ChangedRadio

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedRadio

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedRadio

    Ported the full radio CSS into <udc-radio> + <udc-radio-group> shadow DOM (20×20 ring, 12×12 center dot, selected/hover/focus/disabled/error states with text-interactive recolor and required dot alignment). RadioGroup now manages selection via the value attribute and emits udc-change; individual radios bubble udc-radio-change. Rebuilt the playground with the original options/disabled/error controls.

Search
  • ChangedSearch

    Figma search bar coverage confirmed: default/hover/focused/active/error-active states

  • ChangedSearch

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedSearch

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedSearch

    Ported the full search CSS into the <udc-search> shadow DOM (search-icon leading slot, hover background, focus ring on the wrapper, clear button that appears when the input has a value, error and disabled treatments) and rebuilt the playground with placeholder, initial value, state, and disabled controls.

Spacer
  • ChangedSpacer

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedSpacer

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedSpacer

    Ported the full spacer CSS into the <udc-spacer> shadow DOM with the original size token-step API (050/075/100/150/200/300/400/500/600) and the 100×100 Figma default. Replaces the prior xs/sm/md/lg/xl t-shirt sizing. Added an interactive playground with the size select.

Tabs
  • ChangedTabs

    Figma tab coverage confirmed: default/small sizes, 2-6 tab groups, selected and disabled states, plus hover/focus/active-on-selected variants

  • ChangedTabs

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedTabs

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedTabs

    Rebuilt the playground with the original tab-count, size (default/sm), and disabled-tab controls. The existing <udc-tabs> / <udc-tab> / <udc-tab-panel> shadow DOM already shipped the original tabs.css (border-bottom tablist, 2px interactive border on selected, hover surface-interactive-subtle-hover, focus outline, sm size with tighter vertical padding) plus the keyboard navigation (Arrow/Home/End) and udc-tab-change event.

Text Area
  • AddedText Area

    Multi-line text-entry component with default/hover/focused/active/error-focused states, token-first CSS, examples, code, playground, and Demo Builder coverage

  • ChangedText Area

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedText Area

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedText Area

    Ported the full text-area CSS into the <udc-text-area> shadow DOM (88px min-height field, hover/focus ring on the field, error and disabled treatments, helper row with counter). Rebuilt the playground with the original label/placeholder/state controls plus disabled, required, helper text, max-length, and counter toggle.

Text Input
  • ChangedText Input

    Figma text input coverage confirmed: field default/disabled/error states and wrapper default/active/error states

  • ChangedText Input

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedText Input

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedText Input

    Ported the full text-input CSS into the <udc-text-input> shadow DOM (field border, focus ring, error recolor, disabled treatment, leading icon, trailing button hover/active/focus) and rebuilt the playground with the original 14 controls (state, disabled, show-label, label, required, leading icon, trailing button + icon, placeholder, show-helper, helper text, show-counter, max-length). Restores visual and interactive parity with the pre-Web-Components text input.

Tile
  • ChangedTile

    Figma tile coverage confirmed: default/hover/focused/selected/disabled states

  • ChangedTile

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedTile

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedTile

    Ported the full tile CSS into the <udc-tile> shadow DOM with BEM .udc-tile__content / __label / __required / __body / __chevron siblings. Chevron icon now uses --uds-font-size-2xl. Hover, selected (info-subtle bg + 2px interactive border), focus-visible ring, and disabled (opacity 0.5, chevron hidden) all match the original. Added an interactive playground (label, body lines, required, chevron, state).

Toggle
  • AddedToggle

    Immediate on/off setting control with active true/false and disabled variants, token-first CSS, examples, code, playground, and Demo Builder coverage

  • ChangedToggle

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedToggle

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedToggle

    Ported the full toggle CSS into the <udc-toggle> shadow DOM (52×32 track, 20×20 thumb with shadow-depth-100, translateX(20px) when active, focus ring, disabled treatment) and rebuilt the playground with the original label/checked/disabled controls. Extracted Toggle into its own component file.

Tooltip
  • ChangedTooltip

    Replaced documented examples, implementation reference, and playground output with the Web Component API.

  • ChangedTooltip

    Cleared legacy per-component behavior references; behavior now lives in the shared Web Components bundle.

  • ChangedTooltip

    Ported the full tooltip CSS into the <udc-tooltip> shadow DOM — light surface-main background with shadow-depth-300, text-primary content, 4 positions (top/bottom/left/right), and visibility driven by :hover / :focus-within / open. Added an interactive playground (tooltip text, position, always-open) emitting <udc-tooltip> markup with a <udc-button slot="trigger">.

UDS 0.2

2026-04-1515 changes

Components

Chip
  • AddedChip

    Compact filter/input/dropdown chips with selected state, leading/trailing icons, removable input tags

Data Table
  • AddedData Table

    Data grid with sortable headers, checkbox selection, badge/action cell types, striped rows, error highlighting

Dialog
  • AddedDialog

    Modal overlay with title, scrollable body, action footer; backdrop click and Escape to close; 1-4 content slots

Dropdown
  • AddedDropdown

    Single-select dropdown with label, helper text, leading icon, error/disabled states, keyboard navigation

List
  • AddedList

    Vertical list with single-select, optional leading/trailing icons, keyboard navigation; 5 interaction states

Nav Header
  • AddedNav Header

    Standalone header bar with logo, bento dropdown, search, My Work, and account actions

  • ChangedNav Header

    Split Nav into two separate components: Nav Header and Nav Vertical

  • DeprecatedNav Header

    Replaced by Nav Header and Nav Vertical — update imports to nav-header.css + nav-vertical.css

Nav Vertical
  • AddedNav Vertical

    Sidebar navigation with two variants: Leading Icons (default) and text-only

  • ChangedNav Vertical

    Split Nav into two separate components: Nav Header and Nav Vertical

  • DeprecatedNav Vertical

    Replaced by Nav Header and Nav Vertical — update imports to nav-header.css + nav-vertical.css

Notification
  • AddedNotification

    Status banners with info, success, error, warning variants; subtle, prominent, and inline styles; optional dismiss

Search
  • AddedSearch

    Search input with leading icon, auto-show clear button, hover/focused/error states

Tile
  • AddedTile

    Selectable card with label, body text, optional chevron; default/hover/selected/focused/disabled states

Tooltip
  • AddedTooltip

    CSS-only text popover on hover/focus with top/bottom/left/right positioning

UDS 0.1

2026-04-0120 changes

Release notes

  • Added

    Initial release: primitive + semantic tokens, 6 color modes, 4 font families, 3 font scales, 2 density modes

  • Added

    249 primitive tokens (color, font, text, space, border, style)

  • Added

    93 semantic color tokens across 6 modes (Base Light, Base Dark, ResMan Light, ResMan Dark, AnyoneHome Light, Inhabit Light)

  • Added

    Semantic font tokens with 4 font families (Inter, Poppins, Roboto, Lexend)

  • Added

    Semantic font-scale tokens with 3 scales (default, smaller, larger)

  • Added

    Semantic space tokens with 2 density modes (default, comfortable)

  • Added

    Semantic border tokens (radius + width)

  • Added

    Text styles for headings, body, labels, inputs, data cells

Components

Badge
  • AddedBadge

    Status variants and sizes

Breadcrumb
  • AddedBreadcrumb

    Navigation component

Button
  • AddedButton

    Primary, secondary, ghost variants; small + default sizes; icon support; disabled + loading states

Checkbox
  • AddedCheckbox

    Label, disabled, and error states

Divider
  • AddedDivider

    Horizontal and vertical orientations

Icon Wrapper
  • AddedIcon Wrapper

    Size and color variants for Material Symbols

Nav Header
  • AddedNav Header

    Navigation system: header bar, vertical sidebar, bento dropdown, rail buttons, search, and account actions

Nav Vertical
  • AddedNav Vertical

    Navigation system: header bar, vertical sidebar, bento dropdown, rail buttons, search, and account actions

Radio
  • AddedRadio

    Label, disabled, and error states

Spacer
  • AddedSpacer

    Spacing utility component

Tabs
  • AddedTabs

    Horizontal tab component with keyboard navigation

Text Input
  • AddedText Input

    Label, helper text, error state, character counter, leading/trailing icons