pxd 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/dist/components/_internal/calendar-day.vue +19 -19
  2. package/dist/components/_internal/dismiss-container.d.vue.ts +1 -1
  3. package/dist/components/_internal/dismiss-container.vue +19 -19
  4. package/dist/components/_internal/loading-mask.vue +9 -1
  5. package/dist/components/_internal/mention-editor.d.vue.ts +1 -1
  6. package/dist/components/_internal/mention-editor.vue +1 -1
  7. package/dist/components/_internal/popover-arrow.d.vue.ts +1 -1
  8. package/dist/components/_internal/popover-arrow.vue +1 -1
  9. package/dist/components/{steps → _internal}/step-item.d.vue.ts +1 -1
  10. package/dist/components/{steps → _internal}/step-item.vue +1 -1
  11. package/dist/components/_internal/tree-node.d.vue.ts +20 -20
  12. package/dist/components/_internal/tree-node.vue +53 -45
  13. package/dist/components/active-graph/index.d.vue.ts +2 -2
  14. package/dist/components/approval-card/index.d.vue.ts +1 -1
  15. package/dist/components/approval-card/index.vue +34 -17
  16. package/dist/components/approval-card/types.d.ts +1 -1
  17. package/dist/components/avatar/index.d.vue.ts +2 -2
  18. package/dist/components/avatar/index.vue +1 -1
  19. package/dist/components/backtop/index.d.vue.ts +3 -3
  20. package/dist/components/backtop/index.vue +17 -17
  21. package/dist/components/backtop/types.d.ts +1 -1
  22. package/dist/components/badge/index.d.vue.ts +3 -3
  23. package/dist/components/badge/index.vue +43 -43
  24. package/dist/components/badge/types.d.ts +1 -1
  25. package/dist/components/book/types.d.ts +1 -1
  26. package/dist/components/border-beam/index.vue +1 -1
  27. package/dist/components/border-beam/types.d.ts +1 -1
  28. package/dist/components/bubble/index.vue +1 -1
  29. package/dist/components/bubble-group/index.d.vue.ts +4 -4
  30. package/dist/components/button/index.d.vue.ts +5 -5
  31. package/dist/components/button/index.vue +13 -13
  32. package/dist/components/button/types.d.ts +1 -1
  33. package/dist/components/button-group/types.d.ts +1 -1
  34. package/dist/components/calendar/index.d.vue.ts +2 -2
  35. package/dist/components/calendar/index.vue +5 -5
  36. package/dist/components/calendar/types.d.ts +1 -1
  37. package/dist/components/card/types.d.ts +1 -1
  38. package/dist/components/carousel/index.d.vue.ts +7 -7
  39. package/dist/components/carousel/index.vue +1 -1
  40. package/dist/components/carousel/types.d.ts +1 -1
  41. package/dist/components/checkbox/index.vue +1 -1
  42. package/dist/components/checkbox/types.d.ts +1 -1
  43. package/dist/components/checkbox-group/index.d.vue.ts +2 -2
  44. package/dist/components/checkbox-group/types.d.ts +1 -1
  45. package/dist/components/chip/index.d.vue.ts +1 -1
  46. package/dist/components/chip/types.d.ts +1 -1
  47. package/dist/components/choicebox/index.d.vue.ts +3 -3
  48. package/dist/components/choicebox/types.d.ts +1 -1
  49. package/dist/components/choicebox-item/index.vue +8 -8
  50. package/dist/components/choicebox-item/types.d.ts +1 -1
  51. package/dist/components/collapse/index.vue +2 -2
  52. package/dist/components/collapse-group/index.vue +1 -1
  53. package/dist/components/collapse-group/types.d.ts +1 -1
  54. package/dist/components/command-menu/index.d.vue.ts +5 -5
  55. package/dist/components/command-menu/index.vue +10 -3
  56. package/dist/components/config-provider/index.d.vue.ts +40 -5
  57. package/dist/components/config-provider/types.d.ts +2 -1
  58. package/dist/components/confirm-popover/index.d.vue.ts +39 -0
  59. package/dist/components/confirm-popover/index.vue +177 -0
  60. package/dist/components/confirm-popover/types.d.ts +23 -0
  61. package/dist/components/copy-button/index.d.vue.ts +2 -6
  62. package/dist/components/copy-button/index.vue +4 -6
  63. package/dist/components/dash-line/index.d.vue.ts +1 -1
  64. package/dist/components/dash-line/index.vue +8 -8
  65. package/dist/components/dash-line/types.d.ts +1 -1
  66. package/dist/components/date-picker/index.d.vue.ts +1 -1
  67. package/dist/components/date-picker/index.vue +3 -3
  68. package/dist/components/date-picker/types.d.ts +1 -1
  69. package/dist/components/drawer/index.d.vue.ts +7 -7
  70. package/dist/components/drawer/index.vue +30 -15
  71. package/dist/components/drawer/types.d.ts +2 -2
  72. package/dist/components/effort-slider/index.vue +12 -18
  73. package/dist/components/effort-slider/types.d.ts +1 -1
  74. package/dist/components/ellipsis-text/index.d.vue.ts +2 -2
  75. package/dist/components/ellipsis-text/index.vue +75 -75
  76. package/dist/components/error/types.d.ts +1 -1
  77. package/dist/components/fader/index.vue +2 -2
  78. package/dist/components/fader/types.d.ts +1 -1
  79. package/dist/components/gauge/index.vue +2 -2
  80. package/dist/components/gauge/types.d.ts +1 -1
  81. package/dist/components/grid/types.d.ts +1 -1
  82. package/dist/components/grid-item/types.d.ts +1 -1
  83. package/dist/components/hint/index.d.vue.ts +32 -0
  84. package/dist/components/hint/index.vue +239 -0
  85. package/dist/components/hint/types.d.ts +17 -0
  86. package/dist/components/hold-button/index.d.vue.ts +4 -4
  87. package/dist/components/hold-button/index.vue +10 -10
  88. package/dist/components/index.d.ts +4 -0
  89. package/dist/components/index.js +4 -0
  90. package/dist/components/input/index.d.vue.ts +1 -1
  91. package/dist/components/input/index.vue +14 -7
  92. package/dist/components/input/types.d.ts +1 -1
  93. package/dist/components/intersection-observer/index.vue +3 -3
  94. package/dist/components/kbd/index.vue +2 -2
  95. package/dist/components/kbd/types.d.ts +1 -1
  96. package/dist/components/link-button/index.d.vue.ts +5 -5
  97. package/dist/components/list/index.d.vue.ts +4 -4
  98. package/dist/components/list/index.vue +126 -47
  99. package/dist/components/list/types.d.ts +1 -1
  100. package/dist/components/list-group/types.d.ts +1 -1
  101. package/dist/components/list-item/index.d.vue.ts +2 -2
  102. package/dist/components/list-item/index.vue +26 -8
  103. package/dist/components/loading-bar/index.vue +5 -5
  104. package/dist/components/marching-ants/index.d.vue.ts +2 -2
  105. package/dist/components/marching-ants/index.vue +56 -56
  106. package/dist/components/marching-ants/types.d.ts +1 -1
  107. package/dist/components/marquee/index.d.vue.ts +6 -6
  108. package/dist/components/marquee/index.vue +16 -16
  109. package/dist/components/marquee/types.d.ts +1 -1
  110. package/dist/components/material/index.d.vue.ts +3 -3
  111. package/dist/components/mention/index.d.vue.ts +5 -5
  112. package/dist/components/mention/index.vue +68 -68
  113. package/dist/components/menu/index.d.vue.ts +4 -4
  114. package/dist/components/menu/index.vue +10 -10
  115. package/dist/components/menu/types.d.ts +1 -1
  116. package/dist/components/message/index.d.vue.ts +1 -1
  117. package/dist/components/message/index.vue +19 -25
  118. package/dist/components/message/types.d.ts +1 -1
  119. package/dist/components/message-item/index.vue +2 -6
  120. package/dist/components/modal/index.d.vue.ts +7 -7
  121. package/dist/components/modal/index.vue +26 -11
  122. package/dist/components/modal/types.d.ts +2 -2
  123. package/dist/components/noise-background/types.d.ts +1 -1
  124. package/dist/components/note/index.vue +6 -2
  125. package/dist/components/note/types.d.ts +2 -1
  126. package/dist/components/number-input/index.d.vue.ts +11 -6
  127. package/dist/components/number-input/index.vue +57 -16
  128. package/dist/components/number-input/types.d.ts +2 -1
  129. package/dist/components/overlay/index.d.vue.ts +2 -3
  130. package/dist/components/overlay/index.vue +10 -62
  131. package/dist/components/overlay/types.d.ts +0 -2
  132. package/dist/components/page-number/index.vue +30 -29
  133. package/dist/components/page-number/types.d.ts +1 -1
  134. package/dist/components/pin-input/index.d.vue.ts +1 -1
  135. package/dist/components/pin-input/index.vue +6 -6
  136. package/dist/components/pin-input/types.d.ts +1 -1
  137. package/dist/components/popover/index.vue +49 -21
  138. package/dist/components/popover/types.d.ts +3 -1
  139. package/dist/components/progress/index.d.vue.ts +2 -2
  140. package/dist/components/progress/index.vue +12 -12
  141. package/dist/components/progress/types.d.ts +1 -1
  142. package/dist/components/project-banner/types.d.ts +1 -1
  143. package/dist/components/questionnaire/index.vue +14 -14
  144. package/dist/components/radio/index.vue +1 -1
  145. package/dist/components/radio/types.d.ts +1 -1
  146. package/dist/components/radio-group/index.d.vue.ts +2 -2
  147. package/dist/components/radio-group/types.d.ts +1 -1
  148. package/dist/components/rating/index.vue +28 -28
  149. package/dist/components/rating/types.d.ts +1 -1
  150. package/dist/components/resizable/index.d.vue.ts +1 -0
  151. package/dist/components/resizable/index.vue +130 -195
  152. package/dist/components/resizable/types.d.ts +2 -10
  153. package/dist/components/reveal/index.d.vue.ts +3 -3
  154. package/dist/components/reveal/index.vue +4 -4
  155. package/dist/components/reveal/types.d.ts +1 -1
  156. package/dist/components/rolling-number/index.d.vue.ts +2 -2
  157. package/dist/components/rolling-number/index.vue +15 -15
  158. package/dist/components/scalable-text/index.vue +9 -9
  159. package/dist/components/scroll-text/index.d.vue.ts +3 -3
  160. package/dist/components/scroll-text/index.vue +6 -6
  161. package/dist/components/scroll-text/types.d.ts +1 -1
  162. package/dist/components/scrollable/types.d.ts +2 -1
  163. package/dist/components/search-input/index.d.vue.ts +5 -5
  164. package/dist/components/search-input/index.vue +2 -1
  165. package/dist/components/select/index.d.vue.ts +12 -9
  166. package/dist/components/select/index.vue +165 -42
  167. package/dist/components/select/types.d.ts +3 -1
  168. package/dist/components/separator/index.d.vue.ts +1 -1
  169. package/dist/components/separator/types.d.ts +1 -1
  170. package/dist/components/skeleton/index.d.vue.ts +1 -1
  171. package/dist/components/skeleton/index.vue +11 -11
  172. package/dist/components/skeleton/types.d.ts +1 -1
  173. package/dist/components/slider/index.d.vue.ts +1 -1
  174. package/dist/components/slider/index.vue +1 -1
  175. package/dist/components/slider/types.d.ts +1 -1
  176. package/dist/components/snippet/index.d.vue.ts +3 -3
  177. package/dist/components/snippet/index.vue +7 -5
  178. package/dist/components/snippet/types.d.ts +1 -1
  179. package/dist/components/spinner/index.vue +5 -1
  180. package/dist/components/spinner-dots/index.d.vue.ts +1 -1
  181. package/dist/components/split-button/index.d.vue.ts +5 -5
  182. package/dist/components/split-button/types.d.ts +1 -1
  183. package/dist/components/stack/index.d.vue.ts +3 -3
  184. package/dist/components/stack/index.vue +28 -29
  185. package/dist/components/stack/types.d.ts +1 -1
  186. package/dist/components/status-dot/types.d.ts +1 -1
  187. package/dist/components/steps/index.d.vue.ts +2 -2
  188. package/dist/components/steps/index.vue +6 -6
  189. package/dist/components/steps/types.d.ts +1 -1
  190. package/dist/components/stick-to-bottom/types.d.ts +1 -1
  191. package/dist/components/swipe-cell/index.d.vue.ts +6 -6
  192. package/dist/components/swipe-cell/index.vue +64 -64
  193. package/dist/components/swipe-cell/types.d.ts +2 -1
  194. package/dist/components/switch/index.vue +1 -1
  195. package/dist/components/switch/types.d.ts +1 -1
  196. package/dist/components/switch-item/index.vue +1 -1
  197. package/dist/components/switch-item/types.d.ts +1 -1
  198. package/dist/components/tabs/index.d.vue.ts +1 -1
  199. package/dist/components/tabs/index.vue +48 -51
  200. package/dist/components/tabs/types.d.ts +1 -1
  201. package/dist/components/teleport/index.vue +2 -2
  202. package/dist/components/text/index.d.vue.ts +3 -3
  203. package/dist/components/text/index.vue +11 -11
  204. package/dist/components/text/types.d.ts +1 -1
  205. package/dist/components/textarea/index.vue +1 -1
  206. package/dist/components/textarea/types.d.ts +1 -1
  207. package/dist/components/theme-switcher/index.d.vue.ts +3 -2
  208. package/dist/components/theme-switcher/index.vue +15 -7
  209. package/dist/components/theme-switcher/types.d.ts +2 -2
  210. package/dist/components/time-ago/index.d.vue.ts +6 -0
  211. package/dist/components/time-ago/index.vue +143 -0
  212. package/dist/components/time-ago/types.d.ts +4 -0
  213. package/dist/components/time-picker/index.d.vue.ts +1 -1
  214. package/dist/components/time-picker/index.vue +7 -7
  215. package/dist/components/time-picker/types.d.ts +1 -1
  216. package/dist/components/toc/index.d.vue.ts +2 -2
  217. package/dist/components/toc/index.vue +1 -1
  218. package/dist/components/todo-list/index.d.vue.ts +4 -4
  219. package/dist/components/todo-list/index.vue +15 -15
  220. package/dist/components/todo-list/types.d.ts +1 -1
  221. package/dist/components/toggle/index.vue +3 -3
  222. package/dist/components/toggle/types.d.ts +1 -1
  223. package/dist/components/toggle-button/index.vue +14 -11
  224. package/dist/components/toggle-button/types.d.ts +2 -2
  225. package/dist/components/toggle-button-group/index.d.vue.ts +3 -3
  226. package/dist/components/toggle-button-group/index.vue +2 -2
  227. package/dist/components/toggle-button-group/types.d.ts +2 -2
  228. package/dist/components/tool-call/index.vue +5 -5
  229. package/dist/components/tooltip/index.d.vue.ts +4 -5
  230. package/dist/components/tooltip/index.vue +4 -49
  231. package/dist/components/tooltip/types.d.ts +3 -7
  232. package/dist/components/tour/index.d.vue.ts +33 -0
  233. package/dist/components/tour/index.vue +302 -0
  234. package/dist/components/tour/types.d.ts +29 -0
  235. package/dist/components/tree/index.d.vue.ts +24 -28
  236. package/dist/components/tree/index.vue +290 -223
  237. package/dist/components/tree/types.d.ts +38 -13
  238. package/dist/components/virtual-list/index.d.vue.ts +4 -4
  239. package/dist/composables/_internal/use-list-keyboard-controller.js +9 -10
  240. package/dist/composables/_internal/use-list-rows.d.ts +4 -0
  241. package/dist/composables/_internal/use-list-rows.js +12 -4
  242. package/dist/composables/_internal/use-list-selection.d.ts +1 -1
  243. package/dist/composables/_internal/use-lock-scroll.d.ts +8 -1
  244. package/dist/composables/_internal/use-lock-scroll.js +57 -36
  245. package/dist/composables/_internal/use-mention-editor.js +1 -1
  246. package/dist/composables/_internal/use-message-group.d.ts +22 -0
  247. package/dist/composables/_internal/use-message-group.js +143 -0
  248. package/dist/composables/_internal/use-overlay-dialog.js +1 -3
  249. package/dist/composables/_internal/use-overlay-manager.d.ts +4 -1
  250. package/dist/composables/_internal/use-overlay-manager.js +67 -8
  251. package/dist/composables/_internal/use-swipe-gesture.d.ts +1 -1
  252. package/dist/composables/_internal/use-tour-target.d.ts +29 -0
  253. package/dist/composables/_internal/use-tour-target.js +201 -0
  254. package/dist/composables/_internal/use-tree.d.ts +103 -0
  255. package/dist/composables/_internal/use-tree.js +676 -0
  256. package/dist/composables/_internal/use-word-limit.d.ts +1 -1
  257. package/dist/composables/index.d.ts +1 -0
  258. package/dist/composables/index.js +1 -0
  259. package/dist/composables/use-color-scheme.d.ts +1 -1
  260. package/dist/composables/use-color-scheme.js +7 -6
  261. package/dist/composables/use-delay-destroy.d.ts +1 -1
  262. package/dist/composables/use-document-hidden.d.ts +1 -1
  263. package/dist/composables/use-intersection-observer.d.ts +1 -1
  264. package/dist/composables/use-intersection-observer.js +1 -1
  265. package/dist/composables/{_internal/use-motion-reduce.js → use-motion-reduce.js} +2 -2
  266. package/dist/composables/use-mutation-observer.d.ts +1 -1
  267. package/dist/composables/use-mutation-observer.js +1 -1
  268. package/dist/composables/use-resize-observer.d.ts +1 -1
  269. package/dist/composables/use-resize-observer.js +1 -1
  270. package/dist/composables/use-view-transition.js +1 -0
  271. package/dist/composables/use-virtual-list.d.ts +1 -1
  272. package/dist/constants/tooltip-variants.d.ts +28 -0
  273. package/dist/constants/tooltip-variants.js +27 -0
  274. package/dist/contexts/avatar.js +1 -1
  275. package/dist/contexts/breadcrumb.js +1 -1
  276. package/dist/contexts/button.js +1 -1
  277. package/dist/contexts/checkbox.js +1 -1
  278. package/dist/contexts/choicebox.js +1 -1
  279. package/dist/contexts/collapse.js +1 -1
  280. package/dist/contexts/config-provider.js +1 -1
  281. package/dist/contexts/list.js +1 -1
  282. package/dist/contexts/radio.js +1 -1
  283. package/dist/contexts/switch.js +1 -1
  284. package/dist/contexts/toggle-button.js +1 -1
  285. package/dist/index.d.ts +2 -1
  286. package/dist/locales/en-us.d.ts +35 -0
  287. package/dist/locales/en-us.js +20 -0
  288. package/dist/locales/zh-cn.d.ts +35 -0
  289. package/dist/locales/zh-cn.js +20 -0
  290. package/dist/styles/styles.css +1 -1
  291. package/dist/styles/tw.css +43 -30
  292. package/dist/utils/{context.js → _internal/context.js} +1 -1
  293. package/dist/utils/{observer.d.ts → _internal/observer.d.ts} +1 -1
  294. package/dist/utils/{observer.js → _internal/observer.js} +4 -4
  295. package/dist/{components/swipe-cell/instances.d.ts → utils/_internal/swipe-cell-instances.d.ts} +1 -1
  296. package/dist/utils/event.d.ts +2 -1
  297. package/dist/utils/event.js +3 -0
  298. package/package.json +26 -50
  299. package/volar.d.ts +4 -0
  300. package/dist/components/message/composables/use-group-expand.d.ts +0 -13
  301. package/dist/components/message/composables/use-group-expand.js +0 -50
  302. package/dist/components/message/composables/use-message-timer.d.ts +0 -9
  303. package/dist/components/message/composables/use-message-timer.js +0 -62
  304. package/dist/components/message/composables/use-promise-message.d.ts +0 -4
  305. package/dist/components/message/composables/use-promise-message.js +0 -49
  306. package/dist/components/resizable/utils.d.ts +0 -4
  307. package/dist/components/resizable/utils.js +0 -10
  308. package/dist/composables/_internal/use-tree-drag.d.ts +0 -23
  309. package/dist/composables/_internal/use-tree-drag.js +0 -196
  310. package/dist/composables/_internal/use-tree-move.d.ts +0 -20
  311. package/dist/composables/_internal/use-tree-move.js +0 -96
  312. package/dist/composables/_internal/use-tree-rows.d.ts +0 -46
  313. package/dist/composables/_internal/use-tree-rows.js +0 -101
  314. package/dist/composables/_internal/use-tree-selection.d.ts +0 -22
  315. package/dist/composables/_internal/use-tree-selection.js +0 -87
  316. package/dist/styles/source.css +0 -675
  317. package/dist/types/shared/index.d.ts +0 -2
  318. /package/dist/composables/{_internal/use-motion-reduce.d.ts → use-motion-reduce.d.ts} +0 -0
  319. /package/dist/utils/{context.d.ts → _internal/context.d.ts} +0 -0
  320. /package/dist/utils/{mention-html.d.ts → _internal/mention-html.d.ts} +0 -0
  321. /package/dist/utils/{mention-html.js → _internal/mention-html.js} +0 -0
  322. /package/dist/{components/swipe-cell/instances.js → utils/_internal/swipe-cell-instances.js} +0 -0
