pxd 0.0.64 → 0.1.2

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 (486) hide show
  1. package/README.md +21 -10
  2. package/dist/components/_internal/calendar-day.d.vue.ts +33 -0
  3. package/dist/components/_internal/calendar-day.vue +85 -0
  4. package/dist/components/_internal/dismiss-container.vue +68 -121
  5. package/dist/components/_internal/fragment-container.vue +3 -3
  6. package/dist/components/_internal/loading-mask.d.vue.ts +8 -0
  7. package/dist/components/_internal/loading-mask.vue +25 -0
  8. package/dist/components/_internal/mention-editor.d.vue.ts +42 -0
  9. package/dist/components/_internal/mention-editor.vue +114 -0
  10. package/dist/components/_internal/popover-arrow.vue +8 -5
  11. package/dist/components/_internal/tree-node.d.vue.ts +72 -0
  12. package/dist/components/_internal/tree-node.vue +260 -0
  13. package/dist/components/active-graph/index.d.vue.ts +2 -2
  14. package/dist/components/active-graph/index.vue +381 -239
  15. package/dist/components/active-graph/types.d.ts +2 -1
  16. package/dist/components/approval-card/index.d.vue.ts +28 -0
  17. package/dist/components/approval-card/index.vue +235 -0
  18. package/dist/components/approval-card/types.d.ts +37 -0
  19. package/dist/components/avatar/index.d.vue.ts +2 -2
  20. package/dist/components/avatar/index.vue +43 -72
  21. package/dist/components/avatar-group/index.d.vue.ts +1 -1
  22. package/dist/components/avatar-group/index.vue +38 -25
  23. package/dist/components/backtop/index.d.vue.ts +10 -3
  24. package/dist/components/backtop/index.vue +97 -54
  25. package/dist/components/backtop/types.d.ts +10 -3
  26. package/dist/components/badge/index.d.vue.ts +6 -3
  27. package/dist/components/badge/index.vue +126 -79
  28. package/dist/components/badge/types.d.ts +3 -2
  29. package/dist/components/book/index.vue +57 -162
  30. package/dist/components/border-beam/index.d.vue.ts +18 -0
  31. package/dist/components/border-beam/index.vue +64 -0
  32. package/dist/components/border-beam/types.d.ts +8 -0
  33. package/dist/components/{resizable-panel → breadcrumb}/index.d.vue.ts +3 -4
  34. package/dist/components/breadcrumb/index.vue +32 -0
  35. package/dist/components/breadcrumb/types.d.ts +6 -0
  36. package/dist/components/breadcrumb-item/index.d.vue.ts +16 -0
  37. package/dist/components/breadcrumb-item/index.vue +50 -0
  38. package/dist/components/breadcrumb-item/types.d.ts +4 -0
  39. package/dist/components/browser/index.d.vue.ts +2 -2
  40. package/dist/components/browser/index.vue +13 -28
  41. package/dist/components/bubble/index.d.vue.ts +6 -3
  42. package/dist/components/bubble/index.vue +85 -18
  43. package/dist/components/bubble/types.d.ts +3 -1
  44. package/dist/components/bubble-group/index.d.vue.ts +19 -0
  45. package/dist/components/bubble-group/index.vue +86 -0
  46. package/dist/components/bubble-group/types.d.ts +6 -0
  47. package/dist/components/bubble-group/types.js +0 -0
  48. package/dist/components/button/index.d.vue.ts +2 -1
  49. package/dist/components/button/index.vue +121 -86
  50. package/dist/components/button-group/index.vue +20 -7
  51. package/dist/components/calendar/index.d.vue.ts +41 -0
  52. package/dist/components/calendar/index.vue +247 -0
  53. package/dist/components/calendar/types.d.ts +37 -0
  54. package/dist/components/card/index.d.vue.ts +21 -0
  55. package/dist/components/card/index.vue +47 -0
  56. package/dist/components/card/types.d.ts +6 -0
  57. package/dist/components/carousel/index.d.vue.ts +8 -4
  58. package/dist/components/carousel/index.vue +232 -283
  59. package/dist/components/carousel/types.d.ts +15 -1
  60. package/dist/components/checkbox/index.d.vue.ts +6 -5
  61. package/dist/components/checkbox/index.vue +107 -90
  62. package/dist/components/checkbox/types.d.ts +6 -4
  63. package/dist/components/checkbox-group/index.d.vue.ts +6 -6
  64. package/dist/components/checkbox-group/index.vue +26 -11
  65. package/dist/components/checkbox-group/types.d.ts +3 -1
  66. package/dist/components/checkerboard/index.d.vue.ts +14 -0
  67. package/dist/components/checkerboard/index.vue +37 -0
  68. package/dist/components/checkerboard/types.d.ts +5 -0
  69. package/dist/components/chip/index.d.vue.ts +3 -1
  70. package/dist/components/chip/index.vue +49 -46
  71. package/dist/components/choicebox/index.d.vue.ts +7 -7
  72. package/dist/components/choicebox/index.vue +52 -30
  73. package/dist/components/choicebox-item/index.d.vue.ts +7 -5
  74. package/dist/components/choicebox-item/index.vue +172 -53
  75. package/dist/components/choicebox-item/types.d.ts +3 -7
  76. package/dist/components/collapse/index.d.vue.ts +2 -2
  77. package/dist/components/collapse/index.vue +72 -98
  78. package/dist/components/collapse-group/index.vue +43 -32
  79. package/dist/components/color-selector/index.vue +45 -41
  80. package/dist/components/command-menu/index.d.vue.ts +10 -7
  81. package/dist/components/command-menu/index.vue +103 -45
  82. package/dist/components/command-menu/types.d.ts +3 -2
  83. package/dist/components/config-provider/index.d.vue.ts +77 -3
  84. package/dist/components/config-provider/index.vue +54 -11
  85. package/dist/components/config-provider/types.d.ts +5 -3
  86. package/dist/components/copy-button/index.d.vue.ts +24 -0
  87. package/dist/components/copy-button/index.vue +40 -0
  88. package/dist/components/copy-button/types.d.ts +7 -0
  89. package/dist/components/countdown/index.d.vue.ts +1 -1
  90. package/dist/components/countdown/index.vue +77 -29
  91. package/dist/components/dash-line/index.d.vue.ts +2 -1
  92. package/dist/components/dash-line/index.vue +78 -76
  93. package/dist/components/date-picker/index.d.vue.ts +16 -0
  94. package/dist/components/date-picker/index.vue +295 -0
  95. package/dist/components/date-picker/types.d.ts +20 -0
  96. package/dist/components/description/index.vue +16 -7
  97. package/dist/components/drawer/index.d.vue.ts +5 -5
  98. package/dist/components/drawer/index.vue +138 -67
  99. package/dist/components/drawer/types.d.ts +1 -0
  100. package/dist/components/effort-slider/index.d.vue.ts +10 -0
  101. package/dist/components/effort-slider/index.vue +347 -0
  102. package/dist/components/effort-slider/types.d.ts +14 -0
  103. package/dist/components/ellipsis-text/index.d.vue.ts +1 -1
  104. package/dist/components/ellipsis-text/index.vue +208 -165
  105. package/dist/components/empty-state/index.vue +11 -4
  106. package/dist/components/error/index.d.vue.ts +3 -1
  107. package/dist/components/error/index.vue +42 -28
  108. package/dist/components/error/types.d.ts +1 -0
  109. package/dist/components/fader/index.d.vue.ts +1 -1
  110. package/dist/components/fader/index.vue +56 -112
  111. package/dist/components/fader/types.d.ts +2 -1
  112. package/dist/components/feedback-bar/index.d.vue.ts +12 -0
  113. package/dist/components/feedback-bar/index.vue +81 -0
  114. package/dist/components/feedback-bar/types.d.ts +9 -0
  115. package/dist/components/gauge/index.vue +89 -69
  116. package/dist/components/grid/index.vue +58 -52
  117. package/dist/components/grid-item/index.vue +44 -39
  118. package/dist/components/hold-button/index.vue +111 -115
  119. package/dist/components/hue-text/index.d.vue.ts +16 -0
  120. package/dist/components/hue-text/index.vue +48 -0
  121. package/dist/components/hue-text/types.d.ts +4 -0
  122. package/dist/components/index.d.ts +40 -5
  123. package/dist/components/index.js +40 -5
  124. package/dist/components/input/index.d.vue.ts +5 -4
  125. package/dist/components/input/index.vue +250 -134
  126. package/dist/components/input/types.d.ts +9 -6
  127. package/dist/components/intersection-observer/index.vue +65 -42
  128. package/dist/components/kbd/index.vue +45 -23
  129. package/dist/components/label/index.vue +7 -3
  130. package/dist/components/link-button/index.vue +49 -32
  131. package/dist/components/list/index.d.vue.ts +22 -14
  132. package/dist/components/list/index.vue +238 -77
  133. package/dist/components/list/types.d.ts +39 -11
  134. package/dist/components/list-group/index.d.vue.ts +4 -0
  135. package/dist/components/list-group/index.vue +22 -0
  136. package/dist/components/list-group/types.d.ts +5 -0
  137. package/dist/components/list-item/index.d.vue.ts +7 -7
  138. package/dist/components/list-item/index.vue +78 -76
  139. package/dist/components/list-item/types.d.ts +7 -4
  140. package/dist/components/loading-bar/index.vue +152 -145
  141. package/dist/components/loading-dots/index.d.vue.ts +1 -13
  142. package/dist/components/loading-dots/index.vue +13 -15
  143. package/dist/components/marching-ants/index.d.vue.ts +25 -0
  144. package/dist/components/marching-ants/index.vue +486 -0
  145. package/dist/components/marching-ants/types.d.ts +9 -0
  146. package/dist/components/marquee/index.d.vue.ts +37 -0
  147. package/dist/components/marquee/index.vue +242 -0
  148. package/dist/components/marquee/types.d.ts +18 -0
  149. package/dist/components/material/index.vue +22 -28
  150. package/dist/components/mention/index.d.vue.ts +38 -0
  151. package/dist/components/mention/index.vue +251 -0
  152. package/dist/components/mention/types.d.ts +35 -0
  153. package/dist/components/menu/index.d.vue.ts +17 -10
  154. package/dist/components/menu/index.vue +98 -27
  155. package/dist/components/menu/types.d.ts +7 -5
  156. package/dist/components/message/composables/use-group-expand.js +1 -1
  157. package/dist/components/message/composables/use-message-timer.js +2 -1
  158. package/dist/components/message/composables/use-promise-message.js +4 -4
  159. package/dist/components/message/index.d.vue.ts +7 -7
  160. package/dist/components/message/index.vue +141 -234
  161. package/dist/components/message-item/index.vue +50 -62
  162. package/dist/components/modal/index.d.vue.ts +4 -4
  163. package/dist/components/modal/index.vue +125 -63
  164. package/dist/components/modal/types.d.ts +1 -3
  165. package/dist/components/more-button/index.vue +25 -13
  166. package/dist/components/noise-background/index.d.vue.ts +0 -16
  167. package/dist/components/noise-background/index.vue +70 -9
  168. package/dist/components/noise-background/types.d.ts +4 -0
  169. package/dist/components/note/index.d.vue.ts +1 -1
  170. package/dist/components/note/index.vue +108 -98
  171. package/dist/components/note/types.d.ts +1 -0
  172. package/dist/components/number-input/index.d.vue.ts +1 -3
  173. package/dist/components/number-input/index.vue +196 -161
  174. package/dist/components/number-input/types.d.ts +1 -2
  175. package/dist/components/overlay/index.d.vue.ts +2 -2
  176. package/dist/components/overlay/index.vue +110 -68
  177. package/dist/components/page-number/index.d.vue.ts +18 -0
  178. package/dist/components/page-number/index.vue +232 -0
  179. package/dist/components/page-number/types.d.ts +18 -0
  180. package/dist/components/pagination/index.vue +14 -7
  181. package/dist/components/pin-input/index.d.vue.ts +2 -2
  182. package/dist/components/pin-input/index.vue +191 -173
  183. package/dist/components/placeholder/index.vue +22 -32
  184. package/dist/components/popover/index.d.vue.ts +0 -47
  185. package/dist/components/popover/index.vue +528 -345
  186. package/dist/components/popover/types.d.ts +7 -0
  187. package/dist/components/progress/index.d.vue.ts +2 -8
  188. package/dist/components/progress/index.vue +84 -62
  189. package/dist/components/progress/types.d.ts +0 -5
  190. package/dist/components/project-banner/index.d.vue.ts +3 -1
  191. package/dist/components/project-banner/index.vue +36 -34
  192. package/dist/components/project-banner/types.d.ts +1 -1
  193. package/dist/components/questionnaire/index.d.vue.ts +10 -0
  194. package/dist/components/questionnaire/index.vue +353 -0
  195. package/dist/components/questionnaire/types.d.ts +30 -0
  196. package/dist/components/radial-burst/index.d.vue.ts +14 -0
  197. package/dist/components/radial-burst/index.vue +53 -0
  198. package/dist/components/radial-burst/types.d.ts +5 -0
  199. package/dist/components/radio/index.d.vue.ts +4 -4
  200. package/dist/components/radio/index.vue +56 -74
  201. package/dist/components/radio-group/index.d.vue.ts +4 -4
  202. package/dist/components/radio-group/index.vue +26 -12
  203. package/dist/components/rating/index.d.vue.ts +17 -0
  204. package/dist/components/rating/index.vue +253 -0
  205. package/dist/components/rating/types.d.ts +18 -0
  206. package/dist/components/reasoning/index.d.vue.ts +16 -0
  207. package/dist/components/reasoning/index.vue +68 -0
  208. package/dist/components/reasoning/types.d.ts +3 -0
  209. package/dist/components/resizable/index.d.vue.ts +27 -4
  210. package/dist/components/resizable/index.vue +404 -158
  211. package/dist/components/resizable/types.d.ts +20 -13
  212. package/dist/components/resizable/utils.d.ts +4 -0
  213. package/dist/components/resizable/utils.js +10 -0
  214. package/dist/components/reveal/index.d.vue.ts +22 -0
  215. package/dist/components/reveal/index.vue +100 -0
  216. package/dist/components/reveal/types.d.ts +15 -0
  217. package/dist/components/rolling-number/index.d.vue.ts +17 -0
  218. package/dist/components/rolling-number/index.vue +252 -0
  219. package/dist/components/rolling-number/types.d.ts +11 -0
  220. package/dist/components/scalable-text/index.vue +113 -110
  221. package/dist/components/scroll-progress/index.d.vue.ts +22 -0
  222. package/dist/components/scroll-progress/index.vue +75 -0
  223. package/dist/components/scroll-progress/types.d.ts +9 -0
  224. package/dist/components/scroll-text/index.d.vue.ts +18 -0
  225. package/dist/components/scroll-text/index.vue +123 -0
  226. package/dist/components/scroll-text/types.d.ts +7 -0
  227. package/dist/components/scrollable/index.d.vue.ts +3 -3
  228. package/dist/components/scrollable/index.vue +281 -222
  229. package/dist/components/search-input/index.d.vue.ts +152 -0
  230. package/dist/components/search-input/index.vue +55 -0
  231. package/dist/components/search-input/types.d.ts +7 -0
  232. package/dist/components/select/index.d.vue.ts +33 -0
  233. package/dist/components/select/index.vue +134 -0
  234. package/dist/components/select/types.d.ts +23 -0
  235. package/dist/components/separator/index.vue +9 -6
  236. package/dist/components/shimmer-text/index.d.vue.ts +18 -0
  237. package/dist/components/shimmer-text/index.vue +216 -0
  238. package/dist/components/shimmer-text/types.d.ts +14 -0
  239. package/dist/components/skeleton/index.d.vue.ts +2 -2
  240. package/dist/components/skeleton/index.vue +59 -51
  241. package/dist/components/slider/index.d.vue.ts +2 -2
  242. package/dist/components/slider/index.vue +391 -261
  243. package/dist/components/slider/types.d.ts +3 -1
  244. package/dist/components/snippet/index.d.vue.ts +2 -1
  245. package/dist/components/snippet/index.vue +80 -69
  246. package/dist/components/snippet/types.d.ts +3 -3
  247. package/dist/components/spinner/index.vue +9 -8
  248. package/dist/components/spinner-dots/index.d.vue.ts +7 -0
  249. package/dist/components/spinner-dots/index.vue +232 -0
  250. package/dist/components/spinner-dots/types.d.ts +9 -0
  251. package/dist/components/split-button/index.d.vue.ts +31 -0
  252. package/dist/components/split-button/index.vue +93 -0
  253. package/dist/components/split-button/types.d.ts +18 -0
  254. package/dist/components/stack/index.d.vue.ts +1 -1
  255. package/dist/components/stack/index.vue +98 -84
  256. package/dist/components/status-dot/index.d.vue.ts +1 -1
  257. package/dist/components/status-dot/index.vue +34 -20
  258. package/dist/components/steps/index.d.vue.ts +28 -0
  259. package/dist/components/steps/index.vue +143 -0
  260. package/dist/components/steps/step-item.d.vue.ts +24 -0
  261. package/dist/components/steps/step-item.vue +86 -0
  262. package/dist/components/steps/types.d.ts +25 -0
  263. package/dist/components/stick-to-bottom/index.d.vue.ts +35 -0
  264. package/dist/components/stick-to-bottom/index.vue +78 -0
  265. package/dist/components/stick-to-bottom/types.d.ts +13 -0
  266. package/dist/components/swipe-cell/index.d.vue.ts +53 -0
  267. package/dist/components/swipe-cell/index.vue +412 -0
  268. package/dist/components/swipe-cell/instances.d.ts +7 -0
  269. package/dist/components/swipe-cell/instances.js +17 -0
  270. package/dist/components/swipe-cell/types.d.ts +52 -0
  271. package/dist/components/switch/index.d.vue.ts +1 -1
  272. package/dist/components/switch/index.vue +42 -21
  273. package/dist/components/switch-item/index.vue +36 -37
  274. package/dist/components/tabs/index.d.vue.ts +8 -6
  275. package/dist/components/tabs/index.vue +242 -196
  276. package/dist/components/tabs/tab-slot.d.ts +24 -0
  277. package/dist/components/tabs/tab-slot.js +13 -0
  278. package/dist/components/tabs/types.d.ts +11 -5
  279. package/dist/components/teleport/index.vue +69 -60
  280. package/dist/components/text/index.d.vue.ts +1 -1
  281. package/dist/components/text/index.vue +68 -57
  282. package/dist/components/textarea/index.d.vue.ts +7 -5
  283. package/dist/components/textarea/index.vue +148 -71
  284. package/dist/components/textarea/types.d.ts +5 -2
  285. package/dist/components/theme-switcher/index.d.vue.ts +2 -2
  286. package/dist/components/theme-switcher/index.vue +8 -12
  287. package/dist/components/time-picker/index.d.vue.ts +7 -8
  288. package/dist/components/time-picker/index.vue +246 -183
  289. package/dist/components/time-picker/types.d.ts +7 -7
  290. package/dist/components/timeline/index.d.vue.ts +6 -0
  291. package/dist/components/timeline/index.vue +52 -0
  292. package/dist/components/timeline/types.d.ts +6 -0
  293. package/dist/components/timeline-item/index.d.vue.ts +22 -0
  294. package/dist/components/timeline-item/index.vue +110 -0
  295. package/dist/components/timeline-item/types.d.ts +16 -0
  296. package/dist/components/toc/index.d.vue.ts +37 -0
  297. package/dist/components/toc/index.vue +199 -0
  298. package/dist/components/toc/types.d.ts +28 -0
  299. package/dist/components/todo-list/index.d.vue.ts +64 -0
  300. package/dist/components/todo-list/index.vue +357 -0
  301. package/dist/components/todo-list/types.d.ts +53 -0
  302. package/dist/components/toggle/index.d.vue.ts +6 -6
  303. package/dist/components/toggle/index.vue +92 -41
  304. package/dist/components/toggle/types.d.ts +1 -1
  305. package/dist/components/toggle-button/index.d.vue.ts +5 -5
  306. package/dist/components/toggle-button/index.vue +120 -84
  307. package/dist/components/toggle-button/types.d.ts +6 -4
  308. package/dist/components/toggle-button-group/index.d.vue.ts +7 -6
  309. package/dist/components/toggle-button-group/index.vue +63 -43
  310. package/dist/components/tool-call/index.d.vue.ts +6 -0
  311. package/dist/components/tool-call/index.vue +209 -0
  312. package/dist/components/tool-call/types.d.ts +8 -0
  313. package/dist/components/tooltip/index.d.vue.ts +5 -2
  314. package/dist/components/tooltip/index.vue +105 -50
  315. package/dist/components/tooltip/types.d.ts +1 -0
  316. package/dist/components/tree/index.d.vue.ts +108 -0
  317. package/dist/components/tree/index.vue +684 -0
  318. package/dist/components/tree/types.d.ts +126 -0
  319. package/dist/components/virtual-list/index.d.vue.ts +7 -9
  320. package/dist/components/virtual-list/index.vue +120 -54
  321. package/dist/components/virtual-list/types.d.ts +0 -1
  322. package/dist/composables/_internal/use-collapse-motion.d.ts +6 -0
  323. package/dist/composables/_internal/use-collapse-motion.js +85 -0
  324. package/dist/composables/{use-focus-trap.d.ts → _internal/use-focus-trap.d.ts} +2 -2
  325. package/dist/composables/_internal/use-focus-trap.js +64 -0
  326. package/dist/composables/{use-forward-ref-expose.js → _internal/use-forward-ref-expose.js} +1 -1
  327. package/dist/composables/_internal/use-list-filter.d.ts +15 -0
  328. package/dist/composables/_internal/use-list-filter.js +48 -0
  329. package/dist/composables/_internal/use-list-keyboard-controller.d.ts +21 -0
  330. package/dist/composables/_internal/use-list-keyboard-controller.js +27 -0
  331. package/dist/composables/_internal/use-list-navigation.d.ts +25 -0
  332. package/dist/composables/_internal/use-list-navigation.js +141 -0
  333. package/dist/composables/_internal/use-list-rows.d.ts +29 -0
  334. package/dist/composables/_internal/use-list-rows.js +58 -0
  335. package/dist/composables/_internal/use-list-selection.d.ts +23 -0
  336. package/dist/composables/_internal/use-list-selection.js +41 -0
  337. package/dist/composables/_internal/use-lock-scroll.js +57 -0
  338. package/dist/composables/_internal/use-mention-editor.d.ts +35 -0
  339. package/dist/composables/_internal/use-mention-editor.js +508 -0
  340. package/dist/composables/_internal/use-mention-suggest.d.ts +23 -0
  341. package/dist/composables/_internal/use-mention-suggest.js +113 -0
  342. package/dist/composables/{use-model-value.d.ts → _internal/use-model-value.d.ts} +1 -1
  343. package/dist/composables/_internal/use-model-value.js +13 -0
  344. package/dist/composables/_internal/use-motion-reduce.d.ts +6 -0
  345. package/dist/composables/_internal/use-motion-reduce.js +40 -0
  346. package/dist/composables/_internal/use-overlay-dialog.d.ts +25 -0
  347. package/dist/composables/_internal/use-overlay-dialog.js +25 -0
  348. package/dist/composables/{use-overlay-manager.js → _internal/use-overlay-manager.js} +2 -2
  349. package/dist/composables/{use-popover-responsive.js → _internal/use-popover-responsive.js} +1 -1
  350. package/dist/composables/_internal/use-selected-list-item.d.ts +6 -0
  351. package/dist/composables/_internal/use-selected-list-item.js +36 -0
  352. package/dist/composables/_internal/use-swipe-gesture.d.ts +88 -0
  353. package/dist/composables/_internal/use-swipe-gesture.js +345 -0
  354. package/dist/composables/_internal/use-tailwind-variant.d.ts +31 -0
  355. package/dist/composables/_internal/use-tailwind-variant.js +62 -0
  356. package/dist/composables/_internal/use-tree-drag.d.ts +23 -0
  357. package/dist/composables/_internal/use-tree-drag.js +196 -0
  358. package/dist/composables/_internal/use-tree-move.d.ts +20 -0
  359. package/dist/composables/_internal/use-tree-move.js +96 -0
  360. package/dist/composables/_internal/use-tree-rows.d.ts +46 -0
  361. package/dist/composables/_internal/use-tree-rows.js +101 -0
  362. package/dist/composables/_internal/use-tree-selection.d.ts +22 -0
  363. package/dist/composables/_internal/use-tree-selection.js +87 -0
  364. package/dist/composables/_internal/use-word-limit.d.ts +24 -0
  365. package/dist/composables/_internal/use-word-limit.js +36 -0
  366. package/dist/composables/index.d.ts +7 -10
  367. package/dist/composables/index.js +7 -10
  368. package/dist/composables/use-backoff-retry.d.ts +51 -0
  369. package/dist/composables/use-backoff-retry.js +116 -0
  370. package/dist/composables/use-color-scheme.js +28 -25
  371. package/dist/composables/use-copy-click.d.ts +2 -1
  372. package/dist/composables/use-copy-click.js +21 -18
  373. package/dist/composables/use-countdown.d.ts +0 -9
  374. package/dist/composables/use-countdown.js +12 -4
  375. package/dist/composables/use-deferred-value.js +1 -1
  376. package/dist/composables/use-delay-change.js +6 -2
  377. package/dist/composables/use-delay-destroy.d.ts +1 -1
  378. package/dist/composables/use-delay-destroy.js +16 -9
  379. package/dist/composables/use-intersection-observer.d.ts +6 -0
  380. package/dist/composables/use-intersection-observer.js +38 -0
  381. package/dist/composables/use-media-query.d.ts +0 -3
  382. package/dist/composables/use-media-query.js +19 -19
  383. package/dist/composables/use-mutation-observer.d.ts +6 -0
  384. package/dist/composables/use-mutation-observer.js +42 -0
  385. package/dist/composables/use-outside-click.d.ts +6 -4
  386. package/dist/composables/use-outside-click.js +18 -10
  387. package/dist/composables/use-repeat-action.js +31 -20
  388. package/dist/composables/use-resize-observer.d.ts +6 -0
  389. package/dist/composables/use-resize-observer.js +22 -0
  390. package/dist/composables/use-scrollspy.d.ts +15 -0
  391. package/dist/composables/use-scrollspy.js +98 -0
  392. package/dist/composables/use-stick-to-bottom.d.ts +32 -0
  393. package/dist/composables/use-stick-to-bottom.js +106 -0
  394. package/dist/composables/use-view-transition.d.ts +20 -0
  395. package/dist/composables/use-view-transition.js +79 -0
  396. package/dist/composables/use-virtual-list.d.ts +8 -5
  397. package/dist/composables/use-virtual-list.js +86 -19
  398. package/dist/contexts/breadcrumb.d.ts +2 -0
  399. package/dist/contexts/breadcrumb.js +2 -0
  400. package/dist/contexts/choicebox.d.ts +1 -0
  401. package/dist/contexts/config-provider.d.ts +3 -2
  402. package/dist/contexts/config-provider.js +4 -3
  403. package/dist/contexts/list.d.ts +4 -25
  404. package/dist/contexts/list.js +0 -8
  405. package/dist/locales/en-us.d.ts +56 -28
  406. package/dist/locales/en-us.js +56 -28
  407. package/dist/locales/index.d.ts +1 -0
  408. package/dist/locales/zh-cn.d.ts +55 -28
  409. package/dist/locales/zh-cn.js +69 -28
  410. package/dist/plugins/dayjs-millisecond-token.d.ts +2 -4
  411. package/dist/plugins/dayjs-millisecond-token.js +1 -2
  412. package/dist/styles/source.css +55 -20
  413. package/dist/styles/styles.css +2 -2
  414. package/dist/styles/tw.css +54 -20
  415. package/dist/types/shared/props.d.ts +5 -3
  416. package/dist/types/shared/utils.d.ts +7 -0
  417. package/dist/utils/context.js +2 -1
  418. package/dist/utils/date.d.ts +1 -15
  419. package/dist/utils/date.js +2 -11
  420. package/dist/utils/dom.d.ts +19 -21
  421. package/dist/utils/dom.js +57 -28
  422. package/dist/utils/event.d.ts +14 -2
  423. package/dist/utils/event.js +65 -27
  424. package/dist/utils/format.d.ts +5 -4
  425. package/dist/utils/format.js +33 -13
  426. package/dist/utils/fuzzy-match.d.ts +2 -0
  427. package/dist/utils/fuzzy-match.js +182 -0
  428. package/dist/utils/helper.d.ts +17 -0
  429. package/dist/utils/helper.js +57 -0
  430. package/dist/utils/is.d.ts +5 -1
  431. package/dist/utils/is.js +10 -2
  432. package/dist/utils/mention-html.d.ts +33 -0
  433. package/dist/utils/mention-html.js +146 -0
  434. package/dist/utils/merge.d.ts +1 -0
  435. package/dist/utils/merge.js +19 -0
  436. package/dist/utils/observer.d.ts +42 -0
  437. package/dist/utils/observer.js +173 -0
  438. package/dist/utils/timing.d.ts +19 -6
  439. package/dist/utils/timing.js +74 -16
  440. package/package.json +48 -37
  441. package/volar.d.ts +40 -5
  442. package/dist/components/carousel-item/index.d.vue.ts +0 -13
  443. package/dist/components/carousel-item/index.vue +0 -54
  444. package/dist/components/command-menu-group/index.d.vue.ts +0 -14
  445. package/dist/components/command-menu-group/index.vue +0 -31
  446. package/dist/components/command-menu-group/types.d.ts +0 -5
  447. package/dist/components/resizable-handle/index.d.vue.ts +0 -6
  448. package/dist/components/resizable-handle/index.vue +0 -116
  449. package/dist/components/resizable-panel/index.vue +0 -57
  450. package/dist/components/resizable-panel/types.d.ts +0 -4
  451. package/dist/components/tabs-item/index.d.vue.ts +0 -4
  452. package/dist/components/tabs-item/index.vue +0 -16
  453. package/dist/components/tabs-item/types.d.ts +0 -10
  454. package/dist/composables/use-browser-observer.d.ts +0 -12
  455. package/dist/composables/use-browser-observer.js +0 -74
  456. package/dist/composables/use-focus-trap.js +0 -54
  457. package/dist/composables/use-list-filter.d.ts +0 -11
  458. package/dist/composables/use-list-filter.js +0 -56
  459. package/dist/composables/use-list-navigation.d.ts +0 -27
  460. package/dist/composables/use-list-navigation.js +0 -159
  461. package/dist/composables/use-lock-scroll.js +0 -37
  462. package/dist/composables/use-model-value.js +0 -13
  463. package/dist/composables/use-swipe-gesture.d.ts +0 -65
  464. package/dist/composables/use-swipe-gesture.js +0 -98
  465. package/dist/contexts/carousel.d.ts +0 -14
  466. package/dist/contexts/carousel.js +0 -2
  467. package/dist/contexts/resizable.d.ts +0 -27
  468. package/dist/contexts/resizable.js +0 -2
  469. package/dist/contexts/tabs.d.ts +0 -15
  470. package/dist/contexts/tabs.js +0 -2
  471. package/dist/plugins/any-touch.d.ts +0 -213
  472. package/dist/plugins/any-touch.js +0 -592
  473. package/dist/utils/fuzzy-search.d.ts +0 -7
  474. package/dist/utils/fuzzy-search.js +0 -61
  475. package/dist/utils/get.d.ts +0 -9
  476. package/dist/utils/get.js +0 -55
  477. package/dist/utils/index.d.ts +0 -10
  478. package/dist/utils/index.js +0 -10
  479. package/dist/utils/ref.d.ts +0 -5
  480. package/dist/utils/ref.js +0 -8
  481. package/dist/utils/uid.d.ts +0 -1
  482. package/dist/utils/uid.js +0 -4
  483. /package/dist/composables/{use-forward-ref-expose.d.ts → _internal/use-forward-ref-expose.d.ts} +0 -0
  484. /package/dist/composables/{use-lock-scroll.d.ts → _internal/use-lock-scroll.d.ts} +0 -0
  485. /package/dist/composables/{use-overlay-manager.d.ts → _internal/use-overlay-manager.d.ts} +0 -0
  486. /package/dist/composables/{use-popover-responsive.d.ts → _internal/use-popover-responsive.d.ts} +0 -0
