@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
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
const failed = $derived(exitCode !== undefined && exitCode !== 0);
|
|
20
20
|
</script>
|
|
21
21
|
|
|
22
|
-
<div class="flex min-w-0 flex-col gap-
|
|
22
|
+
<div class="flex min-w-0 flex-col gap-panel">
|
|
23
23
|
{#if command || failed}
|
|
24
|
-
<div class="flex min-w-0 items-center gap-
|
|
24
|
+
<div class="flex min-w-0 items-center gap-gutter">
|
|
25
25
|
{#if command}
|
|
26
26
|
<code class="min-w-0 flex-1 truncate font-mono text-body text-muted">{command}</code>
|
|
27
27
|
{/if}
|
|
@@ -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-
|
|
42
|
+
class="min-w-0 overflow-x-auto rounded-control bg-field p-panel font-mono text-body whitespace-pre-wrap text-muted 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-
|
|
49
|
+
class="min-w-0 overflow-x-auto rounded-control bg-field p-panel font-mono text-body whitespace-pre-wrap text-destructive shadow-well">{stderr}</pre>
|
|
50
50
|
</Step.Section>
|
|
51
51
|
{/if}
|
|
52
52
|
</div>
|
|
@@ -15,19 +15,14 @@
|
|
|
15
15
|
let nonce = $state(0);
|
|
16
16
|
</script>
|
|
17
17
|
|
|
18
|
-
<div
|
|
19
|
-
class=
|
|
20
|
-
'flex min-h-0 flex-col overflow-hidden rounded-(--era-rd-bar) bg-(--era-surface-bg) shadow-(--era-shadow-lg)',
|
|
21
|
-
className
|
|
22
|
-
)}
|
|
23
|
-
>
|
|
24
|
-
<Bar size="control" class="shrink-0 gap-(--era-gap) rounded-none">
|
|
18
|
+
<div class={cn('flex min-h-0 flex-col overflow-hidden rounded-bar bg-well shadow-lg', className)}>
|
|
19
|
+
<Bar size="control" class="shrink-0 gap-gutter rounded-none">
|
|
25
20
|
<Button icon size="chip" aria-label="Reload" onclick={() => (nonce += 1)}>
|
|
26
|
-
<RotateCw class="size-
|
|
21
|
+
<RotateCw class="size-icon" />
|
|
27
22
|
</Button>
|
|
28
23
|
<Input
|
|
29
24
|
bind:value={draft}
|
|
30
|
-
class="h-
|
|
25
|
+
class="h-chip flex-1"
|
|
31
26
|
placeholder="https://…"
|
|
32
27
|
onkeydown={(e: KeyboardEvent) => {
|
|
33
28
|
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-
|
|
15
|
+
<SvelteFlow bind:nodes bind:edges fitView class="rounded-bar shadow-sm">
|
|
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-
|
|
15
|
+
'flex w-56 flex-col overflow-hidden rounded-control bg-elevated text-body 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-
|
|
22
|
+
class="flex h-control items-center border-b border-divider-faded px-inset-control font-medium text-bright"
|
|
23
23
|
>
|
|
24
24
|
{title}
|
|
25
25
|
</div>
|
|
26
26
|
{/if}
|
|
27
|
-
<div class="p-
|
|
27
|
+
<div class="p-inset-control text-fg">{@render children?.()}</div>
|
|
28
28
|
<Handle type="source" position={Position.Right} />
|
|
29
29
|
</div>
|
package/dist/apps/index.d.ts
CHANGED
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
* makes product decisions a primitive never would, which is exactly why these
|
|
8
8
|
* live behind their own subpath instead of the root barrel.
|
|
9
9
|
*
|
|
10
|
-
* Apps are NOT re-exported from `@
|
|
10
|
+
* Apps are NOT re-exported from `@signal9/era-ui`. Each carries heavy,
|
|
11
11
|
* app-specific dependencies (Notes brings TipTap), and the same reasoning that
|
|
12
12
|
* isolates `ai/workflow` on its own subpath applies here: a consumer who never
|
|
13
|
-
* imports an app never pays for it. Import from `@
|
|
14
|
-
* single app, e.g. `@
|
|
13
|
+
* imports an app never pays for it. Import from `@signal9/era-ui/apps` (or a
|
|
14
|
+
* single app, e.g. `@signal9/era-ui/apps/notes`) and install that app's peers.
|
|
15
15
|
*
|
|
16
16
|
* Exports are flat and prefixed by app (`Notes`, `NotesStore`, `NoteEditor`) so
|
|
17
17
|
* a second app can land without a namespace churn.
|
package/dist/apps/index.js
CHANGED
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
* makes product decisions a primitive never would, which is exactly why these
|
|
8
8
|
* live behind their own subpath instead of the root barrel.
|
|
9
9
|
*
|
|
10
|
-
* Apps are NOT re-exported from `@
|
|
10
|
+
* Apps are NOT re-exported from `@signal9/era-ui`. Each carries heavy,
|
|
11
11
|
* app-specific dependencies (Notes brings TipTap), and the same reasoning that
|
|
12
12
|
* isolates `ai/workflow` on its own subpath applies here: a consumer who never
|
|
13
|
-
* imports an app never pays for it. Import from `@
|
|
14
|
-
* single app, e.g. `@
|
|
13
|
+
* imports an app never pays for it. Import from `@signal9/era-ui/apps` (or a
|
|
14
|
+
* single app, e.g. `@signal9/era-ui/apps/notes`) and install that app's peers.
|
|
15
15
|
*
|
|
16
16
|
* Exports are flat and prefixed by app (`Notes`, `NotesStore`, `NoteEditor`) so
|
|
17
17
|
* a second app can land without a namespace churn.
|
|
@@ -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-
|
|
146
|
+
<div class="shrink-0 border-b border-divider px-card py-gutter">
|
|
147
147
|
<AI.RunStatus.Root
|
|
148
148
|
status={runStatus}
|
|
149
149
|
tools={{
|
|
@@ -187,9 +187,9 @@
|
|
|
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-
|
|
190
|
+
<div class="mx-auto w-full max-w-2xl shrink-0 p-card pt-0">
|
|
191
191
|
{#if active && active.messages.length === 0 && suggestions.length > 0}
|
|
192
|
-
<div class="pb-
|
|
192
|
+
<div class="pb-gutter">
|
|
193
193
|
<AI.Suggestions.Root>
|
|
194
194
|
{#each suggestions as s (s)}
|
|
195
195
|
<AI.Suggestions.Suggestion suggestion={s} onSelect={(t) => onSend?.(t)} />
|
|
@@ -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-
|
|
268
|
+
<Card tone="well" class="flex min-w-0 flex-col gap-panel p-panel">
|
|
269
269
|
<AI.Tool.Input input={tool.input} />
|
|
270
270
|
<AI.Tool.Output output={tool.output} />
|
|
271
271
|
</Card>
|
|
@@ -53,9 +53,7 @@
|
|
|
53
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
|
|
57
|
-
class="flex h-control shrink-0 items-center px-inset-control text-body era-text-trim text-muted"
|
|
58
|
-
>
|
|
56
|
+
<div class="era-label-ink h-control shrink-0 px-inset-control text-body text-muted">
|
|
59
57
|
No commands
|
|
60
58
|
</div>
|
|
61
59
|
{:else}
|
|
@@ -63,7 +61,7 @@
|
|
|
63
61
|
{@const Icon = item.icon}
|
|
64
62
|
<button
|
|
65
63
|
type="button"
|
|
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
|
|
64
|
+
class="flex h-control w-full shrink-0 cursor-pointer items-center gap-gutter rounded-menu-item px-inset-control text-left text-body leading-none text-fg {i ===
|
|
67
65
|
selected
|
|
68
66
|
? 'bg-highlight shadow-highlight'
|
|
69
67
|
: ''}"
|
|
@@ -239,13 +239,13 @@
|
|
|
239
239
|
|
|
240
240
|
{#snippet paneHeader()}
|
|
241
241
|
{#if selected}
|
|
242
|
-
<div class="relative flex min-w-0 items-center gap-
|
|
242
|
+
<div class="relative flex min-w-0 items-center gap-gutter" data-pane-control>
|
|
243
243
|
{@render iconPicker(selected)}
|
|
244
244
|
{@render titleField(selected, 'field-sizing-content max-w-56 min-w-0 text-center')}
|
|
245
245
|
<!-- Absolutely positioned, so the badge appearing never nudges the
|
|
246
246
|
centred title; empty when the status is quiet, which costs
|
|
247
247
|
nothing off-flow. -->
|
|
248
|
-
<span class="absolute top-1/2 left-full ml-
|
|
248
|
+
<span class="absolute top-1/2 left-full ml-gutter -translate-y-1/2">
|
|
249
249
|
{@render statusBadge()}
|
|
250
250
|
</span>
|
|
251
251
|
</div>
|
|
@@ -303,7 +303,7 @@
|
|
|
303
303
|
one, and the bar's + is always within reach. Two competing CTAs for
|
|
304
304
|
an empty list reads as indecision. -->
|
|
305
305
|
<div
|
|
306
|
-
class="flex flex-1 flex-col items-center justify-center gap-gutter p-
|
|
306
|
+
class="flex flex-1 flex-col items-center justify-center gap-gutter p-section text-center"
|
|
307
307
|
>
|
|
308
308
|
<p class="text-muted">{query ? 'No matches' : 'No notes yet'}</p>
|
|
309
309
|
</div>
|
|
@@ -331,8 +331,8 @@
|
|
|
331
331
|
{#snippet child({ props })}
|
|
332
332
|
<div
|
|
333
333
|
{...props}
|
|
334
|
-
class="group/row flex h-control cursor-pointer items-center gap-
|
|
335
|
-
? 'bg-hover text-bright shadow-
|
|
334
|
+
class="group/row flex h-control cursor-pointer items-center gap-pill-inset-control rounded-control px-pill-inset-control leading-none {current
|
|
335
|
+
? 'bg-hover text-bright shadow-pressed'
|
|
336
336
|
: 'hover:bg-highlight hover:shadow-highlight'}"
|
|
337
337
|
role="option"
|
|
338
338
|
aria-selected={current}
|
|
@@ -351,7 +351,7 @@
|
|
|
351
351
|
{#if note.icon}
|
|
352
352
|
{note.icon}
|
|
353
353
|
{:else}
|
|
354
|
-
<FileText class="size-
|
|
354
|
+
<FileText class="size-glyph-pill text-muted" />
|
|
355
355
|
{/if}
|
|
356
356
|
</span>
|
|
357
357
|
|
|
@@ -370,7 +370,7 @@
|
|
|
370
370
|
{formatAge(note.updatedAt)}
|
|
371
371
|
</span>
|
|
372
372
|
<span
|
|
373
|
-
class="hidden shrink-0 items-center gap-
|
|
373
|
+
class="hidden shrink-0 items-center gap-pill-inset-control group-hover/row:flex"
|
|
374
374
|
>
|
|
375
375
|
<Button
|
|
376
376
|
icon
|
|
@@ -467,7 +467,7 @@
|
|
|
467
467
|
{/key}
|
|
468
468
|
</div>
|
|
469
469
|
{:else}
|
|
470
|
-
<div class="flex flex-1 flex-col items-center justify-center gap-gutter p-
|
|
470
|
+
<div class="flex flex-1 flex-col items-center justify-center gap-gutter p-section">
|
|
471
471
|
<p class="text-muted">
|
|
472
472
|
{store.notes.length === 0 ? 'Create a note to get started' : 'Select a note'}
|
|
473
473
|
</p>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A flex row that centres its OWN bare text — the one place ink centring
|
|
3
|
+
* cannot be applied, and so the one place it silently isn't.
|
|
4
|
+
*
|
|
5
|
+
* `text-box-trim` is era's mechanism for centring INK rather than the font box:
|
|
6
|
+
* it collapses the line box to a typographic band so what you see is centred
|
|
7
|
+
* rather than what the metrics measure. It applies to a BLOCK box. It cannot
|
|
8
|
+
* apply to bare text inside a flex container, because that text is wrapped in
|
|
9
|
+
* an ANONYMOUS flex item — a box no selector reaches and no non-inherited
|
|
10
|
+
* property touches. `text-box-trim` is not inherited, so it never arrives.
|
|
11
|
+
*
|
|
12
|
+
* Proven rather than reasoned: the same pill rendered `flex + trim` and `flex,
|
|
13
|
+
* no trim` produces IDENTICAL ink, to the device pixel. Centring then falls
|
|
14
|
+
* back to `align-items` on the LINE BOX — precisely the font-metric-dependent
|
|
15
|
+
* centring the trim exists to eliminate. On the shipped mono stack that put a
|
|
16
|
+
* badge's caps 2px high in an 18px pill.
|
|
17
|
+
*
|
|
18
|
+
* This audit deliberately does NOT look for the `era-text-trim` class. That was
|
|
19
|
+
* the first version, and it was the wrong instrument: deleting an inert class
|
|
20
|
+
* silences it while leaving the text exactly as mis-centred as before. What
|
|
21
|
+
* matters is the SHAPE — a centring flex row with a text node of its own — so
|
|
22
|
+
* that is what it measures. It stays true after the cleanup.
|
|
23
|
+
*
|
|
24
|
+
* Two kinds of hit, and only one of them is the author's to fix:
|
|
25
|
+
*
|
|
26
|
+
* FIXABLE — the row holds nothing but text. It has no reason to be flex; as a
|
|
27
|
+
* block with `era-label-ink` (or `era-token-ink` for a centred token) the trim
|
|
28
|
+
* works and the centring stops depending on the font.
|
|
29
|
+
*
|
|
30
|
+
* STRUCTURAL — the row holds an icon AND text. The box must stay flex to lay
|
|
31
|
+
* the two out, which re-creates the anonymous item, and no CSS reaches it.
|
|
32
|
+
* Components take the `not-has-[svg]:era-label-ink` guard so the text-only
|
|
33
|
+
* case is centred properly and only the icon case falls back. Closing it for
|
|
34
|
+
* good means the label arriving in its own slot instead of inside an opaque
|
|
35
|
+
* `children` snippet — an API change, tracked in KNOWN_ISSUES.
|
|
36
|
+
*/
|
|
37
|
+
/** Cheap pre-filter: only a row that CENTRES is relying on ink centring. */
|
|
38
|
+
const CENTRING = new Set(['center', 'safe center', 'anchor-center']);
|
|
39
|
+
export const anonymousText = {
|
|
40
|
+
id: 'typography/anonymous-text',
|
|
41
|
+
name: 'A flex row centres its own bare text',
|
|
42
|
+
description: 'Bare text in a flex container is an anonymous flex item, which text-box-trim cannot reach — the ink is centred by font metrics instead. Make a text-only row a block with era-label-ink; an icon+text row needs the label in its own element.',
|
|
43
|
+
category: 'typography',
|
|
44
|
+
severity: 'warn',
|
|
45
|
+
// Every flex box is a candidate; the checks below are the real gate and are
|
|
46
|
+
// far cheaper than reading styles for the whole tree.
|
|
47
|
+
selector: 'div,span,button,a,label,li,header,footer,summary',
|
|
48
|
+
check(el) {
|
|
49
|
+
const s = getComputedStyle(el);
|
|
50
|
+
if (s.display !== 'flex' && s.display !== 'inline-flex')
|
|
51
|
+
return null;
|
|
52
|
+
if (!CENTRING.has(s.alignItems))
|
|
53
|
+
return null;
|
|
54
|
+
// The anonymous item itself: a text node directly under the flex box.
|
|
55
|
+
const ownText = [...el.childNodes].some((n) => n.nodeType === Node.TEXT_NODE && n.textContent?.trim());
|
|
56
|
+
if (!ownText)
|
|
57
|
+
return null;
|
|
58
|
+
// Multi-line text is not centred by ink in the first place — this law is
|
|
59
|
+
// about single-line control chrome, which is what `nowrap` marks.
|
|
60
|
+
if (s.whiteSpace !== 'nowrap' && s.flexWrap !== 'nowrap')
|
|
61
|
+
return null;
|
|
62
|
+
const hasElementChild = el.children.length > 0;
|
|
63
|
+
const issue = {
|
|
64
|
+
auditId: 'typography/anonymous-text',
|
|
65
|
+
element: el,
|
|
66
|
+
message: hasElementChild
|
|
67
|
+
? 'flex row holding an icon AND its own bare text — the text is an anonymous flex item, so its ink is centred by font metrics. The label needs its own element (or its own slot) before a trim can reach it.'
|
|
68
|
+
: 'flex row holding nothing but text — it has no reason to be flex. Make it a block with era-label-ink (or era-token-ink for a centred token) and the trim applies.',
|
|
69
|
+
details: { display: s.display, hasElementChild }
|
|
70
|
+
};
|
|
71
|
+
return issue;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* its copy button — so flagging it would be noise. Nothing has a reason to sit
|
|
17
17
|
* closer to its top edge than its bottom.
|
|
18
18
|
*
|
|
19
|
-
* `p-
|
|
19
|
+
* `p-section` is the one earned exception and is exempt by construction rather
|
|
20
20
|
* than by name: it subtracts the heading ROW's own slack from its top padding,
|
|
21
21
|
* so it only ever appears on a full-bleed section with no radius, and this
|
|
22
22
|
* audit looks only at rounded boxes — the ones that read as a container.
|
|
@@ -34,7 +34,7 @@ export const evenContainerPadding = {
|
|
|
34
34
|
const s = getComputedStyle(el);
|
|
35
35
|
// Rounded boxes only: a radius is what makes a box read as a container
|
|
36
36
|
// with edges, and it also excludes the full-bleed page sections whose
|
|
37
|
-
// top padding is legitimately reduced (see p-
|
|
37
|
+
// top padding is legitimately reduced (see p-section).
|
|
38
38
|
if (parseFloat(s.borderTopLeftRadius) <= 0)
|
|
39
39
|
return null;
|
|
40
40
|
const top = parseFloat(s.paddingTop) || 0;
|
|
@@ -4,6 +4,7 @@ import { concentricInset } from './concentric-inset.js';
|
|
|
4
4
|
import { cornersAxis } from './corners-axis.js';
|
|
5
5
|
import { evenContainerPadding } from './even-container-padding.js';
|
|
6
6
|
import { flatChrome } from './flat-chrome.js';
|
|
7
|
+
import { anonymousText } from './anonymous-text.js';
|
|
7
8
|
import { iconFlush } from './icon-flush.js';
|
|
8
9
|
import { offAxisMotion } from './off-axis-motion.js';
|
|
9
10
|
import { offTierHeight } from './off-tier-height.js';
|
|
@@ -14,4 +15,4 @@ import { restingGap } from './resting-gap.js';
|
|
|
14
15
|
import { singleGlyphSquare } from './single-glyph-square.js';
|
|
15
16
|
import { uniformSiblingGaps } from './uniform-sibling-gaps.js';
|
|
16
17
|
import { wallMatchesGap } from './wall-matches-gap.js';
|
|
17
|
-
export { clippedGlyphs, collapsedTextTrim, concentricInset, cornersAxis, evenContainerPadding, flatChrome, iconFlush, offAxisMotion, offTierHeight, pillHoldsItsInk, proseLeading, radiusConcentricity, restingGap, singleGlyphSquare, uniformSiblingGaps, wallMatchesGap };
|
|
18
|
+
export { clippedGlyphs, collapsedTextTrim, concentricInset, cornersAxis, evenContainerPadding, flatChrome, iconFlush, anonymousText, offAxisMotion, offTierHeight, pillHoldsItsInk, proseLeading, radiusConcentricity, restingGap, singleGlyphSquare, uniformSiblingGaps, wallMatchesGap };
|
|
@@ -5,6 +5,7 @@ import { concentricInset } from './concentric-inset.js';
|
|
|
5
5
|
import { cornersAxis } from './corners-axis.js';
|
|
6
6
|
import { evenContainerPadding } from './even-container-padding.js';
|
|
7
7
|
import { flatChrome } from './flat-chrome.js';
|
|
8
|
+
import { anonymousText } from './anonymous-text.js';
|
|
8
9
|
import { iconFlush } from './icon-flush.js';
|
|
9
10
|
import { offAxisMotion } from './off-axis-motion.js';
|
|
10
11
|
import { offTierHeight } from './off-tier-height.js';
|
|
@@ -15,7 +16,7 @@ import { restingGap } from './resting-gap.js';
|
|
|
15
16
|
import { singleGlyphSquare } from './single-glyph-square.js';
|
|
16
17
|
import { uniformSiblingGaps } from './uniform-sibling-gaps.js';
|
|
17
18
|
import { wallMatchesGap } from './wall-matches-gap.js';
|
|
18
|
-
export { clippedGlyphs, collapsedTextTrim, concentricInset, cornersAxis, evenContainerPadding, flatChrome, iconFlush, offAxisMotion, offTierHeight, pillHoldsItsInk, proseLeading, radiusConcentricity, restingGap, singleGlyphSquare, uniformSiblingGaps, wallMatchesGap };
|
|
19
|
+
export { clippedGlyphs, collapsedTextTrim, concentricInset, cornersAxis, evenContainerPadding, flatChrome, iconFlush, anonymousText, offAxisMotion, offTierHeight, pillHoldsItsInk, proseLeading, radiusConcentricity, restingGap, singleGlyphSquare, uniformSiblingGaps, wallMatchesGap };
|
|
19
20
|
// Auto-register built-ins. Consumers can still unregister or add their own.
|
|
20
21
|
//
|
|
21
22
|
// Two of these only tell the truth on a particular axis setting, because the bug
|
|
@@ -31,6 +32,7 @@ registry.register(cornersAxis);
|
|
|
31
32
|
registry.register(evenContainerPadding);
|
|
32
33
|
registry.register(flatChrome);
|
|
33
34
|
registry.register(iconFlush);
|
|
35
|
+
registry.register(anonymousText);
|
|
34
36
|
registry.register(offAxisMotion);
|
|
35
37
|
registry.register(offTierHeight);
|
|
36
38
|
registry.register(pillHoldsItsInk);
|
|
@@ -5,8 +5,8 @@ import { BOUNDED_TIER_MAX } from '../../measure.js';
|
|
|
5
5
|
*
|
|
6
6
|
* Rule 5: every element that can hold a single glyph carries a min-width equal to
|
|
7
7
|
* its tier height, so one character renders as a perfect square (or circle, once
|
|
8
|
-
* rounded) instead of a skinny vertical pill. Icon buttons take min-w-
|
|
9
|
-
* Badge, Chip and the KV value cell take min-w-
|
|
8
|
+
* rounded) instead of a skinny vertical pill. Icon buttons take min-w-control;
|
|
9
|
+
* Badge, Chip and the KV value cell take min-w-pill.
|
|
10
10
|
*
|
|
11
11
|
* Drop the min-width and nothing looks wrong until content happens to BE one
|
|
12
12
|
* character — a badge showing "1", a count that ticks from 10 down to 9 — and the
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type AuditSeverity = 'info' | 'warn' | 'error';
|
|
2
|
-
export type AuditCategory = 'layout' | 'tokens' | 'a11y' | 'semantics';
|
|
2
|
+
export type AuditCategory = 'layout' | 'tokens' | 'typography' | 'a11y' | 'semantics';
|
|
3
3
|
export interface Issue {
|
|
4
4
|
readonly auditId: string;
|
|
5
5
|
readonly element: HTMLElement;
|
|
@@ -59,10 +59,10 @@
|
|
|
59
59
|
|
|
60
60
|
{#if dev && open}
|
|
61
61
|
<div
|
|
62
|
-
class="fixed right-4 bottom-4 z-50 flex max-h-[70vh] w-96 flex-col overflow-hidden rounded-
|
|
62
|
+
class="fixed right-4 bottom-4 z-50 flex max-h-[70vh] w-96 flex-col overflow-hidden rounded-control bg-surface font-mono text-body shadow-[inset_0_0_0_0.5px_var(--color-border),var(--era-shadow)]"
|
|
63
63
|
>
|
|
64
64
|
<header
|
|
65
|
-
class="flex items-center gap-
|
|
65
|
+
class="flex items-center gap-icon-inset-chip px-inset-chip py-gutter shadow-[inset_0_-0.5px_0_0_var(--color-border)]"
|
|
66
66
|
>
|
|
67
67
|
<strong class="text-bright">audits</strong>
|
|
68
68
|
<span class="text-muted">
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
{@const enabled = registry.isEnabled(r.audit.id)}
|
|
82
82
|
<details open={r.issues.length > 0}>
|
|
83
83
|
<summary
|
|
84
|
-
class="flex cursor-pointer items-center gap-
|
|
84
|
+
class="flex cursor-pointer items-center gap-icon-inset-chip px-inset-chip py-gutter hover:bg-highlight"
|
|
85
85
|
>
|
|
86
86
|
<input
|
|
87
87
|
type="checkbox"
|
|
@@ -95,13 +95,13 @@
|
|
|
95
95
|
</span>
|
|
96
96
|
</summary>
|
|
97
97
|
{#if r.issues.length === 0}
|
|
98
|
-
<p class="px-
|
|
98
|
+
<p class="px-inset-chip py-gutter text-muted">
|
|
99
99
|
{r.audit.description}
|
|
100
100
|
</p>
|
|
101
101
|
{:else}
|
|
102
102
|
{#each r.issues as issue, i (i)}
|
|
103
103
|
<button
|
|
104
|
-
class="flex w-full items-start gap-
|
|
104
|
+
class="flex w-full items-start gap-icon-inset-chip px-inset-chip py-gutter text-left hover:bg-highlight"
|
|
105
105
|
onclick={() => highlight(issue.element)}
|
|
106
106
|
>
|
|
107
107
|
<span class="text-destructive">●</span>
|
|
@@ -114,9 +114,9 @@
|
|
|
114
114
|
</div>
|
|
115
115
|
|
|
116
116
|
<footer
|
|
117
|
-
class="flex items-center gap-
|
|
117
|
+
class="flex items-center gap-gutter px-inset-chip py-gutter text-muted shadow-[inset_0_0.5px_0_0_var(--color-border)]"
|
|
118
118
|
>
|
|
119
|
-
<kbd class="rounded-
|
|
119
|
+
<kbd class="rounded-icon bg-hover px-inset-chip text-fg">
|
|
120
120
|
{isMac ? '⌘' : 'ctrl'}⇧{key.toUpperCase()}
|
|
121
121
|
</kbd>
|
|
122
122
|
<span>toggle</span>
|
|
@@ -16,6 +16,37 @@ export interface CssUtility {
|
|
|
16
16
|
/** The `@utility` block verbatim, as authored. */
|
|
17
17
|
css: string;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* `@theme` namespace → the utility prefixes it generates.
|
|
21
|
+
*
|
|
22
|
+
* Half of era's public class API is registered this way rather than as
|
|
23
|
+
* `@utility` blocks — `rounded-control` from `--radius-control`, `shadow-lg`,
|
|
24
|
+
* `bg-highlight`, `text-body`, and the whole spacing scale. They are classes a
|
|
25
|
+
* consumer writes exactly like the others, and until this table existed the
|
|
26
|
+
* doc pipeline could not see any of them: `@utility` was the only thing it
|
|
27
|
+
* parsed, so era's most-used names were also its least-documented.
|
|
28
|
+
*
|
|
29
|
+
* The list per namespace is the SPELLINGS WORTH DOCUMENTING, not everything
|
|
30
|
+
* Tailwind derives — a spacing token really does generate `mt-`, `gap-x-`,
|
|
31
|
+
* `inset-`, `translate-` and a dozen more, and printing all of them per name
|
|
32
|
+
* would bury the point. The prose says the rest.
|
|
33
|
+
*/
|
|
34
|
+
export declare const THEME_CLASS_PREFIXES: Record<string, string[]>;
|
|
35
|
+
/** Every prefix a namespace really generates — the map the codemod needs. */
|
|
36
|
+
export declare const THEME_ALL_PREFIXES: Record<string, string[]>;
|
|
37
|
+
/**
|
|
38
|
+
* The classes one `@theme` key generates, each with the utility PREFIX that
|
|
39
|
+
* generated it — `--spacing-inset-control` → `{ prefix: 'px', name:
|
|
40
|
+
* 'px-inset-control' }`. The prefix cannot be recovered from the name (both
|
|
41
|
+
* `px` and `px-inset` are hyphen-splits of `px-inset-control`), and the codemod
|
|
42
|
+
* matches on it, so it is returned rather than re-derived.
|
|
43
|
+
*/
|
|
44
|
+
export declare function themeKeyClassEntries(themeKey: string, prefixes?: Record<string, string[]>): {
|
|
45
|
+
prefix: string;
|
|
46
|
+
name: string;
|
|
47
|
+
}[];
|
|
48
|
+
/** The class names one `@theme` key generates, e.g. `--radius-control` → `rounded-control`. */
|
|
49
|
+
export declare function themeKeyClasses(themeKey: string, prefixes?: Record<string, string[]>): string[];
|
|
19
50
|
/**
|
|
20
51
|
* @param sources stylesheet text keyed by path relative to src/lib/styles
|
|
21
52
|
* (e.g. `index.css`, `surfaces/glass.css`).
|