@nuxt/ui 3.0.1 → 3.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 (228) hide show
  1. package/.nuxt/ui/accordion.ts +25 -4
  2. package/.nuxt/ui/alert.ts +52 -31
  3. package/.nuxt/ui/avatar-group.ts +24 -3
  4. package/.nuxt/ui/avatar.ts +26 -5
  5. package/.nuxt/ui/badge.ts +56 -35
  6. package/.nuxt/ui/breadcrumb.ts +28 -7
  7. package/.nuxt/ui/button-group.ts +23 -2
  8. package/.nuxt/ui/button.ts +66 -45
  9. package/.nuxt/ui/calendar.ts +39 -18
  10. package/.nuxt/ui/card.ts +28 -7
  11. package/.nuxt/ui/carousel.ts +29 -8
  12. package/.nuxt/ui/checkbox-group.ts +82 -0
  13. package/.nuxt/ui/checkbox.ts +163 -29
  14. package/.nuxt/ui/chip.ts +31 -10
  15. package/.nuxt/ui/collapsible.ts +23 -2
  16. package/.nuxt/ui/color-picker.ts +26 -5
  17. package/.nuxt/ui/command-palette.ts +37 -16
  18. package/.nuxt/ui/container.ts +24 -3
  19. package/.nuxt/ui/context-menu.ts +56 -35
  20. package/.nuxt/ui/drawer.ts +33 -12
  21. package/.nuxt/ui/dropdown-menu.ts +57 -36
  22. package/.nuxt/ui/form-field.ts +29 -8
  23. package/.nuxt/ui/form.ts +23 -2
  24. package/.nuxt/ui/index.ts +1 -0
  25. package/.nuxt/ui/input-menu.ts +65 -44
  26. package/.nuxt/ui/input-number.ts +43 -22
  27. package/.nuxt/ui/input.ts +46 -25
  28. package/.nuxt/ui/kbd.ts +27 -6
  29. package/.nuxt/ui/link.ts +26 -5
  30. package/.nuxt/ui/modal.ts +28 -7
  31. package/.nuxt/ui/navigation-menu.ts +103 -84
  32. package/.nuxt/ui/pagination.ts +23 -2
  33. package/.nuxt/ui/pin-input.ts +43 -22
  34. package/.nuxt/ui/popover.ts +25 -4
  35. package/.nuxt/ui/progress.ts +40 -19
  36. package/.nuxt/ui/radio-group.ts +273 -37
  37. package/.nuxt/ui/select-menu.ts +59 -35
  38. package/.nuxt/ui/select.ts +55 -34
  39. package/.nuxt/ui/separator.ts +31 -10
  40. package/.nuxt/ui/skeleton.ts +24 -3
  41. package/.nuxt/ui/slideover.ts +27 -6
  42. package/.nuxt/ui/slider.ts +39 -18
  43. package/.nuxt/ui/stepper.ts +41 -20
  44. package/.nuxt/ui/switch.ts +44 -23
  45. package/.nuxt/ui/table.ts +38 -17
  46. package/.nuxt/ui/tabs.ts +55 -34
  47. package/.nuxt/ui/textarea.ts +63 -37
  48. package/.nuxt/ui/toast.ts +47 -26
  49. package/.nuxt/ui/toaster.ts +23 -2
  50. package/.nuxt/ui/tooltip.ts +25 -4
  51. package/.nuxt/ui/tree.ts +41 -20
  52. package/.nuxt/ui.css +56 -12
  53. package/README.md +11 -0
  54. package/cli/templates.mjs +18 -17
  55. package/dist/module.d.mts +2 -1
  56. package/dist/module.json +5 -5
  57. package/dist/module.mjs +11 -7
  58. package/dist/runtime/components/Accordion.vue +36 -92
  59. package/dist/runtime/components/Accordion.vue.d.ts +91 -0
  60. package/dist/runtime/components/Alert.vue +37 -100
  61. package/dist/runtime/components/Alert.vue.d.ts +96 -0
  62. package/dist/runtime/components/App.vue +28 -34
  63. package/dist/runtime/components/App.vue.d.ts +24 -0
  64. package/dist/runtime/components/Avatar.vue +47 -78
  65. package/dist/runtime/components/Avatar.vue.d.ts +60 -0
  66. package/dist/runtime/components/AvatarGroup.vue +40 -77
  67. package/dist/runtime/components/AvatarGroup.vue.d.ts +40 -0
  68. package/dist/runtime/components/Badge.vue +33 -62
  69. package/dist/runtime/components/Badge.vue.d.ts +62 -0
  70. package/dist/runtime/components/Breadcrumb.vue +36 -88
  71. package/dist/runtime/components/Breadcrumb.vue.d.ts +82 -0
  72. package/dist/runtime/components/Button.vue +96 -105
  73. package/dist/runtime/components/Button.vue.d.ts +73 -0
  74. package/dist/runtime/components/ButtonGroup.vue +20 -46
  75. package/dist/runtime/components/ButtonGroup.vue.d.ts +55 -0
  76. package/dist/runtime/components/Calendar.vue +73 -127
  77. package/dist/runtime/components/Calendar.vue.d.ts +107 -0
  78. package/dist/runtime/components/Card.vue +18 -40
  79. package/dist/runtime/components/Card.vue.d.ts +38 -0
  80. package/dist/runtime/components/Carousel.vue +112 -230
  81. package/dist/runtime/components/Carousel.vue.d.ts +120 -0
  82. package/dist/runtime/components/Checkbox.vue +52 -93
  83. package/dist/runtime/components/Checkbox.vue.d.ts +76 -0
  84. package/dist/runtime/components/CheckboxGroup.vue +121 -0
  85. package/dist/runtime/components/CheckboxGroup.vue.d.ts +75 -0
  86. package/dist/runtime/components/Chip.vue +26 -69
  87. package/dist/runtime/components/Chip.vue.d.ts +71 -0
  88. package/dist/runtime/components/Collapsible.vue +22 -41
  89. package/dist/runtime/components/Collapsible.vue.d.ts +50 -0
  90. package/dist/runtime/components/ColorPicker.vue +111 -197
  91. package/dist/runtime/components/ColorPicker.vue.d.ts +63 -0
  92. package/dist/runtime/components/CommandPalette.vue +94 -234
  93. package/dist/runtime/components/CommandPalette.vue.d.ts +173 -0
  94. package/dist/runtime/components/Container.vue +15 -28
  95. package/dist/runtime/components/Container.vue.d.ts +27 -0
  96. package/dist/runtime/components/ContextMenu.vue +32 -119
  97. package/dist/runtime/components/ContextMenu.vue.d.ts +127 -0
  98. package/dist/runtime/components/ContextMenuContent.vue +71 -72
  99. package/dist/runtime/components/ContextMenuContent.vue.d.ts +105 -0
  100. package/dist/runtime/components/Drawer.vue +49 -87
  101. package/dist/runtime/components/Drawer.vue.d.ts +88 -0
  102. package/dist/runtime/components/DropdownMenu.vue +37 -129
  103. package/dist/runtime/components/DropdownMenu.vue.d.ts +141 -0
  104. package/dist/runtime/components/DropdownMenuContent.vue +76 -79
  105. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +55 -0
  106. package/dist/runtime/components/Form.vue +135 -219
  107. package/dist/runtime/components/Form.vue.d.ts +66 -0
  108. package/dist/runtime/components/FormField.vue +36 -77
  109. package/dist/runtime/components/FormField.vue.d.ts +70 -0
  110. package/dist/runtime/components/Icon.vue +12 -19
  111. package/dist/runtime/components/Icon.vue.d.ts +17 -0
  112. package/dist/runtime/components/Input.vue +82 -140
  113. package/dist/runtime/components/Input.vue.d.ts +91 -0
  114. package/dist/runtime/components/InputMenu.vue +193 -302
  115. package/dist/runtime/components/InputMenu.vue.d.ts +312 -0
  116. package/dist/runtime/components/InputNumber.vue +71 -133
  117. package/dist/runtime/components/InputNumber.vue.d.ts +193 -0
  118. package/dist/runtime/components/Kbd.vue +20 -46
  119. package/dist/runtime/components/Kbd.vue.d.ts +55 -0
  120. package/dist/runtime/components/Link.vue +98 -173
  121. package/dist/runtime/components/Link.vue.d.ts +124 -0
  122. package/dist/runtime/components/LinkBase.vue +33 -41
  123. package/dist/runtime/components/LinkBase.vue.d.ts +48 -0
  124. package/dist/runtime/components/Modal.vue +53 -116
  125. package/dist/runtime/components/Modal.vue.d.ts +109 -0
  126. package/dist/runtime/components/NavigationMenu.vue +78 -186
  127. package/dist/runtime/components/NavigationMenu.vue.d.ts +159 -0
  128. package/dist/runtime/components/OverlayProvider.vue +14 -18
  129. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -0
  130. package/dist/runtime/components/Pagination.vue +46 -140
  131. package/dist/runtime/components/Pagination.vue.d.ts +143 -0
  132. package/dist/runtime/components/PinInput.vue +61 -78
  133. package/dist/runtime/components/PinInput.vue.d.ts +68 -0
  134. package/dist/runtime/components/Popover.vue +47 -84
  135. package/dist/runtime/components/Popover.vue.d.ts +80 -0
  136. package/dist/runtime/components/Progress.vue +70 -131
  137. package/dist/runtime/components/Progress.vue.d.ts +97 -0
  138. package/dist/runtime/components/RadioGroup.vue +75 -126
  139. package/dist/runtime/components/RadioGroup.vue.d.ts +88 -0
  140. package/dist/runtime/components/Select.vue +115 -202
  141. package/dist/runtime/components/Select.vue.d.ts +139 -0
  142. package/dist/runtime/components/SelectMenu.vue +167 -281
  143. package/dist/runtime/components/SelectMenu.vue.d.ts +184 -0
  144. package/dist/runtime/components/Separator.vue +29 -71
  145. package/dist/runtime/components/Separator.vue.d.ts +75 -0
  146. package/dist/runtime/components/Skeleton.vue +21 -23
  147. package/dist/runtime/components/Skeleton.vue.d.ts +26 -0
  148. package/dist/runtime/components/Slideover.vue +53 -120
  149. package/dist/runtime/components/Slideover.vue.d.ts +111 -0
  150. package/dist/runtime/components/Slider.vue +46 -84
  151. package/dist/runtime/components/Slider.vue.d.ts +71 -0
  152. package/dist/runtime/components/Stepper.vue +44 -113
  153. package/dist/runtime/components/Stepper.vue.d.ts +89 -0
  154. package/dist/runtime/components/Switch.vue +45 -93
  155. package/dist/runtime/components/Switch.vue.d.ts +73 -0
  156. package/dist/runtime/components/Table.vue +165 -264
  157. package/dist/runtime/components/Table.vue.d.ts +183 -0
  158. package/dist/runtime/components/Tabs.vue +40 -105
  159. package/dist/runtime/components/Tabs.vue.d.ts +104 -0
  160. package/dist/runtime/components/Textarea.vue +113 -158
  161. package/dist/runtime/components/Textarea.vue.d.ts +95 -0
  162. package/dist/runtime/components/Toast.vue +49 -110
  163. package/dist/runtime/components/Toast.vue.d.ts +95 -0
  164. package/dist/runtime/components/Toaster.vue +70 -107
  165. package/dist/runtime/components/Toaster.vue.d.ts +63 -0
  166. package/dist/runtime/components/Tooltip.vue +38 -65
  167. package/dist/runtime/components/Tooltip.vue.d.ts +65 -0
  168. package/dist/runtime/components/Tree.vue +57 -150
  169. package/dist/runtime/components/Tree.vue.d.ts +128 -0
  170. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  171. package/dist/runtime/composables/defineShortcuts.js +0 -1
  172. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  173. package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
  174. package/dist/runtime/composables/useFormField.d.ts +2 -2
  175. package/dist/runtime/composables/useFormField.js +1 -1
  176. package/dist/runtime/composables/useOverlay.d.ts +16 -8
  177. package/dist/runtime/composables/useOverlay.js +14 -6
  178. package/dist/runtime/composables/usePortal.d.ts +6 -0
  179. package/dist/runtime/composables/usePortal.js +17 -0
  180. package/dist/runtime/index.css +1 -1
  181. package/dist/runtime/inertia/components/Link.vue +146 -0
  182. package/dist/runtime/inertia/components/Link.vue.d.ts +92 -0
  183. package/dist/runtime/inertia/stubs.d.ts +43 -0
  184. package/dist/runtime/inertia/stubs.js +82 -0
  185. package/dist/runtime/locale/bg.d.ts +3 -0
  186. package/dist/runtime/locale/bg.js +54 -0
  187. package/dist/runtime/locale/hy.d.ts +3 -0
  188. package/dist/runtime/locale/hy.js +54 -0
  189. package/dist/runtime/locale/index.d.ts +6 -1
  190. package/dist/runtime/locale/index.js +6 -1
  191. package/dist/runtime/locale/kk.d.ts +3 -0
  192. package/dist/runtime/locale/kk.js +54 -0
  193. package/dist/runtime/locale/tj.d.ts +3 -0
  194. package/dist/runtime/locale/tj.js +54 -0
  195. package/dist/runtime/locale/ug_cn.d.ts +3 -0
  196. package/dist/runtime/locale/ug_cn.js +55 -0
  197. package/dist/runtime/types/form.d.ts +5 -1
  198. package/dist/runtime/types/index.d.ts +2 -0
  199. package/dist/runtime/types/index.js +2 -0
  200. package/dist/runtime/types/utils.d.ts +70 -10
  201. package/dist/runtime/utils/index.d.ts +1 -0
  202. package/dist/runtime/utils/index.js +3 -0
  203. package/dist/runtime/utils/link.d.ts +4 -27
  204. package/dist/runtime/utils/link.js +32 -1
  205. package/dist/runtime/utils/tv.js +2 -2
  206. package/dist/runtime/vue/components/Icon.vue +7 -8
  207. package/dist/runtime/vue/components/Icon.vue.d.ts +14 -0
  208. package/dist/runtime/vue/components/Link.vue +118 -199
  209. package/dist/runtime/vue/components/Link.vue.d.ts +124 -0
  210. package/dist/runtime/vue/stubs.d.ts +5 -0
  211. package/dist/runtime/vue/stubs.js +11 -2
  212. package/dist/shared/{ui.BCaWD5Ek.mjs → ui.D7lOOabO.mjs} +623 -364
  213. package/dist/types.d.mts +5 -1
  214. package/dist/unplugin.d.mts +6 -1
  215. package/dist/unplugin.mjs +25 -4
  216. package/dist/vite.mjs +1 -1
  217. package/package.json +122 -64
  218. package/dist/module.cjs +0 -62
  219. package/dist/module.d.cts +0 -44
  220. package/dist/module.d.ts +0 -44
  221. package/dist/shared/ui.C6uTSFTI.cjs +0 -3555
  222. package/dist/types.d.ts +0 -1
  223. package/dist/unplugin.cjs +0 -232
  224. package/dist/unplugin.d.cts +0 -61
  225. package/dist/unplugin.d.ts +0 -61
  226. package/dist/vite.cjs +0 -23
  227. package/dist/vite.d.cts +0 -15
  228. package/dist/vite.d.ts +0 -15
