@byyuurin/ui 0.0.11 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +170 -58
  2. package/dist/module.d.mts +4 -13
  3. package/dist/module.json +4 -4
  4. package/dist/module.mjs +54 -20
  5. package/dist/runtime/components/Accordion.vue +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 +48 -39
  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 +80 -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/Chip.vue +35 -32
  30. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  31. package/dist/runtime/components/Collapsible.vue +13 -9
  32. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  33. package/dist/runtime/components/Drawer.vue +80 -70
  34. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  35. package/dist/runtime/components/DropdownMenu.vue +23 -16
  36. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  37. package/dist/runtime/components/DropdownMenuContent.vue +133 -103
  38. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  39. package/dist/runtime/components/FieldGroup.vue +33 -0
  40. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  41. package/dist/runtime/components/Form.vue +172 -88
  42. package/dist/runtime/components/Form.vue.d.ts +69 -44
  43. package/dist/runtime/components/FormField.vue +108 -0
  44. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  45. package/dist/runtime/components/Icon.vue +20 -0
  46. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  47. package/dist/runtime/components/Input.vue +82 -77
  48. package/dist/runtime/components/Input.vue.d.ts +55 -43
  49. package/dist/runtime/components/InputNumber.vue +65 -49
  50. package/dist/runtime/components/InputNumber.vue.d.ts +51 -105
  51. package/dist/runtime/components/Kbd.vue +11 -5
  52. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  53. package/dist/runtime/components/Link.vue +54 -197
  54. package/dist/runtime/components/Link.vue.d.ts +17 -17
  55. package/dist/runtime/components/LinkBase.vue +11 -33
  56. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  57. package/dist/runtime/components/Modal.vue +53 -39
  58. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  59. package/dist/runtime/components/NavigationMenu.vue +336 -0
  60. package/dist/runtime/components/NavigationMenu.vue.d.ts +181 -0
  61. package/dist/runtime/components/OverlayProvider.vue +3 -3
  62. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  63. package/dist/runtime/components/Pagination.vue +39 -47
  64. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  65. package/dist/runtime/components/PinInput.vue +46 -32
  66. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  67. package/dist/runtime/components/Popover.vue +33 -19
  68. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  69. package/dist/runtime/components/Progress.vue +31 -26
  70. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  71. package/dist/runtime/components/RadioGroup.vue +75 -48
  72. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  73. package/dist/runtime/components/ScrollArea.vue +33 -31
  74. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  75. package/dist/runtime/components/Select.vue +166 -76
  76. package/dist/runtime/components/Select.vue.d.ts +206 -65
  77. package/dist/runtime/components/Separator.vue +42 -16
  78. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  79. package/dist/runtime/components/Skeleton.vue +18 -6
  80. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  81. package/dist/runtime/components/Slider.vue +42 -24
  82. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  83. package/dist/runtime/components/Switch.vue +40 -31
  84. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  85. package/dist/runtime/components/Table.vue +279 -51
  86. package/dist/runtime/components/Table.vue.d.ts +151 -65
  87. package/dist/runtime/components/Tabs.vue +70 -23
  88. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  89. package/dist/runtime/components/Textarea.vue +102 -54
  90. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  91. package/dist/runtime/components/Toast.vue +84 -38
  92. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  93. package/dist/runtime/components/ToastProvider.vue +31 -22
  94. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  95. package/dist/runtime/components/Tooltip.vue +33 -21
  96. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  97. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  98. package/dist/runtime/composables/defineShortcuts.js +129 -0
  99. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  100. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  101. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  102. package/dist/runtime/composables/useComponentIcons.js +4 -4
  103. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  104. package/dist/runtime/composables/useFieldGroup.js +14 -0
  105. package/dist/runtime/composables/useFormField.d.ts +62 -0
  106. package/dist/runtime/composables/useFormField.js +99 -0
  107. package/dist/runtime/composables/useKbd.d.ts +3 -2
  108. package/dist/runtime/composables/useKbd.js +3 -2
  109. package/dist/runtime/composables/useLocale.d.ts +68 -5
  110. package/dist/runtime/composables/useLocale.js +11 -11
  111. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  112. package/dist/runtime/composables/useOverlay.js +44 -30
  113. package/dist/runtime/composables/usePortal.d.ts +6 -0
  114. package/dist/runtime/composables/usePortal.js +17 -0
  115. package/dist/runtime/composables/useToast.d.ts +12 -5
  116. package/dist/runtime/composables/useToast.js +12 -7
  117. package/dist/runtime/locale/en.d.ts +30 -1
  118. package/dist/runtime/locale/en.js +2 -1
  119. package/dist/runtime/locale/index.d.ts +2 -2
  120. package/dist/runtime/locale/index.js +1 -1
  121. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  122. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  123. package/dist/runtime/plugins/colors.d.ts +2 -0
  124. package/dist/runtime/plugins/colors.js +50 -0
  125. package/dist/runtime/types/app.config.d.ts +6 -0
  126. package/dist/runtime/types/form.d.ts +58 -17
  127. package/dist/runtime/types/form.js +11 -0
  128. package/dist/runtime/types/index.d.ts +51 -8
  129. package/dist/runtime/types/index.js +45 -2
  130. package/dist/runtime/types/input.d.ts +8 -0
  131. package/dist/runtime/types/locale.d.ts +5 -0
  132. package/dist/runtime/types/style.d.ts +33 -0
  133. package/dist/runtime/types/style.js +0 -0
  134. package/dist/runtime/types/unocss.d.ts +4 -0
  135. package/dist/runtime/types/utils.d.ts +38 -37
  136. package/dist/runtime/utils/form.d.ts +5 -1
  137. package/dist/runtime/utils/form.js +49 -0
  138. package/dist/runtime/utils/index.d.ts +10 -13
  139. package/dist/runtime/utils/index.js +41 -48
  140. package/dist/runtime/utils/link.d.ts +3 -2
  141. package/dist/runtime/utils/link.js +16 -2
  142. package/dist/runtime/utils/locale.d.ts +5 -0
  143. package/dist/runtime/utils/locale.js +10 -0
  144. package/dist/runtime/utils/style.d.ts +94 -0
  145. package/dist/runtime/utils/style.js +37 -0
  146. package/dist/runtime/vue/components/Icon.vue +15 -0
  147. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  148. package/dist/runtime/vue/components/Link.vue +163 -0
  149. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  150. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  151. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  152. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  153. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  154. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  155. package/dist/runtime/vue/plugins/head.js +9 -0
  156. package/dist/runtime/vue/stubs.d.ts +16 -1
  157. package/dist/runtime/vue/stubs.js +32 -1
  158. package/dist/setup.d.mts +13 -0
  159. package/dist/setup.mjs +12 -0
  160. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  161. package/dist/shared/ui.DSyJHSTk.mjs +3787 -0
  162. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  163. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  164. package/dist/types.d.mts +3 -1
  165. package/dist/unocss.d.mts +12 -52
  166. package/dist/unocss.mjs +144 -254
  167. package/dist/unplugin.d.mts +13 -26
  168. package/dist/unplugin.mjs +193 -18
  169. package/dist/vite.d.mts +10 -1
  170. package/dist/vite.mjs +12 -3
  171. package/package.json +154 -87
  172. package/vue-plugin.d.ts +5 -0
  173. package/dist/module.d.ts +0 -13
  174. package/dist/module.mjs.map +0 -1
  175. package/dist/runtime/app/injections.d.ts +0 -9331
  176. package/dist/runtime/app/injections.js +0 -61
  177. package/dist/runtime/components/ButtonGroup.vue +0 -26
  178. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  179. package/dist/runtime/components/FormItem.vue +0 -90
  180. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  181. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  182. package/dist/runtime/composables/useButtonGroup.js +0 -9
  183. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  184. package/dist/runtime/composables/useFormItem.js +0 -64
  185. package/dist/runtime/composables/useTheme.d.ts +0 -9
  186. package/dist/runtime/composables/useTheme.js +0 -23
  187. package/dist/runtime/index.d.ts +0 -44
  188. package/dist/runtime/index.js +0 -44
  189. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  190. package/dist/runtime/theme/accordion.d.ts +0 -50
  191. package/dist/runtime/theme/accordion.js +0 -28
  192. package/dist/runtime/theme/alert.d.ts +0 -119
  193. package/dist/runtime/theme/alert.js +0 -47
  194. package/dist/runtime/theme/app.d.ts +0 -19
  195. package/dist/runtime/theme/app.js +0 -19
  196. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  197. package/dist/runtime/theme/avatar-group.js +0 -32
  198. package/dist/runtime/theme/avatar.d.ts +0 -50
  199. package/dist/runtime/theme/avatar.js +0 -34
  200. package/dist/runtime/theme/badge.d.ts +0 -76
  201. package/dist/runtime/theme/badge.js +0 -92
  202. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  203. package/dist/runtime/theme/breadcrumb.js +0 -44
  204. package/dist/runtime/theme/button-group.d.ts +0 -60
  205. package/dist/runtime/theme/button-group.js +0 -42
  206. package/dist/runtime/theme/button.d.ts +0 -184
  207. package/dist/runtime/theme/button.js +0 -164
  208. package/dist/runtime/theme/calendar.d.ts +0 -58
  209. package/dist/runtime/theme/calendar.js +0 -86
  210. package/dist/runtime/theme/card.d.ts +0 -56
  211. package/dist/runtime/theme/card.js +0 -37
  212. package/dist/runtime/theme/carousel.d.ts +0 -107
  213. package/dist/runtime/theme/carousel.js +0 -43
  214. package/dist/runtime/theme/checkbox.d.ts +0 -82
  215. package/dist/runtime/theme/checkbox.js +0 -54
  216. package/dist/runtime/theme/chip.d.ts +0 -61
  217. package/dist/runtime/theme/chip.js +0 -66
  218. package/dist/runtime/theme/collapsible.d.ts +0 -32
  219. package/dist/runtime/theme/collapsible.js +0 -10
  220. package/dist/runtime/theme/drawer.d.ts +0 -142
  221. package/dist/runtime/theme/drawer.js +0 -113
  222. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  223. package/dist/runtime/theme/dropdown-menu.js +0 -83
  224. package/dist/runtime/theme/form-item.d.ts +0 -70
  225. package/dist/runtime/theme/form-item.js +0 -34
  226. package/dist/runtime/theme/form.d.ts +0 -2
  227. package/dist/runtime/theme/form.js +0 -7
  228. package/dist/runtime/theme/index.d.ts +0 -41
  229. package/dist/runtime/theme/index.js +0 -41
  230. package/dist/runtime/theme/input-number.d.ts +0 -115
  231. package/dist/runtime/theme/input-number.js +0 -95
  232. package/dist/runtime/theme/input.d.ts +0 -172
  233. package/dist/runtime/theme/input.js +0 -151
  234. package/dist/runtime/theme/kbd.d.ts +0 -33
  235. package/dist/runtime/theme/kbd.js +0 -26
  236. package/dist/runtime/theme/link.d.ts +0 -38
  237. package/dist/runtime/theme/link.js +0 -26
  238. package/dist/runtime/theme/modal.d.ts +0 -42
  239. package/dist/runtime/theme/modal.js +0 -55
  240. package/dist/runtime/theme/pagination.d.ts +0 -74
  241. package/dist/runtime/theme/pagination.js +0 -17
  242. package/dist/runtime/theme/pinInput.d.ts +0 -94
  243. package/dist/runtime/theme/pinInput.js +0 -111
  244. package/dist/runtime/theme/popover.d.ts +0 -32
  245. package/dist/runtime/theme/popover.js +0 -13
  246. package/dist/runtime/theme/progress.d.ts +0 -180
  247. package/dist/runtime/theme/progress.js +0 -95
  248. package/dist/runtime/theme/radio-group.d.ts +0 -104
  249. package/dist/runtime/theme/radio-group.js +0 -61
  250. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  251. package/dist/runtime/theme/scroll-area.js +0 -33
  252. package/dist/runtime/theme/select.d.ts +0 -186
  253. package/dist/runtime/theme/select.js +0 -173
  254. package/dist/runtime/theme/separator.d.ts +0 -74
  255. package/dist/runtime/theme/separator.js +0 -53
  256. package/dist/runtime/theme/skeleton.d.ts +0 -2
  257. package/dist/runtime/theme/skeleton.js +0 -7
  258. package/dist/runtime/theme/slider.d.ts +0 -70
  259. package/dist/runtime/theme/slider.js +0 -52
  260. package/dist/runtime/theme/switch.d.ts +0 -116
  261. package/dist/runtime/theme/switch.js +0 -78
  262. package/dist/runtime/theme/table.d.ts +0 -86
  263. package/dist/runtime/theme/table.js +0 -36
  264. package/dist/runtime/theme/tabs.d.ts +0 -129
  265. package/dist/runtime/theme/tabs.js +0 -146
  266. package/dist/runtime/theme/textarea.d.ts +0 -90
  267. package/dist/runtime/theme/textarea.js +0 -116
  268. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  269. package/dist/runtime/theme/toast-provider.js +0 -97
  270. package/dist/runtime/theme/toast.d.ts +0 -83
  271. package/dist/runtime/theme/toast.js +0 -35
  272. package/dist/runtime/theme/tooltip.d.ts +0 -38
  273. package/dist/runtime/theme/tooltip.js +0 -11
  274. package/dist/runtime/types/components.d.ts +0 -42
  275. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  276. package/dist/runtime/utils/extend-theme.js +0 -27
  277. package/dist/runtime/utils/styler.d.ts +0 -4
  278. package/dist/runtime/utils/styler.js +0 -10
  279. package/dist/runtime/utils/translator.d.ts +0 -18
  280. package/dist/runtime/utils/translator.js +0 -8
  281. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  282. package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
  283. package/dist/unocss.d.ts +0 -52
  284. package/dist/unocss.mjs.map +0 -1
  285. package/dist/unplugin.d.ts +0 -26
  286. package/dist/unplugin.mjs.map +0 -1
  287. package/dist/vite.d.ts +0 -9
  288. package/dist/vite.mjs.map +0 -1
  289. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -1,49 +1,52 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/chip";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { Primitive } from "reka-ui";
