@byyuurin/ui 0.0.11 → 0.2.0

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 (297) hide show
  1. package/README.md +170 -58
  2. package/dist/module.d.mts +4 -13
  3. package/dist/module.json +4 -4
  4. package/dist/module.mjs +54 -20
  5. package/dist/runtime/components/Accordion.vue +28 -23
  6. package/dist/runtime/components/Accordion.vue.d.ts +51 -29
  7. package/dist/runtime/components/Alert.vue +47 -27
  8. package/dist/runtime/components/Alert.vue.d.ts +37 -25
  9. package/dist/runtime/components/App.vue +9 -8
  10. package/dist/runtime/components/App.vue.d.ts +22 -20
  11. package/dist/runtime/components/Avatar.vue +65 -21
  12. package/dist/runtime/components/Avatar.vue.d.ts +27 -13
  13. package/dist/runtime/components/AvatarGroup.vue +14 -10
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +12 -9
  15. package/dist/runtime/components/Badge.vue +64 -32
  16. package/dist/runtime/components/Badge.vue.d.ts +30 -29
  17. package/dist/runtime/components/Breadcrumb.vue +40 -22
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +48 -21
  19. package/dist/runtime/components/Button.vue +113 -52
  20. package/dist/runtime/components/Button.vue.d.ts +36 -20
  21. package/dist/runtime/components/Calendar.vue +50 -43
  22. package/dist/runtime/components/Calendar.vue.d.ts +58 -31
  23. package/dist/runtime/components/Card.vue +18 -14
  24. package/dist/runtime/components/Card.vue.d.ts +18 -14
  25. package/dist/runtime/components/Carousel.vue +99 -46
  26. package/dist/runtime/components/Carousel.vue.d.ts +46 -25
  27. package/dist/runtime/components/Checkbox.vue +60 -35
  28. package/dist/runtime/components/Checkbox.vue.d.ts +35 -28
  29. package/dist/runtime/components/CheckboxGroup.vue +131 -0
  30. package/dist/runtime/components/CheckboxGroup.vue.d.ts +89 -0
  31. package/dist/runtime/components/Chip.vue +35 -32
  32. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  33. package/dist/runtime/components/Collapsible.vue +13 -9
  34. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  35. package/dist/runtime/components/Drawer.vue +80 -70
  36. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  37. package/dist/runtime/components/DropdownMenu.vue +23 -16
  38. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  39. package/dist/runtime/components/DropdownMenuContent.vue +136 -106
  40. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  41. package/dist/runtime/components/FieldGroup.vue +33 -0
  42. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  43. package/dist/runtime/components/Form.vue +172 -88
  44. package/dist/runtime/components/Form.vue.d.ts +69 -44
  45. package/dist/runtime/components/FormField.vue +108 -0
  46. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  47. package/dist/runtime/components/Icon.vue +20 -0
  48. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  49. package/dist/runtime/components/Input.vue +84 -79
  50. package/dist/runtime/components/Input.vue.d.ts +55 -43
  51. package/dist/runtime/components/InputNumber.vue +66 -52
  52. package/dist/runtime/components/InputNumber.vue.d.ts +50 -109
  53. package/dist/runtime/components/InputTags.vue +155 -0
  54. package/dist/runtime/components/InputTags.vue.d.ts +85 -0
  55. package/dist/runtime/components/Kbd.vue +11 -5
  56. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  57. package/dist/runtime/components/Link.vue +54 -197
  58. package/dist/runtime/components/Link.vue.d.ts +17 -17
  59. package/dist/runtime/components/LinkBase.vue +11 -33
  60. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  61. package/dist/runtime/components/Marquee.vue +38 -0
  62. package/dist/runtime/components/Marquee.vue.d.ts +54 -0
  63. package/dist/runtime/components/Modal.vue +53 -39
  64. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  65. package/dist/runtime/components/NavigationMenu.vue +345 -0
  66. package/dist/runtime/components/NavigationMenu.vue.d.ts +216 -0
  67. package/dist/runtime/components/OverlayProvider.vue +3 -3
  68. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  69. package/dist/runtime/components/Pagination.vue +39 -47
  70. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  71. package/dist/runtime/components/PinInput.vue +46 -32
  72. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  73. package/dist/runtime/components/Popover.vue +33 -19
  74. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  75. package/dist/runtime/components/Progress.vue +31 -26
  76. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  77. package/dist/runtime/components/RadioGroup.vue +75 -48
  78. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  79. package/dist/runtime/components/ScrollArea.vue +33 -31
  80. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  81. package/dist/runtime/components/Select.vue +166 -76
  82. package/dist/runtime/components/Select.vue.d.ts +206 -65
  83. package/dist/runtime/components/Separator.vue +42 -16
  84. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  85. package/dist/runtime/components/Skeleton.vue +18 -6
  86. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  87. package/dist/runtime/components/Slider.vue +42 -24
  88. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  89. package/dist/runtime/components/Switch.vue +40 -31
  90. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  91. package/dist/runtime/components/Table.vue +329 -79
  92. package/dist/runtime/components/Table.vue.d.ts +152 -66
  93. package/dist/runtime/components/Tabs.vue +70 -23
  94. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  95. package/dist/runtime/components/Textarea.vue +102 -54
  96. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  97. package/dist/runtime/components/Timeline.vue +102 -0
  98. package/dist/runtime/components/Timeline.vue.d.ts +74 -0
  99. package/dist/runtime/components/Toast.vue +84 -38
  100. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  101. package/dist/runtime/components/ToastProvider.vue +31 -22
  102. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  103. package/dist/runtime/components/Tooltip.vue +33 -21
  104. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  105. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  106. package/dist/runtime/composables/defineShortcuts.js +129 -0
  107. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  108. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  109. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  110. package/dist/runtime/composables/useComponentIcons.js +4 -4
  111. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  112. package/dist/runtime/composables/useFieldGroup.js +14 -0
  113. package/dist/runtime/composables/useFormField.d.ts +62 -0
  114. package/dist/runtime/composables/useFormField.js +99 -0
  115. package/dist/runtime/composables/useKbd.d.ts +3 -2
  116. package/dist/runtime/composables/useKbd.js +3 -2
  117. package/dist/runtime/composables/useLocale.d.ts +68 -5
  118. package/dist/runtime/composables/useLocale.js +11 -11
  119. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  120. package/dist/runtime/composables/useOverlay.js +44 -30
  121. package/dist/runtime/composables/usePortal.d.ts +6 -0
  122. package/dist/runtime/composables/usePortal.js +17 -0
  123. package/dist/runtime/composables/useToast.d.ts +12 -5
  124. package/dist/runtime/composables/useToast.js +12 -7
  125. package/dist/runtime/locale/en.d.ts +30 -1
  126. package/dist/runtime/locale/en.js +2 -1
  127. package/dist/runtime/locale/index.d.ts +2 -2
  128. package/dist/runtime/locale/index.js +1 -1
  129. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  130. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  131. package/dist/runtime/plugins/colors.d.ts +2 -0
  132. package/dist/runtime/plugins/colors.js +50 -0
  133. package/dist/runtime/types/app.config.d.ts +6 -0
  134. package/dist/runtime/types/form.d.ts +58 -17
  135. package/dist/runtime/types/form.js +11 -0
  136. package/dist/runtime/types/index.d.ts +56 -8
  137. package/dist/runtime/types/index.js +49 -1
  138. package/dist/runtime/types/input.d.ts +8 -0
  139. package/dist/runtime/types/locale.d.ts +5 -0
  140. package/dist/runtime/types/style.d.ts +33 -0
  141. package/dist/runtime/types/style.js +0 -0
  142. package/dist/runtime/types/unocss.d.ts +4 -0
  143. package/dist/runtime/types/utils.d.ts +41 -37
  144. package/dist/runtime/utils/form.d.ts +5 -1
  145. package/dist/runtime/utils/form.js +49 -0
  146. package/dist/runtime/utils/index.d.ts +10 -13
  147. package/dist/runtime/utils/index.js +41 -48
  148. package/dist/runtime/utils/link.d.ts +3 -2
  149. package/dist/runtime/utils/link.js +16 -2
  150. package/dist/runtime/utils/locale.d.ts +5 -0
  151. package/dist/runtime/utils/locale.js +10 -0
  152. package/dist/runtime/utils/style.d.ts +94 -0
  153. package/dist/runtime/utils/style.js +37 -0
  154. package/dist/runtime/vue/components/Icon.vue +15 -0
  155. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  156. package/dist/runtime/vue/components/Link.vue +163 -0
  157. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  158. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  159. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  160. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  161. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  162. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  163. package/dist/runtime/vue/plugins/head.js +9 -0
  164. package/dist/runtime/vue/stubs.d.ts +16 -1
  165. package/dist/runtime/vue/stubs.js +32 -1
  166. package/dist/setup.d.mts +13 -0
  167. package/dist/setup.mjs +12 -0
  168. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  169. package/dist/shared/ui.DLOxhmP0.mjs +4242 -0
  170. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  171. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  172. package/dist/types.d.mts +3 -1
  173. package/dist/unocss.d.mts +12 -52
  174. package/dist/unocss.mjs +144 -254
  175. package/dist/unplugin.d.mts +13 -26
  176. package/dist/unplugin.mjs +193 -18
  177. package/dist/vite.d.mts +10 -1
  178. package/dist/vite.mjs +12 -3
  179. package/package.json +154 -87
  180. package/vue-plugin.d.ts +5 -0
  181. package/dist/module.d.ts +0 -13
  182. package/dist/module.mjs.map +0 -1
  183. package/dist/runtime/app/injections.d.ts +0 -9331
  184. package/dist/runtime/app/injections.js +0 -61
  185. package/dist/runtime/components/ButtonGroup.vue +0 -26
  186. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  187. package/dist/runtime/components/FormItem.vue +0 -90
  188. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  189. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  190. package/dist/runtime/composables/useButtonGroup.js +0 -9
  191. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  192. package/dist/runtime/composables/useFormItem.js +0 -64
  193. package/dist/runtime/composables/useTheme.d.ts +0 -9
  194. package/dist/runtime/composables/useTheme.js +0 -23
  195. package/dist/runtime/index.d.ts +0 -44
  196. package/dist/runtime/index.js +0 -44
  197. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  198. package/dist/runtime/theme/accordion.d.ts +0 -50
  199. package/dist/runtime/theme/accordion.js +0 -28
  200. package/dist/runtime/theme/alert.d.ts +0 -119
  201. package/dist/runtime/theme/alert.js +0 -47
  202. package/dist/runtime/theme/app.d.ts +0 -19
  203. package/dist/runtime/theme/app.js +0 -19
  204. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  205. package/dist/runtime/theme/avatar-group.js +0 -32
  206. package/dist/runtime/theme/avatar.d.ts +0 -50
  207. package/dist/runtime/theme/avatar.js +0 -34
  208. package/dist/runtime/theme/badge.d.ts +0 -76
  209. package/dist/runtime/theme/badge.js +0 -92
  210. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  211. package/dist/runtime/theme/breadcrumb.js +0 -44
  212. package/dist/runtime/theme/button-group.d.ts +0 -60
  213. package/dist/runtime/theme/button-group.js +0 -42
  214. package/dist/runtime/theme/button.d.ts +0 -184
  215. package/dist/runtime/theme/button.js +0 -164
  216. package/dist/runtime/theme/calendar.d.ts +0 -58
  217. package/dist/runtime/theme/calendar.js +0 -86
  218. package/dist/runtime/theme/card.d.ts +0 -56
  219. package/dist/runtime/theme/card.js +0 -37
  220. package/dist/runtime/theme/carousel.d.ts +0 -107
  221. package/dist/runtime/theme/carousel.js +0 -43
  222. package/dist/runtime/theme/checkbox.d.ts +0 -82
  223. package/dist/runtime/theme/checkbox.js +0 -54
  224. package/dist/runtime/theme/chip.d.ts +0 -61
  225. package/dist/runtime/theme/chip.js +0 -66
  226. package/dist/runtime/theme/collapsible.d.ts +0 -32
  227. package/dist/runtime/theme/collapsible.js +0 -10
  228. package/dist/runtime/theme/drawer.d.ts +0 -142
  229. package/dist/runtime/theme/drawer.js +0 -113
  230. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  231. package/dist/runtime/theme/dropdown-menu.js +0 -83
  232. package/dist/runtime/theme/form-item.d.ts +0 -70
  233. package/dist/runtime/theme/form-item.js +0 -34
  234. package/dist/runtime/theme/form.d.ts +0 -2
  235. package/dist/runtime/theme/form.js +0 -7
  236. package/dist/runtime/theme/index.d.ts +0 -41
  237. package/dist/runtime/theme/index.js +0 -41
  238. package/dist/runtime/theme/input-number.d.ts +0 -115
  239. package/dist/runtime/theme/input-number.js +0 -95
  240. package/dist/runtime/theme/input.d.ts +0 -172
  241. package/dist/runtime/theme/input.js +0 -151
  242. package/dist/runtime/theme/kbd.d.ts +0 -33
  243. package/dist/runtime/theme/kbd.js +0 -26
  244. package/dist/runtime/theme/link.d.ts +0 -38
  245. package/dist/runtime/theme/link.js +0 -26
  246. package/dist/runtime/theme/modal.d.ts +0 -42
  247. package/dist/runtime/theme/modal.js +0 -55
  248. package/dist/runtime/theme/pagination.d.ts +0 -74
  249. package/dist/runtime/theme/pagination.js +0 -17
  250. package/dist/runtime/theme/pinInput.d.ts +0 -94
  251. package/dist/runtime/theme/pinInput.js +0 -111
  252. package/dist/runtime/theme/popover.d.ts +0 -32
  253. package/dist/runtime/theme/popover.js +0 -13
  254. package/dist/runtime/theme/progress.d.ts +0 -180
  255. package/dist/runtime/theme/progress.js +0 -95
  256. package/dist/runtime/theme/radio-group.d.ts +0 -104
  257. package/dist/runtime/theme/radio-group.js +0 -61
  258. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  259. package/dist/runtime/theme/scroll-area.js +0 -33
  260. package/dist/runtime/theme/select.d.ts +0 -186
  261. package/dist/runtime/theme/select.js +0 -173
  262. package/dist/runtime/theme/separator.d.ts +0 -74
  263. package/dist/runtime/theme/separator.js +0 -53
  264. package/dist/runtime/theme/skeleton.d.ts +0 -2
  265. package/dist/runtime/theme/skeleton.js +0 -7
  266. package/dist/runtime/theme/slider.d.ts +0 -70
  267. package/dist/runtime/theme/slider.js +0 -52
  268. package/dist/runtime/theme/switch.d.ts +0 -116
  269. package/dist/runtime/theme/switch.js +0 -78
  270. package/dist/runtime/theme/table.d.ts +0 -86
  271. package/dist/runtime/theme/table.js +0 -36
  272. package/dist/runtime/theme/tabs.d.ts +0 -129
  273. package/dist/runtime/theme/tabs.js +0 -146
  274. package/dist/runtime/theme/textarea.d.ts +0 -90
  275. package/dist/runtime/theme/textarea.js +0 -116
  276. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  277. package/dist/runtime/theme/toast-provider.js +0 -97
  278. package/dist/runtime/theme/toast.d.ts +0 -83
  279. package/dist/runtime/theme/toast.js +0 -35
  280. package/dist/runtime/theme/tooltip.d.ts +0 -38
  281. package/dist/runtime/theme/tooltip.js +0 -11
  282. package/dist/runtime/types/components.d.ts +0 -42
  283. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  284. package/dist/runtime/utils/extend-theme.js +0 -27
  285. package/dist/runtime/utils/styler.d.ts +0 -4
  286. package/dist/runtime/utils/styler.js +0 -10
  287. package/dist/runtime/utils/translator.d.ts +0 -18
  288. package/dist/runtime/utils/translator.js +0 -8
  289. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  290. package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
  291. package/dist/unocss.d.ts +0 -52
  292. package/dist/unocss.mjs.map +0 -1
  293. package/dist/unplugin.d.ts +0 -26
  294. package/dist/unplugin.mjs.map +0 -1
  295. package/dist/vite.d.ts +0 -9
  296. package/dist/vite.mjs.map +0 -1
  297. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -0,0 +1,131 @@
