Skip to content

Latest commit

 

History

206 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Form Builder

A dynamic form-building tool that allows users to create, customize, and validate forms seamlessly within web applications. Built with React, Next.js, and various other technologies, Form Builder provides an intuitive interface for developers and users alike.



Vercel OSS Program

Table of Contents

Features

  • Dynamic Form Creation: Easily create forms with various input types including text, checkbox, radio buttons, and more.
  • Real-Time Validation: Validate user inputs using the Zod library, ensuring data integrity and user-friendly feedback.
  • Responsive Design: Built with Tailwind CSS, ensuring forms look great on all devices.
  • Customizable Components: Leverage ShadCN components for a consistent and modern UI experience.
  • Two Form Libraries: Generate React Hook Form or TanStack Form code, each starting with the one shadcn add command it needs.
  • shadcn Registry: Every extra component and template installs with the shadcn CLI, in Radix and Base UI projects alike.
  • Server-Side Rendering: Utilize Next.js for optimized performance and SEO.

Live Demo

Check out the live demo of the Form Builder here.

YouTube Demo

Watch the demo

Installation

To get started with Form Builder, follow these steps:

  1. Clone the repository:

    git clone https://github.com/hasanharman/form-builder.git
  2. Navigate into the project directory:

    cd form-builder
  3. Install the necessary dependencies:

    pnpm install

Usage

To start the development server, run:

pnpm dev

pnpm dev and pnpm build first build the registry into public/r. Run the tests with pnpm test.

Open your browser and navigate to http://localhost:3000 to see the application in action.

Creating a Form

  1. Access the Builder: Once the app is running, navigate to the form builder interface.
  2. Add Inputs: Use the toolbar to add different types of inputs.
  3. Customize Inputs: Click on any input field to configure properties such as label, placeholder, required validation, etc.
  4. Save & Preview: Once your form is built, save it and preview the output.

Components

The site's UI is shadcn/ui on Base UI (components.json style base-vega). The extra form components (phone input, multi select, credit card, signature pad, …) are documented at /components.

shadcn Registry

Everything under /components and /templates is published as a shadcn registry. Install an item with the shadcn CLI:

npx shadcn@latest add https://www.shadcn-form.com/r/phone-input.json

Items only use props every shadcn style shares, so they install into Radix (radix-*, new-york) and Base UI (base-*) projects alike. The generated form code in the playground starts with the command that installs everything it imports.

  • registry.json is the source of truth: titles, descriptions, files, dependencies.
  • pnpm registry:build runs shadcn build into public/r; pnpm registry:validate checks the source.
  • __tests__/registry-catalog.spec.ts checks each item's declared dependencies against its imports.

Project Structure

Domain terms are defined in CONTEXT.md.

  • components/field-variants/: one module per playground field type (preview control, validation, default value, generated code). Add a field type by adding a module and listing it in index.ts.
  • lib/form-code/: the form code generator, with one adapter per form library.
  • lib/registry-catalog.ts: reads registry.json for docs pages, sidebars and install commands.
  • components/ui/: shadcn wrappers; the only place allowed to import @base-ui/react.

Validation

Form Builder utilizes Zod for input validation. You can define schemas for your forms as follows:

import { z } from 'zod';

const formSchema = z.object({
  name: z.string().min(1, "Name is required"),
  email: z.string().email("Invalid email address"),
  age: z.number().min(18, "You must be at least 18 years old"),
});

This schema can be applied to your form to enforce validation rules.

API

Form Submission

Once your form is ready, you can handle submissions with a simple API call. Here’s an example of how to submit the form data:

const handleSubmit = async (data) => {
  try {
    const response = await fetch('/api/form-submit', {
      method: 'POST',
      body: JSON.stringify(data),
      headers: {
        'Content-Type': 'application/json',
      },
    });
    const result = await response.json();
    console.log('Form submitted successfully:', result);
  } catch (error) {
    console.error('Error submitting form:', error);
  }
};

Contributing

Contributions are welcome! If you would like to contribute to Form Builder, please follow these steps:

  1. Fork the Repository: Click on the “Fork” button at the top right corner of the repository page.
  2. Create a Branch:
    git checkout -b feature/YourFeatureName
  3. Make Changes: Implement your feature or fix.
  4. Commit Changes:
    git commit -m "Add a feature"
  5. Push Changes:
    git push origin feature/YourFeatureName
  6. Create a Pull Request: Go to the original repository and create a pull request.

License

This project is licensed under the MIT License.

Sponsors

A huge thank you to everyone who has supported this project! Your generosity keeps this project alive and growing. I truly appreciate every single one of you.

⭐ Header Sponsors ($100/month)

Premium sponsors featured prominently throughout the project:

Project Supporters ($50/month)

These wonderful folks help drive the project forward:

Community Supporters ($10/month)

Thank you for being part of this journey:

Past Sponsors

A heartfelt thanks to those who previously supported the project:

tino-technology feliperails Radu Ciocan rutsatz Maxim Ciebiera
tino-technology feliperails Radu Ciocan rutsatz Maxim Ciebiera
shadcnstudio.com
shadcnstudio.com

Interested in Sponsoring?

Your support helps keep this project alive and thriving! Become a sponsor on GitHub and help shape the future of form building.

Acknowledgements

  • React - A JavaScript library for building user interfaces.
  • Next.js - The React framework for production.
  • Tailwind CSS - A utility-first CSS framework for creating custom designs.
  • Zod - TypeScript-first schema declaration and validation.

About

A dynamic form-building tool that allows users to create, customize, and validate forms seamlessly within web applications.

Topics

Resources

Stars

2.7k stars

Watchers

17 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages