@signal9/era-ui 10.0.0 → 11.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 (262) hide show
  1. package/dist/ai/actions/actions.svelte +1 -1
  2. package/dist/ai/artifact/artifact-actions.svelte +1 -1
  3. package/dist/ai/artifact/artifact-close.svelte +1 -1
  4. package/dist/ai/artifact/artifact-content.svelte +1 -1
  5. package/dist/ai/artifact/artifact-header.svelte +1 -1
  6. package/dist/ai/artifact/artifact.svelte +1 -4
  7. package/dist/ai/chain-of-thought/chain-of-thought-step.svelte +3 -3
  8. package/dist/ai/chain-of-thought/chain-of-thought.svelte +1 -1
  9. package/dist/ai/checkpoint.svelte +2 -2
  10. package/dist/ai/confirmation/confirmation-actions.svelte +1 -1
  11. package/dist/ai/confirmation/confirmation-args.svelte +4 -4
  12. package/dist/ai/confirmation/confirmation.svelte +5 -8
  13. package/dist/ai/context/context.svelte +3 -3
  14. package/dist/ai/conversation/conversation-content.svelte +1 -4
  15. package/dist/ai/conversation/conversation-empty-state.svelte +1 -1
  16. package/dist/ai/conversation/conversation-scroll-button.svelte +3 -3
  17. package/dist/ai/conversations/conversations-group.svelte +2 -2
  18. package/dist/ai/conversations/conversations-item.svelte +8 -8
  19. package/dist/ai/conversations/conversations-root.svelte +2 -2
  20. package/dist/ai/error-panel/error-panel.svelte +7 -7
  21. package/dist/ai/image.svelte +1 -1
  22. package/dist/ai/index.js +1 -1
  23. package/dist/ai/inline-citation/inline-citation.svelte +5 -5
  24. package/dist/ai/loader.svelte +1 -4
  25. package/dist/ai/message/message-branch-selector.svelte +3 -3
  26. package/dist/ai/message/message-branch.svelte +1 -1
  27. package/dist/ai/message/message-content.svelte +1 -1
  28. package/dist/ai/message/message-toolbar.svelte +1 -1
  29. package/dist/ai/message/message-usage.svelte +5 -7
  30. package/dist/ai/message/message.svelte +1 -1
  31. package/dist/ai/model-selector/model-selector.svelte +2 -2
  32. package/dist/ai/open-in-chat/open-in-chat.svelte +2 -2
  33. package/dist/ai/plan/plan-content.svelte +1 -1
  34. package/dist/ai/plan/plan-header.svelte +2 -2
  35. package/dist/ai/plan/plan.svelte +1 -4
  36. package/dist/ai/prompt-input/prompt-input-add-attachments.svelte +1 -1
  37. package/dist/ai/prompt-input/prompt-input-attachments.svelte +5 -5
  38. package/dist/ai/prompt-input/prompt-input-submit.svelte +2 -2
  39. package/dist/ai/prompt-input/prompt-input-textarea.svelte +2 -2
  40. package/dist/ai/prompt-input/prompt-input-toolbar.svelte +1 -1
  41. package/dist/ai/prompt-input/prompt-input.svelte +1 -1
  42. package/dist/ai/queue/queue-item.svelte +1 -1
  43. package/dist/ai/queue/queue.svelte +1 -1
  44. package/dist/ai/reasoning/reasoning-trigger.svelte +1 -1
  45. package/dist/ai/response/response.svelte +1 -1
  46. package/dist/ai/run-status/run-status.svelte +7 -11
  47. package/dist/ai/runtime-feed/runtime-feed-item.svelte +1 -4
  48. package/dist/ai/runtime-feed/runtime-feed-root.svelte +1 -1
  49. package/dist/ai/sources/source.svelte +2 -2
  50. package/dist/ai/sources/sources-trigger.svelte +1 -1
  51. package/dist/ai/structured-value/structured-value.svelte +4 -4
  52. package/dist/ai/suggestion/suggestion.svelte +1 -1
  53. package/dist/ai/suggestion/suggestions.svelte +1 -1
  54. package/dist/ai/swarm/swarm-agent.svelte +3 -3
  55. package/dist/ai/swarm/swarm-artifact.svelte +2 -2
  56. package/dist/ai/swarm/swarm-barrier.svelte +3 -3
  57. package/dist/ai/swarm/swarm-barriers.svelte +1 -4
  58. package/dist/ai/swarm/swarm-counts.svelte +2 -2
  59. package/dist/ai/swarm/swarm-footer.svelte +4 -3
  60. package/dist/ai/swarm/swarm-grid.svelte +2 -2
  61. package/dist/ai/swarm/swarm-header.svelte +2 -2
  62. package/dist/ai/swarm/swarm-node.svelte +7 -9
  63. package/dist/ai/swarm/swarm-role.svelte +6 -3
  64. package/dist/ai/swarm/swarm-root.svelte +1 -4
  65. package/dist/ai/swarm/swarm-sandbox.svelte +4 -7
  66. package/dist/ai/swarm/swarm-tree.svelte +2 -2
  67. package/dist/ai/task/task-content.svelte +1 -4
  68. package/dist/ai/task/task-trigger.svelte +1 -1
  69. package/dist/ai/tool/tool-chip.svelte +3 -3
  70. package/dist/ai/tool/tool-chips.svelte +3 -3
  71. package/dist/ai/tool/tool-exec.svelte +4 -4
  72. package/dist/ai/tool/tool-header.svelte +1 -1
  73. package/dist/ai/web-preview/web-preview.svelte +4 -9
  74. package/dist/ai/workflow/canvas.svelte +1 -1
  75. package/dist/ai/workflow/node.svelte +3 -3
  76. package/dist/apps/index.d.ts +3 -3
  77. package/dist/apps/index.js +3 -3
  78. package/dist/apps/llm-shell/llm-shell.svelte +4 -4
  79. package/dist/apps/notes/editor/slash-menu.svelte +2 -4
  80. package/dist/apps/notes/notes.svelte +8 -8
  81. package/dist/dev/audit/audits/anonymous-text.d.ts +2 -0
  82. package/dist/dev/audit/audits/anonymous-text.js +73 -0
  83. package/dist/dev/audit/audits/even-container-padding.js +2 -2
  84. package/dist/dev/audit/audits/index.d.ts +2 -1
  85. package/dist/dev/audit/audits/index.js +3 -1
  86. package/dist/dev/audit/audits/single-glyph-square.js +2 -2
  87. package/dist/dev/audit/types.d.ts +1 -1
  88. package/dist/dev/audit-overlay.svelte +7 -7
  89. package/dist/docs/css-utilities.d.ts +31 -0
  90. package/dist/docs/css-utilities.js +142 -8
  91. package/dist/docs/llms-txt.js +2 -2
  92. package/dist/docs/notes.md +3 -3
  93. package/dist/docs/quickstart.md +5 -5
  94. package/dist/era-ui.css +1 -1
  95. package/dist/generated-docs/llms-full.txt +455 -110
  96. package/dist/generated-docs/llms.txt +29 -14
  97. package/dist/generated-docs/manifest.json +382 -55
  98. package/dist/generated-docs/notes.md +3 -3
  99. package/dist/generated-docs/utilities.json +359 -45
  100. package/dist/generated-docs/utilities.md +423 -93
  101. package/dist/os/notification-center.svelte +11 -17
  102. package/dist/os/pane-manager.svelte.d.ts +1 -1
  103. package/dist/os/pane.svelte +4 -6
  104. package/dist/os/taskbar.svelte +13 -18
  105. package/dist/os/toast.svelte +6 -11
  106. package/dist/os/toaster.svelte +1 -1
  107. package/dist/styles/density.css +0 -2
  108. package/dist/styles/index.css +160 -84
  109. package/dist/ui/accordion/accordion-content.svelte +1 -1
  110. package/dist/ui/accordion/accordion-trigger.svelte +2 -2
  111. package/dist/ui/alert-dialog/alert-dialog-content.svelte +2 -2
  112. package/dist/ui/alert-dialog/alert-dialog-overlay.svelte +1 -1
  113. package/dist/ui/aspect-ratio/aspect-ratio.svelte +1 -5
  114. package/dist/ui/avatar/avatar-fallback.svelte +1 -1
  115. package/dist/ui/avatar/avatar-root.svelte +1 -1
  116. package/dist/ui/badge/badge.svelte +1 -1
  117. package/dist/ui/badge/badge.svelte.d.ts +1 -1
  118. package/dist/ui/bar/bar.svelte +8 -8
  119. package/dist/ui/bar/bar.svelte.d.ts +16 -16
  120. package/dist/ui/button/button.svelte +13 -2
  121. package/dist/ui/button/variants.d.ts +4 -4
  122. package/dist/ui/button/variants.js +18 -18
  123. package/dist/ui/button-group/button-group.svelte +2 -2
  124. package/dist/ui/calendar/calendar-day.svelte +1 -1
  125. package/dist/ui/calendar/calendar-grid-row.svelte +1 -1
  126. package/dist/ui/calendar/calendar-grid.svelte +1 -1
  127. package/dist/ui/calendar/calendar-head-cell.svelte +1 -1
  128. package/dist/ui/calendar/calendar-header.svelte +1 -1
  129. package/dist/ui/calendar/calendar-next-button.svelte +1 -1
  130. package/dist/ui/calendar/calendar-prev-button.svelte +1 -1
  131. package/dist/ui/calendar/calendar-root.svelte +1 -1
  132. package/dist/ui/card/card.svelte +10 -10
  133. package/dist/ui/card/card.svelte.d.ts +16 -16
  134. package/dist/ui/checkbox/checkbox-group.svelte +1 -1
  135. package/dist/ui/checkbox/checkbox.svelte +1 -1
  136. package/dist/ui/chip/chip.svelte +15 -7
  137. package/dist/ui/chip/chip.svelte.d.ts +7 -7
  138. package/dist/ui/code-block/code-block.svelte +3 -9
  139. package/dist/ui/collapsible/collapsible-trigger.svelte +1 -1
  140. package/dist/ui/combobox/combobox-content.svelte +1 -1
  141. package/dist/ui/combobox/combobox-empty.svelte +1 -6
  142. package/dist/ui/combobox/combobox-group-heading.svelte +1 -4
  143. package/dist/ui/combobox/combobox-input.svelte +1 -1
  144. package/dist/ui/combobox/combobox-item.svelte +1 -1
  145. package/dist/ui/combobox/combobox-trigger.svelte +2 -2
  146. package/dist/ui/command/command-group-heading.svelte +1 -4
  147. package/dist/ui/command/command-group-items.svelte +1 -5
  148. package/dist/ui/command/command-item.svelte +1 -1
  149. package/dist/ui/command/command-link-item.svelte +1 -1
  150. package/dist/ui/command/command-root.svelte +2 -2
  151. package/dist/ui/command/command-viewport.svelte +1 -1
  152. package/dist/ui/command-bar/command-bar.svelte +9 -13
  153. package/dist/ui/context-menu/context-menu-checkbox-item.svelte +1 -1
  154. package/dist/ui/context-menu/context-menu-content.svelte +2 -2
  155. package/dist/ui/context-menu/context-menu-group-heading.svelte +1 -4
  156. package/dist/ui/context-menu/context-menu-item.svelte +1 -1
  157. package/dist/ui/context-menu/context-menu-radio-item.svelte +1 -1
  158. package/dist/ui/context-menu/context-menu-sub-content.svelte +1 -1
  159. package/dist/ui/context-menu/context-menu-sub-trigger.svelte +2 -2
  160. package/dist/ui/copy-button/copy-button.svelte +2 -2
  161. package/dist/ui/cycle/cycle.svelte +2 -2
  162. package/dist/ui/date-field/date-field-segment.svelte +1 -1
  163. package/dist/ui/date-picker/date-picker-calendar.svelte +1 -1
  164. package/dist/ui/date-picker/date-picker-content.svelte +1 -4
  165. package/dist/ui/date-picker/date-picker-day.svelte +1 -1
  166. package/dist/ui/date-picker/date-picker-grid-row.svelte +1 -1
  167. package/dist/ui/date-picker/date-picker-grid.svelte +1 -1
  168. package/dist/ui/date-picker/date-picker-head-cell.svelte +1 -1
  169. package/dist/ui/date-picker/date-picker-header.svelte +1 -1
  170. package/dist/ui/date-picker/date-picker-next-button.svelte +1 -1
  171. package/dist/ui/date-picker/date-picker-prev-button.svelte +1 -1
  172. package/dist/ui/date-picker/date-picker-segment.svelte +1 -1
  173. package/dist/ui/date-picker/date-picker-trigger.svelte +2 -2
  174. package/dist/ui/date-range-field/date-range-field-segment.svelte +1 -1
  175. package/dist/ui/date-range-picker/date-range-picker-calendar.svelte +1 -1
  176. package/dist/ui/date-range-picker/date-range-picker-content.svelte +1 -4
  177. package/dist/ui/date-range-picker/date-range-picker-day.svelte +1 -1
  178. package/dist/ui/date-range-picker/date-range-picker-grid-row.svelte +1 -1
  179. package/dist/ui/date-range-picker/date-range-picker-grid.svelte +1 -5
  180. package/dist/ui/date-range-picker/date-range-picker-head-cell.svelte +1 -1
  181. package/dist/ui/date-range-picker/date-range-picker-header.svelte +1 -1
  182. package/dist/ui/date-range-picker/date-range-picker-next-button.svelte +1 -1
  183. package/dist/ui/date-range-picker/date-range-picker-prev-button.svelte +1 -1
  184. package/dist/ui/date-range-picker/date-range-picker-segment.svelte +1 -1
  185. package/dist/ui/date-range-picker/date-range-picker-trigger.svelte +2 -2
  186. package/dist/ui/dialog/dialog-content.svelte +3 -5
  187. package/dist/ui/dialog/dialog-header.svelte +1 -6
  188. package/dist/ui/dialog/dialog-overlay.svelte +1 -5
  189. package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
  190. package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +2 -2
  191. package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -4
  192. package/dist/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  193. package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  194. package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  195. package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
  196. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +2 -2
  197. package/dist/ui/file-upload/file-upload.svelte +2 -2
  198. package/dist/ui/index.js +1 -1
  199. package/dist/ui/input/input.svelte +2 -2
  200. package/dist/ui/input/textarea.svelte +1 -1
  201. package/dist/ui/input/variants.d.ts +18 -18
  202. package/dist/ui/input/variants.js +6 -6
  203. package/dist/ui/kv/kv.svelte +2 -3
  204. package/dist/ui/link-preview/link-preview-content.svelte +1 -1
  205. package/dist/ui/menubar/menubar-checkbox-item.svelte +1 -1
  206. package/dist/ui/menubar/menubar-content.svelte +2 -2
  207. package/dist/ui/menubar/menubar-group-heading.svelte +1 -4
  208. package/dist/ui/menubar/menubar-item.svelte +1 -1
  209. package/dist/ui/menubar/menubar-radio-item.svelte +1 -1
  210. package/dist/ui/menubar/menubar-root.svelte +1 -4
  211. package/dist/ui/menubar/menubar-sub-content.svelte +1 -1
  212. package/dist/ui/menubar/menubar-sub-trigger.svelte +2 -2
  213. package/dist/ui/menubar/menubar-trigger.svelte +1 -1
  214. package/dist/ui/meter/meter.svelte +2 -2
  215. package/dist/ui/pagination/pagination-next-button.svelte +1 -1
  216. package/dist/ui/pagination/pagination-prev-button.svelte +1 -1
  217. package/dist/ui/pagination/pagination-root.svelte +1 -1
  218. package/dist/ui/pane/pane-content.svelte +1 -1
  219. package/dist/ui/pane/pane-root.svelte +1 -1
  220. package/dist/ui/pane/pane-tab-list.svelte +1 -1
  221. package/dist/ui/pane/pane-tab-panel.svelte +1 -1
  222. package/dist/ui/pane/pane-tab.svelte +1 -1
  223. package/dist/ui/pane/pane.svelte +1 -1
  224. package/dist/ui/pin-input/pin-input-cell.svelte +1 -1
  225. package/dist/ui/popover/popover-content.svelte +1 -1
  226. package/dist/ui/popover/popover-trigger.svelte +1 -4
  227. package/dist/ui/progress/progress.svelte +2 -2
  228. package/dist/ui/radio-group/radio-group-item.svelte +2 -2
  229. package/dist/ui/radio-group/radio-group-root.svelte +1 -1
  230. package/dist/ui/rating-group/rating-group-item.svelte +1 -1
  231. package/dist/ui/rating-group/rating-group-root.svelte +1 -1
  232. package/dist/ui/scroll-area/scroll-area-scrollbar.svelte +1 -1
  233. package/dist/ui/scroll-area/scroll-area-thumb.svelte +1 -1
  234. package/dist/ui/scroll-area/scroll-area.svelte +1 -1
  235. package/dist/ui/select/select-content.svelte +7 -6
  236. package/dist/ui/select/select-group-heading.svelte +1 -4
  237. package/dist/ui/select/select-item.svelte +1 -1
  238. package/dist/ui/select/select-trigger.svelte +2 -2
  239. package/dist/ui/select/select-value.svelte +1 -1
  240. package/dist/ui/separator/separator.svelte +1 -1
  241. package/dist/ui/sheet/sheet-content.svelte +3 -3
  242. package/dist/ui/sheet/sheet-content.svelte.d.ts +4 -4
  243. package/dist/ui/skeleton/skeleton.svelte +4 -4
  244. package/dist/ui/skeleton/skeleton.svelte.d.ts +10 -10
  245. package/dist/ui/slider/slider-range.svelte +1 -1
  246. package/dist/ui/slider/slider-thumb.svelte +1 -1
  247. package/dist/ui/slider/slider-tick.svelte +1 -1
  248. package/dist/ui/step/step-content.svelte +1 -1
  249. package/dist/ui/step/step-section.svelte +1 -1
  250. package/dist/ui/step/step-summary.svelte +7 -7
  251. package/dist/ui/switch/switch.svelte +2 -2
  252. package/dist/ui/table/table-cell.svelte +1 -1
  253. package/dist/ui/table/table-head-cell.svelte +1 -1
  254. package/dist/ui/table/table-row.svelte +1 -1
  255. package/dist/ui/time-field/time-field-segment.svelte +1 -1
  256. package/dist/ui/time-range-field/time-range-field-segment.svelte +1 -1
  257. package/dist/ui/toggle-group/toggle-group-item.svelte +1 -1
  258. package/dist/ui/toggle-group/toggle-group-root.svelte +1 -1
  259. package/dist/ui/tooltip/tooltip-content.svelte +1 -1
  260. package/dist/ui/video-player/video-player.svelte +44 -47
  261. package/dist/utils/index.js +1 -1
  262. package/package.json +4 -3
