@dnd-block-tree/react 2.1.1 → 2.2.1
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 +2 -2
- package/dist/index.js +0 -2
- package/dist/index.mjs +0 -2
- package/package.json +6 -5
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -7,10 +7,10 @@ React adapter for [dnd-block-tree](https://github.com/thesandybridge/dnd-block-t
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install @dnd-block-tree/react @dnd-kit/core @dnd-kit/utilities
|
|
10
|
+
npm install @dnd-block-tree/core @dnd-block-tree/react @dnd-kit/core @dnd-kit/utilities
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
Requires **React 18
|
|
13
|
+
Requires **@dnd-block-tree/core 2+**, **React 18+**, and **@dnd-kit/core 6+**.
|
|
14
14
|
|
|
15
15
|
## What's Included
|
|
16
16
|
|
package/dist/index.js
CHANGED
|
@@ -2496,5 +2496,3 @@ exports.useConfiguredSensors = useConfiguredSensors;
|
|
|
2496
2496
|
exports.useDevToolsCallbacks = useDevToolsCallbacks;
|
|
2497
2497
|
exports.useLayoutAnimation = useLayoutAnimation;
|
|
2498
2498
|
exports.useVirtualTree = useVirtualTree;
|
|
2499
|
-
//# sourceMappingURL=index.js.map
|
|
2500
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -2356,5 +2356,3 @@ function BlockTreeDevTools({
|
|
|
2356
2356
|
}
|
|
2357
2357
|
|
|
2358
2358
|
export { BlockTree, BlockTreeDevTools, BlockTreeSSR, DragOverlay, DropZone, TreeRenderer, adaptCollisionDetection, createBlockState, createTreeState, getSensorConfig, triggerHaptic, useBlockHistory, useConfiguredSensors, useDevToolsCallbacks, useLayoutAnimation, useVirtualTree };
|
|
2359
|
-
//# sourceMappingURL=index.mjs.map
|
|
2360
|
-
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dnd-block-tree/react",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "React adapter for dnd-block-tree — drag-and-drop hierarchical block trees",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,23 +23,24 @@
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
|
-
"files": [
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
27
29
|
"scripts": {
|
|
28
30
|
"build": "tsup",
|
|
29
31
|
"dev": "tsup --watch",
|
|
30
32
|
"test": "vitest run",
|
|
31
33
|
"typecheck": "tsc --noEmit"
|
|
32
34
|
},
|
|
33
|
-
"dependencies": {
|
|
34
|
-
"@dnd-block-tree/core": "^2.0.0"
|
|
35
|
-
},
|
|
36
35
|
"peerDependencies": {
|
|
36
|
+
"@dnd-block-tree/core": "^2.0.0",
|
|
37
37
|
"@dnd-kit/core": "^6.0.0",
|
|
38
38
|
"@dnd-kit/utilities": "^3.0.0",
|
|
39
39
|
"react": "^18.0.0 || ^19.0.0",
|
|
40
40
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
+
"@dnd-block-tree/core": "^2.0.0",
|
|
43
44
|
"@dnd-kit/core": "^6.3.1",
|
|
44
45
|
"@dnd-kit/utilities": "^3.2.2",
|
|
45
46
|
"@testing-library/react": "^16.1.0",
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bridge.ts","../src/utils/haptic.ts","../src/hooks/useConfiguredSensors.tsx","../src/components/DropZone.tsx","../src/components/TreeRenderer.tsx","../src/components/DragOverlay.tsx","../src/components/BlockTree.tsx","../src/components/BlockTreeSSR.tsx","../src/hooks/useBlockState.tsx","../src/hooks/useTreeState.tsx","../src/hooks/useBlockHistory.tsx","../src/hooks/useLayoutAnimation.tsx","../src/hooks/useVirtualTree.tsx","../src/components/BlockTreeDevTools.tsx"],"names":["useSensors","useSensor","PointerSensor","TouchSensor","KeyboardSensor","useDroppable","useCallback","useEffect","extractUUID","jsx","memo","useDraggable","jsxs","Fragment","DndKitDragOverlay","expandedMap","containers","useMemo","useRef","createStickyCollision","useReducer","debounce","computeNormalizedIndex","activeBlock","extractBlockId","baseIndex","reparentBlockIndex","getDropZoneType","reparentMultipleBlocks","buildOrderedBlocks","useState","DndContext","createContext","useContext","state","blockReducer","children","generateKeyBetween","generateId","getDescendantIds","expandReducer","historyReducer","useLayoutEffect","getBlockDepth","validateBlockTree"],"mappings":"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","file":"index.js","sourcesContent":["import type { CollisionDetection, CollisionDescriptor } from '@dnd-kit/core'\nimport type {\n CoreCollisionDetection,\n CollisionCandidate,\n Rect,\n SnapshotRectsRef,\n} from '@dnd-block-tree/core'\n\n/**\n * Adapt a framework-agnostic CoreCollisionDetection into a dnd-kit CollisionDetection.\n *\n * Converts:\n * droppableContainers → CollisionCandidate[]\n * Calls coreDetector\n * CollisionResult[] → CollisionDescriptor[]\n */\nexport function adaptCollisionDetection(\n coreDetector: CoreCollisionDetection,\n): CollisionDetection {\n return ({ droppableContainers, collisionRect }) => {\n if (!collisionRect) return []\n\n // Convert dnd-kit droppable containers to core CollisionCandidates\n const candidates: CollisionCandidate[] = []\n for (const container of droppableContainers) {\n const rect = container.rect.current\n if (!rect) continue\n candidates.push({\n id: String(container.id),\n rect: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n right: rect.right,\n bottom: rect.bottom,\n },\n })\n }\n\n // Convert dnd-kit collision rect to core Rect\n const pointerRect: Rect = {\n top: collisionRect.top,\n left: collisionRect.left,\n width: collisionRect.width,\n height: collisionRect.height,\n right: collisionRect.left + collisionRect.width,\n bottom: collisionRect.top + collisionRect.height,\n }\n\n // Call core detector\n const results = coreDetector(candidates, pointerRect)\n\n // Convert results back to dnd-kit CollisionDescriptors\n return results.map(result => {\n const container = droppableContainers.find(c => String(c.id) === result.id)\n if (!container) return null\n return {\n id: result.id,\n data: {\n droppableContainer: container,\n value: result.value,\n left: result.left,\n },\n } as CollisionDescriptor\n }).filter((c): c is CollisionDescriptor => c !== null)\n }\n}\n","/**\n * Trigger haptic feedback (vibration) on supported devices.\n * Safe to call in any environment -- no-ops when `navigator.vibrate` is unavailable.\n */\nexport function triggerHaptic(durationMs = 10): void {\n if (typeof navigator !== 'undefined' && typeof navigator.vibrate === 'function') {\n navigator.vibrate(durationMs)\n }\n}\n","'use client'\n\nimport {\n useSensor,\n useSensors,\n PointerSensor,\n TouchSensor,\n KeyboardSensor,\n type PointerActivationConstraint,\n} from '@dnd-kit/core'\nimport type { SensorConfig } from '@dnd-block-tree/core'\n\nconst DEFAULT_ACTIVATION_DISTANCE = 8\n\nexport interface SensorConfigResult {\n pointer: { activationConstraint: PointerActivationConstraint }\n touch: { activationConstraint: PointerActivationConstraint }\n}\n\nexport function useConfiguredSensors(config: SensorConfig = {}) {\n const {\n activationDistance = DEFAULT_ACTIVATION_DISTANCE,\n activationDelay,\n tolerance,\n } = config\n\n let pointerConstraint: PointerActivationConstraint\n let touchConstraint: PointerActivationConstraint\n\n if (activationDelay !== undefined) {\n pointerConstraint = {\n delay: activationDelay,\n tolerance: tolerance ?? 5,\n }\n touchConstraint = pointerConstraint\n } else {\n pointerConstraint = {\n distance: activationDistance,\n }\n touchConstraint = {\n delay: config.longPressDelay ?? 200,\n tolerance: 5,\n }\n }\n\n return useSensors(\n useSensor(PointerSensor, {\n activationConstraint: pointerConstraint,\n }),\n useSensor(TouchSensor, {\n activationConstraint: touchConstraint,\n }),\n useSensor(KeyboardSensor)\n )\n}\n\nexport function getSensorConfig(config: SensorConfig = {}): SensorConfigResult {\n const {\n activationDistance = DEFAULT_ACTIVATION_DISTANCE,\n activationDelay,\n tolerance,\n } = config\n\n let activationConstraint: PointerActivationConstraint\n\n if (activationDelay !== undefined) {\n activationConstraint = {\n delay: activationDelay,\n tolerance: tolerance ?? 5,\n }\n } else {\n activationConstraint = {\n distance: activationDistance,\n }\n }\n\n return {\n pointer: { activationConstraint },\n touch: { activationConstraint },\n }\n}\n","'use client'\n\nimport { useDroppable } from '@dnd-kit/core'\nimport { memo, useCallback, useEffect } from 'react'\nimport { extractUUID } from '@dnd-block-tree/core'\n\nexport interface DropZoneProps {\n id: string\n parentId: string | null\n onHover: (zoneId: string, parentId: string | null) => void\n activeId: string | null\n className?: string\n activeClassName?: string\n height?: number\n}\n\nfunction DropZoneComponent({\n id,\n parentId,\n onHover,\n activeId,\n className = 'h-1 rounded transition-colors',\n activeClassName = 'bg-blue-500',\n height = 4,\n}: DropZoneProps) {\n const { setNodeRef, isOver, active } = useDroppable({ id })\n\n const handleInternalHover = useCallback(() => {\n onHover(id, parentId)\n }, [onHover, id, parentId])\n\n useEffect(() => {\n if (isOver) handleInternalHover()\n }, [isOver, handleInternalHover])\n\n // Only hide \"into-\" zones for the active block (can't drop a container into itself)\n const zoneBlockId = extractUUID(id)\n const isIntoZone = id.startsWith('into-')\n if (isIntoZone && active?.id && zoneBlockId === String(active.id)) return null\n if (isIntoZone && activeId && zoneBlockId === activeId) return null\n\n return (\n <div\n ref={setNodeRef}\n data-zone-id={id}\n data-parent-id={parentId ?? ''}\n style={{ height: isOver ? height * 2 : height }}\n className={`${className} ${isOver ? activeClassName : 'bg-transparent'}`}\n />\n )\n}\n\nexport const DropZone = memo(DropZoneComponent)\n","'use client'\n\nimport { Fragment, memo, type ReactNode } from 'react'\nimport { useDraggable } from '@dnd-kit/core'\nimport type { BaseBlock, CanDragFn, AnimationConfig } from '@dnd-block-tree/core'\nimport type { InternalRenderers, ContainerRendererProps } from '../types'\nimport { DropZone } from './DropZone'\n\nexport interface TreeRendererProps<T extends BaseBlock> {\n blocks: T[]\n blocksByParent: Map<string | null, T[]>\n parentId: string | null\n activeId: string | null\n expandedMap: Record<string, boolean>\n renderers: InternalRenderers<T>\n containerTypes: readonly string[]\n onHover: (zoneId: string, parentId: string | null) => void\n onToggleExpand: (id: string) => void\n depth?: number\n dropZoneClassName?: string\n dropZoneActiveClassName?: string\n indentClassName?: string\n rootClassName?: string\n canDrag?: CanDragFn<T>\n /** Preview position info - where to show the ghost */\n previewPosition?: { parentId: string | null; index: number } | null\n /** The dragged block for rendering preview ghost */\n draggedBlock?: T | null\n /** Currently focused block ID for keyboard navigation */\n focusedId?: string | null\n /** Currently selected block IDs for multi-select */\n selectedIds?: Set<string>\n /** Click handler for multi-select */\n onBlockClick?: (blockId: string, event: React.MouseEvent) => void\n /** Animation configuration */\n animation?: AnimationConfig\n /** When virtual scrolling is active, only render blocks in this set */\n virtualVisibleIds?: Set<string> | null\n}\n\n/**\n * Ghost preview wrapper -- renders in normal document flow so the user sees\n * an accurate preview of the final layout. Collision detection uses\n * snapshotted zone rects to avoid feedback loops from the ghost's displacement.\n */\nfunction GhostPreview({ children }: { children: ReactNode }) {\n return (\n <div data-dnd-ghost className=\"opacity-50\" style={{ pointerEvents: 'none' }}>\n {children}\n </div>\n )\n}\n\n/**\n * Draggable wrapper for individual blocks\n */\nfunction DraggableBlock<T extends BaseBlock>({\n block,\n children,\n disabled,\n focusedId,\n isSelected,\n onBlockClick,\n isContainer,\n isExpanded,\n depth,\n posInSet,\n setSize,\n}: {\n block: T\n children: (props: { isDragging: boolean }) => ReactNode\n disabled?: boolean\n focusedId?: string | null\n isSelected?: boolean\n onBlockClick?: (blockId: string, event: React.MouseEvent) => void\n isContainer?: boolean\n isExpanded?: boolean\n depth: number\n posInSet: number\n setSize: number\n}) {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id: block.id,\n disabled,\n })\n\n const isFocused = focusedId === block.id\n\n return (\n <div\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n data-block-id={block.id}\n tabIndex={isFocused ? 0 : -1}\n onClick={onBlockClick ? (e: React.MouseEvent) => onBlockClick(block.id, e) : undefined}\n data-selected={isSelected || undefined}\n style={{ touchAction: 'none', minWidth: 0, outline: 'none' }}\n role=\"treeitem\"\n aria-level={depth + 1}\n aria-posinset={posInSet}\n aria-setsize={setSize}\n aria-expanded={isContainer ? isExpanded : undefined}\n aria-selected={isSelected ?? undefined}\n >\n {children({ isDragging })}\n </div>\n )\n}\n\n/**\n * Recursive tree renderer with smart drop zones\n */\nfunction TreeRendererInner<T extends BaseBlock>({\n blocks,\n blocksByParent,\n parentId,\n activeId,\n expandedMap,\n renderers,\n containerTypes,\n onHover,\n onToggleExpand,\n depth = 0,\n dropZoneClassName,\n dropZoneActiveClassName,\n indentClassName = 'ml-6 border-l border-gray-200 pl-4',\n rootClassName = 'flex flex-col gap-1',\n canDrag,\n previewPosition,\n draggedBlock,\n focusedId,\n selectedIds,\n onBlockClick,\n animation,\n virtualVisibleIds,\n}: TreeRendererProps<T>) {\n const items = blocksByParent.get(parentId) ?? []\n\n // Always filter out the dragged block - it appears in drag overlay\n let filteredBlocks = items.filter(block => block.id !== activeId)\n\n // When virtual scrolling is active at root level, only render visible blocks\n if (virtualVisibleIds && depth === 0) {\n filteredBlocks = filteredBlocks.filter(block => virtualVisibleIds.has(block.id))\n }\n\n // Check if preview ghost should appear in this container\n const showGhostHere = previewPosition?.parentId === parentId && draggedBlock\n\n const containerClass = depth === 0 ? rootClassName : indentClassName\n\n return (\n <div className={containerClass} style={{ minWidth: 0 }}>\n {/* Position-0 zone: always at the start, stable regardless of which block is dragged */}\n <DropZone\n id={parentId ? `into-${parentId}` : 'root-start'}\n parentId={parentId}\n onHover={onHover}\n activeId={activeId}\n className={dropZoneClassName}\n activeClassName={dropZoneActiveClassName}\n />\n\n {filteredBlocks.map((block, index) => {\n const isContainer = containerTypes.includes(block.type)\n const isExpanded = expandedMap[block.id] !== false // Default to expanded\n const Renderer = renderers[block.type as keyof typeof renderers]\n const isDragDisabled = canDrag ? !canDrag(block) : false\n\n // Check if ghost should appear BEFORE this block\n const ghostBeforeThis = showGhostHere && previewPosition!.index === index\n\n // Use original items to determine if this is the last block (for stable zones)\n const originalIndex = items.findIndex(b => b.id === block.id)\n const isLastInOriginal = originalIndex === items.length - 1\n\n if (!Renderer) {\n console.warn(`No renderer found for block type: ${block.type}`)\n return null\n }\n\n const GhostRenderer = draggedBlock ? renderers[draggedBlock.type as keyof typeof renderers] : null\n\n return (\n <Fragment key={block.id}>\n {/* Ghost preview before this block */}\n {ghostBeforeThis && GhostRenderer && (\n <GhostPreview>\n {GhostRenderer({\n block: draggedBlock as T & { type: typeof draggedBlock.type },\n isDragging: true,\n depth,\n })}\n </GhostPreview>\n )}\n\n {/* Render the block */}\n <DraggableBlock\n block={block}\n disabled={isDragDisabled}\n focusedId={focusedId}\n isSelected={selectedIds?.has(block.id)}\n onBlockClick={onBlockClick}\n isContainer={isContainer}\n isExpanded={isExpanded}\n depth={depth}\n posInSet={originalIndex + 1}\n setSize={items.length}\n >\n {({ isDragging }) => {\n if (isContainer) {\n const animated = animation?.expandDuration && animation.expandDuration > 0\n const easing = animation?.easing ?? 'ease'\n const duration = animation?.expandDuration ?? 0\n\n let childContent: ReactNode\n\n if (animated) {\n // CSS grid trick: grid-template-rows transitions from 1fr to 0fr\n childContent = (\n <div\n style={{\n display: 'grid',\n gridTemplateRows: isExpanded ? '1fr' : '0fr',\n transition: `grid-template-rows ${duration}ms ${easing}`,\n }}\n >\n <div\n style={{\n overflow: 'hidden',\n minHeight: 0,\n opacity: isExpanded ? 1 : 0,\n transition: `opacity ${duration}ms ${easing}`,\n }}\n >\n <TreeRenderer\n blocks={blocks}\n blocksByParent={blocksByParent}\n parentId={block.id}\n activeId={activeId}\n expandedMap={expandedMap}\n renderers={renderers}\n containerTypes={containerTypes}\n onHover={onHover}\n onToggleExpand={onToggleExpand}\n depth={depth + 1}\n dropZoneClassName={dropZoneClassName}\n dropZoneActiveClassName={dropZoneActiveClassName}\n indentClassName={indentClassName}\n rootClassName={rootClassName}\n canDrag={canDrag}\n previewPosition={previewPosition}\n draggedBlock={draggedBlock}\n focusedId={focusedId}\n selectedIds={selectedIds}\n onBlockClick={onBlockClick}\n animation={animation}\n virtualVisibleIds={virtualVisibleIds}\n />\n </div>\n </div>\n )\n } else {\n childContent = isExpanded ? (\n <TreeRenderer\n blocks={blocks}\n blocksByParent={blocksByParent}\n parentId={block.id}\n activeId={activeId}\n expandedMap={expandedMap}\n renderers={renderers}\n containerTypes={containerTypes}\n onHover={onHover}\n onToggleExpand={onToggleExpand}\n depth={depth + 1}\n dropZoneClassName={dropZoneClassName}\n dropZoneActiveClassName={dropZoneActiveClassName}\n indentClassName={indentClassName}\n rootClassName={rootClassName}\n canDrag={canDrag}\n previewPosition={previewPosition}\n draggedBlock={draggedBlock}\n focusedId={focusedId}\n selectedIds={selectedIds}\n onBlockClick={onBlockClick}\n animation={animation}\n virtualVisibleIds={virtualVisibleIds}\n />\n ) : null\n }\n\n return Renderer({\n block: block as T & { type: typeof block.type },\n children: childContent,\n isDragging,\n depth,\n isExpanded,\n onToggleExpand: () => onToggleExpand(block.id),\n } as ContainerRendererProps<T & { type: typeof block.type }>)\n }\n\n return Renderer({\n block: block as T & { type: typeof block.type },\n isDragging,\n depth,\n })\n }}\n </DraggableBlock>\n\n {/* After-zone for non-last blocks (end-zone handles last position) */}\n {!isLastInOriginal && (\n <DropZone\n id={`after-${block.id}`}\n parentId={block.parentId}\n onHover={onHover}\n activeId={activeId}\n className={dropZoneClassName}\n activeClassName={dropZoneActiveClassName}\n />\n )}\n </Fragment>\n )\n })}\n\n {/* Ghost at end of container */}\n {showGhostHere && previewPosition!.index >= filteredBlocks.length && draggedBlock && (() => {\n const GhostRenderer = renderers[draggedBlock.type as keyof typeof renderers]\n return GhostRenderer ? (\n <GhostPreview>\n {GhostRenderer({\n block: draggedBlock as T & { type: typeof draggedBlock.type },\n isDragging: true,\n depth,\n })}\n </GhostPreview>\n ) : null\n })()}\n\n {/* End zone: for dropping at the last position in a container */}\n <DropZone\n id={parentId ? `end-${parentId}` : 'root-end'}\n parentId={parentId}\n onHover={onHover}\n activeId={activeId}\n className={dropZoneClassName}\n activeClassName={dropZoneActiveClassName}\n />\n </div>\n )\n}\n\nexport const TreeRenderer = memo(TreeRendererInner) as typeof TreeRendererInner\n","'use client'\n\nimport { DragOverlay as DndKitDragOverlay } from '@dnd-kit/core'\nimport type { ReactNode } from 'react'\nimport type { BaseBlock } from '@dnd-block-tree/core'\n\nexport interface DragOverlayProps<T extends BaseBlock> {\n activeBlock: T | null\n children?: (block: T) => ReactNode\n /** Number of selected items being dragged (for multi-select badge) */\n selectedCount?: number\n}\n\nexport function DragOverlay<T extends BaseBlock>({\n activeBlock,\n children,\n selectedCount = 0,\n}: DragOverlayProps<T>) {\n const showBadge = selectedCount > 1\n return (\n <DndKitDragOverlay>\n {activeBlock && (\n <div style={{ position: 'relative' }}>\n {showBadge && (\n <>\n {/* Stacked card effect */}\n <div\n style={{\n position: 'absolute',\n top: 4,\n left: 4,\n right: -4,\n bottom: -4,\n borderRadius: 8,\n border: '1px solid #d1d5db',\n background: '#f3f4f6',\n opacity: 0.6,\n zIndex: -1,\n }}\n />\n {/* Count badge */}\n <div\n style={{\n position: 'absolute',\n top: -8,\n right: -8,\n background: '#3b82f6',\n color: 'white',\n borderRadius: '50%',\n width: 22,\n height: 22,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 11,\n fontWeight: 700,\n zIndex: 10,\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n }}\n >\n {selectedCount}\n </div>\n </>\n )}\n {children ? (\n children(activeBlock)\n ) : (\n <div className=\"bg-white border border-gray-300 shadow-md rounded-md p-3 text-sm w-64 pointer-events-none\">\n <div className=\"text-gray-500 uppercase text-xs tracking-wide mb-1\">\n {activeBlock.type}\n </div>\n <div className=\"font-semibold text-gray-800\">\n Block {activeBlock.id.slice(0, 8)}\n </div>\n </div>\n )}\n </div>\n )}\n </DndKitDragOverlay>\n )\n}\n","'use client'\n\nimport { useCallback, useRef, useReducer, useMemo, useEffect, useState, type ReactNode, type KeyboardEvent } from 'react'\nimport {\n DndContext,\n DragStartEvent as DndKitDragStartEvent,\n DragEndEvent as DndKitDragEndEvent,\n DragOverEvent,\n DragMoveEvent as DndKitDragMoveEvent,\n DragCancelEvent,\n} from '@dnd-kit/core'\nimport type {\n BaseBlock,\n BlockIndex,\n BlockTreeCallbacks,\n BlockPosition,\n DragStartEvent,\n DragMoveEvent,\n DragEndEvent,\n BlockMoveEvent,\n MoveOperation,\n ExpandChangeEvent,\n HoverChangeEvent,\n DropZoneType,\n Rect,\n SnapshotRectsRef,\n} from '@dnd-block-tree/core'\nimport {\n getDropZoneType,\n extractBlockId,\n createStickyCollision,\n computeNormalizedIndex,\n reparentBlockIndex,\n reparentMultipleBlocks,\n buildOrderedBlocks,\n debounce,\n} from '@dnd-block-tree/core'\nimport type { BlockRenderers, InternalRenderers, BlockTreeCustomization } from '../types'\nimport { useConfiguredSensors } from '../hooks/useConfiguredSensors'\nimport { adaptCollisionDetection } from '../bridge'\nimport { triggerHaptic } from '../utils/haptic'\nimport { TreeRenderer } from './TreeRenderer'\nimport { DragOverlay } from './DragOverlay'\n\nexport interface BlockTreeProps<\n T extends BaseBlock,\n C extends readonly T['type'][] = readonly T['type'][]\n> extends BlockTreeCallbacks<T>, BlockTreeCustomization<T> {\n /** Current blocks array */\n blocks: T[]\n /** Block renderers for each type */\n renderers: BlockRenderers<T, C>\n /** Block types that can have children */\n containerTypes?: C\n /** Called when blocks are reordered */\n onChange?: (blocks: T[]) => void\n /** Custom drag overlay renderer */\n dragOverlay?: (block: T) => ReactNode\n /** Activation distance in pixels (default: 8) */\n activationDistance?: number\n /** Preview debounce in ms (default: 150) */\n previewDebounce?: number\n /** Root container className */\n className?: string\n /** Drop zone className */\n dropZoneClassName?: string\n /** Active drop zone className */\n dropZoneActiveClassName?: string\n /** Indent className for nested items */\n indentClassName?: string\n /** Show live preview of drop position during drag (default: true) */\n showDropPreview?: boolean\n /** Enable keyboard navigation with arrow keys (default: false) */\n keyboardNavigation?: boolean\n /** Enable multi-select with Cmd/Ctrl+Click and Shift+Click (default: false) */\n multiSelect?: boolean\n /** Externally-controlled selected IDs (for multi-select) */\n selectedIds?: Set<string>\n /** Called when selection changes (for multi-select) */\n onSelectionChange?: (selectedIds: Set<string>) => void\n /** Enable virtual scrolling for large trees (fixed item height only) */\n virtualize?: {\n /** Fixed height of each item in pixels */\n itemHeight: number\n /** Number of extra items to render outside the visible range (default: 5) */\n overscan?: number\n }\n}\n\ninterface InternalState<T extends BaseBlock> {\n activeId: string | null\n hoverZone: string | null\n expandedMap: Record<string, boolean>\n virtualState: BlockIndex<T> | null\n isDragging: boolean\n}\n\nfunction getBlockPosition<T extends BaseBlock>(\n blocks: T[],\n blockId: string\n): BlockPosition {\n const block = blocks.find(b => b.id === blockId)\n if (!block) return { parentId: null, index: 0 }\n\n const siblings = blocks.filter(b => b.parentId === block.parentId)\n const index = siblings.findIndex(b => b.id === blockId)\n return { parentId: block.parentId, index }\n}\n\nfunction computeInitialExpanded<T extends BaseBlock>(\n blocks: T[],\n containerTypes: readonly string[],\n initialExpanded: string[] | 'all' | 'none' | undefined\n): Record<string, boolean> {\n if (initialExpanded === 'none') {\n const expandedMap: Record<string, boolean> = {}\n const containers = blocks.filter(b => containerTypes.includes(b.type))\n for (const container of containers) {\n expandedMap[container.id] = false\n }\n return expandedMap\n }\n\n const expandedMap: Record<string, boolean> = {}\n const containers = blocks.filter(b => containerTypes.includes(b.type))\n\n if (initialExpanded === 'all' || initialExpanded === undefined) {\n for (const container of containers) {\n expandedMap[container.id] = true\n }\n } else if (Array.isArray(initialExpanded)) {\n for (const id of initialExpanded) {\n expandedMap[id] = true\n }\n }\n\n return expandedMap\n}\n\nfunction getVisibleBlockIds<T extends BaseBlock>(\n blocksByParent: Map<string | null, T[]>,\n containerTypes: readonly string[],\n expandedMap: Record<string, boolean>,\n parentId: string | null = null\n): string[] {\n const result: string[] = []\n const children = blocksByParent.get(parentId) ?? []\n for (const block of children) {\n result.push(block.id)\n if (containerTypes.includes(block.type) && expandedMap[block.id] !== false) {\n result.push(...getVisibleBlockIds(blocksByParent, containerTypes, expandedMap, block.id))\n }\n }\n return result\n}\n\nexport function BlockTree<\n T extends BaseBlock,\n C extends readonly T['type'][] = readonly T['type'][]\n>({\n blocks,\n renderers,\n containerTypes = [] as unknown as C,\n onChange,\n dragOverlay,\n activationDistance = 8,\n previewDebounce = 150,\n className = 'flex flex-col gap-1',\n dropZoneClassName,\n dropZoneActiveClassName,\n indentClassName,\n showDropPreview = true,\n // Callbacks\n onDragStart,\n onDragMove,\n onDragEnd,\n onDragCancel,\n onBeforeMove,\n onBlockMove,\n onExpandChange,\n onHoverChange,\n // Customization\n canDrag,\n canDrop,\n collisionDetection,\n sensors: sensorConfig,\n animation,\n initialExpanded,\n orderingStrategy = 'integer',\n maxDepth,\n keyboardNavigation = false,\n multiSelect = false,\n selectedIds: externalSelectedIds,\n onSelectionChange,\n virtualize,\n}: BlockTreeProps<T, C>) {\n const sensors = useConfiguredSensors({\n activationDistance: sensorConfig?.activationDistance ?? activationDistance,\n activationDelay: sensorConfig?.activationDelay,\n tolerance: sensorConfig?.tolerance,\n longPressDelay: sensorConfig?.longPressDelay,\n })\n\n const initialExpandedMap = useMemo(\n () => computeInitialExpanded(blocks, containerTypes, initialExpanded),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n\n const stateRef = useRef<InternalState<T>>({\n activeId: null,\n hoverZone: null,\n expandedMap: initialExpandedMap,\n virtualState: null,\n isDragging: false,\n })\n\n const initialBlocksRef = useRef<T[]>([])\n const cachedReorderRef = useRef<{ targetId: string; reorderedBlocks: T[] } | null>(null)\n const fromPositionRef = useRef<BlockPosition | null>(null)\n const draggedIdsRef = useRef<string[]>([])\n\n // Snapshotted drop zone rects -- collision detection reads from this instead\n // of live DOM to prevent feedback loops caused by in-flow ghost previews.\n const snapshotRectsRef = useRef<Map<string, Rect> | null>(null) as SnapshotRectsRef\n const needsResnapshot = useRef(false)\n\n // Sticky collision with hysteresis (core's createStickyCollision adapted to dnd-kit)\n const stickyCollisionRef = useRef(\n adaptCollisionDetection(createStickyCollision(20, snapshotRectsRef))\n )\n // Keep a direct ref to the core detector for reset\n const coreStickyRef = useRef(createStickyCollision(20, snapshotRectsRef))\n\n // Snapshot all drop zone rects from the DOM\n const snapshotZoneRects = useCallback(() => {\n const root = rootRef.current\n if (!root) return\n const zones = root.querySelectorAll('[data-zone-id]')\n const map = new Map<string, Rect>()\n zones.forEach(el => {\n const id = el.getAttribute('data-zone-id')\n if (id) map.set(id, el.getBoundingClientRect())\n })\n snapshotRectsRef.current = map\n }, [])\n\n const [, forceRender] = useReducer((x: number) => x + 1, 0)\n\n const debouncedSetVirtual = useRef(\n debounce((newBlocks: T[] | null) => {\n if (newBlocks) {\n stateRef.current.virtualState = computeNormalizedIndex(newBlocks)\n } else {\n stateRef.current.virtualState = null\n }\n needsResnapshot.current = true\n forceRender()\n }, previewDebounce)\n ).current\n\n const debouncedDragMove = useRef(\n debounce((event: DragMoveEvent<T>) => {\n onDragMove?.(event)\n }, 50)\n ).current\n\n const originalIndex = useMemo(\n () => computeNormalizedIndex(blocks, orderingStrategy),\n [blocks, orderingStrategy]\n )\n\n const blocksByParent = useMemo(() => {\n const map = new Map<string | null, T[]>()\n for (const [parentId, ids] of originalIndex.byParent.entries()) {\n map.set(parentId, ids.map(id => originalIndex.byId.get(id)!).filter(Boolean))\n }\n return map\n }, [originalIndex])\n\n // --- Keyboard navigation ---\n const focusedIdRef = useRef<string | null>(null)\n const rootRef = useRef<HTMLDivElement>(null)\n const lastClickedIdRef = useRef<string | null>(null)\n\n const [internalSelectedIds, setInternalSelectedIds] = useReducer(\n (_: Set<string>, next: Set<string>) => next,\n new Set<string>()\n )\n const selectedIds = externalSelectedIds ?? internalSelectedIds\n const setSelectedIds = useCallback((ids: Set<string>) => {\n if (onSelectionChange) {\n onSelectionChange(ids)\n } else {\n setInternalSelectedIds(ids)\n }\n }, [onSelectionChange])\n\n const visibleBlockIds = useMemo(\n () => getVisibleBlockIds(blocksByParent, containerTypes, stateRef.current.expandedMap),\n [blocksByParent, containerTypes, stateRef.current.expandedMap]\n )\n\n const focusBlock = useCallback((id: string | null) => {\n focusedIdRef.current = id\n if (id && rootRef.current) {\n const el = rootRef.current.querySelector(`[data-block-id=\"${id}\"]`) as HTMLElement | null\n el?.focus()\n }\n forceRender()\n }, [])\n\n const toggleExpandRef = useRef<(id: string) => void>(() => {})\n\n const handleKeyDown = useCallback((event: KeyboardEvent<HTMLDivElement>) => {\n if (!keyboardNavigation) return\n\n const currentId = focusedIdRef.current\n const currentIndex = currentId ? visibleBlockIds.indexOf(currentId) : -1\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault()\n const nextIndex = currentIndex < visibleBlockIds.length - 1 ? currentIndex + 1 : currentIndex\n focusBlock(visibleBlockIds[nextIndex] ?? null)\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : 0\n focusBlock(visibleBlockIds[prevIndex] ?? null)\n break\n }\n case 'ArrowRight': {\n event.preventDefault()\n if (currentId) {\n const block = originalIndex.byId.get(currentId)\n if (block && containerTypes.includes(block.type)) {\n if (stateRef.current.expandedMap[currentId] === false) {\n toggleExpandRef.current(currentId)\n } else {\n const children = blocksByParent.get(currentId) ?? []\n if (children.length > 0) focusBlock(children[0].id)\n }\n }\n }\n break\n }\n case 'ArrowLeft': {\n event.preventDefault()\n if (currentId) {\n const block = originalIndex.byId.get(currentId)\n if (block && containerTypes.includes(block.type) && stateRef.current.expandedMap[currentId] !== false) {\n toggleExpandRef.current(currentId)\n } else if (block?.parentId) {\n focusBlock(block.parentId)\n }\n }\n break\n }\n case 'Enter':\n case ' ': {\n event.preventDefault()\n if (currentId) {\n const block = originalIndex.byId.get(currentId)\n if (block && containerTypes.includes(block.type)) {\n toggleExpandRef.current(currentId)\n }\n }\n break\n }\n case 'Home': {\n event.preventDefault()\n if (visibleBlockIds.length > 0) focusBlock(visibleBlockIds[0])\n break\n }\n case 'End': {\n event.preventDefault()\n if (visibleBlockIds.length > 0) focusBlock(visibleBlockIds[visibleBlockIds.length - 1])\n break\n }\n }\n }, [keyboardNavigation, visibleBlockIds, focusBlock, originalIndex, containerTypes, blocksByParent])\n\n const handleBlockClick = useCallback((blockId: string, event: React.MouseEvent) => {\n if (!multiSelect) return\n\n if (event.metaKey || event.ctrlKey) {\n const next = new Set(selectedIds)\n if (next.has(blockId)) {\n next.delete(blockId)\n } else {\n next.add(blockId)\n }\n setSelectedIds(next)\n } else if (event.shiftKey && lastClickedIdRef.current) {\n const startIdx = visibleBlockIds.indexOf(lastClickedIdRef.current)\n const endIdx = visibleBlockIds.indexOf(blockId)\n if (startIdx !== -1 && endIdx !== -1) {\n const [from, to] = startIdx < endIdx ? [startIdx, endIdx] : [endIdx, startIdx]\n const next = new Set(selectedIds)\n for (let i = from; i <= to; i++) {\n next.add(visibleBlockIds[i])\n }\n setSelectedIds(next)\n }\n } else {\n setSelectedIds(new Set([blockId]))\n }\n lastClickedIdRef.current = blockId\n }, [multiSelect, selectedIds, setSelectedIds, visibleBlockIds])\n\n // Re-snapshot zone rects after DOM settles\n useEffect(() => {\n if (!needsResnapshot.current || !stateRef.current.isDragging) return\n needsResnapshot.current = false\n requestAnimationFrame(() => {\n snapshotZoneRects()\n })\n })\n\n useEffect(() => {\n if (!keyboardNavigation || !focusedIdRef.current || !rootRef.current) return\n const el = rootRef.current.querySelector(`[data-block-id=\"${focusedIdRef.current}\"]`) as HTMLElement | null\n el?.focus()\n })\n\n const previewPosition = useMemo(() => {\n if (!showDropPreview || !stateRef.current.virtualState || !stateRef.current.activeId) {\n return null\n }\n const virtualIndex = stateRef.current.virtualState\n const activeId = stateRef.current.activeId\n const block = virtualIndex.byId.get(activeId)\n if (!block) return null\n\n const parentId = block.parentId ?? null\n const siblings = virtualIndex.byParent.get(parentId) ?? []\n const index = siblings.indexOf(activeId)\n return { parentId, index }\n }, [showDropPreview, stateRef.current.virtualState, stateRef.current.activeId])\n\n const activeBlock = stateRef.current.activeId\n ? originalIndex.byId.get(stateRef.current.activeId) ?? null\n : null\n\n const draggedBlock = activeBlock\n\n const handleDragStart = useCallback((event: DndKitDragStartEvent) => {\n const id = String(event.active.id)\n const block = blocks.find(b => b.id === id)\n\n if (!block) return\n\n if (canDrag && !canDrag(block)) {\n return\n }\n\n const dragEvent: DragStartEvent<T> = {\n block,\n blockId: id,\n }\n\n const result = onDragStart?.(dragEvent)\n if (result === false) {\n return\n }\n\n fromPositionRef.current = getBlockPosition(blocks, id)\n\n // Reset sticky collision for fresh drag\n coreStickyRef.current.reset()\n\n if (multiSelect && selectedIds.has(id)) {\n draggedIdsRef.current = visibleBlockIds.filter(vid => selectedIds.has(vid))\n } else {\n draggedIdsRef.current = [id]\n if (multiSelect) {\n setSelectedIds(new Set([id]))\n }\n }\n\n if (sensorConfig?.hapticFeedback) {\n triggerHaptic()\n }\n\n stateRef.current.activeId = id\n stateRef.current.isDragging = true\n initialBlocksRef.current = [...blocks]\n cachedReorderRef.current = null\n needsResnapshot.current = true\n forceRender()\n }, [blocks, canDrag, onDragStart, multiSelect, selectedIds, setSelectedIds, visibleBlockIds, sensorConfig?.hapticFeedback])\n\n const handleDragMove = useCallback((event: DndKitDragMoveEvent) => {\n if (!onDragMove) return\n\n const id = stateRef.current.activeId\n if (!id) return\n\n const block = blocks.find(b => b.id === id)\n if (!block) return\n\n const moveEvent: DragMoveEvent<T> = {\n block,\n blockId: id,\n overZone: stateRef.current.hoverZone,\n coordinates: {\n x: event.delta.x,\n y: event.delta.y,\n },\n }\n\n debouncedDragMove(moveEvent)\n }, [blocks, onDragMove, debouncedDragMove])\n\n const handleDragOver = useCallback((event: DragOverEvent) => {\n if (!event.over) return\n\n const targetZone = String(event.over.id)\n const activeId = stateRef.current.activeId\n\n if (!activeId) return\n\n const activeBlock = blocks.find(b => b.id === activeId)\n const targetBlockId = extractBlockId(targetZone)\n const targetBlock = blocks.find(b => b.id === targetBlockId) ?? null\n\n if (canDrop && activeBlock && !canDrop(activeBlock, targetZone, targetBlock)) {\n return\n }\n\n if (maxDepth != null && activeBlock) {\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const testResult = reparentBlockIndex(baseIndex, activeId, targetZone, containerTypes, orderingStrategy, maxDepth)\n if (testResult === baseIndex) return\n }\n\n if (stateRef.current.hoverZone !== targetZone) {\n const zoneType: DropZoneType = getDropZoneType(targetZone)\n\n const hoverEvent: HoverChangeEvent<T> = {\n zoneId: targetZone,\n zoneType,\n targetBlock,\n }\n\n onHoverChange?.(hoverEvent)\n }\n\n stateRef.current.hoverZone = targetZone\n\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const ids = draggedIdsRef.current\n const updatedIndex = ids.length > 1\n ? reparentMultipleBlocks(baseIndex, ids, targetZone, containerTypes, orderingStrategy, maxDepth)\n : reparentBlockIndex(baseIndex, activeId, targetZone, containerTypes, orderingStrategy, maxDepth)\n const orderedBlocks = buildOrderedBlocks(updatedIndex, containerTypes, orderingStrategy)\n\n cachedReorderRef.current = { targetId: targetZone, reorderedBlocks: orderedBlocks }\n\n if (showDropPreview) {\n debouncedSetVirtual(orderedBlocks)\n }\n }, [blocks, containerTypes, debouncedSetVirtual, canDrop, onHoverChange, showDropPreview, maxDepth, orderingStrategy])\n\n const handleDragEnd = useCallback((_event: DndKitDragEndEvent) => {\n debouncedSetVirtual.cancel()\n debouncedDragMove.cancel()\n\n let cached = cachedReorderRef.current\n const activeId = stateRef.current.activeId\n const activeBlockData = activeId ? blocks.find(b => b.id === activeId) : null\n\n if (cached && activeBlockData && fromPositionRef.current && onBeforeMove) {\n const operation: MoveOperation<T> = {\n block: activeBlockData,\n from: fromPositionRef.current,\n targetZone: cached.targetId,\n }\n const result = onBeforeMove(operation)\n\n if (result === false) {\n stateRef.current.activeId = null\n stateRef.current.hoverZone = null\n stateRef.current.virtualState = null\n stateRef.current.isDragging = false\n cachedReorderRef.current = null\n initialBlocksRef.current = []\n fromPositionRef.current = null\n snapshotRectsRef.current = null\n forceRender()\n return\n }\n\n if (result && result.targetZone !== cached.targetId) {\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const ids = draggedIdsRef.current\n const updatedIndex = ids.length > 1\n ? reparentMultipleBlocks(baseIndex, ids, result.targetZone, containerTypes, orderingStrategy, maxDepth)\n : reparentBlockIndex(baseIndex, activeId!, result.targetZone, containerTypes, orderingStrategy, maxDepth)\n const reorderedBlocks = buildOrderedBlocks(updatedIndex, containerTypes, orderingStrategy)\n cached = { targetId: result.targetZone, reorderedBlocks }\n }\n }\n\n if (activeBlockData) {\n const endEvent: DragEndEvent<T> = {\n block: activeBlockData,\n blockId: activeId!,\n targetZone: cached?.targetId ?? null,\n cancelled: false,\n }\n onDragEnd?.(endEvent)\n }\n\n if (cached && activeBlockData && fromPositionRef.current) {\n const toPosition = getBlockPosition(cached.reorderedBlocks, activeBlockData.id)\n\n const moveEvent: BlockMoveEvent<T> = {\n block: activeBlockData,\n from: fromPositionRef.current,\n to: toPosition,\n blocks: cached.reorderedBlocks,\n movedIds: [...draggedIdsRef.current],\n }\n\n onBlockMove?.(moveEvent)\n }\n\n stateRef.current.activeId = null\n stateRef.current.hoverZone = null\n stateRef.current.virtualState = null\n stateRef.current.isDragging = false\n cachedReorderRef.current = null\n initialBlocksRef.current = []\n fromPositionRef.current = null\n draggedIdsRef.current = []\n snapshotRectsRef.current = null\n\n if (cached && onChange) {\n onChange(cached.reorderedBlocks)\n }\n\n forceRender()\n }, [blocks, containerTypes, orderingStrategy, debouncedSetVirtual, debouncedDragMove, onChange, onDragEnd, onBlockMove, onBeforeMove])\n\n const handleDragCancel = useCallback((_event: DragCancelEvent) => {\n debouncedSetVirtual.cancel()\n debouncedDragMove.cancel()\n\n const activeId = stateRef.current.activeId\n const activeBlockData = activeId ? blocks.find(b => b.id === activeId) : null\n\n if (activeBlockData) {\n const cancelEvent: DragEndEvent<T> = {\n block: activeBlockData,\n blockId: activeId!,\n targetZone: null,\n cancelled: true,\n }\n onDragCancel?.(cancelEvent)\n onDragEnd?.(cancelEvent)\n }\n\n stateRef.current.activeId = null\n stateRef.current.hoverZone = null\n stateRef.current.virtualState = null\n stateRef.current.isDragging = false\n cachedReorderRef.current = null\n initialBlocksRef.current = []\n fromPositionRef.current = null\n draggedIdsRef.current = []\n snapshotRectsRef.current = null\n\n forceRender()\n }, [blocks, debouncedSetVirtual, debouncedDragMove, onDragCancel, onDragEnd])\n\n const handleHover = useCallback((zoneId: string, _parentId: string | null) => {\n const activeId = stateRef.current.activeId\n if (!activeId) return\n\n const activeBlockData = blocks.find(b => b.id === activeId)\n const targetBlockId = extractBlockId(zoneId)\n const targetBlock = blocks.find(b => b.id === targetBlockId) ?? null\n\n if (canDrop && activeBlockData && !canDrop(activeBlockData, zoneId, targetBlock)) {\n return\n }\n\n if (maxDepth != null && activeBlockData) {\n const baseIdx = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const testResult = reparentBlockIndex(baseIdx, activeId, zoneId, containerTypes, orderingStrategy, maxDepth)\n if (testResult === baseIdx) return\n }\n\n if (stateRef.current.hoverZone !== zoneId) {\n const zoneType: DropZoneType = getDropZoneType(zoneId)\n\n const hoverEvent: HoverChangeEvent<T> = {\n zoneId,\n zoneType,\n targetBlock,\n }\n\n onHoverChange?.(hoverEvent)\n }\n\n stateRef.current.hoverZone = zoneId\n\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const ids = draggedIdsRef.current\n const updatedIndex = ids.length > 1\n ? reparentMultipleBlocks(baseIndex, ids, zoneId, containerTypes, orderingStrategy, maxDepth)\n : reparentBlockIndex(baseIndex, activeId, zoneId, containerTypes, orderingStrategy, maxDepth)\n const orderedBlocks = buildOrderedBlocks(updatedIndex, containerTypes, orderingStrategy)\n\n cachedReorderRef.current = { targetId: zoneId, reorderedBlocks: orderedBlocks }\n\n if (showDropPreview) {\n debouncedSetVirtual(orderedBlocks)\n }\n }, [blocks, containerTypes, orderingStrategy, debouncedSetVirtual, canDrop, onHoverChange, showDropPreview, maxDepth])\n\n const handleToggleExpand = useCallback((id: string) => {\n const newExpanded = stateRef.current.expandedMap[id] === false\n stateRef.current.expandedMap = {\n ...stateRef.current.expandedMap,\n [id]: newExpanded,\n }\n\n const block = blocks.find(b => b.id === id)\n if (block && onExpandChange) {\n const expandEvent: ExpandChangeEvent<T> = {\n block,\n blockId: id,\n expanded: newExpanded,\n }\n onExpandChange(expandEvent)\n }\n\n forceRender()\n }, [blocks, onExpandChange])\n\n toggleExpandRef.current = handleToggleExpand\n\n // --- Virtual scrolling ---\n const virtualContainerRef = useRef<HTMLDivElement>(null)\n const [virtualScroll, setVirtualScroll] = useState({ scrollTop: 0, clientHeight: 0 })\n\n useEffect(() => {\n if (!virtualize) return\n const el = virtualContainerRef.current\n if (!el) return\n\n setVirtualScroll({ scrollTop: el.scrollTop, clientHeight: el.clientHeight })\n\n const onScroll = () => {\n setVirtualScroll({ scrollTop: el.scrollTop, clientHeight: el.clientHeight })\n }\n el.addEventListener('scroll', onScroll, { passive: true })\n return () => el.removeEventListener('scroll', onScroll)\n }, [virtualize])\n\n const virtualResult = useMemo(() => {\n if (!virtualize) return null\n\n const { itemHeight, overscan = 5 } = virtualize\n const { scrollTop, clientHeight } = virtualScroll\n const totalHeight = visibleBlockIds.length * itemHeight\n const startRaw = Math.floor(scrollTop / itemHeight)\n const visibleCount = Math.ceil(clientHeight / itemHeight)\n const start = Math.max(0, startRaw - overscan)\n const end = Math.min(visibleBlockIds.length - 1, startRaw + visibleCount + overscan)\n const offsetY = start * itemHeight\n\n const visibleSet = new Set<string>()\n for (let i = start; i <= end; i++) {\n visibleSet.add(visibleBlockIds[i])\n }\n\n return { totalHeight, offsetY, visibleSet }\n }, [virtualize, virtualScroll, visibleBlockIds])\n\n // Resolve effective collision detection: user-provided dnd-kit detector,\n // or the internal sticky collision adapted from core\n const effectiveCollision = collisionDetection ?? stickyCollisionRef.current\n\n const treeContent = (\n <TreeRenderer\n blocks={blocks}\n blocksByParent={blocksByParent}\n parentId={null}\n activeId={stateRef.current.activeId}\n expandedMap={stateRef.current.expandedMap}\n renderers={renderers as InternalRenderers<T>}\n containerTypes={containerTypes}\n onHover={handleHover}\n onToggleExpand={handleToggleExpand}\n dropZoneClassName={dropZoneClassName}\n dropZoneActiveClassName={dropZoneActiveClassName}\n indentClassName={indentClassName}\n rootClassName={className}\n canDrag={canDrag}\n previewPosition={previewPosition}\n draggedBlock={draggedBlock}\n focusedId={keyboardNavigation ? focusedIdRef.current : undefined}\n selectedIds={multiSelect ? selectedIds : undefined}\n onBlockClick={multiSelect ? handleBlockClick : undefined}\n animation={animation}\n virtualVisibleIds={virtualResult?.visibleSet ?? null}\n />\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={effectiveCollision}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n {virtualize ? (\n <div\n ref={(el) => {\n (virtualContainerRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n (rootRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n }}\n className={className}\n style={{ minWidth: 0, overflow: 'auto', position: 'relative' }}\n onKeyDown={keyboardNavigation ? handleKeyDown : undefined}\n role={keyboardNavigation ? 'tree' : undefined}\n >\n <div style={{ height: virtualResult!.totalHeight, position: 'relative' }}>\n <div style={{ position: 'absolute', top: virtualResult!.offsetY, left: 0, right: 0 }}>\n {treeContent}\n </div>\n </div>\n </div>\n ) : (\n <div\n ref={rootRef}\n className={className}\n style={{ minWidth: 0 }}\n onKeyDown={keyboardNavigation ? handleKeyDown : undefined}\n role={keyboardNavigation ? 'tree' : undefined}\n >\n {treeContent}\n </div>\n )}\n <DragOverlay activeBlock={activeBlock} selectedCount={multiSelect ? selectedIds.size : 0}>\n {dragOverlay}\n </DragOverlay>\n </DndContext>\n )\n}\n","'use client'\n\nimport { useState, useEffect, type ReactNode } from 'react'\nimport { BlockTree, type BlockTreeProps } from './BlockTree'\nimport type { BaseBlock } from '@dnd-block-tree/core'\n\nexport interface BlockTreeSSRProps<\n T extends BaseBlock,\n C extends readonly T['type'][] = readonly T['type'][]\n> extends BlockTreeProps<T, C> {\n /** Content to render before hydration completes (default: null) */\n fallback?: ReactNode\n}\n\nexport function BlockTreeSSR<\n T extends BaseBlock,\n C extends readonly T['type'][] = readonly T['type'][]\n>({ fallback = null, ...props }: BlockTreeSSRProps<T, C>) {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n if (!mounted) {\n return <>{fallback}</>\n }\n\n return <BlockTree<T, C> {...props} />\n}\n","'use client'\n\nimport {\n createContext,\n useContext,\n useReducer,\n useMemo,\n useCallback,\n type ReactNode,\n} from 'react'\nimport type {\n BaseBlock,\n BlockIndex,\n BlockAction,\n BlockStateContextValue,\n OrderingStrategy,\n} from '@dnd-block-tree/core'\nimport {\n blockReducer,\n computeNormalizedIndex,\n getDescendantIds,\n generateId,\n generateKeyBetween,\n} from '@dnd-block-tree/core'\nimport type { BlockStateProviderProps } from '../types'\n\n/**\n * Create block state context and hooks\n */\nexport function createBlockState<T extends BaseBlock>() {\n const BlockContext = createContext<BlockStateContextValue<T> | null>(null)\n\n function useBlockState() {\n const ctx = useContext(BlockContext)\n if (!ctx) throw new Error('useBlockState must be used inside BlockStateProvider')\n return ctx\n }\n\n function BlockStateProvider({\n children,\n initialBlocks = [],\n containerTypes = [],\n onChange,\n orderingStrategy = 'integer',\n maxDepth,\n onBlockAdd,\n onBlockDelete,\n }: BlockStateProviderProps<T>) {\n const reducerWithOptions = useCallback(\n (state: BlockIndex<T>, action: BlockAction<T>) =>\n blockReducer(state, action, containerTypes, orderingStrategy, maxDepth),\n [containerTypes, orderingStrategy, maxDepth]\n )\n\n const [state, dispatch] = useReducer(\n reducerWithOptions,\n computeNormalizedIndex(initialBlocks, orderingStrategy)\n )\n\n const blocks = useMemo(() => {\n const result: T[] = []\n const walk = (parentId: string | null) => {\n const children = state.byParent.get(parentId) ?? []\n for (let i = 0; i < children.length; i++) {\n const id = children[i]\n const b = state.byId.get(id)\n if (b) {\n result.push(orderingStrategy === 'fractional' ? b : { ...b, order: i })\n if (containerTypes.includes(b.type)) walk(b.id)\n }\n }\n }\n walk(null)\n return result\n }, [state, containerTypes, orderingStrategy])\n\n useMemo(() => {\n onChange?.(blocks)\n }, [blocks, onChange])\n\n const blockMap = useMemo(() => state.byId, [state])\n\n const childrenMap = useMemo(() => {\n const map = new Map<string | null, T[]>()\n for (const [parentId, ids] of state.byParent.entries()) {\n map.set(\n parentId,\n ids.map(id => state.byId.get(id)!).filter(Boolean)\n )\n }\n return map\n }, [state])\n\n const indexMap = useMemo(() => {\n const map = new Map<string, number>()\n for (const ids of state.byParent.values()) {\n ids.forEach((id, index) => {\n map.set(id, index)\n })\n }\n return map\n }, [state])\n\n const createItem = useCallback(\n (type: T['type'], parentId: string | null = null): T => {\n const siblings = state.byParent.get(parentId) ?? []\n let order: number | string = siblings.length\n if (orderingStrategy === 'fractional') {\n const lastId = siblings[siblings.length - 1]\n const lastOrder = lastId ? String(state.byId.get(lastId)!.order) : null\n order = generateKeyBetween(lastOrder, null)\n }\n\n const newItem = { id: generateId(), type, parentId, order } as T\n dispatch({ type: 'ADD_ITEM', payload: newItem })\n onBlockAdd?.({ block: newItem, parentId, index: siblings.length })\n return newItem\n },\n [state, orderingStrategy, onBlockAdd]\n )\n\n const insertItem = useCallback(\n (type: T['type'], referenceId: string, position: 'before' | 'after'): T => {\n const referenceBlock = state.byId.get(referenceId)\n if (!referenceBlock) throw new Error(`Reference block ${referenceId} not found`)\n\n const parentId = referenceBlock.parentId ?? null\n const siblings = state.byParent.get(parentId) ?? []\n const index = siblings.indexOf(referenceId)\n const insertIndex = position === 'before' ? index : index + 1\n\n let order: number | string = insertIndex\n if (orderingStrategy === 'fractional') {\n const prevId = insertIndex > 0 ? siblings[insertIndex - 1] : null\n const nextId = insertIndex < siblings.length ? siblings[insertIndex] : null\n const prevOrder = prevId ? String(state.byId.get(prevId)!.order) : null\n const nextOrder = nextId ? String(state.byId.get(nextId)!.order) : null\n order = generateKeyBetween(prevOrder, nextOrder)\n }\n\n const newItem = { id: generateId(), type, parentId, order } as T\n\n dispatch({\n type: 'INSERT_ITEM',\n payload: { item: newItem, parentId, index: insertIndex },\n })\n\n onBlockAdd?.({ block: newItem, parentId, index: insertIndex })\n return newItem\n },\n [state, orderingStrategy, onBlockAdd]\n )\n\n const deleteItem = useCallback((id: string) => {\n const block = state.byId.get(id)\n if (block && onBlockDelete) {\n const deletedIds = [...getDescendantIds(state, id)]\n onBlockDelete({ block, deletedIds, parentId: block.parentId })\n }\n dispatch({ type: 'DELETE_ITEM', payload: { id } })\n }, [state, onBlockDelete])\n\n const moveItem = useCallback((activeId: string, targetZone: string) => {\n dispatch({ type: 'MOVE_ITEM', payload: { activeId, targetZone } })\n }, [])\n\n const setAll = useCallback((all: T[]) => {\n dispatch({ type: 'SET_ALL', payload: all })\n }, [])\n\n const value: BlockStateContextValue<T> = useMemo(\n () => ({\n blocks,\n blockMap,\n childrenMap,\n indexMap,\n normalizedIndex: state,\n createItem,\n insertItem,\n deleteItem,\n moveItem,\n setAll,\n }),\n [\n blocks,\n blockMap,\n childrenMap,\n indexMap,\n state,\n createItem,\n insertItem,\n deleteItem,\n moveItem,\n setAll,\n ]\n )\n\n return <BlockContext.Provider value={value}>{children}</BlockContext.Provider>\n }\n\n return {\n BlockStateProvider,\n useBlockState,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useContext,\n useState,\n useMemo,\n useCallback,\n useReducer,\n useRef,\n useEffect,\n} from 'react'\nimport type { BaseBlock, BlockIndex } from '@dnd-block-tree/core'\nimport {\n expandReducer,\n computeNormalizedIndex,\n reparentBlockIndex,\n buildOrderedBlocks,\n debounce,\n} from '@dnd-block-tree/core'\nimport type { TreeStateContextValue, TreeStateProviderProps } from '../types'\n\ninterface CreateTreeStateOptions<T extends BaseBlock> {\n previewDebounce?: number\n containerTypes?: string[]\n}\n\nexport function createTreeState<T extends BaseBlock>(options: CreateTreeStateOptions<T> = {}) {\n const { previewDebounce = 150, containerTypes = [] } = options\n\n const TreeContext = createContext<TreeStateContextValue<T> | null>(null)\n\n function useTreeState() {\n const ctx = useContext(TreeContext)\n if (!ctx) throw new Error('useTreeState must be used inside TreeStateProvider')\n return ctx\n }\n\n function TreeStateProvider({ children, blocks, blockMap }: TreeStateProviderProps<T>) {\n const [activeId, setActiveId] = useState<string | null>(null)\n const [hoverZone, setHoverZone] = useState<string | null>(null)\n\n const [virtualState, setVirtualState] = useState<BlockIndex<T> | null>(null)\n\n const [expandedMap, dispatchExpand] = useReducer(expandReducer, {})\n\n const initialBlocksRef = useRef<T[]>([])\n const cachedReorderRef = useRef<{ targetId: string; reorderedBlocks: T[] } | null>(null)\n\n const activeBlock = useMemo(() => {\n if (!activeId) return null\n return blockMap.get(activeId) ?? null\n }, [activeId, blockMap])\n\n const debouncedSetVirtualBlocks = useMemo(\n () =>\n debounce((newBlocks: T[] | null) => {\n if (!newBlocks) {\n setVirtualState(null)\n } else {\n setVirtualState(computeNormalizedIndex(newBlocks))\n }\n }, previewDebounce),\n [previewDebounce]\n )\n\n const effectiveState = useMemo(() => {\n return virtualState ?? computeNormalizedIndex(blocks)\n }, [virtualState, blocks])\n\n const effectiveBlocks = useMemo(() => {\n return buildOrderedBlocks(effectiveState, containerTypes)\n }, [effectiveState, containerTypes])\n\n const blocksByParent = useMemo(() => {\n const map = new Map<string | null, T[]>()\n for (const [parentId, ids] of effectiveState.byParent.entries()) {\n map.set(\n parentId,\n ids.map(id => effectiveState.byId.get(id)!).filter(Boolean)\n )\n }\n return map\n }, [effectiveState])\n\n const handleDragStart = useCallback(\n (id: string | null) => {\n setActiveId(id)\n if (id) {\n initialBlocksRef.current = [...blocks]\n cachedReorderRef.current = null\n }\n },\n [blocks]\n )\n\n const handleDragOver = useCallback(\n (targetZone: string) => {\n if (!activeId) return\n\n setHoverZone(targetZone)\n\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current)\n const updatedIndex = reparentBlockIndex(baseIndex, activeId, targetZone, containerTypes)\n const orderedBlocks = buildOrderedBlocks(updatedIndex, containerTypes)\n\n cachedReorderRef.current = { targetId: targetZone, reorderedBlocks: orderedBlocks }\n\n debouncedSetVirtualBlocks(orderedBlocks)\n },\n [activeId, debouncedSetVirtualBlocks, containerTypes]\n )\n\n const handleDragEnd = useCallback(() => {\n debouncedSetVirtualBlocks.cancel()\n setVirtualState(null)\n setActiveId(null)\n setHoverZone(null)\n\n const result = cachedReorderRef.current\n cachedReorderRef.current = null\n initialBlocksRef.current = []\n\n return result\n }, [debouncedSetVirtualBlocks])\n\n const handleHover = useCallback(\n (zoneId: string, _parentId: string | null) => {\n if (!activeId) return\n handleDragOver(zoneId)\n },\n [activeId, handleDragOver]\n )\n\n const toggleExpand = useCallback((id: string) => {\n dispatchExpand({ type: 'TOGGLE', id })\n }, [])\n\n const setExpandAll = useCallback(\n (expanded: boolean) => {\n const containerIds = blocks.filter(b => containerTypes.includes(b.type)).map(b => b.id)\n dispatchExpand({ type: 'SET_ALL', expanded, ids: containerIds })\n },\n [blocks, containerTypes]\n )\n\n useEffect(() => {\n return () => {\n debouncedSetVirtualBlocks.cancel()\n }\n }, [debouncedSetVirtualBlocks])\n\n const value: TreeStateContextValue<T> = useMemo(\n () => ({\n activeId,\n activeBlock,\n hoverZone,\n expandedMap,\n effectiveBlocks,\n blocksByParent,\n setActiveId: handleDragStart,\n setHoverZone,\n toggleExpand,\n setExpandAll,\n handleHover,\n }),\n [\n activeId,\n activeBlock,\n hoverZone,\n expandedMap,\n effectiveBlocks,\n blocksByParent,\n handleDragStart,\n toggleExpand,\n setExpandAll,\n handleHover,\n ]\n )\n\n return <TreeContext.Provider value={value}>{children}</TreeContext.Provider>\n }\n\n return {\n TreeStateProvider,\n useTreeState,\n }\n}\n","'use client'\n\nimport { useReducer, useCallback } from 'react'\nimport type { BaseBlock } from '@dnd-block-tree/core'\nimport { historyReducer } from '@dnd-block-tree/core'\n\nexport interface UseBlockHistoryOptions {\n /** Maximum number of undo steps to retain (default: 50) */\n maxSteps?: number\n}\n\nexport interface UseBlockHistoryResult<T extends BaseBlock> {\n /** Current blocks state */\n blocks: T[]\n /** Set new blocks state (pushes current to undo stack) */\n set: (blocks: T[]) => void\n /** Undo the last change */\n undo: () => void\n /** Redo the last undone change */\n redo: () => void\n /** Whether undo is available */\n canUndo: boolean\n /** Whether redo is available */\n canRedo: boolean\n}\n\n/**\n * Composable hook for undo/redo support with BlockTree.\n *\n * Usage:\n * ```tsx\n * const { blocks, set, undo, redo, canUndo, canRedo } = useBlockHistory(initialBlocks)\n * <BlockTree blocks={blocks} onChange={set} />\n * <button onClick={undo} disabled={!canUndo}>Undo</button>\n * <button onClick={redo} disabled={!canRedo}>Redo</button>\n * ```\n */\nexport function useBlockHistory<T extends BaseBlock>(\n initialBlocks: T[],\n options: UseBlockHistoryOptions = {}\n): UseBlockHistoryResult<T> {\n const { maxSteps = 50 } = options\n\n const [state, dispatch] = useReducer(historyReducer<T>, {\n past: [],\n present: initialBlocks,\n future: [],\n })\n\n const set = useCallback(\n (blocks: T[]) => dispatch({ type: 'SET', payload: blocks, maxSteps }),\n [maxSteps]\n )\n const undo = useCallback(() => dispatch({ type: 'UNDO' }), [])\n const redo = useCallback(() => dispatch({ type: 'REDO' }), [])\n\n return {\n blocks: state.present,\n set,\n undo,\n redo,\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n }\n}\n","'use client'\n\nimport { useRef, useLayoutEffect } from 'react'\n\nexport interface UseLayoutAnimationOptions {\n /** Duration of the transition in ms (default: 200) */\n duration?: number\n /** CSS easing function (default: 'ease') */\n easing?: string\n /** CSS selector for animated children (default: '[data-block-id]') */\n selector?: string\n}\n\n/**\n * FLIP-based layout animation hook for reorder transitions.\n *\n * Captures block positions before render (layout effect cleanup),\n * computes the delta after render, and applies a CSS transform transition.\n *\n * Usage:\n * ```tsx\n * const containerRef = useRef<HTMLDivElement>(null)\n * useLayoutAnimation(containerRef, { duration: 200 })\n * return <div ref={containerRef}>...</div>\n * ```\n */\nexport function useLayoutAnimation(\n containerRef: React.RefObject<HTMLElement | null>,\n options: UseLayoutAnimationOptions = {}\n) {\n const {\n duration = 200,\n easing = 'ease',\n selector = '[data-block-id]',\n } = options\n\n const prevPositions = useRef(new Map<string, DOMRect>())\n\n useLayoutEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const children = container.querySelectorAll(selector)\n const currentPositions = new Map<string, DOMRect>()\n\n children.forEach(el => {\n const id = (el as HTMLElement).dataset.blockId\n if (id) {\n currentPositions.set(id, el.getBoundingClientRect())\n }\n })\n\n children.forEach(el => {\n const htmlEl = el as HTMLElement\n const id = htmlEl.dataset.blockId\n if (!id) return\n\n const prev = prevPositions.current.get(id)\n const curr = currentPositions.get(id)\n if (!prev || !curr) return\n\n const deltaY = prev.top - curr.top\n const deltaX = prev.left - curr.left\n\n if (deltaY === 0 && deltaX === 0) return\n\n htmlEl.style.transform = `translate(${deltaX}px, ${deltaY}px)`\n htmlEl.style.transition = 'none'\n\n requestAnimationFrame(() => {\n htmlEl.style.transition = `transform ${duration}ms ${easing}`\n htmlEl.style.transform = ''\n\n const onEnd = () => {\n htmlEl.style.transition = ''\n htmlEl.removeEventListener('transitionend', onEnd)\n }\n htmlEl.addEventListener('transitionend', onEnd)\n })\n })\n\n prevPositions.current = currentPositions\n })\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\nexport interface UseVirtualTreeOptions {\n /** Ref to the scrollable container element */\n containerRef: React.RefObject<HTMLElement | null>\n /** Total number of items in the tree */\n itemCount: number\n /** Fixed height of each item in pixels */\n itemHeight: number\n /** Number of extra items to render outside the visible range (default: 5) */\n overscan?: number\n}\n\nexport interface UseVirtualTreeResult {\n /** Start and end indices of the visible range (inclusive) */\n visibleRange: { start: number; end: number }\n /** Total height of all items for the spacer div */\n totalHeight: number\n /** Offset from top for the first rendered item */\n offsetY: number\n}\n\n/**\n * Lightweight fixed-height virtual scrolling hook for tree lists.\n *\n * Tracks scroll position on the container and computes which items\n * should be rendered based on the viewport and overscan.\n */\nexport function useVirtualTree({\n containerRef,\n itemCount,\n itemHeight,\n overscan = 5,\n}: UseVirtualTreeOptions): UseVirtualTreeResult {\n const [scrollTop, setScrollTop] = useState(0)\n const [containerHeight, setContainerHeight] = useState(0)\n const rafId = useRef(0)\n\n const handleScroll = useCallback(() => {\n cancelAnimationFrame(rafId.current)\n rafId.current = requestAnimationFrame(() => {\n const el = containerRef.current\n if (el) {\n setScrollTop(el.scrollTop)\n setContainerHeight(el.clientHeight)\n }\n })\n }, [containerRef])\n\n useEffect(() => {\n const el = containerRef.current\n if (!el) return\n\n setScrollTop(el.scrollTop)\n setContainerHeight(el.clientHeight)\n\n el.addEventListener('scroll', handleScroll, { passive: true })\n return () => {\n el.removeEventListener('scroll', handleScroll)\n cancelAnimationFrame(rafId.current)\n }\n }, [containerRef, handleScroll])\n\n const totalHeight = itemCount * itemHeight\n\n const startRaw = Math.floor(scrollTop / itemHeight)\n const visibleCount = Math.ceil(containerHeight / itemHeight)\n const start = Math.max(0, startRaw - overscan)\n const end = Math.min(itemCount - 1, startRaw + visibleCount + overscan)\n\n const offsetY = start * itemHeight\n\n return {\n visibleRange: { start, end },\n totalHeight,\n offsetY,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useMemo, useEffect } from 'react'\nimport type {\n BaseBlock,\n BlockTreeCallbacks,\n DragStartEvent,\n DragEndEvent,\n BlockMoveEvent,\n ExpandChangeEvent,\n HoverChangeEvent,\n} from '@dnd-block-tree/core'\nimport { computeNormalizedIndex, validateBlockTree, getBlockDepth } from '@dnd-block-tree/core'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DevToolsEventEntry {\n id: number\n timestamp: number\n type: 'dragStart' | 'dragEnd' | 'blockMove' | 'expandChange' | 'hoverChange'\n summary: string\n}\n\nexport interface DevToolsCallbacks<T extends BaseBlock = BaseBlock> {\n onDragStart: NonNullable<BlockTreeCallbacks<T>['onDragStart']>\n onDragEnd: NonNullable<BlockTreeCallbacks<T>['onDragEnd']>\n onBlockMove: NonNullable<BlockTreeCallbacks<T>['onBlockMove']>\n onExpandChange: NonNullable<BlockTreeCallbacks<T>['onExpandChange']>\n onHoverChange: NonNullable<BlockTreeCallbacks<T>['onHoverChange']>\n}\n\nexport interface BlockTreeDevToolsProps<T extends BaseBlock = BaseBlock> {\n blocks: T[]\n containerTypes?: readonly string[]\n events: DevToolsEventEntry[]\n onClearEvents: () => void\n getLabel?: (block: T) => string\n initialOpen?: boolean\n position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'\n buttonStyle?: React.CSSProperties\n panelStyle?: React.CSSProperties\n forceMount?: boolean\n}\n\n// ============================================================================\n// Hook: useDevToolsCallbacks\n// ============================================================================\n\nconst MAX_EVENTS = 100\n\nexport function useDevToolsCallbacks<T extends BaseBlock = BaseBlock>() {\n const [events, setEvents] = useState<DevToolsEventEntry[]>([])\n const nextIdRef = useRef(1)\n\n const addEvent = useCallback((type: DevToolsEventEntry['type'], summary: string) => {\n const entry: DevToolsEventEntry = {\n id: nextIdRef.current++,\n timestamp: Date.now(),\n type,\n summary,\n }\n setEvents(prev => [entry, ...prev].slice(0, MAX_EVENTS))\n }, [])\n\n const clearEvents = useCallback(() => {\n setEvents([])\n }, [])\n\n const callbacks: DevToolsCallbacks<T> = useMemo(() => ({\n onDragStart: (event: DragStartEvent<T>) => {\n addEvent('dragStart', `Started dragging \"${event.blockId}\"`)\n },\n onDragEnd: (event: DragEndEvent<T>) => {\n if (event.cancelled) {\n addEvent('dragEnd', `Cancelled drag of \"${event.blockId}\"`)\n } else {\n addEvent('dragEnd', `Dropped \"${event.blockId}\" at ${event.targetZone ?? 'none'}`)\n }\n },\n onBlockMove: (event: BlockMoveEvent<T>) => {\n const fromStr = `parent=${event.from.parentId ?? 'root'}[${event.from.index}]`\n const toStr = `parent=${event.to.parentId ?? 'root'}[${event.to.index}]`\n const ids = event.movedIds.length > 1 ? ` (${event.movedIds.length} blocks)` : ''\n addEvent('blockMove', `Moved \"${event.block.id}\" from ${fromStr} to ${toStr}${ids}`)\n },\n onExpandChange: (event: ExpandChangeEvent<T>) => {\n addEvent('expandChange', `${event.expanded ? 'Expanded' : 'Collapsed'} \"${event.blockId}\"`)\n },\n onHoverChange: (event: HoverChangeEvent<T>) => {\n if (event.zoneId) {\n addEvent('hoverChange', `Hovering over zone \"${event.zoneId}\"`)\n }\n },\n }), [addEvent])\n\n return { callbacks, events, clearEvents }\n}\n\n// ============================================================================\n// Logo SVG\n// ============================================================================\n\nfunction DevToolsLogo({ size = 20 }: { size?: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"2\" y=\"2\" width=\"8\" height=\"5\" rx=\"1\" fill=\"#3b82f6\" opacity=\"0.9\" />\n <rect x=\"8\" y=\"10\" width=\"8\" height=\"5\" rx=\"1\" fill=\"#10b981\" opacity=\"0.9\" />\n <rect x=\"14\" y=\"18\" width=\"8\" height=\"5\" rx=\"1\" fill=\"#f59e0b\" opacity=\"0.9\" />\n <path d=\"M6 7 L6 10 L8 10\" stroke=\"#888\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.6\" />\n <path d=\"M12 15 L12 18 L14 18\" stroke=\"#888\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.6\" />\n </svg>\n )\n}\n\n// ============================================================================\n// Diff computation\n// ============================================================================\n\ntype ChangeType = 'added' | 'moved' | 'unchanged'\n\ninterface DiffEntry<T extends BaseBlock> {\n block: T\n changeType: ChangeType\n depth: number\n}\n\nfunction computeDiffMap<T extends BaseBlock>(prev: T[], next: T[]): Map<string, ChangeType> {\n const prevMap = new Map(prev.map(b => [b.id, b]))\n const changeMap = new Map<string, ChangeType>()\n for (const block of next) {\n const prevBlock = prevMap.get(block.id)\n if (!prevBlock) {\n changeMap.set(block.id, 'added')\n } else if (prevBlock.parentId !== block.parentId || prevBlock.order !== block.order) {\n changeMap.set(block.id, 'moved')\n } else {\n changeMap.set(block.id, 'unchanged')\n }\n }\n return changeMap\n}\n\nfunction buildDiffTree<T extends BaseBlock>(blocks: T[], changeMap: Map<string, ChangeType>): DiffEntry<T>[] {\n const result: DiffEntry<T>[] = []\n const byParent = new Map<string | null, T[]>()\n for (const block of blocks) {\n const key = block.parentId ?? null\n const list = byParent.get(key) ?? []\n list.push(block)\n byParent.set(key, list)\n }\n function walk(parentId: string | null, depth: number) {\n const children = byParent.get(parentId) ?? []\n children.sort((a, b) => {\n const ao = a.order, bo = b.order\n if (typeof ao === 'number' && typeof bo === 'number') return ao - bo\n return String(ao) < String(bo) ? -1 : String(ao) > String(bo) ? 1 : 0\n })\n for (const block of children) {\n result.push({ block, changeType: changeMap.get(block.id) ?? 'unchanged', depth })\n walk(block.id, depth + 1)\n }\n }\n walk(null, 0)\n return result\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst TYPE_COLORS: Record<DevToolsEventEntry['type'], string> = {\n dragStart: '#3b82f6',\n dragEnd: '#10b981',\n blockMove: '#f59e0b',\n expandChange: '#8b5cf6',\n hoverChange: '#6b7280',\n}\n\nconst TYPE_LABELS: Record<DevToolsEventEntry['type'], string> = {\n dragStart: 'DRAG',\n dragEnd: 'DROP',\n blockMove: 'MOVE',\n expandChange: 'EXPAND',\n hoverChange: 'HOVER',\n}\n\nconst TYPE_TOOLTIPS: Record<DevToolsEventEntry['type'], string> = {\n dragStart: 'onDragStart -- a block was picked up',\n dragEnd: 'onDragEnd -- a block was dropped or drag was cancelled',\n blockMove: 'onBlockMove -- a block was reparented to a new position',\n expandChange: 'onExpandChange -- a container was expanded or collapsed',\n hoverChange: 'onHoverChange -- the pointer entered a drop zone',\n}\n\nconst DEFAULT_WIDTH = 340\nconst DEFAULT_HEIGHT = 420\nconst DIFF_EXTRA_WIDTH = 300\nconst MIN_WIDTH = 280\nconst MIN_HEIGHT = 200\nconst BTN_SIZE = 40\nconst BTN_MARGIN = 16\nconst STORAGE_KEY = 'dnd-devtools-position'\nconst BTN_DRAG_THRESHOLD = 5\n\ntype Corner = NonNullable<BlockTreeDevToolsProps['position']>\n\nfunction cornerToXY(corner: Corner): { x: number; y: number } {\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1024\n const vh = typeof window !== 'undefined' ? window.innerHeight : 768\n switch (corner) {\n case 'top-left': return { x: BTN_MARGIN, y: BTN_MARGIN }\n case 'top-right': return { x: vw - BTN_MARGIN - BTN_SIZE, y: BTN_MARGIN }\n case 'bottom-right': return { x: vw - BTN_MARGIN - BTN_SIZE, y: vh - BTN_MARGIN - BTN_SIZE }\n case 'bottom-left':\n default: return { x: BTN_MARGIN, y: vh - BTN_MARGIN - BTN_SIZE }\n }\n}\n\nfunction xyToCorner(x: number, y: number): Corner {\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1024\n const vh = typeof window !== 'undefined' ? window.innerHeight : 768\n const isLeft = x + BTN_SIZE / 2 < vw / 2\n const isTop = y + BTN_SIZE / 2 < vh / 2\n if (isTop && isLeft) return 'top-left'\n if (isTop) return 'top-right'\n if (isLeft) return 'bottom-left'\n return 'bottom-right'\n}\n\nfunction loadStoredPosition(): Corner | null {\n if (typeof window === 'undefined') return null\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'bottom-left' || v === 'bottom-right' || v === 'top-left' || v === 'top-right') return v\n } catch { /* ignore */ }\n return null\n}\n\nfunction savePosition(corner: Corner) {\n try { localStorage.setItem(STORAGE_KEY, corner) } catch { /* ignore */ }\n}\n\nfunction computeCardOrigin(corner: Corner, width: number, height: number): { x: number; y: number } {\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1024\n const vh = typeof window !== 'undefined' ? window.innerHeight : 768\n let x: number\n let y: number\n switch (corner) {\n case 'bottom-right':\n x = vw - BTN_MARGIN - width\n y = vh - BTN_MARGIN - height - BTN_SIZE - 8\n break\n case 'top-left':\n x = BTN_MARGIN\n y = BTN_MARGIN + BTN_SIZE + 8\n break\n case 'top-right':\n x = vw - BTN_MARGIN - width\n y = BTN_MARGIN + BTN_SIZE + 8\n break\n case 'bottom-left':\n default:\n x = BTN_MARGIN\n y = vh - BTN_MARGIN - height - BTN_SIZE - 8\n break\n }\n return {\n x: Math.max(0, Math.min(x, vw - width)),\n y: Math.max(0, Math.min(y, vh - height)),\n }\n}\n\n// ============================================================================\n// Component: BlockTreeDevTools\n// ============================================================================\n\nexport function BlockTreeDevTools<T extends BaseBlock = BaseBlock>({\n blocks,\n containerTypes = [],\n events,\n onClearEvents,\n getLabel = (b) => b.type,\n initialOpen = false,\n position = 'bottom-left',\n buttonStyle,\n panelStyle,\n forceMount = false,\n}: BlockTreeDevToolsProps<T>) {\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production' && !forceMount) {\n return null\n }\n const [isOpen, setIsOpen] = useState(initialOpen)\n const [showDiff, setShowDiff] = useState(false)\n const [cardPos, setCardPos] = useState<{ x: number; y: number } | null>(null)\n const [cardSize, setCardSize] = useState<{ w: number; h: number }>({ w: DEFAULT_WIDTH, h: DEFAULT_HEIGHT })\n const [showTooltip, setShowTooltip] = useState(false)\n\n const [activeCorner, setActiveCorner] = useState<Corner>(() => loadStoredPosition() ?? position)\n const [btnPos, setBtnPos] = useState<{ x: number; y: number } | null>(null)\n const [btnDragging, setBtnDragging] = useState(false)\n const [btnTransition, setBtnTransition] = useState(false)\n const btnDragRef = useRef<{ active: boolean; startX: number; startY: number; origX: number; origY: number; moved: boolean }>({\n active: false, startX: 0, startY: 0, origX: 0, origY: 0, moved: false,\n })\n\n useEffect(() => {\n if (!btnDragging) {\n setBtnPos(cornerToXY(activeCorner))\n }\n }, [activeCorner, btnDragging])\n\n useEffect(() => {\n const onResize = () => {\n if (!btnDragRef.current.active) {\n setBtnPos(cornerToXY(activeCorner))\n }\n }\n window.addEventListener('resize', onResize)\n return () => window.removeEventListener('resize', onResize)\n }, [activeCorner])\n\n const handleBtnPointerDown = useCallback((e: React.PointerEvent) => {\n if (!btnPos) return\n btnDragRef.current = {\n active: true,\n startX: e.clientX,\n startY: e.clientY,\n origX: btnPos.x,\n origY: btnPos.y,\n moved: false,\n }\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n }, [btnPos])\n\n const handleBtnPointerMove = useCallback((e: React.PointerEvent) => {\n const r = btnDragRef.current\n if (!r.active) return\n const dx = e.clientX - r.startX\n const dy = e.clientY - r.startY\n if (!r.moved && Math.abs(dx) < BTN_DRAG_THRESHOLD && Math.abs(dy) < BTN_DRAG_THRESHOLD) return\n r.moved = true\n setBtnDragging(true)\n const newX = r.origX + dx\n const newY = r.origY + dy\n const maxX = window.innerWidth - BTN_SIZE\n const maxY = window.innerHeight - BTN_SIZE\n setBtnPos({\n x: Math.max(0, Math.min(newX, maxX)),\n y: Math.max(0, Math.min(newY, maxY)),\n })\n }, [])\n\n const handleBtnPointerUp = useCallback(() => {\n if (!btnPos) return\n const wasMoved = btnDragRef.current.moved\n btnDragRef.current.active = false\n if (wasMoved) {\n const newCorner = xyToCorner(btnPos.x, btnPos.y)\n setActiveCorner(newCorner)\n savePosition(newCorner)\n setBtnTransition(true)\n setBtnPos(cornerToXY(newCorner))\n setTimeout(() => {\n setBtnTransition(false)\n setBtnDragging(false)\n }, 300)\n } else {\n setBtnDragging(false)\n setIsOpen(prev => !prev)\n }\n }, [btnPos])\n\n const dragRef = useRef<{ dragging: boolean; startX: number; startY: number; origX: number; origY: number }>({\n dragging: false, startX: 0, startY: 0, origX: 0, origY: 0,\n })\n\n const resizeRef = useRef<{\n active: boolean\n edge: string\n startX: number; startY: number\n origX: number; origY: number\n origW: number; origH: number\n }>({ active: false, edge: '', startX: 0, startY: 0, origX: 0, origY: 0, origW: 0, origH: 0 })\n\n const cardRef = useRef<HTMLDivElement>(null)\n\n const prevBlocksRef = useRef<T[]>(blocks)\n const diffChangeMap = useMemo(() => computeDiffMap(prevBlocksRef.current, blocks), [blocks])\n useEffect(() => { prevBlocksRef.current = blocks }, [blocks])\n const diffTree = useMemo(() => buildDiffTree(blocks, diffChangeMap), [blocks, diffChangeMap])\n const diffStats = useMemo(() => {\n let added = 0, moved = 0\n for (const { changeType } of diffTree) {\n if (changeType === 'added') added++\n if (changeType === 'moved') moved++\n }\n return { added, moved }\n }, [diffTree])\n\n useEffect(() => {\n setCardSize(prev => {\n const targetW = showDiff ? DEFAULT_WIDTH + DIFF_EXTRA_WIDTH : DEFAULT_WIDTH\n const wasDefault = Math.abs(prev.w - DEFAULT_WIDTH) < 20\n const wasExpanded = Math.abs(prev.w - (DEFAULT_WIDTH + DIFF_EXTRA_WIDTH)) < 20\n let newW = prev.w\n if (showDiff && (wasDefault || prev.w < targetW)) {\n newW = targetW\n } else if (!showDiff && wasExpanded) {\n newW = DEFAULT_WIDTH\n }\n if (newW !== prev.w) {\n setCardPos(cp => {\n if (!cp) return cp\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1024\n const maxX = Math.max(0, vw - newW)\n if (cp.x > maxX) return { ...cp, x: maxX }\n return cp\n })\n return { ...prev, w: newW }\n }\n return prev\n })\n }, [showDiff])\n\n const getDefaultCardPos = useCallback(() => {\n return computeCardOrigin(activeCorner, cardSize.w, cardSize.h)\n }, [activeCorner, cardSize.w, cardSize.h])\n\n useEffect(() => {\n if (isOpen && !cardPos) {\n setCardPos(getDefaultCardPos())\n }\n }, [isOpen, cardPos, getDefaultCardPos])\n\n const handleDragPointerDown = useCallback((e: React.PointerEvent) => {\n e.preventDefault()\n dragRef.current = {\n dragging: true,\n startX: e.clientX,\n startY: e.clientY,\n origX: cardPos?.x ?? 0,\n origY: cardPos?.y ?? 0,\n }\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n }, [cardPos])\n\n const handleDragPointerMove = useCallback((e: React.PointerEvent) => {\n if (!dragRef.current.dragging) return\n const dx = e.clientX - dragRef.current.startX\n const dy = e.clientY - dragRef.current.startY\n const newX = dragRef.current.origX + dx\n const newY = dragRef.current.origY + dy\n const maxX = window.innerWidth - cardSize.w\n const maxY = window.innerHeight - 40\n setCardPos({\n x: Math.max(0, Math.min(newX, maxX)),\n y: Math.max(0, Math.min(newY, maxY)),\n })\n }, [cardSize.w])\n\n const handleDragPointerUp = useCallback(() => {\n dragRef.current.dragging = false\n }, [])\n\n const handleResizePointerDown = useCallback((edge: string) => (e: React.PointerEvent) => {\n e.preventDefault()\n e.stopPropagation()\n resizeRef.current = {\n active: true,\n edge,\n startX: e.clientX,\n startY: e.clientY,\n origX: cardPos?.x ?? 0,\n origY: cardPos?.y ?? 0,\n origW: cardSize.w,\n origH: cardSize.h,\n }\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n }, [cardPos, cardSize])\n\n const handleResizePointerMove = useCallback((e: React.PointerEvent) => {\n const r = resizeRef.current\n if (!r.active) return\n const dx = e.clientX - r.startX\n const dy = e.clientY - r.startY\n let newW = r.origW\n let newH = r.origH\n let newX = r.origX\n let newY = r.origY\n\n if (r.edge.includes('e')) newW = Math.max(MIN_WIDTH, r.origW + dx)\n if (r.edge.includes('w')) {\n newW = Math.max(MIN_WIDTH, r.origW - dx)\n newX = r.origX + (r.origW - newW)\n }\n if (r.edge.includes('s')) newH = Math.max(MIN_HEIGHT, r.origH + dy)\n if (r.edge.includes('n')) {\n newH = Math.max(MIN_HEIGHT, r.origH - dy)\n newY = r.origY + (r.origH - newH)\n }\n\n setCardSize({ w: newW, h: newH })\n setCardPos({ x: newX, y: newY })\n }, [])\n\n const handleResizePointerUp = useCallback(() => {\n resizeRef.current.active = false\n }, [])\n\n const toggle = useCallback(() => {\n setIsOpen(prev => !prev)\n }, [])\n\n const toggleDiff = useCallback(() => {\n setShowDiff(prev => !prev)\n }, [])\n\n const renderCountRef = useRef(0)\n const lastRenderTimeRef = useRef(performance.now())\n const prevBlockCountRef = useRef(blocks.length)\n\n renderCountRef.current++\n const renderTime = performance.now() - lastRenderTimeRef.current\n lastRenderTimeRef.current = performance.now()\n\n const blockCountDelta = blocks.length - prevBlockCountRef.current\n useEffect(() => {\n prevBlockCountRef.current = blocks.length\n }, [blocks.length])\n\n const treeStats = useMemo(() => {\n const index = computeNormalizedIndex(blocks as BaseBlock[])\n const containers = blocks.filter(b => containerTypes.includes(b.type))\n let maxDepthVal = 0\n for (const block of blocks) {\n const d = getBlockDepth(index, block.id)\n if (d > maxDepthVal) maxDepthVal = d\n }\n const validation = validateBlockTree(index)\n return {\n blockCount: blocks.length,\n containerCount: containers.length,\n maxDepth: maxDepthVal,\n validation,\n }\n }, [blocks, containerTypes])\n\n const formatTime = (ts: number) => {\n const d = new Date(ts)\n return `${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}:${d.getSeconds().toString().padStart(2, '0')}`\n }\n\n const isBottom = activeCorner.startsWith('bottom')\n const isLeft = activeCorner.endsWith('left')\n\n if (!btnPos) return null\n\n const triggerBtnStyle: React.CSSProperties = {\n position: 'fixed',\n left: btnPos.x,\n top: btnPos.y,\n zIndex: 99998,\n width: BTN_SIZE,\n height: BTN_SIZE,\n borderRadius: '50%',\n border: 'none',\n background: isOpen ? 'rgba(59, 130, 246, 0.9)' : 'rgba(30, 30, 30, 0.85)',\n color: '#fff',\n cursor: btnDragging ? 'grabbing' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 2px 8px rgba(0,0,0,0.3)',\n transition: btnTransition\n ? 'left 0.3s cubic-bezier(0.4, 0, 0.2, 1), top 0.3s cubic-bezier(0.4, 0, 0.2, 1), background 0.15s'\n : 'background 0.15s',\n touchAction: 'none',\n userSelect: 'none',\n ...buttonStyle,\n }\n\n const tooltipStyle: React.CSSProperties = {\n position: 'absolute',\n whiteSpace: 'nowrap',\n fontSize: 11,\n fontWeight: 500,\n padding: '4px 10px',\n borderRadius: 6,\n background: 'rgba(15, 15, 20, 0.95)',\n color: '#ccc',\n boxShadow: '0 2px 8px rgba(0,0,0,0.3)',\n pointerEvents: 'none',\n ...(isBottom\n ? { bottom: '100%', marginBottom: 8 }\n : { top: '100%', marginTop: 8 }),\n ...(isLeft\n ? { left: 0 }\n : { right: 0 }),\n }\n\n const cardStyle: React.CSSProperties = {\n position: 'fixed',\n left: cardPos?.x ?? 0,\n top: cardPos?.y ?? 0,\n zIndex: 99999,\n width: cardSize.w,\n height: cardSize.h,\n background: 'rgba(20, 20, 24, 0.95)',\n backdropFilter: 'blur(12px)',\n border: '1px solid rgba(255,255,255,0.1)',\n borderRadius: 10,\n color: '#e0e0e0',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: 12,\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0 8px 32px rgba(0,0,0,0.5)',\n overflow: 'hidden',\n ...panelStyle,\n }\n\n const titleBarStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n gap: 8,\n background: 'rgba(255,255,255,0.04)',\n borderBottom: '1px solid rgba(255,255,255,0.08)',\n cursor: 'grab',\n userSelect: 'none',\n flexShrink: 0,\n touchAction: 'none',\n }\n\n const titleTextStyle: React.CSSProperties = {\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: '0.03em',\n opacity: 0.8,\n flexShrink: 0,\n }\n\n const titleBtnStyle = (active?: boolean): React.CSSProperties => ({\n height: 22,\n padding: '0 8px',\n borderRadius: 4,\n border: '1px solid ' + (active ? 'rgba(59,130,246,0.5)' : 'rgba(128,128,128,0.25)'),\n background: active ? 'rgba(59,130,246,0.15)' : 'transparent',\n color: active ? '#93b8f7' : '#999',\n cursor: 'pointer',\n fontSize: 10,\n fontWeight: 600,\n letterSpacing: '0.02em',\n flexShrink: 0,\n })\n\n const closeBtnStyle: React.CSSProperties = {\n width: 20,\n height: 20,\n borderRadius: 4,\n border: 'none',\n background: 'transparent',\n color: '#999',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 14,\n lineHeight: '1',\n padding: 0,\n flexShrink: 0,\n }\n\n const bodyStyle: React.CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'row',\n overflow: 'hidden',\n minHeight: 0,\n }\n\n const mainColumnStyle: React.CSSProperties = {\n flex: showDiff ? '0 0 50%' : '1 1 100%',\n overflow: 'auto',\n padding: '10px 12px',\n minWidth: 0,\n }\n\n const diffColumnStyle: React.CSSProperties = {\n flex: '0 0 50%',\n overflow: 'auto',\n padding: '10px 12px',\n borderLeft: '1px solid rgba(255,255,255,0.08)',\n minWidth: 0,\n }\n\n const sectionStyle: React.CSSProperties = {\n marginBottom: 8,\n }\n\n const headingStyle: React.CSSProperties = {\n fontSize: 11,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n opacity: 0.6,\n marginBottom: 6,\n }\n\n const statRowStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: 12,\n padding: '2px 0',\n }\n\n const statValueStyle: React.CSSProperties = {\n fontFamily: 'monospace',\n fontSize: 11,\n opacity: 0.8,\n }\n\n const badgeStyle = (color: string): React.CSSProperties => ({\n display: 'inline-block',\n fontSize: 9,\n fontWeight: 700,\n fontFamily: 'monospace',\n padding: '1px 5px',\n borderRadius: 3,\n backgroundColor: color + '22',\n color,\n marginRight: 6,\n flexShrink: 0,\n })\n\n const eventListStyle: React.CSSProperties = {\n maxHeight: 160,\n overflowY: 'auto',\n fontSize: 11,\n lineHeight: '1.6',\n }\n\n const eventItemStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 4,\n padding: '2px 0',\n borderBottom: '1px solid rgba(128,128,128,0.1)',\n }\n\n const timeStyle: React.CSSProperties = {\n fontFamily: 'monospace',\n fontSize: 10,\n opacity: 0.4,\n flexShrink: 0,\n minWidth: 52,\n }\n\n const clearBtnStyle: React.CSSProperties = {\n fontSize: 10,\n padding: '2px 8px',\n border: '1px solid rgba(128,128,128,0.3)',\n borderRadius: 4,\n background: 'transparent',\n color: '#ccc',\n cursor: 'pointer',\n opacity: 0.7,\n }\n\n const EDGE_SIZE = 6\n const resizeEdge = (edge: string): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: 'absolute',\n zIndex: 1,\n }\n const cursors: Record<string, string> = {\n n: 'ns-resize', s: 'ns-resize', e: 'ew-resize', w: 'ew-resize',\n ne: 'nesw-resize', nw: 'nwse-resize', se: 'nwse-resize', sw: 'nesw-resize',\n }\n const styles: Record<string, React.CSSProperties> = {\n n: { top: 0, left: EDGE_SIZE, right: EDGE_SIZE, height: EDGE_SIZE },\n s: { bottom: 0, left: EDGE_SIZE, right: EDGE_SIZE, height: EDGE_SIZE },\n e: { right: 0, top: EDGE_SIZE, bottom: EDGE_SIZE, width: EDGE_SIZE },\n w: { left: 0, top: EDGE_SIZE, bottom: EDGE_SIZE, width: EDGE_SIZE },\n ne: { top: 0, right: 0, width: EDGE_SIZE * 2, height: EDGE_SIZE * 2 },\n nw: { top: 0, left: 0, width: EDGE_SIZE * 2, height: EDGE_SIZE * 2 },\n se: { bottom: 0, right: 0, width: EDGE_SIZE * 2, height: EDGE_SIZE * 2 },\n sw: { bottom: 0, left: 0, width: EDGE_SIZE * 2, height: EDGE_SIZE * 2 },\n }\n return { ...base, cursor: cursors[edge], ...styles[edge] }\n }\n\n const EDGES = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw']\n\n const diffRowColor = (ct: ChangeType): React.CSSProperties => {\n if (ct === 'added') return { background: 'rgba(16,185,129,0.1)', color: '#34d399' }\n if (ct === 'moved') return { background: 'rgba(245,158,11,0.1)', color: '#fbbf24' }\n return { color: 'rgba(200,200,200,0.5)' }\n }\n\n return (\n <>\n {/* Trigger Button + Tooltip */}\n <div style={{ position: 'fixed', left: btnPos.x, top: btnPos.y, zIndex: 99998 }}>\n <button\n onPointerDown={handleBtnPointerDown}\n onPointerMove={handleBtnPointerMove}\n onPointerUp={handleBtnPointerUp}\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n style={triggerBtnStyle}\n aria-label={isOpen ? 'Close DevTools' : 'Open DevTools'}\n >\n <DevToolsLogo size={20} />\n </button>\n {showTooltip && !isOpen && !btnDragging && (\n <div style={tooltipStyle}>dnd-block-tree DevTools</div>\n )}\n </div>\n\n {/* Floating Card */}\n {isOpen && cardPos && (\n <div\n ref={cardRef}\n style={cardStyle}\n data-devtools-root=\"\"\n >\n {EDGES.map(edge => (\n <div\n key={edge}\n style={resizeEdge(edge)}\n onPointerDown={handleResizePointerDown(edge)}\n onPointerMove={handleResizePointerMove}\n onPointerUp={handleResizePointerUp}\n />\n ))}\n\n <div\n style={titleBarStyle}\n onPointerDown={handleDragPointerDown}\n onPointerMove={handleDragPointerMove}\n onPointerUp={handleDragPointerUp}\n >\n <span style={titleTextStyle}>DevTools</span>\n <div style={{ flex: 1 }} />\n <button\n onClick={toggleDiff}\n style={titleBtnStyle(showDiff)}\n onPointerDown={e => e.stopPropagation()}\n title=\"Toggle structure diff\"\n >\n Diff\n </button>\n <button\n onClick={toggle}\n style={closeBtnStyle}\n onPointerDown={e => e.stopPropagation()}\n aria-label=\"Close DevTools\"\n >\n ×\n </button>\n </div>\n\n <div style={bodyStyle}>\n <div style={mainColumnStyle}>\n <div style={sectionStyle} data-devtools-section=\"tree-state\">\n <div style={headingStyle} title=\"Live snapshot of the block tree structure\">Tree State</div>\n <div style={statRowStyle} title=\"Total number of blocks\">\n <span>Blocks</span>\n <span style={statValueStyle}>{treeStats.blockCount}</span>\n </div>\n <div style={statRowStyle} title=\"Container blocks\">\n <span>Containers</span>\n <span style={statValueStyle}>{treeStats.containerCount}</span>\n </div>\n <div style={statRowStyle} title=\"Deepest nesting level\">\n <span>Max Depth</span>\n <span style={statValueStyle}>{treeStats.maxDepth}</span>\n </div>\n <div style={statRowStyle} title=\"Tree validation status\">\n <span>Validation</span>\n <span style={{\n ...statValueStyle,\n color: treeStats.validation.valid ? '#10b981' : '#ef4444',\n }}>\n {treeStats.validation.valid ? 'Valid' : `${treeStats.validation.issues.length} issue(s)`}\n </span>\n </div>\n {!treeStats.validation.valid && (\n <div style={{ fontSize: 10, color: '#ef4444', marginTop: 4 }}>\n {treeStats.validation.issues.map((issue, i) => (\n <div key={i}>{issue}</div>\n ))}\n </div>\n )}\n </div>\n\n <div style={sectionStyle} data-devtools-section=\"event-log\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 6 }}>\n <div style={headingStyle} title=\"Event log\">Event Log ({events.length})</div>\n {events.length > 0 && (\n <button onClick={onClearEvents} style={clearBtnStyle}>Clear</button>\n )}\n </div>\n <div style={eventListStyle}>\n {events.length === 0 ? (\n <div style={{ fontSize: 11, opacity: 0.4, padding: '8px 0' }}>\n No events yet. Drag some blocks!\n </div>\n ) : (\n events.map(event => (\n <div key={event.id} style={eventItemStyle}>\n <span style={timeStyle}>{formatTime(event.timestamp)}</span>\n <span style={badgeStyle(TYPE_COLORS[event.type])} title={TYPE_TOOLTIPS[event.type]}>{TYPE_LABELS[event.type]}</span>\n <span style={{ wordBreak: 'break-word' }}>{event.summary}</span>\n </div>\n ))\n )}\n </div>\n </div>\n\n <div style={sectionStyle} data-devtools-section=\"performance\">\n <div style={headingStyle} title=\"Render metrics\">Performance</div>\n <div style={statRowStyle} title=\"Render count\">\n <span>Render Count</span>\n <span style={statValueStyle}>{renderCountRef.current}</span>\n </div>\n <div style={statRowStyle} title=\"Time since previous render\">\n <span>Last Render</span>\n <span style={statValueStyle}>{renderTime.toFixed(1)}ms</span>\n </div>\n <div style={statRowStyle}>\n <span style={{\n ...statValueStyle,\n color: blockCountDelta > 0 ? '#10b981' : blockCountDelta < 0 ? '#ef4444' : undefined,\n }}>\n {blockCountDelta > 0 ? '+' : ''}{blockCountDelta}\n </span>\n </div>\n </div>\n </div>\n\n {showDiff && (\n <div style={diffColumnStyle}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 8 }}>\n <div style={headingStyle} title=\"Tree structure diff\">Structure</div>\n <div style={{ display: 'flex', gap: 10, fontSize: 11, fontWeight: 500 }}>\n {diffStats.added > 0 && (\n <span style={{ color: '#34d399', display: 'flex', alignItems: 'center', gap: 4 }}>\n <span style={{ width: 5, height: 5, borderRadius: '50%', background: '#34d399', display: 'inline-block' }} />\n {diffStats.added} new\n </span>\n )}\n {diffStats.moved > 0 && (\n <span style={{ color: '#fbbf24', display: 'flex', alignItems: 'center', gap: 4 }}>\n <span style={{ width: 5, height: 5, borderRadius: '50%', background: '#fbbf24', display: 'inline-block' }} />\n {diffStats.moved} moved\n </span>\n )}\n {diffStats.added === 0 && diffStats.moved === 0 && (\n <span style={{ opacity: 0.4 }}>No changes</span>\n )}\n </div>\n </div>\n <div style={{ fontFamily: 'monospace', fontSize: 11, lineHeight: '1.7' }}>\n {diffTree.map(({ block, changeType, depth }) => (\n <div\n key={block.id}\n style={{\n paddingLeft: depth * 14,\n padding: '2px 6px 2px ' + (depth * 14 + 6) + 'px',\n borderRadius: 4,\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n ...diffRowColor(changeType),\n }}\n >\n <span style={{ width: 12, textAlign: 'center', fontWeight: 700, fontSize: 10 }}>\n {changeType === 'added' && '+'}\n {changeType === 'moved' && '~'}\n </span>\n <span style={{\n textTransform: 'uppercase',\n fontSize: 9,\n letterSpacing: '0.05em',\n width: 50,\n flexShrink: 0,\n opacity: changeType === 'unchanged' ? 0.5 : 1,\n }}>\n {block.type}\n </span>\n <span style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: 1,\n minWidth: 0,\n }}>\n {getLabel(block)}\n </span>\n <span style={{\n fontFamily: 'monospace',\n fontSize: 10,\n flexShrink: 0,\n padding: '1px 5px',\n borderRadius: 3,\n ...(changeType === 'added'\n ? { background: 'rgba(16,185,129,0.2)', color: '#34d399' }\n : changeType === 'moved'\n ? { background: 'rgba(245,158,11,0.2)', color: '#fbbf24' }\n : { background: 'rgba(128,128,128,0.15)', color: 'rgba(200,200,200,0.4)' }),\n }}>\n {String(block.order)}\n </span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </>\n )\n}\n"]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bridge.ts","../src/utils/haptic.ts","../src/hooks/useConfiguredSensors.tsx","../src/components/DropZone.tsx","../src/components/TreeRenderer.tsx","../src/components/DragOverlay.tsx","../src/components/BlockTree.tsx","../src/components/BlockTreeSSR.tsx","../src/hooks/useBlockState.tsx","../src/hooks/useTreeState.tsx","../src/hooks/useBlockHistory.tsx","../src/hooks/useLayoutAnimation.tsx","../src/hooks/useVirtualTree.tsx","../src/components/BlockTreeDevTools.tsx"],"names":["jsx","memo","DndKitDragOverlay","jsxs","Fragment","expandedMap","containers","useCallback","useEffect","activeBlock","baseIndex","useState","state","useReducer","computeNormalizedIndex","useMemo","children","createContext","useContext","useRef","debounce","buildOrderedBlocks","reparentBlockIndex"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { CollisionDetection, CollisionDescriptor } from '@dnd-kit/core'\nimport type {\n CoreCollisionDetection,\n CollisionCandidate,\n Rect,\n SnapshotRectsRef,\n} from '@dnd-block-tree/core'\n\n/**\n * Adapt a framework-agnostic CoreCollisionDetection into a dnd-kit CollisionDetection.\n *\n * Converts:\n * droppableContainers → CollisionCandidate[]\n * Calls coreDetector\n * CollisionResult[] → CollisionDescriptor[]\n */\nexport function adaptCollisionDetection(\n coreDetector: CoreCollisionDetection,\n): CollisionDetection {\n return ({ droppableContainers, collisionRect }) => {\n if (!collisionRect) return []\n\n // Convert dnd-kit droppable containers to core CollisionCandidates\n const candidates: CollisionCandidate[] = []\n for (const container of droppableContainers) {\n const rect = container.rect.current\n if (!rect) continue\n candidates.push({\n id: String(container.id),\n rect: {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height,\n right: rect.right,\n bottom: rect.bottom,\n },\n })\n }\n\n // Convert dnd-kit collision rect to core Rect\n const pointerRect: Rect = {\n top: collisionRect.top,\n left: collisionRect.left,\n width: collisionRect.width,\n height: collisionRect.height,\n right: collisionRect.left + collisionRect.width,\n bottom: collisionRect.top + collisionRect.height,\n }\n\n // Call core detector\n const results = coreDetector(candidates, pointerRect)\n\n // Convert results back to dnd-kit CollisionDescriptors\n return results.map(result => {\n const container = droppableContainers.find(c => String(c.id) === result.id)\n if (!container) return null\n return {\n id: result.id,\n data: {\n droppableContainer: container,\n value: result.value,\n left: result.left,\n },\n } as CollisionDescriptor\n }).filter((c): c is CollisionDescriptor => c !== null)\n }\n}\n","/**\n * Trigger haptic feedback (vibration) on supported devices.\n * Safe to call in any environment -- no-ops when `navigator.vibrate` is unavailable.\n */\nexport function triggerHaptic(durationMs = 10): void {\n if (typeof navigator !== 'undefined' && typeof navigator.vibrate === 'function') {\n navigator.vibrate(durationMs)\n }\n}\n","'use client'\n\nimport {\n useSensor,\n useSensors,\n PointerSensor,\n TouchSensor,\n KeyboardSensor,\n type PointerActivationConstraint,\n} from '@dnd-kit/core'\nimport type { SensorConfig } from '@dnd-block-tree/core'\n\nconst DEFAULT_ACTIVATION_DISTANCE = 8\n\nexport interface SensorConfigResult {\n pointer: { activationConstraint: PointerActivationConstraint }\n touch: { activationConstraint: PointerActivationConstraint }\n}\n\nexport function useConfiguredSensors(config: SensorConfig = {}) {\n const {\n activationDistance = DEFAULT_ACTIVATION_DISTANCE,\n activationDelay,\n tolerance,\n } = config\n\n let pointerConstraint: PointerActivationConstraint\n let touchConstraint: PointerActivationConstraint\n\n if (activationDelay !== undefined) {\n pointerConstraint = {\n delay: activationDelay,\n tolerance: tolerance ?? 5,\n }\n touchConstraint = pointerConstraint\n } else {\n pointerConstraint = {\n distance: activationDistance,\n }\n touchConstraint = {\n delay: config.longPressDelay ?? 200,\n tolerance: 5,\n }\n }\n\n return useSensors(\n useSensor(PointerSensor, {\n activationConstraint: pointerConstraint,\n }),\n useSensor(TouchSensor, {\n activationConstraint: touchConstraint,\n }),\n useSensor(KeyboardSensor)\n )\n}\n\nexport function getSensorConfig(config: SensorConfig = {}): SensorConfigResult {\n const {\n activationDistance = DEFAULT_ACTIVATION_DISTANCE,\n activationDelay,\n tolerance,\n } = config\n\n let activationConstraint: PointerActivationConstraint\n\n if (activationDelay !== undefined) {\n activationConstraint = {\n delay: activationDelay,\n tolerance: tolerance ?? 5,\n }\n } else {\n activationConstraint = {\n distance: activationDistance,\n }\n }\n\n return {\n pointer: { activationConstraint },\n touch: { activationConstraint },\n }\n}\n","'use client'\n\nimport { useDroppable } from '@dnd-kit/core'\nimport { memo, useCallback, useEffect } from 'react'\nimport { extractUUID } from '@dnd-block-tree/core'\n\nexport interface DropZoneProps {\n id: string\n parentId: string | null\n onHover: (zoneId: string, parentId: string | null) => void\n activeId: string | null\n className?: string\n activeClassName?: string\n height?: number\n}\n\nfunction DropZoneComponent({\n id,\n parentId,\n onHover,\n activeId,\n className = 'h-1 rounded transition-colors',\n activeClassName = 'bg-blue-500',\n height = 4,\n}: DropZoneProps) {\n const { setNodeRef, isOver, active } = useDroppable({ id })\n\n const handleInternalHover = useCallback(() => {\n onHover(id, parentId)\n }, [onHover, id, parentId])\n\n useEffect(() => {\n if (isOver) handleInternalHover()\n }, [isOver, handleInternalHover])\n\n // Only hide \"into-\" zones for the active block (can't drop a container into itself)\n const zoneBlockId = extractUUID(id)\n const isIntoZone = id.startsWith('into-')\n if (isIntoZone && active?.id && zoneBlockId === String(active.id)) return null\n if (isIntoZone && activeId && zoneBlockId === activeId) return null\n\n return (\n <div\n ref={setNodeRef}\n data-zone-id={id}\n data-parent-id={parentId ?? ''}\n style={{ height: isOver ? height * 2 : height }}\n className={`${className} ${isOver ? activeClassName : 'bg-transparent'}`}\n />\n )\n}\n\nexport const DropZone = memo(DropZoneComponent)\n","'use client'\n\nimport { Fragment, memo, type ReactNode } from 'react'\nimport { useDraggable } from '@dnd-kit/core'\nimport type { BaseBlock, CanDragFn, AnimationConfig } from '@dnd-block-tree/core'\nimport type { InternalRenderers, ContainerRendererProps } from '../types'\nimport { DropZone } from './DropZone'\n\nexport interface TreeRendererProps<T extends BaseBlock> {\n blocks: T[]\n blocksByParent: Map<string | null, T[]>\n parentId: string | null\n activeId: string | null\n expandedMap: Record<string, boolean>\n renderers: InternalRenderers<T>\n containerTypes: readonly string[]\n onHover: (zoneId: string, parentId: string | null) => void\n onToggleExpand: (id: string) => void\n depth?: number\n dropZoneClassName?: string\n dropZoneActiveClassName?: string\n indentClassName?: string\n rootClassName?: string\n canDrag?: CanDragFn<T>\n /** Preview position info - where to show the ghost */\n previewPosition?: { parentId: string | null; index: number } | null\n /** The dragged block for rendering preview ghost */\n draggedBlock?: T | null\n /** Currently focused block ID for keyboard navigation */\n focusedId?: string | null\n /** Currently selected block IDs for multi-select */\n selectedIds?: Set<string>\n /** Click handler for multi-select */\n onBlockClick?: (blockId: string, event: React.MouseEvent) => void\n /** Animation configuration */\n animation?: AnimationConfig\n /** When virtual scrolling is active, only render blocks in this set */\n virtualVisibleIds?: Set<string> | null\n}\n\n/**\n * Ghost preview wrapper -- renders in normal document flow so the user sees\n * an accurate preview of the final layout. Collision detection uses\n * snapshotted zone rects to avoid feedback loops from the ghost's displacement.\n */\nfunction GhostPreview({ children }: { children: ReactNode }) {\n return (\n <div data-dnd-ghost className=\"opacity-50\" style={{ pointerEvents: 'none' }}>\n {children}\n </div>\n )\n}\n\n/**\n * Draggable wrapper for individual blocks\n */\nfunction DraggableBlock<T extends BaseBlock>({\n block,\n children,\n disabled,\n focusedId,\n isSelected,\n onBlockClick,\n isContainer,\n isExpanded,\n depth,\n posInSet,\n setSize,\n}: {\n block: T\n children: (props: { isDragging: boolean }) => ReactNode\n disabled?: boolean\n focusedId?: string | null\n isSelected?: boolean\n onBlockClick?: (blockId: string, event: React.MouseEvent) => void\n isContainer?: boolean\n isExpanded?: boolean\n depth: number\n posInSet: number\n setSize: number\n}) {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id: block.id,\n disabled,\n })\n\n const isFocused = focusedId === block.id\n\n return (\n <div\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n data-block-id={block.id}\n tabIndex={isFocused ? 0 : -1}\n onClick={onBlockClick ? (e: React.MouseEvent) => onBlockClick(block.id, e) : undefined}\n data-selected={isSelected || undefined}\n style={{ touchAction: 'none', minWidth: 0, outline: 'none' }}\n role=\"treeitem\"\n aria-level={depth + 1}\n aria-posinset={posInSet}\n aria-setsize={setSize}\n aria-expanded={isContainer ? isExpanded : undefined}\n aria-selected={isSelected ?? undefined}\n >\n {children({ isDragging })}\n </div>\n )\n}\n\n/**\n * Recursive tree renderer with smart drop zones\n */\nfunction TreeRendererInner<T extends BaseBlock>({\n blocks,\n blocksByParent,\n parentId,\n activeId,\n expandedMap,\n renderers,\n containerTypes,\n onHover,\n onToggleExpand,\n depth = 0,\n dropZoneClassName,\n dropZoneActiveClassName,\n indentClassName = 'ml-6 border-l border-gray-200 pl-4',\n rootClassName = 'flex flex-col gap-1',\n canDrag,\n previewPosition,\n draggedBlock,\n focusedId,\n selectedIds,\n onBlockClick,\n animation,\n virtualVisibleIds,\n}: TreeRendererProps<T>) {\n const items = blocksByParent.get(parentId) ?? []\n\n // Always filter out the dragged block - it appears in drag overlay\n let filteredBlocks = items.filter(block => block.id !== activeId)\n\n // When virtual scrolling is active at root level, only render visible blocks\n if (virtualVisibleIds && depth === 0) {\n filteredBlocks = filteredBlocks.filter(block => virtualVisibleIds.has(block.id))\n }\n\n // Check if preview ghost should appear in this container\n const showGhostHere = previewPosition?.parentId === parentId && draggedBlock\n\n const containerClass = depth === 0 ? rootClassName : indentClassName\n\n return (\n <div className={containerClass} style={{ minWidth: 0 }}>\n {/* Position-0 zone: always at the start, stable regardless of which block is dragged */}\n <DropZone\n id={parentId ? `into-${parentId}` : 'root-start'}\n parentId={parentId}\n onHover={onHover}\n activeId={activeId}\n className={dropZoneClassName}\n activeClassName={dropZoneActiveClassName}\n />\n\n {filteredBlocks.map((block, index) => {\n const isContainer = containerTypes.includes(block.type)\n const isExpanded = expandedMap[block.id] !== false // Default to expanded\n const Renderer = renderers[block.type as keyof typeof renderers]\n const isDragDisabled = canDrag ? !canDrag(block) : false\n\n // Check if ghost should appear BEFORE this block\n const ghostBeforeThis = showGhostHere && previewPosition!.index === index\n\n // Use original items to determine if this is the last block (for stable zones)\n const originalIndex = items.findIndex(b => b.id === block.id)\n const isLastInOriginal = originalIndex === items.length - 1\n\n if (!Renderer) {\n console.warn(`No renderer found for block type: ${block.type}`)\n return null\n }\n\n const GhostRenderer = draggedBlock ? renderers[draggedBlock.type as keyof typeof renderers] : null\n\n return (\n <Fragment key={block.id}>\n {/* Ghost preview before this block */}\n {ghostBeforeThis && GhostRenderer && (\n <GhostPreview>\n {GhostRenderer({\n block: draggedBlock as T & { type: typeof draggedBlock.type },\n isDragging: true,\n depth,\n })}\n </GhostPreview>\n )}\n\n {/* Render the block */}\n <DraggableBlock\n block={block}\n disabled={isDragDisabled}\n focusedId={focusedId}\n isSelected={selectedIds?.has(block.id)}\n onBlockClick={onBlockClick}\n isContainer={isContainer}\n isExpanded={isExpanded}\n depth={depth}\n posInSet={originalIndex + 1}\n setSize={items.length}\n >\n {({ isDragging }) => {\n if (isContainer) {\n const animated = animation?.expandDuration && animation.expandDuration > 0\n const easing = animation?.easing ?? 'ease'\n const duration = animation?.expandDuration ?? 0\n\n let childContent: ReactNode\n\n if (animated) {\n // CSS grid trick: grid-template-rows transitions from 1fr to 0fr\n childContent = (\n <div\n style={{\n display: 'grid',\n gridTemplateRows: isExpanded ? '1fr' : '0fr',\n transition: `grid-template-rows ${duration}ms ${easing}`,\n }}\n >\n <div\n style={{\n overflow: 'hidden',\n minHeight: 0,\n opacity: isExpanded ? 1 : 0,\n transition: `opacity ${duration}ms ${easing}`,\n }}\n >\n <TreeRenderer\n blocks={blocks}\n blocksByParent={blocksByParent}\n parentId={block.id}\n activeId={activeId}\n expandedMap={expandedMap}\n renderers={renderers}\n containerTypes={containerTypes}\n onHover={onHover}\n onToggleExpand={onToggleExpand}\n depth={depth + 1}\n dropZoneClassName={dropZoneClassName}\n dropZoneActiveClassName={dropZoneActiveClassName}\n indentClassName={indentClassName}\n rootClassName={rootClassName}\n canDrag={canDrag}\n previewPosition={previewPosition}\n draggedBlock={draggedBlock}\n focusedId={focusedId}\n selectedIds={selectedIds}\n onBlockClick={onBlockClick}\n animation={animation}\n virtualVisibleIds={virtualVisibleIds}\n />\n </div>\n </div>\n )\n } else {\n childContent = isExpanded ? (\n <TreeRenderer\n blocks={blocks}\n blocksByParent={blocksByParent}\n parentId={block.id}\n activeId={activeId}\n expandedMap={expandedMap}\n renderers={renderers}\n containerTypes={containerTypes}\n onHover={onHover}\n onToggleExpand={onToggleExpand}\n depth={depth + 1}\n dropZoneClassName={dropZoneClassName}\n dropZoneActiveClassName={dropZoneActiveClassName}\n indentClassName={indentClassName}\n rootClassName={rootClassName}\n canDrag={canDrag}\n previewPosition={previewPosition}\n draggedBlock={draggedBlock}\n focusedId={focusedId}\n selectedIds={selectedIds}\n onBlockClick={onBlockClick}\n animation={animation}\n virtualVisibleIds={virtualVisibleIds}\n />\n ) : null\n }\n\n return Renderer({\n block: block as T & { type: typeof block.type },\n children: childContent,\n isDragging,\n depth,\n isExpanded,\n onToggleExpand: () => onToggleExpand(block.id),\n } as ContainerRendererProps<T & { type: typeof block.type }>)\n }\n\n return Renderer({\n block: block as T & { type: typeof block.type },\n isDragging,\n depth,\n })\n }}\n </DraggableBlock>\n\n {/* After-zone for non-last blocks (end-zone handles last position) */}\n {!isLastInOriginal && (\n <DropZone\n id={`after-${block.id}`}\n parentId={block.parentId}\n onHover={onHover}\n activeId={activeId}\n className={dropZoneClassName}\n activeClassName={dropZoneActiveClassName}\n />\n )}\n </Fragment>\n )\n })}\n\n {/* Ghost at end of container */}\n {showGhostHere && previewPosition!.index >= filteredBlocks.length && draggedBlock && (() => {\n const GhostRenderer = renderers[draggedBlock.type as keyof typeof renderers]\n return GhostRenderer ? (\n <GhostPreview>\n {GhostRenderer({\n block: draggedBlock as T & { type: typeof draggedBlock.type },\n isDragging: true,\n depth,\n })}\n </GhostPreview>\n ) : null\n })()}\n\n {/* End zone: for dropping at the last position in a container */}\n <DropZone\n id={parentId ? `end-${parentId}` : 'root-end'}\n parentId={parentId}\n onHover={onHover}\n activeId={activeId}\n className={dropZoneClassName}\n activeClassName={dropZoneActiveClassName}\n />\n </div>\n )\n}\n\nexport const TreeRenderer = memo(TreeRendererInner) as typeof TreeRendererInner\n","'use client'\n\nimport { DragOverlay as DndKitDragOverlay } from '@dnd-kit/core'\nimport type { ReactNode } from 'react'\nimport type { BaseBlock } from '@dnd-block-tree/core'\n\nexport interface DragOverlayProps<T extends BaseBlock> {\n activeBlock: T | null\n children?: (block: T) => ReactNode\n /** Number of selected items being dragged (for multi-select badge) */\n selectedCount?: number\n}\n\nexport function DragOverlay<T extends BaseBlock>({\n activeBlock,\n children,\n selectedCount = 0,\n}: DragOverlayProps<T>) {\n const showBadge = selectedCount > 1\n return (\n <DndKitDragOverlay>\n {activeBlock && (\n <div style={{ position: 'relative' }}>\n {showBadge && (\n <>\n {/* Stacked card effect */}\n <div\n style={{\n position: 'absolute',\n top: 4,\n left: 4,\n right: -4,\n bottom: -4,\n borderRadius: 8,\n border: '1px solid #d1d5db',\n background: '#f3f4f6',\n opacity: 0.6,\n zIndex: -1,\n }}\n />\n {/* Count badge */}\n <div\n style={{\n position: 'absolute',\n top: -8,\n right: -8,\n background: '#3b82f6',\n color: 'white',\n borderRadius: '50%',\n width: 22,\n height: 22,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 11,\n fontWeight: 700,\n zIndex: 10,\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\n }}\n >\n {selectedCount}\n </div>\n </>\n )}\n {children ? (\n children(activeBlock)\n ) : (\n <div className=\"bg-white border border-gray-300 shadow-md rounded-md p-3 text-sm w-64 pointer-events-none\">\n <div className=\"text-gray-500 uppercase text-xs tracking-wide mb-1\">\n {activeBlock.type}\n </div>\n <div className=\"font-semibold text-gray-800\">\n Block {activeBlock.id.slice(0, 8)}\n </div>\n </div>\n )}\n </div>\n )}\n </DndKitDragOverlay>\n )\n}\n","'use client'\n\nimport { useCallback, useRef, useReducer, useMemo, useEffect, useState, type ReactNode, type KeyboardEvent } from 'react'\nimport {\n DndContext,\n DragStartEvent as DndKitDragStartEvent,\n DragEndEvent as DndKitDragEndEvent,\n DragOverEvent,\n DragMoveEvent as DndKitDragMoveEvent,\n DragCancelEvent,\n} from '@dnd-kit/core'\nimport type {\n BaseBlock,\n BlockIndex,\n BlockTreeCallbacks,\n BlockPosition,\n DragStartEvent,\n DragMoveEvent,\n DragEndEvent,\n BlockMoveEvent,\n MoveOperation,\n ExpandChangeEvent,\n HoverChangeEvent,\n DropZoneType,\n Rect,\n SnapshotRectsRef,\n} from '@dnd-block-tree/core'\nimport {\n getDropZoneType,\n extractBlockId,\n createStickyCollision,\n computeNormalizedIndex,\n reparentBlockIndex,\n reparentMultipleBlocks,\n buildOrderedBlocks,\n debounce,\n} from '@dnd-block-tree/core'\nimport type { BlockRenderers, InternalRenderers, BlockTreeCustomization } from '../types'\nimport { useConfiguredSensors } from '../hooks/useConfiguredSensors'\nimport { adaptCollisionDetection } from '../bridge'\nimport { triggerHaptic } from '../utils/haptic'\nimport { TreeRenderer } from './TreeRenderer'\nimport { DragOverlay } from './DragOverlay'\n\nexport interface BlockTreeProps<\n T extends BaseBlock,\n C extends readonly T['type'][] = readonly T['type'][]\n> extends BlockTreeCallbacks<T>, BlockTreeCustomization<T> {\n /** Current blocks array */\n blocks: T[]\n /** Block renderers for each type */\n renderers: BlockRenderers<T, C>\n /** Block types that can have children */\n containerTypes?: C\n /** Called when blocks are reordered */\n onChange?: (blocks: T[]) => void\n /** Custom drag overlay renderer */\n dragOverlay?: (block: T) => ReactNode\n /** Activation distance in pixels (default: 8) */\n activationDistance?: number\n /** Preview debounce in ms (default: 150) */\n previewDebounce?: number\n /** Root container className */\n className?: string\n /** Drop zone className */\n dropZoneClassName?: string\n /** Active drop zone className */\n dropZoneActiveClassName?: string\n /** Indent className for nested items */\n indentClassName?: string\n /** Show live preview of drop position during drag (default: true) */\n showDropPreview?: boolean\n /** Enable keyboard navigation with arrow keys (default: false) */\n keyboardNavigation?: boolean\n /** Enable multi-select with Cmd/Ctrl+Click and Shift+Click (default: false) */\n multiSelect?: boolean\n /** Externally-controlled selected IDs (for multi-select) */\n selectedIds?: Set<string>\n /** Called when selection changes (for multi-select) */\n onSelectionChange?: (selectedIds: Set<string>) => void\n /** Enable virtual scrolling for large trees (fixed item height only) */\n virtualize?: {\n /** Fixed height of each item in pixels */\n itemHeight: number\n /** Number of extra items to render outside the visible range (default: 5) */\n overscan?: number\n }\n}\n\ninterface InternalState<T extends BaseBlock> {\n activeId: string | null\n hoverZone: string | null\n expandedMap: Record<string, boolean>\n virtualState: BlockIndex<T> | null\n isDragging: boolean\n}\n\nfunction getBlockPosition<T extends BaseBlock>(\n blocks: T[],\n blockId: string\n): BlockPosition {\n const block = blocks.find(b => b.id === blockId)\n if (!block) return { parentId: null, index: 0 }\n\n const siblings = blocks.filter(b => b.parentId === block.parentId)\n const index = siblings.findIndex(b => b.id === blockId)\n return { parentId: block.parentId, index }\n}\n\nfunction computeInitialExpanded<T extends BaseBlock>(\n blocks: T[],\n containerTypes: readonly string[],\n initialExpanded: string[] | 'all' | 'none' | undefined\n): Record<string, boolean> {\n if (initialExpanded === 'none') {\n const expandedMap: Record<string, boolean> = {}\n const containers = blocks.filter(b => containerTypes.includes(b.type))\n for (const container of containers) {\n expandedMap[container.id] = false\n }\n return expandedMap\n }\n\n const expandedMap: Record<string, boolean> = {}\n const containers = blocks.filter(b => containerTypes.includes(b.type))\n\n if (initialExpanded === 'all' || initialExpanded === undefined) {\n for (const container of containers) {\n expandedMap[container.id] = true\n }\n } else if (Array.isArray(initialExpanded)) {\n for (const id of initialExpanded) {\n expandedMap[id] = true\n }\n }\n\n return expandedMap\n}\n\nfunction getVisibleBlockIds<T extends BaseBlock>(\n blocksByParent: Map<string | null, T[]>,\n containerTypes: readonly string[],\n expandedMap: Record<string, boolean>,\n parentId: string | null = null\n): string[] {\n const result: string[] = []\n const children = blocksByParent.get(parentId) ?? []\n for (const block of children) {\n result.push(block.id)\n if (containerTypes.includes(block.type) && expandedMap[block.id] !== false) {\n result.push(...getVisibleBlockIds(blocksByParent, containerTypes, expandedMap, block.id))\n }\n }\n return result\n}\n\nexport function BlockTree<\n T extends BaseBlock,\n C extends readonly T['type'][] = readonly T['type'][]\n>({\n blocks,\n renderers,\n containerTypes = [] as unknown as C,\n onChange,\n dragOverlay,\n activationDistance = 8,\n previewDebounce = 150,\n className = 'flex flex-col gap-1',\n dropZoneClassName,\n dropZoneActiveClassName,\n indentClassName,\n showDropPreview = true,\n // Callbacks\n onDragStart,\n onDragMove,\n onDragEnd,\n onDragCancel,\n onBeforeMove,\n onBlockMove,\n onExpandChange,\n onHoverChange,\n // Customization\n canDrag,\n canDrop,\n collisionDetection,\n sensors: sensorConfig,\n animation,\n initialExpanded,\n orderingStrategy = 'integer',\n maxDepth,\n keyboardNavigation = false,\n multiSelect = false,\n selectedIds: externalSelectedIds,\n onSelectionChange,\n virtualize,\n}: BlockTreeProps<T, C>) {\n const sensors = useConfiguredSensors({\n activationDistance: sensorConfig?.activationDistance ?? activationDistance,\n activationDelay: sensorConfig?.activationDelay,\n tolerance: sensorConfig?.tolerance,\n longPressDelay: sensorConfig?.longPressDelay,\n })\n\n const initialExpandedMap = useMemo(\n () => computeInitialExpanded(blocks, containerTypes, initialExpanded),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n\n const stateRef = useRef<InternalState<T>>({\n activeId: null,\n hoverZone: null,\n expandedMap: initialExpandedMap,\n virtualState: null,\n isDragging: false,\n })\n\n const initialBlocksRef = useRef<T[]>([])\n const cachedReorderRef = useRef<{ targetId: string; reorderedBlocks: T[] } | null>(null)\n const fromPositionRef = useRef<BlockPosition | null>(null)\n const draggedIdsRef = useRef<string[]>([])\n\n // Snapshotted drop zone rects -- collision detection reads from this instead\n // of live DOM to prevent feedback loops caused by in-flow ghost previews.\n const snapshotRectsRef = useRef<Map<string, Rect> | null>(null) as SnapshotRectsRef\n const needsResnapshot = useRef(false)\n\n // Sticky collision with hysteresis (core's createStickyCollision adapted to dnd-kit)\n const stickyCollisionRef = useRef(\n adaptCollisionDetection(createStickyCollision(20, snapshotRectsRef))\n )\n // Keep a direct ref to the core detector for reset\n const coreStickyRef = useRef(createStickyCollision(20, snapshotRectsRef))\n\n // Snapshot all drop zone rects from the DOM\n const snapshotZoneRects = useCallback(() => {\n const root = rootRef.current\n if (!root) return\n const zones = root.querySelectorAll('[data-zone-id]')\n const map = new Map<string, Rect>()\n zones.forEach(el => {\n const id = el.getAttribute('data-zone-id')\n if (id) map.set(id, el.getBoundingClientRect())\n })\n snapshotRectsRef.current = map\n }, [])\n\n const [, forceRender] = useReducer((x: number) => x + 1, 0)\n\n const debouncedSetVirtual = useRef(\n debounce((newBlocks: T[] | null) => {\n if (newBlocks) {\n stateRef.current.virtualState = computeNormalizedIndex(newBlocks)\n } else {\n stateRef.current.virtualState = null\n }\n needsResnapshot.current = true\n forceRender()\n }, previewDebounce)\n ).current\n\n const debouncedDragMove = useRef(\n debounce((event: DragMoveEvent<T>) => {\n onDragMove?.(event)\n }, 50)\n ).current\n\n const originalIndex = useMemo(\n () => computeNormalizedIndex(blocks, orderingStrategy),\n [blocks, orderingStrategy]\n )\n\n const blocksByParent = useMemo(() => {\n const map = new Map<string | null, T[]>()\n for (const [parentId, ids] of originalIndex.byParent.entries()) {\n map.set(parentId, ids.map(id => originalIndex.byId.get(id)!).filter(Boolean))\n }\n return map\n }, [originalIndex])\n\n // --- Keyboard navigation ---\n const focusedIdRef = useRef<string | null>(null)\n const rootRef = useRef<HTMLDivElement>(null)\n const lastClickedIdRef = useRef<string | null>(null)\n\n const [internalSelectedIds, setInternalSelectedIds] = useReducer(\n (_: Set<string>, next: Set<string>) => next,\n new Set<string>()\n )\n const selectedIds = externalSelectedIds ?? internalSelectedIds\n const setSelectedIds = useCallback((ids: Set<string>) => {\n if (onSelectionChange) {\n onSelectionChange(ids)\n } else {\n setInternalSelectedIds(ids)\n }\n }, [onSelectionChange])\n\n const visibleBlockIds = useMemo(\n () => getVisibleBlockIds(blocksByParent, containerTypes, stateRef.current.expandedMap),\n [blocksByParent, containerTypes, stateRef.current.expandedMap]\n )\n\n const focusBlock = useCallback((id: string | null) => {\n focusedIdRef.current = id\n if (id && rootRef.current) {\n const el = rootRef.current.querySelector(`[data-block-id=\"${id}\"]`) as HTMLElement | null\n el?.focus()\n }\n forceRender()\n }, [])\n\n const toggleExpandRef = useRef<(id: string) => void>(() => {})\n\n const handleKeyDown = useCallback((event: KeyboardEvent<HTMLDivElement>) => {\n if (!keyboardNavigation) return\n\n const currentId = focusedIdRef.current\n const currentIndex = currentId ? visibleBlockIds.indexOf(currentId) : -1\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault()\n const nextIndex = currentIndex < visibleBlockIds.length - 1 ? currentIndex + 1 : currentIndex\n focusBlock(visibleBlockIds[nextIndex] ?? null)\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : 0\n focusBlock(visibleBlockIds[prevIndex] ?? null)\n break\n }\n case 'ArrowRight': {\n event.preventDefault()\n if (currentId) {\n const block = originalIndex.byId.get(currentId)\n if (block && containerTypes.includes(block.type)) {\n if (stateRef.current.expandedMap[currentId] === false) {\n toggleExpandRef.current(currentId)\n } else {\n const children = blocksByParent.get(currentId) ?? []\n if (children.length > 0) focusBlock(children[0].id)\n }\n }\n }\n break\n }\n case 'ArrowLeft': {\n event.preventDefault()\n if (currentId) {\n const block = originalIndex.byId.get(currentId)\n if (block && containerTypes.includes(block.type) && stateRef.current.expandedMap[currentId] !== false) {\n toggleExpandRef.current(currentId)\n } else if (block?.parentId) {\n focusBlock(block.parentId)\n }\n }\n break\n }\n case 'Enter':\n case ' ': {\n event.preventDefault()\n if (currentId) {\n const block = originalIndex.byId.get(currentId)\n if (block && containerTypes.includes(block.type)) {\n toggleExpandRef.current(currentId)\n }\n }\n break\n }\n case 'Home': {\n event.preventDefault()\n if (visibleBlockIds.length > 0) focusBlock(visibleBlockIds[0])\n break\n }\n case 'End': {\n event.preventDefault()\n if (visibleBlockIds.length > 0) focusBlock(visibleBlockIds[visibleBlockIds.length - 1])\n break\n }\n }\n }, [keyboardNavigation, visibleBlockIds, focusBlock, originalIndex, containerTypes, blocksByParent])\n\n const handleBlockClick = useCallback((blockId: string, event: React.MouseEvent) => {\n if (!multiSelect) return\n\n if (event.metaKey || event.ctrlKey) {\n const next = new Set(selectedIds)\n if (next.has(blockId)) {\n next.delete(blockId)\n } else {\n next.add(blockId)\n }\n setSelectedIds(next)\n } else if (event.shiftKey && lastClickedIdRef.current) {\n const startIdx = visibleBlockIds.indexOf(lastClickedIdRef.current)\n const endIdx = visibleBlockIds.indexOf(blockId)\n if (startIdx !== -1 && endIdx !== -1) {\n const [from, to] = startIdx < endIdx ? [startIdx, endIdx] : [endIdx, startIdx]\n const next = new Set(selectedIds)\n for (let i = from; i <= to; i++) {\n next.add(visibleBlockIds[i])\n }\n setSelectedIds(next)\n }\n } else {\n setSelectedIds(new Set([blockId]))\n }\n lastClickedIdRef.current = blockId\n }, [multiSelect, selectedIds, setSelectedIds, visibleBlockIds])\n\n // Re-snapshot zone rects after DOM settles\n useEffect(() => {\n if (!needsResnapshot.current || !stateRef.current.isDragging) return\n needsResnapshot.current = false\n requestAnimationFrame(() => {\n snapshotZoneRects()\n })\n })\n\n useEffect(() => {\n if (!keyboardNavigation || !focusedIdRef.current || !rootRef.current) return\n const el = rootRef.current.querySelector(`[data-block-id=\"${focusedIdRef.current}\"]`) as HTMLElement | null\n el?.focus()\n })\n\n const previewPosition = useMemo(() => {\n if (!showDropPreview || !stateRef.current.virtualState || !stateRef.current.activeId) {\n return null\n }\n const virtualIndex = stateRef.current.virtualState\n const activeId = stateRef.current.activeId\n const block = virtualIndex.byId.get(activeId)\n if (!block) return null\n\n const parentId = block.parentId ?? null\n const siblings = virtualIndex.byParent.get(parentId) ?? []\n const index = siblings.indexOf(activeId)\n return { parentId, index }\n }, [showDropPreview, stateRef.current.virtualState, stateRef.current.activeId])\n\n const activeBlock = stateRef.current.activeId\n ? originalIndex.byId.get(stateRef.current.activeId) ?? null\n : null\n\n const draggedBlock = activeBlock\n\n const handleDragStart = useCallback((event: DndKitDragStartEvent) => {\n const id = String(event.active.id)\n const block = blocks.find(b => b.id === id)\n\n if (!block) return\n\n if (canDrag && !canDrag(block)) {\n return\n }\n\n const dragEvent: DragStartEvent<T> = {\n block,\n blockId: id,\n }\n\n const result = onDragStart?.(dragEvent)\n if (result === false) {\n return\n }\n\n fromPositionRef.current = getBlockPosition(blocks, id)\n\n // Reset sticky collision for fresh drag\n coreStickyRef.current.reset()\n\n if (multiSelect && selectedIds.has(id)) {\n draggedIdsRef.current = visibleBlockIds.filter(vid => selectedIds.has(vid))\n } else {\n draggedIdsRef.current = [id]\n if (multiSelect) {\n setSelectedIds(new Set([id]))\n }\n }\n\n if (sensorConfig?.hapticFeedback) {\n triggerHaptic()\n }\n\n stateRef.current.activeId = id\n stateRef.current.isDragging = true\n initialBlocksRef.current = [...blocks]\n cachedReorderRef.current = null\n needsResnapshot.current = true\n forceRender()\n }, [blocks, canDrag, onDragStart, multiSelect, selectedIds, setSelectedIds, visibleBlockIds, sensorConfig?.hapticFeedback])\n\n const handleDragMove = useCallback((event: DndKitDragMoveEvent) => {\n if (!onDragMove) return\n\n const id = stateRef.current.activeId\n if (!id) return\n\n const block = blocks.find(b => b.id === id)\n if (!block) return\n\n const moveEvent: DragMoveEvent<T> = {\n block,\n blockId: id,\n overZone: stateRef.current.hoverZone,\n coordinates: {\n x: event.delta.x,\n y: event.delta.y,\n },\n }\n\n debouncedDragMove(moveEvent)\n }, [blocks, onDragMove, debouncedDragMove])\n\n const handleDragOver = useCallback((event: DragOverEvent) => {\n if (!event.over) return\n\n const targetZone = String(event.over.id)\n const activeId = stateRef.current.activeId\n\n if (!activeId) return\n\n const activeBlock = blocks.find(b => b.id === activeId)\n const targetBlockId = extractBlockId(targetZone)\n const targetBlock = blocks.find(b => b.id === targetBlockId) ?? null\n\n if (canDrop && activeBlock && !canDrop(activeBlock, targetZone, targetBlock)) {\n return\n }\n\n if (maxDepth != null && activeBlock) {\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const testResult = reparentBlockIndex(baseIndex, activeId, targetZone, containerTypes, orderingStrategy, maxDepth)\n if (testResult === baseIndex) return\n }\n\n if (stateRef.current.hoverZone !== targetZone) {\n const zoneType: DropZoneType = getDropZoneType(targetZone)\n\n const hoverEvent: HoverChangeEvent<T> = {\n zoneId: targetZone,\n zoneType,\n targetBlock,\n }\n\n onHoverChange?.(hoverEvent)\n }\n\n stateRef.current.hoverZone = targetZone\n\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const ids = draggedIdsRef.current\n const updatedIndex = ids.length > 1\n ? reparentMultipleBlocks(baseIndex, ids, targetZone, containerTypes, orderingStrategy, maxDepth)\n : reparentBlockIndex(baseIndex, activeId, targetZone, containerTypes, orderingStrategy, maxDepth)\n const orderedBlocks = buildOrderedBlocks(updatedIndex, containerTypes, orderingStrategy)\n\n cachedReorderRef.current = { targetId: targetZone, reorderedBlocks: orderedBlocks }\n\n if (showDropPreview) {\n debouncedSetVirtual(orderedBlocks)\n }\n }, [blocks, containerTypes, debouncedSetVirtual, canDrop, onHoverChange, showDropPreview, maxDepth, orderingStrategy])\n\n const handleDragEnd = useCallback((_event: DndKitDragEndEvent) => {\n debouncedSetVirtual.cancel()\n debouncedDragMove.cancel()\n\n let cached = cachedReorderRef.current\n const activeId = stateRef.current.activeId\n const activeBlockData = activeId ? blocks.find(b => b.id === activeId) : null\n\n if (cached && activeBlockData && fromPositionRef.current && onBeforeMove) {\n const operation: MoveOperation<T> = {\n block: activeBlockData,\n from: fromPositionRef.current,\n targetZone: cached.targetId,\n }\n const result = onBeforeMove(operation)\n\n if (result === false) {\n stateRef.current.activeId = null\n stateRef.current.hoverZone = null\n stateRef.current.virtualState = null\n stateRef.current.isDragging = false\n cachedReorderRef.current = null\n initialBlocksRef.current = []\n fromPositionRef.current = null\n snapshotRectsRef.current = null\n forceRender()\n return\n }\n\n if (result && result.targetZone !== cached.targetId) {\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const ids = draggedIdsRef.current\n const updatedIndex = ids.length > 1\n ? reparentMultipleBlocks(baseIndex, ids, result.targetZone, containerTypes, orderingStrategy, maxDepth)\n : reparentBlockIndex(baseIndex, activeId!, result.targetZone, containerTypes, orderingStrategy, maxDepth)\n const reorderedBlocks = buildOrderedBlocks(updatedIndex, containerTypes, orderingStrategy)\n cached = { targetId: result.targetZone, reorderedBlocks }\n }\n }\n\n if (activeBlockData) {\n const endEvent: DragEndEvent<T> = {\n block: activeBlockData,\n blockId: activeId!,\n targetZone: cached?.targetId ?? null,\n cancelled: false,\n }\n onDragEnd?.(endEvent)\n }\n\n if (cached && activeBlockData && fromPositionRef.current) {\n const toPosition = getBlockPosition(cached.reorderedBlocks, activeBlockData.id)\n\n const moveEvent: BlockMoveEvent<T> = {\n block: activeBlockData,\n from: fromPositionRef.current,\n to: toPosition,\n blocks: cached.reorderedBlocks,\n movedIds: [...draggedIdsRef.current],\n }\n\n onBlockMove?.(moveEvent)\n }\n\n stateRef.current.activeId = null\n stateRef.current.hoverZone = null\n stateRef.current.virtualState = null\n stateRef.current.isDragging = false\n cachedReorderRef.current = null\n initialBlocksRef.current = []\n fromPositionRef.current = null\n draggedIdsRef.current = []\n snapshotRectsRef.current = null\n\n if (cached && onChange) {\n onChange(cached.reorderedBlocks)\n }\n\n forceRender()\n }, [blocks, containerTypes, orderingStrategy, debouncedSetVirtual, debouncedDragMove, onChange, onDragEnd, onBlockMove, onBeforeMove])\n\n const handleDragCancel = useCallback((_event: DragCancelEvent) => {\n debouncedSetVirtual.cancel()\n debouncedDragMove.cancel()\n\n const activeId = stateRef.current.activeId\n const activeBlockData = activeId ? blocks.find(b => b.id === activeId) : null\n\n if (activeBlockData) {\n const cancelEvent: DragEndEvent<T> = {\n block: activeBlockData,\n blockId: activeId!,\n targetZone: null,\n cancelled: true,\n }\n onDragCancel?.(cancelEvent)\n onDragEnd?.(cancelEvent)\n }\n\n stateRef.current.activeId = null\n stateRef.current.hoverZone = null\n stateRef.current.virtualState = null\n stateRef.current.isDragging = false\n cachedReorderRef.current = null\n initialBlocksRef.current = []\n fromPositionRef.current = null\n draggedIdsRef.current = []\n snapshotRectsRef.current = null\n\n forceRender()\n }, [blocks, debouncedSetVirtual, debouncedDragMove, onDragCancel, onDragEnd])\n\n const handleHover = useCallback((zoneId: string, _parentId: string | null) => {\n const activeId = stateRef.current.activeId\n if (!activeId) return\n\n const activeBlockData = blocks.find(b => b.id === activeId)\n const targetBlockId = extractBlockId(zoneId)\n const targetBlock = blocks.find(b => b.id === targetBlockId) ?? null\n\n if (canDrop && activeBlockData && !canDrop(activeBlockData, zoneId, targetBlock)) {\n return\n }\n\n if (maxDepth != null && activeBlockData) {\n const baseIdx = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const testResult = reparentBlockIndex(baseIdx, activeId, zoneId, containerTypes, orderingStrategy, maxDepth)\n if (testResult === baseIdx) return\n }\n\n if (stateRef.current.hoverZone !== zoneId) {\n const zoneType: DropZoneType = getDropZoneType(zoneId)\n\n const hoverEvent: HoverChangeEvent<T> = {\n zoneId,\n zoneType,\n targetBlock,\n }\n\n onHoverChange?.(hoverEvent)\n }\n\n stateRef.current.hoverZone = zoneId\n\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current, orderingStrategy)\n const ids = draggedIdsRef.current\n const updatedIndex = ids.length > 1\n ? reparentMultipleBlocks(baseIndex, ids, zoneId, containerTypes, orderingStrategy, maxDepth)\n : reparentBlockIndex(baseIndex, activeId, zoneId, containerTypes, orderingStrategy, maxDepth)\n const orderedBlocks = buildOrderedBlocks(updatedIndex, containerTypes, orderingStrategy)\n\n cachedReorderRef.current = { targetId: zoneId, reorderedBlocks: orderedBlocks }\n\n if (showDropPreview) {\n debouncedSetVirtual(orderedBlocks)\n }\n }, [blocks, containerTypes, orderingStrategy, debouncedSetVirtual, canDrop, onHoverChange, showDropPreview, maxDepth])\n\n const handleToggleExpand = useCallback((id: string) => {\n const newExpanded = stateRef.current.expandedMap[id] === false\n stateRef.current.expandedMap = {\n ...stateRef.current.expandedMap,\n [id]: newExpanded,\n }\n\n const block = blocks.find(b => b.id === id)\n if (block && onExpandChange) {\n const expandEvent: ExpandChangeEvent<T> = {\n block,\n blockId: id,\n expanded: newExpanded,\n }\n onExpandChange(expandEvent)\n }\n\n forceRender()\n }, [blocks, onExpandChange])\n\n toggleExpandRef.current = handleToggleExpand\n\n // --- Virtual scrolling ---\n const virtualContainerRef = useRef<HTMLDivElement>(null)\n const [virtualScroll, setVirtualScroll] = useState({ scrollTop: 0, clientHeight: 0 })\n\n useEffect(() => {\n if (!virtualize) return\n const el = virtualContainerRef.current\n if (!el) return\n\n setVirtualScroll({ scrollTop: el.scrollTop, clientHeight: el.clientHeight })\n\n const onScroll = () => {\n setVirtualScroll({ scrollTop: el.scrollTop, clientHeight: el.clientHeight })\n }\n el.addEventListener('scroll', onScroll, { passive: true })\n return () => el.removeEventListener('scroll', onScroll)\n }, [virtualize])\n\n const virtualResult = useMemo(() => {\n if (!virtualize) return null\n\n const { itemHeight, overscan = 5 } = virtualize\n const { scrollTop, clientHeight } = virtualScroll\n const totalHeight = visibleBlockIds.length * itemHeight\n const startRaw = Math.floor(scrollTop / itemHeight)\n const visibleCount = Math.ceil(clientHeight / itemHeight)\n const start = Math.max(0, startRaw - overscan)\n const end = Math.min(visibleBlockIds.length - 1, startRaw + visibleCount + overscan)\n const offsetY = start * itemHeight\n\n const visibleSet = new Set<string>()\n for (let i = start; i <= end; i++) {\n visibleSet.add(visibleBlockIds[i])\n }\n\n return { totalHeight, offsetY, visibleSet }\n }, [virtualize, virtualScroll, visibleBlockIds])\n\n // Resolve effective collision detection: user-provided dnd-kit detector,\n // or the internal sticky collision adapted from core\n const effectiveCollision = collisionDetection ?? stickyCollisionRef.current\n\n const treeContent = (\n <TreeRenderer\n blocks={blocks}\n blocksByParent={blocksByParent}\n parentId={null}\n activeId={stateRef.current.activeId}\n expandedMap={stateRef.current.expandedMap}\n renderers={renderers as InternalRenderers<T>}\n containerTypes={containerTypes}\n onHover={handleHover}\n onToggleExpand={handleToggleExpand}\n dropZoneClassName={dropZoneClassName}\n dropZoneActiveClassName={dropZoneActiveClassName}\n indentClassName={indentClassName}\n rootClassName={className}\n canDrag={canDrag}\n previewPosition={previewPosition}\n draggedBlock={draggedBlock}\n focusedId={keyboardNavigation ? focusedIdRef.current : undefined}\n selectedIds={multiSelect ? selectedIds : undefined}\n onBlockClick={multiSelect ? handleBlockClick : undefined}\n animation={animation}\n virtualVisibleIds={virtualResult?.visibleSet ?? null}\n />\n )\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={effectiveCollision}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n {virtualize ? (\n <div\n ref={(el) => {\n (virtualContainerRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n (rootRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n }}\n className={className}\n style={{ minWidth: 0, overflow: 'auto', position: 'relative' }}\n onKeyDown={keyboardNavigation ? handleKeyDown : undefined}\n role={keyboardNavigation ? 'tree' : undefined}\n >\n <div style={{ height: virtualResult!.totalHeight, position: 'relative' }}>\n <div style={{ position: 'absolute', top: virtualResult!.offsetY, left: 0, right: 0 }}>\n {treeContent}\n </div>\n </div>\n </div>\n ) : (\n <div\n ref={rootRef}\n className={className}\n style={{ minWidth: 0 }}\n onKeyDown={keyboardNavigation ? handleKeyDown : undefined}\n role={keyboardNavigation ? 'tree' : undefined}\n >\n {treeContent}\n </div>\n )}\n <DragOverlay activeBlock={activeBlock} selectedCount={multiSelect ? selectedIds.size : 0}>\n {dragOverlay}\n </DragOverlay>\n </DndContext>\n )\n}\n","'use client'\n\nimport { useState, useEffect, type ReactNode } from 'react'\nimport { BlockTree, type BlockTreeProps } from './BlockTree'\nimport type { BaseBlock } from '@dnd-block-tree/core'\n\nexport interface BlockTreeSSRProps<\n T extends BaseBlock,\n C extends readonly T['type'][] = readonly T['type'][]\n> extends BlockTreeProps<T, C> {\n /** Content to render before hydration completes (default: null) */\n fallback?: ReactNode\n}\n\nexport function BlockTreeSSR<\n T extends BaseBlock,\n C extends readonly T['type'][] = readonly T['type'][]\n>({ fallback = null, ...props }: BlockTreeSSRProps<T, C>) {\n const [mounted, setMounted] = useState(false)\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n if (!mounted) {\n return <>{fallback}</>\n }\n\n return <BlockTree<T, C> {...props} />\n}\n","'use client'\n\nimport {\n createContext,\n useContext,\n useReducer,\n useMemo,\n useCallback,\n type ReactNode,\n} from 'react'\nimport type {\n BaseBlock,\n BlockIndex,\n BlockAction,\n BlockStateContextValue,\n OrderingStrategy,\n} from '@dnd-block-tree/core'\nimport {\n blockReducer,\n computeNormalizedIndex,\n getDescendantIds,\n generateId,\n generateKeyBetween,\n} from '@dnd-block-tree/core'\nimport type { BlockStateProviderProps } from '../types'\n\n/**\n * Create block state context and hooks\n */\nexport function createBlockState<T extends BaseBlock>() {\n const BlockContext = createContext<BlockStateContextValue<T> | null>(null)\n\n function useBlockState() {\n const ctx = useContext(BlockContext)\n if (!ctx) throw new Error('useBlockState must be used inside BlockStateProvider')\n return ctx\n }\n\n function BlockStateProvider({\n children,\n initialBlocks = [],\n containerTypes = [],\n onChange,\n orderingStrategy = 'integer',\n maxDepth,\n onBlockAdd,\n onBlockDelete,\n }: BlockStateProviderProps<T>) {\n const reducerWithOptions = useCallback(\n (state: BlockIndex<T>, action: BlockAction<T>) =>\n blockReducer(state, action, containerTypes, orderingStrategy, maxDepth),\n [containerTypes, orderingStrategy, maxDepth]\n )\n\n const [state, dispatch] = useReducer(\n reducerWithOptions,\n computeNormalizedIndex(initialBlocks, orderingStrategy)\n )\n\n const blocks = useMemo(() => {\n const result: T[] = []\n const walk = (parentId: string | null) => {\n const children = state.byParent.get(parentId) ?? []\n for (let i = 0; i < children.length; i++) {\n const id = children[i]\n const b = state.byId.get(id)\n if (b) {\n result.push(orderingStrategy === 'fractional' ? b : { ...b, order: i })\n if (containerTypes.includes(b.type)) walk(b.id)\n }\n }\n }\n walk(null)\n return result\n }, [state, containerTypes, orderingStrategy])\n\n useMemo(() => {\n onChange?.(blocks)\n }, [blocks, onChange])\n\n const blockMap = useMemo(() => state.byId, [state])\n\n const childrenMap = useMemo(() => {\n const map = new Map<string | null, T[]>()\n for (const [parentId, ids] of state.byParent.entries()) {\n map.set(\n parentId,\n ids.map(id => state.byId.get(id)!).filter(Boolean)\n )\n }\n return map\n }, [state])\n\n const indexMap = useMemo(() => {\n const map = new Map<string, number>()\n for (const ids of state.byParent.values()) {\n ids.forEach((id, index) => {\n map.set(id, index)\n })\n }\n return map\n }, [state])\n\n const createItem = useCallback(\n (type: T['type'], parentId: string | null = null): T => {\n const siblings = state.byParent.get(parentId) ?? []\n let order: number | string = siblings.length\n if (orderingStrategy === 'fractional') {\n const lastId = siblings[siblings.length - 1]\n const lastOrder = lastId ? String(state.byId.get(lastId)!.order) : null\n order = generateKeyBetween(lastOrder, null)\n }\n\n const newItem = { id: generateId(), type, parentId, order } as T\n dispatch({ type: 'ADD_ITEM', payload: newItem })\n onBlockAdd?.({ block: newItem, parentId, index: siblings.length })\n return newItem\n },\n [state, orderingStrategy, onBlockAdd]\n )\n\n const insertItem = useCallback(\n (type: T['type'], referenceId: string, position: 'before' | 'after'): T => {\n const referenceBlock = state.byId.get(referenceId)\n if (!referenceBlock) throw new Error(`Reference block ${referenceId} not found`)\n\n const parentId = referenceBlock.parentId ?? null\n const siblings = state.byParent.get(parentId) ?? []\n const index = siblings.indexOf(referenceId)\n const insertIndex = position === 'before' ? index : index + 1\n\n let order: number | string = insertIndex\n if (orderingStrategy === 'fractional') {\n const prevId = insertIndex > 0 ? siblings[insertIndex - 1] : null\n const nextId = insertIndex < siblings.length ? siblings[insertIndex] : null\n const prevOrder = prevId ? String(state.byId.get(prevId)!.order) : null\n const nextOrder = nextId ? String(state.byId.get(nextId)!.order) : null\n order = generateKeyBetween(prevOrder, nextOrder)\n }\n\n const newItem = { id: generateId(), type, parentId, order } as T\n\n dispatch({\n type: 'INSERT_ITEM',\n payload: { item: newItem, parentId, index: insertIndex },\n })\n\n onBlockAdd?.({ block: newItem, parentId, index: insertIndex })\n return newItem\n },\n [state, orderingStrategy, onBlockAdd]\n )\n\n const deleteItem = useCallback((id: string) => {\n const block = state.byId.get(id)\n if (block && onBlockDelete) {\n const deletedIds = [...getDescendantIds(state, id)]\n onBlockDelete({ block, deletedIds, parentId: block.parentId })\n }\n dispatch({ type: 'DELETE_ITEM', payload: { id } })\n }, [state, onBlockDelete])\n\n const moveItem = useCallback((activeId: string, targetZone: string) => {\n dispatch({ type: 'MOVE_ITEM', payload: { activeId, targetZone } })\n }, [])\n\n const setAll = useCallback((all: T[]) => {\n dispatch({ type: 'SET_ALL', payload: all })\n }, [])\n\n const value: BlockStateContextValue<T> = useMemo(\n () => ({\n blocks,\n blockMap,\n childrenMap,\n indexMap,\n normalizedIndex: state,\n createItem,\n insertItem,\n deleteItem,\n moveItem,\n setAll,\n }),\n [\n blocks,\n blockMap,\n childrenMap,\n indexMap,\n state,\n createItem,\n insertItem,\n deleteItem,\n moveItem,\n setAll,\n ]\n )\n\n return <BlockContext.Provider value={value}>{children}</BlockContext.Provider>\n }\n\n return {\n BlockStateProvider,\n useBlockState,\n }\n}\n","'use client'\n\nimport {\n createContext,\n useContext,\n useState,\n useMemo,\n useCallback,\n useReducer,\n useRef,\n useEffect,\n} from 'react'\nimport type { BaseBlock, BlockIndex } from '@dnd-block-tree/core'\nimport {\n expandReducer,\n computeNormalizedIndex,\n reparentBlockIndex,\n buildOrderedBlocks,\n debounce,\n} from '@dnd-block-tree/core'\nimport type { TreeStateContextValue, TreeStateProviderProps } from '../types'\n\ninterface CreateTreeStateOptions<T extends BaseBlock> {\n previewDebounce?: number\n containerTypes?: string[]\n}\n\nexport function createTreeState<T extends BaseBlock>(options: CreateTreeStateOptions<T> = {}) {\n const { previewDebounce = 150, containerTypes = [] } = options\n\n const TreeContext = createContext<TreeStateContextValue<T> | null>(null)\n\n function useTreeState() {\n const ctx = useContext(TreeContext)\n if (!ctx) throw new Error('useTreeState must be used inside TreeStateProvider')\n return ctx\n }\n\n function TreeStateProvider({ children, blocks, blockMap }: TreeStateProviderProps<T>) {\n const [activeId, setActiveId] = useState<string | null>(null)\n const [hoverZone, setHoverZone] = useState<string | null>(null)\n\n const [virtualState, setVirtualState] = useState<BlockIndex<T> | null>(null)\n\n const [expandedMap, dispatchExpand] = useReducer(expandReducer, {})\n\n const initialBlocksRef = useRef<T[]>([])\n const cachedReorderRef = useRef<{ targetId: string; reorderedBlocks: T[] } | null>(null)\n\n const activeBlock = useMemo(() => {\n if (!activeId) return null\n return blockMap.get(activeId) ?? null\n }, [activeId, blockMap])\n\n const debouncedSetVirtualBlocks = useMemo(\n () =>\n debounce((newBlocks: T[] | null) => {\n if (!newBlocks) {\n setVirtualState(null)\n } else {\n setVirtualState(computeNormalizedIndex(newBlocks))\n }\n }, previewDebounce),\n [previewDebounce]\n )\n\n const effectiveState = useMemo(() => {\n return virtualState ?? computeNormalizedIndex(blocks)\n }, [virtualState, blocks])\n\n const effectiveBlocks = useMemo(() => {\n return buildOrderedBlocks(effectiveState, containerTypes)\n }, [effectiveState, containerTypes])\n\n const blocksByParent = useMemo(() => {\n const map = new Map<string | null, T[]>()\n for (const [parentId, ids] of effectiveState.byParent.entries()) {\n map.set(\n parentId,\n ids.map(id => effectiveState.byId.get(id)!).filter(Boolean)\n )\n }\n return map\n }, [effectiveState])\n\n const handleDragStart = useCallback(\n (id: string | null) => {\n setActiveId(id)\n if (id) {\n initialBlocksRef.current = [...blocks]\n cachedReorderRef.current = null\n }\n },\n [blocks]\n )\n\n const handleDragOver = useCallback(\n (targetZone: string) => {\n if (!activeId) return\n\n setHoverZone(targetZone)\n\n const baseIndex = computeNormalizedIndex(initialBlocksRef.current)\n const updatedIndex = reparentBlockIndex(baseIndex, activeId, targetZone, containerTypes)\n const orderedBlocks = buildOrderedBlocks(updatedIndex, containerTypes)\n\n cachedReorderRef.current = { targetId: targetZone, reorderedBlocks: orderedBlocks }\n\n debouncedSetVirtualBlocks(orderedBlocks)\n },\n [activeId, debouncedSetVirtualBlocks, containerTypes]\n )\n\n const handleDragEnd = useCallback(() => {\n debouncedSetVirtualBlocks.cancel()\n setVirtualState(null)\n setActiveId(null)\n setHoverZone(null)\n\n const result = cachedReorderRef.current\n cachedReorderRef.current = null\n initialBlocksRef.current = []\n\n return result\n }, [debouncedSetVirtualBlocks])\n\n const handleHover = useCallback(\n (zoneId: string, _parentId: string | null) => {\n if (!activeId) return\n handleDragOver(zoneId)\n },\n [activeId, handleDragOver]\n )\n\n const toggleExpand = useCallback((id: string) => {\n dispatchExpand({ type: 'TOGGLE', id })\n }, [])\n\n const setExpandAll = useCallback(\n (expanded: boolean) => {\n const containerIds = blocks.filter(b => containerTypes.includes(b.type)).map(b => b.id)\n dispatchExpand({ type: 'SET_ALL', expanded, ids: containerIds })\n },\n [blocks, containerTypes]\n )\n\n useEffect(() => {\n return () => {\n debouncedSetVirtualBlocks.cancel()\n }\n }, [debouncedSetVirtualBlocks])\n\n const value: TreeStateContextValue<T> = useMemo(\n () => ({\n activeId,\n activeBlock,\n hoverZone,\n expandedMap,\n effectiveBlocks,\n blocksByParent,\n setActiveId: handleDragStart,\n setHoverZone,\n toggleExpand,\n setExpandAll,\n handleHover,\n }),\n [\n activeId,\n activeBlock,\n hoverZone,\n expandedMap,\n effectiveBlocks,\n blocksByParent,\n handleDragStart,\n toggleExpand,\n setExpandAll,\n handleHover,\n ]\n )\n\n return <TreeContext.Provider value={value}>{children}</TreeContext.Provider>\n }\n\n return {\n TreeStateProvider,\n useTreeState,\n }\n}\n","'use client'\n\nimport { useReducer, useCallback } from 'react'\nimport type { BaseBlock } from '@dnd-block-tree/core'\nimport { historyReducer } from '@dnd-block-tree/core'\n\nexport interface UseBlockHistoryOptions {\n /** Maximum number of undo steps to retain (default: 50) */\n maxSteps?: number\n}\n\nexport interface UseBlockHistoryResult<T extends BaseBlock> {\n /** Current blocks state */\n blocks: T[]\n /** Set new blocks state (pushes current to undo stack) */\n set: (blocks: T[]) => void\n /** Undo the last change */\n undo: () => void\n /** Redo the last undone change */\n redo: () => void\n /** Whether undo is available */\n canUndo: boolean\n /** Whether redo is available */\n canRedo: boolean\n}\n\n/**\n * Composable hook for undo/redo support with BlockTree.\n *\n * Usage:\n * ```tsx\n * const { blocks, set, undo, redo, canUndo, canRedo } = useBlockHistory(initialBlocks)\n * <BlockTree blocks={blocks} onChange={set} />\n * <button onClick={undo} disabled={!canUndo}>Undo</button>\n * <button onClick={redo} disabled={!canRedo}>Redo</button>\n * ```\n */\nexport function useBlockHistory<T extends BaseBlock>(\n initialBlocks: T[],\n options: UseBlockHistoryOptions = {}\n): UseBlockHistoryResult<T> {\n const { maxSteps = 50 } = options\n\n const [state, dispatch] = useReducer(historyReducer<T>, {\n past: [],\n present: initialBlocks,\n future: [],\n })\n\n const set = useCallback(\n (blocks: T[]) => dispatch({ type: 'SET', payload: blocks, maxSteps }),\n [maxSteps]\n )\n const undo = useCallback(() => dispatch({ type: 'UNDO' }), [])\n const redo = useCallback(() => dispatch({ type: 'REDO' }), [])\n\n return {\n blocks: state.present,\n set,\n undo,\n redo,\n canUndo: state.past.length > 0,\n canRedo: state.future.length > 0,\n }\n}\n","'use client'\n\nimport { useRef, useLayoutEffect } from 'react'\n\nexport interface UseLayoutAnimationOptions {\n /** Duration of the transition in ms (default: 200) */\n duration?: number\n /** CSS easing function (default: 'ease') */\n easing?: string\n /** CSS selector for animated children (default: '[data-block-id]') */\n selector?: string\n}\n\n/**\n * FLIP-based layout animation hook for reorder transitions.\n *\n * Captures block positions before render (layout effect cleanup),\n * computes the delta after render, and applies a CSS transform transition.\n *\n * Usage:\n * ```tsx\n * const containerRef = useRef<HTMLDivElement>(null)\n * useLayoutAnimation(containerRef, { duration: 200 })\n * return <div ref={containerRef}>...</div>\n * ```\n */\nexport function useLayoutAnimation(\n containerRef: React.RefObject<HTMLElement | null>,\n options: UseLayoutAnimationOptions = {}\n) {\n const {\n duration = 200,\n easing = 'ease',\n selector = '[data-block-id]',\n } = options\n\n const prevPositions = useRef(new Map<string, DOMRect>())\n\n useLayoutEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const children = container.querySelectorAll(selector)\n const currentPositions = new Map<string, DOMRect>()\n\n children.forEach(el => {\n const id = (el as HTMLElement).dataset.blockId\n if (id) {\n currentPositions.set(id, el.getBoundingClientRect())\n }\n })\n\n children.forEach(el => {\n const htmlEl = el as HTMLElement\n const id = htmlEl.dataset.blockId\n if (!id) return\n\n const prev = prevPositions.current.get(id)\n const curr = currentPositions.get(id)\n if (!prev || !curr) return\n\n const deltaY = prev.top - curr.top\n const deltaX = prev.left - curr.left\n\n if (deltaY === 0 && deltaX === 0) return\n\n htmlEl.style.transform = `translate(${deltaX}px, ${deltaY}px)`\n htmlEl.style.transition = 'none'\n\n requestAnimationFrame(() => {\n htmlEl.style.transition = `transform ${duration}ms ${easing}`\n htmlEl.style.transform = ''\n\n const onEnd = () => {\n htmlEl.style.transition = ''\n htmlEl.removeEventListener('transitionend', onEnd)\n }\n htmlEl.addEventListener('transitionend', onEnd)\n })\n })\n\n prevPositions.current = currentPositions\n })\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useEffect } from 'react'\n\nexport interface UseVirtualTreeOptions {\n /** Ref to the scrollable container element */\n containerRef: React.RefObject<HTMLElement | null>\n /** Total number of items in the tree */\n itemCount: number\n /** Fixed height of each item in pixels */\n itemHeight: number\n /** Number of extra items to render outside the visible range (default: 5) */\n overscan?: number\n}\n\nexport interface UseVirtualTreeResult {\n /** Start and end indices of the visible range (inclusive) */\n visibleRange: { start: number; end: number }\n /** Total height of all items for the spacer div */\n totalHeight: number\n /** Offset from top for the first rendered item */\n offsetY: number\n}\n\n/**\n * Lightweight fixed-height virtual scrolling hook for tree lists.\n *\n * Tracks scroll position on the container and computes which items\n * should be rendered based on the viewport and overscan.\n */\nexport function useVirtualTree({\n containerRef,\n itemCount,\n itemHeight,\n overscan = 5,\n}: UseVirtualTreeOptions): UseVirtualTreeResult {\n const [scrollTop, setScrollTop] = useState(0)\n const [containerHeight, setContainerHeight] = useState(0)\n const rafId = useRef(0)\n\n const handleScroll = useCallback(() => {\n cancelAnimationFrame(rafId.current)\n rafId.current = requestAnimationFrame(() => {\n const el = containerRef.current\n if (el) {\n setScrollTop(el.scrollTop)\n setContainerHeight(el.clientHeight)\n }\n })\n }, [containerRef])\n\n useEffect(() => {\n const el = containerRef.current\n if (!el) return\n\n setScrollTop(el.scrollTop)\n setContainerHeight(el.clientHeight)\n\n el.addEventListener('scroll', handleScroll, { passive: true })\n return () => {\n el.removeEventListener('scroll', handleScroll)\n cancelAnimationFrame(rafId.current)\n }\n }, [containerRef, handleScroll])\n\n const totalHeight = itemCount * itemHeight\n\n const startRaw = Math.floor(scrollTop / itemHeight)\n const visibleCount = Math.ceil(containerHeight / itemHeight)\n const start = Math.max(0, startRaw - overscan)\n const end = Math.min(itemCount - 1, startRaw + visibleCount + overscan)\n\n const offsetY = start * itemHeight\n\n return {\n visibleRange: { start, end },\n totalHeight,\n offsetY,\n }\n}\n","'use client'\n\nimport { useState, useCallback, useRef, useMemo, useEffect } from 'react'\nimport type {\n BaseBlock,\n BlockTreeCallbacks,\n DragStartEvent,\n DragEndEvent,\n BlockMoveEvent,\n ExpandChangeEvent,\n HoverChangeEvent,\n} from '@dnd-block-tree/core'\nimport { computeNormalizedIndex, validateBlockTree, getBlockDepth } from '@dnd-block-tree/core'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DevToolsEventEntry {\n id: number\n timestamp: number\n type: 'dragStart' | 'dragEnd' | 'blockMove' | 'expandChange' | 'hoverChange'\n summary: string\n}\n\nexport interface DevToolsCallbacks<T extends BaseBlock = BaseBlock> {\n onDragStart: NonNullable<BlockTreeCallbacks<T>['onDragStart']>\n onDragEnd: NonNullable<BlockTreeCallbacks<T>['onDragEnd']>\n onBlockMove: NonNullable<BlockTreeCallbacks<T>['onBlockMove']>\n onExpandChange: NonNullable<BlockTreeCallbacks<T>['onExpandChange']>\n onHoverChange: NonNullable<BlockTreeCallbacks<T>['onHoverChange']>\n}\n\nexport interface BlockTreeDevToolsProps<T extends BaseBlock = BaseBlock> {\n blocks: T[]\n containerTypes?: readonly string[]\n events: DevToolsEventEntry[]\n onClearEvents: () => void\n getLabel?: (block: T) => string\n initialOpen?: boolean\n position?: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'\n buttonStyle?: React.CSSProperties\n panelStyle?: React.CSSProperties\n forceMount?: boolean\n}\n\n// ============================================================================\n// Hook: useDevToolsCallbacks\n// ============================================================================\n\nconst MAX_EVENTS = 100\n\nexport function useDevToolsCallbacks<T extends BaseBlock = BaseBlock>() {\n const [events, setEvents] = useState<DevToolsEventEntry[]>([])\n const nextIdRef = useRef(1)\n\n const addEvent = useCallback((type: DevToolsEventEntry['type'], summary: string) => {\n const entry: DevToolsEventEntry = {\n id: nextIdRef.current++,\n timestamp: Date.now(),\n type,\n summary,\n }\n setEvents(prev => [entry, ...prev].slice(0, MAX_EVENTS))\n }, [])\n\n const clearEvents = useCallback(() => {\n setEvents([])\n }, [])\n\n const callbacks: DevToolsCallbacks<T> = useMemo(() => ({\n onDragStart: (event: DragStartEvent<T>) => {\n addEvent('dragStart', `Started dragging \"${event.blockId}\"`)\n },\n onDragEnd: (event: DragEndEvent<T>) => {\n if (event.cancelled) {\n addEvent('dragEnd', `Cancelled drag of \"${event.blockId}\"`)\n } else {\n addEvent('dragEnd', `Dropped \"${event.blockId}\" at ${event.targetZone ?? 'none'}`)\n }\n },\n onBlockMove: (event: BlockMoveEvent<T>) => {\n const fromStr = `parent=${event.from.parentId ?? 'root'}[${event.from.index}]`\n const toStr = `parent=${event.to.parentId ?? 'root'}[${event.to.index}]`\n const ids = event.movedIds.length > 1 ? ` (${event.movedIds.length} blocks)` : ''\n addEvent('blockMove', `Moved \"${event.block.id}\" from ${fromStr} to ${toStr}${ids}`)\n },\n onExpandChange: (event: ExpandChangeEvent<T>) => {\n addEvent('expandChange', `${event.expanded ? 'Expanded' : 'Collapsed'} \"${event.blockId}\"`)\n },\n onHoverChange: (event: HoverChangeEvent<T>) => {\n if (event.zoneId) {\n addEvent('hoverChange', `Hovering over zone \"${event.zoneId}\"`)\n }\n },\n }), [addEvent])\n\n return { callbacks, events, clearEvents }\n}\n\n// ============================================================================\n// Logo SVG\n// ============================================================================\n\nfunction DevToolsLogo({ size = 20 }: { size?: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\"2\" y=\"2\" width=\"8\" height=\"5\" rx=\"1\" fill=\"#3b82f6\" opacity=\"0.9\" />\n <rect x=\"8\" y=\"10\" width=\"8\" height=\"5\" rx=\"1\" fill=\"#10b981\" opacity=\"0.9\" />\n <rect x=\"14\" y=\"18\" width=\"8\" height=\"5\" rx=\"1\" fill=\"#f59e0b\" opacity=\"0.9\" />\n <path d=\"M6 7 L6 10 L8 10\" stroke=\"#888\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.6\" />\n <path d=\"M12 15 L12 18 L14 18\" stroke=\"#888\" strokeWidth=\"1.5\" fill=\"none\" opacity=\"0.6\" />\n </svg>\n )\n}\n\n// ============================================================================\n// Diff computation\n// ============================================================================\n\ntype ChangeType = 'added' | 'moved' | 'unchanged'\n\ninterface DiffEntry<T extends BaseBlock> {\n block: T\n changeType: ChangeType\n depth: number\n}\n\nfunction computeDiffMap<T extends BaseBlock>(prev: T[], next: T[]): Map<string, ChangeType> {\n const prevMap = new Map(prev.map(b => [b.id, b]))\n const changeMap = new Map<string, ChangeType>()\n for (const block of next) {\n const prevBlock = prevMap.get(block.id)\n if (!prevBlock) {\n changeMap.set(block.id, 'added')\n } else if (prevBlock.parentId !== block.parentId || prevBlock.order !== block.order) {\n changeMap.set(block.id, 'moved')\n } else {\n changeMap.set(block.id, 'unchanged')\n }\n }\n return changeMap\n}\n\nfunction buildDiffTree<T extends BaseBlock>(blocks: T[], changeMap: Map<string, ChangeType>): DiffEntry<T>[] {\n const result: DiffEntry<T>[] = []\n const byParent = new Map<string | null, T[]>()\n for (const block of blocks) {\n const key = block.parentId ?? null\n const list = byParent.get(key) ?? []\n list.push(block)\n byParent.set(key, list)\n }\n function walk(parentId: string | null, depth: number) {\n const children = byParent.get(parentId) ?? []\n children.sort((a, b) => {\n const ao = a.order, bo = b.order\n if (typeof ao === 'number' && typeof bo === 'number') return ao - bo\n return String(ao) < String(bo) ? -1 : String(ao) > String(bo) ? 1 : 0\n })\n for (const block of children) {\n result.push({ block, changeType: changeMap.get(block.id) ?? 'unchanged', depth })\n walk(block.id, depth + 1)\n }\n }\n walk(null, 0)\n return result\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst TYPE_COLORS: Record<DevToolsEventEntry['type'], string> = {\n dragStart: '#3b82f6',\n dragEnd: '#10b981',\n blockMove: '#f59e0b',\n expandChange: '#8b5cf6',\n hoverChange: '#6b7280',\n}\n\nconst TYPE_LABELS: Record<DevToolsEventEntry['type'], string> = {\n dragStart: 'DRAG',\n dragEnd: 'DROP',\n blockMove: 'MOVE',\n expandChange: 'EXPAND',\n hoverChange: 'HOVER',\n}\n\nconst TYPE_TOOLTIPS: Record<DevToolsEventEntry['type'], string> = {\n dragStart: 'onDragStart -- a block was picked up',\n dragEnd: 'onDragEnd -- a block was dropped or drag was cancelled',\n blockMove: 'onBlockMove -- a block was reparented to a new position',\n expandChange: 'onExpandChange -- a container was expanded or collapsed',\n hoverChange: 'onHoverChange -- the pointer entered a drop zone',\n}\n\nconst DEFAULT_WIDTH = 340\nconst DEFAULT_HEIGHT = 420\nconst DIFF_EXTRA_WIDTH = 300\nconst MIN_WIDTH = 280\nconst MIN_HEIGHT = 200\nconst BTN_SIZE = 40\nconst BTN_MARGIN = 16\nconst STORAGE_KEY = 'dnd-devtools-position'\nconst BTN_DRAG_THRESHOLD = 5\n\ntype Corner = NonNullable<BlockTreeDevToolsProps['position']>\n\nfunction cornerToXY(corner: Corner): { x: number; y: number } {\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1024\n const vh = typeof window !== 'undefined' ? window.innerHeight : 768\n switch (corner) {\n case 'top-left': return { x: BTN_MARGIN, y: BTN_MARGIN }\n case 'top-right': return { x: vw - BTN_MARGIN - BTN_SIZE, y: BTN_MARGIN }\n case 'bottom-right': return { x: vw - BTN_MARGIN - BTN_SIZE, y: vh - BTN_MARGIN - BTN_SIZE }\n case 'bottom-left':\n default: return { x: BTN_MARGIN, y: vh - BTN_MARGIN - BTN_SIZE }\n }\n}\n\nfunction xyToCorner(x: number, y: number): Corner {\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1024\n const vh = typeof window !== 'undefined' ? window.innerHeight : 768\n const isLeft = x + BTN_SIZE / 2 < vw / 2\n const isTop = y + BTN_SIZE / 2 < vh / 2\n if (isTop && isLeft) return 'top-left'\n if (isTop) return 'top-right'\n if (isLeft) return 'bottom-left'\n return 'bottom-right'\n}\n\nfunction loadStoredPosition(): Corner | null {\n if (typeof window === 'undefined') return null\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'bottom-left' || v === 'bottom-right' || v === 'top-left' || v === 'top-right') return v\n } catch { /* ignore */ }\n return null\n}\n\nfunction savePosition(corner: Corner) {\n try { localStorage.setItem(STORAGE_KEY, corner) } catch { /* ignore */ }\n}\n\nfunction computeCardOrigin(corner: Corner, width: number, height: number): { x: number; y: number } {\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1024\n const vh = typeof window !== 'undefined' ? window.innerHeight : 768\n let x: number\n let y: number\n switch (corner) {\n case 'bottom-right':\n x = vw - BTN_MARGIN - width\n y = vh - BTN_MARGIN - height - BTN_SIZE - 8\n break\n case 'top-left':\n x = BTN_MARGIN\n y = BTN_MARGIN + BTN_SIZE + 8\n break\n case 'top-right':\n x = vw - BTN_MARGIN - width\n y = BTN_MARGIN + BTN_SIZE + 8\n break\n case 'bottom-left':\n default:\n x = BTN_MARGIN\n y = vh - BTN_MARGIN - height - BTN_SIZE - 8\n break\n }\n return {\n x: Math.max(0, Math.min(x, vw - width)),\n y: Math.max(0, Math.min(y, vh - height)),\n }\n}\n\n// ============================================================================\n// Component: BlockTreeDevTools\n// ============================================================================\n\nexport function BlockTreeDevTools<T extends BaseBlock = BaseBlock>({\n blocks,\n containerTypes = [],\n events,\n onClearEvents,\n getLabel = (b) => b.type,\n initialOpen = false,\n position = 'bottom-left',\n buttonStyle,\n panelStyle,\n forceMount = false,\n}: BlockTreeDevToolsProps<T>) {\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production' && !forceMount) {\n return null\n }\n const [isOpen, setIsOpen] = useState(initialOpen)\n const [showDiff, setShowDiff] = useState(false)\n const [cardPos, setCardPos] = useState<{ x: number; y: number } | null>(null)\n const [cardSize, setCardSize] = useState<{ w: number; h: number }>({ w: DEFAULT_WIDTH, h: DEFAULT_HEIGHT })\n const [showTooltip, setShowTooltip] = useState(false)\n\n const [activeCorner, setActiveCorner] = useState<Corner>(() => loadStoredPosition() ?? position)\n const [btnPos, setBtnPos] = useState<{ x: number; y: number } | null>(null)\n const [btnDragging, setBtnDragging] = useState(false)\n const [btnTransition, setBtnTransition] = useState(false)\n const btnDragRef = useRef<{ active: boolean; startX: number; startY: number; origX: number; origY: number; moved: boolean }>({\n active: false, startX: 0, startY: 0, origX: 0, origY: 0, moved: false,\n })\n\n useEffect(() => {\n if (!btnDragging) {\n setBtnPos(cornerToXY(activeCorner))\n }\n }, [activeCorner, btnDragging])\n\n useEffect(() => {\n const onResize = () => {\n if (!btnDragRef.current.active) {\n setBtnPos(cornerToXY(activeCorner))\n }\n }\n window.addEventListener('resize', onResize)\n return () => window.removeEventListener('resize', onResize)\n }, [activeCorner])\n\n const handleBtnPointerDown = useCallback((e: React.PointerEvent) => {\n if (!btnPos) return\n btnDragRef.current = {\n active: true,\n startX: e.clientX,\n startY: e.clientY,\n origX: btnPos.x,\n origY: btnPos.y,\n moved: false,\n }\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n }, [btnPos])\n\n const handleBtnPointerMove = useCallback((e: React.PointerEvent) => {\n const r = btnDragRef.current\n if (!r.active) return\n const dx = e.clientX - r.startX\n const dy = e.clientY - r.startY\n if (!r.moved && Math.abs(dx) < BTN_DRAG_THRESHOLD && Math.abs(dy) < BTN_DRAG_THRESHOLD) return\n r.moved = true\n setBtnDragging(true)\n const newX = r.origX + dx\n const newY = r.origY + dy\n const maxX = window.innerWidth - BTN_SIZE\n const maxY = window.innerHeight - BTN_SIZE\n setBtnPos({\n x: Math.max(0, Math.min(newX, maxX)),\n y: Math.max(0, Math.min(newY, maxY)),\n })\n }, [])\n\n const handleBtnPointerUp = useCallback(() => {\n if (!btnPos) return\n const wasMoved = btnDragRef.current.moved\n btnDragRef.current.active = false\n if (wasMoved) {\n const newCorner = xyToCorner(btnPos.x, btnPos.y)\n setActiveCorner(newCorner)\n savePosition(newCorner)\n setBtnTransition(true)\n setBtnPos(cornerToXY(newCorner))\n setTimeout(() => {\n setBtnTransition(false)\n setBtnDragging(false)\n }, 300)\n } else {\n setBtnDragging(false)\n setIsOpen(prev => !prev)\n }\n }, [btnPos])\n\n const dragRef = useRef<{ dragging: boolean; startX: number; startY: number; origX: number; origY: number }>({\n dragging: false, startX: 0, startY: 0, origX: 0, origY: 0,\n })\n\n const resizeRef = useRef<{\n active: boolean\n edge: string\n startX: number; startY: number\n origX: number; origY: number\n origW: number; origH: number\n }>({ active: false, edge: '', startX: 0, startY: 0, origX: 0, origY: 0, origW: 0, origH: 0 })\n\n const cardRef = useRef<HTMLDivElement>(null)\n\n const prevBlocksRef = useRef<T[]>(blocks)\n const diffChangeMap = useMemo(() => computeDiffMap(prevBlocksRef.current, blocks), [blocks])\n useEffect(() => { prevBlocksRef.current = blocks }, [blocks])\n const diffTree = useMemo(() => buildDiffTree(blocks, diffChangeMap), [blocks, diffChangeMap])\n const diffStats = useMemo(() => {\n let added = 0, moved = 0\n for (const { changeType } of diffTree) {\n if (changeType === 'added') added++\n if (changeType === 'moved') moved++\n }\n return { added, moved }\n }, [diffTree])\n\n useEffect(() => {\n setCardSize(prev => {\n const targetW = showDiff ? DEFAULT_WIDTH + DIFF_EXTRA_WIDTH : DEFAULT_WIDTH\n const wasDefault = Math.abs(prev.w - DEFAULT_WIDTH) < 20\n const wasExpanded = Math.abs(prev.w - (DEFAULT_WIDTH + DIFF_EXTRA_WIDTH)) < 20\n let newW = prev.w\n if (showDiff && (wasDefault || prev.w < targetW)) {\n newW = targetW\n } else if (!showDiff && wasExpanded) {\n newW = DEFAULT_WIDTH\n }\n if (newW !== prev.w) {\n setCardPos(cp => {\n if (!cp) return cp\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1024\n const maxX = Math.max(0, vw - newW)\n if (cp.x > maxX) return { ...cp, x: maxX }\n return cp\n })\n return { ...prev, w: newW }\n }\n return prev\n })\n }, [showDiff])\n\n const getDefaultCardPos = useCallback(() => {\n return computeCardOrigin(activeCorner, cardSize.w, cardSize.h)\n }, [activeCorner, cardSize.w, cardSize.h])\n\n useEffect(() => {\n if (isOpen && !cardPos) {\n setCardPos(getDefaultCardPos())\n }\n }, [isOpen, cardPos, getDefaultCardPos])\n\n const handleDragPointerDown = useCallback((e: React.PointerEvent) => {\n e.preventDefault()\n dragRef.current = {\n dragging: true,\n startX: e.clientX,\n startY: e.clientY,\n origX: cardPos?.x ?? 0,\n origY: cardPos?.y ?? 0,\n }\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n }, [cardPos])\n\n const handleDragPointerMove = useCallback((e: React.PointerEvent) => {\n if (!dragRef.current.dragging) return\n const dx = e.clientX - dragRef.current.startX\n const dy = e.clientY - dragRef.current.startY\n const newX = dragRef.current.origX + dx\n const newY = dragRef.current.origY + dy\n const maxX = window.innerWidth - cardSize.w\n const maxY = window.innerHeight - 40\n setCardPos({\n x: Math.max(0, Math.min(newX, maxX)),\n y: Math.max(0, Math.min(newY, maxY)),\n })\n }, [cardSize.w])\n\n const handleDragPointerUp = useCallback(() => {\n dragRef.current.dragging = false\n }, [])\n\n const handleResizePointerDown = useCallback((edge: string) => (e: React.PointerEvent) => {\n e.preventDefault()\n e.stopPropagation()\n resizeRef.current = {\n active: true,\n edge,\n startX: e.clientX,\n startY: e.clientY,\n origX: cardPos?.x ?? 0,\n origY: cardPos?.y ?? 0,\n origW: cardSize.w,\n origH: cardSize.h,\n }\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n }, [cardPos, cardSize])\n\n const handleResizePointerMove = useCallback((e: React.PointerEvent) => {\n const r = resizeRef.current\n if (!r.active) return\n const dx = e.clientX - r.startX\n const dy = e.clientY - r.startY\n let newW = r.origW\n let newH = r.origH\n let newX = r.origX\n let newY = r.origY\n\n if (r.edge.includes('e')) newW = Math.max(MIN_WIDTH, r.origW + dx)\n if (r.edge.includes('w')) {\n newW = Math.max(MIN_WIDTH, r.origW - dx)\n newX = r.origX + (r.origW - newW)\n }\n if (r.edge.includes('s')) newH = Math.max(MIN_HEIGHT, r.origH + dy)\n if (r.edge.includes('n')) {\n newH = Math.max(MIN_HEIGHT, r.origH - dy)\n newY = r.origY + (r.origH - newH)\n }\n\n setCardSize({ w: newW, h: newH })\n setCardPos({ x: newX, y: newY })\n }, [])\n\n const handleResizePointerUp = useCallback(() => {\n resizeRef.current.active = false\n }, [])\n\n const toggle = useCallback(() => {\n setIsOpen(prev => !prev)\n }, [])\n\n const toggleDiff = useCallback(() => {\n setShowDiff(prev => !prev)\n }, [])\n\n const renderCountRef = useRef(0)\n const lastRenderTimeRef = useRef(performance.now())\n const prevBlockCountRef = useRef(blocks.length)\n\n renderCountRef.current++\n const renderTime = performance.now() - lastRenderTimeRef.current\n lastRenderTimeRef.current = performance.now()\n\n const blockCountDelta = blocks.length - prevBlockCountRef.current\n useEffect(() => {\n prevBlockCountRef.current = blocks.length\n }, [blocks.length])\n\n const treeStats = useMemo(() => {\n const index = computeNormalizedIndex(blocks as BaseBlock[])\n const containers = blocks.filter(b => containerTypes.includes(b.type))\n let maxDepthVal = 0\n for (const block of blocks) {\n const d = getBlockDepth(index, block.id)\n if (d > maxDepthVal) maxDepthVal = d\n }\n const validation = validateBlockTree(index)\n return {\n blockCount: blocks.length,\n containerCount: containers.length,\n maxDepth: maxDepthVal,\n validation,\n }\n }, [blocks, containerTypes])\n\n const formatTime = (ts: number) => {\n const d = new Date(ts)\n return `${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}:${d.getSeconds().toString().padStart(2, '0')}`\n }\n\n const isBottom = activeCorner.startsWith('bottom')\n const isLeft = activeCorner.endsWith('left')\n\n if (!btnPos) return null\n\n const triggerBtnStyle: React.CSSProperties = {\n position: 'fixed',\n left: btnPos.x,\n top: btnPos.y,\n zIndex: 99998,\n width: BTN_SIZE,\n height: BTN_SIZE,\n borderRadius: '50%',\n border: 'none',\n background: isOpen ? 'rgba(59, 130, 246, 0.9)' : 'rgba(30, 30, 30, 0.85)',\n color: '#fff',\n cursor: btnDragging ? 'grabbing' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: '0 2px 8px rgba(0,0,0,0.3)',\n transition: btnTransition\n ? 'left 0.3s cubic-bezier(0.4, 0, 0.2, 1), top 0.3s cubic-bezier(0.4, 0, 0.2, 1), background 0.15s'\n : 'background 0.15s',\n touchAction: 'none',\n userSelect: 'none',\n ...buttonStyle,\n }\n\n const tooltipStyle: React.CSSProperties = {\n position: 'absolute',\n whiteSpace: 'nowrap',\n fontSize: 11,\n fontWeight: 500,\n padding: '4px 10px',\n borderRadius: 6,\n background: 'rgba(15, 15, 20, 0.95)',\n color: '#ccc',\n boxShadow: '0 2px 8px rgba(0,0,0,0.3)',\n pointerEvents: 'none',\n ...(isBottom\n ? { bottom: '100%', marginBottom: 8 }\n : { top: '100%', marginTop: 8 }),\n ...(isLeft\n ? { left: 0 }\n : { right: 0 }),\n }\n\n const cardStyle: React.CSSProperties = {\n position: 'fixed',\n left: cardPos?.x ?? 0,\n top: cardPos?.y ?? 0,\n zIndex: 99999,\n width: cardSize.w,\n height: cardSize.h,\n background: 'rgba(20, 20, 24, 0.95)',\n backdropFilter: 'blur(12px)',\n border: '1px solid rgba(255,255,255,0.1)',\n borderRadius: 10,\n color: '#e0e0e0',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n fontSize: 12,\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0 8px 32px rgba(0,0,0,0.5)',\n overflow: 'hidden',\n ...panelStyle,\n }\n\n const titleBarStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n gap: 8,\n background: 'rgba(255,255,255,0.04)',\n borderBottom: '1px solid rgba(255,255,255,0.08)',\n cursor: 'grab',\n userSelect: 'none',\n flexShrink: 0,\n touchAction: 'none',\n }\n\n const titleTextStyle: React.CSSProperties = {\n fontSize: 11,\n fontWeight: 600,\n letterSpacing: '0.03em',\n opacity: 0.8,\n flexShrink: 0,\n }\n\n const titleBtnStyle = (active?: boolean): React.CSSProperties => ({\n height: 22,\n padding: '0 8px',\n borderRadius: 4,\n border: '1px solid ' + (active ? 'rgba(59,130,246,0.5)' : 'rgba(128,128,128,0.25)'),\n background: active ? 'rgba(59,130,246,0.15)' : 'transparent',\n color: active ? '#93b8f7' : '#999',\n cursor: 'pointer',\n fontSize: 10,\n fontWeight: 600,\n letterSpacing: '0.02em',\n flexShrink: 0,\n })\n\n const closeBtnStyle: React.CSSProperties = {\n width: 20,\n height: 20,\n borderRadius: 4,\n border: 'none',\n background: 'transparent',\n color: '#999',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 14,\n lineHeight: '1',\n padding: 0,\n flexShrink: 0,\n }\n\n const bodyStyle: React.CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'row',\n overflow: 'hidden',\n minHeight: 0,\n }\n\n const mainColumnStyle: React.CSSProperties = {\n flex: showDiff ? '0 0 50%' : '1 1 100%',\n overflow: 'auto',\n padding: '10px 12px',\n minWidth: 0,\n }\n\n const diffColumnStyle: React.CSSProperties = {\n flex: '0 0 50%',\n overflow: 'auto',\n padding: '10px 12px',\n borderLeft: '1px solid rgba(255,255,255,0.08)',\n minWidth: 0,\n }\n\n const sectionStyle: React.CSSProperties = {\n marginBottom: 8,\n }\n\n const headingStyle: React.CSSProperties = {\n fontSize: 11,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n opacity: 0.6,\n marginBottom: 6,\n }\n\n const statRowStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: 12,\n padding: '2px 0',\n }\n\n const statValueStyle: React.CSSProperties = {\n fontFamily: 'monospace',\n fontSize: 11,\n opacity: 0.8,\n }\n\n const badgeStyle = (color: string): React.CSSProperties => ({\n display: 'inline-block',\n fontSize: 9,\n fontWeight: 700,\n fontFamily: 'monospace',\n padding: '1px 5px',\n borderRadius: 3,\n backgroundColor: color + '22',\n color,\n marginRight: 6,\n flexShrink: 0,\n })\n\n const eventListStyle: React.CSSProperties = {\n maxHeight: 160,\n overflowY: 'auto',\n fontSize: 11,\n lineHeight: '1.6',\n }\n\n const eventItemStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: 4,\n padding: '2px 0',\n borderBottom: '1px solid rgba(128,128,128,0.1)',\n }\n\n const timeStyle: React.CSSProperties = {\n fontFamily: 'monospace',\n fontSize: 10,\n opacity: 0.4,\n flexShrink: 0,\n minWidth: 52,\n }\n\n const clearBtnStyle: React.CSSProperties = {\n fontSize: 10,\n padding: '2px 8px',\n border: '1px solid rgba(128,128,128,0.3)',\n borderRadius: 4,\n background: 'transparent',\n color: '#ccc',\n cursor: 'pointer',\n opacity: 0.7,\n }\n\n const EDGE_SIZE = 6\n const resizeEdge = (edge: string): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: 'absolute',\n zIndex: 1,\n }\n const cursors: Record<string, string> = {\n n: 'ns-resize', s: 'ns-resize', e: 'ew-resize', w: 'ew-resize',\n ne: 'nesw-resize', nw: 'nwse-resize', se: 'nwse-resize', sw: 'nesw-resize',\n }\n const styles: Record<string, React.CSSProperties> = {\n n: { top: 0, left: EDGE_SIZE, right: EDGE_SIZE, height: EDGE_SIZE },\n s: { bottom: 0, left: EDGE_SIZE, right: EDGE_SIZE, height: EDGE_SIZE },\n e: { right: 0, top: EDGE_SIZE, bottom: EDGE_SIZE, width: EDGE_SIZE },\n w: { left: 0, top: EDGE_SIZE, bottom: EDGE_SIZE, width: EDGE_SIZE },\n ne: { top: 0, right: 0, width: EDGE_SIZE * 2, height: EDGE_SIZE * 2 },\n nw: { top: 0, left: 0, width: EDGE_SIZE * 2, height: EDGE_SIZE * 2 },\n se: { bottom: 0, right: 0, width: EDGE_SIZE * 2, height: EDGE_SIZE * 2 },\n sw: { bottom: 0, left: 0, width: EDGE_SIZE * 2, height: EDGE_SIZE * 2 },\n }\n return { ...base, cursor: cursors[edge], ...styles[edge] }\n }\n\n const EDGES = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw']\n\n const diffRowColor = (ct: ChangeType): React.CSSProperties => {\n if (ct === 'added') return { background: 'rgba(16,185,129,0.1)', color: '#34d399' }\n if (ct === 'moved') return { background: 'rgba(245,158,11,0.1)', color: '#fbbf24' }\n return { color: 'rgba(200,200,200,0.5)' }\n }\n\n return (\n <>\n {/* Trigger Button + Tooltip */}\n <div style={{ position: 'fixed', left: btnPos.x, top: btnPos.y, zIndex: 99998 }}>\n <button\n onPointerDown={handleBtnPointerDown}\n onPointerMove={handleBtnPointerMove}\n onPointerUp={handleBtnPointerUp}\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n style={triggerBtnStyle}\n aria-label={isOpen ? 'Close DevTools' : 'Open DevTools'}\n >\n <DevToolsLogo size={20} />\n </button>\n {showTooltip && !isOpen && !btnDragging && (\n <div style={tooltipStyle}>dnd-block-tree DevTools</div>\n )}\n </div>\n\n {/* Floating Card */}\n {isOpen && cardPos && (\n <div\n ref={cardRef}\n style={cardStyle}\n data-devtools-root=\"\"\n >\n {EDGES.map(edge => (\n <div\n key={edge}\n style={resizeEdge(edge)}\n onPointerDown={handleResizePointerDown(edge)}\n onPointerMove={handleResizePointerMove}\n onPointerUp={handleResizePointerUp}\n />\n ))}\n\n <div\n style={titleBarStyle}\n onPointerDown={handleDragPointerDown}\n onPointerMove={handleDragPointerMove}\n onPointerUp={handleDragPointerUp}\n >\n <span style={titleTextStyle}>DevTools</span>\n <div style={{ flex: 1 }} />\n <button\n onClick={toggleDiff}\n style={titleBtnStyle(showDiff)}\n onPointerDown={e => e.stopPropagation()}\n title=\"Toggle structure diff\"\n >\n Diff\n </button>\n <button\n onClick={toggle}\n style={closeBtnStyle}\n onPointerDown={e => e.stopPropagation()}\n aria-label=\"Close DevTools\"\n >\n ×\n </button>\n </div>\n\n <div style={bodyStyle}>\n <div style={mainColumnStyle}>\n <div style={sectionStyle} data-devtools-section=\"tree-state\">\n <div style={headingStyle} title=\"Live snapshot of the block tree structure\">Tree State</div>\n <div style={statRowStyle} title=\"Total number of blocks\">\n <span>Blocks</span>\n <span style={statValueStyle}>{treeStats.blockCount}</span>\n </div>\n <div style={statRowStyle} title=\"Container blocks\">\n <span>Containers</span>\n <span style={statValueStyle}>{treeStats.containerCount}</span>\n </div>\n <div style={statRowStyle} title=\"Deepest nesting level\">\n <span>Max Depth</span>\n <span style={statValueStyle}>{treeStats.maxDepth}</span>\n </div>\n <div style={statRowStyle} title=\"Tree validation status\">\n <span>Validation</span>\n <span style={{\n ...statValueStyle,\n color: treeStats.validation.valid ? '#10b981' : '#ef4444',\n }}>\n {treeStats.validation.valid ? 'Valid' : `${treeStats.validation.issues.length} issue(s)`}\n </span>\n </div>\n {!treeStats.validation.valid && (\n <div style={{ fontSize: 10, color: '#ef4444', marginTop: 4 }}>\n {treeStats.validation.issues.map((issue, i) => (\n <div key={i}>{issue}</div>\n ))}\n </div>\n )}\n </div>\n\n <div style={sectionStyle} data-devtools-section=\"event-log\">\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 6 }}>\n <div style={headingStyle} title=\"Event log\">Event Log ({events.length})</div>\n {events.length > 0 && (\n <button onClick={onClearEvents} style={clearBtnStyle}>Clear</button>\n )}\n </div>\n <div style={eventListStyle}>\n {events.length === 0 ? (\n <div style={{ fontSize: 11, opacity: 0.4, padding: '8px 0' }}>\n No events yet. Drag some blocks!\n </div>\n ) : (\n events.map(event => (\n <div key={event.id} style={eventItemStyle}>\n <span style={timeStyle}>{formatTime(event.timestamp)}</span>\n <span style={badgeStyle(TYPE_COLORS[event.type])} title={TYPE_TOOLTIPS[event.type]}>{TYPE_LABELS[event.type]}</span>\n <span style={{ wordBreak: 'break-word' }}>{event.summary}</span>\n </div>\n ))\n )}\n </div>\n </div>\n\n <div style={sectionStyle} data-devtools-section=\"performance\">\n <div style={headingStyle} title=\"Render metrics\">Performance</div>\n <div style={statRowStyle} title=\"Render count\">\n <span>Render Count</span>\n <span style={statValueStyle}>{renderCountRef.current}</span>\n </div>\n <div style={statRowStyle} title=\"Time since previous render\">\n <span>Last Render</span>\n <span style={statValueStyle}>{renderTime.toFixed(1)}ms</span>\n </div>\n <div style={statRowStyle}>\n <span style={{\n ...statValueStyle,\n color: blockCountDelta > 0 ? '#10b981' : blockCountDelta < 0 ? '#ef4444' : undefined,\n }}>\n {blockCountDelta > 0 ? '+' : ''}{blockCountDelta}\n </span>\n </div>\n </div>\n </div>\n\n {showDiff && (\n <div style={diffColumnStyle}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 8 }}>\n <div style={headingStyle} title=\"Tree structure diff\">Structure</div>\n <div style={{ display: 'flex', gap: 10, fontSize: 11, fontWeight: 500 }}>\n {diffStats.added > 0 && (\n <span style={{ color: '#34d399', display: 'flex', alignItems: 'center', gap: 4 }}>\n <span style={{ width: 5, height: 5, borderRadius: '50%', background: '#34d399', display: 'inline-block' }} />\n {diffStats.added} new\n </span>\n )}\n {diffStats.moved > 0 && (\n <span style={{ color: '#fbbf24', display: 'flex', alignItems: 'center', gap: 4 }}>\n <span style={{ width: 5, height: 5, borderRadius: '50%', background: '#fbbf24', display: 'inline-block' }} />\n {diffStats.moved} moved\n </span>\n )}\n {diffStats.added === 0 && diffStats.moved === 0 && (\n <span style={{ opacity: 0.4 }}>No changes</span>\n )}\n </div>\n </div>\n <div style={{ fontFamily: 'monospace', fontSize: 11, lineHeight: '1.7' }}>\n {diffTree.map(({ block, changeType, depth }) => (\n <div\n key={block.id}\n style={{\n paddingLeft: depth * 14,\n padding: '2px 6px 2px ' + (depth * 14 + 6) + 'px',\n borderRadius: 4,\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n ...diffRowColor(changeType),\n }}\n >\n <span style={{ width: 12, textAlign: 'center', fontWeight: 700, fontSize: 10 }}>\n {changeType === 'added' && '+'}\n {changeType === 'moved' && '~'}\n </span>\n <span style={{\n textTransform: 'uppercase',\n fontSize: 9,\n letterSpacing: '0.05em',\n width: 50,\n flexShrink: 0,\n opacity: changeType === 'unchanged' ? 0.5 : 1,\n }}>\n {block.type}\n </span>\n <span style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n flex: 1,\n minWidth: 0,\n }}>\n {getLabel(block)}\n </span>\n <span style={{\n fontFamily: 'monospace',\n fontSize: 10,\n flexShrink: 0,\n padding: '1px 5px',\n borderRadius: 3,\n ...(changeType === 'added'\n ? { background: 'rgba(16,185,129,0.2)', color: '#34d399' }\n : changeType === 'moved'\n ? { background: 'rgba(245,158,11,0.2)', color: '#fbbf24' }\n : { background: 'rgba(128,128,128,0.15)', color: 'rgba(200,200,200,0.4)' }),\n }}>\n {String(block.order)}\n </span>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </>\n )\n}\n"]}
|