@chenzy-design/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/back-top.d.ts +16 -0
- package/dist/back-top.d.ts.map +1 -0
- package/dist/back-top.js +29 -0
- package/dist/back-top.js.map +1 -0
- package/dist/back-top.test.d.ts +2 -0
- package/dist/back-top.test.d.ts.map +1 -0
- package/dist/back-top.test.js +44 -0
- package/dist/back-top.test.js.map +1 -0
- package/dist/banner.d.ts +19 -0
- package/dist/banner.d.ts.map +1 -0
- package/dist/banner.js +20 -0
- package/dist/banner.js.map +1 -0
- package/dist/banner.test.d.ts +2 -0
- package/dist/banner.test.d.ts.map +1 -0
- package/dist/banner.test.js +29 -0
- package/dist/banner.test.js.map +1 -0
- package/dist/breakpoints.d.ts +30 -0
- package/dist/breakpoints.d.ts.map +1 -0
- package/dist/breakpoints.js +45 -0
- package/dist/breakpoints.js.map +1 -0
- package/dist/breakpoints.test.d.ts +2 -0
- package/dist/breakpoints.test.d.ts.map +1 -0
- package/dist/breakpoints.test.js +46 -0
- package/dist/breakpoints.test.js.map +1 -0
- package/dist/calendar.d.ts +63 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +94 -0
- package/dist/calendar.js.map +1 -0
- package/dist/calendar.test.d.ts +2 -0
- package/dist/calendar.test.d.ts.map +1 -0
- package/dist/calendar.test.js +88 -0
- package/dist/calendar.test.js.map +1 -0
- package/dist/cascader.d.ts +64 -0
- package/dist/cascader.d.ts.map +1 -0
- package/dist/cascader.js +79 -0
- package/dist/cascader.js.map +1 -0
- package/dist/cascader.test.d.ts +2 -0
- package/dist/cascader.test.d.ts.map +1 -0
- package/dist/cascader.test.js +107 -0
- package/dist/cascader.test.js.map +1 -0
- package/dist/color.d.ts +70 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +217 -0
- package/dist/color.js.map +1 -0
- package/dist/color.test.d.ts +2 -0
- package/dist/color.test.d.ts.map +1 -0
- package/dist/color.test.js +161 -0
- package/dist/color.test.js.map +1 -0
- package/dist/config-provider.d.ts +57 -0
- package/dist/config-provider.d.ts.map +1 -0
- package/dist/config-provider.js +49 -0
- package/dist/config-provider.js.map +1 -0
- package/dist/config-provider.test.d.ts +2 -0
- package/dist/config-provider.test.d.ts.map +1 -0
- package/dist/config-provider.test.js +76 -0
- package/dist/config-provider.test.js.map +1 -0
- package/dist/copyable.d.ts +43 -0
- package/dist/copyable.d.ts.map +1 -0
- package/dist/copyable.js +102 -0
- package/dist/copyable.js.map +1 -0
- package/dist/copyable.test.d.ts +2 -0
- package/dist/copyable.test.d.ts.map +1 -0
- package/dist/copyable.test.js +97 -0
- package/dist/copyable.test.js.map +1 -0
- package/dist/date.d.ts +86 -0
- package/dist/date.d.ts.map +1 -0
- package/dist/date.js +226 -0
- package/dist/date.js.map +1 -0
- package/dist/date.test.d.ts +2 -0
- package/dist/date.test.d.ts.map +1 -0
- package/dist/date.test.js +171 -0
- package/dist/date.test.js.map +1 -0
- package/dist/dismiss.d.ts +28 -0
- package/dist/dismiss.d.ts.map +1 -0
- package/dist/dismiss.js +42 -0
- package/dist/dismiss.js.map +1 -0
- package/dist/editable.d.ts +59 -0
- package/dist/editable.d.ts.map +1 -0
- package/dist/editable.js +85 -0
- package/dist/editable.js.map +1 -0
- package/dist/editable.test.d.ts +2 -0
- package/dist/editable.test.d.ts.map +1 -0
- package/dist/editable.test.js +111 -0
- package/dist/editable.test.js.map +1 -0
- package/dist/ellipsis.d.ts +76 -0
- package/dist/ellipsis.d.ts.map +1 -0
- package/dist/ellipsis.js +99 -0
- package/dist/ellipsis.js.map +1 -0
- package/dist/ellipsis.test.d.ts +2 -0
- package/dist/ellipsis.test.d.ts.map +1 -0
- package/dist/ellipsis.test.js +94 -0
- package/dist/ellipsis.test.js.map +1 -0
- package/dist/floating.d.ts +78 -0
- package/dist/floating.d.ts.map +1 -0
- package/dist/floating.js +169 -0
- package/dist/floating.js.map +1 -0
- package/dist/floating.test.d.ts +2 -0
- package/dist/floating.test.d.ts.map +1 -0
- package/dist/floating.test.js +169 -0
- package/dist/floating.test.js.map +1 -0
- package/dist/focus-trap.d.ts +24 -0
- package/dist/focus-trap.d.ts.map +1 -0
- package/dist/focus-trap.js +64 -0
- package/dist/focus-trap.js.map +1 -0
- package/dist/form.d.ts +131 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +257 -0
- package/dist/form.js.map +1 -0
- package/dist/form.test.d.ts +2 -0
- package/dist/form.test.d.ts.map +1 -0
- package/dist/form.test.js +323 -0
- package/dist/form.test.js.map +1 -0
- package/dist/highlight.d.ts +57 -0
- package/dist/highlight.d.ts.map +1 -0
- package/dist/highlight.js +124 -0
- package/dist/highlight.js.map +1 -0
- package/dist/highlight.test.d.ts +2 -0
- package/dist/highlight.test.d.ts.map +1 -0
- package/dist/highlight.test.js +155 -0
- package/dist/highlight.test.js.map +1 -0
- package/dist/id.d.ts +4 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +14 -0
- package/dist/id.js.map +1 -0
- package/dist/id.test.d.ts +2 -0
- package/dist/id.test.d.ts.map +1 -0
- package/dist/id.test.js +13 -0
- package/dist/id.test.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/inert-background.d.ts +27 -0
- package/dist/inert-background.d.ts.map +1 -0
- package/dist/inert-background.js +92 -0
- package/dist/inert-background.js.map +1 -0
- package/dist/inert-background.test.d.ts +2 -0
- package/dist/inert-background.test.d.ts.map +1 -0
- package/dist/inert-background.test.js +62 -0
- package/dist/inert-background.test.js.map +1 -0
- package/dist/input-number.d.ts +34 -0
- package/dist/input-number.d.ts.map +1 -0
- package/dist/input-number.js +69 -0
- package/dist/input-number.js.map +1 -0
- package/dist/input-number.test.d.ts +2 -0
- package/dist/input-number.test.d.ts.map +1 -0
- package/dist/input-number.test.js +74 -0
- package/dist/input-number.test.js.map +1 -0
- package/dist/list-selection.d.ts +38 -0
- package/dist/list-selection.d.ts.map +1 -0
- package/dist/list-selection.js +61 -0
- package/dist/list-selection.js.map +1 -0
- package/dist/list-selection.test.d.ts +2 -0
- package/dist/list-selection.test.d.ts.map +1 -0
- package/dist/list-selection.test.js +61 -0
- package/dist/list-selection.test.js.map +1 -0
- package/dist/live-announcer.d.ts +38 -0
- package/dist/live-announcer.d.ts.map +1 -0
- package/dist/live-announcer.js +89 -0
- package/dist/live-announcer.js.map +1 -0
- package/dist/live-announcer.test.d.ts +2 -0
- package/dist/live-announcer.test.d.ts.map +1 -0
- package/dist/live-announcer.test.js +70 -0
- package/dist/live-announcer.test.js.map +1 -0
- package/dist/lottie-icon.d.ts +88 -0
- package/dist/lottie-icon.d.ts.map +1 -0
- package/dist/lottie-icon.js +84 -0
- package/dist/lottie-icon.js.map +1 -0
- package/dist/lottie-icon.test.d.ts +2 -0
- package/dist/lottie-icon.test.d.ts.map +1 -0
- package/dist/lottie-icon.test.js +88 -0
- package/dist/lottie-icon.test.js.map +1 -0
- package/dist/notification.d.ts +61 -0
- package/dist/notification.d.ts.map +1 -0
- package/dist/notification.js +133 -0
- package/dist/notification.js.map +1 -0
- package/dist/notification.test.d.ts +2 -0
- package/dist/notification.test.d.ts.map +1 -0
- package/dist/notification.test.js +103 -0
- package/dist/notification.test.js.map +1 -0
- package/dist/overflow-list.d.ts +102 -0
- package/dist/overflow-list.d.ts.map +1 -0
- package/dist/overflow-list.js +159 -0
- package/dist/overflow-list.js.map +1 -0
- package/dist/overflow-list.test.d.ts +2 -0
- package/dist/overflow-list.test.d.ts.map +1 -0
- package/dist/overflow-list.test.js +223 -0
- package/dist/overflow-list.test.js.map +1 -0
- package/dist/pagination.d.ts +51 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +127 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pagination.test.d.ts +2 -0
- package/dist/pagination.test.d.ts.map +1 -0
- package/dist/pagination.test.js +147 -0
- package/dist/pagination.test.js.map +1 -0
- package/dist/progress.d.ts +64 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +92 -0
- package/dist/progress.js.map +1 -0
- package/dist/progress.test.d.ts +2 -0
- package/dist/progress.test.d.ts.map +1 -0
- package/dist/progress.test.js +79 -0
- package/dist/progress.test.js.map +1 -0
- package/dist/resize-observer.d.ts +133 -0
- package/dist/resize-observer.d.ts.map +1 -0
- package/dist/resize-observer.js +358 -0
- package/dist/resize-observer.js.map +1 -0
- package/dist/resize-observer.test.d.ts +2 -0
- package/dist/resize-observer.test.d.ts.map +1 -0
- package/dist/resize-observer.test.js +377 -0
- package/dist/resize-observer.test.js.map +1 -0
- package/dist/roving.d.ts +26 -0
- package/dist/roving.d.ts.map +1 -0
- package/dist/roving.js +61 -0
- package/dist/roving.js.map +1 -0
- package/dist/roving.test.d.ts +2 -0
- package/dist/roving.test.d.ts.map +1 -0
- package/dist/roving.test.js +48 -0
- package/dist/roving.test.js.map +1 -0
- package/dist/scroll-list.d.ts +81 -0
- package/dist/scroll-list.d.ts.map +1 -0
- package/dist/scroll-list.js +175 -0
- package/dist/scroll-list.js.map +1 -0
- package/dist/scroll-list.test.d.ts +2 -0
- package/dist/scroll-list.test.d.ts.map +1 -0
- package/dist/scroll-list.test.js +135 -0
- package/dist/scroll-list.test.js.map +1 -0
- package/dist/scroll-lock.d.ts +11 -0
- package/dist/scroll-lock.d.ts.map +1 -0
- package/dist/scroll-lock.js +45 -0
- package/dist/scroll-lock.js.map +1 -0
- package/dist/scroll-lock.test.d.ts +2 -0
- package/dist/scroll-lock.test.d.ts.map +1 -0
- package/dist/scroll-lock.test.js +55 -0
- package/dist/scroll-lock.test.js.map +1 -0
- package/dist/sider.d.ts +26 -0
- package/dist/sider.d.ts.map +1 -0
- package/dist/sider.js +55 -0
- package/dist/sider.js.map +1 -0
- package/dist/sider.test.d.ts +2 -0
- package/dist/sider.test.d.ts.map +1 -0
- package/dist/sider.test.js +29 -0
- package/dist/sider.test.js.map +1 -0
- package/dist/spin.d.ts +25 -0
- package/dist/spin.d.ts.map +1 -0
- package/dist/spin.js +96 -0
- package/dist/spin.js.map +1 -0
- package/dist/spin.test.d.ts +2 -0
- package/dist/spin.test.d.ts.map +1 -0
- package/dist/spin.test.js +80 -0
- package/dist/spin.test.js.map +1 -0
- package/dist/table.d.ts +101 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +244 -0
- package/dist/table.js.map +1 -0
- package/dist/table.test.d.ts +2 -0
- package/dist/table.test.d.ts.map +1 -0
- package/dist/table.test.js +184 -0
- package/dist/table.test.js.map +1 -0
- package/dist/textarea.d.ts +48 -0
- package/dist/textarea.d.ts.map +1 -0
- package/dist/textarea.js +76 -0
- package/dist/textarea.js.map +1 -0
- package/dist/textarea.test.d.ts +2 -0
- package/dist/textarea.test.d.ts.map +1 -0
- package/dist/textarea.test.js +77 -0
- package/dist/textarea.test.js.map +1 -0
- package/dist/time.d.ts +93 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +181 -0
- package/dist/time.js.map +1 -0
- package/dist/time.test.d.ts +2 -0
- package/dist/time.test.d.ts.map +1 -0
- package/dist/time.test.js +159 -0
- package/dist/time.test.js.map +1 -0
- package/dist/toast.d.ts +60 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +135 -0
- package/dist/toast.js.map +1 -0
- package/dist/toast.test.d.ts +2 -0
- package/dist/toast.test.d.ts.map +1 -0
- package/dist/toast.test.js +127 -0
- package/dist/toast.test.js.map +1 -0
- package/dist/tree.d.ts +129 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +351 -0
- package/dist/tree.js.map +1 -0
- package/dist/tree.test.d.ts +2 -0
- package/dist/tree.test.d.ts.map +1 -0
- package/dist/tree.test.js +291 -0
- package/dist/tree.test.js.map +1 -0
- package/dist/upload.d.ts +62 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +85 -0
- package/dist/upload.js.map +1 -0
- package/dist/upload.test.d.ts +2 -0
- package/dist/upload.test.d.ts.map +1 -0
- package/dist/upload.test.js +169 -0
- package/dist/upload.test.js.map +1 -0
- package/dist/virtual-list.d.ts +83 -0
- package/dist/virtual-list.d.ts.map +1 -0
- package/dist/virtual-list.js +143 -0
- package/dist/virtual-list.js.map +1 -0
- package/dist/virtual-list.test.d.ts +2 -0
- package/dist/virtual-list.test.d.ts.map +1 -0
- package/dist/virtual-list.test.js +148 -0
- package/dist/virtual-list.test.js.map +1 -0
- package/package.json +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spin.d.ts","sourceRoot":"","sources":["../src/spin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,YAAY,IAAI,OAAO,CAAC;IACxB,qEAAqE;IACrE,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,2DAA2D;IAC3D,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,qCAAqC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,WAAgB,GAAG,cAAc,CAqF9E"}
|
package/dist/spin.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createSpinController — framework-agnostic loading-state debouncer for Spin.
|
|
3
|
+
* Handles `delay` (wait before showing, to avoid flicker on fast requests) and
|
|
4
|
+
* `minShowTime` (keep showing at least this long once shown). Uses timers only;
|
|
5
|
+
* SSR-safe because the consumer starts it in a client effect. No DOM, no
|
|
6
|
+
* framework deps. See specs/components/feedback/Spin.spec.md §3.
|
|
7
|
+
*/
|
|
8
|
+
export function createSpinController(options = {}) {
|
|
9
|
+
const { delay = 0, minShowTime = 0 } = options;
|
|
10
|
+
let requested = options.spinning ?? false;
|
|
11
|
+
let effective = false;
|
|
12
|
+
let shownAt = 0;
|
|
13
|
+
let delayTimer = null;
|
|
14
|
+
let minTimer = null;
|
|
15
|
+
const listeners = new Set();
|
|
16
|
+
function clearDelay() {
|
|
17
|
+
if (delayTimer !== null) {
|
|
18
|
+
clearTimeout(delayTimer);
|
|
19
|
+
delayTimer = null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function clearMin() {
|
|
23
|
+
if (minTimer !== null) {
|
|
24
|
+
clearTimeout(minTimer);
|
|
25
|
+
minTimer = null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function setEffective(value) {
|
|
29
|
+
if (effective === value)
|
|
30
|
+
return;
|
|
31
|
+
effective = value;
|
|
32
|
+
if (value)
|
|
33
|
+
shownAt = Date.now();
|
|
34
|
+
for (const l of listeners)
|
|
35
|
+
l(effective);
|
|
36
|
+
}
|
|
37
|
+
function show() {
|
|
38
|
+
clearDelay();
|
|
39
|
+
if (delay > 0 && !effective) {
|
|
40
|
+
delayTimer = setTimeout(() => {
|
|
41
|
+
delayTimer = null;
|
|
42
|
+
setEffective(true);
|
|
43
|
+
}, delay);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
setEffective(true);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function hide() {
|
|
50
|
+
clearDelay(); // cancel a pending show — never displayed, never announced
|
|
51
|
+
if (!effective)
|
|
52
|
+
return;
|
|
53
|
+
if (minShowTime > 0) {
|
|
54
|
+
const elapsed = Date.now() - shownAt;
|
|
55
|
+
const remaining = minShowTime - elapsed;
|
|
56
|
+
if (remaining > 0) {
|
|
57
|
+
clearMin();
|
|
58
|
+
minTimer = setTimeout(() => {
|
|
59
|
+
minTimer = null;
|
|
60
|
+
if (!requested)
|
|
61
|
+
setEffective(false);
|
|
62
|
+
}, remaining);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
setEffective(false);
|
|
67
|
+
}
|
|
68
|
+
// apply the initial request synchronously-ish (delay still honored)
|
|
69
|
+
if (requested)
|
|
70
|
+
show();
|
|
71
|
+
return {
|
|
72
|
+
getEffective: () => effective,
|
|
73
|
+
subscribe(listener) {
|
|
74
|
+
listeners.add(listener);
|
|
75
|
+
return () => listeners.delete(listener);
|
|
76
|
+
},
|
|
77
|
+
setSpinning(value) {
|
|
78
|
+
if (value === requested)
|
|
79
|
+
return;
|
|
80
|
+
requested = value;
|
|
81
|
+
if (value) {
|
|
82
|
+
clearMin();
|
|
83
|
+
show();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
hide();
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
destroy() {
|
|
90
|
+
clearDelay();
|
|
91
|
+
clearMin();
|
|
92
|
+
listeners.clear();
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=spin.js.map
|
package/dist/spin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spin.js","sourceRoot":"","sources":["../src/spin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spin.test.d.ts","sourceRoot":"","sources":["../src/spin.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { createSpinController } from './spin.js';
|
|
3
|
+
describe('createSpinController', () => {
|
|
4
|
+
beforeEach(() => vi.useFakeTimers());
|
|
5
|
+
afterEach(() => vi.useRealTimers());
|
|
6
|
+
it('shows immediately with no delay', () => {
|
|
7
|
+
const c = createSpinController({ spinning: true });
|
|
8
|
+
expect(c.getEffective()).toBe(true);
|
|
9
|
+
c.destroy();
|
|
10
|
+
});
|
|
11
|
+
it('starts hidden when not spinning', () => {
|
|
12
|
+
const c = createSpinController({ spinning: false });
|
|
13
|
+
expect(c.getEffective()).toBe(false);
|
|
14
|
+
c.destroy();
|
|
15
|
+
});
|
|
16
|
+
it('delays showing by `delay` ms', () => {
|
|
17
|
+
const c = createSpinController({ delay: 200 });
|
|
18
|
+
c.setSpinning(true);
|
|
19
|
+
expect(c.getEffective()).toBe(false);
|
|
20
|
+
vi.advanceTimersByTime(199);
|
|
21
|
+
expect(c.getEffective()).toBe(false);
|
|
22
|
+
vi.advanceTimersByTime(1);
|
|
23
|
+
expect(c.getEffective()).toBe(true);
|
|
24
|
+
c.destroy();
|
|
25
|
+
});
|
|
26
|
+
it('cancels a pending show if spinning turns off within the delay (never shown)', () => {
|
|
27
|
+
const seen = [];
|
|
28
|
+
const c = createSpinController({ delay: 200 });
|
|
29
|
+
c.subscribe((e) => seen.push(e));
|
|
30
|
+
c.setSpinning(true);
|
|
31
|
+
vi.advanceTimersByTime(100);
|
|
32
|
+
c.setSpinning(false); // cancel before delay elapses
|
|
33
|
+
vi.advanceTimersByTime(500);
|
|
34
|
+
expect(c.getEffective()).toBe(false);
|
|
35
|
+
expect(seen).toEqual([]); // never flipped to true → no announcement noise
|
|
36
|
+
c.destroy();
|
|
37
|
+
});
|
|
38
|
+
it('keeps showing for at least minShowTime', () => {
|
|
39
|
+
const c = createSpinController({ minShowTime: 500, spinning: true });
|
|
40
|
+
expect(c.getEffective()).toBe(true);
|
|
41
|
+
vi.advanceTimersByTime(100);
|
|
42
|
+
c.setSpinning(false); // wants to hide after only 100ms
|
|
43
|
+
expect(c.getEffective()).toBe(true); // still held
|
|
44
|
+
vi.advanceTimersByTime(399);
|
|
45
|
+
expect(c.getEffective()).toBe(true);
|
|
46
|
+
vi.advanceTimersByTime(1);
|
|
47
|
+
expect(c.getEffective()).toBe(false); // 500ms reached
|
|
48
|
+
c.destroy();
|
|
49
|
+
});
|
|
50
|
+
it('hides immediately when minShowTime already elapsed', () => {
|
|
51
|
+
const c = createSpinController({ minShowTime: 200, spinning: true });
|
|
52
|
+
vi.advanceTimersByTime(300);
|
|
53
|
+
c.setSpinning(false);
|
|
54
|
+
expect(c.getEffective()).toBe(false);
|
|
55
|
+
c.destroy();
|
|
56
|
+
});
|
|
57
|
+
it('notifies subscribers on effective change', () => {
|
|
58
|
+
const seen = [];
|
|
59
|
+
const c = createSpinController({ delay: 100 });
|
|
60
|
+
c.subscribe((e) => seen.push(e));
|
|
61
|
+
c.setSpinning(true);
|
|
62
|
+
vi.advanceTimersByTime(100);
|
|
63
|
+
c.setSpinning(false);
|
|
64
|
+
expect(seen).toEqual([true, false]);
|
|
65
|
+
c.destroy();
|
|
66
|
+
});
|
|
67
|
+
it('re-show during minShowTime hold keeps it visible (no flto false)', () => {
|
|
68
|
+
const seen = [];
|
|
69
|
+
const c = createSpinController({ minShowTime: 500, spinning: true });
|
|
70
|
+
c.subscribe((e) => seen.push(e));
|
|
71
|
+
vi.advanceTimersByTime(100);
|
|
72
|
+
c.setSpinning(false);
|
|
73
|
+
c.setSpinning(true); // requested again before the min timer fires
|
|
74
|
+
vi.advanceTimersByTime(1000);
|
|
75
|
+
expect(c.getEffective()).toBe(true);
|
|
76
|
+
expect(seen).toEqual([]); // stayed visible throughout
|
|
77
|
+
c.destroy();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=spin.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spin.test.js","sourceRoot":"","sources":["../src/spin.test.ts"],"names":[],"mappings":"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"}
|
package/dist/table.d.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createTable — framework-agnostic table algorithms for Table.svelte.
|
|
3
|
+
* Pure functions only: three-state sort cycling, client-side data pipeline
|
|
4
|
+
* (sort → paginate), and row-selection helpers (all/indeterminate with
|
|
5
|
+
* disabled rows). No DOM, no framework deps, no internal mutable state — the
|
|
6
|
+
* render layer (svelte runes) owns sort/page/selection state and calls these.
|
|
7
|
+
* See specs/components/show/Table.spec.md §3.
|
|
8
|
+
*/
|
|
9
|
+
export type RowKey = string | number;
|
|
10
|
+
export type SortOrder = 'ascend' | 'descend' | null;
|
|
11
|
+
export interface SortState {
|
|
12
|
+
/** column key currently sorted, or null */
|
|
13
|
+
key: string | null;
|
|
14
|
+
order: SortOrder;
|
|
15
|
+
}
|
|
16
|
+
/** Cycle a column's sort order: none → ascend → descend → none. */
|
|
17
|
+
export declare function nextSortOrder(current: SortOrder): SortOrder;
|
|
18
|
+
/**
|
|
19
|
+
* Toggle sort for `key` given the current single-column sort state.
|
|
20
|
+
* Returns the next state. Switching to a new column starts at ascend.
|
|
21
|
+
*/
|
|
22
|
+
export declare function toggleSort(state: SortState, key: string): SortState;
|
|
23
|
+
/**
|
|
24
|
+
* Stable client-side sort. `compare(a, b)` must return the ascend comparison
|
|
25
|
+
* (<0 if a before b). Returns a new array; descend reverses the comparator.
|
|
26
|
+
* Original order is preserved when order is null.
|
|
27
|
+
*/
|
|
28
|
+
export declare function applySort<T>(data: readonly T[], order: SortOrder, compare: (a: T, b: T) => number): T[];
|
|
29
|
+
/** Slice `data` to the given 1-based page. */
|
|
30
|
+
export declare function paginate<T>(data: readonly T[], current: number, pageSize: number): T[];
|
|
31
|
+
/** Total page count for `total` rows at `pageSize`. */
|
|
32
|
+
export declare function pageCount(total: number, pageSize: number): number;
|
|
33
|
+
export interface SelectAllState {
|
|
34
|
+
/** every selectable row is selected */
|
|
35
|
+
checked: boolean;
|
|
36
|
+
/** some but not all selectable rows are selected */
|
|
37
|
+
indeterminate: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Compute the header select-all checkbox state from the current selection.
|
|
41
|
+
* `disabledKeys` rows are excluded from the "all" computation.
|
|
42
|
+
*/
|
|
43
|
+
export declare function selectAllState(allKeys: readonly RowKey[], selectedKeys: ReadonlySet<RowKey>, disabledKeys?: ReadonlySet<RowKey>): SelectAllState;
|
|
44
|
+
/**
|
|
45
|
+
* Toggle the select-all checkbox: when not all selectable rows are selected,
|
|
46
|
+
* select them all; otherwise clear them. Selection of disabled rows is
|
|
47
|
+
* preserved (they are never auto-changed).
|
|
48
|
+
*/
|
|
49
|
+
export declare function toggleSelectAll(allKeys: readonly RowKey[], selectedKeys: ReadonlySet<RowKey>, disabledKeys?: ReadonlySet<RowKey>): Set<RowKey>;
|
|
50
|
+
/** Toggle a single row's selection. */
|
|
51
|
+
export declare function toggleRow(selectedKeys: ReadonlySet<RowKey>, key: RowKey): Set<RowKey>;
|
|
52
|
+
/** A tree row flattened into the visible, ordered list (only expanded subtrees). */
|
|
53
|
+
export interface FlatRow<T> {
|
|
54
|
+
/** the original data record */
|
|
55
|
+
record: T;
|
|
56
|
+
/** the record's resolved row key */
|
|
57
|
+
key: RowKey;
|
|
58
|
+
/** depth from the top level, starting at 0 */
|
|
59
|
+
level: number;
|
|
60
|
+
/** parent key, or null for top-level rows */
|
|
61
|
+
parentKey: RowKey | null;
|
|
62
|
+
/** has at least one child row */
|
|
63
|
+
hasChildren: boolean;
|
|
64
|
+
/** index of the record among the *top-level* rows (stable for striping/aria) */
|
|
65
|
+
topIndex: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Flatten tree-structured rows into an ordered list of visible rows.
|
|
69
|
+
* A row's children are included only when its key is in `expandedKeys`.
|
|
70
|
+
* Pure: no DOM, no mutable state — the render layer owns expansion state.
|
|
71
|
+
*
|
|
72
|
+
* `getKey` resolves a row's key; `getChildren` returns child rows (or
|
|
73
|
+
* undefined/empty for leaves). `topIndex` is the row's position among the
|
|
74
|
+
* top-level rows it descends from, so callers can keep stable striping/aria.
|
|
75
|
+
*/
|
|
76
|
+
export declare function flattenTreeRows<T>(rows: readonly T[], expandedKeys: ReadonlySet<RowKey>, getKey: (record: T) => RowKey, getChildren: (record: T) => readonly T[] | undefined): FlatRow<T>[];
|
|
77
|
+
/**
|
|
78
|
+
* Conduction (related mode) for tree-structured table rows: given a base set of
|
|
79
|
+
* checked keys, derive the full checked set + half-checked (indeterminate) set
|
|
80
|
+
* with bottom-up + top-down parent/child propagation. A checked parent checks
|
|
81
|
+
* all enabled leaf descendants; a parent with some-but-not-all checked leaves is
|
|
82
|
+
* half. Disabled leaves are excluded from the computation.
|
|
83
|
+
*/
|
|
84
|
+
export declare function conductRows<T>(rows: readonly T[], checkedInput: ReadonlySet<RowKey>, getKey: (record: T) => RowKey, getChildren: (record: T) => readonly T[] | undefined, isDisabled?: (record: T) => boolean): {
|
|
85
|
+
checked: Set<RowKey>;
|
|
86
|
+
half: Set<RowKey>;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Normalize a checked set to leaf-level for table rows: any non-leaf (parent)
|
|
90
|
+
* key is expanded to its enabled leaf descendants. Makes a base set resilient to
|
|
91
|
+
* being fed conductRows output (which contains parent keys).
|
|
92
|
+
*/
|
|
93
|
+
export declare function normalizeRowsToLeaves<T>(rows: readonly T[], checked: ReadonlySet<RowKey>, getKey: (record: T) => RowKey, getChildren: (record: T) => readonly T[] | undefined, isDisabled?: (record: T) => boolean): Set<RowKey>;
|
|
94
|
+
/**
|
|
95
|
+
* Toggle a row's check in related mode: returns the next *base* checked set
|
|
96
|
+
* (leaf-level) after toggling `key`. The input base is normalized to leaves
|
|
97
|
+
* first, so passing conductRows output round-trips correctly. Feed the result
|
|
98
|
+
* through conductRows to render. Disabled leaves are never auto-changed.
|
|
99
|
+
*/
|
|
100
|
+
export declare function toggleRowCheck<T>(rows: readonly T[], currentChecked: ReadonlySet<RowKey>, key: RowKey, getKey: (record: T) => RowKey, getChildren: (record: T) => readonly T[] | undefined, isDisabled?: (record: T) => boolean): Set<RowKey>;
|
|
101
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
package/dist/table.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createTable — framework-agnostic table algorithms for Table.svelte.
|
|
3
|
+
* Pure functions only: three-state sort cycling, client-side data pipeline
|
|
4
|
+
* (sort → paginate), and row-selection helpers (all/indeterminate with
|
|
5
|
+
* disabled rows). No DOM, no framework deps, no internal mutable state — the
|
|
6
|
+
* render layer (svelte runes) owns sort/page/selection state and calls these.
|
|
7
|
+
* See specs/components/show/Table.spec.md §3.
|
|
8
|
+
*/
|
|
9
|
+
/** Cycle a column's sort order: none → ascend → descend → none. */
|
|
10
|
+
export function nextSortOrder(current) {
|
|
11
|
+
if (current === null)
|
|
12
|
+
return 'ascend';
|
|
13
|
+
if (current === 'ascend')
|
|
14
|
+
return 'descend';
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Toggle sort for `key` given the current single-column sort state.
|
|
19
|
+
* Returns the next state. Switching to a new column starts at ascend.
|
|
20
|
+
*/
|
|
21
|
+
export function toggleSort(state, key) {
|
|
22
|
+
if (state.key !== key)
|
|
23
|
+
return { key, order: 'ascend' };
|
|
24
|
+
const order = nextSortOrder(state.order);
|
|
25
|
+
return order === null ? { key: null, order: null } : { key, order };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Stable client-side sort. `compare(a, b)` must return the ascend comparison
|
|
29
|
+
* (<0 if a before b). Returns a new array; descend reverses the comparator.
|
|
30
|
+
* Original order is preserved when order is null.
|
|
31
|
+
*/
|
|
32
|
+
export function applySort(data, order, compare) {
|
|
33
|
+
if (order === null)
|
|
34
|
+
return [...data];
|
|
35
|
+
// decorate-sort-undecorate for stability across engines
|
|
36
|
+
const dir = order === 'ascend' ? 1 : -1;
|
|
37
|
+
return data
|
|
38
|
+
.map((item, index) => ({ item, index }))
|
|
39
|
+
.sort((a, b) => {
|
|
40
|
+
const c = compare(a.item, b.item) * dir;
|
|
41
|
+
return c !== 0 ? c : a.index - b.index;
|
|
42
|
+
})
|
|
43
|
+
.map((d) => d.item);
|
|
44
|
+
}
|
|
45
|
+
/** Slice `data` to the given 1-based page. */
|
|
46
|
+
export function paginate(data, current, pageSize) {
|
|
47
|
+
if (pageSize <= 0)
|
|
48
|
+
return [...data];
|
|
49
|
+
const start = (current - 1) * pageSize;
|
|
50
|
+
return data.slice(start, start + pageSize);
|
|
51
|
+
}
|
|
52
|
+
/** Total page count for `total` rows at `pageSize`. */
|
|
53
|
+
export function pageCount(total, pageSize) {
|
|
54
|
+
if (pageSize <= 0)
|
|
55
|
+
return 1;
|
|
56
|
+
return Math.max(1, Math.ceil(total / pageSize));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Compute the header select-all checkbox state from the current selection.
|
|
60
|
+
* `disabledKeys` rows are excluded from the "all" computation.
|
|
61
|
+
*/
|
|
62
|
+
export function selectAllState(allKeys, selectedKeys, disabledKeys = new Set()) {
|
|
63
|
+
const selectable = allKeys.filter((k) => !disabledKeys.has(k));
|
|
64
|
+
if (selectable.length === 0)
|
|
65
|
+
return { checked: false, indeterminate: false };
|
|
66
|
+
const selectedCount = selectable.filter((k) => selectedKeys.has(k)).length;
|
|
67
|
+
return {
|
|
68
|
+
checked: selectedCount === selectable.length,
|
|
69
|
+
indeterminate: selectedCount > 0 && selectedCount < selectable.length,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Toggle the select-all checkbox: when not all selectable rows are selected,
|
|
74
|
+
* select them all; otherwise clear them. Selection of disabled rows is
|
|
75
|
+
* preserved (they are never auto-changed).
|
|
76
|
+
*/
|
|
77
|
+
export function toggleSelectAll(allKeys, selectedKeys, disabledKeys = new Set()) {
|
|
78
|
+
const { checked } = selectAllState(allKeys, selectedKeys, disabledKeys);
|
|
79
|
+
const next = new Set(selectedKeys);
|
|
80
|
+
if (checked) {
|
|
81
|
+
for (const k of allKeys)
|
|
82
|
+
if (!disabledKeys.has(k))
|
|
83
|
+
next.delete(k);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
for (const k of allKeys)
|
|
87
|
+
if (!disabledKeys.has(k))
|
|
88
|
+
next.add(k);
|
|
89
|
+
}
|
|
90
|
+
return next;
|
|
91
|
+
}
|
|
92
|
+
/** Toggle a single row's selection. */
|
|
93
|
+
export function toggleRow(selectedKeys, key) {
|
|
94
|
+
const next = new Set(selectedKeys);
|
|
95
|
+
if (next.has(key))
|
|
96
|
+
next.delete(key);
|
|
97
|
+
else
|
|
98
|
+
next.add(key);
|
|
99
|
+
return next;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Flatten tree-structured rows into an ordered list of visible rows.
|
|
103
|
+
* A row's children are included only when its key is in `expandedKeys`.
|
|
104
|
+
* Pure: no DOM, no mutable state — the render layer owns expansion state.
|
|
105
|
+
*
|
|
106
|
+
* `getKey` resolves a row's key; `getChildren` returns child rows (or
|
|
107
|
+
* undefined/empty for leaves). `topIndex` is the row's position among the
|
|
108
|
+
* top-level rows it descends from, so callers can keep stable striping/aria.
|
|
109
|
+
*/
|
|
110
|
+
export function flattenTreeRows(rows, expandedKeys, getKey, getChildren) {
|
|
111
|
+
const out = [];
|
|
112
|
+
function walk(nodes, level, parentKey, topIndex) {
|
|
113
|
+
nodes.forEach((record, i) => {
|
|
114
|
+
const key = getKey(record);
|
|
115
|
+
const children = getChildren(record);
|
|
116
|
+
const hasChildren = !!children && children.length > 0;
|
|
117
|
+
const ti = level === 0 ? i : topIndex;
|
|
118
|
+
out.push({ record, key, level, parentKey, hasChildren, topIndex: ti });
|
|
119
|
+
if (hasChildren && expandedKeys.has(key)) {
|
|
120
|
+
walk(children, level + 1, key, ti);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
walk(rows, 0, null, 0);
|
|
125
|
+
return out;
|
|
126
|
+
}
|
|
127
|
+
function buildRowMeta(rows, getKey, getChildren, disabled) {
|
|
128
|
+
const leaves = new Map();
|
|
129
|
+
const allKeys = [];
|
|
130
|
+
function walk(record) {
|
|
131
|
+
const key = getKey(record);
|
|
132
|
+
allKeys.push(key);
|
|
133
|
+
const kids = getChildren(record);
|
|
134
|
+
if (!kids || kids.length === 0) {
|
|
135
|
+
// a leaf contributes itself only when enabled
|
|
136
|
+
const own = disabled.has(key) ? [] : [key];
|
|
137
|
+
leaves.set(key, own);
|
|
138
|
+
return own;
|
|
139
|
+
}
|
|
140
|
+
const collected = [];
|
|
141
|
+
for (const child of kids)
|
|
142
|
+
collected.push(...walk(child));
|
|
143
|
+
leaves.set(key, collected);
|
|
144
|
+
return collected;
|
|
145
|
+
}
|
|
146
|
+
for (const root of rows)
|
|
147
|
+
walk(root);
|
|
148
|
+
return { leaves, allKeys };
|
|
149
|
+
}
|
|
150
|
+
/** Collect keys of every row that is disabled (own flag, not inherited). */
|
|
151
|
+
function collectDisabled(rows, getKey, getChildren, isDisabled) {
|
|
152
|
+
const out = new Set();
|
|
153
|
+
function walk(record) {
|
|
154
|
+
if (isDisabled(record))
|
|
155
|
+
out.add(getKey(record));
|
|
156
|
+
const kids = getChildren(record);
|
|
157
|
+
if (kids)
|
|
158
|
+
for (const c of kids)
|
|
159
|
+
walk(c);
|
|
160
|
+
}
|
|
161
|
+
for (const r of rows)
|
|
162
|
+
walk(r);
|
|
163
|
+
return out;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Conduction (related mode) for tree-structured table rows: given a base set of
|
|
167
|
+
* checked keys, derive the full checked set + half-checked (indeterminate) set
|
|
168
|
+
* with bottom-up + top-down parent/child propagation. A checked parent checks
|
|
169
|
+
* all enabled leaf descendants; a parent with some-but-not-all checked leaves is
|
|
170
|
+
* half. Disabled leaves are excluded from the computation.
|
|
171
|
+
*/
|
|
172
|
+
export function conductRows(rows, checkedInput, getKey, getChildren, isDisabled = () => false) {
|
|
173
|
+
const disabled = collectDisabled(rows, getKey, getChildren, isDisabled);
|
|
174
|
+
const meta = buildRowMeta(rows, getKey, getChildren, disabled);
|
|
175
|
+
// Top-down: a checked node checks all its enabled leaf descendants.
|
|
176
|
+
const leafChecked = new Set();
|
|
177
|
+
for (const key of checkedInput) {
|
|
178
|
+
const ls = meta.leaves.get(key);
|
|
179
|
+
if (!ls)
|
|
180
|
+
continue;
|
|
181
|
+
for (const leaf of ls)
|
|
182
|
+
leafChecked.add(leaf); // already enabled-only
|
|
183
|
+
}
|
|
184
|
+
const checked = new Set();
|
|
185
|
+
const half = new Set();
|
|
186
|
+
// Bottom-up: reverse document order so children resolve before parents.
|
|
187
|
+
for (let i = meta.allKeys.length - 1; i >= 0; i--) {
|
|
188
|
+
const key = meta.allKeys[i];
|
|
189
|
+
const enabledLeaves = meta.leaves.get(key);
|
|
190
|
+
if (enabledLeaves.length === 0)
|
|
191
|
+
continue;
|
|
192
|
+
const checkedCount = enabledLeaves.filter((l) => leafChecked.has(l)).length;
|
|
193
|
+
if (checkedCount === 0)
|
|
194
|
+
continue;
|
|
195
|
+
if (checkedCount === enabledLeaves.length)
|
|
196
|
+
checked.add(key);
|
|
197
|
+
else
|
|
198
|
+
half.add(key);
|
|
199
|
+
}
|
|
200
|
+
return { checked, half };
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Normalize a checked set to leaf-level for table rows: any non-leaf (parent)
|
|
204
|
+
* key is expanded to its enabled leaf descendants. Makes a base set resilient to
|
|
205
|
+
* being fed conductRows output (which contains parent keys).
|
|
206
|
+
*/
|
|
207
|
+
export function normalizeRowsToLeaves(rows, checked, getKey, getChildren, isDisabled = () => false) {
|
|
208
|
+
const disabled = collectDisabled(rows, getKey, getChildren, isDisabled);
|
|
209
|
+
const meta = buildRowMeta(rows, getKey, getChildren, disabled);
|
|
210
|
+
const out = new Set();
|
|
211
|
+
for (const key of checked) {
|
|
212
|
+
const leaves = meta.leaves.get(key);
|
|
213
|
+
if (!leaves)
|
|
214
|
+
continue; // unknown key — drop it
|
|
215
|
+
if (leaves.length === 1 && leaves[0] === key)
|
|
216
|
+
out.add(key); // a leaf
|
|
217
|
+
else
|
|
218
|
+
for (const l of leaves)
|
|
219
|
+
out.add(l); // parent → its leaves
|
|
220
|
+
}
|
|
221
|
+
return out;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Toggle a row's check in related mode: returns the next *base* checked set
|
|
225
|
+
* (leaf-level) after toggling `key`. The input base is normalized to leaves
|
|
226
|
+
* first, so passing conductRows output round-trips correctly. Feed the result
|
|
227
|
+
* through conductRows to render. Disabled leaves are never auto-changed.
|
|
228
|
+
*/
|
|
229
|
+
export function toggleRowCheck(rows, currentChecked, key, getKey, getChildren, isDisabled = () => false) {
|
|
230
|
+
const disabled = collectDisabled(rows, getKey, getChildren, isDisabled);
|
|
231
|
+
const meta = buildRowMeta(rows, getKey, getChildren, disabled);
|
|
232
|
+
const base = normalizeRowsToLeaves(rows, currentChecked, getKey, getChildren, isDisabled);
|
|
233
|
+
const leaves = meta.leaves.get(key) ?? []; // enabled-only
|
|
234
|
+
const allChecked = leaves.length > 0 && leaves.every((l) => base.has(l));
|
|
235
|
+
const next = new Set(base);
|
|
236
|
+
if (allChecked)
|
|
237
|
+
for (const l of leaves)
|
|
238
|
+
next.delete(l);
|
|
239
|
+
else
|
|
240
|
+
for (const l of leaves)
|
|
241
|
+
next.add(l);
|
|
242
|
+
return next;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.test.d.ts","sourceRoot":"","sources":["../src/table.test.ts"],"names":[],"mappings":""}
|