@signal9/era-ui 3.10.0 → 3.12.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.
Files changed (52) hide show
  1. package/dist/apps/index.d.ts +19 -0
  2. package/dist/apps/index.js +19 -0
  3. package/dist/apps/notes/editor/bubble-menu.svelte.d.ts +11 -0
  4. package/dist/apps/notes/editor/bubble-menu.svelte.js +106 -0
  5. package/dist/apps/notes/editor/bubble-toolbar.svelte +42 -0
  6. package/dist/apps/notes/editor/bubble-toolbar.svelte.d.ts +22 -0
  7. package/dist/apps/notes/editor/extensions.d.ts +18 -0
  8. package/dist/apps/notes/editor/extensions.js +88 -0
  9. package/dist/apps/notes/editor/floating.d.ts +21 -0
  10. package/dist/apps/notes/editor/floating.js +44 -0
  11. package/dist/apps/notes/editor/link.d.ts +9 -0
  12. package/dist/apps/notes/editor/link.js +22 -0
  13. package/dist/apps/notes/editor/list-cleanup-rule.d.ts +14 -0
  14. package/dist/apps/notes/editor/list-cleanup-rule.js +47 -0
  15. package/dist/apps/notes/editor/slash-command.svelte.d.ts +22 -0
  16. package/dist/apps/notes/editor/slash-command.svelte.js +215 -0
  17. package/dist/apps/notes/editor/slash-menu.svelte +63 -0
  18. package/dist/apps/notes/editor/slash-menu.svelte.d.ts +23 -0
  19. package/dist/apps/notes/index.d.ts +11 -0
  20. package/dist/apps/notes/index.js +13 -0
  21. package/dist/apps/notes/markdown.d.ts +12 -0
  22. package/dist/apps/notes/markdown.js +165 -0
  23. package/dist/apps/notes/note-editor.svelte +456 -0
  24. package/dist/apps/notes/note-editor.svelte.d.ts +35 -0
  25. package/dist/apps/notes/notes-store.svelte.d.ts +64 -0
  26. package/dist/apps/notes/notes-store.svelte.js +234 -0
  27. package/dist/apps/notes/notes.svelte +377 -0
  28. package/dist/apps/notes/notes.svelte.d.ts +22 -0
  29. package/dist/apps/notes/tree.d.ts +70 -0
  30. package/dist/apps/notes/tree.js +185 -0
  31. package/dist/apps/notes/types.d.ts +49 -0
  32. package/dist/apps/notes/types.js +11 -0
  33. package/dist/docs/notes.md +82 -0
  34. package/dist/era-ui.css +1 -1
  35. package/dist/generated-docs/llms-full.txt +91 -0
  36. package/dist/generated-docs/llms.txt +1 -1
  37. package/dist/generated-docs/manifest.json +15 -0
  38. package/dist/generated-docs/notes.md +86 -0
  39. package/dist/os/window.svelte +6 -1
  40. package/dist/os/wm.svelte.d.ts +8 -1
  41. package/dist/os/wm.svelte.js +2 -1
  42. package/dist/ui/badge/badge.svelte.d.ts +17 -17
  43. package/dist/ui/bar/bar.svelte.d.ts +11 -11
  44. package/dist/ui/button/variants.d.ts +44 -44
  45. package/dist/ui/card/card.svelte.d.ts +20 -20
  46. package/dist/ui/chip/chip.svelte.d.ts +14 -14
  47. package/dist/ui/pane/pane-root.svelte.d.ts +1 -1
  48. package/dist/ui/pane/pane.svelte.d.ts +1 -1
  49. package/dist/ui/sheet/sheet-content.svelte.d.ts +14 -14
  50. package/dist/ui/skeleton/skeleton.svelte.d.ts +11 -11
  51. package/dist/utils/index.js +11 -0
  52. package/package.json +31 -5
@@ -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",
@@ -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.
@@ -84,7 +84,12 @@
84
84
  drags the primary button and suppresses the trailing click after a real
85
85
  drag, so a clean click still closes, and right/middle arming is a
86
86
  different button entirely. -->
