pxd 0.0.55 → 0.0.60

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 (275) 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 +2 -2
  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 +7 -4
  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 +5 -4
  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 +4 -3
  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 +7 -2
  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 +2 -1
  122. package/dist/components/popover/index.d.vue.ts +1 -1
  123. package/dist/components/popover/index.vue +116 -78
  124. package/dist/components/popover/types.d.ts +2 -0
  125. package/dist/components/progress/index.d.vue.ts +1 -1
  126. package/dist/components/progress/index.vue +15 -2
  127. package/dist/components/project-banner/index.d.vue.ts +18 -0
  128. package/dist/components/project-banner/index.vue +59 -0
  129. package/dist/components/project-banner/types.d.ts +8 -0
  130. package/dist/components/radio/index.vue +62 -20
  131. package/dist/components/radio/types.d.ts +1 -14
  132. package/dist/components/radio-group/index.d.vue.ts +2 -4
  133. package/dist/components/radio-group/index.vue +11 -16
  134. package/dist/components/radio-group/types.d.ts +12 -0
  135. package/dist/components/resizable/types.d.ts +5 -10
  136. package/dist/components/resizable-handle/index.vue +1 -1
  137. package/dist/components/resizable-panel/index.d.vue.ts +1 -1
  138. package/dist/components/resizable-panel/index.vue +7 -2
  139. package/dist/components/resizable-panel/types.d.ts +4 -0
  140. package/dist/components/scrollable/index.d.vue.ts +29 -0
  141. package/dist/components/scrollable/index.vue +98 -83
  142. package/dist/components/scrollable/types.d.ts +19 -5
  143. package/dist/components/skeleton/index.vue +24 -1
  144. package/dist/components/slider/index.d.vue.ts +6 -6
  145. package/dist/components/slider/index.vue +86 -44
  146. package/dist/components/slider/types.d.ts +1 -1
  147. package/dist/components/snippet/index.vue +28 -2
  148. package/dist/components/spinner/index.vue +4 -2
  149. package/dist/components/stack/index.d.vue.ts +2 -2
  150. package/dist/components/stack/index.vue +35 -3
  151. package/dist/components/stack/types.d.ts +1 -1
  152. package/dist/components/status-dot/index.vue +5 -1
  153. package/dist/components/switch/index.d.vue.ts +10 -1
  154. package/dist/components/switch/index.vue +35 -44
  155. package/dist/components/switch/types.d.ts +4 -12
  156. package/dist/components/switch-item/index.d.vue.ts +14 -0
  157. package/dist/components/switch-item/index.vue +79 -0
  158. package/dist/components/switch-item/types.d.ts +9 -0
  159. package/dist/components/teleport/index.d.vue.ts +1 -1
  160. package/dist/components/teleport/index.vue +1 -1
  161. package/dist/components/teleport/types.d.ts +1 -1
  162. package/dist/components/text/index.d.vue.ts +1 -2
  163. package/dist/components/text/index.vue +36 -22
  164. package/dist/components/text/types.d.ts +1 -1
  165. package/dist/components/textarea/index.d.vue.ts +4 -4
  166. package/dist/components/textarea/index.vue +33 -4
  167. package/dist/components/textarea/types.d.ts +0 -1
  168. package/dist/components/time-picker/index.d.vue.ts +1 -2
  169. package/dist/components/time-picker/index.vue +43 -9
  170. package/dist/components/time-picker/types.d.ts +1 -2
  171. package/dist/components/toggle/index.vue +11 -10
  172. package/dist/components/toggle-button/index.d.vue.ts +22 -0
  173. package/dist/components/toggle-button/index.vue +110 -0
  174. package/dist/components/toggle-button/types.d.ts +16 -0
  175. package/dist/components/{choicebox-group → toggle-button-group}/index.d.vue.ts +5 -5
  176. package/dist/components/toggle-button-group/index.vue +68 -0
  177. package/dist/components/toggle-button-group/types.d.ts +22 -0
  178. package/dist/components/tooltip/index.d.vue.ts +2 -0
  179. package/dist/components/tooltip/index.vue +9 -3
  180. package/dist/components/tooltip/types.d.ts +2 -0
  181. package/dist/components/virtual-list/index.d.vue.ts +25 -4
  182. package/dist/components/virtual-list/index.vue +66 -10
  183. package/dist/components/virtual-list/types.d.ts +9 -4
  184. package/dist/composables/index.d.ts +2 -2
  185. package/dist/composables/index.js +2 -2
  186. package/dist/composables/use-browser-observer.d.ts +5 -5
  187. package/dist/composables/use-browser-observer.js +23 -20
  188. package/dist/composables/use-copy-click.js +4 -0
  189. package/dist/composables/use-countdown.d.ts +2 -2
  190. package/dist/composables/use-focus-trap.d.ts +6 -2
  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 +3 -6
  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.js +2 -2
  199. package/dist/composables/use-virtual-list.d.ts +21 -12
  200. package/dist/composables/use-virtual-list.js +90 -158
  201. package/dist/composables/use-window-size.d.ts +4 -0
  202. package/dist/composables/use-window-size.js +27 -0
  203. package/dist/contexts/avatar.d.ts +5 -2
  204. package/dist/contexts/carousel.d.ts +4 -4
  205. package/dist/contexts/carousel.js +1 -1
  206. package/dist/contexts/checkbox.d.ts +7 -2
  207. package/dist/contexts/choicebox.d.ts +8 -4
  208. package/dist/contexts/choicebox.js +1 -4
  209. package/dist/contexts/collapse.d.ts +5 -6
  210. package/dist/contexts/collapse.js +1 -1
  211. package/dist/contexts/config-provider.d.ts +5 -0
  212. package/dist/{composables/use-config-provider-context.js → contexts/config-provider.js} +8 -5
  213. package/dist/contexts/radio.d.ts +8 -2
  214. package/dist/contexts/switch.d.ts +8 -4
  215. package/dist/contexts/switch.js +1 -2
  216. package/dist/contexts/toggle-button.d.ts +7 -0
  217. package/dist/contexts/toggle-button.js +2 -0
  218. package/dist/styles/source.css +14 -2
  219. package/dist/styles/styles.css +2 -2
  220. package/dist/styles/tw.css +14 -2
  221. package/dist/types/shared/props.d.ts +1 -3
  222. package/dist/types/shared/utils.d.ts +0 -3
  223. package/dist/utils/context.d.ts +1 -0
  224. package/dist/utils/get.d.ts +1 -0
  225. package/dist/utils/get.js +14 -0
  226. package/dist/utils/responsive.js +2 -1
  227. package/dist/utils/throttle.js +9 -7
  228. package/dist/utils/uid.d.ts +1 -1
  229. package/dist/utils/uid.js +2 -2
  230. package/package.json +23 -21
  231. package/volar.d.ts +7 -3
  232. package/dist/components/badge/cn.d.ts +0 -90
  233. package/dist/components/badge/cn.js +0 -44
  234. package/dist/components/button/cn.d.ts +0 -121
  235. package/dist/components/button/cn.js +0 -55
  236. package/dist/components/carousel-group/index.d.vue.ts +0 -35
  237. package/dist/components/carousel-group/index.vue +0 -368
  238. package/dist/components/checkbox/cn.d.ts +0 -67
  239. package/dist/components/checkbox/cn.js +0 -31
  240. package/dist/components/chip/cn.d.ts +0 -49
  241. package/dist/components/chip/cn.js +0 -26
  242. package/dist/components/choicebox-group/index.vue +0 -65
  243. package/dist/components/error/cn.d.ts +0 -22
  244. package/dist/components/error/cn.js +0 -15
  245. package/dist/components/input/cn.d.ts +0 -73
  246. package/dist/components/input/cn.js +0 -36
  247. package/dist/components/list-item/cn.d.ts +0 -22
  248. package/dist/components/list-item/cn.js +0 -15
  249. package/dist/components/loading-bar/cn.d.ts +0 -70
  250. package/dist/components/loading-bar/cn.js +0 -32
  251. package/dist/components/note/cn.d.ts +0 -121
  252. package/dist/components/note/cn.js +0 -66
  253. package/dist/components/pin-input/cn.d.ts +0 -46
  254. package/dist/components/pin-input/cn.js +0 -25
  255. package/dist/components/progress/cn.d.ts +0 -19
  256. package/dist/components/progress/cn.js +0 -14
  257. package/dist/components/radio/cn.d.ts +0 -46
  258. package/dist/components/radio/cn.js +0 -42
  259. package/dist/components/skeleton/cn.d.ts +0 -43
  260. package/dist/components/skeleton/cn.js +0 -24
  261. package/dist/components/snippet/cn.d.ts +0 -52
  262. package/dist/components/snippet/cn.js +0 -27
  263. package/dist/components/stack/cn.d.ts +0 -70
  264. package/dist/components/stack/cn.js +0 -33
  265. package/dist/components/switch/cn.d.ts +0 -16
  266. package/dist/components/switch/cn.js +0 -13
  267. package/dist/components/switch-group/index.d.vue.ts +0 -23
  268. package/dist/components/switch-group/index.vue +0 -54
  269. package/dist/components/text/cn.d.ts +0 -67
  270. package/dist/components/text/cn.js +0 -34
  271. package/dist/components/textarea/cn.d.ts +0 -58
  272. package/dist/components/textarea/cn.js +0 -30
  273. package/dist/composables/use-config-provider-context.d.ts +0 -3
  274. package/dist/composables/use-unique-id-context.d.ts +0 -2
  275. package/dist/composables/use-unique-id-context.js +0 -11