1
+ <script>
2
+ import theme from "#build/ui/checkbox-group";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { CheckboxGroupRoot, useForwardProps, useForwardPropsEmits } from "reka-ui";
8
+ import { computed, useId } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFormField } from "../composables/useFormField";
11
+ import { get, omit } from "../utils";
12
+ import { cv, merge } from "../utils/style";
13
+ import Checkbox from "./Checkbox.vue";
14
+ const props = defineProps({
15
+ as: { type: null, required: false },
16
+ legend: { type: String, required: false },
17
+ valueKey: { type: null, required: false, default: "value" },
18
+ labelKey: { type: null, required: false, default: "label" },
19
+ descriptionKey: { type: null, required: false, default: "description" },
20
+ items: { type: null, required: false },
21
+ modelValue: { type: null, required: false },
22
+ defaultValue: { type: null, required: false },
23
+ size: { type: null, required: false },
24
+ variant: { type: null, required: false },
25
+ orientation: { type: null, required: false, default: "vertical" },
26
+ ui: { type: null, required: false },
27
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
28
+ disabled: { type: Boolean, required: false },
29
+ loop: { type: Boolean, required: false },
30
+ name: { type: String, required: false },
31
+ required: { type: Boolean, required: false },
32
+ color: { type: null, required: false },
33
+ indicator: { type: null, required: false },
34
+ icon: { type: [String, Object], required: false }
35
+ });
36
+ const emit = defineEmits(["update:modelValue", "change"]);
37
+ const slots = defineSlots();
38
+ const rootProps = useForwardPropsEmits(reactivePick(props, "as", "modelValue", "defaultValue", "orientation", "loop", "required"), emit);
39
+ const checkboxProps = useForwardProps(reactivePick(props, "indicator", "icon"));
40
+ const getProxySlots = () => omit(slots, ["legend"]);
41
+ const { id: _id, name, color, size, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormField(props, { bind: false });
42
+ const id = _id.value ?? useId();
43
+ function normalizeItem(item) {
44
+ const itemBase = {
45
+ disabled: disabled.value,
46
+ label: void 0,
47
+ description: void 0,
48
+ value: void 0,
49
+ ui: void 0,
50
+ class: void 0
51
+ };
52
+ if (typeof item === "object" && item === null) {
53
+ return {
54
+ ...itemBase,
55
+ id: `${id}:null`,
56
+ value: null
57
+ };
58
+ }
59
+ if (typeof item === "boolean" || typeof item === "string" || typeof item === "number" || typeof item === "bigint") {
60
+ return {
61
+ ...itemBase,
62
+ id: `${id}:${item}`,
63
+ label: String(item),
64
+ value: item
65
+ };
66
+ }
67
+ const value = get(item, props.valueKey);
68
+ const label = get(item, props.labelKey);
69
+ const description = get(item, props.descriptionKey);
70
+ return {
71
+ ...itemBase,
72
+ ...item,
73
+ value,
74
+ label,
75
+ description,
76
+ id: `${id}:${value}`
77
+ };
78
+ }
79
+ const normalizedItems = computed(() => {
80
+ if (!props.items)
81
+ return [];
82
+ return props.items.map(normalizeItem);
83
+ });
84
+ function onUpdate(value) {
85
+ const event = new Event("change", { target: { value } });
86
+ emit("change", event);
87
+ emitFormChange();
88
+ emitFormInput();
89
+ }
90
+ const appConfig = useAppConfig();
91
+ const ui = computed(() => {
92
+ const styler = cv(merge(theme, appConfig.ui.checkboxGroup));
93
+ return styler({
94
+ ...props,
95
+ size: size.value,
96
+ color: color.value
97
+ });
98
+ });
99
+ </script>
100
+
101
+ <template>
102
+ <CheckboxGroupRoot
103
+ v-bind="{ ...rootProps, id, name, disabled }"
104
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
105
+ data-part="root"
106
+ @update:model-value="onUpdate"
107
+ >
108
+ <fieldset v-bind="ariaAttrs" :class="ui.fieldset({ class: props.ui?.fieldset })" data-part="fieldset">
109
+ <legend v-if="props.legend || !!slots.legend" :class="ui.legend({ class: props.ui?.legend })" data-part="legend">
110
+ <slot name="legend">
111
+ {{ props.legend }}
112
+ </slot>
113
+ </legend>
114
+
115
+ <Checkbox
116
+ v-for="item in normalizedItems"
117
+ :key="item.id"
118
+ v-bind="{ ...item, ...checkboxProps, color, size, name }"
119
+ :variant="props.variant"
120
+ :disabled="item.disabled || disabled"
121
+ :ui="{ ...props.ui ? omit(props.ui, ['root']) : void 0, ...item.ui || {} }"
122
+ :class="ui.item({ disabled: item.disabled || disabled, class: [props.ui?.item, item.ui?.item, item.class] })"
123
+ data-part="item"
124
+ >
125
+ <template v-for="(_, name) in getProxySlots()" #[name]>
126
+ <slot :name="name" :item="item"></slot>
127
+ </template>
128
+ </Checkbox>
129
+ </fieldset>
130
+ </CheckboxGroupRoot>
131
+ </template>
@@ -0,0 +1,89 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { CheckboxGroupRootEmits, CheckboxGroupRootProps, CheckboxRootProps } from 'reka-ui';
3
+ import theme from '#build/ui/checkbox-group';
4
+ import type { CheckboxProps, ComponentBaseProps, ComponentUIProps } from '../types';
5
+ import type { AcceptableValue, GetItemKeys, GetModelValue, StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export type CheckboxGroupValue = AcceptableValue;
8
+ interface CheckboxGroupItemBase {
9
+ label?: string;
10
+ description?: string;
11
+ disabled?: boolean;
12
+ value?: AcceptableValue;
13
+ class?: ComponentBaseProps['class'];
14
+ ui?: Pick<ComponentUIProps<typeof theme>, 'item'> & Omit<Required<CheckboxProps>['ui'], 'root'>;
15
+ }
16
+ export type CheckboxGroupItem = CheckboxGroupValue | (CheckboxGroupItemBase & {
17
+ [key: string]: any;
18
+ });
19
+ export interface CheckboxGroupProps<T extends CheckboxGroupItem[] = CheckboxGroupItem[], VK extends GetItemKeys<T> = 'value'> extends ComponentBaseProps, Pick<CheckboxGroupRootProps, 'disabled' | 'loop' | 'name' | 'required'>, Pick<CheckboxProps, 'color' | 'indicator' | 'icon'> {
20
+ /**
21
+ * The element or component this component should render as.
22
+ * @default "div"
23
+ */
24
+ as?: CheckboxRootProps['as'];
25
+ legend?: string;
26
+ /**
27
+ * When `items` is an array of objects, select the field to use as the value.
28
+ * @default "value"
29
+ */
30
+ valueKey?: VK;
31
+ /**
32
+ * When `items` is an array of objects, select the field to use as the label.
33
+ * @default "label"
34
+ */
35
+ labelKey?: GetItemKeys<T>;
36
+ /**
37
+ * When `items` is an array of objects, select the field to use as the description.
38
+ * @default "description"
39
+ */
40
+ descriptionKey?: GetItemKeys<T>;
41
+ items?: T;
42
+ /** The controlled value of the CheckboxGroup. Can be bind as `v-model`. */
43
+ modelValue?: GetModelValue<T, VK, true>;
44
+ /** The value of the CheckboxGroup when initially rendered. Use when you do not need to control the state of the CheckboxGroup. */
45
+ defaultValue?: GetModelValue<T, VK, true>;
46
+ /** @default "md" */
47
+ size?: ThemeVariants['size'];
48
+ /** @default "list" */
49
+ variant?: ThemeVariants['variant'];
50
+ /**
51
+ * The orientation the checkbox buttons are laid out.
52
+ * @default "vertical"
53
+ */
54
+ orientation?: ThemeVariants['orientation'];
55
+ ui?: ComponentUIProps<typeof theme>;
56
+ }
57
+ export type CheckboxGroupEmits<T extends CheckboxGroupItem[] = CheckboxGroupItem[]> = CheckboxGroupRootEmits<T[number]> & {
58
+ change: [event: Event];
59
+ };
60
+ export interface CheckboxGroupSlots<T extends CheckboxGroupItem[] = CheckboxGroupItem[]> {
61
+ legend: StaticSlot;
62
+ label: StaticSlot<{
63
+ item: T[number] & {
64
+ id: string;
65
+ };
66
+ }>;
67
+ description: StaticSlot<{
68
+ item: T[number] & {
69
+ id: string;
70
+ };
71
+ }>;
72
+ }
73
+ declare const __VLS_export: <T extends CheckboxGroupItem[], VK extends GetItemKeys<T> = "value">(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
74
+ props: __VLS_PrettifyLocal<CheckboxGroupProps<T, VK> & {
75
+ onChange?: ((event: Event) => any) | undefined;
76
+ "onUpdate:modelValue"?: ((value: T[number][]) => any) | undefined;
77
+ }> & import("vue").PublicProps;
78
+ expose: (exposed: {}) => void;
79
+ attrs: any;
80
+ slots: CheckboxGroupSlots<CheckboxGroupItem[]>;
81
+ emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: T[number][]) => void);
82
+ }>) => import("vue").VNode & {
83
+ __ctx?: Awaited<typeof __VLS_setup>;
84
+ };
85
+ declare const _default: typeof __VLS_export;
86
+ export default _default;
87
+ type __VLS_PrettifyLocal<T> = {
88
+ [K in keyof T as K]: T[K];
89
+ } & {};
@@ -1,49 +1,52 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/chip";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { Primitive } from "reka-ui";
6
+ import { useVModel } from "@vueuse/core";
7
+ import { Primitive, Slot } from "reka-ui";
7
8
  import { computed } from "vue";
