@signal9/era-ui 3.9.0 → 3.11.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/apps/index.d.ts +19 -0
- package/dist/apps/index.js +19 -0
- package/dist/apps/notes/editor/bubble-menu.svelte.d.ts +11 -0
- package/dist/apps/notes/editor/bubble-menu.svelte.js +106 -0
- package/dist/apps/notes/editor/bubble-toolbar.svelte +42 -0
- package/dist/apps/notes/editor/bubble-toolbar.svelte.d.ts +22 -0
- package/dist/apps/notes/editor/extensions.d.ts +18 -0
- package/dist/apps/notes/editor/extensions.js +88 -0
- package/dist/apps/notes/editor/floating.d.ts +21 -0
- package/dist/apps/notes/editor/floating.js +44 -0
- package/dist/apps/notes/editor/link.d.ts +9 -0
- package/dist/apps/notes/editor/link.js +22 -0
- package/dist/apps/notes/editor/list-cleanup-rule.d.ts +14 -0
- package/dist/apps/notes/editor/list-cleanup-rule.js +47 -0
- package/dist/apps/notes/editor/slash-command.svelte.d.ts +22 -0
- package/dist/apps/notes/editor/slash-command.svelte.js +215 -0
- package/dist/apps/notes/editor/slash-menu.svelte +63 -0
- package/dist/apps/notes/editor/slash-menu.svelte.d.ts +23 -0
- package/dist/apps/notes/index.d.ts +11 -0
- package/dist/apps/notes/index.js +13 -0
- package/dist/apps/notes/markdown.d.ts +12 -0
- package/dist/apps/notes/markdown.js +165 -0
- package/dist/apps/notes/note-editor.svelte +456 -0
- package/dist/apps/notes/note-editor.svelte.d.ts +35 -0
- package/dist/apps/notes/notes-store.svelte.d.ts +64 -0
- package/dist/apps/notes/notes-store.svelte.js +234 -0
- package/dist/apps/notes/notes.svelte +377 -0
- package/dist/apps/notes/notes.svelte.d.ts +22 -0
- package/dist/apps/notes/tree.d.ts +70 -0
- package/dist/apps/notes/tree.js +185 -0
- package/dist/apps/notes/types.d.ts +49 -0
- package/dist/apps/notes/types.js +11 -0
- package/dist/dev/audit/audits/index.d.ts +2 -1
- package/dist/dev/audit/audits/index.js +3 -1
- package/dist/dev/audit/audits/resting-gap.d.ts +2 -0
- package/dist/dev/audit/audits/resting-gap.js +78 -0
- package/dist/docs/notes.md +82 -0
- package/dist/era-ui.css +1 -1
- package/dist/generated-docs/llms-full.txt +92 -1
- package/dist/generated-docs/llms.txt +1 -1
- package/dist/generated-docs/manifest.json +16 -1
- package/dist/generated-docs/notes.md +86 -0
- package/dist/generated-docs/utilities.json +1 -1
- package/dist/generated-docs/utilities.md +1 -1
- package/dist/styles/index.css +2 -1
- package/dist/styles/themes.css +70 -52
- package/dist/ui/badge/badge.svelte.d.ts +17 -17
- package/dist/ui/bar/bar.svelte.d.ts +11 -11
- package/dist/ui/button/variants.d.ts +44 -44
- package/dist/ui/card/card.svelte.d.ts +20 -20
- package/dist/ui/chip/chip.svelte.d.ts +14 -14
- package/dist/ui/pane/pane-root.svelte.d.ts +1 -1
- package/dist/ui/pane/pane.svelte.d.ts +1 -1
- package/dist/ui/sheet/sheet-content.svelte.d.ts +14 -14
- package/dist/ui/skeleton/skeleton.svelte.d.ts +11 -11
- package/dist/utils/index.js +11 -0
- package/package.json +31 -5
|
@@ -199,7 +199,7 @@ Declared in `index.css`.
|
|
|
199
199
|
* before you touch it. Only the UNDERLINE reacts: a faint hint at rest —
|
|
200
200
|
* muted knocked back to 30% so it barely whispers — that resolves to the full
|
|
201
201
|
* text colour on hover. */
|
|
202
|
-
color: var(--color-
|
|
202
|
+
color: var(--color-link);
|
|
203
203
|
text-decoration-line: underline;
|
|
204
204
|
text-decoration-color: color-mix(in oklch, var(--color-muted) 30%, transparent);
|
|
205
205
|
text-underline-offset: 0.2em;
|
|
@@ -590,6 +590,97 @@ Release history — every version, grouped by change type.
|
|
|
590
590
|
|
|
591
591
|
<!-- end: changelog -->
|
|
592
592
|
|
|
593
|
+
<!-- begin: notes -->
|
|
594
|
+
|
|
595
|
+
# Notes
|
|
596
|
+
|
|
597
|
+
A complete notes app — rich-text editor, slash commands, local persistence.
|
|
598
|
+
|
|
599
|
+
## Usage
|
|
600
|
+
|
|
601
|
+
Apps ship on their own subpath and are **not** re-exported from `@sig-nine/era-ui`.
|
|
602
|
+
Notes carries TipTap, and a consumer who never imports an app should never pay
|
|
603
|
+
for it.
|
|
604
|
+
|
|
605
|
+
```svelte
|
|
606
|
+
<script>
|
|
607
|
+
import { Notes } from '@sig-nine/era-ui/apps';
|
|
608
|
+
</script>
|
|
609
|
+
|
|
610
|
+
<Notes />
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
That is the whole integration: a sidebar with filter, pin, and delete; a TipTap
|
|
614
|
+
document with a `/` command menu and a selection toolbar; and persistence to
|
|
615
|
+
`localStorage` under `era-ui:notes`.
|
|
616
|
+
|
|
617
|
+
## Peer dependencies
|
|
618
|
+
|
|
619
|
+
Install alongside the library (they are not bundled):
|
|
620
|
+
|
|
621
|
+
```
|
|
622
|
+
@tiptap/core @tiptap/pm @tiptap/starter-kit @tiptap/suggestion
|
|
623
|
+
@tiptap/extension-code-block-lowlight @tiptap/extension-details
|
|
624
|
+
@tiptap/extension-highlight @tiptap/extension-image
|
|
625
|
+
@tiptap/extension-placeholder @tiptap/extension-table
|
|
626
|
+
@tiptap/extension-task-item @tiptap/extension-task-list
|
|
627
|
+
@tiptap/extension-typography @tiptap/extension-unique-id
|
|
628
|
+
lowlight tiptap-markdown
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
## Props
|
|
632
|
+
|
|
633
|
+
| Prop | Type | Default | Notes |
|
|
634
|
+
| ------------ | ---------------- | ------------------ | ----------------------------------------------------------------- |
|
|
635
|
+
| `store` | `NotesStore` | created internally | Bring your own; when set, the host owns its lifecycle. |
|
|
636
|
+
| `adapter` | `NotesAdapter` | `localStorage` | Persistence for the internally-created store. |
|
|
637
|
+
| `storageKey` | `string` | `era-ui:notes` | Key for the default adapter. |
|
|
638
|
+
| `noteId` | `string \| null` | `null` | `$bindable` — the open note, for deep-linking or session restore. |
|
|
639
|
+
| `seed` | `NoteInit[]` | — | Created only when storage comes back empty (first-run sample). |
|
|
640
|
+
|
|
641
|
+
## Persistence
|
|
642
|
+
|
|
643
|
+
Persistence is one small interface, so server-backed hosting is a drop-in swap —
|
|
644
|
+
`load`/`save` may be sync or async:
|
|
645
|
+
|
|
646
|
+
```ts
|
|
647
|
+
import { Notes, NotesStore } from '@sig-nine/era-ui/apps';
|
|
648
|
+
|
|
649
|
+
const store = new NotesStore({
|
|
650
|
+
adapter: {
|
|
651
|
+
load: () => fetch('/api/notes').then((r) => r.json()),
|
|
652
|
+
save: (notes) => fetch('/api/notes', { method: 'PUT', body: JSON.stringify(notes) })
|
|
653
|
+
}
|
|
654
|
+
});
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
`NotesStore` is the reactive source of truth (`notes`, `ordered`, `loading`,
|
|
658
|
+
`status`, `lastError`) with `create` / `update` / `remove` / `togglePin` /
|
|
659
|
+
`setIcon` / `search` / `toMarkdown` / `flush`. Writes are debounced and
|
|
660
|
+
coalesced, so a burst of keystrokes costs one `save`.
|
|
661
|
+
|
|
662
|
+
## The heading index
|
|
663
|
+
|
|
664
|
+
Every document is also a tree. `buildGlobalTree()` walks heading structure,
|
|
665
|
+
`treeToText()` renders it as a table of contents a model can read, and
|
|
666
|
+
`extractSection(title, doc, headingId)` returns just the requested slice as
|
|
667
|
+
structure-preserving markdown — reasoning-based retrieval rather than
|
|
668
|
+
embeddings. Heading ids are stable (`@tiptap/extension-unique-id`), so a section
|
|
669
|
+
address survives edits above it.
|
|
670
|
+
|
|
671
|
+
## Notes
|
|
672
|
+
|
|
673
|
+
- Keyboard: `/` opens the command menu, `Mod-K` links a selection, `Mod-S`
|
|
674
|
+
flushes pending writes immediately.
|
|
675
|
+
- The slash menu and selection toolbar are real Svelte components mounted into
|
|
676
|
+
the document root, so they follow every axis — density tiers, surface chrome,
|
|
677
|
+
corners, motion, font — instead of carrying their own hardcoded styling.
|
|
678
|
+
- `@tiptap/extension-mathematics` is deliberately absent: it needs KaTeX's
|
|
679
|
+
stylesheet and fonts to render. Spread `noteExtensions` and add it yourself if
|
|
680
|
+
you want math.
|
|
681
|
+
|
|
682
|
+
<!-- end: notes -->
|
|
683
|
+
|
|
593
684
|
<!-- begin: aspect-ratio -->
|
|
594
685
|
|
|
595
686
|
# Aspect Ratio
|
|
@@ -31,7 +31,7 @@ Full concatenated reference: `{{ORIGIN}}/llms-full.txt`.
|
|
|
31
31
|
|
|
32
32
|
## Components
|
|
33
33
|
|
|
34
|
-
getting-started, spacing, surfaces, measurements, text, utilities, draggable, llm-shell, os, changelog, aspect-ratio, badge, avatar, bar, button, button-group, pane, card, chip, code-block, copy-button, cycle, kv, separator, sheet, skeleton, switch, toggle, accordion, alert-dialog, calendar, checkbox, collapsible, combobox, command, command-bar, step, context-menu, date-field, date-picker, date-range-field, date-range-picker, dialog, dropdown-menu, file-upload, scroll-area, input, link-preview, label, logo, menu, menubar, meter, navigation-menu, mode, pagination, pin-input, popover, progress, range-calendar, radio-group, rating-group, select, slider, table, tabs, time-field, time-range-field, toggle-group, toolbar, video-player, tooltip
|
|
34
|
+
getting-started, spacing, surfaces, measurements, text, utilities, draggable, llm-shell, os, changelog, notes, aspect-ratio, badge, avatar, bar, button, button-group, pane, card, chip, code-block, copy-button, cycle, kv, separator, sheet, skeleton, switch, toggle, accordion, alert-dialog, calendar, checkbox, collapsible, combobox, command, command-bar, step, context-menu, date-field, date-picker, date-range-field, date-range-picker, dialog, dropdown-menu, file-upload, scroll-area, input, link-preview, label, logo, menu, menubar, meter, navigation-menu, mode, pagination, pin-input, popover, progress, range-calendar, radio-group, rating-group, select, slider, table, tabs, time-field, time-range-field, toggle-group, toolbar, video-player, tooltip
|
|
35
35
|
|
|
36
36
|
## CSS utilities
|
|
37
37
|
|
|
@@ -100,6 +100,21 @@
|
|
|
100
100
|
"sections": [],
|
|
101
101
|
"file": "changelog.md"
|
|
102
102
|
},
|
|
103
|
+
{
|
|
104
|
+
"slug": "notes",
|
|
105
|
+
"title": "Notes",
|
|
106
|
+
"summary": "A complete notes app — rich-text editor, slash commands, local persistence.",
|
|
107
|
+
"tokenEstimate": 885,
|
|
108
|
+
"sections": [
|
|
109
|
+
"Usage",
|
|
110
|
+
"Peer dependencies",
|
|
111
|
+
"Props",
|
|
112
|
+
"Persistence",
|
|
113
|
+
"The heading index",
|
|
114
|
+
"Notes"
|
|
115
|
+
],
|
|
116
|
+
"file": "notes.md"
|
|
117
|
+
},
|
|
103
118
|
{
|
|
104
119
|
"slug": "aspect-ratio",
|
|
105
120
|
"title": "Aspect Ratio",
|
|
@@ -960,7 +975,7 @@
|
|
|
960
975
|
"file": "index.css",
|
|
961
976
|
"useCase": "understated, motion-aware inline text link — the canonical style for a link in body copy or prose; prefer it over a hand-rolled underline or `Button variant=\"link\"` (which is a control, not running text).",
|
|
962
977
|
"description": "Inline text link. An understated, permanent underline that darkens from\nmuted to the text colour on hover — no layout shift, no appearing/vanishing\nunderline. The colour fade rides the MOTION axis (--era-duration/-ease), so\nit snaps at data-motion=\"instant\", eases at \"normal\", and sweeps longer at\n\"extra\" — matching every other era transition. Font-agnostic: it styles\ndecoration + colour only, so it reads correctly in mono, sans, or serif, and\nthe 0.2em offset scales with the type size. Keyboard focus mirrors hover so\nthe affordance is reachable without a pointer.",
|
|
963
|
-
"css": "@utility era-link {\n\t/* The text is bright at rest and never changes — the link reads as a link\n\t * before you touch it. Only the UNDERLINE reacts: a faint hint at rest —\n\t * muted knocked back to 30% so it barely whispers — that resolves to the full\n\t * text colour on hover. */\n\tcolor: var(--color-
|
|
978
|
+
"css": "@utility era-link {\n\t/* The text is bright at rest and never changes — the link reads as a link\n\t * before you touch it. Only the UNDERLINE reacts: a faint hint at rest —\n\t * muted knocked back to 30% so it barely whispers — that resolves to the full\n\t * text colour on hover. */\n\tcolor: var(--color-link);\n\ttext-decoration-line: underline;\n\ttext-decoration-color: color-mix(in oklch, var(--color-muted) 30%, transparent);\n\ttext-underline-offset: 0.2em;\n\ttransition: text-decoration-color var(--era-duration) var(--era-ease);\n\t&:hover,\n\t&:focus-visible {\n\t\ttext-decoration-color: var(--color-fg);\n\t}\n}"
|
|
964
979
|
},
|
|
965
980
|
{
|
|
966
981
|
"name": "scrollbar-none",
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Notes
|
|
2
|
+
|
|
3
|
+
A complete notes app — rich-text editor, slash commands, local persistence.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
Apps ship on their own subpath and are **not** re-exported from `@sig-nine/era-ui`.
|
|
8
|
+
Notes carries TipTap, and a consumer who never imports an app should never pay
|
|
9
|
+
for it.
|
|
10
|
+
|
|
11
|
+
```svelte
|
|
12
|
+
<script>
|
|
13
|
+
import { Notes } from '@sig-nine/era-ui/apps';
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<Notes />
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
That is the whole integration: a sidebar with filter, pin, and delete; a TipTap
|
|
20
|
+
document with a `/` command menu and a selection toolbar; and persistence to
|
|
21
|
+
`localStorage` under `era-ui:notes`.
|
|
22
|
+
|
|
23
|
+
## Peer dependencies
|
|
24
|
+
|
|
25
|
+
Install alongside the library (they are not bundled):
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
@tiptap/core @tiptap/pm @tiptap/starter-kit @tiptap/suggestion
|
|
29
|
+
@tiptap/extension-code-block-lowlight @tiptap/extension-details
|
|
30
|
+
@tiptap/extension-highlight @tiptap/extension-image
|
|
31
|
+
@tiptap/extension-placeholder @tiptap/extension-table
|
|
32
|
+
@tiptap/extension-task-item @tiptap/extension-task-list
|
|
33
|
+
@tiptap/extension-typography @tiptap/extension-unique-id
|
|
34
|
+
lowlight tiptap-markdown
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Props
|
|
38
|
+
|
|
39
|
+
| Prop | Type | Default | Notes |
|
|
40
|
+
| ------------ | ---------------- | ------------------ | ----------------------------------------------------------------- |
|
|
41
|
+
| `store` | `NotesStore` | created internally | Bring your own; when set, the host owns its lifecycle. |
|
|
42
|
+
| `adapter` | `NotesAdapter` | `localStorage` | Persistence for the internally-created store. |
|
|
43
|
+
| `storageKey` | `string` | `era-ui:notes` | Key for the default adapter. |
|
|
44
|
+
| `noteId` | `string \| null` | `null` | `$bindable` — the open note, for deep-linking or session restore. |
|
|
45
|
+
| `seed` | `NoteInit[]` | — | Created only when storage comes back empty (first-run sample). |
|
|
46
|
+
|
|
47
|
+
## Persistence
|
|
48
|
+
|
|
49
|
+
Persistence is one small interface, so server-backed hosting is a drop-in swap —
|
|
50
|
+
`load`/`save` may be sync or async:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { Notes, NotesStore } from '@sig-nine/era-ui/apps';
|
|
54
|
+
|
|
55
|
+
const store = new NotesStore({
|
|
56
|
+
adapter: {
|
|
57
|
+
load: () => fetch('/api/notes').then((r) => r.json()),
|
|
58
|
+
save: (notes) => fetch('/api/notes', { method: 'PUT', body: JSON.stringify(notes) })
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`NotesStore` is the reactive source of truth (`notes`, `ordered`, `loading`,
|
|
64
|
+
`status`, `lastError`) with `create` / `update` / `remove` / `togglePin` /
|
|
65
|
+
`setIcon` / `search` / `toMarkdown` / `flush`. Writes are debounced and
|
|
66
|
+
coalesced, so a burst of keystrokes costs one `save`.
|
|
67
|
+
|
|
68
|
+
## The heading index
|
|
69
|
+
|
|
70
|
+
Every document is also a tree. `buildGlobalTree()` walks heading structure,
|
|
71
|
+
`treeToText()` renders it as a table of contents a model can read, and
|
|
72
|
+
`extractSection(title, doc, headingId)` returns just the requested slice as
|
|
73
|
+
structure-preserving markdown — reasoning-based retrieval rather than
|
|
74
|
+
embeddings. Heading ids are stable (`@tiptap/extension-unique-id`), so a section
|
|
75
|
+
address survives edits above it.
|
|
76
|
+
|
|
77
|
+
## Notes
|
|
78
|
+
|
|
79
|
+
- Keyboard: `/` opens the command menu, `Mod-K` links a selection, `Mod-S`
|
|
80
|
+
flushes pending writes immediately.
|
|
81
|
+
- The slash menu and selection toolbar are real Svelte components mounted into
|
|
82
|
+
the document root, so they follow every axis — density tiers, surface chrome,
|
|
83
|
+
corners, motion, font — instead of carrying their own hardcoded styling.
|
|
84
|
+
- `@tiptap/extension-mathematics` is deliberately absent: it needs KaTeX's
|
|
85
|
+
stylesheet and fonts to render. Spread `noteExtensions` and add it yourself if
|
|
86
|
+
you want math.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"file": "index.css",
|
|
19
19
|
"useCase": "understated, motion-aware inline text link — the canonical style for a link in body copy or prose; prefer it over a hand-rolled underline or `Button variant=\"link\"` (which is a control, not running text).",
|
|
20
20
|
"description": "Inline text link. An understated, permanent underline that darkens from\nmuted to the text colour on hover — no layout shift, no appearing/vanishing\nunderline. The colour fade rides the MOTION axis (--era-duration/-ease), so\nit snaps at data-motion=\"instant\", eases at \"normal\", and sweeps longer at\n\"extra\" — matching every other era transition. Font-agnostic: it styles\ndecoration + colour only, so it reads correctly in mono, sans, or serif, and\nthe 0.2em offset scales with the type size. Keyboard focus mirrors hover so\nthe affordance is reachable without a pointer.",
|
|
21
|
-
"css": "@utility era-link {\n\t/* The text is bright at rest and never changes — the link reads as a link\n\t * before you touch it. Only the UNDERLINE reacts: a faint hint at rest —\n\t * muted knocked back to 30% so it barely whispers — that resolves to the full\n\t * text colour on hover. */\n\tcolor: var(--color-
|
|
21
|
+
"css": "@utility era-link {\n\t/* The text is bright at rest and never changes — the link reads as a link\n\t * before you touch it. Only the UNDERLINE reacts: a faint hint at rest —\n\t * muted knocked back to 30% so it barely whispers — that resolves to the full\n\t * text colour on hover. */\n\tcolor: var(--color-link);\n\ttext-decoration-line: underline;\n\ttext-decoration-color: color-mix(in oklch, var(--color-muted) 30%, transparent);\n\ttext-underline-offset: 0.2em;\n\ttransition: text-decoration-color var(--era-duration) var(--era-ease);\n\t&:hover,\n\t&:focus-visible {\n\t\ttext-decoration-color: var(--color-fg);\n\t}\n}"
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"name": "scrollbar-none",
|
|
@@ -99,7 +99,7 @@ Declared in `index.css`.
|
|
|
99
99
|
* before you touch it. Only the UNDERLINE reacts: a faint hint at rest —
|
|
100
100
|
* muted knocked back to 30% so it barely whispers — that resolves to the full
|
|
101
101
|
* text colour on hover. */
|
|
102
|
-
color: var(--color-
|
|
102
|
+
color: var(--color-link);
|
|
103
103
|
text-decoration-line: underline;
|
|
104
104
|
text-decoration-color: color-mix(in oklch, var(--color-muted) 30%, transparent);
|
|
105
105
|
text-underline-offset: 0.2em;
|
package/dist/styles/index.css
CHANGED
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
* before you touch it. Only the UNDERLINE reacts: a faint hint at rest —
|
|
94
94
|
* muted knocked back to 30% so it barely whispers — that resolves to the full
|
|
95
95
|
* text colour on hover. */
|
|
96
|
-
color: var(--color-
|
|
96
|
+
color: var(--color-link);
|
|
97
97
|
text-decoration-line: underline;
|
|
98
98
|
text-decoration-color: color-mix(in oklch, var(--color-muted) 30%, transparent);
|
|
99
99
|
text-underline-offset: 0.2em;
|
|
@@ -283,6 +283,7 @@
|
|
|
283
283
|
--color-fg: var(--color-fg);
|
|
284
284
|
--color-bright: var(--color-bright);
|
|
285
285
|
--color-muted: var(--color-muted);
|
|
286
|
+
--color-link: var(--color-link);
|
|
286
287
|
--color-primary: var(--color-primary);
|
|
287
288
|
--color-primary-fg: var(--color-primary-fg);
|
|
288
289
|
--color-primary-hover: var(--color-primary-hover);
|
package/dist/styles/themes.css
CHANGED
|
@@ -51,27 +51,29 @@
|
|
|
51
51
|
--color-fg: var(--color-11);
|
|
52
52
|
--color-bright: var(--color-12);
|
|
53
53
|
--color-muted: var(--color-10);
|
|
54
|
+
/* Inline link ink. Declared once here and inherited by every theme —
|
|
55
|
+
* var(--color-bright) resolves in the element's own context, so a theme only
|
|
56
|
+
* names this if it wants links to differ from emphasis text (signalnine
|
|
57
|
+
* light does: yahoo.co.jp links are navy, not black). */
|
|
58
|
+
--color-link: var(--color-bright);
|
|
54
59
|
|
|
55
60
|
/* Accent tokens — override these to theme the library */
|
|
56
61
|
--color-primary: var(--color-fg);
|
|
57
62
|
--color-primary-fg: var(--color-1);
|
|
58
63
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
59
|
-
/* Destructive carries
|
|
60
|
-
* saturated enough that near-black out-contrasts white on it, and a black
|
|
61
|
-
* glyph on red reads harder-edged than a white one. Every theme's
|
|
62
|
-
* -fg here is that theme's own warning-fg, so the two bright accents
|
|
63
|
-
* behave identically.
|
|
64
|
+
/* Destructive carries LIGHT text — a white glyph on the red fill.
|
|
64
65
|
*
|
|
65
|
-
* The
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
|
|
74
|
-
--color-destructive
|
|
66
|
+
* The original oklch(0.675 0.3 30) sat outside sRGB and clipped to a flat
|
|
67
|
+
* #ff0000, which is what made it read glaring. This one is in gamut:
|
|
68
|
+
* #f14b43, softer and lighter than the clipped red it replaces.
|
|
69
|
+
*
|
|
70
|
+
* Worth knowing if this is retuned: at this lightness BLACK actually
|
|
71
|
+
* out-contrasts white on it (5.8 vs 3.6). White is the deliberate call,
|
|
72
|
+
* not the higher-contrast one, and 3.6:1 clears the 3:1 a non-text glyph
|
|
73
|
+
* needs but not the 4.5:1 body copy would. Pushing the red LIGHTER widens
|
|
74
|
+
* that gap; pushing it darker closes it. */
|
|
75
|
+
--color-destructive: oklch(0.6468 0.2039 27.2); /* #f14b43 */
|
|
76
|
+
--color-destructive-fg: oklch(0.96 0 0);
|
|
75
77
|
--color-success: oklch(0.65 0.17 145);
|
|
76
78
|
--color-success-fg: oklch(0.96 0 0);
|
|
77
79
|
--color-warning: oklch(0.8 0.16 85);
|
|
@@ -109,8 +111,8 @@
|
|
|
109
111
|
--color-primary: var(--color-fg);
|
|
110
112
|
--color-primary-fg: var(--color-1);
|
|
111
113
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
112
|
-
--color-destructive: oklch(0.
|
|
113
|
-
--color-destructive-fg: oklch(0.
|
|
114
|
+
--color-destructive: oklch(0.6468 0.2039 27.2); /* #f14b43 */
|
|
115
|
+
--color-destructive-fg: oklch(0.98 0 0);
|
|
114
116
|
--color-success: oklch(0.5 0.17 145);
|
|
115
117
|
--color-success-fg: oklch(0.98 0 0);
|
|
116
118
|
--color-warning: oklch(0.72 0.15 85);
|
|
@@ -145,8 +147,8 @@
|
|
|
145
147
|
--color-primary: var(--color-fg);
|
|
146
148
|
--color-primary-fg: var(--color-1);
|
|
147
149
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
148
|
-
--color-destructive: oklch(0.
|
|
149
|
-
--color-destructive-fg: oklch(0.
|
|
150
|
+
--color-destructive: oklch(0.6468 0.2039 27.2); /* #f14b43 */
|
|
151
|
+
--color-destructive-fg: oklch(0.98 0 0);
|
|
150
152
|
--color-success: oklch(0.5 0.17 145);
|
|
151
153
|
--color-success-fg: oklch(0.98 0 0);
|
|
152
154
|
--color-warning: oklch(0.72 0.15 85);
|
|
@@ -190,7 +192,7 @@
|
|
|
190
192
|
--color-primary-fg: oklch(0.19 0.014 50);
|
|
191
193
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 78%, var(--color-success));
|
|
192
194
|
--color-destructive: oklch(0.61 0.17 30);
|
|
193
|
-
--color-destructive-fg: oklch(0.
|
|
195
|
+
--color-destructive-fg: oklch(0.96 0.016 90);
|
|
194
196
|
--color-success: oklch(0.7 0.125 184);
|
|
195
197
|
--color-success-fg: oklch(0.19 0.014 50);
|
|
196
198
|
--color-warning: oklch(0.78 0.14 82);
|
|
@@ -233,7 +235,7 @@
|
|
|
233
235
|
--color-primary-fg: oklch(0.96 0.014 78);
|
|
234
236
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
235
237
|
--color-destructive: oklch(0.575 0.22 28);
|
|
236
|
-
--color-destructive-fg: oklch(0.
|
|
238
|
+
--color-destructive-fg: oklch(0.98 0.012 78);
|
|
237
239
|
--color-success: oklch(0.5 0.13 158);
|
|
238
240
|
--color-success-fg: oklch(0.98 0.012 78);
|
|
239
241
|
--color-warning: oklch(0.7 0.13 80);
|
|
@@ -268,7 +270,7 @@
|
|
|
268
270
|
--color-primary-fg: oklch(0.96 0.014 78);
|
|
269
271
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
270
272
|
--color-destructive: oklch(0.575 0.22 28);
|
|
271
|
-
--color-destructive-fg: oklch(0.
|
|
273
|
+
--color-destructive-fg: oklch(0.98 0.012 78);
|
|
272
274
|
--color-success: oklch(0.5 0.13 158);
|
|
273
275
|
--color-success-fg: oklch(0.98 0.012 78);
|
|
274
276
|
--color-warning: oklch(0.7 0.13 80);
|
|
@@ -306,7 +308,7 @@
|
|
|
306
308
|
--color-primary-fg: var(--color-1);
|
|
307
309
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 80%, var(--color-success));
|
|
308
310
|
--color-destructive: oklch(0.615 0.15 33);
|
|
309
|
-
--color-destructive-fg: var(--color-
|
|
311
|
+
--color-destructive-fg: var(--color-12);
|
|
310
312
|
--color-success: oklch(0.71 0.09 164);
|
|
311
313
|
--color-success-fg: var(--color-1);
|
|
312
314
|
--color-warning: oklch(0.78 0.1 85);
|
|
@@ -344,7 +346,7 @@
|
|
|
344
346
|
--color-primary-fg: oklch(0.97 0.008 80);
|
|
345
347
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
346
348
|
--color-destructive: oklch(0.59 0.18 32);
|
|
347
|
-
--color-destructive-fg: oklch(0.
|
|
349
|
+
--color-destructive-fg: oklch(0.98 0.008 80);
|
|
348
350
|
--color-success: oklch(0.54 0.11 164);
|
|
349
351
|
--color-success-fg: oklch(0.98 0.008 80);
|
|
350
352
|
--color-warning: oklch(0.68 0.1 82);
|
|
@@ -379,7 +381,7 @@
|
|
|
379
381
|
--color-primary-fg: oklch(0.97 0.008 80);
|
|
380
382
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
381
383
|
--color-destructive: oklch(0.59 0.18 32);
|
|
382
|
-
--color-destructive-fg: oklch(0.
|
|
384
|
+
--color-destructive-fg: oklch(0.98 0.008 80);
|
|
383
385
|
--color-success: oklch(0.54 0.11 164);
|
|
384
386
|
--color-success-fg: oklch(0.98 0.008 80);
|
|
385
387
|
--color-warning: oklch(0.68 0.1 82);
|
|
@@ -433,7 +435,7 @@
|
|
|
433
435
|
--color-primary-fg: oklch(0.97 0.022 98);
|
|
434
436
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 80%, var(--color-destructive));
|
|
435
437
|
--color-destructive: oklch(0.6 0.244 25);
|
|
436
|
-
--color-destructive-fg: oklch(0.
|
|
438
|
+
--color-destructive-fg: oklch(0.97 0.022 98);
|
|
437
439
|
--color-success: oklch(0.62 0.13 158);
|
|
438
440
|
--color-success-fg: oklch(0.2 0.006 265);
|
|
439
441
|
--color-warning: oklch(0.8 0.15 88);
|
|
@@ -482,31 +484,39 @@
|
|
|
482
484
|
:root[data-theme='signalnine']:not(.dark) {
|
|
483
485
|
color-scheme: light;
|
|
484
486
|
|
|
485
|
-
--color-1: oklch(1 0 0); /* #ffffff */
|
|
486
|
-
--color-2: oklch(0.
|
|
487
|
-
--color-3: oklch(0.
|
|
488
|
-
--color-4: oklch(0.
|
|
489
|
-
--color-5: oklch(0.
|
|
487
|
+
--color-1: oklch(1 0 0); /* #ffffff page */
|
|
488
|
+
--color-2: oklch(0.9439 0.0251 271.14); /* #e6ecfe card fill */
|
|
489
|
+
--color-3: oklch(0.887 0.0368 265.13); /* #cedaf3 border */
|
|
490
|
+
--color-4: oklch(0.844 0.0447 265.6); /* #bcccea */
|
|
491
|
+
--color-5: oklch(0.7667 0.0612 261.83); /* #9eb4db the measured dominant rule */
|
|
490
492
|
--color-6: oklch(0.7 0.074 263);
|
|
491
|
-
--color-7: oklch(0.631 0.0915 260.
|
|
492
|
-
--color-8: oklch(0.
|
|
493
|
-
--color-9: oklch(0.
|
|
494
|
-
--color-10: oklch(0.
|
|
493
|
+
--color-7: oklch(0.631 0.0915 260.33); /* #698ac1 muted text */
|
|
494
|
+
--color-8: oklch(0.57 0.12 262);
|
|
495
|
+
--color-9: oklch(0.51 0 0); /* #666666 */
|
|
496
|
+
--color-10: oklch(0.3855 0.1534 266.07); /* #1d3994 link text */
|
|
495
497
|
--color-11: oklch(0.16 0.008 266);
|
|
496
|
-
--color-12: oklch(0 0 0); /* #000000 */
|
|
498
|
+
--color-12: oklch(0 0 0); /* #000000 body text */
|
|
497
499
|
|
|
500
|
+
/* Repointed off the conventional steps on purpose — these name the roles
|
|
501
|
+
* yahoo.co.jp actually paints, so each points at the step holding its
|
|
502
|
+
* measured colour rather than the step other themes happen to use.
|
|
503
|
+
* (border is back on the conventional step 5, which now holds the
|
|
504
|
+
* measured dominant rule #9eb4db.) */
|
|
498
505
|
--color-border: var(--color-5);
|
|
499
506
|
--color-surface: var(--color-2);
|
|
500
|
-
--color-hover: oklch(0.
|
|
507
|
+
--color-hover: oklch(0.97 0.014 268.5); /* #f1f5ff */
|
|
501
508
|
--color-fg: var(--color-11);
|
|
502
509
|
--color-bright: var(--color-12);
|
|
503
|
-
--color-muted: var(--color-
|
|
510
|
+
--color-muted: var(--color-7);
|
|
511
|
+
--color-link: var(--color-10);
|
|
512
|
+
/* Cards read --era-surface-bg, which the surface contract defines as
|
|
513
|
+
* --color-2 — so the card fill follows from the scale, no override. */
|
|
504
514
|
|
|
505
515
|
--color-primary: oklch(0.596 0.22 265.8); /* #4070ff */
|
|
506
516
|
--color-primary-fg: oklch(1 0 0);
|
|
507
517
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
508
518
|
--color-destructive: oklch(0.59 0.242 27.7); /* #eb0013 */
|
|
509
|
-
--color-destructive-fg: oklch(0
|
|
519
|
+
--color-destructive-fg: oklch(1 0 0);
|
|
510
520
|
--color-success: oklch(0.58 0.15 152);
|
|
511
521
|
--color-success-fg: oklch(1 0 0);
|
|
512
522
|
--color-warning: oklch(0.76 0.145 80);
|
|
@@ -517,31 +527,39 @@
|
|
|
517
527
|
[data-theme='signalnine'].light {
|
|
518
528
|
color-scheme: light;
|
|
519
529
|
|
|
520
|
-
--color-1: oklch(1 0 0); /* #ffffff */
|
|
521
|
-
--color-2: oklch(0.
|
|
522
|
-
--color-3: oklch(0.
|
|
523
|
-
--color-4: oklch(0.
|
|
524
|
-
--color-5: oklch(0.
|
|
530
|
+
--color-1: oklch(1 0 0); /* #ffffff page */
|
|
531
|
+
--color-2: oklch(0.9439 0.0251 271.14); /* #e6ecfe card fill */
|
|
532
|
+
--color-3: oklch(0.887 0.0368 265.13); /* #cedaf3 border */
|
|
533
|
+
--color-4: oklch(0.844 0.0447 265.6); /* #bcccea */
|
|
534
|
+
--color-5: oklch(0.7667 0.0612 261.83); /* #9eb4db the measured dominant rule */
|
|
525
535
|
--color-6: oklch(0.7 0.074 263);
|
|
526
|
-
--color-7: oklch(0.631 0.0915 260.
|
|
527
|
-
--color-8: oklch(0.
|
|
528
|
-
--color-9: oklch(0.
|
|
529
|
-
--color-10: oklch(0.
|
|
536
|
+
--color-7: oklch(0.631 0.0915 260.33); /* #698ac1 muted text */
|
|
537
|
+
--color-8: oklch(0.57 0.12 262);
|
|
538
|
+
--color-9: oklch(0.51 0 0); /* #666666 */
|
|
539
|
+
--color-10: oklch(0.3855 0.1534 266.07); /* #1d3994 link text */
|
|
530
540
|
--color-11: oklch(0.16 0.008 266);
|
|
531
|
-
--color-12: oklch(0 0 0); /* #000000 */
|
|
541
|
+
--color-12: oklch(0 0 0); /* #000000 body text */
|
|
532
542
|
|
|
543
|
+
/* Repointed off the conventional steps on purpose — these name the roles
|
|
544
|
+
* yahoo.co.jp actually paints, so each points at the step holding its
|
|
545
|
+
* measured colour rather than the step other themes happen to use.
|
|
546
|
+
* (border is back on the conventional step 5, which now holds the
|
|
547
|
+
* measured dominant rule #9eb4db.) */
|
|
533
548
|
--color-border: var(--color-5);
|
|
534
549
|
--color-surface: var(--color-2);
|
|
535
|
-
--color-hover: oklch(0.
|
|
550
|
+
--color-hover: oklch(0.97 0.014 268.5); /* #f1f5ff */
|
|
536
551
|
--color-fg: var(--color-11);
|
|
537
552
|
--color-bright: var(--color-12);
|
|
538
|
-
--color-muted: var(--color-
|
|
553
|
+
--color-muted: var(--color-7);
|
|
554
|
+
--color-link: var(--color-10);
|
|
555
|
+
/* Cards read --era-surface-bg, which the surface contract defines as
|
|
556
|
+
* --color-2 — so the card fill follows from the scale, no override. */
|
|
539
557
|
|
|
540
558
|
--color-primary: oklch(0.596 0.22 265.8); /* #4070ff */
|
|
541
559
|
--color-primary-fg: oklch(1 0 0);
|
|
542
560
|
--color-primary-hover: color-mix(in oklch, var(--color-primary) 85%, black);
|
|
543
561
|
--color-destructive: oklch(0.59 0.242 27.7); /* #eb0013 */
|
|
544
|
-
--color-destructive-fg: oklch(0
|
|
562
|
+
--color-destructive-fg: oklch(1 0 0);
|
|
545
563
|
--color-success: oklch(0.58 0.15 152);
|
|
546
564
|
--color-success-fg: oklch(1 0 0);
|
|
547
565
|
--color-warning: oklch(0.76 0.145 80);
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
export declare const badgeVariants: import("tailwind-variants").TVReturnType<{
|
|
2
2
|
tone: {
|
|
3
|
-
default:
|
|
4
|
-
accent:
|
|
5
|
-
destructive:
|
|
6
|
-
success:
|
|
7
|
-
warning:
|
|
3
|
+
default: "bg-hover text-fg";
|
|
4
|
+
accent: "bg-primary text-primary-fg";
|
|
5
|
+
destructive: "bg-destructive text-destructive-fg";
|
|
6
|
+
success: "bg-success text-success-fg";
|
|
7
|
+
warning: "bg-warning text-warning-fg";
|
|
8
8
|
};
|
|
9
9
|
}, undefined, "inline-flex h-(--era-h-xxs) min-w-(--era-h-xxs) items-center justify-center gap-(--era-gap) rounded-(--era-rd-xxs) px-(--era-pill-xxs) font-mono text-body leading-none has-[svg]:gap-(--era-inset-xxs) era-text-trim", {
|
|
10
10
|
tone: {
|
|
11
|
-
default:
|
|
12
|
-
accent:
|
|
13
|
-
destructive:
|
|
14
|
-
success:
|
|
15
|
-
warning:
|
|
11
|
+
default: "bg-hover text-fg";
|
|
12
|
+
accent: "bg-primary text-primary-fg";
|
|
13
|
+
destructive: "bg-destructive text-destructive-fg";
|
|
14
|
+
success: "bg-success text-success-fg";
|
|
15
|
+
warning: "bg-warning text-warning-fg";
|
|
16
16
|
};
|
|
17
|
-
}, undefined, import("tailwind-variants").
|
|
17
|
+
}, undefined, import("tailwind-variants").TVReturnTypeLike<{
|
|
18
18
|
tone: {
|
|
19
|
-
default:
|
|
20
|
-
accent:
|
|
21
|
-
destructive:
|
|
22
|
-
success:
|
|
23
|
-
warning:
|
|
19
|
+
default: "bg-hover text-fg";
|
|
20
|
+
accent: "bg-primary text-primary-fg";
|
|
21
|
+
destructive: "bg-destructive text-destructive-fg";
|
|
22
|
+
success: "bg-success text-success-fg";
|
|
23
|
+
warning: "bg-warning text-warning-fg";
|
|
24
24
|
};
|
|
25
|
-
}, undefined
|
|
25
|
+
}, undefined>>;
|
|
26
26
|
import type { Snippet } from 'svelte';
|
|
27
27
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
28
28
|
type $$ComponentProps = HTMLAttributes<HTMLSpanElement> & {
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
export declare const barVariants: import("tailwind-variants").TVReturnType<{
|
|
2
2
|
size: {
|
|
3
|
-
sm:
|
|
4
|
-
md:
|
|
5
|
-
lg:
|
|
3
|
+
sm: "h-(--era-h-sm) rounded-(--era-rd-sm)";
|
|
4
|
+
md: "h-(--era-h-md) rounded-(--era-rd-md)";
|
|
5
|
+
lg: "h-(--era-h-lg) rounded-(--era-rd-lg)";
|
|
6
6
|
};
|
|
7
7
|
}, undefined, "flex items-center gap-(--era-xs-inset-sm) px-(--era-xs-inset-sm) era-text-trim", {
|
|
8
8
|
size: {
|
|
9
|
-
sm:
|
|
10
|
-
md:
|
|
11
|
-
lg:
|
|
9
|
+
sm: "h-(--era-h-sm) rounded-(--era-rd-sm)";
|
|
10
|
+
md: "h-(--era-h-md) rounded-(--era-rd-md)";
|
|
11
|
+
lg: "h-(--era-h-lg) rounded-(--era-rd-lg)";
|
|
12
12
|
};
|
|
13
|
-
}, undefined, import("tailwind-variants").
|
|
13
|
+
}, undefined, import("tailwind-variants").TVReturnTypeLike<{
|
|
14
14
|
size: {
|
|
15
|
-
sm:
|
|
16
|
-
md:
|
|
17
|
-
lg:
|
|
15
|
+
sm: "h-(--era-h-sm) rounded-(--era-rd-sm)";
|
|
16
|
+
md: "h-(--era-h-md) rounded-(--era-rd-md)";
|
|
17
|
+
lg: "h-(--era-h-lg) rounded-(--era-rd-lg)";
|
|
18
18
|
};
|
|
19
|
-
}, undefined
|
|
19
|
+
}, undefined>>;
|
|
20
20
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
21
21
|
import type { Snippet } from 'svelte';
|
|
22
22
|
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|