New headless components: - CanvasRoot — provides canvas context, initializes surface + render loop - CanvasSurface — bare <canvas> element, receives ref from CanvasRoot SkiaRenderer.renderFromEditorState() — single method replaces 30-line state sync in use-canvas.ts. Takes EditorState + graph + textEditor directly, sets all renderer properties and calls render(). Example app updated to use CanvasRoot/CanvasSurface, ToolbarRoot/ ToolbarItem, PageListRoot instead of old monolithic components. |
||
|---|---|---|
| .. | ||
| assets | ||
| src | ||
| package.json | ||
| tsconfig.json | ||