Skip to content

Справочник ​

Архитектура ​

useForm
  │
  ├── Нормализация схемы (json / zod / yup / valibot / openapi)
  │     └── FieldDefinition[]
  │
  ├── ConditionEvaluator
  │     watchEffect → вычисляет visible / disabled / options для каждого поля
  │
  ├── ValidationEngine
  │     синхронные валидаторы   → errors Record<path, string[]>
  │     асинхронные валидаторы  → дебаунс 300мс
  │     getByPath / setByPath — хелперы для dot-path, также экспортированы отдельно
  │
  ├── schemaUtils
  │     mergeSchemas / omitFields / pickFields / extendField
  │     discriminatedFields — visible-связка для наборов полей на основе дискриминатора
  │
  ├── serverErrors
  │     applyServerErrors / normalizeServerErrors — laravel / drf / flat / кастомный
  │
  ├── registry
  │     createFormRegistry (плагин Vue) / provideRegistry (поддерево) / useRegistry
  │     — цепочка подмены компонентов, читаемая FormRenderer и его тематическими вариантами
  │
  ├── MaskEngine (автономный)
  │     applyMask / removeMask / bindMask
  │
  └── (опционально) UI-подпакеты
        FormRenderer             [/ui]
        TailwindFormRenderer     [/ui/tailwind]
        ShadcnFormRenderer       [/ui/shadcn]
        PrimeVueFormRenderer     [/ui/primevue]
        NaiveFormRenderer        [/ui/naive]
        useFieldArray            [core]
        useMultiStepForm         [core]
        useFormDebug             [core]
        useFormField             [core]
        installFormDevtools      [/devtools]

Совместимость с SSR ​

Ядро (useForm, валидаторы, парсеры, ConditionEvaluator) не использует browser API. bindMask и FormRenderer используют DOM API — оборачивайте их в onMounted или <ClientOnly>, когда нужно. Персистентные формы (persist: 'local' | 'session') защищают чтение из хранилища проверкой typeof window !== 'undefined', так что при SSR они разрешаются в собственный defaultValue поля и подхватывают реальное сохранённое значение после монтирования.

Доступность ​

Все встроенные компоненты полей включают полный набор атрибутов a11y:

aria-required ​

Устанавливается в "true" на обязательных input, select, textarea, fieldset.

aria-invalid ​

Устанавливается в "true", когда поле touched и есть ошибки.

aria-describedby ​

Указывает на "{name}-error", когда есть ошибки.

role="alert" + aria-live="polite" ​

Списки ошибок озвучиваются скринридерами при появлении.

label[for] + input[id] ​

Все input имеют соответствующие label и id.

fieldset + legend ​

Группы radio используют семантическую группировку.

aria-checked ​

Чекбоксы явно отражают булево состояние.

Размер бандла и peer-зависимости ​

Точка входаPeer-зависимостиЗаметки
vue-form-schemavue ^3.3Базовая часть — headless, без UI
vue-form-schema/zodzod ^3Опциональный адаптер
vue-form-schema/yupyup ^1Опциональный адаптер
vue-form-schema/valibotvalibot ^1Опциональный адаптер
vue-form-schema/openapiнетАдаптер стандартной JSON Schema / OpenAPI — без peer-зависимостей
vue-form-schema/uivue ^3.3Встроенные компоненты в стиле BEM
vue-form-schema/ui/tailwindvue ^3.3, Tailwind CSSКомпоненты на utility-классах Tailwind
vue-form-schema/ui/shadcnvue ^3.3, Tailwind CSSTailwind-разметка в стиле shadcn/ui (см. заметку выше — не обёртка компонентов shadcn-vue)
vue-form-schema/ui/primevuevue ^3.3, primevue ^4 | ^5Настоящие обёртки компонентов PrimeVue
vue-form-schema/ui/naivevue ^3.3, naive-ui ^2.38Настоящие обёртки компонентов Naive UI
vue-form-schema/devtools@vue/devtools-api ^6 | ^7 | ^8Инспектор Vue DevTools + таймлайн, только для dev
vue-form-schema/style.css—Стили для dropzone загрузки файлов в теме ui/primevue — импортируйте один раз, если используете FileField этой темы

Все точки входа — tree-shakeable ESM + CJS сборки.

Лицензия ​

MIT