@byyuurin/ui 0.0.10 → 0.1.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 (289) 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 +48 -72
  6. package/dist/runtime/components/Accordion.vue.d.ts +74 -0
  7. package/dist/runtime/components/Alert.vue +65 -83
  8. package/dist/runtime/components/Alert.vue.d.ts +71 -0
  9. package/dist/runtime/components/App.vue +28 -42
  10. package/dist/runtime/components/App.vue.d.ts +26 -0
  11. package/dist/runtime/components/Avatar.vue +82 -58
  12. package/dist/runtime/components/Avatar.vue.d.ts +39 -0
  13. package/dist/runtime/components/AvatarGroup.vue +43 -70
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +30 -0
  15. package/dist/runtime/components/Badge.vue +70 -64
  16. package/dist/runtime/components/Badge.vue.d.ts +45 -0
  17. package/dist/runtime/components/Breadcrumb.vue +56 -76
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +79 -0
  19. package/dist/runtime/components/Button.vue +150 -78
  20. package/dist/runtime/components/Button.vue.d.ts +45 -0
  21. package/dist/runtime/components/Calendar.vue +99 -125
  22. package/dist/runtime/components/Calendar.vue.d.ts +102 -0
  23. package/dist/runtime/components/Card.vue +33 -46
  24. package/dist/runtime/components/Card.vue.d.ts +34 -0
  25. package/dist/runtime/components/Carousel.vue +164 -237
  26. package/dist/runtime/components/Carousel.vue.d.ts +125 -0
  27. package/dist/runtime/components/Checkbox.vue +86 -88
  28. package/dist/runtime/components/Checkbox.vue.d.ts +63 -0
  29. package/dist/runtime/components/Chip.vue +44 -58
  30. package/dist/runtime/components/Chip.vue.d.ts +48 -0
  31. package/dist/runtime/components/Collapsible.vue +29 -33
  32. package/dist/runtime/components/Collapsible.vue.d.ts +34 -0
  33. package/dist/runtime/components/Drawer.vue +110 -150
  34. package/dist/runtime/components/Drawer.vue.d.ts +103 -0
  35. package/dist/runtime/components/DropdownMenu.vue +49 -120
  36. package/dist/runtime/components/DropdownMenu.vue.d.ts +140 -0
  37. package/dist/runtime/components/DropdownMenuContent.vue +177 -143
  38. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +51 -0
  39. package/dist/runtime/components/FieldGroup.vue +33 -0
  40. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  41. package/dist/runtime/components/Form.vue +245 -275
  42. package/dist/runtime/components/Form.vue.d.ts +103 -0
  43. package/dist/runtime/components/FormField.vue +108 -0
  44. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  45. package/dist/runtime/components/Icon.vue +20 -0
  46. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  47. package/dist/runtime/components/Input.vue +125 -156
  48. package/dist/runtime/components/Input.vue.d.ts +76 -0
  49. package/dist/runtime/components/InputNumber.vue +103 -130
  50. package/dist/runtime/components/InputNumber.vue.d.ts +191 -0
  51. package/dist/runtime/components/Kbd.vue +24 -39
  52. package/dist/runtime/components/Kbd.vue.d.ts +34 -0
  53. package/dist/runtime/components/Link.vue +105 -337
  54. package/dist/runtime/components/Link.vue.d.ts +95 -0
  55. package/dist/runtime/components/LinkBase.vue +31 -71
  56. package/dist/runtime/components/LinkBase.vue.d.ts +33 -0
  57. package/dist/runtime/components/Modal.vue +82 -103
  58. package/dist/runtime/components/Modal.vue.d.ts +96 -0
  59. package/dist/runtime/components/NavigationMenu.vue +336 -0
  60. package/dist/runtime/components/NavigationMenu.vue.d.ts +181 -0
  61. package/dist/runtime/components/OverlayProvider.vue +12 -16
  62. package/dist/runtime/components/OverlayProvider.vue.d.ts +3 -0
  63. package/dist/runtime/components/Pagination.vue +65 -139
  64. package/dist/runtime/components/Pagination.vue.d.ts +116 -0
  65. package/dist/runtime/components/PinInput.vue +78 -73
  66. package/dist/runtime/components/PinInput.vue.d.ts +54 -0
  67. package/dist/runtime/components/Popover.vue +60 -75
  68. package/dist/runtime/components/Popover.vue.d.ts +70 -0
  69. package/dist/runtime/components/Progress.vue +79 -126
  70. package/dist/runtime/components/Progress.vue.d.ts +63 -0
  71. package/dist/runtime/components/RadioGroup.vue +109 -140
  72. package/dist/runtime/components/RadioGroup.vue.d.ts +96 -0
  73. package/dist/runtime/components/ScrollArea.vue +50 -48
  74. package/dist/runtime/components/ScrollArea.vue.d.ts +21 -0
  75. package/dist/runtime/components/Select.vue +221 -221
  76. package/dist/runtime/components/Select.vue.d.ts +260 -0
  77. package/dist/runtime/components/Separator.vue +55 -47
  78. package/dist/runtime/components/Separator.vue.d.ts +48 -0
  79. package/dist/runtime/components/Skeleton.vue +25 -22
  80. package/dist/runtime/components/Skeleton.vue.d.ts +19 -0
  81. package/dist/runtime/components/Slider.vue +73 -77
  82. package/dist/runtime/components/Slider.vue.d.ts +52 -0
  83. package/dist/runtime/components/Switch.vue +66 -77
  84. package/dist/runtime/components/Switch.vue.d.ts +58 -0
  85. package/dist/runtime/components/Table.vue +357 -215
  86. package/dist/runtime/components/Table.vue.d.ts +234 -0
  87. package/dist/runtime/components/Tabs.vue +90 -88
  88. package/dist/runtime/components/Tabs.vue.d.ts +97 -0
  89. package/dist/runtime/components/Textarea.vue +147 -146
  90. package/dist/runtime/components/Textarea.vue.d.ts +76 -0
  91. package/dist/runtime/components/Toast.vue +108 -90
  92. package/dist/runtime/components/Toast.vue.d.ts +152 -0
  93. package/dist/runtime/components/ToastProvider.vue +82 -109
  94. package/dist/runtime/components/ToastProvider.vue.d.ts +51 -0
  95. package/dist/runtime/components/Tooltip.vue +54 -53
  96. package/dist/runtime/components/Tooltip.vue.d.ts +53 -0
  97. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  98. package/dist/runtime/composables/defineShortcuts.js +129 -0
  99. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  100. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  101. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  102. package/dist/runtime/composables/useComponentIcons.js +4 -4
  103. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  104. package/dist/runtime/composables/useFieldGroup.js +14 -0
  105. package/dist/runtime/composables/useFormField.d.ts +62 -0
  106. package/dist/runtime/composables/useFormField.js +99 -0
  107. package/dist/runtime/composables/useKbd.d.ts +3 -2
  108. package/dist/runtime/composables/useKbd.js +3 -2
  109. package/dist/runtime/composables/useLocale.d.ts +68 -5
  110. package/dist/runtime/composables/useLocale.js +11 -11
  111. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  112. package/dist/runtime/composables/useOverlay.js +44 -30
  113. package/dist/runtime/composables/usePortal.d.ts +6 -0
  114. package/dist/runtime/composables/usePortal.js +17 -0
  115. package/dist/runtime/composables/useToast.d.ts +12 -5
  116. package/dist/runtime/composables/useToast.js +12 -7
  117. package/dist/runtime/locale/en.d.ts +30 -1
  118. package/dist/runtime/locale/en.js +2 -1
  119. package/dist/runtime/locale/index.d.ts +2 -2
  120. package/dist/runtime/locale/index.js +1 -1
  121. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  122. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  123. package/dist/runtime/plugins/colors.d.ts +2 -0
  124. package/dist/runtime/plugins/colors.js +50 -0
  125. package/dist/runtime/types/app.config.d.ts +6 -0
  126. package/dist/runtime/types/form.d.ts +58 -17
  127. package/dist/runtime/types/form.js +11 -0
  128. package/dist/runtime/types/index.d.ts +51 -8
  129. package/dist/runtime/types/index.js +45 -2
  130. package/dist/runtime/types/input.d.ts +8 -0
  131. package/dist/runtime/types/locale.d.ts +5 -0
  132. package/dist/runtime/types/style.d.ts +33 -0
  133. package/dist/runtime/types/style.js +0 -0
  134. package/dist/runtime/types/unocss.d.ts +4 -0
  135. package/dist/runtime/types/utils.d.ts +38 -37
  136. package/dist/runtime/utils/form.d.ts +5 -1
  137. package/dist/runtime/utils/form.js +49 -0
  138. package/dist/runtime/utils/index.d.ts +10 -13
  139. package/dist/runtime/utils/index.js +41 -48
  140. package/dist/runtime/utils/link.d.ts +5 -6
  141. package/dist/runtime/utils/link.js +16 -2
  142. package/dist/runtime/utils/locale.d.ts +5 -0
  143. package/dist/runtime/utils/locale.js +10 -0
  144. package/dist/runtime/utils/style.d.ts +94 -0
  145. package/dist/runtime/utils/style.js +37 -0
  146. package/dist/runtime/vue/components/Icon.vue +15 -0
  147. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  148. package/dist/runtime/vue/components/Link.vue +163 -0
  149. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  150. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  151. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  152. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  153. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  154. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  155. package/dist/runtime/vue/plugins/head.js +9 -0
  156. package/dist/runtime/vue/stubs.d.ts +16 -1
  157. package/dist/runtime/vue/stubs.js +32 -1
  158. package/dist/setup.d.mts +13 -0
  159. package/dist/setup.mjs +12 -0
  160. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  161. package/dist/shared/ui.DSyJHSTk.mjs +3787 -0
  162. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  163. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  164. package/dist/types.d.mts +3 -1
  165. package/dist/unocss.d.mts +12 -52
  166. package/dist/unocss.mjs +144 -253
  167. package/dist/unplugin.d.mts +13 -26
  168. package/dist/unplugin.mjs +193 -18
  169. package/dist/vite.d.mts +10 -1
  170. package/dist/vite.mjs +12 -3
  171. package/package.json +156 -87
  172. package/vue-plugin.d.ts +5 -0
  173. package/dist/module.cjs +0 -5
  174. package/dist/module.d.ts +0 -13
  175. package/dist/module.mjs.map +0 -1
  176. package/dist/runtime/app/injections.d.ts +0 -9307
  177. package/dist/runtime/app/injections.js +0 -61
  178. package/dist/runtime/components/ButtonGroup.vue +0 -46
  179. package/dist/runtime/components/FormItem.vue +0 -129
  180. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  181. package/dist/runtime/composables/useButtonGroup.js +0 -9
  182. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  183. package/dist/runtime/composables/useFormItem.js +0 -64
  184. package/dist/runtime/composables/useTheme.d.ts +0 -9
  185. package/dist/runtime/composables/useTheme.js +0 -23
  186. package/dist/runtime/index.d.ts +0 -44
  187. package/dist/runtime/index.js +0 -44
  188. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  189. package/dist/runtime/theme/accordion.d.ts +0 -56
  190. package/dist/runtime/theme/accordion.js +0 -28
  191. package/dist/runtime/theme/alert.d.ts +0 -125
  192. package/dist/runtime/theme/alert.js +0 -47
  193. package/dist/runtime/theme/app.d.ts +0 -19
  194. package/dist/runtime/theme/app.js +0 -19
  195. package/dist/runtime/theme/avatar-group.d.ts +0 -52
  196. package/dist/runtime/theme/avatar-group.js +0 -32
  197. package/dist/runtime/theme/avatar.d.ts +0 -56
  198. package/dist/runtime/theme/avatar.js +0 -34
  199. package/dist/runtime/theme/badge.d.ts +0 -82
  200. package/dist/runtime/theme/badge.js +0 -92
  201. package/dist/runtime/theme/breadcrumb.d.ts +0 -67
  202. package/dist/runtime/theme/breadcrumb.js +0 -44
  203. package/dist/runtime/theme/button-group.d.ts +0 -66
  204. package/dist/runtime/theme/button-group.js +0 -42
  205. package/dist/runtime/theme/button.d.ts +0 -190
  206. package/dist/runtime/theme/button.js +0 -164
  207. package/dist/runtime/theme/calendar.d.ts +0 -56
  208. package/dist/runtime/theme/calendar.js +0 -69
  209. package/dist/runtime/theme/card.d.ts +0 -62
  210. package/dist/runtime/theme/card.js +0 -37
  211. package/dist/runtime/theme/carousel.d.ts +0 -113
  212. package/dist/runtime/theme/carousel.js +0 -43
  213. package/dist/runtime/theme/checkbox.d.ts +0 -88
  214. package/dist/runtime/theme/checkbox.js +0 -54
  215. package/dist/runtime/theme/chip.d.ts +0 -67
  216. package/dist/runtime/theme/chip.js +0 -66
  217. package/dist/runtime/theme/collapsible.d.ts +0 -38
  218. package/dist/runtime/theme/collapsible.js +0 -10
  219. package/dist/runtime/theme/drawer.d.ts +0 -148
  220. package/dist/runtime/theme/drawer.js +0 -113
  221. package/dist/runtime/theme/dropdown-menu.d.ts +0 -71
  222. package/dist/runtime/theme/dropdown-menu.js +0 -83
  223. package/dist/runtime/theme/form-item.d.ts +0 -76
  224. package/dist/runtime/theme/form-item.js +0 -34
  225. package/dist/runtime/theme/form.d.ts +0 -8
  226. package/dist/runtime/theme/form.js +0 -7
  227. package/dist/runtime/theme/index.d.ts +0 -41
  228. package/dist/runtime/theme/index.js +0 -41
  229. package/dist/runtime/theme/input-number.d.ts +0 -121
  230. package/dist/runtime/theme/input-number.js +0 -95
  231. package/dist/runtime/theme/input.d.ts +0 -178
  232. package/dist/runtime/theme/input.js +0 -151
  233. package/dist/runtime/theme/kbd.d.ts +0 -39
  234. package/dist/runtime/theme/kbd.js +0 -26
  235. package/dist/runtime/theme/link.d.ts +0 -44
  236. package/dist/runtime/theme/link.js +0 -26
  237. package/dist/runtime/theme/modal.d.ts +0 -48
  238. package/dist/runtime/theme/modal.js +0 -55
  239. package/dist/runtime/theme/pagination.d.ts +0 -80
  240. package/dist/runtime/theme/pagination.js +0 -17
  241. package/dist/runtime/theme/pinInput.d.ts +0 -100
  242. package/dist/runtime/theme/pinInput.js +0 -111
  243. package/dist/runtime/theme/popover.d.ts +0 -38
  244. package/dist/runtime/theme/popover.js +0 -13
  245. package/dist/runtime/theme/progress.d.ts +0 -186
  246. package/dist/runtime/theme/progress.js +0 -95
  247. package/dist/runtime/theme/radio-group.d.ts +0 -110
  248. package/dist/runtime/theme/radio-group.js +0 -61
  249. package/dist/runtime/theme/scroll-area.d.ts +0 -73
  250. package/dist/runtime/theme/scroll-area.js +0 -33
  251. package/dist/runtime/theme/select.d.ts +0 -192
  252. package/dist/runtime/theme/select.js +0 -173
  253. package/dist/runtime/theme/separator.d.ts +0 -80
  254. package/dist/runtime/theme/separator.js +0 -53
  255. package/dist/runtime/theme/skeleton.d.ts +0 -8
  256. package/dist/runtime/theme/skeleton.js +0 -7
  257. package/dist/runtime/theme/slider.d.ts +0 -76
  258. package/dist/runtime/theme/slider.js +0 -52
  259. package/dist/runtime/theme/switch.d.ts +0 -122
  260. package/dist/runtime/theme/switch.js +0 -78
  261. package/dist/runtime/theme/table.d.ts +0 -92
  262. package/dist/runtime/theme/table.js +0 -36
  263. package/dist/runtime/theme/tabs.d.ts +0 -135
  264. package/dist/runtime/theme/tabs.js +0 -146
  265. package/dist/runtime/theme/textarea.d.ts +0 -96
  266. package/dist/runtime/theme/textarea.js +0 -116
  267. package/dist/runtime/theme/toast-provider.d.ts +0 -122
  268. package/dist/runtime/theme/toast-provider.js +0 -97
  269. package/dist/runtime/theme/toast.d.ts +0 -89
  270. package/dist/runtime/theme/toast.js +0 -35
  271. package/dist/runtime/theme/tooltip.d.ts +0 -44
  272. package/dist/runtime/theme/tooltip.js +0 -11
  273. package/dist/runtime/types/components.d.ts +0 -42
  274. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  275. package/dist/runtime/utils/extend-theme.js +0 -27
  276. package/dist/runtime/utils/styler.d.ts +0 -4
  277. package/dist/runtime/utils/styler.js +0 -10
  278. package/dist/runtime/utils/translator.d.ts +0 -18
  279. package/dist/runtime/utils/translator.js +0 -8
  280. package/dist/shared/ui.3e7fad19.mjs +0 -5
  281. package/dist/shared/ui.3e7fad19.mjs.map +0 -1
  282. package/dist/types.d.ts +0 -1
  283. package/dist/unocss.d.ts +0 -52
  284. package/dist/unocss.mjs.map +0 -1
  285. package/dist/unplugin.d.ts +0 -26
  286. package/dist/unplugin.mjs.map +0 -1
  287. package/dist/vite.d.ts +0 -9
  288. package/dist/vite.mjs.map +0 -1
  289. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -1,180 +1,149 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { PrimitiveProps, RadioGroupRootProps } from 'reka-ui'
