@particle-academy/fancy-cms-ui 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/editor/NodeInspector.tsx","../src/editor/editorOps.ts","../src/editor/EditablePage.tsx"],"names":["CONTAINER_TYPES","Z","len","doc","jsx","jsxs"],"mappings":"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","file":"editor.js","sourcesContent":["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: \"var(--fcms-danger, #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(--fcms-muted, #94a3b8)\", margin: \"0 0 12px\", lineHeight: 1.45, paddingBottom: 12, borderBottom: \"1px solid var(--fcms-border, #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 var(--fcms-border, #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 ? \"var(--fcms-accent, #a78bfa)\" : \"var(--fcms-muted, #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: \"var(--fcms-accent, #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 var(--fcms-border, #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 { ADD_DEFAULTS, ADD_MENU, CONTAINER_TYPES, buildInsertOp, type AddKind } from \"./insert\";\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\";\nimport { useLatestRef } from \"./useLatestRef\";\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 // Notify effects depend only on the data, never on the callback prop's\n // identity — inline-closure consumers would loop them otherwise (see #1).\n const onSelectRef = useLatestRef(onSelect);\n useEffect(() => onSelectRef.current?.(selection), [selection, onSelectRef]);\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 const onProgressRef = useLatestRef(onProgress);\n const hasProgress = !!onProgress;\n useEffect(() => {\n const spacer = spacerRef.current;\n if (!spacer || !hasProgress) return;\n const compute = () => {\n const len = spacer.offsetHeight - window.innerHeight;\n const top = spacer.getBoundingClientRect().top;\n onProgressRef.current?.(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 }, [hasProgress, onProgressRef, 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 = \"var(--fcms-drop, #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: \"var(--fcms-bg, #0b1220)\",\n color: \"var(--fcms-fg, #e2e8f0)\",\n borderLeft: \"1px solid var(--fcms-border, #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: \"var(--fcms-canvas, #0f172a)\",\n border: \"1px solid var(--fcms-border, #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\n// CONTAINER_TYPES / AddKind / ADD_DEFAULTS / ADD_MENU now live in ./insert, so\n// the standalone <Editor> can offer the same palette (#3).\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 var(--fcms-accent, #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 var(--fcms-accent, #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\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/NodeInspector.tsx","../src/editor/editorOps.ts","../src/editor/EditablePage.tsx"],"names":["CONTAINER_TYPES","keyBetween","Z","len","doc","jsx","jsxs"],"mappings":"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","file":"editor.js","sourcesContent":["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: \"var(--fcms-danger, #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(--fcms-muted, #94a3b8)\", margin: \"0 0 12px\", lineHeight: 1.45, paddingBottom: 12, borderBottom: \"1px solid var(--fcms-border, #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 var(--fcms-border, #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 ? \"var(--fcms-accent, #a78bfa)\" : \"var(--fcms-muted, #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: \"var(--fcms-accent, #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 var(--fcms-border, #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, lastRootId } from \"../document/reduce\";\nimport { fractionalKey as keyBetween } from \"@particle-academy/fancy-doc-commons\";\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 = childrenOf(doc, null).map((n) => n.id);\n const at = base.indexOf(id);\n ops.push({ t: \"reorder_roots\", 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) : lastRootId(doc);\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 = childrenOf(doc, null).map((n) => n.id);\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_roots\", 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, lastRootId } from \"../document/reduce\";\nimport { fractionalKey as keyBetween } from \"@particle-academy/fancy-doc-commons\";\nimport { ADD_DEFAULTS, ADD_MENU, CONTAINER_TYPES, buildInsertOp, type AddKind } from \"./insert\";\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\";\nimport { useLatestRef } from \"./useLatestRef\";\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 // Notify effects depend only on the data, never on the callback prop's\n // identity — inline-closure consumers would loop them otherwise (see #1).\n const onSelectRef = useLatestRef(onSelect);\n useEffect(() => onSelectRef.current?.(selection), [selection, onSelectRef]);\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 const onProgressRef = useLatestRef(onProgress);\n const hasProgress = !!onProgress;\n useEffect(() => {\n const spacer = spacerRef.current;\n if (!spacer || !hasProgress) return;\n const compute = () => {\n const len = spacer.offsetHeight - window.innerHeight;\n const top = spacer.getBoundingClientRect().top;\n onProgressRef.current?.(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 }, [hasProgress, onProgressRef, 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 : lastRootId(doc);\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 : lastRootId(doc);\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 ?? lastRootId(doc);\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 = \"var(--fcms-drop, #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: \"var(--fcms-bg, #0b1220)\",\n color: \"var(--fcms-fg, #e2e8f0)\",\n borderLeft: \"1px solid var(--fcms-border, #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: \"var(--fcms-canvas, #0f172a)\",\n border: \"1px solid var(--fcms-border, #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\n// CONTAINER_TYPES / AddKind / ADD_DEFAULTS / ADD_MENU now live in ./insert, so\n// the standalone <Editor> can offer the same palette (#3).\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 var(--fcms-accent, #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 var(--fcms-accent, #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\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"]}