{"mappings":"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","sources":["packages/react-aria/src/dnd/useDroppableCollection.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 {\n  clearGlobalDnDState,\n  DIRECTORY_DRAG_TYPE,\n  droppableCollectionMap,\n  getTypes,\n  globalDndState,\n  isInternalDropOperation,\n  setDropCollectionRef\n} from './utils';\nimport {\n  Collection,\n  DropEvent,\n  DropOperation,\n  DroppableCollectionDropEvent,\n  DroppableCollectionProps,\n  DropPosition,\n  DropTarget,\n  DropTargetDelegate,\n  Key,\n  KeyboardDelegate,\n  Node,\n  RefObject\n} from '@react-types/shared';\nimport * as DragManager from './DragManager';\nimport {DroppableCollectionState} from 'react-stately/useDroppableCollectionState';\nimport {HTMLAttributes, useCallback, useEffect, useRef} from 'react';\nimport {mergeProps} from '../utils/mergeProps';\nimport {navigate} from './DropTargetKeyboardNavigation';\nimport {setInteractionModality} from '../interactions/useFocusVisible';\nimport {useAutoScroll} from './useAutoScroll';\nimport {useDrop} from './useDrop';\nimport {useId} from '../utils/useId';\nimport {useLayoutEffect} from '../utils/useLayoutEffect';\nimport {useLocale} from '../i18n/I18nProvider';\n\nexport interface DroppableCollectionOptions extends DroppableCollectionProps {\n  /** A delegate object that implements behavior for keyboard focus movement. */\n  keyboardDelegate: KeyboardDelegate,\n  /** A delegate object that provides drop targets for pointer coordinates within the collection. */\n  dropTargetDelegate: DropTargetDelegate,\n  /** A custom keyboard event handler for drop targets. */\n  onKeyDown?: (e: KeyboardEvent) => void\n}\n\nexport interface DroppableCollectionResult {\n  /** Props for the collection element. */\n  collectionProps: HTMLAttributes<HTMLElement>\n}\n\ninterface DroppingState {\n  collection: Collection<Node<unknown>>,\n  focusedKey: Key | null,\n  selectedKeys: Set<Key>,\n  target: DropTarget,\n  draggingKeys: Set<Key | null | undefined>,\n  isInternal: boolean,\n  timeout: ReturnType<typeof setTimeout> | undefined\n}\n\n/**\n * Handles drop interactions for a collection component, with support for traditional mouse and touch\n * based drag and drop, in addition to full parity for keyboard and screen reader users.\n */\nexport function useDroppableCollection(props: DroppableCollectionOptions, state: DroppableCollectionState, ref: RefObject<HTMLElement | null>): DroppableCollectionResult {\n  let localState = useRef<{\n    props: DroppableCollectionOptions,\n    state: DroppableCollectionState,\n    nextTarget: DropTarget | null,\n    dropOperation: DropOperation | null\n  }>({\n    props,\n    state,\n    nextTarget: null,\n    dropOperation: null\n  }).current;\n  localState.props = props;\n  localState.state = state;\n\n  let defaultOnDrop = useCallback(async (e: DroppableCollectionDropEvent) => {\n    let {\n      onInsert,\n      onRootDrop,\n      onItemDrop,\n      onReorder,\n      onMove,\n      acceptedDragTypes = 'all',\n      shouldAcceptItemDrop\n    } = localState.props;\n\n    let {draggingKeys} = globalDndState;\n    let isInternal = isInternalDropOperation(ref);\n    let {\n      target,\n      dropOperation,\n      items\n    } = e;\n\n    let filteredItems = items;\n    if (acceptedDragTypes !== 'all' || shouldAcceptItemDrop) {\n      filteredItems = items.filter(item => {\n        let itemTypes: Set<string | symbol>;\n        if (item.kind === 'directory') {\n          itemTypes = new Set([DIRECTORY_DRAG_TYPE]);\n        } else {\n          itemTypes = item.kind === 'file' ? new Set([item.type]) : item.types;\n        }\n\n        if (acceptedDragTypes === 'all' || acceptedDragTypes.some(type => itemTypes.has(type))) {\n          // If we are performing a on item drop, check if the item in question accepts the dropped item since the item may have heavier restrictions\n          // than the droppable collection itself\n          if (target.type === 'item' && target.dropPosition === 'on' && shouldAcceptItemDrop) {\n            return shouldAcceptItemDrop(target, itemTypes);\n          }\n          return true;\n        }\n\n        return false;\n      });\n    }\n\n    if (filteredItems.length > 0) {\n      if (target.type === 'root' && onRootDrop) {\n        await onRootDrop({items: filteredItems, dropOperation});\n      }\n\n      if (target.type === 'item') {\n        if (target.dropPosition === 'on' && onItemDrop) {\n          await onItemDrop({items: filteredItems, dropOperation, isInternal, target});\n        }\n\n        if (onMove && isInternal) {\n          await onMove({keys: draggingKeys, dropOperation, target});\n        }\n\n        if (target.dropPosition !== 'on') {\n          if (!isInternal && onInsert) {\n            await onInsert({items: filteredItems, dropOperation, target});\n          }\n\n          if (isInternal && onReorder) {\n            await onReorder({keys: draggingKeys, dropOperation, target});\n          }\n        }\n      }\n    }\n  }, [localState, ref]);\n\n  let autoScroll = useAutoScroll(ref);\n  let {dropProps} = useDrop({\n    ref,\n    onDropEnter() {\n      if (localState.nextTarget != null) {\n        state.setTarget(localState.nextTarget);\n      }\n    },\n    onDropMove(e) {\n      if (localState.nextTarget != null) {\n        state.setTarget(localState.nextTarget);\n      }\n      autoScroll.move(e.x, e.y);\n    },\n    getDropOperationForPoint(types, allowedOperations, x, y) {\n      let {draggingKeys, dropCollectionRef} = globalDndState;\n      let isInternal = isInternalDropOperation(ref);\n      let isValidDropTarget = (target) => state.getDropOperation({target, types, allowedOperations, isInternal, draggingKeys}) !== 'cancel';\n      let target = props.dropTargetDelegate.getDropTargetFromPoint(x, y, isValidDropTarget);\n      if (!target) {\n        localState.dropOperation = 'cancel';\n        localState.nextTarget = null;\n        return 'cancel';\n      }\n\n      localState.dropOperation = state.getDropOperation({target, types, allowedOperations, isInternal, draggingKeys});\n\n      // If the target doesn't accept the drop, see if the root accepts it instead.\n      if (localState.dropOperation === 'cancel') {\n        let rootTarget: DropTarget = {type: 'root'};\n        let dropOperation = state.getDropOperation({target: rootTarget, types, allowedOperations, isInternal, draggingKeys});\n        if (dropOperation !== 'cancel') {\n          target = rootTarget;\n          localState.dropOperation = dropOperation;\n        }\n      }\n\n      // Only set dropCollectionRef if there is a valid drop target since we cleanup dropCollectionRef in onDropExit\n      // which only runs when leaving a valid drop target or if the dropEffect become none (mouse dnd only).\n      if (target && localState.dropOperation !== 'cancel' && ref?.current !== dropCollectionRef?.current) {\n        setDropCollectionRef(ref);\n      }\n      localState.nextTarget = localState.dropOperation === 'cancel' ? null : target;\n      return localState.dropOperation;\n    },\n    onDropExit() {\n      setDropCollectionRef(undefined);\n      state.setTarget(null);\n      autoScroll.stop();\n    },\n    onDropActivate(e) {\n      if (state.target?.type === 'item' && typeof props.onDropActivate === 'function') {\n        props.onDropActivate({\n          type: 'dropactivate',\n          x: e.x, // todo\n          y: e.y,\n          target: state.target\n        });\n      }\n    },\n    onDrop(e) {\n      setDropCollectionRef(ref);\n      if (state.target) {\n        onDrop(e, state.target);\n      }\n\n      // If there wasn't a collection being tracked as a dragged collection, then we are in a case where a non RSP drag is dropped on a\n      // RSP collection and thus we don't need to preserve the global DnD state for onDragEnd\n      let {draggingCollectionRef} = globalDndState;\n      if (draggingCollectionRef == null) {\n        clearGlobalDnDState();\n      }\n    }\n  });\n\n  let droppingState = useRef<DroppingState>(null);\n  let updateFocusAfterDrop = useCallback(() => {\n    let {state} = localState;\n    if (droppingState.current) {\n      let {\n        target,\n        collection: prevCollection,\n        selectedKeys: prevSelectedKeys,\n        focusedKey: prevFocusedKey,\n        isInternal,\n        draggingKeys\n      } = droppingState.current;\n\n      // If an insert occurs during a drop, we want to immediately select these items to give\n      // feedback to the user that a drop occurred. Only do this if the selection didn't change\n      // since the drop started so we don't override if the user or application did something.\n      if (\n        state.collection.size > prevCollection.size &&\n        state.selectionManager.isSelectionEqual(prevSelectedKeys)\n      ) {\n        let newKeys = new Set<Key>();\n        let key = state.collection.getFirstKey();\n        while (key != null) {\n          let item = state.collection.getItem(key);\n          if (item?.type === 'item' && !prevCollection.getItem(item.key)) {\n            newKeys.add(item.key);\n          }\n\n          if (item?.hasChildNodes && state.collection.getItem(item.lastChildKey!)?.type === 'item') {\n            key = item.firstChildKey!;\n          } else {\n            key = state.collection.getKeyAfter(key);\n          }\n        }\n\n        state.selectionManager.setSelectedKeys(newKeys);\n\n        // If the focused item didn't change since the drop occurred, also focus the first\n        // inserted item. If selection is disabled, then also show the focus ring so there\n        // is some indication that items were added.\n        if (state.selectionManager.focusedKey === prevFocusedKey) {\n          let first: Key | null | undefined = newKeys.keys().next().value;\n          if (first != null) {\n            let item = state.collection.getItem(first);\n            let dropTarget = droppingState.current.target;\n            let isParentRowExpanded = state.collection['expandedKeys'] ? state.collection['expandedKeys'].has(item?.parentKey) : false;\n            // If this is a cell, focus the parent row.\n            // eslint-disable-next-line max-depth\n            if (item && (item?.type === 'cell' || (dropTarget.type === 'item' && dropTarget.dropPosition === 'on' && !isParentRowExpanded))) {\n              first = item.parentKey;\n            }\n\n            // eslint-disable-next-line max-depth\n            if (first != null) {\n              state.selectionManager.setFocusedKey(first);\n            }\n\n            // eslint-disable-next-line max-depth\n            if (state.selectionManager.selectionMode === 'none') {\n              setInteractionModality('keyboard');\n            }\n          }\n        }\n      } else if (\n        prevFocusedKey != null &&\n        state.selectionManager.focusedKey === prevFocusedKey &&\n        isInternal &&\n        target.type === 'item' &&\n        target.dropPosition !== 'on' &&\n        draggingKeys.has(state.collection.getItem(prevFocusedKey)?.parentKey)\n      ) {\n        // Focus row instead of cell when reordering.\n        state.selectionManager.setFocusedKey(state.collection.getItem(prevFocusedKey)?.parentKey ?? null);\n        setInteractionModality('keyboard');\n      } else if (\n        state.selectionManager.focusedKey === prevFocusedKey &&\n        target.type === 'item' &&\n        target.dropPosition === 'on' &&\n        state.collection.getItem(target.key) != null\n      ) {\n        // If focus didn't move already (e.g. due to an insert), and the user dropped on an item,\n        // focus that item and show the focus ring to give the user feedback that the drop occurred.\n        // Also show the focus ring if the focused key is not selected, e.g. in case of a reorder.\n        state.selectionManager.setFocusedKey(target.key);\n        setInteractionModality('keyboard');\n      } else if (state.selectionManager.focusedKey != null && !state.selectionManager.isSelected(state.selectionManager.focusedKey)) {\n        setInteractionModality('keyboard');\n      }\n\n      state.selectionManager.setFocused(true);\n    }\n  }, [localState]);\n\n  let onDrop = useCallback((e: DropEvent, target: DropTarget) => {\n    let {state} = localState;\n\n    // Save some state of the collection/selection before the drop occurs so we can compare later.\n    droppingState.current = {\n      timeout: undefined,\n      focusedKey: state.selectionManager.focusedKey,\n      collection: state.collection,\n      selectedKeys: state.selectionManager.selectedKeys,\n      draggingKeys: globalDndState.draggingKeys,\n      isInternal: isInternalDropOperation(ref),\n      target\n    };\n\n    let onDropFn = localState.props.onDrop || defaultOnDrop;\n    onDropFn({\n      type: 'drop',\n      x: e.x, // todo\n      y: e.y,\n      target,\n      items: e.items,\n      dropOperation: e.dropOperation\n    });\n\n    // Wait for a short time period after the onDrop is called to allow the data to be read asynchronously\n    // and for React to re-render. If the collection didn't already change during this time (handled below),\n    // update the focused key here.\n    droppingState.current.timeout = setTimeout(() => {\n      updateFocusAfterDrop();\n      droppingState.current = null;\n    }, 50);\n  }, [localState, defaultOnDrop, ref, updateFocusAfterDrop]);\n\n\n  useEffect(() => {\n    return () => {\n      if (droppingState.current) {\n        clearTimeout(droppingState.current.timeout);\n      }\n    };\n  }, []);\n\n  useLayoutEffect(() => {\n    // If the collection changed after a drop, update the focused key.\n    if (droppingState.current && state.collection !== droppingState.current.collection) {\n      updateFocusAfterDrop();\n    }\n  });\n\n  let {direction} = useLocale();\n  useEffect(() => {\n    if (!ref.current) {\n      return;\n    }\n\n    let getNextTarget = (target: DropTarget | null | undefined, wrap = true, key: 'left' | 'right' | 'up' | 'down' = 'down') => {\n      return navigate(localState.props.keyboardDelegate, localState.state.collection, target, key, direction === 'rtl', wrap);\n    };\n\n    let getPreviousTarget = (target: DropTarget | null | undefined, wrap = true) => {\n      return getNextTarget(target, wrap, 'up');\n    };\n\n    let nextValidTarget = (\n      target: DropTarget | null | undefined,\n      types: Set<string>,\n      allowedDropOperations: DropOperation[],\n      getNextTarget: (target: DropTarget | null | undefined, wrap: boolean) => DropTarget | null,\n      wrap = true\n    ): DropTarget | null => {\n      let seenRoot = 0;\n      let operation: DropOperation;\n      let {draggingKeys} = globalDndState;\n      let isInternal = isInternalDropOperation(ref);\n      do {\n        let nextTarget = getNextTarget(target, wrap);\n        if (!nextTarget) {\n          return null;\n        }\n        target = nextTarget;\n        operation = localState.state.getDropOperation({target: nextTarget, types, allowedOperations: allowedDropOperations, isInternal, draggingKeys});\n        if (target.type === 'root') {\n          seenRoot++;\n        }\n      } while (\n        operation === 'cancel' &&\n        !localState.state.isDropTarget(target) &&\n        seenRoot < 2\n      );\n\n      if (operation === 'cancel') {\n        return null;\n      }\n\n      return target;\n    };\n\n    return DragManager.registerDropTarget({\n      element: ref.current,\n      preventFocusOnDrop: true,\n      getDropOperation(types, allowedOperations) {\n        if (localState.state.target) {\n          let {draggingKeys} = globalDndState;\n          let isInternal = isInternalDropOperation(ref);\n          return localState.state.getDropOperation({target: localState.state.target, types, allowedOperations, isInternal, draggingKeys});\n        }\n\n        // Check if any of the targets accept the drop.\n        // TODO: should we have a faster way of doing this or e.g. for pagination?\n        let target = nextValidTarget(null, types, allowedOperations, getNextTarget);\n        return target ? 'move' : 'cancel';\n      },\n      onDropEnter(e, drag) {\n        let types = getTypes(drag.items);\n        let selectionManager = localState.state.selectionManager;\n        let target: DropTarget | null = null;\n        // Update the drop collection ref tracker for useDroppableItem's getDropOperation isInternal check\n        setDropCollectionRef(ref);\n\n        // When entering the droppable collection for the first time, the default drop target\n        // is after the focused key.\n        let key: Key | null | undefined = selectionManager.focusedKey;\n        let dropPosition: DropPosition = 'after';\n\n        // If the focused key is a cell, get the parent item instead.\n        // For now, we assume that individual cells cannot be dropped on.\n        let item = key != null ? localState.state.collection.getItem(key) : null;\n        if (item?.type === 'cell') {\n          key = item.parentKey;\n        }\n\n        // If the focused item is also selected, the default drop target is after the last selected item.\n        // But if the focused key is the first selected item, then default to before the first selected item.\n        // This is to make reordering lists slightly easier. If you select top down, we assume you want to\n        // move the items down. If you select bottom up, we assume you want to move the items up.\n        if (key != null && selectionManager.isSelected(key)) {\n          if (selectionManager.selectedKeys.size > 1 && selectionManager.firstSelectedKey === key) {\n            dropPosition = 'before';\n          } else {\n            key = selectionManager.lastSelectedKey;\n          }\n        }\n\n        if (key != null) {\n          target = {\n            type: 'item',\n            key,\n            dropPosition\n          };\n\n          let {draggingKeys} = globalDndState;\n          let isInternal = isInternalDropOperation(ref);\n          // If the default target is not valid, find the next one that is.\n          if (localState.state.getDropOperation({target, types, allowedOperations: drag.allowedDropOperations, isInternal, draggingKeys}) === 'cancel') {\n            target = nextValidTarget(target, types, drag.allowedDropOperations, getNextTarget, false)\n              ?? nextValidTarget(target, types, drag.allowedDropOperations, getPreviousTarget, false);\n          }\n        }\n\n        // If no focused key, then start from the root.\n        if (!target) {\n          target = nextValidTarget(null, types, drag.allowedDropOperations, getNextTarget);\n        }\n\n        localState.state.setTarget(target);\n      },\n      onDropExit() {\n        setDropCollectionRef(undefined);\n        localState.state.setTarget(null);\n      },\n      onDropTargetEnter(target) {\n        localState.state.setTarget(target);\n      },\n      onDropActivate(e, target) {\n        if (\n          target?.type === 'item' &&\n          target?.dropPosition === 'on' &&\n          typeof localState.props.onDropActivate === 'function'\n        ) {\n          localState.props.onDropActivate({\n            type: 'dropactivate',\n            x: e.x, // todo\n            y: e.y,\n            target\n          });\n        }\n      },\n      onDrop(e, target) {\n        setDropCollectionRef(ref);\n        if (localState.state.target) {\n          onDrop(e, target || localState.state.target);\n        }\n      },\n      onKeyDown(e, drag) {\n        let {keyboardDelegate} = localState.props;\n        let types = getTypes(drag.items);\n        switch (e.key) {\n          case 'ArrowDown': {\n            if (keyboardDelegate.getKeyBelow) {\n              let target = nextValidTarget(localState.state.target, types, drag.allowedDropOperations, (target, wrap) => getNextTarget(target, wrap, 'down'));\n              localState.state.setTarget(target);\n            }\n            break;\n          }\n          case 'ArrowUp': {\n            if (keyboardDelegate.getKeyAbove) {\n              let target = nextValidTarget(localState.state.target, types, drag.allowedDropOperations, (target, wrap) => getNextTarget(target, wrap, 'up'));\n              localState.state.setTarget(target);\n            }\n            break;\n          }\n          case 'ArrowLeft': {\n            if (keyboardDelegate.getKeyLeftOf) {\n              let target = nextValidTarget(localState.state.target, types, drag.allowedDropOperations, (target, wrap) => getNextTarget(target, wrap, 'left'));\n              localState.state.setTarget(target);\n            }\n            break;\n          }\n          case 'ArrowRight': {\n            if (keyboardDelegate.getKeyRightOf) {\n              let target = nextValidTarget(localState.state.target, types, drag.allowedDropOperations, (target, wrap) => getNextTarget(target, wrap, 'right'));\n              localState.state.setTarget(target);\n            }\n            break;\n          }\n          case 'Home': {\n            if (keyboardDelegate.getFirstKey) {\n              let target = nextValidTarget(null, types, drag.allowedDropOperations, getNextTarget);\n              localState.state.setTarget(target);\n            }\n            break;\n          }\n          case 'End': {\n            if (keyboardDelegate.getLastKey) {\n              let target = nextValidTarget(null, types, drag.allowedDropOperations, getPreviousTarget);\n              localState.state.setTarget(target);\n            }\n            break;\n          }\n          case 'PageDown': {\n            if (keyboardDelegate.getKeyPageBelow) {\n              let target = localState.state.target;\n              if (!target) {\n                target = nextValidTarget(null, types, drag.allowedDropOperations, getNextTarget);\n              } else {\n                // If on the root, go to the item a page below the top. Otherwise a page below the current item.\n                let targetKey = keyboardDelegate.getFirstKey?.();\n                if (target.type === 'item') {\n                  targetKey = target.key;\n                }\n                let nextKey: Key | null = null;\n                if (targetKey != null) {\n                  nextKey = keyboardDelegate.getKeyPageBelow(targetKey);\n                }\n                let dropPosition = target.type === 'item' ? target.dropPosition : 'after';\n\n                // If there is no next key, or we are starting on the last key, jump to the last possible position.\n                if (nextKey == null || (target.type === 'item' && target.key === keyboardDelegate.getLastKey?.())) {\n                  nextKey = keyboardDelegate.getLastKey?.() ?? null;\n                  dropPosition = 'after';\n                }\n\n                if (nextKey == null) {\n                  break;\n                }\n                target = {\n                  type: 'item',\n                  key: nextKey,\n                  dropPosition\n                };\n\n                // If the target does not accept the drop, find the next valid target.\n                // If no next valid target, find the previous valid target.\n                let {draggingCollectionRef, draggingKeys} = globalDndState;\n                let isInternal = draggingCollectionRef?.current === ref?.current;\n                let operation = localState.state.getDropOperation({target, types, allowedOperations: drag.allowedDropOperations, isInternal, draggingKeys});\n                if (operation === 'cancel') {\n                  target = nextValidTarget(target, types, drag.allowedDropOperations, getNextTarget, false)\n                    ?? nextValidTarget(target, types, drag.allowedDropOperations, getPreviousTarget, false);\n                }\n              }\n\n              localState.state.setTarget(target ?? localState.state.target);\n            }\n            break;\n          }\n          case 'PageUp': {\n            if (!keyboardDelegate.getKeyPageAbove) {\n              break;\n            }\n\n            let target = localState.state.target;\n            if (!target) {\n              target = nextValidTarget(null, types, drag.allowedDropOperations, getPreviousTarget);\n            } else if (target.type === 'item') {\n              // If at the top already, switch to the root. Otherwise navigate a page up.\n              if (target.key === keyboardDelegate.getFirstKey?.()) {\n                target = {\n                  type: 'root'\n                };\n              } else {\n                let nextKey: Key | null | undefined = keyboardDelegate.getKeyPageAbove(target.key);\n                let dropPosition = target.dropPosition;\n                if (nextKey == null) {\n                  nextKey = keyboardDelegate.getFirstKey?.();\n                  dropPosition = 'before';\n                }\n\n                if (nextKey == null) {\n                  break;\n                }\n                target = {\n                  type: 'item',\n                  key: nextKey,\n                  dropPosition\n                };\n              }\n\n              // If the target does not accept the drop, find the previous valid target.\n              // If no next valid target, find the next valid target.\n              let {draggingKeys} = globalDndState;\n              let isInternal = isInternalDropOperation(ref);\n              let operation = localState.state.getDropOperation({target, types, allowedOperations: drag.allowedDropOperations, isInternal, draggingKeys});\n              if (operation === 'cancel') {\n                target = nextValidTarget(target, types, drag.allowedDropOperations, getPreviousTarget, false)\n                  ?? nextValidTarget(target, types, drag.allowedDropOperations, getNextTarget, false);\n              }\n            }\n\n            localState.state.setTarget(target ?? localState.state.target);\n            break;\n          }\n        }\n        localState.props.onKeyDown?.(e);\n      }\n    });\n  }, [localState, ref, onDrop, direction]);\n\n  let id = useId();\n  droppableCollectionMap.set(state, {id, ref});\n  return {\n    collectionProps: mergeProps(dropProps, {\n      id,\n      // Remove description from collection element. If dropping on the entire collection,\n      // there should be a drop indicator that has this description, so no need to double announce.\n      'aria-describedby': null\n    })\n  };\n}\n"],"names":[],"version":3,"file":"useDroppableCollection.cjs.map"}