6
+ import { useVModel } from "@vueuse/core";
7
+ import { Primitive, Slot } from "reka-ui";
7
8
  import { computed } from "vue";
8
- import { useButtonGroup } from "../composables/useButtonGroup";
9
- import { useComponentIcons } from "../composables/useComponentIcons";
10
- import { useTheme } from "../composables/useTheme";
9
+ import { useAppConfig } from "#imports";
10
+ import { useAvatarGroup } from "../composables/useAvatarGroup";
11
+ import { cv, merge } from "../utils/style";
12
+ defineOptions({ inheritAttrs: false });
11
13
  const props = defineProps({
12
14
  as: { type: null, required: false },
13
- variant: { type: null, required: false, default: "solid" },
15
+ text: { type: [String, Number], required: false },
14
16
  size: { type: null, required: false },
15
- label: { type: String, required: false },
16
- class: { type: null, required: false },
17
+ color: { type: null, required: false },
18
+ position: { type: null, required: false },
19
+ show: { type: Boolean, required: false, default: true },
20
+ inset: { type: Boolean, required: false },
21
+ standalone: { type: Boolean, required: false },
17
22
  ui: { type: null, required: false },
18
- icon: { type: String, required: false },
19
- leading: { type: Boolean, required: false },
20
- leadingIcon: { type: String, required: false },
21
- trailing: { type: Boolean, required: false },
22
- trailingIcon: { type: String, required: false }
23
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
24
+ });
25
+ const emit = defineEmits(["update:show"]);
26
+ defineSlots();
27
+ const show = useVModel(props, "show", emit);
28
+ const { size } = useAvatarGroup(props);
29
+ const appConfig = useAppConfig();
30
+ const ui = computed(() => {
31
+ const styler = cv(merge(theme, appConfig.ui.chip));
32
+ return styler({ ...props, size: size.value });
23
33
  });
