@joewinke/jatui 0.2.1 → 0.2.3

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 (30) hide show
  1. package/dist/components/CommandPalette.svelte +1 -1
  2. package/dist/components/ConfirmDialog.svelte +1 -1
  3. package/dist/components/InputDialog.svelte +1 -1
  4. package/dist/components/shell/Sidebar.svelte +1 -1
  5. package/dist/components/shell/Sidebar.svelte.d.ts +1 -1
  6. package/dist/components/shell/shell.js +63 -60
  7. package/dist/components/table/DataTable.svelte +10 -1
  8. package/dist/components/toast/ToastHost.svelte +1 -1
  9. package/dist/components/toast/ToastItem.svelte +1 -1
  10. package/dist/components/toast/ToastItem.svelte.d.ts +1 -1
  11. package/dist/dnd/createDndBoard.js +329 -0
  12. package/dist/dnd/index.d.ts +3 -2
  13. package/dist/dnd/index.js +2 -1
  14. package/dist/index.d.ts +8 -8
  15. package/dist/index.js +4 -4
  16. package/dist/stores/commandPalette.js +116 -0
  17. package/dist/stores/confirmDialog.js +37 -0
  18. package/dist/stores/inputDialog.js +37 -0
  19. package/dist/stores/toast.js +53 -0
  20. package/package.json +2 -2
  21. package/dist/dnd/createDndBoard.svelte.js +0 -217
  22. package/dist/stores/commandPalette.svelte.js +0 -82
  23. package/dist/stores/confirmDialog.svelte.js +0 -31
  24. package/dist/stores/inputDialog.svelte.js +0 -32
  25. package/dist/stores/toast.svelte.js +0 -33
  26. /package/dist/dnd/{createDndBoard.svelte.d.ts → createDndBoard.d.ts} +0 -0
  27. /package/dist/stores/{commandPalette.svelte.d.ts → commandPalette.d.ts} +0 -0
  28. /package/dist/stores/{confirmDialog.svelte.d.ts → confirmDialog.d.ts} +0 -0
  29. /package/dist/stores/{inputDialog.svelte.d.ts → inputDialog.d.ts} +0 -0
  30. /package/dist/stores/{toast.svelte.d.ts → toast.d.ts} +0 -0
@@ -2,7 +2,7 @@
2
2
  import { tick } from 'svelte';
3
3
  import { fly, fade } from 'svelte/transition';
4
4
  import { cubicOut } from 'svelte/easing';
5
- import { commandPalette, type CommandItem } from '../stores/commandPalette.svelte.js';
5
+ import { commandPalette, type CommandItem } from '../stores/commandPalette.js';
6
6
 
7
7
  // Respect prefers-reduced-motion
8
8
  const reducedMotion =
@@ -2,7 +2,7 @@
2
2
  import { fly, fade } from 'svelte/transition';
3
3
  import { cubicOut } from 'svelte/easing';
4
4
  import { tick } from 'svelte';
5
- import { getPending, confirmDialog, cancelDialog } from '../stores/confirmDialog.svelte';
5
+ import { getPending, confirmDialog, cancelDialog } from '../stores/confirmDialog';
6
6
 
7
7
  const pending = $derived(getPending());
8
8
  const opts = $derived(pending?.options ?? null);
@@ -2,7 +2,7 @@
2
2
  import { fly, fade } from 'svelte/transition';
3
3
  import { cubicOut } from 'svelte/easing';
4
4
  import { tick } from 'svelte';
5
- import { getPendingInput, submitInput, cancelInput } from '../stores/inputDialog.svelte';
5
+ import { getPendingInput, submitInput, cancelInput } from '../stores/inputDialog';
6
6
 
7
7
  const pending = $derived(getPendingInput());
8
8
  const opts = $derived(pending?.options ?? null);
@@ -7,7 +7,7 @@
7
7
  * icon — icon-only rail (no width transition — labels/groups hide via class swap)
8
8
  * collapsed — completely hidden; mobile uses a Drawer overlay
9
9
  *
10
- * Pass a sidebarState from createSidebarState() (shell.ts) for persistence
10
+ * Pass a sidebarState from createSidebarState() (shell.svelte.ts) for persistence
11
11
  * and active-item tracking. Without it, the sidebar is stateless.
12
12
  */
13
13
 
@@ -6,7 +6,7 @@
6
6
  * icon — icon-only rail (no width transition — labels/groups hide via class swap)
7
7
  * collapsed — completely hidden; mobile uses a Drawer overlay
8
8
  *
9
- * Pass a sidebarState from createSidebarState() (shell.ts) for persistence
9
+ * Pass a sidebarState from createSidebarState() (shell.svelte.ts) for persistence
10
10
  * and active-item tracking. Without it, the sidebar is stateless.
11
11
  */
12
12
  import type { Snippet } from 'svelte';
@@ -1,65 +1,68 @@
1
- /**
2
- * Sidebar context state — createSidebarState returns a reactive object
3
- * driven by Svelte 5 runes. Pass it into Sidebar via setContext/getContext
4
- * or prop drilling.
5
- *
6
- * Persistence: localStorage (fallback to cookie via document.cookie) keyed
7
- * on `storageKey`. Set storageKey = '' to disable persistence.
8
- */
1
+ /* shell.svelte.js generated by Svelte v5.53.11 */
2
+ import * as $ from 'svelte/internal/client';
3
+
9
4
  function readStorage(key) {
10
- if (!key || typeof window === 'undefined')
11
- return null;
12
- try {
13
- return localStorage.getItem(key);
14
- }
15
- catch (_a) {
16
- return null;
17
- }
5
+ if (!key || typeof window === 'undefined') return null;
6
+
7
+ try {
8
+ return localStorage.getItem(key);
9
+ } catch(_a) {
10
+ return null;
11
+ }
18
12
  }
13
+
19
14
  function writeStorage(key, value) {
20
- if (!key || typeof window === 'undefined')
21
- return;
22
- try {
23
- localStorage.setItem(key, value);
24
- }
25
- catch (_a) {
26
- // silently fail if storage unavailable
27
- }
15
+ if (!key || typeof window === 'undefined') return;
16
+
17
+ try {
18
+ localStorage.setItem(key, value);
19
+ } catch(_a) {
20
+ // silently fail if storage unavailable
21
+ }
28
22
  }
