@letar/forms

Текстовые поля

Поля ввода текста — String, Textarea, Password, MaskedInput, RichText

String

API: Form.Field.String

Стандартное однострочное текстовое поле. Самый распространённый тип.

const Schema = z.object({
  name: z.string().min(2).max(100).meta({
    ui: { title: 'Полное имя', placeholder: 'Введите имя' },
  }),
})

<Form.Field.String name="name" />

Автоматические ограничения

Zod constraints автоматически применяются к элементу input:

z.string().min(2).max(100)
// → minLength={2} maxLength={100} на <input>

z.string().email()
// → type="email"

z.string().url()
// → type="url"

Textarea

API: Form.Field.Textarea

Многострочное поле для длинного текста.

const Schema = z.object({
  description: z.string().min(10).max(2000).meta({
    ui: { title: 'Описание', placeholder: 'Опишите ваш проект...' },
  }),
})

<Form.Field.Textarea name="description" />

Password

API: Form.Field.Password

Поле пароля с кнопкой переключения видимости.

const Schema = z.object({
  password: z.string().min(8).meta({
    ui: { title: 'Пароль' },
  }),
})

<Form.Field.Password name="password" />

MaskedInput

API: Form.Field.MaskedInput

Поле с маской формата для структурированных данных. Требует peer-зависимость use-mask-input.

Маска задаётся пропом mask самого компонента, а не через ui в Zod meta() — ключа mask в FieldUIMeta нет.

const Schema = z.object({
  phone: z.string().meta({
    ui: { title: 'Телефон' },
  }),
  creditCard: z.string().meta({
    ui: { title: 'Номер карты' },
  }),
})

<Form.Field.MaskedInput name="phone" mask="+7 (999) 999-99-99" />
<Form.Field.MaskedInput name="creditCard" mask="9999 9999 9999 9999" />

RichText

API: Form.Field.RichText

Редактор форматированного текста для HTML/markdown контента.

const Schema = z.object({
  content: z.string().meta({
    ui: { title: 'Содержание статьи' },
  }),
})

<Form.Field.RichText name="content" />

Требуются peer-зависимости: @tiptap/react и @tiptap/starter-kit.

Editable

API: Form.Field.Editable

Инлайн-редактирование — клик по тексту для редактирования, Enter или blur для сохранения.

<Form.Field.Editable name="nickname" />

On this page