@nuxt/ui 3.0.2 → 3.1.1

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 (221) hide show
  1. package/.nuxt/ui/accordion.ts +2 -2
  2. package/.nuxt/ui/alert.ts +29 -29
  3. package/.nuxt/ui/avatar-group.ts +1 -1
  4. package/.nuxt/ui/avatar.ts +3 -3
  5. package/.nuxt/ui/badge.ts +33 -33
  6. package/.nuxt/ui/breadcrumb.ts +5 -5
  7. package/.nuxt/ui/button.ts +43 -43
  8. package/.nuxt/ui/calendar.ts +17 -17
  9. package/.nuxt/ui/card.ts +5 -5
  10. package/.nuxt/ui/carousel.ts +6 -6
  11. package/.nuxt/ui/checkbox-group.ts +61 -0
  12. package/.nuxt/ui/checkbox.ts +140 -27
  13. package/.nuxt/ui/chip.ts +8 -8
  14. package/.nuxt/ui/color-picker.ts +3 -3
  15. package/.nuxt/ui/command-palette.ts +14 -14
  16. package/.nuxt/ui/context-menu.ts +33 -33
  17. package/.nuxt/ui/drawer.ts +10 -10
  18. package/.nuxt/ui/dropdown-menu.ts +34 -34
  19. package/.nuxt/ui/form-field.ts +6 -6
  20. package/.nuxt/ui/index.ts +1 -0
  21. package/.nuxt/ui/input-menu.ts +42 -42
  22. package/.nuxt/ui/input-number.ts +20 -20
  23. package/.nuxt/ui/input.ts +23 -23
  24. package/.nuxt/ui/kbd.ts +4 -4
  25. package/.nuxt/ui/link.ts +3 -3
  26. package/.nuxt/ui/modal.ts +5 -5
  27. package/.nuxt/ui/navigation-menu.ts +78 -80
  28. package/.nuxt/ui/pin-input.ts +20 -20
  29. package/.nuxt/ui/popover.ts +2 -2
  30. package/.nuxt/ui/progress.ts +17 -17
  31. package/.nuxt/ui/radio-group.ts +250 -35
  32. package/.nuxt/ui/select-menu.ts +36 -33
  33. package/.nuxt/ui/select.ts +32 -32
  34. package/.nuxt/ui/separator.ts +8 -8
  35. package/.nuxt/ui/skeleton.ts +1 -1
  36. package/.nuxt/ui/slideover.ts +4 -4
  37. package/.nuxt/ui/slider.ts +16 -16
  38. package/.nuxt/ui/stepper.ts +18 -18
  39. package/.nuxt/ui/switch.ts +20 -20
  40. package/.nuxt/ui/table.ts +15 -15
  41. package/.nuxt/ui/tabs.ts +32 -32
  42. package/.nuxt/ui/textarea.ts +40 -35
  43. package/.nuxt/ui/toast.ts +24 -24
  44. package/.nuxt/ui/tooltip.ts +2 -2
  45. package/.nuxt/ui/tree.ts +18 -18
  46. package/.nuxt/ui.css +63 -12
  47. package/README.md +15 -0
  48. package/cli/templates.mjs +18 -17
  49. package/dist/module.json +5 -5
  50. package/dist/module.mjs +12 -7
  51. package/dist/runtime/components/Accordion.vue +36 -93
  52. package/dist/runtime/components/Accordion.vue.d.ts +75 -0
  53. package/dist/runtime/components/Alert.vue +37 -100
  54. package/dist/runtime/components/Alert.vue.d.ts +81 -0
  55. package/dist/runtime/components/App.vue +28 -34
  56. package/dist/runtime/components/App.vue.d.ts +24 -0
  57. package/dist/runtime/components/Avatar.vue +42 -75
  58. package/dist/runtime/components/Avatar.vue.d.ts +39 -0
  59. package/dist/runtime/components/AvatarGroup.vue +40 -77
  60. package/dist/runtime/components/AvatarGroup.vue.d.ts +31 -0
  61. package/dist/runtime/components/Badge.vue +33 -62
  62. package/dist/runtime/components/Badge.vue.d.ts +41 -0
  63. package/dist/runtime/components/Breadcrumb.vue +37 -90
  64. package/dist/runtime/components/Breadcrumb.vue.d.ts +64 -0
  65. package/dist/runtime/components/Button.vue +95 -104
  66. package/dist/runtime/components/Button.vue.d.ts +48 -0
  67. package/dist/runtime/components/ButtonGroup.vue +20 -46
  68. package/dist/runtime/components/ButtonGroup.vue.d.ts +34 -0
  69. package/dist/runtime/components/Calendar.vue +67 -150
  70. package/dist/runtime/components/Calendar.vue.d.ts +111 -0
  71. package/dist/runtime/components/Card.vue +18 -40
  72. package/dist/runtime/components/Card.vue.d.ts +29 -0
  73. package/dist/runtime/components/Carousel.vue +112 -234
  74. package/dist/runtime/components/Carousel.vue.d.ts +122 -0
  75. package/dist/runtime/components/Checkbox.vue +52 -93
  76. package/dist/runtime/components/Checkbox.vue.d.ts +73 -0
  77. package/dist/runtime/components/CheckboxGroup.vue +121 -0
  78. package/dist/runtime/components/CheckboxGroup.vue.d.ts +78 -0
  79. package/dist/runtime/components/Chip.vue +26 -69
  80. package/dist/runtime/components/Chip.vue.d.ts +57 -0
  81. package/dist/runtime/components/Collapsible.vue +22 -41
  82. package/dist/runtime/components/Collapsible.vue.d.ts +35 -0
  83. package/dist/runtime/components/ColorPicker.vue +111 -197
  84. package/dist/runtime/components/ColorPicker.vue.d.ts +48 -0
  85. package/dist/runtime/components/CommandPalette.vue +96 -237
  86. package/dist/runtime/components/CommandPalette.vue.d.ts +161 -0
  87. package/dist/runtime/components/Container.vue +15 -28
  88. package/dist/runtime/components/Container.vue.d.ts +18 -0
  89. package/dist/runtime/components/ContextMenu.vue +34 -133
  90. package/dist/runtime/components/ContextMenu.vue.d.ts +107 -0
  91. package/dist/runtime/components/ContextMenuContent.vue +73 -81
  92. package/dist/runtime/components/ContextMenuContent.vue.d.ts +65 -0
  93. package/dist/runtime/components/Drawer.vue +49 -83
  94. package/dist/runtime/components/Drawer.vue.d.ts +78 -0
  95. package/dist/runtime/components/DropdownMenu.vue +39 -142
  96. package/dist/runtime/components/DropdownMenu.vue.d.ts +117 -0
  97. package/dist/runtime/components/DropdownMenuContent.vue +78 -88
  98. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +68 -0
  99. package/dist/runtime/components/Form.vue +135 -220
  100. package/dist/runtime/components/Form.vue.d.ts +69 -0
  101. package/dist/runtime/components/FormField.vue +35 -77
  102. package/dist/runtime/components/FormField.vue.d.ts +61 -0
  103. package/dist/runtime/components/Icon.vue +12 -19
  104. package/dist/runtime/components/Icon.vue.d.ts +8 -0
  105. package/dist/runtime/components/Input.vue +82 -140
  106. package/dist/runtime/components/Input.vue.d.ts +76 -0
  107. package/dist/runtime/components/InputMenu.vue +185 -332
  108. package/dist/runtime/components/InputMenu.vue.d.ts +324 -0
  109. package/dist/runtime/components/InputNumber.vue +71 -133
  110. package/dist/runtime/components/InputNumber.vue.d.ts +182 -0
  111. package/dist/runtime/components/Kbd.vue +20 -46
  112. package/dist/runtime/components/Kbd.vue.d.ts +34 -0
  113. package/dist/runtime/components/Link.vue +98 -176
  114. package/dist/runtime/components/Link.vue.d.ts +93 -0
  115. package/dist/runtime/components/LinkBase.vue +33 -42
  116. package/dist/runtime/components/LinkBase.vue.d.ts +25 -0
  117. package/dist/runtime/components/Modal.vue +53 -116
  118. package/dist/runtime/components/Modal.vue.d.ts +93 -0
  119. package/dist/runtime/components/NavigationMenu.vue +77 -209
  120. package/dist/runtime/components/NavigationMenu.vue.d.ts +139 -0
  121. package/dist/runtime/components/OverlayProvider.vue +14 -18
  122. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -0
  123. package/dist/runtime/components/Pagination.vue +46 -140
  124. package/dist/runtime/components/Pagination.vue.d.ts +119 -0
  125. package/dist/runtime/components/PinInput.vue +61 -78
  126. package/dist/runtime/components/PinInput.vue.d.ts +57 -0
  127. package/dist/runtime/components/Popover.vue +47 -84
  128. package/dist/runtime/components/Popover.vue.d.ts +63 -0
  129. package/dist/runtime/components/Progress.vue +70 -131
  130. package/dist/runtime/components/Progress.vue.d.ts +66 -0
  131. package/dist/runtime/components/RadioGroup.vue +70 -132
  132. package/dist/runtime/components/RadioGroup.vue.d.ts +91 -0
  133. package/dist/runtime/components/Select.vue +110 -224
  134. package/dist/runtime/components/Select.vue.d.ts +145 -0
  135. package/dist/runtime/components/SelectMenu.vue +161 -310
  136. package/dist/runtime/components/SelectMenu.vue.d.ts +196 -0
  137. package/dist/runtime/components/Separator.vue +29 -71
  138. package/dist/runtime/components/Separator.vue.d.ts +54 -0
  139. package/dist/runtime/components/Skeleton.vue +21 -23
  140. package/dist/runtime/components/Skeleton.vue.d.ts +17 -0
  141. package/dist/runtime/components/Slideover.vue +53 -120
  142. package/dist/runtime/components/Slideover.vue.d.ts +94 -0
  143. package/dist/runtime/components/Slider.vue +46 -84
  144. package/dist/runtime/components/Slider.vue.d.ts +52 -0
  145. package/dist/runtime/components/Stepper.vue +45 -115
  146. package/dist/runtime/components/Stepper.vue.d.ts +83 -0
  147. package/dist/runtime/components/Switch.vue +45 -93
  148. package/dist/runtime/components/Switch.vue.d.ts +70 -0
  149. package/dist/runtime/components/Table.vue +163 -267
  150. package/dist/runtime/components/Table.vue.d.ts +183 -0
  151. package/dist/runtime/components/Tabs.vue +41 -107
  152. package/dist/runtime/components/Tabs.vue.d.ts +88 -0
  153. package/dist/runtime/components/Textarea.vue +113 -158
  154. package/dist/runtime/components/Textarea.vue.d.ts +78 -0
  155. package/dist/runtime/components/Toast.vue +49 -110
  156. package/dist/runtime/components/Toast.vue.d.ts +157 -0
  157. package/dist/runtime/components/Toaster.vue +70 -107
  158. package/dist/runtime/components/Toaster.vue.d.ts +38 -0
  159. package/dist/runtime/components/Tooltip.vue +38 -65
  160. package/dist/runtime/components/Tooltip.vue.d.ts +50 -0
  161. package/dist/runtime/components/Tree.vue +59 -166
  162. package/dist/runtime/components/Tree.vue.d.ts +111 -0
  163. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  164. package/dist/runtime/composables/defineShortcuts.js +6 -0
  165. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  166. package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
  167. package/dist/runtime/composables/useFormField.d.ts +2 -2
  168. package/dist/runtime/composables/useKbd.d.ts +1 -0
  169. package/dist/runtime/composables/useKbd.js +4 -3
  170. package/dist/runtime/composables/useOverlay.d.ts +14 -8
  171. package/dist/runtime/composables/useOverlay.js +20 -7
  172. package/dist/runtime/composables/usePortal.d.ts +6 -0
  173. package/dist/runtime/composables/usePortal.js +17 -0
  174. package/dist/runtime/index.css +1 -1
  175. package/dist/runtime/inertia/components/Link.vue +146 -0
  176. package/dist/runtime/inertia/components/Link.vue.d.ts +63 -0
  177. package/dist/runtime/inertia/stubs.d.ts +43 -0
  178. package/dist/runtime/inertia/stubs.js +82 -0
  179. package/dist/runtime/locale/bg.d.ts +3 -0
  180. package/dist/runtime/locale/bg.js +54 -0
  181. package/dist/runtime/locale/index.d.ts +5 -1
  182. package/dist/runtime/locale/index.js +5 -1
  183. package/dist/runtime/locale/kk.d.ts +3 -0
  184. package/dist/runtime/locale/kk.js +54 -0
  185. package/dist/runtime/locale/tj.d.ts +3 -0
  186. package/dist/runtime/locale/tj.js +54 -0
  187. package/dist/runtime/locale/ug_cn.d.ts +3 -0
  188. package/dist/runtime/locale/ug_cn.js +55 -0
  189. package/dist/runtime/types/form.d.ts +4 -1
  190. package/dist/runtime/types/index.d.ts +1 -0
  191. package/dist/runtime/types/index.js +1 -0
  192. package/dist/runtime/types/tv.d.ts +53 -0
  193. package/dist/runtime/types/tv.js +0 -0
  194. package/dist/runtime/types/utils.d.ts +7 -17
  195. package/dist/runtime/types/utils.js +1 -0
  196. package/dist/runtime/utils/link.d.ts +3 -3
  197. package/dist/runtime/utils/link.js +1 -0
  198. package/dist/runtime/utils/tv.js +2 -2
  199. package/dist/runtime/vue/components/Icon.vue +7 -8
  200. package/dist/runtime/vue/components/Icon.vue.d.ts +5 -0
  201. package/dist/runtime/vue/components/Link.vue +118 -202
  202. package/dist/runtime/vue/components/Link.vue.d.ts +93 -0
  203. package/dist/runtime/vue/stubs.d.ts +2 -2
  204. package/dist/shared/{ui.BkNUP964.mjs → ui.CbtTMMzt.mjs} +631 -366
  205. package/dist/types.d.mts +3 -5
  206. package/dist/unplugin.d.mts +6 -2
  207. package/dist/unplugin.mjs +25 -4
  208. package/dist/vite.d.mts +1 -1
  209. package/dist/vite.mjs +2 -2
  210. package/package.json +96 -54
  211. package/dist/module.cjs +0 -62
  212. package/dist/module.d.cts +0 -45
  213. package/dist/module.d.ts +0 -45
  214. package/dist/shared/ui.BL-XB3u1.cjs +0 -3555
  215. package/dist/types.d.ts +0 -7
  216. package/dist/unplugin.cjs +0 -232
  217. package/dist/unplugin.d.cts +0 -62
  218. package/dist/unplugin.d.ts +0 -62
  219. package/dist/vite.cjs +0 -23
  220. package/dist/vite.d.cts +0 -15
  221. package/dist/vite.d.ts +0 -15
