@letar/forms

Быстрый старт

Создайте первую форму за 5 минут

1. Определите схему

Используйте Zod для валидации и UI метаданных:

import { z } from 'zod/v4'

const ContactSchema = z.object({
  name: z
    .string()
    .min(2)
    .max(100)
    .meta({
      ui: { title: 'Имя', placeholder: 'Иван Иванов' },
    }),
  email: z
    .string()
    .email()
    .meta({
      ui: { title: 'Email', placeholder: 'ivan@example.com' },
    }),
  message: z
    .string()
    .min(10)
    .max(1000)
    .meta({
      ui: { title: 'Сообщение', placeholder: 'Расскажите о вашем проекте...' },
    }),
})

2. Создайте форму

import { Form } from '@letar/forms'

function ContactForm() {
  return (
    <Form
      schema={ContactSchema}
      initialValue={{ name: '', email: '', message: '' }}
      onSubmit={async ({ value }) => {
        const response = await fetch('/api/contact', {
          method: 'POST',
          body: JSON.stringify(value),
        })
        if (response.ok) {
          alert('Сообщение отправлено!')
        }
      }}
    >
      <Form.Field.String name="name" />
      <Form.Field.String name="email" />
      <Form.Field.Textarea name="message" />
      <Form.Button.Submit loadingText="Отправка...">Отправить</Form.Button.Submit>
    </Form>
  )
}

3. Готово!

Форма автоматически:

  • Валидирует поля по Zod-схеме
  • Показывает ошибки валидации
  • Извлекает лейблы и плейсхолдеры из .meta({ ui: ... })
  • Применяет ограничения maxLength, min, max из правил Zod
  • Управляет состоянием отправки (загрузка, блокировка)

Что дальше?

On this page