pxd 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/dist/components/_internal/calendar-day.vue +19 -19
  2. package/dist/components/_internal/dismiss-container.d.vue.ts +1 -1
  3. package/dist/components/_internal/dismiss-container.vue +19 -19
  4. package/dist/components/_internal/loading-mask.vue +9 -1
  5. package/dist/components/_internal/mention-editor.d.vue.ts +1 -1
  6. package/dist/components/_internal/mention-editor.vue +1 -1
  7. package/dist/components/_internal/popover-arrow.d.vue.ts +1 -1
  8. package/dist/components/_internal/popover-arrow.vue +1 -1
  9. package/dist/components/{steps → _internal}/step-item.d.vue.ts +1 -1
  10. package/dist/components/{steps → _internal}/step-item.vue +1 -1
  11. package/dist/components/_internal/tree-node.d.vue.ts +20 -20
  12. package/dist/components/_internal/tree-node.vue +53 -45
  13. package/dist/components/active-graph/index.d.vue.ts +2 -2
  14. package/dist/components/approval-card/index.d.vue.ts +1 -1
  15. package/dist/components/approval-card/index.vue +34 -17
  16. package/dist/components/approval-card/types.d.ts +1 -1
  17. package/dist/components/avatar/index.d.vue.ts +2 -2
  18. package/dist/components/avatar/index.vue +1 -1
  19. package/dist/components/backtop/index.d.vue.ts +3 -3
  20. package/dist/components/backtop/index.vue +17 -17
  21. package/dist/components/backtop/types.d.ts +1 -1
  22. package/dist/components/badge/index.d.vue.ts +3 -3
  23. package/dist/components/badge/index.vue +43 -43
  24. package/dist/components/badge/types.d.ts +1 -1
  25. package/dist/components/book/types.d.ts +1 -1
  26. package/dist/components/border-beam/index.vue +1 -1
  27. package/dist/components/border-beam/types.d.ts +1 -1
  28. package/dist/components/bubble/index.vue +1 -1
  29. package/dist/components/bubble-group/index.d.vue.ts +4 -4
  30. package/dist/components/button/index.d.vue.ts +5 -5
  31. package/dist/components/button/index.vue +13 -13
  32. package/dist/components/button/types.d.ts +1 -1
  33. package/dist/components/button-group/types.d.ts +1 -1
  34. package/dist/components/calendar/index.d.vue.ts +2 -2
  35. package/dist/components/calendar/index.vue +5 -5
  36. package/dist/components/calendar/types.d.ts +1 -1
  37. package/dist/components/card/types.d.ts +1 -1
  38. package/dist/components/carousel/index.d.vue.ts +7 -7
  39. package/dist/components/carousel/index.vue +1 -1
  40. package/dist/components/carousel/types.d.ts +1 -1
  41. package/dist/components/checkbox/index.vue +1 -1
  42. package/dist/components/checkbox/types.d.ts +1 -1
  43. package/dist/components/checkbox-group/index.d.vue.ts +2 -2
  44. package/dist/components/checkbox-group/types.d.ts +1 -1
  45. package/dist/components/chip/index.d.vue.ts +1 -1
  46. package/dist/components/chip/types.d.ts +1 -1
  47. package/dist/components/choicebox/index.d.vue.ts +3 -3
  48. package/dist/components/choicebox/types.d.ts +1 -1
  49. package/dist/components/choicebox-item/index.vue +8 -8
  50. package/dist/components/choicebox-item/types.d.ts +1 -1
  51. package/dist/components/collapse/index.vue +2 -2
  52. package/dist/components/collapse-group/index.vue +1 -1
  53. package/dist/components/collapse-group/types.d.ts +1 -1
  54. package/dist/components/command-menu/index.d.vue.ts +5 -5
  55. package/dist/components/command-menu/index.vue +10 -3
  56. package/dist/components/config-provider/index.d.vue.ts +40 -5
  57. package/dist/components/config-provider/types.d.ts +2 -1
  58. package/dist/components/confirm-popover/index.d.vue.ts +39 -0
  59. package/dist/components/confirm-popover/index.vue +177 -0
  60. package/dist/components/confirm-popover/types.d.ts +23 -0
  61. package/dist/components/copy-button/index.d.vue.ts +2 -6
  62. package/dist/components/copy-button/index.vue +4 -6
  63. package/dist/components/dash-line/index.d.vue.ts +1 -1
  64. package/dist/components/dash-line/index.vue +8 -8
  65. package/dist/components/dash-line/types.d.ts +1 -1
  66. package/dist/components/date-picker/index.d.vue.ts +1 -1
  67. package/dist/components/date-picker/index.vue +3 -3
  68. package/dist/components/date-picker/types.d.ts +1 -1
  69. package/dist/components/drawer/index.d.vue.ts +7 -7
  70. package/dist/components/drawer/index.vue +30 -15
  71. package/dist/components/drawer/types.d.ts +2 -2
  72. package/dist/components/effort-slider/index.vue +12 -18
  73. package/dist/components/effort-slider/types.d.ts +1 -1
  74. package/dist/components/ellipsis-text/index.d.vue.ts +2 -2
  75. package/dist/components/ellipsis-text/index.vue +75 -75
  76. package/dist/components/error/types.d.ts +1 -1
  77. package/dist/components/fader/index.vue +2 -2
  78. package/dist/components/fader/types.d.ts +1 -1
  79. package/dist/components/gauge/index.vue +2 -2
  80. package/dist/components/gauge/types.d.ts +1 -1
  81. package/dist/components/grid/types.d.ts +1 -1
  82. package/dist/components/grid-item/types.d.ts +1 -1
  83. package/dist/components/hint/index.d.vue.ts +32 -0
  84. package/dist/components/hint/index.vue +239 -0
  85. package/dist/components/hint/types.d.ts +17 -0
  86. package/dist/components/hold-button/index.d.vue.ts +4 -4
  87. package/dist/components/hold-button/index.vue +10 -10
  88. package/dist/components/index.d.ts +4 -0
  89. package/dist/components/index.js +4 -0
  90. package/dist/components/input/index.d.vue.ts +1 -1
  91. package/dist/components/input/index.vue +14 -7
  92. package/dist/components/input/types.d.ts +1 -1
  93. package/dist/components/intersection-observer/index.vue +3 -3
  94. package/dist/components/kbd/index.vue +2 -2
  95. package/dist/components/kbd/types.d.ts +1 -1
  96. package/dist/components/link-button/index.d.vue.ts +5 -5
  97. package/dist/components/list/index.d.vue.ts +4 -4
  98. package/dist/components/list/index.vue +126 -47
  99. package/dist/components/list/types.d.ts +1 -1
  100. package/dist/components/list-group/types.d.ts +1 -1
  101. package/dist/components/list-item/index.d.vue.ts +2 -2
  102. package/dist/components/list-item/index.vue +26 -8
  103. package/dist/components/loading-bar/index.vue +5 -5
  104. package/dist/components/marching-ants/index.d.vue.ts +2 -2
  105. package/dist/components/marching-ants/index.vue +56 -56
  106. package/dist/components/marching-ants/types.d.ts +1 -1
  107. package/dist/components/marquee/index.d.vue.ts +6 -6
  108. package/dist/components/marquee/index.vue +16 -16
  109. package/dist/components/marquee/types.d.ts +1 -1
  110. package/dist/components/material/index.d.vue.ts +3 -3
  111. package/dist/components/mention/index.d.vue.ts +5 -5
  112. package/dist/components/mention/index.vue +68 -68
  113. package/dist/components/menu/index.d.vue.ts +4 -4
  114. package/dist/components/menu/index.vue +10 -10
  115. package/dist/components/menu/types.d.ts +1 -1
  116. package/dist/components/message/index.d.vue.ts +1 -1
  117. package/dist/components/message/index.vue +19 -25
  118. package/dist/components/message/types.d.ts +1 -1
  119. package/dist/components/message-item/index.vue +2 -6
  120. package/dist/components/modal/index.d.vue.ts +7 -7
  121. package/dist/components/modal/index.vue +26 -11
  122. package/dist/components/modal/types.d.ts +2 -2
  123. package/dist/components/noise-background/types.d.ts +1 -1
  124. package/dist/components/note/index.vue +6 -2
  125. package/dist/components/note/types.d.ts +2 -1
  126. package/dist/components/number-input/index.d.vue.ts +11 -6
  127. package/dist/components/number-input/index.vue +57 -16
  128. package/dist/components/number-input/types.d.ts +2 -1
  129. package/dist/components/overlay/index.d.vue.ts +2 -3
  130. package/dist/components/overlay/index.vue +10 -62
  131. package/dist/components/overlay/types.d.ts +0 -2
  132. package/dist/components/page-number/index.vue +30 -29
  133. package/dist/components/page-number/types.d.ts +1 -1
  134. package/dist/components/pin-input/index.d.vue.ts +1 -1
  135. package/dist/components/pin-input/index.vue +6 -6
  136. package/dist/components/pin-input/types.d.ts +1 -1
  137. package/dist/components/popover/index.vue +49 -21
  138. package/dist/components/popover/types.d.ts +3 -1
  139. package/dist/components/progress/index.d.vue.ts +2 -2
  140. package/dist/components/progress/index.vue +12 -12
  141. package/dist/components/progress/types.d.ts +1 -1
  142. package/dist/components/project-banner/types.d.ts +1 -1
  143. package/dist/components/questionnaire/index.vue +14 -14
  144. package/dist/components/radio/index.vue +1 -1
  145. package/dist/components/radio/types.d.ts +1 -1
  146. package/dist/components/radio-group/index.d.vue.ts +2 -2
  147. package/dist/components/radio-group/types.d.ts +1 -1
  148. package/dist/components/rating/index.vue +28 -28
  149. package/dist/components/rating/types.d.ts +1 -1
  150. package/dist/components/resizable/index.d.vue.ts +1 -0
  151. package/dist/components/resizable/index.vue +130 -195
  152. package/dist/components/resizable/types.d.ts +2 -10
  153. package/dist/components/reveal/index.d.vue.ts +3 -3
  154. package/dist/components/reveal/index.vue +4 -4
  155. package/dist/components/reveal/types.d.ts +1 -1
  156. package/dist/components/rolling-number/index.d.vue.ts +2 -2
  157. package/dist/components/rolling-number/index.vue +15 -15
  158. package/dist/components/scalable-text/index.vue +9 -9
  159. package/dist/components/scroll-text/index.d.vue.ts +3 -3
  160. package/dist/components/scroll-text/index.vue +6 -6
  161. package/dist/components/scroll-text/types.d.ts +1 -1
  162. package/dist/components/scrollable/types.d.ts +2 -1
  163. package/dist/components/search-input/index.d.vue.ts +5 -5
  164. package/dist/components/search-input/index.vue +2 -1
  165. package/dist/components/select/index.d.vue.ts +12 -9
  166. package/dist/components/select/index.vue +165 -42
  167. package/dist/components/select/types.d.ts +3 -1
  168. package/dist/components/separator/index.d.vue.ts +1 -1
  169. package/dist/components/separator/types.d.ts +1 -1
  170. package/dist/components/skeleton/index.d.vue.ts +1 -1
  171. package/dist/components/skeleton/index.vue +11 -11
  172. package/dist/components/skeleton/types.d.ts +1 -1
  173. package/dist/components/slider/index.d.vue.ts +1 -1
  174. package/dist/components/slider/index.vue +1 -1
  175. package/dist/components/slider/types.d.ts +1 -1
  176. package/dist/components/snippet/index.d.vue.ts +3 -3
  177. package/dist/components/snippet/index.vue +7 -5
  178. package/dist/components/snippet/types.d.ts +1 -1
  179. package/dist/components/spinner/index.vue +5 -1
  180. package/dist/components/spinner-dots/index.d.vue.ts +1 -1
  181. package/dist/components/split-button/index.d.vue.ts +5 -5
  182. package/dist/components/split-button/types.d.ts +1 -1
  183. package/dist/components/stack/index.d.vue.ts +3 -3
  184. package/dist/components/stack/index.vue +28 -29
  185. package/dist/components/stack/types.d.ts +1 -1
  186. package/dist/components/status-dot/types.d.ts +1 -1
  187. package/dist/components/steps/index.d.vue.ts +2 -2
  188. package/dist/components/steps/index.vue +6 -6
  189. package/dist/components/steps/types.d.ts +1 -1
  190. package/dist/components/stick-to-bottom/types.d.ts +1 -1
  191. package/dist/components/swipe-cell/index.d.vue.ts +6 -6
  192. package/dist/components/swipe-cell/index.vue +64 -64
  193. package/dist/components/swipe-cell/types.d.ts +2 -1
  194. package/dist/components/switch/index.vue +1 -1
  195. package/dist/components/switch/types.d.ts +1 -1
  196. package/dist/components/switch-item/index.vue +1 -1
  197. package/dist/components/switch-item/types.d.ts +1 -1
  198. package/dist/components/tabs/index.d.vue.ts +1 -1
  199. package/dist/components/tabs/index.vue +48 -51
  200. package/dist/components/tabs/types.d.ts +1 -1
  201. package/dist/components/teleport/index.vue +2 -2
  202. package/dist/components/text/index.d.vue.ts +3 -3
  203. package/dist/components/text/index.vue +11 -11
  204. package/dist/components/text/types.d.ts +1 -1
  205. package/dist/components/textarea/index.vue +1 -1
  206. package/dist/components/textarea/types.d.ts +1 -1
  207. package/dist/components/theme-switcher/index.d.vue.ts +3 -2
  208. package/dist/components/theme-switcher/index.vue +15 -7
  209. package/dist/components/theme-switcher/types.d.ts +2 -2
  210. package/dist/components/time-ago/index.d.vue.ts +6 -0
  211. package/dist/components/time-ago/index.vue +143 -0
  212. package/dist/components/time-ago/types.d.ts +4 -0
  213. package/dist/components/time-picker/index.d.vue.ts +1 -1
  214. package/dist/components/time-picker/index.vue +7 -7
  215. package/dist/components/time-picker/types.d.ts +1 -1
  216. package/dist/components/toc/index.d.vue.ts +2 -2
  217. package/dist/components/toc/index.vue +1 -1
  218. package/dist/components/todo-list/index.d.vue.ts +4 -4
  219. package/dist/components/todo-list/index.vue +15 -15
  220. package/dist/components/todo-list/types.d.ts +1 -1
  221. package/dist/components/toggle/index.vue +3 -3
  222. package/dist/components/toggle/types.d.ts +1 -1
  223. package/dist/components/toggle-button/index.vue +14 -11
  224. package/dist/components/toggle-button/types.d.ts +2 -2
  225. package/dist/components/toggle-button-group/index.d.vue.ts +3 -3
  226. package/dist/components/toggle-button-group/index.vue +2 -2
  227. package/dist/components/toggle-button-group/types.d.ts +2 -2
  228. package/dist/components/tool-call/index.vue +5 -5
  229. package/dist/components/tooltip/index.d.vue.ts +4 -5
  230. package/dist/components/tooltip/index.vue +4 -49
  231. package/dist/components/tooltip/types.d.ts +3 -7
  232. package/dist/components/tour/index.d.vue.ts +33 -0
  233. package/dist/components/tour/index.vue +302 -0
  234. package/dist/components/tour/types.d.ts +29 -0
  235. package/dist/components/tree/index.d.vue.ts +24 -28
  236. package/dist/components/tree/index.vue +290 -223
  237. package/dist/components/tree/types.d.ts +38 -13
  238. package/dist/components/virtual-list/index.d.vue.ts +4 -4
  239. package/dist/composables/_internal/use-list-keyboard-controller.js +9 -10
  240. package/dist/composables/_internal/use-list-rows.d.ts +4 -0
  241. package/dist/composables/_internal/use-list-rows.js +12 -4
  242. package/dist/composables/_internal/use-list-selection.d.ts +1 -1
  243. package/dist/composables/_internal/use-lock-scroll.d.ts +8 -1
  244. package/dist/composables/_internal/use-lock-scroll.js +57 -36
  245. package/dist/composables/_internal/use-mention-editor.js +1 -1
  246. package/dist/composables/_internal/use-message-group.d.ts +22 -0
  247. package/dist/composables/_internal/use-message-group.js +143 -0
  248. package/dist/composables/_internal/use-overlay-dialog.js +1 -3
  249. package/dist/composables/_internal/use-overlay-manager.d.ts +4 -1
  250. package/dist/composables/_internal/use-overlay-manager.js +67 -8
  251. package/dist/composables/_internal/use-swipe-gesture.d.ts +1 -1
  252. package/dist/composables/_internal/use-tour-target.d.ts +29 -0
  253. package/dist/composables/_internal/use-tour-target.js +201 -0
  254. package/dist/composables/_internal/use-tree.d.ts +103 -0
  255. package/dist/composables/_internal/use-tree.js +676 -0
  256. package/dist/composables/_internal/use-word-limit.d.ts +1 -1
  257. package/dist/composables/index.d.ts +1 -0
  258. package/dist/composables/index.js +1 -0
  259. package/dist/composables/use-color-scheme.d.ts +1 -1
  260. package/dist/composables/use-color-scheme.js +7 -6
  261. package/dist/composables/use-delay-destroy.d.ts +1 -1
  262. package/dist/composables/use-document-hidden.d.ts +1 -1
  263. package/dist/composables/use-intersection-observer.d.ts +1 -1
  264. package/dist/composables/use-intersection-observer.js +1 -1
  265. package/dist/composables/{_internal/use-motion-reduce.js → use-motion-reduce.js} +2 -2
  266. package/dist/composables/use-mutation-observer.d.ts +1 -1
  267. package/dist/composables/use-mutation-observer.js +1 -1
  268. package/dist/composables/use-resize-observer.d.ts +1 -1
  269. package/dist/composables/use-resize-observer.js +1 -1
  270. package/dist/composables/use-view-transition.js +1 -0
  271. package/dist/composables/use-virtual-list.d.ts +1 -1
  272. package/dist/constants/tooltip-variants.d.ts +28 -0
  273. package/dist/constants/tooltip-variants.js +27 -0
  274. package/dist/contexts/avatar.js +1 -1
  275. package/dist/contexts/breadcrumb.js +1 -1
  276. package/dist/contexts/button.js +1 -1
  277. package/dist/contexts/checkbox.js +1 -1
  278. package/dist/contexts/choicebox.js +1 -1
  279. package/dist/contexts/collapse.js +1 -1
  280. package/dist/contexts/config-provider.js +1 -1
  281. package/dist/contexts/list.js +1 -1
  282. package/dist/contexts/radio.js +1 -1
  283. package/dist/contexts/switch.js +1 -1
  284. package/dist/contexts/toggle-button.js +1 -1
  285. package/dist/index.d.ts +2 -1
  286. package/dist/locales/en-us.d.ts +35 -0
  287. package/dist/locales/en-us.js +20 -0
  288. package/dist/locales/zh-cn.d.ts +35 -0
  289. package/dist/locales/zh-cn.js +20 -0
  290. package/dist/styles/styles.css +1 -1
  291. package/dist/styles/tw.css +43 -30
  292. package/dist/utils/{context.js → _internal/context.js} +1 -1
  293. package/dist/utils/{observer.d.ts → _internal/observer.d.ts} +1 -1
  294. package/dist/utils/{observer.js → _internal/observer.js} +4 -4
  295. package/dist/{components/swipe-cell/instances.d.ts → utils/_internal/swipe-cell-instances.d.ts} +1 -1
  296. package/dist/utils/event.d.ts +2 -1
  297. package/dist/utils/event.js +3 -0
  298. package/package.json +26 -50
  299. package/volar.d.ts +4 -0
  300. package/dist/components/message/composables/use-group-expand.d.ts +0 -13
  301. package/dist/components/message/composables/use-group-expand.js +0 -50
  302. package/dist/components/message/composables/use-message-timer.d.ts +0 -9
  303. package/dist/components/message/composables/use-message-timer.js +0 -62
  304. package/dist/components/message/composables/use-promise-message.d.ts +0 -4
  305. package/dist/components/message/composables/use-promise-message.js +0 -49
  306. package/dist/components/resizable/utils.d.ts +0 -4
  307. package/dist/components/resizable/utils.js +0 -10
  308. package/dist/composables/_internal/use-tree-drag.d.ts +0 -23
  309. package/dist/composables/_internal/use-tree-drag.js +0 -196
  310. package/dist/composables/_internal/use-tree-move.d.ts +0 -20
  311. package/dist/composables/_internal/use-tree-move.js +0 -96
  312. package/dist/composables/_internal/use-tree-rows.d.ts +0 -46
  313. package/dist/composables/_internal/use-tree-rows.js +0 -101
  314. package/dist/composables/_internal/use-tree-selection.d.ts +0 -22
  315. package/dist/composables/_internal/use-tree-selection.js +0 -87
  316. package/dist/styles/source.css +0 -675
  317. package/dist/types/shared/index.d.ts +0 -2
  318. /package/dist/composables/{_internal/use-motion-reduce.d.ts → use-motion-reduce.d.ts} +0 -0
  319. /package/dist/utils/{context.d.ts → _internal/context.d.ts} +0 -0
  320. /package/dist/utils/{mention-html.d.ts → _internal/mention-html.d.ts} +0 -0
  321. /package/dist/utils/{mention-html.js → _internal/mention-html.js} +0 -0
  322. /package/dist/{components/swipe-cell/instances.js → utils/_internal/swipe-cell-instances.js} +0 -0
