pxd 0.0.55 → 0.0.61

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 (279) hide show
  1. package/README.md +18 -4
  2. package/dist/components/_internal/fragment-container.vue +3 -2
  3. package/dist/components/active-graph/index.d.vue.ts +2 -3
  4. package/dist/components/active-graph/index.vue +23 -16
  5. package/dist/components/active-graph/types.d.ts +4 -3
  6. package/dist/components/avatar/index.vue +19 -10
  7. package/dist/components/avatar/types.d.ts +0 -12
  8. package/dist/components/avatar-group/index.d.vue.ts +2 -2
  9. package/dist/components/avatar-group/index.vue +4 -3
  10. package/dist/components/avatar-group/types.d.ts +11 -0
  11. package/dist/components/badge/index.d.vue.ts +1 -1
  12. package/dist/components/badge/index.vue +47 -3
  13. package/dist/components/badge/types.d.ts +24 -1
  14. package/dist/components/book/index.vue +3 -2
  15. package/dist/components/browser/index.vue +6 -2
  16. package/dist/components/button/index.d.vue.ts +1 -1
  17. package/dist/components/button/index.vue +60 -12
  18. package/dist/components/carousel/index.d.vue.ts +24 -2
  19. package/dist/components/carousel/index.vue +341 -28
  20. package/dist/components/carousel/types.d.ts +2 -2
  21. package/dist/components/carousel-item/index.d.vue.ts +13 -0
  22. package/dist/components/carousel-item/index.vue +49 -0
  23. package/dist/components/checkbox/index.d.vue.ts +1 -5
  24. package/dist/components/checkbox/index.vue +66 -31
  25. package/dist/components/checkbox/types.d.ts +2 -14
  26. package/dist/components/checkbox-group/index.d.vue.ts +2 -7
  27. package/dist/components/checkbox-group/index.vue +11 -29
  28. package/dist/components/checkbox-group/types.d.ts +12 -0
  29. package/dist/components/chip/index.d.vue.ts +1 -1
  30. package/dist/components/chip/index.vue +31 -2
  31. package/dist/components/choicebox/index.d.vue.ts +11 -5
  32. package/dist/components/choicebox/index.vue +36 -54
  33. package/dist/components/choicebox/types.d.ts +11 -18
  34. package/dist/components/choicebox-item/index.d.vue.ts +16 -0
  35. package/dist/components/choicebox-item/index.vue +67 -0
  36. package/dist/components/choicebox-item/types.d.ts +12 -0
  37. package/dist/components/collapse/index.d.vue.ts +5 -4
  38. package/dist/components/collapse/index.vue +47 -30
  39. package/dist/components/collapse/types.d.ts +2 -5
  40. package/dist/components/collapse-group/index.d.vue.ts +2 -4
  41. package/dist/components/collapse-group/index.vue +8 -20
  42. package/dist/components/collapse-group/types.d.ts +6 -0
  43. package/dist/components/command-menu/index.vue +6 -7
  44. package/dist/components/command-menu/types.d.ts +0 -5
  45. package/dist/components/command-menu-group/index.d.vue.ts +1 -1
  46. package/dist/components/command-menu-group/index.vue +3 -2
  47. package/dist/components/command-menu-group/types.d.ts +5 -0
  48. package/dist/components/config-provider/index.d.vue.ts +3 -3
  49. package/dist/components/config-provider/index.vue +6 -4
  50. package/dist/components/countdown/index.vue +3 -2
  51. package/dist/components/countdown/types.d.ts +2 -2
  52. package/dist/components/dash-line/index.vue +3 -1
  53. package/dist/components/description/index.d.vue.ts +1 -1
  54. package/dist/components/description/index.vue +8 -7
  55. package/dist/components/description/types.d.ts +1 -1
  56. package/dist/components/drawer/index.d.vue.ts +3 -2
  57. package/dist/components/drawer/index.vue +20 -15
  58. package/dist/components/drawer/types.d.ts +3 -3
  59. package/dist/components/ellipsis-text/index.d.vue.ts +14 -0
  60. package/dist/components/ellipsis-text/index.vue +242 -0
  61. package/dist/components/ellipsis-text/types.d.ts +14 -0
  62. package/dist/components/empty-state/index.vue +6 -2
  63. package/dist/components/error/index.d.vue.ts +1 -3
  64. package/dist/components/error/index.vue +21 -6
  65. package/dist/components/error/types.d.ts +7 -1
  66. package/dist/components/fader/index.vue +30 -11
  67. package/dist/components/fader/types.d.ts +2 -2
  68. package/dist/components/gauge/index.vue +7 -2
  69. package/dist/components/grid/index.vue +9 -4
  70. package/dist/components/grid/types.d.ts +0 -5
  71. package/dist/components/grid-item/index.d.vue.ts +1 -1
  72. package/dist/components/grid-item/index.vue +16 -8
  73. package/dist/components/grid-item/types.d.ts +6 -0
  74. package/dist/components/hold-button/index.d.vue.ts +2 -2
  75. package/dist/components/hold-button/index.vue +1 -1
  76. package/dist/components/index.d.ts +7 -3
  77. package/dist/components/index.js +7 -3
  78. package/dist/components/input/index.d.vue.ts +8 -8
  79. package/dist/components/input/index.vue +54 -21
  80. package/dist/components/input/types.d.ts +7 -10
  81. package/dist/components/intersection-observer/index.d.vue.ts +0 -1
  82. package/dist/components/intersection-observer/index.vue +12 -3
  83. package/dist/components/kbd/index.vue +1 -1
  84. package/dist/components/link-button/index.d.vue.ts +1 -1
  85. package/dist/components/link-button/index.vue +4 -6
  86. package/dist/components/link-button/types.d.ts +1 -1
  87. package/dist/components/list/index.d.vue.ts +8 -5
  88. package/dist/components/list/index.vue +50 -54
  89. package/dist/components/list/types.d.ts +3 -20
  90. package/dist/components/list-item/index.d.vue.ts +3 -2
  91. package/dist/components/list-item/index.vue +44 -18
  92. package/dist/components/list-item/types.d.ts +15 -0
  93. package/dist/components/loading-bar/index.vue +33 -2
  94. package/dist/components/loading-bar/types.d.ts +1 -1
  95. package/dist/components/loading-dots/index.vue +3 -2
  96. package/dist/components/menu/index.d.vue.ts +5 -2
  97. package/dist/components/menu/index.vue +4 -1
  98. package/dist/components/menu/types.d.ts +5 -0
  99. package/dist/components/message/index.d.vue.ts +11 -8
  100. package/dist/components/message/index.vue +4 -12
  101. package/dist/components/message/types.d.ts +1 -12
  102. package/dist/components/message-item/index.d.vue.ts +1 -3
  103. package/dist/components/message-item/index.vue +13 -7
  104. package/dist/components/message-item/types.d.ts +11 -0
  105. package/dist/components/modal/index.d.vue.ts +3 -2
  106. package/dist/components/modal/index.vue +17 -13
  107. package/dist/components/modal/types.d.ts +3 -3
  108. package/dist/components/noise-background/index.vue +4 -3
  109. package/dist/components/note/index.d.vue.ts +1 -2
  110. package/dist/components/note/index.vue +81 -29
  111. package/dist/components/note/types.d.ts +10 -2
  112. package/dist/components/number-input/index.d.vue.ts +5 -4
  113. package/dist/components/number-input/index.vue +36 -6
  114. package/dist/components/number-input/types.d.ts +2 -0
  115. package/dist/components/overlay/index.vue +1 -1
  116. package/dist/components/overlay/types.d.ts +1 -1
  117. package/dist/components/pagination/index.vue +5 -3
  118. package/dist/components/pin-input/index.d.vue.ts +6 -1
  119. package/dist/components/pin-input/index.vue +60 -23
  120. package/dist/components/pin-input/types.d.ts +0 -4
  121. package/dist/components/placeholder/index.vue +14 -11
  122. package/dist/components/popover/index.vue +116 -78
  123. package/dist/components/popover/types.d.ts +1 -0
  124. package/dist/components/progress/index.d.vue.ts +1 -1
  125. package/dist/components/progress/index.vue +15 -2
  126. package/dist/components/project-banner/index.d.vue.ts +18 -0
  127. package/dist/components/project-banner/index.vue +59 -0
  128. package/dist/components/project-banner/types.d.ts +8 -0
  129. package/dist/components/radio/index.vue +62 -20
  130. package/dist/components/radio/types.d.ts +1 -14
  131. package/dist/components/radio-group/index.d.vue.ts +2 -4
  132. package/dist/components/radio-group/index.vue +11 -16
  133. package/dist/components/radio-group/types.d.ts +12 -0
  134. package/dist/components/resizable/types.d.ts +5 -10
  135. package/dist/components/resizable-handle/index.vue +1 -1
  136. package/dist/components/resizable-panel/index.d.vue.ts +1 -1
  137. package/dist/components/resizable-panel/index.vue +7 -2
  138. package/dist/components/resizable-panel/types.d.ts +4 -0
  139. package/dist/components/scrollable/index.d.vue.ts +29 -0
  140. package/dist/components/scrollable/index.vue +98 -83
  141. package/dist/components/scrollable/types.d.ts +19 -6
  142. package/dist/components/skeleton/index.vue +24 -1
  143. package/dist/components/slider/index.d.vue.ts +6 -6
  144. package/dist/components/slider/index.vue +86 -44
  145. package/dist/components/slider/types.d.ts +1 -1
  146. package/dist/components/snippet/index.vue +28 -2
  147. package/dist/components/spinner/index.vue +4 -2
  148. package/dist/components/stack/index.d.vue.ts +2 -2
  149. package/dist/components/stack/index.vue +35 -3
  150. package/dist/components/stack/types.d.ts +1 -1
  151. package/dist/components/status-dot/index.vue +5 -1
  152. package/dist/components/switch/index.d.vue.ts +10 -1
  153. package/dist/components/switch/index.vue +35 -44
  154. package/dist/components/switch/types.d.ts +4 -12
  155. package/dist/components/switch-item/index.d.vue.ts +14 -0
  156. package/dist/components/switch-item/index.vue +79 -0
  157. package/dist/components/switch-item/types.d.ts +9 -0
  158. package/dist/components/teleport/index.d.vue.ts +1 -1
  159. package/dist/components/teleport/index.vue +1 -1
  160. package/dist/components/teleport/types.d.ts +1 -1
  161. package/dist/components/text/index.d.vue.ts +1 -2
  162. package/dist/components/text/index.vue +36 -22
  163. package/dist/components/text/types.d.ts +1 -1
  164. package/dist/components/textarea/index.d.vue.ts +4 -4
  165. package/dist/components/textarea/index.vue +33 -4
  166. package/dist/components/textarea/types.d.ts +0 -1
  167. package/dist/components/time-picker/index.d.vue.ts +1 -2
  168. package/dist/components/time-picker/index.vue +43 -9
  169. package/dist/components/time-picker/types.d.ts +1 -2
  170. package/dist/components/toggle/index.vue +11 -10
  171. package/dist/components/toggle-button/index.d.vue.ts +22 -0
  172. package/dist/components/toggle-button/index.vue +110 -0
  173. package/dist/components/toggle-button/types.d.ts +16 -0
  174. package/dist/components/{choicebox-group → toggle-button-group}/index.d.vue.ts +5 -5
  175. package/dist/components/toggle-button-group/index.vue +68 -0
  176. package/dist/components/toggle-button-group/types.d.ts +22 -0
  177. package/dist/components/tooltip/index.d.vue.ts +2 -0
  178. package/dist/components/tooltip/index.vue +9 -3
  179. package/dist/components/tooltip/types.d.ts +3 -2
  180. package/dist/components/virtual-list/index.d.vue.ts +25 -4
  181. package/dist/components/virtual-list/index.vue +66 -10
  182. package/dist/components/virtual-list/types.d.ts +9 -4
  183. package/dist/composables/index.d.ts +2 -2
  184. package/dist/composables/index.js +2 -2
  185. package/dist/composables/use-browser-observer.d.ts +5 -5
  186. package/dist/composables/use-browser-observer.js +23 -20
  187. package/dist/composables/use-copy-click.js +4 -0
  188. package/dist/composables/use-countdown.d.ts +2 -2
  189. package/dist/composables/use-delay-destroy.d.ts +1 -1
  190. package/dist/composables/use-focus-trap.d.ts +7 -3
  191. package/dist/composables/use-focus-trap.js +19 -7
  192. package/dist/composables/use-forward-ref-expose.d.ts +2 -0
  193. package/dist/composables/use-forward-ref-expose.js +41 -0
  194. package/dist/composables/use-message.d.ts +4 -7
  195. package/dist/composables/use-model-value.d.ts +9 -8
  196. package/dist/composables/use-popover-responsive.d.ts +2 -2
  197. package/dist/composables/use-popover-responsive.js +3 -3
  198. package/dist/composables/use-repeat-action.d.ts +1 -1
  199. package/dist/composables/use-repeat-action.js +2 -2
  200. package/dist/composables/use-virtual-list.d.ts +21 -12
  201. package/dist/composables/use-virtual-list.js +90 -158
  202. package/dist/composables/use-window-size.d.ts +4 -0
  203. package/dist/composables/use-window-size.js +27 -0
  204. package/dist/contexts/avatar.d.ts +5 -2
  205. package/dist/contexts/carousel.d.ts +4 -4
  206. package/dist/contexts/carousel.js +1 -1
  207. package/dist/contexts/checkbox.d.ts +7 -2
  208. package/dist/contexts/choicebox.d.ts +8 -4
  209. package/dist/contexts/choicebox.js +1 -4
  210. package/dist/contexts/collapse.d.ts +5 -6
  211. package/dist/contexts/collapse.js +1 -1
  212. package/dist/contexts/config-provider.d.ts +5 -0
  213. package/dist/{composables/use-config-provider-context.js → contexts/config-provider.js} +8 -5
  214. package/dist/contexts/list.d.ts +1 -1
  215. package/dist/contexts/radio.d.ts +8 -2
  216. package/dist/contexts/resizable.d.ts +1 -1
  217. package/dist/contexts/switch.d.ts +8 -4
  218. package/dist/contexts/switch.js +1 -2
  219. package/dist/contexts/toggle-button.d.ts +7 -0
  220. package/dist/contexts/toggle-button.js +2 -0
  221. package/dist/styles/source.css +14 -2
  222. package/dist/styles/styles.css +2 -2
  223. package/dist/styles/tw.css +14 -2
  224. package/dist/types/shared/props.d.ts +1 -3
  225. package/dist/types/shared/utils.d.ts +0 -3
  226. package/dist/utils/context.d.ts +1 -0
  227. package/dist/utils/get.d.ts +1 -0
  228. package/dist/utils/get.js +14 -0
  229. package/dist/utils/ref.d.ts +1 -1
  230. package/dist/utils/responsive.js +2 -1
  231. package/dist/utils/throttle.js +9 -7
  232. package/dist/utils/uid.d.ts +1 -1
  233. package/dist/utils/uid.js +2 -2
  234. package/package.json +23 -21
  235. package/volar.d.ts +7 -3
  236. package/dist/components/badge/cn.d.ts +0 -90
  237. package/dist/components/badge/cn.js +0 -44
  238. package/dist/components/button/cn.d.ts +0 -121
  239. package/dist/components/button/cn.js +0 -55
  240. package/dist/components/carousel-group/index.d.vue.ts +0 -35
  241. package/dist/components/carousel-group/index.vue +0 -368
  242. package/dist/components/checkbox/cn.d.ts +0 -67
  243. package/dist/components/checkbox/cn.js +0 -31
  244. package/dist/components/chip/cn.d.ts +0 -49
  245. package/dist/components/chip/cn.js +0 -26
  246. package/dist/components/choicebox-group/index.vue +0 -65
  247. package/dist/components/error/cn.d.ts +0 -22
  248. package/dist/components/error/cn.js +0 -15
  249. package/dist/components/input/cn.d.ts +0 -73
  250. package/dist/components/input/cn.js +0 -36
  251. package/dist/components/list-item/cn.d.ts +0 -22
  252. package/dist/components/list-item/cn.js +0 -15
  253. package/dist/components/loading-bar/cn.d.ts +0 -70
  254. package/dist/components/loading-bar/cn.js +0 -32
  255. package/dist/components/note/cn.d.ts +0 -121
  256. package/dist/components/note/cn.js +0 -66
  257. package/dist/components/pin-input/cn.d.ts +0 -46
  258. package/dist/components/pin-input/cn.js +0 -25
  259. package/dist/components/progress/cn.d.ts +0 -19
  260. package/dist/components/progress/cn.js +0 -14
  261. package/dist/components/radio/cn.d.ts +0 -46
  262. package/dist/components/radio/cn.js +0 -42
  263. package/dist/components/skeleton/cn.d.ts +0 -43
  264. package/dist/components/skeleton/cn.js +0 -24
  265. package/dist/components/snippet/cn.d.ts +0 -52
  266. package/dist/components/snippet/cn.js +0 -27
  267. package/dist/components/stack/cn.d.ts +0 -70
  268. package/dist/components/stack/cn.js +0 -33
  269. package/dist/components/switch/cn.d.ts +0 -16
  270. package/dist/components/switch/cn.js +0 -13
  271. package/dist/components/switch-group/index.d.vue.ts +0 -23
  272. package/dist/components/switch-group/index.vue +0 -54
  273. package/dist/components/text/cn.d.ts +0 -67
  274. package/dist/components/text/cn.js +0 -34
  275. package/dist/components/textarea/cn.d.ts +0 -58
  276. package/dist/components/textarea/cn.js +0 -30
  277. package/dist/composables/use-config-provider-context.d.ts +0 -3
  278. package/dist/composables/use-unique-id-context.d.ts +0 -2
  279. package/dist/composables/use-unique-id-context.js +0 -11