24
- const slots = defineSlots();
25
- const { size, orientation } = useButtonGroup(props);
26
- const { isLeading, leadingIconName, isTrailing, trailingIconName } = useComponentIcons(props);
27
- const { generateStyle } = useTheme();
28
- const style = computed(() => generateStyle("chip", {
29
- ...props,
30
- size: size.value,
31
- groupOrientation: orientation.value
32
- }));
33
34
  </script>
34
35
 
35
36
  <template>
36
- <Primitive :as="props.as" :class="style.base({ class: [props.class, props.ui?.base] })" data-part="base">
37
- <slot name="leading">
38
- <span v-if="isLeading && leadingIconName" :class="style.leadingIcon({ class: [leadingIconName, props.ui?.leadingIcon] })" data-part="leading-icon"></span>
39
- </slot>
37
+ <Primitive
38
+ :as="props.as"
39
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
40
+ data-part="root"
41
+ >
42
+ <Slot v-bind="$attrs">
43
+ <slot></slot>
44
+ </Slot>
40
45
 
41
- <span v-if="props.label || slots.default" :class="style.label({ class: props.ui?.label })" data-part="label">
42
- <slot>{{ props.label }}</slot>
46
+ <span v-if="show" :class="ui.base({ class: props.ui?.base })" data-part="base">
47
+ <slot name="content">
48
+ {{ props.text }}
49
+ </slot>
43
50
  </span>
