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.
- package/README.md +28 -6
- package/dist/actions/portal.js +6 -1
- package/dist/components/Icon.svelte +13 -2
- package/dist/components/RuneProvider.svelte +81 -0
- package/dist/components/RuneProvider.svelte.d.ts +9 -0
- package/dist/composables/usePersistence.d.ts +2 -0
- package/dist/composables/usePersistence.js +5 -0
- package/dist/composables/useRuneLab.d.ts +17 -0
- package/dist/composables/useRuneLab.js +19 -0
- package/dist/config.d.ts +4 -85
- package/dist/config.js +6 -32
- package/dist/context.d.ts +12 -0
- package/dist/context.js +13 -0
- package/dist/devtools/API_Monitor.svelte +5 -2
- package/dist/devtools/Toaster.svelte +14 -12
- package/dist/devtools/createConfigStore.svelte.d.ts +11 -1
- package/dist/devtools/createConfigStore.svelte.js +13 -11
- package/dist/features/command-palette/CommandPalette.svelte +12 -4
- package/dist/features/config/components/AppSettingSelector.svelte +85 -3
- package/dist/features/config/components/AppSettingSelector.svelte.d.ts +2 -0
- package/dist/features/config/components/CurrencySelector.svelte +27 -9
- package/dist/features/config/components/CurrencySelector.svelte.d.ts +3 -1
- package/dist/features/config/components/LanguageSelector.svelte +21 -6
- package/dist/features/config/components/LanguageSelector.svelte.d.ts +3 -1
- package/dist/features/config/components/ThemeSelector.svelte +23 -8
- package/dist/features/config/components/ThemeSelector.svelte.d.ts +3 -1
- package/dist/features/detail-panels/DashboardPanel.svelte +34 -17
- package/dist/features/detail-panels/ShortcutsPanel.svelte +185 -88
- package/dist/features/detail-panels/ShowcasePanel.svelte +20 -6
- package/dist/features/layout/smart/ConnectedNavigationPanel.svelte +30 -0
- package/dist/features/layout/smart/ConnectedNavigationPanel.svelte.d.ts +10 -0
- package/dist/features/layout/smart/ConnectedWorkspaceStrip.svelte +23 -0
- package/dist/features/layout/smart/ConnectedWorkspaceStrip.svelte.d.ts +9 -0
- package/dist/features/shortcuts/ShortcutPalette.svelte +14 -6
- package/dist/index.d.ts +14 -2
- package/dist/index.js +19 -8
- package/dist/layout/NavigationPanel.svelte +97 -121
- package/dist/layout/NavigationPanel.svelte.d.ts +5 -1
- package/dist/layout/WorkspaceLayout.svelte +109 -30
- package/dist/layout/WorkspaceLayout.svelte.d.ts +2 -2
- package/dist/layout/WorkspaceStrip.svelte +17 -12
- package/dist/layout/WorkspaceStrip.svelte.d.ts +3 -1
- package/dist/layout/index.d.ts +1 -1
- package/dist/layout/index.js +1 -1
- package/dist/paraglide/runtime.d.ts +43 -2
- package/dist/paraglide/runtime.js +143 -23
- package/dist/paraglide/server.js +37 -14
- package/dist/persistence/drivers.d.ts +10 -0
- package/dist/persistence/drivers.js +71 -0
- package/dist/persistence/types.d.ts +17 -0
- package/dist/persistence/types.js +2 -0
- package/dist/showcase/AppStateInspector.svelte +26 -11
- package/dist/showcase/Showcase.svelte +4 -1
- package/dist/state/api.svelte.d.ts +3 -3
- package/dist/state/api.svelte.js +9 -2
- package/dist/state/app.svelte.d.ts +3 -3
- package/dist/state/app.svelte.js +14 -4
- package/dist/state/commands.svelte.d.ts +21 -4
- package/dist/state/commands.svelte.js +22 -94
- package/dist/state/currency.svelte.d.ts +4 -1
- package/dist/state/currency.svelte.js +16 -8
- package/dist/state/index.d.ts +9 -9
- package/dist/state/index.js +10 -9
- package/dist/state/language.svelte.d.ts +4 -1
- package/dist/state/language.svelte.js +27 -8
- package/dist/state/layout.svelte.d.ts +10 -3
- package/dist/state/layout.svelte.js +56 -14
- package/dist/state/shortcuts.svelte.d.ts +56 -6
- package/dist/state/shortcuts.svelte.js +21 -69
- package/dist/state/theme.svelte.d.ts +4 -1
- package/dist/state/theme.svelte.js +16 -8
- package/dist/state/toast.svelte.d.ts +3 -3
- package/dist/state/toast.svelte.js +9 -2
- package/package.json +9 -9
- package/dist/features/command-palette/commands.svelte.d.ts +0 -8
- package/dist/features/command-palette/commands.svelte.js +0 -5
- package/dist/features/config/stores/api.svelte.d.ts +0 -13
- package/dist/features/config/stores/api.svelte.js +0 -5
- package/dist/features/config/stores/app.svelte.d.ts +0 -13
- package/dist/features/config/stores/app.svelte.js +0 -5
- package/dist/features/config/stores/currency.svelte.d.ts +0 -8
- package/dist/features/config/stores/currency.svelte.js +0 -5
- package/dist/features/config/stores/language.svelte.d.ts +0 -8
- package/dist/features/config/stores/language.svelte.js +0 -5
- package/dist/features/config/stores/theme.svelte.d.ts +0 -8
- package/dist/features/config/stores/theme.svelte.js +0 -5
- package/dist/features/config/stores/toast.svelte.d.ts +0 -9
- package/dist/features/config/stores/toast.svelte.js +0 -5
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
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-
|
|
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
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
<
|
|
46
|
-
|
|
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
|
-
</
|
|
80
|
+
</details>
|
|
49
81
|
|
|
50
82
|
<!-- Section 2: Conflicts -->
|
|
51
|
-
<
|
|
52
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
{/
|
|
130
|
+
{/if}
|
|
88
131
|
</div>
|
|
89
|
-
</
|
|
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
|
-
</
|
|
96
|
-
<div class="
|
|
97
|
-
<
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
<
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
</
|
|
133
|
-
</
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
134
231
|
</div>
|
|
135
|
-
</
|
|
232
|
+
</details>
|
|
136
233
|
</div>
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
|
|
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">
|
|
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"
|
|
75
|
-
|
|
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
|
|
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
|
-
|
|
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> +
|
|
225
|
-
|
|
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
|
|
232
|
+
<div>rune-lab v{appStore.version}</div>
|
|
230
233
|
</div>
|
|
231
234
|
</div>
|
|
232
235
|
<form method="dialog" class="modal-backdrop">
|
|
233
|
-
<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
|
|
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 {
|
|
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
|
|
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
|
|
26
|
-
export {
|
|
27
|
-
//
|
|
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
|
|
42
|
+
// ── Paraglide compiled messages ───────────────────────────────────────────────
|
|
32
43
|
export * as sdkMessages from "./paraglide/messages.js";
|