{"mappings":"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","sources":["packages/react-aria/src/dnd/DragManager.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {announce} from '../live-announcer/LiveAnnouncer';\n\nimport {ariaHideOutside} from '../overlays/ariaHideOutside';\nimport {\n  DragEndEvent,\n  DragItem,\n  DropActivateEvent,\n  DropEnterEvent,\n  DropEvent,\n  DropExitEvent,\n  DropItem,\n  DropOperation,\n  DropTarget as DroppableCollectionTarget,\n  FocusableElement\n} from '@react-types/shared';\nimport {getActiveElement, getEventTarget, nodeContains} from '../utils/shadowdom/DOMFunctions';\nimport {getDragModality, getTypes} from './utils';\nimport {isVirtualClick, isVirtualPointerEvent} from '../utils/isVirtualEvent';\nimport type {LocalizedStringFormatter} from '@internationalized/string';\nimport {RefObject, useEffect, useState} from 'react';\n\nlet dropTargets = new Map<Element, DropTarget>();\nlet dropItems = new Map<Element, DroppableItem>();\nlet dragSession: DragSession | null = null;\nlet subscriptions = new Set<() => void>();\n\ninterface DropTarget {\n  element: FocusableElement;\n  preventFocusOnDrop?: boolean;\n  getDropOperation?: (types: Set<string>, allowedOperations: DropOperation[]) => DropOperation;\n  onDropEnter?: (e: DropEnterEvent, dragTarget: DragTarget) => void;\n  onDropExit?: (e: DropExitEvent) => void;\n  onDropTargetEnter?: (target: DroppableCollectionTarget | null) => void;\n  onDropActivate?: (e: DropActivateEvent, target: DroppableCollectionTarget | null) => void;\n  onDrop?: (e: DropEvent, target: DroppableCollectionTarget | null) => void;\n  onKeyDown?: (e: KeyboardEvent, dragTarget: DragTarget) => void;\n  activateButtonRef?: RefObject<FocusableElement | null>;\n}\n\nexport function registerDropTarget(target: DropTarget) {\n  dropTargets.set(target.element, target);\n  dragSession?.updateValidDropTargets();\n  return (): void => {\n    dropTargets.delete(target.element);\n    dragSession?.updateValidDropTargets();\n  };\n}\n\ninterface DroppableItem {\n  element: FocusableElement;\n  target: DroppableCollectionTarget;\n  getDropOperation?: (types: Set<string>, allowedOperations: DropOperation[]) => DropOperation;\n  activateButtonRef?: RefObject<FocusableElement | null>;\n}\n\nexport function registerDropItem(item: DroppableItem) {\n  dropItems.set(item.element, item);\n  return (): void => {\n    dropItems.delete(item.element);\n  };\n}\n\ninterface DragTarget {\n  element: FocusableElement;\n  items: DragItem[];\n  allowedDropOperations: DropOperation[];\n  onDragEnd?: (e: DragEndEvent) => void;\n}\n\nexport function beginDragging(target: DragTarget, stringFormatter: LocalizedStringFormatter): void {\n  if (dragSession) {\n    throw new Error('Cannot begin dragging while already dragging');\n  }\n\n  dragSession = new DragSession(target, stringFormatter);\n  requestAnimationFrame(() => {\n    if (dragSession) {\n      dragSession.setup();\n      if (getDragModality() === 'keyboard') {\n        dragSession.next();\n      }\n    }\n  });\n\n  for (let cb of subscriptions) {\n    cb();\n  }\n}\n\nexport function useDragSession(): DragSession | null {\n  let [session, setSession] = useState(dragSession);\n\n  useEffect(() => {\n    let cb = () => setSession(dragSession);\n    subscriptions.add(cb);\n    return () => {\n      subscriptions.delete(cb);\n    };\n  }, []);\n\n  return session;\n}\n\n/** @private */\nexport function isVirtualDragging(): boolean {\n  return !!dragSession;\n}\n\nfunction endDragging() {\n  dragSession = null;\n  for (let cb of subscriptions) {\n    cb();\n  }\n}\n\nexport function isValidDropTarget(element: Element): boolean {\n  for (let target of dropTargets.keys()) {\n    if (nodeContains(target, element)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nconst CANCELED_EVENTS = [\n  'pointerdown',\n  'pointermove',\n  'pointerenter',\n  'pointerleave',\n  'pointerover',\n  'pointerout',\n  'pointerup',\n  'mousedown',\n  'mousemove',\n  'mouseenter',\n  'mouseleave',\n  'mouseover',\n  'mouseout',\n  'mouseup',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'focusin',\n  'focusout'\n];\n\nconst CLICK_EVENTS = ['pointerup', 'mouseup', 'touchend'];\n\nconst MESSAGES = {\n  keyboard: 'dragStartedKeyboard',\n  touch: 'dragStartedTouch',\n  virtual: 'dragStartedVirtual'\n};\n\nclass DragSession {\n  dragTarget: DragTarget;\n  validDropTargets: DropTarget[] = [];\n  currentDropTarget: DropTarget | null = null;\n  currentDropItem: DroppableItem | null = null;\n  dropOperation: DropOperation | null = null;\n  private mutationObserver: MutationObserver | null = null;\n  private restoreAriaHidden: (() => void) | null = null;\n  private stringFormatter: LocalizedStringFormatter;\n  private isVirtualClick: boolean = false;\n  private initialFocused: boolean;\n\n  constructor(target: DragTarget, stringFormatter: LocalizedStringFormatter) {\n    this.dragTarget = target;\n    this.stringFormatter = stringFormatter;\n\n    this.onKeyDown = this.onKeyDown.bind(this);\n    this.onKeyUp = this.onKeyUp.bind(this);\n    this.onFocus = this.onFocus.bind(this);\n    this.onBlur = this.onBlur.bind(this);\n    this.onClick = this.onClick.bind(this);\n    this.onPointerDown = this.onPointerDown.bind(this);\n    this.cancelEvent = this.cancelEvent.bind(this);\n    this.initialFocused = false;\n  }\n\n  setup(): void {\n    document.addEventListener('keydown', this.onKeyDown, true);\n    document.addEventListener('keyup', this.onKeyUp, true);\n    window.addEventListener('focus', this.onFocus, true);\n    window.addEventListener('blur', this.onBlur, true);\n    document.addEventListener('click', this.onClick, true);\n    document.addEventListener('pointerdown', this.onPointerDown, true);\n\n    for (let event of CANCELED_EVENTS) {\n      document.addEventListener(event, this.cancelEvent, true);\n    }\n\n    this.mutationObserver = new MutationObserver(() => this.updateValidDropTargets());\n    this.updateValidDropTargets();\n\n    announce(this.stringFormatter.format(MESSAGES[getDragModality()]));\n  }\n\n  teardown(): void {\n    document.removeEventListener('keydown', this.onKeyDown, true);\n    document.removeEventListener('keyup', this.onKeyUp, true);\n    window.removeEventListener('focus', this.onFocus, true);\n    window.removeEventListener('blur', this.onBlur, true);\n    document.removeEventListener('click', this.onClick, true);\n    document.removeEventListener('pointerdown', this.onPointerDown, true);\n\n    for (let event of CANCELED_EVENTS) {\n      document.removeEventListener(event, this.cancelEvent, true);\n    }\n\n    this.mutationObserver?.disconnect();\n    this.restoreAriaHidden?.();\n  }\n\n  onKeyDown(e: KeyboardEvent): void {\n    this.cancelEvent(e);\n\n    if (e.key === 'Escape') {\n      this.cancel();\n      return;\n    }\n\n    if (e.key === 'Tab' && !(e.metaKey || e.altKey || e.ctrlKey)) {\n      if (e.shiftKey) {\n        this.previous();\n      } else {\n        this.next();\n      }\n    }\n\n    if (typeof this.currentDropTarget?.onKeyDown === 'function') {\n      this.currentDropTarget.onKeyDown(e, this.dragTarget);\n    }\n  }\n\n  onKeyUp(e: KeyboardEvent): void {\n    this.cancelEvent(e);\n\n    if (e.key === 'Enter') {\n      if (e.altKey || nodeContains(this.getCurrentActivateButton(), getEventTarget(e) as Node)) {\n        this.activate(this.currentDropTarget, this.currentDropItem);\n      } else {\n        this.drop();\n      }\n    }\n  }\n\n  getCurrentActivateButton(): FocusableElement | null {\n    return (\n      this.currentDropItem?.activateButtonRef?.current ??\n      this.currentDropTarget?.activateButtonRef?.current ??\n      null\n    );\n  }\n\n  onFocus(e: FocusEvent): void {\n    let activateButton = this.getCurrentActivateButton();\n    let eventTarget = getEventTarget(e);\n    if (eventTarget === activateButton) {\n      // TODO: canceling this breaks the focus ring. Revisit when we support tabbing.\n      this.cancelEvent(e);\n      return;\n    }\n\n    // Prevent focus events, except to the original drag target.\n    if (eventTarget !== this.dragTarget.element) {\n      this.cancelEvent(e);\n    }\n\n    // Ignore focus events on the window/document (JSDOM). Will be handled in onBlur, below.\n    if (!(eventTarget instanceof HTMLElement) || eventTarget === this.dragTarget.element) {\n      return;\n    }\n\n    let dropTarget =\n      this.validDropTargets.find(target => target.element === eventTarget) ||\n      this.validDropTargets.find(target => nodeContains(target.element, eventTarget));\n\n    if (!dropTarget) {\n      // if (e.target === activateButton) {\n      //   activateButton.focus();\n      // }\n      if (this.currentDropTarget) {\n        this.currentDropTarget.element.focus();\n      } else {\n        this.dragTarget.element.focus();\n      }\n      return;\n    }\n\n    let item = dropItems.get(eventTarget);\n    if (dropTarget) {\n      this.setCurrentDropTarget(dropTarget, item);\n    }\n  }\n\n  onBlur(e: FocusEvent): void {\n    let activateButton = this.getCurrentActivateButton();\n    if (e.relatedTarget === activateButton) {\n      this.cancelEvent(e);\n      return;\n    }\n\n    if (getEventTarget(e) !== this.dragTarget.element) {\n      this.cancelEvent(e);\n    }\n\n    // If nothing is gaining focus, or e.relatedTarget is the window/document (JSDOM),\n    // restore focus back to the current drop target if any, or the original drag target.\n    if (!e.relatedTarget || !(e.relatedTarget instanceof HTMLElement)) {\n      if (this.currentDropTarget) {\n        this.currentDropTarget.element.focus();\n      } else {\n        this.dragTarget.element.focus();\n      }\n    }\n  }\n\n  onClick(e: MouseEvent): void {\n    this.cancelEvent(e);\n    if (isVirtualClick(e) || this.isVirtualClick) {\n      let dropElements = dropItems.values();\n      let eventTarget = getEventTarget(e) as HTMLElement;\n      let item = [...dropElements].find(\n        item =>\n          item.element === eventTarget || nodeContains(item.activateButtonRef?.current, eventTarget)\n      );\n      let dropTarget = this.validDropTargets.find(target =>\n        nodeContains(target.element, eventTarget)\n      );\n      let activateButton =\n        item?.activateButtonRef?.current ?? dropTarget?.activateButtonRef?.current;\n      if (nodeContains(activateButton, eventTarget) && dropTarget) {\n        this.activate(dropTarget, item);\n        return;\n      }\n\n      if (getEventTarget(e) === this.dragTarget.element) {\n        this.cancel();\n        return;\n      }\n\n      if (dropTarget) {\n        this.setCurrentDropTarget(dropTarget, item);\n        this.drop(item);\n      }\n    }\n  }\n\n  onPointerDown(e: PointerEvent): void {\n    // Android Talkback double tap has e.detail = 1 for onClick. Detect the virtual click in onPointerDown before onClick fires\n    // so we can properly perform cancel and drop operations.\n    this.cancelEvent(e);\n    this.isVirtualClick = isVirtualPointerEvent(e);\n  }\n\n  cancelEvent(e: Event): void {\n    // Allow focusin and focusout on the drag target so focus ring works properly.\n    let eventTarget = getEventTarget(e);\n    if (\n      (e.type === 'focusin' || e.type === 'focusout') &&\n      (eventTarget === this.dragTarget?.element || eventTarget === this.getCurrentActivateButton())\n    ) {\n      return;\n    }\n\n    // Allow default for events that might cancel a click event\n    if (!CLICK_EVENTS.includes(e.type)) {\n      e.preventDefault();\n    }\n\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  }\n\n  updateValidDropTargets(): void {\n    if (!this.mutationObserver) {\n      return;\n    }\n\n    this.mutationObserver.disconnect();\n    if (this.restoreAriaHidden) {\n      this.restoreAriaHidden();\n    }\n\n    this.validDropTargets = findValidDropTargets(this.dragTarget);\n\n    // Shuffle drop target order based on starting drag target.\n    if (this.validDropTargets.length > 0) {\n      let nearestIndex = this.findNearestDropTarget();\n      this.validDropTargets = [\n        ...this.validDropTargets.slice(nearestIndex),\n        ...this.validDropTargets.slice(0, nearestIndex)\n      ];\n    }\n\n    if (this.currentDropTarget && !this.validDropTargets.includes(this.currentDropTarget)) {\n      this.setCurrentDropTarget(this.validDropTargets[0]);\n    }\n\n    // Find valid drop items within collections\n    let types = getTypes(this.dragTarget.items);\n    let validDropItems = [...dropItems.values()].filter(item => {\n      if (typeof item.getDropOperation === 'function') {\n        return item.getDropOperation(types, this.dragTarget.allowedDropOperations) !== 'cancel';\n      }\n\n      return true;\n    });\n\n    // Filter out drop targets that contain valid items. We don't want to stop hiding elements\n    // other than the drop items that exist inside the collection.\n    let visibleDropTargets = this.validDropTargets.filter(\n      target => !validDropItems.some(item => nodeContains(target.element, item.element))\n    );\n\n    this.restoreAriaHidden = ariaHideOutside(\n      [\n        this.dragTarget.element,\n        ...validDropItems.flatMap(item =>\n          item.activateButtonRef?.current\n            ? [item.element, item.activateButtonRef?.current]\n            : [item.element]\n        ),\n        ...visibleDropTargets.flatMap(target =>\n          target.activateButtonRef?.current\n            ? [target.element, target.activateButtonRef?.current]\n            : [target.element]\n        )\n      ],\n      {shouldUseInert: true}\n    );\n\n    this.mutationObserver.observe(document.body, {\n      subtree: true,\n      attributes: true,\n      attributeFilter: ['aria-hidden', 'inert']\n    });\n  }\n\n  next(): void {\n    // TODO: Allow tabbing to the activate button. Revisit once we fix the focus ring.\n    // For now, the activate button is reachable by screen readers and ArrowLeft/ArrowRight\n    // is usable specifically by Tree. Will need tabbing for other components.\n    // let activateButton = this.getCurrentActivateButton();\n    // if (activateButton && document.activeElement !== activateButton) {\n    //   activateButton.focus();\n    //   return;\n    // }\n\n    if (!this.currentDropTarget) {\n      this.setCurrentDropTarget(this.validDropTargets[0]);\n      return;\n    }\n\n    let index = this.validDropTargets.indexOf(this.currentDropTarget);\n    if (index < 0) {\n      this.setCurrentDropTarget(this.validDropTargets[0]);\n      return;\n    }\n\n    // If we've reached the end of the valid drop targets, cycle back to the original drag target.\n    // This lets the user cancel the drag in case they don't have an Escape key (e.g. iPad keyboard case).\n    if (index === this.validDropTargets.length - 1) {\n      if (!this.dragTarget.element.closest('[aria-hidden=\"true\"], [inert]')) {\n        this.setCurrentDropTarget(null);\n        this.dragTarget.element.focus();\n      } else {\n        this.setCurrentDropTarget(this.validDropTargets[0]);\n      }\n    } else {\n      this.setCurrentDropTarget(this.validDropTargets[index + 1]);\n    }\n  }\n\n  previous(): void {\n    // let activateButton = this.getCurrentActivateButton();\n    // if (activateButton && document.activeElement === activateButton) {\n    //   let target = this.currentDropItem ?? this.currentDropTarget;\n    //   if (target) {\n    //     target.element.focus();\n    //     return;\n    //   }\n    // }\n\n    if (!this.currentDropTarget) {\n      this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);\n      return;\n    }\n\n    let index = this.validDropTargets.indexOf(this.currentDropTarget);\n    if (index < 0) {\n      this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);\n      return;\n    }\n\n    // If we've reached the start of the valid drop targets, cycle back to the original drag target.\n    // This lets the user cancel the drag in case they don't have an Escape key (e.g. iPad keyboard case).\n    if (index === 0) {\n      if (!this.dragTarget.element.closest('[aria-hidden=\"true\"], [inert]')) {\n        this.setCurrentDropTarget(null);\n        this.dragTarget.element.focus();\n      } else {\n        this.setCurrentDropTarget(this.validDropTargets[this.validDropTargets.length - 1]);\n      }\n    } else {\n      this.setCurrentDropTarget(this.validDropTargets[index - 1]);\n    }\n  }\n\n  findNearestDropTarget(): number {\n    let dragTargetRect = this.dragTarget.element.getBoundingClientRect();\n\n    let minDistance = Infinity;\n    let nearest = -1;\n    for (let i = 0; i < this.validDropTargets.length; i++) {\n      let dropTarget = this.validDropTargets[i];\n      let rect = dropTarget.element.getBoundingClientRect();\n      let dx = rect.left - dragTargetRect.left;\n      let dy = rect.top - dragTargetRect.top;\n      let dist = dx * dx + dy * dy;\n      if (dist < minDistance) {\n        minDistance = dist;\n        nearest = i;\n      }\n    }\n\n    return nearest;\n  }\n\n  setCurrentDropTarget(dropTarget: DropTarget | null, item?: DroppableItem): void {\n    if (dropTarget !== this.currentDropTarget) {\n      if (this.currentDropTarget && typeof this.currentDropTarget.onDropExit === 'function') {\n        let rect = this.currentDropTarget.element.getBoundingClientRect();\n        this.currentDropTarget.onDropExit({\n          type: 'dropexit',\n          x: rect.left + rect.width / 2,\n          y: rect.top + rect.height / 2\n        });\n      }\n\n      this.currentDropTarget = dropTarget;\n\n      if (dropTarget) {\n        if (typeof dropTarget.onDropEnter === 'function') {\n          let rect = dropTarget.element.getBoundingClientRect();\n          dropTarget.onDropEnter(\n            {\n              type: 'dropenter',\n              x: rect.left + rect.width / 2,\n              y: rect.top + rect.height / 2\n            },\n            this.dragTarget\n          );\n        }\n\n        if (!item) {\n          dropTarget?.element.focus();\n        }\n      }\n    }\n\n    if (item != null && item !== this.currentDropItem) {\n      if (\n        this.currentDropTarget &&\n        typeof this.currentDropTarget.onDropTargetEnter === 'function'\n      ) {\n        this.currentDropTarget.onDropTargetEnter(item.target);\n      }\n      item.element.focus();\n      this.currentDropItem = item;\n\n      // Announce first drop target after drag start announcement finishes.\n      // Otherwise, it will never get announced because drag start announcement is assertive.\n      if (!this.initialFocused) {\n        let label = item?.element.getAttribute('aria-label');\n        if (label) {\n          announce(label, 'polite');\n        }\n        this.initialFocused = true;\n      }\n    }\n  }\n\n  end(): void {\n    this.teardown();\n    endDragging();\n\n    if (typeof this.dragTarget.onDragEnd === 'function') {\n      let target =\n        this.currentDropTarget && this.dropOperation !== 'cancel'\n          ? this.currentDropTarget\n          : this.dragTarget;\n      let rect = target.element.getBoundingClientRect();\n      this.dragTarget.onDragEnd({\n        type: 'dragend',\n        x: rect.x + rect.width / 2,\n        y: rect.y + rect.height / 2,\n        dropOperation: this.dropOperation || 'cancel'\n      });\n    }\n\n    if (this.currentDropTarget && !this.currentDropTarget.preventFocusOnDrop) {\n      // Re-trigger focus event on active element, since it will not have received it during dragging (see cancelEvent).\n      // This corrects state such as whether focus ring should appear.\n      // useDroppableCollection handles this itself, so this is only for standalone drop zones.\n      getActiveElement()?.dispatchEvent(new FocusEvent('focusin', {bubbles: true}));\n    }\n\n    this.setCurrentDropTarget(null);\n  }\n\n  cancel(): void {\n    this.setCurrentDropTarget(null);\n    this.end();\n    if (!this.dragTarget.element.closest('[aria-hidden=\"true\"], [inert]')) {\n      this.dragTarget.element.focus();\n    }\n\n    // Re-trigger focus event on active element, since it will not have received it during dragging (see cancelEvent).\n    getActiveElement()?.dispatchEvent(new FocusEvent('focusin', {bubbles: true}));\n\n    announce(this.stringFormatter.format('dropCanceled'));\n  }\n\n  drop(item?: DroppableItem): void {\n    if (!this.currentDropTarget) {\n      this.cancel();\n      return;\n    }\n\n    if (typeof item?.getDropOperation === 'function') {\n      let types = getTypes(this.dragTarget.items);\n      this.dropOperation = item.getDropOperation(types, this.dragTarget.allowedDropOperations);\n    } else if (typeof this.currentDropTarget.getDropOperation === 'function') {\n      let types = getTypes(this.dragTarget.items);\n      this.dropOperation = this.currentDropTarget.getDropOperation(\n        types,\n        this.dragTarget.allowedDropOperations\n      );\n    } else {\n      // TODO: show menu ??\n      this.dropOperation = this.dragTarget.allowedDropOperations[0];\n    }\n\n    if (typeof this.currentDropTarget.onDrop === 'function') {\n      let items: DropItem[] = this.dragTarget.items.map(item => ({\n        kind: 'text',\n        types: new Set(Object.keys(item)),\n        getText: (type: string) => Promise.resolve(item[type])\n      }));\n\n      let rect = this.currentDropTarget.element.getBoundingClientRect();\n      this.currentDropTarget.onDrop(\n        {\n          type: 'drop',\n          x: rect.left + rect.width / 2,\n          y: rect.top + rect.height / 2,\n          items,\n          dropOperation: this.dropOperation\n        },\n        item?.target ?? null\n      );\n    }\n\n    this.end();\n    announce(this.stringFormatter.format('dropComplete'));\n  }\n\n  activate(dropTarget: DropTarget | null, dropItem: DroppableItem | null | undefined): void {\n    if (dropTarget && typeof dropTarget.onDropActivate === 'function') {\n      let target = dropItem?.target ?? null;\n      let rect = dropTarget.element.getBoundingClientRect();\n      dropTarget.onDropActivate(\n        {\n          type: 'dropactivate',\n          x: rect.left + rect.width / 2,\n          y: rect.top + rect.height / 2\n        },\n        target\n      );\n    }\n  }\n}\n\nfunction findValidDropTargets(options: DragTarget) {\n  let types = getTypes(options.items);\n  return [...dropTargets.values()].filter(target => {\n    if (target.element.closest('[aria-hidden=\"true\"], [inert]')) {\n      return false;\n    }\n\n    if (typeof target.getDropOperation === 'function') {\n      return target.getDropOperation(types, options.allowedDropOperations) !== 'cancel';\n    }\n\n    return true;\n  });\n}\n"],"names":[],"version":3,"file":"DragManager.cjs.map"}