1.1.4 • Published 4 months ago

json-schema-canvas v1.1.4

Weekly downloads
-
License
ISC
Repository
-
Last release
4 months ago

JSON Schema Canvas

A React component for visually building and editing JSON Schema definitions with a modern UI.

Features

  • 🎨 Modern, intuitive UI built with Radix UI
  • 🔄 Drag-and-drop property reordering
  • 📝 Live schema preview
  • ✨ Strict/Non-strict mode support
  • 🎯 Enum value management
  • 📋 One-click schema copying

Installation

npm install json-schema-canvas
# or
yarn add json-schema-canvas

Setup

Import the component and use it in your React application:

import { SchemaBuilder } from 'json-schema-canvas';

Tailwind CSS Setup

This component uses Tailwind CSS for styling. To ensure all styles are properly applied when using the component in your project, you need to configure your Tailwind setup:

  1. Make sure you have Tailwind CSS installed in your project:
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
  1. Update your tailwind.config.js to include the component's styles:
import { tailwindContent } from 'json-schema-canvas';

/** @type {import('tailwindcss').Config} */
export default {
  content: [
    "./src/**/*.{js,ts,jsx,tsx}",
    ...tailwindContent() // Add this line to include the component's styles
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

This ensures that all the Tailwind classes used by the component are included in your final CSS bundle.

Usage

Basic usage with default settings:

import { SchemaBuilder } from 'json-schema-canvas'

function App() {
  return (
    <SchemaBuilder />
  )
}

Advanced usage with custom configuration:

const schemaState = useSchemaState(
    {
      properties: [
        {
          name: "name",
          type: "string",
          required: true,
          hasEnum: false
        }
      ],
      additionalProperties: false
    },
    true
  )
  
return (
  <SchemaBuilder 
    initialSchema={schemaState.schema}
    initialStrictMode={schemaState.isStrictMode}
    onSchemaChange={(schema) => console.log('Schema updated:', schema)}
  />
)

Props

SchemaBuilder Props

PropTypeDefaultDescription
initialSchemaobject{}Initial JSON Schema object to edit
initialStrictModebooleantrueInitial strict mode state
classNamestring"flex min-h-screen bg-background p-6 gap-6 animate-fade-in"Container class name
cardClassNamestring"flex-1 p-6 backdrop-blur-sm bg-opacity-50 min-w-600px"Card class name
maxHeightstringundefinedMaximum height of the schema editor
showOutputbooleantrueWhether to show the schema output panel
onSchemaChange(schema: object) => voidundefinedCallback when schema changes
onStrictModeChange(isStrict: boolean) => voidundefinedCallback when strict mode changes

useSchemaState Options

OptionTypeDefaultDescription
initialSchemaobject{ properties: [], additionalProperties: false }Initial schema state
initialStrictModebooleantrueInitial strict mode state

Development

npm install
npm run dev

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.