react-dragdrop-kit 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +269 -264
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kanban.esm.js.map +1 -1
- package/dist/kanban.js.map +1 -1
- package/dist/src/components/DragDropList.d.ts +1 -1
- package/dist/src/hooks/useDragDropMonitor.d.ts +4 -2
- package/dist/src/hooks/useDragDropMonitor.logic.d.ts +39 -0
- package/dist/src/types/index.d.ts +1 -0
- package/package.json +10 -11
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/styles/defaultStyles.ts","../src/components/DraggableItemWrapper.tsx","../src/utils/order.ts","../src/hooks/useDragDropMonitor.ts","../src/components/DragDropList.tsx"],"sourcesContent":["export const defaultStyles = {\r\n container: {\r\n default: {\r\n minHeight: \"200px\",\r\n transition: \"all 0.2s ease\",\r\n borderRadius: \"8px\",\r\n border: \"1px solid #e2e8f0\",\r\n backgroundColor: \"#ffffff\",\r\n display: \"flex\",\r\n flexDirection: \"column\" as const,\r\n gap: \"16px\",\r\n padding: \"16px\",\r\n },\r\n dragging: {\r\n backgroundColor: \"rgba(66, 153, 225, 0.05)\",\r\n borderColor: \"#3182ce\",\r\n },\r\n horizontal: {\r\n flexDirection: \"row\" as const,\r\n flexWrap: \"wrap\" as const,\r\n },\r\n },\r\n item: {\r\n default: {\r\n transition: \"all 0.2s ease\",\r\n cursor: \"grab\",\r\n userSelect: \"none\" as const,\r\n position: \"relative\" as const,\r\n },\r\n dragging: {\r\n opacity: 0.5,\r\n cursor: \"grabbing\",\r\n },\r\n hover: {\r\n transform: \"scale(1.02)\",\r\n boxShadow: \"0 4px 6px rgba(0, 0, 0, 0.1)\",\r\n },\r\n disabled: {\r\n cursor: \"not-allowed\",\r\n opacity: 0.6,\r\n },\r\n },\r\n preview: {\r\n position: \"fixed\" as const,\r\n pointerEvents: \"none\" as const,\r\n zIndex: 9999,\r\n opacity: 0.8,\r\n transform: \"rotate(2deg)\",\r\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.15)\",\r\n },\r\n dropIndicator: {\r\n position: \"absolute\" as const,\r\n height: \"2px\",\r\n backgroundColor: \"#3182ce\",\r\n left: 0,\r\n right: 0,\r\n zIndex: 10,\r\n transition: \"all 0.2s ease\",\r\n },\r\n};\r\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\r\nimport { combine } from \"@atlaskit/pragmatic-drag-and-drop/combine\";\r\nimport {\n draggable,\n dropTargetForElements,\n} from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport { attachClosestEdge } from \"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge\";\nimport type { DraggableItemWrapperProps, DraggableItem } from \"../types\";\nimport { defaultStyles } from \"../styles/defaultStyles\";\n\r\nconst DRAGGABLE_ITEM = \"draggable-item\";\r\n\r\nexport function DraggableItemWrapper<T extends DraggableItem>({\r\n item,\r\n index,\r\n children,\r\n className = \"\",\r\n style = {},\r\n dragPreviewClassName = \"\",\r\n dragPreviewStyle = {},\r\n onDragStart,\r\n onDragEnd,\r\n disabled = false,\r\n showDropIndicator = false,\r\n dropIndicatorClassName = \"\",\n dropIndicatorStyle = {},\n dropIndicatorPosition = \"bottom\",\n direction = \"vertical\",\n dragHandle,\n}: DraggableItemWrapperProps<T>) {\n const elementRef = useRef<HTMLDivElement>(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [isHovered, setIsHovered] = useState(false);\r\n const [dropPosition, setDropPosition] = useState<\"top\" | \"bottom\" | null>(\r\n null\r\n );\r\n\r\n const getItemStyles = (): React.CSSProperties => {\r\n const baseStyle = { ...defaultStyles.item.default };\r\n\r\n if (disabled) {\r\n Object.assign(baseStyle, defaultStyles.item.disabled);\r\n } else if (isDragging) {\r\n Object.assign(baseStyle, defaultStyles.item.dragging);\r\n } else if (isHovered) {\r\n Object.assign(baseStyle, defaultStyles.item.hover);\r\n }\r\n\r\n return { ...baseStyle, ...style };\r\n };\r\n\r\n const getPreviewStyles = (): React.CSSProperties => {\r\n return { ...defaultStyles.preview, ...dragPreviewStyle };\r\n };\r\n\r\n const createDraggable = useCallback(\n (element: HTMLElement) => {\n if (disabled) return () => {};\n const dragHandleElement = dragHandle\n ? element.querySelector(dragHandle)\n : undefined;\n\n return draggable({\n element,\n dragHandle: dragHandleElement ?? undefined,\n canDrag: () => !dragHandle || Boolean(dragHandleElement),\n getInitialData: () => ({\n type: DRAGGABLE_ITEM,\n id: item.id,\n index,\r\n }),\r\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\r\n const previewElement = element.cloneNode(true) as HTMLElement;\r\n const previewStyles = getPreviewStyles();\r\n\r\n // Apply custom preview class if provided\r\n if (dragPreviewClassName) {\r\n previewElement.className = dragPreviewClassName;\r\n }\r\n\r\n Object.assign(previewElement.style, previewStyles, {\r\n width: `${element?.offsetWidth || 100}px`,\r\n height: `${element?.offsetHeight || 50}px`,\r\n });\r\n\r\n document.body.appendChild(previewElement);\r\n if (nativeSetDragImage) {\r\n nativeSetDragImage(previewElement, 20, 20);\r\n }\r\n requestAnimationFrame(() => previewElement.remove());\r\n },\r\n onDragStart: () => {\r\n setIsDragging(true);\r\n onDragStart?.(item, index);\r\n },\r\n onDrop: () => {\r\n setIsDragging(false);\r\n onDragEnd?.(item, index);\r\n },\r\n });\r\n },\r\n [\r\n item,\r\n index,\n dragHandle,\n dragPreviewClassName,\n dragPreviewStyle,\n onDragStart,\n onDragEnd,\r\n disabled,\r\n ]\r\n );\r\n\r\n const createDropTarget = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n\r\n return dropTargetForElements({\n element,\n getData: ({ input, element: targetElement }) => {\n const baseData = {\n type: DRAGGABLE_ITEM,\n id: item.id,\n index,\n };\n const allowedEdges =\n direction === \"horizontal\" ? ([\"left\", \"right\"] as const) : ([\"top\", \"bottom\"] as const);\n\n return attachClosestEdge(baseData, {\n input,\n element: targetElement,\n allowedEdges: [...allowedEdges],\n });\n },\n canDrop: ({ source }) => source.data?.type === DRAGGABLE_ITEM,\n getIsSticky: () => true,\n onDragEnter: ({ source, self }) => {\n if (source.data?.id !== self.data?.id) {\n setIsHovered(true);\n if (showDropIndicator) {\n setDropPosition(dropIndicatorPosition);\r\n }\r\n }\r\n },\r\n onDragLeave: () => {\r\n setIsHovered(false);\r\n setDropPosition(null);\r\n },\r\n onDrop: () => {\r\n setIsHovered(false);\r\n setDropPosition(null);\r\n },\r\n });\n },\n [item.id, index, direction, disabled, showDropIndicator, dropIndicatorPosition]\n );\n\r\n useEffect(() => {\r\n const element = elementRef.current;\r\n if (!element) return;\r\n\r\n element.setAttribute(\"data-index\", index.toString());\r\n\r\n if (disabled) {\r\n // provide a no-op cleanup to satisfy all code paths\r\n return () => {};\r\n }\r\n\r\n // normal draggable + droptarget setup\r\n return combine(createDraggable(element), createDropTarget(element));\r\n }, [index, createDraggable, createDropTarget, disabled]);\r\n\r\n return (\r\n <div ref={elementRef} className={className} style={getItemStyles()}>\r\n {showDropIndicator && dropPosition === \"top\" && (\r\n <div\r\n className={dropIndicatorClassName}\r\n style={{\r\n ...defaultStyles.dropIndicator,\r\n ...dropIndicatorStyle,\r\n top: -1,\r\n }}\r\n />\r\n )}\r\n {children}\r\n {showDropIndicator && dropPosition === \"bottom\" && (\r\n <div\r\n className={dropIndicatorClassName}\r\n style={{\r\n ...defaultStyles.dropIndicator,\r\n ...dropIndicatorStyle,\r\n bottom: -1,\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","import type { DraggableItem, OrderUpdate } from '../types';\n\nexport function reorder<T>(list: T[], startIndex: number, endIndex: number): T[] {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n result.splice(endIndex, 0, removed);\n return result;\n}\n\nexport function normalizeDestinationIndex(params: {\n itemCount: number;\n sourceIndex: number;\n rawDestinationIndex: number;\n isSameList: boolean;\n}): number {\n const { itemCount, sourceIndex, rawDestinationIndex, isSameList } = params;\n\n if (itemCount <= 0) return 0;\n\n const maxRaw = itemCount;\n const clampedRaw = Math.max(0, Math.min(rawDestinationIndex, maxRaw));\n const adjusted = isSameList && sourceIndex < clampedRaw ? clampedRaw - 1 : clampedRaw;\n const maxFinal = isSameList ? itemCount - 1 : itemCount;\n\n return Math.max(0, Math.min(adjusted, maxFinal));\n}\n\nexport function reorderMany<T>(list: T[], selectedIndexes: number[], rawDestinationIndex: number): T[] {\n const uniqueIndexes = Array.from(\n new Set(selectedIndexes.filter((index) => index >= 0 && index < list.length))\n ).sort((a, b) => a - b);\n\n if (uniqueIndexes.length === 0) return list;\n\n const selectedSet = new Set(uniqueIndexes);\n const moving = uniqueIndexes.map((index) => list[index]);\n const remaining = list.filter((_, index) => !selectedSet.has(index));\n\n const clampedRaw = Math.max(0, Math.min(rawDestinationIndex, list.length));\n const removedBeforeDestination = uniqueIndexes.filter((index) => index < clampedRaw).length;\n const insertionIndex = Math.max(\n 0,\n Math.min(clampedRaw - removedBeforeDestination, remaining.length)\n );\n\n const result = [...remaining];\n result.splice(insertionIndex, 0, ...moving);\n return result;\n}\n\nexport function calculateOrderUpdates<T extends DraggableItem>(oldItems: T[], newItems: T[]): OrderUpdate[] {\n const oldIndexById = new Map(oldItems.map((item, index) => [item.id, index]));\n\n return newItems.flatMap((item, index) => {\n const oldIndex = oldIndexById.get(item.id);\n if (oldIndex === undefined || oldIndex === index) return [];\n return [{ id: item.id, newPosition: index, moved: true }];\n });\n}\n","import { useCallback, useEffect } from \"react\";\nimport { monitorForElements } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport { extractClosestEdge } from \"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge\";\nimport type { ElementEventPayloadMap } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport type { DraggableItem, OrderUpdate } from \"../types\";\nimport {\n reorder,\n reorderMany,\n normalizeDestinationIndex,\n calculateOrderUpdates,\n} from \"../utils/order\";\n\nexport function useDragDropMonitor<T extends DraggableItem>({\n items,\n onReorder,\n disabled = false,\n direction = \"vertical\",\n selectedIds = [],\n multiDragEnabled = false,\n}: {\n items: T[];\n onReorder: (newItems: T[], orderUpdates: OrderUpdate[]) => void;\n disabled?: boolean;\n direction?: \"vertical\" | \"horizontal\";\n selectedIds?: string[];\n multiDragEnabled?: boolean;\n}) {\n const handleDrop = useCallback(\n ({ location, source }: ElementEventPayloadMap[\"onDrop\"]) => {\n const sourceId = source.data?.id as string | undefined;\n const sourceIndex = source.data?.index as number | undefined;\n if (sourceId === undefined || sourceIndex === undefined) return;\n\n const { dropTargets } = location.current;\n const destinationTarget = dropTargets.find(\n (target) =>\n target.data?.type === \"draggable-item\" &&\n target.data?.id !== sourceId\n );\n const containerTarget = dropTargets.find(\n (target) => target.data?.type === \"container\"\n );\n\n if (!destinationTarget && !containerTarget) return;\n\n let rawDestinationIndex = items.length;\n if (destinationTarget) {\n const targetIndex = Number(destinationTarget.data?.index);\n if (!Number.isFinite(targetIndex)) return;\n const edge = extractClosestEdge(destinationTarget.data);\n const isAfter =\n edge === \"bottom\" || (direction === \"horizontal\" && edge === \"right\");\n rawDestinationIndex = isAfter ? targetIndex + 1 : targetIndex;\n }\n\n const oldItems = [...items];\n let newItems: T[] = items;\n\n if (multiDragEnabled) {\n const selectedSet = new Set(selectedIds);\n if (!selectedSet.has(sourceId)) {\n selectedSet.clear();\n }\n selectedSet.add(sourceId);\n\n const selectedIndexes = items\n .map((item, index) => (selectedSet.has(item.id) ? index : -1))\n .filter((index) => index !== -1);\n\n if (selectedIndexes.length > 1) {\n newItems = reorderMany(items, selectedIndexes, rawDestinationIndex);\n } else {\n const destinationIndex = normalizeDestinationIndex({\n itemCount: items.length,\n sourceIndex,\n rawDestinationIndex,\n isSameList: true,\n });\n newItems = reorder(items, sourceIndex, destinationIndex);\n }\n } else {\n const destinationIndex = normalizeDestinationIndex({\n itemCount: items.length,\n sourceIndex,\n rawDestinationIndex,\n isSameList: true,\n });\n newItems = reorder(items, sourceIndex, destinationIndex);\n }\n\n const isChanged = newItems.some((item, index) => item.id !== oldItems[index]?.id);\n if (!isChanged) return;\n\n const orderUpdates = calculateOrderUpdates(oldItems, newItems);\n onReorder(newItems, orderUpdates);\n },\n [items, onReorder, direction, selectedIds, multiDragEnabled]\n );\n\n useEffect(() => {\n if (disabled) return;\n return monitorForElements({\n onDrop: handleDrop,\n });\n }, [disabled, handleDrop]);\n\n return useCallback(() => {}, []);\n}\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\nimport { dropTargetForElements } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport { DraggableItemWrapper } from \"./DraggableItemWrapper\";\nimport type { DragDropListProps, DraggableItem } from \"../types\";\nimport { useDragDropMonitor } from \"../hooks/useDragDropMonitor\";\nimport { defaultStyles } from \"../styles/defaultStyles\";\r\n\r\nexport function DragDropList<T extends DraggableItem>({\r\n items,\r\n onReorder,\r\n renderItem,\r\n containerClassName = \"\",\r\n containerStyle = {},\r\n itemClassName = \"\",\r\n itemStyle = {},\r\n dragPreviewClassName = \"\",\r\n dragPreviewStyle = {},\r\n onDragStart,\r\n onDragEnd,\r\n disabled = false,\r\n gap,\r\n direction = \"vertical\",\r\n showDropIndicator = false,\r\n dropIndicatorClassName = \"\",\n dropIndicatorStyle = {},\n dropIndicatorPosition = \"bottom\",\n dragHandle,\n selectedIds = [],\n multiDragEnabled = false,\n}: DragDropListProps<T>) {\n const containerRef = useRef<HTMLDivElement>(null);\n useDragDropMonitor({\n items,\n onReorder,\n disabled,\n direction,\n selectedIds,\n multiDragEnabled,\n });\n const [isDraggingOver, setIsDraggingOver] = useState(false);\n\r\n const getContainerStyles = (): React.CSSProperties => {\r\n const baseStyle = { ...defaultStyles.container.default };\r\n\r\n if (direction === \"horizontal\") {\r\n Object.assign(baseStyle, defaultStyles.container.horizontal);\r\n }\r\n\r\n if (isDraggingOver) {\r\n Object.assign(baseStyle, defaultStyles.container.dragging);\r\n }\r\n\r\n if (gap !== undefined) {\r\n baseStyle.gap = typeof gap === \"number\" ? `${gap}px` : gap;\r\n }\r\n\r\n return { ...baseStyle, ...containerStyle };\r\n };\r\n\r\n const createDropTarget = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n\r\n return dropTargetForElements({\r\n element,\r\n getData: () => ({ type: \"container\" }),\r\n onDragEnter: () => setIsDraggingOver(true),\r\n onDragLeave: () => setIsDraggingOver(false),\r\n onDrop: () => setIsDraggingOver(false),\r\n });\r\n },\r\n [disabled]\r\n );\r\n\r\n useEffect(() => {\n const element = containerRef.current;\n if (!element || disabled) return;\n\n return createDropTarget(element);\n }, [createDropTarget, disabled]);\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={containerClassName}\r\n style={getContainerStyles()}\r\n >\r\n {items.map((item, index) => (\r\n <DraggableItemWrapper\r\n key={item.id}\r\n item={item}\r\n index={index}\r\n className={itemClassName}\r\n style={itemStyle}\r\n dragPreviewClassName={dragPreviewClassName}\r\n dragPreviewStyle={dragPreviewStyle}\r\n onDragStart={onDragStart}\r\n onDragEnd={onDragEnd}\r\n disabled={disabled}\r\n showDropIndicator={showDropIndicator}\r\n dropIndicatorClassName={dropIndicatorClassName}\n dropIndicatorStyle={dropIndicatorStyle}\n dropIndicatorPosition={dropIndicatorPosition}\n direction={direction}\n dragHandle={dragHandle}\n >\n {renderItem(item, index)}\n </DraggableItemWrapper>\n ))}\r\n </div>\r\n );\r\n}\r\n"],"names":["defaultStyles","container","default","minHeight","transition","borderRadius","border","backgroundColor","display","flexDirection","gap","padding","dragging","borderColor","horizontal","flexWrap","item","cursor","userSelect","position","opacity","hover","transform","boxShadow","disabled","preview","pointerEvents","zIndex","dropIndicator","height","left","right","DRAGGABLE_ITEM","DraggableItemWrapper","index","children","className","style","dragPreviewClassName","dragPreviewStyle","onDragStart","onDragEnd","showDropIndicator","dropIndicatorClassName","dropIndicatorStyle","dropIndicatorPosition","direction","dragHandle","elementRef","useRef","isDragging","setIsDragging","useState","isHovered","setIsHovered","dropPosition","setDropPosition","createDraggable","useCallback","element","dragHandleElement","querySelector","undefined","draggable","canDrag","Boolean","getInitialData","type","id","onGenerateDragPreview","nativeSetDragImage","previewElement","cloneNode","previewStyles","Object","assign","width","offsetWidth","offsetHeight","document","body","appendChild","requestAnimationFrame","remove","onDrop","createDropTarget","dropTargetForElements","getData","input","targetElement","baseData","attachClosestEdge","allowedEdges","canDrop","source","_a","data","getIsSticky","onDragEnter","self","_b","onDragLeave","useEffect","current","setAttribute","toString","combine","React","createElement","ref","baseStyle","getItemStyles","top","bottom","reorder","list","startIndex","endIndex","result","Array","from","removed","splice","normalizeDestinationIndex","params","itemCount","sourceIndex","rawDestinationIndex","isSameList","maxRaw","clampedRaw","Math","max","min","adjusted","maxFinal","useDragDropMonitor","items","onReorder","selectedIds","multiDragEnabled","handleDrop","location","sourceId","dropTargets","destinationTarget","find","target","containerTarget","length","targetIndex","Number","_c","isFinite","edge","extractClosestEdge","oldItems","newItems","selectedSet","Set","has","clear","add","selectedIndexes","map","filter","uniqueIndexes","sort","a","b","moving","remaining","_","removedBeforeDestination","insertionIndex","reorderMany","destinationIndex","isChanged","some","orderUpdates","oldIndexById","Map","flatMap","oldIndex","get","newPosition","moved","calculateOrderUpdates","monitorForElements","DragDropList","renderItem","containerClassName","containerStyle","itemClassName","itemStyle","containerRef","isDraggingOver","setIsDraggingOver","getContainerStyles","key"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/styles/defaultStyles.ts","../src/components/DraggableItemWrapper.tsx","../src/utils/order.ts","../src/hooks/useDragDropMonitor.logic.ts","../src/hooks/useDragDropMonitor.ts","../src/components/DragDropList.tsx"],"sourcesContent":["export const defaultStyles = {\r\n container: {\r\n default: {\r\n minHeight: \"200px\",\r\n transition: \"all 0.2s ease\",\r\n borderRadius: \"8px\",\r\n border: \"1px solid #e2e8f0\",\r\n backgroundColor: \"#ffffff\",\r\n display: \"flex\",\r\n flexDirection: \"column\" as const,\r\n gap: \"16px\",\r\n padding: \"16px\",\r\n },\r\n dragging: {\r\n backgroundColor: \"rgba(66, 153, 225, 0.05)\",\r\n borderColor: \"#3182ce\",\r\n },\r\n horizontal: {\r\n flexDirection: \"row\" as const,\r\n flexWrap: \"wrap\" as const,\r\n },\r\n },\r\n item: {\r\n default: {\r\n transition: \"all 0.2s ease\",\r\n cursor: \"grab\",\r\n userSelect: \"none\" as const,\r\n position: \"relative\" as const,\r\n },\r\n dragging: {\r\n opacity: 0.5,\r\n cursor: \"grabbing\",\r\n },\r\n hover: {\r\n transform: \"scale(1.02)\",\r\n boxShadow: \"0 4px 6px rgba(0, 0, 0, 0.1)\",\r\n },\r\n disabled: {\r\n cursor: \"not-allowed\",\r\n opacity: 0.6,\r\n },\r\n },\r\n preview: {\r\n position: \"fixed\" as const,\r\n pointerEvents: \"none\" as const,\r\n zIndex: 9999,\r\n opacity: 0.8,\r\n transform: \"rotate(2deg)\",\r\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.15)\",\r\n },\r\n dropIndicator: {\r\n position: \"absolute\" as const,\r\n height: \"2px\",\r\n backgroundColor: \"#3182ce\",\r\n left: 0,\r\n right: 0,\r\n zIndex: 10,\r\n transition: \"all 0.2s ease\",\r\n },\r\n};\r\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\r\nimport { combine } from \"@atlaskit/pragmatic-drag-and-drop/combine\";\r\nimport {\r\n draggable,\r\n dropTargetForElements,\r\n} from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\r\nimport { attachClosestEdge } from \"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge\";\r\nimport type { DraggableItemWrapperProps, DraggableItem } from \"../types\";\r\nimport { defaultStyles } from \"../styles/defaultStyles\";\r\n\r\nconst DRAGGABLE_ITEM = \"draggable-item\";\r\n\r\nexport function DraggableItemWrapper<T extends DraggableItem>({\r\n item,\r\n index,\r\n children,\r\n className = \"\",\r\n style = {},\r\n dragPreviewClassName = \"\",\r\n dragPreviewStyle = {},\r\n onDragStart,\r\n onDragEnd,\r\n disabled = false,\r\n showDropIndicator = false,\r\n dropIndicatorClassName = \"\",\r\n dropIndicatorStyle = {},\r\n dropIndicatorPosition = \"bottom\",\r\n direction = \"vertical\",\r\n dragHandle,\r\n}: DraggableItemWrapperProps<T>) {\r\n const elementRef = useRef<HTMLDivElement>(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [isHovered, setIsHovered] = useState(false);\r\n const [dropPosition, setDropPosition] = useState<\"top\" | \"bottom\" | null>(\r\n null\r\n );\r\n\r\n const getItemStyles = (): React.CSSProperties => {\r\n const baseStyle = { ...defaultStyles.item.default };\r\n\r\n if (disabled) {\r\n Object.assign(baseStyle, defaultStyles.item.disabled);\r\n } else if (isDragging) {\r\n Object.assign(baseStyle, defaultStyles.item.dragging);\r\n } else if (isHovered) {\r\n Object.assign(baseStyle, defaultStyles.item.hover);\r\n }\r\n\r\n return { ...baseStyle, ...style };\r\n };\r\n\r\n const getPreviewStyles = (): React.CSSProperties => {\r\n return { ...defaultStyles.preview, ...dragPreviewStyle };\r\n };\r\n\r\n const createDraggable = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n const dragHandleElement = dragHandle\r\n ? element.querySelector(dragHandle)\r\n : undefined;\r\n\r\n return draggable({\r\n element,\r\n dragHandle: dragHandleElement ?? undefined,\r\n canDrag: () => !dragHandle || Boolean(dragHandleElement),\r\n getInitialData: () => ({\r\n type: DRAGGABLE_ITEM,\r\n id: item.id,\r\n index,\r\n }),\r\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\r\n const previewElement = element.cloneNode(true) as HTMLElement;\r\n const previewStyles = getPreviewStyles();\r\n\r\n // Apply custom preview class if provided\r\n if (dragPreviewClassName) {\r\n previewElement.className = dragPreviewClassName;\r\n }\r\n\r\n Object.assign(previewElement.style, previewStyles, {\r\n width: `${element?.offsetWidth || 100}px`,\r\n height: `${element?.offsetHeight || 50}px`,\r\n });\r\n\r\n document.body.appendChild(previewElement);\r\n if (nativeSetDragImage) {\r\n nativeSetDragImage(previewElement, 20, 20);\r\n }\r\n requestAnimationFrame(() => previewElement.remove());\r\n },\r\n onDragStart: () => {\r\n setIsDragging(true);\r\n onDragStart?.(item, index);\r\n },\r\n onDrop: () => {\r\n setIsDragging(false);\r\n onDragEnd?.(item, index);\r\n },\r\n });\r\n },\r\n [\r\n item,\r\n index,\r\n dragHandle,\r\n dragPreviewClassName,\r\n dragPreviewStyle,\r\n onDragStart,\r\n onDragEnd,\r\n disabled,\r\n ]\r\n );\r\n\r\n const createDropTarget = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n\r\n return dropTargetForElements({\r\n element,\r\n getData: ({ input, element: targetElement }) => {\r\n const baseData = {\r\n type: DRAGGABLE_ITEM,\r\n id: item.id,\r\n index,\r\n };\r\n const allowedEdges =\r\n direction === \"horizontal\" ? ([\"left\", \"right\"] as const) : ([\"top\", \"bottom\"] as const);\r\n\r\n return attachClosestEdge(baseData, {\r\n input,\r\n element: targetElement,\r\n allowedEdges: [...allowedEdges],\r\n });\r\n },\r\n canDrop: ({ source }) =>\n source.data?.type === DRAGGABLE_ITEM && source.data?.id !== item.id,\n onDragEnter: ({ source, self }) => {\n if (source.data?.id !== self.data?.id) {\n setIsHovered(true);\n if (showDropIndicator) {\r\n setDropPosition(dropIndicatorPosition);\r\n }\r\n }\r\n },\r\n onDragLeave: () => {\r\n setIsHovered(false);\r\n setDropPosition(null);\r\n },\r\n onDrop: () => {\r\n setIsHovered(false);\r\n setDropPosition(null);\r\n },\r\n });\r\n },\r\n [item.id, index, direction, disabled, showDropIndicator, dropIndicatorPosition]\r\n );\r\n\r\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n if (disabled) {\n // provide a no-op cleanup to satisfy all code paths\n return () => {};\n }\r\n\r\n // normal draggable + droptarget setup\r\n return combine(createDraggable(element), createDropTarget(element));\r\n }, [index, createDraggable, createDropTarget, disabled]);\r\n\r\n return (\r\n <div\n ref={elementRef}\n data-index={index}\n data-rdk-item-id={item.id}\n className={className}\n style={getItemStyles()}\n >\n {showDropIndicator && dropPosition === \"top\" && (\r\n <div\r\n className={dropIndicatorClassName}\r\n style={{\r\n ...defaultStyles.dropIndicator,\r\n ...dropIndicatorStyle,\r\n top: -1,\r\n }}\r\n />\r\n )}\r\n {children}\r\n {showDropIndicator && dropPosition === \"bottom\" && (\r\n <div\r\n className={dropIndicatorClassName}\r\n style={{\r\n ...defaultStyles.dropIndicator,\r\n ...dropIndicatorStyle,\r\n bottom: -1,\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","import type { DraggableItem, OrderUpdate } from '../types';\r\n\r\nexport function reorder<T>(list: T[], startIndex: number, endIndex: number): T[] {\r\n const result = Array.from(list);\r\n const [removed] = result.splice(startIndex, 1);\r\n result.splice(endIndex, 0, removed);\r\n return result;\r\n}\r\n\r\nexport function normalizeDestinationIndex(params: {\r\n itemCount: number;\r\n sourceIndex: number;\r\n rawDestinationIndex: number;\r\n isSameList: boolean;\r\n}): number {\r\n const { itemCount, sourceIndex, rawDestinationIndex, isSameList } = params;\r\n\r\n if (itemCount <= 0) return 0;\r\n\r\n const maxRaw = itemCount;\r\n const clampedRaw = Math.max(0, Math.min(rawDestinationIndex, maxRaw));\r\n const adjusted = isSameList && sourceIndex < clampedRaw ? clampedRaw - 1 : clampedRaw;\r\n const maxFinal = isSameList ? itemCount - 1 : itemCount;\r\n\r\n return Math.max(0, Math.min(adjusted, maxFinal));\r\n}\r\n\r\nexport function reorderMany<T>(list: T[], selectedIndexes: number[], rawDestinationIndex: number): T[] {\r\n const uniqueIndexes = Array.from(\r\n new Set(selectedIndexes.filter((index) => index >= 0 && index < list.length))\r\n ).sort((a, b) => a - b);\r\n\r\n if (uniqueIndexes.length === 0) return list;\r\n\r\n const selectedSet = new Set(uniqueIndexes);\r\n const moving = uniqueIndexes.map((index) => list[index]);\r\n const remaining = list.filter((_, index) => !selectedSet.has(index));\r\n\r\n const clampedRaw = Math.max(0, Math.min(rawDestinationIndex, list.length));\r\n const removedBeforeDestination = uniqueIndexes.filter((index) => index < clampedRaw).length;\r\n const insertionIndex = Math.max(\r\n 0,\r\n Math.min(clampedRaw - removedBeforeDestination, remaining.length)\r\n );\r\n\r\n const result = [...remaining];\r\n result.splice(insertionIndex, 0, ...moving);\r\n return result;\r\n}\r\n\r\nexport function calculateOrderUpdates<T extends DraggableItem>(oldItems: T[], newItems: T[]): OrderUpdate[] {\r\n const oldIndexById = new Map(oldItems.map((item, index) => [item.id, index]));\r\n\r\n return newItems.flatMap((item, index) => {\r\n const oldIndex = oldIndexById.get(item.id);\r\n if (oldIndex === undefined || oldIndex === index) return [];\r\n return [{ id: item.id, newPosition: index, moved: true }];\r\n });\r\n}\r\n","import { extractClosestEdge } from \"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge\";\nimport type { ElementEventPayloadMap } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport type { DraggableItem } from \"../types\";\nimport { reorder, reorderMany, normalizeDestinationIndex } from \"../utils/order\";\n\nexport type ListDirection = \"vertical\" | \"horizontal\";\nexport const DEFAULT_DIRECTION: ListDirection = \"vertical\";\n\nexport type MonitorOptions = {\n direction: ListDirection;\n selectedIds: string[];\n multiDragEnabled: boolean;\n liveReorder: boolean;\n};\n\nexport type DestinationInfo = {\n rawDestinationIndex: number;\n previewKey: string;\n} | null;\n\ntype LocationCurrent = ElementEventPayloadMap[\"onDrop\"][\"location\"][\"current\"];\n\nfunction getDistanceToTargetCenter(\n target: LocationCurrent[\"dropTargets\"][number],\n input: LocationCurrent[\"input\"]\n): number {\n const rect = target.element.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n return (input.clientX - centerX) ** 2 + (input.clientY - centerY) ** 2;\n}\n\nfunction getClosestDestinationTarget(params: {\n dropTargets: LocationCurrent[\"dropTargets\"];\n input: LocationCurrent[\"input\"];\n sourceId: string;\n excludedIds: Set<string>;\n}): LocationCurrent[\"dropTargets\"][number] | null {\n const { dropTargets, input, sourceId, excludedIds } = params;\n\n const candidates = dropTargets.filter((target) => {\n if (target.data?.type !== \"draggable-item\") return false;\n const targetId = String(target.data?.id ?? \"\");\n if (!targetId || targetId === sourceId) return false;\n return !excludedIds.has(targetId);\n });\n\n if (candidates.length === 0) return null;\n if (candidates.length === 1) return candidates[0];\n\n return candidates.reduce((closest, current) =>\n getDistanceToTargetCenter(current, input) <\n getDistanceToTargetCenter(closest, input)\n ? current\n : closest\n );\n}\n\nfunction getContainerInsertionIndex<T extends DraggableItem>(params: {\n containerElement: Element;\n input: LocationCurrent[\"input\"];\n direction: ListDirection;\n items: T[];\n excludedIds: Set<string>;\n}): number | null {\n const { containerElement, input, direction, items, excludedIds } = params;\n const indexById = new Map(items.map((item, index) => [item.id, index]));\n\n const itemElements = Array.from(\n containerElement.querySelectorAll<HTMLElement>(\"[data-rdk-item-id]\")\n );\n\n if (itemElements.length === 0) return 0;\n\n const targetPoint =\n direction === \"horizontal\" ? input.clientX : input.clientY;\n\n const points = itemElements\n .map((element) => {\n const itemId = element.getAttribute(\"data-rdk-item-id\");\n if (!itemId || excludedIds.has(itemId)) return null;\n\n const index = indexById.get(itemId);\n if (index === undefined) return null;\n\n const rect = element.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n const distance =\n (input.clientX - centerX) ** 2 + (input.clientY - centerY) ** 2;\n const centerOnAxis = direction === \"horizontal\" ? centerX : centerY;\n\n return { index, distance, centerOnAxis };\n })\n .filter(\n (\n point\n ): point is { index: number; distance: number; centerOnAxis: number } =>\n point !== null\n );\n\n if (points.length === 0) return null;\n\n const closest = points.reduce((nearest, current) =>\n current.distance < nearest.distance ? current : nearest\n );\n\n return targetPoint >= closest.centerOnAxis ? closest.index + 1 : closest.index;\n}\n\nexport function hasOrderChanged<T extends DraggableItem>(oldItems: T[], newItems: T[]): boolean {\n if (oldItems.length !== newItems.length) return true;\n return newItems.some((item, index) => item.id !== oldItems[index]?.id);\n}\n\nexport function getMovingIds<T extends DraggableItem>(params: {\n items: T[];\n sourceId: string;\n selectedIds: string[];\n multiDragEnabled: boolean;\n}): Set<string> {\n const { items, sourceId, selectedIds, multiDragEnabled } = params;\n\n if (!multiDragEnabled) return new Set([sourceId]);\n\n const idsInList = new Set(items.map((item) => item.id));\n const selectedSet = new Set(selectedIds.filter((id) => idsInList.has(id)));\n\n if (!selectedSet.has(sourceId)) {\n return new Set([sourceId]);\n }\n\n return selectedSet;\n}\n\nexport function reorderFromDragState<T extends DraggableItem>(params: {\n items: T[];\n sourceId: string;\n sourceIndex: number;\n rawDestinationIndex: number;\n selectedIds: string[];\n multiDragEnabled: boolean;\n}): T[] {\n const {\n items,\n sourceId,\n sourceIndex,\n rawDestinationIndex,\n selectedIds,\n multiDragEnabled,\n } = params;\n\n if (multiDragEnabled) {\n const selectedSet = new Set(selectedIds);\n if (!selectedSet.has(sourceId)) {\n selectedSet.clear();\n }\n selectedSet.add(sourceId);\n\n const selectedIndexes = items\n .map((item, index) => (selectedSet.has(item.id) ? index : -1))\n .filter((index) => index !== -1);\n\n if (selectedIndexes.length > 1) {\n return reorderMany(items, selectedIndexes, rawDestinationIndex);\n }\n }\n\n const destinationIndex = normalizeDestinationIndex({\n itemCount: items.length,\n sourceIndex,\n rawDestinationIndex,\n isSameList: true,\n });\n\n return reorder(items, sourceIndex, destinationIndex);\n}\n\nexport function resolveDestination<T extends DraggableItem>(params: {\n location: LocationCurrent;\n sourceId: string;\n sourceIndex: number;\n direction: ListDirection;\n items: T[];\n excludedIds: Set<string>;\n}): DestinationInfo {\n const { location, sourceId, sourceIndex, direction, items, excludedIds } = params;\n const { dropTargets, input } = location;\n\n const destinationTarget = getClosestDestinationTarget({\n dropTargets,\n input,\n sourceId,\n excludedIds,\n });\n\n const containerTarget = dropTargets.find(\n (target) => target.data?.type === \"container\"\n );\n\n if (!destinationTarget && !containerTarget) return null;\n\n if (!destinationTarget) {\n if (!containerTarget) return null;\n\n const insertionIndex = getContainerInsertionIndex({\n containerElement: containerTarget.element,\n input,\n direction,\n items,\n excludedIds,\n });\n\n const rawDestinationIndex = insertionIndex ?? items.length;\n\n return {\n rawDestinationIndex,\n previewKey: `container:${rawDestinationIndex}`,\n };\n }\n\n const targetId = String(destinationTarget.data?.id ?? \"\");\n if (!targetId) return null;\n\n const targetIndex = items.findIndex((item) => item.id === targetId);\n if (targetIndex === -1) {\n // Fallback to target.data.index is unreliable after live reorders.\n // If the target id is not present in current items, skip this update.\n return null;\n }\n\n const edge = extractClosestEdge(destinationTarget.data);\n let isAfter: boolean;\n\n // Slot-based semantics:\n // dropping on an item moves dragged item to that item's slot,\n // which is \"after\" when moving down and \"before\" when moving up.\n if (sourceIndex < targetIndex) {\n isAfter = true;\n } else if (sourceIndex > targetIndex) {\n isAfter = false;\n } else if (edge === null) {\n const rect = destinationTarget.element.getBoundingClientRect();\n const axisCenter =\n direction === \"horizontal\"\n ? rect.left + rect.width / 2\n : rect.top + rect.height / 2;\n const axisPoint = direction === \"horizontal\" ? input.clientX : input.clientY;\n isAfter = axisPoint >= axisCenter;\n } else {\n isAfter = edge === \"bottom\" || (direction === \"horizontal\" && edge === \"right\");\n }\n\n const rawDestinationIndex = isAfter ? targetIndex + 1 : targetIndex;\n\n return {\n rawDestinationIndex,\n previewKey: `item:${targetId}:${isAfter ? \"after\" : \"before\"}`,\n };\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { monitorForElements } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport type { ElementEventPayloadMap } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport type { DraggableItem, OrderUpdate } from \"../types\";\nimport { calculateOrderUpdates } from \"../utils/order\";\nimport {\n DEFAULT_DIRECTION,\n getMovingIds,\n hasOrderChanged,\n reorderFromDragState,\n resolveDestination,\n type ListDirection,\n type MonitorOptions,\n} from \"./useDragDropMonitor.logic\";\n\nexport function useDragDropMonitor<T extends DraggableItem>({\n items,\n onReorder,\n disabled = false,\n direction = DEFAULT_DIRECTION,\n selectedIds = [],\n multiDragEnabled = false,\n liveReorder = false,\n}: {\n items: T[];\n onReorder: (newItems: T[], orderUpdates: OrderUpdate[]) => void;\n disabled?: boolean;\n direction?: ListDirection;\n selectedIds?: string[];\n multiDragEnabled?: boolean;\n liveReorder?: boolean;\n}) {\n const itemsRef = useRef<T[]>(items);\n const onReorderRef = useRef(onReorder);\n const optionsRef = useRef<MonitorOptions>({\n direction,\n selectedIds,\n multiDragEnabled,\n liveReorder,\n });\n\n const dragSessionRef = useRef<{\n sourceId: string | null;\n movingIds: Set<string> | null;\n originalItems: T[] | null;\n didLiveReorder: boolean;\n lastPreviewKey: string | null;\n }>({\n sourceId: null,\n movingIds: null,\n originalItems: null,\n didLiveReorder: false,\n lastPreviewKey: null,\n });\n\n useEffect(() => {\n itemsRef.current = items;\n onReorderRef.current = onReorder;\n optionsRef.current = {\n direction,\n selectedIds,\n multiDragEnabled,\n liveReorder,\n };\n }, [items, onReorder, direction, selectedIds, multiDragEnabled, liveReorder]);\n\n const resetDragSession = useCallback(() => {\n dragSessionRef.current = {\n sourceId: null,\n movingIds: null,\n originalItems: null,\n didLiveReorder: false,\n lastPreviewKey: null,\n };\n }, []);\n\n const getSourceIndex = useCallback((sourceId: string, sourceDataIndex: unknown): number => {\n const currentItems = itemsRef.current;\n const currentIndex = currentItems.findIndex((item) => item.id === sourceId);\n if (currentIndex !== -1) return currentIndex;\n\n const parsedIndex = Number(sourceDataIndex);\n return Number.isFinite(parsedIndex) ? parsedIndex : -1;\n }, []);\n\n const getMovingIdsForSource = useCallback((sourceId: string): Set<string> => {\n const currentItems = itemsRef.current;\n const { selectedIds: currentSelectedIds, multiDragEnabled: currentMultiDragEnabled } =\n optionsRef.current;\n\n return getMovingIds({\n items: currentItems,\n sourceId,\n selectedIds: currentSelectedIds,\n multiDragEnabled: currentMultiDragEnabled,\n });\n }, []);\n\n const getSessionMovingIds = useCallback(\n (sourceId: string): Set<string> => {\n const sessionMovingIds = dragSessionRef.current.movingIds;\n if (sessionMovingIds) {\n return new Set(sessionMovingIds);\n }\n return getMovingIdsForSource(sourceId);\n },\n [getMovingIdsForSource]\n );\n\n const commitReorder = useCallback(\n ({\n sourceId,\n sourceIndex,\n rawDestinationIndex,\n }: {\n sourceId: string;\n sourceIndex: number;\n rawDestinationIndex: number;\n }): boolean => {\n const oldItems = [...itemsRef.current];\n const {\n selectedIds: currentSelectedIds,\n multiDragEnabled: currentMultiDragEnabled,\n } = optionsRef.current;\n\n const newItems = reorderFromDragState({\n items: oldItems,\n sourceId,\n sourceIndex,\n rawDestinationIndex,\n selectedIds: currentSelectedIds,\n multiDragEnabled: currentMultiDragEnabled,\n });\n\n if (!hasOrderChanged(oldItems, newItems)) return false;\n\n const orderUpdates = calculateOrderUpdates(oldItems, newItems);\n itemsRef.current = newItems;\n onReorderRef.current(newItems, orderUpdates);\n return true;\n },\n []\n );\n\n const handleDragStart = useCallback(\n ({ source }: ElementEventPayloadMap[\"onDragStart\"]) => {\n if (source.data?.type !== \"draggable-item\") return;\n\n const sourceId = source.data?.id as string | undefined;\n if (!sourceId) return;\n\n const currentItems = itemsRef.current;\n const { selectedIds: currentSelectedIds, multiDragEnabled: currentMultiDragEnabled } =\n optionsRef.current;\n const movingIds = getMovingIds({\n items: currentItems,\n sourceId,\n selectedIds: currentSelectedIds,\n multiDragEnabled: currentMultiDragEnabled,\n });\n\n dragSessionRef.current = {\n sourceId,\n movingIds,\n originalItems: optionsRef.current.liveReorder ? [...currentItems] : null,\n didLiveReorder: false,\n lastPreviewKey: null,\n };\n },\n []\n );\n\n const handleDropTargetChange = useCallback(\n ({ location, source }: ElementEventPayloadMap[\"onDropTargetChange\"]) => {\n if (source.data?.type !== \"draggable-item\") return;\n\n const { direction: currentDirection, liveReorder: currentLiveReorder } =\n optionsRef.current;\n if (!currentLiveReorder) return;\n\n const sourceId = source.data?.id as string | undefined;\n if (!sourceId) return;\n\n const sourceIndex = getSourceIndex(sourceId, source.data?.index);\n if (sourceIndex < 0) return;\n\n const currentItems = itemsRef.current;\n const movingIds = getSessionMovingIds(sourceId);\n const destination = resolveDestination({\n location: location.current,\n sourceId,\n sourceIndex,\n direction: currentDirection,\n items: currentItems,\n excludedIds: movingIds,\n });\n\n if (!destination) return;\n if (dragSessionRef.current.lastPreviewKey === destination.previewKey) return;\n\n const didReorder = commitReorder({\n sourceId,\n sourceIndex,\n rawDestinationIndex: destination.rawDestinationIndex,\n });\n\n dragSessionRef.current.lastPreviewKey = destination.previewKey;\n if (didReorder) {\n dragSessionRef.current.didLiveReorder = true;\n }\n },\n [getSourceIndex, getSessionMovingIds, commitReorder]\n );\n\n const handleDrop = useCallback(\n ({ location, source }: ElementEventPayloadMap[\"onDrop\"]) => {\n if (source.data?.type !== \"draggable-item\") {\n resetDragSession();\n return;\n }\n\n const sourceId = source.data?.id as string | undefined;\n if (!sourceId) {\n resetDragSession();\n return;\n }\n\n const { direction: currentDirection, liveReorder: currentLiveReorder } =\n optionsRef.current;\n const currentItems = itemsRef.current;\n const movingIds = getSessionMovingIds(sourceId);\n\n const sourceIndex = getSourceIndex(sourceId, source.data?.index);\n if (sourceIndex < 0) {\n resetDragSession();\n return;\n }\n\n const destination = resolveDestination({\n location: location.current,\n sourceId,\n sourceIndex,\n direction: currentDirection,\n items: currentItems,\n excludedIds: movingIds,\n });\n\n if (!destination) {\n const { originalItems, didLiveReorder } = dragSessionRef.current;\n if (currentLiveReorder && didLiveReorder && originalItems) {\n const oldItems = [...itemsRef.current];\n if (hasOrderChanged(oldItems, originalItems)) {\n const orderUpdates = calculateOrderUpdates(oldItems, originalItems);\n itemsRef.current = originalItems;\n onReorderRef.current(originalItems, orderUpdates);\n }\n }\n resetDragSession();\n return;\n }\n\n const { didLiveReorder, lastPreviewKey } = dragSessionRef.current;\n if (currentLiveReorder && didLiveReorder && lastPreviewKey === destination.previewKey) {\n resetDragSession();\n return;\n }\n\n commitReorder({\n sourceId,\n sourceIndex,\n rawDestinationIndex: destination.rawDestinationIndex,\n });\n resetDragSession();\n },\n [getSessionMovingIds, getSourceIndex, commitReorder, resetDragSession]\n );\n\n useEffect(() => {\n if (disabled) return;\n\n return monitorForElements({\n onDragStart: handleDragStart,\n onDropTargetChange: handleDropTargetChange,\n onDrop: handleDrop,\n });\n }, [disabled, handleDragStart, handleDropTargetChange, handleDrop]);\n\n // Kept for backward compatibility with existing tests/internals.\n return useCallback(() => {}, []);\n}\r\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\r\nimport { dropTargetForElements } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\r\nimport { DraggableItemWrapper } from \"./DraggableItemWrapper\";\r\nimport type { DragDropListProps, DraggableItem } from \"../types\";\r\nimport { useDragDropMonitor } from \"../hooks/useDragDropMonitor\";\r\nimport { defaultStyles } from \"../styles/defaultStyles\";\r\n\r\nexport function DragDropList<T extends DraggableItem>({\r\n items,\r\n onReorder,\r\n renderItem,\r\n containerClassName = \"\",\r\n containerStyle = {},\r\n itemClassName = \"\",\r\n itemStyle = {},\r\n dragPreviewClassName = \"\",\r\n dragPreviewStyle = {},\r\n onDragStart,\r\n onDragEnd,\r\n disabled = false,\r\n gap,\r\n direction = \"vertical\",\r\n showDropIndicator = false,\r\n dropIndicatorClassName = \"\",\r\n dropIndicatorStyle = {},\r\n dropIndicatorPosition = \"bottom\",\r\n dragHandle,\n selectedIds = [],\n multiDragEnabled = false,\n liveReorder = false,\n}: DragDropListProps<T>) {\n const containerRef = useRef<HTMLDivElement>(null);\r\n useDragDropMonitor({\n items,\n onReorder,\n disabled,\n direction,\n selectedIds,\n multiDragEnabled,\n liveReorder,\n });\n const [isDraggingOver, setIsDraggingOver] = useState(false);\r\n\r\n const getContainerStyles = (): React.CSSProperties => {\r\n const baseStyle = { ...defaultStyles.container.default };\r\n\r\n if (direction === \"horizontal\") {\r\n Object.assign(baseStyle, defaultStyles.container.horizontal);\r\n }\r\n\r\n if (isDraggingOver) {\r\n Object.assign(baseStyle, defaultStyles.container.dragging);\r\n }\r\n\r\n if (gap !== undefined) {\r\n baseStyle.gap = typeof gap === \"number\" ? `${gap}px` : gap;\r\n }\r\n\r\n return { ...baseStyle, ...containerStyle };\r\n };\r\n\r\n const createDropTarget = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n\r\n return dropTargetForElements({\r\n element,\r\n getData: () => ({ type: \"container\" }),\r\n onDragEnter: () => setIsDraggingOver(true),\r\n onDragLeave: () => setIsDraggingOver(false),\r\n onDrop: () => setIsDraggingOver(false),\r\n });\r\n },\r\n [disabled]\r\n );\r\n\r\n useEffect(() => {\r\n const element = containerRef.current;\r\n if (!element || disabled) return;\r\n\r\n return createDropTarget(element);\r\n }, [createDropTarget, disabled]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={containerClassName}\r\n style={getContainerStyles()}\r\n >\r\n {items.map((item, index) => (\r\n <DraggableItemWrapper\r\n key={item.id}\r\n item={item}\r\n index={index}\r\n className={itemClassName}\r\n style={itemStyle}\r\n dragPreviewClassName={dragPreviewClassName}\r\n dragPreviewStyle={dragPreviewStyle}\r\n onDragStart={onDragStart}\r\n onDragEnd={onDragEnd}\r\n disabled={disabled}\r\n showDropIndicator={showDropIndicator}\r\n dropIndicatorClassName={dropIndicatorClassName}\r\n dropIndicatorStyle={dropIndicatorStyle}\r\n dropIndicatorPosition={dropIndicatorPosition}\r\n direction={direction}\r\n dragHandle={dragHandle}\r\n >\r\n {renderItem(item, index)}\r\n </DraggableItemWrapper>\r\n ))}\r\n </div>\r\n );\r\n}\r\n"],"names":["defaultStyles","container","default","minHeight","transition","borderRadius","border","backgroundColor","display","flexDirection","gap","padding","dragging","borderColor","horizontal","flexWrap","item","cursor","userSelect","position","opacity","hover","transform","boxShadow","disabled","preview","pointerEvents","zIndex","dropIndicator","height","left","right","DRAGGABLE_ITEM","DraggableItemWrapper","index","children","className","style","dragPreviewClassName","dragPreviewStyle","onDragStart","onDragEnd","showDropIndicator","dropIndicatorClassName","dropIndicatorStyle","dropIndicatorPosition","direction","dragHandle","elementRef","useRef","isDragging","setIsDragging","useState","isHovered","setIsHovered","dropPosition","setDropPosition","createDraggable","useCallback","element","dragHandleElement","querySelector","undefined","draggable","canDrag","Boolean","getInitialData","type","id","onGenerateDragPreview","nativeSetDragImage","previewElement","cloneNode","previewStyles","Object","assign","width","offsetWidth","offsetHeight","document","body","appendChild","requestAnimationFrame","remove","onDrop","createDropTarget","dropTargetForElements","getData","input","targetElement","baseData","attachClosestEdge","allowedEdges","canDrop","source","_a","_b","data","onDragEnter","self","onDragLeave","useEffect","current","combine","React","createElement","ref","baseStyle","getItemStyles","top","bottom","calculateOrderUpdates","oldItems","newItems","oldIndexById","Map","map","flatMap","oldIndex","get","newPosition","moved","getDistanceToTargetCenter","target","rect","getBoundingClientRect","centerX","centerY","Math","pow","clientX","clientY","hasOrderChanged","length","some","getMovingIds","params","items","sourceId","selectedIds","multiDragEnabled","Set","idsInList","selectedSet","filter","has","reorderFromDragState","sourceIndex","rawDestinationIndex","clear","add","selectedIndexes","list","uniqueIndexes","Array","from","sort","a","b","moving","remaining","_","clampedRaw","max","min","removedBeforeDestination","insertionIndex","result","splice","reorderMany","destinationIndex","itemCount","isSameList","maxRaw","adjusted","maxFinal","normalizeDestinationIndex","startIndex","endIndex","removed","reorder","resolveDestination","location","excludedIds","dropTargets","destinationTarget","candidates","targetId","String","_c","reduce","closest","getClosestDestinationTarget","containerTarget","find","containerElement","indexById","itemElements","querySelectorAll","targetPoint","points","itemId","getAttribute","distance","centerOnAxis","point","nearest","getContainerInsertionIndex","previewKey","targetIndex","findIndex","edge","extractClosestEdge","isAfter","axisCenter","useDragDropMonitor","onReorder","liveReorder","itemsRef","onReorderRef","optionsRef","dragSessionRef","movingIds","originalItems","didLiveReorder","lastPreviewKey","resetDragSession","getSourceIndex","sourceDataIndex","currentIndex","parsedIndex","Number","isFinite","getMovingIdsForSource","currentItems","currentSelectedIds","currentMultiDragEnabled","getSessionMovingIds","sessionMovingIds","commitReorder","orderUpdates","handleDragStart","handleDropTargetChange","currentDirection","currentLiveReorder","destination","didReorder","handleDrop","monitorForElements","onDropTargetChange","DragDropList","renderItem","containerClassName","containerStyle","itemClassName","itemStyle","containerRef","isDraggingOver","setIsDraggingOver","getContainerStyles","key"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react"),t=require("@atlaskit/pragmatic-drag-and-drop/element/adapter"),a=require("@atlaskit/pragmatic-drag-and-drop/combine"),r=require("@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge");const n={container:{default:{minHeight:"200px",transition:"all 0.2s ease",borderRadius:"8px",border:"1px solid #e2e8f0",backgroundColor:"#ffffff",display:"flex",flexDirection:"column",gap:"16px",padding:"16px"},dragging:{backgroundColor:"rgba(66, 153, 225, 0.05)",borderColor:"#3182ce"},horizontal:{flexDirection:"row",flexWrap:"wrap"}},item:{default:{transition:"all 0.2s ease",cursor:"grab",userSelect:"none",position:"relative"},dragging:{opacity:.5,cursor:"grabbing"},hover:{transform:"scale(1.02)",boxShadow:"0 4px 6px rgba(0, 0, 0, 0.1)"},disabled:{cursor:"not-allowed",opacity:.6}},preview:{position:"fixed",pointerEvents:"none",zIndex:9999,opacity:.8,transform:"rotate(2deg)",boxShadow:"0 10px 20px rgba(0, 0, 0, 0.15)"},dropIndicator:{position:"absolute",height:"2px",backgroundColor:"#3182ce",left:0,right:0,zIndex:10,transition:"all 0.2s ease"}},i="draggable-item";function o({item:o,index:s,children:d,className:l="",style:c={},dragPreviewClassName:g="",dragPreviewStyle:u={},onDragStart:m,onDragEnd:p,disabled:b=!1,showDropIndicator:f=!1,dropIndicatorClassName:v="",dropIndicatorStyle:h={},dropIndicatorPosition:x="bottom",direction:D="vertical",dragHandle:y}){const I=e.useRef(null),[S,w]=e.useState(!1),[C,E]=e.useState(!1),[j,O]=e.useState(null),N=e.useCallback(e=>{if(b)return()=>{};const a=y?e.querySelector(y):void 0;return t.draggable({element:e,dragHandle:null!=a?a:void 0,canDrag:()=>!y||Boolean(a),getInitialData:()=>({type:i,id:o.id,index:s}),onGenerateDragPreview:({nativeSetDragImage:t})=>{const a=e.cloneNode(!0),r=Object.assign(Object.assign({},n.preview),u);g&&(a.className=g),Object.assign(a.style,r,{width:`${(null==e?void 0:e.offsetWidth)||100}px`,height:`${(null==e?void 0:e.offsetHeight)||50}px`}),document.body.appendChild(a),t&&t(a,20,20),requestAnimationFrame(()=>a.remove())},onDragStart:()=>{w(!0),null==m||m(o,s)},onDrop:()=>{w(!1),null==p||p(o,s)}})},[o,s,y,g,u,m,p,b]),k=e.useCallback(e=>b?()=>{}:t.dropTargetForElements({element:e,getData:({input:e,element:t})=>{const a={type:i,id:o.id,index:s},n="horizontal"===D?["left","right"]:["top","bottom"];return r.attachClosestEdge(a,{input:e,element:t,allowedEdges:[...n]})},canDrop:({source:e})=>{var t;return(null===(t=e.data)||void 0===t?void 0:t.type)===i},getIsSticky:()=>!0,onDragEnter:({source:e,self:t})=>{var a,r;(null===(a=e.data)||void 0===a?void 0:a.id)!==(null===(r=t.data)||void 0===r?void 0:r.id)&&(E(!0),f&&O(x))},onDragLeave:()=>{E(!1),O(null)},onDrop:()=>{E(!1),O(null)}}),[o.id,s,D,b,f,x]);return e.useEffect(()=>{const e=I.current;if(e)return e.setAttribute("data-index",s.toString()),b?()=>{}:a.combine(N(e),k(e))},[s,N,k,b]),e.createElement("div",{ref:I,className:l,style:(()=>{const e=Object.assign({},n.item.default);return b?Object.assign(e,n.item.disabled):S?Object.assign(e,n.item.dragging):C&&Object.assign(e,n.item.hover),Object.assign(Object.assign({},e),c)})()},f&&"top"===j&&e.createElement("div",{className:v,style:Object.assign(Object.assign(Object.assign({},n.dropIndicator),h),{top:-1})}),d,f&&"bottom"===j&&e.createElement("div",{className:v,style:Object.assign(Object.assign(Object.assign({},n.dropIndicator),h),{bottom:-1})}))}function s(e,t,a){const r=Array.from(e),[n]=r.splice(t,1);return r.splice(a,0,n),r}function d(e){const{itemCount:t,sourceIndex:a,rawDestinationIndex:r,isSameList:n}=e;if(t<=0)return 0;const i=t,o=Math.max(0,Math.min(r,i)),s=n&&a<o?o-1:o,d=n?t-1:t;return Math.max(0,Math.min(s,d))}function l({items:a,onReorder:n,disabled:i=!1,direction:o="vertical",selectedIds:l=[],multiDragEnabled:c=!1}){const g=e.useCallback(({location:e,source:t})=>{var i,g,u;const m=null===(i=t.data)||void 0===i?void 0:i.id,p=null===(g=t.data)||void 0===g?void 0:g.index;if(void 0===m||void 0===p)return;const{dropTargets:b}=e.current,f=b.find(e=>{var t,a;return"draggable-item"===(null===(t=e.data)||void 0===t?void 0:t.type)&&(null===(a=e.data)||void 0===a?void 0:a.id)!==m}),v=b.find(e=>{var t;return"container"===(null===(t=e.data)||void 0===t?void 0:t.type)});if(!f&&!v)return;let h=a.length;if(f){const e=Number(null===(u=f.data)||void 0===u?void 0:u.index);if(!Number.isFinite(e))return;const t=r.extractClosestEdge(f.data);h="bottom"===t||"horizontal"===o&&"right"===t?e+1:e}const x=[...a];let D=a;if(c){const e=new Set(l);e.has(m)||e.clear(),e.add(m);const t=a.map((t,a)=>e.has(t.id)?a:-1).filter(e=>-1!==e);if(t.length>1)D=function(e,t,a){const r=Array.from(new Set(t.filter(t=>t>=0&&t<e.length))).sort((e,t)=>e-t);if(0===r.length)return e;const n=new Set(r),i=r.map(t=>e[t]),o=e.filter((e,t)=>!n.has(t)),s=Math.max(0,Math.min(a,e.length)),d=r.filter(e=>e<s).length,l=Math.max(0,Math.min(s-d,o.length)),c=[...o];return c.splice(l,0,...i),c}(a,t,h);else{const e=d({itemCount:a.length,sourceIndex:p,rawDestinationIndex:h,isSameList:!0});D=s(a,p,e)}}else{const e=d({itemCount:a.length,sourceIndex:p,rawDestinationIndex:h,isSameList:!0});D=s(a,p,e)}const y=D.some((e,t)=>{var a;return e.id!==(null===(a=x[t])||void 0===a?void 0:a.id)});if(!y)return;const I=function(e,t){const a=new Map(e.map((e,t)=>[e.id,t]));return t.flatMap((e,t)=>{const r=a.get(e.id);return void 0===r||r===t?[]:[{id:e.id,newPosition:t,moved:!0}]})}(x,D);n(D,I)},[a,n,o,l,c]);return e.useEffect(()=>{if(!i)return t.monitorForElements({onDrop:g})},[i,g]),e.useCallback(()=>{},[])}exports.DragDropList=function({items:a,onReorder:r,renderItem:i,containerClassName:s="",containerStyle:d={},itemClassName:c="",itemStyle:g={},dragPreviewClassName:u="",dragPreviewStyle:m={},onDragStart:p,onDragEnd:b,disabled:f=!1,gap:v,direction:h="vertical",showDropIndicator:x=!1,dropIndicatorClassName:D="",dropIndicatorStyle:y={},dropIndicatorPosition:I="bottom",dragHandle:S,selectedIds:w=[],multiDragEnabled:C=!1}){const E=e.useRef(null);l({items:a,onReorder:r,disabled:f,direction:h,selectedIds:w,multiDragEnabled:C});const[j,O]=e.useState(!1),N=e.useCallback(e=>f?()=>{}:t.dropTargetForElements({element:e,getData:()=>({type:"container"}),onDragEnter:()=>O(!0),onDragLeave:()=>O(!1),onDrop:()=>O(!1)}),[f]);return e.useEffect(()=>{const e=E.current;if(e&&!f)return N(e)},[N,f]),e.createElement("div",{ref:E,className:s,style:(()=>{const e=Object.assign({},n.container.default);return"horizontal"===h&&Object.assign(e,n.container.horizontal),j&&Object.assign(e,n.container.dragging),void 0!==v&&(e.gap="number"==typeof v?`${v}px`:v),Object.assign(Object.assign({},e),d)})()},a.map((t,a)=>e.createElement(o,{key:t.id,item:t,index:a,className:c,style:g,dragPreviewClassName:u,dragPreviewStyle:m,onDragStart:p,onDragEnd:b,disabled:f,showDropIndicator:x,dropIndicatorClassName:D,dropIndicatorStyle:y,dropIndicatorPosition:I,direction:h,dragHandle:S},i(t,a))))},exports.DraggableItemWrapper=o,exports.defaultStyles=n,exports.useDragDropMonitor=l;
|
|
1
|
+
"use strict";var e=require("react"),t=require("@atlaskit/pragmatic-drag-and-drop/element/adapter"),n=require("@atlaskit/pragmatic-drag-and-drop/combine"),r=require("@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge");const i={container:{default:{minHeight:"200px",transition:"all 0.2s ease",borderRadius:"8px",border:"1px solid #e2e8f0",backgroundColor:"#ffffff",display:"flex",flexDirection:"column",gap:"16px",padding:"16px"},dragging:{backgroundColor:"rgba(66, 153, 225, 0.05)",borderColor:"#3182ce"},horizontal:{flexDirection:"row",flexWrap:"wrap"}},item:{default:{transition:"all 0.2s ease",cursor:"grab",userSelect:"none",position:"relative"},dragging:{opacity:.5,cursor:"grabbing"},hover:{transform:"scale(1.02)",boxShadow:"0 4px 6px rgba(0, 0, 0, 0.1)"},disabled:{cursor:"not-allowed",opacity:.6}},preview:{position:"fixed",pointerEvents:"none",zIndex:9999,opacity:.8,transform:"rotate(2deg)",boxShadow:"0 10px 20px rgba(0, 0, 0, 0.15)"},dropIndicator:{position:"absolute",height:"2px",backgroundColor:"#3182ce",left:0,right:0,zIndex:10,transition:"all 0.2s ease"}},a="draggable-item";function o({item:o,index:d,children:l,className:s="",style:c={},dragPreviewClassName:u="",dragPreviewStyle:g={},onDragStart:m,onDragEnd:p,disabled:f=!1,showDropIndicator:v=!1,dropIndicatorClassName:b="",dropIndicatorStyle:I={},dropIndicatorPosition:h="bottom",direction:x="vertical",dragHandle:w}){const D=e.useRef(null),[y,E]=e.useState(!1),[S,C]=e.useState(!1),[R,k]=e.useState(null),O=e.useCallback(e=>{if(f)return()=>{};const n=w?e.querySelector(w):void 0;return t.draggable({element:e,dragHandle:null!=n?n:void 0,canDrag:()=>!w||Boolean(n),getInitialData:()=>({type:a,id:o.id,index:d}),onGenerateDragPreview:({nativeSetDragImage:t})=>{const n=e.cloneNode(!0),r=Object.assign(Object.assign({},i.preview),g);u&&(n.className=u),Object.assign(n.style,r,{width:`${(null==e?void 0:e.offsetWidth)||100}px`,height:`${(null==e?void 0:e.offsetHeight)||50}px`}),document.body.appendChild(n),t&&t(n,20,20),requestAnimationFrame(()=>n.remove())},onDragStart:()=>{E(!0),null==m||m(o,d)},onDrop:()=>{E(!1),null==p||p(o,d)}})},[o,d,w,u,g,m,p,f]),j=e.useCallback(e=>f?()=>{}:t.dropTargetForElements({element:e,getData:({input:e,element:t})=>{const n={type:a,id:o.id,index:d},i="horizontal"===x?["left","right"]:["top","bottom"];return r.attachClosestEdge(n,{input:e,element:t,allowedEdges:[...i]})},canDrop:({source:e})=>{var t,n;return(null===(t=e.data)||void 0===t?void 0:t.type)===a&&(null===(n=e.data)||void 0===n?void 0:n.id)!==o.id},onDragEnter:({source:e,self:t})=>{var n,r;(null===(n=e.data)||void 0===n?void 0:n.id)!==(null===(r=t.data)||void 0===r?void 0:r.id)&&(C(!0),v&&k(h))},onDragLeave:()=>{C(!1),k(null)},onDrop:()=>{C(!1),k(null)}}),[o.id,d,x,f,v,h]);return e.useEffect(()=>{const e=D.current;if(e)return f?()=>{}:n.combine(O(e),j(e))},[d,O,j,f]),e.createElement("div",{ref:D,"data-index":d,"data-rdk-item-id":o.id,className:s,style:(()=>{const e=Object.assign({},i.item.default);return f?Object.assign(e,i.item.disabled):y?Object.assign(e,i.item.dragging):S&&Object.assign(e,i.item.hover),Object.assign(Object.assign({},e),c)})()},v&&"top"===R&&e.createElement("div",{className:b,style:Object.assign(Object.assign(Object.assign({},i.dropIndicator),I),{top:-1})}),l,v&&"bottom"===R&&e.createElement("div",{className:b,style:Object.assign(Object.assign(Object.assign({},i.dropIndicator),I),{bottom:-1})}))}function d(e,t){const n=new Map(e.map((e,t)=>[e.id,t]));return t.flatMap((e,t)=>{const r=n.get(e.id);return void 0===r||r===t?[]:[{id:e.id,newPosition:t,moved:!0}]})}function l(e,t){const n=e.element.getBoundingClientRect(),r=n.left+n.width/2,i=n.top+n.height/2;return Math.pow(t.clientX-r,2)+Math.pow(t.clientY-i,2)}function s(e,t){return e.length!==t.length||t.some((t,n)=>{var r;return t.id!==(null===(r=e[n])||void 0===r?void 0:r.id)})}function c(e){const{items:t,sourceId:n,selectedIds:r,multiDragEnabled:i}=e;if(!i)return new Set([n]);const a=new Set(t.map(e=>e.id)),o=new Set(r.filter(e=>a.has(e)));return o.has(n)?o:new Set([n])}function u(e){const{items:t,sourceId:n,sourceIndex:r,rawDestinationIndex:i,selectedIds:a,multiDragEnabled:o}=e;if(o){const e=new Set(a);e.has(n)||e.clear(),e.add(n);const r=t.map((t,n)=>e.has(t.id)?n:-1).filter(e=>-1!==e);if(r.length>1)return function(e,t,n){const r=Array.from(new Set(t.filter(t=>t>=0&&t<e.length))).sort((e,t)=>e-t);if(0===r.length)return e;const i=new Set(r),a=r.map(t=>e[t]),o=e.filter((e,t)=>!i.has(t)),d=Math.max(0,Math.min(n,e.length)),l=r.filter(e=>e<d).length,s=Math.max(0,Math.min(d-l,o.length)),c=[...o];return c.splice(s,0,...a),c}(t,r,i)}const d=function(e){const{itemCount:t,sourceIndex:n,rawDestinationIndex:r,isSameList:i}=e;if(t<=0)return 0;const a=t,o=Math.max(0,Math.min(r,a)),d=i&&n<o?o-1:o,l=i?t-1:t;return Math.max(0,Math.min(d,l))}({itemCount:t.length,sourceIndex:r,rawDestinationIndex:i,isSameList:!0});return function(e,t,n){const r=Array.from(e),[i]=r.splice(t,1);return r.splice(n,0,i),r}(t,r,d)}function g(e){var t,n;const{location:i,sourceId:a,sourceIndex:o,direction:d,items:s,excludedIds:c}=e,{dropTargets:u,input:g}=i,m=function(e){const{dropTargets:t,input:n,sourceId:r,excludedIds:i}=e,a=t.filter(e=>{var t,n,a;if("draggable-item"!==(null===(t=e.data)||void 0===t?void 0:t.type))return!1;const o=String(null!==(a=null===(n=e.data)||void 0===n?void 0:n.id)&&void 0!==a?a:"");return!(!o||o===r||i.has(o))});return 0===a.length?null:1===a.length?a[0]:a.reduce((e,t)=>l(t,n)<l(e,n)?t:e)}({dropTargets:u,input:g,sourceId:a,excludedIds:c}),p=u.find(e=>{var t;return"container"===(null===(t=e.data)||void 0===t?void 0:t.type)});if(!m&&!p)return null;if(!m){if(!p)return null;const e=function(e){const{containerElement:t,input:n,direction:r,items:i,excludedIds:a}=e,o=new Map(i.map((e,t)=>[e.id,t])),d=Array.from(t.querySelectorAll("[data-rdk-item-id]"));if(0===d.length)return 0;const l="horizontal"===r?n.clientX:n.clientY,s=d.map(e=>{const t=e.getAttribute("data-rdk-item-id");if(!t||a.has(t))return null;const i=o.get(t);if(void 0===i)return null;const d=e.getBoundingClientRect(),l=d.left+d.width/2,s=d.top+d.height/2;return{index:i,distance:Math.pow(n.clientX-l,2)+Math.pow(n.clientY-s,2),centerOnAxis:"horizontal"===r?l:s}}).filter(e=>null!==e);if(0===s.length)return null;const c=s.reduce((e,t)=>t.distance<e.distance?t:e);return l>=c.centerOnAxis?c.index+1:c.index}({containerElement:p.element,input:g,direction:d,items:s,excludedIds:c}),t=null!=e?e:s.length;return{rawDestinationIndex:t,previewKey:`container:${t}`}}const f=String(null!==(n=null===(t=m.data)||void 0===t?void 0:t.id)&&void 0!==n?n:"");if(!f)return null;const v=s.findIndex(e=>e.id===f);if(-1===v)return null;const b=r.extractClosestEdge(m.data);let I;if(o<v)I=!0;else if(o>v)I=!1;else if(null===b){const e=m.element.getBoundingClientRect(),t="horizontal"===d?e.left+e.width/2:e.top+e.height/2;I=("horizontal"===d?g.clientX:g.clientY)>=t}else I="bottom"===b||"horizontal"===d&&"right"===b;return{rawDestinationIndex:I?v+1:v,previewKey:`item:${f}:${I?"after":"before"}`}}function m({items:n,onReorder:r,disabled:i=!1,direction:a="vertical",selectedIds:o=[],multiDragEnabled:l=!1,liveReorder:m=!1}){const p=e.useRef(n),f=e.useRef(r),v=e.useRef({direction:a,selectedIds:o,multiDragEnabled:l,liveReorder:m}),b=e.useRef({sourceId:null,movingIds:null,originalItems:null,didLiveReorder:!1,lastPreviewKey:null});e.useEffect(()=>{p.current=n,f.current=r,v.current={direction:a,selectedIds:o,multiDragEnabled:l,liveReorder:m}},[n,r,a,o,l,m]);const I=e.useCallback(()=>{b.current={sourceId:null,movingIds:null,originalItems:null,didLiveReorder:!1,lastPreviewKey:null}},[]),h=e.useCallback((e,t)=>{const n=p.current.findIndex(t=>t.id===e);if(-1!==n)return n;const r=Number(t);return Number.isFinite(r)?r:-1},[]),x=e.useCallback(e=>{const t=p.current,{selectedIds:n,multiDragEnabled:r}=v.current;return c({items:t,sourceId:e,selectedIds:n,multiDragEnabled:r})},[]),w=e.useCallback(e=>{const t=b.current.movingIds;return t?new Set(t):x(e)},[x]),D=e.useCallback(({sourceId:e,sourceIndex:t,rawDestinationIndex:n})=>{const r=[...p.current],{selectedIds:i,multiDragEnabled:a}=v.current,o=u({items:r,sourceId:e,sourceIndex:t,rawDestinationIndex:n,selectedIds:i,multiDragEnabled:a});if(!s(r,o))return!1;const l=d(r,o);return p.current=o,f.current(o,l),!0},[]),y=e.useCallback(({source:e})=>{var t,n;if("draggable-item"!==(null===(t=e.data)||void 0===t?void 0:t.type))return;const r=null===(n=e.data)||void 0===n?void 0:n.id;if(!r)return;const i=p.current,{selectedIds:a,multiDragEnabled:o}=v.current,d=c({items:i,sourceId:r,selectedIds:a,multiDragEnabled:o});b.current={sourceId:r,movingIds:d,originalItems:v.current.liveReorder?[...i]:null,didLiveReorder:!1,lastPreviewKey:null}},[]),E=e.useCallback(({location:e,source:t})=>{var n,r,i;if("draggable-item"!==(null===(n=t.data)||void 0===n?void 0:n.type))return;const{direction:a,liveReorder:o}=v.current;if(!o)return;const d=null===(r=t.data)||void 0===r?void 0:r.id;if(!d)return;const l=h(d,null===(i=t.data)||void 0===i?void 0:i.index);if(l<0)return;const s=p.current,c=w(d),u=g({location:e.current,sourceId:d,sourceIndex:l,direction:a,items:s,excludedIds:c});if(!u)return;if(b.current.lastPreviewKey===u.previewKey)return;const m=D({sourceId:d,sourceIndex:l,rawDestinationIndex:u.rawDestinationIndex});b.current.lastPreviewKey=u.previewKey,m&&(b.current.didLiveReorder=!0)},[h,w,D]),S=e.useCallback(({location:e,source:t})=>{var n,r,i;if("draggable-item"!==(null===(n=t.data)||void 0===n?void 0:n.type))return void I();const a=null===(r=t.data)||void 0===r?void 0:r.id;if(!a)return void I();const{direction:o,liveReorder:l}=v.current,c=p.current,u=w(a),m=h(a,null===(i=t.data)||void 0===i?void 0:i.index);if(m<0)return void I();const x=g({location:e.current,sourceId:a,sourceIndex:m,direction:o,items:c,excludedIds:u});if(!x){const{originalItems:e,didLiveReorder:t}=b.current;if(l&&t&&e){const t=[...p.current];if(s(t,e)){const n=d(t,e);p.current=e,f.current(e,n)}}return void I()}const{didLiveReorder:y,lastPreviewKey:E}=b.current;l&&y&&E===x.previewKey||D({sourceId:a,sourceIndex:m,rawDestinationIndex:x.rawDestinationIndex}),I()},[w,h,D,I]);return e.useEffect(()=>{if(!i)return t.monitorForElements({onDragStart:y,onDropTargetChange:E,onDrop:S})},[i,y,E,S]),e.useCallback(()=>{},[])}exports.DragDropList=function({items:n,onReorder:r,renderItem:a,containerClassName:d="",containerStyle:l={},itemClassName:s="",itemStyle:c={},dragPreviewClassName:u="",dragPreviewStyle:g={},onDragStart:p,onDragEnd:f,disabled:v=!1,gap:b,direction:I="vertical",showDropIndicator:h=!1,dropIndicatorClassName:x="",dropIndicatorStyle:w={},dropIndicatorPosition:D="bottom",dragHandle:y,selectedIds:E=[],multiDragEnabled:S=!1,liveReorder:C=!1}){const R=e.useRef(null);m({items:n,onReorder:r,disabled:v,direction:I,selectedIds:E,multiDragEnabled:S,liveReorder:C});const[k,O]=e.useState(!1),j=e.useCallback(e=>v?()=>{}:t.dropTargetForElements({element:e,getData:()=>({type:"container"}),onDragEnter:()=>O(!0),onDragLeave:()=>O(!1),onDrop:()=>O(!1)}),[v]);return e.useEffect(()=>{const e=R.current;if(e&&!v)return j(e)},[j,v]),e.createElement("div",{ref:R,className:d,style:(()=>{const e=Object.assign({},i.container.default);return"horizontal"===I&&Object.assign(e,i.container.horizontal),k&&Object.assign(e,i.container.dragging),void 0!==b&&(e.gap="number"==typeof b?`${b}px`:b),Object.assign(Object.assign({},e),l)})()},n.map((t,n)=>e.createElement(o,{key:t.id,item:t,index:n,className:s,style:c,dragPreviewClassName:u,dragPreviewStyle:g,onDragStart:p,onDragEnd:f,disabled:v,showDropIndicator:h,dropIndicatorClassName:x,dropIndicatorStyle:w,dropIndicatorPosition:D,direction:I,dragHandle:y},a(t,n))))},exports.DraggableItemWrapper=o,exports.defaultStyles=i,exports.useDragDropMonitor=m;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/styles/defaultStyles.ts","../src/components/DraggableItemWrapper.tsx","../src/utils/order.ts","../src/hooks/useDragDropMonitor.ts","../src/components/DragDropList.tsx"],"sourcesContent":["export const defaultStyles = {\r\n container: {\r\n default: {\r\n minHeight: \"200px\",\r\n transition: \"all 0.2s ease\",\r\n borderRadius: \"8px\",\r\n border: \"1px solid #e2e8f0\",\r\n backgroundColor: \"#ffffff\",\r\n display: \"flex\",\r\n flexDirection: \"column\" as const,\r\n gap: \"16px\",\r\n padding: \"16px\",\r\n },\r\n dragging: {\r\n backgroundColor: \"rgba(66, 153, 225, 0.05)\",\r\n borderColor: \"#3182ce\",\r\n },\r\n horizontal: {\r\n flexDirection: \"row\" as const,\r\n flexWrap: \"wrap\" as const,\r\n },\r\n },\r\n item: {\r\n default: {\r\n transition: \"all 0.2s ease\",\r\n cursor: \"grab\",\r\n userSelect: \"none\" as const,\r\n position: \"relative\" as const,\r\n },\r\n dragging: {\r\n opacity: 0.5,\r\n cursor: \"grabbing\",\r\n },\r\n hover: {\r\n transform: \"scale(1.02)\",\r\n boxShadow: \"0 4px 6px rgba(0, 0, 0, 0.1)\",\r\n },\r\n disabled: {\r\n cursor: \"not-allowed\",\r\n opacity: 0.6,\r\n },\r\n },\r\n preview: {\r\n position: \"fixed\" as const,\r\n pointerEvents: \"none\" as const,\r\n zIndex: 9999,\r\n opacity: 0.8,\r\n transform: \"rotate(2deg)\",\r\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.15)\",\r\n },\r\n dropIndicator: {\r\n position: \"absolute\" as const,\r\n height: \"2px\",\r\n backgroundColor: \"#3182ce\",\r\n left: 0,\r\n right: 0,\r\n zIndex: 10,\r\n transition: \"all 0.2s ease\",\r\n },\r\n};\r\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\r\nimport { combine } from \"@atlaskit/pragmatic-drag-and-drop/combine\";\r\nimport {\n draggable,\n dropTargetForElements,\n} from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport { attachClosestEdge } from \"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge\";\nimport type { DraggableItemWrapperProps, DraggableItem } from \"../types\";\nimport { defaultStyles } from \"../styles/defaultStyles\";\n\r\nconst DRAGGABLE_ITEM = \"draggable-item\";\r\n\r\nexport function DraggableItemWrapper<T extends DraggableItem>({\r\n item,\r\n index,\r\n children,\r\n className = \"\",\r\n style = {},\r\n dragPreviewClassName = \"\",\r\n dragPreviewStyle = {},\r\n onDragStart,\r\n onDragEnd,\r\n disabled = false,\r\n showDropIndicator = false,\r\n dropIndicatorClassName = \"\",\n dropIndicatorStyle = {},\n dropIndicatorPosition = \"bottom\",\n direction = \"vertical\",\n dragHandle,\n}: DraggableItemWrapperProps<T>) {\n const elementRef = useRef<HTMLDivElement>(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [isHovered, setIsHovered] = useState(false);\r\n const [dropPosition, setDropPosition] = useState<\"top\" | \"bottom\" | null>(\r\n null\r\n );\r\n\r\n const getItemStyles = (): React.CSSProperties => {\r\n const baseStyle = { ...defaultStyles.item.default };\r\n\r\n if (disabled) {\r\n Object.assign(baseStyle, defaultStyles.item.disabled);\r\n } else if (isDragging) {\r\n Object.assign(baseStyle, defaultStyles.item.dragging);\r\n } else if (isHovered) {\r\n Object.assign(baseStyle, defaultStyles.item.hover);\r\n }\r\n\r\n return { ...baseStyle, ...style };\r\n };\r\n\r\n const getPreviewStyles = (): React.CSSProperties => {\r\n return { ...defaultStyles.preview, ...dragPreviewStyle };\r\n };\r\n\r\n const createDraggable = useCallback(\n (element: HTMLElement) => {\n if (disabled) return () => {};\n const dragHandleElement = dragHandle\n ? element.querySelector(dragHandle)\n : undefined;\n\n return draggable({\n element,\n dragHandle: dragHandleElement ?? undefined,\n canDrag: () => !dragHandle || Boolean(dragHandleElement),\n getInitialData: () => ({\n type: DRAGGABLE_ITEM,\n id: item.id,\n index,\r\n }),\r\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\r\n const previewElement = element.cloneNode(true) as HTMLElement;\r\n const previewStyles = getPreviewStyles();\r\n\r\n // Apply custom preview class if provided\r\n if (dragPreviewClassName) {\r\n previewElement.className = dragPreviewClassName;\r\n }\r\n\r\n Object.assign(previewElement.style, previewStyles, {\r\n width: `${element?.offsetWidth || 100}px`,\r\n height: `${element?.offsetHeight || 50}px`,\r\n });\r\n\r\n document.body.appendChild(previewElement);\r\n if (nativeSetDragImage) {\r\n nativeSetDragImage(previewElement, 20, 20);\r\n }\r\n requestAnimationFrame(() => previewElement.remove());\r\n },\r\n onDragStart: () => {\r\n setIsDragging(true);\r\n onDragStart?.(item, index);\r\n },\r\n onDrop: () => {\r\n setIsDragging(false);\r\n onDragEnd?.(item, index);\r\n },\r\n });\r\n },\r\n [\r\n item,\r\n index,\n dragHandle,\n dragPreviewClassName,\n dragPreviewStyle,\n onDragStart,\n onDragEnd,\r\n disabled,\r\n ]\r\n );\r\n\r\n const createDropTarget = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n\r\n return dropTargetForElements({\n element,\n getData: ({ input, element: targetElement }) => {\n const baseData = {\n type: DRAGGABLE_ITEM,\n id: item.id,\n index,\n };\n const allowedEdges =\n direction === \"horizontal\" ? ([\"left\", \"right\"] as const) : ([\"top\", \"bottom\"] as const);\n\n return attachClosestEdge(baseData, {\n input,\n element: targetElement,\n allowedEdges: [...allowedEdges],\n });\n },\n canDrop: ({ source }) => source.data?.type === DRAGGABLE_ITEM,\n getIsSticky: () => true,\n onDragEnter: ({ source, self }) => {\n if (source.data?.id !== self.data?.id) {\n setIsHovered(true);\n if (showDropIndicator) {\n setDropPosition(dropIndicatorPosition);\r\n }\r\n }\r\n },\r\n onDragLeave: () => {\r\n setIsHovered(false);\r\n setDropPosition(null);\r\n },\r\n onDrop: () => {\r\n setIsHovered(false);\r\n setDropPosition(null);\r\n },\r\n });\n },\n [item.id, index, direction, disabled, showDropIndicator, dropIndicatorPosition]\n );\n\r\n useEffect(() => {\r\n const element = elementRef.current;\r\n if (!element) return;\r\n\r\n element.setAttribute(\"data-index\", index.toString());\r\n\r\n if (disabled) {\r\n // provide a no-op cleanup to satisfy all code paths\r\n return () => {};\r\n }\r\n\r\n // normal draggable + droptarget setup\r\n return combine(createDraggable(element), createDropTarget(element));\r\n }, [index, createDraggable, createDropTarget, disabled]);\r\n\r\n return (\r\n <div ref={elementRef} className={className} style={getItemStyles()}>\r\n {showDropIndicator && dropPosition === \"top\" && (\r\n <div\r\n className={dropIndicatorClassName}\r\n style={{\r\n ...defaultStyles.dropIndicator,\r\n ...dropIndicatorStyle,\r\n top: -1,\r\n }}\r\n />\r\n )}\r\n {children}\r\n {showDropIndicator && dropPosition === \"bottom\" && (\r\n <div\r\n className={dropIndicatorClassName}\r\n style={{\r\n ...defaultStyles.dropIndicator,\r\n ...dropIndicatorStyle,\r\n bottom: -1,\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","import type { DraggableItem, OrderUpdate } from '../types';\n\nexport function reorder<T>(list: T[], startIndex: number, endIndex: number): T[] {\n const result = Array.from(list);\n const [removed] = result.splice(startIndex, 1);\n result.splice(endIndex, 0, removed);\n return result;\n}\n\nexport function normalizeDestinationIndex(params: {\n itemCount: number;\n sourceIndex: number;\n rawDestinationIndex: number;\n isSameList: boolean;\n}): number {\n const { itemCount, sourceIndex, rawDestinationIndex, isSameList } = params;\n\n if (itemCount <= 0) return 0;\n\n const maxRaw = itemCount;\n const clampedRaw = Math.max(0, Math.min(rawDestinationIndex, maxRaw));\n const adjusted = isSameList && sourceIndex < clampedRaw ? clampedRaw - 1 : clampedRaw;\n const maxFinal = isSameList ? itemCount - 1 : itemCount;\n\n return Math.max(0, Math.min(adjusted, maxFinal));\n}\n\nexport function reorderMany<T>(list: T[], selectedIndexes: number[], rawDestinationIndex: number): T[] {\n const uniqueIndexes = Array.from(\n new Set(selectedIndexes.filter((index) => index >= 0 && index < list.length))\n ).sort((a, b) => a - b);\n\n if (uniqueIndexes.length === 0) return list;\n\n const selectedSet = new Set(uniqueIndexes);\n const moving = uniqueIndexes.map((index) => list[index]);\n const remaining = list.filter((_, index) => !selectedSet.has(index));\n\n const clampedRaw = Math.max(0, Math.min(rawDestinationIndex, list.length));\n const removedBeforeDestination = uniqueIndexes.filter((index) => index < clampedRaw).length;\n const insertionIndex = Math.max(\n 0,\n Math.min(clampedRaw - removedBeforeDestination, remaining.length)\n );\n\n const result = [...remaining];\n result.splice(insertionIndex, 0, ...moving);\n return result;\n}\n\nexport function calculateOrderUpdates<T extends DraggableItem>(oldItems: T[], newItems: T[]): OrderUpdate[] {\n const oldIndexById = new Map(oldItems.map((item, index) => [item.id, index]));\n\n return newItems.flatMap((item, index) => {\n const oldIndex = oldIndexById.get(item.id);\n if (oldIndex === undefined || oldIndex === index) return [];\n return [{ id: item.id, newPosition: index, moved: true }];\n });\n}\n","import { useCallback, useEffect } from \"react\";\nimport { monitorForElements } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport { extractClosestEdge } from \"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge\";\nimport type { ElementEventPayloadMap } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport type { DraggableItem, OrderUpdate } from \"../types\";\nimport {\n reorder,\n reorderMany,\n normalizeDestinationIndex,\n calculateOrderUpdates,\n} from \"../utils/order\";\n\nexport function useDragDropMonitor<T extends DraggableItem>({\n items,\n onReorder,\n disabled = false,\n direction = \"vertical\",\n selectedIds = [],\n multiDragEnabled = false,\n}: {\n items: T[];\n onReorder: (newItems: T[], orderUpdates: OrderUpdate[]) => void;\n disabled?: boolean;\n direction?: \"vertical\" | \"horizontal\";\n selectedIds?: string[];\n multiDragEnabled?: boolean;\n}) {\n const handleDrop = useCallback(\n ({ location, source }: ElementEventPayloadMap[\"onDrop\"]) => {\n const sourceId = source.data?.id as string | undefined;\n const sourceIndex = source.data?.index as number | undefined;\n if (sourceId === undefined || sourceIndex === undefined) return;\n\n const { dropTargets } = location.current;\n const destinationTarget = dropTargets.find(\n (target) =>\n target.data?.type === \"draggable-item\" &&\n target.data?.id !== sourceId\n );\n const containerTarget = dropTargets.find(\n (target) => target.data?.type === \"container\"\n );\n\n if (!destinationTarget && !containerTarget) return;\n\n let rawDestinationIndex = items.length;\n if (destinationTarget) {\n const targetIndex = Number(destinationTarget.data?.index);\n if (!Number.isFinite(targetIndex)) return;\n const edge = extractClosestEdge(destinationTarget.data);\n const isAfter =\n edge === \"bottom\" || (direction === \"horizontal\" && edge === \"right\");\n rawDestinationIndex = isAfter ? targetIndex + 1 : targetIndex;\n }\n\n const oldItems = [...items];\n let newItems: T[] = items;\n\n if (multiDragEnabled) {\n const selectedSet = new Set(selectedIds);\n if (!selectedSet.has(sourceId)) {\n selectedSet.clear();\n }\n selectedSet.add(sourceId);\n\n const selectedIndexes = items\n .map((item, index) => (selectedSet.has(item.id) ? index : -1))\n .filter((index) => index !== -1);\n\n if (selectedIndexes.length > 1) {\n newItems = reorderMany(items, selectedIndexes, rawDestinationIndex);\n } else {\n const destinationIndex = normalizeDestinationIndex({\n itemCount: items.length,\n sourceIndex,\n rawDestinationIndex,\n isSameList: true,\n });\n newItems = reorder(items, sourceIndex, destinationIndex);\n }\n } else {\n const destinationIndex = normalizeDestinationIndex({\n itemCount: items.length,\n sourceIndex,\n rawDestinationIndex,\n isSameList: true,\n });\n newItems = reorder(items, sourceIndex, destinationIndex);\n }\n\n const isChanged = newItems.some((item, index) => item.id !== oldItems[index]?.id);\n if (!isChanged) return;\n\n const orderUpdates = calculateOrderUpdates(oldItems, newItems);\n onReorder(newItems, orderUpdates);\n },\n [items, onReorder, direction, selectedIds, multiDragEnabled]\n );\n\n useEffect(() => {\n if (disabled) return;\n return monitorForElements({\n onDrop: handleDrop,\n });\n }, [disabled, handleDrop]);\n\n return useCallback(() => {}, []);\n}\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\nimport { dropTargetForElements } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport { DraggableItemWrapper } from \"./DraggableItemWrapper\";\nimport type { DragDropListProps, DraggableItem } from \"../types\";\nimport { useDragDropMonitor } from \"../hooks/useDragDropMonitor\";\nimport { defaultStyles } from \"../styles/defaultStyles\";\r\n\r\nexport function DragDropList<T extends DraggableItem>({\r\n items,\r\n onReorder,\r\n renderItem,\r\n containerClassName = \"\",\r\n containerStyle = {},\r\n itemClassName = \"\",\r\n itemStyle = {},\r\n dragPreviewClassName = \"\",\r\n dragPreviewStyle = {},\r\n onDragStart,\r\n onDragEnd,\r\n disabled = false,\r\n gap,\r\n direction = \"vertical\",\r\n showDropIndicator = false,\r\n dropIndicatorClassName = \"\",\n dropIndicatorStyle = {},\n dropIndicatorPosition = \"bottom\",\n dragHandle,\n selectedIds = [],\n multiDragEnabled = false,\n}: DragDropListProps<T>) {\n const containerRef = useRef<HTMLDivElement>(null);\n useDragDropMonitor({\n items,\n onReorder,\n disabled,\n direction,\n selectedIds,\n multiDragEnabled,\n });\n const [isDraggingOver, setIsDraggingOver] = useState(false);\n\r\n const getContainerStyles = (): React.CSSProperties => {\r\n const baseStyle = { ...defaultStyles.container.default };\r\n\r\n if (direction === \"horizontal\") {\r\n Object.assign(baseStyle, defaultStyles.container.horizontal);\r\n }\r\n\r\n if (isDraggingOver) {\r\n Object.assign(baseStyle, defaultStyles.container.dragging);\r\n }\r\n\r\n if (gap !== undefined) {\r\n baseStyle.gap = typeof gap === \"number\" ? `${gap}px` : gap;\r\n }\r\n\r\n return { ...baseStyle, ...containerStyle };\r\n };\r\n\r\n const createDropTarget = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n\r\n return dropTargetForElements({\r\n element,\r\n getData: () => ({ type: \"container\" }),\r\n onDragEnter: () => setIsDraggingOver(true),\r\n onDragLeave: () => setIsDraggingOver(false),\r\n onDrop: () => setIsDraggingOver(false),\r\n });\r\n },\r\n [disabled]\r\n );\r\n\r\n useEffect(() => {\n const element = containerRef.current;\n if (!element || disabled) return;\n\n return createDropTarget(element);\n }, [createDropTarget, disabled]);\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={containerClassName}\r\n style={getContainerStyles()}\r\n >\r\n {items.map((item, index) => (\r\n <DraggableItemWrapper\r\n key={item.id}\r\n item={item}\r\n index={index}\r\n className={itemClassName}\r\n style={itemStyle}\r\n dragPreviewClassName={dragPreviewClassName}\r\n dragPreviewStyle={dragPreviewStyle}\r\n onDragStart={onDragStart}\r\n onDragEnd={onDragEnd}\r\n disabled={disabled}\r\n showDropIndicator={showDropIndicator}\r\n dropIndicatorClassName={dropIndicatorClassName}\n dropIndicatorStyle={dropIndicatorStyle}\n dropIndicatorPosition={dropIndicatorPosition}\n direction={direction}\n dragHandle={dragHandle}\n >\n {renderItem(item, index)}\n </DraggableItemWrapper>\n ))}\r\n </div>\r\n );\r\n}\r\n"],"names":["defaultStyles","container","default","minHeight","transition","borderRadius","border","backgroundColor","display","flexDirection","gap","padding","dragging","borderColor","horizontal","flexWrap","item","cursor","userSelect","position","opacity","hover","transform","boxShadow","disabled","preview","pointerEvents","zIndex","dropIndicator","height","left","right","DRAGGABLE_ITEM","DraggableItemWrapper","index","children","className","style","dragPreviewClassName","dragPreviewStyle","onDragStart","onDragEnd","showDropIndicator","dropIndicatorClassName","dropIndicatorStyle","dropIndicatorPosition","direction","dragHandle","elementRef","useRef","isDragging","setIsDragging","useState","isHovered","setIsHovered","dropPosition","setDropPosition","createDraggable","useCallback","element","dragHandleElement","querySelector","undefined","draggable","canDrag","Boolean","getInitialData","type","id","onGenerateDragPreview","nativeSetDragImage","previewElement","cloneNode","previewStyles","Object","assign","width","offsetWidth","offsetHeight","document","body","appendChild","requestAnimationFrame","remove","onDrop","createDropTarget","dropTargetForElements","getData","input","targetElement","baseData","allowedEdges","attachClosestEdge","canDrop","source","_a","data","getIsSticky","onDragEnter","self","_b","onDragLeave","useEffect","current","setAttribute","toString","combine","React","createElement","ref","baseStyle","getItemStyles","top","bottom","reorder","list","startIndex","endIndex","result","Array","from","removed","splice","normalizeDestinationIndex","params","itemCount","sourceIndex","rawDestinationIndex","isSameList","maxRaw","clampedRaw","Math","max","min","adjusted","maxFinal","useDragDropMonitor","items","onReorder","selectedIds","multiDragEnabled","handleDrop","location","sourceId","dropTargets","destinationTarget","find","target","containerTarget","length","targetIndex","Number","_c","isFinite","edge","extractClosestEdge","oldItems","newItems","selectedSet","Set","has","clear","add","selectedIndexes","map","filter","uniqueIndexes","sort","a","b","moving","remaining","_","removedBeforeDestination","insertionIndex","reorderMany","destinationIndex","isChanged","some","orderUpdates","oldIndexById","Map","flatMap","oldIndex","get","newPosition","moved","calculateOrderUpdates","monitorForElements","renderItem","containerClassName","containerStyle","itemClassName","itemStyle","containerRef","isDraggingOver","setIsDraggingOver","getContainerStyles","key"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/styles/defaultStyles.ts","../src/components/DraggableItemWrapper.tsx","../src/utils/order.ts","../src/hooks/useDragDropMonitor.logic.ts","../src/hooks/useDragDropMonitor.ts","../src/components/DragDropList.tsx"],"sourcesContent":["export const defaultStyles = {\r\n container: {\r\n default: {\r\n minHeight: \"200px\",\r\n transition: \"all 0.2s ease\",\r\n borderRadius: \"8px\",\r\n border: \"1px solid #e2e8f0\",\r\n backgroundColor: \"#ffffff\",\r\n display: \"flex\",\r\n flexDirection: \"column\" as const,\r\n gap: \"16px\",\r\n padding: \"16px\",\r\n },\r\n dragging: {\r\n backgroundColor: \"rgba(66, 153, 225, 0.05)\",\r\n borderColor: \"#3182ce\",\r\n },\r\n horizontal: {\r\n flexDirection: \"row\" as const,\r\n flexWrap: \"wrap\" as const,\r\n },\r\n },\r\n item: {\r\n default: {\r\n transition: \"all 0.2s ease\",\r\n cursor: \"grab\",\r\n userSelect: \"none\" as const,\r\n position: \"relative\" as const,\r\n },\r\n dragging: {\r\n opacity: 0.5,\r\n cursor: \"grabbing\",\r\n },\r\n hover: {\r\n transform: \"scale(1.02)\",\r\n boxShadow: \"0 4px 6px rgba(0, 0, 0, 0.1)\",\r\n },\r\n disabled: {\r\n cursor: \"not-allowed\",\r\n opacity: 0.6,\r\n },\r\n },\r\n preview: {\r\n position: \"fixed\" as const,\r\n pointerEvents: \"none\" as const,\r\n zIndex: 9999,\r\n opacity: 0.8,\r\n transform: \"rotate(2deg)\",\r\n boxShadow: \"0 10px 20px rgba(0, 0, 0, 0.15)\",\r\n },\r\n dropIndicator: {\r\n position: \"absolute\" as const,\r\n height: \"2px\",\r\n backgroundColor: \"#3182ce\",\r\n left: 0,\r\n right: 0,\r\n zIndex: 10,\r\n transition: \"all 0.2s ease\",\r\n },\r\n};\r\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\r\nimport { combine } from \"@atlaskit/pragmatic-drag-and-drop/combine\";\r\nimport {\r\n draggable,\r\n dropTargetForElements,\r\n} from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\r\nimport { attachClosestEdge } from \"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge\";\r\nimport type { DraggableItemWrapperProps, DraggableItem } from \"../types\";\r\nimport { defaultStyles } from \"../styles/defaultStyles\";\r\n\r\nconst DRAGGABLE_ITEM = \"draggable-item\";\r\n\r\nexport function DraggableItemWrapper<T extends DraggableItem>({\r\n item,\r\n index,\r\n children,\r\n className = \"\",\r\n style = {},\r\n dragPreviewClassName = \"\",\r\n dragPreviewStyle = {},\r\n onDragStart,\r\n onDragEnd,\r\n disabled = false,\r\n showDropIndicator = false,\r\n dropIndicatorClassName = \"\",\r\n dropIndicatorStyle = {},\r\n dropIndicatorPosition = \"bottom\",\r\n direction = \"vertical\",\r\n dragHandle,\r\n}: DraggableItemWrapperProps<T>) {\r\n const elementRef = useRef<HTMLDivElement>(null);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [isHovered, setIsHovered] = useState(false);\r\n const [dropPosition, setDropPosition] = useState<\"top\" | \"bottom\" | null>(\r\n null\r\n );\r\n\r\n const getItemStyles = (): React.CSSProperties => {\r\n const baseStyle = { ...defaultStyles.item.default };\r\n\r\n if (disabled) {\r\n Object.assign(baseStyle, defaultStyles.item.disabled);\r\n } else if (isDragging) {\r\n Object.assign(baseStyle, defaultStyles.item.dragging);\r\n } else if (isHovered) {\r\n Object.assign(baseStyle, defaultStyles.item.hover);\r\n }\r\n\r\n return { ...baseStyle, ...style };\r\n };\r\n\r\n const getPreviewStyles = (): React.CSSProperties => {\r\n return { ...defaultStyles.preview, ...dragPreviewStyle };\r\n };\r\n\r\n const createDraggable = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n const dragHandleElement = dragHandle\r\n ? element.querySelector(dragHandle)\r\n : undefined;\r\n\r\n return draggable({\r\n element,\r\n dragHandle: dragHandleElement ?? undefined,\r\n canDrag: () => !dragHandle || Boolean(dragHandleElement),\r\n getInitialData: () => ({\r\n type: DRAGGABLE_ITEM,\r\n id: item.id,\r\n index,\r\n }),\r\n onGenerateDragPreview: ({ nativeSetDragImage }) => {\r\n const previewElement = element.cloneNode(true) as HTMLElement;\r\n const previewStyles = getPreviewStyles();\r\n\r\n // Apply custom preview class if provided\r\n if (dragPreviewClassName) {\r\n previewElement.className = dragPreviewClassName;\r\n }\r\n\r\n Object.assign(previewElement.style, previewStyles, {\r\n width: `${element?.offsetWidth || 100}px`,\r\n height: `${element?.offsetHeight || 50}px`,\r\n });\r\n\r\n document.body.appendChild(previewElement);\r\n if (nativeSetDragImage) {\r\n nativeSetDragImage(previewElement, 20, 20);\r\n }\r\n requestAnimationFrame(() => previewElement.remove());\r\n },\r\n onDragStart: () => {\r\n setIsDragging(true);\r\n onDragStart?.(item, index);\r\n },\r\n onDrop: () => {\r\n setIsDragging(false);\r\n onDragEnd?.(item, index);\r\n },\r\n });\r\n },\r\n [\r\n item,\r\n index,\r\n dragHandle,\r\n dragPreviewClassName,\r\n dragPreviewStyle,\r\n onDragStart,\r\n onDragEnd,\r\n disabled,\r\n ]\r\n );\r\n\r\n const createDropTarget = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n\r\n return dropTargetForElements({\r\n element,\r\n getData: ({ input, element: targetElement }) => {\r\n const baseData = {\r\n type: DRAGGABLE_ITEM,\r\n id: item.id,\r\n index,\r\n };\r\n const allowedEdges =\r\n direction === \"horizontal\" ? ([\"left\", \"right\"] as const) : ([\"top\", \"bottom\"] as const);\r\n\r\n return attachClosestEdge(baseData, {\r\n input,\r\n element: targetElement,\r\n allowedEdges: [...allowedEdges],\r\n });\r\n },\r\n canDrop: ({ source }) =>\n source.data?.type === DRAGGABLE_ITEM && source.data?.id !== item.id,\n onDragEnter: ({ source, self }) => {\n if (source.data?.id !== self.data?.id) {\n setIsHovered(true);\n if (showDropIndicator) {\r\n setDropPosition(dropIndicatorPosition);\r\n }\r\n }\r\n },\r\n onDragLeave: () => {\r\n setIsHovered(false);\r\n setDropPosition(null);\r\n },\r\n onDrop: () => {\r\n setIsHovered(false);\r\n setDropPosition(null);\r\n },\r\n });\r\n },\r\n [item.id, index, direction, disabled, showDropIndicator, dropIndicatorPosition]\r\n );\r\n\r\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n if (disabled) {\n // provide a no-op cleanup to satisfy all code paths\n return () => {};\n }\r\n\r\n // normal draggable + droptarget setup\r\n return combine(createDraggable(element), createDropTarget(element));\r\n }, [index, createDraggable, createDropTarget, disabled]);\r\n\r\n return (\r\n <div\n ref={elementRef}\n data-index={index}\n data-rdk-item-id={item.id}\n className={className}\n style={getItemStyles()}\n >\n {showDropIndicator && dropPosition === \"top\" && (\r\n <div\r\n className={dropIndicatorClassName}\r\n style={{\r\n ...defaultStyles.dropIndicator,\r\n ...dropIndicatorStyle,\r\n top: -1,\r\n }}\r\n />\r\n )}\r\n {children}\r\n {showDropIndicator && dropPosition === \"bottom\" && (\r\n <div\r\n className={dropIndicatorClassName}\r\n style={{\r\n ...defaultStyles.dropIndicator,\r\n ...dropIndicatorStyle,\r\n bottom: -1,\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n","import type { DraggableItem, OrderUpdate } from '../types';\r\n\r\nexport function reorder<T>(list: T[], startIndex: number, endIndex: number): T[] {\r\n const result = Array.from(list);\r\n const [removed] = result.splice(startIndex, 1);\r\n result.splice(endIndex, 0, removed);\r\n return result;\r\n}\r\n\r\nexport function normalizeDestinationIndex(params: {\r\n itemCount: number;\r\n sourceIndex: number;\r\n rawDestinationIndex: number;\r\n isSameList: boolean;\r\n}): number {\r\n const { itemCount, sourceIndex, rawDestinationIndex, isSameList } = params;\r\n\r\n if (itemCount <= 0) return 0;\r\n\r\n const maxRaw = itemCount;\r\n const clampedRaw = Math.max(0, Math.min(rawDestinationIndex, maxRaw));\r\n const adjusted = isSameList && sourceIndex < clampedRaw ? clampedRaw - 1 : clampedRaw;\r\n const maxFinal = isSameList ? itemCount - 1 : itemCount;\r\n\r\n return Math.max(0, Math.min(adjusted, maxFinal));\r\n}\r\n\r\nexport function reorderMany<T>(list: T[], selectedIndexes: number[], rawDestinationIndex: number): T[] {\r\n const uniqueIndexes = Array.from(\r\n new Set(selectedIndexes.filter((index) => index >= 0 && index < list.length))\r\n ).sort((a, b) => a - b);\r\n\r\n if (uniqueIndexes.length === 0) return list;\r\n\r\n const selectedSet = new Set(uniqueIndexes);\r\n const moving = uniqueIndexes.map((index) => list[index]);\r\n const remaining = list.filter((_, index) => !selectedSet.has(index));\r\n\r\n const clampedRaw = Math.max(0, Math.min(rawDestinationIndex, list.length));\r\n const removedBeforeDestination = uniqueIndexes.filter((index) => index < clampedRaw).length;\r\n const insertionIndex = Math.max(\r\n 0,\r\n Math.min(clampedRaw - removedBeforeDestination, remaining.length)\r\n );\r\n\r\n const result = [...remaining];\r\n result.splice(insertionIndex, 0, ...moving);\r\n return result;\r\n}\r\n\r\nexport function calculateOrderUpdates<T extends DraggableItem>(oldItems: T[], newItems: T[]): OrderUpdate[] {\r\n const oldIndexById = new Map(oldItems.map((item, index) => [item.id, index]));\r\n\r\n return newItems.flatMap((item, index) => {\r\n const oldIndex = oldIndexById.get(item.id);\r\n if (oldIndex === undefined || oldIndex === index) return [];\r\n return [{ id: item.id, newPosition: index, moved: true }];\r\n });\r\n}\r\n","import { extractClosestEdge } from \"@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge\";\nimport type { ElementEventPayloadMap } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport type { DraggableItem } from \"../types\";\nimport { reorder, reorderMany, normalizeDestinationIndex } from \"../utils/order\";\n\nexport type ListDirection = \"vertical\" | \"horizontal\";\nexport const DEFAULT_DIRECTION: ListDirection = \"vertical\";\n\nexport type MonitorOptions = {\n direction: ListDirection;\n selectedIds: string[];\n multiDragEnabled: boolean;\n liveReorder: boolean;\n};\n\nexport type DestinationInfo = {\n rawDestinationIndex: number;\n previewKey: string;\n} | null;\n\ntype LocationCurrent = ElementEventPayloadMap[\"onDrop\"][\"location\"][\"current\"];\n\nfunction getDistanceToTargetCenter(\n target: LocationCurrent[\"dropTargets\"][number],\n input: LocationCurrent[\"input\"]\n): number {\n const rect = target.element.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n return (input.clientX - centerX) ** 2 + (input.clientY - centerY) ** 2;\n}\n\nfunction getClosestDestinationTarget(params: {\n dropTargets: LocationCurrent[\"dropTargets\"];\n input: LocationCurrent[\"input\"];\n sourceId: string;\n excludedIds: Set<string>;\n}): LocationCurrent[\"dropTargets\"][number] | null {\n const { dropTargets, input, sourceId, excludedIds } = params;\n\n const candidates = dropTargets.filter((target) => {\n if (target.data?.type !== \"draggable-item\") return false;\n const targetId = String(target.data?.id ?? \"\");\n if (!targetId || targetId === sourceId) return false;\n return !excludedIds.has(targetId);\n });\n\n if (candidates.length === 0) return null;\n if (candidates.length === 1) return candidates[0];\n\n return candidates.reduce((closest, current) =>\n getDistanceToTargetCenter(current, input) <\n getDistanceToTargetCenter(closest, input)\n ? current\n : closest\n );\n}\n\nfunction getContainerInsertionIndex<T extends DraggableItem>(params: {\n containerElement: Element;\n input: LocationCurrent[\"input\"];\n direction: ListDirection;\n items: T[];\n excludedIds: Set<string>;\n}): number | null {\n const { containerElement, input, direction, items, excludedIds } = params;\n const indexById = new Map(items.map((item, index) => [item.id, index]));\n\n const itemElements = Array.from(\n containerElement.querySelectorAll<HTMLElement>(\"[data-rdk-item-id]\")\n );\n\n if (itemElements.length === 0) return 0;\n\n const targetPoint =\n direction === \"horizontal\" ? input.clientX : input.clientY;\n\n const points = itemElements\n .map((element) => {\n const itemId = element.getAttribute(\"data-rdk-item-id\");\n if (!itemId || excludedIds.has(itemId)) return null;\n\n const index = indexById.get(itemId);\n if (index === undefined) return null;\n\n const rect = element.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n const distance =\n (input.clientX - centerX) ** 2 + (input.clientY - centerY) ** 2;\n const centerOnAxis = direction === \"horizontal\" ? centerX : centerY;\n\n return { index, distance, centerOnAxis };\n })\n .filter(\n (\n point\n ): point is { index: number; distance: number; centerOnAxis: number } =>\n point !== null\n );\n\n if (points.length === 0) return null;\n\n const closest = points.reduce((nearest, current) =>\n current.distance < nearest.distance ? current : nearest\n );\n\n return targetPoint >= closest.centerOnAxis ? closest.index + 1 : closest.index;\n}\n\nexport function hasOrderChanged<T extends DraggableItem>(oldItems: T[], newItems: T[]): boolean {\n if (oldItems.length !== newItems.length) return true;\n return newItems.some((item, index) => item.id !== oldItems[index]?.id);\n}\n\nexport function getMovingIds<T extends DraggableItem>(params: {\n items: T[];\n sourceId: string;\n selectedIds: string[];\n multiDragEnabled: boolean;\n}): Set<string> {\n const { items, sourceId, selectedIds, multiDragEnabled } = params;\n\n if (!multiDragEnabled) return new Set([sourceId]);\n\n const idsInList = new Set(items.map((item) => item.id));\n const selectedSet = new Set(selectedIds.filter((id) => idsInList.has(id)));\n\n if (!selectedSet.has(sourceId)) {\n return new Set([sourceId]);\n }\n\n return selectedSet;\n}\n\nexport function reorderFromDragState<T extends DraggableItem>(params: {\n items: T[];\n sourceId: string;\n sourceIndex: number;\n rawDestinationIndex: number;\n selectedIds: string[];\n multiDragEnabled: boolean;\n}): T[] {\n const {\n items,\n sourceId,\n sourceIndex,\n rawDestinationIndex,\n selectedIds,\n multiDragEnabled,\n } = params;\n\n if (multiDragEnabled) {\n const selectedSet = new Set(selectedIds);\n if (!selectedSet.has(sourceId)) {\n selectedSet.clear();\n }\n selectedSet.add(sourceId);\n\n const selectedIndexes = items\n .map((item, index) => (selectedSet.has(item.id) ? index : -1))\n .filter((index) => index !== -1);\n\n if (selectedIndexes.length > 1) {\n return reorderMany(items, selectedIndexes, rawDestinationIndex);\n }\n }\n\n const destinationIndex = normalizeDestinationIndex({\n itemCount: items.length,\n sourceIndex,\n rawDestinationIndex,\n isSameList: true,\n });\n\n return reorder(items, sourceIndex, destinationIndex);\n}\n\nexport function resolveDestination<T extends DraggableItem>(params: {\n location: LocationCurrent;\n sourceId: string;\n sourceIndex: number;\n direction: ListDirection;\n items: T[];\n excludedIds: Set<string>;\n}): DestinationInfo {\n const { location, sourceId, sourceIndex, direction, items, excludedIds } = params;\n const { dropTargets, input } = location;\n\n const destinationTarget = getClosestDestinationTarget({\n dropTargets,\n input,\n sourceId,\n excludedIds,\n });\n\n const containerTarget = dropTargets.find(\n (target) => target.data?.type === \"container\"\n );\n\n if (!destinationTarget && !containerTarget) return null;\n\n if (!destinationTarget) {\n if (!containerTarget) return null;\n\n const insertionIndex = getContainerInsertionIndex({\n containerElement: containerTarget.element,\n input,\n direction,\n items,\n excludedIds,\n });\n\n const rawDestinationIndex = insertionIndex ?? items.length;\n\n return {\n rawDestinationIndex,\n previewKey: `container:${rawDestinationIndex}`,\n };\n }\n\n const targetId = String(destinationTarget.data?.id ?? \"\");\n if (!targetId) return null;\n\n const targetIndex = items.findIndex((item) => item.id === targetId);\n if (targetIndex === -1) {\n // Fallback to target.data.index is unreliable after live reorders.\n // If the target id is not present in current items, skip this update.\n return null;\n }\n\n const edge = extractClosestEdge(destinationTarget.data);\n let isAfter: boolean;\n\n // Slot-based semantics:\n // dropping on an item moves dragged item to that item's slot,\n // which is \"after\" when moving down and \"before\" when moving up.\n if (sourceIndex < targetIndex) {\n isAfter = true;\n } else if (sourceIndex > targetIndex) {\n isAfter = false;\n } else if (edge === null) {\n const rect = destinationTarget.element.getBoundingClientRect();\n const axisCenter =\n direction === \"horizontal\"\n ? rect.left + rect.width / 2\n : rect.top + rect.height / 2;\n const axisPoint = direction === \"horizontal\" ? input.clientX : input.clientY;\n isAfter = axisPoint >= axisCenter;\n } else {\n isAfter = edge === \"bottom\" || (direction === \"horizontal\" && edge === \"right\");\n }\n\n const rawDestinationIndex = isAfter ? targetIndex + 1 : targetIndex;\n\n return {\n rawDestinationIndex,\n previewKey: `item:${targetId}:${isAfter ? \"after\" : \"before\"}`,\n };\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { monitorForElements } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport type { ElementEventPayloadMap } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\nimport type { DraggableItem, OrderUpdate } from \"../types\";\nimport { calculateOrderUpdates } from \"../utils/order\";\nimport {\n DEFAULT_DIRECTION,\n getMovingIds,\n hasOrderChanged,\n reorderFromDragState,\n resolveDestination,\n type ListDirection,\n type MonitorOptions,\n} from \"./useDragDropMonitor.logic\";\n\nexport function useDragDropMonitor<T extends DraggableItem>({\n items,\n onReorder,\n disabled = false,\n direction = DEFAULT_DIRECTION,\n selectedIds = [],\n multiDragEnabled = false,\n liveReorder = false,\n}: {\n items: T[];\n onReorder: (newItems: T[], orderUpdates: OrderUpdate[]) => void;\n disabled?: boolean;\n direction?: ListDirection;\n selectedIds?: string[];\n multiDragEnabled?: boolean;\n liveReorder?: boolean;\n}) {\n const itemsRef = useRef<T[]>(items);\n const onReorderRef = useRef(onReorder);\n const optionsRef = useRef<MonitorOptions>({\n direction,\n selectedIds,\n multiDragEnabled,\n liveReorder,\n });\n\n const dragSessionRef = useRef<{\n sourceId: string | null;\n movingIds: Set<string> | null;\n originalItems: T[] | null;\n didLiveReorder: boolean;\n lastPreviewKey: string | null;\n }>({\n sourceId: null,\n movingIds: null,\n originalItems: null,\n didLiveReorder: false,\n lastPreviewKey: null,\n });\n\n useEffect(() => {\n itemsRef.current = items;\n onReorderRef.current = onReorder;\n optionsRef.current = {\n direction,\n selectedIds,\n multiDragEnabled,\n liveReorder,\n };\n }, [items, onReorder, direction, selectedIds, multiDragEnabled, liveReorder]);\n\n const resetDragSession = useCallback(() => {\n dragSessionRef.current = {\n sourceId: null,\n movingIds: null,\n originalItems: null,\n didLiveReorder: false,\n lastPreviewKey: null,\n };\n }, []);\n\n const getSourceIndex = useCallback((sourceId: string, sourceDataIndex: unknown): number => {\n const currentItems = itemsRef.current;\n const currentIndex = currentItems.findIndex((item) => item.id === sourceId);\n if (currentIndex !== -1) return currentIndex;\n\n const parsedIndex = Number(sourceDataIndex);\n return Number.isFinite(parsedIndex) ? parsedIndex : -1;\n }, []);\n\n const getMovingIdsForSource = useCallback((sourceId: string): Set<string> => {\n const currentItems = itemsRef.current;\n const { selectedIds: currentSelectedIds, multiDragEnabled: currentMultiDragEnabled } =\n optionsRef.current;\n\n return getMovingIds({\n items: currentItems,\n sourceId,\n selectedIds: currentSelectedIds,\n multiDragEnabled: currentMultiDragEnabled,\n });\n }, []);\n\n const getSessionMovingIds = useCallback(\n (sourceId: string): Set<string> => {\n const sessionMovingIds = dragSessionRef.current.movingIds;\n if (sessionMovingIds) {\n return new Set(sessionMovingIds);\n }\n return getMovingIdsForSource(sourceId);\n },\n [getMovingIdsForSource]\n );\n\n const commitReorder = useCallback(\n ({\n sourceId,\n sourceIndex,\n rawDestinationIndex,\n }: {\n sourceId: string;\n sourceIndex: number;\n rawDestinationIndex: number;\n }): boolean => {\n const oldItems = [...itemsRef.current];\n const {\n selectedIds: currentSelectedIds,\n multiDragEnabled: currentMultiDragEnabled,\n } = optionsRef.current;\n\n const newItems = reorderFromDragState({\n items: oldItems,\n sourceId,\n sourceIndex,\n rawDestinationIndex,\n selectedIds: currentSelectedIds,\n multiDragEnabled: currentMultiDragEnabled,\n });\n\n if (!hasOrderChanged(oldItems, newItems)) return false;\n\n const orderUpdates = calculateOrderUpdates(oldItems, newItems);\n itemsRef.current = newItems;\n onReorderRef.current(newItems, orderUpdates);\n return true;\n },\n []\n );\n\n const handleDragStart = useCallback(\n ({ source }: ElementEventPayloadMap[\"onDragStart\"]) => {\n if (source.data?.type !== \"draggable-item\") return;\n\n const sourceId = source.data?.id as string | undefined;\n if (!sourceId) return;\n\n const currentItems = itemsRef.current;\n const { selectedIds: currentSelectedIds, multiDragEnabled: currentMultiDragEnabled } =\n optionsRef.current;\n const movingIds = getMovingIds({\n items: currentItems,\n sourceId,\n selectedIds: currentSelectedIds,\n multiDragEnabled: currentMultiDragEnabled,\n });\n\n dragSessionRef.current = {\n sourceId,\n movingIds,\n originalItems: optionsRef.current.liveReorder ? [...currentItems] : null,\n didLiveReorder: false,\n lastPreviewKey: null,\n };\n },\n []\n );\n\n const handleDropTargetChange = useCallback(\n ({ location, source }: ElementEventPayloadMap[\"onDropTargetChange\"]) => {\n if (source.data?.type !== \"draggable-item\") return;\n\n const { direction: currentDirection, liveReorder: currentLiveReorder } =\n optionsRef.current;\n if (!currentLiveReorder) return;\n\n const sourceId = source.data?.id as string | undefined;\n if (!sourceId) return;\n\n const sourceIndex = getSourceIndex(sourceId, source.data?.index);\n if (sourceIndex < 0) return;\n\n const currentItems = itemsRef.current;\n const movingIds = getSessionMovingIds(sourceId);\n const destination = resolveDestination({\n location: location.current,\n sourceId,\n sourceIndex,\n direction: currentDirection,\n items: currentItems,\n excludedIds: movingIds,\n });\n\n if (!destination) return;\n if (dragSessionRef.current.lastPreviewKey === destination.previewKey) return;\n\n const didReorder = commitReorder({\n sourceId,\n sourceIndex,\n rawDestinationIndex: destination.rawDestinationIndex,\n });\n\n dragSessionRef.current.lastPreviewKey = destination.previewKey;\n if (didReorder) {\n dragSessionRef.current.didLiveReorder = true;\n }\n },\n [getSourceIndex, getSessionMovingIds, commitReorder]\n );\n\n const handleDrop = useCallback(\n ({ location, source }: ElementEventPayloadMap[\"onDrop\"]) => {\n if (source.data?.type !== \"draggable-item\") {\n resetDragSession();\n return;\n }\n\n const sourceId = source.data?.id as string | undefined;\n if (!sourceId) {\n resetDragSession();\n return;\n }\n\n const { direction: currentDirection, liveReorder: currentLiveReorder } =\n optionsRef.current;\n const currentItems = itemsRef.current;\n const movingIds = getSessionMovingIds(sourceId);\n\n const sourceIndex = getSourceIndex(sourceId, source.data?.index);\n if (sourceIndex < 0) {\n resetDragSession();\n return;\n }\n\n const destination = resolveDestination({\n location: location.current,\n sourceId,\n sourceIndex,\n direction: currentDirection,\n items: currentItems,\n excludedIds: movingIds,\n });\n\n if (!destination) {\n const { originalItems, didLiveReorder } = dragSessionRef.current;\n if (currentLiveReorder && didLiveReorder && originalItems) {\n const oldItems = [...itemsRef.current];\n if (hasOrderChanged(oldItems, originalItems)) {\n const orderUpdates = calculateOrderUpdates(oldItems, originalItems);\n itemsRef.current = originalItems;\n onReorderRef.current(originalItems, orderUpdates);\n }\n }\n resetDragSession();\n return;\n }\n\n const { didLiveReorder, lastPreviewKey } = dragSessionRef.current;\n if (currentLiveReorder && didLiveReorder && lastPreviewKey === destination.previewKey) {\n resetDragSession();\n return;\n }\n\n commitReorder({\n sourceId,\n sourceIndex,\n rawDestinationIndex: destination.rawDestinationIndex,\n });\n resetDragSession();\n },\n [getSessionMovingIds, getSourceIndex, commitReorder, resetDragSession]\n );\n\n useEffect(() => {\n if (disabled) return;\n\n return monitorForElements({\n onDragStart: handleDragStart,\n onDropTargetChange: handleDropTargetChange,\n onDrop: handleDrop,\n });\n }, [disabled, handleDragStart, handleDropTargetChange, handleDrop]);\n\n // Kept for backward compatibility with existing tests/internals.\n return useCallback(() => {}, []);\n}\r\n","import React, { useEffect, useRef, useState, useCallback } from \"react\";\r\nimport { dropTargetForElements } from \"@atlaskit/pragmatic-drag-and-drop/element/adapter\";\r\nimport { DraggableItemWrapper } from \"./DraggableItemWrapper\";\r\nimport type { DragDropListProps, DraggableItem } from \"../types\";\r\nimport { useDragDropMonitor } from \"../hooks/useDragDropMonitor\";\r\nimport { defaultStyles } from \"../styles/defaultStyles\";\r\n\r\nexport function DragDropList<T extends DraggableItem>({\r\n items,\r\n onReorder,\r\n renderItem,\r\n containerClassName = \"\",\r\n containerStyle = {},\r\n itemClassName = \"\",\r\n itemStyle = {},\r\n dragPreviewClassName = \"\",\r\n dragPreviewStyle = {},\r\n onDragStart,\r\n onDragEnd,\r\n disabled = false,\r\n gap,\r\n direction = \"vertical\",\r\n showDropIndicator = false,\r\n dropIndicatorClassName = \"\",\r\n dropIndicatorStyle = {},\r\n dropIndicatorPosition = \"bottom\",\r\n dragHandle,\n selectedIds = [],\n multiDragEnabled = false,\n liveReorder = false,\n}: DragDropListProps<T>) {\n const containerRef = useRef<HTMLDivElement>(null);\r\n useDragDropMonitor({\n items,\n onReorder,\n disabled,\n direction,\n selectedIds,\n multiDragEnabled,\n liveReorder,\n });\n const [isDraggingOver, setIsDraggingOver] = useState(false);\r\n\r\n const getContainerStyles = (): React.CSSProperties => {\r\n const baseStyle = { ...defaultStyles.container.default };\r\n\r\n if (direction === \"horizontal\") {\r\n Object.assign(baseStyle, defaultStyles.container.horizontal);\r\n }\r\n\r\n if (isDraggingOver) {\r\n Object.assign(baseStyle, defaultStyles.container.dragging);\r\n }\r\n\r\n if (gap !== undefined) {\r\n baseStyle.gap = typeof gap === \"number\" ? `${gap}px` : gap;\r\n }\r\n\r\n return { ...baseStyle, ...containerStyle };\r\n };\r\n\r\n const createDropTarget = useCallback(\r\n (element: HTMLElement) => {\r\n if (disabled) return () => {};\r\n\r\n return dropTargetForElements({\r\n element,\r\n getData: () => ({ type: \"container\" }),\r\n onDragEnter: () => setIsDraggingOver(true),\r\n onDragLeave: () => setIsDraggingOver(false),\r\n onDrop: () => setIsDraggingOver(false),\r\n });\r\n },\r\n [disabled]\r\n );\r\n\r\n useEffect(() => {\r\n const element = containerRef.current;\r\n if (!element || disabled) return;\r\n\r\n return createDropTarget(element);\r\n }, [createDropTarget, disabled]);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={containerClassName}\r\n style={getContainerStyles()}\r\n >\r\n {items.map((item, index) => (\r\n <DraggableItemWrapper\r\n key={item.id}\r\n item={item}\r\n index={index}\r\n className={itemClassName}\r\n style={itemStyle}\r\n dragPreviewClassName={dragPreviewClassName}\r\n dragPreviewStyle={dragPreviewStyle}\r\n onDragStart={onDragStart}\r\n onDragEnd={onDragEnd}\r\n disabled={disabled}\r\n showDropIndicator={showDropIndicator}\r\n dropIndicatorClassName={dropIndicatorClassName}\r\n dropIndicatorStyle={dropIndicatorStyle}\r\n dropIndicatorPosition={dropIndicatorPosition}\r\n direction={direction}\r\n dragHandle={dragHandle}\r\n >\r\n {renderItem(item, index)}\r\n </DraggableItemWrapper>\r\n ))}\r\n </div>\r\n );\r\n}\r\n"],"names":["defaultStyles","container","default","minHeight","transition","borderRadius","border","backgroundColor","display","flexDirection","gap","padding","dragging","borderColor","horizontal","flexWrap","item","cursor","userSelect","position","opacity","hover","transform","boxShadow","disabled","preview","pointerEvents","zIndex","dropIndicator","height","left","right","DRAGGABLE_ITEM","DraggableItemWrapper","index","children","className","style","dragPreviewClassName","dragPreviewStyle","onDragStart","onDragEnd","showDropIndicator","dropIndicatorClassName","dropIndicatorStyle","dropIndicatorPosition","direction","dragHandle","elementRef","useRef","isDragging","setIsDragging","useState","isHovered","setIsHovered","dropPosition","setDropPosition","createDraggable","useCallback","element","dragHandleElement","querySelector","undefined","draggable","canDrag","Boolean","getInitialData","type","id","onGenerateDragPreview","nativeSetDragImage","previewElement","cloneNode","previewStyles","Object","assign","width","offsetWidth","offsetHeight","document","body","appendChild","requestAnimationFrame","remove","onDrop","createDropTarget","dropTargetForElements","getData","input","targetElement","baseData","allowedEdges","attachClosestEdge","canDrop","source","_a","_b","data","onDragEnter","self","onDragLeave","useEffect","current","combine","React","createElement","ref","baseStyle","getItemStyles","top","bottom","calculateOrderUpdates","oldItems","newItems","oldIndexById","Map","map","flatMap","oldIndex","get","newPosition","moved","getDistanceToTargetCenter","target","rect","getBoundingClientRect","centerX","centerY","Math","pow","clientX","clientY","hasOrderChanged","length","some","getMovingIds","params","items","sourceId","selectedIds","multiDragEnabled","Set","idsInList","selectedSet","filter","has","reorderFromDragState","sourceIndex","rawDestinationIndex","clear","add","selectedIndexes","list","uniqueIndexes","Array","from","sort","a","b","moving","remaining","_","clampedRaw","max","min","removedBeforeDestination","insertionIndex","result","splice","reorderMany","destinationIndex","itemCount","isSameList","maxRaw","adjusted","maxFinal","normalizeDestinationIndex","startIndex","endIndex","removed","reorder","resolveDestination","location","excludedIds","dropTargets","destinationTarget","candidates","targetId","String","_c","reduce","closest","getClosestDestinationTarget","containerTarget","find","containerElement","indexById","itemElements","querySelectorAll","targetPoint","points","itemId","getAttribute","distance","centerOnAxis","point","nearest","getContainerInsertionIndex","previewKey","targetIndex","findIndex","edge","extractClosestEdge","isAfter","axisCenter","useDragDropMonitor","onReorder","liveReorder","itemsRef","onReorderRef","optionsRef","dragSessionRef","movingIds","originalItems","didLiveReorder","lastPreviewKey","resetDragSession","getSourceIndex","sourceDataIndex","currentIndex","parsedIndex","Number","isFinite","getMovingIdsForSource","currentItems","currentSelectedIds","currentMultiDragEnabled","getSessionMovingIds","sessionMovingIds","commitReorder","orderUpdates","handleDragStart","handleDropTargetChange","currentDirection","currentLiveReorder","destination","didReorder","handleDrop","monitorForElements","onDropTargetChange","renderItem","containerClassName","containerStyle","itemClassName","itemStyle","containerRef","isDraggingOver","setIsDraggingOver","getContainerStyles","key"],"mappings":"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"}
|