@@ -1,21 +1,64 @@
1
- import { onScopeDispose } from "vue";
2
- import { cachedOff, cachedOn } from "../../utils/event.js";
1
+ import { onScopeDispose, watch } from "vue";
2
+ import {
3
+ cachedOff,
4
+ cachedOn,
5
+ isCompositionKeydown,
6
+ preventDefaultScroll
7
+ } from "../../utils/event.js";
3
8
  import { toValue } from "../../utils/helper.js";
9
+ const touchMoveOptions = { passive: false };
4
10
  let isKeydownListening = false;
11
+ let rootInteractionLocks = 0;
12
+ let addedPointerEventsNone = false;
5
13
  const overlayStack = [];
14
+ function getEntryZIndex(entry) {
15
+ const value = Number(toValue(entry.zIndex));
16
+ return Number.isFinite(value) ? value : 0;
17
+ }
6
18
  function getTopOverlay() {
7
- return overlayStack.at(-1);
19
+ let top;
20
+ for (const entry of overlayStack) {
21
+ if (!top || getEntryZIndex(entry) >= getEntryZIndex(top)) {
22
+ top = entry;
23
+ }
24
+ }
25
+ return top;
26
+ }
27
+ function getOverlaysFromTop() {
28
+ return overlayStack.map((entry, index) => ({ entry, index })).sort((a, b) => getEntryZIndex(b.entry) - getEntryZIndex(a.entry) || b.index - a.index).map(({ entry }) => entry);
29
+ }
30
+ function lockRootInteraction() {
31
+ if (rootInteractionLocks++) {
32
+ return;
33
+ }
34
+ const rootEl = document.documentElement;
35
+ addedPointerEventsNone = !rootEl.classList.contains("pointer-events-none");
36
+ rootEl.classList.add("pointer-events-none");
37
+ cachedOn(document, "touchmove", preventDefaultScroll, touchMoveOptions);
38
+ }
39
+ function unlockRootInteraction() {
40
+ if (--rootInteractionLocks > 0) {
41
+ return;
42
+ }
43
+ cachedOff(document, "touchmove", preventDefaultScroll, touchMoveOptions);
44
+ if (addedPointerEventsNone) {
45
+ document.documentElement.classList.remove("pointer-events-none");
46
+ addedPointerEventsNone = false;
47
+ }
8
48
  }