4
- import type { radioGroup } from '../theme'
5
- import type { AcceptableValue, ComponentAttrs } from '../types'
6
-
7
- export interface RadioGroupEmits {
8
- 'update:modelValue': [payload: string]
9
- 'change': [payload: Event]
10
- }
11
-
12
- export type RadioGroupValue = AcceptableValue
13
-
14
- export type RadioGroupItem = {
15
- label?: string
16
- description?: string
17
- disabled?: boolean
18
- value?: RadioGroupValue
19
- [key: string]: any
20
- } | RadioGroupValue
21
-
22
- type SlotProps<T extends RadioGroupItem> = (props: { item: T & { id: string }, modelValue?: RadioGroupValue }) => any
23
-
24
- export interface RadioGroupSlots<T extends RadioGroupItem = RadioGroupItem> {
25
- legend?: any
26
- label?: SlotProps<T>
27
- description?: SlotProps<T>
28
- }
29
-
30
- type RadioGroupVariants = VariantProps<typeof radioGroup>
31
-
32
- export interface RadioGroupProps<T extends RadioGroupItem = RadioGroupItem> extends ComponentAttrs<typeof radioGroup>, Pick<RadioGroupRootProps, 'defaultValue' | 'disabled' | 'loop' | 'modelValue' | 'name' | 'required'> {
33
- /**
34
- * The element or component this component should render as.
35
- * @default "div"
36
- */
37
- as?: PrimitiveProps['as']
38
- legend?: string
39
- /**
40
- * When `options` is an array of objects, select the field to use as the value.
41
- * @default "value"
42
- */
43
- valueKey?: string
44
- /**
45
- * When `options` is an array of objects, select the field to use as the label.
46
- * @default "label"
47
- */
48
- labelKey?: string
49
- /**
50
- * When `options` is an array of objects, select the field to use as the description.
51
- * @default "description"
52
- */
53
- descriptionKey?: string
54
- options?: T[]
55
- size?: RadioGroupVariants['size']
56
- /**
57
- * The orientation the radio buttons are laid out.
58
- * @default "vertical"
59
- */
60
- orientation?: RadioGroupRootProps['orientation']
61
- }
1
+ <script>
2
+ import theme from "#build/ui/radio-group";
62
3
  </script>
