pxd 0.0.39 → 0.0.41

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 (240) hide show
  1. package/README.md +9 -3
  2. package/dist/components/active-graph/index.vue +10 -5
  3. package/dist/components/backtop/index.vue +75 -0
  4. package/dist/components/badge/index.vue +9 -7
  5. package/dist/components/book/index.vue +3 -3
  6. package/dist/components/browser/index.vue +2 -2
  7. package/dist/components/checkbox/index.vue +4 -3
  8. package/dist/components/checkbox-group/index.vue +1 -1
  9. package/dist/components/choicebox-group/index.vue +1 -1
  10. package/dist/components/command-menu/index.vue +124 -0
  11. package/dist/components/command-menu-group/index.vue +18 -0
  12. package/dist/components/command-menu-item/index.vue +13 -0
  13. package/dist/components/countdown/index.vue +2 -1
  14. package/dist/components/drawer/index.vue +26 -26
  15. package/dist/components/error/index.vue +2 -2
  16. package/dist/components/fader/index.vue +31 -17
  17. package/dist/components/grid/index.vue +2 -2
  18. package/dist/components/grid-item/index.vue +2 -2
  19. package/dist/components/hold-button/index.vue +1 -1
  20. package/dist/components/index.d.ts +7 -0
  21. package/dist/components/index.js +7 -0
  22. package/dist/components/input/index.vue +18 -10
  23. package/dist/components/intersection-observer/index.vue +5 -5
  24. package/dist/components/kbd/index.vue +21 -8
  25. package/dist/components/{intersection-observer/content.vue → keep-alive-container/index.vue} +3 -1
  26. package/dist/components/list/index.vue +100 -92
  27. package/dist/components/list-item/index.vue +35 -33
  28. package/dist/components/loading-bar/index.vue +149 -0
  29. package/dist/components/material/index.vue +8 -8
  30. package/dist/components/menu/index.vue +26 -16
  31. package/dist/components/message/index.vue +28 -18
  32. package/dist/components/modal/index.vue +32 -36
  33. package/dist/components/note/index.vue +1 -1
  34. package/dist/components/overlay/index.vue +77 -24
  35. package/dist/components/pagination/index.vue +2 -2
  36. package/dist/components/placeholder/index.vue +13 -6
  37. package/dist/components/popover/index.vue +97 -87
  38. package/dist/components/progress/index.vue +1 -1
  39. package/dist/components/radio/index.vue +4 -3
  40. package/dist/components/radio-group/index.vue +1 -1
  41. package/dist/components/scrollable/index.vue +161 -94
  42. package/dist/components/slider/index.vue +7 -7
  43. package/dist/components/stack/index.vue +4 -4
  44. package/dist/components/switch/index.vue +1 -1
  45. package/dist/components/text/index.vue +1 -1
  46. package/dist/components/theme-switcher/index.vue +6 -2
  47. package/dist/components/time-picker/index.vue +281 -0
  48. package/dist/components/tooltip/index.vue +7 -7
  49. package/dist/composables/index.d.ts +1 -0
  50. package/dist/composables/index.js +1 -0
  51. package/dist/composables/use-browser-observer.d.ts +5 -5
  52. package/dist/composables/use-color-scheme.d.ts +5 -1
  53. package/dist/composables/use-color-scheme.js +20 -1
  54. package/dist/composables/use-config-provider-context.d.ts +1 -1
  55. package/dist/composables/use-countdown.d.ts +6 -0
  56. package/dist/composables/use-countdown.js +21 -7
  57. package/dist/composables/use-delay-destroy.d.ts +4 -4
  58. package/dist/composables/use-delay-destroy.js +15 -11
  59. package/dist/composables/use-focus-trap.d.ts +2 -2
  60. package/dist/composables/use-focus-trap.js +6 -6
  61. package/dist/composables/use-loading-bar.d.ts +25 -0
  62. package/dist/composables/use-loading-bar.js +27 -0
  63. package/dist/composables/use-media-query.js +1 -1
  64. package/dist/composables/use-message.d.ts +4 -1
  65. package/dist/composables/use-message.js +18 -0
  66. package/dist/composables/use-pointer-gesture.d.ts +2 -2
  67. package/dist/composables/use-pointer-gesture.js +3 -3
  68. package/dist/composables/use-repeat-action.d.ts +2 -2
  69. package/dist/composables/use-repeat-action.js +5 -5
  70. package/dist/composables/use-virtual-list.d.ts +1 -1
  71. package/dist/contexts/avatar.d.ts +1 -1
  72. package/dist/contexts/carousel.d.ts +1 -1
  73. package/dist/contexts/checkbox.d.ts +1 -1
  74. package/dist/contexts/choicebox.d.ts +2 -2
  75. package/dist/contexts/collapse.d.ts +1 -1
  76. package/dist/contexts/list.d.ts +5 -6
  77. package/dist/contexts/list.js +3 -3
  78. package/dist/contexts/radio.d.ts +1 -1
  79. package/dist/contexts/resizable.d.ts +1 -1
  80. package/dist/contexts/switch.d.ts +2 -2
  81. package/dist/{components/carousel → dist/components/keep-alive-container}/index.vue.d.ts +1 -1
  82. package/dist/index.d.ts +1 -1
  83. package/dist/index.js +1 -1
  84. package/dist/locales/en-us.d.ts +15 -7
  85. package/dist/locales/en-us.js +17 -9
  86. package/dist/locales/zh-cn.d.ts +15 -7
  87. package/dist/locales/zh-cn.js +17 -9
  88. package/dist/{components → src/components}/active-graph/index.vue.d.ts +7 -5
  89. package/dist/{components → src/components}/avatar-group/index.vue.d.ts +1 -1
  90. package/dist/src/components/backtop/index.vue.d.ts +20 -0
  91. package/dist/{components → src/components}/badge/index.vue.d.ts +2 -1
  92. package/dist/{components → src/components}/book/index.vue.d.ts +1 -1
  93. package/dist/{components → src/components}/browser/index.vue.d.ts +1 -1
  94. package/dist/{components → src/components}/button/index.vue.d.ts +1 -1
  95. package/dist/{components/intersection-observer/content.vue.d.ts → src/components/carousel/index.vue.d.ts} +1 -1
  96. package/dist/{components → src/components}/carousel-group/index.vue.d.ts +1 -1
  97. package/dist/{components → src/components}/chip/index.vue.d.ts +1 -1
  98. package/dist/{components → src/components}/choicebox/index.vue.d.ts +1 -1
  99. package/dist/{components → src/components}/choicebox-group/index.vue.d.ts +1 -1
  100. package/dist/{components → src/components}/collapse/index.vue.d.ts +1 -1
  101. package/dist/{components → src/components}/collapse-group/index.vue.d.ts +1 -1
  102. package/dist/src/components/command-menu/index.vue.d.ts +39 -0
  103. package/dist/src/components/command-menu-group/index.vue.d.ts +16 -0
  104. package/dist/src/components/command-menu-item/index.vue.d.ts +12 -0
  105. package/dist/{components → src/components}/config-provider/index.vue.d.ts +1 -1
  106. package/dist/{components → src/components}/description/index.vue.d.ts +1 -1
  107. package/dist/{components → src/components}/drawer/index.vue.d.ts +19 -14
  108. package/dist/{components → src/components}/empty-state/index.vue.d.ts +1 -1
  109. package/dist/{components → src/components}/error/index.vue.d.ts +1 -1
  110. package/dist/src/components/fader/index.vue.d.ts +11 -0
  111. package/dist/{components → src/components}/gauge/index.vue.d.ts +1 -1
  112. package/dist/{components → src/components}/grid/index.vue.d.ts +1 -1
  113. package/dist/{components → src/components}/grid-item/index.vue.d.ts +1 -1
  114. package/dist/{components → src/components}/hold-button/index.vue.d.ts +1 -1
  115. package/dist/{components → src/components}/input/index.vue.d.ts +9 -4
  116. package/dist/{components → src/components}/intersection-observer/index.vue.d.ts +3 -3
  117. package/dist/{components → src/components}/kbd/index.vue.d.ts +8 -5
  118. package/dist/src/components/keep-alive-container/index.vue.d.ts +12 -0
  119. package/dist/{components → src/components}/link-button/index.vue.d.ts +1 -1
  120. package/dist/src/components/list/index.vue.d.ts +40 -0
  121. package/dist/{components → src/components}/list-item/index.vue.d.ts +4 -4
  122. package/dist/src/components/loading-bar/index.vue.d.ts +14 -0
  123. package/dist/{components → src/components}/loading-dots/index.vue.d.ts +1 -1
  124. package/dist/{components → src/components}/material/index.vue.d.ts +1 -1
  125. package/dist/{components → src/components}/menu/index.vue.d.ts +11 -7
  126. package/dist/{components → src/components}/message/index.vue.d.ts +13 -13
  127. package/dist/{components → src/components}/modal/index.vue.d.ts +19 -14
  128. package/dist/{components → src/components}/more-button/index.vue.d.ts +1 -1
  129. package/dist/{components → src/components}/note/index.vue.d.ts +1 -1
  130. package/dist/{components → src/components}/number-input/index.vue.d.ts +1 -1
  131. package/dist/{components → src/components}/overlay/index.vue.d.ts +3 -4
  132. package/dist/{components → src/components}/pagination/index.vue.d.ts +1 -1
  133. package/dist/{components → src/components}/pin-input/index.vue.d.ts +1 -1
  134. package/dist/src/components/placeholder/index.vue.d.ts +9 -0
  135. package/dist/{components → src/components}/popover/index.vue.d.ts +10 -8
  136. package/dist/{components → src/components}/progress/index.vue.d.ts +1 -1
  137. package/dist/{components → src/components}/radio/index.vue.d.ts +1 -1
  138. package/dist/{components → src/components}/radio-group/index.vue.d.ts +1 -1
  139. package/dist/{components → src/components}/resizable/index.vue.d.ts +1 -1
  140. package/dist/src/components/resizable-handle/index.vue.d.ts +2 -0
  141. package/dist/{components → src/components}/resizable-panel/index.vue.d.ts +1 -1
  142. package/dist/{components → src/components}/skeleton/index.vue.d.ts +1 -1
  143. package/dist/{components → src/components}/slider/index.vue.d.ts +1 -1
  144. package/dist/{components → src/components}/snippet/index.vue.d.ts +1 -1
  145. package/dist/src/components/spinner/index.vue.d.ts +2 -0
  146. package/dist/{components → src/components}/stack/index.vue.d.ts +1 -1
  147. package/dist/{components → src/components}/status-dot/index.vue.d.ts +1 -1
  148. package/dist/{components → src/components}/switch/index.vue.d.ts +1 -1
  149. package/dist/{components → src/components}/switch-group/index.vue.d.ts +1 -1
  150. package/dist/{components → src/components}/teleport/index.vue.d.ts +1 -1
  151. package/dist/{components → src/components}/text/index.vue.d.ts +1 -1
  152. package/dist/{components → src/components}/textarea/index.vue.d.ts +1 -1
  153. package/dist/{components → src/components}/theme-switcher/index.vue.d.ts +1 -1
  154. package/dist/src/components/time-picker/index.vue.d.ts +25 -0
  155. package/dist/{components → src/components}/toggle/index.vue.d.ts +1 -1
  156. package/dist/{components → src/components}/tooltip/index.vue.d.ts +3 -5
  157. package/dist/{components → src/components}/virtual-list/index.vue.d.ts +1 -1
  158. package/dist/src/composables/use-browser-observer.d.ts +12 -0
  159. package/dist/src/composables/use-color-scheme.d.ts +11 -0
  160. package/dist/src/composables/use-config-provider-context.d.ts +7 -0
  161. package/dist/src/composables/use-copy-click.d.ts +4 -0
  162. package/dist/src/composables/use-countdown.d.ts +60 -0
  163. package/dist/src/composables/use-delay-change.d.ts +7 -0
  164. package/dist/src/composables/use-delay-destroy.d.ts +13 -0
  165. package/dist/src/composables/use-focus-trap.d.ts +4 -0
  166. package/dist/src/composables/use-loading-bar.d.ts +25 -0
  167. package/dist/src/composables/use-media-query.d.ts +15 -0
  168. package/dist/src/composables/use-message.d.ts +33 -0
  169. package/dist/src/composables/use-model-value.d.ts +11 -0
  170. package/dist/src/composables/use-pointer-gesture.d.ts +180 -0
  171. package/dist/src/composables/use-repeat-action.d.ts +16 -0
  172. package/dist/src/composables/use-unique-id-context.d.ts +2 -0
  173. package/dist/src/composables/use-virtual-list.d.ts +16 -0
  174. package/dist/src/contexts/avatar.d.ts +2 -0
  175. package/dist/src/contexts/carousel.d.ts +13 -0
  176. package/dist/src/contexts/checkbox.d.ts +2 -0
  177. package/dist/src/contexts/choicebox.d.ts +4 -0
  178. package/dist/src/contexts/collapse.d.ts +8 -0
  179. package/dist/src/contexts/list.d.ts +8 -0
  180. package/dist/src/contexts/radio.d.ts +2 -0
  181. package/dist/src/contexts/resizable.d.ts +35 -0
  182. package/dist/src/contexts/switch.d.ts +4 -0
  183. package/dist/src/locales/en-us.d.ts +42 -0
  184. package/dist/src/plugins/dayjs-millisecond-token.d.ts +3 -0
  185. package/dist/src/types/components/time-picker.d.ts +4 -0
  186. package/dist/src/utils/context.d.ts +17 -0
  187. package/dist/src/utils/date.d.ts +26 -0
  188. package/dist/src/utils/debounce/index.d.ts +73 -0
  189. package/dist/src/utils/debounce.d.ts +1 -0
  190. package/dist/src/utils/dom.d.ts +40 -0
  191. package/dist/{utils/events.d.ts → src/utils/event.d.ts} +1 -0
  192. package/dist/src/utils/format.d.ts +25 -0
  193. package/dist/src/utils/get.d.ts +11 -0
  194. package/dist/src/utils/is.d.ts +4 -0
  195. package/dist/src/utils/ref.d.ts +5 -0
  196. package/dist/src/utils/regexp.d.ts +8 -0
  197. package/dist/src/utils/responsive.d.ts +3 -0
  198. package/dist/src/utils/throttle/index.d.ts +53 -0
  199. package/dist/src/utils/throttle.d.ts +1 -0
  200. package/dist/src/utils/uid.d.ts +1 -0
  201. package/dist/styles/styles.css +2 -2
  202. package/dist/styles/tw.css +18 -1
  203. package/dist/types/components/list.d.ts +4 -3
  204. package/dist/types/components/time-picker.d.ts +4 -0
  205. package/dist/types/components/time-picker.js +0 -0
  206. package/dist/types/shared/utils.d.ts +5 -2
  207. package/dist/utils/date.d.ts +3 -3
  208. package/dist/utils/debounce/compat.d.ts +143 -0
  209. package/dist/utils/debounce/compat.js +47 -0
  210. package/dist/utils/debounce/index.d.ts +73 -0
  211. package/dist/utils/debounce/index.js +60 -0
  212. package/dist/utils/debounce.d.ts +1 -73
  213. package/dist/utils/debounce.js +1 -60
  214. package/dist/utils/event.d.ts +9 -0
  215. package/dist/utils/{events.js → event.js} +3 -0
  216. package/dist/utils/format.d.ts +4 -1
  217. package/dist/utils/format.js +6 -0
  218. package/dist/utils/ref.d.ts +2 -5
  219. package/dist/utils/regexp.d.ts +4 -0
  220. package/dist/utils/regexp.js +4 -0
  221. package/dist/utils/responsive.d.ts +2 -1
  222. package/dist/utils/responsive.js +4 -1
  223. package/dist/utils/throttle/compat.d.ts +79 -0
  224. package/dist/utils/throttle/compat.js +9 -0
  225. package/dist/utils/throttle/index.d.ts +53 -0
  226. package/dist/utils/throttle/index.js +34 -0
  227. package/dist/utils/throttle.d.ts +1 -53
  228. package/dist/utils/throttle.js +1 -34
  229. package/dist/utils/uid.js +1 -1
  230. package/package.json +11 -11
  231. package/volar.d.ts +7 -0
  232. package/dist/components/fader/index.vue.d.ts +0 -11
  233. package/dist/components/list/index.vue.d.ts +0 -29
  234. package/dist/components/placeholder/index.vue.d.ts +0 -8
  235. package/dist/components/resizable-handle/index.vue.d.ts +0 -2
  236. package/dist/components/spinner/index.vue.d.ts +0 -2
  237. /package/dist/{components → src/components}/avatar/index.vue.d.ts +0 -0
  238. /package/dist/{components → src/components}/checkbox/index.vue.d.ts +0 -0
  239. /package/dist/{components → src/components}/checkbox-group/index.vue.d.ts +0 -0
  240. /package/dist/{components → src/components}/countdown/index.vue.d.ts +0 -0
