pxd 0.0.40 → 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 (101) hide show
  1. package/README.md +9 -3
  2. package/dist/components/active-graph/index.vue +9 -4
  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 +2 -2
  6. package/dist/components/browser/index.vue +1 -1
  7. package/dist/components/checkbox/index.vue +1 -1
  8. package/dist/components/command-menu/index.vue +15 -24
  9. package/dist/components/command-menu-item/index.vue +5 -15
  10. package/dist/components/countdown/index.vue +2 -1
  11. package/dist/components/drawer/index.vue +2 -2
  12. package/dist/components/error/index.vue +1 -1
  13. package/dist/components/fader/index.vue +24 -11
  14. package/dist/components/index.d.ts +3 -0
  15. package/dist/components/index.js +3 -0
  16. package/dist/components/input/index.vue +18 -10
  17. package/dist/components/intersection-observer/index.vue +3 -3
  18. package/dist/components/kbd/index.vue +7 -6
  19. package/dist/components/{intersection-observer/content.vue → keep-alive-container/index.vue} +3 -1
  20. package/dist/components/list/index.vue +4 -4
  21. package/dist/components/list-item/index.vue +21 -8
  22. package/dist/components/loading-bar/index.vue +11 -18
  23. package/dist/components/menu/index.vue +15 -15
  24. package/dist/components/message/index.vue +9 -9
  25. package/dist/components/modal/index.vue +8 -10
  26. package/dist/components/note/index.vue +1 -1
  27. package/dist/components/overlay/index.vue +71 -19
  28. package/dist/components/popover/index.vue +76 -74
  29. package/dist/components/progress/index.vue +1 -1
  30. package/dist/components/radio/index.vue +1 -1
  31. package/dist/components/scrollable/index.vue +43 -24
  32. package/dist/components/slider/index.vue +7 -7
  33. package/dist/components/switch/index.vue +1 -1
  34. package/dist/components/time-picker/index.vue +281 -0
  35. package/dist/components/tooltip/index.vue +1 -1
  36. package/dist/composables/use-browser-observer.d.ts +4 -4
  37. package/dist/composables/use-countdown.d.ts +6 -0
  38. package/dist/composables/use-countdown.js +21 -7
  39. package/dist/composables/use-delay-destroy.d.ts +2 -2
  40. package/dist/composables/use-delay-destroy.js +13 -9
  41. package/dist/composables/use-focus-trap.d.ts +2 -2
  42. package/dist/composables/use-focus-trap.js +5 -5
  43. package/dist/composables/use-pointer-gesture.d.ts +2 -2
  44. package/dist/composables/use-pointer-gesture.js +1 -1
  45. package/dist/composables/use-repeat-action.d.ts +2 -2
  46. package/dist/composables/use-repeat-action.js +5 -5
  47. package/dist/contexts/list.d.ts +1 -0
  48. package/dist/contexts/list.js +4 -0
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.js +1 -1
  51. package/dist/locales/en-us.d.ts +12 -7
  52. package/dist/locales/en-us.js +14 -9
  53. package/dist/locales/zh-cn.d.ts +12 -7
  54. package/dist/locales/zh-cn.js +14 -9
  55. package/dist/src/components/active-graph/index.vue.d.ts +6 -4
  56. package/dist/src/components/backtop/index.vue.d.ts +20 -0
  57. package/dist/src/components/badge/index.vue.d.ts +1 -0
  58. package/dist/src/components/command-menu-item/index.vue.d.ts +11 -9
  59. package/dist/src/components/drawer/index.vue.d.ts +2 -2
  60. package/dist/src/components/fader/index.vue.d.ts +2 -3
  61. package/dist/src/components/input/index.vue.d.ts +9 -4
  62. package/dist/src/components/kbd/index.vue.d.ts +7 -5
  63. package/dist/src/components/keep-alive-container/index.vue.d.ts +12 -0
  64. package/dist/src/components/menu/index.vue.d.ts +2 -2
  65. package/dist/src/components/message/index.vue.d.ts +5 -5
  66. package/dist/src/components/modal/index.vue.d.ts +2 -2
  67. package/dist/src/components/overlay/index.vue.d.ts +1 -0
  68. package/dist/src/components/popover/index.vue.d.ts +4 -5
  69. package/dist/src/components/time-picker/index.vue.d.ts +25 -0
  70. package/dist/src/composables/use-browser-observer.d.ts +4 -4
  71. package/dist/src/composables/use-countdown.d.ts +6 -0
  72. package/dist/src/composables/use-delay-destroy.d.ts +2 -2
  73. package/dist/src/composables/use-focus-trap.d.ts +2 -2
  74. package/dist/src/composables/use-pointer-gesture.d.ts +2 -2
  75. package/dist/src/composables/use-repeat-action.d.ts +2 -2
  76. package/dist/src/contexts/list.d.ts +1 -0
  77. package/dist/src/locales/en-us.d.ts +12 -7
  78. package/dist/src/types/components/time-picker.d.ts +4 -0
  79. package/dist/src/utils/event.d.ts +1 -0
  80. package/dist/src/utils/format.d.ts +1 -0
  81. package/dist/src/utils/ref.d.ts +2 -5
  82. package/dist/src/utils/regexp.d.ts +4 -0
  83. package/dist/styles/styles.css +1 -1
  84. package/dist/styles/tw.css +14 -0
  85. package/dist/types/components/time-picker.d.ts +4 -0
  86. package/dist/types/components/time-picker.js +0 -0
  87. package/dist/types/shared/utils.d.ts +5 -2
  88. package/dist/utils/event.d.ts +1 -0
  89. package/dist/utils/event.js +3 -0
  90. package/dist/utils/format.d.ts +1 -0
  91. package/dist/utils/format.js +3 -0
  92. package/dist/utils/ref.d.ts +2 -5
  93. package/dist/utils/regexp.d.ts +4 -0
  94. package/dist/utils/regexp.js +4 -0
  95. package/dist/utils/uid.js +1 -1
  96. package/package.json +7 -7
  97. package/volar.d.ts +3 -0
  98. package/dist/contexts/command-menu.d.ts +0 -6
  99. package/dist/contexts/command-menu.js +0 -5
  100. package/dist/src/contexts/command-menu.d.ts +0 -6
  101. /package/dist/{src/components/intersection-observer/content.vue.d.ts → dist/components/keep-alive-container/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/event";
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 },
@@ -38,14 +37,14 @@ const props = defineProps({
38
37
  triggerStyle: { type: [Object, String], required: false },
39
38
  contentStyle: { type: [Object, String], required: false },
40
39
  transitionName: { type: String, required: false },
41
- showTransition: { type: Boolean, required: false, default: true },
42
- hideTransition: { type: Boolean, required: false, default: true },
43
40
  minVisibleRatio: { type: Number, required: false, default: 0.88 },
44
41
  closeOnPressEscape: { type: Boolean, required: false, default: false },
45
42
  autoPositionThreshold: { type: Number, required: false, default: 30 },
46
- 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 }
47
46
  });