@@ -0,0 +1,61 @@
1
+ import type { AppConfig } from '@nuxt/schema';
2
+ import theme from '#build/ui/form-field';
3
+ import type { ComponentConfig } from '../types/utils';
4
+ type FormField = ComponentConfig<typeof theme, AppConfig, 'formField'>;
5
+ export interface FormFieldProps {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @defaultValue 'div'
9
+ */
10
+ as?: any;
11
+ /** The name of the FormField. Also used to match form errors. */
12
+ name?: string;
13
+ /** A regular expression to match form error names. */
14
+ errorPattern?: RegExp;
15
+ label?: string;
16
+ description?: string;
17
+ help?: string;
18
+ error?: string | boolean;
19
+ hint?: string;
20
+ /**
21
+ * @defaultValue 'md'
22
+ */
23
+ size?: FormField['variants']['size'];
24
+ required?: boolean;
25
+ /** If true, validation on input will be active immediately instead of waiting for a blur event. */
26
+ eagerValidation?: boolean;
27
+ /**
28
+ * Delay in milliseconds before validating the form on input events.
29
+ * @defaultValue `300`
30
+ */
31
+ validateOnInputDelay?: number;
32
+ class?: any;
33
+ ui?: FormField['slots'];
34
+ }
35
+ export interface FormFieldSlots {
36
+ label(props: {
37
+ label?: string;
38
+ }): any;
39
+ hint(props: {
40
+ hint?: string;
41
+ }): any;
42
+ description(props: {
43
+ description?: string;
44
+ }): any;
45
+ help(props: {
46
+ help?: string;
47
+ }): any;
48
+ error(props: {
49
+ error?: string | boolean;
50
+ }): any;
51
+ default(props: {
52
+ error?: string | boolean;
53
+ }): any;
54
+ }
55
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<FormFieldProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<FormFieldProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, FormFieldSlots>;
56
+ export default _default;
57
+ type __VLS_WithSlots<T, S> = T & {
58
+ new (): {
59
+ $slots: S;
60
+ };
61
+ };
@@ -1,24 +1,17 @@
1
- <script lang="ts">
2
- export interface IconProps {
3
- name: string
4
- mode?: 'svg' | 'css'
5
- size?: string | number
6
- customize?: (
7
- content: string,
8
- name?: string,
9
- prefix?: string,
10
- provider?: string
11
- ) => string
12
- }
13
- </script>
14
-
15
- <script setup lang="ts">
16
- import { useForwardProps } from 'reka-ui'
17
- import { reactivePick } from '@vueuse/core'
1
+ <script>
18
2
 
