@chenzy-design/core 0.3.1 → 0.4.1
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/dist/ai-chat-dialogue.d.ts +300 -0
- package/dist/ai-chat-dialogue.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.js +699 -0
- package/dist/ai-chat-dialogue.js.map +1 -0
- package/dist/ai-chat-dialogue.test.d.ts +2 -0
- package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
- package/dist/ai-chat-dialogue.test.js +338 -0
- package/dist/ai-chat-dialogue.test.js.map +1 -0
- package/dist/ai-chat-input.d.ts +191 -0
- package/dist/ai-chat-input.d.ts.map +1 -0
- package/dist/ai-chat-input.js +274 -0
- package/dist/ai-chat-input.js.map +1 -0
- package/dist/ai-chat-input.test.d.ts +2 -0
- package/dist/ai-chat-input.test.d.ts.map +1 -0
- package/dist/ai-chat-input.test.js +339 -0
- package/dist/ai-chat-input.test.js.map +1 -0
- package/dist/audio-player.d.ts +154 -0
- package/dist/audio-player.d.ts.map +1 -0
- package/dist/audio-player.js +254 -0
- package/dist/audio-player.js.map +1 -0
- package/dist/audio-player.test.d.ts +2 -0
- package/dist/audio-player.test.d.ts.map +1 -0
- package/dist/audio-player.test.js +275 -0
- package/dist/audio-player.test.js.map +1 -0
- package/dist/back-top.d.ts +4 -1
- package/dist/back-top.d.ts.map +1 -1
- package/dist/back-top.js +5 -2
- package/dist/back-top.js.map +1 -1
- package/dist/back-top.test.js +3 -2
- package/dist/back-top.test.js.map +1 -1
- package/dist/calendar.d.ts +132 -44
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +413 -70
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.test.js +160 -76
- package/dist/calendar.test.js.map +1 -1
- package/dist/chat.d.ts +172 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +210 -0
- package/dist/chat.js.map +1 -0
- package/dist/chat.test.d.ts +2 -0
- package/dist/chat.test.d.ts.map +1 -0
- package/dist/chat.test.js +181 -0
- package/dist/chat.test.js.map +1 -0
- package/dist/code-highlight.d.ts +30 -0
- package/dist/code-highlight.d.ts.map +1 -0
- package/dist/code-highlight.js +37 -0
- package/dist/code-highlight.js.map +1 -0
- package/dist/code-highlight.test.d.ts +2 -0
- package/dist/code-highlight.test.d.ts.map +1 -0
- package/dist/code-highlight.test.js +36 -0
- package/dist/code-highlight.test.js.map +1 -0
- package/dist/collapsible.d.ts +41 -0
- package/dist/collapsible.d.ts.map +1 -0
- package/dist/collapsible.js +33 -0
- package/dist/collapsible.js.map +1 -0
- package/dist/collapsible.test.d.ts +2 -0
- package/dist/collapsible.test.d.ts.map +1 -0
- package/dist/collapsible.test.js +57 -0
- package/dist/collapsible.test.js.map +1 -0
- package/dist/color-value.d.ts +60 -0
- package/dist/color-value.d.ts.map +1 -0
- package/dist/color-value.js +165 -0
- package/dist/color-value.js.map +1 -0
- package/dist/color-value.test.d.ts +2 -0
- package/dist/color-value.test.d.ts.map +1 -0
- package/dist/color-value.test.js +104 -0
- package/dist/color-value.test.js.map +1 -0
- package/dist/config-provider.d.ts +76 -37
- package/dist/config-provider.d.ts.map +1 -1
- package/dist/config-provider.js +107 -32
- package/dist/config-provider.js.map +1 -1
- package/dist/config-provider.test.js +123 -60
- package/dist/config-provider.test.js.map +1 -1
- package/dist/cropper.d.ts +164 -0
- package/dist/cropper.d.ts.map +1 -0
- package/dist/cropper.js +841 -0
- package/dist/cropper.js.map +1 -0
- package/dist/cropper.test.d.ts +2 -0
- package/dist/cropper.test.d.ts.map +1 -0
- package/dist/cropper.test.js +259 -0
- package/dist/cropper.test.js.map +1 -0
- package/dist/drag-move.d.ts +119 -0
- package/dist/drag-move.d.ts.map +1 -0
- package/dist/drag-move.js +237 -0
- package/dist/drag-move.js.map +1 -0
- package/dist/drag-move.test.d.ts +2 -0
- package/dist/drag-move.test.d.ts.map +1 -0
- package/dist/drag-move.test.js +304 -0
- package/dist/drag-move.test.js.map +1 -0
- package/dist/editable.d.ts +24 -4
- package/dist/editable.d.ts.map +1 -1
- package/dist/editable.js +18 -0
- package/dist/editable.js.map +1 -1
- package/dist/editable.test.js +55 -2
- package/dist/editable.test.js.map +1 -1
- package/dist/ellipsis.d.ts +13 -0
- package/dist/ellipsis.d.ts.map +1 -1
- package/dist/ellipsis.js +36 -0
- package/dist/ellipsis.js.map +1 -1
- package/dist/ellipsis.test.js +37 -1
- package/dist/ellipsis.test.js.map +1 -1
- package/dist/form-path.d.ts +19 -0
- package/dist/form-path.d.ts.map +1 -0
- package/dist/form-path.js +97 -0
- package/dist/form-path.js.map +1 -0
- package/dist/form-path.test.d.ts +2 -0
- package/dist/form-path.test.d.ts.map +1 -0
- package/dist/form-path.test.js +57 -0
- package/dist/form-path.test.js.map +1 -0
- package/dist/form-validate.d.ts +13 -0
- package/dist/form-validate.d.ts.map +1 -0
- package/dist/form-validate.js +204 -0
- package/dist/form-validate.js.map +1 -0
- package/dist/form.d.ts +91 -18
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +170 -115
- package/dist/form.js.map +1 -1
- package/dist/form.test.js +349 -76
- package/dist/form.test.js.map +1 -1
- package/dist/highlight.d.ts +42 -32
- package/dist/highlight.d.ts.map +1 -1
- package/dist/highlight.js +67 -41
- package/dist/highlight.js.map +1 -1
- package/dist/highlight.test.js +73 -32
- package/dist/highlight.test.js.map +1 -1
- package/dist/hotkeys.d.ts +151 -0
- package/dist/hotkeys.d.ts.map +1 -0
- package/dist/hotkeys.js +188 -0
- package/dist/hotkeys.js.map +1 -0
- package/dist/hotkeys.test.d.ts +2 -0
- package/dist/hotkeys.test.d.ts.map +1 -0
- package/dist/hotkeys.test.js +170 -0
- package/dist/hotkeys.test.js.map +1 -0
- package/dist/index.d.ts +33 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -13
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +34 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +54 -0
- package/dist/input.js.map +1 -0
- package/dist/input.test.d.ts +2 -0
- package/dist/input.test.d.ts.map +1 -0
- package/dist/input.test.js +56 -0
- package/dist/input.test.js.map +1 -0
- package/dist/markdown-render.d.ts +49 -0
- package/dist/markdown-render.d.ts.map +1 -0
- package/dist/markdown-render.js +61 -0
- package/dist/markdown-render.js.map +1 -0
- package/dist/markdown-render.test.d.ts +2 -0
- package/dist/markdown-render.test.d.ts.map +1 -0
- package/dist/markdown-render.test.js +106 -0
- package/dist/markdown-render.test.js.map +1 -0
- package/dist/notification.d.ts +40 -31
- package/dist/notification.d.ts.map +1 -1
- package/dist/notification.js +86 -70
- package/dist/notification.js.map +1 -1
- package/dist/notification.test.js +62 -39
- package/dist/notification.test.js.map +1 -1
- package/dist/numeral.d.ts +32 -0
- package/dist/numeral.d.ts.map +1 -0
- package/dist/numeral.js +67 -0
- package/dist/numeral.js.map +1 -0
- package/dist/numeral.test.d.ts +2 -0
- package/dist/numeral.test.d.ts.map +1 -0
- package/dist/numeral.test.js +59 -0
- package/dist/numeral.test.js.map +1 -0
- package/dist/overflow-list.d.ts +9 -40
- package/dist/overflow-list.d.ts.map +1 -1
- package/dist/overflow-list.js +9 -70
- package/dist/overflow-list.js.map +1 -1
- package/dist/overflow-list.test.js +1 -122
- package/dist/overflow-list.test.js.map +1 -1
- package/dist/pagination.d.ts +17 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +48 -0
- package/dist/pagination.js.map +1 -1
- package/dist/pagination.test.js +40 -1
- package/dist/pagination.test.js.map +1 -1
- package/dist/pincode.d.ts +79 -0
- package/dist/pincode.d.ts.map +1 -0
- package/dist/pincode.js +119 -0
- package/dist/pincode.js.map +1 -0
- package/dist/pincode.test.d.ts +2 -0
- package/dist/pincode.test.d.ts.map +1 -0
- package/dist/pincode.test.js +151 -0
- package/dist/pincode.test.js.map +1 -0
- package/dist/progress.d.ts +32 -30
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +257 -64
- package/dist/progress.js.map +1 -1
- package/dist/progress.test.js +50 -47
- package/dist/progress.test.js.map +1 -1
- package/dist/resizable.d.ts +200 -0
- package/dist/resizable.d.ts.map +1 -0
- package/dist/resizable.js +329 -0
- package/dist/resizable.js.map +1 -0
- package/dist/resizable.test.d.ts +2 -0
- package/dist/resizable.test.d.ts.map +1 -0
- package/dist/resizable.test.js +302 -0
- package/dist/resizable.test.js.map +1 -0
- package/dist/scroll-list.d.ts +69 -62
- package/dist/scroll-list.d.ts.map +1 -1
- package/dist/scroll-list.js +103 -144
- package/dist/scroll-list.js.map +1 -1
- package/dist/scroll-list.test.js +100 -110
- package/dist/scroll-list.test.js.map +1 -1
- package/dist/sidebar.d.ts +46 -0
- package/dist/sidebar.d.ts.map +1 -0
- package/dist/sidebar.js +65 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/sidebar.test.d.ts +2 -0
- package/dist/sidebar.test.d.ts.map +1 -0
- package/dist/sidebar.test.js +88 -0
- package/dist/sidebar.test.js.map +1 -0
- package/dist/spin.d.ts +5 -5
- package/dist/spin.d.ts.map +1 -1
- package/dist/spin.js +13 -39
- package/dist/spin.js.map +1 -1
- package/dist/spin.test.js +2 -26
- package/dist/spin.test.js.map +1 -1
- package/dist/toast.d.ts +33 -30
- package/dist/toast.d.ts.map +1 -1
- package/dist/toast.js +77 -72
- package/dist/toast.js.map +1 -1
- package/dist/toast.test.js +63 -37
- package/dist/toast.test.js.map +1 -1
- package/dist/tree.d.ts +22 -5
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +61 -9
- package/dist/tree.js.map +1 -1
- package/dist/tree.test.js +72 -1
- package/dist/tree.test.js.map +1 -1
- package/dist/user-guide.d.ts +73 -0
- package/dist/user-guide.d.ts.map +1 -0
- package/dist/user-guide.js +95 -0
- package/dist/user-guide.js.map +1 -0
- package/dist/user-guide.test.d.ts +2 -0
- package/dist/user-guide.test.d.ts.map +1 -0
- package/dist/user-guide.test.js +109 -0
- package/dist/user-guide.test.js.map +1 -0
- package/dist/video-player.d.ts +196 -0
- package/dist/video-player.d.ts.map +1 -0
- package/dist/video-player.js +461 -0
- package/dist/video-player.js.map +1 -0
- package/dist/video-player.test.d.ts +2 -0
- package/dist/video-player.test.d.ts.map +1 -0
- package/dist/video-player.test.js +435 -0
- package/dist/video-player.test.js.map +1 -0
- package/package.json +17 -1
- package/dist/banner.d.ts +0 -19
- package/dist/banner.d.ts.map +0 -1
- package/dist/banner.js +0 -20
- package/dist/banner.js.map +0 -1
- package/dist/banner.test.d.ts +0 -2
- package/dist/banner.test.d.ts.map +0 -1
- package/dist/banner.test.js +0 -29
- package/dist/banner.test.js.map +0 -1
- package/dist/breakpoints.d.ts +0 -30
- package/dist/breakpoints.d.ts.map +0 -1
- package/dist/breakpoints.js +0 -45
- package/dist/breakpoints.js.map +0 -1
- package/dist/breakpoints.test.d.ts +0 -2
- package/dist/breakpoints.test.d.ts.map +0 -1
- package/dist/breakpoints.test.js +0 -46
- package/dist/breakpoints.test.js.map +0 -1
- package/dist/lottie-icon.d.ts +0 -88
- package/dist/lottie-icon.d.ts.map +0 -1
- package/dist/lottie-icon.js +0 -84
- package/dist/lottie-icon.js.map +0 -1
- package/dist/lottie-icon.test.d.ts +0 -2
- package/dist/lottie-icon.test.d.ts.map +0 -1
- package/dist/lottie-icon.test.js +0 -88
- package/dist/lottie-icon.test.js.map +0 -1
- package/dist/sider.d.ts +0 -26
- package/dist/sider.d.ts.map +0 -1
- package/dist/sider.js +0 -55
- package/dist/sider.js.map +0 -1
- package/dist/sider.test.d.ts +0 -2
- package/dist/sider.test.d.ts.map +0 -1
- package/dist/sider.test.js +0 -29
- package/dist/sider.test.js.map +0 -1
package/dist/toast.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* createToastStore — framework-agnostic
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* createToastStore — framework-agnostic toast queue + timers, 严格对齐 Semi Design
|
|
3
|
+
* (semi-foundation/toast/toastFoundation.ts + toastListFoundation.ts)。
|
|
4
|
+
* 管理一列 toast,自动关闭定时器、hover 暂停/恢复(mouseenter clear → mouseleave restart,
|
|
5
|
+
* 对齐 Semi)、按 id 去重/更新(updateToast 原地合并 + restartCloseTimer)。无 DOM、无框架依赖。
|
|
6
|
+
* svelte 层订阅并渲染。
|
|
7
|
+
*
|
|
8
|
+
* 对齐 Semi:无 position(wrapper 固定顶部居中,config 的 top/left/bottom/right 由容器整体偏移)、
|
|
9
|
+
* 无 maxCount 淘汰(Semi 不限制数量,多条靠 stack 折叠)、type 为 info/success/warning/error/default、
|
|
10
|
+
* theme 为 normal/light、onClose 为 () => void(无 reason 参数)。
|
|
7
11
|
*/
|
|
8
12
|
import { useId } from './id.js';
|
|
9
13
|
export function createToastStore(storeOptions = {}) {
|
|
10
|
-
const {
|
|
14
|
+
const { defaultDuration = 3, defaultTheme = 'normal', defaultDirection = 'ltr', } = storeOptions;
|
|
11
15
|
let toasts = [];
|
|
12
16
|
const timers = new Map();
|
|
13
17
|
const listeners = new Set();
|
|
@@ -16,101 +20,100 @@ export function createToastStore(storeOptions = {}) {
|
|
|
16
20
|
for (const l of listeners)
|
|
17
21
|
l(snapshot);
|
|
18
22
|
}
|
|
19
|
-
function now() {
|
|
20
|
-
return Date.now();
|
|
21
|
-
}
|
|
22
23
|
function clearTimer(id) {
|
|
23
|
-
const
|
|
24
|
-
if (
|
|
25
|
-
clearTimeout(
|
|
26
|
-
|
|
24
|
+
const timer = timers.get(id);
|
|
25
|
+
if (timer != null) {
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
timers.delete(id);
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
timers.set(id, rec);
|
|
30
|
+
// 对齐 Semi startCloseTimer_:duration 为正数才计时,否则常驻。
|
|
31
|
+
function startTimer(id, duration) {
|
|
32
|
+
if (duration && duration > 0) {
|
|
33
|
+
timers.set(id, setTimeout(() => remove(id), duration * 1000));
|
|
34
|
+
}
|
|
35
35
|
}
|
|
36
|
-
function
|
|
36
|
+
function normalize(options, id) {
|
|
37
|
+
const type = options.type ?? 'default';
|
|
38
|
+
return {
|
|
39
|
+
id,
|
|
40
|
+
content: options.content,
|
|
41
|
+
type,
|
|
42
|
+
duration: options.duration ?? defaultDuration,
|
|
43
|
+
showClose: options.showClose ?? true,
|
|
44
|
+
textMaxWidth: options.textMaxWidth ?? 450,
|
|
45
|
+
theme: options.theme ?? defaultTheme,
|
|
46
|
+
stack: options.stack ?? false,
|
|
47
|
+
direction: options.direction ?? defaultDirection,
|
|
48
|
+
onClose: options.onClose,
|
|
49
|
+
icon: options.icon,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function remove(id) {
|
|
37
53
|
const item = toasts.find((t) => t.id === id);
|
|
38
54
|
if (!item)
|
|
39
55
|
return;
|
|
40
56
|
clearTimer(id);
|
|
41
|
-
timers.delete(id);
|
|
42
57
|
toasts = toasts.filter((t) => t.id !== id);
|
|
43
58
|
emit();
|
|
44
|
-
item.onClose?.(
|
|
59
|
+
item.onClose?.();
|
|
45
60
|
}
|
|
46
61
|
function add(options) {
|
|
47
62
|
const id = options.id ?? useId('cd-toast');
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
63
|
+
const item = normalize(options, id);
|
|
64
|
+
clearTimer(id);
|
|
65
|
+
toasts = [...toasts.filter((t) => t.id !== id), item];
|
|
66
|
+
emit();
|
|
67
|
+
startTimer(id, item.duration);
|
|
68
|
+
return id;
|
|
69
|
+
}
|
|
70
|
+
// 对齐 Semi updateToast:以旧 item 为基础覆盖新提供的字段,保留次序,重启定时器。
|
|
71
|
+
// 仅覆盖 options 显式提供(非 undefined)的键,其余沿用旧值(不经 ToastOptions 往返,
|
|
72
|
+
// 避免 exactOptionalPropertyTypes 下 onClose 可选性冲突)。
|
|
73
|
+
function update(id, options) {
|
|
74
|
+
const idx = toasts.findIndex((t) => t.id === id);
|
|
75
|
+
if (idx < 0)
|
|
76
|
+
return;
|
|
77
|
+
const prev = toasts[idx];
|
|
78
|
+
const merged = {
|
|
52
79
|
id,
|
|
53
|
-
content: options.content,
|
|
54
|
-
type,
|
|
55
|
-
duration,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
textMaxWidth: options.textMaxWidth ?? 450,
|
|
64
|
-
stack: options.stack ?? false,
|
|
80
|
+
content: options.content ?? prev.content,
|
|
81
|
+
type: options.type ?? prev.type,
|
|
82
|
+
duration: options.duration ?? prev.duration,
|
|
83
|
+
showClose: options.showClose ?? prev.showClose,
|
|
84
|
+
textMaxWidth: options.textMaxWidth ?? prev.textMaxWidth,
|
|
85
|
+
theme: options.theme ?? prev.theme,
|
|
86
|
+
stack: options.stack ?? prev.stack,
|
|
87
|
+
direction: options.direction ?? prev.direction,
|
|
88
|
+
onClose: options.onClose ?? prev.onClose,
|
|
89
|
+
icon: options.icon ?? prev.icon,
|
|
65
90
|
};
|
|
66
|
-
|
|
67
|
-
if (existingIndex >= 0) {
|
|
68
|
-
// update in place, restart timer
|
|
69
|
-
clearTimer(id);
|
|
70
|
-
timers.delete(id);
|
|
71
|
-
toasts = toasts.map((t, i) => (i === existingIndex ? item : t));
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
toasts = [...toasts, item];
|
|
75
|
-
// FIFO eviction per position(对齐 Notification 按方位淘汰,支持多方位独立堆叠)。
|
|
76
|
-
// 向后兼容:单方位(含旧的纯 top/bottom 用法)时与原全局 FIFO 行为一致。
|
|
77
|
-
const samePosition = toasts.filter((t) => t.position === item.position);
|
|
78
|
-
if (samePosition.length > maxCount) {
|
|
79
|
-
const oldest = samePosition[0];
|
|
80
|
-
clearTimer(oldest.id);
|
|
81
|
-
timers.delete(oldest.id);
|
|
82
|
-
toasts = toasts.filter((t) => t.id !== oldest.id);
|
|
83
|
-
oldest.onClose?.(oldest.id, 'replace');
|
|
84
|
-
}
|
|
85
|
-
}
|
|
91
|
+
toasts = toasts.map((t, i) => (i === idx ? merged : t));
|
|
86
92
|
emit();
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
clearTimer(id);
|
|
94
|
+
startTimer(id, merged.duration);
|
|
89
95
|
}
|
|
90
96
|
function removeAll() {
|
|
91
97
|
const snapshot = toasts.slice();
|
|
92
98
|
for (const t of snapshot)
|
|
93
99
|
clearTimer(t.id);
|
|
94
|
-
timers.clear();
|
|
95
100
|
toasts = [];
|
|
96
101
|
emit();
|
|
97
102
|
for (const t of snapshot)
|
|
98
|
-
t.onClose?.(
|
|
103
|
+
t.onClose?.();
|
|
99
104
|
}
|
|
105
|
+
// 对齐 Semi clearCloseTimer_:hover 暂停即清定时器(不记剩余时间)。
|
|
100
106
|
function pause(id) {
|
|
101
|
-
|
|
102
|
-
if (!rec || rec.timer == null)
|
|
103
|
-
return;
|
|
104
|
-
clearTimeout(rec.timer);
|
|
105
|
-
rec.remaining = Math.max(0, rec.remaining - (now() - rec.startedAt));
|
|
106
|
-
rec.timer = null;
|
|
107
|
+
clearTimer(id);
|
|
107
108
|
}
|
|
109
|
+
// 对齐 Semi startCloseTimer_(mouseleave):从头完整计时。
|
|
108
110
|
function resume(id) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
+
if (timers.has(id))
|
|
112
|
+
return;
|
|
113
|
+
const item = toasts.find((t) => t.id === id);
|
|
114
|
+
if (!item)
|
|
111
115
|
return;
|
|
112
|
-
|
|
113
|
-
rec.timer = setTimeout(() => remove(id, 'timeout'), rec.remaining);
|
|
116
|
+
startTimer(id, item.duration);
|
|
114
117
|
}
|
|
115
118
|
return {
|
|
116
119
|
getToasts: () => toasts.slice(),
|
|
@@ -118,7 +121,9 @@ export function createToastStore(storeOptions = {}) {
|
|
|
118
121
|
listeners.add(listener);
|
|
119
122
|
return () => listeners.delete(listener);
|
|
120
123
|
},
|
|
124
|
+
has: (id) => toasts.some((t) => t.id === id),
|
|
121
125
|
add,
|
|
126
|
+
update,
|
|
122
127
|
remove,
|
|
123
128
|
removeAll,
|
|
124
129
|
pause,
|
package/dist/toast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toast.js","sourceRoot":"","sources":["../src/toast.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"toast.js","sourceRoot":"","sources":["../src/toast.ts"],"names":[],"mappings":"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"}
|
package/dist/toast.test.js
CHANGED
|
@@ -27,19 +27,14 @@ describe('createToastStore', () => {
|
|
|
27
27
|
expect(s.getToasts().length).toBe(1);
|
|
28
28
|
s.destroy();
|
|
29
29
|
});
|
|
30
|
-
it('
|
|
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', () => {
|
|
30
|
+
it('update() merges in place and restarts timer', () => {
|
|
38
31
|
const s = createToastStore();
|
|
39
32
|
const id = s.add({ content: 'v1', duration: 3 });
|
|
40
33
|
vi.advanceTimersByTime(2000);
|
|
41
|
-
s.
|
|
42
|
-
|
|
34
|
+
s.update(id, { content: 'v2', type: 'success' }); // update, restart 3s (default duration)
|
|
35
|
+
const [t] = s.getToasts();
|
|
36
|
+
expect(t.content).toBe('v2');
|
|
37
|
+
expect(t.type).toBe('success');
|
|
43
38
|
expect(s.getToasts().length).toBe(1);
|
|
44
39
|
vi.advanceTimersByTime(2000); // only 2s since update
|
|
45
40
|
expect(s.getToasts().length).toBe(1);
|
|
@@ -47,12 +42,29 @@ describe('createToastStore', () => {
|
|
|
47
42
|
expect(s.getToasts().length).toBe(0);
|
|
48
43
|
s.destroy();
|
|
49
44
|
});
|
|
50
|
-
it('
|
|
51
|
-
const s = createToastStore(
|
|
45
|
+
it('add() with existing id replaces in place', () => {
|
|
46
|
+
const s = createToastStore();
|
|
47
|
+
const id = s.add({ content: 'v1', duration: 0 });
|
|
48
|
+
s.add({ id, content: 'v2', duration: 0 });
|
|
49
|
+
expect(s.getToasts().map((t) => t.content)).toEqual(['v2']);
|
|
50
|
+
expect(s.getToasts().length).toBe(1);
|
|
51
|
+
s.destroy();
|
|
52
|
+
});
|
|
53
|
+
it('has() reflects presence', () => {
|
|
54
|
+
const s = createToastStore();
|
|
55
|
+
const id = s.add({ content: 'a', duration: 0 });
|
|
56
|
+
expect(s.has(id)).toBe(true);
|
|
57
|
+
expect(s.has('nope')).toBe(false);
|
|
58
|
+
s.remove(id);
|
|
59
|
+
expect(s.has(id)).toBe(false);
|
|
60
|
+
s.destroy();
|
|
61
|
+
});
|
|
62
|
+
it('does not evict — Semi keeps all toasts', () => {
|
|
63
|
+
const s = createToastStore();
|
|
52
64
|
s.add({ content: 'a', duration: 0 });
|
|
53
65
|
s.add({ content: 'b', duration: 0 });
|
|
54
66
|
s.add({ content: 'c', duration: 0 });
|
|
55
|
-
expect(s.getToasts().map((t) => t.content)).toEqual(['b', 'c']);
|
|
67
|
+
expect(s.getToasts().map((t) => t.content)).toEqual(['a', 'b', 'c']);
|
|
56
68
|
s.destroy();
|
|
57
69
|
});
|
|
58
70
|
it('manual remove and removeAll', () => {
|
|
@@ -65,26 +77,30 @@ describe('createToastStore', () => {
|
|
|
65
77
|
expect(s.getToasts().length).toBe(0);
|
|
66
78
|
s.destroy();
|
|
67
79
|
});
|
|
68
|
-
it('pause
|
|
80
|
+
it('pause clears timer; resume restarts full duration (对齐 Semi)', () => {
|
|
69
81
|
const s = createToastStore();
|
|
70
82
|
const id = s.add({ content: 'x', duration: 4 });
|
|
71
|
-
vi.advanceTimersByTime(1000);
|
|
83
|
+
vi.advanceTimersByTime(1000);
|
|
72
84
|
s.pause(id);
|
|
73
85
|
vi.advanceTimersByTime(10000); // paused, no dismiss
|
|
74
86
|
expect(s.getToasts().length).toBe(1);
|
|
75
|
-
s.resume(id);
|
|
76
|
-
vi.advanceTimersByTime(
|
|
87
|
+
s.resume(id); // restart full 4s
|
|
88
|
+
vi.advanceTimersByTime(3999);
|
|
77
89
|
expect(s.getToasts().length).toBe(1);
|
|
78
90
|
vi.advanceTimersByTime(1);
|
|
79
91
|
expect(s.getToasts().length).toBe(0);
|
|
80
92
|
s.destroy();
|
|
81
93
|
});
|
|
82
|
-
it('onClose fires with
|
|
94
|
+
it('onClose fires with no argument (对齐 Semi () => void)', () => {
|
|
83
95
|
const s = createToastStore();
|
|
84
|
-
const
|
|
85
|
-
const id = s.add({
|
|
96
|
+
const calls = [];
|
|
97
|
+
const id = s.add({
|
|
98
|
+
content: 'x',
|
|
99
|
+
duration: 0,
|
|
100
|
+
onClose: (...args) => calls.push(args),
|
|
101
|
+
});
|
|
86
102
|
s.remove(id);
|
|
87
|
-
expect(
|
|
103
|
+
expect(calls).toEqual([[]]);
|
|
88
104
|
s.destroy();
|
|
89
105
|
});
|
|
90
106
|
it('subscribers are notified on changes', () => {
|
|
@@ -96,31 +112,41 @@ describe('createToastStore', () => {
|
|
|
96
112
|
expect(counts).toEqual([1, 0]);
|
|
97
113
|
s.destroy();
|
|
98
114
|
});
|
|
99
|
-
it('defaults
|
|
115
|
+
it('defaults type to default and theme to normal', () => {
|
|
100
116
|
const s = createToastStore();
|
|
101
117
|
s.add({ content: 'x', duration: 0 });
|
|
102
118
|
const [t] = s.getToasts();
|
|
103
|
-
expect(t.
|
|
104
|
-
expect(t.theme).toBe('
|
|
119
|
+
expect(t.type).toBe('default');
|
|
120
|
+
expect(t.theme).toBe('normal');
|
|
121
|
+
expect(t.showClose).toBe(true);
|
|
122
|
+
expect(t.textMaxWidth).toBe(450);
|
|
123
|
+
expect(t.stack).toBe(false);
|
|
105
124
|
s.destroy();
|
|
106
125
|
});
|
|
107
|
-
it('
|
|
126
|
+
it('carries type/theme/stack/direction through', () => {
|
|
108
127
|
const s = createToastStore();
|
|
109
|
-
s.add({
|
|
128
|
+
s.add({
|
|
129
|
+
content: 'a',
|
|
130
|
+
duration: 0,
|
|
131
|
+
type: 'error',
|
|
132
|
+
theme: 'light',
|
|
133
|
+
stack: true,
|
|
134
|
+
direction: 'rtl',
|
|
135
|
+
});
|
|
110
136
|
const [t] = s.getToasts();
|
|
111
|
-
expect(t.
|
|
112
|
-
expect(t.theme).toBe('
|
|
137
|
+
expect(t.type).toBe('error');
|
|
138
|
+
expect(t.theme).toBe('light');
|
|
139
|
+
expect(t.stack).toBe(true);
|
|
140
|
+
expect(t.direction).toBe('rtl');
|
|
113
141
|
s.destroy();
|
|
114
142
|
});
|
|
115
|
-
it('
|
|
116
|
-
const s = createToastStore({
|
|
117
|
-
s.add({ content: '
|
|
118
|
-
s.
|
|
119
|
-
|
|
120
|
-
expect(
|
|
121
|
-
|
|
122
|
-
s.add({ content: 'top2', duration: 0, position: 'top' });
|
|
123
|
-
expect(s.getToasts().map((t) => t.content)).toEqual(['bottom1', 'top2']);
|
|
143
|
+
it('config defaults (defaultDuration/defaultTheme/defaultDirection)', () => {
|
|
144
|
+
const s = createToastStore({ defaultDuration: 5, defaultTheme: 'light', defaultDirection: 'rtl' });
|
|
145
|
+
s.add({ content: 'x' });
|
|
146
|
+
const [t] = s.getToasts();
|
|
147
|
+
expect(t.duration).toBe(5);
|
|
148
|
+
expect(t.theme).toBe('light');
|
|
149
|
+
expect(t.direction).toBe('rtl');
|
|
124
150
|
s.destroy();
|
|
125
151
|
});
|
|
126
152
|
});
|
package/dist/toast.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toast.test.js","sourceRoot":"","sources":["../src/toast.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAEpC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACxC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"toast.test.js","sourceRoot":"","sources":["../src/toast.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tree.d.ts
CHANGED
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
export type TreeKey = string | number;
|
|
9
9
|
export interface TreeNodeData {
|
|
10
10
|
key: TreeKey;
|
|
11
|
+
/** 节点的 value(对齐 Semi TreeNodeData.value)。不填时 onChange/value 等以 key 为准。 */
|
|
12
|
+
value?: string | number;
|
|
11
13
|
label: string;
|
|
12
14
|
disabled?: boolean;
|
|
13
|
-
checkable?: boolean;
|
|
14
|
-
selectable?: boolean;
|
|
15
15
|
isLeaf?: boolean;
|
|
16
16
|
children?: TreeNodeData[];
|
|
17
17
|
}
|
|
@@ -51,9 +51,15 @@ export declare function collectExpandableToDepth(data: TreeNodeData[], depth: nu
|
|
|
51
51
|
* Conduction (related mode): given a base set of explicitly-checked keys,
|
|
52
52
|
* derive the full checked set + half-checked (indeterminate) set with
|
|
53
53
|
* bottom-up + top-down parent/child propagation.
|
|
54
|
-
*
|
|
54
|
+
*
|
|
55
|
+
* `disableStrictly`(对齐 Semi `disableStrictly`)改变 disabled 节点的语义:
|
|
56
|
+
* - `false`(默认):disabled 叶子被排除在父子联动与父级计数之外——父级勾选不会
|
|
57
|
+
* 影响它,其状态也不计入父级 checked/half 的判定(保持既有行为,向后兼容)。
|
|
58
|
+
* - `true`:disabled 叶子的勾选态被「严格锁定」在 base 集里的原态——父级联动
|
|
59
|
+
* 不会改变它(既不会被父级勾上,也不会被父级取消),但它**仍参与**父级的
|
|
60
|
+
* checked/half 计数(一个已勾的 disabled 叶子会让父级算作已勾其一)。
|
|
55
61
|
*/
|
|
56
|
-
export declare function conduct(data: TreeNodeData[], checkedInput: ReadonlySet<TreeKey
|
|
62
|
+
export declare function conduct(data: TreeNodeData[], checkedInput: ReadonlySet<TreeKey>, disableStrictly?: boolean): {
|
|
57
63
|
checked: Set<TreeKey>;
|
|
58
64
|
half: Set<TreeKey>;
|
|
59
65
|
};
|
|
@@ -69,8 +75,19 @@ export declare function normalizeToLeaves(data: TreeNodeData[], checked: Readonl
|
|
|
69
75
|
* (leaf-level) after toggling `key`. The input base is normalized to leaves
|
|
70
76
|
* first, so passing `conduct`-output (with parent keys) round-trips correctly.
|
|
71
77
|
* Feed the result through `conduct` to render.
|
|
78
|
+
*
|
|
79
|
+
* disabled 叶子始终从被切换的叶子集里排除——切换父节点时它们的原态被冻结
|
|
80
|
+
* (既不会被父级勾上,也不会被父级取消)。这与 `disableStrictly` 语义天然一致,
|
|
81
|
+
* 因此本函数无需额外参数即可正确处理严格禁用的锁定。
|
|
82
|
+
*/
|
|
83
|
+
export declare function toggleCheck(data: TreeNodeData[], currentChecked: ReadonlySet<TreeKey>, key: TreeKey, disableStrictly?: boolean): Set<TreeKey>;
|
|
84
|
+
/**
|
|
85
|
+
* Collect the leaf-node keys within a checked set, in document order.
|
|
86
|
+
* 用于 `leafOnly`:多选勾选输出只回传叶子节点 key(滤掉父/半选节点)。
|
|
87
|
+
* `checked` 通常是 {@link conduct} 的输出(含父节点 key)——本函数只保留其中
|
|
88
|
+
* 真正的叶子(无子节点)者,按文档序返回,纯派生无副作用。
|
|
72
89
|
*/
|
|
73
|
-
export declare function
|
|
90
|
+
export declare function collectLeafKeys(data: TreeNodeData[], checked: ReadonlySet<TreeKey>): TreeKey[];
|
|
74
91
|
/**
|
|
75
92
|
* Search filtering: returns the set of node keys to expand so that every node
|
|
76
93
|
* matching `match` is visible (its ancestor chain). The matched keys themselves
|
package/dist/tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"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"}
|
package/dist/tree.js
CHANGED
|
@@ -109,9 +109,15 @@ function buildMeta(data) {
|
|
|
109
109
|
* Conduction (related mode): given a base set of explicitly-checked keys,
|
|
110
110
|
* derive the full checked set + half-checked (indeterminate) set with
|
|
111
111
|
* bottom-up + top-down parent/child propagation.
|
|
112
|
-
*
|
|
112
|
+
*
|
|
113
|
+
* `disableStrictly`(对齐 Semi `disableStrictly`)改变 disabled 节点的语义:
|
|
114
|
+
* - `false`(默认):disabled 叶子被排除在父子联动与父级计数之外——父级勾选不会
|
|
115
|
+
* 影响它,其状态也不计入父级 checked/half 的判定(保持既有行为,向后兼容)。
|
|
116
|
+
* - `true`:disabled 叶子的勾选态被「严格锁定」在 base 集里的原态——父级联动
|
|
117
|
+
* 不会改变它(既不会被父级勾上,也不会被父级取消),但它**仍参与**父级的
|
|
118
|
+
* checked/half 计数(一个已勾的 disabled 叶子会让父级算作已勾其一)。
|
|
113
119
|
*/
|
|
114
|
-
export function conduct(data, checkedInput) {
|
|
120
|
+
export function conduct(data, checkedInput, disableStrictly = false) {
|
|
115
121
|
const meta = buildMeta(data);
|
|
116
122
|
const disabled = new Set();
|
|
117
123
|
(function markDisabled(nodes, parentDisabled) {
|
|
@@ -123,7 +129,17 @@ export function conduct(data, checkedInput) {
|
|
|
123
129
|
markDisabled(node.children, d);
|
|
124
130
|
}
|
|
125
131
|
})(data, false);
|
|
132
|
+
// 严格禁用时:先算出「哪些 disabled 叶子是被『直接』勾选的」——只认 checkedInput 里
|
|
133
|
+
// 本身就是叶子 key 的项,不含展开某父级得到的叶子(父级联动不该锁上 disabled 子节点),
|
|
134
|
+
// 供 disabled 叶子锁定其原态。
|
|
135
|
+
const explicitLeaves = new Set();
|
|
136
|
+
for (const key of checkedInput) {
|
|
137
|
+
const ls = meta.leaves.get(key);
|
|
138
|
+
if (ls && ls.length === 1 && ls[0] === key)
|
|
139
|
+
explicitLeaves.add(key); // key 本身是叶子
|
|
140
|
+
}
|
|
126
141
|
// Top-down: a checked parent checks all enabled leaf descendants.
|
|
142
|
+
// 严格模式下 disabled 叶子不被父级联动,但若其自身已在显式勾选集内则保留其勾态。
|
|
127
143
|
const leafChecked = new Set();
|
|
128
144
|
for (const key of checkedInput) {
|
|
129
145
|
const ls = meta.leaves.get(key);
|
|
@@ -134,6 +150,12 @@ export function conduct(data, checkedInput) {
|
|
|
134
150
|
leafChecked.add(leaf);
|
|
135
151
|
}
|
|
136
152
|
}
|
|
153
|
+
if (disableStrictly) {
|
|
154
|
+
for (const leaf of explicitLeaves) {
|
|
155
|
+
if (disabled.has(leaf))
|
|
156
|
+
leafChecked.add(leaf);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
137
159
|
const checked = new Set();
|
|
138
160
|
const half = new Set();
|
|
139
161
|
// Bottom-up: derive each node's state from its leaf descendants.
|
|
@@ -141,13 +163,14 @@ export function conduct(data, checkedInput) {
|
|
|
141
163
|
for (let i = meta.allKeys.length - 1; i >= 0; i--) {
|
|
142
164
|
const key = meta.allKeys[i];
|
|
143
165
|
const leaves = meta.leaves.get(key);
|
|
144
|
-
|
|
145
|
-
|
|
166
|
+
// 严格模式:disabled 叶子仍计入分母(参与父级计数);非严格:排除 disabled。
|
|
167
|
+
const countedLeaves = disableStrictly ? leaves : leaves.filter((l) => !disabled.has(l));
|
|
168
|
+
if (countedLeaves.length === 0)
|
|
146
169
|
continue;
|
|
147
|
-
const checkedCount =
|
|
170
|
+
const checkedCount = countedLeaves.filter((l) => leafChecked.has(l)).length;
|
|
148
171
|
if (checkedCount === 0)
|
|
149
172
|
continue;
|
|
150
|
-
if (checkedCount ===
|
|
173
|
+
if (checkedCount === countedLeaves.length)
|
|
151
174
|
checked.add(key);
|
|
152
175
|
else
|
|
153
176
|
half.add(key);
|
|
@@ -180,17 +203,23 @@ export function normalizeToLeaves(data, checked) {
|
|
|
180
203
|
* (leaf-level) after toggling `key`. The input base is normalized to leaves
|
|
181
204
|
* first, so passing `conduct`-output (with parent keys) round-trips correctly.
|
|
182
205
|
* Feed the result through `conduct` to render.
|
|
206
|
+
*
|
|
207
|
+
* disabled 叶子始终从被切换的叶子集里排除——切换父节点时它们的原态被冻结
|
|
208
|
+
* (既不会被父级勾上,也不会被父级取消)。这与 `disableStrictly` 语义天然一致,
|
|
209
|
+
* 因此本函数无需额外参数即可正确处理严格禁用的锁定。
|
|
183
210
|
*/
|
|
184
|
-
export function toggleCheck(data, currentChecked, key) {
|
|
211
|
+
export function toggleCheck(data, currentChecked, key, disableStrictly = false) {
|
|
185
212
|
const meta = buildMeta(data);
|
|
186
213
|
const disabled = new Set();
|
|
214
|
+
// 默认:父 disabled 传播给子(子亦不参与联动)。
|
|
215
|
+
// disableStrictly=true:disabled 不向下传播,仅节点自身 disabled 才排除联动(对齐 Semi)。
|
|
187
216
|
(function mark(nodes, pd) {
|
|
188
217
|
for (const node of nodes) {
|
|
189
|
-
const d = pd || !!node.disabled;
|
|
218
|
+
const d = disableStrictly ? !!node.disabled : pd || !!node.disabled;
|
|
190
219
|
if (d)
|
|
191
220
|
disabled.add(node.key);
|
|
192
221
|
if (node.children)
|
|
193
|
-
mark(node.children, d);
|
|
222
|
+
mark(node.children, disableStrictly ? false : d);
|
|
194
223
|
}
|
|
195
224
|
})(data, false);
|
|
196
225
|
const base = normalizeToLeaves(data, currentChecked);
|
|
@@ -205,6 +234,29 @@ export function toggleCheck(data, currentChecked, key) {
|
|
|
205
234
|
next.add(l);
|
|
206
235
|
return next;
|
|
207
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Collect the leaf-node keys within a checked set, in document order.
|
|
239
|
+
* 用于 `leafOnly`:多选勾选输出只回传叶子节点 key(滤掉父/半选节点)。
|
|
240
|
+
* `checked` 通常是 {@link conduct} 的输出(含父节点 key)——本函数只保留其中
|
|
241
|
+
* 真正的叶子(无子节点)者,按文档序返回,纯派生无副作用。
|
|
242
|
+
*/
|
|
243
|
+
export function collectLeafKeys(data, checked) {
|
|
244
|
+
const out = [];
|
|
245
|
+
const walk = (nodes) => {
|
|
246
|
+
for (const node of nodes) {
|
|
247
|
+
const isLeaf = !node.children || node.children.length === 0;
|
|
248
|
+
if (isLeaf) {
|
|
249
|
+
if (checked.has(node.key))
|
|
250
|
+
out.push(node.key);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
walk(node.children);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
walk(data);
|
|
258
|
+
return out;
|
|
259
|
+
}
|
|
208
260
|
/**
|
|
209
261
|
* Search filtering: returns the set of node keys to expand so that every node
|
|
210
262
|
* matching `match` is visible (its ancestor chain). The matched keys themselves
|