@@ -0,0 +1,111 @@
1
+ import type { DialogRootProps, DialogRootEmits, DialogContentProps, DialogContentEmits } from 'reka-ui';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import theme from '#build/ui/slideover';
4
+ import type { ButtonProps } from '../types';
5
+ import type { EmitsToProps, ComponentConfig } from '../types/utils';
6
+ type Slideover = ComponentConfig<typeof theme, AppConfig, 'slideover'>;
7
+ export interface SlideoverProps extends DialogRootProps {
8
+ title?: string;
9
+ description?: string;
10
+ /** The content of the slideover. */
11
+ content?: Omit<DialogContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DialogContentEmits>>;
12
+ /**
13
+ * Render an overlay behind the slideover.
14
+ * @defaultValue true
15
+ */
16
+ overlay?: boolean;
17
+ /**
18
+ * Animate the slideover when opening or closing.
19
+ * @defaultValue true
20
+ */
21
+ transition?: boolean;
22
+ /**
23
+ * The side of the slideover.
24
+ * @defaultValue 'right'
25
+ */
26
+ side?: Slideover['variants']['side'];
27
+ /**
28
+ * Render the slideover in a portal.
29
+ * @defaultValue true
30
+ */
31
+ portal?: boolean | string | HTMLElement;
32
+ /**
33
+ * Display a close button to dismiss the slideover.
34
+ * `{ size: 'md', color: 'neutral', variant: 'ghost' }`{lang="ts-type"}
35
+ * @defaultValue true
36
+ */
37
+ close?: boolean | Partial<ButtonProps>;
38
+ /**
39
+ * The icon displayed in the close button.
40
+ * @defaultValue appConfig.ui.icons.close
41
+ * @IconifyIcon
42
+ */
43
+ closeIcon?: string;
44
+ /**
45
+ * When `false`, the slideover will not close when clicking outside or pressing escape.
46
+ * @defaultValue true
47
+ */
48
+ dismissible?: boolean;
49
+ class?: any;
50
+ ui?: Slideover['slots'];
51
+ }
52
+ export interface SlideoverEmits extends DialogRootEmits {
53
+ 'after:leave': [];
54
+ 'close:prevent': [];
55
+ }
56
+ export interface SlideoverSlots {
57
+ default(props: {
58
+ open: boolean;
59
+ }): any;
60
+ content(props?: {}): any;
61
+ header(props?: {}): any;
62
+ title(props?: {}): any;
63
+ description(props?: {}): any;
64
+ close(props: {
65
+ ui: {
66
+ [K in keyof Required<Slideover['slots']>]: (props?: Record<string, any>) => string;
67
+ };
68
+ }): any;
69
+ body(props?: {}): any;
70
+ footer(props?: {}): any;
71
+ }
72
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<SlideoverProps>, {
73
+ close: boolean;
74
+ portal: boolean;
75
+ overlay: boolean;
76
+ transition: boolean;
77
+ modal: boolean;
78
+ dismissible: boolean;
79
+ side: string;
80
+ }>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, any, string, import("vue").PublicProps, any, {
81
+ close: boolean | Partial<ButtonProps>;
82
+ modal: boolean;
83
+ transition: boolean;
84
+ portal: boolean | string | HTMLElement;
85
+ overlay: boolean;
86
+ side: Slideover["variants"]["side"];
87
+ dismissible: boolean;
88
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, Readonly<SlideoverSlots> & SlideoverSlots>;
89
+ export default _default;
90
+ type __VLS_WithDefaults<P, D> = {
91
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal<P[K] & {
92
+ default: D[K];
93
+ }> : P[K];
94
+ };
95
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
96
+ type __VLS_TypePropsToOption<T> = {
97
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
98
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
99
+ } : {
100
+ type: import('vue').PropType<T[K]>;
101
+ required: true;
102
+ };
103
+ };
104
+ type __VLS_WithTemplateSlots<T, S> = T & {
105
+ new (): {
106
+ $slots: S;
107
+ };
108
+ };
109
+ type __VLS_PrettifyLocal<T> = {
110
+ [K in keyof T]: T[K];
111
+ } & {};
@@ -1,101 +1,63 @@
1
- <script lang="ts">
2
- import type { VariantProps } from 'tailwind-variants'
3
- import type { SliderRootProps } from 'reka-ui'
4
- import type { AppConfig } from '@nuxt/schema'
5
- import _appConfig from '#build/app.config'
6
- import theme from '#build/ui/slider'
7
- import { tv } from '../utils/tv'
8
-
9
- const appConfigSlider = _appConfig as AppConfig & { ui: { slider: Partial<typeof theme> } }
10
-
11
- const slider = tv({ extend: tv(theme), ...(appConfigSlider.ui?.slider || {}) })
12
-
13
- type SliderVariants = VariantProps<typeof slider>
14
-
15
- export interface SliderProps extends Pick<SliderRootProps, 'name' | 'disabled' | 'inverted' | 'min' | 'max' | 'step' | 'minStepsBetweenThumbs'> {
16
- /**
17
- * The element or component this component should render as.
18
- * @defaultValue 'div'
19
- */
20
- as?: any
21
- /**
22
- * @defaultValue 'md'
23
- */
24
- size?: SliderVariants['size']
25
- /**
26
- * @defaultValue 'primary'
27
- */
28
- color?: SliderVariants['color']
29
- /**
30
- * The orientation of the slider.
31
- * @defaultValue 'horizontal'
32
- */
33
- orientation?: SliderRootProps['orientation']
34
- /** The value of the slider when initially rendered. Use when you do not need to control the state of the slider. */
35
- defaultValue?: number | number[]
36
- class?: any
37
- ui?: Partial<typeof slider.slots>
38
- }
39
-
40
- export interface SliderEmits {
41
- (e: 'update:modelValue', payload: number | number[]): void
42
- (e: 'change', payload: Event): void
43
- }
1
+ <script>
2
+ import theme from "#build/ui/slider";
44
3
  </script>
