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,279 +1,577 @@
1
1
  <script setup>
2
2
  import { arrow, autoUpdate, computePosition, flip, shift, hide } from "@floating-ui/dom";
3
- import { computed, onBeforeUnmount, shallowRef, watch } from "vue";
4
- import { useDelayDestroy } from "../../composables/use-delay-destroy";
5
- import { useFocusTrap } from "../../composables/use-focus-trap";
6
- import { useOutsideClick } from "../../composables/use-outside-click";
7
- import { useConfigProvider } from "../../contexts/config-provider";
8
- import { getCssUnitValue, toArray } from "../../utils/format";
3
+ import { computed, nextTick, onBeforeUnmount, onMounted, shallowRef, watch } from "vue";
4
+ import { useFocusTrap } from "../../composables/_internal/use-focus-trap.js";
5
+ import { useDelayDestroy } from "../../composables/use-delay-destroy.js";
6
+ import { useOutsideClick } from "../../composables/use-outside-click.js";
7
+ import { useConfigProvider } from "../../contexts/config-provider.js";
8
+ import { throttleByRaf } from "../../utils/event.js";
9
+ import { getCssUnitValue, toArray } from "../../utils/format.js";
9
10
  import PPopoverArrow from "../_internal/popover-arrow.vue";
10
11
  import POverlay from "../overlay/index.vue";
11
12
  defineOptions({
12
- name: "PPopover",
13
- inheritAttrs: false,
14
- model: {
15
- prop: "modelValue",
16
- event: "update:modelValue"
17
- }
13
+ name: "PPopover",
14
+ inheritAttrs: false,
15
+ model: {
16
+ prop: "modelValue",
17
+ event: "update:modelValue"
18
+ }
18
19
  });
19
20
  const props = defineProps({
20
- zIndex: { type: [Number, String], required: false },
21
- offset: { type: Number, required: false },
22
- trigger: { type: [String, Array], required: false, default: () => ["hover"] },
23
- disabled: { type: Boolean, required: false },
24
- adaptive: { type: Boolean, required: false },
25
- maxWidth: { type: [Number, String], required: false },
26
- position: { type: null, required: false, default: "bottom" },
27
- showDelay: { type: Number, required: false, default: 0 },
28
- hideDelay: { type: Number, required: false, default: 0 },
29
- showArrow: { type: Boolean, required: false },
30
- arrowColor: { type: String, required: false },
31
- modelValue: { type: Boolean, required: false },
32
- interactive: { type: Boolean, required: false, default: true },
33
- autoPosition: { type: Boolean, required: false, default: true },
34
- wrapperClass: { type: [String, Array, Object], required: false },
35
- contentClass: { type: [String, Array, Object], required: false },
36
- contentStyle: { type: [Object, String], required: false },
37
- toggleOnTrigger: { type: Boolean, required: false, default: true },
38
- closeOnInvisible: { type: Boolean, required: false, default: true },
39
- closeOnPressEscape: { type: Boolean, required: false, default: true },
40
- lockScrollOnVisible: { type: Boolean, required: false }
21
+ zIndex: {
22
+ type: [Number, String],
23
+ required: false
24
+ },
25
+ offset: {
26
+ type: Number,
27
+ required: false
28
+ },
29
+ trigger: {
30
+ type: [String, Array],
31
+ required: false,
32
+ default: () => ["hover"]
33
+ },
34
+ triggerSelector: {
35
+ type: String,
36
+ required: false
37
+ },
38
+ alignPoint: {
39
+ type: Boolean,
40
+ required: false
41
+ },
42
+ disabled: {
43
+ type: Boolean,
44
+ required: false
45
+ },
46
+ adaptive: {
47
+ type: Boolean,
48
+ required: false
49
+ },
50
+ maxWidth: {
51
+ type: [Number, String],
52
+ required: false
53
+ },
54
+ position: {
55
+ type: null,
56
+ required: false,
57
+ default: "bottom"
58
+ },
59
+ showDelay: {
60
+ type: Number,
61
+ required: false,
62
+ default: 0
63
+ },
64
+ hideDelay: {
65
+ type: Number,
66
+ required: false,
67
+ default: 0
68
+ },
69
+ showArrow: {
70
+ type: Boolean,
71
+ required: false
72
+ },
73
+ arrowColor: {
74
+ type: String,
75
+ required: false
76
+ },
77
+ modelValue: {
78
+ type: Boolean,
79
+ required: false
80
+ },
81
+ interactive: {
82
+ type: Boolean,
83
+ required: false,
84
+ default: true
85
+ },
86
+ autoPosition: {
87
+ type: Boolean,
88
+ required: false,
89
+ default: true
90
+ },
91
+ destroyDelay: {
92
+ type: Number,
93
+ required: false,
94
+ default: 3e3
95
+ },
96
+ wrapperClass: {
97
+ type: [
98
+ String,
99
+ Array,
100
+ Object
101
+ ],
102
+ required: false
103
+ },
104
+ contentClass: {
105
+ type: [
106
+ String,
107
+ Array,
108
+ Object
109
+ ],
110
+ required: false
111
+ },
112
+ contentStyle: {
113
+ type: [Object, String],
114
+ required: false
115
+ },
116
+ toggleOnTrigger: {
117
+ type: Boolean,
118
+ required: false,
119
+ default: true
120
+ },
121
+ autoFocusElement: {
122
+ type: [String, Boolean],
123
+ required: false,
124
+ default: false
125
+ },
126
+ fillTriggerWidth: {
127
+ type: Boolean,
128
+ required: false,
129
+ default: true
130
+ },
131
+ closeOnInvisible: {
132
+ type: Boolean,
133
+ required: false,
134
+ default: true
135
+ },
136
+ closeOnPressEscape: {
137
+ type: Boolean,
138
+ required: false,
139
+ default: true
140
+ },
141
+ lockScrollOnVisible: {
142
+ type: Boolean,
143
+ required: false
144
+ },
145
+ returnFocusOnDeactivate: {
146
+ type: Boolean,
147
+ required: false,
148
+ default: true
149
+ }
41
150
  });