8
- import { useButtonGroup } from "../composables/useButtonGroup";
9
- import { useComponentIcons } from "../composables/useComponentIcons";
10
- import { useTheme } from "../composables/useTheme";
9
+ import { useAppConfig } from "#imports";
10
+ import { useAvatarGroup } from "../composables/useAvatarGroup";
11
+ import { cv, merge } from "../utils/style";
12
+ defineOptions({ inheritAttrs: false });
11
13
  const props = defineProps({
12
14
  as: { type: null, required: false },
13
- variant: { type: null, required: false, default: "solid" },
15
+ text: { type: [String, Number], required: false },
14
16
  size: { type: null, required: false },
15
- label: { type: String, required: false },
16
- class: { type: null, required: false },
17
+ color: { type: null, required: false },
18
+ position: { type: null, required: false },
19
+ show: { type: Boolean, required: false, default: true },
20
+ inset: { type: Boolean, required: false },
21
+ standalone: { type: Boolean, required: false },
17
22
  ui: { type: null, required: false },
18
- icon: { type: String, required: false },
19
- leading: { type: Boolean, required: false },
20
- leadingIcon: { type: String, required: false },
21
- trailing: { type: Boolean, required: false },
22
- trailingIcon: { type: String, required: false }
23
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
24
+ });
25
+ const emit = defineEmits(["update:show"]);
26
+ defineSlots();
27
+ const show = useVModel(props, "show", emit);
28
+ const { size } = useAvatarGroup(props);
29
+ const appConfig = useAppConfig();
30
+ const ui = computed(() => {
31
+ const styler = cv(merge(theme, appConfig.ui.chip));
32
+ return styler({ ...props, size: size.value });
23
33
  });