45
4
 
46
- <script setup lang="ts">
47
- import { computed } from 'vue'
48
- import { SliderRoot, SliderRange, SliderTrack, SliderThumb, useForwardPropsEmits } from 'reka-ui'
49
- import { reactivePick } from '@vueuse/core'
50
- import { useFormField } from '../composables/useFormField'
51
-
52
- const props = withDefaults(defineProps<SliderProps>(), {
53
- min: 0,
54
- max: 100,
55
- step: 1,
56
- orientation: 'horizontal'
57
- })
58
- const emits = defineEmits<SliderEmits>()
59
-
60
- const modelValue = defineModel<number | number[]>()
61
-
62
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'orientation', 'min', 'max', 'step', 'minStepsBetweenThumbs', 'inverted'), emits)
63
-
64
- const { id, emitFormChange, emitFormInput, size, color, name, disabled, ariaAttrs } = useFormField<SliderProps>(props)
65
-
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { SliderRoot, SliderRange, SliderTrack, SliderThumb, useForwardPropsEmits } from "reka-ui";
8
+ import { reactivePick } from "@vueuse/core";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFormField } from "../composables/useFormField";
11
+ import { tv } from "../utils/tv";
12
+ const props = defineProps({
13
+ as: { type: null, required: false },
14
+ size: { type: null, required: false },
15
+ color: { type: null, required: false },
16
+ orientation: { type: null, required: false, default: "horizontal" },
17
+ defaultValue: { type: [Number, Array], required: false },
18
+ class: { type: null, required: false },
19
+ ui: { type: null, required: false },
20
+ name: { type: String, required: false },
21
+ disabled: { type: Boolean, required: false },
22
+ inverted: { type: Boolean, required: false },
23
+ min: { type: Number, required: false, default: 0 },
24
+ max: { type: Number, required: false, default: 100 },
25
+ step: { type: Number, required: false, default: 1 },
26
+ minStepsBetweenThumbs: { type: Number, required: false }
27
+ });
28
+ const emits = defineEmits(["update:modelValue", "change"]);
29
+ const modelValue = defineModel({ type: [Number, Array] });
30
+ const appConfig = useAppConfig();
31
+ const rootProps = useForwardPropsEmits(reactivePick(props, "as", "orientation", "min", "max", "step", "minStepsBetweenThumbs", "inverted"), emits);
32
+ const { id, emitFormChange, emitFormInput, size, color, name, disabled, ariaAttrs } = useFormField(props);
66
33
  const defaultSliderValue = computed(() => {
67
- if (typeof props.defaultValue === 'number') {
68
- return [props.defaultValue]
34
+ if (typeof props.defaultValue === "number") {
35
+ return [props.defaultValue];
69
36
  }
70
- return props.defaultValue
71
- })
72
-
37
+ return props.defaultValue;
38
+ });
73
39
  const sliderValue = computed({
74
40
  get() {
75
- if (typeof modelValue.value === 'number') {
76
- return [modelValue.value]
41
+ if (typeof modelValue.value === "number") {
42
+ return [modelValue.value];
77
43
  }
78
- return modelValue.value ?? defaultSliderValue.value
44
+ return modelValue.value ?? defaultSliderValue.value;
79
45
  },
80
46
  set(value) {
81
- modelValue.value = value?.length !== 1 ? value : value[0]
47
+ modelValue.value = value?.length !== 1 ? value : value[0];
82
48
  }
83
- })
84
-
85
- const thumbsCount = computed(() => sliderValue.value?.length ?? 1)
86
-
87
- const ui = computed(() => slider({
49
+ });
50
+ const thumbsCount = computed(() => sliderValue.value?.length ?? 1);
51
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.slider || {} })({
88
52
  disabled: disabled.value,
89
53
  size: size.value,
90
54
  color: color.value,
91
55
  orientation: props.orientation
92
- }))
93
-
94
- function onChange(value: any) {
95
- // @ts-expect-error - 'target' does not exist in type 'EventInit'
96
- const event = new Event('change', { target: { value } })
97
- emits('change', event)
98
- emitFormChange()
56
+ }));
57
+ function onChange(value) {
58
+ const event = new Event("change", { target: { value } });
59
+ emits("change", event);
60
+ emitFormChange();
99
61
  }