48
- const emits = defineEmits(["show", "hide", "visible-change", "trigger-click", "trigger-keydown"]);
47
+ const emits = defineEmits(["show", "hide", "visible-change", "outside-click", "trigger-click", "trigger-keydown"]);
49
48
  const triggerRect = shallowRef();
50
49
  let viewportRect = null;
51
50
  let scrollContainer;
@@ -69,7 +68,7 @@ const {
69
68
  });
70
69
  const triggerMethods = computed(() => toArray(props.trigger));
71
70
  const computedTransitionName = computed(
72
- () => props.transitionName ?? `pxd-transition--popover-${localPosition.value.split("-")[0]}`
71
+ () => props.transitionName ?? "pxd-transition--fade"
73
72
  );
74
73
  let savedScrollTop = 0;
75
74
  const onContainerScroll = throttleByRaf(async (ev) => {
@@ -149,36 +148,58 @@ async function handleDirectionInvertIfNeed() {
149
148
  }
150
149
  }
151
150
  async function handlePopoverShow(immediate = false) {
151
+ if (showPopoverTimer) {
152
+ return;
153
+ }
154
+ getTriggerRect();
152
155
  await new Promise((resolve) => {
153
- getTriggerRect();
154
- clearTimeout(hidePopoverTimer);
155
- clearTimeout(showPopoverTimer);
156
+ if (hidePopoverTimer) {
157
+ clearTimeout(hidePopoverTimer);
158
+ hidePopoverTimer = null;
159
+ }
156
160
  showPopoverTimer = setTimeout(() => {
157
- localPosition.value = props.position;
158
- updateContentPosition();
159
- openPopover();
160
- resolve(true);
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);
193
+ hidePopoverTimer = null;
194
+ resolve();
177
195
  }, immediate ? 0 : props.hideDelay);
178
196
  });
179
- off(scrollContainer, "scroll", onContainerScroll);
180
- off(document, "click", onClickOutsideToHide);
181
- 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);
182
203
  }