@@ -0,0 +1,676 @@
1
+ import { computed, onScopeDispose, shallowRef, watch } from "vue";
2
+ import { getElement } from "../../utils/dom.js";
3
+ import { isCompositionKeydown } from "../../utils/event.js";
4
+ import { isFuzzyMatch } from "../../utils/fuzzy-match.js";
5
+ import { toValue } from "../../utils/helper.js";
6
+ import { debounce } from "../../utils/timing.js";
7
+ export function createTreeIndex(data, childrenField) {
8
+ const list = [];
9
+ const byValue = /* @__PURE__ */ new Map();
10
+ function visit(node, parentValue, depth) {
11
+ const meta = { node, children: [], parentValue, depth, end: 0 };
12
+ list.push(meta);
13
+ byValue.set(node.value, meta);
14
+ const children = node[childrenField];
15
+ if (Array.isArray(children)) {
16
+ for (const child of children) {
17
+ meta.children.push(visit(child, node.value, depth + 1));
18
+ }
19
+ }
20
+ meta.end = list.length;
21
+ return meta;
22
+ }
23
+ for (const node of data) {
24
+ visit(node, void 0, 0);
25
+ }
26
+ return { list, byValue };
27
+ }
28
+ export function useTreeIndex(data, childrenField) {
29
+ return computed(() => createTreeIndex(toValue(data) ?? [], toValue(childrenField) ?? "children"));
30
+ }
31
+ function graftNode(node, loaded, childrenField) {
32
+ const own = node[childrenField];
33
+ const fromData = Array.isArray(own) && own.length > 0;
34
+ const source = fromData ? own : loaded.get(node.value) ?? [];
35
+ const children = [];
36
+ let changed = !fromData && loaded.has(node.value);
37
+ for (const child of source) {
38
+ const grafted = graftNode(child, loaded, childrenField);
39
+ if (grafted !== child) {
40
+ changed = true;
41
+ }
42
+ children.push(grafted);
43
+ }
44
+ return changed ? { ...node, [childrenField]: children } : node;
45
+ }
46
+ export function graftLoadedChildren(data, loaded, childrenField) {
47
+ if (loaded.size === 0) {
48
+ return data;
49
+ }
50
+ let changed = false;
51
+ const next = data.map((node) => {
52
+ const grafted = graftNode(node, loaded, childrenField);
53
+ if (grafted !== node) {
54
+ changed = true;
55
+ }
56
+ return grafted;
57
+ });
58
+ return changed ? next : data;
59
+ }
60
+ function defaultFilter(node, query) {
61
+ return isFuzzyMatch(String(node.label ?? ""), query, node.keywords);
62
+ }
63
+ export function useTreeMatched(index, query, filter) {
64
+ return computed(() => {
65
+ const visible = /* @__PURE__ */ new Set();
66
+ const exact = /* @__PURE__ */ new Set();
67
+ const needle = (toValue(query) ?? "").trim();
68
+ if (!needle) {
69
+ return { visible, exact };
70
+ }
71
+ const match = toValue(filter) ?? defaultFilter;
72
+ const { list, byValue } = toValue(index);
73
+ for (const meta of list) {
74
+ if (!match(meta.node, needle)) {
75
+ continue;
76
+ }
77
+ exact.add(meta.node.value);
78
+ visible.add(meta.node.value);
79
+ let parentValue = meta.parentValue;
80
+ while (parentValue !== void 0 && !visible.has(parentValue)) {
81
+ visible.add(parentValue);
82
+ parentValue = byValue.get(parentValue)?.parentValue;
83
+ }
84
+ }
85
+ return { visible, exact };
86
+ });
87
+ }
88
+ const REMOTE_SEARCH_DEBOUNCE = 200;
89
+ export function useTreeSearch(options) {
90
+ const matches = shallowRef();
91
+ const pending = shallowRef(false);
92
+ const remote = computed(() => typeof toValue(options.remoteFilter) === "function");
93
+ const needle = computed(() => (toValue(options.query) ?? "").trim());
94
+ const active = computed(() => remote.value && needle.value !== "" && matches.value !== void 0);
95
+ let requestId = 0;
96
+ function invalidate() {
97
+ requestId += 1;
98
+ runSearch.cancel();
99
+ }
100
+ async function run(query) {
101
+ const at = ++requestId;
102
+ const remoteFilter = toValue(options.remoteFilter);
103
+ if (!remoteFilter) {
104
+ return;
105
+ }
106
+ try {
107
+ const result = await remoteFilter(query);
108
+ if (at === requestId) {
109
+ matches.value = Array.isArray(result) ? result : [];
110
+ }
111
+ } catch {
112
+ if (at === requestId) {
113
+ matches.value = [];
114
+ }
115
+ } finally {
116
+ if (at === requestId) {
117
+ pending.value = false;
118
+ }
119
+ }
120
+ }
121
+ const runSearch = debounce((query) => {
122
+ void run(query);
123
+ }, REMOTE_SEARCH_DEBOUNCE);
124
+ watch(
125
+ [remote, needle],
126
+ ([isRemote, query]) => {
127
+ invalidate();
128
+ if (!isRemote || !query) {
129
+ matches.value = void 0;
130
+ pending.value = false;
131
+ return;
132
+ }
133
+ pending.value = true;
134
+ runSearch(query);
135
+ },
136
+ { immediate: true }
137
+ );
138
+ onScopeDispose(invalidate);
139
+ return { matches, remote, pending, active };
140
+ }
141
+ export function useTreeRows(index, options) {
142
+ return computed(() => {
143
+ const { list } = toValue(index);
144
+ const expanded = toValue(options.expanded);
145
+ const matched = toValue(options.matched);
146
+ const searching = (toValue(options.query) ?? "").trim().length > 0;
147
+ const matchesOnly = searching && toValue(options.matchesOnly) === true;
148
+ const exact = toValue(options.exactMatched) ?? matched;
149
+ const canLoad = toValue(options.canLoad);
150
+ const rows = [];
151
+ let cursor = 0;
152
+ while (cursor < list.length) {
153
+ const meta = list[cursor];
154
+ if (searching && !matched.has(meta.node.value)) {
155
+ cursor = meta.end;
156
+ continue;
157
+ }
158
+ const value = meta.node.value;
159
+ if (matchesOnly && !exact.has(value)) {
160
+ cursor++;
161
+ continue;
162
+ }
163
+ rows.push({
164
+ key: value,
165
+ node: meta.node,
166
+ depth: matchesOnly ? 0 : meta.depth,
167
+ index: rows.length,
168
+ parentValue: matchesOnly ? void 0 : meta.parentValue,
169
+ hasChildren: meta.children.length > 0 || canLoad?.(value) === true,
170
+ expanded: expanded.has(value)
171
+ });
172
+ cursor++;
173
+ if (meta.children.length > 0 && !searching && !expanded.has(value)) {
174
+ cursor = meta.end;
175
+ }
176
+ }
177
+ if (searching) {
178
+ for (let i = 0; i < rows.length - 1; i++) {
179
+ if (rows[i].hasChildren) {
180
+ rows[i].expanded = rows[i + 1].depth > rows[i].depth;
181
+ }
182
+ }
183
+ }
184
+ return rows;
185
+ });
186
+ }
187
+ function collect(modelValue) {
188
+ if (Array.isArray(modelValue)) {
189
+ return new Set(modelValue);
190
+ }
191
+ return modelValue == null ? /* @__PURE__ */ new Set() : /* @__PURE__ */ new Set([modelValue]);
192
+ }
193
+ function derive(list, selected, selectable) {
194
+ const checked = /* @__PURE__ */ new Set();
195
+ const indeterminate = /* @__PURE__ */ new Set();
196
+ const stats = /* @__PURE__ */ new Map();
197
+ for (let i = list.length - 1; i >= 0; i--) {
198
+ const meta = list[i];
199
+ let total = 0;
200
+ let hit = 0;
201
+ for (const child of meta.children) {
202
+ const childStat = stats.get(child);
203
+ total += childStat?.total ?? 0;
204
+ hit += childStat?.hit ?? 0;
205
+ }
206
+ const takes = selectable(meta);
207
+ const isChecked = total > 0 ? hit === total : selected.has(meta.node.value);
208
+ if (isChecked && (takes || selected.has(meta.node.value))) {
209
+ checked.add(meta.node.value);
210
+ } else if (hit > 0) {
211
+ indeterminate.add(meta.node.value);
212
+ }
213
+ stats.set(meta, {
214
+ total: total + (takes ? 1 : 0),
215
+ hit: hit + (isChecked && takes ? 1 : 0)
216
+ });
217
+ }
218
+ return { checked, indeterminate };
219
+ }
220
+ export function useTreeSelection(options) {
221
+ const selected = computed(() => collect(toValue(options.modelValue)));
222
+ let anchor;
223
+ let current;
224
+ function selectable(meta) {
225
+ return meta.node.disabled !== true && toValue(options.selectable)?.(meta.node) !== false;
226
+ }
227
+ function isSelectable(value) {
228
+ const meta = toValue(options.index).byValue.get(value);
229
+ return meta !== void 0 && selectable(meta);
230
+ }
231
+ const state = computed(() => {
232
+ if (!toValue(options.multiple) || toValue(options.checkStrictly)) {
233
+ return { checked: selected.value, indeterminate: /* @__PURE__ */ new Set() };
234
+ }
235
+ return derive(toValue(options.index).list, selected.value, selectable);
236
+ });
237
+ function toToggleResult(list, result) {
238
+ return {
239
+ value: list.filter((item) => result.checked.has(item.node.value)).map((item) => item.node.value),
240
+ halfCheckedValues: list.filter((item) => result.indeterminate.has(item.node.value)).map((item) => item.node.value)
241
+ };
242
+ }
243
+ function toggle(value) {
244
+ if (!toValue(options.multiple)) {
245
+ return { value: selected.value.has(value) ? null : value, halfCheckedValues: [] };
246
+ }
247
+ const { list, byValue } = toValue(options.index);
248
+ const meta = byValue.get(value);
249
+ if (!meta || !selectable(meta)) {
250
+ return toToggleResult(list, state.value);
251
+ }
252
+ const next = new Set(selected.value);
253
+ const willCheck = !state.value.checked.has(value);
254
+ if (willCheck) {
255
+ anchor = value;
256
+ current = value;
257
+ }
258
+ if (toValue(options.checkStrictly)) {
259
+ if (willCheck) {
260
+ next.add(value);
261
+ } else {
262
+ next.delete(value);
263
+ }
264
+ return toToggleResult(list, { checked: next, indeterminate: /* @__PURE__ */ new Set() });
265
+ }
266
+ for (let i = list.indexOf(meta); i < meta.end; i++) {
267
+ const item = list[i];
268
+ if (!selectable(item)) {
269
+ continue;
270
+ }
271
+ if (willCheck) {
272
+ next.add(item.node.value);
273
+ } else {
274
+ next.delete(item.node.value);
275
+ }
276
+ }
277
+ return toToggleResult(list, derive(list, next, selectable));
278
+ }
279
+ function span(from, to) {
280
+ const { list } = toValue(options.index);
281
+ const start = list.indexOf(from);
282
+ const end = list.indexOf(to);
283
+ return list.slice(Math.min(start, end), Math.max(start, end) + 1);
284
+ }
285
+ function extend(value) {
286
+ const { list, byValue } = toValue(options.index);
287
+ const to = byValue.get(value);
288
+ const from = anchor === void 0 ? void 0 : byValue.get(anchor);
289
+ const reached = current === void 0 ? void 0 : byValue.get(current);
290
+ if (!to || !from || !toValue(options.multiple)) {
291
+ return toggle(value);
292
+ }
293
+ const next = new Set(selected.value);
294
+ for (const item of span(from, reached ?? to)) {
295
+ next.delete(item.node.value);
296
+ }
297
+ for (const item of span(from, to)) {
298
+ if (selectable(item)) {
299
+ next.add(item.node.value);
300
+ }
301
+ }
302
+ current = value;
303
+ return toValue(options.checkStrictly) ? toToggleResult(list, { checked: next, indeterminate: /* @__PURE__ */ new Set() }) : toToggleResult(list, derive(list, next, selectable));
304
+ }
305
+ return {
306
+ checked: computed(() => state.value.checked),
307
+ indeterminate: computed(() => state.value.indeterminate),
308
+ toggle,
309
+ extend,
310
+ isSelectable
311
+ };
312
+ }
313
+ export function isTreeDescendant(index, ancestorValue, value) {
314
+ const ancestor = index.byValue.get(ancestorValue);
315
+ let current = index.byValue.get(value);
316
+ while (current && current.parentValue !== void 0) {
317
+ const parent = index.byValue.get(current.parentValue);
318
+ if (!parent) {
319
+ return false;
320
+ }
321
+ if (parent === ancestor) {
322
+ return true;
323
+ }
324
+ current = parent;
325
+ }
326
+ return false;
327
+ }
328
+ function removeNode(list, childrenField, value, parentValue) {
329
+ const at = list.findIndex((node) => node.value === value);
330
+ if (at !== -1) {
331
+ return {
332
+ list: [...list.slice(0, at), ...list.slice(at + 1)],
333
+ node: list[at],
334
+ parentValue,
335
+ index: at
336
+ };
337
+ }
338
+ for (let i = 0; i < list.length; i++) {
339
+ const children = list[i][childrenField];
340
+ if (!Array.isArray(children)) {
341
+ continue;
342
+ }
343
+ const result = removeNode(children, childrenField, value, list[i].value);
344
+ if (!result) {
345
+ continue;
346
+ }
347
+ const next = [...list];
348
+ next[i] = { ...list[i], [childrenField]: result.list };
349
+ return { ...result, list: next };
350
+ }
351
+ return void 0;
352
+ }
353
+ function insertNode(list, childrenField, target, node, parentValue) {
354
+ const at = list.findIndex((item) => item.value === target.targetValue);
355
+ if (at !== -1) {
356
+ const next = [...list];
357
+ if (target.position === "inside") {
358
+ const raw = next[at][childrenField];
359
+ const children = Array.isArray(raw) ? raw : [];
360
+ next[at] = { ...next[at], [childrenField]: [...children, node] };
361
+ return { list: next, parentValue: next[at].value, index: children.length };
362
+ }
363
+ const index = target.position === "after" ? at + 1 : at;
364
+ next.splice(index, 0, node);
365
+ return { list: next, parentValue, index };
366
+ }
367
+ for (let i = 0; i < list.length; i++) {
368
+ const children = list[i][childrenField];
369
+ if (!Array.isArray(children)) {
370
+ continue;
371
+ }
372
+ const result = insertNode(children, childrenField, target, node, list[i].value);
373
+ if (!result) {
374
+ continue;
375
+ }
376
+ const next = [...list];
377
+ next[i] = { ...list[i], [childrenField]: result.list };
378
+ return { ...result, list: next };
379
+ }
380
+ return void 0;
381
+ }
382
+ export function moveTreeNode(data, childrenField, value, target) {
383
+ const removal = removeNode(data, childrenField, value);
384
+ if (!removal) {
385
+ return void 0;
386
+ }
387
+ const insertion = insertNode(removal.list, childrenField, target, removal.node);
388
+ if (!insertion) {
389
+ return void 0;
390
+ }
391
+ if (removal.parentValue === insertion.parentValue && removal.index === insertion.index) {
392
+ return void 0;
393
+ }
394
+ return {
395
+ data: insertion.list,
396
+ detail: {
397
+ value,
398
+ node: removal.node,
399
+ from: { parentValue: removal.parentValue, index: removal.index },
400
+ to: {
401
+ parentValue: insertion.parentValue,
402
+ index: insertion.index,
403
+ targetValue: target.targetValue,
404
+ position: target.position
405
+ }
406
+ }
407
+ };
408
+ }
409
+ const DRAG_THRESHOLD = 5;
410
+ const HOLD_DELAY = 300;
411
+ const EXPAND_DELAY = 500;
412
+ export function useTreeDrag(options) {
413
+ const value = shallowRef();
414
+ const target = shallowRef();
415
+ const x = shallowRef(0);
416
+ const y = shallowRef(0);
417
+ let armed;
418
+ let expandTimer;
419
+ let expandValue;
420
+ let cachedRects = [];
421
+ let contentOrigin = 0;
422
+ let captured;
423
+ let justDragged = false;
424
+ function measureRows(container, items) {
425
+ const rows = toValue(options.rows);
426
+ const origin = container.getBoundingClientRect().top - container.scrollTop;
427
+ const list = [];
428
+ for (const item of Array.from(items)) {
429
+ const row = rows[Number(item.dataset.index)];
430
+ if (!row) {
431
+ continue;
432
+ }
433
+ const rect = item.getBoundingClientRect();
434
+ list.push({ row, top: rect.top - origin, height: rect.height });
435
+ }
436
+ cachedRects = list;
437
+ contentOrigin = origin;
438
+ }
439
+ function isCacheStale(items) {
440
+ if (items.length !== cachedRects.length) {
441
+ return true;
442
+ }
443
+ return Number(items[0]?.dataset.index) !== cachedRects[0]?.row.index;
444
+ }
445
+ function refreshOrigin() {
446
+ const container = getElement(options.container);
447
+ if (container) {
448
+ contentOrigin = container.getBoundingClientRect().top - container.scrollTop;
449
+ }
450
+ }
451
+ function resolveTarget(clientY) {
452
+ const container = getElement(options.container);
453
+ if (!container) {
454
+ return void 0;
455
+ }
456
+ const items = container.querySelectorAll("[data-tree-item]");
457
+ if (isCacheStale(items)) {
458
+ measureRows(container, items);
459
+ }
460
+ if (cachedRects.length === 0) {
461
+ return void 0;
462
+ }
463
+ const y2 = clientY - contentOrigin;
464
+ for (let index = 0; index < cachedRects.length; index++) {
465
+ const entry = cachedRects[index];
466
+ if (y2 >= entry.top && y2 <= entry.top + entry.height) {
467
+ return toTarget(index, y2);
468
+ }
469
+ }
470
+ const last = cachedRects.length - 1;
471
+ return y2 < cachedRects[0].top ? toTarget(0, y2) : toTarget(last, y2);
472
+ }
473
+ function afterRow(index, row) {
474
+ for (let at = index + 1; at < cachedRects.length; at++) {
475
+ const depth = cachedRects[at].row.depth;
476
+ if (depth < row.depth) {
477
+ break;
478
+ }
479
+ if (depth === row.depth) {
480
+ return { targetValue: cachedRects[at].row.key, position: "before" };
481
+ }
482
+ }
483
+ return { targetValue: row.key, position: "after" };
484
+ }
485
+ function toTarget(index, y2) {
486
+ const dragged = value.value;
487
+ const entry = cachedRects[index];
488
+ if (dragged === void 0 || !entry) {
489
+ return void 0;
490
+ }
491
+ const row = entry.row;
492
+ const ratio = (y2 - entry.top) / (entry.height || 1);
493
+ let target2;
494
+ if ((row.hasChildren || toValue(options.dropInsideLeaf)) && ratio > 0.25 && ratio < 0.75) {
495
+ target2 = { targetValue: row.key, position: "inside" };
496
+ } else if (ratio < 0.5) {
497
+ target2 = { targetValue: row.key, position: "before" };
498
+ } else {
499
+ target2 = afterRow(index, row);
500
+ }
501
+ return options.canDrop(dragged, target2.targetValue, target2.position) ? target2 : void 0;
502
+ }
503
+ function scheduleExpand(next) {
504
+ if (!next || next.position !== "inside") {
505
+ clearExpand();
506
+ return;
507
+ }
508
+ if (expandValue === next.targetValue) {
509
+ return;
510
+ }
511
+ clearExpand();
512
+ expandValue = next.targetValue;
513
+ expandTimer = setTimeout(() => {
514
+ expandTimer = void 0;
515
+ if (expandValue !== void 0) {
516
+ options.onExpand(expandValue);
517
+ }
518
+ }, EXPAND_DELAY);
519
+ }
520
+ function clearExpand() {
521
+ if (expandTimer !== void 0) {
522
+ clearTimeout(expandTimer);
523
+ expandTimer = void 0;
524
+ }
525
+ expandValue = void 0;
526
+ }
527
+ function followScroll() {
528
+ if (value.value === void 0) {
529
+ return;
530
+ }
531
+ refreshOrigin();
532
+ target.value = resolveTarget(y.value);
533
+ }
534
+ function capturePointer(pointerId) {
535
+ const container = getElement(options.container);
536
+ if (!container) {
537
+ return;
538
+ }
539
+ container.addEventListener("lostpointercapture", onLostCapture);
540
+ container.setPointerCapture?.(pointerId);
541
+ captured = { el: container, pointerId };
542
+ }
543
+ function releasePointer() {
544
+ const held = captured;
545
+ captured = void 0;
546
+ if (!held) {
547
+ return;
548
+ }
549
+ held.el.removeEventListener("lostpointercapture", onLostCapture);
550
+ if (held.el.hasPointerCapture?.(held.pointerId)) {
551
+ held.el.releasePointerCapture(held.pointerId);
552
+ }
553
+ }
554
+ function onLostCapture() {
555
+ if (armed || value.value !== void 0) {
556
+ reset();
557
+ }
558
+ }
559
+ function onTouchMove(event) {
560
+ event.preventDefault();
561
+ }
562
+ function beginDrag(session) {
563
+ armed = void 0;
564
+ value.value = session.value;
565
+ x.value = session.x;
566
+ y.value = session.y;
567
+ const container = getElement(options.container);
568
+ if (container) {
569
+ container.addEventListener("scroll", followScroll, { passive: true });
570
+ }
571
+ window.addEventListener("scroll", followScroll, { passive: true });
572
+ if (session.hold) {
573
+ window.addEventListener("touchmove", onTouchMove, { passive: false });
574
+ }
575
+ capturePointer(session.pointerId);
576
+ target.value = resolveTarget(session.y);
577
+ scheduleExpand(target.value);
578
+ }
579
+ function detach() {
580
+ window.removeEventListener("pointermove", onPointerMove);
581
+ window.removeEventListener("pointerup", onPointerUp);
582
+ window.removeEventListener("pointercancel", onPointerCancel);
583
+ window.removeEventListener("keydown", onKeydown, true);
584
+ window.removeEventListener("touchmove", onTouchMove);
585
+ window.removeEventListener("scroll", followScroll);
586
+ getElement(options.container)?.removeEventListener("scroll", followScroll);
587
+ if (armed?.timer !== void 0) {
588
+ clearTimeout(armed.timer);
589
+ }
590
+ releasePointer();
591
+ armed = void 0;
592
+ cachedRects = [];
593
+ clearExpand();
594
+ }
595
+ function reset() {
596
+ value.value = void 0;
597
+ target.value = void 0;
598
+ detach();
599
+ }
600
+ function onHoldEnd(session) {
601
+ session.timer = void 0;
602
+ if (armed === session) {
603
+ beginDrag(session);
604
+ }
605
+ }
606
+ function onPointerMove(event) {
607
+ if (armed) {
608
+ const session = armed;
609
+ const moved = Math.abs(event.clientY - session.y) >= DRAG_THRESHOLD || Math.abs(event.clientX - session.x) >= DRAG_THRESHOLD;
610
+ if (!moved) {
611
+ return;
612
+ }
613
+ if (session.hold) {
614
+ if (session.timer !== void 0) {
615
+ clearTimeout(session.timer);
616
+ }
617
+ armed = void 0;
618
+ return;
619
+ }
620
+ beginDrag(session);
621
+ }
622
+ if (value.value === void 0) {
623
+ return;
624
+ }
625
+ x.value = event.clientX;
626
+ y.value = event.clientY;
627
+ target.value = resolveTarget(event.clientY);
628
+ scheduleExpand(target.value);
629
+ }
630
+ function onPointerUp() {
631
+ const source = value.value;
632
+ const dropped = target.value;
633
+ justDragged = source !== void 0;
634
+ reset();
635
+ if (source !== void 0 && dropped) {
636
+ options.onCommit(source, dropped);
637
+ }
638
+ }
639
+ function onPointerCancel() {
640
+ reset();
641
+ }
642
+ function onKeydown(event) {
643
+ if (event.key !== "Escape" || isCompositionKeydown(event)) {
644
+ return;
645
+ }
646
+ event.preventDefault();
647
+ reset();
648
+ }
649
+ function onPointerDown(nodeValue, event) {
650
+ if (armed || toValue(options.enabled) === false || event.button !== 0) {
651
+ return;
652
+ }
653
+ const session = {
654
+ value: nodeValue,
655
+ x: event.clientX,
656
+ y: event.clientY,
657
+ pointerId: event.pointerId,
658
+ // A finger or a stylus has to declare intent: a move that follows at once is a scroll.
659
+ hold: event.pointerType !== "mouse"
660
+ };
661
+ armed = session;
662
+ justDragged = false;
663
+ window.addEventListener("pointermove", onPointerMove);
664
+ window.addEventListener("pointerup", onPointerUp);
665
+ window.addEventListener("pointercancel", onPointerCancel);
666
+ window.addEventListener("keydown", onKeydown, true);
667
+ if (session.hold) {
668
+ session.timer = setTimeout(() => onHoldEnd(session), HOLD_DELAY);
669
+ }
670
+ }
671
+ function didDrag() {
672
+ return justDragged;
673
+ }
674
+ onScopeDispose(reset);
675
+ return { value, target, x, y, onPointerDown, didDrag };
676
+ }
@@ -1,4 +1,4 @@
1
- import type { ComponentLabel } from '../../types/shared';
1
+ import type { ComponentLabel } from '../../types/shared/props';
2
2
  import type { ComputedRef, MaybeRefOrGetter } from 'vue';
