\n```\n\nI have to use `type=\"number\"` because we only allow numeric inputs here.\n\nPrior to adding the pin input, I used a simple input field and the schema portion was like this:\n\n```\n confirmationCode: z\n .string()\n .length(1, 'The code is required')\n .length(6, 'The code must be 6 digits long'),\n```\n\nBut when I switched to `u-pin-input`, that gave me the error \"Expected string, received array\", so I replaced it with this:\n\n```\n confirmationCode: z\n .array(z.coerce.string().length(1))\n .length(6, 'The code must be 6 digits long'),\n```\n\nThis works, but now I have a TypeScript error on the v-model: \n```\nType 'string' is not assignable to type 'number[]'.ts-plugin(2322)\nindex.d.ts(5532, 3): The expected type comes from property 'modelValue' which is declared here on type '{ readonly \"onUpdate:modelValue\"?: (value: number[]) => any; readonly onBlur?: (payload: Event) => any; readonly onChange?: (payload: Event) => any; readonly onComplete?: (value: number[]) => any; ... 19 more ...; otp?: boolean; } & VNodeProps & AllowedComponentProps & ComponentCustomProps'\n```\n\nAny additional adjustments I tried ended with further complications, so I figured it'd be better to ask than spend more time on hacky solutions that may introduce unintended scenarios.",[3145,3148],{"name":3146,"color":3147},"question","d876e3",{"name":3149,"color":3150},"v3","49DCB8",4779,"nuxt","ui","open","What's the correct way to type u-pin-input otp values in Zod?","2025-08-18T12:14:35Z","https://github.com/nuxt/ui/issues/4779",0.6756475,{"description":3160,"labels":3161,"number":3168,"owner":3152,"repository":3153,"state":3154,"title":3169,"updated_at":3170,"url":3171,"score":3172},"### Environment\n\n- Operating System: `Linux`\n- Node Version: `v20.11.1`\n- Nuxt Version: `-`\n- CLI Version: `3.28.0`\n- Nitro Version: `-`\n- Package Manager: `npm@10.2.4`\n- Builder: `-`\n- User Config: `-`\n- Runtime Modules: `-`\n- Build Modules: `-`\n\n### Is this bug related to Nuxt or Vue?\n\nBoth\n\n### Package\n\nv3.x\n\n### Version\n\nv3.3.2, but applies for v4 as well\n\n### Reproduction\n\n[Vue SFC Playground reproduction](https://play.vuejs.org/#eNp9kTFPwzAQhf+K5amVqkQIppJWBVQkGKCisHkJ6TW4JLZln0OkKP+ds6OEDqibfd+7u/fsjt8ZkzQe+JJnrrDSIHOA3rAqV+VKcHSCr4WStdEWWccs5AXKBljPjlbXTHBqFvx2knw8aluPbKN8i6mXaaGJKlDo0sDDxtgkVKGVo52YI7DVNH7W9XPCA9Rq7z9ricRnc7Zasx1Nlw4SC05XJL4K2iwd/JNbuiDUpqKZdGMsG0wthy0bF6dRuHGw4CwlYZaedfEFZaf9R1kmJ6cVPVAXZgkessgK7KtBSf4EX7JIAsurSv88xxpaD4uxXnxB8f1P/eTaUBN8R1nANvQqE8PclkDeAt7uX6Cl8wRrffAVqS/At/A6PngcZPdeHcj2mS66fYr/JlX57rYtgnJjqGA0KPuojx/9cCH6n93r5Cb2CdXz/hdp+c1W) (runtime is not required, issue is with types -- wait a bit until they load completely).\n\nCode:\n```vue\n\u003Cscript setup lang=\"ts\">\nimport { reactive } from \"vue\";\nimport UForm from \"@nuxt/ui/components/Form.vue\";\n\nconst state = reactive({});\nconst onSubmit = () => Promise.resolve(1);\n\u003C/script>\n\n\u003Ctemplate>\n \u003CUForm :state @submit=\"onSubmit\" />\n\u003C/template>\n```\n\nError:\n```\nType '() => Promise\u003Cnumber>' is not assignable to type '((event: FormSubmitEvent\u003Cany>) => any) & ((() => void | Promise\u003Cvoid>) | ((event: FormSubmitEvent\u003Cany>) => void | Promise\u003Cvoid>))'.\n Type '() => Promise\u003Cnumber>' is not assignable to type '((event: FormSubmitEvent\u003Cany>) => any) & (() => void | Promise\u003Cvoid>)'.ts(2322)\nForm.vue.d.ts(59, 18): The expected type comes from property 'onSubmit' which is declared here on type '__VLS_NormalizeComponentEvent\u003CNonNullable\u003C{ onSubmit?: ((event: FormSubmitEvent\u003Cany>) => any) & ((() => void | Promise\u003Cvoid>) | ((event: FormSubmitEvent\u003Cany>) => void | Promise\u003C...>)); ... 11 more ...; class?: any; } & VNodeProps & AllowedComponentProps & ComponentCustomProps>, { ...; }, \"onSubmit\", \"submit\", \"submi...'\n---\n(property) onSubmit?: ((event: FormSubmitEvent\u003Cany>) => any) & ((() => void | Promise\u003Cvoid>) | ((event: FormSubmitEvent\u003Cany>) => void | Promise\u003Cvoid>))\n```\n\n### Description\n\n`\u003CUForm>`s `@submit` event handler type require that it does not return any value. This is needlessly constraining.\n\n### Additional context\n\nThis is not required by the implementation, but instead wholly caused by the types of `onSubmit` property:\nhttps://github.com/nuxt/ui/blob/901bf7cac3ea53264b27adf879ee4072fa9ac242/src/runtime/components/Form.vue#L53\n\nResult of the `onSubmit` prop is not used at all:\nhttps://github.com/nuxt/ui/blob/901bf7cac3ea53264b27adf879ee4072fa9ac242/src/runtime/components/Form.vue#L243\n\nReplacing the type of `onSubmit` with this should be enough:\n```typescript\nexport interface FormProps\u003CS extends FormSchema, T extends boolean = true> {\n // ...\n onSubmit?: (event: FormSubmitEvent\u003CFormData\u003CS, T>>) => unknown\n}\n```\nThis should still allow passing event handlers without arguments.\n\n### Logs\n\n```shell-script\n\n```",[3162,3165],{"name":3163,"color":3164},"bug","d73a4a",{"name":3166,"color":3167},"triage","ffffff",4873,"`UForm` `onSubmit` type is needlessly constrained","2025-09-02T05:54:14Z","https://github.com/nuxt/ui/issues/4873",0.7053457,{"description":3174,"labels":3175,"number":3179,"owner":3152,"repository":3153,"state":3154,"title":3180,"updated_at":3181,"url":3182,"score":3183},"### Environment\n\n------------------------------\n- Operating System: Linux\n- Node Version: v20.12.0\n- Nuxt Version: 3.17.3\n- CLI Version: 3.25.1\n- Nitro Version: 2.11.12\n- Package Manager: pnpm@8.15.6\n- Builder: -\n- User Config: modules, devtools, compatibilityDate, future, css\n- Runtime Modules: @nuxt/ui@3.2.0\n- Build Modules: -\n------------------------------\n\n### Is this bug related to Nuxt or Vue?\n\nNuxt\n\n### Version\n\nv3.2.0\n\n### Reproduction\n\nhttps://codesandbox.io/p/devbox/fragrant-fog-7ck4yf\n\nThe schema specifies that the items within the list must be numbers, and the UForm catches the error (displayed in the UAlert below), but the UInputTag object doesn't display it\n\n\u003Cimg width=\"780\" height=\"220\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/9594e307-2f7d-4928-b877-d08795abc4b5\" />\n\n### Description\n\nThe UInputTag element does not correctly render the error text for schema validation errors for pattern matching of the individual items within its array. \n\nIt works fine showing an error about the length of the array, but not about problems for the items within the array.\n\n\u003Cimg width=\"779\" height=\"328\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/cf031108-314b-4fd5-9859-cd275b8d3410\" />\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell-script\n\n```",[3176,3177,3178],{"name":3163,"color":3164},{"name":3149,"color":3150},{"name":3166,"color":3167},4573,"UInputTag does not display validation errors for pattern matching","2025-07-22T14:39:33Z","https://github.com/nuxt/ui/issues/4573",0.72204244,{"description":3185,"labels":3186,"number":3189,"owner":3152,"repository":3153,"state":3190,"title":3191,"updated_at":3192,"url":3193,"score":3194},"### Description\n\n```\n\u003Cscript setup lang=\"ts\">\nimport * as z from \"zod\";\nimport type { FormSubmitEvent } from \"@nuxt/ui\";\ninterface Props {\n cabinData?: Cabin;\n}\nconst props = defineProps\u003CProps>();\nconst form = useTemplateRef(\"form\");\n\nconst schema = z.object({\n name: z.string().min(1, \"Cabin name is required\"),\n capacity: z.number().min(1, \"Capacity must be at least 1\").optional(),\n price: z.number().min(0, \"Price must be at least 0\").optional(),\n discount: z.number().min(0, \"Discount must be at least 0\").optional(),\n image: z.string().optional(),\n});\n\nconst isDirty: ComputedRef\u003Cboolean | undefined> = computed(() => {\n return form.value?.dirty;\n});\n\ntype Schema = z.output\u003Ctypeof schema>;\nconst state = reactive\u003CPartial\u003CSchema>>({\n name: props.cabinData?.name || \"\",\n capacity: props.cabinData?.capacity || undefined,\n price: props.cabinData?.price || undefined,\n discount: props.cabinData?.discount || undefined,\n image: undefined,\n});\nasync function onSubmit(event: FormSubmitEvent\u003CSchema>) {}\n\u003C/script>\n\n\u003Ctemplate>\n \u003CUForm\n ref=\"form\"\n :schema=\"schema\"\n :state=\"state\"\n class=\"w-full space-y-8\"\n @submit=\"onSubmit\"\n >\n \u003Cdiv class=\"border-b-grey-200 flex gap-12 border-b py-4\">\n \u003Clabel for=\"name\" class=\"w-1/5 font-semibold\">Name\u003C/label>\n \u003CUFormField name=\"name\">\n \u003CUInput\n id=\"name\"\n v-model=\"state.name\"\n color=\"info\"\n :ui=\"{\n base: ' disabled:bg-grey-50/10',\n }\"\n />\n \u003C/UFormField>\n \u003C/div>\n\n \u003Cdiv class=\"border-b-grey-200 flex gap-12 border-b py-4\">\n \u003Clabel for=\"capacity\" class=\"w-1/5 font-semibold\">Capacity\u003C/label>\n \u003CUFormField name=\"capacity\">\n \u003CUInputNumber\n id=\"capacity\"\n v-model=\"state.capacity\"\n color=\"info\"\n :ui=\"{\n base: ' disabled:bg-grey-50/10',\n }\"\n />\n \u003C/UFormField>\n \u003C/div>\n\n \u003Cdiv class=\"border-b-grey-200 flex gap-12 border-b py-4\">\n \u003Clabel for=\"price\" class=\"w-1/5 font-semibold\">Price\u003C/label>\n \u003CUFormField name=\"price\">\n \u003CUInputNumber\n id=\"price\"\n v-model=\"state.price\"\n color=\"info\"\n :ui=\"{\n base: ' disabled:bg-grey-50/10',\n }\"\n />\n \u003C/UFormField>\n \u003C/div>\n\n \u003Cdiv class=\"border-b-grey-200 flex gap-12 border-b py-4\">\n \u003Clabel for=\"discount\" class=\"w-1/5 font-semibold\">Discount\u003C/label>\n \u003CUFormField name=\"discount\">\n \u003CUInputNumber\n id=\"discount\"\n v-model=\"state.discount\"\n color=\"info\"\n :ui=\"{\n base: ' disabled:bg-grey-50/10',\n }\"\n />\n \u003C/UFormField>\n \u003C/div>\n\n \u003Cdiv class=\"flex justify-end pt-4\">\n \u003CUTooltip arrow text=\"Data has not been changed\">\n \u003CUButton\n type=\"submit\"\n class=\"bg-brand-600 text-brand-50 hover:bg-brand-700 px-4 py-2 uppercase hover:cursor-pointer\"\n size=\"lg\"\n :disabled=\"!isDirty\"\n >\n Update Data\n \u003C/UButton>\n \u003C/UTooltip>\n\n \u003CUButton\n class=\"bg-grey-200 text-grey-900 hover:bg-grey-50 ml-2 px-4 py-2 uppercase hover:cursor-pointer\"\n size=\"lg\"\n @click=\"\n state.name = '';\n state.capacity = undefined;\n state.price = undefined;\n state.discount = undefined;\n state.image = undefined;\n form?.clear();\n \"\n >\n Cancel\n \u003C/UButton>\n \u003C/div>\n \u003C/UForm>\n\u003C/template>\n\n```\n\n> this is my code i want disable button depending on if fields is dirty or not i'm using computed now but i used ref alswo watchEffect and watch with getter to watch if is there any changes in fields,but depending on documentation dirty is ref boolean but it doesn't change what am i doing wrong ?",[3187,3188],{"name":3146,"color":3147},{"name":3149,"color":3150},4402,"closed","UForm dirty isn't reactive ?","2025-06-26T13:33:41Z","https://github.com/nuxt/ui/issues/4402",0.68016756,{"description":3196,"labels":3197,"number":3204,"owner":3152,"repository":3153,"state":3190,"title":3205,"updated_at":3206,"url":3207,"score":3208},"### Environment\r\n\r\n- Operating System: Windows_NT\r\n- Node Version: v20.12.2\r\n- Nuxt Version: 3.10.3\r\n- CLI Version: 3.10.1\r\n- Nitro Version: 2.9.1\r\n- Package Manager: pnpm@8.3.1\r\n- Builder: -\r\n- User Config: app, colorMode, ui, css, modules, runtimeConfig, authJs, pinia, nitro, alias, devtools, imports, typescript\r\n- Runtime Modules: @pinia/nuxt@0.4.11, @pinia-plugin-persistedstate/nuxt@1.2.0, @vueuse/nuxt@9.13.0, @hebilicious/authjs-nuxt@0.3.0-beta.2, @nuxtjs/eslint-module@4.1.0, nuxt-monaco-editor@1.2.7, nuxt-lodash@2.5.3, @nuxt/ui@2.14.2\r\n- Build Modules: -\r\n\r\n### Version\r\n\r\nv2.14.2\r\n\r\n### Reproduction\r\n\r\nhttps://stackblitz.com/edit/nuxt-ui-eqhn2j?file=app.vue\r\n\r\n### Description\r\n\r\nI'm getting multiple new type errors that I wasn't getting before with types that used to be valid. I think this is being caused by an update to `vue-tsc`, however I'm not sure.\r\n\r\nIn the reproduction link you can see the two examples that don't compile. Simply run `npm run typecheck` in the console to get the errors\r\nHere are the minimal examples\r\n```html\r\n\u003Cscript setup lang=\"ts\">\r\nconst value = ref\u003Cstring | null | undefined>(undefined);\r\n\u003C/script>\r\n\r\n\u003Ctemplate>\r\n \u003Cdiv>\r\n \u003CUInput v-model.trim=\"value\" />\r\n \u003C/div>\r\n\u003C/template>\r\n```\r\n```shell-script\r\nTS2322: Type 'string | null | undefined' is not assignable to type 'string | number | undefined'.\r\n```\r\n```html\r\n\u003Cscript setup lang=\"ts\">\r\nconst value = ref\u003Cboolean|undefined>();\r\nconst options = [\r\n {\r\n label: 'Yes',\r\n value: true\r\n },\r\n {\r\n label: 'No',\r\n value: false\r\n },\r\n {\r\n label: 'None selected',\r\n value: undefined\r\n }\r\n];\r\n\u003C/script>\r\n\u003Ctemplate>\r\n \u003Cdiv>\r\n \u003CUSelectMenu\r\n :options=\"options\"\r\n v-model=\"value\"\r\n value-attribute=\"value\" option-attribute=\"label\"\r\n />\r\n \u003C/div>\r\n\u003C/template>\r\n```\r\n```shell-script\r\nTS2322: Type 'boolean | undefined' is not assignable to type 'string | number | Record\u003Cstring, any> | unknown[] | undefined'.\r\n```\r\n\r\n### Additional context\r\n\r\n\r\n### Logs\r\n\r\n```shell-script\r\napp.vue:14:15 - error TS2322: Type 'string | null | undefined' is not assignable to type 'string | number | undefined'.\r\n\r\n14 \u003CUInput v-model.trim=\"inputValue\" />\r\n ~~~~~~~~~~\r\n\r\n node_modules/@nuxt/ui/dist/runtime/components/forms/Input.vue.d.ts:244:5\r\n 244 modelValue: string | number;\r\n ~~~~~~~~~~\r\n The expected type comes from property 'modelValue' which is declared here on type 'Partial\u003C{ size: InputSize; ui: any; id: string; icon: string; color: any; type: string; class: any; name: string; modelValue: string | number; leading: boolean; variant: InputVariant; ... 12 more ...; modelModifiers: { ...; }; }> & Omit\u003C...> & Record\u003C...>'\r\n\r\n\r\nFound 1 error in app.vue:14\r\n```\r\n",[3198,3199,3202],{"name":3163,"color":3164},{"name":3200,"color":3201},"closed-by-bot","ededed",{"name":3203,"color":3201},"stale",1710,"Unable to use boolean values with USelectMenu or null with UInput","2025-06-19T02:12:37Z","https://github.com/nuxt/ui/issues/1710",0.6898508,{"description":3210,"labels":3211,"number":3215,"owner":3152,"repository":3153,"state":3190,"title":3216,"updated_at":3217,"url":3218,"score":3219},"### Environment\n\n- Operating System: Linux\n- Node Version: v22.11.0\n- Nuxt Version: 4.0.3\n- CLI Version: 3.27.0\n- Nitro Version: 2.12.4\n- Package Manager: pnpm@10.14.0\n- Builder: -\n- User Config: modules, $production, components, devtools, app, css, site, mdc, ui, compatibilityDate, nitro, vite, eslint, fonts, icon, linkChecker, ogImage, seo, sitemap\n- Runtime Modules: @nuxtjs/seo@3.1.0, @vueuse/nuxt@13.7.0, @nuxt/ui@3.3.2, @nuxt/eslint@1.9.0, @nuxt/scripts@0.11.10, motion-v/nuxt@1.7.0, @nuxtjs/mdc@0.17.2\n- Build Modules: -\n\n### Is this bug related to Nuxt or Vue?\n\nNuxt\n\n### Package\n\nv3.x\n\n### Version\n\nv3.3.2\n\n### Reproduction\n\n```vue\n\u003Cscript setup lang=\"ts\">\n// This causes TypeScript error\nconst handleFileChange = (file: File | File[] | null) => {\n console.log(file);\n};\n\u003C/script>\n\n\u003Ctemplate>\n \u003CUFileUpload @update:model-value=\"handleFileChange\" />\n\u003C/template>\n```\n\n### Description\n\nThe `@update:model-value` event handler for `UFileUpload` component emits `unknown` type instead of the documented type `File | File[] | null | undefined`.\n\n**Expected Behavior (per documentation)**\nAccording to the [official documentation](https://ui.nuxt.com/components/file-upload#emits), the `@update:model-value` event should emit:\n- `[value: File | File[] | null | undefined]`\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell-script\n\n```",[3212,3213,3214],{"name":3163,"color":3164},{"name":3149,"color":3150},{"name":3166,"color":3167},4852,"Type mismatch: UFileUpload @update:model-value emits unknown instead of documented type","2025-09-01T10:56:13Z","https://github.com/nuxt/ui/issues/4852",0.69965035,{"description":3221,"labels":3222,"number":3225,"owner":3152,"repository":3153,"state":3190,"title":3226,"updated_at":3227,"url":3228,"score":3229},"### Description\n\nI have a file field **without** `v-model`, then I select a file. I have another field with a validation error. On submit, the validation error is shown on the email field and the file field is cleared. Is this a bug or a feature. With version `3.2.0` this behaviour does not exist. In `3.3.0` it does. It might be related to one of the dependencies though, because if I first upgrade to 3.3.0 and then go back to 3.2.0, where the lockfile still shows a lot of changes, the problem still exists.\n\n```vue\n\u003Cscript setup lang=\"ts\">\nimport type { FormError, FormSubmitEvent } from '#ui/types'\n\nconst state = reactive({\n email: undefined,\n file: undefined,\n})\n\nconst validate = (): FormError[] => {\n const errors = []\n errors.push({ name: 'email', message: 'Required' })\n return errors\n}\n\nasync function onSubmit(event: FormSubmitEvent\u003Ctypeof state>) {\n console.log(event.data)\n}\n\u003C/script>\n\n\u003Ctemplate>\n \u003CUForm\n :validate=\"validate\"\n :state=\"state\"\n class=\"space-y-4\"\n @submit=\"onSubmit\"\n\n \u003CUFormField label=\"Email\" name=\"email\">\n \u003CUInput v-model=\"state.email\" />\n \u003C/UFormField>\n\n \u003CUFormField label=\"File\" name=\"file\">\n \u003CUInput type=\"file\" />\n \u003C/UFormField>\n\n \u003CUButton type=\"submit\"> Submit \u003C/UButton>\n \u003C/UForm>\n\u003C/template>\n```",[3223,3224],{"name":3146,"color":3147},{"name":3149,"color":3150},4637,"File field gets cleared, bug?","2025-08-21T08:42:25Z","https://github.com/nuxt/ui/issues/4637",0.7017736,{"description":3231,"labels":3232,"number":3243,"owner":3152,"repository":3153,"state":3190,"title":3244,"updated_at":3245,"url":3246,"score":3247},"### Environment\n\n- Operating System - Ubuntu 22\n- Node Version: 22\n- Nuxt Version: 3.17.5\n- CLI Version: 3.25.1\n- Package Manager: pnpm@10.9.0\n\n### Is this bug related to Nuxt or Vue?\n\nNuxt\n\n### Version\n\n3.17.5\n\n### Reproduction\n\n```javascript\nconst fields = ref([\n {\n name: 'code',\n type: 'otp',\n placeholder: 'Enter 6-digit code',\n otp: {\n length: 6,\n placeholder: '●',\n },\n },\n])\n\nconst submitButtonOptions = computed(() => ({\n label: 'Verify Code',\n loading: loading.value,\n}))\n\u003C/script>\n\n\u003Ctemplate>\n \u003Cdiv class=\"flex min-h-screen items-center justify-center p-4\">\n \u003CUPageCard class=\"w-full max-w-md\">\n \u003CUAuthForm\n :schema=\"schema\"\n :state=\"credentials\"\n :fields=\"fields\"\n :loading=\"loading\"\n title=\"Multi-Factor Authentication\"\n subtitle=\"Enter the 6-digit code from your authenticator app to continue.\"\n :submit=\"submitButtonOptions\"\n @submit=\"verifyMFA\"\n >\n \u003Ctemplate #header>\n \u003CNuxtImg\n src=\"/thinkrocket-logo.png\"\n alt=\"ThinkRocket Logo\"\n width=\"100\"\n class=\"mx-auto\"\n preset=\"contain\"\n />\n \u003C/template>\n\n \u003Ctemplate #validation>\n \u003CUAlert\n v-if=\"mfaError\"\n color=\"error\"\n icon=\"i-lucide-alert-circle\"\n :title=\"mfaError\"\n class=\"mb-4\"\n />\n \u003C/template>\n\n \u003Ctemplate #footer>\n \u003Cdiv class=\"text-center space-y-2\">\n \u003Cp class=\"text-sm text-gray-600 dark:text-gray-300\">\n Check your authenticator app for the current code.\n \u003C/p>\n \u003CUButton variant=\"ghost\" size=\"sm\" :loading=\"loading\" @click=\"refreshChallenge\">\n \u003CUIcon name=\"i-lucide-refresh-cw\" class=\"h-4 w-4 mr-1\" />\n Get New Code\n \u003C/UButton>\n \u003C/div>\n \u003C/template>\n \u003C/UAuthForm>\n \u003C/UPageCard>\n \u003C/div>\n\u003C/template>\n```\n\n### Description\n\n`:fields` is throwing typescript error. Only an issue with `otp`. Looking in\n\n- `node_modules/.pnpm/@nuxt+ui-pro@3.1.3_@babel+parser@7.27.5_db0@0.3.2_better-sqlite3@11.10.0__embla-carouse_48b559106e80aa1b3007fc5d3af2ab7f/node_modules/@nuxt/ui-pro/dist/runtime/components/AuthForm.vue.d.ts`\n- `node_modules/.pnpm/@nuxt+ui@3.1.3_@babel+parser@7.27.5_db0@0.3.2_better-sqlite3@11.10.0__embla-carousel@8._6f36fdd0332a5dab432a961d27814af8/node_modules/@nuxt/ui/dist/runtime/components/PinInput.vue.d.ts`\n- `node_modules/.pnpm/reka-ui@2.3.1_typescript@5.8.3_vue@3.5.16_typescript@5.8.3_/node_modules/reka-ui/dist/index.d.ts`\n \nI'm not seeing what I'm missing. The [docs](https://ui.nuxt.com/components/auth-form#props) don't give any other details than the example.\n\n```\nVue: Type\n{\n name: string;\n type: string;\n placeholder: string;\n otp: {\n length: number;\n placeholder: string;\n };\n}[]\nis not assignable to type AuthFormField[]\nType\n{\n name: string;\n type: string;\n placeholder: string;\n otp: {\n length: number;\n placeholder: string;\n };\n}\nis not assignable to type AuthFormField\n```\n\n### Additional context\n\n_No response_\n\n### Logs\n\n```shell-script\n\n```",[3233,3234,3237,3238,3241,3242],{"name":3163,"color":3164},{"name":3235,"color":3236},"needs reproduction","CB47CF",{"name":3149,"color":3150},{"name":3239,"color":3240},"nuxt/ui-pro","00dc82",{"name":3166,"color":3167},{"name":3200,"color":3201},4317,"UAuthForm otp typescript error","2025-06-18T02:14:57Z","https://github.com/nuxt/ui/issues/4317",0.7047984,{"description":3249,"labels":3250,"number":3256,"owner":3152,"repository":3153,"state":3190,"title":3257,"updated_at":3258,"url":3259,"score":3260},"### Description\n\nI’d like to import Zod schemas for all built-in Nuxt UI components from the `@nuxt/ui` package so that my frontmatter validation in `content.config.ts` is accurate, DRY, and immediately usable.\n\n**Use case**\n\n- **Accurate frontmatter validation** for Nuxt Studio\n Pull in ready-to-use schemas for:\n\n - **Enums** like button `variant` or `color`\n - **Common elements** such as `Image`\n - **Complex components** like `PageSection`\n\n**Alternatives considered**\n\n* Manually recreating every enum, element, and component shape in custom Zod files (error-prone and high maintenance).\n *See a manual example here:*\n [https://github.com/nuxt-ui-pro/saas/blob/main/content.config.ts](https://github.com/nuxt-ui-pro/saas/blob/main/content.config.ts)\n\n**Proposed solution**\n\n- Publish each component’s Zod schema under `@nuxt/ui/schemas/{ComponentName}.ts` (e.g. `@nuxt/ui/schemas/PageSection.ts`)\n- Provide a barrel file for easy imports:\n\n ```ts\n import {\n colorEnum \n createImageSchema,\n createLinkSchema,\n createPageSectionSchema,\n } from '@nuxt/ui'\n ```\n\n### Additional context\n\n_No response_",[3251,3254,3255],{"name":3252,"color":3253},"enhancement","a2eeef",{"name":3149,"color":3150},{"name":3166,"color":3167},4161,"Export Zod schemas for Nuxt UI component props for use in content.config.ts","2025-05-28T13:02:08Z","https://github.com/nuxt/ui/issues/4161",0.7062539,{"description":3262,"labels":3263,"number":3272,"owner":3152,"repository":3152,"state":3190,"title":3273,"updated_at":3274,"url":3275,"score":3276},"### Environment\n\n------------------------------\r\n- Operating System: Windows_NT\r\n- Node Version: v20.11.1\r\n- Nuxt Version: 3.11.2\r\n- CLI Version: 3.11.1\r\n- Nitro Version: 2.9.6\r\n- Package Manager: npm@10.4.0\r\n- Builder: -\r\n- User Config: ssr, debug, runtimeConfig, devtools, modules, ui, css, app, supabase, security\r\n- Runtime Modules: @nuxtjs/supabase@1.2.0, @vueuse/nuxt@10.9.0, @pinia/nuxt@0.5.1, @nuxt/ui@2.15.2, @pinia-plugin-persistedstate/nuxt@1.2.0, nuxt-icon@0.6.10, @nuxtjs/device@3.1.1\r\n- Build Modules: -\r\n------------------------------\n\n### Reproduction\n\n// discussion link https://github.com/nuxt/nuxt/discussions/27331\n\n### Describe the bug\n\nHello,\r\n\r\nI am trying to validate a form with an async request to a server route that works fine when tested on its own, however, in the zod validation always returns false.\r\n\r\nI am trying to prevent user from attempting to register with an email that has already been taken, and so validating inside a nuxtui form by calling this async server route. \r\n\r\ntesting the server route works just fine and return expected true or false\r\n`http://localhost:3000/user/is_email_available?email=er.ttt@gmail.com` returns true or false as expected\r\nbut for some reason always returns false in the zod schema validation. \r\n\r\n\r\n```\r\nconst schema = z.object({\r\n tenant_name: z.string({ required_error: \"Business Name is required\" }).\r\n min(2, { message: \"Must be at least 2 characters\" }).\r\n refine(async (val) => await tenantSlugAvailable(slugify(val)), (val) => ({ message: `${val} is not available` })),\r\n email: z.string({ required_error: \"Business Email is required\" }).email({ message: \"Invalid email address\" }).\r\n refine(async (val) => { await useFetch('user/is_email_available', { query: { email: val } }) }, (val) => ({ message: `${val} is not available` })),\r\n password: z.string({ required_error: \"Password is required\" }).min(8, { message: 'Must be at least 8 characters' }),\r\n confirmPassword: z.string({ required_error: \"Password Confirmation is required\" }).min(8, { message: 'Must be at least 8 characters' })\r\n}).refine((values) => values.password === values.confirmPassword,\r\n {\r\n message: \"Passwords must match!\",\r\n path: [\"confirmPassword\"],\r\n }\r\n);\r\n```\r\n\r\nPlease can someone take a look and show me what I am doing wrong? have spent a day on this already and not making any headway.\r\n\r\nThanks\r\n\n\n### Additional context\n\nhttps://github.com/nuxt/nuxt/discussions/27331\n\n### Logs\n\n_No response_",[3264,3267,3270],{"name":3265,"color":3266},"3.x","29bc7f",{"name":3268,"color":3269},"pending triage","E99695",{"name":3235,"color":3271},"FBCA04",27349,"Zod Async Refine always returning false","2024-05-24T20:15:44Z","https://github.com/nuxt/nuxt/issues/27349",0.70777565,["Reactive",3278],{},["Set"],["ShallowReactive",3281],{"$fTRc1wZytZ_XrK4EfJfei_Sz-An4H4Yy6syhVxH_PVJc":-1,"$fVh5ybaK5G8K5y02yyL6ftlxybX0OUkq0llGXcBbuHX4":-1},"/nuxt/ui/2462"]