42
- const emits = defineEmits(["show", "hide", "escape", "outside-click", "trigger-click", "visible-change", "update:modelValue"]);
151
+ const emits = defineEmits([
152
+ "show",
153
+ "hide",
154
+ "escape",
155
+ "outside-click",
156
+ "trigger-click",
157
+ "visible-change",
158
+ "wrapper-keydown",
159
+ "update:modelValue"
160
+ ]);
43
161
  let showPopoverTimer;
44
162
  let hidePopoverTimer;
163
+ let triggerElementsCache = null;
45
164
  let cleanupAutoUpdate = null;
46
165
  const arrowRef = shallowRef(null);
47
166
  const triggerRef = shallowRef(null);
48
167
  const wrapperRef = shallowRef(null);
168
+ const activeTriggerRef = shallowRef(null);
169
+ const activeTriggerIndex = shallowRef(-1);
170
+ const hasMultipleTriggers = shallowRef(false);
171
+ const pointerPosition = shallowRef(null);
49
172
  const localPosition = shallowRef(props.position);
173
+ const pointReference = { getBoundingClientRect() {
174
+ const { x = 0, y = 0 } = pointerPosition.value ?? {};
175
+ return {
176
+ x,
177
+ y,
178
+ top: y,
179
+ left: x,
180
+ right: x,
181
+ bottom: y,
182
+ width: 0,
183
+ height: 0,
184
+ toJSON: () => ({})
185
+ };
186
+ } };
50
187
  const triggerMethods = computed(() => toArray(props.trigger));
51
188
  const transitionType = computed(() => props.adaptive ? "fade-slide" : "fade-scale");
189
+ const popoverMaxWidth = computed(() => getCssUnitValue(props.maxWidth));
52
190
  const wrapperStyle = computed(() => ({
53
- "--popover-index": props.zIndex,
54
- "--popover-offset": props.offset,
55
- "--popover-arrow-color": props.arrowColor,
56
- "--popover-max-width": getCssUnitValue(props.maxWidth)
191
+ "--popover-index": props.zIndex,
192
+ "--popover-offset": props.offset,
193
+ "--popover-arrow-color": props.arrowColor,
194
+ "--popover-max-width": popoverMaxWidth.value
57
195
  }));
58
196
  const configProvider = useConfigProvider();
59
197
  const allowOutsideClick = computed(() => !triggerMethods.value.includes("manual"));
60
198
  const focusTrapContainer = computed(() => isVisible.value ? wrapperRef.value : null);
199
+ const triggerPointerMoveFn = computed(() => props.alignPoint ? onTriggerPointerMove : undefined);
61
200
  const computePositionMiddleware = computed(() => {
62
- return [
63
- shift(),
64
- props.autoPosition && flip(),
65
- props.showArrow && arrow({ element: arrowRef.value }),
66
- props.closeOnInvisible && hide({ strategy: "referenceHidden" }),
67
- props.closeOnInvisible && hide({ strategy: "escaped" })
68
- ];
201
+ return [
202
+ shift(),
203
+ props.autoPosition && flip(),
204
+ props.showArrow && arrow({ element: arrowRef.value }),
205
+ props.closeOnInvisible && hide({ strategy: "escaped" }),
206
+ props.closeOnInvisible && hide({ strategy: "referenceHidden" })
207
+ ];
69
208
  });
