{"version":3,"sources":["src/sortable/useSortable.ts"],"names":["defaultSortableTransition","sortable","useInstance","Sortable","currentValue","useDeepSignal","useOnValueChange","useIsomorphicLayoutEffect","batch","deepEqual","immediateEffect","useOnElementChange","handle","element","target","useCallback"],"mappings":"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","file":"sortable.cjs","sourcesContent":["import {useCallback} from 'react';\nimport {batch, deepEqual} from '@dnd-kit/state';\nimport {type Data} from '@dnd-kit/abstract';\nimport {Sortable, defaultSortableTransition} from '@dnd-kit/dom/sortable';\nimport type {SortableInput} from '@dnd-kit/dom/sortable';\nimport {useInstance} from '@dnd-kit/react';\nimport {\n  useImmediateEffect as immediateEffect,\n  useIsomorphicLayoutEffect,\n  useOnValueChange,\n  useOnElementChange,\n  useDeepSignal,\n} from '@dnd-kit/react/hooks';\nimport {currentValue, type RefOrValue} from '@dnd-kit/react/utilities';\n\nexport interface UseSortableInput<T extends Data = Data>\n  extends Omit<SortableInput<T>, 'handle' | 'element' | 'target'> {\n  handle?: RefOrValue<Element>;\n  element?: RefOrValue<Element>;\n  target?: RefOrValue<Element>;\n}\n\nexport function useSortable<T extends Data = Data>(input: UseSortableInput<T>) {\n  const {\n    accept,\n    collisionDetector,\n    collisionPriority,\n    id,\n    data,\n    element,\n    handle,\n    index,\n    group,\n    disabled,\n    modifiers,\n    sensors,\n    target,\n    type,\n    plugins,\n  } = input;\n  const transition = {...defaultSortableTransition, ...input.transition};\n  const sortable = useInstance((manager) => {\n    return new Sortable(\n      {\n        ...input,\n        transition,\n        register: false,\n        handle: currentValue(handle),\n        element: currentValue(element),\n        target: currentValue(target),\n      },\n      manager\n    );\n  });\n\n  const trackedSortable = useDeepSignal(sortable, shouldUpdateSynchronously);\n\n  useOnValueChange(id, () => (sortable.id = id));\n\n  useIsomorphicLayoutEffect(() => {\n    batch(() => {\n      sortable.group = group;\n      sortable.index = index;\n    });\n  }, [sortable, group, index]);\n\n  useOnValueChange(type, () => (sortable.type = type));\n  useOnValueChange(\n    accept,\n    () => (sortable.accept = accept),\n    undefined,\n    deepEqual\n  );\n  useOnValueChange(data, () => data && (sortable.data = data));\n  useOnValueChange(\n    index,\n    () => {\n      if (sortable.manager?.dragOperation.status.idle && transition?.idle) {\n        sortable.refreshShape();\n      }\n    },\n    immediateEffect\n  );\n  useOnElementChange(handle, (handle) => (sortable.handle = handle));\n  useOnElementChange(element, (element) => (sortable.element = element));\n  useOnElementChange(target, (target) => (sortable.target = target));\n  useOnValueChange(\n    disabled,\n    () => (sortable.disabled = disabled ?? false),\n    undefined,\n    deepEqual\n  );\n  useOnValueChange(\n    sensors,\n    () => (sortable.sensors = sensors),\n    undefined,\n    deepEqual\n  );\n  useOnValueChange(\n    collisionDetector,\n    () => (sortable.collisionDetector = collisionDetector)\n  );\n  useOnValueChange(\n    collisionPriority,\n    () => (sortable.collisionPriority = collisionPriority)\n  );\n  useOnValueChange(\n    plugins,\n    () => (sortable.plugins = plugins),\n    undefined,\n    deepEqual\n  );\n  useOnValueChange(\n    transition,\n    () => (sortable.transition = transition),\n    undefined,\n    deepEqual\n  );\n  useOnValueChange(\n    modifiers,\n    () => (sortable.modifiers = modifiers),\n    undefined,\n    deepEqual\n  );\n  useOnValueChange(\n    input.alignment,\n    () => (sortable.alignment = input.alignment)\n  );\n\n  return {\n    sortable: trackedSortable,\n    get isDragging() {\n      return trackedSortable.isDragging;\n    },\n    get isDropping() {\n      return trackedSortable.isDropping;\n    },\n    get isDragSource() {\n      return trackedSortable.isDragSource;\n    },\n    get isDropTarget() {\n      return trackedSortable.isDropTarget;\n    },\n    handleRef: useCallback(\n      (element: Element | null) => {\n        sortable.handle = element ?? undefined;\n      },\n      [sortable]\n    ),\n    ref: useCallback(\n      (element: Element | null) => {\n        if (\n          !element &&\n          sortable.element?.isConnected &&\n          !sortable.manager?.dragOperation.status.idle\n        ) {\n          return;\n        }\n\n        sortable.element = element ?? undefined;\n      },\n      [sortable]\n    ),\n    sourceRef: useCallback(\n      (element: Element | null) => {\n        if (\n          !element &&\n          sortable.source?.isConnected &&\n          !sortable.manager?.dragOperation.status.idle\n        ) {\n          return;\n        }\n\n        sortable.source = element ?? undefined;\n      },\n      [sortable]\n    ),\n    targetRef: useCallback(\n      (element: Element | null) => {\n        if (\n          !element &&\n          sortable.target?.isConnected &&\n          !sortable.manager?.dragOperation.status.idle\n        ) {\n          return;\n        }\n\n        sortable.target = element ?? undefined;\n      },\n      [sortable]\n    ),\n  };\n}\n\nfunction shouldUpdateSynchronously(key: string, oldValue: any, newValue: any) {\n  // Update synchronously after drop animation\n  if (key === 'isDragSource' && !newValue && oldValue) return true;\n\n  return false;\n}\n"]}