@signal9/era-ui 10.1.0 → 12.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 (250) 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/inline-citation/inline-citation.svelte +5 -5
  23. package/dist/ai/loader.svelte +1 -4
  24. package/dist/ai/message/message-branch-selector.svelte +3 -3
  25. package/dist/ai/message/message-branch.svelte +1 -1
  26. package/dist/ai/message/message-content.svelte +1 -1
  27. package/dist/ai/message/message-toolbar.svelte +1 -1
  28. package/dist/ai/message/message-usage.svelte +5 -7
  29. package/dist/ai/message/message.svelte +1 -1
  30. package/dist/ai/model-selector/model-selector.svelte +2 -2
  31. package/dist/ai/open-in-chat/open-in-chat.svelte +2 -2
  32. package/dist/ai/plan/plan-content.svelte +1 -1
  33. package/dist/ai/plan/plan-header.svelte +2 -2
  34. package/dist/ai/plan/plan.svelte +1 -4
  35. package/dist/ai/prompt-input/prompt-input-add-attachments.svelte +1 -1
  36. package/dist/ai/prompt-input/prompt-input-attachments.svelte +5 -5
  37. package/dist/ai/prompt-input/prompt-input-submit.svelte +2 -2
  38. package/dist/ai/prompt-input/prompt-input-textarea.svelte +2 -2
  39. package/dist/ai/prompt-input/prompt-input-toolbar.svelte +1 -1
  40. package/dist/ai/prompt-input/prompt-input.svelte +1 -1
  41. package/dist/ai/queue/queue-item.svelte +1 -1
  42. package/dist/ai/queue/queue.svelte +1 -1
  43. package/dist/ai/reasoning/reasoning-trigger.svelte +1 -1
  44. package/dist/ai/response/response.svelte +1 -1
  45. package/dist/ai/run-status/run-status.svelte +5 -10
  46. package/dist/ai/runtime-feed/runtime-feed-item.svelte +1 -4
  47. package/dist/ai/runtime-feed/runtime-feed-root.svelte +1 -1
  48. package/dist/ai/sources/source.svelte +2 -2
  49. package/dist/ai/sources/sources-trigger.svelte +1 -1
  50. package/dist/ai/structured-value/structured-value.svelte +4 -4
  51. package/dist/ai/suggestion/suggestion.svelte +1 -1
  52. package/dist/ai/suggestion/suggestions.svelte +1 -1
  53. package/dist/ai/swarm/swarm-agent.svelte +3 -3
  54. package/dist/ai/swarm/swarm-artifact.svelte +2 -2
  55. package/dist/ai/swarm/swarm-barrier.svelte +3 -3
  56. package/dist/ai/swarm/swarm-barriers.svelte +1 -4
  57. package/dist/ai/swarm/swarm-counts.svelte +2 -2
  58. package/dist/ai/swarm/swarm-footer.svelte +2 -2
  59. package/dist/ai/swarm/swarm-grid.svelte +2 -2
  60. package/dist/ai/swarm/swarm-header.svelte +2 -2
  61. package/dist/ai/swarm/swarm-node.svelte +7 -9
  62. package/dist/ai/swarm/swarm-role.svelte +2 -2
  63. package/dist/ai/swarm/swarm-root.svelte +1 -4
  64. package/dist/ai/swarm/swarm-sandbox.svelte +4 -7
  65. package/dist/ai/swarm/swarm-tree.svelte +2 -2
  66. package/dist/ai/task/task-content.svelte +1 -4
  67. package/dist/ai/task/task-trigger.svelte +1 -1
  68. package/dist/ai/tool/tool-chip.svelte +3 -3
  69. package/dist/ai/tool/tool-chips.svelte +3 -3
  70. package/dist/ai/tool/tool-exec.svelte +4 -4
  71. package/dist/ai/tool/tool-header.svelte +1 -1
  72. package/dist/ai/web-preview/web-preview.svelte +4 -9
  73. package/dist/ai/workflow/canvas.svelte +1 -1
  74. package/dist/ai/workflow/node.svelte +3 -3
  75. package/dist/apps/llm-shell/llm-shell.svelte +4 -4
  76. package/dist/apps/notes/notes.svelte +8 -8
  77. package/dist/dev/audit/audits/even-container-padding.js +2 -2
  78. package/dist/dev/audit/audits/single-glyph-square.js +2 -2
  79. package/dist/dev/audit-overlay.svelte +7 -7
  80. package/dist/docs/css-utilities.d.ts +31 -0
  81. package/dist/docs/css-utilities.js +141 -7
  82. package/dist/docs/quickstart.md +5 -5
  83. package/dist/era-ui.css +1 -1
  84. package/dist/generated-docs/llms-full.txt +359 -94
  85. package/dist/generated-docs/llms.txt +18 -7
  86. package/dist/generated-docs/manifest.json +355 -49
  87. package/dist/generated-docs/utilities.json +336 -41
  88. package/dist/generated-docs/utilities.md +341 -87
  89. package/dist/os/notification-center.svelte +11 -17
  90. package/dist/os/pane-manager.svelte.d.ts +1 -1
  91. package/dist/os/pane.svelte +4 -6
  92. package/dist/os/taskbar.svelte +13 -18
  93. package/dist/os/toast.svelte +6 -11
  94. package/dist/os/toaster.svelte +1 -1
  95. package/dist/styles/density.css +0 -2
  96. package/dist/styles/index.css +117 -79
  97. package/dist/styles/themes.css +49 -42
  98. package/dist/ui/accordion/accordion-content.svelte +1 -1
  99. package/dist/ui/accordion/accordion-trigger.svelte +2 -2
  100. package/dist/ui/alert-dialog/alert-dialog-content.svelte +2 -2
  101. package/dist/ui/alert-dialog/alert-dialog-overlay.svelte +1 -1
  102. package/dist/ui/aspect-ratio/aspect-ratio.svelte +1 -5
  103. package/dist/ui/avatar/avatar-fallback.svelte +1 -1
  104. package/dist/ui/avatar/avatar-root.svelte +1 -1
  105. package/dist/ui/badge/badge.svelte +1 -1
  106. package/dist/ui/badge/badge.svelte.d.ts +1 -1
  107. package/dist/ui/bar/bar.svelte +7 -7
  108. package/dist/ui/bar/bar.svelte.d.ts +15 -15
  109. package/dist/ui/button/button.svelte +1 -1
  110. package/dist/ui/button/variants.d.ts +4 -4
  111. package/dist/ui/button/variants.js +18 -18
  112. package/dist/ui/button-group/button-group.svelte +2 -2
  113. package/dist/ui/calendar/calendar-day.svelte +1 -1
  114. package/dist/ui/calendar/calendar-grid-row.svelte +1 -1
  115. package/dist/ui/calendar/calendar-grid.svelte +1 -1
  116. package/dist/ui/calendar/calendar-head-cell.svelte +1 -1
  117. package/dist/ui/calendar/calendar-header.svelte +1 -1
  118. package/dist/ui/calendar/calendar-next-button.svelte +1 -1
  119. package/dist/ui/calendar/calendar-prev-button.svelte +1 -1
  120. package/dist/ui/calendar/calendar-root.svelte +1 -1
  121. package/dist/ui/card/card.svelte +10 -10
  122. package/dist/ui/card/card.svelte.d.ts +16 -16
  123. package/dist/ui/checkbox/checkbox-group.svelte +1 -1
  124. package/dist/ui/checkbox/checkbox.svelte +1 -1
  125. package/dist/ui/chip/chip.svelte +7 -9
  126. package/dist/ui/chip/chip.svelte.d.ts +7 -7
  127. package/dist/ui/code-block/code-block.svelte +3 -9
  128. package/dist/ui/collapsible/collapsible-trigger.svelte +1 -1
  129. package/dist/ui/combobox/combobox-content.svelte +1 -1
  130. package/dist/ui/combobox/combobox-empty.svelte +1 -6
  131. package/dist/ui/combobox/combobox-group-heading.svelte +1 -4
  132. package/dist/ui/combobox/combobox-input.svelte +1 -1
  133. package/dist/ui/combobox/combobox-item.svelte +1 -1
  134. package/dist/ui/combobox/combobox-trigger.svelte +2 -2
  135. package/dist/ui/command/command-group-heading.svelte +1 -4
  136. package/dist/ui/command/command-group-items.svelte +1 -5
  137. package/dist/ui/command/command-item.svelte +1 -1
  138. package/dist/ui/command/command-link-item.svelte +1 -1
  139. package/dist/ui/command/command-root.svelte +2 -2
  140. package/dist/ui/command/command-viewport.svelte +1 -1
  141. package/dist/ui/command-bar/command-bar.svelte +9 -13
  142. package/dist/ui/context-menu/context-menu-checkbox-item.svelte +1 -1
  143. package/dist/ui/context-menu/context-menu-content.svelte +2 -2
  144. package/dist/ui/context-menu/context-menu-group-heading.svelte +1 -4
  145. package/dist/ui/context-menu/context-menu-item.svelte +1 -1
  146. package/dist/ui/context-menu/context-menu-radio-item.svelte +1 -1
  147. package/dist/ui/context-menu/context-menu-sub-content.svelte +1 -1
  148. package/dist/ui/context-menu/context-menu-sub-trigger.svelte +2 -2
  149. package/dist/ui/copy-button/copy-button.svelte +2 -2
  150. package/dist/ui/cycle/cycle.svelte +2 -2
  151. package/dist/ui/date-field/date-field-segment.svelte +1 -1
  152. package/dist/ui/date-picker/date-picker-calendar.svelte +1 -1
  153. package/dist/ui/date-picker/date-picker-content.svelte +1 -4
  154. package/dist/ui/date-picker/date-picker-day.svelte +1 -1
  155. package/dist/ui/date-picker/date-picker-grid-row.svelte +1 -1
  156. package/dist/ui/date-picker/date-picker-grid.svelte +1 -1
  157. package/dist/ui/date-picker/date-picker-head-cell.svelte +1 -1
  158. package/dist/ui/date-picker/date-picker-header.svelte +1 -1
  159. package/dist/ui/date-picker/date-picker-next-button.svelte +1 -1
  160. package/dist/ui/date-picker/date-picker-prev-button.svelte +1 -1
  161. package/dist/ui/date-picker/date-picker-segment.svelte +1 -1
  162. package/dist/ui/date-picker/date-picker-trigger.svelte +2 -2
  163. package/dist/ui/date-range-field/date-range-field-segment.svelte +1 -1
  164. package/dist/ui/date-range-picker/date-range-picker-calendar.svelte +1 -1
  165. package/dist/ui/date-range-picker/date-range-picker-content.svelte +1 -4
  166. package/dist/ui/date-range-picker/date-range-picker-day.svelte +1 -1
  167. package/dist/ui/date-range-picker/date-range-picker-grid-row.svelte +1 -1
  168. package/dist/ui/date-range-picker/date-range-picker-grid.svelte +1 -5
  169. package/dist/ui/date-range-picker/date-range-picker-head-cell.svelte +1 -1
  170. package/dist/ui/date-range-picker/date-range-picker-header.svelte +1 -1
  171. package/dist/ui/date-range-picker/date-range-picker-next-button.svelte +1 -1
  172. package/dist/ui/date-range-picker/date-range-picker-prev-button.svelte +1 -1
  173. package/dist/ui/date-range-picker/date-range-picker-segment.svelte +1 -1
  174. package/dist/ui/date-range-picker/date-range-picker-trigger.svelte +2 -2
  175. package/dist/ui/dialog/dialog-content.svelte +3 -5
  176. package/dist/ui/dialog/dialog-header.svelte +1 -6
  177. package/dist/ui/dialog/dialog-overlay.svelte +1 -5
  178. package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
  179. package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +2 -2
  180. package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -4
  181. package/dist/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  182. package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  183. package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  184. package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
  185. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +2 -2
  186. package/dist/ui/file-upload/file-upload.svelte +2 -2
  187. package/dist/ui/input/input.svelte +2 -2
  188. package/dist/ui/input/textarea.svelte +1 -1
  189. package/dist/ui/input/variants.d.ts +18 -18
  190. package/dist/ui/input/variants.js +6 -6
  191. package/dist/ui/kv/kv.svelte +2 -3
  192. package/dist/ui/link-preview/link-preview-content.svelte +1 -1
  193. package/dist/ui/menubar/menubar-checkbox-item.svelte +1 -1
  194. package/dist/ui/menubar/menubar-content.svelte +2 -2
  195. package/dist/ui/menubar/menubar-group-heading.svelte +1 -4
  196. package/dist/ui/menubar/menubar-item.svelte +1 -1
  197. package/dist/ui/menubar/menubar-radio-item.svelte +1 -1
  198. package/dist/ui/menubar/menubar-root.svelte +1 -4
  199. package/dist/ui/menubar/menubar-sub-content.svelte +1 -1
  200. package/dist/ui/menubar/menubar-sub-trigger.svelte +2 -2
  201. package/dist/ui/menubar/menubar-trigger.svelte +1 -1
  202. package/dist/ui/meter/meter.svelte +2 -2
  203. package/dist/ui/pagination/pagination-next-button.svelte +1 -1
  204. package/dist/ui/pagination/pagination-prev-button.svelte +1 -1
  205. package/dist/ui/pagination/pagination-root.svelte +1 -1
  206. package/dist/ui/pane/pane-content.svelte +1 -1
  207. package/dist/ui/pane/pane-root.svelte +1 -1
  208. package/dist/ui/pane/pane-tab-list.svelte +1 -1
  209. package/dist/ui/pane/pane-tab-panel.svelte +1 -1
  210. package/dist/ui/pane/pane-tab.svelte +1 -1
  211. package/dist/ui/pane/pane.svelte +1 -1
  212. package/dist/ui/pin-input/pin-input-cell.svelte +1 -1
  213. package/dist/ui/popover/popover-content.svelte +1 -1
  214. package/dist/ui/popover/popover-trigger.svelte +1 -4
  215. package/dist/ui/progress/progress.svelte +2 -2
  216. package/dist/ui/radio-group/radio-group-item.svelte +2 -2
  217. package/dist/ui/radio-group/radio-group-root.svelte +1 -1
  218. package/dist/ui/rating-group/rating-group-item.svelte +1 -1
  219. package/dist/ui/rating-group/rating-group-root.svelte +1 -1
  220. package/dist/ui/scroll-area/scroll-area-scrollbar.svelte +1 -1
  221. package/dist/ui/scroll-area/scroll-area-thumb.svelte +1 -1
  222. package/dist/ui/scroll-area/scroll-area.svelte +1 -1
  223. package/dist/ui/select/select-content.svelte +7 -6
  224. package/dist/ui/select/select-group-heading.svelte +1 -4
  225. package/dist/ui/select/select-item.svelte +1 -1
  226. package/dist/ui/select/select-trigger.svelte +2 -2
  227. package/dist/ui/select/select-value.svelte +1 -1
  228. package/dist/ui/separator/separator.svelte +1 -1
  229. package/dist/ui/sheet/sheet-content.svelte +3 -3
  230. package/dist/ui/sheet/sheet-content.svelte.d.ts +4 -4
  231. package/dist/ui/skeleton/skeleton.svelte +4 -4
  232. package/dist/ui/skeleton/skeleton.svelte.d.ts +10 -10
  233. package/dist/ui/slider/slider-range.svelte +1 -1
  234. package/dist/ui/slider/slider-thumb.svelte +1 -1
  235. package/dist/ui/slider/slider-tick.svelte +1 -1
  236. package/dist/ui/step/step-content.svelte +1 -1
  237. package/dist/ui/step/step-section.svelte +1 -1
  238. package/dist/ui/step/step-summary.svelte +7 -7
  239. package/dist/ui/switch/switch.svelte +2 -2
  240. package/dist/ui/table/table-cell.svelte +1 -1
  241. package/dist/ui/table/table-head-cell.svelte +1 -1
  242. package/dist/ui/table/table-row.svelte +1 -1
  243. package/dist/ui/time-field/time-field-segment.svelte +1 -1
  244. package/dist/ui/time-range-field/time-range-field-segment.svelte +1 -1
  245. package/dist/ui/toggle-group/toggle-group-item.svelte +1 -1
  246. package/dist/ui/toggle-group/toggle-group-root.svelte +1 -1
  247. package/dist/ui/tooltip/tooltip-content.svelte +1 -1
  248. package/dist/ui/video-player/video-player.svelte +44 -47
  249. package/dist/utils/index.js +1 -1
  250. package/package.json +4 -3
