@signal9/era-ui 7.0.0 → 9.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 (226) hide show
  1. package/dist/ai/artifact/artifact-close.svelte +1 -1
  2. package/dist/ai/artifact/artifact-content.svelte +1 -1
  3. package/dist/ai/artifact/artifact-header.svelte +1 -1
  4. package/dist/ai/artifact/artifact.svelte +1 -1
  5. package/dist/ai/chain-of-thought/chain-of-thought-step.svelte +1 -1
  6. package/dist/ai/chain-of-thought/chain-of-thought.svelte +1 -1
  7. package/dist/ai/checkpoint.svelte +1 -1
  8. package/dist/ai/confirmation/confirmation-args.svelte +2 -2
  9. package/dist/ai/confirmation/confirmation.svelte +4 -4
  10. package/dist/ai/context/context.svelte +1 -1
  11. package/dist/ai/conversation/conversation-content.svelte +1 -1
  12. package/dist/ai/conversation/conversation-empty-state.svelte +1 -1
  13. package/dist/ai/conversation/conversation-scroll-button.svelte +2 -2
  14. package/dist/ai/conversations/conversations-group.svelte +1 -1
  15. package/dist/ai/conversations/conversations-item.svelte +7 -7
  16. package/dist/ai/error-panel/error-panel.svelte +4 -4
  17. package/dist/ai/image.svelte +1 -1
  18. package/dist/ai/inline-citation/inline-citation.svelte +2 -2
  19. package/dist/ai/loader.svelte +1 -1
  20. package/dist/ai/message/message-branch-selector.svelte +3 -3
  21. package/dist/ai/message/message-content.svelte +1 -1
  22. package/dist/ai/message/message-usage.svelte +4 -4
  23. package/dist/ai/model-selector/model-selector.svelte +1 -1
  24. package/dist/ai/open-in-chat/open-in-chat.svelte +2 -2
  25. package/dist/ai/plan/plan-content.svelte +1 -1
  26. package/dist/ai/plan/plan-header.svelte +2 -2
  27. package/dist/ai/plan/plan.svelte +1 -1
  28. package/dist/ai/prompt-input/prompt-input-add-attachments.svelte +1 -1
  29. package/dist/ai/prompt-input/prompt-input-attachments.svelte +5 -5
  30. package/dist/ai/prompt-input/prompt-input-submit.svelte +3 -3
  31. package/dist/ai/prompt-input/prompt-input-textarea.svelte +3 -3
  32. package/dist/ai/prompt-input/prompt-input.svelte +1 -1
  33. package/dist/ai/queue/queue-item.svelte +1 -1
  34. package/dist/ai/queue/queue.svelte +1 -1
  35. package/dist/ai/reasoning/reasoning-trigger.svelte +1 -1
  36. package/dist/ai/response/response.svelte +2 -2
  37. package/dist/ai/run-status/run-status.svelte +5 -5
  38. package/dist/ai/runtime-feed/runtime-feed-item.svelte +1 -1
  39. package/dist/ai/sources/source.svelte +1 -1
  40. package/dist/ai/sources/sources-trigger.svelte +1 -1
  41. package/dist/ai/structured-value/structured-value.svelte +1 -1
  42. package/dist/ai/suggestion/suggestion.svelte +2 -2
  43. package/dist/ai/swarm/swarm-agent.svelte +1 -1
  44. package/dist/ai/swarm/swarm-artifact.svelte +1 -1
  45. package/dist/ai/swarm/swarm-barrier.svelte +1 -1
  46. package/dist/ai/swarm/swarm-barriers.svelte +1 -1
  47. package/dist/ai/swarm/swarm-counts.svelte +1 -1
  48. package/dist/ai/swarm/swarm-footer.svelte +1 -1
  49. package/dist/ai/swarm/swarm-grid.svelte +2 -2
  50. package/dist/ai/swarm/swarm-header.svelte +1 -1
  51. package/dist/ai/swarm/swarm-node.svelte +7 -7
  52. package/dist/ai/swarm/swarm-role.svelte +1 -1
  53. package/dist/ai/swarm/swarm-root.svelte +1 -1
  54. package/dist/ai/swarm/swarm-sandbox.svelte +3 -3
  55. package/dist/ai/swarm/swarm-tree.svelte +1 -1
  56. package/dist/ai/task/task-content.svelte +1 -1
  57. package/dist/ai/task/task-trigger.svelte +1 -1
  58. package/dist/ai/tool/tool-chip.svelte +2 -2
  59. package/dist/ai/tool/tool-exec.svelte +3 -3
  60. package/dist/ai/tool/tool-header.svelte +1 -1
  61. package/dist/ai/web-preview/web-preview.svelte +3 -3
  62. package/dist/ai/workflow/canvas.svelte +1 -1
  63. package/dist/ai/workflow/node.svelte +3 -3
  64. package/dist/apps/llm-shell/llm-shell.svelte +7 -7
  65. package/dist/apps/notes/editor/slash-menu.svelte +7 -5
  66. package/dist/apps/notes/note-editor.svelte +7 -364
  67. package/dist/apps/notes/note-editor.svelte.d.ts +1 -0
  68. package/dist/apps/notes/notes.svelte +9 -9
  69. package/dist/dev/audit/audits/_helpers.js +1 -1
  70. package/dist/dev/audit/audits/resting-gap.js +1 -1
  71. package/dist/dev/audit/audits/single-glyph-square.js +2 -2
  72. package/dist/dev/audit-overlay.svelte +7 -7
  73. package/dist/dev/measure.d.ts +1 -1
  74. package/dist/dev/measure.js +1 -1
  75. package/dist/docs/badge.md +1 -1
  76. package/dist/docs/css-utilities.d.ts +1 -1
  77. package/dist/docs/css-utilities.js +8 -8
  78. package/dist/docs/llms-txt.js +1 -1
  79. package/dist/era-ui.css +1 -1
  80. package/dist/generated-docs/badge.md +1 -1
  81. package/dist/generated-docs/bar.md +2 -2
  82. package/dist/generated-docs/chip.md +1 -1
  83. package/dist/generated-docs/input.md +1 -1
  84. package/dist/generated-docs/llms-full.txt +100 -120
  85. package/dist/generated-docs/llms.txt +12 -13
  86. package/dist/generated-docs/manifest.json +52 -65
  87. package/dist/generated-docs/utilities.json +45 -57
  88. package/dist/generated-docs/utilities.md +87 -106
  89. package/dist/os/notification-center.svelte +6 -6
  90. package/dist/os/pane.svelte +7 -5
  91. package/dist/os/taskbar.svelte +10 -10
  92. package/dist/os/toast.svelte +3 -3
  93. package/dist/os/toaster.svelte +1 -1
  94. package/dist/styles/density.css +93 -67
  95. package/dist/styles/index.css +89 -101
  96. package/dist/styles/prose.css +384 -0
  97. package/dist/styles/surfaces/base.css +3 -3
  98. package/dist/styles/surfaces/bevel.css +2 -2
  99. package/dist/ui/accordion/accordion-trigger.svelte +2 -2
  100. package/dist/ui/alert-dialog/alert-dialog-content.svelte +1 -1
  101. package/dist/ui/aspect-ratio/aspect-ratio.svelte +1 -1
  102. package/dist/ui/avatar/avatar-root.svelte +1 -1
  103. package/dist/ui/badge/badge.svelte +1 -1
  104. package/dist/ui/badge/badge.svelte.d.ts +1 -1
  105. package/dist/ui/bar/bar.svelte +23 -15
  106. package/dist/ui/bar/bar.svelte.d.ts +26 -26
  107. package/dist/ui/button/button.svelte +1 -1
  108. package/dist/ui/button/variants.js +18 -18
  109. package/dist/ui/button-group/button-group.svelte +2 -2
  110. package/dist/ui/calendar/calendar-day.svelte +1 -1
  111. package/dist/ui/calendar/calendar-head-cell.svelte +1 -1
  112. package/dist/ui/calendar/calendar-header.svelte +1 -1
  113. package/dist/ui/calendar/calendar-next-button.svelte +1 -1
  114. package/dist/ui/calendar/calendar-prev-button.svelte +1 -1
  115. package/dist/ui/card/card.svelte +5 -5
  116. package/dist/ui/card/card.svelte.d.ts +4 -4
  117. package/dist/ui/checkbox/checkbox.svelte +3 -3
  118. package/dist/ui/chip/chip.svelte +14 -10
  119. package/dist/ui/chip/chip.svelte.d.ts +7 -7
  120. package/dist/ui/code-block/code-block.svelte +6 -6
  121. package/dist/ui/collapsible/collapsible-trigger.svelte +1 -1
  122. package/dist/ui/combobox/combobox-content.svelte +1 -1
  123. package/dist/ui/combobox/combobox-empty.svelte +4 -1
  124. package/dist/ui/combobox/combobox-group-heading.svelte +4 -1
  125. package/dist/ui/combobox/combobox-item.svelte +1 -1
  126. package/dist/ui/combobox/combobox-trigger.svelte +2 -2
  127. package/dist/ui/command/command-group-heading.svelte +4 -1
  128. package/dist/ui/command/command-item.svelte +1 -1
  129. package/dist/ui/command/command-link-item.svelte +1 -1
  130. package/dist/ui/command/command-root.svelte +1 -1
  131. package/dist/ui/command-bar/command-bar.svelte +16 -12
  132. package/dist/ui/context-menu/context-menu-checkbox-item.svelte +1 -1
  133. package/dist/ui/context-menu/context-menu-content.svelte +1 -1
  134. package/dist/ui/context-menu/context-menu-group-heading.svelte +4 -1
  135. package/dist/ui/context-menu/context-menu-item.svelte +1 -1
  136. package/dist/ui/context-menu/context-menu-radio-item.svelte +1 -1
  137. package/dist/ui/context-menu/context-menu-sub-content.svelte +1 -1
  138. package/dist/ui/context-menu/context-menu-sub-trigger.svelte +2 -2
  139. package/dist/ui/copy-button/copy-button.svelte +2 -2
  140. package/dist/ui/cycle/cycle.svelte +1 -1
  141. package/dist/ui/date-field/date-field-segment.svelte +1 -1
  142. package/dist/ui/date-picker/date-picker-content.svelte +1 -1
  143. package/dist/ui/date-picker/date-picker-day.svelte +1 -1
  144. package/dist/ui/date-picker/date-picker-head-cell.svelte +1 -1
  145. package/dist/ui/date-picker/date-picker-header.svelte +1 -1
  146. package/dist/ui/date-picker/date-picker-next-button.svelte +1 -1
  147. package/dist/ui/date-picker/date-picker-prev-button.svelte +1 -1
  148. package/dist/ui/date-picker/date-picker-segment.svelte +1 -1
  149. package/dist/ui/date-picker/date-picker-trigger.svelte +2 -2
  150. package/dist/ui/date-range-field/date-range-field-segment.svelte +1 -1
  151. package/dist/ui/date-range-picker/date-range-picker-content.svelte +1 -1
  152. package/dist/ui/date-range-picker/date-range-picker-day.svelte +1 -1
  153. package/dist/ui/date-range-picker/date-range-picker-head-cell.svelte +1 -1
  154. package/dist/ui/date-range-picker/date-range-picker-header.svelte +1 -1
  155. package/dist/ui/date-range-picker/date-range-picker-next-button.svelte +1 -1
  156. package/dist/ui/date-range-picker/date-range-picker-prev-button.svelte +1 -1
  157. package/dist/ui/date-range-picker/date-range-picker-segment.svelte +1 -1
  158. package/dist/ui/date-range-picker/date-range-picker-trigger.svelte +2 -2
  159. package/dist/ui/dialog/dialog-content.svelte +4 -2
  160. package/dist/ui/dialog/dialog-header.svelte +2 -2
  161. package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
  162. package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
  163. package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte +4 -1
  164. package/dist/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  165. package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  166. package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  167. package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
  168. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +2 -2
  169. package/dist/ui/file-upload/file-upload.svelte +2 -2
  170. package/dist/ui/input/input.svelte +3 -3
  171. package/dist/ui/input/input.svelte.d.ts +1 -1
  172. package/dist/ui/input/textarea.svelte +1 -1
  173. package/dist/ui/input/variants.d.ts +24 -24
  174. package/dist/ui/input/variants.js +9 -9
  175. package/dist/ui/kv/kv.svelte +2 -2
  176. package/dist/ui/link-preview/link-preview-content.svelte +1 -1
  177. package/dist/ui/menubar/menubar-checkbox-item.svelte +1 -1
  178. package/dist/ui/menubar/menubar-content.svelte +1 -1
  179. package/dist/ui/menubar/menubar-group-heading.svelte +4 -1
  180. package/dist/ui/menubar/menubar-item.svelte +1 -1
  181. package/dist/ui/menubar/menubar-radio-item.svelte +1 -1
  182. package/dist/ui/menubar/menubar-root.svelte +1 -1
  183. package/dist/ui/menubar/menubar-sub-content.svelte +1 -1
  184. package/dist/ui/menubar/menubar-sub-trigger.svelte +2 -2
  185. package/dist/ui/menubar/menubar-trigger.svelte +1 -1
  186. package/dist/ui/meter/meter.svelte +1 -1
  187. package/dist/ui/pagination/pagination-next-button.svelte +1 -1
  188. package/dist/ui/pagination/pagination-prev-button.svelte +1 -1
  189. package/dist/ui/pane/pane-close.svelte +2 -2
  190. package/dist/ui/pane/pane-content.svelte +1 -1
  191. package/dist/ui/pane/pane-handle.svelte +3 -3
  192. package/dist/ui/pane/pane-root.svelte +12 -12
  193. package/dist/ui/pane/pane-tab-list.svelte +1 -1
  194. package/dist/ui/pane/pane-tab-panel.svelte +1 -1
  195. package/dist/ui/pane/pane-tab.svelte +1 -1
  196. package/dist/ui/pane/pane.svelte +1 -1
  197. package/dist/ui/pin-input/pin-input-cell.svelte +1 -1
  198. package/dist/ui/popover/popover-content.svelte +1 -1
  199. package/dist/ui/progress/progress.svelte +1 -1
  200. package/dist/ui/radio-group/radio-group-item.svelte +2 -2
  201. package/dist/ui/rating-group/rating-group-item.svelte +1 -1
  202. package/dist/ui/scroll-area/scroll-area-thumb.svelte +1 -1
  203. package/dist/ui/scroll-area/scroll-area.svelte +1 -1
  204. package/dist/ui/select/select-content.svelte +1 -1
  205. package/dist/ui/select/select-group-heading.svelte +4 -1
  206. package/dist/ui/select/select-item.svelte +1 -1
  207. package/dist/ui/select/select-trigger.svelte +2 -2
  208. package/dist/ui/select/select-value.svelte +1 -1
  209. package/dist/ui/sheet/sheet-content.svelte +3 -3
  210. package/dist/ui/sheet/sheet-content.svelte.d.ts +6 -6
  211. package/dist/ui/skeleton/skeleton.svelte +3 -3
  212. package/dist/ui/skeleton/skeleton.svelte.d.ts +9 -9
  213. package/dist/ui/slider/slider-range.svelte +1 -1
  214. package/dist/ui/slider/slider-thumb.svelte +1 -1
  215. package/dist/ui/step/step-content.svelte +1 -1
  216. package/dist/ui/step/step-summary.svelte +6 -6
  217. package/dist/ui/switch/switch.svelte +3 -3
  218. package/dist/ui/table/table-cell.svelte +1 -1
  219. package/dist/ui/table/table-head-cell.svelte +1 -1
  220. package/dist/ui/time-field/time-field-segment.svelte +1 -1
  221. package/dist/ui/time-range-field/time-range-field-segment.svelte +1 -1
  222. package/dist/ui/toggle-group/toggle-group-item.svelte +1 -1
  223. package/dist/ui/tooltip/tooltip-content.svelte +1 -1
  224. package/dist/ui/video-player/video-player.svelte +44 -44
  225. package/dist/utils/index.js +4 -4
  226. package/package.json +2 -1
