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
@@ -4,7 +4,7 @@ import PlusIcon from "@gdsicon/vue/plus";
4
4
  import { computed, reactive, shallowRef, watch } from "vue";
5
5
  import { useModelValue } from "../../composables/_internal/use-model-value.js";
6
6
  import { useRepeatAction } from "../../composables/use-repeat-action.js";
7
- import { NOOP } from "../../utils/event.js";
7
+ import { NOOP, isCompositionKeydown } from "../../utils/event.js";
8
8
  import { toNumber } from "../../utils/format.js";
9
9
  import { isNil, isNumber, isUndefined } from "../../utils/is.js";
10
10
  import PInput from "../input/index.vue";
@@ -53,11 +53,6 @@ const props = defineProps({
53
53
  type: Boolean,
54
54
  required: false
55
55
  },
56
- thousandsSeparator: {
57
- type: String,
58
- required: false,
59
- default: ","
60
- },
61
56
  scientific: {
62
57
  type: Boolean,
63
58
  required: false,
@@ -71,6 +66,16 @@ const props = defineProps({
71
66
  modelValue: {
72
67
  type: [Number, null],
73
68
  required: false
69
+ },
70
+ controlsPosition: {
71
+ type: String,
72
+ required: false,
73
+ default: "sides"
74
+ },
75
+ thousandsSeparator: {
76
+ type: String,
77
+ required: false,
78
+ default: ","
74
79
  }
75
80
  });
76
81
  const emits = defineEmits([
@@ -79,7 +84,6 @@ const emits = defineEmits([
79
84
  "change",
80
85
  "update:modelValue"
81
86
  ]);
82
- const modelValue = useModelValue(props, emits, { withChange: false });
83
87
  const REGEXPS = {
84
88
  "remove-leading-zeros": /^(-?)0+(?=\d)/,
85
89
  "thousands-separator": /\B(?=(\d{3})+(?!\d))/g
@@ -89,13 +93,6 @@ const inputData = reactive({
89
93
  currentValue: props.modelValue,
90
94
  userInput: null
91
95
  });
92
- function formatWithThousands(value) {
93
- const str = String(value);
94
- const dotIndex = str.indexOf(".");
95
- const intPart = dotIndex === -1 ? str : str.slice(0, dotIndex);
96
- const decPart = dotIndex === -1 ? "" : str.slice(dotIndex);
97
- return intPart.replace(REGEXPS["thousands-separator"], props.thousandsSeparator) + decPart;
98
- }
99
96
  const inputValue = computed(() => {
100
97
  if (inputData.userInput !== null) {
101
98
  return inputData.userInput;
@@ -130,6 +127,7 @@ const valuePrecision = computed(() => {
130
127
  }
131
128
  return stringValue.length - decimalIndex - 1;
132
129
  });
130
+ const modelValue = useModelValue(props, emits, { withChange: false });
133
131
  const { start: startDecrease, stop: stopDecrease } = useRepeatAction({
134
132
  disabled: decreaseDisabled,
135
133
  action: decreaseValue
@@ -138,6 +136,13 @@ const { start: startIncrease, stop: stopIncrease } = useRepeatAction({
138
136
  disabled: increaseDisabled,
139
137
  action: increaseValue
140
138
  });
139
+ function formatWithThousands(value) {
140
+ const str = String(value);
141
+ const dotIndex = str.indexOf(".");
142
+ const intPart = dotIndex === -1 ? str : str.slice(0, dotIndex);
143
+ const decPart = dotIndex === -1 ? "" : str.slice(dotIndex);
144
+ return intPart.replace(REGEXPS["thousands-separator"], props.thousandsSeparator) + decPart;
145
+ }
141
146
  function toPrecision(value) {
142
147
  if (!value) {
143
148
  return value;
@@ -180,6 +185,9 @@ function decreaseValue() {
180
185
  modelValue.value = clampToRange(value ?? 0);
181
186
  }
182
187
  function onInputKeydown(ev) {
188
+ if (isCompositionKeydown(ev)) {
189
+ return;
190
+ }
183
191
  const key = ev.key;
184
192
  if (!props.scientific && ["e", "E"].includes(key)) {
185
193
  ev.preventDefault();
@@ -257,7 +265,7 @@ watch(() => props.modelValue, (newVal, oldVal) => {
257
265
  >
258
266
  <template #prefix>
259
267
  <button
260
- v-if="controls"
268
+ v-if="controls && controlsPosition !== 'right'"
261
269
  tabindex="-1"
262
270
  class="flex aspect-square h-full cursor-pointer touch-manipulation appearance-none items-center justify-center rounded-l-inherit border-r font-inherit text-foreground outline-none enabled:hover:bg-background-hover enabled:hover:text-gray-1000 enabled:active:bg-background-active disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 motion-safe:transition-colors"
263
271
  :disabled="decreaseDisabled"
@@ -277,8 +285,41 @@ watch(() => props.modelValue, (newVal, oldVal) => {
277
285
  <template #suffix>
278
286
  <slot name="suffix" />
279
287
 
288
+ <div
289
+ v-if="controls && controlsPosition === 'right'"
290
+ class="flex aspect-square h-full flex-col rounded-r-inherit border-l"
291
+ >
292
+ <button
293
+ tabindex="-1"
294
+ class="flex h-1/2 w-full cursor-pointer touch-manipulation appearance-none items-center justify-center rounded-tr-inherit border-b font-inherit text-foreground outline-none enabled:hover:bg-background-hover enabled:hover:text-gray-1000 enabled:active:bg-background-active disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 motion-safe:transition-colors"
295
+ :disabled="increaseDisabled"
296
+ @pointerdown="startIncrease"
297
+ @pointercancel="stopIncrease"
298
+ @pointerup="stopIncrease"
299
+ @contextmenu.prevent="NOOP"
300
+ >
301
+ <slot name="plusIcon">
302
+ <PlusIcon class="size-2 pointer-events-none" />
303
+ </slot>
304
+ </button>
305
+
306
+ <button
307
+ tabindex="-1"
308
+ class="flex h-1/2 w-full cursor-pointer touch-manipulation appearance-none items-center justify-center rounded-br-inherit font-inherit text-foreground outline-none enabled:hover:bg-background-hover enabled:hover:text-gray-1000 enabled:active:bg-background-active disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 motion-safe:transition-colors"
309
+ :disabled="decreaseDisabled"
310
+ @pointerdown="startDecrease"
311
+ @pointercancel="stopDecrease"
312
+ @pointerup="stopDecrease"
313
+ @contextmenu.prevent="NOOP"
314
+ >
315
+ <slot name="minusIcon">
316
+ <MinusIcon class="size-2 pointer-events-none" />
317
+ </slot>
318
+ </button>
319
+ </div>
320
+
280
321
  <button
281
- v-if="controls"
322
+ v-else-if="controls"
282
323
  tabindex="-1"
283
324
  class="flex aspect-square h-full cursor-pointer touch-manipulation appearance-none items-center justify-center rounded-r-inherit border-l font-inherit text-foreground outline-none enabled:hover:bg-background-hover enabled:hover:text-gray-1000 enabled:active:bg-background-active disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 motion-safe:transition-colors"
284
325
  :disabled="increaseDisabled"
@@ -7,10 +7,11 @@ export interface NumberInputProps {
7
7
  controls?: boolean
8
8
  precision?: number
9
9
  thousands?: boolean
10
- thousandsSeparator?: string
11
10
  scientific?: boolean
12
11
  clearValue?: number | null
13
12
  modelValue?: number | null
13
+ controlsPosition?: 'sides' | 'right'
14
+ thousandsSeparator?: string
14
15
  }
15
16
 
16
17
  export interface NumberInputEmits {
@@ -1,7 +1,7 @@
1
1
  import type { OverlayProps } from './types';
2
- declare var __VLS_14: {};
2
+ declare var __VLS_13: {};
3
3
  type __VLS_Slots = {} & {
4
- default?: (props: typeof __VLS_14) => any;
4
+ default?: (props: typeof __VLS_13) => any;
5
5
  };
6
6
  declare const __VLS_base: import("vue").DefineComponent<OverlayProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
7
7
  "update:modelValue": (args_0: boolean) => any;
@@ -14,7 +14,6 @@ declare const __VLS_base: import("vue").DefineComponent<OverlayProps, {}, {}, {}
14
14
  }>, {
15
15
  modelValue: boolean;
16
16
  closeOnPressEscape: boolean;
17
- appendToBody: boolean;
18
17
  lockScrollOnVisible: boolean;
19
18
  showOverlay: boolean;
20
19
  closeOnClickOverlay: boolean;
@@ -1,9 +1,8 @@
1
1
  <script setup>
2
- import { computed, nextTick, onBeforeUnmount, shallowRef, watch } from "vue";
2
+ import { computed, watch } from "vue";
3
3
  import { useLockScroll } from "../../composables/_internal/use-lock-scroll.js";
4
4
  import { useOverlayManager } from "../../composables/_internal/use-overlay-manager.js";
5
5
  import { useConfigProvider } from "../../contexts/config-provider.js";
6
- import { getElement } from "../../utils/dom.js";
7
6
  import { NOOP } from "../../utils/event.js";
8
7
  import { isServer } from "../../utils/is.js";
9
8
  import PTeleport from "../teleport/index.vue";
@@ -34,15 +33,6 @@ const props = defineProps({
34
33
  required: false,
35
34
  default: true
36
35
  },
37
- appendToBody: {
38
- type: Boolean,
39
- required: false,
40
- default: true
41
- },
42
- shownElement: {
43
- type: [String, Object],
44
- required: false
45
- },
46
36
  closeOnPressEscape: {
47
37
  type: Boolean,
48
38
  required: false,
@@ -64,72 +54,35 @@ const emits = defineEmits([
64
54
  "escape",
65
55
  "update:modelValue"
66
56
  ]);
57
+ const computedStyle = computed(() => ({ "--overlay-index": props.zIndex }));
67
58
  const configProvider = useConfigProvider();
68
- const clipPath = shallowRef("");
69
- const computedStyle = computed(() => ({
70
- "--overlay-index": props.zIndex,
71
- "clip-path": clipPath.value
72
- }));
73
- let cacheShownElement = null;
74
- const { lockScroll, unlockScroll } = useLockScroll();
59
+ const { lockScroll, unlockScroll } = useLockScroll(() => document.body, { walkAncestors: true });
75
60
  const { registerOverlay, unregisterOverlay } = useOverlayManager({
76
61
  enabled: () => props.modelValue,
77
62
  lockScrollOnVisible: () => props.lockScrollOnVisible,
78
63
  lockScroll,
79
64
  unlockScroll,
65
+ zIndex: () => props.zIndex,
80
66
  onPressEscape: (ev) => {
81
67
  if (!props.closeOnPressEscape) {
82
- return;
68
+ return false;
83
69
  }
84
70
  emits("escape", ev);
85
- emits("update:modelValue", false);
71
+ if (!ev.defaultPrevented) {
72
+ emits("update:modelValue", false);
73
+ }
74
+ return true;
86
75
  }
87
76
  });
88
- function getShownElementClipPath(el) {
89
- const { top, left, right, bottom } = el.getBoundingClientRect();
90
- clipPath.value = `polygon(
91
- 0% 0%,
92
- 0% 100%,
93
- ${left}px 100%,
94
- ${left}px ${top}px,
95
- ${right}px ${top}px,
96
- ${right}px ${bottom}px,
97
- ${left}px ${bottom}px,
98
- ${left}px 100%,
99
- 100% 100%,
100
- 100% 0%
101
- )`;
102
- }
103
- async function getShownElementIfNeed() {
104
- const { shownElement, modelValue } = props;
105
- if (!modelValue || !shownElement) {
106
- toggleShownElementClasses();
107
- clipPath.value = "";
108
- return;
109
- }
110
- await nextTick();
111
- const el = getElement(shownElement);
112
- if (!el) {
113
- return;
114
- }
115
- cacheShownElement = el;
116
- getShownElementClipPath(el);
117
- toggleShownElementClasses(true);
118
- }
119
- function toggleShownElementClasses(force = false) {
120
- cacheShownElement?.classList.toggle("pointer-events-auto!", force);
121
- }
122
77
  function onOverlayVisibleChange(visible) {
123
78
  if (isServer()) {
124
79
  return;
125
80
  }
126
81
  if (visible) {
127
82
  registerOverlay();
128
- getShownElementIfNeed();
129
83
  return;
130
84
  }
131
85
  unregisterOverlay();
132
- toggleShownElementClasses();
133
86
  }
134
87
  function onOverlayClick(ev) {
135
88
  emits("click", ev);
@@ -139,15 +92,10 @@ function onOverlayClick(ev) {
139
92
  emits("update:modelValue", false);
140
93
  }
141
94
  watch(() => props.modelValue, onOverlayVisibleChange, { immediate: true });
142
- watch(() => props.shownElement, getShownElementIfNeed);
143
- onBeforeUnmount(() => {
144
- toggleShownElementClasses();
145
- cacheShownElement = null;
146
- });
147
95
  </script>
148
96
 
149
97
  <template>
150
- <PTeleport :disabled="!appendToBody">
98
+ <PTeleport>
151
99
  <Transition name="pxd-transition--fade" mode="out-in" appear>
152
100
  <div
153
101
  data-overlay
@@ -3,8 +3,6 @@ export interface OverlayProps {
3
3
  variant?: 'default' | 'blurred' | 'transparent'
4
4
  modelValue?: boolean
5
5
  showOverlay?: boolean
6
- appendToBody?: boolean
7
- shownElement?: string | object
8
6
  closeOnPressEscape?: boolean
9
7
  closeOnClickOverlay?: boolean
10
8
  lockScrollOnVisible?: boolean
@@ -3,6 +3,7 @@ import ChevronRightIcon from "@gdsicon/vue/chevron-right";
3
3
  import { computed, ref, watch } from "vue";
4
4
  import { BASIC_HEIGHTS } from "../../constants/size.js";
5
5
  import { useConfigProvider } from "../../contexts/config-provider.js";
6
+ import { isCompositionKeydown } from "../../utils/event.js";
6
7
  import PSelect from "../select/index.vue";
7
8
  defineOptions({
8
9
  name: "PPageNumber",
@@ -58,27 +59,10 @@ const props = defineProps({
58
59
  ]
59
60
  }
60
61
  });
61
- const mappedPageSizeOptions = computed(() => {
62
- const label = configProvider.locale.pagination.perPage;
63
- return props.pageSizeOptions.map((size) => ({
64
- label: String(size) + label,
65
- value: size
66
- }));
67
- });
68
62
  const emits = defineEmits(["update:pageSize", "update:modelValue"]);
69
- const configProvider = useConfigProvider();
70
63
  const pageInput = ref(String(props.modelValue));
71
64
  const internalPageSize = ref(props.pageSize);
72
65
  const pageCount = computed(() => Math.max(1, Math.ceil(props.total / props.pageSize)));
73
- const pagesBtnSize = computed(() => {
74
- const inheritSize = props.size || configProvider.size;
75
- return {
76
- sm: "xs",
77
- md: "sm",
78
- lg: "md"
79
- }[inheritSize];
80
- });
81
- const pageItemSizeClass = computed(() => BASIC_HEIGHTS[pagesBtnSize.value]);
82
66
  const pageItems = computed(() => {
83
67
  if (pageCount.value <= 7) {
84
68
  return Array.from({ length: pageCount.value }, (_, index) => index + 1);
@@ -115,6 +99,23 @@ const pageItems = computed(() => {
115
99
  pageCount.value
116
100
  ];
117
101
  });
102
+ const configProvider = useConfigProvider();
103
+ const mappedPageSizeOptions = computed(() => {
104
+ const label = configProvider.locale.pagination.perPage;
105
+ return props.pageSizeOptions.map((size) => ({
106
+ label: String(size) + label,
107
+ value: size
108
+ }));
109
+ });
110
+ const pagesBtnSize = computed(() => {
111
+ const inheritSize = props.size || configProvider.size;
112
+ return {
113
+ sm: "xs",
114
+ md: "sm",
115
+ lg: "md"
116
+ }[inheritSize];
117
+ });
118
+ const pageItemSizeClass = computed(() => BASIC_HEIGHTS[pagesBtnSize.value]);
118
119
  function setPage(page) {
119
120
  if (!props.disabled && page !== props.modelValue) {
120
121
  emits("update:modelValue", page);
@@ -131,7 +132,7 @@ function submitPageInput() {
131
132
  setPage(nextPage);
132
133
  }
133
134
  function onPageInputKeydown(event) {
134
- if (event.key === "Enter") {
135
+ if (event.key === "Enter" && !isCompositionKeydown(event)) {
135
136
  submitPageInput();
136
137
  }
137
138
  }
@@ -193,17 +194,6 @@ watch(() => props.pageSize, (value) => {
193
194
  </button>
194
195
  </template>
195
196
 
196
- <button
197
- type="button"
198
- class="pxd-page-number--next inline-flex aspect-square items-center justify-center rounded-md border border-transparent self-focus-ring outline-none enabled:cursor-pointer enabled:hover:bg-background-hover enabled:hover:text-foreground enabled:active:bg-background-active disabled:cursor-not-allowed disabled:border-gray-300 disabled:bg-gray-100 disabled:text-gray-700 motion-safe:transition-colors"
199
- :class="pageItemSizeClass"
200
- :disabled="disabled || modelValue >= pageCount"
201
- :aria-label="configProvider.locale.pagination.next"
202
- @click="setPage(modelValue + 1)"
203
- >
204
- <ChevronRightIcon class="size-4" aria-hidden="true" />
205
- </button>
206
-
207
197
  <PSelect
208
198
  v-if="showPageSize"
209
199
  v-model="internalPageSize"
@@ -228,5 +218,16 @@ watch(() => props.pageSize, (value) => {
228
218
  @blur="submitPageInput"
229
219
  @keydown="onPageInputKeydown"
230
220
  />
221
+
222
+ <button
223
+ type="button"
224
+ class="pxd-page-number--next inline-flex aspect-square items-center justify-center rounded-md border border-transparent self-focus-ring outline-none enabled:cursor-pointer enabled:hover:bg-background-hover enabled:hover:text-foreground enabled:active:bg-background-active disabled:cursor-not-allowed disabled:border-gray-300 disabled:bg-gray-100 disabled:text-gray-700 motion-safe:transition-colors"
225
+ :class="pageItemSizeClass"
226
+ :disabled="disabled || modelValue >= pageCount"
227
+ :aria-label="configProvider.locale.pagination.next"
228
+ @click="setPage(modelValue + 1)"
229
+ >
230
+ <ChevronRightIcon class="size-4" aria-hidden="true" />
231
+ </button>
231
232
  </nav>
232
233
  </template>
@@ -1,4 +1,4 @@
1
- import type { ComponentSize, ComponentOption } from '../../types/shared'
1
+ import type { ComponentSize, ComponentOption } from '../../types/shared/props'
2
2
 
3
3
  export interface PageNumberProps {
4
4
  /** page */
@@ -13,8 +13,8 @@ declare const __VLS_export: import("vue").DefineComponent<PinInputProps, {
13
13
  }>, {
14
14
  length: number;
15
15
  type: "numeric" | "alphabetic" | "alphanumeric" | "numeric-password" | "alphabetic-password" | "alphanumeric-password";
16
- placeholder: string;
17
16
  modelValue: string;
17
+ placeholder: string;
18
18
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const _default: typeof __VLS_export;
20
20
  export default _default;
@@ -53,10 +53,10 @@ const props = defineProps({
53
53
  }
54
54
  });
55
55
  const emits = defineEmits(["change", "update:modelValue"]);
56
- const configProvider = useConfigProvider();
56
+ const NUMERIC_REGEX = /^\d+$/;
57
+ const ALPHABETIC_REGEX = /^[a-z]+$/i;
58
+ const ALPHANUMERIC_REGEX = /^[0-9a-z]+$/i;
57
59
  const inputsRef = shallowRef([]);
58
- const modelValue = useModelValue(props, emits);
59
- let localValue = modelValue.value;
60
60
  const computedInputType = computed(() => {
61
61
  const { type } = props;
62
62
  if (type.includes("password")) {
@@ -69,6 +69,9 @@ const computedInputType = computed(() => {
69
69
  const computedInputMode = computed(() => {
70
70
  return props.type.includes("numeric") ? "numeric" : "text";
71
71
  });
72
+ const configProvider = useConfigProvider();
73
+ const modelValue = useModelValue(props, emits);
74
+ let localValue = modelValue.value;
72
75
  const { classes } = useTailwindVariant({
73
76
  base: "pxd-input--border rounded-md motion-safe:transition-appearance",
74
77
  variants: {
@@ -152,9 +155,6 @@ function onCompositionEnd(ev) {
152
155
  }
153
156
  setInputValue("", index);
154
157
  }
155
- const NUMERIC_REGEX = /^\d+$/;
156
- const ALPHABETIC_REGEX = /^[a-z]+$/i;
157
- const ALPHANUMERIC_REGEX = /^[0-9a-z]+$/i;
158
158
  function validateInputValue(value) {
159
159
  if (!value) {
160
160
  return false;
@@ -1,4 +1,4 @@
1
- import type { ComponentSizeWithXs } from '../../types/shared'
1
+ import type { ComponentSizeWithXs } from '../../types/shared/props'
2
2
 
3
3
  export interface PinInputProps {
4
4
  size?: ComponentSizeWithXs
@@ -6,7 +6,7 @@ import { useDelayDestroy } from "../../composables/use-delay-destroy.js";
6
6
  import { useOutsideClick } from "../../composables/use-outside-click.js";
7
7
  import { useConfigProvider } from "../../contexts/config-provider.js";
8
8
  import { throttleByRaf } from "../../utils/event.js";
9
- import { getCssUnitValue, toArray } from "../../utils/format.js";
9
+ import { getCssUnitValue, isTruthyProp, toArray } from "../../utils/format.js";
10
10
  import PPopoverArrow from "../_internal/popover-arrow.vue";
11
11
  import POverlay from "../overlay/index.vue";
12
12
  defineOptions({
@@ -113,6 +113,10 @@ const props = defineProps({
113
113
  type: [Object, String],
114
114
  required: false
115
115
  },
116
+ ariaLabelledby: {
117
+ type: String,
118
+ required: false
119
+ },
116
120
  toggleOnTrigger: {
117
121
  type: Boolean,
118
122
  required: false,
@@ -138,6 +142,11 @@ const props = defineProps({
138
142
  required: false,
139
143
  default: true
140
144
  },
145
+ closeOnOutsideClick: {
146
+ type: Boolean,
147
+ required: false,
148
+ default: true
149
+ },
141
150
  lockScrollOnVisible: {
142
151
  type: Boolean,
143
152
  required: false
@@ -162,6 +171,7 @@ let showPopoverTimer;
162
171
  let hidePopoverTimer;
163
172
  let triggerElementsCache = null;
164
173
  let cleanupAutoUpdate = null;
174
+ const throttledUpdatePosition = throttleByRaf(updatePosition);
165
175
  const arrowRef = shallowRef(null);
166
176
  const triggerRef = shallowRef(null);
167
177
  const wrapperRef = shallowRef(null);
@@ -169,7 +179,6 @@ const activeTriggerRef = shallowRef(null);
169
179
  const activeTriggerIndex = shallowRef(-1);
170
180
  const hasMultipleTriggers = shallowRef(false);
171
181
  const pointerPosition = shallowRef(null);
172
- const localPosition = shallowRef(props.position);
173
182
  const pointReference = { getBoundingClientRect() {
174
183
  const { x = 0, y = 0 } = pointerPosition.value ?? {};
175
184
  return {
@@ -184,7 +193,9 @@ const pointReference = { getBoundingClientRect() {
184
193
  toJSON: () => ({})
185
194
  };
186
195
  } };
196
+ const localPosition = shallowRef(props.position);
187
197
  const triggerMethods = computed(() => toArray(props.trigger));
198
+ const isManual = computed(() => triggerMethods.value.includes("manual"));
188
199
  const transitionType = computed(() => props.adaptive ? "fade-slide" : "fade-scale");
189
200
  const popoverMaxWidth = computed(() => getCssUnitValue(props.maxWidth));
190
201
  const wrapperStyle = computed(() => ({
@@ -193,9 +204,17 @@ const wrapperStyle = computed(() => ({
193
204
  "--popover-arrow-color": props.arrowColor,
194
205
  "--popover-max-width": popoverMaxWidth.value
195
206
  }));
196
- const configProvider = useConfigProvider();
197
- const allowOutsideClick = computed(() => !triggerMethods.value.includes("manual"));
198
- const focusTrapContainer = computed(() => isVisible.value ? wrapperRef.value : null);
207
+ // Hover popovers must not steal focus. Click-triggered popovers keep the trap for Tab
208
+ // containment, but only auto-focus when the caller asked for it.
209
+ const shouldTrapFocus = computed(() => isTruthyProp(props.autoFocusElement) || triggerMethods.value.includes("click"));
210
+ const focusTrapContainer = computed(() => isVisible.value && shouldTrapFocus.value ? wrapperRef.value : null);
211
+ const overlayZIndex = computed(() => {
212
+ if (props.zIndex === undefined || props.zIndex === "") {
213
+ return undefined;
214
+ }
215
+ const value = Number(props.zIndex);
216
+ return Number.isFinite(value) ? value : undefined;
217
+ });
199
218
  const triggerPointerMoveFn = computed(() => props.alignPoint ? onTriggerPointerMove : undefined);
200
219
  const computePositionMiddleware = computed(() => {
201
220
  return [
@@ -206,10 +225,11 @@ const computePositionMiddleware = computed(() => {
206
225
  props.closeOnInvisible && hide({ strategy: "referenceHidden" })
207
226
  ];
208
227
  });
228
+ const configProvider = useConfigProvider();
209
229
  const { render: isRender, visible: isVisible, show: showPopover, hide: hidePopover } = useDelayDestroy(props.modelValue, {
210
230
  delay: () => props.destroyDelay,
211
231
  visibleChange(v) {
212
- if (!allowOutsideClick.value) {
232
+ if (isManual.value) {
213
233
  return;
214
234
  }
215
235
  emits("visible-change", v);
@@ -222,18 +242,22 @@ const { render: isRender, visible: isVisible, show: showPopover, hide: hidePopov
222
242
  }
223
243
  }
224
244
  });
225
- useFocusTrap(focusTrapContainer, () => ({
226
- autoFocusElement: props.autoFocusElement,
227
- returnFocusOnDeactivate: props.returnFocusOnDeactivate
228
- }));
245
+ useFocusTrap(focusTrapContainer, () => {
246
+ const options = {
247
+ autoFocusElement: props.autoFocusElement,
248
+ returnFocusOnDeactivate: props.returnFocusOnDeactivate
249
+ };
250
+ return isTruthyProp(props.autoFocusElement) ? options : {
251
+ ...options,
252
+ initialFocus: false
253
+ };
254
+ });
229
255
  useOutsideClick(wrapperRef, {
230
256
  allowList: [triggerRef, wrapperRef],
231
- enabled: () => {
232
- return isVisible.value && allowOutsideClick.value;
233
- },
257
+ enabled: () => isVisible.value,
234
258
  onTrigger: (ev) => {
235
259
  emits("outside-click", ev);
236
- if (allowOutsideClick.value) {
260
+ if (!isManual.value && props.closeOnOutsideClick) {
237
261
  handlePopoverHide();
238
262
  }
239
263
  }
@@ -361,7 +385,7 @@ async function updatePosition() {
361
385
  middleware: computePositionMiddleware.value
362
386
  });
363
387
  localPosition.value = placement;
364
- if (middlewareData.hide?.referenceHidden || middlewareData.hide?.escaped) {
388
+ if (!isManual.value && (middlewareData.hide?.referenceHidden || middlewareData.hide?.escaped)) {
365
389
  handlePopoverHide(true);
366
390
  return;
367
391
  }
@@ -378,7 +402,6 @@ async function updatePosition() {
378
402
  });
379
403
  }
380
404
  }
381
- const throttledUpdatePosition = throttleByRaf(updatePosition);
382
405
  async function handlePopoverShow() {
383
406
  if (showPopoverTimer || props.disabled) {
384
407
  return;
@@ -399,7 +422,9 @@ async function handlePopoverShow() {
399
422
  }
400
423
  function handlePopoverEscape(ev) {
401
424
  emits("escape", ev);
402
- handlePopoverHide();
425
+ if (!isManual.value) {
426
+ handlePopoverHide();
427
+ }
403
428
  }
404
429
  async function handlePopoverHide(immediate = false) {
405
430
  if (hidePopoverTimer) {
@@ -577,6 +602,7 @@ defineExpose({
577
602
 
578
603
  <POverlay
579
604
  :model-value="isVisible"
605
+ :z-index="overlayZIndex"
580
606
  :show-overlay="adaptive"
581
607
  :close-on-press-escape="closeOnPressEscape"
582
608
  :lock-scroll-on-visible="lockScrollOnVisible"
@@ -586,14 +612,16 @@ defineExpose({
586
612
  v-if="isRender"
587
613
  ref="wrapperRef"
588
614
  tabindex="-1"
615
+ role="dialog"
616
+ aria-modal="true"
589
617
  :data-visible="isVisible"
590
618
  :data-adaptive="adaptive"
591
619
  :data-position="localPosition"
592
620
  :data-interactive="interactive"
593
- :data-multiple-triggers="hasMultipleTriggers"
594
621
  :class="wrapperClass"
595
622
  :style="wrapperStyle"
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"
623
+ :aria-labelledby="ariaLabelledby"
624
+ 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-[visible=false]:pointer-events-none data-[visible=false]:transition-none! motion-reduce:data-[visible=false]:hidden"
597
625
  @keydown="onWrapperKeydown"
598
626
  @pointerenter="onWrapperPointerEnter"
599
627
  @pointerleave="onWrapperPointerLeave"
@@ -619,7 +647,7 @@ defineExpose({
619
647
  <div
620
648
  v-if="showArrow"
621
649
  ref="arrowRef"
622
- class="pxd-popover--arrow pointer-events-none absolute z-1 will-change-[left,top]"
650
+ class="pxd-popover--arrow pointer-events-none absolute z-1"
623
651
  >
624
652
  <PPopoverArrow
625
653
  fill="var(--popover-arrow-color,transparent)"
@@ -634,5 +662,5 @@ defineExpose({
634
662
  </template>
635
663
 
636
664
  <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}
665
+ .pxd-popover--wrapper{--popover-padding:calc(var(--popover-offset, 8)*1px);--popover-origin:center}.pxd-popover--wrapper[data-position=top]{--popover-origin:center bottom}.pxd-popover--wrapper[data-position=top-start]{--popover-origin:left bottom}.pxd-popover--wrapper[data-position=top-end]{--popover-origin:right bottom}.pxd-popover--wrapper[data-position=bottom]{--popover-origin:center top}.pxd-popover--wrapper[data-position=bottom-start]{--popover-origin:left top}.pxd-popover--wrapper[data-position=bottom-end]{--popover-origin:right top}.pxd-popover--wrapper[data-position=left]{--popover-origin:right center}.pxd-popover--wrapper[data-position=left-start]{--popover-origin:right top}.pxd-popover--wrapper[data-position=left-end]{--popover-origin:right bottom}.pxd-popover--wrapper[data-position=right]{--popover-origin:left center}.pxd-popover--wrapper[data-position=right-start]{--popover-origin:left top}.pxd-popover--wrapper[data-position=right-end]{--popover-origin:left bottom}.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--wrapper .pxd-popover--content.variant-invert+.pxd-popover--arrow{--popover-arrow-border:var(--color-gray-300)}.pxd-popover--wrapper .pxd-popover--container{max-height:min(800px,80vh);max-height:min(800px,80dvh);transform-origin:var(--popover-origin);transition-property:opacity,transform}.pxd-popover--wrapper[data-visible=true] .pxd-popover--container{opacity:1;pointer-events:auto}.pxd-popover--wrapper[data-visible=false] .pxd-popover--container[data-transition-type=fade-scale]{opacity:0;transform:scale(var(--popover-scale));transition-duration:var(--faster-transition-duration)}.pxd-popover--wrapper[data-visible=false] .pxd-popover--container[data-transition-type=fade-slide]{transform:translateY(100%);transition-duration:var(--faster-transition-duration)}
638
666
  </style>