@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.
- package/dist/ai/actions/actions.svelte +1 -1
- package/dist/ai/artifact/artifact-actions.svelte +1 -1
- package/dist/ai/artifact/artifact-close.svelte +1 -1
- package/dist/ai/artifact/artifact-content.svelte +1 -1
- package/dist/ai/artifact/artifact-header.svelte +1 -1
- package/dist/ai/artifact/artifact.svelte +1 -4
- package/dist/ai/chain-of-thought/chain-of-thought-step.svelte +3 -3
- package/dist/ai/chain-of-thought/chain-of-thought.svelte +1 -1
- package/dist/ai/checkpoint.svelte +2 -2
- package/dist/ai/confirmation/confirmation-actions.svelte +1 -1
- package/dist/ai/confirmation/confirmation-args.svelte +4 -4
- package/dist/ai/confirmation/confirmation.svelte +5 -8
- package/dist/ai/context/context.svelte +3 -3
- package/dist/ai/conversation/conversation-content.svelte +1 -4
- package/dist/ai/conversation/conversation-empty-state.svelte +1 -1
- package/dist/ai/conversation/conversation-scroll-button.svelte +3 -3
- package/dist/ai/conversations/conversations-group.svelte +2 -2
- package/dist/ai/conversations/conversations-item.svelte +8 -8
- package/dist/ai/conversations/conversations-root.svelte +2 -2
- package/dist/ai/error-panel/error-panel.svelte +7 -7
- package/dist/ai/image.svelte +1 -1
- package/dist/ai/index.js +1 -1
- package/dist/ai/inline-citation/inline-citation.svelte +5 -5
- package/dist/ai/loader.svelte +1 -4
- package/dist/ai/message/message-branch-selector.svelte +3 -3
- package/dist/ai/message/message-branch.svelte +1 -1
- package/dist/ai/message/message-content.svelte +1 -1
- package/dist/ai/message/message-toolbar.svelte +1 -1
- package/dist/ai/message/message-usage.svelte +5 -7
- package/dist/ai/message/message.svelte +1 -1
- package/dist/ai/model-selector/model-selector.svelte +2 -2
- package/dist/ai/open-in-chat/open-in-chat.svelte +2 -2
- package/dist/ai/plan/plan-content.svelte +1 -1
- package/dist/ai/plan/plan-header.svelte +2 -2
- package/dist/ai/plan/plan.svelte +1 -4
- package/dist/ai/prompt-input/prompt-input-add-attachments.svelte +1 -1
- package/dist/ai/prompt-input/prompt-input-attachments.svelte +5 -5
- package/dist/ai/prompt-input/prompt-input-submit.svelte +2 -2
- package/dist/ai/prompt-input/prompt-input-textarea.svelte +2 -2
- package/dist/ai/prompt-input/prompt-input-toolbar.svelte +1 -1
- package/dist/ai/prompt-input/prompt-input.svelte +1 -1
- package/dist/ai/queue/queue-item.svelte +1 -1
- package/dist/ai/queue/queue.svelte +1 -1
- package/dist/ai/reasoning/reasoning-trigger.svelte +1 -1
- package/dist/ai/response/response.svelte +1 -1
- package/dist/ai/run-status/run-status.svelte +7 -11
- package/dist/ai/runtime-feed/runtime-feed-item.svelte +1 -4
- package/dist/ai/runtime-feed/runtime-feed-root.svelte +1 -1
- package/dist/ai/sources/source.svelte +2 -2
- package/dist/ai/sources/sources-trigger.svelte +1 -1
- package/dist/ai/structured-value/structured-value.svelte +4 -4
- package/dist/ai/suggestion/suggestion.svelte +1 -1
- package/dist/ai/suggestion/suggestions.svelte +1 -1
- package/dist/ai/swarm/swarm-agent.svelte +3 -3
- package/dist/ai/swarm/swarm-artifact.svelte +2 -2
- package/dist/ai/swarm/swarm-barrier.svelte +3 -3
- package/dist/ai/swarm/swarm-barriers.svelte +1 -4
- package/dist/ai/swarm/swarm-counts.svelte +2 -2
- package/dist/ai/swarm/swarm-footer.svelte +4 -3
- package/dist/ai/swarm/swarm-grid.svelte +2 -2
- package/dist/ai/swarm/swarm-header.svelte +2 -2
- package/dist/ai/swarm/swarm-node.svelte +7 -9
- package/dist/ai/swarm/swarm-role.svelte +6 -3
- package/dist/ai/swarm/swarm-root.svelte +1 -4
- package/dist/ai/swarm/swarm-sandbox.svelte +4 -7
- package/dist/ai/swarm/swarm-tree.svelte +2 -2
- package/dist/ai/task/task-content.svelte +1 -4
- package/dist/ai/task/task-trigger.svelte +1 -1
- package/dist/ai/tool/tool-chip.svelte +3 -3
- package/dist/ai/tool/tool-chips.svelte +3 -3
- package/dist/ai/tool/tool-exec.svelte +4 -4
- package/dist/ai/tool/tool-header.svelte +1 -1
- package/dist/ai/web-preview/web-preview.svelte +4 -9
- package/dist/ai/workflow/canvas.svelte +1 -1
- package/dist/ai/workflow/node.svelte +3 -3
- package/dist/apps/index.d.ts +3 -3
- package/dist/apps/index.js +3 -3
- package/dist/apps/llm-shell/llm-shell.svelte +4 -4
- package/dist/apps/notes/editor/slash-menu.svelte +2 -4
- package/dist/apps/notes/notes.svelte +8 -8
- package/dist/dev/audit/audits/anonymous-text.d.ts +2 -0
- package/dist/dev/audit/audits/anonymous-text.js +73 -0
- package/dist/dev/audit/audits/even-container-padding.js +2 -2
- package/dist/dev/audit/audits/index.d.ts +2 -1
- package/dist/dev/audit/audits/index.js +3 -1
- package/dist/dev/audit/audits/single-glyph-square.js +2 -2
- package/dist/dev/audit/types.d.ts +1 -1
- package/dist/dev/audit-overlay.svelte +7 -7
- package/dist/docs/css-utilities.d.ts +31 -0
- package/dist/docs/css-utilities.js +142 -8
- package/dist/docs/llms-txt.js +2 -2
- package/dist/docs/notes.md +3 -3
- package/dist/docs/quickstart.md +5 -5
- package/dist/era-ui.css +1 -1
- package/dist/generated-docs/llms-full.txt +455 -110
- package/dist/generated-docs/llms.txt +29 -14
- package/dist/generated-docs/manifest.json +382 -55
- package/dist/generated-docs/notes.md +3 -3
- package/dist/generated-docs/utilities.json +359 -45
- package/dist/generated-docs/utilities.md +423 -93
- package/dist/os/notification-center.svelte +11 -17
- package/dist/os/pane-manager.svelte.d.ts +1 -1
- package/dist/os/pane.svelte +4 -6
- package/dist/os/taskbar.svelte +13 -18
- package/dist/os/toast.svelte +6 -11
- package/dist/os/toaster.svelte +1 -1
- package/dist/styles/density.css +0 -2
- package/dist/styles/index.css +160 -84
- package/dist/ui/accordion/accordion-content.svelte +1 -1
- package/dist/ui/accordion/accordion-trigger.svelte +2 -2
- package/dist/ui/alert-dialog/alert-dialog-content.svelte +2 -2
- package/dist/ui/alert-dialog/alert-dialog-overlay.svelte +1 -1
- package/dist/ui/aspect-ratio/aspect-ratio.svelte +1 -5
- package/dist/ui/avatar/avatar-fallback.svelte +1 -1
- package/dist/ui/avatar/avatar-root.svelte +1 -1
- package/dist/ui/badge/badge.svelte +1 -1
- package/dist/ui/badge/badge.svelte.d.ts +1 -1
- package/dist/ui/bar/bar.svelte +8 -8
- package/dist/ui/bar/bar.svelte.d.ts +16 -16
- package/dist/ui/button/button.svelte +13 -2
- package/dist/ui/button/variants.d.ts +4 -4
- package/dist/ui/button/variants.js +18 -18
- package/dist/ui/button-group/button-group.svelte +2 -2
- package/dist/ui/calendar/calendar-day.svelte +1 -1
- package/dist/ui/calendar/calendar-grid-row.svelte +1 -1
- package/dist/ui/calendar/calendar-grid.svelte +1 -1
- package/dist/ui/calendar/calendar-head-cell.svelte +1 -1
- package/dist/ui/calendar/calendar-header.svelte +1 -1
- package/dist/ui/calendar/calendar-next-button.svelte +1 -1
- package/dist/ui/calendar/calendar-prev-button.svelte +1 -1
- package/dist/ui/calendar/calendar-root.svelte +1 -1
- package/dist/ui/card/card.svelte +10 -10
- package/dist/ui/card/card.svelte.d.ts +16 -16
- package/dist/ui/checkbox/checkbox-group.svelte +1 -1
- package/dist/ui/checkbox/checkbox.svelte +1 -1
- package/dist/ui/chip/chip.svelte +15 -7
- package/dist/ui/chip/chip.svelte.d.ts +7 -7
- package/dist/ui/code-block/code-block.svelte +3 -9
- package/dist/ui/collapsible/collapsible-trigger.svelte +1 -1
- package/dist/ui/combobox/combobox-content.svelte +1 -1
- package/dist/ui/combobox/combobox-empty.svelte +1 -6
- package/dist/ui/combobox/combobox-group-heading.svelte +1 -4
- package/dist/ui/combobox/combobox-input.svelte +1 -1
- package/dist/ui/combobox/combobox-item.svelte +1 -1
- package/dist/ui/combobox/combobox-trigger.svelte +2 -2
- package/dist/ui/command/command-group-heading.svelte +1 -4
- package/dist/ui/command/command-group-items.svelte +1 -5
- package/dist/ui/command/command-item.svelte +1 -1
- package/dist/ui/command/command-link-item.svelte +1 -1
- package/dist/ui/command/command-root.svelte +2 -2
- package/dist/ui/command/command-viewport.svelte +1 -1
- package/dist/ui/command-bar/command-bar.svelte +9 -13
- package/dist/ui/context-menu/context-menu-checkbox-item.svelte +1 -1
- package/dist/ui/context-menu/context-menu-content.svelte +2 -2
- package/dist/ui/context-menu/context-menu-group-heading.svelte +1 -4
- package/dist/ui/context-menu/context-menu-item.svelte +1 -1
- package/dist/ui/context-menu/context-menu-radio-item.svelte +1 -1
- package/dist/ui/context-menu/context-menu-sub-content.svelte +1 -1
- package/dist/ui/context-menu/context-menu-sub-trigger.svelte +2 -2
- package/dist/ui/copy-button/copy-button.svelte +2 -2
- package/dist/ui/cycle/cycle.svelte +2 -2
- package/dist/ui/date-field/date-field-segment.svelte +1 -1
- package/dist/ui/date-picker/date-picker-calendar.svelte +1 -1
- package/dist/ui/date-picker/date-picker-content.svelte +1 -4
- package/dist/ui/date-picker/date-picker-day.svelte +1 -1
- package/dist/ui/date-picker/date-picker-grid-row.svelte +1 -1
- package/dist/ui/date-picker/date-picker-grid.svelte +1 -1
- package/dist/ui/date-picker/date-picker-head-cell.svelte +1 -1
- package/dist/ui/date-picker/date-picker-header.svelte +1 -1
- package/dist/ui/date-picker/date-picker-next-button.svelte +1 -1
- package/dist/ui/date-picker/date-picker-prev-button.svelte +1 -1
- package/dist/ui/date-picker/date-picker-segment.svelte +1 -1
- package/dist/ui/date-picker/date-picker-trigger.svelte +2 -2
- package/dist/ui/date-range-field/date-range-field-segment.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-calendar.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-content.svelte +1 -4
- package/dist/ui/date-range-picker/date-range-picker-day.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-grid-row.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-grid.svelte +1 -5
- package/dist/ui/date-range-picker/date-range-picker-head-cell.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-header.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-next-button.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-prev-button.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-segment.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-trigger.svelte +2 -2
- package/dist/ui/dialog/dialog-content.svelte +3 -5
- package/dist/ui/dialog/dialog-header.svelte +1 -6
- package/dist/ui/dialog/dialog-overlay.svelte +1 -5
- package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
- package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +2 -2
- package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -4
- package/dist/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
- package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
- package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
- package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +2 -2
- package/dist/ui/file-upload/file-upload.svelte +2 -2
- package/dist/ui/index.js +1 -1
- package/dist/ui/input/input.svelte +2 -2
- package/dist/ui/input/textarea.svelte +1 -1
- package/dist/ui/input/variants.d.ts +18 -18
- package/dist/ui/input/variants.js +6 -6
- package/dist/ui/kv/kv.svelte +2 -3
- package/dist/ui/link-preview/link-preview-content.svelte +1 -1
- package/dist/ui/menubar/menubar-checkbox-item.svelte +1 -1
- package/dist/ui/menubar/menubar-content.svelte +2 -2
- package/dist/ui/menubar/menubar-group-heading.svelte +1 -4
- package/dist/ui/menubar/menubar-item.svelte +1 -1
- package/dist/ui/menubar/menubar-radio-item.svelte +1 -1
- package/dist/ui/menubar/menubar-root.svelte +1 -4
- package/dist/ui/menubar/menubar-sub-content.svelte +1 -1
- package/dist/ui/menubar/menubar-sub-trigger.svelte +2 -2
- package/dist/ui/menubar/menubar-trigger.svelte +1 -1
- package/dist/ui/meter/meter.svelte +2 -2
- package/dist/ui/pagination/pagination-next-button.svelte +1 -1
- package/dist/ui/pagination/pagination-prev-button.svelte +1 -1
- package/dist/ui/pagination/pagination-root.svelte +1 -1
- package/dist/ui/pane/pane-content.svelte +1 -1
- package/dist/ui/pane/pane-root.svelte +1 -1
- package/dist/ui/pane/pane-tab-list.svelte +1 -1
- package/dist/ui/pane/pane-tab-panel.svelte +1 -1
- package/dist/ui/pane/pane-tab.svelte +1 -1
- package/dist/ui/pane/pane.svelte +1 -1
- package/dist/ui/pin-input/pin-input-cell.svelte +1 -1
- package/dist/ui/popover/popover-content.svelte +1 -1
- package/dist/ui/popover/popover-trigger.svelte +1 -4
- package/dist/ui/progress/progress.svelte +2 -2
- package/dist/ui/radio-group/radio-group-item.svelte +2 -2
- package/dist/ui/radio-group/radio-group-root.svelte +1 -1
- package/dist/ui/rating-group/rating-group-item.svelte +1 -1
- package/dist/ui/rating-group/rating-group-root.svelte +1 -1
- package/dist/ui/scroll-area/scroll-area-scrollbar.svelte +1 -1
- package/dist/ui/scroll-area/scroll-area-thumb.svelte +1 -1
- package/dist/ui/scroll-area/scroll-area.svelte +1 -1
- package/dist/ui/select/select-content.svelte +7 -6
- package/dist/ui/select/select-group-heading.svelte +1 -4
- package/dist/ui/select/select-item.svelte +1 -1
- package/dist/ui/select/select-trigger.svelte +2 -2
- package/dist/ui/select/select-value.svelte +1 -1
- package/dist/ui/separator/separator.svelte +1 -1
- package/dist/ui/sheet/sheet-content.svelte +3 -3
- package/dist/ui/sheet/sheet-content.svelte.d.ts +4 -4
- package/dist/ui/skeleton/skeleton.svelte +4 -4
- package/dist/ui/skeleton/skeleton.svelte.d.ts +10 -10
- package/dist/ui/slider/slider-range.svelte +1 -1
- package/dist/ui/slider/slider-thumb.svelte +1 -1
- package/dist/ui/slider/slider-tick.svelte +1 -1
- package/dist/ui/step/step-content.svelte +1 -1
- package/dist/ui/step/step-section.svelte +1 -1
- package/dist/ui/step/step-summary.svelte +7 -7
- package/dist/ui/switch/switch.svelte +2 -2
- package/dist/ui/table/table-cell.svelte +1 -1
- package/dist/ui/table/table-head-cell.svelte +1 -1
- package/dist/ui/table/table-row.svelte +1 -1
- package/dist/ui/time-field/time-field-segment.svelte +1 -1
- package/dist/ui/time-range-field/time-range-field-segment.svelte +1 -1
- package/dist/ui/toggle-group/toggle-group-item.svelte +1 -1
- package/dist/ui/toggle-group/toggle-group-root.svelte +1 -1
- package/dist/ui/tooltip/tooltip-content.svelte +1 -1
- package/dist/ui/video-player/video-player.svelte +44 -47
- package/dist/utils/index.js +1 -1
- package/package.json +4 -3
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
</script>
|
|
9
9
|
|
|
10
10
|
{#if attachments.items.length}
|
|
11
|
-
<div class="flex flex-wrap gap-
|
|
11
|
+
<div class="flex flex-wrap gap-gutter pb-gutter">
|
|
12
12
|
{#each attachments.items as a (a.id)}
|
|
13
13
|
<div class="group/att relative">
|
|
14
14
|
{#if a.previewUrl}
|
|
@@ -16,15 +16,15 @@
|
|
|
16
16
|
<img
|
|
17
17
|
src={a.previewUrl}
|
|
18
18
|
alt={a.filename}
|
|
19
|
-
class="size-
|
|
19
|
+
class="size-bar rounded-bar object-cover shadow-sm"
|
|
20
20
|
/>
|
|
21
21
|
{:else}
|
|
22
22
|
<!-- md control geometry, like a Button with an icon: wall inset and
|
|
23
23
|
icon gap both --era-inset-control, ink centered by era-text-trim. -->
|
|
24
24
|
<div
|
|
25
|
-
class="flex h-
|
|
25
|
+
class="flex h-control items-center gap-inset-control rounded-control bg-well px-inset-control text-body leading-none text-muted shadow-sm"
|
|
26
26
|
>
|
|
27
|
-
<Paperclip class="size-
|
|
27
|
+
<Paperclip class="size-icon shrink-0" />
|
|
28
28
|
<span class="max-w-32 truncate">{a.filename}</span>
|
|
29
29
|
</div>
|
|
30
30
|
{/if}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
icon
|
|
37
37
|
size="icon"
|
|
38
38
|
aria-label="Remove {a.filename}"
|
|
39
|
-
class="absolute -top-(--era-gap) -right-(--era-gap) opacity-0 shadow-
|
|
39
|
+
class="absolute -top-(--era-gap) -right-(--era-gap) opacity-0 shadow-sm group-hover/att:opacity-100 focus-visible:opacity-100 [&_svg]:size-glyph-pill"
|
|
40
40
|
onclick={() => attachments.remove(a.id)}
|
|
41
41
|
>
|
|
42
42
|
<X />
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
}}
|
|
41
41
|
>
|
|
42
42
|
{#if status === 'submitted'}
|
|
43
|
-
<LoaderCircle class="size-
|
|
43
|
+
<LoaderCircle class="size-icon animate-spin" />
|
|
44
44
|
{:else if status === 'streaming'}
|
|
45
45
|
<Square class="size-[calc(var(--era-h-icon)*0.75)]" fill="currentColor" />
|
|
46
46
|
{:else}
|
|
47
|
-
<ArrowUp class="size-
|
|
47
|
+
<ArrowUp class="size-icon" />
|
|
48
48
|
{/if}
|
|
49
49
|
</Button>
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
(only the submit path is gated).
|
|
41
41
|
|
|
42
42
|
Geometry: the single-line state must measure exactly like an md control
|
|
43
|
-
(Input = h-control, px-
|
|
43
|
+
(Input = h-control, px-inset-control, text-body, text-fg) so the toolbar
|
|
44
44
|
row of md buttons beside it sits on ONE tier with even gaps. Padding
|
|
45
45
|
does the vertical centering here (a textarea can't flex-center), so
|
|
46
46
|
py = (h-control − 1lh)/2 — exact at every density and any leading. Input's
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
onkeydown={onKeydown}
|
|
59
59
|
onpaste={onPaste}
|
|
60
60
|
class={cn(
|
|
61
|
-
'field-sizing-content max-h-48 min-h-
|
|
61
|
+
'field-sizing-content max-h-48 min-h-control w-full resize-none bg-transparent px-inset-control py-[calc((var(--era-h-control)-1lh)/2)] text-body leading-body text-fg outline-none placeholder:text-muted',
|
|
62
62
|
className
|
|
63
63
|
)}
|
|
64
64
|
{...restProps}></textarea>
|
|
@@ -10,6 +10,6 @@
|
|
|
10
10
|
}: HTMLAttributes<HTMLDivElement> & { children?: Snippet } = $props();
|
|
11
11
|
</script>
|
|
12
12
|
|
|
13
|
-
<div class={cn('flex items-end justify-between gap-
|
|
13
|
+
<div class={cn('flex items-end justify-between gap-gutter', className)} {...restProps}>
|
|
14
14
|
{@render children?.()}
|
|
15
15
|
</div>
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
// base fill while a button inside is hovered, so the highlight lands on the
|
|
91
91
|
// button, not the bar. (General rule for any highlighting container with
|
|
92
92
|
// interactive children.)
|
|
93
|
-
'flex w-full era-interactive flex-col rounded-
|
|
93
|
+
'flex w-full era-interactive flex-col rounded-bar bg-field p-gutter text-body text-fg shadow-well focus-within:bg-field-highlight hover:bg-field-highlight has-[button:hover]:bg-field',
|
|
94
94
|
className
|
|
95
95
|
)}
|
|
96
96
|
{...restProps}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
<li
|
|
13
13
|
class={cn(
|
|
14
|
-
'flex min-w-0 items-center gap-
|
|
14
|
+
'flex min-w-0 items-center gap-gutter rounded-control px-inset-control py-gutter text-body hover:bg-highlight',
|
|
15
15
|
completed ? 'text-muted line-through' : 'text-fg',
|
|
16
16
|
className
|
|
17
17
|
)}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
<ul
|
|
8
8
|
class={cn(
|
|
9
|
-
'flex max-h-48 flex-col gap-
|
|
9
|
+
'flex max-h-48 flex-col gap-gutter overflow-y-auto rounded-bar bg-well p-panel shadow-sm',
|
|
10
10
|
className
|
|
11
11
|
)}
|
|
12
12
|
>
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
<!-- eslint-disable better-tailwindcss/no-unknown-classes -- era-response* are defined in this component's <style> -->
|
|
35
35
|
<div
|
|
36
36
|
class={cn(
|
|
37
|
-
'era-response flex min-w-0 flex-col gap-
|
|
37
|
+
'era-response flex min-w-0 flex-col gap-gutter text-body leading-body text-fg',
|
|
38
38
|
streaming && 'era-response-streaming',
|
|
39
39
|
className
|
|
40
40
|
)}
|
|
@@ -82,20 +82,16 @@
|
|
|
82
82
|
<div
|
|
83
83
|
role="status"
|
|
84
84
|
aria-live="polite"
|
|
85
|
-
class={cn(
|
|
86
|
-
'flex flex-col rounded-(--era-rd-bar) bg-(--era-surface-bg) shadow-(--era-shadow)',
|
|
87
|
-
className
|
|
88
|
-
)}
|
|
85
|
+
class={cn('flex flex-col rounded-bar bg-well shadow-sm', className)}
|
|
89
86
|
{...restProps}
|
|
90
87
|
>
|
|
91
|
-
<div class="flex h-
|
|
88
|
+
<div class="flex h-control items-center gap-gutter px-inset-control">
|
|
92
89
|
<!-- leading status dot + label -->
|
|
93
|
-
<span
|
|
94
|
-
class="flex items-center gap-(--era-inset-pill) font-mono text-body {style.text} era-text-trim"
|
|
95
|
-
>
|
|
90
|
+
<span class="flex items-center gap-inset-pill font-mono text-body {style.text} leading-none">
|
|
96
91
|
<span class={cn('size-1.5 shrink-0 rounded-full', style.dot, style.pulse && 'animate-pulse')}
|
|
97
92
|
></span>
|
|
98
|
-
|
|
93
|
+
<!-- Own box, so the trim applies — see Role for the anonymous-item rule. -->
|
|
94
|
+
<span class="era-text-trim">{style.label}</span>
|
|
99
95
|
</span>
|
|
100
96
|
|
|
101
97
|
{#if tools}
|
|
@@ -116,7 +112,7 @@
|
|
|
116
112
|
|
|
117
113
|
{#if style.active && oncancel}
|
|
118
114
|
<Button size="icon" tone="destructive" onclick={() => oncancel?.()}>
|
|
119
|
-
<X class="size-
|
|
115
|
+
<X class="size-icon" aria-hidden="true" />
|
|
120
116
|
Cancel
|
|
121
117
|
</Button>
|
|
122
118
|
{/if}
|
|
@@ -125,7 +121,7 @@
|
|
|
125
121
|
{#if latest}
|
|
126
122
|
<div
|
|
127
123
|
class={cn(
|
|
128
|
-
'truncate px-
|
|
124
|
+
'truncate px-inset-control pb-inset-chip font-mono text-body',
|
|
129
125
|
LOG_TONE[latest.tone]
|
|
130
126
|
)}
|
|
131
127
|
>
|
|
@@ -50,10 +50,7 @@
|
|
|
50
50
|
truncated message, and an optional trailing timestamp/label. Single-line by
|
|
51
51
|
design (the tail scrolls, it doesn't wrap) so items-center + era-text-trim
|
|
52
52
|
keep the dot and text on one optical baseline. -->
|
|
53
|
-
<div
|
|
54
|
-
class={cn('flex items-center gap-(--era-gap) text-body', TONE[tone], className)}
|
|
55
|
-
{...restProps}
|
|
56
|
-
>
|
|
53
|
+
<div class={cn('flex items-center gap-gutter text-body', TONE[tone], className)} {...restProps}>
|
|
57
54
|
<!-- size-2, the library's dot size (conversations row, run status, swarm) —
|
|
58
55
|
NOT a tier height: h-pill is the pill tier (18-26px), which rendered this
|
|
59
56
|
as a bullet taller than the line it marks. -->
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
const visible = $derived(items && limit !== undefined ? items.slice(-limit) : (items ?? []));
|
|
23
23
|
</script>
|
|
24
24
|
|
|
25
|
-
<div class={cn('flex min-w-0 flex-col gap-
|
|
25
|
+
<div class={cn('flex min-w-0 flex-col gap-gutter', className)} {...restProps}>
|
|
26
26
|
{#if items}
|
|
27
27
|
{#each visible as item, i (item.id ?? i)}
|
|
28
28
|
<Item tone={item.tone} label={item.label} text={item.text} />
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
{href}
|
|
10
10
|
target="_blank"
|
|
11
11
|
rel="noreferrer"
|
|
12
|
-
class="flex items-center gap-
|
|
12
|
+
class="flex items-center gap-gutter text-body text-fg hover:text-bright hover:underline"
|
|
13
13
|
>
|
|
14
|
-
<BookOpen class="size-
|
|
14
|
+
<BookOpen class="size-icon shrink-0 text-muted" aria-hidden="true" />
|
|
15
15
|
<span class="truncate">{title ?? href}</span>
|
|
16
16
|
</a>
|
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
</script>
|
|
8
8
|
|
|
9
9
|
<Step.Summary>
|
|
10
|
-
<BookMarked class="size-
|
|
10
|
+
<BookMarked class="size-icon shrink-0" aria-hidden="true" />
|
|
11
11
|
{#if children}{@render children()}{:else}Used {count} source{count === 1 ? '' : 's'}{/if}
|
|
12
12
|
</Step.Summary>
|
|
@@ -90,21 +90,21 @@
|
|
|
90
90
|
|
|
91
91
|
{#snippet row(kind: 'key' | 'index', label: string, v: unknown)}
|
|
92
92
|
{#if isInline(v)}
|
|
93
|
-
<div class="flex min-w-0 items-baseline gap-
|
|
93
|
+
<div class="flex min-w-0 items-baseline gap-gutter">
|
|
94
94
|
{@render tag(kind, label)}
|
|
95
95
|
{@render leaf(v)}
|
|
96
96
|
</div>
|
|
97
97
|
{:else}
|
|
98
|
-
<div class="flex min-w-0 flex-col gap-
|
|
98
|
+
<div class="flex min-w-0 flex-col gap-gutter">
|
|
99
99
|
{@render tag(kind, label)}
|
|
100
|
-
<div class="border-l border-divider pl-
|
|
100
|
+
<div class="border-l border-divider pl-inset-control">
|
|
101
101
|
<Self value={v} depth={depth + 1} />
|
|
102
102
|
</div>
|
|
103
103
|
</div>
|
|
104
104
|
{/if}
|
|
105
105
|
{/snippet}
|
|
106
106
|
|
|
107
|
-
<div class={cn('flex min-w-0 flex-col gap-
|
|
107
|
+
<div class={cn('flex min-w-0 flex-col gap-gutter text-body', className)} {...restProps}>
|
|
108
108
|
{#if depth > MAX_DEPTH}
|
|
109
109
|
<span class="era-text-trim text-muted">…</span>
|
|
110
110
|
{:else if isRecord(value)}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
full-round — touch mode alone pills the ladder. -->
|
|
23
23
|
<Button
|
|
24
24
|
size="chip"
|
|
25
|
-
class={cn('shrink-0 px-
|
|
25
|
+
class={cn('shrink-0 px-chip', className)}
|
|
26
26
|
onclick={() => onSelect?.(suggestion)}
|
|
27
27
|
>
|
|
28
28
|
{#if children}{@render children()}{:else}{suggestion}{/if}
|
|
@@ -55,13 +55,13 @@
|
|
|
55
55
|
tone="well"
|
|
56
56
|
data-status={agent.status}
|
|
57
57
|
class={cn(
|
|
58
|
-
'flex min-w-0 flex-col gap-
|
|
58
|
+
'flex min-w-0 flex-col gap-gutter p-panel',
|
|
59
59
|
agent.status === 'failed' && 'outline -outline-offset-1 outline-destructive/60',
|
|
60
60
|
className
|
|
61
61
|
)}
|
|
62
62
|
{...restProps}
|
|
63
63
|
>
|
|
64
|
-
<div class="flex min-w-0 items-center gap-
|
|
64
|
+
<div class="flex min-w-0 items-center gap-gutter text-body leading-none">
|
|
65
65
|
<Dot status={agent.status} />
|
|
66
66
|
<Role role={agent.role ?? 'worker'} label={agent.label} class="min-w-0" />
|
|
67
67
|
{#if agent.key}
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
{@render children?.(agent)}
|
|
86
86
|
|
|
87
87
|
{#if agent.sandbox || elapsed != null}
|
|
88
|
-
<div class="flex min-w-0 items-center gap-
|
|
88
|
+
<div class="flex min-w-0 items-center gap-gutter text-body leading-none text-muted">
|
|
89
89
|
{#if agent.sandbox}
|
|
90
90
|
<Sandbox sandbox={agent.sandbox} label />
|
|
91
91
|
{/if}
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
<Card
|
|
41
41
|
tone="well"
|
|
42
42
|
data-kind={artifact.kind}
|
|
43
|
-
class={cn('flex min-w-0 flex-col gap-
|
|
43
|
+
class={cn('flex min-w-0 flex-col gap-gutter p-panel', className)}
|
|
44
44
|
{...restProps}
|
|
45
45
|
>
|
|
46
|
-
<div class="flex min-w-0 items-center gap-
|
|
46
|
+
<div class="flex min-w-0 items-center gap-gutter text-body leading-none">
|
|
47
47
|
<span class="shrink-0 font-mono text-[0.625rem] tracking-[0.15em] text-muted uppercase">
|
|
48
48
|
{artifact.kind}
|
|
49
49
|
</span>
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
and 3/5 answers it where "open" does not. -->
|
|
38
38
|
<div
|
|
39
39
|
data-status={state.status}
|
|
40
|
-
class={cn('flex min-w-0 flex-col gap-
|
|
40
|
+
class={cn('flex min-w-0 flex-col gap-gutter', className)}
|
|
41
41
|
{...restProps}
|
|
42
42
|
>
|
|
43
|
-
<div class="flex min-w-0 items-center gap-
|
|
44
|
-
<GitMerge class="size-
|
|
43
|
+
<div class="flex min-w-0 items-center gap-gutter text-body leading-none">
|
|
44
|
+
<GitMerge class="size-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>
|
|
@@ -26,10 +26,7 @@
|
|
|
26
26
|
when a swarm declares no gates, which most do not. -->
|
|
27
27
|
{#if barriers.length > 0}
|
|
28
28
|
<div
|
|
29
|
-
class={cn(
|
|
30
|
-
'flex min-w-0 flex-col gap-(--era-pad-panel) border-t border-divider-faded p-(--era-pad-panel)',
|
|
31
|
-
className
|
|
32
|
-
)}
|
|
29
|
+
class={cn('flex min-w-0 flex-col gap-panel border-t border-divider-faded p-panel', className)}
|
|
33
30
|
{...restProps}
|
|
34
31
|
>
|
|
35
32
|
{#each barriers as barrier (barrier.id)}
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
<!-- Live tally. Each badge appears only while its number is non-zero, so the
|
|
32
32
|
strip shrinks as a run lands instead of trailing a row of zeroes — and the
|
|
33
33
|
one that matters (failures) is never hidden behind the ones that don't. -->
|
|
34
|
-
<div class={cn('flex shrink-0 items-center gap-
|
|
34
|
+
<div class={cn('flex shrink-0 items-center gap-gutter', className)} {...restProps}>
|
|
35
35
|
{#if quiet}
|
|
36
36
|
<Badge>{tally.total} agents</Badge>
|
|
37
37
|
{:else}
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
{/if}
|
|
43
43
|
{#if tally.sandboxes > 0}
|
|
44
44
|
<Badge>
|
|
45
|
-
<Box class="size-
|
|
45
|
+
<Box class="size-icon" aria-hidden="true" />
|
|
46
46
|
{tally.sandboxes}
|
|
47
47
|
</Badge>
|
|
48
48
|
{/if}
|
|
@@ -50,14 +50,15 @@
|
|
|
50
50
|
|
|
51
51
|
<div
|
|
52
52
|
class={cn(
|
|
53
|
-
'flex h-
|
|
53
|
+
'flex h-control shrink-0 items-center gap-gutter border-t border-divider-faded px-inset-control font-mono text-body leading-none',
|
|
54
54
|
className
|
|
55
55
|
)}
|
|
56
56
|
{...restProps}
|
|
57
57
|
>
|
|
58
|
-
<span class={cn('flex shrink-0 items-center gap-
|
|
58
|
+
<span class={cn('flex shrink-0 items-center gap-gutter', tone.class)}>
|
|
59
59
|
<Dot status={tone.status} label={tone.label} class={tone.pulse ? 'animate-pulse' : undefined} />
|
|
60
|
-
|
|
60
|
+
<!-- Own box, so the trim applies — see Role for the anonymous-item rule. -->
|
|
61
|
+
<span class="era-text-trim">{tone.label}</span>
|
|
61
62
|
</span>
|
|
62
63
|
<!-- Always rendered, empty when there is nothing to say: the span is also the
|
|
63
64
|
spacer that pushes the watermark to the trailing edge. -->
|
|
@@ -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-bar)*6),1fr))] gap-
|
|
37
|
+
'grid min-w-0 grid-cols-[repeat(auto-fill,minmax(calc(var(--era-h-bar)*6),1fr))] gap-gutter p-gutter',
|
|
38
38
|
className
|
|
39
39
|
)}
|
|
40
40
|
{...restProps}
|
|
41
41
|
>
|
|
42
42
|
{#if nodes.length === 0}
|
|
43
|
-
<div class="px-
|
|
43
|
+
<div class="px-inset-control py-gutter 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-
|
|
46
|
+
'flex h-control shrink-0 items-center gap-gutter px-inset-control text-body leading-none',
|
|
47
47
|
className
|
|
48
48
|
)}
|
|
49
49
|
{...restProps}
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
group to the edge, so there is no empty-title branch to keep in sync. -->
|
|
56
56
|
<span class="min-w-0 flex-1 truncate text-bright">{title ?? ''}</span>
|
|
57
57
|
{#if children}
|
|
58
|
-
<div class="flex shrink-0 items-center gap-
|
|
58
|
+
<div class="flex shrink-0 items-center gap-gutter">
|
|
59
59
|
{@render children()}
|
|
60
60
|
</div>
|
|
61
61
|
{/if}
|
|
@@ -160,12 +160,10 @@
|
|
|
160
160
|
highlight instantly so a fast pass down the tree doesn't smear. -->
|
|
161
161
|
<div
|
|
162
162
|
class={cn(
|
|
163
|
-
'flex h-
|
|
164
|
-
hasActions ? 'pr-
|
|
163
|
+
'flex h-control items-center gap-gutter rounded-control pl-inset-control text-body leading-none',
|
|
164
|
+
hasActions ? 'pr-pill-inset-control' : 'pr-inset-control',
|
|
165
165
|
(hasChildren || hasDetail) && 'cursor-pointer',
|
|
166
|
-
active
|
|
167
|
-
? 'bg-hover text-bright'
|
|
168
|
-
: 'text-fg hover:bg-(--era-highlight) hover:shadow-(--era-highlight-shadow)',
|
|
166
|
+
active ? 'bg-hover text-bright' : 'text-fg hover:bg-highlight hover:shadow-highlight',
|
|
169
167
|
// Scoped to the DIRECT parent, not the group: every node in the tree is
|
|
170
168
|
// a group/node, and a named group matches ANY ancestor — focusing a
|
|
171
169
|
// parent row was outlining every visible child row. `:focus-visible > &`
|
|
@@ -183,14 +181,14 @@
|
|
|
183
181
|
single source of truth, without the ancestry. -->
|
|
184
182
|
<ChevronRight
|
|
185
183
|
class={cn(
|
|
186
|
-
'size-
|
|
184
|
+
'size-icon shrink-0 text-muted transition-transform duration-base ease-base',
|
|
187
185
|
open && 'rotate-90'
|
|
188
186
|
)}
|
|
189
187
|
aria-hidden="true"
|
|
190
188
|
/>
|
|
191
189
|
{:else}
|
|
192
190
|
<!-- Keeps every row's dot on the same column, expandable or not. -->
|
|
193
|
-
<span class="size-
|
|
191
|
+
<span class="size-icon shrink-0" aria-hidden="true"></span>
|
|
194
192
|
{/if}
|
|
195
193
|
|
|
196
194
|
<Dot status={agent.status} />
|
|
@@ -225,7 +223,7 @@
|
|
|
225
223
|
event.stopPropagation();
|
|
226
224
|
toggleDetail();
|
|
227
225
|
}}
|
|
228
|
-
class="shrink-0 era-interactive cursor-pointer rounded-
|
|
226
|
+
class="shrink-0 era-interactive cursor-pointer rounded-pill px-pill font-mono text-body era-text-trim text-muted hover:bg-highlight hover:text-fg data-[state=open]:bg-hover data-[state=open]:text-fg"
|
|
229
227
|
>
|
|
230
228
|
{detailLabel}
|
|
231
229
|
</button>
|
|
@@ -263,7 +261,7 @@
|
|
|
263
261
|
<Collapsible.Root bind:open={detailOpen}>
|
|
264
262
|
<Collapsible.Content class="era-collapse">
|
|
265
263
|
<div
|
|
266
|
-
class="min-w-0 pr-
|
|
264
|
+
class="min-w-0 pr-inset-control pb-gutter pl-[calc(var(--era-inset-control)+var(--era-h-icon)+var(--era-gap))]"
|
|
267
265
|
>
|
|
268
266
|
{@render detail?.(agent)}
|
|
269
267
|
</div>
|
|
@@ -53,12 +53,15 @@
|
|
|
53
53
|
data-role={role}
|
|
54
54
|
title={name}
|
|
55
55
|
class={cn(
|
|
56
|
-
'inline-flex shrink-0 items-center gap-
|
|
56
|
+
'inline-flex shrink-0 items-center gap-gutter font-mono text-[0.625rem] leading-none tracking-[0.15em] uppercase',
|
|
57
57
|
role === 'orchestrator' ? 'text-fg' : 'text-muted',
|
|
58
58
|
className
|
|
59
59
|
)}
|
|
60
60
|
{...restProps}
|
|
61
61
|
>
|
|
62
|
-
<Icon class="size-
|
|
63
|
-
|
|
62
|
+
<Icon class="size-icon shrink-0" aria-hidden="true" />
|
|
63
|
+
<!-- The name gets its OWN box so the caps trim has something to trim. Left on
|
|
64
|
+
the flex row it was inert: bare text in a flex container is an anonymous
|
|
65
|
+
item, which no non-inherited property reaches. -->
|
|
66
|
+
<span class="era-text-trim-caps">{name}</span>
|
|
64
67
|
</span>
|
|
@@ -51,10 +51,7 @@
|
|
|
51
51
|
swarm reads as a region of it, not a card floating above it. -->
|
|
52
52
|
<div
|
|
53
53
|
bind:this={ref}
|
|
54
|
-
class={cn(
|
|
55
|
-
'flex min-w-0 flex-col rounded-(--era-rd-bar) bg-(--era-surface-bg) shadow-(--era-shadow)',
|
|
56
|
-
className
|
|
57
|
-
)}
|
|
54
|
+
class={cn('flex min-w-0 flex-col rounded-bar bg-well shadow-sm', className)}
|
|
58
55
|
{...restProps}
|
|
59
56
|
>
|
|
60
57
|
{@render children?.()}
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
indicator for both hides exactly the state you opened a console to find. -->
|
|
50
50
|
<span
|
|
51
51
|
class={cn(
|
|
52
|
-
'flex min-w-0 shrink-0 items-center gap-
|
|
52
|
+
'flex min-w-0 shrink-0 items-center gap-gutter font-mono',
|
|
53
53
|
SANDBOX_TONE[sandbox.status],
|
|
54
54
|
className
|
|
55
55
|
)}
|
|
@@ -57,17 +57,14 @@
|
|
|
57
57
|
>
|
|
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
|
-
<Box
|
|
61
|
-
class={cn('size-(--era-h-icon) shrink-0', sandbox.busy && 'animate-pulse')}
|
|
62
|
-
aria-hidden="true"
|
|
63
|
-
/>
|
|
60
|
+
<Box class={cn('size-icon shrink-0', sandbox.busy && 'animate-pulse')} aria-hidden="true" />
|
|
64
61
|
{#if sandbox.checkpoint}
|
|
65
62
|
<!-- A paused VM kept as a restore point — the camera badge, as the
|
|
66
63
|
reference console draws it. -->
|
|
67
|
-
<Camera class="size-
|
|
64
|
+
<Camera class="size-glyph-pill shrink-0" aria-hidden="true" />
|
|
68
65
|
{:else if forkOf}
|
|
69
66
|
<!-- Live-forked from a parent VM; the lineage is in the title. -->
|
|
70
|
-
<GitBranch class="size-
|
|
67
|
+
<GitBranch class="size-glyph-pill shrink-0" aria-hidden="true" />
|
|
71
68
|
{/if}
|
|
72
69
|
{#if label}<span class="truncate">{sandbox.status}</span>{/if}
|
|
73
70
|
</span>
|
|
@@ -181,11 +181,11 @@
|
|
|
181
181
|
aria-label="Swarm agents"
|
|
182
182
|
{onkeydown}
|
|
183
183
|
{onfocusin}
|
|
184
|
-
class={cn('@container min-w-0 py-
|
|
184
|
+
class={cn('@container min-w-0 py-gutter', className)}
|
|
185
185
|
{...restProps}
|
|
186
186
|
>
|
|
187
187
|
{#if rows.length === 0}
|
|
188
|
-
<div class="px-
|
|
188
|
+
<div class="px-inset-control py-gutter text-body text-muted">
|
|
189
189
|
{#if empty}{@render empty()}{:else}No agents yet.{/if}
|
|
190
190
|
</div>
|
|
191
191
|
{:else}
|
|
@@ -8,10 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
<!-- The task log rail: items hang off a left border, terminal-trace style. -->
|
|
10
10
|
<Step.Content
|
|
11
|
-
class={cn(
|
|
12
|
-
'border-divider-faded border-s-2 bg-transparent p-0 ps-(--era-pad-panel) shadow-none',
|
|
13
|
-
className
|
|
14
|
-
)}
|
|
11
|
+
class={cn('border-divider-faded border-s-2 bg-transparent p-0 ps-panel shadow-none', className)}
|
|
15
12
|
>
|
|
16
13
|
{@render children?.()}
|
|
17
14
|
</Step.Content>
|
|
@@ -47,20 +47,20 @@
|
|
|
47
47
|
data-status={status}
|
|
48
48
|
{onclick}
|
|
49
49
|
class={cn(
|
|
50
|
-
'inline-flex h-
|
|
50
|
+
'inline-flex h-pill max-w-full min-w-0 shrink-0 era-interactive cursor-pointer items-center gap-gutter rounded-pill px-pill text-body leading-none text-muted transition-colors duration-base ease-base hover:bg-highlight hover:text-fg',
|
|
51
51
|
active && 'bg-fill text-fg',
|
|
52
52
|
className
|
|
53
53
|
)}
|
|
54
54
|
{...restProps}
|
|
55
55
|
>
|
|
56
56
|
<Icon
|
|
57
|
-
class={cn('size-
|
|
57
|
+
class={cn('size-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')}>
|
|
61
61
|
{@render children?.()}
|
|
62
62
|
</span>
|
|
63
63
|
{#if status === 'error'}
|
|
64
|
-
<span class="size-
|
|
64
|
+
<span class="size-gutter shrink-0 rounded-full bg-destructive" aria-hidden="true"></span>
|
|
65
65
|
{/if}
|
|
66
66
|
</button>
|
|
@@ -23,19 +23,19 @@
|
|
|
23
23
|
cursor is excluded), with one shared expansion area below. -->
|
|
24
24
|
<div class={cn('flex min-w-0 flex-col', className)}>
|
|
25
25
|
<div
|
|
26
|
-
class="flex flex-wrap items-center gap-
|
|
26
|
+
class="flex flex-wrap items-center gap-gutter [&>*:not(:first-child):not([data-chips-cursor])]:border-l [&>*:not(:first-child):not([data-chips-cursor])]:border-divider-faded [&>*:not(:first-child):not([data-chips-cursor])]:pl-gutter"
|
|
27
27
|
>
|
|
28
28
|
{@render children?.()}
|
|
29
29
|
{#if streaming}
|
|
30
30
|
<span
|
|
31
31
|
data-chips-cursor
|
|
32
|
-
class="size-
|
|
32
|
+
class="size-gutter shrink-0 rounded-full bg-primary"
|
|
33
33
|
aria-hidden="true"
|
|
34
34
|
></span>
|
|
35
35
|
{/if}
|
|
36
36
|
</div>
|
|
37
37
|
{#if expanded}
|
|
38
|
-
<div class="mt-
|
|
38
|
+
<div class="mt-gutter min-w-0">
|
|
39
39
|
{@render expanded()}
|
|
40
40
|
</div>
|
|
41
41
|
{/if}
|