{"version":3,"file":"react-dnd-llotf5dK.mjs","names":[],"sources":["../src/isTouchDevice.ts","../src/adapters/react-dnd.tsx"],"sourcesContent":["/* v8 ignore file -- @preserve */\n/* oxlint-disable prefer-global-this */\n\nexport const isTouchDevice = (): boolean =>\n  (typeof window !== 'undefined' && 'ontouchstart' in window) ||\n  (typeof navigator !== 'undefined' && navigator.maxTouchPoints > 0);\n","import * as React from 'react';\nimport { useRef } from 'react';\nimport type { ConnectDragPreview, ConnectDragSource, useDrag as useDragOriginal } from 'react-dnd';\nimport type * as ReactDnD from 'react-dnd';\nimport type * as ReactDndHtml5Backend from 'react-dnd-html5-backend';\nimport type {\n  DndDropTargetType,\n  DragCollection,\n  DraggedItem,\n  DropCollection,\n  DropResult,\n  RuleGroupTypeAny,\n  RuleType,\n} from 'react-querybuilder';\nimport { findPath } from 'react-querybuilder';\nimport type {\n  AdapterUseInlineCombinatorDnDResult,\n  AdapterUseRuleDnDResult,\n  AdapterUseRuleGroupDnDResult,\n  DndAdapter,\n  DndAdapterInlineCombinatorDnDParams,\n  DndAdapterProviderProps,\n  DndAdapterRuleDnDParams,\n  DndAdapterRuleGroupDnDParams,\n} from '../adapter';\nimport {\n  buildDropResult,\n  canDropOnInlineCombinator,\n  canDropOnRule,\n  canDropOnRuleGroup,\n  handleDrop,\n} from '../dndLogic';\nimport { isHotkeyPressed } from '../isHotkeyPressed';\nimport { isTouchDevice } from '../isTouchDevice';\nimport type { DndProp } from '../types';\n\ntype ReactDndBackendFactory = typeof ReactDndHtml5Backend.HTML5Backend;\n\nlet emptyImage: HTMLImageElement;\n\nconst getEmptyImage = (): HTMLImageElement => {\n  if (!emptyImage) {\n    emptyImage = new Image();\n    emptyImage.src = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n  }\n  return emptyImage;\n};\n\nconst ruleGroupAndRuleAccept: [DndDropTargetType, DndDropTargetType] = ['rule', 'ruleGroup'];\n\n// #region Internal hooks\n\nconst useRuleDragCommon = (\n  params: DndAdapterRuleDnDParams | DndAdapterRuleGroupDnDParams,\n  type: DndDropTargetType,\n  useDrag: typeof useDragOriginal\n): [DragCollection, ConnectDragSource, ConnectDragPreview] =>\n  useDrag<DraggedItem, DropResult, DragCollection>(\n    () => ({\n      type,\n      item: () => ({\n        ...findPath(params.path, params.schema.getQuery())!,\n        path: params.path,\n        qbId: params.schema.qbId,\n      }),\n      canDrag: !params.disabled,\n      previewOptions: { captureDraggingState: !!params.hideDefaultDragPreview },\n      collect: monitor => ({\n        isDragging: !params.disabled && monitor.isDragging(),\n        dragMonitorId: monitor.getHandlerId() ?? '',\n      }),\n      end: (item, monitor) => {\n        handleDrop({\n          item,\n          dropResult: monitor.getDropResult(),\n          schema: params.schema,\n          actions: params.actions,\n          copyModeModifierKey: params.copyModeModifierKey,\n          groupModeModifierKey: params.groupModeModifierKey,\n          onRuleDrop: params.onRuleDrop,\n        });\n      },\n    }),\n    [params.actions.groupRule, params.actions.moveRule, params.disabled, params.path]\n  );\n\n// #endregion\n\n/**\n * Creates a {@link DndAdapter} backed by `react-dnd`.\n *\n * @example\n * ```tsx\n * import { QueryBuilderDnD } from '@react-querybuilder/dnd';\n * import { createReactDnDAdapter } from '@react-querybuilder/dnd/react-dnd';\n * import * as ReactDnD from 'react-dnd';\n * import * as ReactDnDHTML5Backend from 'react-dnd-html5-backend';\n *\n * const adapter = createReactDnDAdapter({ ...ReactDnD, ...ReactDnDHTML5Backend });\n *\n * <QueryBuilderDnD dnd={adapter}>\n *   <QueryBuilder />\n * </QueryBuilderDnD>\n * ```\n *\n * @group DnD\n */\nexport const createReactDnDAdapter = (dndExports: DndProp): DndAdapter => {\n  const {\n    useDrag,\n    useDrop,\n    DndProvider: RDndProvider,\n    DndContext,\n  } = dndExports as typeof ReactDnD & DndProp;\n\n  // Select backend: prefer touch on touch devices\n  let backend: ReactDndBackendFactory | undefined = dndExports.ReactDndBackend;\n  if (!backend) {\n    // v8 ignore next -- jsdom unconditionally defines `window.ontouchstart`\n    backend = isTouchDevice()\n      ? (dndExports.TouchBackend ?? dndExports.HTML5Backend)\n      : (dndExports.HTML5Backend ?? dndExports.TouchBackend);\n  }\n\n  const DndProvider = ({ debugMode, children }: DndAdapterProviderProps): React.JSX.Element => (\n    <RDndProvider backend={backend!} debugMode={debugMode}>\n      <DndContext.Consumer>{() => <>{children}</>}</DndContext.Consumer>\n    </RDndProvider>\n  );\n\n  const useRuleDnD = (params: DndAdapterRuleDnDParams): AdapterUseRuleDnDResult => {\n    const dndRef = useRef<HTMLDivElement>(null);\n    const dragRef = useRef<HTMLSpanElement>(null);\n\n    const [{ isDragging, dragMonitorId }, drag, preview] = useRuleDragCommon(\n      params,\n      'rule',\n      useDrag\n    );\n\n    const [{ isOver, dropMonitorId, dropEffect, groupItems, dropNotAllowed }, drop] = useDrop<\n      DraggedItem,\n      DropResult,\n      DropCollection\n    >(\n      () => ({\n        accept: ruleGroupAndRuleAccept,\n        canDrop: dragging =>\n          canDropOnRule({\n            dragging,\n            path: params.path,\n            schema: params.schema,\n            canDrop: params.canDrop,\n            groupModeModifierKey: params.groupModeModifierKey,\n            disabled: params.disabled,\n            rule: params.rule,\n          }),\n        collect: monitor => ({\n          dropNotAllowed: monitor.isOver() && !monitor.canDrop(),\n          isOver: monitor.canDrop() && monitor.isOver(),\n          dropMonitorId: monitor.getHandlerId() ?? '',\n          dropEffect: isHotkeyPressed(params.copyModeModifierKey) ? 'copy' : 'move',\n          groupItems: isHotkeyPressed(params.groupModeModifierKey),\n        }),\n        drop: () =>\n          buildDropResult({\n            type: 'rule',\n            path: params.path,\n            schema: params.schema,\n            copyModeModifierKey: params.copyModeModifierKey,\n            groupModeModifierKey: params.groupModeModifierKey,\n          }),\n      }),\n      [\n        params.disabled,\n        params.actions.moveRule,\n        params.path,\n        params.canDrop,\n        params.rule,\n        params.schema,\n      ]\n    );\n\n    React.useEffect(() => {\n      drag(dragRef);\n      drop(dndRef);\n      preview(params.hideDefaultDragPreview ? getEmptyImage() : dndRef);\n    }, [drag, drop, params.hideDefaultDragPreview, preview]);\n\n    return {\n      isDragging,\n      dragMonitorId,\n      isOver,\n      dropMonitorId,\n      dndRef,\n      dragRef,\n      dropEffect,\n      groupItems,\n      dropNotAllowed,\n    };\n  };\n\n  const useRuleGroupDnD = (params: DndAdapterRuleGroupDnDParams): AdapterUseRuleGroupDnDResult => {\n    const previewRef = useRef<HTMLDivElement>(null);\n    const dragRef = useRef<HTMLSpanElement>(null);\n    const dropRef = useRef<HTMLDivElement>(null);\n\n    const [{ isDragging, dragMonitorId }, drag, preview] = useRuleDragCommon(\n      params,\n      'ruleGroup',\n      useDrag\n    );\n\n    const [{ isOver, dropMonitorId, dropEffect, groupItems, dropNotAllowed }, drop] = useDrop<\n      DraggedItem,\n      DropResult,\n      DropCollection\n    >(\n      () => ({\n        accept: ruleGroupAndRuleAccept,\n        canDrop: dragging =>\n          canDropOnRuleGroup({\n            dragging,\n            path: params.path,\n            schema: params.schema,\n            canDrop: params.canDrop,\n            disabled: params.disabled,\n            ruleGroup: params.ruleGroup,\n          }),\n        collect: monitor => ({\n          dropNotAllowed: monitor.isOver() && !monitor.canDrop(),\n          isOver: monitor.canDrop() && monitor.isOver(),\n          dropMonitorId: monitor.getHandlerId() ?? '',\n          dropEffect: isHotkeyPressed(params.copyModeModifierKey) ? 'copy' : 'move',\n          groupItems: isHotkeyPressed(params.groupModeModifierKey),\n        }),\n        drop: () =>\n          buildDropResult({\n            type: 'ruleGroup',\n            path: params.path,\n            schema: params.schema,\n            copyModeModifierKey: params.copyModeModifierKey,\n            groupModeModifierKey: params.groupModeModifierKey,\n          }),\n      }),\n      [\n        params.disabled,\n        params.actions.groupRule,\n        params.actions.moveRule,\n        params.path,\n        params.canDrop,\n        params.ruleGroup,\n        params.schema,\n      ]\n    );\n\n    React.useEffect(() => {\n      if (params.path.length > 0) {\n        drag(dragRef);\n        preview(params.hideDefaultDragPreview ? getEmptyImage() : previewRef);\n      }\n      drop(dropRef);\n    }, [drag, drop, params.hideDefaultDragPreview, params.path.length, preview]);\n\n    return {\n      isDragging,\n      dragMonitorId,\n      isOver,\n      dropMonitorId,\n      previewRef,\n      dragRef,\n      dropRef,\n      dropEffect,\n      groupItems,\n      dropNotAllowed,\n    };\n  };\n\n  const useInlineCombinatorDnD = (\n    params: DndAdapterInlineCombinatorDnDParams\n  ): AdapterUseInlineCombinatorDnDResult => {\n    const dropRef = useRef<HTMLDivElement>(null);\n\n    // The \"hovering\" item is the rule or group which precedes this inline combinator.\n    const hoveringItem = (params.rules ??\n      /* v8 ignore start -- @preserve */ []) /* v8 ignore stop -- @preserve */[\n      params.path.at(-1)! - 1\n    ] as RuleType | RuleGroupTypeAny;\n\n    const [{ isOver, dropMonitorId, dropEffect, dropNotAllowed }, drop] = useDrop<\n      DraggedItem,\n      DropResult,\n      DropCollection\n    >(\n      () => ({\n        accept: ['rule', 'ruleGroup'] as DndDropTargetType[],\n        canDrop: dragging =>\n          canDropOnInlineCombinator({\n            dragging,\n            path: params.path,\n            schema: params.schema,\n            canDrop: params.canDrop,\n            groupModeModifierKey: params.groupModeModifierKey,\n            hoveringItem,\n          }),\n        collect: monitor => ({\n          dropNotAllowed: monitor.isOver() && !monitor.canDrop(),\n          isOver: monitor.canDrop() && monitor.isOver(),\n          dropMonitorId: monitor.getHandlerId() ?? '',\n          dropEffect: isHotkeyPressed(params.copyModeModifierKey) ? 'copy' : 'move',\n          groupItems: isHotkeyPressed(params.groupModeModifierKey),\n        }),\n        drop: () =>\n          buildDropResult({\n            type: 'inlineCombinator',\n            path: params.path,\n            schema: params.schema,\n            copyModeModifierKey: params.copyModeModifierKey,\n            groupModeModifierKey: params.groupModeModifierKey,\n          }),\n      }),\n      [params.canDrop, hoveringItem, params.path, params.schema]\n    );\n\n    drop(dropRef);\n\n    return { dropRef, dropMonitorId, isOver, dropEffect, dropNotAllowed };\n  };\n\n  return {\n    DndProvider,\n    useRuleDnD,\n    useRuleGroupDnD,\n    useInlineCombinatorDnD,\n  };\n};\n"],"mappings":"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"}