@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,127 @@
|
|
|
1
|
+
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { createToastStore } from './toast.js';
|
|
3
|
+
describe('createToastStore', () => {
|
|
4
|
+
beforeEach(() => vi.useFakeTimers());
|
|
5
|
+
afterEach(() => vi.useRealTimers());
|
|
6
|
+
it('adds a toast and returns its id', () => {
|
|
7
|
+
const s = createToastStore();
|
|
8
|
+
const id = s.add({ content: 'hi' });
|
|
9
|
+
expect(typeof id).toBe('string');
|
|
10
|
+
expect(s.getToasts().map((t) => t.content)).toEqual(['hi']);
|
|
11
|
+
s.destroy();
|
|
12
|
+
});
|
|
13
|
+
it('auto-dismisses after duration', () => {
|
|
14
|
+
const s = createToastStore();
|
|
15
|
+
s.add({ content: 'bye', duration: 2 });
|
|
16
|
+
expect(s.getToasts().length).toBe(1);
|
|
17
|
+
vi.advanceTimersByTime(1999);
|
|
18
|
+
expect(s.getToasts().length).toBe(1);
|
|
19
|
+
vi.advanceTimersByTime(1);
|
|
20
|
+
expect(s.getToasts().length).toBe(0);
|
|
21
|
+
s.destroy();
|
|
22
|
+
});
|
|
23
|
+
it('duration 0 persists (no auto-dismiss)', () => {
|
|
24
|
+
const s = createToastStore();
|
|
25
|
+
s.add({ content: 'stay', duration: 0 });
|
|
26
|
+
vi.advanceTimersByTime(100000);
|
|
27
|
+
expect(s.getToasts().length).toBe(1);
|
|
28
|
+
s.destroy();
|
|
29
|
+
});
|
|
30
|
+
it('loading defaults to persist', () => {
|
|
31
|
+
const s = createToastStore();
|
|
32
|
+
s.add({ content: 'loading…', type: 'loading' });
|
|
33
|
+
vi.advanceTimersByTime(100000);
|
|
34
|
+
expect(s.getToasts().length).toBe(1);
|
|
35
|
+
s.destroy();
|
|
36
|
+
});
|
|
37
|
+
it('id dedup updates in place and restarts timer', () => {
|
|
38
|
+
const s = createToastStore();
|
|
39
|
+
const id = s.add({ content: 'v1', duration: 3 });
|
|
40
|
+
vi.advanceTimersByTime(2000);
|
|
41
|
+
s.add({ id, content: 'v2', duration: 3 }); // update, restart 3s
|
|
42
|
+
expect(s.getToasts().map((t) => t.content)).toEqual(['v2']);
|
|
43
|
+
expect(s.getToasts().length).toBe(1);
|
|
44
|
+
vi.advanceTimersByTime(2000); // only 2s since update
|
|
45
|
+
expect(s.getToasts().length).toBe(1);
|
|
46
|
+
vi.advanceTimersByTime(1000);
|
|
47
|
+
expect(s.getToasts().length).toBe(0);
|
|
48
|
+
s.destroy();
|
|
49
|
+
});
|
|
50
|
+
it('maxCount evicts the oldest (FIFO)', () => {
|
|
51
|
+
const s = createToastStore({ maxCount: 2 });
|
|
52
|
+
s.add({ content: 'a', duration: 0 });
|
|
53
|
+
s.add({ content: 'b', duration: 0 });
|
|
54
|
+
s.add({ content: 'c', duration: 0 });
|
|
55
|
+
expect(s.getToasts().map((t) => t.content)).toEqual(['b', 'c']);
|
|
56
|
+
s.destroy();
|
|
57
|
+
});
|
|
58
|
+
it('manual remove and removeAll', () => {
|
|
59
|
+
const s = createToastStore();
|
|
60
|
+
const a = s.add({ content: 'a', duration: 0 });
|
|
61
|
+
s.add({ content: 'b', duration: 0 });
|
|
62
|
+
s.remove(a);
|
|
63
|
+
expect(s.getToasts().map((t) => t.content)).toEqual(['b']);
|
|
64
|
+
s.removeAll();
|
|
65
|
+
expect(s.getToasts().length).toBe(0);
|
|
66
|
+
s.destroy();
|
|
67
|
+
});
|
|
68
|
+
it('pause/resume preserves remaining time', () => {
|
|
69
|
+
const s = createToastStore();
|
|
70
|
+
const id = s.add({ content: 'x', duration: 4 });
|
|
71
|
+
vi.advanceTimersByTime(1000); // 3s left
|
|
72
|
+
s.pause(id);
|
|
73
|
+
vi.advanceTimersByTime(10000); // paused, no dismiss
|
|
74
|
+
expect(s.getToasts().length).toBe(1);
|
|
75
|
+
s.resume(id);
|
|
76
|
+
vi.advanceTimersByTime(2999);
|
|
77
|
+
expect(s.getToasts().length).toBe(1);
|
|
78
|
+
vi.advanceTimersByTime(1);
|
|
79
|
+
expect(s.getToasts().length).toBe(0);
|
|
80
|
+
s.destroy();
|
|
81
|
+
});
|
|
82
|
+
it('onClose fires with the right reason', () => {
|
|
83
|
+
const s = createToastStore();
|
|
84
|
+
const reasons = [];
|
|
85
|
+
const id = s.add({ content: 'x', duration: 0, onClose: (_i, r) => reasons.push(r) });
|
|
86
|
+
s.remove(id);
|
|
87
|
+
expect(reasons).toEqual(['manual']);
|
|
88
|
+
s.destroy();
|
|
89
|
+
});
|
|
90
|
+
it('subscribers are notified on changes', () => {
|
|
91
|
+
const s = createToastStore();
|
|
92
|
+
const counts = [];
|
|
93
|
+
s.subscribe((t) => counts.push(t.length));
|
|
94
|
+
const id = s.add({ content: 'a', duration: 0 });
|
|
95
|
+
s.remove(id);
|
|
96
|
+
expect(counts).toEqual([1, 0]);
|
|
97
|
+
s.destroy();
|
|
98
|
+
});
|
|
99
|
+
it('defaults position to top and theme to light', () => {
|
|
100
|
+
const s = createToastStore();
|
|
101
|
+
s.add({ content: 'x', duration: 0 });
|
|
102
|
+
const [t] = s.getToasts();
|
|
103
|
+
expect(t.position).toBe('top');
|
|
104
|
+
expect(t.theme).toBe('light');
|
|
105
|
+
s.destroy();
|
|
106
|
+
});
|
|
107
|
+
it('supports 6 positions and carries theme through', () => {
|
|
108
|
+
const s = createToastStore();
|
|
109
|
+
s.add({ content: 'a', duration: 0, position: 'bottomRight', theme: 'dark' });
|
|
110
|
+
const [t] = s.getToasts();
|
|
111
|
+
expect(t.position).toBe('bottomRight');
|
|
112
|
+
expect(t.theme).toBe('dark');
|
|
113
|
+
s.destroy();
|
|
114
|
+
});
|
|
115
|
+
it('maxCount evicts FIFO per position independently', () => {
|
|
116
|
+
const s = createToastStore({ maxCount: 1 });
|
|
117
|
+
s.add({ content: 'top1', duration: 0, position: 'top' });
|
|
118
|
+
s.add({ content: 'bottom1', duration: 0, position: 'bottom' });
|
|
119
|
+
// different positions: neither evicts the other
|
|
120
|
+
expect(s.getToasts().map((t) => t.content)).toEqual(['top1', 'bottom1']);
|
|
121
|
+
// adding a second top evicts only the older top
|
|
122
|
+
s.add({ content: 'top2', duration: 0, position: 'top' });
|
|
123
|
+
expect(s.getToasts().map((t) => t.content)).toEqual(['bottom1', 'top2']);
|
|
124
|
+
s.destroy();
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=toast.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.test.js","sourceRoot":"","sources":["../src/toast.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tree.d.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createTree — framework-agnostic tree algorithms for Tree.svelte.
|
|
3
|
+
* Pure functions only: flatten visible nodes, check-conduction (父子联动),
|
|
4
|
+
* search filtering with ancestor expansion. No DOM, no framework deps,
|
|
5
|
+
* no internal mutable state — the render layer owns selection/expansion state
|
|
6
|
+
* (runes in svelte) and calls these helpers. See specs/components/show/Tree.spec.md §3.
|
|
7
|
+
*/
|
|
8
|
+
export type TreeKey = string | number;
|
|
9
|
+
export interface TreeNodeData {
|
|
10
|
+
key: TreeKey;
|
|
11
|
+
label: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
checkable?: boolean;
|
|
14
|
+
selectable?: boolean;
|
|
15
|
+
isLeaf?: boolean;
|
|
16
|
+
children?: TreeNodeData[];
|
|
17
|
+
}
|
|
18
|
+
/** A node flattened into the visible, ordered list (only expanded subtrees). */
|
|
19
|
+
export interface FlatNode {
|
|
20
|
+
node: TreeNodeData;
|
|
21
|
+
/** depth from root, starting at 0 */
|
|
22
|
+
level: number;
|
|
23
|
+
/** parent key, or null for roots */
|
|
24
|
+
parentKey: TreeKey | null;
|
|
25
|
+
/** has at least one child */
|
|
26
|
+
hasChildren: boolean;
|
|
27
|
+
/** 1-based index among siblings (aria-posinset) */
|
|
28
|
+
posInSet: number;
|
|
29
|
+
/** sibling count (aria-setsize) */
|
|
30
|
+
setSize: number;
|
|
31
|
+
/** is this node the last among its siblings (for tree guide lines) */
|
|
32
|
+
isLast: boolean;
|
|
33
|
+
/** per-ancestor-level: was that ancestor the last of its siblings?
|
|
34
|
+
* length === level; index 0 is the root-level ancestor. Used to decide
|
|
35
|
+
* whether a vertical guide line continues through each indent column. */
|
|
36
|
+
ancestorIsLast: boolean[];
|
|
37
|
+
}
|
|
38
|
+
export type CheckState = 'checked' | 'half' | 'unchecked';
|
|
39
|
+
/**
|
|
40
|
+
* Flatten the tree into an ordered list of visible nodes.
|
|
41
|
+
* A node's children are included only when its key is in `expandedKeys`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function flattenVisible(data: TreeNodeData[], expandedKeys: ReadonlySet<TreeKey>): FlatNode[];
|
|
44
|
+
/** Recursively find a node by key. */
|
|
45
|
+
export declare function findNode(data: TreeNodeData[], key: TreeKey): TreeNodeData | undefined;
|
|
46
|
+
/** Collect keys of every node that has children (for defaultExpandAll). */
|
|
47
|
+
export declare function collectExpandable(data: TreeNodeData[]): TreeKey[];
|
|
48
|
+
/** Collect keys of nodes up to (and including) the given depth that have children. */
|
|
49
|
+
export declare function collectExpandableToDepth(data: TreeNodeData[], depth: number): TreeKey[];
|
|
50
|
+
/**
|
|
51
|
+
* Conduction (related mode): given a base set of explicitly-checked keys,
|
|
52
|
+
* derive the full checked set + half-checked (indeterminate) set with
|
|
53
|
+
* bottom-up + top-down parent/child propagation.
|
|
54
|
+
* Disabled nodes are excluded from auto-check.
|
|
55
|
+
*/
|
|
56
|
+
export declare function conduct(data: TreeNodeData[], checkedInput: ReadonlySet<TreeKey>): {
|
|
57
|
+
checked: Set<TreeKey>;
|
|
58
|
+
half: Set<TreeKey>;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Normalize a checked set to leaf-level: any non-leaf (parent) key is expanded
|
|
62
|
+
* to its leaf descendants. This makes a base set resilient to being fed the
|
|
63
|
+
* output of `conduct` (which contains parent keys) — feeding a polluted base
|
|
64
|
+
* back through `toggleCheck` would otherwise re-check children on every toggle.
|
|
65
|
+
*/
|
|
66
|
+
export declare function normalizeToLeaves(data: TreeNodeData[], checked: ReadonlySet<TreeKey>): Set<TreeKey>;
|
|
67
|
+
/**
|
|
68
|
+
* Toggle a node's check in related mode: returns the next *base* checked set
|
|
69
|
+
* (leaf-level) after toggling `key`. The input base is normalized to leaves
|
|
70
|
+
* first, so passing `conduct`-output (with parent keys) round-trips correctly.
|
|
71
|
+
* Feed the result through `conduct` to render.
|
|
72
|
+
*/
|
|
73
|
+
export declare function toggleCheck(data: TreeNodeData[], currentChecked: ReadonlySet<TreeKey>, key: TreeKey): Set<TreeKey>;
|
|
74
|
+
/**
|
|
75
|
+
* Search filtering: returns the set of node keys to expand so that every node
|
|
76
|
+
* matching `match` is visible (its ancestor chain). The matched keys themselves
|
|
77
|
+
* are returned separately for highlighting.
|
|
78
|
+
*/
|
|
79
|
+
export declare function computeFilteredKeys(data: TreeNodeData[], match: (node: TreeNodeData) => boolean): {
|
|
80
|
+
matched: Set<TreeKey>;
|
|
81
|
+
expand: Set<TreeKey>;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Return the keys of `key`'s siblings (nodes sharing the same direct parent),
|
|
85
|
+
* excluding `key` itself. Roots are siblings of each other. Returns an empty
|
|
86
|
+
* array if the key is not found. Pure function — used by accordion mode to
|
|
87
|
+
* collapse same-level siblings when a node expands.
|
|
88
|
+
*/
|
|
89
|
+
export declare function siblingKeys(data: TreeNodeData[], key: TreeKey): TreeKey[];
|
|
90
|
+
/**
|
|
91
|
+
* Accordion expand: compute the next expanded set when `key` is expanded under
|
|
92
|
+
* accordion mode — at most one node per level stays expanded, so all of `key`'s
|
|
93
|
+
* siblings are collapsed. Returns a new Set containing the current expanded keys
|
|
94
|
+
* plus `key`, minus `key`'s siblings. Pure function (no DOM, no mutation of
|
|
95
|
+
* inputs); the render layer derives the resulting expansion from it.
|
|
96
|
+
*/
|
|
97
|
+
export declare function accordionExpand(data: TreeNodeData[], expandedKeys: ReadonlySet<TreeKey>, key: TreeKey): Set<TreeKey>;
|
|
98
|
+
export type DropPosition = 'before' | 'inside' | 'after';
|
|
99
|
+
/**
|
|
100
|
+
* Drag & drop: given the pointer's vertical offset within a target row, decide
|
|
101
|
+
* the drop position. The row is split into three zones — top → `before`,
|
|
102
|
+
* middle → `inside` (become a child), bottom → `after`. When `allowInside` is
|
|
103
|
+
* false (e.g. a leaf target that should not gain children) the middle zone is
|
|
104
|
+
* folded into the nearer edge, yielding only `before`/`after`.
|
|
105
|
+
* Pure function (no DOM) so it is unit-testable; the render layer passes the
|
|
106
|
+
* measured offsetY/rowHeight.
|
|
107
|
+
*/
|
|
108
|
+
export declare function computeDropPosition(offsetY: number, rowHeight: number, allowInside?: boolean): DropPosition;
|
|
109
|
+
/**
|
|
110
|
+
* Whether `maybeAncestorKey` is the same as, or an ancestor of, `key`.
|
|
111
|
+
* Used to reject dropping a dragged node onto itself or into its own subtree.
|
|
112
|
+
*/
|
|
113
|
+
export declare function isAncestorOrSelf(data: TreeNodeData[], maybeAncestorKey: TreeKey, key: TreeKey): boolean;
|
|
114
|
+
/** Strategy for converging a fully-checked set into a回填/Tag value set. */
|
|
115
|
+
export type CheckedStrategy = 'all' | 'parent' | 'child';
|
|
116
|
+
/**
|
|
117
|
+
* Collapse a fully-checked set (the `checked` output of {@link conduct}, which
|
|
118
|
+
* contains every node — parents and children — that is completely checked) into
|
|
119
|
+
* the value set to surface as回填 value / Tags, per `showCheckedStrategy`:
|
|
120
|
+
*
|
|
121
|
+
* - `'all'` → every checked node (input unchanged, in document order).
|
|
122
|
+
* - `'parent'` → only the top-most fully-checked nodes; a checked node whose
|
|
123
|
+
* parent is also checked is dropped (parent represents subtree).
|
|
124
|
+
* - `'child'` → only checked leaf nodes (no parents).
|
|
125
|
+
*
|
|
126
|
+
* Pure: derives solely from `data` + `checked`, document-ordered, no mutation.
|
|
127
|
+
*/
|
|
128
|
+
export declare function collectCheckedByStrategy(data: TreeNodeData[], checked: ReadonlySet<TreeKey>, strategy: CheckedStrategy): TreeKey[];
|
|
129
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"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"}
|
package/dist/tree.js
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createTree — framework-agnostic tree algorithms for Tree.svelte.
|
|
3
|
+
* Pure functions only: flatten visible nodes, check-conduction (父子联动),
|
|
4
|
+
* search filtering with ancestor expansion. No DOM, no framework deps,
|
|
5
|
+
* no internal mutable state — the render layer owns selection/expansion state
|
|
6
|
+
* (runes in svelte) and calls these helpers. See specs/components/show/Tree.spec.md §3.
|
|
7
|
+
*/
|
|
8
|
+
function hasKids(node) {
|
|
9
|
+
return !!node.children && node.children.length > 0;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Flatten the tree into an ordered list of visible nodes.
|
|
13
|
+
* A node's children are included only when its key is in `expandedKeys`.
|
|
14
|
+
*/
|
|
15
|
+
export function flattenVisible(data, expandedKeys) {
|
|
16
|
+
const out = [];
|
|
17
|
+
function walk(nodes, level, parentKey, ancestorIsLast) {
|
|
18
|
+
const setSize = nodes.length;
|
|
19
|
+
nodes.forEach((node, i) => {
|
|
20
|
+
const kids = hasKids(node);
|
|
21
|
+
const isLast = i === setSize - 1;
|
|
22
|
+
out.push({
|
|
23
|
+
node,
|
|
24
|
+
level,
|
|
25
|
+
parentKey,
|
|
26
|
+
hasChildren: kids,
|
|
27
|
+
posInSet: i + 1,
|
|
28
|
+
setSize,
|
|
29
|
+
isLast,
|
|
30
|
+
ancestorIsLast,
|
|
31
|
+
});
|
|
32
|
+
if (kids && expandedKeys.has(node.key)) {
|
|
33
|
+
walk(node.children, level + 1, node.key, [...ancestorIsLast, isLast]);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
walk(data, 0, null, []);
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
/** Recursively find a node by key. */
|
|
41
|
+
export function findNode(data, key) {
|
|
42
|
+
for (const node of data) {
|
|
43
|
+
if (node.key === key)
|
|
44
|
+
return node;
|
|
45
|
+
if (node.children) {
|
|
46
|
+
const found = findNode(node.children, key);
|
|
47
|
+
if (found)
|
|
48
|
+
return found;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
/** Collect keys of every node that has children (for defaultExpandAll). */
|
|
54
|
+
export function collectExpandable(data) {
|
|
55
|
+
const acc = [];
|
|
56
|
+
function walk(nodes) {
|
|
57
|
+
for (const node of nodes) {
|
|
58
|
+
if (hasKids(node)) {
|
|
59
|
+
acc.push(node.key);
|
|
60
|
+
walk(node.children);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
walk(data);
|
|
65
|
+
return acc;
|
|
66
|
+
}
|
|
67
|
+
/** Collect keys of nodes up to (and including) the given depth that have children. */
|
|
68
|
+
export function collectExpandableToDepth(data, depth) {
|
|
69
|
+
const acc = [];
|
|
70
|
+
function walk(nodes, level) {
|
|
71
|
+
if (level >= depth)
|
|
72
|
+
return;
|
|
73
|
+
for (const node of nodes) {
|
|
74
|
+
if (hasKids(node)) {
|
|
75
|
+
acc.push(node.key);
|
|
76
|
+
walk(node.children, level + 1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
walk(data, 0);
|
|
81
|
+
return acc;
|
|
82
|
+
}
|
|
83
|
+
function buildMeta(data) {
|
|
84
|
+
const parent = new Map();
|
|
85
|
+
const leaves = new Map();
|
|
86
|
+
const childrenOf = new Map();
|
|
87
|
+
const allKeys = [];
|
|
88
|
+
function walk(node, parentKey) {
|
|
89
|
+
parent.set(node.key, parentKey);
|
|
90
|
+
allKeys.push(node.key);
|
|
91
|
+
if (!hasKids(node)) {
|
|
92
|
+
leaves.set(node.key, [node.key]);
|
|
93
|
+
childrenOf.set(node.key, []);
|
|
94
|
+
return [node.key];
|
|
95
|
+
}
|
|
96
|
+
const kids = node.children;
|
|
97
|
+
childrenOf.set(node.key, kids.map((k) => k.key));
|
|
98
|
+
const collected = [];
|
|
99
|
+
for (const child of kids)
|
|
100
|
+
collected.push(...walk(child, node.key));
|
|
101
|
+
leaves.set(node.key, collected);
|
|
102
|
+
return collected;
|
|
103
|
+
}
|
|
104
|
+
for (const root of data)
|
|
105
|
+
walk(root, null);
|
|
106
|
+
return { parent, leaves, childrenOf, allKeys };
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Conduction (related mode): given a base set of explicitly-checked keys,
|
|
110
|
+
* derive the full checked set + half-checked (indeterminate) set with
|
|
111
|
+
* bottom-up + top-down parent/child propagation.
|
|
112
|
+
* Disabled nodes are excluded from auto-check.
|
|
113
|
+
*/
|
|
114
|
+
export function conduct(data, checkedInput) {
|
|
115
|
+
const meta = buildMeta(data);
|
|
116
|
+
const disabled = new Set();
|
|
117
|
+
(function markDisabled(nodes, parentDisabled) {
|
|
118
|
+
for (const node of nodes) {
|
|
119
|
+
const d = parentDisabled || !!node.disabled;
|
|
120
|
+
if (d)
|
|
121
|
+
disabled.add(node.key);
|
|
122
|
+
if (node.children)
|
|
123
|
+
markDisabled(node.children, d);
|
|
124
|
+
}
|
|
125
|
+
})(data, false);
|
|
126
|
+
// Top-down: a checked parent checks all enabled leaf descendants.
|
|
127
|
+
const leafChecked = new Set();
|
|
128
|
+
for (const key of checkedInput) {
|
|
129
|
+
const ls = meta.leaves.get(key);
|
|
130
|
+
if (!ls)
|
|
131
|
+
continue;
|
|
132
|
+
for (const leaf of ls) {
|
|
133
|
+
if (!disabled.has(leaf))
|
|
134
|
+
leafChecked.add(leaf);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const checked = new Set();
|
|
138
|
+
const half = new Set();
|
|
139
|
+
// Bottom-up: derive each node's state from its leaf descendants.
|
|
140
|
+
// Process in reverse document order so children resolve before parents.
|
|
141
|
+
for (let i = meta.allKeys.length - 1; i >= 0; i--) {
|
|
142
|
+
const key = meta.allKeys[i];
|
|
143
|
+
const leaves = meta.leaves.get(key);
|
|
144
|
+
const enabledLeaves = leaves.filter((l) => !disabled.has(l));
|
|
145
|
+
if (enabledLeaves.length === 0)
|
|
146
|
+
continue;
|
|
147
|
+
const checkedCount = enabledLeaves.filter((l) => leafChecked.has(l)).length;
|
|
148
|
+
if (checkedCount === 0)
|
|
149
|
+
continue;
|
|
150
|
+
if (checkedCount === enabledLeaves.length)
|
|
151
|
+
checked.add(key);
|
|
152
|
+
else
|
|
153
|
+
half.add(key);
|
|
154
|
+
}
|
|
155
|
+
return { checked, half };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Normalize a checked set to leaf-level: any non-leaf (parent) key is expanded
|
|
159
|
+
* to its leaf descendants. This makes a base set resilient to being fed the
|
|
160
|
+
* output of `conduct` (which contains parent keys) — feeding a polluted base
|
|
161
|
+
* back through `toggleCheck` would otherwise re-check children on every toggle.
|
|
162
|
+
*/
|
|
163
|
+
export function normalizeToLeaves(data, checked) {
|
|
164
|
+
const meta = buildMeta(data);
|
|
165
|
+
const out = new Set();
|
|
166
|
+
for (const key of checked) {
|
|
167
|
+
const leaves = meta.leaves.get(key);
|
|
168
|
+
if (!leaves)
|
|
169
|
+
continue; // unknown key — drop it
|
|
170
|
+
if (leaves.length === 1 && leaves[0] === key)
|
|
171
|
+
out.add(key); // it's a leaf
|
|
172
|
+
else
|
|
173
|
+
for (const l of leaves)
|
|
174
|
+
out.add(l); // parent → its leaves
|
|
175
|
+
}
|
|
176
|
+
return out;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Toggle a node's check in related mode: returns the next *base* checked set
|
|
180
|
+
* (leaf-level) after toggling `key`. The input base is normalized to leaves
|
|
181
|
+
* first, so passing `conduct`-output (with parent keys) round-trips correctly.
|
|
182
|
+
* Feed the result through `conduct` to render.
|
|
183
|
+
*/
|
|
184
|
+
export function toggleCheck(data, currentChecked, key) {
|
|
185
|
+
const meta = buildMeta(data);
|
|
186
|
+
const disabled = new Set();
|
|
187
|
+
(function mark(nodes, pd) {
|
|
188
|
+
for (const node of nodes) {
|
|
189
|
+
const d = pd || !!node.disabled;
|
|
190
|
+
if (d)
|
|
191
|
+
disabled.add(node.key);
|
|
192
|
+
if (node.children)
|
|
193
|
+
mark(node.children, d);
|
|
194
|
+
}
|
|
195
|
+
})(data, false);
|
|
196
|
+
const base = normalizeToLeaves(data, currentChecked);
|
|
197
|
+
const leaves = (meta.leaves.get(key) ?? []).filter((l) => !disabled.has(l));
|
|
198
|
+
const allChecked = leaves.every((l) => base.has(l));
|
|
199
|
+
const next = new Set(base);
|
|
200
|
+
if (allChecked)
|
|
201
|
+
for (const l of leaves)
|
|
202
|
+
next.delete(l);
|
|
203
|
+
else
|
|
204
|
+
for (const l of leaves)
|
|
205
|
+
next.add(l);
|
|
206
|
+
return next;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Search filtering: returns the set of node keys to expand so that every node
|
|
210
|
+
* matching `match` is visible (its ancestor chain). The matched keys themselves
|
|
211
|
+
* are returned separately for highlighting.
|
|
212
|
+
*/
|
|
213
|
+
export function computeFilteredKeys(data, match) {
|
|
214
|
+
const matched = new Set();
|
|
215
|
+
const expand = new Set();
|
|
216
|
+
function walk(node, ancestors) {
|
|
217
|
+
let childHit = false;
|
|
218
|
+
if (node.children) {
|
|
219
|
+
for (const child of node.children) {
|
|
220
|
+
if (walk(child, [...ancestors, node.key]))
|
|
221
|
+
childHit = true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
const selfHit = match(node);
|
|
225
|
+
if (selfHit)
|
|
226
|
+
matched.add(node.key);
|
|
227
|
+
if (selfHit || childHit) {
|
|
228
|
+
// expand all ancestors so this node is reachable
|
|
229
|
+
for (const a of ancestors)
|
|
230
|
+
expand.add(a);
|
|
231
|
+
if (childHit)
|
|
232
|
+
expand.add(node.key);
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
for (const root of data)
|
|
238
|
+
walk(root, []);
|
|
239
|
+
return { matched, expand };
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Return the keys of `key`'s siblings (nodes sharing the same direct parent),
|
|
243
|
+
* excluding `key` itself. Roots are siblings of each other. Returns an empty
|
|
244
|
+
* array if the key is not found. Pure function — used by accordion mode to
|
|
245
|
+
* collapse same-level siblings when a node expands.
|
|
246
|
+
*/
|
|
247
|
+
export function siblingKeys(data, key) {
|
|
248
|
+
function findSiblings(nodes) {
|
|
249
|
+
if (nodes.some((n) => n.key === key)) {
|
|
250
|
+
return nodes.filter((n) => n.key !== key).map((n) => n.key);
|
|
251
|
+
}
|
|
252
|
+
for (const n of nodes) {
|
|
253
|
+
if (n.children) {
|
|
254
|
+
const found = findSiblings(n.children);
|
|
255
|
+
if (found)
|
|
256
|
+
return found;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
return findSiblings(data) ?? [];
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Accordion expand: compute the next expanded set when `key` is expanded under
|
|
265
|
+
* accordion mode — at most one node per level stays expanded, so all of `key`'s
|
|
266
|
+
* siblings are collapsed. Returns a new Set containing the current expanded keys
|
|
267
|
+
* plus `key`, minus `key`'s siblings. Pure function (no DOM, no mutation of
|
|
268
|
+
* inputs); the render layer derives the resulting expansion from it.
|
|
269
|
+
*/
|
|
270
|
+
export function accordionExpand(data, expandedKeys, key) {
|
|
271
|
+
const next = new Set(expandedKeys);
|
|
272
|
+
next.add(key);
|
|
273
|
+
for (const s of siblingKeys(data, key))
|
|
274
|
+
next.delete(s);
|
|
275
|
+
return next;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Drag & drop: given the pointer's vertical offset within a target row, decide
|
|
279
|
+
* the drop position. The row is split into three zones — top → `before`,
|
|
280
|
+
* middle → `inside` (become a child), bottom → `after`. When `allowInside` is
|
|
281
|
+
* false (e.g. a leaf target that should not gain children) the middle zone is
|
|
282
|
+
* folded into the nearer edge, yielding only `before`/`after`.
|
|
283
|
+
* Pure function (no DOM) so it is unit-testable; the render layer passes the
|
|
284
|
+
* measured offsetY/rowHeight.
|
|
285
|
+
*/
|
|
286
|
+
export function computeDropPosition(offsetY, rowHeight, allowInside = true) {
|
|
287
|
+
if (rowHeight <= 0)
|
|
288
|
+
return 'after';
|
|
289
|
+
const y = offsetY < 0 ? 0 : offsetY > rowHeight ? rowHeight : offsetY;
|
|
290
|
+
if (!allowInside) {
|
|
291
|
+
return y < rowHeight / 2 ? 'before' : 'after';
|
|
292
|
+
}
|
|
293
|
+
// 三分区:上 1/4 before、中段 inside、下 1/4 after。
|
|
294
|
+
if (y < rowHeight / 4)
|
|
295
|
+
return 'before';
|
|
296
|
+
if (y > (rowHeight * 3) / 4)
|
|
297
|
+
return 'after';
|
|
298
|
+
return 'inside';
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Whether `maybeAncestorKey` is the same as, or an ancestor of, `key`.
|
|
302
|
+
* Used to reject dropping a dragged node onto itself or into its own subtree.
|
|
303
|
+
*/
|
|
304
|
+
export function isAncestorOrSelf(data, maybeAncestorKey, key) {
|
|
305
|
+
if (maybeAncestorKey === key)
|
|
306
|
+
return true;
|
|
307
|
+
const ancestor = findNode(data, maybeAncestorKey);
|
|
308
|
+
if (!ancestor || !ancestor.children)
|
|
309
|
+
return false;
|
|
310
|
+
return !!findNode(ancestor.children, key);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Collapse a fully-checked set (the `checked` output of {@link conduct}, which
|
|
314
|
+
* contains every node — parents and children — that is completely checked) into
|
|
315
|
+
* the value set to surface as回填 value / Tags, per `showCheckedStrategy`:
|
|
316
|
+
*
|
|
317
|
+
* - `'all'` → every checked node (input unchanged, in document order).
|
|
318
|
+
* - `'parent'` → only the top-most fully-checked nodes; a checked node whose
|
|
319
|
+
* parent is also checked is dropped (parent represents subtree).
|
|
320
|
+
* - `'child'` → only checked leaf nodes (no parents).
|
|
321
|
+
*
|
|
322
|
+
* Pure: derives solely from `data` + `checked`, document-ordered, no mutation.
|
|
323
|
+
*/
|
|
324
|
+
export function collectCheckedByStrategy(data, checked, strategy) {
|
|
325
|
+
const out = [];
|
|
326
|
+
const walk = (nodes, parentChecked) => {
|
|
327
|
+
for (const node of nodes) {
|
|
328
|
+
const isChecked = checked.has(node.key);
|
|
329
|
+
const kids = node.children;
|
|
330
|
+
const isLeaf = !kids || kids.length === 0;
|
|
331
|
+
if (isChecked) {
|
|
332
|
+
if (strategy === 'all')
|
|
333
|
+
out.push(node.key);
|
|
334
|
+
else if (strategy === 'parent' && !parentChecked)
|
|
335
|
+
out.push(node.key);
|
|
336
|
+
else if (strategy === 'child' && isLeaf)
|
|
337
|
+
out.push(node.key);
|
|
338
|
+
}
|
|
339
|
+
if (kids && kids.length > 0) {
|
|
340
|
+
// For 'parent', once a checked ancestor is emitted we stop descending
|
|
341
|
+
// (its subtree is fully represented); otherwise keep walking.
|
|
342
|
+
if (strategy === 'parent' && isChecked)
|
|
343
|
+
continue;
|
|
344
|
+
walk(kids, isChecked);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
walk(data, false);
|
|
349
|
+
return out;
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=tree.js.map
|
package/dist/tree.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqCH,SAAS,OAAO,CAAC,IAAkB;IACjC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAoB,EACpB,YAAkC;IAElC,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,SAAS,IAAI,CACX,KAAqB,EACrB,KAAa,EACb,SAAyB,EACzB,cAAyB;QAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,KAAK;gBACL,SAAS;gBACT,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,CAAC,GAAG,CAAC;gBACf,OAAO;gBACP,MAAM;gBACN,cAAc;aACf,CAAC,CAAC;YACH,IAAI,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,QAA0B,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,QAAQ,CAAC,IAAoB,EAAE,GAAY;IACzD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC3C,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,SAAS,IAAI,CAAC,KAAqB;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,QAA0B,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,wBAAwB,CAAC,IAAoB,EAAE,KAAa;IAC1E,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,SAAS,IAAI,CAAC,KAAqB,EAAE,KAAa;QAChD,IAAI,KAAK,IAAI,KAAK;YAAE,OAAO;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,IAAI,CAAC,QAA0B,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACd,OAAO,GAAG,CAAC;AACb,CAAC;AAYD,SAAS,SAAS,CAAC,IAAoB;IACrC,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IACjD,MAAM,OAAO,GAAc,EAAE,CAAC;IAE9B,SAAS,IAAI,CAAC,IAAkB,EAAE,SAAyB;QACzD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAA0B,CAAC;QAC7C,UAAU,CAAC,GAAG,CACZ,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CACvB,CAAC;QACF,MAAM,SAAS,GAAc,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CACrB,IAAoB,EACpB,YAAkC;IAElC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAW,CAAC;IACpC,CAAC,SAAS,YAAY,CAAC,KAAqB,EAAE,cAAuB;QACnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ;gBAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEhB,kEAAkE;IAClE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAW,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,KAAK,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAW,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAEhC,iEAAiE;IACjE,wEAAwE;IACxE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAY,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAc,CAAC;QACjD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACzC,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5E,IAAI,YAAY,KAAK,CAAC;YAAE,SAAS;QACjC,IAAI,YAAY,KAAK,aAAa,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;YACvD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAoB,EACpB,OAA6B;IAE7B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAW,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,SAAS,CAAC,wBAAwB;QAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc;;YACrE,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;IACjE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,IAAoB,EACpB,cAAoC,EACpC,GAAY;IAEZ,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAW,CAAC;IACpC,CAAC,SAAS,IAAI,CAAC,KAAqB,EAAE,EAAW;QAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAChC,IAAI,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEhB,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,UAAU;QAAE,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;QAClD,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAoB,EACpB,KAAsC;IAEtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAW,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAW,CAAC;IAElC,SAAS,IAAI,CAAC,IAAkB,EAAE,SAAoB;QACpD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;oBAAE,QAAQ,GAAG,IAAI,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,iDAAiD;YACjD,KAAK,MAAM,CAAC,IAAI,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,QAAQ;gBAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAoB,EAAE,GAAY;IAC5D,SAAS,YAAY,CAAC,KAAqB;QACzC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,KAAK;oBAAE,OAAO,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAoB,EACpB,YAAkC,EAClC,GAAY;IAEZ,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAID;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,SAAiB,EACjB,WAAW,GAAG,IAAI;IAElB,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACnC,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,CAAC;IACD,0CAA0C;IAC1C,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAoB,EACpB,gBAAyB,EACzB,GAAY;IAEZ,IAAI,gBAAgB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAKD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAoB,EACpB,OAA6B,EAC7B,QAAyB;IAEzB,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,KAAqB,EAAE,aAAsB,EAAQ,EAAE;QACnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC3B,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,QAAQ,KAAK,KAAK;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACtC,IAAI,QAAQ,KAAK,QAAQ,IAAI,CAAC,aAAa;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBAChE,IAAI,QAAQ,KAAK,OAAO,IAAI,MAAM;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,sEAAsE;gBACtE,8DAA8D;gBAC9D,IAAI,QAAQ,KAAK,QAAQ,IAAI,SAAS;oBAAE,SAAS;gBACjD,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.test.d.ts","sourceRoot":"","sources":["../src/tree.test.ts"],"names":[],"mappings":""}
|