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
@@ -5,6 +5,8 @@ export interface NumberInputProps {
5
5
  readonly?: boolean
6
6
  disabled?: boolean
7
7
  precision?: number
8
+ thousands?: boolean
9
+ thousandsSeparator?: string
8
10
  scientific?: boolean
9
11
  clearValue?: number | null
10
12
  modelValue?: number | null
@@ -23,7 +23,7 @@ const props = defineProps({
23
23
  appendToBody: { type: Boolean, required: false, default: true },
24
24
  closeOnPressEscape: { type: Boolean, required: false, default: true },
25
25
  closeOnClickOverlay: { type: Boolean, required: false },
26
- shownElement: { type: null, required: false }
26
+ shownElement: { type: [String, Object], required: false }
27
27
  });
28
28
  const emits = defineEmits(["click", "escape", "update:modelValue"]);
29
29
  const { lockScroll, unlockScroll } = useLockScroll();
@@ -6,7 +6,7 @@ export interface OverlayProps {
6
6
  appendToBody?: boolean
7
7
  closeOnPressEscape?: boolean
8
8
  closeOnClickOverlay?: boolean
9
- shownElement?: string | HTMLElement
9
+ shownElement?: string | object
10
10
  }
11
11
 
12
12
  export interface OverlayEmits {
@@ -1,8 +1,9 @@
1
1
  <script setup>
2
2
  import ChevronRightIcon from "@gdsicon/vue/chevron-right";
3
- import { useConfigProvider } from "../../composables/use-config-provider-context";
3
+ import { useConfigProvider } from "../../contexts/config-provider";
4
4
  defineOptions({
5
- name: "PPagination"
5
+ name: "PPagination",
6
+ inheritAttrs: false
6
7
  });
7
8
  defineProps({
8
9
  prev: { type: Object, required: false },
@@ -15,6 +16,7 @@ const configProvider = useConfigProvider();
15
16
  <nav
16
17
  aria-label="pagination"
17
18
  class="pxd-pagination relative flex w-full flex-wrap items-start justify-between"
19
+ v-bind="$attrs"
18
20
  >
19
21
  <RouterLink
20
22
  v-if="prev"
@@ -41,7 +43,7 @@ const configProvider = useConfigProvider();
41
43
  <RouterLink
42
44
  v-if="next"
43
45
  :to="next.href"
44
- class="pxd-pagination--next min-h-13 group py-1 pl-2 pr-6 rounded-md no-underline! self-focus-ring outline-none"
46
+ class="pxd-pagination--next min-h-13 group py-1 pl-2 pr-6 rounded-md text-right no-underline! self-focus-ring outline-none"
45
47
  >
46
48
  <span
47
49
  secondary
@@ -1,5 +1,10 @@
1
1
  import type { PinInputProps } from './types';
2
- declare const __VLS_export: import("vue").DefineComponent<PinInputProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
2
+ declare function focus(): void;
3
+ declare function blur(): void;
4
+ declare const __VLS_export: import("vue").DefineComponent<PinInputProps, {
5
+ focus: typeof focus;
6
+ blur: typeof blur;
7
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
3
8
  change: (args_0: string) => any;
4
9
  "update:modelValue": (args_0: string) => any;
5
10
  }, string, import("vue").PublicProps, Readonly<PinInputProps> & Readonly<{
@@ -1,11 +1,12 @@
1
1
  <script setup>
2
- import { computed, ref, shallowRef } from "vue";
3
- import { useConfigProvider } from "../../composables/use-config-provider-context";
2
+ import { tv } from "tailwind-variants";
3
+ import { computed, shallowRef, watch } from "vue";
4
4
  import { useModelValue } from "../../composables/use-model-value";
5
+ import { useConfigProvider } from "../../contexts/config-provider";
5
6
  import { isTruthyProp } from "../../utils/format";
6
- import { pinInputVariant } from "./cn";
7
7
  defineOptions({
8
8
  name: "PPinInput",
9
+ inheritAttrs: false,
9
10
  model: {
10
11
  prop: "modelValue",
11
12
  event: "update:modelValue"
@@ -17,32 +18,45 @@ const props = defineProps({
17
18
  length: { type: Number, required: false, default: 4 },
18
19
  readonly: { type: Boolean, required: false },
19
20
  disabled: { type: Boolean, required: false },
20
- required: { type: Boolean, required: false },
21
21
  modelValue: { type: String, required: false, default: "" },
22
22
  placeholder: { type: String, required: false, default: "\u25CB" },
23
- inputMode: { type: null, required: false },
24
23
  type: { type: String, required: false, default: "numeric" }
25
24
  });
26
25
  const emits = defineEmits(["change", "update:modelValue"]);
26
+ const pinInputVariant = tv({
27
+ base: "pxd-input--border rounded-md motion-safe:transition-all",
28
+ variants: {
29
+ size: {
30
+ xs: "w-6 text-xs",
31
+ sm: "w-7.5 text-sm",
32
+ md: "w-9 text-sm",
33
+ lg: "w-10 text-base"
34
+ },
35
+ error: {
36
+ true: "is-error",
37
+ false: ""
38
+ },
39
+ disabled: {
40
+ true: "is-disabled",
41
+ false: ""
42
+ }
43
+ },
44
+ defaultVariants: {
45
+ size: "md",
46
+ error: false,
47
+ disabled: false
48
+ }
49
+ });
27
50
  const configProvider = useConfigProvider();
28
51
  const inputsRef = shallowRef([]);
29
52
  const modelValue = useModelValue(props, emits);
30
- const modelValueLocal = ref(
31
- (() => {
32
- if (typeof props.modelValue === "string") {
33
- return props.modelValue.split("");
34
- } else if (Array.isArray(props.modelValue)) {
35
- return props.modelValue;
36
- }
37
- return Array.from({ length: props.length }, () => "");
38
- })()
39
- );
53
+ let localValue = modelValue.value;
40
54
  const computedInputType = computed(() => {
41
55
  const { type } = props;
42
56
  if (type.includes("password")) {
43
57
  return "password";
44
58
  } else if (type === "numeric") {
45
- return "tel";
59
+ return "numeric";
46
60
  }
47
61
  return "text";
48
62
  });
@@ -56,14 +70,17 @@ const computedClasses = computed(() => {
56
70
  disabled: isTruthyProp(props.disabled)
57
71
  });
58
72
  });
73
+ function replaceCharAt(str, index, char) {
74
+ return str.substring(0, index) + char + str.substring(index + 1);
75
+ }
59
76
  function setInputValue(value, index) {
60
77
  if (index !== void 0) {
61
78
  inputsRef.value[index].value = value;
62
- modelValueLocal.value[index] = value;
79
+ localValue = replaceCharAt(localValue, index, value);
63
80
  } else {
64
- modelValueLocal.value = value.split("");
81
+ localValue = value;
65
82
  }
66
- modelValue.value = modelValueLocal.value.join("");
83
+ modelValue.value = localValue;
67
84
  }
68
85
  function focusInputField(dir, index) {
69
86
  let correctIndex = -1;
@@ -82,9 +99,9 @@ function focusInputField(dir, index) {
82
99
  inputsRef.value[correctIndex].select();
83
100
  }
84
101
  function getFirstEmptyIndex() {
85
- const length = modelValueLocal.value.length;
102
+ const length = localValue.length;
86
103
  if (length === props.length) {
87
- return modelValueLocal.value.findIndex((value) => !value);
104
+ return localValue.split("").findIndex((value) => !value);
88
105
  }
89
106
  return length;
90
107
  }
@@ -180,10 +197,30 @@ function onInputPastedValue(ev) {
180
197
  setInputValue(slicedText);
181
198
  }
182
199
  }
200
+ function focus() {
201
+ focusInputField("first");
202
+ }
203
+ function blur() {
204
+ inputsRef.value.forEach((input) => input.blur());
205
+ }
206
+ watch(
207
+ () => props.modelValue,
208
+ (newValue) => {
209
+ if (newValue === localValue) {
210
+ return;
211
+ }
212
+ localValue = newValue;
213
+ }
214
+ );
215
+ defineExpose({
216
+ focus,
217
+ blur
218
+ });
183
219
  </script>
184
220
 
185
221
  <template>
186
222
  <label
223
+ v-bind="$attrs"
187
224
  class="pxd-pin-input gap-1.5 flex size-max items-center"
188
225
  @keydown="onContainerKeydown"
189
226
  @compositionend="onCompositionEnd"
@@ -193,11 +230,12 @@ function onInputPastedValue(ev) {
193
230
  <div v-for="(n, i) of length" :key="n" :class="computedClasses">
194
231
  <input
195
232
  ref="inputsRef"
196
- :value="modelValueLocal[i]"
233
+ :value="modelValue[i]"
197
234
  :aria-label="`pin code ${n} of ${length}`"
198
235
  :type="computedInputType"
199
236
  :data-index="i"
200
237
  class="aspect-square size-full appearance-none rounded-inherit border-none bg-transparent text-center font-inherit outline-none placeholder:text-gray-600 placeholder:select-none focus:placeholder:opacity-0 disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 disabled:placeholder:text-gray-400 motion-safe:transition-all"
238
+ name="pin-input"
201
239
  minlength="1"
202
240
  maxlength="1"
203
241
  autocorrect="off"
@@ -205,7 +243,6 @@ function onInputPastedValue(ev) {
205
243
  autocapitalize="off"
206
244
  :readonly="readonly"
207
245
  :disabled="disabled"
208
- :required="required"
209
246
  :placeholder="placeholder"
210
247
  :inputmode="computedInputMode"
211
248
  @paste="onInputPastedValue"
@@ -1,5 +1,3 @@
1
- import type { HTMLAttributes } from 'vue'
2
-
3
1
  import type { ComponentSizeWithXs } from '../../types/shared'
4
2
 
5
3
  export interface PinInputProps {
@@ -8,10 +6,8 @@ export interface PinInputProps {
8
6
  length?: number
9
7
  readonly?: boolean
10
8
  disabled?: boolean
11
- required?: boolean
12
9
  modelValue?: string
13
10
  placeholder?: string
14
- inputMode?: HTMLAttributes['inputmode']
15
11
  type?:
16
12
  | 'numeric'
17
13
  | 'alphabetic'
@@ -1,4 +1,5 @@
1
1
  <script setup>
2
+ import { invert } from "es-toolkit";
2
3
  import { computed } from "vue";
3
4
  import { getCssUnitValue } from "../../utils/format";
4
5
  defineOptions({
@@ -36,16 +37,18 @@ const computedStyle = computed(() => {
36
37
  }
37
38
 
38
39
  --placeholder-deg: -45deg;
39
- background: linear-gradient(
40
- var(--placeholder-deg),
41
- var(--placeholder-color) 12.5%,
42
- #0000 12.5%,
43
- #0000 50%,
44
- var(--placeholder-color) 50%,
45
- var(--placeholder-color) 62.5%,
46
- #0000 62.5%,
47
- #0000 100%
48
- )
49
- 0 0 / var(--placeholder-gap, 12px) var(--placeholder-gap, 12px) padding-box fixed;
40
+ background-image: linear-gradient(
41
+ var(--placeholder-deg),
42
+ var(--placeholder-color) 12.5%,
43
+ #0000 12.5%,
44
+ #0000 50%,
45
+ var(--placeholder-color) 50%,
46
+ var(--placeholder-color) 62.5%,
47
+ #0000 62.5%,
48
+ #0000 100%
49
+ );
50
+ background-clip: padding-box;
51
+ background-position: 0 0;
52
+ background-size: var(--placeholder-gap, 12px) var(--placeholder-gap, 12px);
50
53
  }
51
54
  </style>
@@ -1,14 +1,13 @@
1
1
  <script setup>
2
- import { arrow, computePosition, flip, offset, shift } from "@floating-ui/dom";
3
- import { computed, shallowRef, watch } from "vue";
4
- import { useIntersectionObserver } from "../../composables/use-browser-observer";
2
+ import { arrow, autoUpdate, computePosition, flip, shift, hide } from "@floating-ui/dom";
3
+ import { computed, onBeforeUnmount, shallowRef, watch } from "vue";
5
4
  import { useDelayDestroy } from "../../composables/use-delay-destroy";
6
5
  import { useLockScroll } from "../../composables/use-lock-scroll";
7
6
  import { useOutsideClick } from "../../composables/use-outside-click";
7
+ import { useConfigProvider } from "../../contexts/config-provider";
8
8
  import { debounce } from "../../utils/debounce";
9
9
  import { cachedOff, cachedOn, sleep } from "../../utils/event";
10
10
  import { getCssUnitValue, toArray } from "../../utils/format";
11
- import { useConfigProvider } from "../../composables/use-config-provider-context";
12
11
  import PTeleport from "../teleport/index.vue";
13
12
  defineOptions({
14
13
  name: "PPopover",
@@ -30,7 +29,7 @@ const props = defineProps({
30
29
  autoPosition: { type: Boolean, required: false, default: true },
31
30
  wrapperClass: { type: [String, Array, Object], required: false },
32
31
  contentClass: { type: [String, Array, Object], required: false },
33
- contentStyle: { type: null, required: false },
32
+ contentStyle: { type: [Object, String], required: false },
34
33
  unsetPosition: { type: Boolean, required: false, default: false },
35
34
  transitionType: { type: String, required: false, default: "fade-scale" },
36
35
  toggleOnTrigger: { type: Boolean, required: false, default: true },
@@ -39,8 +38,10 @@ const props = defineProps({
39
38
  lockScrollOnVisible: { type: Boolean, required: false }
40
39
  });
41
40
  const emits = defineEmits(["show", "hide", "escape", "outside-click", "trigger-click", "visible-change"]);
41
+ let isLockedScroll = false;
42
42
  let showPopoverTimer;
43
43
  let hidePopoverTimer;
44
+ let cleanupAutoUpdate = null;
44
45
  const allowedMethods = ["click", "manual", "contextmenu"];
45
46
  const arrayRef = shallowRef(null);
46
47
  const triggerRef = shallowRef(null);
@@ -49,6 +50,7 @@ const localPosition = shallowRef(props.position);
49
50
  const triggerMethods = computed(() => toArray(props.trigger));
50
51
  const wrapperStyle = computed(() => ({
51
52
  "z-index": props.zIndex,
53
+ "--popover-offset": props.offset,
52
54
  "--popover-arrow-bg": props.arrowColor,
53
55
  "--popover-max-width": getCssUnitValue(props.maxWidth)
54
56
  }));
@@ -68,11 +70,13 @@ const {
68
70
  emits("visible-change", v);
69
71
  if (v) {
70
72
  if (props.lockScrollOnVisible) {
73
+ isLockedScroll = true;
71
74
  lockScroll();
72
75
  }
73
76
  emits("show");
74
77
  } else {
75
- if (props.lockScrollOnVisible) {
78
+ if (isLockedScroll) {
79
+ isLockedScroll = false;
76
80
  unlockScroll();
77
81
  }
78
82
  emits("hide");
@@ -99,11 +103,44 @@ useOutsideClick(wrapperRef, {
99
103
  { edges: ["leading"] }
100
104
  )
101
105
  });
102
- useIntersectionObserver(triggerRef, ([entry]) => {
103
- if (props.closeOnInvisible && isVisible.value && entry.intersectionRatio === 0) {
106
+ function disposeAutoUpdate() {
107
+ if (cleanupAutoUpdate) {
108
+ cleanupAutoUpdate();
109
+ cleanupAutoUpdate = null;
110
+ }
111
+ }
112
+ async function updatePosition() {
113
+ const { x, y, placement, middlewareData } = await computePosition(
114
+ triggerRef.value,
115
+ wrapperRef.value,
116
+ {
117
+ placement: props.position,
118
+ middleware: [
119
+ shift(),
120
+ props.autoPosition && flip(),
121
+ props.showArrow && arrow({ element: arrayRef.value }),
122
+ props.closeOnInvisible && hide({ strategy: "referenceHidden" }),
123
+ props.closeOnInvisible && hide({ strategy: "escaped" })
124
+ ]
125
+ }
126
+ );
127
+ localPosition.value = placement;
128
+ if (middlewareData.hide?.referenceHidden || middlewareData.hide?.escaped) {
104
129
  handlePopoverHide(true);
130
+ return;
105
131
  }
106
- });
132
+ Object.assign(wrapperRef.value.style, {
133
+ left: `${x}px`,
134
+ top: `${y}px`
135
+ });
136
+ if (middlewareData.arrow) {
137
+ const { x: arrowX, y: arrowY } = middlewareData.arrow;
138
+ Object.assign(arrayRef.value.style, {
139
+ left: arrowX != null ? `${Math.max(arrowX, 5)}px` : "",
140
+ top: arrowY != null ? `${Math.max(arrowY, 5)}px` : ""
141
+ });
142
+ }
143
+ }
107
144
  async function handlePopoverShow() {
108
145
  if (showPopoverTimer || props.disabled) {
109
146
  return;
@@ -126,30 +163,11 @@ async function handlePopoverShow() {
126
163
  Object.assign(wrapperRef.value.style, { left: "0", top: "0" });
127
164
  return;
128
165
  }
129
- const { x, y, placement, middlewareData } = await computePosition(
130
- triggerRef.value,
131
- wrapperRef.value,
132
- {
133
- placement: localPosition.value,
134
- middleware: [
135
- shift(),
136
- offset(props.offset),
137
- props.autoPosition && flip(),
138
- props.showArrow && arrow({ element: arrayRef.value })
139
- ]
140
- }
141
- );
142
- localPosition.value = placement;
143
- Object.assign(wrapperRef.value.style, {
144
- left: `${x}px`,
145
- top: `${y}px`
146
- });
147
- if (middlewareData.arrow) {
148
- const { x: x2, y: y2 } = middlewareData.arrow;
149
- Object.assign(arrayRef.value.style, {
150
- left: x2 != null ? `${Math.max(x2, 5)}px` : "",
151
- top: y2 != null ? `${Math.max(y2, 5)}px` : ""
152
- });
166
+ disposeAutoUpdate();
167
+ if (props.autoPosition) {
168
+ cleanupAutoUpdate = autoUpdate(triggerRef.value, wrapperRef.value, updatePosition);
169
+ } else {
170
+ await updatePosition();
153
171
  }
154
172
  }
155
173
  async function handlePopoverHide(immediate = false) {
@@ -169,6 +187,7 @@ async function handlePopoverHide(immediate = false) {
169
187
  immediate ? 0 : props.hideDelay
170
188
  );
171
189
  });
190
+ disposeAutoUpdate();
172
191
  await hidePopover();
173
192
  if (props.closeOnPressEscape) {
174
193
  cachedOff(document, "keydown", onPopoverKeystroke);
@@ -264,6 +283,13 @@ watch(
264
283
  }
265
284
  }
266
285
  );
286
+ onBeforeUnmount(() => {
287
+ if (isLockedScroll) {
288
+ isLockedScroll = false;
289
+ unlockScroll();
290
+ }
291
+ disposeAutoUpdate();
292
+ });
267
293
  defineExpose({
268
294
  show: handlePopoverShow,
269
295
  hide: handlePopoverHide
@@ -273,7 +299,9 @@ defineExpose({
273
299
  <template>
274
300
  <div
275
301
  ref="triggerRef"
276
- class="pxd-popover inline-flex max-w-full active:select-none"
302
+ class="pxd-popover inline-flex max-w-full active:select-none data-[disabled=true]:pointer-events-none data-[visible=true]:pointer-events-auto"
303
+ :data-visible="isVisible"
304
+ :data-disabled="disabled"
277
305
  v-bind="$attrs"
278
306
  @click="onTriggerClick"
279
307
  @focusin="onTriggerFocusin"
@@ -292,19 +320,28 @@ defineExpose({
292
320
  :class="wrapperClass"
293
321
  :style="wrapperStyle"
294
322
  :data-visible="isVisible"
323
+ :data-position="localPosition"
295
324
  :data-interactive="interactive"
296
- class="pxd-popover--wrapper sm:max-w-(--popover-max-width) absolute isolate z-10 flex max-w-full outline-none data-[interactive=false]:pointer-events-none data-[visible=false]:pointer-events-none motion-reduce:data-[visible=false]:hidden"
325
+ :data-unset-position="unsetPosition"
326
+ class="pxd-popover--wrapper sm:max-w-(--popover-max-width) absolute isolate z-10 flex max-h-full max-w-full outline-none data-[interactive=false]:pointer-events-none data-[visible=false]:pointer-events-none motion-reduce:data-[visible=false]:hidden"
297
327
  @pointerenter="onContentPointerEnter"
298
328
  @pointerleave="onContentPointerLeave"
299
329
  >
300
330
  <div
301
- class="pxd-popover--container pointer-events-auto relative z-1 w-inherit transform-gpu default-animation-duration default-animation-timing-function"
302
- :data-position="localPosition"
331
+ class="pxd-popover--container pointer-events-auto relative z-1 max-h-[80dvh] max-h-[80vh] w-inherit transform-gpu default-animation-duration default-animation-timing-function"
303
332
  :data-transition-type="transitionType"
304
333
  :data-show-transition="configProvider.popoverShowTransition"
305
334
  >
306
- <i v-if="showArrow" ref="arrayRef" class="pxd-popover--arrow absolute z-1 border-solid" />
307
- <div class="pxd-popover--content" :class="contentClass" :style="contentStyle">
335
+ <i
336
+ v-if="showArrow"
337
+ ref="arrayRef"
338
+ class="pxd-popover--arrow absolute z-1 rotate-45 border-5 border-(--popover-arrow-bg)"
339
+ />
340
+ <div
341
+ class="pxd-popover--content h-full max-h-inherit overflow-auto"
342
+ :class="contentClass"
343
+ :style="contentStyle"
344
+ >
308
345
  <slot name="content" />
309
346
  </div>
310
347
  </div>
@@ -389,6 +426,7 @@ defineExpose({
389
426
  }
390
427
 
391
428
  .pxd-popover--container {
429
+ --popover-padding: calc(var(--popover-offset, 8) * 1px);
392
430
  animation-name: popover-fade-show;
393
431
  animation-fill-mode: forwards;
394
432
 
@@ -424,84 +462,84 @@ defineExpose({
424
462
  animation-name: popover-fade-slide-hide;
425
463
  }
426
464
 
427
- &[data-position='top'] {
428
- transform-origin: bottom center;
465
+ [data-position='top'] & {
466
+ transform-origin: 50% 100%;
429
467
  }
430
468
 
431
- &[data-position='top-start'] {
432
- transform-origin: bottom left;
469
+ [data-position='top-start'] & {
470
+ transform-origin: 0% 100%;
433
471
  }
434
472
 
435
- &[data-position='top-end'] {
436
- transform-origin: bottom right;
473
+ [data-position='top-end'] & {
474
+ transform-origin: 100% 100%;
437
475
  }
438
476
 
439
- &[data-position='bottom'] {
477
+ [data-position='bottom'] & {
440
478
  transform-origin: top center;
441
479
  }
442
480
 
443
- &[data-position='bottom-start'] {
481
+ [data-position='bottom-start'] & {
444
482
  transform-origin: top left;
445
483
  }
446
484
 
447
- &[data-position='bottom-end'] {
485
+ [data-position='bottom-end'] & {
448
486
  transform-origin: top right;
449
487
  }
450
488
 
451
- &[data-position='left'] {
489
+ [data-position='left'] & {
452
490
  transform-origin: right center;
453
491
  }
454
492
 
455
- &[data-position='left-start'] {
493
+ [data-position='left-start'] & {
456
494
  transform-origin: right top;
457
495
  }
458
496
 
459
- &[data-position='left-end'] {
497
+ [data-position='left-end'] & {
460
498
  transform-origin: right bottom;
461
499
  }
462
500
 
463
- &[data-position='right'] {
501
+ [data-position='right'] & {
464
502
  transform-origin: left center;
465
503
  }
466
504
 
467
- &[data-position='right-start'] {
505
+ [data-position='right-start'] & {
468
506
  transform-origin: left top;
469
507
  }
470
508
 
471
- &[data-position='right-end'] {
509
+ [data-position='right-end'] & {
472
510
  transform-origin: left bottom;
473
511
  }
474
512
 
475
- &[data-position='top'] .pxd-popover--arrow,
476
- &[data-position='top-start'] .pxd-popover--arrow,
477
- &[data-position='top-end'] .pxd-popover--arrow {
478
- bottom: -5px;
479
- border-width: 6px 6px 0;
480
- border-color: var(--popover-arrow-bg) transparent transparent;
513
+ [data-position^='top'][data-unset-position='false'] & {
514
+ padding-bottom: var(--popover-padding);
481
515
  }
482
516
 
483
- &[data-position='bottom'] .pxd-popover--arrow,
484
- &[data-position='bottom-start'] .pxd-popover--arrow,
485
- &[data-position='bottom-end'] .pxd-popover--arrow {
486
- top: -5px;
487
- border-width: 0 6px 6px;
488
- border-color: transparent transparent var(--popover-arrow-bg);
517
+ [data-position^='bottom'][data-unset-position='false'] & {
518
+ padding-top: var(--popover-padding);
489
519
  }
490
520
 
491
- &[data-position='left'] .pxd-popover--arrow,
492
- &[data-position='left-start'] .pxd-popover--arrow,
493
- &[data-position='left-end'] .pxd-popover--arrow {
494
- right: -5px;
495
- border-width: 6px 0 6px 6px;
496
- border-color: transparent transparent transparent var(--popover-arrow-bg);
521
+ [data-position^='left'][data-unset-position='false'] & {
522
+ padding-right: var(--popover-padding);
497
523
  }
498
524
 
499
- &[data-position='right'] .pxd-popover--arrow,
500
- &[data-position='right-start'] .pxd-popover--arrow,
501
- &[data-position='right-end'] .pxd-popover--arrow {
502
- left: -5px;
503
- border-width: 6px 6px 6px 0;
504
- border-color: transparent var(--popover-arrow-bg) transparent transparent;
525
+ [data-position^='right'][data-unset-position='false'] & {
526
+ padding-left: var(--popover-padding);
505
527
  }
506
528
  }
529
+
530
+ .pxd-popover--wrapper[data-position^='top'] .pxd-popover--arrow {
531
+ bottom: 4px;
532
+ }
533
+
534
+ .pxd-popover--wrapper[data-position^='bottom'] .pxd-popover--arrow {
535
+ top: 4px;
536
+ }
537
+
538
+ .pxd-popover--wrapper[data-position^='left'] .pxd-popover--arrow {
539
+ right: 4px;
540
+ }
541
+
542
+ .pxd-popover--wrapper[data-position^='right'] .pxd-popover--arrow {
543
+ left: 4px;
544
+ }
507
545
  </style>
@@ -1,4 +1,5 @@
1
1
  import type { ComponentClass, ComponentPosition } from '../../types/shared'
2
+ import type { CSSProperties } from 'vue'
2
3
 
3
4
  export type PopoverTrigger = 'click' | 'hover' | 'focus' | 'contextmenu' | 'manual'
4
5
 
@@ -11,8 +11,8 @@ declare const __VLS_base: import("vue").DefineComponent<ProgressProps, {}, {}, {
11
11
  "onUpdate:modelValue"?: ((args_0: number) => any) | undefined;
12
12
  }>, {
13
13
  label: boolean | string | number;
14
- variant: import("../../types/shared").ComponentVariant | "secondary";
15
14
  max: number;
15
+ variant: import("../../types/shared").ComponentVariant | "secondary";
16
16
  min: number;
17
17
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
18
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,10 +1,10 @@
1
1
  <script setup>
2
+ import { tv } from "tailwind-variants";
2
3
  import { computed } from "vue";
3
- import { useConfigProvider } from "../../composables/use-config-provider-context";
4
4
  import { useModelValue } from "../../composables/use-model-value";
5
+ import { useConfigProvider } from "../../contexts/config-provider";
5
6
  import { isTruthyProp } from "../../utils/format";
6
7
  import { getColorByThreshold } from "../../utils/get";
7
- import { progressVariant } from "./cn";
8
8
  defineOptions({
9
9
  name: "PProgress",
10
10
  inheritAttrs: false,
@@ -23,6 +23,19 @@ const props = defineProps({
23
23
  modelValue: { type: [Number, null], required: false }
24
24
  });
25
25
  const emits = defineEmits(["change", "update:modelValue"]);
26
+ const progressVariant = tv({
27
+ base: "pxd-progress-bar flex-1 shrink-0 overflow-hidden rounded-full bg-gray-200",
28
+ variants: {
29
+ size: {
30
+ sm: "h-2",
31
+ md: "h-2.5",
32
+ lg: "h-3.5"
33
+ }
34
+ },
35
+ defaultVariants: {
36
+ size: "md"
37
+ }
38
+ });
26
39
  const configProvider = useConfigProvider();
27
40
  const VARIANTS_COLORS = {
28
41
  primary: "var(--color-primary)",