44
-
45
- <slot name="trailing">
46
- <span v-if="isTrailing && trailingIconName" :class="style.trailingIcon({ class: [trailingIconName, props.ui?.trailingIcon] })" data-part="trailing-icon"></span>
47
- </slot>
48
51
  </Primitive>
49
52
  </template>
@@ -1,27 +1,45 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { PrimitiveProps } from 'reka-ui';
3
- import type { UseComponentIconsProps } from '../composables/useComponentIcons.js';
4
- import type { chip } from '../theme/index.js';
5
- import type { ComponentAttrs } from '../types/index.js';
6
- export interface ChipSlots {
7
- leading?: (props?: {}) => any;
8
- default?: (props?: {}) => any;
9
- trailing?: (props?: {}) => any;
10
- }
11
- type ChipVariants = VariantProps<typeof chip>;
12
- export interface ChipProps extends ComponentAttrs<typeof chip>, Omit<UseComponentIconsProps, 'loading' | 'loadingIcon'> {
3
+ import theme from '#build/ui/chip';
4
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
5
+ import type { StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface ChipProps extends ComponentBaseProps {
13
8
  /**
14
9
  * The element or component this component should render as.
15
10
  * @default "div"
16
11
  */
17
12
  as?: PrimitiveProps['as'];
18
- variant?: ChipVariants['variant'];
19
- size?: ChipVariants['size'];
20
- label?: string;
13
+ /** Display some text inside the chip. */
14
+ text?: string | number;
15
+ /** @default "md" */
16
+ size?: ThemeVariants['size'];
17
+ /** @default "primary" */
18
+ color?: ThemeVariants['color'];
19
+ /** @default "top-right" */
20
+ position?: ThemeVariants['position'];
21
+ show?: boolean;
22
+ /** When `true`, keep the chip inside the component for rounded elements. */
23
+ inset?: boolean;
24
+ /** When `true`, render the chip relatively to the parent. */
25
+ standalone?: boolean;
26
+ ui?: ComponentUIProps<typeof theme>;
27
+ }
28
+ export interface ChipEmits {
29
+ 'update:show': [show: boolean];
30
+ }
31
+ export interface ChipSlots {
32
+ default: StaticSlot;
33
+ content: StaticSlot;
21
34
  }
22
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{}>, {
23
- variant: "solid" | "outline" | "soft" | "soft-outline";
35
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
36
+ "update:show": (show: boolean) => any;
37
+ }, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{
38
+ "onUpdate:show"?: ((show: boolean) => any) | undefined;
39
+ }>, {
40
+ show: boolean;
24
41
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, ChipSlots>;
42
+ declare const _default: typeof __VLS_export;
25
43
  export default _default;
26
44
  type __VLS_WithSlots<T, S> = T & {
27
45
  new (): {
@@ -1,16 +1,17 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/collapsible";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
7
  import { CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, useForwardPropsEmits } 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";
10
11
  const props = defineProps({
11
- class: { type: null, required: false },
12
- ui: { type: null, required: false },
13
12
  as: { type: null, required: false },
13
+ ui: { type: null, required: false },
14
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
14
15
  defaultOpen: { type: Boolean, required: false },
15
16
  open: { type: Boolean, required: false },
16
17
  disabled: { type: Boolean, required: false },
@@ -19,22 +20,25 @@ const props = defineProps({
19
20
  const emit = defineEmits(["update:open"]);
20
21
  const slots = defineSlots();
21
22
  const rootProps = useForwardPropsEmits(reactivePick(props, "as", "defaultOpen", "open", "disabled", "unmountOnHide"), emit);
22
- const { generateStyle } = useTheme();
23
- const style = computed(() => generateStyle("collapsible", props));
23
+ const appConfig = useAppConfig();
24
+ const ui = computed(() => {
25
+ const styler = cv(merge(theme, appConfig.ui.collapsible));
26
+ return styler(props);
27
+ });
24
28
  </script>
25
29
 
26
30
  <template>
27
31
  <CollapsibleRoot
28
32
  v-slot="{ open }"
29
33
  v-bind="rootProps"
30
- :class="style.root({ class: [props.class, props.ui?.root] })"
34
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
31
35
  data-part="root"
32
36
  >
33
- <CollapsibleTrigger v-if="slots.default" as-child>
37
+ <CollapsibleTrigger v-if="!!slots.default" as-child>
34
38
  <slot :open="open"></slot>
35
39
  </CollapsibleTrigger>
36
40
 
37
- <CollapsibleContent :class="style.content({ class: props.ui?.content })" data-part="content">
41
+ <CollapsibleContent :class="ui.content({ class: props.ui?.content })" data-part="content">
38
42
  <slot name="content"></slot>
39
43
  </CollapsibleContent>
40
44
  </CollapsibleRoot>
@@ -1,23 +1,31 @@
1
1
  import type { CollapsibleRootEmits, CollapsibleRootProps } from 'reka-ui';
2
- import type { collapsible } from '../theme/index.js';
3
- import type { ComponentAttrs } from '../types/index.js';
2
+ import theme from '#build/ui/collapsible';
3
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
4
+ import type { StaticSlot } from '../types/utils';
5
+ export interface CollapsibleProps extends ComponentBaseProps, Pick<CollapsibleRootProps, 'defaultOpen' | 'open' | 'disabled' | 'unmountOnHide'> {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @default "div"
9
+ */
10
+ as?: CollapsibleRootProps['as'];
11
+ ui?: ComponentUIProps<typeof theme>;
12
+ }
4
13
  export interface CollapsibleEmits extends CollapsibleRootEmits {
5
14
  }
6
15
  export interface CollapsibleSlots {
7
- default?: (props: {
16
+ default: StaticSlot<{
8
17
  open: boolean;
9
- }) => any;
10
- content?: (props?: {}) => any;
11
- }
12
- export interface CollapsibleProps extends ComponentAttrs<typeof collapsible>, Pick<CollapsibleRootProps, 'as' | 'defaultOpen' | 'open' | 'disabled' | 'unmountOnHide'> {
18
+ }>;
19
+ content: StaticSlot;
13
20
  }
14
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<CollapsibleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
21
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<CollapsibleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
22
  "update:open": (value: boolean) => any;
16
23
  }, string, import("vue").PublicProps, Readonly<CollapsibleProps> & Readonly<{
17
24
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
18
25
  }>, {
19
26
  unmountOnHide: boolean;
20
27
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, CollapsibleSlots>;
28
+ declare const _default: typeof __VLS_export;
21
29
  export default _default;
22
30
  type __VLS_WithSlots<T, S> = T & {
23
31
  new (): {
@@ -1,13 +1,15 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/drawer";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
7
  import { DialogClose, DialogContent, DialogDescription, DialogOverlay, DialogPortal, DialogRoot, DialogTitle, DialogTrigger, useForwardPropsEmits, VisuallyHidden } from "reka-ui";
8
8
  import { computed, toRef } from "vue";
9
+ import { useAppConfig } from "#imports";
9
10
  import { useLocale } from "../composables/useLocale";
10
- import { useTheme } from "../composables/useTheme";
11
+ import { usePortal } from "../composables/usePortal";
12
+ import { cv, merge } from "../utils/style";
11
13
  import Button from "./Button.vue";
12
14
  const props = defineProps({
13
15
  title: { type: String, required: false },
@@ -17,108 +19,116 @@ const props = defineProps({
17
19
  transition: { type: Boolean, required: false, default: true },
18
20
  direction: { type: null, required: false, default: "bottom" },
19
21
  inset: { type: Boolean, required: false },
20
- portal: { type: Boolean, required: false, default: true },
21
- close: { type: [Object, Boolean], required: false, default: true },
22
- closeIcon: { type: String, required: false },
22
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
23
+ close: { type: [Boolean, Object], required: false, default: true },
24
+ closeIcon: { type: [String, Object], required: false },
23
25
  dismissible: { type: Boolean, required: false, default: true },
24
- class: { type: null, required: false },
25
26
  ui: { type: null, required: false },
27
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
26
28
  open: { type: Boolean, required: false },
27
29
  defaultOpen: { type: Boolean, required: false },
28
30
  modal: { type: Boolean, required: false, default: true }
29
31
  });
30
- const emit = defineEmits(["after-leave", "update:open"]);
32
+ const emit = defineEmits(["after-leave", "after-enter", "close-prevent", "update:open"]);
31
33
  const slots = defineSlots();
32
34
  const rootProps = useForwardPropsEmits(reactivePick(props, "open", "defaultOpen", "modal"), emit);
33
- const contentProps = toRef(() => ({
35
+ const portalProps = usePortal(toRef(() => props.portal));
36
+ const contentProps = computed(() => ({
34
37
  ...props.content,
35
- ...slots.content || slots.header || !props.description && !slots.description ? { "aria-describedby": void 0 } : {}
38
+ ...!!slots.content || !!slots.header || !props.description && !slots.description ? { "aria-describedby": void 0 } : {}
36
39
  }));
37
40
  const contentEvents = computed(() => {
38
41
  if (props.dismissible)
39
42
  return {};
40
- return {
41
- pointerDownOutside: (e) => e.preventDefault(),
42
- interactOutside: (e) => e.preventDefault(),
43
- escapeKeyDown: (e) => e.preventDefault()
44
- };
43
+ const events = ["pointerDownOutside", "interactOutside", "escapeKeyDown"];
44
+ return events.reduce((acc, curr) => {
45
+ acc[curr] = (e) => {
46
+ e.preventDefault();
47
+ emit("close-prevent");
48
+ };
49
+ return acc;
50
+ }, {});
45
51
  });
46
52
  const { t } = useLocale();
47
- const { theme, generateStyle } = useTheme();
48
- const style = computed(() => generateStyle("drawer", props));
53
+ const appConfig = useAppConfig();
54
+ const ui = computed(() => {
55
+ const styler = cv(merge(theme, appConfig.ui.drawer));
56
+ return styler(props);
57
+ });
49
58
  </script>
50
59
 
51
60
  <template>
52
- <DialogRoot v-slot="{ open }" v-bind="rootProps">
53
- <DialogTrigger v-if="slots.default" as-child :class="props.class">
61
+ <DialogRoot v-slot="{ open, close }" v-bind="rootProps">
62
+ <DialogTrigger v-if="!!slots.default" as-child :class="props.class">
54
63
  <slot :open="open"></slot>
55
64
  </DialogTrigger>
56
65
 
57
- <DialogPortal :disabled="!props.portal">
58
- <DialogOverlay v-if="props.overlay" :class="style.overlay({ class: props.ui?.overlay })" data-part="overlay" />
66
+ <DialogPortal v-bind="portalProps">
67
+ <DialogOverlay v-if="props.overlay" :class="ui.overlay({ class: props.ui?.overlay })" data-part="overlay" />
59
68
 
60
69
  <DialogContent
61
- :class="style.content({ class: [!slots.default && props.class, props.ui?.content] })"
70
+ :class="ui.content({ class: [props.ui?.content, !slots.default && props.class] })"
71
+ v-bind="contentProps"
62
72
  :data-direction="props.direction"
63
73
  data-part="content"
64
- v-bind="contentProps"
65
- v-on="contentEvents"
74
+ @after-enter="emit('after-enter')"
66
75
  @after-leave="emit('after-leave')"
76
+ v-on="contentEvents"
67
77
  >
68
- <VisuallyHidden v-if="slots.content || slots.header || !props.title && !slots.title">
78
+ <VisuallyHidden v-if="!!slots.content || !!slots.header || !props.title && !slots.title">
69
79
  <DialogTitle />
70
80
  </VisuallyHidden>
71
81
 
72
- <slot name="content">
73
- <div :class="style.container({ class: props.ui?.container })" data-part="container">
74
- <div
75
- v-if="slots.header || props.title || slots.title || props.description || slots.description || props.close || slots.close"
76
- :class="style.header({ class: props.ui?.header })"
77
- data-part="header"
78
- >
79
- <slot name="header">
80
- <DialogTitle
81
- v-if="props.title || slots.title"
82
- :class="style.title({ class: props.ui?.title })"
83
- data-part="title"
84
- >
85
- <slot name="title">
86
- {{ props.title }}
87
- </slot>
88
- </DialogTitle>
82
+ <slot name="content" :close="close">
83
+ <div
84
+ v-if="slots.header || (props.title || !!slots.title) || (props.description || !!slots.description) || (props.close || !!slots.close)"
85
+ :class="ui.header({ class: props.ui?.header })"
86
+ data-part="header"
87
+ >
88
+ <slot name="header" :close="close">
89
+ <DialogTitle
90
+ v-if="props.title || slots.title"
91
+ :class="ui.title({ class: props.ui?.title })"
92
+ data-part="title"
93
+ >
94
+ <slot name="title">
95
+ {{ props.title }}
96
+ </slot>
97
+ </DialogTitle>
89
98
 
90
- <DialogClose v-if="props.close || slots.close" as-child>
91
- <slot name="close" :ui="props.ui">
92
- <Button
93
- variant="ghost"
94
- :icon="props.closeIcon || theme.app.icons.close"
95
- v-bind="typeof props.close === 'boolean' ? {} : props.close"
96
- :aria-label="t('modal.close')"
97
- :class="style.close({ class: props.ui?.close })"
98
- data-part="close"
99
- />
100
- </slot>
101
- </DialogClose>
99
+ <DialogClose v-if="props.close || !!slots.close" as-child>
100
+ <slot name="close" :close="close" :ui="ui">
101
+ <Button
102
+ v-if="props.close"
103
+ color="neutral"
104
+ variant="ghost"
105
+ :icon="props.closeIcon || appConfig.ui.icons.close"
106
+ :aria-label="t('modal.close')"
107
+ v-bind="typeof props.close === 'object' ? props.close : {}"
108
+ :class="ui.close({ class: props.ui?.close })"
109
+ data-part="close"
110
+ />
111
+ </slot>
112
+ </DialogClose>
102
113
 
103
- <DialogDescription
104
- v-if="props.description || slots.description"
105
- :class="style.description({ class: props.ui?.description })"
106
- data-part="description"
107
- >
108
- <slot name="description">
109
- {{ props.description }}
110
- </slot>
111
- </DialogDescription>
112
- </slot>
113
- </div>
114
+ <DialogDescription
115
+ v-if="props.description || !!slots.description"
116
+ :class="ui.description({ class: props.ui?.description })"
117
+ data-part="description"
118
+ >
119
+ <slot name="description">
120
+ {{ props.description }}
121
+ </slot>
122
+ </DialogDescription>
123
+ </slot>
124
+ </div>
114
125
 
115
- <div v-if="slots.body" :class="style.body({ class: props.ui?.body })" data-part="body">
116
- <slot name="body"></slot>
117
- </div>
126
+ <div v-if="slots.body" :class="ui.body({ class: props.ui?.body })" data-part="body">
127
+ <slot name="body" :close="close"></slot>
128
+ </div>
118
129
 
119
- <div v-if="slots.footer" :class="style.footer({ class: props.ui?.footer })" data-part="footer">
120
- <slot name="footer"></slot>
121
- </div>
130
+ <div v-if="slots.footer" :class="ui.footer({ class: props.ui?.footer })" data-part="footer">
131
+ <slot name="footer" :close="close"></slot>
122
132
  </div>
123
133
  </slot>
124
134
  </DialogContent>
@@ -1,24 +1,10 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { DialogContentEmits, DialogContentProps, DialogRootEmits, DialogRootProps } from 'reka-ui';
3
- import type { drawer } from '../theme/index.js';
4
- import type { ButtonProps, ComponentAttrs, EmitsToProps } from '../types/index.js';
5
- export interface DrawerEmits extends DialogRootEmits {
6
- 'after-leave': [];
7
- }
8
- export interface DrawerSlots {
9
- default?: any;
10
- content?: any;
11
- header?: any;
12
- title?: any;
13
- description?: any;
14
- close?: (props: {
15
- ui: ComponentAttrs<typeof drawer>['ui'];
16
- }) => any;
17
- body?: any;
18
- footer?: any;
19
- }
20
- type DrawerVariants = VariantProps<typeof drawer>;
21
- export interface DrawerProps extends ComponentAttrs<typeof drawer>, DialogRootProps {
3
+ import theme from '#build/ui/drawer';
4
+ import type { ButtonProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps } from '../types';
5
+ import type { EmitsToProps, StaticSlot } from '../types/utils';
6
+ type ThemeVariants = VariantProps<typeof theme>;
7
+ export interface DrawerProps extends ComponentBaseProps, DialogRootProps {
22
8
  title?: string;
23
9
  description?: string;
24
10
  /** The content of the drawer. */
@@ -28,13 +14,16 @@ export interface DrawerProps extends ComponentAttrs<typeof drawer>, DialogRootPr
28
14
  * @default true
29
15
  */
30
16
  overlay?: boolean;
31
- /** @default true */
17
+ /**
18
+ * Animate the drawer when opening or closing.
19
+ * @default true
20
+ */
32
21
  transition?: boolean;
33
22
  /**
34
23
  * The direction of the drawer.
35
24
  * @default "bottom"
36
25
  */
37
- direction?: DrawerVariants['direction'];
26
+ direction?: ThemeVariants['direction'];
38
27
  /**
39
28
  * Whether to inset the drawer from the edges.
40
29
  */
@@ -43,35 +32,69 @@ export interface DrawerProps extends ComponentAttrs<typeof drawer>, DialogRootPr
43
32
  * Render the drawer in a portal.
44
33
  * @default true
45
34
  */
46
- portal?: boolean;
35
+ portal?: boolean | string | HTMLElement;
47
36
  /**
48
37
  * Display a close button to dismiss the drawer.
49
38
  * @default true
50
39
  */
51
- close?: ButtonProps | boolean;
40
+ close?: boolean | Partial<ButtonProps>;
52
41
  /** @default app.icons.close */
53
- closeIcon?: string;
42
+ closeIcon?: IconProps['name'];
54
43
  /**
55
44
  * When `false`, the drawer will not close when clicking outside or pressing escape.
56
45
  * @default true
57
46
  */
58
47
  dismissible?: boolean;
48
+ ui?: ComponentUIProps<typeof theme>;
49
+ }
50
+ export interface DrawerEmits extends DialogRootEmits {
51
+ 'after-leave': [];
52
+ 'after-enter': [];
53
+ 'close-prevent': [];
54
+ }
55
+ export interface DrawerSlots {
56
+ default: StaticSlot<{
57
+ open: boolean;
58
+ }>;
59
+ content: StaticSlot<{
60
+ close: () => void;
61
+ }>;
62
+ header: StaticSlot<{
63
+ close: () => void;
64
+ }>;
65
+ title: StaticSlot;
66
+ description: StaticSlot;
67
+ close: StaticSlot<{
68
+ close: () => void;
69
+ ui: ComponentStyler<typeof theme>;
70
+ }>;
71
+ body: StaticSlot<{
72
+ close: () => void;
73
+ }>;
74
+ footer: StaticSlot<{
75
+ close: () => void;
76
+ }>;
59
77
  }
60
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<DrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
78
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<DrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
61
79
  "update:open": (value: boolean) => any;
62
80
  "after-leave": () => any;
81
+ "after-enter": () => any;
82
+ "close-prevent": () => any;
63
83
  }, string, import("vue").PublicProps, Readonly<DrawerProps> & Readonly<{
64
84
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
65
85
  "onAfter-leave"?: (() => any) | undefined;
86
+ "onAfter-enter"?: (() => any) | undefined;
87
+ "onClose-prevent"?: (() => any) | undefined;
66
88
  }>, {
67
- close: ButtonProps | boolean;
68
89
  overlay: boolean;
69
- direction: "top" | "bottom" | "left" | "right";
90
+ close: boolean | Partial<ButtonProps>;
70
91
  transition: boolean;
92
+ direction: "top" | "right" | "bottom" | "left";
71
93
  modal: boolean;
72
- portal: boolean;
94
+ portal: boolean | string | HTMLElement;
73
95
  dismissible: boolean;
74
96
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, DrawerSlots>;
97
+ declare const _default: typeof __VLS_export;
75
98
  export default _default;
76
99
  type __VLS_WithSlots<T, S> = T & {
77
100
  new (): {