87
- <div class="ml-auto shrink-0">
87
+ <!-- Window actions sit LEFT of the close button, on the same --era-gap
88
+ rhythm as the rest of the handle. Like the close button they carry no
89
+ data-pane-control, so a press-and-hold anywhere on the bar still drags
90
+ the window and only a clean click activates them. -->
91
+ <div class="ml-auto flex shrink-0 items-center gap-(--era-gap)">
92
+ {@render win.actions?.()}
88
93
  <!-- The macOS traffic lights, one button: red = close at rest, and the
89
94
  held preview recolours to the action it will commit — yellow for
90
95
  minimize, green for maximize — so the tone and glyph agree on what
@@ -1,4 +1,4 @@
1
- import { type Component } from 'svelte';
1
+ import { type Component, type Snippet } from 'svelte';
2
2
  import type { IconProps } from '@lucide/svelte';
3
3
  /** A point on the desktop plane. */
4
4
  export interface Point {
@@ -57,6 +57,12 @@ export interface AppDefinition {
57
57
  /** Extra classes for the window body (Pane.Content) — e.g. `p-(--era-gap)`
58
58
  * for a body of controls, or `p-0` for a full-bleed app. */
59
59
  bodyClass?: string;
60
+ /** Extra title-bar controls, rendered immediately LEFT of the close button.
61
+ * For per-window affordances that belong on the chrome rather than in the
62
+ * body — a help/usage launcher, a pin, a view toggle. Assignable on the
63
+ * live AppWindow too, so a host can swap it as the window's content
64
+ * changes. */
65
+ actions?: Snippet;
60
66
  }
61
67
  /** A live window instance in the registry. */
62
68
  export interface AppWindow {
@@ -79,6 +85,7 @@ export interface AppWindow {
79
85
  resizable: boolean;
80
86
  minimizable: boolean;
81
87
  bodyClass?: string;
88
+ actions?: Snippet;
82
89
  }
83
90
  /** A named virtual desktop. Every window belongs to exactly one; only the
84
91
  * active workspace's windows are shown, the rest keep their geometry and
@@ -105,7 +105,8 @@ export class WindowManager {
105
105
  component: app.component,
106
106
  resizable: overrides?.resizable ?? app.resizable ?? true,
107
107
  minimizable: app.minimizable ?? true,
108
- bodyClass: app.bodyClass
108
+ bodyClass: app.bodyClass,
109
+ actions: app.actions
109
110
  };
110
111
  this.windows.push(win);
111
112
  return id;
@@ -1,28 +1,28 @@
1
1
  export declare const badgeVariants: import("tailwind-variants").TVReturnType<{
2
2
  tone: {
3
- default: string;
4
- accent: string;
5
- destructive: string;
6
- success: string;
7
- warning: string;
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: string;
12
- accent: string;
13
- destructive: string;
14
- success: string;
15
- warning: string;
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").TVReturnType<{
17
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
18
18
  tone: {
19
- default: string;
20
- accent: string;
21
- destructive: string;
22
- success: string;
23
- warning: string;
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, "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", unknown, unknown, 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: string;
4
- md: string;
5
- lg: string;
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: string;
10
- md: string;
11
- lg: string;
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").TVReturnType<{
13
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
14
14
  size: {
15
- sm: string;
16
- md: string;
17
- lg: string;
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, "flex items-center gap-(--era-xs-inset-sm) px-(--era-xs-inset-sm) era-text-trim", unknown, unknown, undefined>>;
19
+ }, undefined>>;
20
20
  import type { HTMLAttributes } from 'svelte/elements';
21
21
  import type { Snippet } from 'svelte';
22
22
  type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
@@ -1,76 +1,76 @@
1
1
  export declare const buttonVariants: import("tailwind-variants").TVReturnType<{
2
2
  variant: {
3
- filled: string;
4
- link: string;
3
+ filled: "flex justify-center shadow-(--era-shadow) hover:shadow-(--era-highlight-shadow) active:shadow-(--era-shadow-pressed) [&:active>*]:translate-x-(--era-press-sink-x) [&:active>*]:translate-y-(--era-press-sink-y)";
4
+ link: "inline-flex underline-offset-2 hover:underline";
5
5
  };
6
6
  tone: {
7
- default: string;
8
- accent: string;
9
- destructive: string;
10
- success: string;
11
- warning: string;
7
+ default: "";
8
+ accent: "";
9
+ destructive: "";
10
+ success: "";
11
+ warning: "";
12
12
  };
13
13
  size: {
14
- default: string;
15
- sm: string;
16
- xxs: string;
17
- xs: string;
18
- icon: string;
14
+ default: "";
15
+ sm: "";
16
+ xxs: "";
17
+ xs: "";
18
+ icon: "";
19
19
  };
20
20
  icon: {
21
- true: string;
21
+ true: "";
22
22
  };
23
23
  active: {
24
- true: string;
24
+ true: "";
25
25
  };
26
26
  }, undefined, "items-center gap-(--era-gap) text-body era-interactive era-text-trim", {
27
27
  variant: {
28
- filled: string;
29
- link: string;
28
+ filled: "flex justify-center shadow-(--era-shadow) hover:shadow-(--era-highlight-shadow) active:shadow-(--era-shadow-pressed) [&:active>*]:translate-x-(--era-press-sink-x) [&:active>*]:translate-y-(--era-press-sink-y)";
29
+ link: "inline-flex underline-offset-2 hover:underline";
30
30
  };
31
31
  tone: {
32
- default: string;
33
- accent: string;
34
- destructive: string;
35
- success: string;
36
- warning: string;
32
+ default: "";
33
+ accent: "";
34
+ destructive: "";
35
+ success: "";
36
+ warning: "";
37
37
  };
38
38
  size: {
39
- default: string;
40
- sm: string;
41
- xxs: string;
42
- xs: string;
43
- icon: string;
39
+ default: "";
40
+ sm: "";
41
+ xxs: "";
42
+ xs: "";
43
+ icon: "";
44
44
  };
45
45
  icon: {
46
- true: string;
46
+ true: "";
47
47
  };
48
48
  active: {
49
- true: string;
49
+ true: "";
50
50
  };
51
- }, undefined, import("tailwind-variants").TVReturnType<{
51
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
52
52
  variant: {
53
- filled: string;
54
- link: string;
53
+ filled: "flex justify-center shadow-(--era-shadow) hover:shadow-(--era-highlight-shadow) active:shadow-(--era-shadow-pressed) [&:active>*]:translate-x-(--era-press-sink-x) [&:active>*]:translate-y-(--era-press-sink-y)";
54
+ link: "inline-flex underline-offset-2 hover:underline";
55
55
  };
56
56
  tone: {
57
- default: string;
58
- accent: string;
59
- destructive: string;
60
- success: string;
61
- warning: string;
57
+ default: "";
58
+ accent: "";
59
+ destructive: "";
60
+ success: "";
61
+ warning: "";
62
62
  };
63
63
  size: {
64
- default: string;
65
- sm: string;
66
- xxs: string;
67
- xs: string;
68
- icon: string;
64
+ default: "";
65
+ sm: "";
66
+ xxs: "";
67
+ xs: "";
68
+ icon: "";
69
69
  };
70
70
  icon: {
71
- true: string;
71
+ true: "";
72
72
  };
73
73
  active: {
74
- true: string;
74
+ true: "";
75
75
  };
76
- }, undefined, "items-center gap-(--era-gap) text-body era-interactive era-text-trim", unknown, unknown, undefined>>;
76
+ }, undefined>>;
@@ -1,43 +1,43 @@
1
1
  export declare const cardVariants: import("tailwind-variants").TVReturnType<{
2
2
  tone: {
3
- elevated: string;
4
- surface: string;
5
- flat: string;
3
+ elevated: "bg-(--era-surface-bg-elevated) shadow-(--era-shadow)";
4
+ surface: "bg-(--era-surface-bg)";
5
+ flat: "";
6
6
  };
7
7
  sectioned: {
8
- true: string;
9
- false: string;
8
+ true: "p-0";
9
+ false: "px-(--era-pad-md) pt-(--era-gap) pb-(--era-pad-md)";
10
10
  };
11
11
  interactive: {
12
- true: string;
12
+ true: "cursor-pointer hover:bg-(--era-highlight) hover:shadow-(--era-highlight-shadow) focus-visible:bg-(--era-highlight) era-interactive aria-disabled:cursor-not-allowed aria-disabled:opacity-50";
13
13
  };
14
14
  }, undefined, "block w-full rounded-(--era-rd-lg) text-left text-fg", {
15
15
  tone: {
16
- elevated: string;
17
- surface: string;
18
- flat: string;
16
+ elevated: "bg-(--era-surface-bg-elevated) shadow-(--era-shadow)";
17
+ surface: "bg-(--era-surface-bg)";
18
+ flat: "";
19
19
  };
20
20
  sectioned: {
21
- true: string;
22
- false: string;
21
+ true: "p-0";
22
+ false: "px-(--era-pad-md) pt-(--era-gap) pb-(--era-pad-md)";
23
23
  };
24
24
  interactive: {
25
- true: string;
25
+ true: "cursor-pointer hover:bg-(--era-highlight) hover:shadow-(--era-highlight-shadow) focus-visible:bg-(--era-highlight) era-interactive aria-disabled:cursor-not-allowed aria-disabled:opacity-50";
26
26
  };
27
- }, undefined, import("tailwind-variants").TVReturnType<{
27
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
28
28
  tone: {
29
- elevated: string;
30
- surface: string;
31
- flat: string;
29
+ elevated: "bg-(--era-surface-bg-elevated) shadow-(--era-shadow)";
30
+ surface: "bg-(--era-surface-bg)";
31
+ flat: "";
32
32
  };
33
33
  sectioned: {
34
- true: string;
35
- false: string;
34
+ true: "p-0";
35
+ false: "px-(--era-pad-md) pt-(--era-gap) pb-(--era-pad-md)";
36
36
  };
37
37
  interactive: {
38
- true: string;
38
+ true: "cursor-pointer hover:bg-(--era-highlight) hover:shadow-(--era-highlight-shadow) focus-visible:bg-(--era-highlight) era-interactive aria-disabled:cursor-not-allowed aria-disabled:opacity-50";
39
39
  };
40
- }, undefined, "block w-full rounded-(--era-rd-lg) text-left text-fg", unknown, unknown, undefined>>;
40
+ }, undefined>>;
41
41
  import type { Snippet } from 'svelte';
42
42
  import type { HTMLAnchorAttributes, HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
43
43
  type CardElement = HTMLDivElement | HTMLAnchorElement | HTMLButtonElement;
@@ -1,31 +1,31 @@
1
1
  export declare const chipVariants: import("tailwind-variants").TVReturnType<{
2
2
  size: {
3
- sm: string;
4
- xxs: string;
3
+ sm: "h-(--era-h-sm) min-w-(--era-h-sm) rounded-(--era-rd-sm) pl-(--era-pill-sm)";
4
+ xxs: "h-(--era-h-xxs) min-w-(--era-h-xxs) rounded-(--era-rd-xxs) pl-(--era-pill-xxs)";
5
5
  };
6
6
  dismissible: {
7
- true: string;
8
- false: string;
7
+ true: "";
8
+ false: "";
9
9
  };
10
10
  }, undefined, "inline-flex items-center bg-hover font-mono text-body leading-none text-fg shadow-(--era-shadow) era-text-trim", {
11
11
  size: {
12
- sm: string;
13
- xxs: string;
12
+ sm: "h-(--era-h-sm) min-w-(--era-h-sm) rounded-(--era-rd-sm) pl-(--era-pill-sm)";
13
+ xxs: "h-(--era-h-xxs) min-w-(--era-h-xxs) rounded-(--era-rd-xxs) pl-(--era-pill-xxs)";
14
14
  };
15
15
  dismissible: {
16
- true: string;
17
- false: string;
16
+ true: "";
17
+ false: "";
18
18
  };
19
- }, undefined, import("tailwind-variants").TVReturnType<{
19
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
20
20
  size: {
21
- sm: string;
22
- xxs: string;
21
+ sm: "h-(--era-h-sm) min-w-(--era-h-sm) rounded-(--era-rd-sm) pl-(--era-pill-sm)";
22
+ xxs: "h-(--era-h-xxs) min-w-(--era-h-xxs) rounded-(--era-rd-xxs) pl-(--era-pill-xxs)";
23
23
  };
24
24
  dismissible: {
25
- true: string;
26
- false: string;
25
+ true: "";
26
+ false: "";
27
27
  };
28
- }, undefined, "inline-flex items-center bg-hover font-mono text-body leading-none text-fg shadow-(--era-shadow) era-text-trim", unknown, unknown, undefined>>;
28
+ }, undefined>>;
29
29
  import type { Snippet } from 'svelte';
30
30
  import type { HTMLAttributes } from 'svelte/elements';
31
31
  type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
@@ -29,6 +29,6 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
29
29
  onDragEnd?: (data: DragEventData) => void;
30
30
  children?: Snippet;
31
31
  };
32
- declare const PaneRoot: import("svelte").Component<$$ComponentProps, {}, "size" | "position" | "ref">;
32
+ declare const PaneRoot: import("svelte").Component<$$ComponentProps, {}, "position" | "size" | "ref">;
33
33
  type PaneRoot = ReturnType<typeof PaneRoot>;
34
34
  export default PaneRoot;
@@ -35,6 +35,6 @@ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
35
35
  header?: Snippet;
36
36
  children?: Snippet;
37
37
  };
38
- declare const Pane: Component<$$ComponentProps, {}, "size" | "position" | "ref">;
38
+ declare const Pane: Component<$$ComponentProps, {}, "position" | "size" | "ref">;
39
39
  type Pane = ReturnType<typeof Pane>;
40
40
  export default Pane;
@@ -1,26 +1,26 @@
1
1
  import { type PartProps } from '../../utils/index.js';
2
2
  export declare const sheetVariants: import("tailwind-variants").TVReturnType<{
3
3
  side: {
4
- top: string;
5
- bottom: string;
6
- left: string;
7
- right: string;
4
+ top: "inset-x-0 top-0 max-h-[85dvh] rounded-b-(--era-rd-lg)";
5
+ bottom: "inset-x-0 bottom-0 max-h-[85dvh] rounded-t-(--era-rd-lg)";
6
+ left: "inset-y-0 left-0 w-[min(20rem,85vw)] rounded-r-(--era-rd-lg)";
7
+ right: "inset-y-0 right-0 w-[min(20rem,85vw)] rounded-l-(--era-rd-lg)";
8
8
  };
9
9
  }, undefined, "fixed z-50 flex flex-col gap-(--era-gap) overflow-y-auto bg-(--era-surface-bg) p-(--era-pad-md) shadow-(--era-shadow-lg) glass-blur", {
10
10
  side: {
11
- top: string;
12
- bottom: string;
13
- left: string;
14
- right: string;
11
+ top: "inset-x-0 top-0 max-h-[85dvh] rounded-b-(--era-rd-lg)";
12
+ bottom: "inset-x-0 bottom-0 max-h-[85dvh] rounded-t-(--era-rd-lg)";
13
+ left: "inset-y-0 left-0 w-[min(20rem,85vw)] rounded-r-(--era-rd-lg)";
14
+ right: "inset-y-0 right-0 w-[min(20rem,85vw)] rounded-l-(--era-rd-lg)";
15
15
  };
16
- }, undefined, import("tailwind-variants").TVReturnType<{
16
+ }, undefined, import("tailwind-variants").TVReturnTypeLike<{
17
17
  side: {
18
- top: string;
19
- bottom: string;
20
- left: string;
21
- right: string;
18
+ top: "inset-x-0 top-0 max-h-[85dvh] rounded-b-(--era-rd-lg)";
19
+ bottom: "inset-x-0 bottom-0 max-h-[85dvh] rounded-t-(--era-rd-lg)";
20
+ left: "inset-y-0 left-0 w-[min(20rem,85vw)] rounded-r-(--era-rd-lg)";
21
+ right: "inset-y-0 right-0 w-[min(20rem,85vw)] rounded-l-(--era-rd-lg)";
22
22
  };
23
- }, undefined, "fixed z-50 flex flex-col gap-(--era-gap) overflow-y-auto bg-(--era-surface-bg) p-(--era-pad-md) shadow-(--era-shadow-lg) glass-blur", unknown, unknown, undefined>>;
23
+ }, undefined>>;
24
24
  import { Dialog } from 'bits-ui';
25
25
  type $$ComponentProps = PartProps<Dialog.ContentProps> & {
26
26
  /** Screen edge the sheet is anchored to. */