UNPKG

react-aria

Version:
1 lines 14.5 kB
{"mappings":"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","sources":["packages/react-aria/src/dnd/DropTargetKeyboardNavigation.ts"],"sourcesContent":["import {Collection, DropTarget, Key, KeyboardDelegate, Node} from '@react-types/shared';\n\nexport function navigate(\n keyboardDelegate: KeyboardDelegate,\n collection: Collection<Node<unknown>>,\n target: DropTarget | null | undefined,\n direction: 'left' | 'right' | 'up' | 'down',\n rtl = false,\n wrap = false\n): DropTarget | null {\n switch (direction) {\n case 'left':\n return rtl\n ? nextDropTarget(keyboardDelegate, collection, target, wrap, 'left')\n : previousDropTarget(keyboardDelegate, collection, target, wrap, 'left');\n case 'right':\n return rtl\n ? previousDropTarget(keyboardDelegate, collection, target, wrap, 'right')\n : nextDropTarget(keyboardDelegate, collection, target, wrap, 'right');\n case 'up':\n return previousDropTarget(keyboardDelegate, collection, target, wrap);\n case 'down':\n return nextDropTarget(keyboardDelegate, collection, target, wrap);\n }\n}\n\nfunction nextDropTarget(\n keyboardDelegate: KeyboardDelegate,\n collection: Collection<Node<unknown>>,\n target: DropTarget | null | undefined,\n wrap = false,\n horizontal: 'left' | 'right' | null = null\n): DropTarget | null {\n if (!target) {\n return {\n type: 'root'\n };\n }\n\n if (target.type === 'root') {\n let nextKey = keyboardDelegate.getFirstKey?.() ?? null;\n if (nextKey != null) {\n return {\n type: 'item',\n key: nextKey,\n dropPosition: 'before'\n };\n }\n\n return null;\n }\n\n if (target.type === 'item') {\n let nextKey: Key | null | undefined = null;\n if (horizontal) {\n nextKey =\n horizontal === 'right'\n ? keyboardDelegate.getKeyRightOf?.(target.key, {includeDisabled: true})\n : keyboardDelegate.getKeyLeftOf?.(target.key, {includeDisabled: true});\n } else {\n nextKey = keyboardDelegate.getKeyBelow?.(target.key, {includeDisabled: true});\n }\n let nextCollectionKey = getNextItem(collection, target.key, key => collection.getKeyAfter(key));\n\n // If the keyboard delegate did not move to the next key in the collection,\n // jump to that key with the same drop position. Otherwise, try the other\n // drop positions on the current key first.\n if (nextKey != null && nextKey !== nextCollectionKey) {\n return {\n type: 'item',\n key: nextKey,\n dropPosition: target.dropPosition\n };\n }\n\n switch (target.dropPosition) {\n case 'before': {\n return {\n type: 'item',\n key: target.key,\n dropPosition: 'on'\n };\n }\n case 'on': {\n // If there are nested items, traverse to them prior to the \"after\" position of this target.\n // If the next key is on the same level, then its \"before\" position is equivalent to this item's \"after\" position.\n let targetNode = collection.getItem(target.key);\n let nextNode = nextKey != null ? collection.getItem(nextKey) : null;\n if (targetNode && nextNode && nextNode.level >= targetNode.level) {\n return {\n type: 'item',\n key: nextNode.key,\n dropPosition: 'before'\n };\n }\n\n return {\n type: 'item',\n key: target.key,\n dropPosition: 'after'\n };\n }\n case 'after': {\n // If this is the last sibling in a level, traverse to the parent.\n let targetNode = collection.getItem(target.key);\n let nextItemInSameLevel =\n targetNode?.nextKey != null ? collection.getItem(targetNode.nextKey) : null;\n while (nextItemInSameLevel != null && nextItemInSameLevel.type !== 'item') {\n nextItemInSameLevel =\n nextItemInSameLevel.nextKey != null\n ? collection.getItem(nextItemInSameLevel.nextKey)\n : null;\n }\n\n if (targetNode && nextItemInSameLevel == null && targetNode.parentKey != null) {\n // If the parent item has an item after it, use the \"before\" position.\n let parentNode = collection.getItem(targetNode.parentKey);\n const nextNode =\n parentNode?.nextKey != null ? collection.getItem(parentNode.nextKey) : null;\n if (nextNode?.type === 'item') {\n return {\n type: 'item',\n key: nextNode.key,\n dropPosition: 'before'\n };\n }\n\n if (parentNode?.type === 'item') {\n return {\n type: 'item',\n key: parentNode.key,\n dropPosition: 'after'\n };\n }\n }\n\n if (nextItemInSameLevel) {\n return {\n type: 'item',\n key: nextItemInSameLevel.key,\n dropPosition: 'on'\n };\n }\n }\n }\n }\n\n if (wrap) {\n return {\n type: 'root'\n };\n }\n\n return null;\n}\n\nfunction previousDropTarget(\n keyboardDelegate: KeyboardDelegate,\n collection: Collection<Node<unknown>>,\n target: DropTarget | null | undefined,\n wrap = false,\n horizontal: 'left' | 'right' | null = null\n): DropTarget | null {\n // Start after the last root-level item.\n if (!target || (wrap && target.type === 'root')) {\n // Keyboard delegate gets the deepest item but we want the shallowest.\n let prevKey: Key | null = null;\n let lastKey = keyboardDelegate.getLastKey?.();\n while (lastKey != null) {\n let node = collection.getItem(lastKey);\n if (node?.type !== 'item') {\n break;\n }\n prevKey = lastKey;\n lastKey = node?.parentKey;\n }\n\n if (prevKey != null) {\n return {\n type: 'item',\n key: prevKey,\n dropPosition: 'after'\n };\n }\n\n return null;\n }\n\n if (target.type === 'item') {\n let prevKey: Key | null | undefined = null;\n if (horizontal) {\n prevKey =\n horizontal === 'left'\n ? keyboardDelegate.getKeyLeftOf?.(target.key, {includeDisabled: true})\n : keyboardDelegate.getKeyRightOf?.(target.key, {includeDisabled: true});\n } else {\n prevKey = keyboardDelegate.getKeyAbove?.(target.key, {includeDisabled: true});\n }\n let prevCollectionKey = getNextItem(collection, target.key, key =>\n collection.getKeyBefore(key)\n );\n\n // If the keyboard delegate did not move to the next key in the collection,\n // jump to that key with the same drop position. Otherwise, try the other\n // drop positions on the current key first.\n if (prevKey != null && prevKey !== prevCollectionKey) {\n return {\n type: 'item',\n key: prevKey,\n dropPosition: target.dropPosition\n };\n }\n\n switch (target.dropPosition) {\n case 'before': {\n // Move after the last child of the previous item.\n let targetNode = collection.getItem(target.key);\n if (targetNode && targetNode.prevKey != null) {\n let lastChild = getLastChild(collection, targetNode.prevKey);\n if (lastChild) {\n return lastChild;\n }\n }\n\n if (prevKey != null) {\n return {\n type: 'item',\n key: prevKey,\n dropPosition: 'on'\n };\n }\n\n return {\n type: 'root'\n };\n }\n case 'on': {\n return {\n type: 'item',\n key: target.key,\n dropPosition: 'before'\n };\n }\n case 'after': {\n // Move after the last child of this item.\n let lastChild = getLastChild(collection, target.key);\n if (lastChild) {\n return lastChild;\n }\n\n return {\n type: 'item',\n key: target.key,\n dropPosition: 'on'\n };\n }\n }\n }\n\n if (target.type !== 'root') {\n return {\n type: 'root'\n };\n }\n\n return null;\n}\n\nfunction getLastChild(collection: Collection<Node<unknown>>, key: Key): DropTarget | null {\n // getChildNodes still returns child tree items even when the item is collapsed.\n // Checking if the next item has a greater level is a silly way to determine if the item is expanded.\n let targetNode = collection.getItem(key);\n let nextKey = getNextItem(collection, key, key => collection.getKeyAfter(key));\n let nextNode = nextKey != null ? collection.getItem(nextKey) : null;\n if (targetNode && nextNode && nextNode.level > targetNode.level) {\n let lastChild: Node<unknown> | null = null;\n if ('lastChildKey' in targetNode) {\n lastChild =\n targetNode.lastChildKey != null ? collection.getItem(targetNode.lastChildKey) : null;\n while (lastChild && lastChild.type !== 'item' && lastChild.prevKey != null) {\n lastChild = collection.getItem(lastChild.prevKey)!;\n }\n } else {\n lastChild = Array.from(targetNode.childNodes).findLast(item => item.type === 'item') || null;\n }\n\n if (lastChild) {\n return {\n type: 'item',\n key: lastChild.key,\n dropPosition: 'after'\n };\n }\n }\n\n return null;\n}\n\n// Find the next or previous item in a collection, skipping over other types of nodes (e.g. content).\nfunction getNextItem(\n collection: Collection<Node<unknown>>,\n key: Key,\n getNextKey: (key: Key) => Key | null\n): Key | null {\n let nextCollectionKey = getNextKey(key);\n let nextCollectionNode = nextCollectionKey != null ? collection.getItem(nextCollectionKey) : null;\n while (nextCollectionNode && nextCollectionNode.type !== 'item') {\n nextCollectionKey = getNextKey(nextCollectionNode.key);\n nextCollectionNode = nextCollectionKey != null ? collection.getItem(nextCollectionKey) : null;\n }\n return nextCollectionKey;\n}\n"],"names":[],"version":3,"file":"DropTargetKeyboardNavigation.cjs.map"}