63
4
 
64
- <script lang="ts" setup generic="T extends RadioGroupItem">
65
- import { reactivePick } from '@vueuse/core'
66
- import { Label, RadioGroupIndicator, RadioGroupItem, RadioGroupRoot, useForwardPropsEmits } from 'reka-ui'
67
- import { computed, useId } from 'vue'
68
- import { useFormItem } from '../composables/useFormItem'
69
- import { useTheme } from '../composables/useTheme'
70
- import { get } from '../utils'
71
-
72
- const props = withDefaults(defineProps<RadioGroupProps<T>>(), {
73
- valueKey: 'value',
74
- labelKey: 'label',
75
- descriptionKey: 'description',
76
- orientation: 'vertical',
77
- })
78
-
79
- const emit = defineEmits<RadioGroupEmits>()
80
- const slots = defineSlots<RadioGroupSlots<T>>()
81
-
82
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'modelValue', 'defaultValue', 'orientation', 'loop', 'required'), emit)
83
-
84
- const { id: _id, name, size, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormItem<RadioGroupProps<T>>(props)
85
- const id = _id.value ?? useId()
86
-
87
- const { generateStyle } = useTheme()
88
- const style = computed(() => generateStyle('radioGroup', {
89
- ...props,
90
- size: size.value,
91
- disabled: disabled.value,
92
- }))
93
-
94
- function normalizeItem(item: any) {
95
- if (item === null) {
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { Label, RadioGroupIndicator, RadioGroupItem as RekaRadioGroupItem, RadioGroupRoot, useForwardPropsEmits } from "reka-ui";
8
+ import { computed, useId } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFormField } from "../composables/useFormField";
11
+ import { get } from "../utils";
12
+ import { cv, merge } from "../utils/style";
13
+ const props = defineProps({
14
+ as: { type: null, required: false },
15
+ variant: { type: null, required: false },
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 },
26
+ orientation: { type: null, required: false, default: "vertical" },
27
+ ui: { type: null, required: false },
28
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
29
+ disabled: { type: Boolean, required: false },
30
+ loop: { type: Boolean, required: false },
31
+ name: { type: String, required: false },
32
+ required: { type: Boolean, required: false }
33
+ });
34
+ const emit = defineEmits(["change", "update:modelValue"]);
35
+ const slots = defineSlots();
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 });
38
+ const id = _id.value ?? useId();
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
+ });
49
+ function normalizeItem(item) {
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) {
96
59
  return {
60
+ ...itemBase,
97
61
  id: `${id}:null`,
98
- label: undefined,
99
- value: undefined,
100
- }
62
+ value: null
63
+ };
101
64
  }
