graph-grammar-react
v1.1.0
Published
Embeddable React editor for the graph-grammar engine: a complete visual graph-rewriting workbench (rule editor + live D3 canvas) and the building blocks to compose your own.
Maintainers
Readme
graph-grammar-react
The embeddable React editor for the graph-grammar
engine , a complete visual graph-rewriting workbench (rule editor + live D3
canvas) you can drop into your own app, plus the building blocks to compose your
own UI.
npm install graph-grammar-react react react-dom graph-grammarESM-only.
react/react-domare peer dependencies (v18 or v19). Thegraph-grammarengine is a dependency and is re-exported, so you can import the engine API straight from this package.
Embed the whole workbench
import { AppState, Workbench } from "graph-grammar-react";
import "graph-grammar-react/styles.css";
const app = new AppState(); // the controller; drives the engine + grammar
export function Editor() {
return <Workbench app={app} />;
}<Workbench> renders the full three-pane editor (run controls · rule list ·
tabbed graph canvas / rule editor). Pass header={false} to drop the built-in
title bar when embedding under your own chrome, or header={<MyBar/>} to replace
it.
Drive it from the outside via the app controller , e.g. load a grammar:
import { importGrammar } from "graph-grammar-react"; // re-exported from the engine
app.loadGrammar(importGrammar(json));Compose your own layout
For finer control, mount the building blocks under an AppProvider (and
ContextMenuProvider if you use the right-click menus):
import {
AppState, AppProvider, ContextMenuProvider,
GraphCanvas, RuleEditor, RuleList, ControlPanel,
} from "graph-grammar-react";
import "graph-grammar-react/styles.css";
const app = new AppState();
<AppProvider app={app}>
<ContextMenuProvider>
<ControlPanel />
<RuleList />
<GraphCanvas active />
{/* or <RuleEditor /> */}
</ContextMenuProvider>
</AppProvider>Other exports: the useApp() / useAppEvent(...events) hooks, the individual
control panels (RunControls, StrategyConfig, Stats, ExampleGallery,
DataPanel), and Header.
Styling
Import the stylesheet once: import "graph-grammar-react/styles.css". It styles
the editor chrome; the graph itself is drawn on a <canvas>.
It won't touch your page. Every rule is scoped to the editor's own root
element (.gg-root, injected by AppProvider) , there are no global html,
body, *, or bare button/input rules, so the stylesheet can't restyle your
app. The scope element is display: contents, so it adds no box and can't affect
your layout.
Because the package never styles html/body, the full <Workbench> fills its
parent , give that parent a height:
<div style={{ height: "100vh" }}>
<Workbench app={app} />
</div>License
MIT