@@ -1,6 +1,4 @@
1
- import type { HTMLAttributes } from 'vue'
2
-
3
- import type { ComponentSizeWithXs } from '../shared/props'
1
+ import type { ComponentSizeWithXs, ComponentClass } from '../../types/shared'
4
2
 
5
3
  export interface InputProps {
6
4
  size?: ComponentSizeWithXs
@@ -11,21 +9,20 @@ export interface InputProps {
11
9
  readonly?: boolean
12
10
  disabled?: boolean
13
11
  password?: boolean
14
- required?: boolean
15
12
  autofocus?: boolean
16
- inputType?: HTMLInputElement['type']
17
- inputmode?: HTMLAttributes['inputmode']
13
+ inputType?: string
14
+ inputmode?: 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'
18
15
  minlength?: number | string
19
16
  maxlength?: number | string
20
17
  clearable?: boolean
21
- clearValue?: string | number | null | undefined
22
- modelValue?: string | number | null | undefined
18
+ clearValue?: string | number | null
19
+ modelValue?: string | number | null
23
20
  placeholder?: string
24
- prefixStyle?: boolean
25
- suffixStyle?: boolean
26
21
  prefixClass?: ComponentClass
27
22
  suffixClass?: ComponentClass
28
23
  selectOnFocus?: boolean
24
+ defaultPrefixStyle?: boolean
25
+ defaultSuffixStyle?: boolean
29
26
  }
30
27
 
31
28
  export interface InputEmits {
@@ -19,7 +19,6 @@ declare const __VLS_base: import("vue").DefineComponent<IntersectionObserverProp
19
19
  "onBefore-hide"?: (() => any) | undefined;
20
20
  }>, {
21
21
  threshold: number | number[];
22
- root: Element | Document | null;
23
22
  rootMargin: string;
24
23
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
25
24
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -4,13 +4,14 @@ import { useIntersectionObserver } from "../../composables/use-browser-observer"
4
4
  import { getCssUnitValue } from "../../utils/format";
5
5
  import FragmentContainer from "../_internal/fragment-container.vue";
6
6
  defineOptions({
7
- name: "PIntersectionObserver"
7
+ name: "PIntersectionObserver",
8
+ inheritAttrs: false
8
9
  });
9
10
  const props = defineProps({
10
11
  width: { type: [Number, String], required: false },
11
12
  height: { type: [Number, String], required: false },
12
13
  keepAlive: { type: Boolean, required: false },
13
- root: { type: null, required: false, default: null },
14
+ root: { type: null, required: false },
14
15
  rootMargin: { type: String, required: false, default: "20%" },
15
16
  threshold: { type: [Number, Array], required: false, default: 0 }
16
17
  });
@@ -18,12 +19,14 @@ const emits = defineEmits(["visible-change", "before-show", "before-hide", "show
18
19
  const isVisible = shallowRef(false);
19
20
  const containerRef = shallowRef();
20
21
  const containerSize = shallowRef({
22
+ "contain-intrinsic-size": `auto ${getCssUnitValue(props.height)}`,
21
23
  "--slot-estimated-width": getCssUnitValue(props.width),
22
24
  "--slot-estimated-height": getCssUnitValue(props.height)
23
25
  });
24
26
  function getRenderedSlotSize() {
25
27
  const rect = containerRef.value.getBoundingClientRect();
26
28
  containerSize.value = {
29
+ "contain-intrinsic-size": `auto ${rect.height}px`,
27
30
  "--slot-estimated-width": `${rect.width}px`,
28
31
  "--slot-estimated-height": `${rect.height}px`
29
32
  };
@@ -55,12 +58,18 @@ useIntersectionObserver(
55
58
  </script>
56
59
 
57
60
  <template>
58
- <div ref="containerRef" class="pxd-intersection-observer" :style="containerSize">
61
+ <div
62
+ ref="containerRef"
63
+ class="pxd-intersection-observer content-visibility-auto"
64
+ :style="containerSize"
65
+ v-bind="$attrs"
66
+ >
59
67
  <KeepAlive v-if="keepAlive">
60
68
  <FragmentContainer v-if="isVisible">
61
69
  <slot />
62
70
  </FragmentContainer>
63
71
  </KeepAlive>
72
+
64
73
  <template v-else>
65
74
  <slot v-if="isVisible" />
66
75
  </template>
@@ -1,6 +1,6 @@
1
1
  <script setup>
2
- import { useConfigProvider } from "pxd";
3
2
  import { computed } from "vue";
3
+ import { useConfigProvider } from "../../contexts/config-provider";
4
4
  import { getFallbackValue } from "../../utils/get";
5
5
  defineOptions({
6
6
  name: "PKbd",
@@ -13,7 +13,7 @@ declare const __VLS_base: import("vue").DefineComponent<LinkButtonProps, {}, {},
13
13
  onClick?: ((args_0: MouseEvent) => any) | undefined;
14
14
  }>, {
15
15
  align: "left" | "center" | "right";
16
- target: HTMLAnchorElement["target"];
16
+ target: "_blank" | "_self" | "_parent" | "_top";
17
17
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
18
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
19
  declare const _default: typeof __VLS_export;
@@ -1,6 +1,6 @@
1
1
  <script setup>
2
2
  import ExternalIcon from "@gdsicon/vue/external";
3
- import { computed, useAttrs } from "vue";
3
+ import { computed } from "vue";
4
4
  import { isExternalLink } from "../../utils/format";
5
5
  import PButton from "../button/index.vue";
6
6
  defineOptions({
@@ -10,16 +10,14 @@ const props = defineProps({
10
10
  href: { type: String, required: true },
11
11
  text: { type: String, required: false },
12
12
  align: { type: String, required: false, default: "left" },
13
- target: { type: null, required: false, default: "_self" },
13
+ target: { type: String, required: false, default: "_self" },
14
14
  variant: { type: String, required: false },
15
15
  externalIcon: { type: Boolean, required: false }
16
16
  });
17
17
  const emits = defineEmits(["click"]);
18
- const attrs = useAttrs();
19
- const linkButtonAttrs = computed(() => {
18
+ const computedAttrs = computed(() => {
20
19
  const { externalIcon, text, href, ...restProps } = props;
21
20
  const baseAttrs = {
22
- ...attrs,
23
21
  ...restProps,
24
22
  class: "pxd-link-button",
25
23
  rel: "noopener noreferrer",
@@ -47,7 +45,7 @@ function onLinkClick(ev) {
47
45
  </script>
48
46
 
49
47
  <template>
50
- <PButton v-bind="linkButtonAttrs">
48
+ <PButton v-bind="computedAttrs">
51
49
  <template #prefix>
52
50
  <slot name="prefix" />
53
51
  </template>
@@ -4,7 +4,7 @@ export interface LinkButtonProps {
4
4
  href: string
5
5
  text?: string
6
6
  align?: 'left' | 'center' | 'right'
7
- target?: HTMLAnchorElement['target']
7
+ target?: '_blank' | '_self' | '_parent' | '_top'
8
8
  variant?: ButtonVariant
9
9
  externalIcon?: boolean
10
10
  }
@@ -2,16 +2,20 @@ import type { ListProps, ListOptionSelected } from './types';
2
2
  declare function updateListItem(): void;
3
3
  declare function isNoVisibleItem(): boolean;
4
4
  declare function setActiveValue(newValue?: string): void;
5
- declare function setActiveValueToFirst(): void;
6
- declare var __VLS_7: {};
5
+ declare function setFirstAsActive(): void;
6
+ declare var __VLS_7: {}, __VLS_15: {
7
+ item: import("./types").ListOption;
8
+ };
7
9
  type __VLS_Slots = {} & {
8
10
  default?: (props: typeof __VLS_7) => any;
11
+ } & {
12
+ item?: (props: typeof __VLS_15) => any;
9
13
  };
10
14
  declare const __VLS_base: import("vue").DefineComponent<ListProps, {
11
15
  setActiveValue: typeof setActiveValue;
12
16
  updateListItem: typeof updateListItem;
13
17
  isNoVisibleItem: typeof isNoVisibleItem;
14
- setActiveValueToFirst: typeof setActiveValueToFirst;
18
+ setFirstAsActive: typeof setFirstAsActive;
15
19
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
20
  select: (args_0: MouseEvent, args_1: ListOptionSelected) => any;
17
21
  toggle: () => any;
@@ -23,8 +27,7 @@ declare const __VLS_base: import("vue").DefineComponent<ListProps, {
23
27
  }>, {
24
28
  options: import("./types").ListOption[];
25
29
  loop: boolean;
26
- keyListener: boolean;
27
- itemTransition: boolean;
30
+ toggleOnKeyPress: boolean;
28
31
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
32
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
33
  declare const _default: typeof __VLS_export;
@@ -13,8 +13,7 @@ defineOptions({
13
13
  const props = defineProps({
14
14
  loop: { type: Boolean, required: false, default: true },
15
15
  options: { type: Array, required: false, default: () => [] },
16
- keyListener: { type: Boolean, required: false, default: true },
17
- itemTransition: { type: Boolean, required: false, default: true },
16
+ toggleOnKeyPress: { type: Boolean, required: false, default: true },
18
17
  closeOnPressEscape: { type: Boolean, required: false }
19
18
  });
20
19
  const emits = defineEmits(["toggle", "escape", "select"]);
@@ -28,15 +27,37 @@ const FUNCTION_KEYS = ["Enter", "Tab", "Home", "End"];
28
27
  const PREVENT_DEFAULT_KEYS = [...FUNCTION_KEYS, ...PREV_KEYS, ...NEXT_KEYS];
29
28
  const listItemKeys = [];
30
29
  const listItemsMap = /* @__PURE__ */ new Map();
30
+ function resolveNavigationTarget(key) {
31
+ const len = listItemKeys.length;
32
+ if (key === "Home") {
33
+ return listItemKeys[0];
34
+ }
35
+ if (key === "End") {
36
+ return listItemKeys[len - 1];
37
+ }
38
+ const dir = PREV_KEYS.includes(key) ? -1 : NEXT_KEYS.includes(key) ? 1 : void 0;
39
+ if (dir === void 0) {
40
+ return void 0;
41
+ }
42
+ if (!activeValue.value) {
43
+ return dir === -1 ? listItemKeys[len - 1] : listItemKeys[0];
44
+ }
45
+ const index = listItemKeys.indexOf(activeValue.value);
46
+ if (index === -1) {
47
+ return dir === -1 ? listItemKeys[len - 1] : listItemKeys[0];
48
+ }
49
+ if (props.loop) {
50
+ return listItemKeys[(index + dir + len) % len];
51
+ }
52
+ const nextIndex = index + dir;
53
+ return nextIndex >= 0 && nextIndex < len ? listItemKeys[nextIndex] : void 0;
54
+ }
31
55
  const containerKeydownThrottled = throttle(
32
56
  (ev) => {
33
57
  if (ev.ctrlKey || ev.metaKey || ev.altKey || ev.shiftKey) {
34
58
  return;
35
59
  }
36
60
  const { key } = ev;
37
- if (key === "Tab") {
38
- return;
39
- }
40
61
  if (key === "Enter") {
41
62
  listItemsMap.get(activeValue.value)?.click();
42
63
  return;
@@ -45,38 +66,8 @@ const containerKeydownThrottled = throttle(
45
66
  emits("escape", ev);
46
67
  return;
47
68
  }
48
- let newActiveValue = "";
49
- const listItemKeyLength = listItemKeys.length;
50
- if (PREV_KEYS.includes(key)) {
51
- if (activeValue.value) {
52
- const index = listItemKeys.indexOf(activeValue.value);
53
- if (props.loop) {
54
- const prevIndex = (index - 1 + listItemKeys.length) % listItemKeys.length;
55
- newActiveValue = listItemKeys[prevIndex];
56
- } else if (index > 0) {
57
- newActiveValue = listItemKeys[index - 1];
58
- }
59
- } else {
60
- newActiveValue = listItemKeys[listItemKeyLength - 1];
61
- }
62
- } else if (NEXT_KEYS.includes(key)) {
63
- if (activeValue.value) {
64
- const index = listItemKeys.indexOf(activeValue.value);
65
- if (props.loop) {
66
- const nextIndex = (index + 1) % listItemKeys.length;
67
- newActiveValue = listItemKeys[nextIndex];
68
- } else if (index < listItemKeys.length - 1) {
69
- newActiveValue = listItemKeys[index + 1];
70
- }
71
- } else {
72
- newActiveValue = listItemKeys[0];
73
- }
74
- } else if (key === "Home") {
75
- newActiveValue = listItemKeys[0];
76
- } else if (key === "End") {
77
- newActiveValue = listItemKeys[listItemKeyLength - 1];
78
- }
79
- if (!newActiveValue) {
69
+ const newActiveValue = resolveNavigationTarget(key);
70
+ if (newActiveValue === void 0) {
80
71
  return;
81
72
  }
82
73
  if (activeValue.value !== newActiveValue) {
@@ -89,7 +80,7 @@ const containerKeydownThrottled = throttle(
89
80
  { edges: ["leading"] }
90
81
  );
91
82
  function onContainerKeydown(ev) {
92
- if (!props.keyListener || listItemKeys.length === 0) {
83
+ if (!props.toggleOnKeyPress || listItemKeys.length === 0) {
93
84
  return;
94
85
  }
95
86
  if (PREVENT_DEFAULT_KEYS.includes(ev.key)) {
@@ -108,26 +99,31 @@ function onPointerOver(ev) {
108
99
  activeValue.value = itemValue;
109
100
  }
110
101
  function onOptionClick(item, ev) {
111
- const { as, onClick, ...option } = item;
112
102
  activeValue.value = "";
113
- emits("select", ev, option);
103
+ emits("select", ev, item);
114
104
  }
115
105
  function updateListItem() {
116
- listItemsMap.clear();
117
- listItemKeys.splice(0);
106
+ cleanupListItem();
107
+ if (!containerRef.value) {
108
+ return;
109
+ }
118
110
  Array.from(containerRef.value.querySelectorAll(itemSelector)).forEach((el) => {
119
111
  const key = el.dataset.value;
120
112
  listItemsMap.set(key, el);
121
113
  listItemKeys.push(key);
122
114
  });
123
115
  }
116
+ function cleanupListItem() {
117
+ listItemsMap.clear();
118
+ listItemKeys.splice(0);
119
+ }
124
120
  function isNoVisibleItem() {
125
121
  return listItemsMap.size === 0;
126
122
  }
127
123
  function setActiveValue(newValue = "") {
128
124
  activeValue.value = newValue;
129
125
  }
130
- function setActiveValueToFirst() {
126
+ function setFirstAsActive() {
131
127
  setActiveValue(listItemKeys[0]);
132
128
  }
133
129
  provideListContext({
@@ -143,15 +139,14 @@ onMounted(async () => {
143
139
  cachedOn(document, "keydown", onContainerKeydown);
144
140
  });
145
141
  onBeforeUnmount(() => {
146
- listItemsMap.clear();
147
- listItemKeys.splice(0);
142
+ cleanupListItem();
148
143
  cachedOff(document, "keydown", onContainerKeydown);
149
144
  });
150
145
  defineExpose({
151
146
  setActiveValue,
152
147
  updateListItem,
153
148
  isNoVisibleItem,
154
- setActiveValueToFirst
149
+ setFirstAsActive
155
150
  });
156
151
  </script>
157
152
 
@@ -160,18 +155,19 @@ defineExpose({
160
155
  ref="containerRef"
161
156
  role="list"
162
157
  tabindex="-1"
163
- :data-transition="itemTransition"
164
- class="pxd-list group/list m-0 p-0 max-w-full list-none bg-background-100 outline-none"
158
+ class="pxd-list m-0 p-0 max-w-full list-none bg-background-100 outline-none"
165
159
  v-bind="$attrs"
166
160
  @pointerover="onPointerOver"
167
161
  >
168
- <PScrollable class="p-2 h-full max-h-inherit rounded-inherit" fader-direction="vertical">
162
+ <PScrollable
163
+ class="h-full max-h-inherit rounded-inherit"
164
+ content-class="p-2"
165
+ fader-direction="vertical"
166
+ >
169
167
  <slot>
170
- <PListItem
171
- v-for="(option, index) in options"
172
- :key="option.value ?? index"
173
- v-bind="option"
174
- />
168
+ <PListItem v-for="(option, index) in options" :key="option.value ?? index" v-bind="option">
169
+ <slot name="item" :item="option" />
170
+ </PListItem>
175
171
  </slot>
176
172
  </PScrollable>
177
173
  </ul>
@@ -1,11 +1,8 @@
1
- import type { ComponentAs, ComponentLabel } from '../shared'
1
+ import type { ComponentAs, ComponentLabel, ComponentOption } from '../../types/shared'
2
2
 
3
- export interface ListOption extends Record<string, any> {
3
+ export interface ListOption extends Partial<ComponentOption> {
4
4
  as?: ComponentAs
5
5
  type?: 'default' | 'error' | 'warning' | 'separator'
6
- label?: ComponentLabel
7
- value?: any
8
- disabled?: boolean
9
6
  description?: ComponentLabel
10
7
  onClick?: (item: ListOptionSelected, ev: MouseEvent) => void
11
8
  }
@@ -15,8 +12,7 @@ export type ListOptionSelected = Omit<ListOption, 'as' | 'onClick'>
15
12
  export interface ListProps {
16
13
  loop?: boolean
17
14
  options?: ListOption[]
18
- keyListener?: boolean
19
- itemTransition?: boolean
15
+ toggleOnKeyPress?: boolean
20
16
  closeOnPressEscape?: boolean
21
17
  }
22
18
 
@@ -25,16 +21,3 @@ export interface ListEmits {
25
21
  escape: [KeyboardEvent]
26
22
  select: [MouseEvent, ListOptionSelected]
27
23
  }
28
-
29
- export interface ListItemProps {
30
- as?: ListOption['as']
31
- type?: ListOption['type']
32
- label?: ListOption['label']
33
- value?: ListOption['value']
34
- disabled?: ListOption['disabled']
35
- description?: ListOption['description']
36
- }
37
-
38
- export interface ListItemEmits {
39
- click: [ListOptionSelected, MouseEvent]
40
- }
@@ -1,4 +1,4 @@
1
- import type { ListItemProps } from '../list/types';
1
+ import type { ListItemProps } from './types';
2
2
  declare var __VLS_11: {};
3
3
  type __VLS_Slots = {} & {
4
4
  default?: (props: typeof __VLS_11) => any;
@@ -9,8 +9,9 @@ declare const __VLS_base: import("vue").DefineComponent<ListItemProps, {}, {}, {
9
9
  onClick?: ((args_0: import("../list/types").ListOptionSelected, args_1: MouseEvent) => any) | undefined;
10
10
  }>, {
11
11
  type: "default" | "error" | "warning" | "separator";
12
+ as: import("../../types/shared").ComponentAs;
12
13
  disabled: boolean;
13
- as: import("../list/types").ListOption["as"];
14
+ keywords: string[];
14
15
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
16
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
16
17
  declare const _default: typeof __VLS_export;
@@ -1,47 +1,73 @@
1
1
  <script setup>
2
- import { computed, nextTick, onMounted, shallowRef } from "vue";
2
+ import { tv } from "tailwind-variants";
3
+ import { computed, shallowRef } from "vue";
3
4
  import { useListContext, useListFilterValue } from "../../contexts/list";
4
5
  import { unrefElement } from "../../utils/ref";
5
6
  import { getUniqueId } from "../../utils/uid";
6
- import { listItemVariant } from "./cn";
7
7
  defineOptions({
8
8
  name: "PListItem",
9
9
  inheritAttrs: false
10
10
  });
11
11
  const props = defineProps({
12
- as: { type: null, required: false, default: "li" },
12
+ as: { type: [String, Object], required: false, default: "li" },
13
13
  type: { type: String, required: false, default: "default" },
14
- label: { type: null, required: false },
15
- value: { type: null, required: false },
14
+ label: { type: [String, Number, Array, null], required: false },
15
+ value: { type: [String, Number], required: false },
16
16
  disabled: { type: Boolean, required: false, default: false },
17
- description: { type: null, required: false }
17
+ keywords: { type: Array, required: false, default: () => [] },
18
+ description: { type: [String, Number, Array, null], required: false }
18
19
  });
19
20
  const emits = defineEmits(["click"]);
21
+ const listItemVariant = tv({
22
+ base: "pxd-list-item h-10 gap-3 px-2 text-sm flex w-full cursor-pointer items-center rounded-md outline-none [contain-intrinsic-size:auto_2.5rem] content-visibility-auto data-[disabled=true]:pointer-events-none data-[disabled=true]:text-gray-700 motion-safe:transition-colors",
23
+ variants: {
24
+ type: {
25
+ error: "text-red-900 pointer-coarse:active:bg-red-100 pointer-fine:data-[selected=true]:bg-red-100",
26
+ warning: "text-amber-900 pointer-coarse:active:bg-amber-100 pointer-fine:data-[selected=true]:bg-amber-100",
27
+ default: "text-foreground pointer-coarse:active:bg-gray-alpha-100 pointer-fine:data-[selected=true]:bg-gray-alpha-100",
28
+ separator: "h-0! px-0 m-1.5 w-auto! border-b"
29
+ }
30
+ },
31
+ defaultVariants: {
32
+ type: "default"
33
+ }
34
+ });
20
35
  const { activeValue, onOptionClick } = useListContext();
21
36
  const uniqueId = getUniqueId();
22
37
  const filterValue = useListFilterValue();
23
38
  const itemRef = shallowRef();
24
- const currentValue = shallowRef("");
39
+ const searchableText = computed(() => {
40
+ const keywordsText = props.keywords.length > 0 ? props.keywords.join("").toLowerCase().replace(/\s/g, "") : "";
41
+ if (props.label) {
42
+ const propsText = `${String(props.label || "")}${props.description || ""}`.toLowerCase().replace(/\s/g, "");
43
+ return propsText + keywordsText;
44
+ }
45
+ if (keywordsText) {
46
+ return keywordsText;
47
+ }
48
+ return getCachedTextContent();
49
+ });
25
50
  const isVisible = computed(
26
- () => filterValue?.value ? currentValue.value.includes(filterValue.value.toLowerCase()) : true
51
+ () => filterValue?.value ? searchableText.value.includes(filterValue.value.toLowerCase()) : true
27
52
  );
28
53
  const isSelected = computed(() => activeValue.value === uniqueId);
29
54
  const isDisabled = computed(() => props.disabled || props.type === "separator");
30
55
  const computedClasses = computed(() => {
31
56
  return listItemVariant({ type: props.type });
32
57
  });
58
+ let cachedTextContent = "";
59
+ function getCachedTextContent() {
60
+ const text = unrefElement(itemRef.value)?.textContent || "";
61
+ if (text) {
62
+ cachedTextContent = text.toLowerCase().replace(/\s/g, "");
63
+ }
64
+ return cachedTextContent;
65
+ }
33
66
  function onItemClick(ev) {
34
- emits("click", props, ev);
35
- onOptionClick?.(props, ev);
67
+ const { as, keywords, ...restProps } = props;
68
+ emits("click", restProps, ev);
69
+ onOptionClick?.(restProps, ev);
36
70
  }
37
- onMounted(async () => {
38
- await nextTick();
39
- if (props.label) {
40
- currentValue.value = `${String(props.label || "")}${props.description || ""}`.toLowerCase().replace(/\s/g, "");
41
- } else {
42
- currentValue.value = (unrefElement(itemRef.value)?.textContent || "").toLowerCase().replace(/\s/g, "");
43
- }
44
- });
45
71
  </script>
46
72
 
47
73
  <template>
@@ -0,0 +1,15 @@
1
+ import type { ListOption, ListOptionSelected } from '../list/types'
2
+
3
+ export interface ListItemProps {
4
+ as?: ListOption['as']
5
+ type?: ListOption['type']
6
+ label?: ListOption['label']
7
+ value?: ListOption['value']
8
+ disabled?: ListOption['disabled']
9
+ keywords?: string[]
10
+ description?: ListOption['description']
11
+ }
12
+
13
+ export interface ListItemEmits {
14
+ click: [ListOptionSelected, MouseEvent]
15
+ }
@@ -1,23 +1,54 @@
1
1
  <script setup>
2
+ import { tv } from "tailwind-variants";
2
3
  import { computed, onBeforeUnmount, onMounted, shallowRef } from "vue";
3
4
  import { UPDATE_LOADING_BAR_EVENT_NAME } from "../../composables/use-loading-bar";
4
5
  import { cachedOff, cachedOn } from "../../utils/event";
5
6
  import { clampValue, isTruthyProp } from "../../utils/format";
6
7
  import { isServer } from "../../utils/is";
7
8
  import PTeleport from "../teleport/index.vue";
8
- import { loadingBarVariant } from "./cn";
9
9
  defineOptions({
10
10
  name: "PLoadingBar",
11
11
  inheritAttrs: false
12
12
  });
13
13
  const props = defineProps({
14
- to: { type: null, required: false },
14
+ to: { type: [String, Object], required: false },
15
15
  group: { type: String, required: false, default: "default" },
16
16
  minimum: { type: Number, required: false, default: 0.08 },
17
17
  trickle: { type: Boolean, required: false, default: true },
18
18
  hideDelay: { type: Number, required: false, default: 500 },
19
19
  trickleThreshold: { type: Number, required: false, default: 300 }
20
20
  });
21
+ const loadingBarVariant = tv({
22
+ slots: {
23
+ wrapper: "pxd-loading-bar top-0 left-0 right-0 pointer-events-none z-10 max-w-full overflow-hidden",
24
+ inner: "pxd-loading-bar--inner h-0.5 data-[hidden=true]:h-0 origin-left data-[transition=false]:transition-none! motion-safe:transition-all"
25
+ },
26
+ variants: {
27
+ status: {
28
+ running: {
29
+ inner: "bg-gray-500"
30
+ },
31
+ finish: {
32
+ inner: "bg-primary"
33
+ },
34
+ error: {
35
+ inner: "bg-red-900"
36
+ }
37
+ },
38
+ absolute: {
39
+ true: {
40
+ wrapper: "absolute"
41
+ },
42
+ false: {
43
+ wrapper: "fixed"
44
+ }
45
+ }
46
+ },
47
+ defaultVariants: {
48
+ status: "finish",
49
+ absolute: false
50
+ }
51
+ });
21
52
  let prevTimestamp = 0;
22
53
  let prevAnimationKey = 0;
23
54
  let hiddenBarTimeout;
@@ -1,7 +1,7 @@
1
1
  export type LoadingBarStatus = 'running' | 'error' | 'finish'
2
2
 
3
3
  export interface LoadingBarProps {
4
- to?: string | HTMLElement
4
+ to?: string | object
5
5
  group?: string
6
6
  minimum?: number
7
7
  trickle?: boolean
@@ -1,11 +1,12 @@
1
1
  <script setup>
2
2
  defineOptions({
3
- name: "PLoadingDots"
3
+ name: "PLoadingDots",
4
+ inheritAttrs: false
4
5
  });
5
6
  </script>
6
7
 
7
8
  <template>
8
- <span class="pxd-loading-dots inline-flex items-center">
9
+ <span class="pxd-loading-dots inline-flex items-center" v-bind="$attrs">
9
10
  <div v-if="$slots.prefix" class="pxd-loading-dots--text mr-3">
10
11
  <slot name="prefix" />
11
12
  </div>
@@ -1,3 +1,4 @@
1
+ import type { ListOptionSelected } from '../list/types';
1
2
  import type { MenuProps } from './types';
2
3
  declare var __VLS_12: {}, __VLS_23: {};
3
4
  type __VLS_Slots = {} & {
@@ -12,9 +13,11 @@ declare const __VLS_base: import("vue").DefineComponent<MenuProps, {}, {}, {}, {
12
13
  onSelect?: ((args_0: ListOptionSelected, args_1: MouseEvent) => any) | undefined;
13
14
  onChange?: ((visible: boolean) => any) | undefined;
14
15
  }>, {
15
- options: ListOption[];
16
+ options: import("../list/types").ListOption[];
16
17
  closeOnPressEscape: boolean;
17
- position: ComponentPosition;
18
+ position: import("../../types/shared").ComponentPosition;
19
+ showDelay: number;
20
+ hideDelay: number;
18
21
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
22
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
20
23
  declare const _default: typeof __VLS_export;
@@ -12,6 +12,8 @@ defineProps({
12
12
  width: { type: [String, Number], required: false },
13
13
  options: { type: Array, required: false, default: () => [] },
14
14
  position: { type: null, required: false, default: "bottom-start" },
15
+ showDelay: { type: Number, required: false, default: 0 },
16
+ hideDelay: { type: Number, required: false, default: 100 },
15
17
  closeOnPressEscape: { type: Boolean, required: false, default: true }
16
18
  });
17
19
  const emits = defineEmits(["change", "select"]);
@@ -33,7 +35,8 @@ function onOptionClick(ev, item) {
33
35
  <PPopover
34
36
  class="pxd-menu"
35
37
  trigger="click"
36
- :hide-delay="100"
38
+ :show-delay="isXs ? 0 : showDelay"
39
+ :hide-delay="isXs ? 0 : hideDelay"
37
40
  :position="position"
38
41
  :visible="popoverVisible"
39
42
  :unset-position="isXs"