Skip to main content
Vuetify0 is now in alpha!
Vuetify0 Logo
Theme
Mode
Palettes
Accessibility
Vuetify One
Sign in to Vuetify One

Access premium tools across the Vuetify ecosystem — Bin, Play, Studio, and more.

Not a subscriber? See what's included

createInput

Shared form field primitive with validation state, ARIA ID generation, and automatic form registration.

Usage

ts
import { createInput } from '@vuetify/v0'
import { ref } from 'vue'

const value = ref('')
const input = createInput({
  value,
  rules: [v => !!v || 'Required'],
})

// Field state
input.isDirty.value      // false (no content)
input.isPristine.value   // true (unchanged)
input.isTouched.value    // false (not interacted)

// Trigger validation
await input.validate()
input.isValid.value      // false
input.errors.value       // ['Required']
input.state.value        // 'invalid'

// Update value
value.value = 'hello'
input.isDirty.value      // true
input.isPristine.value   // false

// Reset
input.reset()
value.value              // '' (initial value)
input.isPristine.value   // true
input.isValid.value      // null (unvalidated)

Architecture

Reactivity

PropertyTypeDescription
valueRef<T>The field value (same ref passed in)
isDirtyReadonly<Ref<boolean>>Has content (via dirty predicate)
isPristineReadonly<Ref<boolean>>Unchanged since mount/reset
isFocusedShallowRef<boolean>Writable — component sets on focus/blur
isTouchedShallowRef<boolean>Writable — component sets after first interaction
isDisabledReadonly<Ref<boolean>>Resolved from disabled option
isReadonlyReadonly<Ref<boolean>>Resolved from readonly option
errorsReadonly<Ref<string[]>>Merged validation + manual errors
isValidReadonly<Ref<boolean | null>>Tri-state: null (unvalidated), true, false
isValidatingReadonly<Ref<boolean>>Async validation in progress
stateReadonly<Ref<InputState>>'pristine' | 'valid' | 'invalid'
MethodDescription
validate()Run rules, returns Promise<boolean>
reset()Restore initial value, clear validation
Tip

isDirty and isPristine are not inverses. A pre-filled form field is dirty AND pristine. A cleared field is not-dirty AND not-pristine.

Generic Types

createInput is generic over the value type:

ts
// String (default) — for text inputs
createInput({ value: ref('') })

// Number | null — for numeric inputs
createInput<number | null>({
  value: ref<number | null>(null),
  dirty: v => v !== null,
  equals: (a, b) => Object.is(a, b),
})

// ID | ID[] — for select inputs
createInput<ID | ID[]>({
  value: ref<ID[]>([]),
  dirty: v => Array.isArray(v) ? v.length > 0 : v != null,
})

Examples

API Reference

The following API details are for the createInput composable.
Was this page helpful?

Ctrl+/