183
204
  async function onTriggerClick(ev) {
184
205
  if (props.disabled) {
@@ -189,12 +210,11 @@ async function onTriggerClick(ev) {
189
210
  return;
190
211
  }
191
212
  if (isVisible.value) {
192
- off(document, "click", onClickOutsideToHide);
213
+ optimizedOff(document, "click", onClickOutsideToHide);
193
214
  await handlePopoverHide();
194
215
  return;
195
216
  }
196
- on(document, "click", onClickOutsideToHide);
197
- await handlePopoverShow();
217
+ handlePopoverShow();
198
218
  }
199
219
  function onTriggerPointerEnter() {
200
220
  if (props.disabled) {
@@ -227,17 +247,23 @@ async function onTriggerContextmenu(ev) {
227
247
  ev.preventDefault();
228
248
  if (isVisible.value) {
229
249
  await handlePopoverHide();
230
- off(document, "click", onClickOutsideToHide);
231
- off(document, "contextmenu", onTriggerContextmenu);
250
+ optimizedOff(document, "click", onClickOutsideToHide);
251
+ optimizedOff(document, "contextmenu", onTriggerContextmenu);
232
252
  return;
233
253
  }
234
254
  await handlePopoverShow();
235
- on(document, "click", onClickOutsideToHide);
236
- on(document, "contextmenu", onTriggerContextmenu);
255
+ optimizedOff(document, "click", onClickOutsideToHide);
256
+ optimizedOff(document, "contextmenu", onTriggerContextmenu);
257
+ optimizedOn(document, "click", onClickOutsideToHide);
258
+ optimizedOn(document, "contextmenu", onTriggerContextmenu);
237
259
  }
238
260
  function onClickOutsideToHide(ev) {
261
+ if (!triggerMethods.value.includes("click") && !triggerMethods.value.includes("manual") && !triggerMethods.value.includes("contextmenu")) {
262
+ return;
263
+ }
239
264
  const target = ev.target;
240
265
  if (!triggerRef.value?.contains(target) && !wrapperRef.value?.contains(target)) {
266
+ emits("outside-click", ev);
241
267
  handlePopoverHide();
242
268
  }
243
269
  }
@@ -245,7 +271,7 @@ function onContentPointerEnter() {
245
271
  if (props.disabled) {
246
272
  return;
247
273
  }
248
- if (!props.enterable) {
274
+ if (!props.enterable || !isVisible.value) {
249
275
  return;
250
276
  }
251
277
  handlePopoverShow();
@@ -254,7 +280,7 @@ function onContentPointerLeave() {
254
280
  if (props.disabled) {
255
281
  return;
256
282
  }
257
- if (!triggerMethods.value.includes("hover")) {
283
+ if (props.enterable && !triggerMethods.value.includes("hover")) {
258
284
  return;
259
285
  }
260
286
  handlePopoverHide();
@@ -426,19 +452,11 @@ watch(
426
452
  }
427
453
  }
428
454
  );
429
- watch(() => isVisible.value, (visible) => {
430
- emits("visible-change", visible);
431
- if (visible) {
432
- emits("show");
433
- } else {
434
- emits("hide");
435
- }
436
- });
437
455
  watch(
438
456
  () => [triggerRef.value, triggerMethods.value],
439
457
  ([newDom, newMethods], [oldDom, oldMethods]) => {
440
- updateTriggerEvents(oldMethods, oldDom, off);
441
- updateTriggerEvents(newMethods, newDom, on);
458
+ updateTriggerEvents(oldMethods, oldDom, optimizedOff);
459
+ updateTriggerEvents(newMethods, newDom, optimizedOn);
442
460
  }
443
461
  );
444
462
  onMounted(() => {
@@ -450,12 +468,10 @@ onMounted(() => {
450
468
  });
451
469
  onBeforeUnmount(() => {
452
470
  viewportRect = null;
453
- clearTimeout(showPopoverTimer);
454
- clearTimeout(hidePopoverTimer);
455
- off(document, "click", onClickOutsideToHide);
456
- off(document, "contextmenu", onTriggerContextmenu);
457
- off(scrollContainer, "scroll", onContainerScroll);
471
+ optimizedOff(document, "click", onClickOutsideToHide);
472
+ optimizedOff(document, "contextmenu", onTriggerContextmenu);
458
473
  optimizedOff(window, "resize", onResizeUpdatePosition);
474
+ optimizedOff(scrollContainer, "scroll", onContainerScroll);
459
475
  });
460
476
  defineExpose({
461
477
  show: handlePopoverShow,
@@ -464,21 +480,26 @@ defineExpose({
464
480
  </script>
465
481
 
466
482
  <template>
467
- <div class="pxd-popover relative inline-flex w-max">
483
+ <div class="pxd-popover relative inline-flex max-w-full">
468
484
  <div
469
485
  ref="triggerRef"
470
- class="pxd-popover--trigger active:select-none"
486
+ class="pxd-popover--trigger max-w-full active:select-none"
471
487
  :class="triggerClass"
472
488
  :style="triggerStyle"
473
489
  @contextmenu.prevent
474
- @click="onTriggerClick"
475
490
  @keydown="onTriggerKeydown"
491
+ @click="onTriggerClick"
476
492
  >
477
493
  <slot />
478
494
  </div>
479
495
 
480
496
  <PTeleport>
481
- <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
+ >
482
503
  <div
483
504
  v-if="isRender"
484
505
  v-show="isVisible"
@@ -487,15 +508,13 @@ defineExpose({
487
508
  :style="wrapperStyle"
488
509
  :data-enterable="enterable"
489
510
  :data-position="localPosition"
490
- class="pxd-popover--container sm:max-w-(--popover-max-width) 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"
491
512
  @pointerenter="onContentPointerEnter"
492
513
  @pointerleave="onContentPointerLeave"
493
514
  >
494
515
  <i v-if="showArrow" class="pxd-popover--arrow absolute z-1" />
495
516
  <div class="pxd-popover--content" :class="contentClass" :style="contentStyle">
496
- <slot name="content">
497
- {{ content }}
498
- </slot>
517
+ <slot name="content" />
499
518
  </div>
500
519
  </div>
501
520
  </Transition>
@@ -591,25 +610,8 @@ defineExpose({
591
610
  }
592
611
  }
593
612
 
594
- .showTransition.pxd-transition--popover-top-enter-active,
595
- .hideTransition.pxd-transition--popover-top-leave-active,
596
- .showTransition.pxd-transition--popover-bottom-enter-active,
597
- .hideTransition.pxd-transition--popover-bottom-leave-active,
598
- .showTransition.pxd-transition--popover-left-enter-active,
599
- .hideTransition.pxd-transition--popover-left-leave-active,
600
- .showTransition.pxd-transition--popover-right-enter-active,
601
- .hideTransition.pxd-transition--popover-right-leave-active {
602
- transition: opacity var(--default-transition-duration) var(--default-transition-timing-function);
603
- }
604
-
605
- .showTransition.pxd-transition--popover-top-enter-from,
606
- .hideTransition.pxd-transition--popover-top-leave-to,
607
- .showTransition.pxd-transition--popover-bottom-enter-from,
608
- .hideTransition.pxd-transition--popover-bottom-leave-to,
609
- .showTransition.pxd-transition--popover-left-enter-from,
610
- .hideTransition.pxd-transition--popover-left-leave-to,
611
- .showTransition.pxd-transition--popover-right-enter-from,
612
- .hideTransition.pxd-transition--popover-right-leave-to {
613
- opacity: 0;
613
+ .disabledShowTransition.pxd-transition--fade-enter-active,
614
+ .disabledHideTransition.pxd-transition--fade-leave-active {
615
+ --default-transition-duration: 0 !important
614
616
  }
615
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(() => {
@@ -70,7 +70,7 @@ function onChangeValue() {
70
70
 
71
71
  <span aria-hidden="true" :class="computedInnerClasses" />
72
72
 
73
- <span class="text-sm flex-1 empty:hidden">
73
+ <span class="text-sm flex-1 shrink-0 empty:hidden">
74
74
  <slot>
75
75
  {{ label }}
76
76
  </slot>
@@ -1,7 +1,7 @@
1
1
  <script setup>
2
2
  import { computed, onBeforeUnmount, onMounted, ref, shallowRef } from "vue";
3
3
  import { useResizeObserver } from "../../composables/use-browser-observer";
4
- import { off, on, once } from "../../utils/event";
4
+ import { once, optimizedOff, optimizedOn } from "../../utils/event";
5
5
  import { isServer } from "../../utils/is";
6
6
  import { throttleByRaf } from "../../utils/throttle";
7
7
  import PFader from "../fader/index.vue";
@@ -10,16 +10,16 @@ defineOptions({
10
10
  });
11
11
  const props = defineProps({
12
12
  fader: { type: Boolean, required: false, default: true },
13
- faderSize: { type: Number, required: false, default: 16 },
13
+ faderSize: { type: Number, required: false },
14
14
  faderColor: { type: String, required: false },
15
15
  faderDirection: { type: String, required: false },
16
16
  scrollbar: { type: Boolean, required: false, default: true },
17
17
  wrapperClass: { type: [String, Array, Object], required: false },
18
18
  contentClass: { type: [String, Array, Object], required: false },
19
19
  contentStyle: { type: [Object, String], required: false },
20
- scrollbarSize: { type: Number, required: false, default: 6 },
21
- scrollbarColor: { type: String, required: false, default: "var(--color-gray-alpha-300)" },
22
- scrollbarHoverColor: { type: String, required: false, default: "var(--color-gray-alpha-500)" },
20
+ scrollbarSize: { type: Number, required: false },
21
+ scrollbarColor: { type: String, required: false },
22
+ scrollbarHoverColor: { type: String, required: false },
23
23
  loading: { type: Boolean, required: false },
24
24
  endThreshold: { type: Number, required: false, default: 10 }
25
25
  });
@@ -43,7 +43,7 @@ const scrollInfo = ref({
43
43
  });
44
44
  const computedStyle = computed(() => {
45
45
  return {
46
- "--scrollbar-size": `${props.scrollbarSize}px`,
46
+ "--scrollbar-size": props.scrollbarSize,
47
47
  "--scrollbar-color": props.scrollbarColor,
48
48
  "--scrollbar-hover-color": props.scrollbarHoverColor
49
49
  };
@@ -160,7 +160,7 @@ function startDragVertical(e) {
160
160
  startClientPos: e.clientY,
161
161
  startThumbPos: scrollInfo.value.verticalThumbTop
162
162
  };
163
- on(document, "mousemove", onDragMove);
163
+ optimizedOn(document, "mousemove", onDragMove);
164
164
  once(document, "mouseup", onEndDrag);
165
165
  }
166
166
  function startDragHorizontal(e) {
@@ -175,7 +175,7 @@ function startDragHorizontal(e) {
175
175
  startClientPos: e.clientX,
176
176
  startThumbPos: scrollInfo.value.horizontalThumbLeft
177
177
  };
178
- on(document, "mousemove", onDragMove);
178
+ optimizedOn(document, "mousemove", onDragMove);
179
179
  once(document, "mouseup", onEndDrag);
180
180
  }
181
181
  function onDragMove(e) {
@@ -210,7 +210,7 @@ function onEndDrag(ev) {
210
210
  ev.stopPropagation();
211
211
  dragState.isDragging = false;
212
212
  dragState.direction = null;
213
- off(document, "mousemove", onDragMove);
213
+ optimizedOff(document, "mousemove", onDragMove);
214
214
  throttledUpdate.cancel();
215
215
  requestAnimationFrame(updateScrollbarMetrics);
216
216
  }
@@ -230,13 +230,13 @@ onMounted(async () => {
230
230
  if (!props.scrollbar && !props.fader) {
231
231
  return;
232
232
  }
233
- on(window, "resize", updateScrollbarMetrics, { passive: true });
233
+ optimizedOn(window, "resize", updateScrollbarMetrics, { passive: true });
234
234
  requestAnimationFrame(updateScrollbarMetrics);
235
235
  });
236
236
  onBeforeUnmount(() => {
237
- off(window, "resize", updateScrollbarMetrics);
238
- off(document, "mousemove", onDragMove);
239
- off(document, "mouseup", onEndDrag);
237
+ optimizedOff(window, "resize", updateScrollbarMetrics);
238
+ optimizedOff(document, "mousemove", onDragMove);
239
+ optimizedOff(document, "mouseup", onEndDrag);
240
240
  throttledUpdate.cancel();
241
241
  });
242
242
  defineExpose({
@@ -256,7 +256,7 @@ defineExpose({
256
256
  ref="contentRef"
257
257
  :class="contentClass"
258
258
  :style="contentStyle"
259
- class="pxd-scrollable--content relative scrollbar-hidden max-h-full flex-1 overflow-scroll"
259
+ class="pxd-scrollable--content relative scrollbar-hidden max-h-full flex-1 shrink-0 overflow-scroll"
260
260
  @scroll.passive="onContainerScroll"
261
261
  >
262
262
  <slot />
@@ -272,28 +272,47 @@ defineExpose({
272
272
 
273
273
  <template v-if="scrollbar">
274
274
  <div
275
- v-if="scrollInfo.isScrollableY"
275
+ v-if="scrollInfo.isScrollableX"
276
276
  aria-hidden="true"
277
- class="pxd-scrollable--scrollbar-y top-0 right-0 bottom-0 absolute w-(--scrollbar-size) touch-none opacity-(--o) select-none active:opacity-100 motion-safe:transition-opacity"
277
+ class="pxd-scrollable--scrollbar-x left-0 right-0 bottom-0 absolute touch-none opacity-(--o) select-none active:opacity-100 motion-safe:transition-opacity"
278
278
  >
279
279
  <div
280
- class="pxd-scrollable--thumb absolute w-(--scrollbar-size) rounded-full bg-(--scrollbar-color) hover:bg-(--scrollbar-hover-color) hover:will-change-transform active:bg-(--scrollbar-hover-color) active:opacity-100 motion-safe:transition-colors"
281
- :style="verticalThumbStyle"
282
- @mousedown="startDragVertical"
280
+ class="pxd-scrollable--thumb h-inherit rounded-full hover:will-change-transform active:opacity-100 motion-safe:transition-colors"
281
+ :style="horizontalThumbStyle"
282
+ @mousedown="startDragHorizontal"
283
283
  />
284
284
  </div>
285
285
 
286
286
  <div
287
- v-if="scrollInfo.isScrollableX"
287
+ v-if="scrollInfo.isScrollableY"
288
288
  aria-hidden="true"
289
- class="pxd-scrollable--scrollbar-x left-0 right-0 bottom-0 absolute h-(--scrollbar-size) touch-none opacity-(--o) select-none active:opacity-100 motion-safe:transition-opacity"
289
+ class="pxd-scrollable--scrollbar-y top-0 right-0 bottom-0 absolute touch-none opacity-(--o) select-none active:opacity-100 motion-safe:transition-opacity"
290
290
  >
291
291
  <div
292
- class="pxd-scrollable--thumb absolute h-(--scrollbar-size) rounded-full bg-(--scrollbar-color) hover:bg-(--scrollbar-hover-color) hover:will-change-transform active:bg-(--scrollbar-hover-color) active:opacity-100 motion-safe:transition-colors"
293
- :style="horizontalThumbStyle"
294
- @mousedown="startDragHorizontal"
292
+ class="pxd-scrollable--thumb w-inherit rounded-full hover:will-change-transform active:opacity-100 motion-safe:transition-colors"
293
+ :style="verticalThumbStyle"
294
+ @mousedown="startDragVertical"
295
295
  />
296
296
  </div>
297
297
  </template>
298
298
  </div>
299
299
  </template>
300
+
301
+ <style lang="postcss">
302
+ .pxd-scrollable--scrollbar-x {
303
+ height: calc(var(--scrollbar-size, 6) * 1px);
304
+ }
305
+
306
+ .pxd-scrollable--scrollbar-y {
307
+ width: calc(var(--scrollbar-size, 6) * 1px);
308
+ }
309
+
310
+ .pxd-scrollable--thumb {
311
+ background-color: var(--scrollbar-color, var(--color-gray-alpha-300));
312
+
313
+ &:hover,
314
+ &:active {
315
+ background-color: var(--scrollbar-hover-color, var(--color-gray-alpha-500));
316
+ }
317
+ }
318
+ </style>
@@ -2,7 +2,7 @@
2
2
  import { computed, onBeforeUnmount, shallowRef } from "vue";
3
3
  import { useConfigProvider } from "../../composables/use-config-provider-context";
4
4
  import { useModelValue } from "../../composables/use-model-value";
5
- import { off, on, once } from "../../utils/event";
5
+ import { once, optimizedOff, optimizedOn } from "../../utils/event";
6
6
  import { getFallbackValue } from "../../utils/get";
7
7
  defineOptions({
8
8
  name: "PSlider",
@@ -134,9 +134,9 @@ function startDragging(ev, thumb) {
134
134
  activeThumb.value = thumb;
135
135
  lastClientX = ev.clientX;
136
136
  updateValueFromPosition(ev.clientX);
137
- on(document, "pointermove", handleMove, { passive: false });
138
137
  once(document, "pointerup", endDragging);
139
138
  once(document, "pointercancel", endDragging);
139
+ optimizedOn(document, "pointermove", handleMove, { passive: false });
140
140
  }
141
141
  function handleMove(ev) {
142
142
  if (!isDragging || props.disabled) {
@@ -154,8 +154,8 @@ function endDragging() {
154
154
  cancelAnimationFrame(animationFrameId);
155
155
  animationFrameId = null;
156
156
  }
157
- off(document, "pointermove", handleMove);
158
- off(document, "pointercancel", endDragging);
157
+ optimizedOff(document, "pointermove", handleMove);
158
+ optimizedOff(document, "pointercancel", endDragging);
159
159
  }
160
160
  function handleSliderClick(ev) {
161
161
  if (isDragging || !props.range || props.disabled) {
@@ -193,9 +193,9 @@ onBeforeUnmount(() => {
193
193
  if (animationFrameId) {
194
194
  cancelAnimationFrame(animationFrameId);
195
195
  }
196
- off(document, "pointermove", handleMove);
197
- off(document, "pointerup", endDragging);
198
- off(document, "pointercancel", endDragging);
196
+ optimizedOff(document, "pointermove", handleMove);
197
+ optimizedOff(document, "pointerup", endDragging);
198
+ optimizedOff(document, "pointercancel", endDragging);
199
199
  });
200
200
  </script>
201
201
 
@@ -38,7 +38,7 @@ const computedClass = computed(() => {
38
38
  <template>
39
39
  <label
40
40
  :aria-checked="isChecked"
41
- class="pxd-switch flex-1 cursor-pointer"
41
+ class="pxd-switch flex-1 shrink-0 cursor-pointer"
42
42
  :for="uniqueId"
43
43
  >
44
44
  <input