@signal9/era-ui 10.1.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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 +5 -10
- 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 +2 -2
- 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 +2 -2
- 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/llm-shell/llm-shell.svelte +4 -4
- package/dist/apps/notes/notes.svelte +8 -8
- package/dist/dev/audit/audits/even-container-padding.js +2 -2
- package/dist/dev/audit/audits/single-glyph-square.js +2 -2
- package/dist/dev/audit-overlay.svelte +7 -7
- package/dist/docs/css-utilities.d.ts +31 -0
- package/dist/docs/css-utilities.js +141 -7
- package/dist/docs/quickstart.md +5 -5
- package/dist/era-ui.css +1 -1
- package/dist/generated-docs/llms-full.txt +359 -94
- package/dist/generated-docs/llms.txt +18 -7
- package/dist/generated-docs/manifest.json +355 -49
- package/dist/generated-docs/utilities.json +336 -41
- package/dist/generated-docs/utilities.md +341 -87
- 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 +117 -79
- package/dist/styles/themes.css +49 -42
- 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 +7 -7
- package/dist/ui/bar/bar.svelte.d.ts +15 -15
- package/dist/ui/button/button.svelte +1 -1
- 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 +7 -9
- 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/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
|
@@ -23,7 +23,7 @@ motion):
|
|
|
23
23
|
|
|
24
24
|
| Stock-looking class | What it resolves to |
|
|
25
25
|
|---|---|
|
|
26
|
-
| `rounded-icon/
|
|
26
|
+
| `rounded-icon/pill/chip/control/bar` | the concentric radius ladder (collapses on `data-corners="square"`) |
|
|
27
27
|
| `rounded-menu-item` | menu-row radius, concentric inside a `rounded-control` panel |
|
|
28
28
|
| `shadow` / `shadow-lg` | resting control edge / floating panel chrome, per surface |
|
|
29
29
|
| `shadow-well` / `shadow-pressed` / `shadow-highlight` | recessed, pressed/latched, hover-material chrome |
|
|
@@ -31,10 +31,21 @@ motion):
|
|
|
31
31
|
| `transition-*` (bare) | duration + easing default to the motion axis |
|
|
32
32
|
| `ease-base` / `duration-base` | the motion axis, named explicitly |
|
|
33
33
|
| `text-body` | density-derived body/control text size |
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
| `p-gutter` / `gap-gutter` / `mt-gutter` / … | the spacing scale — EVERY spacing prefix works |
|
|
35
|
+
|
|
36
|
+
The spacing names (`gutter`, `card`, `panel`, `content`, `menu`, `field`, the
|
|
37
|
+
`inset-*` and concentric `*-inset-*` insets, `glyph-*`) are registered as a
|
|
38
|
+
Tailwind spacing scale, so every prefix derives automatically: `p-`, `px-`,
|
|
39
|
+
`pt-`, `mt-`, `gap-`, `gap-x-`, `inset-`, `translate-`, and the rest. The TIER
|
|
40
|
+
names (`icon`, `pill`, `chip`, `control`, `bar`) are heights, not spacing, so
|
|
41
|
+
they are registered per prefix instead — `h-`, `w-`, `min-h-`, `min-w-` and
|
|
42
|
+
`size-` — and the two vocabularies deliberately share no word. Putting a tier
|
|
43
|
+
in the spacing scale would silently make `px-control` mean 24px of padding.
|
|
44
|
+
|
|
45
|
+
The var form (`h-(--era-h-control)`) still works and is the escape hatch for a
|
|
46
|
+
token with no registered name — `--era-sp`, the press-sink offsets, anything
|
|
47
|
+
a component reaches for once. `scripts/check-canonical.ts` fails the build if
|
|
48
|
+
source uses it where a name exists.
|
|
38
49
|
|
|
39
50
|
| Utility | Use it for |
|
|
40
51
|
|---|---|
|
|
@@ -51,15 +62,26 @@ enough to stay var-form — `min-w-(--era-h-control)` etc. remain the escape hat
|
|
|
51
62
|
| `era-collapse` | the height sweep for a bits-ui Collapsible.Content — put it on the Content element itself (it carries its own overflow: hidden). |
|
|
52
63
|
| `h-icon` `h-pill` `h-chip` `h-control` `h-bar` | the tier-height ladder — h-icon (icon) · h-pill (nested pill) · h-chip (standalone pill) · h-control (control) · h-bar (bar); the named form of h-(--era-h-*). |
|
|
53
64
|
| `min-h-icon` `min-h-pill` `min-h-chip` `min-h-control` `min-h-bar` | minimum tier height for containers that may grow — a bar that is at least lg-tier but can wrap (min-h-bar). |
|
|
65
|
+
| `w-icon` `w-pill` `w-chip` `w-control` `w-bar` | a tier-sized WIDTH — the horizontal twin of the h-* ladder, for a rail or a column measured in tiers rather than in content. |
|
|
66
|
+
| `min-w-icon` `min-w-pill` `min-w-chip` `min-w-control` `min-w-bar` | a minimum tier WIDTH — the floor that makes a single-glyph control render as a square rather than a skinny pill (min-w-control on an icon button, min-w-pill on a badge). These could not exist before the ladder was renamed: the old rungs were sm/md/lg, and Tailwind's container scale already owns min-w-md and min-w-lg, so the names collided and every call site had to write min-w-(--era-h-control) by hand. icon/pill/chip/control/bar collide with nothing. |
|
|
54
67
|
| `size-icon` `size-pill` `size-chip` `size-control` `size-bar` | a tier-sized square — size-icon is THE icon size (a Lucide glyph beside body text), size-control a square control face. |
|
|
55
|
-
| `
|
|
56
|
-
| `p-
|
|
57
|
-
| `px-pill` `px-chip` | pill side padding — the wider-than-vertical horizontal breathing room badge/chip text wants (glyph-advance derived, ~2× the vertical inset). |
|
|
58
|
-
| `px-field` | text-field side padding — where typed text starts in a control-tier input; the named form of px-(--era-field-px). |
|
|
59
|
-
| `p-panel` `p-card` | optical padding for unbounded containers — p-panel for compact shells and menu-adjacent chrome, p-card for cards/dialogs/popovers, p-content for full content panels. Grows super-linearly with density so whitespace holds its perceived share as controls loosen. |
|
|
60
|
-
| `p-content` | — |
|
|
61
|
-
| `p-menu` | menu-panel padding — the surface-owned inset (0 on flat, 2px on glass/bevel) that keeps row highlights inside a floating panel's frame; pairs with rounded-menu-item on the rows. |
|
|
68
|
+
| `px-pill` `px-chip` `pl-pill` `pr-pill` `pl-chip` `pr-chip` | pill side padding — the wider-than-vertical horizontal breathing room badge/chip text wants (glyph-advance derived, ~2× the vertical inset). |
|
|
69
|
+
| `p-section` | padding for a content panel that sits UNDER a section header row — the even-padding exception, and the reason it is not called p-section: it deliberately under-pays the block start. For an evenly padded content panel use p-section, which is the plain token. |
|
|
62
70
|
| `duration-base` | the motion axis as an explicit transition-duration — for the rare case a utility (not the transition-* default) needs to name it; 0s at data-motion="instant", longer at "extra". |
|
|
71
|
+
| `text-body` | — |
|
|
72
|
+
| `leading-body` | — |
|
|
73
|
+
| `rounded-icon` `rounded-pill` `rounded-chip` `rounded-control` `rounded-bar` `rounded-menu-item` | — |
|
|
74
|
+
| `shadow` | — |
|
|
75
|
+
| `shadow-sm` `shadow-lg` `shadow-well` `shadow-pressed` `shadow-highlight` | — |
|
|
76
|
+
| `bg-well` `text-well` `border-well` `bg-elevated` `text-elevated` `border-elevated` `bg-highlight` `text-highlight` `border-highlight` `bg-overlay` `text-overlay` `border-overlay` | — |
|
|
77
|
+
| `p-gutter` `px-gutter` `py-gutter` `gap-gutter` `p-panel` `px-panel` `py-panel` `gap-panel` `p-card` `px-card` `py-card` `gap-card` `p-content` `px-content` `py-content` `gap-content` `p-menu` `px-menu` `py-menu` `gap-menu` `p-field` `px-field` `py-field` `gap-field` | — |
|
|
78
|
+
| `p-inset-pill` `px-inset-pill` `py-inset-pill` `gap-inset-pill` `p-inset-chip` `px-inset-chip` `py-inset-chip` `gap-inset-chip` `p-inset-control` `px-inset-control` `py-inset-control` `gap-inset-control` | text-symmetric content padding — (tier − text)/2, the inset that vertically centres body text in its tier; px-inset-control is a text button's side padding, p-inset-control a code block's. |
|
|
79
|
+
| `p-icon-inset-pill` `px-icon-inset-pill` `py-icon-inset-pill` `gap-icon-inset-pill` `p-icon-inset-chip` `px-icon-inset-chip` `py-icon-inset-chip` `gap-icon-inset-chip` `p-icon-inset-control` `px-icon-inset-control` `py-icon-inset-control` `gap-icon-inset-control` `p-icon-inset-bar` `px-icon-inset-bar` `py-icon-inset-bar` `gap-icon-inset-bar` `p-pill-inset-chip` `px-pill-inset-chip` `py-pill-inset-chip` `gap-pill-inset-chip` `p-pill-inset-control` `px-pill-inset-control` `py-pill-inset-control` `gap-pill-inset-control` `p-chip-inset-control` `px-chip-inset-control` `py-chip-inset-control` `gap-chip-inset-control` `p-chip-inset-bar` `px-chip-inset-bar` `py-chip-inset-bar` `gap-chip-inset-bar` | the concentric inset for a nested pair — (h-container − h-child)/2, the gap that makes a child control sit evenly inside its container, and the radius step that keeps their corners concentric. Named for the pair it joins: gap-icon-inset-control seats an icon in a control. |
|
|
80
|
+
| `p-glyph-icon` `px-glyph-icon` `py-glyph-icon` `gap-glyph-icon` `p-glyph-pill` `px-glyph-pill` `py-glyph-pill` `gap-glyph-pill` | the glyph size for a tier — the INK inside the box, not the box (size-glyph-pill is the dismiss × in a pill, size-pill is the pill). |
|
|
81
|
+
| `bg-field` `text-field` `border-field` `bg-field-highlight` `text-field-highlight` `border-field-highlight` | the recessed field fill — bg-field is a text input's resting well, bg-field-highlight its focused/hovered face. |
|
|
82
|
+
| `ease-base` | — |
|
|
83
|
+
| `bg-divider` `text-divider` `border-divider` `bg-divider-faded` `text-divider-faded` `border-divider-faded` `bg-background` `text-background` `border-background` `bg-foreground` `text-foreground` `border-foreground` `bg-1` `text-1` `border-1` `bg-2` `text-2` `border-2` `bg-3` `text-3` `border-3` `bg-4` `text-4` `border-4` `bg-5` `text-5` `border-5` `bg-6` `text-6` `border-6` `bg-7` `text-7` `border-7` `bg-8` `text-8` `border-8` `bg-9` `text-9` `border-9` `bg-10` `text-10` `border-10` `bg-11` `text-11` `border-11` `bg-12` `text-12` `border-12` `bg-border` `text-border` `border-border` `bg-surface` `text-surface` `border-surface` `bg-hover` `text-hover` `border-hover` `bg-fg` `text-fg` `border-fg` `bg-bright` `text-bright` `border-bright` `bg-muted` `text-muted` `border-muted` | — |
|
|
84
|
+
| `bg-fill` `text-fill` `border-fill` `bg-link` `text-link` `border-link` `bg-primary` `text-primary` `border-primary` `bg-primary-fg` `text-primary-fg` `border-primary-fg` `bg-primary-hover` `text-primary-hover` `border-primary-hover` `bg-destructive` `text-destructive` `border-destructive` `bg-destructive-fg` `text-destructive-fg` `border-destructive-fg` `bg-success` `text-success` `border-success` `bg-success-fg` `text-success-fg` `border-success-fg` `bg-warning` `text-warning` `border-warning` `bg-warning-fg` `text-warning-fg` `border-warning-fg` | — |
|
|
63
85
|
| `glass-blur` | the backdrop blur for a floating panel (popover, dialog, taskbar) — it applies only inside a data-surface="glass" subtree and is inert elsewhere, so it is safe to leave on a panel that renders under every surface. |
|
|
64
86
|
|
|
65
87
|
## era-interactive
|
|
@@ -468,6 +490,54 @@ Declared in `index.css`.
|
|
|
468
490
|
}
|
|
469
491
|
```
|
|
470
492
|
|
|
493
|
+
## w-icon · w-pill · w-chip · w-control · w-bar
|
|
494
|
+
|
|
495
|
+
**Use it for:** a tier-sized WIDTH — the horizontal twin of the h-* ladder, for a rail or a column measured in tiers rather than in content.
|
|
496
|
+
|
|
497
|
+
Declared in `index.css`.
|
|
498
|
+
|
|
499
|
+
```css
|
|
500
|
+
@utility w-icon {
|
|
501
|
+
width: var(--era-h-icon);
|
|
502
|
+
}
|
|
503
|
+
@utility w-pill {
|
|
504
|
+
width: var(--era-h-pill);
|
|
505
|
+
}
|
|
506
|
+
@utility w-chip {
|
|
507
|
+
width: var(--era-h-chip);
|
|
508
|
+
}
|
|
509
|
+
@utility w-control {
|
|
510
|
+
width: var(--era-h-control);
|
|
511
|
+
}
|
|
512
|
+
@utility w-bar {
|
|
513
|
+
width: var(--era-h-bar);
|
|
514
|
+
}
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
## min-w-icon · min-w-pill · min-w-chip · min-w-control · min-w-bar
|
|
518
|
+
|
|
519
|
+
**Use it for:** a minimum tier WIDTH — the floor that makes a single-glyph control render as a square rather than a skinny pill (min-w-control on an icon button, min-w-pill on a badge). These could not exist before the ladder was renamed: the old rungs were sm/md/lg, and Tailwind's container scale already owns min-w-md and min-w-lg, so the names collided and every call site had to write min-w-(--era-h-control) by hand. icon/pill/chip/control/bar collide with nothing.
|
|
520
|
+
|
|
521
|
+
Declared in `index.css`.
|
|
522
|
+
|
|
523
|
+
```css
|
|
524
|
+
@utility min-w-icon {
|
|
525
|
+
min-width: var(--era-h-icon);
|
|
526
|
+
}
|
|
527
|
+
@utility min-w-pill {
|
|
528
|
+
min-width: var(--era-h-pill);
|
|
529
|
+
}
|
|
530
|
+
@utility min-w-chip {
|
|
531
|
+
min-width: var(--era-h-chip);
|
|
532
|
+
}
|
|
533
|
+
@utility min-w-control {
|
|
534
|
+
min-width: var(--era-h-control);
|
|
535
|
+
}
|
|
536
|
+
@utility min-w-bar {
|
|
537
|
+
min-width: var(--era-h-bar);
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
471
541
|
## size-icon · size-pill · size-chip · size-control · size-bar
|
|
472
542
|
|
|
473
543
|
**Use it for:** a tier-sized square — size-icon is THE icon size (a Lucide glyph beside body text), size-control a square control face.
|
|
@@ -497,155 +567,339 @@ Declared in `index.css`.
|
|
|
497
567
|
}
|
|
498
568
|
```
|
|
499
569
|
|
|
500
|
-
##
|
|
570
|
+
## px-pill · px-chip · pl-pill · pr-pill · pl-chip · pr-chip
|
|
501
571
|
|
|
502
|
-
**Use it for:**
|
|
572
|
+
**Use it for:** pill side padding — the wider-than-vertical horizontal breathing room badge/chip text wants (glyph-advance derived, ~2× the vertical inset).
|
|
503
573
|
|
|
504
574
|
Declared in `index.css`.
|
|
505
575
|
|
|
506
576
|
```css
|
|
507
|
-
@utility
|
|
508
|
-
|
|
577
|
+
@utility px-pill {
|
|
578
|
+
padding-inline: var(--era-pill-px);
|
|
579
|
+
}
|
|
580
|
+
@utility px-chip {
|
|
581
|
+
padding-inline: var(--era-chip-px);
|
|
582
|
+
}
|
|
583
|
+
@utility pl-pill {
|
|
584
|
+
padding-left: var(--era-pill-px);
|
|
509
585
|
}
|
|
510
|
-
@utility
|
|
511
|
-
padding: var(--era-
|
|
586
|
+
@utility pr-pill {
|
|
587
|
+
padding-right: var(--era-pill-px);
|
|
512
588
|
}
|
|
513
|
-
@utility
|
|
514
|
-
padding-
|
|
589
|
+
@utility pl-chip {
|
|
590
|
+
padding-left: var(--era-chip-px);
|
|
515
591
|
}
|
|
516
|
-
@utility
|
|
517
|
-
padding-
|
|
592
|
+
@utility pr-chip {
|
|
593
|
+
padding-right: var(--era-chip-px);
|
|
518
594
|
}
|
|
519
595
|
```
|
|
520
596
|
|
|
521
|
-
## p-
|
|
597
|
+
## p-section
|
|
522
598
|
|
|
523
|
-
**Use it for:**
|
|
599
|
+
**Use it for:** padding for a content panel that sits UNDER a section header row — the even-padding exception, and the reason it is not called p-section: it deliberately under-pays the block start. For an evenly padded content panel use p-section, which is the plain token.
|
|
600
|
+
|
|
601
|
+
A content panel always follows a section header ROW, and that row already
|
|
602
|
+
contributes its own slack: the heading's text sits in an h-bar bar, so there
|
|
603
|
+
is (h-bar − text)/2 of empty bar under its glyphs before the panel even
|
|
604
|
+
starts. Padding the panel evenly on top of that spends the space twice — the
|
|
605
|
+
header ends up floating between the section above and the paragraph it
|
|
606
|
+
introduces rather than binding to it.
|
|
607
|
+
|
|
608
|
+
So the block-start pays only the REMAINDER. The target is the indent: the
|
|
609
|
+
space under a heading should measure the same as the space beside the text,
|
|
610
|
+
which is --era-pad-content. The header row already supplies (h-bar − text)/2 of
|
|
611
|
+
it, so the panel adds what's left, and heading-to-paragraph reads equal to
|
|
612
|
+
the paragraph's own inset. Subtracting one --era-gap (the previous rule) left
|
|
613
|
+
the header's slack unaccounted for and the heading still detached.
|
|
614
|
+
|
|
615
|
+
Both terms are density-derived, so the equality holds at every mode; the
|
|
616
|
+
max() is the floor for a hypothetical mode where the row's slack would
|
|
617
|
+
exceed the inset outright.
|
|
524
618
|
|
|
525
619
|
Declared in `index.css`.
|
|
526
620
|
|
|
527
621
|
```css
|
|
528
|
-
@utility p-
|
|
529
|
-
padding: var(--era-
|
|
530
|
-
|
|
531
|
-
@utility p-inset-chip {
|
|
532
|
-
padding: var(--era-inset-chip);
|
|
533
|
-
}
|
|
534
|
-
@utility p-inset-control {
|
|
535
|
-
padding: var(--era-inset-control);
|
|
622
|
+
@utility p-section {
|
|
623
|
+
padding: var(--era-pad-content);
|
|
624
|
+
padding-top: max(0px, calc(var(--era-pad-content) - (var(--era-h-bar) - var(--era-text)) / 2));
|
|
536
625
|
}
|
|
537
|
-
|
|
538
|
-
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
## duration-base
|
|
629
|
+
|
|
630
|
+
**Use it for:** the motion axis as an explicit transition-duration — for the rare case a utility (not the transition-* default) needs to name it; 0s at data-motion="instant", longer at "extra".
|
|
631
|
+
|
|
632
|
+
Declared in `index.css`.
|
|
633
|
+
|
|
634
|
+
```css
|
|
635
|
+
@utility duration-base {
|
|
636
|
+
transition-duration: var(--era-duration);
|
|
539
637
|
}
|
|
540
|
-
|
|
541
|
-
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
## text-body
|
|
641
|
+
|
|
642
|
+
Density-derived body size: `text-body` replaces text-[length:var(--era-text)]
|
|
643
|
+
|
|
644
|
+
Declared in `index.css`.
|
|
645
|
+
|
|
646
|
+
```css
|
|
647
|
+
@theme inline {
|
|
648
|
+
--text-body: var(--era-text);
|
|
542
649
|
}
|
|
543
|
-
|
|
544
|
-
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
## leading-body
|
|
653
|
+
|
|
654
|
+
Prose leading — `leading-body` is the pair to `text-body`, and every piece
|
|
655
|
+
of text in the library that can wrap to a second line carries it. Enforced
|
|
656
|
+
at runtime by typography/prose-leading.
|
|
657
|
+
|
|
658
|
+
Declared in `index.css`.
|
|
659
|
+
|
|
660
|
+
```css
|
|
661
|
+
@theme inline {
|
|
662
|
+
--leading-body: var(--era-leading);
|
|
545
663
|
}
|
|
546
|
-
|
|
547
|
-
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
## rounded-icon · rounded-pill · rounded-chip · rounded-control · rounded-bar · rounded-menu-item
|
|
667
|
+
|
|
668
|
+
Radius ladder — Tailwind's own rounded-* names now walk era's concentric
|
|
669
|
+
ladder (rd-T = rd-xs + (h-T − h-icon)/2), ride the corners toggle, and
|
|
670
|
+
collapse to 0 on square. rounded-menu-item is the menu-row radius
|
|
671
|
+
(rd-md − panel-inset) that keeps rows concentric inside a rounded-control
|
|
672
|
+
panel on every surface.
|
|
673
|
+
|
|
674
|
+
Declared in `index.css`.
|
|
675
|
+
|
|
676
|
+
```css
|
|
677
|
+
@theme inline {
|
|
678
|
+
--radius-icon: var(--era-rd-icon);
|
|
679
|
+
--radius-pill: var(--era-rd-pill);
|
|
680
|
+
--radius-chip: var(--era-rd-chip);
|
|
681
|
+
--radius-control: var(--era-rd-control);
|
|
682
|
+
--radius-bar: var(--era-rd-bar);
|
|
683
|
+
--radius-menu-item: var(--era-item-rd);
|
|
548
684
|
}
|
|
549
|
-
|
|
550
|
-
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
## shadow
|
|
688
|
+
|
|
689
|
+
Surface chrome — bare `shadow` is the resting control edge, shadow-lg the
|
|
690
|
+
floating panel, shadow-well the recessed container, shadow-pressed the
|
|
691
|
+
active/latched face, shadow-highlight the material half of hover feedback.
|
|
692
|
+
Flat renders them as none, bevel as chisels, glass as frosted rims — the
|
|
693
|
+
class stays the same.
|
|
694
|
+
|
|
695
|
+
Declared in `index.css`.
|
|
696
|
+
|
|
697
|
+
```css
|
|
698
|
+
@theme inline {
|
|
699
|
+
--shadow: var(--era-shadow);
|
|
551
700
|
}
|
|
552
|
-
|
|
553
|
-
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
## shadow-sm · shadow-lg · shadow-well · shadow-pressed · shadow-highlight
|
|
704
|
+
|
|
705
|
+
v4 marks bare `shadow` a deprecated spelling of shadow-sm, and lints
|
|
706
|
+
auto-fix one to the other — alias both to the control edge so either
|
|
707
|
+
spelling renders era chrome.
|
|
708
|
+
|
|
709
|
+
Declared in `index.css`.
|
|
710
|
+
|
|
711
|
+
```css
|
|
712
|
+
@theme inline {
|
|
713
|
+
--shadow-sm: var(--era-shadow);
|
|
714
|
+
--shadow-lg: var(--era-shadow-lg);
|
|
715
|
+
--shadow-well: var(--era-shadow-well);
|
|
716
|
+
--shadow-pressed: var(--era-shadow-pressed);
|
|
717
|
+
--shadow-highlight: var(--era-highlight-shadow);
|
|
554
718
|
}
|
|
555
719
|
```
|
|
556
720
|
|
|
557
|
-
##
|
|
721
|
+
## bg-well · text-well · border-well · bg-elevated · text-elevated · border-elevated · bg-highlight · text-highlight · … (12 in all)
|
|
558
722
|
|
|
559
|
-
|
|
723
|
+
Surface fills — bg-well is the surface's own resting fill (pairs with
|
|
724
|
+
shadow-well for recessed chrome), bg-elevated the raised tier (pairs with
|
|
725
|
+
shadow-lg + glass-blur for floating chrome), bg-highlight the transient
|
|
726
|
+
hover/focus/keyboard wash (pairs with shadow-highlight; latched states
|
|
727
|
+
stay on opaque bg-hover), bg-overlay the modal scrim.
|
|
560
728
|
|
|
561
729
|
Declared in `index.css`.
|
|
562
730
|
|
|
563
731
|
```css
|
|
564
|
-
@
|
|
565
|
-
|
|
732
|
+
@theme inline {
|
|
733
|
+
--color-well: var(--era-surface-bg);
|
|
734
|
+
--color-elevated: var(--era-surface-bg-elevated);
|
|
735
|
+
--color-highlight: var(--era-highlight);
|
|
736
|
+
--color-overlay: var(--era-overlay-bg);
|
|
566
737
|
}
|
|
567
|
-
|
|
568
|
-
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
## p-gutter · px-gutter · py-gutter · gap-gutter · p-panel · px-panel · py-panel · gap-panel · … (24 in all)
|
|
741
|
+
|
|
742
|
+
THE SPACING SCALE — one entry per token, from which Tailwind derives the
|
|
743
|
+
WHOLE directional family: p/px/py/pt/pr/pb/pl/ps/pe, every margin, gap and
|
|
744
|
+
gap-x/y, inset/top/right/bottom/left, translate, and the sizing prefixes.
|
|
745
|
+
|
|
746
|
+
These were hand-written `@utility` blocks, which could only ever cover the
|
|
747
|
+
spellings someone remembered to write: `px-gutter` existed and `mt-gutter`
|
|
748
|
+
did not, `p-inset-control` existed and `pl-inset-control` did not, so the
|
|
749
|
+
library fell back to `mt-(--era-gap)` in exactly the places the named API
|
|
750
|
+
was supposed to cover. One line here replaces twenty blocks and leaves no
|
|
751
|
+
spelling missing.
|
|
752
|
+
|
|
753
|
+
ONLY genuine spacing belongs here. The namespace is shared across
|
|
754
|
+
h/w/p/m/gap, so a name registered here means the same length in ALL of
|
|
755
|
+
them — true of a gap or an inset, false of a TIER HEIGHT. Tiers stay
|
|
756
|
+
hand-written per prefix below, and the two vocabularies deliberately share
|
|
757
|
+
no word: icon/pill/chip/control/bar are heights; gutter, card, panel,
|
|
758
|
+
content, menu, field and the inset-* names are spacing. Registering a tier
|
|
759
|
+
name here would silently make `px-control` mean 24px of side padding.
|
|
760
|
+
|
|
761
|
+
Declared in `index.css`.
|
|
762
|
+
|
|
763
|
+
```css
|
|
764
|
+
@theme inline {
|
|
765
|
+
--spacing-gutter: var(--era-gap);
|
|
766
|
+
--spacing-panel: var(--era-pad-panel);
|
|
767
|
+
--spacing-card: var(--era-pad-card);
|
|
768
|
+
--spacing-content: var(--era-pad-content);
|
|
769
|
+
--spacing-menu: var(--era-panel-inset);
|
|
770
|
+
--spacing-field: var(--era-field-px);
|
|
569
771
|
}
|
|
570
772
|
```
|
|
571
773
|
|
|
572
|
-
## px-
|
|
774
|
+
## p-inset-pill · px-inset-pill · py-inset-pill · gap-inset-pill · p-inset-chip · px-inset-chip · py-inset-chip · gap-inset-chip · … (12 in all)
|
|
573
775
|
|
|
574
|
-
**Use it for:** text-
|
|
776
|
+
**Use it for:** text-symmetric content padding — (tier − text)/2, the inset that vertically centres body text in its tier; px-inset-control is a text button's side padding, p-inset-control a code block's.
|
|
575
777
|
|
|
576
778
|
Declared in `index.css`.
|
|
577
779
|
|
|
578
780
|
```css
|
|
579
|
-
@
|
|
580
|
-
|
|
781
|
+
@theme inline {
|
|
782
|
+
--spacing-inset-pill: var(--era-inset-pill);
|
|
783
|
+
--spacing-inset-chip: var(--era-inset-chip);
|
|
784
|
+
--spacing-inset-control: var(--era-inset-control);
|
|
581
785
|
}
|
|
582
786
|
```
|
|
583
787
|
|
|
584
|
-
## p-
|
|
788
|
+
## p-icon-inset-pill · px-icon-inset-pill · py-icon-inset-pill · gap-icon-inset-pill · p-icon-inset-chip · px-icon-inset-chip · py-icon-inset-chip · gap-icon-inset-chip · … (32 in all)
|
|
585
789
|
|
|
586
|
-
**Use it for:**
|
|
790
|
+
**Use it for:** the concentric inset for a nested pair — (h-container − h-child)/2, the gap that makes a child control sit evenly inside its container, and the radius step that keeps their corners concentric. Named for the pair it joins: gap-icon-inset-control seats an icon in a control.
|
|
587
791
|
|
|
588
792
|
Declared in `index.css`.
|
|
589
793
|
|
|
590
794
|
```css
|
|
591
|
-
@
|
|
592
|
-
|
|
795
|
+
@theme inline {
|
|
796
|
+
--spacing-icon-inset-pill: var(--era-icon-inset-pill);
|
|
797
|
+
--spacing-icon-inset-chip: var(--era-icon-inset-chip);
|
|
798
|
+
--spacing-icon-inset-control: var(--era-icon-inset-control);
|
|
799
|
+
--spacing-icon-inset-bar: var(--era-icon-inset-bar);
|
|
800
|
+
--spacing-pill-inset-chip: var(--era-pill-inset-chip);
|
|
801
|
+
--spacing-pill-inset-control: var(--era-pill-inset-control);
|
|
802
|
+
--spacing-chip-inset-control: var(--era-chip-inset-control);
|
|
803
|
+
--spacing-chip-inset-bar: var(--era-chip-inset-bar);
|
|
593
804
|
}
|
|
594
|
-
|
|
595
|
-
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
## p-glyph-icon · px-glyph-icon · py-glyph-icon · gap-glyph-icon · p-glyph-pill · px-glyph-pill · py-glyph-pill · gap-glyph-pill
|
|
808
|
+
|
|
809
|
+
**Use it for:** the glyph size for a tier — the INK inside the box, not the box (size-glyph-pill is the dismiss × in a pill, size-pill is the pill).
|
|
810
|
+
|
|
811
|
+
Declared in `index.css`.
|
|
812
|
+
|
|
813
|
+
```css
|
|
814
|
+
@theme inline {
|
|
815
|
+
--spacing-glyph-icon: var(--era-glyph-icon);
|
|
816
|
+
--spacing-glyph-pill: var(--era-glyph-pill);
|
|
596
817
|
}
|
|
597
818
|
```
|
|
598
819
|
|
|
599
|
-
##
|
|
820
|
+
## bg-field · text-field · border-field · bg-field-highlight · text-field-highlight · border-field-highlight
|
|
600
821
|
|
|
601
|
-
|
|
602
|
-
contributes its own slack: the heading's text sits in an h-bar bar, so there
|
|
603
|
-
is (h-bar − text)/2 of empty bar under its glyphs before the panel even
|
|
604
|
-
starts. Padding the panel evenly on top of that spends the space twice — the
|
|
605
|
-
header ends up floating between the section above and the paragraph it
|
|
606
|
-
introduces rather than binding to it.
|
|
822
|
+
**Use it for:** the recessed field fill — bg-field is a text input's resting well, bg-field-highlight its focused/hovered face.
|
|
607
823
|
|
|
608
|
-
|
|
609
|
-
space under a heading should measure the same as the space beside the text,
|
|
610
|
-
which is --era-content-p. The header row already supplies (h-bar − text)/2 of
|
|
611
|
-
it, so the panel adds what's left, and heading-to-paragraph reads equal to
|
|
612
|
-
the paragraph's own inset. Subtracting one --era-gap (the previous rule) left
|
|
613
|
-
the header's slack unaccounted for and the heading still detached.
|
|
824
|
+
Declared in `index.css`.
|
|
614
825
|
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
826
|
+
```css
|
|
827
|
+
@theme inline {
|
|
828
|
+
--color-field: var(--era-field-bg);
|
|
829
|
+
--color-field-highlight: var(--era-field-highlight);
|
|
830
|
+
}
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
## ease-base
|
|
834
|
+
|
|
835
|
+
Motion — bare transition utilities default to the motion axis, so
|
|
836
|
+
`transition-colors` alone is on-design (0s at instant, longer at extra).
|
|
837
|
+
ease-base/duration-base name the axis explicitly for overrides.
|
|
618
838
|
|
|
619
839
|
Declared in `index.css`.
|
|
620
840
|
|
|
621
841
|
```css
|
|
622
|
-
@
|
|
623
|
-
|
|
624
|
-
|
|
842
|
+
@theme inline {
|
|
843
|
+
--default-transition-duration: var(--era-duration);
|
|
844
|
+
--default-transition-timing-function: var(--era-ease);
|
|
845
|
+
--ease-base: var(--era-ease);
|
|
625
846
|
}
|
|
626
847
|
```
|
|
627
848
|
|
|
628
|
-
##
|
|
849
|
+
## bg-divider · text-divider · border-divider · bg-divider-faded · text-divider-faded · border-divider-faded · bg-background · text-background · … (66 in all)
|
|
629
850
|
|
|
630
|
-
|
|
851
|
+
Surface divider colors: border-divider, bg-divider-faded, …
|
|
631
852
|
|
|
632
853
|
Declared in `index.css`.
|
|
633
854
|
|
|
634
855
|
```css
|
|
635
|
-
@
|
|
636
|
-
|
|
856
|
+
@theme inline {
|
|
857
|
+
--color-divider: var(--era-divider-color);
|
|
858
|
+
--color-divider-faded: var(--era-divider-faded);
|
|
859
|
+
--color-background: var(--color-1);
|
|
860
|
+
--color-foreground: var(--color-fg);
|
|
861
|
+
--color-1: var(--color-1);
|
|
862
|
+
--color-2: var(--color-2);
|
|
863
|
+
--color-3: var(--color-3);
|
|
864
|
+
--color-4: var(--color-4);
|
|
865
|
+
--color-5: var(--color-5);
|
|
866
|
+
--color-6: var(--color-6);
|
|
867
|
+
--color-7: var(--color-7);
|
|
868
|
+
--color-8: var(--color-8);
|
|
869
|
+
--color-9: var(--color-9);
|
|
870
|
+
--color-10: var(--color-10);
|
|
871
|
+
--color-11: var(--color-11);
|
|
872
|
+
--color-12: var(--color-12);
|
|
873
|
+
--color-border: var(--color-border);
|
|
874
|
+
--color-surface: var(--color-surface);
|
|
875
|
+
--color-hover: var(--color-hover);
|
|
876
|
+
--color-fg: var(--color-fg);
|
|
877
|
+
--color-bright: var(--color-bright);
|
|
878
|
+
--color-muted: var(--color-muted);
|
|
637
879
|
}
|
|
638
880
|
```
|
|
639
881
|
|
|
640
|
-
##
|
|
882
|
+
## bg-fill · text-fill · border-fill · bg-link · text-link · border-link · bg-primary · text-primary · … (33 in all)
|
|
641
883
|
|
|
642
|
-
|
|
884
|
+
The standing pill fill — --era-fill, the latched counterpart of the
|
|
885
|
+
transient highlight. Surface-owned: a composing wash on flat/bevel, the
|
|
886
|
+
opaque swatch on glass.
|
|
643
887
|
|
|
644
888
|
Declared in `index.css`.
|
|
645
889
|
|
|
646
890
|
```css
|
|
647
|
-
@
|
|
648
|
-
|
|
891
|
+
@theme inline {
|
|
892
|
+
--color-fill: var(--era-fill);
|
|
893
|
+
--color-link: var(--color-link);
|
|
894
|
+
--color-primary: var(--color-primary);
|
|
895
|
+
--color-primary-fg: var(--color-primary-fg);
|
|
896
|
+
--color-primary-hover: var(--color-primary-hover);
|
|
897
|
+
--color-destructive: var(--color-destructive);
|
|
898
|
+
--color-destructive-fg: var(--color-destructive-fg);
|
|
899
|
+
--color-success: var(--color-success);
|
|
900
|
+
--color-success-fg: var(--color-success-fg);
|
|
901
|
+
--color-warning: var(--color-warning);
|
|
902
|
+
--color-warning-fg: var(--color-warning-fg);
|
|
649
903
|
}
|
|
650
904
|
```
|
|
651
905
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
const pm = getPaneManager();
|
|
14
14
|
|
|
15
15
|
const accent: Record<AppNotification['tone'], string> = {
|
|
16
|
-
default: 'bg-
|
|
16
|
+
default: 'bg-highlight',
|
|
17
17
|
accent: 'bg-primary',
|
|
18
18
|
success: 'bg-success',
|
|
19
19
|
destructive: 'bg-destructive'
|
|
@@ -48,38 +48,32 @@
|
|
|
48
48
|
transition:eraFly={{ x: 320, duration: 200 }}
|
|
49
49
|
style:top="{pm.insets.top}px"
|
|
50
50
|
style:bottom="{pm.insets.bottom}px"
|
|
51
|
-
class="absolute right-0 flex w-80 flex-col border-l border-divider-faded bg-
|
|
51
|
+
class="absolute right-0 flex w-80 flex-col border-l border-divider-faded bg-well shadow-lg glass-blur"
|
|
52
52
|
>
|
|
53
53
|
<header
|
|
54
|
-
class="flex shrink-0 items-center gap-
|
|
54
|
+
class="flex shrink-0 items-center gap-gutter border-b border-divider-faded px-card py-inset-chip"
|
|
55
55
|
>
|
|
56
56
|
<span class="text-body text-bright">Notifications</span>
|
|
57
|
-
<label
|
|
58
|
-
class="
|
|
59
|
-
>
|
|
60
|
-
<BellOff class="size-(--era-h-icon)" />
|
|
57
|
+
<label class="ml-auto flex cursor-pointer items-center gap-gutter text-body text-muted">
|
|
58
|
+
<BellOff class="size-icon" />
|
|
61
59
|
<Switch bind:checked={notif.dnd} aria-label="Do not disturb" />
|
|
62
60
|
</label>
|
|
63
61
|
</header>
|
|
64
62
|
|
|
65
63
|
<div
|
|
66
|
-
class="scrollbar-none flex min-h-0 flex-1 flex-col gap-
|
|
64
|
+
class="scrollbar-none flex min-h-0 flex-1 flex-col gap-inset-chip overflow-y-auto overscroll-contain p-card"
|
|
67
65
|
>
|
|
68
66
|
{#each notif.items as n (n.id)}
|
|
69
67
|
<div
|
|
70
|
-
class="relative flex gap-
|
|
68
|
+
class="relative flex gap-inset-chip overflow-hidden rounded-control bg-elevated p-inset-control"
|
|
71
69
|
>
|
|
72
|
-
<span
|
|
73
|
-
class={cn(
|
|
74
|
-
'absolute inset-y-(--era-panel-inset) left-(--era-panel-inset) w-1 rounded-full',
|
|
75
|
-
accent[n.tone]
|
|
76
|
-
)}
|
|
70
|
+
<span class={cn('absolute inset-y-menu left-menu w-1 rounded-full', accent[n.tone])}
|
|
77
71
|
></span>
|
|
78
72
|
{#if n.icon}{@const Icon = n.icon}<Icon
|
|
79
|
-
class="mt-0.5 size-
|
|
73
|
+
class="mt-0.5 size-icon shrink-0 text-muted"
|
|
80
74
|
/>{/if}
|
|
81
75
|
<div class="min-w-0 flex-1">
|
|
82
|
-
<div class="flex items-baseline gap-
|
|
76
|
+
<div class="flex items-baseline gap-gutter">
|
|
83
77
|
<p class="min-w-0 flex-1 truncate text-body text-bright">{n.title}</p>
|
|
84
78
|
<span class="shrink-0 text-body text-muted tabular-nums">{ago(n.createdAt)}</span>
|
|
85
79
|
</div>
|
|
@@ -94,7 +88,7 @@
|
|
|
94
88
|
</div>
|
|
95
89
|
|
|
96
90
|
{#if notif.items.length}
|
|
97
|
-
<footer class="shrink-0 border-t border-divider-faded p-
|
|
91
|
+
<footer class="shrink-0 border-t border-divider-faded p-inset-chip">
|
|
98
92
|
<Button variant="link" size="chip" class="w-full" onclick={() => notif.clear()}>
|
|
99
93
|
Clear all
|
|
100
94
|
</Button>
|
|
@@ -135,7 +135,7 @@ export interface AppDefinition {
|
|
|
135
135
|
* × gesture won't arm it and taskbar tabs only focus — minimize() and
|
|
136
136
|
* toggleMinimize() become focus-only no-ops. */
|
|
137
137
|
minimizable?: boolean;
|
|
138
|
-
/** Extra classes for the pane body (Pane.Content) — e.g. `p-
|
|
138
|
+
/** Extra classes for the pane body (Pane.Content) — e.g. `p-gutter`
|
|
139
139
|
* for a body of controls, or `p-0` for a full-bleed app. */
|
|
140
140
|
bodyClass?: string;
|
|
141
141
|
/**
|