@@ -10,6 +10,6 @@
10
10
  }: HTMLAttributes<HTMLDivElement> & { children?: Snippet } = $props();
11
11
  </script>
12
12
 
13
- <div class={cn('flex items-center gap-(--era-gap)', className)} {...restProps}>
13
+ <div class={cn('flex items-center gap-gutter', className)} {...restProps}>
14
14
  {@render children?.()}
15
15
  </div>
@@ -4,6 +4,6 @@
4
4
  let { children, class: className }: { children?: Snippet; class?: string } = $props();
5
5
  </script>
6
6
 
7
- <div class={cn('flex shrink-0 items-center gap-(--era-gap)', className)}>
7
+ <div class={cn('flex shrink-0 items-center gap-gutter', className)}>
8
8
  {@render children?.()}
9
9
  </div>
@@ -6,7 +6,7 @@
6
6
 
7
7
  <!-- size="pill", the close-affordance tier (Pane.Close, the chip dismiss): an
8
8
  18px hit target whose tier draws the 12px dismiss ink by itself. The <X>
9
- used to carry size-(--era-h-icon) — a class the Button variant's [&_svg]
9
+ used to carry size-icon — a class the Button variant's [&_svg]
10
10
  selector outranks, so it claimed 14px while 10 shipped. -->
