@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,67 +1,49 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { SelectArrowProps, SelectContentEmits, SelectContentProps, SelectRootEmits, SelectRootProps } from 'reka-ui';
3
- import type { UseComponentIconsProps } from '../composables/useComponentIcons.js';
4
- import type { select } from '../theme/index.js';
5
- import type { AcceptableValue, ArrayOrNested, ComponentAttrs, EmitsToProps, GetItemKeys, GetModelValue, GetModelValueEmits, NestedItem } from '../types/index.js';
6
- interface SelectItemBase {
3
+ import theme from '#build/ui/select';
4
+ import type { UseComponentIconsProps } from '../composables/useComponentIcons';
5
+ import type { AvatarProps, ChipProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps } from '../types';
6
+ import type { AcceptableValue, ArrayOrNested, EmitsToProps, GetItemKeys, GetModelValue, GetModelValueEmits, MaybeNull, NestedItem, StaticSlot } from '../types/utils';
7
+ export type SelectValue = Exclude<AcceptableValue, boolean>;
8
+ export type SelectItem = SelectValue | {
7
9
  label?: string;
8
- icon?: string;
10
+ description?: string;
11
+ icon?: IconProps['name'];
12
+ avatar?: AvatarProps;
13
+ chip?: ChipProps;
9
14
  /**
10
- * The option type.
11
- * @default "option"
15
+ * The item type.
16
+ * @default "item"
12
17
  */
13
- type?: 'label' | 'separator' | 'option';
14
- value?: AcceptableValue;
18
+ type?: 'label' | 'separator' | 'item';
19
+ value?: SelectValue;
15
20
  disabled?: boolean;
21
+ onSelect?: (e: Event) => void;
22
+ ui?: Pick<ComponentUIProps<typeof theme>, 'label' | 'separator' | 'item' | 'itemLeadingIcon' | 'itemLeadingAvatarSize' | 'itemLeadingAvatar' | 'itemLeadingChipSize' | 'itemLeadingChip' | 'itemWrapper' | 'itemLabel' | 'itemDescription' | 'itemTrailing' | 'itemTrailingIcon'>;
23
+ class?: ComponentBaseProps['class'];
16
24
  [key: string]: any;
17
- }
18
- export type SelectItem = SelectItemBase | string | number | boolean;
19
- export type SelectEmits<T extends ArrayOrNested<SelectItem>, VK extends GetItemKeys<T> | undefined, M extends boolean> = Omit<SelectRootEmits, 'update:modelValue'> & {
20
- change: [payload: Event];
21
- blur: [payload: FocusEvent];
22
- focus: [payload: FocusEvent];
23
- } & GetModelValueEmits<T, VK, M>;
24
- type SlotProps<T extends SelectItem> = (props: {
25
- item: T;
26
- index: number;
27
- }) => any;
28
- export interface SelectSlots<T extends ArrayOrNested<SelectItem> = ArrayOrNested<SelectItem>, VK extends GetItemKeys<T> | undefined = undefined, M extends boolean = false, I extends NestedItem<T> = NestedItem<T>> {
29
- 'leading'?: (props: {
30
- modelValue?: GetModelValue<T, VK, M>;
31
- open: boolean;
32
- ui: ComponentAttrs<typeof select>['ui'];
33
- }) => any;
34
- 'default'?: (props: {
35
- modelValue?: GetModelValue<T, VK, M>;
36
- open: boolean;
37
- }) => any;
38
- 'trailing'?: (props: {
39
- modelValue?: GetModelValue<T, VK, M>;
40
- open: boolean;
41
- ui: ComponentAttrs<typeof select>['ui'];
42
- }) => any;
43
- 'item'?: SlotProps<I>;
44
- 'item-leading'?: SlotProps<I>;
45
- 'item-label'?: SlotProps<I>;
46
- 'item-trailing'?: SlotProps<I>;
47
- }
48
- type SelectVariants = VariantProps<typeof select>;
49
- export interface SelectProps<T extends ArrayOrNested<SelectItem> = ArrayOrNested<SelectItem>, VK extends GetItemKeys<T> = 'value', M extends boolean = false> extends ComponentAttrs<typeof select>, UseComponentIconsProps, Omit<SelectRootProps<T>, 'dir' | 'multiple' | 'modelValue' | 'defaultValue' | 'by'> {
25
+ };
26
+ type ThemeVariants = VariantProps<typeof theme>;
27
+ export interface SelectProps<T extends ArrayOrNested<SelectItem> = ArrayOrNested<SelectItem>, VK extends GetItemKeys<T> = 'value', M extends boolean = false> extends ComponentBaseProps, UseComponentIconsProps, Omit<SelectRootProps<T>, 'dir' | 'multiple' | 'modelValue' | 'defaultValue' | 'by'> {
50
28
  id?: string;
51
29
  /** The placeholder text when the select is empty. */
52
30
  placeholder?: string;
53
- variant?: SelectVariants['variant'];
54
- size?: SelectVariants['size'];
31
+ /** @default "outline" */
32
+ variant?: ThemeVariants['variant'];
33
+ /** @default "md" */
34
+ size?: ThemeVariants['size'];
35
+ /** @default "primary" */
36
+ color?: ThemeVariants['color'];
55
37
  /**
56
38
  * The icon displayed to open the menu.
57
39
  * @default app.icons.chevronDown
58
40
  */
59
- trailingIcon?: string;
41
+ trailingIcon?: IconProps['name'];
60
42
  /**
61
43
  * The icon displayed when an item is selected.
62
44
  * @default app.icons.check
63
45
  */
64
- selectedIcon?: string;
46
+ selectedIcon?: IconProps['name'];
65
47
  /**
66
48
  * The content of the menu.
67
49
  * @default { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }
@@ -76,44 +58,203 @@ export interface SelectProps<T extends ArrayOrNested<SelectItem> = ArrayOrNested
76
58
  * Render the menu in a portal.
77
59
  * @default true
78
60
  */
79
- portal?: boolean;
61
+ portal?: boolean | string | HTMLElement;
80
62
  /**
81
- * When `options` is an array of objects, select the field to use as the value.
63
+ * When `items` is an array of objects, select the field to use as the value.
82
64
  * @default "value"
83
65
  */
84
66
  valueKey?: VK;
85
67
  /**
86
- * When `options` is an array of objects, select the field to use as the label.
68
+ * When `items` is an array of objects, select the field to use as the label.
87
69
  * @default "label"
88
70
  */
89
- labelKey?: VK;
90
- options?: T;
71
+ labelKey?: GetItemKeys<T>;
72
+ /**
73
+ * When `items` is an array of objects, select the field to use as the description.
74
+ * @default "description"
75
+ */
76
+ descriptionKey?: GetItemKeys<T>;
77
+ items?: T;
91
78
  /** The value of the Select when initially rendered. Use when you do not need to control the state of the Select. */
92
- defaultValue?: GetModelValue<T, VK, M> | null;
79
+ defaultValue?: MaybeNull<GetModelValue<T, VK, M>>;
93
80
  /** The controlled value of the Select. Can be bind as `v-model`. */
94
- modelValue?: GetModelValue<T, VK, M> | null;
81
+ modelValue?: MaybeNull<GetModelValue<T, VK, M>>;
95
82
  /** Whether multiple options can be selected or not. */
96
83
  multiple?: M & boolean;
97
84
  /** Highlight the ring color like a focus state. */
98
85
  highlight?: boolean;
99
- underline?: boolean;
86
+ autofocus?: boolean;
87
+ autofocusDelay?: number;
88
+ ui?: ComponentUIProps<typeof theme>;
89
+ }
90
+ export type SelectEmits<A extends ArrayOrNested<SelectItem>, VK extends GetItemKeys<A> | undefined, M extends boolean> = Omit<SelectRootEmits, 'update:modelValue'> & {
91
+ change: [event: Event];
92
+ blur: [event: FocusEvent];
93
+ focus: [event: FocusEvent];
94
+ } & GetModelValueEmits<A, VK, M>;
95
+ export interface SelectSlots<A extends ArrayOrNested<SelectItem> = ArrayOrNested<SelectItem>, VK extends GetItemKeys<A> | undefined = undefined, M extends boolean = false, T extends NestedItem<A> = NestedItem<A>> {
96
+ 'leading': StaticSlot<{
97
+ modelValue?: MaybeNull<GetModelValue<A, VK, M>>;
98
+ open: boolean;
99
+ ui: ComponentStyler<typeof theme>;
100
+ }>;
101
+ 'default': StaticSlot<{
102
+ modelValue?: MaybeNull<GetModelValue<A, VK, M>>;
103
+ open: boolean;
104
+ ui: ComponentStyler<typeof theme>;
105
+ }>;
106
+ 'trailing': StaticSlot<{
107
+ modelValue?: MaybeNull<GetModelValue<A, VK, M>>;
108
+ open: boolean;
109
+ ui: ComponentStyler<typeof theme>;
110
+ }>;
111
+ 'item': StaticSlot<{
112
+ item: T;
113
+ index: number;
114
+ ui: ComponentStyler<typeof theme>;
115
+ }>;
116
+ 'item-leading': StaticSlot<{
117
+ item: T;
118
+ index: number;
119
+ ui: ComponentStyler<typeof theme>;
120
+ }>;
121
+ 'item-label': StaticSlot<{
122
+ item: T;
123
+ index: number;
124
+ }>;
125
+ 'item-description': StaticSlot<{
126
+ item: T;
127
+ index: number;
128
+ }>;
129
+ 'item-trailing': StaticSlot<{
130
+ item: T;
131
+ index: number;
132
+ ui: ComponentStyler<typeof theme>;
133
+ }>;
134
+ 'content-top': StaticSlot;
135
+ 'content-bottom': StaticSlot;
100
136
  }
101
- declare const _default: <T extends ArrayOrNested<SelectItem>, VK extends GetItemKeys<T> = "value", M extends boolean = false>(__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<{
102
- props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
103
- readonly onBlur?: ((payload: FocusEvent) => any) | undefined;
104
- readonly onChange?: ((payload: Event) => any) | undefined;
105
- readonly onFocus?: ((payload: FocusEvent) => any) | undefined;
106
- readonly "onUpdate:open"?: ((value: boolean) => any) | undefined;
107
- readonly "onUpdate:modelValue"?: ((payload: GetModelValue<T, VK, M>) => any) | undefined;
108
- } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onFocus" | "onBlur" | "onChange" | "onUpdate:open" | "onUpdate:modelValue"> & SelectProps<T, VK, M> & Partial<{}>> & import("vue").PublicProps;
109
- expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
137
+ declare const __VLS_export: <T extends ArrayOrNested<SelectItem>, VK extends GetItemKeys<T> = "value", M extends boolean = false>(__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<{
138
+ props: __VLS_PrettifyLocal<SelectProps<T, VK, M> & {
139
+ onChange?: ((event: Event) => any) | undefined;
140
+ onBlur?: ((event: FocusEvent) => any) | undefined;
141
+ onFocus?: ((event: FocusEvent) => any) | undefined;
142
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
143
+ "onUpdate:modelValue"?: ((value: GetModelValue<T, VK, M>) => any) | undefined;
144
+ }> & import("vue").PublicProps;
145
+ expose: (exposed: import("vue").ShallowUnwrapRef<{
146
+ triggerRef: import("vue").ShallowRef<MaybeNull<{
147
+ $: import("vue").ComponentInternalInstance;
148
+ $data: {};
149
+ $props: {
150
+ readonly disabled?: boolean | undefined;
151
+ readonly reference?: import("reka-ui").ReferenceElement | undefined;
152
+ readonly asChild?: boolean | undefined;
153
+ readonly as?: (import("reka-ui").AsTag | import("vue").Component) | undefined;
154
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
155
+ $attrs: {
156
+ [x: string]: unknown;
157
+ };
158
+ $refs: {
159
+ [x: string]: unknown;
160
+ };
161
+ $slots: Readonly<{
162
+ [name: string]: import("vue").Slot<any> | undefined;
163
+ }>;
164
+ $root: import("vue").ComponentPublicInstance | null;
165
+ $parent: import("vue").ComponentPublicInstance | null;
166
+ $host: Element | null;
167
+ $emit: (event: string, ...args: any[]) => void;
168
+ $el: any;
169
+ $options: import("vue").ComponentOptionsBase<Readonly<import("reka-ui").SelectTriggerProps> & Readonly<{}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {
170
+ as: import("reka-ui").AsTag | import("vue").Component;
171
+ }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & {
172
+ beforeCreate?: (() => void) | (() => void)[];
173
+ created?: (() => void) | (() => void)[];
174
+ beforeMount?: (() => void) | (() => void)[];
175
+ mounted?: (() => void) | (() => void)[];
176
+ beforeUpdate?: (() => void) | (() => void)[];
177
+ updated?: (() => void) | (() => void)[];
178
+ activated?: (() => void) | (() => void)[];
179
+ deactivated?: (() => void) | (() => void)[];
180
+ beforeDestroy?: (() => void) | (() => void)[];
181
+ beforeUnmount?: (() => void) | (() => void)[];
182
+ destroyed?: (() => void) | (() => void)[];
183
+ unmounted?: (() => void) | (() => void)[];
184
+ renderTracked?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
185
+ renderTriggered?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
186
+ errorCaptured?: ((err: unknown, instance: import("vue").ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import("vue").ComponentPublicInstance | null, info: string) => boolean | void)[];
187
+ };
188
+ $forceUpdate: () => void;
189
+ $nextTick: typeof import("vue").nextTick;
190
+ $watch<T_1 extends string | ((...args: any) => any)>(source: T_1, cb: T_1 extends (...args: any) => infer R ? (...args: [R, R, import("@vue/reactivity").OnCleanup]) => any : (...args: [any, any, import("@vue/reactivity").OnCleanup]) => any, options?: import("vue").WatchOptions): import("vue").WatchStopHandle;
191
+ } & Readonly<{
192
+ as: import("reka-ui").AsTag | import("vue").Component;
193
+ }> & Omit<Readonly<import("reka-ui").SelectTriggerProps> & Readonly<{}>, "as"> & import("vue").ShallowUnwrapRef<{}> & {} & import("vue").ComponentCustomProperties & {} & {
194
+ $slots: {
195
+ default?: (props: {}) => any;
196
+ };
197
+ }>, MaybeNull<{
198
+ $: import("vue").ComponentInternalInstance;
199
+ $data: {};
200
+ $props: {
201
+ readonly disabled?: boolean | undefined;
202
+ readonly reference?: import("reka-ui").ReferenceElement | undefined;
203
+ readonly asChild?: boolean | undefined;
204
+ readonly as?: (import("reka-ui").AsTag | import("vue").Component) | undefined;
205
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
206
+ $attrs: {
207
+ [x: string]: unknown;
208
+ };
209
+ $refs: {
210
+ [x: string]: unknown;
211
+ };
212
+ $slots: Readonly<{
213
+ [name: string]: import("vue").Slot<any> | undefined;
214
+ }>;
215
+ $root: import("vue").ComponentPublicInstance | null;
216
+ $parent: import("vue").ComponentPublicInstance | null;
217
+ $host: Element | null;
218
+ $emit: (event: string, ...args: any[]) => void;
219
+ $el: any;
220
+ $options: import("vue").ComponentOptionsBase<Readonly<import("reka-ui").SelectTriggerProps> & Readonly<{}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, {
221
+ as: import("reka-ui").AsTag | import("vue").Component;
222
+ }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & {
223
+ beforeCreate?: (() => void) | (() => void)[];
224
+ created?: (() => void) | (() => void)[];
225
+ beforeMount?: (() => void) | (() => void)[];
226
+ mounted?: (() => void) | (() => void)[];
227
+ beforeUpdate?: (() => void) | (() => void)[];
228
+ updated?: (() => void) | (() => void)[];
229
+ activated?: (() => void) | (() => void)[];
230
+ deactivated?: (() => void) | (() => void)[];
231
+ beforeDestroy?: (() => void) | (() => void)[];
232
+ beforeUnmount?: (() => void) | (() => void)[];
233
+ destroyed?: (() => void) | (() => void)[];
234
+ unmounted?: (() => void) | (() => void)[];
235
+ renderTracked?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
236
+ renderTriggered?: ((e: import("vue").DebuggerEvent) => void) | ((e: import("vue").DebuggerEvent) => void)[];
237
+ errorCaptured?: ((err: unknown, instance: import("vue").ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import("vue").ComponentPublicInstance | null, info: string) => boolean | void)[];
238
+ };
239
+ $forceUpdate: () => void;
240
+ $nextTick: typeof import("vue").nextTick;
241
+ $watch<T_1 extends string | ((...args: any) => any)>(source: T_1, cb: T_1 extends (...args: any) => infer R ? (...args: [R, R, import("@vue/reactivity").OnCleanup]) => any : (...args: [any, any, import("@vue/reactivity").OnCleanup]) => any, options?: import("vue").WatchOptions): import("vue").WatchStopHandle;
242
+ } & Readonly<{
243
+ as: import("reka-ui").AsTag | import("vue").Component;
244
+ }> & Omit<Readonly<import("reka-ui").SelectTriggerProps> & Readonly<{}>, "as"> & import("vue").ShallowUnwrapRef<{}> & {} & import("vue").ComponentCustomProperties & {} & {
245
+ $slots: {
246
+ default?: (props: {}) => any;
247
+ };
248
+ }>>;
249
+ }>) => void;
110
250
  attrs: any;
111
251
  slots: SelectSlots<T, VK, M, NestedItem<T>>;
112
- emit: ((evt: "blur", payload: FocusEvent) => void) & ((evt: "change", payload: Event) => void) & ((evt: "focus", payload: FocusEvent) => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "update:modelValue", payload: GetModelValue<T, VK, M>) => void);
252
+ emit: ((evt: "change", event: Event) => void) & ((evt: "blur", event: FocusEvent) => void) & ((evt: "focus", event: FocusEvent) => void) & ((evt: "update:open", value: boolean) => void) & ((evt: "update:modelValue", value: GetModelValue<T, VK, M>) => void);
113
253
  }>) => import("vue").VNode & {
114
254
  __ctx?: Awaited<typeof __VLS_setup>;
115
255
  };
256
+ declare const _default: typeof __VLS_export;
116
257
  export default _default;
117
258
  type __VLS_PrettifyLocal<T> = {
118
- [K in keyof T]: T[K];
259
+ [K in keyof T as K]: T[K];
119
260
  } & {};
@@ -1,41 +1,67 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/separator";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
7
  import { Separator, useForwardProps } from "reka-ui";
8
8
  import { computed } from "vue";
9
- import { useTheme } from "../composables/useTheme";
9
+ import { useAppConfig } from "#imports";
10
+ import { cv, merge } from "../utils/style";
11
+ import Avatar from "./Avatar.vue";
12
+ import Icon from "./Icon.vue";
10
13
  const props = defineProps({
14
+ as: { type: null, required: false },
11
15
  orientation: { type: null, required: false, default: "horizontal" },
12
- align: { type: String, required: false },
16
+ color: { type: null, required: false },
17
+ size: { type: null, required: false },
18
+ type: { type: null, required: false },
19
+ align: { type: String, required: false, default: "center" },
13
20
  label: { type: String, required: false },
14
- icon: { type: String, required: false },
15
- class: { type: null, required: false },
21
+ icon: { type: [String, Object], required: false },
22
+ avatar: { type: Object, required: false },
16
23
  ui: { type: null, required: false },
17
- as: { type: null, required: false },
24
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
18
25
  decorative: { type: Boolean, required: false }
19
26
  });
20
27
  const slots = defineSlots();
21
28
  const rootProps = useForwardProps(reactivePick(props, "as", "decorative", "orientation"));
22
- const { generateStyle } = useTheme();
23
- const style = computed(() => generateStyle("separator", props));
29
+ const appConfig = useAppConfig();
30
+ const ui = computed(() => {
31
+ const styler = cv(merge(theme, appConfig.ui.separator));
32
+ return styler(props);
33
+ });
24
34
  </script>
25
35
 
26
36
  <template>
27
- <Separator v-bind="rootProps" :class="style.root({ class: [props.class, props.ui?.root] })" data-part="root">
28
- <div :class="style.line({ class: props.ui?.line, start: props.align === 'start' })" data-part="line"></div>
37
+ <Separator v-bind="rootProps" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
38
+ <div :class="ui.border({ class: props.ui?.border, start: props.align === 'start' })" data-part="border"></div>
29
39
 
30
- <template v-if="props.label || props.icon || slots.default">
31
- <div :class="style.container({ class: props.ui?.container })" data-part="container">
32
- <slot>
33
- <span v-if="props.label" :class="style.label({ class: props.ui?.label })" data-part="label">{{ props.label }}</span>
34
- <span v-else-if="props.icon" :class="style.icon({ class: [props.icon, props.ui?.icon] })" data-part="icon"></span>
40
+ <template v-if="props.label || props.icon || props.avatar || !!slots.default">
41
+ <div :class="ui.container({ class: props.ui?.container })" data-part="container">
42
+ <slot :ui="ui">
43
+ <span
44
+ v-if="props.label"
45
+ :class="ui.label({ class: props.ui?.label })"
46
+ data-part="label"
47
+ >{{ props.label }}</span>
48
+ <Icon
49
+ v-else-if="props.icon"
50
+ :name="props.icon"
51
+ :class="ui.icon({ class: props.ui?.icon })"
52
+ data-part="icon"
53
+ />
54
+ <Avatar
55
+ v-else-if="props.avatar"
56
+ :size="props.ui?.avatarSize || ui.avatarSize()"
57
+ v-bind="props.avatar"
58
+ :class="ui.avatar({ class: props.ui?.avatar })"
59
+ data-part="avatar"
60
+ />
35
61
  </slot>
36
62
  </div>
37
63
 
38
- <div :class="style.line({ class: props.ui?.line, end: props.align === 'end' })" data-part="line"></div>
64
+ <div :class="ui.border({ class: props.ui?.border, end: props.align === 'end' })" data-part="border"></div>
39
65
  </template>
40
66
  </Separator>
41
67
  </template>
@@ -1,24 +1,45 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
- import type { SeparatorProps as RekaSeparatorProps } from 'reka-ui';
3
- import type { separator } from '../theme/index.js';
4
- import type { ComponentAttrs } from '../types/index.js';
5
- export interface SeparatorSlots {
6
- default?: (props: {}) => any;
7
- }
8
- type SeparatorVariants = VariantProps<typeof separator>;
9
- export interface SeparatorProps extends ComponentAttrs<typeof separator>, Pick<RekaSeparatorProps, 'as' | 'decorative'> {
10
- orientation?: SeparatorVariants['orientation'];
2
+ import type { SeparatorProps as _SeparatorProps } from 'reka-ui';
3
+ import theme from '#build/ui/separator';
4
+ import type { AvatarProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface SeparatorProps extends ComponentBaseProps, Pick<_SeparatorProps, 'decorative'> {
8
+ /**
9
+ * The element or component this component should render as.
10
+ * @default "div"
11
+ */
12
+ as?: _SeparatorProps['as'];
13
+ /**
14
+ * The orientation of the separator.
15
+ * @default "horizontal"
16
+ */
17
+ orientation?: ThemeVariants['orientation'];
18
+ /** @default "neutral" */
19
+ color?: ThemeVariants['color'];
20
+ /** @default "xs" */
21
+ size?: ThemeVariants['size'];
22
+ /** @default "solid" */
23
+ type?: ThemeVariants['type'];
11
24
  align?: 'start' | 'end' | 'center';
12
25
  /** Display a label in the middle. */
13
26
  label?: string;
14
- /**
15
- * Display an icon in the middle.
16
- */
17
- icon?: string;
27
+ /** Display an icon in the middle. */
28
+ icon?: IconProps['name'];
29
+ /** Display an avatar in the middle. */
30
+ avatar?: AvatarProps;
31
+ ui?: ComponentUIProps<typeof theme>;
32
+ }
33
+ export interface SeparatorSlots {
34
+ default: StaticSlot<{
35
+ ui: ComponentStyler<typeof theme>;
36
+ }>;
18
37
  }
19
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<SeparatorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<SeparatorProps> & Readonly<{}>, {
38
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<SeparatorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<SeparatorProps> & Readonly<{}>, {
20
39
  orientation: "horizontal" | "vertical";
40
+ align: "start" | "end" | "center";
21
41
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, SeparatorSlots>;
42
+ declare const _default: typeof __VLS_export;
22
43
  export default _default;
23
44
  type __VLS_WithSlots<T, S> = T & {
24
45
  new (): {
@@ -1,21 +1,33 @@
1
1
  <script>
2
-
2
+ import { useAppConfig } from "#imports";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { Primitive } from "reka-ui";
7
7
  import { computed } from "vue";
8
- import { useTheme } from "../composables/useTheme";
8
+ import theme from "#build/ui/skeleton";
9
+ import { cv, merge } from "../utils/style";
9
10
  const props = defineProps({
10
11
  as: { type: null, required: false },
11
- class: { type: null, required: false }
12
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
13
+ });
14
+ const appConfig = useAppConfig();
15
+ const ui = computed(() => {
16
+ const styler = cv(merge(theme, appConfig.ui.skeleton));
17
+ return styler(props);
12
18
  });
13
- const { generateStyle } = useTheme();
14
- const styler = computed(() => generateStyle("skeleton", props));
15
19
  </script>
16
20
 
17
21
  <template>
18
- <Primitive :as="props.as" :class="styler" data-part="base">
22
+ <Primitive
23
+ :as="props.as"
24
+ aria-busy="true"
25
+ aria-label="loading"
26
+ aria-live="polite"
27
+ role="alert"
28
+ :class="ui.base({ class: props.class })"
29
+ data-part="base"
30
+ >
19
31
  <slot></slot>
20
32
  </Primitive>
21
33
  </template>
@@ -1,16 +1,16 @@
1
1
  import type { PrimitiveProps } from 'reka-ui';
2
- import type { skeleton } from '../theme/index.js';
3
- import type { ComponentAttrs } from '../types/index.js';
4
- export interface SkeletonProps extends Omit<ComponentAttrs<typeof skeleton>, 'ui'> {
2
+ import type { ComponentBaseProps } from '../types';
3
+ export interface SkeletonProps extends ComponentBaseProps {
5
4
  /**
6
5
  * The element or component this component should render as.
7
6
  * @default "div"
8
7
  */
9
8
  as?: PrimitiveProps['as'];
10
9
  }
11
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<SkeletonProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<SkeletonProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
10
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<SkeletonProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<SkeletonProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
12
11
  default?: (props: {}) => any;
13
12
  }>;
13
+ declare const _default: typeof __VLS_export;
14
14
  export default _default;
15
15
  type __VLS_WithSlots<T, S> = T & {
16
16
  new (): {
@@ -1,32 +1,36 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/slider";
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 { SliderRange, SliderRoot, SliderThumb, SliderTrack, useForwardPropsEmits } from "reka-ui";
8
8
  import { computed } 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 Tooltip from "./Tooltip.vue";
11
13
  const props = defineProps({
12
- modelValue: { type: [Number, Array], required: false },
14
+ as: { type: null, required: false },
13
15
  size: { type: null, required: false },
16
+ color: { type: null, required: false },
14
17
  orientation: { type: null, required: false, default: "horizontal" },
15
- defaultValue: { type: [Number, Array], required: false },
16
- class: { type: null, required: false },
18
+ tooltip: { type: [Boolean, Object], required: false },
19
+ modelValue: { type: null, required: false },
20
+ defaultValue: { type: null, required: false },
17
21
  ui: { type: null, required: false },
18
- as: { type: null, required: false },
22
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
19
23
  name: { type: String, required: false },
20
24
  disabled: { type: Boolean, required: false },
21
25
  inverted: { type: Boolean, required: false },
22
- min: { type: Number, required: false },
26
+ min: { type: Number, required: false, default: 0 },
23
27
  max: { type: Number, required: false, default: 100 },
24
28
  step: { type: Number, required: false, default: 1 },
25
29
  minStepsBetweenThumbs: { type: Number, required: false }
26
30
  });
27
31
  const emit = defineEmits(["update:modelValue", "change"]);
28
- const rootProps = useForwardPropsEmits(reactivePick(props, "as", "orientation", "min", "max", "step", "minStepsBetweenThumbs", "inverted"), emit);
29
- const modelValue = defineModel({ type: [Number, Array] });
32
+ const modelValue = useVModel(props, "modelValue", emit);
33
+ const rootProps = useForwardPropsEmits(reactivePick(props, "as", "min", "max", "step", "minStepsBetweenThumbs", "inverted"), emit);
30
34
  const defaultSliderValue = computed(() => {
31
35
  if (typeof props.defaultValue === "number")
32
36
  return [props.defaultValue];
@@ -42,18 +46,22 @@ const sliderValue = computed({
42
46
  modelValue.value = value?.length === 1 ? value[0] : value;
43
47
  }
44
48
  });
45
- const thumbsCount = computed(() => sliderValue.value?.length ?? 1);
46
- const { id, size, name, disabled, ariaAttrs, emitFormChange, emitFormInput } = useFormItem(props);
47
- const { generateStyle } = useTheme();
48
- const style = computed(() => generateStyle("slider", {
49
- ...props,
50
- size: size.value
51
- }));
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
+ });
52
61
  function onChange(value) {
53
62
  const event = new Event("change", { target: { value } });
54
63
  emit("change", event);
55
64
  emitFormChange();
56
- emitFormInput();
57
65
  }
58
66
  </script>
59
67
 
@@ -62,15 +70,25 @@ function onChange(value) {
62
70
  v-bind="{ ...rootProps, ...ariaAttrs, id, name, disabled }"
63
71
  v-model="sliderValue"
64
72
  :default-value="defaultSliderValue"
65
- :class="style.root({ class: [props.class, props.ui?.root] })"
73
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
74
+ :data-steps="thumbs"
66
75
  data-part="root"
67
- :data-steps="thumbsCount"
76
+ @update:model-value="emitFormInput()"
68
77
  @value-commit="onChange"
69
78
  >
70
- <SliderTrack :class="style.track({ class: props.ui?.track })" data-part="track">
71
- <SliderRange :class="style.range({ class: props.ui?.range })" data-part="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" />
72
81
  </SliderTrack>
73
82
 
74
- <SliderThumb v-for="count in thumbsCount" :key="count" :class="style.thumb({ class: props.ui?.thumb })" data-part="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" :aria-label="thumbs === 1 ? 'Thumb' : `Thumb ${thumb} of ${thumbs}`" />
92
+ </Tooltip>
75
93
  </SliderRoot>
76
94
  </template>