@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,82 +1,67 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { SliderRootProps } from 'reka-ui'
4
- import type { slider } from '../theme'
5
- import type { ComponentAttrs, MaybeArray } from '../types'
6
-
7
- export interface SliderEmits {
8
- 'update:modelValue': [payload: MaybeArray<number>]
9
- 'change': [payload: Event]
10
- }
11
-
12
- type SliderVariants = VariantProps<typeof slider>
13
-
14
- export interface SliderProps extends ComponentAttrs<typeof slider>, Pick<SliderRootProps, 'as' | 'name' | 'disabled' | 'inverted' | 'min' | 'max' | 'step' | 'minStepsBetweenThumbs'> {
15
- modelValue?: number | number[]
16
- size?: SliderVariants['size']
17
- /**
18
- * The orientation of the slider.
19
- * @default "horizontal"
20
- */
21
- orientation?: SliderVariants['orientation']
22
- /** The value of the slider when initially rendered. Use when you do not need to control the state of the slider. */
23
- defaultValue?: number | number[]
24
- }
1
+ <script>
2
+ import theme from "#build/ui/slider";
25
3
  </script>
26
4
 
27
- <script setup lang="ts">
28
- import { reactivePick } from '@vueuse/core'
29
- import { SliderRange, SliderRoot, SliderThumb, SliderTrack, useForwardPropsEmits } from 'reka-ui'
30
- import { computed } from 'vue'
31
- import { useFormItem } from '../composables/useFormItem'
32
- import { useTheme } from '../composables/useTheme'
33
-
34
- const props = withDefaults(defineProps<SliderProps>(), {
35
- orientation: 'horizontal',
36
- step: 1,
37
- max: 100,
38
- })
39
-
40
- const emit = defineEmits<SliderEmits>()
41
-
42
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'orientation', 'min', 'max', 'step', 'minStepsBetweenThumbs', 'inverted'), emit)
43
-
44
- const modelValue = defineModel<number | number[]>()
45
-
5
+ <script setup>
6
+ import { reactivePick, useVModel } from "@vueuse/core";
7
+ import { SliderRange, SliderRoot, SliderThumb, SliderTrack, useForwardPropsEmits } from "reka-ui";
8
+ import { computed } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFormField } from "../composables/useFormField";
11
+ import { cv, merge } from "../utils/style";
12
+ import Tooltip from "./Tooltip.vue";
13
+ const props = defineProps({
14
+ as: { type: null, required: false },
15
+ size: { type: null, required: false },
16
+ color: { type: null, required: false },
17
+ orientation: { type: null, required: false, default: "horizontal" },
18
+ tooltip: { type: [Boolean, Object], required: false },
19
+ modelValue: { type: null, required: false },
20
+ defaultValue: { type: null, required: false },
21
+ ui: { type: null, required: false },
22
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
23
+ name: { type: String, required: false },
24
+ disabled: { type: Boolean, required: false },
25
+ inverted: { type: Boolean, required: false },
26
+ min: { type: Number, required: false, default: 0 },
27
+ max: { type: Number, required: false, default: 100 },
28
+ step: { type: Number, required: false, default: 1 },
29
+ minStepsBetweenThumbs: { type: Number, required: false }
30
+ });
31
+ const emit = defineEmits(["update:modelValue", "change"]);
32
+ const modelValue = useVModel(props, "modelValue", emit);
33
+ const rootProps = useForwardPropsEmits(reactivePick(props, "as", "min", "max", "step", "minStepsBetweenThumbs", "inverted"), emit);
46
34
  const defaultSliderValue = computed(() => {
47
- if (typeof props.defaultValue === 'number')
48
- return [props.defaultValue]
49
-
50
- return props.defaultValue
51
- })
52
-
35
+ if (typeof props.defaultValue === "number")
36
+ return [props.defaultValue];
37
+ return props.defaultValue;
38
+ });
53
39
  const sliderValue = computed({
54
40
  get() {
55
- if (typeof modelValue.value === 'number')
56
- return [modelValue.value]
57
-
58
- return modelValue.value ?? defaultSliderValue.value
41
+ if (typeof modelValue.value === "number")
42
+ return [modelValue.value];
43
+ return modelValue.value ?? defaultSliderValue.value;
59
44
  },
60
45
  set(value) {
61
- modelValue.value = value?.length === 1 ? value[0] : value
62
- },
63
- })
64
-
65
- const thumbsCount = computed(() => sliderValue.value?.length ?? 1)
66
-
67
- const { id, size, name, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormItem<SliderProps>(props)
68
- const { generateStyle } = useTheme()
69
- const style = computed(() => generateStyle('slider', {
70
- ...props,
71
- size: size.value,
72
- }))
73
-
74
- function onChange(value: any) {
75
- // @ts-expect-error - 'target' does not exist in type 'EventInit'
76
- const event = new Event('change', { target: { value } })
77
- emit('change', event)
78
- emitFormChange()
79
- emitFormInput()
46
+ modelValue.value = value?.length === 1 ? value[0] : value;
47
+ }
48
+ });
49
+ const thumbs = computed(() => sliderValue.value?.length ?? 1);
50
+ const { id, name, size, color, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormField(props);
51
+ const appConfig = useAppConfig();
52
+ const ui = computed(() => {
53
+ const styler = cv(merge(theme, appConfig.ui.slider));
54
+ return styler({
55
+ ...props,
56
+ size: size.value,
57
+ color: color.value,
58
+ disabled: disabled.value
59
+ });
60
+ });
61
+ function onChange(value) {
62
+ const event = new Event("change", { target: { value } });
63
+ emit("change", event);
64
+ emitFormChange();
80
65
  }
81
66
  </script>
82
67
 
@@ -84,15 +69,26 @@ function onChange(value: any) {
84
69
  <SliderRoot
85
70
  v-bind="{ ...rootProps, ...ariaAttrs, id, name, disabled }"
86
71
  v-model="sliderValue"
87
- :class="style.root({ class: [props.class, props.ui?.root] })"
88
72
  :default-value="defaultSliderValue"
89
- :data-steps="thumbsCount"
73
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
74
+ :data-steps="thumbs"
75
+ data-part="root"
76
+ @update:model-value="emitFormInput()"
90
77
  @value-commit="onChange"
91
78
  >
92
- <SliderTrack :class="style.track({ class: props.ui?.track })">
93
- <SliderRange :class="style.range({ class: props.ui?.range })" />
79
+ <SliderTrack :class="ui.track({ class: props.ui?.track })" data-part="track">
80
+ <SliderRange :class="ui.range({ class: props.ui?.range })" data-part="range" />
94
81
  </SliderTrack>
95
82
 
96
- <SliderThumb v-for="count in thumbsCount" :key="count" :class="style.thumb({ class: props.ui?.thumb })" />
83
+ <Tooltip
84
+ v-for="thumb in thumbs"
85
+ :key="thumb"
86
+ v-bind="typeof props.tooltip === 'object' ? props.tooltip : {}"
87
+ :text="String(thumbs > 1 ? sliderValue?.[thumb - 1] : sliderValue)"
88
+ :disabled="!props.tooltip"
89
+ disable-closing-trigger
90
+ >
91
+ <SliderThumb :class="ui.thumb({ class: props.ui?.thumb })" data-part="thumb" />
92
+ </Tooltip>
97
93
  </SliderRoot>
98
94
  </template>
@@ -0,0 +1,52 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { SliderRootProps } from 'reka-ui';
3
+ import theme from '#build/ui/slider';
4
+ import type { ComponentBaseProps, ComponentUIProps, TooltipProps } from '../types';
5
+ import type { MaybeArray } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface SliderProps<T extends MaybeArray<number> = MaybeArray<number>> extends ComponentBaseProps, Pick<SliderRootProps, 'name' | 'disabled' | 'inverted' | 'min' | 'max' | 'step' | 'minStepsBetweenThumbs'> {
8
+ /**
9
+ * The element or component this component should render as.
10
+ * @default "div"
11
+ */
12
+ as?: SliderRootProps['as'];
13
+ /** @default "md" */
14
+ size?: ThemeVariants['size'];
15
+ /** @default "primary" */
16
+ color?: ThemeVariants['color'];
17
+ /**
18
+ * The orientation of the slider.
19
+ * @default "horizontal"
20
+ */
21
+ orientation?: ThemeVariants['orientation'];
22
+ /**
23
+ * Display a tooltip around the slider thumbs with the current value.
24
+ * @default false
25
+ */
26
+ tooltip?: boolean | TooltipProps;
27
+ modelValue?: T;
28
+ /** The value of the slider when initially rendered. Use when you do not need to control the state of the slider. */
29
+ defaultValue?: T;
30
+ ui?: ComponentUIProps<typeof theme>;
31
+ }
32
+ export interface SliderEmits<T extends MaybeArray<number>> {
33
+ 'update:modelValue': [value: T];
34
+ 'change': [event: Event];
35
+ }
36
+ declare const __VLS_export: <T extends MaybeArray<number>>(__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<{
37
+ props: __VLS_PrettifyLocal<SliderProps<T> & {
38
+ onChange?: ((event: Event) => any) | undefined;
39
+ "onUpdate:modelValue"?: ((value: T) => any) | undefined;
40
+ }> & import("vue").PublicProps;
41
+ expose: (exposed: {}) => void;
42
+ attrs: any;
43
+ slots: {};
44
+ emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", value: T) => void);
45
+ }>) => import("vue").VNode & {
46
+ __ctx?: Awaited<typeof __VLS_setup>;
47
+ };
48
+ declare const _default: typeof __VLS_export;
49
+ export default _default;
50
+ type __VLS_PrettifyLocal<T> = {
51
+ [K in keyof T as K]: T[K];
52
+ } & {};
@@ -1,98 +1,87 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { SwitchRootProps } from 'reka-ui'
4
- import type { switch as _switch } from '../theme'
5
- import type { ComponentAttrs } from '../types'
6
-
7
- export interface SwitchEmits {
8
- change: [payload: Event]
9
- }
10
-
11
- export interface SwitchSlots {
12
- label?: (props: { label?: string }) => any
13
- description?: (props: { description?: string }) => any
14
- }
15
-
16
- type SwitchVariants = VariantProps<typeof _switch>
17
-
18
- export interface SwitchProps extends ComponentAttrs<typeof _switch>, Pick<SwitchRootProps, 'as' | 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue'> {
19
- size?: SwitchVariants['size']
20
- /** When `true`, the loading icon will be displayed. */
21
- loading?: boolean
22
- /**
23
- * The icon when the `loading` prop is `true`.
24
- * @default app.icons.loading
25
- */
26
- loadingIcon?: string
27
- /** Display an icon when the switch is checked. */
28
- checkedIcon?: string
29
- /** Display an icon when the switch is unchecked. */
30
- uncheckedIcon?: string
31
- label?: string
32
- description?: string
33
- }
1
+ <script>
2
+ import theme from "#build/ui/switch";
34
3
  </script>
35
4
 
36
- <script lang="ts" setup>
37
- import { reactivePick } from '@vueuse/core'
38
- import { Label, Primitive, SwitchRoot, SwitchThumb, useForwardProps } from 'reka-ui'
39
- import { computed, useId } from 'vue'
40
- import { useFormItem } from '../composables/useFormItem'
41
- import { useTheme } from '../composables/useTheme'
42
-
43
- const props = withDefaults(defineProps<SwitchProps>(), {})
44
- const emit = defineEmits<SwitchEmits>()
45
- const slots = defineSlots<SwitchSlots>()
46
- const modelValue = defineModel<boolean>({ default: undefined })
47
-
48
- const rootProps = useForwardProps(reactivePick(props, 'required', 'value', 'defaultValue'))
49
-
50
- const { id: _id, size, name, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormItem<SwitchProps>(props)
51
- const id = _id.value ?? useId()
52
-
53
- const { theme, generateStyle } = useTheme()
54
- const style = computed(() => generateStyle('switch', {
55
- ...props,
56
- size: size.value,
57
- disabled: disabled.value,
58
- checked: false,
59
- unchecked: false,
60
- }))
61
-
62
- function onUpdate(value: any) {
63
- // @ts-expect-error - 'target' does not exist in type 'EventInit'
64
- const event = new Event('change', { target: { value } })
65
-
66
- emit('change', event)
67
- emitFormChange()
68
- emitFormInput()
5
+ <script setup>
6
+ import { reactivePick, useVModel } from "@vueuse/core";
7
+ import { Label, Primitive, SwitchRoot, SwitchThumb, useForwardProps } from "reka-ui";
8
+ import { computed, useId } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFormField } from "../composables/useFormField";
11
+ import { cv, merge } from "../utils/style";
12
+ import Icon from "./Icon.vue";
13
+ defineOptions({ inheritAttrs: false });
14
+ const props = defineProps({
15
+ as: { type: null, required: false },
16
+ color: { type: null, required: false },
17
+ size: { type: null, required: false },
18
+ loading: { type: Boolean, required: false },
19
+ loadingIcon: { type: [String, Object], required: false },
20
+ checkedIcon: { type: [String, Object], required: false },
21
+ uncheckedIcon: { type: [String, Object], required: false },
22
+ modelValue: { type: Boolean, required: false },
23
+ label: { type: String, required: false },
24
+ description: { type: String, required: false },
25
+ ui: { type: null, required: false },
26
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
27
+ disabled: { type: Boolean, required: false },
28
+ id: { type: String, required: false },
29
+ name: { type: String, required: false },
30
+ required: { type: Boolean, required: false },
31
+ value: { type: String, required: false },
32
+ defaultValue: { type: Boolean, required: false }
33
+ });
34
+ const emit = defineEmits(["change", "update:modelValue"]);
35
+ const slots = defineSlots();
36
+ const modelValue = useVModel(props, "modelValue", emit);
37
+ const rootProps = useForwardProps(reactivePick(props, "required", "value", "defaultValue"));
38
+ const { id: _id, name, size, color, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormField(props);
39
+ const id = _id.value ?? useId();
40
+ const appConfig = useAppConfig();
41
+ const ui = computed(() => {
42
+ const styler = cv(merge(theme, appConfig.ui.switch));
43
+ return styler({
44
+ ...props,
45
+ size: size.value,
46
+ color: color.value,
47
+ disabled: disabled.value || props.loading,
48
+ checked: false,
49
+ unchecked: false
50
+ });
51
+ });
52
+ function onUpdate(value) {
53
+ const event = new Event("change", { target: { value } });
54
+ emit("change", event);
55
+ emitFormChange();
56
+ emitFormInput();
69
57
  }
70
58
  </script>
71
59
 
72
60
  <template>
73
- <Primitive :as="props.as" :class="style.root({ class: [props.class, props.ui?.root] })">
74
- <div :class="style.container({ class: props.ui?.container })">
61
+ <Primitive :as="props.as" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
62
+ <div :class="ui.container({ class: props.ui?.container })" data-part="container">
75
63
  <SwitchRoot
76
- v-bind="{ ...rootProps, ...ariaAttrs, id, name }"
64
+ v-bind="{ id, ...rootProps, ...ariaAttrs, name }"
77
65
  v-model="modelValue"
78
- :class="style.base({ class: props.ui?.base })"
79
66
  :disabled="disabled || props.loading"
67
+ :class="ui.base({ class: props.ui?.base })"
68
+ data-part="base"
80
69
  @update:model-value="onUpdate"
81
70
  >
82
- <SwitchThumb :class="style.thumb({ class: props.ui?.thumb })">
83
- <span v-if="props.loading" :class="style.icon({ class: [theme.app.icons.loading, props.ui?.icon], checked: true, unchecked: true })"></span>
71
+ <SwitchThumb :class="ui.thumb({ class: props.ui?.thumb })" data-part="thumb">
72
+ <Icon v-if="props.loading" :name="props.loadingIcon || appConfig.ui.icons.loading" :class="ui.icon({ class: props.ui?.icon, checked: true, unchecked: true })" data-part="icon" />
84
73
  <template v-else>
85
- <span v-if="props.checkedIcon" :class="style.icon({ class: [props.checkedIcon, props.ui?.icon], checked: true })"></span>
86
- <span v-if="props.uncheckedIcon" :class="style.icon({ class: [props.uncheckedIcon, props.ui?.icon], unchecked: true })"></span>
74
+ <Icon v-if="props.checkedIcon" :name="props.checkedIcon" :class="ui.icon({ class: props.ui?.icon, checked: true })" data-part="icon" />
75
+ <Icon v-if="props.uncheckedIcon" :name="props.uncheckedIcon" :class="ui.icon({ class: props.ui?.icon, unchecked: true })" data-part="icon" />
87
76
  </template>
88
77
  </SwitchThumb>
89
78
  </SwitchRoot>
90
79
  </div>
91
- <div v-if="props.label || slots.label || props.description || slots.description" :class="style.wrapper({ class: props.ui?.wrapper })">
92
- <Label v-if="props.label || slots.label" :for="id" :class="style.label({ class: props.ui?.label })">
80
+ <div v-if="props.label || !!slots.label || (props.description || !!slots.description)" :class="ui.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
81
+ <Label v-if="props.label || !!slots.label" :for="id" :class="ui.label({ class: props.ui?.label })" data-part="label">
93
82
  <slot name="label" :label="props.label">{{ props.label }}</slot>
94
83
  </Label>
95
- <p v-if="props.description || slots.description" :class="style.description({ class: props.ui?.description })">
84
+ <p v-if="props.description || !!slots.description" :class="ui.description({ class: props.ui?.description })" data-part="description">
96
85
  <slot name="description" :description="props.description">
97
86
  {{ props.description }}
98
87
  </slot>
@@ -0,0 +1,58 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { SwitchRootProps } from 'reka-ui';
3
+ import theme from '#build/ui/switch';
4
+ import type { ComponentBaseProps, ComponentUIProps, IconProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface SwitchProps extends ComponentBaseProps, Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue'> {
8
+ /**
9
+ * The element or component this component should render as.
10
+ * @default "div"
11
+ */
12
+ as?: SwitchRootProps['as'];
13
+ /** @default "primary" */
14
+ color?: ThemeVariants['color'];
15
+ /** @default "md" */
16
+ size?: ThemeVariants['size'];
17
+ /** When `true`, the loading icon will be displayed. */
18
+ loading?: boolean;
19
+ /**
20
+ * The icon when the `loading` prop is `true`.
21
+ * @default app.icons.loading
22
+ */
23
+ loadingIcon?: IconProps['name'];
24
+ /** Display an icon when the switch is checked. */
25
+ checkedIcon?: IconProps['name'];
26
+ /** Display an icon when the switch is unchecked. */
27
+ uncheckedIcon?: IconProps['name'];
28
+ modelValue?: boolean;
29
+ label?: string;
30
+ description?: string;
31
+ ui?: ComponentUIProps<typeof theme>;
32
+ }
33
+ export interface SwitchEmits {
34
+ 'change': [event: Event];
35
+ 'update:modelValue': [value: boolean];
36
+ }
37
+ export interface SwitchSlots {
38
+ label: StaticSlot<{
39
+ label?: string;
40
+ }>;
41
+ description: StaticSlot<{
42
+ description?: string;
43
+ }>;
44
+ }
45
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<SwitchProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
46
+ change: (event: Event) => any;
47
+ "update:modelValue": (value: boolean) => any;
48
+ }, string, import("vue").PublicProps, Readonly<SwitchProps> & Readonly<{
49
+ onChange?: ((event: Event) => any) | undefined;
50
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
51
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, SwitchSlots>;
52
+ declare const _default: typeof __VLS_export;
53
+ export default _default;
54
+ type __VLS_WithSlots<T, S> = T & {
55
+ new (): {
56
+ $slots: S;
57
+ };
58
+ };