Skip to content

UI-темы

Компонент FormRenderer

ts
import { FormRenderer } from '@macrulez/vue-form-schema/ui'

Пропсы

ПропТипПо умолчаниюОписание
formUseFormReturnВозвращаемое значение useForm
componentsPartial<Record<FieldType, Component>>встроенныеПереопределить рендереры по типу
submitLabelstring'Submit'Текст кнопки отправки

Слоты

СлотОбласть видимостиОписание
#field-{name}{ field, value, error, touched, setValue, touch }Заменить поле целиком
#label-{name}{ field }Заменить метку
#error-{name}{ field, error }Заменить отображение ошибки
#submit{ isSubmitting, isValid }Заменить кнопку отправки

Встроенные компоненты полей

Все экспортированы по отдельности из vue-form-schema/ui:

КомпонентТипы полей
TextFieldtext, email
NumberFieldnumber
TextareaFieldtextarea
SelectFieldselect
CheckboxFieldcheckbox
RadioFieldradio
DateFielddate
ArrayFieldarray
FileFieldfile

Тема Tailwind UI

Готовая замена FormRenderer на утилитарных классах Tailwind — никакого кастомного CSS в вашем приложении не нужно. Требует установленный и настроенный на сканирование исходников библиотеки Tailwind CSS.

ts
import { TailwindFormRenderer } from '@macrulez/vue-form-schema/ui/tailwind'
vue
<!-- Та же форма, та же схема — просто замените рендерер -->
<TailwindFormRenderer :form="form" submit-label="Save" />

Все компоненты полей также экспортированы по отдельности:

ts
import {
  TwTextField,
  TwSelectField,
  TwCheckboxField,
  TwRadioField,
  TwFileField,
  TwArrayField,
  // …
} from '@macrulez/vue-form-schema/ui/tailwind'

Темы shadcn / PrimeVue / Naive UI

Ещё три готовые замены FormRenderer для популярных библиотек компонентов — та же схема, тот же useForm, просто смените рендерер.

ts
import { ShadcnFormRenderer } from '@macrulez/vue-form-schema/ui/shadcn'
import { PrimeVueFormRenderer } from '@macrulez/vue-form-schema/ui/primevue'
import { NaiveFormRenderer } from '@macrulez/vue-form-schema/ui/naive'
vue
<ShadcnFormRenderer :form="form" submit-label="Save" />
<PrimeVueFormRenderer :form="form" submit-label="Save" />
<NaiveFormRenderer :form="form" submit-label="Save" />
ТемаЧто это на самом деле
ui/shadcnНе обёртка вокруг импортируемых компонентов shadcn-vue — shadcn-vue поставляется как copy-paste исходники через свой CLI, а не как npm-библиотека компонентов, так что импортировать нечего. Эта тема — Tailwind-разметка, стилизованная собственным словарём utility-классов shadcn/ui (border-input, bg-primary, text-destructive, ring-ring, …). Подключите её в проект, где уже настроены токены темы Tailwind от shadcn-vue (npx shadcn-vue init), и она впишется нативно — то же требование, что и у ui/tailwind для самого Tailwind CSS.
ui/primevueНастоящие компоненты-обёртки вокруг собственных компонентов PrimeVue (InputText, Select, RadioButton, Checkbox, DatePicker, Message, Button, …). Требует установленный primevue ^4 или ^5 и зарегистрированный его Vue-плагин (app.use(PrimeVue, { theme: { preset: Aura } }) или свой пресет).
ui/naiveНастоящие компоненты-обёртки вокруг собственных компонентов Naive UI (NInput, NSelect, NRadioGroup, NCheckbox, NDatePicker, NFormItem, NButton, …). Требует установленный naive-ui ^2.38; глобальный плагин не нужен.

Поля файлов в темах PrimeVue и Naive UI используют небольшую самодостаточную нативную dropzone вместо <FileUpload> / <NUpload> — эти компоненты построены вокруг активной загрузки на сервер, а не просто сбора объектов File для последующей отправки формы.

Все компоненты полей также экспортированы по отдельности для каждой темы, с префиксом Sh* / Pv* / Nu* соответственно (например, ShTextField, PvSelectField, NuCheckboxField).

Доступность

Все встроенные компоненты полей включают полный набор атрибутов 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Чекбоксы явно отражают булево состояние

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

Ядро (useForm, валидаторы, парсеры, ConditionEvaluator) не использует browser API. bindMask и FormRenderer используют DOM API — оборачивайте их в onMounted или <ClientOnly>, когда нужно.