@os-design/drag-sort 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -74,11 +74,11 @@ var useDragEffect = function useDragEffect(props) {
74
74
  }, [onDragEnd]); // The initial bounds of the dragged node.
75
75
  // We can't read the bounds of the dragged node on the fly because the node can be unmounted in the virtual list.
76
76
 
77
- var initDraggedNodeRect = (0, _useInitRect["default"])(draggedNode === null || draggedNode === void 0 ? void 0 : draggedNode.node[2]); // The initial scroll position of the list where the dragged node is located.
77
+ var initDraggedNodeRect = (0, _useInitRect["default"])(draggedNode ? draggedNode.node[2] : undefined); // The initial scroll position of the list where the dragged node is located.
78
78
  // Used to detect the actual position of the dragged node.
79
79
  // The purpose is the same as with initDraggedNodeRect.
80
80
 
81
- var initDraggedNodeListScrollOffset = (0, _useInitScrollOffset["default"])(draggedNode === null || draggedNode === void 0 ? void 0 : draggedNode.list.ref); // The central position of the dragged node
81
+ var initDraggedNodeListScrollOffset = (0, _useInitScrollOffset["default"])(draggedNode ? draggedNode.list.ref : undefined); // The central position of the dragged node
82
82
 
83
83
  var position = (0, _react.useMemo)(function () {
84
84
  if (!draggedNode || !initDraggedNodeRect) return null;
@@ -200,7 +200,7 @@ var useDragEffect = function useDragEffect(props) {
200
200
  } // Dragging inside another list
201
201
 
202
202
 
203
- if (targetList && targetList !== draggedNode.list && (prevTargetNode === null || prevTargetNode === void 0 ? void 0 : prevTargetNode.list) !== targetList) {
203
+ if (targetList && targetList !== draggedNode.list && (!prevTargetNode || prevTargetNode.list !== targetList)) {
204
204
  var _tail = targetList.getTail();
205
205
 
206
206
  if (!_tail) return;
@@ -284,7 +284,7 @@ var useDragEffect = function useDragEffect(props) {
284
284
  } // Dragging in another list
285
285
 
286
286
 
287
- if (targetList && targetList !== draggedNode.list && (prevTargetNode === null || prevTargetNode === void 0 ? void 0 : prevTargetNode.list) === targetList) {
287
+ if (targetList && targetList !== draggedNode.list && prevTargetNode && prevTargetNode.list === targetList) {
288
288
  var _axis = targetList.horizontal ? 'x' : 'y';
289
289
 
290
290
  var _prevTargetNodeRect = (0, _getNodeRect["default"])(prevTargetNode.node[2]);
@@ -319,7 +319,7 @@ var useDragEffect = function useDragEffect(props) {
319
319
  _useThrottle2 = _slicedToArray(_useThrottle, 1),
320
320
  throttledUpdateTargetNode = _useThrottle2[0];
321
321
 
322
- (0, _useEvent["default"])(targetList === null || targetList === void 0 ? void 0 : targetList.ref, 'scroll', throttledUpdateTargetNode);
322
+ (0, _useEvent["default"])(targetList ? targetList.ref : undefined, 'scroll', throttledUpdateTargetNode);
323
323
  (0, _useEvent["default"])(window, 'scroll', throttledUpdateTargetNode); // Reset styles of the nodes when the dragged node was dropped
324
324
 
325
325
  (0, _react.useEffect)(function () {
@@ -355,7 +355,7 @@ var useDragEffect = function useDragEffect(props) {
355
355
 
356
356
  var tail = draggedNode.list.getTail();
357
357
 
358
- if ((targetNode === null || targetNode === void 0 ? void 0 : targetNode.list) !== draggedNode.list && tail) {
358
+ if ((!targetNode || targetNode.list !== draggedNode.list) && tail) {
359
359
  var _node9 = tail;
360
360
 
361
361
  while (true) {
@@ -425,13 +425,11 @@ var useDragEffect = function useDragEffect(props) {
425
425
  draggedNodeIndex = _draggedNode$node3[4];
426
426
 
427
427
  var update = function update(nodeProps) {
428
- var _targetNodeRef$curren;
429
-
430
428
  var setStyle = nodeProps.setStyle,
431
429
  index = nodeProps.index;
432
430
  var targetNode = targetNodeRef.current; // If the dragged node outside the origin list
433
431
 
434
- if (((_targetNodeRef$curren = targetNodeRef.current) === null || _targetNodeRef$curren === void 0 ? void 0 : _targetNodeRef$curren.list) !== draggedNode.list && index > draggedNodeIndex) {
432
+ if ((!targetNodeRef.current || targetNodeRef.current.list !== draggedNode.list) && index > draggedNodeIndex) {
435
433
  setStyle(getNodeStyle('up', draggedNode.list.horizontal));
436
434
  return;
437
435
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/useDragEffect.ts"],"names":["HIDDEN_NODE_STYLE","opacity","pointerEvents","createEmptyNode","prev","next","current","useDragEffect","props","draggedNode","cursorPosition","listStoreRef","onDragEnd","targetRef","targetNodeRef","onDragEndRef","initDraggedNodeRect","node","initDraggedNodeListScrollOffset","list","ref","position","x","y","initWidth","initHeight","getNodeStyle","targetList","moveNode","setTargetNode","nodeIndex","id","index","clearTargetNode","getDraggedNodePos","initX","initY","initScrollLeft","initScrollTop","scrollLeft","scrollTop","getDraggedNodePosRef","draggedNodeSetStyle","removeBlankNode","updateTargetNode","prevTargetNode","startNode","type","untilTheEnd","insideAnotherList","tail","getTail","axis","horizontal","prevTargetNodeRef","draggedNodePos","isDraggingUp","head","getHead","prevTargetNodeRect","rectProp","isMoveUp","throttledUpdateTargetNode","window","draggedNodeIndex","targetNode","nodeSetStyle","targetNodeSetStyle","targetNodeIndex","update","nodeProps","setStyle","addListener","removeListener","target","dragged"],"mappings":"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","sourcesContent":["import { Position } from '@os-design/use-drag';\nimport {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport useThrottle from '@os-design/use-throttle';\nimport useEvent from '@os-design/use-event';\nimport NodeList, { ExistingNode, Node, NodeProps } from './NodeList';\nimport ListStore from './ListStore';\nimport getElementScroll from './getElementScroll';\nimport useTargetList from './useTargetList';\nimport useInitRect from './useInitRect';\nimport useInitScrollOffset from './useInitScrollOffset';\nimport useGetNodeStyle from './useGetNodeStyle';\n// eslint-disable-next-line import/no-cycle\nimport useMoveNode from './useMoveNode';\nimport getNodeRect from './getNodeRect';\n// eslint-disable-next-line import/no-cycle\nimport useBlankNode from './useBlankNode';\n\nexport interface DraggedNode {\n list: NodeList;\n node: ExistingNode;\n position: Position;\n}\n\ninterface TargetNode {\n list: NodeList;\n node: ExistingNode;\n}\n\nexport interface ItemLocation {\n id: string;\n index: number;\n}\n\nexport type DragEndHandler = (\n dragged: ItemLocation,\n target: ItemLocation\n) => void;\n\ninterface UseDragEffectProps {\n draggedNode: DraggedNode | null;\n cursorPosition: Position;\n listStoreRef: RefObject<ListStore>;\n onDragEnd: DragEndHandler;\n}\n\nconst HIDDEN_NODE_STYLE: CSSProperties = {\n opacity: 0,\n pointerEvents: 'none',\n};\n\nconst createEmptyNode = ({\n prev = null,\n next = null,\n}: {\n prev?: Node;\n next?: Node;\n}): ExistingNode => [prev, next, { current: null }, () => {}, -1];\n\n/* eslint-disable @typescript-eslint/no-explicit-any,no-constant-condition */\n\nconst useDragEffect = (props: UseDragEffectProps) => {\n const { draggedNode, cursorPosition, listStoreRef, onDragEnd } = props;\n\n const targetRef = useRef<ItemLocation | null>(null);\n const targetNodeRef = useRef<TargetNode | null>(draggedNode);\n\n useEffect(() => {\n targetNodeRef.current = draggedNode;\n }, [draggedNode]);\n\n const onDragEndRef = useRef(onDragEnd);\n useEffect(() => {\n onDragEndRef.current = onDragEnd;\n }, [onDragEnd]);\n\n // The initial bounds of the dragged node.\n // We can't read the bounds of the dragged node on the fly because the node can be unmounted in the virtual list.\n const initDraggedNodeRect = useInitRect(draggedNode?.node[2]);\n\n // The initial scroll position of the list where the dragged node is located.\n // Used to detect the actual position of the dragged node.\n // The purpose is the same as with initDraggedNodeRect.\n const initDraggedNodeListScrollOffset = useInitScrollOffset(\n draggedNode?.list.ref\n );\n\n // The central position of the dragged node\n const position = useMemo(() => {\n if (!draggedNode || !initDraggedNodeRect) return null;\n const { x, y } = cursorPosition;\n const { initWidth, initHeight } = initDraggedNodeRect;\n return {\n x: x - draggedNode.position.x + initWidth / 2,\n y: y - draggedNode.position.y + initHeight / 2,\n };\n }, [cursorPosition, draggedNode, initDraggedNodeRect]);\n\n // Returns the style for moving the node in the specified direction\n const getNodeStyle = useGetNodeStyle(initDraggedNodeRect);\n\n // The list in which the cursor is located\n const targetList = useTargetList(position, listStoreRef);\n\n const moveNode = useMoveNode(position, draggedNode, getNodeStyle);\n\n const setTargetNode = useCallback((list: NodeList, node: ExistingNode) => {\n const [, , , , nodeIndex] = node;\n targetNodeRef.current = { list, node };\n targetRef.current = { id: list.id, index: nodeIndex };\n }, []);\n\n const clearTargetNode = useCallback(() => {\n targetNodeRef.current = null;\n targetRef.current = null;\n }, []);\n\n // Returns the central position of the dragged node in the list\n const getDraggedNodePos = useCallback(() => {\n if (\n !targetList ||\n !targetList.ref.current ||\n !initDraggedNodeRect ||\n !initDraggedNodeListScrollOffset\n ) {\n return null;\n }\n const { initX, initY, initWidth, initHeight } = initDraggedNodeRect;\n const { initScrollLeft, initScrollTop } = initDraggedNodeListScrollOffset;\n const { scrollLeft, scrollTop } = getElementScroll(targetList.ref.current);\n return {\n x: initX + initWidth / 2 + initScrollLeft - scrollLeft,\n y: initY + initHeight / 2 + initScrollTop - scrollTop,\n };\n }, [initDraggedNodeListScrollOffset, initDraggedNodeRect, targetList]);\n\n const getDraggedNodePosRef = useRef(getDraggedNodePos);\n useEffect(() => {\n getDraggedNodePosRef.current = getDraggedNodePos;\n }, [getDraggedNodePos]);\n\n // Hide the dragged node\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , draggedNodeSetStyle] = draggedNode.node;\n draggedNodeSetStyle(HIDDEN_NODE_STYLE);\n return () => draggedNodeSetStyle({});\n }, [draggedNode]);\n\n // Append the blank node to the list to increase the height of it.\n // Used when the dragged node is located inside another list.\n const removeBlankNode = useBlankNode({\n draggedNode,\n targetList,\n initDraggedNodeRect,\n });\n\n const updateTargetNode = useCallback(() => {\n if (!draggedNode) return;\n const prevTargetNode = targetNodeRef.current; // The last updated node\n\n // Dragging outside the list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList !== draggedNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n });\n clearTargetNode();\n }\n\n // Dragging outside another list\n if (\n prevTargetNode &&\n prevTargetNode.list !== draggedNode.list &&\n targetList !== prevTargetNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n insideAnotherList: true,\n });\n removeBlankNode();\n clearTargetNode();\n }\n\n // Dragging inside the list\n if (!prevTargetNode && targetList === draggedNode.list) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging inside another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode?.list !== targetList\n ) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in the same list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList === draggedNode.list\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const [, , prevTargetNodeRef, ,] = prevTargetNode.node;\n if (!prevTargetNodeRef.current) {\n // The target node was unmounted. It happens when the virtual list is used.\n // If the cursor is above the dragged node, we need to move the nodes down from the tail to the node where\n // the cursor is located. Otherwise, we need to move the nodes up from the head to the node where the cursor\n // is located.\n const draggedNodePos = getDraggedNodePosRef.current();\n if (!position || !draggedNodePos) return;\n const isDraggingUp = position[axis] < draggedNodePos[axis];\n if (isDraggingUp) {\n const tail = targetList.getTail();\n if (!tail || !tail[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ prev: tail }),\n type: 'up',\n });\n setTargetNode(targetList, node);\n } else {\n const head = targetList.getHead();\n if (!head || !head[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ next: head }),\n type: 'down',\n });\n setTargetNode(targetList, node);\n }\n return;\n }\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode?.list === targetList\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n insideAnotherList: true,\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n }\n }, [\n draggedNode,\n targetList,\n moveNode,\n clearTargetNode,\n removeBlankNode,\n setTargetNode,\n position,\n ]);\n\n // Update the target node if either the position or the target list has been changed\n useEffect(() => {\n updateTargetNode();\n }, [updateTargetNode]);\n\n // Update the target node if the target list has been scrolled\n const [throttledUpdateTargetNode] = useThrottle(updateTargetNode, 100);\n useEvent(targetList?.ref as any, 'scroll', throttledUpdateTargetNode);\n useEvent(window, 'scroll', throttledUpdateTargetNode);\n\n // Reset styles of the nodes when the dragged node was dropped\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n return () => {\n const targetNode = targetNodeRef.current;\n\n // If the dragged node was inside another list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n if (targetNode && targetNode.list !== draggedNode.list) {\n const tail = targetNode.list.getTail();\n if (!tail) return;\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n // If the dragged node was outside the origin list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n const tail = draggedNode.list.getTail();\n if (targetNode?.list !== draggedNode.list && tail) {\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n if (!targetNode) return;\n const [, , , targetNodeSetStyle, targetNodeIndex] = targetNode.node;\n if (targetNodeIndex > draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex < draggedNodeIndex) return;\n node = prev;\n }\n }\n if (targetNodeIndex < draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [, next, , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!next || nodeIndex > draggedNodeIndex) return;\n node = next;\n }\n }\n if (targetNodeIndex === draggedNodeIndex) {\n targetNodeSetStyle({});\n }\n };\n }, [draggedNode]);\n\n // Update the position of the mounted nodes between the dragged and target nodes (used in virtual list)\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n\n // If the dragged node outside the origin list\n if (\n targetNodeRef.current?.list !== draggedNode.list &&\n index > draggedNodeIndex\n ) {\n setStyle(getNodeStyle('up', draggedNode.list.horizontal));\n return;\n }\n\n if (!targetNode || !targetNode.node) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n // If the dragged node was mounted\n if (index === draggedNodeIndex) {\n setStyle(HIDDEN_NODE_STYLE);\n return;\n }\n // If the node between the dragged and target nodes was mounted\n if (index > draggedNodeIndex && index < targetNodeIndex) {\n setStyle(getNodeStyle('up', targetNode.list.horizontal));\n } else if (index < draggedNodeIndex && index > targetNodeIndex) {\n setStyle(getNodeStyle('down', targetNode.list.horizontal));\n }\n };\n draggedNode.list.addListener(update);\n return () => draggedNode.list.removeListener(update);\n }, [draggedNode, getNodeStyle]);\n\n useEffect(() => {\n if (!draggedNode || !targetList || targetList === draggedNode.list) {\n return () => {};\n }\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n if (!targetNode) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n if (index < targetNodeIndex) return;\n setStyle(getNodeStyle('down', targetList.horizontal));\n };\n targetList.addListener(update);\n return () => targetList.removeListener(update);\n }, [draggedNode, getNodeStyle, targetList]);\n\n // Call the onDragEnd callback if the draggedNode was changed to null\n useEffect(() => {\n if (!draggedNode) return () => {};\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const target = targetRef.current;\n if (!target) return;\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const dragged = { id: draggedNode.list.id, index: draggedNodeIndex };\n if (dragged.id === target.id && dragged.index === target.index) return;\n onDragEndRef.current(dragged, target);\n };\n }, [draggedNode]);\n};\n\nexport default useDragEffect;\n"],"file":"useDragEffect.js"}
1
+ {"version":3,"sources":["../../../src/utils/useDragEffect.ts"],"names":["HIDDEN_NODE_STYLE","opacity","pointerEvents","createEmptyNode","prev","next","current","useDragEffect","props","draggedNode","cursorPosition","listStoreRef","onDragEnd","targetRef","targetNodeRef","onDragEndRef","initDraggedNodeRect","node","undefined","initDraggedNodeListScrollOffset","list","ref","position","x","y","initWidth","initHeight","getNodeStyle","targetList","moveNode","setTargetNode","nodeIndex","id","index","clearTargetNode","getDraggedNodePos","initX","initY","initScrollLeft","initScrollTop","scrollLeft","scrollTop","getDraggedNodePosRef","draggedNodeSetStyle","removeBlankNode","updateTargetNode","prevTargetNode","startNode","type","untilTheEnd","insideAnotherList","tail","getTail","axis","horizontal","prevTargetNodeRef","draggedNodePos","isDraggingUp","head","getHead","prevTargetNodeRect","rectProp","isMoveUp","throttledUpdateTargetNode","window","draggedNodeIndex","targetNode","nodeSetStyle","targetNodeSetStyle","targetNodeIndex","update","nodeProps","setStyle","addListener","removeListener","target","dragged"],"mappings":"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","sourcesContent":["import { Position } from '@os-design/use-drag';\nimport {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport useThrottle from '@os-design/use-throttle';\nimport useEvent from '@os-design/use-event';\nimport NodeList, { ExistingNode, Node, NodeProps } from './NodeList';\nimport ListStore from './ListStore';\nimport getElementScroll from './getElementScroll';\nimport useTargetList from './useTargetList';\nimport useInitRect from './useInitRect';\nimport useInitScrollOffset from './useInitScrollOffset';\nimport useGetNodeStyle from './useGetNodeStyle';\n// eslint-disable-next-line import/no-cycle\nimport useMoveNode from './useMoveNode';\nimport getNodeRect from './getNodeRect';\n// eslint-disable-next-line import/no-cycle\nimport useBlankNode from './useBlankNode';\n\nexport interface DraggedNode {\n list: NodeList;\n node: ExistingNode;\n position: Position;\n}\n\ninterface TargetNode {\n list: NodeList;\n node: ExistingNode;\n}\n\nexport interface ItemLocation {\n id: string;\n index: number;\n}\n\nexport type DragEndHandler = (\n dragged: ItemLocation,\n target: ItemLocation\n) => void;\n\ninterface UseDragEffectProps {\n draggedNode: DraggedNode | null;\n cursorPosition: Position;\n listStoreRef: RefObject<ListStore>;\n onDragEnd: DragEndHandler;\n}\n\nconst HIDDEN_NODE_STYLE: CSSProperties = {\n opacity: 0,\n pointerEvents: 'none',\n};\n\nconst createEmptyNode = ({\n prev = null,\n next = null,\n}: {\n prev?: Node;\n next?: Node;\n}): ExistingNode => [prev, next, { current: null }, () => {}, -1];\n\n/* eslint-disable @typescript-eslint/no-explicit-any,no-constant-condition */\n\nconst useDragEffect = (props: UseDragEffectProps) => {\n const { draggedNode, cursorPosition, listStoreRef, onDragEnd } = props;\n\n const targetRef = useRef<ItemLocation | null>(null);\n const targetNodeRef = useRef<TargetNode | null>(draggedNode);\n\n useEffect(() => {\n targetNodeRef.current = draggedNode;\n }, [draggedNode]);\n\n const onDragEndRef = useRef(onDragEnd);\n useEffect(() => {\n onDragEndRef.current = onDragEnd;\n }, [onDragEnd]);\n\n // The initial bounds of the dragged node.\n // We can't read the bounds of the dragged node on the fly because the node can be unmounted in the virtual list.\n const initDraggedNodeRect = useInitRect(\n draggedNode ? draggedNode.node[2] : undefined\n );\n\n // The initial scroll position of the list where the dragged node is located.\n // Used to detect the actual position of the dragged node.\n // The purpose is the same as with initDraggedNodeRect.\n const initDraggedNodeListScrollOffset = useInitScrollOffset(\n draggedNode ? draggedNode.list.ref : undefined\n );\n\n // The central position of the dragged node\n const position = useMemo(() => {\n if (!draggedNode || !initDraggedNodeRect) return null;\n const { x, y } = cursorPosition;\n const { initWidth, initHeight } = initDraggedNodeRect;\n return {\n x: x - draggedNode.position.x + initWidth / 2,\n y: y - draggedNode.position.y + initHeight / 2,\n };\n }, [cursorPosition, draggedNode, initDraggedNodeRect]);\n\n // Returns the style for moving the node in the specified direction\n const getNodeStyle = useGetNodeStyle(initDraggedNodeRect);\n\n // The list in which the cursor is located\n const targetList = useTargetList(position, listStoreRef);\n\n const moveNode = useMoveNode(position, draggedNode, getNodeStyle);\n\n const setTargetNode = useCallback((list: NodeList, node: ExistingNode) => {\n const [, , , , nodeIndex] = node;\n targetNodeRef.current = { list, node };\n targetRef.current = { id: list.id, index: nodeIndex };\n }, []);\n\n const clearTargetNode = useCallback(() => {\n targetNodeRef.current = null;\n targetRef.current = null;\n }, []);\n\n // Returns the central position of the dragged node in the list\n const getDraggedNodePos = useCallback(() => {\n if (\n !targetList ||\n !targetList.ref.current ||\n !initDraggedNodeRect ||\n !initDraggedNodeListScrollOffset\n ) {\n return null;\n }\n const { initX, initY, initWidth, initHeight } = initDraggedNodeRect;\n const { initScrollLeft, initScrollTop } = initDraggedNodeListScrollOffset;\n const { scrollLeft, scrollTop } = getElementScroll(targetList.ref.current);\n return {\n x: initX + initWidth / 2 + initScrollLeft - scrollLeft,\n y: initY + initHeight / 2 + initScrollTop - scrollTop,\n };\n }, [initDraggedNodeListScrollOffset, initDraggedNodeRect, targetList]);\n\n const getDraggedNodePosRef = useRef(getDraggedNodePos);\n useEffect(() => {\n getDraggedNodePosRef.current = getDraggedNodePos;\n }, [getDraggedNodePos]);\n\n // Hide the dragged node\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , draggedNodeSetStyle] = draggedNode.node;\n draggedNodeSetStyle(HIDDEN_NODE_STYLE);\n return () => draggedNodeSetStyle({});\n }, [draggedNode]);\n\n // Append the blank node to the list to increase the height of it.\n // Used when the dragged node is located inside another list.\n const removeBlankNode = useBlankNode({\n draggedNode,\n targetList,\n initDraggedNodeRect,\n });\n\n const updateTargetNode = useCallback(() => {\n if (!draggedNode) return;\n const prevTargetNode = targetNodeRef.current; // The last updated node\n\n // Dragging outside the list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList !== draggedNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n });\n clearTargetNode();\n }\n\n // Dragging outside another list\n if (\n prevTargetNode &&\n prevTargetNode.list !== draggedNode.list &&\n targetList !== prevTargetNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n insideAnotherList: true,\n });\n removeBlankNode();\n clearTargetNode();\n }\n\n // Dragging inside the list\n if (!prevTargetNode && targetList === draggedNode.list) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging inside another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n (!prevTargetNode || prevTargetNode.list !== targetList)\n ) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in the same list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList === draggedNode.list\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const [, , prevTargetNodeRef, ,] = prevTargetNode.node;\n if (!prevTargetNodeRef.current) {\n // The target node was unmounted. It happens when the virtual list is used.\n // If the cursor is above the dragged node, we need to move the nodes down from the tail to the node where\n // the cursor is located. Otherwise, we need to move the nodes up from the head to the node where the cursor\n // is located.\n const draggedNodePos = getDraggedNodePosRef.current();\n if (!position || !draggedNodePos) return;\n const isDraggingUp = position[axis] < draggedNodePos[axis];\n if (isDraggingUp) {\n const tail = targetList.getTail();\n if (!tail || !tail[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ prev: tail }),\n type: 'up',\n });\n setTargetNode(targetList, node);\n } else {\n const head = targetList.getHead();\n if (!head || !head[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ next: head }),\n type: 'down',\n });\n setTargetNode(targetList, node);\n }\n return;\n }\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode &&\n prevTargetNode.list === targetList\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n insideAnotherList: true,\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n }\n }, [\n draggedNode,\n targetList,\n moveNode,\n clearTargetNode,\n removeBlankNode,\n setTargetNode,\n position,\n ]);\n\n // Update the target node if either the position or the target list has been changed\n useEffect(() => {\n updateTargetNode();\n }, [updateTargetNode]);\n\n // Update the target node if the target list has been scrolled\n const [throttledUpdateTargetNode] = useThrottle(updateTargetNode, 100);\n useEvent(\n (targetList ? targetList.ref : undefined) as any,\n 'scroll',\n throttledUpdateTargetNode\n );\n useEvent(window, 'scroll', throttledUpdateTargetNode);\n\n // Reset styles of the nodes when the dragged node was dropped\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n return () => {\n const targetNode = targetNodeRef.current;\n\n // If the dragged node was inside another list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n if (targetNode && targetNode.list !== draggedNode.list) {\n const tail = targetNode.list.getTail();\n if (!tail) return;\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n // If the dragged node was outside the origin list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n const tail = draggedNode.list.getTail();\n if ((!targetNode || targetNode.list !== draggedNode.list) && tail) {\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n if (!targetNode) return;\n const [, , , targetNodeSetStyle, targetNodeIndex] = targetNode.node;\n if (targetNodeIndex > draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex < draggedNodeIndex) return;\n node = prev;\n }\n }\n if (targetNodeIndex < draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [, next, , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!next || nodeIndex > draggedNodeIndex) return;\n node = next;\n }\n }\n if (targetNodeIndex === draggedNodeIndex) {\n targetNodeSetStyle({});\n }\n };\n }, [draggedNode]);\n\n // Update the position of the mounted nodes between the dragged and target nodes (used in virtual list)\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n\n // If the dragged node outside the origin list\n if (\n (!targetNodeRef.current ||\n targetNodeRef.current.list !== draggedNode.list) &&\n index > draggedNodeIndex\n ) {\n setStyle(getNodeStyle('up', draggedNode.list.horizontal));\n return;\n }\n\n if (!targetNode || !targetNode.node) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n // If the dragged node was mounted\n if (index === draggedNodeIndex) {\n setStyle(HIDDEN_NODE_STYLE);\n return;\n }\n // If the node between the dragged and target nodes was mounted\n if (index > draggedNodeIndex && index < targetNodeIndex) {\n setStyle(getNodeStyle('up', targetNode.list.horizontal));\n } else if (index < draggedNodeIndex && index > targetNodeIndex) {\n setStyle(getNodeStyle('down', targetNode.list.horizontal));\n }\n };\n draggedNode.list.addListener(update);\n return () => draggedNode.list.removeListener(update);\n }, [draggedNode, getNodeStyle]);\n\n useEffect(() => {\n if (!draggedNode || !targetList || targetList === draggedNode.list) {\n return () => {};\n }\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n if (!targetNode) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n if (index < targetNodeIndex) return;\n setStyle(getNodeStyle('down', targetList.horizontal));\n };\n targetList.addListener(update);\n return () => targetList.removeListener(update);\n }, [draggedNode, getNodeStyle, targetList]);\n\n // Call the onDragEnd callback if the draggedNode was changed to null\n useEffect(() => {\n if (!draggedNode) return () => {};\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const target = targetRef.current;\n if (!target) return;\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const dragged = { id: draggedNode.list.id, index: draggedNodeIndex };\n if (dragged.id === target.id && dragged.index === target.index) return;\n onDragEndRef.current(dragged, target);\n };\n }, [draggedNode]);\n};\n\nexport default useDragEffect;\n"],"file":"useDragEffect.js"}
@@ -43,11 +43,11 @@ const useDragEffect = props => {
43
43
  }, [onDragEnd]); // The initial bounds of the dragged node.
44
44
  // We can't read the bounds of the dragged node on the fly because the node can be unmounted in the virtual list.
45
45
 
46
- const initDraggedNodeRect = useInitRect(draggedNode?.node[2]); // The initial scroll position of the list where the dragged node is located.
46
+ const initDraggedNodeRect = useInitRect(draggedNode ? draggedNode.node[2] : undefined); // The initial scroll position of the list where the dragged node is located.
47
47
  // Used to detect the actual position of the dragged node.
48
48
  // The purpose is the same as with initDraggedNodeRect.
49
49
 
50
- const initDraggedNodeListScrollOffset = useInitScrollOffset(draggedNode?.list.ref); // The central position of the dragged node
50
+ const initDraggedNodeListScrollOffset = useInitScrollOffset(draggedNode ? draggedNode.list.ref : undefined); // The central position of the dragged node
51
51
 
52
52
  const position = useMemo(() => {
53
53
  if (!draggedNode || !initDraggedNodeRect) return null;
@@ -169,7 +169,7 @@ const useDragEffect = props => {
169
169
  } // Dragging inside another list
170
170
 
171
171
 
172
- if (targetList && targetList !== draggedNode.list && prevTargetNode?.list !== targetList) {
172
+ if (targetList && targetList !== draggedNode.list && (!prevTargetNode || prevTargetNode.list !== targetList)) {
173
173
  const tail = targetList.getTail();
174
174
  if (!tail) return;
175
175
  const node = moveNode({
@@ -241,7 +241,7 @@ const useDragEffect = props => {
241
241
  } // Dragging in another list
242
242
 
243
243
 
244
- if (targetList && targetList !== draggedNode.list && prevTargetNode?.list === targetList) {
244
+ if (targetList && targetList !== draggedNode.list && prevTargetNode && prevTargetNode.list === targetList) {
245
245
  const axis = targetList.horizontal ? 'x' : 'y';
246
246
  const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);
247
247
  const rectProp = targetList.horizontal ? 'left' : 'top';
@@ -267,7 +267,7 @@ const useDragEffect = props => {
267
267
  }, [updateTargetNode]); // Update the target node if the target list has been scrolled
268
268
 
269
269
  const [throttledUpdateTargetNode] = useThrottle(updateTargetNode, 100);
270
- useEvent(targetList?.ref, 'scroll', throttledUpdateTargetNode);
270
+ useEvent(targetList ? targetList.ref : undefined, 'scroll', throttledUpdateTargetNode);
271
271
  useEvent(window, 'scroll', throttledUpdateTargetNode); // Reset styles of the nodes when the dragged node was dropped
272
272
 
273
273
  useEffect(() => {
@@ -294,7 +294,7 @@ const useDragEffect = props => {
294
294
 
295
295
  const tail = draggedNode.list.getTail();
296
296
 
297
- if (targetNode?.list !== draggedNode.list && tail) {
297
+ if ((!targetNode || targetNode.list !== draggedNode.list) && tail) {
298
298
  let node = tail;
299
299
 
300
300
  while (true) {
@@ -351,7 +351,7 @@ const useDragEffect = props => {
351
351
  } = nodeProps;
352
352
  const targetNode = targetNodeRef.current; // If the dragged node outside the origin list
353
353
 
354
- if (targetNodeRef.current?.list !== draggedNode.list && index > draggedNodeIndex) {
354
+ if ((!targetNodeRef.current || targetNodeRef.current.list !== draggedNode.list) && index > draggedNodeIndex) {
355
355
  setStyle(getNodeStyle('up', draggedNode.list.horizontal));
356
356
  return;
357
357
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/useDragEffect.ts"],"names":["useCallback","useEffect","useMemo","useRef","useThrottle","useEvent","getElementScroll","useTargetList","useInitRect","useInitScrollOffset","useGetNodeStyle","useMoveNode","getNodeRect","useBlankNode","HIDDEN_NODE_STYLE","opacity","pointerEvents","createEmptyNode","prev","next","current","useDragEffect","props","draggedNode","cursorPosition","listStoreRef","onDragEnd","targetRef","targetNodeRef","onDragEndRef","initDraggedNodeRect","node","initDraggedNodeListScrollOffset","list","ref","position","x","y","initWidth","initHeight","getNodeStyle","targetList","moveNode","setTargetNode","nodeIndex","id","index","clearTargetNode","getDraggedNodePos","initX","initY","initScrollLeft","initScrollTop","scrollLeft","scrollTop","getDraggedNodePosRef","draggedNodeSetStyle","removeBlankNode","updateTargetNode","prevTargetNode","startNode","type","untilTheEnd","insideAnotherList","tail","getTail","axis","horizontal","prevTargetNodeRef","draggedNodePos","isDraggingUp","head","getHead","prevTargetNodeRect","rectProp","isMoveUp","throttledUpdateTargetNode","window","draggedNodeIndex","targetNode","nodeSetStyle","targetNodeSetStyle","targetNodeIndex","update","nodeProps","setStyle","addListener","removeListener","target","dragged"],"mappings":"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","sourcesContent":["import { Position } from '@os-design/use-drag';\nimport {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport useThrottle from '@os-design/use-throttle';\nimport useEvent from '@os-design/use-event';\nimport NodeList, { ExistingNode, Node, NodeProps } from './NodeList';\nimport ListStore from './ListStore';\nimport getElementScroll from './getElementScroll';\nimport useTargetList from './useTargetList';\nimport useInitRect from './useInitRect';\nimport useInitScrollOffset from './useInitScrollOffset';\nimport useGetNodeStyle from './useGetNodeStyle';\n// eslint-disable-next-line import/no-cycle\nimport useMoveNode from './useMoveNode';\nimport getNodeRect from './getNodeRect';\n// eslint-disable-next-line import/no-cycle\nimport useBlankNode from './useBlankNode';\n\nexport interface DraggedNode {\n list: NodeList;\n node: ExistingNode;\n position: Position;\n}\n\ninterface TargetNode {\n list: NodeList;\n node: ExistingNode;\n}\n\nexport interface ItemLocation {\n id: string;\n index: number;\n}\n\nexport type DragEndHandler = (\n dragged: ItemLocation,\n target: ItemLocation\n) => void;\n\ninterface UseDragEffectProps {\n draggedNode: DraggedNode | null;\n cursorPosition: Position;\n listStoreRef: RefObject<ListStore>;\n onDragEnd: DragEndHandler;\n}\n\nconst HIDDEN_NODE_STYLE: CSSProperties = {\n opacity: 0,\n pointerEvents: 'none',\n};\n\nconst createEmptyNode = ({\n prev = null,\n next = null,\n}: {\n prev?: Node;\n next?: Node;\n}): ExistingNode => [prev, next, { current: null }, () => {}, -1];\n\n/* eslint-disable @typescript-eslint/no-explicit-any,no-constant-condition */\n\nconst useDragEffect = (props: UseDragEffectProps) => {\n const { draggedNode, cursorPosition, listStoreRef, onDragEnd } = props;\n\n const targetRef = useRef<ItemLocation | null>(null);\n const targetNodeRef = useRef<TargetNode | null>(draggedNode);\n\n useEffect(() => {\n targetNodeRef.current = draggedNode;\n }, [draggedNode]);\n\n const onDragEndRef = useRef(onDragEnd);\n useEffect(() => {\n onDragEndRef.current = onDragEnd;\n }, [onDragEnd]);\n\n // The initial bounds of the dragged node.\n // We can't read the bounds of the dragged node on the fly because the node can be unmounted in the virtual list.\n const initDraggedNodeRect = useInitRect(draggedNode?.node[2]);\n\n // The initial scroll position of the list where the dragged node is located.\n // Used to detect the actual position of the dragged node.\n // The purpose is the same as with initDraggedNodeRect.\n const initDraggedNodeListScrollOffset = useInitScrollOffset(\n draggedNode?.list.ref\n );\n\n // The central position of the dragged node\n const position = useMemo(() => {\n if (!draggedNode || !initDraggedNodeRect) return null;\n const { x, y } = cursorPosition;\n const { initWidth, initHeight } = initDraggedNodeRect;\n return {\n x: x - draggedNode.position.x + initWidth / 2,\n y: y - draggedNode.position.y + initHeight / 2,\n };\n }, [cursorPosition, draggedNode, initDraggedNodeRect]);\n\n // Returns the style for moving the node in the specified direction\n const getNodeStyle = useGetNodeStyle(initDraggedNodeRect);\n\n // The list in which the cursor is located\n const targetList = useTargetList(position, listStoreRef);\n\n const moveNode = useMoveNode(position, draggedNode, getNodeStyle);\n\n const setTargetNode = useCallback((list: NodeList, node: ExistingNode) => {\n const [, , , , nodeIndex] = node;\n targetNodeRef.current = { list, node };\n targetRef.current = { id: list.id, index: nodeIndex };\n }, []);\n\n const clearTargetNode = useCallback(() => {\n targetNodeRef.current = null;\n targetRef.current = null;\n }, []);\n\n // Returns the central position of the dragged node in the list\n const getDraggedNodePos = useCallback(() => {\n if (\n !targetList ||\n !targetList.ref.current ||\n !initDraggedNodeRect ||\n !initDraggedNodeListScrollOffset\n ) {\n return null;\n }\n const { initX, initY, initWidth, initHeight } = initDraggedNodeRect;\n const { initScrollLeft, initScrollTop } = initDraggedNodeListScrollOffset;\n const { scrollLeft, scrollTop } = getElementScroll(targetList.ref.current);\n return {\n x: initX + initWidth / 2 + initScrollLeft - scrollLeft,\n y: initY + initHeight / 2 + initScrollTop - scrollTop,\n };\n }, [initDraggedNodeListScrollOffset, initDraggedNodeRect, targetList]);\n\n const getDraggedNodePosRef = useRef(getDraggedNodePos);\n useEffect(() => {\n getDraggedNodePosRef.current = getDraggedNodePos;\n }, [getDraggedNodePos]);\n\n // Hide the dragged node\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , draggedNodeSetStyle] = draggedNode.node;\n draggedNodeSetStyle(HIDDEN_NODE_STYLE);\n return () => draggedNodeSetStyle({});\n }, [draggedNode]);\n\n // Append the blank node to the list to increase the height of it.\n // Used when the dragged node is located inside another list.\n const removeBlankNode = useBlankNode({\n draggedNode,\n targetList,\n initDraggedNodeRect,\n });\n\n const updateTargetNode = useCallback(() => {\n if (!draggedNode) return;\n const prevTargetNode = targetNodeRef.current; // The last updated node\n\n // Dragging outside the list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList !== draggedNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n });\n clearTargetNode();\n }\n\n // Dragging outside another list\n if (\n prevTargetNode &&\n prevTargetNode.list !== draggedNode.list &&\n targetList !== prevTargetNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n insideAnotherList: true,\n });\n removeBlankNode();\n clearTargetNode();\n }\n\n // Dragging inside the list\n if (!prevTargetNode && targetList === draggedNode.list) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging inside another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode?.list !== targetList\n ) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in the same list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList === draggedNode.list\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const [, , prevTargetNodeRef, ,] = prevTargetNode.node;\n if (!prevTargetNodeRef.current) {\n // The target node was unmounted. It happens when the virtual list is used.\n // If the cursor is above the dragged node, we need to move the nodes down from the tail to the node where\n // the cursor is located. Otherwise, we need to move the nodes up from the head to the node where the cursor\n // is located.\n const draggedNodePos = getDraggedNodePosRef.current();\n if (!position || !draggedNodePos) return;\n const isDraggingUp = position[axis] < draggedNodePos[axis];\n if (isDraggingUp) {\n const tail = targetList.getTail();\n if (!tail || !tail[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ prev: tail }),\n type: 'up',\n });\n setTargetNode(targetList, node);\n } else {\n const head = targetList.getHead();\n if (!head || !head[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ next: head }),\n type: 'down',\n });\n setTargetNode(targetList, node);\n }\n return;\n }\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode?.list === targetList\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n insideAnotherList: true,\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n }\n }, [\n draggedNode,\n targetList,\n moveNode,\n clearTargetNode,\n removeBlankNode,\n setTargetNode,\n position,\n ]);\n\n // Update the target node if either the position or the target list has been changed\n useEffect(() => {\n updateTargetNode();\n }, [updateTargetNode]);\n\n // Update the target node if the target list has been scrolled\n const [throttledUpdateTargetNode] = useThrottle(updateTargetNode, 100);\n useEvent(targetList?.ref as any, 'scroll', throttledUpdateTargetNode);\n useEvent(window, 'scroll', throttledUpdateTargetNode);\n\n // Reset styles of the nodes when the dragged node was dropped\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n return () => {\n const targetNode = targetNodeRef.current;\n\n // If the dragged node was inside another list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n if (targetNode && targetNode.list !== draggedNode.list) {\n const tail = targetNode.list.getTail();\n if (!tail) return;\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n // If the dragged node was outside the origin list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n const tail = draggedNode.list.getTail();\n if (targetNode?.list !== draggedNode.list && tail) {\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n if (!targetNode) return;\n const [, , , targetNodeSetStyle, targetNodeIndex] = targetNode.node;\n if (targetNodeIndex > draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex < draggedNodeIndex) return;\n node = prev;\n }\n }\n if (targetNodeIndex < draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [, next, , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!next || nodeIndex > draggedNodeIndex) return;\n node = next;\n }\n }\n if (targetNodeIndex === draggedNodeIndex) {\n targetNodeSetStyle({});\n }\n };\n }, [draggedNode]);\n\n // Update the position of the mounted nodes between the dragged and target nodes (used in virtual list)\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n\n // If the dragged node outside the origin list\n if (\n targetNodeRef.current?.list !== draggedNode.list &&\n index > draggedNodeIndex\n ) {\n setStyle(getNodeStyle('up', draggedNode.list.horizontal));\n return;\n }\n\n if (!targetNode || !targetNode.node) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n // If the dragged node was mounted\n if (index === draggedNodeIndex) {\n setStyle(HIDDEN_NODE_STYLE);\n return;\n }\n // If the node between the dragged and target nodes was mounted\n if (index > draggedNodeIndex && index < targetNodeIndex) {\n setStyle(getNodeStyle('up', targetNode.list.horizontal));\n } else if (index < draggedNodeIndex && index > targetNodeIndex) {\n setStyle(getNodeStyle('down', targetNode.list.horizontal));\n }\n };\n draggedNode.list.addListener(update);\n return () => draggedNode.list.removeListener(update);\n }, [draggedNode, getNodeStyle]);\n\n useEffect(() => {\n if (!draggedNode || !targetList || targetList === draggedNode.list) {\n return () => {};\n }\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n if (!targetNode) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n if (index < targetNodeIndex) return;\n setStyle(getNodeStyle('down', targetList.horizontal));\n };\n targetList.addListener(update);\n return () => targetList.removeListener(update);\n }, [draggedNode, getNodeStyle, targetList]);\n\n // Call the onDragEnd callback if the draggedNode was changed to null\n useEffect(() => {\n if (!draggedNode) return () => {};\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const target = targetRef.current;\n if (!target) return;\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const dragged = { id: draggedNode.list.id, index: draggedNodeIndex };\n if (dragged.id === target.id && dragged.index === target.index) return;\n onDragEndRef.current(dragged, target);\n };\n }, [draggedNode]);\n};\n\nexport default useDragEffect;\n"],"file":"useDragEffect.js"}
1
+ {"version":3,"sources":["../../../src/utils/useDragEffect.ts"],"names":["useCallback","useEffect","useMemo","useRef","useThrottle","useEvent","getElementScroll","useTargetList","useInitRect","useInitScrollOffset","useGetNodeStyle","useMoveNode","getNodeRect","useBlankNode","HIDDEN_NODE_STYLE","opacity","pointerEvents","createEmptyNode","prev","next","current","useDragEffect","props","draggedNode","cursorPosition","listStoreRef","onDragEnd","targetRef","targetNodeRef","onDragEndRef","initDraggedNodeRect","node","undefined","initDraggedNodeListScrollOffset","list","ref","position","x","y","initWidth","initHeight","getNodeStyle","targetList","moveNode","setTargetNode","nodeIndex","id","index","clearTargetNode","getDraggedNodePos","initX","initY","initScrollLeft","initScrollTop","scrollLeft","scrollTop","getDraggedNodePosRef","draggedNodeSetStyle","removeBlankNode","updateTargetNode","prevTargetNode","startNode","type","untilTheEnd","insideAnotherList","tail","getTail","axis","horizontal","prevTargetNodeRef","draggedNodePos","isDraggingUp","head","getHead","prevTargetNodeRect","rectProp","isMoveUp","throttledUpdateTargetNode","window","draggedNodeIndex","targetNode","nodeSetStyle","targetNodeSetStyle","targetNodeIndex","update","nodeProps","setStyle","addListener","removeListener","target","dragged"],"mappings":"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","sourcesContent":["import { Position } from '@os-design/use-drag';\nimport {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport useThrottle from '@os-design/use-throttle';\nimport useEvent from '@os-design/use-event';\nimport NodeList, { ExistingNode, Node, NodeProps } from './NodeList';\nimport ListStore from './ListStore';\nimport getElementScroll from './getElementScroll';\nimport useTargetList from './useTargetList';\nimport useInitRect from './useInitRect';\nimport useInitScrollOffset from './useInitScrollOffset';\nimport useGetNodeStyle from './useGetNodeStyle';\n// eslint-disable-next-line import/no-cycle\nimport useMoveNode from './useMoveNode';\nimport getNodeRect from './getNodeRect';\n// eslint-disable-next-line import/no-cycle\nimport useBlankNode from './useBlankNode';\n\nexport interface DraggedNode {\n list: NodeList;\n node: ExistingNode;\n position: Position;\n}\n\ninterface TargetNode {\n list: NodeList;\n node: ExistingNode;\n}\n\nexport interface ItemLocation {\n id: string;\n index: number;\n}\n\nexport type DragEndHandler = (\n dragged: ItemLocation,\n target: ItemLocation\n) => void;\n\ninterface UseDragEffectProps {\n draggedNode: DraggedNode | null;\n cursorPosition: Position;\n listStoreRef: RefObject<ListStore>;\n onDragEnd: DragEndHandler;\n}\n\nconst HIDDEN_NODE_STYLE: CSSProperties = {\n opacity: 0,\n pointerEvents: 'none',\n};\n\nconst createEmptyNode = ({\n prev = null,\n next = null,\n}: {\n prev?: Node;\n next?: Node;\n}): ExistingNode => [prev, next, { current: null }, () => {}, -1];\n\n/* eslint-disable @typescript-eslint/no-explicit-any,no-constant-condition */\n\nconst useDragEffect = (props: UseDragEffectProps) => {\n const { draggedNode, cursorPosition, listStoreRef, onDragEnd } = props;\n\n const targetRef = useRef<ItemLocation | null>(null);\n const targetNodeRef = useRef<TargetNode | null>(draggedNode);\n\n useEffect(() => {\n targetNodeRef.current = draggedNode;\n }, [draggedNode]);\n\n const onDragEndRef = useRef(onDragEnd);\n useEffect(() => {\n onDragEndRef.current = onDragEnd;\n }, [onDragEnd]);\n\n // The initial bounds of the dragged node.\n // We can't read the bounds of the dragged node on the fly because the node can be unmounted in the virtual list.\n const initDraggedNodeRect = useInitRect(\n draggedNode ? draggedNode.node[2] : undefined\n );\n\n // The initial scroll position of the list where the dragged node is located.\n // Used to detect the actual position of the dragged node.\n // The purpose is the same as with initDraggedNodeRect.\n const initDraggedNodeListScrollOffset = useInitScrollOffset(\n draggedNode ? draggedNode.list.ref : undefined\n );\n\n // The central position of the dragged node\n const position = useMemo(() => {\n if (!draggedNode || !initDraggedNodeRect) return null;\n const { x, y } = cursorPosition;\n const { initWidth, initHeight } = initDraggedNodeRect;\n return {\n x: x - draggedNode.position.x + initWidth / 2,\n y: y - draggedNode.position.y + initHeight / 2,\n };\n }, [cursorPosition, draggedNode, initDraggedNodeRect]);\n\n // Returns the style for moving the node in the specified direction\n const getNodeStyle = useGetNodeStyle(initDraggedNodeRect);\n\n // The list in which the cursor is located\n const targetList = useTargetList(position, listStoreRef);\n\n const moveNode = useMoveNode(position, draggedNode, getNodeStyle);\n\n const setTargetNode = useCallback((list: NodeList, node: ExistingNode) => {\n const [, , , , nodeIndex] = node;\n targetNodeRef.current = { list, node };\n targetRef.current = { id: list.id, index: nodeIndex };\n }, []);\n\n const clearTargetNode = useCallback(() => {\n targetNodeRef.current = null;\n targetRef.current = null;\n }, []);\n\n // Returns the central position of the dragged node in the list\n const getDraggedNodePos = useCallback(() => {\n if (\n !targetList ||\n !targetList.ref.current ||\n !initDraggedNodeRect ||\n !initDraggedNodeListScrollOffset\n ) {\n return null;\n }\n const { initX, initY, initWidth, initHeight } = initDraggedNodeRect;\n const { initScrollLeft, initScrollTop } = initDraggedNodeListScrollOffset;\n const { scrollLeft, scrollTop } = getElementScroll(targetList.ref.current);\n return {\n x: initX + initWidth / 2 + initScrollLeft - scrollLeft,\n y: initY + initHeight / 2 + initScrollTop - scrollTop,\n };\n }, [initDraggedNodeListScrollOffset, initDraggedNodeRect, targetList]);\n\n const getDraggedNodePosRef = useRef(getDraggedNodePos);\n useEffect(() => {\n getDraggedNodePosRef.current = getDraggedNodePos;\n }, [getDraggedNodePos]);\n\n // Hide the dragged node\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , draggedNodeSetStyle] = draggedNode.node;\n draggedNodeSetStyle(HIDDEN_NODE_STYLE);\n return () => draggedNodeSetStyle({});\n }, [draggedNode]);\n\n // Append the blank node to the list to increase the height of it.\n // Used when the dragged node is located inside another list.\n const removeBlankNode = useBlankNode({\n draggedNode,\n targetList,\n initDraggedNodeRect,\n });\n\n const updateTargetNode = useCallback(() => {\n if (!draggedNode) return;\n const prevTargetNode = targetNodeRef.current; // The last updated node\n\n // Dragging outside the list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList !== draggedNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n });\n clearTargetNode();\n }\n\n // Dragging outside another list\n if (\n prevTargetNode &&\n prevTargetNode.list !== draggedNode.list &&\n targetList !== prevTargetNode.list\n ) {\n moveNode({\n list: prevTargetNode.list,\n startNode: prevTargetNode.node,\n type: 'down',\n untilTheEnd: true,\n insideAnotherList: true,\n });\n removeBlankNode();\n clearTargetNode();\n }\n\n // Dragging inside the list\n if (!prevTargetNode && targetList === draggedNode.list) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging inside another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n (!prevTargetNode || prevTargetNode.list !== targetList)\n ) {\n const tail = targetList.getTail();\n if (!tail) return;\n const node = moveNode({\n list: targetList,\n startNode: tail,\n type: 'up',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in the same list\n if (\n prevTargetNode &&\n prevTargetNode.list === draggedNode.list &&\n targetList === draggedNode.list\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const [, , prevTargetNodeRef, ,] = prevTargetNode.node;\n if (!prevTargetNodeRef.current) {\n // The target node was unmounted. It happens when the virtual list is used.\n // If the cursor is above the dragged node, we need to move the nodes down from the tail to the node where\n // the cursor is located. Otherwise, we need to move the nodes up from the head to the node where the cursor\n // is located.\n const draggedNodePos = getDraggedNodePosRef.current();\n if (!position || !draggedNodePos) return;\n const isDraggingUp = position[axis] < draggedNodePos[axis];\n if (isDraggingUp) {\n const tail = targetList.getTail();\n if (!tail || !tail[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ prev: tail }),\n type: 'up',\n });\n setTargetNode(targetList, node);\n } else {\n const head = targetList.getHead();\n if (!head || !head[2].current) return;\n const node = moveNode({\n list: targetList,\n startNode: createEmptyNode({ next: head }),\n type: 'down',\n });\n setTargetNode(targetList, node);\n }\n return;\n }\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n });\n setTargetNode(targetList, node);\n return;\n }\n\n // Dragging in another list\n if (\n targetList &&\n targetList !== draggedNode.list &&\n prevTargetNode &&\n prevTargetNode.list === targetList\n ) {\n const axis = targetList.horizontal ? 'x' : 'y';\n const prevTargetNodeRect = getNodeRect(prevTargetNode.node[2]);\n const rectProp = targetList.horizontal ? 'left' : 'top';\n if (!position || !prevTargetNodeRect) return;\n const isMoveUp = position[axis] < prevTargetNodeRect[rectProp];\n const node = isMoveUp\n ? moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'up',\n insideAnotherList: true,\n })\n : moveNode({\n list: targetList,\n startNode: prevTargetNode.node,\n type: 'down',\n insideAnotherList: true,\n });\n setTargetNode(targetList, node);\n }\n }, [\n draggedNode,\n targetList,\n moveNode,\n clearTargetNode,\n removeBlankNode,\n setTargetNode,\n position,\n ]);\n\n // Update the target node if either the position or the target list has been changed\n useEffect(() => {\n updateTargetNode();\n }, [updateTargetNode]);\n\n // Update the target node if the target list has been scrolled\n const [throttledUpdateTargetNode] = useThrottle(updateTargetNode, 100);\n useEvent(\n (targetList ? targetList.ref : undefined) as any,\n 'scroll',\n throttledUpdateTargetNode\n );\n useEvent(window, 'scroll', throttledUpdateTargetNode);\n\n // Reset styles of the nodes when the dragged node was dropped\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n return () => {\n const targetNode = targetNodeRef.current;\n\n // If the dragged node was inside another list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n if (targetNode && targetNode.list !== draggedNode.list) {\n const tail = targetNode.list.getTail();\n if (!tail) return;\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n // If the dragged node was outside the origin list, reset the styles for the nodes,\n // starting at the tail and ending with the dragged node.\n const tail = draggedNode.list.getTail();\n if ((!targetNode || targetNode.list !== draggedNode.list) && tail) {\n let node = tail;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex <= draggedNodeIndex) break;\n node = prev;\n }\n }\n\n if (!targetNode) return;\n const [, , , targetNodeSetStyle, targetNodeIndex] = targetNode.node;\n if (targetNodeIndex > draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [prev, , , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!prev || nodeIndex < draggedNodeIndex) return;\n node = prev;\n }\n }\n if (targetNodeIndex < draggedNodeIndex) {\n let { node } = targetNode;\n while (true) {\n const [, next, , nodeSetStyle, nodeIndex] = node;\n nodeSetStyle({});\n if (!next || nodeIndex > draggedNodeIndex) return;\n node = next;\n }\n }\n if (targetNodeIndex === draggedNodeIndex) {\n targetNodeSetStyle({});\n }\n };\n }, [draggedNode]);\n\n // Update the position of the mounted nodes between the dragged and target nodes (used in virtual list)\n useEffect(() => {\n if (!draggedNode) return () => {};\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n\n // If the dragged node outside the origin list\n if (\n (!targetNodeRef.current ||\n targetNodeRef.current.list !== draggedNode.list) &&\n index > draggedNodeIndex\n ) {\n setStyle(getNodeStyle('up', draggedNode.list.horizontal));\n return;\n }\n\n if (!targetNode || !targetNode.node) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n // If the dragged node was mounted\n if (index === draggedNodeIndex) {\n setStyle(HIDDEN_NODE_STYLE);\n return;\n }\n // If the node between the dragged and target nodes was mounted\n if (index > draggedNodeIndex && index < targetNodeIndex) {\n setStyle(getNodeStyle('up', targetNode.list.horizontal));\n } else if (index < draggedNodeIndex && index > targetNodeIndex) {\n setStyle(getNodeStyle('down', targetNode.list.horizontal));\n }\n };\n draggedNode.list.addListener(update);\n return () => draggedNode.list.removeListener(update);\n }, [draggedNode, getNodeStyle]);\n\n useEffect(() => {\n if (!draggedNode || !targetList || targetList === draggedNode.list) {\n return () => {};\n }\n const update = (nodeProps: NodeProps) => {\n const { setStyle, index } = nodeProps;\n const targetNode = targetNodeRef.current;\n if (!targetNode) return;\n const [, , , , targetNodeIndex] = targetNode.node;\n if (index < targetNodeIndex) return;\n setStyle(getNodeStyle('down', targetList.horizontal));\n };\n targetList.addListener(update);\n return () => targetList.removeListener(update);\n }, [draggedNode, getNodeStyle, targetList]);\n\n // Call the onDragEnd callback if the draggedNode was changed to null\n useEffect(() => {\n if (!draggedNode) return () => {};\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const target = targetRef.current;\n if (!target) return;\n const [, , , , draggedNodeIndex] = draggedNode.node;\n const dragged = { id: draggedNode.list.id, index: draggedNodeIndex };\n if (dragged.id === target.id && dragged.index === target.index) return;\n onDragEndRef.current(dragged, target);\n };\n }, [draggedNode]);\n};\n\nexport default useDragEffect;\n"],"file":"useDragEffect.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDragEffect.d.ts","sourceRoot":"","sources":["../../../src/utils/useDragEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAEL,SAAS,EAKV,MAAM,OAAO,CAAC;AAGf,OAAO,QAAQ,EAAE,EAAE,YAAY,EAAmB,MAAM,YAAY,CAAC;AACrE,OAAO,SAAS,MAAM,aAAa,CAAC;AAYpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAOD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oBAAY,cAAc,GAAG,CAC3B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,YAAY,KACjB,IAAI,CAAC;AAEV,UAAU,kBAAkB;IAC1B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,QAAQ,CAAC;IACzB,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,SAAS,EAAE,cAAc,CAAC;CAC3B;AAiBD,QAAA,MAAM,aAAa,UAAW,kBAAkB,SAqY/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"useDragEffect.d.ts","sourceRoot":"","sources":["../../../src/utils/useDragEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAEL,SAAS,EAKV,MAAM,OAAO,CAAC;AAGf,OAAO,QAAQ,EAAE,EAAE,YAAY,EAAmB,MAAM,YAAY,CAAC;AACrE,OAAO,SAAS,MAAM,aAAa,CAAC;AAYpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAOD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oBAAY,cAAc,GAAG,CAC3B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,YAAY,KACjB,IAAI,CAAC;AAEV,UAAU,kBAAkB;IAC1B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,QAAQ,CAAC;IACzB,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,SAAS,EAAE,cAAc,CAAC;CAC3B;AAiBD,QAAA,MAAM,aAAa,UAAW,kBAAkB,SA6Y/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@os-design/drag-sort",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "license": "UNLICENSED",
5
5
  "repository": "git@gitlab.com:os-team/libs/os-design.git",
6
6
  "main": "dist/cjs/index.js",
@@ -45,5 +45,5 @@
45
45
  "react": ">=17",
46
46
  "react-dom": ">=17"
47
47
  },
48
- "gitHead": "4f41a962d4c0afb57d65e8c3e104215794d3c6a7"
48
+ "gitHead": "4e9164206eea452c2481c1f458632a72067172ec"
49
49
  }