102
-
103
- if (typeof item === 'string' || typeof item === 'number') {
65
+ if (typeof item === "boolean" || typeof item === "string" || typeof item === "number" || typeof item === "bigint") {
104
66
  return {
67
+ ...itemBase,
105
68
  id: `${id}:${item}`,
106
69
  label: String(item),
107
- value: item,
108
- disabled: disabled.value,
109
- }
70
+ value: item
71
+ };
110
72
  }
111
-
112
- const value = get(item, props.valueKey)
113
- const label = get(item, props.labelKey)
114
- const description = get(item, props.descriptionKey)
115
-
73
+ const value = get(item, props.valueKey);
74
+ const label = get(item, props.labelKey);
75
+ const description = get(item, props.descriptionKey);
116
76
  return {
77
+ ...itemBase,
117
78
  ...item,
118
79
  id: `${id}:${value}`,
119
80
  label,
120
81
  value,
121
- description,
122
- disabled: disabled.value || item.disabled,
123
- }
82
+ description
83
+ };
124
84
  }
125
-
126
85
  const normalizedItems = computed(() => {
127
- if (!props.options)
128
- return []
129
-
130
- return props.options.map(normalizeItem)
131
- })
132
-
133
- function onUpdate(value: any) {
134
- // @ts-expect-error - 'target' does not exist in type 'EventInit'
135
- const event = new Event('change', { target: { value } })
136
- emit('change', event)
137
- emitFormChange()
138
- emitFormInput()
86
+ if (!props.items)
87
+ return [];
88
+ return props.items.map(normalizeItem);
89
+ });
90
+ function onUpdate(value) {
91
+ const event = new Event("change", { target: { value } });
92
+ emit("change", event);
93
+ emitFormChange();
94
+ emitFormInput();
139
95
  }
