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
@@ -2,9 +2,6 @@ import { customRef, onScopeDispose } from "vue";
2
2
  import { cachedOn } from "../utils/event.js";
3
3
  import { isServer } from "../utils/is.js";
4
4
  export const PRESET_MEDIA_QUERIES = {
5
- MOTION_NO_PREFERENCE: "(prefers-reduced-motion: no-preference)",
6
- MOTION_NO_REDUCE: "(prefers-reduced-motion: no-reduce)",
7
- MOTION_REDUCE: "(prefers-reduced-motion: reduce)",
8
5
  COLOR_SCHEME_DARK: "(prefers-color-scheme: dark)",
9
6
  COLOR_SCHEME_LIGHT: "(prefers-color-scheme: light)",
10
7
  COLOR_SCHEME_NO_PREFERENCE: "(prefers-color-scheme: no-preference)",
@@ -23,6 +20,7 @@ const CACHED_QUERIES = {};
23
20
  export function useMediaQuery(condition, callback) {
24
21
  let initialized = false;
25
22
  let mediaQuery;
23
+ let unbindChange;
26
24
  const matches = customRef((track, trigger) => ({
27
25
  get() {
28
26
  track();
@@ -30,24 +28,24 @@ export function useMediaQuery(condition, callback) {
30
28
  return false;
31
29
  }
32
30
  if (!initialized) {
33
- mediaQuery = CACHED_QUERIES[condition];
34
- if (mediaQuery) {
35
- mediaQuery.count++;
31
+ let cached = CACHED_QUERIES[condition];
32
+ if (cached) {
33
+ cached.count++;
36
34
  } else {
37
- const query = window.matchMedia(condition);
38
- mediaQuery = CACHED_QUERIES[condition] = {
35
+ cached = CACHED_QUERIES[condition] = {
39
36
  count: 1,
40
- query
37
+ query: window.matchMedia(condition),
38
+ cleanups: []
41
39
  };
42
40
  }
41
+ const entry = cached;
43
42
  const handler = () => {
44
- callback?.(mediaQuery.query);
43
+ callback?.(entry.query);
45
44
  trigger();
46
45
  };
47
- const unbindEvent = cachedOn(mediaQuery.query, "change", handler, { passive: true });
48
- if (!mediaQuery.cleanup) {
49
- mediaQuery.cleanup = unbindEvent;
50
- }
46
+ unbindChange = cachedOn(entry.query, "change", handler, { passive: true });
47
+ entry.cleanups.push(unbindChange);
48
+ mediaQuery = entry;
51
49
  initialized = true;
52
50
  }
53
51
  return mediaQuery?.query.matches ?? false;
@@ -60,11 +58,13 @@ export function useMediaQuery(condition, callback) {
60
58
  if (!mediaQuery) {
61
59
  return;
62
60
  }
63
- if (mediaQuery.cleanup) {
64
- mediaQuery.cleanup();
65
- }
66
- mediaQuery.count--;
67
- if (mediaQuery.count <= 0) {
61
+ const entry = mediaQuery;
62
+ unbindChange?.();
63
+ unbindChange = void 0;
64
+ entry.count--;
65
+ if (entry.count <= 0) {
66
+ entry.cleanups.forEach((unbind) => unbind());
67
+ entry.cleanups = [];
68
68
  delete CACHED_QUERIES[condition];
69
69
  }
70
70
  mediaQuery = void 0;
@@ -0,0 +1,6 @@
1
+ import type { ObserverResults, TargetRef } from '../utils/observer.js';
2
+ import type { MaybeRefOrGetter } from 'vue';
3
+ export declare const useMutationObserver: (target: TargetRef, callback: (items: Array<{
4
+ entry: MutationRecord;
5
+ target: HTMLElement;
6
+ }>) => void, options?: MaybeRefOrGetter<MutationObserverInit>) => ObserverResults<MutationObserver>;
@@ -0,0 +1,42 @@
1
+ import { isServer } from "../utils/is.js";
2
+ import { createObserver } from "../utils/observer.js";
3
+ function normalize(options) {
4
+ if (!options) {
5
+ return "";
6
+ }
7
+ const filter = options.attributeFilter ? [...options.attributeFilter].sort().join(",") : "";
8
+ return [
9
+ options.attributes ?? false,
10
+ filter,
11
+ options.attributeOldValue ?? false,
12
+ options.characterData ?? false,
13
+ options.characterDataOldValue ?? false,
14
+ options.childList ?? false,
15
+ options.subtree ?? false
16
+ ].join("|");
17
+ }
18
+ const spec = {
19
+ normalize,
20
+ create(callback) {
21
+ if (isServer() || typeof globalThis.MutationObserver === "undefined") {
22
+ return void 0;
23
+ }
24
+ return new globalThis.MutationObserver(callback);
25
+ },
26
+ // `MutationObserver` has no `unobserve` in the DOM spec, so a removal has to replay the
27
+ // whole set. Growing it still only observes the newcomers.
28
+ sync(observer, prev, next, options) {
29
+ if (prev.some((el) => !next.includes(el))) {
30
+ observer.disconnect();
31
+ next.forEach((el) => observer.observe(el, options));
32
+ return;
33
+ }
34
+ next.filter((el) => !prev.includes(el)).forEach((el) => observer.observe(el, options));
35
+ },
36
+ // A `subtree` observer reports descendants, so the owning element has to be looked up.
37
+ resolveTarget(record, observed) {
38
+ return observed.find((el) => el === record.target || el.contains(record.target));
39
+ }
40
+ };
41
+ const observerWrapper = createObserver(spec);
42
+ export const useMutationObserver = (target, callback, options) => observerWrapper(target, callback, options);
@@ -1,10 +1,12 @@
1
1
  import type { MaybeElementRef } from '../types/shared/utils';
2
- interface Options {
2
+ interface Options<E extends Event = PointerEvent> {
3
3
  allowList?: MaybeElementRef<HTMLElement>[];
4
- isEnabled?: (ev: PointerEvent) => boolean;
5
- onTrigger?: (ev: PointerEvent) => void;
4
+ eventName?: string;
5
+ listenerOptions?: AddEventListenerOptions;
6
+ enabled?: (ev: E) => boolean;
7
+ onTrigger?: (ev: E) => void;
6
8
  }
7
- export declare function useOutsideClick(container: MaybeElementRef<HTMLElement>, options?: Options): {
9
+ export declare function useOutsideClick<E extends Event = PointerEvent>(container: MaybeElementRef<HTMLElement>, options?: Options<E>): {
8
10
  stop: () => void;
9
11
  };
10
12
  export {};
@@ -1,10 +1,11 @@
1
1
  import { onScopeDispose, watch } from "vue";
2
2
  import { cachedOff, cachedOn } from "../utils/event.js";
3
- import { toValue } from "../utils/ref.js";
3
+ import { toValue } from "../utils/helper.js";
4
+ import { isServer } from "../utils/is.js";
4
5
  export function useOutsideClick(container, options = {}) {
5
6
  function onClick(ev) {
6
- const { isEnabled } = options;
7
- if (typeof isEnabled === "function" && !isEnabled(ev)) {
7
+ const { enabled } = options;
8
+ if (typeof enabled === "function" && !enabled(ev)) {
8
9
  return;
9
10
  }
10
11
  const { onTrigger, allowList = [container] } = options;
@@ -15,21 +16,28 @@ export function useOutsideClick(container, options = {}) {
15
16
  }
16
17
  onTrigger?.(ev);
17
18
  }
19
+ const event = options.eventName ?? "click";
20
+ const listenerOptions = options.listenerOptions;
21
+ const target = isServer() ? null : document;
22
+ function bind() {
23
+ cachedOn(target, event, onClick, listenerOptions);
24
+ }
25
+ function unbind() {
26
+ cachedOff(target, event, onClick, listenerOptions);
27
+ }
18
28
  const unwatch = watch(
19
29
  () => toValue(container),
20
- (dom, _, onCleanup) => {
30
+ (dom) => {
31
+ unbind();
21
32
  if (dom) {
22
- cachedOn(document, "click", onClick);
33
+ bind();
23
34
  }
24
- onCleanup(() => {
25
- cachedOff(document, "click", onClick);
26
- });
27
35
  },
28
- { immediate: true }
36
+ { immediate: true, flush: "post" }
29
37
  );
30
38
  function stop() {
31
39
  unwatch();
32
- cachedOff(document, "click", onClick);
40
+ unbind();
33
41
  }
34
42
  onScopeDispose(() => {
35
43
  stop();
@@ -1,49 +1,60 @@
1
1
  import { onScopeDispose } from "vue";
2
2
  import { off, once } from "../utils/event.js";
3
- import { toValue } from "../utils/ref.js";
3
+ import { toValue } from "../utils/helper.js";
4
4
  export function useRepeatAction(actionOrOptions) {
5
5
  const {
6
6
  action,
7
7
  disabled,
8
- finalInterval = 1e3 / 16.6,
9
- // 60fps
10
- initialInterval = 680,
11
- accelerationDuration = 1500
8
+ finalInterval = 30,
9
+ initialInterval = 500,
10
+ accelerationDuration = 1e3
12
11
  } = typeof actionOrOptions === "function" ? { action: actionOrOptions } : actionOrOptions;
12
+ let running = false;
13
13
  let timer = null;
14
- let startTime = 0;
14
+ let elapsedTime = 0;
15
+ let nextInterval = initialInterval;
16
+ function intervalAt(elapsed) {
17
+ if (elapsed >= accelerationDuration) {
18
+ return finalInterval;
19
+ }
20
+ const progress = elapsed / accelerationDuration;
21
+ return initialInterval - (initialInterval - finalInterval) * progress;
22
+ }
15
23
  function step() {
24
+ if (!running || toValue(disabled)) {
25
+ stop();
26
+ return;
27
+ }
16
28
  action();
17
- const elapsedTime = Date.now() - startTime;
18
- let nextInterval;
19
- if (elapsedTime >= accelerationDuration) {
20
- nextInterval = finalInterval;
21
- } else {
22
- const progress = elapsedTime / accelerationDuration;
23
- nextInterval = initialInterval - (initialInterval - finalInterval) * progress;
29
+ if (!running) {
30
+ return;
24
31
  }
32
+ elapsedTime += nextInterval;
33
+ nextInterval = intervalAt(elapsedTime);
25
34
  timer = setTimeout(step, nextInterval);
26
35
  }
27
36
  function stop() {
37
+ running = false;
28
38
  if (timer) {
29
39
  clearTimeout(timer);
30
40
  timer = null;
31
41
  }
42
+ off(document, "pointerup", stop);
43
+ off(document, "pointercancel", stop);
32
44
  }
33
45
  function start() {
34
- if (timer || toValue(disabled)) {
46
+ if (running || toValue(disabled)) {
35
47
  return;
36
48
  }
37
- startTime = Date.now();
49
+ running = true;
50
+ elapsedTime = 0;
51
+ nextInterval = initialInterval;
38
52
  action();
39
- timer = setTimeout(step, initialInterval);
53
+ timer = setTimeout(step, nextInterval);
40
54
  once(document, "pointerup", stop);
41
55
  once(document, "pointercancel", stop);
42
56
  }
43
- onScopeDispose(() => {
44
- off(document, "pointerup", stop);
45
- off(document, "pointercancel", stop);
46
- });
57
+ onScopeDispose(stop);
47
58
  return {
48
59
  start,
49
60
  stop
@@ -0,0 +1,6 @@
1
+ import type { ObserverResults, TargetRef } from '../utils/observer.js';
2
+ import type { MaybeRefOrGetter } from 'vue';
3
+ export declare const useResizeObserver: (target: TargetRef, callback: (items: Array<{
4
+ entry: ResizeObserverEntry;
5
+ target: HTMLElement;
6
+ }>) => void, options?: MaybeRefOrGetter<ResizeObserverOptions>) => ObserverResults<ResizeObserver>;
@@ -0,0 +1,22 @@
1
+ import { isServer } from "../utils/is.js";
2
+ import { createObserver } from "../utils/observer.js";
3
+ function normalize(options) {
4
+ return options?.box ?? "";
5
+ }
6
+ const spec = {
7
+ normalize,
8
+ create(callback) {
9
+ if (isServer() || typeof globalThis.ResizeObserver === "undefined") {
10
+ return void 0;
11
+ }
12
+ return new globalThis.ResizeObserver(callback);
13
+ },
14
+ sync(observer, prev, next, options) {
15
+ prev.filter((el) => !next.includes(el)).forEach((el) => observer.unobserve(el));
16
+ next.filter((el) => !prev.includes(el)).forEach((el) => observer.observe(el, options));
17
+ },
18
+ resolveTarget: (entry) => entry.target,
19
+ pooled: true
20
+ };
21
+ const observerWrapper = createObserver(spec);
22
+ export const useResizeObserver = (target, callback, options) => observerWrapper(target, callback, options);
@@ -0,0 +1,15 @@
1
+ import type { MaybeRefOrGetter, ShallowRef } from 'vue';
2
+ export interface UseScrollspyOptions {
3
+ /** Scrollable container. @default window */
4
+ scrollTarget?: MaybeRefOrGetter<Window | HTMLElement | null>;
5
+ /** Pixels above the fold that count as passed; match a sticky header's height. @default 0 */
6
+ topOffset?: MaybeRefOrGetter<number>;
7
+ }
8
+ export interface UseScrollspyReturn {
9
+ activeIndex: ShallowRef<number>;
10
+ activeEl: ShallowRef<HTMLElement | null>;
11
+ /** Recompute from the current layout, e.g. after a route switch or async content. */
12
+ update: () => void;
13
+ }
14
+ /** `targets` must be in document order: the probe line is bisected against their offsets. */
15
+ export declare function useScrollspy(targets: MaybeRefOrGetter<HTMLElement[]>, options?: UseScrollspyOptions): UseScrollspyReturn;
@@ -0,0 +1,98 @@
1
+ import { computed, onMounted, onScopeDispose, shallowRef, watch } from "vue";
2
+ import {
3
+ getScrollElement,
4
+ getScrollListener,
5
+ getScrollPosition,
6
+ isViewportScroll
7
+ } from "../utils/dom.js";
8
+ import { off, on, scheduleByRaf } from "../utils/event.js";
9
+ import { toValue } from "../utils/helper.js";
10
+ import { isServer } from "../utils/is.js";
11
+ import { useResizeObserver } from "./use-resize-observer.js";
12
+ const BOTTOM_TOLERANCE = 2;
13
+ export function useScrollspy(targets, options = {}) {
14
+ const { scrollTarget } = options;
15
+ const topOffset = computed(() => toValue(options.topOffset ?? 0));
16
+ const activeIndex = shallowRef(-1);
17
+ const activeEl = shallowRef(null);
18
+ const targetItems = computed(() => toValue(targets));
19
+ function setActive(items, index) {
20
+ activeIndex.value = index;
21
+ activeEl.value = index >= 0 ? items[index] : null;
22
+ }
23
+ function locateProbe(items, origin) {
24
+ const probe = topOffset.value + BOTTOM_TOLERANCE;
25
+ let low = 0;
26
+ let high = items.length;
27
+ while (low < high) {
28
+ const mid = low + high >> 1;
29
+ if (items[mid].getBoundingClientRect().top - origin > probe) {
30
+ high = mid;
31
+ } else {
32
+ low = mid + 1;
33
+ }
34
+ }
35
+ return low - 1;
36
+ }
37
+ function isExhausted(scrollTop, scrollHeight, clientHeight) {
38
+ return scrollHeight - clientHeight > 1 && clientHeight + scrollTop >= scrollHeight - BOTTOM_TOLERANCE;
39
+ }
40
+ function update() {
41
+ const items = targetItems.value;
42
+ if (!items.length) {
43
+ setActive(items, -1);
44
+ return;
45
+ }
46
+ const metricsEl = getScrollElement(toValue(scrollTarget));
47
+ const { scrollTop, scrollHeight, clientHeight } = getScrollPosition(metricsEl);
48
+ if (isExhausted(scrollTop, scrollHeight, clientHeight)) {
49
+ setActive(items, items.length - 1);
50
+ return;
51
+ }
52
+ const origin = isViewportScroll(metricsEl) ? 0 : metricsEl.getBoundingClientRect().top;
53
+ setActive(items, Math.max(locateProbe(items, origin), 0));
54
+ }
55
+ if (!isServer()) {
56
+ let bindListeners = function() {
57
+ const listener = getScrollListener(toValue(scrollTarget));
58
+ if (listener === scrollListener) {
59
+ return;
60
+ }
61
+ off(scrollListener, "scroll", scheduleUpdate);
62
+ scrollListener = listener;
63
+ on(scrollListener, "scroll", scheduleUpdate, { passive: true });
64
+ const onWindow = listener === window ? window : null;
65
+ if (onWindow !== windowListener) {
66
+ off(windowListener, "resize", scheduleUpdate);
67
+ windowListener = onWindow;
68
+ on(windowListener, "resize", scheduleUpdate, { passive: true });
69
+ }
70
+ scheduleUpdate();
71
+ };
72
+ const scheduleUpdate = scheduleByRaf(update);
73
+ let scrollListener = null;
74
+ let windowListener = null;
75
+ const stopListener = watch(() => toValue(scrollTarget), bindListeners, { flush: "post" });
76
+ const { stop: stopResizeObserver } = useResizeObserver(
77
+ () => getScrollElement(toValue(scrollTarget)),
78
+ scheduleUpdate
79
+ );
80
+ const stopOffset = watch(topOffset, scheduleUpdate);
81
+ const stopTargets = watch(() => targetItems.value, scheduleUpdate);
82
+ onMounted(bindListeners);
83
+ onScopeDispose(() => {
84
+ scheduleUpdate.cancel();
85
+ off(scrollListener, "scroll", scheduleUpdate);
86
+ off(windowListener, "resize", scheduleUpdate);
87
+ stopListener();
88
+ stopResizeObserver();
89
+ stopTargets();
90
+ stopOffset();
91
+ });
92
+ }
93
+ return {
94
+ activeIndex,
95
+ activeEl,
96
+ update
97
+ };
98
+ }
@@ -0,0 +1,32 @@
1
+ import type { Nullable } from '../types/shared/utils';
2
+ import type { MaybeRefOrGetter, ShallowRef } from 'vue';
3
+ export interface UseStickToBottomOptions {
4
+ /**
5
+ * Pixel distance from the bottom considered "at bottom".
6
+ * @default 16
7
+ */
8
+ threshold?: MaybeRefOrGetter<number>;
9
+ /**
10
+ * Whether content updates should auto-scroll while at bottom.
11
+ * @default true
12
+ */
13
+ enabled?: MaybeRefOrGetter<boolean>;
14
+ }
15
+ export interface UseStickToBottomReturn {
16
+ isAtBottom: ShallowRef<boolean>;
17
+ scrollToBottom: () => void;
18
+ /** Scroll to bottom and re-enable auto-stick. */
19
+ forceStickToBottom: () => void;
20
+ /** Scroll to bottom only when currently at bottom and enabled. */
21
+ stickIfNeeded: () => void;
22
+ /** Re-measure whether the container is at the bottom. */
23
+ update: () => void;
24
+ }
25
+ /**
26
+ * Keep a scroll container pinned to the bottom while content changes,
27
+ * until the user scrolls away. Returning to the bottom re-enables follow.
28
+ *
29
+ * Auto-scroll is always instant to avoid smooth-animation races that
30
+ * break continuous follow in chat-style lists.
31
+ */
32
+ export declare function useStickToBottom(container: MaybeRefOrGetter<Nullable<HTMLElement>>, content?: MaybeRefOrGetter<Nullable<HTMLElement>>, options?: UseStickToBottomOptions): UseStickToBottomReturn;
@@ -0,0 +1,106 @@
1
+ import { shallowRef, watch, onScopeDispose } from "vue";
2
+ import { getElement } from "../utils/dom.js";
3
+ import { cachedOff, cachedOn, throttleByRaf } from "../utils/event.js";
4
+ import { toValue } from "../utils/helper.js";
5
+ import { isServer } from "../utils/is.js";
6
+ import { useMutationObserver } from "./use-mutation-observer.js";
7
+ import { useResizeObserver } from "./use-resize-observer.js";
8
+ export function useStickToBottom(container, content, options = {}) {
9
+ const { threshold = 16, enabled = true } = options;
10
+ const isAtBottom = shallowRef(true);
11
+ function getContainerEl() {
12
+ return getElement(toValue(container));
13
+ }
14
+ function getContentEl() {
15
+ return getElement(toValue(content)) ?? getContainerEl();
16
+ }
17
+ function getThreshold() {
18
+ return toValue(threshold);
19
+ }
20
+ function measureAtBottom(el) {
21
+ const distanceToBottom = el.scrollHeight - el.scrollTop - el.clientHeight;
22
+ return distanceToBottom <= getThreshold();
23
+ }
24
+ function update() {
25
+ const el = getContainerEl();
26
+ if (!el) {
27
+ return;
28
+ }
29
+ isAtBottom.value = measureAtBottom(el);
30
+ }
31
+ function scrollToBottom() {
32
+ const el = getContainerEl();
33
+ if (!el) {
34
+ return;
35
+ }
36
+ const top = Math.max(0, el.scrollHeight - el.clientHeight);
37
+ el.scrollTo({ top, behavior: "instant" });
38
+ isAtBottom.value = true;
39
+ }
40
+ function forceStickToBottom() {
41
+ isAtBottom.value = true;
42
+ scrollToBottom();
43
+ }
44
+ function stickIfNeeded() {
45
+ if (!toValue(enabled) || !isAtBottom.value) {
46
+ return;
47
+ }
48
+ scrollToBottom();
49
+ }
50
+ if (!isServer()) {
51
+ const scheduleUpdate = throttleByRaf(update);
52
+ const scheduleStick = throttleByRaf(stickIfNeeded);
53
+ useResizeObserver(
54
+ () => [getContentEl(), getContainerEl()],
55
+ () => {
56
+ scheduleStick();
57
+ }
58
+ );
59
+ useMutationObserver(
60
+ () => getContainerEl(),
61
+ () => {
62
+ scheduleStick();
63
+ },
64
+ {
65
+ childList: true,
66
+ subtree: true,
67
+ characterData: true
68
+ }
69
+ );
70
+ const stopWatch = watch(
71
+ () => getContainerEl(),
72
+ (el, oldEl) => {
73
+ if (oldEl) {
74
+ cachedOff(oldEl, "scroll", scheduleUpdate, { passive: true });
75
+ scheduleUpdate.cancel();
76
+ scheduleStick.cancel();
77
+ }
78
+ if (!el) {
79
+ return;
80
+ }
81
+ cachedOn(el, "scroll", scheduleUpdate, { passive: true });
82
+ update();
83
+ },
84
+ {
85
+ immediate: true,
86
+ flush: "post"
87
+ }
88
+ );
89
+ onScopeDispose(() => {
90
+ const el = getContainerEl();
91
+ if (el) {
92
+ cachedOff(el, "scroll", scheduleUpdate, { passive: true });
93
+ }
94
+ scheduleUpdate.cancel();
95
+ scheduleStick.cancel();
96
+ stopWatch();
97
+ });
98
+ }
99
+ return {
100
+ isAtBottom,
101
+ scrollToBottom,
102
+ forceStickToBottom,
103
+ stickIfNeeded,
104
+ update
105
+ };
106
+ }
@@ -0,0 +1,20 @@
1
+ import type { RouteLocationNormalized, Router } from 'vue-router';
2
+ type ShouldTransition = (to: RouteLocationNormalized, from: RouteLocationNormalized) => boolean;
3
+ interface Options {
4
+ shouldTransition?: ShouldTransition;
5
+ }
6
+ /**
7
+ * Wraps router navigations in the View Transitions API so route changes animate
8
+ * between the old and new view.
9
+ *
10
+ * Requires a browser with `document.startViewTransition` support and a router
11
+ * that supports the View Transitions lifecycle. Returns a disposer that removes
12
+ * the registered guards; it is a no-op when the API is unavailable. Calls for
13
+ * the same router share one registration, removed once every caller has disposed.
14
+ *
15
+ * @param router The vue-router instance to attach the guards to.
16
+ * @param options.shouldTransition Called with `(to, from)` before each navigation; `false` navigates without a transition. Each caller may pass one, and any of them declining skips the transition.
17
+ * @returns A function that removes the guards.
18
+ */
19
+ export declare function useViewTransition(router: Router, options?: Options): () => void;
20
+ export {};
@@ -0,0 +1,79 @@
1
+ import { nextTick } from "vue";
2
+ import { NOOP } from "../utils/event.js";
3
+ import { isServer } from "../utils/is.js";
4
+ const registrations = /* @__PURE__ */ new WeakMap();
5
+ function release(router, registration, shouldTransition) {
6
+ if (shouldTransition) {
7
+ const index = registration.shouldTransition.indexOf(shouldTransition);
8
+ if (index > -1) {
9
+ registration.shouldTransition.splice(index, 1);
10
+ }
11
+ }
12
+ if (--registration.count > 0) {
13
+ return;
14
+ }
15
+ registrations.delete(router);
16
+ registration.dispose();
17
+ }
18
+ export function useViewTransition(router, options = {}) {
19
+ if (isServer() || !document.startViewTransition) {
20
+ return NOOP;
21
+ }
22
+ const { shouldTransition } = options;
23
+ const registered = registrations.get(router);
24
+ if (registered) {
25
+ registered.count++;
26
+ if (shouldTransition) {
27
+ registered.shouldTransition.push(shouldTransition);
28
+ }
29
+ return () => release(router, registered, shouldTransition);
30
+ }
31
+ const registration = {
32
+ count: 1,
33
+ shouldTransition: shouldTransition ? [shouldTransition] : [],
34
+ dispose: NOOP
35
+ };
36
+ registrations.set(router, registration);
37
+ const startViewTransition = document.startViewTransition.bind(document);
38
+ let settle;
39
+ const stopBeforeResolve = router.beforeResolve((to, from) => {
40
+ settle?.();
41
+ for (const predicate of registration.shouldTransition) {
42
+ if (!predicate(to, from)) {
43
+ return;
44
+ }
45
+ }
46
+ let unblock;
47
+ let finish;
48
+ const blocked = new Promise((resolve) => {
49
+ unblock = resolve;
50
+ });
51
+ const rendered = new Promise((resolve) => {
52
+ finish = resolve;
53
+ });
54
+ settle = () => {
55
+ settle = void 0;
56
+ unblock();
57
+ void nextTick(finish);
58
+ };
59
+ const transition = startViewTransition(() => {
60
+ unblock();
61
+ return rendered;
62
+ });
63
+ void transition.finished.then(unblock, unblock);
64
+ return blocked;
65
+ });
66
+ const stopAfterEach = router.afterEach(() => {
67
+ settle?.();
68
+ });
69
+ const stopOnError = router.onError(() => {
70
+ settle?.();
71
+ });
72
+ registration.dispose = () => {
73
+ settle?.();
74
+ stopBeforeResolve();
75
+ stopAfterEach();
76
+ stopOnError();
77
+ };
78
+ return () => release(router, registration, shouldTransition);
79
+ }