@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
@@ -16,13 +16,13 @@
16
16
  } = $props();
17
17
  </script>
18
18
 
19
- <!-- A standalone pill is the sm tier: h-sm + rd-sm come from the Button
19
+ <!-- A standalone pill is the sm tier: h-chip + rd-sm come from the Button
20
20
  variant; the sides take Chip's glyph-advance padding (pill-sm, ~2× the
21
21
  vertical inset) so the words breathe. Era pills are rd-sm, not
22
22
  full-round — touch mode alone pills the ladder. -->
23
23
  <Button
24
24
  size="sm"
25
- class={cn('shrink-0 px-(--era-pill-sm)', className)}
25
+ class={cn('shrink-0 px-(--era-chip-px)', className)}
26
26
  onclick={() => onSelect?.(suggestion)}
27
27
  >
28
28
  {#if children}{@render children()}{:else}{suggestion}{/if}
@@ -55,7 +55,7 @@
55
55
  tone="well"
56
56
  data-status={agent.status}
57
57
  class={cn(
58
- 'flex min-w-0 flex-col gap-(--era-gap) p-(--era-pad-sm)',
58
+ 'flex min-w-0 flex-col gap-(--era-gap) p-(--era-pad-panel)',
59
59
  agent.status === 'failed' && 'outline -outline-offset-1 outline-destructive/60',
60
60
  className
61
61
  )}
@@ -40,7 +40,7 @@
40
40
  <Card
41
41
  tone="well"
42
42
  data-kind={artifact.kind}
43
- class={cn('flex min-w-0 flex-col gap-(--era-gap) p-(--era-pad-sm)', className)}
43
+ class={cn('flex min-w-0 flex-col gap-(--era-gap) p-(--era-pad-panel)', className)}
44
44
  {...restProps}
45
45
  >
46
46
  <div class="flex min-w-0 items-center gap-(--era-gap) text-body era-text-trim">
@@ -41,7 +41,7 @@
41
41
  {...restProps}
42
42
  >
43
43
  <div class="flex min-w-0 items-center gap-(--era-gap) text-body era-text-trim">
44
- <GitMerge class="size-(--era-h-xs) shrink-0 text-muted" aria-hidden="true" />
44
+ <GitMerge class="size-(--era-h-icon) shrink-0 text-muted" aria-hidden="true" />
45
45
  <span class="min-w-0 flex-1 truncate text-fg">{barrier.title}</span>
46
46
  {#if barrier.key}
47
47
  <span class="shrink-0 font-mono text-body text-muted">#{barrier.key}</span>
@@ -27,7 +27,7 @@
27
27
  {#if barriers.length > 0}
28
28
  <div
29
29
  class={cn(
30
- 'flex min-w-0 flex-col gap-(--era-pad-sm) border-t border-divider-faded p-(--era-pad-sm)',
30
+ 'flex min-w-0 flex-col gap-(--era-pad-panel) border-t border-divider-faded p-(--era-pad-panel)',
31
31
  className
32
32
  )}
33
33
  {...restProps}
@@ -42,7 +42,7 @@
42
42
  {/if}
43
43
  {#if tally.sandboxes > 0}
44
44
  <Badge>
45
- <Box class="size-(--era-h-xs)" aria-hidden="true" />
45
+ <Box class="size-(--era-h-icon)" aria-hidden="true" />
46
46
  {tally.sandboxes}
47
47
  </Badge>
48
48
  {/if}
@@ -50,7 +50,7 @@
50
50
 
51
51
  <div
52
52
  class={cn(
53
- 'flex h-(--era-h-md) shrink-0 items-center gap-(--era-gap) border-t border-divider-faded px-(--era-inset-md) font-mono text-body era-text-trim',
53
+ 'flex h-(--era-h-control) shrink-0 items-center gap-(--era-gap) border-t border-divider-faded px-(--era-inset-control) font-mono text-body era-text-trim',
54
54
  className
55
55
  )}
56
56
  {...restProps}
@@ -34,13 +34,13 @@
34
34
  grow with the density axis instead of staying dense-sized in touch mode. -->
35
35
  <div
36
36
  class={cn(
37
- 'grid min-w-0 grid-cols-[repeat(auto-fill,minmax(calc(var(--era-h-lg)*6),1fr))] gap-(--era-gap) p-(--era-gap)',
37
+ 'grid min-w-0 grid-cols-[repeat(auto-fill,minmax(calc(var(--era-h-bar)*6),1fr))] gap-(--era-gap) p-(--era-gap)',
38
38
  className
39
39
  )}
40
40
  {...restProps}
41
41
  >
42
42
  {#if nodes.length === 0}
43
- <div class="px-(--era-inset-md) py-(--era-gap) text-body text-muted">
43
+ <div class="px-(--era-inset-control) py-(--era-gap) text-body text-muted">
44
44
  {#if empty}{@render empty()}{:else}No agents yet.{/if}
45
45
  </div>
46
46
  {:else}
@@ -43,7 +43,7 @@
43
43
  the end of a sentence you can hover for, never the count of what failed. -->
44
44
  <div
45
45
  class={cn(
46
- 'flex h-(--era-h-md) shrink-0 items-center gap-(--era-gap) px-(--era-inset-md) text-body era-text-trim',
46
+ 'flex h-(--era-h-control) shrink-0 items-center gap-(--era-gap) px-(--era-inset-control) text-body era-text-trim',
47
47
  className
48
48
  )}
49
49
  {...restProps}
@@ -160,8 +160,8 @@
160
160
  highlight instantly so a fast pass down the tree doesn't smear. -->
161
161
  <div
162
162
  class={cn(
163
- 'flex h-(--era-h-md) items-center gap-(--era-gap) rounded-(--era-rd-md) pl-(--era-inset-md) text-body era-text-trim',
164
- hasActions ? 'pr-(--era-xxs-inset-md)' : 'pr-(--era-inset-md)',
163
+ 'flex h-(--era-h-control) items-center gap-(--era-gap) rounded-(--era-rd-control) pl-(--era-inset-control) text-body era-text-trim',
164
+ hasActions ? 'pr-(--era-pill-inset-control)' : 'pr-(--era-inset-control)',
165
165
  (hasChildren || hasDetail) && 'cursor-pointer',
166
166
  active
167
167
  ? 'bg-hover text-bright'
@@ -183,14 +183,14 @@
183
183
  single source of truth, without the ancestry. -->
184
184
  <ChevronRight
185
185
  class={cn(
186
- 'size-(--era-h-xs) shrink-0 text-muted transition-transform duration-(--era-duration) ease-(--era-ease)',
186
+ 'size-(--era-h-icon) shrink-0 text-muted transition-transform duration-(--era-duration) ease-(--era-ease)',
187
187
  open && 'rotate-90'
188
188
  )}
189
189
  aria-hidden="true"
190
190
  />
191
191
  {:else}
192
192
  <!-- Keeps every row's dot on the same column, expandable or not. -->
193
- <span class="size-(--era-h-xs) shrink-0" aria-hidden="true"></span>
193
+ <span class="size-(--era-h-icon) shrink-0" aria-hidden="true"></span>
194
194
  {/if}
195
195
 
196
196
  <Dot status={agent.status} />
@@ -225,7 +225,7 @@
225
225
  event.stopPropagation();
226
226
  toggleDetail();
227
227
  }}
228
- class="shrink-0 era-interactive cursor-pointer rounded-(--era-rd-xxs) px-(--era-pill-xxs) font-mono text-body era-text-trim text-muted hover:bg-(--era-highlight) hover:text-fg data-[state=open]:bg-hover data-[state=open]:text-fg"
228
+ class="shrink-0 era-interactive cursor-pointer rounded-(--era-rd-pill) px-(--era-pill-px) font-mono text-body era-text-trim text-muted hover:bg-(--era-highlight) hover:text-fg data-[state=open]:bg-hover data-[state=open]:text-fg"
229
229
  >
230
230
  {detailLabel}
231
231
  </button>
@@ -263,7 +263,7 @@
263
263
  <Collapsible.Root bind:open={detailOpen}>
264
264
  <Collapsible.Content class="era-collapse">
265
265
  <div
266
- class="min-w-0 pr-(--era-inset-md) pb-(--era-gap) pl-[calc(var(--era-inset-md)+var(--era-h-xs)+var(--era-gap))]"
266
+ class="min-w-0 pr-(--era-inset-control) pb-(--era-gap) pl-[calc(var(--era-inset-control)+var(--era-h-icon)+var(--era-gap))]"
267
267
  >
268
268
  {@render detail?.(agent)}
269
269
  </div>
@@ -277,7 +277,7 @@
277
277
  straight down from the parent's own arrow into its children. -->
278
278
  <div
279
279
  role="group"
280
- class="ml-[calc(var(--era-inset-md)+var(--era-h-xs)/2)] border-l border-divider-faded"
280
+ class="ml-[calc(var(--era-inset-control)+var(--era-h-icon)/2)] border-l border-divider-faded"
281
281
  >
282
282
  {@render children?.()}
283
283
  </div>
@@ -59,6 +59,6 @@
59
59
  )}
60
60
  {...restProps}
61
61
  >
62
- <Icon class="size-(--era-h-xs) shrink-0" aria-hidden="true" />
62
+ <Icon class="size-(--era-h-icon) shrink-0" aria-hidden="true" />
63
63
  {name}
64
64
  </span>
@@ -52,7 +52,7 @@
52
52
  <div
53
53
  bind:this={ref}
54
54
  class={cn(
55
- 'flex min-w-0 flex-col rounded-(--era-rd-lg) bg-(--era-surface-bg) shadow-(--era-shadow)',
55
+ 'flex min-w-0 flex-col rounded-(--era-rd-bar) bg-(--era-surface-bg) shadow-(--era-shadow)',
56
56
  className
57
57
  )}
58
58
  {...restProps}
@@ -58,16 +58,16 @@
58
58
  <!-- busy: the box PULSES rather than gaining a second glyph — "a command is
59
59
  streaming through this VM" is motion, and motion is what says it. -->
60
60
  <Box
61
- class={cn('size-(--era-h-xs) shrink-0', sandbox.busy && 'animate-pulse')}
61
+ class={cn('size-(--era-h-icon) shrink-0', sandbox.busy && 'animate-pulse')}
62
62
  aria-hidden="true"
63
63
  />
64
64
  {#if sandbox.checkpoint}
65
65
  <!-- A paused VM kept as a restore point — the camera badge, as the
66
66
  reference console draws it. -->
67
- <Camera class="size-(--era-icon-xxs) shrink-0" aria-hidden="true" />
67
+ <Camera class="size-(--era-glyph-pill) shrink-0" aria-hidden="true" />
68
68
  {:else if forkOf}
69
69
  <!-- Live-forked from a parent VM; the lineage is in the title. -->
70
- <GitBranch class="size-(--era-icon-xxs) shrink-0" aria-hidden="true" />
70
+ <GitBranch class="size-(--era-glyph-pill) shrink-0" aria-hidden="true" />
71
71
  {/if}
72
72
  {#if label}<span class="truncate">{sandbox.status}</span>{/if}
73
73
  </span>
@@ -185,7 +185,7 @@
185
185
  {...restProps}
186
186
  >
187
187
  {#if rows.length === 0}
188
- <div class="px-(--era-inset-md) py-(--era-gap) text-body text-muted">
188
+ <div class="px-(--era-inset-control) py-(--era-gap) text-body text-muted">
189
189
  {#if empty}{@render empty()}{:else}No agents yet.{/if}
190
190
  </div>
191
191
  {:else}
@@ -9,7 +9,7 @@
9
9
  <!-- The task log rail: items hang off a left border, terminal-trace style. -->
10
10
  <Step.Content
11
11
  class={cn(
12
- 'border-divider-faded border-s-2 bg-transparent p-0 ps-(--era-pad-sm) shadow-none',
12
+ 'border-divider-faded border-s-2 bg-transparent p-0 ps-(--era-pad-panel) shadow-none',
13
13
  className
14
14
  )}
15
15
  >
@@ -7,6 +7,6 @@
7
7
  </script>
8
8
 
9
9
  <Step.Summary>
10
- <Search class="size-(--era-h-xs) shrink-0" aria-hidden="true" />
10
+ <Search class="size-(--era-h-icon) shrink-0" aria-hidden="true" />
11
11
  {#if children}{@render children()}{:else}{title}{/if}
12
12
  </Step.Summary>
@@ -47,14 +47,14 @@
47
47
  data-status={status}
48
48
  {onclick}
49
49
  class={cn(
50
- 'inline-flex h-(--era-h-xxs) max-w-full min-w-0 shrink-0 era-interactive cursor-pointer items-center gap-(--era-gap) rounded-(--era-rd-xxs) px-(--era-pill-xxs) text-body era-text-trim text-muted transition-colors duration-(--era-duration) ease-(--era-ease) hover:bg-(--era-highlight) hover:text-fg',
50
+ 'inline-flex h-(--era-h-pill) max-w-full min-w-0 shrink-0 era-interactive cursor-pointer items-center gap-(--era-gap) rounded-(--era-rd-pill) px-(--era-pill-px) text-body era-text-trim text-muted transition-colors duration-(--era-duration) ease-(--era-ease) hover:bg-(--era-highlight) hover:text-fg',
51
51
  active && 'bg-fill text-fg',
52
52
  className
53
53
  )}
54
54
  {...restProps}
55
55
  >
56
56
  <Icon
57
- class={cn('size-(--era-h-xs) shrink-0', status === 'running' && 'animate-pulse')}
57
+ class={cn('size-(--era-h-icon) shrink-0', status === 'running' && 'animate-pulse')}
58
58
  aria-hidden="true"
59
59
  />
60
60
  <span class={cn('min-w-0 truncate', status === 'running' && 'era-shimmer')}>
@@ -19,7 +19,7 @@
19
19
  const failed = $derived(exitCode !== undefined && exitCode !== 0);
20
20
  </script>
21
21
 
22
- <div class="flex min-w-0 flex-col gap-(--era-pad-sm)">
22
+ <div class="flex min-w-0 flex-col gap-(--era-pad-panel)">
23
23
  {#if command || failed}
24
24
  <div class="flex min-w-0 items-center gap-(--era-gap)">
25
25
  {#if command}
@@ -39,14 +39,14 @@
39
39
  {#if stdout}
40
40
  <Step.Section label="stdout">
41
41
  <pre
42
- class="min-w-0 overflow-x-auto rounded-(--era-rd-md) bg-(--era-field-bg) p-(--era-pad-sm) font-mono text-body whitespace-pre-wrap text-muted shadow-(--era-shadow-well)">{stdout}</pre>
42
+ class="min-w-0 overflow-x-auto rounded-(--era-rd-control) bg-(--era-field-bg) p-(--era-pad-panel) font-mono text-body whitespace-pre-wrap text-muted shadow-(--era-shadow-well)">{stdout}</pre>
43
43
  </Step.Section>
44
44
  {/if}
45
45
 
46
46
  {#if stderr}
47
47
  <Step.Section label="stderr">
48
48
  <pre
49
- class="min-w-0 overflow-x-auto rounded-(--era-rd-md) bg-(--era-field-bg) p-(--era-pad-sm) font-mono text-body whitespace-pre-wrap text-destructive shadow-(--era-shadow-well)">{stderr}</pre>
49
+ class="min-w-0 overflow-x-auto rounded-(--era-rd-control) bg-(--era-field-bg) p-(--era-pad-panel) font-mono text-body whitespace-pre-wrap text-destructive shadow-(--era-shadow-well)">{stderr}</pre>
50
50
  </Step.Section>
51
51
  {/if}
52
52
  </div>
@@ -14,7 +14,7 @@
14
14
  </script>
15
15
 
16
16
  <Step.Summary>
17
- <Wrench class="size-(--era-h-xs) shrink-0" aria-hidden="true" />
17
+ <Wrench class="size-(--era-h-icon) shrink-0" aria-hidden="true" />
18
18
  <span class="truncate text-fg">{type}</span>
19
19
  {@render children?.()}
20
20
  </Step.Summary>
@@ -17,17 +17,17 @@
17
17
 
18
18
  <div
19
19
  class={cn(
20
- 'flex min-h-0 flex-col overflow-hidden rounded-(--era-rd-lg) bg-(--era-surface-bg) shadow-(--era-shadow-lg)',
20
+ 'flex min-h-0 flex-col overflow-hidden rounded-(--era-rd-bar) bg-(--era-surface-bg) shadow-(--era-shadow-lg)',
21
21
  className
22
22
  )}
23
23
  >
24
24
  <Bar size="md" class="shrink-0 gap-(--era-gap) rounded-none">
25
25
  <Button icon size="sm" aria-label="Reload" onclick={() => (nonce += 1)}>
26
- <RotateCw class="size-(--era-h-xs)" />
26
+ <RotateCw class="size-(--era-h-icon)" />
27
27
  </Button>
28
28
  <Input
29
29
  bind:value={draft}
30
- class="h-(--era-h-sm) flex-1"
30
+ class="h-(--era-h-chip) flex-1"
31
31
  placeholder="https://…"
32
32
  onkeydown={(e: KeyboardEvent) => {
33
33
  if (e.key === 'Enter') {
@@ -12,7 +12,7 @@
12
12
 
13
13
  <!-- Thin era skin over Svelte Flow — the graph engine is xyflow's. This file
14
14
  lives on its own subpath so the dependency stays opt-in. -->
15
- <SvelteFlow bind:nodes bind:edges fitView class="rounded-(--era-rd-lg) shadow-(--era-shadow)">
15
+ <SvelteFlow bind:nodes bind:edges fitView class="rounded-(--era-rd-bar) shadow-(--era-shadow)">
16
16
  <Background bgColor="var(--color-1)" />
17
17
  <Controls />
18
18
  {@render children?.()}
@@ -12,18 +12,18 @@
12
12
 
13
13
  <div
14
14
  class={cn(
15
- 'flex w-56 flex-col overflow-hidden rounded-(--era-rd-md) bg-(--era-surface-bg-elevated) text-body shadow-(--era-shadow-lg)',
15
+ 'flex w-56 flex-col overflow-hidden rounded-(--era-rd-control) bg-(--era-surface-bg-elevated) text-body shadow-(--era-shadow-lg)',
16
16
  className
17
17
  )}
18
18
  >
19
19
  <Handle type="target" position={Position.Left} />
20
20
  {#if title}
21
21
  <div
22
- class="flex h-(--era-h-md) items-center border-b border-divider-faded px-(--era-inset-md) font-medium text-bright"
22
+ class="flex h-(--era-h-control) items-center border-b border-divider-faded px-(--era-inset-control) font-medium text-bright"
23
23
  >
24
24
  {title}
25
25
  </div>
26
26
  {/if}
27
- <div class="p-(--era-inset-md) text-fg">{@render children?.()}</div>
27
+ <div class="p-(--era-inset-control) text-fg">{@render children?.()}</div>
28
28
  <Handle type="source" position={Position.Right} />
29
29
  </div>
@@ -116,7 +116,7 @@
116
116
  <AI.Conversations.Root>
117
117
  {#snippet header()}
118
118
  <Button class="w-full justify-start" onclick={() => onNewChat?.()}>
119
- <Plus class="size-xs" aria-hidden="true" />
119
+ <Plus class="size-icon" aria-hidden="true" />
120
120
  New chat
121
121
  </Button>
122
122
  {/snippet}
@@ -143,7 +143,7 @@
143
143
  <!-- Thread -->
144
144
  <div class="flex min-w-0 flex-1 flex-col">
145
145
  {#if runStatus !== 'idle'}
146
- <div class="shrink-0 border-b border-divider px-(--era-pad-md) py-gutter">
146
+ <div class="shrink-0 border-b border-divider px-(--era-pad-card) py-gutter">
147
147
  <AI.RunStatus.Root
148
148
  status={runStatus}
149
149
  tools={{
@@ -174,7 +174,7 @@
174
174
  {:else}
175
175
  <AI.Conversation.EmptyState title={emptyTitle} description={emptyDescription}>
176
176
  {#snippet icon()}
177
- <Sparkles class="size-md text-muted" />
177
+ <Sparkles class="size-control text-muted" />
178
178
  {/snippet}
179
179
  </AI.Conversation.EmptyState>
180
180
  {/if}
@@ -187,7 +187,7 @@
187
187
  <AI.Conversation.ScrollButton />
188
188
  </AI.Conversation.Root>
189
189
 
190
- <div class="mx-auto w-full max-w-2xl shrink-0 p-(--era-pad-md) pt-0">
190
+ <div class="mx-auto w-full max-w-2xl shrink-0 p-(--era-pad-card) pt-0">
191
191
  {#if active && active.messages.length === 0 && suggestions.length > 0}
192
192
  <div class="pb-(--era-gap)">
193
193
  <AI.Suggestions.Root>
@@ -265,7 +265,7 @@
265
265
  {#snippet expanded()}
266
266
  {@const tool = block.tools.find((t) => t.id === openChip)}
267
267
  {#if tool}
268
- <Card tone="well" class="flex min-w-0 flex-col gap-(--era-pad-sm) p-(--era-pad-sm)">
268
+ <Card tone="well" class="flex min-w-0 flex-col gap-(--era-pad-panel) p-(--era-pad-panel)">
269
269
  <AI.Tool.Input input={tool.input} />
270
270
  <AI.Tool.Output output={tool.output} />
271
271
  </Card>
@@ -314,10 +314,10 @@
314
314
  {#if !block.streaming && block.text}
315
315
  <AI.Message.Toolbar>
316
316
  <AI.Actions.Action tooltip="Copy" onclick={() => copyText(block.text)}>
317
- <Copy class="size-xs" />
317
+ <Copy class="size-icon" />
318
318
  </AI.Actions.Action>
319
319
  <AI.Actions.Action tooltip="Regenerate" onclick={() => copyText(block.text)}>
320
- <RotateCcw class="size-xs" />
320
+ <RotateCcw class="size-icon" />
321
321
  </AI.Actions.Action>
322
322
  </AI.Message.Toolbar>
323
323
  {#if block.usage}
@@ -44,16 +44,18 @@
44
44
 
45
45
  <!-- Rows carry shrink-0 deliberately. This is a flex COLUMN with a capped
46
46
  height, so without it flex compresses the children to fit rather than
47
- letting the panel scroll: 12 items in an 8-row box rendered every h-md row
47
+ letting the panel scroll: 12 items in an 8-row box rendered every h-control row
48
48
  at 16px against 14px text, which read as a menu with no padding at all.
49
49
  overflow-y-auto never engaged, because the content had already been
50
50
  squashed to fit. -->
51
51
  <div
52
52
  bind:this={list}
53
- class="scrollbar-none flex max-h-[calc(var(--era-h-md)*8)] w-max min-w-48 flex-col overflow-y-auto rounded-md bg-elevated p-menu shadow-lg glass-blur"
53
+ class="scrollbar-none flex max-h-[calc(var(--era-h-control)*8)] w-max min-w-48 flex-col overflow-y-auto rounded-control bg-elevated p-menu shadow-lg glass-blur"
54
54
  >
55
55
  {#if items.length === 0}
56
- <div class="flex h-md shrink-0 items-center px-inset-md text-body era-text-trim text-muted">
56
+ <div
57
+ class="flex h-control shrink-0 items-center px-inset-control text-body era-text-trim text-muted"
58
+ >
57
59
  No commands
58
60
  </div>
59
61
  {:else}
@@ -61,7 +63,7 @@
61
63
  {@const Icon = item.icon}
62
64
  <button
63
65
  type="button"
64
- class="flex h-md w-full shrink-0 cursor-pointer items-center gap-gutter rounded-item px-inset-md text-left text-body era-text-trim text-fg {i ===
66
+ class="flex h-control w-full shrink-0 cursor-pointer items-center gap-gutter rounded-menu-item px-inset-control text-left text-body era-text-trim text-fg {i ===
65
67
  selected
66
68
  ? 'bg-highlight shadow-highlight'
67
69
  : ''}"
@@ -73,7 +75,7 @@
73
75
  onSelect(i);
74
76
  }}
75
77
  >
76
- <Icon class="size-xs shrink-0" />
78
+ <Icon class="size-icon shrink-0" />
77
79
  <span class="flex-1">{item.title}</span>
78
80
  <span class="shrink-0 text-muted">{item.description}</span>
79
81
  </button>