@signal9/era-ui 30.8.0 → 31.0.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 (83) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/ai/conversations/conversations-item.svelte +1 -1
  3. package/dist/ai/plan/plan-header.svelte +1 -1
  4. package/dist/ai/prompt-input/prompt-input-attachments.svelte +2 -6
  5. package/dist/ai/swarm/swarm-node.svelte +1 -1
  6. package/dist/ai/todo/todo-header.svelte +1 -1
  7. package/dist/ai/todo/todo-item.svelte +1 -1
  8. package/dist/ai/tool/tool-chip.svelte +1 -1
  9. package/dist/ai/web-preview/web-preview.svelte +1 -1
  10. package/dist/dev/audit/audits/wall-is-isotropic.js +1 -1
  11. package/dist/docs/css-utilities.js +7 -3
  12. package/dist/era-ui.css +1 -1
  13. package/dist/generated-docs/badge.md +1 -1
  14. package/dist/generated-docs/bar.md +22 -4
  15. package/dist/generated-docs/button.md +38 -4
  16. package/dist/generated-docs/card.md +35 -5
  17. package/dist/generated-docs/chip.md +16 -0
  18. package/dist/generated-docs/llms-full.txt +310 -49
  19. package/dist/generated-docs/llms.txt +4 -3
  20. package/dist/generated-docs/manifest.json +45 -21
  21. package/dist/generated-docs/meter.md +79 -1
  22. package/dist/generated-docs/nav.md +8 -1
  23. package/dist/generated-docs/separator.md +18 -0
  24. package/dist/generated-docs/utilities.json +32 -9
  25. package/dist/generated-docs/utilities.md +89 -30
  26. package/dist/styles/density.css +15 -25
  27. package/dist/styles/index.css +32 -27
  28. package/dist/ui/accordion/accordion-trigger.svelte +1 -1
  29. package/dist/ui/badge/badge.svelte +8 -2
  30. package/dist/ui/badge/badge.svelte.d.ts +1 -1
  31. package/dist/ui/bar/bar.svelte +95 -26
  32. package/dist/ui/bar/bar.svelte.d.ts +71 -31
  33. package/dist/ui/button/button.svelte +5 -0
  34. package/dist/ui/button/button.svelte.d.ts +2 -0
  35. package/dist/ui/button/variants.js +4 -9
  36. package/dist/ui/calendar/calendar-day.svelte +1 -1
  37. package/dist/ui/card/card.svelte +22 -9
  38. package/dist/ui/card/card.svelte.d.ts +19 -7
  39. package/dist/ui/chip/chip.svelte +5 -2
  40. package/dist/ui/chip/chip.svelte.d.ts +6 -6
  41. package/dist/ui/collapsible/collapsible-trigger.svelte +1 -1
  42. package/dist/ui/combobox/combobox-trigger.svelte +1 -1
  43. package/dist/ui/command/command-item.svelte +1 -1
  44. package/dist/ui/command/command-link-item.svelte +1 -1
  45. package/dist/ui/command/command-root.svelte +3 -5
  46. package/dist/ui/date-field/date-field-segment.svelte +1 -1
  47. package/dist/ui/date-picker/date-picker-day.svelte +1 -1
  48. package/dist/ui/date-picker/date-picker-segment.svelte +1 -1
  49. package/dist/ui/date-picker/date-picker-trigger.svelte +1 -1
  50. package/dist/ui/date-range-field/date-range-field-segment.svelte +1 -1
  51. package/dist/ui/date-range-picker/date-range-picker-day.svelte +1 -1
  52. package/dist/ui/date-range-picker/date-range-picker-segment.svelte +1 -1
  53. package/dist/ui/date-range-picker/date-range-picker-trigger.svelte +1 -1
  54. package/dist/ui/dialog/dialog-content.svelte +19 -1
  55. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +1 -1
  56. package/dist/ui/file-upload/file-upload.svelte +1 -1
  57. package/dist/ui/input/variants.d.ts +6 -6
  58. package/dist/ui/input/variants.js +2 -2
  59. package/dist/ui/kv/kv.svelte +1 -1
  60. package/dist/ui/menubar/menubar-root.svelte +1 -1
  61. package/dist/ui/menubar/menubar-trigger.svelte +1 -1
  62. package/dist/ui/nav/nav-bar.svelte +9 -4
  63. package/dist/ui/nav/nav-bar.svelte.d.ts +2 -1
  64. package/dist/ui/pane/pane-root.svelte +3 -12
  65. package/dist/ui/pane/pane-tab.svelte +1 -1
  66. package/dist/ui/select/select-trigger.svelte +1 -1
  67. package/dist/ui/slider/slider-thumb.svelte +1 -1
  68. package/dist/ui/step/step-summary.svelte +1 -1
  69. package/dist/ui/switch/switch.svelte +2 -2
  70. package/dist/ui/time-field/time-field-segment.svelte +1 -1
  71. package/dist/ui/time-range-field/time-range-field-segment.svelte +1 -1
  72. package/dist/ui/timeline/timeline-step.svelte +1 -1
  73. package/dist/ui/toggle-group/toggle-group-item.svelte +2 -2
  74. package/dist/ui/toggle-group/toggle-group-item.svelte.d.ts +6 -6
  75. package/dist/ui/toggle-group/toggle-group-root.svelte +1 -2
  76. package/dist/ui/toggle-group/toggle-group-root.svelte.d.ts +3 -3
  77. package/dist/ui/tooltip/tooltip-content.svelte +1 -1
  78. package/dist/ui/tree/tree-item.svelte +1 -1
  79. package/dist/ui/video-player/video-player.svelte +1 -1
  80. package/dist/utils/tw-merge-config.d.ts +3 -0
  81. package/dist/utils/tw-merge-config.js +4 -0
  82. package/package.json +4 -3
  83. package/skill/SKILL.md +17 -17
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [31.0.0](https://github.com/sig-nine/era-ui/compare/v30.8.0...v31.0.0) (2026-08-21)
2
+
3
+ ### ⚠ BREAKING CHANGES
4
+
5
+ * **geometry:** Bounded chrome now uses tier-* utilities; rounded-row and --era-container-rd are removed. Bar content no longer accepts tier and must name the actual inner tier when overriding its canonical default. Corner-mode changes now snap because intermediate radius scaling is not concentric.
6
+
7
+ ### Bug Fixes
8
+
9
+ * **card:** sink content with the bevel press ([7dbc709](https://github.com/sig-nine/era-ui/commit/7dbc709ff723c645cc92e586f98fb4c9218c8c1c))
10
+
11
+ ### Code Refactoring
12
+
13
+ * **geometry:** make tier concentricity structural ([e3d2c70](https://github.com/sig-nine/era-ui/commit/e3d2c7012039fb130163a1f4cfc39b745df07261))
14
+
1
15
  ## [30.8.0](https://github.com/sig-nine/era-ui/compare/v30.7.0...v30.8.0) (2026-08-16)
2
16
 
3
17
  ### Features
@@ -144,7 +144,7 @@
144
144
  // a fast pass down the list into a smear of half-lit rows. This row was the
145
145
  // only one that animated. It also picks up the material half of the
146
146
  // highlight the others carry, so hover reads on bevel and glass too.
147
- 'group/row relative flex h-control items-center gap-gutter rounded-control pr-pill-inset-control pl-inset-control text-body',
147
+ 'group/row relative flex tier-control items-center gap-gutter pr-pill-inset-control pl-inset-control text-body',
148
148
  active
149
149
  ? 'bg-hover text-bright'
150
150
  : 'text-fg hover:bg-highlight hover:shadow-highlight has-[[data-rail]:hover]:bg-transparent has-[[data-rail]:hover]:shadow-none',
@@ -13,7 +13,7 @@
13
13
 
14
14
  <Collapsible.Trigger
15
15
  class={cn(
16
- 'flex h-control w-full era-interactive cursor-pointer items-center gap-gutter rounded-control px-inset-control text-body text-bright hover:bg-highlight',
16
+ 'flex tier-control w-full era-interactive cursor-pointer items-center gap-gutter px-inset-control text-body text-bright hover:bg-highlight',
17
17
  className
18
18
  )}
19
19
  >
@@ -13,16 +13,12 @@
13
13
  <div class="group/att relative">
14
14
  {#if a.previewUrl}
15
15
  <!-- Density-scaled lg-tier tile with its own tier's radius. -->
16
- <img
17
- src={a.previewUrl}
18
- alt={a.filename}
19
- class="size-bar rounded-bar object-cover shadow-sm"
20
- />
16
+ <img src={a.previewUrl} alt={a.filename} class="tier-bar w-bar object-cover shadow-sm" />
21
17
  {:else}
22
18
  <!-- md control geometry, like a Button with an icon: wall inset and
23
19
  icon gap both --era-inset-control, ink centered by era-text-trim. -->
24
20
  <div
25
- class="flex h-control items-center gap-inset-control rounded-control bg-well px-inset-control text-body leading-none text-muted shadow-sm"
21
+ class="flex tier-control items-center gap-inset-control bg-well px-inset-control text-body leading-none text-muted shadow-sm"
26
22
  >
27
23
  <Paperclip class="size-icon shrink-0" />
28
24
  <span class="max-w-32 truncate">{a.filename}</span>
@@ -160,7 +160,7 @@
160
160
  highlight instantly so a fast pass down the tree doesn't smear. -->
161
161
  <div
162
162
  class={cn(
163
- 'flex h-control items-center gap-gutter rounded-control pl-inset-control text-body leading-none',
163
+ 'flex tier-control items-center gap-gutter pl-inset-control text-body leading-none',
164
164
  hasActions ? 'pr-pill-inset-control' : 'pr-inset-control',
165
165
  (hasChildren || hasDetail) && 'cursor-pointer',
166
166
  active ? 'bg-hover text-bright' : 'text-fg hover:bg-highlight hover:shadow-highlight',
@@ -26,7 +26,7 @@
26
26
  -->
27
27
  <Collapsible.Trigger
28
28
  class={cn(
29
- 'group/todo flex h-control w-full era-interactive cursor-pointer items-center gap-gutter rounded-control px-inset-control text-body hover:bg-highlight',
29
+ 'group/todo flex tier-control w-full era-interactive cursor-pointer items-center gap-gutter px-inset-control text-body hover:bg-highlight',
30
30
  className
31
31
  )}
32
32
  >
@@ -74,7 +74,7 @@
74
74
  data-status={status}
75
75
  aria-current={status === 'in_progress' ? 'step' : undefined}
76
76
  class={cn(
77
- 'flex h-control items-center gap-inset-control rounded-control px-inset-control text-body',
77
+ 'flex tier-control items-center gap-inset-control px-inset-control text-body',
78
78
  tone.text,
79
79
  className
80
80
  )}
@@ -47,7 +47,7 @@
47
47
  data-status={status}
48
48
  {onclick}
49
49
  class={cn(
50
- 'inline-flex h-pill max-w-full min-w-0 shrink-0 era-interactive cursor-pointer items-center gap-gutter rounded-pill px-pill text-body leading-none text-muted transition-colors duration-base ease-base hover:bg-highlight hover:text-fg',
50
+ 'inline-flex tier-pill max-w-full min-w-0 shrink-0 era-interactive cursor-pointer items-center gap-gutter px-pill text-body leading-none text-muted transition-colors duration-base ease-base hover:bg-highlight hover:text-fg',
51
51
  active && 'bg-fill text-fg',
52
52
  className
53
53
  )}
@@ -16,7 +16,7 @@
16
16
  </script>
17
17
 
18
18
  <div class={cn('flex min-h-0 flex-col overflow-hidden rounded-bar bg-well shadow-lg', className)}>
19
- <Bar size="control" class="shrink-0 gap-gutter rounded-none">
19
+ <Bar size="control" topology="docked" class="shrink-0 gap-gutter rounded-none">
20
20
  <Button icon size="chip" aria-label="Reload" onclick={() => (nonce += 1)}>
21
21
  <RotateCw class="size-icon" />
22
22
  </Button>
@@ -11,7 +11,7 @@ import { TOL, flexChildren, isHorizontalFlex, paintsChrome, tiers } from './_hel
11
11
  * A bar that pads 4px horizontally, gaps 4px horizontally, and centres its
12
12
  * children to 1px vertically passes BOTH — the first sees 4 against 4, the
13
13
  * second sees equal top and bottom padding — and is visibly wrong. Two shipped
14
- * this way. Bar's content="tier" used one token for all three sizes on the
14
+ * this way. Bar's old implicit content tier used one token for all three sizes on the
15
15
  * reasoning that chip⊃icon, control⊃chip and bar⊃control all equal sp/2, which
16
16
  * is true for two of them (chip is the rung that is not a clean sp multiple, so
17
17
  * the difference cancels for the pairs that span it and survives for the pair
@@ -225,7 +225,7 @@ export function parseUtilities(sources) {
225
225
  .flatMap(([file, source]) => [...parseFile(file, source), ...parseTheme(file, source)]);
226
226
  }
227
227
  const INTRO = [
228
- "era's styling API is pure class names — write `h-control rounded-control px-gutter shadow`,",
228
+ "era's styling API is pure class names — write `tier-control px-gutter shadow`,",
229
229
  'never the `h-(--era-h-control)` var-class spelling. Everything below rides along',
230
230
  'with the stylesheet and needs no import:',
231
231
  '',
@@ -234,7 +234,7 @@ const INTRO = [
234
234
  '```',
235
235
  '',
236
236
  '```svelte',
237
- '<button class="h-control rounded-control px-inset-control shadow text-body">era styled</button>',
237
+ '<button class="tier-control px-inset-control shadow text-body">era styled</button>',
238
238
  '```',
239
239
  '',
240
240
  'Alongside the `@utility` classes referenced below, era registers named theme',
@@ -244,6 +244,7 @@ const INTRO = [
244
244
  '',
245
245
  '| Stock-looking class | What it resolves to |',
246
246
  '|---|---|',
247
+ '| `tier-icon/pill/chip/control/bar` | indivisible bounded height + concentric radius |',
247
248
  '| `rounded-icon/pill/chip/control/bar` | the concentric radius ladder (collapses on `data-corners="square"`) |',
248
249
  '| `rounded-menu-item` | menu-row radius, concentric inside a `rounded-control` panel |',
249
250
  '| `shadow` / `shadow-lg` | resting control edge / floating panel chrome, per surface |',
@@ -269,10 +270,13 @@ const INTRO = [
269
270
  '`inset-*` and concentric `*-inset-*` insets, `glyph-*`) are registered as a',
270
271
  'Tailwind spacing scale, so every prefix derives automatically: `p-`, `px-`,',
271
272
  '`pt-`, `mt-`, `gap-`, `gap-x-`, `inset-`, `translate-`, and the rest. The TIER',
272
- 'names (`icon`, `pill`, `chip`, `control`, `bar`) are heights, not spacing, so',
273
+ 'names (`icon`, `pill`, `chip`, `control`, `bar`) are dimensions, not spacing, so',
273
274
  'they are registered per prefix instead — `h-`, `w-`, `min-h-`, `min-w-` and',
274
275
  '`size-` — and the two vocabularies deliberately share no word. Putting a tier',
275
276
  'in the spacing scale would silently make `px-control` mean 24px of padding.',
277
+ 'For chrome, use `tier-T`, which binds `h-T` and `rounded-T`; use the separate',
278
+ 'dimension/radius names only for width, minimums, unbounded surfaces, or',
279
+ 'asymmetric/docked corners.',
276
280
  '',
277
281
  'The var form (`h-(--era-h-control)`) still works and is the escape hatch for a',
278
282
  'token with no registered name — `--era-sp`, the press-sink offsets, anything',