@particle-academy/fancy-cms-ui 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-5VNXIAHG.js → chunk-LVOBZ2OO.js} +4 -4
- package/dist/chunk-LVOBZ2OO.js.map +1 -0
- package/dist/{chunk-FDCP3LVR.js → chunk-TG5O4K75.js} +5 -5
- package/dist/chunk-TG5O4K75.js.map +1 -0
- package/dist/{chunk-Z2X7B6YL.js → chunk-W525ACX7.js} +3 -3
- package/dist/{chunk-Z2X7B6YL.js.map → chunk-W525ACX7.js.map} +1 -1
- package/dist/editor.cjs +4 -4
- package/dist/editor.cjs.map +1 -1
- package/dist/editor.d.cts +2 -2
- package/dist/editor.d.ts +2 -2
- package/dist/editor.js +5 -5
- package/dist/editor.js.map +1 -1
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +2 -2
- package/dist/{useEditor-BGKnLQuK.d.ts → useEditor-DFHy1dWc.d.ts} +17 -2
- package/dist/{useEditor-Dr_Gg7gu.d.cts → useEditor-DLBWS6j0.d.cts} +17 -2
- package/package.json +3 -3
- package/dist/chunk-5VNXIAHG.js.map +0 -1
- package/dist/chunk-FDCP3LVR.js.map +0 -1
package/dist/editor.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/document/migrate.ts","../src/document/reduce.ts","../src/editor/state.ts","../src/editor/useEditor.ts","../src/editor/useLatestRef.ts","../src/document/types.ts","../src/render/css.ts","../src/react/registry.tsx","../src/react/RenderNode.tsx","../src/react/CmsPage.tsx","../src/editor/Canvas.tsx","../src/editor/LayersPanel.tsx","../src/editor/Inspector.tsx","../src/editor/insert.ts","../src/editor/Editor.tsx","../src/editor/NodeInspector.tsx","../src/editor/editorOps.ts","../src/editor/EditablePage.tsx"],"names":["input","fractionalKey","docChildrenOf","descendantsOf","useReducer","useCallback","useMemo","useRef","useEffect","len","body","jsx","label","Fragment","useState","useLayoutEffect","jsxs","keyBetween","useId","CONTAINER_TYPES","Z","cssEscape","doc","ContextMenu"],"mappings":"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","file":"editor.cjs","sourcesContent":["/**\n * Forward migration for documents saved before roots were ordered like every\n * other sibling group.\n *\n * ## Why this cannot be skipped\n *\n * The old model carried top-level order TWICE: a `sections: NodeId[]` array, and\n * an `order` key on every node like any other sibling. The old `reorder_sections`\n * op permuted the array and **left the order keys untouched** — so the moment a\n * user dragged a section, the two disagreed, and `sections[]` was the one that\n * won (it was what the renderer walked).\n *\n * Which means: dropping `sections[]` and falling back to the order keys does not\n * merely lose a redundant field. On every page whose sections were ever\n * rearranged, it silently reverts them to the order they were first created in.\n * The page still loads, nothing throws, and the layout is wrong.\n *\n * So the migration rewrites root `order` keys to agree with `sections[]` before\n * the array is discarded. `sections[]` is treated as authoritative for exactly\n * the reason above.\n *\n * ## Idempotent, and safe on already-migrated documents\n *\n * A doc with no `sections` is returned unchanged (same reference). Running this\n * twice is a no-op, so a host can call it unconditionally on load rather than\n * tracking a schema version.\n */\n\nimport { fractionalKey } from \"@particle-academy/fancy-doc-commons\";\nimport type { NodeId, PageDoc } from \"./types\";\n\n/** A `PageDoc` as persisted before this change — with the extra array. */\nexport type LegacyPageDoc = PageDoc & { sections?: NodeId[] };\n\nexport interface MigrateResult {\n doc: PageDoc;\n /** True when the input actually carried `sections[]` and was rewritten. */\n migrated: boolean;\n /**\n * Ids listed in `sections[]` with no matching node. Skipped rather than\n * faulted — a dangling id is a stale write, and refusing to open the document\n * over it would be a worse outcome than dropping it.\n */\n danglingIds: NodeId[];\n /**\n * Roots present in `nodes` but missing from `sections[]`. Under the old model\n * these did not render at all. They are appended after the listed sections, in\n * their existing order-key order, because making a node visible is recoverable\n * and deleting one is not.\n */\n unlistedRootIds: NodeId[];\n}\n\n/**\n * Migrate a possibly-legacy document, reporting what was found.\n *\n * Use {@link migrateDoc} unless you want the diagnostics.\n */\nexport function migrateDocVerbose(input: LegacyPageDoc | PageDoc): MigrateResult {\n const legacy = input as LegacyPageDoc;\n const sections = legacy.sections;\n\n if (!Array.isArray(sections)) {\n return { doc: input as PageDoc, migrated: false, danglingIds: [], unlistedRootIds: [] };\n }\n\n const danglingIds: NodeId[] = [];\n const ordered: NodeId[] = [];\n const seen = new Set<NodeId>();\n\n for (const id of sections) {\n if (!input.nodes[id]) {\n danglingIds.push(id);\n continue;\n }\n // A duplicate id in the array would otherwise be minted two order keys, and\n // the second would overwrite the first — take the first occurrence.\n if (seen.has(id)) continue;\n seen.add(id);\n ordered.push(id);\n }\n\n // Roots that the array never mentioned. Sorted by their existing key so their\n // relative order is at least stable rather than dependent on object insertion.\n const unlistedRootIds = Object.values(input.nodes)\n .filter((n) => n.parent === null && !seen.has(n.id))\n .sort((a, b) => (a.order < b.order ? -1 : a.order > b.order ? 1 : 0))\n .map((n) => n.id);\n\n const finalOrder = [...ordered, ...unlistedRootIds];\n\n const nodes = { ...input.nodes };\n let prev: string | null = null;\n\n for (const id of finalOrder) {\n const key = fractionalKey(prev, null);\n nodes[id] = { ...nodes[id]!, order: key };\n prev = key;\n }\n\n const { sections: _dropped, ...rest } = legacy;\n\n return {\n doc: { ...rest, nodes } as PageDoc,\n migrated: true,\n danglingIds,\n unlistedRootIds,\n };\n}\n\n/**\n * Migrate a possibly-legacy document. Safe to call on every load — an\n * already-migrated document is returned unchanged, by reference.\n */\nexport function migrateDoc(input: LegacyPageDoc | PageDoc): PageDoc {\n return migrateDocVerbose(input).doc;\n}\n\n/** True when the document still carries the pre-migration `sections[]` array. */\nexport function needsMigration(input: LegacyPageDoc | PageDoc): boolean {\n return Array.isArray((input as LegacyPageDoc).sections);\n}\n","/**\n * The pure, total reducer. `reduce(doc, op)` returns a new document; an invalid\n * op is a **logged no-op** (returns the same doc, `seq` unchanged). That single\n * property is what makes undo, revisions, collaboration, and agent edits all\n * flow through one spine.\n *\n * Ordering: EVERY level uses the fractional `order` field among siblings,\n * including the roots. Top-level order used to live in a separate `sections`\n * array, which meant two mechanisms that could disagree — a node could be a\n * root by `parent === null` and missing from `sections`, and then simply not\n * render, with nothing reporting it.\n */\nimport {\n childrenOf as docChildrenOf,\n descendantsOf,\n fractionalKey,\n} from \"@particle-academy/fancy-doc-commons\";\nimport type { Action, Node, NodeId, PageDoc, StyleProps } from \"./types\";\nimport type { PageOp } from \"./ops\";\n\nexport interface ReduceOptions {\n /** Called when an op can't apply. Default: silent. */\n onInvalid?: (op: PageOp, reason: string) => void;\n}\n\n/**\n * Children of a node (or the roots when `parent` is null), in order.\n *\n * Delegates to doc-commons so the CMS, fancy-screens and any future surface\n * walk a document the same way. Roots are no longer a special case.\n */\nexport function childrenOf(doc: PageDoc, parent: NodeId | null): Node[] {\n return docChildrenOf<Node>(doc, parent);\n}\n\n/**\n * The top-level node ids, in order.\n *\n * Replaces the old `doc.sections` array. Kept as a named helper because the two\n * things callers actually wanted from that array — \"list the roots\" and \"the\n * last root\" — read badly as `childrenOf(doc, null).map(n => n.id)` at every\n * call site.\n */\nexport function rootIds(doc: PageDoc): NodeId[] {\n return childrenOf(doc, null).map((n) => n.id);\n}\n\n/** The last top-level node, or null — the default parent for a new insert. */\nexport function lastRootId(doc: PageDoc): NodeId | null {\n const r = rootIds(doc);\n return r[r.length - 1] ?? null;\n}\n\n/** Every transitive descendant id of `id` (excludes `id`). */\nexport function descendantIds(doc: PageDoc, id: NodeId): NodeId[] {\n return descendantsOf<Node>(doc, id);\n}\n\nfunction patchNode(doc: PageDoc, id: NodeId, patch: Partial<Node>): PageDoc {\n const node = doc.nodes[id]!;\n return {\n ...doc,\n nodes: { ...doc.nodes, [id]: { ...node, ...patch } },\n seq: doc.seq + 1,\n };\n}\n\nexport function reduce(doc: PageDoc, op: PageOp, opts: ReduceOptions = {}): PageDoc {\n const invalid = (reason: string): PageDoc => {\n opts.onInvalid?.(op, reason);\n return doc;\n };\n\n switch (op.t) {\n case \"insert_node\": {\n if (doc.nodes[op.node.id]) return invalid(\"node id already exists\");\n if (op.node.parent !== null && !doc.nodes[op.node.parent]) return invalid(\"parent not found\");\n return {\n ...doc,\n nodes: { ...doc.nodes, [op.node.id]: op.node },\n seq: doc.seq + 1,\n };\n }\n\n case \"remove_node\": {\n if (!doc.nodes[op.id]) return invalid(\"node not found\");\n const dead = new Set<NodeId>([op.id, ...descendantIds(doc, op.id)]);\n const nodes: Record<NodeId, Node> = {};\n for (const id of Object.keys(doc.nodes)) {\n if (!dead.has(id)) nodes[id] = doc.nodes[id]!;\n }\n return {\n ...doc,\n nodes,\n seq: doc.seq + 1,\n };\n }\n\n case \"move_node\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n if (op.parent === op.id) return invalid(\"cannot parent a node to itself\");\n if (op.parent !== null && !doc.nodes[op.parent]) return invalid(\"new parent not found\");\n if (op.parent !== null && descendantIds(doc, op.id).includes(op.parent)) {\n return invalid(\"move would create a cycle\");\n }\n return {\n ...doc,\n nodes: { ...doc.nodes, [op.id]: { ...node, parent: op.parent, order: op.order } },\n seq: doc.seq + 1,\n };\n }\n\n case \"set_props\": {\n if (!doc.nodes[op.id]) return invalid(\"node not found\");\n return patchNode(doc, op.id, {\n props: { ...doc.nodes[op.id]!.props, ...op.patch } as unknown as Node[\"props\"],\n });\n }\n\n case \"set_layout\": {\n if (!doc.nodes[op.id]) return invalid(\"node not found\");\n return patchNode(doc, op.id, { layout: op.layout });\n }\n\n case \"set_style\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n const prev = node.style[op.breakpoint] ?? {};\n return patchNode(doc, op.id, {\n style: { ...node.style, [op.breakpoint]: { ...prev, ...op.patch } } as Node[\"style\"],\n });\n }\n\n case \"set_constraints\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n const base = node.constraints ?? { base: { width: \"hug\", height: \"hug\" } };\n const prev = base[op.breakpoint] ?? {};\n return patchNode(doc, op.id, {\n constraints: { ...base, [op.breakpoint]: { ...prev, ...op.patch } } as Node[\"constraints\"],\n });\n }\n\n case \"set_animation\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n const list = node.animations ?? [];\n const idx = list.findIndex((a) => a.id === op.anim.id);\n return patchNode(doc, op.id, {\n animations: idx >= 0 ? list.map((a, i) => (i === idx ? op.anim : a)) : [...list, op.anim],\n });\n }\n\n case \"remove_animation\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n return patchNode(doc, op.id, {\n animations: (node.animations ?? []).filter((a) => a.id !== op.animId),\n });\n }\n\n case \"set_action\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n const list = node.actions ?? [];\n let actions: Action[];\n if (op.action === null) actions = list.filter((_, i) => i !== op.index);\n else if (op.index >= list.length) actions = [...list, op.action];\n else actions = list.map((a, i) => (i === op.index ? op.action! : a));\n return patchNode(doc, op.id, { actions });\n }\n\n case \"set_meta\":\n return { ...doc, meta: { ...doc.meta, ...op.patch }, seq: doc.seq + 1 };\n\n case \"set_theme\":\n return { ...doc, theme: { ...doc.theme, ...op.patch }, seq: doc.seq + 1 };\n\n case \"reorder_roots\": {\n // Roots are ordered by their own fractional keys now, so a reorder\n // REWRITES those keys rather than replacing a list. Still validated as a\n // permutation: a partial list would silently drop roots out of the page.\n const currentRoots = childrenOf(doc, null);\n const current = new Set(currentRoots.map((n) => n.id));\n const same =\n op.order.length === currentRoots.length && op.order.every((id) => current.has(id));\n if (!same) return invalid(\"reorder must be a permutation of the current roots\");\n\n const nodes = { ...doc.nodes };\n let prev: string | null = null;\n for (const id of op.order) {\n prev = fractionalKey(prev, null);\n nodes[id] = { ...nodes[id]!, order: prev };\n }\n return { ...doc, nodes, seq: doc.seq + 1 };\n }\n\n default:\n return invalid(`unknown op \"${(op as PageOp).t}\"`);\n }\n}\n\n/** Apply a sequence of ops, threading the document. */\nexport function reduceAll(doc: PageDoc, ops: PageOp[], opts?: ReduceOptions): PageDoc {\n return ops.reduce((d, op) => reduce(d, op, opts), doc);\n}\n\n/**\n * Inverse op(s) for undo, computed against the **pre-op** document. Structural\n * ops invert cleanly; merge-style ops (`set_props`/`set_style`/`set_constraints`)\n * restore the previous values of the touched keys (keys that did not previously\n * exist can't be deleted via a merge — a known Phase-0 limitation).\n */\nexport function invert(doc: PageDoc, op: PageOp): PageOp[] {\n switch (op.t) {\n case \"insert_node\":\n return [{ t: \"remove_node\", id: op.node.id }];\n\n case \"remove_node\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n // Re-insert the subtree parent-first, then restore section order.\n const ids = [op.id, ...descendantIds(doc, op.id)];\n const inserts: PageOp[] = ids.map((id) => ({ t: \"insert_node\", node: doc.nodes[id]! }));\n if (node.parent === null) {\n inserts.push({ t: \"reorder_roots\", order: childrenOf(doc, null).map((n) => n.id) });\n }\n return inserts;\n }\n\n case \"move_node\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n const back: PageOp[] = [{ t: \"move_node\", id: op.id, parent: node.parent, order: node.order }];\n if (node.parent === null) {\n back.push({ t: \"reorder_roots\", order: childrenOf(doc, null).map((n) => n.id) });\n }\n return back;\n }\n\n case \"set_props\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n const prev: Record<string, unknown> = {};\n for (const k of Object.keys(op.patch)) prev[k] = node.props[k];\n return [{ t: \"set_props\", id: op.id, patch: prev }];\n }\n\n case \"set_layout\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n return [{ t: \"set_layout\", id: op.id, layout: node.layout }];\n }\n\n case \"set_style\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n const prevBp = (node.style[op.breakpoint] ?? {}) as Record<string, unknown>;\n const prev: Partial<StyleProps> = {};\n for (const k of Object.keys(op.patch)) (prev as Record<string, unknown>)[k] = prevBp[k];\n return [{ t: \"set_style\", id: op.id, breakpoint: op.breakpoint, patch: prev }];\n }\n\n case \"set_meta\":\n return [{ t: \"set_meta\", patch: pick(doc.meta, Object.keys(op.patch)) }];\n\n case \"set_theme\":\n return [{ t: \"set_theme\", patch: pick(doc.theme, Object.keys(op.patch)) }];\n\n case \"reorder_roots\":\n return [{ t: \"reorder_roots\", order: childrenOf(doc, null).map((n) => n.id) }];\n\n default:\n return [];\n }\n}\n\nfunction pick<T extends object>(obj: T, keys: string[]): Partial<T> {\n const out: Partial<T> = {};\n for (const k of keys) (out as Record<string, unknown>)[k] = (obj as Record<string, unknown>)[k];\n return out;\n}\n","/**\n * Editor state engine — pure and framework-agnostic so it's unit-testable.\n * `useEditor` wraps this with `useReducer`. Undo/redo uses document snapshots\n * (simple + robust); the op-level `invert` in the spine is for collab/op-stream\n * undo.\n */\nimport { migrateDoc, type LegacyPageDoc } from \"../document/migrate\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { reduce } from \"../document/reduce\";\n\nexport interface EditorState {\n doc: PageDoc;\n past: PageDoc[];\n future: PageDoc[];\n selection: string | null;\n}\n\nexport type EditorAction =\n | { type: \"apply\"; op: PageOp }\n | { type: \"undo\" }\n | { type: \"redo\" }\n | { type: \"select\"; id: string | null }\n | { type: \"replace\"; doc: PageDoc };\n\nconst HISTORY_LIMIT = 100;\n\n/**\n * Seed the editor from a document.\n *\n * Migrates a pre-`sections[]` document on the way in. Doing it here rather than\n * leaving it to the host is deliberate: the legacy failure is SILENT — a page\n * whose sections were ever reordered would simply open in the wrong order, with\n * nothing thrown and nothing logged — so a host that has not heard of the\n * migration is exactly the one that needs it. Already-migrated documents pass\n * through by reference.\n */\nexport function initEditor(doc: LegacyPageDoc | PageDoc): EditorState {\n return { doc: migrateDoc(doc), past: [], future: [], selection: null };\n}\n\nexport function editorReduce(state: EditorState, action: EditorAction): EditorState {\n switch (action.type) {\n case \"apply\": {\n const next = reduce(state.doc, action.op);\n if (next === state.doc) return state; // invalid op → no-op, no history entry\n return {\n ...state,\n doc: next,\n past: [...state.past, state.doc].slice(-HISTORY_LIMIT),\n future: [],\n };\n }\n case \"undo\": {\n if (state.past.length === 0) return state;\n const prev = state.past[state.past.length - 1]!;\n return {\n ...state,\n doc: prev,\n past: state.past.slice(0, -1),\n future: [state.doc, ...state.future],\n };\n }\n case \"redo\": {\n if (state.future.length === 0) return state;\n const next = state.future[0]!;\n return {\n ...state,\n doc: next,\n past: [...state.past, state.doc],\n future: state.future.slice(1),\n };\n }\n case \"select\":\n return state.selection === action.id ? state : { ...state, selection: action.id };\n case \"replace\":\n return state.doc === action.doc ? state : { ...state, doc: action.doc, future: [] };\n default:\n return state;\n }\n}\n","import { useCallback, useMemo, useReducer } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { editorReduce, initEditor, type EditorState } from \"./state\";\n\nexport interface EditorApi {\n state: EditorState;\n /** Dispatch a mutation through the op-spine (records an undo snapshot). */\n apply: (op: PageOp) => void;\n undo: () => void;\n redo: () => void;\n select: (id: string | null) => void;\n /** Replace the document wholesale (e.g. a controlled `value` change). */\n replace: (doc: PageDoc) => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport function useEditor(initialDoc: PageDoc): EditorApi {\n const [state, dispatch] = useReducer(editorReduce, initialDoc, initEditor);\n const apply = useCallback((op: PageOp) => dispatch({ type: \"apply\", op }), []);\n const undo = useCallback(() => dispatch({ type: \"undo\" }), []);\n const redo = useCallback(() => dispatch({ type: \"redo\" }), []);\n const select = useCallback((id: string | null) => dispatch({ type: \"select\", id }), []);\n const replace = useCallback((doc: PageDoc) => dispatch({ type: \"replace\", doc }), []);\n\n return useMemo(\n () => ({\n state,\n apply,\n undo,\n redo,\n select,\n replace,\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n }),\n [state, apply, undo, redo, select, replace],\n );\n}\n","import { useEffect, useRef, type RefObject } from \"react\";\n\n/**\n * Hold the latest `value` in a ref, synced in an effect after every render.\n *\n * Notify effects read `ref.current` instead of closing over a callback prop, so\n * their dependency arrays stay data-only (`doc`, `selection`, …). A consumer\n * passing an inline closure — new identity every render, the most natural\n * usage — can then never re-trigger the notify: without this, notify → consumer\n * setState → render → new closure identity → effect re-fires → notify → … loops\n * unbounded (#1). Standard uncontrolled-with-notify hygiene.\n */\nexport function useLatestRef<T>(value: T): RefObject<T> {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n });\n return ref;\n}\n","/**\n * Stages document model — see `fancy-ui/docs/fancy-cms.md` §4.\n *\n * A page is a vertical stack of full-bleed **sections**; inside each, **layers**\n * are positioned by constraints (free + bold stays responsive), with stack/grid\n * containers where structure is wanted. Nodes live in a **flat map** keyed by id\n * (Figma-style) so ops target a stable identity and collab merges stay clean.\n */\n\nimport type { DocNode, DocTree } from \"@particle-academy/fancy-doc-commons\";\n\n/** A node id. Alias of doc-commons' `DocId`, kept for readability in CMS code. */\nexport type NodeId = string;\n\nexport type ScrollMode = \"snap\" | \"smooth\";\n\n/** Ordered, mobile-first. Convention: `\"base\" | \"md\" | \"lg\"`. */\nexport type Breakpoint = string;\n\nexport type Json = string | number | boolean | null | Json[] | { [key: string]: Json };\n\n/** A literal value OR a binding into the page's data context (`{ $bind: \"profile.coins\" }`). */\nexport interface Binding {\n $bind: string;\n}\nexport type Bound<T> = T | Binding;\n\nexport function isBinding(v: unknown): v is Binding {\n return typeof v === \"object\" && v !== null && typeof (v as Binding).$bind === \"string\";\n}\n\n// ── Sizing ────────────────────────────────────────────────────────────────\n\nexport type LengthUnit = \"px\" | \"%\" | \"vw\" | \"vh\" | \"rem\" | \"fr\";\nexport interface Length {\n value: number;\n unit: LengthUnit;\n}\nexport type SizeMode = Length | \"fill\" | \"hug\";\n\nexport interface Constraints {\n /** Pinned offsets within a `free` parent (null = unpinned). */\n left?: Length | null;\n right?: Length | null;\n top?: Length | null;\n bottom?: Length | null;\n centerX?: boolean;\n centerY?: boolean;\n width: SizeMode;\n height: SizeMode;\n}\n\nexport type LayoutMode = \"free\" | \"stack\" | \"grid\";\n\n// ── Style (compiles deterministically to CSS in both emitters) ──────────────\n\nexport interface StyleProps {\n // box\n padding?: Length;\n margin?: Length;\n radius?: Length;\n // color / surface\n background?: string; // color | gradient | url(...)\n color?: string;\n opacity?: number;\n // typography\n fontFamily?: string;\n fontSize?: Length;\n fontWeight?: number;\n lineHeight?: number;\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\n letterSpacing?: Length;\n // border / shadow / effects (static)\n border?: string;\n boxShadow?: string;\n transform?: string;\n filter?: string;\n // container knobs (when layout = stack | grid)\n gap?: Length;\n direction?: \"row\" | \"column\";\n columns?: number;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\";\n}\n\n/** Per-breakpoint overrides; `base` is required, others cascade mobile-first. */\nexport type PerBreakpoint<T> = { base: T } & Partial<Record<Breakpoint, Partial<T>>>;\n\n// ── Animation (typed for Phase 2; ignored by the static CSS emitter) ────────\n\nexport type AnimDriver = \"enter\" | \"scroll\" | \"loop\" | \"hover\" | \"click\" | \"drag\";\nexport interface Keyframe {\n at: number; // 0..1\n props: Record<string, number | string>;\n}\nexport interface Anim {\n id: string;\n driver: AnimDriver;\n keyframes: Keyframe[];\n range?: { start: number; end: number };\n ease?: string;\n duration?: number;\n delay?: number;\n stagger?: number;\n once?: boolean;\n emit?: \"css\" | \"js\";\n}\n\n// ── Actions (typed for Phase 3/4) ───────────────────────────────────────────\n\nexport type ActionEvent = \"click\" | \"submit\" | \"change\" | \"load\" | \"timer\" | \"scroll-into\" | \"hover\";\nexport type ActionHandler =\n | { kind: \"navigate\"; href: Bound<string> }\n | { kind: \"submitForm\"; endpoint: string; method?: \"post\" | \"put\" }\n | { kind: \"mutate\"; target: string; value: Bound<Json> }\n | { kind: \"callEndpoint\"; endpoint: string; method?: string }\n | { kind: \"runFlow\"; flow: string }\n | { kind: \"openModal\"; node: NodeId }\n | { kind: \"openDrawer\"; node: NodeId }\n | { kind: \"playTimeline\"; section: NodeId }\n | { kind: \"toggleNode\"; node: NodeId };\nexport interface Action {\n on: ActionEvent;\n do: ActionHandler;\n}\n\n// ── Nodes & document ────────────────────────────────────────────────────────\n\n/**\n * A page node.\n *\n * Extends {@link DocNode} from `fancy-doc-commons` rather than redeclaring it:\n * id / type / parent / order / props are the shared substrate every Fancy\n * document surface uses, and the CMS adds its own domain fields on top. That\n * is what lets `registerDocBridge` drive a CMS page and a fancy-screens screen\n * through the same tools, with no CMS-specific bridge.\n */\nexport interface Node extends DocNode<Record<string, Bound<Json>>> {\n /** Addon key: `section | text | image | shape | stack | grid | frame | <addon>`. */\n type: string;\n /** How this node arranges its children. */\n layout?: LayoutMode;\n /** How this node positions itself within its parent. */\n constraints?: PerBreakpoint<Constraints>;\n style: PerBreakpoint<StyleProps>;\n animations?: Anim[];\n actions?: Action[];\n /** Repeater: render this node once per item of a bound array. */\n repeat?: { each: Binding; as: string };\n /**\n * Host CSS class(es) applied to the node's element. The migration enabler:\n * reuse the host site's existing stylesheet for pixel-perfect reproduction\n * instead of re-deriving every rule through {@link StyleProps}.\n */\n className?: string;\n /** Derived from the addon manifest — interactive/3rd-party ⇒ hydration island. */\n island?: boolean;\n}\n\nexport interface ThemeTokens {\n name?: string;\n [key: string]: Json | undefined;\n}\n\nexport interface PageMeta {\n title: string;\n slug: string;\n scrollMode: ScrollMode;\n seo?: Record<string, string>;\n}\n\nexport interface PageDoc {\n id: string;\n /** Op counter — collab ordering + revision checkpoints. */\n seq: number;\n meta: PageMeta;\n theme: ThemeTokens;\n /** Ordered, mobile-first. */\n breakpoints: Breakpoint[];\n /**\n * Flat map — not a nested tree. This is a {@link DocTree}, so every\n * doc-commons walk (`childrenOf`, `roots`, `descendantsOf`) works on it\n * directly.\n *\n * There is no separate `sections[]` any more. Top-level order used to live in\n * its own array while every other level used fractional `order` keys, which\n * meant two ordering mechanisms that could disagree — a node could be a root\n * by `parent === null` and absent from `sections`, and then simply not\n * render. Roots are now ordered exactly like any other sibling group.\n */\n nodes: Record<NodeId, Node>;\n}\n\n/** Default breakpoint → min-width (px) map. `base` has no media query. */\nexport const DEFAULT_BREAKPOINTS: Record<string, number> = {\n base: 0,\n md: 768,\n lg: 1024,\n};\n\n/** A minimal empty document. */\nexport function emptyDoc(id: string, slug = \"/\"): PageDoc {\n return {\n id,\n seq: 0,\n meta: { title: \"Untitled\", slug, scrollMode: \"smooth\" },\n theme: { name: \"default\" },\n breakpoints: [\"base\", \"md\", \"lg\"],\n nodes: {},\n };\n}\n","/**\n * The JS style → CSS emitter (one half of the dual-emitter pair; the PHP\n * `particle-academy/fancy-cms` mirrors it byte-for-byte). Output is\n * **deterministic**: declarations are sorted, selectors and media blocks use a\n * fixed format, and nodes are emitted in sorted-id order — so the parity harness\n * can diff the two engines' CSS exactly.\n *\n * Phase 0 covers the static subset (layout / constraints / style). Motion lands\n * in Phase 2.\n */\nimport {\n DEFAULT_BREAKPOINTS,\n type Constraints,\n type Length,\n type Node,\n type PageDoc,\n type SizeMode,\n type StyleProps,\n} from \"../document/types\";\n\nconst selectorFor = (id: string): string => `[data-cms=\"${id}\"]`;\n\nfunction lengthToCss(len: Length): string {\n return `${len.value}${len.unit}`;\n}\n\nfunction sizeToCss(size: SizeMode): string {\n if (size === \"fill\") return \"100%\";\n if (size === \"hug\") return \"auto\";\n return lengthToCss(size);\n}\n\nconst ALIGN: Record<string, string> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n stretch: \"stretch\",\n};\nconst JUSTIFY: Record<string, string> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n between: \"space-between\",\n around: \"space-around\",\n};\n\n/** Map StyleProps → CSS declarations (property → value). */\nfunction styleDecls(style: Partial<StyleProps>): Record<string, string> {\n const d: Record<string, string> = {};\n if (style.padding) d[\"padding\"] = lengthToCss(style.padding);\n if (style.margin) d[\"margin\"] = lengthToCss(style.margin);\n if (style.radius) d[\"border-radius\"] = lengthToCss(style.radius);\n if (style.background !== undefined) d[\"background\"] = style.background;\n if (style.color !== undefined) d[\"color\"] = style.color;\n if (style.opacity !== undefined) d[\"opacity\"] = String(style.opacity);\n if (style.fontFamily !== undefined) d[\"font-family\"] = style.fontFamily;\n if (style.fontSize) d[\"font-size\"] = lengthToCss(style.fontSize);\n if (style.fontWeight !== undefined) d[\"font-weight\"] = String(style.fontWeight);\n if (style.lineHeight !== undefined) d[\"line-height\"] = String(style.lineHeight);\n if (style.textAlign !== undefined) d[\"text-align\"] = style.textAlign;\n if (style.letterSpacing) d[\"letter-spacing\"] = lengthToCss(style.letterSpacing);\n if (style.border !== undefined) d[\"border\"] = style.border;\n if (style.boxShadow !== undefined) d[\"box-shadow\"] = style.boxShadow;\n if (style.transform !== undefined) d[\"transform\"] = style.transform;\n if (style.filter !== undefined) d[\"filter\"] = style.filter;\n if (style.gap) d[\"gap\"] = lengthToCss(style.gap);\n if (style.align !== undefined) d[\"align-items\"] = ALIGN[style.align] ?? style.align;\n if (style.justify !== undefined) d[\"justify-content\"] = JUSTIFY[style.justify] ?? style.justify;\n return d;\n}\n\n/** Container behaviour from `node.layout`. */\nfunction layoutDecls(node: Node): Record<string, string> {\n const d: Record<string, string> = {};\n if (node.layout === \"stack\") {\n d[\"display\"] = \"flex\";\n d[\"flex-direction\"] = node.style.base.direction ?? \"column\";\n } else if (node.layout === \"grid\") {\n d[\"display\"] = \"grid\";\n d[\"grid-template-columns\"] = `repeat(${node.style.base.columns ?? 1}, 1fr)`;\n } else if (node.layout === \"free\") {\n d[\"position\"] = \"relative\";\n }\n return d;\n}\n\n/** Self-positioning from constraints (absolute pins only inside a `free` parent). */\nfunction constraintDecls(c: Partial<Constraints>, parentFree: boolean): Record<string, string> {\n const d: Record<string, string> = {};\n const transforms: string[] = [];\n if (parentFree) {\n d[\"position\"] = \"absolute\";\n if (c.left) d[\"left\"] = lengthToCss(c.left);\n if (c.right) d[\"right\"] = lengthToCss(c.right);\n if (c.top) d[\"top\"] = lengthToCss(c.top);\n if (c.bottom) d[\"bottom\"] = lengthToCss(c.bottom);\n if (c.centerX) {\n d[\"left\"] = \"50%\";\n transforms.push(\"translateX(-50%)\");\n }\n if (c.centerY) {\n d[\"top\"] = \"50%\";\n transforms.push(\"translateY(-50%)\");\n }\n if (transforms.length) d[\"transform\"] = transforms.join(\" \");\n }\n if (c.width) d[\"width\"] = sizeToCss(c.width);\n if (c.height) d[\"height\"] = sizeToCss(c.height);\n return d;\n}\n\nfunction isParentFree(doc: PageDoc, node: Node): boolean {\n if (node.parent === null) return false; // sections stack in the page flow\n const parent = doc.nodes[node.parent];\n return !parent || parent.layout === undefined || parent.layout === \"free\";\n}\n\nfunction serializeRule(selector: string, decls: Record<string, string>, indent: string): string {\n const props = Object.keys(decls).sort();\n if (props.length === 0) return \"\";\n const body = props.map((p) => `${indent} ${p}: ${decls[p]};`).join(\"\\n\");\n return `${indent}${selector} {\\n${body}\\n${indent}}`;\n}\n\n/** Emit the full stylesheet for a document. Deterministic. */\nexport function emitDocCss(doc: PageDoc): string {\n const breakpointPx = DEFAULT_BREAKPOINTS;\n const blocks: string[] = [];\n\n for (const id of Object.keys(doc.nodes).sort()) {\n const node = doc.nodes[id]!;\n const selector = selectorFor(id);\n const parentFree = isParentFree(doc, node);\n\n // base = style.base + layout + constraints.base\n const base: Record<string, string> = {\n ...layoutDecls(node),\n ...(node.constraints ? constraintDecls(node.constraints.base, parentFree) : {}),\n ...styleDecls(node.style.base),\n };\n const baseRule = serializeRule(selector, base, \"\");\n if (baseRule) blocks.push(baseRule);\n\n // per-breakpoint overrides (mobile-first, in doc order, skipping base)\n for (const bp of doc.breakpoints) {\n if (bp === \"base\") continue;\n const px = breakpointPx[bp];\n if (px === undefined) continue;\n const decls: Record<string, string> = {\n ...(node.constraints?.[bp] ? constraintDecls(node.constraints[bp]!, parentFree) : {}),\n ...(node.style[bp] ? styleDecls(node.style[bp]!) : {}),\n };\n const inner = serializeRule(selector, decls, \" \");\n if (inner) blocks.push(`@media (min-width: ${px}px) {\\n${inner}\\n}`);\n }\n }\n\n return blocks.join(\"\\n\\n\") + (blocks.length ? \"\\n\" : \"\");\n}\n","import type { ReactNode } from \"react\";\nimport { isBinding, type Bound, type Json, type Node, type PageDoc } from \"../document/types\";\n\n/** The page data context bindings resolve against (e.g. server props, repeater `item`). */\nexport type DataContext = Record<string, unknown>;\n\nexport interface ElementContext {\n node: Node;\n doc: PageDoc;\n /** Pre-rendered child nodes, in order. */\n children: ReactNode;\n /** The data context this node renders in (page data + any repeater scope). */\n data?: DataContext;\n /** Resolve a (possibly bound) value to its raw resolved value. */\n resolve: (v: Bound<Json> | undefined) => unknown;\n /** Resolve a (possibly bound) value to a display string. */\n text: (v: Bound<Json> | undefined) => string;\n}\n\n/**\n * Renders the INNER content of a node. The outer `[data-cms]` wrapper is added\n * by {@link RenderNode}, so a renderer only returns what goes inside.\n */\nexport type ElementRenderer = (ctx: ElementContext) => ReactNode;\n\nexport type ElementRegistry = Record<string, ElementRenderer>;\n\n/** Read a dotted path (`a.b.c`) out of the data context. */\nexport function getPath(data: DataContext | undefined, path: string): unknown {\n return path.split(\".\").reduce<unknown>((o, k) => (o == null ? undefined : (o as Record<string, unknown>)[k]), data);\n}\n\n/** Resolve a value: a `{ $bind }` reads from the data context; anything else is literal. */\nexport function resolveValue(v: Bound<Json> | undefined, data?: DataContext): unknown {\n if (v === undefined || v === null) return v;\n if (isBinding(v)) return getPath(data, v.$bind);\n return v;\n}\n\n/** Built-in native elements. Containers render their children; leaves render content. */\nexport const defaultRegistry: ElementRegistry = {\n section: ({ children }) => children,\n stack: ({ children }) => children,\n grid: ({ children }) => children,\n frame: ({ children }) => children,\n shape: ({ children }) => children,\n card: ({ children }) => children,\n text: ({ node, text }) => text(node.props.content),\n heading: ({ node, text }) => text(node.props.content) || \"Heading\",\n // Rich text — inline-formatted HTML (gradient spans, links, <code>, …) that\n // plain `text` can't express. The author owns the markup (it's their content).\n richtext: ({ node, text }) => <div dangerouslySetInnerHTML={{ __html: text(node.props.html) }} />,\n link: ({ node, text }) => (\n <a href={text(node.props.href) || \"#\"} style={{ color: \"inherit\", textDecoration: \"underline\" }}>\n {text(node.props.content) || \"link\"}\n </a>\n ),\n divider: () => <hr style={{ border: \"none\", borderTop: \"1px solid #e2e8f0\", margin: 0 }} />,\n callout: ({ node, text }) => {\n const tone = ({ info: \"#3b82f6\", success: \"#10b981\", warning: \"#f59e0b\", danger: \"#ef4444\" } as Record<string, string>)[text(node.props.variant)] ?? \"#3b82f6\";\n return (\n <div style={{ display: \"flex\", gap: 10, padding: \"12px 14px\", borderRadius: 10, background: `${tone}14`, borderLeft: `3px solid ${tone}` }}>\n <span style={{ fontSize: 13 }}>{text(node.props.content) || \"Callout\"}</span>\n </div>\n );\n },\n code: ({ node, text }) => (\n <pre style={{ margin: 0, padding: \"12px 14px\", borderRadius: 10, background: \"#0b1220\", color: \"#e2e8f0\", fontFamily: \"ui-monospace, monospace\", fontSize: 13, overflowX: \"auto\" }}>\n <code>{text(node.props.content)}</code>\n </pre>\n ),\n button: ({ node, text }) => {\n const label = text(node.props.label) || text(node.props.content) || \"Button\";\n const variant = text(node.props.variant) || \"primary\";\n return <span data-cms-button={variant} style={buttonStyle(variant)}>{label}</span>;\n },\n image: ({ node, text }) => (\n <img\n src={text(node.props.src)}\n alt={text(node.props.alt)}\n style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", display: \"block\" }}\n />\n ),\n};\n\n/**\n * A self-contained button look so the `button` primitive renders sensibly with\n * zero host CSS. Hosts that want their own button classes override the `button`\n * renderer in their registry (e.g. the sandbox maps it to `.btn .btn-primary`).\n */\nfunction buttonStyle(variant: string): import(\"react\").CSSProperties {\n const base: import(\"react\").CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"9px 16px\",\n borderRadius: 8,\n fontWeight: 600,\n fontSize: 14,\n lineHeight: 1,\n cursor: \"pointer\",\n userSelect: \"none\",\n };\n if (variant === \"ghost\") return { ...base, background: \"transparent\", color: \"inherit\", border: \"1px solid currentColor\" };\n if (variant === \"outline\") return { ...base, background: \"transparent\", color: \"#7c3aed\", border: \"1px solid #7c3aed\" };\n return { ...base, background: \"#7c3aed\", color: \"#fff\", border: \"1px solid #7c3aed\" };\n}\n","import type { ReactElement } from \"react\";\nimport type { Bound, Json, PageDoc } from \"../document/types\";\nimport { childrenOf } from \"../document/reduce\";\nimport { defaultRegistry, resolveValue, type DataContext, type ElementRegistry } from \"./registry\";\n\nexport interface RenderNodeProps {\n doc: PageDoc;\n id: string;\n registry?: ElementRegistry;\n /** Data context bindings resolve against (page data + any repeater scope). */\n data?: DataContext;\n}\n\n/**\n * Render one node (and its subtree) to a `[data-cms]`-tagged element. The CSS\n * emitted by `emitDocCss` targets these `data-cms` handles. Interactive /\n * 3rd-party **islands** with no registered renderer become an empty, sized\n * placeholder the host hydrates client-side — mirroring the PHP renderer.\n *\n * `repeater` nodes are special-cased: their first child is a template rendered\n * once per item of the bound `items` array, each in a scope that exposes `item`\n * and `index` to nested `{ $bind: \"item.…\" }` bindings.\n */\nexport function RenderNode({ doc, id, registry = defaultRegistry, data }: RenderNodeProps): ReactElement | null {\n const node = doc.nodes[id];\n if (!node) return null;\n\n if (node.type === \"repeater\") {\n const arr = resolveValue(node.props.items as Bound<Json> | undefined, data);\n const items = Array.isArray(arr) ? arr : [];\n const template = childrenOf(doc, id)[0];\n return (\n <div data-cms={node.id} className={node.className}>\n {template\n ? items.map((item, index) => (\n <RenderNode key={index} doc={doc} id={template.id} registry={registry} data={{ ...data, item, index }} />\n ))\n : null}\n </div>\n );\n }\n\n const kids = childrenOf(doc, id).map((child) => (\n <RenderNode key={child.id} doc={doc} id={child.id} registry={registry} data={data} />\n ));\n\n const resolve = (v: Bound<Json> | undefined) => resolveValue(v, data);\n const text = (v: Bound<Json> | undefined): string => {\n const r = resolve(v);\n return r === undefined || r === null ? \"\" : String(r);\n };\n\n const renderer = registry[node.type];\n const inner = renderer ? renderer({ node, doc, children: kids, data, resolve, text }) : node.island ? null : kids;\n\n return (\n <div data-cms={node.id} data-cms-island={node.island ? node.type : undefined} className={node.className}>\n {inner}\n </div>\n );\n}\n","import { Fragment, useMemo, type ReactElement } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport { rootIds } from \"../document/reduce\";\nimport { migrateDoc, type LegacyPageDoc } from \"../document/migrate\";\nimport { emitDocCss } from \"../render/css\";\nimport { RenderNode } from \"./RenderNode\";\nimport { defaultRegistry, type DataContext, type ElementRegistry } from \"./registry\";\n\nexport interface CmsPageProps {\n doc: LegacyPageDoc | PageDoc;\n registry?: ElementRegistry;\n /** Data context that `{ $bind: \"…\" }` props + repeaters resolve against. */\n data?: DataContext;\n /** Inject the compiled stylesheet. Set false when the host emits CSS itself. */\n includeStyles?: boolean;\n}\n\n/** Render a full page document: the compiled stylesheet + every section. */\nexport function CmsPage({\n doc: input,\n registry = defaultRegistry,\n data,\n includeStyles = true,\n}: CmsPageProps): ReactElement {\n // Renders a pre-`sections[]` document correctly rather than in whatever order\n // its stale order keys happen to imply. The check is an `Array.isArray`, and\n // an already-migrated document comes back by reference, so the memo costs a\n // migrated host nothing.\n const doc = useMemo(() => migrateDoc(input), [input]);\n\n return (\n <Fragment>\n {includeStyles ? <style data-cms-styles=\"\">{emitDocCss(doc)}</style> : null}\n {rootIds(doc).map((id: string) => (\n <RenderNode key={id} doc={doc} id={id} registry={registry} data={data} />\n ))}\n </Fragment>\n );\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n} from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport type { DataContext, ElementRegistry } from \"../react/registry\";\nimport { CmsPage } from \"../react/CmsPage\";\n\nexport interface CanvasProps {\n doc: PageDoc;\n selection: string | null;\n onSelect: (id: string | null) => void;\n apply: (op: PageOp) => void;\n /** Custom element registry so custom node types render on the canvas (not a blank placeholder). */\n registry?: ElementRegistry;\n /** Data context for `{ $bind }` props + repeaters previewed on the canvas. */\n data?: DataContext;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n/**\n * The edit surface: renders the live page and overlays a selection box. Click to\n * select; drag the box to move (px constraints). Phase 1 cut: free-parent\n * move + resize handles, stack/grid reordering, and snapping come next.\n */\nexport function Canvas({ doc, selection, onSelect, apply, registry, data }: CanvasProps): ReactElement {\n const ref = useRef<HTMLDivElement>(null);\n const [box, setBox] = useState<Box | null>(null);\n const drag = useRef<{ x: number; y: number; left: number; top: number } | null>(null);\n\n useLayoutEffect(() => {\n const root = ref.current;\n if (!root || !selection) {\n setBox(null);\n return;\n }\n const el = root.querySelector(`[data-cms=\"${cssEscape(selection)}\"]`);\n if (!el) {\n setBox(null);\n return;\n }\n const r = el.getBoundingClientRect();\n const rootRect = root.getBoundingClientRect();\n setBox({\n x: r.left - rootRect.left + root.scrollLeft,\n y: r.top - rootRect.top + root.scrollTop,\n w: r.width,\n h: r.height,\n });\n }, [selection, doc]);\n\n const handleClick = (e: ReactMouseEvent<HTMLDivElement>) => {\n const target = (e.target as HTMLElement).closest(\"[data-cms]\");\n onSelect(target ? target.getAttribute(\"data-cms\") : null);\n };\n\n const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!selection) return;\n const c = doc.nodes[selection]?.constraints?.base;\n const left = c && c.left && typeof c.left === \"object\" ? c.left.value : 0;\n const top = c && c.top && typeof c.top === \"object\" ? c.top.value : 0;\n drag.current = { x: e.clientX, y: e.clientY, left, top };\n e.currentTarget.setPointerCapture(e.pointerId);\n e.stopPropagation();\n };\n\n const handlePointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d || !selection) return;\n apply({\n t: \"set_constraints\",\n id: selection,\n breakpoint: \"base\",\n patch: {\n left: { value: Math.round(d.left + (e.clientX - d.x)), unit: \"px\" },\n top: { value: Math.round(d.top + (e.clientY - d.y)), unit: \"px\" },\n },\n });\n };\n\n const handlePointerUp = () => {\n drag.current = null;\n };\n\n const surface: CSSProperties = {\n position: \"relative\",\n overflow: \"auto\",\n height: \"100%\",\n background: \"var(--fcms-canvas)\",\n };\n const overlay: CSSProperties = box\n ? {\n position: \"absolute\",\n left: box.x,\n top: box.y,\n width: box.w,\n height: box.h,\n outline: \"2px solid var(--fcms-accent, #8b5cf6)\",\n outlineOffset: -1,\n cursor: \"move\",\n touchAction: \"none\",\n }\n : { display: \"none\" };\n\n return (\n <div ref={ref} onClick={handleClick} style={surface}>\n <CmsPage doc={doc} registry={registry} data={data} />\n <div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={overlay}\n />\n </div>\n );\n}\n\nfunction cssEscape(value: string): string {\n return value.replace(/[\"\\\\]/g, \"\\\\$&\");\n}\n","import { Fragment, useState, type DragEvent as ReactDragEvent, type ReactElement } from \"react\";\nimport type { NodeId, PageDoc } from \"../document/types\";\nimport { childrenOf, rootIds } from \"../document/reduce\";\nimport { fractionalKey as keyBetween } from \"@particle-academy/fancy-doc-commons\";\n\nexport interface LayersPanelProps {\n doc: PageDoc;\n selection: string | null;\n onSelect: (id: string) => void;\n /** Reparent/reorder a node (drag-to-reorder). Omit to disable dragging. */\n onMove?: (id: NodeId, parent: NodeId | null, order: string) => void;\n}\n\nconst MIME = \"application/x-cms-node\";\n\n/** True when `maybeAncestor` is `id` itself or one of its ancestors. */\nfunction isAncestorOrSelf(doc: PageDoc, id: string, maybeAncestor: string): boolean {\n for (let cur: string | null = id; cur; cur = doc.nodes[cur]?.parent ?? null) {\n if (cur === maybeAncestor) return true;\n }\n return false;\n}\n\n/** The section/layer tree. Click a row to select; drag a row onto another to reorder. */\nexport function LayersPanel({ doc, selection, onSelect, onMove }: LayersPanelProps): ReactElement {\n const [overId, setOverId] = useState<string | null>(null);\n\n return (\n <div style={{ overflow: \"auto\", padding: 8, fontSize: 13, fontFamily: \"system-ui, sans-serif\" }}>\n {rootIds(doc).map((id: string) => (\n <LayerRow key={id} doc={doc} id={id} depth={0} selection={selection} onSelect={onSelect} onMove={onMove} overId={overId} setOverId={setOverId} />\n ))}\n </div>\n );\n}\n\ninterface LayerRowProps {\n doc: PageDoc;\n id: string;\n depth: number;\n selection: string | null;\n onSelect: (id: string) => void;\n onMove?: (id: NodeId, parent: NodeId | null, order: string) => void;\n overId: string | null;\n setOverId: (id: string | null) => void;\n}\n\nfunction LayerRow({ doc, id, depth, selection, onSelect, onMove, overId, setOverId }: LayerRowProps): ReactElement | null {\n const node = doc.nodes[id];\n if (!node) return null;\n const selected = selection === id;\n const draggable = Boolean(onMove);\n\n const drop = (e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setOverId(null);\n if (!onMove) return;\n const dragId = e.dataTransfer.getData(MIME);\n // Reject no-op + any move that would drop a node into its own subtree.\n if (!dragId || dragId === id || isAncestorOrSelf(doc, id, dragId)) return;\n // Place the dragged node immediately after this row, among this row's siblings.\n const siblings = childrenOf(doc, node.parent);\n const idx = siblings.findIndex((n) => n.id === id);\n const next = siblings[idx + 1];\n onMove(dragId, node.parent, keyBetween(node.order, next ? next.order : null));\n };\n\n return (\n <Fragment>\n <button\n type=\"button\"\n draggable={draggable}\n onClick={() => onSelect(id)}\n onDragStart={(e) => {\n e.dataTransfer.setData(MIME, id);\n e.dataTransfer.effectAllowed = \"move\";\n }}\n onDragOver={(e) => {\n if (!onMove) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n if (overId !== id) setOverId(id);\n }}\n onDragLeave={() => overId === id && setOverId(null)}\n onDrop={drop}\n style={{\n display: \"block\",\n width: \"100%\",\n textAlign: \"left\",\n border: \"none\",\n borderRadius: 6,\n cursor: draggable ? \"grab\" : \"pointer\",\n padding: \"4px 8px\",\n paddingLeft: 8 + depth * 14,\n background: selected ? \"var(--fcms-sel-bg)\" : \"transparent\",\n color: selected ? \"var(--fcms-sel-fg)\" : \"var(--fcms-row-fg)\",\n font: \"inherit\",\n boxShadow: overId === id ? \"inset 0 -2px 0 0 var(--fcms-accent, #8b5cf6)\" : \"none\",\n }}\n >\n <span style={{ opacity: 0.6 }}>{node.type}</span> · {id}\n </button>\n {childrenOf(doc, id).map((child) => (\n <LayerRow key={child.id} doc={doc} id={child.id} depth={depth + 1} selection={selection} onSelect={onSelect} onMove={onMove} overId={overId} setOverId={setOverId} />\n ))}\n </Fragment>\n );\n}\n","import { useId, type CSSProperties, type ReactElement } from \"react\";\nimport type { PageDoc, StyleProps } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\n\nexport interface InspectorProps {\n doc: PageDoc;\n selection: string | null;\n apply: (op: PageOp) => void;\n}\n\nconst label: CSSProperties = {\n display: \"block\",\n fontSize: 11,\n textTransform: \"uppercase\",\n letterSpacing: \"0.04em\",\n color: \"var(--fcms-muted)\",\n margin: \"10px 0 4px\",\n};\nconst input: CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n padding: \"6px 8px\",\n borderRadius: 6,\n border: \"1px solid var(--fcms-border)\",\n background: \"var(--fcms-input-bg)\",\n color: \"var(--fcms-fg)\",\n font: \"inherit\",\n fontSize: 13,\n};\n\n/**\n * Contextual property editor for the selected node. Every change is one op.\n *\n * Each `<label>` here is a SIBLING of its control rather than wrapping it, so\n * none of them were associated: clicking a label focused nothing and a screen\n * reader announced the panel as unlabelled boxes. (`NodeInspector` wraps its\n * controls, which associates them implicitly — these did not.)\n *\n * `htmlFor`/`id` fixes that, and `data-cms-field` gives each control the stable\n * handle the Human+ contract asks for so an agent addresses a field by name\n * instead of guessing at the DOM.\n */\nexport function Inspector({ doc, selection, apply }: InspectorProps): ReactElement {\n // Before the early return — every hook must run on every render. fancy-flow\n // shipped a blank-editor crash by getting this wrong in the same shape of\n // component.\n const uid = useId();\n const fieldId = (key: string) => `${uid}-${key}`;\n\n const node = selection ? doc.nodes[selection] : null;\n if (!node) {\n return (\n <div style={{ padding: 16, color: \"var(--fcms-muted)\", fontFamily: \"system-ui, sans-serif\", fontSize: 13 }}>\n Select an element to edit.\n </div>\n );\n }\n\n const s = node.style.base;\n const setStyle = (patch: Partial<StyleProps>) =>\n apply({ t: \"set_style\", id: node.id, breakpoint: \"base\", patch });\n const setProp = (key: string, value: unknown) =>\n apply({ t: \"set_props\", id: node.id, patch: { [key]: value } });\n\n return (\n <div style={{ overflow: \"auto\", padding: 16, fontFamily: \"system-ui, sans-serif\", height: \"100%\", boxSizing: \"border-box\" }}>\n <div style={{ fontSize: 13, fontWeight: 600, color: \"var(--fcms-fg)\" }}>{node.type}</div>\n <div style={{ fontSize: 11, color: \"var(--fcms-muted)\", marginBottom: 8 }}>{node.id}</div>\n\n {node.type === \"text\" ? (\n <>\n <label style={label} htmlFor={fieldId(\"content\")}>Content</label>\n <textarea\n id={fieldId(\"content\")}\n data-cms-field=\"content\"\n style={{ ...input, minHeight: 64, resize: \"vertical\" }}\n value={typeof node.props.content === \"string\" ? node.props.content : \"\"}\n onChange={(e) => setProp(\"content\", e.target.value)}\n />\n </>\n ) : null}\n\n {node.type === \"image\" ? (\n <>\n <label style={label} htmlFor={fieldId(\"src\")}>Source</label>\n <input\n id={fieldId(\"src\")}\n data-cms-field=\"src\"\n style={input}\n value={typeof node.props.src === \"string\" ? node.props.src : \"\"}\n onChange={(e) => setProp(\"src\", e.target.value)}\n />\n </>\n ) : null}\n\n <label style={label} htmlFor={fieldId(\"background\")}>Background</label>\n <input\n id={fieldId(\"background\")}\n data-cms-field=\"background\"\n style={input}\n placeholder=\"#ffffff | gradient | url(…)\"\n value={s.background ?? \"\"}\n onChange={(e) => setStyle({ background: e.target.value })}\n />\n\n <label style={label} htmlFor={fieldId(\"color\")}>Text color</label>\n <input\n id={fieldId(\"color\")}\n data-cms-field=\"color\"\n style={input}\n placeholder=\"#0f172a\"\n value={s.color ?? \"\"}\n onChange={(e) => setStyle({ color: e.target.value })}\n />\n\n <label style={label} htmlFor={fieldId(\"fontSize\")}>Font size (px)</label>\n <input\n id={fieldId(\"fontSize\")}\n data-cms-field=\"fontSize\"\n type=\"number\"\n style={input}\n value={s.fontSize?.value ?? \"\"}\n onChange={(e) => setStyle({ fontSize: { value: Number(e.target.value) || 0, unit: \"px\" } })}\n />\n\n <label style={label} htmlFor={fieldId(\"padding\")}>Padding (px)</label>\n <input\n id={fieldId(\"padding\")}\n data-cms-field=\"padding\"\n type=\"number\"\n style={input}\n value={s.padding?.value ?? \"\"}\n onChange={(e) => setStyle({ padding: { value: Number(e.target.value) || 0, unit: \"px\" } })}\n />\n\n <label style={label} htmlFor={fieldId(\"opacity\")}>Opacity</label>\n <input\n id={fieldId(\"opacity\")}\n data-cms-field=\"opacity\"\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n max=\"1\"\n style={input}\n value={s.opacity ?? \"\"}\n onChange={(e) => setStyle({ opacity: Number(e.target.value) })}\n />\n </div>\n );\n}\n","import 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\";\n\n/**\n * Element insertion — shared by `EditablePage` (inline editing) and `Editor`\n * (the standalone WYSIWYG shell).\n *\n * This used to live entirely inside EditablePage, which meant the embeddable\n * `Editor` had no way to add an element at all: starting from `emptyDoc()` gave\n * a blank canvas with nothing to select and no control to insert anything, so\n * a host embedding `Editor` could not author a page from scratch (#3).\n * EditablePage had the menu but no `onChange` to hand the document back —\n * each surface had half of what an embedding host needs.\n */\n\n/** Node types that accept children, so an insert lands *inside* them. */\nexport const CONTAINER_TYPES = new Set([\n \"section\",\n \"frame\",\n \"stack\",\n \"grid\",\n \"shape\",\n \"card\",\n \"device\",\n \"repeater\",\n]);\n\nexport type AddKind =\n | \"text\"\n | \"heading\"\n | \"button\"\n | \"link\"\n | \"image\"\n | \"box\"\n | \"stack\"\n | \"grid\"\n | \"card\"\n | \"callout\"\n | \"divider\"\n | \"code\"\n | \"richtext\"\n | \"repeater\";\n\nexport const ADD_DEFAULTS: Record<\n AddKind,\n { type: string; props: Record<string, Json>; style: StyleProps; layout?: LayoutMode }\n> = {\n text: { type: \"text\", props: { content: \"New text\" }, style: { color: \"inherit\" } },\n heading: { type: \"heading\", props: { content: \"New heading\" }, style: { fontSize: { value: 28, unit: \"px\" }, fontWeight: 700 } },\n button: { type: \"button\", props: { label: \"Button\", href: \"#\", variant: \"primary\" }, style: {} },\n link: { type: \"link\", props: { content: \"link text\", href: \"#\" }, style: { color: \"#7c3aed\" } },\n image: { type: \"image\", props: { src: \"\", alt: \"\" }, style: {} },\n box: { type: \"frame\", props: {}, style: { padding: { value: 16, unit: \"px\" } } },\n stack: { type: \"stack\", props: {}, style: { gap: { value: 12, unit: \"px\" } }, layout: \"stack\" },\n grid: { type: \"grid\", props: {}, style: { gap: { value: 12, unit: \"px\" } }, layout: \"grid\" },\n card: { type: \"card\", props: {}, style: { padding: { value: 16, unit: \"px\" }, radius: { value: 12, unit: \"px\" }, border: \"1px solid #e2e8f0\" } },\n callout: { type: \"callout\", props: { content: \"Heads up — this is a callout.\", variant: \"info\" }, style: {} },\n divider: { type: \"divider\", props: {}, style: {} },\n code: { type: \"code\", props: { content: \"npm install @particle-academy/react-fancy\", lang: \"bash\" }, style: {} },\n richtext: { type: \"richtext\", props: { html: \"<p>Rich <strong>text</strong> with <em>inline</em> formatting.</p>\" }, style: {} },\n repeater: { type: \"repeater\", props: { items: \"\" }, style: { gap: { value: 12, unit: \"px\" } }, layout: \"stack\" },\n};\n\nexport const ADD_MENU: Array<{ kind: AddKind; label: string }> = [\n { kind: \"heading\", label: \"Heading\" },\n { kind: \"text\", label: \"Text\" },\n { kind: \"button\", label: \"Button\" },\n { kind: \"link\", label: \"Link\" },\n { kind: \"image\", label: \"Image\" },\n { kind: \"card\", label: \"Card\" },\n { kind: \"callout\", label: \"Callout\" },\n { kind: \"stack\", label: \"Stack\" },\n { kind: \"grid\", label: \"Grid\" },\n { kind: \"box\", label: \"Box\" },\n { kind: \"divider\", label: \"Divider\" },\n { kind: \"code\", label: \"Code\" },\n { kind: \"richtext\", label: \"Rich text\" },\n { kind: \"repeater\", label: \"Repeater\" },\n];\n\n/**\n * Where a new node of `kind` should land, given the current selection.\n *\n * Into the selected container; else alongside the selected node; else the last\n * section — and when the page has no sections at all, at the top level, which\n * is what makes authoring from `emptyDoc()` possible.\n */\nexport function resolveInsertParent(doc: PageDoc, selectedId: NodeId | null): NodeId | null {\n const selected = selectedId ? doc.nodes[selectedId] : null;\n if (selected) {\n return CONTAINER_TYPES.has(selected.type) ? selected.id : selected.parent;\n }\n return lastRootId(doc);\n}\n\n/**\n * Build the `insert_node` op for adding `kind` to `doc`.\n *\n * Pure — returns the op plus the new id so the caller can select it. Callers\n * apply the op through their own editor state.\n */\nexport function buildInsertOp(\n doc: PageDoc,\n kind: AddKind,\n selectedId: NodeId | null,\n /** Explicit target, overriding selection — used by drag-and-drop. */\n targetId?: NodeId | null,\n): { op: PageOp; id: NodeId } {\n const parent =\n targetId !== undefined\n ? targetId && doc.nodes[targetId]\n ? CONTAINER_TYPES.has(doc.nodes[targetId]!.type)\n ? targetId\n : doc.nodes[targetId]!.parent\n : null\n : resolveInsertParent(doc, selectedId);\n\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\n return {\n id,\n op: {\n t: \"insert_node\",\n node: {\n id,\n type: def.type,\n parent,\n order,\n layout: def.layout,\n props: { ...def.props },\n style: { base: { ...def.style } },\n },\n } as PageOp,\n };\n}\n","import { useEffect, useMemo, useRef, useState, type CSSProperties, type ReactElement } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { DataContext, ElementRegistry } from \"../react/registry\";\nimport { useEditor, type EditorApi } from \"./useEditor\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { Canvas } from \"./Canvas\";\nimport { LayersPanel } from \"./LayersPanel\";\nimport { Inspector } from \"./Inspector\";\nimport { ADD_MENU, buildInsertOp, type AddKind } from \"./insert\";\nimport { emptyDoc } from \"../document/types\";\n\nexport interface EditorProps {\n /**\n * Initial document; edits are surfaced via {@link EditorProps.onChange}.\n * Omit to start from an empty page.\n */\n defaultValue?: PageDoc;\n onChange?: (doc: PageDoc) => void;\n /**\n * Custom element registry — mirrors {@link CmsPageProps.registry} so the edit\n * canvas renders your own node types instead of a blank placeholder. Pass the\n * same registry you give `CmsPage` at runtime.\n */\n registry?: ElementRegistry;\n /** Data context that `{ $bind: \"…\" }` props + repeaters preview against on the canvas. */\n data?: DataContext;\n}\n\n/**\n * The fancy-cms editor: layers · canvas · inspector over the op-spine.\n *\n * The chrome is plain markup **deliberately**, and stays that way. It themes\n * through the `--fcms-*` layer defined at the bottom of this file — light by\n * default, dark under `prefers-color-scheme` or a `.dark` ancestor — and\n * react-fancy's primitives are hardcoded Tailwind palette classes that read no\n * custom properties, so swapping them in would ignore `--fcms-accent` and strand\n * a themed host with a half-themed editor.\n *\n * An earlier revision of this comment said the chrome \"graduates to react-fancy\n * next\". That predates the token layer by three weeks and is no longer the\n * plan; it is recorded here because it is the kind of note that gets acted on\n * long after it stopped being true.\n */\nexport function Editor({ defaultValue, onChange, registry, data }: EditorProps): ReactElement {\n // Render an empty page rather than throwing on a missing document. Reading\n // `.sections` off undefined crashed the entire editor, which is a hostile way\n // to tell a host \"you haven't passed a doc yet\" (#3).\n const initial = useMemo(() => defaultValue ?? emptyDoc(\"untitled\"), [defaultValue]);\n const ed = useEditor(initial);\n const first = useRef(true);\n\n // Notify depends ONLY on the doc — the latest onChange lives in a ref, so an\n // inline-closure consumer (whose handler identity changes every render) can't\n // re-trigger the notify and loop it (#1).\n const onChangeRef = useLatestRef(onChange);\n useEffect(() => {\n if (first.current) {\n first.current = false;\n return;\n }\n onChangeRef.current?.(ed.state.doc);\n }, [ed.state.doc, onChangeRef]);\n\n const shell: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"220px 1fr 300px\",\n height: \"100%\",\n minHeight: 0,\n background: \"var(--fcms-bg)\",\n color: \"var(--fcms-fg)\",\n border: \"1px solid var(--fcms-border)\",\n borderRadius: 12,\n overflow: \"hidden\",\n };\n\n return (\n <div className=\"fancy-cms-editor\" style={shell}>\n <style>{CHROME_CSS}</style>\n <div style={{ borderRight: \"1px solid var(--fcms-border)\", display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <Toolbar ed={ed} />\n <LayersPanel\n doc={ed.state.doc}\n selection={ed.state.selection}\n onSelect={ed.select}\n onMove={(id, parent, order) => ed.apply({ t: \"move_node\", id, parent, order })}\n />\n </div>\n <Canvas doc={ed.state.doc} selection={ed.state.selection} onSelect={ed.select} apply={ed.apply} registry={registry} data={data} />\n <div style={{ borderLeft: \"1px solid var(--fcms-border)\", minHeight: 0 }}>\n <Inspector doc={ed.state.doc} selection={ed.state.selection} apply={ed.apply} />\n </div>\n </div>\n );\n}\n\nfunction Toolbar({ ed }: { ed: EditorApi }): ReactElement {\n const btn: CSSProperties = {\n font: \"inherit\",\n fontSize: 12,\n padding: \"4px 10px\",\n borderRadius: 6,\n border: \"1px solid var(--fcms-border)\",\n background: \"var(--fcms-bg)\",\n color: \"var(--fcms-fg)\",\n cursor: \"pointer\",\n };\n return (\n <div\n style={{\n display: \"flex\",\n gap: 6,\n padding: 8,\n borderBottom: \"1px solid var(--fcms-border)\",\n fontFamily: \"system-ui, sans-serif\",\n }}\n >\n <button type=\"button\" style={{ ...btn, opacity: ed.canUndo ? 1 : 0.4 }} disabled={!ed.canUndo} onClick={ed.undo}>\n Undo\n </button>\n <button type=\"button\" style={{ ...btn, opacity: ed.canRedo ? 1 : 0.4 }} disabled={!ed.canRedo} onClick={ed.redo}>\n Redo\n </button>\n <AddElementMenu ed={ed} btn={btn} />\n </div>\n );\n}\n\n/**\n * Insert control for the standalone editor.\n *\n * Without this, `Editor` could not add an element at all: a host starting from\n * `emptyDoc()` got a blank canvas with nothing to select and no way to put\n * anything on it (#3). The palette itself was only ever wired into\n * `EditablePage`, which has no `onChange` to hand the document back — so\n * neither surface alone was embeddable.\n */\nfunction AddElementMenu({ ed, btn }: { ed: EditorApi; btn: CSSProperties }): ReactElement {\n const [open, setOpen] = useState(false);\n\n // Dismiss on any outside click or Escape.\n useEffect(() => {\n if (!open) return;\n const close = () => setOpen(false);\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && setOpen(false);\n window.addEventListener(\"click\", close);\n window.addEventListener(\"keydown\", onKey);\n return () => {\n window.removeEventListener(\"click\", close);\n window.removeEventListener(\"keydown\", onKey);\n };\n }, [open]);\n\n const add = (kind: AddKind) => {\n const { op, id } = buildInsertOp(ed.state.doc, kind, ed.state.selection);\n ed.apply(op);\n ed.select(id);\n setOpen(false);\n };\n\n return (\n <div style={{ position: \"relative\", marginLeft: \"auto\" }} onClick={(e) => e.stopPropagation()}>\n <button\n type=\"button\"\n style={{ ...btn, borderColor: \"var(--fcms-accent, #7c3aed)\" }}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n data-cms-add-trigger=\"\"\n onClick={() => setOpen((v) => !v)}\n >\n + Add\n </button>\n {open && (\n <div\n role=\"menu\"\n data-cms-add-menu=\"\"\n style={{\n position: \"absolute\",\n top: \"calc(100% + 4px)\",\n left: 0,\n zIndex: 20,\n minWidth: 150,\n maxHeight: 280,\n overflowY: \"auto\",\n padding: 4,\n borderRadius: 8,\n border: \"1px solid var(--fcms-border)\",\n background: \"var(--fcms-bg)\",\n boxShadow: \"0 12px 32px rgba(0,0,0,.28)\",\n }}\n >\n {ADD_MENU.map((item) => (\n <button\n key={item.kind}\n type=\"button\"\n role=\"menuitem\"\n data-cms-add={item.kind}\n style={{\n ...btn,\n display: \"block\",\n width: \"100%\",\n textAlign: \"left\",\n border: 0,\n background: \"transparent\",\n }}\n onClick={() => add(item.kind)}\n >\n {item.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Editor chrome tokens. Light by default; dark under `@media (prefers-color-scheme:\n * dark)` OR an ancestor `.dark` / `[data-theme=\"dark\"]` (Tailwind/class strategy),\n * with an explicit `.light` / `[data-theme=\"light\"]` ancestor forcing light back.\n * The panels below read `var(--fcms-*)`, so the whole editor embeds cleanly in a\n * dark app. `color-scheme` flips native inputs + scrollbars too.\n */\nconst DARK_VARS =\n \"color-scheme:dark;--fcms-bg:#0b0f19;--fcms-fg:#e5e7eb;--fcms-muted:#94a3b8;--fcms-border:#27272a;\" +\n \"--fcms-canvas:#0f141f;--fcms-input-bg:#111827;--fcms-row-fg:#cbd5e1;\" +\n \"--fcms-sel-bg:color-mix(in oklab, #8b5cf6 24%, transparent);--fcms-sel-fg:#ddd6fe;\" +\n \"--fcms-drop:#ec4899;--fcms-danger:#fca5a5;\";\nconst LIGHT_VARS =\n \"color-scheme:light;--fcms-bg:#ffffff;--fcms-fg:#0f172a;--fcms-muted:#64748b;--fcms-border:#e2e8f0;\" +\n \"--fcms-canvas:#f8fafc;--fcms-input-bg:#ffffff;--fcms-row-fg:#334155;--fcms-sel-bg:#ede9fe;--fcms-sel-fg:#5b21b6;\" +\n \"--fcms-drop:#db2777;--fcms-danger:#dc2626;\";\nconst CHROME_CSS =\n `.fancy-cms-editor{--fcms-accent:#8b5cf6;${LIGHT_VARS}}` +\n `@media (prefers-color-scheme:dark){.fancy-cms-editor{${DARK_VARS}}}` +\n `:where(.light,[data-theme=\"light\"]) .fancy-cms-editor{${LIGHT_VARS}}` +\n `:where(.dark,[data-theme=\"dark\"]) .fancy-cms-editor{${DARK_VARS}}`;\n","import { type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport { isBinding, type Binding, type LayoutMode, type Length, type Node, type StyleProps } from \"../document/types\";\nimport type { NodeTransform } from \"./EditablePage\";\n\nexport interface NodeInspectorProps {\n node: Node;\n /** The currently-applied transform for this node (sampled from the active keyframe). */\n transform: NodeTransform;\n /** Live measured size, used as the placeholder when width/height are still \"auto\". */\n measured: { w: number; h: number };\n /** Patch the node's props (commits through the op-spine → undoable). */\n onProps: (patch: Record<string, unknown>) => void;\n /** Patch the node's base style. */\n onStyle: (patch: Partial<StyleProps>) => void;\n /** Set how a container arranges its children (free / stack / grid). */\n onLayout?: (layout: LayoutMode | undefined) => void;\n /** Commit a transform (position / size / opacity / scale / rotate) into the active keyframe. */\n onTransform: (t: NodeTransform) => void;\n onRemove: () => void;\n onClose: () => void;\n}\n\nconst CONTAINER_TYPES = new Set([\"section\", \"frame\", \"stack\", \"grid\", \"shape\", \"card\", \"device\"]);\n\n/**\n * The on-page element Inspector — a docked properties panel shown while a node\n * is selected in EditMode. Where the floating toolbar handles quick text tweaks,\n * this is the full surface: content, element-specific props (a button's label /\n * link / variant, an image's src / alt, …), exact position + size, and the style\n * box. Every control writes through the op-spine or the active keyframe, so edits\n * are undoable and animatable.\n */\nexport function NodeInspector({\n node,\n transform,\n measured,\n onProps,\n onStyle,\n onLayout,\n onTransform,\n onRemove,\n onClose,\n}: NodeInspectorProps): ReactElement {\n const base = node.style.base ?? {};\n const setT = (patch: Partial<NodeTransform>) => onTransform({ ...transform, ...patch });\n\n // Props rendered with a bespoke control; everything else falls through to the\n // generic key/value editor so any addon's props get controls for free.\n const handled = new Set([\"content\", \"label\", \"html\"]);\n const extraKeys = Object.keys(node.props).filter(\n (k) => !handled.has(k) && ([\"string\", \"number\", \"boolean\"].includes(typeof node.props[k]) || isBinding(node.props[k])),\n );\n\n return (\n <div style={panel} onPointerDown={(e) => e.stopPropagation()}>\n <div style={headRow}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, minWidth: 0 }}>\n <strong style={{ fontSize: 12, textTransform: \"capitalize\" }}>{node.type}</strong>\n <span style={{ fontSize: 10, opacity: 0.5, fontFamily: \"ui-monospace, monospace\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\n {node.id}\n </span>\n </div>\n <span style={{ flex: 1 }} />\n <button type=\"button\" style={{ ...iconBtn, color: \"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"]}
|
|
1
|
+
{"version":3,"sources":["../src/document/migrate.ts","../src/document/reduce.ts","../src/editor/state.ts","../src/editor/useEditor.ts","../src/editor/useLatestRef.ts","../src/document/types.ts","../src/render/css.ts","../src/react/registry.tsx","../src/react/RenderNode.tsx","../src/react/CmsPage.tsx","../src/editor/Canvas.tsx","../src/editor/LayersPanel.tsx","../src/editor/Inspector.tsx","../src/editor/insert.ts","../src/editor/Editor.tsx","../src/editor/NodeInspector.tsx","../src/editor/editorOps.ts","../src/editor/EditablePage.tsx"],"names":["input","fractionalKey","docChildrenOf","descendantsOf","useReducer","useCallback","useMemo","useRef","useEffect","len","body","jsx","label","Fragment","useState","useLayoutEffect","jsxs","keyBetween","useId","CONTAINER_TYPES","Z","cssEscape","doc","ContextMenu"],"mappings":"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","file":"editor.cjs","sourcesContent":["/**\n * Forward migration for documents saved before roots were ordered like every\n * other sibling group.\n *\n * ## Why this cannot be skipped\n *\n * The old model carried top-level order TWICE: a `sections: NodeId[]` array, and\n * an `order` key on every node like any other sibling. The old `reorder_sections`\n * op permuted the array and **left the order keys untouched** — so the moment a\n * user dragged a section, the two disagreed, and `sections[]` was the one that\n * won (it was what the renderer walked).\n *\n * Which means: dropping `sections[]` and falling back to the order keys does not\n * merely lose a redundant field. On every page whose sections were ever\n * rearranged, it silently reverts them to the order they were first created in.\n * The page still loads, nothing throws, and the layout is wrong.\n *\n * So the migration rewrites root `order` keys to agree with `sections[]` before\n * the array is discarded. `sections[]` is treated as authoritative for exactly\n * the reason above.\n *\n * ## Idempotent, and safe on already-migrated documents\n *\n * A doc with no `sections` is returned unchanged (same reference). Running this\n * twice is a no-op, so a host can call it unconditionally on load rather than\n * tracking a schema version.\n */\n\nimport { fractionalKey } from \"@particle-academy/fancy-doc-commons\";\nimport type { NodeId, PageDoc } from \"./types\";\n\n/** A `PageDoc` as persisted before this change — with the extra array. */\nexport type LegacyPageDoc = PageDoc & { sections?: NodeId[] };\n\nexport interface MigrateResult {\n doc: PageDoc;\n /** True when the input actually carried `sections[]` and was rewritten. */\n migrated: boolean;\n /**\n * Ids listed in `sections[]` with no matching node. Skipped rather than\n * faulted — a dangling id is a stale write, and refusing to open the document\n * over it would be a worse outcome than dropping it.\n */\n danglingIds: NodeId[];\n /**\n * Roots present in `nodes` but missing from `sections[]`. Under the old model\n * these did not render at all. They are appended after the listed sections, in\n * their existing order-key order, because making a node visible is recoverable\n * and deleting one is not.\n */\n unlistedRootIds: NodeId[];\n}\n\n/**\n * Migrate a possibly-legacy document, reporting what was found.\n *\n * Use {@link migrateDoc} unless you want the diagnostics.\n */\nexport function migrateDocVerbose(input: LegacyPageDoc | PageDoc): MigrateResult {\n const legacy = input as LegacyPageDoc;\n const sections = legacy.sections;\n\n if (!Array.isArray(sections)) {\n return { doc: input as PageDoc, migrated: false, danglingIds: [], unlistedRootIds: [] };\n }\n\n const danglingIds: NodeId[] = [];\n const ordered: NodeId[] = [];\n const seen = new Set<NodeId>();\n\n for (const id of sections) {\n if (!input.nodes[id]) {\n danglingIds.push(id);\n continue;\n }\n // A duplicate id in the array would otherwise be minted two order keys, and\n // the second would overwrite the first — take the first occurrence.\n if (seen.has(id)) continue;\n seen.add(id);\n ordered.push(id);\n }\n\n // Roots that the array never mentioned. Sorted by their existing key so their\n // relative order is at least stable rather than dependent on object insertion.\n const unlistedRootIds = Object.values(input.nodes)\n .filter((n) => n.parent === null && !seen.has(n.id))\n .sort((a, b) => (a.order < b.order ? -1 : a.order > b.order ? 1 : 0))\n .map((n) => n.id);\n\n const finalOrder = [...ordered, ...unlistedRootIds];\n\n const nodes = { ...input.nodes };\n let prev: string | null = null;\n\n for (const id of finalOrder) {\n const key = fractionalKey(prev, null);\n nodes[id] = { ...nodes[id]!, order: key };\n prev = key;\n }\n\n const { sections: _dropped, ...rest } = legacy;\n\n return {\n doc: { ...rest, nodes } as PageDoc,\n migrated: true,\n danglingIds,\n unlistedRootIds,\n };\n}\n\n/**\n * Migrate a possibly-legacy document. Safe to call on every load — an\n * already-migrated document is returned unchanged, by reference.\n */\nexport function migrateDoc(input: LegacyPageDoc | PageDoc): PageDoc {\n return migrateDocVerbose(input).doc;\n}\n\n/** True when the document still carries the pre-migration `sections[]` array. */\nexport function needsMigration(input: LegacyPageDoc | PageDoc): boolean {\n return Array.isArray((input as LegacyPageDoc).sections);\n}\n","/**\n * The pure, total reducer. `reduce(doc, op)` returns a new document; an invalid\n * op is a **logged no-op** (returns the same doc, `seq` unchanged). That single\n * property is what makes undo, revisions, collaboration, and agent edits all\n * flow through one spine.\n *\n * Ordering: EVERY level uses the fractional `order` field among siblings,\n * including the roots. Top-level order used to live in a separate `sections`\n * array, which meant two mechanisms that could disagree — a node could be a\n * root by `parent === null` and missing from `sections`, and then simply not\n * render, with nothing reporting it.\n */\nimport {\n childrenOf as docChildrenOf,\n descendantsOf,\n fractionalKey,\n} from \"@particle-academy/fancy-doc-commons\";\nimport type { Action, Node, NodeId, PageDoc, StyleProps } from \"./types\";\nimport type { PageOp } from \"./ops\";\n\nexport interface ReduceOptions {\n /** Called when an op can't apply. Default: silent. */\n onInvalid?: (op: PageOp, reason: string) => void;\n}\n\n/**\n * Children of a node (or the roots when `parent` is null), in order.\n *\n * Delegates to doc-commons so the CMS, fancy-screens and any future surface\n * walk a document the same way. Roots are no longer a special case.\n */\nexport function childrenOf(doc: PageDoc, parent: NodeId | null): Node[] {\n return docChildrenOf<Node>(doc, parent);\n}\n\n/**\n * The top-level node ids, in order.\n *\n * Replaces the old `doc.sections` array. Kept as a named helper because the two\n * things callers actually wanted from that array — \"list the roots\" and \"the\n * last root\" — read badly as `childrenOf(doc, null).map(n => n.id)` at every\n * call site.\n */\nexport function rootIds(doc: PageDoc): NodeId[] {\n return childrenOf(doc, null).map((n) => n.id);\n}\n\n/** The last top-level node, or null — the default parent for a new insert. */\nexport function lastRootId(doc: PageDoc): NodeId | null {\n const r = rootIds(doc);\n return r[r.length - 1] ?? null;\n}\n\n/** Every transitive descendant id of `id` (excludes `id`). */\nexport function descendantIds(doc: PageDoc, id: NodeId): NodeId[] {\n return descendantsOf<Node>(doc, id);\n}\n\nfunction patchNode(doc: PageDoc, id: NodeId, patch: Partial<Node>): PageDoc {\n const node = doc.nodes[id]!;\n return {\n ...doc,\n nodes: { ...doc.nodes, [id]: { ...node, ...patch } },\n seq: doc.seq + 1,\n };\n}\n\nexport function reduce(doc: PageDoc, op: PageOp, opts: ReduceOptions = {}): PageDoc {\n const invalid = (reason: string): PageDoc => {\n opts.onInvalid?.(op, reason);\n return doc;\n };\n\n switch (op.t) {\n case \"insert_node\": {\n if (doc.nodes[op.node.id]) return invalid(\"node id already exists\");\n if (op.node.parent !== null && !doc.nodes[op.node.parent]) return invalid(\"parent not found\");\n return {\n ...doc,\n nodes: { ...doc.nodes, [op.node.id]: op.node },\n seq: doc.seq + 1,\n };\n }\n\n case \"remove_node\": {\n if (!doc.nodes[op.id]) return invalid(\"node not found\");\n const dead = new Set<NodeId>([op.id, ...descendantIds(doc, op.id)]);\n const nodes: Record<NodeId, Node> = {};\n for (const id of Object.keys(doc.nodes)) {\n if (!dead.has(id)) nodes[id] = doc.nodes[id]!;\n }\n return {\n ...doc,\n nodes,\n seq: doc.seq + 1,\n };\n }\n\n case \"move_node\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n if (op.parent === op.id) return invalid(\"cannot parent a node to itself\");\n if (op.parent !== null && !doc.nodes[op.parent]) return invalid(\"new parent not found\");\n if (op.parent !== null && descendantIds(doc, op.id).includes(op.parent)) {\n return invalid(\"move would create a cycle\");\n }\n return {\n ...doc,\n nodes: { ...doc.nodes, [op.id]: { ...node, parent: op.parent, order: op.order } },\n seq: doc.seq + 1,\n };\n }\n\n case \"set_node_props\": {\n if (!doc.nodes[op.id]) return invalid(\"node not found\");\n return patchNode(doc, op.id, {\n props: { ...doc.nodes[op.id]!.props, ...op.patch } as unknown as Node[\"props\"],\n });\n }\n\n case \"set_layout\": {\n if (!doc.nodes[op.id]) return invalid(\"node not found\");\n return patchNode(doc, op.id, { layout: op.layout });\n }\n\n case \"set_style\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n const prev = node.style[op.breakpoint] ?? {};\n return patchNode(doc, op.id, {\n style: { ...node.style, [op.breakpoint]: { ...prev, ...op.patch } } as Node[\"style\"],\n });\n }\n\n case \"set_constraints\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n const base = node.constraints ?? { base: { width: \"hug\", height: \"hug\" } };\n const prev = base[op.breakpoint] ?? {};\n return patchNode(doc, op.id, {\n constraints: { ...base, [op.breakpoint]: { ...prev, ...op.patch } } as Node[\"constraints\"],\n });\n }\n\n case \"set_animation\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n const list = node.animations ?? [];\n const idx = list.findIndex((a) => a.id === op.anim.id);\n return patchNode(doc, op.id, {\n animations: idx >= 0 ? list.map((a, i) => (i === idx ? op.anim : a)) : [...list, op.anim],\n });\n }\n\n case \"remove_animation\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n return patchNode(doc, op.id, {\n animations: (node.animations ?? []).filter((a) => a.id !== op.animId),\n });\n }\n\n case \"set_action\": {\n const node = doc.nodes[op.id];\n if (!node) return invalid(\"node not found\");\n const list = node.actions ?? [];\n let actions: Action[];\n if (op.action === null) actions = list.filter((_, i) => i !== op.index);\n else if (op.index >= list.length) actions = [...list, op.action];\n else actions = list.map((a, i) => (i === op.index ? op.action! : a));\n return patchNode(doc, op.id, { actions });\n }\n\n case \"set_meta\":\n return { ...doc, meta: { ...doc.meta, ...op.patch }, seq: doc.seq + 1 };\n\n case \"set_theme\":\n return { ...doc, theme: { ...doc.theme, ...op.patch }, seq: doc.seq + 1 };\n\n case \"reorder_roots\": {\n // Roots are ordered by their own fractional keys now, so a reorder\n // REWRITES those keys rather than replacing a list. Still validated as a\n // permutation: a partial list would silently drop roots out of the page.\n const currentRoots = childrenOf(doc, null);\n const current = new Set(currentRoots.map((n) => n.id));\n const same =\n op.order.length === currentRoots.length && op.order.every((id) => current.has(id));\n if (!same) return invalid(\"reorder must be a permutation of the current roots\");\n\n const nodes = { ...doc.nodes };\n let prev: string | null = null;\n for (const id of op.order) {\n prev = fractionalKey(prev, null);\n nodes[id] = { ...nodes[id]!, order: prev };\n }\n return { ...doc, nodes, seq: doc.seq + 1 };\n }\n\n default:\n return invalid(`unknown op \"${(op as PageOp).t}\"`);\n }\n}\n\n/** Apply a sequence of ops, threading the document. */\nexport function reduceAll(doc: PageDoc, ops: PageOp[], opts?: ReduceOptions): PageDoc {\n return ops.reduce((d, op) => reduce(d, op, opts), doc);\n}\n\n/**\n * Inverse op(s) for undo, computed against the **pre-op** document. Structural\n * ops invert cleanly; merge-style ops (`set_props`/`set_style`/`set_constraints`)\n * restore the previous values of the touched keys (keys that did not previously\n * exist can't be deleted via a merge — a known Phase-0 limitation).\n */\nexport function invert(doc: PageDoc, op: PageOp): PageOp[] {\n switch (op.t) {\n case \"insert_node\":\n return [{ t: \"remove_node\", id: op.node.id }];\n\n case \"remove_node\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n // Re-insert the subtree parent-first, then restore section order.\n const ids = [op.id, ...descendantIds(doc, op.id)];\n const inserts: PageOp[] = ids.map((id) => ({ t: \"insert_node\", node: doc.nodes[id]! }));\n if (node.parent === null) {\n inserts.push({ t: \"reorder_roots\", order: childrenOf(doc, null).map((n) => n.id) });\n }\n return inserts;\n }\n\n case \"move_node\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n const back: PageOp[] = [{ t: \"move_node\", id: op.id, parent: node.parent, order: node.order }];\n if (node.parent === null) {\n back.push({ t: \"reorder_roots\", order: childrenOf(doc, null).map((n) => n.id) });\n }\n return back;\n }\n\n case \"set_node_props\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n const prev: Record<string, unknown> = {};\n for (const k of Object.keys(op.patch)) prev[k] = node.props[k];\n return [{ t: \"set_node_props\", id: op.id, patch: prev }];\n }\n\n case \"set_layout\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n return [{ t: \"set_layout\", id: op.id, layout: node.layout }];\n }\n\n case \"set_style\": {\n const node = doc.nodes[op.id];\n if (!node) return [];\n const prevBp = (node.style[op.breakpoint] ?? {}) as Record<string, unknown>;\n const prev: Partial<StyleProps> = {};\n for (const k of Object.keys(op.patch)) (prev as Record<string, unknown>)[k] = prevBp[k];\n return [{ t: \"set_style\", id: op.id, breakpoint: op.breakpoint, patch: prev }];\n }\n\n case \"set_meta\":\n return [{ t: \"set_meta\", patch: pick(doc.meta, Object.keys(op.patch)) }];\n\n case \"set_theme\":\n return [{ t: \"set_theme\", patch: pick(doc.theme, Object.keys(op.patch)) }];\n\n case \"reorder_roots\":\n return [{ t: \"reorder_roots\", order: childrenOf(doc, null).map((n) => n.id) }];\n\n default:\n return [];\n }\n}\n\nfunction pick<T extends object>(obj: T, keys: string[]): Partial<T> {\n const out: Partial<T> = {};\n for (const k of keys) (out as Record<string, unknown>)[k] = (obj as Record<string, unknown>)[k];\n return out;\n}\n","/**\n * Editor state engine — pure and framework-agnostic so it's unit-testable.\n * `useEditor` wraps this with `useReducer`. Undo/redo uses document snapshots\n * (simple + robust); the op-level `invert` in the spine is for collab/op-stream\n * undo.\n */\nimport { migrateDoc, type LegacyPageDoc } from \"../document/migrate\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { reduce } from \"../document/reduce\";\n\nexport interface EditorState {\n doc: PageDoc;\n past: PageDoc[];\n future: PageDoc[];\n selection: string | null;\n}\n\nexport type EditorAction =\n | { type: \"apply\"; op: PageOp }\n | { type: \"undo\" }\n | { type: \"redo\" }\n | { type: \"select\"; id: string | null }\n | { type: \"replace\"; doc: PageDoc };\n\nconst HISTORY_LIMIT = 100;\n\n/**\n * Seed the editor from a document.\n *\n * Migrates a pre-`sections[]` document on the way in. Doing it here rather than\n * leaving it to the host is deliberate: the legacy failure is SILENT — a page\n * whose sections were ever reordered would simply open in the wrong order, with\n * nothing thrown and nothing logged — so a host that has not heard of the\n * migration is exactly the one that needs it. Already-migrated documents pass\n * through by reference.\n */\nexport function initEditor(doc: LegacyPageDoc | PageDoc): EditorState {\n return { doc: migrateDoc(doc), past: [], future: [], selection: null };\n}\n\nexport function editorReduce(state: EditorState, action: EditorAction): EditorState {\n switch (action.type) {\n case \"apply\": {\n const next = reduce(state.doc, action.op);\n if (next === state.doc) return state; // invalid op → no-op, no history entry\n return {\n ...state,\n doc: next,\n past: [...state.past, state.doc].slice(-HISTORY_LIMIT),\n future: [],\n };\n }\n case \"undo\": {\n if (state.past.length === 0) return state;\n const prev = state.past[state.past.length - 1]!;\n return {\n ...state,\n doc: prev,\n past: state.past.slice(0, -1),\n future: [state.doc, ...state.future],\n };\n }\n case \"redo\": {\n if (state.future.length === 0) return state;\n const next = state.future[0]!;\n return {\n ...state,\n doc: next,\n past: [...state.past, state.doc],\n future: state.future.slice(1),\n };\n }\n case \"select\":\n return state.selection === action.id ? state : { ...state, selection: action.id };\n case \"replace\":\n return state.doc === action.doc ? state : { ...state, doc: action.doc, future: [] };\n default:\n return state;\n }\n}\n","import { useCallback, useMemo, useReducer } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport { editorReduce, initEditor, type EditorState } from \"./state\";\n\nexport interface EditorApi {\n state: EditorState;\n /** Dispatch a mutation through the op-spine (records an undo snapshot). */\n apply: (op: PageOp) => void;\n undo: () => void;\n redo: () => void;\n select: (id: string | null) => void;\n /** Replace the document wholesale (e.g. a controlled `value` change). */\n replace: (doc: PageDoc) => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport function useEditor(initialDoc: PageDoc): EditorApi {\n const [state, dispatch] = useReducer(editorReduce, initialDoc, initEditor);\n const apply = useCallback((op: PageOp) => dispatch({ type: \"apply\", op }), []);\n const undo = useCallback(() => dispatch({ type: \"undo\" }), []);\n const redo = useCallback(() => dispatch({ type: \"redo\" }), []);\n const select = useCallback((id: string | null) => dispatch({ type: \"select\", id }), []);\n const replace = useCallback((doc: PageDoc) => dispatch({ type: \"replace\", doc }), []);\n\n return useMemo(\n () => ({\n state,\n apply,\n undo,\n redo,\n select,\n replace,\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n }),\n [state, apply, undo, redo, select, replace],\n );\n}\n","import { useEffect, useRef, type RefObject } from \"react\";\n\n/**\n * Hold the latest `value` in a ref, synced in an effect after every render.\n *\n * Notify effects read `ref.current` instead of closing over a callback prop, so\n * their dependency arrays stay data-only (`doc`, `selection`, …). A consumer\n * passing an inline closure — new identity every render, the most natural\n * usage — can then never re-trigger the notify: without this, notify → consumer\n * setState → render → new closure identity → effect re-fires → notify → … loops\n * unbounded (#1). Standard uncontrolled-with-notify hygiene.\n */\nexport function useLatestRef<T>(value: T): RefObject<T> {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n });\n return ref;\n}\n","/**\n * Stages document model — see `fancy-ui/docs/fancy-cms.md` §4.\n *\n * A page is a vertical stack of full-bleed **sections**; inside each, **layers**\n * are positioned by constraints (free + bold stays responsive), with stack/grid\n * containers where structure is wanted. Nodes live in a **flat map** keyed by id\n * (Figma-style) so ops target a stable identity and collab merges stay clean.\n */\n\nimport type { DocNode, DocTree } from \"@particle-academy/fancy-doc-commons\";\n\n/** A node id. Alias of doc-commons' `DocId`, kept for readability in CMS code. */\nexport type NodeId = string;\n\nexport type ScrollMode = \"snap\" | \"smooth\";\n\n/** Ordered, mobile-first. Convention: `\"base\" | \"md\" | \"lg\"`. */\nexport type Breakpoint = string;\n\nexport type Json = string | number | boolean | null | Json[] | { [key: string]: Json };\n\n/** A literal value OR a binding into the page's data context (`{ $bind: \"profile.coins\" }`). */\nexport interface Binding {\n $bind: string;\n}\nexport type Bound<T> = T | Binding;\n\nexport function isBinding(v: unknown): v is Binding {\n return typeof v === \"object\" && v !== null && typeof (v as Binding).$bind === \"string\";\n}\n\n// ── Sizing ────────────────────────────────────────────────────────────────\n\nexport type LengthUnit = \"px\" | \"%\" | \"vw\" | \"vh\" | \"rem\" | \"fr\";\nexport interface Length {\n value: number;\n unit: LengthUnit;\n}\nexport type SizeMode = Length | \"fill\" | \"hug\";\n\nexport interface Constraints {\n /** Pinned offsets within a `free` parent (null = unpinned). */\n left?: Length | null;\n right?: Length | null;\n top?: Length | null;\n bottom?: Length | null;\n centerX?: boolean;\n centerY?: boolean;\n width: SizeMode;\n height: SizeMode;\n}\n\nexport type LayoutMode = \"free\" | \"stack\" | \"grid\";\n\n// ── Style (compiles deterministically to CSS in both emitters) ──────────────\n\nexport interface StyleProps {\n // box\n padding?: Length;\n margin?: Length;\n radius?: Length;\n // color / surface\n background?: string; // color | gradient | url(...)\n color?: string;\n opacity?: number;\n // typography\n fontFamily?: string;\n fontSize?: Length;\n fontWeight?: number;\n lineHeight?: number;\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\n letterSpacing?: Length;\n // border / shadow / effects (static)\n border?: string;\n boxShadow?: string;\n transform?: string;\n filter?: string;\n // container knobs (when layout = stack | grid)\n gap?: Length;\n direction?: \"row\" | \"column\";\n columns?: number;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\";\n}\n\n/** Per-breakpoint overrides; `base` is required, others cascade mobile-first. */\nexport type PerBreakpoint<T> = { base: T } & Partial<Record<Breakpoint, Partial<T>>>;\n\n// ── Animation (typed for Phase 2; ignored by the static CSS emitter) ────────\n\nexport type AnimDriver = \"enter\" | \"scroll\" | \"loop\" | \"hover\" | \"click\" | \"drag\";\nexport interface Keyframe {\n at: number; // 0..1\n props: Record<string, number | string>;\n}\nexport interface Anim {\n id: string;\n driver: AnimDriver;\n keyframes: Keyframe[];\n range?: { start: number; end: number };\n ease?: string;\n duration?: number;\n delay?: number;\n stagger?: number;\n once?: boolean;\n emit?: \"css\" | \"js\";\n}\n\n// ── Actions (typed for Phase 3/4) ───────────────────────────────────────────\n\nexport type ActionEvent = \"click\" | \"submit\" | \"change\" | \"load\" | \"timer\" | \"scroll-into\" | \"hover\";\nexport type ActionHandler =\n | { kind: \"navigate\"; href: Bound<string> }\n | { kind: \"submitForm\"; endpoint: string; method?: \"post\" | \"put\" }\n | { kind: \"mutate\"; target: string; value: Bound<Json> }\n | { kind: \"callEndpoint\"; endpoint: string; method?: string }\n | { kind: \"runFlow\"; flow: string }\n | { kind: \"openModal\"; node: NodeId }\n | { kind: \"openDrawer\"; node: NodeId }\n | { kind: \"playTimeline\"; section: NodeId }\n | { kind: \"toggleNode\"; node: NodeId };\nexport interface Action {\n on: ActionEvent;\n do: ActionHandler;\n}\n\n// ── Nodes & document ────────────────────────────────────────────────────────\n\n/**\n * A page node.\n *\n * Extends {@link DocNode} from `fancy-doc-commons` rather than redeclaring it:\n * id / type / parent / order / props are the shared substrate every Fancy\n * document surface uses, and the CMS adds its own domain fields on top. That\n * is what lets `registerDocBridge` drive a CMS page and a fancy-screens screen\n * through the same tools, with no CMS-specific bridge.\n */\nexport interface Node extends DocNode<Record<string, Bound<Json>>> {\n /** Addon key: `section | text | image | shape | stack | grid | frame | <addon>`. */\n type: string;\n /** How this node arranges its children. */\n layout?: LayoutMode;\n /** How this node positions itself within its parent. */\n constraints?: PerBreakpoint<Constraints>;\n style: PerBreakpoint<StyleProps>;\n animations?: Anim[];\n actions?: Action[];\n /** Repeater: render this node once per item of a bound array. */\n repeat?: { each: Binding; as: string };\n /**\n * Host CSS class(es) applied to the node's element. The migration enabler:\n * reuse the host site's existing stylesheet for pixel-perfect reproduction\n * instead of re-deriving every rule through {@link StyleProps}.\n */\n className?: string;\n /** Derived from the addon manifest — interactive/3rd-party ⇒ hydration island. */\n island?: boolean;\n}\n\nexport interface ThemeTokens {\n name?: string;\n [key: string]: Json | undefined;\n}\n\nexport interface PageMeta {\n title: string;\n slug: string;\n scrollMode: ScrollMode;\n seo?: Record<string, string>;\n}\n\nexport interface PageDoc {\n id: string;\n /** Op counter — collab ordering + revision checkpoints. */\n seq: number;\n meta: PageMeta;\n theme: ThemeTokens;\n /** Ordered, mobile-first. */\n breakpoints: Breakpoint[];\n /**\n * Flat map — not a nested tree. This is a {@link DocTree}, so every\n * doc-commons walk (`childrenOf`, `roots`, `descendantsOf`) works on it\n * directly.\n *\n * There is no separate `sections[]` any more. Top-level order used to live in\n * its own array while every other level used fractional `order` keys, which\n * meant two ordering mechanisms that could disagree — a node could be a root\n * by `parent === null` and absent from `sections`, and then simply not\n * render. Roots are now ordered exactly like any other sibling group.\n */\n nodes: Record<NodeId, Node>;\n}\n\n/** Default breakpoint → min-width (px) map. `base` has no media query. */\nexport const DEFAULT_BREAKPOINTS: Record<string, number> = {\n base: 0,\n md: 768,\n lg: 1024,\n};\n\n/** A minimal empty document. */\nexport function emptyDoc(id: string, slug = \"/\"): PageDoc {\n return {\n id,\n seq: 0,\n meta: { title: \"Untitled\", slug, scrollMode: \"smooth\" },\n theme: { name: \"default\" },\n breakpoints: [\"base\", \"md\", \"lg\"],\n nodes: {},\n };\n}\n","/**\n * The JS style → CSS emitter (one half of the dual-emitter pair; the PHP\n * `particle-academy/fancy-cms` mirrors it byte-for-byte). Output is\n * **deterministic**: declarations are sorted, selectors and media blocks use a\n * fixed format, and nodes are emitted in sorted-id order — so the parity harness\n * can diff the two engines' CSS exactly.\n *\n * Phase 0 covers the static subset (layout / constraints / style). Motion lands\n * in Phase 2.\n */\nimport {\n DEFAULT_BREAKPOINTS,\n type Constraints,\n type Length,\n type Node,\n type PageDoc,\n type SizeMode,\n type StyleProps,\n} from \"../document/types\";\n\nconst selectorFor = (id: string): string => `[data-cms=\"${id}\"]`;\n\nfunction lengthToCss(len: Length): string {\n return `${len.value}${len.unit}`;\n}\n\nfunction sizeToCss(size: SizeMode): string {\n if (size === \"fill\") return \"100%\";\n if (size === \"hug\") return \"auto\";\n return lengthToCss(size);\n}\n\nconst ALIGN: Record<string, string> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n stretch: \"stretch\",\n};\nconst JUSTIFY: Record<string, string> = {\n start: \"flex-start\",\n center: \"center\",\n end: \"flex-end\",\n between: \"space-between\",\n around: \"space-around\",\n};\n\n/** Map StyleProps → CSS declarations (property → value). */\nfunction styleDecls(style: Partial<StyleProps>): Record<string, string> {\n const d: Record<string, string> = {};\n if (style.padding) d[\"padding\"] = lengthToCss(style.padding);\n if (style.margin) d[\"margin\"] = lengthToCss(style.margin);\n if (style.radius) d[\"border-radius\"] = lengthToCss(style.radius);\n if (style.background !== undefined) d[\"background\"] = style.background;\n if (style.color !== undefined) d[\"color\"] = style.color;\n if (style.opacity !== undefined) d[\"opacity\"] = String(style.opacity);\n if (style.fontFamily !== undefined) d[\"font-family\"] = style.fontFamily;\n if (style.fontSize) d[\"font-size\"] = lengthToCss(style.fontSize);\n if (style.fontWeight !== undefined) d[\"font-weight\"] = String(style.fontWeight);\n if (style.lineHeight !== undefined) d[\"line-height\"] = String(style.lineHeight);\n if (style.textAlign !== undefined) d[\"text-align\"] = style.textAlign;\n if (style.letterSpacing) d[\"letter-spacing\"] = lengthToCss(style.letterSpacing);\n if (style.border !== undefined) d[\"border\"] = style.border;\n if (style.boxShadow !== undefined) d[\"box-shadow\"] = style.boxShadow;\n if (style.transform !== undefined) d[\"transform\"] = style.transform;\n if (style.filter !== undefined) d[\"filter\"] = style.filter;\n if (style.gap) d[\"gap\"] = lengthToCss(style.gap);\n if (style.align !== undefined) d[\"align-items\"] = ALIGN[style.align] ?? style.align;\n if (style.justify !== undefined) d[\"justify-content\"] = JUSTIFY[style.justify] ?? style.justify;\n return d;\n}\n\n/** Container behaviour from `node.layout`. */\nfunction layoutDecls(node: Node): Record<string, string> {\n const d: Record<string, string> = {};\n if (node.layout === \"stack\") {\n d[\"display\"] = \"flex\";\n d[\"flex-direction\"] = node.style.base.direction ?? \"column\";\n } else if (node.layout === \"grid\") {\n d[\"display\"] = \"grid\";\n d[\"grid-template-columns\"] = `repeat(${node.style.base.columns ?? 1}, 1fr)`;\n } else if (node.layout === \"free\") {\n d[\"position\"] = \"relative\";\n }\n return d;\n}\n\n/** Self-positioning from constraints (absolute pins only inside a `free` parent). */\nfunction constraintDecls(c: Partial<Constraints>, parentFree: boolean): Record<string, string> {\n const d: Record<string, string> = {};\n const transforms: string[] = [];\n if (parentFree) {\n d[\"position\"] = \"absolute\";\n if (c.left) d[\"left\"] = lengthToCss(c.left);\n if (c.right) d[\"right\"] = lengthToCss(c.right);\n if (c.top) d[\"top\"] = lengthToCss(c.top);\n if (c.bottom) d[\"bottom\"] = lengthToCss(c.bottom);\n if (c.centerX) {\n d[\"left\"] = \"50%\";\n transforms.push(\"translateX(-50%)\");\n }\n if (c.centerY) {\n d[\"top\"] = \"50%\";\n transforms.push(\"translateY(-50%)\");\n }\n if (transforms.length) d[\"transform\"] = transforms.join(\" \");\n }\n if (c.width) d[\"width\"] = sizeToCss(c.width);\n if (c.height) d[\"height\"] = sizeToCss(c.height);\n return d;\n}\n\nfunction isParentFree(doc: PageDoc, node: Node): boolean {\n if (node.parent === null) return false; // sections stack in the page flow\n const parent = doc.nodes[node.parent];\n return !parent || parent.layout === undefined || parent.layout === \"free\";\n}\n\nfunction serializeRule(selector: string, decls: Record<string, string>, indent: string): string {\n const props = Object.keys(decls).sort();\n if (props.length === 0) return \"\";\n const body = props.map((p) => `${indent} ${p}: ${decls[p]};`).join(\"\\n\");\n return `${indent}${selector} {\\n${body}\\n${indent}}`;\n}\n\n/** Emit the full stylesheet for a document. Deterministic. */\nexport function emitDocCss(doc: PageDoc): string {\n const breakpointPx = DEFAULT_BREAKPOINTS;\n const blocks: string[] = [];\n\n for (const id of Object.keys(doc.nodes).sort()) {\n const node = doc.nodes[id]!;\n const selector = selectorFor(id);\n const parentFree = isParentFree(doc, node);\n\n // base = style.base + layout + constraints.base\n const base: Record<string, string> = {\n ...layoutDecls(node),\n ...(node.constraints ? constraintDecls(node.constraints.base, parentFree) : {}),\n ...styleDecls(node.style.base),\n };\n const baseRule = serializeRule(selector, base, \"\");\n if (baseRule) blocks.push(baseRule);\n\n // per-breakpoint overrides (mobile-first, in doc order, skipping base)\n for (const bp of doc.breakpoints) {\n if (bp === \"base\") continue;\n const px = breakpointPx[bp];\n if (px === undefined) continue;\n const decls: Record<string, string> = {\n ...(node.constraints?.[bp] ? constraintDecls(node.constraints[bp]!, parentFree) : {}),\n ...(node.style[bp] ? styleDecls(node.style[bp]!) : {}),\n };\n const inner = serializeRule(selector, decls, \" \");\n if (inner) blocks.push(`@media (min-width: ${px}px) {\\n${inner}\\n}`);\n }\n }\n\n return blocks.join(\"\\n\\n\") + (blocks.length ? \"\\n\" : \"\");\n}\n","import type { ReactNode } from \"react\";\nimport { isBinding, type Bound, type Json, type Node, type PageDoc } from \"../document/types\";\n\n/** The page data context bindings resolve against (e.g. server props, repeater `item`). */\nexport type DataContext = Record<string, unknown>;\n\nexport interface ElementContext {\n node: Node;\n doc: PageDoc;\n /** Pre-rendered child nodes, in order. */\n children: ReactNode;\n /** The data context this node renders in (page data + any repeater scope). */\n data?: DataContext;\n /** Resolve a (possibly bound) value to its raw resolved value. */\n resolve: (v: Bound<Json> | undefined) => unknown;\n /** Resolve a (possibly bound) value to a display string. */\n text: (v: Bound<Json> | undefined) => string;\n}\n\n/**\n * Renders the INNER content of a node. The outer `[data-cms]` wrapper is added\n * by {@link RenderNode}, so a renderer only returns what goes inside.\n */\nexport type ElementRenderer = (ctx: ElementContext) => ReactNode;\n\nexport type ElementRegistry = Record<string, ElementRenderer>;\n\n/** Read a dotted path (`a.b.c`) out of the data context. */\nexport function getPath(data: DataContext | undefined, path: string): unknown {\n return path.split(\".\").reduce<unknown>((o, k) => (o == null ? undefined : (o as Record<string, unknown>)[k]), data);\n}\n\n/** Resolve a value: a `{ $bind }` reads from the data context; anything else is literal. */\nexport function resolveValue(v: Bound<Json> | undefined, data?: DataContext): unknown {\n if (v === undefined || v === null) return v;\n if (isBinding(v)) return getPath(data, v.$bind);\n return v;\n}\n\n/** Built-in native elements. Containers render their children; leaves render content. */\nexport const defaultRegistry: ElementRegistry = {\n section: ({ children }) => children,\n stack: ({ children }) => children,\n grid: ({ children }) => children,\n frame: ({ children }) => children,\n shape: ({ children }) => children,\n card: ({ children }) => children,\n text: ({ node, text }) => text(node.props.content),\n heading: ({ node, text }) => text(node.props.content) || \"Heading\",\n // Rich text — inline-formatted HTML (gradient spans, links, <code>, …) that\n // plain `text` can't express. The author owns the markup (it's their content).\n richtext: ({ node, text }) => <div dangerouslySetInnerHTML={{ __html: text(node.props.html) }} />,\n link: ({ node, text }) => (\n <a href={text(node.props.href) || \"#\"} style={{ color: \"inherit\", textDecoration: \"underline\" }}>\n {text(node.props.content) || \"link\"}\n </a>\n ),\n divider: () => <hr style={{ border: \"none\", borderTop: \"1px solid #e2e8f0\", margin: 0 }} />,\n callout: ({ node, text }) => {\n const tone = ({ info: \"#3b82f6\", success: \"#10b981\", warning: \"#f59e0b\", danger: \"#ef4444\" } as Record<string, string>)[text(node.props.variant)] ?? \"#3b82f6\";\n return (\n <div style={{ display: \"flex\", gap: 10, padding: \"12px 14px\", borderRadius: 10, background: `${tone}14`, borderLeft: `3px solid ${tone}` }}>\n <span style={{ fontSize: 13 }}>{text(node.props.content) || \"Callout\"}</span>\n </div>\n );\n },\n code: ({ node, text }) => (\n <pre style={{ margin: 0, padding: \"12px 14px\", borderRadius: 10, background: \"#0b1220\", color: \"#e2e8f0\", fontFamily: \"ui-monospace, monospace\", fontSize: 13, overflowX: \"auto\" }}>\n <code>{text(node.props.content)}</code>\n </pre>\n ),\n button: ({ node, text }) => {\n const label = text(node.props.label) || text(node.props.content) || \"Button\";\n const variant = text(node.props.variant) || \"primary\";\n return <span data-cms-button={variant} style={buttonStyle(variant)}>{label}</span>;\n },\n image: ({ node, text }) => (\n <img\n src={text(node.props.src)}\n alt={text(node.props.alt)}\n style={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", display: \"block\" }}\n />\n ),\n};\n\n/**\n * A self-contained button look so the `button` primitive renders sensibly with\n * zero host CSS. Hosts that want their own button classes override the `button`\n * renderer in their registry (e.g. the sandbox maps it to `.btn .btn-primary`).\n */\nfunction buttonStyle(variant: string): import(\"react\").CSSProperties {\n const base: import(\"react\").CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n padding: \"9px 16px\",\n borderRadius: 8,\n fontWeight: 600,\n fontSize: 14,\n lineHeight: 1,\n cursor: \"pointer\",\n userSelect: \"none\",\n };\n if (variant === \"ghost\") return { ...base, background: \"transparent\", color: \"inherit\", border: \"1px solid currentColor\" };\n if (variant === \"outline\") return { ...base, background: \"transparent\", color: \"#7c3aed\", border: \"1px solid #7c3aed\" };\n return { ...base, background: \"#7c3aed\", color: \"#fff\", border: \"1px solid #7c3aed\" };\n}\n","import type { ReactElement } from \"react\";\nimport type { Bound, Json, PageDoc } from \"../document/types\";\nimport { childrenOf } from \"../document/reduce\";\nimport { defaultRegistry, resolveValue, type DataContext, type ElementRegistry } from \"./registry\";\n\nexport interface RenderNodeProps {\n doc: PageDoc;\n id: string;\n registry?: ElementRegistry;\n /** Data context bindings resolve against (page data + any repeater scope). */\n data?: DataContext;\n}\n\n/**\n * Render one node (and its subtree) to a `[data-cms]`-tagged element. The CSS\n * emitted by `emitDocCss` targets these `data-cms` handles. Interactive /\n * 3rd-party **islands** with no registered renderer become an empty, sized\n * placeholder the host hydrates client-side — mirroring the PHP renderer.\n *\n * `repeater` nodes are special-cased: their first child is a template rendered\n * once per item of the bound `items` array, each in a scope that exposes `item`\n * and `index` to nested `{ $bind: \"item.…\" }` bindings.\n */\nexport function RenderNode({ doc, id, registry = defaultRegistry, data }: RenderNodeProps): ReactElement | null {\n const node = doc.nodes[id];\n if (!node) return null;\n\n if (node.type === \"repeater\") {\n const arr = resolveValue(node.props.items as Bound<Json> | undefined, data);\n const items = Array.isArray(arr) ? arr : [];\n const template = childrenOf(doc, id)[0];\n return (\n <div data-cms={node.id} className={node.className}>\n {template\n ? items.map((item, index) => (\n <RenderNode key={index} doc={doc} id={template.id} registry={registry} data={{ ...data, item, index }} />\n ))\n : null}\n </div>\n );\n }\n\n const kids = childrenOf(doc, id).map((child) => (\n <RenderNode key={child.id} doc={doc} id={child.id} registry={registry} data={data} />\n ));\n\n const resolve = (v: Bound<Json> | undefined) => resolveValue(v, data);\n const text = (v: Bound<Json> | undefined): string => {\n const r = resolve(v);\n return r === undefined || r === null ? \"\" : String(r);\n };\n\n const renderer = registry[node.type];\n const inner = renderer ? renderer({ node, doc, children: kids, data, resolve, text }) : node.island ? null : kids;\n\n return (\n <div data-cms={node.id} data-cms-island={node.island ? node.type : undefined} className={node.className}>\n {inner}\n </div>\n );\n}\n","import { Fragment, useMemo, type ReactElement } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport { rootIds } from \"../document/reduce\";\nimport { migrateDoc, type LegacyPageDoc } from \"../document/migrate\";\nimport { emitDocCss } from \"../render/css\";\nimport { RenderNode } from \"./RenderNode\";\nimport { defaultRegistry, type DataContext, type ElementRegistry } from \"./registry\";\n\nexport interface CmsPageProps {\n doc: LegacyPageDoc | PageDoc;\n registry?: ElementRegistry;\n /** Data context that `{ $bind: \"…\" }` props + repeaters resolve against. */\n data?: DataContext;\n /** Inject the compiled stylesheet. Set false when the host emits CSS itself. */\n includeStyles?: boolean;\n}\n\n/** Render a full page document: the compiled stylesheet + every section. */\nexport function CmsPage({\n doc: input,\n registry = defaultRegistry,\n data,\n includeStyles = true,\n}: CmsPageProps): ReactElement {\n // Renders a pre-`sections[]` document correctly rather than in whatever order\n // its stale order keys happen to imply. The check is an `Array.isArray`, and\n // an already-migrated document comes back by reference, so the memo costs a\n // migrated host nothing.\n const doc = useMemo(() => migrateDoc(input), [input]);\n\n return (\n <Fragment>\n {includeStyles ? <style data-cms-styles=\"\">{emitDocCss(doc)}</style> : null}\n {rootIds(doc).map((id: string) => (\n <RenderNode key={id} doc={doc} id={id} registry={registry} data={data} />\n ))}\n </Fragment>\n );\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n} from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\nimport type { DataContext, ElementRegistry } from \"../react/registry\";\nimport { CmsPage } from \"../react/CmsPage\";\n\nexport interface CanvasProps {\n doc: PageDoc;\n selection: string | null;\n onSelect: (id: string | null) => void;\n apply: (op: PageOp) => void;\n /** Custom element registry so custom node types render on the canvas (not a blank placeholder). */\n registry?: ElementRegistry;\n /** Data context for `{ $bind }` props + repeaters previewed on the canvas. */\n data?: DataContext;\n}\n\ninterface Box {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\n/**\n * The edit surface: renders the live page and overlays a selection box. Click to\n * select; drag the box to move (px constraints). Phase 1 cut: free-parent\n * move + resize handles, stack/grid reordering, and snapping come next.\n */\nexport function Canvas({ doc, selection, onSelect, apply, registry, data }: CanvasProps): ReactElement {\n const ref = useRef<HTMLDivElement>(null);\n const [box, setBox] = useState<Box | null>(null);\n const drag = useRef<{ x: number; y: number; left: number; top: number } | null>(null);\n\n useLayoutEffect(() => {\n const root = ref.current;\n if (!root || !selection) {\n setBox(null);\n return;\n }\n const el = root.querySelector(`[data-cms=\"${cssEscape(selection)}\"]`);\n if (!el) {\n setBox(null);\n return;\n }\n const r = el.getBoundingClientRect();\n const rootRect = root.getBoundingClientRect();\n setBox({\n x: r.left - rootRect.left + root.scrollLeft,\n y: r.top - rootRect.top + root.scrollTop,\n w: r.width,\n h: r.height,\n });\n }, [selection, doc]);\n\n const handleClick = (e: ReactMouseEvent<HTMLDivElement>) => {\n const target = (e.target as HTMLElement).closest(\"[data-cms]\");\n onSelect(target ? target.getAttribute(\"data-cms\") : null);\n };\n\n const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!selection) return;\n const c = doc.nodes[selection]?.constraints?.base;\n const left = c && c.left && typeof c.left === \"object\" ? c.left.value : 0;\n const top = c && c.top && typeof c.top === \"object\" ? c.top.value : 0;\n drag.current = { x: e.clientX, y: e.clientY, left, top };\n e.currentTarget.setPointerCapture(e.pointerId);\n e.stopPropagation();\n };\n\n const handlePointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const d = drag.current;\n if (!d || !selection) return;\n apply({\n t: \"set_constraints\",\n id: selection,\n breakpoint: \"base\",\n patch: {\n left: { value: Math.round(d.left + (e.clientX - d.x)), unit: \"px\" },\n top: { value: Math.round(d.top + (e.clientY - d.y)), unit: \"px\" },\n },\n });\n };\n\n const handlePointerUp = () => {\n drag.current = null;\n };\n\n const surface: CSSProperties = {\n position: \"relative\",\n overflow: \"auto\",\n height: \"100%\",\n background: \"var(--fcms-canvas)\",\n };\n const overlay: CSSProperties = box\n ? {\n position: \"absolute\",\n left: box.x,\n top: box.y,\n width: box.w,\n height: box.h,\n outline: \"2px solid var(--fcms-accent, #8b5cf6)\",\n outlineOffset: -1,\n cursor: \"move\",\n touchAction: \"none\",\n }\n : { display: \"none\" };\n\n return (\n <div ref={ref} onClick={handleClick} style={surface}>\n <CmsPage doc={doc} registry={registry} data={data} />\n <div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={overlay}\n />\n </div>\n );\n}\n\nfunction cssEscape(value: string): string {\n return value.replace(/[\"\\\\]/g, \"\\\\$&\");\n}\n","import { Fragment, useState, type DragEvent as ReactDragEvent, type ReactElement } from \"react\";\nimport type { NodeId, PageDoc } from \"../document/types\";\nimport { childrenOf, rootIds } from \"../document/reduce\";\nimport { fractionalKey as keyBetween } from \"@particle-academy/fancy-doc-commons\";\n\nexport interface LayersPanelProps {\n doc: PageDoc;\n selection: string | null;\n onSelect: (id: string) => void;\n /** Reparent/reorder a node (drag-to-reorder). Omit to disable dragging. */\n onMove?: (id: NodeId, parent: NodeId | null, order: string) => void;\n}\n\nconst MIME = \"application/x-cms-node\";\n\n/** True when `maybeAncestor` is `id` itself or one of its ancestors. */\nfunction isAncestorOrSelf(doc: PageDoc, id: string, maybeAncestor: string): boolean {\n for (let cur: string | null = id; cur; cur = doc.nodes[cur]?.parent ?? null) {\n if (cur === maybeAncestor) return true;\n }\n return false;\n}\n\n/** The section/layer tree. Click a row to select; drag a row onto another to reorder. */\nexport function LayersPanel({ doc, selection, onSelect, onMove }: LayersPanelProps): ReactElement {\n const [overId, setOverId] = useState<string | null>(null);\n\n return (\n <div style={{ overflow: \"auto\", padding: 8, fontSize: 13, fontFamily: \"system-ui, sans-serif\" }}>\n {rootIds(doc).map((id: string) => (\n <LayerRow key={id} doc={doc} id={id} depth={0} selection={selection} onSelect={onSelect} onMove={onMove} overId={overId} setOverId={setOverId} />\n ))}\n </div>\n );\n}\n\ninterface LayerRowProps {\n doc: PageDoc;\n id: string;\n depth: number;\n selection: string | null;\n onSelect: (id: string) => void;\n onMove?: (id: NodeId, parent: NodeId | null, order: string) => void;\n overId: string | null;\n setOverId: (id: string | null) => void;\n}\n\nfunction LayerRow({ doc, id, depth, selection, onSelect, onMove, overId, setOverId }: LayerRowProps): ReactElement | null {\n const node = doc.nodes[id];\n if (!node) return null;\n const selected = selection === id;\n const draggable = Boolean(onMove);\n\n const drop = (e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setOverId(null);\n if (!onMove) return;\n const dragId = e.dataTransfer.getData(MIME);\n // Reject no-op + any move that would drop a node into its own subtree.\n if (!dragId || dragId === id || isAncestorOrSelf(doc, id, dragId)) return;\n // Place the dragged node immediately after this row, among this row's siblings.\n const siblings = childrenOf(doc, node.parent);\n const idx = siblings.findIndex((n) => n.id === id);\n const next = siblings[idx + 1];\n onMove(dragId, node.parent, keyBetween(node.order, next ? next.order : null));\n };\n\n return (\n <Fragment>\n <button\n type=\"button\"\n draggable={draggable}\n onClick={() => onSelect(id)}\n onDragStart={(e) => {\n e.dataTransfer.setData(MIME, id);\n e.dataTransfer.effectAllowed = \"move\";\n }}\n onDragOver={(e) => {\n if (!onMove) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = \"move\";\n if (overId !== id) setOverId(id);\n }}\n onDragLeave={() => overId === id && setOverId(null)}\n onDrop={drop}\n style={{\n display: \"block\",\n width: \"100%\",\n textAlign: \"left\",\n border: \"none\",\n borderRadius: 6,\n cursor: draggable ? \"grab\" : \"pointer\",\n padding: \"4px 8px\",\n paddingLeft: 8 + depth * 14,\n background: selected ? \"var(--fcms-sel-bg)\" : \"transparent\",\n color: selected ? \"var(--fcms-sel-fg)\" : \"var(--fcms-row-fg)\",\n font: \"inherit\",\n boxShadow: overId === id ? \"inset 0 -2px 0 0 var(--fcms-accent, #8b5cf6)\" : \"none\",\n }}\n >\n <span style={{ opacity: 0.6 }}>{node.type}</span> · {id}\n </button>\n {childrenOf(doc, id).map((child) => (\n <LayerRow key={child.id} doc={doc} id={child.id} depth={depth + 1} selection={selection} onSelect={onSelect} onMove={onMove} overId={overId} setOverId={setOverId} />\n ))}\n </Fragment>\n );\n}\n","import { useId, type CSSProperties, type ReactElement } from \"react\";\nimport type { PageDoc, StyleProps } from \"../document/types\";\nimport type { PageOp } from \"../document/ops\";\n\nexport interface InspectorProps {\n doc: PageDoc;\n selection: string | null;\n apply: (op: PageOp) => void;\n}\n\nconst label: CSSProperties = {\n display: \"block\",\n fontSize: 11,\n textTransform: \"uppercase\",\n letterSpacing: \"0.04em\",\n color: \"var(--fcms-muted)\",\n margin: \"10px 0 4px\",\n};\nconst input: CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n padding: \"6px 8px\",\n borderRadius: 6,\n border: \"1px solid var(--fcms-border)\",\n background: \"var(--fcms-input-bg)\",\n color: \"var(--fcms-fg)\",\n font: \"inherit\",\n fontSize: 13,\n};\n\n/**\n * Contextual property editor for the selected node. Every change is one op.\n *\n * Each `<label>` here is a SIBLING of its control rather than wrapping it, so\n * none of them were associated: clicking a label focused nothing and a screen\n * reader announced the panel as unlabelled boxes. (`NodeInspector` wraps its\n * controls, which associates them implicitly — these did not.)\n *\n * `htmlFor`/`id` fixes that, and `data-cms-field` gives each control the stable\n * handle the Human+ contract asks for so an agent addresses a field by name\n * instead of guessing at the DOM.\n */\nexport function Inspector({ doc, selection, apply }: InspectorProps): ReactElement {\n // Before the early return — every hook must run on every render. fancy-flow\n // shipped a blank-editor crash by getting this wrong in the same shape of\n // component.\n const uid = useId();\n const fieldId = (key: string) => `${uid}-${key}`;\n\n const node = selection ? doc.nodes[selection] : null;\n if (!node) {\n return (\n <div style={{ padding: 16, color: \"var(--fcms-muted)\", fontFamily: \"system-ui, sans-serif\", fontSize: 13 }}>\n Select an element to edit.\n </div>\n );\n }\n\n const s = node.style.base;\n const setStyle = (patch: Partial<StyleProps>) =>\n apply({ t: \"set_style\", id: node.id, breakpoint: \"base\", patch });\n const setProp = (key: string, value: unknown) =>\n apply({ t: \"set_node_props\", id: node.id, patch: { [key]: value } });\n\n return (\n <div style={{ overflow: \"auto\", padding: 16, fontFamily: \"system-ui, sans-serif\", height: \"100%\", boxSizing: \"border-box\" }}>\n <div style={{ fontSize: 13, fontWeight: 600, color: \"var(--fcms-fg)\" }}>{node.type}</div>\n <div style={{ fontSize: 11, color: \"var(--fcms-muted)\", marginBottom: 8 }}>{node.id}</div>\n\n {node.type === \"text\" ? (\n <>\n <label style={label} htmlFor={fieldId(\"content\")}>Content</label>\n <textarea\n id={fieldId(\"content\")}\n data-cms-field=\"content\"\n style={{ ...input, minHeight: 64, resize: \"vertical\" }}\n value={typeof node.props.content === \"string\" ? node.props.content : \"\"}\n onChange={(e) => setProp(\"content\", e.target.value)}\n />\n </>\n ) : null}\n\n {node.type === \"image\" ? (\n <>\n <label style={label} htmlFor={fieldId(\"src\")}>Source</label>\n <input\n id={fieldId(\"src\")}\n data-cms-field=\"src\"\n style={input}\n value={typeof node.props.src === \"string\" ? node.props.src : \"\"}\n onChange={(e) => setProp(\"src\", e.target.value)}\n />\n </>\n ) : null}\n\n <label style={label} htmlFor={fieldId(\"background\")}>Background</label>\n <input\n id={fieldId(\"background\")}\n data-cms-field=\"background\"\n style={input}\n placeholder=\"#ffffff | gradient | url(…)\"\n value={s.background ?? \"\"}\n onChange={(e) => setStyle({ background: e.target.value })}\n />\n\n <label style={label} htmlFor={fieldId(\"color\")}>Text color</label>\n <input\n id={fieldId(\"color\")}\n data-cms-field=\"color\"\n style={input}\n placeholder=\"#0f172a\"\n value={s.color ?? \"\"}\n onChange={(e) => setStyle({ color: e.target.value })}\n />\n\n <label style={label} htmlFor={fieldId(\"fontSize\")}>Font size (px)</label>\n <input\n id={fieldId(\"fontSize\")}\n data-cms-field=\"fontSize\"\n type=\"number\"\n style={input}\n value={s.fontSize?.value ?? \"\"}\n onChange={(e) => setStyle({ fontSize: { value: Number(e.target.value) || 0, unit: \"px\" } })}\n />\n\n <label style={label} htmlFor={fieldId(\"padding\")}>Padding (px)</label>\n <input\n id={fieldId(\"padding\")}\n data-cms-field=\"padding\"\n type=\"number\"\n style={input}\n value={s.padding?.value ?? \"\"}\n onChange={(e) => setStyle({ padding: { value: Number(e.target.value) || 0, unit: \"px\" } })}\n />\n\n <label style={label} htmlFor={fieldId(\"opacity\")}>Opacity</label>\n <input\n id={fieldId(\"opacity\")}\n data-cms-field=\"opacity\"\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n max=\"1\"\n style={input}\n value={s.opacity ?? \"\"}\n onChange={(e) => setStyle({ opacity: Number(e.target.value) })}\n />\n </div>\n );\n}\n","import 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\";\n\n/**\n * Element insertion — shared by `EditablePage` (inline editing) and `Editor`\n * (the standalone WYSIWYG shell).\n *\n * This used to live entirely inside EditablePage, which meant the embeddable\n * `Editor` had no way to add an element at all: starting from `emptyDoc()` gave\n * a blank canvas with nothing to select and no control to insert anything, so\n * a host embedding `Editor` could not author a page from scratch (#3).\n * EditablePage had the menu but no `onChange` to hand the document back —\n * each surface had half of what an embedding host needs.\n */\n\n/** Node types that accept children, so an insert lands *inside* them. */\nexport const CONTAINER_TYPES = new Set([\n \"section\",\n \"frame\",\n \"stack\",\n \"grid\",\n \"shape\",\n \"card\",\n \"device\",\n \"repeater\",\n]);\n\nexport type AddKind =\n | \"text\"\n | \"heading\"\n | \"button\"\n | \"link\"\n | \"image\"\n | \"box\"\n | \"stack\"\n | \"grid\"\n | \"card\"\n | \"callout\"\n | \"divider\"\n | \"code\"\n | \"richtext\"\n | \"repeater\";\n\nexport const ADD_DEFAULTS: Record<\n AddKind,\n { type: string; props: Record<string, Json>; style: StyleProps; layout?: LayoutMode }\n> = {\n text: { type: \"text\", props: { content: \"New text\" }, style: { color: \"inherit\" } },\n heading: { type: \"heading\", props: { content: \"New heading\" }, style: { fontSize: { value: 28, unit: \"px\" }, fontWeight: 700 } },\n button: { type: \"button\", props: { label: \"Button\", href: \"#\", variant: \"primary\" }, style: {} },\n link: { type: \"link\", props: { content: \"link text\", href: \"#\" }, style: { color: \"#7c3aed\" } },\n image: { type: \"image\", props: { src: \"\", alt: \"\" }, style: {} },\n box: { type: \"frame\", props: {}, style: { padding: { value: 16, unit: \"px\" } } },\n stack: { type: \"stack\", props: {}, style: { gap: { value: 12, unit: \"px\" } }, layout: \"stack\" },\n grid: { type: \"grid\", props: {}, style: { gap: { value: 12, unit: \"px\" } }, layout: \"grid\" },\n card: { type: \"card\", props: {}, style: { padding: { value: 16, unit: \"px\" }, radius: { value: 12, unit: \"px\" }, border: \"1px solid #e2e8f0\" } },\n callout: { type: \"callout\", props: { content: \"Heads up — this is a callout.\", variant: \"info\" }, style: {} },\n divider: { type: \"divider\", props: {}, style: {} },\n code: { type: \"code\", props: { content: \"npm install @particle-academy/react-fancy\", lang: \"bash\" }, style: {} },\n richtext: { type: \"richtext\", props: { html: \"<p>Rich <strong>text</strong> with <em>inline</em> formatting.</p>\" }, style: {} },\n repeater: { type: \"repeater\", props: { items: \"\" }, style: { gap: { value: 12, unit: \"px\" } }, layout: \"stack\" },\n};\n\nexport const ADD_MENU: Array<{ kind: AddKind; label: string }> = [\n { kind: \"heading\", label: \"Heading\" },\n { kind: \"text\", label: \"Text\" },\n { kind: \"button\", label: \"Button\" },\n { kind: \"link\", label: \"Link\" },\n { kind: \"image\", label: \"Image\" },\n { kind: \"card\", label: \"Card\" },\n { kind: \"callout\", label: \"Callout\" },\n { kind: \"stack\", label: \"Stack\" },\n { kind: \"grid\", label: \"Grid\" },\n { kind: \"box\", label: \"Box\" },\n { kind: \"divider\", label: \"Divider\" },\n { kind: \"code\", label: \"Code\" },\n { kind: \"richtext\", label: \"Rich text\" },\n { kind: \"repeater\", label: \"Repeater\" },\n];\n\n/**\n * Where a new node of `kind` should land, given the current selection.\n *\n * Into the selected container; else alongside the selected node; else the last\n * section — and when the page has no sections at all, at the top level, which\n * is what makes authoring from `emptyDoc()` possible.\n */\nexport function resolveInsertParent(doc: PageDoc, selectedId: NodeId | null): NodeId | null {\n const selected = selectedId ? doc.nodes[selectedId] : null;\n if (selected) {\n return CONTAINER_TYPES.has(selected.type) ? selected.id : selected.parent;\n }\n return lastRootId(doc);\n}\n\n/**\n * Build the `insert_node` op for adding `kind` to `doc`.\n *\n * Pure — returns the op plus the new id so the caller can select it. Callers\n * apply the op through their own editor state.\n */\nexport function buildInsertOp(\n doc: PageDoc,\n kind: AddKind,\n selectedId: NodeId | null,\n /** Explicit target, overriding selection — used by drag-and-drop. */\n targetId?: NodeId | null,\n): { op: PageOp; id: NodeId } {\n const parent =\n targetId !== undefined\n ? targetId && doc.nodes[targetId]\n ? CONTAINER_TYPES.has(doc.nodes[targetId]!.type)\n ? targetId\n : doc.nodes[targetId]!.parent\n : null\n : resolveInsertParent(doc, selectedId);\n\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\n return {\n id,\n op: {\n t: \"insert_node\",\n node: {\n id,\n type: def.type,\n parent,\n order,\n layout: def.layout,\n props: { ...def.props },\n style: { base: { ...def.style } },\n },\n } as PageOp,\n };\n}\n","import { useEffect, useMemo, useRef, useState, type CSSProperties, type ReactElement } from \"react\";\nimport type { PageDoc } from \"../document/types\";\nimport type { DataContext, ElementRegistry } from \"../react/registry\";\nimport { useEditor, type EditorApi } from \"./useEditor\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { Canvas } from \"./Canvas\";\nimport { LayersPanel } from \"./LayersPanel\";\nimport { Inspector } from \"./Inspector\";\nimport { ADD_MENU, buildInsertOp, type AddKind } from \"./insert\";\nimport { emptyDoc } from \"../document/types\";\n\nexport interface EditorProps {\n /**\n * Initial document; edits are surfaced via {@link EditorProps.onChange}.\n * Omit to start from an empty page.\n */\n defaultValue?: PageDoc;\n onChange?: (doc: PageDoc) => void;\n /**\n * Custom element registry — mirrors {@link CmsPageProps.registry} so the edit\n * canvas renders your own node types instead of a blank placeholder. Pass the\n * same registry you give `CmsPage` at runtime.\n */\n registry?: ElementRegistry;\n /** Data context that `{ $bind: \"…\" }` props + repeaters preview against on the canvas. */\n data?: DataContext;\n}\n\n/**\n * The fancy-cms editor: layers · canvas · inspector over the op-spine.\n *\n * The chrome is plain markup **deliberately**, and stays that way. It themes\n * through the `--fcms-*` layer defined at the bottom of this file — light by\n * default, dark under `prefers-color-scheme` or a `.dark` ancestor — and\n * react-fancy's primitives are hardcoded Tailwind palette classes that read no\n * custom properties, so swapping them in would ignore `--fcms-accent` and strand\n * a themed host with a half-themed editor.\n *\n * An earlier revision of this comment said the chrome \"graduates to react-fancy\n * next\". That predates the token layer by three weeks and is no longer the\n * plan; it is recorded here because it is the kind of note that gets acted on\n * long after it stopped being true.\n */\nexport function Editor({ defaultValue, onChange, registry, data }: EditorProps): ReactElement {\n // Render an empty page rather than throwing on a missing document. Reading\n // `.sections` off undefined crashed the entire editor, which is a hostile way\n // to tell a host \"you haven't passed a doc yet\" (#3).\n const initial = useMemo(() => defaultValue ?? emptyDoc(\"untitled\"), [defaultValue]);\n const ed = useEditor(initial);\n const first = useRef(true);\n\n // Notify depends ONLY on the doc — the latest onChange lives in a ref, so an\n // inline-closure consumer (whose handler identity changes every render) can't\n // re-trigger the notify and loop it (#1).\n const onChangeRef = useLatestRef(onChange);\n useEffect(() => {\n if (first.current) {\n first.current = false;\n return;\n }\n onChangeRef.current?.(ed.state.doc);\n }, [ed.state.doc, onChangeRef]);\n\n const shell: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"220px 1fr 300px\",\n height: \"100%\",\n minHeight: 0,\n background: \"var(--fcms-bg)\",\n color: \"var(--fcms-fg)\",\n border: \"1px solid var(--fcms-border)\",\n borderRadius: 12,\n overflow: \"hidden\",\n };\n\n return (\n <div className=\"fancy-cms-editor\" style={shell}>\n <style>{CHROME_CSS}</style>\n <div style={{ borderRight: \"1px solid var(--fcms-border)\", display: \"flex\", flexDirection: \"column\", minHeight: 0 }}>\n <Toolbar ed={ed} />\n <LayersPanel\n doc={ed.state.doc}\n selection={ed.state.selection}\n onSelect={ed.select}\n onMove={(id, parent, order) => ed.apply({ t: \"move_node\", id, parent, order })}\n />\n </div>\n <Canvas doc={ed.state.doc} selection={ed.state.selection} onSelect={ed.select} apply={ed.apply} registry={registry} data={data} />\n <div style={{ borderLeft: \"1px solid var(--fcms-border)\", minHeight: 0 }}>\n <Inspector doc={ed.state.doc} selection={ed.state.selection} apply={ed.apply} />\n </div>\n </div>\n );\n}\n\nfunction Toolbar({ ed }: { ed: EditorApi }): ReactElement {\n const btn: CSSProperties = {\n font: \"inherit\",\n fontSize: 12,\n padding: \"4px 10px\",\n borderRadius: 6,\n border: \"1px solid var(--fcms-border)\",\n background: \"var(--fcms-bg)\",\n color: \"var(--fcms-fg)\",\n cursor: \"pointer\",\n };\n return (\n <div\n style={{\n display: \"flex\",\n gap: 6,\n padding: 8,\n borderBottom: \"1px solid var(--fcms-border)\",\n fontFamily: \"system-ui, sans-serif\",\n }}\n >\n <button type=\"button\" style={{ ...btn, opacity: ed.canUndo ? 1 : 0.4 }} disabled={!ed.canUndo} onClick={ed.undo}>\n Undo\n </button>\n <button type=\"button\" style={{ ...btn, opacity: ed.canRedo ? 1 : 0.4 }} disabled={!ed.canRedo} onClick={ed.redo}>\n Redo\n </button>\n <AddElementMenu ed={ed} btn={btn} />\n </div>\n );\n}\n\n/**\n * Insert control for the standalone editor.\n *\n * Without this, `Editor` could not add an element at all: a host starting from\n * `emptyDoc()` got a blank canvas with nothing to select and no way to put\n * anything on it (#3). The palette itself was only ever wired into\n * `EditablePage`, which has no `onChange` to hand the document back — so\n * neither surface alone was embeddable.\n */\nfunction AddElementMenu({ ed, btn }: { ed: EditorApi; btn: CSSProperties }): ReactElement {\n const [open, setOpen] = useState(false);\n\n // Dismiss on any outside click or Escape.\n useEffect(() => {\n if (!open) return;\n const close = () => setOpen(false);\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && setOpen(false);\n window.addEventListener(\"click\", close);\n window.addEventListener(\"keydown\", onKey);\n return () => {\n window.removeEventListener(\"click\", close);\n window.removeEventListener(\"keydown\", onKey);\n };\n }, [open]);\n\n const add = (kind: AddKind) => {\n const { op, id } = buildInsertOp(ed.state.doc, kind, ed.state.selection);\n ed.apply(op);\n ed.select(id);\n setOpen(false);\n };\n\n return (\n <div style={{ position: \"relative\", marginLeft: \"auto\" }} onClick={(e) => e.stopPropagation()}>\n <button\n type=\"button\"\n style={{ ...btn, borderColor: \"var(--fcms-accent, #7c3aed)\" }}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n data-cms-add-trigger=\"\"\n onClick={() => setOpen((v) => !v)}\n >\n + Add\n </button>\n {open && (\n <div\n role=\"menu\"\n data-cms-add-menu=\"\"\n style={{\n position: \"absolute\",\n top: \"calc(100% + 4px)\",\n left: 0,\n zIndex: 20,\n minWidth: 150,\n maxHeight: 280,\n overflowY: \"auto\",\n padding: 4,\n borderRadius: 8,\n border: \"1px solid var(--fcms-border)\",\n background: \"var(--fcms-bg)\",\n boxShadow: \"0 12px 32px rgba(0,0,0,.28)\",\n }}\n >\n {ADD_MENU.map((item) => (\n <button\n key={item.kind}\n type=\"button\"\n role=\"menuitem\"\n data-cms-add={item.kind}\n style={{\n ...btn,\n display: \"block\",\n width: \"100%\",\n textAlign: \"left\",\n border: 0,\n background: \"transparent\",\n }}\n onClick={() => add(item.kind)}\n >\n {item.label}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * Editor chrome tokens. Light by default; dark under `@media (prefers-color-scheme:\n * dark)` OR an ancestor `.dark` / `[data-theme=\"dark\"]` (Tailwind/class strategy),\n * with an explicit `.light` / `[data-theme=\"light\"]` ancestor forcing light back.\n * The panels below read `var(--fcms-*)`, so the whole editor embeds cleanly in a\n * dark app. `color-scheme` flips native inputs + scrollbars too.\n */\nconst DARK_VARS =\n \"color-scheme:dark;--fcms-bg:#0b0f19;--fcms-fg:#e5e7eb;--fcms-muted:#94a3b8;--fcms-border:#27272a;\" +\n \"--fcms-canvas:#0f141f;--fcms-input-bg:#111827;--fcms-row-fg:#cbd5e1;\" +\n \"--fcms-sel-bg:color-mix(in oklab, #8b5cf6 24%, transparent);--fcms-sel-fg:#ddd6fe;\" +\n \"--fcms-drop:#ec4899;--fcms-danger:#fca5a5;\";\nconst LIGHT_VARS =\n \"color-scheme:light;--fcms-bg:#ffffff;--fcms-fg:#0f172a;--fcms-muted:#64748b;--fcms-border:#e2e8f0;\" +\n \"--fcms-canvas:#f8fafc;--fcms-input-bg:#ffffff;--fcms-row-fg:#334155;--fcms-sel-bg:#ede9fe;--fcms-sel-fg:#5b21b6;\" +\n \"--fcms-drop:#db2777;--fcms-danger:#dc2626;\";\nconst CHROME_CSS =\n `.fancy-cms-editor{--fcms-accent:#8b5cf6;${LIGHT_VARS}}` +\n `@media (prefers-color-scheme:dark){.fancy-cms-editor{${DARK_VARS}}}` +\n `:where(.light,[data-theme=\"light\"]) .fancy-cms-editor{${LIGHT_VARS}}` +\n `:where(.dark,[data-theme=\"dark\"]) .fancy-cms-editor{${DARK_VARS}}`;\n","import { type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport { isBinding, type Binding, type LayoutMode, type Length, type Node, type StyleProps } from \"../document/types\";\nimport type { NodeTransform } from \"./EditablePage\";\n\nexport interface NodeInspectorProps {\n node: Node;\n /** The currently-applied transform for this node (sampled from the active keyframe). */\n transform: NodeTransform;\n /** Live measured size, used as the placeholder when width/height are still \"auto\". */\n measured: { w: number; h: number };\n /** Patch the node's props (commits through the op-spine → undoable). */\n onProps: (patch: Record<string, unknown>) => void;\n /** Patch the node's base style. */\n onStyle: (patch: Partial<StyleProps>) => void;\n /** Set how a container arranges its children (free / stack / grid). */\n onLayout?: (layout: LayoutMode | undefined) => void;\n /** Commit a transform (position / size / opacity / scale / rotate) into the active keyframe. */\n onTransform: (t: NodeTransform) => void;\n onRemove: () => void;\n onClose: () => void;\n}\n\nconst CONTAINER_TYPES = new Set([\"section\", \"frame\", \"stack\", \"grid\", \"shape\", \"card\", \"device\"]);\n\n/**\n * The on-page element Inspector — a docked properties panel shown while a node\n * is selected in EditMode. Where the floating toolbar handles quick text tweaks,\n * this is the full surface: content, element-specific props (a button's label /\n * link / variant, an image's src / alt, …), exact position + size, and the style\n * box. Every control writes through the op-spine or the active keyframe, so edits\n * are undoable and animatable.\n */\nexport function NodeInspector({\n node,\n transform,\n measured,\n onProps,\n onStyle,\n onLayout,\n onTransform,\n onRemove,\n onClose,\n}: NodeInspectorProps): ReactElement {\n const base = node.style.base ?? {};\n const setT = (patch: Partial<NodeTransform>) => onTransform({ ...transform, ...patch });\n\n // Props rendered with a bespoke control; everything else falls through to the\n // generic key/value editor so any addon's props get controls for free.\n const handled = new Set([\"content\", \"label\", \"html\"]);\n const extraKeys = Object.keys(node.props).filter(\n (k) => !handled.has(k) && ([\"string\", \"number\", \"boolean\"].includes(typeof node.props[k]) || isBinding(node.props[k])),\n );\n\n return (\n <div style={panel} onPointerDown={(e) => e.stopPropagation()}>\n <div style={headRow}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2, minWidth: 0 }}>\n <strong style={{ fontSize: 12, textTransform: \"capitalize\" }}>{node.type}</strong>\n <span style={{ fontSize: 10, opacity: 0.5, fontFamily: \"ui-monospace, monospace\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>\n {node.id}\n </span>\n </div>\n <span style={{ flex: 1 }} />\n <button type=\"button\" style={{ ...iconBtn, color: \"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_node_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_node_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"]}
|