@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.
Files changed (283) hide show
  1. package/dist/ai-chat-dialogue.d.ts +300 -0
  2. package/dist/ai-chat-dialogue.d.ts.map +1 -0
  3. package/dist/ai-chat-dialogue.js +699 -0
  4. package/dist/ai-chat-dialogue.js.map +1 -0
  5. package/dist/ai-chat-dialogue.test.d.ts +2 -0
  6. package/dist/ai-chat-dialogue.test.d.ts.map +1 -0
  7. package/dist/ai-chat-dialogue.test.js +338 -0
  8. package/dist/ai-chat-dialogue.test.js.map +1 -0
  9. package/dist/ai-chat-input.d.ts +191 -0
  10. package/dist/ai-chat-input.d.ts.map +1 -0
  11. package/dist/ai-chat-input.js +274 -0
  12. package/dist/ai-chat-input.js.map +1 -0
  13. package/dist/ai-chat-input.test.d.ts +2 -0
  14. package/dist/ai-chat-input.test.d.ts.map +1 -0
  15. package/dist/ai-chat-input.test.js +339 -0
  16. package/dist/ai-chat-input.test.js.map +1 -0
  17. package/dist/audio-player.d.ts +154 -0
  18. package/dist/audio-player.d.ts.map +1 -0
  19. package/dist/audio-player.js +254 -0
  20. package/dist/audio-player.js.map +1 -0
  21. package/dist/audio-player.test.d.ts +2 -0
  22. package/dist/audio-player.test.d.ts.map +1 -0
  23. package/dist/audio-player.test.js +275 -0
  24. package/dist/audio-player.test.js.map +1 -0
  25. package/dist/back-top.d.ts +4 -1
  26. package/dist/back-top.d.ts.map +1 -1
  27. package/dist/back-top.js +5 -2
  28. package/dist/back-top.js.map +1 -1
  29. package/dist/back-top.test.js +3 -2
  30. package/dist/back-top.test.js.map +1 -1
  31. package/dist/calendar.d.ts +132 -44
  32. package/dist/calendar.d.ts.map +1 -1
  33. package/dist/calendar.js +413 -70
  34. package/dist/calendar.js.map +1 -1
  35. package/dist/calendar.test.js +160 -76
  36. package/dist/calendar.test.js.map +1 -1
  37. package/dist/chat.d.ts +172 -0
  38. package/dist/chat.d.ts.map +1 -0
  39. package/dist/chat.js +210 -0
  40. package/dist/chat.js.map +1 -0
  41. package/dist/chat.test.d.ts +2 -0
  42. package/dist/chat.test.d.ts.map +1 -0
  43. package/dist/chat.test.js +181 -0
  44. package/dist/chat.test.js.map +1 -0
  45. package/dist/code-highlight.d.ts +30 -0
  46. package/dist/code-highlight.d.ts.map +1 -0
  47. package/dist/code-highlight.js +37 -0
  48. package/dist/code-highlight.js.map +1 -0
  49. package/dist/code-highlight.test.d.ts +2 -0
  50. package/dist/code-highlight.test.d.ts.map +1 -0
  51. package/dist/code-highlight.test.js +36 -0
  52. package/dist/code-highlight.test.js.map +1 -0
  53. package/dist/collapsible.d.ts +41 -0
  54. package/dist/collapsible.d.ts.map +1 -0
  55. package/dist/collapsible.js +33 -0
  56. package/dist/collapsible.js.map +1 -0
  57. package/dist/collapsible.test.d.ts +2 -0
  58. package/dist/collapsible.test.d.ts.map +1 -0
  59. package/dist/collapsible.test.js +57 -0
  60. package/dist/collapsible.test.js.map +1 -0
  61. package/dist/color-value.d.ts +60 -0
  62. package/dist/color-value.d.ts.map +1 -0
  63. package/dist/color-value.js +165 -0
  64. package/dist/color-value.js.map +1 -0
  65. package/dist/color-value.test.d.ts +2 -0
  66. package/dist/color-value.test.d.ts.map +1 -0
  67. package/dist/color-value.test.js +104 -0
  68. package/dist/color-value.test.js.map +1 -0
  69. package/dist/config-provider.d.ts +76 -37
  70. package/dist/config-provider.d.ts.map +1 -1
  71. package/dist/config-provider.js +107 -32
  72. package/dist/config-provider.js.map +1 -1
  73. package/dist/config-provider.test.js +123 -60
  74. package/dist/config-provider.test.js.map +1 -1
  75. package/dist/cropper.d.ts +164 -0
  76. package/dist/cropper.d.ts.map +1 -0
  77. package/dist/cropper.js +841 -0
  78. package/dist/cropper.js.map +1 -0
  79. package/dist/cropper.test.d.ts +2 -0
  80. package/dist/cropper.test.d.ts.map +1 -0
  81. package/dist/cropper.test.js +259 -0
  82. package/dist/cropper.test.js.map +1 -0
  83. package/dist/drag-move.d.ts +119 -0
  84. package/dist/drag-move.d.ts.map +1 -0
  85. package/dist/drag-move.js +237 -0
  86. package/dist/drag-move.js.map +1 -0
  87. package/dist/drag-move.test.d.ts +2 -0
  88. package/dist/drag-move.test.d.ts.map +1 -0
  89. package/dist/drag-move.test.js +304 -0
  90. package/dist/drag-move.test.js.map +1 -0
  91. package/dist/editable.d.ts +24 -4
  92. package/dist/editable.d.ts.map +1 -1
  93. package/dist/editable.js +18 -0
  94. package/dist/editable.js.map +1 -1
  95. package/dist/editable.test.js +55 -2
  96. package/dist/editable.test.js.map +1 -1
  97. package/dist/ellipsis.d.ts +13 -0
  98. package/dist/ellipsis.d.ts.map +1 -1
  99. package/dist/ellipsis.js +36 -0
  100. package/dist/ellipsis.js.map +1 -1
  101. package/dist/ellipsis.test.js +37 -1
  102. package/dist/ellipsis.test.js.map +1 -1
  103. package/dist/form-path.d.ts +19 -0
  104. package/dist/form-path.d.ts.map +1 -0
  105. package/dist/form-path.js +97 -0
  106. package/dist/form-path.js.map +1 -0
  107. package/dist/form-path.test.d.ts +2 -0
  108. package/dist/form-path.test.d.ts.map +1 -0
  109. package/dist/form-path.test.js +57 -0
  110. package/dist/form-path.test.js.map +1 -0
  111. package/dist/form-validate.d.ts +13 -0
  112. package/dist/form-validate.d.ts.map +1 -0
  113. package/dist/form-validate.js +204 -0
  114. package/dist/form-validate.js.map +1 -0
  115. package/dist/form.d.ts +91 -18
  116. package/dist/form.d.ts.map +1 -1
  117. package/dist/form.js +170 -115
  118. package/dist/form.js.map +1 -1
  119. package/dist/form.test.js +349 -76
  120. package/dist/form.test.js.map +1 -1
  121. package/dist/highlight.d.ts +42 -32
  122. package/dist/highlight.d.ts.map +1 -1
  123. package/dist/highlight.js +67 -41
  124. package/dist/highlight.js.map +1 -1
  125. package/dist/highlight.test.js +73 -32
  126. package/dist/highlight.test.js.map +1 -1
  127. package/dist/hotkeys.d.ts +151 -0
  128. package/dist/hotkeys.d.ts.map +1 -0
  129. package/dist/hotkeys.js +188 -0
  130. package/dist/hotkeys.js.map +1 -0
  131. package/dist/hotkeys.test.d.ts +2 -0
  132. package/dist/hotkeys.test.d.ts.map +1 -0
  133. package/dist/hotkeys.test.js +170 -0
  134. package/dist/hotkeys.test.js.map +1 -0
  135. package/dist/index.d.ts +33 -17
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +32 -13
  138. package/dist/index.js.map +1 -1
  139. package/dist/input.d.ts +34 -0
  140. package/dist/input.d.ts.map +1 -0
  141. package/dist/input.js +54 -0
  142. package/dist/input.js.map +1 -0
  143. package/dist/input.test.d.ts +2 -0
  144. package/dist/input.test.d.ts.map +1 -0
  145. package/dist/input.test.js +56 -0
  146. package/dist/input.test.js.map +1 -0
  147. package/dist/markdown-render.d.ts +49 -0
  148. package/dist/markdown-render.d.ts.map +1 -0
  149. package/dist/markdown-render.js +61 -0
  150. package/dist/markdown-render.js.map +1 -0
  151. package/dist/markdown-render.test.d.ts +2 -0
  152. package/dist/markdown-render.test.d.ts.map +1 -0
  153. package/dist/markdown-render.test.js +106 -0
  154. package/dist/markdown-render.test.js.map +1 -0
  155. package/dist/notification.d.ts +40 -31
  156. package/dist/notification.d.ts.map +1 -1
  157. package/dist/notification.js +86 -70
  158. package/dist/notification.js.map +1 -1
  159. package/dist/notification.test.js +62 -39
  160. package/dist/notification.test.js.map +1 -1
  161. package/dist/numeral.d.ts +32 -0
  162. package/dist/numeral.d.ts.map +1 -0
  163. package/dist/numeral.js +67 -0
  164. package/dist/numeral.js.map +1 -0
  165. package/dist/numeral.test.d.ts +2 -0
  166. package/dist/numeral.test.d.ts.map +1 -0
  167. package/dist/numeral.test.js +59 -0
  168. package/dist/numeral.test.js.map +1 -0
  169. package/dist/overflow-list.d.ts +9 -40
  170. package/dist/overflow-list.d.ts.map +1 -1
  171. package/dist/overflow-list.js +9 -70
  172. package/dist/overflow-list.js.map +1 -1
  173. package/dist/overflow-list.test.js +1 -122
  174. package/dist/overflow-list.test.js.map +1 -1
  175. package/dist/pagination.d.ts +17 -0
  176. package/dist/pagination.d.ts.map +1 -1
  177. package/dist/pagination.js +48 -0
  178. package/dist/pagination.js.map +1 -1
  179. package/dist/pagination.test.js +40 -1
  180. package/dist/pagination.test.js.map +1 -1
  181. package/dist/pincode.d.ts +79 -0
  182. package/dist/pincode.d.ts.map +1 -0
  183. package/dist/pincode.js +119 -0
  184. package/dist/pincode.js.map +1 -0
  185. package/dist/pincode.test.d.ts +2 -0
  186. package/dist/pincode.test.d.ts.map +1 -0
  187. package/dist/pincode.test.js +151 -0
  188. package/dist/pincode.test.js.map +1 -0
  189. package/dist/progress.d.ts +32 -30
  190. package/dist/progress.d.ts.map +1 -1
  191. package/dist/progress.js +257 -64
  192. package/dist/progress.js.map +1 -1
  193. package/dist/progress.test.js +50 -47
  194. package/dist/progress.test.js.map +1 -1
  195. package/dist/resizable.d.ts +200 -0
  196. package/dist/resizable.d.ts.map +1 -0
  197. package/dist/resizable.js +329 -0
  198. package/dist/resizable.js.map +1 -0
  199. package/dist/resizable.test.d.ts +2 -0
  200. package/dist/resizable.test.d.ts.map +1 -0
  201. package/dist/resizable.test.js +302 -0
  202. package/dist/resizable.test.js.map +1 -0
  203. package/dist/scroll-list.d.ts +69 -62
  204. package/dist/scroll-list.d.ts.map +1 -1
  205. package/dist/scroll-list.js +103 -144
  206. package/dist/scroll-list.js.map +1 -1
  207. package/dist/scroll-list.test.js +100 -110
  208. package/dist/scroll-list.test.js.map +1 -1
  209. package/dist/sidebar.d.ts +46 -0
  210. package/dist/sidebar.d.ts.map +1 -0
  211. package/dist/sidebar.js +65 -0
  212. package/dist/sidebar.js.map +1 -0
  213. package/dist/sidebar.test.d.ts +2 -0
  214. package/dist/sidebar.test.d.ts.map +1 -0
  215. package/dist/sidebar.test.js +88 -0
  216. package/dist/sidebar.test.js.map +1 -0
  217. package/dist/spin.d.ts +5 -5
  218. package/dist/spin.d.ts.map +1 -1
  219. package/dist/spin.js +13 -39
  220. package/dist/spin.js.map +1 -1
  221. package/dist/spin.test.js +2 -26
  222. package/dist/spin.test.js.map +1 -1
  223. package/dist/toast.d.ts +33 -30
  224. package/dist/toast.d.ts.map +1 -1
  225. package/dist/toast.js +77 -72
  226. package/dist/toast.js.map +1 -1
  227. package/dist/toast.test.js +63 -37
  228. package/dist/toast.test.js.map +1 -1
  229. package/dist/tree.d.ts +22 -5
  230. package/dist/tree.d.ts.map +1 -1
  231. package/dist/tree.js +61 -9
  232. package/dist/tree.js.map +1 -1
  233. package/dist/tree.test.js +72 -1
  234. package/dist/tree.test.js.map +1 -1
  235. package/dist/user-guide.d.ts +73 -0
  236. package/dist/user-guide.d.ts.map +1 -0
  237. package/dist/user-guide.js +95 -0
  238. package/dist/user-guide.js.map +1 -0
  239. package/dist/user-guide.test.d.ts +2 -0
  240. package/dist/user-guide.test.d.ts.map +1 -0
  241. package/dist/user-guide.test.js +109 -0
  242. package/dist/user-guide.test.js.map +1 -0
  243. package/dist/video-player.d.ts +196 -0
  244. package/dist/video-player.d.ts.map +1 -0
  245. package/dist/video-player.js +461 -0
  246. package/dist/video-player.js.map +1 -0
  247. package/dist/video-player.test.d.ts +2 -0
  248. package/dist/video-player.test.d.ts.map +1 -0
  249. package/dist/video-player.test.js +435 -0
  250. package/dist/video-player.test.js.map +1 -0
  251. package/package.json +17 -1
  252. package/dist/banner.d.ts +0 -19
  253. package/dist/banner.d.ts.map +0 -1
  254. package/dist/banner.js +0 -20
  255. package/dist/banner.js.map +0 -1
  256. package/dist/banner.test.d.ts +0 -2
  257. package/dist/banner.test.d.ts.map +0 -1
  258. package/dist/banner.test.js +0 -29
  259. package/dist/banner.test.js.map +0 -1
  260. package/dist/breakpoints.d.ts +0 -30
  261. package/dist/breakpoints.d.ts.map +0 -1
  262. package/dist/breakpoints.js +0 -45
  263. package/dist/breakpoints.js.map +0 -1
  264. package/dist/breakpoints.test.d.ts +0 -2
  265. package/dist/breakpoints.test.d.ts.map +0 -1
  266. package/dist/breakpoints.test.js +0 -46
  267. package/dist/breakpoints.test.js.map +0 -1
  268. package/dist/lottie-icon.d.ts +0 -88
  269. package/dist/lottie-icon.d.ts.map +0 -1
  270. package/dist/lottie-icon.js +0 -84
  271. package/dist/lottie-icon.js.map +0 -1
  272. package/dist/lottie-icon.test.d.ts +0 -2
  273. package/dist/lottie-icon.test.d.ts.map +0 -1
  274. package/dist/lottie-icon.test.js +0 -88
  275. package/dist/lottie-icon.test.js.map +0 -1
  276. package/dist/sider.d.ts +0 -26
  277. package/dist/sider.d.ts.map +0 -1
  278. package/dist/sider.js +0 -55
  279. package/dist/sider.js.map +0 -1
  280. package/dist/sider.test.d.ts +0 -2
  281. package/dist/sider.test.d.ts.map +0 -1
  282. package/dist/sider.test.js +0 -29
  283. package/dist/sider.test.js.map +0 -1
