pxd 0.0.39 → 0.0.40

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 (216) hide show
  1. package/dist/components/active-graph/index.vue +1 -1
  2. package/dist/components/book/index.vue +1 -1
  3. package/dist/components/browser/index.vue +1 -1
  4. package/dist/components/checkbox/index.vue +3 -2
  5. package/dist/components/checkbox-group/index.vue +1 -1
  6. package/dist/components/choicebox-group/index.vue +1 -1
  7. package/dist/components/command-menu/index.vue +133 -0
  8. package/dist/components/command-menu-group/index.vue +18 -0
  9. package/dist/components/command-menu-item/index.vue +23 -0
  10. package/dist/components/drawer/index.vue +25 -25
  11. package/dist/components/error/index.vue +1 -1
  12. package/dist/components/fader/index.vue +11 -10
  13. package/dist/components/grid/index.vue +2 -2
  14. package/dist/components/grid-item/index.vue +2 -2
  15. package/dist/components/hold-button/index.vue +1 -1
  16. package/dist/components/index.d.ts +4 -0
  17. package/dist/components/index.js +4 -0
  18. package/dist/components/intersection-observer/index.vue +2 -2
  19. package/dist/components/kbd/index.vue +16 -4
  20. package/dist/components/list/index.vue +98 -90
  21. package/dist/components/list-item/index.vue +22 -33
  22. package/dist/components/loading-bar/index.vue +156 -0
  23. package/dist/components/material/index.vue +8 -8
  24. package/dist/components/menu/index.vue +18 -8
  25. package/dist/components/message/index.vue +20 -10
  26. package/dist/components/modal/index.vue +26 -28
  27. package/dist/components/overlay/index.vue +6 -5
  28. package/dist/components/pagination/index.vue +2 -2
  29. package/dist/components/placeholder/index.vue +13 -6
  30. package/dist/components/popover/index.vue +32 -24
  31. package/dist/components/radio/index.vue +3 -2
  32. package/dist/components/radio-group/index.vue +1 -1
  33. package/dist/components/scrollable/index.vue +127 -79
  34. package/dist/components/slider/index.vue +1 -1
  35. package/dist/components/stack/index.vue +4 -4
  36. package/dist/components/text/index.vue +1 -1
  37. package/dist/components/theme-switcher/index.vue +6 -2
  38. package/dist/components/tooltip/index.vue +7 -7
  39. package/dist/composables/index.d.ts +1 -0
  40. package/dist/composables/index.js +1 -0
  41. package/dist/composables/use-browser-observer.d.ts +2 -2
  42. package/dist/composables/use-color-scheme.d.ts +5 -1
  43. package/dist/composables/use-color-scheme.js +20 -1
  44. package/dist/composables/use-config-provider-context.d.ts +1 -1
  45. package/dist/composables/use-delay-destroy.d.ts +2 -2
  46. package/dist/composables/use-delay-destroy.js +4 -4
  47. package/dist/composables/use-focus-trap.js +1 -1
  48. package/dist/composables/use-loading-bar.d.ts +25 -0
  49. package/dist/composables/use-loading-bar.js +27 -0
  50. package/dist/composables/use-media-query.js +1 -1
  51. package/dist/composables/use-message.d.ts +4 -1
  52. package/dist/composables/use-message.js +18 -0
  53. package/dist/composables/use-pointer-gesture.js +2 -2
  54. package/dist/composables/use-repeat-action.js +1 -1
  55. package/dist/composables/use-virtual-list.d.ts +1 -1
  56. package/dist/contexts/avatar.d.ts +1 -1
  57. package/dist/contexts/carousel.d.ts +1 -1
  58. package/dist/contexts/checkbox.d.ts +1 -1
  59. package/dist/contexts/choicebox.d.ts +2 -2
  60. package/dist/contexts/collapse.d.ts +1 -1
  61. package/dist/contexts/command-menu.d.ts +6 -0
  62. package/dist/contexts/command-menu.js +5 -0
  63. package/dist/contexts/list.d.ts +4 -6
  64. package/dist/contexts/list.js +0 -4
  65. package/dist/contexts/radio.d.ts +1 -1
  66. package/dist/contexts/resizable.d.ts +1 -1
  67. package/dist/contexts/switch.d.ts +2 -2
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.js +1 -1
  70. package/dist/locales/en-us.d.ts +3 -0
  71. package/dist/locales/en-us.js +3 -0
  72. package/dist/locales/zh-cn.d.ts +3 -0
  73. package/dist/locales/zh-cn.js +3 -0
  74. package/dist/{components → src/components}/active-graph/index.vue.d.ts +1 -1
  75. package/dist/{components → src/components}/avatar-group/index.vue.d.ts +1 -1
  76. package/dist/{components → src/components}/badge/index.vue.d.ts +1 -1
  77. package/dist/{components → src/components}/book/index.vue.d.ts +1 -1
  78. package/dist/{components → src/components}/browser/index.vue.d.ts +1 -1
  79. package/dist/{components → src/components}/button/index.vue.d.ts +1 -1
  80. package/dist/{components → src/components}/carousel/index.vue.d.ts +1 -1
  81. package/dist/{components → src/components}/carousel-group/index.vue.d.ts +1 -1
  82. package/dist/{components → src/components}/chip/index.vue.d.ts +1 -1
  83. package/dist/{components → src/components}/choicebox/index.vue.d.ts +1 -1
  84. package/dist/{components → src/components}/choicebox-group/index.vue.d.ts +1 -1
  85. package/dist/{components → src/components}/collapse/index.vue.d.ts +1 -1
  86. package/dist/{components → src/components}/collapse-group/index.vue.d.ts +1 -1
  87. package/dist/src/components/command-menu/index.vue.d.ts +39 -0
  88. package/dist/src/components/command-menu-group/index.vue.d.ts +16 -0
  89. package/dist/src/components/command-menu-item/index.vue.d.ts +10 -0
  90. package/dist/{components → src/components}/config-provider/index.vue.d.ts +1 -1
  91. package/dist/{components → src/components}/description/index.vue.d.ts +1 -1
  92. package/dist/{components → src/components}/drawer/index.vue.d.ts +17 -12
  93. package/dist/{components → src/components}/empty-state/index.vue.d.ts +1 -1
  94. package/dist/{components → src/components}/error/index.vue.d.ts +1 -1
  95. package/dist/{components → src/components}/fader/index.vue.d.ts +3 -2
  96. package/dist/{components → src/components}/gauge/index.vue.d.ts +1 -1
  97. package/dist/{components → src/components}/grid/index.vue.d.ts +1 -1
  98. package/dist/{components → src/components}/grid-item/index.vue.d.ts +1 -1
  99. package/dist/{components → src/components}/hold-button/index.vue.d.ts +1 -1
  100. package/dist/{components → src/components}/intersection-observer/content.vue.d.ts +1 -1
  101. package/dist/{components → src/components}/intersection-observer/index.vue.d.ts +3 -3
  102. package/dist/{components → src/components}/kbd/index.vue.d.ts +2 -1
  103. package/dist/{components → src/components}/link-button/index.vue.d.ts +1 -1
  104. package/dist/src/components/list/index.vue.d.ts +40 -0
  105. package/dist/{components → src/components}/list-item/index.vue.d.ts +4 -4
  106. package/dist/src/components/loading-bar/index.vue.d.ts +14 -0
  107. package/dist/{components → src/components}/loading-dots/index.vue.d.ts +1 -1
  108. package/dist/{components → src/components}/material/index.vue.d.ts +1 -1
  109. package/dist/{components → src/components}/menu/index.vue.d.ts +11 -7
  110. package/dist/{components → src/components}/message/index.vue.d.ts +9 -9
  111. package/dist/{components → src/components}/modal/index.vue.d.ts +17 -12
  112. package/dist/{components → src/components}/more-button/index.vue.d.ts +1 -1
  113. package/dist/{components → src/components}/note/index.vue.d.ts +1 -1
  114. package/dist/{components → src/components}/number-input/index.vue.d.ts +1 -1
  115. package/dist/{components → src/components}/overlay/index.vue.d.ts +2 -4
  116. package/dist/{components → src/components}/pagination/index.vue.d.ts +1 -1
  117. package/dist/{components → src/components}/pin-input/index.vue.d.ts +1 -1
  118. package/dist/src/components/placeholder/index.vue.d.ts +9 -0
  119. package/dist/{components → src/components}/popover/index.vue.d.ts +6 -3
  120. package/dist/{components → src/components}/progress/index.vue.d.ts +1 -1
  121. package/dist/{components → src/components}/radio/index.vue.d.ts +1 -1
  122. package/dist/{components → src/components}/radio-group/index.vue.d.ts +1 -1
  123. package/dist/{components → src/components}/resizable/index.vue.d.ts +1 -1
  124. package/dist/src/components/resizable-handle/index.vue.d.ts +2 -0
  125. package/dist/{components → src/components}/resizable-panel/index.vue.d.ts +1 -1
  126. package/dist/{components → src/components}/skeleton/index.vue.d.ts +1 -1
  127. package/dist/{components → src/components}/slider/index.vue.d.ts +1 -1
  128. package/dist/{components → src/components}/snippet/index.vue.d.ts +1 -1
  129. package/dist/src/components/spinner/index.vue.d.ts +2 -0
  130. package/dist/{components → src/components}/stack/index.vue.d.ts +1 -1
  131. package/dist/{components → src/components}/status-dot/index.vue.d.ts +1 -1
  132. package/dist/{components → src/components}/switch/index.vue.d.ts +1 -1
  133. package/dist/{components → src/components}/switch-group/index.vue.d.ts +1 -1
  134. package/dist/{components → src/components}/teleport/index.vue.d.ts +1 -1
  135. package/dist/{components → src/components}/text/index.vue.d.ts +1 -1
  136. package/dist/{components → src/components}/textarea/index.vue.d.ts +1 -1
  137. package/dist/{components → src/components}/theme-switcher/index.vue.d.ts +1 -1
  138. package/dist/{components → src/components}/toggle/index.vue.d.ts +1 -1
  139. package/dist/{components → src/components}/tooltip/index.vue.d.ts +3 -5
  140. package/dist/{components → src/components}/virtual-list/index.vue.d.ts +1 -1
  141. package/dist/src/composables/use-browser-observer.d.ts +12 -0
  142. package/dist/src/composables/use-color-scheme.d.ts +11 -0
  143. package/dist/src/composables/use-config-provider-context.d.ts +7 -0
  144. package/dist/src/composables/use-copy-click.d.ts +4 -0
  145. package/dist/src/composables/use-countdown.d.ts +54 -0
  146. package/dist/src/composables/use-delay-change.d.ts +7 -0
  147. package/dist/src/composables/use-delay-destroy.d.ts +13 -0
  148. package/dist/src/composables/use-focus-trap.d.ts +4 -0
  149. package/dist/src/composables/use-loading-bar.d.ts +25 -0
  150. package/dist/src/composables/use-media-query.d.ts +15 -0
  151. package/dist/src/composables/use-message.d.ts +33 -0
  152. package/dist/src/composables/use-model-value.d.ts +11 -0
  153. package/dist/src/composables/use-pointer-gesture.d.ts +180 -0
  154. package/dist/src/composables/use-repeat-action.d.ts +16 -0
  155. package/dist/src/composables/use-unique-id-context.d.ts +2 -0
  156. package/dist/src/composables/use-virtual-list.d.ts +16 -0
  157. package/dist/src/contexts/avatar.d.ts +2 -0
  158. package/dist/src/contexts/carousel.d.ts +13 -0
  159. package/dist/src/contexts/checkbox.d.ts +2 -0
  160. package/dist/src/contexts/choicebox.d.ts +4 -0
  161. package/dist/src/contexts/collapse.d.ts +8 -0
  162. package/dist/src/contexts/command-menu.d.ts +6 -0
  163. package/dist/src/contexts/list.d.ts +7 -0
  164. package/dist/src/contexts/radio.d.ts +2 -0
  165. package/dist/src/contexts/resizable.d.ts +35 -0
  166. package/dist/src/contexts/switch.d.ts +4 -0
  167. package/dist/src/locales/en-us.d.ts +37 -0
  168. package/dist/src/plugins/dayjs-millisecond-token.d.ts +3 -0
  169. package/dist/src/utils/context.d.ts +17 -0
  170. package/dist/src/utils/date.d.ts +26 -0
  171. package/dist/src/utils/debounce/index.d.ts +73 -0
  172. package/dist/src/utils/debounce.d.ts +1 -0
  173. package/dist/src/utils/dom.d.ts +40 -0
  174. package/dist/src/utils/format.d.ts +24 -0
  175. package/dist/src/utils/get.d.ts +11 -0
  176. package/dist/src/utils/is.d.ts +4 -0
  177. package/dist/src/utils/ref.d.ts +8 -0
  178. package/dist/src/utils/regexp.d.ts +4 -0
  179. package/dist/src/utils/responsive.d.ts +3 -0
  180. package/dist/src/utils/throttle/index.d.ts +53 -0
  181. package/dist/src/utils/throttle.d.ts +1 -0
  182. package/dist/src/utils/uid.d.ts +1 -0
  183. package/dist/styles/styles.css +2 -2
  184. package/dist/styles/tw.css +4 -1
  185. package/dist/types/components/list.d.ts +4 -3
  186. package/dist/utils/date.d.ts +3 -3
  187. package/dist/utils/debounce/compat.d.ts +143 -0
  188. package/dist/utils/debounce/compat.js +47 -0
  189. package/dist/utils/debounce/index.d.ts +73 -0
  190. package/dist/utils/debounce/index.js +60 -0
  191. package/dist/utils/debounce.d.ts +1 -73
  192. package/dist/utils/debounce.js +1 -60
  193. package/dist/utils/event.d.ts +8 -0
  194. package/dist/utils/format.d.ts +3 -1
  195. package/dist/utils/format.js +3 -0
  196. package/dist/utils/responsive.d.ts +2 -1
  197. package/dist/utils/responsive.js +4 -1
  198. package/dist/utils/throttle/compat.d.ts +79 -0
  199. package/dist/utils/throttle/compat.js +9 -0
  200. package/dist/utils/throttle/index.d.ts +53 -0
  201. package/dist/utils/throttle/index.js +34 -0
  202. package/dist/utils/throttle.d.ts +1 -53
  203. package/dist/utils/throttle.js +1 -34
  204. package/package.json +10 -10
  205. package/volar.d.ts +4 -0
  206. package/dist/components/list/index.vue.d.ts +0 -29
  207. package/dist/components/placeholder/index.vue.d.ts +0 -8
  208. package/dist/components/resizable-handle/index.vue.d.ts +0 -2
  209. package/dist/components/spinner/index.vue.d.ts +0 -2
  210. /package/dist/{components → src/components}/avatar/index.vue.d.ts +0 -0
  211. /package/dist/{components → src/components}/checkbox/index.vue.d.ts +0 -0
  212. /package/dist/{components → src/components}/checkbox-group/index.vue.d.ts +0 -0
  213. /package/dist/{components → src/components}/countdown/index.vue.d.ts +0 -0
  214. /package/dist/{components → src/components}/input/index.vue.d.ts +0 -0
  215. /package/dist/{utils/events.d.ts → src/utils/event.d.ts} +0 -0
  216. /package/dist/utils/{events.js → event.js} +0 -0
