@agent-native/core 0.42.0 → 0.43.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/README.md +17 -56
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +24 -13
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.d.ts +2 -6
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +8 -66
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/blocks/index.d.ts +11 -0
- package/dist/client/blocks/index.d.ts.map +1 -1
- package/dist/client/blocks/index.js +11 -0
- package/dist/client/blocks/index.js.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.js +2 -2
- package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
- package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/DiffBlock.js +86 -21
- package/dist/client/blocks/library/DiffBlock.js.map +1 -1
- package/dist/client/blocks/library/FileTreeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/FileTreeBlock.js +27 -4
- package/dist/client/blocks/library/FileTreeBlock.js.map +1 -1
- package/dist/client/blocks/library/JsonExplorerBlock.js +1 -1
- package/dist/client/blocks/library/JsonExplorerBlock.js.map +1 -1
- package/dist/client/blocks/library/MermaidBlock.js +1 -1
- package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
- package/dist/client/blocks/library/annotation-rail.d.ts +19 -0
- package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -1
- package/dist/client/blocks/library/annotation-rail.js +19 -0
- package/dist/client/blocks/library/annotation-rail.js.map +1 -1
- package/dist/client/blocks/library/callout.config.d.ts +29 -0
- package/dist/client/blocks/library/callout.config.d.ts.map +1 -0
- package/dist/client/blocks/library/callout.config.js +33 -0
- package/dist/client/blocks/library/callout.config.js.map +1 -0
- package/dist/client/blocks/library/callout.d.ts +20 -0
- package/dist/client/blocks/library/callout.d.ts.map +1 -0
- package/dist/client/blocks/library/callout.js +61 -0
- package/dist/client/blocks/library/callout.js.map +1 -0
- package/dist/client/blocks/library/checklist.d.ts.map +1 -1
- package/dist/client/blocks/library/checklist.js +3 -3
- package/dist/client/blocks/library/checklist.js.map +1 -1
- package/dist/client/blocks/library/decision.config.d.ts +37 -0
- package/dist/client/blocks/library/decision.config.d.ts.map +1 -0
- package/dist/client/blocks/library/decision.config.js +32 -0
- package/dist/client/blocks/library/decision.config.js.map +1 -0
- package/dist/client/blocks/library/decision.d.ts +19 -0
- package/dist/client/blocks/library/decision.d.ts.map +1 -0
- package/dist/client/blocks/library/decision.js +119 -0
- package/dist/client/blocks/library/decision.js.map +1 -0
- package/dist/client/blocks/library/diagram.config.d.ts +64 -0
- package/dist/client/blocks/library/diagram.config.d.ts.map +1 -0
- package/dist/client/blocks/library/diagram.config.js +111 -0
- package/dist/client/blocks/library/diagram.config.js.map +1 -0
- package/dist/client/blocks/library/diagram.d.ts +16 -0
- package/dist/client/blocks/library/diagram.d.ts.map +1 -0
- package/dist/client/blocks/library/diagram.js +261 -0
- package/dist/client/blocks/library/diagram.js.map +1 -0
- package/dist/client/blocks/library/question-form.config.d.ts +69 -0
- package/dist/client/blocks/library/question-form.config.d.ts.map +1 -0
- package/dist/client/blocks/library/question-form.config.js +58 -0
- package/dist/client/blocks/library/question-form.config.js.map +1 -0
- package/dist/client/blocks/library/question-form.d.ts +20 -0
- package/dist/client/blocks/library/question-form.d.ts.map +1 -0
- package/dist/client/blocks/library/question-form.js +286 -0
- package/dist/client/blocks/library/question-form.js.map +1 -0
- package/dist/client/blocks/library/sanitize-html.d.ts +5 -0
- package/dist/client/blocks/library/sanitize-html.d.ts.map +1 -0
- package/dist/client/blocks/library/sanitize-html.js +240 -0
- package/dist/client/blocks/library/sanitize-html.js.map +1 -0
- package/dist/client/blocks/library/server-specs.d.ts.map +1 -1
- package/dist/client/blocks/library/server-specs.js +59 -0
- package/dist/client/blocks/library/server-specs.js.map +1 -1
- package/dist/client/blocks/library/specs.d.ts.map +1 -1
- package/dist/client/blocks/library/specs.js +11 -0
- package/dist/client/blocks/library/specs.js.map +1 -1
- package/dist/client/blocks/library/tabs.d.ts.map +1 -1
- package/dist/client/blocks/library/tabs.js +12 -12
- package/dist/client/blocks/library/tabs.js.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.d.ts +260 -0
- package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -0
- package/dist/client/blocks/library/wireframe-kit.js +920 -0
- package/dist/client/blocks/library/wireframe-kit.js.map +1 -0
- package/dist/client/blocks/library/wireframe.config.d.ts +123 -0
- package/dist/client/blocks/library/wireframe.config.d.ts.map +1 -0
- package/dist/client/blocks/library/wireframe.config.js +294 -0
- package/dist/client/blocks/library/wireframe.config.js.map +1 -0
- package/dist/client/blocks/library/wireframe.d.ts +15 -0
- package/dist/client/blocks/library/wireframe.d.ts.map +1 -0
- package/dist/client/blocks/library/wireframe.js +206 -0
- package/dist/client/blocks/library/wireframe.js.map +1 -0
- package/dist/client/blocks/registry.d.ts +9 -0
- package/dist/client/blocks/registry.d.ts.map +1 -1
- package/dist/client/blocks/registry.js +12 -5
- package/dist/client/blocks/registry.js.map +1 -1
- package/dist/client/blocks/server.d.ts +1 -0
- package/dist/client/blocks/server.d.ts.map +1 -1
- package/dist/client/blocks/server.js +1 -0
- package/dist/client/blocks/server.js.map +1 -1
- package/dist/client/blocks/types.d.ts +8 -0
- package/dist/client/blocks/types.d.ts.map +1 -1
- package/dist/client/blocks/types.js.map +1 -1
- package/dist/client/rich-markdown-editor/DragHandle.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/DragHandle.js +77 -12
- package/dist/client/rich-markdown-editor/DragHandle.js.map +1 -1
- package/dist/styles/agent-native.css +1 -0
- package/dist/styles/blocks.css +1380 -0
- package/docs/content/plan-plugin.md +8 -8
- package/docs/content/pr-visual-recap.md +2 -2
- package/docs/content/template-plan.md +94 -17
- package/package.json +2 -1
- package/docs/content/visual-plans.md +0 -82
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragHandle.js","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/DragHandle.ts"],"names":[],"mappings":"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","sourcesContent":["import { Extension } from \"@tiptap/core\";\nimport {\n Plugin,\n PluginKey,\n NodeSelection,\n TextSelection,\n type Transaction,\n} from \"@tiptap/pm/state\";\nimport type { Node as ProseMirrorNode } from \"@tiptap/pm/model\";\nimport { type EditorView } from \"@tiptap/pm/view\";\n\n/**\n * Default editor-wrapper CSS selector the drag handle scopes itself to.\n *\n * The handle, the drop indicator, and the `position: relative` anchor are all\n * appended to / measured against the closest ancestor matching this selector.\n * Content's editor wraps its ProseMirror DOM in a `.visual-editor-wrapper`\n * element, so that is the historical default. Other apps (e.g. the plan editor)\n * pass their own wrapper selector via {@link DragHandleOptions.wrapperSelector}.\n */\nexport const DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR = \".visual-editor-wrapper\";\n\nexport interface DragHandleOptions {\n /**\n * CSS selector for the editor wrapper element the handle is anchored to.\n *\n * Must match an ancestor of the ProseMirror editor DOM. The wrapper gets\n * `position: relative` so the absolutely-positioned grip and drop indicator\n * can be placed relative to it. Defaults to\n * {@link DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR} so Content keeps working\n * unchanged.\n */\n wrapperSelector: string;\n /**\n * Optional source-side payload for a cross-editor block move. The editor doc\n * carries ProseMirror node content, but app-owned side-map data (for example a\n * plan `diagram` block's HTML/CSS) can live outside the doc; this lets the\n * host carry that data to the receiving editor before the node is inserted.\n */\n getDragTransferData?: (context: {\n view: EditorView;\n node: ProseMirrorNode;\n pos: number;\n }) => unknown;\n /**\n * Optional target-side receiver for cross-editor transfer data. Called before\n * the node is inserted into the target editor so the target's serializer can\n * resolve app-owned data during the synchronous ProseMirror update.\n */\n receiveDragTransferData?: (\n data: unknown,\n context: {\n view: EditorView;\n node: ProseMirrorNode;\n pos: number;\n sourceView: EditorView;\n },\n ) => void;\n /**\n * Optional host-level drop handler for document-specific structure changes.\n * Returning true tells the shared drag handle that the host fully handled the\n * move and no ProseMirror insert/delete should run. This is used for\n * Notion-style side drops where dropping a block to the left/right creates or\n * inserts into a column layout rather than inserting into the target editor.\n */\n handleDrop?: (data: unknown, context: DragHandleDropContext) => boolean;\n}\n\nconst dragHandleKey = new PluginKey(\"dragHandle\");\nconst HOVER_SIDE_OUTSET_REM = 8;\nconst SIDE_DROP_ZONE_RATIO = 0.28;\nconst SIDE_DROP_ZONE_MIN_PX = 48;\nconst SIDE_DROP_ZONE_MAX_PX = 140;\nconst DRAG_HANDLE_MENU_STYLE_ID = \"an-rich-md-drag-menu-styles\";\nconst DRAG_HANDLE_MENU_WIDTH = 220;\nconst DRAG_HANDLE_MENU_GAP = 6;\nconst DRAG_HANDLE_MENU_VIEWPORT_PADDING = 8;\n\ntype DropTarget = {\n registration: DragHandleRegistration;\n view: EditorView;\n block: HTMLElement;\n placement: DragHandleDropPlacement;\n pos: number;\n targetPos: number;\n targetNodeSize: number;\n rect: DOMRect;\n};\n\nexport type DragHandleDropPlacement = \"before\" | \"after\" | \"left\" | \"right\";\n\nexport type DragHandleDropContext = {\n view: EditorView;\n sourceView: EditorView;\n sourceNode: ProseMirrorNode;\n sourcePos: number;\n sourceNodeSize: number;\n targetNode: ProseMirrorNode;\n targetPos: number;\n targetNodeSize: number;\n insertPos: number;\n placement: DragHandleDropPlacement;\n};\n\ntype DragSession = {\n view: EditorView;\n sourceBlock: HTMLElement;\n sourcePos: number;\n sourceNodeSize: number;\n startX: number;\n startY: number;\n dragging: boolean;\n preview: HTMLElement | null;\n dropLine: HTMLElement | null;\n dropTarget: DropTarget | null;\n};\n\ntype HoverBlock = {\n node: HTMLElement;\n pmPos: number;\n rect: DOMRect;\n};\n\ntype DragHandleMenuContext = {\n view: EditorView;\n sourceBlock: HTMLElement;\n sourcePos: number;\n sourceNodeSize: number;\n};\n\ntype DragHandleRegistration = {\n view: EditorView;\n wrapperSelector: string;\n getDragTransferData?: DragHandleOptions[\"getDragTransferData\"];\n receiveDragTransferData?: DragHandleOptions[\"receiveDragTransferData\"];\n handleDrop?: DragHandleOptions[\"handleDrop\"];\n canHover?: () => boolean;\n findHoverBlock?: (clientX: number, clientY: number) => HoverBlock | null;\n showHoverBlock?: (block: HoverBlock) => void;\n hideHover?: () => void;\n};\n\nconst dragHandleRegistrations = new Set<DragHandleRegistration>();\nlet dragHandleGlobalHoverListeners = 0;\nlet activeDragRegistration: DragHandleRegistration | null = null;\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max);\n\nconst editorArea = (registration: DragHandleRegistration) => {\n const rect = registration.view.dom.getBoundingClientRect();\n return rect.width * rect.height;\n};\n\nconst updateRegisteredHover = (clientX: number, clientY: number) => {\n if (activeDragRegistration) {\n for (const registration of dragHandleRegistrations) {\n registration.hideHover?.();\n }\n return;\n }\n\n const candidates: Array<{\n registration: DragHandleRegistration;\n block: HoverBlock;\n }> = [];\n\n for (const registration of dragHandleRegistrations) {\n if (!registration.view.dom.isConnected || !registration.canHover?.()) {\n registration.hideHover?.();\n continue;\n }\n const block = registration.findHoverBlock?.(clientX, clientY);\n if (block) {\n candidates.push({ registration, block });\n } else {\n registration.hideHover?.();\n }\n }\n\n // Pick which editor owns the grip when several register a hover block at this\n // point. Nested region editors (e.g. each column inside a `columns` block) tile\n // their container's whole footprint AND extend a wide forgiving zone\n // (HOVER_SIDE_OUTSET_REM) into its left-margin gutter, so a pure\n // \"smallest editor wins\" rule lets an inner block beat the container everywhere\n // and leaves the container itself impossible to grab. Split candidates by where\n // the cursor sits relative to each block:\n // - Over a block's body (clientX at/after its left edge) the innermost\n // (smallest) editor wins, so nested blocks stay grabbable from their content.\n // - In the shared left-margin gutter (clientX left of every candidate's\n // content, where the grip lives) the outermost (largest) editor wins, so the\n // container block can be picked up and reordered.\n // Prefer the candidate whose block actually sits UNDER the cursor\n // horizontally. Without this, a left column's forgiving side zone reaches\n // across the inter-column gap, ties the right column's editor on area, and\n // wins — so hovering a right-column block shows the grip for the LEFT block\n // (and right-column blocks appear to have no grip at all). `overContent`\n // restricts to blocks the cursor is genuinely within; `rightOfLeftEdge` keeps\n // the gutter-grab behaviour; fully left of every block → the container wins.\n const overContent = candidates.filter(\n (candidate) =>\n clientX >= candidate.block.rect.left &&\n clientX <= candidate.block.rect.right,\n );\n // The grip renders in a narrow band just LEFT of each block (≈24px). A block\n // must OWN that band so moving the cursor onto its grip keeps showing (and\n // lets you press) that block's grip — otherwise, for a column block whose grip\n // sits in the gutter/inter-column gap, the \"gutter → largest editor\" rule\n // below would flip the hover to the columns container and the grip would\n // vanish out from under the cursor, making inner column blocks impossible to\n // drag. The band is narrow, so it does not collide with the neighbouring\n // column's content (the right column's grip lives in the inter-column gap,\n // left of its own content but right of the left column's content).\n const GRIP_HOVER_ZONE_PX = 28;\n const overGrip = candidates.filter(\n (candidate) =>\n clientX >= candidate.block.rect.left - GRIP_HOVER_ZONE_PX &&\n clientX < candidate.block.rect.left,\n );\n const rightOfLeftEdge = candidates.filter(\n (candidate) => clientX >= candidate.block.rect.left,\n );\n let active: {\n registration: DragHandleRegistration;\n block: HoverBlock;\n } | null;\n const innerPool =\n overContent.length > 0\n ? overContent\n : overGrip.length > 0\n ? overGrip\n : rightOfLeftEdge;\n if (innerPool.length > 0) {\n innerPool.sort(\n (a, b) => editorArea(a.registration) - editorArea(b.registration),\n );\n active = innerPool[0];\n } else {\n candidates.sort(\n (a, b) => editorArea(b.registration) - editorArea(a.registration),\n );\n active = candidates[0] ?? null;\n }\n\n for (const registration of dragHandleRegistrations) {\n if (registration !== active?.registration) registration.hideHover?.();\n }\n active?.registration.showHoverBlock?.(active.block);\n};\n\nconst handleGlobalHoverMove = (event: MouseEvent) => {\n updateRegisteredHover(event.clientX, event.clientY);\n};\n\nconst retainGlobalHoverListener = () => {\n dragHandleGlobalHoverListeners += 1;\n if (dragHandleGlobalHoverListeners === 1) {\n document.addEventListener(\"mousemove\", handleGlobalHoverMove);\n }\n};\n\nconst releaseGlobalHoverListener = () => {\n dragHandleGlobalHoverListeners = Math.max(\n 0,\n dragHandleGlobalHoverListeners - 1,\n );\n if (dragHandleGlobalHoverListeners === 0) {\n document.removeEventListener(\"mousemove\", handleGlobalHoverMove);\n }\n};\n\nconst ensureDragHandleMenuStyles = () => {\n if (document.getElementById(DRAG_HANDLE_MENU_STYLE_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = DRAG_HANDLE_MENU_STYLE_ID;\n style.textContent = `\n.an-rich-md-drag-menu {\n position: fixed;\n z-index: 9999;\n width: ${DRAG_HANDLE_MENU_WIDTH}px;\n padding: 4px;\n border: 1px solid hsl(var(--border, 214.3 31.8% 91.4%));\n border-radius: 7px;\n background: hsl(var(--popover, 0 0% 100%));\n color: hsl(var(--popover-foreground, var(--foreground, 222.2 84% 4.9%)));\n box-shadow:\n 0 12px 32px rgb(15 23 42 / 0.16),\n 0 2px 8px rgb(15 23 42 / 0.08);\n font-family: inherit;\n font-size: 13px;\n line-height: 1.35;\n}\n\n.an-rich-md-drag-menu__item {\n display: flex;\n width: 100%;\n align-items: center;\n gap: 9px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n font: inherit;\n letter-spacing: 0;\n padding: 7px 8px;\n text-align: left;\n}\n\n.an-rich-md-drag-menu__item:hover,\n.an-rich-md-drag-menu__item:focus-visible {\n background: hsl(var(--accent, 210 40% 96.1%));\n color: hsl(var(--accent-foreground, var(--foreground, 222.2 84% 4.9%)));\n outline: none;\n}\n\n.an-rich-md-drag-menu__item[data-danger=\"true\"] {\n color: hsl(var(--destructive, 0 84.2% 60.2%));\n}\n\n.an-rich-md-drag-menu__item[data-danger=\"true\"]:hover,\n.an-rich-md-drag-menu__item[data-danger=\"true\"]:focus-visible {\n background: hsl(var(--destructive, 0 84.2% 60.2%) / 0.1);\n}\n\n.an-rich-md-drag-menu__icon {\n position: relative;\n flex: 0 0 auto;\n width: 18px;\n height: 18px;\n color: hsl(var(--muted-foreground, 215.4 16.3% 46.9%));\n}\n\n.an-rich-md-drag-menu__item[data-danger=\"true\"] .an-rich-md-drag-menu__icon {\n color: currentColor;\n}\n\n.an-rich-md-drag-menu__icon::before,\n.an-rich-md-drag-menu__icon::after {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n}\n\n.an-rich-md-drag-menu__icon--duplicate::before,\n.an-rich-md-drag-menu__icon--duplicate::after {\n width: 11px;\n height: 11px;\n border: 1.5px solid currentColor;\n border-radius: 2px;\n}\n\n.an-rich-md-drag-menu__icon--duplicate::before {\n left: 6px;\n top: 2px;\n opacity: 0.55;\n}\n\n.an-rich-md-drag-menu__icon--duplicate::after {\n left: 2px;\n top: 6px;\n background: hsl(var(--popover, 0 0% 100%));\n}\n\n.an-rich-md-drag-menu__icon--insert::before {\n left: 3px;\n top: 8px;\n width: 12px;\n height: 1.5px;\n border-radius: 999px;\n background: currentColor;\n}\n\n.an-rich-md-drag-menu__icon--insert::after {\n left: 8px;\n top: 3px;\n width: 1.5px;\n height: 12px;\n border-radius: 999px;\n background: currentColor;\n}\n\n.an-rich-md-drag-menu__icon--delete::before {\n left: 4px;\n top: 7px;\n width: 10px;\n height: 11px;\n border: 1.5px solid currentColor;\n border-top: 0;\n border-radius: 0 0 2px 2px;\n}\n\n.an-rich-md-drag-menu__icon--delete::after {\n left: 3px;\n top: 4px;\n width: 12px;\n height: 1.5px;\n border-radius: 999px;\n background: currentColor;\n box-shadow: 3px -2.5px 0 -0.4px currentColor;\n}\n\n.an-rich-md-drag-menu__label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n`;\n document.head.appendChild(style);\n};\n\n/**\n * App-agnostic Tiptap extension providing a Notion-style left-margin drag grip\n * (the `::` handle), block selection, and drag-to-reorder over top-level block\n * nodes.\n *\n * Behavior:\n * - On hover over any top-level block, a `.drag-handle` grip appears in the left\n * margin (forgiving hit zone extends {@link HOVER_SIDE_OUTSET_REM}rem to the\n * sides and into the gap above/between blocks).\n * - Single-clicking the grip selects the block and opens a block action menu.\n * Dragging past a small threshold starts a reorder, showing a floating clone\n * preview (`.notion-drag-preview`) and a `.notion-drop-indicator` line.\n * `Escape` cancels.\n * - While dragging, the source block carries `.notion-block--dragging` and the\n * document element carries `.notion-editor-is-dragging` so apps can style the\n * in-flight state. Apps own all of these CSS class names.\n * - Works for ANY top-level node ProseMirror renders as a direct child of the\n * editor — including `group: \"block\"`, `draggable: true` atoms such as the\n * plan editor's `planBlock`.\n *\n * The only app-specific coupling — the editor wrapper element the handle and\n * drop indicator are anchored to — is configurable via\n * {@link DragHandleOptions.wrapperSelector}, defaulting to\n * {@link DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR} (`.visual-editor-wrapper`) so the\n * Content editor keeps working byte-identically. The plan editor passes its own\n * wrapper selector via `DragHandle.configure({ wrapperSelector })`.\n */\nexport const DragHandle = Extension.create<DragHandleOptions>({\n name: \"dragHandle\",\n\n addOptions() {\n return {\n wrapperSelector: DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR,\n getDragTransferData: undefined,\n receiveDragTransferData: undefined,\n };\n },\n\n addProseMirrorPlugins() {\n const editor = this.editor;\n const wrapperSelector = this.options.wrapperSelector;\n const getDragTransferData = this.options.getDragTransferData;\n const receiveDragTransferData = this.options.receiveDragTransferData;\n const handleDrop = this.options.handleDrop;\n let handle: HTMLElement | null = null;\n let menu: HTMLElement | null = null;\n let menuContext: DragHandleMenuContext | null = null;\n let currentBlock: HTMLElement | null = null;\n let dragStartPos: number | null = null;\n let dragSession: DragSession | null = null;\n let currentRegistration: DragHandleRegistration | null = null;\n\n const getHoverSideOutset = () => {\n const rootFontSize = Number.parseFloat(\n getComputedStyle(document.documentElement).fontSize,\n );\n return (\n (Number.isFinite(rootFontSize) ? rootFontSize : 16) *\n HOVER_SIDE_OUTSET_REM\n );\n };\n\n const getTopLevelBlocks = (editorView: EditorView): HoverBlock[] => {\n const blocks: HoverBlock[] = [];\n\n editorView.state.doc.forEach((_node, offset) => {\n const dom = editorView.nodeDOM(offset);\n if (!(dom instanceof HTMLElement)) return;\n\n blocks.push({\n node: dom,\n pmPos: offset,\n rect: dom.getBoundingClientRect(),\n });\n });\n\n return blocks;\n };\n\n const registrationForView = (\n editorView: EditorView,\n ): DragHandleRegistration | null => {\n for (const registration of dragHandleRegistrations) {\n if (registration.view === editorView) return registration;\n }\n return null;\n };\n\n const findForgivingBlock = (\n editorView: EditorView,\n clientX: number,\n clientY: number,\n ): HoverBlock | null => {\n const blocks = getTopLevelBlocks(editorView);\n if (blocks.length === 0) return null;\n\n const sideOutset = getHoverSideOutset();\n const pageLeft = 0;\n const pageRight = window.visualViewport?.width ?? window.innerWidth;\n\n for (let index = 0; index < blocks.length; index++) {\n const block = blocks[index];\n const nextBlock = blocks[index + 1];\n const blockBottomGap = nextBlock\n ? Math.max(0, nextBlock.rect.top - block.rect.bottom)\n : 0;\n const zoneLeft = Math.max(pageLeft, block.rect.left - sideOutset);\n const zoneRight = Math.min(pageRight, block.rect.right + sideOutset);\n const zoneTop =\n index === 0\n ? Math.max(0, block.rect.top - blockBottomGap)\n : block.rect.top;\n const zoneBottom = nextBlock ? nextBlock.rect.top : block.rect.bottom;\n\n if (\n clientX >= zoneLeft &&\n clientX <= zoneRight &&\n clientY >= zoneTop &&\n clientY < zoneBottom\n ) {\n return block;\n }\n }\n\n return null;\n };\n\n const showHandleForBlock = (editorView: EditorView, block: HoverBlock) => {\n if (!handle) return;\n currentBlock = block.node;\n dragStartPos = block.pmPos;\n\n const wrapper = editorView.dom.closest(wrapperSelector);\n if (!wrapper) return;\n\n // Lazily (re)attach the grip the first time a wrapper is actually\n // available. At plugin `view()` init the editor DOM may not yet be mounted\n // inside the wrapper (React mounts `EditorContent` after the EditorView is\n // constructed), so the init-time append can silently no-op and leave the\n // grip orphaned. Re-home it here once the wrapper exists.\n if (handle.parentElement !== wrapper) {\n (wrapper as HTMLElement).style.position = \"relative\";\n wrapper.appendChild(handle);\n }\n\n const wrapperRect = wrapper.getBoundingClientRect();\n\n handle.style.display = \"flex\";\n handle.style.top = `${block.rect.top - wrapperRect.top + 2}px`;\n handle.style.left = \"-24px\";\n };\n\n const selectBlockAt = (editorView: EditorView, pos: number) => {\n try {\n const sel = NodeSelection.create(editorView.state.doc, pos);\n editorView.dispatch(editorView.state.tr.setSelection(sel));\n editorView.focus();\n return sel;\n } catch {\n return null;\n }\n };\n\n const cleanupDragVisuals = () => {\n dragSession?.preview?.remove();\n dragSession?.dropLine?.remove();\n dragSession?.sourceBlock.classList.remove(\"notion-block--dragging\");\n document.documentElement.classList.remove(\"notion-editor-is-dragging\");\n };\n\n const createDragPreview = (block: HTMLElement): HTMLElement => {\n const blockRect = block.getBoundingClientRect();\n const preview = document.createElement(\"div\");\n const clone = block.cloneNode(true) as HTMLElement;\n\n clone.classList.remove(\n \"ProseMirror-selectednode\",\n \"notion-block--dragging\",\n );\n clone.removeAttribute(\"contenteditable\");\n clone.style.background = \"transparent\";\n clone.style.backgroundColor = \"transparent\";\n clone.querySelectorAll(\"[contenteditable]\").forEach((node) => {\n node.removeAttribute(\"contenteditable\");\n });\n clone.querySelectorAll<HTMLElement>(\"*\").forEach((node) => {\n node.style.background = \"transparent\";\n node.style.backgroundColor = \"transparent\";\n });\n\n preview.className = \"notion-drag-preview\";\n preview.style.width = `${blockRect.width}px`;\n preview.appendChild(clone);\n document.body.appendChild(preview);\n\n return preview;\n };\n\n const createDropLine = (\n registration: DragHandleRegistration,\n ): HTMLElement | null => {\n const wrapper = registration.view.dom.closest(\n registration.wrapperSelector,\n );\n if (!wrapper) return null;\n\n const line = document.createElement(\"div\");\n line.className = \"notion-drop-indicator\";\n wrapper.appendChild(line);\n return line;\n };\n\n const forceHideHandle = () => {\n if (handle) {\n handle.style.display = \"none\";\n handle.setAttribute(\"aria-expanded\", \"false\");\n }\n currentBlock = null;\n dragStartPos = null;\n };\n\n const closeMenu = ({ hideGrip = false }: { hideGrip?: boolean } = {}) => {\n menu?.remove();\n menu = null;\n menuContext = null;\n handle?.setAttribute(\"aria-expanded\", \"false\");\n document.removeEventListener(\"mousedown\", handleMenuDocumentMouseDown, {\n capture: true,\n });\n document.removeEventListener(\"keydown\", handleMenuKeyDown, {\n capture: true,\n });\n window.removeEventListener(\"resize\", handleMenuViewportChange);\n window.removeEventListener(\"scroll\", handleMenuViewportChange, {\n capture: true,\n });\n if (hideGrip) forceHideHandle();\n };\n\n const resolveMenuContext = (context: DragHandleMenuContext) => {\n const latestBlock = getTopLevelBlocks(context.view).find(\n (block) => block.node === context.sourceBlock,\n );\n const sourcePos = latestBlock?.pmPos ?? context.sourcePos;\n const sourceNode = context.view.state.doc.nodeAt(sourcePos);\n if (!sourceNode) return null;\n\n return {\n ...context,\n sourcePos,\n sourceNode,\n sourceNodeSize: sourceNode.nodeSize,\n };\n };\n\n const focusSelectionNear = (\n view: EditorView,\n tr: Transaction,\n pos: number,\n bias: -1 | 1,\n ) => {\n tr.setSelection(\n TextSelection.near(\n tr.doc.resolve(clamp(pos, 0, tr.doc.content.size)),\n bias,\n ),\n );\n view.dispatch(tr.scrollIntoView());\n view.focus();\n };\n\n const duplicateBlock = (context: DragHandleMenuContext) => {\n const resolved = resolveMenuContext(context);\n if (!resolved) return;\n\n const insertPos = resolved.sourcePos + resolved.sourceNodeSize;\n const tr = resolved.view.state.tr.insert(insertPos, resolved.sourceNode);\n\n try {\n tr.setSelection(NodeSelection.create(tr.doc, insertPos));\n resolved.view.dispatch(tr.scrollIntoView());\n resolved.view.focus();\n } catch {\n focusSelectionNear(resolved.view, tr, insertPos, 1);\n }\n };\n\n const deleteBlock = (context: DragHandleMenuContext) => {\n const resolved = resolveMenuContext(context);\n if (!resolved) return;\n\n const { view, sourcePos, sourceNodeSize } = resolved;\n const paragraph = view.state.schema.nodes.paragraph;\n const sourceEnd = sourcePos + sourceNodeSize;\n\n if (view.state.doc.childCount <= 1 && paragraph) {\n const replacement = paragraph.createAndFill() ?? paragraph.create();\n const tr = view.state.tr.replaceWith(sourcePos, sourceEnd, replacement);\n focusSelectionNear(view, tr, sourcePos + 1, 1);\n return;\n }\n\n const tr = view.state.tr.delete(sourcePos, sourceEnd);\n const selectionBias = sourcePos >= tr.doc.content.size ? -1 : 1;\n focusSelectionNear(view, tr, sourcePos, selectionBias);\n };\n\n const insertParagraphBelow = (context: DragHandleMenuContext) => {\n const resolved = resolveMenuContext(context);\n const paragraph = resolved?.view.state.schema.nodes.paragraph;\n if (!resolved || !paragraph) return;\n\n const insertPos = resolved.sourcePos + resolved.sourceNodeSize;\n const paragraphNode = paragraph.createAndFill() ?? paragraph.create();\n const tr = resolved.view.state.tr.insert(insertPos, paragraphNode);\n tr.setSelection(TextSelection.create(tr.doc, insertPos + 1));\n resolved.view.dispatch(tr.scrollIntoView());\n resolved.view.focus();\n };\n\n const positionMenu = (anchorRect: DOMRect) => {\n if (!menu) return;\n\n const viewportWidth = window.visualViewport?.width ?? window.innerWidth;\n const viewportHeight =\n window.visualViewport?.height ?? window.innerHeight;\n const menuHeight = menu.offsetHeight || 118;\n const preferredLeft = anchorRect.right + DRAG_HANDLE_MENU_GAP;\n const alternateLeft =\n anchorRect.left - DRAG_HANDLE_MENU_WIDTH - DRAG_HANDLE_MENU_GAP;\n const left =\n preferredLeft +\n DRAG_HANDLE_MENU_WIDTH +\n DRAG_HANDLE_MENU_VIEWPORT_PADDING <=\n viewportWidth\n ? preferredLeft\n : alternateLeft;\n\n menu.style.left = `${clamp(\n left,\n DRAG_HANDLE_MENU_VIEWPORT_PADDING,\n viewportWidth -\n DRAG_HANDLE_MENU_WIDTH -\n DRAG_HANDLE_MENU_VIEWPORT_PADDING,\n )}px`;\n menu.style.top = `${clamp(\n anchorRect.top - 4,\n DRAG_HANDLE_MENU_VIEWPORT_PADDING,\n viewportHeight - menuHeight - DRAG_HANDLE_MENU_VIEWPORT_PADDING,\n )}px`;\n };\n\n const createMenuItem = (\n label: string,\n iconModifier: string,\n action: (context: DragHandleMenuContext) => void,\n options: { danger?: boolean } = {},\n ) => {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"an-rich-md-drag-menu__item\";\n button.setAttribute(\"role\", \"menuitem\");\n button.setAttribute(\"data-plan-interactive\", \"true\");\n if (options.danger) button.setAttribute(\"data-danger\", \"true\");\n\n const icon = document.createElement(\"span\");\n icon.className = `an-rich-md-drag-menu__icon an-rich-md-drag-menu__icon--${iconModifier}`;\n icon.setAttribute(\"aria-hidden\", \"true\");\n\n const labelElement = document.createElement(\"span\");\n labelElement.className = \"an-rich-md-drag-menu__label\";\n labelElement.textContent = label;\n\n button.append(icon, labelElement);\n button.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n });\n button.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n const context = menuContext;\n if (!context) return;\n closeMenu({ hideGrip: true });\n action(context);\n });\n\n return button;\n };\n\n const openMenu = (context: DragHandleMenuContext, anchorRect: DOMRect) => {\n const resolved = resolveMenuContext(context);\n if (!resolved) return;\n\n closeMenu();\n selectBlockAt(resolved.view, resolved.sourcePos);\n ensureDragHandleMenuStyles();\n\n const el = document.createElement(\"div\");\n el.className = \"an-rich-md-drag-menu\";\n el.setAttribute(\"role\", \"menu\");\n el.setAttribute(\"aria-label\", \"Block actions\");\n el.setAttribute(\"data-plan-interactive\", \"true\");\n\n el.append(\n createMenuItem(\"Duplicate\", \"duplicate\", duplicateBlock),\n createMenuItem(\"Delete\", \"delete\", deleteBlock, { danger: true }),\n createMenuItem(\"Insert block below\", \"insert\", insertParagraphBelow),\n );\n\n menu = el;\n menuContext = {\n view: resolved.view,\n sourceBlock: resolved.sourceBlock,\n sourcePos: resolved.sourcePos,\n sourceNodeSize: resolved.sourceNodeSize,\n };\n document.body.appendChild(el);\n positionMenu(anchorRect);\n handle?.setAttribute(\"aria-expanded\", \"true\");\n document.addEventListener(\"mousedown\", handleMenuDocumentMouseDown, {\n capture: true,\n });\n document.addEventListener(\"keydown\", handleMenuKeyDown, {\n capture: true,\n });\n window.addEventListener(\"resize\", handleMenuViewportChange);\n window.addEventListener(\"scroll\", handleMenuViewportChange, {\n capture: true,\n });\n\n el.querySelector<HTMLButtonElement>(\"button\")?.focus({\n preventScroll: true,\n });\n };\n\n const findDropTarget = (\n registration: DragHandleRegistration,\n clientX: number,\n clientY: number,\n ): DropTarget | null => {\n const view = registration.view;\n const block = findForgivingBlock(view, clientX, clientY);\n if (!block) return null;\n\n const node = view.state.doc.nodeAt(block.pmPos);\n if (!node) return null;\n\n let placement: DragHandleDropPlacement;\n const withinBlockY =\n clientY >= block.rect.top && clientY <= block.rect.bottom;\n const withinSideDropBand =\n clientY >= block.rect.top + block.rect.height * 0.2 &&\n clientY <= block.rect.bottom - block.rect.height * 0.2;\n const sideZoneWidth = clamp(\n block.rect.width * SIDE_DROP_ZONE_RATIO,\n SIDE_DROP_ZONE_MIN_PX,\n SIDE_DROP_ZONE_MAX_PX,\n );\n\n if (\n registration.handleDrop &&\n withinBlockY &&\n withinSideDropBand &&\n clientX <= block.rect.left + sideZoneWidth\n ) {\n placement = \"left\";\n } else if (\n registration.handleDrop &&\n withinBlockY &&\n withinSideDropBand &&\n clientX >= block.rect.right - sideZoneWidth\n ) {\n placement = \"right\";\n } else {\n placement =\n clientY < block.rect.top ||\n (clientY <= block.rect.bottom &&\n clientY < block.rect.top + block.rect.height / 2)\n ? \"before\"\n : \"after\";\n }\n const before = placement === \"before\" || placement === \"left\";\n\n return {\n registration,\n view,\n block: block.node,\n placement,\n pos: before ? block.pmPos : block.pmPos + node.nodeSize,\n targetPos: block.pmPos,\n targetNodeSize: node.nodeSize,\n rect: block.rect,\n };\n };\n\n const findAnyDropTarget = (\n session: DragSession,\n clientX: number,\n clientY: number,\n ): DropTarget | null => {\n const candidates: DropTarget[] = [];\n\n for (const registration of dragHandleRegistrations) {\n if (!registration.view.dom.isConnected) continue;\n if (\n registration.view !== session.view &&\n session.sourceBlock.contains(registration.view.dom)\n ) {\n continue;\n }\n const target = findDropTarget(registration, clientX, clientY);\n if (target) candidates.push(target);\n }\n\n candidates.sort((a, b) => {\n const aRect = a.view.dom.getBoundingClientRect();\n const bRect = b.view.dom.getBoundingClientRect();\n return aRect.width * aRect.height - bRect.width * bRect.height;\n });\n\n return candidates[0] ?? null;\n };\n\n const positionDragPreview = (\n session: DragSession,\n clientX: number,\n clientY: number,\n ) => {\n if (!session.preview) return;\n\n session.preview.style.transform = `translate3d(${clientX + 12}px, ${clientY + 10}px, 0)`;\n };\n\n const updateDropLine = (\n session: DragSession,\n target: DropTarget | null,\n ) => {\n const sourceEnd = session.sourcePos + session.sourceNodeSize;\n const isSideDrop =\n target?.placement === \"left\" || target?.placement === \"right\";\n if (\n !target ||\n (target.view === session.view &&\n (isSideDrop\n ? // A side drop only ever builds columns; the ProseMirror seam\n // position is irrelevant. The only no-op is dropping a block on\n // ITS OWN side — adjacent *different* blocks must still form\n // columns (otherwise dropping onto an immediate neighbour's\n // facing edge silently does nothing, which reads as \"side drop\n // works sometimes\").\n target.targetPos === session.sourcePos\n : target.pos === session.sourcePos ||\n target.pos === sourceEnd ||\n (target.pos > session.sourcePos && target.pos < sourceEnd)))\n ) {\n session.dropTarget = null;\n session.dropLine?.remove();\n session.dropLine = null;\n return;\n }\n\n const wrapper = target.view.dom.closest(\n target.registration.wrapperSelector,\n );\n if (!wrapper) return;\n\n if (!session.dropLine || session.dropLine.parentElement !== wrapper) {\n session.dropLine?.remove();\n session.dropLine = createDropLine(target.registration);\n }\n if (!session.dropLine) return;\n\n const wrapperRect = wrapper.getBoundingClientRect();\n const editorRect = target.view.dom.getBoundingClientRect();\n\n session.dropTarget = target;\n if (target.placement === \"left\" || target.placement === \"right\") {\n const left =\n target.placement === \"left\" ? target.rect.left : target.rect.right;\n session.dropLine.style.left = `${left - wrapperRect.left}px`;\n session.dropLine.style.top = `${target.rect.top - wrapperRect.top}px`;\n session.dropLine.style.width = \"3px\";\n session.dropLine.style.height = `${target.rect.height}px`;\n return;\n }\n\n const top =\n target.placement === \"before\" ? target.rect.top : target.rect.bottom;\n session.dropLine.style.left = `${editorRect.left - wrapperRect.left}px`;\n session.dropLine.style.top = `${top - wrapperRect.top}px`;\n session.dropLine.style.width = `${editorRect.width}px`;\n session.dropLine.style.height = \"3px\";\n };\n\n const createHandle = () => {\n const el = document.createElement(\"div\");\n el.className = \"drag-handle\";\n el.contentEditable = \"false\";\n el.draggable = false;\n el.tabIndex = 0;\n el.setAttribute(\"role\", \"button\");\n el.setAttribute(\"aria-label\", \"Open block menu or drag to reorder\");\n el.setAttribute(\"aria-haspopup\", \"menu\");\n el.setAttribute(\"aria-expanded\", \"false\");\n el.title = \"Open block menu or drag to reorder\";\n // The icon must not be its own hit target: a real mouse-down inside a\n // nested editor (a column) lands on the SVG, and a container block's\n // capture-phase block-select handler (RegistryBlockNode) only spares the\n // grip DIV — so a press on the icon gets swallowed and the block can't be\n // dragged out of / between columns. `pointer-events:none` makes every\n // press in the grip area resolve to the DIV instead.\n el.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"currentColor\" style=\"pointer-events:none\">\n <circle cx=\"5.5\" cy=\"3\" r=\"1.5\"/><circle cx=\"10.5\" cy=\"3\" r=\"1.5\"/>\n <circle cx=\"5.5\" cy=\"8\" r=\"1.5\"/><circle cx=\"10.5\" cy=\"8\" r=\"1.5\"/>\n <circle cx=\"5.5\" cy=\"13\" r=\"1.5\"/><circle cx=\"10.5\" cy=\"13\" r=\"1.5\"/>\n </svg>`;\n return el;\n };\n\n const hideHandle = () => {\n if (menu) return;\n forceHideHandle();\n };\n\n const removeDragListeners = () => {\n document.removeEventListener(\"mousemove\", handleDocumentMouseMove);\n document.removeEventListener(\"mouseup\", handleDocumentMouseUp);\n document.removeEventListener(\"keydown\", handleDocumentKeyDown);\n };\n\n function handleMenuDocumentMouseDown(event: MouseEvent) {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (menu?.contains(target) || handle?.contains(target)) return;\n closeMenu({ hideGrip: true });\n }\n\n function handleMenuKeyDown(event: KeyboardEvent) {\n if (!menu) return;\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n closeMenu({ hideGrip: true });\n return;\n }\n\n if (\n event.key !== \"ArrowDown\" &&\n event.key !== \"ArrowUp\" &&\n event.key !== \"Home\" &&\n event.key !== \"End\"\n ) {\n return;\n }\n\n const buttons = Array.from(\n menu.querySelectorAll<HTMLButtonElement>(\"button\"),\n );\n if (buttons.length === 0) return;\n\n event.preventDefault();\n const activeIndex = buttons.indexOf(\n document.activeElement as HTMLButtonElement,\n );\n let nextIndex = activeIndex < 0 ? 0 : activeIndex;\n\n if (event.key === \"ArrowDown\") {\n nextIndex = (nextIndex + 1) % buttons.length;\n } else if (event.key === \"ArrowUp\") {\n nextIndex = (nextIndex - 1 + buttons.length) % buttons.length;\n } else if (event.key === \"Home\") {\n nextIndex = 0;\n } else if (event.key === \"End\") {\n nextIndex = buttons.length - 1;\n }\n\n buttons[nextIndex]?.focus({ preventScroll: true });\n }\n\n function handleMenuViewportChange() {\n closeMenu({ hideGrip: true });\n }\n\n const finishDragSession = (commit: boolean, event?: MouseEvent) => {\n const session = dragSession;\n if (!session) return;\n\n removeDragListeners();\n\n if (commit && session.dragging && session.dropTarget) {\n const sourceStart = session.sourcePos;\n const sourceEnd = session.sourcePos + session.sourceNodeSize;\n const target = session.dropTarget;\n const dropPos = target.pos;\n const isSideDrop =\n target.placement === \"left\" || target.placement === \"right\";\n\n if (\n target.view !== session.view ||\n (isSideDrop\n ? // Side drop (column build): proceed for any block that isn't the\n // source itself, including the source's immediate neighbour.\n target.targetPos !== sourceStart\n : dropPos !== sourceStart &&\n dropPos !== sourceEnd &&\n !(dropPos > sourceStart && dropPos < sourceEnd))\n ) {\n const sourceNode = session.view.state.doc.nodeAt(sourceStart);\n if (sourceNode) {\n const sourceRegistration = registrationForView(session.view);\n const transferData = sourceRegistration?.getDragTransferData?.({\n view: session.view,\n node: sourceNode,\n pos: sourceStart,\n });\n const targetNode = target.view.state.doc.nodeAt(target.targetPos);\n const handled =\n !!targetNode &&\n (target.registration.handleDrop?.(transferData, {\n view: target.view,\n sourceView: session.view,\n sourceNode,\n sourcePos: sourceStart,\n sourceNodeSize: sourceNode.nodeSize,\n targetNode,\n targetPos: target.targetPos,\n targetNodeSize: target.targetNodeSize,\n insertPos: dropPos,\n placement: target.placement,\n }) ??\n false);\n\n if (handled) {\n target.view.focus();\n } else if (target.view === session.view) {\n const insertPos =\n dropPos > sourceStart ? dropPos - sourceNode.nodeSize : dropPos;\n const tr = session.view.state.tr\n .delete(sourceStart, sourceEnd)\n .insert(insertPos, sourceNode);\n\n tr.setSelection(NodeSelection.create(tr.doc, insertPos));\n\n session.view.dispatch(tr.scrollIntoView());\n session.view.focus();\n } else {\n try {\n const targetNode = target.view.state.schema.nodeFromJSON(\n sourceNode.toJSON(),\n );\n target.registration.receiveDragTransferData?.(transferData, {\n view: target.view,\n node: targetNode,\n pos: dropPos,\n sourceView: session.view,\n });\n const insertTr = target.view.state.tr.insert(\n dropPos,\n targetNode,\n );\n insertTr.setSelection(\n NodeSelection.create(insertTr.doc, dropPos),\n );\n target.view.dispatch(insertTr.scrollIntoView());\n\n const deleteTr = session.view.state.tr.delete(\n sourceStart,\n sourceEnd,\n );\n session.view.dispatch(deleteTr);\n target.view.focus();\n } catch {\n // If the target schema cannot accept this node, leave the\n // source document untouched.\n }\n }\n }\n }\n } else if (commit && !session.dragging && event) {\n openMenu(\n {\n view: session.view,\n sourceBlock: session.sourceBlock,\n sourcePos: session.sourcePos,\n sourceNodeSize: session.sourceNodeSize,\n },\n handle?.getBoundingClientRect() ??\n session.sourceBlock.getBoundingClientRect(),\n );\n }\n\n cleanupDragVisuals();\n dragSession = null;\n if (activeDragRegistration === currentRegistration) {\n activeDragRegistration = null;\n }\n if (session.dragging || !commit) hideHandle();\n };\n\n const beginDragSession = (session: DragSession, event: MouseEvent) => {\n session.dragging = true;\n session.preview = createDragPreview(session.sourceBlock);\n session.sourceBlock.classList.add(\"notion-block--dragging\");\n document.documentElement.classList.add(\"notion-editor-is-dragging\");\n positionDragPreview(session, event.clientX, event.clientY);\n updateDropLine(\n session,\n findAnyDropTarget(session, event.clientX, event.clientY),\n );\n };\n\n function handleDocumentMouseMove(event: MouseEvent) {\n if (!dragSession) return;\n event.preventDefault();\n\n const movedEnough =\n Math.hypot(\n event.clientX - dragSession.startX,\n event.clientY - dragSession.startY,\n ) > 4;\n\n if (!dragSession.dragging && movedEnough) {\n beginDragSession(dragSession, event);\n }\n\n if (!dragSession.dragging) return;\n\n positionDragPreview(dragSession, event.clientX, event.clientY);\n updateDropLine(\n dragSession,\n findAnyDropTarget(dragSession, event.clientX, event.clientY),\n );\n }\n\n function handleDocumentMouseUp(event: MouseEvent) {\n event.preventDefault();\n finishDragSession(true, event);\n }\n\n function handleDocumentKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n finishDragSession(false);\n }\n\n return [\n new Plugin({\n key: dragHandleKey,\n view(editorView) {\n const registration: DragHandleRegistration = {\n view: editorView,\n wrapperSelector,\n getDragTransferData,\n receiveDragTransferData,\n handleDrop,\n canHover: () =>\n !!handle && !menu && !dragSession && editor.isEditable,\n findHoverBlock: (clientX, clientY) =>\n findForgivingBlock(editorView, clientX, clientY),\n showHoverBlock: (block) => showHandleForBlock(editorView, block),\n hideHover: () => hideHandle(),\n };\n currentRegistration = registration;\n dragHandleRegistrations.add(registration);\n retainGlobalHoverListener();\n handle = createHandle();\n const wrapper = editorView.dom.closest(wrapperSelector);\n if (wrapper) {\n (wrapper as HTMLElement).style.position = \"relative\";\n wrapper.appendChild(handle);\n }\n\n handle.addEventListener(\"mousedown\", (e) => {\n e.stopPropagation();\n if (e.button !== 0) return;\n closeMenu();\n if (!editor.isEditable) {\n e.preventDefault();\n return;\n }\n\n if (!currentBlock || dragStartPos === null) return;\n\n const sourceNode = editorView.state.doc.nodeAt(dragStartPos);\n if (!sourceNode) return;\n\n e.preventDefault();\n dragSession = {\n view: editorView,\n sourceBlock: currentBlock,\n sourcePos: dragStartPos,\n sourceNodeSize: sourceNode.nodeSize,\n startX: e.clientX,\n startY: e.clientY,\n dragging: false,\n preview: null,\n dropLine: null,\n dropTarget: null,\n };\n activeDragRegistration = registration;\n\n document.addEventListener(\"mousemove\", handleDocumentMouseMove);\n document.addEventListener(\"mouseup\", handleDocumentMouseUp);\n document.addEventListener(\"keydown\", handleDocumentKeyDown);\n });\n\n handle.addEventListener(\"keydown\", (e) => {\n if (e.key !== \"Enter\" && e.key !== \" \") return;\n e.preventDefault();\n e.stopPropagation();\n closeMenu();\n if (!editor.isEditable || !currentBlock || dragStartPos === null) {\n return;\n }\n\n const sourceNode = editorView.state.doc.nodeAt(dragStartPos);\n if (!sourceNode) return;\n\n openMenu(\n {\n view: editorView,\n sourceBlock: currentBlock,\n sourcePos: dragStartPos,\n sourceNodeSize: sourceNode.nodeSize,\n },\n handle?.getBoundingClientRect() ??\n currentBlock.getBoundingClientRect(),\n );\n });\n\n return {\n destroy() {\n closeMenu({ hideGrip: true });\n finishDragSession(false);\n releaseGlobalHoverListener();\n dragHandleRegistrations.delete(registration);\n if (activeDragRegistration === registration) {\n activeDragRegistration = null;\n }\n handle?.remove();\n handle = null;\n currentRegistration = null;\n },\n };\n },\n props: {\n handleDOMEvents: {\n mousemove(_view, event) {\n updateRegisteredHover(event.clientX, event.clientY);\n return false;\n },\n drop() {\n closeMenu({ hideGrip: true });\n finishDragSession(false);\n hideHandle();\n return false;\n },\n },\n },\n }),\n ];\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"DragHandle.js","sourceRoot":"","sources":["../../../src/client/rich-markdown-editor/DragHandle.ts"],"names":[],"mappings":"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","sourcesContent":["import { Extension } from \"@tiptap/core\";\nimport {\n Plugin,\n PluginKey,\n NodeSelection,\n TextSelection,\n type Transaction,\n} from \"@tiptap/pm/state\";\nimport type { Node as ProseMirrorNode } from \"@tiptap/pm/model\";\nimport { type EditorView } from \"@tiptap/pm/view\";\n\n/**\n * Default editor-wrapper CSS selector the drag handle scopes itself to.\n *\n * The handle, the drop indicator, and the `position: relative` anchor are all\n * appended to / measured against the closest ancestor matching this selector.\n * Content's editor wraps its ProseMirror DOM in a `.visual-editor-wrapper`\n * element, so that is the historical default. Other apps (e.g. the plan editor)\n * pass their own wrapper selector via {@link DragHandleOptions.wrapperSelector}.\n */\nexport const DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR = \".visual-editor-wrapper\";\n\nexport interface DragHandleOptions {\n /**\n * CSS selector for the editor wrapper element the handle is anchored to.\n *\n * Must match an ancestor of the ProseMirror editor DOM. The wrapper gets\n * `position: relative` so the absolutely-positioned grip and drop indicator\n * can be placed relative to it. Defaults to\n * {@link DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR} so Content keeps working\n * unchanged.\n */\n wrapperSelector: string;\n /**\n * Optional source-side payload for a cross-editor block move. The editor doc\n * carries ProseMirror node content, but app-owned side-map data (for example a\n * plan `diagram` block's HTML/CSS) can live outside the doc; this lets the\n * host carry that data to the receiving editor before the node is inserted.\n */\n getDragTransferData?: (context: {\n view: EditorView;\n node: ProseMirrorNode;\n pos: number;\n }) => unknown;\n /**\n * Optional target-side receiver for cross-editor transfer data. Called before\n * the node is inserted into the target editor so the target's serializer can\n * resolve app-owned data during the synchronous ProseMirror update.\n */\n receiveDragTransferData?: (\n data: unknown,\n context: {\n view: EditorView;\n node: ProseMirrorNode;\n pos: number;\n sourceView: EditorView;\n },\n ) => void;\n /**\n * Optional host-level drop handler for document-specific structure changes.\n * Returning true tells the shared drag handle that the host fully handled the\n * move and no ProseMirror insert/delete should run. This is used for\n * Notion-style side drops where dropping a block to the left/right creates or\n * inserts into a column layout rather than inserting into the target editor.\n */\n handleDrop?: (data: unknown, context: DragHandleDropContext) => boolean;\n}\n\nconst dragHandleKey = new PluginKey(\"dragHandle\");\nconst HOVER_SIDE_OUTSET_REM = 8;\n// Notion-style side drop: drag a block to a neighbour's LEFT/RIGHT region and it\n// builds (or joins) a column layout instead of reordering. The activation region\n// has to be GENEROUS or the gesture is dead for a real human — a natural drag\n// releases somewhere over the block's body, nowhere near a thin edge sliver. The\n// old values (28% of width, capped at 140px, AND only the vertical middle 60%)\n// left a wide ~820px plan block with two ~17%-of-width edge slivers in a 35px-tall\n// band as the ONLY column targets — ~66% of the block (the whole centre) plus the\n// top/bottom only ever reordered, so \"drag side by side\" essentially never made\n// columns. Now each side claims ~a third of the width across the FULL block\n// height, with a middle band always preserved for before/after reorder.\nconst SIDE_DROP_ZONE_RATIO = 0.33;\nconst SIDE_DROP_ZONE_MIN_PX = 56;\nconst SIDE_DROP_ZONE_MAX_PX = 320;\n// Never let the two side zones swallow the whole block: keep at least the middle\n// ~10% of the width as the before/after reorder band so dropping over the centre\n// still moves the block above/below the target (Notion keeps reorder reachable).\nconst SIDE_DROP_ZONE_MAX_WIDTH_FRACTION = 0.45;\nconst DRAG_HANDLE_MENU_STYLE_ID = \"an-rich-md-drag-menu-styles\";\nconst DRAG_HANDLE_MENU_WIDTH = 220;\nconst DRAG_HANDLE_MENU_GAP = 6;\nconst DRAG_HANDLE_MENU_VIEWPORT_PADDING = 8;\n\ntype DropTarget = {\n registration: DragHandleRegistration;\n view: EditorView;\n block: HTMLElement;\n placement: DragHandleDropPlacement;\n pos: number;\n targetPos: number;\n targetNodeSize: number;\n rect: DOMRect;\n};\n\nexport type DragHandleDropPlacement = \"before\" | \"after\" | \"left\" | \"right\";\n\nexport type DragHandleDropContext = {\n view: EditorView;\n sourceView: EditorView;\n sourceNode: ProseMirrorNode;\n sourcePos: number;\n sourceNodeSize: number;\n targetNode: ProseMirrorNode;\n targetPos: number;\n targetNodeSize: number;\n insertPos: number;\n placement: DragHandleDropPlacement;\n};\n\ntype DragSession = {\n view: EditorView;\n sourceBlock: HTMLElement;\n sourcePos: number;\n sourceNodeSize: number;\n startX: number;\n startY: number;\n dragging: boolean;\n preview: HTMLElement | null;\n dropLine: HTMLElement | null;\n dropTarget: DropTarget | null;\n};\n\ntype HoverBlock = {\n node: HTMLElement;\n pmPos: number;\n rect: DOMRect;\n};\n\ntype DragHandleMenuContext = {\n view: EditorView;\n sourceBlock: HTMLElement;\n sourcePos: number;\n sourceNodeSize: number;\n};\n\ntype DragHandleRegistration = {\n view: EditorView;\n wrapperSelector: string;\n getDragTransferData?: DragHandleOptions[\"getDragTransferData\"];\n receiveDragTransferData?: DragHandleOptions[\"receiveDragTransferData\"];\n handleDrop?: DragHandleOptions[\"handleDrop\"];\n canHover?: () => boolean;\n findHoverBlock?: (clientX: number, clientY: number) => HoverBlock | null;\n showHoverBlock?: (block: HoverBlock) => void;\n hideHover?: () => void;\n /** The currently displayed grip's bounding rect, or null when hidden. */\n gripRect?: () => DOMRect | null;\n};\n\nconst dragHandleRegistrations = new Set<DragHandleRegistration>();\nlet dragHandleGlobalHoverListeners = 0;\nlet activeDragRegistration: DragHandleRegistration | null = null;\n// The registration whose grip is currently shown. Used to keep that grip alive\n// while the cursor travels from a block's body to its grip, even when the grip\n// sits in a contested gap (an inter-column gap or a tab body's left offset)\n// where another editor's wide forgiving zone would otherwise re-win the hover\n// and hide the grip out from under the approaching cursor.\nlet activeHoverRegistration: DragHandleRegistration | null = null;\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.min(Math.max(value, min), max);\n\nconst editorArea = (registration: DragHandleRegistration) => {\n const rect = registration.view.dom.getBoundingClientRect();\n return rect.width * rect.height;\n};\n\nconst updateRegisteredHover = (clientX: number, clientY: number) => {\n if (activeDragRegistration) {\n for (const registration of dragHandleRegistrations) {\n registration.hideHover?.();\n }\n activeHoverRegistration = null;\n return;\n }\n\n const candidates: Array<{\n registration: DragHandleRegistration;\n block: HoverBlock;\n }> = [];\n\n for (const registration of dragHandleRegistrations) {\n if (!registration.view.dom.isConnected || !registration.canHover?.()) {\n registration.hideHover?.();\n continue;\n }\n const block = registration.findHoverBlock?.(clientX, clientY);\n if (block) {\n candidates.push({ registration, block });\n } else {\n registration.hideHover?.();\n }\n }\n\n // Grip keepalive. Once a block's grip is showing, hold it while the cursor\n // travels LEFT of that block's content toward its grip glyph — within the\n // block's own vertical row and no further left than the glyph itself. This is\n // what makes grips grabbable for blocks that are NOT flush with the page's\n // left gutter (a right column, a tab body): their grip sits in a gap that the\n // neighbour's wide forgiving zone also claims, so the normal picker would flip\n // hover to the neighbour mid-approach and the grip would vanish before the\n // cursor reaches it. The keepalive only bridges the body→grip gap — it does\n // NOT fire while the cursor is over content (so the innermost/nested picking\n // and gutter-grab rules below still decide there) and the row guard stops it\n // from sticking the grip across vertical moves to another block's row.\n if (activeHoverRegistration) {\n const held = candidates.find(\n (candidate) => candidate.registration === activeHoverRegistration,\n );\n const grip = activeHoverRegistration.gripRect?.();\n if (\n held &&\n grip &&\n clientY >= held.block.rect.top &&\n clientY < held.block.rect.bottom &&\n clientX >= grip.left - 4 &&\n clientX < held.block.rect.left\n ) {\n for (const registration of dragHandleRegistrations) {\n if (registration !== held.registration) registration.hideHover?.();\n }\n held.registration.showHoverBlock?.(held.block);\n return;\n }\n }\n\n // Pick which editor owns the grip when several register a hover block at this\n // point. Nested region editors (e.g. each column inside a `columns` block) tile\n // their container's whole footprint AND extend a wide forgiving zone\n // (HOVER_SIDE_OUTSET_REM) into its left-margin gutter, so a pure\n // \"smallest editor wins\" rule lets an inner block beat the container everywhere\n // and leaves the container itself impossible to grab. Split candidates by where\n // the cursor sits relative to each block:\n // - Over a block's body (clientX at/after its left edge) the innermost\n // (smallest) editor wins, so nested blocks stay grabbable from their content.\n // - In the shared left-margin gutter (clientX left of every candidate's\n // content, where the grip lives) the outermost (largest) editor wins, so the\n // container block can be picked up and reordered.\n // Prefer the candidate whose block actually sits UNDER the cursor\n // horizontally. Without this, a left column's forgiving side zone reaches\n // across the inter-column gap, ties the right column's editor on area, and\n // wins — so hovering a right-column block shows the grip for the LEFT block\n // (and right-column blocks appear to have no grip at all). `overContent`\n // restricts to blocks the cursor is genuinely within; `rightOfLeftEdge` keeps\n // the gutter-grab behaviour; fully left of every block → the container wins.\n const overContent = candidates.filter(\n (candidate) =>\n clientX >= candidate.block.rect.left &&\n clientX <= candidate.block.rect.right,\n );\n // The grip renders in a narrow band just LEFT of each block (≈24px). A block\n // must OWN that band so moving the cursor onto its grip keeps showing (and\n // lets you press) that block's grip — otherwise, for a column block whose grip\n // sits in the gutter/inter-column gap, the \"gutter → largest editor\" rule\n // below would flip the hover to the columns container and the grip would\n // vanish out from under the cursor, making inner column blocks impossible to\n // drag. The band is narrow, so it does not collide with the neighbouring\n // column's content (the right column's grip lives in the inter-column gap,\n // left of its own content but right of the left column's content).\n const GRIP_HOVER_ZONE_PX = 28;\n const overGrip = candidates.filter(\n (candidate) =>\n clientX >= candidate.block.rect.left - GRIP_HOVER_ZONE_PX &&\n clientX < candidate.block.rect.left,\n );\n const rightOfLeftEdge = candidates.filter(\n (candidate) => clientX >= candidate.block.rect.left,\n );\n let active: {\n registration: DragHandleRegistration;\n block: HoverBlock;\n } | null;\n const innerPool =\n overContent.length > 0\n ? overContent\n : overGrip.length > 0\n ? overGrip\n : rightOfLeftEdge;\n if (innerPool.length > 0) {\n innerPool.sort(\n (a, b) => editorArea(a.registration) - editorArea(b.registration),\n );\n active = innerPool[0];\n } else {\n candidates.sort(\n (a, b) => editorArea(b.registration) - editorArea(a.registration),\n );\n active = candidates[0] ?? null;\n }\n\n for (const registration of dragHandleRegistrations) {\n if (registration !== active?.registration) registration.hideHover?.();\n }\n active?.registration.showHoverBlock?.(active.block);\n activeHoverRegistration = active?.registration ?? null;\n};\n\nconst handleGlobalHoverMove = (event: MouseEvent) => {\n updateRegisteredHover(event.clientX, event.clientY);\n};\n\nconst retainGlobalHoverListener = () => {\n dragHandleGlobalHoverListeners += 1;\n if (dragHandleGlobalHoverListeners === 1) {\n document.addEventListener(\"mousemove\", handleGlobalHoverMove);\n }\n};\n\nconst releaseGlobalHoverListener = () => {\n dragHandleGlobalHoverListeners = Math.max(\n 0,\n dragHandleGlobalHoverListeners - 1,\n );\n if (dragHandleGlobalHoverListeners === 0) {\n document.removeEventListener(\"mousemove\", handleGlobalHoverMove);\n }\n};\n\nconst ensureDragHandleMenuStyles = () => {\n if (document.getElementById(DRAG_HANDLE_MENU_STYLE_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = DRAG_HANDLE_MENU_STYLE_ID;\n style.textContent = `\n.an-rich-md-drag-menu {\n position: fixed;\n z-index: 9999;\n width: ${DRAG_HANDLE_MENU_WIDTH}px;\n padding: 4px;\n border: 1px solid hsl(var(--border, 214.3 31.8% 91.4%));\n border-radius: 7px;\n background: hsl(var(--popover, 0 0% 100%));\n color: hsl(var(--popover-foreground, var(--foreground, 222.2 84% 4.9%)));\n box-shadow:\n 0 12px 32px rgb(15 23 42 / 0.16),\n 0 2px 8px rgb(15 23 42 / 0.08);\n font-family: inherit;\n font-size: 13px;\n line-height: 1.35;\n}\n\n.an-rich-md-drag-menu__item {\n display: flex;\n width: 100%;\n align-items: center;\n gap: 9px;\n border: 0;\n border-radius: 5px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n font: inherit;\n letter-spacing: 0;\n padding: 7px 8px;\n text-align: left;\n}\n\n.an-rich-md-drag-menu__item:hover,\n.an-rich-md-drag-menu__item:focus-visible {\n background: hsl(var(--accent, 210 40% 96.1%));\n color: hsl(var(--accent-foreground, var(--foreground, 222.2 84% 4.9%)));\n outline: none;\n}\n\n.an-rich-md-drag-menu__item[data-danger=\"true\"] {\n color: hsl(var(--destructive, 0 84.2% 60.2%));\n}\n\n.an-rich-md-drag-menu__item[data-danger=\"true\"]:hover,\n.an-rich-md-drag-menu__item[data-danger=\"true\"]:focus-visible {\n background: hsl(var(--destructive, 0 84.2% 60.2%) / 0.1);\n}\n\n.an-rich-md-drag-menu__icon {\n position: relative;\n flex: 0 0 auto;\n width: 18px;\n height: 18px;\n color: hsl(var(--muted-foreground, 215.4 16.3% 46.9%));\n}\n\n.an-rich-md-drag-menu__item[data-danger=\"true\"] .an-rich-md-drag-menu__icon {\n color: currentColor;\n}\n\n.an-rich-md-drag-menu__icon::before,\n.an-rich-md-drag-menu__icon::after {\n content: \"\";\n position: absolute;\n box-sizing: border-box;\n}\n\n.an-rich-md-drag-menu__icon--duplicate::before,\n.an-rich-md-drag-menu__icon--duplicate::after {\n width: 11px;\n height: 11px;\n border: 1.5px solid currentColor;\n border-radius: 2px;\n}\n\n.an-rich-md-drag-menu__icon--duplicate::before {\n left: 6px;\n top: 2px;\n opacity: 0.55;\n}\n\n.an-rich-md-drag-menu__icon--duplicate::after {\n left: 2px;\n top: 6px;\n background: hsl(var(--popover, 0 0% 100%));\n}\n\n.an-rich-md-drag-menu__icon--insert::before {\n left: 3px;\n top: 8px;\n width: 12px;\n height: 1.5px;\n border-radius: 999px;\n background: currentColor;\n}\n\n.an-rich-md-drag-menu__icon--insert::after {\n left: 8px;\n top: 3px;\n width: 1.5px;\n height: 12px;\n border-radius: 999px;\n background: currentColor;\n}\n\n.an-rich-md-drag-menu__icon--delete::before {\n left: 4px;\n top: 7px;\n width: 10px;\n height: 11px;\n border: 1.5px solid currentColor;\n border-top: 0;\n border-radius: 0 0 2px 2px;\n}\n\n.an-rich-md-drag-menu__icon--delete::after {\n left: 3px;\n top: 4px;\n width: 12px;\n height: 1.5px;\n border-radius: 999px;\n background: currentColor;\n box-shadow: 3px -2.5px 0 -0.4px currentColor;\n}\n\n.an-rich-md-drag-menu__label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n`;\n document.head.appendChild(style);\n};\n\n/**\n * App-agnostic Tiptap extension providing a Notion-style left-margin drag grip\n * (the `::` handle), block selection, and drag-to-reorder over top-level block\n * nodes.\n *\n * Behavior:\n * - On hover over any top-level block, a `.drag-handle` grip appears in the left\n * margin (forgiving hit zone extends {@link HOVER_SIDE_OUTSET_REM}rem to the\n * sides and into the gap above/between blocks).\n * - Single-clicking the grip selects the block and opens a block action menu.\n * Dragging past a small threshold starts a reorder, showing a floating clone\n * preview (`.notion-drag-preview`) and a `.notion-drop-indicator` line.\n * `Escape` cancels.\n * - While dragging, the source block carries `.notion-block--dragging` and the\n * document element carries `.notion-editor-is-dragging` so apps can style the\n * in-flight state. Apps own all of these CSS class names.\n * - Works for ANY top-level node ProseMirror renders as a direct child of the\n * editor — including `group: \"block\"`, `draggable: true` atoms such as the\n * plan editor's `planBlock`.\n *\n * The only app-specific coupling — the editor wrapper element the handle and\n * drop indicator are anchored to — is configurable via\n * {@link DragHandleOptions.wrapperSelector}, defaulting to\n * {@link DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR} (`.visual-editor-wrapper`) so the\n * Content editor keeps working byte-identically. The plan editor passes its own\n * wrapper selector via `DragHandle.configure({ wrapperSelector })`.\n */\nexport const DragHandle = Extension.create<DragHandleOptions>({\n name: \"dragHandle\",\n\n addOptions() {\n return {\n wrapperSelector: DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR,\n getDragTransferData: undefined,\n receiveDragTransferData: undefined,\n };\n },\n\n addProseMirrorPlugins() {\n const editor = this.editor;\n const wrapperSelector = this.options.wrapperSelector;\n const getDragTransferData = this.options.getDragTransferData;\n const receiveDragTransferData = this.options.receiveDragTransferData;\n const handleDrop = this.options.handleDrop;\n let handle: HTMLElement | null = null;\n let menu: HTMLElement | null = null;\n let menuContext: DragHandleMenuContext | null = null;\n let currentBlock: HTMLElement | null = null;\n let dragStartPos: number | null = null;\n let dragSession: DragSession | null = null;\n let currentRegistration: DragHandleRegistration | null = null;\n\n const getHoverSideOutset = () => {\n const rootFontSize = Number.parseFloat(\n getComputedStyle(document.documentElement).fontSize,\n );\n return (\n (Number.isFinite(rootFontSize) ? rootFontSize : 16) *\n HOVER_SIDE_OUTSET_REM\n );\n };\n\n const getTopLevelBlocks = (editorView: EditorView): HoverBlock[] => {\n const blocks: HoverBlock[] = [];\n\n editorView.state.doc.forEach((_node, offset) => {\n const dom = editorView.nodeDOM(offset);\n if (!(dom instanceof HTMLElement)) return;\n\n blocks.push({\n node: dom,\n pmPos: offset,\n rect: dom.getBoundingClientRect(),\n });\n });\n\n return blocks;\n };\n\n const registrationForView = (\n editorView: EditorView,\n ): DragHandleRegistration | null => {\n for (const registration of dragHandleRegistrations) {\n if (registration.view === editorView) return registration;\n }\n return null;\n };\n\n const findForgivingBlock = (\n editorView: EditorView,\n clientX: number,\n clientY: number,\n ): HoverBlock | null => {\n const blocks = getTopLevelBlocks(editorView);\n if (blocks.length === 0) return null;\n\n const sideOutset = getHoverSideOutset();\n const pageLeft = 0;\n const pageRight = window.visualViewport?.width ?? window.innerWidth;\n\n for (let index = 0; index < blocks.length; index++) {\n const block = blocks[index];\n const nextBlock = blocks[index + 1];\n const blockBottomGap = nextBlock\n ? Math.max(0, nextBlock.rect.top - block.rect.bottom)\n : 0;\n const zoneLeft = Math.max(pageLeft, block.rect.left - sideOutset);\n const zoneRight = Math.min(pageRight, block.rect.right + sideOutset);\n const zoneTop =\n index === 0\n ? Math.max(0, block.rect.top - blockBottomGap)\n : block.rect.top;\n const zoneBottom = nextBlock ? nextBlock.rect.top : block.rect.bottom;\n\n if (\n clientX >= zoneLeft &&\n clientX <= zoneRight &&\n clientY >= zoneTop &&\n clientY < zoneBottom\n ) {\n return block;\n }\n }\n\n return null;\n };\n\n const showHandleForBlock = (editorView: EditorView, block: HoverBlock) => {\n if (!handle) return;\n currentBlock = block.node;\n dragStartPos = block.pmPos;\n\n const wrapper = editorView.dom.closest(wrapperSelector);\n if (!wrapper) return;\n\n // Lazily (re)attach the grip the first time a wrapper is actually\n // available. At plugin `view()` init the editor DOM may not yet be mounted\n // inside the wrapper (React mounts `EditorContent` after the EditorView is\n // constructed), so the init-time append can silently no-op and leave the\n // grip orphaned. Re-home it here once the wrapper exists.\n if (handle.parentElement !== wrapper) {\n (wrapper as HTMLElement).style.position = \"relative\";\n wrapper.appendChild(handle);\n }\n\n const wrapperRect = wrapper.getBoundingClientRect();\n\n handle.style.display = \"flex\";\n handle.style.top = `${block.rect.top - wrapperRect.top + 2}px`;\n handle.style.left = \"-24px\";\n };\n\n const selectBlockAt = (editorView: EditorView, pos: number) => {\n try {\n const sel = NodeSelection.create(editorView.state.doc, pos);\n editorView.dispatch(editorView.state.tr.setSelection(sel));\n editorView.focus();\n return sel;\n } catch {\n return null;\n }\n };\n\n const cleanupDragVisuals = () => {\n dragSession?.preview?.remove();\n dragSession?.dropLine?.remove();\n dragSession?.sourceBlock.classList.remove(\"notion-block--dragging\");\n document.documentElement.classList.remove(\"notion-editor-is-dragging\");\n };\n\n const createDragPreview = (block: HTMLElement): HTMLElement => {\n const blockRect = block.getBoundingClientRect();\n const preview = document.createElement(\"div\");\n const clone = block.cloneNode(true) as HTMLElement;\n\n clone.classList.remove(\n \"ProseMirror-selectednode\",\n \"notion-block--dragging\",\n );\n clone.removeAttribute(\"contenteditable\");\n clone.style.background = \"transparent\";\n clone.style.backgroundColor = \"transparent\";\n clone.querySelectorAll(\"[contenteditable]\").forEach((node) => {\n node.removeAttribute(\"contenteditable\");\n });\n clone.querySelectorAll<HTMLElement>(\"*\").forEach((node) => {\n node.style.background = \"transparent\";\n node.style.backgroundColor = \"transparent\";\n });\n\n preview.className = \"notion-drag-preview\";\n preview.style.width = `${blockRect.width}px`;\n preview.appendChild(clone);\n document.body.appendChild(preview);\n\n return preview;\n };\n\n const createDropLine = (\n registration: DragHandleRegistration,\n ): HTMLElement | null => {\n const wrapper = registration.view.dom.closest(\n registration.wrapperSelector,\n );\n if (!wrapper) return null;\n\n const line = document.createElement(\"div\");\n line.className = \"notion-drop-indicator\";\n wrapper.appendChild(line);\n return line;\n };\n\n const forceHideHandle = () => {\n if (handle) {\n handle.style.display = \"none\";\n handle.setAttribute(\"aria-expanded\", \"false\");\n }\n currentBlock = null;\n dragStartPos = null;\n };\n\n const closeMenu = ({ hideGrip = false }: { hideGrip?: boolean } = {}) => {\n menu?.remove();\n menu = null;\n menuContext = null;\n handle?.setAttribute(\"aria-expanded\", \"false\");\n document.removeEventListener(\"mousedown\", handleMenuDocumentMouseDown, {\n capture: true,\n });\n document.removeEventListener(\"keydown\", handleMenuKeyDown, {\n capture: true,\n });\n window.removeEventListener(\"resize\", handleMenuViewportChange);\n window.removeEventListener(\"scroll\", handleMenuViewportChange, {\n capture: true,\n });\n if (hideGrip) forceHideHandle();\n };\n\n const resolveMenuContext = (context: DragHandleMenuContext) => {\n const latestBlock = getTopLevelBlocks(context.view).find(\n (block) => block.node === context.sourceBlock,\n );\n const sourcePos = latestBlock?.pmPos ?? context.sourcePos;\n const sourceNode = context.view.state.doc.nodeAt(sourcePos);\n if (!sourceNode) return null;\n\n return {\n ...context,\n sourcePos,\n sourceNode,\n sourceNodeSize: sourceNode.nodeSize,\n };\n };\n\n const focusSelectionNear = (\n view: EditorView,\n tr: Transaction,\n pos: number,\n bias: -1 | 1,\n ) => {\n tr.setSelection(\n TextSelection.near(\n tr.doc.resolve(clamp(pos, 0, tr.doc.content.size)),\n bias,\n ),\n );\n view.dispatch(tr.scrollIntoView());\n view.focus();\n };\n\n const duplicateBlock = (context: DragHandleMenuContext) => {\n const resolved = resolveMenuContext(context);\n if (!resolved) return;\n\n const insertPos = resolved.sourcePos + resolved.sourceNodeSize;\n const tr = resolved.view.state.tr.insert(insertPos, resolved.sourceNode);\n\n try {\n tr.setSelection(NodeSelection.create(tr.doc, insertPos));\n resolved.view.dispatch(tr.scrollIntoView());\n resolved.view.focus();\n } catch {\n focusSelectionNear(resolved.view, tr, insertPos, 1);\n }\n };\n\n const deleteBlock = (context: DragHandleMenuContext) => {\n const resolved = resolveMenuContext(context);\n if (!resolved) return;\n\n const { view, sourcePos, sourceNodeSize } = resolved;\n const paragraph = view.state.schema.nodes.paragraph;\n const sourceEnd = sourcePos + sourceNodeSize;\n\n if (view.state.doc.childCount <= 1 && paragraph) {\n const replacement = paragraph.createAndFill() ?? paragraph.create();\n const tr = view.state.tr.replaceWith(sourcePos, sourceEnd, replacement);\n focusSelectionNear(view, tr, sourcePos + 1, 1);\n return;\n }\n\n const tr = view.state.tr.delete(sourcePos, sourceEnd);\n const selectionBias = sourcePos >= tr.doc.content.size ? -1 : 1;\n focusSelectionNear(view, tr, sourcePos, selectionBias);\n };\n\n const insertParagraphBelow = (context: DragHandleMenuContext) => {\n const resolved = resolveMenuContext(context);\n const paragraph = resolved?.view.state.schema.nodes.paragraph;\n if (!resolved || !paragraph) return;\n\n const insertPos = resolved.sourcePos + resolved.sourceNodeSize;\n const paragraphNode = paragraph.createAndFill() ?? paragraph.create();\n const tr = resolved.view.state.tr.insert(insertPos, paragraphNode);\n tr.setSelection(TextSelection.create(tr.doc, insertPos + 1));\n resolved.view.dispatch(tr.scrollIntoView());\n resolved.view.focus();\n };\n\n const positionMenu = (anchorRect: DOMRect) => {\n if (!menu) return;\n\n const viewportWidth = window.visualViewport?.width ?? window.innerWidth;\n const viewportHeight =\n window.visualViewport?.height ?? window.innerHeight;\n const menuHeight = menu.offsetHeight || 118;\n const preferredLeft = anchorRect.right + DRAG_HANDLE_MENU_GAP;\n const alternateLeft =\n anchorRect.left - DRAG_HANDLE_MENU_WIDTH - DRAG_HANDLE_MENU_GAP;\n const left =\n preferredLeft +\n DRAG_HANDLE_MENU_WIDTH +\n DRAG_HANDLE_MENU_VIEWPORT_PADDING <=\n viewportWidth\n ? preferredLeft\n : alternateLeft;\n\n menu.style.left = `${clamp(\n left,\n DRAG_HANDLE_MENU_VIEWPORT_PADDING,\n viewportWidth -\n DRAG_HANDLE_MENU_WIDTH -\n DRAG_HANDLE_MENU_VIEWPORT_PADDING,\n )}px`;\n menu.style.top = `${clamp(\n anchorRect.top - 4,\n DRAG_HANDLE_MENU_VIEWPORT_PADDING,\n viewportHeight - menuHeight - DRAG_HANDLE_MENU_VIEWPORT_PADDING,\n )}px`;\n };\n\n const createMenuItem = (\n label: string,\n iconModifier: string,\n action: (context: DragHandleMenuContext) => void,\n options: { danger?: boolean } = {},\n ) => {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.className = \"an-rich-md-drag-menu__item\";\n button.setAttribute(\"role\", \"menuitem\");\n button.setAttribute(\"data-plan-interactive\", \"true\");\n if (options.danger) button.setAttribute(\"data-danger\", \"true\");\n\n const icon = document.createElement(\"span\");\n icon.className = `an-rich-md-drag-menu__icon an-rich-md-drag-menu__icon--${iconModifier}`;\n icon.setAttribute(\"aria-hidden\", \"true\");\n\n const labelElement = document.createElement(\"span\");\n labelElement.className = \"an-rich-md-drag-menu__label\";\n labelElement.textContent = label;\n\n button.append(icon, labelElement);\n button.addEventListener(\"mousedown\", (event) => {\n event.preventDefault();\n });\n button.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n const context = menuContext;\n if (!context) return;\n closeMenu({ hideGrip: true });\n action(context);\n });\n\n return button;\n };\n\n const openMenu = (context: DragHandleMenuContext, anchorRect: DOMRect) => {\n const resolved = resolveMenuContext(context);\n if (!resolved) return;\n\n closeMenu();\n selectBlockAt(resolved.view, resolved.sourcePos);\n ensureDragHandleMenuStyles();\n\n const el = document.createElement(\"div\");\n el.className = \"an-rich-md-drag-menu\";\n el.setAttribute(\"role\", \"menu\");\n el.setAttribute(\"aria-label\", \"Block actions\");\n el.setAttribute(\"data-plan-interactive\", \"true\");\n\n el.append(\n createMenuItem(\"Duplicate\", \"duplicate\", duplicateBlock),\n createMenuItem(\"Delete\", \"delete\", deleteBlock, { danger: true }),\n createMenuItem(\"Insert block below\", \"insert\", insertParagraphBelow),\n );\n\n menu = el;\n menuContext = {\n view: resolved.view,\n sourceBlock: resolved.sourceBlock,\n sourcePos: resolved.sourcePos,\n sourceNodeSize: resolved.sourceNodeSize,\n };\n document.body.appendChild(el);\n positionMenu(anchorRect);\n handle?.setAttribute(\"aria-expanded\", \"true\");\n document.addEventListener(\"mousedown\", handleMenuDocumentMouseDown, {\n capture: true,\n });\n document.addEventListener(\"keydown\", handleMenuKeyDown, {\n capture: true,\n });\n window.addEventListener(\"resize\", handleMenuViewportChange);\n window.addEventListener(\"scroll\", handleMenuViewportChange, {\n capture: true,\n });\n\n el.querySelector<HTMLButtonElement>(\"button\")?.focus({\n preventScroll: true,\n });\n };\n\n const findDropTarget = (\n registration: DragHandleRegistration,\n clientX: number,\n clientY: number,\n ): DropTarget | null => {\n const view = registration.view;\n const block = findForgivingBlock(view, clientX, clientY);\n if (!block) return null;\n\n const node = view.state.doc.nodeAt(block.pmPos);\n if (!node) return null;\n\n let placement: DragHandleDropPlacement;\n const withinBlockY =\n clientY >= block.rect.top && clientY <= block.rect.bottom;\n // Side (column) zones span the FULL block height — only the horizontal\n // position decides column-vs-reorder. Restricting to the vertical middle\n // (the old 0.2 band) made the already-tiny edge slivers nearly unhittable.\n const sideZoneWidth = Math.min(\n clamp(\n block.rect.width * SIDE_DROP_ZONE_RATIO,\n SIDE_DROP_ZONE_MIN_PX,\n SIDE_DROP_ZONE_MAX_PX,\n ),\n block.rect.width * SIDE_DROP_ZONE_MAX_WIDTH_FRACTION,\n );\n\n if (\n registration.handleDrop &&\n withinBlockY &&\n clientX <= block.rect.left + sideZoneWidth\n ) {\n placement = \"left\";\n } else if (\n registration.handleDrop &&\n withinBlockY &&\n clientX >= block.rect.right - sideZoneWidth\n ) {\n placement = \"right\";\n } else {\n placement =\n clientY < block.rect.top ||\n (clientY <= block.rect.bottom &&\n clientY < block.rect.top + block.rect.height / 2)\n ? \"before\"\n : \"after\";\n }\n const before = placement === \"before\" || placement === \"left\";\n\n return {\n registration,\n view,\n block: block.node,\n placement,\n pos: before ? block.pmPos : block.pmPos + node.nodeSize,\n targetPos: block.pmPos,\n targetNodeSize: node.nodeSize,\n rect: block.rect,\n };\n };\n\n const findAnyDropTarget = (\n session: DragSession,\n clientX: number,\n clientY: number,\n ): DropTarget | null => {\n const candidates: DropTarget[] = [];\n\n for (const registration of dragHandleRegistrations) {\n if (!registration.view.dom.isConnected) continue;\n if (\n registration.view !== session.view &&\n session.sourceBlock.contains(registration.view.dom)\n ) {\n continue;\n }\n const target = findDropTarget(registration, clientX, clientY);\n if (target) candidates.push(target);\n }\n\n candidates.sort((a, b) => {\n const aRect = a.view.dom.getBoundingClientRect();\n const bRect = b.view.dom.getBoundingClientRect();\n return aRect.width * aRect.height - bRect.width * bRect.height;\n });\n\n return candidates[0] ?? null;\n };\n\n const positionDragPreview = (\n session: DragSession,\n clientX: number,\n clientY: number,\n ) => {\n if (!session.preview) return;\n\n session.preview.style.transform = `translate3d(${clientX + 12}px, ${clientY + 10}px, 0)`;\n };\n\n const updateDropLine = (\n session: DragSession,\n target: DropTarget | null,\n ) => {\n const sourceEnd = session.sourcePos + session.sourceNodeSize;\n const isSideDrop =\n target?.placement === \"left\" || target?.placement === \"right\";\n if (\n !target ||\n (target.view === session.view &&\n (isSideDrop\n ? // A side drop only ever builds columns; the ProseMirror seam\n // position is irrelevant. The only no-op is dropping a block on\n // ITS OWN side — adjacent *different* blocks must still form\n // columns (otherwise dropping onto an immediate neighbour's\n // facing edge silently does nothing, which reads as \"side drop\n // works sometimes\").\n target.targetPos === session.sourcePos\n : target.pos === session.sourcePos ||\n target.pos === sourceEnd ||\n (target.pos > session.sourcePos && target.pos < sourceEnd)))\n ) {\n session.dropTarget = null;\n session.dropLine?.remove();\n session.dropLine = null;\n return;\n }\n\n const wrapper = target.view.dom.closest(\n target.registration.wrapperSelector,\n );\n if (!wrapper) return;\n\n if (!session.dropLine || session.dropLine.parentElement !== wrapper) {\n session.dropLine?.remove();\n session.dropLine = createDropLine(target.registration);\n }\n if (!session.dropLine) return;\n\n const wrapperRect = wrapper.getBoundingClientRect();\n const editorRect = target.view.dom.getBoundingClientRect();\n\n session.dropTarget = target;\n // A column (side) drop and a reorder (before/after) drop both draw the\n // `.notion-drop-indicator`, but they mean very different things, so the\n // column case carries a modifier class apps style distinctly (a bolder,\n // glowing vertical bar) — without a clear cue a human can't tell they've\n // entered column-build mode before releasing.\n const isColumnDrop =\n target.placement === \"left\" || target.placement === \"right\";\n session.dropLine.classList.toggle(\n \"notion-drop-indicator--column\",\n isColumnDrop,\n );\n if (isColumnDrop) {\n // A vertical bar centred on the seam at the target's left/right edge,\n // spanning the block's full height.\n const SIDE_BAR_WIDTH = 4;\n const seam =\n target.placement === \"left\" ? target.rect.left : target.rect.right;\n session.dropLine.style.left = `${seam - wrapperRect.left - SIDE_BAR_WIDTH / 2}px`;\n session.dropLine.style.top = `${target.rect.top - wrapperRect.top}px`;\n session.dropLine.style.width = `${SIDE_BAR_WIDTH}px`;\n session.dropLine.style.height = `${target.rect.height}px`;\n return;\n }\n\n const top =\n target.placement === \"before\" ? target.rect.top : target.rect.bottom;\n session.dropLine.style.left = `${editorRect.left - wrapperRect.left}px`;\n session.dropLine.style.top = `${top - wrapperRect.top}px`;\n session.dropLine.style.width = `${editorRect.width}px`;\n session.dropLine.style.height = \"3px\";\n };\n\n const createHandle = () => {\n const el = document.createElement(\"div\");\n el.className = \"drag-handle\";\n el.contentEditable = \"false\";\n el.draggable = false;\n el.tabIndex = 0;\n el.setAttribute(\"role\", \"button\");\n el.setAttribute(\"aria-label\", \"Open block menu or drag to reorder\");\n el.setAttribute(\"aria-haspopup\", \"menu\");\n el.setAttribute(\"aria-expanded\", \"false\");\n el.title = \"Open block menu or drag to reorder\";\n // The icon must not be its own hit target: a real mouse-down inside a\n // nested editor (a column) lands on the SVG, and a container block's\n // capture-phase block-select handler (RegistryBlockNode) only spares the\n // grip DIV — so a press on the icon gets swallowed and the block can't be\n // dragged out of / between columns. `pointer-events:none` makes every\n // press in the grip area resolve to the DIV instead.\n el.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"currentColor\" style=\"pointer-events:none\">\n <circle cx=\"5.5\" cy=\"3\" r=\"1.5\"/><circle cx=\"10.5\" cy=\"3\" r=\"1.5\"/>\n <circle cx=\"5.5\" cy=\"8\" r=\"1.5\"/><circle cx=\"10.5\" cy=\"8\" r=\"1.5\"/>\n <circle cx=\"5.5\" cy=\"13\" r=\"1.5\"/><circle cx=\"10.5\" cy=\"13\" r=\"1.5\"/>\n </svg>`;\n return el;\n };\n\n const hideHandle = () => {\n if (menu) return;\n forceHideHandle();\n };\n\n const removeDragListeners = () => {\n document.removeEventListener(\"mousemove\", handleDocumentMouseMove);\n document.removeEventListener(\"mouseup\", handleDocumentMouseUp);\n document.removeEventListener(\"keydown\", handleDocumentKeyDown);\n };\n\n function handleMenuDocumentMouseDown(event: MouseEvent) {\n const target = event.target;\n if (!(target instanceof Node)) return;\n if (menu?.contains(target) || handle?.contains(target)) return;\n closeMenu({ hideGrip: true });\n }\n\n function handleMenuKeyDown(event: KeyboardEvent) {\n if (!menu) return;\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n closeMenu({ hideGrip: true });\n return;\n }\n\n if (\n event.key !== \"ArrowDown\" &&\n event.key !== \"ArrowUp\" &&\n event.key !== \"Home\" &&\n event.key !== \"End\"\n ) {\n return;\n }\n\n const buttons = Array.from(\n menu.querySelectorAll<HTMLButtonElement>(\"button\"),\n );\n if (buttons.length === 0) return;\n\n event.preventDefault();\n const activeIndex = buttons.indexOf(\n document.activeElement as HTMLButtonElement,\n );\n let nextIndex = activeIndex < 0 ? 0 : activeIndex;\n\n if (event.key === \"ArrowDown\") {\n nextIndex = (nextIndex + 1) % buttons.length;\n } else if (event.key === \"ArrowUp\") {\n nextIndex = (nextIndex - 1 + buttons.length) % buttons.length;\n } else if (event.key === \"Home\") {\n nextIndex = 0;\n } else if (event.key === \"End\") {\n nextIndex = buttons.length - 1;\n }\n\n buttons[nextIndex]?.focus({ preventScroll: true });\n }\n\n function handleMenuViewportChange() {\n closeMenu({ hideGrip: true });\n }\n\n const finishDragSession = (commit: boolean, event?: MouseEvent) => {\n const session = dragSession;\n if (!session) return;\n\n removeDragListeners();\n\n if (commit && session.dragging && session.dropTarget) {\n const sourceStart = session.sourcePos;\n const sourceEnd = session.sourcePos + session.sourceNodeSize;\n const target = session.dropTarget;\n const dropPos = target.pos;\n const isSideDrop =\n target.placement === \"left\" || target.placement === \"right\";\n\n if (\n target.view !== session.view ||\n (isSideDrop\n ? // Side drop (column build): proceed for any block that isn't the\n // source itself, including the source's immediate neighbour.\n target.targetPos !== sourceStart\n : dropPos !== sourceStart &&\n dropPos !== sourceEnd &&\n !(dropPos > sourceStart && dropPos < sourceEnd))\n ) {\n const sourceNode = session.view.state.doc.nodeAt(sourceStart);\n if (sourceNode) {\n const sourceRegistration = registrationForView(session.view);\n const transferData = sourceRegistration?.getDragTransferData?.({\n view: session.view,\n node: sourceNode,\n pos: sourceStart,\n });\n const targetNode = target.view.state.doc.nodeAt(target.targetPos);\n const handled =\n !!targetNode &&\n (target.registration.handleDrop?.(transferData, {\n view: target.view,\n sourceView: session.view,\n sourceNode,\n sourcePos: sourceStart,\n sourceNodeSize: sourceNode.nodeSize,\n targetNode,\n targetPos: target.targetPos,\n targetNodeSize: target.targetNodeSize,\n insertPos: dropPos,\n placement: target.placement,\n }) ??\n false);\n\n if (handled) {\n target.view.focus();\n } else if (target.view === session.view) {\n const insertPos =\n dropPos > sourceStart ? dropPos - sourceNode.nodeSize : dropPos;\n const tr = session.view.state.tr\n .delete(sourceStart, sourceEnd)\n .insert(insertPos, sourceNode);\n\n tr.setSelection(NodeSelection.create(tr.doc, insertPos));\n\n session.view.dispatch(tr.scrollIntoView());\n session.view.focus();\n } else {\n try {\n const targetNode = target.view.state.schema.nodeFromJSON(\n sourceNode.toJSON(),\n );\n target.registration.receiveDragTransferData?.(transferData, {\n view: target.view,\n node: targetNode,\n pos: dropPos,\n sourceView: session.view,\n });\n const insertTr = target.view.state.tr.insert(\n dropPos,\n targetNode,\n );\n insertTr.setSelection(\n NodeSelection.create(insertTr.doc, dropPos),\n );\n target.view.dispatch(insertTr.scrollIntoView());\n\n const deleteTr = session.view.state.tr.delete(\n sourceStart,\n sourceEnd,\n );\n session.view.dispatch(deleteTr);\n target.view.focus();\n } catch {\n // If the target schema cannot accept this node, leave the\n // source document untouched.\n }\n }\n }\n }\n } else if (commit && !session.dragging && event) {\n openMenu(\n {\n view: session.view,\n sourceBlock: session.sourceBlock,\n sourcePos: session.sourcePos,\n sourceNodeSize: session.sourceNodeSize,\n },\n handle?.getBoundingClientRect() ??\n session.sourceBlock.getBoundingClientRect(),\n );\n }\n\n cleanupDragVisuals();\n dragSession = null;\n if (activeDragRegistration === currentRegistration) {\n activeDragRegistration = null;\n }\n if (session.dragging || !commit) hideHandle();\n };\n\n const beginDragSession = (session: DragSession, event: MouseEvent) => {\n session.dragging = true;\n session.preview = createDragPreview(session.sourceBlock);\n session.sourceBlock.classList.add(\"notion-block--dragging\");\n document.documentElement.classList.add(\"notion-editor-is-dragging\");\n positionDragPreview(session, event.clientX, event.clientY);\n updateDropLine(\n session,\n findAnyDropTarget(session, event.clientX, event.clientY),\n );\n };\n\n function handleDocumentMouseMove(event: MouseEvent) {\n if (!dragSession) return;\n event.preventDefault();\n\n const movedEnough =\n Math.hypot(\n event.clientX - dragSession.startX,\n event.clientY - dragSession.startY,\n ) > 4;\n\n if (!dragSession.dragging && movedEnough) {\n beginDragSession(dragSession, event);\n }\n\n if (!dragSession.dragging) return;\n\n positionDragPreview(dragSession, event.clientX, event.clientY);\n updateDropLine(\n dragSession,\n findAnyDropTarget(dragSession, event.clientX, event.clientY),\n );\n }\n\n function handleDocumentMouseUp(event: MouseEvent) {\n event.preventDefault();\n finishDragSession(true, event);\n }\n\n function handleDocumentKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n finishDragSession(false);\n }\n\n return [\n new Plugin({\n key: dragHandleKey,\n view(editorView) {\n const registration: DragHandleRegistration = {\n view: editorView,\n wrapperSelector,\n getDragTransferData,\n receiveDragTransferData,\n handleDrop,\n canHover: () =>\n !!handle && !menu && !dragSession && editor.isEditable,\n findHoverBlock: (clientX, clientY) =>\n findForgivingBlock(editorView, clientX, clientY),\n showHoverBlock: (block) => showHandleForBlock(editorView, block),\n hideHover: () => hideHandle(),\n gripRect: () =>\n handle && handle.style.display !== \"none\"\n ? handle.getBoundingClientRect()\n : null,\n };\n currentRegistration = registration;\n dragHandleRegistrations.add(registration);\n retainGlobalHoverListener();\n handle = createHandle();\n const wrapper = editorView.dom.closest(wrapperSelector);\n if (wrapper) {\n (wrapper as HTMLElement).style.position = \"relative\";\n wrapper.appendChild(handle);\n }\n\n handle.addEventListener(\"mousedown\", (e) => {\n e.stopPropagation();\n if (e.button !== 0) return;\n closeMenu();\n if (!editor.isEditable) {\n e.preventDefault();\n return;\n }\n\n if (!currentBlock || dragStartPos === null) return;\n\n const sourceNode = editorView.state.doc.nodeAt(dragStartPos);\n if (!sourceNode) return;\n\n e.preventDefault();\n dragSession = {\n view: editorView,\n sourceBlock: currentBlock,\n sourcePos: dragStartPos,\n sourceNodeSize: sourceNode.nodeSize,\n startX: e.clientX,\n startY: e.clientY,\n dragging: false,\n preview: null,\n dropLine: null,\n dropTarget: null,\n };\n activeDragRegistration = registration;\n\n document.addEventListener(\"mousemove\", handleDocumentMouseMove);\n document.addEventListener(\"mouseup\", handleDocumentMouseUp);\n document.addEventListener(\"keydown\", handleDocumentKeyDown);\n });\n\n handle.addEventListener(\"keydown\", (e) => {\n if (e.key !== \"Enter\" && e.key !== \" \") return;\n e.preventDefault();\n e.stopPropagation();\n closeMenu();\n if (!editor.isEditable || !currentBlock || dragStartPos === null) {\n return;\n }\n\n const sourceNode = editorView.state.doc.nodeAt(dragStartPos);\n if (!sourceNode) return;\n\n openMenu(\n {\n view: editorView,\n sourceBlock: currentBlock,\n sourcePos: dragStartPos,\n sourceNodeSize: sourceNode.nodeSize,\n },\n handle?.getBoundingClientRect() ??\n currentBlock.getBoundingClientRect(),\n );\n });\n\n return {\n destroy() {\n closeMenu({ hideGrip: true });\n finishDragSession(false);\n releaseGlobalHoverListener();\n dragHandleRegistrations.delete(registration);\n if (activeDragRegistration === registration) {\n activeDragRegistration = null;\n }\n if (activeHoverRegistration === registration) {\n activeHoverRegistration = null;\n }\n handle?.remove();\n handle = null;\n currentRegistration = null;\n },\n };\n },\n props: {\n handleDOMEvents: {\n mousemove(_view, event) {\n updateRegisteredHover(event.clientX, event.clientY);\n return false;\n },\n drop() {\n closeMenu({ hideGrip: true });\n finishDragSession(false);\n hideHandle();\n return false;\n },\n },\n },\n }),\n ];\n },\n});\n"]}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
@import "./agent-conversation.css";
|
|
26
26
|
@import "./rich-markdown-editor.css";
|
|
27
|
+
@import "./blocks.css";
|
|
27
28
|
|
|
28
29
|
/* Scan @agent-native/core's compiled client output for Tailwind classes.
|
|
29
30
|
Path is resolved relative to THIS file. After build, this CSS lives at
|