@@ -14,11 +14,11 @@
14
14
  <Select.Trigger
15
15
  bind:ref
16
16
  class={cn(
17
- 'flex h-(--era-h-md) w-full items-center justify-between gap-(--era-xs-inset-sm) rounded-(--era-rd-md) bg-(--era-surface-bg-elevated) px-(--era-inset-md) text-body era-text-trim text-fg shadow-(--era-shadow) hover:bg-(--era-highlight) focus:bg-(--era-highlight) focus:outline-none disabled:opacity-50 data-[state=open]:rounded-b-none data-[state=open]:shadow-(--era-shadow-pressed)',
17
+ 'flex h-(--era-h-control) w-full items-center justify-between gap-(--era-icon-inset-chip) rounded-(--era-rd-control) bg-(--era-surface-bg-elevated) px-(--era-inset-control) text-body era-text-trim text-fg shadow-(--era-shadow) hover:bg-(--era-highlight) focus:bg-(--era-highlight) focus:outline-none disabled:opacity-50 data-[state=open]:rounded-b-none data-[state=open]:shadow-(--era-shadow-pressed)',
18
18
  className
19
19
  )}
20
20
  {...restProps}
21
21
  >
22
22
  {@render children?.()}
23
- <ChevronDown class="size-(--era-h-xs) text-muted" />
23
+ <ChevronDown class="size-(--era-h-icon) text-muted" />
24
24
  </Select.Trigger>
