pxd 0.0.61 → 0.0.63

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 (223) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/_internal/dismiss-container.d.vue.ts +28 -0
  3. package/dist/components/_internal/dismiss-container.vue +162 -0
  4. package/dist/components/_internal/popover-arrow.d.vue.ts +9 -0
  5. package/dist/components/_internal/popover-arrow.vue +38 -0
  6. package/dist/components/active-graph/index.vue +4 -4
  7. package/dist/components/avatar/index.vue +5 -7
  8. package/dist/components/avatar-group/index.d.vue.ts +0 -1
  9. package/dist/components/avatar-group/index.vue +1 -1
  10. package/dist/components/backtop/index.vue +1 -1
  11. package/dist/components/badge/index.d.vue.ts +5 -1
  12. package/dist/components/badge/index.vue +18 -4
  13. package/dist/components/badge/types.d.ts +5 -0
  14. package/dist/components/book/index.vue +1 -1
  15. package/dist/components/browser/index.vue +1 -1
  16. package/dist/components/bubble/index.d.vue.ts +22 -0
  17. package/dist/components/bubble/index.vue +59 -0
  18. package/dist/components/bubble/types.d.ts +6 -0
  19. package/dist/components/button/index.d.vue.ts +0 -2
  20. package/dist/components/button/index.vue +30 -21
  21. package/dist/components/button/types.d.ts +3 -2
  22. package/dist/components/button-group/index.d.vue.ts +14 -0
  23. package/dist/components/button-group/index.vue +26 -0
  24. package/dist/components/button-group/types.d.ts +9 -0
  25. package/dist/components/carousel/index.d.vue.ts +3 -3
  26. package/dist/components/carousel/index.vue +146 -113
  27. package/dist/components/carousel/types.d.ts +1 -1
  28. package/dist/components/carousel-item/index.vue +22 -17
  29. package/dist/components/checkbox/index.vue +6 -6
  30. package/dist/components/checkbox-group/index.d.vue.ts +1 -1
  31. package/dist/components/chip/index.d.vue.ts +1 -5
  32. package/dist/components/chip/index.vue +4 -4
  33. package/dist/components/color-selector/index.d.vue.ts +12 -0
  34. package/dist/components/color-selector/index.vue +64 -0
  35. package/dist/components/color-selector/types.d.ts +12 -0
  36. package/dist/components/command-menu/index.d.vue.ts +6 -6
  37. package/dist/components/command-menu/index.vue +23 -32
  38. package/dist/components/command-menu/types.d.ts +1 -1
  39. package/dist/components/command-menu-group/index.vue +15 -6
  40. package/dist/components/command-menu-group/types.d.ts +1 -1
  41. package/dist/components/countdown/index.d.vue.ts +11 -11
  42. package/dist/components/drawer/index.d.vue.ts +8 -8
  43. package/dist/components/drawer/index.vue +13 -10
  44. package/dist/components/drawer/types.d.ts +4 -3
  45. package/dist/components/ellipsis-text/index.d.vue.ts +4 -1
  46. package/dist/components/ellipsis-text/index.vue +84 -107
  47. package/dist/components/ellipsis-text/types.d.ts +2 -1
  48. package/dist/components/error/index.vue +1 -1
  49. package/dist/components/fader/index.vue +5 -9
  50. package/dist/components/gauge/index.vue +34 -29
  51. package/dist/components/grid/index.vue +1 -1
  52. package/dist/components/grid-item/index.vue +1 -1
  53. package/dist/components/hold-button/index.d.vue.ts +8 -10
  54. package/dist/components/hold-button/index.vue +20 -29
  55. package/dist/components/hold-button/types.d.ts +5 -6
  56. package/dist/components/index.d.ts +7 -0
  57. package/dist/components/index.js +7 -0
  58. package/dist/components/input/index.d.vue.ts +8 -8
  59. package/dist/components/input/index.vue +5 -4
  60. package/dist/components/intersection-observer/index.vue +4 -4
  61. package/dist/components/kbd/index.vue +1 -1
  62. package/dist/components/link-button/index.d.vue.ts +4 -4
  63. package/dist/components/link-button/index.vue +9 -8
  64. package/dist/components/link-button/types.d.ts +0 -3
  65. package/dist/components/list/index.d.vue.ts +10 -15
  66. package/dist/components/list/index.vue +58 -131
  67. package/dist/components/list/types.d.ts +4 -4
  68. package/dist/components/list-item/index.d.vue.ts +2 -2
  69. package/dist/components/list-item/index.vue +44 -39
  70. package/dist/components/loading-bar/index.vue +8 -7
  71. package/dist/components/material/index.vue +24 -46
  72. package/dist/components/menu/index.d.vue.ts +6 -8
  73. package/dist/components/menu/index.vue +18 -24
  74. package/dist/components/menu/types.d.ts +1 -2
  75. package/dist/components/message/composables/use-group-expand.d.ts +13 -0
  76. package/dist/components/message/composables/use-group-expand.js +50 -0
  77. package/dist/components/message/composables/use-message-timer.d.ts +9 -0
  78. package/dist/components/message/composables/use-message-timer.js +61 -0
  79. package/dist/components/message/composables/use-promise-message.d.ts +4 -0
  80. package/dist/components/message/composables/use-promise-message.js +49 -0
  81. package/dist/components/message/index.d.vue.ts +6 -33
  82. package/dist/components/message/index.vue +33 -185
  83. package/dist/components/message/types.d.ts +2 -2
  84. package/dist/components/message-item/index.vue +26 -2
  85. package/dist/components/modal/index.d.vue.ts +7 -7
  86. package/dist/components/modal/index.vue +7 -3
  87. package/dist/components/modal/types.d.ts +7 -3
  88. package/dist/components/note/index.vue +2 -2
  89. package/dist/components/number-input/index.d.vue.ts +5 -4
  90. package/dist/components/number-input/index.vue +3 -0
  91. package/dist/components/number-input/types.d.ts +1 -0
  92. package/dist/components/overlay/index.d.vue.ts +6 -3
  93. package/dist/components/overlay/index.vue +63 -68
  94. package/dist/components/overlay/types.d.ts +5 -4
  95. package/dist/components/pagination/index.vue +2 -2
  96. package/dist/components/pin-input/index.d.vue.ts +1 -1
  97. package/dist/components/pin-input/index.vue +7 -6
  98. package/dist/components/placeholder/index.vue +1 -1
  99. package/dist/components/popover/index.d.vue.ts +7 -8
  100. package/dist/components/popover/index.vue +149 -239
  101. package/dist/components/popover/types.d.ts +5 -5
  102. package/dist/components/progress/index.vue +1 -1
  103. package/dist/components/radio/index.vue +2 -2
  104. package/dist/components/resizable/index.vue +43 -51
  105. package/dist/components/resizable/types.d.ts +1 -1
  106. package/dist/components/resizable-handle/index.d.vue.ts +4 -1
  107. package/dist/components/resizable-handle/index.vue +29 -3
  108. package/dist/components/resizable-panel/index.vue +3 -7
  109. package/dist/components/scalable-text/index.d.vue.ts +9 -0
  110. package/dist/components/scalable-text/index.vue +147 -0
  111. package/dist/components/scalable-text/types.d.ts +12 -0
  112. package/dist/components/scrollable/index.d.vue.ts +2 -2
  113. package/dist/components/scrollable/index.vue +4 -3
  114. package/dist/components/separator/index.d.vue.ts +6 -0
  115. package/dist/components/separator/index.vue +18 -0
  116. package/dist/components/separator/types.d.ts +5 -0
  117. package/dist/components/skeleton/index.d.vue.ts +1 -1
  118. package/dist/components/slider/index.d.vue.ts +1 -1
  119. package/dist/components/slider/index.vue +39 -7
  120. package/dist/components/snippet/index.vue +16 -13
  121. package/dist/components/spinner/index.vue +3 -1
  122. package/dist/components/stack/index.d.vue.ts +1 -1
  123. package/dist/components/stack/index.vue +1 -1
  124. package/dist/components/switch/index.d.vue.ts +1 -1
  125. package/dist/components/switch/index.vue +4 -3
  126. package/dist/components/switch-item/index.vue +1 -1
  127. package/dist/components/tabs/index.d.vue.ts +12 -0
  128. package/dist/components/tabs/index.vue +270 -0
  129. package/dist/components/tabs/types.d.ts +12 -0
  130. package/dist/components/tabs-item/index.d.vue.ts +4 -0
  131. package/dist/components/tabs-item/index.vue +16 -0
  132. package/dist/components/tabs-item/types.d.ts +10 -0
  133. package/dist/components/text/index.vue +1 -1
  134. package/dist/components/textarea/index.d.vue.ts +2 -2
  135. package/dist/components/textarea/index.vue +1 -1
  136. package/dist/components/time-picker/index.d.vue.ts +3 -5
  137. package/dist/components/time-picker/index.vue +53 -45
  138. package/dist/components/time-picker/types.d.ts +1 -2
  139. package/dist/components/toggle/index.d.vue.ts +0 -2
  140. package/dist/components/toggle/index.vue +6 -6
  141. package/dist/components/toggle-button/index.vue +8 -6
  142. package/dist/components/tooltip/index.d.vue.ts +1 -1
  143. package/dist/components/tooltip/index.vue +19 -11
  144. package/dist/components/tooltip/types.d.ts +2 -2
  145. package/dist/components/virtual-list/index.d.vue.ts +8 -8
  146. package/dist/components/virtual-list/index.vue +27 -5
  147. package/dist/components/virtual-list/types.d.ts +3 -0
  148. package/dist/composables/index.d.ts +4 -1
  149. package/dist/composables/index.js +4 -1
  150. package/dist/composables/use-browser-observer.js +2 -2
  151. package/dist/composables/use-client-online.js +2 -2
  152. package/dist/composables/use-color-scheme.js +2 -2
  153. package/dist/composables/use-countdown.js +3 -2
  154. package/dist/composables/use-deferred-value.js +2 -2
  155. package/dist/composables/use-delay-destroy.js +11 -6
  156. package/dist/composables/use-document-hidden.js +2 -2
  157. package/dist/composables/use-focus-trap.js +2 -2
  158. package/dist/composables/use-list-filter.d.ts +11 -0
  159. package/dist/composables/use-list-filter.js +56 -0
  160. package/dist/composables/use-list-navigation.d.ts +27 -0
  161. package/dist/composables/use-list-navigation.js +159 -0
  162. package/dist/composables/use-lock-scroll.js +12 -12
  163. package/dist/composables/use-media-query.js +2 -2
  164. package/dist/composables/use-outside-click.d.ts +1 -1
  165. package/dist/composables/use-outside-click.js +8 -11
  166. package/dist/composables/use-overlay-manager.d.ts +18 -0
  167. package/dist/composables/use-overlay-manager.js +80 -0
  168. package/dist/composables/use-popover-responsive.d.ts +6 -8
  169. package/dist/composables/use-popover-responsive.js +9 -12
  170. package/dist/composables/use-repeat-action.js +2 -2
  171. package/dist/composables/use-swipe-gesture.d.ts +65 -0
  172. package/dist/composables/use-swipe-gesture.js +99 -0
  173. package/dist/composables/use-virtual-list.d.ts +5 -3
  174. package/dist/composables/use-virtual-list.js +25 -14
  175. package/dist/composables/use-window-size.js +2 -2
  176. package/dist/constants/size.d.ts +12 -0
  177. package/dist/constants/size.js +12 -0
  178. package/dist/contexts/button.d.ts +5 -0
  179. package/dist/contexts/button.js +5 -0
  180. package/dist/contexts/carousel.d.ts +2 -1
  181. package/dist/contexts/list.d.ts +23 -3
  182. package/dist/contexts/list.js +6 -2
  183. package/dist/contexts/resizable.d.ts +3 -11
  184. package/dist/contexts/tabs.d.ts +15 -0
  185. package/dist/contexts/tabs.js +2 -0
  186. package/dist/locales/en-us.d.ts +4 -4
  187. package/dist/locales/en-us.js +4 -4
  188. package/dist/locales/zh-cn.d.ts +4 -4
  189. package/dist/locales/zh-cn.js +4 -4
  190. package/dist/plugins/dayjs-millisecond-token.js +1 -1
  191. package/dist/styles/source.css +133 -128
  192. package/dist/styles/styles.css +2 -2
  193. package/dist/styles/tw.css +133 -128
  194. package/dist/types/shared/props.d.ts +1 -0
  195. package/dist/types/shared/utils.d.ts +1 -4
  196. package/dist/utils/date.d.ts +3 -3
  197. package/dist/utils/dom.d.ts +1 -0
  198. package/dist/utils/dom.js +4 -0
  199. package/dist/utils/event.d.ts +2 -1
  200. package/dist/utils/event.js +7 -1
  201. package/dist/utils/format.d.ts +3 -3
  202. package/dist/utils/format.js +5 -4
  203. package/dist/utils/fuzzy-search.d.ts +7 -0
  204. package/dist/utils/fuzzy-search.js +61 -0
  205. package/dist/utils/get.d.ts +2 -0
  206. package/dist/utils/get.js +15 -1
  207. package/dist/utils/index.d.ts +10 -11
  208. package/dist/utils/index.js +2 -3
  209. package/dist/utils/ref.d.ts +2 -2
  210. package/dist/utils/{throttle.d.ts → timing.d.ts} +1 -0
  211. package/dist/utils/{throttle.js → timing.js} +4 -2
  212. package/package.json +40 -37
  213. package/volar.d.ts +7 -0
  214. package/dist/components/overlay/overlay-stack.d.ts +0 -3
  215. package/dist/components/overlay/overlay-stack.js +0 -17
  216. package/dist/composables/use-pointer-gesture.d.ts +0 -180
  217. package/dist/composables/use-pointer-gesture.js +0 -406
  218. package/dist/utils/debounce.d.ts +0 -1
  219. package/dist/utils/debounce.js +0 -1
  220. package/dist/utils/regexp.d.ts +0 -8
  221. package/dist/utils/regexp.js +0 -8
  222. package/dist/utils/responsive.d.ts +0 -3
  223. package/dist/utils/responsive.js +0 -14
