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,5 +1,4 @@
1
1
  <script setup>
2
- import { useModelValue } from "../../composables/use-model-value";
3
2
  import { provideCheckboxGroupContext } from "../../contexts/checkbox";
4
3
  import PCheckbox from "../checkbox/index.vue";
5
4
  import PStack from "../stack/index.vue";
@@ -13,40 +12,23 @@ defineOptions({
13
12
  });
14
13
  const props = defineProps({
15
14
  disabled: { type: Boolean, required: false },
16
- required: { type: Boolean, required: false },
17
- modelValue: { type: Array, required: false, default: () => [] },
18
- options: { type: Array, required: false, default: () => [] }
15
+ options: { type: Array, required: false, default: () => [] },
16
+ modelValue: { type: Array, required: true, default: () => [] }
19
17
  });
20
18
  const emits = defineEmits(["change", "update:modelValue"]);
21
- const modelValue = useModelValue(props, emits);
22
- function isCheckedAll() {
23
- const { options = [] } = props;
24
- if (options.length === 0) {
25
- return false;
26
- }
27
- return options.every((option) => modelValue.value.includes(option.value));
28
- }
29
- function isCheckedPartial() {
30
- return modelValue.value.length > 0 && !isCheckedAll();
31
- }
32
- provideCheckboxGroupContext(props);
33
- defineExpose({
34
- isCheckedAll,
35
- isCheckedPartial
36
- });
19
+ provideCheckboxGroupContext({ props, emits });
37
20
  </script>
38
21
 
39
22
  <template>
40
- <PStack class="pxd-checkbox-group" role="group" aria-label="Checkbox Group" v-bind="$attrs">
23
+ <PStack
24
+ class="pxd-checkbox-group"
25
+ role="group"
26
+ aria-label="Checkbox Group"
27
+ aria-multiselectable="true"
28
+ v-bind="$attrs"
29
+ >
41
30
  <slot>
42
- <PCheckbox
43
- v-for="option in options"
44
- :key="option.value"
45
- v-model="modelValue"
46
- :label="option.label"
47
- :value="option.value"
48
- :disabled="option.disabled"
49
- />
31
+ <PCheckbox v-for="option in options" :key="option.value" v-bind="option" />
50
32
  </slot>
51
33
  </PStack>
52
34
  </template>
@@ -0,0 +1,12 @@
1
+ import type { ComponentOption, ComponentValue } from '../../types/shared'
2
+
3
+ export interface CheckboxGroupProps {
4
+ disabled?: boolean
5
+ options?: ComponentOption[]
6
+ modelValue: ComponentValue[]
7
+ }
8
+
9
+ export interface CheckboxGroupEmits {
10
+ change: [NonNullable<CheckboxGroupProps['modelValue']>]
11
+ 'update:modelValue': [NonNullable<CheckboxGroupProps['modelValue']>]
12
+ }
@@ -4,8 +4,8 @@ type __VLS_Slots = {} & {
4
4
  default?: (props: typeof __VLS_1) => any;
5
5
  };
