{"version":3,"sources":["../../lib/Draggable.tsx","../../lib/utils/shims.ts","../../lib/utils/getPrefix.ts","../../lib/utils/domFns.ts","../../lib/utils/positionFns.ts","../../lib/DraggableCore.tsx","../../lib/utils/log.ts"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport { clsx } from 'clsx';\nimport {createCSSTransform, createSVGTransform} from './utils/domFns';\nimport {canDragX, canDragY, createDraggableData, getBoundPosition} from './utils/positionFns';\nimport {dontSetMe} from './utils/shims';\nimport DraggableCore from './DraggableCore';\nimport type {ControlPosition, PositionOffsetControlPosition, DraggableCoreProps, DraggableCoreDefaultProps} from './DraggableCore';\nimport log from './utils/log';\nimport type {Bounds, DraggableEventHandler} from './utils/types';\nimport type {ReactElement} from 'react';\n\ntype DraggableState = {\n  dragging: boolean,\n  dragged: boolean,\n  x: number, y: number,\n  slackX: number, slackY: number,\n  isElementSVG: boolean,\n  prevPropsPosition: ControlPosition | null,\n};\n\nexport type DraggableDefaultProps = DraggableCoreDefaultProps & {\n  axis: 'both' | 'x' | 'y' | 'none',\n  bounds: Bounds | string | false,\n  defaultClassName: string,\n  defaultClassNameDragging: string,\n  defaultClassNameDragged: string,\n  defaultPosition: ControlPosition,\n  scale: number,\n};\n\nexport type DraggableProps = DraggableCoreProps & DraggableDefaultProps & {\n  positionOffset: PositionOffsetControlPosition,\n  position: ControlPosition,\n};\n\n//\n// Define <Draggable>\n//\n\n// Public-facing prop shape: every prop is optional for consumers because the\n// required ones are supplied by `defaultProps`. This reproduces the historical\n// hand-written declaration `React.Component<Partial<DraggableProps>, {}>` so the\n// auto-generated .d.ts stays API-compatible with the old typings.\nclass Draggable extends React.Component<Partial<DraggableProps>, DraggableState> {\n\n  // Internally, defaultProps guarantees every prop is present at runtime, so we\n  // narrow `this.props` back to the fully-resolved type for type-safe access.\n  declare props: DraggableProps;\n\n  static displayName?: string = 'Draggable';\n\n  // Both the annotation and the `?` are load-bearing:\n  //  - The index-signature annotation stops tsc from inferring the\n  //    PropTypes.Requireable<...> types and emitting `import PropTypes from\n  //    'prop-types'` into the generated public .d.ts, which would force consumers\n  //    to install @types/prop-types (the v4.5.0 hand-written typings had none).\n  //  - The `?` keeps `propTypes` from being a *required* member of the public\n  //    type. React <= 18's JSX LibraryManagedAttributes only consults a\n  //    component's `propTypes` when it is required (`C extends {propTypes: ...}`);\n  //    when it does, this index-signature `propTypes` makes `defaultProps` stop\n  //    marking props optional, so consumers are forced to pass every prop.\n  //    Optional dodges that branch; React 19 ignores `propTypes` entirely. The\n  //    typings/tsconfig.react18.json check guards against a regression here.\n  // Do not remove. See lib/DraggableCore.tsx for the same guard.\n  static propTypes?: {[key: string]: unknown} = {\n    // Accepts all props <DraggableCore> accepts.\n    ...DraggableCore.propTypes,\n\n    /**\n     * `axis` determines which axis the draggable can move.\n     *\n     *  Note that all callbacks will still return data as normal. This only\n     *  controls flushing to the DOM.\n     *\n     * 'both' allows movement horizontally and vertically.\n     * 'x' limits movement to horizontal axis.\n     * 'y' limits movement to vertical axis.\n     * 'none' limits all movement.\n     *\n     * Defaults to 'both'.\n     */\n    axis: PropTypes.oneOf(['both', 'x', 'y', 'none']),\n\n    /**\n     * `bounds` determines the range of movement available to the element.\n     * Available values are:\n     *\n     * 'parent' restricts movement within the Draggable's parent node.\n     *\n     * Alternatively, pass an object with the following properties, all of which are optional:\n     *\n     * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n     *\n     * All values are in px.\n     *\n     * Example:\n     *\n     * ```jsx\n     *   let App = React.createClass({\n     *       render: function () {\n     *         return (\n     *            <Draggable bounds={{right: 300, bottom: 300}}>\n     *              <div>Content</div>\n     *           </Draggable>\n     *         );\n     *       }\n     *   });\n     * ```\n     */\n    bounds: PropTypes.oneOfType([\n      PropTypes.shape({\n        left: PropTypes.number,\n        right: PropTypes.number,\n        top: PropTypes.number,\n        bottom: PropTypes.number\n      }),\n      PropTypes.string,\n      PropTypes.oneOf([false])\n    ]),\n\n    defaultClassName: PropTypes.string,\n    defaultClassNameDragging: PropTypes.string,\n    defaultClassNameDragged: PropTypes.string,\n\n    /**\n     * `defaultPosition` specifies the x and y that the dragged item should start at\n     *\n     * Example:\n     *\n     * ```jsx\n     *      let App = React.createClass({\n     *          render: function () {\n     *              return (\n     *                  <Draggable defaultPosition={{x: 25, y: 25}}>\n     *                      <div>I start with transformX: 25px and transformY: 25px;</div>\n     *                  </Draggable>\n     *              );\n     *          }\n     *      });\n     * ```\n     */\n    defaultPosition: PropTypes.shape({\n      x: PropTypes.number,\n      y: PropTypes.number\n    }),\n    positionOffset: PropTypes.shape({\n      x: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n      y: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n    }),\n\n    /**\n     * `position`, if present, defines the current position of the element.\n     *\n     *  This is similar to how form elements in React work - if no `position` is supplied, the component\n     *  is uncontrolled.\n     *\n     * Example:\n     *\n     * ```jsx\n     *      let App = React.createClass({\n     *          render: function () {\n     *              return (\n     *                  <Draggable position={{x: 25, y: 25}}>\n     *                      <div>I start with transformX: 25px and transformY: 25px;</div>\n     *                  </Draggable>\n     *              );\n     *          }\n     *      });\n     * ```\n     */\n    position: PropTypes.shape({\n      x: PropTypes.number,\n      y: PropTypes.number\n    }),\n\n    /**\n     * These properties should be defined on the child, not here.\n     */\n    className: dontSetMe,\n    style: dontSetMe,\n    transform: dontSetMe\n  };\n\n  // Typed as the full `DraggableProps` (not just the default-provided subset) so\n  // React's JSX LibraryManagedAttributes treats EVERY prop as optional for\n  // consumers, matching the historical hand-written typings. At runtime only the\n  // default-able props are actually populated.\n  static defaultProps: DraggableProps = {\n    ...DraggableCore.defaultProps,\n    axis: 'both',\n    bounds: false,\n    defaultClassName: 'react-draggable',\n    defaultClassNameDragging: 'react-draggable-dragging',\n    defaultClassNameDragged: 'react-draggable-dragged',\n    defaultPosition: {x: 0, y: 0},\n    scale: 1\n  } as unknown as DraggableProps;\n\n  // React 16.3+\n  // Arity (props, state)\n  static getDerivedStateFromProps({position}: DraggableProps, {prevPropsPosition}: DraggableState): Partial<DraggableState> | null {\n    // Set x/y if a new position is provided in props that is different than the previous.\n    if (\n      position &&\n      (!prevPropsPosition ||\n        position.x !== prevPropsPosition.x || position.y !== prevPropsPosition.y\n      )\n    ) {\n      log('Draggable: getDerivedStateFromProps %j', {position, prevPropsPosition});\n      return {\n        x: position.x,\n        y: position.y,\n        prevPropsPosition: {...position}\n      };\n    }\n    return null;\n  }\n\n  constructor(props: DraggableProps) {\n    super(props);\n\n    this.state = {\n      // Whether or not we are currently dragging.\n      dragging: false,\n\n      // Whether or not we have been dragged before.\n      dragged: false,\n\n      // Current transform x and y.\n      x: props.position ? props.position.x : props.defaultPosition.x,\n      y: props.position ? props.position.y : props.defaultPosition.y,\n\n      prevPropsPosition: {...props.position},\n\n      // Used for compensating for out-of-bounds drags\n      slackX: 0, slackY: 0,\n\n      // Can only determine if SVG after mounting\n      isElementSVG: false\n    };\n\n    if (props.position && !(props.onDrag || props.onStop)) {\n      // eslint-disable-next-line no-console\n      console.warn('A `position` was applied to this <Draggable>, without drag handlers. This will make this ' +\n        'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' +\n        '`position` of this element.');\n    }\n  }\n\n  componentDidMount() {\n    // Check to see if the element passed is an instanceof SVGElement\n    if(typeof window.SVGElement !== 'undefined' && this.findDOMNode() instanceof window.SVGElement) {\n      this.setState({isElementSVG: true});\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.state.dragging) {\n      this.setState({dragging: false}); // prevents invariant if unmounted while dragging\n    }\n  }\n\n  // React 19 removed ReactDOM.findDOMNode, so nodeRef is now required.\n  // For backward compatibility with React 18 and earlier, we still support findDOMNode if available.\n  findDOMNode(): HTMLElement | null {\n    if (this.props?.nodeRef) {\n      return this.props.nodeRef.current;\n    }\n    // ReactDOM.findDOMNode was removed from React 19's type defs (and runtime),\n    // so access it dynamically to stay compatible with React 18 and earlier.\n    const legacyReactDOM = ReactDOM as unknown as {\n      findDOMNode?: (instance: unknown) => HTMLElement | null;\n    };\n    if (typeof legacyReactDOM.findDOMNode === 'function') {\n      return legacyReactDOM.findDOMNode(this) as HTMLElement | null;\n    }\n    return null;\n  }\n\n  onDragStart: DraggableEventHandler = (e, coreData) => {\n    log('Draggable: onDragStart: %j', coreData);\n\n    // Short-circuit if user's callback killed it.\n    const shouldStart = this.props.onStart(e, createDraggableData(this, coreData));\n    // Kills start event on core as well, so move handlers are never bound.\n    if (shouldStart === false) return false;\n\n    this.setState({dragging: true, dragged: true});\n  };\n\n  onDrag: DraggableEventHandler = (e, coreData) => {\n    if (!this.state.dragging) return false;\n    log('Draggable: onDrag: %j', coreData);\n\n    const uiData = createDraggableData(this, coreData);\n\n    const newState = {\n      x: uiData.x,\n      y: uiData.y,\n      slackX: 0,\n      slackY: 0,\n    };\n\n    // Keep within bounds.\n    if (this.props.bounds) {\n      // Save original x and y.\n      const {x, y} = newState;\n\n      // Add slack to the values used to calculate bound position. This will ensure that if\n      // we start removing slack, the element won't react to it right away until it's been\n      // completely removed.\n      newState.x += this.state.slackX;\n      newState.y += this.state.slackY;\n\n      // Get bound position. This will ceil/floor the x and y within the boundaries.\n      const [newStateX, newStateY] = getBoundPosition(this, newState.x, newState.y);\n      newState.x = newStateX;\n      newState.y = newStateY;\n\n      // Recalculate slack by noting how much was shaved by the boundPosition handler.\n      newState.slackX = this.state.slackX + (x - newState.x);\n      newState.slackY = this.state.slackY + (y - newState.y);\n\n      // Update the event we fire to reflect what really happened after bounds took effect.\n      uiData.x = newState.x;\n      uiData.y = newState.y;\n      uiData.deltaX = newState.x - this.state.x;\n      uiData.deltaY = newState.y - this.state.y;\n    }\n\n    // Short-circuit if user's callback killed it.\n    const shouldUpdate = this.props.onDrag(e, uiData);\n    if (shouldUpdate === false) return false;\n\n    this.setState(newState);\n  };\n\n  onDragStop: DraggableEventHandler = (e, coreData) => {\n    if (!this.state.dragging) return false;\n\n    // Short-circuit if user's callback killed it.\n    const shouldContinue = this.props.onStop(e, createDraggableData(this, coreData));\n    if (shouldContinue === false) return false;\n\n    log('Draggable: onDragStop: %j', coreData);\n\n    const newState: Partial<DraggableState> = {\n      dragging: false,\n      slackX: 0,\n      slackY: 0\n    };\n\n    // If this is a controlled component, the result of this operation will be to\n    // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n    const controlled = Boolean(this.props.position);\n    if (controlled) {\n      const {x, y} = this.props.position;\n      newState.x = x;\n      newState.y = y;\n    }\n\n    this.setState(newState as DraggableState);\n  };\n\n  render(): ReactElement {\n    const {\n      axis,\n      bounds,\n      children,\n      defaultPosition,\n      defaultClassName,\n      defaultClassNameDragging,\n      defaultClassNameDragged,\n      position,\n      positionOffset,\n      scale,\n      ...draggableCoreProps\n    } = this.props;\n\n    let style = {};\n    let svgTransform = null;\n\n    // If this is controlled, we don't want to move it - unless it's dragging.\n    const controlled = Boolean(position);\n    const draggable = !controlled || this.state.dragging;\n\n    const validPosition = position || defaultPosition;\n    const transformOpts = {\n      // Set left if horizontal drag is enabled\n      x: canDragX(this) && draggable ?\n        this.state.x :\n        validPosition.x,\n\n      // Set top if vertical drag is enabled\n      y: canDragY(this) && draggable ?\n        this.state.y :\n        validPosition.y\n    };\n\n    // If this element was SVG, we use the `transform` attribute.\n    if (this.state.isElementSVG) {\n      svgTransform = createSVGTransform(transformOpts, positionOffset);\n    } else {\n      // Add a CSS transform to move the element around. This allows us to move the element around\n      // without worrying about whether or not it is relatively or absolutely positioned.\n      // If the item you are dragging already has a transform set, wrap it in a <span> so <Draggable>\n      // has a clean slate.\n      style = createCSSTransform(transformOpts, positionOffset);\n    }\n\n    // React.Children.only types its return as ReactElement<unknown>; narrow the\n    // single child to an element carrying optional DOM style/className props so\n    // we can read and merge them.\n    const onlyChild = React.Children.only(children) as ReactElement<{\n      className?: string,\n      style?: React.CSSProperties,\n    }>;\n\n    // Mark with class while dragging\n    const className = clsx((onlyChild.props.className || ''), defaultClassName, {\n      [defaultClassNameDragging]: this.state.dragging,\n      [defaultClassNameDragged]: this.state.dragged\n    });\n\n    // Reuse the child provided\n    // This makes it flexible to use whatever element is wanted (div, ul, etc)\n    return (\n      <DraggableCore {...draggableCoreProps} onStart={this.onDragStart} onDrag={this.onDrag} onStop={this.onDragStop}>\n        {React.cloneElement(onlyChild, {\n          className: className,\n          style: {...onlyChild.props.style, ...style},\n          transform: svgTransform\n        } as Partial<{className: string, style: React.CSSProperties, transform: string | null}>)}\n      </DraggableCore>\n    );\n  }\n}\n\nexport {Draggable as default, DraggableCore};\n","// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\nexport function findInArray<T>(\n  array: ArrayLike<T>,\n  callback: (value: T, index: number, array: ArrayLike<T>) => unknown\n): T | undefined {\n  for (let i = 0, length = array.length; i < length; i++) {\n    if (callback.apply(callback, [array[i], i, array])) return array[i];\n  }\n}\n\nexport function isFunction(func: unknown): func is (...args: unknown[]) => unknown {\n  return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\n\nexport function isNum(num: unknown): num is number {\n  return typeof num === 'number' && !isNaN(num);\n}\n\nexport function int(a: string): number {\n  return parseInt(a, 10);\n}\n\nexport function dontSetMe(props: {[key: string]: unknown}, propName: string, componentName: string): Error | undefined {\n  if (props[propName]) {\n    return new Error(`Invalid prop ${propName} passed to ${componentName} - do not set this, set it on the child.`);\n  }\n}\n","const prefixes = ['Moz', 'Webkit', 'O', 'ms'];\nexport function getPrefix(prop: string='transform'): string {\n  // Ensure we're running in an environment where there is actually a global\n  // `window` obj\n  if (typeof window === 'undefined') return '';\n\n  // If we're in a pseudo-browser server-side environment, this access\n  // path may not exist, so bail out if it doesn't.\n  const style = window.document?.documentElement?.style;\n  if (!style) return '';\n\n  if (prop in style) return '';\n\n  for (let i = 0; i < prefixes.length; i++) {\n    if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n  }\n\n  return '';\n}\n\nexport function browserPrefixToKey(prop: string, prefix: string): string {\n  return prefix ? `${prefix}${kebabToTitleCase(prop)}` : prop;\n}\n\nexport function browserPrefixToStyle(prop: string, prefix: string): string {\n  return prefix ? `-${prefix.toLowerCase()}-${prop}` : prop;\n}\n\nfunction kebabToTitleCase(str: string): string {\n  let out = '';\n  let shouldCapitalize = true;\n  for (let i = 0; i < str.length; i++) {\n    if (shouldCapitalize) {\n      out += str[i].toUpperCase();\n      shouldCapitalize = false;\n    } else if (str[i] === '-') {\n      shouldCapitalize = true;\n    } else {\n      out += str[i];\n    }\n  }\n  return out;\n}\n\n// Default export is the prefix itself, like 'Moz', 'Webkit', etc\n// Note that you may have to re-test for certain things; for instance, Chrome 50\n// can handle unprefixed `transform`, but not unprefixed `user-select`\nexport default (getPrefix() as string);\n","import {findInArray, isFunction, int} from './shims';\nimport browserPrefix, {browserPrefixToKey} from './getPrefix';\n\nimport type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';\n\ntype Indexable = {[key: string]: unknown};\n\n// Drag handlers receive a more specific event type (MouseTouchEvent) than the\n// DOM's `EventListener` (which takes a base `Event`). We accept any such handler\n// and cast to `EventListener` only at the addEventListener/removeEventListener\n// boundary, mirroring the old permissive `Function` parameter type.\ntype EventListenerLike = (event: never) => void | false;\n\nlet matchesSelectorFunc = '';\nexport function matchesSelector(el: Node, selector: string): boolean {\n  if (!matchesSelectorFunc) {\n    matchesSelectorFunc = findInArray([\n      'matches',\n      'webkitMatchesSelector',\n      'mozMatchesSelector',\n      'msMatchesSelector',\n      'oMatchesSelector'\n    ], function(method){\n      // Doesn't think elements are indexable\n      return isFunction((el as unknown as Indexable)[method]);\n    }) ?? '';\n  }\n\n  // Might not be found entirely (not an Element?) - in that case, bail\n  // Doesn't think elements are indexable\n  const matchFn = (el as unknown as Indexable)[matchesSelectorFunc];\n  if (!isFunction(matchFn)) return false;\n\n  // Doesn't think elements are indexable\n  return Boolean(matchFn.call(el, selector));\n}\n\n// Works up the tree to the draggable itself attempting to match selector.\nexport function matchesSelectorAndParentsTo(el: Node, selector: string, baseNode: Node): boolean {\n  let node: Node | null = el;\n  do {\n    if (matchesSelector(node, selector)) return true;\n    if (node === baseNode) return false;\n    node = node.parentNode;\n  } while (node);\n\n  return false;\n}\n\nexport function addEvent(\n  el: Node | null | undefined,\n  event: string,\n  handler: EventListenerLike,\n  inputOptions?: AddEventListenerOptions\n): void {\n  if (!el) return;\n  const options = {capture: true, ...inputOptions};\n  const listener = handler as EventListener;\n  if (el.addEventListener) {\n    el.addEventListener(event, listener, options);\n  } else if ((el as unknown as Indexable).attachEvent) {\n    (el as unknown as {attachEvent(name: string, handler: EventListener): void}).attachEvent('on' + event, listener);\n  } else {\n    // Doesn't think elements are indexable\n    (el as unknown as Indexable)['on' + event] = listener;\n  }\n}\n\nexport function removeEvent(\n  el: Node | null | undefined,\n  event: string,\n  handler: EventListenerLike,\n  inputOptions?: AddEventListenerOptions\n): void {\n  if (!el) return;\n  const options = {capture: true, ...inputOptions};\n  const listener = handler as EventListener;\n  if (el.removeEventListener) {\n    el.removeEventListener(event, listener, options);\n  } else if ((el as unknown as Indexable).detachEvent) {\n    (el as unknown as {detachEvent(name: string, handler: EventListener): void}).detachEvent('on' + event, listener);\n  } else {\n    // Doesn't think elements are indexable\n    (el as unknown as Indexable)['on' + event] = null;\n  }\n}\n\nexport function outerHeight(node: HTMLElement): number {\n  // This is deliberately excluding margin for our calculations, since we are using\n  // offsetTop which is including margin. See getBoundPosition\n  let height = node.clientHeight;\n  const computedStyle = (node.ownerDocument.defaultView as Window).getComputedStyle(node);\n  height += int(computedStyle.borderTopWidth);\n  height += int(computedStyle.borderBottomWidth);\n  return height;\n}\n\nexport function outerWidth(node: HTMLElement): number {\n  // This is deliberately excluding margin for our calculations, since we are using\n  // offsetLeft which is including margin. See getBoundPosition\n  let width = node.clientWidth;\n  const computedStyle = (node.ownerDocument.defaultView as Window).getComputedStyle(node);\n  width += int(computedStyle.borderLeftWidth);\n  width += int(computedStyle.borderRightWidth);\n  return width;\n}\nexport function innerHeight(node: HTMLElement): number {\n  let height = node.clientHeight;\n  const computedStyle = (node.ownerDocument.defaultView as Window).getComputedStyle(node);\n  height -= int(computedStyle.paddingTop);\n  height -= int(computedStyle.paddingBottom);\n  return height;\n}\n\nexport function innerWidth(node: HTMLElement): number {\n  let width = node.clientWidth;\n  const computedStyle = (node.ownerDocument.defaultView as Window).getComputedStyle(node);\n  width -= int(computedStyle.paddingLeft);\n  width -= int(computedStyle.paddingRight);\n  return width;\n}\n\ninterface EventWithOffset {\n  clientX: number, clientY: number\n}\n\n// Get from offsetParent\nexport function offsetXYFromParent(evt: EventWithOffset, offsetParent: HTMLElement, scale: number): ControlPosition {\n  const isBody = offsetParent === offsetParent.ownerDocument.body;\n  const offsetParentRect = isBody ? {left: 0, top: 0} : offsetParent.getBoundingClientRect();\n\n  const x = (evt.clientX + offsetParent.scrollLeft - offsetParentRect.left) / scale;\n  const y = (evt.clientY + offsetParent.scrollTop - offsetParentRect.top) / scale;\n\n  return {x, y};\n}\n\nexport function createCSSTransform(controlPos: ControlPosition, positionOffset: PositionOffsetControlPosition): {[key: string]: string} {\n  const translation = getTranslation(controlPos, positionOffset, 'px');\n  return {[browserPrefixToKey('transform', browserPrefix)]: translation };\n}\n\nexport function createSVGTransform(controlPos: ControlPosition, positionOffset: PositionOffsetControlPosition): string {\n  const translation = getTranslation(controlPos, positionOffset, '');\n  return translation;\n}\nexport function getTranslation({x, y}: ControlPosition, positionOffset: PositionOffsetControlPosition, unitSuffix: string): string {\n  let translation = `translate(${x}${unitSuffix},${y}${unitSuffix})`;\n  if (positionOffset) {\n    const defaultX = `${(typeof positionOffset.x === 'string') ? positionOffset.x : positionOffset.x + unitSuffix}`;\n    const defaultY = `${(typeof positionOffset.y === 'string') ? positionOffset.y : positionOffset.y + unitSuffix}`;\n    translation = `translate(${defaultX}, ${defaultY})` + translation;\n  }\n  return translation;\n}\n\nexport function getTouch(e: MouseTouchEvent, identifier: number): {clientX: number, clientY: number} | null | undefined {\n  return (e.targetTouches && findInArray(e.targetTouches, t => identifier === t.identifier)) ||\n         (e.changedTouches && findInArray(e.changedTouches, t => identifier === t.identifier));\n}\n\nexport function getTouchIdentifier(e: MouseTouchEvent): number | undefined {\n  if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n  if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n}\n\n// User-select Hacks:\n//\n// Useful for preventing blue highlights all over everything when dragging.\n\n// webpack exposes the page's CSP nonce as the free variable `__webpack_nonce__`.\n// Read it defensively: the `typeof` guard keeps this safe under bundlers that\n// don't define it (a bare reference to an undeclared identifier would throw).\ndeclare const __webpack_nonce__: string | undefined;\nfunction getDefaultNonce(): string | undefined {\n  return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : undefined;\n}\n\n// Note we're passing `document` b/c we could be iframed\nexport function addUserSelectStyles(doc: Document | null | undefined, nonce?: string | null) {\n  if (!doc) return;\n  let styleEl = doc.getElementById('react-draggable-style-el') as HTMLStyleElement | null;\n  if (!styleEl) {\n    styleEl = doc.createElement('style');\n    styleEl.type = 'text/css';\n    styleEl.id = 'react-draggable-style-el';\n    // Attach a CSP nonce so a strict `style-src` policy doesn't block this\n    // injected element. Prefer the explicit prop; otherwise fall back to\n    // webpack's `__webpack_nonce__`. Only the first call (which creates the\n    // element) applies it; later calls reuse the existing element as before.\n    const resolvedNonce = nonce ?? getDefaultNonce();\n    if (resolvedNonce) styleEl.setAttribute('nonce', resolvedNonce);\n    styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n    styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n    doc.getElementsByTagName('head')[0].appendChild(styleEl);\n  }\n  if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n}\n\nexport function scheduleRemoveUserSelectStyles(doc: Document | null | undefined) {\n  // Prevent a possible \"forced reflow\"\n  if (window.requestAnimationFrame) {\n    window.requestAnimationFrame(() => {\n      removeUserSelectStyles(doc);\n    });\n  } else {\n    removeUserSelectStyles(doc);\n  }\n}\n\nfunction removeUserSelectStyles(doc: Document | null | undefined) {\n  if (!doc) return;\n  try {\n    if (doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');\n    // IE\n    const ieSelection = (doc as unknown as {selection?: {empty(): void}}).selection;\n    if (ieSelection) {\n      // IE\n      ieSelection.empty();\n    } else {\n      // Remove selection caused by scroll, unless it's a focused input\n      // (we use doc.defaultView in case we're in an iframe)\n      const selection = (doc.defaultView || window).getSelection();\n      if (selection && selection.type !== 'Caret') {\n        selection.removeAllRanges();\n      }\n    }\n  } catch {\n    // probably IE\n  }\n}\n\nexport function addClassName(el: HTMLElement, className: string) {\n  if (el.classList) {\n    el.classList.add(className);\n  } else {\n    if (!el.className.match(new RegExp(`(?:^|\\\\s)${className}(?!\\\\S)`))) {\n      el.className += ` ${className}`;\n    }\n  }\n}\n\nexport function removeClassName(el: HTMLElement, className: string) {\n  if (el.classList) {\n    el.classList.remove(className);\n  } else {\n    el.className = el.className.replace(new RegExp(`(?:^|\\\\s)${className}(?!\\\\S)`, 'g'), '');\n  }\n}\n","import {isNum, int} from './shims';\nimport {getTouch, innerWidth, innerHeight, offsetXYFromParent, outerWidth, outerHeight} from './domFns';\n\nimport type Draggable from '../Draggable';\nimport type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';\nimport type DraggableCore from '../DraggableCore';\n\nexport function getBoundPosition(draggable: Draggable, x: number, y: number): [number, number] {\n  // If no bounds, short-circuit and move on\n  if (!draggable.props.bounds) return [x, y];\n\n  // Clone new bounds\n  let {bounds} = draggable.props;\n  bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n  const node = findDOMNode(draggable);\n\n  if (typeof bounds === 'string') {\n    const {ownerDocument} = node;\n    const ownerWindow = ownerDocument.defaultView;\n    if (!ownerWindow) {\n      throw new Error('Cannot resolve the owner window of the draggable node.');\n    }\n    let boundNode;\n    if (bounds === 'parent') {\n      boundNode = node.parentNode;\n    } else {\n      // Flow assigns the wrong return type (Node) for getRootNode(),\n      // so we cast it to one of the correct types (Element).\n      // The others are Document and ShadowRoot.\n      // All three implement querySelector() so it's safe to call.\n      const rootNode = (node.getRootNode() as unknown) as Element;\n      boundNode = rootNode.querySelector(bounds);\n    }\n\n    if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n      throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n    }\n    const boundNodeEl: HTMLElement = boundNode; // for Flow, can't seem to refine correctly\n    const nodeStyle = ownerWindow.getComputedStyle(node);\n    const boundNodeStyle = ownerWindow.getComputedStyle(boundNodeEl);\n    // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n    bounds = {\n      left: -node.offsetLeft + int(boundNodeStyle.paddingLeft) + int(nodeStyle.marginLeft),\n      top: -node.offsetTop + int(boundNodeStyle.paddingTop) + int(nodeStyle.marginTop),\n      right: innerWidth(boundNodeEl) - outerWidth(node) - node.offsetLeft +\n        int(boundNodeStyle.paddingRight) - int(nodeStyle.marginRight),\n      bottom: innerHeight(boundNodeEl) - outerHeight(node) - node.offsetTop +\n        int(boundNodeStyle.paddingBottom) - int(nodeStyle.marginBottom)\n    };\n  }\n\n  // Keep x and y below right and bottom limits...\n  if (isNum(bounds.right)) x = Math.min(x, bounds.right);\n  if (isNum(bounds.bottom)) y = Math.min(y, bounds.bottom);\n\n  // But above left and top limits.\n  if (isNum(bounds.left)) x = Math.max(x, bounds.left);\n  if (isNum(bounds.top)) y = Math.max(y, bounds.top);\n\n  return [x, y];\n}\n\nexport function snapToGrid(grid: [number, number], pendingX: number, pendingY: number): [number, number] {\n  const x = Math.round(pendingX / grid[0]) * grid[0];\n  const y = Math.round(pendingY / grid[1]) * grid[1];\n  return [x, y];\n}\n\nexport function canDragX(draggable: Draggable): boolean {\n  return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n}\n\nexport function canDragY(draggable: Draggable): boolean {\n  return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n}\n\n// Get {x, y} positions from event.\nexport function getControlPosition(e: MouseTouchEvent, touchIdentifier: number | null | undefined, draggableCore: DraggableCore): ControlPosition | null {\n  const touchObj = typeof touchIdentifier === 'number' ? getTouch(e, touchIdentifier) : null;\n  if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n  const node = findDOMNode(draggableCore);\n  // User can provide an offsetParent if desired.\n  const offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n  return offsetXYFromParent(touchObj || e, offsetParent as HTMLElement, draggableCore.props.scale);\n}\n\n// Create an data object exposed by <DraggableCore>'s events\nexport function createCoreData(draggable: DraggableCore, x: number, y: number): DraggableData {\n  const isStart = !isNum(draggable.lastX);\n  const node = findDOMNode(draggable);\n\n  if (isStart) {\n    // If this is our first move, use the x and y as last coords.\n    return {\n      node,\n      deltaX: 0, deltaY: 0,\n      lastX: x, lastY: y,\n      x, y,\n    };\n  } else {\n    // Otherwise calculate proper values.\n    return {\n      node,\n      deltaX: x - draggable.lastX, deltaY: y - draggable.lastY,\n      lastX: draggable.lastX, lastY: draggable.lastY,\n      x, y,\n    };\n  }\n}\n\n// Create an data exposed by <Draggable>'s events\nexport function createDraggableData(draggable: Draggable, coreData: DraggableData): DraggableData {\n  const scale = draggable.props.scale;\n  return {\n    node: coreData.node,\n    x: draggable.state.x + (coreData.deltaX / scale),\n    y: draggable.state.y + (coreData.deltaY / scale),\n    deltaX: (coreData.deltaX / scale),\n    deltaY: (coreData.deltaY / scale),\n    lastX: draggable.state.x,\n    lastY: draggable.state.y\n  };\n}\n\n// A lot faster than stringify/parse\nfunction cloneBounds(bounds: Bounds): Bounds {\n  return {\n    left: bounds.left,\n    top: bounds.top,\n    right: bounds.right,\n    bottom: bounds.bottom\n  };\n}\n\nfunction findDOMNode(draggable: Draggable | DraggableCore): HTMLElement {\n  const node = draggable.findDOMNode();\n  if (!node) {\n    throw new Error('<DraggableCore>: Unmounted during event!');\n  }\n  // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n  return node;\n}\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport {matchesSelectorAndParentsTo, addEvent, removeEvent, addUserSelectStyles, getTouchIdentifier,\n        scheduleRemoveUserSelectStyles} from './utils/domFns';\nimport {createCoreData, getControlPosition, snapToGrid} from './utils/positionFns';\nimport {dontSetMe} from './utils/shims';\nimport log from './utils/log';\n\nimport type {EventHandler, MouseTouchEvent} from './utils/types';\n\n// Re-export shared types so existing imports from './DraggableCore' keep working.\nexport type {DraggableData, DraggableEventHandler, ControlPosition, PositionOffsetControlPosition} from './utils/types';\nimport type {DraggableEventHandler} from './utils/types';\n\n// Simple abstraction for dragging events names.\nconst eventsFor = {\n  touch: {\n    start: 'touchstart',\n    move: 'touchmove',\n    stop: 'touchend'\n  },\n  mouse: {\n    start: 'mousedown',\n    move: 'mousemove',\n    stop: 'mouseup'\n  }\n};\n\n// Default to mouse events.\nlet dragEventFor = eventsFor.mouse;\n\nexport type DraggableCoreDefaultProps = {\n  allowAnyClick: boolean,\n  allowMobileScroll: boolean,\n  disabled: boolean,\n  enableUserSelectHack: boolean,\n  onStart: DraggableEventHandler,\n  onDrag: DraggableEventHandler,\n  onStop: DraggableEventHandler,\n  onMouseDown: (e: MouseEvent) => void,\n  scale: number,\n};\n\nexport type DraggableCoreProps = DraggableCoreDefaultProps & {\n  cancel: string,\n  // Public type stays React.ReactNode for backward compatibility with the\n  // hand-written typings shipped through v4.5.0. At runtime React.Children.only\n  // still requires exactly one element (enforced in render()).\n  children?: React.ReactNode,\n  offsetParent: HTMLElement,\n  grid: [number, number],\n  handle: string,\n  nodeRef?: React.RefObject<HTMLElement | null> | null,\n  nonce?: string,\n};\n\n//\n// Define <DraggableCore>.\n//\n// <DraggableCore> is for advanced usage of <Draggable>. It maintains minimal internal state so it can\n// work well with libraries that require more control over the element.\n//\n\n// Public-facing prop shape: every prop is optional for consumers because the\n// required ones are supplied by `defaultProps`. This reproduces the historical\n// hand-written declaration `React.Component<Partial<DraggableCoreProps>, {}>`\n// so the auto-generated .d.ts stays API-compatible with the old typings.\nexport default class DraggableCore extends React.Component<Partial<DraggableCoreProps>> {\n\n  // Internally, defaultProps guarantees every prop is present at runtime, so we\n  // narrow `this.props` back to the fully-resolved type for type-safe access.\n  declare props: DraggableCoreProps;\n\n  static displayName: string | undefined = 'DraggableCore';\n\n  // Both the annotation and the `?` are load-bearing:\n  //  - The index-signature annotation stops tsc from inferring the\n  //    PropTypes.Requireable<...> types and emitting `import PropTypes from\n  //    'prop-types'` into the generated public .d.ts, which would force consumers\n  //    to install @types/prop-types (the v4.5.0 hand-written typings had none).\n  //  - The `?` keeps `propTypes` from being a *required* member of the public\n  //    type. React <= 18's JSX LibraryManagedAttributes only consults a\n  //    component's `propTypes` when it is required (`C extends {propTypes: ...}`);\n  //    when it does, this index-signature `propTypes` makes `defaultProps` stop\n  //    marking props optional, so consumers are forced to pass every prop.\n  //    Optional dodges that branch; React 19 ignores `propTypes` entirely. The\n  //    typings/tsconfig.react18.json check guards against a regression here.\n  // Do not remove. See lib/Draggable.tsx for the same guard.\n  static propTypes?: {[key: string]: unknown} = {\n    /**\n     * `allowAnyClick` allows dragging using any mouse button.\n     * By default, we only accept the left button.\n     *\n     * Defaults to `false`.\n     */\n    allowAnyClick: PropTypes.bool,\n\n    /**\n     * `allowMobileScroll` turns off cancellation of the 'touchstart' event\n     * on mobile devices. Only enable this if you are having trouble with click\n     * events. Prefer using 'handle' / 'cancel' instead.\n     *\n     * Defaults to `false`.\n     */\n    allowMobileScroll: PropTypes.bool,\n\n    children: PropTypes.node.isRequired,\n\n    /**\n     * `disabled`, if true, stops the <Draggable> from dragging. All handlers,\n     * with the exception of `onMouseDown`, will not fire.\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * By default, we add 'user-select:none' attributes to the document body\n     * to prevent ugly text selection during drag. If this is causing problems\n     * for your app, set this to `false`.\n     */\n    enableUserSelectHack: PropTypes.bool,\n\n    /**\n     * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n     * instead of using the parent node.\n     */\n    offsetParent: function(props: DraggableCoreProps, propName: keyof DraggableCoreProps) {\n      if (props[propName] && (props[propName] as HTMLElement).nodeType !== 1) {\n        throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n      }\n    },\n\n    /**\n     * `grid` specifies the x and y that dragging should snap to.\n     */\n    grid: PropTypes.arrayOf(PropTypes.number),\n\n    /**\n     * `handle` specifies a selector to be used as the handle that initiates drag.\n     *\n     * Example:\n     *\n     * ```jsx\n     *   let App = React.createClass({\n     *       render: function () {\n     *         return (\n     *            <Draggable handle=\".handle\">\n     *              <div>\n     *                  <div className=\"handle\">Click me to drag</div>\n     *                  <div>This is some other content</div>\n     *              </div>\n     *           </Draggable>\n     *         );\n     *       }\n     *   });\n     * ```\n     */\n    handle: PropTypes.string,\n\n    /**\n     * `cancel` specifies a selector to be used to prevent drag initialization.\n     *\n     * Example:\n     *\n     * ```jsx\n     *   let App = React.createClass({\n     *       render: function () {\n     *           return(\n     *               <Draggable cancel=\".cancel\">\n     *                   <div>\n     *                     <div className=\"cancel\">You can't drag from here</div>\n     *                     <div>Dragging here works fine</div>\n     *                   </div>\n     *               </Draggable>\n     *           );\n     *       }\n     *   });\n     * ```\n     */\n    cancel: PropTypes.string,\n\n    /* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.\n     * Unfortunately, in order for <Draggable> to work properly, we need raw access\n     * to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`\n     * as in this example:\n     *\n     * function MyComponent() {\n     *   const nodeRef = React.useRef(null);\n     *   return (\n     *     <Draggable nodeRef={nodeRef}>\n     *       <div ref={nodeRef}>Example Target</div>\n     *     </Draggable>\n     *   );\n     * }\n     *\n     * This can be used for arbitrarily nested components, so long as the ref ends up\n     * pointing to the actual child DOM node and not a custom component.\n     */\n    nodeRef: PropTypes.object,\n\n    /**\n     * `nonce` is applied to the dynamically-injected <style> element used by the\n     * user-select hack, so it isn't blocked under a strict Content Security\n     * Policy (`style-src` without `'unsafe-inline'`). If omitted, webpack's\n     * `__webpack_nonce__` global is used when available.\n     */\n    nonce: PropTypes.string,\n\n    /**\n     * Called when dragging starts.\n     * If this function returns the boolean false, dragging will be canceled.\n     */\n    onStart: PropTypes.func,\n\n    /**\n     * Called while dragging.\n     * If this function returns the boolean false, dragging will be canceled.\n     */\n    onDrag: PropTypes.func,\n\n    /**\n     * Called when dragging stops.\n     * If this function returns the boolean false, the drag will remain active.\n     */\n    onStop: PropTypes.func,\n\n    /**\n     * A workaround option which can be passed if onMouseDown needs to be accessed,\n     * since it'll always be blocked (as there is internal use of onMouseDown)\n     */\n    onMouseDown: PropTypes.func,\n\n    /**\n     * `scale`, if set, applies scaling while dragging an element\n     */\n    scale: PropTypes.number,\n\n    /**\n     * These properties should be defined on the child, not here.\n     */\n    className: dontSetMe,\n    style: dontSetMe,\n    transform: dontSetMe\n  };\n\n  // Typed as the full `DraggableCoreProps` (not just the default-provided subset)\n  // so React's JSX LibraryManagedAttributes treats EVERY prop as optional for\n  // consumers, matching the historical hand-written typings. At runtime only the\n  // default-able props are actually populated.\n  static defaultProps: DraggableCoreProps = {\n    allowAnyClick: false, // by default only accept left click\n    allowMobileScroll: false,\n    disabled: false,\n    enableUserSelectHack: true,\n    onStart: function(){},\n    onDrag: function(){},\n    onStop: function(){},\n    onMouseDown: function(){},\n    scale: 1,\n  } as unknown as DraggableCoreProps;\n\n  dragging: boolean = false;\n\n  // Used while dragging to determine deltas.\n  lastX: number = NaN;\n  lastY: number = NaN;\n\n  touchIdentifier: number | null | undefined = null;\n\n  mounted: boolean = false;\n\n  componentDidMount() {\n    this.mounted = true;\n    // Touch handlers must be added with {passive: false} to be cancelable.\n    // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n    const thisNode = this.findDOMNode();\n    if (thisNode) {\n      addEvent(thisNode, eventsFor.touch.start, this.onTouchStart, {passive: false});\n    }\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n    // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n    // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n    const thisNode = this.findDOMNode();\n    if (thisNode) {\n      const {ownerDocument} = thisNode;\n      removeEvent(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n      removeEvent(ownerDocument, eventsFor.touch.move, this.handleDrag);\n      removeEvent(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n      removeEvent(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n      removeEvent(thisNode, eventsFor.touch.start, this.onTouchStart, {passive: false});\n      if (this.props.enableUserSelectHack) scheduleRemoveUserSelectStyles(ownerDocument);\n    }\n  }\n\n  // React 19 removed ReactDOM.findDOMNode, so nodeRef is now required.\n  // For backward compatibility with React 18 and earlier, we still support findDOMNode if available.\n  findDOMNode(): HTMLElement | null {\n    if (this.props?.nodeRef) {\n      return this.props.nodeRef.current;\n    }\n    // ReactDOM.findDOMNode was removed in React 19\n    const legacyReactDOM = ReactDOM as unknown as {findDOMNode?: (instance: React.Component) => HTMLElement | null};\n    if (typeof legacyReactDOM.findDOMNode === 'function') {\n      return legacyReactDOM.findDOMNode(this);\n    }\n    // In React 19+, nodeRef is required - log a warning via our log utility\n    log(\n      'react-draggable: ReactDOM.findDOMNode is not available in React 19+. ' +\n      'You must provide a nodeRef prop. See: https://github.com/react-grid-layout/react-draggable#noderef'\n    );\n    return null;\n  }\n\n  handleDragStart: EventHandler<MouseTouchEvent> = (e) => {\n    // Make it possible to attach event handlers on top of this one.\n    this.props.onMouseDown(e);\n\n    // Only accept left-clicks. On macOS, ctrl+click is equivalent to right-click.\n    if (!this.props.allowAnyClick && ((typeof e.button === 'number' && e.button !== 0) || e.ctrlKey)) return false;\n\n    // Get nodes. Be sure to grab relative document (could be iframed)\n    const thisNode = this.findDOMNode();\n    if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n      throw new Error('<DraggableCore> not mounted on DragStart!');\n    }\n    const {ownerDocument} = thisNode;\n\n    // Short circuit if handle or cancel prop was provided and selector doesn't match.\n    if (this.props.disabled ||\n      (!(e.target instanceof (ownerDocument.defaultView as Window & typeof globalThis).Node)) ||\n      (this.props.handle && !matchesSelectorAndParentsTo(e.target as Node, this.props.handle, thisNode)) ||\n      (this.props.cancel && matchesSelectorAndParentsTo(e.target as Node, this.props.cancel, thisNode))) {\n      return;\n    }\n\n    // Prevent scrolling on mobile devices, like ipad/iphone.\n    // Important that this is after handle/cancel.\n    if (e.type === 'touchstart' && !this.props.allowMobileScroll) e.preventDefault();\n\n    // Set touch identifier in component state if this is a touch event. This allows us to\n    // distinguish between individual touches on multitouch screens by identifying which\n    // touchpoint was set to this element.\n    const touchIdentifier = getTouchIdentifier(e);\n    this.touchIdentifier = touchIdentifier;\n\n    // Get the current drag point from the event. This is used as the offset.\n    const position = getControlPosition(e, touchIdentifier, this);\n    if (position == null) return; // not possible but satisfies flow\n    const {x, y} = position;\n\n    // Create an event object with all the data parents need to make a decision here.\n    const coreEvent = createCoreData(this, x, y);\n\n    log('DraggableCore: handleDragStart: %j', coreEvent);\n\n    // Call event handler. If it returns explicit false, cancel.\n    log('calling', this.props.onStart);\n    const shouldUpdate = this.props.onStart(e, coreEvent);\n    if (shouldUpdate === false || this.mounted === false) return;\n\n    // Add a style to the body to disable user-select. This prevents text from\n    // being selected all over the page.\n    if (this.props.enableUserSelectHack) addUserSelectStyles(ownerDocument, this.props.nonce);\n\n    // Initiate dragging. Set the current x and y as offsets\n    // so we know how much we've moved during the drag. This allows us\n    // to drag elements around even if they have been moved, without issue.\n    this.dragging = true;\n    this.lastX = x;\n    this.lastY = y;\n\n    // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n    // this element. We use different events depending on whether or not we have detected that this\n    // is a touch-capable device.\n    addEvent(ownerDocument, dragEventFor.move, this.handleDrag);\n    addEvent(ownerDocument, dragEventFor.stop, this.handleDragStop);\n  };\n\n  handleDrag: EventHandler<MouseTouchEvent> = (e) => {\n\n    // Get the current drag point from the event. This is used as the offset.\n    const position = getControlPosition(e, this.touchIdentifier, this);\n    if (position == null) return;\n    let {x, y} = position;\n\n    // Snap to grid if prop has been provided\n    if (Array.isArray(this.props.grid)) {\n      let deltaX = x - this.lastX, deltaY = y - this.lastY;\n      [deltaX, deltaY] = snapToGrid(this.props.grid, deltaX, deltaY);\n      if (!deltaX && !deltaY) return; // skip useless drag\n      x = this.lastX + deltaX;\n      y = this.lastY + deltaY;\n    }\n\n    const coreEvent = createCoreData(this, x, y);\n\n    log('DraggableCore: handleDrag: %j', coreEvent);\n\n    // Call event handler. If it returns explicit false, trigger end.\n    const shouldUpdate = this.props.onDrag(e, coreEvent);\n    if (shouldUpdate === false || this.mounted === false) {\n      try {\n        this.handleDragStop(new MouseEvent('mouseup') as MouseTouchEvent);\n      } catch {\n        // Old browsers\n        const event = document.createEvent('MouseEvents') as unknown as MouseTouchEvent;\n        // I see why this insanity was deprecated\n        event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n        this.handleDragStop(event);\n      }\n      return;\n    }\n\n    this.lastX = x;\n    this.lastY = y;\n  };\n\n  handleDragStop: EventHandler<MouseTouchEvent> = (e) => {\n    if (!this.dragging) return;\n\n    const position = getControlPosition(e, this.touchIdentifier, this);\n    if (position == null) return;\n    let {x, y} = position;\n\n    // Snap to grid if prop has been provided\n    if (Array.isArray(this.props.grid)) {\n      let deltaX = x - this.lastX || 0;\n      let deltaY = y - this.lastY || 0;\n      [deltaX, deltaY] = snapToGrid(this.props.grid, deltaX, deltaY);\n      x = this.lastX + deltaX;\n      y = this.lastY + deltaY;\n    }\n\n    const coreEvent = createCoreData(this, x, y);\n\n    // Call event handler\n    const shouldContinue = this.props.onStop(e, coreEvent);\n    if (shouldContinue === false || this.mounted === false) return false;\n\n    const thisNode = this.findDOMNode();\n    if (thisNode) {\n      // Remove user-select hack\n      if (this.props.enableUserSelectHack) scheduleRemoveUserSelectStyles(thisNode.ownerDocument);\n    }\n\n    log('DraggableCore: handleDragStop: %j', coreEvent);\n\n    // Reset the el.\n    this.dragging = false;\n    this.lastX = NaN;\n    this.lastY = NaN;\n\n    if (thisNode) {\n      // Remove event handlers\n      log('DraggableCore: Removing handlers');\n      removeEvent(thisNode.ownerDocument, dragEventFor.move, this.handleDrag);\n      removeEvent(thisNode.ownerDocument, dragEventFor.stop, this.handleDragStop);\n    }\n  };\n\n  onMouseDown: EventHandler<MouseTouchEvent> = (e) => {\n    dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n    return this.handleDragStart(e);\n  };\n\n  onMouseUp: EventHandler<MouseTouchEvent> = (e) => {\n    dragEventFor = eventsFor.mouse;\n\n    return this.handleDragStop(e);\n  };\n\n  // Same as onMouseDown (start drag), but now consider this a touch device.\n  onTouchStart: EventHandler<MouseTouchEvent> = (e) => {\n    // We're on a touch device now, so change the event handlers\n    dragEventFor = eventsFor.touch;\n\n    return this.handleDragStart(e);\n  };\n\n  onTouchEnd: EventHandler<MouseTouchEvent> = (e) => {\n    // We're on a touch device now, so change the event handlers\n    dragEventFor = eventsFor.touch;\n\n    return this.handleDragStop(e);\n  };\n\n  render(): React.ReactElement {\n    // Reuse the child provided\n    // This makes it flexible to use whatever element is wanted (div, ul, etc)\n    // children is typed as ReactNode for public-API compatibility; Children.only\n    // throws at runtime unless it is exactly one element, so the cast is safe.\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return React.cloneElement(React.Children.only(this.props.children) as React.ReactElement<any>, {\n      // Note: mouseMove handler is attached to document so it will still function\n      // when the user drags quickly and leaves the bounds of the element.\n      onMouseDown: this.onMouseDown,\n      onMouseUp: this.onMouseUp,\n      // onTouchStart is added on `componentDidMount` so they can be added with\n      // {passive: false}, which allows it to cancel. See\n      // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n      onTouchEnd: this.onTouchEnd\n    } as React.Attributes);\n  }\n}\n","/*eslint no-console:0*/\nconst log = typeof process !== 'undefined' && process.env.DRAGGABLE_DEBUG ? console.log.bind(console) : function noop(): void {};\nexport default log;\n"],"mappings":"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","names":["React","PropTypes","ReactDOM","ReactDOM","PropTypes"]}