rune-lab 0.0.19 → 0.0.21

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 (88) hide show
  1. package/README.md +28 -6
  2. package/dist/actions/portal.js +6 -1
  3. package/dist/components/Icon.svelte +13 -2
  4. package/dist/components/RuneProvider.svelte +81 -0
  5. package/dist/components/RuneProvider.svelte.d.ts +9 -0
  6. package/dist/composables/usePersistence.d.ts +2 -0
  7. package/dist/composables/usePersistence.js +5 -0
  8. package/dist/composables/useRuneLab.d.ts +17 -0
  9. package/dist/composables/useRuneLab.js +19 -0
  10. package/dist/config.d.ts +4 -85
  11. package/dist/config.js +6 -32
  12. package/dist/context.d.ts +12 -0
  13. package/dist/context.js +13 -0
  14. package/dist/devtools/API_Monitor.svelte +5 -2
  15. package/dist/devtools/Toaster.svelte +14 -12
  16. package/dist/devtools/createConfigStore.svelte.d.ts +11 -1
  17. package/dist/devtools/createConfigStore.svelte.js +13 -11
  18. package/dist/features/command-palette/CommandPalette.svelte +12 -4
  19. package/dist/features/config/components/AppSettingSelector.svelte +85 -3
  20. package/dist/features/config/components/AppSettingSelector.svelte.d.ts +2 -0
  21. package/dist/features/config/components/CurrencySelector.svelte +27 -9
  22. package/dist/features/config/components/CurrencySelector.svelte.d.ts +3 -1
  23. package/dist/features/config/components/LanguageSelector.svelte +21 -6
  24. package/dist/features/config/components/LanguageSelector.svelte.d.ts +3 -1
  25. package/dist/features/config/components/ThemeSelector.svelte +23 -8
  26. package/dist/features/config/components/ThemeSelector.svelte.d.ts +3 -1
  27. package/dist/features/detail-panels/DashboardPanel.svelte +34 -17
  28. package/dist/features/detail-panels/ShortcutsPanel.svelte +185 -88
  29. package/dist/features/detail-panels/ShowcasePanel.svelte +20 -6
  30. package/dist/features/layout/smart/ConnectedNavigationPanel.svelte +30 -0
  31. package/dist/features/layout/smart/ConnectedNavigationPanel.svelte.d.ts +10 -0
  32. package/dist/features/layout/smart/ConnectedWorkspaceStrip.svelte +23 -0
  33. package/dist/features/layout/smart/ConnectedWorkspaceStrip.svelte.d.ts +9 -0
  34. package/dist/features/shortcuts/ShortcutPalette.svelte +14 -6
  35. package/dist/index.d.ts +14 -2
  36. package/dist/index.js +19 -8
  37. package/dist/layout/NavigationPanel.svelte +97 -121
  38. package/dist/layout/NavigationPanel.svelte.d.ts +5 -1
  39. package/dist/layout/WorkspaceLayout.svelte +109 -30
  40. package/dist/layout/WorkspaceLayout.svelte.d.ts +2 -2
  41. package/dist/layout/WorkspaceStrip.svelte +17 -12
  42. package/dist/layout/WorkspaceStrip.svelte.d.ts +3 -1
  43. package/dist/layout/index.d.ts +1 -1
  44. package/dist/layout/index.js +1 -1
  45. package/dist/paraglide/runtime.d.ts +43 -2
  46. package/dist/paraglide/runtime.js +143 -23
  47. package/dist/paraglide/server.js +37 -14
  48. package/dist/persistence/drivers.d.ts +10 -0
  49. package/dist/persistence/drivers.js +71 -0
  50. package/dist/persistence/types.d.ts +17 -0
  51. package/dist/persistence/types.js +2 -0
  52. package/dist/showcase/AppStateInspector.svelte +26 -11
  53. package/dist/showcase/Showcase.svelte +4 -1
  54. package/dist/state/api.svelte.d.ts +3 -3
  55. package/dist/state/api.svelte.js +9 -2
  56. package/dist/state/app.svelte.d.ts +3 -3
  57. package/dist/state/app.svelte.js +14 -4
  58. package/dist/state/commands.svelte.d.ts +21 -4
  59. package/dist/state/commands.svelte.js +22 -94
  60. package/dist/state/currency.svelte.d.ts +4 -1
  61. package/dist/state/currency.svelte.js +16 -8
  62. package/dist/state/index.d.ts +9 -9
  63. package/dist/state/index.js +10 -9
  64. package/dist/state/language.svelte.d.ts +4 -1
  65. package/dist/state/language.svelte.js +27 -8
  66. package/dist/state/layout.svelte.d.ts +10 -3
  67. package/dist/state/layout.svelte.js +56 -14
  68. package/dist/state/shortcuts.svelte.d.ts +56 -6
  69. package/dist/state/shortcuts.svelte.js +21 -69
  70. package/dist/state/theme.svelte.d.ts +4 -1
  71. package/dist/state/theme.svelte.js +16 -8
  72. package/dist/state/toast.svelte.d.ts +3 -3
  73. package/dist/state/toast.svelte.js +9 -2
  74. package/package.json +9 -9
  75. package/dist/features/command-palette/commands.svelte.d.ts +0 -8
  76. package/dist/features/command-palette/commands.svelte.js +0 -5
  77. package/dist/features/config/stores/api.svelte.d.ts +0 -13
  78. package/dist/features/config/stores/api.svelte.js +0 -5
  79. package/dist/features/config/stores/app.svelte.d.ts +0 -13
  80. package/dist/features/config/stores/app.svelte.js +0 -5
  81. package/dist/features/config/stores/currency.svelte.d.ts +0 -8
  82. package/dist/features/config/stores/currency.svelte.js +0 -5
  83. package/dist/features/config/stores/language.svelte.d.ts +0 -8
  84. package/dist/features/config/stores/language.svelte.js +0 -5
  85. package/dist/features/config/stores/theme.svelte.d.ts +0 -8
  86. package/dist/features/config/stores/theme.svelte.js +0 -5
  87. package/dist/features/config/stores/toast.svelte.d.ts +0 -9
  88. package/dist/features/config/stores/toast.svelte.js +0 -5