19
- const props = defineProps<IconProps>()
3
+ </script>
20
4
 
21
- const iconProps = useForwardProps(reactivePick(props, 'name', 'mode', 'size', 'customize'))
5
+ <script setup>
6
+ import { useForwardProps } from "reka-ui";
7
+ import { reactivePick } from "@vueuse/core";
8
+ const props = defineProps({
9
+ name: { type: String, required: true },
10
+ mode: { type: String, required: false },
11
+ size: { type: [String, Number], required: false },
12
+ customize: { type: Function, required: false }
13
+ });
14
+ const iconProps = useForwardProps(reactivePick(props, "name", "mode", "size", "customize"));
22
15
  </script>
23
16
 
24
17
  <template>
@@ -0,0 +1,8 @@
1
+ export interface IconProps {
2
+ name: string;
3
+ mode?: 'svg' | 'css';
4
+ size?: string | number;
5
+ customize?: (content: string, name?: string, prefix?: string, provider?: string) => string;
6
+ }
7
+ declare const _default: import("vue").DefineComponent<IconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IconProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ export default _default;
@@ -1,97 +1,55 @@
1
- <script lang="ts">
2
- import type { InputHTMLAttributes } from 'vue'
3
- import type { VariantProps } from 'tailwind-variants'
4
- import type { AppConfig } from '@nuxt/schema'
5
- import _appConfig from '#build/app.config'
6
- import theme from '#build/ui/input'
7
- import type { UseComponentIconsProps } from '../composables/useComponentIcons'
8
- import { tv } from '../utils/tv'
9
- import type { AvatarProps } from '../types'
10
- import type { PartialString } from '../types/utils'
11
-
12
- const appConfigInput = _appConfig as AppConfig & { ui: { input: Partial<typeof theme> } }
13
-
14
- const input = tv({ extend: tv(theme), ...(appConfigInput.ui?.input || {}) })
15
-
16
- type InputVariants = VariantProps<typeof input>
17
-
18
- export interface InputProps extends UseComponentIconsProps {
19
- /**
20
- * The element or component this component should render as.
21
- * @defaultValue 'div'
22
- */
23
- as?: any
24
- id?: string
25
- name?: string
26
- type?: InputHTMLAttributes['type']
27
- /** The placeholder text when the input is empty. */
28
- placeholder?: string
29
- /**
30
- * @defaultValue 'primary'
31
- */
32
- color?: InputVariants['color']
33
- /**
34
- * @defaultValue 'outline'
35
- */
36
- variant?: InputVariants['variant']
37
- /**
38
- * @defaultValue 'md'
39
- */
40
- size?: InputVariants['size']
41
- required?: boolean
42
- autocomplete?: InputHTMLAttributes['autocomplete']
43
- autofocus?: boolean
44
- autofocusDelay?: number
45
- disabled?: boolean
46
- /** Highlight the ring color like a focus state. */
47
- highlight?: boolean
48
- class?: any
49
- ui?: PartialString<typeof input.slots>
50
- }
51
-
52
- export interface InputEmits {
53
- (e: 'update:modelValue', payload: string | number): void
54
- (e: 'blur', event: FocusEvent): void
55
- (e: 'change', event: Event): void
56
- }
57
-
58
- export interface InputSlots {
59
- leading(props?: {}): any
60
- default(props?: {}): any
61
- trailing(props?: {}): any
62
- }
1
+ <script>
2
+ import theme from "#build/ui/input";
63
3
  </script>