3
3
  interface WordLimitOptions {
4
4
  modelValue: MaybeRefOrGetter<ComponentLabel>;
@@ -11,6 +11,7 @@ export * from './use-intersection-observer.js';
11
11
  export * from './use-loading-bar.js';
12
12
  export * from './use-media-query.js';
13
13
  export * from './use-message.js';
14
+ export * from './use-motion-reduce.js';
14
15
  export * from './use-mutation-observer.js';
15
16
  export * from './use-outside-click.js';
16
17
  export * from './use-repeat-action.js';
@@ -11,6 +11,7 @@ export * from "./use-intersection-observer.js";
11
11
  export * from "./use-loading-bar.js";
12
12
  export * from "./use-media-query.js";
13
13
  export * from "./use-message.js";
14
+ export * from "./use-motion-reduce.js";
14
15
  export * from "./use-mutation-observer.js";
15
16
  export * from "./use-outside-click.js";
16
17
  export * from "./use-repeat-action.js";
@@ -6,6 +6,6 @@ interface Options {
6
6
  export declare function useColorScheme(options?: Options): {
7
7
  isDark: import("vue").ComputedRef<boolean>;
8
8
  colorScheme: import("vue").ShallowRef<ColorPreference, ColorPreference>;
9
- toggleDarkMode: () => void;
9
+ toggleDarkMode: (mode?: ColorPreference) => void;
10
10
  };
11
11
  export {};