@particle-academy/fancy-cms-ui 0.0.1-dev.16 β†’ 0.0.1-dev.17

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/editor/state.ts","../src/editor/useEditor.ts","../src/editor/Canvas.tsx","../src/editor/LayersPanel.tsx","../src/editor/Inspector.tsx","../src/editor/Editor.tsx","../src/editor/NodeInspector.tsx","../src/editor/editorOps.ts","../src/editor/EditablePage.tsx"],"names":["useState","jsx","jsxs","Fragment","useRef","input","label","Z","useEffect","len","useCallback","cssEscape","useLayoutEffect","doc","CONTAINER_TYPES"],"mappings":"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","file":"editor.js","sourcesContent":["/**\n * Editor state engine β€” pure and framework-agnostic so it's unit-testable.\n * `useEditor` wraps this with `useReducer`. Undo/redo uses document snapshots\n * (simple + robust); the op-level `invert` in the spine is for collab/op-stream\n * undo.\n */\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { reduce } from \"../document/reduce\";\n\nexport interface EditorState {\n doc: PageDoc;\n past: PageDoc[];\n future: PageDoc[];\n selection: string | null;\n}\n\nexport type EditorAction =\n | { type: \"apply\"; op: PageOp }\n | { type: \"undo\" }\n | { type: \"redo\" }\n | { type: \"select\"; id: string | null }\n | { type: \"replace\"; doc: PageDoc };\n\nconst HISTORY_LIMIT = 100;\n\nexport function initEditor(doc: PageDoc): EditorState {\n return { doc, past: [], future: [], selection: null };\n}\n\nexport function editorReduce(state: EditorState, action: EditorAction): EditorState {\n switch (action.type) {\n case \"apply\": {\n const next = reduce(state.doc, action.op);\n if (next === state.doc) return state; // invalid op β†’ no-op, no history entry\n return {\n ...state,\n doc: next,\n past: [...state.past, state.doc].slice(-HISTORY_LIMIT),\n future: [],\n };\n }\n case \"undo\": {\n if (state.past.length === 0) return state;\n const prev = state.past[state.past.length - 1]!;\n return {\n ...state,\n doc: prev,\n past: state.past.slice(0, -1),\n future: [state.doc, ...state.future],\n };\n }\n case \"redo\": {\n if (state.future.length === 0) return state;\n const next = state.future[0]!;\n return {\n ...state,\n doc: next,\n past: [...state.past, state.doc],\n future: state.future.slice(1),\n };\n }\n case \"select\":\n return state.selection === action.id ? state : { ...state, selection: action.id };\n case \"replace\":\n return state.doc === action.doc ? state : { ...state, doc: action.doc, future: [] };\n default:\n return state;\n }\n}\n","import { useCallback, useMemo, useReducer } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { editorReduce, initEditor, type EditorState } from \"./state\";\n\nexport interface EditorApi {\n state: EditorState;\n /** Dispatch a mutation through the op-spine (records an undo snapshot). */\n apply: (op: PageOp) => void;\n undo: () => void;\n redo: () => void;\n select: (id: string | null) => void;\n /** Replace the document wholesale (e.g. a controlled `value` change). */\n replace: (doc: PageDoc) => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport function useEditor(initialDoc: PageDoc): EditorApi {\n const [state, dispatch] = useReducer(editorReduce, initialDoc, initEditor);\n const apply = useCallback((op: PageOp) => dispatch({ type: \"apply\", op }), []);\n const undo = useCallback(() => dispatch({ type: \"undo\" }), []);\n const redo = useCallback(() => dispatch({ type: \"redo\" }), []);\n const select = useCallback((id: string | null) => dispatch({ type: \"select\", id }), []);\n const replace = useCallback((doc: PageDoc) => dispatch({ type: \"replace\", doc }), []);\n\n return useMemo(\n () => ({\n state,\n apply,\n undo,\n redo,\n select,\n replace,\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n }),\n [state, apply, undo, redo, select, replace],\n );\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n} from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { CmsPage } from \"../react/CmsPage\";\n\nexport interface CanvasProps {\n doc: PageDoc;\n selection: string | null;\n onSelect: (id: string | null) => void;\n apply: (op: PageOp) => void;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n/**\n * The edit surface: renders the live page and overlays a selection box. Click to\n * select; drag the box to move (px constraints). Phase 1 cut: free-parent\n * move + resize handles, stack/grid reordering, and snapping come next.\n */\nexport function Canvas({ doc, selection, onSelect, apply }: CanvasProps): ReactElement {\n const ref = useRef<HTMLDivElement>(null);\n const [box, setBox] = useState<Box | null>(null);\n const drag = useRef<{ x: number; y: number; left: number; top: number } | null>(null);\n\n useLayoutEffect(() => {\n const root = ref.current;\n if (!root || !selection) {\n setBox(null);\n return;\n }\n const el = root.querySelector(`[data-cms=\"${cssEscape(selection)}\"]`);\n if (!el) {\n setBox(null);\n return;\n }\n const r = el.getBoundingClientRect();\n const rootRect = root.getBoundingClientRect();\n setBox({\n x: r.left - rootRect.left + root.scrollLeft,\n y: r.top - rootRect.top + root.scrollTop,\n w: r.width,\n h: r.height,\n });\n }, [selection, doc]);\n\n const handleClick = (e: ReactMouseEvent<HTMLDivElement>) => {\n const target = (e.target as HTMLElement).closest(\"[data-cms]\");\n onSelect(target ? target.getAttribute(\"data-cms\") : null);\n };\n\n const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!selection) return;\n const c = doc.nodes[selection]?.constraints?.base;\n const left = c && c.left && typeof c.left === \"object\" ? c.left.value : 0;\n const top = c && c.top && typeof c.top === \"object\" ? c.top.value : 0;\n drag.current = { x: e.clientX, y: e.clientY, left, top };\n e.currentTarget.setPointerCapture(e.pointerId);\n e.stopPropagation();\n };\n\n const handlePointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d || !selection) return;\n apply({\n t: \"set_constraints\",\n id: selection,\n breakpoint: \"base\",\n patch: {\n left: { value: Math.round(d.left + (e.clientX - d.x)), unit: \"px\" },\n top: { value: Math.round(d.top + (e.clientY - d.y)), unit: \"px\" },\n },\n });\n };\n\n const handlePointerUp = () => {\n drag.current = null;\n };\n\n const surface: CSSProperties = {\n position: \"relative\",\n overflow: \"auto\",\n height: \"100%\",\n background: \"#f8fafc\",\n };\n const overlay: CSSProperties = box\n ? {\n position: \"absolute\",\n left: box.x,\n top: box.y,\n width: box.w,\n height: box.h,\n outline: \"2px solid #8b5cf6\",\n outlineOffset: -1,\n cursor: \"move\",\n touchAction: \"none\",\n }\n : { display: \"none\" };\n\n return (\n <div ref={ref} onClick={handleClick} style={surface}>\n <CmsPage doc={doc} />\n <div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={overlay}\n />\n </div>\n );\n}\n\nfunction cssEscape(value: string): string {\n return value.replace(/[\"\\\\]/g, \"\\\\$&\");\n}\n","import { Fragment, useState, type DragEvent as ReactDragEvent, type ReactElement } from \"react\";\nimport type { NodeId, PageDoc } from \"../document/types\";\nimport { childrenOf } from \"../document/reduce\";\nimport { keyBetween } from \"../document/fractional\";\n\nexport interface LayersPanelProps {\n doc: PageDoc;\n selection: string | null;\n onSelect: (id: string) => void;\n /** Reparent/reorder a node (drag-to-reorder). Omit to disable dragging. */\n onMove?: (id: NodeId, parent: NodeId | null, order: string) => void;\n}\n\nconst MIME = \"application/x-cms-node\";\n\n/** True when `maybeAncestor` is `id` itself or one of its ancestors. */\nfunction isAncestorOrSelf(doc: PageDoc, id: string, maybeAncestor: string): boolean {\n for (let cur: string | null = id; cur; cur = doc.nodes[cur]?.parent ?? null) {\n if (cur === maybeAncestor) return true;\n }\n return false;\n}\n\n/** The section/layer tree. Click a row to select; drag a row onto another to reorder. */\nexport function LayersPanel({ doc, selection, onSelect, onMove }: LayersPanelProps): ReactElement {\n const [overId, setOverId] = useState<string | null>(null);\n\n return (\n <div style={{ overflow: \"auto\", padding: 8, fontSize: 13, fontFamily: \"system-ui, sans-serif\" }}>\n {doc.sections.map((id) => (\n <LayerRow key={id} doc={doc} id={id} depth={0} selection={selection} onSelect={onSelect} onMove={onMove} overId={overId} setOverId={setOverId} />\n ))}\n </div>\n );\n}\n\ninterface LayerRowProps {\n doc: PageDoc;\n id: string;\n depth: number;\n selection: string | null;\n onSelect: (id: string) => void;\n onMove?: (id: NodeId, parent: NodeId | null, order: string) => void;\n overId: string | null;\n setOverId: (id: string | null) => void;\n}\n\nfunction LayerRow({ doc, id, depth, selection, onSelect, onMove, overId, setOverId }: LayerRowProps): ReactElement | null {\n const node = doc.nodes[id];\n if (!node) return null;\n const selected = selection === id;\n const draggable = Boolean(onMove);\n\n const drop = (e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setOverId(null);\n if (!onMove) return;\n const dragId = e.dataTransfer.getData(MIME);\n // Reject no-op + any move that would drop a node into its own subtree.\n if (!dragId || dragId === id || isAncestorOrSelf(doc, id, dragId)) return;\n // Place the dragged node immediately after this row, among this row's siblings.\n const siblings = childrenOf(doc, node.parent);\n const idx = siblings.findIndex((n) => n.id === id);\n const next = siblings[idx + 1];\n onMove(dragId, node.parent, keyBetween(node.order, next ? next.order : null));\n };\n\n return (\n <Fragment>\n <button\n type=\"button\"\n draggable={draggable}\n onClick={() => onSelect(id)}\n onDragStart={(e) => {\n e.dataTransfer.setData(MIME, id);\n e.dataTransfer.effectAllowed = \"move\";\n }}\n onDragOver={(e) => {\n if (!onMove) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n if (overId !== id) setOverId(id);\n }}\n onDragLeave={() => overId === id && setOverId(null)}\n onDrop={drop}\n style={{\n display: \"block\",\n width: \"100%\",\n textAlign: \"left\",\n border: \"none\",\n borderRadius: 6,\n cursor: draggable ? \"grab\" : \"pointer\",\n padding: \"4px 8px\",\n paddingLeft: 8 + depth * 14,\n background: selected ? \"#ede9fe\" : \"transparent\",\n color: selected ? \"#5b21b6\" : \"#334155\",\n font: \"inherit\",\n boxShadow: overId === id ? \"inset 0 -2px 0 0 #8b5cf6\" : \"none\",\n }}\n >\n <span style={{ opacity: 0.6 }}>{node.type}</span> Β· {id}\n </button>\n {childrenOf(doc, id).map((child) => (\n <LayerRow key={child.id} doc={doc} id={child.id} depth={depth + 1} selection={selection} onSelect={onSelect} onMove={onMove} overId={overId} setOverId={setOverId} />\n ))}\n </Fragment>\n );\n}\n","import type { CSSProperties, ReactElement } from \"react\";\nimport type { PageDoc, StyleProps } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\n\nexport interface InspectorProps {\n doc: PageDoc;\n selection: string | null;\n apply: (op: PageOp) => void;\n}\n\nconst label: CSSProperties = {\n display: \"block\",\n fontSize: 11,\n textTransform: \"uppercase\",\n letterSpacing: \"0.04em\",\n color: \"#94a3b8\",\n margin: \"10px 0 4px\",\n};\nconst input: CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n padding: \"6px 8px\",\n borderRadius: 6,\n border: \"1px solid #e2e8f0\",\n font: \"inherit\",\n fontSize: 13,\n};\n\n/** Contextual property editor for the selected node. Every change is one op. */\nexport function Inspector({ doc, selection, apply }: InspectorProps): ReactElement {\n const node = selection ? doc.nodes[selection] : null;\n if (!node) {\n return (\n <div style={{ padding: 16, color: \"#94a3b8\", fontFamily: \"system-ui, sans-serif\", fontSize: 13 }}>\n Select an element to edit.\n </div>\n );\n }\n\n const s = node.style.base;\n const setStyle = (patch: Partial<StyleProps>) =>\n apply({ t: \"set_style\", id: node.id, breakpoint: \"base\", patch });\n const setProp = (key: string, value: unknown) =>\n apply({ t: \"set_props\", id: node.id, patch: { [key]: value } });\n\n return (\n <div style={{ overflow: \"auto\", padding: 16, fontFamily: \"system-ui, sans-serif\", height: \"100%\", boxSizing: \"border-box\" }}>\n <div style={{ fontSize: 13, fontWeight: 600, color: \"#0f172a\" }}>{node.type}</div>\n <div style={{ fontSize: 11, color: \"#94a3b8\", marginBottom: 8 }}>{node.id}</div>\n\n {node.type === \"text\" ? (\n <>\n <label style={label}>Content</label>\n <textarea\n style={{ ...input, minHeight: 64, resize: \"vertical\" }}\n value={typeof node.props.content === \"string\" ? node.props.content : \"\"}\n onChange={(e) => setProp(\"content\", e.target.value)}\n />\n </>\n ) : null}\n\n {node.type === \"image\" ? (\n <>\n <label style={label}>Source</label>\n <input\n style={input}\n value={typeof node.props.src === \"string\" ? node.props.src : \"\"}\n onChange={(e) => setProp(\"src\", e.target.value)}\n />\n </>\n ) : null}\n\n <label style={label}>Background</label>\n <input\n style={input}\n placeholder=\"#ffffff | gradient | url(…)\"\n value={s.background ?? \"\"}\n onChange={(e) => setStyle({ background: e.target.value })}\n />\n\n <label style={label}>Text color</label>\n <input\n style={input}\n placeholder=\"#0f172a\"\n value={s.color ?? \"\"}\n onChange={(e) => setStyle({ color: e.target.value })}\n />\n\n <label style={label}>Font size (px)</label>\n <input\n type=\"number\"\n style={input}\n value={s.fontSize?.value ?? \"\"}\n onChange={(e) => setStyle({ fontSize: { value: Number(e.target.value) || 0, unit: \"px\" } })}\n />\n\n <label style={label}>Padding (px)</label>\n <input\n type=\"number\"\n style={input}\n value={s.padding?.value ?? \"\"}\n onChange={(e) => setStyle({ padding: { value: Number(e.target.value) || 0, unit: \"px\" } })}\n />\n\n <label style={label}>Opacity</label>\n <input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n max=\"1\"\n style={input}\n value={s.opacity ?? \"\"}\n onChange={(e) => setStyle({ opacity: Number(e.target.value) })}\n />\n </div>\n );\n}\n","import { useEffect, useRef, type CSSProperties, type ReactElement } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport { useEditor, type EditorApi } from \"./useEditor\";\nimport { Canvas } from \"./Canvas\";\nimport { LayersPanel } from \"./LayersPanel\";\nimport { Inspector } from \"./Inspector\";\n\nexport interface EditorProps {\n /** Initial document; edits are surfaced via {@link EditorProps.onChange}. */\n defaultValue: PageDoc;\n onChange?: (doc: PageDoc) => void;\n}\n\n/**\n * The fancy-cms editor: layers Β· canvas Β· inspector over the op-spine. Phase 1\n * cut β€” chrome is plain markup for now; it graduates to react-fancy next.\n */\nexport function Editor({ defaultValue, onChange }: EditorProps): ReactElement {\n const ed = useEditor(defaultValue);\n const first = useRef(true);\n\n useEffect(() => {\n if (first.current) {\n first.current = false;\n return;\n }\n onChange?.(ed.state.doc);\n }, [ed.state.doc, onChange]);\n\n const shell: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"220px 1fr 300px\",\n height: \"100%\",\n minHeight: 0,\n background: \"#fff\",\n color: \"#0f172a\",\n border: \"1px solid #e2e8f0\",\n borderRadius: 12,\n overflow: \"hidden\",\n };\n\n return (\n <div style={shell}>\n <div style={{ borderRight: \"1px solid #e2e8f0\", display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <Toolbar ed={ed} />\n <LayersPanel\n doc={ed.state.doc}\n selection={ed.state.selection}\n onSelect={ed.select}\n onMove={(id, parent, order) => ed.apply({ t: \"move_node\", id, parent, order })}\n />\n </div>\n <Canvas doc={ed.state.doc} selection={ed.state.selection} onSelect={ed.select} apply={ed.apply} />\n <div style={{ borderLeft: \"1px solid #e2e8f0\", minHeight: 0 }}>\n <Inspector doc={ed.state.doc} selection={ed.state.selection} apply={ed.apply} />\n </div>\n </div>\n );\n}\n\nfunction Toolbar({ ed }: { ed: EditorApi }): ReactElement {\n const btn: CSSProperties = {\n font: \"inherit\",\n fontSize: 12,\n padding: \"4px 10px\",\n borderRadius: 6,\n border: \"1px solid #e2e8f0\",\n background: \"#fff\",\n cursor: \"pointer\",\n };\n return (\n <div\n style={{\n display: \"flex\",\n gap: 6,\n padding: 8,\n borderBottom: \"1px solid #e2e8f0\",\n fontFamily: \"system-ui, sans-serif\",\n }}\n >\n <button type=\"button\" style={{ ...btn, opacity: ed.canUndo ? 1 : 0.4 }} disabled={!ed.canUndo} onClick={ed.undo}>\n Undo\n </button>\n <button type=\"button\" style={{ ...btn, opacity: ed.canRedo ? 1 : 0.4 }} disabled={!ed.canRedo} onClick={ed.redo}>\n Redo\n </button>\n </div>\n );\n}\n","import { type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport { isBinding, type Binding, type LayoutMode, type Length, type Node, type StyleProps } from \"../document/types\";\nimport type { NodeTransform } from \"./EditablePage\";\n\nexport interface NodeInspectorProps {\n node: Node;\n /** The currently-applied transform for this node (sampled from the active keyframe). */\n transform: NodeTransform;\n /** Live measured size, used as the placeholder when width/height are still \"auto\". */\n measured: { w: number; h: number };\n /** Patch the node's props (commits through the op-spine β†’ undoable). */\n onProps: (patch: Record<string, unknown>) => void;\n /** Patch the node's base style. */\n onStyle: (patch: Partial<StyleProps>) => void;\n /** Set how a container arranges its children (free / stack / grid). */\n onLayout?: (layout: LayoutMode | undefined) => void;\n /** Commit a transform (position / size / opacity / scale / rotate) into the active keyframe. */\n onTransform: (t: NodeTransform) => void;\n onRemove: () => void;\n onClose: () => void;\n}\n\nconst CONTAINER_TYPES = new Set([\"section\", \"frame\", \"stack\", \"grid\", \"shape\", \"card\", \"device\"]);\n\n/**\n * The on-page element Inspector β€” a docked properties panel shown while a node\n * is selected in EditMode. Where the floating toolbar handles quick text tweaks,\n * this is the full surface: content, element-specific props (a button's label /\n * link / variant, an image's src / alt, …), exact position + size, and the style\n * box. Every control writes through the op-spine or the active keyframe, so edits\n * are undoable and animatable.\n */\nexport function NodeInspector({\n node,\n transform,\n measured,\n onProps,\n onStyle,\n onLayout,\n onTransform,\n onRemove,\n onClose,\n}: NodeInspectorProps): ReactElement {\n const base = node.style.base ?? {};\n const setT = (patch: Partial<NodeTransform>) => onTransform({ ...transform, ...patch });\n\n // Props rendered with a bespoke control; everything else falls through to the\n // generic key/value editor so any addon's props get controls for free.\n const handled = new Set([\"content\", \"label\"]);\n const extraKeys = Object.keys(node.props).filter(\n (k) => !handled.has(k) && ([\"string\", \"number\", \"boolean\"].includes(typeof node.props[k]) || isBinding(node.props[k])),\n );\n\n return (\n <div style={panel} onPointerDown={(e) => e.stopPropagation()}>\n <div style={headRow}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, minWidth: 0 }}>\n <strong style={{ fontSize: 12, textTransform: \"capitalize\" }}>{node.type}</strong>\n <span style={{ fontSize: 10, opacity: 0.5, fontFamily: \"ui-monospace, monospace\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\n {node.id}\n </span>\n </div>\n <span style={{ flex: 1 }} />\n <button type=\"button\" style={{ ...iconBtn, color: \"#fca5a5\" }} title=\"Delete element\" onClick={onRemove}>πŸ—‘</button>\n <button type=\"button\" style={iconBtn} title=\"Close\" onClick={onClose}>βœ•</button>\n </div>\n\n <div style={body}>\n {\"content\" in node.props ? (\n <Group label=\"Content\">\n <textarea\n style={{ ...input, minHeight: 64, resize: \"vertical\", lineHeight: 1.4 }}\n value={String(node.props.content ?? \"\")}\n onChange={(e) => onProps({ content: e.target.value })}\n />\n </Group>\n ) : null}\n\n {\"label\" in node.props ? (\n <Group label=\"Label\">\n <input style={input} value={String(node.props.label ?? \"\")} onChange={(e) => onProps({ label: e.target.value })} />\n </Group>\n ) : null}\n\n {extraKeys.length ? (\n <Group label=\"Properties\">\n {extraKeys.map((k) => (\n <PropField key={k} name={k} value={node.props[k]} onChange={(v) => onProps({ [k]: v })} />\n ))}\n </Group>\n ) : null}\n\n <Group label=\"Position & size\">\n <Row>\n <Num label=\"X\" value={transform.x} placeholder=\"0\" onChange={(v) => setT({ x: v })} />\n <Num label=\"Y\" value={transform.y} placeholder=\"0\" onChange={(v) => setT({ y: v })} />\n </Row>\n <Row>\n <Num label=\"W\" value={transform.w} placeholder={`${Math.round(measured.w)}`} onChange={(v) => setT({ w: v })} />\n <Num label=\"H\" value={transform.h} placeholder={`${Math.round(measured.h)}`} onChange={(v) => setT({ h: v })} />\n </Row>\n <Row>\n <Num label=\"Scale\" value={transform.scale} placeholder=\"1\" step={0.05} onChange={(v) => setT({ scale: v })} />\n <Num label=\"Rotate\" value={transform.rotate} placeholder=\"0\" onChange={(v) => setT({ rotate: v })} />\n </Row>\n <Row>\n <Num label=\"Opacity\" value={transform.opacity} placeholder=\"1\" min={0} max={1} step={0.05} onChange={(v) => setT({ opacity: v })} />\n <button type=\"button\" style={{ ...miniBtn, alignSelf: \"end\" }} onClick={() => onTransform({})} title=\"Clear transform\">Reset</button>\n </Row>\n </Group>\n\n {!CONTAINER_TYPES.has(node.type) ? (\n <Group label=\"Text\">\n <Row>\n <Color label=\"Color\" value={base.color ?? \"#0f172a\"} onChange={(v) => onStyle({ color: v })} />\n <Num label=\"Size\" value={base.fontSize?.value} placeholder=\"16\" onChange={(v) => onStyle({ fontSize: v == null ? undefined : len(v) })} />\n </Row>\n <Row>\n <Sel\n label=\"Weight\"\n value={String(base.fontWeight ?? \"\")}\n options={[[\"\", \"β€”\"], [\"400\", \"Regular\"], [\"500\", \"Medium\"], [\"600\", \"Semibold\"], [\"700\", \"Bold\"], [\"800\", \"Heavy\"]]}\n onChange={(v) => onStyle({ fontWeight: v ? Number(v) : undefined })}\n />\n <Sel\n label=\"Align\"\n value={base.textAlign ?? \"\"}\n options={[[\"\", \"β€”\"], [\"left\", \"Left\"], [\"center\", \"Center\"], [\"right\", \"Right\"], [\"justify\", \"Justify\"]]}\n onChange={(v) => onStyle({ textAlign: (v || undefined) as StyleProps[\"textAlign\"] })}\n />\n </Row>\n </Group>\n ) : null}\n\n <Group label=\"Box\">\n <Row>\n <Color label=\"Background\" value={hex(base.background)} onChange={(v) => onStyle({ background: v })} />\n <Num label=\"Radius\" value={base.radius?.value} placeholder=\"0\" onChange={(v) => onStyle({ radius: v == null ? undefined : len(v) })} />\n </Row>\n <Row>\n <Num label=\"Padding\" value={base.padding?.value} placeholder=\"0\" onChange={(v) => onStyle({ padding: v == null ? undefined : len(v) })} />\n <Num label=\"Margin\" value={base.margin?.value} placeholder=\"0\" onChange={(v) => onStyle({ margin: v == null ? undefined : len(v) })} />\n </Row>\n <Row>\n <Txt label=\"Border\" value={base.border ?? \"\"} placeholder=\"1px solid #e2e8f0\" onChange={(v) => onStyle({ border: v || undefined })} />\n </Row>\n </Group>\n\n {CONTAINER_TYPES.has(node.type) ? (\n <Group label=\"Layout\">\n <Row>\n <Sel\n label=\"Mode\"\n value={node.layout ?? \"free\"}\n options={[[\"free\", \"Free\"], [\"stack\", \"Stack\"], [\"grid\", \"Grid\"]]}\n onChange={(v) => onLayout?.(v as LayoutMode)}\n />\n <Num label=\"Gap\" value={base.gap?.value} placeholder=\"0\" onChange={(v) => onStyle({ gap: v == null ? undefined : len(v) })} />\n </Row>\n <Row>\n <Sel\n label=\"Align\"\n value={base.align ?? \"\"}\n options={[[\"\", \"β€”\"], [\"start\", \"Start\"], [\"center\", \"Center\"], [\"end\", \"End\"], [\"stretch\", \"Stretch\"]]}\n onChange={(v) => onStyle({ align: (v || undefined) as StyleProps[\"align\"] })}\n />\n <Sel\n label=\"Justify\"\n value={base.justify ?? \"\"}\n options={[[\"\", \"β€”\"], [\"start\", \"Start\"], [\"center\", \"Center\"], [\"end\", \"End\"], [\"between\", \"Between\"], [\"around\", \"Around\"]]}\n onChange={(v) => onStyle({ justify: (v || undefined) as StyleProps[\"justify\"] })}\n />\n </Row>\n </Group>\n ) : null}\n </div>\n </div>\n );\n}\n\n// ── Small controls ───────────────────────────────────────────────────────────\n\nfunction Group({ label, children }: { label: string; children: ReactNode }): ReactElement {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, paddingBottom: 12, marginBottom: 12, borderBottom: \"1px solid #1e293b\" }}>\n <span style={{ fontSize: 10, letterSpacing: \"0.06em\", textTransform: \"uppercase\", opacity: 0.5 }}>{label}</span>\n {children}\n </div>\n );\n}\n\nfunction Row({ children }: { children: ReactNode }): ReactElement {\n return <div style={{ display: \"flex\", gap: 8 }}>{children}</div>;\n}\n\nfunction PropField({ name, value, onChange }: { name: string; value: unknown; onChange: (v: unknown) => void }): ReactElement {\n const bound = isBinding(value);\n // A πŸ”— toggle flips any prop between a literal value and a data binding.\n const link = (\n <button\n type=\"button\"\n title={bound ? \"Unbind (use a literal value)\" : \"Bind to data (e.g. item.name)\"}\n onClick={() => onChange(bound ? \"\" : ({ $bind: \"\" } satisfies Binding))}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", padding: 0, fontSize: 11, color: bound ? \"#a78bfa\" : \"#64748b\" }}\n >\n πŸ”—\n </button>\n );\n\n if (bound) {\n return (\n <label style={field}>\n <span style={{ ...fieldLabel, display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n {name} {link}\n </span>\n <input style={{ ...input, borderColor: \"#7c3aed\" }} placeholder=\"data path Β· e.g. item.name\" value={(value as Binding).$bind} onChange={(e) => onChange({ $bind: e.target.value } satisfies Binding)} />\n </label>\n );\n }\n if (typeof value === \"boolean\") {\n return (\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, fontSize: 12 }}>\n <input type=\"checkbox\" checked={value} onChange={(e) => onChange(e.target.checked)} />\n <span style={{ textTransform: \"capitalize\", flex: 1 }}>{name}</span>\n {link}\n </label>\n );\n }\n if (name === \"variant\") {\n return <Sel label={name} value={String(value ?? \"\")} options={[[\"primary\", \"Primary\"], [\"ghost\", \"Ghost\"], [\"outline\", \"Outline\"]]} onChange={onChange} />;\n }\n const isNum = typeof value === \"number\";\n return (\n <label style={field}>\n <span style={{ ...fieldLabel, display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n {name} {link}\n </span>\n <input\n style={input}\n type={isNum ? \"number\" : \"text\"}\n value={String(value ?? \"\")}\n onChange={(e) => onChange(isNum ? Number(e.target.value) : e.target.value)}\n />\n </label>\n );\n}\n\nfunction Num({ label, value, placeholder, onChange, step, min, max }: { label: string; value?: number; placeholder?: string; onChange: (v: number | undefined) => void; step?: number; min?: number; max?: number }): ReactElement {\n return (\n <label style={field}>\n <span style={fieldLabel}>{label}</span>\n <input\n style={input}\n type=\"number\"\n step={step}\n min={min}\n max={max}\n value={value ?? \"\"}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value === \"\" ? undefined : Number(e.target.value))}\n />\n </label>\n );\n}\n\nfunction Txt({ label, value, placeholder, onChange }: { label: string; value: string; placeholder?: string; onChange: (v: string) => void }): ReactElement {\n return (\n <label style={field}>\n <span style={fieldLabel}>{label}</span>\n <input style={input} type=\"text\" value={value} placeholder={placeholder} onChange={(e) => onChange(e.target.value)} />\n </label>\n );\n}\n\nfunction Color({ label, value, onChange }: { label: string; value: string; onChange: (v: string) => void }): ReactElement {\n return (\n <label style={field}>\n <span style={fieldLabel}>{label}</span>\n <input style={{ ...input, padding: 2, height: 30 }} type=\"color\" value={value} onChange={(e) => onChange(e.target.value)} />\n </label>\n );\n}\n\nfunction Sel({ label, value, options, onChange }: { label: string; value: string; options: Array<[string, string]>; onChange: (v: string) => void }): ReactElement {\n return (\n <label style={field}>\n <span style={fieldLabel}>{label}</span>\n <select style={input} value={value} onChange={(e) => onChange(e.target.value)}>\n {options.map(([v, l]) => (\n <option key={v} value={v}>{l}</option>\n ))}\n </select>\n </label>\n );\n}\n\nconst len = (value: number): Length => ({ value, unit: \"px\" });\nconst hex = (v: string | undefined): string => (v && /^#[0-9a-fA-F]{6}$/.test(v) ? v : \"#ffffff\");\n\n// ── Styles ───────────────────────────────────────────────────────────────────\n\nconst Z = 2147483000;\nconst panel: CSSProperties = {\n position: \"fixed\",\n top: 60,\n right: 12,\n bottom: 96,\n width: 264,\n display: \"flex\",\n flexDirection: \"column\",\n background: \"#0b1220\",\n color: \"#e2e8f0\",\n border: \"1px solid #1e293b\",\n borderRadius: 12,\n boxShadow: \"0 18px 48px -16px rgba(0,0,0,0.6)\",\n zIndex: Z + 2,\n fontFamily: \"system-ui, sans-serif\",\n overflow: \"hidden\",\n};\nconst headRow: CSSProperties = { display: \"flex\", alignItems: \"center\", gap: 8, padding: \"10px 12px\", borderBottom: \"1px solid #1e293b\" };\nconst body: CSSProperties = { padding: 12, overflowY: \"auto\" };\nconst field: CSSProperties = { display: \"flex\", flexDirection: \"column\", gap: 4, flex: 1, minWidth: 0 };\nconst fieldLabel: CSSProperties = { fontSize: 10, opacity: 0.6 };\nconst input: CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n background: \"#0f172a\",\n color: \"#e2e8f0\",\n border: \"1px solid #334155\",\n borderRadius: 6,\n padding: \"5px 7px\",\n font: \"inherit\",\n fontSize: 12,\n};\nconst iconBtn: CSSProperties = { background: \"transparent\", border: \"none\", color: \"#e2e8f0\", cursor: \"pointer\", fontSize: 13, padding: 4, borderRadius: 6 };\nconst miniBtn: CSSProperties = { font: \"inherit\", fontSize: 11, color: \"#e2e8f0\", background: \"#334155\", border: \"1px solid #475569\", borderRadius: 6, padding: \"5px 10px\", cursor: \"pointer\" };\n","/**\n * Higher-level editor commands expressed as pure {@link PageOp} sequences over\n * the spine β€” duplicate, reorder, wrap, clipboard paste. Each returns ops the\n * caller threads through `ed.apply`, so every command stays undoable and total.\n */\nimport type { Node, NodeId, PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { childrenOf } from \"../document/reduce\";\nimport { keyBetween } from \"../document/fractional\";\n\nexport type NodeMap = Record<NodeId, Node>;\n\n/** Children of `parent` within an arbitrary node map (snapshot-friendly), ordered. */\nfunction childrenOfMap(nodes: NodeMap, parent: NodeId | null): Node[] {\n return Object.values(nodes)\n .filter((n) => n.parent === parent)\n .sort((a, b) => (a.order < b.order ? -1 : a.order > b.order ? 1 : 0));\n}\n\n/** Parent-first BFS over a node map starting at `root`. */\nfunction subtreeBfs(nodes: NodeMap, root: NodeId): NodeId[] {\n const out: NodeId[] = [];\n const queue: NodeId[] = [root];\n while (queue.length) {\n const cur = queue.shift()!;\n out.push(cur);\n for (const child of childrenOfMap(nodes, cur)) queue.push(child.id);\n }\n return out;\n}\n\n/**\n * Clone a subtree from `nodes` under `newParent`/`newOrder`, remapping every id.\n * Returns parent-first insert ops + the new root id. Used by both Duplicate\n * (source = the live doc) and Paste (source = a detached clipboard snapshot).\n */\nexport function cloneFrom(\n nodes: NodeMap,\n rootId: NodeId,\n newParent: NodeId | null,\n newOrder: string,\n seqBase: number,\n): { ops: PageOp[]; newRootId: NodeId | null } {\n if (!nodes[rootId]) return { ops: [], newRootId: null };\n const order = subtreeBfs(nodes, rootId);\n const idMap: Record<NodeId, NodeId> = {};\n order.forEach((old, i) => (idMap[old] = `${old}_c${seqBase}_${i}`));\n const ops: PageOp[] = order.map((old) => {\n const src = nodes[old]!;\n const cloned: Node = JSON.parse(JSON.stringify(src));\n cloned.id = idMap[old]!;\n cloned.parent = old === rootId ? newParent : idMap[src.parent as NodeId]!;\n if (old === rootId) cloned.order = newOrder;\n return { t: \"insert_node\", node: cloned };\n });\n return { ops, newRootId: idMap[rootId]! };\n}\n\n/** Duplicate a node (and its subtree) immediately after itself among its siblings. */\nexport function duplicateOps(doc: PageDoc, id: NodeId): { ops: PageOp[]; newRootId: NodeId | null } {\n const node = doc.nodes[id];\n if (!node) return { ops: [], newRootId: null };\n const sibs = childrenOf(doc, node.parent);\n const idx = sibs.findIndex((s) => s.id === id);\n const newOrder = keyBetween(node.order, sibs[idx + 1]?.order ?? null);\n const { ops, newRootId } = cloneFrom(doc.nodes, id, node.parent, newOrder, doc.seq);\n if (node.parent === null && newRootId) {\n const base = doc.sections;\n const at = base.indexOf(id);\n ops.push({ t: \"reorder_sections\", order: [...base.slice(0, at + 1), newRootId, ...base.slice(at + 1)] });\n }\n return { ops, newRootId };\n}\n\n/** Paste a clipboard snapshot as a child of `target` (if a container) or its sibling. */\nexport function pasteOps(\n doc: PageDoc,\n clip: { rootId: NodeId; nodes: NodeMap },\n target: NodeId | null,\n containerTypes: Set<string>,\n): { ops: PageOp[]; newRootId: NodeId | null } {\n const sel = target ? doc.nodes[target] : null;\n const parent = sel ? (containerTypes.has(sel.type) ? sel.id : sel.parent) : (doc.sections[doc.sections.length - 1] ?? null);\n const sibs = childrenOf(doc, parent);\n const newOrder = keyBetween(sibs.length ? sibs[sibs.length - 1]!.order : null, null);\n const { ops, newRootId } = cloneFrom(clip.nodes, clip.rootId, parent, newOrder, doc.seq);\n if (parent === null && newRootId) {\n // a top-level paste lands at the end of the section order, which is fine.\n }\n return { ops, newRootId };\n}\n\nexport type ReorderDir = \"up\" | \"down\" | \"front\" | \"back\";\n\n/** Reorder a node among its siblings (or sections, for a top-level node). */\nexport function reorderOps(doc: PageDoc, id: NodeId, dir: ReorderDir): PageOp[] {\n const node = doc.nodes[id];\n if (!node) return [];\n\n if (node.parent === null) {\n const s = [...doc.sections];\n const i = s.indexOf(id);\n if (i < 0) return [];\n s.splice(i, 1);\n if (dir === \"front\") s.unshift(id);\n else if (dir === \"back\") s.push(id);\n else s.splice(Math.max(0, Math.min(s.length, dir === \"up\" ? i - 1 : i + 1)), 0, id);\n return [{ t: \"reorder_sections\", order: s }];\n }\n\n const sibs = childrenOf(doc, node.parent);\n const idx = sibs.findIndex((sb) => sb.id === id);\n if (idx < 0) return [];\n const last = sibs.length - 1;\n let newOrder: string;\n if (dir === \"up\") {\n if (idx <= 0) return [];\n newOrder = keyBetween(sibs[idx - 2]?.order ?? null, sibs[idx - 1]!.order);\n } else if (dir === \"down\") {\n if (idx >= last) return [];\n newOrder = keyBetween(sibs[idx + 1]!.order, sibs[idx + 2]?.order ?? null);\n } else if (dir === \"front\") {\n if (idx >= last) return [];\n newOrder = keyBetween(sibs[last]!.order, null);\n } else {\n if (idx <= 0) return [];\n newOrder = keyBetween(null, sibs[0]!.order);\n }\n return [{ t: \"move_node\", id, parent: node.parent, order: newOrder }];\n}\n\n/** Wrap a (non-top-level) node in a new padded Box (frame) that takes its slot. */\nexport function wrapInBoxOps(doc: PageDoc, id: NodeId): { ops: PageOp[]; newRootId: NodeId | null } {\n const node = doc.nodes[id];\n if (!node || node.parent === null) return { ops: [], newRootId: null };\n const frameId = `box_${doc.seq}`;\n return {\n ops: [\n { t: \"insert_node\", node: { id: frameId, type: \"frame\", parent: node.parent, order: node.order, props: {}, style: { base: { padding: { value: 16, unit: \"px\" } } } } },\n { t: \"move_node\", id, parent: frameId, order: \"a\" },\n ],\n newRootId: frameId,\n };\n}\n\n/** Snapshot a node's subtree into a detached clipboard payload. */\nexport function snapshotSubtree(doc: PageDoc, id: NodeId): { rootId: NodeId; nodes: NodeMap } | null {\n if (!doc.nodes[id]) return null;\n const ids = subtreeBfs(doc.nodes, id);\n const nodes: NodeMap = {};\n for (const nid of ids) nodes[nid] = JSON.parse(JSON.stringify(doc.nodes[nid]));\n return { rootId: id, nodes };\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type DragEvent as ReactDragEvent,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { ContextMenu } from \"@particle-academy/react-fancy\";\nimport type { Json, LayoutMode, NodeId, PageDoc, StyleProps } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { childrenOf } from \"../document/reduce\";\nimport { keyBetween } from \"../document/fractional\";\nimport { CmsPage } from \"../react/CmsPage\";\nimport { defaultRegistry, type DataContext, type ElementRegistry } from \"../react/registry\";\nimport { NodeInspector } from \"./NodeInspector\";\nimport { duplicateOps, pasteOps, reorderOps, snapshotSubtree, wrapInBoxOps, type NodeMap, type ReorderDir } from \"./editorOps\";\nimport { useEditor } from \"./useEditor\";\n\n/** Animatable per-node transform (mirrors fancy-motion's NodeState, kept local to avoid a hard dep). */\nexport interface NodeTransform {\n x?: number;\n y?: number;\n scale?: number;\n opacity?: number;\n rotate?: number;\n /** Explicit size in px (a true resize, distinct from `scale`). Absent = auto. */\n w?: number;\n h?: number;\n}\n\nexport interface EditablePageProps {\n doc: PageDoc;\n registry?: ElementRegistry;\n /** Data context for `{ $bind }` props + repeaters (server props, etc.). */\n data?: DataContext;\n /** Slot for the fancy-motion timeline dock (rendered at the bottom in EditMode). */\n timelineDock?: ReactNode;\n /** Per-node transforms applied to the page (e.g. the sampled keyframe snapshot). */\n transforms?: Record<string, NodeTransform>;\n /** Fired when the user moves/resizes a node β€” the host writes it into the current keyframe. */\n onNodeTransform?: (id: string, transform: NodeTransform) => void;\n /** Notifies the host of the current selection (e.g. to sync the timeline). */\n onSelect?: (id: string | null) => void;\n /** Scroll length in viewports β€” the page becomes a tall scroll canvas (extend via the timeline). */\n frames?: number;\n /** Scroll progress 0..1 (scroll = the timeline playhead). The host maps it to transforms. */\n onProgress?: (progress: number) => void;\n /**\n * Pin the page into a scroll canvas (the `frames`Γ—viewport spacer + sticky pin\n * that turns scroll into the playhead). Default `true`. Set **false** for a\n * full multi-section page that should scroll naturally β€” animation is then\n * driven by the dock scrub + Play preview instead of raw scroll.\n */\n pinned?: boolean;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nconst Z = 2147483000;\n/** Snap distance (px) for drag alignment to other elements' edges/centers. */\nconst SNAP = 6;\n\n/**\n * Inline EditMode over a live, seeded CMS page. Hold **Ctrl+Shift** to reveal\n * the Edit toggle. Editing is on the page: text is edited in place, a floating\n * toolbar styles it, and the selection can be **dragged to move** / **resized**\n * β€” committed as transforms the host captures into a timeline keyframe.\n */\nexport function EditablePage({\n doc,\n registry = defaultRegistry,\n data,\n timelineDock,\n transforms,\n onNodeTransform,\n onSelect,\n frames = 1,\n onProgress,\n pinned = true,\n}: EditablePageProps): ReactElement {\n const ed = useEditor(doc);\n const [editing, setEditing] = useState(false);\n const [revealed, setRevealed] = useState(false);\n const pageRef = useRef<HTMLDivElement>(null);\n const spacerRef = useRef<HTMLDivElement>(null);\n const [box, setBox] = useState<Box | null>(null);\n const { selection } = ed.state;\n const selNode = selection ? ed.state.doc.nodes[selection] : null;\n\n useEffect(() => onSelect?.(selection), [selection, onSelect]);\n\n // Ctrl+Shift reveal gesture.\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => setRevealed(e.ctrlKey && e.shiftKey);\n const onBlur = () => setRevealed(false);\n window.addEventListener(\"keydown\", onKey);\n window.addEventListener(\"keyup\", onKey);\n window.addEventListener(\"blur\", onBlur);\n return () => {\n window.removeEventListener(\"keydown\", onKey);\n window.removeEventListener(\"keyup\", onKey);\n window.removeEventListener(\"blur\", onBlur);\n };\n }, []);\n\n // Apply host-provided transforms to the page elements.\n useEffect(() => {\n const root = pageRef.current;\n if (!root) return;\n root.querySelectorAll<HTMLElement>(\"[data-cms]\").forEach((el) => {\n const id = el.dataset.cms;\n const t = id ? transforms?.[id] : undefined;\n applyTransform(el, t);\n });\n }, [transforms, ed.state.doc]);\n\n // Scroll = the timeline playhead. Report progress (0..1) across the scroll\n // canvas so the host can drive the morph from real scrolling (not the dock).\n // Measure synchronously in the scroll handler β€” NOT via requestAnimationFrame.\n // rAF is throttled or fully suspended in hidden/background tabs, which silently\n // freezes the playhead at 0; a direct getBoundingClientRect on one element per\n // scroll event is cheap and always fires.\n useEffect(() => {\n const spacer = spacerRef.current;\n if (!spacer || !onProgress) return;\n const compute = () => {\n const len = spacer.offsetHeight - window.innerHeight;\n const top = spacer.getBoundingClientRect().top;\n onProgress(len > 0 ? Math.min(1, Math.max(0, -top / len)) : 0);\n };\n compute();\n window.addEventListener(\"scroll\", compute, { passive: true });\n window.addEventListener(\"resize\", compute);\n return () => {\n window.removeEventListener(\"scroll\", compute);\n window.removeEventListener(\"resize\", compute);\n };\n }, [onProgress, frames]);\n\n const measureBox = useCallback(() => {\n if (!editing || !selection || !pageRef.current) return setBox(null);\n const el = pageRef.current.querySelector(`[data-cms=\"${cssEscape(selection)}\"]`);\n if (!el) return setBox(null);\n const r = el.getBoundingClientRect();\n setBox({ x: r.left, y: r.top, w: r.width, h: r.height });\n }, [editing, selection]);\n\n // Re-measure on selection / doc / scroll / resize β€” deliberately NOT on every\n // `transforms` frame. A scrub or Play sweep changes transforms ~30Γ—/s; calling\n // getBoundingClientRect each time forces a synchronous reflow of the whole page\n // and saturates the main thread. Live drags re-measure through `onLive` instead.\n useLayoutEffect(() => {\n measureBox();\n window.addEventListener(\"scroll\", measureBox, { passive: true });\n window.addEventListener(\"resize\", measureBox);\n return () => {\n window.removeEventListener(\"scroll\", measureBox);\n window.removeEventListener(\"resize\", measureBox);\n };\n }, [measureBox, ed.state.doc]);\n\n // Inline contentEditable for text nodes.\n useEffect(() => {\n if (!editing || !selection || !pageRef.current || selNode?.type !== \"text\") return;\n const el = pageRef.current.querySelector<HTMLElement>(`[data-cms=\"${cssEscape(selection)}\"]`);\n if (!el) return;\n el.setAttribute(\"contenteditable\", \"true\");\n el.style.outline = \"none\";\n el.focus();\n const commit = () => ed.apply({ t: \"set_props\", id: selection, patch: { content: el.innerText } });\n el.addEventListener(\"blur\", commit);\n return () => {\n el.removeEventListener(\"blur\", commit);\n el.removeAttribute(\"contenteditable\");\n };\n }, [editing, selection, selNode?.type, ed]);\n\n const onClickCapture = (e: ReactMouseEvent<HTMLDivElement>) => {\n if (!editing) return;\n const el = (e.target as HTMLElement).closest(\"[data-cms]\");\n if (el) {\n if (el.getAttribute(\"contenteditable\") === \"true\") return;\n e.preventDefault();\n e.stopPropagation();\n ed.select(el.getAttribute(\"data-cms\"));\n }\n };\n\n const addNode = useCallback(\n (kind: AddKind) => {\n // Drop into the selected container; else the selected node's parent; else\n // the last section (or top level when the page is still empty).\n const doc = ed.state.doc;\n const parent = selNode\n ? CONTAINER_TYPES.has(selNode.type)\n ? selNode.id\n : selNode.parent\n : (doc.sections[doc.sections.length - 1] ?? null);\n const siblings = childrenOf(doc, parent);\n const order = keyBetween(siblings.length ? siblings[siblings.length - 1]!.order : null, null);\n const id = `n${doc.seq + 1}-${Math.floor(performance.now())}`;\n const def = ADD_DEFAULTS[kind];\n ed.apply({ t: \"insert_node\", node: { id, type: def.type, parent, order, layout: def.layout, props: { ...def.props }, style: { base: { ...def.style } } } });\n ed.select(id);\n },\n [ed, selNode],\n );\n\n // Insert an Element at an explicit target (the node under a drop point) rather\n // than the current selection β€” used by the drag-and-drop palette.\n const addNodeAt = useCallback(\n (kind: AddKind, targetId: string | null) => {\n const doc = ed.state.doc;\n const target = targetId ? doc.nodes[targetId] : null;\n const parent = target\n ? CONTAINER_TYPES.has(target.type)\n ? target.id\n : target.parent\n : (doc.sections[doc.sections.length - 1] ?? null);\n const siblings = childrenOf(doc, parent);\n const order = keyBetween(siblings.length ? siblings[siblings.length - 1]!.order : null, null);\n const id = `n${doc.seq + 1}-${Math.floor(performance.now())}`;\n const def = ADD_DEFAULTS[kind];\n ed.apply({ t: \"insert_node\", node: { id, type: def.type, parent, order, layout: def.layout, props: { ...def.props }, style: { base: { ...def.style } } } });\n ed.select(id);\n },\n [ed],\n );\n\n // Right-edge Element palette: reveals when the pointer nears the right screen\n // edge, hides while an Element is being dragged onto the page.\n const [paletteOpen, setPaletteOpen] = useState(false);\n const [draggingEl, setDraggingEl] = useState(false);\n useEffect(() => {\n if (!editing) {\n setPaletteOpen(false);\n return;\n }\n const onMove = (e: MouseEvent) => {\n if (draggingEl) return;\n if (e.clientX >= window.innerWidth - 26) setPaletteOpen(true);\n else if (e.clientX < window.innerWidth - 236) setPaletteOpen(false);\n };\n window.addEventListener(\"mousemove\", onMove);\n return () => window.removeEventListener(\"mousemove\", onMove);\n }, [editing, draggingEl]);\n\n // Drop target + indicator. While dragging, we compute the precise insertion\n // point (before/after a leaf, or inside a container) under the cursor so the\n // user can drop *anywhere* and see exactly where it lands.\n type DropHint = { id: string | null; edge: \"before\" | \"after\" | \"inside\"; rect: { x: number; y: number; w: number; h: number } | null };\n const [dropHint, setDropHint] = useState<DropHint | null>(null);\n\n const computeDropTarget = (clientX: number, clientY: number): DropHint => {\n const el = document.elementFromPoint(clientX, clientY)?.closest(\"[data-cms]\") as HTMLElement | null;\n if (!el) return { id: null, edge: \"inside\", rect: null };\n const id = el.getAttribute(\"data-cms\")!;\n const node = ed.state.doc.nodes[id];\n const r = el.getBoundingClientRect();\n const rect = { x: r.left, y: r.top, w: r.width, h: r.height };\n // Over a container's own area (not a child) β†’ drop inside it.\n if (node && CONTAINER_TYPES.has(node.type)) return { id, edge: \"inside\", rect };\n return { id, edge: clientY < r.top + r.height / 2 ? \"before\" : \"after\", rect };\n };\n\n const onPageDragOver = (e: ReactDragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = \"copy\";\n setDropHint(computeDropTarget(e.clientX, e.clientY));\n };\n\n // Insert relative to a drop hint β€” before/after a sibling, or appended inside\n // a container (or the last section when dropped on empty page space).\n const insertRelative = (kind: AddKind, hint: DropHint) => {\n const doc = ed.state.doc;\n let parent: string | null;\n let order: string;\n if (!hint.id || hint.edge === \"inside\") {\n parent = hint.id ?? (doc.sections[doc.sections.length - 1] ?? null);\n const sib = childrenOf(doc, parent);\n order = keyBetween(sib.length ? sib[sib.length - 1]!.order : null, null);\n } else {\n const target = doc.nodes[hint.id]!;\n parent = target.parent;\n const sib = childrenOf(doc, parent);\n const idx = sib.findIndex((n) => n.id === hint.id);\n order =\n hint.edge === \"before\"\n ? keyBetween(idx > 0 ? sib[idx - 1]!.order : null, target.order)\n : keyBetween(target.order, idx < sib.length - 1 ? sib[idx + 1]!.order : null);\n }\n const id = `n${doc.seq + 1}-${Math.floor(performance.now())}`;\n const def = ADD_DEFAULTS[kind];\n ed.apply({ t: \"insert_node\", node: { id, type: def.type, parent, order, layout: def.layout, props: { ...def.props }, style: { base: { ...def.style } } } });\n ed.select(id);\n };\n\n const onPageDrop = (e: ReactDragEvent<HTMLDivElement>) => {\n const kind = e.dataTransfer.getData(\"application/x-cms-element\") as AddKind;\n if (!kind) return;\n e.preventDefault();\n insertRelative(kind, computeDropTarget(e.clientX, e.clientY));\n setDropHint(null);\n setDraggingEl(false);\n };\n\n const setStyle = (patch: Partial<StyleProps>) =>\n selection && ed.apply({ t: \"set_style\", id: selection, breakpoint: \"base\", patch });\n const setProps = (patch: Record<string, unknown>) =>\n selection && ed.apply({ t: \"set_props\", id: selection, patch });\n const setLayout = (layout: LayoutMode | undefined) =>\n selection && ed.apply({ t: \"set_layout\", id: selection, layout });\n const removeSelected = () => {\n if (!selection) return;\n ed.apply({ t: \"remove_node\", id: selection });\n ed.select(null);\n };\n\n // ── Context-menu / shortcut commands (all expressed as op sequences) ───────\n const clip = useRef<{ rootId: NodeId; nodes: NodeMap } | null>(null);\n const runOps = (result: { ops: PageOp[]; newRootId: NodeId | null }) => {\n result.ops.forEach((op) => ed.apply(op));\n if (result.newRootId) ed.select(result.newRootId);\n };\n const duplicate = (id: string | null) => id && runOps(duplicateOps(ed.state.doc, id));\n const reorder = (id: string | null, dir: ReorderDir) => id && reorderOps(ed.state.doc, id, dir).forEach((op) => ed.apply(op));\n const wrapInBox = (id: string | null) => id && runOps(wrapInBoxOps(ed.state.doc, id));\n const copy = (id: string | null) => {\n if (id) clip.current = snapshotSubtree(ed.state.doc, id);\n };\n const paste = (target: string | null) => {\n if (clip.current) runOps(pasteOps(ed.state.doc, clip.current, target, CONTAINER_TYPES));\n };\n const startEditText = (id: string | null) => {\n if (!id) return;\n ed.select(id);\n requestAnimationFrame(() => pageRef.current?.querySelector<HTMLElement>(`[data-cms=\"${cssEscape(id)}\"]`)?.focus());\n };\n\n // Latest transforms + commit fn for keyboard nudge β€” read via ref so the\n // keydown handler never sees a stale snapshot (transforms change ~30Γ—/s).\n const nudgeRef = useRef({ transforms, onNodeTransform });\n nudgeRef.current = { transforms, onNodeTransform };\n\n // Keyboard shortcuts in EditMode (ignored while typing in a field/contentEditable).\n useEffect(() => {\n if (!editing) return;\n const onKey = (e: KeyboardEvent) => {\n const t = e.target as HTMLElement | null;\n const typing = t && (t.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName));\n if (e.key === \"Escape\") return void ed.select(null);\n if (typing) return;\n if ((e.key === \"Delete\" || e.key === \"Backspace\") && selection) {\n e.preventDefault();\n removeSelected();\n } else if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"d\" && selection) {\n e.preventDefault();\n duplicate(selection);\n } else if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"c\" && selection) {\n copy(selection);\n } else if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"v\") {\n e.preventDefault();\n paste(selection);\n } else if (selection && /^Arrow(Left|Right|Up|Down)$/.test(e.key)) {\n // Nudge: arrows move Β±1px, Shift+arrows Β±10px β€” committed as a transform.\n const { transforms: tf, onNodeTransform: commit } = nudgeRef.current;\n if (!commit) return;\n e.preventDefault();\n const step = e.shiftKey ? 10 : 1;\n const dx = e.key === \"ArrowLeft\" ? -step : e.key === \"ArrowRight\" ? step : 0;\n const dy = e.key === \"ArrowUp\" ? -step : e.key === \"ArrowDown\" ? step : 0;\n const cur = tf?.[selection] ?? {};\n commit(selection, { ...cur, x: (cur.x ?? 0) + dx, y: (cur.y ?? 0) + dy });\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [editing, selection]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const onContextMenuSelect = (e: ReactMouseEvent<HTMLDivElement>) => {\n if (!editing) return;\n const el = (e.target as HTMLElement).closest(\"[data-cms]\");\n if (el) ed.select(el.getAttribute(\"data-cms\"));\n else ed.select(null);\n };\n\n const page = (\n <div\n ref={pageRef}\n onClickCapture={onClickCapture}\n onContextMenu={onContextMenuSelect}\n onDragOver={editing ? onPageDragOver : undefined}\n onDragLeave={editing ? () => setDropHint(null) : undefined}\n onDrop={editing ? onPageDrop : undefined}\n >\n <CmsPage doc={ed.state.doc} registry={registry} data={data} />\n </div>\n );\n const pageShell = pinned ? (\n <div ref={spacerRef} style={{ height: `${Math.max(1, frames) * 100}vh` }}>\n <div style={{ position: \"sticky\", top: 0, height: \"100vh\", overflow: \"hidden\" }}>{page}</div>\n </div>\n ) : frames > 1 ? (\n // Normal flow, but \"expanded\" β€” extra scroll length below the content so a\n // page can be made longer than its content (the οΌ‹ Frame control).\n <div style={{ minHeight: `${frames * 100}vh` }}>{page}</div>\n ) : (\n page\n );\n\n return (\n <div style={{ position: \"relative\" }}>\n {editing ? (\n <ContextMenu>\n <ContextMenu.Trigger>{pageShell}</ContextMenu.Trigger>\n <ContextMenu.Content className=\"!z-[2147483646]\">\n <EditMenuItems\n node={selNode ?? null}\n hasClipboard={Boolean(clip.current)}\n isContainer={selNode ? CONTAINER_TYPES.has(selNode.type) : false}\n onEditText={() => startEditText(selection)}\n onAdd={addNode}\n onDuplicate={() => duplicate(selection)}\n onCopy={() => copy(selection)}\n onPaste={() => paste(selection)}\n onWrap={() => wrapInBox(selection)}\n onReorder={(d) => reorder(selection, d)}\n onDelete={removeSelected}\n />\n </ContextMenu.Content>\n </ContextMenu>\n ) : (\n pageShell\n )}\n\n {editing && box && selection ? (\n <SelectionOverlay\n box={box}\n base={transforms?.[selection] ?? {}}\n movable={Boolean(onNodeTransform)}\n getEl={() => pageRef.current?.querySelector<HTMLElement>(`[data-cms=\"${cssEscape(selection)}\"]`) ?? null}\n onTransform={(t) => onNodeTransform?.(selection, t)}\n onLive={measureBox}\n />\n ) : null}\n\n {editing && box && selNode ? (\n <FloatingToolbar box={box} isText={selNode.type === \"text\" || selNode.type === \"heading\"} base={selNode.style.base} setStyle={setStyle} />\n ) : null}\n\n {editing && selNode && box ? (\n <NodeInspector\n node={selNode}\n transform={(selection ? transforms?.[selection] : undefined) ?? {}}\n measured={{ w: box.w, h: box.h }}\n onProps={setProps}\n onStyle={setStyle}\n onLayout={setLayout}\n onTransform={(t) => selection && onNodeTransform?.(selection, t)}\n onRemove={removeSelected}\n onClose={() => ed.select(null)}\n />\n ) : null}\n\n {revealed || editing ? (\n <EditBar\n editing={editing}\n onToggle={() => {\n setEditing((v) => !v);\n ed.select(null);\n }}\n canUndo={ed.canUndo}\n canRedo={ed.canRedo}\n onUndo={ed.undo}\n onRedo={ed.redo}\n onAdd={addNode}\n />\n ) : null}\n\n {editing && dropHint?.rect ? <DropIndicator hint={dropHint} /> : null}\n\n {editing ? <ElementPalette open={paletteOpen} onDragChange={setDraggingEl} /> : null}\n\n {editing && timelineDock ? <div style={{ position: \"fixed\", left: 0, right: 0, bottom: 0, zIndex: Z }}>{timelineDock}</div> : null}\n </div>\n );\n}\n\n/** The live drop indicator: a line before/after a sibling, or an outline inside a container. */\nfunction DropIndicator({\n hint,\n}: {\n hint: { edge: \"before\" | \"after\" | \"inside\"; rect: { x: number; y: number; w: number; h: number } | null };\n}): ReactElement | null {\n const r = hint.rect;\n if (!r) return null;\n const color = \"#ec4899\";\n if (hint.edge === \"inside\") {\n return <div style={{ position: \"fixed\", left: r.x, top: r.y, width: r.w, height: r.h, outline: `2px dashed ${color}`, outlineOffset: -2, borderRadius: 6, pointerEvents: \"none\", zIndex: Z + 4 }} />;\n }\n const y = hint.edge === \"before\" ? r.y : r.y + r.h;\n return <div style={{ position: \"fixed\", left: r.x, top: y - 1.5, width: r.w, height: 3, background: color, borderRadius: 2, boxShadow: \"0 0 0 1px #fff\", pointerEvents: \"none\", zIndex: Z + 4 }} />;\n}\n\n/**\n * The Element palette β€” a panel docked to the right edge that slides in when the\n * pointer nears the edge (controlled by `open`) and hides while an Element is\n * being dragged. Each tile is draggable; dropping it on the page inserts that\n * Element (handled by EditablePage's `onPageDrop`).\n */\nfunction ElementPalette({ open, onDragChange }: { open: boolean; onDragChange: (dragging: boolean) => void }): ReactElement {\n return (\n <div\n style={{\n position: \"fixed\",\n top: 64,\n bottom: 96,\n right: 0,\n width: 216,\n transform: open ? \"translateX(0)\" : \"translateX(100%)\",\n transition: \"transform 0.18s ease\",\n background: \"#0b1220\",\n color: \"#e2e8f0\",\n borderLeft: \"1px solid #1e293b\",\n borderTopLeftRadius: 12,\n borderBottomLeftRadius: 12,\n boxShadow: \"-18px 0 48px -20px rgba(0,0,0,0.6)\",\n zIndex: Z + 2,\n fontFamily: \"system-ui, sans-serif\",\n padding: 12,\n overflowY: \"auto\",\n }}\n >\n <div style={{ fontSize: 11, letterSpacing: \"0.06em\", textTransform: \"uppercase\", opacity: 0.5, marginBottom: 10 }}>Elements</div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 8 }}>\n {ADD_MENU.map((m) => (\n <div\n key={m.kind}\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setData(\"application/x-cms-element\", m.kind);\n e.dataTransfer.effectAllowed = \"copy\";\n onDragChange(true);\n }}\n onDragEnd={() => onDragChange(false)}\n title={`Drag \"${m.label}\" onto the page`}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 4,\n height: 56,\n borderRadius: 8,\n background: \"#0f172a\",\n border: \"1px solid #1e293b\",\n cursor: \"grab\",\n fontSize: 12,\n userSelect: \"none\",\n }}\n >\n <span style={{ fontSize: 16, opacity: 0.7 }}>οΌ‹</span>\n {m.label}\n </div>\n ))}\n </div>\n <p style={{ fontSize: 10.5, opacity: 0.45, marginTop: 12, lineHeight: 1.4 }}>\n Drag an Element onto the page. It drops into the container you release over.\n </p>\n </div>\n );\n}\n\nconst CONTAINER_TYPES = new Set([\"section\", \"frame\", \"stack\", \"grid\", \"shape\", \"card\", \"device\", \"repeater\"]);\n\ntype AddKind =\n | \"text\"\n | \"heading\"\n | \"button\"\n | \"link\"\n | \"image\"\n | \"box\"\n | \"stack\"\n | \"grid\"\n | \"card\"\n | \"callout\"\n | \"divider\"\n | \"code\"\n | \"richtext\"\n | \"repeater\";\nconst ADD_DEFAULTS: Record<AddKind, { type: string; props: Record<string, Json>; style: StyleProps; layout?: LayoutMode }> = {\n text: { type: \"text\", props: { content: \"New text\" }, style: { color: \"inherit\" } },\n heading: { type: \"heading\", props: { content: \"New heading\" }, style: { fontSize: { value: 28, unit: \"px\" }, fontWeight: 700 } },\n button: { type: \"button\", props: { label: \"Button\", href: \"#\", variant: \"primary\" }, style: {} },\n link: { type: \"link\", props: { content: \"link text\", href: \"#\" }, style: { color: \"#7c3aed\" } },\n image: { type: \"image\", props: { src: \"\", alt: \"\" }, style: {} },\n box: { type: \"frame\", props: {}, style: { padding: { value: 16, unit: \"px\" } } },\n stack: { type: \"stack\", props: {}, style: { gap: { value: 12, unit: \"px\" } }, layout: \"stack\" },\n grid: { type: \"grid\", props: {}, style: { gap: { value: 12, unit: \"px\" } }, layout: \"grid\" },\n card: { type: \"card\", props: {}, style: { padding: { value: 16, unit: \"px\" }, radius: { value: 12, unit: \"px\" }, border: \"1px solid #e2e8f0\" } },\n callout: { type: \"callout\", props: { content: \"Heads up β€” this is a callout.\", variant: \"info\" }, style: {} },\n divider: { type: \"divider\", props: {}, style: {} },\n code: { type: \"code\", props: { content: \"npm install @particle-academy/react-fancy\", lang: \"bash\" }, style: {} },\n richtext: { type: \"richtext\", props: { html: \"<p>Rich <strong>text</strong> with <em>inline</em> formatting.</p>\" }, style: {} },\n repeater: { type: \"repeater\", props: { items: \"\" }, style: { gap: { value: 12, unit: \"px\" } }, layout: \"stack\" },\n};\n\n/** A resize grip: which edges it drags, its position, and its cursor. */\ninterface Grip {\n key: string;\n north?: boolean;\n south?: boolean;\n east?: boolean;\n west?: boolean;\n cursor: string;\n}\nconst GRIPS: Grip[] = [\n { key: \"nw\", north: true, west: true, cursor: \"nwse-resize\" },\n { key: \"n\", north: true, cursor: \"ns-resize\" },\n { key: \"ne\", north: true, east: true, cursor: \"nesw-resize\" },\n { key: \"e\", east: true, cursor: \"ew-resize\" },\n { key: \"se\", south: true, east: true, cursor: \"nwse-resize\" },\n { key: \"s\", south: true, cursor: \"ns-resize\" },\n { key: \"sw\", south: true, west: true, cursor: \"nesw-resize\" },\n { key: \"w\", west: true, cursor: \"ew-resize\" },\n];\n\nfunction SelectionOverlay({\n box,\n base,\n movable,\n getEl,\n onTransform,\n onLive,\n}: {\n box: Box;\n base: NodeTransform;\n movable: boolean;\n getEl: () => HTMLElement | null;\n onTransform: (t: NodeTransform) => void;\n onLive: () => void;\n}): ReactElement {\n const drag = useRef<{ x: number; y: number; w: number; h: number; live: NodeTransform } | null>(null);\n // Snap targets (other elements' edges/centers, viewport coords) gathered at\n // drag start, + the live alignment guides to draw.\n const targets = useRef<{ vx: number[]; hy: number[] }>({ vx: [], hy: [] });\n const [guides, setGuides] = useState<{ x: number | null; y: number | null }>({ x: null, y: null });\n\n const apply = (t: NodeTransform) => {\n const el = getEl();\n if (el) applyTransform(el, t);\n };\n\n // Snap a set of candidate lines to the nearest target within SNAP px.\n // Returns the adjustment to apply and the matched guide coordinate.\n const snap = (cands: number[], lines: number[]): { delta: number; at: number | null } => {\n let best = { delta: 0, at: null as number | null, dist: SNAP + 1 };\n for (const line of lines) {\n for (const c of cands) {\n const diff = line - c;\n if (Math.abs(diff) < best.dist) best = { delta: diff, at: line, dist: Math.abs(diff) };\n }\n }\n return best.dist <= SNAP ? { delta: best.delta, at: best.at } : { delta: 0, at: null };\n };\n\n // Move drags translate; resize grips set an explicit width/height (a true\n // resize, not scale) and translate the opposite way when dragging a top/left\n // edge so the anchored edge stays put.\n const startMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n e.stopPropagation();\n e.preventDefault();\n e.currentTarget.setPointerCapture(e.pointerId);\n drag.current = { x: e.clientX, y: e.clientY, w: box.w, h: box.h, live: { ...base } };\n // Gather snap targets: every other element's left/center/right + top/middle/\n // bottom (skip the selection itself and its ancestors/descendants).\n const sel = getEl();\n const vx = new Set<number>();\n const hy = new Set<number>();\n document.querySelectorAll<HTMLElement>(\"[data-cms]\").forEach((el) => {\n if (sel && (el === sel || sel.contains(el) || el.contains(sel))) return;\n const r = el.getBoundingClientRect();\n vx.add(r.left).add(r.left + r.width / 2).add(r.right);\n hy.add(r.top).add(r.top + r.height / 2).add(r.bottom);\n });\n targets.current = { vx: [...vx], hy: [...hy] };\n };\n const moveMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d) return;\n let dx = e.clientX - d.x;\n let dy = e.clientY - d.y;\n // Snap the moving box's edges/center to nearby targets (hold Alt to bypass).\n if (!e.altKey) {\n const l = box.x + dx;\n const t = box.y + dy;\n const sx = snap([l, l + box.w / 2, l + box.w], targets.current.vx);\n const sy = snap([t, t + box.h / 2, t + box.h], targets.current.hy);\n dx += sx.delta;\n dy += sy.delta;\n setGuides({ x: sx.at, y: sy.at });\n } else if (guides.x !== null || guides.y !== null) {\n setGuides({ x: null, y: null });\n }\n d.live = { ...base, x: (base.x ?? 0) + dx, y: (base.y ?? 0) + dy };\n apply(d.live);\n onLive();\n };\n\n const startResize = (g: Grip) => (e: ReactPointerEvent<HTMLDivElement>) => {\n e.stopPropagation();\n e.preventDefault();\n e.currentTarget.setPointerCapture(e.pointerId);\n drag.current = { x: e.clientX, y: e.clientY, w: base.w ?? box.w, h: base.h ?? box.h, live: { ...base } };\n (e.currentTarget as HTMLElement).dataset.grip = g.key;\n };\n const resizeMove = (g: Grip) => (e: ReactPointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d) return;\n const dx = e.clientX - d.x;\n const dy = e.clientY - d.y;\n const live: NodeTransform = { ...base };\n if (g.east) live.w = Math.max(16, Math.round(d.w + dx));\n if (g.west) {\n live.w = Math.max(16, Math.round(d.w - dx));\n live.x = (base.x ?? 0) + (d.w - live.w);\n }\n if (g.south) live.h = Math.max(16, Math.round(d.h + dy));\n if (g.north) {\n live.h = Math.max(16, Math.round(d.h - dy));\n live.y = (base.y ?? 0) + (d.h - live.h);\n }\n d.live = live;\n apply(live);\n onLive();\n };\n const end = () => {\n const d = drag.current;\n if (d) onTransform(d.live);\n drag.current = null;\n setGuides({ x: null, y: null });\n };\n\n const outline: CSSProperties = {\n position: \"fixed\",\n left: box.x - 1,\n top: box.y - 1,\n width: box.w + 2,\n height: box.h + 2,\n outline: \"2px solid #8b5cf6\",\n borderRadius: 4,\n pointerEvents: \"none\",\n zIndex: Z,\n };\n const handle: CSSProperties = {\n position: \"fixed\",\n width: 12,\n height: 12,\n background: \"#fff\",\n border: \"2px solid #8b5cf6\",\n borderRadius: 3,\n zIndex: Z + 1,\n touchAction: \"none\",\n boxSizing: \"border-box\",\n };\n const gripPos = (g: Grip): CSSProperties => {\n const cx = g.west ? box.x : g.east ? box.x + box.w : box.x + box.w / 2;\n const cy = g.north ? box.y : g.south ? box.y + box.h : box.y + box.h / 2;\n return { left: cx - 6, top: cy - 6, cursor: g.cursor };\n };\n\n return (\n <>\n {guides.x !== null ? <div style={{ position: \"fixed\", left: guides.x, top: 0, bottom: 0, width: 1, background: \"#ec4899\", zIndex: Z + 3, pointerEvents: \"none\" }} /> : null}\n {guides.y !== null ? <div style={{ position: \"fixed\", top: guides.y, left: 0, right: 0, height: 1, background: \"#ec4899\", zIndex: Z + 3, pointerEvents: \"none\" }} /> : null}\n <div style={outline} />\n {movable ? (\n <>\n {/* move grip β€” circular, top-left, offset clear of the corner handle */}\n <div\n title=\"Drag to move\"\n onPointerDown={startMove}\n onPointerMove={moveMove}\n onPointerUp={end}\n style={{ ...handle, width: 18, height: 18, borderRadius: 9, background: \"#8b5cf6\", border: \"2px solid #fff\", left: box.x - 22, top: box.y - 22, cursor: \"move\" }}\n />\n {GRIPS.map((g) => (\n <div\n key={g.key}\n title=\"Drag to resize\"\n onPointerDown={startResize(g)}\n onPointerMove={resizeMove(g)}\n onPointerUp={end}\n style={{ ...handle, ...gripPos(g) }}\n />\n ))}\n </>\n ) : null}\n </>\n );\n}\n\nfunction FloatingToolbar({\n box,\n isText,\n base,\n setStyle,\n}: {\n box: Box;\n isText: boolean;\n base: Partial<StyleProps>;\n setStyle: (patch: Partial<StyleProps>) => void;\n}): ReactElement {\n const wrap: CSSProperties = {\n position: \"fixed\",\n left: box.x,\n top: Math.max(8, box.y - 46),\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"6px 10px\",\n background: \"#0f172a\",\n color: \"#fff\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: 999,\n boxShadow: \"0 8px 24px -8px rgba(0,0,0,0.5)\",\n zIndex: Z + 2,\n fontFamily: \"system-ui, sans-serif\",\n fontSize: 12,\n };\n const swatch: CSSProperties = { width: 22, height: 22, border: \"none\", background: \"transparent\", padding: 0, cursor: \"pointer\" };\n const num: CSSProperties = { width: 52, background: \"#1e293b\", color: \"#fff\", border: \"1px solid #334155\", borderRadius: 6, padding: \"3px 6px\", font: \"inherit\" };\n return (\n <div style={wrap} onMouseDown={(e) => e.preventDefault()}>\n {isText ? (\n <label title=\"Text color\" style={{ display: \"inline-flex\", alignItems: \"center\", gap: 4 }}>\n <span style={{ opacity: 0.7 }}>A</span>\n <input type=\"color\" style={swatch} value={base.color ?? \"#0f172a\"} onChange={(e) => setStyle({ color: e.target.value })} />\n </label>\n ) : null}\n {isText ? (\n <input type=\"number\" title=\"Font size (px)\" style={num} placeholder=\"size\" value={base.fontSize?.value ?? \"\"} onChange={(e) => setStyle({ fontSize: { value: Number(e.target.value) || 0, unit: \"px\" } })} />\n ) : null}\n <label title=\"Background\" style={{ display: \"inline-flex\", alignItems: \"center\", gap: 4 }}>\n <span style={{ opacity: 0.7 }}>BG</span>\n <input type=\"color\" style={swatch} value={normalizeColor(base.background)} onChange={(e) => setStyle({ background: e.target.value })} />\n </label>\n </div>\n );\n}\n\nconst ADD_MENU: Array<{ kind: AddKind; label: string }> = [\n { kind: \"heading\", label: \"Heading\" },\n { kind: \"text\", label: \"Text\" },\n { kind: \"button\", label: \"Button\" },\n { kind: \"link\", label: \"Link\" },\n { kind: \"image\", label: \"Image\" },\n { kind: \"card\", label: \"Card\" },\n { kind: \"callout\", label: \"Callout\" },\n { kind: \"stack\", label: \"Stack\" },\n { kind: \"grid\", label: \"Grid\" },\n { kind: \"box\", label: \"Box\" },\n { kind: \"divider\", label: \"Divider\" },\n { kind: \"code\", label: \"Code\" },\n { kind: \"richtext\", label: \"Rich text\" },\n { kind: \"repeater\", label: \"Repeater\" },\n];\n\nfunction EditBar({\n editing,\n onToggle,\n canUndo,\n canRedo,\n onUndo,\n onRedo,\n onAdd,\n}: {\n editing: boolean;\n onToggle: () => void;\n canUndo: boolean;\n canRedo: boolean;\n onUndo: () => void;\n onRedo: () => void;\n onAdd: (kind: AddKind) => void;\n}): ReactElement {\n const [open, setOpen] = useState(false);\n const bar: CSSProperties = { position: \"fixed\", top: 12, right: 12, display: \"flex\", gap: 6, alignItems: \"center\", padding: 6, background: \"#0f172a\", color: \"#fff\", borderRadius: 999, boxShadow: \"0 8px 24px -8px rgba(0,0,0,0.4)\", zIndex: Z + 3, fontFamily: \"system-ui, sans-serif\", fontSize: 12 };\n const btn: CSSProperties = { font: \"inherit\", border: \"none\", background: \"transparent\", color: \"inherit\", cursor: \"pointer\", padding: \"4px 8px\", borderRadius: 999 };\n return (\n <div style={bar}>\n <button type=\"button\" style={{ ...btn, background: editing ? \"#8b5cf6\" : \"transparent\" }} onClick={onToggle}>\n {editing ? \"● Editing\" : \"Edit\"}\n </button>\n {editing ? (\n <>\n <div style={{ position: \"relative\" }}>\n <button type=\"button\" style={{ ...btn, background: open ? \"#1e293b\" : \"transparent\" }} onClick={() => setOpen((v) => !v)} title=\"Add an Element (or drag from the right-edge palette)\">οΌ‹ Element β–Ύ</button>\n {open ? (\n <div style={{ position: \"absolute\", top: \"calc(100% + 6px)\", right: 0, background: \"#0f172a\", border: \"1px solid #1e293b\", borderRadius: 10, padding: 4, display: \"flex\", flexDirection: \"column\", minWidth: 132, boxShadow: \"0 12px 32px -10px rgba(0,0,0,0.6)\" }}>\n {ADD_MENU.map((m) => (\n <button\n key={m.kind}\n type=\"button\"\n style={{ ...btn, textAlign: \"left\", borderRadius: 6, padding: \"6px 10px\" }}\n onClick={() => {\n onAdd(m.kind);\n setOpen(false);\n }}\n >\n {m.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n <button type=\"button\" style={{ ...btn, opacity: canUndo ? 1 : 0.4 }} disabled={!canUndo} onClick={onUndo}>β†Ά</button>\n <button type=\"button\" style={{ ...btn, opacity: canRedo ? 1 : 0.4 }} disabled={!canRedo} onClick={onRedo}>β†·</button>\n </>\n ) : null}\n </div>\n );\n}\n\n/** The right-click menu in EditMode β€” contextual to the node under the cursor. */\nfunction EditMenuItems({\n node,\n hasClipboard,\n isContainer,\n onEditText,\n onAdd,\n onDuplicate,\n onCopy,\n onPaste,\n onWrap,\n onReorder,\n onDelete,\n}: {\n node: { type: string; parent: NodeId | null } | null;\n hasClipboard: boolean;\n isContainer: boolean;\n onEditText: () => void;\n onAdd: (kind: AddKind) => void;\n onDuplicate: () => void;\n onCopy: () => void;\n onPaste: () => void;\n onWrap: () => void;\n onReorder: (dir: ReorderDir) => void;\n onDelete: () => void;\n}): ReactElement {\n const editable = node && (node.type === \"text\" || node.type === \"heading\");\n const nested = Boolean(node && node.parent !== null);\n return (\n <>\n {editable ? <ContextMenu.Item onClick={onEditText}>Edit text</ContextMenu.Item> : null}\n <ContextMenu.Sub>\n <ContextMenu.SubTrigger>{isContainer ? \"Add Element inside\" : \"Add Element\"}</ContextMenu.SubTrigger>\n <ContextMenu.SubContent className=\"!z-[2147483647]\">\n {ADD_MENU.map((m) => (\n <ContextMenu.Item key={m.kind} onClick={() => onAdd(m.kind)}>{m.label}</ContextMenu.Item>\n ))}\n </ContextMenu.SubContent>\n </ContextMenu.Sub>\n {node ? (\n <>\n <ContextMenu.Separator />\n <ContextMenu.Item onClick={onDuplicate}>Duplicate</ContextMenu.Item>\n <ContextMenu.Item onClick={onCopy}>Copy</ContextMenu.Item>\n <ContextMenu.Item disabled={!hasClipboard} onClick={onPaste}>Paste</ContextMenu.Item>\n {nested ? <ContextMenu.Item onClick={onWrap}>Wrap in Box</ContextMenu.Item> : null}\n <ContextMenu.Separator />\n <ContextMenu.Item onClick={() => onReorder(\"up\")}>Move up</ContextMenu.Item>\n <ContextMenu.Item onClick={() => onReorder(\"down\")}>Move down</ContextMenu.Item>\n {nested ? (\n <>\n <ContextMenu.Item onClick={() => onReorder(\"front\")}>Bring to front</ContextMenu.Item>\n <ContextMenu.Item onClick={() => onReorder(\"back\")}>Send to back</ContextMenu.Item>\n </>\n ) : null}\n <ContextMenu.Separator />\n <ContextMenu.Item danger onClick={onDelete}>Delete</ContextMenu.Item>\n </>\n ) : (\n <ContextMenu.Item disabled={!hasClipboard} onClick={onPaste}>Paste</ContextMenu.Item>\n )}\n </>\n );\n}\n\n/** Write a transform onto an element (or clear every transformed property). */\nfunction applyTransform(el: HTMLElement, t: NodeTransform | undefined): void {\n if (t && (t.x != null || t.y != null || t.scale != null || t.rotate != null || t.opacity != null || t.w != null || t.h != null)) {\n el.style.transform = `translate3d(${t.x ?? 0}px, ${t.y ?? 0}px, 0) scale(${t.scale ?? 1}) rotate(${t.rotate ?? 0}deg)`;\n el.style.opacity = t.opacity != null ? String(t.opacity) : \"\";\n el.style.width = t.w != null ? `${t.w}px` : \"\";\n el.style.height = t.h != null ? `${t.h}px` : \"\";\n } else {\n el.style.transform = \"\";\n el.style.opacity = \"\";\n el.style.width = \"\";\n el.style.height = \"\";\n }\n}\n\nfunction normalizeColor(v: string | undefined): string {\n return v && /^#[0-9a-fA-F]{6}$/.test(v) ? v : \"#ffffff\";\n}\n\nfunction cssEscape(value: string): string {\n return value.replace(/[\"\\\\]/g, \"\\\\$&\");\n}\n"]}
1
+ {"version":3,"sources":["../src/editor/state.ts","../src/editor/useEditor.ts","../src/editor/Canvas.tsx","../src/editor/LayersPanel.tsx","../src/editor/Inspector.tsx","../src/editor/Editor.tsx","../src/editor/NodeInspector.tsx","../src/editor/editorOps.ts","../src/editor/EditablePage.tsx"],"names":["useState","jsx","jsxs","Fragment","useRef","input","label","Z","useEffect","len","useCallback","cssEscape","useLayoutEffect","doc","CONTAINER_TYPES"],"mappings":"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","file":"editor.js","sourcesContent":["/**\n * Editor state engine β€” pure and framework-agnostic so it's unit-testable.\n * `useEditor` wraps this with `useReducer`. Undo/redo uses document snapshots\n * (simple + robust); the op-level `invert` in the spine is for collab/op-stream\n * undo.\n */\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { reduce } from \"../document/reduce\";\n\nexport interface EditorState {\n doc: PageDoc;\n past: PageDoc[];\n future: PageDoc[];\n selection: string | null;\n}\n\nexport type EditorAction =\n | { type: \"apply\"; op: PageOp }\n | { type: \"undo\" }\n | { type: \"redo\" }\n | { type: \"select\"; id: string | null }\n | { type: \"replace\"; doc: PageDoc };\n\nconst HISTORY_LIMIT = 100;\n\nexport function initEditor(doc: PageDoc): EditorState {\n return { doc, past: [], future: [], selection: null };\n}\n\nexport function editorReduce(state: EditorState, action: EditorAction): EditorState {\n switch (action.type) {\n case \"apply\": {\n const next = reduce(state.doc, action.op);\n if (next === state.doc) return state; // invalid op β†’ no-op, no history entry\n return {\n ...state,\n doc: next,\n past: [...state.past, state.doc].slice(-HISTORY_LIMIT),\n future: [],\n };\n }\n case \"undo\": {\n if (state.past.length === 0) return state;\n const prev = state.past[state.past.length - 1]!;\n return {\n ...state,\n doc: prev,\n past: state.past.slice(0, -1),\n future: [state.doc, ...state.future],\n };\n }\n case \"redo\": {\n if (state.future.length === 0) return state;\n const next = state.future[0]!;\n return {\n ...state,\n doc: next,\n past: [...state.past, state.doc],\n future: state.future.slice(1),\n };\n }\n case \"select\":\n return state.selection === action.id ? state : { ...state, selection: action.id };\n case \"replace\":\n return state.doc === action.doc ? state : { ...state, doc: action.doc, future: [] };\n default:\n return state;\n }\n}\n","import { useCallback, useMemo, useReducer } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { editorReduce, initEditor, type EditorState } from \"./state\";\n\nexport interface EditorApi {\n state: EditorState;\n /** Dispatch a mutation through the op-spine (records an undo snapshot). */\n apply: (op: PageOp) => void;\n undo: () => void;\n redo: () => void;\n select: (id: string | null) => void;\n /** Replace the document wholesale (e.g. a controlled `value` change). */\n replace: (doc: PageDoc) => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport function useEditor(initialDoc: PageDoc): EditorApi {\n const [state, dispatch] = useReducer(editorReduce, initialDoc, initEditor);\n const apply = useCallback((op: PageOp) => dispatch({ type: \"apply\", op }), []);\n const undo = useCallback(() => dispatch({ type: \"undo\" }), []);\n const redo = useCallback(() => dispatch({ type: \"redo\" }), []);\n const select = useCallback((id: string | null) => dispatch({ type: \"select\", id }), []);\n const replace = useCallback((doc: PageDoc) => dispatch({ type: \"replace\", doc }), []);\n\n return useMemo(\n () => ({\n state,\n apply,\n undo,\n redo,\n select,\n replace,\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n }),\n [state, apply, undo, redo, select, replace],\n );\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n} from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { CmsPage } from \"../react/CmsPage\";\n\nexport interface CanvasProps {\n doc: PageDoc;\n selection: string | null;\n onSelect: (id: string | null) => void;\n apply: (op: PageOp) => void;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n/**\n * The edit surface: renders the live page and overlays a selection box. Click to\n * select; drag the box to move (px constraints). Phase 1 cut: free-parent\n * move + resize handles, stack/grid reordering, and snapping come next.\n */\nexport function Canvas({ doc, selection, onSelect, apply }: CanvasProps): ReactElement {\n const ref = useRef<HTMLDivElement>(null);\n const [box, setBox] = useState<Box | null>(null);\n const drag = useRef<{ x: number; y: number; left: number; top: number } | null>(null);\n\n useLayoutEffect(() => {\n const root = ref.current;\n if (!root || !selection) {\n setBox(null);\n return;\n }\n const el = root.querySelector(`[data-cms=\"${cssEscape(selection)}\"]`);\n if (!el) {\n setBox(null);\n return;\n }\n const r = el.getBoundingClientRect();\n const rootRect = root.getBoundingClientRect();\n setBox({\n x: r.left - rootRect.left + root.scrollLeft,\n y: r.top - rootRect.top + root.scrollTop,\n w: r.width,\n h: r.height,\n });\n }, [selection, doc]);\n\n const handleClick = (e: ReactMouseEvent<HTMLDivElement>) => {\n const target = (e.target as HTMLElement).closest(\"[data-cms]\");\n onSelect(target ? target.getAttribute(\"data-cms\") : null);\n };\n\n const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!selection) return;\n const c = doc.nodes[selection]?.constraints?.base;\n const left = c && c.left && typeof c.left === \"object\" ? c.left.value : 0;\n const top = c && c.top && typeof c.top === \"object\" ? c.top.value : 0;\n drag.current = { x: e.clientX, y: e.clientY, left, top };\n e.currentTarget.setPointerCapture(e.pointerId);\n e.stopPropagation();\n };\n\n const handlePointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d || !selection) return;\n apply({\n t: \"set_constraints\",\n id: selection,\n breakpoint: \"base\",\n patch: {\n left: { value: Math.round(d.left + (e.clientX - d.x)), unit: \"px\" },\n top: { value: Math.round(d.top + (e.clientY - d.y)), unit: \"px\" },\n },\n });\n };\n\n const handlePointerUp = () => {\n drag.current = null;\n };\n\n const surface: CSSProperties = {\n position: \"relative\",\n overflow: \"auto\",\n height: \"100%\",\n background: \"#f8fafc\",\n };\n const overlay: CSSProperties = box\n ? {\n position: \"absolute\",\n left: box.x,\n top: box.y,\n width: box.w,\n height: box.h,\n outline: \"2px solid #8b5cf6\",\n outlineOffset: -1,\n cursor: \"move\",\n touchAction: \"none\",\n }\n : { display: \"none\" };\n\n return (\n <div ref={ref} onClick={handleClick} style={surface}>\n <CmsPage doc={doc} />\n <div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={overlay}\n />\n </div>\n );\n}\n\nfunction cssEscape(value: string): string {\n return value.replace(/[\"\\\\]/g, \"\\\\$&\");\n}\n","import { Fragment, useState, type DragEvent as ReactDragEvent, type ReactElement } from \"react\";\nimport type { NodeId, PageDoc } from \"../document/types\";\nimport { childrenOf } from \"../document/reduce\";\nimport { keyBetween } from \"../document/fractional\";\n\nexport interface LayersPanelProps {\n doc: PageDoc;\n selection: string | null;\n onSelect: (id: string) => void;\n /** Reparent/reorder a node (drag-to-reorder). Omit to disable dragging. */\n onMove?: (id: NodeId, parent: NodeId | null, order: string) => void;\n}\n\nconst MIME = \"application/x-cms-node\";\n\n/** True when `maybeAncestor` is `id` itself or one of its ancestors. */\nfunction isAncestorOrSelf(doc: PageDoc, id: string, maybeAncestor: string): boolean {\n for (let cur: string | null = id; cur; cur = doc.nodes[cur]?.parent ?? null) {\n if (cur === maybeAncestor) return true;\n }\n return false;\n}\n\n/** The section/layer tree. Click a row to select; drag a row onto another to reorder. */\nexport function LayersPanel({ doc, selection, onSelect, onMove }: LayersPanelProps): ReactElement {\n const [overId, setOverId] = useState<string | null>(null);\n\n return (\n <div style={{ overflow: \"auto\", padding: 8, fontSize: 13, fontFamily: \"system-ui, sans-serif\" }}>\n {doc.sections.map((id) => (\n <LayerRow key={id} doc={doc} id={id} depth={0} selection={selection} onSelect={onSelect} onMove={onMove} overId={overId} setOverId={setOverId} />\n ))}\n </div>\n );\n}\n\ninterface LayerRowProps {\n doc: PageDoc;\n id: string;\n depth: number;\n selection: string | null;\n onSelect: (id: string) => void;\n onMove?: (id: NodeId, parent: NodeId | null, order: string) => void;\n overId: string | null;\n setOverId: (id: string | null) => void;\n}\n\nfunction LayerRow({ doc, id, depth, selection, onSelect, onMove, overId, setOverId }: LayerRowProps): ReactElement | null {\n const node = doc.nodes[id];\n if (!node) return null;\n const selected = selection === id;\n const draggable = Boolean(onMove);\n\n const drop = (e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setOverId(null);\n if (!onMove) return;\n const dragId = e.dataTransfer.getData(MIME);\n // Reject no-op + any move that would drop a node into its own subtree.\n if (!dragId || dragId === id || isAncestorOrSelf(doc, id, dragId)) return;\n // Place the dragged node immediately after this row, among this row's siblings.\n const siblings = childrenOf(doc, node.parent);\n const idx = siblings.findIndex((n) => n.id === id);\n const next = siblings[idx + 1];\n onMove(dragId, node.parent, keyBetween(node.order, next ? next.order : null));\n };\n\n return (\n <Fragment>\n <button\n type=\"button\"\n draggable={draggable}\n onClick={() => onSelect(id)}\n onDragStart={(e) => {\n e.dataTransfer.setData(MIME, id);\n e.dataTransfer.effectAllowed = \"move\";\n }}\n onDragOver={(e) => {\n if (!onMove) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n if (overId !== id) setOverId(id);\n }}\n onDragLeave={() => overId === id && setOverId(null)}\n onDrop={drop}\n style={{\n display: \"block\",\n width: \"100%\",\n textAlign: \"left\",\n border: \"none\",\n borderRadius: 6,\n cursor: draggable ? \"grab\" : \"pointer\",\n padding: \"4px 8px\",\n paddingLeft: 8 + depth * 14,\n background: selected ? \"#ede9fe\" : \"transparent\",\n color: selected ? \"#5b21b6\" : \"#334155\",\n font: \"inherit\",\n boxShadow: overId === id ? \"inset 0 -2px 0 0 #8b5cf6\" : \"none\",\n }}\n >\n <span style={{ opacity: 0.6 }}>{node.type}</span> Β· {id}\n </button>\n {childrenOf(doc, id).map((child) => (\n <LayerRow key={child.id} doc={doc} id={child.id} depth={depth + 1} selection={selection} onSelect={onSelect} onMove={onMove} overId={overId} setOverId={setOverId} />\n ))}\n </Fragment>\n );\n}\n","import type { CSSProperties, ReactElement } from \"react\";\nimport type { PageDoc, StyleProps } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\n\nexport interface InspectorProps {\n doc: PageDoc;\n selection: string | null;\n apply: (op: PageOp) => void;\n}\n\nconst label: CSSProperties = {\n display: \"block\",\n fontSize: 11,\n textTransform: \"uppercase\",\n letterSpacing: \"0.04em\",\n color: \"#94a3b8\",\n margin: \"10px 0 4px\",\n};\nconst input: CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n padding: \"6px 8px\",\n borderRadius: 6,\n border: \"1px solid #e2e8f0\",\n font: \"inherit\",\n fontSize: 13,\n};\n\n/** Contextual property editor for the selected node. Every change is one op. */\nexport function Inspector({ doc, selection, apply }: InspectorProps): ReactElement {\n const node = selection ? doc.nodes[selection] : null;\n if (!node) {\n return (\n <div style={{ padding: 16, color: \"#94a3b8\", fontFamily: \"system-ui, sans-serif\", fontSize: 13 }}>\n Select an element to edit.\n </div>\n );\n }\n\n const s = node.style.base;\n const setStyle = (patch: Partial<StyleProps>) =>\n apply({ t: \"set_style\", id: node.id, breakpoint: \"base\", patch });\n const setProp = (key: string, value: unknown) =>\n apply({ t: \"set_props\", id: node.id, patch: { [key]: value } });\n\n return (\n <div style={{ overflow: \"auto\", padding: 16, fontFamily: \"system-ui, sans-serif\", height: \"100%\", boxSizing: \"border-box\" }}>\n <div style={{ fontSize: 13, fontWeight: 600, color: \"#0f172a\" }}>{node.type}</div>\n <div style={{ fontSize: 11, color: \"#94a3b8\", marginBottom: 8 }}>{node.id}</div>\n\n {node.type === \"text\" ? (\n <>\n <label style={label}>Content</label>\n <textarea\n style={{ ...input, minHeight: 64, resize: \"vertical\" }}\n value={typeof node.props.content === \"string\" ? node.props.content : \"\"}\n onChange={(e) => setProp(\"content\", e.target.value)}\n />\n </>\n ) : null}\n\n {node.type === \"image\" ? (\n <>\n <label style={label}>Source</label>\n <input\n style={input}\n value={typeof node.props.src === \"string\" ? node.props.src : \"\"}\n onChange={(e) => setProp(\"src\", e.target.value)}\n />\n </>\n ) : null}\n\n <label style={label}>Background</label>\n <input\n style={input}\n placeholder=\"#ffffff | gradient | url(…)\"\n value={s.background ?? \"\"}\n onChange={(e) => setStyle({ background: e.target.value })}\n />\n\n <label style={label}>Text color</label>\n <input\n style={input}\n placeholder=\"#0f172a\"\n value={s.color ?? \"\"}\n onChange={(e) => setStyle({ color: e.target.value })}\n />\n\n <label style={label}>Font size (px)</label>\n <input\n type=\"number\"\n style={input}\n value={s.fontSize?.value ?? \"\"}\n onChange={(e) => setStyle({ fontSize: { value: Number(e.target.value) || 0, unit: \"px\" } })}\n />\n\n <label style={label}>Padding (px)</label>\n <input\n type=\"number\"\n style={input}\n value={s.padding?.value ?? \"\"}\n onChange={(e) => setStyle({ padding: { value: Number(e.target.value) || 0, unit: \"px\" } })}\n />\n\n <label style={label}>Opacity</label>\n <input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n max=\"1\"\n style={input}\n value={s.opacity ?? \"\"}\n onChange={(e) => setStyle({ opacity: Number(e.target.value) })}\n />\n </div>\n );\n}\n","import { useEffect, useRef, type CSSProperties, type ReactElement } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport { useEditor, type EditorApi } from \"./useEditor\";\nimport { Canvas } from \"./Canvas\";\nimport { LayersPanel } from \"./LayersPanel\";\nimport { Inspector } from \"./Inspector\";\n\nexport interface EditorProps {\n /** Initial document; edits are surfaced via {@link EditorProps.onChange}. */\n defaultValue: PageDoc;\n onChange?: (doc: PageDoc) => void;\n}\n\n/**\n * The fancy-cms editor: layers Β· canvas Β· inspector over the op-spine. Phase 1\n * cut β€” chrome is plain markup for now; it graduates to react-fancy next.\n */\nexport function Editor({ defaultValue, onChange }: EditorProps): ReactElement {\n const ed = useEditor(defaultValue);\n const first = useRef(true);\n\n useEffect(() => {\n if (first.current) {\n first.current = false;\n return;\n }\n onChange?.(ed.state.doc);\n }, [ed.state.doc, onChange]);\n\n const shell: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"220px 1fr 300px\",\n height: \"100%\",\n minHeight: 0,\n background: \"#fff\",\n color: \"#0f172a\",\n border: \"1px solid #e2e8f0\",\n borderRadius: 12,\n overflow: \"hidden\",\n };\n\n return (\n <div style={shell}>\n <div style={{ borderRight: \"1px solid #e2e8f0\", display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <Toolbar ed={ed} />\n <LayersPanel\n doc={ed.state.doc}\n selection={ed.state.selection}\n onSelect={ed.select}\n onMove={(id, parent, order) => ed.apply({ t: \"move_node\", id, parent, order })}\n />\n </div>\n <Canvas doc={ed.state.doc} selection={ed.state.selection} onSelect={ed.select} apply={ed.apply} />\n <div style={{ borderLeft: \"1px solid #e2e8f0\", minHeight: 0 }}>\n <Inspector doc={ed.state.doc} selection={ed.state.selection} apply={ed.apply} />\n </div>\n </div>\n );\n}\n\nfunction Toolbar({ ed }: { ed: EditorApi }): ReactElement {\n const btn: CSSProperties = {\n font: \"inherit\",\n fontSize: 12,\n padding: \"4px 10px\",\n borderRadius: 6,\n border: \"1px solid #e2e8f0\",\n background: \"#fff\",\n cursor: \"pointer\",\n };\n return (\n <div\n style={{\n display: \"flex\",\n gap: 6,\n padding: 8,\n borderBottom: \"1px solid #e2e8f0\",\n fontFamily: \"system-ui, sans-serif\",\n }}\n >\n <button type=\"button\" style={{ ...btn, opacity: ed.canUndo ? 1 : 0.4 }} disabled={!ed.canUndo} onClick={ed.undo}>\n Undo\n </button>\n <button type=\"button\" style={{ ...btn, opacity: ed.canRedo ? 1 : 0.4 }} disabled={!ed.canRedo} onClick={ed.redo}>\n Redo\n </button>\n </div>\n );\n}\n","import { type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport { isBinding, type Binding, type LayoutMode, type Length, type Node, type StyleProps } from \"../document/types\";\nimport type { NodeTransform } from \"./EditablePage\";\n\nexport interface NodeInspectorProps {\n node: Node;\n /** The currently-applied transform for this node (sampled from the active keyframe). */\n transform: NodeTransform;\n /** Live measured size, used as the placeholder when width/height are still \"auto\". */\n measured: { w: number; h: number };\n /** Patch the node's props (commits through the op-spine β†’ undoable). */\n onProps: (patch: Record<string, unknown>) => void;\n /** Patch the node's base style. */\n onStyle: (patch: Partial<StyleProps>) => void;\n /** Set how a container arranges its children (free / stack / grid). */\n onLayout?: (layout: LayoutMode | undefined) => void;\n /** Commit a transform (position / size / opacity / scale / rotate) into the active keyframe. */\n onTransform: (t: NodeTransform) => void;\n onRemove: () => void;\n onClose: () => void;\n}\n\nconst CONTAINER_TYPES = new Set([\"section\", \"frame\", \"stack\", \"grid\", \"shape\", \"card\", \"device\"]);\n\n/**\n * The on-page element Inspector β€” a docked properties panel shown while a node\n * is selected in EditMode. Where the floating toolbar handles quick text tweaks,\n * this is the full surface: content, element-specific props (a button's label /\n * link / variant, an image's src / alt, …), exact position + size, and the style\n * box. Every control writes through the op-spine or the active keyframe, so edits\n * are undoable and animatable.\n */\nexport function NodeInspector({\n node,\n transform,\n measured,\n onProps,\n onStyle,\n onLayout,\n onTransform,\n onRemove,\n onClose,\n}: NodeInspectorProps): ReactElement {\n const base = node.style.base ?? {};\n const setT = (patch: Partial<NodeTransform>) => onTransform({ ...transform, ...patch });\n\n // Props rendered with a bespoke control; everything else falls through to the\n // generic key/value editor so any addon's props get controls for free.\n const handled = new Set([\"content\", \"label\", \"html\"]);\n const extraKeys = Object.keys(node.props).filter(\n (k) => !handled.has(k) && ([\"string\", \"number\", \"boolean\"].includes(typeof node.props[k]) || isBinding(node.props[k])),\n );\n\n return (\n <div style={panel} onPointerDown={(e) => e.stopPropagation()}>\n <div style={headRow}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, minWidth: 0 }}>\n <strong style={{ fontSize: 12, textTransform: \"capitalize\" }}>{node.type}</strong>\n <span style={{ fontSize: 10, opacity: 0.5, fontFamily: \"ui-monospace, monospace\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\n {node.id}\n </span>\n </div>\n <span style={{ flex: 1 }} />\n <button type=\"button\" style={{ ...iconBtn, color: \"#fca5a5\" }} title=\"Delete element\" onClick={onRemove}>πŸ—‘</button>\n <button type=\"button\" style={iconBtn} title=\"Close\" onClick={onClose}>βœ•</button>\n </div>\n\n <div style={body}>\n {\"content\" in node.props || node.type === \"richtext\" ? (\n <p style={{ fontSize: 11, color: \"var(--fg-3, #94a3b8)\", margin: \"0 0 12px\", lineHeight: 1.45, paddingBottom: 12, borderBottom: \"1px solid #1e293b\" }}>\n ✎ Edit the text <strong>directly on the page</strong> β€” click in and type. This panel is for layout, style, and bindings.\n </p>\n ) : null}\n\n {\"label\" in node.props ? (\n <Group label=\"Label\">\n <input style={input} value={String(node.props.label ?? \"\")} onChange={(e) => onProps({ label: e.target.value })} />\n </Group>\n ) : null}\n\n {extraKeys.length ? (\n <Group label=\"Properties\">\n {extraKeys.map((k) => (\n <PropField key={k} name={k} value={node.props[k]} onChange={(v) => onProps({ [k]: v })} />\n ))}\n </Group>\n ) : null}\n\n <Group label=\"Position & size\">\n <Row>\n <Num label=\"X\" value={transform.x} placeholder=\"0\" onChange={(v) => setT({ x: v })} />\n <Num label=\"Y\" value={transform.y} placeholder=\"0\" onChange={(v) => setT({ y: v })} />\n </Row>\n <Row>\n <Num label=\"W\" value={transform.w} placeholder={`${Math.round(measured.w)}`} onChange={(v) => setT({ w: v })} />\n <Num label=\"H\" value={transform.h} placeholder={`${Math.round(measured.h)}`} onChange={(v) => setT({ h: v })} />\n </Row>\n <Row>\n <Num label=\"Scale\" value={transform.scale} placeholder=\"1\" step={0.05} onChange={(v) => setT({ scale: v })} />\n <Num label=\"Rotate\" value={transform.rotate} placeholder=\"0\" onChange={(v) => setT({ rotate: v })} />\n </Row>\n <Row>\n <Num label=\"Opacity\" value={transform.opacity} placeholder=\"1\" min={0} max={1} step={0.05} onChange={(v) => setT({ opacity: v })} />\n <button type=\"button\" style={{ ...miniBtn, alignSelf: \"end\" }} onClick={() => onTransform({})} title=\"Clear transform\">Reset</button>\n </Row>\n </Group>\n\n {!CONTAINER_TYPES.has(node.type) ? (\n <Group label=\"Text\">\n <Row>\n <Color label=\"Color\" value={base.color ?? \"#0f172a\"} onChange={(v) => onStyle({ color: v })} />\n <Num label=\"Size\" value={base.fontSize?.value} placeholder=\"16\" onChange={(v) => onStyle({ fontSize: v == null ? undefined : len(v) })} />\n </Row>\n <Row>\n <Sel\n label=\"Weight\"\n value={String(base.fontWeight ?? \"\")}\n options={[[\"\", \"β€”\"], [\"400\", \"Regular\"], [\"500\", \"Medium\"], [\"600\", \"Semibold\"], [\"700\", \"Bold\"], [\"800\", \"Heavy\"]]}\n onChange={(v) => onStyle({ fontWeight: v ? Number(v) : undefined })}\n />\n <Sel\n label=\"Align\"\n value={base.textAlign ?? \"\"}\n options={[[\"\", \"β€”\"], [\"left\", \"Left\"], [\"center\", \"Center\"], [\"right\", \"Right\"], [\"justify\", \"Justify\"]]}\n onChange={(v) => onStyle({ textAlign: (v || undefined) as StyleProps[\"textAlign\"] })}\n />\n </Row>\n </Group>\n ) : null}\n\n <Group label=\"Box\">\n <Row>\n <Color label=\"Background\" value={hex(base.background)} onChange={(v) => onStyle({ background: v })} />\n <Num label=\"Radius\" value={base.radius?.value} placeholder=\"0\" onChange={(v) => onStyle({ radius: v == null ? undefined : len(v) })} />\n </Row>\n <Row>\n <Num label=\"Padding\" value={base.padding?.value} placeholder=\"0\" onChange={(v) => onStyle({ padding: v == null ? undefined : len(v) })} />\n <Num label=\"Margin\" value={base.margin?.value} placeholder=\"0\" onChange={(v) => onStyle({ margin: v == null ? undefined : len(v) })} />\n </Row>\n <Row>\n <Txt label=\"Border\" value={base.border ?? \"\"} placeholder=\"1px solid #e2e8f0\" onChange={(v) => onStyle({ border: v || undefined })} />\n </Row>\n </Group>\n\n {CONTAINER_TYPES.has(node.type) ? (\n <Group label=\"Layout\">\n <Row>\n <Sel\n label=\"Mode\"\n value={node.layout ?? \"free\"}\n options={[[\"free\", \"Free\"], [\"stack\", \"Stack\"], [\"grid\", \"Grid\"]]}\n onChange={(v) => onLayout?.(v as LayoutMode)}\n />\n <Num label=\"Gap\" value={base.gap?.value} placeholder=\"0\" onChange={(v) => onStyle({ gap: v == null ? undefined : len(v) })} />\n </Row>\n <Row>\n <Sel\n label=\"Align\"\n value={base.align ?? \"\"}\n options={[[\"\", \"β€”\"], [\"start\", \"Start\"], [\"center\", \"Center\"], [\"end\", \"End\"], [\"stretch\", \"Stretch\"]]}\n onChange={(v) => onStyle({ align: (v || undefined) as StyleProps[\"align\"] })}\n />\n <Sel\n label=\"Justify\"\n value={base.justify ?? \"\"}\n options={[[\"\", \"β€”\"], [\"start\", \"Start\"], [\"center\", \"Center\"], [\"end\", \"End\"], [\"between\", \"Between\"], [\"around\", \"Around\"]]}\n onChange={(v) => onStyle({ justify: (v || undefined) as StyleProps[\"justify\"] })}\n />\n </Row>\n </Group>\n ) : null}\n </div>\n </div>\n );\n}\n\n// ── Small controls ───────────────────────────────────────────────────────────\n\nfunction Group({ label, children }: { label: string; children: ReactNode }): ReactElement {\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8, paddingBottom: 12, marginBottom: 12, borderBottom: \"1px solid #1e293b\" }}>\n <span style={{ fontSize: 10, letterSpacing: \"0.06em\", textTransform: \"uppercase\", opacity: 0.5 }}>{label}</span>\n {children}\n </div>\n );\n}\n\nfunction Row({ children }: { children: ReactNode }): ReactElement {\n return <div style={{ display: \"flex\", gap: 8 }}>{children}</div>;\n}\n\nfunction PropField({ name, value, onChange }: { name: string; value: unknown; onChange: (v: unknown) => void }): ReactElement {\n const bound = isBinding(value);\n // A πŸ”— toggle flips any prop between a literal value and a data binding.\n const link = (\n <button\n type=\"button\"\n title={bound ? \"Unbind (use a literal value)\" : \"Bind to data (e.g. item.name)\"}\n onClick={() => onChange(bound ? \"\" : ({ $bind: \"\" } satisfies Binding))}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", padding: 0, fontSize: 11, color: bound ? \"#a78bfa\" : \"#64748b\" }}\n >\n πŸ”—\n </button>\n );\n\n if (bound) {\n return (\n <label style={field}>\n <span style={{ ...fieldLabel, display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n {name} {link}\n </span>\n <input style={{ ...input, borderColor: \"#7c3aed\" }} placeholder=\"data path Β· e.g. item.name\" value={(value as Binding).$bind} onChange={(e) => onChange({ $bind: e.target.value } satisfies Binding)} />\n </label>\n );\n }\n if (typeof value === \"boolean\") {\n return (\n <label style={{ display: \"flex\", alignItems: \"center\", gap: 8, fontSize: 12 }}>\n <input type=\"checkbox\" checked={value} onChange={(e) => onChange(e.target.checked)} />\n <span style={{ textTransform: \"capitalize\", flex: 1 }}>{name}</span>\n {link}\n </label>\n );\n }\n if (name === \"variant\") {\n return <Sel label={name} value={String(value ?? \"\")} options={[[\"primary\", \"Primary\"], [\"ghost\", \"Ghost\"], [\"outline\", \"Outline\"]]} onChange={onChange} />;\n }\n const isNum = typeof value === \"number\";\n return (\n <label style={field}>\n <span style={{ ...fieldLabel, display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n {name} {link}\n </span>\n <input\n style={input}\n type={isNum ? \"number\" : \"text\"}\n value={String(value ?? \"\")}\n onChange={(e) => onChange(isNum ? Number(e.target.value) : e.target.value)}\n />\n </label>\n );\n}\n\nfunction Num({ label, value, placeholder, onChange, step, min, max }: { label: string; value?: number; placeholder?: string; onChange: (v: number | undefined) => void; step?: number; min?: number; max?: number }): ReactElement {\n return (\n <label style={field}>\n <span style={fieldLabel}>{label}</span>\n <input\n style={input}\n type=\"number\"\n step={step}\n min={min}\n max={max}\n value={value ?? \"\"}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value === \"\" ? undefined : Number(e.target.value))}\n />\n </label>\n );\n}\n\nfunction Txt({ label, value, placeholder, onChange }: { label: string; value: string; placeholder?: string; onChange: (v: string) => void }): ReactElement {\n return (\n <label style={field}>\n <span style={fieldLabel}>{label}</span>\n <input style={input} type=\"text\" value={value} placeholder={placeholder} onChange={(e) => onChange(e.target.value)} />\n </label>\n );\n}\n\nfunction Color({ label, value, onChange }: { label: string; value: string; onChange: (v: string) => void }): ReactElement {\n return (\n <label style={field}>\n <span style={fieldLabel}>{label}</span>\n <input style={{ ...input, padding: 2, height: 30 }} type=\"color\" value={value} onChange={(e) => onChange(e.target.value)} />\n </label>\n );\n}\n\nfunction Sel({ label, value, options, onChange }: { label: string; value: string; options: Array<[string, string]>; onChange: (v: string) => void }): ReactElement {\n return (\n <label style={field}>\n <span style={fieldLabel}>{label}</span>\n <select style={input} value={value} onChange={(e) => onChange(e.target.value)}>\n {options.map(([v, l]) => (\n <option key={v} value={v}>{l}</option>\n ))}\n </select>\n </label>\n );\n}\n\nconst len = (value: number): Length => ({ value, unit: \"px\" });\nconst hex = (v: string | undefined): string => (v && /^#[0-9a-fA-F]{6}$/.test(v) ? v : \"#ffffff\");\n\n// ── Styles ───────────────────────────────────────────────────────────────────\n\nconst Z = 2147483000;\nconst panel: CSSProperties = {\n position: \"fixed\",\n top: 60,\n right: 12,\n bottom: 96,\n width: 264,\n display: \"flex\",\n flexDirection: \"column\",\n background: \"#0b1220\",\n color: \"#e2e8f0\",\n border: \"1px solid #1e293b\",\n borderRadius: 12,\n boxShadow: \"0 18px 48px -16px rgba(0,0,0,0.6)\",\n zIndex: Z + 2,\n fontFamily: \"system-ui, sans-serif\",\n overflow: \"hidden\",\n};\nconst headRow: CSSProperties = { display: \"flex\", alignItems: \"center\", gap: 8, padding: \"10px 12px\", borderBottom: \"1px solid #1e293b\" };\nconst body: CSSProperties = { padding: 12, overflowY: \"auto\" };\nconst field: CSSProperties = { display: \"flex\", flexDirection: \"column\", gap: 4, flex: 1, minWidth: 0 };\nconst fieldLabel: CSSProperties = { fontSize: 10, opacity: 0.6 };\nconst input: CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n background: \"#0f172a\",\n color: \"#e2e8f0\",\n border: \"1px solid #334155\",\n borderRadius: 6,\n padding: \"5px 7px\",\n font: \"inherit\",\n fontSize: 12,\n};\nconst iconBtn: CSSProperties = { background: \"transparent\", border: \"none\", color: \"#e2e8f0\", cursor: \"pointer\", fontSize: 13, padding: 4, borderRadius: 6 };\nconst miniBtn: CSSProperties = { font: \"inherit\", fontSize: 11, color: \"#e2e8f0\", background: \"#334155\", border: \"1px solid #475569\", borderRadius: 6, padding: \"5px 10px\", cursor: \"pointer\" };\n","/**\n * Higher-level editor commands expressed as pure {@link PageOp} sequences over\n * the spine β€” duplicate, reorder, wrap, clipboard paste. Each returns ops the\n * caller threads through `ed.apply`, so every command stays undoable and total.\n */\nimport type { Node, NodeId, PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { childrenOf } from \"../document/reduce\";\nimport { keyBetween } from \"../document/fractional\";\n\nexport type NodeMap = Record<NodeId, Node>;\n\n/** Children of `parent` within an arbitrary node map (snapshot-friendly), ordered. */\nfunction childrenOfMap(nodes: NodeMap, parent: NodeId | null): Node[] {\n return Object.values(nodes)\n .filter((n) => n.parent === parent)\n .sort((a, b) => (a.order < b.order ? -1 : a.order > b.order ? 1 : 0));\n}\n\n/** Parent-first BFS over a node map starting at `root`. */\nfunction subtreeBfs(nodes: NodeMap, root: NodeId): NodeId[] {\n const out: NodeId[] = [];\n const queue: NodeId[] = [root];\n while (queue.length) {\n const cur = queue.shift()!;\n out.push(cur);\n for (const child of childrenOfMap(nodes, cur)) queue.push(child.id);\n }\n return out;\n}\n\n/**\n * Clone a subtree from `nodes` under `newParent`/`newOrder`, remapping every id.\n * Returns parent-first insert ops + the new root id. Used by both Duplicate\n * (source = the live doc) and Paste (source = a detached clipboard snapshot).\n */\nexport function cloneFrom(\n nodes: NodeMap,\n rootId: NodeId,\n newParent: NodeId | null,\n newOrder: string,\n seqBase: number,\n): { ops: PageOp[]; newRootId: NodeId | null } {\n if (!nodes[rootId]) return { ops: [], newRootId: null };\n const order = subtreeBfs(nodes, rootId);\n const idMap: Record<NodeId, NodeId> = {};\n order.forEach((old, i) => (idMap[old] = `${old}_c${seqBase}_${i}`));\n const ops: PageOp[] = order.map((old) => {\n const src = nodes[old]!;\n const cloned: Node = JSON.parse(JSON.stringify(src));\n cloned.id = idMap[old]!;\n cloned.parent = old === rootId ? newParent : idMap[src.parent as NodeId]!;\n if (old === rootId) cloned.order = newOrder;\n return { t: \"insert_node\", node: cloned };\n });\n return { ops, newRootId: idMap[rootId]! };\n}\n\n/** Duplicate a node (and its subtree) immediately after itself among its siblings. */\nexport function duplicateOps(doc: PageDoc, id: NodeId): { ops: PageOp[]; newRootId: NodeId | null } {\n const node = doc.nodes[id];\n if (!node) return { ops: [], newRootId: null };\n const sibs = childrenOf(doc, node.parent);\n const idx = sibs.findIndex((s) => s.id === id);\n const newOrder = keyBetween(node.order, sibs[idx + 1]?.order ?? null);\n const { ops, newRootId } = cloneFrom(doc.nodes, id, node.parent, newOrder, doc.seq);\n if (node.parent === null && newRootId) {\n const base = doc.sections;\n const at = base.indexOf(id);\n ops.push({ t: \"reorder_sections\", order: [...base.slice(0, at + 1), newRootId, ...base.slice(at + 1)] });\n }\n return { ops, newRootId };\n}\n\n/** Paste a clipboard snapshot as a child of `target` (if a container) or its sibling. */\nexport function pasteOps(\n doc: PageDoc,\n clip: { rootId: NodeId; nodes: NodeMap },\n target: NodeId | null,\n containerTypes: Set<string>,\n): { ops: PageOp[]; newRootId: NodeId | null } {\n const sel = target ? doc.nodes[target] : null;\n const parent = sel ? (containerTypes.has(sel.type) ? sel.id : sel.parent) : (doc.sections[doc.sections.length - 1] ?? null);\n const sibs = childrenOf(doc, parent);\n const newOrder = keyBetween(sibs.length ? sibs[sibs.length - 1]!.order : null, null);\n const { ops, newRootId } = cloneFrom(clip.nodes, clip.rootId, parent, newOrder, doc.seq);\n if (parent === null && newRootId) {\n // a top-level paste lands at the end of the section order, which is fine.\n }\n return { ops, newRootId };\n}\n\nexport type ReorderDir = \"up\" | \"down\" | \"front\" | \"back\";\n\n/** Reorder a node among its siblings (or sections, for a top-level node). */\nexport function reorderOps(doc: PageDoc, id: NodeId, dir: ReorderDir): PageOp[] {\n const node = doc.nodes[id];\n if (!node) return [];\n\n if (node.parent === null) {\n const s = [...doc.sections];\n const i = s.indexOf(id);\n if (i < 0) return [];\n s.splice(i, 1);\n if (dir === \"front\") s.unshift(id);\n else if (dir === \"back\") s.push(id);\n else s.splice(Math.max(0, Math.min(s.length, dir === \"up\" ? i - 1 : i + 1)), 0, id);\n return [{ t: \"reorder_sections\", order: s }];\n }\n\n const sibs = childrenOf(doc, node.parent);\n const idx = sibs.findIndex((sb) => sb.id === id);\n if (idx < 0) return [];\n const last = sibs.length - 1;\n let newOrder: string;\n if (dir === \"up\") {\n if (idx <= 0) return [];\n newOrder = keyBetween(sibs[idx - 2]?.order ?? null, sibs[idx - 1]!.order);\n } else if (dir === \"down\") {\n if (idx >= last) return [];\n newOrder = keyBetween(sibs[idx + 1]!.order, sibs[idx + 2]?.order ?? null);\n } else if (dir === \"front\") {\n if (idx >= last) return [];\n newOrder = keyBetween(sibs[last]!.order, null);\n } else {\n if (idx <= 0) return [];\n newOrder = keyBetween(null, sibs[0]!.order);\n }\n return [{ t: \"move_node\", id, parent: node.parent, order: newOrder }];\n}\n\n/** Wrap a (non-top-level) node in a new padded Box (frame) that takes its slot. */\nexport function wrapInBoxOps(doc: PageDoc, id: NodeId): { ops: PageOp[]; newRootId: NodeId | null } {\n const node = doc.nodes[id];\n if (!node || node.parent === null) return { ops: [], newRootId: null };\n const frameId = `box_${doc.seq}`;\n return {\n ops: [\n { t: \"insert_node\", node: { id: frameId, type: \"frame\", parent: node.parent, order: node.order, props: {}, style: { base: { padding: { value: 16, unit: \"px\" } } } } },\n { t: \"move_node\", id, parent: frameId, order: \"a\" },\n ],\n newRootId: frameId,\n };\n}\n\n/** Snapshot a node's subtree into a detached clipboard payload. */\nexport function snapshotSubtree(doc: PageDoc, id: NodeId): { rootId: NodeId; nodes: NodeMap } | null {\n if (!doc.nodes[id]) return null;\n const ids = subtreeBfs(doc.nodes, id);\n const nodes: NodeMap = {};\n for (const nid of ids) nodes[nid] = JSON.parse(JSON.stringify(doc.nodes[nid]));\n return { rootId: id, nodes };\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type DragEvent as ReactDragEvent,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { ContextMenu } from \"@particle-academy/react-fancy\";\nimport type { Json, LayoutMode, NodeId, PageDoc, StyleProps } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { childrenOf } from \"../document/reduce\";\nimport { keyBetween } from \"../document/fractional\";\nimport { CmsPage } from \"../react/CmsPage\";\nimport { defaultRegistry, type DataContext, type ElementRegistry } from \"../react/registry\";\nimport { NodeInspector } from \"./NodeInspector\";\nimport { duplicateOps, pasteOps, reorderOps, snapshotSubtree, wrapInBoxOps, type NodeMap, type ReorderDir } from \"./editorOps\";\nimport { useEditor } from \"./useEditor\";\n\n/** Animatable per-node transform (mirrors fancy-motion's NodeState, kept local to avoid a hard dep). */\nexport interface NodeTransform {\n x?: number;\n y?: number;\n scale?: number;\n opacity?: number;\n rotate?: number;\n /** Explicit size in px (a true resize, distinct from `scale`). Absent = auto. */\n w?: number;\n h?: number;\n}\n\nexport interface EditablePageProps {\n doc: PageDoc;\n registry?: ElementRegistry;\n /** Data context for `{ $bind }` props + repeaters (server props, etc.). */\n data?: DataContext;\n /** Slot for the fancy-motion timeline dock (rendered at the bottom in EditMode). */\n timelineDock?: ReactNode;\n /** Per-node transforms applied to the page (e.g. the sampled keyframe snapshot). */\n transforms?: Record<string, NodeTransform>;\n /** Fired when the user moves/resizes a node β€” the host writes it into the current keyframe. */\n onNodeTransform?: (id: string, transform: NodeTransform) => void;\n /** Notifies the host of the current selection (e.g. to sync the timeline). */\n onSelect?: (id: string | null) => void;\n /** Scroll length in viewports β€” the page becomes a tall scroll canvas (extend via the timeline). */\n frames?: number;\n /** Scroll progress 0..1 (scroll = the timeline playhead). The host maps it to transforms. */\n onProgress?: (progress: number) => void;\n /**\n * Pin the page into a scroll canvas (the `frames`Γ—viewport spacer + sticky pin\n * that turns scroll into the playhead). Default `true`. Set **false** for a\n * full multi-section page that should scroll naturally β€” animation is then\n * driven by the dock scrub + Play preview instead of raw scroll.\n */\n pinned?: boolean;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nconst Z = 2147483000;\n/** Snap distance (px) for drag alignment to other elements' edges/centers. */\nconst SNAP = 6;\n\n/**\n * Inline EditMode over a live, seeded CMS page. Hold **Ctrl+Shift** to reveal\n * the Edit toggle. Editing is on the page: text is edited in place, a floating\n * toolbar styles it, and the selection can be **dragged to move** / **resized**\n * β€” committed as transforms the host captures into a timeline keyframe.\n */\nexport function EditablePage({\n doc,\n registry = defaultRegistry,\n data,\n timelineDock,\n transforms,\n onNodeTransform,\n onSelect,\n frames = 1,\n onProgress,\n pinned = true,\n}: EditablePageProps): ReactElement {\n const ed = useEditor(doc);\n const [editing, setEditing] = useState(false);\n const [revealed, setRevealed] = useState(false);\n const pageRef = useRef<HTMLDivElement>(null);\n const spacerRef = useRef<HTMLDivElement>(null);\n const [box, setBox] = useState<Box | null>(null);\n const { selection } = ed.state;\n const selNode = selection ? ed.state.doc.nodes[selection] : null;\n\n useEffect(() => onSelect?.(selection), [selection, onSelect]);\n\n // Ctrl+Shift reveal gesture.\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => setRevealed(e.ctrlKey && e.shiftKey);\n const onBlur = () => setRevealed(false);\n window.addEventListener(\"keydown\", onKey);\n window.addEventListener(\"keyup\", onKey);\n window.addEventListener(\"blur\", onBlur);\n return () => {\n window.removeEventListener(\"keydown\", onKey);\n window.removeEventListener(\"keyup\", onKey);\n window.removeEventListener(\"blur\", onBlur);\n };\n }, []);\n\n // Apply host-provided transforms to the page elements.\n useEffect(() => {\n const root = pageRef.current;\n if (!root) return;\n root.querySelectorAll<HTMLElement>(\"[data-cms]\").forEach((el) => {\n const id = el.dataset.cms;\n const t = id ? transforms?.[id] : undefined;\n applyTransform(el, t);\n });\n }, [transforms, ed.state.doc]);\n\n // Scroll = the timeline playhead. Report progress (0..1) across the scroll\n // canvas so the host can drive the morph from real scrolling (not the dock).\n // Measure synchronously in the scroll handler β€” NOT via requestAnimationFrame.\n // rAF is throttled or fully suspended in hidden/background tabs, which silently\n // freezes the playhead at 0; a direct getBoundingClientRect on one element per\n // scroll event is cheap and always fires.\n useEffect(() => {\n const spacer = spacerRef.current;\n if (!spacer || !onProgress) return;\n const compute = () => {\n const len = spacer.offsetHeight - window.innerHeight;\n const top = spacer.getBoundingClientRect().top;\n onProgress(len > 0 ? Math.min(1, Math.max(0, -top / len)) : 0);\n };\n compute();\n window.addEventListener(\"scroll\", compute, { passive: true });\n window.addEventListener(\"resize\", compute);\n return () => {\n window.removeEventListener(\"scroll\", compute);\n window.removeEventListener(\"resize\", compute);\n };\n }, [onProgress, frames]);\n\n const measureBox = useCallback(() => {\n if (!editing || !selection || !pageRef.current) return setBox(null);\n const el = pageRef.current.querySelector(`[data-cms=\"${cssEscape(selection)}\"]`);\n if (!el) return setBox(null);\n const r = el.getBoundingClientRect();\n setBox({ x: r.left, y: r.top, w: r.width, h: r.height });\n }, [editing, selection]);\n\n // Re-measure on selection / doc / scroll / resize β€” deliberately NOT on every\n // `transforms` frame. A scrub or Play sweep changes transforms ~30Γ—/s; calling\n // getBoundingClientRect each time forces a synchronous reflow of the whole page\n // and saturates the main thread. Live drags re-measure through `onLive` instead.\n useLayoutEffect(() => {\n measureBox();\n window.addEventListener(\"scroll\", measureBox, { passive: true });\n window.addEventListener(\"resize\", measureBox);\n return () => {\n window.removeEventListener(\"scroll\", measureBox);\n window.removeEventListener(\"resize\", measureBox);\n };\n }, [measureBox, ed.state.doc]);\n\n // Inline, on-page contentEditable for text content β€” text/heading (plain) and\n // richtext (HTML). All content is edited directly on the page, never in a\n // sidebar field. richtext edits the inner HTML container so formatting survives.\n useEffect(() => {\n const t = selNode?.type;\n const editable = t === \"text\" || t === \"heading\" || t === \"richtext\";\n if (!editing || !selection || !pageRef.current || !editable) return;\n const wrapper = pageRef.current.querySelector<HTMLElement>(`[data-cms=\"${cssEscape(selection)}\"]`);\n if (!wrapper) return;\n const isRich = t === \"richtext\";\n const el = (isRich ? (wrapper.firstElementChild as HTMLElement | null) : wrapper) ?? wrapper;\n el.setAttribute(\"contenteditable\", \"true\");\n el.style.outline = \"none\";\n el.focus();\n const commit = () => ed.apply({ t: \"set_props\", id: selection, patch: isRich ? { html: el.innerHTML } : { content: el.innerText } });\n el.addEventListener(\"blur\", commit);\n return () => {\n el.removeEventListener(\"blur\", commit);\n el.removeAttribute(\"contenteditable\");\n };\n }, [editing, selection, selNode?.type, ed]);\n\n const onClickCapture = (e: ReactMouseEvent<HTMLDivElement>) => {\n if (!editing) return;\n const el = (e.target as HTMLElement).closest(\"[data-cms]\");\n if (el) {\n if (el.getAttribute(\"contenteditable\") === \"true\") return;\n e.preventDefault();\n e.stopPropagation();\n ed.select(el.getAttribute(\"data-cms\"));\n }\n };\n\n const addNode = useCallback(\n (kind: AddKind) => {\n // Drop into the selected container; else the selected node's parent; else\n // the last section (or top level when the page is still empty).\n const doc = ed.state.doc;\n const parent = selNode\n ? CONTAINER_TYPES.has(selNode.type)\n ? selNode.id\n : selNode.parent\n : (doc.sections[doc.sections.length - 1] ?? null);\n const siblings = childrenOf(doc, parent);\n const order = keyBetween(siblings.length ? siblings[siblings.length - 1]!.order : null, null);\n const id = `n${doc.seq + 1}-${Math.floor(performance.now())}`;\n const def = ADD_DEFAULTS[kind];\n ed.apply({ t: \"insert_node\", node: { id, type: def.type, parent, order, layout: def.layout, props: { ...def.props }, style: { base: { ...def.style } } } });\n ed.select(id);\n },\n [ed, selNode],\n );\n\n // Insert an Element at an explicit target (the node under a drop point) rather\n // than the current selection β€” used by the drag-and-drop palette.\n const addNodeAt = useCallback(\n (kind: AddKind, targetId: string | null) => {\n const doc = ed.state.doc;\n const target = targetId ? doc.nodes[targetId] : null;\n const parent = target\n ? CONTAINER_TYPES.has(target.type)\n ? target.id\n : target.parent\n : (doc.sections[doc.sections.length - 1] ?? null);\n const siblings = childrenOf(doc, parent);\n const order = keyBetween(siblings.length ? siblings[siblings.length - 1]!.order : null, null);\n const id = `n${doc.seq + 1}-${Math.floor(performance.now())}`;\n const def = ADD_DEFAULTS[kind];\n ed.apply({ t: \"insert_node\", node: { id, type: def.type, parent, order, layout: def.layout, props: { ...def.props }, style: { base: { ...def.style } } } });\n ed.select(id);\n },\n [ed],\n );\n\n // Right-edge Element palette: reveals when the pointer nears the right screen\n // edge, hides while an Element is being dragged onto the page.\n const [paletteOpen, setPaletteOpen] = useState(false);\n const [draggingEl, setDraggingEl] = useState(false);\n useEffect(() => {\n if (!editing) {\n setPaletteOpen(false);\n return;\n }\n const onMove = (e: MouseEvent) => {\n if (draggingEl) return;\n if (e.clientX >= window.innerWidth - 26) setPaletteOpen(true);\n else if (e.clientX < window.innerWidth - 236) setPaletteOpen(false);\n };\n window.addEventListener(\"mousemove\", onMove);\n return () => window.removeEventListener(\"mousemove\", onMove);\n }, [editing, draggingEl]);\n\n // Drop target + indicator. While dragging, we compute the precise insertion\n // point (before/after a leaf, or inside a container) under the cursor so the\n // user can drop *anywhere* and see exactly where it lands.\n type DropHint = { id: string | null; edge: \"before\" | \"after\" | \"inside\"; rect: { x: number; y: number; w: number; h: number } | null };\n const [dropHint, setDropHint] = useState<DropHint | null>(null);\n\n const computeDropTarget = (clientX: number, clientY: number): DropHint => {\n const el = document.elementFromPoint(clientX, clientY)?.closest(\"[data-cms]\") as HTMLElement | null;\n if (!el) return { id: null, edge: \"inside\", rect: null };\n const id = el.getAttribute(\"data-cms\")!;\n const node = ed.state.doc.nodes[id];\n const r = el.getBoundingClientRect();\n const rect = { x: r.left, y: r.top, w: r.width, h: r.height };\n // Over a container's own area (not a child) β†’ drop inside it.\n if (node && CONTAINER_TYPES.has(node.type)) return { id, edge: \"inside\", rect };\n return { id, edge: clientY < r.top + r.height / 2 ? \"before\" : \"after\", rect };\n };\n\n const onPageDragOver = (e: ReactDragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = \"copy\";\n setDropHint(computeDropTarget(e.clientX, e.clientY));\n };\n\n // Insert relative to a drop hint β€” before/after a sibling, or appended inside\n // a container (or the last section when dropped on empty page space).\n const insertRelative = (kind: AddKind, hint: DropHint) => {\n const doc = ed.state.doc;\n let parent: string | null;\n let order: string;\n if (!hint.id || hint.edge === \"inside\") {\n parent = hint.id ?? (doc.sections[doc.sections.length - 1] ?? null);\n const sib = childrenOf(doc, parent);\n order = keyBetween(sib.length ? sib[sib.length - 1]!.order : null, null);\n } else {\n const target = doc.nodes[hint.id]!;\n parent = target.parent;\n const sib = childrenOf(doc, parent);\n const idx = sib.findIndex((n) => n.id === hint.id);\n order =\n hint.edge === \"before\"\n ? keyBetween(idx > 0 ? sib[idx - 1]!.order : null, target.order)\n : keyBetween(target.order, idx < sib.length - 1 ? sib[idx + 1]!.order : null);\n }\n const id = `n${doc.seq + 1}-${Math.floor(performance.now())}`;\n const def = ADD_DEFAULTS[kind];\n ed.apply({ t: \"insert_node\", node: { id, type: def.type, parent, order, layout: def.layout, props: { ...def.props }, style: { base: { ...def.style } } } });\n ed.select(id);\n };\n\n const onPageDrop = (e: ReactDragEvent<HTMLDivElement>) => {\n const kind = e.dataTransfer.getData(\"application/x-cms-element\") as AddKind;\n if (!kind) return;\n e.preventDefault();\n insertRelative(kind, computeDropTarget(e.clientX, e.clientY));\n setDropHint(null);\n setDraggingEl(false);\n };\n\n const setStyle = (patch: Partial<StyleProps>) =>\n selection && ed.apply({ t: \"set_style\", id: selection, breakpoint: \"base\", patch });\n const setProps = (patch: Record<string, unknown>) =>\n selection && ed.apply({ t: \"set_props\", id: selection, patch });\n const setLayout = (layout: LayoutMode | undefined) =>\n selection && ed.apply({ t: \"set_layout\", id: selection, layout });\n const removeSelected = () => {\n if (!selection) return;\n ed.apply({ t: \"remove_node\", id: selection });\n ed.select(null);\n };\n\n // ── Context-menu / shortcut commands (all expressed as op sequences) ───────\n const clip = useRef<{ rootId: NodeId; nodes: NodeMap } | null>(null);\n const runOps = (result: { ops: PageOp[]; newRootId: NodeId | null }) => {\n result.ops.forEach((op) => ed.apply(op));\n if (result.newRootId) ed.select(result.newRootId);\n };\n const duplicate = (id: string | null) => id && runOps(duplicateOps(ed.state.doc, id));\n const reorder = (id: string | null, dir: ReorderDir) => id && reorderOps(ed.state.doc, id, dir).forEach((op) => ed.apply(op));\n const wrapInBox = (id: string | null) => id && runOps(wrapInBoxOps(ed.state.doc, id));\n const copy = (id: string | null) => {\n if (id) clip.current = snapshotSubtree(ed.state.doc, id);\n };\n const paste = (target: string | null) => {\n if (clip.current) runOps(pasteOps(ed.state.doc, clip.current, target, CONTAINER_TYPES));\n };\n const startEditText = (id: string | null) => {\n if (!id) return;\n ed.select(id);\n requestAnimationFrame(() => pageRef.current?.querySelector<HTMLElement>(`[data-cms=\"${cssEscape(id)}\"]`)?.focus());\n };\n\n // Latest transforms + commit fn for keyboard nudge β€” read via ref so the\n // keydown handler never sees a stale snapshot (transforms change ~30Γ—/s).\n const nudgeRef = useRef({ transforms, onNodeTransform });\n nudgeRef.current = { transforms, onNodeTransform };\n\n // Keyboard shortcuts in EditMode (ignored while typing in a field/contentEditable).\n useEffect(() => {\n if (!editing) return;\n const onKey = (e: KeyboardEvent) => {\n const t = e.target as HTMLElement | null;\n const typing = t && (t.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName));\n if (e.key === \"Escape\") return void ed.select(null);\n if (typing) return;\n if ((e.key === \"Delete\" || e.key === \"Backspace\") && selection) {\n e.preventDefault();\n removeSelected();\n } else if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"d\" && selection) {\n e.preventDefault();\n duplicate(selection);\n } else if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"c\" && selection) {\n copy(selection);\n } else if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === \"v\") {\n e.preventDefault();\n paste(selection);\n } else if (selection && /^Arrow(Left|Right|Up|Down)$/.test(e.key)) {\n // Nudge: arrows move Β±1px, Shift+arrows Β±10px β€” committed as a transform.\n const { transforms: tf, onNodeTransform: commit } = nudgeRef.current;\n if (!commit) return;\n e.preventDefault();\n const step = e.shiftKey ? 10 : 1;\n const dx = e.key === \"ArrowLeft\" ? -step : e.key === \"ArrowRight\" ? step : 0;\n const dy = e.key === \"ArrowUp\" ? -step : e.key === \"ArrowDown\" ? step : 0;\n const cur = tf?.[selection] ?? {};\n commit(selection, { ...cur, x: (cur.x ?? 0) + dx, y: (cur.y ?? 0) + dy });\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [editing, selection]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const onContextMenuSelect = (e: ReactMouseEvent<HTMLDivElement>) => {\n if (!editing) return;\n const el = (e.target as HTMLElement).closest(\"[data-cms]\");\n if (el) ed.select(el.getAttribute(\"data-cms\"));\n else ed.select(null);\n };\n\n const page = (\n <div\n ref={pageRef}\n onClickCapture={onClickCapture}\n onContextMenu={onContextMenuSelect}\n onDragOver={editing ? onPageDragOver : undefined}\n onDragLeave={editing ? () => setDropHint(null) : undefined}\n onDrop={editing ? onPageDrop : undefined}\n >\n <CmsPage doc={ed.state.doc} registry={registry} data={data} />\n </div>\n );\n const pageShell = pinned ? (\n <div ref={spacerRef} style={{ height: `${Math.max(1, frames) * 100}vh` }}>\n <div style={{ position: \"sticky\", top: 0, height: \"100vh\", overflow: \"hidden\" }}>{page}</div>\n </div>\n ) : frames > 1 ? (\n // Normal flow, but \"expanded\" β€” extra scroll length below the content so a\n // page can be made longer than its content (the οΌ‹ Frame control).\n <div style={{ minHeight: `${frames * 100}vh` }}>{page}</div>\n ) : (\n page\n );\n\n return (\n <div style={{ position: \"relative\" }}>\n {editing ? (\n <ContextMenu>\n <ContextMenu.Trigger>{pageShell}</ContextMenu.Trigger>\n <ContextMenu.Content className=\"!z-[2147483646]\">\n <EditMenuItems\n node={selNode ?? null}\n hasClipboard={Boolean(clip.current)}\n isContainer={selNode ? CONTAINER_TYPES.has(selNode.type) : false}\n onEditText={() => startEditText(selection)}\n onAdd={addNode}\n onDuplicate={() => duplicate(selection)}\n onCopy={() => copy(selection)}\n onPaste={() => paste(selection)}\n onWrap={() => wrapInBox(selection)}\n onReorder={(d) => reorder(selection, d)}\n onDelete={removeSelected}\n />\n </ContextMenu.Content>\n </ContextMenu>\n ) : (\n pageShell\n )}\n\n {editing && box && selection ? (\n <SelectionOverlay\n box={box}\n base={transforms?.[selection] ?? {}}\n movable={Boolean(onNodeTransform)}\n getEl={() => pageRef.current?.querySelector<HTMLElement>(`[data-cms=\"${cssEscape(selection)}\"]`) ?? null}\n onTransform={(t) => onNodeTransform?.(selection, t)}\n onLive={measureBox}\n />\n ) : null}\n\n {editing && box && selNode ? (\n <FloatingToolbar box={box} isText={selNode.type === \"text\" || selNode.type === \"heading\"} base={selNode.style.base} setStyle={setStyle} />\n ) : null}\n\n {editing && selNode && box ? (\n <NodeInspector\n node={selNode}\n transform={(selection ? transforms?.[selection] : undefined) ?? {}}\n measured={{ w: box.w, h: box.h }}\n onProps={setProps}\n onStyle={setStyle}\n onLayout={setLayout}\n onTransform={(t) => selection && onNodeTransform?.(selection, t)}\n onRemove={removeSelected}\n onClose={() => ed.select(null)}\n />\n ) : null}\n\n {revealed || editing ? (\n <EditBar\n editing={editing}\n onToggle={() => {\n setEditing((v) => !v);\n ed.select(null);\n }}\n canUndo={ed.canUndo}\n canRedo={ed.canRedo}\n onUndo={ed.undo}\n onRedo={ed.redo}\n onAdd={addNode}\n />\n ) : null}\n\n {editing && dropHint?.rect ? <DropIndicator hint={dropHint} /> : null}\n\n {editing ? <ElementPalette open={paletteOpen} onDragChange={setDraggingEl} /> : null}\n\n {editing && timelineDock ? <div style={{ position: \"fixed\", left: 0, right: 0, bottom: 0, zIndex: Z }}>{timelineDock}</div> : null}\n </div>\n );\n}\n\n/** The live drop indicator: a line before/after a sibling, or an outline inside a container. */\nfunction DropIndicator({\n hint,\n}: {\n hint: { edge: \"before\" | \"after\" | \"inside\"; rect: { x: number; y: number; w: number; h: number } | null };\n}): ReactElement | null {\n const r = hint.rect;\n if (!r) return null;\n const color = \"#ec4899\";\n if (hint.edge === \"inside\") {\n return <div style={{ position: \"fixed\", left: r.x, top: r.y, width: r.w, height: r.h, outline: `2px dashed ${color}`, outlineOffset: -2, borderRadius: 6, pointerEvents: \"none\", zIndex: Z + 4 }} />;\n }\n const y = hint.edge === \"before\" ? r.y : r.y + r.h;\n return <div style={{ position: \"fixed\", left: r.x, top: y - 1.5, width: r.w, height: 3, background: color, borderRadius: 2, boxShadow: \"0 0 0 1px #fff\", pointerEvents: \"none\", zIndex: Z + 4 }} />;\n}\n\n/**\n * The Element palette β€” a panel docked to the right edge that slides in when the\n * pointer nears the edge (controlled by `open`) and hides while an Element is\n * being dragged. Each tile is draggable; dropping it on the page inserts that\n * Element (handled by EditablePage's `onPageDrop`).\n */\nfunction ElementPalette({ open, onDragChange }: { open: boolean; onDragChange: (dragging: boolean) => void }): ReactElement {\n return (\n <div\n style={{\n position: \"fixed\",\n top: 64,\n bottom: 96,\n right: 0,\n width: 216,\n transform: open ? \"translateX(0)\" : \"translateX(100%)\",\n transition: \"transform 0.18s ease\",\n background: \"#0b1220\",\n color: \"#e2e8f0\",\n borderLeft: \"1px solid #1e293b\",\n borderTopLeftRadius: 12,\n borderBottomLeftRadius: 12,\n boxShadow: \"-18px 0 48px -20px rgba(0,0,0,0.6)\",\n zIndex: Z + 2,\n fontFamily: \"system-ui, sans-serif\",\n padding: 12,\n overflowY: \"auto\",\n }}\n >\n <div style={{ fontSize: 11, letterSpacing: \"0.06em\", textTransform: \"uppercase\", opacity: 0.5, marginBottom: 10 }}>Elements</div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 8 }}>\n {ADD_MENU.map((m) => (\n <div\n key={m.kind}\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setData(\"application/x-cms-element\", m.kind);\n e.dataTransfer.effectAllowed = \"copy\";\n onDragChange(true);\n }}\n onDragEnd={() => onDragChange(false)}\n title={`Drag \"${m.label}\" onto the page`}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 4,\n height: 56,\n borderRadius: 8,\n background: \"#0f172a\",\n border: \"1px solid #1e293b\",\n cursor: \"grab\",\n fontSize: 12,\n userSelect: \"none\",\n }}\n >\n <span style={{ fontSize: 16, opacity: 0.7 }}>οΌ‹</span>\n {m.label}\n </div>\n ))}\n </div>\n <p style={{ fontSize: 10.5, opacity: 0.45, marginTop: 12, lineHeight: 1.4 }}>\n Drag an Element onto the page. It drops into the container you release over.\n </p>\n </div>\n );\n}\n\nconst CONTAINER_TYPES = new Set([\"section\", \"frame\", \"stack\", \"grid\", \"shape\", \"card\", \"device\", \"repeater\"]);\n\ntype AddKind =\n | \"text\"\n | \"heading\"\n | \"button\"\n | \"link\"\n | \"image\"\n | \"box\"\n | \"stack\"\n | \"grid\"\n | \"card\"\n | \"callout\"\n | \"divider\"\n | \"code\"\n | \"richtext\"\n | \"repeater\";\nconst ADD_DEFAULTS: Record<AddKind, { type: string; props: Record<string, Json>; style: StyleProps; layout?: LayoutMode }> = {\n text: { type: \"text\", props: { content: \"New text\" }, style: { color: \"inherit\" } },\n heading: { type: \"heading\", props: { content: \"New heading\" }, style: { fontSize: { value: 28, unit: \"px\" }, fontWeight: 700 } },\n button: { type: \"button\", props: { label: \"Button\", href: \"#\", variant: \"primary\" }, style: {} },\n link: { type: \"link\", props: { content: \"link text\", href: \"#\" }, style: { color: \"#7c3aed\" } },\n image: { type: \"image\", props: { src: \"\", alt: \"\" }, style: {} },\n box: { type: \"frame\", props: {}, style: { padding: { value: 16, unit: \"px\" } } },\n stack: { type: \"stack\", props: {}, style: { gap: { value: 12, unit: \"px\" } }, layout: \"stack\" },\n grid: { type: \"grid\", props: {}, style: { gap: { value: 12, unit: \"px\" } }, layout: \"grid\" },\n card: { type: \"card\", props: {}, style: { padding: { value: 16, unit: \"px\" }, radius: { value: 12, unit: \"px\" }, border: \"1px solid #e2e8f0\" } },\n callout: { type: \"callout\", props: { content: \"Heads up β€” this is a callout.\", variant: \"info\" }, style: {} },\n divider: { type: \"divider\", props: {}, style: {} },\n code: { type: \"code\", props: { content: \"npm install @particle-academy/react-fancy\", lang: \"bash\" }, style: {} },\n richtext: { type: \"richtext\", props: { html: \"<p>Rich <strong>text</strong> with <em>inline</em> formatting.</p>\" }, style: {} },\n repeater: { type: \"repeater\", props: { items: \"\" }, style: { gap: { value: 12, unit: \"px\" } }, layout: \"stack\" },\n};\n\n/** A resize grip: which edges it drags, its position, and its cursor. */\ninterface Grip {\n key: string;\n north?: boolean;\n south?: boolean;\n east?: boolean;\n west?: boolean;\n cursor: string;\n}\nconst GRIPS: Grip[] = [\n { key: \"nw\", north: true, west: true, cursor: \"nwse-resize\" },\n { key: \"n\", north: true, cursor: \"ns-resize\" },\n { key: \"ne\", north: true, east: true, cursor: \"nesw-resize\" },\n { key: \"e\", east: true, cursor: \"ew-resize\" },\n { key: \"se\", south: true, east: true, cursor: \"nwse-resize\" },\n { key: \"s\", south: true, cursor: \"ns-resize\" },\n { key: \"sw\", south: true, west: true, cursor: \"nesw-resize\" },\n { key: \"w\", west: true, cursor: \"ew-resize\" },\n];\n\nfunction SelectionOverlay({\n box,\n base,\n movable,\n getEl,\n onTransform,\n onLive,\n}: {\n box: Box;\n base: NodeTransform;\n movable: boolean;\n getEl: () => HTMLElement | null;\n onTransform: (t: NodeTransform) => void;\n onLive: () => void;\n}): ReactElement {\n const drag = useRef<{ x: number; y: number; w: number; h: number; live: NodeTransform } | null>(null);\n // Snap targets (other elements' edges/centers, viewport coords) gathered at\n // drag start, + the live alignment guides to draw.\n const targets = useRef<{ vx: number[]; hy: number[] }>({ vx: [], hy: [] });\n const [guides, setGuides] = useState<{ x: number | null; y: number | null }>({ x: null, y: null });\n\n const apply = (t: NodeTransform) => {\n const el = getEl();\n if (el) applyTransform(el, t);\n };\n\n // Snap a set of candidate lines to the nearest target within SNAP px.\n // Returns the adjustment to apply and the matched guide coordinate.\n const snap = (cands: number[], lines: number[]): { delta: number; at: number | null } => {\n let best = { delta: 0, at: null as number | null, dist: SNAP + 1 };\n for (const line of lines) {\n for (const c of cands) {\n const diff = line - c;\n if (Math.abs(diff) < best.dist) best = { delta: diff, at: line, dist: Math.abs(diff) };\n }\n }\n return best.dist <= SNAP ? { delta: best.delta, at: best.at } : { delta: 0, at: null };\n };\n\n // Move drags translate; resize grips set an explicit width/height (a true\n // resize, not scale) and translate the opposite way when dragging a top/left\n // edge so the anchored edge stays put.\n const startMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n e.stopPropagation();\n e.preventDefault();\n e.currentTarget.setPointerCapture(e.pointerId);\n drag.current = { x: e.clientX, y: e.clientY, w: box.w, h: box.h, live: { ...base } };\n // Gather snap targets: every other element's left/center/right + top/middle/\n // bottom (skip the selection itself and its ancestors/descendants).\n const sel = getEl();\n const vx = new Set<number>();\n const hy = new Set<number>();\n document.querySelectorAll<HTMLElement>(\"[data-cms]\").forEach((el) => {\n if (sel && (el === sel || sel.contains(el) || el.contains(sel))) return;\n const r = el.getBoundingClientRect();\n vx.add(r.left).add(r.left + r.width / 2).add(r.right);\n hy.add(r.top).add(r.top + r.height / 2).add(r.bottom);\n });\n targets.current = { vx: [...vx], hy: [...hy] };\n };\n const moveMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d) return;\n let dx = e.clientX - d.x;\n let dy = e.clientY - d.y;\n // Snap the moving box's edges/center to nearby targets (hold Alt to bypass).\n if (!e.altKey) {\n const l = box.x + dx;\n const t = box.y + dy;\n const sx = snap([l, l + box.w / 2, l + box.w], targets.current.vx);\n const sy = snap([t, t + box.h / 2, t + box.h], targets.current.hy);\n dx += sx.delta;\n dy += sy.delta;\n setGuides({ x: sx.at, y: sy.at });\n } else if (guides.x !== null || guides.y !== null) {\n setGuides({ x: null, y: null });\n }\n d.live = { ...base, x: (base.x ?? 0) + dx, y: (base.y ?? 0) + dy };\n apply(d.live);\n onLive();\n };\n\n const startResize = (g: Grip) => (e: ReactPointerEvent<HTMLDivElement>) => {\n e.stopPropagation();\n e.preventDefault();\n e.currentTarget.setPointerCapture(e.pointerId);\n drag.current = { x: e.clientX, y: e.clientY, w: base.w ?? box.w, h: base.h ?? box.h, live: { ...base } };\n (e.currentTarget as HTMLElement).dataset.grip = g.key;\n };\n const resizeMove = (g: Grip) => (e: ReactPointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d) return;\n const dx = e.clientX - d.x;\n const dy = e.clientY - d.y;\n const live: NodeTransform = { ...base };\n if (g.east) live.w = Math.max(16, Math.round(d.w + dx));\n if (g.west) {\n live.w = Math.max(16, Math.round(d.w - dx));\n live.x = (base.x ?? 0) + (d.w - live.w);\n }\n if (g.south) live.h = Math.max(16, Math.round(d.h + dy));\n if (g.north) {\n live.h = Math.max(16, Math.round(d.h - dy));\n live.y = (base.y ?? 0) + (d.h - live.h);\n }\n d.live = live;\n apply(live);\n onLive();\n };\n const end = () => {\n const d = drag.current;\n if (d) onTransform(d.live);\n drag.current = null;\n setGuides({ x: null, y: null });\n };\n\n const outline: CSSProperties = {\n position: \"fixed\",\n left: box.x - 1,\n top: box.y - 1,\n width: box.w + 2,\n height: box.h + 2,\n outline: \"2px solid #8b5cf6\",\n borderRadius: 4,\n pointerEvents: \"none\",\n zIndex: Z,\n };\n const handle: CSSProperties = {\n position: \"fixed\",\n width: 12,\n height: 12,\n background: \"#fff\",\n border: \"2px solid #8b5cf6\",\n borderRadius: 3,\n zIndex: Z + 1,\n touchAction: \"none\",\n boxSizing: \"border-box\",\n };\n const gripPos = (g: Grip): CSSProperties => {\n const cx = g.west ? box.x : g.east ? box.x + box.w : box.x + box.w / 2;\n const cy = g.north ? box.y : g.south ? box.y + box.h : box.y + box.h / 2;\n return { left: cx - 6, top: cy - 6, cursor: g.cursor };\n };\n\n return (\n <>\n {guides.x !== null ? <div style={{ position: \"fixed\", left: guides.x, top: 0, bottom: 0, width: 1, background: \"#ec4899\", zIndex: Z + 3, pointerEvents: \"none\" }} /> : null}\n {guides.y !== null ? <div style={{ position: \"fixed\", top: guides.y, left: 0, right: 0, height: 1, background: \"#ec4899\", zIndex: Z + 3, pointerEvents: \"none\" }} /> : null}\n <div style={outline} />\n {movable ? (\n <>\n {/* move grip β€” circular, top-left, offset clear of the corner handle */}\n <div\n title=\"Drag to move\"\n onPointerDown={startMove}\n onPointerMove={moveMove}\n onPointerUp={end}\n style={{ ...handle, width: 18, height: 18, borderRadius: 9, background: \"#8b5cf6\", border: \"2px solid #fff\", left: box.x - 22, top: box.y - 22, cursor: \"move\" }}\n />\n {GRIPS.map((g) => (\n <div\n key={g.key}\n title=\"Drag to resize\"\n onPointerDown={startResize(g)}\n onPointerMove={resizeMove(g)}\n onPointerUp={end}\n style={{ ...handle, ...gripPos(g) }}\n />\n ))}\n </>\n ) : null}\n </>\n );\n}\n\nfunction FloatingToolbar({\n box,\n isText,\n base,\n setStyle,\n}: {\n box: Box;\n isText: boolean;\n base: Partial<StyleProps>;\n setStyle: (patch: Partial<StyleProps>) => void;\n}): ReactElement {\n const wrap: CSSProperties = {\n position: \"fixed\",\n left: box.x,\n top: Math.max(8, box.y - 46),\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"6px 10px\",\n background: \"#0f172a\",\n color: \"#fff\",\n border: \"1px solid rgba(255,255,255,0.12)\",\n borderRadius: 999,\n boxShadow: \"0 8px 24px -8px rgba(0,0,0,0.5)\",\n zIndex: Z + 2,\n fontFamily: \"system-ui, sans-serif\",\n fontSize: 12,\n };\n const swatch: CSSProperties = { width: 22, height: 22, border: \"none\", background: \"transparent\", padding: 0, cursor: \"pointer\" };\n const num: CSSProperties = { width: 52, background: \"#1e293b\", color: \"#fff\", border: \"1px solid #334155\", borderRadius: 6, padding: \"3px 6px\", font: \"inherit\" };\n return (\n <div style={wrap} onMouseDown={(e) => e.preventDefault()}>\n {isText ? (\n <label title=\"Text color\" style={{ display: \"inline-flex\", alignItems: \"center\", gap: 4 }}>\n <span style={{ opacity: 0.7 }}>A</span>\n <input type=\"color\" style={swatch} value={base.color ?? \"#0f172a\"} onChange={(e) => setStyle({ color: e.target.value })} />\n </label>\n ) : null}\n {isText ? (\n <input type=\"number\" title=\"Font size (px)\" style={num} placeholder=\"size\" value={base.fontSize?.value ?? \"\"} onChange={(e) => setStyle({ fontSize: { value: Number(e.target.value) || 0, unit: \"px\" } })} />\n ) : null}\n <label title=\"Background\" style={{ display: \"inline-flex\", alignItems: \"center\", gap: 4 }}>\n <span style={{ opacity: 0.7 }}>BG</span>\n <input type=\"color\" style={swatch} value={normalizeColor(base.background)} onChange={(e) => setStyle({ background: e.target.value })} />\n </label>\n </div>\n );\n}\n\nconst ADD_MENU: Array<{ kind: AddKind; label: string }> = [\n { kind: \"heading\", label: \"Heading\" },\n { kind: \"text\", label: \"Text\" },\n { kind: \"button\", label: \"Button\" },\n { kind: \"link\", label: \"Link\" },\n { kind: \"image\", label: \"Image\" },\n { kind: \"card\", label: \"Card\" },\n { kind: \"callout\", label: \"Callout\" },\n { kind: \"stack\", label: \"Stack\" },\n { kind: \"grid\", label: \"Grid\" },\n { kind: \"box\", label: \"Box\" },\n { kind: \"divider\", label: \"Divider\" },\n { kind: \"code\", label: \"Code\" },\n { kind: \"richtext\", label: \"Rich text\" },\n { kind: \"repeater\", label: \"Repeater\" },\n];\n\nfunction EditBar({\n editing,\n onToggle,\n canUndo,\n canRedo,\n onUndo,\n onRedo,\n onAdd,\n}: {\n editing: boolean;\n onToggle: () => void;\n canUndo: boolean;\n canRedo: boolean;\n onUndo: () => void;\n onRedo: () => void;\n onAdd: (kind: AddKind) => void;\n}): ReactElement {\n const [open, setOpen] = useState(false);\n const bar: CSSProperties = { position: \"fixed\", top: 12, right: 12, display: \"flex\", gap: 6, alignItems: \"center\", padding: 6, background: \"#0f172a\", color: \"#fff\", borderRadius: 999, boxShadow: \"0 8px 24px -8px rgba(0,0,0,0.4)\", zIndex: Z + 3, fontFamily: \"system-ui, sans-serif\", fontSize: 12 };\n const btn: CSSProperties = { font: \"inherit\", border: \"none\", background: \"transparent\", color: \"inherit\", cursor: \"pointer\", padding: \"4px 8px\", borderRadius: 999 };\n return (\n <div style={bar}>\n <button type=\"button\" style={{ ...btn, background: editing ? \"#8b5cf6\" : \"transparent\" }} onClick={onToggle}>\n {editing ? \"● Editing\" : \"Edit\"}\n </button>\n {editing ? (\n <>\n <div style={{ position: \"relative\" }}>\n <button type=\"button\" style={{ ...btn, background: open ? \"#1e293b\" : \"transparent\" }} onClick={() => setOpen((v) => !v)} title=\"Add an Element (or drag from the right-edge palette)\">οΌ‹ Element β–Ύ</button>\n {open ? (\n <div style={{ position: \"absolute\", top: \"calc(100% + 6px)\", right: 0, background: \"#0f172a\", border: \"1px solid #1e293b\", borderRadius: 10, padding: 4, display: \"flex\", flexDirection: \"column\", minWidth: 132, boxShadow: \"0 12px 32px -10px rgba(0,0,0,0.6)\" }}>\n {ADD_MENU.map((m) => (\n <button\n key={m.kind}\n type=\"button\"\n style={{ ...btn, textAlign: \"left\", borderRadius: 6, padding: \"6px 10px\" }}\n onClick={() => {\n onAdd(m.kind);\n setOpen(false);\n }}\n >\n {m.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n <button type=\"button\" style={{ ...btn, opacity: canUndo ? 1 : 0.4 }} disabled={!canUndo} onClick={onUndo}>β†Ά</button>\n <button type=\"button\" style={{ ...btn, opacity: canRedo ? 1 : 0.4 }} disabled={!canRedo} onClick={onRedo}>β†·</button>\n </>\n ) : null}\n </div>\n );\n}\n\n/** The right-click menu in EditMode β€” contextual to the node under the cursor. */\nfunction EditMenuItems({\n node,\n hasClipboard,\n isContainer,\n onEditText,\n onAdd,\n onDuplicate,\n onCopy,\n onPaste,\n onWrap,\n onReorder,\n onDelete,\n}: {\n node: { type: string; parent: NodeId | null } | null;\n hasClipboard: boolean;\n isContainer: boolean;\n onEditText: () => void;\n onAdd: (kind: AddKind) => void;\n onDuplicate: () => void;\n onCopy: () => void;\n onPaste: () => void;\n onWrap: () => void;\n onReorder: (dir: ReorderDir) => void;\n onDelete: () => void;\n}): ReactElement {\n const editable = node && (node.type === \"text\" || node.type === \"heading\");\n const nested = Boolean(node && node.parent !== null);\n return (\n <>\n {editable ? <ContextMenu.Item onClick={onEditText}>Edit text</ContextMenu.Item> : null}\n <ContextMenu.Sub>\n <ContextMenu.SubTrigger>{isContainer ? \"Add Element inside\" : \"Add Element\"}</ContextMenu.SubTrigger>\n <ContextMenu.SubContent className=\"!z-[2147483647]\">\n {ADD_MENU.map((m) => (\n <ContextMenu.Item key={m.kind} onClick={() => onAdd(m.kind)}>{m.label}</ContextMenu.Item>\n ))}\n </ContextMenu.SubContent>\n </ContextMenu.Sub>\n {node ? (\n <>\n <ContextMenu.Separator />\n <ContextMenu.Item onClick={onDuplicate}>Duplicate</ContextMenu.Item>\n <ContextMenu.Item onClick={onCopy}>Copy</ContextMenu.Item>\n <ContextMenu.Item disabled={!hasClipboard} onClick={onPaste}>Paste</ContextMenu.Item>\n {nested ? <ContextMenu.Item onClick={onWrap}>Wrap in Box</ContextMenu.Item> : null}\n <ContextMenu.Separator />\n <ContextMenu.Item onClick={() => onReorder(\"up\")}>Move up</ContextMenu.Item>\n <ContextMenu.Item onClick={() => onReorder(\"down\")}>Move down</ContextMenu.Item>\n {nested ? (\n <>\n <ContextMenu.Item onClick={() => onReorder(\"front\")}>Bring to front</ContextMenu.Item>\n <ContextMenu.Item onClick={() => onReorder(\"back\")}>Send to back</ContextMenu.Item>\n </>\n ) : null}\n <ContextMenu.Separator />\n <ContextMenu.Item danger onClick={onDelete}>Delete</ContextMenu.Item>\n </>\n ) : (\n <ContextMenu.Item disabled={!hasClipboard} onClick={onPaste}>Paste</ContextMenu.Item>\n )}\n </>\n );\n}\n\n/** Write a transform onto an element (or clear every transformed property). */\nfunction applyTransform(el: HTMLElement, t: NodeTransform | undefined): void {\n if (t && (t.x != null || t.y != null || t.scale != null || t.rotate != null || t.opacity != null || t.w != null || t.h != null)) {\n el.style.transform = `translate3d(${t.x ?? 0}px, ${t.y ?? 0}px, 0) scale(${t.scale ?? 1}) rotate(${t.rotate ?? 0}deg)`;\n el.style.opacity = t.opacity != null ? String(t.opacity) : \"\";\n el.style.width = t.w != null ? `${t.w}px` : \"\";\n el.style.height = t.h != null ? `${t.h}px` : \"\";\n } else {\n el.style.transform = \"\";\n el.style.opacity = \"\";\n el.style.width = \"\";\n el.style.height = \"\";\n }\n}\n\nfunction normalizeColor(v: string | undefined): string {\n return v && /^#[0-9a-fA-F]{6}$/.test(v) ? v : \"#ffffff\";\n}\n\nfunction cssEscape(value: string): string {\n return value.replace(/[\"\\\\]/g, \"\\\\$&\");\n}\n"]}