@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
@@ -1,75 +1,91 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/radio-group";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
- import { Label, RadioGroupIndicator, RadioGroupItem, RadioGroupRoot, useForwardPropsEmits } from "reka-ui";
7
+ import { Label, RadioGroupIndicator, RadioGroupItem as RekaRadioGroupItem, RadioGroupRoot, useForwardPropsEmits } from "reka-ui";
8
8
  import { computed, useId } from "vue";
9
- import { useFormItem } from "../composables/useFormItem";
10
- import { useTheme } from "../composables/useTheme";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFormField } from "../composables/useFormField";
11
11
  import { get } from "../utils";
12
+ import { cv, merge } from "../utils/style";
12
13
  const props = defineProps({
13
14
  as: { type: null, required: false },
14
- legend: { type: String, required: false },
15
- valueKey: { type: String, required: false, default: "value" },
16
- labelKey: { type: String, required: false, default: "label" },
17
- descriptionKey: { type: String, required: false, default: "description" },
18
- options: { type: Array, required: false },
15
+ variant: { type: null, required: false },
19
16
  size: { type: null, required: false },
17
+ color: { type: null, required: false },
18
+ indicator: { type: null, required: false },
19
+ legend: { type: String, required: false },
20
+ valueKey: { type: null, required: false, default: "value" },
21
+ labelKey: { type: null, required: false, default: "label" },
22
+ descriptionKey: { type: null, required: false, default: "description" },
23
+ items: { type: null, required: false },
24
+ modelValue: { type: null, required: false },
25
+ defaultValue: { type: null, required: false },
20
26
  orientation: { type: null, required: false, default: "vertical" },
21
- class: { type: null, required: false },
22
27
  ui: { type: null, required: false },
23
- defaultValue: { type: null, required: false },
28
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
24
29
  disabled: { type: Boolean, required: false },
25
30
  loop: { type: Boolean, required: false },
26
- modelValue: { type: null, required: false },
27
31
  name: { type: String, required: false },
28
32
  required: { type: Boolean, required: false }
29
33
  });
30
- const emit = defineEmits(["update:modelValue", "change"]);
34
+ const emit = defineEmits(["change", "update:modelValue"]);
31
35
  const slots = defineSlots();
