@xenolithengine/graph-react 0.7.0-beta.3 → 0.7.0-beta.6

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/README.md CHANGED
@@ -49,8 +49,8 @@ export function Editor() {
49
49
 
50
50
  ## Docs
51
51
 
52
- - [React guide](https://xenolithengine.github.io/xenolith-graph/guides/react/)
53
- - [API reference](https://xenolithengine.github.io/xenolith-graph/guides/api/) — every method exposed by `XenolithEditor`
52
+ - [React guide](https://graph.xenolith.studio/guides/react/)
53
+ - [API reference](https://graph.xenolith.studio/guides/api/) — every method exposed by `XenolithEditor`
54
54
  - [GitHub](https://github.com/XenolithEngine/xenolith-graph)
55
55
 
56
56
  MIT © XenolithEngine
@@ -18,6 +18,7 @@ export declare const EVENT_PROP: {
18
18
  readonly 'widget:action': "onWidgetAction";
19
19
  readonly 'graph:loaded': "onGraphLoad";
20
20
  readonly 'history:changed': "onHistoryChange";
21
+ readonly 'graph:changed': "onGraphChanged";
21
22
  readonly 'dive:changed': "onDiveChange";
22
23
  readonly 'sidebar:opened': "onSidebarOpen";
23
24
  readonly 'sidebar:closed': "onSidebarClose";
@@ -1 +1 @@
1
- {"version":3,"file":"events-map.d.ts","sourceRoot":"","sources":["../src/events-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEhE,+EAA+E;AAC/E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;CAyBgC,CAAA;AAEvD,iGAAiG;AACjG,MAAM,MAAM,cAAc,GAAG;KAC1B,CAAC,IAAI,MAAM,YAAY,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CACzF,CAAA"}
1
+ {"version":3,"file":"events-map.d.ts","sourceRoot":"","sources":["../src/events-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEhE,+EAA+E;AAC/E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BgC,CAAA;AAEvD,iGAAiG;AACjG,MAAM,MAAM,cAAc,GAAG;KAC1B,CAAC,IAAI,MAAM,YAAY,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CACzF,CAAA"}
@@ -17,6 +17,7 @@ export const EVENT_PROP = {
17
17
  'widget:action': 'onWidgetAction',
18
18
  'graph:loaded': 'onGraphLoad',
19
19
  'history:changed': 'onHistoryChange',
20
+ 'graph:changed': 'onGraphChanged',
20
21
  'dive:changed': 'onDiveChange',
21
22
  'sidebar:opened': 'onSidebarOpen',
22
23
  'sidebar:closed': 'onSidebarClose',
@@ -1 +1 @@
1
- {"version":3,"file":"events-map.js","sourceRoot":"","sources":["../src/events-map.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,YAAY,EAAE,aAAa;IAC3B,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,gBAAgB;IACjC,YAAY,EAAE,aAAa;IAC3B,YAAY,EAAE,aAAa;IAC3B,eAAe,EAAE,gBAAgB;IACjC,WAAW,EAAE,YAAY;IACzB,gBAAgB,EAAE,iBAAiB;IACnC,mBAAmB,EAAE,oBAAoB;IACzC,iBAAiB,EAAE,kBAAkB;IACrC,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,mBAAmB;IACxC,kBAAkB,EAAE,kBAAkB;IACtC,gBAAgB,EAAE,gBAAgB;IAClC,eAAe,EAAE,gBAAgB;IACjC,cAAc,EAAE,aAAa;IAC7B,iBAAiB,EAAE,iBAAiB;IACpC,cAAc,EAAE,cAAc;IAC9B,gBAAgB,EAAE,eAAe;IACjC,gBAAgB,EAAE,gBAAgB;IAClC,kBAAkB,EAAE,kBAAkB;IACtC,kBAAkB,EAAI,mBAAmB;IACzC,kBAAkB,EAAI,mBAAmB;IACzC,oBAAoB,EAAE,qBAAqB;CACU,CAAA"}
1
+ {"version":3,"file":"events-map.js","sourceRoot":"","sources":["../src/events-map.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,YAAY,EAAE,aAAa;IAC3B,cAAc,EAAE,eAAe;IAC/B,eAAe,EAAE,gBAAgB;IACjC,YAAY,EAAE,aAAa;IAC3B,YAAY,EAAE,aAAa;IAC3B,eAAe,EAAE,gBAAgB;IACjC,WAAW,EAAE,YAAY;IACzB,gBAAgB,EAAE,iBAAiB;IACnC,mBAAmB,EAAE,oBAAoB;IACzC,iBAAiB,EAAE,kBAAkB;IACrC,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,mBAAmB;IACxC,kBAAkB,EAAE,kBAAkB;IACtC,gBAAgB,EAAE,gBAAgB;IAClC,eAAe,EAAE,gBAAgB;IACjC,cAAc,EAAE,aAAa;IAC7B,iBAAiB,EAAE,iBAAiB;IACpC,eAAe,EAAE,gBAAgB;IACjC,cAAc,EAAE,cAAc;IAC9B,gBAAgB,EAAE,eAAe;IACjC,gBAAgB,EAAE,gBAAgB;IAClC,kBAAkB,EAAE,kBAAkB;IACtC,kBAAkB,EAAI,mBAAmB;IACzC,kBAAkB,EAAI,mBAAmB;IACzC,oBAAoB,EAAE,qBAAqB;CACU,CAAA"}
package/dist/hooks.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { EditorEvents, ViewportState, Node, Edge, NodeId, XenolithGraphV1 } from '@xenolithengine/graph-editor';
1
+ import type { EditorEvents, ViewportState, Node, Edge, NodeId, XenolithGraphV1, GraphChanges } from '@xenolithengine/graph-editor';
2
2
  /** Live array of nodes; re-renders on add/remove/move, load and undo/redo. */
3
3
  export declare const useNodes: () => readonly Node[];
4
4
  /** Live array of edges; re-renders on connect/disconnect, node removal, load and undo/redo. */
@@ -34,4 +34,25 @@ export declare function useUndoRedo(): {
34
34
  undo: () => boolean;
35
35
  redo: () => boolean;
36
36
  };
37
+ /**
38
+ * The controlled-state triple (E5 / ADR 0006): a local mirror of the graph folded from
39
+ * commit-time `graph:changed` arrays, plus the write side. This is the Redux/Zustand-legible
40
+ * pattern React migrants expect — with ONE deliberate difference from React Flow: positions
41
+ * arrive when a drag COMMITS, never per frame, so the component tree stays still while the
42
+ * renderer owns the drag.
43
+ *
44
+ * - `nodes` / `edges` — plain records, new references only when a committed change landed.
45
+ * - `applyChanges(changes)` — forward an array (yours, or an echo) to `editor.applyChanges`;
46
+ * idempotent for echoes.
47
+ * - `setNodes(next)` — one-shot optimistic diff: pass the next nodes array (or an updater);
48
+ * adds/removes/position/state deltas are applied to the editor as ONE undo step, and the
49
+ * resulting `graph:changed` echo updates this mirror. Diffing rule is shallow: position by
50
+ * coordinates, state by reference.
51
+ */
52
+ export declare function useNodesState(): {
53
+ nodes: readonly Node[];
54
+ edges: readonly Edge[];
55
+ applyChanges: (changes: GraphChanges) => void;
56
+ setNodes: (next: readonly Node[] | ((prev: readonly Node[]) => readonly Node[])) => void;
57
+ };
37
58
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAkB,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAoEpI,8EAA8E;AAC9E,eAAO,MAAM,QAAQ,EAAE,MAAM,SAAS,IAAI,EAIzC,CAAA;AAED,+FAA+F;AAC/F,eAAO,MAAM,QAAQ,EAAE,MAAM,SAAS,IAAI,EAIzC,CAAA;AAED,iEAAiE;AACjE,eAAO,MAAM,YAAY,EAAE,MAAM,SAAS,MAAM,EAI/C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,WAAW,EAAE,MAAM,aAI/B,CAAA;AAED,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,MAAM,eAAe,GAAG,IAIlD,CAAA;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,YAAY,EACzD,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAC1C,IAAI,CAQN;AAID;;;;GAIG;AACH,wBAAgB,WAAW,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAA;CAAE,CAa9G"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAkB,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAe,MAAM,8BAA8B,CAAA;AAqE/J,8EAA8E;AAC9E,eAAO,MAAM,QAAQ,EAAE,MAAM,SAAS,IAAI,EAIzC,CAAA;AAED,+FAA+F;AAC/F,eAAO,MAAM,QAAQ,EAAE,MAAM,SAAS,IAAI,EAIzC,CAAA;AAED,iEAAiE;AACjE,eAAO,MAAM,YAAY,EAAE,MAAM,SAAS,MAAM,EAI/C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,WAAW,EAAE,MAAM,aAI/B,CAAA;AAED,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,MAAM,eAAe,GAAG,IAIlD,CAAA;AAGD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,YAAY,EACzD,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAC1C,IAAI,CAQN;AAID;;;;GAIG;AACH,wBAAgB,WAAW,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAA;CAAE,CAa9G;AAGD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,IAAI;IAC/B,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;IACtB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;IACtB,YAAY,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAA;IAC7C,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;CACzF,CA8CA"}
package/dist/hooks.js CHANGED
@@ -1,5 +1,6 @@
1
1
  'use client';
2
- import { useCallback, useRef, useSyncExternalStore } from 'react';
2
+ import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';
3
+ import { reduceGraphChanges, snapshotGraph } from '@xenolithengine/graph-editor';
3
4
  import { useXenolithEditor } from './context.js';
4
5
  // Canonical pattern: subscribe to an external (non-React) mutable store via `useSyncExternalStore`.
5
6
  // Replaces the prior `useState + useEffect + subscribe` shape, which the React docs flag as the
@@ -60,16 +61,15 @@ const EMPTY_EDGES = Object.freeze([]);
60
61
  const EMPTY_SELECTION = Object.freeze([]);
61
62
  const DEFAULT_VIEWPORT = Object.freeze({ x: 0, y: 0, zoom: 1 });
62
63
  /** Live array of nodes; re-renders on add/remove/move, load and undo/redo. */
63
- export const useNodes = makeEditorStoreHook(NODE_EVENTS, (e) => Object.freeze(Array.from(e.graph.nodes())), EMPTY_NODES);
64
+ export const useNodes = makeEditorStoreHook(NODE_EVENTS, (e) => Object.freeze(Array.from(e.graphNodes())), EMPTY_NODES);
64
65
  /** Live array of edges; re-renders on connect/disconnect, node removal, load and undo/redo. */
65
- export const useEdges = makeEditorStoreHook(EDGE_EVENTS, (e) => Object.freeze(Array.from(e.graph.edges())), EMPTY_EDGES);
66
+ export const useEdges = makeEditorStoreHook(EDGE_EVENTS, (e) => Object.freeze(Array.from(e.graphEdges())), EMPTY_EDGES);
66
67
  /** Live selection (node ids); re-renders on selection change. */
67
68
  export const useSelection = makeEditorStoreHook(['selection:changed'], (e) => Object.freeze([...e.selection.ids()]), EMPTY_SELECTION);
68
69
  /** Live viewport (`x`, `y`, `zoom`); re-renders on pan/zoom. */
69
70
  export const useViewport = makeEditorStoreHook(['viewport:changed'], (e) => e.viewport, DEFAULT_VIEWPORT);
70
71
  /** Live serialized graph (xenolith.v1); recomputes on any graph mutation, load and undo/redo. */
71
72
  export const useGraphJSON = makeEditorStoreHook(GRAPH_EVENTS, (e) => e.toJSON(), null);
72
- import { useEffect } from 'react';
73
73
  /**
74
74
  * Subscribe to a single editor event from a React component. Handler is auto-rebound when the
75
75
  * editor changes; unsubscribed on unmount. Use this for events that don't have a dedicated hook —
@@ -109,4 +109,65 @@ export function useUndoRedo() {
109
109
  redo: useCallback(() => editor?.history.redo() ?? false, [editor]),
110
110
  };
111
111
  }
112
+ /**
113
+ * The controlled-state triple (E5 / ADR 0006): a local mirror of the graph folded from
114
+ * commit-time `graph:changed` arrays, plus the write side. This is the Redux/Zustand-legible
115
+ * pattern React migrants expect — with ONE deliberate difference from React Flow: positions
116
+ * arrive when a drag COMMITS, never per frame, so the component tree stays still while the
117
+ * renderer owns the drag.
118
+ *
119
+ * - `nodes` / `edges` — plain records, new references only when a committed change landed.
120
+ * - `applyChanges(changes)` — forward an array (yours, or an echo) to `editor.applyChanges`;
121
+ * idempotent for echoes.
122
+ * - `setNodes(next)` — one-shot optimistic diff: pass the next nodes array (or an updater);
123
+ * adds/removes/position/state deltas are applied to the editor as ONE undo step, and the
124
+ * resulting `graph:changed` echo updates this mirror. Diffing rule is shallow: position by
125
+ * coordinates, state by reference.
126
+ */
127
+ export function useNodesState() {
128
+ const editor = useXenolithEditor();
129
+ const [mirror, setMirror] = useState({ nodes: [], edges: [] });
130
+ useEffect(() => {
131
+ if (!editor)
132
+ return;
133
+ setMirror(snapshotGraph(editor.graphNodes(), editor.graphEdges()));
134
+ const off = editor.on('graph:changed', ({ changes }) => {
135
+ setMirror((prev) => reduceGraphChanges(prev, changes));
136
+ });
137
+ return off;
138
+ }, [editor]);
139
+ const applyChanges = useCallback((changes) => { editor?.applyChanges(changes); }, [editor]);
140
+ const setNodes = useCallback((next) => {
141
+ if (!editor)
142
+ return;
143
+ const live = snapshotGraph(editor.graphNodes(), editor.graphEdges());
144
+ const nextNodes = typeof next === 'function' ? next(live.nodes) : next;
145
+ const changes = { nodes: [], edges: [], unsupported: [] };
146
+ const byId = new Map(live.nodes.map((n) => [n.id, n]));
147
+ const seen = new Set();
148
+ for (const n of nextNodes) {
149
+ const id = n.id;
150
+ seen.add(id);
151
+ const prev = byId.get(id);
152
+ if (!prev) {
153
+ changes.nodes.push({ type: 'add', node: n });
154
+ }
155
+ else {
156
+ if (prev.position.x !== n.position.x || prev.position.y !== n.position.y) {
157
+ changes.nodes.push({ type: 'position', id: n.id, position: { ...n.position } });
158
+ }
159
+ if (prev.state !== n.state) {
160
+ changes.nodes.push({ type: 'data', id: n.id, state: { ...n.state } });
161
+ }
162
+ }
163
+ }
164
+ for (const prev of live.nodes) {
165
+ if (!seen.has(prev.id))
166
+ changes.nodes.push({ type: 'remove', id: prev.id });
167
+ }
168
+ if (changes.nodes.length > 0)
169
+ editor.applyChanges(changes);
170
+ }, [editor]);
171
+ return { nodes: mirror.nodes, edges: mirror.edges, applyChanges, setNodes };
172
+ }
112
173
  //# sourceMappingURL=hooks.js.map
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,8 +6,9 @@ export type { EventCallbacks } from './events-map.js';
6
6
  export { EVENT_PROP } from './events-map.js';
7
7
  export { XenolithContext, useXenolithEditor, useEditor } from './context.js';
8
8
  export { XenolithPanel, XenolithButton, XenolithControls, XenolithMiniMap, type PanelPosition, type XenolithPanelProps, type XenolithButtonProps, type XenolithControlsProps, type XenolithMiniMapProps, } from './components.js';
9
- export { useNodes, useEdges, useSelection, useViewport, useGraphJSON, useEditorEvent, useUndoRedo } from './hooks.js';
9
+ export { useNodes, useEdges, useSelection, useViewport, useGraphJSON, useEditorEvent, useUndoRedo, useNodesState } from './hooks.js';
10
10
  export { reactWidget, type WidgetProps } from './react-widget.js';
11
+ export { XenolithProposalQueue } from './proposal-queue.js';
11
12
  export interface XenolithGraphProps extends XenolithProps, EventCallbacks {
12
13
  className?: string;
13
14
  style?: CSSProperties;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA+B,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AACpH,OAAO,EAA2C,KAAK,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAChH,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAChF,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGjE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAChE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EACrE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,GACtD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACrH,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEjE,MAAM,WAAW,kBAAmB,SAAQ,aAAa,EAAE,cAAc;IACvE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,mDAAmD;IACnD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAA;IAC1C,uEAAuE;IACvE,YAAY,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;IAClC,uGAAuG;IACvG,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAUD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAyDrE;AAED,gGAAgG;AAChG,wBAAgB,WAAW,CACzB,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,EAC5B,KAAK,GAAE,aAAkB,GACxB;IAAE,SAAS,EAAE;QAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAqBnD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAA+B,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAA;AACpH,OAAO,EAA2C,KAAK,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAChH,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAChF,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGjE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAChE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EACrE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,GACtD,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACpI,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,WAAW,kBAAmB,SAAQ,aAAa,EAAE,cAAc;IACvE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,mDAAmD;IACnD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAA;IAC1C,uEAAuE;IACvE,YAAY,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAA;IAClC,uGAAuG;IACvG,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAgBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,YAAY,CAqFrE;AAED,gGAAgG;AAChG,wBAAgB,WAAW,CACzB,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,EAC5B,KAAK,GAAE,aAAkB,GACxB;IAAE,SAAS,EAAE;QAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAqBnD"}
package/dist/index.js CHANGED
@@ -10,9 +10,15 @@ import { XenolithContext } from './context.js';
10
10
  export { EVENT_PROP } from './events-map.js';
11
11
  export { XenolithContext, useXenolithEditor, useEditor } from './context.js';
12
12
  export { XenolithPanel, XenolithButton, XenolithControls, XenolithMiniMap, } from './components.js';
13
- export { useNodes, useEdges, useSelection, useViewport, useGraphJSON, useEditorEvent, useUndoRedo } from './hooks.js';
13
+ export { useNodes, useEdges, useSelection, useViewport, useGraphJSON, useEditorEvent, useUndoRedo, useNodesState } from './hooks.js';
14
14
  export { reactWidget } from './react-widget.js';
15
+ export { XenolithProposalQueue } from './proposal-queue.js';
15
16
  const EDITOR_KEYS = ['theme', 'graph', 'zoomBounds', 'minimap', 'disableGrid', 'snap', 'resizeToWindow', 'fitOnLoad', 'isValidConnection'];
17
+ // Module-level promise chain that serializes all editor mount/unmount lifecycle operations.
18
+ // React 19 StrictMode in dev runs every useEffect mount → cleanup → mount. With async PIXI init
19
+ // in the middle that races two apps onto the same host. Routing both init and teardown through
20
+ // this single chain guarantees ordering across the whole lifecycle.
21
+ let pendingChain = Promise.resolve();
16
22
  function pickEditorProps(props) {
17
23
  const out = {};
18
24
  for (const k of EDITOR_KEYS)
@@ -34,17 +40,33 @@ export function XenolithGraph(props) {
34
40
  const cbRef = useRef(props);
35
41
  cbRef.current = props;
36
42
  // Mount once. Subscriptions read the live cbRef, so they survive prop changes.
43
+ // React 19 StrictMode runs every useEffect twice in dev (mount → cleanup → mount). Because
44
+ // `createEditorBinding` is async (PIXI Application.init is async), a naive implementation
45
+ // starts a second editor before the first one finishes, leaving two PIXI apps registering
46
+ // global filter extensions on the same canvas → BindGroup state corrupts, first frame
47
+ // renders empty. The fix: serialize mount/destroy through a single promise chain on a ref —
48
+ // every cleanup waits for the in-flight init to settle, every re-mount waits for the
49
+ // previous binding to be fully torn down before starting its own init.
37
50
  useEffect(() => {
38
51
  const host = hostRef.current;
39
52
  if (!host)
40
53
  return;
41
54
  let disposed = false;
42
55
  const offs = [];
43
- void createEditorBinding(host, pickEditorProps(cbRef.current)).then((binding) => {
56
+ const cell = { binding: null };
57
+ // Wait for any pending teardown from a prior mount cycle (StrictMode) to finish before we
58
+ // touch the host. Chains all serializing through a shared module-level promise.
59
+ pendingChain = pendingChain
60
+ .catch(() => { })
61
+ .then(async () => {
62
+ if (disposed)
63
+ return;
64
+ const binding = await createEditorBinding(host, pickEditorProps(cbRef.current));
44
65
  if (disposed) {
45
66
  binding.destroy();
46
67
  return;
47
68
  }
69
+ cell.binding = binding;
48
70
  bindingRef.current = binding;
49
71
  cbRef.current.onReady?.(binding.editor);
50
72
  setEditor(binding.editor);
@@ -59,8 +81,19 @@ export function XenolithGraph(props) {
59
81
  disposed = true;
60
82
  for (const off of offs)
61
83
  off();
62
- bindingRef.current?.destroy();
63
- bindingRef.current = null;
84
+ // Push teardown onto the same chain — guarantees we don't destroy() before the init
85
+ // promise has resolved (and thus before there's a binding to tear down), and any
86
+ // subsequent mount waits for this destroy() to finish before starting fresh.
87
+ pendingChain = pendingChain
88
+ .catch(() => { })
89
+ .then(() => {
90
+ if (cell.binding) {
91
+ cell.binding.destroy();
92
+ cell.binding = null;
93
+ }
94
+ if (bindingRef.current === cell.binding)
95
+ bindingRef.current = null;
96
+ });
64
97
  setEditor(null);
65
98
  };
66
99
  }, []);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,uGAAuG;AACvG,kGAAkG;AAClG,wCAAwC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAmE,MAAM,OAAO,CAAA;AACpH,OAAO,EAAE,mBAAmB,EAA0C,MAAM,oCAAoC,CAAA;AAEhH,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EACL,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,GAGjE,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACpI,OAAO,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAa3D,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,CAAU,CAAA;AAEnJ,4FAA4F;AAC5F,gGAAgG;AAChG,+FAA+F;AAC/F,oEAAoE;AACpE,IAAI,YAAY,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;AAEnD,SAAS,eAAe,CAAC,KAAyB;IAChD,MAAM,GAAG,GAAkB,EAAE,CAAA;IAC7B,KAAK,MAAM,CAAC,IAAI,WAAW;QAAE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;YAAG,GAA+B,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACvG,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,OAAO,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IACrD,4FAA4F;IAC5F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAA;IACjE,gGAAgG;IAChG,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;IAErB,+EAA+E;IAC/E,2FAA2F;IAC3F,0FAA0F;IAC1F,0FAA0F;IAC1F,sFAAsF;IACtF,4FAA4F;IAC5F,qFAAqF;IACrF,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAA;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,MAAM,IAAI,GAAsB,EAAE,CAAA;QAElC,MAAM,IAAI,GAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAEpC,0FAA0F;QAC1F,gFAAgF;QAChF,YAAY,GAAG,YAAY;aACxB,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;aACf,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,QAAQ;gBAAE,OAAM;YACpB,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;YAC/E,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAM;YAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,UAAU,CAAC,OAAO,GAAG,OAAO,CAAA;YAC5B,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACvC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACzB,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAiD,EAAE,CAAC;gBACvG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;oBACtC,CAAC;oBAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAwC,EAAE,CAAC,OAAO,CAAC,CAAA;gBACzE,CAAC,CAAC,CAAC,CAAA;YACL,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,OAAO,GAAG,EAAE;YACV,QAAQ,GAAG,IAAI,CAAA;YACf,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,GAAG,EAAE,CAAA;YAC7B,oFAAoF;YACpF,iFAAiF;YACjF,6EAA6E;YAC7E,YAAY,GAAG,YAAY;iBACxB,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;iBACf,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;oBACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;gBACrB,CAAC;gBACD,IAAI,UAAU,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;oBAAE,UAAU,CAAC,OAAO,GAAG,IAAI,CAAA;YACpE,CAAC,CAAC,CAAA;YACJ,SAAS,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,2EAA2E;IAC3E,SAAS,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IAEzE,OAAO,CACL,cACE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;YACV,OAAO,CAAC,OAAO,GAAG,EAAE,CAAA;YACpB,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,UAAU;gBAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;iBAC/D,IAAI,KAAK,CAAC,YAAY;gBAAG,KAAK,CAAC,YAAmD,CAAC,OAAO,GAAG,EAAE,CAAA;QACtG,CAAC,EACD,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,YAElB,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAKpC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GACN,GACvB,CACP,CAAA;AACH,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,WAAW,CACzB,OAA4B,EAC5B,QAAuB,EAAE;IAEzB,MAAM,SAAS,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAA;IACxB,MAAM,UAAU,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAI,OAA8C,CAAC,OAAO,CAAA;QAClE,IAAI,CAAC,EAAE;YAAE,OAAM;QACf,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,KAAK,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9D,IAAI,QAAQ,EAAE,CAAC;gBAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAM;YAAC,CAAC;YAC3C,UAAU,CAAC,OAAO,GAAG,OAAO,CAAA;YAC5B,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QACpC,CAAC,CAAC,CAAA;QACF,OAAO,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA,CAAC,CAAC,CAAA;IACtH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IAExD,OAAO,EAAE,SAAS,EAAE,CAAA;AACtB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Declarative wrapper over the core agent-proposal review panel (F1 / ADR 0007). Mounting opens
3
+ * `editor.chrome.showProposals()` — the panel + badge are rendered by the CORE in `overlayRoot`
4
+ * (shared by every framework, themed via `--xeno-*`), so this component renders no DOM of its
5
+ * own. No propose-mode MCP session ever connected → `showProposals()` is a no-op and mounting
6
+ * stays visually silent. Hosts wanting a fully custom review UI use `editor.mcpProposals`
7
+ * directly and never mount this.
8
+ */
9
+ export declare function XenolithProposalQueue(): null;
10
+ //# sourceMappingURL=proposal-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-queue.d.ts","sourceRoot":"","sources":["../src/proposal-queue.tsx"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAQ5C"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { useEffect } from 'react';
3
+ import { useXenolithEditor } from './context.js';
4
+ /**
5
+ * Declarative wrapper over the core agent-proposal review panel (F1 / ADR 0007). Mounting opens
6
+ * `editor.chrome.showProposals()` — the panel + badge are rendered by the CORE in `overlayRoot`
7
+ * (shared by every framework, themed via `--xeno-*`), so this component renders no DOM of its
8
+ * own. No propose-mode MCP session ever connected → `showProposals()` is a no-op and mounting
9
+ * stays visually silent. Hosts wanting a fully custom review UI use `editor.mcpProposals`
10
+ * directly and never mount this.
11
+ */
12
+ export function XenolithProposalQueue() {
13
+ const editor = useXenolithEditor();
14
+ useEffect(() => {
15
+ if (!editor)
16
+ return;
17
+ editor.chrome.showProposals();
18
+ return () => { editor.chrome.hideProposals(); };
19
+ }, [editor]);
20
+ return null;
21
+ }
22
+ //# sourceMappingURL=proposal-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-queue.js","sourceRoot":"","sources":["../src/proposal-queue.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAA;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;QAC7B,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA,CAAC,CAAC,CAAA;IAChD,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACZ,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -5,6 +5,8 @@ import type { DomWidgetController } from '@xenolithengine/graph-editor';
5
5
  export interface WidgetProps {
6
6
  value: unknown;
7
7
  setValue: (v: unknown) => void;
8
+ /** Opens the properties sidebar for the widget's node. */
9
+ openSidebar: () => void;
8
10
  accent: string;
9
11
  text: string;
10
12
  muted: string;
@@ -1 +1 @@
1
- {"version":3,"file":"react-widget.d.ts","sourceRoot":"","sources":["../src/react-widget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAEvE;kGACkG;AAClG,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;sEAEsE;AACtE,wBAAgB,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,SAAS,GAAG,mBAAmB,CAe7F"}
1
+ {"version":3,"file":"react-widget.d.ts","sourceRoot":"","sources":["../src/react-widget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAEvE;kGACkG;AAClG,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9B,0DAA0D;IAC1D,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;sEAEsE;AACtE,wBAAgB,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,SAAS,GAAG,mBAAmB,CAiB7F"}
@@ -7,10 +7,12 @@ import { createRoot } from 'react-dom/client';
7
7
  export function reactWidget(Component) {
8
8
  let root = null;
9
9
  let setValue = () => { };
10
- const toProps = (c) => ({ value: c.value, setValue, accent: c.accent, text: c.text, muted: c.muted, width: c.width, height: c.height });
10
+ let openSidebar = () => { };
11
+ const toProps = (c) => ({ value: c.value, setValue, openSidebar, accent: c.accent, text: c.text, muted: c.muted, width: c.width, height: c.height });
11
12
  return {
12
13
  mount(el, c) {
13
14
  setValue = c.setValue;
15
+ openSidebar = c.openSidebar;
14
16
  root = createRoot(el);
15
17
  root.render(_jsx(Component, { ...toProps(c) }));
16
18
  return () => { root?.unmount(); root = null; };
@@ -1 +1 @@
1
- {"version":3,"file":"react-widget.js","sourceRoot":"","sources":["../src/react-widget.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAA;AAgBxD;;sEAEsE;AACtE,MAAM,UAAU,WAAW,CAAC,SAA4C;IACtE,IAAI,IAAI,GAAgB,IAAI,CAAA;IAC5B,IAAI,QAAQ,GAAyB,GAAG,EAAE,GAAE,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,CAAC,CAAiG,EAAe,EAAE,CACjI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAElH,OAAO;QACL,KAAK,CAAC,EAAE,EAAE,CAAC;YACT,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAA;YACrB,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAA;YACrB,IAAI,CAAC,MAAM,CAAC,KAAC,SAAS,OAAK,OAAO,CAAC,CAAC,CAAC,GAAI,CAAC,CAAA;YAC1C,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA,CAAC,CAAC,CAAA;QAC/C,CAAC;QACD,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE,MAAM,CAAC,KAAC,SAAS,OAAK,OAAO,CAAC,CAAC,CAAC,GAAI,CAAC,CAAA,CAAC,CAAC;KAC1D,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"react-widget.js","sourceRoot":"","sources":["../src/react-widget.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AACZ,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAA;AAkBxD;;sEAEsE;AACtE,MAAM,UAAU,WAAW,CAAC,SAA4C;IACtE,IAAI,IAAI,GAAgB,IAAI,CAAA;IAC5B,IAAI,QAAQ,GAAyB,GAAG,EAAE,GAAE,CAAC,CAAA;IAC7C,IAAI,WAAW,GAAe,GAAG,EAAE,GAAE,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,CAAC,CAAiG,EAAe,EAAE,CACjI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAE/H,OAAO;QACL,KAAK,CAAC,EAAE,EAAE,CAAC;YACT,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAA;YACrB,WAAW,GAAG,CAAC,CAAC,WAAW,CAAA;YAC3B,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAA;YACrB,IAAI,CAAC,MAAM,CAAC,KAAC,SAAS,OAAK,OAAO,CAAC,CAAC,CAAC,GAAI,CAAC,CAAA;YAC1C,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAA,CAAC,CAAC,CAAA;QAC/C,CAAC;QACD,MAAM,CAAC,CAAC,IAAI,IAAI,EAAE,MAAM,CAAC,KAAC,SAAS,OAAK,OAAO,CAAC,CAAC,CAAC,GAAI,CAAC,CAAA,CAAC,CAAC;KAC1D,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xenolithengine/graph-react",
3
- "version": "0.7.0-beta.3",
3
+ "version": "0.7.0-beta.6",
4
4
  "description": "React adapter for XenolithGraph — <XenolithGraph> component + useXenolith hook.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -19,8 +19,8 @@
19
19
  ],
20
20
  "sideEffects": false,
21
21
  "dependencies": {
22
- "@xenolithengine/graph-editor": "0.7.0-beta.3",
23
- "@xenolithengine/graph-adapter-core": "0.7.0-beta.3"
22
+ "@xenolithengine/graph-adapter-core": "0.7.0-beta.6",
23
+ "@xenolithengine/graph-editor": "0.7.0-beta.6"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "pixi.js": "^8.6.0",
@@ -55,7 +55,7 @@
55
55
  "url": "git+https://github.com/XenolithEngine/xenolith-graph.git",
56
56
  "directory": "packages/react"
57
57
  },
58
- "homepage": "https://xenolithengine.github.io/xenolith-graph/",
58
+ "homepage": "https://graph.xenolith.studio/",
59
59
  "bugs": {
60
60
  "url": "https://github.com/XenolithEngine/xenolith-graph/issues"
61
61
  },