@@ -0,0 +1,17 @@
1
+ import type { ResponsiveValue } from '../types/shared/props';
2
+ import type { Nullable } from '../types/shared/utils';
3
+ import type { MaybeElement } from '../types/shared/utils';
4
+ import type { ComponentPublicInstance, MaybeRefOrGetter } from 'vue';
5
+ export declare function getUniqueId(prefix?: string): string;
6
+ export declare function getFallbackValue<Variants extends Record<string, any>>(variant: Nullable<string>, variants: Variants, defaultVariant?: keyof Variants): any;
7
+ export declare function getColorByThreshold(value: number, colors: Record<string, string>): string;
8
+ export declare function getResponsiveValue<V extends string | number>(prop: ResponsiveValue<V> | undefined, xsValue: Nullable<V>, valueSetter: (acc: Record<string, V>, bp: any, v: V) => void): Record<string, V>;
9
+ export type UnRefElementReturn<T extends MaybeElement = MaybeElement> = T extends ComponentPublicInstance ? Exclude<MaybeElement, ComponentPublicInstance> : T | undefined;
10
+ export declare function toValue<T>(source: MaybeRefOrGetter<T>): T;
11
+ type PromiseWithResolvers<T> = {
12
+ promise: Promise<T>;
13
+ resolve: (value: T | PromiseLike<T>) => void;
14
+ reject: (reason?: unknown) => void;
15
+ };
16
+ export declare function withResolvers<T>(): PromiseWithResolvers<T>;
17
+ export {};
@@ -0,0 +1,57 @@
1
+ import { getCurrentInstance, unref } from "vue";
2
+ import { isNil } from "./is.js";
3
+ let fallbackId = 0;
4
+ const uniqueIdMap = /* @__PURE__ */ new WeakMap();
5
+ export function getUniqueId(prefix = "") {
6
+ const root = getCurrentInstance()?.proxy?.$root;
7
+ if (!root) {
8
+ return `${prefix}_pid_${fallbackId++}`;
9
+ }
10
+ const id = uniqueIdMap.get(root) ?? 0;
11
+ uniqueIdMap.set(root, id + 1);
12
+ return `${prefix}_pid_${id}`;
13
+ }
14
+ export function getFallbackValue(variant, variants, defaultVariant = "default") {
15
+ return (variant ? variants[variant] : null) ?? variants[defaultVariant];
16
+ }
17
+ export function getColorByThreshold(value, colors) {
18
+ const keys = Object.keys(colors).sort((a, b) => Number(a) - Number(b));
19
+ const keyLength = keys.length;
20
+ if (keyLength === 0) {
21
+ return "";
22
+ }
23
+ for (let i = 0; i < keyLength; i++) {
24
+ if (value < Number(keys[i])) {
25
+ return colors[keys[Math.max(0, i - 1)]];
26
+ }
27
+ }
28
+ return colors[keys.at(-1)];
29
+ }
30
+ export function getResponsiveValue(prop, xsValue, valueSetter) {
31
+ const formatted = Object.assign(
32
+ isNil(xsValue) ? {} : { xs: xsValue },
33
+ typeof prop === "object" ? prop : {}
34
+ );
35
+ return Object.entries(formatted).reduce(
36
+ (acc, [bp, value]) => {
37
+ valueSetter(acc, bp, value);
38
+ return acc;
39
+ },
40
+ {}
41
+ );
42
+ }
43
+ export function toValue(source) {
44
+ return typeof source === "function" ? source() : unref(source);
45
+ }
46
+ export function withResolvers() {
47
+ if (typeof Promise.withResolvers === "function") {
48
+ return Promise.withResolvers();
49
+ }
50
+ let resolve;
51
+ let reject;
52
+ const promise = new Promise((res, rej) => {
53
+ resolve = res;
54
+ reject = rej;
55
+ });
56
+ return { promise, resolve, reject };
57
+ }
@@ -1,4 +1,8 @@
1
1
  export declare const isVue3: () => boolean;