@@ -1,47 +1,73 @@
1
1
  <script setup>
2
- import { computed, nextTick, onMounted, shallowRef } from "vue";
2
+ import { computed, shallowRef } from "vue";
3
3
  import { useListContext, useListFilterValue } from "../../contexts/list";
4
4
  import { unrefElement } from "../../utils/ref";
5
5
  import { getUniqueId } from "../../utils/uid";
6
- import { listItemVariant } from "./cn";
6
+ import { tv } from "tailwind-variants";
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
+ }
@@ -5,19 +5,50 @@ import { cachedOff, cachedOn } from "../../utils/event";
5
5
  import { clampValue, isTruthyProp } from "../../utils/format";
6
6
  import { isServer } from "../../utils/is";
7
7
  import PTeleport from "../teleport/index.vue";
8
- import { loadingBarVariant } from "./cn";
8
+ import { tv } from "tailwind-variants";
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"
@@ -1,7 +1,12 @@
1
+ import type { ComponentPosition } from '../../types/shared'
2
+ import type { ListOption, ListOptionSelected } from '../list/types'
3
+
1
4
  export interface MenuProps {
2
5
  width?: string | number
3
6
  options?: ListOption[]
4
7
  position?: ComponentPosition
8
+ showDelay?: number
9
+ hideDelay?: number
5
10
  closeOnPressEscape?: boolean
6
11
  }
