@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
|
@@ -9,7 +9,7 @@ never the `h-(--era-h-control)` var-class spelling. Everything below rides along
|
|
|
9
9
|
with the stylesheet and needs no import:
|
|
10
10
|
|
|
11
11
|
```ts
|
|
12
|
-
import "@
|
|
12
|
+
import "@signal9/era-ui/css";
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
```svelte
|
|
@@ -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
|
|---|---|
|
|
@@ -44,20 +55,33 @@ enough to stay var-form — `min-w-(--era-h-control)` etc. remain the escape hat
|
|
|
44
55
|
| `era-text-trim` | vertically center single-line control text (a label beside an icon, a button's own text) without a translateY nudge. Fixed-height, non-editable elements ONLY: never on an <input>/<textarea>, and never on the same element as `truncate` or any overflow clip — put it on the fixed-height ROW and let the truncating child centre inside it. See era-text-trim-caps for ALL-CAPS. |
|
|
45
56
|
| `truncate` | single-line horizontal truncation with an ellipsis — put it on the truncating CHILD inside a trimmed or leading-none row, never on the same element as era-text-trim; it will not clip ascenders or descenders. |
|
|
46
57
|
| `era-text-trim-caps` | the era-text-trim variant for ALL-CAPS single-line strings (kbd hints, acronym badges) — never for mixed-case text (a label like "System" reads high; use era-text-trim), and never on the same element as `truncate`. |
|
|
47
|
-
| `era-
|
|
58
|
+
| `era-ink-center` | on a native single-line <input> (or the text layer that must mirror one) inside a fixed-height field — never alongside era-text-trim. |
|
|
59
|
+
| `era-token-ink` | the ink centring for a token pill — a badge, a KV value, any short caps-or-digits label in a fixed-height box, CENTRED horizontally and with no icon sibling. For a left-aligned sentence-case label use era-label-ink; when an icon really must sit beside the text, see the note there. |
|
|
60
|
+
| `era-label-ink` | the ink centring for a fixed-height control holding ONE line of sentence-case text and no icon — a menu item, a nav trigger, a button label. Never alongside `truncate` (the trimmed box becomes the clip). |
|
|
48
61
|
| `era-shimmer` | the in-progress text treatment — put it on a "working…" / "thinking…" label while a task streams, instead of a spinner beside the text. |
|
|
49
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). |
|
|
50
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-*). |
|
|
51
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. |
|
|
52
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. |
|
|
53
|
-
| `
|
|
54
|
-
| `p-
|
|
55
|
-
| `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). |
|
|
56
|
-
| `px-field` | text-field side padding — where typed text starts in a control-tier input; the named form of px-(--era-field-px). |
|
|
57
|
-
| `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. |
|
|
58
|
-
| `p-content` | — |
|
|
59
|
-
| `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. |
|
|
60
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` | — |
|
|
61
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. |
|
|
62
86
|
|
|
63
87
|
## era-interactive
|
|
@@ -235,9 +259,47 @@ Declared in `index.css`.
|
|
|
235
259
|
}
|
|
236
260
|
```
|
|
237
261
|
|
|
238
|
-
## era-
|
|
262
|
+
## era-ink-center
|
|
263
|
+
|
|
264
|
+
**Use it for:** on a native single-line <input> (or the text layer that must mirror one) inside a fixed-height field — never alongside era-text-trim.
|
|
265
|
+
|
|
266
|
+
The EDITABLE counterpart of era-text-trim — for native <input>s, which the
|
|
267
|
+
trim is forbidden on (it collapses the UA's inner editor box and slices the
|
|
268
|
+
glyphs; see typography/collapsed-text-trim).
|
|
269
|
+
|
|
270
|
+
Without help, a tier-height input centres its text by FONT BOX, and the ui
|
|
271
|
+
stacks' font box is deeply asymmetric: ascent ≈1.07em against descent
|
|
272
|
+
≈0.29em. Centring that box parks the visible band (caps, x-height) ~0.115em
|
|
273
|
+
LOW — so a field's text sat visibly below the trimmed label beside it.
|
|
274
|
+
|
|
275
|
+
The value is OPTICAL, not the derivation's: pure x-band centring computes
|
|
276
|
+
to ~0.23em of padding, but pixel-measured against real Title-Case text it
|
|
277
|
+
over-lifts — the eye weighs the cap-to-baseline mass, which x-band
|
|
278
|
+
centring parks ~2px high (caps 2.75px off the top against 5.7px of air
|
|
279
|
+
under the baseline, measured at dense). 0.08em splits the difference
|
|
280
|
+
between the x-band ideal and the cap-band ideal, landing caps ~3.7px in an
|
|
281
|
+
18px field with ~4.7px under the baseline — the reading where neither
|
|
282
|
+
band's partisans win and neither complains.
|
|
283
|
+
|
|
284
|
+
The lift is padding, not a translateY: an icon-less Input paints the field
|
|
285
|
+
chrome itself, and a transform would drag the field along with the ink.
|
|
286
|
+
padding-bottom shrinks the content box from below, and a single-line input
|
|
287
|
+
re-centres its line box in what remains — the ink rises by exactly half the
|
|
288
|
+
padding, the chrome doesn't move, and the caret and selection follow the
|
|
289
|
+
text. In em on purpose: the correction is a fraction of the type, so it
|
|
290
|
+
holds across every density and text size with one value.
|
|
239
291
|
|
|
240
|
-
|
|
292
|
+
Declared in `index.css`.
|
|
293
|
+
|
|
294
|
+
```css
|
|
295
|
+
@utility era-ink-center {
|
|
296
|
+
padding-bottom: 0.08em;
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## era-token-ink
|
|
301
|
+
|
|
302
|
+
**Use it for:** the ink centring for a token pill — a badge, a KV value, any short caps-or-digits label in a fixed-height box, CENTRED horizontally and with no icon sibling. For a left-aligned sentence-case label use era-label-ink; when an icon really must sit beside the text, see the note there.
|
|
241
303
|
|
|
242
304
|
TOKEN INK — the ink centring for a pill whose content is a TOKEN: an id, a
|
|
243
305
|
count, a status, a tag. Font-independent, unlike everything it replaces.
|
|
@@ -276,9 +338,45 @@ Declared in `index.css`.
|
|
|
276
338
|
line-height: 1;
|
|
277
339
|
text-box: trim-both cap alphabetic;
|
|
278
340
|
}
|
|
341
|
+
```
|
|
279
342
|
|
|
280
|
-
|
|
281
|
-
|
|
343
|
+
## era-label-ink
|
|
344
|
+
|
|
345
|
+
**Use it for:** the ink centring for a fixed-height control holding ONE line of sentence-case text and no icon — a menu item, a nav trigger, a button label. Never alongside `truncate` (the trimmed box becomes the clip).
|
|
346
|
+
|
|
347
|
+
LABEL INK — era-token-ink's mixed-case sibling, and the general answer to
|
|
348
|
+
"this fixed-height control holds one line of text".
|
|
349
|
+
|
|
350
|
+
Same mechanism, same reason: `text-box-trim` needs a BLOCK box, so the row
|
|
351
|
+
becomes one and `align-content` (block-container alignment) does the
|
|
352
|
+
centring. What differs is the band and the alignment, because the content
|
|
353
|
+
class differs — a label is sentence case, so the x-height band is the visual
|
|
354
|
+
mass to centre (cap-band reads low on "System"), and it is laid out against
|
|
355
|
+
the row's padding rather than centred in it.
|
|
356
|
+
|
|
357
|
+
WHY IT EXISTS AT ALL: era's controls are flex, and a flex container's bare
|
|
358
|
+
text is an ANONYMOUS flex item — a box no selector reaches and no
|
|
359
|
+
non-inherited property touches. So `era-text-trim` on a flex row is inert,
|
|
360
|
+
contributing only its `line-height: 1`, and the ink falls back to line-box
|
|
361
|
+
centring by font metrics. era-token-ink already fixed that for centred
|
|
362
|
+
tokens; this fixes it for everything else.
|
|
363
|
+
|
|
364
|
+
THE ICON CASE IS NOT SOLVED, and cannot be from CSS: an icon beside the text
|
|
365
|
+
needs the box to stay flex, which re-creates the anonymous item. A component
|
|
366
|
+
whose children are an opaque slot therefore guards it —
|
|
367
|
+
`not-has-[svg]:era-label-ink` — and ink-centres the text-only case while
|
|
368
|
+
leaving the icon case on line-box centring. Splitting icon and label into
|
|
369
|
+
separate slots is what would close it; typography/inert-trim reports every
|
|
370
|
+
site still on the fallback.
|
|
371
|
+
|
|
372
|
+
Declared in `index.css`.
|
|
373
|
+
|
|
374
|
+
```css
|
|
375
|
+
@utility era-label-ink {
|
|
376
|
+
display: block;
|
|
377
|
+
align-content: center;
|
|
378
|
+
line-height: 1;
|
|
379
|
+
text-box: trim-both ex alphabetic;
|
|
282
380
|
}
|
|
283
381
|
```
|
|
284
382
|
|
|
@@ -392,6 +490,54 @@ Declared in `index.css`.
|
|
|
392
490
|
}
|
|
393
491
|
```
|
|
394
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
|
+
|
|
395
541
|
## size-icon · size-pill · size-chip · size-control · size-bar
|
|
396
542
|
|
|
397
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.
|
|
@@ -421,155 +567,339 @@ Declared in `index.css`.
|
|
|
421
567
|
}
|
|
422
568
|
```
|
|
423
569
|
|
|
424
|
-
##
|
|
570
|
+
## px-pill · px-chip · pl-pill · pr-pill · pl-chip · pr-chip
|
|
425
571
|
|
|
426
|
-
**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).
|
|
427
573
|
|
|
428
574
|
Declared in `index.css`.
|
|
429
575
|
|
|
430
576
|
```css
|
|
431
|
-
@utility
|
|
432
|
-
|
|
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);
|
|
433
585
|
}
|
|
434
|
-
@utility
|
|
435
|
-
padding: var(--era-
|
|
586
|
+
@utility pr-pill {
|
|
587
|
+
padding-right: var(--era-pill-px);
|
|
436
588
|
}
|
|
437
|
-
@utility
|
|
438
|
-
padding-
|
|
589
|
+
@utility pl-chip {
|
|
590
|
+
padding-left: var(--era-chip-px);
|
|
439
591
|
}
|
|
440
|
-
@utility
|
|
441
|
-
padding-
|
|
592
|
+
@utility pr-chip {
|
|
593
|
+
padding-right: var(--era-chip-px);
|
|
442
594
|
}
|
|
443
595
|
```
|
|
444
596
|
|
|
445
|
-
## p-
|
|
597
|
+
## p-section
|
|
446
598
|
|
|
447
|
-
**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.
|
|
448
618
|
|
|
449
619
|
Declared in `index.css`.
|
|
450
620
|
|
|
451
621
|
```css
|
|
452
|
-
@utility p-
|
|
453
|
-
padding: var(--era-
|
|
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));
|
|
454
625
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
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);
|
|
463
637
|
}
|
|
464
|
-
|
|
465
|
-
|
|
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);
|
|
466
649
|
}
|
|
467
|
-
|
|
468
|
-
|
|
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);
|
|
469
663
|
}
|
|
470
|
-
|
|
471
|
-
|
|
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);
|
|
472
684
|
}
|
|
473
|
-
|
|
474
|
-
|
|
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);
|
|
475
700
|
}
|
|
476
|
-
|
|
477
|
-
|
|
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);
|
|
478
718
|
}
|
|
479
719
|
```
|
|
480
720
|
|
|
481
|
-
##
|
|
721
|
+
## bg-well · text-well · border-well · bg-elevated · text-elevated · border-elevated · bg-highlight · text-highlight · … (12 in all)
|
|
482
722
|
|
|
483
|
-
|
|
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.
|
|
484
728
|
|
|
485
729
|
Declared in `index.css`.
|
|
486
730
|
|
|
487
731
|
```css
|
|
488
|
-
@
|
|
489
|
-
|
|
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);
|
|
490
737
|
}
|
|
491
|
-
|
|
492
|
-
|
|
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);
|
|
493
771
|
}
|
|
494
772
|
```
|
|
495
773
|
|
|
496
|
-
## 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)
|
|
497
775
|
|
|
498
|
-
**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.
|
|
499
777
|
|
|
500
778
|
Declared in `index.css`.
|
|
501
779
|
|
|
502
780
|
```css
|
|
503
|
-
@
|
|
504
|
-
|
|
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);
|
|
505
785
|
}
|
|
506
786
|
```
|
|
507
787
|
|
|
508
|
-
## 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)
|
|
509
789
|
|
|
510
|
-
**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.
|
|
511
791
|
|
|
512
792
|
Declared in `index.css`.
|
|
513
793
|
|
|
514
794
|
```css
|
|
515
|
-
@
|
|
516
|
-
|
|
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);
|
|
517
804
|
}
|
|
518
|
-
|
|
519
|
-
|
|
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);
|
|
520
817
|
}
|
|
521
818
|
```
|
|
522
819
|
|
|
523
|
-
##
|
|
820
|
+
## bg-field · text-field · border-field · bg-field-highlight · text-field-highlight · border-field-highlight
|
|
524
821
|
|
|
525
|
-
|
|
526
|
-
contributes its own slack: the heading's text sits in an h-bar bar, so there
|
|
527
|
-
is (h-bar − text)/2 of empty bar under its glyphs before the panel even
|
|
528
|
-
starts. Padding the panel evenly on top of that spends the space twice — the
|
|
529
|
-
header ends up floating between the section above and the paragraph it
|
|
530
|
-
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.
|
|
531
823
|
|
|
532
|
-
|
|
533
|
-
space under a heading should measure the same as the space beside the text,
|
|
534
|
-
which is --era-content-p. The header row already supplies (h-bar − text)/2 of
|
|
535
|
-
it, so the panel adds what's left, and heading-to-paragraph reads equal to
|
|
536
|
-
the paragraph's own inset. Subtracting one --era-gap (the previous rule) left
|
|
537
|
-
the header's slack unaccounted for and the heading still detached.
|
|
824
|
+
Declared in `index.css`.
|
|
538
825
|
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
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.
|
|
542
838
|
|
|
543
839
|
Declared in `index.css`.
|
|
544
840
|
|
|
545
841
|
```css
|
|
546
|
-
@
|
|
547
|
-
|
|
548
|
-
|
|
842
|
+
@theme inline {
|
|
843
|
+
--default-transition-duration: var(--era-duration);
|
|
844
|
+
--default-transition-timing-function: var(--era-ease);
|
|
845
|
+
--ease-base: var(--era-ease);
|
|
549
846
|
}
|
|
550
847
|
```
|
|
551
848
|
|
|
552
|
-
##
|
|
849
|
+
## bg-divider · text-divider · border-divider · bg-divider-faded · text-divider-faded · border-divider-faded · bg-background · text-background · … (66 in all)
|
|
553
850
|
|
|
554
|
-
|
|
851
|
+
Surface divider colors: border-divider, bg-divider-faded, …
|
|
555
852
|
|
|
556
853
|
Declared in `index.css`.
|
|
557
854
|
|
|
558
855
|
```css
|
|
559
|
-
@
|
|
560
|
-
|
|
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);
|
|
561
879
|
}
|
|
562
880
|
```
|
|
563
881
|
|
|
564
|
-
##
|
|
882
|
+
## bg-fill · text-fill · border-fill · bg-link · text-link · border-link · bg-primary · text-primary · … (33 in all)
|
|
565
883
|
|
|
566
|
-
|
|
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.
|
|
567
887
|
|
|
568
888
|
Declared in `index.css`.
|
|
569
889
|
|
|
570
890
|
```css
|
|
571
|
-
@
|
|
572
|
-
|
|
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);
|
|
573
903
|
}
|
|
574
904
|
```
|
|
575
905
|
|