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
@@ -1,177 +1,423 @@
1
1
  <script setup>
2
- import { nextTick, onMounted, ref, shallowRef } from "vue";
3
- import { provideResizableContext } from "../../contexts/resizable";
2
+ import { computed, shallowRef, watch } from "vue";
3
+ import { useModelValue } from "../../composables/_internal/use-model-value.js";
4
+ import { throttleByRaf } from "../../utils/event.js";
5
+ import { getUniqueId } from "../../utils/helper.js";
6
+ import { isNil } from "../../utils/is.js";
7
+ import { clamp, PERCENT_TOTAL, roundSize, toPair } from "./utils";
4
8
  defineOptions({
5
- name: "PResizable",
6
- inheritAttrs: false
9
+ name: "PResizable",
10
+ inheritAttrs: false,
11
+ model: {
12
+ prop: "modelValue",
13
+ event: "update:modelValue"
14
+ }
7
15
  });
8
16
  const props = defineProps({
9
- direction: { type: String, required: false, default: "horizontal" }
17
+ direction: {
18
+ type: String,
19
+ required: false,
20
+ default: "horizontal"
21
+ },
22
+ minSize: {
23
+ type: Array,
24
+ required: false,
25
+ default: () => [0, 0]
26
+ },
27
+ handle: {
28
+ type: Boolean,
29
+ required: false,
30
+ default: false
31
+ },
32
+ disabled: {
33
+ type: Boolean,
34
+ required: false,
35
+ default: false
36
+ },
37
+ defaultValue: {
38
+ type: Array,
39
+ required: false,
40
+ default: () => [PERCENT_TOTAL / 2, PERCENT_TOTAL / 2]
41
+ },
42
+ modelValue: {
43
+ type: [Array, null],
44
+ required: false,
45
+ default: null
46
+ }
10
47
  });
11
- const panelSizes = ref({});
12
- const panelConfigs = ref([]);
13
- const handleConfigs = ref([]);
14
- const orderCounter = shallowRef(0);
48
+ const emits = defineEmits([
49
+ "change",
50
+ "reset",
51
+ "update:modelValue"
52
+ ]);
53
+ const uid = getUniqueId("pxd-resizable");
15
54
  const containerRef = shallowRef();