@@ -1,7 +1,9 @@
1
1
  <script lang="ts">
2
- import { shortcutStore } from "../../state/shortcuts.svelte";
2
+ import { getShortcutStore } from "../../state/shortcuts.svelte";
3
3
  import { Icon } from "../../index";
4
4
 
5
+ const shortcutStore = getShortcutStore();
6
+
5
7
  // Section 2: Conflict detector
6
8
  const conflicts = $derived.by(() => {
7
9
  const keyMap = new Map<string, string[]>();
@@ -29,108 +31,203 @@
29
31
  }
30
32
  </script>
31
33
 
32
- <div class="space-y-8 animate-in fade-in duration-500">
34
+ <div class="space-y-4 animate-in fade-in duration-500">
33
35
  <header>
34
36
  <h3 class="text-lg font-bold">Shortcut Registry</h3>
35
- <p class="text-xs opacity-50">Live conflict detection</p>
37
+ <p class="text-xs opacity-50">Live conflict detection and management</p>
36
38
  </header>
37
39
 
38
40
  <!-- Section 1: Stats -->
39
- <section class="stats stats-vertical shadow-sm border border-base-content/5 w-full bg-base-200/30">
40
- <div class="stat p-3">
41
- <div class="stat-title text-[10px] uppercase font-bold tracking-tighter">Total</div>
42
- <div class="stat-value text-xl">{shortcutStore.entries.length}</div>
43
- </div>
44
- <div class="stat p-3">
45
- <div class="stat-title text-[10px] uppercase font-bold tracking-tighter">Active</div>
46
- <div class="stat-value text-xl text-primary">{shortcutStore.active.length}</div>
41
+ <details
42
+ class="collapse collapse-arrow border border-base-content/10 bg-base-100/50 rounded-lg"
43
+ >
44
+ <summary
45
+ class="collapse-title text-sm font-medium flex items-center gap-2"
46
+ >
47
+ <Icon name="info" class="w-4 h-4 opacity-70" />
48
+
49
+ Registry Stats
50
+ <span class="badge badge-sm badge-neutral ml-auto"
51
+ >{shortcutStore.entries.length} total</span
52
+ >
53
+ </summary>
54
+ <div class="collapse-content">
55
+ <div
56
+ class="stats stats-vertical lg:stats-horizontal shadow-sm w-full bg-transparent"
57
+ >
58
+ <div class="stat p-4 border-none">
59
+ <div
60
+ class="stat-title text-[10px] uppercase font-bold tracking-tighter"
61
+ >
62
+ Total Entries
63
+ </div>
64
+ <div class="stat-value text-xl">
65
+ {shortcutStore.entries.length}
66
+ </div>
67
+ </div>
68
+ <div class="stat p-4 border-none">
69
+ <div
70
+ class="stat-title text-[10px] uppercase font-bold tracking-tighter"
71
+ >
72
+ Active
73
+ </div>
74
+ <div class="stat-value text-xl text-primary">
75
+ {shortcutStore.active.length}
76
+ </div>
77
+ </div>
78
+ </div>
47
79
  </div>
48
- </section>
80
+ </details>
49
81
 
50
82
  <!-- Section 2: Conflicts -->
51
- <section class="space-y-3">
52
- <h4 class="text-[10px] font-black uppercase tracking-widest opacity-40">
83
+ <details
84
+ class="collapse collapse-arrow border border-base-content/10 bg-base-100/50 rounded-lg"
85
+ open={conflicts.length > 0}
86
+ >
87
+ <summary
88
+ class="collapse-title text-sm font-medium flex items-center gap-2"
89
+ >
90
+ <Icon name="info" class="w-4 h-4 opacity-70" />
91
+
53
92
  Health Check
54
- </h4>
55
- {#if conflicts.length > 0}
56
- <div class="alert alert-warning p-3 rounded-lg text-xs gap-2 flex-col items-start">
57
- <div class="flex items-center gap-2 font-bold">
58
- ⚠️ Conflict Detected
93
+ {#if conflicts.length > 0}
94
+ <span class="badge badge-sm badge-warning ml-auto"
95
+ >{conflicts.length} conflicts</span
96
+ >
97
+ {:else}
98
+ <span class="badge badge-sm badge-success ml-auto">Healthy</span
99
+ >
100
+ {/if}
101
+ </summary>
102
+ <div class="collapse-content space-y-3 pt-2">
103
+ {#if conflicts.length > 0}
104
+ <div
105
+ class="alert alert-warning p-3 rounded-lg text-xs gap-2 flex-col items-start shadow-none"
106
+ >
107
+ <div class="flex items-center gap-2 font-bold">
108
+ ⚠️ Conflict Detected
109
+ </div>
110
+ <ul class="space-y-1 opacity-80 list-disc list-inside">
111
+ {#each conflicts as conflict}
112
+ <li>
113
+ <code class="bg-white/20 px-1 rounded"
114
+ >{conflict.keys}</code
115
+ >
116
+ in
117
+ <span class="badge badge-xs badge-outline"
118
+ >{conflict.scope}</span
119
+ >
120
+ </li>
121
+ {/each}
122
+ </ul>
59
123
  </div>
60
- <ul class="space-y-1 opacity-80">
61
- {#each conflicts as conflict}
62
- <li>
63
- <code class="bg-base-100 px-1 rounded">{conflict.keys}</code> in <span class="badge badge-xs badge-outline">{conflict.scope}</span>
64
- </li>
65
- {/each}
66
- </ul>
67
- </div>
68
- {:else}
69
- <div class="alert alert-success alert-soft p-3 rounded-lg text-xs gap-2">
70
- ✅ No conflicts detected
71
- </div>
72
- {/if}
73
- </section>
74
-
75
- <!-- Section 3: Scope Breakdown -->
76
- <section class="space-y-3">
77
- <h4 class="text-[10px] font-black uppercase tracking-widest opacity-40">
78
- Scopes
79
- </h4>
80
- <div class="flex flex-wrap gap-2">
81
- {#each Object.entries(shortcutStore.byScopeAndCategory) as [scope, categories]}
82
- {@const count = Object.values(categories).flat().length}
83
- <div class="flex items-center gap-1.5 bg-base-200 px-2 py-1 rounded-full border border-base-content/5">
84
- <span class="text-[10px] font-mono opacity-60 capitalize">{scope === 'global' ? 'Global' : scope.replace('panel:', '')}</span>
85
- <span class="badge badge-xs badge-primary font-bold">{count}</span>
124
+ {:else}
125
+ <div
126
+ class="alert alert-success p-3 rounded-lg text-xs gap-2 shadow-none bg-success/10 text-success-content border-none"
127
+ >
128
+ ✅ No conflicts detected across all scopes.
86
129
  </div>
87
- {/each}
130
+ {/if}
88
131
  </div>
89
- </section>
132
+ </details>
133
+
134
+ <!-- Section 3: Live Table -->
135
+ <details
136
+ class="collapse collapse-arrow border border-base-content/10 bg-base-100/50 rounded-lg"
137
+ open
138
+ >
139
+ <summary
140
+ class="collapse-title text-sm font-medium flex items-center gap-2"
141
+ >
142
+ <Icon name="shortcut" class="w-4 h-4 opacity-70" />
90
143
 
91
- <!-- Section 4: Live Table -->
92
- <section class="space-y-3">
93
- <h4 class="text-[10px] font-black uppercase tracking-widest opacity-40">
94
144
  Live Entries
95
- </h4>
96
- <div class="overflow-x-auto border border-base-content/5 rounded-lg max-h-[300px] overflow-y-auto">
97
- <table class="table table-xs table-pin-rows">
98
- <thead>
99
- <tr>
100
- <th>Keys</th>
101
- <th>Label</th>
102
- <th>State</th>
103
- </tr>
104
- </thead>
105
- <tbody>
106
- {#each shortcutStore.entries as entry}
107
- <tr>
108
- <td>
109
- <div class="flex gap-0.5">
110
- {#each formatKeys(entry.keys) as key}
111
- <kbd class="kbd kbd-xs text-[8px] opacity-70">{key}</kbd>
112
- {/each}
113
- </div>
114
- </td>
115
- <td class="text-[10px] truncate max-w-[80px]">{entry.label}</td>
116
- <td>
117
- <input
118
- type="checkbox"
119
- class="toggle toggle-xs toggle-primary"
120
- checked={entry.enabled !== false}
121
- onchange={(e) => {
122
- if (e.currentTarget.checked) {
123
- shortcutStore.enable(entry.id);
124
- } else {
125
- shortcutStore.disable(entry.id);
126
- }
127
- }}
128
- />
129
- </td>
145
+ </summary>
146
+ <div class="collapse-content pt-2">
147
+ <div
148
+ class="overflow-x-auto border border-base-content/5 rounded-lg max-h-[400px] overflow-y-auto bg-base-100"
149
+ >
150
+ <table class="table table-xs table-pin-rows">
151
+ <thead>
152
+ <tr class="bg-base-200/50">
153
+ <th>Keys</th>
154
+ <th>Scope</th>
155
+ <th>Label</th>
156
+ <th class="text-right">State</th>
130
157
  </tr>
158
+ </thead>
159
+ <tbody>
160
+ {#each shortcutStore.entries as entry}
161
+ <tr class="hover:bg-base-200/50 transition-colors">
162
+ <td class="font-mono">
163
+ <div class="flex flex-wrap gap-1">
164
+ {#each formatKeys(entry.keys) as key}
165
+ <kbd
166
+ class="kbd kbd-xs text-[9px] font-bold opacity-80"
167
+ >{key}</kbd
168
+ >
169
+ {/each}
170
+ </div>
171
+ </td>
172
+ <td>
173
+ <span
174
+ class="badge badge-ghost badge-xs font-mono opacity-70"
175
+ >
176
+ {entry.scope === "global"
177
+ ? "Global"
178
+ : entry.scope.replace("panel:", "")}
179
+ </span>
180
+ </td>
181
+ <td
182
+ class="text-[10px] max-w-[120px] truncate"
183
+ title={entry.label}>{entry.label}</td
184
+ >
185
+ <td class="text-right">
186
+ <input
187
+ type="checkbox"
188
+ class="toggle toggle-xs toggle-primary"
189
+ checked={entry.enabled !== false}
190
+ onchange={(e) => {
191
+ if (e.currentTarget.checked) {
192
+ shortcutStore.enable(entry.id);
193
+ } else {
194
+ shortcutStore.disable(entry.id);
195
+ }
196
+ }}
197
+ />
198
+ </td>
199
+ </tr>
200
+ {/each}
201
+ </tbody>
202
+ </table>
203
+ </div>
204
+
205
+ <div class="mt-4">
206
+ <h4
207
+ class="text-[10px] font-black uppercase tracking-widest opacity-40 mb-2"
208
+ >
209
+ Scope Breakdown
210
+ </h4>
211
+ <div class="flex flex-wrap gap-2">
212
+ {#each Object.entries(shortcutStore.byScopeAndCategory) as [scope, categories]}
213
+ {@const count = Object.values(categories).flat().length}
214
+ <div
215
+ class="flex items-center gap-1.5 bg-base-200 px-2 py-1 rounded badge badge-ghost border border-base-content/5 h-auto"
216
+ >
217
+ <span
218
+ class="text-[10px] font-mono opacity-60 capitalize"
219
+ >{scope === "global"
220
+ ? "Global"
221
+ : scope.replace("panel:", "")}</span
222
+ >
223
+ <span
224
+ class="badge badge-xs badge-primary font-bold border-none ml-1"
225
+ >{count}</span
226
+ >
227
+ </div>
131
228
  {/each}
132
- </tbody>
133
- </table>
229
+ </div>
230
+ </div>
134
231
  </div>
135
- </section>
232
+ </details>
136
233
  </div>
@@ -1,11 +1,17 @@
1
1
  <script lang="ts">
2
- import { layoutStore } from "../../state/layout.svelte";
3
- import { toastStore } from "../../state/toast.svelte";
2
+ import { getLayoutStore } from "../../state/layout.svelte";
3
+
4
+ const layoutStore = getLayoutStore();
5
+
6
+ import { getToastStore } from "../../state/toast.svelte";
7
+
4
8
  import {
5
9
  SHOWCASE_COMPONENTS,
6
10
  SHOWCASE_SNIPPETS,
7
11
  } from "./showcase-components";
8
12
 
13
+ const toastStore = getToastStore();
14
+
9
15
  const tabs = [
10
16
  "actions",
11
17
  "data-input",
@@ -31,7 +37,9 @@
31
37
 
32
38
  <div class="space-y-8 animate-in fade-in duration-500">
33
39
  <header>
34
- <h3 class="text-lg font-bold capitalize">{currentTabId.replace("-", " ")}</h3>
40
+ <h3 class="text-lg font-bold capitalize">
41
+ {currentTabId.replace("-", " ")}
42
+ </h3>
35
43
  <p class="text-xs opacity-50">Component reference</p>
36
44
  </header>
37
45
 
@@ -71,8 +79,12 @@
71
79
  <tbody>
72
80
  {#each components as comp}
73
81
  <tr>
74
- <td class="font-mono text-primary">.{comp.className}</td>
75
- <td class="text-[10px] opacity-70">{comp.description}</td>
82
+ <td class="font-mono text-primary"
83
+ >.{comp.className}</td
84
+ >
85
+ <td class="text-[10px] opacity-70"
86
+ >{comp.description}</td
87
+ >
76
88
  </tr>
77
89
  {/each}
78
90
  </tbody>
@@ -83,7 +95,9 @@
83
95
  <!-- Section 3: Snippet Generator -->
84
96
  <section class="space-y-3">
85
97
  <div class="flex items-center justify-between">
86
- <h4 class="text-[10px] font-black uppercase tracking-widest opacity-40">
98
+ <h4
99
+ class="text-[10px] font-black uppercase tracking-widest opacity-40"
100
+ >
87
101
  Markup
88
102
  </h4>
89
103
  <button
@@ -0,0 +1,30 @@
1
+ <!-- src/lib/features/layout/smart/ConnectedNavigationPanel.svelte -->
2
+ <script lang="ts">
3
+ import {
4
+ getLayoutStore,
5
+ type NavigationSection,
6
+ } from "../../../state/layout.svelte";
7
+ import NavigationPanel from "../../../layout/NavigationPanel.svelte";
8
+ import type { Snippet } from "svelte";
9
+
10
+ let { sections, header, footer } = $props<{
11
+ sections: NavigationSection[];
12
+ header?: Snippet;
13
+ footer?: Snippet;
14
+ }>();
15
+
16
+ const layoutStore = getLayoutStore();
17
+ </script>
18
+
19
+ <NavigationPanel
20
+ {sections}
21
+ {header}
22
+ {footer}
23
+ activeId={layoutStore.activeNavItemId}
24
+ collapsedIds={layoutStore.collapsedSections}
25
+ onSelect={(item) => layoutStore.navigate(item.id!)}
26
+ onToggle={(id, isOpen) =>
27
+ isOpen
28
+ ? layoutStore.expandSection(id)
29
+ : layoutStore.collapseSection(id)}
30
+ />
@@ -0,0 +1,10 @@
1
+ import { type NavigationSection } from "../../../state/layout.svelte";
2
+ import type { Snippet } from "svelte";
3
+ type $$ComponentProps = {
4
+ sections: NavigationSection[];
5
+ header?: Snippet;
6
+ footer?: Snippet;
7
+ };
8
+ declare const ConnectedNavigationPanel: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type ConnectedNavigationPanel = ReturnType<typeof ConnectedNavigationPanel>;
10
+ export default ConnectedNavigationPanel;
@@ -0,0 +1,23 @@
1
+ <!-- src/lib/features/layout/smart/ConnectedWorkspaceStrip.svelte -->
2
+ <script lang="ts">
3
+ import {
4
+ getLayoutStore,
5
+ type WorkspaceItem,
6
+ } from "../../../state/layout.svelte";
7
+ import WorkspaceStrip from "../../../layout/WorkspaceStrip.svelte";
8
+ import type { Snippet } from "svelte";
9
+
10
+ let { items, globalActions } = $props<{
11
+ items: WorkspaceItem[];
12
+ globalActions?: Snippet;
13
+ }>();
14
+
15
+ const layoutStore = getLayoutStore();
16
+ </script>
17
+
18
+ <WorkspaceStrip
19
+ {items}
20
+ {globalActions}
21
+ activeId={layoutStore.activeWorkspaceId}
22
+ onSelect={(id) => layoutStore.activateWorkspace(id)}
23
+ />
@@ -0,0 +1,9 @@
1
+ import { type WorkspaceItem } from "../../../state/layout.svelte";
2
+ import type { Snippet } from "svelte";
3
+ type $$ComponentProps = {
4
+ items: WorkspaceItem[];
5
+ globalActions?: Snippet;
6
+ };
7
+ declare const ConnectedWorkspaceStrip: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type ConnectedWorkspaceStrip = ReturnType<typeof ConnectedWorkspaceStrip>;
9
+ export default ConnectedWorkspaceStrip;
@@ -2,12 +2,16 @@
2
2
  <script lang="ts">
3
3
  import { onMount, tick } from "svelte";
4
4
  import {
5
- shortcutStore,
5
+ getShortcutStore,
6
6
  LAYOUT_SHORTCUTS,
7
7
  type ShortcutEntry,
8
8
  } from "../../state/shortcuts.svelte";
9
+ import { getAppStore } from "../../state/app.svelte";
9
10
  import { Icon } from "../../index";
10
11
 
12
+ const appStore = getAppStore();
13
+ const shortcutStore = getShortcutStore();
14
+
11
15
  let dialog = $state<HTMLDialogElement>();
12
16
  let input = $state<HTMLInputElement>();
13
17
  let query = $state("");
@@ -221,15 +225,19 @@
221
225
  <div class="flex gap-4">
222
226
  <span><kbd class="kbd kbd-xs">ESC</kbd> to close</span>
223
227
  <span
224
- ><kbd class="kbd kbd-xs">ctrl</kbd> + <kbd
225
- class="kbd kbd-xs">/</kbd
226
- > to open help</span
228
+ ><kbd class="kbd kbd-xs">ctrl</kbd> +
229
+ <kbd class="kbd kbd-xs">/</kbd> to open help</span
227
230
  >
228
231
  </div>
229
- <div>rune-lab v0.0.19</div>
232
+ <div>rune-lab v{appStore.version}</div>
230
233
  </div>
231
234
  </div>
232
235
  <form method="dialog" class="modal-backdrop">
233
- <button onclick={(e) => { e.preventDefault(); close(); }}>close</button>
236
+ <button
237
+ onclick={(e) => {
238
+ e.preventDefault();
239
+ close();
240
+ }}>close</button
241
+ >
234
242
  </form>
235
243
  </dialog>
package/dist/index.d.ts CHANGED
@@ -1,17 +1,29 @@
1
1
  export { createConfigStore } from "./devtools/createConfigStore.svelte";
2
2
  export { createMessageResolver } from "./devtools/message-resolver";
3
+ export { RUNE_LAB_CONTEXT } from "./context";
4
+ export type { PersistenceDriver } from "./persistence/types";
5
+ export { cookieDriver, inMemoryDriver, localStorageDriver, sessionStorageDriver, } from "./persistence/drivers";
6
+ export { type RuneLabContext, useRuneLab } from "./composables/useRuneLab.js";
7
+ export { usePersistence } from "./composables/usePersistence.js";
3
8
  export { portal } from "./actions/portal";
9
+ export { default as RuneProvider } from "./components/RuneProvider.svelte";
4
10
  export { default as Icon } from "./components/Icon.svelte";
5
11
  export { default as Toaster } from "./devtools/Toaster.svelte";
6
12
  export { default as ApiMonitor } from "./devtools/API_Monitor.svelte";
7
13
  export { default as CommandPalette } from "./features/command-palette/CommandPalette.svelte";
8
14
  export { default as ShortcutPalette } from "./features/shortcuts/ShortcutPalette.svelte";
9
- export * from "./layout/index";
15
+ export { default as WorkspaceLayout } from "./layout/WorkspaceLayout.svelte";
16
+ export { default as WorkspaceStrip } from "./layout/WorkspaceStrip.svelte";
17
+ export { default as NavigationPanel } from "./layout/NavigationPanel.svelte";
18
+ export { default as ContentArea } from "./layout/ContentArea.svelte";
19
+ export { default as DetailPanel } from "./layout/DetailPanel.svelte";
20
+ export { default as ConnectedNavigationPanel } from "./features/layout/smart/ConnectedNavigationPanel.svelte";
21
+ export { default as ConnectedWorkspaceStrip } from "./features/layout/smart/ConnectedWorkspaceStrip.svelte";
10
22
  export { default as AppSettingSelector } from "./features/config/components/AppSettingSelector.svelte";
11
23
  export { default as ThemeSelector } from "./features/config/components/ThemeSelector.svelte";
12
24
  export { default as LanguageSelector } from "./features/config/components/LanguageSelector.svelte";
13
25
  export { default as CurrencySelector } from "./features/config/components/CurrencySelector.svelte";
14
- export { apiStore, appStore, commandStore, currencyStore, languageStore, layoutStore, shortcutStore, themeStore, toastStore, } from "./state/index";
26
+ export { createApiStore, createAppStore, createCommandStore, createCurrencyStore, createLanguageStore, createLayoutStore, createShortcutStore, createThemeStore, createToastStore, getApiStore, getAppStore, getCommandStore, getCurrencyStore, getLanguageStore, getLayoutStore, getShortcutStore, getThemeStore, getToastStore, } from "./state/index";
15
27
  export { default as AppStateInspector } from "./showcase/AppStateInspector.svelte";
16
28
  export { default as ShowcaseMain } from "./showcase/Showcase.svelte";
17
29
  export { default as ShowcaseCard } from "./showcase/ShowcaseCard.svelte";
package/dist/index.js CHANGED
@@ -1,32 +1,43 @@
1
1
  // src/lib/index.ts
2
2
  // Public surface of rune-lab.
3
- // Components, devtools utilities, and store types — but NOT appConfig.
4
- // For the unified config facade see: rune-lab/config (src/lib/config.ts)
5
3
  // ── Devtools utilities ────────────────────────────────────────────────────────
6
4
  export { createConfigStore } from "./devtools/createConfigStore.svelte";
7
5
  export { createMessageResolver } from "./devtools/message-resolver";
6
+ export { RUNE_LAB_CONTEXT } from "./context";
7
+ export { cookieDriver, inMemoryDriver, localStorageDriver, sessionStorageDriver, } from "./persistence/drivers";
8
+ // ── Composables ───────────────────────────────────────────────────────────────
9
+ export { useRuneLab } from "./composables/useRuneLab.js";
10
+ export { usePersistence } from "./composables/usePersistence.js";
8
11
  // ── Actions ───────────────────────────────────────────────────────────────────
9
12
  export { portal } from "./actions/portal";
10
13
  // ── UI Components ─────────────────────────────────────────────────────────────
11
14
  // Core primitives
15
+ export { default as RuneProvider } from "./components/RuneProvider.svelte";
12
16
  export { default as Icon } from "./components/Icon.svelte";
13
17
  // Core overlays
14
18
  export { default as Toaster } from "./devtools/Toaster.svelte";
15
19
  export { default as ApiMonitor } from "./devtools/API_Monitor.svelte";
16
20
  export { default as CommandPalette } from "./features/command-palette/CommandPalette.svelte";
17
21
  export { default as ShortcutPalette } from "./features/shortcuts/ShortcutPalette.svelte";
18
- // Layout
19
- export * from "./layout/index";
22
+ // Layout - Dumb Primitives
23
+ export { default as WorkspaceLayout } from "./layout/WorkspaceLayout.svelte";
24
+ export { default as WorkspaceStrip } from "./layout/WorkspaceStrip.svelte";
25
+ export { default as NavigationPanel } from "./layout/NavigationPanel.svelte";
26
+ export { default as ContentArea } from "./layout/ContentArea.svelte";
27
+ export { default as DetailPanel } from "./layout/DetailPanel.svelte";
28
+ // Layout - Smart Connected Components
29
+ export { default as ConnectedNavigationPanel } from "./features/layout/smart/ConnectedNavigationPanel.svelte";
30
+ export { default as ConnectedWorkspaceStrip } from "./features/layout/smart/ConnectedWorkspaceStrip.svelte";
20
31
  // Setting selectors
21
32
  export { default as AppSettingSelector } from "./features/config/components/AppSettingSelector.svelte";
22
33
  export { default as ThemeSelector } from "./features/config/components/ThemeSelector.svelte";
23
34
  export { default as LanguageSelector } from "./features/config/components/LanguageSelector.svelte";
24
35
  export { default as CurrencySelector } from "./features/config/components/CurrencySelector.svelte";
25
- // ── Stores (individual, for fine-grained imports) ─────────────────────────────
26
- export { apiStore, appStore, commandStore, currencyStore, languageStore, layoutStore, shortcutStore, themeStore, toastStore, } from "./state/index";
27
- // ^ Showcase
36
+ // ── Stores ────────────────────────────────────────────────────────────────────
37
+ export { createApiStore, createAppStore, createCommandStore, createCurrencyStore, createLanguageStore, createLayoutStore, createShortcutStore, createThemeStore, createToastStore, getApiStore, getAppStore, getCommandStore, getCurrencyStore, getLanguageStore, getLayoutStore, getShortcutStore, getThemeStore, getToastStore, } from "./state/index";
38
+ // ── Showcase ──────────────────────────────────────────────────────────────────
28
39
  export { default as AppStateInspector } from "./showcase/AppStateInspector.svelte";
29
40
  export { default as ShowcaseMain } from "./showcase/Showcase.svelte";
30
41
  export { default as ShowcaseCard } from "./showcase/ShowcaseCard.svelte";
31
- // ── Paraglide compiled messages (re-exported for convenience) ─────────────────
42
+ // ── Paraglide compiled messages ───────────────────────────────────────────────
32
43
  export * as sdkMessages from "./paraglide/messages.js";