100
62
  </script>
101
63
 
@@ -0,0 +1,71 @@
1
+ import type { SliderRootProps } from 'reka-ui';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import theme from '#build/ui/slider';
4
+ import type { ComponentConfig } from '../types/utils';
5
+ type Slider = ComponentConfig<typeof theme, AppConfig, 'slider'>;
6
+ export interface SliderProps extends Pick<SliderRootProps, 'name' | 'disabled' | 'inverted' | 'min' | 'max' | 'step' | 'minStepsBetweenThumbs'> {
7
+ /**
8
+ * The element or component this component should render as.
9
+ * @defaultValue 'div'
10
+ */
11
+ as?: any;
12
+ /**
13
+ * @defaultValue 'md'
14
+ */
15
+ size?: Slider['variants']['size'];
16
+ /**
17
+ * @defaultValue 'primary'
18
+ */
19
+ color?: Slider['variants']['color'];
20
+ /**
21
+ * The orientation of the slider.
22
+ * @defaultValue 'horizontal'
23
+ */
24
+ orientation?: SliderRootProps['orientation'];
25
+ /** The value of the slider when initially rendered. Use when you do not need to control the state of the slider. */
26
+ defaultValue?: number | number[];
27
+ class?: any;
28
+ ui?: Slider['slots'];
29
+ }
30
+ export interface SliderEmits {
31
+ (e: 'update:modelValue', payload: number | number[]): void;
32
+ (e: 'change', payload: Event): void;
33
+ }
34
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<{
35
+ modelValue?: number | number[];
36
+ } & SliderProps>, {
37
+ min: number;
38
+ max: number;
39
+ step: number;
40
+ orientation: string;
41
+ }>>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<{
42
+ modelValue?: number | number[];
43
+ } & SliderProps>, {
44
+ min: number;
45
+ max: number;
46
+ step: number;
47
+ orientation: string;
48
+ }>>> & Readonly<{}>, {
49
+ orientation: "horizontal" | "vertical";
50
+ step: number;
51
+ max: number;
52
+ min: number;
53
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
54
+ export default _default;
55
+ type __VLS_WithDefaults<P, D> = {
56
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal<P[K] & {
57
+ default: D[K];
58
+ }> : P[K];
59
+ };
60
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
61
+ type __VLS_TypePropsToOption<T> = {
62
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
63
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
64
+ } : {
65
+ type: import('vue').PropType<T[K]>;
66
+ required: true;
67
+ };
68
+ };
69
+ type __VLS_PrettifyLocal<T> = {
70
+ [K in keyof T]: T[K];
71
+ } & {};
@@ -1,133 +1,64 @@
1
- <!-- eslint-disable vue/block-tag-newline -->
2
- <script lang="ts">
3
- import type { VariantProps } from 'tailwind-variants'
4
- import type { StepperRootProps, StepperRootEmits } from 'reka-ui'
5
- import type { AppConfig } from '@nuxt/schema'
6
- import _appConfig from '#build/app.config'
7
- import theme from '#build/ui/stepper'
8
- import { tv } from '../utils/tv'
9
- import type { DynamicSlots } from '../types/utils'
10
-
11
- const appConfigStepper = _appConfig as AppConfig & { ui: { stepper: Partial<typeof theme> } }
12
-
13
- const stepper = tv({ extend: tv(theme), ...(appConfigStepper.ui?.stepper || {}) })
14
-
15
- type StepperVariants = VariantProps<typeof stepper>
16
-
17
- export interface StepperItem {
18
- slot?: string
19
- value?: string | number
20
- title?: string
21
- description?: string
22
- /**
23
- * @IconifyIcon
24
- */
25
- icon?: string
26
- content?: string
27
- disabled?: boolean
28
- }
29
-
30
- export interface StepperProps<T extends StepperItem> extends Pick<StepperRootProps, 'linear'> {
31
- /**
32
- * The element or component this component should render as.
33
- * @defaultValue 'div'
34
- */
35
- as?: any
36
- items: T[]
37
- /**
38
- * @defaultValue 'md'
39
- */
40
- size?: StepperVariants['size']
41
- /**
42
- * @defaultValue 'primary'
43
- */
44
- color?: StepperVariants['color']
45
- /**
46
- * The orientation of the stepper.
47
- * @defaultValue 'horizontal'
48
- */
49
- orientation?: StepperVariants['orientation']
50
- /**
51
- * The value of the step that should be active when initially rendered. Use when you do not need to control the state of the steps.
52
- */
53
- defaultValue?: string | number
54
- disabled?: boolean
55
- ui?: Partial<typeof stepper.slots>
56
- class?: any
57
- }
58
-
59
- export type StepperEmits<T> = Omit<StepperRootEmits, 'update:modelValue'> & {
60
- next: [payload: T]
61
- prev: [payload: T]
62
- }
63
-
64
- type SlotProps<T extends StepperItem> = (props: { item: T }) => any
65
-
66
- export type StepperSlots<T extends StepperItem> = {
67
- indicator: SlotProps<T>
68
- title: SlotProps<T>
69
- description: SlotProps<T>
70
- content: SlotProps<T>
71
- } & DynamicSlots<T, SlotProps<T>>
72
-
1
+ <script>
2
+ import theme from "#build/ui/stepper";
73
3
  </script>