23
+
29
24
  export function createSidebarState(options) {
30
- var _a, _b, _c;
31
- var storageKey = (_a = options === null || options === void 0 ? void 0 : options.storageKey) !== null && _a !== void 0 ? _a : 'jatui-sidebar';
32
- var defaultMode = (_b = options === null || options === void 0 ? void 0 : options.defaultMode) !== null && _b !== void 0 ? _b : 'expanded';
33
- var storedMode = readStorage(storageKey);
34
- var validModes = ['expanded', 'collapsed', 'icon'];
35
- var initialMode = storedMode && validModes.includes(storedMode) ? storedMode : defaultMode;
36
- var mode = $state(initialMode);
37
- var activeId = $state((_c = options === null || options === void 0 ? void 0 : options.defaultActiveId) !== null && _c !== void 0 ? _c : '');
38
- var mobileOpen = $state(false);
39
- return {
40
- get mode() {
41
- return mode;
42
- },
43
- get activeId() {
44
- return activeId;
45
- },
46
- get mobileOpen() {
47
- return mobileOpen;
48
- },
49
- setMode: function (m) {
50
- mode = m;
51
- writeStorage(storageKey, m);
52
- },
53
- toggleCollapse: function () {
54
- var next = mode === 'expanded' ? 'icon' : 'expanded';
55
- mode = next;
56
- writeStorage(storageKey, next);
57
- },
58
- setActive: function (id) {
59
- activeId = id;
60
- },
61
- setMobileOpen: function (open) {
62
- mobileOpen = open;
63
- }
64
- };
65
- }
25
+ var _a, _b, _c;
26
+ var storageKey = (_a = options === null || options === void 0 ? void 0 : options.storageKey) !== null && _a !== void 0 ? _a : 'jatui-sidebar';
27
+ var defaultMode = (_b = options === null || options === void 0 ? void 0 : options.defaultMode) !== null && _b !== void 0 ? _b : 'expanded';
28
+ var storedMode = readStorage(storageKey);
29
+ var validModes = ['expanded', 'collapsed', 'icon'];
30
+ var initialMode = storedMode && validModes.includes(storedMode) ? storedMode : defaultMode;
31
+ var mode = $.state($.proxy(initialMode));
32
+ var activeId = $.state($.proxy((_c = options === null || options === void 0 ? void 0 : options.defaultActiveId) !== null && _c !== void 0 ? _c : ''));
33
+ var mobileOpen = $.state(false);
34
+
35
+ return {
36
+ get mode() {
37
+ return $.safe_get(mode);
38
+ },
39
+
40
+ get activeId() {
41
+ return $.safe_get(activeId);
42
+ },
43
+
44
+ get mobileOpen() {
45
+ return $.safe_get(mobileOpen);
46
+ },
47
+
48
+ setMode(m) {
49
+ $.set(mode, m, true);
50
+ writeStorage(storageKey, m);
51
+ },
52
+
53
+ toggleCollapse() {
54
+ var next = $.safe_get(mode) === 'expanded' ? 'icon' : 'expanded';
55
+
56
+ $.set(mode, next, true);
57
+ writeStorage(storageKey, next);
58
+ },
59
+
60
+ setActive(id) {
61
+ $.set(activeId, id, true);
62
+ },
63
+
64
+ setMobileOpen(open) {
65
+ $.set(mobileOpen, open, true);
66
+ }
67
+ };
68
+ }
@@ -80,7 +80,16 @@
80
80
  getPaginationRowModel: paginated ? getPaginationRowModel() : undefined,
81
81
  renderFallbackValue: '',
82
82
  };
83
- return createTable(opts);
83
+ const instance = createTable(opts);
84
+ // createTable takes a fully-resolved state — unlike the framework adapters it does
85
+ // not fill in defaults, so feature state we never touch (columnPinning, columnVisibility,
86
+ // …) lands undefined and getHeaderGroups() dies reading columnPinning.left. Merge the
87
+ // instance defaults under our reactive slices, the same way the TanStack adapters do.
88
+ instance.setOptions((prev) => ({
89
+ ...prev,
90
+ state: { ...instance.initialState, ...opts.state },
91
+ }));
92
+ return instance;
84
93
  });
85
94
 
86
95
  const headerGroups = $derived(table.getHeaderGroups());
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { getToasts } from '../../stores/toast.svelte.js';
2
+ import { getToasts } from '../../stores/toast.js';
3
3
  import ToastItem from './ToastItem.svelte';
4
4
 
5
5
  const toasts = $derived(getToasts());
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { dismissToast, type Toast } from '../../stores/toast.svelte.js';
2
+ import { dismissToast, type Toast } from '../../stores/toast.js';
3
3
 