2
2
  export declare const isServer: () => boolean;
3
3
  export declare const isTouchDevice: () => boolean;
4
- export declare function isIOS(): boolean | "";
4
+ export declare function isIOS(): boolean;
5
+ export declare const isNil: (value: unknown) => value is null | undefined;
6
+ export declare const isNotNil: <T>(value: T | null | undefined) => value is T;
7
+ export declare const isUndefined: (value: unknown) => value is undefined;
8
+ export declare const isNumber: (value: unknown) => value is number;
package/dist/utils/is.js CHANGED
@@ -3,7 +3,15 @@ export const isVue3 = () => version.startsWith("3");
3
3
  export const isServer = () => typeof document === "undefined";
4
4
  export const isTouchDevice = () => isServer() ? false : "ontouchstart" in document;
5
5
  export function isIOS() {
6
- return !isServer() && navigator?.userAgent && (/iP(?:ad|hone|od)/.test(navigator.userAgent) || // The new iPad Pro Gen3 does not identify itself as iPad, but as Macintosh.
6
+ if (isServer()) {
7
+ return false;
8
+ }
9
+ const userAgent = navigator?.userAgent || "";
10
+ return /iP(?:ad|hone|od)/.test(userAgent) || // The new iPad Pro Gen3 does not identify itself as iPad, but as Macintosh.
7
11
  // https://github.com/vueuse/vueuse/issues/3577
8
- navigator?.maxTouchPoints > 2 && /iPad|Macintosh/.test(navigator.userAgent));
12
+ navigator?.maxTouchPoints > 2 && /iPad|Macintosh/.test(userAgent);
9
13
  }