32
- const rootProps = useForwardPropsEmits(reactivePick(props, "as", "modelValue", "defaultValue", "orientation", "loop", "required"), emit);
33
- const { id: _id, name, size, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormItem(props);
36
+ const rootProps = useForwardPropsEmits(reactivePick(props, "as", "loop", "required"), emit);
37
+ const { id: _id, name, color, size, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormField(props, { bind: false });
34
38
  const id = _id.value ?? useId();
35
- const { generateStyle } = useTheme();
36
- const style = computed(() => generateStyle("radioGroup", {
37
- ...props,
38
- size: size.value,
39
- disabled: disabled.value
40
- }));
39
+ const appConfig = useAppConfig();
40
+ const ui = computed(() => {
41
+ const styler = cv(merge(theme, appConfig.ui.radioGroup));
42
+ return styler({
43
+ ...props,
44
+ color: color.value,
45
+ size: size.value,
46
+ disabled: disabled.value
47
+ });
48
+ });
41
49
  function normalizeItem(item) {
42
- if (item === null) {
50
+ const itemBase = {
51
+ disabled: disabled.value,
52
+ label: void 0,
53
+ description: void 0,
54
+ value: void 0,
55
+ ui: void 0,
56
+ class: void 0
57
+ };
58
+ if (typeof item === "object" && item === null) {
43
59
  return {
60
+ ...itemBase,
44
61
  id: `${id}:null`,
45
- label: void 0,
46
- value: void 0
62
+ value: null
47
63
  };
48
64
  }
49
- if (typeof item === "string" || typeof item === "number") {
65
+ if (typeof item === "boolean" || typeof item === "string" || typeof item === "number" || typeof item === "bigint") {
50
66
  return {
67
+ ...itemBase,
51
68
  id: `${id}:${item}`,
52
69
  label: String(item),
53
- value: item,
54
- disabled: disabled.value
70
+ value: item
55
71
  };
56
72
  }
57
73
  const value = get(item, props.valueKey);
58
74
  const label = get(item, props.labelKey);
59
75
  const description = get(item, props.descriptionKey);
60
76
  return {
77
+ ...itemBase,
61
78
  ...item,
62
79
  id: `${id}:${value}`,
63
80
  label,
64
81
  value,
65
- description,
66
- disabled: disabled.value || item.disabled
82
+ description
67
83
  };
68
84
  }
69
85
  const normalizedItems = computed(() => {
70
- if (!props.options)
86
+ if (!props.items)
71
87
  return [];
72
- return props.options.map(normalizeItem);
88
+ return props.items.map(normalizeItem);
73
89
  });
74
90
  function onUpdate(value) {
75
91
  const event = new Event("change", { target: { value } });
@@ -81,42 +97,53 @@ function onUpdate(value) {
81
97
 
82
98
  <template>
83
99
  <RadioGroupRoot
84
- v-slot="{ modelValue }"
85
- v-bind="{ ...rootProps, id, name, disabled }"
86
- :class="style.root({ class: [props.class, props.ui?.root] })"
100
+ v-bind="{ id, ...rootProps, name, disabled }"
101
+ :model-value="props.modelValue"
102
+ :default-value="props.defaultValue"
103
+ :orientation="props.orientation"
104
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
87
105
  data-part="root"
88
106
  @update:model-value="onUpdate"
89
107
  >
90
- <fieldset v-bind="ariaAttrs" :class="style.fieldset({ class: props.ui?.fieldset })" data-part="fieldset">
91
- <legend v-if="props.legend || slots.legend" :class="style.legend({ class: props.ui?.legend })" data-part="legend">
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">
92
110
  <slot name="legend">
93
111
  {{ props.legend }}
94
112
  </slot>
95
113
  </legend>
96
- <div v-for="item in normalizedItems" :key="item.value" :class="style.item({ class: props.ui?.item, disabled: item.disabled })" data-part="item">
97
- <div :class="style.container({ class: props.ui?.container })" data-part="container">
98
- <RadioGroupItem
114
+ <component
115
+ :is="!props.variant || props.variant === 'list' ? 'div' : Label"
116
+ v-for="item in normalizedItems"
117
+ :key="item.value"
118
+ :class="ui.item({ class: [props.ui?.item, item.ui?.item, item.class], disabled: item.disabled })"
119
+ data-part="item"
120
+ >
121
+ <div :class="ui.container({ class: [props.ui?.container, item.ui?.container], disabled: item.disabled })" data-part="container">
122
+ <RekaRadioGroupItem
99
123
  :id="item.id"
100
124
  :value="item.value"
101
125
  :disabled="item.disabled"
102
- :class="style.base({ class: props.ui?.base })"
126
+ :class="ui.base({ class: [props.ui?.base, item.ui?.base], disabled: item.disabled, indicator: props.indicator })"
103
127
  data-part="base"
128
+ :data-indicator="props.indicator"
104
129
  >
105
- <RadioGroupIndicator :class="style.indicator({ class: props.ui?.indicator })" data-part="indicator" force-mount />
106
- </RadioGroupItem>
130
+ <RadioGroupIndicator :class="ui.indicator({ class: [props.ui?.indicator, item.ui?.indicator], disabled: item.disabled })" data-part="indicator" force-mount />
131
+ </RekaRadioGroupItem>
107
132
  </div>
108
133
 
109
- <div :class="style.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
110
- <Label :for="item.id" :class="style.label({ class: props.ui?.label })" data-part="label">
111
- <slot name="label" :item="item" :model-value="modelValue">{{ item.label }}</slot>
112
- </Label>
113
- <p v-if="item.description || slots.description" :class="style.description({ class: props.ui?.description })" data-part="description">
134
+ <div v-if="item.label || !!slots.label || (item.description || !!slots.description)" :class="ui.wrapper({ class: [props.ui?.wrapper, item.ui?.wrapper], disabled: item.disabled })" data-part="wrapper">
135
+ <component :is="!props.variant || props.variant === 'list' ? Label : 'p'" :for="item.id" :class="ui.label({ class: [props.ui?.label, item.ui?.label], disabled: item.disabled })" data-part="label">
136
+ <slot name="label" :item="item" :model-value="modelValue">
137
+ {{ item.label }}
138
+ </slot>
139
+ </component>
140
+ <p v-if="item.description || !!slots.description" :class="ui.description({ class: [props.ui?.description, item.ui?.description], disabled: item.disabled })" data-part="description">
114
141
  <slot name="description" :item="item" :model-value="modelValue">
115
142
  {{ item.description }}
116
143
  </slot>
117
144
  </p>
118
145
  </div>
119
- </div>
146
+ </component>
120
147
  </fieldset>
121
148
  </RadioGroupRoot>
122
149
  </template>
@@ -1,74 +1,96 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
- import type { PrimitiveProps, RadioGroupRootProps } from 'reka-ui';
3
- import type { radioGroup } from '../theme/index.js';
4
- import type { AcceptableValue, ComponentAttrs } from '../types/index.js';
5
- export interface RadioGroupEmits {
6
- 'update:modelValue': [payload: string];
7
- 'change': [payload: Event];
8
- }
2
+ import type { RadioGroupRootEmits, RadioGroupRootProps } from 'reka-ui';
3
+ import theme from '#build/ui/radio-group';
4
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
5
+ import type { AcceptableValue, GetItemKeys, GetModelValue, GetModelValueEmits, MaybeNull, NestedItem, StaticSlot } from '../types/utils';
9
6
  export type RadioGroupValue = AcceptableValue;
10
- export type RadioGroupItem = {
7
+ interface RadioGroupItemBase {
11
8
  label?: string;
12
9
  description?: string;
13
10
  disabled?: boolean;
14
11
  value?: RadioGroupValue;
15
- [key: string]: any;
16
- } | RadioGroupValue;
17
- type SlotProps<T extends RadioGroupItem> = (props: {
18
- item: T & {
19
- id: string;
20
- };
21
- modelValue?: RadioGroupValue;
22
- }) => any;
23
- export interface RadioGroupSlots<T extends RadioGroupItem = RadioGroupItem> {
24
- legend?: any;
25
- label?: SlotProps<T>;
26
- description?: SlotProps<T>;
12
+ class?: ComponentBaseProps['class'];
13
+ ui?: Pick<ComponentUIProps<typeof theme>, 'item' | 'container' | 'base' | 'indicator' | 'wrapper' | 'label' | 'description'>;
27
14
  }
28
- type RadioGroupVariants = VariantProps<typeof radioGroup>;
29
- export interface RadioGroupProps<T extends RadioGroupItem = RadioGroupItem> extends ComponentAttrs<typeof radioGroup>, Pick<RadioGroupRootProps, 'defaultValue' | 'disabled' | 'loop' | 'modelValue' | 'name' | 'required'> {
15
+ export type RadioGroupItem = RadioGroupValue | (RadioGroupItemBase & {
16
+ [key: string]: any;
17
+ });
18
+ type NormalizeItem<T extends RadioGroupItem> = Exclude<T & {
19
+ id: string;
20
+ ui?: Pick<ComponentUIProps<typeof theme>, 'item' | 'container' | 'base' | 'indicator' | 'wrapper' | 'label' | 'description'>;
21
+ }, RadioGroupValue>;
22
+ type ThemeVariants = VariantProps<typeof theme>;
23
+ export interface RadioGroupProps<T extends RadioGroupItem[] = RadioGroupItem[], VK extends GetItemKeys<T> = 'value'> extends ComponentBaseProps, Pick<RadioGroupRootProps, 'disabled' | 'loop' | 'name' | 'required'> {
30
24
  /**
31
25
  * The element or component this component should render as.
32
26
  * @default "div"
33
27
  */
34
- as?: PrimitiveProps['as'];
28
+ as?: RadioGroupRootProps['as'];
29
+ /** @default "list" */
30
+ variant?: ThemeVariants['variant'];
31
+ /** @default "md" */
32
+ size?: ThemeVariants['size'];
33
+ /** @default "primary" */
34
+ color?: ThemeVariants['color'];
35
+ /**
36
+ * Position of the indicator.
37
+ * @default "start"
38
+ */
39
+ indicator?: ThemeVariants['indicator'];
35
40
  legend?: string;
36
41
  /**
37
42
  * When `options` is an array of objects, select the field to use as the value.
38
43
  * @default "value"
39
44
  */
40
- valueKey?: string;
45
+ valueKey?: VK;
41
46
  /**
42
47
  * When `options` is an array of objects, select the field to use as the label.
43
48
  * @default "label"
44
49
  */
45
- labelKey?: string;
50
+ labelKey?: GetItemKeys<T>;
46
51
  /**
47
52
  * When `options` is an array of objects, select the field to use as the description.
48
53
  * @default "description"
49
54
  */
50
- descriptionKey?: string;
51
- options?: T[];
52
- size?: RadioGroupVariants['size'];
55
+ descriptionKey?: GetItemKeys<T>;
56
+ items?: T;
57
+ /** The controlled value of the RadioGroup. Can be bind as `v-model`. */
58
+ modelValue?: MaybeNull<GetModelValue<T, VK, false>>;
59
+ /** The value of the RadioGroup when initially rendered. Use when you do not need to control the state of the RadioGroup. */
60
+ defaultValue?: MaybeNull<GetModelValue<T, VK, false>>;
53
61
  /**
54
62
  * The orientation the radio buttons are laid out.
55
63
  * @default "vertical"
56
64
  */
57
65
  orientation?: RadioGroupRootProps['orientation'];
66
+ ui?: ComponentUIProps<typeof theme>;
67
+ }
68
+ export type RadioGroupEmits<T extends RadioGroupItem[] = RadioGroupItem[], VK extends GetItemKeys<T> = 'value'> = Omit<RadioGroupRootEmits, 'update:modelValue'> & {
69
+ change: [event: Event];
70
+ } & GetModelValueEmits<T, VK, false>;
71
+ type SlotProps<T extends RadioGroupItem[]> = StaticSlot<{
72
+ item: NormalizeItem<NestedItem<T>>;
73
+ modelValue?: RadioGroupValue;
74
+ }>;
75
+ export interface RadioGroupSlots<T extends RadioGroupItem[] = RadioGroupItem[]> {
76
+ legend: StaticSlot;
77
+ label: SlotProps<T>;
78
+ description: SlotProps<T>;
58
79
  }
59
- declare const _default: <T extends RadioGroupItem>(__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<{
60
- props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
61
- readonly onChange?: ((payload: Event) => any) | undefined;
62
- readonly "onUpdate:modelValue"?: ((payload: string) => any) | undefined;
63
- } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onChange" | "onUpdate:modelValue"> & RadioGroupProps<T> & Partial<{}>> & import("vue").PublicProps;
64
- expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
80
+ declare const __VLS_export: <T extends RadioGroupItem[], 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<{
81
+ props: __VLS_PrettifyLocal<RadioGroupProps<T, VK> & {
82
+ onChange?: ((event: Event) => any) | undefined;
83
+ "onUpdate:modelValue"?: ((value: import("../types").GetItemValue<T, VK, NestedItem<T>>) => any) | undefined;
84
+ }> & import("vue").PublicProps;
85
+ expose: (exposed: {}) => void;
65
86
  attrs: any;
66
87
  slots: RadioGroupSlots<T>;
67
- emit: ((evt: "change", payload: Event) => void) & ((evt: "update:modelValue", payload: string) => void);
88
+ emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: import("../types").GetItemValue<T, VK, NestedItem<T>>) => void);
68
89
  }>) => import("vue").VNode & {
69
90
  __ctx?: Awaited<typeof __VLS_setup>;
70
91
  };
92
+ declare const _default: typeof __VLS_export;
71
93
  export default _default;
72
94
  type __VLS_PrettifyLocal<T> = {
73
- [K in keyof T]: T[K];
95
+ [K in keyof T as K]: T[K];
74
96
  } & {};
@@ -1,23 +1,27 @@
1
1
  <script>
2
- import { transitionProps } from "../theme/scroll-area";
2
+ import theme from "#build/ui/scroll-area";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
7
  import { ScrollAreaCorner, ScrollAreaRoot, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaViewport } from "reka-ui";
8
8
  import { computed, ref } 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
12
  ui: { type: null, required: false },
13
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
13
14
  type: { type: String, required: false },
14
15
  dir: { type: String, required: false },
15
- scrollHideDelay: { type: Number, required: false }
16
+ scrollHideDelay: { type: Number, required: false, default: 150 }
16
17
  });
17
18
  const rootRef = ref();
18
19
  const rootProps = reactivePick(props, "type", "dir", "scrollHideDelay");
19
- const { generateStyle } = useTheme();
20
- const style = computed(() => generateStyle("scrollArea", props));
20
+ const appConfig = useAppConfig();
21
+ const ui = computed(() => {
22
+ const styler = cv(merge(theme, appConfig.ui.scrollArea));
23
+ return styler(props);
24
+ });
21
25
  defineExpose({
22
26
  scrollTop,
23
27
  scrollTopLeft
@@ -34,35 +38,33 @@ function scrollTopLeft() {
34
38
  <ScrollAreaRoot
35
39
  ref="rootRef"
36
40
  v-bind="rootProps"
37
- :class="style.root({ class: [props.class, props.ui?.root] })"
41
+ :class="ui.root({ class: [props.class, props.ui?.root] })"
38
42
  data-part="root"
39
43
  >
40
- <ScrollAreaViewport :class="style.viewport({ class: props.ui?.viewport })" data-part="viewport">
44
+ <ScrollAreaViewport :class="ui.viewport({ class: props.ui?.viewport })" data-part="viewport">
41
45
  <slot></slot>
42
46
  </ScrollAreaViewport>
43
47
 
44
- <TransitionGroup v-bind="transitionProps">
45
- <ScrollAreaScrollbar
46
- key="scrollbar-horizontal"
47
- orientation="horizontal"
48
- :class="style.scrollbar({ class: props.ui?.scrollbar })"
49
- data-part="scrollbar"
50
- >
51
- <ScrollAreaThumb :class="style.thumb({ class: props.ui?.thumb })" data-part="thumb" />
52
- </ScrollAreaScrollbar>
53
- <ScrollAreaScrollbar
54
- key="scrollbar-vertical"
55
- orientation="vertical"
56
- :class="style.scrollbar({ class: props.ui?.scrollbar })"
57
- data-part="scrollbar"
58
- >
59
- <ScrollAreaThumb :class="style.thumb({ class: props.ui?.thumb })" data-part="thumb" />
60
- </ScrollAreaScrollbar>
61
- <ScrollAreaCorner
62
- key="corner"
63
- :class="style.corner({ class: props.ui?.corner })"
64
- data-part="corner"
65
- />
66
- </TransitionGroup>
48
+ <ScrollAreaScrollbar
49
+ key="scrollbar-horizontal"
50
+ orientation="horizontal"
51
+ :class="ui.scrollbar({ class: props.ui?.scrollbar })"
52
+ data-part="scrollbar"
53
+ >
54
+ <ScrollAreaThumb :class="ui.thumb({ class: props.ui?.thumb })" data-part="thumb" />
55
+ </ScrollAreaScrollbar>
56
+ <ScrollAreaScrollbar
57
+ key="scrollbar-vertical"
58
+ orientation="vertical"
59
+ :class="ui.scrollbar({ class: props.ui?.scrollbar })"
60
+ data-part="scrollbar"
61
+ >
62
+ <ScrollAreaThumb :class="ui.thumb({ class: props.ui?.thumb })" data-part="thumb" />
63
+ </ScrollAreaScrollbar>
64
+ <ScrollAreaCorner
65
+ key="corner"
66
+ :class="ui.corner({ class: props.ui?.corner })"
67
+ data-part="corner"
68
+ />
67
69
  </ScrollAreaRoot>
68
70
  </template>
@@ -1,14 +1,18 @@
1
1
  import type { ScrollAreaRootProps } from 'reka-ui';
2
- import type { scrollArea } from '../theme/index.js';
3
- import type { ComponentAttrs } from '../types/index.js';
4
- export interface ScrollAreaProps extends ComponentAttrs<typeof scrollArea>, Pick<ScrollAreaRootProps, 'type' | 'dir' | 'scrollHideDelay'> {
2
+ import theme from '#build/ui/scroll-area';
3
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
4
+ export interface ScrollAreaProps extends ComponentBaseProps, Pick<ScrollAreaRootProps, 'type' | 'dir' | 'scrollHideDelay'> {
5
+ ui?: ComponentUIProps<typeof theme>;
5
6
  }
6
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ScrollAreaProps, {
7
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ScrollAreaProps, {
7
8
  scrollTop: () => void;
8
9
  scrollTopLeft: () => void;
9
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ScrollAreaProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
10
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ScrollAreaProps> & Readonly<{}>, {
11
+ scrollHideDelay: number;
12
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
10
13
  default?: (props: {}) => any;
11
14
  }>;
15
+ declare const _default: typeof __VLS_export;
12
16
  export default _default;
13
17
  type __VLS_WithSlots<T, S> = T & {
14
18
  new (): {