4
4
  type Props = {
5
5
  toast: Toast;
@@ -1,4 +1,4 @@
1
- import { type Toast } from '../../stores/toast.svelte.js';
1
+ import { type Toast } from '../../stores/toast.js';
2
2
  type Props = {
3
3
  toast: Toast;
4
4
  index: number;
@@ -0,0 +1,329 @@
1
+ /* createDndBoard.svelte.js generated by Svelte v5.53.11 */
2
+ import * as $ from 'svelte/internal/client';
3
+
4
+ var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
5
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
6
+ if (ar || !(i in from)) {
7
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
8
+
9
+ ar[i] = from[i];
10
+ }
11
+ }
12
+
13
+ return to.concat(ar || Array.prototype.slice.call(from));
14
+ };
15
+
16
+ import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
17
+ import { extractClosestEdge, attachClosestEdge } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
18
+ import { SvelteMap } from 'svelte/reactivity';
19
+ import { announce } from './announce';
20
+ import { makeItemData, isItemData } from './types';
21
+
22
+ var SHADOW_KEY = '__dnd-shadow__';
23
+
24
+ export function createDndBoard(opts) {
25
+ var _a, _b;
26
+ var edges = (_a = opts.edges) !== null && _a !== void 0 ? _a : ['top', 'bottom'];
27
+ var hover = (_b = opts.hover) !== null && _b !== void 0 ? _b : 'indicator';
28
+ var mirror = new SvelteMap();
29
+ var dragging = $.state(null);
30
+ var proposal = $.state(null);
31
+ var seq = new Map();
32
+ var inFlight = 0;
33
+ var seedQueued = false;
34
+
35
+ function seed() {
36
+ mirror.clear();
37
+
38
+ var src = opts.items();
39
+ var entries = src instanceof Map ? src : new Map(Object.entries(src));
40
+
41
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
42
+ var _a = entries_1[_i], id = _a[0], list = _a[1];
43
+
44
+ mirror.set(id, __spreadArray([], list, true));
45
+ }
46
+ }
47
+
48
+ $.user_effect(function () {
49
+ opts.items();
50
+
51
+ if ($.safe_get(dragging) || inFlight > 0) {
52
+ seedQueued = true;
53
+
54
+ return;
55
+ }
56
+
57
+ seed();
58
+ });
59
+
60
+ function placementFrom(dropTargets) {
61
+ var _a;
62
+ var inner = dropTargets[0];
63
+
64
+ if (!inner) return null;
65
+
66
+ var d = inner.data;
67
+
68
+ if (typeof d.container !== 'string') return null;
69
+
70
+ var list = (_a = mirror.get(d.container)) !== null && _a !== void 0 ? _a : [];
71
+
72
+ if (typeof d.index !== 'number') return { container: d.container, index: list.length };
73
+
74
+ var edge = extractClosestEdge(d);
75
+ var after = edge === 'bottom' || edge === 'right';
76
+
77
+ return { container: d.container, index: d.index + (after ? 1 : 0) };
78
+ }
79
+
80
+ function syncShadow(next) {
81
+ var _a;
82
+ var _b;
83
+
84
+ for (var _i = 0, mirror_1 = mirror; _i < mirror_1.length; _i++) {
85
+ var _c = mirror_1[_i], cid = _c[0], list_1 = _c[1];
86
+
87
+ var idx = list_1.findIndex(function (item) {
88
+ return item[SHADOW_KEY];
89
+ });
90
+
91
+ if (idx !== -1) {
92
+ list_1.splice(idx, 1);
93
+ mirror.set(cid, list_1);
94
+
95
+ break;
96
+ }
97
+ }
98
+
99
+ if (!next || !$.safe_get(dragging)) return;
100
+
101
+ var list = __spreadArray([], (_b = mirror.get(next.container)) !== null && _b !== void 0 ? _b : [], true);
102
+
103
+ var shadowItem = (
104
+ _a = {},
105
+ _a[SHADOW_KEY] = true,
106
+ _a.key = ("").concat(SHADOW_KEY, "-").concat($.safe_get(dragging).key),
107
+ _a
108
+ );
109
+
110
+ list.splice(Math.min(next.index, list.length), 0, shadowItem);
111
+ mirror.set(next.container, list);
112
+ }
113
+
114
+ function consider(next) {
115
+ if ((next === null || next === void 0 ? void 0 : next.container) === ($.safe_get(proposal) === null || $.safe_get(proposal) === void 0 ? void 0 : $.safe_get(proposal).container) && (next === null || next === void 0 ? void 0 : next.index) === ($.safe_get(proposal) === null || $.safe_get(proposal) === void 0 ? void 0 : $.safe_get(proposal).index)) return;
116
+
117
+ $.set(proposal, next, true);
118
+
119
+ if (hover === 'shadow') syncShadow(next);
120
+ }
121
+
122
+ function applyToMirror(move) {
123
+ var _a, _b;
124
+ var fromList = __spreadArray([], (_a = mirror.get(move.from.container)) !== null && _a !== void 0 ? _a : [], true);
125
+
126
+ var toList = move.from.container === move.to.container
127
+ ? fromList
128
+ : __spreadArray([], (_b = mirror.get(move.to.container)) !== null && _b !== void 0 ? _b : [], true);
129
+
130
+ var srcIdx = fromList.findIndex(function (it) {
131
+ return opts.key(it) === opts.key(move.item);
132
+ });
133
+
134
+ if (srcIdx === -1) return;
135
+
136
+ fromList.splice(srcIdx, 1);
137
+
138
+ var destIdx = move.to.index;
139
+
140
+ if (move.from.container === move.to.container && move.to.index > move.from.index) {
141
+ destIdx = Math.max(0, destIdx - 1);
142
+ }
143
+
144
+ toList.splice(Math.min(destIdx, toList.length), 0, move.item);
145
+ mirror.set(move.from.container, fromList);
146
+
147
+ if (move.from.container !== move.to.container) {
148
+ mirror.set(move.to.container, toList);
149
+ }
150
+ }
151
+
152
+ function rollback(move) {
153
+ var _a;
154
+
155
+ for (var _i = 0, mirror_2 = mirror; _i < mirror_2.length; _i++) {
156
+ var _b = mirror_2[_i], cid = _b[0], list = _b[1];
157
+
158
+ var idx = list.findIndex(function (it) {
159
+ return opts.key(it) === opts.key(move.item);
160
+ });
161
+
162
+ if (idx !== -1) {
163
+ list.splice(idx, 1);
164
+ mirror.set(cid, list);
165
+
166
+ break;
167
+ }
168
+ }
169
+
170
+ var fromList = __spreadArray([], (_a = mirror.get(move.from.container)) !== null && _a !== void 0 ? _a : [], true);
171
+
172
+ fromList.splice(Math.min(move.from.index, fromList.length), 0, move.item);
173
+ mirror.set(move.from.container, fromList);
174
+ }
175
+
176
+ function finalize(dropped) {
177
+ var _a;
178
+ var drag = $.safe_get(dragging);
179
+ var to = dropped ? $.safe_get(proposal) : null;
180
+
181
+ $.set(dragging, null);
182
+ consider(null);
183
+
184
+ if (!drag) return;
185
+
186
+ if (!to || to.container === drag.from.container && to.index === drag.from.index) {
187
+ if (seedQueued && inFlight === 0) {
188
+ seedQueued = false;
189
+ seed();
190
+ }
191
+
192
+ return;
193
+ }
194
+
195
+ var move = { item: drag.item, from: drag.from, to };
196
+
197
+ applyToMirror(move);
198
+
199
+ if (opts.announce) announce(opts.announce(move));
200
+
201
+ var token = ((_a = seq.get(drag.key)) !== null && _a !== void 0 ? _a : 0) + 1;
202
+
203
+ seq.set(drag.key, token);
204
+ inFlight++;
205
+
206
+ opts.commit(move).catch(function (error) {
207
+ var _a;
208
+
209
+ if (seq.get(drag.key) === token) rollback(move);
210
+
211
+ (_a = opts.onError) === null || _a === void 0 ? void 0 : _a.call(opts, error, move);
212
+ }).finally(function () {
213
+ inFlight--;
214
+
215
+ if (inFlight === 0 && seedQueued && !$.safe_get(dragging)) {
216
+ seedQueued = false;
217
+ seed();
218
+ }
219
+ });
220
+ }
221
+
222
+ $.user_effect(function () {
223
+ return monitorForElements({
224
+ canMonitor(_a) {
225
+ var source = _a.source;
226
+
227
+ return isItemData(source.data, opts.type);
228
+ },
229
+
230
+ onDragStart(_a) {
231
+ var source = _a.source;
232
+ var d = source.data;
233
+
234
+ $.set(
235
+ dragging,
236
+ {
237
+ key: d.key,
238
+ item: d.item,
239
+ from: { container: d.container, index: d.index }
240
+ },
241
+ true
242
+ );
243
+ },
244
+
245
+ onDropTargetChange(_a) {
246
+ var location = _a.location;
247
+
248
+ consider(placementFrom(location.current.dropTargets));
249
+ },
250
+
251
+ onDrag(_a) {
252
+ var location = _a.location;
253
+
254
+ consider(placementFrom(location.current.dropTargets));
255
+ },
256
+
257
+ onDrop(_a) {
258
+ var location = _a.location;
259
+
260
+ finalize(location.current.dropTargets.length > 0);
261
+ }
262
+ });
263
+ });
264
+
265
+ return {
266
+ get(container) {
267
+ var _a;
268
+
269
+ return (_a = mirror.get(container)) !== null && _a !== void 0 ? _a : [];
270
+ },
271
+
272
+ containers() {
273
+ return __spreadArray([], mirror.keys(), true);
274
+ },
275
+
276
+ get dragging() {
277
+ return $.safe_get(dragging);
278
+ },
279
+
280
+ get proposal() {
281
+ return $.safe_get(proposal);
282
+ },
283
+
284
+ isSource(item) {
285
+ return ($.safe_get(dragging) === null || $.safe_get(dragging) === void 0 ? void 0 : $.safe_get(dragging).key) === opts.key(item);
286
+ },
287
+
288
+ isShadow(item) {
289
+ return !!item[SHADOW_KEY];
290
+ },
291
+
292
+ item(item, container, index) {
293
+ return {
294
+ data() {
295
+ return makeItemData({ type: opts.type, key: opts.key(item), item, container, index });
296
+ }
297
+ };
298
+ },
299
+
300
+ itemTarget(container, index) {
301
+ return {
302
+ data(feedback) {
303
+ return attachClosestEdge({ type: ("").concat(opts.type, "-target"), container, index }, {
304
+ input: feedback.input,
305
+ element: feedback.element,
306
+ allowedEdges: edges
307
+ });
308
+ },
309
+
310
+ accepts(d) {
311
+ return isItemData(d, opts.type);
312
+ },
313
+ sticky: true
314
+ };
315
+ },
316
+
317
+ containerTarget(container) {
318
+ return {
319
+ data() {
320
+ return { type: ("").concat(opts.type, "-target"), container };
321
+ },
322
+
323
+ accepts(d) {
324
+ return isItemData(d, opts.type);
325
+ }
326
+ };
327
+ }
328
+ };
329
+ }
@@ -2,8 +2,8 @@ export { draggable } from './draggable';
2
2
  export type { DraggableParams } from './draggable';