6
6
  declare const __VLS_base: import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{}>, {
7
- size: number | string;
8
7
  label: import("../../types/shared").ComponentLabel;
8
+ size: number | string;
9
9
  variant: import("../../types/shared").ComponentVariant | "secondary";
10
10
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
11
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1,13 +1,42 @@
1
1
  <script setup>
2
+ import { tv } from "tailwind-variants";
2
3
  import { computed } from "vue";
3
4
  import { getCssUnitValue, isTruthyProp } from "../../utils/format";
4
- import { chipVariant } from "./cn";
5
+ defineOptions({
6
+ name: "PChip",
7
+ inheritAttrs: false
8
+ });
5
9
  const props = defineProps({
6
10
  size: { type: [Number, String], required: false, default: 10 },
7
11
  inset: { type: Boolean, required: false },
8
12
  label: { type: [String, Number, Array, null], required: false, default: "" },
9
13
  variant: { type: String, required: false, default: "primary" }
10
14
  });
15
+ const chipVariant = tv({
16
+ base: "pxd-chip--label text-xs top-0 right-0 absolute rounded-full border border-background-100 motion-safe:transition-all",
17
+ variants: {
18
+ variant: {
19
+ primary: "bg-primary text-background-100",
20
+ error: "bg-red-700 text-background-100 dark:text-gray-1000",
21
+ warning: "bg-amber-700 text-gray-1000 dark:text-gray-100",
22
+ success: "bg-green-700 text-background-100 dark:text-gray-1000",
23
+ secondary: "bg-gray-700 text-background-100 dark:text-gray-1000"
24
+ },
25
+ inset: {
26
+ true: {},
27
+ false: "translate-x-1/2 -translate-y-1/3"
28
+ },
29
+ hasLabel: {
30
+ true: {},
31
+ false: "size-(--chip-size)"
32
+ }
33
+ },
34
+ defaultVariants: {
35
+ variant: "primary",
36
+ inset: false,
37
+ hasLabel: false
38
+ }
39
+ });
11
40
  const computedClasses = computed(() => {
12
41
  return chipVariant({
13
42
  inset: props.inset,
@@ -18,7 +47,7 @@ const computedClasses = computed(() => {
18
47
  </script>
19
48
 
20
49
  <template>
21
- <div class="pxd-chip relative inline-flex shrink-0">
50
+ <div class="pxd-chip relative inline-flex shrink-0" v-bind="$attrs">
22
51
  <slot />
23
52
 
24
53
  <span
@@ -1,11 +1,17 @@
1
1
  import type { ChoiceboxProps } from './types';
2
- declare var __VLS_8: {}, __VLS_10: {};
2
+ declare var __VLS_10: {};
3
3
  type __VLS_Slots = {} & {
4
- label?: (props: typeof __VLS_8) => any;
5
- } & {
6
- description?: (props: typeof __VLS_10) => any;
4
+ default?: (props: typeof __VLS_10) => any;
7
5
  };
8
- declare const __VLS_base: import("vue").DefineComponent<ChoiceboxProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChoiceboxProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_base: import("vue").DefineComponent<ChoiceboxProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
7
+ change: (args_0: NonNullable<import("../../types/shared").ComponentValue | import("../../types/shared").ComponentValue[] | undefined>) => any;
8
+ "update:modelValue": (args_0: NonNullable<import("../../types/shared").ComponentValue | import("../../types/shared").ComponentValue[] | undefined>) => any;
9
+ }, string, import("vue").PublicProps, Readonly<ChoiceboxProps> & Readonly<{
10
+ onChange?: ((args_0: NonNullable<import("../../types/shared").ComponentValue | import("../../types/shared").ComponentValue[] | undefined>) => any) | undefined;
11
+ "onUpdate:modelValue"?: ((args_0: NonNullable<import("../../types/shared").ComponentValue | import("../../types/shared").ComponentValue[] | undefined>) => any) | undefined;
12
+ }>, {
13
+ gap: import("../../types/shared").ResponsiveValue<number | string>;
14
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
15
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
16
  declare const _default: typeof __VLS_export;
11
17
  export default _default;
@@ -1,67 +1,49 @@
1
1
  <script setup>
2
2
  import { computed, markRaw } from "vue";
3
- import { useChoiceboxGroupContext, useChoiceboxGroupModelValue } from "../../contexts/choicebox";
4
- import PCheckbox from "../checkbox/index.vue";
5
- import PRadio from "../radio/index.vue";
3
+ import { provideChoiceboxContext } from "../../contexts/choicebox";
4
+ import PCheckboxGroup from "../checkbox-group/index.vue";
5
+ import PChoiceboxItem from "../choicebox-item/index.vue";
6
+ import PRadioGroup from "../radio-group/index.vue";
6
7
  defineOptions({
7
- name: "PChoicebox"
8
+ name: "PChoicebox",
9
+ inheritAttrs: false,
10
+ model: {
11
+ prop: "modelValue",
12
+ event: "update:modelValue"
13
+ }
8
14
  });
9
15
  const props = defineProps({
16
+ gap: { type: [Number, String, Object], required: false, default: 3 },
10
17
  label: { type: [String, Number, Array, null], required: false },
11
- value: { type: [String, Number, Boolean], required: false },
18
+ multiple: { type: Boolean, required: false },
12
19
  disabled: { type: Boolean, required: false },
13
- required: { type: Boolean, required: false },
14
- description: { type: String, required: false }
15
- });
16
- const choiceboxModelValue = useChoiceboxGroupModelValue();
17
- const choiceboxGroupContext = useChoiceboxGroupContext();
18
- const renderComponent = computed(() => markRaw(choiceboxGroupContext.multiple ? PCheckbox : PRadio));
19
- const computedAttrs = computed(() => {
20
- const { disabled, required, value } = props;
21
- return {
22
- value,
23
- disabled,
24
- required,
25
- class: "pxd-choicebox justify-between border rounded-md flex-1 w-full p-3 flex-row-reverse hover:bg-background-hover hover:border-gray-500 motion-safe:transition-colors"
26
- };
20
+ options: { type: Array, required: false },
21
+ modelValue: { type: [String, Number, Boolean, Array], required: false }
27
22
  });
23
+ const emits = defineEmits(["change", "update:modelValue"]);
24
+ const renderAs = computed(() => markRaw(props.multiple ? PCheckboxGroup : PRadioGroup));
25
+ function onUpdateModelValue(value) {
26
+ emits("change", value);
27
+ emits("update:modelValue", value);
28
+ }
29
+ provideChoiceboxContext({ props, emits });
28
30
  </script>
29
31
 
30
32
  <template>
31
- <Component :is="renderComponent" v-model="choiceboxModelValue" v-bind="computedAttrs">
32
- <div class="gap-1 flex flex-col">
33
- <span class="pxd-choicebox--label font-medium">
34
- <slot name="label">
35
- {{ label }}
36
- </slot>
37
- </span>
38
- <span class="pxd-choicebox--description text-sm text-foreground-secondary">
39
- <slot name="description">
40
- {{ description }}
41
- </slot>
42
- </span>
43
- </div>
33
+ <Component
34
+ :is="renderAs"
35
+ :gap="gap"
36
+ :options="options"
37
+ :disabled="disabled"
38
+ :model-value="modelValue"
39
+ :aria-multiselectable="multiple"
40
+ class="pxd-choicebox w-full"
41
+ :role="multiple ? 'group' : 'radiogroup'"
42
+ v-bind="$attrs"
43
+ @update:model-value="onUpdateModelValue"
44
+ >
45
+ <slot>
46
+ <PChoiceboxItem v-for="option in options" :key="option.value" v-bind="option" />
47
+ </slot>
44
48
  </Component>
45
49
  </template>
46
-
47
- <style lang="postcss">
48
- .pxd-choicebox[aria-checked='true'] {
49
- border-color: var(--color-primary);
50
- background-color: hsla(var(--primary), 0.08);
51
-
52
- .pxd-choicebox--label,
53
- .pxd-choicebox--description {
54
- color: var(--color-primary);
55
- }
56
- }
57
-
58
- .pxd-choicebox.is-disabled {
59
- background-color: var(--color-background-100);
60
- border-color: var(--color-border);
61
-
62
- .pxd-choicebox--label,
63
- .pxd-choicebox--description {
64
- color: var(--color-gray-500);
65
- }
66
- }
67
- </style>
@@ -1,27 +1,20 @@
1
- import type { ComponentLabel, ComponentOption, ComponentValue } from '../../types/shared'
2
-
3
- interface Option extends ComponentOption {
4
- description?: string
5
- }
1
+ import type {
2
+ ComponentLabel,
3
+ ComponentValue,
4
+ ComponentOption,
5
+ ResponsiveValue,
6
+ } from '../../types/shared'
6
7
 
7
8
  export interface ChoiceboxProps {
8
- label?: ComponentLabel
9
- value?: ComponentValue
10
- disabled?: boolean
11
- required?: boolean
12
- description?: string
13
- }
14
-
15
- export interface ChoiceboxGroupProps {
9
+ gap?: ResponsiveValue<number | string>
16
10
  label?: ComponentLabel
17
11
  multiple?: boolean
18
- required?: boolean
19
12
  disabled?: boolean
20
- options?: Option[]
13
+ options?: ComponentOption[]
21
14
  modelValue?: ComponentValue | ComponentValue[]
22
15
  }
23
16
 
24
- export interface ChoiceboxGroupEmits {
25
- change: [NonNullable<ChoiceboxGroupProps['modelValue']>]
26
- 'update:modelValue': [NonNullable<ChoiceboxGroupProps['modelValue']>]
17
+ export interface ChoiceboxEmits {
18
+ change: [NonNullable<ChoiceboxProps['modelValue']>]
19
+ 'update:modelValue': [NonNullable<ChoiceboxProps['modelValue']>]
27
20
  }
@@ -0,0 +1,16 @@
1
+ import type { ChoiceboxProps } from './types';
2
+ declare var __VLS_8: {}, __VLS_10: {};
3
+ type __VLS_Slots = {} & {
4
+ label?: (props: typeof __VLS_8) => any;
5
+ } & {
6
+ description?: (props: typeof __VLS_10) => any;
7
+ };
8
+ declare const __VLS_base: import("vue").DefineComponent<ChoiceboxProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChoiceboxProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
12
+ type __VLS_WithSlots<T, S> = T & {
13
+ new (): {
14
+ $slots: S;
15
+ };
16
+ };
@@ -0,0 +1,67 @@
1
+ <script setup>
2
+ import { computed, markRaw } from "vue";
3
+ import { useChoiceboxContext } from "../../contexts/choicebox";
4
+ import PCheckbox from "../checkbox/index.vue";
5
+ import PRadio from "../radio/index.vue";
6
+ defineOptions({
7
+ name: "PChoiceboxItem",
8
+ inheritAttrs: false,
9
+ model: {
10
+ prop: "modelValue",
11
+ event: "update:modelValue"
12
+ }
13
+ });
14
+ defineProps({
15
+ label: { type: [String, Number, Array, null], required: false },
16
+ value: { type: [String, Number, Boolean], required: false },
17
+ disabled: { type: Boolean, required: false },
18
+ description: { type: String, required: false }
19
+ });
20
+ const choiceboxGroupContext = useChoiceboxContext();
21
+ const renderAs = computed(() => markRaw(choiceboxGroupContext?.props.multiple ? PCheckbox : PRadio));
22
+ </script>
23
+
24
+ <template>
25
+ <Component
26
+ :is="renderAs"
27
+ :value="value"
28
+ :disabled="disabled"
29
+ class="pxd-choicebox-item p-3 w-full flex-1 flex-row-reverse justify-between rounded-md border hover:border-gray-500 hover:bg-background-hover motion-safe:transition-colors"
30
+ v-bind="$attrs"
31
+ >
32
+ <div class="gap-1 flex flex-col">
33
+ <span class="pxd-choicebox--label font-medium">
34
+ <slot name="label">
35
+ {{ label }}
36
+ </slot>
37
+ </span>
38
+ <span class="pxd-choicebox--description text-sm text-foreground-secondary">
39
+ <slot name="description">
40
+ {{ description }}
41
+ </slot>
42
+ </span>
43
+ </div>
44
+ </Component>
45
+ </template>
46
+
47
+ <style lang="postcss">
48
+ .pxd-choicebox[aria-selected='true'] {
49
+ border-color: var(--color-primary);
50
+ background-color: hsla(var(--primary), 0.08);
51
+
52
+ .pxd-choicebox--label,
53
+ .pxd-choicebox--description {
54
+ color: var(--color-primary);
55
+ }
56
+ }
57
+
58
+ .pxd-choicebox[data-disabled='true'] {
59
+ background-color: var(--color-background-100);
60
+ border-color: var(--color-border);
61
+
62
+ .pxd-choicebox--label,
63
+ .pxd-choicebox--description {
64
+ color: var(--color-gray-500);
65
+ }
66
+ }
67
+ </style>
@@ -0,0 +1,12 @@
1
+ import type { ComponentLabel, ComponentOption, ComponentValue } from '../../types/shared'
2
+
3
+ interface Option extends ComponentOption {
4
+ description?: string
5
+ }
6
+
7
+ export interface ChoiceboxProps {
8
+ label?: ComponentLabel
9
+ value?: ComponentValue
10
+ disabled?: boolean
11
+ description?: string
12
+ }
@@ -5,10 +5,11 @@ type __VLS_Slots = {} & {
5
5
  } & {
6
6
  default?: (props: typeof __VLS_20) => any;
7
7
  };
8
- declare const __VLS_base: import("vue").DefineComponent<CollapseProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CollapseProps> & Readonly<{}>, {
9
- title: string;
10
- expand: boolean;
11
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const __VLS_base: import("vue").DefineComponent<CollapseProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
+ toggle: (args_0: MouseEvent) => any;
10
+ }, string, import("vue").PublicProps, Readonly<CollapseProps> & Readonly<{
11
+ onToggle?: ((args_0: MouseEvent) => any) | undefined;
12
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
13
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
13
14
  declare const _default: typeof __VLS_export;
14
15
  export default _default;
@@ -1,41 +1,26 @@
1
1
  <script setup>
2
2
  import ChevronDownIcon from "@gdsicon/vue/chevron-down";
3
- import { computed, onMounted, ref, watch } from "vue";
3
+ import { computed, onMounted, shallowRef, watch } from "vue";
4
4
  import { useCollapseGroupContext } from "../../contexts/collapse";
5
5
  import { getUniqueId } from "../../utils/uid";
6
6
  defineOptions({
7
- name: "PCollapse"
7
+ name: "PCollapse",
8
+ inheritAttrs: false
8
9
  });
10
+ const uid = getUniqueId();
9
11
  const props = defineProps({
10
- title: { type: String, required: false, default: "" },
11
- expand: { type: Boolean, required: false, default: false }
12
+ title: { type: String, required: false },
13
+ expand: { type: Boolean, required: false }
12
14
  });
13
- const uid = getUniqueId();
14
- const localExpand = ref(props.expand);
15
- const collapseGroup = useCollapseGroupContext();
15
+ const emits = defineEmits(["toggle"]);
16
+ const localExpand = shallowRef(props.expand);
17
+ const collapseGroupContext = useCollapseGroupContext();
16
18
  const isExpanded = computed(() => {
17
- if (collapseGroup) {
18
- return collapseGroup.isExpanded(uid);
19
+ if (collapseGroupContext) {
20
+ return collapseGroupContext.expandedIds.value.has(uid);
19
21
  }
20
22
  return localExpand.value;
21
23
  });
22
- if (!collapseGroup) {
23
- watch(
24
- () => props.expand,
25
- (expand) => {
26
- localExpand.value = expand;
27
- },
28
- { immediate: true }
29
- );
30
- }
31
- function onTriggerClick() {
32
- const newState = !isExpanded.value;
33
- if (collapseGroup) {
34
- collapseGroup.toggleItem(uid, newState);
35
- return;
36
- }
37
- localExpand.value = newState;
38
- }
39
24
  function beforeEnter(el) {
40
25
  ;
41
26
  el.style.height = "0";
@@ -60,20 +45,52 @@ function leave(el) {
60
45
  ;
61
46
  el.style.height = "0";
62
47
  }
48
+ function onToggleClick(ev) {
49
+ const newCheckedState = !isExpanded.value;
50
+ emits("toggle", ev);
51
+ if (collapseGroupContext) {
52
+ const ids = collapseGroupContext.expandedIds.value;
53
+ if (!collapseGroupContext.props.multiple) {
54
+ ids.clear();
55
+ }
56
+ if (newCheckedState) {
57
+ ids.add(uid);
58
+ } else {
59
+ ids.delete(uid);
60
+ }
61
+ return;
62
+ }
63
+ localExpand.value = newCheckedState;
64
+ }
65
+ watch(
66
+ () => props.expand,
67
+ (expand) => {
68
+ if (collapseGroupContext) {
69
+ if (expand) {
70
+ collapseGroupContext.expandedIds.value.add(uid);
71
+ } else {
72
+ collapseGroupContext.expandedIds.value.delete(uid);
73
+ }
74
+ } else {
75
+ localExpand.value = expand;
76
+ }
77
+ },
78
+ { immediate: true }
79
+ );
63
80
  onMounted(() => {
64
- if (props.expand && collapseGroup) {
65
- collapseGroup.toggleItem(uid, true);
81
+ if (props.expand && collapseGroupContext) {
82
+ collapseGroupContext.expandedIds.value.add(uid);
66
83
  }
67
84
  });
68
85
  </script>
69
86
 
70
87
  <template>
71
- <div class="pxd-collapse group/collapse border-b">
88
+ <div class="pxd-collapse group/collapse border-b" v-bind="$attrs">
72
89
  <h3 class="pxd-collapse--title">
73
90
  <button
74
91
  class="pxd-collapse--trigger pr-1 group/collapse flex w-full cursor-pointer touch-manipulation appearance-none items-center justify-between border-none bg-transparent font-inherit self-focus-ring outline-none"
75
92
  :data-state="isExpanded ? 'open' : 'closed'"
76
- @click="onTriggerClick"
93
+ @click="onToggleClick"
77
94
  >
78
95
  <slot name="title">
79
96
  {{ title }}
@@ -1,11 +1,8 @@
1
- import type { ComponentSize } from '../../types/shared'
2
-
3
1
  export interface CollapseProps {
4
2
  title?: string
5
3
  expand?: boolean
6
4
  }
7
5
 
8
- export interface CollapseGroupProps {
9
- multiple?: boolean
10
- size?: ComponentSize
6
+ export interface CollapseEmits {
7
+ toggle: [MouseEvent]
11
8
  }
@@ -1,11 +1,9 @@
1
- import type { CollapseGroupProps } from '../collapse/types';
1
+ import type { CollapseGroupProps } from './types';
2
2
  declare var __VLS_1: {};
3
3
  type __VLS_Slots = {} & {
4
4
  default?: (props: typeof __VLS_1) => any;
5
5
  };
6
- declare const __VLS_base: import("vue").DefineComponent<CollapseGroupProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CollapseGroupProps> & Readonly<{}>, {
7
- multiple: boolean;
8
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_base: import("vue").DefineComponent<CollapseGroupProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CollapseGroupProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
7
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
10
8
  declare const _default: typeof __VLS_export;
11
9
  export default _default;
@@ -1,13 +1,14 @@
1
1
  <script setup>
2
2
  import { computed, ref } from "vue";
3
- import { useConfigProvider } from "../../composables/use-config-provider-context";
4
3
  import { provideCollapseGroupContext } from "../../contexts/collapse";
4
+ import { useConfigProvider } from "../../contexts/config-provider";
5
5
  import { getFallbackValue } from "../../utils/get";
6
6
  defineOptions({
7
- name: "PCollapseGroup"
7
+ name: "PCollapseGroup",
8
+ inheritAttrs: false
8
9
  });
9
10
  const props = defineProps({
10
- multiple: { type: Boolean, required: false, default: false },
11
+ multiple: { type: Boolean, required: false },
11
12
  size: { type: String, required: false }
12
13
  });
13
14
  const SIZES = {
@@ -28,7 +29,7 @@ const SIZES = {
28
29
  }
29
30
  };
30
31
  const configProvider = useConfigProvider();
31
- const expandedItemIds = ref([]);
32
+ const expandedIds = ref(/* @__PURE__ */ new Set());
32
33
  const computedStyle = computed(() => {
33
34
  const { padding, fontSize, fontWeight } = getFallbackValue(props.size, SIZES, configProvider.size);
34
35
  return {
@@ -37,27 +38,14 @@ const computedStyle = computed(() => {
37
38
  "--collapse-font-weight": fontWeight
38
39
  };
39
40
  });
40
- function toggleItem(id, expanded) {
41
- if (expanded) {
42
- if (props.multiple) {
43
- expandedItemIds.value.push(id);
44
- } else {
45
- expandedItemIds.value = [id];
46
- }
47
- return;
48
- }
49
- expandedItemIds.value = expandedItemIds.value.filter((item) => item !== id);
50
- }
51
- const isExpanded = (id) => expandedItemIds.value.includes(id);
52
41
  provideCollapseGroupContext({
53
- multiple: computed(() => props.multiple),
54
- isExpanded,
55
- toggleItem
42
+ expandedIds,
43
+ props
56
44
  });
57
45
  </script>
58
46
 
59
47
  <template>
60
- <div class="pxd-collapse-group w-full max-w-full border-t" :style="computedStyle">
48
+ <div class="pxd-collapse-group w-full max-w-full border-t" :style="computedStyle" v-bind="$attrs">
61
49
  <slot />
62
50
  </div>
63
51
  </template>
@@ -0,0 +1,6 @@
1
+ import type { ComponentSize } from '../../types/shared'
2
+
3
+ export interface CollapseGroupProps {
4
+ multiple?: boolean
5
+ size?: ComponentSize
6
+ }