7
12
 
@@ -1,11 +1,12 @@
1
- import type { MessageItemType } from '../../composables/use-message';
1
+ import type { MessageItemConfig } from '../../composables/use-message';
2
2
  import type { MessageProps } from './types';
3
- declare function getMessageById(id: MessageItemType['id']): {
3
+ declare function getMessageById(id: MessageItemConfig['id']): {
4
4
  index: number;
5
5
  message: null;
6
6
  } | {
7
7
  index: number;
8
8
  message: {
9
+ height?: number | undefined;
9
10
  _timerId?: {
10
11
  close: () => NodeJS.Timeout;
11
12
  hasRef: () => boolean;
@@ -53,12 +54,13 @@ declare function getMessageById(id: MessageItemType['id']): {
53
54
  }>)) | undefined;
54
55
  };
55
56
  };
56
- declare function pauseMessageById(id: MessageItemType['id']): void;
57
- declare function resumeMessageById(id: MessageItemType['id']): void;
58
- declare function closeMessageById(id: MessageItemType['id']): void;
57
+ declare function pauseMessageById(id: MessageItemConfig['id']): void;
58
+ declare function resumeMessageById(id: MessageItemConfig['id']): void;
59
+ declare function closeMessageById(id: MessageItemConfig['id']): void;
59
60
  declare function clearMessage(): void;