16
- function registerPanel(config) {
17
- const existingIndex = panelConfigs.value.findIndex((p) => p.id === config.id);
18
- if (existingIndex === -1) {
19
- panelConfigs.value.push({ ...config, order: orderCounter.value++ });
20
- } else {
21
- panelConfigs.value[existingIndex] = {
22
- ...config,
23
- order: panelConfigs.value[existingIndex].order
24
- };
25
- }
26
- panelConfigs.value.sort((a, b) => a.order - b.order);
27
- nextTick(() => {
28
- initPanelSizes();
29
- });
30
- }
31
- function unregisterPanel(id) {
32
- const index = panelConfigs.value.findIndex((p) => p.id === id);
33
- if (index !== -1) {
34
- panelConfigs.value.splice(index, 1);
35
- const { [id]: _, ...rest } = panelSizes.value;
36
- panelSizes.value = rest;
37
- }
38
- }
39
- function registerHandle(config) {
40
- const existingIndex = handleConfigs.value.findIndex((h) => h.id === config.id);
41
- if (existingIndex === -1) {
42
- handleConfigs.value.push({ ...config, order: orderCounter.value++ });
43
- } else {
44
- handleConfigs.value[existingIndex] = {
45
- ...config,
46
- order: handleConfigs.value[existingIndex].order
47
- };
48
- }
49
- handleConfigs.value.sort((a, b) => a.order - b.order);
50
- }
51
- function unregisterHandle(id) {
52
- const index = handleConfigs.value.findIndex((h) => h.id === id);
53
- if (index !== -1) {
54
- handleConfigs.value.splice(index, 1);
55
- }
56
- }
57
- function getPanelSize(id) {
58
- return panelSizes.value[id] || 0;
59
- }
60
- function onHandleDrag(handleId, delta) {
61
- const handleOrder = handleConfigs.value.find((h) => h.id === handleId)?.order;
62
- if (handleOrder === void 0) {
63
- return;
64
- }
65
- const panelsBeforeThisHandle = panelConfigs.value.filter((p) => p.order < handleOrder).length;
66
- const panelIndex = panelsBeforeThisHandle - 1;
67
- if (panelIndex >= 0 && panelIndex + 1 < panelConfigs.value.length) {
68
- onDrag(panelIndex, delta);
69
- }
70
- }
71
- function calculateContainerSize() {
72
- if (!containerRef.value) {
73
- return 0;
74
- }
75
- return props.direction === "horizontal" ? containerRef.value.offsetWidth : containerRef.value.offsetHeight;
76
- }
77
- function calculateInitialPanelSizes() {
78
- const sizes = {};
79
- let remainingSize = 100;
80
- const autoSizedPanelIds = [];
81
- const sortedConfigs = [...panelConfigs.value].sort((a, b) => a.order - b.order);
82
- sortedConfigs.forEach((config) => {
83
- const minSize = config.minSize || 0;
84
- const initialSizeNum = config.size;
85
- if (initialSizeNum !== null && initialSizeNum !== void 0) {
86
- sizes[config.id] = Math.max(initialSizeNum, minSize);
87
- remainingSize -= sizes[config.id];
88
- } else {
89
- sizes[config.id] = minSize;
90
- remainingSize -= minSize;
91
- autoSizedPanelIds.push(config.id);
92
- }
93
- });
94
- return { sizes, remainingSize, autoSizedPanelIds };
95
- }
96
- function distributeRemainingSpace(sizes, remainingSize, autoSizedPanelIds) {
97
- if (autoSizedPanelIds.length === 0 || remainingSize <= 0) {
98
- return sizes;
99
- }
100
- const updatedSizes = { ...sizes };
101
- const avgSize = remainingSize / autoSizedPanelIds.length;
102
- autoSizedPanelIds.forEach((id) => {
103
- updatedSizes[id] += avgSize;
104
- });
105
- return updatedSizes;
106
- }
107
- async function initPanelSizes() {
108
- if (panelConfigs.value.length === 0) {
109
- return;
110
- }
111
- await nextTick();
112
- const { sizes, remainingSize, autoSizedPanelIds } = calculateInitialPanelSizes();
113
- panelSizes.value = distributeRemainingSpace(sizes, remainingSize, autoSizedPanelIds);
114
- }
115
- function onDrag(index, { deltaX, deltaY }) {
116
- if (index < 0 || index + 1 >= panelConfigs.value.length) {
117
- return;
118
- }
119
- const containerSize = calculateContainerSize();
120
- if (containerSize <= 0) {
121
- return;
122
- }
123
- const prevId = panelConfigs.value[index].id;
124
- const nextId = panelConfigs.value[index + 1].id;
125
- const delta = props.direction === "horizontal" ? deltaX : deltaY;
126
- const deltaPercent = delta / containerSize * 100;
127
- const prevSize = panelSizes.value[prevId] || 0;
128
- const nextSize = panelSizes.value[nextId] || 0;
129
- const prevMinSize = panelConfigs.value[index]?.minSize || 0;
130
- const nextMinSize = panelConfigs.value[index + 1]?.minSize || 0;
131
- let newPrevSize = prevSize + deltaPercent;
132
- let newNextSize = nextSize - deltaPercent;
133
- if (newPrevSize < prevMinSize) {
134
- const diff = prevMinSize - newPrevSize;
135
- newPrevSize = prevMinSize;
136
- newNextSize -= diff;
137
- } else if (newNextSize < nextMinSize) {
138
- const diff = nextMinSize - newNextSize;
139
- newNextSize = nextMinSize;
140
- newPrevSize -= diff;
141
- }
142
- if (newPrevSize < prevMinSize) {
143
- newPrevSize = prevMinSize;
144
- }
145
- if (newNextSize < nextMinSize) {
146
- newNextSize = nextMinSize;
147
- }
148
- panelSizes.value[prevId] = newPrevSize;
149
- panelSizes.value[nextId] = newNextSize;
150
- }
151
- provideResizableContext({
152
- props,
153
- panelSizes,
154
- registerPanel,
155
- unregisterPanel,
156
- registerHandle,
157
- unregisterHandle,
158
- getPanelSize,
159
- onHandleDrag,
160
- resetPanels: initPanelSizes
55
+ const handleRef = shallowRef();
56
+ const modelValue = useModelValue(props, emits, { withChange: false });
57
+ const isControlled = computed(() => !isNil(props.modelValue));
58
+ const innerSizes = shallowRef(toPair(props.defaultValue));
59
+ const sizes = computed(() => isControlled.value ? toPair(props.modelValue) : innerSizes.value);
60
+ /**
61
+ * The range the leading panel may travel through. The trailing panel needs no
62
+ * bounds of its own: the pair always sums to 100, so the leading panel's floor
63
+ * already is the trailing panel's ceiling and the other way round.
64
+ */
65
+ const bounds = computed(() => {
66
+ const [leading, trailing] = toPair(props.minSize);
67
+ if (leading + trailing > PERCENT_TOTAL) {
68
+ return {
69
+ min: 0,
70
+ max: PERCENT_TOTAL
71
+ };
72
+ }
73
+ return {
74
+ min: leading,
75
+ max: PERCENT_TOTAL - trailing
76
+ };
161
77
  });
162
- onMounted(async () => {
163
- await nextTick();
164
- initPanelSizes();
78
+ const leadingId = `${uid}-leading`;
79
+ const trailingId = `${uid}-trailing`;
80
+ const collapsed = shallowRef(false);
81
+ // The pair as it was before folding, so expanding gives back what the user was
82
+ // working with rather than the configured starting point.
83
+ let expandedPair = null;
84
+ let initialPair = null;
85
+ watch(sizes, ([leading, trailing]) => {
86
+ initialPair ??= [leading, trailing];
87
+ }, {
88
+ immediate: true,
89
+ flush: "sync"
90
+ });
91
+ function setSizes(next) {
92
+ const current = sizes.value;
93
+ const rounded = [roundSize(next[0]), roundSize(next[1])];
94
+ if (rounded[0] === current[0] && rounded[1] === current[1]) {
95
+ return false;
96
+ }
97
+ if (!isControlled.value) {
98
+ innerSizes.value = rounded;
99
+ }
100
+ modelValue.value = rounded;
101
+ return true;
102
+ }
103
+ function resize(deltaPercent) {
104
+ const [leading, trailing] = sizes.value;
105
+ const { min, max } = bounds.value;
106
+ // Clamp the movement so the leading panel stays inside its own range, then
107
+ // hand the trailing panel the same delta so the pair keeps summing to 100%.
108
+ const applied = clamp(deltaPercent, min - leading, max - leading);
109
+ if (applied === 0) {
110
+ return false;
111
+ }
112
+ // The trailing panel is derived from the already rounded value, so the pair
113
+ // keeps the exact sum it had and repeated drags cannot drift.
114
+ const newLeading = roundSize(leading + applied);
115
+ return setSizes([newLeading, roundSize(leading + trailing - newLeading)]);
116
+ }
117
+ /**
118
+ * Moving the divider brings a folded pair back, so a collapsed panel is never a
119
+ * dead end. The remembered sizes go with it: they described a pair that no
120
+ * longer exists once it has been moved somewhere else.
121
+ */
122
+ function applyDelta(deltaPercent) {
123
+ const changed = resize(deltaPercent);
124
+ if (changed && collapsed.value) {
125
+ collapsed.value = false;
126
+ expandedPair = null;
127
+ }
128
+ return changed;
129
+ }
130
+ function resizeByPixels(delta) {
131
+ const container = containerRef.value;
132
+ if (!container) {
133
+ return false;
134
+ }
135
+ const containerSize = props.direction === "horizontal" ? container.offsetWidth : container.offsetHeight;
136
+ if (containerSize <= 0) {
137
+ return false;
138
+ }
139
+ return applyDelta(delta / containerSize * PERCENT_TOTAL);
140
+ }
141
+ function commitChange() {
142
+ emits("change", sizes.value.slice());
143
+ }
144
+ function toggleCollapse() {
145
+ if (props.disabled) {
146
+ return;
147
+ }
148
+ const [leading, trailing] = sizes.value;
149
+ if (collapsed.value) {
150
+ const restore = expandedPair ?? initialPair ?? [leading, trailing];
151
+ expandedPair = null;
152
+ collapsed.value = false;
153
+ if (setSizes([restore[0], restore[1]])) {
154
+ commitChange();
155
+ }
156
+ return;
157
+ }
158
+ expandedPair = [leading, trailing];
159
+ collapsed.value = true;
160
+ const { min } = bounds.value;
161
+ // Whatever the leading panel gives up goes to its neighbour, so the pair keeps
162
+ // summing to 100% while folded.
163
+ if (setSizes([min, PERCENT_TOTAL - min])) {
164
+ commitChange();
165
+ }
166
+ }
167
+ function reset() {
168
+ const restore = initialPair ?? toPair(props.defaultValue);
169
+ expandedPair = null;
170
+ collapsed.value = false;
171
+ if (setSizes([restore[0], restore[1]])) {
172
+ emits("reset", sizes.value.slice());
173
+ }
174
+ }
175
+ let activePointerId = null;
176
+ let startPosition = 0;
177
+ let accumulated = 0;
178
+ let resized = false;
179
+ function axisOf(event) {
180
+ return props.direction === "horizontal" ? event.clientX : event.clientY;
181
+ }
182
+ const flushResize = throttleByRaf(() => {
183
+ if (accumulated === 0) {
184
+ return;
185
+ }
186
+ const delta = accumulated;
187
+ accumulated = 0;
188
+ resized = resizeByPixels(delta) || resized;
189
+ });
190
+ // The capture target is the handle itself, never `event.target`: a child element
191
+ // can be swapped mid-drag, which would both throw on release and strand the drag.
192
+ // Holding the capture also keeps the drag alive when the pointer leaves the window.
193
+ function releaseCapture() {
194
+ const id = activePointerId;
195
+ const el = handleRef.value;
196
+ activePointerId = null;
197
+ if (!el || id === null) {
198
+ return;
199
+ }
200
+ try {
201
+ el.releasePointerCapture(id);
202
+ } catch {}
203
+ }
204
+ function resetDragging() {
205
+ startPosition = 0;
206
+ accumulated = 0;
207
+ resized = false;
208
+ flushResize.cancel();
209
+ releaseCapture();
210
+ }
211
+ function handlePointerDown(event) {
212
+ if (props.disabled) {
213
+ return;
214
+ }
215
+ activePointerId = event.pointerId;
216
+ startPosition = axisOf(event);
217
+ accumulated = 0;
218
+ resized = false;
219
+ try {
220
+ handleRef.value?.setPointerCapture(event.pointerId);
221
+ } catch {}
222
+ }
223
+ function handlePointerMove(event) {
224
+ if (event.pointerId !== activePointerId) {
225
+ return;
226
+ }
227
+ event.preventDefault();
228
+ const position = axisOf(event);
229
+ accumulated += position - startPosition;
230
+ startPosition = position;
231
+ flushResize();
232
+ }
233
+ function handlePointerUp(event) {
234
+ if (event.pointerId !== activePointerId) {
235
+ return;
236
+ }
237
+ flushResize.cancel();
238
+ if (accumulated !== 0) {
239
+ const delta = accumulated;
240
+ accumulated = 0;
241
+ resized = resizeByPixels(delta) || resized;
242
+ }
243
+ const didResize = resized;
244
+ resetDragging();
245
+ if (didResize) {
246
+ commitChange();
247
+ }
248
+ }
249
+ function handlePointerCancel(event) {
250
+ if (event.pointerId !== activePointerId) {
251
+ return;
252
+ }
253
+ resetDragging();
254
+ }
255
+ function handleLostCapture() {
256
+ if (activePointerId === null) {
257
+ return;
258
+ }
259
+ resetDragging();
260
+ }
261
+ const KEYBOARD_STEP = 1;
262
+ const KEYBOARD_STEP_LARGE = 10;
263
+ function handleKeydown(event) {
264
+ if (props.disabled) {
265
+ return;
266
+ }
267
+ const step = event.shiftKey ? KEYBOARD_STEP_LARGE : KEYBOARD_STEP;
268
+ const horizontal = props.direction === "horizontal";
269
+ let delta = null;
270
+ if (event.key === (horizontal ? "ArrowLeft" : "ArrowUp")) {
271
+ delta = -step;
272
+ } else if (event.key === (horizontal ? "ArrowRight" : "ArrowDown")) {
273
+ delta = step;
274
+ } else if (event.key === "Home") {
275
+ delta = bounds.value.min - position.value;
276
+ } else if (event.key === "End") {
277
+ delta = bounds.value.max - position.value;
278
+ }
279
+ if (delta === null) {
280
+ return;
281
+ }
282
+ event.preventDefault();
283
+ if (applyDelta(delta)) {
284
+ commitChange();
285
+ }
286
+ }
287
+ function isPercent(value) {
288
+ return value >= 0 && value <= PERCENT_TOTAL;
289
+ }
290
+ function warnLength(name, value) {
291
+ warn(`${name} holds ${value.length} value${value.length === 1 ? "" : "s"} but the group has 2 panels; only the first two are used.`);
292
+ }
293
+ function warn(message) {
294
+ if (import.meta.env?.DEV) {
295
+ console.warn(`[pxd] PResizable: ${message}`);
296
+ }
297
+ }
298
+ function warnSum(name, value) {
299
+ const total = roundSize(value[0] + value[1]);
300
+ if (Math.abs(total - PERCENT_TOTAL) > .01) {
301
+ warn(`${name} adds up to ${total}% instead of ${PERCENT_TOTAL}%; the panels keep the sizes they were given.`);
302
+ }
303
+ }
304
+ // The model is the caller's truth, so a value the group would rather correct is
305
+ // reported rather than rewritten: silently rewriting it would fight whatever
306
+ // writes it back.
307
+ watch(() => [
308
+ props.modelValue,
309
+ props.minSize,
310
+ props.defaultValue
311
+ ], () => {
312
+ if (!import.meta.env?.DEV) {
313
+ return;
314
+ }
315
+ const mins = toPair(props.minSize);
316
+ if (props.minSize.length !== 2) {
317
+ warnLength("min-size", props.minSize);
318
+ }
319
+ if (!isPercent(mins[0]) || !isPercent(mins[1])) {
320
+ warn(`min-size values must be between 0 and ${PERCENT_TOTAL}, got [${mins.join(", ")}].`);
321
+ } else if (mins[0] + mins[1] > PERCENT_TOTAL) {
322
+ warn(`min-size [${mins.join(", ")}] adds up to more than ${PERCENT_TOTAL}%, so no split fits and the constraint is ignored.`);
323
+ }
324
+ for (const [name, value] of [["model-value", props.modelValue], ["default-value", props.defaultValue]]) {
325
+ if (isNil(value)) {
326
+ continue;
327
+ }
328
+ if (value.length !== 2) {
329
+ warnLength(name, value);
330
+ continue;
331
+ }
332
+ warnSum(name, [value[0], value[1]]);
333
+ }
334
+ const { min, max } = bounds.value;
335
+ const leading = sizes.value[0];
336
+ if (leading < min || leading > max) {
337
+ warn(`the leading panel sits at ${leading}%, outside its ${min}-${max}% range; it keeps that size until it is dragged.`);
338
+ }
339
+ }, {
340
+ immediate: true,
341
+ flush: "post"
342
+ });
343
+ const position = computed(() => sizes.value[0]);
344
+ const ariaValueNow = computed(() => roundSize(position.value));
345
+ // A bare number is announced as "30" - no unit, and nothing about the fold.
346
+ // valuetext is the only place a separator can put either, since it has no
347
+ // aria-expanded to lean on.
348
+ const ariaValueText = computed(() => collapsed.value ? `${ariaValueNow.value}%, folded` : `${ariaValueNow.value}%`);
349
+ function panelStyle(index) {
350
+ return {
351
+ flexBasis: `${sizes.value[index]}%`,
352
+ flexGrow: 0,
353
+ flexShrink: 1
354
+ };
355
+ }
356
+ defineExpose({
357
+ getPanelSizes: () => sizes.value.slice(),
358
+ reset
165
359
  });
166
360
  </script>
167
361
 
168
362
  <template>
169
363
  <div
364
+ data-resizable
170
365
  ref="containerRef"
171
366
  :data-orientation="direction"
172
367
  class="pxd-resizable flex size-full max-w-full flex-row overflow-hidden data-[orientation=vertical]:flex-col"
173
368
  v-bind="$attrs"
174
369
  >
175
- <slot />
370
+ <div
371
+ :id="leadingId"
372
+ class="pxd-resizable-panel min-w-0 min-h-0 overflow-hidden"
373
+ :style="panelStyle(0)"
374
+ >
375
+ <slot name="leading" :size="sizes[0]" />
376
+ </div>
377
+
378
+ <!--
379
+ A *focusable* separator is a widget, and only that flavour may carry
380
+ aria-valuenow / aria-valuemin / aria-valuemax - which is why it takes a
381
+ tabindex and the key handler below, not just a pointer drag. aria-expanded
382
+ is not a separator state at any focusability: it marks control over
383
+ visibility, and folding a panel never hides it. The fold therefore rides
384
+ on aria-valuetext.
385
+ -->
386
+ <div
387
+ ref="handleRef"
388
+ role="separator"
389
+ :tabindex="disabled ? -1 : 0"
390
+ aria-label="Resize the panels"
391
+ :aria-orientation="direction"
392
+ :aria-valuenow="ariaValueNow"
393
+ :aria-valuemin="bounds.min"
394
+ :aria-valuemax="bounds.max"
395
+ :aria-valuetext="ariaValueText"
396
+ :aria-controls="`${leadingId} ${trailingId}`"
397
+ :aria-disabled="disabled || void 0"
398
+ :data-collapsed="collapsed || void 0"
399
+ :data-handler="handle"
400
+ :data-orientation="direction"
401
+ class="pxd-resizable-handle relative shrink-0 touch-none bg-border self-focus-ring select-none hover:after:bg-primary/15 active:after:bg-primary/20 aria-disabled:cursor-default motion-safe:transition-colors after:motion-safe:transition-colors"
402
+ @pointerdown.prevent="handlePointerDown"
403
+ @pointermove="handlePointerMove"
404
+ @pointerup="handlePointerUp"
405
+ @pointercancel="handlePointerCancel"
406
+ @lostpointercapture="handleLostCapture"
407
+ @keydown="handleKeydown"
408
+ @dblclick.prevent.stop="toggleCollapse"
409
+ />
410
+
411
+ <div
412
+ :id="trailingId"
413
+ class="pxd-resizable-panel min-w-0 min-h-0 overflow-hidden"
414
+ :style="panelStyle(1)"
415
+ >
416
+ <slot name="trailing" :size="sizes[1]" />
417
+ </div>
176
418
  </div>
177
419
  </template>
420
+
421
+ <style>
422
+ .pxd-resizable-handle[data-handler=true]:before{background-color:var(--color-gray-300);border-radius:.5rem;content:"";left:50%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:1}.pxd-resizable-handle[data-collapsed=true]:before{opacity:.4}.pxd-resizable-handle:after{content:"";left:50%;padding:4px;position:absolute;top:50%;transform:translate(-50%,-50%)}.pxd-resizable-handle[data-orientation=horizontal]{cursor:ew-resize;height:100%;width:1px}.pxd-resizable-handle[data-orientation=horizontal]:before{height:1.5rem;width:.375rem}.pxd-resizable-handle[data-orientation=horizontal]:after{height:100%}.pxd-resizable-handle[data-orientation=vertical]{cursor:ns-resize;height:1px;width:100%}.pxd-resizable-handle[data-orientation=vertical]:before{height:.375rem;width:1.5rem}.pxd-resizable-handle[data-orientation=vertical]:after{width:100%}
423
+ </style>
@@ -1,18 +1,25 @@
1
1
  import type { ComponentDirection } from '../../types/shared'
2
2
 
3
- export interface PanelConfig {
4
- id: string
5
- size?: number | null
6
- order: number
7
- minSize?: number
8
- }
9
-
10
- export interface HandleConfig {
11
- id: string
12
- order: number
13
- onDrag: (delta: { deltaX: number; deltaY: number }) => void
14
- }
15
-
16
3
  export interface ResizableProps {
17
4
  direction?: ComponentDirection
5
+ /**
6
+ * Per-panel floors as percentages. The group always sums to 100, so one panel's
7
+ * floor is the other panel's ceiling: `[20, 40]` means leading 20-60 and
8
+ * trailing 40-80. Adding up to more than 100 leaves no split that fits, so the
9
+ * constraint is ignored.
10
+ */
11
+ minSize?: number[]
12
+ /** Draw the grip in the middle of the handle. */
13
+ handle?: boolean
14
+ /** Stop the handle from dragging or folding. */
15
+ disabled?: boolean
16
+ /** Starting sizes when uncontrolled. Read once, on setup. */
17
+ defaultValue?: number[]
18
+ modelValue?: number[] | null
19
+ }
20
+
21
+ export interface ResizableEmits {
22
+ change: [number[]]
23
+ reset: [number[]]
24
+ 'update:modelValue': [number[]]
18
25
  }
@@ -0,0 +1,4 @@
1
+ export declare const PERCENT_TOTAL = 100;
2
+ export declare function clamp(value: number, min: number, max: number): number;
3
+ export declare function roundSize(value: number): number;
4
+ export declare function toPair(value?: number[] | null): [number, number];
@@ -0,0 +1,10 @@
1
+ export const PERCENT_TOTAL = 100;
2
+ export function clamp(value, min, max) {
3
+ return Math.min(Math.max(value, min), max);
4
+ }
5
+ export function roundSize(value) {
6
+ return Math.round(value * 100) / 100;
7
+ }
8
+ export function toPair(value) {
9
+ return [value?.[0] ?? 0, value?.[1] ?? 0];
10
+ }
@@ -0,0 +1,22 @@
1
+ import type { RevealProps } from './types';
2
+ declare var __VLS_1: {};
3
+ type __VLS_Slots = {} & {
4
+ default?: (props: typeof __VLS_1) => any;
5
+ };
6
+ declare const __VLS_base: import("vue").DefineComponent<RevealProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<RevealProps> & Readonly<{}>, {
7
+ delay: number | string;
8
+ duration: number | string;
9
+ threshold: number | number[];
10
+ direction: import("../../types/shared/props.js").BasePosition;
11
+ trigger: import("./types").RevealTrigger;
12
+ rootMargin: string;
13
+ distance: number | string;
14
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
16
+ declare const _default: typeof __VLS_export;
17
+ export default _default;
18
+ type __VLS_WithSlots<T, S> = T & {
19
+ new (): {
20
+ $slots: S;
21
+ };
22
+ };