@@ -1,5 +1,5 @@
1
1
  <script setup>
2
- import { onBeforeUnmount, onMounted, shallowRef } from "vue";
2
+ import { onBeforeUnmount, onMounted, computed, shallowRef } from "vue";
3
3
  import { useCarouselContext } from "../../contexts/carousel";
4
4
  import { getUniqueId } from "../../utils/uid";
5
5
  defineOptions({
@@ -7,30 +7,35 @@ defineOptions({
7
7
  inheritAttrs: false
8
8
  });
9
9
  const uniqueId = getUniqueId();
10
- const transformStyle = shallowRef("");
10
+ const itemIndex = shallowRef(0);
11
11
  const carouselContext = useCarouselContext();
12
- function resetPosition() {
13
- transformStyle.value = "";
14
- }
15
- function getTranslateStyle(translate) {
16
- const isHorizontal = carouselContext.props.direction === "horizontal";
17
- return `translate${isHorizontal ? "X" : "Y"}(${translate}%)`;
18
- }
19
- function translateItem(index, activeIndex) {
20
- const maxLength = carouselContext.carousels.value.length;
12
+ const transformStyle = computed(() => {
13
+ if (!carouselContext.props.loop) {
14
+ return "";
15
+ }
16
+ const { carousels, virtualIndex } = carouselContext;
17
+ const maxLength = carousels.value.length;
21
18
  const lastIndex = maxLength - 1;
22
- if (index === 0 && activeIndex === maxLength) {
23
- transformStyle.value = getTranslateStyle(maxLength * 100);
24
- } else if (index === lastIndex && activeIndex <= 0) {
25
- transformStyle.value = getTranslateStyle(-maxLength * 100);
19
+ const activeIndex = virtualIndex.value;
20
+ if (itemIndex.value === 0 && activeIndex >= lastIndex) {
21
+ return getTranslateValue(maxLength * 100);
22
+ } else if (itemIndex.value === lastIndex && activeIndex <= 0) {
23
+ return getTranslateValue(-maxLength * 100);
26
24
  } else {
27
- resetPosition();
25
+ return "";
28
26
  }
27
+ });
28
+ function updateItemIndex(index) {
29
+ itemIndex.value = index;
30
+ }
31
+ function getTranslateValue(translate) {
32
+ const isHorizontal = carouselContext.props.direction === "horizontal";
33
+ return `translate${isHorizontal ? "X" : "Y"}(${translate}%)`;
29
34
  }
30
35
  onMounted(() => {
31
36
  carouselContext?.registerCarousel({
32
37
  uid: uniqueId,
33
- translateItem
38
+ updateItemIndex
34
39
  });
35
40
  });
36
41
  onBeforeUnmount(() => {
@@ -24,10 +24,10 @@ const props = defineProps({
24
24
  });
25
25
  const emits = defineEmits(["change", "update:modelValue"]);
26
26
  const checkboxVariant = tv({
27
- base: "pxd-checkbox--inner size-4 p-0.5 inline-flex shrink-0 transform-gpu items-center justify-center overflow-hidden border peer-focus-ring motion-safe:transition-colors",
27
+ base: "pxd-checkbox--inner size-4 p-0.5 pointer-events-none inline-flex shrink-0 transform-gpu items-center justify-center overflow-hidden border peer-focus-ring motion-safe:transition-colors",
28
28
  variants: {
29
29
  checked: {
30
- true: "",
30
+ true: "text-gray-100",
31
31
  false: ""
32
32
  },
33
33
  disabled: {
@@ -121,12 +121,12 @@ function onInputChange(event) {
121
121
  />
122
122
 
123
123
  <span aria-hidden="true" :class="computedClasses">
124
- <CheckIcon v-if="isChecked" class="size-3 pointer-events-none text-gray-100" />
125
- <MinusIcon v-else-if="indeterminate" class="size-3 pointer-events-none" />
126
- <span v-else class="size-3 pointer-events-none" />
124
+ <CheckIcon v-if="isChecked" class="size-3" />
125
+ <MinusIcon v-else-if="indeterminate" class="size-3" />
126
+ <span v-else class="size-3" />
127
127
  </span>
128
128
 
129
- <span class="text-sm flex-1 shrink-0 empty:hidden">
129
+ <span class="text-sm flex-1 shrink-0 leading-none empty:hidden">
130
130
  <slot>
131
131
  {{ label }}
132
132
  </slot>
@@ -10,8 +10,8 @@ declare const __VLS_base: import("vue").DefineComponent<CheckboxGroupProps, {},
10
10
  onChange?: ((args_0: import("../../types/shared").ComponentValue[]) => any) | undefined;
11
11
  "onUpdate:modelValue"?: ((args_0: import("../../types/shared").ComponentValue[]) => any) | undefined;
12
12
  }>, {
13
- options: import("../../types/shared").ComponentOption[];
14
13
  modelValue: import("../../types/shared").ComponentValue[];
14
+ options: import("../../types/shared").ComponentOption[];
15
15
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
16
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
17
  declare const _default: typeof __VLS_export;
@@ -3,11 +3,7 @@ declare var __VLS_1: {};
3
3
  type __VLS_Slots = {} & {
4
4
  default?: (props: typeof __VLS_1) => any;
5
5
  };
6
- declare const __VLS_base: import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{}>, {
7
- label: import("../../types/shared").ComponentLabel;
8
- size: number | string;
9
- variant: import("../../types/shared").ComponentVariant | "secondary";
10
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_base: import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
7
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
8
  declare const _default: typeof __VLS_export;
13
9
  export default _default;
@@ -7,13 +7,13 @@ defineOptions({
7
7
  inheritAttrs: false
8
8
  });
9
9
  const props = defineProps({
10
- size: { type: [Number, String], required: false, default: 10 },
10
+ size: { type: [Number, String], required: false },
11
11
  inset: { type: Boolean, required: false },
12
- label: { type: [String, Number, Array, null], required: false, default: "" },
13
- variant: { type: String, required: false, default: "primary" }
12
+ label: { type: [String, Number, Array, null], required: false },
13
+ variant: { type: String, required: false }
14
14
  });
15
15
  const chipVariant = tv({
16
- base: "pxd-chip--label text-xs top-0 right-0 absolute rounded-full border border-background-100 motion-safe:transition-all",
16
+ base: "pxd-chip--label text-xs top-0 right-0 absolute rounded-full border border-background-100 motion-safe:transition-appearance",
17
17
  variants: {
18
18
  variant: {
19
19
  primary: "bg-primary text-background-100",
@@ -0,0 +1,12 @@
1
+ import type { ColorSelectorProps } from './types';
2
+ declare const __VLS_export: import("vue").DefineComponent<ColorSelectorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
3
+ change: (args_0: string) => any;
4
+ "update:modelValue": (args_0: string) => any;
5
+ }, string, import("vue").PublicProps, Readonly<ColorSelectorProps> & Readonly<{
6
+ onChange?: ((args_0: string) => any) | undefined;
7
+ "onUpdate:modelValue"?: ((args_0: string) => any) | undefined;
8
+ }>, {
9
+ colors: string[];
10
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const _default: typeof __VLS_export;
12
+ export default _default;
@@ -0,0 +1,64 @@
1
+ <script setup>
2
+ import { tv } from "tailwind-variants";
3
+ import { computed } from "vue";
4
+ import { useModelValue } from "../../composables/use-model-value";
5
+ import { useConfigProvider } from "../../contexts/config-provider";
6
+ import { getUniqueId } from "../../utils/uid";
7
+ defineOptions({
8
+ name: "PColorSelector",
9
+ inheritAttrs: false,
10
+ model: {
11
+ prop: "modelValue",
12
+ event: "update:modelValue"
13
+ }
14
+ });
15
+ const props = defineProps({
16
+ size: { type: String, required: false },
17
+ colors: { type: Array, required: false, default: () => ["#000000", "#FFFFFF", "#FF0000", "#00FF00", "#0000FF"] },
18
+ modelValue: { type: String, required: false }
19
+ });
20
+ const emits = defineEmits(["change", "update:modelValue"]);
21
+ const uniqueName = getUniqueId("color-selector");
22
+ const colorSelectorVariants = tv({
23
+ base: "pxd-color-selector--item size-5 cursor-pointer appearance-none rounded-full border-2 border-transparent bg-current self-focus-ring checked:border-current active:scale-85 motion-safe:transition-appearance",
24
+ variants: {
25
+ size: {
26
+ sm: "size-4",
27
+ md: "size-5",
28
+ lg: "size-6"
29
+ }
30
+ }
31
+ });
32
+ const configProvider = useConfigProvider();
33
+ const modelValue = useModelValue(props, emits);
34
+ const computedClasses = computed(
35
+ () => colorSelectorVariants({
36
+ size: props.size || configProvider.size
37
+ })
38
+ );
39
+ function isActive(color) {
40
+ return modelValue.value === color;
41
+ }
42
+ </script>
43
+
44
+ <template>
45
+ <div role="tabpanel" class="pxd-color-selector gap-2 flex" v-bind="$attrs">
46
+ <template v-for="color in colors" :key="color">
47
+ <input
48
+ type="radio"
49
+ :name="uniqueName"
50
+ :value="color"
51
+ :style="{ color }"
52
+ :class="computedClasses"
53
+ :aria-selected="isActive(color)"
54
+ :checked="isActive(color)"
55
+ :tabindex="isActive(color) ? 0 : -1"
56
+ @change="modelValue = color"
57
+ />
58
+ </template>
59
+ </div>
60
+ </template>
61
+
62
+ <style>
63
+ .pxd-color-selector--item:checked{box-shadow:inset 0 0 0 2px var(--color-background-100)}
64
+ </style>
@@ -0,0 +1,12 @@
1
+ import type { ComponentSize } from '../../types/shared/props'
2
+
3
+ export interface ColorSelectorProps {
4
+ size?: ComponentSize
5
+ colors?: string[]
6
+ modelValue?: string
7
+ }
8
+
9
+ export interface ColorSelectorEmits {
10
+ change: [NonNullable<ColorSelectorProps['modelValue']>]
11
+ 'update:modelValue': [NonNullable<ColorSelectorProps['modelValue']>]
12
+ }
@@ -1,26 +1,26 @@
1
1
  import type { ListOptionSelected } from '../list/types';
2
2
  import type { CommandMenuProps } from './types';
3
- declare var __VLS_30: {}, __VLS_32: {};
3
+ declare var __VLS_20: {}, __VLS_22: {};
4
4
  type __VLS_Slots = {} & {
5
- default?: (props: typeof __VLS_30) => any;
5
+ default?: (props: typeof __VLS_20) => any;
6
6
  } & {
7
- footer?: (props: typeof __VLS_32) => any;
7
+ footer?: (props: typeof __VLS_22) => any;
8
8
  };
9
9
  declare const __VLS_base: import("vue").DefineComponent<CommandMenuProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
- select: (args_0: MouseEvent, args_1: ListOptionSelected) => any;
11
10
  change: (args_0: boolean) => any;
12
11
  "update:modelValue": (args_0: boolean) => any;
12
+ select: (args_0: ListOptionSelected, args_1: MouseEvent) => any;
13
13
  show: () => any;
14
14
  hide: () => any;
15
15
  }, string, import("vue").PublicProps, Readonly<CommandMenuProps> & Readonly<{
16
- onSelect?: ((args_0: MouseEvent, args_1: ListOptionSelected) => any) | undefined;
17
16
  onChange?: ((args_0: boolean) => any) | undefined;
18
17
  "onUpdate:modelValue"?: ((args_0: boolean) => any) | undefined;
18
+ onSelect?: ((args_0: ListOptionSelected, args_1: MouseEvent) => any) | undefined;
19
19
  onShow?: (() => any) | undefined;
20
20
  onHide?: (() => any) | undefined;
21
21
  }>, {
22
- placeholder: string;
23
22
  modelValue: boolean;
23
+ placeholder: string;
24
24
  closeOnPressEscape: boolean;
25
25
  closeOnClickOverlay: boolean;
26
26
  closeOnSelectItem: boolean;
@@ -1,12 +1,11 @@
1
1
  <script setup>
2
- import { nextTick, shallowRef } from "vue";
3
- import { useDeferredValue } from "../../composables/use-deferred-value";
2
+ import { computed, shallowRef } from "vue";
3
+ import { useListFilter } from "../../composables/use-list-filter";
4
4
  import { PRESET_MEDIA_QUERIES, useMediaQuery } from "../../composables/use-media-query";
5
5
  import { useModelValue } from "../../composables/use-model-value";
6
6
  import { useConfigProvider } from "../../contexts/config-provider";
7
- import { provideListFilterValue } from "../../contexts/list";
7
+ import { provideListFilterContext } from "../../contexts/list";
8
8
  import { getUniqueId } from "../../utils/uid";
9
- import PButton from "../button/index.vue";
10
9
  import PList from "../list/index.vue";
11
10
  import PModal from "../modal/index.vue";
12
11
  defineOptions({
@@ -29,20 +28,10 @@ const emits = defineEmits(["update:modelValue", "select", "change", "show", "hid
29
28
  const uniqueId = getUniqueId();
30
29
  const configProvider = useConfigProvider();
31
30
  const modelValue = useModelValue(props, emits);
32
- const isDesktop = useMediaQuery(PRESET_MEDIA_QUERIES.SM_UP);
33
- const listRef = shallowRef();
34
- const isEmptyResult = shallowRef(false);
35
- const { value: filterKeyword, deferred: deferredFilterKeyword } = useDeferredValue("", {
36
- async valueChange(v) {
37
- if (!v) {
38
- return;
39
- }
40
- await nextTick();
41
- listRef.value.updateListItem();
42
- listRef.value.setFirstAsActive();
43
- isEmptyResult.value = listRef.value.isNoVisibleItem();
44
- }
45
- });
31
+ const filterKeyword = shallowRef("");
32
+ const filterContext = useListFilter({ keyword: filterKeyword });
33
+ const isSmallScreen = useMediaQuery(PRESET_MEDIA_QUERIES.IS_XS);
34
+ const isEmptyResult = computed(() => filterKeyword.value && filterContext.visibleCount.value === 0);
46
35
  function hideModal() {
47
36
  filterKeyword.value = "";
48
37
  emits("hide");
@@ -53,23 +42,23 @@ function showModal() {
53
42
  function closeModal() {
54
43
  modelValue.value = false;
55
44
  }
56
- function onListItemSelect(ev, item) {
57
- emits("select", ev, item);
45
+ function onListItemSelect(item, ev) {
46
+ emits("select", item, ev);
58
47
  if (props.closeOnSelectItem) {
59
48
  closeModal();
60
49
  }
61
50
  }
62
- provideListFilterValue(deferredFilterKeyword);
51
+ provideListFilterContext(filterContext);
63
52
  </script>
64
53
 
65
54
  <template>
66
55
  <PModal
67
56
  v-model="modelValue"
68
57
  width="640px"
69
- class="pxd-command-menu max-sm:dvh-80"
58
+ class="pxd-command-menu max-sm:h-full"
70
59
  content-class="!p-0 overflow-hidden"
71
60
  wrapper-class="sm:top-1/8 sm:translate-y-0"
72
- :auto-focus-element="isDesktop"
61
+ :auto-focus-element="!isSmallScreen"
73
62
  :close-on-press-escape="closeOnPressEscape"
74
63
  :close-on-click-overlay="closeOnClickOverlay"
75
64
  v-bind="$attrs"
@@ -98,29 +87,31 @@ provideListFilterValue(deferredFilterKeyword);
98
87
  class="h-7 flex-1 shrink-0 appearance-none border-none bg-transparent font-inherit text-foreground outline-none"
99
88
  />
100
89
 
101
- <PButton
102
- v-if="closeOnPressEscape"
103
- size="xs"
104
- class="px-0! text-xs shrink-0"
90
+ <button
91
+ type="button"
92
+ class="px-1.5 h-5 text-xs shrink-0 cursor-pointer appearance-none rounded-sm border bg-background-100 self-focus-ring hover:bg-background-hover active:bg-background-active motion-safe:transition-colors"
105
93
  @click="closeModal"
106
94
  >
107
95
  Esc
108
- </PButton>
96
+ </button>
109
97
  </label>
110
98
  </template>
111
99
 
112
100
  <PList
113
- ref="listRef"
114
101
  :loop="false"
115
102
  class="sm:max-h-110 h-full"
103
+ :default-active-index="0"
116
104
  :toggle-on-key-press="modelValue"
117
105
  @select="onListItemSelect"
118
106
  >
119
107
  <slot />
120
108
 
121
- <p v-if="isEmptyResult" class="py-7.5 text-sm text-center text-foreground-secondary">
122
- {{ configProvider.locale.empty.search }}
123
- <span class="text-foreground">"{{ filterKeyword }}"</span>
109
+ <p
110
+ v-if="filterKeyword && isEmptyResult"
111
+ class="py-7.5 text-sm text-center text-foreground-secondary"
112
+ >
113
+ {{ configProvider.locale.results.searchText }}
114
+ <span class="whitespace-pre text-foreground">"{{ filterKeyword }}"</span>
124
115
  </p>
125
116
  </PList>
126
117
 
@@ -11,7 +11,7 @@ export interface CommandMenuProps {
11
11
 
12
12
  export interface CommandMenuEmits {
13
13
  'update:modelValue': [boolean]
14
- select: [MouseEvent, ListOptionSelected]
14
+ select: [ListOptionSelected, MouseEvent]
15
15
  change: [boolean]
16
16
  show: []
17
17
  hide: []
@@ -1,19 +1,28 @@
1
1
  <script setup>
2
+ import { computed } from "vue";
3
+ import { provideListFilterGroupId, useListFilterContext } from "../../contexts/list";
4
+ import { getUniqueId } from "../../utils/uid";
2
5
  defineOptions({
3
6
  name: "PCommandMenuGroup",
4
7
  inheritAttrs: false
5
8
  });
6
9
  defineProps({
7
- label: { type: [String, Number, Array, null], required: false }
10
+ label: { type: [String, Number, Array, null], required: true }
8
11
  });
12
+ const groupId = getUniqueId("list-group");
13
+ const listFilterContext = useListFilterContext(null);
14
+ const isHidden = computed(() => {
15
+ if (!listFilterContext || !listFilterContext.searchValue.value.trim()) {
16
+ return false;
17
+ }
18
+ return !listFilterContext.isGroupVisible(groupId);
19
+ });
20
+ provideListFilterGroupId(groupId);
9
21
  </script>
10
22
 
11
23
  <template>
12
- <div class="pxd-command-menu-group" role="presentation" v-bind="$attrs">
13
- <div
14
- aria-hidden="true"
15
- class="h-10 px-2 flex items-center text-13px text-foreground-secondary only:hidden empty:hidden"
16
- >
24
+ <div class="pxd-command-menu-group" role="presentation" :hidden="isHidden" v-bind="$attrs">
25
+ <div aria-hidden="true" class="h-10 px-2 flex items-center text-13 text-gray-900">
17
26
  {{ label }}
18
27
  </div>
19
28
 
@@ -1,5 +1,5 @@
1
1
  import type { ComponentLabel } from '../../types/shared'
2
2
 
3
3
  export interface CommandMenuGroupProps {
4
- label?: ComponentLabel
4
+ label: ComponentLabel
5
5
  }
@@ -2,11 +2,11 @@ import type { CountdownProps } from './types';
2
2
  declare var __VLS_1: {
3
3
  active: boolean;
4
4
  times: {
5
- dd: any;
6
- hh: any;
7
- mm: any;
8
- ss: any;
9
- ms: any;
5
+ dd: string;
6
+ hh: string;
7
+ mm: string;
8
+ ss: string;
9
+ ms: string;
10
10
  };
11
11
  };
12
12
  type __VLS_Slots = {} & {
@@ -15,11 +15,11 @@ type __VLS_Slots = {} & {
15
15
  declare const __VLS_base: import("vue").DefineComponent<CountdownProps, {
16
16
  reset: () => void;
17
17
  times: import("vue").ComputedRef<{
18
- dd: any;
19
- hh: any;
20
- mm: any;
21
- ss: any;
22
- ms: any;
18
+ dd: string;
19
+ hh: string;
20
+ mm: string;
21
+ ss: string;
22
+ ms: string;
23
23
  }>;
24
24
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
25
25
  change: (active: boolean) => any;
@@ -31,12 +31,12 @@ declare const __VLS_base: import("vue").DefineComponent<CountdownProps, {
31
31
  onFinish?: (() => any) | undefined;
32
32
  }>, {
33
33
  format: string;
34
+ millisecond: boolean;
34
35
  endTime: number;
35
36
  durations: number;
36
37
  active: boolean;
37
38
  autoReset: boolean;
38
39
  precision: number;
39
- millisecond: boolean;
40
40
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
41
41
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
42
42
  declare const _default: typeof __VLS_export;
@@ -13,27 +13,27 @@ type __VLS_Slots = {} & {
13
13
  };
14
14
  declare const __VLS_base: import("vue").DefineComponent<DrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
15
  change: (args_0: boolean) => any;
16
- "update:modelValue": (args_0: boolean) => any;
16
+ "update:modelValue": (visible: boolean) => any;
17
17
  show: () => any;
18
18
  hide: () => any;
19
- "visible-change": (args_0: boolean) => any;
20
- "outside-click": (args_0: MouseEvent) => any;
19
+ "outside-click": (args_0: PointerEvent) => any;
20
+ "visible-change": (visible: boolean) => any;
21
21
  }, string, import("vue").PublicProps, Readonly<DrawerProps> & Readonly<{
22
22
  onChange?: ((args_0: boolean) => any) | undefined;
23
- "onUpdate:modelValue"?: ((args_0: boolean) => any) | undefined;
23
+ "onUpdate:modelValue"?: ((visible: boolean) => any) | undefined;
24
24
  onShow?: (() => any) | undefined;
25
25
  onHide?: (() => any) | undefined;
26
- "onVisible-change"?: ((args_0: boolean) => any) | undefined;
27
- "onOutside-click"?: ((args_0: MouseEvent) => any) | undefined;
26
+ "onOutside-click"?: ((args_0: PointerEvent) => any) | undefined;
27
+ "onVisible-change"?: ((visible: boolean) => any) | undefined;
28
28
  }>, {
29
29
  modelValue: boolean;
30
- closeOnPressEscape: boolean;
30
+ position: import("../../types/shared").BasePosition;
31
31
  autoFocusElement: string | boolean;
32
32
  appendToBody: boolean;
33
+ closeOnPressEscape: boolean;
33
34
  closeOnClickOverlay: boolean;
34
35
  defaultHeaderStyle: boolean;
35
36
  defaultFooterStyle: boolean;
36
- position: import("../../types/shared").BasePosition;
37
37
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
38
38
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
39
39
  declare const _default: typeof __VLS_export;
@@ -13,6 +13,7 @@ defineOptions({
13
13
  }
14
14
  });
15
15
  const props = defineProps({
16
+ zIndex: { type: Number, required: false },
16
17
  title: { type: [String, Number, Array, null], required: false },
17
18
  subtitle: { type: [String, Number, Array, null], required: false },
18
19
  size: { type: [Number, String], required: false },
@@ -43,13 +44,10 @@ const defaultStyles = computed(() => ({
43
44
  footerClass: props.defaultFooterStyle ? "border-t pt-4 bg-background-200 dark:bg-background-100" : ""
44
45
  }));
45
46
  const transitionName = computed(() => `pxd-transition--drawer-${ensurePosition.value}`);
46
- const computedStyle = computed(() => {
47
- const styles = {};
48
- if (props.size) {
49
- styles["--drawer-size"] = getCssUnitValue(props.size);
50
- }
51
- return styles;
52
- });
47
+ const computedStyle = computed(() => ({
48
+ "--modal-index": props.zIndex,
49
+ "--drawer-size": getCssUnitValue(props.size)
50
+ }));
53
51
  const focusTrapOptions = computed(() => ({
54
52
  autoFocusElement: props.autoFocusElement,
55
53
  escapeDeactivates: props.closeOnPressEscape,
@@ -90,7 +88,12 @@ watch(
90
88
  @escape="closeOverlayIfNeed"
91
89
  @click="onOverlayClick"
92
90
  >
93
- <Transition :name="transitionName" mode="out-in" appear>
91
+ <Transition
92
+ appear
93
+ mode="out-in"
94
+ :name="transitionName"
95
+ class="default-transition-duration default-transition-timing-function"
96
+ >
94
97
  <div
95
98
  v-if="isVisible"
96
99
  ref="drawerRef"
@@ -98,7 +101,7 @@ watch(
98
101
  tabindex="-1"
99
102
  aria-modal="true"
100
103
  :aria-expanded="isVisible"
101
- class="pxd-drawer group/drawer translate-z-0 sm:[--drawer-width:30vw] sm:[--drawer-height:30vw] pointer-events-auto fixed z-10 flex max-h-full max-w-full flex-col bg-background-100 shadow-border-modal outline-none"
104
+ class="pxd-drawer group/drawer translate-z-0 pointer-events-auto fixed z-(--modal-index) flex max-h-full max-w-full flex-col bg-background-100 shadow-border-modal outline-none"
102
105
  :class="wrapperClass"
103
106
  :style="computedStyle"
104
107
  :data-position="ensurePosition"
@@ -146,5 +149,5 @@ watch(
146
149
  </template>
147
150
 
148
151
  <style>
149
- .pxd-drawer[data-position=left]{bottom:0;left:0;top:0}.pxd-drawer[data-position=top]{left:0;right:0;top:0}.pxd-drawer[data-position=right]{bottom:0;right:0;top:0}.pxd-drawer[data-position=bottom]{bottom:0;left:0;right:0}.pxd-drawer[data-position=left],.pxd-drawer[data-position=right]{width:var(--drawer-size,var(--drawer-width,80vw))}.pxd-drawer[data-position=bottom],.pxd-drawer[data-position=top]{height:var(--drawer-size,var(--drawer-height,80vw))}.pxd-transition--drawer-bottom-enter-active,.pxd-transition--drawer-bottom-leave-active,.pxd-transition--drawer-left-enter-active,.pxd-transition--drawer-left-leave-active,.pxd-transition--drawer-right-enter-active,.pxd-transition--drawer-right-leave-active,.pxd-transition--drawer-top-enter-active,.pxd-transition--drawer-top-leave-active{transition-property:transform}.pxd-transition--drawer-right-enter-from,.pxd-transition--drawer-right-leave-to{transform:translateX(100%)}.pxd-transition--drawer-left-enter-from,.pxd-transition--drawer-left-leave-to{transform:translateX(-100%)}.pxd-transition--drawer-top-enter-from,.pxd-transition--drawer-top-leave-to{transform:translateY(-100%)}.pxd-transition--drawer-bottom-enter-from,.pxd-transition--drawer-bottom-leave-to{transform:translateY(100%)}
152
+ .pxd-drawer[data-position=left]{bottom:0;left:0;top:0}.pxd-drawer[data-position=top]{left:0;right:0;top:0}.pxd-drawer[data-position=right]{bottom:0;right:0;top:0}.pxd-drawer[data-position=bottom]{bottom:0;left:0;right:0}.pxd-drawer[data-position=left],.pxd-drawer[data-position=right]{width:var(--drawer-size,30vw)}.pxd-drawer[data-position=bottom],.pxd-drawer[data-position=top]{height:var(--drawer-size,30vh)}.pxd-transition--drawer-bottom-enter-active,.pxd-transition--drawer-bottom-leave-active,.pxd-transition--drawer-left-enter-active,.pxd-transition--drawer-left-leave-active,.pxd-transition--drawer-right-enter-active,.pxd-transition--drawer-right-leave-active,.pxd-transition--drawer-top-enter-active,.pxd-transition--drawer-top-leave-active{transition-property:transform}.pxd-transition--drawer-right-enter-from,.pxd-transition--drawer-right-leave-to{transform:translateX(100%)}.pxd-transition--drawer-left-enter-from,.pxd-transition--drawer-left-leave-to{transform:translateX(-100%)}.pxd-transition--drawer-top-enter-from,.pxd-transition--drawer-top-leave-to{transform:translateY(-100%)}.pxd-transition--drawer-bottom-enter-from,.pxd-transition--drawer-bottom-leave-to{transform:translateY(100%)}
150
153
  </style>
@@ -1,6 +1,7 @@
1
1
  import type { BasePosition, ComponentClass, ComponentLabel } from '../../types/shared'
2
2
 
3
3
  export interface DrawerProps {
4
+ zIndex?: number
4
5
  title?: ComponentLabel
5
6
  subtitle?: ComponentLabel
6
7
  size?: number | string
@@ -21,7 +22,7 @@ export interface DrawerEmits {
21
22
  show: []
22
23
  hide: []
23
24
  change: [boolean]
24
- 'outside-click': [MouseEvent]
25
- 'visible-change': [boolean]
26
- 'update:modelValue': [boolean]
25
+ 'outside-click': [PointerEvent]
26
+ 'visible-change': [visible: boolean]
27
+ 'update:modelValue': [visible: boolean]
27
28
  }
@@ -1,5 +1,8 @@
1
1
  import type { EllipsisTextProps } from './types';
2
- declare const __VLS_export: import("vue").DefineComponent<EllipsisTextProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
2
+ declare const __VLS_export: import("vue").DefineComponent<EllipsisTextProps, {
3
+ isExpanded: import("vue").ShallowRef<boolean, boolean>;
4
+ isOverflow: import("vue").ShallowRef<boolean, boolean>;
5
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
3
6
  toggle: (expanded: boolean) => any;
4
7
  }, string, import("vue").PublicProps, Readonly<EllipsisTextProps> & Readonly<{
5
8
  onToggle?: ((expanded: boolean) => any) | undefined;