64
4
 
65
- <script setup lang="ts">
66
- import { ref, computed, onMounted } from 'vue'
67
- import { Primitive } from 'reka-ui'
68
- import { useButtonGroup } from '../composables/useButtonGroup'
69
- import { useComponentIcons } from '../composables/useComponentIcons'
70
- import { useFormField } from '../composables/useFormField'
71
- import { looseToNumber } from '../utils'
72
- import UIcon from './Icon.vue'
73
- import UAvatar from './Avatar.vue'
74
-
75
- defineOptions({ inheritAttrs: false })
76
-
77
- const props = withDefaults(defineProps<InputProps>(), {
78
- type: 'text',
79
- autocomplete: 'off',
80
- autofocusDelay: 0
81
- })
82
- const emits = defineEmits<InputEmits>()
83
- const slots = defineSlots<InputSlots>()
84
-
85
- const [modelValue, modelModifiers] = defineModel<string | number | null>()
86
-
87
- const { emitFormBlur, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled, emitFormFocus, ariaAttrs } = useFormField<InputProps>(props, { deferInputValidation: true })
88
- const { orientation, size: buttonGroupSize } = useButtonGroup<InputProps>(props)
89
- const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props)
90
-
91
- const inputSize = computed(() => buttonGroupSize.value || formGroupSize.value)
92
-
93
- const ui = computed(() => input({
94
- type: props.type as InputVariants['type'],
5
+ <script setup>
6
+ import { ref, computed, onMounted } from "vue";
7
+ import { Primitive } from "reka-ui";
8
+ import { useAppConfig } from "#imports";
9
+ import { useButtonGroup } from "../composables/useButtonGroup";
10
+ import { useComponentIcons } from "../composables/useComponentIcons";
11
+ import { useFormField } from "../composables/useFormField";
12
+ import { looseToNumber } from "../utils";
13
+ import { tv } from "../utils/tv";
14
+ import UIcon from "./Icon.vue";
15
+ import UAvatar from "./Avatar.vue";
16
+ defineOptions({ inheritAttrs: false });
17
+ const props = defineProps({
18
+ as: { type: null, required: false },
19
+ id: { type: String, required: false },
20
+ name: { type: String, required: false },
21
+ type: { type: null, required: false, default: "text" },
22
+ placeholder: { type: String, required: false },
23
+ color: { type: null, required: false },
24
+ variant: { type: null, required: false },
25
+ size: { type: null, required: false },
26
+ required: { type: Boolean, required: false },
27
+ autocomplete: { type: null, required: false, default: "off" },
28
+ autofocus: { type: Boolean, required: false },
29
+ autofocusDelay: { type: Number, required: false, default: 0 },
30
+ disabled: { type: Boolean, required: false },
31
+ highlight: { type: Boolean, required: false },
32
+ class: { type: null, required: false },
33
+ ui: { type: null, required: false },
34
+ icon: { type: String, required: false },
35
+ avatar: { type: Object, required: false },
36
+ leading: { type: Boolean, required: false },
37
+ leadingIcon: { type: String, required: false },
38
+ trailing: { type: Boolean, required: false },
39
+ trailingIcon: { type: String, required: false },
40
+ loading: { type: Boolean, required: false },
41
+ loadingIcon: { type: String, required: false }
42
+ });
43
+ const emits = defineEmits(["update:modelValue", "blur", "change"]);
44
+ const slots = defineSlots();
45
+ const [modelValue, modelModifiers] = defineModel({ type: [String, Number, null] });
46
+ const appConfig = useAppConfig();
47
+ const { emitFormBlur, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled, emitFormFocus, ariaAttrs } = useFormField(props, { deferInputValidation: true });
48
+ const { orientation, size: buttonGroupSize } = useButtonGroup(props);
49
+ const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props);
50
+ const inputSize = computed(() => buttonGroupSize.value || formGroupSize.value);
51
+ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.input || {} })({
52
+ type: props.type,
95
53
  color: color.value,
96
54
  variant: props.variant,
97
55
  size: inputSize?.value,
@@ -100,70 +58,54 @@ const ui = computed(() => input({
100
58
  leading: isLeading.value || !!props.avatar || !!slots.leading,
101
59
  trailing: isTrailing.value || !!slots.trailing,
102
60
  buttonGroup: orientation.value
103
- }))
104
-
105
- const inputRef = ref<HTMLInputElement | null>(null)
106
-
107
- function autoFocus() {
108
- if (props.autofocus) {
109
- inputRef.value?.focus()
110
- }
111
- }
112
-
113
- // Custom function to handle the v-model properties
114
- function updateInput(value: string | null) {
61
+ }));
62
+ const inputRef = ref(null);
63
+ function updateInput(value) {
115
64
  if (modelModifiers.trim) {
116
- value = value?.trim() ?? null
65
+ value = value?.trim() ?? null;
117
66
  }
118
-
119
- if (modelModifiers.number || props.type === 'number') {
120
- value = looseToNumber(value)
67
+ if (modelModifiers.number || props.type === "number") {
68
+ value = looseToNumber(value);
121
69
  }
122
-
123
70
  if (modelModifiers.nullify) {
124
- value ||= null
71
+ value ||= null;
125
72
  }
126
-
127
- modelValue.value = value
128
- emitFormInput()
73
+ modelValue.value = value;
74
+ emitFormInput();
129
75
  }
130
-
131
- function onInput(event: Event) {
76
+ function onInput(event) {
132
77
  if (!modelModifiers.lazy) {
133
- updateInput((event.target as HTMLInputElement).value)
78
+ updateInput(event.target.value);
134
79
  }
135
80
  }
136
-
137
- function onChange(event: Event) {
138
- const value = (event.target as HTMLInputElement).value
139
-
81
+ function onChange(event) {
82
+ const value = event.target.value;
140
83
  if (modelModifiers.lazy) {
141
- updateInput(value)
84
+ updateInput(value);
142
85
  }
143
-
144
- // Update trimmed input so that it has same behavior as native input https://github.com/vuejs/core/blob/5ea8a8a4fab4e19a71e123e4d27d051f5e927172/packages/runtime-dom/src/directives/vModel.ts#L63
145
86
  if (modelModifiers.trim) {
146
- (event.target as HTMLInputElement).value = value.trim()
87
+ event.target.value = value.trim();
147
88
  }
148
-
149
- emitFormChange()
150
- emits('change', event)
89
+ emitFormChange();
90
+ emits("change", event);
151
91
  }
152
-
153
- function onBlur(event: FocusEvent) {
154
- emitFormBlur()
155
- emits('blur', event)
92
+ function onBlur(event) {
93
+ emitFormBlur();
94
+ emits("blur", event);
95
+ }
96
+ function autoFocus() {
97
+ if (props.autofocus) {
98
+ inputRef.value?.focus();
99
+ }
156
100
  }
157
-
158
- defineExpose({
159
- inputRef
160
- })
161
-
162
101
  onMounted(() => {
163
102
  setTimeout(() => {
164
- autoFocus()
165
- }, props.autofocusDelay)
166
- })
103
+ autoFocus();
104
+ }, props.autofocusDelay);
105
+ });
106
+ defineExpose({
107
+ inputRef
108
+ });
167
109
  </script>