24
- const slots = defineSlots();
25
- const { size, orientation } = useButtonGroup(props);
26
- const { isLeading, leadingIconName, isTrailing, trailingIconName } = useComponentIcons(props);
27
- const { generateStyle } = useTheme();
28
- const style = computed(() => generateStyle("chip", {
29
- ...props,
30
- size: size.value,
31
- groupOrientation: orientation.value
32
- }));
33
34
  </script>
34
35
 
35
36
  <template>
36
- <Primitive :as="props.as" :class="style.base({ class: [props.class, props.ui?.base] })" data-part="base">
37
- <slot name="leading">
38
- <span v-if="isLeading && leadingIconName" :class="style.leadingIcon({ class: [leadingIconName, props.ui?.leadingIcon] })" data-part="leading-icon"></span>
39
- </slot>
37
+ <Primitive
38
+ :as="props.as"
39
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
40
+ data-part="root"
41
+ >
42
+ <Slot v-bind="$attrs">
43
+ <slot></slot>
44
+ </Slot>
40
45
 
41
- <span v-if="props.label || slots.default" :class="style.label({ class: props.ui?.label })" data-part="label">
42
- <slot>{{ props.label }}</slot>
46
+ <span v-if="show" :class="ui.base({ class: props.ui?.base })" data-part="base">
47
+ <slot name="content">
48
+ {{ props.text }}
49
+ </slot>
43
50
  </span>