11
11
  <Button icon size="pill" aria-label="Close" {onclick}>
12
12
  <X />
@@ -4,6 +4,6 @@
4
4
  let { children, class: className }: { children?: Snippet; class?: string } = $props();
5
5
  </script>
6
6
 
7
- <div class={cn('min-h-0 flex-1 overflow-auto p-(--era-pad-card)', className)}>
7
+ <div class={cn('min-h-0 flex-1 overflow-auto p-card', className)}>
8
8
  {@render children?.()}
9
9
  </div>
@@ -11,7 +11,7 @@
11
11
 
12
12
  <div
13
13
  class={cn(
14
- 'flex h-(--era-h-bar) shrink-0 items-center justify-between gap-(--era-gap) border-b border-divider-faded px-(--era-pad-panel)',
14
+ 'flex h-bar shrink-0 items-center justify-between gap-gutter border-b border-divider-faded px-panel',
15
15
  className
16
16
  )}
17
17
  {...restProps}
@@ -10,10 +10,7 @@
10
10
  </script>
11
11
 
12
12
  <div
13
- class={cn(
14
- 'flex min-h-0 flex-col overflow-hidden rounded-(--era-rd-bar) bg-(--era-surface-bg) shadow-(--era-shadow-lg)',
15
- className
16
- )}
13
+ class={cn('flex min-h-0 flex-col overflow-hidden rounded-bar bg-well shadow-lg', className)}
17
14
  {...restProps}