9
49
  function onEscapeKeydown(ev) {
10
- const entry = getTopOverlay();
11
- if (!entry) {
50
+ if (!overlayStack.length || ev.defaultPrevented || ev.repeat || isCompositionKeydown(ev)) {
12
51
  return;
13
52
  }
14
53
  const { ctrlKey, metaKey, altKey, shiftKey, key } = ev;
15
54
  if (ctrlKey || metaKey || altKey || shiftKey || key !== "Escape") {
16
55
  return;
17
56
  }
18
- entry?.onPressEscape?.(ev);
57
+ for (const entry of getOverlaysFromTop()) {
58
+ if (entry.onPressEscape?.(ev) !== false) {
59
+ return;
60
+ }
61
+ }
19
62
  }
20
63
  function ensureKeydownListener() {
21
64
  if (isKeydownListening) {
@@ -32,7 +75,7 @@ function removeKeydownListener() {
32
75
  isKeydownListening = false;
33
76
  }
34
77
  export function useOverlayManager(options) {
35
- const { enabled, lockScrollOnVisible, lockScroll, unlockScroll, onPressEscape } = options;
78
+ const { enabled, lockScrollOnVisible, lockScroll, unlockScroll, onPressEscape, zIndex } = options;
36
79
  let isLockedScroll = false;
37
80
  const overlayId = Symbol("pxd-overlay-id");
38
81
  function isTopOverlay(entry) {
@@ -46,6 +89,7 @@ export function useOverlayManager(options) {
46
89
  const shouldLockScroll = toValue(lockScrollOnVisible);
47
90
  if (shouldLockScroll && !isLockedScroll) {
48
91
  lockScroll();
92
+ lockRootInteraction();
49
93
  isLockedScroll = true;
50
94
  }
51
95
  const idx = overlayStack.findIndex((item) => item.id === overlayId);
@@ -54,7 +98,8 @@ export function useOverlayManager(options) {
54
98
  }
55
99
  overlayStack.push({
56
100
  id: overlayId,
57
- onPressEscape
101
+ onPressEscape,
102
+ zIndex
58
103
  });
59
104
  ensureKeydownListener();
60
105
  }
@@ -65,10 +110,24 @@ export function useOverlayManager(options) {
65
110
  }
66
111
  if (isLockedScroll) {
67
112
  unlockScroll();
113
+ unlockRootInteraction();
68
114
  isLockedScroll = false;
69
115
  }
70
116
  removeKeydownListener();
71
117
  }
118
+ watch(
119
+ () => toValue(enabled),
120
+ (isEnabled, wasEnabled) => {
121
+ if (isEnabled === wasEnabled) {
122
+ return;
123
+ }
124
+ if (isEnabled) {
125
+ registerOverlay();
126
+ return;
127
+ }
128
+ unregisterOverlay();
129
+ }
130
+ );
72
131
  onScopeDispose(() => {
73
132
  unregisterOverlay();
74
133
  });
@@ -1,4 +1,4 @@
1
- import type { MaybeElementRef } from '../../types/shared';
1
+ import type { MaybeElementRef } from '../../types/shared/utils';
2
2
  import type { MaybeRefOrGetter } from 'vue';
3
3
  export type SwipeDirection = 'left' | 'right' | 'top' | 'bottom';
4
4
  export interface SwipePressState {
@@ -0,0 +1,29 @@
1
+ import type { TourStep } from '../../components/tour/types';
2
+ import type { MaybeRefOrGetter } from 'vue';
3
+ export interface TourRect {
4
+ top: number;
5
+ left: number;
6
+ width: number;
7
+ height: number;
8
+ }
9
+ export interface UseTourTargetOptions {
10
+ step: MaybeRefOrGetter<TourStep | undefined>;
11
+ motionReduced: MaybeRefOrGetter<boolean>;
12
+ onMissingTarget: (index: number) => void;
13
+ onError: (error: unknown, index: number) => void;
14
+ onResolved: () => void;
15
+ }
16
+ /**
17
+ * Resolves the rect of the current step target and keeps it in sync with scroll,
18
+ * resize, target size and target position changes. `beforeEnter` runs before the
19
+ * target is resolved, and the scroll into view happens once the element is known.
20
+ */
21
+ export declare function useTourTarget(options: UseTourTargetOptions): {
22
+ rect: import("vue").ShallowRef<TourRect, TourRect>;
23
+ targetRadius: import("vue").ShallowRef<string, string>;
24
+ hasTarget: import("vue").ShallowRef<boolean, boolean>;
25
+ isCentered: import("vue").ComputedRef<boolean>;
26
+ isLoading: import("vue").ShallowRef<boolean, boolean>;
27
+ goTo: (index: number) => Promise<void>;
28
+ cancel: () => void;
29
+ };
@@ -0,0 +1,201 @@
1
+ import { computed, onBeforeUnmount, shallowRef } from "vue";
2
+ import { getElement, getStyle, resolveScrollBehavior } from "../../utils/dom.js";
3
+ import { caf, cachedOff, cachedOn, raf, scheduleByRaf } from "../../utils/event.js";
4
+ import { toValue } from "../../utils/helper.js";
5
+ import { isServer } from "../../utils/is.js";
6
+ const ZERO_RECT = { top: 0, left: 0, width: 0, height: 0 };
7
+ function isSameRect(a, b) {
8
+ return a.top === b.top && a.left === b.left && a.width === b.width && a.height === b.height;
9
+ }
10
+ export function useTourTarget(options) {
11
+ const { step, motionReduced, onMissingTarget, onError, onResolved } = options;
12
+ const rect = shallowRef(ZERO_RECT);
13
+ const targetRadius = shallowRef("");
14
+ const hasTarget = shallowRef(false);
15
+ const isLoading = shallowRef(false);
16
+ let targetEl = null;
17
+ let token = 0;
18
+ let resizeObserver = null;
19
+ let isListening = false;
20
+ let positionFrame = 0;
21
+ const scheduleUpdate = scheduleByRaf(measure);
22
+ const isCentered = computed(() => !hasTarget.value);
23
+ function centeredRect() {
24
+ if (isServer()) {
25
+ return ZERO_RECT;
26
+ }
27
+ return {
28
+ top: window.innerHeight / 2,
29
+ left: window.innerWidth / 2,
30
+ width: 0,
31
+ height: 0
32
+ };
33
+ }
34
+ function measure() {
35
+ if (!targetEl) {
36
+ const nextRect2 = centeredRect();
37
+ if (!isSameRect(rect.value, nextRect2)) {
38
+ rect.value = nextRect2;
39
+ }
40
+ return;
41
+ }
42
+ const { top, left, width, height } = targetEl.getBoundingClientRect();
43
+ const nextRect = { top, left, width, height };
44
+ if (!isSameRect(rect.value, nextRect)) {
45
+ rect.value = nextRect;
46
+ }
47
+ const radius = getStyle(targetEl).borderRadius;
48
+ if (radius !== targetRadius.value) {
49
+ targetRadius.value = radius;
50
+ }
51
+ }
52
+ function observeTarget(el) {
53
+ resizeObserver?.disconnect();
54
+ resizeObserver = null;
55
+ if (!el || typeof ResizeObserver === "undefined") {
56
+ return;
57
+ }
58
+ resizeObserver = new ResizeObserver(scheduleUpdate);
59
+ resizeObserver.observe(el);
60
+ }
61
+ function startPositionTracking() {
62
+ if (isServer() || positionFrame) {
63
+ return;
64
+ }
65
+ positionFrame = raf(trackPosition);
66
+ }
67
+ function stopPositionTracking() {
68
+ if (!positionFrame) {
69
+ return;
70
+ }
71
+ caf(positionFrame);
72
+ positionFrame = 0;
73
+ }
74
+ function trackPosition() {
75
+ positionFrame = 0;
76
+ if (!targetEl) {
77
+ return;
78
+ }
79
+ const { top, left, width, height } = targetEl.getBoundingClientRect();
80
+ const nextRect = { top, left, width, height };
81
+ if (!isSameRect(rect.value, nextRect)) {
82
+ rect.value = nextRect;
83
+ targetRadius.value = getStyle(targetEl).borderRadius;
84
+ }
85
+ positionFrame = raf(trackPosition);
86
+ }
87
+ function startListening() {
88
+ if (isListening || isServer()) {
89
+ return;
90
+ }
91
+ cachedOn(window, "resize", scheduleUpdate);
92
+ cachedOn(window, "scroll", scheduleUpdate, { capture: true });
93
+ isListening = true;
94
+ }
95
+ function stopListening() {
96
+ if (!isListening || isServer()) {
97
+ return;
98
+ }
99
+ cachedOff(window, "resize", scheduleUpdate);
100
+ cachedOff(window, "scroll", scheduleUpdate, { capture: true });
101
+ isListening = false;
102
+ }
103
+ function detach() {
104
+ stopListening();
105
+ stopPositionTracking();
106
+ scheduleUpdate.cancel();
107
+ observeTarget(null);
108
+ targetEl = null;
109
+ targetRadius.value = "";
110
+ hasTarget.value = false;
111
+ rect.value = ZERO_RECT;
112
+ }
113
+ function center() {
114
+ observeTarget(null);
115
+ stopPositionTracking();
116
+ targetEl = null;
117
+ targetRadius.value = "";
118
+ hasTarget.value = false;
119
+ rect.value = centeredRect();
120
+ startListening();
121
+ }
122
+ function attachTarget(el, currentToken) {
123
+ if (currentToken !== token) {
124
+ return;
125
+ }
126
+ if (!el) {
127
+ center();
128
+ onResolved();
129
+ return;
130
+ }
131
+ targetEl = el;
132
+ hasTarget.value = true;
133
+ measure();
134
+ observeTarget(el);
135
+ startListening();
136
+ startPositionTracking();
137
+ onResolved();
138
+ }
139
+ async function goTo(index) {
140
+ const currentToken = ++token;
141
+ const currentStep = toValue(step);
142
+ isLoading.value = true;
143
+ if (currentStep?.beforeEnter) {
144
+ try {
145
+ await currentStep.beforeEnter({ index, step: currentStep });
146
+ } catch (error) {
147
+ if (currentToken !== token) {
148
+ return;
149
+ }
150
+ isLoading.value = false;
151
+ onError(error, index);
152
+ return;
153
+ }
154
+ }
155
+ if (currentToken !== token) {
156
+ return;
157
+ }
158
+ isLoading.value = false;
159
+ if (!currentStep?.target) {
160
+ attachTarget(null, currentToken);
161
+ return;
162
+ }
163
+ try {
164
+ const el = getElement(currentStep.target);
165
+ if (!el) {
166
+ onMissingTarget(index);
167
+ return;
168
+ }
169
+ attachTarget(el, currentToken);
170
+ if (currentToken !== token) {
171
+ return;
172
+ }
173
+ el.scrollIntoView({
174
+ block: "center",
175
+ behavior: resolveScrollBehavior("auto", motionReduced)
176
+ });
177
+ scheduleUpdate();
178
+ } catch (error) {
179
+ if (currentToken !== token) {
180
+ return;
181
+ }
182
+ isLoading.value = false;
183
+ onError(error, index);
184
+ }
185
+ }
186
+ function cancel() {
187
+ token++;
188
+ isLoading.value = false;
189
+ detach();
190
+ }
191
+ onBeforeUnmount(cancel);
192
+ return {
193
+ rect,
194
+ targetRadius,
195
+ hasTarget,
196
+ isCentered,
197
+ isLoading,
198
+ goTo,
199
+ cancel
200
+ };
201
+ }
@@ -0,0 +1,103 @@
1
+ import type { TreeDropPosition, TreeDropTarget, TreeFilterFn, TreeFlatNode, TreeMoveDetail, TreeModelValue, TreeOptions, TreeRemoteFilterFn, TreeSelectableFn } from '../../components/tree/types';
2
+ import type { ComponentValue } from '../../types/shared/props';
3
+ import type { MaybeElementRef } from '../../types/shared/utils';
4
+ import type { ComputedRef, MaybeRefOrGetter, ShallowRef } from 'vue';
5
+ export interface TreeNodeMeta {
6
+ node: TreeOptions[number];
7
+ children: TreeNodeMeta[];
8
+ parentValue?: ComponentValue;
9
+ depth: number;
10
+ /** Exclusive index in `list` right after this subtree. */
11
+ end: number;
12
+ }
13
+ export interface TreeIndex {
14
+ list: TreeNodeMeta[];
15
+ byValue: Map<ComponentValue, TreeNodeMeta>;
16
+ }
17
+ export declare function createTreeIndex(data: TreeOptions, childrenField: string): TreeIndex;
18
+ export declare function useTreeIndex(data: MaybeRefOrGetter<TreeOptions>, childrenField: MaybeRefOrGetter<string>): ComputedRef<TreeIndex>;
19
+ /** Children in `data` win over a cached request, and an untouched node keeps its identity. */
20
+ export declare function graftLoadedChildren(data: TreeOptions, loaded: Map<ComponentValue, TreeOptions>, childrenField: string): TreeOptions;
21
+ export interface TreeMatched {
22
+ /** Every hit plus its ancestors: ancestor-closed, so the row walk can prune whole subtrees. */
23
+ visible: ReadonlySet<ComponentValue>;
24
+ /** The hits alone. */
25
+ exact: ReadonlySet<ComponentValue>;
26
+ }
27
+ export declare function useTreeMatched(index: MaybeRefOrGetter<TreeIndex>, query: MaybeRefOrGetter<string>, filter: MaybeRefOrGetter<TreeFilterFn | undefined>): ComputedRef<TreeMatched>;
28
+ export interface UseTreeSearchOptions {
29
+ query: MaybeRefOrGetter<string>;
30
+ remoteFilter?: MaybeRefOrGetter<TreeRemoteFilterFn | undefined>;
31
+ }
32
+ export interface UseTreeSearchReturn {
33
+ /** The forest the query last settled on, absent before the first answer. */
34
+ matches: ShallowRef<TreeOptions | undefined>;
35
+ remote: ComputedRef<boolean>;
36
+ /** Whether a request is in flight, the debounce window included. */
37
+ pending: ShallowRef<boolean>;
38
+ active: ComputedRef<boolean>;
39
+ }
40
+ export declare function useTreeSearch(options: UseTreeSearchOptions): UseTreeSearchReturn;
41
+ export interface UseTreeRowsOptions {
42
+ query: MaybeRefOrGetter<string>;
43
+ expanded: MaybeRefOrGetter<ReadonlySet<ComponentValue>>;
44
+ matched: MaybeRefOrGetter<ReadonlySet<ComponentValue>>;
45
+ /** The hits without their ancestors; only read when `matchesOnly` is on. */
46
+ exactMatched?: MaybeRefOrGetter<ReadonlySet<ComponentValue> | undefined>;
47
+ matchesOnly?: MaybeRefOrGetter<boolean | undefined>;
48
+ canLoad?: MaybeRefOrGetter<((value: ComponentValue) => boolean) | undefined>;
49
+ }
50
+ /**
51
+ * Selection state is deliberately absent: it changes on every click, and putting it here would
52
+ * rebuild all N rows for a change that touches two of them. Read the sets at render time instead.
53
+ */
54
+ export declare function useTreeRows(index: MaybeRefOrGetter<TreeIndex>, options: UseTreeRowsOptions): ComputedRef<TreeFlatNode[]>;
55
+ export interface UseTreeSelectionOptions {
56
+ index: MaybeRefOrGetter<TreeIndex>;
57
+ modelValue: MaybeRefOrGetter<TreeModelValue | undefined>;
58
+ multiple: MaybeRefOrGetter<boolean>;
59
+ checkStrictly?: MaybeRefOrGetter<boolean | undefined>;
60
+ selectable?: MaybeRefOrGetter<TreeSelectableFn | undefined>;
61
+ }
62
+ export interface TreeToggleResult {
63
+ value: TreeModelValue;
64
+ halfCheckedValues: ComponentValue[];
65
+ }
66
+ export interface UseTreeSelectionReturn {
67
+ checked: ComputedRef<Set<ComponentValue>>;
68
+ indeterminate: ComputedRef<Set<ComponentValue>>;
69
+ toggle: (value: ComponentValue) => TreeToggleResult;
70
+ /** The span between the anchor and `value`, both ends included; toggles without an anchor. */
71
+ extend: (value: ComponentValue) => TreeToggleResult;
72
+ isSelectable: (value: ComponentValue) => boolean;
73
+ }
74
+ export declare function useTreeSelection(options: UseTreeSelectionOptions): UseTreeSelectionReturn;
75
+ /** Walks up instead of scanning `index.list`: the hit test runs this on every pointer move. */
76
+ export declare function isTreeDescendant(index: TreeIndex, ancestorValue: ComponentValue, value: ComponentValue): boolean;
77
+ export interface TreeMoveResult {
78
+ data: TreeOptions;
79
+ detail: TreeMoveDetail;
80
+ }
81
+ /**
82
+ * The node is detached before the target is looked up, which rejects the whole family of invalid
83
+ * drops for free: it and its descendant are no longer in the tree to be found.
84
+ */
85
+ export declare function moveTreeNode(data: TreeOptions, childrenField: string, value: ComponentValue, target: TreeDropTarget): TreeMoveResult | undefined;
86
+ export interface UseTreeDragOptions {
87
+ container: MaybeElementRef<HTMLElement>;
88
+ rows: MaybeRefOrGetter<TreeFlatNode[]>;
89
+ enabled: MaybeRefOrGetter<boolean>;
90
+ dropInsideLeaf: MaybeRefOrGetter<boolean>;
91
+ /** Rejects a position the tree will refuse, so no indicator is ever painted for it. */
92
+ canDrop: (value: ComponentValue, targetValue: ComponentValue, position: TreeDropPosition) => boolean;
93
+ onExpand: (value: ComponentValue) => void;
94
+ onCommit: (value: ComponentValue, target: TreeDropTarget) => void;
95
+ }
96
+ export declare function useTreeDrag(options: UseTreeDragOptions): {
97
+ value: ShallowRef<ComponentValue | undefined, ComponentValue | undefined>;
98
+ target: ShallowRef<TreeDropTarget | undefined, TreeDropTarget | undefined>;
99
+ x: ShallowRef<number, number>;
100
+ y: ShallowRef<number, number>;
101
+ onPointerDown: (nodeValue: ComponentValue, event: PointerEvent) => void;
102
+ didDrag: () => boolean;
103
+ };