@signal9/era-ui 34.0.1 → 34.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +694 -799
  2. package/dist/era-ui.css +1 -1
  3. package/dist/generated-docs/utilities.json +12 -1
  4. package/dist/os/pane.svelte +5 -22
  5. package/dist/styles/surfaces/bevel.css +7 -0
  6. package/dist/styles/surfaces/contract.css +8 -0
  7. package/dist/styles/utilities/materials.css +24 -2
  8. package/dist/ui/button/variants.js +1 -1
  9. package/dist/ui/pane/pane-root.svelte +9 -14
  10. package/package.json +9 -7
  11. package/skills/era-ui/SKILL.md +1 -0
  12. package/skills/era-ui/references/releases/0.md +397 -0
  13. package/skills/era-ui/references/releases/1.md +775 -0
  14. package/skills/era-ui/references/releases/10.md +23 -0
  15. package/skills/era-ui/references/releases/11.md +13 -0
  16. package/skills/era-ui/references/releases/12.md +53 -0
  17. package/skills/era-ui/references/releases/13.md +18 -0
  18. package/skills/era-ui/references/releases/14.md +41 -0
  19. package/skills/era-ui/references/releases/15.md +11 -0
  20. package/skills/era-ui/references/releases/16.md +17 -0
  21. package/skills/era-ui/references/releases/17.md +12 -0
  22. package/skills/era-ui/references/releases/18.md +11 -0
  23. package/skills/era-ui/references/releases/19.md +11 -0
  24. package/skills/era-ui/references/releases/2.md +510 -0
  25. package/skills/era-ui/references/releases/20.md +12 -0
  26. package/skills/era-ui/references/releases/21.md +19 -0
  27. package/skills/era-ui/references/releases/22.md +24 -0
  28. package/skills/era-ui/references/releases/23.md +53 -0
  29. package/skills/era-ui/references/releases/24.md +35 -0
  30. package/skills/era-ui/references/releases/25.md +36 -0
  31. package/skills/era-ui/references/releases/26.md +37 -0
  32. package/skills/era-ui/references/releases/27.md +16 -0
  33. package/skills/era-ui/references/releases/28.md +15 -0
  34. package/skills/era-ui/references/releases/29.md +17 -0
  35. package/skills/era-ui/references/releases/3.md +192 -0
  36. package/skills/era-ui/references/releases/30.md +115 -0
  37. package/skills/era-ui/references/releases/31.md +15 -0
  38. package/skills/era-ui/references/releases/32.md +21 -0
  39. package/skills/era-ui/references/releases/33.md +25 -0
  40. package/skills/era-ui/references/releases/34.md +33 -0
  41. package/skills/era-ui/references/releases/4.md +366 -0
  42. package/skills/era-ui/references/releases/5.md +43 -0
  43. package/skills/era-ui/references/releases/6.md +11 -0
  44. package/skills/era-ui/references/releases/7.md +17 -0
  45. package/skills/era-ui/references/releases/8.md +11 -0
  46. package/skills/era-ui/references/releases/9.md +11 -0
  47. package/skills/era-ui/references/releases/index.md +42 -0
@@ -11,6 +11,7 @@
11
11
  * relief --era-shadow, --era-shadow-lg
12
12
  * interaction --era-highlight, --era-fill, full/compact press travel
13
13
  * frame --era-divider-color, --era-panel-inset, --era-backdrop-filter
14
+ * window derived pane edge light/shade at rest and focus
14
15
  * environment --era-border-color, --era-overlay-bg
15
16
  * selection --era-selection-bg/fg/shadow
16
17
  *
@@ -25,6 +26,13 @@
25
26
  --era-shadow-well: var(--era-shadow);
26
27
  --era-shadow-pressed: var(--era-shadow);
27
28
  --era-highlight-shadow: var(--era-shadow);
29
+ /* A pane is the one floating surface whose edge is structural. Most
30
+ * materials draw one uniform hairline; directional materials may split the
31
+ * same 1px between their lit and shaded sides without component branching. */
32
+ --era-pane-edge-light: var(--era-divider-color);
33
+ --era-pane-edge-shade: var(--era-divider-color);
34
+ --era-pane-edge-focus-light: var(--color-7);
35
+ --era-pane-edge-focus-shade: var(--color-7);
28
36
  }
29
37
 
30
38
  /* Radius re-derives per element because density/corners may change without a
@@ -24,15 +24,37 @@
24
24
  -webkit-backdrop-filter: var(--era-backdrop-filter);
25
25
  }
26
26
 
27
+ /* @use a draggable window surface. Its one-pixel structural edge is uniform on
28
+ * flat/glass and directionally lit on bevel; material-pane-focus strengthens
29
+ * the SAME edge without adding an outline or changing its width. */
30
+ @utility material-pane {
31
+ border-width: 1px;
32
+ border-style: solid;
33
+ border-color: var(--era-pane-edge-light) var(--era-pane-edge-shade) var(--era-pane-edge-shade)
34
+ var(--era-pane-edge-light);
35
+ background-color: var(--era-surface-bg-elevated);
36
+ box-shadow: var(--era-shadow-lg);
37
+ backdrop-filter: var(--era-backdrop-filter);
38
+ -webkit-backdrop-filter: var(--era-backdrop-filter);
39
+ }
40
+
41
+ @utility material-pane-focus {
42
+ border-color: var(--era-pane-edge-focus-light) var(--era-pane-edge-focus-shade)
43
+ var(--era-pane-edge-focus-shade) var(--era-pane-edge-focus-light);
44
+ }
45
+
27
46
  /* @use the physical press contract on a control whose direct content plane is
28
47
  * marked data-era-press-content. The surface owns relief/travel; compact
29
48
  * components select the compact travel primitives as their effective values. */
