@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,14 +1,15 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/carousel";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { computedAsync, reactivePick } from "@vueuse/core";
6
+ import { reactivePick } from "@vueuse/core";
7
7
  import useEmblaCarousel from "embla-carousel-vue";
8
8
  import { Primitive, useForwardProps } from "reka-ui";
9
- import { computed, onMounted, ref, watch } from "vue";
9
+ import { computed, onBeforeMount, onMounted, ref, watch } from "vue";
10
+ import { useAppConfig } from "#imports";
10
11
  import { useLocale } from "../composables/useLocale";
11
- import { useTheme } from "../composables/useTheme";
12
+ import { cv, merge } from "../utils/style";
12
13
  import Button from "./Button.vue";
13
14
  const props = defineProps({
14
15
  as: { type: null, required: false },
@@ -25,9 +26,9 @@ const props = defineProps({
25
26
  autoHeight: { type: [Boolean, Object], required: false, default: false },
26
27
  classNames: { type: [Boolean, Object], required: false, default: false },
27
28
  fade: { type: [Boolean, Object], required: false, default: false },
28
- wheelGestures: { type: Boolean, required: false, skipCheck: true, default: false },
29
- class: { type: null, required: false },
29
+ wheelGestures: { type: [Boolean, Object], required: false, default: false },
30
30
  ui: { type: null, required: false },
31
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
31
32
  align: { type: [String, Function], required: false, default: "center" },
32
33
  containScroll: { type: [Boolean, String], required: false, default: "trimSnaps" },
33
34
  slidesToScroll: { type: [String, Number], required: false, default: 1 },
@@ -45,63 +46,98 @@ const props = defineProps({
45
46
  active: { type: Boolean, required: false, default: true },
46
47
  breakpoints: { type: Object, required: false, default: () => ({}) }
47
48
  });
49
+ const emit = defineEmits(["select"]);
48
50
  defineSlots();
49
- const rootProps = useForwardProps(reactivePick(props, "active", "align", "breakpoints", "containScroll", "dragFree", "dragThreshold", "duration", "inViewThreshold", "loop", "skipSnaps", "slidesToScroll", "startIndex", "watchDrag", "watchResize", "watchSlides", "watchFocus"));
50
51
  const { t, dir } = useLocale();
51
- const { theme, generateStyle } = useTheme();
52
- const style = computed(() => generateStyle("carousel", props));
53
- const prevIcon = computed(() => props.prevIcon || (dir.value === "rtl" ? theme.value.app.icons.chevronRight : theme.value.app.icons.chevronLeft));
54
- const nextIcon = computed(() => props.nextIcon || (dir.value === "rtl" ? theme.value.app.icons.chevronLeft : theme.value.app.icons.chevronRight));
52
+ const appConfig = useAppConfig();
53
+ const ui = computed(() => {
54
+ const styler = cv(merge(theme, appConfig.ui.carousel));
55
+ return styler(props);
56
+ });
57
+ const rootProps = useForwardProps(reactivePick(props, "active", "align", "breakpoints", "containScroll", "dragFree", "dragThreshold", "duration", "inViewThreshold", "loop", "skipSnaps", "slidesToScroll", "startIndex", "watchDrag", "watchResize", "watchSlides", "watchFocus"));
58
+ const prevIcon = computed(() => props.prevIcon || (dir.value === "rtl" ? appConfig.ui.icons.chevronRight : appConfig.ui.icons.chevronLeft));
59
+ const nextIcon = computed(() => props.nextIcon || (dir.value === "rtl" ? appConfig.ui.icons.chevronLeft : appConfig.ui.icons.chevronRight));
60
+ const stopAutoplayOnInteraction = computed(() => {
61
+ if (typeof props.autoplay == "boolean")
62
+ return true;
63
+ return props.autoplay.stopOnInteraction ?? true;
64
+ });
65
+ const stopAutoScrollOnInteraction = computed(() => {
66
+ if (typeof props.autoScroll === "boolean")
67
+ return true;
68
+ return props.autoScroll.stopOnInteraction ?? true;
69
+ });
55
70
  const options = computed(() => ({
56
71
  ...props.fade ? { align: "center", containScroll: false } : {},
57
72
  ...rootProps.value,
58
73
  axis: props.orientation === "horizontal" ? "x" : "y",
59
74
  direction: dir.value === "rtl" ? "rtl" : "ltr"
60
75
  }));
61
- const plugins = computedAsync(async () => {
62
- const plugins2 = [];
76
+ const plugins = ref([]);
77
+ async function loadPlugins() {
78
+ const emblaPlugins = [];
63
79
  if (props.autoplay) {
64
80
  const AutoplayPlugin = await import("embla-carousel-autoplay").then((r) => r.default);
65
- plugins2.push(AutoplayPlugin(typeof props.autoplay === "boolean" ? {} : props.autoplay));
81
+ emblaPlugins.push(AutoplayPlugin(typeof props.autoplay === "boolean" ? {} : props.autoplay));
66
82
  }
67
83
  if (props.autoScroll) {
68
84
  const AutoScrollPlugin = await import("embla-carousel-auto-scroll").then((r) => r.default);
69
- plugins2.push(AutoScrollPlugin(typeof props.autoScroll === "boolean" ? {} : props.autoScroll));
85
+ emblaPlugins.push(AutoScrollPlugin(typeof props.autoScroll === "boolean" ? {} : props.autoScroll));
70
86
  }
71
87
  if (props.autoHeight) {
72
88
  const AutoHeightPlugin = await import("embla-carousel-auto-height").then((r) => r.default);
73
- plugins2.push(AutoHeightPlugin(typeof props.autoHeight === "boolean" ? {} : props.autoHeight));
89
+ emblaPlugins.push(AutoHeightPlugin(typeof props.autoHeight === "boolean" ? {} : props.autoHeight));
74
90
  }
75
91
  if (props.classNames) {
76
92
  const ClassNamesPlugin = await import("embla-carousel-class-names").then((r) => r.default);
77
- plugins2.push(ClassNamesPlugin(typeof props.classNames === "boolean" ? {} : props.classNames));
93
+ emblaPlugins.push(ClassNamesPlugin(typeof props.classNames === "boolean" ? {} : props.classNames));
78
94
  }
79
95
  if (props.fade) {
80
96
  const FadePlugin = await import("embla-carousel-fade").then((r) => r.default);
81
- plugins2.push(FadePlugin(typeof props.fade === "boolean" ? {} : props.fade));
97
+ emblaPlugins.push(FadePlugin(typeof props.fade === "boolean" ? {} : props.fade));
82
98
  }
83
99
  if (props.wheelGestures) {
84
100
  const { WheelGesturesPlugin } = await import("embla-carousel-wheel-gestures");
85
- plugins2.push(WheelGesturesPlugin(typeof props.wheelGestures === "boolean" ? {} : props.wheelGestures));
101
+ emblaPlugins.push(WheelGesturesPlugin(typeof props.wheelGestures === "boolean" ? {} : props.wheelGestures));
86
102
  }
87
- return plugins2;
88
- });
89
- const [emblaRef, emblaApi] = useEmblaCarousel(options.value, plugins.value);
90
- watch([options, plugins], () => {
103
+ plugins.value = emblaPlugins;
104
+ }
105
+ watch(() => [props.autoplay, props.autoScroll, props.autoHeight, props.classNames, props.fade, props.wheelGestures], async () => {
106
+ await loadPlugins();
91
107
  emblaApi.value?.reInit(options.value, plugins.value);
92
- });
108
+ }, { immediate: true });
109
+ const [emblaRef, emblaApi] = useEmblaCarousel(options, plugins);
110
+ watch(options, () => {
111
+ emblaApi.value?.reInit(options.value, plugins.value);
112
+ }, { flush: "post" });
113
+ function stopOnInteraction() {
114
+ if (stopAutoplayOnInteraction.value)
115
+ emblaApi.value?.plugins().autoplay?.stop();
116
+ if (stopAutoScrollOnInteraction.value)
117
+ emblaApi.value?.plugins().autoScroll?.stop();
118
+ }
93
119
  function scrollPrev() {
94
120
  emblaApi.value?.scrollPrev();
121
+ stopOnInteraction();
95
122
  }
96
123
  function scrollNext() {
97
124
  emblaApi.value?.scrollNext();
125
+ stopOnInteraction();
98
126
  }
99
127
  function scrollTo(index) {
100
128
  emblaApi.value?.scrollTo(index);
129
+ stopOnInteraction();
101
130
  }
102
131
  function onKeyDown(event) {
103
- const prevKey = props.orientation === "vertical" ? "ArrowUp" : "ArrowLeft";
104
- const nextKey = props.orientation === "vertical" ? "ArrowDown" : "ArrowRight";
132
+ let prevKey;
133
+ let nextKey;
134
+ if (props.orientation === "horizontal") {
135
+ prevKey = dir.value === "ltr" ? "ArrowLeft" : "ArrowRight";
136
+ nextKey = dir.value === "ltr" ? "ArrowRight" : "ArrowLeft";
137
+ } else {
138
+ prevKey = "ArrowUp";
139
+ nextKey = "ArrowDown";
140
+ }
105
141
  if (event.key === prevKey) {
106
142
  event.preventDefault();
107
143
  scrollPrev();
@@ -123,15 +159,28 @@ function onSelect(api) {
123
159
  canScrollNext.value = api?.canScrollNext() || false;
124
160
  canScrollPrev.value = api?.canScrollPrev() || false;
125
161
  selectedIndex.value = api?.selectedScrollSnap() || 0;
162
+ emit("select", selectedIndex.value);
163
+ }
164
+ function isCarouselItem(item) {
165
+ return typeof item === "object" && item !== null;
126
166
  }
127
167
  onMounted(() => {
128
168
  if (!emblaApi.value)
129
169
  return;
130
- emblaApi.value?.on("init", onInit);
131
- emblaApi.value?.on("init", onSelect);
132
- emblaApi.value?.on("reInit", onInit);
133
- emblaApi.value?.on("reInit", onSelect);
134
- emblaApi.value?.on("select", onSelect);
170
+ emblaApi.value.on("init", onInit);
171
+ emblaApi.value.on("init", onSelect);
172
+ emblaApi.value.on("reInit", onInit);
173
+ emblaApi.value.on("reInit", onSelect);
174
+ emblaApi.value.on("select", onSelect);
175
+ });
176
+ onBeforeMount(() => {
177
+ if (!emblaApi.value)
178
+ return;
179
+ emblaApi.value.off("init", onInit);
180
+ emblaApi.value.off("init", onSelect);
181
+ emblaApi.value.off("reInit", onInit);
182
+ emblaApi.value.off("reInit", onSelect);
183
+ emblaApi.value.off("select", onSelect);
135
184
  });
136
185
  defineExpose({
137
186
  emblaRef,
@@ -143,20 +192,20 @@ defineExpose({
143
192
  <Primitive
144
193
  :as="props.as"
145
194
  role="region"
146
- aria-roledescription="carousel"
147
195
  tabindex="0"
148
- :class="style.root({ class: [props.class, props.ui?.root] })"
196
+ :class="ui.root({ class: [props.class, props.ui?.root] })"
197
+ aria-roledescription="carousel"
198
+ :data-orientation="props.orientation"
149
199
  data-part="root"
150
200
  @keydown="onKeyDown"
151
201
  >
152
- <div ref="emblaRef" :class="style.viewport({ class: props.ui?.viewport })" data-part="viewport">
153
- <div :class="style.container({ class: props.ui?.container })" data-part="container">
202
+ <div ref="emblaRef" :class="ui.viewport({ class: props.ui?.viewport })" data-part="viewport">
203
+ <div :class="ui.container({ class: props.ui?.container })" data-part="container">
154
204
  <div
155
205
  v-for="(item, index) in props.items"
156
206
  :key="index"
157
- role="group"
158
- aria-roledescription="slide"
159
- :class="style.item({ class: props.ui?.item })"
207
+ v-bind="props.dots ? { role: 'tabpanel' } : { 'role': 'group', 'aria-roledescription': 'slide' }"
208
+ :class="ui.item({ class: [props.ui?.item, ...isCarouselItem(item) ? [item.ui?.item, item.class] : []] })"
160
209
  data-part="item"
161
210
  >
162
211
  <slot :item="item" :index="index"></slot>
@@ -164,38 +213,42 @@ defineExpose({
164
213
  </div>
165
214
  </div>
166
215
 
167
- <div v-if="props.arrows || props.dots" :class="style.controls({ class: props.ui?.controls })" data-part="controls">
168
- <div v-if="props.arrows" :class="style.arrows({ class: props.ui?.arrows })" data-part="arrows">
216
+ <div v-if="props.arrows || props.dots" :class="ui.controls({ class: props.ui?.controls })" data-part="controls">
217
+ <div v-if="props.arrows" :class="ui.arrows({ class: props.ui?.arrows })" data-part="arrows">
169
218
  <Button
170
219
  :disabled="!canScrollPrev"
171
220
  :icon="prevIcon"
172
- size="md"
221
+ color="neutral"
173
222
  variant="outline"
174
223
  :aria-label="t('carousel.prev')"
175
224
  v-bind="typeof props.prev === 'object' ? props.prev : void 0"
176
- :class="style.prev({ class: props.ui?.prev })"
225
+ :class="ui.prev({ class: props.ui?.prev })"
177
226
  data-part="prev"
178
227
  @click="scrollPrev"
179
228
  />
180
229
  <Button
181
230
  :disabled="!canScrollNext"
182
231
  :icon="nextIcon"
183
- size="md"
232
+ color="neutral"
184
233
  variant="outline"
185
234
  :aria-label="t('carousel.next')"
186
235
  v-bind="typeof props.next === 'object' ? props.next : void 0"
187
- :class="style.next({ class: props.ui?.next })"
236
+ :class="ui.next({ class: props.ui?.next })"
188
237
  data-part="next"
189
238
  @click="scrollNext"
190
239
  />
191
240
  </div>
192
241
 
193
- <div v-if="props.dots" :class="style.dots({ class: props.ui?.dots })" data-part="dots">
242
+ <div v-if="props.dots" role="tablist" :aria-label="t('carousel.dots')" :class="ui.dots({ class: props.ui?.dots })" data-part="dots">
194
243
  <template v-for="(_, index) in scrollSnaps" :key="index">
195
244
  <button
245
+ type="button"
246
+ role="tab"
196
247
  :aria-label="t('carousel.goto', { page: index + 1 })"
197
- :class="style.dot({ class: props.ui?.dot, active: selectedIndex === index })"
248
+ :aria-selected="selectedIndex === index"
249
+ :class="ui.dot({ class: props.ui?.dot, active: selectedIndex === index })"
198
250
  data-part="dot"
251
+ :data-state="selectedIndex === index ? 'active' : void 0"
199
252
  @click="scrollTo(index)"
200
253
  ></button>
201
254
  </template>
@@ -6,18 +6,18 @@ import type { AutoplayOptionsType } from 'embla-carousel-autoplay';
6
6
  import type { ClassNamesOptionsType } from 'embla-carousel-class-names';
7
7
  import type { FadeOptionsType } from 'embla-carousel-fade';
8
8
  import type { WheelGesturesPluginOptions } from 'embla-carousel-wheel-gestures';
9
- import type { AcceptableValue, PrimitiveProps } from 'reka-ui';
10
- import type { carousel } from '../theme/index.js';
11
- import type { ButtonProps, ComponentAttrs } from '../types/index.js';
12
- export type CarouselItem = AcceptableValue;
13
- export interface CarouselSlots<T extends CarouselItem = CarouselItem> {
14
- default?: (props: {
15
- item: T;
16
- index: number;
17
- }) => any;
18
- }
19
- type CarouselVariants = VariantProps<typeof carousel>;
20
- export interface CarouselProps<T extends CarouselItem = CarouselItem> extends ComponentAttrs<typeof carousel>, Omit<EmblaOptionsType, 'axis' | 'container' | 'slides' | 'direction'> {
9
+ import type { PrimitiveProps } from 'reka-ui';
10
+ import theme from '#build/ui/carousel';
11
+ import type { ButtonProps, ComponentBaseProps, ComponentUIProps } from '../types';
12
+ import type { AcceptableValue, StaticSlot } from '../types/utils';
13
+ export type CarouselValue = AcceptableValue;
14
+ export type CarouselItem = AcceptableValue | {
15
+ class?: ComponentBaseProps['class'];
16
+ ui?: Pick<ComponentUIProps<typeof theme>, 'item'>;
17
+ [key: string]: any;
18
+ };
19
+ type ThemeVariants = VariantProps<typeof theme>;
20
+ export interface CarouselProps<T extends CarouselItem = CarouselItem> extends ComponentBaseProps, Omit<EmblaOptionsType, 'axis' | 'container' | 'slides' | 'direction'> {
21
21
  /**
22
22
  * The element or component this component should render as.
23
23
  * @default "div"
@@ -53,52 +53,73 @@ export interface CarouselProps<T extends CarouselItem = CarouselItem> extends Co
53
53
  * @default false
54
54
  */
55
55
  dots?: boolean;
56
- orientation?: CarouselVariants['orientation'];
56
+ /**
57
+ * The orientation of the carousel.
58
+ * @default "horizontal"
59
+ */
60
+ orientation?: ThemeVariants['orientation'];
57
61
  items?: T[];
58
62
  /**
59
63
  * Enable Autoplay plugin
60
- * @link https://www.embla-carousel.com/plugins/autoplay/
64
+ * @see https://www.embla-carousel.com/plugins/autoplay/
61
65
  */
62
66
  autoplay?: boolean | AutoplayOptionsType;
63
67
  /**
64
68
  * Enable Auto Scroll plugin
65
- * @link https://www.embla-carousel.com/plugins/auto-scroll/
69
+ * @see https://www.embla-carousel.com/plugins/auto-scroll/
66
70
  */
67
71
  autoScroll?: boolean | AutoScrollOptionsType;
68
72
  /**
69
73
  * Enable Auto Height plugin
70
- * @link https://www.embla-carousel.com/plugins/auto-height/
74
+ * @see https://www.embla-carousel.com/plugins/auto-height/
71
75
  */
72
76
  autoHeight?: boolean | AutoHeightOptionsType;
73
77
  /**
74
78
  * Enable Class Names plugin
75
- * @link https://www.embla-carousel.com/plugins/class-names/
79
+ * @see https://www.embla-carousel.com/plugins/class-names/
76
80
  */
77
81
  classNames?: boolean | ClassNamesOptionsType;
78
82
  /**
79
83
  * Enable Fade plugin
80
- * @link https://www.embla-carousel.com/plugins/fade/
84
+ * @see https://www.embla-carousel.com/plugins/fade/
81
85
  */
82
86
  fade?: boolean | FadeOptionsType;
83
87
  /**
84
88
  * Enable Wheel Gestures plugin
85
- * @link https://www.embla-carousel.com/plugins/wheel-gestures/
89
+ * @see https://www.embla-carousel.com/plugins/wheel-gestures/
86
90
  */
87
91
  wheelGestures?: boolean | WheelGesturesPluginOptions;
92
+ ui?: ComponentUIProps<typeof theme>;
93
+ }
94
+ export interface CarouselEmits {
95
+ /**
96
+ * Emitted when the selected slide changes
97
+ * @param selectedIndex The index of the selected slide
98
+ */
99
+ select: [selectedIndex: number];
100
+ }
101
+ export interface CarouselSlots<T extends CarouselItem = CarouselItem> {
102
+ default: StaticSlot<{
103
+ item: T;
104
+ index: number;
105
+ }>;
88
106
  }
89
- declare const _default: <T extends CarouselItem>(__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<{
90
- props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, never> & CarouselProps<T> & Partial<{}>> & import("vue").PublicProps;
91
- expose(exposed: import("vue").ShallowUnwrapRef<{
107
+ declare const __VLS_export: <T extends CarouselItem>(__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<{
108
+ props: __VLS_PrettifyLocal<CarouselProps<T> & {
109
+ onSelect?: ((selectedIndex: number) => any) | undefined;
110
+ }> & import("vue").PublicProps;
111
+ expose: (exposed: import("vue").ShallowUnwrapRef<{
92
112
  emblaRef: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
93
113
  emblaApi: import("vue").Ref<EmblaCarouselType | undefined, EmblaCarouselType | undefined>;
94
- }>): void;
114
+ }>) => void;
95
115
  attrs: any;
96
116
  slots: CarouselSlots<T>;
97
- emit: {};
117
+ emit: (evt: "select", selectedIndex: number) => void;
98
118
  }>) => import("vue").VNode & {
99
119
  __ctx?: Awaited<typeof __VLS_setup>;
100
120
  };
121
+ declare const _default: typeof __VLS_export;
101
122
  export default _default;
102
123
  type __VLS_PrettifyLocal<T> = {
103
- [K in keyof T]: T[K];
124
+ [K in keyof T as K]: T[K];
104
125
  } & {};
@@ -1,22 +1,29 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/checkbox";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { reactivePick } from "@vueuse/core";
6
+ import { reactivePick, useVModel } from "@vueuse/core";
7
7
  import { CheckboxIndicator, CheckboxRoot, Label, Primitive, useForwardProps } 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
+ import { cv, merge } from "../utils/style";
12
+ import Icon from "./Icon.vue";
13
+ defineOptions({ inheritAttrs: false });
11
14
  const props = defineProps({
12
15
  as: { type: null, required: false },
13
16
  label: { type: String, required: false },
14
17
  description: { type: String, required: false },
18
+ variant: { type: null, required: false },
19
+ color: { type: null, required: false },
15
20
  size: { type: null, required: false },
16
- icon: { type: String, required: false },
17
- indeterminateIcon: { type: String, required: false },
18
- class: { type: null, required: false },
21
+ indicator: { type: null, required: false },
22
+ icon: { type: [String, Object], required: false },
23
+ indeterminateIcon: { type: [String, Object], required: false },
24
+ modelValue: { type: [Boolean, String], required: false },
19
25
  ui: { type: null, required: false },
26
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
20
27
  disabled: { type: Boolean, required: false, default: false },
21
28
  required: { type: Boolean, required: false, default: false },
22
29
  name: { type: String, required: false },
@@ -24,18 +31,21 @@ const props = defineProps({
24
31
  id: { type: String, required: false },
25
32
  defaultValue: { type: [Boolean, String], required: false }
26
33
  });
27
- const emit = defineEmits(["change"]);
34
+ const emit = defineEmits(["update:modelValue", "change"]);
28
35
  const slots = defineSlots();
29
- const innerValue = defineModel({ type: [Boolean, String], ...{ default: void 0 } });
36
+ const modelValue = useVModel(props, "modelValue", emit);
30
37
  const rootProps = useForwardProps(reactivePick(props, "required", "value", "defaultValue"));
31
- const { id: _id, size, name, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormItem(props);
38
+ const { id: _id, size, name, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormField(props);
32
39
  const id = _id.value ?? useId();
33
- const { theme, generateStyle } = useTheme();
34
- const style = computed(() => generateStyle("checkbox", {
35
- ...props,
36
- size: size.value,
37
- disabled: disabled.value
38
- }));
40
+ const appConfig = useAppConfig();
41
+ const ui = computed(() => {
42
+ const styler = cv(merge(theme, appConfig.ui.checkbox));
43
+ return styler({
44
+ ...props,
45
+ size: size.value,
46
+ disabled: disabled.value
47
+ });
48
+ });
39
49
  function onUpdate(value) {
40
50
  const event = new Event("change", { target: value });
41
51
  emit("change", event);
@@ -45,31 +55,46 @@ function onUpdate(value) {
45
55
  </script>
46
56
 
47
57
  <template>
48
- <Primitive :as="props.as" :class="style.root({ class: [props.class, props.ui?.root] })" data-part="root">
49
- <div :class="style.container({ class: props.ui?.container })" data-part="container">
58
+ <Primitive :as="props.variant && props.variant !== 'list' ? Label : props.as" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
59
+ <div :class="ui.container({ class: props.ui?.container })" data-part="container">
50
60
  <CheckboxRoot
51
- v-slot="{ modelValue }"
52
- v-bind="{ ...rootProps, ...ariaAttrs, id, name, disabled }"
53
- v-model="innerValue"
54
- :class="style.base({ class: props.ui?.base })"
61
+ v-bind="{ id, ...rootProps, ...$attrs, ...ariaAttrs, name, disabled }"
62
+ v-model="modelValue"
63
+ :class="ui.base({ class: props.ui?.base })"
55
64
  data-part="base"
56
65
  @update:model-value="onUpdate"
57
66
  >
58
- <CheckboxIndicator as-child force-mount>
59
- <span
60
- v-if="modelValue === 'indeterminate'"
61
- :class="style.icon({ class: [props.indeterminateIcon || theme.app.icons.indeterminate, props.ui?.icon] })"
62
- data-part="icon"
63
- ></span>
64
- <span v-else :class="style.icon({ class: [props.icon, theme.app.icons.check, props.ui?.icon] })" data-part="icon"></span>
65
- </CheckboxIndicator>
67
+ <template #default="{ modelValue }">
68
+ <CheckboxIndicator :class="ui.indicator({ class: props.ui?.indicator })" data-part="indicator">
69
+ <Icon
70
+ v-if="modelValue === 'indeterminate'"
71
+ :name="props.indeterminateIcon || appConfig.ui.icons.minus"
72
+ :class="ui.icon({ class: props.ui?.icon })"
73
+ data-part="icon"
74
+ />
75
+ <Icon
76
+ v-else
77
+ :name="props.icon || appConfig.ui.icons.check"
78
+ :class="ui.icon({ class: props.ui?.icon })"
79
+ data-part="icon"
80
+ />
81
+ </CheckboxIndicator>
82
+ </template>
66
83
  </CheckboxRoot>
67
84
  </div>
68
- <div v-if="props.label || slots.label || props.description || slots.description" :class="style.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
69
- <Label v-if="props.label || slots.label" :for="id" :class="style.label({ class: props.ui?.label })" data-part="label">
70
- <slot name="label" :label="props.label">{{ props.label }}</slot>
71
- </Label>
72
- <p v-if="props.description || slots.description" :class="style.description({ class: props.ui?.description })" data-part="description">
85
+ <div v-if="props.label || !!slots.label || props.description || !!slots.description" :class="ui.wrapper({ class: props.ui?.wrapper })" data-part="wrapper">
86
+ <component
87
+ :is="!props.variant || props.variant === 'list' ? Label : 'p'"
88
+ v-if="props.label || !!slots.label"
89
+ :for="id"
90
+ :class="ui.label({ class: props.ui?.label })"
91
+ data-part="label"
92
+ >
93
+ <slot name="label" :label="props.label">
94
+ {{ props.label }}
95
+ </slot>
96
+ </component>
97
+ <p v-if="props.description || !!slots.description" :class="ui.description({ class: props.ui?.description })" data-part="description">
73
98
  <slot name="description" :description="props.description">
74
99
  {{ props.description }}
75
100
  </slot>
@@ -1,20 +1,10 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
- import type { CheckboxRootProps, PrimitiveProps } from 'reka-ui';
3
- import type { checkbox } from '../theme/index.js';
4
- import type { ComponentAttrs } from '../types/index.js';
5
- export interface CheckboxEmits {
6
- change: [payload: Event];
7
- }
8
- export interface CheckboxSlots {
9
- label?: (props: {
10
- label?: string;
11
- }) => any;
12
- description?: (props: {
13
- description?: string;
14
- }) => any;
15
- }
16
- type CheckboxVariants = VariantProps<typeof checkbox>;
17
- export interface CheckboxProps extends ComponentAttrs<typeof checkbox>, Pick<CheckboxRootProps, 'disabled' | 'required' | 'name' | 'value' | 'id' | 'defaultValue'> {
2
+ import type { CheckboxRootEmits, CheckboxRootProps, PrimitiveProps } from 'reka-ui';
3
+ import theme from '#build/ui/checkbox';
4
+ import type { ComponentBaseProps, ComponentUIProps, IconProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface CheckboxProps extends ComponentBaseProps, Pick<CheckboxRootProps, 'disabled' | 'required' | 'name' | 'value' | 'id' | 'defaultValue'> {
18
8
  /**
19
9
  * The element or component this component should render as.
20
10
  * @default "div"
@@ -22,32 +12,49 @@ export interface CheckboxProps extends ComponentAttrs<typeof checkbox>, Pick<Che
22
12
  as?: PrimitiveProps['as'];
23
13
  label?: string;
24
14
  description?: string;
25
- size?: CheckboxVariants['size'];
15
+ /** @default "list" */
16
+ variant?: ThemeVariants['variant'];
17
+ /** @default "primary" */
18
+ color?: ThemeVariants['color'];
19
+ /** @default "md" */
20
+ size?: ThemeVariants['size'];
21
+ /** @default "start" */
22
+ indicator?: ThemeVariants['indicator'];
26
23
  /**
27
24
  * The icon displayed when checked.
28
25
  * @default app.icons.check
29
26
  */
30
- icon?: string;
27
+ icon?: IconProps['name'];
31
28
  /**
32
29
  * The icon displayed when the checkbox is indeterminate.
33
- * @default app.icons.indeterminate
30
+ * @default app.icons.minus
34
31
  */
35
- indeterminateIcon?: string;
32
+ indeterminateIcon?: IconProps['name'];
33
+ modelValue?: boolean | 'indeterminate';
34
+ ui?: ComponentUIProps<typeof theme>;
35
+ }
36
+ export type CheckboxEmits = CheckboxRootEmits & {
37
+ change: [event: Event];
38
+ };
39
+ export interface CheckboxSlots {
40
+ label: StaticSlot<{
41
+ label?: string;
42
+ }>;
43
+ description: StaticSlot<{
44
+ description?: string;
45
+ }>;
36
46
  }
37
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<CheckboxProps & {
38
- modelValue?: boolean | "indeterminate";
39
- }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
40
- change: (payload: Event) => any;
47
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<CheckboxProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
48
+ change: (event: Event) => any;
41
49
  "update:modelValue": (value: boolean | "indeterminate") => any;
42
- }, string, import("vue").PublicProps, Readonly<CheckboxProps & {
43
- modelValue?: boolean | "indeterminate";
44
- }> & Readonly<{
45
- onChange?: ((payload: Event) => any) | undefined;
50
+ }, string, import("vue").PublicProps, Readonly<CheckboxProps> & Readonly<{
51
+ onChange?: ((event: Event) => any) | undefined;
46
52
  "onUpdate:modelValue"?: ((value: boolean | "indeterminate") => any) | undefined;
47
53
  }>, {
48
54
  disabled: boolean;
49
55
  required: boolean;
50
56
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, CheckboxSlots>;
57
+ declare const _default: typeof __VLS_export;
51
58
  export default _default;
52
59
  type __VLS_WithSlots<T, S> = T & {
53
60
  new (): {