{"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 {DragEndEvent, DragItem, DropActivateEvent, DropEnterEvent, DropEvent, DropExitEvent, DropItem, DropOperation, DropTarget as DroppableCollectionTarget, FocusableElement} 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 = [\n  'pointerup',\n  'mouseup',\n  'touchend'\n];\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(() =>\n      this.updateValidDropTargets()\n    );\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 this.currentDropItem?.activateButtonRef?.current ?? this.currentDropTarget?.activateButtonRef?.current ?? null;\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(item => item.element === eventTarget || nodeContains(item.activateButtonRef?.current, eventTarget));\n      let dropTarget = this.validDropTargets.find(target => nodeContains(target.element, eventTarget));\n      let activateButton = 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 ((e.type === 'focusin' || e.type === 'focusout') && (eventTarget === this.dragTarget?.element || eventTarget === this.getCurrentActivateButton())) {\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(target =>\n      !validDropItems.some(item => nodeContains(target.element, item.element))\n    );\n\n    this.restoreAriaHidden = ariaHideOutside([\n      this.dragTarget.element,\n      ...validDropItems.flatMap(item => item.activateButtonRef?.current ? [item.element, item.activateButtonRef?.current] : [item.element]),\n      ...visibleDropTargets.flatMap(target => target.activateButtonRef?.current ? [target.element, target.activateButtonRef?.current] : [target.element])\n    ], {shouldUseInert: true});\n\n    this.mutationObserver.observe(document.body, {subtree: true, attributes: true, attributeFilter: ['aria-hidden', 'inert']});\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            type: 'dropenter',\n            x: rect.left + (rect.width / 2),\n            y: rect.top + (rect.height / 2)\n          }, this.dragTarget);\n        }\n\n        if (!item) {\n          dropTarget?.element.focus();\n        }\n      }\n    }\n\n    if (item != null && item !== this.currentDropItem) {\n      if (this.currentDropTarget && typeof this.currentDropTarget.onDropTargetEnter === 'function') {\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 = this.currentDropTarget && this.dropOperation !== 'cancel' ? this.currentDropTarget : 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(types, this.dragTarget.allowedDropOperations);\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        type: 'drop',\n        x: rect.left + (rect.width / 2),\n        y: rect.top + (rect.height / 2),\n        items,\n        dropOperation: this.dropOperation\n      }, item?.target ?? null);\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        type: 'dropactivate',\n        x: rect.left + (rect.width / 2),\n        y: rect.top + (rect.height / 2)\n      }, target);\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"}