44
-
45
- <slot name="trailing">
46
- <span v-if="isTrailing && trailingIconName" :class="style.trailingIcon({ class: [trailingIconName, props.ui?.trailingIcon] })" data-part="trailing-icon"></span>
47
- </slot>
48
51
  </Primitive>
49
52
  </template>
@@ -1,27 +1,45 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { PrimitiveProps } from 'reka-ui';
3
- import type { UseComponentIconsProps } from '../composables/useComponentIcons.js';
4
- import type { chip } from '../theme/index.js';
5
- import type { ComponentAttrs } from '../types/index.js';
6
- export interface ChipSlots {
7
- leading?: (props?: {}) => any;
8
- default?: (props?: {}) => any;
9
- trailing?: (props?: {}) => any;
10
- }
11
- type ChipVariants = VariantProps<typeof chip>;
12
- export interface ChipProps extends ComponentAttrs<typeof chip>, Omit<UseComponentIconsProps, 'loading' | 'loadingIcon'> {
3
+ import theme from '#build/ui/chip';
4
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface ChipProps extends ComponentBaseProps {
13
8
  /**
14
9
  * The element or component this component should render as.
15
10
  * @default "div"
16
11
  */
17
12
  as?: PrimitiveProps['as'];
18
- variant?: ChipVariants['variant'];
19
- size?: ChipVariants['size'];
20
- label?: string;
13
+ /** Display some text inside the chip. */
14
+ text?: string | number;
15
+ /** @default "md" */
16
+ size?: ThemeVariants['size'];
17
+ /** @default "primary" */
18
+ color?: ThemeVariants['color'];
19
+ /** @default "top-right" */
20
+ position?: ThemeVariants['position'];
21
+ show?: boolean;
22
+ /** When `true`, keep the chip inside the component for rounded elements. */
23
+ inset?: boolean;
24
+ /** When `true`, render the chip relatively to the parent. */
25
+ standalone?: boolean;
26
+ ui?: ComponentUIProps<typeof theme>;
27
+ }
28
+ export interface ChipEmits {
29
+ 'update:show': [show: boolean];
30
+ }
31
+ export interface ChipSlots {
32
+ default: StaticSlot;
33
+ content: StaticSlot;
21
34
  }
22
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{}>, {
23
- variant: "solid" | "outline" | "soft" | "soft-outline";
35
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
36
+ "update:show": (show: boolean) => any;
37
+ }, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{
38
+ "onUpdate:show"?: ((show: boolean) => any) | undefined;
39
+ }>, {
40
+ show: boolean;
24
41
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ChipSlots>;
42
+ declare const _default: typeof __VLS_export;
25
43
  export default _default;
26
44
  type __VLS_WithSlots<T, S> = T & {
27
45
  new (): {
@@ -1,16 +1,17 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/collapsible";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
7
  import { CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, useForwardPropsEmits } from "reka-ui";
8
8
  import { computed } from "vue";
9
- import { useTheme } from "../composables/useTheme";
9
+ import { useAppConfig } from "#imports";
10
+ import { cv, merge } from "../utils/style";
10
11
  const props = defineProps({
11
- class: { type: null, required: false },
12
- ui: { type: null, required: false },
13
12
  as: { type: null, required: false },
13
+ ui: { type: null, required: false },
14
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
14
15
  defaultOpen: { type: Boolean, required: false },
15
16
  open: { type: Boolean, required: false },
16
17
  disabled: { type: Boolean, required: false },
@@ -19,22 +20,25 @@ const props = defineProps({
19
20
  const emit = defineEmits(["update:open"]);
20
21
  const slots = defineSlots();
21
22
  const rootProps = useForwardPropsEmits(reactivePick(props, "as", "defaultOpen", "open", "disabled", "unmountOnHide"), emit);
22
- const { generateStyle } = useTheme();
23
- const style = computed(() => generateStyle("collapsible", props));
23
+ const appConfig = useAppConfig();
24
+ const ui = computed(() => {
25
+ const styler = cv(merge(theme, appConfig.ui.collapsible));
26
+ return styler(props);
27
+ });
24
28
  </script>
25
29
 
26
30
  <template>
27
31
  <CollapsibleRoot
28
32
  v-slot="{ open }"
29
33
  v-bind="rootProps"
30
- :class="style.root({ class: [props.class, props.ui?.root] })"
34
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
31
35
  data-part="root"
32
36
  >
33
- <CollapsibleTrigger v-if="slots.default" as-child>
37
+ <CollapsibleTrigger v-if="!!slots.default" as-child>
34
38
  <slot :open="open"></slot>
35
39
  </CollapsibleTrigger>
36
40
 
37
- <CollapsibleContent :class="style.content({ class: props.ui?.content })" data-part="content">
41
+ <CollapsibleContent :class="ui.content({ class: props.ui?.content })" data-part="content">
38
42
  <slot name="content"></slot>
39
43
  </CollapsibleContent>
40
44
  </CollapsibleRoot>
@@ -1,23 +1,31 @@
1
1
  import type { CollapsibleRootEmits, CollapsibleRootProps } from 'reka-ui';
2
- import type { collapsible } from '../theme/index.js';
3
- import type { ComponentAttrs } from '../types/index.js';
2
+ import theme from '#build/ui/collapsible';
3
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
4
+ import type { StaticSlot } from '../types/utils';
5
+ export interface CollapsibleProps extends ComponentBaseProps, Pick<CollapsibleRootProps, 'defaultOpen' | 'open' | 'disabled' | 'unmountOnHide'> {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @default "div"
9
+ */
10
+ as?: CollapsibleRootProps['as'];
11
+ ui?: ComponentUIProps<typeof theme>;
12
+ }
4
13
  export interface CollapsibleEmits extends CollapsibleRootEmits {
5
14
  }
6
15
  export interface CollapsibleSlots {
7
- default?: (props: {
16
+ default: StaticSlot<{
8
17
  open: boolean;
9
- }) => any;
10
- content?: (props?: {}) => any;
11
- }
12
- export interface CollapsibleProps extends ComponentAttrs<typeof collapsible>, Pick<CollapsibleRootProps, 'as' | 'defaultOpen' | 'open' | 'disabled' | 'unmountOnHide'> {
18
+ }>;
19
+ content: StaticSlot;
13
20
  }
14
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<CollapsibleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
21
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<CollapsibleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
22
  "update:open": (value: boolean) => any;
16
23
  }, string, import("vue").PublicProps, Readonly<CollapsibleProps> & Readonly<{
17
24
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
18
25
  }>, {
19
26
  unmountOnHide: boolean;
20
27
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, CollapsibleSlots>;
28
+ declare const _default: typeof __VLS_export;
21
29
  export default _default;
22
30
  type __VLS_WithSlots<T, S> = T & {
23
31
  new (): {