140
96
  </script>
141
97
 
142
98
  <template>
143
99
  <RadioGroupRoot
144
- v-slot="{ modelValue }"
145
- v-bind="{ ...rootProps, id, name, disabled }"
146
- :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] })"
105
+ data-part="root"
147
106
  @update:model-value="onUpdate"
148
107
  >
149
- <fieldset v-bind="ariaAttrs" :class="style.fieldset({ class: props.ui?.fieldset })">
150
- <legend v-if="props.legend || slots.legend" :class="style.legend({ class: props.ui?.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">
151
110
  <slot name="legend">
152
111
  {{ props.legend }}
153
112
  </slot>
154
113
  </legend>
155
- <div v-for="item in normalizedItems" :key="item.value" :class="style.item({ class: props.ui?.item, disabled: item.disabled })">
156
- <div :class="style.container({ class: props.ui?.container })">
157
- <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
158
123
  :id="item.id"
159
124
  :value="item.value"
160
125
  :disabled="item.disabled"
161
- :class="style.base({ class: props.ui?.base })"
126
+ :class="ui.base({ class: [props.ui?.base, item.ui?.base], disabled: item.disabled, indicator: props.indicator })"
127
+ data-part="base"
128
+ :data-indicator="props.indicator"
162
129
  >
163
- <RadioGroupIndicator :class="style.indicator({ class: props.ui?.indicator })" force-mount />
164
- </RadioGroupItem>
130
+ <RadioGroupIndicator :class="ui.indicator({ class: [props.ui?.indicator, item.ui?.indicator], disabled: item.disabled })" data-part="indicator" force-mount />
131
+ </RekaRadioGroupItem>
165
132
  </div>
