FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

IlhamHattaManggala/schema-form-react: Production-ready, JSON Schema-driven dynamic form generator component for React, Inertia.js, and Next.js applications. · GitHub

@manggala31/schema-form-react

Production-ready, JSON Schema-driven dynamic form generator component for React, Laravel Inertia.js, and Next.js applications.


Table of Contents


Overview

@manggala31/schema-form-react is a declarative form generator component. It accepts JSON schema definitions and automatically renders typed input controls (text, number, select, toggle, textarea, radio, and checkboxes) with client-side validation, error message propagation, and customizable layout grids. It pairs directly with server-driven config engines (such as manggala/laravel-settings).


Key Features

  • Declarative JSON Schema Rendering: Pass JSON field specifications to instantly render complete HTML forms.
  • Built-in Validation: Supports required fields, regex pattern matching, min/max limits, and custom validator functions.
  • Rich Input Controls: Renders text, number, email, password, textarea, select dropdowns, radio groups, checkboxes, and toggle switches.
  • Controlled State Management: Emits value change maps and submit payloads with clean type safety.
  • Zero Heavy Dependencies: Lightweight footprint, optimized for React 18, React 19, Next.js, and Inertia.js.

Installation

# Using npm
npm install @manggala31/schema-form-react

# Using yarn
yarn add @manggala31/schema-form-react

# Using pnpm
pnpm add @manggala31/schema-form-react

# Using bun
bun add @manggala31/schema-form-react

Quick Start

import React from 'react';
import { SchemaForm, FormFieldSchema } from '@manggala31/schema-form-react';
import '@manggala31/schema-form-react/styles.css';

const formSchema: FormFieldSchema[] = [
  {
    name: 'siteName',
    label: 'Application Title',
    type: 'text',
    placeholder: 'Enter application name',
    required: true,
  },
  {
    name: 'environment',
    label: 'Environment',
    type: 'select',
    options: [
      { label: 'Production', value: 'production' },
      { label: 'Staging', value: 'staging' },
      { label: 'Development', value: 'development' },
    ],
    required: true,
  },
  {
    name: 'maintenanceMode',
    label: 'Enable Maintenance Mode',
    type: 'toggle',
    description: 'Temporarily disable public access',
  },
  {
    name: 'maxConnections',
    label: 'Max DB Connections',
    type: 'number',
    min: 5,
    max: 500,
  },
];

export default function SettingsPage() {
  const handleSubmit = (values: Record<string, any>) => {
    console.log('Submitted form values:', values);
  };

  return (
    <div className="container">
      <h1>System Settings</h1>
      <SchemaForm
        schema={formSchema}
        initialValues={{ siteName: 'My App', environment: 'production' }}
        onSubmit={handleSubmit}
        submitText="Save Settings"
      />
    </div>
  );
}

API Reference

<SchemaForm> Props

Prop Type Default Description
schema FormFieldSchema[] Required Array of JSON field schemas.
initialValues Record<string, any> {} Initial form values mapping.
onSubmit (values: Record<string, any>) => void Required Callback invoked on valid form submission.
submitText string 'Submit' Text label for the submit button.
className string '' Custom form container CSS class.

License

MIT License © Ilham Hatta Manggala

About

Production-ready, JSON Schema-driven dynamic form generator component for React, Inertia.js, and Next.js applications.

Topics

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages


Back | FazBrowse Home | New Git URL