@@ -51,7 +51,7 @@
51
51
  the horizontal rhythm matches the vertical one.
52
52
  -->
53
53
  <div
54
- class="-ml-(--era-inset-xxs) flex min-w-0 flex-wrap items-center gap-(--era-xxs-inset-md)"
54
+ class="-ml-(--era-inset-pill) flex min-w-0 flex-wrap items-center gap-(--era-pill-inset-control)"
55
55
  >
56
56
  {#each sel.selected as item (item.value)}
57
57
  <Chip
@@ -27,8 +27,8 @@
27
27
  * padded rd-lg surface is unchanged.
28
28
  */
29
29
  header: {
30
- true: '[--sheet-rd:var(--era-rd-md)]',
31
- false: '[--sheet-rd:var(--era-rd-lg)] gap-(--era-gap) overflow-y-auto p-(--era-pad-md)'
30
+ true: '[--sheet-rd:var(--era-rd-control)]',
31
+ false: '[--sheet-rd:var(--era-rd-bar)] gap-(--era-gap) overflow-y-auto p-(--era-pad-card)'
32
32
  }
33
33
  },
34
34
  defaultVariants: { side: 'bottom', header: false }
@@ -64,7 +64,7 @@
64
64
  >
65
65
  {#if header}
66
66
  {@render header()}
67
- <div class="flex min-h-0 flex-1 flex-col gap-(--era-gap) overflow-y-auto p-(--era-pad-md)">
67
+ <div class="flex min-h-0 flex-1 flex-col gap-(--era-gap) overflow-y-auto p-(--era-pad-card)">
68
68
  {@render children?.()}
69
69
  </div>
70
70
  {:else}
@@ -14,8 +14,8 @@ export declare const sheetVariants: import("tailwind-variants").TVReturnType<{
14
14
  * padded rd-lg surface is unchanged.
15
15
  */
16
16
  header: {
17
- true: "[--sheet-rd:var(--era-rd-md)]";
18
- false: "[--sheet-rd:var(--era-rd-lg)] gap-(--era-gap) overflow-y-auto p-(--era-pad-md)";
17
+ true: "[--sheet-rd:var(--era-rd-control)]";
18
+ false: "[--sheet-rd:var(--era-rd-bar)] gap-(--era-gap) overflow-y-auto p-(--era-pad-card)";
19
19
  };
20
20
  }, undefined, "fixed z-50 flex flex-col border border-divider bg-(--era-surface-bg) shadow-(--era-shadow-lg) glass-blur", {
21
21
  side: {
@@ -32,8 +32,8 @@ export declare const sheetVariants: import("tailwind-variants").TVReturnType<{
32
32
  * padded rd-lg surface is unchanged.
33
33
  */
34
34
  header: {
35
- true: "[--sheet-rd:var(--era-rd-md)]";
36
- false: "[--sheet-rd:var(--era-rd-lg)] gap-(--era-gap) overflow-y-auto p-(--era-pad-md)";
35
+ true: "[--sheet-rd:var(--era-rd-control)]";
36
+ false: "[--sheet-rd:var(--era-rd-bar)] gap-(--era-gap) overflow-y-auto p-(--era-pad-card)";
37
37
  };
38
38
  }, undefined, import("tailwind-variants").TVReturnTypeLike<{
39
39
  side: {
@@ -50,8 +50,8 @@ export declare const sheetVariants: import("tailwind-variants").TVReturnType<{
50
50
  * padded rd-lg surface is unchanged.
51
51
  */
52
52
  header: {
53
- true: "[--sheet-rd:var(--era-rd-md)]";
54
- false: "[--sheet-rd:var(--era-rd-lg)] gap-(--era-gap) overflow-y-auto p-(--era-pad-md)";
53
+ true: "[--sheet-rd:var(--era-rd-control)]";
54
+ false: "[--sheet-rd:var(--era-rd-bar)] gap-(--era-gap) overflow-y-auto p-(--era-pad-card)";
55
55
  };
56
56
  }, undefined>>;
57
57
  import type { Snippet } from 'svelte';
@@ -5,9 +5,9 @@
5
5
  base: 'animate-[skeleton-pulse_2s_ease-in-out_infinite] bg-(--era-surface-bg-elevated)',
6
6
  variants: {
7
7
  variant: {
8
- line: 'h-(--era-text) w-full rounded-(--era-rd-md)',
9
- circle: 'size-(--era-h-lg) rounded-full',
10
- block: 'h-24 w-full rounded-(--era-rd-md)'
8
+ line: 'h-(--era-text) w-full rounded-(--era-rd-control)',
9
+ circle: 'size-(--era-h-bar) rounded-full',
10
+ block: 'h-24 w-full rounded-(--era-rd-control)'
11
11
  }
12
12
  },
13
13
  defaultVariants: { variant: 'line' }
@@ -1,20 +1,20 @@
1
1
  export declare const skeletonVariants: import("tailwind-variants").TVReturnType<{
2
2
  variant: {
3
- line: "h-(--era-text) w-full rounded-(--era-rd-md)";
4
- circle: "size-(--era-h-lg) rounded-full";
5
- block: "h-24 w-full rounded-(--era-rd-md)";
3
+ line: "h-(--era-text) w-full rounded-(--era-rd-control)";
4
+ circle: "size-(--era-h-bar) rounded-full";
5
+ block: "h-24 w-full rounded-(--era-rd-control)";
6
6
  };
7
7
  }, undefined, "animate-[skeleton-pulse_2s_ease-in-out_infinite] bg-(--era-surface-bg-elevated)", {
8
8
  variant: {
9
- line: "h-(--era-text) w-full rounded-(--era-rd-md)";
10
- circle: "size-(--era-h-lg) rounded-full";
11
- block: "h-24 w-full rounded-(--era-rd-md)";
9
+ line: "h-(--era-text) w-full rounded-(--era-rd-control)";
10
+ circle: "size-(--era-h-bar) rounded-full";
11
+ block: "h-24 w-full rounded-(--era-rd-control)";
12
12
  };
13
13
  }, undefined, import("tailwind-variants").TVReturnTypeLike<{
14
14
  variant: {
15
- line: "h-(--era-text) w-full rounded-(--era-rd-md)";
16
- circle: "size-(--era-h-lg) rounded-full";
17
- block: "h-24 w-full rounded-(--era-rd-md)";
15
+ line: "h-(--era-text) w-full rounded-(--era-rd-control)";
16
+ circle: "size-(--era-h-bar) rounded-full";
17
+ block: "h-24 w-full rounded-(--era-rd-control)";
18
18
  };
19
19
  }, undefined>>;
20
20
  import type { HTMLAttributes } from 'svelte/elements';
@@ -25,7 +25,7 @@
25
25
 
26
26
  <span
27
27
  class={cn(
28
- 'relative h-[calc(var(--era-sp)/2)] w-full grow cursor-pointer overflow-hidden rounded-(--era-rd-md) bg-(--era-surface-bg-elevated) shadow-(--era-shadow-well)',
28
+ 'relative h-[calc(var(--era-sp)/2)] w-full grow cursor-pointer overflow-hidden rounded-(--era-rd-control) bg-(--era-surface-bg-elevated) shadow-(--era-shadow-well)',
29
29
  trackClass
30
30
  )}
31
31
  >
@@ -8,7 +8,7 @@
8
8
  <Slider.Thumb
9
9
  bind:ref
10
10
  class={cn(
11
- "relative block size-(--era-h-xs) cursor-pointer rounded-(--era-rd-xs) bg-fg shadow-(--era-shadow) transition-transform duration-(--era-duration) will-change-transform after:absolute after:inset-[-13px] after:content-[''] hover:scale-105 focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:scale-[0.96]",
11
+ "relative block size-(--era-h-icon) cursor-pointer rounded-(--era-rd-icon) bg-fg shadow-(--era-shadow) transition-transform duration-(--era-duration) will-change-transform after:absolute after:inset-[-13px] after:content-[''] hover:scale-105 focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:scale-[0.96]",
12
12
  className
13
13
  )}
14
14
  {...restProps}
@@ -17,7 +17,7 @@
17
17
  <Collapsible.Content bind:ref class="era-collapse" {...restProps}>
18
18
  <div
19
19
  class={cn(
20
- 'mt-(--era-gap) mb-(--era-gap) flex min-w-0 flex-col gap-(--era-pad-sm) rounded-(--era-rd-md) bg-(--era-surface-bg) p-(--era-pad-sm) shadow-(--era-shadow-well)',
20
+ 'mt-(--era-gap) mb-(--era-gap) flex min-w-0 flex-col gap-(--era-pad-panel) rounded-(--era-rd-control) bg-(--era-surface-bg) p-(--era-pad-panel) shadow-(--era-shadow-well)',
21
21
  className
22
22
  )}
23
23
  >
@@ -26,19 +26,19 @@
26
26
  <Collapsible.Trigger
27
27
  bind:ref
28
28
  class={cn(
29
- 'flex h-(--era-h-md) w-full min-w-0 era-interactive cursor-pointer items-center gap-(--era-gap) rounded-(--era-rd-md) px-(--era-inset-md) text-body era-text-trim text-muted transition-colors duration-(--era-duration) ease-(--era-ease) hover:text-fg',
29
+ 'flex h-(--era-h-control) w-full min-w-0 era-interactive cursor-pointer items-center gap-(--era-gap) rounded-(--era-rd-control) px-(--era-inset-control) text-body era-text-trim text-muted transition-colors duration-(--era-duration) ease-(--era-ease) hover:text-fg',
30
30
  className
31
31
  )}
32
32
  {...restProps}
33
33
  >
34
34
  {#if step.status === 'running'}
35
- <LoaderCircle class="size-(--era-h-xs) shrink-0 animate-spin" aria-hidden="true" />
35
+ <LoaderCircle class="size-(--era-h-icon) shrink-0 animate-spin" aria-hidden="true" />
36
36
  {:else if step.status === 'done'}
37
- <CircleCheck class="size-(--era-h-xs) shrink-0 text-success" aria-hidden="true" />
37
+ <CircleCheck class="size-(--era-h-icon) shrink-0 text-success" aria-hidden="true" />
38
38
  {:else if step.status === 'error'}
39
- <CircleX class="size-(--era-h-xs) shrink-0 text-destructive" aria-hidden="true" />
39
+ <CircleX class="size-(--era-h-icon) shrink-0 text-destructive" aria-hidden="true" />
40
40
  {:else}
41
- <CircleDashed class="size-(--era-h-xs) shrink-0" aria-hidden="true" />
41
+ <CircleDashed class="size-(--era-h-icon) shrink-0" aria-hidden="true" />
42
42
  {/if}
43
43
  <span
44
44
  class={cn(
@@ -49,7 +49,7 @@
49
49
  {@render children?.()}
50
50
  </span>
51
51
  <ChevronDown
52
- class="size-(--era-h-xs) shrink-0 transition-transform duration-(--era-duration) ease-(--era-ease) group-data-[state=open]/step:rotate-180"
52
+ class="size-(--era-h-icon) shrink-0 transition-transform duration-(--era-duration) ease-(--era-ease) group-data-[state=open]/step:rotate-180"
53
53
  aria-hidden="true"
54
54
  />
55
55
  </Collapsible.Trigger>
@@ -21,13 +21,13 @@
21
21
  // "activated" — rather than --color-hover, which is calibrated for
22
22
  // transient list-hover feedback, not a persistent on/off signal.
23
23
  // justify-center is load-bearing, not cosmetic: it lets the thumb travel
24
- // be expressed as ±h-xs/2 about the CONTENT-box centre, which absorbs the
24
+ // be expressed as ±h-icon/2 about the CONTENT-box centre, which absorbs the
25
25
  // 1px border on both sides automatically — exactly how items-center
26
26
  // already gets the vertical gap right. Offsetting from the content-box
27
27
  // ORIGIN instead (translate-x = xs-inset-sm) silently adds the border to
28
28
  // the left gap and subtracts it from the right, so the thumb rests 1px
29
29
  // too far right in both states and the two ends differ by 2px.
30
- 'inline-flex h-(--era-h-sm) w-[calc(var(--era-h-sm)+var(--era-h-xs))] shrink-0 era-interactive cursor-pointer items-center justify-center rounded-(--era-rd-sm) border border-divider bg-(--era-surface-bg-elevated) shadow-(--era-shadow-well) hover:bg-(--era-highlight) data-[state=checked]:bg-fg',
30
+ 'inline-flex h-(--era-h-chip) w-[calc(var(--era-h-chip)+var(--era-h-icon))] shrink-0 era-interactive cursor-pointer items-center justify-center rounded-(--era-rd-chip) border border-divider bg-(--era-surface-bg-elevated) shadow-(--era-shadow-well) hover:bg-(--era-highlight) data-[state=checked]:bg-fg',
31
31
  className
32
32
  )}
33
33
  {...restProps}
@@ -38,6 +38,6 @@
38
38
  vs bevel track-slide) scopes a rule to its own surface — see the
39
39
  surface-animation recipe in surfaces/base.css. -->
40
40
  <Switch.Thumb
41
- class="pointer-events-none block size-(--era-h-xs) -translate-x-[calc(var(--era-h-xs)/2)] rounded-(--era-rd-xs) bg-fg transition-transform duration-(--era-duration) ease-(--era-ease) data-[state=checked]:translate-x-[calc(var(--era-h-xs)/2)] data-[state=checked]:bg-2"
41
+ class="pointer-events-none block size-(--era-h-icon) -translate-x-[calc(var(--era-h-icon)/2)] rounded-(--era-rd-icon) bg-fg transition-transform duration-(--era-duration) ease-(--era-ease) data-[state=checked]:translate-x-[calc(var(--era-h-icon)/2)] data-[state=checked]:bg-2"
42
42
  />
43
43
  </Switch.Root>
@@ -17,7 +17,7 @@
17
17
  <td
18
18
  bind:this={ref}
19
19
  class={cn(
20
- 'h-(--era-h-md) px-(--era-inset-md) text-left align-middle [table[data-variant=cells]_&]:rounded-(--era-rd-sm) [table[data-variant=cells]_&]:bg-(--era-surface-bg-elevated) [table[data-variant=cells]_&]:px-(--era-inset-sm) [table[data-variant=cells]_&]:shadow-(--era-shadow)',
20
+ 'h-(--era-h-control) px-(--era-inset-control) text-left align-middle [table[data-variant=cells]_&]:rounded-(--era-rd-chip) [table[data-variant=cells]_&]:bg-(--era-surface-bg-elevated) [table[data-variant=cells]_&]:px-(--era-inset-chip) [table[data-variant=cells]_&]:shadow-(--era-shadow)',
21
21
  className
22
22
  )}
23
23
  {...restProps}
@@ -17,7 +17,7 @@
17
17
  <th
18
18
  bind:this={ref}
19
19
  class={cn(
20
- 'h-(--era-h-md) px-(--era-inset-md) text-left align-middle font-medium text-muted [table[data-variant=cells]_&]:rounded-(--era-rd-sm) [table[data-variant=cells]_&]:bg-fill [table[data-variant=cells]_&]:px-(--era-inset-sm) [table[data-variant=cells]_&]:text-bright [table[data-variant=cells]_&]:shadow-(--era-shadow)',
20
+ 'h-(--era-h-control) px-(--era-inset-control) text-left align-middle font-medium text-muted [table[data-variant=cells]_&]:rounded-(--era-rd-chip) [table[data-variant=cells]_&]:bg-fill [table[data-variant=cells]_&]:px-(--era-inset-chip) [table[data-variant=cells]_&]:text-bright [table[data-variant=cells]_&]:shadow-(--era-shadow)',
21
21
  className
22
22
  )}
23
23
  {...restProps}
@@ -8,7 +8,7 @@
8
8
  <TimeField.Segment
9
9
  bind:ref
10
10
  class={cn(
11
- 'inline-flex h-(--era-h-sm) items-center rounded-(--era-rd-sm) px-[calc(var(--era-sp)/2)] focus:bg-(--era-highlight) focus:text-bright focus:outline-none aria-[valuetext=Empty]:text-muted data-[segment=literal]:text-muted',
11
+ 'inline-flex h-(--era-h-chip) items-center rounded-(--era-rd-chip) px-[calc(var(--era-sp)/2)] focus:bg-(--era-highlight) focus:text-bright focus:outline-none aria-[valuetext=Empty]:text-muted data-[segment=literal]:text-muted',
12
12
  className
13
13
  )}
14
14
  {...restProps}
@@ -12,7 +12,7 @@
12
12
  <TimeRangeField.Segment
13
13
  bind:ref
14
14
  class={cn(
15
- 'inline-flex h-(--era-h-sm) items-center rounded-(--era-rd-sm) px-[calc(var(--era-sp)/2)] focus:bg-(--era-highlight) focus:text-bright focus:outline-none aria-[valuetext=Empty]:text-muted data-[segment=literal]:text-muted',
15
+ 'inline-flex h-(--era-h-chip) items-center rounded-(--era-rd-chip) px-[calc(var(--era-sp)/2)] focus:bg-(--era-highlight) focus:text-bright focus:outline-none aria-[valuetext=Empty]:text-muted data-[segment=literal]:text-muted',
16
16
  className
17
17
  )}
18
18
  {...restProps}
@@ -10,7 +10,7 @@
10
10
  <ToggleGroup.Item
11
11
  bind:ref
12
12
  class={cn(
13
- 'inline-flex h-(--era-h-md) min-w-(--era-h-md) items-center justify-center rounded-(--era-rd-md) px-(--era-inset-md) text-body text-fg shadow-(--era-shadow) hover:bg-(--era-highlight) hover:shadow-(--era-highlight-shadow) focus:outline-none active:shadow-(--era-shadow-pressed) disabled:opacity-50 data-[state=on]:bg-fill data-[state=on]:text-bright data-[state=on]:shadow-(--era-shadow-pressed)',
13
+ 'inline-flex h-(--era-h-control) min-w-(--era-h-control) items-center justify-center rounded-(--era-rd-control) px-(--era-inset-control) text-body text-fg shadow-(--era-shadow) hover:bg-(--era-highlight) hover:shadow-(--era-highlight-shadow) focus:outline-none active:shadow-(--era-shadow-pressed) disabled:opacity-50 data-[state=on]:bg-fill data-[state=on]:text-bright data-[state=on]:shadow-(--era-shadow-pressed)',
14
14
  className
15
15
  )}
16
16
  {...restProps}
@@ -15,7 +15,7 @@
15
15
  <Tooltip.Content
16
16
  bind:ref
17
17
  class={cn(
18
- 'z-50 inline-flex h-(--era-h-xxs) items-center gap-(--era-gap) rounded-(--era-rd-xxs) bg-(--era-surface-bg-elevated) px-(--era-inset-xxs) text-body leading-none whitespace-nowrap text-fg shadow-(--era-shadow-lg) glass-blur has-[svg]:gap-(--era-inset-xxs)',
18
+ 'z-50 inline-flex h-(--era-h-pill) items-center gap-(--era-gap) rounded-(--era-rd-pill) bg-(--era-surface-bg-elevated) px-(--era-inset-pill) text-body leading-none whitespace-nowrap text-fg shadow-(--era-shadow-lg) glass-blur has-[svg]:gap-(--era-inset-pill)',
19
19
  className
20
20
  )}
21
21
  {sideOffset}
@@ -814,7 +814,7 @@
814
814
  volumeOrientation === 'vertical' ? 'vertical' : 'horizontal'
815
815
  );
816
816
  // In vertical mode the popup is anchored to the mute icon — same width
817
- // (h-md), shared bg, rounded top + flat bottom — so it reads as the icon
817
+ // (h-control), shared bg, rounded top + flat bottom — so it reads as the icon
818
818
  // extending upward (vidstack has no native API for this). The sleeve's
819
819
  // box runs all the way down to the button (`bottom-full`, no offset) so
820
820
  // the cursor crossing the visual gap stays inside the cluster's hover
@@ -828,16 +828,16 @@
828
828
  // against the mute button below. Visibility is in the scoped style block.
829
829
  const volumeSleeveClass = $derived(
830
830
  resolvedVolumeOrientation === 'vertical'
831
- ? 'absolute bottom-full left-1/2 z-20 h-[calc(var(--era-h-lg)*3)] w-(--era-h-md) -translate-x-1/2 rounded-t-(--era-rd-md) bg-hover shadow-(--era-shadow) glass-blur'
832
- : 'relative h-(--era-h-sm) w-[calc(var(--era-h-md)*3)]'
831
+ ? 'absolute bottom-full left-1/2 z-20 h-[calc(var(--era-h-bar)*3)] w-(--era-h-control) -translate-x-1/2 rounded-t-(--era-rd-control) bg-hover shadow-(--era-shadow) glass-blur'
832
+ : 'relative h-(--era-h-chip) w-[calc(var(--era-h-control)*3)]'
833
833
  );
834
834
  // Slider IS the visible track. Range and Thumb (both bg-fg) live inside
835
835
  // and blend into one filled column.
836
836
  const volumeSliderClass = $derived(
837
- `absolute touch-none select-none overflow-hidden rounded-(--era-rd-xs) bg-3 shadow-(--era-shadow) focus:outline-none ${
837
+ `absolute touch-none select-none overflow-hidden rounded-(--era-rd-icon) bg-3 shadow-(--era-shadow) focus:outline-none ${
838
838
  resolvedVolumeOrientation === 'vertical'
839
- ? 'top-(--era-gap) bottom-(--era-gap) left-1/2 w-(--era-h-xs) -translate-x-1/2'
840
- : 'inset-x-(--era-xs-inset-sm) top-1/2 h-(--era-h-xs) -translate-y-1/2'
839
+ ? 'top-(--era-gap) bottom-(--era-gap) left-1/2 w-(--era-h-icon) -translate-x-1/2'
840
+ : 'inset-x-(--era-icon-inset-chip) top-1/2 h-(--era-h-icon) -translate-y-1/2'
841
841
  }`
842
842
  );
843
843
  // Bits-ui's slider needs a thumb element to handle pointer events, but
@@ -871,7 +871,7 @@
871
871
  <media-player
872
872
  bind:this={ref}
873
873
  class={cn(
874
- 'relative block w-full overflow-hidden [border-radius:calc(var(--era-rd-lg)+var(--era-gap))] bg-black',
874
+ 'relative block w-full overflow-hidden [border-radius:calc(var(--era-rd-bar)+var(--era-gap))] bg-black',
875
875
  className
876
876
  )}
877
877
  {src}
@@ -959,7 +959,7 @@
959
959
  aria-hidden="true"
960
960
  class="pointer-events-none absolute inset-0 z-10 flex items-center justify-center"
961
961
  >
962
- <LoaderCircle class="size-(--era-h-lg) animate-spin text-fg" />
962
+ <LoaderCircle class="size-(--era-h-bar) animate-spin text-fg" />
963
963
  </span>
964
964
  {/if}
965
965
 
@@ -974,18 +974,18 @@
974
974
  aria-label={`Back ${skipBy} seconds`}
975
975
  onclick={(e: MouseEvent) => seekBy(-skipBy, e)}
976
976
  >
977
- <Rewind class="size-(--era-h-xs)" aria-hidden="true" />
977
+ <Rewind class="size-(--era-h-icon)" aria-hidden="true" />
978
978
  </Button>
979
979
  {/if}
980
980
 
981
981
  {#if showPlay && !mobileMode}
982
982
  <Button icon aria-label={playLabel} onclick={togglePlay}>
983
983
  {#if ended}
984
- <RotateCcw class="size-(--era-h-xs)" aria-hidden="true" />
984
+ <RotateCcw class="size-(--era-h-icon)" aria-hidden="true" />
985
985
  {:else if paused}
986
- <Play class="size-(--era-h-xs)" aria-hidden="true" />
986
+ <Play class="size-(--era-h-icon)" aria-hidden="true" />
987
987
  {:else}
988
- <Pause class="size-(--era-h-xs)" aria-hidden="true" />
988
+ <Pause class="size-(--era-h-icon)" aria-hidden="true" />
989
989
  {/if}
990
990
  </Button>
991
991
  {/if}
@@ -996,7 +996,7 @@
996
996
  aria-label={`Forward ${skipBy} seconds`}
997
997
  onclick={(e: MouseEvent) => seekBy(skipBy, e)}
998
998
  >
999
- <FastForward class="size-(--era-h-xs)" aria-hidden="true" />
999
+ <FastForward class="size-(--era-h-icon)" aria-hidden="true" />
1000
1000
  </Button>
1001
1001
  {/if}
1002
1002
 
@@ -1016,7 +1016,7 @@
1016
1016
  aria-valuenow={seekAriaValue}
1017
1017
  aria-valuetext={seekValueText}
1018
1018
  aria-disabled={seekDisabled}
1019
- class="relative h-(--era-h-sm) min-w-0 flex-1 touch-none select-none focus:outline-none focus-visible:outline focus-visible:outline-offset-2 focus-visible:outline-fg data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50"
1019
+ class="relative h-(--era-h-chip) min-w-0 flex-1 touch-none select-none focus:outline-none focus-visible:outline focus-visible:outline-offset-2 focus-visible:outline-fg data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50"
1020
1020
  style="--era-video-played-scale: 0; --era-video-buffered-scale: 0; --era-video-hover-pct: 0%;"
1021
1021
  data-seek-root
1022
1022
  data-disabled={seekDisabled}
@@ -1030,10 +1030,10 @@
1030
1030
  >
1031
1031
  <span
1032
1032
  aria-hidden="true"
1033
- class="pointer-events-none absolute inset-0 rounded-(--era-rd-sm)"
1033
+ class="pointer-events-none absolute inset-0 rounded-(--era-rd-chip)"
1034
1034
  >
1035
1035
  <span
1036
- class="absolute inset-(--era-xs-inset-sm) overflow-hidden rounded-(--era-rd-xs) bg-3 shadow-(--era-shadow)"
1036
+ class="absolute inset-(--era-icon-inset-chip) overflow-hidden rounded-(--era-rd-icon) bg-3 shadow-(--era-shadow)"
1037
1037
  >
1038
1038
  <span
1039
1039
  class="absolute inset-y-0 left-0 w-full origin-left scale-x-(--era-video-buffered-scale) bg-4"
@@ -1054,14 +1054,14 @@
1054
1054
  {#if seekPreviewVisible}
1055
1055
  <!--
1056
1056
  Anchored to the seek-timeline div, but the timeline sits
1057
- centered inside the taller Bar (h-lg around h-sm). To
1057
+ centered inside the taller Bar (h-bar around h-chip). To
1058
1058
  keep a `--era-gap`-sized clearance above the visible Bar
1059
1059
  surface — not just above the timeline div's top — we
1060
1060
  add half the bar/timeline height delta to the offset.
1061
1061
  -->
1062
1062
  <span
1063
1063
  aria-hidden="true"
1064
- class="pointer-events-none absolute bottom-[calc(100%+(var(--era-h-lg)-var(--era-h-sm))/2+var(--era-gap))] left-(--era-video-hover-pct) inline-flex h-(--era-h-xxs) -translate-x-1/2 items-center gap-(--era-gap) rounded-(--era-rd-xxs) bg-(--era-surface-bg-elevated) px-(--era-inset-xxs) font-mono text-body leading-none whitespace-nowrap text-fg shadow-(--era-shadow-lg) glass-blur"
1064
+ class="pointer-events-none absolute bottom-[calc(100%+(var(--era-h-bar)-var(--era-h-chip))/2+var(--era-gap))] left-(--era-video-hover-pct) inline-flex h-(--era-h-pill) -translate-x-1/2 items-center gap-(--era-gap) rounded-(--era-rd-pill) bg-(--era-surface-bg-elevated) px-(--era-inset-pill) font-mono text-body leading-none whitespace-nowrap text-fg shadow-(--era-shadow-lg) glass-blur"
1065
1065
  >
1066
1066
  <span class="tabular-nums">{hoverTimeLabel}</span>
1067
1067
  {#if hoverChapter}
@@ -1089,11 +1089,11 @@
1089
1089
  onclick={(e: MouseEvent) => remote.toggleMuted(e)}
1090
1090
  >
1091
1091
  {#if mutedState || volumeState === 0}
1092
- <VolumeX class="size-(--era-h-xs)" aria-hidden="true" />
1092
+ <VolumeX class="size-(--era-h-icon)" aria-hidden="true" />
1093
1093
  {:else if volumeState < 0.5}
1094
- <Volume1 class="size-(--era-h-xs)" aria-hidden="true" />
1094
+ <Volume1 class="size-(--era-h-icon)" aria-hidden="true" />
1095
1095
  {:else}
1096
- <Volume2 class="size-(--era-h-xs)" aria-hidden="true" />
1096
+ <Volume2 class="size-(--era-h-icon)" aria-hidden="true" />
1097
1097
  {/if}
1098
1098
  </Button>
1099
1099
 
@@ -1133,7 +1133,7 @@
1133
1133
  <BitsDropdownMenu.Trigger>
1134
1134
  {#snippet child({ props })}
1135
1135
  <Button icon aria-label="Playback speed" {...props}>
1136
- <Gauge class="size-(--era-h-xs)" aria-hidden="true" />
1136
+ <Gauge class="size-(--era-h-icon)" aria-hidden="true" />
1137
1137
  </Button>
1138
1138
  {/snippet}
1139
1139
  </BitsDropdownMenu.Trigger>
@@ -1147,7 +1147,7 @@
1147
1147
  {#snippet children({ checked })}
1148
1148
  <span>{r === 1 ? 'Normal' : `${r}x`}</span>
1149
1149
  {#if checked}
1150
- <Check class="ml-auto size-(--era-h-xs) text-muted" aria-hidden="true" />
1150
+ <Check class="ml-auto size-(--era-h-icon) text-muted" aria-hidden="true" />
1151
1151
  {/if}
1152
1152
  {/snippet}
1153
1153
  </DropdownMenu.RadioItem>
@@ -1167,7 +1167,7 @@
1167
1167
  <BitsDropdownMenu.Trigger>
1168
1168
  {#snippet child({ props })}
1169
1169
  <Button icon aria-label="Quality" {...props}>
1170
- <Settings class="size-(--era-h-xs)" aria-hidden="true" />
1170
+ <Settings class="size-(--era-h-icon)" aria-hidden="true" />
1171
1171
  </Button>
1172
1172
  {/snippet}
1173
1173
  </BitsDropdownMenu.Trigger>
@@ -1180,7 +1180,7 @@
1180
1180
  {#snippet children({ checked })}
1181
1181
  <span>Auto</span>
1182
1182
  {#if checked}
1183
- <Check class="ml-auto size-(--era-h-xs) text-muted" aria-hidden="true" />
1183
+ <Check class="ml-auto size-(--era-h-icon) text-muted" aria-hidden="true" />
1184
1184
  {/if}
1185
1185
  {/snippet}
1186
1186
  </DropdownMenu.RadioItem>
@@ -1189,7 +1189,7 @@
1189
1189
  {#snippet children({ checked })}
1190
1190
  <span>{q.height}p</span>
1191
1191
  {#if checked}
1192
- <Check class="ml-auto size-(--era-h-xs) text-muted" aria-hidden="true" />
1192
+ <Check class="ml-auto size-(--era-h-icon) text-muted" aria-hidden="true" />
1193
1193
  {/if}
1194
1194
  {/snippet}
1195
1195
  </DropdownMenu.RadioItem>
@@ -1206,9 +1206,9 @@
1206
1206
  onclick={(e: MouseEvent) => remote.togglePictureInPicture(e)}
1207
1207
  >
1208
1208
  {#if pipState}
1209
- <PictureInPicture2 class="size-(--era-h-xs)" aria-hidden="true" />
1209
+ <PictureInPicture2 class="size-(--era-h-icon)" aria-hidden="true" />
1210
1210
  {:else}
1211
- <PictureInPicture class="size-(--era-h-xs)" aria-hidden="true" />
1211
+ <PictureInPicture class="size-(--era-h-icon)" aria-hidden="true" />
1212
1212
  {/if}
1213
1213
  </Button>
1214
1214
  {/if}
@@ -1220,9 +1220,9 @@
1220
1220
  onclick={(e: MouseEvent) => remote.toggleFullscreen(FULLSCREEN_TARGET, e)}
1221
1221
  >
1222
1222
  {#if fullscreenState}
1223
- <Minimize class="size-(--era-h-xs)" aria-hidden="true" />
1223
+ <Minimize class="size-(--era-h-icon)" aria-hidden="true" />
1224
1224
  {:else}
1225
- <Maximize class="size-(--era-h-xs)" aria-hidden="true" />
1225
+ <Maximize class="size-(--era-h-icon)" aria-hidden="true" />
1226
1226
  {/if}
1227
1227
  </Button>
1228
1228
  {/if}
@@ -1246,11 +1246,11 @@
1246
1246
  <ContextMenu.Content onOpenAutoFocus={(e: Event) => e.preventDefault()}>
1247
1247
  <ContextMenu.Item onSelect={togglePlay}>
1248
1248
  {#if ended}
1249
- <RotateCcw class="size-(--era-h-xs)" aria-hidden="true" />
1249
+ <RotateCcw class="size-(--era-h-icon)" aria-hidden="true" />
1250
1250
  {:else if paused}
1251
- <Play class="size-(--era-h-xs)" aria-hidden="true" />
1251
+ <Play class="size-(--era-h-icon)" aria-hidden="true" />
1252
1252
  {:else}
1253
- <Pause class="size-(--era-h-xs)" aria-hidden="true" />
1253
+ <Pause class="size-(--era-h-icon)" aria-hidden="true" />
1254
1254
  {/if}
1255
1255
  <span>{playLabel}</span>
1256
1256
  </ContextMenu.Item>
@@ -1258,11 +1258,11 @@
1258
1258
  {#if showVolume && !mobileMode}
1259
1259
  <ContextMenu.Item onSelect={(e: Event) => remote.toggleMuted(e)}>
1260
1260
  {#if mutedState || volumeState === 0}
1261
- <VolumeX class="size-(--era-h-xs)" aria-hidden="true" />
1261
+ <VolumeX class="size-(--era-h-icon)" aria-hidden="true" />
1262
1262
  {:else if volumeState < 0.5}
1263
- <Volume1 class="size-(--era-h-xs)" aria-hidden="true" />
1263
+ <Volume1 class="size-(--era-h-icon)" aria-hidden="true" />
1264
1264
  {:else}
1265
- <Volume2 class="size-(--era-h-xs)" aria-hidden="true" />
1265
+ <Volume2 class="size-(--era-h-icon)" aria-hidden="true" />
1266
1266
  {/if}
1267
1267
  <span>{muteLabel}</span>
1268
1268
  </ContextMenu.Item>
@@ -1271,7 +1271,7 @@
1271
1271
  {#if showSpeed && !mobileMode}
1272
1272
  <ContextMenu.Sub>
1273
1273
  <ContextMenu.SubTrigger>
1274
- <Gauge class="size-(--era-h-xs)" aria-hidden="true" />
1274
+ <Gauge class="size-(--era-h-icon)" aria-hidden="true" />
1275
1275
  <span class="flex-1">Speed</span>
1276
1276
  <span class="ml-auto pl-(--era-gap) text-muted">
1277
1277
  {rateState === 1 ? '1x' : `${rateState}x`}
@@ -1295,7 +1295,7 @@
1295
1295
  {#if showQualityMenu && !mobileMode}
1296
1296
  <ContextMenu.Sub>
1297
1297
  <ContextMenu.SubTrigger>
1298
- <Settings class="size-(--era-h-xs)" aria-hidden="true" />
1298
+ <Settings class="size-(--era-h-icon)" aria-hidden="true" />
1299
1299
  <span class="flex-1">Quality</span>
1300
1300
  <span class="ml-auto pl-(--era-gap) text-muted">{qualityHint}</span>
1301
1301
  </ContextMenu.SubTrigger>
@@ -1316,9 +1316,9 @@
1316
1316
  {#if showPip && canEnterPip && !mobileMode}
1317
1317
  <ContextMenu.Item onSelect={(e: Event) => remote.togglePictureInPicture(e)}>
1318
1318
  {#if pipState}
1319
- <PictureInPicture2 class="size-(--era-h-xs)" aria-hidden="true" />
1319
+ <PictureInPicture2 class="size-(--era-h-icon)" aria-hidden="true" />
1320
1320
  {:else}
1321
- <PictureInPicture class="size-(--era-h-xs)" aria-hidden="true" />
1321
+ <PictureInPicture class="size-(--era-h-icon)" aria-hidden="true" />
1322
1322
  {/if}
1323
1323
  <span>{pipState ? 'Exit picture-in-picture' : 'Picture-in-picture'}</span>
1324
1324
  </ContextMenu.Item>
@@ -1327,9 +1327,9 @@
1327
1327
  {#if canEnterFullscreen}
1328
1328
  <ContextMenu.Item onSelect={(e: Event) => remote.toggleFullscreen(FULLSCREEN_TARGET, e)}>
1329
1329
  {#if fullscreenState}
1330
- <Minimize class="size-(--era-h-xs)" aria-hidden="true" />
1330
+ <Minimize class="size-(--era-h-icon)" aria-hidden="true" />
1331
1331
  {:else}
1332
- <Maximize class="size-(--era-h-xs)" aria-hidden="true" />
1332
+ <Maximize class="size-(--era-h-icon)" aria-hidden="true" />
1333
1333
  {/if}
1334
1334
  <span>{fullscreenState ? 'Exit fullscreen' : 'Fullscreen'}</span>
1335
1335
  </ContextMenu.Item>
@@ -1338,7 +1338,7 @@
1338
1338
  <ContextMenu.Separator />
1339
1339
 
1340
1340
  <ContextMenu.Item onSelect={downloadVideo}>
1341
- <Download class="size-(--era-h-xs)" aria-hidden="true" />
1341
+ <Download class="size-(--era-h-icon)" aria-hidden="true" />
1342
1342
  <span>Download video</span>
1343
1343
  </ContextMenu.Item>
1344
1344
  </ContextMenu.Content>
@@ -1361,7 +1361,7 @@
1361
1361
  bits-ui slider thumb is being dragged (its `data-active` is set on
1362
1362
  pointerdown and cleared on pointerup, even if the cursor strays
1363
1363
  outside the cluster). Plain CSS rather than Tailwind variants on the
1364
- button sidesteps cascade ambiguity with `rounded-(--era-rd-md)`. */
1364
+ button sidesteps cascade ambiguity with `rounded-(--era-rd-control)`. */
1365
1365
  :global([data-volume-cluster] [data-volume-sleeve]) {
1366
1366
  visibility: hidden;
1367
1367
  }
@@ -5,11 +5,11 @@ import { createTV } from 'tailwind-variants';
5
5
  // so it must conflict-resolve against the backdrop-blur group. text-body is
6
6
  // a registered font-size token — without this it would be misread as a color.
7
7
  // The rest teaches tailwind-merge era's named class API (styles/index.css):
8
- // values it can't know about (h-md, px-inset-md, gap-gutter, shadow-well, …)
9
- // must land in their real class groups, or a consumer's `class="h-lg"` would
10
- // fail to replace a component's h-(--era-h-md) and both would apply.
8
+ // values it can't know about (h-control, px-inset-control, gap-gutter, shadow-well, …)
9
+ // must land in their real class groups, or a consumer's `class="h-bar"` would
10
+ // fail to replace a component's h-(--era-h-control) and both would apply.
11
11
  // Colors (bg-elevated, bg-highlight, …) need no entry — the bg group already
12
- // accepts any name. rounded-xs/sm/md/lg and bare shadow/shadow-lg are stock
12
+ // accepts any name. rounded-icon/sm/md/lg and bare shadow/shadow-lg are stock
13
13
  // names tailwind-merge knows; only era's additions to those scales are listed.
14
14
  const TIERS = ['xs', 'xxs', 'sm', 'md', 'lg'];
15
15
  const INSETS = ['inset-xxs', 'inset-sm', 'inset-md'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signal9/era-ui",
3
- "version": "7.0.0",
3
+ "version": "9.0.0",
4
4
  "scripts": {
5
5
  "dev": "vite dev --host",
6
6
  "build": "vite build && npm run prepack",
@@ -79,6 +79,7 @@
79
79
  },
80
80
  "./styles": "./dist/styles/index.css",
81
81
  "./styles/video-player": "./dist/styles/video-player.css",
82
+ "./styles/prose": "./dist/styles/prose.css",
82
83
  "./styles/themes": "./dist/styles/themes.css",
83
84
  "./css": "./dist/era-ui.css",
84
85
  "./utilities.json": "./dist/generated-docs/utilities.json",