@@ -2,9 +2,8 @@
2
2
  import { shallowRef, watch } from "vue";
3
3
  import { useFocusTrap } from "../../composables/use-focus-trap";
4
4
  import { useModelValue } from "../../composables/use-model-value";
5
- import { getCssUnitValue } from "../../utils/format";
5
+ import { getCssUnitValue, isTruthyProp } from "../../utils/format";
6
6
  import POverlay from "../overlay/index.vue";
7
- import PScrollable from "../scrollable/index.vue";
8
7
  defineOptions({
9
8
  name: "PModal",
10
9
  model: {
@@ -21,17 +20,18 @@ const props = defineProps({
21
20
  appendToBody: { type: Boolean, required: false, default: true },
22
21
  headerStylize: { type: Boolean, required: false, default: false },
23
22
  footerStylize: { type: Boolean, required: false, default: true },
24
- modalClass: { type: [String, Array, Object], required: false },
23
+ wrapperClass: { type: [String, Array, Object], required: false },
24
+ contentClass: { type: [String, Array, Object], required: false },
25
25
  closeOnPressEscape: { type: Boolean, required: false, default: false },
26
26
  closeOnClickOverlay: { type: Boolean, required: false, default: false }
27
27
  });
28
- const emits = defineEmits(["open", "close", "click-outside", "update:modelValue"]);
28
+ const emits = defineEmits(["show", "hide", "visible-change", "click-outside", "update:modelValue"]);
29
29
  const modalRef = shallowRef();
30
30
  const isVisible = useModelValue(props, emits);
31
31
  useFocusTrap(modalRef);
32
32
  function onOverlayClick(ev) {
33
33
  emits("click-outside", ev);
34
- if (!props.closeOnClickOverlay || props.loading) {
34
+ if (!isTruthyProp(props.closeOnClickOverlay) || isTruthyProp(props.loading)) {
35
35
  return;
36
36
  }
37
37
  isVisible.value = false;
@@ -43,11 +43,12 @@ function onUpdateModelValue(visible) {
43
43
  isVisible.value = visible;
44
44
  }
45
45
  watch(() => isVisible.value, (visible) => {
46
+ emits("visible-change", visible);
46
47
  if (visible) {
47
- emits("open");
48
+ emits("show");
48
49
  return;
49
50
  }
50
- emits("close");
51
+ emits("hide");
51
52
  });
52
53
  </script>
53
54
 
@@ -66,35 +67,36 @@ watch(() => isVisible.value, (visible) => {
66
67
  role="dialog"
67
68
  tabindex="-1"
68
69
  aria-modal="true"
69
- class="pxd-modal left-0 bottom-0 translate-z-0 sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-xl sm:[--o:0] sm:[--t:scale(0.98)] sm:w-[calc(var(--w,540)*1px)] fixed z-10 flex h-max w-full max-w-full flex-col overflow-hidden rounded-t-lg bg-background-100 shadow-border-modal outline-none motion-safe:transition-all dark:bg-background-200"
70
- :class="modalClass"
70
+ class="pxd-modal left-0 bottom-0 translate-z-0 sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-xl sm:[--o:0] sm:[--t:scale(0.98)] sm:w-[var(--w,540px)] fixed z-10 flex h-max max-h-[min(800px,80vh)] w-full max-w-full flex-col overflow-hidden rounded-t-lg bg-background-100 shadow-border-modal outline-none motion-safe:transition-all dark:bg-background-200"
71
+ :class="wrapperClass"
71
72
  :style="{ '--w': getCssUnitValue(width) }"
72
73
  >
73
74
  <header
74
75
  class="pxd-modal--header px-6 py-4 relative shrink-0 empty:py-3"
75
76
  :class="{ 'sm:pt-4 border-b bg-background-200 dark:bg-background-100': headerStylize }"
76
77
  >
77
- <h3 v-if="$slots.title || title" class="text-lg sm:text-xl font-semibold tracking-tight m-0">
78
- <slot name="title">
79
- {{ title }}
80
- </slot>
81
- </h3>
78
+ <slot name="header">
79
+ <h3 v-if="$slots.title || title" class="text-lg sm:text-xl font-semibold tracking-tight m-0">
80
+ <slot name="title">
81
+ {{ title }}
82
+ </slot>
83
+ </h3>
82
84
 
83
- <div v-if="$slots.subtitle || subtitle" class="mt-2 text-sm text-muted-foreground">
84
- <slot name="subtitle">
85
- {{ subtitle }}
86
- </slot>
87
- </div>
85
+ <div v-if="$slots.subtitle || subtitle" class="mt-2 text-sm text-muted-foreground">
86
+ <slot name="subtitle">
87
+ {{ subtitle }}
88
+ </slot>
89
+ </div>
90
+ </slot>
88
91
  </header>
89
92
 
90
- <PScrollable
93
+ <div
91
94
  v-if="$slots.default"
92
- :data-header="headerStylize"
93
- class="pxd-modal--content group flex-1"
94
- content-class="group-data-[header=true]:pt-5 px-6 pb-5"
95
+ class="pxd-modal--content group px-6 pb-5 flex-1 overflow-auto"
96
+ :class="[{ 'pt-5': headerStylize }, contentClass]"
95
97
  >
96
98
  <slot />
97
- </PScrollable>
99
+ </div>
98
100
 
99
101
  <footer
100
102
  v-if="$slots.footer"
@@ -122,8 +124,4 @@ watch(() => isVisible.value, (visible) => {
122
124
  opacity: var(--o, 1);
123
125
  transform: var(--t, translate(0, 100%));
124
126
  }
125
-
126
- .pxd-modal {
127
- max-height: min(800px, 80vh);
128
- }
129
127
  </style>
@@ -1,11 +1,13 @@
1
1
  <script setup>
2
2
  import { computed, nextTick, onBeforeUnmount, shallowRef, watch } from "vue";
3
3
  import { getScrollContainer, getScrollElByContainer, hasScrollbar, isScrollable } from "../../utils/dom";
4
- import { optimizedOff, optimizedOn } from "../../utils/events";
4
+ import { optimizedOff, optimizedOn } from "../../utils/event";
5
+ import { isTruthyProp } from "../../utils/format";
5
6
  import { isServer } from "../../utils/is";
6
7
  import PTeleport from "../teleport/index.vue";
7
8
  defineOptions({
8
9
  name: "POverlay",
10
+ inheritAttrs: false,
9
11
  model: {
10
12
  prop: "modelValue",
11
13
  event: "update:modelValue"
@@ -16,7 +18,6 @@ const props = defineProps({
16
18
  zIndex: { type: Number, required: false },
17
19
  modelValue: { type: Boolean, required: false, default: false },
18
20
  appendToBody: { type: Boolean, required: false, default: true },
19
- overlayClass: { type: [String, Array, Object], required: false },
20
21
  closeOnPressEscape: { type: Boolean, required: false, default: true },
21
22
  closeOnClickOverlay: { type: Boolean, required: false }
22
23
  });
@@ -28,13 +29,13 @@ const computedStyle = computed(() => ({
28
29
  }));
29
30
  function onOverlayClick(ev) {
30
31
  emits("click", ev);
31
- if (!props.closeOnClickOverlay) {
32
+ if (!isTruthyProp(props.closeOnClickOverlay)) {
32
33
  return;
33
34
  }
34
35
  emits("update:modelValue", false);
35
36
  }
36
37
  function onOverlayKeydown(ev) {
37
- if (!props.closeOnPressEscape || !props.modelValue) {
38
+ if (!isTruthyProp(props.closeOnPressEscape) || !props.modelValue) {
38
39
  return;
39
40
  }
40
41
  if (ev.ctrlKey || ev.metaKey || ev.altKey || ev.shiftKey) {
@@ -98,8 +99,8 @@ onBeforeUnmount(() => {
98
99
  ref="overlayRef"
99
100
  :data-blur="blur"
100
101
  class="pxd-overlay inset-0 bg-black/40 sm:bg-background-100/80 fixed z-(--z,10) data-[blur=true]:backdrop-blur-xs motion-safe:transition-colors"
101
- :class="overlayClass"
102
102
  :style="computedStyle"
103
+ v-bind="$attrs"
103
104
  @click="onOverlayClick"
104
105
  />
105
106
  </Transition>
@@ -14,7 +14,7 @@ const config = useConfigProvider();
14
14
  <template>
15
15
  <nav aria-label="pagination" class="pxd-pagination relative flex w-full flex-wrap items-start justify-between">
16
16
  <RouterLink v-if="prev" :to="prev.href" class="pxd-pagination--prev min-h-13 group py-1 pr-2 pl-6 rounded-md !no-underline self-focus-ring outline-none">
17
- <span secondary class="text-[13px] text-foreground-secondary group-hover:text-foreground motion-safe:transition-colors">
17
+ <span secondary class="text-13px text-foreground-secondary group-hover:text-foreground motion-safe:transition-colors">
18
18
  {{ config.locale.compare.prev }}
19
19
  </span>
20
20
 
@@ -29,7 +29,7 @@ const config = useConfigProvider();
29
29
  </div>
30
30
 
31
31
  <RouterLink v-if="next" :to="next.href" class="pxd-pagination--next min-h-13 group py-1 pl-2 pr-6 rounded-md !no-underline self-focus-ring outline-none">
32
- <span secondary class="text-[13px] text-foreground-secondary group-hover:text-foreground motion-safe:transition-colors">
32
+ <span secondary class="text-13px text-foreground-secondary group-hover:text-foreground motion-safe:transition-colors">
33
33
  {{ config.locale.compare.next }}
34
34
  </span>
35
35
 
@@ -9,7 +9,8 @@ const props = defineProps({
9
9
  color: { type: String, required: false },
10
10
  width: { type: String, required: false },
11
11
  height: { type: String, required: false },
12
- border: { type: Boolean, required: false }
12
+ border: { type: Boolean, required: false },
13
+ invert: { type: Boolean, required: false }
13
14
  });
14
15
  const computedStyle = computed(() => {
15
16
  return {
@@ -22,21 +23,27 @@ const computedStyle = computed(() => {
22
23
 
23
24
  <template>
24
25
  <div
25
- class="pxd-placeholder relative max-w-full overflow-hidden rounded-lg border-dashed"
26
- :class="{ border }"
26
+ class="pxd-placeholder relative max-w-full overflow-hidden rounded-lg"
27
+ :class="{ 'border': border, 'is-invert': invert }"
27
28
  :style="computedStyle"
28
29
  v-bind="$attrs"
29
30
  />
30
31
  </template>
31
32
 
32
- <style scoped>
33
+ <style lang="postcss">
33
34
  .pxd-placeholder {
35
+ --deg: -45deg;
36
+
37
+ &.is-invert {
38
+ --deg: 45deg;
39
+ }
40
+
34
41
  width: 100%;
35
42
  height: 36px;
36
- color: var(--color-gray-300);
43
+ color: var(--color-gray-400);
37
44
  background-image:
38
45
  repeating-linear-gradient(
39
- -45deg,
46
+ var(--deg),
40
47
  currentColor 0,
41
48
  currentColor 1px,
42
49
  transparent 1px,
@@ -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 { off, on, 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";
@@ -33,9 +33,10 @@ const props = defineProps({
33
33
  autoPosition: { type: Boolean, required: false, default: true },
34
34
  scrollHidden: { type: Boolean, required: false, default: false },
35
35
  triggerClass: { type: [String, Array, Object], required: false },
36
- popoverClass: { type: [String, Array, Object], required: false },
36
+ wrapperClass: { type: [String, Array, Object], required: false },
37
+ contentClass: { type: [String, Array, Object], required: false },
37
38
  triggerStyle: { type: [Object, String], required: false },
38
- popoverStyle: { type: [Object, String], required: false },
39
+ contentStyle: { type: [Object, String], required: false },
39
40
  transitionName: { type: String, required: false },
40
41
  showTransition: { type: Boolean, required: false, default: true },
41
42
  hideTransition: { type: Boolean, required: false, default: true },
@@ -44,7 +45,7 @@ const props = defineProps({
44
45
  autoPositionThreshold: { type: Number, required: false, default: 30 },
45
46
  scrollHiddenThreshold: { type: Number, required: false, default: 150 }
46
47
  });
47
- const emits = defineEmits(["show", "hide", "trigger-click", "trigger-keydown"]);
48
+ const emits = defineEmits(["show", "hide", "visible-change", "trigger-click", "trigger-keydown"]);
48
49
  const triggerRect = shallowRef();
49
50
  let viewportRect = null;
50
51
  let scrollContainer;
@@ -157,7 +158,6 @@ async function handlePopoverShow(immediate = false) {
157
158
  updateContentPosition();
158
159
  openPopover();
159
160
  resolve(true);
160
- emits("show");
161
161
  }, immediate ? 0 : props.showDelay);
162
162
  });
163
163
  savedScrollTop = getScrollElByContainer(scrollContainer).scrollTop;
@@ -174,7 +174,6 @@ async function handlePopoverHide(immediate = false) {
174
174
  hidePopoverTimer = setTimeout(() => {
175
175
  closePopover();
176
176
  resolve(true);
177
- emits("hide");
178
177
  }, immediate ? 0 : props.hideDelay);
179
178
  });
180
179
  off(scrollContainer, "scroll", onContainerScroll);
@@ -333,10 +332,10 @@ function updateContentPosition() {
333
332
  top,
334
333
  zIndex,
335
334
  "transform": `translate3d(${translateX}, ${translateY}, 0)`,
336
- "--c": arrowColor,
337
- "--o": `${offset}px`,
338
- "--mw": `${maxWidth}px`,
339
- "--ao": `${offset - 5}px`
335
+ "--popover-bg": arrowColor,
336
+ "--popover-offset": `${offset}px`,
337
+ "--popover-max-width": `${maxWidth}px`,
338
+ "--popover-arrow-offset": `${offset - 5}px`
340
339
  };
341
340
  }
342
341
  function applyAutoPosition(overlapping) {
@@ -427,6 +426,14 @@ watch(
427
426
  }
428
427
  }
429
428
  );
429
+ watch(() => isVisible.value, (visible) => {
430
+ emits("visible-change", visible);
431
+ if (visible) {
432
+ emits("show");
433
+ } else {
434
+ emits("hide");
435
+ }
436
+ });
430
437
  watch(
431
438
  () => [triggerRef.value, triggerMethods.value],
432
439
  ([newDom, newMethods], [oldDom, oldMethods]) => {
@@ -476,15 +483,16 @@ defineExpose({
476
483
  v-if="isRender"
477
484
  v-show="isVisible"
478
485
  ref="wrapperRef"
486
+ :class="wrapperClass"
479
487
  :style="wrapperStyle"
480
488
  :data-enterable="enterable"
481
489
  :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"
490
+ class="pxd-popover--container sm:max-w-(--popover-max-width) absolute isolate w-max max-w-full data-[enterable=false]:pointer-events-none"
483
491
  @pointerenter="onContentPointerEnter"
484
492
  @pointerleave="onContentPointerLeave"
485
493
  >
486
494
  <i v-if="showArrow" class="pxd-popover--arrow absolute z-1" />
487
- <div class="pxd-popover--content" :class="popoverClass" :style="popoverStyle">
495
+ <div class="pxd-popover--content" :class="contentClass" :style="contentStyle">
488
496
  <slot name="content">
489
497
  {{ content }}
490
498
  </slot>
@@ -499,19 +507,19 @@ defineExpose({
499
507
  .pxd-popover--container {
500
508
 
501
509
  &[data-position^='top'] {
502
- padding-bottom: var(--o);
510
+ padding-bottom: var(--popover-offset);
503
511
  }
504
512
 
505
513
  &[data-position^='bottom'] {
506
- padding-top: var(--o);
514
+ padding-top: var(--popover-offset);
507
515
  }
508
516
 
509
517
  &[data-position^='left'] {
510
- padding-right: var(--o);
518
+ padding-right: var(--popover-offset);
511
519
  }
512
520
 
513
521
  &[data-position^='right'] {
514
- padding-left: var(--o);
522
+ padding-left: var(--popover-offset);
515
523
  }
516
524
 
517
525
  .pxd-popover--arrow {
@@ -521,33 +529,33 @@ defineExpose({
521
529
  &[data-position="top"] .pxd-popover--arrow,
522
530
  &[data-position="top-start"] .pxd-popover--arrow,
523
531
  &[data-position="top-end"] .pxd-popover--arrow {
524
- bottom: var(--ao);
532
+ bottom: var(--popover-arrow-offset);
525
533
  border-width: 6px 6px 0;
526
- border-color: var(--c) transparent transparent;
534
+ border-color: var(--popover-bg) transparent transparent;
527
535
  }
528
536
 
529
537
  &[data-position='bottom'] .pxd-popover--arrow,
530
538
  &[data-position='bottom-start'] .pxd-popover--arrow,
531
539
  &[data-position='bottom-end'] .pxd-popover--arrow {
532
- top: var(--ao);
540
+ top: var(--popover-arrow-offset);
533
541
  border-width: 0 6px 6px;
534
- border-color: transparent transparent var(--c);
542
+ border-color: transparent transparent var(--popover-bg);
535
543
  }
536
544
 
537
545
  &[data-position='left'] .pxd-popover--arrow,
538
546
  &[data-position='left-start'] .pxd-popover--arrow,
539
547
  &[data-position='left-end'] .pxd-popover--arrow {
540
- right: var(--ao);
548
+ right: var(--popover-arrow-offset);
541
549
  border-width: 6px 0 6px 6px;
542
- border-color: transparent transparent transparent var(--c);
550
+ border-color: transparent transparent transparent var(--popover-bg);
543
551
  }
544
552
 
545
553
  &[data-position='right'] .pxd-popover--arrow,
546
554
  &[data-position='right-start'] .pxd-popover--arrow,
547
555
  &[data-position='right-end'] .pxd-popover--arrow {
548
- left: var(--ao);
556
+ left: var(--popover-arrow-offset);
549
557
  border-width: 6px 6px 6px 0;
550
- border-color: transparent var(--c) transparent transparent;
558
+ border-color: transparent var(--popover-bg) transparent transparent;
551
559
  }
552
560
 
553
561
  &[data-position='top'] .pxd-popover--arrow,
@@ -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
@@ -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"