74
4
 
75
- <script setup lang="ts" generic="T extends StepperItem">
76
- import { computed } from 'vue'
77
- import { StepperRoot, StepperItem, StepperTrigger, StepperIndicator, StepperSeparator, StepperTitle, StepperDescription, useForwardProps } from 'reka-ui'
78
- import { reactivePick } from '@vueuse/core'
79
- import UIcon from './Icon.vue'
80
-
81
- const props = withDefaults(defineProps<StepperProps<T>>(), {
82
- orientation: 'horizontal',
83
- linear: true
84
- })
85
- const emits = defineEmits<StepperEmits<T>>()
86
- const slots = defineSlots<StepperSlots<T>>()
87
-
88
- const modelValue = defineModel<string | number>()
89
-
90
- const rootProps = useForwardProps(reactivePick(props, 'as', 'orientation', 'linear'))
91
-
92
- const ui = computed(() => stepper({
5
+ <script setup>
6
+ import { computed } from "vue";
7
+ import { StepperRoot, StepperItem, StepperTrigger, StepperIndicator, StepperSeparator, StepperTitle, StepperDescription, useForwardProps } from "reka-ui";
8
+ import { reactivePick } from "@vueuse/core";
9
+ import { useAppConfig } from "#imports";
10
+ import { tv } from "../utils/tv";
11
+ import UIcon from "./Icon.vue";
12
+ const props = defineProps({
13
+ as: { type: null, required: false },
14
+ items: { type: Array, required: true },
15
+ size: { type: null, required: false },
16
+ color: { type: null, required: false },
17
+ orientation: { type: null, required: false, default: "horizontal" },
18
+ defaultValue: { type: [String, Number], required: false },
19
+ disabled: { type: Boolean, required: false },
20
+ class: { type: null, required: false },
21
+ ui: { type: null, required: false },
22
+ linear: { type: Boolean, required: false, default: true }
23
+ });
24
+ const emits = defineEmits(["next", "prev"]);
25
+ const slots = defineSlots();
26
+ const modelValue = defineModel({ type: [String, Number] });
27
+ const appConfig = useAppConfig();
28
+ const rootProps = useForwardProps(reactivePick(props, "as", "orientation", "linear"));
29
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.stepper || {} })({
93
30
  orientation: props.orientation,
94
31
  size: props.size,
95
32
  color: props.color
96
- }))
97
-
33
+ }));
98
34
  const currentStepIndex = computed({
99
35
  get() {
100
- const value = modelValue.value ?? props.defaultValue
101
-
102
- return ((typeof value === 'string')
103
- ? props.items.findIndex(item => item.value === value)
104
- : value) ?? 0
36
+ const value = modelValue.value ?? props.defaultValue;
37
+ return (typeof value === "string" ? props.items.findIndex((item) => item.value === value) : value) ?? 0;
105
38
  },
106
- set(value: number) {
107
- modelValue.value = props.items?.[value]?.value ?? value
39
+ set(value) {
40
+ modelValue.value = props.items?.[value]?.value ?? value;
108
41
  }
109
- })
110
-
111
- const currentStep = computed(() => props.items?.[currentStepIndex.value] as T)
112
- const hasNext = computed(() => currentStepIndex.value < props.items?.length - 1)
113
- const hasPrev = computed(() => currentStepIndex.value > 0)
114
-
42
+ });
43
+ const currentStep = computed(() => props.items?.[currentStepIndex.value]);
44
+ const hasNext = computed(() => currentStepIndex.value < props.items?.length - 1);
45
+ const hasPrev = computed(() => currentStepIndex.value > 0);
115
46
  defineExpose({
116
47
  next() {
117
48
  if (hasNext.value) {
118
- currentStepIndex.value += 1
119
- emits('next', currentStep.value)
49
+ currentStepIndex.value += 1;
50
+ emits("next", currentStep.value);
120
51
  }
121
52
  },
122
53
  prev() {
123
54
  if (hasPrev.value) {
124
- currentStepIndex.value -= 1
125
- emits('prev', currentStep.value)
55
+ currentStepIndex.value -= 1;
56
+ emits("prev", currentStep.value);
126
57
  }
127
58
  },
128
59
  hasNext,
129
60
  hasPrev
130
- })
61
+ });
131
62
  </script>
