Input Components
Comprehensive list of all FormKit-wrapped Nuxt UI input components with schema-based examples.
Overview
Nuxt UI FormKit provides fully-featured input components. All examples below show schema-based usage - the recommended approach for building forms.
Schema-First
All components are designed to work seamlessly in schemas. Template usage is also supported but schemas are the recommended pattern.
Text Inputs
nuxtUIInput
Text input component supporting various input types (text, email, password, url, tel, number, search).
Schema Example:
const schema = [
{
$formkit: 'nuxtUIInput',
name: 'email',
label: 'Email Address',
inputType: 'email',
placeholder: 'your.email@example.com',
leadingIcon: 'i-lucide-mail',
validation: 'required|email'
}
]2
3
4
5
6
7
8
9
10
11
Full Example:
<template>
<FUDataEdit :data="data" :schema="schema" />
</template>
<script setup lang="ts">
const data = ref({ email: '' })
const schema = [
{
$formkit: 'nuxtUIInput',
name: 'email',
label: 'Email Address',
inputType: 'email',
placeholder: 'your.email@example.com',
leadingIcon: 'i-lucide-mail',
trailingIcon: 'i-lucide-check',
size: 'lg',
validation: 'required|email'
}
]
</script>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Key Props:
inputType- HTML input type (text, email, password, url, tel, search)placeholder- Placeholder textleadingIcon- Icon before inputtrailingIcon- Icon after inputsize- Input size (xs, sm, md, lg, xl)
nuxtUITextarea
Multi-line text input with auto-resize functionality.
Schema Example:
const schema = [
{
$formkit: 'nuxtUITextarea',
name: 'message',
label: 'Message',
rows: 4,
autoresize: true,
placeholder: 'Enter your message...',
validation: 'required|length:10'
}
]2
3
4
5
6
7
8
9
10
11
nuxtUIInputNumber
Number input with increment/decrement buttons and formatting options.
Schema Example:
const schema = [
{
$formkit: 'nuxtUIInputNumber',
name: 'price',
label: 'Price',
min: 0,
step: 0.01,
formatOptions: {
style: 'currency',
currency: 'USD'
},
validation: 'required|min:0'
}
]2
3
4
5
6
7
8
9
10
11
12
13
14
Selection Components
nuxtUISelect
Dropdown select with search functionality.
Schema Example:
const schema = [
{
$formkit: 'nuxtUISelect',
name: 'country',
label: 'Country',
options: ['USA', 'UK', 'Canada', 'Australia'],
placeholder: 'Select a country',
validation: 'required'
}
]2
3
4
5
6
7
8
9
10
With Objects:
const schema = [
{
$formkit: 'nuxtUISelect',
name: 'role',
label: 'User Role',
options: [
{ label: 'Administrator', value: 'admin' },
{ label: 'Editor', value: 'editor' },
{ label: 'Viewer', value: 'viewer' }
]
}
]2
3
4
5
6
7
8
9
10
11
12
nuxtUISelectMenu
Advanced select with grouping and multiple selection support.
Schema Example:
const schema = [
{
$formkit: 'nuxtUISelectMenu',
name: 'technologies',
label: 'Technologies',
multiple: true,
options: [
{
label: 'Frontend',
children: [
{ label: 'Vue', value: 'vue' },
{ label: 'React', value: 'react' },
{ label: 'Svelte', value: 'svelte' }
]
},
{
label: 'Backend',
children: [
{ label: 'Node.js', value: 'node' },
{ label: 'Python', value: 'python' },
{ label: 'Go', value: 'go' }
]
}
]
}
]2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
nuxtUIListbox
Listbox for single/multiple selection with filtering.
Schema Example:
const schema = [
{
$formkit: 'nuxtUIListbox',
name: 'skills',
label: 'Skills',
multiple: true,
options: ['TypeScript', 'Vue', 'Nuxt', 'FormKit', 'TailwindCSS']
}
]2
3
4
5
6
7
8
9
nuxtUIInputMenu
Dropdown menu with searchable options.
Schema Example:
const schema = [
{
$formkit: 'nuxtUIInputMenu',
name: 'framework',
label: 'Framework',
options: ['Nuxt', 'Next.js', 'SvelteKit', 'Remix', 'Astro'],
placeholder: 'Search frameworks...'
}
]2
3
4
5
6
7
8
9
Boolean Inputs
nuxtUICheckbox
Single checkbox with label and description.
Schema Example:
const schema = [
{
$formkit: 'nuxtUICheckbox',
name: 'terms',
label: 'I agree to the terms and conditions',
description: 'You must accept to continue',
validation: 'accepted'
}
]2
3
4
5
6
7
8
9
nuxtUICheckboxGroup
Multiple checkbox selection.
Schema Example:
const schema = [
{
$formkit: 'nuxtUICheckboxGroup',
name: 'interests',
label: 'Interests',
options: [
{ label: 'Technology', value: 'tech', description: 'Software and hardware' },
{ label: 'Design', value: 'design', description: 'UI/UX and graphics' },
{ label: 'Business', value: 'business', description: 'Strategy and growth' }
]
}
]2
3
4
5
6
7
8
9
10
11
12
nuxtUIRadioGroup
Radio button group for single selection.
Schema Example:
const schema = [
{
$formkit: 'nuxtUIRadioGroup',
name: 'plan',
label: 'Select Plan',
options: [
{
label: 'Free',
value: 'free',
description: 'Basic features for getting started'
},
{
label: 'Pro',
value: 'pro',
description: 'Advanced features for professionals'
},
{
label: 'Enterprise',
value: 'enterprise',
description: 'Full features with dedicated support'
}
],
validation: 'required'
}
]2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
nuxtUISwitch
Toggle switch for boolean values.
Schema Example:
const schema = [
{
$formkit: 'nuxtUISwitch',
name: 'newsletter',
label: 'Subscribe to newsletter',
help: 'Get product updates and announcements'
}
]2
3
4
5
6
7
8
Specialized Inputs
nuxtUIInputDate
Date and time picker with range support.
Schema Example:
const schema = [
{
$formkit: 'nuxtUIInputDate',
name: 'eventDate',
label: 'Event Date',
enableTimePicker: false,
placeholder: 'Select date',
validation: 'required'
}
]2
3
4
5
6
7
8
9
10
With Time:
const schema = [
{
$formkit: 'nuxtUIInputDate',
name: 'appointment',
label: 'Appointment',
enableTimePicker: true,
placeholder: 'Select date and time'
}
]2
3
4
5
6
7
8
9
nuxtUIInputTime
Time picker with 12/24-hour format.
Schema Example:
const schema = [
{
$formkit: 'nuxtUIInputTime',
name: 'meetingTime',
label: 'Meeting Time',
placeholder: 'Select time'
}
]2
3
4
5
6
7
8
nuxtUIColorPicker
Color selection with multiple format support (hex, rgb, hsl).
Schema Example:
const schema = [
{
$formkit: 'nuxtUIColorPicker',
name: 'themeColor',
label: 'Theme Color',
mode: 'hex'
}
]2
3
4
5
6
7
8
nuxtUIInputTags
Tag input component with custom delimiters.
Schema Example:
const schema = [
{
$formkit: 'nuxtUIInputTags',
name: 'tags',
label: 'Tags',
placeholder: 'Add tags...',
delimiters: [',', ' '],
help: 'Press comma or space to add a tag'
}
]2
3
4
5
6
7
8
9
10
nuxtUIPinInput
PIN/OTP entry component.
Schema Example:
const schema = [
{
$formkit: 'nuxtUIPinInput',
name: 'pin',
label: 'Enter PIN',
length: 6,
type: 'number',
validation: 'required|length:6'
}
]2
3
4
5
6
7
8
9
10
nuxtUISlider
Range slider for numeric values.
Schema Example:
const schema = [
{
$formkit: 'nuxtUISlider',
name: 'volume',
label: 'Volume',
min: 0,
max: 100,
step: 1
}
]2
3
4
5
6
7
8
9
10
Complete Form Example
Here's a comprehensive example using multiple input types:
<template>
<FUDataEdit
:data="profileData"
:schema="profileSchema"
@data-saved="saveProfile"
/>
</template>
<script setup lang="ts">
const profileData = ref({
name: '',
email: '',
phone: '',
bio: '',
age: 25,
country: '',
role: '',
skills: [],
plan: 'free',
notifications: true,
newsletter: false
})
const profileSchema = [
{
$el: 'h3',
children: 'Personal Information',
attrs: { class: 'text-xl font-bold mb-4' }
},
{
$formkit: 'nuxtUIInput',
name: 'name',
label: 'Full Name',
validation: 'required'
},
{
$formkit: 'nuxtUIInput',
name: 'email',
inputType: 'email',
label: 'Email',
validation: 'required|email'
},
{
$formkit: 'nuxtUIInput',
name: 'phone',
inputType: 'tel',
label: 'Phone'
},
{
$formkit: 'nuxtUITextarea',
name: 'bio',
label: 'Bio',
rows: 3
},
{
$el: 'h3',
children: 'Additional Details',
attrs: { class: 'text-xl font-bold mt-6 mb-4' }
},
{
$formkit: 'nuxtUIInputNumber',
name: 'age',
label: 'Age',
min: 13,
max: 120
},
{
$formkit: 'nuxtUISelect',
name: 'country',
label: 'Country',
options: ['USA', 'UK', 'Canada', 'Australia']
},
{
$formkit: 'nuxtUISelectMenu',
name: 'skills',
label: 'Skills',
multiple: true,
options: ['Vue', 'Nuxt', 'TypeScript', 'FormKit']
},
{
$formkit: 'nuxtUIRadioGroup',
name: 'plan',
label: 'Plan',
options: [
{ label: 'Free', value: 'free' },
{ label: 'Pro', value: 'pro' }
]
},
{
$el: 'h3',
children: 'Preferences',
attrs: { class: 'text-xl font-bold mt-6 mb-4' }
},
{
$formkit: 'nuxtUISwitch',
name: 'notifications',
label: 'Enable notifications'
},
{
$formkit: 'nuxtUICheckbox',
name: 'newsletter',
label: 'Subscribe to newsletter'
}
]
const saveProfile = async (data: any) => {
await $fetch('/api/profile', { method: 'PUT', body: data })
}
</script>2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Template Usage (Alternative)
While schemas are recommended, template-based usage is also supported:
<FormKit
type="nuxtUIInput"
name="email"
label="Email"
input-type="email"
validation="required|email"
/>2
3
4
5
6
7
Recommendation
Use schemas for better maintainability and type safety. Use templates only for simple forms or when you need fine-grained layout control.
Common Props
All input components support:
name(required) - Field name for form datalabel- Field label texthelp- Help text below fieldplaceholder- Placeholder textvalidation- Validation rulesdisabled- Disable the inputsize- Component size
Next Steps
👁️ Output Components
Display-only components with schemas
View Output Components →
🔄 Repeater
Dynamic repeatable sections in schemas
Learn About Repeaters →
💡 Examples
Real-world schema-based forms
Browse Examples →