166
133
 
167
- <div :class="style.wrapper({ class: props.ui?.wrapper })">
168
- <Label :for="item.id" :class="style.label({ class: props.ui?.label })">
169
- <slot name="label" :item="item" :model-value="(modelValue as RadioGroupValue)">{{ item.label }}</slot>
170
- </Label>
171
- <p v-if="item.description || slots.description" :class="style.description({ class: props.ui?.description })">
172
- <slot name="description" :item="item" :model-value="(modelValue as RadioGroupValue)">
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">
141
+ <slot name="description" :item="item" :model-value="modelValue">
173
142
  {{ item.description }}
174
143
  </slot>
175
144
  </p>
176
145
  </div>
177
- </div>
146
+ </component>
178
147
  </fieldset>
179
148
  </RadioGroupRoot>
180
149
  </template>
@@ -0,0 +1,96 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
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';
6
+ export type RadioGroupValue = AcceptableValue;
7
+ interface RadioGroupItemBase {
8
+ label?: string;
9
+ description?: string;
10
+ disabled?: boolean;
11
+ value?: RadioGroupValue;
12
+ class?: ComponentBaseProps['class'];
13
+ ui?: Pick<ComponentUIProps<typeof theme>, 'item' | 'container' | 'base' | 'indicator' | 'wrapper' | 'label' | 'description'>;
14
+ }
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'> {
24
+ /**
25
+ * The element or component this component should render as.
26
+ * @default "div"
27
+ */
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'];
40
+ legend?: string;
41
+ /**
42
+ * When `options` is an array of objects, select the field to use as the value.
43
+ * @default "value"
44
+ */
45
+ valueKey?: VK;
46
+ /**
47
+ * When `options` is an array of objects, select the field to use as the label.
48
+ * @default "label"
49
+ */
50
+ labelKey?: GetItemKeys<T>;
51
+ /**
52
+ * When `options` is an array of objects, select the field to use as the description.
53
+ * @default "description"
54
+ */
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>>;
61
+ /**
62
+ * The orientation the radio buttons are laid out.
63
+ * @default "vertical"
64
+ */
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>;
79
+ }
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/utils").GetItemValue<T, VK, NestedItem<T>>) => any) | undefined;
84
+ }> & import("vue").PublicProps;
85
+ expose: (exposed: {}) => void;
86
+ attrs: any;
87
+ slots: RadioGroupSlots<T>;
88
+ emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: import("../types/utils").GetItemValue<T, VK, NestedItem<T>>) => void);
89
+ }>) => import("vue").VNode & {
90
+ __ctx?: Awaited<typeof __VLS_setup>;
91
+ };
92
+ declare const _default: typeof __VLS_export;
93
+ export default _default;
94
+ type __VLS_PrettifyLocal<T> = {
95
+ [K in keyof T as K]: T[K];
96
+ } & {};
@@ -1,36 +1,36 @@
1
- <script lang="ts">
2
- import type { ScrollAreaRootProps } from 'reka-ui'
3
- import type { scrollArea } from '../theme'
4
- import { transitionProps } from '../theme/scroll-area'
5
- import type { ComponentAttrs } from '../types'
6
-
7
- export interface ScrollAreaProps extends ComponentAttrs<typeof scrollArea>, Pick<ScrollAreaRootProps, 'type' | 'dir' | 'scrollHideDelay'> {}
1
+ <script>
2
+ import theme from "#build/ui/scroll-area";
8
3
  </script>