@@ -7,7 +7,7 @@ import {
7
7
  getScrollElByContainer,
8
8
  getScrollPositions
9
9
  } from "../../utils/dom";
10
- import { off, on, optimizedOff, optimizedOn } from "../../utils/events";
10
+ import { optimizedOff, optimizedOn } from "../../utils/event";
11
11
  import { toArray } from "../../utils/format";
12
12
  import { isServer } from "../../utils/is";
13
13
  import { throttleByRaf } from "../../utils/throttle";
@@ -18,7 +18,6 @@ defineOptions({
18
18
  const props = defineProps({
19
19
  zIndex: { type: Number, required: false, default: 5 },
20
20
  offset: { type: Number, required: false, default: 10 },
21
- content: { type: String, required: false },
22
21
  visible: { type: Boolean, required: false },
23
22
  trigger: { type: [String, Array], required: false, default: () => ["hover"] },
24
23
  disabled: { type: Boolean, required: false },
@@ -33,18 +32,19 @@ const props = defineProps({
33
32
  autoPosition: { type: Boolean, required: false, default: true },
34
33
  scrollHidden: { type: Boolean, required: false, default: false },
35
34
  triggerClass: { type: [String, Array, Object], required: false },
36
- popoverClass: { type: [String, Array, Object], required: false },
35
+ wrapperClass: { type: [String, Array, Object], required: false },
36
+ contentClass: { type: [String, Array, Object], required: false },
37
37
  triggerStyle: { type: [Object, String], required: false },
38
- popoverStyle: { type: [Object, String], required: false },
38
+ contentStyle: { type: [Object, String], required: false },
39
39
  transitionName: { type: String, required: false },
40
- showTransition: { type: Boolean, required: false, default: true },
41
- hideTransition: { type: Boolean, required: false, default: true },
42
40
  minVisibleRatio: { type: Number, required: false, default: 0.88 },
43
41
  closeOnPressEscape: { type: Boolean, required: false, default: false },
44
42
  autoPositionThreshold: { type: Number, required: false, default: 30 },
45
- scrollHiddenThreshold: { type: Number, required: false, default: 150 }
43
+ scrollHiddenThreshold: { type: Number, required: false, default: 150 },
44
+ disabledShowTransition: { type: Boolean, required: false },
45
+ disabledHideTransition: { type: Boolean, required: false }
46
46
  });
47
- const emits = defineEmits(["show", "hide", "trigger-click", "trigger-keydown"]);
47
+ const emits = defineEmits(["show", "hide", "visible-change", "outside-click", "trigger-click", "trigger-keydown"]);
48
48
  const triggerRect = shallowRef();
49
49
  let viewportRect = null;
50
50
  let scrollContainer;
@@ -68,7 +68,7 @@ const {
68
68
  });
69
69
  const triggerMethods = computed(() => toArray(props.trigger));
70
70
  const computedTransitionName = computed(
71
- () => props.transitionName ?? `pxd-transition--popover-${localPosition.value.split("-")[0]}`
71
+ () => props.transitionName ?? "pxd-transition--fade"
72
72
  );
73
73
  let savedScrollTop = 0;
74
74
  const onContainerScroll = throttleByRaf(async (ev) => {
@@ -148,38 +148,58 @@ async function handleDirectionInvertIfNeed() {
148
148
  }
149
149
  }
150
150
  async function handlePopoverShow(immediate = false) {
151
+ if (showPopoverTimer) {
152
+ return;
153
+ }
154
+ getTriggerRect();
151
155
  await new Promise((resolve) => {
152
- getTriggerRect();
153
- clearTimeout(hidePopoverTimer);
154
- clearTimeout(showPopoverTimer);
156
+ if (hidePopoverTimer) {
157
+ clearTimeout(hidePopoverTimer);
158
+ hidePopoverTimer = null;
159
+ }
155
160
  showPopoverTimer = setTimeout(() => {
156
- localPosition.value = props.position;
157
- updateContentPosition();
158
- openPopover();
159
- resolve(true);
160
- emits("show");
161
+ showPopoverTimer = null;
162
+ resolve();
161
163
  }, immediate ? 0 : props.showDelay);
162
164
  });
165
+ localPosition.value = props.position;
166
+ updateContentPosition();
167
+ await openPopover();
168
+ emits("show");
169
+ emits("visible-change", true);
163
170
  savedScrollTop = getScrollElByContainer(scrollContainer).scrollTop;
164
- on(scrollContainer, "scroll", onContainerScroll, { passive: true });
171
+ optimizedOff(document, "click", onClickOutsideToHide);
172
+ optimizedOff(scrollContainer, "scroll", onContainerScroll, { passive: true });
173
+ optimizedOn(document, "click", onClickOutsideToHide);
174
+ optimizedOn(scrollContainer, "scroll", onContainerScroll, { passive: true });
165
175
  if (!props.autoPosition) {
166
176
  return;
167
177
  }
168
178
  handleDirectionInvertIfNeed();
169
179
  }
170
180
  async function handlePopoverHide(immediate = false) {
181
+ if (hidePopoverTimer) {
182
+ return;
183
+ }
184
+ if (!isRender.value) {
185
+ return;
186
+ }
171
187
  await new Promise((resolve) => {
172
- clearTimeout(showPopoverTimer);
173
- clearTimeout(hidePopoverTimer);
188
+ if (showPopoverTimer) {
189
+ clearTimeout(showPopoverTimer);
190
+ showPopoverTimer = null;
191
+ }
174
192
  hidePopoverTimer = setTimeout(() => {
175
- closePopover();
176
- resolve(true);
177
- emits("hide");
193
+ hidePopoverTimer = null;
194
+ resolve();
178
195
  }, immediate ? 0 : props.hideDelay);
179
196
  });
180
- off(scrollContainer, "scroll", onContainerScroll);
181
- off(document, "click", onClickOutsideToHide);
182
- off(document, "contextmenu", onTriggerContextmenu);
197
+ optimizedOff(document, "click", onClickOutsideToHide);
198
+ optimizedOff(document, "contextmenu", onTriggerContextmenu);
199
+ optimizedOff(scrollContainer, "scroll", onContainerScroll);
200
+ await closePopover();
201
+ emits("hide");
202
+ emits("visible-change", false);
183
203
  }
184
204
  async function onTriggerClick(ev) {
185
205
  if (props.disabled) {
@@ -190,12 +210,11 @@ async function onTriggerClick(ev) {
190
210
  return;
191
211
  }
192
212
  if (isVisible.value) {
193
- off(document, "click", onClickOutsideToHide);
213
+ optimizedOff(document, "click", onClickOutsideToHide);
194
214
  await handlePopoverHide();
195
215
  return;
196
216
  }
197
- on(document, "click", onClickOutsideToHide);
198
- await handlePopoverShow();
217
+ handlePopoverShow();
199
218
  }
200
219
  function onTriggerPointerEnter() {
201
220
  if (props.disabled) {
@@ -228,17 +247,23 @@ async function onTriggerContextmenu(ev) {
228
247
  ev.preventDefault();
229
248
  if (isVisible.value) {
230
249
  await handlePopoverHide();
231
- off(document, "click", onClickOutsideToHide);
232
- off(document, "contextmenu", onTriggerContextmenu);
250
+ optimizedOff(document, "click", onClickOutsideToHide);
251
+ optimizedOff(document, "contextmenu", onTriggerContextmenu);
233
252
  return;
234
253
  }
235
254
  await handlePopoverShow();
236
- on(document, "click", onClickOutsideToHide);
237
- on(document, "contextmenu", onTriggerContextmenu);
255
+ optimizedOff(document, "click", onClickOutsideToHide);
256
+ optimizedOff(document, "contextmenu", onTriggerContextmenu);
257
+ optimizedOn(document, "click", onClickOutsideToHide);
258
+ optimizedOn(document, "contextmenu", onTriggerContextmenu);
238
259
  }
239
260
  function onClickOutsideToHide(ev) {
261
+ if (!triggerMethods.value.includes("click") && !triggerMethods.value.includes("manual") && !triggerMethods.value.includes("contextmenu")) {
262
+ return;
263
+ }
240
264
  const target = ev.target;
241
265
  if (!triggerRef.value?.contains(target) && !wrapperRef.value?.contains(target)) {
266
+ emits("outside-click", ev);
242
267
  handlePopoverHide();
243
268
  }
244
269
  }
@@ -246,7 +271,7 @@ function onContentPointerEnter() {
246
271
  if (props.disabled) {
247
272
  return;
248
273
  }
249
- if (!props.enterable) {
274
+ if (!props.enterable || !isVisible.value) {
250
275
  return;
251
276
  }
252
277
  handlePopoverShow();
@@ -255,7 +280,7 @@ function onContentPointerLeave() {
255
280
  if (props.disabled) {
256
281
  return;
257
282
  }
258
- if (!triggerMethods.value.includes("hover")) {
283
+ if (props.enterable && !triggerMethods.value.includes("hover")) {
259
284
  return;
260
285
  }
261
286
  handlePopoverHide();
@@ -333,10 +358,10 @@ function updateContentPosition() {
333
358
  top,
334
359
  zIndex,
335
360
  "transform": `translate3d(${translateX}, ${translateY}, 0)`,
336
- "--c": arrowColor,
337
- "--o": `${offset}px`,
338
- "--mw": `${maxWidth}px`,
339
- "--ao": `${offset - 5}px`
361
+ "--popover-bg": arrowColor,
362
+ "--popover-offset": `${offset}px`,
363
+ "--popover-max-width": `${maxWidth}px`,
364
+ "--popover-arrow-offset": `${offset - 5}px`
340
365
  };
341
366
  }
342
367
  function applyAutoPosition(overlapping) {
@@ -430,8 +455,8 @@ watch(
430
455
  watch(
431
456
  () => [triggerRef.value, triggerMethods.value],
432
457
  ([newDom, newMethods], [oldDom, oldMethods]) => {
433
- updateTriggerEvents(oldMethods, oldDom, off);
434
- updateTriggerEvents(newMethods, newDom, on);
458
+ updateTriggerEvents(oldMethods, oldDom, optimizedOff);
459
+ updateTriggerEvents(newMethods, newDom, optimizedOn);
435
460
  }
436
461
  );
437
462
  onMounted(() => {
@@ -443,12 +468,10 @@ onMounted(() => {
443
468
  });
444
469
  onBeforeUnmount(() => {
445
470
  viewportRect = null;
446
- clearTimeout(showPopoverTimer);
447
- clearTimeout(hidePopoverTimer);
448
- off(document, "click", onClickOutsideToHide);
449
- off(document, "contextmenu", onTriggerContextmenu);
450
- off(scrollContainer, "scroll", onContainerScroll);
471
+ optimizedOff(document, "click", onClickOutsideToHide);
472
+ optimizedOff(document, "contextmenu", onTriggerContextmenu);
451
473
  optimizedOff(window, "resize", onResizeUpdatePosition);
474
+ optimizedOff(scrollContainer, "scroll", onContainerScroll);
452
475
  });
453
476
  defineExpose({
454
477
  show: handlePopoverShow,
@@ -457,37 +480,41 @@ defineExpose({
457
480
  </script>
458
481
 
459
482
  <template>
460
- <div class="pxd-popover relative inline-flex w-max">
483
+ <div class="pxd-popover relative inline-flex max-w-full">
461
484
  <div
462
485
  ref="triggerRef"
463
- class="pxd-popover--trigger active:select-none"
486
+ class="pxd-popover--trigger max-w-full active:select-none"
464
487
  :class="triggerClass"
465
488
  :style="triggerStyle"
466
489
  @contextmenu.prevent
467
- @click="onTriggerClick"
468
490
  @keydown="onTriggerKeydown"
491
+ @click="onTriggerClick"
469
492
  >
470
493
  <slot />
471
494
  </div>
472
495
 
473
496
  <PTeleport>
474
- <Transition mode="out-in" :name="computedTransitionName" appear :class="{ showTransition, hideTransition }">
497
+ <Transition
498
+ appear
499
+ mode="out-in"
500
+ :name="computedTransitionName"
501
+ :class="{ disabledShowTransition, disabledHideTransition }"
502
+ >
475
503
  <div
476
504
  v-if="isRender"
477
505
  v-show="isVisible"
478
506
  ref="wrapperRef"
507
+ :class="wrapperClass"
479
508
  :style="wrapperStyle"
480
509
  :data-enterable="enterable"
481
510
  :data-position="localPosition"
482
- class="pxd-popover--container sm:max-w-(--mw) absolute isolate w-max max-w-full data-[enterable=false]:pointer-events-none"
511
+ class="pxd-popover--container sm:max-w-(--popover-max-width) absolute isolate max-w-full data-[enterable=false]:pointer-events-none"
483
512
  @pointerenter="onContentPointerEnter"
484
513
  @pointerleave="onContentPointerLeave"
485
514
  >
486
515
  <i v-if="showArrow" class="pxd-popover--arrow absolute z-1" />
487
- <div class="pxd-popover--content" :class="popoverClass" :style="popoverStyle">
488
- <slot name="content">
489
- {{ content }}
490
- </slot>
516
+ <div class="pxd-popover--content" :class="contentClass" :style="contentStyle">
517
+ <slot name="content" />
491
518
  </div>
492
519
  </div>
493
520
  </Transition>
@@ -499,19 +526,19 @@ defineExpose({
499
526
  .pxd-popover--container {
500
527
 
501
528
  &[data-position^='top'] {
502
- padding-bottom: var(--o);
529
+ padding-bottom: var(--popover-offset);
503
530
  }
504
531
 
505
532
  &[data-position^='bottom'] {
506
- padding-top: var(--o);
533
+ padding-top: var(--popover-offset);
507
534
  }
508
535
 
509
536
  &[data-position^='left'] {
510
- padding-right: var(--o);
537
+ padding-right: var(--popover-offset);
511
538
  }
512
539
 
513
540
  &[data-position^='right'] {
514
- padding-left: var(--o);
541
+ padding-left: var(--popover-offset);
515
542
  }
516
543
 
517
544
  .pxd-popover--arrow {
@@ -521,33 +548,33 @@ defineExpose({
521
548
  &[data-position="top"] .pxd-popover--arrow,
522
549
  &[data-position="top-start"] .pxd-popover--arrow,
523
550
  &[data-position="top-end"] .pxd-popover--arrow {
524
- bottom: var(--ao);
551
+ bottom: var(--popover-arrow-offset);
525
552
  border-width: 6px 6px 0;
526
- border-color: var(--c) transparent transparent;
553
+ border-color: var(--popover-bg) transparent transparent;
527
554
  }
528
555
 
529
556
  &[data-position='bottom'] .pxd-popover--arrow,
530
557
  &[data-position='bottom-start'] .pxd-popover--arrow,
531
558
  &[data-position='bottom-end'] .pxd-popover--arrow {
532
- top: var(--ao);
559
+ top: var(--popover-arrow-offset);
533
560
  border-width: 0 6px 6px;
534
- border-color: transparent transparent var(--c);
561
+ border-color: transparent transparent var(--popover-bg);
535
562
  }
536
563
 
537
564
  &[data-position='left'] .pxd-popover--arrow,
538
565
  &[data-position='left-start'] .pxd-popover--arrow,
539
566
  &[data-position='left-end'] .pxd-popover--arrow {
540
- right: var(--ao);
567
+ right: var(--popover-arrow-offset);
541
568
  border-width: 6px 0 6px 6px;
542
- border-color: transparent transparent transparent var(--c);
569
+ border-color: transparent transparent transparent var(--popover-bg);
543
570
  }
544
571
 
545
572
  &[data-position='right'] .pxd-popover--arrow,
546
573
  &[data-position='right-start'] .pxd-popover--arrow,
547
574
  &[data-position='right-end'] .pxd-popover--arrow {
548
- left: var(--ao);
575
+ left: var(--popover-arrow-offset);
549
576
  border-width: 6px 6px 6px 0;
550
- border-color: transparent var(--c) transparent transparent;
577
+ border-color: transparent var(--popover-bg) transparent transparent;
551
578
  }
552
579
 
553
580
  &[data-position='top'] .pxd-popover--arrow,
@@ -583,25 +610,8 @@ defineExpose({
583
610
  }
584
611
  }
585
612
 
586
- .showTransition.pxd-transition--popover-top-enter-active,
587
- .hideTransition.pxd-transition--popover-top-leave-active,
588
- .showTransition.pxd-transition--popover-bottom-enter-active,
589
- .hideTransition.pxd-transition--popover-bottom-leave-active,
590
- .showTransition.pxd-transition--popover-left-enter-active,
591
- .hideTransition.pxd-transition--popover-left-leave-active,
592
- .showTransition.pxd-transition--popover-right-enter-active,
593
- .hideTransition.pxd-transition--popover-right-leave-active {
594
- transition: opacity var(--default-transition-duration) var(--default-transition-timing-function);
595
- }
596
-
597
- .showTransition.pxd-transition--popover-top-enter-from,
598
- .hideTransition.pxd-transition--popover-top-leave-to,
599
- .showTransition.pxd-transition--popover-bottom-enter-from,
600
- .hideTransition.pxd-transition--popover-bottom-leave-to,
601
- .showTransition.pxd-transition--popover-left-enter-from,
602
- .hideTransition.pxd-transition--popover-left-leave-to,
603
- .showTransition.pxd-transition--popover-right-enter-from,
604
- .hideTransition.pxd-transition--popover-right-leave-to {
605
- opacity: 0;
613
+ .disabledShowTransition.pxd-transition--fade-enter-active,
614
+ .disabledHideTransition.pxd-transition--fade-leave-active {
615
+ --default-transition-duration: 0 !important
606
616
  }
607
617
  </style>
@@ -48,7 +48,7 @@ const computedLabel = computed(() => {
48
48
  return false;
49
49
  });
50
50
  const computedClass = computed(() => {
51
- const classes = ["pxd-progress-bar flex-1 overflow-hidden rounded-full bg-gray-200", getFallbackValue(props.size, SIZES, config.size)];
51
+ const classes = ["pxd-progress-bar flex-1 shrink-0 overflow-hidden rounded-full bg-gray-200", getFallbackValue(props.size, SIZES, config.size)];
52
52
  return classes.join(" ");
53
53
  });
54
54
  const computedColors = computed(() => {
@@ -51,8 +51,9 @@ function onChangeValue() {
51
51
  <label
52
52
  role="radio"
53
53
  :aria-checked="isChecked"
54
- class="pxd-radio group/radio gap-2 inline-flex touch-manipulation items-center"
55
- :class="{ 'is-disabled cursor-not-allowed text-gray-500': computedDisabled }"
54
+ :data-disabled="computedDisabled"
55
+ class="pxd-radio group/radio gap-2 inline-flex max-w-full cursor-pointer touch-manipulation items-center data-[disabled=true]:cursor-not-allowed"
56
+ :class="{ 'is-disabled text-gray-500': computedDisabled }"
56
57
  :for="uniqueId"
57
58
  >
58
59
  <input
@@ -69,7 +70,7 @@ function onChangeValue() {
69
70
 
70
71
  <span aria-hidden="true" :class="computedInnerClasses" />
71
72
 
72
- <span class="text-sm flex-1 empty:hidden">
73
+ <span class="text-sm flex-1 shrink-0 empty:hidden">
73
74
  <slot>
74
75
  {{ label }}
75
76
  </slot>
@@ -25,7 +25,7 @@ provideRadioGroupContext(props);
25
25
  </script>
26
26
 
27
27
  <template>
28
- <PStack class="pxd-radio-group w-max" role="radiogroup" aria-label="Radio Group" v-bind="$attrs">
28
+ <PStack class="pxd-radio-group" role="radiogroup" aria-label="Radio Group" v-bind="$attrs">
29
29
  <slot>
30
30
  <PRadio
31
31
  v-for="option in options"