3
3
  export { dropTarget } from './dropTarget';
4
4
  export type { DropTargetParams } from './dropTarget';
5
- export { createDndBoard } from './createDndBoard.svelte';
6
- export type { BoardMove, DndBoardOptions } from './createDndBoard.svelte';
5
+ export { createDndBoard } from './createDndBoard';
6
+ export type { BoardMove, DndBoardOptions } from './createDndBoard';
7
7
  export { default as DropIndicator } from './DropIndicator.svelte';
8
8
  export { autoScroll } from './autoScroll';
9
9
  export type { AutoScrollParams } from './autoScroll';
@@ -11,3 +11,4 @@ export { announce, cleanupAnnouncements } from './announce';
11
11
  export { makeItemData, isItemData } from './types';
12
12
  export type { DragData, ItemDragData, ContainerDropData, TargetFeedback, Edge } from './types';
13
13
  export { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
14
+ export { attachClosestEdge, extractClosestEdge, } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
package/dist/dnd/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  export { draggable } from './draggable';
2
2
  export { dropTarget } from './dropTarget';
3
- export { createDndBoard } from './createDndBoard.svelte';
3
+ export { createDndBoard } from './createDndBoard';
4
4
  export { default as DropIndicator } from './DropIndicator.svelte';
5
5
  export { autoScroll } from './autoScroll';
6
6
  export { announce, cleanupAnnouncements } from './announce';
7
7
  export { makeItemData, isItemData } from './types';
8
8
  // Low-level pdnd primitives re-exported to let host code avoid direct @atlaskit imports
9
9
  export { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
10
+ export { attachClosestEdge, extractClosestEdge, } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
package/dist/index.d.ts CHANGED
@@ -15,11 +15,11 @@ export { default as UserAvatar } from './components/UserAvatar.svelte';
15
15
  export { default as SidebarUserFooter } from './components/SidebarUserFooter.svelte';
16
16
  export { default as TaskTypeIcon } from './components/TaskTypeIcon.svelte';
17
17
  export { default as ConfirmDialog } from './components/ConfirmDialog.svelte';
18
- export { showConfirm, confirmDialog, cancelDialog, getPending } from './stores/confirmDialog.svelte';
19
- export type { ConfirmOptions } from './stores/confirmDialog.svelte';
18
+ export { showConfirm, confirmDialog, cancelDialog, getPending } from './stores/confirmDialog';
19
+ export type { ConfirmOptions } from './stores/confirmDialog';
20
20
  export { default as InputDialog } from './components/InputDialog.svelte';
21
- export { showInput, submitInput, cancelInput, getPendingInput } from './stores/inputDialog.svelte';
22
- export type { InputOptions } from './stores/inputDialog.svelte';
21
+ export { showInput, submitInput, cancelInput, getPendingInput } from './stores/inputDialog';
22
+ export type { InputOptions } from './stores/inputDialog';
23
23
  export { default as SearchDropdown } from './components/SearchDropdown.svelte';
24
24
  export { default as FilterDropdown } from './components/FilterDropdown.svelte';
25
25
  export { default as ContextMenu } from './components/ContextMenu.svelte';
@@ -158,16 +158,16 @@ export { play as playSound, registerSound, isSoundEnabled, setSoundEnabled } fro
158
158
  export { splitText } from './utils/splitText';
159
159
  export type { SplitBy, SplitTextOptions, SplitTextResult } from './utils/splitText';
160
160
  export { default as ToastHost } from './components/toast/ToastHost.svelte';
161
- export { showToast, dismissToast, getToasts } from './stores/toast.svelte';
162
- export type { Toast, ToastType, ToastOptions, DismissHandle } from './stores/toast.svelte';
161
+ export { showToast, dismissToast, getToasts } from './stores/toast';
162
+ export type { Toast, ToastType, ToastOptions, DismissHandle } from './stores/toast';
163
163
  export { default as Skeleton } from './components/Skeleton.svelte';
164
164
  export { default as ProgressBar } from './components/progress/ProgressBar.svelte';
165
165
  export { default as ProgressRing } from './components/progress/ProgressRing.svelte';
166
166
  export { default as Steps } from './components/progress/Steps.svelte';
167
167
  export { default as Tabs } from './components/Tabs.svelte';
168
168
  export { default as CommandPalette } from './components/CommandPalette.svelte';
169
- export { commandPalette } from './stores/commandPalette.svelte';
170
- export type { CommandItem } from './stores/commandPalette.svelte';
169
+ export { commandPalette } from './stores/commandPalette';
170
+ export type { CommandItem } from './stores/commandPalette';
171
171
  export { default as AnimatedNumber } from './components/AnimatedNumber.svelte';
172
172
  export { default as CopyButton } from './components/CopyButton.svelte';
173
173
  export { default as HoldToConfirm } from './components/HoldToConfirm.svelte';
package/dist/index.js CHANGED
@@ -14,9 +14,9 @@ export { default as SidebarUserFooter } from './components/SidebarUserFooter.sve
14
14
  export { default as TaskTypeIcon } from './components/TaskTypeIcon.svelte';
15
15
  // Components — from JAT IDE
16
16
  export { default as ConfirmDialog } from './components/ConfirmDialog.svelte';
17
- export { showConfirm, confirmDialog, cancelDialog, getPending } from './stores/confirmDialog.svelte';
17
+ export { showConfirm, confirmDialog, cancelDialog, getPending } from './stores/confirmDialog';
18
18
  export { default as InputDialog } from './components/InputDialog.svelte';
19
- export { showInput, submitInput, cancelInput, getPendingInput } from './stores/inputDialog.svelte';
19
+ export { showInput, submitInput, cancelInput, getPendingInput } from './stores/inputDialog';
20
20
  export { default as SearchDropdown } from './components/SearchDropdown.svelte';
21
21
  export { default as FilterDropdown } from './components/FilterDropdown.svelte';
22
22
  export { default as ContextMenu } from './components/ContextMenu.svelte';
@@ -165,7 +165,7 @@ export { play as playSound, registerSound, isSoundEnabled, setSoundEnabled } fro
165
165
  export { splitText } from './utils/splitText';
166
166
  // Toast system
167
167
  export { default as ToastHost } from './components/toast/ToastHost.svelte';
168
- export { showToast, dismissToast, getToasts } from './stores/toast.svelte';
168
+ export { showToast, dismissToast, getToasts } from './stores/toast';
169
169
  // Loading & progress family
170
170
  export { default as Skeleton } from './components/Skeleton.svelte';
171
171
  export { default as ProgressBar } from './components/progress/ProgressBar.svelte';
@@ -174,7 +174,7 @@ export { default as Steps } from './components/progress/Steps.svelte';
174
174
  // Navigation & overlays
175
175
  export { default as Tabs } from './components/Tabs.svelte';
176
176
  export { default as CommandPalette } from './components/CommandPalette.svelte';
177
- export { commandPalette } from './stores/commandPalette.svelte';
177
+ export { commandPalette } from './stores/commandPalette';
178
178
  // Micro primitives
179
179
  export { default as AnimatedNumber } from './components/AnimatedNumber.svelte';
180
180
  export { default as CopyButton } from './components/CopyButton.svelte';
@@ -0,0 +1,116 @@
1
+ /* commandPalette.svelte.js generated by Svelte v5.53.11 */
2
+ import * as $ from 'svelte/internal/client';
3
+
4
+ var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
5
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
6
+ if (ar || !(i in from)) {
7
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
8
+
9
+ ar[i] = from[i];
10
+ }
11
+ }
12
+
13
+ return to.concat(ar || Array.prototype.slice.call(from));
14
+ };
15
+
16
+ var RECENT_KEY = 'jatui:cmd-palette:recent';
17
+ var MAX_RECENT = 8;
18
+
19
+ function createCommandPaletteStore() {
20
+ var open = $.state(false);
21
+ var groups = $.state($.proxy([]));
22
+ var recentIds = $.state($.proxy([]));
23
+
24
+ // Load recent from localStorage on first access
25
+ function loadRecent() {
26
+ if (typeof localStorage === 'undefined') return;
27
+
28
+ try {
29
+ var raw = localStorage.getItem(RECENT_KEY);
30
+
31
+ $.set(recentIds, raw ? JSON.parse(raw) : [], true);
32
+ } catch(_a) {
33
+ $.set(recentIds, [], true);
34
+ }
35
+ }
36
+
37
+ function saveRecent(ids) {
38
+ if (typeof localStorage === 'undefined') return;
39
+
40
+ try {
41
+ localStorage.setItem(RECENT_KEY, JSON.stringify(ids));
42
+ } catch(_a) {
43
+ // ignore storage errors
44
+ }
45
+ }
46
+
47
+ function recordRecent(id) {
48
+ var updated = __spreadArray(
49
+ [id],
50
+ $.safe_get(recentIds).filter(function (r) {
51
+ return r !== id;
52
+ }),
53
+ true
54
+ ).slice(0, MAX_RECENT);
55
+
56
+ $.set(recentIds, updated, true);
57
+ saveRecent(updated);
58
+ }
59
+
60
+ return {
61
+ get open() {
62
+ return $.safe_get(open);
63
+ },
64
+
65
+ get groups() {
66
+ return $.safe_get(groups);
67
+ },
68
+
69
+ get recentIds() {
70
+ return $.safe_get(recentIds);
71
+ },
72
+
73
+ registerCommands(groupLabel, items) {
74
+ var existing = $.safe_get(groups).find(function (g) {
75
+ return g.label === groupLabel;
76
+ });
77
+
78
+ if (existing) {
79
+ existing.items = items;
80
+ } else {
81
+ $.set(groups, __spreadArray(__spreadArray([], $.safe_get(groups), true), [{ label: groupLabel, items }], false), true);
82
+ }
83
+ },
84
+
85
+ openPalette() {
86
+ loadRecent();
87
+ $.set(open, true);
88
+ },
89
+
90
+ closePalette() {
91
+ $.set(open, false);
92
+ },
93
+
94
+ runCommand(item) {
95
+ recordRecent(item.id);
96
+ $.set(open, false);
97
+ item.action();
98
+ },
99
+
100
+ getRecentItems() {
101
+ var allItems = $.safe_get(groups).flatMap(function (g) {
102
+ return g.items;
103
+ });
104
+
105
+ return $.safe_get(recentIds).map(function (id) {
106
+ return allItems.find(function (i) {
107
+ return i.id === id;
108
+ });
109
+ }).filter(function (i) {
110
+ return !!i;
111
+ });
112
+ }
113
+ };
114
+ }
115
+
116
+ export var commandPalette = createCommandPaletteStore();
@@ -0,0 +1,37 @@
1
+ /* confirmDialog.svelte.js generated by Svelte v5.53.11 */
2
+ import * as $ from 'svelte/internal/client';
3
+
4
+ var pending = $.state(null);
5
+
6
+ export function getPending() {
7
+ return $.safe_get(pending);
8
+ }
9
+
10
+ export function showConfirm(options) {
11
+ // If a dialog is already open, cancel it first.
12
+ if ($.safe_get(pending)) {
13
+ $.safe_get(pending).resolve(false);
14
+ }
15
+
16
+ return new Promise(function (resolve) {
17
+ $.set(pending, { options, resolve }, true);
18
+ });
19
+ }
20
+
21
+ export function confirmDialog() {
22
+ if (!$.safe_get(pending)) return;
23
+
24
+ var p = $.safe_get(pending);
25
+
26
+ $.set(pending, null);
27
+ p.resolve(true);
28
+ }
29
+
30
+ export function cancelDialog() {
31
+ if (!$.safe_get(pending)) return;
32
+
33
+ var p = $.safe_get(pending);
34
+
35
+ $.set(pending, null);
36
+ p.resolve(false);
37
+ }
@@ -0,0 +1,37 @@
1
+ /* inputDialog.svelte.js generated by Svelte v5.53.11 */
2
+ import * as $ from 'svelte/internal/client';
3
+
4
+ var pending = $.state(null);
5
+
6
+ export function getPendingInput() {
7
+ return $.safe_get(pending);
8
+ }
9
+
10
+ export function showInput(options) {
11
+ // If a dialog is already open, cancel it first.
12
+ if ($.safe_get(pending)) {
13
+ $.safe_get(pending).resolve(null);
14
+ }
15
+
16
+ return new Promise(function (resolve) {
17
+ $.set(pending, { options, resolve }, true);
18
+ });
19
+ }
20
+
21
+ export function submitInput(value) {
22
+ if (!$.safe_get(pending)) return;
23
+
24
+ var p = $.safe_get(pending);
25
+
26
+ $.set(pending, null);
27
+ p.resolve(value);
28
+ }
29
+
30
+ export function cancelInput() {
31
+ if (!$.safe_get(pending)) return;
32
+
33
+ var p = $.safe_get(pending);
34
+
35
+ $.set(pending, null);
36
+ p.resolve(null);
37
+ }
@@ -0,0 +1,53 @@
1
+ /* toast.svelte.js generated by Svelte v5.53.11 */
2
+ import * as $ from 'svelte/internal/client';
3
+
4
+ var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
5
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
6
+ if (ar || !(i in from)) {
7
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
8
+
9
+ ar[i] = from[i];
10
+ }
11
+ }
12
+
13
+ return to.concat(ar || Array.prototype.slice.call(from));
14
+ };
15
+
16
+ var nextId = 0;
17
+ var toasts = $.state($.proxy([]));
18
+
19
+ export function getToasts() {
20
+ return $.safe_get(toasts);
21
+ }
22
+
23
+ export function showToast(options) {
24
+ var _a, _b;
25
+ var id = ++nextId;
26
+
27
+ var toast = {
28
+ id,
29
+ type: (_a = options.type) !== null && _a !== void 0 ? _a : 'info',
30
+ message: options.message,
31
+ action: options.action,
32
+ durationMs: (_b = options.durationMs) !== null && _b !== void 0 ? _b : 5000,
33
+ onUndo: options.onUndo
34
+ };
35
+
36
+ $.set(toasts, __spreadArray(__spreadArray([], $.safe_get(toasts), true), [toast], false), true);
37
+
38
+ return {
39
+ dismiss() {
40
+ return dismissToast(id);
41
+ }
42
+ };
43
+ }
44
+
45
+ export function dismissToast(id) {
46
+ $.set(
47
+ toasts,
48
+ $.safe_get(toasts).filter(function (t) {
49
+ return t.id !== id;
50
+ }),
51
+ true
52
+ );
53
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joewinke/jatui",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "private": false,
5
5
  "description": "Shared Svelte 5 component library for JAT projects",
6
6
  "type": "module",
@@ -67,7 +67,7 @@
67
67
  "build": "vite build",
68
68
  "build:site": "npm run package && vite build",
69
69
  "preview": "vite preview",
70
- "package": "svelte-package --input src/lib --output dist",
70
+ "package": "svelte-package --input src/lib --output dist && node scripts/compile-rune-modules.mjs",
71
71
  "check:demos": "node scripts/check-demo-coverage.mjs",
72
72
  "guard": "node scripts/check-demo-coverage.mjs",
73
73
  "prepublishOnly": "npm run package"
@@ -1,217 +0,0 @@
1
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
- if (ar || !(i in from)) {
4
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
5
- ar[i] = from[i];
6
- }
7
- }
8
- return to.concat(ar || Array.prototype.slice.call(from));
9
- };
10
- import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
11
- import { extractClosestEdge, attachClosestEdge, } from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
12
- import { SvelteMap } from 'svelte/reactivity';
13
- import { announce } from './announce';
14
- import { makeItemData, isItemData, } from './types';
15
- var SHADOW_KEY = '__dnd-shadow__';
16
- export function createDndBoard(opts) {
17
- var _a, _b;
18
- var edges = (_a = opts.edges) !== null && _a !== void 0 ? _a : ['top', 'bottom'];
19
- var hover = (_b = opts.hover) !== null && _b !== void 0 ? _b : 'indicator';
20
- var mirror = new SvelteMap();
21
- var dragging = $state(null);
22
- var proposal = $state(null);
23
- var seq = new Map();
24
- var inFlight = 0;
25
- var seedQueued = false;
26
- function seed() {
27
- mirror.clear();
28
- var src = opts.items();
29
- var entries = src instanceof Map
30
- ? src
31
- : new Map(Object.entries(src));
32
- for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
33
- var _a = entries_1[_i], id = _a[0], list = _a[1];
34
- mirror.set(id, __spreadArray([], list, true));
35
- }
36
- }
37
- $effect(function () {
38
- opts.items();
39
- if (dragging || inFlight > 0) {
40
- seedQueued = true;
41
- return;
42
- }
43
- seed();
44
- });
45
- function placementFrom(dropTargets) {
46
- var _a;
47
- var inner = dropTargets[0];
48
- if (!inner)
49
- return null;
50
- var d = inner.data;
51
- if (typeof d.container !== 'string')
52
- return null;
53
- var list = (_a = mirror.get(d.container)) !== null && _a !== void 0 ? _a : [];
54
- if (typeof d.index !== 'number')
55
- return { container: d.container, index: list.length };
56
- var edge = extractClosestEdge(d);
57
- var after = edge === 'bottom' || edge === 'right';
58
- return { container: d.container, index: d.index + (after ? 1 : 0) };
59
- }
60
- function syncShadow(next) {
61
- var _a;
62
- var _b;
63
- for (var _i = 0, mirror_1 = mirror; _i < mirror_1.length; _i++) {
64
- var _c = mirror_1[_i], cid = _c[0], list_1 = _c[1];
65
- var idx = list_1.findIndex(function (item) { return item[SHADOW_KEY]; });
66
- if (idx !== -1) {
67
- list_1.splice(idx, 1);
68
- mirror.set(cid, list_1);
69
- break;
70
- }
71
- }
72
- if (!next || !dragging)
73
- return;
74
- var list = __spreadArray([], ((_b = mirror.get(next.container)) !== null && _b !== void 0 ? _b : []), true);
75
- var shadowItem = (_a = {}, _a[SHADOW_KEY] = true, _a.key = "".concat(SHADOW_KEY, "-").concat(dragging.key), _a);
76
- list.splice(Math.min(next.index, list.length), 0, shadowItem);
77
- mirror.set(next.container, list);
78
- }
79
- function consider(next) {
80
- if ((next === null || next === void 0 ? void 0 : next.container) === (proposal === null || proposal === void 0 ? void 0 : proposal.container) && (next === null || next === void 0 ? void 0 : next.index) === (proposal === null || proposal === void 0 ? void 0 : proposal.index))
81
- return;
82
- proposal = next;
83
- if (hover === 'shadow')
84
- syncShadow(next);
85
- }
86
- function applyToMirror(move) {
87
- var _a, _b;
88
- var fromList = __spreadArray([], ((_a = mirror.get(move.from.container)) !== null && _a !== void 0 ? _a : []), true);
89
- var toList = move.from.container === move.to.container
90
- ? fromList
91
- : __spreadArray([], ((_b = mirror.get(move.to.container)) !== null && _b !== void 0 ? _b : []), true);
92
- var srcIdx = fromList.findIndex(function (it) { return opts.key(it) === opts.key(move.item); });
93
- if (srcIdx === -1)
94
- return;
95
- fromList.splice(srcIdx, 1);
96
- var destIdx = move.to.index;
97
- if (move.from.container === move.to.container && move.to.index > move.from.index) {
98
- destIdx = Math.max(0, destIdx - 1);
99
- }
100
- toList.splice(Math.min(destIdx, toList.length), 0, move.item);
101
- mirror.set(move.from.container, fromList);
102
- if (move.from.container !== move.to.container) {
103
- mirror.set(move.to.container, toList);
104
- }
105
- }
106
- function rollback(move) {
107
- var _a;
108
- for (var _i = 0, mirror_2 = mirror; _i < mirror_2.length; _i++) {
109
- var _b = mirror_2[_i], cid = _b[0], list = _b[1];
110
- var idx = list.findIndex(function (it) { return opts.key(it) === opts.key(move.item); });
111
- if (idx !== -1) {
112
- list.splice(idx, 1);
113
- mirror.set(cid, list);
114
- break;
115
- }
116
- }
117
- var fromList = __spreadArray([], ((_a = mirror.get(move.from.container)) !== null && _a !== void 0 ? _a : []), true);
118
- fromList.splice(Math.min(move.from.index, fromList.length), 0, move.item);
119
- mirror.set(move.from.container, fromList);
120
- }
121
- function finalize(dropped) {
122
- var _a;
123
- var drag = dragging;
124
- var to = dropped ? proposal : null;
125
- dragging = null;
126
- consider(null);
127
- if (!drag)
128
- return;
129
- if (!to ||
130
- (to.container === drag.from.container && to.index === drag.from.index)) {
131
- if (seedQueued && inFlight === 0) {
132
- seedQueued = false;
133
- seed();
134
- }
135
- return;
136
- }
137
- var move = { item: drag.item, from: drag.from, to: to };
138
- applyToMirror(move);
139
- if (opts.announce)
140
- announce(opts.announce(move));
141
- var token = ((_a = seq.get(drag.key)) !== null && _a !== void 0 ? _a : 0) + 1;
142
- seq.set(drag.key, token);
143
- inFlight++;
144
- opts
145
- .commit(move)
146
- .catch(function (error) {
147
- var _a;
148
- if (seq.get(drag.key) === token)
149
- rollback(move);
150
- (_a = opts.onError) === null || _a === void 0 ? void 0 : _a.call(opts, error, move);
151
- })
152
- .finally(function () {
153
- inFlight--;
154
- if (inFlight === 0 && seedQueued && !dragging) {
155
- seedQueued = false;
156
- seed();
157
- }
158
- });
159
- }
160
- $effect(function () {
161
- return monitorForElements({
162
- canMonitor: function (_a) {
163
- var source = _a.source;
164
- return isItemData(source.data, opts.type);
165
- },
166
- onDragStart: function (_a) {
167
- var source = _a.source;
168
- var d = source.data;
169
- dragging = {
170
- key: d.key,
171
- item: d.item,
172
- from: { container: d.container, index: d.index },
173
- };
174
- },
175
- onDropTargetChange: function (_a) {
176
- var location = _a.location;
177
- consider(placementFrom(location.current.dropTargets));
178
- },
179
- onDrag: function (_a) {
180
- var location = _a.location;
181
- consider(placementFrom(location.current.dropTargets));
182
- },
183
- onDrop: function (_a) {
184
- var location = _a.location;
185
- finalize(location.current.dropTargets.length > 0);
186
- },
187
- });
188
- });
189
- return {
190
- get: function (container) { var _a; return (_a = mirror.get(container)) !== null && _a !== void 0 ? _a : []; },
191
- containers: function () { return __spreadArray([], mirror.keys(), true); },
192
- get dragging() {
193
- return dragging;
194
- },
195
- get proposal() {
196
- return proposal;
197
- },
198
- isSource: function (item) { return (dragging === null || dragging === void 0 ? void 0 : dragging.key) === opts.key(item); },
199
- isShadow: function (item) {
200
- return !!item[SHADOW_KEY];
201
- },
202
- item: function (item, container, index) { return ({
203
- data: function () { return makeItemData({ type: opts.type, key: opts.key(item), item: item, container: container, index: index }); },
204
- }); },
205
- itemTarget: function (container, index) { return ({
206
- data: function (feedback) {
207
- return attachClosestEdge({ type: "".concat(opts.type, "-target"), container: container, index: index }, { input: feedback.input, element: feedback.element, allowedEdges: edges });
208
- },
209
- accepts: function (d) { return isItemData(d, opts.type); },
210
- sticky: true,
211
- }); },
212
- containerTarget: function (container) { return ({
213
- data: function () { return ({ type: "".concat(opts.type, "-target"), container: container }); },
214
- accepts: function (d) { return isItemData(d, opts.type); },
215
- }); },
216
- };
217
- }
@@ -1,82 +0,0 @@
1
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
- if (ar || !(i in from)) {
4
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
5
- ar[i] = from[i];
6
- }
7
- }
8
- return to.concat(ar || Array.prototype.slice.call(from));
9
- };
10
- var RECENT_KEY = 'jatui:cmd-palette:recent';
11
- var MAX_RECENT = 8;
12
- function createCommandPaletteStore() {
13
- var open = $state(false);
14
- var groups = $state([]);
15
- var recentIds = $state([]);
16
- // Load recent from localStorage on first access
17
- function loadRecent() {
18
- if (typeof localStorage === 'undefined')
19
- return;
20
- try {
21
- var raw = localStorage.getItem(RECENT_KEY);
22
- recentIds = raw ? JSON.parse(raw) : [];
23
- }
24
- catch (_a) {
25
- recentIds = [];
26
- }
27
- }
28
- function saveRecent(ids) {
29
- if (typeof localStorage === 'undefined')
30
- return;
31
- try {
32
- localStorage.setItem(RECENT_KEY, JSON.stringify(ids));
33
- }
34
- catch (_a) {
35
- // ignore storage errors
36
- }
37
- }
38
- function recordRecent(id) {
39
- var updated = __spreadArray([id], recentIds.filter(function (r) { return r !== id; }), true).slice(0, MAX_RECENT);
40
- recentIds = updated;
41
- saveRecent(updated);
42
- }
43
- return {
44
- get open() {
45
- return open;
46
- },
47
- get groups() {
48
- return groups;
49
- },
50
- get recentIds() {
51
- return recentIds;
52
- },
53
- registerCommands: function (groupLabel, items) {
54
- var existing = groups.find(function (g) { return g.label === groupLabel; });
55
- if (existing) {
56
- existing.items = items;
57
- }
58
- else {
59
- groups = __spreadArray(__spreadArray([], groups, true), [{ label: groupLabel, items: items }], false);
60
- }
61
- },
62
- openPalette: function () {
63
- loadRecent();
64
- open = true;
65
- },
66
- closePalette: function () {
67
- open = false;
68
- },
69
- runCommand: function (item) {
70
- recordRecent(item.id);
71
- open = false;
72
- item.action();
73
- },
74
- getRecentItems: function () {
75
- var allItems = groups.flatMap(function (g) { return g.items; });
76
- return recentIds
77
- .map(function (id) { return allItems.find(function (i) { return i.id === id; }); })
78
- .filter(function (i) { return !!i; });
79
- }
80
- };
81
- }
82
- export var commandPalette = createCommandPaletteStore();
@@ -1,31 +0,0 @@
1
- /**
2
- * Global promise-based confirm dialog.
3
- * Usage: const ok = await showConfirm({ title: '...', body: '...' })
4
- */
5
- var pending = $state(null);
6
- export function getPending() {
7
- return pending;
8
- }
9
- export function showConfirm(options) {
10
- // If a dialog is already open, cancel it first.
11
- if (pending) {
12
- pending.resolve(false);
13
- }
14
- return new Promise(function (resolve) {
15
- pending = { options: options, resolve: resolve };
16
- });
17
- }
18
- export function confirmDialog() {
19
- if (!pending)
20
- return;
21
- var p = pending;
22
- pending = null;
23
- p.resolve(true);
24
- }
25
- export function cancelDialog() {
26
- if (!pending)
27
- return;
28
- var p = pending;
29
- pending = null;
30
- p.resolve(false);
31
- }
@@ -1,32 +0,0 @@
1
- /**
2
- * Global promise-based input dialog.
3
- * Usage: const value = await showInput({ title: '...', placeholder: '...' })
4
- * Returns the typed string if confirmed, null if cancelled.
5
- */
6
- var pending = $state(null);
7
- export function getPendingInput() {
8
- return pending;
9
- }
10
- export function showInput(options) {
11
- // If a dialog is already open, cancel it first.
12
- if (pending) {
13
- pending.resolve(null);
14
- }
15
- return new Promise(function (resolve) {
16
- pending = { options: options, resolve: resolve };
17
- });
18
- }
19
- export function submitInput(value) {
20
- if (!pending)
21
- return;
22
- var p = pending;
23
- pending = null;
24
- p.resolve(value);
25
- }
26
- export function cancelInput() {
27
- if (!pending)
28
- return;
29
- var p = pending;
30
- pending = null;
31
- p.resolve(null);
32
- }
@@ -1,33 +0,0 @@
1
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
- if (ar || !(i in from)) {
4
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
5
- ar[i] = from[i];
6
- }
7
- }
8
- return to.concat(ar || Array.prototype.slice.call(from));
9
- };
10
- var nextId = 0;
11
- var toasts = $state([]);
12
- export function getToasts() {
13
- return toasts;
14
- }
15
- export function showToast(options) {
16
- var _a, _b;
17
- var id = ++nextId;
18
- var toast = {
19
- id: id,
20
- type: (_a = options.type) !== null && _a !== void 0 ? _a : 'info',
21
- message: options.message,
22
- action: options.action,
23
- durationMs: (_b = options.durationMs) !== null && _b !== void 0 ? _b : 5000,
24
- onUndo: options.onUndo
25
- };
26
- toasts = __spreadArray(__spreadArray([], toasts, true), [toast], false);
27
- return {
28
- dismiss: function () { return dismissToast(id); }
29
- };
30
- }
31
- export function dismissToast(id) {
32
- toasts = toasts.filter(function (t) { return t.id !== id; });
33
- }
File without changes