@@ -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-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)]'
831
+ ? 'absolute bottom-full left-1/2 z-20 h-[calc(var(--era-h-bar)*3)] w-control -translate-x-1/2 rounded-t-control bg-hover shadow-sm glass-blur'
832
+ : 'relative 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-icon) bg-3 shadow-(--era-shadow) focus:outline-none ${
837
+ `absolute touch-none select-none overflow-hidden rounded-icon bg-3 shadow-sm focus:outline-none ${
838
838
  resolvedVolumeOrientation === 'vertical'
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'
839
+ ? 'top-gutter bottom-gutter left-1/2 w-icon -translate-x-1/2'
840
+ : 'inset-x-icon-inset-chip top-1/2 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
@@ -858,7 +858,7 @@
858
858
  // has held still over the bar for a while.
859
859
  let barHovered = $state(false);
860
860
  const barClass = $derived(
861
- `absolute inset-x-(--era-gap) bottom-(--era-gap) z-10 bg-2 shadow-(--era-shadow) transition-opacity duration-(--era-duration) ${
861
+ `absolute inset-x-gutter bottom-gutter z-10 bg-2 shadow-sm transition-opacity duration-base ${
862
862
  (userIdle || pausedIdle) && !barHovered ? 'pointer-events-none opacity-0' : ''
863
863
  }`
864
864
  );