9
4
 
10
- <script setup lang="ts">
11
- import { reactivePick } from '@vueuse/core'
12
- import { ScrollAreaCorner, ScrollAreaRoot, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaViewport } from 'reka-ui'
13
- import { computed, ref } from 'vue'
14
- import { useTheme } from '../composables/useTheme'
15
-
16
- const props = withDefaults(defineProps<ScrollAreaProps>(), {})
17
- const rootRef = ref<InstanceType<typeof ScrollAreaRoot>>()
18
- const rootProps = reactivePick(props, 'type', 'dir', 'scrollHideDelay')
19
-
20
- const { generateStyle } = useTheme()
21
- const style = computed(() => generateStyle('scrollArea', props))
22
-
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { ScrollAreaCorner, ScrollAreaRoot, ScrollAreaScrollbar, ScrollAreaThumb, ScrollAreaViewport } from "reka-ui";
8
+ import { computed, ref } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { cv, merge } from "../utils/style";
11
+ const props = defineProps({
12
+ ui: { type: null, required: false },
13
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
14
+ type: { type: String, required: false },
15
+ dir: { type: String, required: false },
16
+ scrollHideDelay: { type: Number, required: false, default: 150 }
17
+ });
18
+ const rootRef = ref();
19
+ const rootProps = reactivePick(props, "type", "dir", "scrollHideDelay");
20
+ const appConfig = useAppConfig();
21
+ const ui = computed(() => {
22
+ const styler = cv(merge(theme, appConfig.ui.scrollArea));
23
+ return styler(props);
24
+ });
23
25
  defineExpose({
24
26
  scrollTop,
25
- scrollTopLeft,
26
- })
27
-
27
+ scrollTopLeft
28
+ });
28
29
  function scrollTop() {
29
- rootRef.value?.scrollTop()
30
+ rootRef.value?.scrollTop();
30
31
  }