168
110
 
169
111
  <template>
@@ -191,7 +133,7 @@ onMounted(() => {
191
133
  <span v-if="isLeading || !!avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
192
134
  <slot name="leading">
193
135
  <UIcon v-if="isLeading && leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
194
- <UAvatar v-else-if="!!avatar" :size="((props.ui?.leadingAvatarSize || ui.leadingAvatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
136
+ <UAvatar v-else-if="!!avatar" :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()" v-bind="avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
195
137
  </slot>
196
138
  </span>
197
139
 
@@ -0,0 +1,76 @@
1
+ import type { InputHTMLAttributes } from 'vue';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import theme from '#build/ui/input';
4
+ import type { UseComponentIconsProps } from '../composables/useComponentIcons';
5
+ import type { ComponentConfig } from '../types/utils';
6
+ type Input = ComponentConfig<typeof theme, AppConfig, 'input'>;
7
+ export interface InputProps extends UseComponentIconsProps {
8
+ /**
9
+ * The element or component this component should render as.
10
+ * @defaultValue 'div'
11
+ */
12
+ as?: any;
13
+ id?: string;
14
+ name?: string;
15
+ type?: InputHTMLAttributes['type'];
16
+ /** The placeholder text when the input is empty. */
17
+ placeholder?: string;
18
+ /**
19
+ * @defaultValue 'primary'
20
+ */
21
+ color?: Input['variants']['color'];
22
+ /**
23
+ * @defaultValue 'outline'
24
+ */
25
+ variant?: Input['variants']['variant'];
26
+ /**
27
+ * @defaultValue 'md'
28
+ */
29
+ size?: Input['variants']['size'];
30
+ required?: boolean;
31
+ autocomplete?: InputHTMLAttributes['autocomplete'];
32
+ autofocus?: boolean;
33
+ autofocusDelay?: number;
34
+ disabled?: boolean;
35
+ /** Highlight the ring color like a focus state. */
36
+ highlight?: boolean;
37
+ class?: any;
38
+ ui?: Input['slots'];
39
+ }
40
+ export interface InputEmits {
41
+ (e: 'update:modelValue', payload: string | number): void;
42
+ (e: 'blur', event: FocusEvent): void;
43
+ (e: 'change', event: Event): void;
44
+ }
45
+ export interface InputSlots {
46
+ leading(props?: {}): any;
47
+ default(props?: {}): any;
48
+ trailing(props?: {}): any;
49
+ }
50
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<InputProps & {
51
+ modelValue?: string | number | null;
52
+ }, {
53
+ inputRef: import("vue").Ref<HTMLInputElement | null, HTMLInputElement | null>;
54
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
55
+ "update:modelValue": (value: string | number | null | undefined) => any;
56
+ } & {
57
+ blur: (event: FocusEvent) => any;
58
+ change: (event: Event) => any;
59
+ "update:modelValue": (payload: string | number) => any;
60
+ }, string, import("vue").PublicProps, Readonly<InputProps & {
61
+ modelValue?: string | number | null;
62
+ }> & Readonly<{
63
+ onBlur?: ((event: FocusEvent) => any) | undefined;
64
+ onChange?: ((event: Event) => any) | undefined;
65
+ "onUpdate:modelValue"?: ((payload: string | number) => any) | undefined;
66
+ }>, {
67
+ type: import("vue").InputTypeHTMLAttribute;
68
+ autocomplete: string;
69
+ autofocusDelay: number;
70
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, InputSlots>;
71
+ export default _default;
72
+ type __VLS_WithSlots<T, S> = T & {
73
+ new (): {
74
+ $slots: S;
75
+ };
76
+ };