system-canvas-standalone 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/system-canvas.esm.d.ts +60 -0
- package/dist/system-canvas.esm.js +164 -0
- package/dist/system-canvas.esm.js.map +1 -0
- package/dist/system-canvas.js +19311 -0
- package/dist/system-canvas.js.map +1 -0
- package/dist/system-canvas.min.js +12 -0
- package/dist/system-canvas.min.js.map +1 -0
- package/package.json +27 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { SystemCanvasProps } from 'system-canvas-react';
|
|
2
|
+
import { CanvasData, CanvasTheme, themes } from 'system-canvas';
|
|
3
|
+
export { CanvasData, CanvasEdge, CanvasNode, CanvasTheme, EdgeUpdate, NodeUpdate, themes } from 'system-canvas';
|
|
4
|
+
|
|
5
|
+
type ThemeOption = CanvasTheme | Partial<CanvasTheme> | keyof typeof themes;
|
|
6
|
+
interface StandaloneOptions extends Omit<SystemCanvasProps, 'canvas' | 'canvases' | 'theme'> {
|
|
7
|
+
/** Root canvas data. Required. */
|
|
8
|
+
canvas: CanvasData;
|
|
9
|
+
/**
|
|
10
|
+
* Map of ref -> CanvasData for sub-canvases. Optional. When editable mode
|
|
11
|
+
* is enabled, the standalone wrapper will automatically keep this map
|
|
12
|
+
* up to date as edits are made on sub-canvases.
|
|
13
|
+
*/
|
|
14
|
+
canvases?: Record<string, CanvasData>;
|
|
15
|
+
/**
|
|
16
|
+
* Theme as an object, a partial override, or a string theme name
|
|
17
|
+
* (one of: 'dark', 'midnight', 'light', 'blueprint', 'warm').
|
|
18
|
+
*/
|
|
19
|
+
theme?: ThemeOption;
|
|
20
|
+
/**
|
|
21
|
+
* Called whenever the internal canvas state changes (any edit in editable
|
|
22
|
+
* mode). Receives the new root canvas and the sub-canvas map.
|
|
23
|
+
*/
|
|
24
|
+
onChange?: (canvas: CanvasData, canvases: Record<string, CanvasData>) => void;
|
|
25
|
+
}
|
|
26
|
+
interface StandaloneInstance {
|
|
27
|
+
/** Get the current root canvas. */
|
|
28
|
+
getCanvas: () => CanvasData;
|
|
29
|
+
/** Get the current sub-canvas map. */
|
|
30
|
+
getCanvases: () => Record<string, CanvasData>;
|
|
31
|
+
/** Replace the root canvas and re-render. */
|
|
32
|
+
setCanvas: (canvas: CanvasData) => void;
|
|
33
|
+
/** Replace the sub-canvas map and re-render. */
|
|
34
|
+
setCanvasesMap: (canvases: Record<string, CanvasData>) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Update any subset of the options (theme, editable, callbacks, etc.)
|
|
37
|
+
* and re-render. `canvas` and `canvases` are also accepted; if provided,
|
|
38
|
+
* they replace the internal state.
|
|
39
|
+
*/
|
|
40
|
+
update: (partial: Partial<StandaloneOptions>) => void;
|
|
41
|
+
/** Subscribe to change events. Returns an unsubscribe function. */
|
|
42
|
+
on: (event: 'change', listener: (canvas: CanvasData, canvases: Record<string, CanvasData>) => void) => () => void;
|
|
43
|
+
/** Unmount React and release all resources. */
|
|
44
|
+
destroy: () => void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Mount a system-canvas into an HTML element.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* const instance = SystemCanvas.render(document.getElementById('app'), {
|
|
51
|
+
* canvas: { nodes: [...], edges: [...] },
|
|
52
|
+
* theme: 'midnight',
|
|
53
|
+
* editable: true,
|
|
54
|
+
* onChange: (canvas) => console.log('updated', canvas),
|
|
55
|
+
* })
|
|
56
|
+
* instance.destroy() // when done
|
|
57
|
+
*/
|
|
58
|
+
declare function render(element: HTMLElement, options: StandaloneOptions): StandaloneInstance;
|
|
59
|
+
|
|
60
|
+
export { type StandaloneInstance, type StandaloneOptions, render };
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// src/index.tsx
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { createRoot } from "react-dom/client";
|
|
4
|
+
import {
|
|
5
|
+
SystemCanvas as SystemCanvasReact
|
|
6
|
+
} from "system-canvas-react";
|
|
7
|
+
import {
|
|
8
|
+
addNode,
|
|
9
|
+
updateNode,
|
|
10
|
+
removeNode,
|
|
11
|
+
addEdge,
|
|
12
|
+
updateEdge,
|
|
13
|
+
removeEdge,
|
|
14
|
+
themes
|
|
15
|
+
} from "system-canvas";
|
|
16
|
+
function resolveThemeOption(theme) {
|
|
17
|
+
if (typeof theme === "string") {
|
|
18
|
+
return themes[theme] ?? void 0;
|
|
19
|
+
}
|
|
20
|
+
return theme;
|
|
21
|
+
}
|
|
22
|
+
function render(element, options) {
|
|
23
|
+
if (!element) {
|
|
24
|
+
throw new Error("[system-canvas] render(): target element is required");
|
|
25
|
+
}
|
|
26
|
+
let currentCanvas = options.canvas;
|
|
27
|
+
let currentCanvases = { ...options.canvases ?? {} };
|
|
28
|
+
let currentOptions = options;
|
|
29
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
30
|
+
const root = createRoot(element);
|
|
31
|
+
const emitChange = () => {
|
|
32
|
+
currentOptions.onChange?.(currentCanvas, currentCanvases);
|
|
33
|
+
listeners.forEach((l) => {
|
|
34
|
+
try {
|
|
35
|
+
l(currentCanvas, currentCanvases);
|
|
36
|
+
} catch (err) {
|
|
37
|
+
console.error("[system-canvas] change listener threw:", err);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
const getTarget = (canvasRef) => {
|
|
42
|
+
if (!canvasRef) return currentCanvas;
|
|
43
|
+
return currentCanvases[canvasRef] ?? { nodes: [], edges: [] };
|
|
44
|
+
};
|
|
45
|
+
const setTarget = (canvasRef, next) => {
|
|
46
|
+
if (!canvasRef) {
|
|
47
|
+
currentCanvas = next;
|
|
48
|
+
} else {
|
|
49
|
+
currentCanvases = { ...currentCanvases, [canvasRef]: next };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const handleNodeAdd = (node, canvasRef) => {
|
|
53
|
+
const target = getTarget(canvasRef);
|
|
54
|
+
setTarget(canvasRef, addNode(target, node));
|
|
55
|
+
currentOptions.onNodeAdd?.(node, canvasRef);
|
|
56
|
+
doRender();
|
|
57
|
+
emitChange();
|
|
58
|
+
};
|
|
59
|
+
const handleNodeUpdate = (nodeId, patch, canvasRef) => {
|
|
60
|
+
const target = getTarget(canvasRef);
|
|
61
|
+
setTarget(canvasRef, updateNode(target, nodeId, patch));
|
|
62
|
+
currentOptions.onNodeUpdate?.(nodeId, patch, canvasRef);
|
|
63
|
+
doRender();
|
|
64
|
+
emitChange();
|
|
65
|
+
};
|
|
66
|
+
const handleNodeDelete = (nodeId, canvasRef) => {
|
|
67
|
+
const target = getTarget(canvasRef);
|
|
68
|
+
setTarget(canvasRef, removeNode(target, nodeId));
|
|
69
|
+
currentOptions.onNodeDelete?.(nodeId, canvasRef);
|
|
70
|
+
doRender();
|
|
71
|
+
emitChange();
|
|
72
|
+
};
|
|
73
|
+
const handleEdgeAdd = (edge, canvasRef) => {
|
|
74
|
+
const target = getTarget(canvasRef);
|
|
75
|
+
setTarget(canvasRef, addEdge(target, edge));
|
|
76
|
+
currentOptions.onEdgeAdd?.(edge, canvasRef);
|
|
77
|
+
doRender();
|
|
78
|
+
emitChange();
|
|
79
|
+
};
|
|
80
|
+
const handleEdgeUpdate = (edgeId, patch, canvasRef) => {
|
|
81
|
+
const target = getTarget(canvasRef);
|
|
82
|
+
setTarget(canvasRef, updateEdge(target, edgeId, patch));
|
|
83
|
+
currentOptions.onEdgeUpdate?.(edgeId, patch, canvasRef);
|
|
84
|
+
doRender();
|
|
85
|
+
emitChange();
|
|
86
|
+
};
|
|
87
|
+
const handleEdgeDelete = (edgeId, canvasRef) => {
|
|
88
|
+
const target = getTarget(canvasRef);
|
|
89
|
+
setTarget(canvasRef, removeEdge(target, edgeId));
|
|
90
|
+
currentOptions.onEdgeDelete?.(edgeId, canvasRef);
|
|
91
|
+
doRender();
|
|
92
|
+
emitChange();
|
|
93
|
+
};
|
|
94
|
+
const doRender = () => {
|
|
95
|
+
const {
|
|
96
|
+
canvas: _canvas,
|
|
97
|
+
canvases: _canvases,
|
|
98
|
+
theme,
|
|
99
|
+
onChange: _onChange,
|
|
100
|
+
onNodeAdd: _onNodeAdd,
|
|
101
|
+
onNodeUpdate: _onNodeUpdate,
|
|
102
|
+
onNodeDelete: _onNodeDelete,
|
|
103
|
+
onEdgeAdd: _onEdgeAdd,
|
|
104
|
+
onEdgeUpdate: _onEdgeUpdate,
|
|
105
|
+
onEdgeDelete: _onEdgeDelete,
|
|
106
|
+
...passthrough
|
|
107
|
+
} = currentOptions;
|
|
108
|
+
const resolvedTheme = resolveThemeOption(theme);
|
|
109
|
+
const props = {
|
|
110
|
+
...passthrough,
|
|
111
|
+
canvas: currentCanvas,
|
|
112
|
+
canvases: currentCanvases,
|
|
113
|
+
theme: resolvedTheme,
|
|
114
|
+
// Always provide our managed handlers so state stays in sync. Consumer
|
|
115
|
+
// callbacks are invoked inside them for observation.
|
|
116
|
+
onNodeAdd: handleNodeAdd,
|
|
117
|
+
onNodeUpdate: handleNodeUpdate,
|
|
118
|
+
onNodeDelete: handleNodeDelete,
|
|
119
|
+
onEdgeAdd: handleEdgeAdd,
|
|
120
|
+
onEdgeUpdate: handleEdgeUpdate,
|
|
121
|
+
onEdgeDelete: handleEdgeDelete
|
|
122
|
+
};
|
|
123
|
+
root.render(React.createElement(SystemCanvasReact, props));
|
|
124
|
+
};
|
|
125
|
+
doRender();
|
|
126
|
+
return {
|
|
127
|
+
getCanvas: () => currentCanvas,
|
|
128
|
+
getCanvases: () => currentCanvases,
|
|
129
|
+
setCanvas: (next) => {
|
|
130
|
+
currentCanvas = next;
|
|
131
|
+
doRender();
|
|
132
|
+
emitChange();
|
|
133
|
+
},
|
|
134
|
+
setCanvasesMap: (next) => {
|
|
135
|
+
currentCanvases = { ...next };
|
|
136
|
+
doRender();
|
|
137
|
+
emitChange();
|
|
138
|
+
},
|
|
139
|
+
update: (partial) => {
|
|
140
|
+
if (partial.canvas) currentCanvas = partial.canvas;
|
|
141
|
+
if (partial.canvases) currentCanvases = { ...partial.canvases };
|
|
142
|
+
currentOptions = { ...currentOptions, ...partial };
|
|
143
|
+
doRender();
|
|
144
|
+
},
|
|
145
|
+
on: (event, listener) => {
|
|
146
|
+
if (event !== "change") {
|
|
147
|
+
throw new Error(`[system-canvas] unknown event: ${event}`);
|
|
148
|
+
}
|
|
149
|
+
listeners.add(listener);
|
|
150
|
+
return () => {
|
|
151
|
+
listeners.delete(listener);
|
|
152
|
+
};
|
|
153
|
+
},
|
|
154
|
+
destroy: () => {
|
|
155
|
+
listeners.clear();
|
|
156
|
+
root.unmount();
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export {
|
|
161
|
+
render,
|
|
162
|
+
themes
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=system-canvas.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import React from 'react'\nimport { createRoot, type Root } from 'react-dom/client'\nimport {\n SystemCanvas as SystemCanvasReact,\n type SystemCanvasProps,\n} from 'system-canvas-react'\nimport {\n addNode,\n updateNode,\n removeNode,\n addEdge,\n updateEdge,\n removeEdge,\n themes,\n type CanvasData,\n type CanvasNode,\n type CanvasEdge,\n type CanvasTheme,\n type NodeUpdate,\n type EdgeUpdate,\n} from 'system-canvas'\n\n// -----------------------------------------------------------------------------\n// Public types\n// -----------------------------------------------------------------------------\n\ntype ThemeOption = CanvasTheme | Partial<CanvasTheme> | keyof typeof themes\n\nexport interface StandaloneOptions\n extends Omit<SystemCanvasProps, 'canvas' | 'canvases' | 'theme'> {\n /** Root canvas data. Required. */\n canvas: CanvasData\n\n /**\n * Map of ref -> CanvasData for sub-canvases. Optional. When editable mode\n * is enabled, the standalone wrapper will automatically keep this map\n * up to date as edits are made on sub-canvases.\n */\n canvases?: Record<string, CanvasData>\n\n /**\n * Theme as an object, a partial override, or a string theme name\n * (one of: 'dark', 'midnight', 'light', 'blueprint', 'warm').\n */\n theme?: ThemeOption\n\n /**\n * Called whenever the internal canvas state changes (any edit in editable\n * mode). Receives the new root canvas and the sub-canvas map.\n */\n onChange?: (canvas: CanvasData, canvases: Record<string, CanvasData>) => void\n}\n\nexport interface StandaloneInstance {\n /** Get the current root canvas. */\n getCanvas: () => CanvasData\n /** Get the current sub-canvas map. */\n getCanvases: () => Record<string, CanvasData>\n /** Replace the root canvas and re-render. */\n setCanvas: (canvas: CanvasData) => void\n /** Replace the sub-canvas map and re-render. */\n setCanvasesMap: (canvases: Record<string, CanvasData>) => void\n /**\n * Update any subset of the options (theme, editable, callbacks, etc.)\n * and re-render. `canvas` and `canvases` are also accepted; if provided,\n * they replace the internal state.\n */\n update: (partial: Partial<StandaloneOptions>) => void\n /** Subscribe to change events. Returns an unsubscribe function. */\n on: (\n event: 'change',\n listener: (canvas: CanvasData, canvases: Record<string, CanvasData>) => void\n ) => () => void\n /** Unmount React and release all resources. */\n destroy: () => void\n}\n\n// -----------------------------------------------------------------------------\n// Implementation\n// -----------------------------------------------------------------------------\n\nfunction resolveThemeOption(\n theme: ThemeOption | undefined\n): CanvasTheme | Partial<CanvasTheme> | undefined {\n if (typeof theme === 'string') {\n return themes[theme] ?? undefined\n }\n return theme\n}\n\n/**\n * Mount a system-canvas into an HTML element.\n *\n * @example\n * const instance = SystemCanvas.render(document.getElementById('app'), {\n * canvas: { nodes: [...], edges: [...] },\n * theme: 'midnight',\n * editable: true,\n * onChange: (canvas) => console.log('updated', canvas),\n * })\n * instance.destroy() // when done\n */\nexport function render(\n element: HTMLElement,\n options: StandaloneOptions\n): StandaloneInstance {\n if (!element) {\n throw new Error('[system-canvas] render(): target element is required')\n }\n\n // Internal mutable state\n let currentCanvas: CanvasData = options.canvas\n let currentCanvases: Record<string, CanvasData> = { ...(options.canvases ?? {}) }\n let currentOptions: StandaloneOptions = options\n const listeners = new Set<\n (canvas: CanvasData, canvases: Record<string, CanvasData>) => void\n >()\n\n const root: Root = createRoot(element)\n\n const emitChange = () => {\n currentOptions.onChange?.(currentCanvas, currentCanvases)\n listeners.forEach((l) => {\n try {\n l(currentCanvas, currentCanvases)\n } catch (err) {\n console.error('[system-canvas] change listener threw:', err)\n }\n })\n }\n\n // Resolve the target CanvasData for a given canvasRef (undefined = root).\n const getTarget = (canvasRef: string | undefined): CanvasData => {\n if (!canvasRef) return currentCanvas\n return currentCanvases[canvasRef] ?? { nodes: [], edges: [] }\n }\n\n const setTarget = (canvasRef: string | undefined, next: CanvasData) => {\n if (!canvasRef) {\n currentCanvas = next\n } else {\n currentCanvases = { ...currentCanvases, [canvasRef]: next }\n }\n }\n\n // Mutation handlers that delegate to core helpers\n const handleNodeAdd = (node: CanvasNode, canvasRef: string | undefined) => {\n const target = getTarget(canvasRef)\n setTarget(canvasRef, addNode(target, node))\n currentOptions.onNodeAdd?.(node, canvasRef)\n doRender()\n emitChange()\n }\n\n const handleNodeUpdate = (\n nodeId: string,\n patch: NodeUpdate,\n canvasRef: string | undefined\n ) => {\n const target = getTarget(canvasRef)\n setTarget(canvasRef, updateNode(target, nodeId, patch))\n currentOptions.onNodeUpdate?.(nodeId, patch, canvasRef)\n doRender()\n emitChange()\n }\n\n const handleNodeDelete = (nodeId: string, canvasRef: string | undefined) => {\n const target = getTarget(canvasRef)\n setTarget(canvasRef, removeNode(target, nodeId))\n currentOptions.onNodeDelete?.(nodeId, canvasRef)\n doRender()\n emitChange()\n }\n\n const handleEdgeAdd = (edge: CanvasEdge, canvasRef: string | undefined) => {\n const target = getTarget(canvasRef)\n setTarget(canvasRef, addEdge(target, edge))\n currentOptions.onEdgeAdd?.(edge, canvasRef)\n doRender()\n emitChange()\n }\n\n const handleEdgeUpdate = (\n edgeId: string,\n patch: EdgeUpdate,\n canvasRef: string | undefined\n ) => {\n const target = getTarget(canvasRef)\n setTarget(canvasRef, updateEdge(target, edgeId, patch))\n currentOptions.onEdgeUpdate?.(edgeId, patch, canvasRef)\n doRender()\n emitChange()\n }\n\n const handleEdgeDelete = (edgeId: string, canvasRef: string | undefined) => {\n const target = getTarget(canvasRef)\n setTarget(canvasRef, removeEdge(target, edgeId))\n currentOptions.onEdgeDelete?.(edgeId, canvasRef)\n doRender()\n emitChange()\n }\n\n const doRender = () => {\n // Strip out our wrapper-specific fields and the raw canvas/canvases/theme\n // so the remaining props pass straight through to SystemCanvas.\n const {\n canvas: _canvas,\n canvases: _canvases,\n theme,\n onChange: _onChange,\n onNodeAdd: _onNodeAdd,\n onNodeUpdate: _onNodeUpdate,\n onNodeDelete: _onNodeDelete,\n onEdgeAdd: _onEdgeAdd,\n onEdgeUpdate: _onEdgeUpdate,\n onEdgeDelete: _onEdgeDelete,\n ...passthrough\n } = currentOptions\n\n const resolvedTheme = resolveThemeOption(theme)\n\n const props: SystemCanvasProps = {\n ...passthrough,\n canvas: currentCanvas,\n canvases: currentCanvases,\n theme: resolvedTheme,\n // Always provide our managed handlers so state stays in sync. Consumer\n // callbacks are invoked inside them for observation.\n onNodeAdd: handleNodeAdd,\n onNodeUpdate: handleNodeUpdate,\n onNodeDelete: handleNodeDelete,\n onEdgeAdd: handleEdgeAdd,\n onEdgeUpdate: handleEdgeUpdate,\n onEdgeDelete: handleEdgeDelete,\n }\n\n root.render(React.createElement(SystemCanvasReact, props))\n }\n\n doRender()\n\n return {\n getCanvas: () => currentCanvas,\n getCanvases: () => currentCanvases,\n setCanvas: (next) => {\n currentCanvas = next\n doRender()\n emitChange()\n },\n setCanvasesMap: (next) => {\n currentCanvases = { ...next }\n doRender()\n emitChange()\n },\n update: (partial) => {\n if (partial.canvas) currentCanvas = partial.canvas\n if (partial.canvases) currentCanvases = { ...partial.canvases }\n currentOptions = { ...currentOptions, ...partial }\n doRender()\n },\n on: (event, listener) => {\n if (event !== 'change') {\n throw new Error(`[system-canvas] unknown event: ${event}`)\n }\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n destroy: () => {\n listeners.clear()\n root.unmount()\n },\n }\n}\n\n// Re-export themes so users can do SystemCanvas.themes.midnight\nexport { themes }\n\n// Re-export types for the ESM bundle\nexport type {\n CanvasData,\n CanvasNode,\n CanvasEdge,\n CanvasTheme,\n NodeUpdate,\n EdgeUpdate,\n} from 'system-canvas'\n"],"mappings":"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","names":[]}
|