package/dist/toast.js CHANGED
@@ -1,13 +1,17 @@
1
1
  /**
2
- * createToastStore — framework-agnostic singleton toast queue + timers.
3
- * Manages a list of toasts with auto-dismiss timers, hover pause/resume (by
4
- * remaining time), FIFO maxCount eviction, and id-based dedup/update. No DOM,
5
- * no framework deps. The svelte layer subscribes and renders.
6
- * See specs/components/feedback/Toast.spec.md §3.
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 { maxCount = 5, defaultDuration = 3 } = storeOptions;
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 rec = timers.get(id);
24
- if (rec?.timer != null) {
25
- clearTimeout(rec.timer);
26
- rec.timer = null;
24
+ const timer = timers.get(id);
25
+ if (timer != null) {
26
+ clearTimeout(timer);
27
+ timers.delete(id);
27
28
  }
28
29
  }
29
- function startTimer(id, ms) {
30
- if (ms <= 0)
31
- return; // persist
32
- const rec = { timer: null, remaining: ms, startedAt: now() };
33
- rec.timer = setTimeout(() => remove(id, 'timeout'), ms);
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 remove(id, reason = 'manual') {
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?.(id, reason);
59
+ item.onClose?.();
45
60
  }
46
61
  function add(options) {
47
62
  const id = options.id ?? useId('cd-toast');
48
- const type = options.type ?? 'info';
49
- // loading defaults to persist; others use provided duration or default
50
- const duration = options.duration ?? (type === 'loading' ? 0 : defaultDuration);
51
- const item = {
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
- position: options.position ?? 'top',
57
- closable: options.closable ?? true,
58
- pauseOnHover: options.pauseOnHover ?? true,
59
- theme: options.theme ?? 'light',
60
- onClose: options.onClose,
61
- icon: options.icon,
62
- showClose: options.showClose ?? options.closable ?? true,
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
- const existingIndex = toasts.findIndex((t) => t.id === id);
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
- startTimer(id, duration * 1000);
88
- return id;
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?.(t.id, 'destroyAll');
103
+ t.onClose?.();
99
104
  }
105
+ // 对齐 Semi clearCloseTimer_:hover 暂停即清定时器(不记剩余时间)。
100
106
  function pause(id) {
101
- const rec = timers.get(id);
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
- const rec = timers.get(id);
110
- if (!rec || rec.timer != null || rec.remaining <= 0)
111
+ if (timers.has(id))
112
+ return;
113
+ const item = toasts.find((t) => t.id === id);
114
+ if (!item)
111
115
  return;
112
- rec.startedAt = now();
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":"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"}
1
+ {"version":3,"file":"toast.js","sourceRoot":"","sources":["../src/toast.ts"],"names":[],"mappings":"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"}
@@ -27,19 +27,14 @@ describe('createToastStore', () => {
27
27
  expect(s.getToasts().length).toBe(1);
28
28
  s.destroy();
29
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', () => {
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.add({ id, content: 'v2', duration: 3 }); // update, restart 3s
42
- expect(s.getToasts().map((t) => t.content)).toEqual(['v2']);
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('maxCount evicts the oldest (FIFO)', () => {
51
- const s = createToastStore({ maxCount: 2 });
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/resume preserves remaining time', () => {
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); // 3s left
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(2999);
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 the right reason', () => {
94
+ it('onClose fires with no argument (对齐 Semi () => void)', () => {
83
95
  const s = createToastStore();
84
- const reasons = [];
85
- const id = s.add({ content: 'x', duration: 0, onClose: (_i, r) => reasons.push(r) });
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(reasons).toEqual(['manual']);
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 position to top and theme to light', () => {
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.position).toBe('top');
104
- expect(t.theme).toBe('light');
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('supports 6 positions and carries theme through', () => {
126
+ it('carries type/theme/stack/direction through', () => {
108
127
  const s = createToastStore();
109
- s.add({ content: 'a', duration: 0, position: 'bottomRight', theme: 'dark' });
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.position).toBe('bottomRight');
112
- expect(t.theme).toBe('dark');
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('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']);
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
  });
@@ -1 +1 @@
1
- {"version":3,"file":"toast.test.js","sourceRoot":"","sources":["../src/toast.test.ts"],"names":[],"mappings":"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"}
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,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,wCAAwC;QAC1F,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB;QACrD,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,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1C,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,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,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,SAAS,EAAE,CAAC;QACd,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,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAChD,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACZ,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB;QACpD,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;QAChC,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,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;YACf,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;SAClD,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACb,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC;YACJ,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;QACnG,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,CAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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
- * Disabled nodes are excluded from auto-check.
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 toggleCheck(data: TreeNodeData[], currentChecked: ReadonlySet<TreeKey>, key: TreeKey): Set<TreeKey>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"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"}
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
- * Disabled nodes are excluded from auto-check.
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
- const enabledLeaves = leaves.filter((l) => !disabled.has(l));
145
- if (enabledLeaves.length === 0)
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 = enabledLeaves.filter((l) => leafChecked.has(l)).length;
170
+ const checkedCount = countedLeaves.filter((l) => leafChecked.has(l)).length;
148
171
  if (checkedCount === 0)
149
172
  continue;
150
- if (checkedCount === enabledLeaves.length)
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