60
61
  declare const __VLS_export: import("vue").DefineComponent<MessageProps, {
61
62
  messages: import("vue").Ref<{
63
+ height?: number | undefined;
62
64
  _timerId?: {
63
65
  close: () => NodeJS.Timeout;
64
66
  hasRef: () => boolean;
@@ -104,7 +106,8 @@ declare const __VLS_export: import("vue").DefineComponent<MessageProps, {
104
106
  }>) | ((data: unknown) => string | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
105
107
  [key: string]: any;
106
108
  }>)) | undefined;
107
- }[], MessageItemType[] | {
109
+ }[], MessageItemConfig[] | {
110
+ height?: number | undefined;
108
111
  _timerId?: {
109
112
  close: () => NodeJS.Timeout;
110
113
  hasRef: () => boolean;
@@ -157,9 +160,9 @@ declare const __VLS_export: import("vue").DefineComponent<MessageProps, {
157
160
  close: typeof closeMessageById;
158
161
  clear: typeof clearMessage;
159
162
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
160
- close: (id: string | number | undefined) => any;
163
+ close: (id: MessageItemType) => any;
161
164
  }, string, import("vue").PublicProps, Readonly<MessageProps> & Readonly<{
162
- onClose?: ((id: string | number | undefined) => any) | undefined;
165
+ onClose?: ((id: MessageItemType) => any) | undefined;
163
166
  }>, {
164
167
  max: number;
165
168
  group: string;
@@ -8,7 +8,8 @@ import { isServer } from "../../utils/is";
8
8
  import PMessageItem from "../message-item/index.vue";
9
9
  import PTeleport from "../teleport/index.vue";
10
10
  defineOptions({
11
- name: "PMessage"
11
+ name: "PMessage",
12
+ inheritAttrs: false
12
13
  });
13
14
  const props = defineProps({
14
15
  max: { type: Number, required: false, default: 3 },
@@ -27,9 +28,8 @@ useDocumentHidden((isHidden) => {
27
28
  });
28
29
  const groupExpand = ref(props.expand);
29
30
  const groupMessages = ref([]);
30
- const messageItemsHeight = ref([]);
31
31
  const messageGroupStyle = computed(() => {
32
- const frontHeight = messageItemsHeight.value[0]?.height || 0;
32
+ const frontHeight = groupMessages.value[0]?.height || 0;
33
33
  const visibleItemCounts = Math.min(props.max, groupMessages.value.length);
34
34
  return {
35
35
  "--message-width": getCssUnitValue(props.width),
@@ -116,18 +116,11 @@ function closeMessageById(id) {
116
116
  message._timerId = void 0;
117
117
  }
118
118
  groupMessages.value.splice(index, 1);
119
- const heightIndex = messageItemsHeight.value.findIndex((h) => h.id === id);
120
- if (heightIndex !== -1) {
121
- messageItemsHeight.value.splice(heightIndex, 1);
122
- }
123
119
  if (!props.expand && groupMessages.value.length === 0) {
124
120
  groupExpand.value = false;
125
121
  }
126
122
  emits("close", id);
127
123
  }
128
- function setItemHeight(info) {
129
- messageItemsHeight.value.unshift(info);
130
- }
131
124
  function clearMessage() {
132
125
  groupMessages.value.forEach((m) => {
133
126
  if (m._timerId) {
@@ -136,7 +129,6 @@ function clearMessage() {
136
129
  }
137
130
  });
138
131
  groupMessages.value = [];
139
- messageItemsHeight.value = [];
140
132
  }
141
133
  function resolvePromiseMessage(handler, data) {
142
134
  if (!handler) {
@@ -299,6 +291,7 @@ defineExpose({
299
291
  :data-expand="groupExpand"
300
292
  :data-position="position"
301
293
  :style="messageGroupStyle"
294
+ v-bind="$attrs"
302
295
  >
303
296
  <TransitionGroup
304
297
  appear
@@ -316,7 +309,6 @@ defineExpose({
316
309
  :index="index"
317
310
  :item-data="item"
318
311
  @close="closeMessageById"
319
- @set-height="setItemHeight"
320
312
  />
321
313
  </TransitionGroup>
322
314
  </section>
@@ -1,5 +1,5 @@
1
1
  import type { MessageItemType } from '../../composables/use-message'
2
- import type { ComponentPosition } from '../../types/shared/props'
2
+ import type { ComponentPosition } from '../../types/shared'
3
3
 
4
4
  export interface MessageProps {
5
5
  max?: number
@@ -12,14 +12,3 @@ export interface MessageProps {
12
12
  export interface MessageEmits {
13
13
  close: [id: MessageItemType['id']]
14
14
  }
15
-
16
- export interface MessageItemProps {
17
- max: number
18
- index: number
19
- itemData: MessageItemType
20
- }
21
-
22
- export interface MessageItemEmits {
23
- close: [key: MessageItemType['id']]
24
- 'set-height': [info: MessageItemHeightType]
25
- }
@@ -1,10 +1,8 @@
1
- import type { MessageItemProps } from '../message/types';
1
+ import type { MessageItemProps } from './types';
2
2
  declare const __VLS_export: import("vue").DefineComponent<MessageItemProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
3
3
  close: (key: string | number | undefined) => any;
4
- "set-height": (info: MessageItemHeightType) => any;
5
4
  }, string, import("vue").PublicProps, Readonly<MessageItemProps> & Readonly<{
6
5
  onClose?: ((key: string | number | undefined) => any) | undefined;
7
- "onSet-height"?: ((info: MessageItemHeightType) => any) | undefined;
8
6
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
7
  declare const _default: typeof __VLS_export;
10
8
  export default _default;
@@ -5,7 +5,7 @@ import ErrorFillIcon from "@gdsicon/vue/cross-circle-fill";
5
5
  import InformationFillIcon from "@gdsicon/vue/information-fill";
6
6
  import LoadingIcon from "@gdsicon/vue/loader-circle";
7
7
  import WarningFillIcon from "@gdsicon/vue/warning-fill";
8
- import { computed, onMounted, shallowRef } from "vue";
8
+ import { computed, onMounted, shallowRef, watch } from "vue";
9
9
  import PButton from "../button/index.vue";
10
10
  defineOptions({
11
11
  name: "PMessageItem",
@@ -16,7 +16,7 @@ const props = defineProps({
16
16
  index: { type: Number, required: true },
17
17
  itemData: { type: Object, required: true }
18
18
  });
19
- const emits = defineEmits(["close", "set-height"]);
19
+ const emits = defineEmits(["close"]);
20
20
  const TYPE_ICONS = {
21
21
  info: InformationFillIcon,
22
22
  success: SuccessFillIcon,
@@ -46,12 +46,17 @@ function setItemHeightInfo() {
46
46
  return;
47
47
  }
48
48
  const rect = itemRef.value.getBoundingClientRect();
49
- const info = {
50
- id: props.itemData.id,
51
- height: rect.height
52
- };
53
- emits("set-height", info);
49
+ props.itemData.height = rect.height;
54
50
  }
51
+ watch(
52
+ () => props.itemData.message,
53
+ () => {
54
+ if (!itemRef.value) {
55
+ return;
56
+ }
57
+ setItemHeightInfo();
58
+ }
59
+ );
55
60
  onMounted(() => {
56
61
  setItemHeightInfo();
57
62
  });
@@ -66,6 +71,7 @@ onMounted(() => {
66
71
  :style="computedStyle"
67
72
  class="pxd-message--item px-3 py-2 text-sm flex w-full max-w-full shrink-0 transform-(--message-item-transform) rounded-lg bg-background-100 break-all whitespace-pre-wrap shadow-border-modal outline-none motion-safe:transition-(--message-item-transition)"
68
73
  :class="[itemData.class, { 'pr-9': itemData.closeable }]"
74
+ v-bind="$attrs"
69
75
  >
70
76
  <Component
71
77
  :is="TYPE_ICONS[itemData.type]"
@@ -0,0 +1,11 @@
1
+ import type { MessageItemConfig } from '../../composables/use-message'
2
+
3
+ export interface MessageItemProps {
4
+ max: number
5
+ index: number
6
+ itemData: MessageItemConfig
7
+ }
8
+
9
+ export interface MessageItemEmits {
10
+ close: [key: MessageItemConfig['id']]
11
+ }
@@ -28,10 +28,11 @@ declare const __VLS_base: import("vue").DefineComponent<ModalProps, {}, {}, {},
28
28
  }>, {
29
29
  modelValue: boolean;
30
30
  closeOnPressEscape: boolean;
31
+ autoFocusElement: string | boolean;
31
32
  appendToBody: boolean;
32
33
  closeOnClickOverlay: boolean;
33
- headerStylize: boolean;
34
- footerStylize: boolean;
34
+ defaultHeaderStyle: boolean;
35
+ defaultFooterStyle: boolean;
35
36
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
36
37
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
37
38
  declare const _default: typeof __VLS_export;
@@ -19,13 +19,13 @@ const props = defineProps({
19
19
  loading: { type: Boolean, required: false },
20
20
  modelValue: { type: Boolean, required: false, default: false },
21
21
  appendToBody: { type: Boolean, required: false, default: true },
22
- headerStylize: { type: Boolean, required: false, default: false },
23
- footerStylize: { type: Boolean, required: false, default: true },
24
22
  wrapperClass: { type: [String, Array, Object], required: false },
25
23
  contentClass: { type: [String, Array, Object], required: false },
24
+ autoFocusElement: { type: [String, Boolean], required: false, default: false },
25
+ defaultHeaderStyle: { type: Boolean, required: false, default: false },
26
+ defaultFooterStyle: { type: Boolean, required: false, default: true },
26
27
  closeOnPressEscape: { type: Boolean, required: false, default: false },
27
- closeOnClickOverlay: { type: Boolean, required: false, default: false },
28
- initialFocus: { type: [String, Boolean], required: false }
28
+ closeOnClickOverlay: { type: Boolean, required: false, default: false }
29
29
  });
30
30
  const emits = defineEmits(["show", "hide", "change", "visible-change", "outside-click", "update:modelValue"]);
31
31
  const modalRef = shallowRef();
@@ -33,11 +33,16 @@ const isVisible = useModelValue(props, emits);
33
33
  const computedStyle = computed(() => {
34
34
  return { "--modal-width": getCssUnitValue(props.width) };
35
35
  });
36
- useFocusTrap(modalRef, {
37
- initialFocus: props.initialFocus,
36
+ const defaultStyles = computed(() => ({
37
+ headerClass: props.defaultHeaderStyle ? "pb-4 sm:pb-6 border-b bg-background-200 dark:bg-background-100" : "",
38
+ footerClass: props.defaultFooterStyle ? "border-t pt-4 bg-background-200 dark:bg-background-100" : ""
39
+ }));
40
+ const focusTrapOptions = computed(() => ({
41
+ autoFocusElement: props.autoFocusElement,
38
42
  escapeDeactivates: props.closeOnPressEscape,
39
43
  clickOutsideDeactivates: props.closeOnClickOverlay
40
- });
44
+ }));
45
+ useFocusTrap(modalRef, focusTrapOptions);
41
46
  function closeOverlayIfNeed() {
42
47
  if (isTruthyProp(props.loading)) {
43
48
  return;
@@ -76,9 +81,10 @@ watch(
76
81
  <div
77
82
  v-if="isVisible"
78
83
  ref="modalRef"
79
- aria-modal="true"
80
84
  role="dialog"
81
85
  tabindex="-1"
86
+ aria-modal="true"
87
+ :aria-expanded="isVisible"
82
88
  class="pxd-modal group/modal left-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(--modal-width,540px)] max-sm:bottom-0 pointer-events-auto fixed z-10 flex 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"
83
89
  :class="wrapperClass"
84
90
  :style="computedStyle"
@@ -86,9 +92,7 @@ watch(
86
92
  >
87
93
  <header
88
94
  class="pxd-modal--header px-6 pt-4 sm:pt-6 empty:py-3 relative shrink-0"
89
- :class="{
90
- 'pb-4 sm:pb-6 border-b bg-background-200 dark:bg-background-100': headerStylize
91
- }"
95
+ :class="defaultStyles.headerClass"
92
96
  >
93
97
  <slot name="header">
94
98
  <h3
@@ -117,8 +121,8 @@ watch(
117
121
 
118
122
  <footer
119
123
  v-if="$slots.footer"
120
- class="pxd-modal--footer p-4 gap-2 relative flex shrink-0 items-center justify-between"
121
- :class="{ 'border-t bg-background-200 dark:bg-background-100': footerStylize }"
124
+ class="pxd-modal--footer px-4 pb-4 gap-2 relative flex shrink-0 items-center justify-between"
125
+ :class="defaultStyles.footerClass"
122
126
  >
123
127
  <slot name="footer" />
124
128
  </footer>
@@ -7,13 +7,13 @@ export interface ModalProps {
7
7
  loading?: boolean
8
8
  modelValue?: boolean
9
9
  appendToBody?: boolean
10
- headerStylize?: boolean
11
- footerStylize?: boolean
12
10
  wrapperClass?: ComponentClass
13
11
  contentClass?: ComponentClass
12
+ autoFocusElement?: string | boolean
13
+ defaultHeaderStyle?: boolean
14
+ defaultFooterStyle?: boolean
14
15
  closeOnPressEscape?: boolean
15
16
  closeOnClickOverlay?: boolean
16
- initialFocus?: string | false
17
17
  }
18
18
 
19
19
  export interface ModalEmits {
@@ -1,14 +1,15 @@
1
1
  <script setup>
2
2
  defineOptions({
3
- name: "PNoiseBackground"
3
+ name: "PNoiseBackground",
4
+ inheritAttrs: false
4
5
  });
5
6
  defineProps({
6
- as: { type: null, required: false, default: "div" }
7
+ as: { type: [String, Object], required: false, default: "div" }
7
8
  });
8
9
  </script>
9
10
 
10
11
  <template>
11
- <Component :is="as" class="pxd-noise-background relative">
12
+ <Component :is="as" class="pxd-noise-background relative" v-bind="$attrs">
12
13
  <slot />
13
14
  </Component>
14
15
  </template>
@@ -1,4 +1,3 @@
1
- import { noteVariant } from './cn';
2
1
  import type { NoteProps } from './types';
3
2
  declare var __VLS_1: {}, __VLS_8: {}, __VLS_10: {};
4
3
  type __VLS_Slots = {} & {
@@ -10,7 +9,7 @@ type __VLS_Slots = {} & {
10
9
  };
11
10
  declare const __VLS_base: import("vue").DefineComponent<NoteProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<NoteProps> & Readonly<{}>, {
12
11
  label: boolean | import("../../types/shared").ComponentLabel;
13
- variant: keyof typeof noteVariant.variants.variant;
12
+ variant: import("./types").NoteVariant;
14
13
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
14
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
16
15
  declare const _default: typeof __VLS_export;