@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
|
@@ -67,15 +67,26 @@ Classes, not components — they need no import beyond the stylesheet. Reach for
|
|
|
67
67
|
- `era-collapse` — the height sweep for a bits-ui Collapsible.Content — put it on the Content element itself (it carries its own overflow: hidden).
|
|
68
68
|
- `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-*).
|
|
69
69
|
- `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).
|
|
70
|
+
- `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.
|
|
71
|
+
- `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.
|
|
70
72
|
- `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.
|
|
71
|
-
- `
|
|
72
|
-
- `p-
|
|
73
|
-
- `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).
|
|
74
|
-
- `px-field` — text-field side padding — where typed text starts in a control-tier input; the named form of px-(--era-field-px).
|
|
75
|
-
- `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.
|
|
76
|
-
- `p-content` — A content panel always follows a section header ROW, and that row already
|
|
77
|
-
- `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.
|
|
73
|
+
- `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).
|
|
74
|
+
- `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.
|
|
78
75
|
- `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".
|
|
76
|
+
- `text-body` — Density-derived body size: `text-body` replaces text-[length:var(--era-text)]
|
|
77
|
+
- `leading-body` — Prose leading — `leading-body` is the pair to `text-body`, and every piece
|
|
78
|
+
- `rounded-icon · rounded-pill · rounded-chip · rounded-control · rounded-bar · rounded-menu-item` — Radius ladder — Tailwind's own rounded-* names now walk era's concentric
|
|
79
|
+
- `shadow` — Surface chrome — bare `shadow` is the resting control edge, shadow-lg the
|
|
80
|
+
- `shadow-sm · shadow-lg · shadow-well · shadow-pressed · shadow-highlight` — v4 marks bare `shadow` a deprecated spelling of shadow-sm, and lints
|
|
81
|
+
- `bg-well · text-well · border-well · bg-elevated · text-elevated · border-elevated · bg-highlight · text-highlight · … (12 in all)` — Surface fills — bg-well is the surface's own resting fill (pairs with
|
|
82
|
+
- `p-gutter · px-gutter · py-gutter · gap-gutter · p-panel · px-panel · py-panel · gap-panel · … (24 in all)` — THE SPACING SCALE — one entry per token, from which Tailwind derives the
|
|
83
|
+
- `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)` — 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.
|
|
84
|
+
- `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)` — 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.
|
|
85
|
+
- `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).
|
|
86
|
+
- `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.
|
|
87
|
+
- `ease-base` — Motion — bare transition utilities default to the motion axis, so
|
|
88
|
+
- `bg-divider · text-divider · border-divider · bg-divider-faded · text-divider-faded · border-divider-faded · bg-background · text-background · … (66 in all)` — Surface divider colors: border-divider, bg-divider-faded, …
|
|
89
|
+
- `bg-fill · text-fill · border-fill · bg-link · text-link · border-link · bg-primary · text-primary · … (33 in all)` — The standing pill fill — --era-fill, the latched counterpart of the
|
|
79
90
|
- `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.
|
|
80
91
|
|
|
81
92
|
Full reference (what each emits, when to use it): `/utilities.md`. Machine-readable list: `/utilities.json`.
|
|
@@ -149,7 +160,7 @@ motion):
|
|
|
149
160
|
|
|
150
161
|
| Stock-looking class | What it resolves to |
|
|
151
162
|
|---|---|
|
|
152
|
-
| `rounded-icon/
|
|
163
|
+
| `rounded-icon/pill/chip/control/bar` | the concentric radius ladder (collapses on `data-corners="square"`) |
|
|
153
164
|
| `rounded-menu-item` | menu-row radius, concentric inside a `rounded-control` panel |
|
|
154
165
|
| `shadow` / `shadow-lg` | resting control edge / floating panel chrome, per surface |
|
|
155
166
|
| `shadow-well` / `shadow-pressed` / `shadow-highlight` | recessed, pressed/latched, hover-material chrome |
|
|
@@ -157,10 +168,21 @@ motion):
|
|
|
157
168
|
| `transition-*` (bare) | duration + easing default to the motion axis |
|
|
158
169
|
| `ease-base` / `duration-base` | the motion axis, named explicitly |
|
|
159
170
|
| `text-body` | density-derived body/control text size |
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
171
|
+
| `p-gutter` / `gap-gutter` / `mt-gutter` / … | the spacing scale — EVERY spacing prefix works |
|
|
172
|
+
|
|
173
|
+
The spacing names (`gutter`, `card`, `panel`, `content`, `menu`, `field`, the
|
|
174
|
+
`inset-*` and concentric `*-inset-*` insets, `glyph-*`) are registered as a
|
|
175
|
+
Tailwind spacing scale, so every prefix derives automatically: `p-`, `px-`,
|
|
176
|
+
`pt-`, `mt-`, `gap-`, `gap-x-`, `inset-`, `translate-`, and the rest. The TIER
|
|
177
|
+
names (`icon`, `pill`, `chip`, `control`, `bar`) are heights, not spacing, so
|
|
178
|
+
they are registered per prefix instead — `h-`, `w-`, `min-h-`, `min-w-` and
|
|
179
|
+
`size-` — and the two vocabularies deliberately share no word. Putting a tier
|
|
180
|
+
in the spacing scale would silently make `px-control` mean 24px of padding.
|
|
181
|
+
|
|
182
|
+
The var form (`h-(--era-h-control)`) still works and is the escape hatch for a
|
|
183
|
+
token with no registered name — `--era-sp`, the press-sink offsets, anything
|
|
184
|
+
a component reaches for once. `scripts/check-canonical.ts` fails the build if
|
|
185
|
+
source uses it where a name exists.
|
|
164
186
|
|
|
165
187
|
| Utility | Use it for |
|
|
166
188
|
|---|---|
|
|
@@ -177,15 +199,26 @@ enough to stay var-form — `min-w-(--era-h-control)` etc. remain the escape hat
|
|
|
177
199
|
| `era-collapse` | the height sweep for a bits-ui Collapsible.Content — put it on the Content element itself (it carries its own overflow: hidden). |
|
|
178
200
|
| `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-*). |
|
|
179
201
|
| `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). |
|
|
202
|
+
| `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. |
|
|
203
|
+
| `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. |
|
|
180
204
|
| `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. |
|
|
181
|
-
| `
|
|
182
|
-
| `p-
|
|
183
|
-
| `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). |
|
|
184
|
-
| `px-field` | text-field side padding — where typed text starts in a control-tier input; the named form of px-(--era-field-px). |
|
|
185
|
-
| `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. |
|
|
186
|
-
| `p-content` | — |
|
|
187
|
-
| `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. |
|
|
205
|
+
| `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). |
|
|
206
|
+
| `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. |
|
|
188
207
|
| `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". |
|
|
208
|
+
| `text-body` | — |
|
|
209
|
+
| `leading-body` | — |
|
|
210
|
+
| `rounded-icon` `rounded-pill` `rounded-chip` `rounded-control` `rounded-bar` `rounded-menu-item` | — |
|
|
211
|
+
| `shadow` | — |
|
|
212
|
+
| `shadow-sm` `shadow-lg` `shadow-well` `shadow-pressed` `shadow-highlight` | — |
|
|
213
|
+
| `bg-well` `text-well` `border-well` `bg-elevated` `text-elevated` `border-elevated` `bg-highlight` `text-highlight` `border-highlight` `bg-overlay` `text-overlay` `border-overlay` | — |
|
|
214
|
+
| `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` | — |
|
|
215
|
+
| `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. |
|
|
216
|
+
| `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. |
|
|
217
|
+
| `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). |
|
|
218
|
+
| `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. |
|
|
219
|
+
| `ease-base` | — |
|
|
220
|
+
| `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` | — |
|
|
221
|
+
| `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` | — |
|
|
189
222
|
| `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. |
|
|
190
223
|
|
|
191
224
|
## era-interactive
|
|
@@ -594,6 +627,54 @@ Declared in `index.css`.
|
|
|
594
627
|
}
|
|
595
628
|
```
|
|
596
629
|
|
|
630
|
+
## w-icon · w-pill · w-chip · w-control · w-bar
|
|
631
|
+
|
|
632
|
+
**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.
|
|
633
|
+
|
|
634
|
+
Declared in `index.css`.
|
|
635
|
+
|
|
636
|
+
```css
|
|
637
|
+
@utility w-icon {
|
|
638
|
+
width: var(--era-h-icon);
|
|
639
|
+
}
|
|
640
|
+
@utility w-pill {
|
|
641
|
+
width: var(--era-h-pill);
|
|
642
|
+
}
|
|
643
|
+
@utility w-chip {
|
|
644
|
+
width: var(--era-h-chip);
|
|
645
|
+
}
|
|
646
|
+
@utility w-control {
|
|
647
|
+
width: var(--era-h-control);
|
|
648
|
+
}
|
|
649
|
+
@utility w-bar {
|
|
650
|
+
width: var(--era-h-bar);
|
|
651
|
+
}
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
## min-w-icon · min-w-pill · min-w-chip · min-w-control · min-w-bar
|
|
655
|
+
|
|
656
|
+
**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.
|
|
657
|
+
|
|
658
|
+
Declared in `index.css`.
|
|
659
|
+
|
|
660
|
+
```css
|
|
661
|
+
@utility min-w-icon {
|
|
662
|
+
min-width: var(--era-h-icon);
|
|
663
|
+
}
|
|
664
|
+
@utility min-w-pill {
|
|
665
|
+
min-width: var(--era-h-pill);
|
|
666
|
+
}
|
|
667
|
+
@utility min-w-chip {
|
|
668
|
+
min-width: var(--era-h-chip);
|
|
669
|
+
}
|
|
670
|
+
@utility min-w-control {
|
|
671
|
+
min-width: var(--era-h-control);
|
|
672
|
+
}
|
|
673
|
+
@utility min-w-bar {
|
|
674
|
+
min-width: var(--era-h-bar);
|
|
675
|
+
}
|
|
676
|
+
```
|
|
677
|
+
|
|
597
678
|
## size-icon · size-pill · size-chip · size-control · size-bar
|
|
598
679
|
|
|
599
680
|
**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.
|
|
@@ -623,155 +704,339 @@ Declared in `index.css`.
|
|
|
623
704
|
}
|
|
624
705
|
```
|
|
625
706
|
|
|
626
|
-
##
|
|
707
|
+
## px-pill · px-chip · pl-pill · pr-pill · pl-chip · pr-chip
|
|
627
708
|
|
|
628
|
-
**Use it for:**
|
|
709
|
+
**Use it for:** pill side padding — the wider-than-vertical horizontal breathing room badge/chip text wants (glyph-advance derived, ~2× the vertical inset).
|
|
629
710
|
|
|
630
711
|
Declared in `index.css`.
|
|
631
712
|
|
|
632
713
|
```css
|
|
633
|
-
@utility
|
|
634
|
-
|
|
714
|
+
@utility px-pill {
|
|
715
|
+
padding-inline: var(--era-pill-px);
|
|
716
|
+
}
|
|
717
|
+
@utility px-chip {
|
|
718
|
+
padding-inline: var(--era-chip-px);
|
|
719
|
+
}
|
|
720
|
+
@utility pl-pill {
|
|
721
|
+
padding-left: var(--era-pill-px);
|
|
635
722
|
}
|
|
636
|
-
@utility
|
|
637
|
-
padding: var(--era-
|
|
723
|
+
@utility pr-pill {
|
|
724
|
+
padding-right: var(--era-pill-px);
|
|
638
725
|
}
|
|
639
|
-
@utility
|
|
640
|
-
padding-
|
|
726
|
+
@utility pl-chip {
|
|
727
|
+
padding-left: var(--era-chip-px);
|
|
641
728
|
}
|
|
642
|
-
@utility
|
|
643
|
-
padding-
|
|
729
|
+
@utility pr-chip {
|
|
730
|
+
padding-right: var(--era-chip-px);
|
|
644
731
|
}
|
|
645
732
|
```
|
|
646
733
|
|
|
647
|
-
## p-
|
|
734
|
+
## p-section
|
|
648
735
|
|
|
649
|
-
**Use it for:**
|
|
736
|
+
**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.
|
|
737
|
+
|
|
738
|
+
A content panel always follows a section header ROW, and that row already
|
|
739
|
+
contributes its own slack: the heading's text sits in an h-bar bar, so there
|
|
740
|
+
is (h-bar − text)/2 of empty bar under its glyphs before the panel even
|
|
741
|
+
starts. Padding the panel evenly on top of that spends the space twice — the
|
|
742
|
+
header ends up floating between the section above and the paragraph it
|
|
743
|
+
introduces rather than binding to it.
|
|
744
|
+
|
|
745
|
+
So the block-start pays only the REMAINDER. The target is the indent: the
|
|
746
|
+
space under a heading should measure the same as the space beside the text,
|
|
747
|
+
which is --era-pad-content. The header row already supplies (h-bar − text)/2 of
|
|
748
|
+
it, so the panel adds what's left, and heading-to-paragraph reads equal to
|
|
749
|
+
the paragraph's own inset. Subtracting one --era-gap (the previous rule) left
|
|
750
|
+
the header's slack unaccounted for and the heading still detached.
|
|
751
|
+
|
|
752
|
+
Both terms are density-derived, so the equality holds at every mode; the
|
|
753
|
+
max() is the floor for a hypothetical mode where the row's slack would
|
|
754
|
+
exceed the inset outright.
|
|
650
755
|
|
|
651
756
|
Declared in `index.css`.
|
|
652
757
|
|
|
653
758
|
```css
|
|
654
|
-
@utility p-
|
|
655
|
-
padding: var(--era-
|
|
656
|
-
|
|
657
|
-
@utility p-inset-chip {
|
|
658
|
-
padding: var(--era-inset-chip);
|
|
659
|
-
}
|
|
660
|
-
@utility p-inset-control {
|
|
661
|
-
padding: var(--era-inset-control);
|
|
759
|
+
@utility p-section {
|
|
760
|
+
padding: var(--era-pad-content);
|
|
761
|
+
padding-top: max(0px, calc(var(--era-pad-content) - (var(--era-h-bar) - var(--era-text)) / 2));
|
|
662
762
|
}
|
|
663
|
-
|
|
664
|
-
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
## duration-base
|
|
766
|
+
|
|
767
|
+
**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".
|
|
768
|
+
|
|
769
|
+
Declared in `index.css`.
|
|
770
|
+
|
|
771
|
+
```css
|
|
772
|
+
@utility duration-base {
|
|
773
|
+
transition-duration: var(--era-duration);
|
|
665
774
|
}
|
|
666
|
-
|
|
667
|
-
|
|
775
|
+
```
|
|
776
|
+
|
|
777
|
+
## text-body
|
|
778
|
+
|
|
779
|
+
Density-derived body size: `text-body` replaces text-[length:var(--era-text)]
|
|
780
|
+
|
|
781
|
+
Declared in `index.css`.
|
|
782
|
+
|
|
783
|
+
```css
|
|
784
|
+
@theme inline {
|
|
785
|
+
--text-body: var(--era-text);
|
|
668
786
|
}
|
|
669
|
-
|
|
670
|
-
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
## leading-body
|
|
790
|
+
|
|
791
|
+
Prose leading — `leading-body` is the pair to `text-body`, and every piece
|
|
792
|
+
of text in the library that can wrap to a second line carries it. Enforced
|
|
793
|
+
at runtime by typography/prose-leading.
|
|
794
|
+
|
|
795
|
+
Declared in `index.css`.
|
|
796
|
+
|
|
797
|
+
```css
|
|
798
|
+
@theme inline {
|
|
799
|
+
--leading-body: var(--era-leading);
|
|
671
800
|
}
|
|
672
|
-
|
|
673
|
-
|
|
801
|
+
```
|
|
802
|
+
|
|
803
|
+
## rounded-icon · rounded-pill · rounded-chip · rounded-control · rounded-bar · rounded-menu-item
|
|
804
|
+
|
|
805
|
+
Radius ladder — Tailwind's own rounded-* names now walk era's concentric
|
|
806
|
+
ladder (rd-T = rd-xs + (h-T − h-icon)/2), ride the corners toggle, and
|
|
807
|
+
collapse to 0 on square. rounded-menu-item is the menu-row radius
|
|
808
|
+
(rd-md − panel-inset) that keeps rows concentric inside a rounded-control
|
|
809
|
+
panel on every surface.
|
|
810
|
+
|
|
811
|
+
Declared in `index.css`.
|
|
812
|
+
|
|
813
|
+
```css
|
|
814
|
+
@theme inline {
|
|
815
|
+
--radius-icon: var(--era-rd-icon);
|
|
816
|
+
--radius-pill: var(--era-rd-pill);
|
|
817
|
+
--radius-chip: var(--era-rd-chip);
|
|
818
|
+
--radius-control: var(--era-rd-control);
|
|
819
|
+
--radius-bar: var(--era-rd-bar);
|
|
820
|
+
--radius-menu-item: var(--era-item-rd);
|
|
674
821
|
}
|
|
675
|
-
|
|
676
|
-
|
|
822
|
+
```
|
|
823
|
+
|
|
824
|
+
## shadow
|
|
825
|
+
|
|
826
|
+
Surface chrome — bare `shadow` is the resting control edge, shadow-lg the
|
|
827
|
+
floating panel, shadow-well the recessed container, shadow-pressed the
|
|
828
|
+
active/latched face, shadow-highlight the material half of hover feedback.
|
|
829
|
+
Flat renders them as none, bevel as chisels, glass as frosted rims — the
|
|
830
|
+
class stays the same.
|
|
831
|
+
|
|
832
|
+
Declared in `index.css`.
|
|
833
|
+
|
|
834
|
+
```css
|
|
835
|
+
@theme inline {
|
|
836
|
+
--shadow: var(--era-shadow);
|
|
677
837
|
}
|
|
678
|
-
|
|
679
|
-
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
## shadow-sm · shadow-lg · shadow-well · shadow-pressed · shadow-highlight
|
|
841
|
+
|
|
842
|
+
v4 marks bare `shadow` a deprecated spelling of shadow-sm, and lints
|
|
843
|
+
auto-fix one to the other — alias both to the control edge so either
|
|
844
|
+
spelling renders era chrome.
|
|
845
|
+
|
|
846
|
+
Declared in `index.css`.
|
|
847
|
+
|
|
848
|
+
```css
|
|
849
|
+
@theme inline {
|
|
850
|
+
--shadow-sm: var(--era-shadow);
|
|
851
|
+
--shadow-lg: var(--era-shadow-lg);
|
|
852
|
+
--shadow-well: var(--era-shadow-well);
|
|
853
|
+
--shadow-pressed: var(--era-shadow-pressed);
|
|
854
|
+
--shadow-highlight: var(--era-highlight-shadow);
|
|
680
855
|
}
|
|
681
856
|
```
|
|
682
857
|
|
|
683
|
-
##
|
|
858
|
+
## bg-well · text-well · border-well · bg-elevated · text-elevated · border-elevated · bg-highlight · text-highlight · … (12 in all)
|
|
684
859
|
|
|
685
|
-
|
|
860
|
+
Surface fills — bg-well is the surface's own resting fill (pairs with
|
|
861
|
+
shadow-well for recessed chrome), bg-elevated the raised tier (pairs with
|
|
862
|
+
shadow-lg + glass-blur for floating chrome), bg-highlight the transient
|
|
863
|
+
hover/focus/keyboard wash (pairs with shadow-highlight; latched states
|
|
864
|
+
stay on opaque bg-hover), bg-overlay the modal scrim.
|
|
686
865
|
|
|
687
866
|
Declared in `index.css`.
|
|
688
867
|
|
|
689
868
|
```css
|
|
690
|
-
@
|
|
691
|
-
|
|
869
|
+
@theme inline {
|
|
870
|
+
--color-well: var(--era-surface-bg);
|
|
871
|
+
--color-elevated: var(--era-surface-bg-elevated);
|
|
872
|
+
--color-highlight: var(--era-highlight);
|
|
873
|
+
--color-overlay: var(--era-overlay-bg);
|
|
692
874
|
}
|
|
693
|
-
|
|
694
|
-
|
|
875
|
+
```
|
|
876
|
+
|
|
877
|
+
## p-gutter · px-gutter · py-gutter · gap-gutter · p-panel · px-panel · py-panel · gap-panel · … (24 in all)
|
|
878
|
+
|
|
879
|
+
THE SPACING SCALE — one entry per token, from which Tailwind derives the
|
|
880
|
+
WHOLE directional family: p/px/py/pt/pr/pb/pl/ps/pe, every margin, gap and
|
|
881
|
+
gap-x/y, inset/top/right/bottom/left, translate, and the sizing prefixes.
|
|
882
|
+
|
|
883
|
+
These were hand-written `@utility` blocks, which could only ever cover the
|
|
884
|
+
spellings someone remembered to write: `px-gutter` existed and `mt-gutter`
|
|
885
|
+
did not, `p-inset-control` existed and `pl-inset-control` did not, so the
|
|
886
|
+
library fell back to `mt-(--era-gap)` in exactly the places the named API
|
|
887
|
+
was supposed to cover. One line here replaces twenty blocks and leaves no
|
|
888
|
+
spelling missing.
|
|
889
|
+
|
|
890
|
+
ONLY genuine spacing belongs here. The namespace is shared across
|
|
891
|
+
h/w/p/m/gap, so a name registered here means the same length in ALL of
|
|
892
|
+
them — true of a gap or an inset, false of a TIER HEIGHT. Tiers stay
|
|
893
|
+
hand-written per prefix below, and the two vocabularies deliberately share
|
|
894
|
+
no word: icon/pill/chip/control/bar are heights; gutter, card, panel,
|
|
895
|
+
content, menu, field and the inset-* names are spacing. Registering a tier
|
|
896
|
+
name here would silently make `px-control` mean 24px of side padding.
|
|
897
|
+
|
|
898
|
+
Declared in `index.css`.
|
|
899
|
+
|
|
900
|
+
```css
|
|
901
|
+
@theme inline {
|
|
902
|
+
--spacing-gutter: var(--era-gap);
|
|
903
|
+
--spacing-panel: var(--era-pad-panel);
|
|
904
|
+
--spacing-card: var(--era-pad-card);
|
|
905
|
+
--spacing-content: var(--era-pad-content);
|
|
906
|
+
--spacing-menu: var(--era-panel-inset);
|
|
907
|
+
--spacing-field: var(--era-field-px);
|
|
695
908
|
}
|
|
696
909
|
```
|
|
697
910
|
|
|
698
|
-
## px-
|
|
911
|
+
## 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)
|
|
699
912
|
|
|
700
|
-
**Use it for:** text-
|
|
913
|
+
**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.
|
|
701
914
|
|
|
702
915
|
Declared in `index.css`.
|
|
703
916
|
|
|
704
917
|
```css
|
|
705
|
-
@
|
|
706
|
-
|
|
918
|
+
@theme inline {
|
|
919
|
+
--spacing-inset-pill: var(--era-inset-pill);
|
|
920
|
+
--spacing-inset-chip: var(--era-inset-chip);
|
|
921
|
+
--spacing-inset-control: var(--era-inset-control);
|
|
707
922
|
}
|
|
708
923
|
```
|
|
709
924
|
|
|
710
|
-
## p-
|
|
925
|
+
## 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)
|
|
711
926
|
|
|
712
|
-
**Use it for:**
|
|
927
|
+
**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.
|
|
713
928
|
|
|
714
929
|
Declared in `index.css`.
|
|
715
930
|
|
|
716
931
|
```css
|
|
717
|
-
@
|
|
718
|
-
|
|
932
|
+
@theme inline {
|
|
933
|
+
--spacing-icon-inset-pill: var(--era-icon-inset-pill);
|
|
934
|
+
--spacing-icon-inset-chip: var(--era-icon-inset-chip);
|
|
935
|
+
--spacing-icon-inset-control: var(--era-icon-inset-control);
|
|
936
|
+
--spacing-icon-inset-bar: var(--era-icon-inset-bar);
|
|
937
|
+
--spacing-pill-inset-chip: var(--era-pill-inset-chip);
|
|
938
|
+
--spacing-pill-inset-control: var(--era-pill-inset-control);
|
|
939
|
+
--spacing-chip-inset-control: var(--era-chip-inset-control);
|
|
940
|
+
--spacing-chip-inset-bar: var(--era-chip-inset-bar);
|
|
719
941
|
}
|
|
720
|
-
|
|
721
|
-
|
|
942
|
+
```
|
|
943
|
+
|
|
944
|
+
## p-glyph-icon · px-glyph-icon · py-glyph-icon · gap-glyph-icon · p-glyph-pill · px-glyph-pill · py-glyph-pill · gap-glyph-pill
|
|
945
|
+
|
|
946
|
+
**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).
|
|
947
|
+
|
|
948
|
+
Declared in `index.css`.
|
|
949
|
+
|
|
950
|
+
```css
|
|
951
|
+
@theme inline {
|
|
952
|
+
--spacing-glyph-icon: var(--era-glyph-icon);
|
|
953
|
+
--spacing-glyph-pill: var(--era-glyph-pill);
|
|
722
954
|
}
|
|
723
955
|
```
|
|
724
956
|
|
|
725
|
-
##
|
|
957
|
+
## bg-field · text-field · border-field · bg-field-highlight · text-field-highlight · border-field-highlight
|
|
726
958
|
|
|
727
|
-
|
|
728
|
-
contributes its own slack: the heading's text sits in an h-bar bar, so there
|
|
729
|
-
is (h-bar − text)/2 of empty bar under its glyphs before the panel even
|
|
730
|
-
starts. Padding the panel evenly on top of that spends the space twice — the
|
|
731
|
-
header ends up floating between the section above and the paragraph it
|
|
732
|
-
introduces rather than binding to it.
|
|
959
|
+
**Use it for:** the recessed field fill — bg-field is a text input's resting well, bg-field-highlight its focused/hovered face.
|
|
733
960
|
|
|
734
|
-
|
|
735
|
-
space under a heading should measure the same as the space beside the text,
|
|
736
|
-
which is --era-content-p. The header row already supplies (h-bar − text)/2 of
|
|
737
|
-
it, so the panel adds what's left, and heading-to-paragraph reads equal to
|
|
738
|
-
the paragraph's own inset. Subtracting one --era-gap (the previous rule) left
|
|
739
|
-
the header's slack unaccounted for and the heading still detached.
|
|
961
|
+
Declared in `index.css`.
|
|
740
962
|
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
963
|
+
```css
|
|
964
|
+
@theme inline {
|
|
965
|
+
--color-field: var(--era-field-bg);
|
|
966
|
+
--color-field-highlight: var(--era-field-highlight);
|
|
967
|
+
}
|
|
968
|
+
```
|
|
969
|
+
|
|
970
|
+
## ease-base
|
|
971
|
+
|
|
972
|
+
Motion — bare transition utilities default to the motion axis, so
|
|
973
|
+
`transition-colors` alone is on-design (0s at instant, longer at extra).
|
|
974
|
+
ease-base/duration-base name the axis explicitly for overrides.
|
|
744
975
|
|
|
745
976
|
Declared in `index.css`.
|
|
746
977
|
|
|
747
978
|
```css
|
|
748
|
-
@
|
|
749
|
-
|
|
750
|
-
|
|
979
|
+
@theme inline {
|
|
980
|
+
--default-transition-duration: var(--era-duration);
|
|
981
|
+
--default-transition-timing-function: var(--era-ease);
|
|
982
|
+
--ease-base: var(--era-ease);
|
|
751
983
|
}
|
|
752
984
|
```
|
|
753
985
|
|
|
754
|
-
##
|
|
986
|
+
## bg-divider · text-divider · border-divider · bg-divider-faded · text-divider-faded · border-divider-faded · bg-background · text-background · … (66 in all)
|
|
755
987
|
|
|
756
|
-
|
|
988
|
+
Surface divider colors: border-divider, bg-divider-faded, …
|
|
757
989
|
|
|
758
990
|
Declared in `index.css`.
|
|
759
991
|
|
|
760
992
|
```css
|
|
761
|
-
@
|
|
762
|
-
|
|
993
|
+
@theme inline {
|
|
994
|
+
--color-divider: var(--era-divider-color);
|
|
995
|
+
--color-divider-faded: var(--era-divider-faded);
|
|
996
|
+
--color-background: var(--color-1);
|
|
997
|
+
--color-foreground: var(--color-fg);
|
|
998
|
+
--color-1: var(--color-1);
|
|
999
|
+
--color-2: var(--color-2);
|
|
1000
|
+
--color-3: var(--color-3);
|
|
1001
|
+
--color-4: var(--color-4);
|
|
1002
|
+
--color-5: var(--color-5);
|
|
1003
|
+
--color-6: var(--color-6);
|
|
1004
|
+
--color-7: var(--color-7);
|
|
1005
|
+
--color-8: var(--color-8);
|
|
1006
|
+
--color-9: var(--color-9);
|
|
1007
|
+
--color-10: var(--color-10);
|
|
1008
|
+
--color-11: var(--color-11);
|
|
1009
|
+
--color-12: var(--color-12);
|
|
1010
|
+
--color-border: var(--color-border);
|
|
1011
|
+
--color-surface: var(--color-surface);
|
|
1012
|
+
--color-hover: var(--color-hover);
|
|
1013
|
+
--color-fg: var(--color-fg);
|
|
1014
|
+
--color-bright: var(--color-bright);
|
|
1015
|
+
--color-muted: var(--color-muted);
|
|
763
1016
|
}
|
|
764
1017
|
```
|
|
765
1018
|
|
|
766
|
-
##
|
|
1019
|
+
## bg-fill · text-fill · border-fill · bg-link · text-link · border-link · bg-primary · text-primary · … (33 in all)
|
|
767
1020
|
|
|
768
|
-
|
|
1021
|
+
The standing pill fill — --era-fill, the latched counterpart of the
|
|
1022
|
+
transient highlight. Surface-owned: a composing wash on flat/bevel, the
|
|
1023
|
+
opaque swatch on glass.
|
|
769
1024
|
|
|
770
1025
|
Declared in `index.css`.
|
|
771
1026
|
|
|
772
1027
|
```css
|
|
773
|
-
@
|
|
774
|
-
|
|
1028
|
+
@theme inline {
|
|
1029
|
+
--color-fill: var(--era-fill);
|
|
1030
|
+
--color-link: var(--color-link);
|
|
1031
|
+
--color-primary: var(--color-primary);
|
|
1032
|
+
--color-primary-fg: var(--color-primary-fg);
|
|
1033
|
+
--color-primary-hover: var(--color-primary-hover);
|
|
1034
|
+
--color-destructive: var(--color-destructive);
|
|
1035
|
+
--color-destructive-fg: var(--color-destructive-fg);
|
|
1036
|
+
--color-success: var(--color-success);
|
|
1037
|
+
--color-success-fg: var(--color-success-fg);
|
|
1038
|
+
--color-warning: var(--color-warning);
|
|
1039
|
+
--color-warning-fg: var(--color-warning-fg);
|
|
775
1040
|
}
|
|
776
1041
|
```
|
|
777
1042
|
|
|
@@ -105,15 +105,26 @@ Classes, not components — they need no import beyond the stylesheet. Reach for
|
|
|
105
105
|
- `era-collapse` — the height sweep for a bits-ui Collapsible.Content — put it on the Content element itself (it carries its own overflow: hidden).
|
|
106
106
|
- `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-*).
|
|
107
107
|
- `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).
|
|
108
|
+
- `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.
|
|
109
|
+
- `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.
|
|
108
110
|
- `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.
|
|
109
|
-
- `
|
|
110
|
-
- `p-
|
|
111
|
-
- `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).
|
|
112
|
-
- `px-field` — text-field side padding — where typed text starts in a control-tier input; the named form of px-(--era-field-px).
|
|
113
|
-
- `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.
|
|
114
|
-
- `p-content` — A content panel always follows a section header ROW, and that row already
|
|
115
|
-
- `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.
|
|
111
|
+
- `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).
|
|
112
|
+
- `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.
|
|
116
113
|
- `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".
|
|
114
|
+
- `text-body` — Density-derived body size: `text-body` replaces text-[length:var(--era-text)]
|
|
115
|
+
- `leading-body` — Prose leading — `leading-body` is the pair to `text-body`, and every piece
|
|
116
|
+
- `rounded-icon · rounded-pill · rounded-chip · rounded-control · rounded-bar · rounded-menu-item` — Radius ladder — Tailwind's own rounded-* names now walk era's concentric
|
|
117
|
+
- `shadow` — Surface chrome — bare `shadow` is the resting control edge, shadow-lg the
|
|
118
|
+
- `shadow-sm · shadow-lg · shadow-well · shadow-pressed · shadow-highlight` — v4 marks bare `shadow` a deprecated spelling of shadow-sm, and lints
|
|
119
|
+
- `bg-well · text-well · border-well · bg-elevated · text-elevated · border-elevated · bg-highlight · text-highlight · … (12 in all)` — Surface fills — bg-well is the surface's own resting fill (pairs with
|
|
120
|
+
- `p-gutter · px-gutter · py-gutter · gap-gutter · p-panel · px-panel · py-panel · gap-panel · … (24 in all)` — THE SPACING SCALE — one entry per token, from which Tailwind derives the
|
|
121
|
+
- `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)` — 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.
|
|
122
|
+
- `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)` — 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.
|
|
123
|
+
- `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).
|
|
124
|
+
- `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.
|
|
125
|
+
- `ease-base` — Motion — bare transition utilities default to the motion axis, so
|
|
126
|
+
- `bg-divider · text-divider · border-divider · bg-divider-faded · text-divider-faded · border-divider-faded · bg-background · text-background · … (66 in all)` — Surface divider colors: border-divider, bg-divider-faded, …
|
|
127
|
+
- `bg-fill · text-fill · border-fill · bg-link · text-link · border-link · bg-primary · text-primary · … (33 in all)` — The standing pill fill — --era-fill, the latched counterpart of the
|
|
117
128
|
- `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.
|
|
118
129
|
|
|
119
130
|
Full reference (what each emits, when to use it): `{{ORIGIN}}/utilities.md`. Machine-readable list: `{{ORIGIN}}/utilities.json`.
|