isostate Project page

Editor React

Use IsostateEditor as a controlled React component inside an existing React tree.

import '@sebastianwessel/isostate-editor/style.css';
import { IsostateEditor } from '@sebastianwessel/isostate-editor/react';
import { useCallback, useState } from 'react';

const DEFAULT_YAML = `header:
  version: "1"
  assets: []
  layers:
    - name: default
scenes:
  - id: scene-1
`;

export function SceneEditor() {
  const [yaml, setYaml] = useState(DEFAULT_YAML);
  const [diagnostics, setDiagnostics] = useState<EditorDiagnostic[]>([]);

  const handleChange = useCallback((event: EditorChangeEvent) => {
    setYaml(event.sourceYaml);
    setDiagnostics(event.diagnostics);
  }, []);

  return (
    <div>
      <IsostateEditor
        value={yaml}
        onChange={handleChange}
        mode="split"
        theme="system"
      />
      <p>Diagnostics: {diagnostics.length}</p>
    </div>
  );
}

Import @sebastianwessel/isostate-editor/style.css once at the application level. The component does not require Tailwind CSS or a shadcn setup.

In Astro, mount with client:only="react" because the editor accesses DOM APIs on mount:

---
import { SceneEditor } from '../components/SceneEditor.tsx';
---

<SceneEditor client:only="react" />