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).
📖 Nuxt UI reference: Input
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.
📖 Nuxt UI reference: Textarea
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.
📖 Nuxt UI reference: InputNumber
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
Key Props:
locale- BCP 47 locale used for number formatting (e.g.'de-DE')readonly- Render as read-only
Selection Components
nuxtUISelect
Dropdown select with search functionality.
📖 Nuxt UI reference: Select
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
Key Props:
content- Positioning/behavior config for the dropdown content
nuxtUISelectMenu
Advanced select with grouping and multiple selection support.
📖 Nuxt UI reference: SelectMenu
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
Key Props:
size- Component sizecontent- Positioning/behavior config for the dropdown contentby- Key or comparator used to match the selected value
nuxtUIListbox
Listbox for single/multiple selection with filtering.
📖 Nuxt UI reference: Listbox
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
Key Props:
color- Component color
nuxtUIInputMenu
Dropdown menu with searchable options.
📖 Nuxt UI reference: InputMenu
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
Key Props:
mode-'combobox'(default) or'autocomplete'content- Positioning/behavior config for the dropdown contentby- Key or comparator used to match the selected valueopen- Controlled open state of the menu
Boolean Inputs
nuxtUICheckbox
Single checkbox with label and description.
📖 Nuxt UI reference: Checkbox
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
Key Props:
trueValue/falseValue- Custom values emitted for the checked / unchecked states
nuxtUICheckboxGroup
Multiple checkbox selection.
📖 Nuxt UI reference: CheckboxGroup
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
Key Props:
name- Shared form control name for the group
nuxtUIRadioGroup
Radio button group for single selection.
📖 Nuxt UI reference: RadioGroup
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.
📖 Nuxt UI reference: Switch
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
Key Props:
trueValue/falseValue- Custom values emitted for the on / off states
Specialized Inputs
nuxtUIInputDate
Date and time picker with range support.
📖 Nuxt UI reference: InputDate
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.
📖 Nuxt UI reference: InputTime
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).
📖 Nuxt UI reference: ColorPicker
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 a custom delimiter.
📖 Nuxt UI reference: InputTags
Schema Example:
const schema = [
{
$formkit: 'nuxtUIInputTags',
name: 'tags',
label: 'Tags',
placeholder: 'Add tags...',
delimiter: ',',
help: 'Press comma to add a tag'
}
]2
3
4
5
6
7
8
9
10
Key Props:
delimiter- Character orRegExpused to split tags (e.g.',')
nuxtUIPinInput
PIN/OTP entry component.
📖 Nuxt UI reference: PinInput
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
Key Props:
type-'text'(default) or'number'separator- Insert a separator between inputs (index or list of indexes)
nuxtUISlider
Range slider for numeric values.
📖 Nuxt UI reference: Slider
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 →