@nuforge/editor 0.1.3 → 0.3.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/react.cjs CHANGED
@@ -2,10 +2,45 @@
2
2
  'use strict';
3
3
 
4
4
  var react$1 = require('@nuforge/react');
5
+ var t = require('@nuforge/types');
5
6
  var react = require('react');
6
7
  var reactDom = require('react-dom');
7
- require('@nuforge/types');
8
8
 
9
+ /**
10
+ * Wire protocol for `RemoteCanvasHost` <-> `createCanvasReceiver`: a genuinely
11
+ * navigated `/canvas/[id]`-style iframe has its own JS realm, so state and
12
+ * interaction can't cross as direct object references the way `IframeCanvas`'s
13
+ * portal allows — everything here is a structured-clone-safe plain message.
14
+ *
15
+ * Deliberately generic: only the shapes the editor primitive itself needs
16
+ * (state sync, ready handshake, the core interaction events) are typed. Host
17
+ * concerns like theme/preview-mode/overrides ride through `CanvasUiMessage`'s
18
+ * opaque `payload` — this package relays it, never interprets it.
19
+ */
20
+ const CANVAS_CHANNEL = 'nuforge-canvas';
21
+ const CANVAS_PROTOCOL_VERSION = 1;
22
+ /** Namespace the `BroadcastChannel` per canvas instance (derive from the
23
+ * iframe's own `src`, so a host never has to invent/track a separate id). */
24
+ function canvasChannelName(src) {
25
+ return `${CANVAS_CHANNEL}:${src}`;
26
+ }
27
+ /** Narrow an arbitrary `BroadcastChannel` payload to a message from this
28
+ * protocol — guards against unrelated traffic on the same channel name and
29
+ * against a version mismatch across a stale cached bundle. */
30
+ function isCanvasMessage(data) {
31
+ return (!!data &&
32
+ typeof data === 'object' &&
33
+ data.channel === CANVAS_CHANNEL &&
34
+ data.v === CANVAS_PROTOCOL_VERSION);
35
+ }
36
+
37
+ /**
38
+ * Compute a drop position from the pointer's Y against a target's bounding rect.
39
+ * When `allowInside` is set, the middle band is `inside` (drop as a child) and
40
+ * the outer bands are `before`/`after`; otherwise it's a simple before/after
41
+ * split at the midpoint. Pure — use it from an `onDragOver`/`onPointerMove`
42
+ * handler to drive a drop indicator and the eventual `moveNode`/`pasteNode`.
43
+ */
9
44
  function dropPositionFromPointer(clientY, rect, opts = {}) {
10
45
  const ratio = rect.height > 0 ? (clientY - rect.top) / rect.height : 0;
11
46
  if (opts.allowInside) {
@@ -18,19 +53,47 @@ function dropPositionFromPointer(clientY, rect, opts = {}) {
18
53
  return ratio < 0.5 ? 'before' : 'after';
19
54
  }
20
55
 
21
- const decorate = (view) => ({ 'data-nu-id': view.template?.id });
56
+ // Tag every rendered element with its template id so a canvas can map a clicked
57
+ // DOM node back to its source node. Covers external components too, so they're
58
+ // independently selectable/highlightable in the editor canvas.
59
+ const decorate = (view) => ({
60
+ 'data-nu-id': view.template?.id,
61
+ });
62
+ const AMBIENT_CANVAS_WINDOW = {
63
+ doc: typeof document === 'undefined' ? null : document,
64
+ window: typeof window === 'undefined' ? null : window,
65
+ };
66
+ const CanvasWindowContext = react.createContext(AMBIENT_CANVAS_WINDOW);
67
+ /**
68
+ * The real `window`/`document` a canvas-rendered element visually lives in.
69
+ * `IframeCanvas` portals its content into an `<iframe>`, but a portal only
70
+ * relocates DOM nodes — the JS building them still runs in the host page's
71
+ * realm. Any library that reads a bare `window`/`document` global (scroll
72
+ * listeners, `matchMedia`, `ResizeObserver`/`IntersectionObserver` defaults)
73
+ * silently ends up watching the HOST page, not the iframe the user actually
74
+ * sees and scrolls. Build refs/options from `useCanvasWindow()` instead of the
75
+ * ambient global so they resolve to the right realm — this works identically
76
+ * outside `IframeCanvas` too (e.g. `NuFrame`'s direct, non-iframe render),
77
+ * where it's just the ambient `window`/`document`.
78
+ */
79
+ function useCanvasWindow() {
80
+ return react.useContext(CanvasWindowContext);
81
+ }
22
82
  const EditorView = react.memo(function EditorView({ view, }) {
23
83
  const renderChildren = (views) => views.map((child) => react.createElement(EditorView, { key: child.key, view: child }));
24
84
  return react$1.createViewElement(view, renderChildren, decorate);
25
85
  });
86
+ /** Reactive renderer for a frame, decorating each element with `data-nu-id`. */
26
87
  const EditorFrame = react$1.observer(function EditorFrame({ frame }) {
27
88
  return react.createElement(react.Fragment, null, frame.view.children.map((view) => react.createElement(EditorView, { key: view.key, view })));
28
89
  });
90
+ /** Map a DOM node (or event target) back to its template id. */
29
91
  function templateIdFromElement(target) {
30
92
  return (target
31
93
  ?.closest('[data-nu-id]')
32
94
  ?.getAttribute('data-nu-id') ?? null);
33
95
  }
96
+ /** Sensible default styling for the isolated canvas document. */
34
97
  const DEFAULT_CANVAS_CSS = `
35
98
  *, *::before, *::after { box-sizing: border-box; }
36
99
  html, body { margin: 0; }
@@ -49,6 +112,13 @@ const DEFAULT_CANVAS_CSS = `
49
112
  img { max-width: 100%; }
50
113
  [data-nu-id] { cursor: default; }
51
114
  `;
115
+ /**
116
+ * A style-isolated editor canvas: the frame is portaled into an `<iframe>` so
117
+ * the host's CSS can't leak into the preview (and vice-versa). Selection/hover
118
+ * use native capture listeners on the iframe document, so element handlers stay
119
+ * inert while editing. Selection/hover rects are computed (in a layout effect,
120
+ * after the iframe commits) and handed to `renderBox` for the overlay.
121
+ */
52
122
  function IframeCanvas({ frame, selectedId = null, hoveredId = null, revision = 0, previewMode = false, onSelect, onHover, onDropOnNode, baseCss = DEFAULT_CANVAS_CSS, srcDoc, className, containerClassName, renderBox, }) {
53
123
  const iframeRef = react.useRef(null);
54
124
  const [doc, setDoc] = react.useState(null);
@@ -83,6 +153,9 @@ function IframeCanvas({ frame, selectedId = null, hoveredId = null, revision = 0
83
153
  if (!doc) {
84
154
  return;
85
155
  }
156
+ // In preview mode, only keep the scroll listener alive (so an overlay, if any
157
+ // lingers during a toggle, stays aligned). Skip the capturing click handler
158
+ // so element `onClick`s actually fire, and skip hover highlighting.
86
159
  const onScroll = () => setTick((x) => x + 1);
87
160
  doc.addEventListener('scroll', onScroll, true);
88
161
  if (previewMode) {
@@ -105,6 +178,7 @@ function IframeCanvas({ frame, selectedId = null, hoveredId = null, revision = 0
105
178
  doc.removeEventListener('scroll', onScroll, true);
106
179
  };
107
180
  }, [doc, previewMode, onSelect, onHover]);
181
+ // Drop-on-canvas: compute the drop target node + position from the pointer.
108
182
  react.useEffect(() => {
109
183
  if (!doc || !onDropOnNode || previewMode) {
110
184
  return;
@@ -121,7 +195,7 @@ function IframeCanvas({ frame, selectedId = null, hoveredId = null, revision = 0
121
195
  setDrop(null);
122
196
  return;
123
197
  }
124
- e.preventDefault();
198
+ e.preventDefault(); // allow the drop
125
199
  setDrop({
126
200
  rect: { top: r.top, left: r.left, width: r.width, height: r.height },
127
201
  position: dropPositionFromPointer(e.clientY, r, { allowInside: true }),
@@ -147,6 +221,8 @@ function IframeCanvas({ frame, selectedId = null, hoveredId = null, revision = 0
147
221
  doc.removeEventListener('dragleave', onDragLeave);
148
222
  };
149
223
  }, [doc, onDropOnNode]);
224
+ // Recompute overlay rects when the iframe is resized (panel/device resize) or
225
+ // its content reflows — otherwise the selection box keeps a stale size.
150
226
  react.useEffect(() => {
151
227
  const iframe = iframeRef.current;
152
228
  if (!iframe) {
@@ -159,6 +235,7 @@ function IframeCanvas({ frame, selectedId = null, hoveredId = null, revision = 0
159
235
  }
160
236
  return () => observer.disconnect();
161
237
  }, [doc]);
238
+ // Drop-on-canvas indicator has no meaning while previewing.
162
239
  react.useEffect(() => {
163
240
  if (previewMode) {
164
241
  setDrop(null);
@@ -194,8 +271,13 @@ function IframeCanvas({ frame, selectedId = null, hoveredId = null, revision = 0
194
271
  setSelectedLabel(labelOf(selectedId));
195
272
  }, [previewMode, selectedId, hoveredId, revision, tick, doc]);
196
273
  return react.createElement('div', { className: containerClassName, style: { position: 'relative' } }, react.createElement('iframe', { ref: iframeRef, title: 'nuforge preview', className, srcDoc }, doc?.body
197
- ? reactDom.createPortal(react.createElement(EditorFrame, { frame }), doc.body)
198
- : null), renderBox && !previewMode
274
+ ? reactDom.createPortal(react.createElement(CanvasWindowContext.Provider, { value: { doc, window: doc.defaultView } }, react.createElement(EditorFrame, { frame })), doc.body)
275
+ : null),
276
+ // The overlay is fully yours: omit `renderBox` for none, or build borders,
277
+ // labels and action toolbars from the computed rects + selectedLabel. The
278
+ // container is pointer-events:none; set pointerEvents:'auto' on interactive
279
+ // bits (e.g. an action toolbar) so clicks land.
280
+ renderBox && !previewMode
199
281
  ? react.createElement('div', {
200
282
  style: {
201
283
  position: 'absolute',
@@ -206,16 +288,263 @@ function IframeCanvas({ frame, selectedId = null, hoveredId = null, revision = 0
206
288
  }, renderBox({ selected, hovered, selectedLabel, drop }))
207
289
  : null);
208
290
  }
291
+ /**
292
+ * The `IframeCanvas` alternative for when a canvas needs its OWN genuine JS
293
+ * realm — e.g. so a third-party library reading bare `window`/`document` at
294
+ * module scope (an animation library's scroll-linked internals, a gesture
295
+ * library, ...) resolves against the canvas's real globals instead of
296
+ * silently binding to the host page's. A portal can't fix this (see
297
+ * `useCanvasWindow`'s docs for that half of the problem) because it only
298
+ * relocates DOM nodes, not the JS module graph building them.
299
+ *
300
+ * Renders a genuinely-`src`-navigated `<iframe>` — no `createPortal`, so
301
+ * nothing here shares object identity with the canvas's own React tree. State
302
+ * flows one-way, host -> canvas, over a `BroadcastChannel` as `t.flatten`'d
303
+ * JSON (see `./canvas-protocol`); interaction (select/hover/drop/keydown/
304
+ * link-click) relays back the other way as small typed messages. Pair with
305
+ * `createCanvasReceiver` (`./canvas-client`) on the canvas route's own end.
306
+ */
307
+ function RemoteCanvasHost({ nu, activeComponent, src, selectedId = null, hoveredId = null, revision = 0, previewMode = false, uiPayload, onSelect, onHover, onDropOnNode, onKeydownRelay, onLinkClick, className, containerClassName, renderBox, }) {
308
+ const iframeRef = react.useRef(null);
309
+ const [doc, setDoc] = react.useState(null);
310
+ const [tick, setTick] = react.useState(0);
311
+ const [selected, setSelected] = react.useState(null);
312
+ const [hovered, setHovered] = react.useState(null);
313
+ const [selectedLabel, setSelectedLabel] = react.useState(null);
314
+ const props = react.useRef({
315
+ nu,
316
+ activeComponent,
317
+ uiPayload,
318
+ onSelect,
319
+ onHover,
320
+ onDropOnNode,
321
+ onKeydownRelay,
322
+ onLinkClick,
323
+ });
324
+ props.current = {
325
+ nu,
326
+ activeComponent,
327
+ uiPayload,
328
+ onSelect,
329
+ onHover,
330
+ onDropOnNode,
331
+ onKeydownRelay,
332
+ onLinkClick,
333
+ };
334
+ const connectionRef = react.useRef(null);
335
+ // A same-origin `src` navigation still allows the host to read the iframe's
336
+ // own document for layout geometry — that's a plain DOM read, not blocked
337
+ // by realm separation (only shared JS object identity is). Used purely to
338
+ // size/position the overlay; no sync-protocol concern.
339
+ react.useEffect(() => {
340
+ const iframe = iframeRef.current;
341
+ if (!iframe) {
342
+ return;
343
+ }
344
+ const onLoad = () => setDoc(iframe.contentDocument);
345
+ iframe.addEventListener('load', onLoad);
346
+ return () => iframe.removeEventListener('load', onLoad);
347
+ }, [src]);
348
+ react.useEffect(() => {
349
+ if (!doc) {
350
+ return;
351
+ }
352
+ const onScroll = () => setTick((x) => x + 1);
353
+ doc.addEventListener('scroll', onScroll, true);
354
+ return () => doc.removeEventListener('scroll', onScroll, true);
355
+ }, [doc]);
356
+ react.useEffect(() => {
357
+ const iframe = iframeRef.current;
358
+ if (!iframe) {
359
+ return;
360
+ }
361
+ const observer = new ResizeObserver(() => setTick((x) => x + 1));
362
+ observer.observe(iframe);
363
+ if (doc?.documentElement) {
364
+ observer.observe(doc.documentElement);
365
+ }
366
+ return () => observer.disconnect();
367
+ }, [doc]);
368
+ react.useEffect(() => {
369
+ const channel = new BroadcastChannel(canvasChannelName(src));
370
+ let ready = false;
371
+ let mountGen = null;
372
+ let rafId = null;
373
+ let rev = 0;
374
+ const sendInit = () => {
375
+ channel.postMessage({
376
+ channel: CANVAS_CHANNEL,
377
+ v: CANVAS_PROTOCOL_VERSION,
378
+ type: 'init',
379
+ activeComponent: props.current.activeComponent,
380
+ flat: t.flatten(props.current.nu.state),
381
+ });
382
+ };
383
+ const requestPatch = () => {
384
+ if (!ready || rafId !== null) {
385
+ return;
386
+ }
387
+ rafId = requestAnimationFrame(() => {
388
+ rafId = null;
389
+ channel.postMessage({
390
+ channel: CANVAS_CHANNEL,
391
+ v: CANVAS_PROTOCOL_VERSION,
392
+ type: 'patch',
393
+ activeComponent: props.current.activeComponent,
394
+ flat: t.flatten(props.current.nu.state),
395
+ rev: ++rev,
396
+ });
397
+ });
398
+ };
399
+ const postUi = (payload) => {
400
+ channel.postMessage({
401
+ channel: CANVAS_CHANNEL,
402
+ v: CANVAS_PROTOCOL_VERSION,
403
+ type: 'ui',
404
+ payload,
405
+ });
406
+ };
407
+ connectionRef.current = { sendInit, requestPatch, postUi };
408
+ const onMessage = (event) => {
409
+ if (!isCanvasMessage(event.data)) {
410
+ return;
411
+ }
412
+ const message = event.data;
413
+ const p = props.current;
414
+ switch (message.type) {
415
+ case 'ready':
416
+ if (mountGen !== null && message.mountGen <= mountGen) {
417
+ return;
418
+ }
419
+ mountGen = message.mountGen;
420
+ ready = true;
421
+ sendInit();
422
+ // The `uiPayload` effect below only fires again when the payload
423
+ // itself changes — on a fresh mount (or a remount after an error
424
+ // boundary), that push happens before the canvas has attached its
425
+ // listener (it hasn't navigated/mounted yet) and is silently lost,
426
+ // since BroadcastChannel doesn't buffer for late listeners. Resend
427
+ // the CURRENT payload here too, gated on the same readiness signal
428
+ // as the state bootstrap, so theme/overrides never depend on some
429
+ // unrelated prop changing later to "unstick" them.
430
+ postUi(props.current.uiPayload);
431
+ break;
432
+ case 'select':
433
+ p.onSelect?.(message.nodeId);
434
+ setTick((x) => x + 1);
435
+ break;
436
+ case 'hover':
437
+ p.onHover?.(message.nodeId);
438
+ setTick((x) => x + 1);
439
+ break;
440
+ case 'drop':
441
+ p.onDropOnNode?.(message.targetId, message.position);
442
+ break;
443
+ case 'keydown':
444
+ p.onKeydownRelay?.(message);
445
+ break;
446
+ case 'link-click':
447
+ p.onLinkClick?.(message.href);
448
+ break;
449
+ }
450
+ };
451
+ channel.addEventListener('message', onMessage);
452
+ const unlistenChangeset = nu.listenToChangeset(() => {
453
+ requestPatch();
454
+ setTick((x) => x + 1);
455
+ });
456
+ return () => {
457
+ channel.removeEventListener('message', onMessage);
458
+ channel.close();
459
+ unlistenChangeset();
460
+ if (rafId !== null) {
461
+ cancelAnimationFrame(rafId);
462
+ }
463
+ connectionRef.current = null;
464
+ };
465
+ // `nu` is stable for the app's lifetime; `src` identifies the channel.
466
+ // Everything else is read fresh off `props.current` inside the handlers.
467
+ }, [src, nu]);
468
+ // A page switch or preview-mode transition needs a fresh `init`, not just an
469
+ // incremental `patch` — see `previewMode`'s doc above for why preview mode
470
+ // specifically must never let a local-only mutation linger into edit mode.
471
+ const resyncKey = `${activeComponent}:${previewMode}`;
472
+ const lastResyncKey = react.useRef(null);
473
+ react.useEffect(() => {
474
+ if (lastResyncKey.current === resyncKey) {
475
+ return;
476
+ }
477
+ lastResyncKey.current = resyncKey;
478
+ connectionRef.current?.sendInit();
479
+ }, [resyncKey]);
480
+ react.useEffect(() => {
481
+ connectionRef.current?.postUi(uiPayload);
482
+ }, [uiPayload]);
483
+ const rectOf = (id) => {
484
+ if (!doc || !id) {
485
+ return null;
486
+ }
487
+ const el = doc.querySelector(`[data-nu-id="${id}"]`);
488
+ if (!el) {
489
+ return null;
490
+ }
491
+ const r = el.getBoundingClientRect();
492
+ return { top: r.top, left: r.left, width: r.width, height: r.height };
493
+ };
494
+ const labelOf = (id) => {
495
+ if (!doc || !id) {
496
+ return null;
497
+ }
498
+ const el = doc.querySelector(`[data-nu-id="${id}"]`);
499
+ return el ? el.tagName.toLowerCase() : null;
500
+ };
501
+ react.useLayoutEffect(() => {
502
+ if (previewMode) {
503
+ setSelected(null);
504
+ setHovered(null);
505
+ setSelectedLabel(null);
506
+ return;
507
+ }
508
+ setSelected(rectOf(selectedId));
509
+ setHovered(hoveredId && hoveredId !== selectedId ? rectOf(hoveredId) : null);
510
+ setSelectedLabel(labelOf(selectedId));
511
+ }, [previewMode, selectedId, hoveredId, revision, tick, doc]);
512
+ return react.createElement('div', { className: containerClassName, style: { position: 'relative' } }, react.createElement('iframe', {
513
+ ref: iframeRef,
514
+ title: 'nuforge canvas',
515
+ className,
516
+ src,
517
+ }), renderBox && !previewMode
518
+ ? react.createElement('div', {
519
+ style: {
520
+ position: 'absolute',
521
+ inset: 0,
522
+ pointerEvents: 'none',
523
+ overflow: 'hidden',
524
+ },
525
+ }, renderBox({ selected, hovered, selectedLabel }))
526
+ : null);
527
+ }
528
+ // Structural param types (not the nominal `Editor` class), so these hooks accept
529
+ // an Editor imported from the package's main entry without a dual-bundle clash.
530
+ /** Re-render only when the tree shape changes (add/remove/move). */
209
531
  function useStructureRevision(editor) {
210
532
  const [rev, setRev] = react.useState(0);
211
533
  react.useEffect(() => editor.onStructureChange(() => setRev((r) => r + 1)), [editor]);
212
534
  return rev;
213
535
  }
536
+ /** Re-render on every committed change (for undo state, inspectors, …). */
214
537
  function useEditorRevision(editor) {
215
538
  const [rev, setRev] = react.useState(0);
216
539
  react.useEffect(() => editor.onChange(() => setRev((r) => r + 1)), [editor]);
217
540
  return rev;
218
541
  }
542
+ /**
543
+ * A headless inspector renderer: builds a control per {@link PropSchemaField}
544
+ * (text / number / checkbox / select / expression) so you don't hand-write a
545
+ * form per block. Style via `className` and your own CSS; wire `onChange` to the
546
+ * editor's mutation methods.
547
+ */
219
548
  function PropFields({ fields, values, onChange, className, }) {
220
549
  return react.createElement('div', { className, 'data-nu-propfields': '' }, fields.map((field) => react.createElement(PropFieldControl, {
221
550
  key: field.name,
@@ -253,6 +582,7 @@ function PropFieldControl({ field, value, onChange, }) {
253
582
  }, (field.options ?? []).map((opt) => react.createElement('option', { key: opt, value: opt }, opt)));
254
583
  break;
255
584
  default:
585
+ // 'string' | 'expression'
256
586
  control = react.createElement('input', {
257
587
  id,
258
588
  type: 'text',
@@ -268,6 +598,9 @@ exports.DEFAULT_CANVAS_CSS = DEFAULT_CANVAS_CSS;
268
598
  exports.EditorFrame = EditorFrame;
269
599
  exports.IframeCanvas = IframeCanvas;
270
600
  exports.PropFields = PropFields;
601
+ exports.RemoteCanvasHost = RemoteCanvasHost;
271
602
  exports.templateIdFromElement = templateIdFromElement;
603
+ exports.useCanvasWindow = useCanvasWindow;
272
604
  exports.useEditorRevision = useEditorRevision;
273
605
  exports.useStructureRevision = useStructureRevision;
606
+ //# sourceMappingURL=react.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.cjs","sources":["../src/canvas-protocol.ts","../src/template.ts","../src/react.tsx"],"sourcesContent":[null,null,null],"names":["createContext","useContext","memo","createElement","createViewElement","observer","Fragment","useRef","useState","useEffect","useLayoutEffect","createPortal","flatten"],"mappings":"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"}