14
+ export const isNil = (value) => value == null;
15
+ export const isNotNil = (value) => value != null;
16
+ export const isUndefined = (value) => value === void 0;
17
+ export const isNumber = (value) => typeof value === "number";
@@ -0,0 +1,33 @@
1
+ export declare const MENTION_TAG = "MENTION";
2
+ export declare const MENTION_TAG_LOWER: string;
3
+ /** The trigger a chip falls back to when its markup carries no `trigger` attribute. */
4
+ export declare const DEFAULT_TRIGGER = "@";
5
+ /**
6
+ * A collapsed selection sitting right after a `contenteditable=false` element is
7
+ * not representable; Android resolves it *into* the element, the IME then finds
8
+ * no editable context and hides the keyboard. A zero-width space after every chip
9
+ * gives the caret a real text node to live in. It is stripped on serialize, so it
10
+ * never reaches the public HTML, the v-model or the server.
11
+ */
12
+ export declare const CARET_ANCHOR = "\u200B";
13
+ export declare function createCaretAnchor(): Text;
14
+ export declare function isMentionElement(node: Node | null | undefined): boolean;
15
+ /**
16
+ * Every chip in `root`. Pressing Enter nests content in block elements, so the
17
+ * editor's direct children are not enough.
18
+ */
19
+ export declare function queryMentionElements(root: ParentNode): HTMLElement[];
20
+ export declare function getMentionLabel(el: HTMLElement): string;
21
+ export declare function createMentionElement(key: string, label: string, trigger?: string): HTMLElement;
22
+ /** Escape plain text for paste fallback (newlines → `<br>`). */
23
+ export declare function escapePlainTextAsHtml(text: string): string;
24
+ /**
25
+ * Serialize an editor DOM tree into the public HTML contract:
26
+ * plain text + `<mention key="...">label</mention>` only.
27
+ */
28
+ export declare function serializeMentionHtml(root: HTMLElement): string;
29
+ /**
30
+ * Paste sanitizer: keep legal `<mention key>` nodes; everything else becomes text.
31
+ */
32
+ export declare function sanitizeMentionClipboardHtml(html: string): DocumentFragment;
33
+ export declare function setMentionEditorContent(root: HTMLElement, html: string): void;
@@ -0,0 +1,146 @@
1
+ export const MENTION_TAG = "MENTION";
2
+ export const MENTION_TAG_LOWER = MENTION_TAG.toLowerCase();
3
+ const BLOCK_TAGS = /* @__PURE__ */ new Set(["DIV", "P", "LI", "PRE"]);
4
+ export const DEFAULT_TRIGGER = "@";
5
+ export const CARET_ANCHOR = "\u200B";
6
+ export function createCaretAnchor() {
7
+ return document.createTextNode(CARET_ANCHOR);
8
+ }
9
+ export function isMentionElement(node) {
10
+ return !!node && node.nodeType === Node.ELEMENT_NODE && node.tagName === MENTION_TAG;
11
+ }
12
+ export function queryMentionElements(root) {
13
+ return Array.from(root.querySelectorAll(MENTION_TAG_LOWER));
14
+ }
15
+ export function getMentionLabel(el) {
16
+ const trigger = el.getAttribute("trigger") || DEFAULT_TRIGGER;
17
+ const text = el.textContent ?? "";
18
+ return text.startsWith(trigger) ? text.slice(trigger.length) : text;
19
+ }
20
+ export function createMentionElement(key, label, trigger = DEFAULT_TRIGGER) {
21
+ const el = document.createElement(MENTION_TAG_LOWER);
22
+ el.setAttribute("key", key);
23
+ if (trigger !== DEFAULT_TRIGGER) {
24
+ el.setAttribute("trigger", trigger);
25
+ }
26
+ el.setAttribute("contenteditable", "false");
27
+ el.className = "pxd-mention--chip";
28
+ el.textContent = `${trigger}${label}`;
29
+ return el;
30
+ }
31
+ function escapeMentionText(text) {
32
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
33
+ }
34
+ function escapeMentionAttr(text) {
35
+ return escapeMentionText(text).replace(/"/g, "&quot;");
36
+ }
37
+ export function escapePlainTextAsHtml(text) {
38
+ return escapeMentionText(text).replace(/\n/g, "<br>");
39
+ }
40
+ export function serializeMentionHtml(root) {
41
+ let result = "";
42
+ function startLine() {
43
+ if (result && !result.endsWith("\n")) {
44
+ result += "\n";
45
+ }
46
+ }
47
+ function walk(node) {
48
+ if (node.nodeType === Node.TEXT_NODE) {
49
+ result += (node.textContent ?? "").replace(/\u00A0/g, " ").replace(/\u200B/g, "");
50
+ return;
51
+ }
52
+ if (node.nodeType !== Node.ELEMENT_NODE) {
53
+ return;
54
+ }
55
+ const el = node;
56
+ if (isMentionElement(el)) {
57
+ const key = el.getAttribute("key") ?? "";
58
+ const label = getMentionLabel(el);
59
+ const trigger = el.getAttribute("trigger");
60
+ const triggerAttr = trigger ? ` trigger="${escapeMentionAttr(trigger)}"` : "";
61
+ result += `<${MENTION_TAG_LOWER} key="${escapeMentionAttr(key)}"${triggerAttr}>${escapeMentionText(label)}</${MENTION_TAG_LOWER}>`;
62
+ return;
63
+ }
64
+ if (el.tagName === "BR") {
65
+ result += "\n";
66
+ return;
67
+ }
68
+ if (BLOCK_TAGS.has(el.tagName) && (el.textContent || el.querySelector(MENTION_TAG_LOWER))) {
69
+ startLine();
70
+ }
71
+ for (const child of Array.from(el.childNodes)) {
72
+ walk(child);
73
+ }
74
+ }
75
+ for (const child of Array.from(root.childNodes)) {
76
+ walk(child);
77
+ }
78
+ return result === "\n" ? "" : result;
79
+ }
80
+ function parseMentionHtml(html) {
81
+ const fragment = document.createDocumentFragment();
82
+ if (!html) {
83
+ return fragment;
84
+ }
85
+ const doc = new DOMParser().parseFromString(`<body>${html}</body>`, "text/html");
86
+ appendSanitizedChildren(doc.body, fragment);
87
+ return fragment;
88
+ }
89
+ export function sanitizeMentionClipboardHtml(html) {
90
+ const fragment = document.createDocumentFragment();
91
+ const doc = new DOMParser().parseFromString(html, "text/html");
92
+ appendSanitizedChildren(doc.body, fragment);
93
+ return fragment;
94
+ }
95
+ function appendSanitizedChildren(source, target) {
96
+ for (const child of Array.from(source.childNodes)) {
97
+ if (child.nodeType === Node.TEXT_NODE) {
98
+ const text = child.textContent ?? "";
99
+ if (text) {
100
+ appendPlainText(target, text);
101
+ }
102
+ continue;
103
+ }
104
+ if (child.nodeType !== Node.ELEMENT_NODE) {
105
+ continue;
106
+ }
107
+ const el = child;
108
+ if (isMentionElement(el)) {
109
+ const key = el.getAttribute("key");
110
+ if (key != null && key !== "") {
111
+ const trigger = el.getAttribute("trigger") || DEFAULT_TRIGGER;
112
+ target.appendChild(createMentionElement(key, getMentionLabel(el), trigger));
113
+ target.appendChild(createCaretAnchor());
114
+ continue;
115
+ }
116
+ }
117
+ if (el.tagName === "BR") {
118
+ target.appendChild(document.createElement("br"));
119
+ continue;
120
+ }
121
+ appendSanitizedChildren(el, target);
122
+ }
123
+ }
124
+ function appendPlainText(target, text) {
125
+ const parts = text.split("\n");
126
+ for (let i = 0; i < parts.length; i++) {
127
+ if (parts[i]) {
128
+ const last = target.lastChild;
129
+ if (last?.nodeType === Node.TEXT_NODE) {
130
+ last.textContent = (last.textContent ?? "") + parts[i];
131
+ } else {
132
+ target.appendChild(document.createTextNode(parts[i]));
133
+ }
134
+ }
135
+ if (i < parts.length - 1) {
136
+ target.appendChild(document.createElement("br"));
137
+ }
138
+ }
139
+ }
140
+ export function setMentionEditorContent(root, html) {
141
+ root.replaceChildren();
142
+ root.appendChild(parseMentionHtml(html));
143
+ if (!root.childNodes.length) {
144
+ root.appendChild(document.createElement("br"));
145
+ }
146
+ }
@@ -0,0 +1 @@
1
+ export declare function mergeDeep<T extends object>(target: T, source: object): T;
@@ -0,0 +1,19 @@
1
+ import { isUndefined } from "./is.js";
2
+ function isMergeable(value) {
3
+ return typeof value === "object" && value !== null && !Array.isArray(value);
4
+ }
5
+ function mergeObjects(target, source) {
6
+ const merged = { ...target };
7
+ for (const key of Object.keys(source)) {
8
+ const sourceValue = source[key];
9
+ if (isUndefined(sourceValue)) {
10
+ continue;
11
+ }
12
+ const targetValue = merged[key];
13
+ merged[key] = isMergeable(targetValue) && isMergeable(sourceValue) ? mergeObjects(targetValue, sourceValue) : sourceValue;
14
+ }
15
+ return merged;
16
+ }
17
+ export function mergeDeep(target, source) {
18
+ return mergeObjects(target, source);
19
+ }
@@ -0,0 +1,42 @@
1
+ import type { Nullable } from '../types/shared/utils';
2
+ import type { MaybeRefOrGetter, Ref } from 'vue';
3
+ export type TargetRef = MaybeRefOrGetter<Nullable<HTMLElement>> | MaybeRefOrGetter<Nullable<HTMLElement>>[] | MaybeRefOrGetter<Nullable<HTMLElement>[]>;
4
+ /**
5
+ * The only native method this factory calls itself. Target bookkeeping goes through
6
+ * `ObserverSpec.sync`, because `MutationObserver` has no `unobserve`.
7
+ */
8
+ export interface AnyObserver {
9
+ disconnect(): void;
10
+ }
11
+ /** Every native entry reports the node it was produced for. */
12
+ export interface AnyObserverEntry {
13
+ target: Node;
14
+ }
15
+ export interface ObservedItem<TItem> {
16
+ /** The native entry. A `MutationRecord` for mutation observers. */
17
+ entry: TItem;
18
+ /** The registered element this entry belongs to. */
19
+ target: HTMLElement;
20
+ }
21
+ export interface ObserverResults<TObserver> {
22
+ observer: Ref<TObserver | undefined>;
23
+ stop: () => void;
24
+ }
25
+ export interface ObserverSpec<TObserver extends AnyObserver, TOptions, TItem extends AnyObserverEntry> {
26
+ /** Options reduced to a stable string, so an equal setup shares one observer. */
27
+ normalize: (options: TOptions | undefined) => string;
28
+ create: (callback: (items: TItem[], observer: TObserver) => void, options: TOptions | undefined) => TObserver | undefined;
29
+ /**
30
+ * Applies the move from `prev` to `next` on an existing observer. Pooled specs are
31
+ * driven one element at a time (`[]` to `[el]` adds, `[el]` to `[]` removes).
32
+ */
33
+ sync: (observer: TObserver, prev: HTMLElement[], next: HTMLElement[], options: TOptions | undefined) => void;
34
+ /** Attributes a native item to the registered element it was reported for. */
35
+ resolveTarget: (item: TItem, observed: readonly HTMLElement[]) => HTMLElement | undefined;
36
+ /**
37
+ * Share one native instance across every caller using equal options. Only valid when
38
+ * items carry their own target, which rules out mutation observers.
39
+ */
40
+ pooled?: boolean;
41
+ }
42
+ export declare function createObserver<TObserver extends AnyObserver, TOptions, TItem extends AnyObserverEntry>(spec: ObserverSpec<TObserver, TOptions, TItem>): (target: TargetRef, callback: (items: ObservedItem<TItem>[]) => void, options?: MaybeRefOrGetter<TOptions>) => ObserverResults<TObserver>;
@@ -0,0 +1,173 @@
1
+ import { onScopeDispose, shallowRef, watch } from "vue";
2
+ import { getElement } from "./dom.js";
3
+ import { toArray } from "./format.js";
4
+ import { toValue } from "./helper.js";
5
+ import { isNotNil, isServer } from "./is.js";
6
+ function resolveTargets(source) {
7
+ return [
8
+ ...new Set(
9
+ toArray(toValue(source)).map((i) => getElement(i)).filter(isNotNil)
10
+ )
11
+ ];
12
+ }
13
+ function isSameElements(a, b) {
14
+ return a.length === b.length && a.every((el, i) => el === b[i]);
15
+ }
16
+ export function createObserver(spec) {
17
+ const pools = /* @__PURE__ */ new Map();
18
+ return function observerWrapper(target, callback, options) {
19
+ const observer = shallowRef();
20
+ const subscription = { callback };
21
+ let pool;
22
+ let observed = [];
23
+ let activeKey;
24
+ function attach(el) {
25
+ let subs = pool.targets.get(el);
26
+ if (!subs) {
27
+ pool.targets.set(el, subs = /* @__PURE__ */ new Set());
28
+ spec.sync(pool.observer, [], [el], pool.options);
29
+ }
30
+ subs.add(subscription);
31
+ }
32
+ function detach(el) {
33
+ const subs = pool.targets.get(el);
34
+ subs?.delete(subscription);
35
+ if (subs && !subs.size) {
36
+ pool.targets.delete(el);
37
+ spec.sync(pool.observer, [el], [], pool.options);
38
+ }
39
+ }
40
+ function dispatch(items) {
41
+ const batches = /* @__PURE__ */ new Map();
42
+ for (const entry of items) {
43
+ const subs = pool?.targets.get(entry.target);
44
+ if (!subs) {
45
+ continue;
46
+ }
47
+ for (const sub of subs) {
48
+ const batch = batches.get(sub);
49
+ if (batch) {
50
+ batch.push(entry);
51
+ } else {
52
+ batches.set(sub, [entry]);
53
+ }
54
+ }
55
+ }
56
+ for (const [sub, batch] of batches) {
57
+ sub.callback(batch.map((entry) => ({ entry, target: entry.target })));
58
+ }
59
+ }
60
+ function acquire(key, value) {
61
+ let entry = pools.get(key);
62
+ if (!entry) {
63
+ const created = spec.create(dispatch, value);
64
+ if (!created) {
65
+ return void 0;
66
+ }
67
+ entry = { observer: created, options: value, count: 0, targets: /* @__PURE__ */ new Map() };
68
+ pools.set(key, entry);
69
+ }
70
+ entry.count++;
71
+ return entry;
72
+ }
73
+ function cleanup() {
74
+ if (pool) {
75
+ observed.forEach(detach);
76
+ pool.count--;
77
+ if (pool.count <= 0) {
78
+ pool.observer.disconnect();
79
+ pools.delete(activeKey);
80
+ }
81
+ } else {
82
+ observer.value?.disconnect();
83
+ }
84
+ pool = void 0;
85
+ observer.value = void 0;
86
+ observed = [];
87
+ }
88
+ function emitDirectly(items) {
89
+ const payload = items.map((entry) => {
90
+ const target2 = spec.resolveTarget(entry, observed);
91
+ return target2 ? { entry, target: target2 } : void 0;
92
+ }).filter(isNotNil);
93
+ if (payload.length) {
94
+ subscription.callback(payload);
95
+ }
96
+ }
97
+ const unwatch = watch(
98
+ [() => resolveTargets(target), () => spec.normalize(toValue(options))],
99
+ ([newTargets, optionKey]) => {
100
+ if (isServer()) {
101
+ return;
102
+ }
103
+ let targetsChanged = !isSameElements(observed, newTargets);
104
+ if (optionKey !== activeKey) {
105
+ activeKey = optionKey;
106
+ cleanup();
107
+ targetsChanged = true;
108
+ }
109
+ if (!targetsChanged) {
110
+ return;
111
+ }
112
+ if (spec.pooled) {
113
+ if (!newTargets.length) {
114
+ observed.forEach(detach);
115
+ observed = [];
116
+ return;
117
+ }
118
+ if (!pool) {
119
+ pool = acquire(optionKey, toValue(options));
120
+ if (!pool) {
121
+ return;
122
+ }
123
+ observer.value = pool.observer;
124
+ observed = [];
125
+ }
126
+ observed.forEach((el) => {
127
+ if (!newTargets.includes(el)) {
128
+ detach(el);
129
+ }
130
+ });
131
+ newTargets.forEach((el) => {
132
+ if (!observed.includes(el)) {
133
+ attach(el);
134
+ }
135
+ });
136
+ observed = newTargets;
137
+ return;
138
+ }
139
+ if (!newTargets.length) {
140
+ if (observer.value) {
141
+ spec.sync(observer.value, observed, newTargets, toValue(options));
142
+ observed = [];
143
+ }
144
+ return;
145
+ }
146
+ if (!observer.value) {
147
+ observer.value = spec.create(emitDirectly, toValue(options));
148
+ if (!observer.value) {
149
+ return;
150
+ }
151
+ observed = [];
152
+ }
153
+ spec.sync(observer.value, observed, newTargets, toValue(options));
154
+ observed = newTargets;
155
+ },
156
+ {
157
+ immediate: true,
158
+ flush: "post"
159
+ }
160
+ );
161
+ function stop() {
162
+ cleanup();
163
+ unwatch();
164
+ }
165
+ onScopeDispose(() => {
166
+ stop();
167
+ });
168
+ return {
169
+ observer,
170
+ stop
171
+ };
172
+ };
173
+ }
@@ -1,8 +1,21 @@
1
- import type { Callback } from '../types/shared';
2
- export { debounce } from 'es-toolkit/function';
3
- export { throttle } from 'es-toolkit/function';
4
- interface ThrottleByRafReturnType<T extends Callback> {
5
- (...args: Parameters<T>): void;
1
+ export interface DebounceOptions {
2
+ signal?: AbortSignal;
3
+ edges?: Array<'leading' | 'trailing'>;
4
+ }
5
+ export interface DebouncedFunction<F extends (...args: any[]) => void> {
6
+ (...args: Parameters<F>): void;
7
+ schedule: () => void;
8
+ cancel: () => void;
9
+ flush: () => void;
10
+ }
11
+ export interface ThrottleOptions {
12
+ signal?: AbortSignal;
13
+ edges?: Array<'leading' | 'trailing'>;
14
+ }
15
+ export interface ThrottledFunction<F extends (...args: any[]) => void> {
16
+ (...args: Parameters<F>): void;
6
17
  cancel: () => void;
18
+ flush: () => void;
7
19
  }
8
- export declare function throttleByRaf<T extends Callback>(callback: T): ThrottleByRafReturnType<T>;
20
+ export declare function debounce<F extends (...args: any[]) => void>(func: F, debounceMs: number, { signal, edges }?: DebounceOptions): DebouncedFunction<F>;
21
+ export declare function throttle<F extends (...args: any[]) => void>(func: F, throttleMs: number, { signal, edges }?: ThrottleOptions): ThrottledFunction<F>;
@@ -1,22 +1,80 @@
1
- import { raf, caf } from "./event.js";
2
- export { debounce } from "es-toolkit/function";
3
- export { throttle } from "es-toolkit/function";
4
- export function throttleByRaf(callback) {
5
- let animationFrameId = 0;
6
- const throttle2 = (...args) => {
7
- if (animationFrameId) {
1
+ export function debounce(func, debounceMs, { signal, edges } = {}) {
2
+ let pendingInvoke = null;
3
+ let timeoutId = null;
4
+ const leading = edges?.includes("leading") ?? false;
5
+ const trailing = edges?.includes("trailing") ?? true;
6
+ const invoke = () => {
7
+ if (!pendingInvoke) {
8
8
  return;
9
9
  }
10
- animationFrameId = raf(() => {
11
- animationFrameId = 0;
12
- callback(...args);
13
- });
10
+ pendingInvoke();
11
+ pendingInvoke = null;
14
12
  };
15
- throttle2.cancel = () => {
16
- if (animationFrameId) {
17
- caf(animationFrameId);
18
- animationFrameId = 0;
13
+ const cancelTimer = () => {
14
+ if (timeoutId === null) {
15
+ return;
16
+ }
17
+ clearTimeout(timeoutId);
18
+ timeoutId = null;
19
+ };
20
+ const cancel = () => {
21
+ cancelTimer();
22
+ pendingInvoke = null;
23
+ };
24
+ const schedule = () => {
25
+ cancelTimer();
26
+ timeoutId = setTimeout(() => {
27
+ timeoutId = null;
28
+ if (trailing) {
29
+ invoke();
30
+ }
31
+ cancel();
32
+ }, debounceMs);
33
+ };
34
+ const debounced = function(...args) {
35
+ if (signal?.aborted) {
36
+ return;
37
+ }
38
+ pendingInvoke = () => func.apply(this, args);
39
+ const isFirstCall = !timeoutId;
40
+ schedule();
41
+ if (leading && isFirstCall) {
42
+ invoke();
43
+ }
44
+ };
45
+ debounced.schedule = schedule;
46
+ debounced.cancel = cancel;
47
+ debounced.flush = invoke;
48
+ signal?.addEventListener("abort", cancel, { once: true });
49
+ return debounced;
50
+ }
51
+ export function throttle(func, throttleMs, { signal, edges = ["leading", "trailing"] } = {}) {
52
+ let pendingAt = null;
53
+ const debounced = debounce(
54
+ function(...args) {
55
+ pendingAt = Date.now();
56
+ func.apply(this, args);
57
+ },
58
+ throttleMs,
59
+ { signal, edges }
60
+ );
61
+ const throttled = function(...args) {
62
+ if (signal?.aborted) {
63
+ return;
64
+ }
65
+ if (pendingAt === null) {
66
+ pendingAt = Date.now();
67
+ }
68
+ if (Date.now() - pendingAt >= throttleMs) {
69
+ pendingAt = Date.now();
70
+ func.apply(this, args);
71
+ debounced.cancel();
72
+ debounced.schedule();
73
+ return;
19
74
  }
75
+ debounced.apply(this, args);
20
76
  };
21
- return throttle2;
77
+ throttled.cancel = debounced.cancel;
78
+ throttled.flush = debounced.flush;
79
+ return throttled;
22
80
  }