30
49
  @utility pressable {
31
- &:active {
50
+ /* Press outranks every transient hover/focus shadow. :not() is semantic — a
51
+ * disabled control cannot depress — and gives the physical state enough
52
+ * specificity to win regardless of Tailwind's generated utility order. */
53
+ &:active:not(:disabled):not([aria-disabled='true']) {
32
54
  box-shadow: var(--era-shadow-pressed);
33
55
  }
34
56
 
35
- &:active > [data-era-press-content] {
57
+ &:active:not(:disabled):not([aria-disabled='true']) > [data-era-press-content] {
36
58
  translate: var(--era-press-effective-x, var(--era-press-sink-x))
37
59
  var(--era-press-effective-y, var(--era-press-sink-y));
38
60
  }
@@ -50,7 +50,7 @@ export const buttonVariants = tv({
50
50
  {
51
51
  variant: 'filled',
52
52
  size: 'pill',
53
- class: 'min-w-pill tier-pill'
53
+ class: 'min-w-pill tier-pill [--era-press-effective-x:var(--era-press-sink-compact-x)] [--era-press-effective-y:var(--era-press-sink-compact-y)]'
54
54
  },
55
55
  {
56
56
  variant: 'filled',
@@ -512,19 +512,14 @@
512
512
  // --era-pill-inset-control, the gap the × already sits at from the corner. The ×'s
513
513
  // natural rd-xxs is therefore concentric inside rd-md by construction, the
514
514
  // same way rd-xs was inside rd-sm before the handle moved up a tier.
515
- // A hairline edge, because a floating pane is the one thing that must be
516
- // separable from whatever is behind it and on the FLAT surface it had
517
- // nothing to do it with: --era-shadow-lg collapsed to none there, so the
518
- // pane's whole edge was a tone step from the desktop. (Flat's shadow-lg is
519
- // a hairline ring now f329475 which is why the pane must NOT also take
520
- // it: a border plus that ring is two lines, and that is what a focused pane
521
- // used to render.) The reference terminal
522
- // app draws this as a real 1px border, and that border is also why its
523
- // chrome reads as having more air: a border consumes a pixel of the box, so
524
- // everything inside starts a pixel further in. Same token'd hairline the
525
- // bubble toolbar uses, so it tracks the surface instead of being a drawn-on
526
- // line. Focus recolours THIS border — that app's border-6 -> border-8 in
527
- // era's idiom — rather than drawing anything additional.
515
+ // A pane is the one floating surface whose edge is structural: it must stay
516
+ // separable from whatever sits behind it even on flat, where relief can be
517
+ // none. material-pane owns that edge together with the fill and elevation.
518
+ // Flat/glass resolve it as one uniform hairline; bevel spends the SAME 1px
519
+ // on a top/left light and bottom/right shade. Focus strengthens those same
520
+ // sides through material-pane-focus rather than stacking another outline.
521
+ // Keeping the edge a real border also preserves the pane's established
522
+ // geometry: its pixel is inside the box, so child chrome starts one pixel in.
528
523
  // contain:layout style — a moving pane must not make the page re-solve
529
524
  // layout it cannot have affected. NOT `size` (the pane auto-sizes to its
530
525
  // content until the grip sets a size, and size containment would collapse
@@ -532,7 +527,7 @@
532
527
  // outward, and paint containment clips them).
533
528
  // The pane is unbounded chrome. Bounded descendants carry their own tier;
534
529
  // no inherited radius is allowed to rewrite a row from the outside in.
535
- 'group/pane absolute isolate flex flex-col rounded-control border border-divider material-popover [contain:layout_style]',
530
+ 'group/pane absolute isolate flex flex-col rounded-control material-pane [contain:layout_style]',
536
531
  // Auto-size to content until an explicit size is set (by the grip or a preset).
537
532
  size ? '' : 'w-max',
538
533
  // While Ctrl is held the whole pane is grabbable: a grab cursor hints it, and
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@signal9/era-ui",
3
- "version": "34.0.1",
3
+ "version": "34.1.0",
4
4
  "packageManager": "npm@11.19.0",
5
5
  "engines": {
6
6
  "node": ">=24 <27",
7
7
  "npm": ">=11 <13"
8
8
  },
9
9
  "scripts": {
10
- "predev": "npm run build:llm-docs",
10
+ "predev": "npm run release-history:build && npm run build:llm-docs",
11
11
  "dev": "vite dev --host",
12
- "build": "npm run build:llm-docs && vite build && npm run package:build",
12
+ "build": "npm run release-history:build && npm run build:llm-docs && vite build && npm run package:build",
13
13
  "test:visual": "playwright test",
14
- "test:browser:ci": "playwright test --grep @release --grep-invert @snapshot",
14
+ "test:visual:critical": "playwright test --grep @release --grep-invert @snapshot",
15
15
  "test:visual:deep": "ERA_TEST_DEPTH=deep playwright test",
16
16
  "test:unit": "node --test tests/unit/*.test.mjs",
17
17
  "deploy": "npm run build && npx --yes wrangler@latest deploy",
18
18
  "preview": "wrangler dev .svelte-kit/cloudflare/_worker.js --port 4173",
19
- "prepare": "git config core.hooksPath .githooks 2>/dev/null || true; svelte-kit sync || echo ''",
19
+ "prepare": "git config core.hooksPath .githooks 2>/dev/null || true; npm run release-history:build && (svelte-kit sync || echo '')",
20
20
  "package:build": "svelte-kit sync && svelte-package && node scripts/build-styles.js && node scripts/run-publint.mjs",
21
- "prepack": "npm run build:llm-docs && npm run package:build",
21
+ "prepack": "npm run release-history:build && npm run build:llm-docs && npm run package:build",
22
22
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
23
23
  "check:mode-verbatim": "npm run package:build && svelte-check --tsconfig tests/smoke/mode-verbatim/tsconfig.json",
24
24
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
@@ -60,10 +60,12 @@
60
60
  "check:toolchain": "node scripts/check-toolchain.mjs",
61
61
  "check:contracts-generated": "node scripts/generate-contracts.mjs --check",
62
62
  "check:generated-docs": "jiti scripts/check-generated-docs.ts",
63
+ "check:release-history": "node scripts/check-release-history.mjs",
63
64
  "check:visual-language": "node --experimental-strip-types scripts/check-visual-language.ts",
64
65
  "check:consumer-lab": "node scripts/check-consumer-lab.mjs",
65
66
  "contracts:update": "node scripts/generate-contracts.mjs",
66
67
  "docs:update": "jiti scripts/check-generated-docs.ts --update",
68
+ "release-history:build": "node scripts/release-history.mjs",
67
69
  "component:create": "node scripts/create-component.mjs",
68
70
  "inspect": "node scripts/inspect.mjs",
69
71
  "verify:published": "node scripts/verify-published.mjs",
@@ -629,8 +631,8 @@
629
631
  "@internationalized/date": "^3.12.3",
630
632
  "@neodrag/svelte": "3.0.0-next.10",
631
633
  "@playwright/test": "^1.62.1",
632
- "@semantic-release/changelog": "^7.0.0",
633
634
  "@semantic-release/exec": "^7.1.0",
635
+ "@semantic-release/release-notes-generator": "^14.1.0",
634
636
  "@sveltejs/adapter-cloudflare": "^7.2.9",
635
637
  "@sveltejs/kit": "^2.70.2",
636
638
  "@sveltejs/package": "^2.5.8",
@@ -33,5 +33,6 @@ Use `ModeProvider` when state should drive axes. Use data attributes directly fo
33
33
  - [Geometry](references/geometry.md): tiers, even gaps, concentricity, and padding.
34
34
  - [Materials and motion](references/materials.md): surface recipes, press travel, state semantics, and motion.
35
35
  - [Composition and review](references/composition.md): component topology, consumer classes, text, and the final review checklist.
36
+ - [Release history](references/releases/index.md): version selection and links to one complete history file per major. Load only the major versions crossed by an upgrade.
36
37
 
37
38
  The installed package exposes its machine-readable utility reference at `@signal9/era-ui/utilities.json`; the documentation site renders the same generated data for people.
@@ -0,0 +1,397 @@
1
+ # Era UI v0 release history
2
+
3
+ ## [0.9.31](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.30...era-ui-v0.9.31) (2026-05-08)
4
+
5
+ ### Features
6
+
7
+ - **separator:** add slant variant ([8b7ef72](https://github.com/sig-nine/era-ui/commit/8b7ef7298b7db1d9d0745d5cc33e9b3aac385a55))
8
+ - **surface:** add wireframe surface mode ([d354b87](https://github.com/sig-nine/era-ui/commit/d354b874194b1ffc5863fb1f060625619f167d5d))
9
+ - **surface:** rework glass mode for light themes ([e43cbe3](https://github.com/sig-nine/era-ui/commit/e43cbe3c79e7226ca2bebab316330cf7d7dcc61c))
10
+ - **video-player:** apple-style single-row playback bar layout ([c3ee182](https://github.com/sig-nine/era-ui/commit/c3ee182127747c836e0be1d81ab1c7f2882863aa))
11
+ - **video-player:** apple-style single-row playback bar layout ([#110](https://github.com/sig-nine/era-ui/issues/110)) ([15cb78c](https://github.com/sig-nine/era-ui/commit/15cb78c0a802b30e9dbc8d9e5ded040f9168dd40))
12
+ - **video-player:** expand chrome with quality menu, context menu, hover preview ([f3b59e5](https://github.com/sig-nine/era-ui/commit/f3b59e5ca976833b7cc0f19df8a277e2d7b4f1de))
13
+ - **video-player:** mobile + idle + thumbless tracks + chrome polish ([3e85fb7](https://github.com/sig-nine/era-ui/commit/3e85fb771ef266611e514bc8096539a54027eb4c))
14
+
15
+ ### Bug Fixes
16
+
17
+ - **mode:** avoid generated type name collision ([09da4ff](https://github.com/sig-nine/era-ui/commit/09da4ff6a71a52adf4afb822ebcfe1478f562c0d))
18
+ - **mode:** avoid generated type name collision ([#113](https://github.com/sig-nine/era-ui/issues/113)) ([7fe98de](https://github.com/sig-nine/era-ui/commit/7fe98dee673f421a1b38b1d57eacb2b2148e0cfb))
19
+ - **separator:** tune slant for inline text ([cbb7ab9](https://github.com/sig-nine/era-ui/commit/cbb7ab9df721709e5fa170b89e0a52d209107fe8))
20
+ - **tooltip:** force single-line content with whitespace-nowrap ([9054e63](https://github.com/sig-nine/era-ui/commit/9054e631882a2295abffeb8639003714d447f7d7))
21
+ - **video-player:** drive seek thumb via rAF to mask resume jump in chromium ([aa9969e](https://github.com/sig-nine/era-ui/commit/aa9969e8c67ab0cb2aa46969e0b4c80f875b4184))
22
+ - **video-player:** drive seek thumb via rAF to mask resume jump in chromium ([#112](https://github.com/sig-nine/era-ui/issues/112)) ([5576afd](https://github.com/sig-nine/era-ui/commit/5576afdb8553f5119add94fbc9ba65dc8b86234f))
23
+ - **video-player:** remove seek thumb hover scale ([a252b6e](https://github.com/sig-nine/era-ui/commit/a252b6ef98a569211ddc2d6ef6f32c497d5b4b2c))
24
+ - **video-player:** smooth seek timeline resume motion ([711c924](https://github.com/sig-nine/era-ui/commit/711c924df59e3bdb6105db405ce7437583832e41))
25
+
26
+ ### Reverts
27
+
28
+ - remove wireframe surface mode ([33a37ac](https://github.com/sig-nine/era-ui/commit/33a37ac456974b1995ad71590a39fe07d5bea05a))
29
+
30
+ ## [0.9.30](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.29...era-ui-v0.9.30) (2026-04-29)
31
+
32
+ ### Bug Fixes
33
+
34
+ - **video-player:** re-track state.currentTime so the slider keeps moving ([00c5d99](https://github.com/sig-nine/era-ui/commit/00c5d99f715db62ee6911854fb00a2485bf1a503))
35
+ - **video-player:** re-track state.currentTime so the slider keeps moving ([#107](https://github.com/sig-nine/era-ui/issues/107)) ([4ad045d](https://github.com/sig-nine/era-ui/commit/4ad045d92be2c7238a3a60638c6abdd0562461b1))
36
+
37
+ ## [0.9.29](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.28...era-ui-v0.9.29) (2026-04-29)
38
+
39
+ ### Bug Fixes
40
+
41
+ - **video-player:** always read precise currentTime, fixing resume jump ([cb70957](https://github.com/sig-nine/era-ui/commit/cb709577f42088feec5420168004fe5e6a6ab953))
42
+ - **video-player:** always read precise currentTime, fixing resume jump ([#105](https://github.com/sig-nine/era-ui/issues/105)) ([f0a85ee](https://github.com/sig-nine/era-ui/commit/f0a85ee908e3f53dafd5ec6e35a8b2552e2dfedb))
43
+
44
+ ## [0.9.28](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.27...era-ui-v0.9.28) (2026-04-29)
45
+
46
+ ### Bug Fixes
47
+
48
+ - **video-player:** eliminate forward jump when resuming after pause ([19ff7be](https://github.com/sig-nine/era-ui/commit/19ff7be5e1300436abe4a52e38ed827bbba0a9f5))
49
+ - **video-player:** eliminate forward jump when resuming after pause ([#103](https://github.com/sig-nine/era-ui/issues/103)) ([8c72b99](https://github.com/sig-nine/era-ui/commit/8c72b99d2276488b7fb6905fe426ed12258bb1f5))
50
+
51
+ ## [0.9.27](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.26...era-ui-v0.9.27) (2026-04-29)
52
+
53
+ ### Features
54
+
55
+ - **video-player:** minimal-by-default chrome with opt-in features ([2c748b3](https://github.com/sig-nine/era-ui/commit/2c748b3d68d18e345a89969154a4ca99e2ca2efc))
56
+ - **video-player:** minimal-by-default chrome with opt-in features ([#101](https://github.com/sig-nine/era-ui/issues/101)) ([f612994](https://github.com/sig-nine/era-ui/commit/f612994da7c0745b3b99d5faf811faf6f3ac3b9e))
57
+
58
+ ## [0.9.26](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.25...era-ui-v0.9.26) (2026-04-28)
59
+
60
+ ### Bug Fixes
61
+
62
+ - render primary accent as turquoise tag in dropdown ([2418e86](https://github.com/sig-nine/era-ui/commit/2418e86f4ebce565180e55edc313055b96dbc9f5))
63
+
64
+ ## [0.9.25](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.24...era-ui-v0.9.25) (2026-04-28)
65
+
66
+ ### Features
67
+
68
+ - add turquoise accent preset options ([0cd8e17](https://github.com/sig-nine/era-ui/commit/0cd8e1777cdb59ccc2b5359ec37d88a5a5f54e8e))
69
+ - add turquoise accent preset options ([#96](https://github.com/sig-nine/era-ui/issues/96)) ([f6170f5](https://github.com/sig-nine/era-ui/commit/f6170f51d00c34bcde213fb1f5f6b6a2ab17ec8e))
70
+
71
+ ## [0.9.24](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.23...era-ui-v0.9.24) (2026-04-28)
72
+
73
+ ### Bug Fixes
74
+
75
+ - Add new sand-draft themes, refine sand palettes, and add light-mode support for draft themes ([#94](https://github.com/sig-nine/era-ui/issues/94)) ([634a85e](https://github.com/sig-nine/era-ui/commit/634a85e9a2b57c1ea3fd8bcb49a6923c292e6786))
76
+ - **theme:** support light mode across draft themes ([37e6a36](https://github.com/sig-nine/era-ui/commit/37e6a369f2f8c22ae103edd4938c84afe563ecc9))
77
+
78
+ ## [0.9.23](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.22...era-ui-v0.9.23) (2026-04-28)
79
+
80
+ ### Features
81
+
82
+ - **theme:** add new sandstone draft themes ([5e3f243](https://github.com/sig-nine/era-ui/commit/5e3f2438df2623aeff331ff1870b0e833d175ca7))
83
+ - **theme:** add new sandstone draft themes ([#92](https://github.com/sig-nine/era-ui/issues/92)) ([773d3a0](https://github.com/sig-nine/era-ui/commit/773d3a0015cb9795bd4bd74a079525594ae45382))
84
+
85
+ ## [0.9.22](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.21...era-ui-v0.9.22) (2026-04-28)
86
+
87
+ ### Features
88
+
89
+ - **themes:** add sandstone draft themes from provided OKLCH palette ([#90](https://github.com/sig-nine/era-ui/issues/90)) ([3ed11a1](https://github.com/sig-nine/era-ui/commit/3ed11a11fff7e35a8cb2f9b7fdc6e59e4ca85492))
90
+ - **themes:** add sandstone draft themes from provided palette ([512d484](https://github.com/sig-nine/era-ui/commit/512d484cfee268966250ba1933380d317fb56c11))
91
+
92
+ ## [0.9.21](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.20...era-ui-v0.9.21) (2026-04-28)
93
+
94
+ ### Features
95
+
96
+ - **themes:** add adobe draft e using provided sandstone 25-950 scale ([36982c2](https://github.com/sig-nine/era-ui/commit/36982c2f71f1bef04b5e5ba63b8f0160b7d23c98))
97
+ - **themes:** add minecraft-terracotta adobe draft dark variants ([f97ad3d](https://github.com/sig-nine/era-ui/commit/f97ad3dd28844026c0bb46f202677abf6c4d1eff))
98
+
99
+ ### Bug Fixes
100
+
101
+ - Add multiple Adobe draft themes and update Adobe dark palette; expose new themes in layout ([#88](https://github.com/sig-nine/era-ui/issues/88)) ([c8126d7](https://github.com/sig-nine/era-ui/commit/c8126d7ed90d357a6fbe425eff03ff91291a5af8))
102
+
103
+ ## [0.9.20](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.19...era-ui-v0.9.20) (2026-04-28)
104
+
105
+ ### Bug Fixes
106
+
107
+ - Refine 'adobe' theme palette and accent tokens in themes.css ([#86](https://github.com/sig-nine/era-ui/issues/86)) ([f3f1f40](https://github.com/sig-nine/era-ui/commit/f3f1f4017372d6dfaf740afd39343256a77c829f))
108
+ - **themes:** rebalance adobe dark with sandy neutrals and teal harmony ([6eaec90](https://github.com/sig-nine/era-ui/commit/6eaec90e75b5a9ae2f036462d9e0e38409ded28f))
109
+
110
+ ## [0.9.19](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.18...era-ui-v0.9.19) (2026-04-28)
111
+
112
+ ### Features
113
+
114
+ - **themes:** shift dark adobe palette toward sand with turquoise accents ([38cda89](https://github.com/sig-nine/era-ui/commit/38cda89cf47851a76475bba3980de014f5089d37))
115
+ - **themes:** shift dark adobe palette toward sand with turquoise accents ([#84](https://github.com/sig-nine/era-ui/issues/84)) ([c479b0b](https://github.com/sig-nine/era-ui/commit/c479b0b36820b270d51ae403274fb7b18bafd891))
116
+
117
+ ### Bug Fixes
118
+
119
+ - **build:** force docs regeneration on deploy ([8540062](https://github.com/sig-nine/era-ui/commit/85400624dc11b2f43b69a022dcfbc979c31f4344))
120
+
121
+ ## [0.9.18](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.17...era-ui-v0.9.18) (2026-04-28)
122
+
123
+ ### Features
124
+
125
+ - **docs:** prebuild llm docs artifacts and serve static llms routes ([#81](https://github.com/sig-nine/era-ui/issues/81)) ([fe5500c](https://github.com/sig-nine/era-ui/commit/fe5500c4a621a860505b5817bd5a0f68723054d6))
126
+ - **docs:** prebuild llm docs artifacts and serve statically ([c5671d4](https://github.com/sig-nine/era-ui/commit/c5671d42a54524d31712c5f8408f7f10bcff9e43))
127
+
128
+ ## [0.9.17](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.16...era-ui-v0.9.17) (2026-04-28)
129
+
130
+ ### Features
131
+
132
+ - Auto-discover UI components, add per-component docs pages, and improve LLM user-agent handling ([#79](https://github.com/sig-nine/era-ui/issues/79)) ([31610ac](https://github.com/sig-nine/era-ui/commit/31610aca9b3ce5790f20f4e59670b825df3933c9))
133
+
134
+ ### Bug Fixes
135
+
136
+ - **docs:** unify .md and UA markdown responses by slug ([b3cba65](https://github.com/sig-nine/era-ui/commit/b3cba65491ee963a7fdf901f011a05bf3777b739))
137
+
138
+ ## [0.9.16](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.15...era-ui-v0.9.16) (2026-04-28)
139
+
140
+ ### Features
141
+
142
+ - **docs:** add fallback component docs route for uncovered slugs ([7e9fd6b](https://github.com/sig-nine/era-ui/commit/7e9fd6be83731755364db8de082cb1f2127c97c4))
143
+
144
+ ### Bug Fixes
145
+
146
+ - Add per-component doc pages, infer missing registry entries, and detect LLM-friendly user agents ([#77](https://github.com/sig-nine/era-ui/issues/77)) ([b3569ed](https://github.com/sig-nine/era-ui/commit/b3569ed0e06d872dc01ee5c61f75703613703f33))
147
+
148
+ ## [0.9.15](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.14...era-ui-v0.9.15) (2026-04-28)
149
+
150
+ ### Features
151
+
152
+ - **docs:** auto-discover component docs entries from exports ([bc2234f](https://github.com/sig-nine/era-ui/commit/bc2234fc5905a42daccc9238ba77c5b078356791))
153
+
154
+ ### Bug Fixes
155
+
156
+ - Infer missing component docs from root UI index and improve LLMS user-agent handling ([#75](https://github.com/sig-nine/era-ui/issues/75)) ([2cdef24](https://github.com/sig-nine/era-ui/commit/2cdef245560f8ef30481ca657537c197ac13fd9c))
157
+
158
+ ## [0.9.14](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.13...era-ui-v0.9.14) (2026-04-28)
159
+
160
+ ### Features
161
+
162
+ - **docs:** expose theme picker in the layout bar ([506e9c2](https://github.com/sig-nine/era-ui/commit/506e9c2626d1ecbff3ed5baa82aecf6033780349))
163
+ - **themes:** add adobe + dark adobe palettes ([1023020](https://github.com/sig-nine/era-ui/commit/102302026fd8f246d92e98d50c0dfa4168a51c11))
164
+ - **themes:** add adobe + dark adobe palettes ([#72](https://github.com/sig-nine/era-ui/issues/72)) ([d209da3](https://github.com/sig-nine/era-ui/commit/d209da36ca4c3ccca8c1e24398df1676296698fc))
165
+
166
+ ### Bug Fixes
167
+
168
+ - **video-player:** unbreak seek bar on VOD; pre-snap volume ([#71](https://github.com/sig-nine/era-ui/issues/71)) ([7e94ed2](https://github.com/sig-nine/era-ui/commit/7e94ed228382b13d76d5bd49c65da365a274ba59))
169
+ - **video-player:** unbreak seek bar on VOD; pre-snap volume; trust engine ([58c1b16](https://github.com/sig-nine/era-ui/commit/58c1b1659959eecb02a6a49eae1739d13ab3d716))
170
+
171
+ ## [0.9.13](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.12...era-ui-v0.9.13) (2026-04-27)
172
+
173
+ ### Features
174
+
175
+ - **density:** touch mode uses full pill roundness ([cbc9de2](https://github.com/sig-nine/era-ui/commit/cbc9de2beac62401da399f6e1692a90c706c149c))
176
+ - **video-player:** disable seek slider when vidstack reports !canSeek ([ae76018](https://github.com/sig-nine/era-ui/commit/ae76018b54a87ad62f6368c51574cf357d1b5b1f))
177
+ - **video-player:** fade controls when vidstack reports the user is idle ([f29ba55](https://github.com/sig-nine/era-ui/commit/f29ba55482c3d1084165d47e7195246b4eeab4a0))
178
+ - **video-player:** snap to live edge when seeking near the right of the bar ([e52033e](https://github.com/sig-nine/era-ui/commit/e52033e317a6450bdaa45f1834373e26854b6142))
179
+
180
+ ### Bug Fixes
181
+
182
+ - **code-block:** symmetric copy-button gap across density modes ([645a0f0](https://github.com/sig-nine/era-ui/commit/645a0f06d1cab8fca0dbc2f1e5edc436c0290763))
183
+ - **code-block:** symmetric copy-button gap across density modes ([#68](https://github.com/sig-nine/era-ui/issues/68)) ([d53b406](https://github.com/sig-nine/era-ui/commit/d53b406058fdc18d4407c2b2a00dea757fd18eef))
184
+ - **video-player:** apply volume/playbackRate as initial-only props ([157c1ad](https://github.com/sig-nine/era-ui/commit/157c1ad81c91daa383234f8c8bbf353359b25e7e))
185
+ - **video-player:** clear waiting on time-update to unstick spinner ([849a172](https://github.com/sig-nine/era-ui/commit/849a1727a416cdfae95a2dee5e3bff49c3548189))
186
+ - **video-player:** match vidstack's buffering-indicator condition ([#69](https://github.com/sig-nine/era-ui/issues/69)) ([9ffe1c1](https://github.com/sig-nine/era-ui/commit/9ffe1c198e55d98a251206c469dcda76c7b60ebf))
187
+ - **video-player:** match vidstack's buffering-indicator condition exactly ([9a5b646](https://github.com/sig-nine/era-ui/commit/9a5b64698167667931b01c0054e515d0a32343c0))
188
+ - **video-player:** reset internal state on source change ([6c3545e](https://github.com/sig-nine/era-ui/commit/6c3545e0d0dc74e9ce229526ad2e3227d4bb99be))
189
+ - **video-player:** reset internal state on source change ([#66](https://github.com/sig-nine/era-ui/issues/66)) ([cecfbfd](https://github.com/sig-nine/era-ui/commit/cecfbfd8ed22d26db3cf58478eb17c95cf7cf805))
190
+ - **video-player:** seeked sync, stuck spinner, initial-only props ([#64](https://github.com/sig-nine/era-ui/issues/64)) ([6aedb2e](https://github.com/sig-nine/era-ui/commit/6aedb2e2006a2a2257c0a7087061b0f824893371))
191
+ - **video-player:** sync currentTime on seeked event ([f0c22d6](https://github.com/sig-nine/era-ui/commit/f0c22d65c9f8ba006df7daf1d4d796a0d1e079cd))
192
+ - **video-player:** type the event-forwarder generically instead of any ([c9f957c](https://github.com/sig-nine/era-ui/commit/c9f957cd3378210ab6d701c6c6c6fafc17d412ff))
193
+
194
+ ## [0.9.12](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.11...era-ui-v0.9.12) (2026-04-27)
195
+
196
+ ### Bug Fixes
197
+
198
+ - **video-player:** sync currentTime on pause to remove resume jump ([584b1c4](https://github.com/sig-nine/era-ui/commit/584b1c4c6b3de293eccea9c3b22696216c0af8eb))
199
+ - **video-player:** sync currentTime on pause to remove resume jump ([#62](https://github.com/sig-nine/era-ui/issues/62)) ([9b673fa](https://github.com/sig-nine/era-ui/commit/9b673fadaeca2bf621056f45c96d69f0f3a8c0bf))
200
+
201
+ ## [0.9.11](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.10...era-ui-v0.9.11) (2026-04-27)
202
+
203
+ ### Features
204
+
205
+ - **slider:** add progress underlay to Slider.Range ([ff95bb7](https://github.com/sig-nine/era-ui/commit/ff95bb725fd62a22003cf0f16fc45ba34dd69d96))
206
+ - **video-player:** show buffered range and instant scrub feedback ([e318b4f](https://github.com/sig-nine/era-ui/commit/e318b4f45468083fa2871725dd61c0b3cb389f0e))
207
+ - **video-player:** show buffered range and instant scrub feedback ([#58](https://github.com/sig-nine/era-ui/issues/58)) ([703213e](https://github.com/sig-nine/era-ui/commit/703213e42f6c8f82afec16da9d53e78c22bfc1d2))
208
+
209
+ ### Bug Fixes
210
+
211
+ - **video-player:** construct MediaRemoteControl in the browser only ([5de11eb](https://github.com/sig-nine/era-ui/commit/5de11eb1dafb837c60d9adce32d67ffaf43cad36))
212
+ - **video-player:** refresh buffered range on every time-update ([37e32f2](https://github.com/sig-nine/era-ui/commit/37e32f2aa143fc0ee814566cbe794df3dc21a7bf))
213
+ - **video-player:** unbreak SSR and keep buffered range live ([#60](https://github.com/sig-nine/era-ui/issues/60)) ([b0b5441](https://github.com/sig-nine/era-ui/commit/b0b5441a59cb1f7c8234c47fba2f71c8eadc6b5d))
214
+
215
+ ## [0.9.10](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.9...era-ui-v0.9.10) (2026-04-27)
216
+
217
+ ### Features
218
+
219
+ - **slider:** add trackClass override to Slider.Range ([ea8d7ab](https://github.com/sig-nine/era-ui/commit/ea8d7ab8df6d1217f78619c8a16d8aab7ad745e4))
220
+
221
+ ### Bug Fixes
222
+
223
+ - **quickstart:** hide own package name from esbuild dep-scanner ([2d4bce9](https://github.com/sig-nine/era-ui/commit/2d4bce917d1a1e185f877eae7235baee31860cb4))
224
+ - **video-player:** make slider tracks visible against the controls bar ([4db0b71](https://github.com/sig-nine/era-ui/commit/4db0b7184caf5904a42e495075671fbced88dee5))
225
+ - **video-player:** make slider tracks visible against the controls bar ([#56](https://github.com/sig-nine/era-ui/issues/56)) ([fb84989](https://github.com/sig-nine/era-ui/commit/fb84989dc25d20d217b002b61629db8470ba85e5))
226
+ - **vite:** broaden vidstack exclude to its define/* subpaths ([cbbe7a6](https://github.com/sig-nine/era-ui/commit/cbbe7a6c69e5a941f4ee4f9c800a9ae1b0806ae5))
227
+
228
+ ## [0.9.9](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.8...era-ui-v0.9.9) (2026-04-26)
229
+
230
+ ### Bug Fixes
231
+
232
+ - **docs-layout:** contain sidebar scroll inside the viewport ([81b4730](https://github.com/sig-nine/era-ui/commit/81b4730868e0a38072161d5bf359ade63cd8aece))
233
+ - **docs-layout:** contain sidebar scroll inside the viewport ([#53](https://github.com/sig-nine/era-ui/issues/53)) ([0b63809](https://github.com/sig-nine/era-ui/commit/0b6380933e2363ed87b8a0d94a9d64b4e22f9bde))
234
+
235
+ ## [0.9.8](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.7...era-ui-v0.9.8) (2026-04-26)
236
+
237
+ ### Bug Fixes
238
+
239
+ - **docs-layout:** unstack nav-bar selects on desktop ([56c7142](https://github.com/sig-nine/era-ui/commit/56c71429a293c5d2d5bc7966d411a17c8ba39bea))
240
+ - **docs-layout:** unstack nav-bar selects on desktop ([#51](https://github.com/sig-nine/era-ui/issues/51)) ([5b33f82](https://github.com/sig-nine/era-ui/commit/5b33f82c99bdd6a8ce8c3217af8b09aa92a8a719))
241
+
242
+ ## [0.9.7](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.6...era-ui-v0.9.7) (2026-04-26)
243
+
244
+ ### Features
245
+
246
+ - **modes:** add `touch` density mode ([#45](https://github.com/sig-nine/era-ui/issues/45)) ([794905c](https://github.com/sig-nine/era-ui/commit/794905cf5584b3bfa63150b70081532bb8d44c4c))
247
+ - **modes:** add `touch` density mode for mobile-friendly tap targets ([c25bda7](https://github.com/sig-nine/era-ui/commit/c25bda74daa326b7c00634d3aef863846e77ffe4))
248
+
249
+ ### Performance Improvements
250
+
251
+ - **video-player:** port vidstack mobile-smoothness tricks to seek bar ([f41c435](https://github.com/sig-nine/era-ui/commit/f41c43556aeb032c6cbbdf8562c0b9455eb685db))
252
+ - **video-player:** port vidstack mobile-smoothness tricks to seek bar ([#47](https://github.com/sig-nine/era-ui/issues/47)) ([7ca6197](https://github.com/sig-nine/era-ui/commit/7ca6197fa1414fc39ae0b4ef687f642e7e306471))
253
+
254
+ ## [0.9.6](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.5...era-ui-v0.9.6) (2026-04-26)
255
+
256
+ ### Features
257
+
258
+ - **docs:** make docs layout mobile-friendly ([8a01f16](https://github.com/sig-nine/era-ui/commit/8a01f165a00634a8579fdec53987fd77f586a975))
259
+ - **docs:** make docs layout mobile-friendly ([#43](https://github.com/sig-nine/era-ui/issues/43)) ([612a555](https://github.com/sig-nine/era-ui/commit/612a555e7cf0482090561bcf9558d67bd3a9028c))
260
+
261
+ ## [0.9.5](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.4...era-ui-v0.9.5) (2026-04-26)
262
+
263
+ ### Bug Fixes
264
+
265
+ - resolve svelte-check and eslint failures ([798476c](https://github.com/sig-nine/era-ui/commit/798476ce72fba21427dbbd0b75399ece9e826b0b))
266
+ - resolve svelte-check and eslint failures ([#39](https://github.com/sig-nine/era-ui/issues/39)) ([393262f](https://github.com/sig-nine/era-ui/commit/393262fdd61cea036171c62cd607df9fc3600696))
267
+ - **slider:** finish revert of scrubbing prop in template ([00fd9d1](https://github.com/sig-nine/era-ui/commit/00fd9d1023594ba7d053085a22543464137ecd74))
268
+ - **slider:** finish revert of scrubbing prop in template ([#42](https://github.com/sig-nine/era-ui/issues/42)) ([0bd8e3c](https://github.com/sig-nine/era-ui/commit/0bd8e3ce597b940a4ed52560ae16ae5aa7281fb1))
269
+
270
+ ## [0.9.4](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.3...era-ui-v0.9.4) (2026-04-24)
271
+
272
+ ### Features
273
+
274
+ - **docs:** wrap interactive demos in Card containers ([e533f9c](https://github.com/sig-nine/era-ui/commit/e533f9c6853476dcbaf62131ef6dcfe4319607f5))
275
+ - **docs:** wrap interactive demos in Card containers ([#32](https://github.com/sig-nine/era-ui/issues/32)) ([105a72f](https://github.com/sig-nine/era-ui/commit/105a72fbe8326a4cb1ca44b70560c0484d16b2a4))
276
+ - **slider:** bindable scrubbing state for drag detection ([#37](https://github.com/sig-nine/era-ui/issues/37)) ([00c6b4a](https://github.com/sig-nine/era-ui/commit/00c6b4af2540c262920f633cdfdebbfc6e636692))
277
+ - **slider:** bindable scrubbing state, true while user drags ([67be35e](https://github.com/sig-nine/era-ui/commit/67be35e841767f94bb18078a0af814c9205945d0))
278
+
279
+ ### Bug Fixes
280
+
281
+ - **button:** decouple ButtonVariants from ComponentProps ([729e654](https://github.com/sig-nine/era-ui/commit/729e6540ba31faa186c5f3a7cf749bed0fe425f2))
282
+ - **calendar:** expose value and placeholder as bindable ([6dd72c8](https://github.com/sig-nine/era-ui/commit/6dd72c89fc3c179825ae42c3f05812bc5be5e1fb))
283
+ - **card:** drop resolve() on generic href ([6f69e7c](https://github.com/sig-nine/era-ui/commit/6f69e7c1e125f2032860357852a108bc3d39af1b))
284
+ - **chip:** annotate PointerEvent on pointerdown/up handlers ([74f6b93](https://github.com/sig-nine/era-ui/commit/74f6b9380563ba148de3a41b66a878f8ae856fcc))
285
+ - **date-range-picker demo:** move numberOfMonths to Root ([7dadc08](https://github.com/sig-nine/era-ui/commit/7dadc0817bfa8de11f7c0a67e0186855c453d78c))
286
+ - **registry:** type icons as Component&lt;IconProps&gt; and preserve badge literals ([3bb68d7](https://github.com/sig-nine/era-ui/commit/3bb68d7a87a6385e7736844e0a89d720f6680e8d))
287
+ - **slider:** keep restProps cast reactive via $derived ([edb9833](https://github.com/sig-nine/era-ui/commit/edb9833bddb98e7f2444597c69fb83e7a5f47bd5))
288
+ - **tabs:** place tab triggers list inside bar wrapper ([5b16b69](https://github.com/sig-nine/era-ui/commit/5b16b69f7ecf562398c8ce8fc68d7ca31d086b3a))
289
+ - **tabs:** place tab triggers list inside Bar wrapper ([#36](https://github.com/sig-nine/era-ui/issues/36)) ([0a42aa4](https://github.com/sig-nine/era-ui/commit/0a42aa451a702aea1931f23c913a3dcf5c33d735))
290
+ - **tsconfig:** align moduleResolution with SvelteKit bundler mode ([bba3aee](https://github.com/sig-nine/era-ui/commit/bba3aee071a2c4c5c6b2c251b1de41830b1a4ac1))
291
+ - **types:** clear all svelte-check errors, align tsconfig with SvelteKit ([#34](https://github.com/sig-nine/era-ui/issues/34)) ([74d0d0a](https://github.com/sig-nine/era-ui/commit/74d0d0af9f549f11272b856c71818447f41dd30d))
292
+ - **types:** replace non-existent HTMLSpanAttributes with HTMLAttributes&lt;HTMLSpanElement&gt; ([51dcd89](https://github.com/sig-nine/era-ui/commit/51dcd893fec1069b9d7f24458d2664fcdf1b1bae))
293
+ - **ui:** drop duplicate Mode type re-export from barrel ([5dae1c4](https://github.com/sig-nine/era-ui/commit/5dae1c4cec5a5a26056b2ca174f8dfb87b7a5ec7))
294
+ - **video-player:** latch scrubbing on pointerdown, not onValueChange ([9f3311c](https://github.com/sig-nine/era-ui/commit/9f3311c1413e12ff9a1abd65f0a319c1cebd7ea2))
295
+ - **video-player:** latch scrubbing on pointerdown, not onValueChange ([#35](https://github.com/sig-nine/era-ui/issues/35)) ([7cf642b](https://github.com/sig-nine/era-ui/commit/7cf642bbfffee9d290f7e2cee0e87d0c58487b9f))
296
+
297
+ ## [0.9.3](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.2...era-ui-v0.9.3) (2026-04-24)
298
+
299
+ ### Features
300
+
301
+ - **video-player:** full vidstack coverage — icons, state, scrub preview ([9ceeb88](https://github.com/sig-nine/era-ui/commit/9ceeb882b9a1c15242e4e002278f2da7b3b18a5d))
302
+
303
+ ### Bug Fixes
304
+
305
+ - **video-player:** stop seek-bar tug-of-war, inline layout, fix speed menu ([9ad2fce](https://github.com/sig-nine/era-ui/commit/9ad2fce74ae717b8d1f9caeec05dc85032ea6cf1))
306
+ - **video-player:** stop seek-bar tug-of-war, inline layout, fix speed menu ([#29](https://github.com/sig-nine/era-ui/issues/29)) ([0a86af0](https://github.com/sig-nine/era-ui/commit/0a86af007a2ef3f37f9edd88d8b2bc572c92f81f))
307
+ - **video-player:** wrap controls in Tooltip.Provider ([0cb393c](https://github.com/sig-nine/era-ui/commit/0cb393cea6fa9ea3c17346a099c71739caf56aef))
308
+ - **video-player:** wrap controls in Tooltip.Provider ([#28](https://github.com/sig-nine/era-ui/issues/28)) ([fe78902](https://github.com/sig-nine/era-ui/commit/fe78902a715a2dd4355ffe5956d760f4e1a91554))
309
+
310
+ ## [0.9.2](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.1...era-ui-v0.9.2) (2026-04-23)
311
+
312
+ ### Features
313
+
314
+ - **video-player:** full vidstack feature surface with token-driven styling ([83ab6e4](https://github.com/sig-nine/era-ui/commit/83ab6e44a6cd42734d57b8b3c1d5a8010504741d))
315
+ - **video-player:** full vidstack feature surface, token-driven styling ([#22](https://github.com/sig-nine/era-ui/issues/22)) ([d9f0c3b](https://github.com/sig-nine/era-ui/commit/d9f0c3b03328e2185cb07ffea74dfad8bdf3d6c8))
316
+
317
+ ## [0.9.1](https://github.com/sig-nine/era-ui/compare/era-ui-v0.9.0...era-ui-v0.9.1) (2026-04-23)
318
+
319
+ ### Features
320
+
321
+ - **video-player:** vidstack wrapper with overlay controls ([185dee5](https://github.com/sig-nine/era-ui/commit/185dee5378862e96a5cf854e4a8497ab6ed759e8))
322
+ - **video-player:** YouTube-style overlay controls ([46a7ccf](https://github.com/sig-nine/era-ui/commit/46a7ccfb811e0fdfb4725dbf91f42fad0515487b))
323
+ - wrap vidstack in video-player component ([1bb1f1e](https://github.com/sig-nine/era-ui/commit/1bb1f1ea706454b8dca24e058a3456b6da839d39))
324
+
325
+ ### Bug Fixes
326
+
327
+ - dedupe video-player registry entry ([14ef616](https://github.com/sig-nine/era-ui/commit/14ef6162f87885afedccd95f3c062826828207f6))
328
+ - drop .t-controls class in favor of element selector ([dac459c](https://github.com/sig-nine/era-ui/commit/dac459c34c94c6c21bc444b211619a3a982bd45c))
329
+
330
+ ## [0.9.0](https://github.com/sig-nine/era-ui/compare/era-ui-v0.8.0...era-ui-v0.9.0) (2026-04-23)
331
+
332
+ ### ⚠ BREAKING CHANGES
333
+
334
+ - All legacy CSS custom-property aliases removed. Consumers of these token names must migrate to the canonical names listed above.
335
+ - Button tone="danger" removed. Use tone="destructive".
336
+ - Button size=\"xxs\" removed. Use size=\"icon\" or size=\"xs\".
337
+ - Provider export removed. Replace <Provider mode="x" surface="y"> with <div data-mode="x" data-surface="y">.
338
+
339
+ ### Features
340
+
341
+ - add 16 new components, Label, add-component skill, fix menubar crash ([255a759](https://github.com/sig-nine/era-ui/commit/255a7591f8b320827e2f1d58a66ee33d500c4b6c))
342
+ - add 5 new components, remove CSS side-effect import ([9edc4fd](https://github.com/sig-nine/era-ui/commit/9edc4fd97724b24212142216e2cd6fa8282a3b2c))
343
+ - add 6 new components, token audit fixes, overflow-hidden for rounded containers ([fdac16c](https://github.com/sig-nine/era-ui/commit/fdac16cb8f56104e2ec23d1f2d33bac20069357d))
344
+ - add background/foreground theme tokens, clean hover values ([b3afe6a](https://github.com/sig-nine/era-ui/commit/b3afe6aa08c9a095b91ef984e8d90dacb751dbae))
345
+ - add density mode system, surface styles, and docs overhaul ([aacf777](https://github.com/sig-nine/era-ui/commit/aacf77710a58a18538684a51be6a36f32f880253))
346
+ - add highlight token, tune hover values ([abf6898](https://github.com/sig-nine/era-ui/commit/abf6898e6194da8a2974d697106758605b90353b))
347
+ - add Input, Switch components; rebuild Accordion, Toggle for consistency ([a7d1fbb](https://github.com/sig-nine/era-ui/commit/a7d1fbb38f2054237d7fe13620f726fdb57d2017))
348
+ - add missing bits-ui primitive wrappers ([53f44d5](https://github.com/sig-nine/era-ui/commit/53f44d5f21ce365145fc648f3afc22673e833587))
349
+ - badge, chip, code-block, kv, skeleton components + dense h-6 + rename slop to spacious ([e60e94b](https://github.com/sig-nine/era-ui/commit/e60e94bb5bda816c405877bd131aac5449e564ce))
350
+ - **Button:** add link variant ([3edb4f4](https://github.com/sig-nine/era-ui/commit/3edb4f42484c3d81aada90b1292f8476305b1f36))
351
+ - **dev:** scalable audit framework ([1d42e19](https://github.com/sig-nine/era-ui/commit/1d42e19dda08f0fbdf75d399593705884f4aeeb2))
352
+ - **file-upload:** add input component with drag-and-drop ([5d64af7](https://github.com/sig-nine/era-ui/commit/5d64af7ddfe24067109bda8d5dd680f2e659ab1a))
353
+ - font-agnostic library, :root token defaults, no global bleed ([1eaeff3](https://github.com/sig-nine/era-ui/commit/1eaeff3d93357ff917412da32512cf0c44877f39))
354
+ - introduce --era-inset-{sm,md,lg} for text-aware content framing ([9758820](https://github.com/sig-nine/era-ui/commit/97588206d860001b600ba7f33c33305bcbafb735))
355
+ - linear tier ladder + icon inset system ([661e86a](https://github.com/sig-nine/era-ui/commit/661e86a2a84c32b214b30e1cae597faf56bc1bce))
356
+ - **Mode:** scoped system-axis override component ([cfdbb10](https://github.com/sig-nine/era-ui/commit/cfdbb10230a7f8b2c29149840c49a9c47481f83b))
357
+ - **quickstart:** art-piece hero with 3D tier tower ([89e0047](https://github.com/sig-nine/era-ui/commit/89e004743d8326335733dcde044fd7f36ef0c11b))
358
+ - refine Switch sizing, add dark/light toggle to top bar ([c268114](https://github.com/sig-nine/era-ui/commit/c26811436b46c9d84436b19f6f42f8a9f7d30733))
359
+ - remove Provider component, use native data attributes ([95f2a0f](https://github.com/sig-nine/era-ui/commit/95f2a0f9ed5a93527adde4f552bdb2549e08326d))
360
+ - **Select:** add Select.Value with chip rendering for multi-select ([6914860](https://github.com/sig-nine/era-ui/commit/6914860a0824616a46e0f5106abcbf2d866cc94d))
361
+ - semantic color tokens, CSS dedup, quickstart page, accent button ([a721989](https://github.com/sig-nine/era-ui/commit/a7219892ec0d8de950ec5da7c56a4ca5e506a42f))
362
+ - **sidebar:** badge pills and alias-aware filter ([8f2b9e8](https://github.com/sig-nine/era-ui/commit/8f2b9e8a159218bfd2135ebf7172d6ab562504d0))
363
+ - Tailwind v4 modernization, pre-compiled CSS bundle, --era-divider-faded token ([58020b2](https://github.com/sig-nine/era-ui/commit/58020b2fe99ac338699a35bd56c19b32e30171c3))
364
+ - **wrappers:** forward variant prop on Dialog/AlertDialog/Popover buttons ([8a13af5](https://github.com/sig-nine/era-ui/commit/8a13af5191c04136eca8fe73cbbecb024f675449))
365
+
366
+ ### Bug Fixes
367
+
368
+ - add gap-(--era-inset-md) to text+chevron triggers ([0023e59](https://github.com/sig-nine/era-ui/commit/0023e592d8db81006fa1d8a9e2b2afc8ce7d7425))
369
+ - align ButtonGroup gap with --era-inset-sm ([271253f](https://github.com/sig-nine/era-ui/commit/271253f98d53b8c7fbef7dd2bd16463041b67f3c))
370
+ - apply icon-inset-md to all trigger components ([9a0be3e](https://github.com/sig-nine/era-ui/commit/9a0be3e079692ed72cd25f9f6b58652fc1e32135))
371
+ - badge and KV — replace legacy px calc with --era-inset-sm ([56e50d7](https://github.com/sig-nine/era-ui/commit/56e50d79118f63ae1336d04dd5bea0f91ca8622f))
372
+ - brighter hover tokens with clean OKLCH values ([da81384](https://github.com/sig-nine/era-ui/commit/da813847b9b10e0ad7a617027f1dd74bde254dd3))
373
+ - **Button:** link variant hover only adds underline, no color shift ([7285706](https://github.com/sig-nine/era-ui/commit/728570651f78729624467b6a3a77eada659d756b))
374
+ - **Button:** tighten link variant underline offset from 4 to 2 ([3ced2f4](https://github.com/sig-nine/era-ui/commit/3ced2f463634c3f4940daca537dd4da1131f999a))
375
+ - **Chip:** stop pointerdown on dismiss button so chips work inside triggers ([a94bb12](https://github.com/sig-nine/era-ui/commit/a94bb1206066c10c7bdf7564accbd69c396a5ce7))
376
+ - **Command:** use --era-gap tokens instead of --era-sp / arbitrary 3px ([27c1fda](https://github.com/sig-nine/era-ui/commit/27c1fda9ff3b5c7600a6fd07f3bbe35f4b55b49f))
377
+ - continuous dropdowns in slop mode, lighter hover, remove leading-none ([4a65b56](https://github.com/sig-nine/era-ui/commit/4a65b564a9ddc7199d18a1dfb2ac32354b9d079a))
378
+ - date picker trigger sizing — drop sm-tier wrapper ([3b61aea](https://github.com/sig-nine/era-ui/commit/3b61aea92ffdf474c5917d8929b8b125d88056c3))
379
+ - derive radii from tier heights for true concentricity ([fb4eec5](https://github.com/sig-nine/era-ui/commit/fb4eec5e8f542590b46e5f95de168a3c56f115d7))
380
+ - **docs:** drop bg-hover accent spoof on dialog Confirm/Save buttons ([08cb0e6](https://github.com/sig-nine/era-ui/commit/08cb0e65ded0eb2f0f245ab86aea7a0649a35516))
381
+ - **docs:** drop fake container chrome from button-group and tabs demos ([3e405b9](https://github.com/sig-nine/era-ui/commit/3e405b99a305752d356a61ecae5a71ba0f318ed5))
382
+ - **docs:** tooltip demo uses real Button via Trigger child snippet ([550c6a3](https://github.com/sig-nine/era-ui/commit/550c6a3bfe9cfa94170416370a1a7b4b9c506804))
383
+ - remove [@source](https://github.com/source) from distributed CSS to prevent consumer FOUC ([ed36450](https://github.com/sig-nine/era-ui/commit/ed36450420b98af973c468df3357895ac063b056))
384
+ - restore date picker icon hover area with asymmetric input padding ([f6e57fe](https://github.com/sig-nine/era-ui/commit/f6e57fecc689979fbb5f1723ddee1a228ad86ab5))
385
+ - **sidebar:** wrap Command items in Group and tighten filter ([53332d8](https://github.com/sig-nine/era-ui/commit/53332d80a038f4965937730e8a16e03c2a632f7d))
386
+ - SSR-safe Provider eliminates FOUC, restore [@source](https://github.com/source) for consumers ([98d2d63](https://github.com/sig-nine/era-ui/commit/98d2d63d4ba3e0f5683df240e1e1e80ac5373ab9))
387
+ - SSR-safe Provider, remove [@source](https://github.com/source) from distributed CSS ([b18dbe4](https://github.com/sig-nine/era-ui/commit/b18dbe4f8a04146e675b2317bc13105dd12e6a8f))
388
+ - unify roundness across standalone large containers ([ebec16d](https://github.com/sig-nine/era-ui/commit/ebec16d112c306ee3ff059ccf6bd0a187f4d0d48))
389
+
390
+ ### Performance Improvements
391
+
392
+ - **registry:** precompute search blob for matchEntry ([3e0933a](https://github.com/sig-nine/era-ui/commit/3e0933ad06deaef41e95681a0683345b5e04f844))
393
+
394
+ ### Code Refactoring
395
+
396
+ - complete legacy token migration, drop alias block ([6d195d6](https://github.com/sig-nine/era-ui/commit/6d195d6f1a9c3cb30998d4b3c75a91a5924cab95))
397
+ - unify tone naming, tokenize hardcoded sizes, polish menu a11y ([f6c4c99](https://github.com/sig-nine/era-ui/commit/f6c4c99eae8efdcbb345935654290bd8bf1a7832))