@signal9/era-ui 12.1.2 → 14.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/dev/audit-overlay.svelte +1 -1
- package/dist/docs/component-docs-core.js +2 -2
- package/dist/docs/consumer-import.d.ts +37 -0
- package/dist/docs/consumer-import.js +42 -0
- package/dist/docs/css-utilities.js +17 -1
- package/dist/docs/notes.md +12 -11
- package/dist/era-ui.css +1 -1
- package/dist/generated-docs/accordion.md +1 -1
- package/dist/generated-docs/alert-dialog.md +1 -1
- package/dist/generated-docs/avatar.md +1 -1
- package/dist/generated-docs/badge.md +3 -0
- package/dist/generated-docs/button.md +4 -0
- package/dist/generated-docs/calendar.md +1 -1
- package/dist/generated-docs/checkbox.md +1 -1
- package/dist/generated-docs/chip.md +3 -0
- package/dist/generated-docs/collapsible.md +1 -1
- package/dist/generated-docs/combobox.md +1 -1
- package/dist/generated-docs/command.md +1 -1
- package/dist/generated-docs/context-menu.md +1 -1
- package/dist/generated-docs/date-field.md +1 -1
- package/dist/generated-docs/date-picker.md +1 -1
- package/dist/generated-docs/date-range-field.md +1 -1
- package/dist/generated-docs/date-range-picker.md +1 -1
- package/dist/generated-docs/dialog.md +1 -1
- package/dist/generated-docs/dropdown-menu.md +1 -1
- package/dist/generated-docs/link-preview.md +1 -1
- package/dist/generated-docs/llms-full.txt +101 -68
- package/dist/generated-docs/llms.txt +1 -1
- package/dist/generated-docs/manifest.json +24 -24
- package/dist/generated-docs/menu.md +1 -1
- package/dist/generated-docs/menubar.md +1 -1
- package/dist/generated-docs/navigation-menu.md +1 -1
- package/dist/generated-docs/notes.md +12 -11
- package/dist/generated-docs/pagination.md +1 -1
- package/dist/generated-docs/pin-input.md +1 -1
- package/dist/generated-docs/popover.md +1 -1
- package/dist/generated-docs/radio-group.md +1 -1
- package/dist/generated-docs/range-calendar.md +1 -1
- package/dist/generated-docs/rating-group.md +1 -1
- package/dist/generated-docs/scroll-area.md +1 -1
- package/dist/generated-docs/select.md +1 -1
- package/dist/generated-docs/sheet.md +1 -1
- package/dist/generated-docs/slider.md +1 -1
- package/dist/generated-docs/step.md +1 -1
- package/dist/generated-docs/table.md +1 -1
- package/dist/generated-docs/tabs.md +1 -1
- package/dist/generated-docs/time-field.md +1 -1
- package/dist/generated-docs/time-range-field.md +1 -1
- package/dist/generated-docs/toggle-group.md +1 -1
- package/dist/generated-docs/toolbar.md +1 -1
- package/dist/generated-docs/tooltip.md +1 -1
- package/dist/generated-docs/utilities.json +10 -10
- package/dist/generated-docs/utilities.md +41 -19
- package/dist/os/index.d.ts +0 -1
- package/dist/os/index.js +0 -1
- package/dist/os/notification-center.svelte +1 -2
- package/dist/os/taskbar.svelte +2 -3
- package/dist/os/toaster.svelte +2 -3
- package/dist/styles/index.css +77 -12
- package/dist/styles/layers.css +48 -0
- package/dist/styles/surfaces/base.css +4 -2
- package/dist/styles/surfaces/glass.css +0 -13
- package/dist/theme/index.d.ts +87 -0
- package/dist/theme/index.js +86 -0
- 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/badge/badge.svelte +14 -1
- package/dist/ui/badge/badge.svelte.d.ts +4 -0
- package/dist/ui/button/button.svelte +37 -7
- package/dist/ui/button/button.svelte.d.ts +6 -0
- package/dist/ui/chip/chip.svelte +14 -1
- package/dist/ui/chip/chip.svelte.d.ts +4 -0
- package/dist/ui/combobox/combobox-content.svelte +1 -1
- package/dist/ui/command-bar/command-bar.svelte +1 -1
- package/dist/ui/context-menu/context-menu-content.svelte +1 -1
- package/dist/ui/context-menu/context-menu-sub-content.svelte +1 -1
- package/dist/ui/date-picker/date-picker-content.svelte +1 -1
- package/dist/ui/date-range-picker/date-range-picker-content.svelte +1 -1
- package/dist/ui/dialog/dialog-content.svelte +1 -1
- package/dist/ui/dialog/dialog-overlay.svelte +5 -1
- package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
- package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/dist/ui/link-preview/link-preview-content.svelte +1 -1
- package/dist/ui/menubar/menubar-content.svelte +1 -1
- package/dist/ui/menubar/menubar-sub-content.svelte +1 -1
- package/dist/ui/pin-input/index.d.ts +1 -0
- package/dist/ui/pin-input/index.js +10 -0
- package/dist/ui/popover/popover-content.svelte +1 -1
- package/dist/ui/select/select-content.svelte +1 -1
- package/dist/ui/sheet/sheet-content.svelte +1 -1
- package/dist/ui/sheet/sheet-content.svelte.d.ts +1 -1
- package/dist/ui/tooltip/tooltip-content.svelte +1 -1
- package/package.json +9 -12
- package/dist/apps/index.d.ts +0 -20
- package/dist/apps/index.js +0 -20
- package/dist/apps/llm-shell/index.d.ts +0 -2
- package/dist/apps/llm-shell/index.js +0 -1
- package/dist/apps/llm-shell/llm-shell.svelte +0 -334
- package/dist/apps/llm-shell/llm-shell.svelte.d.ts +0 -57
- package/dist/apps/llm-shell/llm-swarm.svelte +0 -79
- package/dist/apps/llm-shell/llm-swarm.svelte.d.ts +0 -25
- package/dist/apps/llm-shell/types.d.ts +0 -103
- package/dist/apps/llm-shell/types.js +0 -1
- package/dist/apps/notes/editor/bubble-menu.svelte.d.ts +0 -11
- package/dist/apps/notes/editor/bubble-menu.svelte.js +0 -165
- package/dist/apps/notes/editor/bubble-toolbar.svelte +0 -55
- package/dist/apps/notes/editor/bubble-toolbar.svelte.d.ts +0 -22
- package/dist/apps/notes/editor/extensions.d.ts +0 -18
- package/dist/apps/notes/editor/extensions.js +0 -88
- package/dist/apps/notes/editor/floating.d.ts +0 -25
- package/dist/apps/notes/editor/floating.js +0 -54
- package/dist/apps/notes/editor/link.d.ts +0 -9
- package/dist/apps/notes/editor/link.js +0 -22
- package/dist/apps/notes/editor/list-cleanup-rule.d.ts +0 -14
- package/dist/apps/notes/editor/list-cleanup-rule.js +0 -47
- package/dist/apps/notes/editor/slash-command.svelte.d.ts +0 -22
- package/dist/apps/notes/editor/slash-command.svelte.js +0 -215
- package/dist/apps/notes/editor/slash-menu.svelte +0 -82
- package/dist/apps/notes/editor/slash-menu.svelte.d.ts +0 -23
- package/dist/apps/notes/index.d.ts +0 -11
- package/dist/apps/notes/index.js +0 -13
- package/dist/apps/notes/markdown.d.ts +0 -12
- package/dist/apps/notes/markdown.js +0 -165
- package/dist/apps/notes/note-editor.svelte +0 -176
- package/dist/apps/notes/note-editor.svelte.d.ts +0 -36
- package/dist/apps/notes/notes-store.svelte.d.ts +0 -64
- package/dist/apps/notes/notes-store.svelte.js +0 -234
- package/dist/apps/notes/notes.svelte +0 -501
- package/dist/apps/notes/notes.svelte.d.ts +0 -53
- package/dist/apps/notes/tree.d.ts +0 -70
- package/dist/apps/notes/tree.js +0 -185
- package/dist/apps/notes/types.d.ts +0 -49
- package/dist/apps/notes/types.js +0 -11
- package/dist/docs/package-name.d.ts +0 -18
- package/dist/docs/package-name.js +0 -18
- package/dist/docs/quickstart.md +0 -43
- package/dist/os/layers.d.ts +0 -23
- package/dist/os/layers.js +0 -23
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"slug": "utilities",
|
|
45
45
|
"title": "Utilities",
|
|
46
46
|
"summary": "The CSS classes era ships alongside the components — links, ink-centred text, shimmer, hidden scrollbars.",
|
|
47
|
-
"tokenEstimate":
|
|
47
|
+
"tokenEstimate": 10647,
|
|
48
48
|
"sections": [
|
|
49
49
|
"Overview",
|
|
50
50
|
"era-interactive",
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"era-ink-center",
|
|
57
57
|
"era-token-ink",
|
|
58
58
|
"era-label-ink",
|
|
59
|
+
"glass-blur",
|
|
59
60
|
"era-shimmer",
|
|
60
61
|
"era-collapse",
|
|
61
62
|
"h-icon · h-pill · h-chip · h-control · h-bar",
|
|
@@ -79,8 +80,7 @@
|
|
|
79
80
|
"bg-field · text-field · border-field · bg-field-highlight · text-field-highlight · border-field-highlight",
|
|
80
81
|
"ease-base",
|
|
81
82
|
"bg-divider · text-divider · border-divider · bg-divider-faded · text-divider-faded · border-divider-faded · bg-background · text-background · … (66 in all)",
|
|
82
|
-
"bg-fill · text-fill · border-fill · bg-link · text-link · border-link · bg-primary · text-primary · … (33 in all)"
|
|
83
|
-
"glass-blur"
|
|
83
|
+
"bg-fill · text-fill · border-fill · bg-link · text-link · border-link · bg-primary · text-primary · … (33 in all)"
|
|
84
84
|
],
|
|
85
85
|
"file": "utilities.md"
|
|
86
86
|
},
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
"slug": "notes",
|
|
121
121
|
"title": "Notes",
|
|
122
122
|
"summary": "A complete notes app — rich-text editor, slash commands, local persistence.",
|
|
123
|
-
"tokenEstimate":
|
|
123
|
+
"tokenEstimate": 1005,
|
|
124
124
|
"sections": [
|
|
125
125
|
"Usage",
|
|
126
126
|
"Peer dependencies",
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
"slug": "badge",
|
|
147
147
|
"title": "Badge",
|
|
148
148
|
"summary": "A small label for status or categorization.",
|
|
149
|
-
"tokenEstimate":
|
|
149
|
+
"tokenEstimate": 279,
|
|
150
150
|
"sections": [
|
|
151
151
|
"Import",
|
|
152
152
|
"Props",
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
"slug": "button",
|
|
184
184
|
"title": "Button",
|
|
185
185
|
"summary": "A flexible button or link element.",
|
|
186
|
-
"tokenEstimate":
|
|
186
|
+
"tokenEstimate": 538,
|
|
187
187
|
"sections": [
|
|
188
188
|
"Import",
|
|
189
189
|
"Props",
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
"slug": "chip",
|
|
230
230
|
"title": "Chip",
|
|
231
231
|
"summary": "An interactive, optionally dismissible token.",
|
|
232
|
-
"tokenEstimate":
|
|
232
|
+
"tokenEstimate": 329,
|
|
233
233
|
"sections": [
|
|
234
234
|
"Import",
|
|
235
235
|
"Props",
|
|
@@ -468,7 +468,7 @@
|
|
|
468
468
|
"slug": "step",
|
|
469
469
|
"title": "Step",
|
|
470
470
|
"summary": "Expandable inline step — tool calls, thinking, agent actions.",
|
|
471
|
-
"tokenEstimate":
|
|
471
|
+
"tokenEstimate": 316,
|
|
472
472
|
"sections": [
|
|
473
473
|
"Import",
|
|
474
474
|
"Step.Root",
|
|
@@ -543,7 +543,7 @@
|
|
|
543
543
|
"slug": "date-range-field",
|
|
544
544
|
"title": "Date Range Field",
|
|
545
545
|
"summary": "Segmented start/end date input.",
|
|
546
|
-
"tokenEstimate":
|
|
546
|
+
"tokenEstimate": 298,
|
|
547
547
|
"sections": [
|
|
548
548
|
"Import",
|
|
549
549
|
"DateRangeField.Root",
|
|
@@ -693,7 +693,7 @@
|
|
|
693
693
|
"slug": "menu",
|
|
694
694
|
"title": "Menu",
|
|
695
695
|
"summary": "Headless menu primitives re-exported from bits-ui.",
|
|
696
|
-
"tokenEstimate":
|
|
696
|
+
"tokenEstimate": 50,
|
|
697
697
|
"sections": [
|
|
698
698
|
"Import"
|
|
699
699
|
],
|
|
@@ -755,7 +755,7 @@
|
|
|
755
755
|
"slug": "pagination",
|
|
756
756
|
"title": "Pagination",
|
|
757
757
|
"summary": "Enables users to navigate through a series of pages.",
|
|
758
|
-
"tokenEstimate":
|
|
758
|
+
"tokenEstimate": 374,
|
|
759
759
|
"sections": [
|
|
760
760
|
"Import",
|
|
761
761
|
"Pagination.Root",
|
|
@@ -871,7 +871,7 @@
|
|
|
871
871
|
"slug": "table",
|
|
872
872
|
"title": "Table",
|
|
873
873
|
"summary": "A tabular data display with rows, headers, and cells.",
|
|
874
|
-
"tokenEstimate":
|
|
874
|
+
"tokenEstimate": 733,
|
|
875
875
|
"sections": [
|
|
876
876
|
"Import",
|
|
877
877
|
"Table.Root",
|
|
@@ -917,7 +917,7 @@
|
|
|
917
917
|
"slug": "time-range-field",
|
|
918
918
|
"title": "Time Range Field",
|
|
919
919
|
"summary": "Segmented start/end time input.",
|
|
920
|
-
"tokenEstimate":
|
|
920
|
+
"tokenEstimate": 298,
|
|
921
921
|
"sections": [
|
|
922
922
|
"Import",
|
|
923
923
|
"TimeRangeField.Root",
|
|
@@ -943,7 +943,7 @@
|
|
|
943
943
|
"slug": "toolbar",
|
|
944
944
|
"title": "Toolbar",
|
|
945
945
|
"summary": "Headless toolbar primitives re-exported from bits-ui.",
|
|
946
|
-
"tokenEstimate":
|
|
946
|
+
"tokenEstimate": 53,
|
|
947
947
|
"sections": [
|
|
948
948
|
"Import"
|
|
949
949
|
],
|
|
@@ -1064,6 +1064,16 @@
|
|
|
1064
1064
|
"description": "LABEL INK — era-token-ink's mixed-case sibling, and the general answer to\n\"this fixed-height control holds one line of text\".\n\nSame mechanism, same reason: `text-box-trim` needs a BLOCK box, so the row\nbecomes one and `align-content` (block-container alignment) does the\ncentring. What differs is the band and the alignment, because the content\nclass differs — a label is sentence case, so the x-height band is the visual\nmass to centre (cap-band reads low on \"System\"), and it is laid out against\nthe row's padding rather than centred in it.\n\nWHY IT EXISTS AT ALL: era's controls are flex, and a flex container's bare\ntext is an ANONYMOUS flex item — a box no selector reaches and no\nnon-inherited property touches. So `era-text-trim` on a flex row is inert,\ncontributing only its `line-height: 1`, and the ink falls back to line-box\ncentring by font metrics. era-token-ink already fixed that for centred\ntokens; this fixes it for everything else.\n\nTHE ICON CASE IS NOT SOLVED, and cannot be from CSS: an icon beside the text\nneeds the box to stay flex, which re-creates the anonymous item. A component\nwhose children are an opaque slot therefore guards it —\n`not-has-[svg]:era-label-ink` — and ink-centres the text-only case while\nleaving the icon case on line-box centring. Splitting icon and label into\nseparate slots is what would close it; typography/inert-trim reports every\nsite still on the fallback.",
|
|
1065
1065
|
"css": "@utility era-label-ink {\n\tdisplay: block;\n\talign-content: center;\n\tline-height: 1;\n\ttext-box: trim-both ex alphabetic;\n}"
|
|
1066
1066
|
},
|
|
1067
|
+
{
|
|
1068
|
+
"name": "glass-blur",
|
|
1069
|
+
"names": [
|
|
1070
|
+
"glass-blur"
|
|
1071
|
+
],
|
|
1072
|
+
"file": "index.css",
|
|
1073
|
+
"useCase": "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.",
|
|
1074
|
+
"description": "Tailwind v4 cannot resolve var() inside backdrop-blur-[], so the filter\nis a registered utility, gated to glass subtrees.\n\nIt lives HERE rather than in surfaces/glass.css, where a surface's own\nchrome would naturally sit, because glass.css is imported into a cascade\nlayer and `@utility` cannot be nested inside one. Surface-scoped RULES stay\nin their surface file; surface-scoped UTILITIES have to come out.",
|
|
1075
|
+
"css": "@utility` cannot be nested inside one. Surface-scoped RULES stay\n * in their surface file; surface-scoped UTILITIES have to come out.\n *\n * @use the backdrop blur for a floating panel (popover, dialog, taskbar) — it\n * applies only inside a data-surface=\"glass\" subtree and is inert elsewhere,\n * so it is safe to leave on a panel that renders under every surface. */\n@utility glass-blur {\n\t[data-surface='glass'] & {\n\t\tbackdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));\n\t\t-webkit-backdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));\n\t}\n}"
|
|
1076
|
+
},
|
|
1067
1077
|
{
|
|
1068
1078
|
"name": "era-shimmer",
|
|
1069
1079
|
"names": [
|
|
@@ -1512,16 +1522,6 @@
|
|
|
1512
1522
|
"file": "index.css",
|
|
1513
1523
|
"description": "The standing pill fill — --era-fill, the latched counterpart of the\ntransient highlight. Surface-owned: a composing wash on flat/bevel, the\nopaque swatch on glass.",
|
|
1514
1524
|
"css": "@theme inline {\n\t--color-fill: var(--era-fill);\n\t--color-link: var(--color-link);\n\t--color-primary: var(--color-primary);\n\t--color-primary-fg: var(--color-primary-fg);\n\t--color-primary-hover: var(--color-primary-hover);\n\t--color-destructive: var(--color-destructive);\n\t--color-destructive-fg: var(--color-destructive-fg);\n\t--color-success: var(--color-success);\n\t--color-success-fg: var(--color-success-fg);\n\t--color-warning: var(--color-warning);\n\t--color-warning-fg: var(--color-warning-fg);\n}"
|
|
1515
|
-
},
|
|
1516
|
-
{
|
|
1517
|
-
"name": "glass-blur",
|
|
1518
|
-
"names": [
|
|
1519
|
-
"glass-blur"
|
|
1520
|
-
],
|
|
1521
|
-
"file": "surfaces/glass.css",
|
|
1522
|
-
"useCase": "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.",
|
|
1523
|
-
"description": "Tailwind v4 cannot resolve var() inside backdrop-blur-[], so the filter\nis a registered utility, gated to glass subtrees.",
|
|
1524
|
-
"css": "@utility glass-blur {\n\t[data-surface='glass'] & {\n\t\tbackdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));\n\t\t-webkit-backdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));\n\t}\n}"
|
|
1525
1525
|
}
|
|
1526
1526
|
]
|
|
1527
1527
|
}
|
|
@@ -5,7 +5,7 @@ Headless navigation-menu primitives re-exported from bits-ui.
|
|
|
5
5
|
## Import
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import
|
|
8
|
+
import * as NavigationMenu from "@signal9/era-ui/navigation-menu";
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Composed from sub-components — compose explicitly at the call site:
|
|
@@ -4,19 +4,20 @@ A complete notes app — rich-text editor, slash commands, local persistence.
|
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
**Notes is not published.** It lives in `src/apps/` in the era-ui repository,
|
|
8
|
+
outside the packaged `src/lib`, so there is no import path that reaches it — the
|
|
9
|
+
`@signal9/era-ui/apps` subpath was removed in v13.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
A design system that also ships a note-taking application is two products in one
|
|
12
|
+
package: Notes alone brings fifteen TipTap packages, and its release cadence and
|
|
13
|
+
support expectations are nothing like a primitive's. It stays in the repo as a
|
|
14
|
+
reference implementation and a demo — read it, copy it, or lift it into the
|
|
15
|
+
product that renders it.
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
What era DOES publish is the part that generalises: `@signal9/era-ui/styles/prose`
|
|
18
|
+
is the document typography Notes uses, available to anyone building an editor.
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
Read as a reference, the integration is: a sidebar with filter, pin, and delete; a TipTap
|
|
20
21
|
document with a `/` command menu and a selection toolbar; and persistence to
|
|
21
22
|
`localStorage` under `era-ui:notes`.
|
|
22
23
|
|
|
@@ -50,7 +51,7 @@ Persistence is one small interface, so server-backed hosting is a drop-in swap
|
|
|
50
51
|
`load`/`save` may be sync or async:
|
|
51
52
|
|
|
52
53
|
```ts
|
|
53
|
-
import { Notes, NotesStore } from '
|
|
54
|
+
import { Notes, NotesStore } from '$apps/index.js'; // in-repo; not published
|
|
54
55
|
|
|
55
56
|
const store = new NotesStore({
|
|
56
57
|
adapter: {
|
|
@@ -5,7 +5,7 @@ Enables users to navigate through a series of pages.
|
|
|
5
5
|
## Import
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import
|
|
8
|
+
import * as Pagination from "@signal9/era-ui/pagination";
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Composed from sub-components — compose explicitly at the call site:
|
|
@@ -5,7 +5,7 @@ Enables users to input a sequence of one-character inputs.
|
|
|
5
5
|
## Import
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import
|
|
8
|
+
import * as PinInput from "@signal9/era-ui/pin-input";
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Composed from sub-components — compose explicitly at the call site:
|
|
@@ -5,7 +5,7 @@ Headless range-calendar primitives re-exported from bits-ui.
|
|
|
5
5
|
## Import
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import
|
|
8
|
+
import * as RangeCalendar from "@signal9/era-ui/range-calendar";
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Composed from sub-components — compose explicitly at the call site:
|
|
@@ -5,7 +5,7 @@ A star-style single-choice rating input.
|
|
|
5
5
|
## Import
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import
|
|
8
|
+
import * as RatingGroup from "@signal9/era-ui/rating-group";
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Composed from sub-components — compose explicitly at the call site:
|
|
@@ -5,7 +5,7 @@ Segmented start/end time input.
|
|
|
5
5
|
## Import
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import
|
|
8
|
+
import * as TimeRangeField from "@signal9/era-ui/time-range-field";
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Composed from sub-components — compose explicitly at the call site:
|
|
@@ -5,7 +5,7 @@ A set of toggle buttons with single or multiple selection.
|
|
|
5
5
|
## Import
|
|
6
6
|
|
|
7
7
|
```ts
|
|
8
|
-
import
|
|
8
|
+
import * as ToggleGroup from "@signal9/era-ui/toggle-group";
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Composed from sub-components — compose explicitly at the call site:
|
|
@@ -90,6 +90,16 @@
|
|
|
90
90
|
"description": "LABEL INK — era-token-ink's mixed-case sibling, and the general answer to\n\"this fixed-height control holds one line of text\".\n\nSame mechanism, same reason: `text-box-trim` needs a BLOCK box, so the row\nbecomes one and `align-content` (block-container alignment) does the\ncentring. What differs is the band and the alignment, because the content\nclass differs — a label is sentence case, so the x-height band is the visual\nmass to centre (cap-band reads low on \"System\"), and it is laid out against\nthe row's padding rather than centred in it.\n\nWHY IT EXISTS AT ALL: era's controls are flex, and a flex container's bare\ntext is an ANONYMOUS flex item — a box no selector reaches and no\nnon-inherited property touches. So `era-text-trim` on a flex row is inert,\ncontributing only its `line-height: 1`, and the ink falls back to line-box\ncentring by font metrics. era-token-ink already fixed that for centred\ntokens; this fixes it for everything else.\n\nTHE ICON CASE IS NOT SOLVED, and cannot be from CSS: an icon beside the text\nneeds the box to stay flex, which re-creates the anonymous item. A component\nwhose children are an opaque slot therefore guards it —\n`not-has-[svg]:era-label-ink` — and ink-centres the text-only case while\nleaving the icon case on line-box centring. Splitting icon and label into\nseparate slots is what would close it; typography/inert-trim reports every\nsite still on the fallback.",
|
|
91
91
|
"css": "@utility era-label-ink {\n\tdisplay: block;\n\talign-content: center;\n\tline-height: 1;\n\ttext-box: trim-both ex alphabetic;\n}"
|
|
92
92
|
},
|
|
93
|
+
{
|
|
94
|
+
"name": "glass-blur",
|
|
95
|
+
"names": [
|
|
96
|
+
"glass-blur"
|
|
97
|
+
],
|
|
98
|
+
"file": "index.css",
|
|
99
|
+
"useCase": "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.",
|
|
100
|
+
"description": "Tailwind v4 cannot resolve var() inside backdrop-blur-[], so the filter\nis a registered utility, gated to glass subtrees.\n\nIt lives HERE rather than in surfaces/glass.css, where a surface's own\nchrome would naturally sit, because glass.css is imported into a cascade\nlayer and `@utility` cannot be nested inside one. Surface-scoped RULES stay\nin their surface file; surface-scoped UTILITIES have to come out.",
|
|
101
|
+
"css": "@utility` cannot be nested inside one. Surface-scoped RULES stay\n * in their surface file; surface-scoped UTILITIES have to come out.\n *\n * @use the backdrop blur for a floating panel (popover, dialog, taskbar) — it\n * applies only inside a data-surface=\"glass\" subtree and is inert elsewhere,\n * so it is safe to leave on a panel that renders under every surface. */\n@utility glass-blur {\n\t[data-surface='glass'] & {\n\t\tbackdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));\n\t\t-webkit-backdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));\n\t}\n}"
|
|
102
|
+
},
|
|
93
103
|
{
|
|
94
104
|
"name": "era-shimmer",
|
|
95
105
|
"names": [
|
|
@@ -538,16 +548,6 @@
|
|
|
538
548
|
"file": "index.css",
|
|
539
549
|
"description": "The standing pill fill — --era-fill, the latched counterpart of the\ntransient highlight. Surface-owned: a composing wash on flat/bevel, the\nopaque swatch on glass.",
|
|
540
550
|
"css": "@theme inline {\n\t--color-fill: var(--era-fill);\n\t--color-link: var(--color-link);\n\t--color-primary: var(--color-primary);\n\t--color-primary-fg: var(--color-primary-fg);\n\t--color-primary-hover: var(--color-primary-hover);\n\t--color-destructive: var(--color-destructive);\n\t--color-destructive-fg: var(--color-destructive-fg);\n\t--color-success: var(--color-success);\n\t--color-success-fg: var(--color-success-fg);\n\t--color-warning: var(--color-warning);\n\t--color-warning-fg: var(--color-warning-fg);\n}"
|
|
541
|
-
},
|
|
542
|
-
{
|
|
543
|
-
"name": "glass-blur",
|
|
544
|
-
"names": [
|
|
545
|
-
"glass-blur"
|
|
546
|
-
],
|
|
547
|
-
"file": "surfaces/glass.css",
|
|
548
|
-
"useCase": "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.",
|
|
549
|
-
"description": "Tailwind v4 cannot resolve var() inside backdrop-blur-[], so the filter\nis a registered utility, gated to glass subtrees.",
|
|
550
|
-
"css": "@utility glass-blur {\n\t[data-surface='glass'] & {\n\t\tbackdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));\n\t\t-webkit-backdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));\n\t}\n}"
|
|
551
551
|
}
|
|
552
552
|
]
|
|
553
553
|
}
|
|
@@ -33,6 +33,17 @@ motion):
|
|
|
33
33
|
| `text-body` | density-derived body/control text size |
|
|
34
34
|
| `p-gutter` / `gap-gutter` / `mt-gutter` / … | the spacing scale — EVERY spacing prefix works |
|
|
35
35
|
|
|
36
|
+
THE SPACING NAMES IN SIZE ORDER, smallest first, because the names do not
|
|
37
|
+
imply it and guessing gets it backwards:
|
|
38
|
+
|
|
39
|
+
gutter < panel < field < card < content
|
|
40
|
+
|
|
41
|
+
Measured at `data-mode="balanced"`: gutter 5px, field ~9px, card ~11px,
|
|
42
|
+
content ~22px. `gutter` is the TIGHT one — the gap between sibling controls
|
|
43
|
+
and a rail's own padding. `field` is a text input's side padding, not the
|
|
44
|
+
label-to-input gap. Reading them the other way round produces a layout whose
|
|
45
|
+
hierarchy is inverted and therefore reads flat.
|
|
46
|
+
|
|
36
47
|
The spacing names (`gutter`, `card`, `panel`, `content`, `menu`, `field`, the
|
|
37
48
|
`inset-*` and concentric `*-inset-*` insets, `glyph-*`) are registered as a
|
|
38
49
|
Tailwind spacing scale, so every prefix derives automatically: `p-`, `px-`,
|
|
@@ -58,6 +69,7 @@ source uses it where a name exists.
|
|
|
58
69
|
| `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
70
|
| `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
71
|
| `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). |
|
|
72
|
+
| `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. |
|
|
61
73
|
| `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. |
|
|
62
74
|
| `era-collapse` | the height sweep for a bits-ui Collapsible.Content — put it on the Content element itself (it carries its own overflow: hidden). |
|
|
63
75
|
| `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-*). |
|
|
@@ -82,7 +94,6 @@ source uses it where a name exists.
|
|
|
82
94
|
| `ease-base` | — |
|
|
83
95
|
| `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
96
|
| `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` | — |
|
|
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. |
|
|
86
97
|
|
|
87
98
|
## era-interactive
|
|
88
99
|
|
|
@@ -380,6 +391,35 @@ Declared in `index.css`.
|
|
|
380
391
|
}
|
|
381
392
|
```
|
|
382
393
|
|
|
394
|
+
## glass-blur
|
|
395
|
+
|
|
396
|
+
**Use it for:** 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.
|
|
397
|
+
|
|
398
|
+
Tailwind v4 cannot resolve var() inside backdrop-blur-[], so the filter
|
|
399
|
+
is a registered utility, gated to glass subtrees.
|
|
400
|
+
|
|
401
|
+
It lives HERE rather than in surfaces/glass.css, where a surface's own
|
|
402
|
+
chrome would naturally sit, because glass.css is imported into a cascade
|
|
403
|
+
layer and `@utility` cannot be nested inside one. Surface-scoped RULES stay
|
|
404
|
+
in their surface file; surface-scoped UTILITIES have to come out.
|
|
405
|
+
|
|
406
|
+
Declared in `index.css`.
|
|
407
|
+
|
|
408
|
+
```css
|
|
409
|
+
@utility` cannot be nested inside one. Surface-scoped RULES stay
|
|
410
|
+
* in their surface file; surface-scoped UTILITIES have to come out.
|
|
411
|
+
*
|
|
412
|
+
* @use the backdrop blur for a floating panel (popover, dialog, taskbar) — it
|
|
413
|
+
* applies only inside a data-surface="glass" subtree and is inert elsewhere,
|
|
414
|
+
* so it is safe to leave on a panel that renders under every surface. */
|
|
415
|
+
@utility glass-blur {
|
|
416
|
+
[data-surface='glass'] & {
|
|
417
|
+
backdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));
|
|
418
|
+
-webkit-backdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
```
|
|
422
|
+
|
|
383
423
|
## era-shimmer
|
|
384
424
|
|
|
385
425
|
**Use it for:** the in-progress text treatment — put it on a "working…" / "thinking…" label while a task streams, instead of a spinner beside the text.
|
|
@@ -902,21 +942,3 @@ Declared in `index.css`.
|
|
|
902
942
|
--color-warning-fg: var(--color-warning-fg);
|
|
903
943
|
}
|
|
904
944
|
```
|
|
905
|
-
|
|
906
|
-
## glass-blur
|
|
907
|
-
|
|
908
|
-
**Use it for:** 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.
|
|
909
|
-
|
|
910
|
-
Tailwind v4 cannot resolve var() inside backdrop-blur-[], so the filter
|
|
911
|
-
is a registered utility, gated to glass subtrees.
|
|
912
|
-
|
|
913
|
-
Declared in `surfaces/glass.css`.
|
|
914
|
-
|
|
915
|
-
```css
|
|
916
|
-
@utility glass-blur {
|
|
917
|
-
[data-surface='glass'] & {
|
|
918
|
-
backdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));
|
|
919
|
-
-webkit-backdrop-filter: blur(var(--era-blur)) saturate(var(--era-saturate));
|
|
920
|
-
}
|
|
921
|
-
}
|
|
922
|
-
```
|
package/dist/os/index.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ export { PaneManager, getPaneManager, tryGetPaneManager, setPaneManagerContext,
|
|
|
2
2
|
export { persistWorkspace, loadWorkspace, saveWorkspace, clearWorkspace, WORKSPACE_STORAGE_KEY } from './workspace-storage.svelte.js';
|
|
3
3
|
export { type SnapZone, type Workspace } from './pane-manager.svelte.js';
|
|
4
4
|
export { NotificationService, getNotifications, setNotificationContext, type AppNotification, type NotifyOptions, type NotificationAction, type NotificationTone } from './notifications.svelte.js';
|
|
5
|
-
export { LAYER } from './layers.js';
|
|
6
5
|
export { default as Desktop } from './desktop.svelte';
|
|
7
6
|
export { default as Pane } from './pane.svelte';
|
|
8
7
|
export { default as Taskbar } from './taskbar.svelte';
|
package/dist/os/index.js
CHANGED
|
@@ -6,7 +6,6 @@ export { PaneManager, getPaneManager, tryGetPaneManager, setPaneManagerContext,
|
|
|
6
6
|
export { persistWorkspace, loadWorkspace, saveWorkspace, clearWorkspace, WORKSPACE_STORAGE_KEY } from './workspace-storage.svelte.js';
|
|
7
7
|
export {} from './pane-manager.svelte.js';
|
|
8
8
|
export { NotificationService, getNotifications, setNotificationContext } from './notifications.svelte.js';
|
|
9
|
-
export { LAYER } from './layers.js';
|
|
10
9
|
export { default as Desktop } from './desktop.svelte';
|
|
11
10
|
export { default as Pane } from './pane.svelte';
|
|
12
11
|
export { default as Taskbar } from './taskbar.svelte';
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
import { cn } from '../utils/index.js';
|
|
7
7
|
import { getNotifications, type AppNotification } from './notifications.svelte.js';
|
|
8
8
|
import { getPaneManager } from './pane-manager.svelte.js';
|
|
9
|
-
import { LAYER } from './layers.js';
|
|
10
9
|
|
|
11
10
|
let { open = $bindable(false) }: { open?: boolean } = $props();
|
|
12
11
|
const notif = getNotifications();
|
|
@@ -34,7 +33,7 @@
|
|
|
34
33
|
</script>
|
|
35
34
|
|
|
36
35
|
{#if open}
|
|
37
|
-
<div class={cn('absolute inset-0'
|
|
36
|
+
<div class={cn('absolute inset-0 z-drawer')}>
|
|
38
37
|
<!-- Click-away scrim (transparent) -->
|
|
39
38
|
<button
|
|
40
39
|
class="absolute inset-0 cursor-default"
|
package/dist/os/taskbar.svelte
CHANGED
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
import { cn } from '../utils/index.js';
|
|
12
12
|
import { getPaneManager } from './pane-manager.svelte.js';
|
|
13
13
|
import { getNotifications } from './notifications.svelte.js';
|
|
14
|
-
import { LAYER } from './layers.js';
|
|
15
14
|
|
|
16
15
|
let {
|
|
17
16
|
position = 'bottom',
|
|
@@ -209,7 +208,7 @@
|
|
|
209
208
|
'inset-x-0 border-divider-faded',
|
|
210
209
|
position === 'top' ? 'top-0 rounded-b-bar border-b' : 'bottom-0 rounded-t-bar border-t'
|
|
211
210
|
),
|
|
212
|
-
|
|
211
|
+
'z-chrome',
|
|
213
212
|
className
|
|
214
213
|
)}
|
|
215
214
|
{...restProps}
|
|
@@ -332,7 +331,7 @@
|
|
|
332
331
|
data-mode="touch"
|
|
333
332
|
class={cn(
|
|
334
333
|
'absolute right-gutter bottom-[max(var(--era-gap),env(safe-area-inset-bottom))] sm:hidden',
|
|
335
|
-
|
|
334
|
+
'z-chrome'
|
|
336
335
|
)}
|
|
337
336
|
>
|
|
338
337
|
<!-- A STANDARD era Button, just floated: era corners (rd-xs at this tier) and
|
package/dist/os/toaster.svelte
CHANGED
|
@@ -3,21 +3,20 @@
|
|
|
3
3
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
4
|
import { cn } from '../utils/index.js';
|
|
5
5
|
import { getNotifications } from './notifications.svelte.js';
|
|
6
|
-
import { LAYER } from './layers.js';
|
|
7
6
|
import Toast from './toast.svelte';
|
|
8
7
|
|
|
9
8
|
let { class: className, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();
|
|
10
9
|
const notif = getNotifications();
|
|
11
10
|
</script>
|
|
12
11
|
|
|
13
|
-
<!-- Toast stack, above the taskbar and above bits-ui overlays (
|
|
12
|
+
<!-- Toast stack, above the taskbar and above bits-ui overlays (z-toast).
|
|
14
13
|
flex-col-reverse: the newest toast (index 0) sits at the bottom, nearest the
|
|
15
14
|
tray it came from. pointer-events-none on the column so gaps don't block the
|
|
16
15
|
desktop; each toast re-enables its own. -->
|
|
17
16
|
<div
|
|
18
17
|
class={cn(
|
|
19
18
|
'pointer-events-none absolute right-card bottom-(--era-h-bar) flex flex-col-reverse gap-inset-chip',
|
|
20
|
-
|
|
19
|
+
'z-toast',
|
|
21
20
|
className
|
|
22
21
|
)}
|
|
23
22
|
{...restProps}
|