31
-
32
32
  function scrollTopLeft() {
33
- rootRef.value?.scrollTopLeft()
33
+ rootRef.value?.scrollTopLeft();
34
34
  }
35
35
  </script>
36
36
 
@@ -38,31 +38,33 @@ function scrollTopLeft() {
38
38
  <ScrollAreaRoot
39
39
  ref="rootRef"
40
40
  v-bind="rootProps"
41
- :class="style.root({ class: [props.class, props.ui?.root] })"
41
+ :class="ui.root({ class: [props.class, props.ui?.root] })"
42
+ data-part="root"
42
43
  >
43
- <ScrollAreaViewport :class="style.viewport({ class: props.ui?.viewport })">
44
+ <ScrollAreaViewport :class="ui.viewport({ class: props.ui?.viewport })" data-part="viewport">
44
45
  <slot></slot>
45
46
  </ScrollAreaViewport>
46
47
 
47
- <TransitionGroup v-bind="transitionProps">
48
- <ScrollAreaScrollbar
49
- key="scrollbar-horizontal"
50
- :class="style.scrollbar({ class: props.ui?.scrollbar })"
51
- orientation="horizontal"
52
- >
53
- <ScrollAreaThumb :class="style.thumb({ class: props.ui?.thumb })" />
54
- </ScrollAreaScrollbar>
55
- <ScrollAreaScrollbar
56
- key="scrollbar-vertical"
57
- :class="style.scrollbar({ class: props.ui?.scrollbar })"
58
- orientation="vertical"
59
- >
60
- <ScrollAreaThumb :class="style.thumb({ class: props.ui?.thumb })" />
61
- </ScrollAreaScrollbar>
62
- <ScrollAreaCorner
63
- key="corner"
64
- :class="style.corner({ class: props.ui?.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>
@@ -0,0 +1,21 @@
1
+ import type { ScrollAreaRootProps } from 'reka-ui';
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>;
6
+ }
7
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ScrollAreaProps, {
8
+ scrollTop: () => void;
9
+ scrollTopLeft: () => void;
10
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ScrollAreaProps> & Readonly<{}>, {
11
+ scrollHideDelay: number;
12
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
13
+ default?: (props: {}) => any;
14
+ }>;
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
17
+ type __VLS_WithSlots<T, S> = T & {
18
+ new (): {
19
+ $slots: S;
20
+ };
21
+ };