npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@asap-devs/forms

v1.6.1

Published

Библиотека для создания мощных, гибких и типобезопасных форм в React-приложениях с акцентом на реактивность, читаемость и расширяемость.

Readme

📦 ASAP Reactive Forms Engine

Библиотека для создания мощных, гибких и типобезопасных форм в React-приложениях с акцентом на реактивность, читаемость и расширяемость.

✨ Возможности

  • Поддержка вложенных форм
  • Реактивная модель данных
  • Типобезопасность (TypeScript-first)
  • Интеграция с UI-библиотекой Mantine
  • Поддержка клиентской и серверной валидации
  • Валидация с использованием zod
  • Простой API

🔧 Установка

npm i @asap-devs/forms

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

import { useState } from "react";
import {
  createForm,
  Configure,
  FormProvider,
  createConnectedComponents,
  required,
} from "@asap-devs/forms";
import { Button, Title } from "@mantine/core";

// Form type
type TNameForm = {
  name: string;
  surname: string;
};

// Form object model
const NameForm = createForm<TNameForm>({
  validators: [
    ({ field }) => {
      required.eager(field("name"));
    },
  ], // client-side validators for current form
});

export function BasicForm() {
  const [formInstance] = useState(
    () =>
      new NameForm({
        name: "",
        surname: "",
      })
  );

  return (
    <FormProvider
      instance={formInstance}
      onSubmit={(v) => {
        alert(JSON.stringify(v, undefined, 2));
      }}
    >
      <NameFormContent />
    </FormProvider>
  );
}

// Create typed connected components
const { InputField } = createConnectedComponents<TNameForm>();

const NameFormContent = () => {
  return (
    <>
      <InputField 
        getter="name"
        label="Name"
        description="Plaese enter yourname"
      />
      <InputField getter="surname" label="Surname" />
      <Button type="submit" mt="sm">
        Submit
      </Button>
    </>
  );
};

Все примеры использования можно посмотреть в src/examples

✅ Валидация

Библиотека поддерживает декларативную валидацию полей на уровне схемы формы. Все валидаторы указываются при инициализации формы через опцию validators.

📦 Предустановленные валидаторы

| Валидатор | Описание | |-------------|------------------------------------------------------------| | required | Проверяет, что значение не undefined, null или '', для массивов - выбрано хотя бы одно значение | | notNull | Проверяет, что значение не null | | truly | Проверяет, что значение строго true | | pattern | Проверка значения по регулярному выражению (RegExp) | | zodField | Проверяет поле на соотвествие zod схеме | | zod | Проверяет всю форму на соотвествие zod схеме |

🧾 Синтаксис использования

const NameForm = createForm<TNameForm>({
  validators: [
    ({ field }) => {
      required.eager(field("name"));
    },
  ],
});

💎 Валидация с использованием zod

const nameFormSchema = z.object({
  name: z
    .string()
    .nonempty("Error! Must be filled")
    .max(100)
    .refine((_) => _.startsWith("J"), "Error! Must starts with J"),
  surname: z.string(),
  info: z.string().nullable().pipe(z.string("Error! Must be selected").nonempty()),
});

// Form type
type TNameForm = z.input<typeof nameFormSchema>;

// Form object model
const NameForm = createForm({
  validators: [
    // some additional validators
  ],
});

🧱 Компоненты

Ниже перечислены доступные компоненты формы и их статус реализации.

| Компонент | Статус | Версия | Описание | |----------------------|---------|----------|-------------------------------------| | InputField | ✅ | v1.0.0 | Базовое текстовое поле | | InputPasswordField | ✅ | v1.0.0 | Поле для ввода пароля | | InputNumberField | ✅ | v1.0.0 | Числовое поле ввода | | CheckboxField | ✅ | v1.0.0 | Одиночный флажок | | CheckboxGroupField | ✅ | v1.0.0 | Группа флажков | | RadioGroupField | ✅ | v1.0.0 | Группа радио-кнопок | | SwitchField | ✅ | v1.0.0 | Компонент-переключатель | | TextareaField | ✅ | v1.1.0 | Многострочное текстовое поле | | SelectField | ✅ | v1.1.0 | Выпадающий список (select) | | InputDateField | ✅ | v1.5.0 | Поле ввода одиночной даты | | DatePickerField | ✅ | v1.5.0 | Выбор даты (множественный, периоды) | | MultiselectField | 🚧 | | Множественный выбор | | DateRangeField | 🚧 | | Выбор диапазона дат | | FileField | 🚧 | | Загрузка одного или нескольких файлов |

📚 Документация

Проект использует Storybook для интерактивной демонстрации компонентов и примеров использования формы.

🔄 Запуск Storybook локально

npm run storybook

После запуска открой http://localhost:6006 в браузере.