132
63
 
133
64
  <template>
@@ -144,7 +75,7 @@ defineExpose({
144
75
  <StepperTrigger :class="ui.trigger({ class: props.ui?.trigger })">
145
76
  <StepperIndicator :class="ui.indicator({ class: props.ui?.indicator })">
146
77
  <slot name="indicator" :item="item">
147
- <UIcon v-if="item.icon" :name="item.icon" :class="ui.icon({ class: props.ui?.indicator })" />
78
+ <UIcon v-if="item.icon" :name="item.icon" :class="ui.icon({ class: props.ui?.icon })" />
148
79
  <template v-else>
149
80
  {{ count + 1 }}
150
81
  </template>
@@ -173,9 +104,9 @@ defineExpose({
173
104
  </StepperItem>
174
105
  </div>
175
106
 
176
- <div v-if="currentStep?.content || !!slots.content || (currentStep?.slot && !!slots[currentStep.slot]) || (currentStep?.value && !!slots[currentStep.value])" :class="ui.content({ class: props.ui?.description })">
107
+ <div v-if="currentStep?.content || !!slots.content || currentStep?.slot" :class="ui.content({ class: props.ui?.content })">
177
108
  <slot
178
- :name="!!slots[currentStep?.slot ?? currentStep.value!] ? currentStep.slot ?? currentStep.value : 'content'"
109
+ :name="currentStep?.slot || 'content'"
179
110
  :item="currentStep"
180
111
  >
181
112
  {{ currentStep?.content }}
@@ -0,0 +1,89 @@
1
+ import type { StepperRootProps, StepperRootEmits } from 'reka-ui';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import theme from '#build/ui/stepper';
4
+ import type { DynamicSlots, ComponentConfig } from '../types/utils';
5
+ type Stepper = ComponentConfig<typeof theme, AppConfig, 'stepper'>;
6
+ export interface StepperItem {
7
+ slot?: string;
8
+ value?: string | number;
9
+ title?: string;
10
+ description?: string;
11
+ /**
12
+ * @IconifyIcon
13
+ */
14
+ icon?: string;
15
+ content?: string;
16
+ disabled?: boolean;
17
+ [key: string]: any;
18
+ }
19
+ export interface StepperProps<T extends StepperItem = StepperItem> extends Pick<StepperRootProps, 'linear'> {
20
+ /**
21
+ * The element or component this component should render as.
22
+ * @defaultValue 'div'
23
+ */
24
+ as?: any;
25
+ items: T[];
26
+ /**
27
+ * @defaultValue 'md'
28
+ */
29
+ size?: Stepper['variants']['size'];
30
+ /**
31
+ * @defaultValue 'primary'
32
+ */
33
+ color?: Stepper['variants']['color'];
34
+ /**
35
+ * The orientation of the stepper.
36
+ * @defaultValue 'horizontal'
37
+ */
38
+ orientation?: Stepper['variants']['orientation'];
39
+ /**
40
+ * The value of the step that should be active when initially rendered. Use when you do not need to control the state of the steps.
41
+ */
42
+ defaultValue?: string | number;
43
+ disabled?: boolean;
44
+ class?: any;
45
+ ui?: Stepper['slots'];
46
+ }
47
+ export type StepperEmits<T extends StepperItem = StepperItem> = Omit<StepperRootEmits, 'update:modelValue'> & {
48
+ next: [payload: T];
49
+ prev: [payload: T];
50
+ };
51
+ type SlotProps<T extends StepperItem> = (props: {
52
+ item: T;
53
+ }) => any;
54
+ export type StepperSlots<T extends StepperItem = StepperItem> = {
55
+ indicator: SlotProps<T>;
56
+ title: SlotProps<T>;
57
+ description: SlotProps<T>;
58
+ content: SlotProps<T>;
59
+ } & DynamicSlots<T>;
60
+ declare const _default: <T extends StepperItem>(__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<{
61
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, never> & ({
62
+ modelValue?: string | number;
63
+ } & StepperProps<T>) & Partial<{}>> & (import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps);
64
+ expose(exposed: import("vue").ShallowUnwrapRef<{
65
+ next(): void;
66
+ prev(): void;
67
+ hasNext: import("vue").ComputedRef<boolean>;
68
+ hasPrev: import("vue").ComputedRef<boolean>;
69
+ }>): void;
70
+ attrs: any;
71
+ slots: Readonly<{
72
+ indicator: SlotProps<T>;
73
+ title: SlotProps<T>;
74
+ description: SlotProps<T>;
75
+ content: SlotProps<T>;
76
+ } & DynamicSlots<T>> & {
77
+ indicator: SlotProps<T>;
78
+ title: SlotProps<T>;
79
+ description: SlotProps<T>;
80
+ content: SlotProps<T>;
81
+ } & DynamicSlots<T>;
82
+ emit: (((evt: "prev", payload: T) => void) & ((evt: "next", payload: T) => void)) & ((evt: "update:modelValue", value: string | number) => void);
83
+ }>) => import("vue").VNode & {
84
+ __ctx?: Awaited<typeof __VLS_setup>;
85
+ };
86
+ export default _default;
87
+ type __VLS_PrettifyLocal<T> = {
88
+ [K in keyof T]: T[K];
89
+ } & {};