70
- const {
71
- render: isRender,
72
- visible: isVisible,
73
- show: showPopover,
74
- hide: hidePopover
75
- } = useDelayDestroy(props.modelValue, {
76
- delay: 2e3,
77
- visibleChange(v) {
78
- if (!allowOutsideClick.value) {
79
- return;
80
- }
81
- emits("visible-change", v);
82
- if (v) {
83
- emits("show");
84
- emits("update:modelValue", true);
85
- } else {
86
- emits("hide");
87
- emits("update:modelValue", false);
88
- }
89
- }
209
+ const { render: isRender, visible: isVisible, show: showPopover, hide: hidePopover } = useDelayDestroy(props.modelValue, {
210
+ delay: () => props.destroyDelay,
211
+ visibleChange(v) {
212
+ if (!allowOutsideClick.value) {
213
+ return;
214
+ }
215
+ emits("visible-change", v);
216
+ if (v) {
217
+ emits("show");
218
+ emits("update:modelValue", true);
219
+ } else {
220
+ emits("hide");
221
+ emits("update:modelValue", false);
222
+ }
223
+ }
90
224
  });
91
- useFocusTrap(focusTrapContainer);
225
+ useFocusTrap(focusTrapContainer, () => ({
226
+ autoFocusElement: props.autoFocusElement,
227
+ returnFocusOnDeactivate: props.returnFocusOnDeactivate
228
+ }));
92
229
  useOutsideClick(wrapperRef, {
93
- allowList: [triggerRef, wrapperRef],
94
- isEnabled: () => {
95
- return isVisible.value && allowOutsideClick.value;
96
- },
97
- onTrigger: (ev) => {
98
- emits("outside-click", ev);
99
- if (allowOutsideClick.value) {
100
- handlePopoverHide();
101
- }
102
- }
230
+ allowList: [triggerRef, wrapperRef],
231
+ enabled: () => {
232
+ return isVisible.value && allowOutsideClick.value;
233
+ },
234
+ onTrigger: (ev) => {
235
+ emits("outside-click", ev);
236
+ if (allowOutsideClick.value) {
237
+ handlePopoverHide();
238
+ }
239
+ }
103
240
  });
241
+ function clearShowTimer() {
242
+ if (showPopoverTimer) {
243
+ clearTimeout(showPopoverTimer);
244
+ showPopoverTimer = null;
245
+ }
246
+ }
247
+ function clearHideTimer() {
248
+ if (hidePopoverTimer) {
249
+ clearTimeout(hidePopoverTimer);
250
+ hidePopoverTimer = null;
251
+ }
252
+ }
253
+ function getTriggerElements() {
254
+ if (!props.triggerSelector) {
255
+ return [];
256
+ }
257
+ if (!triggerElementsCache) {
258
+ triggerElementsCache = Array.from(triggerRef.value.querySelectorAll(props.triggerSelector));
259
+ hasMultipleTriggers.value = triggerElementsCache.length > 0;
260
+ }
261
+ return triggerElementsCache;
262
+ }
263
+ function clearTriggerElementsCache() {
264
+ triggerElementsCache = null;
265
+ hasMultipleTriggers.value = false;
266
+ }
267
+ function resolveTriggerElement(target) {
268
+ if (!props.triggerSelector) {
269
+ return triggerRef.value;
270
+ }
271
+ if (!(target instanceof Element)) {
272
+ return null;
273
+ }
274
+ const matched = target.closest(props.triggerSelector);
275
+ if (!matched || !triggerRef.value.contains(matched)) {
276
+ return null;
277
+ }
278
+ return matched;
279
+ }
280
+ function setActiveTrigger(trigger) {
281
+ activeTriggerRef.value = trigger;
282
+ if (!props.triggerSelector) {
283
+ activeTriggerIndex.value = 0;
284
+ return;
285
+ }
286
+ activeTriggerIndex.value = trigger ? getTriggerElements().indexOf(trigger) : -1;
287
+ }
288
+ function ensureActiveTrigger() {
289
+ if (!props.triggerSelector) {
290
+ if (!activeTriggerRef.value) {
291
+ setActiveTrigger(triggerRef.value);
292
+ }
293
+ return;
294
+ }
295
+ if (!activeTriggerRef.value || !triggerRef.value.contains(activeTriggerRef.value)) {
296
+ setActiveTrigger(getTriggerElements()[0] ?? null);
297
+ }
298
+ }
299
+ function getReferenceElement() {
300
+ if (props.alignPoint && pointerPosition.value) {
301
+ return pointReference;
302
+ }
303
+ ensureActiveTrigger();
304
+ return activeTriggerRef.value || triggerRef.value;
305
+ }
306
+ function startAutoUpdate() {
307
+ if (!props.autoPosition || !wrapperRef.value) {
308
+ return;
309
+ }
310
+ cleanupAutoUpdate = autoUpdate(getReferenceElement(), wrapperRef.value, updatePosition);
311
+ }
312
+ async function syncPosition(waitForDom = false) {
313
+ disposeAutoUpdate();
314
+ if (waitForDom) {
315
+ await nextTick();
316
+ }
317
+ await updatePosition();
318
+ startAutoUpdate();
319
+ }
320
+ async function updateActiveTrigger(trigger) {
321
+ if (!trigger) {
322
+ return;
323
+ }
324
+ clearHideTimer();
325
+ if (trigger === activeTriggerRef.value) {
326
+ return;
327
+ }
328
+ setActiveTrigger(trigger);
329
+ if (isVisible.value) {
330
+ await syncPosition(true);
331
+ }
332
+ }
104
333
  function disposeAutoUpdate() {
105
- if (cleanupAutoUpdate) {
106
- cleanupAutoUpdate();
107
- cleanupAutoUpdate = null;
108
- }
334
+ if (cleanupAutoUpdate) {
335
+ cleanupAutoUpdate();
336
+ cleanupAutoUpdate = null;
337
+ }
338
+ throttledUpdatePosition.cancel();
339
+ }
340
+ function updatePopoverMinWidth() {
341
+ if (!wrapperRef.value || props.alignPoint) {
342
+ return;
343
+ }
344
+ if (!props.fillTriggerWidth) {
345
+ wrapperRef.value.style.minWidth = "";
346
+ return;
347
+ }
348
+ const trigger = activeTriggerRef.value || triggerRef.value;
349
+ const triggerWidth = trigger.getBoundingClientRect().width;
350
+ const maxWidth = popoverMaxWidth.value;
351
+ wrapperRef.value.style.minWidth = maxWidth ? `min(${triggerWidth}px, ${maxWidth})` : `${triggerWidth}px`;
109
352
  }
110
353
  async function updatePosition() {
111
- const { x, y, placement, middlewareData } = await computePosition(
112
- triggerRef.value,
113
- wrapperRef.value,
114
- {
115
- placement: props.position,
116
- middleware: computePositionMiddleware.value
117
- }
118
- );
119
- localPosition.value = placement;
120
- if (middlewareData.hide?.referenceHidden || middlewareData.hide?.escaped) {
121
- handlePopoverHide(true);
122
- return;
123
- }
124
- const wrapperPositionStyle = {
125
- left: props.adaptive ? "0" : `${x}px`,
126
- top: props.adaptive ? "0" : `${y}px`
127
- };
128
- Object.assign(wrapperRef.value.style, wrapperPositionStyle);
129
- if (middlewareData.arrow) {
130
- const { x: arrowX, y: arrowY } = middlewareData.arrow;
131
- Object.assign(arrowRef.value.style, {
132
- left: arrowX != null ? `${Math.max(arrowX, 5)}px` : "",
133
- top: arrowY != null ? `${Math.max(arrowY, 5)}px` : ""
134
- });
135
- }
354
+ if (!wrapperRef.value) {
355
+ return;
356
+ }
357
+ const referenceElement = getReferenceElement();
358
+ updatePopoverMinWidth();
359
+ const { x, y, placement, middlewareData } = await computePosition(referenceElement, wrapperRef.value, {
360
+ placement: props.position,
361
+ middleware: computePositionMiddleware.value
362
+ });
363
+ localPosition.value = placement;
364
+ if (middlewareData.hide?.referenceHidden || middlewareData.hide?.escaped) {
365
+ handlePopoverHide(true);
366
+ return;
367
+ }
368
+ const wrapperPositionStyle = {
369
+ left: props.adaptive ? "0" : `${x}px`,
370
+ top: props.adaptive ? "0" : `${y}px`
371
+ };
372
+ Object.assign(wrapperRef.value.style, wrapperPositionStyle);
373
+ if (middlewareData.arrow) {
374
+ const { x: arrowX, y: arrowY } = middlewareData.arrow;
375
+ Object.assign(arrowRef.value.style, {
376
+ left: arrowX != null ? `${Math.max(Math.ceil(arrowX), 5)}px` : "",
377
+ top: arrowY != null ? `${Math.max(Math.ceil(arrowY), 5)}px` : ""
378
+ });
379
+ }
136
380
  }
381
+ const throttledUpdatePosition = throttleByRaf(updatePosition);
137
382
  async function handlePopoverShow() {
138
- if (showPopoverTimer || props.disabled) {
139
- return;
140
- }
141
- await new Promise((resolve) => {
142
- if (hidePopoverTimer) {
143
- clearTimeout(hidePopoverTimer);
144
- hidePopoverTimer = null;
145
- }
146
- showPopoverTimer = setTimeout(() => {
147
- showPopoverTimer = null;
148
- resolve();
149
- }, props.showDelay);
150
- });
151
- await showPopover();
152
- disposeAutoUpdate();
153
- if (props.autoPosition) {
154
- cleanupAutoUpdate = autoUpdate(triggerRef.value, wrapperRef.value, updatePosition);
155
- } else {
156
- await updatePosition();
157
- }
383
+ if (showPopoverTimer || props.disabled) {
384
+ return;
385
+ }
386
+ await new Promise((resolve) => {
387
+ clearHideTimer();
388
+ showPopoverTimer = setTimeout(() => {
389
+ showPopoverTimer = null;
390
+ resolve();
391
+ }, props.showDelay);
392
+ });
393
+ // Render first, then position the wrapper while it is still invisible
394
+ // (transitions are disabled via CSS when data-visible is false), so the
395
+ // enter animation always starts from the correct position.
396
+ const visiblePromise = showPopover();
397
+ await syncPosition(true);
398
+ await visiblePromise;
399
+ }
400
+ function handlePopoverEscape(ev) {
401
+ emits("escape", ev);
402
+ handlePopoverHide();
158
403
  }
159
404
  async function handlePopoverHide(immediate = false) {
160
- if (hidePopoverTimer) {
161
- if (!immediate) {
162
- return;
163
- }
164
- clearTimeout(hidePopoverTimer);
165
- hidePopoverTimer = null;
166
- }
167
- await new Promise((resolve) => {
168
- if (showPopoverTimer) {
169
- clearTimeout(showPopoverTimer);
170
- showPopoverTimer = null;
171
- }
172
- hidePopoverTimer = setTimeout(
173
- () => {
174
- hidePopoverTimer = null;
175
- resolve();
176
- },
177
- immediate ? 0 : props.hideDelay
178
- );
179
- });
180
- disposeAutoUpdate();
181
- hidePopover();
405
+ if (hidePopoverTimer) {
406
+ if (!immediate) {
407
+ return;
408
+ }
409
+ clearHideTimer();
410
+ }
411
+ await new Promise((resolve) => {
412
+ clearShowTimer();
413
+ hidePopoverTimer = setTimeout(() => {
414
+ hidePopoverTimer = null;
415
+ resolve();
416
+ }, immediate ? 0 : props.hideDelay);
417
+ });
418
+ clearTriggerElementsCache();
419
+ disposeAutoUpdate();
420
+ hidePopover();
421
+ }
422
+ function activateTrigger(trigger, toggleSameTrigger = true) {
423
+ const isSameTrigger = trigger === activeTriggerRef.value || !props.triggerSelector;
424
+ if (isVisible.value && isSameTrigger && toggleSameTrigger) {
425
+ handlePopoverHide();
426
+ return;
427
+ }
428
+ if (isVisible.value) {
429
+ updateActiveTrigger(trigger);
430
+ return;
431
+ }
432
+ setActiveTrigger(trigger);
433
+ handlePopoverShow();
434
+ }
435
+ function updatePointerPosition(ev) {
436
+ pointerPosition.value = {
437
+ x: ev.clientX,
438
+ y: ev.clientY
439
+ };
182
440
  }
183
441
  function onTriggerClick(ev) {
184
- if (props.disabled) {
185
- return;
186
- }
187
- emits("trigger-click", ev);
188
- if (!triggerMethods.value.includes("click")) {
189
- return;
190
- }
191
- if (isVisible.value && props.toggleOnTrigger) {
192
- handlePopoverHide();
193
- return;
194
- }
195
- handlePopoverShow();
442
+ if (props.disabled) {
443
+ return;
444
+ }
445
+ const trigger = resolveTriggerElement(ev.target);
446
+ if (!trigger) {
447
+ return;
448
+ }
449
+ emits("trigger-click", ev);
450
+ if (triggerMethods.value.includes("click")) {
451
+ if (triggerMethods.value.includes("hover") && isVisible.value) {
452
+ return;
453
+ }
454
+ if (props.alignPoint && !isVisible.value) {
455
+ updatePointerPosition(ev);
456
+ }
457
+ activateTrigger(trigger, props.toggleOnTrigger);
458
+ } else if (props.alignPoint && isVisible.value && triggerMethods.value.includes("contextmenu") && !triggerMethods.value.includes("hover")) {
459
+ handlePopoverHide();
460
+ }
461
+ }
462
+ function onTriggerPointerOver(ev) {
463
+ if (props.disabled || !triggerMethods.value.includes("hover")) {
464
+ return;
465
+ }
466
+ const trigger = resolveTriggerElement(ev.target);
467
+ if (trigger) {
468
+ if (props.alignPoint) {
469
+ updatePointerPosition(ev);
470
+ }
471
+ activateTrigger(trigger, false);
472
+ }
196
473
  }
197
- function onTriggerPointerEnter() {
198
- if (props.disabled || !triggerMethods.value.includes("hover")) {
199
- return;
200
- }
201
- handlePopoverShow();
474
+ function onTriggerPointerMove(ev) {
475
+ if (props.disabled || !triggerMethods.value.includes("hover")) {
476
+ return;
477
+ }
478
+ if (!props.alignPoint) {
479
+ return;
480
+ }
481
+ updatePointerPosition(ev);
482
+ if (isVisible.value) {
483
+ updatePosition();
484
+ }
202
485
  }
203
486
  function onTriggerPointerLeave() {
204
- if (props.disabled || !triggerMethods.value.includes("hover")) {
205
- return;
206
- }
207
- handlePopoverHide();
487
+ if (props.disabled || !triggerMethods.value.includes("hover")) {
488
+ return;
489
+ }
490
+ handlePopoverHide();
208
491
  }
209
- function onTriggerContextmenu() {
210
- if (props.disabled || !triggerMethods.value.includes("contextmenu")) {
211
- return;
212
- }
213
- if (isVisible.value) {
214
- handlePopoverHide();
215
- return;
216
- }
217
- handlePopoverShow();
492
+ function onTriggerContextmenu(ev) {
493
+ if (props.disabled || !triggerMethods.value.includes("contextmenu")) {
494
+ return;
495
+ }
496
+ const trigger = resolveTriggerElement(ev.target);
497
+ if (!trigger) {
498
+ return;
499
+ }
500
+ ev.preventDefault();
501
+ if (props.alignPoint) {
502
+ setActiveTrigger(trigger);
503
+ updatePointerPosition(ev);
504
+ if (isVisible.value) {
505
+ throttledUpdatePosition();
506
+ } else {
507
+ handlePopoverShow();
508
+ }
509
+ return;
510
+ }
511
+ activateTrigger(trigger);
218
512
  }
219
- const PREVENT_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "Home", "End"]);
220
513
  function onWrapperKeydown(ev) {
221
- if (props.disabled || !isVisible.value) {
222
- return;
223
- }
224
- const { key } = ev;
225
- if (PREVENT_KEYS.has(key)) {
226
- ev.preventDefault();
227
- }
514
+ if (props.disabled || !isVisible.value) {
515
+ return;
516
+ }
517
+ emits("wrapper-keydown", ev);
228
518
  }
229
519
  function onWrapperPointerEnter() {
230
- if (props.disabled) {
231
- return;
232
- }
233
- if (!props.interactive || !isVisible.value) {
234
- return;
235
- }
236
- handlePopoverShow();
520
+ if (props.disabled) {
521
+ return;
522
+ }
523
+ if (!props.interactive || !isVisible.value) {
524
+ return;
525
+ }
526
+ handlePopoverShow();
237
527
  }
238
528
  function onWrapperPointerLeave() {
239
- if (props.disabled) {
240
- return;
241
- }
242
- if (props.interactive && !triggerMethods.value.includes("hover")) {
243
- return;
244
- }
245
- handlePopoverHide();
529
+ if (props.disabled) {
530
+ return;
531
+ }
532
+ if (!triggerMethods.value.includes("hover")) {
533
+ return;
534
+ }
535
+ handlePopoverHide();
246
536
  }
247
- watch(
248
- () => props.modelValue,
249
- (visible) => {
250
- if (visible) {
251
- handlePopoverShow();
252
- } else {
253
- handlePopoverHide(true);
254
- }
255
- }
256
- );
537
+ watch(() => props.modelValue, (visible) => {
538
+ if (visible) {
539
+ handlePopoverShow();
540
+ } else {
541
+ handlePopoverHide(true);
542
+ }
543
+ });
544
+ onMounted(() => {
545
+ if (props.modelValue) {
546
+ handlePopoverShow();
547
+ }
548
+ });
257
549
  onBeforeUnmount(() => {
258
- disposeAutoUpdate();
550
+ clearShowTimer();
551
+ clearHideTimer();
552
+ disposeAutoUpdate();
553
+ clearTriggerElementsCache();
259
554
  });
260
555
  defineExpose({
261
- show: handlePopoverShow,
262
- hide: handlePopoverHide
556
+ show: handlePopoverShow,
557
+ hide: handlePopoverHide,
558
+ update: throttledUpdatePosition
263
559
  });
264
560
  </script>
265
561
 
266
562
  <template>
267
563
  <div
564
+ data-popover
268
565
  ref="triggerRef"
269
- class="pxd-popover inline-flex max-w-full active:select-none data-[disabled=true]:pointer-events-none data-[visible=true]:pointer-events-auto"
566
+ class="pxd-popover inline-flex max-w-full touch-manipulation active:select-none data-[disabled=true]:pointer-events-none data-[visible=true]:pointer-events-auto"
270
567
  :data-visible="isVisible"
271
568
  :data-disabled="disabled"
272
569
  v-bind="$attrs"
273
570
  @click="onTriggerClick"
274
- @pointerenter="onTriggerPointerEnter"
571
+ @contextmenu="onTriggerContextmenu"
572
+ @pointerover="onTriggerPointerOver"
573
+ @pointermove="triggerPointerMoveFn"
275
574
  @pointerleave="onTriggerPointerLeave"
276
- @contextmenu.prevent="onTriggerContextmenu"
277
575
  >
278
576
  <slot />
279
577
 
@@ -281,8 +579,8 @@ defineExpose({
281
579
  :model-value="isVisible"
282
580
  :show-overlay="adaptive"
283
581
  :close-on-press-escape="closeOnPressEscape"
284
- :lock-scroll-on-visible="adaptive"
285
- @escape="handlePopoverHide()"
582
+ :lock-scroll-on-visible="lockScrollOnVisible"
583
+ @escape="handlePopoverEscape"
286
584
  >
287
585
  <div
288
586
  v-if="isRender"
@@ -292,30 +590,36 @@ defineExpose({
292
590
  :data-adaptive="adaptive"
293
591
  :data-position="localPosition"
294
592
  :data-interactive="interactive"
593
+ :data-multiple-triggers="hasMultipleTriggers"
295
594
  :class="wrapperClass"
296
595
  :style="wrapperStyle"
297
- class="pxd-popover--wrapper sm:max-w-(--popover-max-width) absolute -top-full -left-full isolate z-(--popover-index) flex max-h-full max-w-full outline-none data-[interactive=false]:pointer-events-none data-[visible=false]:pointer-events-none motion-reduce:data-[visible=false]:hidden"
596
+ class="pxd-popover--wrapper sm:max-w-(--popover-max-width) absolute -top-full -left-full isolate z-(--popover-index) flex max-h-full max-w-full will-change-transform outline-none data-[interactive=false]:pointer-events-none data-[multiple-triggers=true]:transition-[left,top] data-[visible=false]:pointer-events-none data-[visible=false]:transition-none! motion-reduce:data-[visible=false]:hidden"
298
597
  @keydown="onWrapperKeydown"
299
598
  @pointerenter="onWrapperPointerEnter"
300
599
  @pointerleave="onWrapperPointerLeave"
301
600
  >
302
601
  <div
303
- class="pxd-popover--container relative z-1 w-inherit default-transition-duration default-transition-timing-function"
602
+ class="pxd-popover--container pointer-events-none relative z-1 min-h-inherit w-full default-transition-duration default-transition-timing-function"
304
603
  :data-transition-type="transitionType"
305
- :data-show-transition="configProvider.popoverShowTransition"
604
+ :data-enter-motion="configProvider.enterMotion"
605
+ :data-leave-motion="configProvider.leaveMotion"
306
606
  >
307
607
  <div
308
608
  class="pxd-popover--content h-full max-h-inherit overflow-auto"
309
609
  :class="contentClass"
310
610
  :style="contentStyle"
311
611
  >
312
- <slot name="content" />
612
+ <slot
613
+ name="content"
614
+ :active-trigger="activeTriggerRef"
615
+ :active-trigger-index="activeTriggerIndex"
616
+ />
313
617
  </div>
314
618
 
315
619
  <div
316
620
  v-if="showArrow"
317
621
  ref="arrowRef"
318
- class="pxd-popover--arrow pointer-events-none absolute z-1"
622
+ class="pxd-popover--arrow pointer-events-none absolute z-1 will-change-[left,top]"
319
623
  >
320
624
  <PPopoverArrow
321
625
  fill="var(--popover-arrow-color,transparent)"
@@ -329,127 +633,6 @@ defineExpose({
329
633
  </div>
330
634
  </template>
331
635
 
332
- <style lang="postcss">
333
- .pxd-popover--wrapper {
334
- --popover-padding: calc(var(--popover-offset, 8) * 1px);
335
-
336
- .pxd-popover--content.border + .pxd-popover--arrow {
337
- --popover-arrow-border: var(--color-gray-300);
338
- }
339
-
340
- &[data-position^='top'] {
341
- &[data-adaptive='false'] {
342
- padding-bottom: var(--popover-padding);
343
- }
344
-
345
- .pxd-popover--arrow {
346
- bottom: -6px;
347
- }
348
- }
349
-
350
- &[data-position^='bottom'] {
351
- &[data-adaptive='false'] {
352
- padding-top: var(--popover-padding);
353
- }
354
-
355
- .pxd-popover--arrow {
356
- top: -6px;
357
- }
358
- }
359
-
360
- &[data-position^='left'] {
361
- &[data-adaptive='false'] {
362
- padding-right: var(--popover-padding);
363
- }
364
-
365
- .pxd-popover--arrow {
366
- right: -6px;
367
- }
368
- }
369
-
370
- &[data-position^='right'] {
371
- &[data-adaptive='false'] {
372
- padding-left: var(--popover-padding);
373
- }
374
-
375
- .pxd-popover--arrow {
376
- left: -6px;
377
- }
378
- }
379
- }
380
-
381
- .pxd-popover--container {
382
- transition-property: opacity, transform;
383
- max-height: min(800px, 80vh);
384
- max-height: min(800px, 80dvh);
385
- pointer-events: none;
386
-
387
- [data-visible='true'] & {
388
- opacity: 1;
389
- pointer-events: auto;
390
- }
391
-
392
- [data-visible='true'] &[data-show-transition='false'] {
393
- transition-duration: 0s !important;
394
- }
395
-
396
- [data-visible='false'] &[data-transition-type='fade-scale'] {
397
- opacity: 0;
398
- transform: scale(var(--popover-scale));
399
- transition-duration: var(--faster-transition-duration);
400
- }
401
-
402
- [data-visible='false'] &[data-transition-type='fade-slide'] {
403
- transform: translateY(100%);
404
- transition-duration: var(--faster-transition-duration);
405
- }
406
-
407
- [data-position='top'] & {
408
- transform-origin: center bottom;
409
- }
410
-
411
- [data-position='top-start'] & {
412
- transform-origin: left bottom;
413
- }
414
-
415
- [data-position='top-end'] & {
416
- transform-origin: right bottom;
417
- }
418
-
419
- [data-position='bottom'] & {
420
- transform-origin: center top;
421
- }
422
-
423
- [data-position='bottom-start'] & {
424
- transform-origin: left top;
425
- }
426
-
427
- [data-position='bottom-end'] & {
428
- transform-origin: right top;
429
- }
430
-
431
- [data-position='left'] & {
432
- transform-origin: right center;
433
- }
434
-
435
- [data-position='left-start'] & {
436
- transform-origin: right top;
437
- }
438
-
439
- [data-position='left-end'] & {
440
- transform-origin: right bottom;
441
- }
442
-
443
- [data-position='right'] & {
444
- transform-origin: left center;
445
- }
446
-
447
- [data-position='right-start'] & {
448
- transform-origin: left top;
449
- }
450
-
451
- [data-position='right-end'] & {
452
- transform-origin: left bottom;
453
- }
454
- }
636
+ <style>
637
+ .pxd-popover--wrapper{--popover-padding:calc(var(--popover-offset, 8)*1px)}.pxd-popover--wrapper .pxd-popover--content.variant-invert+.pxd-popover--arrow{--popover-arrow-border:var(--color-gray-300)}.pxd-popover--wrapper[data-position^=top][data-adaptive=false]{padding-bottom:var(--popover-padding)}.pxd-popover--wrapper[data-position^=top] .pxd-popover--arrow{bottom:-6px}.pxd-popover--wrapper[data-position^=bottom][data-adaptive=false]{padding-top:var(--popover-padding)}.pxd-popover--wrapper[data-position^=bottom] .pxd-popover--arrow{top:-6px}.pxd-popover--wrapper[data-position^=left][data-adaptive=false]{padding-right:var(--popover-padding)}.pxd-popover--wrapper[data-position^=left] .pxd-popover--arrow{right:-6px}.pxd-popover--wrapper[data-position^=right][data-adaptive=false]{padding-left:var(--popover-padding)}.pxd-popover--wrapper[data-position^=right] .pxd-popover--arrow{left:-6px}.pxd-popover--container{max-height:min(800px,80vh);max-height:min(800px,80dvh);transition-property:opacity,transform}[data-visible=true] .pxd-popover--container{opacity:1;pointer-events:auto}[data-visible=false] .pxd-popover--container[data-transition-type=fade-scale]{opacity:0;transform:scale(var(--popover-scale));transition-duration:var(--faster-transition-duration)}[data-visible=false] .pxd-popover--container[data-transition-type=fade-slide]{transform:translateY(100%);transition-duration:var(--faster-transition-duration)}[data-position=top] .pxd-popover--container{transform-origin:center bottom}[data-position=top-start] .pxd-popover--container{transform-origin:left bottom}[data-position=top-end] .pxd-popover--container{transform-origin:right bottom}[data-position=bottom] .pxd-popover--container{transform-origin:center top}[data-position=bottom-start] .pxd-popover--container{transform-origin:left top}[data-position=bottom-end] .pxd-popover--container{transform-origin:right top}[data-position=left] .pxd-popover--container{transform-origin:right center}[data-position=left-start] .pxd-popover--container{transform-origin:right top}[data-position=left-end] .pxd-popover--container{transform-origin:right bottom}[data-position=right] .pxd-popover--container{transform-origin:left center}[data-position=right-start] .pxd-popover--container{transform-origin:left top}[data-position=right-end] .pxd-popover--container{transform-origin:left bottom}
455
638
  </style>