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