@@ -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-bar) animate-spin text-fg" />
962
+ <LoaderCircle class="size-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-icon)" aria-hidden="true" />
977
+ <Rewind class="size-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-icon)" aria-hidden="true" />
984
+ <RotateCcw class="size-icon" aria-hidden="true" />
985
985
  {:else if paused}
986
- <Play class="size-(--era-h-icon)" aria-hidden="true" />
986
+ <Play class="size-icon" aria-hidden="true" />
987
987
  {:else}
988
- <Pause class="size-(--era-h-icon)" aria-hidden="true" />
988
+ <Pause class="size-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-icon)" aria-hidden="true" />
999
+ <FastForward class="size-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-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"
1019
+ class="relative 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}
@@ -1028,12 +1028,9 @@
1028
1028
  onpointerleave={handleSeekPointerLeave}
1029
1029
  onkeydown={handleSeekKeydown}
1030
1030
  >
1031
- <span
1032
- aria-hidden="true"
1033
- class="pointer-events-none absolute inset-0 rounded-(--era-rd-chip)"
1034
- >
1031
+ <span aria-hidden="true" class="pointer-events-none absolute inset-0 rounded-chip">
1035
1032
  <span
1036
- class="absolute inset-(--era-icon-inset-chip) overflow-hidden rounded-(--era-rd-icon) bg-3 shadow-(--era-shadow)"
1033
+ class="absolute inset-icon-inset-chip overflow-hidden rounded-icon bg-3 shadow-sm"
1037
1034
  >