18
15
  >
19
16
  {@render children?.()}
@@ -21,11 +21,11 @@
21
21
 
22
22
  <!-- One reasoning step on the rail: icon column with a connector line, label
23
23
  colored by status (active steps read brighter). -->
24
- <div class="flex min-w-0 gap-(--era-gap)">
24
+ <div class="flex min-w-0 gap-gutter">
25
25
  <div class="flex flex-col items-center">
26
26
  <Icon
27
27
  class={cn(
28
- 'size-(--era-h-icon) shrink-0',
28
+ 'size-icon shrink-0',
29
29
  status === 'active'
30
30
  ? 'text-bright'
31
31
  : status === 'pending'
@@ -36,7 +36,7 @@
36
36
  />
37
37
  <span class="w-px flex-1 bg-divider-faded"></span>
38
38
  </div>
39
- <div class="flex min-w-0 flex-col gap-1 pb-(--era-gap)">
39
+ <div class="flex min-w-0 flex-col gap-1 pb-gutter">
40
40
  <span class={cn('text-body', status === 'active' ? 'text-bright' : 'text-fg')}>{label}</span>
41
41
  {#if description}<span class="text-body text-muted">{description}</span>{/if}
42
42
  </div>
@@ -21,7 +21,7 @@
21
21
 
22
22
  <Step.Root status={streaming ? 'running' : 'done'} bind:open class={cn(className)}>
23
23
  <Step.Summary>
24
- <Brain class="size-(--era-h-icon) shrink-0" aria-hidden="true" />
24
+ <Brain class="size-icon shrink-0" aria-hidden="true" />
25
25
  {label}
26
26
  </Step.Summary>
27
27
  <Step.Content class="bg-transparent p-0 shadow-none">
@@ -18,8 +18,8 @@
18
18
  } = $props();
19
19
  </script>
20
20
 
21
- <div class={cn('flex w-full items-center gap-(--era-gap) text-muted', className)}>
22
- <Bookmark class="size-(--era-h-icon) shrink-0" aria-hidden="true" />
21
+ <div class={cn('flex w-full items-center gap-gutter text-muted', className)}>
22
+ <Bookmark class="size-icon shrink-0" aria-hidden="true" />
23
23
  <Button variant="link" size="chip" onclick={onRestore}>
24
24
  {#if children}{@render children()}{:else}{label}{/if}
25
25
  </Button>
@@ -4,6 +4,6 @@
4
4
  let { children, class: className }: { children?: Snippet; class?: string } = $props();
5
5
  </script>
6
6
 
7
- <div class={cn('flex items-center justify-end gap-(--era-gap)', className)}>
7
+ <div class={cn('flex items-center justify-end gap-gutter', className)}>
8
8
  {@render children?.()}
9
9
  </div>
@@ -16,7 +16,7 @@
16
16
  const jsonText = $state<Record<string, string>>({});
17
17
  </script>
18
18
 
19
- <div class={cn('flex min-w-0 flex-col gap-(--era-gap)', className)}>
19
+ <div class={cn('flex min-w-0 flex-col gap-gutter', className)}>
20
20
  {#if ctrl.entries.length === 0}
21
21
  <span class="text-body text-muted">No arguments</span>
22
22
  {:else}
@@ -24,8 +24,8 @@
24
24
  {@const kind = ctrl.kindOf(key)}
25
25
  <div
26
26
  class={cn(
27
- 'flex min-w-0 flex-col gap-(--era-gap)',
28
- ctrl.isDirty(key) && 'border-warning border-s-2 ps-(--era-pad-panel)'
27
+ 'flex min-w-0 flex-col gap-gutter',
28
+ ctrl.isDirty(key) && 'border-warning border-s-2 ps-panel'
29
29
  )}
30
30
  >
31
31
  <span class="text-[0.625rem] leading-none tracking-[0.15em] text-muted uppercase"
@@ -46,7 +46,7 @@
46
46
  }}
47
47
  spellcheck={false}
48
48
  class={cn(
49
- 'min-h-(--era-h-bar) font-mono text-body',
49
+ 'min-h-bar font-mono text-body',
50
50
  !ctrl.isValid(key) && 'border border-destructive'
51
51
  )}
52
52
  />
@@ -18,18 +18,15 @@
18
18
  </script>
19
19
 
20
20
  <div
21
- class={cn(
22
- 'flex min-w-0 flex-col gap-(--era-gap) rounded-(--era-rd-bar) bg-(--era-surface-bg) p-(--era-pad-panel) shadow-(--era-shadow)',
23
- className
24
- )}
21
+ class={cn('flex min-w-0 flex-col gap-gutter rounded-bar bg-well p-panel shadow-sm', className)}
25
22
  >
26
- <div class="flex items-center gap-(--era-gap) text-body">
23
+ <div class="flex items-center gap-gutter text-body">
27
24
  {#if approval === 'requested'}
28
- <ShieldQuestion class="size-(--era-h-icon) shrink-0 text-warning" aria-hidden="true" />
25
+ <ShieldQuestion class="size-icon shrink-0 text-warning" aria-hidden="true" />
29
26
  {:else if approval === 'approved'}
30
- <CircleCheck class="size-(--era-h-icon) shrink-0 text-success" aria-hidden="true" />
27
+ <CircleCheck class="size-icon shrink-0 text-success" aria-hidden="true" />
31
28
  {:else}
32
- <CircleX class="size-(--era-h-icon) shrink-0 text-destructive" aria-hidden="true" />
29
+ <CircleX class="size-icon shrink-0 text-destructive" aria-hidden="true" />
33
30
  {/if}
34
31
  <div class="min-w-0 flex-1 text-fg">{@render children?.()}</div>
35
32
  </div>
@@ -23,9 +23,9 @@
23
23
  </script>
24
24
 
25
25
  <Popover.Root>
26
- <Popover.Trigger size="chip" class={cn('gap-(--era-gap) tabular-nums', className)}>
26
+ <Popover.Trigger size="chip" class={cn('gap-gutter tabular-nums', className)}>
27
27
  {Math.round(percent * 100)}%
28
- <svg viewBox="0 0 24 24" class="size-(--era-h-icon) -rotate-90" aria-hidden="true">
28
+ <svg viewBox="0 0 24 24" class="size-icon -rotate-90" aria-hidden="true">
29
29
  <circle cx="12" cy="12" r="10" fill="none" stroke="var(--color-3)" stroke-width="3" />
30
30
  <circle
31
31
  cx="12"
@@ -40,7 +40,7 @@
40
40
  />
41
41
  </svg>
42
42
  </Popover.Trigger>
43
- <Popover.Content align="end" class="flex w-56 flex-col gap-(--era-gap)">
43
+ <Popover.Content align="end" class="flex w-56 flex-col gap-gutter">
44
44
  {#if modelId}<p class="text-body text-muted">{modelId}</p>{/if}
45
45
  <KV key="used" value={fmt.format(usedTokens)} />
46
46
  <KV key="max" value={fmt.format(maxTokens)} />
@@ -24,10 +24,7 @@
24
24
  >
25
25
  <div
26
26
  {@attach stick.content}
27
- class={cn(
28
- 'mx-auto flex w-full max-w-2xl flex-col gap-(--era-pad-content) p-(--era-pad-card)',
29
- className
30
- )}
27
+ class={cn('mx-auto flex w-full max-w-2xl flex-col gap-content p-card', className)}
31
28
  {...restProps}
32
29
  >
33
30
  {@render children?.()}
@@ -20,7 +20,7 @@
20
20
 
21
21
  <div
22
22
  class={cn(
23
- 'flex flex-1 flex-col items-center justify-center gap-(--era-gap) p-(--era-pad-content) text-center',
23
+ 'flex flex-1 flex-col items-center justify-center gap-gutter p-content text-center',
24
24
  className
25
25
  )}
26
26
  {...restProps}
@@ -11,17 +11,17 @@
11
11
 
12
12
  {#if !stick.pinned}
13
13
  <div
14
- class={cn('absolute bottom-(--era-pad-panel) left-1/2 z-10 -translate-x-1/2', className)}
14
+ class={cn('absolute bottom-panel left-1/2 z-10 -translate-x-1/2', className)}
15
15
  transition:eraFly={{ y: 8 }}
16
16
  >
17
17
  <Button
18
18
  icon
19
19
  size="control"
20
20
  aria-label="Scroll to bottom"
21
- class="rounded-full shadow-(--era-shadow-lg)"
21
+ class="rounded-full shadow-lg"
22
22
  onclick={() => stick.repin()}
23
23
  >
24
- <ArrowDown class="size-(--era-h-icon)" />
24
+ <ArrowDown class="size-icon" />
25
25
  </Button>
26
26
  </div>
27
27
  {/if}
@@ -16,10 +16,10 @@
16
16
  </script>
17
17
 
18
18
  <!-- A time-bucket section: the step-section label idiom over its stack of rows. -->
19
- <div class={cn('flex min-w-0 flex-col gap-(--era-gap)', className)} {...restProps}>
19
+ <div class={cn('flex min-w-0 flex-col gap-gutter', className)} {...restProps}>
20
20
  {#if label}
21
21
  <span
22
- class="px-(--era-inset-control) text-[0.625rem] era-text-trim-caps leading-none tracking-[0.15em] text-muted uppercase"
22
+ class="px-inset-control text-[0.625rem] era-text-trim-caps leading-none tracking-[0.15em] text-muted uppercase"
23
23
  >
24
24
  {label}
25
25
  </span>
@@ -144,10 +144,10 @@
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-(--era-h-control) items-center gap-(--era-gap) rounded-(--era-rd-control) pr-(--era-pill-inset-control) pl-(--era-inset-control) text-body',
147
+ 'group/row relative flex h-control items-center gap-gutter rounded-control pr-pill-inset-control pl-inset-control text-body',
148
148
  active
149
149
  ? 'bg-hover text-bright'
150
- : 'text-fg hover:bg-(--era-highlight) hover:shadow-(--era-highlight-shadow) has-[[data-rail]:hover]:bg-transparent has-[[data-rail]:hover]:shadow-none',
150
+ : 'text-fg hover:bg-highlight hover:shadow-highlight has-[[data-rail]:hover]:bg-transparent has-[[data-rail]:hover]:shadow-none',
151
151
  className
152
152
  )}
153
153
  onmouseleave={disarm}
@@ -157,7 +157,7 @@
157
157
  {#if leading}
158
158
  {@render leading()}
159
159
  {:else}
160
- <MessageSquare class="size-(--era-h-icon) shrink-0 text-muted" aria-hidden="true" />
160
+ <MessageSquare class="size-icon shrink-0 text-muted" aria-hidden="true" />
161
161
  {/if}
162
162
 
163
163
  {#if status}
@@ -199,7 +199,7 @@
199
199
  button, which should keep the row highlighted. -->
200
200
  <div
201
201
  data-rail
202
- class="flex shrink-0 items-center gap-(--era-gap) opacity-0 group-hover/row:opacity-100 focus-within:opacity-100"
202
+ class="flex shrink-0 items-center gap-gutter opacity-0 group-hover/row:opacity-100 focus-within:opacity-100"
203
203
  >
204
204
  <Button
205
205
  icon
@@ -208,12 +208,12 @@
208
208
  aria-pressed={starred}
209
209
  onclick={toggleStar}
210
210
  >
211
- <Star class={cn('size-(--era-h-icon)', starred && 'fill-warning text-warning')} />
211
+ <Star class={cn('size-icon', starred && 'fill-warning text-warning')} />
212
212
  </Button>
213
213
 
214
214
  {#if showCancel}
215
215
  <Button icon size="pill" aria-label="Cancel generation" onclick={() => onCancel?.()}>
216
- <X class="size-(--era-h-icon)" />
216
+ <X class="size-icon" />
217
217
  </Button>
218
218
  {/if}
219
219
 
@@ -226,9 +226,9 @@
226
226
  onclick={onDeleteClick}
227
227
  >
228
228
  {#if armed}
229
- <Check class="size-(--era-h-icon)" />
229
+ <Check class="size-icon" />
230
230
  {:else}
231
- <Trash2 class="size-(--era-h-icon)" />
231
+ <Trash2 class="size-icon" />
232
232
  {/if}
233
233
  </Button>
234
234
  </div>
@@ -17,11 +17,11 @@
17
17
 
18
18
  <!-- The rail: a sticky header slot over a chromeless scroll column. min-h-0 lets
19
19
  the list shrink inside a flex parent so only the list scrolls, not the page. -->
20
- <div class={cn('flex min-h-0 flex-col gap-(--era-gap)', className)} {...restProps}>
20
+ <div class={cn('flex min-h-0 flex-col gap-gutter', className)} {...restProps}>
21
21
  {#if header}
22
22
  <div class="shrink-0">{@render header()}</div>
23
23
  {/if}
24
- <div class="scrollbar-none flex min-h-0 flex-1 flex-col gap-(--era-gap) overflow-y-auto">
24
+ <div class="scrollbar-none flex min-h-0 flex-1 flex-col gap-gutter overflow-y-auto">
25
25
  {@render children?.()}
26
26
  </div>
27
27
  </div>
@@ -54,9 +54,9 @@
54
54
 
55
55
  {#snippet head()}
56
56
  {#if info.tone === 'warning'}
57
- <TriangleAlert class="size-(--era-h-icon) shrink-0 text-warning" aria-hidden="true" />
57
+ <TriangleAlert class="size-icon shrink-0 text-warning" aria-hidden="true" />
58
58
  {:else}
59
- <CircleX class="size-(--era-h-icon) shrink-0 text-destructive" aria-hidden="true" />
59
+ <CircleX class="size-icon shrink-0 text-destructive" aria-hidden="true" />
60
60
  {/if}
61
61
  <span class="min-w-0 flex-1 truncate text-fg">{summary}</span>
62
62
  {/snippet}
@@ -65,7 +65,7 @@
65
65
  bind:open
66
66
  data-tone={info.tone}
67
67
  class={cn(
68
- 'group/error flex min-w-0 flex-col gap-(--era-gap) rounded-(--era-rd-bar) bg-(--era-surface-bg) p-(--era-pad-panel) shadow-(--era-shadow)',
68
+ 'group/error flex min-w-0 flex-col gap-gutter rounded-bar bg-well p-panel shadow-sm',
69
69
  className
70
70
  )}
71
71
  {...restProps}
@@ -73,16 +73,16 @@
73
73
  {#if showDetail}
74
74
  <!-- The whole summary row toggles the raw detail; quiet until hovered. -->
75
75
  <Collapsible.Trigger
76
- class="flex w-full min-w-0 era-interactive cursor-pointer items-center gap-(--era-gap) text-body text-muted"
76
+ class="flex w-full min-w-0 era-interactive cursor-pointer items-center gap-gutter text-body text-muted"
77
77
  >
78
78
  {@render head()}
79
79
  <ChevronDown
80
- class="size-(--era-h-icon) shrink-0 transition-transform duration-(--era-duration) ease-(--era-ease) group-data-[state=open]/error:rotate-180"
80
+ class="size-icon shrink-0 transition-transform duration-base ease-base group-data-[state=open]/error:rotate-180"
81
81
  aria-hidden="true"
82
82
  />
83
83
  </Collapsible.Trigger>
84
84
  {:else}
85
- <div class="flex min-w-0 items-center gap-(--era-gap) text-body">
85
+ <div class="flex min-w-0 items-center gap-gutter text-body">
86
86
  {@render head()}
87
87
  </div>
88
88
  {/if}
@@ -93,7 +93,7 @@
93
93
 
94
94
  {#if showDetail}
95
95
  <Collapsible.Content class="era-collapse">
96
- <div class="pt-(--era-gap)">
96
+ <div class="pt-gutter">
97
97
  <CodeBlock code={rawDetail} />
98
98
  </div>
99
99
  </Collapsible.Content>
@@ -14,6 +14,6 @@
14
14
  <img
15
15
  src="data:{mediaType};base64,{base64}"
16
16
  {alt}
17
- class={cn('max-w-full rounded-(--era-rd-control) shadow-(--era-shadow)', className)}
17
+ class={cn('max-w-full rounded-control shadow-sm', className)}
18
18
  {...restProps}
19
19
  />
@@ -40,18 +40,18 @@
40
40
  >{host(sources[0]?.href ?? '')}{sources.length > 1 ? ` +${sources.length - 1}` : ''}</Badge
41
41
  >
42
42
  </LinkPreview.Trigger>
43
- <LinkPreview.Content class="flex w-72 flex-col gap-(--era-gap)">
43
+ <LinkPreview.Content class="flex w-72 flex-col gap-gutter">
44
44
  {#if sources.length > 1}
45
45
  <div class="flex items-center justify-between">
46
46
  <span class="text-body text-muted tabular-nums">{index + 1} of {sources.length}</span>
47
- <div class="flex gap-(--era-gap)">
47
+ <div class="flex gap-gutter">
48
48
  <Button
49
49
  icon
50
50
  size="icon"
51
51
  aria-label="Previous source"
52
52
  onclick={() => (index = (index - 1 + sources.length) % sources.length)}
53
53
  >
54
- <ChevronLeft class="size-(--era-h-icon)" />
54
+ <ChevronLeft class="size-icon" />
55
55
  </Button>
56
56
  <Button
57
57
  icon
@@ -59,7 +59,7 @@
59
59
  aria-label="Next source"
60
60
  onclick={() => (index = (index + 1) % sources.length)}
61
61
  >
62
- <ChevronRight class="size-(--era-h-icon)" />
62
+ <ChevronRight class="size-icon" />
63
63
  </Button>
64
64
  </div>
65
65
  </div>
@@ -74,7 +74,7 @@
74
74
  {active.title ?? active.href}
75
75
  </a>
76
76
  {#if active.quote}
77
- <blockquote class="border-divider-faded border-s-2 ps-(--era-gap) text-body text-muted">
77
+ <blockquote class="border-divider-faded border-s-2 ps-gutter text-body text-muted">
78
78
  {active.quote}
79
79
  </blockquote>
80
80
  {/if}
@@ -5,7 +5,4 @@
5
5
  let { class: className }: { class?: string } = $props();
6
6
  </script>
7
7
 
8
- <LoaderCircle
9
- class={cn('size-(--era-h-icon) animate-spin text-muted', className)}
10
- aria-label="Loading"
11
- />
8
+ <LoaderCircle class={cn('size-icon animate-spin text-muted', className)} aria-label="Loading" />
@@ -13,13 +13,13 @@
13
13
  {#if ctrl.total > 1}
14
14
  <ButtonGroup class={cn(className)}>
15
15
  <Button icon size="chip" aria-label="Previous version" onclick={() => ctrl.previous()}>
16
- <ChevronLeft class="size-(--era-h-icon)" />
16
+ <ChevronLeft class="size-icon" />
17
17
  </Button>
18
- <span class="flex items-center px-(--era-inset-chip) text-body text-muted tabular-nums">
18
+ <span class="flex items-center px-inset-chip text-body text-muted tabular-nums">
19
19
  {ctrl.current + 1} of {ctrl.total}
20
20
  </span>
21
21
  <Button icon size="chip" aria-label="Next version" onclick={() => ctrl.next()}>
22
- <ChevronRight class="size-(--era-h-icon)" />
22
+ <ChevronRight class="size-icon" />
23
23
  </Button>
24
24
  </ButtonGroup>
25
25
  {/if}
@@ -20,6 +20,6 @@
20
20
  });
21
21
  </script>
22
22
 
23
- <div class={cn('flex min-w-0 flex-col gap-(--era-gap)', className)} {...restProps}>
23
+ <div class={cn('flex min-w-0 flex-col gap-gutter', className)} {...restProps}>
24
24
  {@render children?.()}
25
25
  </div>
@@ -17,7 +17,7 @@
17
17
  <div
18
18
  class={cn(
19
19
  'min-w-0 text-body leading-body text-fg',
20
- 'group-data-[role=user]/message:max-w-[80%] group-data-[role=user]/message:rounded-(--era-rd-control) group-data-[role=user]/message:bg-(--era-surface-bg-elevated) group-data-[role=user]/message:p-(--era-pad-panel) group-data-[role=user]/message:whitespace-pre-wrap group-data-[role=user]/message:shadow-(--era-shadow)',
20
+ 'group-data-[role=user]/message:max-w-[80%] group-data-[role=user]/message:rounded-control group-data-[role=user]/message:bg-elevated group-data-[role=user]/message:p-panel group-data-[role=user]/message:whitespace-pre-wrap group-data-[role=user]/message:shadow-sm',
21
21
  className
22
22
  )}
23
23
  {...restProps}
@@ -14,7 +14,7 @@
14
14
  hovered (the convention), always reachable by keyboard focus. -->
15
15
  <div
16
16
  class={cn(
17
- 'flex items-center gap-(--era-gap) opacity-0 transition-opacity duration-(--era-duration) ease-(--era-ease) group-hover/message:opacity-100 focus-within:opacity-100',
17
+ 'flex items-center gap-gutter opacity-0 transition-opacity duration-base ease-base group-hover/message:opacity-100 focus-within:opacity-100',
18
18
  className
19
19
  )}
20
20
  {...restProps}
@@ -84,7 +84,7 @@
84
84
 
85
85
  <div
86
86
  class={cn(
87
- 'flex items-center gap-(--era-inset-chip) font-mono text-body leading-none text-muted tabular-nums',
87
+ 'flex items-center gap-inset-chip font-mono text-body leading-none text-muted tabular-nums',
88
88
  className
89
89
  )}
90
90
  {...restProps}
@@ -100,18 +100,16 @@
100
100
  <Tooltip.Provider delayDuration={150}>
101
101
  <Tooltip.Root>
102
102
  <Tooltip.Trigger
103
- class="inline-flex items-center text-muted transition-colors duration-(--era-duration) ease-(--era-ease) hover:text-fg"
103
+ class="inline-flex items-center text-muted transition-colors duration-base ease-base hover:text-fg"
104
104
  aria-label="Context window breakdown"
105
105
  >
106
- <Info class="size-(--era-h-icon)" aria-hidden="true" />
106
+ <Info class="size-icon" aria-hidden="true" />
107
107
  </Tooltip.Trigger>
108
108
  <Tooltip.Content
109
- class="h-auto flex-col items-start gap-(--era-inset-pill) py-(--era-inset-pill) whitespace-normal"
109
+ class="h-auto flex-col items-start gap-inset-pill py-inset-pill whitespace-normal"
110
110
  >
111
111
  {#each rows as [label, value] (label)}
112
- <span
113
- class="flex w-full items-center justify-between gap-(--era-inset-control) tabular-nums"
114
- >
112
+ <span class="flex w-full items-center justify-between gap-inset-control tabular-nums">
115
113
  <span class="text-muted">{label}</span>
116
114
  <span>{formatTokens(value)}</span>
117
115
  </span>
@@ -17,7 +17,7 @@
17
17
  <div
18
18
  data-role={from}
19
19
  class={cn(
20
- 'group/message flex w-full min-w-0 flex-col gap-(--era-gap)',
20
+ 'group/message flex w-full min-w-0 flex-col gap-gutter',
21
21
  from === 'user' && 'items-end',
22
22
  className
23
23
  )}
@@ -21,7 +21,7 @@
21
21
  </script>
22
22
 
23
23
  <Dialog.Root bind:open>
24
- <Dialog.Content class={cn('max-w-md p-(--era-gap)', className)}>
24
+ <Dialog.Content class={cn('max-w-md p-gutter', className)}>
25
25
  <Command.Root bare>
26
26
  <Command.Input icon={Search} placeholder="Search models…" autofocus />
27
27
  <Command.List>
@@ -43,7 +43,7 @@
43
43
  <img
44
44
  src="https://models.dev/logos/{m.provider}.svg"
45
45
  alt=""
46
- class="size-(--era-h-icon) shrink-0 dark:invert"
46
+ class="size-icon shrink-0 dark:invert"
47
47
  />
48
48
  {/if}
49
49
  <span class="truncate">{m.name}</span>
@@ -38,14 +38,14 @@
38
38
  <DropdownMenu.Root>
39
39
  <DropdownMenu.Trigger class={cn(className)}>
40
40
  Open in chat
41
- <ChevronDown class="size-(--era-h-icon)" />
41
+ <ChevronDown class="size-icon" />
42
42
  </DropdownMenu.Trigger>
43
43
  <DropdownMenu.Content align="start">
44
44
  {#each include as id (id)}
45
45
  <DropdownMenu.Item
46
46
  onSelect={() => window.open(providers[id].url(query), '_blank', 'noreferrer')}
47
47
  >
48
- <ExternalLink class="size-(--era-h-icon) text-muted" />
48
+ <ExternalLink class="size-icon text-muted" />
49
49
  {providers[id].title}
50
50
  </DropdownMenu.Item>
51
51
  {/each}
@@ -7,7 +7,7 @@
7
7
  </script>
8
8
 
9
9
  <Collapsible.Content
10
- class={cn('flex flex-col gap-(--era-gap) overflow-hidden p-(--era-inset-control)', className)}
10
+ class={cn('flex flex-col gap-gutter overflow-hidden p-inset-control', className)}
11
11
  >
12
12
  {@render children?.()}
13
13
  </Collapsible.Content>
@@ -13,10 +13,10 @@
13
13
 
14
14
  <Collapsible.Trigger
15
15
  class={cn(
16
- 'flex h-(--era-h-control) w-full era-interactive cursor-pointer items-center gap-(--era-gap) rounded-(--era-rd-control) px-(--era-inset-control) text-body text-bright hover:bg-(--era-highlight)',
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',
17
17
  className
18
18
  )}
19
19
  >
20
20
  {#if children}{@render children()}{:else}<span class="truncate font-medium">{title}</span>{/if}
21
- <ChevronsUpDown class="ml-auto size-(--era-h-icon) shrink-0 text-muted" />
21
+ <ChevronsUpDown class="ml-auto size-icon shrink-0 text-muted" />
22
22
  </Collapsible.Trigger>
@@ -14,10 +14,7 @@
14
14
  <Collapsible.Root
15
15
  bind:open
16
16
  data-streaming={streaming || undefined}
17
- class={cn(
18
- 'group/plan flex flex-col rounded-(--era-rd-bar) bg-(--era-surface-bg) p-(--era-pad-panel) shadow-(--era-shadow)',
19
- className
20
- )}
17
+ class={cn('group/plan flex flex-col rounded-bar bg-well p-panel shadow-sm', className)}
21
18
  >
22
19
  {@render children?.()}
23
20
  </Collapsible.Root>
@@ -8,5 +8,5 @@
8
8
  </script>
9
9
 
10
10
  <Button icon size="control" aria-label={label} onclick={() => attachments.openFileDialog()}>
11
- <Plus class="size-(--era-h-icon)" />
11
+ <Plus class="size-icon" />
12
12
  </Button>