1038
1035
  <span
1039
1036
  class="absolute inset-y-0 left-0 w-full origin-left scale-x-(--era-video-buffered-scale) bg-4"
@@ -1061,7 +1058,7 @@
1061
1058
  -->
1062
1059
  <span
1063
1060
  aria-hidden="true"
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"
1061
+ 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-pill -translate-x-1/2 items-center gap-gutter rounded-pill bg-elevated px-inset-pill font-mono text-body leading-none whitespace-nowrap text-fg shadow-lg glass-blur"
1065
1062
  >
1066
1063
  <span class="tabular-nums">{hoverTimeLabel}</span>
1067
1064
  {#if hoverChapter}
@@ -1089,11 +1086,11 @@
1089
1086
  onclick={(e: MouseEvent) => remote.toggleMuted(e)}
1090
1087
  >
1091
1088
  {#if mutedState || volumeState === 0}
1092
- <VolumeX class="size-(--era-h-icon)" aria-hidden="true" />
1089
+ <VolumeX class="size-icon" aria-hidden="true" />
1093
1090
  {:else if volumeState < 0.5}
1094
- <Volume1 class="size-(--era-h-icon)" aria-hidden="true" />
1091
+ <Volume1 class="size-icon" aria-hidden="true" />
1095
1092
  {:else}
1096
- <Volume2 class="size-(--era-h-icon)" aria-hidden="true" />
1093
+ <Volume2 class="size-icon" aria-hidden="true" />
1097
1094
  {/if}
1098
1095
  </Button>
1099
1096
 
@@ -1133,7 +1130,7 @@
1133
1130
  <BitsDropdownMenu.Trigger>
1134
1131
  {#snippet child({ props })}
1135
1132
  <Button icon aria-label="Playback speed" {...props}>
1136
- <Gauge class="size-(--era-h-icon)" aria-hidden="true" />
1133
+ <Gauge class="size-icon" aria-hidden="true" />
1137
1134
  </Button>
1138
1135
  {/snippet}
1139
1136
  </BitsDropdownMenu.Trigger>
@@ -1147,7 +1144,7 @@
1147
1144
  {#snippet children({ checked })}
1148
1145
  <span>{r === 1 ? 'Normal' : `${r}x`}</span>
1149
1146
  {#if checked}
1150
- <Check class="ml-auto size-(--era-h-icon) text-muted" aria-hidden="true" />
1147
+ <Check class="ml-auto size-icon text-muted" aria-hidden="true" />
1151
1148
  {/if}
1152
1149
  {/snippet}
1153
1150
  </DropdownMenu.RadioItem>
@@ -1167,7 +1164,7 @@
1167
1164
  <BitsDropdownMenu.Trigger>
1168
1165
  {#snippet child({ props })}
1169
1166
  <Button icon aria-label="Quality" {...props}>
1170
- <Settings class="size-(--era-h-icon)" aria-hidden="true" />
1167
+ <Settings class="size-icon" aria-hidden="true" />
1171
1168
  </Button>
1172
1169
  {/snippet}
1173
1170
  </BitsDropdownMenu.Trigger>
@@ -1180,7 +1177,7 @@
1180
1177
  {#snippet children({ checked })}
1181
1178
  <span>Auto</span>
1182
1179
  {#if checked}
1183
- <Check class="ml-auto size-(--era-h-icon) text-muted" aria-hidden="true" />
1180
+ <Check class="ml-auto size-icon text-muted" aria-hidden="true" />
1184
1181
  {/if}
1185
1182
  {/snippet}
1186
1183
  </DropdownMenu.RadioItem>
@@ -1189,7 +1186,7 @@
1189
1186
  {#snippet children({ checked })}
1190
1187
  <span>{q.height}p</span>
1191
1188
  {#if checked}
1192
- <Check class="ml-auto size-(--era-h-icon) text-muted" aria-hidden="true" />
1189
+ <Check class="ml-auto size-icon text-muted" aria-hidden="true" />
1193
1190
  {/if}
1194
1191
  {/snippet}
1195
1192
  </DropdownMenu.RadioItem>
@@ -1206,9 +1203,9 @@
1206
1203
  onclick={(e: MouseEvent) => remote.togglePictureInPicture(e)}
1207
1204
  >
1208
1205
  {#if pipState}
1209
- <PictureInPicture2 class="size-(--era-h-icon)" aria-hidden="true" />
1206
+ <PictureInPicture2 class="size-icon" aria-hidden="true" />
1210
1207
  {:else}
1211
- <PictureInPicture class="size-(--era-h-icon)" aria-hidden="true" />
1208
+ <PictureInPicture class="size-icon" aria-hidden="true" />
1212
1209
  {/if}
1213
1210
  </Button>
1214
1211
  {/if}
@@ -1220,9 +1217,9 @@
1220
1217
  onclick={(e: MouseEvent) => remote.toggleFullscreen(FULLSCREEN_TARGET, e)}
1221
1218
  >
1222
1219
  {#if fullscreenState}
1223
- <Minimize class="size-(--era-h-icon)" aria-hidden="true" />
1220
+ <Minimize class="size-icon" aria-hidden="true" />
1224
1221
  {:else}
1225
- <Maximize class="size-(--era-h-icon)" aria-hidden="true" />
1222
+ <Maximize class="size-icon" aria-hidden="true" />
1226
1223
  {/if}
1227
1224
  </Button>
1228
1225
  {/if}
@@ -1246,11 +1243,11 @@
1246
1243
  <ContextMenu.Content onOpenAutoFocus={(e: Event) => e.preventDefault()}>
1247
1244
  <ContextMenu.Item onSelect={togglePlay}>
1248
1245
  {#if ended}
1249
- <RotateCcw class="size-(--era-h-icon)" aria-hidden="true" />
1246
+ <RotateCcw class="size-icon" aria-hidden="true" />
1250
1247
  {:else if paused}
1251
- <Play class="size-(--era-h-icon)" aria-hidden="true" />
1248
+ <Play class="size-icon" aria-hidden="true" />
1252
1249
  {:else}
1253
- <Pause class="size-(--era-h-icon)" aria-hidden="true" />
1250
+ <Pause class="size-icon" aria-hidden="true" />
1254
1251
  {/if}
1255
1252
  <span>{playLabel}</span>
1256
1253
  </ContextMenu.Item>
@@ -1258,11 +1255,11 @@
1258
1255
  {#if showVolume && !mobileMode}
1259
1256
  <ContextMenu.Item onSelect={(e: Event) => remote.toggleMuted(e)}>
1260
1257
  {#if mutedState || volumeState === 0}
1261
- <VolumeX class="size-(--era-h-icon)" aria-hidden="true" />
1258
+ <VolumeX class="size-icon" aria-hidden="true" />
1262
1259
  {:else if volumeState < 0.5}
1263
- <Volume1 class="size-(--era-h-icon)" aria-hidden="true" />
1260
+ <Volume1 class="size-icon" aria-hidden="true" />
1264
1261
  {:else}
1265
- <Volume2 class="size-(--era-h-icon)" aria-hidden="true" />
1262
+ <Volume2 class="size-icon" aria-hidden="true" />
1266
1263
  {/if}
1267
1264
  <span>{muteLabel}</span>
1268
1265
  </ContextMenu.Item>
@@ -1271,9 +1268,9 @@
1271
1268
  {#if showSpeed && !mobileMode}
1272
1269
  <ContextMenu.Sub>
1273
1270
  <ContextMenu.SubTrigger>
1274
- <Gauge class="size-(--era-h-icon)" aria-hidden="true" />
1271
+ <Gauge class="size-icon" aria-hidden="true" />
1275
1272
  <span class="flex-1">Speed</span>
1276
- <span class="ml-auto pl-(--era-gap) text-muted">
1273
+ <span class="ml-auto pl-gutter text-muted">
1277
1274
  {rateState === 1 ? '1x' : `${rateState}x`}
1278
1275
  </span>
1279
1276
  </ContextMenu.SubTrigger>
@@ -1295,9 +1292,9 @@
1295
1292
  {#if showQualityMenu && !mobileMode}
1296
1293
  <ContextMenu.Sub>
1297
1294
  <ContextMenu.SubTrigger>
1298
- <Settings class="size-(--era-h-icon)" aria-hidden="true" />
1295
+ <Settings class="size-icon" aria-hidden="true" />
1299
1296
  <span class="flex-1">Quality</span>
1300
- <span class="ml-auto pl-(--era-gap) text-muted">{qualityHint}</span>
1297
+ <span class="ml-auto pl-gutter text-muted">{qualityHint}</span>
1301
1298
  </ContextMenu.SubTrigger>
1302
1299
  <ContextMenu.SubContent>
1303
1300
  <ContextMenu.RadioGroup
@@ -1316,9 +1313,9 @@
1316
1313
  {#if showPip && canEnterPip && !mobileMode}
1317
1314
  <ContextMenu.Item onSelect={(e: Event) => remote.togglePictureInPicture(e)}>
1318
1315
  {#if pipState}
1319
- <PictureInPicture2 class="size-(--era-h-icon)" aria-hidden="true" />
1316
+ <PictureInPicture2 class="size-icon" aria-hidden="true" />
1320
1317
  {:else}
1321
- <PictureInPicture class="size-(--era-h-icon)" aria-hidden="true" />
1318
+ <PictureInPicture class="size-icon" aria-hidden="true" />
1322
1319
  {/if}
1323
1320
  <span>{pipState ? 'Exit picture-in-picture' : 'Picture-in-picture'}</span>
1324
1321
  </ContextMenu.Item>
@@ -1327,9 +1324,9 @@
1327
1324
  {#if canEnterFullscreen}
1328
1325
  <ContextMenu.Item onSelect={(e: Event) => remote.toggleFullscreen(FULLSCREEN_TARGET, e)}>
1329
1326
  {#if fullscreenState}
1330
- <Minimize class="size-(--era-h-icon)" aria-hidden="true" />
1327
+ <Minimize class="size-icon" aria-hidden="true" />
1331
1328
  {:else}
1332
- <Maximize class="size-(--era-h-icon)" aria-hidden="true" />
1329
+ <Maximize class="size-icon" aria-hidden="true" />
1333
1330
  {/if}
1334
1331
  <span>{fullscreenState ? 'Exit fullscreen' : 'Fullscreen'}</span>
1335
1332
  </ContextMenu.Item>
@@ -1338,7 +1335,7 @@
1338
1335
  <ContextMenu.Separator />
1339
1336
 
1340
1337
  <ContextMenu.Item onSelect={downloadVideo}>
1341
- <Download class="size-(--era-h-icon)" aria-hidden="true" />
1338
+ <Download class="size-icon" aria-hidden="true" />
1342
1339
  <span>Download video</span>
1343
1340
  </ContextMenu.Item>
1344
1341
  </ContextMenu.Content>
@@ -1361,7 +1358,7 @@
1361
1358
  bits-ui slider thumb is being dragged (its `data-active` is set on
1362
1359
  pointerdown and cleared on pointerup, even if the cursor strays
1363
1360
  outside the cluster). Plain CSS rather than Tailwind variants on the
1364
- button sidesteps cascade ambiguity with `rounded-(--era-rd-control)`. */
1361
+ button sidesteps cascade ambiguity with `rounded-control`. */
1365
1362
  :global([data-volume-cluster] [data-volume-sleeve]) {
1366
1363
  visibility: hidden;
1367
1364
  }
@@ -7,7 +7,7 @@ import { createTV } from 'tailwind-variants';
7
7
  // The rest teaches tailwind-merge era's named class API (styles/index.css):
8
8
  // values it can't know about (h-control, px-inset-control, gap-gutter, shadow-well, …)
9
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.
10
+ // fail to replace a component's h-control and both would apply.
11
11
  // Colors (bg-elevated, bg-highlight, …) need no entry — the bg group already
12
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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signal9/era-ui",
3
- "version": "10.0.0",
3
+ "version": "11.0.0",
4
4
  "scripts": {
5
5
  "dev": "vite dev --host",
6
6
  "build": "vite build && npm run prepack",
@@ -19,9 +19,10 @@
19
19
  "check:surfaces": "node --experimental-strip-types scripts/check-surfaces.ts",
20
20
  "check:tokens": "node --experimental-strip-types scripts/check-tokens.ts",
21
21
  "check:routes": "node --experimental-strip-types scripts/check-routes.ts",
22
+ "check:canonical": "node --experimental-strip-types scripts/check-canonical.ts",
22
23
  "build:llm-docs": "node --experimental-strip-types scripts/build-llm-docs.ts",
23
- "prebuild": "npm run check:surfaces && npm run check:tokens && npm run check:routes && npm run build:llm-docs",
24
- "validate": "npm run check && npm run lint && npm run format:check && npm run check:surfaces && npm run check:tokens && npm run check:routes",
24
+ "prebuild": "npm run check:surfaces && npm run check:tokens && npm run check:routes && npm run check:canonical && npm run build:llm-docs",
25
+ "validate": "npm run check && npm run lint && npm run format:check && npm run check:surfaces && npm run check:tokens && npm run check:routes && npm run check:canonical",
25
26
  "test": "npm run test:visual"
26
27
  },
27
28
  "files": [