@react-aria/dnd 3.0.0-alpha.3 → 3.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["./node_modules/@parcel/scope-hoisting/lib/helpers.js","./packages/@react-aria/dnd/src/constants.ts","./packages/@react-aria/dnd/src/utils.ts","./packages/@react-aria/dnd/src/DragManager.ts","./packages/@react-aria/dnd/intl/ar-AE.json","./packages/@react-aria/dnd/intl/bg-BG.json","./packages/@react-aria/dnd/intl/cs-CZ.json","./packages/@react-aria/dnd/intl/da-DK.json","./packages/@react-aria/dnd/intl/de-DE.json","./packages/@react-aria/dnd/intl/el-GR.json","./packages/@react-aria/dnd/intl/en-US.json","./packages/@react-aria/dnd/intl/es-ES.json","./packages/@react-aria/dnd/intl/et-EE.json","./packages/@react-aria/dnd/intl/fi-FI.json","./packages/@react-aria/dnd/intl/fr-FR.json","./packages/@react-aria/dnd/intl/he-IL.json","./packages/@react-aria/dnd/intl/hr-HR.json","./packages/@react-aria/dnd/intl/hu-HU.json","./packages/@react-aria/dnd/intl/it-IT.json","./packages/@react-aria/dnd/intl/ja-JP.json","./packages/@react-aria/dnd/intl/ko-KR.json","./packages/@react-aria/dnd/intl/lt-LT.json","./packages/@react-aria/dnd/intl/lv-LV.json","./packages/@react-aria/dnd/intl/nb-NO.json","./packages/@react-aria/dnd/intl/nl-NL.json","./packages/@react-aria/dnd/intl/pl-PL.json","./packages/@react-aria/dnd/intl/pt-BR.json","./packages/@react-aria/dnd/intl/pt-PT.json","./packages/@react-aria/dnd/intl/ro-RO.json","./packages/@react-aria/dnd/intl/ru-RU.json","./packages/@react-aria/dnd/intl/sk-SK.json","./packages/@react-aria/dnd/intl/sl-SI.json","./packages/@react-aria/dnd/intl/sr-SP.json","./packages/@react-aria/dnd/intl/sv-SE.json","./packages/@react-aria/dnd/intl/tr-TR.json","./packages/@react-aria/dnd/intl/uk-UA.json","./packages/@react-aria/dnd/intl/zh-CN.json","./packages/@react-aria/dnd/intl/zh-TW.json","./packages/@react-aria/dnd/src/useDrag.ts","./packages/@react-aria/dnd/src/useVirtualDrop.ts","./packages/@react-aria/dnd/src/useDrop.ts","./packages/@react-aria/dnd/src/useAutoScroll.ts","./packages/@react-aria/dnd/src/useDroppableCollection.ts","./packages/@react-aria/dnd/src/useDroppableItem.ts","./packages/@react-aria/dnd/src/useDropIndicator.ts","./packages/@react-aria/dnd/src/useDraggableItem.ts","./packages/@react-aria/dnd/src/useClipboard.ts"],"sourcesContent":["function $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true});\n}\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule') {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n },\n });\n });\n\n return dest;\n}\n\nfunction $parcel$missingModule(name) {\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n}\n\nvar $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n","/*\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\nexport enum DROP_OPERATION {\n none = 0,\n cancel = 0,\n move = 1 << 0,\n copy = 1 << 1,\n link = 1 << 2,\n all = move | copy | link\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/effectAllowed\nexport const DROP_OPERATION_ALLOWED = {\n ...DROP_OPERATION,\n copyMove: DROP_OPERATION.copy | DROP_OPERATION.move,\n copyLink: DROP_OPERATION.copy | DROP_OPERATION.link,\n linkMove: DROP_OPERATION.link | DROP_OPERATION.move,\n all: DROP_OPERATION.all,\n uninitialized: DROP_OPERATION.all\n};\n\nexport const EFFECT_ALLOWED = invert(DROP_OPERATION_ALLOWED);\nexport const DROP_EFFECT = invert(DROP_OPERATION);\nexport const DROP_EFFECT_TO_DROP_OPERATION = {\n none: 'cancel',\n link: 'link',\n copy: 'copy',\n move: 'move'\n};\n\nexport const DROP_OPERATION_TO_DROP_EFFECT = invert(DROP_EFFECT_TO_DROP_OPERATION);\n\nfunction invert(object) {\n let res = {};\n for (let key in object) {\n res[object[key]] = key;\n }\n\n return res;\n}\n\nexport const NATIVE_DRAG_TYPES = new Set(['text/plain', 'text/uri-list', 'text/html']);\nexport const CUSTOM_DRAG_TYPE = 'application/vnd.react-aria.items+json';\nexport const GENERIC_TYPE = 'application/octet-stream';\n","/*\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 {CUSTOM_DRAG_TYPE, GENERIC_TYPE, NATIVE_DRAG_TYPES} from './constants';\nimport {DirectoryItem, DragItem, DropItem, FileItem, DragTypes as IDragTypes} from '@react-types/shared';\nimport {DroppableCollectionState} from '@react-stately/dnd';\nimport {getInteractionModality, useInteractionModality} from '@react-aria/interactions';\nimport {useId} from '@react-aria/utils';\n\nconst droppableCollectionIds = new WeakMap<DroppableCollectionState, string>();\n\nexport function useDroppableCollectionId(state: DroppableCollectionState) {\n let id = useId();\n droppableCollectionIds.set(state, id);\n return id;\n}\n\nexport function getDroppableCollectionId(state: DroppableCollectionState) {\n let id = droppableCollectionIds.get(state);\n if (!id) {\n throw new Error('Droppable item outside a droppable collection');\n }\n\n return id;\n}\n\nexport function getTypes(items: DragItem[]): Set<string> {\n let types = new Set<string>();\n for (let item of items) {\n for (let type of Object.keys(item)) {\n types.add(type);\n }\n }\n\n return types;\n}\n\nfunction mapModality(modality: string) {\n if (!modality) {\n modality = 'virtual';\n }\n\n if (modality === 'pointer') {\n modality = 'virtual';\n }\n\n if (modality === 'virtual' && 'ontouchstart' in window) {\n modality = 'touch';\n }\n\n return modality;\n}\n\nexport function useDragModality() {\n return mapModality(useInteractionModality());\n}\n\nexport function getDragModality() {\n return mapModality(getInteractionModality());\n}\n\nexport function writeToDataTransfer(dataTransfer: DataTransfer, items: DragItem[]) {\n // The data transfer API doesn't support more than one item of a given type at once.\n // In addition, only a small set of types are supported natively for transfer between applications.\n // We allow for both multiple items, as well as multiple representations of a single item.\n // In order to make our API work with the native API, we serialize all items to JSON and\n // store as a single native item. We only need to do this if there is more than one item\n // of the same type, or if an item has more than one representation. Otherwise the native\n // API is sufficient.\n //\n // The DataTransferItemList API also theoretically supports adding files, which would enable\n // dragging binary data out of the browser onto the user's desktop for example. Unfortunately,\n // this does not currently work in any browser, so it is not currently supported by our API.\n // See e.g. https://bugs.chromium.org/p/chromium/issues/detail?id=438479.\n let groupedByType = new Map<string, string[]>();\n let needsCustomData = false;\n let customData = [];\n for (let item of items) {\n let types = Object.keys(item);\n if (types.length > 1) {\n needsCustomData = true;\n }\n\n let dataByType = {};\n for (let type of types) {\n let typeItems = groupedByType.get(type);\n if (!typeItems) {\n typeItems = [];\n groupedByType.set(type, typeItems);\n } else {\n needsCustomData = true;\n }\n\n let data = item[type];\n dataByType[type] = data;\n typeItems.push(data);\n }\n\n customData.push(dataByType);\n }\n\n for (let [type, items] of groupedByType) {\n if (NATIVE_DRAG_TYPES.has(type)) {\n // Only one item of a given type can be set on a data transfer.\n // Join all of the items together separated by newlines.\n let data = items.join('\\n');\n dataTransfer.items.add(data, type);\n } else {\n // Set data to the first item so we have access to the list of types.\n dataTransfer.items.add(items[0], type);\n }\n }\n\n if (needsCustomData) {\n let data = JSON.stringify(customData);\n dataTransfer.items.add(data, CUSTOM_DRAG_TYPE);\n }\n}\n\nexport class DragTypes implements IDragTypes {\n private types: Set<string>;\n private includesUnknownTypes: boolean;\n\n constructor(dataTransfer: DataTransfer) {\n this.types = new Set<string>();\n\n let hasFiles = false;\n for (let item of dataTransfer.items) {\n if (item.type !== CUSTOM_DRAG_TYPE) {\n if (item.kind === 'file') {\n hasFiles = true;\n }\n\n if (item.type) {\n this.types.add(item.type);\n } else {\n // Files with unknown types or extensions that don't map to a known mime type\n // are sometimes exposed as an empty string by the browser. Map to a generic\n // mime type instead. Note that this could also be a directory as there's no\n // way to determine if something is a file or directory until drop.\n this.types.add(GENERIC_TYPE);\n }\n }\n }\n\n // In Safari, when dragging files, the dataTransfer.items list is empty, but dataTransfer.types contains \"Files\".\n // Unfortunately, this doesn't tell us what types of files the user is dragging, so we need to assume that any\n // type the user checks for is included. See https://bugs.webkit.org/show_bug.cgi?id=223517.\n this.includesUnknownTypes = !hasFiles && dataTransfer.types.includes('Files');\n }\n\n has(type: string) {\n if (this.includesUnknownTypes) {\n return true;\n }\n\n return this.types.has(type);\n }\n}\n\nexport function readFromDataTransfer(dataTransfer: DataTransfer) {\n let items: DropItem[] = [];\n\n // If our custom drag type is available, use that. This is a JSON serialized\n // representation of all items in the drag, set when there are multiple items\n // of the same type, or an individual item has multiple representations.\n let hasCustomType = false;\n if (dataTransfer.types.includes(CUSTOM_DRAG_TYPE)) {\n try {\n let data = dataTransfer.getData(CUSTOM_DRAG_TYPE);\n let parsed = JSON.parse(data);\n for (let item of parsed) {\n items.push({\n kind: 'text',\n types: new Set(Object.keys(item)),\n getText: (type) => Promise.resolve(item[type])\n });\n }\n\n hasCustomType = true;\n } catch (e) {\n // ignore\n }\n }\n\n // Otherwise, map native drag items to items of a single representation.\n if (!hasCustomType) {\n let stringItems = new Map();\n for (let item of dataTransfer.items) {\n if (item.kind === 'string') {\n // The data for all formats must be read here because the data transfer gets\n // cleared out after the event handler finishes. If the item has an empty string\n // as a type, the mime type is unknown. Map to a generic mime type instead.\n stringItems.set(item.type || GENERIC_TYPE, dataTransfer.getData(item.type));\n } else if (item.kind === 'file') {\n // Despite the name, webkitGetAsEntry is also implemented in Firefox and Edge.\n // In the future, we may use getAsFileSystemHandle instead, but that's currently\n // only implemented in Chrome.\n if (typeof item.webkitGetAsEntry === 'function') {\n let entry: FileSystemEntry = item.webkitGetAsEntry();\n if (!entry) {\n // For some reason, Firefox includes an item with type image/png when copy\n // and pasting any file or directory (no matter the type), but returns `null` for both\n // item.getAsFile() and item.webkitGetAsEntry(). Safari works as expected. Ignore this\n // item if this happens. See https://bugzilla.mozilla.org/show_bug.cgi?id=1699743.\n // This was recently fixed in Chrome Canary: https://bugs.chromium.org/p/chromium/issues/detail?id=1175483.\n continue;\n }\n\n if (entry.isFile) {\n items.push(createFileItem(item.getAsFile()));\n } else if (entry.isDirectory) {\n items.push(createDirectoryItem(entry));\n }\n } else {\n // Assume it's a file.\n items.push(createFileItem(item.getAsFile()));\n }\n }\n }\n\n // All string items are different representations of the same item. There's no way to have\n // multiple string items at once in the current DataTransfer API.\n if (stringItems.size > 0) {\n items.push({\n kind: 'text',\n types: new Set(stringItems.keys()),\n getText: (type) => Promise.resolve(stringItems.get(type))\n });\n }\n }\n\n return items;\n}\n\nfunction blobToString(blob: Blob): Promise<string> {\n if (typeof blob.text === 'function') {\n return blob.text();\n }\n\n // Safari doesn't have the Blob#text() method yet...\n return new Promise((resolve, reject) => {\n let reader = new FileReader;\n reader.onload = () => {\n resolve(reader.result as string);\n };\n\n reader.onerror = reject;\n reader.readAsText(blob);\n });\n}\n\nfunction createFileItem(file: File): FileItem {\n return {\n kind: 'file',\n type: file.type || GENERIC_TYPE,\n name: file.name,\n getText: () => blobToString(file),\n getFile: () => Promise.resolve(file)\n };\n}\n\nfunction createDirectoryItem(entry: any): DirectoryItem {\n return {\n kind: 'directory',\n name: entry.name,\n getEntries: () => getEntries(entry)\n };\n}\n\ninterface FileSystemFileEntry {\n isFile: true,\n isDirectory: false,\n name: string,\n file(successCallback: (file: File) => void, errorCallback?: (error: Error) => void): void\n}\n\ninterface FileSystemDirectoryEntry {\n isDirectory: true,\n isFile: false,\n name: string,\n createReader(): FileSystemDirectoryReader\n}\n\ntype FileSystemEntry = FileSystemFileEntry | FileSystemDirectoryEntry;\ninterface FileSystemDirectoryReader {\n readEntries(successCallback: (entries: FileSystemEntry[]) => void, errorCallback?: (error: Error) => void): void\n}\n\nasync function *getEntries(item: FileSystemDirectoryEntry): AsyncIterable<FileItem | DirectoryItem> {\n let reader = item.createReader();\n\n // We must call readEntries repeatedly because there may be a limit to the\n // number of entries that are returned at once.\n let entries: FileSystemEntry[];\n do {\n entries = await new Promise((resolve, reject) => {\n reader.readEntries(resolve, reject);\n });\n\n for (let entry of entries) {\n if (entry.isFile) {\n let file = await getEntryFile(entry);\n yield createFileItem(file);\n } else if (entry.isDirectory) {\n yield createDirectoryItem(entry);\n }\n }\n } while (entries.length > 0);\n}\n\nfunction getEntryFile(entry: FileSystemFileEntry): Promise<File> {\n return new Promise((resolve, reject) => entry.file(resolve, reject));\n}\n","/*\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 '@react-aria/live-announcer';\nimport {ariaHideOutside} from '@react-aria/overlays';\nimport {DragEndEvent, DragItem, DropActivateEvent, DropEnterEvent, DropEvent, DropExitEvent, DropItem, DropOperation, DropTarget as DroppableCollectionTarget} from '@react-types/shared';\nimport {getDragModality, getTypes} from './utils';\nimport {useEffect, useState} from 'react';\n\nlet dropTargets = new Map<Element, DropTarget>();\nlet dropItems = new Map<Element, DroppableItem>();\nlet dragSession: DragSession = null;\nlet subscriptions = new Set<() => void>();\n\ninterface DropTarget {\n element: HTMLElement,\n getDropOperation?: (types: Set<string>, allowedOperations: DropOperation[]) => DropOperation,\n onDropEnter?: (e: DropEnterEvent, dragTarget: DragTarget) => void,\n onDropExit?: (e: DropExitEvent) => void,\n onDropTargetEnter?: (target?: DroppableCollectionTarget) => void,\n onDropActivate?: (e: DropActivateEvent, target?: DroppableCollectionTarget) => void,\n onDrop?: (e: DropEvent, target?: DroppableCollectionTarget) => void,\n onKeyDown?: (e: KeyboardEvent, dragTarget: DragTarget) => void\n}\n\nexport function registerDropTarget(target: DropTarget) {\n dropTargets.set(target.element, target);\n dragSession?.updateValidDropTargets();\n return () => {\n dropTargets.delete(target.element);\n dragSession?.updateValidDropTargets();\n };\n}\n\ninterface DroppableItem {\n element: HTMLElement,\n target: DroppableCollectionTarget,\n getDropOperation?: (types: Set<string>, allowedOperations: DropOperation[]) => DropOperation\n}\n\nexport function registerDropItem(item: DroppableItem) {\n dropItems.set(item.element, item);\n return () => {\n dropItems.delete(item.element);\n };\n}\n\ninterface DragTarget {\n element: HTMLElement,\n items: DragItem[],\n allowedDropOperations: DropOperation[],\n onDragEnd?: (e: DragEndEvent) => void\n}\n\nexport function beginDragging(target: DragTarget, formatMessage: (key: string) => string) {\n if (dragSession) {\n throw new Error('Cannot begin dragging while already dragging');\n }\n\n dragSession = new DragSession(target, formatMessage);\n requestAnimationFrame(() => {\n dragSession.setup();\n\n if (getDragModality() === 'keyboard') {\n dragSession.next();\n }\n });\n\n for (let cb of subscriptions) {\n cb();\n }\n}\n\nexport function useDragSession() {\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\nfunction endDragging() {\n dragSession = null;\n for (let cb of subscriptions) {\n cb();\n }\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 'keyup',\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;\n currentDropItem: DroppableItem;\n dropOperation: DropOperation;\n private mutationObserver: MutationObserver;\n private mutationImmediate: NodeJS.Immediate;\n private restoreAriaHidden: () => void;\n private formatMessage: (key: string) => string;\n\n constructor(target: DragTarget, formatMessage: (key: string) => string) {\n this.dragTarget = target;\n this.formatMessage = formatMessage;\n\n this.onKeyDown = this.onKeyDown.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.cancelEvent = this.cancelEvent.bind(this);\n }\n\n setup() {\n document.addEventListener('keydown', this.onKeyDown, true);\n window.addEventListener('focus', this.onFocus, true);\n window.addEventListener('blur', this.onBlur, true);\n document.addEventListener('click', this.onClick, true);\n\n for (let event of CANCELED_EVENTS) {\n document.addEventListener(event, this.cancelEvent, true);\n }\n\n this.mutationObserver = new MutationObserver(() => {\n // JSDOM has a bug where MutationObserver enters an infinite loop if mutations\n // occur inside a MutationObserver callback. If running in Node, wait until\n // the next tick to update valid drop targets.\n // See https://github.com/jsdom/jsdom/issues/3096\n if (typeof setImmediate === 'function') {\n this.mutationImmediate = setImmediate(() => this.updateValidDropTargets());\n } else {\n this.updateValidDropTargets();\n }\n });\n this.updateValidDropTargets();\n\n announce(this.formatMessage(MESSAGES[getDragModality()]));\n }\n\n teardown() {\n document.removeEventListener('keydown', this.onKeyDown, true);\n window.removeEventListener('focus', this.onFocus, true);\n window.removeEventListener('blur', this.onBlur, true);\n document.removeEventListener('click', this.onClick, 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 if (this.mutationImmediate) {\n clearImmediate(this.mutationImmediate);\n }\n }\n\n onKeyDown(e: KeyboardEvent) {\n this.cancelEvent(e);\n\n if (e.key === 'Escape') {\n this.cancel();\n return;\n }\n\n if (e.key === 'Enter') {\n if (e.altKey) {\n this.activate();\n } else {\n this.drop();\n }\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 onFocus(e: FocusEvent) {\n // Prevent focus events, except to the original drag target.\n if (e.target !== 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 (!(e.target instanceof HTMLElement) || e.target === this.dragTarget.element) {\n return;\n }\n\n let dropTarget = this.validDropTargets.find(target => target.element.contains(e.target as HTMLElement));\n if (!dropTarget) {\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(e.target as HTMLElement);\n this.setCurrentDropTarget(dropTarget, item);\n }\n\n onBlur(e: FocusEvent) {\n if (e.target !== 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) {\n this.cancelEvent(e);\n\n if (e.detail !== 0) {\n return;\n }\n\n if (e.target === this.dragTarget.element) {\n this.cancel();\n return;\n }\n\n let dropTarget = this.validDropTargets.find(target => target.element.contains(e.target as HTMLElement));\n if (dropTarget) {\n let item = dropItems.get(e.target as HTMLElement);\n this.setCurrentDropTarget(dropTarget, item);\n this.drop(item);\n }\n }\n\n cancelEvent(e: Event) {\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() {\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 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 => target.element.contains(item.element))\n );\n\n this.restoreAriaHidden = ariaHideOutside([\n this.dragTarget.element,\n ...validDropItems.map(item => item.element),\n ...visibleDropTargets.map(target => target.element)\n ]);\n\n this.mutationObserver.observe(document.body, {subtree: true, attributes: true, attributeFilter: ['aria-hidden']});\n }\n\n next() {\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\"]')) {\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() {\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\"]')) {\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 setCurrentDropTarget(dropTarget: DropTarget, item?: DroppableItem) {\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\n if (item !== this.currentDropItem) {\n if (item && typeof this.currentDropTarget.onDropTargetEnter === 'function') {\n this.currentDropTarget.onDropTargetEnter(item?.target);\n }\n\n item?.element.focus();\n this.currentDropItem = item;\n }\n }\n\n end() {\n this.teardown();\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\n });\n }\n\n this.setCurrentDropTarget(null);\n endDragging();\n }\n\n cancel() {\n this.end();\n if (!this.dragTarget.element.closest('[aria-hidden=\"true\"]')) {\n this.dragTarget.element.focus();\n }\n\n announce(this.formatMessage('dropCanceled'));\n }\n\n drop(item?: DroppableItem) {\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);\n }\n\n this.end();\n announce(this.formatMessage('dropComplete'));\n }\n\n activate() {\n if (this.currentDropTarget && typeof this.currentDropTarget.onDropActivate === 'function') {\n let rect = this.currentDropTarget.element.getBoundingClientRect();\n this.currentDropTarget.onDropActivate({\n type: 'dropactivate',\n x: rect.left + (rect.width / 2),\n y: rect.top + (rect.height / 2)\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\"]')) {\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","{\n \"dragDescriptionKeyboard\": \"اضغط Enter لبدء السحب.\",\n \"dragDescriptionTouch\": \"اضغط مرتين لبدء السحب.\",\n \"dragDescriptionVirtual\": \"انقر لبدء السحب.\",\n \"dragItem\": \"اسحب {itemText}\",\n \"dragSelectedItems\": \"اسحب {count, plural, one {# عنصر محدد} other {# عناصر محددة}}\",\n \"dragStartedKeyboard\": \"بدأ السحب. اضغط Tab للانتقال إلى موضع الإفلات، ثم اضغط Enter للإفلات، أو اضغط Escape للإلغاء.\",\n \"dragStartedTouch\": \"بدأ السحب. انتقل إلى موضع الإفلات، ثم اضغط مرتين للإفلات.\",\n \"dragStartedVirtual\": \"بدأ السحب. انتقل إلى مكان الإفلات، ثم انقر أو اضغط Enter للإفلات.\",\n \"dropCanceled\": \"تم إلغاء الإفلات.\",\n \"dropComplete\": \"اكتمل الإفلات.\",\n \"dropDescriptionKeyboard\": \"اضغط Enter للإفلات. اضغط Escape لإلغاء السحب.\",\n \"dropDescriptionTouch\": \"اضغط مرتين للإفلات.\",\n \"dropDescriptionVirtual\": \"انقر للإفلات.\",\n \"dropIndicator\": \"مؤشر الإفلات\",\n \"dropOnItem\": \"إفلات {itemText}\",\n \"dropOnRoot\": \"الإفلات\",\n \"endDragKeyboard\": \"السحب. اضغط Enter لإلغاء السحب.\",\n \"endDragTouch\": \"السحب. اضغط مرتين لإلغاء السحب.\",\n \"endDragVirtual\": \"السحب. انقر لإلغاء السحب.\",\n \"insertAfter\": \"أدخل بعد {itemText}\",\n \"insertBefore\": \"أدخل قبل {itemText}\",\n \"insertBetween\": \"أدخل بين {beforeItemText} و {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Натиснете „Enter“, за да започнете да плъзгате.\",\n \"dragDescriptionTouch\": \"Натиснете двукратно, за да започнете да плъзгате.\",\n \"dragDescriptionVirtual\": \"Щракнете, за да започнете да плъзгате.\",\n \"dragItem\": \"Плъзни {itemText}\",\n \"dragSelectedItems\": \"Плъзни {count, plural, one {# избран елемент} other {# избрани елемента}}\",\n \"dragStartedKeyboard\": \"Започна плъзгане. Натиснете „Tab“, за да се придвижите до целта, след което натиснете „Enter“ за пускане или натиснете „Escape“ за отмяна.\",\n \"dragStartedTouch\": \"Започна плъзгане. Придвижете се до целта, след което натиснете двукратно, за да пуснете.\",\n \"dragStartedVirtual\": \"Започна плъзгане. Придвижете се до целта, след което щракнете или натиснете „Enter“ за пускане.\",\n \"dropCanceled\": \"Пускането е отменено.\",\n \"dropComplete\": \"Пускането е завършено.\",\n \"dropDescriptionKeyboard\": \"Натиснете „Enter“ за пускане. Натиснете „Escape“ за отмяна на плъзгането.\",\n \"dropDescriptionTouch\": \"Натиснете двукратно за пускане.\",\n \"dropDescriptionVirtual\": \"Щракнете за пускане.\",\n \"dropIndicator\": \"индикатор за пускане\",\n \"dropOnItem\": \"Пусни върху {itemText}\",\n \"dropOnRoot\": \"Пусни върху\",\n \"endDragKeyboard\": \"Плъзгане. Натиснете „Enter“ за отмяна на плъзгането.\",\n \"endDragTouch\": \"Плъзгане. Натиснете двукратно за отмяна на плъзгането.\",\n \"endDragVirtual\": \"Плъзгане. Щракнете за отмяна.\",\n \"insertAfter\": \"Вмъкни след {itemText}\",\n \"insertBefore\": \"Вмъкни преди {itemText}\",\n \"insertBetween\": \"Вмъкни между {beforeItemText} и {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Stisknutím klávesy Enter začnete s přetahováním.\",\n \"dragDescriptionTouch\": \"Poklepáním začnete s přetahováním.\",\n \"dragDescriptionVirtual\": \"Kliknutím začnete s přetahováním.\",\n \"dragItem\": \"Přetáhnout {itemText}\",\n \"dragSelectedItems\": \"Přetáhnout {count, plural, one {# vybranou položku} few {# vybrané položky} other {# vybraných položek}}\",\n \"dragStartedKeyboard\": \"Začněte s přetahováním. Po stisknutí klávesy Tab najděte požadovaný cíl a stisknutím klávesy Enter přetažení dokončete nebo stisknutím klávesy Esc akci zrušte.\",\n \"dragStartedTouch\": \"Začněte s přetahováním. Najděte požadovaný cíl a poklepáním přetažení dokončete.\",\n \"dragStartedVirtual\": \"Začněte s přetahováním. Najděte požadovaný cíl a kliknutím nebo stisknutím klávesy Enter přetažení dokončete.\",\n \"dropCanceled\": \"Přetažení bylo zrušeno.\",\n \"dropComplete\": \"Přetažení bylo dokončeno.\",\n \"dropDescriptionKeyboard\": \"Stisknutím klávesy Enter přetažení dokončete nebo stisknutím klávesy Esc akci zrušte.\",\n \"dropDescriptionTouch\": \"Poklepáním přetažení dokončete.\",\n \"dropDescriptionVirtual\": \"Kliknutím objekt přetáhněte.\",\n \"dropIndicator\": \"indikátor přetažení\",\n \"dropOnItem\": \"Přetáhnout na {itemText}\",\n \"dropOnRoot\": \"Přetáhnout na\",\n \"endDragKeyboard\": \"Probíhá přetahování. Stisknutím klávesy Enter přetažení zrušíte.\",\n \"endDragTouch\": \"Probíhá přetahování. Poklepáním přetažení zrušíte.\",\n \"endDragVirtual\": \"Probíhá přetahování. Kliknutím přetažení zrušíte.\",\n \"insertAfter\": \"Vložit za {itemText}\",\n \"insertBefore\": \"Vložit před {itemText}\",\n \"insertBetween\": \"Vložit mezi {beforeItemText} a {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Tryk på Enter for at starte med at trække.\",\n \"dragDescriptionTouch\": \"Dobbelttryk for at starte med at trække.\",\n \"dragDescriptionVirtual\": \"Klik for at starte med at trække.\",\n \"dragItem\": \"Træk {itemText}\",\n \"dragSelectedItems\": \"Træk {count, plural, one {# valgt element} other {# valgte elementer}}\",\n \"dragStartedKeyboard\": \"Startet med at trække. Tryk på Tab for at gå til et slip-mål, tryk derefter på Enter for at slippe, eller tryk på Escape for at annullere.\",\n \"dragStartedTouch\": \"Startet med at trække. Gå til et slip-mål, og dobbelttryk derefter for at slippe.\",\n \"dragStartedVirtual\": \"Startet med at trække. Gå til et slip-mål, og klik eller tryk derefter på enter for at slippe.\",\n \"dropCanceled\": \"Slip annulleret.\",\n \"dropComplete\": \"Slip fuldført.\",\n \"dropDescriptionKeyboard\": \"Tryk på Enter for at slippe. Tryk på Escape for at annullere trækning.\",\n \"dropDescriptionTouch\": \"Dobbelttryk for at slippe.\",\n \"dropDescriptionVirtual\": \"Klik for at slippe.\",\n \"dropIndicator\": \"slip-indikator\",\n \"dropOnItem\": \"Slip på {itemText}\",\n \"dropOnRoot\": \"Slip på\",\n \"endDragKeyboard\": \"Trækning. Tryk på enter for at annullere træk.\",\n \"endDragTouch\": \"Trækning. Dobbelttryk for at annullere træk.\",\n \"endDragVirtual\": \"Trækning. Klik for at annullere trækning.\",\n \"insertAfter\": \"Indsæt efter {itemText}\",\n \"insertBefore\": \"Indsæt før {itemText}\",\n \"insertBetween\": \"Indsæt mellem {beforeItemText} og {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Drücken Sie die Eingabetaste, um den Ziehvorgang zu starten.\",\n \"dragDescriptionTouch\": \"Tippen Sie doppelt, um den Ziehvorgang zu starten.\",\n \"dragDescriptionVirtual\": \"Zum Starten des Ziehvorgangs klicken.\",\n \"dragItem\": \"{itemText} ziehen\",\n \"dragSelectedItems\": \"{count, plural, one {# ausgewähltes Objekt} other {# ausgewählte Objekte}} ziehen\",\n \"dragStartedKeyboard\": \"Ziehvorgang gestartet. Drücken Sie die Tabulatortaste, um zu einem Ablegeziel zu navigieren und drücken Sie dann die Eingabetaste, um das Objekt abzulegen, oder Escape, um den Vorgang abzubrechen.\",\n \"dragStartedTouch\": \"Ziehvorgang gestartet. Navigieren Sie zu einem Ablegeziel und tippen Sie doppelt, um das Objekt abzulegen.\",\n \"dragStartedVirtual\": \"Ziehvorgang gestartet. Navigieren Sie zu einem Ablegeziel und klicken Sie oder drücken Sie die Eingabetaste, um das Objekt abzulegen.\",\n \"dropCanceled\": \"Ablegen abgebrochen.\",\n \"dropComplete\": \"Ablegen abgeschlossen.\",\n \"dropDescriptionKeyboard\": \"Drücken Sie die Eingabetaste, um das Objekt abzulegen. Drücken Sie Escape, um den Vorgang abzubrechen.\",\n \"dropDescriptionTouch\": \"Tippen Sie doppelt, um das Objekt abzulegen.\",\n \"dropDescriptionVirtual\": \"Zum Ablegen klicken.\",\n \"dropIndicator\": \"Ablegeanzeiger\",\n \"dropOnItem\": \"Auf {itemText} ablegen\",\n \"dropOnRoot\": \"Ablegen auf\",\n \"endDragKeyboard\": \"Ziehvorgang läuft. Drücken Sie die Eingabetaste, um den Vorgang abzubrechen.\",\n \"endDragTouch\": \"Ziehvorgang läuft. Tippen Sie doppelt, um den Vorgang abzubrechen.\",\n \"endDragVirtual\": \"Ziehvorgang läuft. Klicken Sie, um den Vorgang abzubrechen.\",\n \"insertAfter\": \"Nach {itemText} einfügen\",\n \"insertBefore\": \"Vor {itemText} einfügen\",\n \"insertBetween\": \"Zwischen {beforeItemText} und {afterItemText} einfügen\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Πατήστε Enter για έναρξη της μεταφοράς.\",\n \"dragDescriptionTouch\": \"Πατήστε δύο φορές για έναρξη της μεταφοράς.\",\n \"dragDescriptionVirtual\": \"Κάντε κλικ για να ξεκινήσετε τη μεταφορά.\",\n \"dragItem\": \"Μεταφορά {itemText}\",\n \"dragSelectedItems\": \"Μεταφορά σε {count, plural, one {# επιλεγμένο στοιχείο} other {# επιλεγμένα στοιχεία}}\",\n \"dragStartedKeyboard\": \"Η μεταφορά ξεκίνησε. Πατήστε το πλήκτρο Tab για να μεταβείτε σε έναν προορισμό απόθεσης και, στη συνέχεια, πατήστε Enter για απόθεση ή πατήστε Escape για ακύρωση.\",\n \"dragStartedTouch\": \"Η μεταφορά ξεκίνησε. Μεταβείτε σε έναν προορισμό απόθεσης και, στη συνέχεια, πατήστε δύο φορές για απόθεση.\",\n \"dragStartedVirtual\": \"Η μεταφορά ξεκίνησε. Μεταβείτε σε έναν προορισμό απόθεσης και, στη συνέχεια, κάντε κλικ ή πατήστε Enter για απόθεση.\",\n \"dropCanceled\": \"Η απόθεση ακυρώθηκε.\",\n \"dropComplete\": \"Η απόθεση ολοκληρώθηκε.\",\n \"dropDescriptionKeyboard\": \"Πατήστε Enter για απόθεση. Πατήστε Escape για ακύρωση της μεταφοράς.\",\n \"dropDescriptionTouch\": \"Πατήστε δύο φορές για απόθεση.\",\n \"dropDescriptionVirtual\": \"Κάντε κλικ για απόθεση.\",\n \"dropIndicator\": \"δείκτης απόθεσης\",\n \"dropOnItem\": \"Απόθεση σε {itemText}\",\n \"dropOnRoot\": \"Απόθεση σε\",\n \"endDragKeyboard\": \"Μεταφορά σε εξέλιξη. Πατήστε Enter για ακύρωση της μεταφοράς.\",\n \"endDragTouch\": \"Μεταφορά σε εξέλιξη. Πατήστε δύο φορές για ακύρωση της μεταφοράς.\",\n \"endDragVirtual\": \"Μεταφορά σε εξέλιξη. Κάντε κλικ για ακύρωση της μεταφοράς.\",\n \"insertAfter\": \"Εισαγωγή μετά από {itemText}\",\n \"insertBefore\": \"Εισαγωγή πριν από {itemText}\",\n \"insertBetween\": \"Εισαγωγή μεταξύ {beforeItemText} και {afterItemText}\"\n}\n","{\n \"dragItem\": \"Drag {itemText}\",\n \"dragSelectedItems\": \"Drag {count, plural, one {# selected item} other {# selected items}}\",\n \"dragDescriptionKeyboard\": \"Press Enter to start dragging.\",\n \"dragDescriptionTouch\": \"Double tap to start dragging.\",\n \"dragDescriptionVirtual\": \"Click to start dragging.\",\n \"dragStartedKeyboard\": \"Started dragging. Press Tab to navigate to a drop target, then press Enter to drop, or press Escape to cancel.\",\n \"dragStartedTouch\": \"Started dragging. Navigate to a drop target, then double tap to drop.\",\n \"dragStartedVirtual\": \"Started dragging. Navigate to a drop target, then click or press Enter to drop.\",\n \"endDragKeyboard\": \"Dragging. Press Enter to cancel drag.\",\n \"endDragTouch\": \"Dragging. Double tap to cancel drag.\",\n \"endDragVirtual\": \"Dragging. Click to cancel drag.\",\n \"dropDescriptionKeyboard\": \"Press Enter to drop. Press Escape to cancel drag.\",\n \"dropDescriptionTouch\": \"Double tap to drop.\",\n \"dropDescriptionVirtual\": \"Click to drop.\",\n \"dropCanceled\": \"Drop canceled.\",\n \"dropComplete\": \"Drop complete.\",\n \"dropIndicator\": \"drop indicator\",\n \"dropOnRoot\": \"Drop on\",\n \"dropOnItem\": \"Drop on {itemText}\",\n \"insertBefore\": \"Insert before {itemText}\",\n \"insertBetween\": \"Insert between {beforeItemText} and {afterItemText}\",\n \"insertAfter\": \"Insert after {itemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Pulse Intro para empezar a arrastrar.\",\n \"dragDescriptionTouch\": \"Pulse dos veces para iniciar el arrastre.\",\n \"dragDescriptionVirtual\": \"Haga clic para iniciar el arrastre.\",\n \"dragItem\": \"Arrastrar {itemText}\",\n \"dragSelectedItems\": \"Arrastrar {count, plural, one {# elemento seleccionado} other {# elementos seleccionados}}\",\n \"dragStartedKeyboard\": \"Se ha empezado a arrastrar. Pulse el tabulador para ir al destino de colocación y, a continuación, pulse Intro para soltar, o pulse Escape para cancelar.\",\n \"dragStartedTouch\": \"Se ha empezado a arrastrar. Vaya al destino de colocación y, a continuación, pulse dos veces para soltar.\",\n \"dragStartedVirtual\": \"Se ha empezado a arrastrar. Vaya al destino de colocación y, a continuación, haga clic o pulse Intro para soltar.\",\n \"dropCanceled\": \"Se ha cancelado la colocación.\",\n \"dropComplete\": \"Colocación finalizada.\",\n \"dropDescriptionKeyboard\": \"Pulse Intro para soltar. Pulse Escape para cancelar el arrastre.\",\n \"dropDescriptionTouch\": \"Pulse dos veces para soltar.\",\n \"dropDescriptionVirtual\": \"Haga clic para soltar.\",\n \"dropIndicator\": \"indicador de colocación\",\n \"dropOnItem\": \"Soltar en {itemText}\",\n \"dropOnRoot\": \"Soltar en\",\n \"endDragKeyboard\": \"Arrastrando. Pulse Intro para cancelar el arrastre.\",\n \"endDragTouch\": \"Arrastrando. Pulse dos veces para cancelar el arrastre.\",\n \"endDragVirtual\": \"Arrastrando. Haga clic para cancelar el arrastre.\",\n \"insertAfter\": \"Insertar después de {itemText}\",\n \"insertBefore\": \"Insertar antes de {itemText}\",\n \"insertBetween\": \"Insertar entre {beforeItemText} y {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Lohistamise alustamiseks vajutage klahvi Enter.\",\n \"dragDescriptionTouch\": \"Topeltpuudutage lohistamise alustamiseks.\",\n \"dragDescriptionVirtual\": \"Klõpsake lohistamise alustamiseks.\",\n \"dragItem\": \"Lohista {itemText}\",\n \"dragSelectedItems\": \"Lohista {count, plural, one {# valitud üksust} other {# valitud üksust}}\",\n \"dragStartedKeyboard\": \"Alustati lohistamist. Kukutamise sihtmärgi juurde navigeerimiseks vajutage klahvi Tab, seejärel vajutage kukutamiseks klahvi Enter või loobumiseks klahvi Escape.\",\n \"dragStartedTouch\": \"Alustati lohistamist. Navigeerige kukutamise sihtmärgi juurde ja topeltpuudutage kukutamiseks.\",\n \"dragStartedVirtual\": \"Alustati lohistamist. Navigeerige kukutamise sihtmärgi juurde ja kukutamiseks klõpsake või vajutage klahvi Enter.\",\n \"dropCanceled\": \"Lohistamisest loobuti.\",\n \"dropComplete\": \"Lohistamine on tehtud.\",\n \"dropDescriptionKeyboard\": \"Kukutamiseks vajutage klahvi Enter. Lohistamisest loobumiseks vajutage klahvi Escape.\",\n \"dropDescriptionTouch\": \"Kukutamiseks topeltpuudutage.\",\n \"dropDescriptionVirtual\": \"Kukutamiseks klõpsake.\",\n \"dropIndicator\": \"lohistamise indikaator\",\n \"dropOnItem\": \"Kukuta asukohta {itemText}\",\n \"dropOnRoot\": \"Kukuta asukohta\",\n \"endDragKeyboard\": \"Lohistamine. Lohistamisest loobumiseks vajutage klahvi Enter.\",\n \"endDragTouch\": \"Lohistamine. Lohistamisest loobumiseks topeltpuudutage.\",\n \"endDragVirtual\": \"Lohistamine. Lohistamisest loobumiseks klõpsake.\",\n \"insertAfter\": \"Sisesta {itemText} järele\",\n \"insertBefore\": \"Sisesta {itemText} ette\",\n \"insertBetween\": \"Sisesta {beforeItemText} ja {afterItemText} vahele\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Aloita vetäminen painamalla Enter-näppäintä.\",\n \"dragDescriptionTouch\": \"Aloita vetäminen kaksoisnapauttamalla.\",\n \"dragDescriptionVirtual\": \"Aloita vetäminen napsauttamalla.\",\n \"dragItem\": \"Vedä kohdetta {itemText}\",\n \"dragSelectedItems\": \"Vedä {count, plural, one {# valittua kohdetta} other {# valittua kohdetta}}\",\n \"dragStartedKeyboard\": \"Vetäminen aloitettu. Siirry pudotuskohteeseen painamalla sarkainnäppäintä ja sitten pudota painamalla Enter-näppäintä tai peruuta painamalla Escape-näppäintä.\",\n \"dragStartedTouch\": \"Vetäminen aloitettu. Siirry pudotuskohteeseen ja pudota kaksoisnapauttamalla.\",\n \"dragStartedVirtual\": \"Vetäminen aloitettu. Siirry pudotuskohteeseen ja pudota napsauttamalla tai painamalla Enter-näppäintä.\",\n \"dropCanceled\": \"Pudotus peruutettu.\",\n \"dropComplete\": \"Pudotus suoritettu.\",\n \"dropDescriptionKeyboard\": \"Pudota painamalla Enter-näppäintä. Peruuta vetäminen painamalla Escape-näppäintä.\",\n \"dropDescriptionTouch\": \"Pudota kaksoisnapauttamalla.\",\n \"dropDescriptionVirtual\": \"Pudota napsauttamalla.\",\n \"dropIndicator\": \"pudotuksen ilmaisin\",\n \"dropOnItem\": \"Pudota kohteeseen {itemText}\",\n \"dropOnRoot\": \"Pudota kohteeseen\",\n \"endDragKeyboard\": \"Vedetään. Peruuta vetäminen painamalla Enter-näppäintä.\",\n \"endDragTouch\": \"Vedetään. Peruuta vetäminen kaksoisnapauttamalla.\",\n \"endDragVirtual\": \"Vedetään. Peruuta vetäminen napsauttamalla.\",\n \"insertAfter\": \"Lisää kohteen {itemText} jälkeen\",\n \"insertBefore\": \"Lisää ennen kohdetta {itemText}\",\n \"insertBetween\": \"Lisää kohteiden {beforeItemText} ja {afterItemText} väliin\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Appuyez sur Entrée pour commencer le déplacement.\",\n \"dragDescriptionTouch\": \"Touchez deux fois pour commencer le déplacement.\",\n \"dragDescriptionVirtual\": \"Cliquez pour commencer le déplacement.\",\n \"dragItem\": \"Déplacer {itemText}\",\n \"dragSelectedItems\": \"Déplacer {count, plural, one {# élément sélectionné} other {# éléments sélectionnés}}\",\n \"dragStartedKeyboard\": \"Déplacement commencé. Appuyez sur Tabulation pour accéder à une cible de dépôt, puis appuyez sur Entrée pour déposer, ou appuyez sur Échap pour annuler.\",\n \"dragStartedTouch\": \"Déplacement commencé. Accédez à une cible de dépôt, puis touchez deux fois pour déposer.\",\n \"dragStartedVirtual\": \"Déplacement commencé. Accédez à une cible de dépôt, puis cliquez ou appuyez sur Entrée pour déposer.\",\n \"dropCanceled\": \"Dépôt annulé.\",\n \"dropComplete\": \"Dépôt terminé.\",\n \"dropDescriptionKeyboard\": \"Appuyez sur Entrée pour déposer. Appuyez sur Échap pour annuler le déplacement.\",\n \"dropDescriptionTouch\": \"Touchez deux fois pour déposer.\",\n \"dropDescriptionVirtual\": \"Cliquez pour déposer.\",\n \"dropIndicator\": \"indicateur de dépôt\",\n \"dropOnItem\": \"Déposer sur {itemText}\",\n \"dropOnRoot\": \"Déposer sur\",\n \"endDragKeyboard\": \"Déplacement. Appuyez sur Entrée pour annuler le déplacement.\",\n \"endDragTouch\": \"Déplacement. Touchez deux fois pour annuler le déplacement.\",\n \"endDragVirtual\": \"Déplacement. Cliquez pour annuler le déplacement.\",\n \"insertAfter\": \"Insérer après {itemText}\",\n \"insertBefore\": \"Insérer avant {itemText}\",\n \"insertBetween\": \"Insérer entre {beforeItemText} et {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"הקש על Enter כדי להתחיל לגרור.\",\n \"dragDescriptionTouch\": \"הקש פעמיים כדי להתחיל בגרירה.\",\n \"dragDescriptionVirtual\": \"לחץ כדי להתחיל לגרור.\",\n \"dragItem\": \"גרור את {itemText}\",\n \"dragSelectedItems\": \"גרור {count, plural, one {פריט נבחר #} other {# פריטים שנבחרו}}\",\n \"dragStartedKeyboard\": \"התחלת לגרור. הקש על Tab כדי לנווט לנקודת הגרירה ולאחר מכן הקש על Enter כדי לשחרר או על Escape כדי לבטל.\",\n \"dragStartedTouch\": \"התחלת לגרור. נווט לנקודת השחרור ולאחר מכן הקש פעמיים כדי לשחרר.\",\n \"dragStartedVirtual\": \"התחלת לגרור. נווט לנקודת השחרור ולאחר מכן לחץ או הקש על Enter כדי לשחרר.\",\n \"dropCanceled\": \"השחרור בוטל.\",\n \"dropComplete\": \"השחרור הושלם.\",\n \"dropDescriptionKeyboard\": \"הקש על Enter כדי לשחרר. הקש על Escape כדי לבטל את הגרירה.\",\n \"dropDescriptionTouch\": \"הקש פעמיים כדי לשחרר.\",\n \"dropDescriptionVirtual\": \"לחץ כדי לשחרר.\",\n \"dropIndicator\": \"מחוון שחרור\",\n \"dropOnItem\": \"שחרר על {itemText}\",\n \"dropOnRoot\": \"שחרר על\",\n \"endDragKeyboard\": \"גורר. הקש על Enter כדי לבטל את הגרירה.\",\n \"endDragTouch\": \"גורר. הקש פעמיים כדי לבטל את הגרירה.\",\n \"endDragVirtual\": \"גורר. לחץ כדי לבטל את הגרירה.\",\n \"insertAfter\": \"הוסף אחרי {itemText}\",\n \"insertBefore\": \"הוסף לפני {itemText}\",\n \"insertBetween\": \"הוסף בין {beforeItemText} לבין {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Pritisnite Enter da biste počeli povlačiti.\",\n \"dragDescriptionTouch\": \"Dvaput dodirnite da biste počeli povlačiti.\",\n \"dragDescriptionVirtual\": \"Kliknite da biste počeli povlačiti.\",\n \"dragItem\": \"Povucite stavku {itemText}\",\n \"dragSelectedItems\": \"Povucite {count, plural, one {# odabranu stavku} other {ovoliko odabranih stavki: #}}\",\n \"dragStartedKeyboard\": \"Počeli ste povlačiti. Pritisnite tipku tabulatora da biste došli do cilja ispuštanja, a zatim Enter da biste ispustili stavku ili Escape da biste prekinuli povlačenje.\",\n \"dragStartedTouch\": \"Počeli ste povlačiti. Dođite do cilja ispuštanja, a zatim dvaput dodirnite da biste ispustili stavku.\",\n \"dragStartedVirtual\": \"Počeli ste povlačiti. Dođite do cilja ispuštanja, a zatim kliknite ili pritisnite Enter da biste ispustili stavku.\",\n \"dropCanceled\": \"Povlačenje je prekinuto.\",\n \"dropComplete\": \"Ispuštanje je dovršeno.\",\n \"dropDescriptionKeyboard\": \"Pritisnite Enter da biste ispustili stavku. Pritisnite Escape da biste prekinuli povlačenje.\",\n \"dropDescriptionTouch\": \"Dvaput dodirnite da biste ispustili stavku.\",\n \"dropDescriptionVirtual\": \"Kliknite da biste ispustili stavku.\",\n \"dropIndicator\": \"pokazatelj ispuštanja\",\n \"dropOnItem\": \"Ispustite na stavku {itemText}\",\n \"dropOnRoot\": \"Ispustite na\",\n \"endDragKeyboard\": \"Povlačenje. Pritisnite Enter da biste prekinuli povlačenje.\",\n \"endDragTouch\": \"Povlačenje. Dvaput dodirnite da biste prekinuli povlačenje.\",\n \"endDragVirtual\": \"Povlačenje. Kliknite da biste prekinuli povlačenje.\",\n \"insertAfter\": \"Umetnite iza stavke {itemText}\",\n \"insertBefore\": \"Ispustite ispred stavke {itemText}\",\n \"insertBetween\": \"Umetnite između stavki {beforeItemText} i {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Nyomja le az Enter billentyűt a húzás megkezdéséhez.\",\n \"dragDescriptionTouch\": \"Koppintson duplán a húzás megkezdéséhez.\",\n \"dragDescriptionVirtual\": \"Kattintson a húzás megkezdéséhez.\",\n \"dragItem\": \"{itemText} húzása\",\n \"dragSelectedItems\": \"{count, plural, one {# kijelölt elem} other {# kijelölt elem}} húzása\",\n \"dragStartedKeyboard\": \"Húzás megkezdve. Nyomja le a Tab billentyűt az elengedési célhoz navigálásához, majd nyomja le az Enter billentyűt az elengedéshez, vagy nyomja le az Escape billentyűt a megszakításhoz.\",\n \"dragStartedTouch\": \"Húzás megkezdve. Navigáljon egy elengedési célhoz, majd koppintson duplán az elengedéshez.\",\n \"dragStartedVirtual\": \"Húzás megkezdve. Navigáljon egy elengedési célhoz, majd kattintson vagy nyomja le az Enter billentyűt az elengedéshez.\",\n \"dropCanceled\": \"Elengedés megszakítva.\",\n \"dropComplete\": \"Elengedés teljesítve.\",\n \"dropDescriptionKeyboard\": \"Nyomja le az Enter billentyűt az elengedéshez. Nyomja le az Escape billentyűt a húzás megszakításához.\",\n \"dropDescriptionTouch\": \"Koppintson duplán az elengedéshez.\",\n \"dropDescriptionVirtual\": \"Kattintson az elengedéshez.\",\n \"dropIndicator\": \"elengedésjelző\",\n \"dropOnItem\": \"Elengedés erre: {itemText}\",\n \"dropOnRoot\": \"Elengedés erre:\",\n \"endDragKeyboard\": \"Húzás folyamatban. Nyomja le az Enter billentyűt a húzás megszakításához.\",\n \"endDragTouch\": \"Húzás folyamatban. Koppintson duplán a húzás megszakításához.\",\n \"endDragVirtual\": \"Húzás folyamatban. Kattintson a húzás megszakításához.\",\n \"insertAfter\": \"Beszúrás {itemText} után\",\n \"insertBefore\": \"Beszúrás {itemText} elé\",\n \"insertBetween\": \"Beszúrás {beforeItemText} és {afterItemText} közé\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Premi Invio per iniziare a trascinare.\",\n \"dragDescriptionTouch\": \"Tocca due volte per iniziare a trascinare.\",\n \"dragDescriptionVirtual\": \"Fai clic per iniziare a trascinare.\",\n \"dragItem\": \"Trascina {itemText}\",\n \"dragSelectedItems\": \"Trascina {count, plural, one {# altro elemento selezionato} other {# altri elementi selezionati}}\",\n \"dragStartedKeyboard\": \"Hai iniziato a trascinare. Premi Tab per arrivare sull’area di destinazione, quindi premi Invio per rilasciare o Esc per annullare.\",\n \"dragStartedTouch\": \"Hai iniziato a trascinare. Arriva sull’area di destinazione, quindi tocca due volte per rilasciare.\",\n \"dragStartedVirtual\": \"Hai iniziato a trascinare. Arriva sull’area di destinazione, quindi fai clic o premi Invio per rilasciare.\",\n \"dropCanceled\": \"Rilascio annullato.\",\n \"dropComplete\": \"Rilascio completato.\",\n \"dropDescriptionKeyboard\": \"Premi Invio per rilasciare. Premi Esc per annullare.\",\n \"dropDescriptionTouch\": \"Tocca due volte per rilasciare.\",\n \"dropDescriptionVirtual\": \"Fai clic per rilasciare.\",\n \"dropIndicator\": \"indicatore di rilascio\",\n \"dropOnItem\": \"Rilascia su {itemText}\",\n \"dropOnRoot\": \"Rilascia su\",\n \"endDragKeyboard\": \"Trascinamento. Premi Invio per annullare.\",\n \"endDragTouch\": \"Trascinamento. Tocca due volte per annullare.\",\n \"endDragVirtual\": \"Trascinamento. Fai clic per annullare.\",\n \"insertAfter\": \"Inserisci dopo {itemText}\",\n \"insertBefore\": \"Inserisci prima di {itemText}\",\n \"insertBetween\": \"Inserisci tra {beforeItemText} e {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Enter キーを押してドラッグを開始してください。\",\n \"dragDescriptionTouch\": \"ダブルタップしてドラッグを開始します。\",\n \"dragDescriptionVirtual\": \"クリックしてドラッグを開始します。\",\n \"dragItem\": \"{itemText} をドラッグ\",\n \"dragSelectedItems\": \"{count, plural, one {# 個の選択項目} other {# 個の選択項目}} をドラッグ\",\n \"dragStartedKeyboard\": \"ドラッグを開始します。Tab キーを押してドロップターゲットにいどうし、Enter キーを押してドロップするか、Esc キーを押してキャンセルします。\",\n \"dragStartedTouch\": \"ドラッグを開始しました。ドロップのターゲットに移動し、ダブルタップしてドロップします。\",\n \"dragStartedVirtual\": \"ドラッグを開始しました。ドロップのターゲットに移動し、クリックまたは Enter キーを押してドロップします。\",\n \"dropCanceled\": \"ドロップがキャンセルされました。\",\n \"dropComplete\": \"ドロップが完了しました。\",\n \"dropDescriptionKeyboard\": \"Enter キーを押してドロップします。Esc キーを押してドラッグをキャンセルします。\",\n \"dropDescriptionTouch\": \"ダブルタップしてドロップします。\",\n \"dropDescriptionVirtual\": \"クリックしてドロップします。\",\n \"dropIndicator\": \"ドロップインジケーター\",\n \"dropOnItem\": \"{itemText} にドロップ\",\n \"dropOnRoot\": \"ドロップ場所\",\n \"endDragKeyboard\": \"ドラッグしています。Enter キーを押してドラッグをキャンセルします。\",\n \"endDragTouch\": \"ドラッグしています。ダブルタップしてドラッグをキャンセルします。\",\n \"endDragVirtual\": \"ドラッグしています。クリックしてドラッグをキャンセルします。\",\n \"insertAfter\": \"{itemText} の後に挿入\",\n \"insertBefore\": \"{itemText} の前に挿入\",\n \"insertBetween\": \"{beforeItemText} と {afterItemText} の間に挿入\"\n}\n","{\n \"dragDescriptionKeyboard\": \"드래그를 시작하려면 Enter를 누르세요.\",\n \"dragDescriptionTouch\": \"드래그를 시작하려면 더블 탭하세요.\",\n \"dragDescriptionVirtual\": \"드래그를 시작하려면 클릭하세요.\",\n \"dragItem\": \"{itemText} 드래그\",\n \"dragSelectedItems\": \"{count, plural, one {#개 선택 항목} other {#개 선택 항목}} 드래그\",\n \"dragStartedKeyboard\": \"드래그가 시작되었습니다. Tab을 눌러 드롭 대상으로 이동한 다음 Enter를 눌러 드롭하거나 Esc를 눌러 취소하세요.\",\n \"dragStartedTouch\": \"드래그가 시작되었습니다. 드롭 대상으로 이동한 다음 더블 탭하여 드롭하세요.\",\n \"dragStartedVirtual\": \"드래그가 시작되었습니다. 드롭 대상으로 이동한 다음 클릭하거나 Enter를 눌러 드롭하세요.\",\n \"dropCanceled\": \"드롭이 취소되었습니다.\",\n \"dropComplete\": \"드롭이 완료되었습니다.\",\n \"dropDescriptionKeyboard\": \"드롭하려면 Enter를 누르세요. 드래그를 취소하려면 Esc를 누르세요.\",\n \"dropDescriptionTouch\": \"더블 탭하여 드롭하세요.\",\n \"dropDescriptionVirtual\": \"드롭하려면 클릭하세요.\",\n \"dropIndicator\": \"드롭 표시기\",\n \"dropOnItem\": \"{itemText}에 드롭\",\n \"dropOnRoot\": \"드롭 대상\",\n \"endDragKeyboard\": \"드래그 중입니다. 드래그를 취소하려면 Enter를 누르세요.\",\n \"endDragTouch\": \"드래그 중입니다. 드래그를 취소하려면 더블 탭하세요.\",\n \"endDragVirtual\": \"드래그 중입니다. 드래그를 취소하려면 클릭하세요.\",\n \"insertAfter\": \"{itemText} 이후에 삽입\",\n \"insertBefore\": \"{itemText} 이전에 삽입\",\n \"insertBetween\": \"{beforeItemText} 및 {afterItemText} 사이에 삽입\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Paspauskite „Enter“, kad pradėtumėte vilkti.\",\n \"dragDescriptionTouch\": \"Palieskite dukart, kad pradėtumėte vilkti.\",\n \"dragDescriptionVirtual\": \"Spustelėkite, kad pradėtumėte vilkti.\",\n \"dragItem\": \"Vilkti {itemText}\",\n \"dragSelectedItems\": \"Vilkti {count, plural, one {# pasirinktą elementą} other {# pasirinktus elementus}}\",\n \"dragStartedKeyboard\": \"Pradėta vilkti. Paspauskite „Tab“, kad pereitumėte į tiesioginę paskirties vietą, tada paspauskite „Enter“, kad numestumėte, arba „Escape“, kad atšauktumėte.\",\n \"dragStartedTouch\": \"Pradėta vilkti. Eikite į tiesioginę paskirties vietą, tada palieskite dukart, kad numestumėte.\",\n \"dragStartedVirtual\": \"Pradėta vilkti. Eikite į tiesioginę paskirties vietą ir spustelėkite arba paspauskite „Enter“, kad numestumėte.\",\n \"dropCanceled\": \"Numetimas atšauktas.\",\n \"dropComplete\": \"Numesta.\",\n \"dropDescriptionKeyboard\": \"Paspauskite „Enter“, kad numestumėte. Paspauskite „Escape“, kad atšauktumėte vilkimą.\",\n \"dropDescriptionTouch\": \"Palieskite dukart, kad numestumėte.\",\n \"dropDescriptionVirtual\": \"Spustelėkite, kad numestumėte.\",\n \"dropIndicator\": \"numetimo indikatorius\",\n \"dropOnItem\": \"Numesti ant {itemText}\",\n \"dropOnRoot\": \"Numesti ant\",\n \"endDragKeyboard\": \"Velkama. Paspauskite „Enter“, kad atšauktumėte vilkimą.\",\n \"endDragTouch\": \"Velkama. Spustelėkite dukart, kad atšauktumėte vilkimą.\",\n \"endDragVirtual\": \"Velkama. Spustelėkite, kad atšauktumėte vilkimą.\",\n \"insertAfter\": \"Įterpti po {itemText}\",\n \"insertBefore\": \"Įterpti prieš {itemText}\",\n \"insertBetween\": \"Įterpti tarp {beforeItemText} ir {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Nospiediet Enter, lai sāktu vilkšanu.\",\n \"dragDescriptionTouch\": \"Veiciet dubultskārienu, lai sāktu vilkšanu.\",\n \"dragDescriptionVirtual\": \"Noklikšķiniet, lai sāktu vilkšanu.\",\n \"dragItem\": \"Velciet {itemText}\",\n \"dragSelectedItems\": \"Velciet {count, plural, one {# atlasīto vienumu} other {# atlasītos vienumus}}\",\n \"dragStartedKeyboard\": \"Uzsākta vilkšana. Nospiediet taustiņu Tab, lai pārietu uz nomešanas mērķi, pēc tam nospiediet Enter, lai nomestu, vai nospiediet Escape, lai atceltu.\",\n \"dragStartedTouch\": \"Uzsākta vilkšana. Pārejiet uz nomešanas mērķi, pēc tam veiciet dubultskārienu, lai nomestu.\",\n \"dragStartedVirtual\": \"Uzsākta vilkšana. Pārejiet uz nomešanas mērķi, pēc tam nospiediet Enter, lai nomestu.\",\n \"dropCanceled\": \"Nomešana atcelta.\",\n \"dropComplete\": \"Nomešana pabeigta.\",\n \"dropDescriptionKeyboard\": \"Nospiediet Enter, lai nomestu. Nospiediet Escape, lai atceltu vilkšanu.\",\n \"dropDescriptionTouch\": \"Veiciet dubultskārienu, lai nomestu.\",\n \"dropDescriptionVirtual\": \"Noklikšķiniet, lai nomestu.\",\n \"dropIndicator\": \"nomešanas indikators\",\n \"dropOnItem\": \"Nometiet uz {itemText}\",\n \"dropOnRoot\": \"Nometiet uz\",\n \"endDragKeyboard\": \"Notiek vilkšana. Nospiediet Enter, lai atceltu vilkšanu.\",\n \"endDragTouch\": \"Notiek vilkšana. Veiciet dubultskārienu, lai atceltu vilkšanu.\",\n \"endDragVirtual\": \"Notiek vilkšana. Noklikšķiniet, lai atceltu vilkšanu.\",\n \"insertAfter\": \"Ievietojiet pēc {itemText}\",\n \"insertBefore\": \"Ievietojiet pirms {itemText}\",\n \"insertBetween\": \"Ievietojiet starp {beforeItemText} un {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Trykk på Enter for å begynne å dra.\",\n \"dragDescriptionTouch\": \"Dobbelttrykk for å begynne å dra.\",\n \"dragDescriptionVirtual\": \"Klikk for å begynne å dra.\",\n \"dragItem\": \"Dra {itemText}\",\n \"dragSelectedItems\": \"Dra {count, plural, one {# merket element} other {# merkede elementer}}\",\n \"dragStartedKeyboard\": \"Begynte å dra. Trykk på Tab for å navigere til et mål, og trykk deretter på Enter for å slippe eller på Esc for å avbryte.\",\n \"dragStartedTouch\": \"Begynte å dra. Naviger til et mål, og dobbelttrykk for å slippe.\",\n \"dragStartedVirtual\": \"Begynte å dra. Naviger til et mål, og klikk eller trykk på Enter for å slippe.\",\n \"dropCanceled\": \"Avbrøt slipping.\",\n \"dropComplete\": \"Slippingen er fullført.\",\n \"dropDescriptionKeyboard\": \"Trykk på Enter for å slippe. Trykk på Esc hvis du vil avbryte draingen.\",\n \"dropDescriptionTouch\": \"Dobbelttrykk for å slippe.\",\n \"dropDescriptionVirtual\": \"Klikk for å slippe.\",\n \"dropIndicator\": \"slippeindikator\",\n \"dropOnItem\": \"Slipp på {itemText}\",\n \"dropOnRoot\": \"Slipp på\",\n \"endDragKeyboard\": \"Drar. Trykk på Enter hvis du vil avbryte.\",\n \"endDragTouch\": \"Drar. Dobbelttrykk hvis du vil avbryte.\",\n \"endDragVirtual\": \"Drar. Klikk hvis du vil avbryte.\",\n \"insertAfter\": \"Sett inn etter {itemText}\",\n \"insertBefore\": \"Sett inn før {itemText}\",\n \"insertBetween\": \"Sett inn mellom {beforeItemText} og {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Druk op Enter om te slepen.\",\n \"dragDescriptionTouch\": \"Dubbeltik om te slepen.\",\n \"dragDescriptionVirtual\": \"Klik om met slepen te starten.\",\n \"dragItem\": \"{itemText} slepen\",\n \"dragSelectedItems\": \"{count, plural, one {# geselecteerd item} other {# geselecteerde items}} slepen\",\n \"dragStartedKeyboard\": \"Begonnen met slepen. Druk op Tab om naar een locatie te gaan. Druk dan op Enter om neer te zetten, of op Esc om te annuleren.\",\n \"dragStartedTouch\": \"Begonnen met slepen. Ga naar de gewenste locatie en dubbeltik om neer te zetten.\",\n \"dragStartedVirtual\": \"Begonnen met slepen. Ga naar de gewenste locatie en klik of druk op Enter om neer te zetten.\",\n \"dropCanceled\": \"Neerzetten geannuleerd.\",\n \"dropComplete\": \"Neerzetten voltooid.\",\n \"dropDescriptionKeyboard\": \"Druk op Enter om neer te zetten. Druk op Esc om het slepen te annuleren.\",\n \"dropDescriptionTouch\": \"Dubbeltik om neer te zetten.\",\n \"dropDescriptionVirtual\": \"Klik om neer te zetten.\",\n \"dropIndicator\": \"aanwijzer voor neerzetten\",\n \"dropOnItem\": \"Neerzetten op {itemText}\",\n \"dropOnRoot\": \"Neerzetten op\",\n \"endDragKeyboard\": \"Bezig met slepen. Druk op Enter om te annuleren.\",\n \"endDragTouch\": \"Bezig met slepen. Dubbeltik om te annuleren.\",\n \"endDragVirtual\": \"Bezig met slepen. Klik om te annuleren.\",\n \"insertAfter\": \"Plaatsen na {itemText}\",\n \"insertBefore\": \"Plaatsen vóór {itemText}\",\n \"insertBetween\": \"Plaatsen tussen {beforeItemText} en {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Naciśnij Enter, aby rozpocząć przeciąganie.\",\n \"dragDescriptionTouch\": \"Dotknij dwukrotnie, aby rozpocząć przeciąganie.\",\n \"dragDescriptionVirtual\": \"Kliknij, aby rozpocząć przeciąganie.\",\n \"dragItem\": \"Przeciągnij {itemText}\",\n \"dragSelectedItems\": \"Przeciągnij {count, plural, one {# wybrany element} other {# wybranych elementów}}\",\n \"dragStartedKeyboard\": \"Rozpoczęto przeciąganie. Naciśnij Tab, aby wybrać miejsce docelowe, a następnie naciśnij Enter, aby upuścić, lub Escape, aby anulować.\",\n \"dragStartedTouch\": \"Rozpoczęto przeciąganie. Wybierz miejsce, w którym chcesz upuścić element, a następnie dotknij dwukrotnie, aby upuścić.F\",\n \"dragStartedVirtual\": \"Rozpoczęto przeciąganie. Wybierz miejsce, w którym chcesz upuścić element, a następnie kliknij lub naciśnij Enter, aby upuścić.\",\n \"dropCanceled\": \"Anulowano upuszczenie.\",\n \"dropComplete\": \"Zakończono upuszczanie.\",\n \"dropDescriptionKeyboard\": \"Naciśnij Enter, aby upuścić. Naciśnij Escape, aby anulować przeciągnięcie.\",\n \"dropDescriptionTouch\": \"Dotknij dwukrotnie, aby upuścić.\",\n \"dropDescriptionVirtual\": \"Kliknij, aby upuścić.\",\n \"dropIndicator\": \"wskaźnik upuszczenia\",\n \"dropOnItem\": \"Upuść na {itemText}\",\n \"dropOnRoot\": \"Upuść\",\n \"endDragKeyboard\": \"Przeciąganie. Naciśnij Enter, aby anulować przeciągnięcie.\",\n \"endDragTouch\": \"Przeciąganie. Kliknij dwukrotnie, aby anulować przeciągnięcie.\",\n \"endDragVirtual\": \"Przeciąganie. Kliknij, aby anulować przeciąganie.\",\n \"insertAfter\": \"Umieść za {itemText}\",\n \"insertBefore\": \"Umieść przed {itemText}\",\n \"insertBetween\": \"Umieść między {beforeItemText} i {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Pressione Enter para começar a arrastar.\",\n \"dragDescriptionTouch\": \"Toque duas vezes para começar a arrastar.\",\n \"dragDescriptionVirtual\": \"Clique para começar a arrastar.\",\n \"dragItem\": \"Arrastar {itemText}\",\n \"dragSelectedItems\": \"Arrastar {count, plural, one {# item selecionado} other {# itens selecionados}}\",\n \"dragStartedKeyboard\": \"Comece a arrastar. Pressione Tab para navegar até um alvo e, em seguida, pressione Enter para soltar ou pressione Escape para cancelar.\",\n \"dragStartedTouch\": \"Comece a arrastar. Navegue até um alvo e toque duas vezes para soltar.\",\n \"dragStartedVirtual\": \"Comece a arrastar. Navegue até um alvo e clique ou pressione Enter para soltar.\",\n \"dropCanceled\": \"Liberação cancelada.\",\n \"dropComplete\": \"Liberação concluída.\",\n \"dropDescriptionKeyboard\": \"Pressione Enter para soltar. Pressione Escape para cancelar.\",\n \"dropDescriptionTouch\": \"Toque duas vezes para soltar.\",\n \"dropDescriptionVirtual\": \"Clique para soltar.\",\n \"dropIndicator\": \"indicador de liberação\",\n \"dropOnItem\": \"Soltar em {itemText}\",\n \"dropOnRoot\": \"Soltar\",\n \"endDragKeyboard\": \"Arrastando. Pressione Enter para cancelar.\",\n \"endDragTouch\": \"Arrastando. Toque duas vezes para cancelar.\",\n \"endDragVirtual\": \"Arrastando. Clique para cancelar.\",\n \"insertAfter\": \"Inserir após {itemText}\",\n \"insertBefore\": \"Inserir antes de {itemText}\",\n \"insertBetween\": \"Inserir entre {beforeItemText} e {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Prima Enter para iniciar o arrasto.\",\n \"dragDescriptionTouch\": \"Faça duplo toque para começar a arrastar.\",\n \"dragDescriptionVirtual\": \"Clique para iniciar o arrasto.\",\n \"dragItem\": \"Arrastar {itemText}\",\n \"dragSelectedItems\": \"Arrastar {count, plural, one {# item selecionado} outro {# itens selecionados}}\",\n \"dragStartedKeyboard\": \"Arrasto iniciado. Prima a tecla de tabulação para navegar para um destino para largar, e em seguida prima Enter para largar ou prima Escape para cancelar.\",\n \"dragStartedTouch\": \"Arrasto iniciado. Navegue para um destino para largar, e em seguida faça duplo toque para largar.\",\n \"dragStartedVirtual\": \"Arrasto iniciado. Navegue para um destino para largar, e em seguida clique ou prima Enter para largar.\",\n \"dropCanceled\": \"Largar cancelado.\",\n \"dropComplete\": \"Largar completo.\",\n \"dropDescriptionKeyboard\": \"Prima Enter para largar. Prima Escape para cancelar o arrasto.\",\n \"dropDescriptionTouch\": \"Faça duplo toque para largar.\",\n \"dropDescriptionVirtual\": \"Clique para largar.\",\n \"dropIndicator\": \"Indicador de largar\",\n \"dropOnItem\": \"Largar em {itemText}\",\n \"dropOnRoot\": \"Largar em\",\n \"endDragKeyboard\": \"A arrastar. Prima Enter para cancelar o arrasto.\",\n \"endDragTouch\": \"A arrastar. Faça duplo toque para cancelar o arrasto.\",\n \"endDragVirtual\": \"A arrastar. Clique para cancelar o arrasto.\",\n \"insertAfter\": \"Inserir depois de {itemText}\",\n \"insertBefore\": \"Inserir antes de {itemText}\",\n \"insertBetween\": \"Inserir entre {beforeItemText} e {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Apăsați pe Enter pentru a începe glisarea.\",\n \"dragDescriptionTouch\": \"Atingeți de două ori pentru a începe să glisați.\",\n \"dragDescriptionVirtual\": \"Faceți clic pentru a începe glisarea.\",\n \"dragItem\": \"Glisați {itemText}\",\n \"dragSelectedItems\": \"Glisați {count, plural, one {# element selectat} other {# elemente selectate}}\",\n \"dragStartedKeyboard\": \"A început glisarea. Apăsați pe Tab pentru a naviga la o țintă de fixare, apoi apăsați pe Enter pentru a fixa sau apăsați pe Escape pentru a anula glisarea.\",\n \"dragStartedTouch\": \"A început glisarea. Navigați la o țintă de fixare, apoi atingeți de două ori pentru a fixa.\",\n \"dragStartedVirtual\": \"A început glisarea. Navigați la o țintă de fixare, apoi faceți clic sau apăsați pe Enter pentru a fixa.\",\n \"dropCanceled\": \"Fixare anulată.\",\n \"dropComplete\": \"Fixare finalizată.\",\n \"dropDescriptionKeyboard\": \"Apăsați pe Enter pentru a fixa. Apăsați pe Escape pentru a anula glisarea.\",\n \"dropDescriptionTouch\": \"Atingeți de două ori pentru a fixa.\",\n \"dropDescriptionVirtual\": \"Faceți clic pentru a fixa.\",\n \"dropIndicator\": \"indicator de fixare\",\n \"dropOnItem\": \"Fixați pe {itemText}\",\n \"dropOnRoot\": \"Fixare pe\",\n \"endDragKeyboard\": \"Se glisează. Apăsați pe Enter pentru a anula glisarea.\",\n \"endDragTouch\": \"Se glisează. Atingeți de două ori pentru a anula glisarea.\",\n \"endDragVirtual\": \"Se glisează. Faceți clic pentru a anula glisarea.\",\n \"insertAfter\": \"Inserați după {itemText}\",\n \"insertBefore\": \"Inserați înainte de {itemText}\",\n \"insertBetween\": \"Inserați între {beforeItemText} și {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Нажмите клавишу Enter для начала перетаскивания.\",\n \"dragDescriptionTouch\": \"Дважды нажмите для начала перетаскивания.\",\n \"dragDescriptionVirtual\": \"Щелкните для начала перетаскивания.\",\n \"dragItem\": \"Перетащить {itemText}\",\n \"dragSelectedItems\": \"Перетащить {count, plural, one {# выбранный элемент} other {# выбранных элем}}\",\n \"dragStartedKeyboard\": \"Начато перетаскивание. Нажмите клавишу Tab для выбора цели, затем нажмите клавишу Enter, чтобы применить перетаскивание, или клавишу Escape для отмены действия.\",\n \"dragStartedTouch\": \"Начато перетаскивание. Выберите цель, затем дважды нажмите, чтобы применить перетаскивание.\",\n \"dragStartedVirtual\": \"Начато перетаскивание. Нажмите клавишу Tab для выбора цели, затем нажмите клавишу Enter, чтобы применить перетаскивание.\",\n \"dropCanceled\": \"Перетаскивание отменено.\",\n \"dropComplete\": \"Перетаскивание завершено.\",\n \"dropDescriptionKeyboard\": \"Нажмите клавишу Enter, чтобы применить перетаскивание. Нажмите клавишу Escape для отмены.\",\n \"dropDescriptionTouch\": \"Дважды нажмите, чтобы применить перетаскивание.\",\n \"dropDescriptionVirtual\": \"Щелкните, чтобы применить перетаскивание.\",\n \"dropIndicator\": \"индикатор перетаскивания\",\n \"dropOnItem\": \"Перетащить на {itemText}\",\n \"dropOnRoot\": \"Перетащить на\",\n \"endDragKeyboard\": \"Перетаскивание. Нажмите клавишу Enter для отмены.\",\n \"endDragTouch\": \"Перетаскивание. Дважды нажмите для отмены.\",\n \"endDragVirtual\": \"Перетаскивание. Щелкните для отмены.\",\n \"insertAfter\": \"Вставить после {itemText}\",\n \"insertBefore\": \"Вставить перед {itemText}\",\n \"insertBetween\": \"Вставить между {beforeItemText} и {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Stlačením klávesu Enter začnete presúvanie.\",\n \"dragDescriptionTouch\": \"Dvojitým kliknutím začnete presúvanie.\",\n \"dragDescriptionVirtual\": \"Kliknutím začnete presúvanie.\",\n \"dragItem\": \"Presunúť položku {itemText}\",\n \"dragSelectedItems\": \"Presunúť {count, plural, one {# vybratú položku} other {# vybraté položky}}\",\n \"dragStartedKeyboard\": \"Presúvanie sa začalo. Do cieľového umiestnenia prejdete stlačením klávesu Tab. Ak chcete položku umiestniť, stlačte kláves Enter alebo stlačte kláves Esc, ak chcete presúvanie zrušiť.\",\n \"dragStartedTouch\": \"Presúvanie sa začalo. Prejdite na cieľové umiestnenie a dvojitým kliknutím umiestnite položku.\",\n \"dragStartedVirtual\": \"Presúvanie sa začalo. Prejdite na cieľové umiestnenie a kliknutím alebo stlačením klávesu Enter umiestnite položku.\",\n \"dropCanceled\": \"Umiestnenie zrušené.\",\n \"dropComplete\": \"Umiestnenie dokončené.\",\n \"dropDescriptionKeyboard\": \"Stlačením klávesu Enter umiestnite položku. Stlačením klávesu Esc zrušíte presúvanie.\",\n \"dropDescriptionTouch\": \"Dvojitým kliknutím umiestnite položku.\",\n \"dropDescriptionVirtual\": \"Kliknutím umiestnite položku.\",\n \"dropIndicator\": \"indikátor umiestnenia\",\n \"dropOnItem\": \"Umiestniť na položku {itemText}\",\n \"dropOnRoot\": \"Umiestniť na\",\n \"endDragKeyboard\": \"Prebieha presúvanie. Ak ho chcete zrušiť, stlačte kláves Enter.\",\n \"endDragTouch\": \"Prebieha presúvanie. Dvojitým kliknutím ho môžete zrušiť.\",\n \"endDragVirtual\": \"Prebieha presúvanie.\",\n \"insertAfter\": \"Vložiť za položku {itemText}\",\n \"insertBefore\": \"Vložiť pred položku {itemText}\",\n \"insertBetween\": \"Vložiť medzi položky {beforeItemText} a {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Pritisnite tipko Enter za začetek vlečenja.\",\n \"dragDescriptionTouch\": \"Dvotapnite za začetek vlečenja.\",\n \"dragDescriptionVirtual\": \"Kliknite za začetek vlečenja.\",\n \"dragItem\": \"Povleci {itemText}\",\n \"dragSelectedItems\": \"Povlecite {count, plural, one {# izbran element} other {izbrane elemente (#)}}\",\n \"dragStartedKeyboard\": \"Vlečenje se je začelo. Pritisnite tipko Tab za pomik na mesto, kamor želite spustiti elemente, in pritisnite tipko Enter, da jih spustite, ali tipko Escape, da prekličete postopek.\",\n \"dragStartedTouch\": \"Vlečenje se je začelo. Pomaknite se na mesto, kamor želite spustiti elemente, in dvotapnite, da jih spustite.\",\n \"dragStartedVirtual\": \"Vlečenje se je začelo. Pomaknite se na mesto, kamor želite spustiti elemente, in kliknite ali pritisnite tipko Enter, da jih spustite.\",\n \"dropCanceled\": \"Spust je preklican.\",\n \"dropComplete\": \"Spust je končan.\",\n \"dropDescriptionKeyboard\": \"Pritisnite tipko Enter, da spustite. Pritisnite tipko Escape, da prekličete vlečenje.\",\n \"dropDescriptionTouch\": \"Dvotapnite, da spustite.\",\n \"dropDescriptionVirtual\": \"Kliknite, da spustite.\",\n \"dropIndicator\": \"indikator spusta\",\n \"dropOnItem\": \"Spusti na mesto {itemText}\",\n \"dropOnRoot\": \"Spusti na mesto\",\n \"endDragKeyboard\": \"Vlečenje. Pritisnite tipko Enter za preklic vlečenja.\",\n \"endDragTouch\": \"Vlečenje. Dvotapnite za preklic vlečenja.\",\n \"endDragVirtual\": \"Vlečenje. Kliknite, da prekličete vlečenje.\",\n \"insertAfter\": \"Vstavi za {itemText}\",\n \"insertBefore\": \"Vstavi pred {itemText}\",\n \"insertBetween\": \"Vstavi med {beforeItemText} in {afterItemText}\"\n}\n","{\n \"dragItem\": \"Prevucite {itemText}\",\n \"dragSelectedItems\": \"Prevucite {count, plural, one {# izabranu stavku} other {# izabrane stavke}}\",\n \"dragDescriptionKeyboard\": \"Pritisnite Enter da biste započeli prevlačenje..\",\n \"dragDescriptionTouch\": \"Dvaput dodirnite za otpuštanje.\",\n \"dragDescriptionVirtual\": \"Kliknite da biste započeli prevlačenje.\",\n \"dragStartedKeyboard\": \"Prevlačenje je započeto. Pritisnite Tab da biste otišli do cilja za otpuštanje, zatim pritisnite Enter za ispuštanje ili pritisnite Escape za otkazivanje.\",\n \"dragStartedTouch\": \"Prevlačenje je započeto. Idite do cilja za otpuštanje, a zatim dvaput dodirnite za otpuštanje.\",\n \"dragStartedVirtual\": \"Prevlačenje je započeto. Idite do cilja za otpuštanje, a zatim kliknite ili pritinite Enter za otpuštanje.\",\n \"endDragKeyboard\": \"Prevlačenje u toku. Pritisnite Enter da biste otkazali prevlačenje.\",\n \"endDragTouch\": \"Prevlačenje u toku. Dvaput dodirnite da biste otkazali prevlačenje.\",\n \"endDragVirtual\": \"Prevlačenje u toku. Kliknite da biste otkazali prevlačenje.\",\n \"dropDescriptionKeyboard\": \"Pritisnite Enter da biste otpustili. Pritisnite Escape da biste otkazali prevlačenje.\",\n \"dropDescriptionTouch\": \"Dvaput dodirnite za otpuštanje.\",\n \"dropDescriptionVirtual\": \"Kliknite za otpuštanje.\",\n \"dropCanceled\": \"Otpuštanje je otkazano.\",\n \"dropComplete\": \"Prevlačenje je završeno.\",\n \"dropIndicator\": \"Indikator otpuštanja\",\n \"dropOnRoot\": \"Otpusti na\",\n \"dropOnItem\": \"Otpusti na {itemText}\",\n \"insertBefore\": \"Umetnite ispred {itemText}\",\n \"insertBetween\": \"Umetnite između {beforeItemText} i {afterItemText}\",\n \"insertAfter\": \"Umetnite posle {itemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Tryck på enter för att börja dra.\",\n \"dragDescriptionTouch\": \"Dubbeltryck för att börja dra.\",\n \"dragDescriptionVirtual\": \"Klicka för att börja dra.\",\n \"dragItem\": \"Dra {itemText}\",\n \"dragSelectedItems\": \"Dra {count, plural, one {# valt objekt} other {# valda objekt}}\",\n \"dragStartedKeyboard\": \"Börja dra. Tryck på tabb för att navigera till målet, tryck på enter för att släppa eller på escape för att avbryta.\",\n \"dragStartedTouch\": \"Börja dra. Navigera till ett mål och dubbeltryck för att släppa.\",\n \"dragStartedVirtual\": \"Börja dra. Navigera till ett mål och klicka eller tryck på enter för att släppa.\",\n \"dropCanceled\": \"Släppåtgärd avbröts.\",\n \"dropComplete\": \"Släppåtgärd klar.\",\n \"dropDescriptionKeyboard\": \"Tryck på enter för att släppa. Tryck på escape för att avbryta dragåtgärd.\",\n \"dropDescriptionTouch\": \"Dubbeltryck för att släppa.\",\n \"dropDescriptionVirtual\": \"Klicka för att släppa.\",\n \"dropIndicator\": \"släppindikator\",\n \"dropOnItem\": \"Släpp på {itemText}\",\n \"dropOnRoot\": \"Släpp på\",\n \"endDragKeyboard\": \"Drar. Tryck på enter för att avbryta dragåtgärd.\",\n \"endDragTouch\": \"Drar. Dubbeltryck för att avbryta dragåtgärd.\",\n \"endDragVirtual\": \"Drar. Klicka för att avbryta dragåtgärd.\",\n \"insertAfter\": \"Infoga efter {itemText}\",\n \"insertBefore\": \"Infoga före {itemText}\",\n \"insertBetween\": \"Infoga mellan {beforeItemText} och {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Sürüklemeyi başlatmak için Enter'a basın.\",\n \"dragDescriptionTouch\": \"Sürüklemeyi başlatmak için çift tıklayın.\",\n \"dragDescriptionVirtual\": \"Sürüklemeyi başlatmak için tıklayın.\",\n \"dragItem\": \"{itemText}’i sürükle\",\n \"dragSelectedItems\": \"Sürükle {count, plural, one {# seçili öge} other {# seçili öge}}\",\n \"dragStartedKeyboard\": \"Sürükleme başlatıldı. Bir bırakma hedefine gitmek için Tab’a basın, ardından bırakmak için Enter’a basın veya iptal etmek için Escape’e basın.\",\n \"dragStartedTouch\": \"Sürükleme başlatıldı. Bir bırakma hedefine gidin, ardından bırakmak için çift tıklayın.\",\n \"dragStartedVirtual\": \"Sürükleme başlatıldı. Bir bırakma hedefine gidin, ardından bırakmak için Enter’a tıklayın veya basın.\",\n \"dropCanceled\": \"Bırakma iptal edildi.\",\n \"dropComplete\": \"Bırakma tamamlandı.\",\n \"dropDescriptionKeyboard\": \"Bırakmak için Enter'a basın. Sürüklemeyi iptal etmek için Escape'e basın.\",\n \"dropDescriptionTouch\": \"Bırakmak için çift tıklayın.\",\n \"dropDescriptionVirtual\": \"Bırakmak için tıklayın.\",\n \"dropIndicator\": \"bırakma göstergesi\",\n \"dropOnItem\": \"{itemText} üzerine bırak\",\n \"dropOnRoot\": \"Bırakın\",\n \"endDragKeyboard\": \"Sürükleme. Sürüklemeyi iptal etmek için Enter'a basın.\",\n \"endDragTouch\": \"Sürükleme. Sürüklemeyi iptal etmek için çift tıklayın.\",\n \"endDragVirtual\": \"Sürükleme. Sürüklemeyi iptal etmek için tıklayın.\",\n \"insertAfter\": \"{itemText}’den sonra gir\",\n \"insertBefore\": \"{itemText}’den önce gir\",\n \"insertBetween\": \"{beforeItemText} ve {afterItemText} arasına gir\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Натисніть Enter, щоб почати перетягування.\",\n \"dragDescriptionTouch\": \"Натисніть двічі, щоб почати перетягування.\",\n \"dragDescriptionVirtual\": \"Натисніть, щоб почати перетягування.\",\n \"dragItem\": \"Перетягнути {itemText}\",\n \"dragSelectedItems\": \"Перетягніть {count, plural, one {# вибраний елемент} other {# вибраних елем}}\",\n \"dragStartedKeyboard\": \"Перетягування почалося. Натисніть Tab, щоб перейти до цілі перетягування, потім натисніть Enter, щоб перетягнути, або Escape, щоб скасувати.\",\n \"dragStartedTouch\": \"Перетягування почалося. Перейдіть до цілі перетягування, потім натисніть двічі, щоб перетягнути.\",\n \"dragStartedVirtual\": \"Перетягування почалося. Перейдіть до цілі перетягування, потім натисніть Enter, щоб перетягнути.\",\n \"dropCanceled\": \"Перетягування скасовано.\",\n \"dropComplete\": \"Перетягування завершено.\",\n \"dropDescriptionKeyboard\": \"Натисніть Enter, щоб перетягнути. Натисніть Escape, щоб скасувати перетягування.\",\n \"dropDescriptionTouch\": \"Натисніть двічі, щоб перетягнути.\",\n \"dropDescriptionVirtual\": \"Натисніть, щоб перетягнути.\",\n \"dropIndicator\": \"індикатор перетягування\",\n \"dropOnItem\": \"Перетягнути на {itemText}\",\n \"dropOnRoot\": \"Перетягнути на\",\n \"endDragKeyboard\": \"Триває перетягування. Натисніть Enter, щоб скасувати перетягування.\",\n \"endDragTouch\": \"Триває перетягування. Натисніть двічі, щоб скасувати перетягування.\",\n \"endDragVirtual\": \"Триває перетягування. Натисніть, щоб скасувати перетягування.\",\n \"insertAfter\": \"Вставити після {itemText}\",\n \"insertBefore\": \"Вставити перед {itemText}\",\n \"insertBetween\": \"Вставити між {beforeItemText} і {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"按 Enter 开始拖动。\",\n \"dragDescriptionTouch\": \"双击开始拖动。\",\n \"dragDescriptionVirtual\": \"单击开始拖动。\",\n \"dragItem\": \"拖动 {itemText}\",\n \"dragSelectedItems\": \"拖动 {count, plural, one {# 选中项目} other {# 选中项目}}\",\n \"dragStartedKeyboard\": \"已开始拖动。按 Tab 导航到放置目标,然后按 Enter 放置或按 Escape 取消。\",\n \"dragStartedTouch\": \"已开始拖动。导航到放置目标,然后双击放置。\",\n \"dragStartedVirtual\": \"已开始拖动。导航到放置目标,然后单击或按 Enter 放置。\",\n \"dropCanceled\": \"放置已取消。\",\n \"dropComplete\": \"放置已完成。\",\n \"dropDescriptionKeyboard\": \"按 Enter 放置。按 Escape 取消拖动。\",\n \"dropDescriptionTouch\": \"双击放置。\",\n \"dropDescriptionVirtual\": \"单击放置。\",\n \"dropIndicator\": \"放置标记\",\n \"dropOnItem\": \"放置于 {itemText}\",\n \"dropOnRoot\": \"放置于\",\n \"endDragKeyboard\": \"正在拖动。按 Enter 取消拖动。\",\n \"endDragTouch\": \"正在拖动。双击取消拖动。\",\n \"endDragVirtual\": \"正在拖动。单击取消拖动。\",\n \"insertAfter\": \"插入到 {itemText} 之后\",\n \"insertBefore\": \"插入到 {itemText} 之前\",\n \"insertBetween\": \"插入到 {beforeItemText} 和 {afterItemText} 之间\"\n}\n","{\n \"dragDescriptionKeyboard\": \"按 Enter 鍵以開始拖曳。\",\n \"dragDescriptionTouch\": \"輕點兩下以開始拖曳。\",\n \"dragDescriptionVirtual\": \"按一下滑鼠以開始拖曳。\",\n \"dragItem\": \"拖曳「{itemText}」\",\n \"dragSelectedItems\": \"拖曳 {count, plural, one {# 個選定項目} other {# 個選定項目}}\",\n \"dragStartedKeyboard\": \"已開始拖曳。按 Tab 鍵以瀏覽至放置目標,然後按 Enter 鍵以放置,或按 Escape 鍵以取消。\",\n \"dragStartedTouch\": \"已開始拖曳。瀏覽至放置目標,然後輕點兩下以放置。\",\n \"dragStartedVirtual\": \"已開始拖曳。瀏覽至放置目標,然後按一下滑鼠或按 Enter 鍵以放置。\",\n \"dropCanceled\": \"放置已取消。\",\n \"dropComplete\": \"放置已完成。\",\n \"dropDescriptionKeyboard\": \"按 Enter 鍵以放置。按 Escape 鍵以取消拖曳。\",\n \"dropDescriptionTouch\": \"輕點兩下以放置。\",\n \"dropDescriptionVirtual\": \"按一下滑鼠以放置。\",\n \"dropIndicator\": \"放置指示器\",\n \"dropOnItem\": \"放置在「{itemText}」上\",\n \"dropOnRoot\": \"放置在\",\n \"endDragKeyboard\": \"拖曳中。按 Enter 鍵以取消拖曳。\",\n \"endDragTouch\": \"拖曳中。輕點兩下以取消拖曳。\",\n \"endDragVirtual\": \"拖曳中。按一下滑鼠以取消拖曳。\",\n \"insertAfter\": \"插入至「{itemText}」之後\",\n \"insertBefore\": \"插入至「{itemText}」之前\",\n \"insertBetween\": \"插入至「{beforeItemText}」和「{afterItemText}」之間\"\n}\n","/*\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 {AriaButtonProps} from '@react-types/button';\nimport {DragEndEvent, DragItem, DragMoveEvent, DragStartEvent, DropOperation, PressEvent} from '@react-types/shared';\nimport {DragEvent, HTMLAttributes, useRef, useState} from 'react';\nimport * as DragManager from './DragManager';\nimport {DROP_EFFECT_TO_DROP_OPERATION, DROP_OPERATION, EFFECT_ALLOWED} from './constants';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport ReactDOM from 'react-dom';\nimport {useDescription} from '@react-aria/utils';\nimport {useDragModality} from './utils';\nimport {useMessageFormatter} from '@react-aria/i18n';\nimport {writeToDataTransfer} from './utils';\n\ninterface DragOptions {\n onDragStart?: (e: DragStartEvent) => void,\n onDragMove?: (e: DragMoveEvent) => void,\n onDragEnd?: (e: DragEndEvent) => void,\n getItems: () => DragItem[],\n renderPreview?: (items: DragItem[]) => JSX.Element,\n getAllowedDropOperations?: () => DropOperation[]\n}\n\ninterface DragResult {\n dragProps: HTMLAttributes<HTMLElement>,\n dragButtonProps: AriaButtonProps,\n isDragging: boolean\n}\n\nconst MESSAGES = {\n keyboard: {\n start: 'dragDescriptionKeyboard',\n end: 'endDragKeyboard'\n },\n touch: {\n start: 'dragDescriptionTouch',\n end: 'endDragTouch'\n },\n virtual: {\n start: 'dragDescriptionVirtual',\n end: 'endDragVirtual'\n }\n};\n\nexport function useDrag(options: DragOptions): DragResult {\n let formatMessage = useMessageFormatter(intlMessages);\n let state = useRef({\n options,\n x: 0,\n y: 0\n }).current;\n state.options = options;\n let [isDragging, setDragging] = useState(false);\n\n let onDragStart = (e: DragEvent) => {\n let items = options.getItems();\n writeToDataTransfer(e.dataTransfer, items);\n\n if (typeof options.getAllowedDropOperations === 'function') {\n let allowedOperations = options.getAllowedDropOperations();\n let allowed = DROP_OPERATION.none;\n for (let operation of allowedOperations) {\n allowed |= DROP_OPERATION[operation] || DROP_OPERATION.none;\n }\n\n e.dataTransfer.effectAllowed = EFFECT_ALLOWED[allowed] || 'none';\n }\n\n // If there is a renderPreview function, use it to render a custom preview image that will\n // appear under the pointer while dragging. If not, the element itself is dragged by the browser.\n if (typeof options.renderPreview === 'function') {\n let preview = options.renderPreview(items);\n if (preview) {\n // Create an off-screen div to render the preview into.\n let node = document.createElement('div');\n node.style.zIndex = '-100';\n node.style.position = 'absolute';\n node.style.top = '0';\n node.style.left = '-100000px';\n document.body.appendChild(node);\n\n // Call renderPreview to get a JSX element, and render it into the div with React DOM.\n ReactDOM.render(preview, node);\n\n // Compute the offset that the preview will appear under the mouse.\n // If possible, this is based on the point the user clicked on the target.\n // If the preview is much smaller, then just use the center point of the preview.\n let size = node.getBoundingClientRect();\n let rect = e.currentTarget.getBoundingClientRect();\n let x = e.clientX - rect.x;\n let y = e.clientY - rect.y;\n if (x > size.width || y > size.height) {\n x = size.width / 2;\n y = size.height / 2;\n }\n\n e.dataTransfer.setDragImage(node, x, y);\n\n // Remove the preview from the DOM after a frame so the browser has time to paint.\n requestAnimationFrame(() => {\n document.body.removeChild(node);\n });\n }\n }\n\n if (typeof options.onDragStart === 'function') {\n options.onDragStart({\n type: 'dragstart',\n x: e.clientX,\n y: e.clientY\n });\n }\n\n state.x = e.clientX;\n state.y = e.clientY;\n\n // Wait a frame before we set dragging to true so that the browser has time to\n // render the preview image before we update the element that has been dragged.\n requestAnimationFrame(() => {\n setDragging(true);\n });\n };\n\n let onDrag = (e: DragEvent) => {\n if (e.clientX === state.x && e.clientY === state.y) {\n return;\n }\n\n if (typeof options.onDragMove === 'function') {\n options.onDragMove({\n type: 'dragmove',\n x: e.clientX,\n y: e.clientY\n });\n }\n\n state.x = e.clientX;\n state.y = e.clientY;\n };\n\n let onDragEnd = (e: DragEvent) => {\n if (typeof options.onDragEnd === 'function') {\n options.onDragEnd({\n type: 'dragend',\n x: e.clientX,\n y: e.clientY,\n dropOperation: DROP_EFFECT_TO_DROP_OPERATION[e.dataTransfer.dropEffect]\n });\n }\n\n setDragging(false);\n };\n\n let onPress = (e: PressEvent) => {\n if (e.pointerType !== 'keyboard' && e.pointerType !== 'virtual') {\n return;\n }\n\n if (typeof state.options.onDragStart === 'function') {\n let rect = (e.target as HTMLElement).getBoundingClientRect();\n state.options.onDragStart({\n type: 'dragstart',\n x: rect.x + (rect.width / 2),\n y: rect.y + (rect.height / 2)\n });\n }\n\n DragManager.beginDragging({\n element: e.target as HTMLElement,\n items: state.options.getItems(),\n allowedDropOperations: typeof state.options.getAllowedDropOperations === 'function'\n ? state.options.getAllowedDropOperations()\n : ['move', 'copy', 'link'],\n onDragEnd(e) {\n setDragging(false);\n if (typeof state.options.onDragEnd === 'function') {\n state.options.onDragEnd(e);\n }\n }\n }, formatMessage);\n\n setDragging(true);\n };\n\n let modality = useDragModality();\n let descriptionProps = useDescription(\n formatMessage(!isDragging ? MESSAGES[modality].start : MESSAGES[modality].end)\n );\n\n return {\n dragProps: {\n draggable: 'true',\n onDragStart,\n onDrag,\n onDragEnd\n },\n dragButtonProps: {\n ...descriptionProps,\n onPress\n },\n isDragging\n };\n}\n","/*\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 * as DragManager from './DragManager';\nimport {HTMLAttributes} from 'react';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDescription} from '@react-aria/utils';\nimport {useDragModality} from './utils';\nimport {useMessageFormatter} from '@react-aria/i18n';\n\ninterface VirtualDropResult {\n dropProps: HTMLAttributes<HTMLElement>\n}\n\nconst MESSAGES = {\n keyboard: 'dropDescriptionKeyboard',\n touch: 'dropDescriptionTouch',\n virtual: 'dropDescriptionVirtual'\n};\n\nexport function useVirtualDrop(): VirtualDropResult {\n let formatMessage = useMessageFormatter(intlMessages);\n let modality = useDragModality();\n let dragSession = DragManager.useDragSession();\n let descriptionProps = useDescription(dragSession ? formatMessage(MESSAGES[modality]) : '');\n\n return {\n dropProps: {\n ...descriptionProps,\n // Mobile Safari does not properly bubble click events on elements except links or inputs\n // unless there is an onclick handler bound directly to the element itself. By adding this\n // handler, React will take care of adding that for us, and we are able to handle document\n // level click events in the DragManager.\n // See https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n onClick: () => {}\n }\n };\n}\n","/*\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 {DragEvent, HTMLAttributes, RefObject, useLayoutEffect, useRef, useState} from 'react';\nimport * as DragManager from './DragManager';\nimport {DragTypes, readFromDataTransfer} from './utils';\nimport {DROP_EFFECT_TO_DROP_OPERATION, DROP_OPERATION, DROP_OPERATION_ALLOWED, DROP_OPERATION_TO_DROP_EFFECT} from './constants';\nimport {DropActivateEvent, DropEnterEvent, DropEvent, DropExitEvent, DropMoveEvent, DropOperation, DragTypes as IDragTypes} from '@react-types/shared';\nimport {useVirtualDrop} from './useVirtualDrop';\n\ninterface DropOptions {\n ref: RefObject<HTMLElement>,\n getDropOperation?: (types: IDragTypes, allowedOperations: DropOperation[]) => DropOperation,\n getDropOperationForPoint?: (types: IDragTypes, allowedOperations: DropOperation[], x: number, y: number) => DropOperation,\n onDropEnter?: (e: DropEnterEvent) => void,\n onDropMove?: (e: DropMoveEvent) => void,\n // When the user hovers over the drop target for a period of time.\n // typically opens that item. macOS/iOS call this \"spring loading\".\n onDropActivate?: (e: DropActivateEvent) => void,\n onDropExit?: (e: DropExitEvent) => void,\n onDrop?: (e: DropEvent) => void\n}\n\ninterface DropResult {\n dropProps: HTMLAttributes<HTMLElement>,\n isDropTarget: boolean // (??) whether the element is currently an active drop target\n}\n\nconst DROP_ACTIVATE_TIMEOUT = 800;\n\nexport function useDrop(options: DropOptions): DropResult {\n let [isDropTarget, setDropTarget] = useState(false);\n let state = useRef({\n x: 0,\n y: 0,\n dragEnterCount: 0,\n dropEffect: 'none',\n dropActivateTimer: null\n }).current;\n\n let onDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.clientX === state.x && e.clientY === state.y) {\n e.dataTransfer.dropEffect = state.dropEffect;\n return;\n }\n\n state.x = e.clientX;\n state.y = e.clientY;\n\n if (typeof options.getDropOperationForPoint === 'function') {\n let allowedOperations = effectAllowedToOperations(e.dataTransfer.effectAllowed);\n let types = new DragTypes(e.dataTransfer);\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n let dropOperation = options.getDropOperationForPoint(types, allowedOperations, state.x - rect.x, state.y - rect.y);\n state.dropEffect = DROP_OPERATION_TO_DROP_EFFECT[dropOperation] || 'none';\n }\n\n e.dataTransfer.dropEffect = state.dropEffect;\n\n if (typeof options.onDropMove === 'function') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n options.onDropMove({\n type: 'dropmove',\n x: state.x - rect.x,\n y: state.y - rect.y\n });\n }\n\n clearTimeout(state.dropActivateTimer);\n\n if (typeof options.onDropActivate === 'function' && state.dropEffect !== 'none') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n state.dropActivateTimer = setTimeout(() => {\n options.onDropActivate({\n type: 'dropactivate',\n x: state.x - rect.x,\n y: state.y - rect.y\n });\n }, DROP_ACTIVATE_TIMEOUT);\n }\n };\n\n let onDragEnter = (e: DragEvent) => {\n e.stopPropagation();\n state.dragEnterCount++;\n if (state.dragEnterCount > 1) {\n return;\n }\n\n let allowedOperations = effectAllowedToOperations(e.dataTransfer.effectAllowed);\n let dropOperation = allowedOperations[0];\n\n if (typeof options.getDropOperation === 'function') {\n let types = new DragTypes(e.dataTransfer);\n dropOperation = options.getDropOperation(types, allowedOperations);\n }\n\n if (dropOperation !== 'cancel') {\n setDropTarget(true);\n }\n\n if (typeof options.getDropOperationForPoint === 'function') {\n let types = new DragTypes(e.dataTransfer);\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n dropOperation = options.getDropOperationForPoint(types, allowedOperations, e.clientX - rect.x, e.clientY - rect.y);\n }\n\n state.dropEffect = DROP_OPERATION_TO_DROP_EFFECT[dropOperation] || 'none';\n e.dataTransfer.dropEffect = state.dropEffect;\n\n if (typeof options.onDropEnter === 'function' && dropOperation !== 'cancel') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n options.onDropEnter({\n type: 'dropenter',\n x: e.clientX - rect.x,\n y: e.clientY - rect.y\n });\n }\n\n state.x = e.clientX;\n state.y = e.clientY;\n };\n\n let onDragLeave = (e: DragEvent) => {\n e.stopPropagation();\n state.dragEnterCount--;\n if (state.dragEnterCount > 0) {\n return;\n }\n\n if (typeof options.onDropExit === 'function' && state.dropEffect !== 'none') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n options.onDropExit({\n type: 'dropexit',\n x: e.clientX - rect.x,\n y: e.clientY - rect.y\n });\n }\n\n setDropTarget(false);\n clearTimeout(state.dropActivateTimer);\n };\n\n let onDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (typeof options.onDrop === 'function') {\n let dropOperation = DROP_EFFECT_TO_DROP_OPERATION[state.dropEffect];\n let items = readFromDataTransfer(e.dataTransfer);\n\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n let event: DropEvent = {\n type: 'drop',\n x: e.clientX - rect.x,\n y: e.clientY - rect.y,\n items,\n dropOperation\n };\n\n // Wait a frame to dispatch the drop event so that we ensure the dragend event fires first.\n // Otherwise, if onDrop removes the original dragged element from the DOM, dragend will never be fired.\n // This behavior is consistent across browsers, but see this issue for details:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=460801\n setTimeout(() => {\n options.onDrop(event);\n }, 0);\n }\n\n if (typeof options.onDropExit === 'function') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n options.onDropExit({\n type: 'dropexit',\n x: e.clientX - rect.x,\n y: e.clientY - rect.y\n });\n }\n\n state.dragEnterCount = 0;\n setDropTarget(false);\n clearTimeout(state.dropActivateTimer);\n };\n\n let optionsRef = useRef(options);\n optionsRef.current = options;\n\n useLayoutEffect(() => DragManager.registerDropTarget({\n element: optionsRef.current.ref.current,\n getDropOperation: optionsRef.current.getDropOperation,\n onDropEnter(e) {\n setDropTarget(true);\n if (typeof optionsRef.current.onDropEnter === 'function') {\n optionsRef.current.onDropEnter(e);\n }\n },\n onDropExit(e) {\n setDropTarget(false);\n if (typeof optionsRef.current.onDropExit === 'function') {\n optionsRef.current.onDropExit(e);\n }\n },\n onDrop(e) {\n if (typeof optionsRef.current.onDrop === 'function') {\n optionsRef.current.onDrop(e);\n }\n },\n onDropActivate(e) {\n if (typeof optionsRef.current.onDropActivate === 'function') {\n optionsRef.current.onDropActivate(e);\n }\n }\n }), [optionsRef]);\n\n let {dropProps} = useVirtualDrop();\n\n return {\n dropProps: {\n ...dropProps,\n onDragEnter,\n onDragOver,\n onDragLeave,\n onDrop\n },\n isDropTarget\n };\n}\n\nfunction effectAllowedToOperations(effectAllowed: string) {\n let allowedOperationsBits = DROP_OPERATION_ALLOWED[effectAllowed];\n let allowedOperations = [];\n if (allowedOperationsBits & DROP_OPERATION.move) {\n allowedOperations.push('move');\n }\n\n if (allowedOperationsBits & DROP_OPERATION.copy) {\n allowedOperations.push('copy');\n }\n\n if (allowedOperationsBits & DROP_OPERATION.link) {\n allowedOperations.push('link');\n }\n\n return allowedOperations;\n}\n","/*\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 {getScrollParent, isIOS, isWebKit} from '@react-aria/utils';\nimport {RefObject, useCallback, useEffect, useRef} from 'react';\n\nconst AUTOSCROLL_AREA_SIZE = 20;\n\nexport function useAutoScroll(ref: RefObject<Element>) {\n let scrollableRef = useRef<Element>(null);\n useEffect(() => {\n if (ref.current) {\n scrollableRef.current = getScrollParent(ref.current);\n }\n }, [ref]);\n\n let state = useRef({\n timer: null,\n dx: 0,\n dy: 0\n }).current;\n\n let scroll = useCallback(() => {\n scrollableRef.current.scrollLeft += state.dx;\n scrollableRef.current.scrollTop += state.dy;\n\n if (state.timer) {\n state.timer = requestAnimationFrame(scroll);\n }\n }, [scrollableRef, state]);\n\n return {\n move(x, y) {\n // Most browsers auto scroll natively, but WebKit on macOS does not (iOS does 🤷‍♂️).\n // https://bugs.webkit.org/show_bug.cgi?id=222636\n if (!isWebKit() || isIOS() || !scrollableRef.current) {\n return;\n }\n\n let box = scrollableRef.current.getBoundingClientRect();\n let left = AUTOSCROLL_AREA_SIZE;\n let top = AUTOSCROLL_AREA_SIZE;\n let bottom = box.height - AUTOSCROLL_AREA_SIZE;\n let right = box.width - AUTOSCROLL_AREA_SIZE;\n if (x < left || x > right || y < top || y > bottom) {\n if (x < left) {\n state.dx = x - left;\n } else if (x > right) {\n state.dx = x - right;\n }\n if (y < top) {\n state.dy = y - top;\n } else if (y > bottom) {\n state.dy = y - bottom;\n }\n\n if (!state.timer) {\n state.timer = requestAnimationFrame(scroll);\n }\n } else {\n this.stop();\n }\n },\n stop() {\n if (state.timer) {\n cancelAnimationFrame(state.timer);\n state.timer = null;\n }\n }\n };\n}\n","/*\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 {Collection, DropEvent, DropOperation, DroppableCollectionProps, DropPosition, DropTarget, KeyboardDelegate, Node} from '@react-types/shared';\nimport * as DragManager from './DragManager';\nimport {DroppableCollectionState} from '@react-stately/dnd';\nimport {getTypes} from './utils';\nimport {HTMLAttributes, Key, RefObject, useCallback, useEffect, useLayoutEffect, useRef} from 'react';\nimport {mergeProps} from '@react-aria/utils';\nimport {setInteractionModality} from '@react-aria/interactions';\nimport {useAutoScroll} from './useAutoScroll';\nimport {useDrop} from './useDrop';\nimport {useDroppableCollectionId} from './utils';\n\ninterface DroppableCollectionOptions extends DroppableCollectionProps {\n keyboardDelegate: KeyboardDelegate,\n getDropTargetFromPoint: (x: number, y: number) => DropTarget | null\n}\n\ninterface DroppableCollectionResult {\n collectionProps: HTMLAttributes<HTMLElement>\n}\n\ninterface DroppingState {\n collection: Collection<Node<unknown>>,\n focusedKey: Key,\n selectedKeys: Set<Key>,\n timeout: NodeJS.Timeout\n}\n\nconst DROP_POSITIONS: DropPosition[] = ['before', 'on', 'after'];\n\nexport function useDroppableCollection(props: DroppableCollectionOptions, state: DroppableCollectionState, ref: RefObject<HTMLElement>): DroppableCollectionResult {\n let localState = useRef({\n props,\n state,\n nextTarget: null,\n dropOperation: null\n }).current;\n localState.props = props;\n localState.state = state;\n\n let autoScroll = useAutoScroll(ref);\n let {dropProps} = useDrop({\n ref,\n onDropEnter(e) {\n let target = props.getDropTargetFromPoint(e.x, e.y);\n state.setTarget(target);\n },\n onDropMove(e) {\n state.setTarget(localState.nextTarget);\n autoScroll.move(e.x, e.y);\n },\n getDropOperationForPoint(types, allowedOperations, x, y) {\n let target = props.getDropTargetFromPoint(x, y);\n if (!target) {\n localState.dropOperation = 'cancel';\n localState.nextTarget = null;\n return 'cancel';\n }\n\n if (state.isDropTarget(target)) {\n localState.nextTarget = target;\n return localState.dropOperation;\n }\n\n localState.dropOperation = state.getDropOperation(target, types, allowedOperations);\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(rootTarget, types, allowedOperations);\n if (dropOperation !== 'cancel') {\n target = rootTarget;\n localState.dropOperation = dropOperation;\n }\n }\n\n localState.nextTarget = localState.dropOperation === 'cancel' ? null : target;\n return localState.dropOperation;\n },\n onDropExit() {\n state.setTarget(null);\n autoScroll.stop();\n },\n onDropActivate(e) {\n if (state.target?.type === 'item' && state.target?.dropPosition === 'on' && 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 if (state.target && typeof props.onDrop === 'function') {\n onDrop(e, state.target);\n }\n }\n });\n\n let droppingState = useRef<DroppingState>(null);\n let onDrop = useCallback((e: DropEvent, target: DropTarget) => {\n let {state} = localState;\n\n // Focus the collection.\n state.selectionManager.setFocused(true);\n\n // Save some state of the collection/selection before the drop occurs so we can compare later.\n let focusedKey = state.selectionManager.focusedKey;\n droppingState.current = {\n timeout: null,\n focusedKey,\n collection: state.collection,\n selectedKeys: state.selectionManager.selectedKeys\n };\n\n localState.props.onDrop({\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 an insert occurs during this time, it will be selected/focused below.\n // If items are not \"immediately\" inserted by the onDrop handler, the application will need to handle\n // selecting and focusing those items themselves.\n droppingState.current.timeout = setTimeout(() => {\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 let {state} = localState;\n if (state.selectionManager.focusedKey === focusedKey) {\n if (target.type === 'item' && target.dropPosition === 'on' && state.collection.getItem(target.key) != null) {\n state.selectionManager.setFocusedKey(target.key);\n state.selectionManager.setFocused(true);\n setInteractionModality('keyboard');\n } else if (!state.selectionManager.isSelected(focusedKey)) {\n setInteractionModality('keyboard');\n }\n }\n\n droppingState.current = null;\n }, 50);\n }, [localState]);\n\n // eslint-disable-next-line arrow-body-style\n useEffect(() => {\n return () => {\n if (droppingState.current) {\n clearTimeout(droppingState.current.timeout);\n }\n };\n }, []);\n\n useLayoutEffect(() => {\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 droppingState.current &&\n state.selectionManager.isFocused &&\n state.collection.size > droppingState.current.collection.size &&\n state.selectionManager.isSelectionEqual(droppingState.current.selectedKeys)\n ) {\n let newKeys = new Set<Key>();\n for (let key of state.collection.getKeys()) {\n if (!droppingState.current.collection.getItem(key)) {\n newKeys.add(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 === droppingState.current.focusedKey) {\n let first = newKeys.keys().next().value;\n state.selectionManager.setFocusedKey(first);\n\n if (state.selectionManager.selectionMode === 'none') {\n setInteractionModality('keyboard');\n }\n }\n\n droppingState.current = null;\n }\n });\n\n useEffect(() => {\n let getNextTarget = (target: DropTarget, wrap = true): DropTarget => {\n if (!target) {\n return {\n type: 'root'\n };\n }\n\n let {keyboardDelegate} = localState.props;\n let nextKey = target.type === 'item'\n ? keyboardDelegate.getKeyBelow(target.key)\n : keyboardDelegate.getFirstKey();\n let dropPosition: DropPosition = 'before';\n\n if (target.type === 'item') {\n let positionIndex = DROP_POSITIONS.indexOf(target.dropPosition);\n let nextDropPosition = DROP_POSITIONS[positionIndex + 1];\n if (positionIndex < DROP_POSITIONS.length - 1 && !(nextDropPosition === 'after' && nextKey != null)) {\n return {\n type: 'item',\n key: target.key,\n dropPosition: nextDropPosition\n };\n }\n\n // If the last drop position was 'after', then 'before' on the next key is equivalent.\n // Switch to 'on' instead.\n if (target.dropPosition === 'after') {\n dropPosition = 'on';\n }\n }\n\n if (nextKey == null) {\n if (wrap) {\n return {\n type: 'root'\n };\n }\n\n return null;\n }\n\n return {\n type: 'item',\n key: nextKey,\n dropPosition\n };\n };\n\n let getPreviousTarget = (target: DropTarget, wrap = true): DropTarget => {\n let {keyboardDelegate} = localState.props;\n let nextKey = target?.type === 'item'\n ? keyboardDelegate.getKeyAbove(target.key)\n : keyboardDelegate.getLastKey();\n let dropPosition: DropPosition = !target || target.type === 'root' ? 'after' : 'on';\n\n if (target?.type === 'item') {\n let positionIndex = DROP_POSITIONS.indexOf(target.dropPosition);\n let nextDropPosition = DROP_POSITIONS[positionIndex - 1];\n if (positionIndex > 0 && nextDropPosition !== 'after') {\n return {\n type: 'item',\n key: target.key,\n dropPosition: nextDropPosition\n };\n }\n\n // If the last drop position was 'before', then 'after' on the previous key is equivalent.\n // Switch to 'on' instead.\n if (target.dropPosition === 'before') {\n dropPosition = 'on';\n }\n }\n\n if (nextKey == null) {\n if (wrap) {\n return {\n type: 'root'\n };\n }\n\n return null;\n }\n\n return {\n type: 'item',\n key: nextKey,\n dropPosition\n };\n };\n\n let nextValidTarget = (\n target: DropTarget,\n types: Set<string>,\n allowedDropOperations: DropOperation[],\n getNextTarget: (target: DropTarget, wrap: boolean) => DropTarget,\n wrap = true\n ): DropTarget => {\n let seenRoot = 0;\n let operation: DropOperation;\n do {\n let nextTarget = getNextTarget(target, wrap);\n if (!nextTarget) {\n return null;\n }\n target = nextTarget;\n operation = localState.state.getDropOperation(nextTarget, types, allowedDropOperations);\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 getDropOperation(types, allowedOperations) {\n if (localState.state.target) {\n return localState.state.getDropOperation(localState.state.target, types, allowedOperations);\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;\n\n // When entering the droppable collection for the first time, the default drop target\n // is after the focused key.\n let key = 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 = localState.state.collection.getItem(key);\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 (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 // If the default target is not valid, find the next one that is.\n if (localState.state.getDropOperation(target, types, drag.allowedDropOperations) === '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 localState.state.setTarget(null);\n },\n onDropTargetEnter(target) {\n localState.state.setTarget(target);\n },\n onDropActivate(e) {\n if (\n localState.state.target?.type === 'item' &&\n localState.state.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: localState.state.target\n });\n }\n },\n onDrop(e, target) {\n if (localState.state.target && typeof localState.props.onDrop === 'function') {\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, getNextTarget);\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, getPreviousTarget);\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 nextKey = keyboardDelegate.getKeyPageBelow(\n target.type === 'item'\n ? target.key\n : keyboardDelegate.getFirstKey()\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();\n dropPosition = 'after';\n }\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 operation = localState.state.getDropOperation(target, types, drag.allowedDropOperations);\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 = keyboardDelegate.getKeyPageAbove(target.key);\n let dropPosition = target.dropPosition;\n if (nextKey == null) {\n nextKey = keyboardDelegate.getFirstKey();\n dropPosition = 'before';\n }\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 operation = localState.state.getDropOperation(target, types, drag.allowedDropOperations);\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 }\n });\n }, [localState, ref, onDrop]);\n\n let id = useDroppableCollectionId(state);\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","/*\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 * as DragManager from './DragManager';\nimport {DroppableCollectionState} from '@react-stately/dnd';\nimport {DropTarget} from '@react-types/shared';\nimport {getTypes} from './utils';\nimport {HTMLAttributes, RefObject, useEffect} from 'react';\nimport {useVirtualDrop} from './useVirtualDrop';\n\ninterface DroppableItemOptions {\n target: DropTarget\n}\n\ninterface DroppableItemResult {\n dropProps: HTMLAttributes<HTMLElement>\n}\n\nexport function useDroppableItem(options: DroppableItemOptions, state: DroppableCollectionState, ref: RefObject<HTMLElement>): DroppableItemResult {\n let {dropProps} = useVirtualDrop();\n\n useEffect(() => {\n if (ref.current) {\n return DragManager.registerDropItem({\n element: ref.current,\n target: options.target,\n getDropOperation(types, allowedOperations) {\n return state.getDropOperation(\n options.target,\n types,\n allowedOperations\n );\n }\n });\n }\n }, [ref, options.target, state]);\n\n let dragSession = DragManager.useDragSession();\n let isValidDropTarget = dragSession && state.getDropOperation(\n options.target,\n getTypes(dragSession.dragTarget.items),\n dragSession.dragTarget.allowedDropOperations\n ) !== 'cancel';\n\n let isDropTarget = state.isDropTarget(options.target);\n useEffect(() => {\n if (dragSession && isDropTarget && ref.current) {\n ref.current.focus();\n }\n }, [isDropTarget, dragSession, ref]);\n\n return {\n dropProps: {\n ...dropProps,\n 'aria-hidden': !dragSession || isValidDropTarget ? undefined : 'true'\n }\n };\n}\n","/*\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 * as DragManager from './DragManager';\nimport {DroppableCollectionState} from '@react-stately/dnd';\nimport {DropTarget} from '@react-types/shared';\nimport {getDroppableCollectionId} from './utils';\nimport {HTMLAttributes, Key, RefObject} from 'react';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDroppableItem} from './useDroppableItem';\nimport {useId} from '@react-aria/utils';\nimport {useMessageFormatter} from '@react-aria/i18n';\n\ninterface DropIndicatorProps {\n target: DropTarget\n}\n\ninterface DropIndicatorAria {\n dropIndicatorProps: HTMLAttributes<HTMLElement>\n}\n\nexport function useDropIndicator(props: DropIndicatorProps, state: DroppableCollectionState, ref: RefObject<HTMLElement>): DropIndicatorAria {\n let {target} = props;\n let {collection} = state;\n\n let formatMessage = useMessageFormatter(intlMessages);\n let dragSession = DragManager.useDragSession();\n let {dropProps} = useDroppableItem(props, state, ref);\n let id = useId();\n let getText = (key: Key) => collection.getItem(key)?.textValue;\n\n let label = '';\n let labelledBy: string;\n if (target.type === 'root') {\n label = formatMessage('dropOnRoot');\n labelledBy = `${id} ${getDroppableCollectionId(state)}`;\n } else if (target.dropPosition === 'on') {\n label = formatMessage('dropOnItem', {\n itemText: getText(target.key)\n });\n } else {\n let before = target.dropPosition === 'before'\n ? collection.getKeyBefore(target.key)\n : target.key;\n let after = target.dropPosition === 'after'\n ? collection.getKeyAfter(target.key)\n : target.key;\n\n if (before && after) {\n label = formatMessage('insertBetween', {\n beforeItemText: getText(before),\n afterItemText: getText(after)\n });\n } else if (before) {\n label = formatMessage('insertAfter', {\n itemText: getText(before)\n });\n } else if (after) {\n label = formatMessage('insertBefore', {\n itemText: getText(after)\n });\n }\n }\n\n return {\n dropIndicatorProps: {\n ...dropProps,\n id,\n 'aria-roledescription': formatMessage('dropIndicator'),\n 'aria-label': label,\n 'aria-labelledby': labelledBy,\n 'aria-hidden': !dragSession ? 'true' : dropProps['aria-hidden'],\n tabIndex: -1\n }\n };\n}\n","/*\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 {AriaButtonProps} from '@react-types/button';\nimport {DraggableCollectionState} from '@react-stately/dnd';\nimport {HTMLAttributes, Key} from 'react';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDrag} from './useDrag';\nimport {useMessageFormatter} from '@react-aria/i18n';\n\ninterface DraggableItemProps {\n key: Key\n}\n\ninterface DraggableItemResult {\n dragProps: HTMLAttributes<HTMLElement>,\n dragButtonProps: AriaButtonProps\n}\n\nexport function useDraggableItem(props: DraggableItemProps, state: DraggableCollectionState): DraggableItemResult {\n let formatMessage = useMessageFormatter(intlMessages);\n let {dragProps, dragButtonProps} = useDrag({\n getItems() {\n return state.getItems(props.key);\n },\n renderPreview() {\n return state.renderPreview(props.key);\n },\n onDragStart(e) {\n state.startDrag(props.key, e);\n },\n onDragMove(e) {\n state.moveDrag(e);\n },\n onDragEnd(e) {\n state.endDrag(e);\n }\n });\n\n let item = state.collection.getItem(props.key);\n let numSelectedKeys = state.selectionManager.selectedKeys.size;\n let isSelected = state.selectionManager.isSelected(props.key);\n let message: string;\n if (isSelected && numSelectedKeys > 1) {\n message = formatMessage('dragSelectedItems', {count: numSelectedKeys});\n } else {\n message = formatMessage('dragItem', {itemText: item?.textValue ?? ''});\n }\n\n return {\n dragProps,\n dragButtonProps: {\n ...dragButtonProps,\n 'aria-label': message\n }\n };\n}\n","/*\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 {chain} from '@react-aria/utils';\nimport {DragItem, DropItem} from '@react-types/shared';\nimport {HTMLAttributes, useEffect, useRef} from 'react';\nimport {readFromDataTransfer, writeToDataTransfer} from './utils';\nimport {useFocus} from '@react-aria/interactions';\n\ninterface ClipboardProps {\n getItems?: () => DragItem[],\n onCopy?: () => void,\n onCut?: () => void,\n onPaste?: (items: DropItem[]) => void\n}\n\ninterface ClipboardResult {\n clipboardProps: HTMLAttributes<HTMLElement>\n}\n\nconst globalEvents = new Map();\nfunction addGlobalEventListener(event, fn) {\n let eventData = globalEvents.get(event);\n if (!eventData) {\n let handlers = new Set<(e: Event) => void>();\n let listener = (e) => {\n for (let handler of handlers) {\n handler(e);\n }\n };\n\n eventData = {listener, handlers};\n globalEvents.set(event, eventData);\n\n document.addEventListener(event, listener);\n }\n\n eventData.handlers.add(fn);\n return () => {\n eventData.handlers.delete(fn);\n if (eventData.handlers.size === 0) {\n document.removeEventListener(event, eventData.listener);\n globalEvents.delete(event);\n }\n };\n}\n\nexport function useClipboard(options: ClipboardProps): ClipboardResult {\n let ref = useRef(options);\n ref.current = options;\n\n let isFocusedRef = useRef(false);\n let {focusProps} = useFocus({\n onFocusChange: (isFocused) => {\n isFocusedRef.current = isFocused;\n }\n });\n\n useEffect(() => {\n let onBeforeCopy = (e: ClipboardEvent) => {\n // Enable the \"Copy\" menu item in Safari if this element is focused and copying is supported.\n let options = ref.current;\n if (isFocusedRef.current && options.getItems) {\n e.preventDefault();\n }\n };\n\n let onCopy = (e: ClipboardEvent) => {\n let options = ref.current;\n if (!isFocusedRef.current || !options.getItems) {\n return;\n }\n\n e.preventDefault();\n writeToDataTransfer(e.clipboardData, options.getItems());\n options.onCopy?.();\n };\n\n let onBeforeCut = (e: ClipboardEvent) => {\n let options = ref.current;\n if (isFocusedRef.current && options.onCut && options.getItems) {\n e.preventDefault();\n }\n };\n\n let onCut = (e: ClipboardEvent) => {\n let options = ref.current;\n if (!isFocusedRef.current || !options.onCut || !options.getItems) {\n return;\n }\n\n e.preventDefault();\n writeToDataTransfer(e.clipboardData, options.getItems());\n options.onCut();\n };\n\n let onBeforePaste = (e: ClipboardEvent) => {\n let options = ref.current;\n // Unfortunately, e.clipboardData.types is not available in this event so we always\n // have to enable the Paste menu item even if the type of data is unsupported.\n if (isFocusedRef.current && options.onPaste) {\n e.preventDefault();\n }\n };\n\n let onPaste = (e: ClipboardEvent) => {\n let options = ref.current;\n if (!isFocusedRef.current || !options.onPaste) {\n return;\n }\n\n e.preventDefault();\n let items = readFromDataTransfer(e.clipboardData);\n options.onPaste(items);\n };\n\n return chain(\n addGlobalEventListener('beforecopy', onBeforeCopy),\n addGlobalEventListener('copy', onCopy),\n addGlobalEventListener('beforecut', onBeforeCut),\n addGlobalEventListener('cut', onCut),\n addGlobalEventListener('beforepaste', onBeforePaste),\n addGlobalEventListener('paste', onPaste)\n );\n }, []);\n\n return {\n clipboardProps: focusProps\n };\n}\n"],"names":["$parcel$interopDefault","a","__esModule","default","DROP_OPERATION","DROP_OPERATION_ALLOWED","copyMove","copy","move","copyLink","link","linkMove","all","uninitialized","EFFECT_ALLOWED","invert","DROP_EFFECT","DROP_EFFECT_TO_DROP_OPERATION","none","DROP_OPERATION_TO_DROP_EFFECT","object","res","key","NATIVE_DRAG_TYPES","Set","CUSTOM_DRAG_TYPE","GENERIC_TYPE","droppableCollectionIds","WeakMap","useDroppableCollectionId","state","id","useId","set","getDroppableCollectionId","get","Error","getTypes","items","types","item","type","Object","keys","add","mapModality","modality","window","useDragModality","useInteractionModality","getDragModality","getInteractionModality","writeToDataTransfer","dataTransfer","groupedByType","Map","needsCustomData","customData","length","dataByType","typeItems","data","push","has","join","JSON","stringify","DragTypes","constructor","includesUnknownTypes","hasFiles","kind","includes","readFromDataTransfer","hasCustomType","getData","parsed","parse","getText","Promise","resolve","e","stringItems","webkitGetAsEntry","entry","isFile","createFileItem","getAsFile","isDirectory","createDirectoryItem","size","blobToString","blob","text","reject","reader","FileReader","onload","result","onerror","readAsText","file","name","getFile","getEntries","createReader","entries","readEntries","getEntryFile","dropTargets","dropItems","dragSession","subscriptions","registerDropTarget","target","element","updateValidDropTargets","delete","registerDropItem","beginDragging","formatMessage","DragSession","requestAnimationFrame","setup","next","cb","useDragSession","session","setSession","useState","useEffect","endDragging","CANCELED_EVENTS","CLICK_EVENTS","MESSAGES","keyboard","touch","virtual","dragTarget","validDropTargets","currentDropTarget","currentDropItem","dropOperation","mutationObserver","mutationImmediate","restoreAriaHidden","onKeyDown","bind","onFocus","onBlur","onClick","cancelEvent","document","addEventListener","event","MutationObserver","setImmediate","announce","teardown","removeEventListener","disconnect","clearImmediate","cancel","altKey","activate","drop","metaKey","ctrlKey","shiftKey","previous","HTMLElement","dropTarget","find","contains","focus","setCurrentDropTarget","relatedTarget","detail","preventDefault","stopPropagation","stopImmediatePropagation","findValidDropTargets","validDropItems","values","filter","getDropOperation","allowedDropOperations","visibleDropTargets","some","ariaHideOutside","map","observe","body","subtree","attributes","attributeFilter","index","indexOf","closest","onDropExit","rect","getBoundingClientRect","x","left","width","y","top","height","onDropEnter","onDropTargetEnter","end","onDragEnd","onDrop","onDropActivate","options","start","useDrag","useMessageFormatter","intlMessages","useRef","current","isDragging","setDragging","onDragStart","getItems","getAllowedDropOperations","allowedOperations","allowed","operation","effectAllowed","renderPreview","preview","node","createElement","style","zIndex","position","appendChild","ReactDOM","render","currentTarget","clientX","clientY","setDragImage","removeChild","onDrag","onDragMove","dropEffect","onPress","pointerType","descriptionProps","useDescription","dragProps","draggable","dragButtonProps","useVirtualDrop","dropProps","DROP_ACTIVATE_TIMEOUT","useDrop","isDropTarget","setDropTarget","dragEnterCount","dropActivateTimer","onDragOver","getDropOperationForPoint","effectAllowedToOperations","onDropMove","clearTimeout","setTimeout","onDragEnter","onDragLeave","optionsRef","useLayoutEffect","ref","allowedOperationsBits","AUTOSCROLL_AREA_SIZE","useAutoScroll","scrollableRef","getScrollParent","timer","dx","dy","scroll","useCallback","scrollLeft","scrollTop","isWebKit","isIOS","box","bottom","right","stop","cancelAnimationFrame","DROP_POSITIONS","useDroppableCollection","props","localState","nextTarget","autoScroll","getDropTargetFromPoint","setTarget","rootTarget","dropPosition","droppingState","selectionManager","setFocused","focusedKey","timeout","collection","selectedKeys","getItem","setFocusedKey","setInteractionModality","isSelected","isFocused","isSelectionEqual","newKeys","getKeys","setSelectedKeys","first","value","selectionMode","getNextTarget","wrap","keyboardDelegate","nextKey","getKeyBelow","getFirstKey","positionIndex","nextDropPosition","getPreviousTarget","getKeyAbove","getLastKey","nextValidTarget","seenRoot","drag","parentKey","firstSelectedKey","lastSelectedKey","getKeyPageBelow","getKeyPageAbove","collectionProps","mergeProps","useDroppableItem","isValidDropTarget","undefined","useDropIndicator","textValue","label","labelledBy","itemText","before","getKeyBefore","after","getKeyAfter","beforeItemText","afterItemText","dropIndicatorProps","tabIndex","useDraggableItem","startDrag","moveDrag","endDrag","numSelectedKeys","message","count","globalEvents","addGlobalEventListener","fn","eventData","handlers","listener","handler","useClipboard","isFocusedRef","focusProps","useFocus","onFocusChange","onBeforeCopy","onCopy","clipboardData","onBeforeCut","onCut","onBeforePaste","onPaste","chain","clipboardProps"],"version":3,"file":"main.js.map"}
1
+ {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UIcY,yCAAc;IAAd,yCAAc,CAAd,yCAAc,CACxB,CAAI,SAAG,CAAC,IAAR,CAAI;IADM,yCAAc,CAAd,yCAAc,CAExB,CAAM,WAAG,CAAC,IAAV,CAAM;IAFI,yCAAc,CAAd,yCAAc,CAGxB,CAAI,SAAJ,CAAI,IAAJ,CAAI;IAHM,yCAAc,CAAd,yCAAc,CAIxB,CAAI,SAAJ,CAAI,IAAJ,CAAI;IAJM,yCAAc,CAAd,yCAAc,CAKxB,CAAI,SAAJ,CAAI,IAAJ,CAAI;IALM,yCAAc,CAAd,yCAAc,CAMxB,CAAG,QAAH,CAAG,IAAH,CAAG;GANO,yCAAc,KAAd,yCAAc;;AAUnB,KAAK,CAAC,yCAAsB,GAAG,CAAC;OAClC,yCAAc;IACjB,QAAQ,EAAE,yCAAc,CAAC,IAAI,GAAG,yCAAc,CAAC,IAAI;IACnD,QAAQ,EAAE,yCAAc,CAAC,IAAI,GAAG,yCAAc,CAAC,IAAI;IACnD,QAAQ,EAAE,yCAAc,CAAC,IAAI,GAAG,yCAAc,CAAC,IAAI;IACnD,GAAG,EAAE,yCAAc,CAAC,GAAG;IACvB,aAAa,EAAE,yCAAc,CAAC,GAAG;AACnC,CAAC;AAEM,KAAK,CAAC,yCAAc,GAAG,4BAAM,CAAC,yCAAsB;AACpD,KAAK,CAAC,yCAAW,GAAG,4BAAM,CAAC,yCAAc;AACzC,KAAK,CAAC,yCAA6B,GAAoC,CAAC;IAC7E,IAAI,EAAE,CAAQ;IACd,IAAI,EAAE,CAAM;IACZ,IAAI,EAAE,CAAM;IACZ,IAAI,EAAE,CAAM;AACd,CAAC;AAEM,KAAK,CAAC,yCAA6B,GAAG,4BAAM,CAAC,yCAA6B;SAExE,4BAAM,CAAC,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,GAAG,GAAG,CAAC;IAAA,CAAC;IACZ,GAAG,CAAE,GAAG,CAAC,GAAG,IAAI,MAAM,CACpB,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG;IAGxB,MAAM,CAAC,GAAG;AACZ,CAAC;AAEM,KAAK,CAAC,yCAAiB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAAA,CAAY;IAAE,CAAe;IAAE,CAAW;AAAA,CAAC;AAC9E,KAAK,CAAC,yCAAgB,GAAG,CAAuC;AAChE,KAAK,CAAC,yCAAY,GAAG,CAA0B;;;;;ADrCtD,KAAK,CAAC,4CAAsB,GAAG,GAAG,CAAC,OAAO;SAE1B,yCAAwB,CAAC,KAA+B,EAAE,CAAC;IACzE,GAAG,CAAC,EAAE,GAAG,2BAAK;IACd,4CAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE;IACpC,MAAM,CAAC,EAAE;AACX,CAAC;SAEe,yCAAwB,CAAC,KAA+B,EAAE,CAAC;IACzE,GAAG,CAAC,EAAE,GAAG,4CAAsB,CAAC,GAAG,CAAC,KAAK;IACzC,EAAE,GAAG,EAAE,EACL,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAA+C;IAGjE,MAAM,CAAC,EAAE;AACX,CAAC;SAEe,yCAAQ,CAAC,KAAiB,EAAe,CAAC;IACxD,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG;IACnB,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,KAAK,CACpB,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAC/B,KAAK,CAAC,GAAG,CAAC,IAAI;IAIlB,MAAM,CAAC,KAAK;AACd,CAAC;SAEQ,iCAAW,CAAC,QAAgB,EAAE,CAAC;IACtC,EAAE,GAAG,QAAQ,EACX,QAAQ,GAAG,CAAS;IAGtB,EAAE,EAAE,QAAQ,KAAK,CAAS,UACxB,QAAQ,GAAG,CAAS;IAGtB,EAAE,EAAE,QAAQ,KAAK,CAAS,YAAI,CAAc,iBAAI,MAAM,EACpD,QAAQ,GAAG,CAAO;IAGpB,MAAM,CAAC,QAAQ;AACjB,CAAC;SAEe,yCAAe,GAAG,CAAC;IACjC,MAAM,CAAC,iCAAW,CAAC,mDAAsB;AAC3C,CAAC;SAEe,yCAAe,GAAG,CAAC;IACjC,MAAM,CAAC,iCAAW,CAAC,mDAAsB;AAC3C,CAAC;SAEe,yCAAmB,CAAC,YAA0B,EAAE,KAAiB,EAAE,CAAC;IAClF,EAAoF,AAApF,kFAAoF;IACpF,EAAmG,AAAnG,iGAAmG;IACnG,EAA0F,AAA1F,wFAA0F;IAC1F,EAAwF,AAAxF,sFAAwF;IACxF,EAAwF,AAAxF,sFAAwF;IACxF,EAAyF,AAAzF,uFAAyF;IACzF,EAAqB,AAArB,mBAAqB;IACrB,EAAE;IACF,EAA4F,AAA5F,0FAA4F;IAC5F,EAA8F,AAA9F,4FAA8F;IAC9F,EAA4F,AAA5F,0FAA4F;IAC5F,EAAyE,AAAzE,uEAAyE;IACzE,GAAG,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG;IAC3B,GAAG,CAAC,eAAe,GAAG,KAAK;IAC3B,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IACnB,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,KAAK,CAAE,CAAC;QACvB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI;QAC5B,EAAE,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAClB,eAAe,GAAG,IAAI;QAGxB,GAAG,CAAC,UAAU,GAAG,CAAC;QAAA,CAAC;QACnB,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,KAAK,CAAE,CAAC;YACvB,GAAG,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI;YACtC,EAAE,GAAG,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,CAAC,CAAC;gBACd,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS;YACnC,CAAC,MACC,eAAe,GAAG,IAAI;YAGxB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;YACpB,UAAU,CAAC,IAAI,IAAI,IAAI;YACvB,SAAS,CAAC,IAAI,CAAC,IAAI;QACrB,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,UAAU;IAC5B,CAAC;IAED,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAK,KAAK,aAAa,CACrC,EAAE,EAAE,yCAAiB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAChC,EAA+D,AAA/D,6DAA+D;QAC/D,EAAwD,AAAxD,sDAAwD;QACxD,GAAG,CAAC,IAAI,GAAG,MAAK,CAAC,IAAI,CAAC,CAAI;QAC1B,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI;IACnC,CAAC,MACC,EAAqE,AAArE,mEAAqE;IACrE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,MAAK,CAAC,CAAC,GAAG,IAAI;IAIzC,EAAE,EAAE,eAAe,EAAE,CAAC;QACpB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU;QACpC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,yCAAgB;IAC/C,CAAC;AACH,CAAC;MAEY,yCAAS;gBAIR,YAA0B,CAAE,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG;QAEpB,GAAG,CAAC,QAAQ,GAAG,KAAK;QACpB,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,CACjC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,yCAAgB,EAAE,CAAC;YACnC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,CAAM,OACtB,QAAQ,GAAG,IAAI;YAGjB,EAAE,EAAE,IAAI,CAAC,IAAI,EACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI;iBAExB,EAA6E,AAA7E,2EAA6E;YAC7E,EAA4E,AAA5E,0EAA4E;YAC5E,EAA4E,AAA5E,0EAA4E;YAC5E,EAAmE,AAAnE,iEAAmE;YACnE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAY;QAE/B,CAAC;QAGH,EAAiH,AAAjH,+GAAiH;QACjH,EAA8G,AAA9G,4GAA8G;QAC9G,EAA4F,AAA5F,0FAA4F;QAC5F,IAAI,CAAC,oBAAoB,IAAI,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAO;IAC9E,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,CAAC;QACjB,EAAE,EAAE,IAAI,CAAC,oBAAoB,EAC3B,MAAM,CAAC,IAAI;QAGb,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI;IAC5B,CAAC;;SAGa,yCAAoB,CAAC,YAA0B,EAAE,CAAC;IAChE,GAAG,CAAC,KAAK,GAAe,CAAC,CAAC;IAE1B,EAA4E,AAA5E,0EAA4E;IAC5E,EAA6E,AAA7E,2EAA6E;IAC7E,EAAwE,AAAxE,sEAAwE;IACxE,GAAG,CAAC,aAAa,GAAG,KAAK;IACzB,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,yCAAgB,GAC9C,GAAG,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,yCAAgB;QAChD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;QAC5B,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,MAAM,CACrB,KAAK,CAAC,IAAI,CAAC,CAAC;YACV,IAAI,EAAE,CAAM;YACZ,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;YAC/B,OAAO,GAAG,IAAI,GAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;QAC9C,CAAC;QAGH,aAAa,GAAG,IAAI;IACtB,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,EAAS,AAAT,OAAS;IACX,CAAC;IAGH,EAAwE,AAAxE,sEAAwE;IACxE,EAAE,GAAG,aAAa,EAAE,CAAC;QACnB,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG;QACzB,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,CAAE,CAAC;YACpC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,CAAQ,SACxB,EAA4E,AAA5E,0EAA4E;YAC5E,EAAgF,AAAhF,8EAAgF;YAChF,EAA2E,AAA3E,yEAA2E;YAC3E,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,yCAAY,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;iBACpE,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,CAAM;gBAC7B,EAA8E,AAA9E,4EAA8E;gBAC9E,EAAgF,AAAhF,8EAAgF;gBAChF,EAA8B,AAA9B,4BAA8B;gBAC9B,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAU,WAAE,CAAC;oBAChD,GAAG,CAAC,KAAK,GAAoB,IAAI,CAAC,gBAAgB;oBAClD,EAAE,GAAG,KAAK,EAMR,QAAQ;oBAGV,EAAE,EAAE,KAAK,CAAC,MAAM,EACd,KAAK,CAAC,IAAI,CAAC,oCAAc,CAAC,IAAI,CAAC,SAAS;yBACnC,EAAE,EAAE,KAAK,CAAC,WAAW,EAC1B,KAAK,CAAC,IAAI,CAAC,yCAAmB,CAAC,KAAK;gBAExC,CAAC,MACC,EAAsB,AAAtB,oBAAsB;gBACtB,KAAK,CAAC,IAAI,CAAC,oCAAc,CAAC,IAAI,CAAC,SAAS;;QAG9C,CAAC;QAED,EAA0F,AAA1F,wFAA0F;QAC1F,EAAiE,AAAjE,+DAAiE;QACjE,EAAE,EAAE,WAAW,CAAC,IAAI,GAAG,CAAC,EACtB,KAAK,CAAC,IAAI,CAAC,CAAC;YACV,IAAI,EAAE,CAAM;YACZ,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI;YAC/B,OAAO,GAAG,IAAI,GAAK,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI;QACzD,CAAC;IAEL,CAAC;IAED,MAAM,CAAC,KAAK;AACd,CAAC;SAEQ,kCAAY,CAAC,IAAU,EAAmB,CAAC;IAClD,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAU,WACjC,MAAM,CAAC,IAAI,CAAC,IAAI;IAGlB,EAAoD,AAApD,kDAAoD;IACpD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAK,CAAC;QACvC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,UAAU;QAC3B,MAAM,CAAC,MAAM,OAAS,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,MAAM;QACvB,CAAC;QAED,MAAM,CAAC,OAAO,GAAG,MAAM;QACvB,MAAM,CAAC,UAAU,CAAC,IAAI;IACxB,CAAC;AACH,CAAC;SAEQ,oCAAc,CAAC,IAAU,EAAY,CAAC;IAC7C,MAAM,CAAC,CAAC;QACN,IAAI,EAAE,CAAM;QACZ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,yCAAY;QAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,MAAQ,kCAAY,CAAC,IAAI;;QAChC,OAAO,MAAQ,OAAO,CAAC,OAAO,CAAC,IAAI;IACrC,CAAC;AACH,CAAC;SAEQ,yCAAmB,CAAC,KAAU,EAAiB,CAAC;IACvD,MAAM,CAAC,CAAC;QACN,IAAI,EAAE,CAAW;QACjB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,MAAQ,gCAAU,CAAC,KAAK;IACpC,CAAC;AACH,CAAC;gBAEe,gCAAU,CAAC,IAA8B,EAA2C,CAAC;IACnG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY;IAE9B,EAA0E,AAA1E,wEAA0E;IAC1E,EAA+C,AAA/C,6CAA+C;IAC/C,GAAG,CAAC,OAAO;OACR,CAAC;QACF,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAK,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM;QACpC,CAAC;QAED,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,OAAO,CAAE,CAAC;YAC1B,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,kCAAY,CAAC,KAAK;sBAC7B,oCAAc,CAAC,IAAI;YAC3B,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,WAAW,QACpB,yCAAmB,CAAC,KAAK;QAEnC,CAAC;IACH,CAAC,OAAQ,OAAO,CAAC,MAAM,GAAG,CAAC;AAC7B,CAAC;SAEQ,kCAAY,CAAC,KAA0B,EAAiB,CAAC;IAChE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAK,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;;AACpE,CAAC;;;;AD7RD,GAAG,CAAC,iCAAW,GAAG,GAAG,CAAC,GAAG;AACzB,GAAG,CAAC,+BAAS,GAAG,GAAG,CAAC,GAAG;AACvB,GAAG,CAAC,iCAAW,GAAgB,IAAI;AACnC,GAAG,CAAC,mCAAa,GAAG,GAAG,CAAC,GAAG;SAaX,yCAAkB,CAAC,MAAkB,EAAE,CAAC;IACtD,iCAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;IACtC,iCAAW,EAAE,sBAAsB;IACnC,MAAM,KAAO,CAAC;QACZ,iCAAW,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;QACjC,iCAAW,EAAE,sBAAsB;IACrC,CAAC;AACH,CAAC;SAQe,yCAAgB,CAAC,IAAmB,EAAE,CAAC;IACrD,+BAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI;IAChC,MAAM,KAAO,CAAC;QACZ,+BAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;IAC/B,CAAC;AACH,CAAC;SASe,yCAAa,CAAC,MAAkB,EAAE,aAAsC,EAAE,CAAC;IACzF,EAAE,EAAE,iCAAW,EACb,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAA8C;IAGhE,iCAAW,GAAG,GAAG,CAAC,iCAAW,CAAC,MAAM,EAAE,aAAa;IACnD,qBAAqB,KAAO,CAAC;QAC3B,iCAAW,CAAC,KAAK;QAEjB,EAAE,EAAE,yCAAe,OAAO,CAAU,WAClC,iCAAW,CAAC,IAAI;IAEpB,CAAC;IAED,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,mCAAa,CAC1B,EAAE;AAEN,CAAC;SAEe,yCAAc,GAAG,CAAC;IAChC,GAAG,EAAE,OAAO,EAAE,UAAU,IAAI,qBAAQ,CAAC,iCAAW;IAEhD,sBAAS,KAAO,CAAC;QACf,GAAG,CAAC,EAAE,OAAS,UAAU,CAAC,iCAAW;;QACrC,mCAAa,CAAC,GAAG,CAAC,EAAE;QACpB,MAAM,KAAO,CAAC;YACZ,mCAAa,CAAC,MAAM,CAAC,EAAE;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,CAAC;IAEL,MAAM,CAAC,OAAO;AAChB,CAAC;SAEQ,iCAAW,GAAG,CAAC;IACtB,iCAAW,GAAG,IAAI;IAClB,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,mCAAa,CAC1B,EAAE;AAEN,CAAC;AAED,KAAK,CAAC,qCAAe,GAAG,CAAC;IACvB,CAAa;IACb,CAAa;IACb,CAAc;IACd,CAAc;IACd,CAAa;IACb,CAAY;IACZ,CAAW;IACX,CAAW;IACX,CAAW;IACX,CAAY;IACZ,CAAY;IACZ,CAAW;IACX,CAAU;IACV,CAAS;IACT,CAAY;IACZ,CAAW;IACX,CAAU;IACV,CAAO;IACP,CAAS;IACT,CAAU;AACZ,CAAC;AAED,KAAK,CAAC,kCAAY,GAAG,CAAC;IACpB,CAAW;IACX,CAAS;IACT,CAAU;AACZ,CAAC;AAED,KAAK,CAAC,8BAAQ,GAAG,CAAC;IAChB,QAAQ,EAAE,CAAqB;IAC/B,KAAK,EAAE,CAAkB;IACzB,OAAO,EAAE,CAAoB;AAC/B,CAAC;MAEK,iCAAW;gBAWH,MAAkB,EAAE,aAAsC,CAAE,CAAC;QACvE,IAAI,CAAC,UAAU,GAAG,MAAM;QACxB,IAAI,CAAC,aAAa,GAAG,aAAa;QAElC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;QACzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;IAC/C,CAAC;IAED,KAAK,GAAG,CAAC;QACP,QAAQ,CAAC,gBAAgB,CAAC,CAAS,UAAE,IAAI,CAAC,SAAS,EAAE,IAAI;QACzD,MAAM,CAAC,gBAAgB,CAAC,CAAO,QAAE,IAAI,CAAC,OAAO,EAAE,IAAI;QACnD,MAAM,CAAC,gBAAgB,CAAC,CAAM,OAAE,IAAI,CAAC,MAAM,EAAE,IAAI;QACjD,QAAQ,CAAC,gBAAgB,CAAC,CAAO,QAAE,IAAI,CAAC,OAAO,EAAE,IAAI;QAErD,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,qCAAe,CAC/B,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI;QAGzD,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,KAC1C,IAAI,CAAC,sBAAsB;;QAE7B,IAAI,CAAC,sBAAsB;QAE3B,sCAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,8BAAQ,CAAC,yCAAe;IACtD,CAAC;IAED,QAAQ,GAAG,CAAC;QACV,QAAQ,CAAC,mBAAmB,CAAC,CAAS,UAAE,IAAI,CAAC,SAAS,EAAE,IAAI;QAC5D,MAAM,CAAC,mBAAmB,CAAC,CAAO,QAAE,IAAI,CAAC,OAAO,EAAE,IAAI;QACtD,MAAM,CAAC,mBAAmB,CAAC,CAAM,OAAE,IAAI,CAAC,MAAM,EAAE,IAAI;QACpD,QAAQ,CAAC,mBAAmB,CAAC,CAAO,QAAE,IAAI,CAAC,OAAO,EAAE,IAAI;QAExD,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,qCAAe,CAC/B,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI;QAG5D,IAAI,CAAC,gBAAgB,CAAC,UAAU;QAChC,IAAI,CAAC,iBAAiB;QACtB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EACxB,cAAc,CAAC,IAAI,CAAC,iBAAiB;IAEzC,CAAC;IAED,SAAS,CAAC,CAAgB,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,CAAC;QAElB,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAQ,SAAE,CAAC;YACvB,IAAI,CAAC,MAAM;YACX,MAAM;QACR,CAAC;QAED,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAO,QAAE,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,MAAM,EACV,IAAI,CAAC,QAAQ;iBAEb,IAAI,CAAC,IAAI;YAEX,MAAM;QACR,CAAC;QAED,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAK,UAAM,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO;YACzD,EAAE,EAAE,CAAC,CAAC,QAAQ,EACZ,IAAI,CAAC,QAAQ;iBAEb,IAAI,CAAC,IAAI;;QAIb,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,KAAK,CAAU,WACzD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU;IAEvD,CAAC;IAED,OAAO,CAAC,CAAa,EAAE,CAAC;QACtB,EAA4D,AAA5D,0DAA4D;QAC5D,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EACtC,IAAI,CAAC,WAAW,CAAC,CAAC;QAGpB,EAAwF,AAAxF,sFAAwF;QACxF,EAAE,IAAI,CAAC,CAAC,MAAM,YAAY,WAAW,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAC5E,MAAM;QAGR,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAC,MAAM,GAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;;QACtF,EAAE,GAAG,UAAU,EAAE,CAAC;YAChB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EACxB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK;iBAEpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;YAE/B,MAAM;QACR,CAAC;QAED,GAAG,CAAC,IAAI,GAAG,+BAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;QACjC,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI;IAC5C,CAAC;IAED,MAAM,CAAC,CAAa,EAAE,CAAC;QACrB,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EACtC,IAAI,CAAC,WAAW,CAAC,CAAC;QAGpB,EAAkF,AAAlF,gFAAkF;QAClF,EAAqF,AAArF,mFAAqF;QACrF,EAAE,GAAG,CAAC,CAAC,aAAa,MAAM,CAAC,CAAC,aAAa,YAAY,WAAW;YAC9D,EAAE,EAAE,IAAI,CAAC,iBAAiB,EACxB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK;iBAEpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;;IAGnC,CAAC;IAED,OAAO,CAAC,CAAa,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,CAAC;QAElB,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAChB,MAAM;QAGR,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM;YACX,MAAM;QACR,CAAC;QAED,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAC,MAAM,GAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;;QACtF,EAAE,EAAE,UAAU,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,GAAG,+BAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;YACjC,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI;YAC1C,IAAI,CAAC,IAAI,CAAC,IAAI;QAChB,CAAC;IACH,CAAC;IAED,WAAW,CAAC,CAAQ,EAAE,CAAC;QACrB,EAA2D,AAA3D,yDAA2D;QAC3D,EAAE,GAAG,kCAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAC/B,CAAC,CAAC,cAAc;QAGlB,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,wBAAwB;IAC5B,CAAC;IAED,sBAAsB,GAAG,CAAC;QACxB,EAAE,GAAG,IAAI,CAAC,gBAAgB,EACxB,MAAM;QAGR,IAAI,CAAC,gBAAgB,CAAC,UAAU;QAChC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EACxB,IAAI,CAAC,iBAAiB;QAGxB,IAAI,CAAC,gBAAgB,GAAG,0CAAoB,CAAC,IAAI,CAAC,UAAU;QAC5D,EAAE,EAAE,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,GAClF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAGnD,EAA2C,AAA3C,yCAA2C;QAC3C,GAAG,CAAC,KAAK,GAAG,yCAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK;QAC1C,GAAG,CAAC,cAAc,GAAG,CAAC;eAAG,+BAAS,CAAC,MAAM;QAAE,CAAC,CAAC,MAAM,EAAC,IAAI,GAAI,CAAC;YAC3D,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAU,WAC7C,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,qBAAqB,MAAM,CAAQ;YAGzF,MAAM,CAAC,IAAI;QACb,CAAC;QAED,EAA0F,AAA1F,wFAA0F;QAC1F,EAA8D,AAA9D,4DAA8D;QAC9D,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAC,MAAM,IACzD,cAAc,CAAC,IAAI,EAAC,IAAI,GAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO;;;QAGnE,IAAI,CAAC,iBAAiB,GAAG,wCAAe,CAAC,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,OAAO;eACpB,cAAc,CAAC,GAAG,EAAC,IAAI,GAAI,IAAI,CAAC,OAAO;;eACvC,kBAAkB,CAAC,GAAG,EAAC,MAAM,GAAI,MAAM,CAAC,OAAO;;QACpD,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAAA,OAAO,EAAE,IAAI;YAAE,UAAU,EAAE,IAAI;YAAE,eAAe,EAAE,CAAC;gBAAA,CAAa;YAAA,CAAC;QAAA,CAAC;IAClH,CAAC;IAED,IAAI,GAAG,CAAC;QACN,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjD,MAAM;QACR,CAAC;QAED,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB;QAChE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjD,MAAM;QACR,CAAC;QAED,EAA8F,AAA9F,4FAA8F;QAC9F,EAAsG,AAAtG,oGAAsG;QACtG,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAC5C,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAsB,wBAAG,CAAC;gBAC7D,IAAI,CAAC,oBAAoB,CAAC,IAAI;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;YAC/B,CAAC,MACC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;eAGnD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC;IAE7D,CAAC;IAED,QAAQ,GAAG,CAAC;QACV,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAChF,MAAM;QACR,CAAC;QAED,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB;QAChE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAChF,MAAM;QACR,CAAC;QAED,EAAgG,AAAhG,8FAAgG;QAChG,EAAsG,AAAtG,oGAAsG;QACtG,EAAE,EAAE,KAAK,KAAK,CAAC;YACb,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAsB,wBAAG,CAAC;gBAC7D,IAAI,CAAC,oBAAoB,CAAC,IAAI;gBAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;YAC/B,CAAC,MACC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;eAGlF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC;IAE7D,CAAC;IAED,oBAAoB,CAAC,UAAsB,EAAE,IAAoB,EAAE,CAAC;QAClE,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1C,EAAE,EAAE,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,KAAK,CAAU,WAAE,CAAC;gBACtF,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,qBAAqB;gBAC/D,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;oBACjC,IAAI,EAAE,CAAU;oBAChB,CAAC,EAAE,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC;oBAC9B,CAAC,EAAE,IAAI,CAAC,GAAG,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,IAAI,CAAC,iBAAiB,GAAG,UAAU;YAEnC,EAAE,EAAE,UAAU,EAAE,CAAC;gBACf,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,CAAU,WAAE,CAAC;oBACjD,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,qBAAqB;oBACnD,UAAU,CAAC,WAAW,CAAC,CAAC;wBACtB,IAAI,EAAE,CAAW;wBACjB,CAAC,EAAE,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC;wBAC9B,CAAC,EAAE,IAAI,CAAC,GAAG,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC;oBAChC,CAAC,EAAE,IAAI,CAAC,UAAU;gBACpB,CAAC;gBAED,EAAE,GAAG,IAAI,EACP,UAAU,EAAE,OAAO,CAAC,KAAK;YAE7B,CAAC;QACH,CAAC;QAGD,EAAE,EAAE,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,EAAE,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,KAAK,CAAU,WACxE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM;YAGvD,IAAI,EAAE,OAAO,CAAC,KAAK;YACnB,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B,CAAC;IACH,CAAC;IAED,GAAG,GAAG,CAAC;QACL,IAAI,CAAC,QAAQ;QAEb,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,CAAU,WAAE,CAAC;YACpD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,KAAK,CAAQ,UAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU;YACjH,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB;YAC/C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACzB,IAAI,EAAE,CAAS;gBACf,CAAC,EAAE,IAAI,CAAC,CAAC,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC;gBAC3B,CAAC,EAAE,IAAI,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAC5B,aAAa,EAAE,IAAI,CAAC,aAAa;YACnC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,IAAI;QAC9B,iCAAW;IACb,CAAC;IAED,MAAM,GAAG,CAAC;QACR,IAAI,CAAC,GAAG;QACR,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAsB,wBACzD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK;QAG/B,sCAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAc;IAC5C,CAAC;IAED,IAAI,CAAC,KAAoB,EAAE,CAAC;QAC1B,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM;YACX,MAAM;QACR,CAAC;QAED,EAAE,EAAE,MAAM,CAAC,KAAI,EAAE,gBAAgB,KAAK,CAAU,WAAE,CAAC;YACjD,GAAG,CAAC,KAAK,GAAG,yCAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK;YAC1C,IAAI,CAAC,aAAa,GAAG,KAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,qBAAqB;QACzF,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,KAAK,CAAU,WAAE,CAAC;YACzE,GAAG,CAAC,KAAK,GAAG,yCAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK;YAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,qBAAqB;QAC3G,CAAC,MACC,EAAqB,AAArB,mBAAqB;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAG9D,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAU,WAAE,CAAC;YACxD,GAAG,CAAC,KAAK,GAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAC,IAAI,IAAK,CAAC;oBAC1D,IAAI,EAAE,CAAM;oBACZ,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;oBAC/B,OAAO,GAAG,IAAY,GAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;gBACtD,CAAC;;YAED,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,qBAAqB;YAC/D,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,EAAE,CAAM;gBACZ,CAAC,EAAE,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC;gBAC9B,CAAC,EAAE,IAAI,CAAC,GAAG,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC;uBAC9B,KAAK;gBACL,aAAa,EAAE,IAAI,CAAC,aAAa;YACnC,CAAC,EAAE,KAAI,EAAE,MAAM;QACjB,CAAC;QAED,IAAI,CAAC,GAAG;QACR,sCAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAc;IAC5C,CAAC;IAED,QAAQ,GAAG,CAAC;QACV,EAAE,EAAE,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,KAAK,CAAU,WAAE,CAAC;YAC1F,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,qBAAqB;YAC/D,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;gBACrC,IAAI,EAAE,CAAc;gBACpB,CAAC,EAAE,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC;gBAC9B,CAAC,EAAE,IAAI,CAAC,GAAG,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;;SAGM,0CAAoB,CAAC,OAAmB,EAAE,CAAC;IAClD,GAAG,CAAC,KAAK,GAAG,yCAAQ,CAAC,OAAO,CAAC,KAAK;IAClC,MAAM,CAAC,CAAC;WAAG,iCAAW,CAAC,MAAM;IAAE,CAAC,CAAC,MAAM,EAAC,MAAM,GAAI,CAAC;QACjD,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAsB,wBAC/C,MAAM,CAAC,KAAK;QAGd,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,KAAK,CAAU,WAC/C,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,qBAAqB,MAAM,CAAQ;QAGnF,MAAM,CAAC,IAAI;IACb,CAAC;AACH,CAAC;;;;;;AItgBD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAA2sC;;;;ACAvuC,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAqhD;;;;ACAjjD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAonD;;;;ACAhpD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAA88C;;;;ACA1+C,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAA0wD;;;;ACAtyD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAipD;;;;ACA7qD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAA4zC;;;;ACAx1C,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAumD;;;;ACAnoD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAknD;;;;ACA9oD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAglD;;;;ACA5mD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAmlD;;;;ACA/mD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAA0xC;;;;ACAtzC,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAqtD;;;;ACAjvD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAkrD;;;;ACA9sD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAuhD;;;;ACAnjD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAupC;;;;ACAnrC,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAwmC;;;;ACApoC,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAimD;;;;ACA7nD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAgkD;;;;ACA5lD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAw4C;;;;ACAp6C,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAs9C;;;;ACAl/C,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAonD;;;;ACAhpD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAA+7C;;;;ACA39C,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAwhD;;;;ACApjD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAklD;;;;ACA9mD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAwoD;;;;ACApqD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAgpD;;;;ACA5qD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAmmD;;;;ACA/nD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAgoD;;;;ACA5pD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAA24C;;;;ACAv6C,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAyhD;;;;ACArjD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAA0nD;;;;ACAtpD,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAq6B;;;;ACAj8B,yBAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAo9B;;;AlCkCh/B,yBAAc,GAAG,CAAC;IAChB,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAM;IACf,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;IAChB,CAAO,QAAE,yBAAO;AAClB,CAAC;;;;;;;;AJ7BD,KAAK,CAAC,8BAAQ,GAAG,CAAC;IAChB,QAAQ,EAAE,CAAC;QACT,KAAK,EAAE,CAAyB;QAChC,GAAG,EAAE,CAAiB;IACxB,CAAC;IACD,KAAK,EAAE,CAAC;QACN,KAAK,EAAE,CAAsB;QAC7B,GAAG,EAAE,CAAc;IACrB,CAAC;IACD,OAAO,EAAE,CAAC;QACR,KAAK,EAAE,CAAwB;QAC/B,GAAG,EAAE,CAAgB;IACvB,CAAC;AACH,CAAC;SAEe,yCAAO,CAAC,OAAoB,EAAc,CAAC;IACzD,GAAG,CAAC,aAAa,GAAG,wCAAmB,CAAC,gEAAY;IACpD,GAAG,CAAC,KAAK,GAAG,mBAAM,CAAC,CAAC;iBAClB,OAAO;QACP,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;IACN,CAAC,EAAE,OAAO;IACV,KAAK,CAAC,OAAO,GAAG,OAAO;IACvB,GAAG,EAAE,UAAU,EAAE,WAAW,IAAI,qBAAQ,CAAC,KAAK;IAE9C,GAAG,CAAC,WAAW,IAAI,CAAY,GAAK,CAAC;QACnC,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ;QAC5B,yCAAmB,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK;QAEzC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,wBAAwB,KAAK,CAAU,WAAE,CAAC;YAC3D,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC,wBAAwB;YACxD,GAAG,CAAC,OAAO,GAAG,yCAAc,CAAC,IAAI;YACjC,GAAG,EAAE,GAAG,CAAC,SAAS,IAAI,iBAAiB,CACrC,OAAO,IAAI,yCAAc,CAAC,SAAS,KAAK,yCAAc,CAAC,IAAI;YAG7D,CAAC,CAAC,YAAY,CAAC,aAAa,GAAG,yCAAc,CAAC,OAAO,KAAK,CAAM;QAClE,CAAC;QAED,EAA0F,AAA1F,wFAA0F;QAC1F,EAAiG,AAAjG,+FAAiG;QACjG,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,KAAK,CAAU,WAAE,CAAC;YAChD,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK;YACzC,EAAE,EAAE,OAAO,EAAE,CAAC;gBACZ,EAAuD,AAAvD,qDAAuD;gBACvD,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAK;gBACvC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAM;gBAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAU;gBAChC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAG;gBACpB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAW;gBAC7B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;gBAE9B,EAAsF,AAAtF,oFAAsF;gBACtF,yCAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI;gBAE7B,EAAmE,AAAnE,iEAAmE;gBACnE,EAA0E,AAA1E,wEAA0E;gBAC1E,EAAiF,AAAjF,+EAAiF;gBACjF,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,qBAAqB;gBACrC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,qBAAqB;gBAChD,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBAC1B,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBAC1B,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBACtC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;oBAClB,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;gBACrB,CAAC;gBAED,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAEtC,EAAkF,AAAlF,gFAAkF;gBAClF,qBAAqB,KAAO,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAED,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,CAAU,WAC3C,OAAO,CAAC,WAAW,CAAC,CAAC;YACnB,IAAI,EAAE,CAAW;YACjB,CAAC,EAAE,CAAC,CAAC,OAAO;YACZ,CAAC,EAAE,CAAC,CAAC,OAAO;QACd,CAAC;QAGH,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;QACnB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;QAEnB,EAA8E,AAA9E,4EAA8E;QAC9E,EAA+E,AAA/E,6EAA+E;QAC/E,qBAAqB,KAAO,CAAC;YAC3B,WAAW,CAAC,IAAI;QAClB,CAAC;IACH,CAAC;IAED,GAAG,CAAC,MAAM,IAAI,CAAY,GAAK,CAAC;QAC9B,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,EAChD,MAAM;QAGR,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,CAAU,WAC1C,OAAO,CAAC,UAAU,CAAC,CAAC;YAClB,IAAI,EAAE,CAAU;YAChB,CAAC,EAAE,CAAC,CAAC,OAAO;YACZ,CAAC,EAAE,CAAC,CAAC,OAAO;QACd,CAAC;QAGH,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;QACnB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;IACrB,CAAC;IAED,GAAG,CAAC,SAAS,IAAI,CAAY,GAAK,CAAC;QACjC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,CAAU,WACzC,OAAO,CAAC,SAAS,CAAC,CAAC;YACjB,IAAI,EAAE,CAAS;YACf,CAAC,EAAE,CAAC,CAAC,OAAO;YACZ,CAAC,EAAE,CAAC,CAAC,OAAO;YACZ,aAAa,EAAE,yCAA6B,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU;QACxE,CAAC;QAGH,WAAW,CAAC,KAAK;IACnB,CAAC;IAED,GAAG,CAAC,OAAO,IAAI,EAAa,GAAK,CAAC;QAChC,EAAE,EAAE,EAAC,CAAC,WAAW,KAAK,CAAU,aAAI,EAAC,CAAC,WAAW,KAAK,CAAS,UAC7D,MAAM;QAGR,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,CAAU,WAAE,CAAC;YACpD,GAAG,CAAC,IAAI,GAAI,EAAC,CAAC,MAAM,CAAiB,qBAAqB;YAC1D,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACzB,IAAI,EAAE,CAAW;gBACjB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAI,IAAI,CAAC,KAAK,GAAG,CAAC;gBAC3B,CAAC,EAAE,IAAI,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,yCAAyB,CAAC,CAAC;YACzB,OAAO,EAAE,EAAC,CAAC,MAAM;YACjB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;YAC7B,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,KAAK,CAAU,YAC/E,KAAK,CAAC,OAAO,CAAC,wBAAwB,KACtC,CAAC;gBAAA,CAAM;gBAAE,CAAM;gBAAE,CAAM;YAAA,CAAC;YAC5B,SAAS,EAAC,CAAC,EAAE,CAAC;gBACZ,WAAW,CAAC,KAAK;gBACjB,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,CAAU,WAC/C,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE7B,CAAC;QACH,CAAC,EAAE,aAAa;QAEhB,WAAW,CAAC,IAAI;IAClB,CAAC;IAED,GAAG,CAAC,QAAQ,GAAG,yCAAe;IAC9B,GAAG,CAAC,gBAAgB,GAAG,oCAAc,CACnC,aAAa,EAAE,UAAU,GAAG,8BAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,8BAAQ,CAAC,QAAQ,EAAE,GAAG;IAG/E,MAAM,CAAC,CAAC;QACN,SAAS,EAAE,CAAC;YACV,SAAS,EAAE,CAAM;yBACjB,WAAW;oBACX,MAAM;uBACN,SAAS;QACX,CAAC;QACD,eAAe,EAAE,CAAC;eACb,gBAAgB;qBACnB,OAAO;QACT,CAAC;oBACD,UAAU;IACZ,CAAC;AACH,CAAC;;;;;;;;;;;;;;;;AwC7LD,KAAK,CAAC,8BAAQ,GAAG,CAAC;IAChB,QAAQ,EAAE,CAAyB;IACnC,KAAK,EAAE,CAAsB;IAC7B,OAAO,EAAE,CAAwB;AACnC,CAAC;SAEe,yCAAc,GAAsB,CAAC;IACnD,GAAG,CAAC,aAAa,GAAG,wCAAmB,CAAC,gEAAY;IACpD,GAAG,CAAC,QAAQ,GAAG,yCAAe;IAC9B,GAAG,CAAC,WAAW,GAAG,yCAA0B;IAC5C,GAAG,CAAC,gBAAgB,GAAG,oCAAc,CAAC,WAAW,GAAG,aAAa,CAAC,8BAAQ,CAAC,QAAQ,KAAK,CAAE;IAE1F,MAAM,CAAC,CAAC;QACN,SAAS,EAAE,CAAC;eACP,gBAAgB;YACnB,EAAyF,AAAzF,uFAAyF;YACzF,EAA0F,AAA1F,wFAA0F;YAC1F,EAA0F,AAA1F,wFAA0F;YAC1F,EAAyC,AAAzC,uCAAyC;YACzC,EAA4E,AAA5E,0EAA4E;YAC5E,OAAO,MAAQ,CAAC;YAAA,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;;;ADTD,KAAK,CAAC,2CAAqB,GAAG,GAAG;SAEjB,yCAAO,CAAC,OAAoB,EAAc,CAAC;IACzD,GAAG,EAAE,YAAY,EAAE,aAAa,IAAI,qBAAQ,CAAC,KAAK;IAClD,GAAG,CAAC,KAAK,GAAG,mBAAM,CAAC,CAAC;QAClB,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,cAAc,EAAE,CAAC;QACjB,UAAU,EAAE,CAAM;QAClB,iBAAiB,EAAE,IAAI;IACzB,CAAC,EAAE,OAAO;IAEV,GAAG,CAAC,UAAU,IAAI,CAAY,GAAK,CAAC;QAClC,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,eAAe;QAEjB,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACnD,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;YAC5C,MAAM;QACR,CAAC;QAED,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;QACnB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;QAEnB,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,wBAAwB,KAAK,CAAU,WAAE,CAAC;YAC3D,GAAG,CAAC,iBAAiB,GAAG,+CAAyB,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa;YAC9E,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,yCAAS,CAAC,CAAC,CAAC,YAAY;YACxC,GAAG,CAAC,IAAI,GAAI,CAAC,CAAC,aAAa,CAAiB,qBAAqB;YACjE,GAAG,CAAC,aAAa,GAAG,OAAO,CAAC,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACjH,KAAK,CAAC,UAAU,GAAG,yCAA6B,CAAC,aAAa,KAAK,CAAM;QAC3E,CAAC;QAED,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;QAE5C,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,CAAU,WAAE,CAAC;YAC7C,GAAG,CAAC,IAAI,GAAI,CAAC,CAAC,aAAa,CAAiB,qBAAqB;YACjE,OAAO,CAAC,UAAU,CAAC,CAAC;gBAClB,IAAI,EAAE,CAAU;gBAChB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,YAAY,CAAC,KAAK,CAAC,iBAAiB;QAEpC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,KAAK,CAAU,aAAI,KAAK,CAAC,UAAU,KAAK,CAAM,OAAE,CAAC;YAChF,GAAG,CAAC,IAAI,GAAI,CAAC,CAAC,aAAa,CAAiB,qBAAqB;YACjE,KAAK,CAAC,iBAAiB,GAAG,UAAU,KAAO,CAAC;gBAC1C,OAAO,CAAC,cAAc,CAAC,CAAC;oBACtB,IAAI,EAAE,CAAc;oBACpB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACnB,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC,EAAE,2CAAqB;QAC1B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,WAAW,IAAI,CAAY,GAAK,CAAC;QACnC,CAAC,CAAC,eAAe;QACjB,KAAK,CAAC,cAAc;QACpB,EAAE,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,EAC1B,MAAM;QAGR,GAAG,CAAC,iBAAiB,GAAG,+CAAyB,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa;QAC9E,GAAG,CAAC,aAAa,GAAG,iBAAiB,CAAC,CAAC;QAEvC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,KAAK,CAAU,WAAE,CAAC;YACnD,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,yCAAS,CAAC,CAAC,CAAC,YAAY;YACxC,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;QACnE,CAAC;QAED,EAAE,EAAE,aAAa,KAAK,CAAQ,SAC5B,aAAa,CAAC,IAAI;QAGpB,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,wBAAwB,KAAK,CAAU,WAAE,CAAC;YAC3D,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,yCAAS,CAAC,CAAC,CAAC,YAAY;YACxC,GAAG,CAAC,IAAI,GAAI,CAAC,CAAC,aAAa,CAAiB,qBAAqB;YACjE,aAAa,GAAG,OAAO,CAAC,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QACnH,CAAC;QAED,KAAK,CAAC,UAAU,GAAG,yCAA6B,CAAC,aAAa,KAAK,CAAM;QACzE,CAAC,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU;QAE5C,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,CAAU,aAAI,aAAa,KAAK,CAAQ,SAAE,CAAC;YAC5E,GAAG,CAAC,IAAI,GAAI,CAAC,CAAC,aAAa,CAAiB,qBAAqB;YACjE,OAAO,CAAC,WAAW,CAAC,CAAC;gBACnB,IAAI,EAAE,CAAW;gBACjB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBACrB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;QACnB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;IACrB,CAAC;IAED,GAAG,CAAC,WAAW,IAAI,CAAY,GAAK,CAAC;QACnC,CAAC,CAAC,eAAe;QACjB,KAAK,CAAC,cAAc;QACpB,EAAE,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,EAC1B,MAAM;QAGR,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,CAAU,aAAI,KAAK,CAAC,UAAU,KAAK,CAAM,OAAE,CAAC;YAC5E,GAAG,CAAC,IAAI,GAAI,CAAC,CAAC,aAAa,CAAiB,qBAAqB;YACjE,OAAO,CAAC,UAAU,CAAC,CAAC;gBAClB,IAAI,EAAE,CAAU;gBAChB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBACrB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,aAAa,CAAC,KAAK;QACnB,YAAY,CAAC,KAAK,CAAC,iBAAiB;IACtC,CAAC;IAED,GAAG,CAAC,MAAM,IAAI,CAAY,GAAK,CAAC;QAC9B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,eAAe;QAEjB,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAU,WAAE,CAAC;YACzC,GAAG,CAAC,aAAa,GAAG,yCAA6B,CAAC,KAAK,CAAC,UAAU;YAClE,GAAG,CAAC,KAAK,GAAG,yCAAoB,CAAC,CAAC,CAAC,YAAY;YAE/C,GAAG,CAAC,IAAI,GAAI,CAAC,CAAC,aAAa,CAAiB,qBAAqB;YACjE,GAAG,CAAC,KAAK,GAAc,CAAC;gBACtB,IAAI,EAAE,CAAM;gBACZ,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBACrB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;uBACrB,KAAK;+BACL,aAAa;YACf,CAAC;YAED,EAA2F,AAA3F,yFAA2F;YAC3F,EAAuG,AAAvG,qGAAuG;YACvG,EAA+E,AAA/E,6EAA+E;YAC/E,EAAsD,AAAtD,oDAAsD;YACtD,UAAU,KAAO,CAAC;gBAChB,OAAO,CAAC,MAAM,CAAC,KAAK;YACtB,CAAC,EAAE,CAAC;QACN,CAAC;QAED,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,CAAU,WAAE,CAAC;YAC7C,GAAG,CAAC,IAAI,GAAI,CAAC,CAAC,aAAa,CAAiB,qBAAqB;YACjE,OAAO,CAAC,UAAU,CAAC,CAAC;gBAClB,IAAI,EAAE,CAAU;gBAChB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBACrB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,cAAc,GAAG,CAAC;QACxB,aAAa,CAAC,KAAK;QACnB,YAAY,CAAC,KAAK,CAAC,iBAAiB;IACtC,CAAC;IAED,GAAG,CAAC,UAAU,GAAG,mBAAM,CAAC,OAAO;IAC/B,UAAU,CAAC,OAAO,GAAG,OAAO;IAE5B,qCAAe,KAAO,yCAA8B,CAAC,CAAC;YACpD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO;YACvC,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,gBAAgB;YACrD,WAAW,EAAC,CAAC,EAAE,CAAC;gBACd,aAAa,CAAC,IAAI;gBAClB,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,KAAK,CAAU,WACtD,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAEpC,CAAC;YACD,UAAU,EAAC,CAAC,EAAE,CAAC;gBACb,aAAa,CAAC,KAAK;gBACnB,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,KAAK,CAAU,WACrD,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAEnC,CAAC;YACD,MAAM,EAAC,CAAC,EAAE,CAAC;gBACT,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAU,WACjD,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE/B,CAAC;YACD,cAAc,EAAC,CAAC,EAAE,CAAC;gBACjB,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,KAAK,CAAU,WACzD,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAEvC,CAAC;QACH,CAAC;MAAG,CAAC;QAAA,UAAU;IAAA,CAAC;IAEhB,GAAG,CAAC,CAAC,YAAA,SAAS,EAAA,CAAC,GAAG,yCAAc;IAEhC,MAAM,CAAC,CAAC;QACN,SAAS,EAAE,CAAC;eACP,SAAS;yBACZ,WAAW;wBACX,UAAU;yBACV,WAAW;oBACX,MAAM;QACR,CAAC;sBACD,YAAY;IACd,CAAC;AACH,CAAC;SAEQ,+CAAyB,CAAC,aAAqB,EAAE,CAAC;IACzD,GAAG,CAAC,qBAAqB,GAAG,yCAAsB,CAAC,aAAa;IAChE,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC1B,EAAE,EAAE,qBAAqB,GAAG,yCAAc,CAAC,IAAI,EAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAM;IAG/B,EAAE,EAAE,qBAAqB,GAAG,yCAAc,CAAC,IAAI,EAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAM;IAG/B,EAAE,EAAE,qBAAqB,GAAG,yCAAc,CAAC,IAAI,EAC7C,iBAAiB,CAAC,IAAI,CAAC,CAAM;IAG/B,MAAM,CAAC,iBAAiB;AAC1B,CAAC;;;;;;;;;;;;;AGjPD,KAAK,CAAC,0CAAoB,GAAG,EAAE;SAEf,yCAAa,CAAC,GAAuB,EAAE,CAAC;IACtD,GAAG,CAAC,aAAa,GAAG,mBAAM,CAAU,IAAI;IACxC,sBAAS,KAAO,CAAC;QACf,EAAE,EAAE,GAAG,CAAC,OAAO,EACb,aAAa,CAAC,OAAO,GAAG,qCAAe,CAAC,GAAG,CAAC,OAAO;IAEvD,CAAC,EAAE,CAAC;QAAA,GAAG;IAAA,CAAC;IAER,GAAG,CAAC,KAAK,GAAG,mBAAM,CAAC,CAAC;QAClB,KAAK,EAAE,IAAI;QACX,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC;IACP,CAAC,EAAE,OAAO;IAEV,GAAG,CAAC,MAAM,GAAG,wBAAW,KAAO,CAAC;QAC9B,aAAa,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,EAAE;QAC5C,aAAa,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,EAAE;QAE3C,EAAE,EAAE,KAAK,CAAC,KAAK,EACb,KAAK,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAM;IAE9C,CAAC,EAAE,CAAC;QAAA,aAAa;QAAE,KAAK;IAAA,CAAC;IAEzB,MAAM,CAAC,CAAC;QACN,IAAI,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,EAAoF,AAApF,2FAAoF;YACpF,EAAiD,AAAjD,+CAAiD;YACjD,EAAE,GAAG,8BAAQ,MAAM,2BAAK,OAAO,aAAa,CAAC,OAAO,EAClD,MAAM;YAGR,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB;YACrD,GAAG,CAAC,IAAI,GAAG,0CAAoB;YAC/B,GAAG,CAAC,GAAG,GAAG,0CAAoB;YAC9B,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,0CAAoB;YAC9C,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,0CAAoB;YAC5C,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;gBACnD,EAAE,EAAE,CAAC,GAAG,IAAI,EACV,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI;qBACd,EAAE,EAAE,CAAC,GAAG,KAAK,EAClB,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;gBAEtB,EAAE,EAAE,CAAC,GAAG,GAAG,EACT,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG;qBACb,EAAE,EAAE,CAAC,GAAG,MAAM,EACnB,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM;gBAGvB,EAAE,GAAG,KAAK,CAAC,KAAK,EACd,KAAK,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAM;YAE9C,CAAC,MACC,IAAI,CAAC,IAAI;QAEb,CAAC;QACD,IAAI,IAAG,CAAC;YACN,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,oBAAoB,CAAC,KAAK,CAAC,KAAK;gBAChC,KAAK,CAAC,KAAK,GAAG,IAAI;YACpB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;;;;;ADxCD,KAAK,CAAC,oCAAc,GAAmB,CAAC;IAAA,CAAQ;IAAE,CAAI;IAAE,CAAO;AAAA,CAAC;SAEhD,yCAAsB,CAAC,KAAiC,EAAE,MAA+B,EAAE,GAA2B,EAA6B,CAAC;IAClK,GAAG,CAAC,UAAU,GAAG,mBAAM,CAAC,CAAC;eACvB,KAAK;eACL,MAAK;QACL,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;IACrB,CAAC,EAAE,OAAO;IACV,UAAU,CAAC,KAAK,GAAG,KAAK;IACxB,UAAU,CAAC,KAAK,GAAG,MAAK;IAExB,GAAG,CAAC,UAAU,GAAG,yCAAa,CAAC,GAAG;IAClC,GAAG,CAAC,CAAC,YAAA,SAAS,EAAA,CAAC,GAAG,yCAAO,CAAC,CAAC;aACzB,GAAG;QACH,WAAW,EAAC,CAAC,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,MAAK,CAAC,SAAS,CAAC,MAAM;QACxB,CAAC;QACD,UAAU,EAAC,CAAC,EAAE,CAAC;YACb,MAAK,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU;YACrC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,wBAAwB,EAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC;YAC9C,EAAE,GAAG,MAAM,EAAE,CAAC;gBACZ,UAAU,CAAC,aAAa,GAAG,CAAQ;gBACnC,UAAU,CAAC,UAAU,GAAG,IAAI;gBAC5B,MAAM,CAAC,CAAQ;YACjB,CAAC;YAED,EAAE,EAAE,MAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;gBAC/B,UAAU,CAAC,UAAU,GAAG,MAAM;gBAC9B,MAAM,CAAC,UAAU,CAAC,aAAa;YACjC,CAAC;YAED,UAAU,CAAC,aAAa,GAAG,MAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB;YAElF,EAA6E,AAA7E,2EAA6E;YAC7E,EAAE,EAAE,UAAU,CAAC,aAAa,KAAK,CAAQ,SAAE,CAAC;gBAC1C,GAAG,CAAC,UAAU,GAAe,CAAC;oBAAA,IAAI,EAAE,CAAM;gBAAA,CAAC;gBAC3C,GAAG,CAAC,aAAa,GAAG,MAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,iBAAiB;gBAC/E,EAAE,EAAE,aAAa,KAAK,CAAQ,SAAE,CAAC;oBAC/B,MAAM,GAAG,UAAU;oBACnB,UAAU,CAAC,aAAa,GAAG,aAAa;gBAC1C,CAAC;YACH,CAAC;YAED,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,aAAa,KAAK,CAAQ,UAAG,IAAI,GAAG,MAAM;YAC7E,MAAM,CAAC,UAAU,CAAC,aAAa;QACjC,CAAC;QACD,UAAU,IAAG,CAAC;YACZ,MAAK,CAAC,SAAS,CAAC,IAAI;YACpB,UAAU,CAAC,IAAI;QACjB,CAAC;QACD,cAAc,EAAC,CAAC,EAAE,CAAC;YACjB,EAAE,EAAE,MAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAM,SAAI,MAAK,CAAC,MAAM,EAAE,YAAY,KAAK,CAAI,OAAI,MAAM,CAAC,KAAK,CAAC,cAAc,KAAK,CAAU,WACpH,KAAK,CAAC,cAAc,CAAC,CAAC;gBACpB,IAAI,EAAE,CAAc;gBACpB,CAAC,EAAE,CAAC,CAAC,CAAC;gBACN,CAAC,EAAE,CAAC,CAAC,CAAC;gBACN,MAAM,EAAE,MAAK,CAAC,MAAM;YACtB,CAAC;QAEL,CAAC;QACD,MAAM,EAAC,CAAC,EAAE,CAAC;YACT,EAAE,EAAE,MAAK,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAU,WACpD,MAAM,CAAC,CAAC,EAAE,MAAK,CAAC,MAAM;QAE1B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,aAAa,GAAG,mBAAM,CAAgB,IAAI;IAC9C,GAAG,CAAC,MAAM,GAAG,wBAAW,EAAE,CAAY,EAAE,MAAkB,GAAK,CAAC;QAC9D,GAAG,CAAC,CAAC,QAAA,MAAK,EAAA,CAAC,GAAG,UAAU;QAExB,EAAwB,AAAxB,sBAAwB;QACxB,MAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI;QAEtC,EAA8F,AAA9F,4FAA8F;QAC9F,GAAG,CAAC,UAAU,GAAG,MAAK,CAAC,gBAAgB,CAAC,UAAU;QAClD,aAAa,CAAC,OAAO,GAAG,CAAC;YACvB,OAAO,EAAE,IAAI;wBACb,UAAU;YACV,UAAU,EAAE,MAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,MAAK,CAAC,gBAAgB,CAAC,YAAY;QACnD,CAAC;QAED,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvB,IAAI,EAAE,CAAM;YACZ,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,CAAC,EAAE,CAAC,CAAC,CAAC;oBACN,MAAM;YACN,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,aAAa,EAAE,CAAC,CAAC,aAAa;QAChC,CAAC;QAED,EAAsG,AAAtG,oGAAsG;QACtG,EAAuG,AAAvG,qGAAuG;QACvG,EAAqG,AAArG,mGAAqG;QACrG,EAAiD,AAAjD,+CAAiD;QACjD,aAAa,CAAC,OAAO,CAAC,OAAO,GAAG,UAAU,KAAO,CAAC;YAChD,EAAyF,AAAzF,uFAAyF;YACzF,EAA4F,AAA5F,0FAA4F;YAC5F,EAA0F,AAA1F,wFAA0F;YAC1F,GAAG,CAAC,CAAC,QAAA,KAAK,EAAA,CAAC,GAAG,UAAU;YACxB,EAAE,EAAE,KAAK,CAAC,gBAAgB,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACrD,EAAE,EAAE,MAAM,CAAC,IAAI,KAAK,CAAM,SAAI,MAAM,CAAC,YAAY,KAAK,CAAI,OAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;oBAC3G,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG;oBAC/C,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI;oBACtC,mDAAsB,CAAC,CAAU;gBACnC,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,UAAU,GACtD,mDAAsB,CAAC,CAAU;YAErC,CAAC;YAED,aAAa,CAAC,OAAO,GAAG,IAAI;QAC9B,CAAC,EAAE,EAAE;IACP,CAAC,EAAE,CAAC;QAAA,UAAU;IAAA,CAAC;IAEf,EAA4C,AAA5C,0CAA4C;IAC5C,sBAAS,KAAO,CAAC;QACf,MAAM,KAAO,CAAC;YACZ,EAAE,EAAE,aAAa,CAAC,OAAO,EACvB,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO;QAE9C,CAAC;IACH,CAAC,EAAE,CAAC,CAAC;IAEL,qCAAe,KAAO,CAAC;QACrB,EAAuF,AAAvF,qFAAuF;QACvF,EAAyF,AAAzF,uFAAyF;QACzF,EAAwF,AAAxF,sFAAwF;QACxF,EAAE,EACA,aAAa,CAAC,OAAO,IACrB,MAAK,CAAC,gBAAgB,CAAC,SAAS,IAChC,MAAK,CAAC,UAAU,CAAC,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAC7D,MAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,GAC1E,CAAC;YACD,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG;YACrB,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,MAAK,CAAC,UAAU,CAAC,OAAO,GACtC,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,GAC/C,OAAO,CAAC,GAAG,CAAC,GAAG;YAInB,MAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO;YAE9C,EAAkF,AAAlF,gFAAkF;YAClF,EAAkF,AAAlF,gFAAkF;YAClF,EAA4C,AAA5C,0CAA4C;YAC5C,EAAE,EAAE,MAAK,CAAC,gBAAgB,CAAC,UAAU,KAAK,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC3E,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK;gBACvC,MAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK;gBAE1C,EAAE,EAAE,MAAK,CAAC,gBAAgB,CAAC,aAAa,KAAK,CAAM,OACjD,mDAAsB,CAAC,CAAU;YAErC,CAAC;YAED,aAAa,CAAC,OAAO,GAAG,IAAI;QAC9B,CAAC;IACH,CAAC;IAED,sBAAS,KAAO,CAAC;QACf,GAAG,CAAC,cAAa,IAAI,MAAkB,EAAE,IAAI,GAAG,IAAI,GAAiB,CAAC;YACpE,EAAE,GAAG,MAAM,EACT,MAAM,CAAC,CAAC;gBACN,IAAI,EAAE,CAAM;YACd,CAAC;YAGH,GAAG,CAAC,CAAC,mBAAA,gBAAgB,EAAA,CAAC,GAAG,UAAU,CAAC,KAAK;YACzC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,CAAM,QAChC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IACvC,gBAAgB,CAAC,WAAW;YAChC,GAAG,CAAC,YAAY,GAAiB,CAAQ;YAEzC,EAAE,EAAE,MAAM,CAAC,IAAI,KAAK,CAAM,OAAE,CAAC;gBAC3B,GAAG,CAAC,aAAa,GAAG,oCAAc,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY;gBAC9D,GAAG,CAAC,gBAAgB,GAAG,oCAAc,CAAC,aAAa,GAAG,CAAC;gBACvD,EAAE,EAAE,aAAa,GAAG,oCAAc,CAAC,MAAM,GAAG,CAAC,MAAM,gBAAgB,KAAK,CAAO,UAAI,OAAO,IAAI,IAAI,GAChG,MAAM,CAAC,CAAC;oBACN,IAAI,EAAE,CAAM;oBACZ,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,YAAY,EAAE,gBAAgB;gBAChC,CAAC;gBAGH,EAAsF,AAAtF,oFAAsF;gBACtF,EAA0B,AAA1B,wBAA0B;gBAC1B,EAAE,EAAE,MAAM,CAAC,YAAY,KAAK,CAAO,QACjC,YAAY,GAAG,CAAI;YAEvB,CAAC;YAED,EAAE,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;gBACpB,EAAE,EAAE,IAAI,EACN,MAAM,CAAC,CAAC;oBACN,IAAI,EAAE,CAAM;gBACd,CAAC;gBAGH,MAAM,CAAC,IAAI;YACb,CAAC;YAED,MAAM,CAAC,CAAC;gBACN,IAAI,EAAE,CAAM;gBACZ,GAAG,EAAE,OAAO;8BACZ,YAAY;YACd,CAAC;QACH,CAAC;QAED,GAAG,CAAC,iBAAiB,IAAI,MAAkB,EAAE,IAAI,GAAG,IAAI,GAAiB,CAAC;YACxE,GAAG,CAAC,CAAC,mBAAA,gBAAgB,EAAA,CAAC,GAAG,UAAU,CAAC,KAAK;YACzC,GAAG,CAAC,OAAO,GAAG,MAAM,EAAE,IAAI,KAAK,CAAM,QACjC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IACvC,gBAAgB,CAAC,UAAU;YAC/B,GAAG,CAAC,YAAY,IAAkB,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAM,QAAG,CAAO,SAAG,CAAI;YAEnF,EAAE,EAAE,MAAM,EAAE,IAAI,KAAK,CAAM,OAAE,CAAC;gBAC5B,GAAG,CAAC,aAAa,GAAG,oCAAc,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY;gBAC9D,GAAG,CAAC,gBAAgB,GAAG,oCAAc,CAAC,aAAa,GAAG,CAAC;gBACvD,EAAE,EAAE,aAAa,GAAG,CAAC,IAAI,gBAAgB,KAAK,CAAO,QACnD,MAAM,CAAC,CAAC;oBACN,IAAI,EAAE,CAAM;oBACZ,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,YAAY,EAAE,gBAAgB;gBAChC,CAAC;gBAGH,EAA0F,AAA1F,wFAA0F;gBAC1F,EAA0B,AAA1B,wBAA0B;gBAC1B,EAAE,EAAE,MAAM,CAAC,YAAY,KAAK,CAAQ,SAClC,YAAY,GAAG,CAAI;YAEvB,CAAC;YAED,EAAE,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;gBACpB,EAAE,EAAE,IAAI,EACN,MAAM,CAAC,CAAC;oBACN,IAAI,EAAE,CAAM;gBACd,CAAC;gBAGH,MAAM,CAAC,IAAI;YACb,CAAC;YAED,MAAM,CAAC,CAAC;gBACN,IAAI,EAAE,CAAM;gBACZ,GAAG,EAAE,OAAO;8BACZ,YAAY;YACd,CAAC;QACH,CAAC;QAED,GAAG,CAAC,eAAe,IACjB,MAAkB,EAClB,KAAkB,EAClB,qBAAsC,EACtC,aAAgE,EAChE,IAAI,GAAG,IAAI,GACI,CAAC;YAChB,GAAG,CAAC,QAAQ,GAAG,CAAC;YAChB,GAAG,CAAC,SAAS;eACV,CAAC;gBACF,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI;gBAC3C,EAAE,GAAG,UAAU,EACb,MAAM,CAAC,IAAI;gBAEb,MAAM,GAAG,UAAU;gBACnB,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,qBAAqB;gBACtF,EAAE,EAAE,MAAM,CAAC,IAAI,KAAK,CAAM,OACxB,QAAQ;YAEZ,CAAC,OACC,SAAS,KAAK,CAAQ,YACrB,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,KACrC,QAAQ,GAAG,CAAC;YAGd,EAAE,EAAE,SAAS,KAAK,CAAQ,SACxB,MAAM,CAAC,IAAI;YAGb,MAAM,CAAC,MAAM;QACf,CAAC;QAED,MAAM,CAAC,yCAA8B,CAAC,CAAC;YACrC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,gBAAgB,EAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC;gBAC1C,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EACzB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB;gBAG5F,EAA+C,AAA/C,6CAA+C;gBAC/C,EAA0E,AAA1E,wEAA0E;gBAC1E,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,cAAa;gBAC1E,MAAM,CAAC,MAAM,GAAG,CAAM,QAAG,CAAQ;YACnC,CAAC;YACD,WAAW,EAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBACpB,GAAG,CAAC,KAAK,GAAG,yCAAQ,CAAC,IAAI,CAAC,KAAK;gBAC/B,GAAG,CAAC,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB;gBACxD,GAAG,CAAC,MAAM;gBAEV,EAAqF,AAArF,mFAAqF;gBACrF,EAA4B,AAA5B,0BAA4B;gBAC5B,GAAG,CAAC,GAAG,GAAG,gBAAgB,CAAC,UAAU;gBACrC,GAAG,CAAC,YAAY,GAAiB,CAAO;gBAExC,EAA6D,AAA7D,2DAA6D;gBAC7D,EAAiE,AAAjE,+DAAiE;gBACjE,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG;gBAClD,EAAE,EAAE,IAAI,EAAE,IAAI,KAAK,CAAM,OACvB,GAAG,GAAG,IAAI,CAAC,SAAS;gBAGtB,EAAiG,AAAjG,+FAAiG;gBACjG,EAAqG,AAArG,mGAAqG;gBACrG,EAAkG,AAAlG,gGAAkG;gBAClG,EAAyF,AAAzF,uFAAyF;gBACzF,EAAE,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG;oBACjC,EAAE,EAAE,gBAAgB,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,gBAAgB,CAAC,gBAAgB,KAAK,GAAG,EACrF,YAAY,GAAG,CAAQ;yBAEvB,GAAG,GAAG,gBAAgB,CAAC,eAAe;;gBAI1C,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;oBAChB,MAAM,GAAG,CAAC;wBACR,IAAI,EAAE,CAAM;6BACZ,GAAG;sCACH,YAAY;oBACd,CAAC;oBAED,EAAiE,AAAjE,+DAAiE;oBACjE,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,MAAM,CAAQ,SAC3F,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAa,EAAE,KAAK,KACnF,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,KAAK;gBAE5F,CAAC;gBAED,EAA+C,AAA/C,6CAA+C;gBAC/C,EAAE,GAAG,MAAM,EACT,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAa;gBAGjF,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;YACnC,CAAC;YACD,UAAU,IAAG,CAAC;gBACZ,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;YACjC,CAAC;YACD,iBAAiB,EAAC,MAAM,EAAE,CAAC;gBACzB,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;YACnC,CAAC;YACD,cAAc,EAAC,CAAC,EAAE,CAAC;gBACjB,EAAE,EACA,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAM,SACxC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,KAAK,CAAI,OAC9C,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,KAAK,CAAU,WAErD,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;oBAC/B,IAAI,EAAE,CAAc;oBACpB,CAAC,EAAE,CAAC,CAAC,CAAC;oBACN,CAAC,EAAE,CAAC,CAAC,CAAC;oBACN,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM;gBACjC,CAAC;YAEL,CAAC;YACD,MAAM,EAAC,CAAC,EAAE,MAAM,EAAE,CAAC;gBACjB,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAU,WAC1E,MAAM,CAAC,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM;YAE/C,CAAC;YACD,SAAS,EAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBAClB,GAAG,CAAC,CAAC,mBAAA,gBAAgB,EAAA,CAAC,GAAG,UAAU,CAAC,KAAK;gBACzC,GAAG,CAAC,KAAK,GAAG,yCAAQ,CAAC,IAAI,CAAC,KAAK;gBAC/B,MAAM,CAAE,CAAC,CAAC,GAAG;oBACX,IAAI,CAAC,CAAW;wBACd,EAAE,EAAE,gBAAgB,CAAC,WAAW,EAAE,CAAC;4BACjC,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAa;4BACtG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;wBACnC,CAAC;wBACD,KAAK;oBAEP,IAAI,CAAC,CAAS;wBACZ,EAAE,EAAE,gBAAgB,CAAC,WAAW,EAAE,CAAC;4BACjC,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB;4BAC1G,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;wBACnC,CAAC;wBACD,KAAK;oBAEP,IAAI,CAAC,CAAM;wBACT,EAAE,EAAE,gBAAgB,CAAC,WAAW,EAAE,CAAC;4BACjC,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAa;4BACnF,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;wBACnC,CAAC;wBACD,KAAK;oBAEP,IAAI,CAAC,CAAK;wBACR,EAAE,EAAE,gBAAgB,CAAC,UAAU,EAAE,CAAC;4BAChC,GAAG,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB;4BACvF,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;wBACnC,CAAC;wBACD,KAAK;oBAEP,IAAI,CAAC,CAAU;wBACb,EAAE,EAAE,gBAAgB,CAAC,eAAe,EAAE,CAAC;4BACrC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM;4BACpC,EAAE,GAAG,MAAM,EACT,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAa;iCAC1E,CAAC;gCACN,EAAgG,AAAhG,8FAAgG;gCAChG,GAAG,CAAC,OAAO,GAAG,gBAAgB,CAAC,eAAe,CAC5C,MAAM,CAAC,IAAI,KAAK,CAAM,QAClB,MAAM,CAAC,GAAG,GACV,gBAAgB,CAAC,WAAW;gCAElC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,KAAK,CAAM,QAAG,MAAM,CAAC,YAAY,GAAG,CAAO;gCAEzE,EAAmG,AAAnG,iGAAmG;gCACnG,EAAE,EAAE,OAAO,IAAI,IAAI,IAAK,MAAM,CAAC,IAAI,KAAK,CAAM,SAAI,MAAM,CAAC,GAAG,KAAK,gBAAgB,CAAC,UAAU,IAAK,CAAC;oCAChG,OAAO,GAAG,gBAAgB,CAAC,UAAU;oCACrC,YAAY,GAAG,CAAO;gCACxB,CAAC;gCAED,MAAM,GAAG,CAAC;oCACR,IAAI,EAAE,CAAM;oCACZ,GAAG,EAAE,OAAO;kDACZ,YAAY;gCACd,CAAC;gCAED,EAAsE,AAAtE,oEAAsE;gCACtE,EAA2D,AAA3D,yDAA2D;gCAC3D,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB;gCAC3F,EAAE,EAAE,SAAS,KAAK,CAAQ,SACxB,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAa,EAAE,KAAK,KACnF,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,KAAK;4BAE5F,CAAC;4BAED,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM;wBAC9D,CAAC;wBACD,KAAK;oBAEP,IAAI,CAAC,CAAQ;wBAAE,CAAC;4BACd,EAAE,GAAG,gBAAgB,CAAC,eAAe,EACnC,KAAK;4BAGP,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM;4BACpC,EAAE,GAAG,MAAM,EACT,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB;iCAC9E,EAAE,EAAE,MAAM,CAAC,IAAI,KAAK,CAAM,OAAE,CAAC;gCAClC,EAA2E,AAA3E,yEAA2E;gCAC3E,EAAE,EAAE,MAAM,CAAC,GAAG,KAAK,gBAAgB,CAAC,WAAW,IAC7C,MAAM,GAAG,CAAC;oCACR,IAAI,EAAE,CAAM;gCACd,CAAC;qCACI,CAAC;oCACN,GAAG,CAAC,OAAO,GAAG,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG;oCACzD,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;oCACtC,EAAE,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;wCACpB,OAAO,GAAG,gBAAgB,CAAC,WAAW;wCACtC,YAAY,GAAG,CAAQ;oCACzB,CAAC;oCAED,MAAM,GAAG,CAAC;wCACR,IAAI,EAAE,CAAM;wCACZ,GAAG,EAAE,OAAO;sDACZ,YAAY;oCACd,CAAC;gCACH,CAAC;gCAED,EAA0E,AAA1E,wEAA0E;gCAC1E,EAAuD,AAAvD,qDAAuD;gCACvD,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB;gCAC3F,EAAE,EAAE,SAAS,KAAK,CAAQ,SACxB,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,KAAK,KACvF,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAa,EAAE,KAAK;4BAExF,CAAC;4BAED,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM;4BAC5D,KAAK;wBACP,CAAC;;YAEL,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC;QAAA,UAAU;QAAE,GAAG;QAAE,MAAM;IAAA,CAAC;IAE5B,GAAG,CAAC,EAAE,GAAG,yCAAwB,CAAC,MAAK;IACvC,MAAM,CAAC,CAAC;QACN,eAAe,EAAE,gCAAU,CAAC,SAAS,EAAE,CAAC;gBACtC,EAAE;YACF,EAAoF,AAApF,kFAAoF;YACpF,EAA6F,AAA7F,2FAA6F;YAC7F,CAAkB,mBAAE,IAAI;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;;;;;;;;;;SEhgBe,yCAAgB,CAAC,OAA6B,EAAE,KAA+B,EAAE,GAA2B,EAAuB,CAAC;IAClJ,GAAG,CAAC,CAAC,YAAA,SAAS,EAAA,CAAC,GAAG,yCAAc;IAEhC,sBAAS,KAAO,CAAC;QACf,EAAE,EAAE,GAAG,CAAC,OAAO,EACb,MAAM,CAAC,yCAA4B,CAAC,CAAC;YACnC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,gBAAgB,EAAC,KAAK,EAAE,iBAAiB,EAAE,CAAC;gBAC1C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,OAAO,CAAC,MAAM,EACd,KAAK,EACL,iBAAiB;YAErB,CAAC;QACH,CAAC;IAEL,CAAC,EAAE,CAAC;QAAA,GAAG;QAAE,OAAO,CAAC,MAAM;QAAE,KAAK;IAAA,CAAC;IAE/B,GAAG,CAAC,WAAW,GAAG,yCAA0B;IAC5C,GAAG,CAAC,iBAAiB,GAAG,WAAW,IAAI,KAAK,CAAC,gBAAgB,CAC3D,OAAO,CAAC,MAAM,EACd,yCAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,GACrC,WAAW,CAAC,UAAU,CAAC,qBAAqB,MACxC,CAAQ;IAEd,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM;IACpD,sBAAS,KAAO,CAAC;QACf,EAAE,EAAE,WAAW,IAAI,YAAY,IAAI,GAAG,CAAC,OAAO,EAC5C,GAAG,CAAC,OAAO,CAAC,KAAK;IAErB,CAAC,EAAE,CAAC;QAAA,YAAY;QAAE,WAAW;QAAE,GAAG;IAAA,CAAC;IAEnC,MAAM,CAAC,CAAC;QACN,SAAS,EAAE,CAAC;eACP,SAAS;YACZ,CAAa,eAAG,WAAW,IAAI,iBAAiB,GAAG,SAAS,GAAG,CAAM;QACvE,CAAC;IACH,CAAC;AACH,CAAC;;;;;;;;;;;;SCnCe,yCAAgB,CAAC,KAAyB,EAAE,KAA+B,EAAE,GAA2B,EAAqB,CAAC;IAC5I,GAAG,CAAC,CAAC,SAAA,MAAM,EAAA,CAAC,GAAG,KAAK;IACpB,GAAG,CAAC,CAAC,aAAA,UAAU,EAAA,CAAC,GAAG,KAAK;IAExB,GAAG,CAAC,aAAa,GAAG,wCAAmB,CAAC,gEAAY;IACpD,GAAG,CAAC,WAAW,GAAG,yCAA0B;IAC5C,GAAG,CAAC,CAAC,YAAA,SAAS,EAAA,CAAC,GAAG,yCAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG;IACpD,GAAG,CAAC,EAAE,GAAG,2BAAK;IACd,GAAG,CAAC,OAAO,IAAI,GAAQ,GAAK,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS;;IAE9D,GAAG,CAAC,KAAK,GAAG,CAAE;IACd,GAAG,CAAC,UAAU;IACd,EAAE,EAAE,MAAM,CAAC,IAAI,KAAK,CAAM,OAAE,CAAC;QAC3B,KAAK,GAAG,aAAa,CAAC,CAAY;QAClC,UAAU,MAAM,EAAE,CAAC,CAAC,EAAE,yCAAwB,CAAC,KAAK;IACtD,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,YAAY,KAAK,CAAI,KACrC,KAAK,GAAG,aAAa,CAAC,CAAY,aAAE,CAAC;QACnC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;IAC9B,CAAC;SACI,CAAC;QACN,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,KAAK,CAAQ,UACzC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAClC,MAAM,CAAC,GAAG;QACd,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,KAAK,CAAO,SACvC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IACjC,MAAM,CAAC,GAAG;QAEd,EAAE,EAAE,MAAM,IAAI,KAAK,EACjB,KAAK,GAAG,aAAa,CAAC,CAAe,gBAAE,CAAC;YACtC,cAAc,EAAE,OAAO,CAAC,MAAM;YAC9B,aAAa,EAAE,OAAO,CAAC,KAAK;QAC9B,CAAC;aACI,EAAE,EAAE,MAAM,EACf,KAAK,GAAG,aAAa,CAAC,CAAa,cAAE,CAAC;YACpC,QAAQ,EAAE,OAAO,CAAC,MAAM;QAC1B,CAAC;aACI,EAAE,EAAE,KAAK,EACd,KAAK,GAAG,aAAa,CAAC,CAAc,eAAE,CAAC;YACrC,QAAQ,EAAE,OAAO,CAAC,KAAK;QACzB,CAAC;IAEL,CAAC;IAED,MAAM,CAAC,CAAC;QACN,kBAAkB,EAAE,CAAC;eAChB,SAAS;gBACZ,EAAE;YACF,CAAsB,uBAAE,aAAa,CAAC,CAAe;YACrD,CAAY,aAAE,KAAK;YACnB,CAAiB,kBAAE,UAAU;YAC7B,CAAa,eAAG,WAAW,GAAG,CAAM,QAAG,SAAS,CAAC,CAAa;YAC9D,QAAQ,EAAE,EAAE;QACd,CAAC;IACH,CAAC;AACH,CAAC;;;;;;;;;SCxDe,yCAAgB,CAAC,KAAyB,EAAE,KAA+B,EAAuB,CAAC;IACjH,GAAG,CAAC,aAAa,GAAG,wCAAmB,CAAC,gEAAY;IACpD,GAAG,CAAC,CAAC,YAAA,SAAS,oBAAE,eAAe,EAAA,CAAC,GAAG,yCAAO,CAAC,CAAC;QAC1C,QAAQ,IAAG,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;QACjC,CAAC;QACD,aAAa,IAAG,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG;QACtC,CAAC;QACD,WAAW,EAAC,CAAC,EAAE,CAAC;YACd,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,UAAU,EAAC,CAAC,EAAE,CAAC;YACb,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClB,CAAC;QACD,SAAS,EAAC,CAAC,EAAE,CAAC;YACZ,KAAK,CAAC,OAAO,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;IAC7C,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI;IAC9D,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG;IAC5D,GAAG,CAAC,OAAO;IACX,EAAE,EAAE,UAAU,IAAI,eAAe,GAAG,CAAC,EACnC,OAAO,GAAG,aAAa,CAAC,CAAmB,oBAAE,CAAC;QAAA,KAAK,EAAE,eAAe;IAAA,CAAC;SAErE,OAAO,GAAG,aAAa,CAAC,CAAU,WAAE,CAAC;QAAA,QAAQ,EAAE,IAAI,EAAE,SAAS,IAAI,CAAE;IAAA,CAAC;IAGvE,MAAM,CAAC,CAAC;mBACN,SAAS;QACT,eAAe,EAAE,CAAC;eACb,eAAe;YAClB,CAAY,aAAE,OAAO;QACvB,CAAC;IACH,CAAC;AACH,CAAC;;;;;;;;;;ACrCD,KAAK,CAAC,kCAAY,GAAG,GAAG,CAAC,GAAG;SACnB,4CAAsB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;IAC1C,GAAG,CAAC,SAAS,GAAG,kCAAY,CAAC,GAAG,CAAC,KAAK;IACtC,EAAE,GAAG,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG;QACtB,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAK,CAAC;YACrB,GAAG,EAAE,GAAG,CAAC,OAAO,IAAI,QAAQ,CAC1B,OAAO,CAAC,CAAC;QAEb,CAAC;QAED,SAAS,GAAG,CAAC;sBAAA,QAAQ;sBAAE,QAAQ;QAAA,CAAC;QAChC,kCAAY,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS;QAEjC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ;IAC3C,CAAC;IAED,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACzB,MAAM,KAAO,CAAC;QACZ,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAC5B,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ;YACtD,kCAAY,CAAC,MAAM,CAAC,KAAK;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;SAEe,yCAAY,CAAC,QAAuB,EAAmB,CAAC;IACtE,GAAG,CAAC,GAAG,GAAG,mBAAM,CAAC,QAAO;IACxB,GAAG,CAAC,OAAO,GAAG,QAAO;IAErB,GAAG,CAAC,YAAY,GAAG,mBAAM,CAAC,KAAK;IAC/B,GAAG,CAAC,CAAC,aAAA,UAAU,EAAA,CAAC,GAAG,qCAAQ,CAAC,CAAC;QAC3B,aAAa,GAAG,SAAS,GAAK,CAAC;YAC7B,YAAY,CAAC,OAAO,GAAG,SAAS;QAClC,CAAC;IACH,CAAC;IAED,sBAAS,KAAO,CAAC;QACf,GAAG,CAAC,YAAY,IAAI,CAAiB,GAAK,CAAC;YACzC,EAA6F,AAA7F,2FAA6F;YAC7F,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;YACzB,EAAE,EAAE,YAAY,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAC1C,CAAC,CAAC,cAAc;QAEpB,CAAC;QAED,GAAG,CAAC,MAAM,IAAI,CAAiB,GAAK,CAAC;YACnC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;YACzB,EAAE,GAAG,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,EAC5C,MAAM;YAGR,CAAC,CAAC,cAAc;YAChB,yCAAmB,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ;YACrD,OAAO,CAAC,MAAM;QAChB,CAAC;QAED,GAAG,CAAC,WAAW,IAAI,CAAiB,GAAK,CAAC;YACxC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;YACzB,EAAE,EAAE,YAAY,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,EAC3D,CAAC,CAAC,cAAc;QAEpB,CAAC;QAED,GAAG,CAAC,KAAK,IAAI,CAAiB,GAAK,CAAC;YAClC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;YACzB,EAAE,GAAG,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,QAAQ,EAC9D,MAAM;YAGR,CAAC,CAAC,cAAc;YAChB,yCAAmB,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ;YACrD,OAAO,CAAC,KAAK;QACf,CAAC;QAED,GAAG,CAAC,aAAa,IAAI,CAAiB,GAAK,CAAC;YAC1C,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;YACzB,EAAmF,AAAnF,iFAAmF;YACnF,EAA8E,AAA9E,4EAA8E;YAC9E,EAAE,EAAE,YAAY,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EACzC,CAAC,CAAC,cAAc;QAEpB,CAAC;QAED,GAAG,CAAC,OAAO,IAAI,CAAiB,GAAK,CAAC;YACpC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;YACzB,EAAE,GAAG,YAAY,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAC3C,MAAM;YAGR,CAAC,CAAC,cAAc;YAChB,GAAG,CAAC,KAAK,GAAG,yCAAoB,CAAC,CAAC,CAAC,aAAa;YAChD,OAAO,CAAC,OAAO,CAAC,KAAK;QACvB,CAAC;QAED,MAAM,CAAC,2BAAK,CACV,4CAAsB,CAAC,CAAY,aAAE,YAAY,GACjD,4CAAsB,CAAC,CAAM,OAAE,MAAM,GACrC,4CAAsB,CAAC,CAAW,YAAE,WAAW,GAC/C,4CAAsB,CAAC,CAAK,MAAE,KAAK,GACnC,4CAAsB,CAAC,CAAa,cAAE,aAAa,GACnD,4CAAsB,CAAC,CAAO,QAAE,OAAO;IAE3C,CAAC,EAAE,CAAC,CAAC;IAEL,MAAM,CAAC,CAAC;QACN,cAAc,EAAE,UAAU;IAC5B,CAAC;AACH,CAAC;","sources":["packages/@react-aria/dnd/src/index.ts","packages/@react-aria/dnd/src/useDrag.ts","packages/@react-aria/dnd/src/DragManager.ts","packages/@react-aria/dnd/src/utils.ts","packages/@react-aria/dnd/src/constants.ts","packages/@react-aria/dnd/intl/*.js","packages/@react-aria/dnd/intl/ar-AE.json","packages/@react-aria/dnd/intl/bg-BG.json","packages/@react-aria/dnd/intl/cs-CZ.json","packages/@react-aria/dnd/intl/da-DK.json","packages/@react-aria/dnd/intl/de-DE.json","packages/@react-aria/dnd/intl/el-GR.json","packages/@react-aria/dnd/intl/en-US.json","packages/@react-aria/dnd/intl/es-ES.json","packages/@react-aria/dnd/intl/et-EE.json","packages/@react-aria/dnd/intl/fi-FI.json","packages/@react-aria/dnd/intl/fr-FR.json","packages/@react-aria/dnd/intl/he-IL.json","packages/@react-aria/dnd/intl/hr-HR.json","packages/@react-aria/dnd/intl/hu-HU.json","packages/@react-aria/dnd/intl/it-IT.json","packages/@react-aria/dnd/intl/ja-JP.json","packages/@react-aria/dnd/intl/ko-KR.json","packages/@react-aria/dnd/intl/lt-LT.json","packages/@react-aria/dnd/intl/lv-LV.json","packages/@react-aria/dnd/intl/nb-NO.json","packages/@react-aria/dnd/intl/nl-NL.json","packages/@react-aria/dnd/intl/pl-PL.json","packages/@react-aria/dnd/intl/pt-BR.json","packages/@react-aria/dnd/intl/pt-PT.json","packages/@react-aria/dnd/intl/ro-RO.json","packages/@react-aria/dnd/intl/ru-RU.json","packages/@react-aria/dnd/intl/sk-SK.json","packages/@react-aria/dnd/intl/sl-SI.json","packages/@react-aria/dnd/intl/sr-SP.json","packages/@react-aria/dnd/intl/sv-SE.json","packages/@react-aria/dnd/intl/tr-TR.json","packages/@react-aria/dnd/intl/uk-UA.json","packages/@react-aria/dnd/intl/zh-CN.json","packages/@react-aria/dnd/intl/zh-TW.json","packages/@react-aria/dnd/src/useDrop.ts","packages/@react-aria/dnd/src/useVirtualDrop.ts","packages/@react-aria/dnd/src/useDroppableCollection.ts","packages/@react-aria/dnd/src/useAutoScroll.ts","packages/@react-aria/dnd/src/useDroppableItem.ts","packages/@react-aria/dnd/src/useDropIndicator.ts","packages/@react-aria/dnd/src/useDraggableItem.ts","packages/@react-aria/dnd/src/useClipboard.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\nexport * from './useDrag';\nexport * from './useDrop';\nexport * from './useDroppableCollection';\nexport * from './useDroppableItem';\nexport * from './useDropIndicator';\nexport * from './useDraggableItem';\nexport * from './useClipboard';\n","/*\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 {AriaButtonProps} from '@react-types/button';\nimport {DragEndEvent, DragItem, DragMoveEvent, DragStartEvent, DropOperation, PressEvent} from '@react-types/shared';\nimport {DragEvent, HTMLAttributes, useRef, useState} from 'react';\nimport * as DragManager from './DragManager';\nimport {DROP_EFFECT_TO_DROP_OPERATION, DROP_OPERATION, EFFECT_ALLOWED} from './constants';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport ReactDOM from 'react-dom';\nimport {useDescription} from '@react-aria/utils';\nimport {useDragModality} from './utils';\nimport {useMessageFormatter} from '@react-aria/i18n';\nimport {writeToDataTransfer} from './utils';\n\ninterface DragOptions {\n onDragStart?: (e: DragStartEvent) => void,\n onDragMove?: (e: DragMoveEvent) => void,\n onDragEnd?: (e: DragEndEvent) => void,\n getItems: () => DragItem[],\n renderPreview?: (items: DragItem[]) => JSX.Element,\n getAllowedDropOperations?: () => DropOperation[]\n}\n\ninterface DragResult {\n dragProps: HTMLAttributes<HTMLElement>,\n dragButtonProps: AriaButtonProps,\n isDragging: boolean\n}\n\nconst MESSAGES = {\n keyboard: {\n start: 'dragDescriptionKeyboard',\n end: 'endDragKeyboard'\n },\n touch: {\n start: 'dragDescriptionTouch',\n end: 'endDragTouch'\n },\n virtual: {\n start: 'dragDescriptionVirtual',\n end: 'endDragVirtual'\n }\n};\n\nexport function useDrag(options: DragOptions): DragResult {\n let formatMessage = useMessageFormatter(intlMessages);\n let state = useRef({\n options,\n x: 0,\n y: 0\n }).current;\n state.options = options;\n let [isDragging, setDragging] = useState(false);\n\n let onDragStart = (e: DragEvent) => {\n let items = options.getItems();\n writeToDataTransfer(e.dataTransfer, items);\n\n if (typeof options.getAllowedDropOperations === 'function') {\n let allowedOperations = options.getAllowedDropOperations();\n let allowed = DROP_OPERATION.none;\n for (let operation of allowedOperations) {\n allowed |= DROP_OPERATION[operation] || DROP_OPERATION.none;\n }\n\n e.dataTransfer.effectAllowed = EFFECT_ALLOWED[allowed] || 'none';\n }\n\n // If there is a renderPreview function, use it to render a custom preview image that will\n // appear under the pointer while dragging. If not, the element itself is dragged by the browser.\n if (typeof options.renderPreview === 'function') {\n let preview = options.renderPreview(items);\n if (preview) {\n // Create an off-screen div to render the preview into.\n let node = document.createElement('div');\n node.style.zIndex = '-100';\n node.style.position = 'absolute';\n node.style.top = '0';\n node.style.left = '-100000px';\n document.body.appendChild(node);\n\n // Call renderPreview to get a JSX element, and render it into the div with React DOM.\n ReactDOM.render(preview, node);\n\n // Compute the offset that the preview will appear under the mouse.\n // If possible, this is based on the point the user clicked on the target.\n // If the preview is much smaller, then just use the center point of the preview.\n let size = node.getBoundingClientRect();\n let rect = e.currentTarget.getBoundingClientRect();\n let x = e.clientX - rect.x;\n let y = e.clientY - rect.y;\n if (x > size.width || y > size.height) {\n x = size.width / 2;\n y = size.height / 2;\n }\n\n e.dataTransfer.setDragImage(node, x, y);\n\n // Remove the preview from the DOM after a frame so the browser has time to paint.\n requestAnimationFrame(() => {\n document.body.removeChild(node);\n });\n }\n }\n\n if (typeof options.onDragStart === 'function') {\n options.onDragStart({\n type: 'dragstart',\n x: e.clientX,\n y: e.clientY\n });\n }\n\n state.x = e.clientX;\n state.y = e.clientY;\n\n // Wait a frame before we set dragging to true so that the browser has time to\n // render the preview image before we update the element that has been dragged.\n requestAnimationFrame(() => {\n setDragging(true);\n });\n };\n\n let onDrag = (e: DragEvent) => {\n if (e.clientX === state.x && e.clientY === state.y) {\n return;\n }\n\n if (typeof options.onDragMove === 'function') {\n options.onDragMove({\n type: 'dragmove',\n x: e.clientX,\n y: e.clientY\n });\n }\n\n state.x = e.clientX;\n state.y = e.clientY;\n };\n\n let onDragEnd = (e: DragEvent) => {\n if (typeof options.onDragEnd === 'function') {\n options.onDragEnd({\n type: 'dragend',\n x: e.clientX,\n y: e.clientY,\n dropOperation: DROP_EFFECT_TO_DROP_OPERATION[e.dataTransfer.dropEffect]\n });\n }\n\n setDragging(false);\n };\n\n let onPress = (e: PressEvent) => {\n if (e.pointerType !== 'keyboard' && e.pointerType !== 'virtual') {\n return;\n }\n\n if (typeof state.options.onDragStart === 'function') {\n let rect = (e.target as HTMLElement).getBoundingClientRect();\n state.options.onDragStart({\n type: 'dragstart',\n x: rect.x + (rect.width / 2),\n y: rect.y + (rect.height / 2)\n });\n }\n\n DragManager.beginDragging({\n element: e.target as HTMLElement,\n items: state.options.getItems(),\n allowedDropOperations: typeof state.options.getAllowedDropOperations === 'function'\n ? state.options.getAllowedDropOperations()\n : ['move', 'copy', 'link'],\n onDragEnd(e) {\n setDragging(false);\n if (typeof state.options.onDragEnd === 'function') {\n state.options.onDragEnd(e);\n }\n }\n }, formatMessage);\n\n setDragging(true);\n };\n\n let modality = useDragModality();\n let descriptionProps = useDescription(\n formatMessage(!isDragging ? MESSAGES[modality].start : MESSAGES[modality].end)\n );\n\n return {\n dragProps: {\n draggable: 'true',\n onDragStart,\n onDrag,\n onDragEnd\n },\n dragButtonProps: {\n ...descriptionProps,\n onPress\n },\n isDragging\n };\n}\n","/*\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 '@react-aria/live-announcer';\nimport {ariaHideOutside} from '@react-aria/overlays';\nimport {DragEndEvent, DragItem, DropActivateEvent, DropEnterEvent, DropEvent, DropExitEvent, DropItem, DropOperation, DropTarget as DroppableCollectionTarget} from '@react-types/shared';\nimport {getDragModality, getTypes} from './utils';\nimport {useEffect, useState} from 'react';\n\nlet dropTargets = new Map<Element, DropTarget>();\nlet dropItems = new Map<Element, DroppableItem>();\nlet dragSession: DragSession = null;\nlet subscriptions = new Set<() => void>();\n\ninterface DropTarget {\n element: HTMLElement,\n getDropOperation?: (types: Set<string>, allowedOperations: DropOperation[]) => DropOperation,\n onDropEnter?: (e: DropEnterEvent, dragTarget: DragTarget) => void,\n onDropExit?: (e: DropExitEvent) => void,\n onDropTargetEnter?: (target?: DroppableCollectionTarget) => void,\n onDropActivate?: (e: DropActivateEvent, target?: DroppableCollectionTarget) => void,\n onDrop?: (e: DropEvent, target?: DroppableCollectionTarget) => void,\n onKeyDown?: (e: KeyboardEvent, dragTarget: DragTarget) => void\n}\n\nexport function registerDropTarget(target: DropTarget) {\n dropTargets.set(target.element, target);\n dragSession?.updateValidDropTargets();\n return () => {\n dropTargets.delete(target.element);\n dragSession?.updateValidDropTargets();\n };\n}\n\ninterface DroppableItem {\n element: HTMLElement,\n target: DroppableCollectionTarget,\n getDropOperation?: (types: Set<string>, allowedOperations: DropOperation[]) => DropOperation\n}\n\nexport function registerDropItem(item: DroppableItem) {\n dropItems.set(item.element, item);\n return () => {\n dropItems.delete(item.element);\n };\n}\n\ninterface DragTarget {\n element: HTMLElement,\n items: DragItem[],\n allowedDropOperations: DropOperation[],\n onDragEnd?: (e: DragEndEvent) => void\n}\n\nexport function beginDragging(target: DragTarget, formatMessage: (key: string) => string) {\n if (dragSession) {\n throw new Error('Cannot begin dragging while already dragging');\n }\n\n dragSession = new DragSession(target, formatMessage);\n requestAnimationFrame(() => {\n dragSession.setup();\n\n if (getDragModality() === 'keyboard') {\n dragSession.next();\n }\n });\n\n for (let cb of subscriptions) {\n cb();\n }\n}\n\nexport function useDragSession() {\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\nfunction endDragging() {\n dragSession = null;\n for (let cb of subscriptions) {\n cb();\n }\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 'keyup',\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;\n currentDropItem: DroppableItem;\n dropOperation: DropOperation;\n private mutationObserver: MutationObserver;\n private mutationImmediate: NodeJS.Immediate;\n private restoreAriaHidden: () => void;\n private formatMessage: (key: string) => string;\n\n constructor(target: DragTarget, formatMessage: (key: string) => string) {\n this.dragTarget = target;\n this.formatMessage = formatMessage;\n\n this.onKeyDown = this.onKeyDown.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.cancelEvent = this.cancelEvent.bind(this);\n }\n\n setup() {\n document.addEventListener('keydown', this.onKeyDown, true);\n window.addEventListener('focus', this.onFocus, true);\n window.addEventListener('blur', this.onBlur, true);\n document.addEventListener('click', this.onClick, 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.formatMessage(MESSAGES[getDragModality()]));\n }\n\n teardown() {\n document.removeEventListener('keydown', this.onKeyDown, true);\n window.removeEventListener('focus', this.onFocus, true);\n window.removeEventListener('blur', this.onBlur, true);\n document.removeEventListener('click', this.onClick, 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 if (this.mutationImmediate) {\n clearImmediate(this.mutationImmediate);\n }\n }\n\n onKeyDown(e: KeyboardEvent) {\n this.cancelEvent(e);\n\n if (e.key === 'Escape') {\n this.cancel();\n return;\n }\n\n if (e.key === 'Enter') {\n if (e.altKey) {\n this.activate();\n } else {\n this.drop();\n }\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 onFocus(e: FocusEvent) {\n // Prevent focus events, except to the original drag target.\n if (e.target !== 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 (!(e.target instanceof HTMLElement) || e.target === this.dragTarget.element) {\n return;\n }\n\n let dropTarget = this.validDropTargets.find(target => target.element.contains(e.target as HTMLElement));\n if (!dropTarget) {\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(e.target as HTMLElement);\n this.setCurrentDropTarget(dropTarget, item);\n }\n\n onBlur(e: FocusEvent) {\n if (e.target !== 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) {\n this.cancelEvent(e);\n\n if (e.detail !== 0) {\n return;\n }\n\n if (e.target === this.dragTarget.element) {\n this.cancel();\n return;\n }\n\n let dropTarget = this.validDropTargets.find(target => target.element.contains(e.target as HTMLElement));\n if (dropTarget) {\n let item = dropItems.get(e.target as HTMLElement);\n this.setCurrentDropTarget(dropTarget, item);\n this.drop(item);\n }\n }\n\n cancelEvent(e: Event) {\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() {\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 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 => target.element.contains(item.element))\n );\n\n this.restoreAriaHidden = ariaHideOutside([\n this.dragTarget.element,\n ...validDropItems.map(item => item.element),\n ...visibleDropTargets.map(target => target.element)\n ]);\n\n this.mutationObserver.observe(document.body, {subtree: true, attributes: true, attributeFilter: ['aria-hidden']});\n }\n\n next() {\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\"]')) {\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() {\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\"]')) {\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 setCurrentDropTarget(dropTarget: DropTarget, item?: DroppableItem) {\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\n if (item !== this.currentDropItem) {\n if (item && typeof this.currentDropTarget.onDropTargetEnter === 'function') {\n this.currentDropTarget.onDropTargetEnter(item?.target);\n }\n\n item?.element.focus();\n this.currentDropItem = item;\n }\n }\n\n end() {\n this.teardown();\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\n });\n }\n\n this.setCurrentDropTarget(null);\n endDragging();\n }\n\n cancel() {\n this.end();\n if (!this.dragTarget.element.closest('[aria-hidden=\"true\"]')) {\n this.dragTarget.element.focus();\n }\n\n announce(this.formatMessage('dropCanceled'));\n }\n\n drop(item?: DroppableItem) {\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);\n }\n\n this.end();\n announce(this.formatMessage('dropComplete'));\n }\n\n activate() {\n if (this.currentDropTarget && typeof this.currentDropTarget.onDropActivate === 'function') {\n let rect = this.currentDropTarget.element.getBoundingClientRect();\n this.currentDropTarget.onDropActivate({\n type: 'dropactivate',\n x: rect.left + (rect.width / 2),\n y: rect.top + (rect.height / 2)\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\"]')) {\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","/*\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 {CUSTOM_DRAG_TYPE, GENERIC_TYPE, NATIVE_DRAG_TYPES} from './constants';\nimport {DirectoryItem, DragItem, DropItem, FileItem, DragTypes as IDragTypes} from '@react-types/shared';\nimport {DroppableCollectionState} from '@react-stately/dnd';\nimport {getInteractionModality, useInteractionModality} from '@react-aria/interactions';\nimport {useId} from '@react-aria/utils';\n\nconst droppableCollectionIds = new WeakMap<DroppableCollectionState, string>();\n\nexport function useDroppableCollectionId(state: DroppableCollectionState) {\n let id = useId();\n droppableCollectionIds.set(state, id);\n return id;\n}\n\nexport function getDroppableCollectionId(state: DroppableCollectionState) {\n let id = droppableCollectionIds.get(state);\n if (!id) {\n throw new Error('Droppable item outside a droppable collection');\n }\n\n return id;\n}\n\nexport function getTypes(items: DragItem[]): Set<string> {\n let types = new Set<string>();\n for (let item of items) {\n for (let type of Object.keys(item)) {\n types.add(type);\n }\n }\n\n return types;\n}\n\nfunction mapModality(modality: string) {\n if (!modality) {\n modality = 'virtual';\n }\n\n if (modality === 'pointer') {\n modality = 'virtual';\n }\n\n if (modality === 'virtual' && 'ontouchstart' in window) {\n modality = 'touch';\n }\n\n return modality;\n}\n\nexport function useDragModality() {\n return mapModality(useInteractionModality());\n}\n\nexport function getDragModality() {\n return mapModality(getInteractionModality());\n}\n\nexport function writeToDataTransfer(dataTransfer: DataTransfer, items: DragItem[]) {\n // The data transfer API doesn't support more than one item of a given type at once.\n // In addition, only a small set of types are supported natively for transfer between applications.\n // We allow for both multiple items, as well as multiple representations of a single item.\n // In order to make our API work with the native API, we serialize all items to JSON and\n // store as a single native item. We only need to do this if there is more than one item\n // of the same type, or if an item has more than one representation. Otherwise the native\n // API is sufficient.\n //\n // The DataTransferItemList API also theoretically supports adding files, which would enable\n // dragging binary data out of the browser onto the user's desktop for example. Unfortunately,\n // this does not currently work in any browser, so it is not currently supported by our API.\n // See e.g. https://bugs.chromium.org/p/chromium/issues/detail?id=438479.\n let groupedByType = new Map<string, string[]>();\n let needsCustomData = false;\n let customData = [];\n for (let item of items) {\n let types = Object.keys(item);\n if (types.length > 1) {\n needsCustomData = true;\n }\n\n let dataByType = {};\n for (let type of types) {\n let typeItems = groupedByType.get(type);\n if (!typeItems) {\n typeItems = [];\n groupedByType.set(type, typeItems);\n } else {\n needsCustomData = true;\n }\n\n let data = item[type];\n dataByType[type] = data;\n typeItems.push(data);\n }\n\n customData.push(dataByType);\n }\n\n for (let [type, items] of groupedByType) {\n if (NATIVE_DRAG_TYPES.has(type)) {\n // Only one item of a given type can be set on a data transfer.\n // Join all of the items together separated by newlines.\n let data = items.join('\\n');\n dataTransfer.items.add(data, type);\n } else {\n // Set data to the first item so we have access to the list of types.\n dataTransfer.items.add(items[0], type);\n }\n }\n\n if (needsCustomData) {\n let data = JSON.stringify(customData);\n dataTransfer.items.add(data, CUSTOM_DRAG_TYPE);\n }\n}\n\nexport class DragTypes implements IDragTypes {\n private types: Set<string>;\n private includesUnknownTypes: boolean;\n\n constructor(dataTransfer: DataTransfer) {\n this.types = new Set<string>();\n\n let hasFiles = false;\n for (let item of dataTransfer.items) {\n if (item.type !== CUSTOM_DRAG_TYPE) {\n if (item.kind === 'file') {\n hasFiles = true;\n }\n\n if (item.type) {\n this.types.add(item.type);\n } else {\n // Files with unknown types or extensions that don't map to a known mime type\n // are sometimes exposed as an empty string by the browser. Map to a generic\n // mime type instead. Note that this could also be a directory as there's no\n // way to determine if something is a file or directory until drop.\n this.types.add(GENERIC_TYPE);\n }\n }\n }\n\n // In Safari, when dragging files, the dataTransfer.items list is empty, but dataTransfer.types contains \"Files\".\n // Unfortunately, this doesn't tell us what types of files the user is dragging, so we need to assume that any\n // type the user checks for is included. See https://bugs.webkit.org/show_bug.cgi?id=223517.\n this.includesUnknownTypes = !hasFiles && dataTransfer.types.includes('Files');\n }\n\n has(type: string) {\n if (this.includesUnknownTypes) {\n return true;\n }\n\n return this.types.has(type);\n }\n}\n\nexport function readFromDataTransfer(dataTransfer: DataTransfer) {\n let items: DropItem[] = [];\n\n // If our custom drag type is available, use that. This is a JSON serialized\n // representation of all items in the drag, set when there are multiple items\n // of the same type, or an individual item has multiple representations.\n let hasCustomType = false;\n if (dataTransfer.types.includes(CUSTOM_DRAG_TYPE)) {\n try {\n let data = dataTransfer.getData(CUSTOM_DRAG_TYPE);\n let parsed = JSON.parse(data);\n for (let item of parsed) {\n items.push({\n kind: 'text',\n types: new Set(Object.keys(item)),\n getText: (type) => Promise.resolve(item[type])\n });\n }\n\n hasCustomType = true;\n } catch (e) {\n // ignore\n }\n }\n\n // Otherwise, map native drag items to items of a single representation.\n if (!hasCustomType) {\n let stringItems = new Map();\n for (let item of dataTransfer.items) {\n if (item.kind === 'string') {\n // The data for all formats must be read here because the data transfer gets\n // cleared out after the event handler finishes. If the item has an empty string\n // as a type, the mime type is unknown. Map to a generic mime type instead.\n stringItems.set(item.type || GENERIC_TYPE, dataTransfer.getData(item.type));\n } else if (item.kind === 'file') {\n // Despite the name, webkitGetAsEntry is also implemented in Firefox and Edge.\n // In the future, we may use getAsFileSystemHandle instead, but that's currently\n // only implemented in Chrome.\n if (typeof item.webkitGetAsEntry === 'function') {\n let entry: FileSystemEntry = item.webkitGetAsEntry();\n if (!entry) {\n // For some reason, Firefox includes an item with type image/png when copy\n // and pasting any file or directory (no matter the type), but returns `null` for both\n // item.getAsFile() and item.webkitGetAsEntry(). Safari works as expected. Ignore this\n // item if this happens. See https://bugzilla.mozilla.org/show_bug.cgi?id=1699743.\n // This was recently fixed in Chrome Canary: https://bugs.chromium.org/p/chromium/issues/detail?id=1175483.\n continue;\n }\n\n if (entry.isFile) {\n items.push(createFileItem(item.getAsFile()));\n } else if (entry.isDirectory) {\n items.push(createDirectoryItem(entry));\n }\n } else {\n // Assume it's a file.\n items.push(createFileItem(item.getAsFile()));\n }\n }\n }\n\n // All string items are different representations of the same item. There's no way to have\n // multiple string items at once in the current DataTransfer API.\n if (stringItems.size > 0) {\n items.push({\n kind: 'text',\n types: new Set(stringItems.keys()),\n getText: (type) => Promise.resolve(stringItems.get(type))\n });\n }\n }\n\n return items;\n}\n\nfunction blobToString(blob: Blob): Promise<string> {\n if (typeof blob.text === 'function') {\n return blob.text();\n }\n\n // Safari doesn't have the Blob#text() method yet...\n return new Promise((resolve, reject) => {\n let reader = new FileReader;\n reader.onload = () => {\n resolve(reader.result as string);\n };\n\n reader.onerror = reject;\n reader.readAsText(blob);\n });\n}\n\nfunction createFileItem(file: File): FileItem {\n return {\n kind: 'file',\n type: file.type || GENERIC_TYPE,\n name: file.name,\n getText: () => blobToString(file),\n getFile: () => Promise.resolve(file)\n };\n}\n\nfunction createDirectoryItem(entry: any): DirectoryItem {\n return {\n kind: 'directory',\n name: entry.name,\n getEntries: () => getEntries(entry)\n };\n}\n\nasync function *getEntries(item: FileSystemDirectoryEntry): AsyncIterable<FileItem | DirectoryItem> {\n let reader = item.createReader();\n\n // We must call readEntries repeatedly because there may be a limit to the\n // number of entries that are returned at once.\n let entries: FileSystemEntry[];\n do {\n entries = await new Promise((resolve, reject) => {\n reader.readEntries(resolve, reject);\n });\n\n for (let entry of entries) {\n if (entry.isFile) {\n let file = await getEntryFile(entry as FileSystemFileEntry);\n yield createFileItem(file);\n } else if (entry.isDirectory) {\n yield createDirectoryItem(entry);\n }\n }\n } while (entries.length > 0);\n}\n\nfunction getEntryFile(entry: FileSystemFileEntry): Promise<File> {\n return new Promise((resolve, reject) => entry.file(resolve, reject));\n}\n","/*\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 {DropOperation} from '@react-types/shared';\n\nexport enum DROP_OPERATION {\n none = 0,\n cancel = 0,\n move = 1 << 0,\n copy = 1 << 1,\n link = 1 << 2,\n all = move | copy | link\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/effectAllowed\nexport const DROP_OPERATION_ALLOWED = {\n ...DROP_OPERATION,\n copyMove: DROP_OPERATION.copy | DROP_OPERATION.move,\n copyLink: DROP_OPERATION.copy | DROP_OPERATION.link,\n linkMove: DROP_OPERATION.link | DROP_OPERATION.move,\n all: DROP_OPERATION.all,\n uninitialized: DROP_OPERATION.all\n};\n\nexport const EFFECT_ALLOWED = invert(DROP_OPERATION_ALLOWED);\nexport const DROP_EFFECT = invert(DROP_OPERATION);\nexport const DROP_EFFECT_TO_DROP_OPERATION: {[name: string]: DropOperation} = {\n none: 'cancel',\n link: 'link',\n copy: 'copy',\n move: 'move'\n};\n\nexport const DROP_OPERATION_TO_DROP_EFFECT = invert(DROP_EFFECT_TO_DROP_OPERATION);\n\nfunction invert(object) {\n let res = {};\n for (let key in object) {\n res[object[key]] = key;\n }\n\n return res;\n}\n\nexport const NATIVE_DRAG_TYPES = new Set(['text/plain', 'text/uri-list', 'text/html']);\nexport const CUSTOM_DRAG_TYPE = 'application/vnd.react-aria.items+json';\nexport const GENERIC_TYPE = 'application/octet-stream';\n","const _temp0 = require(\"./ar-AE.json\");\nconst _temp1 = require(\"./bg-BG.json\");\nconst _temp2 = require(\"./cs-CZ.json\");\nconst _temp3 = require(\"./da-DK.json\");\nconst _temp4 = require(\"./de-DE.json\");\nconst _temp5 = require(\"./el-GR.json\");\nconst _temp6 = require(\"./en-US.json\");\nconst _temp7 = require(\"./es-ES.json\");\nconst _temp8 = require(\"./et-EE.json\");\nconst _temp9 = require(\"./fi-FI.json\");\nconst _temp10 = require(\"./fr-FR.json\");\nconst _temp11 = require(\"./he-IL.json\");\nconst _temp12 = require(\"./hr-HR.json\");\nconst _temp13 = require(\"./hu-HU.json\");\nconst _temp14 = require(\"./it-IT.json\");\nconst _temp15 = require(\"./ja-JP.json\");\nconst _temp16 = require(\"./ko-KR.json\");\nconst _temp17 = require(\"./lt-LT.json\");\nconst _temp18 = require(\"./lv-LV.json\");\nconst _temp19 = require(\"./nb-NO.json\");\nconst _temp20 = require(\"./nl-NL.json\");\nconst _temp21 = require(\"./pl-PL.json\");\nconst _temp22 = require(\"./pt-BR.json\");\nconst _temp23 = require(\"./pt-PT.json\");\nconst _temp24 = require(\"./ro-RO.json\");\nconst _temp25 = require(\"./ru-RU.json\");\nconst _temp26 = require(\"./sk-SK.json\");\nconst _temp27 = require(\"./sl-SI.json\");\nconst _temp28 = require(\"./sr-SP.json\");\nconst _temp29 = require(\"./sv-SE.json\");\nconst _temp30 = require(\"./tr-TR.json\");\nconst _temp31 = require(\"./uk-UA.json\");\nconst _temp32 = require(\"./zh-CN.json\");\nconst _temp33 = require(\"./zh-TW.json\");\nmodule.exports = {\n \"ar-AE\": _temp0,\n \"bg-BG\": _temp1,\n \"cs-CZ\": _temp2,\n \"da-DK\": _temp3,\n \"de-DE\": _temp4,\n \"el-GR\": _temp5,\n \"en-US\": _temp6,\n \"es-ES\": _temp7,\n \"et-EE\": _temp8,\n \"fi-FI\": _temp9,\n \"fr-FR\": _temp10,\n \"he-IL\": _temp11,\n \"hr-HR\": _temp12,\n \"hu-HU\": _temp13,\n \"it-IT\": _temp14,\n \"ja-JP\": _temp15,\n \"ko-KR\": _temp16,\n \"lt-LT\": _temp17,\n \"lv-LV\": _temp18,\n \"nb-NO\": _temp19,\n \"nl-NL\": _temp20,\n \"pl-PL\": _temp21,\n \"pt-BR\": _temp22,\n \"pt-PT\": _temp23,\n \"ro-RO\": _temp24,\n \"ru-RU\": _temp25,\n \"sk-SK\": _temp26,\n \"sl-SI\": _temp27,\n \"sr-SP\": _temp28,\n \"sv-SE\": _temp29,\n \"tr-TR\": _temp30,\n \"uk-UA\": _temp31,\n \"zh-CN\": _temp32,\n \"zh-TW\": _temp33\n}","{\n \"dragDescriptionKeyboard\": \"اضغط Enter لبدء السحب.\",\n \"dragDescriptionTouch\": \"اضغط مرتين لبدء السحب.\",\n \"dragDescriptionVirtual\": \"انقر لبدء السحب.\",\n \"dragItem\": \"اسحب {itemText}\",\n \"dragSelectedItems\": \"اسحب {count, plural, one {# عنصر محدد} other {# عناصر محددة}}\",\n \"dragStartedKeyboard\": \"بدأ السحب. اضغط Tab للانتقال إلى موضع الإفلات، ثم اضغط Enter للإفلات، أو اضغط Escape للإلغاء.\",\n \"dragStartedTouch\": \"بدأ السحب. انتقل إلى موضع الإفلات، ثم اضغط مرتين للإفلات.\",\n \"dragStartedVirtual\": \"بدأ السحب. انتقل إلى مكان الإفلات، ثم انقر أو اضغط Enter للإفلات.\",\n \"dropCanceled\": \"تم إلغاء الإفلات.\",\n \"dropComplete\": \"اكتمل الإفلات.\",\n \"dropDescriptionKeyboard\": \"اضغط Enter للإفلات. اضغط Escape لإلغاء السحب.\",\n \"dropDescriptionTouch\": \"اضغط مرتين للإفلات.\",\n \"dropDescriptionVirtual\": \"انقر للإفلات.\",\n \"dropIndicator\": \"مؤشر الإفلات\",\n \"dropOnItem\": \"إفلات {itemText}\",\n \"dropOnRoot\": \"الإفلات\",\n \"endDragKeyboard\": \"السحب. اضغط Enter لإلغاء السحب.\",\n \"endDragTouch\": \"السحب. اضغط مرتين لإلغاء السحب.\",\n \"endDragVirtual\": \"السحب. انقر لإلغاء السحب.\",\n \"insertAfter\": \"أدخل بعد {itemText}\",\n \"insertBefore\": \"أدخل قبل {itemText}\",\n \"insertBetween\": \"أدخل بين {beforeItemText} و {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Натиснете „Enter“, за да започнете да плъзгате.\",\n \"dragDescriptionTouch\": \"Натиснете двукратно, за да започнете да плъзгате.\",\n \"dragDescriptionVirtual\": \"Щракнете, за да започнете да плъзгате.\",\n \"dragItem\": \"Плъзни {itemText}\",\n \"dragSelectedItems\": \"Плъзни {count, plural, one {# избран елемент} other {# избрани елемента}}\",\n \"dragStartedKeyboard\": \"Започна плъзгане. Натиснете „Tab“, за да се придвижите до целта, след което натиснете „Enter“ за пускане или натиснете „Escape“ за отмяна.\",\n \"dragStartedTouch\": \"Започна плъзгане. Придвижете се до целта, след което натиснете двукратно, за да пуснете.\",\n \"dragStartedVirtual\": \"Започна плъзгане. Придвижете се до целта, след което щракнете или натиснете „Enter“ за пускане.\",\n \"dropCanceled\": \"Пускането е отменено.\",\n \"dropComplete\": \"Пускането е завършено.\",\n \"dropDescriptionKeyboard\": \"Натиснете „Enter“ за пускане. Натиснете „Escape“ за отмяна на плъзгането.\",\n \"dropDescriptionTouch\": \"Натиснете двукратно за пускане.\",\n \"dropDescriptionVirtual\": \"Щракнете за пускане.\",\n \"dropIndicator\": \"индикатор за пускане\",\n \"dropOnItem\": \"Пусни върху {itemText}\",\n \"dropOnRoot\": \"Пусни върху\",\n \"endDragKeyboard\": \"Плъзгане. Натиснете „Enter“ за отмяна на плъзгането.\",\n \"endDragTouch\": \"Плъзгане. Натиснете двукратно за отмяна на плъзгането.\",\n \"endDragVirtual\": \"Плъзгане. Щракнете за отмяна.\",\n \"insertAfter\": \"Вмъкни след {itemText}\",\n \"insertBefore\": \"Вмъкни преди {itemText}\",\n \"insertBetween\": \"Вмъкни между {beforeItemText} и {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Stisknutím klávesy Enter začnete s přetahováním.\",\n \"dragDescriptionTouch\": \"Poklepáním začnete s přetahováním.\",\n \"dragDescriptionVirtual\": \"Kliknutím začnete s přetahováním.\",\n \"dragItem\": \"Přetáhnout {itemText}\",\n \"dragSelectedItems\": \"Přetáhnout {count, plural, one {# vybranou položku} few {# vybrané položky} other {# vybraných položek}}\",\n \"dragStartedKeyboard\": \"Začněte s přetahováním. Po stisknutí klávesy Tab najděte požadovaný cíl a stisknutím klávesy Enter přetažení dokončete nebo stisknutím klávesy Esc akci zrušte.\",\n \"dragStartedTouch\": \"Začněte s přetahováním. Najděte požadovaný cíl a poklepáním přetažení dokončete.\",\n \"dragStartedVirtual\": \"Začněte s přetahováním. Najděte požadovaný cíl a kliknutím nebo stisknutím klávesy Enter přetažení dokončete.\",\n \"dropCanceled\": \"Přetažení bylo zrušeno.\",\n \"dropComplete\": \"Přetažení bylo dokončeno.\",\n \"dropDescriptionKeyboard\": \"Stisknutím klávesy Enter přetažení dokončete nebo stisknutím klávesy Esc akci zrušte.\",\n \"dropDescriptionTouch\": \"Poklepáním přetažení dokončete.\",\n \"dropDescriptionVirtual\": \"Kliknutím objekt přetáhněte.\",\n \"dropIndicator\": \"indikátor přetažení\",\n \"dropOnItem\": \"Přetáhnout na {itemText}\",\n \"dropOnRoot\": \"Přetáhnout na\",\n \"endDragKeyboard\": \"Probíhá přetahování. Stisknutím klávesy Enter přetažení zrušíte.\",\n \"endDragTouch\": \"Probíhá přetahování. Poklepáním přetažení zrušíte.\",\n \"endDragVirtual\": \"Probíhá přetahování. Kliknutím přetažení zrušíte.\",\n \"insertAfter\": \"Vložit za {itemText}\",\n \"insertBefore\": \"Vložit před {itemText}\",\n \"insertBetween\": \"Vložit mezi {beforeItemText} a {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Tryk på Enter for at starte med at trække.\",\n \"dragDescriptionTouch\": \"Dobbelttryk for at starte med at trække.\",\n \"dragDescriptionVirtual\": \"Klik for at starte med at trække.\",\n \"dragItem\": \"Træk {itemText}\",\n \"dragSelectedItems\": \"Træk {count, plural, one {# valgt element} other {# valgte elementer}}\",\n \"dragStartedKeyboard\": \"Startet med at trække. Tryk på Tab for at gå til et slip-mål, tryk derefter på Enter for at slippe, eller tryk på Escape for at annullere.\",\n \"dragStartedTouch\": \"Startet med at trække. Gå til et slip-mål, og dobbelttryk derefter for at slippe.\",\n \"dragStartedVirtual\": \"Startet med at trække. Gå til et slip-mål, og klik eller tryk derefter på enter for at slippe.\",\n \"dropCanceled\": \"Slip annulleret.\",\n \"dropComplete\": \"Slip fuldført.\",\n \"dropDescriptionKeyboard\": \"Tryk på Enter for at slippe. Tryk på Escape for at annullere trækning.\",\n \"dropDescriptionTouch\": \"Dobbelttryk for at slippe.\",\n \"dropDescriptionVirtual\": \"Klik for at slippe.\",\n \"dropIndicator\": \"slip-indikator\",\n \"dropOnItem\": \"Slip på {itemText}\",\n \"dropOnRoot\": \"Slip på\",\n \"endDragKeyboard\": \"Trækning. Tryk på enter for at annullere træk.\",\n \"endDragTouch\": \"Trækning. Dobbelttryk for at annullere træk.\",\n \"endDragVirtual\": \"Trækning. Klik for at annullere trækning.\",\n \"insertAfter\": \"Indsæt efter {itemText}\",\n \"insertBefore\": \"Indsæt før {itemText}\",\n \"insertBetween\": \"Indsæt mellem {beforeItemText} og {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Drücken Sie die Eingabetaste, um den Ziehvorgang zu starten.\",\n \"dragDescriptionTouch\": \"Tippen Sie doppelt, um den Ziehvorgang zu starten.\",\n \"dragDescriptionVirtual\": \"Zum Starten des Ziehvorgangs klicken.\",\n \"dragItem\": \"{itemText} ziehen\",\n \"dragSelectedItems\": \"{count, plural, one {# ausgewähltes Objekt} other {# ausgewählte Objekte}} ziehen\",\n \"dragStartedKeyboard\": \"Ziehvorgang gestartet. Drücken Sie die Tabulatortaste, um zu einem Ablegeziel zu navigieren und drücken Sie dann die Eingabetaste, um das Objekt abzulegen, oder Escape, um den Vorgang abzubrechen.\",\n \"dragStartedTouch\": \"Ziehvorgang gestartet. Navigieren Sie zu einem Ablegeziel und tippen Sie doppelt, um das Objekt abzulegen.\",\n \"dragStartedVirtual\": \"Ziehvorgang gestartet. Navigieren Sie zu einem Ablegeziel und klicken Sie oder drücken Sie die Eingabetaste, um das Objekt abzulegen.\",\n \"dropCanceled\": \"Ablegen abgebrochen.\",\n \"dropComplete\": \"Ablegen abgeschlossen.\",\n \"dropDescriptionKeyboard\": \"Drücken Sie die Eingabetaste, um das Objekt abzulegen. Drücken Sie Escape, um den Vorgang abzubrechen.\",\n \"dropDescriptionTouch\": \"Tippen Sie doppelt, um das Objekt abzulegen.\",\n \"dropDescriptionVirtual\": \"Zum Ablegen klicken.\",\n \"dropIndicator\": \"Ablegeanzeiger\",\n \"dropOnItem\": \"Auf {itemText} ablegen\",\n \"dropOnRoot\": \"Ablegen auf\",\n \"endDragKeyboard\": \"Ziehvorgang läuft. Drücken Sie die Eingabetaste, um den Vorgang abzubrechen.\",\n \"endDragTouch\": \"Ziehvorgang läuft. Tippen Sie doppelt, um den Vorgang abzubrechen.\",\n \"endDragVirtual\": \"Ziehvorgang läuft. Klicken Sie, um den Vorgang abzubrechen.\",\n \"insertAfter\": \"Nach {itemText} einfügen\",\n \"insertBefore\": \"Vor {itemText} einfügen\",\n \"insertBetween\": \"Zwischen {beforeItemText} und {afterItemText} einfügen\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Πατήστε Enter για έναρξη της μεταφοράς.\",\n \"dragDescriptionTouch\": \"Πατήστε δύο φορές για έναρξη της μεταφοράς.\",\n \"dragDescriptionVirtual\": \"Κάντε κλικ για να ξεκινήσετε τη μεταφορά.\",\n \"dragItem\": \"Μεταφορά {itemText}\",\n \"dragSelectedItems\": \"Μεταφορά σε {count, plural, one {# επιλεγμένο στοιχείο} other {# επιλεγμένα στοιχεία}}\",\n \"dragStartedKeyboard\": \"Η μεταφορά ξεκίνησε. Πατήστε το πλήκτρο Tab για να μεταβείτε σε έναν προορισμό απόθεσης και, στη συνέχεια, πατήστε Enter για απόθεση ή πατήστε Escape για ακύρωση.\",\n \"dragStartedTouch\": \"Η μεταφορά ξεκίνησε. Μεταβείτε σε έναν προορισμό απόθεσης και, στη συνέχεια, πατήστε δύο φορές για απόθεση.\",\n \"dragStartedVirtual\": \"Η μεταφορά ξεκίνησε. Μεταβείτε σε έναν προορισμό απόθεσης και, στη συνέχεια, κάντε κλικ ή πατήστε Enter για απόθεση.\",\n \"dropCanceled\": \"Η απόθεση ακυρώθηκε.\",\n \"dropComplete\": \"Η απόθεση ολοκληρώθηκε.\",\n \"dropDescriptionKeyboard\": \"Πατήστε Enter για απόθεση. Πατήστε Escape για ακύρωση της μεταφοράς.\",\n \"dropDescriptionTouch\": \"Πατήστε δύο φορές για απόθεση.\",\n \"dropDescriptionVirtual\": \"Κάντε κλικ για απόθεση.\",\n \"dropIndicator\": \"δείκτης απόθεσης\",\n \"dropOnItem\": \"Απόθεση σε {itemText}\",\n \"dropOnRoot\": \"Απόθεση σε\",\n \"endDragKeyboard\": \"Μεταφορά σε εξέλιξη. Πατήστε Enter για ακύρωση της μεταφοράς.\",\n \"endDragTouch\": \"Μεταφορά σε εξέλιξη. Πατήστε δύο φορές για ακύρωση της μεταφοράς.\",\n \"endDragVirtual\": \"Μεταφορά σε εξέλιξη. Κάντε κλικ για ακύρωση της μεταφοράς.\",\n \"insertAfter\": \"Εισαγωγή μετά από {itemText}\",\n \"insertBefore\": \"Εισαγωγή πριν από {itemText}\",\n \"insertBetween\": \"Εισαγωγή μεταξύ {beforeItemText} και {afterItemText}\"\n}\n","{\n \"dragItem\": \"Drag {itemText}\",\n \"dragSelectedItems\": \"Drag {count, plural, one {# selected item} other {# selected items}}\",\n \"dragDescriptionKeyboard\": \"Press Enter to start dragging.\",\n \"dragDescriptionTouch\": \"Double tap to start dragging.\",\n \"dragDescriptionVirtual\": \"Click to start dragging.\",\n \"dragStartedKeyboard\": \"Started dragging. Press Tab to navigate to a drop target, then press Enter to drop, or press Escape to cancel.\",\n \"dragStartedTouch\": \"Started dragging. Navigate to a drop target, then double tap to drop.\",\n \"dragStartedVirtual\": \"Started dragging. Navigate to a drop target, then click or press Enter to drop.\",\n \"endDragKeyboard\": \"Dragging. Press Enter to cancel drag.\",\n \"endDragTouch\": \"Dragging. Double tap to cancel drag.\",\n \"endDragVirtual\": \"Dragging. Click to cancel drag.\",\n \"dropDescriptionKeyboard\": \"Press Enter to drop. Press Escape to cancel drag.\",\n \"dropDescriptionTouch\": \"Double tap to drop.\",\n \"dropDescriptionVirtual\": \"Click to drop.\",\n \"dropCanceled\": \"Drop canceled.\",\n \"dropComplete\": \"Drop complete.\",\n \"dropIndicator\": \"drop indicator\",\n \"dropOnRoot\": \"Drop on\",\n \"dropOnItem\": \"Drop on {itemText}\",\n \"insertBefore\": \"Insert before {itemText}\",\n \"insertBetween\": \"Insert between {beforeItemText} and {afterItemText}\",\n \"insertAfter\": \"Insert after {itemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Pulse Intro para empezar a arrastrar.\",\n \"dragDescriptionTouch\": \"Pulse dos veces para iniciar el arrastre.\",\n \"dragDescriptionVirtual\": \"Haga clic para iniciar el arrastre.\",\n \"dragItem\": \"Arrastrar {itemText}\",\n \"dragSelectedItems\": \"Arrastrar {count, plural, one {# elemento seleccionado} other {# elementos seleccionados}}\",\n \"dragStartedKeyboard\": \"Se ha empezado a arrastrar. Pulse el tabulador para ir al destino de colocación y, a continuación, pulse Intro para soltar, o pulse Escape para cancelar.\",\n \"dragStartedTouch\": \"Se ha empezado a arrastrar. Vaya al destino de colocación y, a continuación, pulse dos veces para soltar.\",\n \"dragStartedVirtual\": \"Se ha empezado a arrastrar. Vaya al destino de colocación y, a continuación, haga clic o pulse Intro para soltar.\",\n \"dropCanceled\": \"Se ha cancelado la colocación.\",\n \"dropComplete\": \"Colocación finalizada.\",\n \"dropDescriptionKeyboard\": \"Pulse Intro para soltar. Pulse Escape para cancelar el arrastre.\",\n \"dropDescriptionTouch\": \"Pulse dos veces para soltar.\",\n \"dropDescriptionVirtual\": \"Haga clic para soltar.\",\n \"dropIndicator\": \"indicador de colocación\",\n \"dropOnItem\": \"Soltar en {itemText}\",\n \"dropOnRoot\": \"Soltar en\",\n \"endDragKeyboard\": \"Arrastrando. Pulse Intro para cancelar el arrastre.\",\n \"endDragTouch\": \"Arrastrando. Pulse dos veces para cancelar el arrastre.\",\n \"endDragVirtual\": \"Arrastrando. Haga clic para cancelar el arrastre.\",\n \"insertAfter\": \"Insertar después de {itemText}\",\n \"insertBefore\": \"Insertar antes de {itemText}\",\n \"insertBetween\": \"Insertar entre {beforeItemText} y {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Lohistamise alustamiseks vajutage klahvi Enter.\",\n \"dragDescriptionTouch\": \"Topeltpuudutage lohistamise alustamiseks.\",\n \"dragDescriptionVirtual\": \"Klõpsake lohistamise alustamiseks.\",\n \"dragItem\": \"Lohista {itemText}\",\n \"dragSelectedItems\": \"Lohista {count, plural, one {# valitud üksust} other {# valitud üksust}}\",\n \"dragStartedKeyboard\": \"Alustati lohistamist. Kukutamise sihtmärgi juurde navigeerimiseks vajutage klahvi Tab, seejärel vajutage kukutamiseks klahvi Enter või loobumiseks klahvi Escape.\",\n \"dragStartedTouch\": \"Alustati lohistamist. Navigeerige kukutamise sihtmärgi juurde ja topeltpuudutage kukutamiseks.\",\n \"dragStartedVirtual\": \"Alustati lohistamist. Navigeerige kukutamise sihtmärgi juurde ja kukutamiseks klõpsake või vajutage klahvi Enter.\",\n \"dropCanceled\": \"Lohistamisest loobuti.\",\n \"dropComplete\": \"Lohistamine on tehtud.\",\n \"dropDescriptionKeyboard\": \"Kukutamiseks vajutage klahvi Enter. Lohistamisest loobumiseks vajutage klahvi Escape.\",\n \"dropDescriptionTouch\": \"Kukutamiseks topeltpuudutage.\",\n \"dropDescriptionVirtual\": \"Kukutamiseks klõpsake.\",\n \"dropIndicator\": \"lohistamise indikaator\",\n \"dropOnItem\": \"Kukuta asukohta {itemText}\",\n \"dropOnRoot\": \"Kukuta asukohta\",\n \"endDragKeyboard\": \"Lohistamine. Lohistamisest loobumiseks vajutage klahvi Enter.\",\n \"endDragTouch\": \"Lohistamine. Lohistamisest loobumiseks topeltpuudutage.\",\n \"endDragVirtual\": \"Lohistamine. Lohistamisest loobumiseks klõpsake.\",\n \"insertAfter\": \"Sisesta {itemText} järele\",\n \"insertBefore\": \"Sisesta {itemText} ette\",\n \"insertBetween\": \"Sisesta {beforeItemText} ja {afterItemText} vahele\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Aloita vetäminen painamalla Enter-näppäintä.\",\n \"dragDescriptionTouch\": \"Aloita vetäminen kaksoisnapauttamalla.\",\n \"dragDescriptionVirtual\": \"Aloita vetäminen napsauttamalla.\",\n \"dragItem\": \"Vedä kohdetta {itemText}\",\n \"dragSelectedItems\": \"Vedä {count, plural, one {# valittua kohdetta} other {# valittua kohdetta}}\",\n \"dragStartedKeyboard\": \"Vetäminen aloitettu. Siirry pudotuskohteeseen painamalla sarkainnäppäintä ja sitten pudota painamalla Enter-näppäintä tai peruuta painamalla Escape-näppäintä.\",\n \"dragStartedTouch\": \"Vetäminen aloitettu. Siirry pudotuskohteeseen ja pudota kaksoisnapauttamalla.\",\n \"dragStartedVirtual\": \"Vetäminen aloitettu. Siirry pudotuskohteeseen ja pudota napsauttamalla tai painamalla Enter-näppäintä.\",\n \"dropCanceled\": \"Pudotus peruutettu.\",\n \"dropComplete\": \"Pudotus suoritettu.\",\n \"dropDescriptionKeyboard\": \"Pudota painamalla Enter-näppäintä. Peruuta vetäminen painamalla Escape-näppäintä.\",\n \"dropDescriptionTouch\": \"Pudota kaksoisnapauttamalla.\",\n \"dropDescriptionVirtual\": \"Pudota napsauttamalla.\",\n \"dropIndicator\": \"pudotuksen ilmaisin\",\n \"dropOnItem\": \"Pudota kohteeseen {itemText}\",\n \"dropOnRoot\": \"Pudota kohteeseen\",\n \"endDragKeyboard\": \"Vedetään. Peruuta vetäminen painamalla Enter-näppäintä.\",\n \"endDragTouch\": \"Vedetään. Peruuta vetäminen kaksoisnapauttamalla.\",\n \"endDragVirtual\": \"Vedetään. Peruuta vetäminen napsauttamalla.\",\n \"insertAfter\": \"Lisää kohteen {itemText} jälkeen\",\n \"insertBefore\": \"Lisää ennen kohdetta {itemText}\",\n \"insertBetween\": \"Lisää kohteiden {beforeItemText} ja {afterItemText} väliin\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Appuyez sur Entrée pour commencer le déplacement.\",\n \"dragDescriptionTouch\": \"Touchez deux fois pour commencer le déplacement.\",\n \"dragDescriptionVirtual\": \"Cliquez pour commencer le déplacement.\",\n \"dragItem\": \"Déplacer {itemText}\",\n \"dragSelectedItems\": \"Déplacer {count, plural, one {# élément sélectionné} other {# éléments sélectionnés}}\",\n \"dragStartedKeyboard\": \"Déplacement commencé. Appuyez sur Tabulation pour accéder à une cible de dépôt, puis appuyez sur Entrée pour déposer, ou appuyez sur Échap pour annuler.\",\n \"dragStartedTouch\": \"Déplacement commencé. Accédez à une cible de dépôt, puis touchez deux fois pour déposer.\",\n \"dragStartedVirtual\": \"Déplacement commencé. Accédez à une cible de dépôt, puis cliquez ou appuyez sur Entrée pour déposer.\",\n \"dropCanceled\": \"Dépôt annulé.\",\n \"dropComplete\": \"Dépôt terminé.\",\n \"dropDescriptionKeyboard\": \"Appuyez sur Entrée pour déposer. Appuyez sur Échap pour annuler le déplacement.\",\n \"dropDescriptionTouch\": \"Touchez deux fois pour déposer.\",\n \"dropDescriptionVirtual\": \"Cliquez pour déposer.\",\n \"dropIndicator\": \"indicateur de dépôt\",\n \"dropOnItem\": \"Déposer sur {itemText}\",\n \"dropOnRoot\": \"Déposer sur\",\n \"endDragKeyboard\": \"Déplacement. Appuyez sur Entrée pour annuler le déplacement.\",\n \"endDragTouch\": \"Déplacement. Touchez deux fois pour annuler le déplacement.\",\n \"endDragVirtual\": \"Déplacement. Cliquez pour annuler le déplacement.\",\n \"insertAfter\": \"Insérer après {itemText}\",\n \"insertBefore\": \"Insérer avant {itemText}\",\n \"insertBetween\": \"Insérer entre {beforeItemText} et {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"הקש על Enter כדי להתחיל לגרור.\",\n \"dragDescriptionTouch\": \"הקש פעמיים כדי להתחיל בגרירה.\",\n \"dragDescriptionVirtual\": \"לחץ כדי להתחיל לגרור.\",\n \"dragItem\": \"גרור את {itemText}\",\n \"dragSelectedItems\": \"גרור {count, plural, one {פריט נבחר #} other {# פריטים שנבחרו}}\",\n \"dragStartedKeyboard\": \"התחלת לגרור. הקש על Tab כדי לנווט לנקודת הגרירה ולאחר מכן הקש על Enter כדי לשחרר או על Escape כדי לבטל.\",\n \"dragStartedTouch\": \"התחלת לגרור. נווט לנקודת השחרור ולאחר מכן הקש פעמיים כדי לשחרר.\",\n \"dragStartedVirtual\": \"התחלת לגרור. נווט לנקודת השחרור ולאחר מכן לחץ או הקש על Enter כדי לשחרר.\",\n \"dropCanceled\": \"השחרור בוטל.\",\n \"dropComplete\": \"השחרור הושלם.\",\n \"dropDescriptionKeyboard\": \"הקש על Enter כדי לשחרר. הקש על Escape כדי לבטל את הגרירה.\",\n \"dropDescriptionTouch\": \"הקש פעמיים כדי לשחרר.\",\n \"dropDescriptionVirtual\": \"לחץ כדי לשחרר.\",\n \"dropIndicator\": \"מחוון שחרור\",\n \"dropOnItem\": \"שחרר על {itemText}\",\n \"dropOnRoot\": \"שחרר על\",\n \"endDragKeyboard\": \"גורר. הקש על Enter כדי לבטל את הגרירה.\",\n \"endDragTouch\": \"גורר. הקש פעמיים כדי לבטל את הגרירה.\",\n \"endDragVirtual\": \"גורר. לחץ כדי לבטל את הגרירה.\",\n \"insertAfter\": \"הוסף אחרי {itemText}\",\n \"insertBefore\": \"הוסף לפני {itemText}\",\n \"insertBetween\": \"הוסף בין {beforeItemText} לבין {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Pritisnite Enter da biste počeli povlačiti.\",\n \"dragDescriptionTouch\": \"Dvaput dodirnite da biste počeli povlačiti.\",\n \"dragDescriptionVirtual\": \"Kliknite da biste počeli povlačiti.\",\n \"dragItem\": \"Povucite stavku {itemText}\",\n \"dragSelectedItems\": \"Povucite {count, plural, one {# odabranu stavku} other {ovoliko odabranih stavki: #}}\",\n \"dragStartedKeyboard\": \"Počeli ste povlačiti. Pritisnite tipku tabulatora da biste došli do cilja ispuštanja, a zatim Enter da biste ispustili stavku ili Escape da biste prekinuli povlačenje.\",\n \"dragStartedTouch\": \"Počeli ste povlačiti. Dođite do cilja ispuštanja, a zatim dvaput dodirnite da biste ispustili stavku.\",\n \"dragStartedVirtual\": \"Počeli ste povlačiti. Dođite do cilja ispuštanja, a zatim kliknite ili pritisnite Enter da biste ispustili stavku.\",\n \"dropCanceled\": \"Povlačenje je prekinuto.\",\n \"dropComplete\": \"Ispuštanje je dovršeno.\",\n \"dropDescriptionKeyboard\": \"Pritisnite Enter da biste ispustili stavku. Pritisnite Escape da biste prekinuli povlačenje.\",\n \"dropDescriptionTouch\": \"Dvaput dodirnite da biste ispustili stavku.\",\n \"dropDescriptionVirtual\": \"Kliknite da biste ispustili stavku.\",\n \"dropIndicator\": \"pokazatelj ispuštanja\",\n \"dropOnItem\": \"Ispustite na stavku {itemText}\",\n \"dropOnRoot\": \"Ispustite na\",\n \"endDragKeyboard\": \"Povlačenje. Pritisnite Enter da biste prekinuli povlačenje.\",\n \"endDragTouch\": \"Povlačenje. Dvaput dodirnite da biste prekinuli povlačenje.\",\n \"endDragVirtual\": \"Povlačenje. Kliknite da biste prekinuli povlačenje.\",\n \"insertAfter\": \"Umetnite iza stavke {itemText}\",\n \"insertBefore\": \"Ispustite ispred stavke {itemText}\",\n \"insertBetween\": \"Umetnite između stavki {beforeItemText} i {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Nyomja le az Enter billentyűt a húzás megkezdéséhez.\",\n \"dragDescriptionTouch\": \"Koppintson duplán a húzás megkezdéséhez.\",\n \"dragDescriptionVirtual\": \"Kattintson a húzás megkezdéséhez.\",\n \"dragItem\": \"{itemText} húzása\",\n \"dragSelectedItems\": \"{count, plural, one {# kijelölt elem} other {# kijelölt elem}} húzása\",\n \"dragStartedKeyboard\": \"Húzás megkezdve. Nyomja le a Tab billentyűt az elengedési célhoz navigálásához, majd nyomja le az Enter billentyűt az elengedéshez, vagy nyomja le az Escape billentyűt a megszakításhoz.\",\n \"dragStartedTouch\": \"Húzás megkezdve. Navigáljon egy elengedési célhoz, majd koppintson duplán az elengedéshez.\",\n \"dragStartedVirtual\": \"Húzás megkezdve. Navigáljon egy elengedési célhoz, majd kattintson vagy nyomja le az Enter billentyűt az elengedéshez.\",\n \"dropCanceled\": \"Elengedés megszakítva.\",\n \"dropComplete\": \"Elengedés teljesítve.\",\n \"dropDescriptionKeyboard\": \"Nyomja le az Enter billentyűt az elengedéshez. Nyomja le az Escape billentyűt a húzás megszakításához.\",\n \"dropDescriptionTouch\": \"Koppintson duplán az elengedéshez.\",\n \"dropDescriptionVirtual\": \"Kattintson az elengedéshez.\",\n \"dropIndicator\": \"elengedésjelző\",\n \"dropOnItem\": \"Elengedés erre: {itemText}\",\n \"dropOnRoot\": \"Elengedés erre:\",\n \"endDragKeyboard\": \"Húzás folyamatban. Nyomja le az Enter billentyűt a húzás megszakításához.\",\n \"endDragTouch\": \"Húzás folyamatban. Koppintson duplán a húzás megszakításához.\",\n \"endDragVirtual\": \"Húzás folyamatban. Kattintson a húzás megszakításához.\",\n \"insertAfter\": \"Beszúrás {itemText} után\",\n \"insertBefore\": \"Beszúrás {itemText} elé\",\n \"insertBetween\": \"Beszúrás {beforeItemText} és {afterItemText} közé\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Premi Invio per iniziare a trascinare.\",\n \"dragDescriptionTouch\": \"Tocca due volte per iniziare a trascinare.\",\n \"dragDescriptionVirtual\": \"Fai clic per iniziare a trascinare.\",\n \"dragItem\": \"Trascina {itemText}\",\n \"dragSelectedItems\": \"Trascina {count, plural, one {# altro elemento selezionato} other {# altri elementi selezionati}}\",\n \"dragStartedKeyboard\": \"Hai iniziato a trascinare. Premi Tab per arrivare sull’area di destinazione, quindi premi Invio per rilasciare o Esc per annullare.\",\n \"dragStartedTouch\": \"Hai iniziato a trascinare. Arriva sull’area di destinazione, quindi tocca due volte per rilasciare.\",\n \"dragStartedVirtual\": \"Hai iniziato a trascinare. Arriva sull’area di destinazione, quindi fai clic o premi Invio per rilasciare.\",\n \"dropCanceled\": \"Rilascio annullato.\",\n \"dropComplete\": \"Rilascio completato.\",\n \"dropDescriptionKeyboard\": \"Premi Invio per rilasciare. Premi Esc per annullare.\",\n \"dropDescriptionTouch\": \"Tocca due volte per rilasciare.\",\n \"dropDescriptionVirtual\": \"Fai clic per rilasciare.\",\n \"dropIndicator\": \"indicatore di rilascio\",\n \"dropOnItem\": \"Rilascia su {itemText}\",\n \"dropOnRoot\": \"Rilascia su\",\n \"endDragKeyboard\": \"Trascinamento. Premi Invio per annullare.\",\n \"endDragTouch\": \"Trascinamento. Tocca due volte per annullare.\",\n \"endDragVirtual\": \"Trascinamento. Fai clic per annullare.\",\n \"insertAfter\": \"Inserisci dopo {itemText}\",\n \"insertBefore\": \"Inserisci prima di {itemText}\",\n \"insertBetween\": \"Inserisci tra {beforeItemText} e {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Enter キーを押してドラッグを開始してください。\",\n \"dragDescriptionTouch\": \"ダブルタップしてドラッグを開始します。\",\n \"dragDescriptionVirtual\": \"クリックしてドラッグを開始します。\",\n \"dragItem\": \"{itemText} をドラッグ\",\n \"dragSelectedItems\": \"{count, plural, one {# 個の選択項目} other {# 個の選択項目}} をドラッグ\",\n \"dragStartedKeyboard\": \"ドラッグを開始します。Tab キーを押してドロップターゲットにいどうし、Enter キーを押してドロップするか、Esc キーを押してキャンセルします。\",\n \"dragStartedTouch\": \"ドラッグを開始しました。ドロップのターゲットに移動し、ダブルタップしてドロップします。\",\n \"dragStartedVirtual\": \"ドラッグを開始しました。ドロップのターゲットに移動し、クリックまたは Enter キーを押してドロップします。\",\n \"dropCanceled\": \"ドロップがキャンセルされました。\",\n \"dropComplete\": \"ドロップが完了しました。\",\n \"dropDescriptionKeyboard\": \"Enter キーを押してドロップします。Esc キーを押してドラッグをキャンセルします。\",\n \"dropDescriptionTouch\": \"ダブルタップしてドロップします。\",\n \"dropDescriptionVirtual\": \"クリックしてドロップします。\",\n \"dropIndicator\": \"ドロップインジケーター\",\n \"dropOnItem\": \"{itemText} にドロップ\",\n \"dropOnRoot\": \"ドロップ場所\",\n \"endDragKeyboard\": \"ドラッグしています。Enter キーを押してドラッグをキャンセルします。\",\n \"endDragTouch\": \"ドラッグしています。ダブルタップしてドラッグをキャンセルします。\",\n \"endDragVirtual\": \"ドラッグしています。クリックしてドラッグをキャンセルします。\",\n \"insertAfter\": \"{itemText} の後に挿入\",\n \"insertBefore\": \"{itemText} の前に挿入\",\n \"insertBetween\": \"{beforeItemText} と {afterItemText} の間に挿入\"\n}\n","{\n \"dragDescriptionKeyboard\": \"드래그를 시작하려면 Enter를 누르세요.\",\n \"dragDescriptionTouch\": \"드래그를 시작하려면 더블 탭하세요.\",\n \"dragDescriptionVirtual\": \"드래그를 시작하려면 클릭하세요.\",\n \"dragItem\": \"{itemText} 드래그\",\n \"dragSelectedItems\": \"{count, plural, one {#개 선택 항목} other {#개 선택 항목}} 드래그\",\n \"dragStartedKeyboard\": \"드래그가 시작되었습니다. Tab을 눌러 드롭 대상으로 이동한 다음 Enter를 눌러 드롭하거나 Esc를 눌러 취소하세요.\",\n \"dragStartedTouch\": \"드래그가 시작되었습니다. 드롭 대상으로 이동한 다음 더블 탭하여 드롭하세요.\",\n \"dragStartedVirtual\": \"드래그가 시작되었습니다. 드롭 대상으로 이동한 다음 클릭하거나 Enter를 눌러 드롭하세요.\",\n \"dropCanceled\": \"드롭이 취소되었습니다.\",\n \"dropComplete\": \"드롭이 완료되었습니다.\",\n \"dropDescriptionKeyboard\": \"드롭하려면 Enter를 누르세요. 드래그를 취소하려면 Esc를 누르세요.\",\n \"dropDescriptionTouch\": \"더블 탭하여 드롭하세요.\",\n \"dropDescriptionVirtual\": \"드롭하려면 클릭하세요.\",\n \"dropIndicator\": \"드롭 표시기\",\n \"dropOnItem\": \"{itemText}에 드롭\",\n \"dropOnRoot\": \"드롭 대상\",\n \"endDragKeyboard\": \"드래그 중입니다. 드래그를 취소하려면 Enter를 누르세요.\",\n \"endDragTouch\": \"드래그 중입니다. 드래그를 취소하려면 더블 탭하세요.\",\n \"endDragVirtual\": \"드래그 중입니다. 드래그를 취소하려면 클릭하세요.\",\n \"insertAfter\": \"{itemText} 이후에 삽입\",\n \"insertBefore\": \"{itemText} 이전에 삽입\",\n \"insertBetween\": \"{beforeItemText} 및 {afterItemText} 사이에 삽입\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Paspauskite „Enter“, kad pradėtumėte vilkti.\",\n \"dragDescriptionTouch\": \"Palieskite dukart, kad pradėtumėte vilkti.\",\n \"dragDescriptionVirtual\": \"Spustelėkite, kad pradėtumėte vilkti.\",\n \"dragItem\": \"Vilkti {itemText}\",\n \"dragSelectedItems\": \"Vilkti {count, plural, one {# pasirinktą elementą} other {# pasirinktus elementus}}\",\n \"dragStartedKeyboard\": \"Pradėta vilkti. Paspauskite „Tab“, kad pereitumėte į tiesioginę paskirties vietą, tada paspauskite „Enter“, kad numestumėte, arba „Escape“, kad atšauktumėte.\",\n \"dragStartedTouch\": \"Pradėta vilkti. Eikite į tiesioginę paskirties vietą, tada palieskite dukart, kad numestumėte.\",\n \"dragStartedVirtual\": \"Pradėta vilkti. Eikite į tiesioginę paskirties vietą ir spustelėkite arba paspauskite „Enter“, kad numestumėte.\",\n \"dropCanceled\": \"Numetimas atšauktas.\",\n \"dropComplete\": \"Numesta.\",\n \"dropDescriptionKeyboard\": \"Paspauskite „Enter“, kad numestumėte. Paspauskite „Escape“, kad atšauktumėte vilkimą.\",\n \"dropDescriptionTouch\": \"Palieskite dukart, kad numestumėte.\",\n \"dropDescriptionVirtual\": \"Spustelėkite, kad numestumėte.\",\n \"dropIndicator\": \"numetimo indikatorius\",\n \"dropOnItem\": \"Numesti ant {itemText}\",\n \"dropOnRoot\": \"Numesti ant\",\n \"endDragKeyboard\": \"Velkama. Paspauskite „Enter“, kad atšauktumėte vilkimą.\",\n \"endDragTouch\": \"Velkama. Spustelėkite dukart, kad atšauktumėte vilkimą.\",\n \"endDragVirtual\": \"Velkama. Spustelėkite, kad atšauktumėte vilkimą.\",\n \"insertAfter\": \"Įterpti po {itemText}\",\n \"insertBefore\": \"Įterpti prieš {itemText}\",\n \"insertBetween\": \"Įterpti tarp {beforeItemText} ir {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Nospiediet Enter, lai sāktu vilkšanu.\",\n \"dragDescriptionTouch\": \"Veiciet dubultskārienu, lai sāktu vilkšanu.\",\n \"dragDescriptionVirtual\": \"Noklikšķiniet, lai sāktu vilkšanu.\",\n \"dragItem\": \"Velciet {itemText}\",\n \"dragSelectedItems\": \"Velciet {count, plural, one {# atlasīto vienumu} other {# atlasītos vienumus}}\",\n \"dragStartedKeyboard\": \"Uzsākta vilkšana. Nospiediet taustiņu Tab, lai pārietu uz nomešanas mērķi, pēc tam nospiediet Enter, lai nomestu, vai nospiediet Escape, lai atceltu.\",\n \"dragStartedTouch\": \"Uzsākta vilkšana. Pārejiet uz nomešanas mērķi, pēc tam veiciet dubultskārienu, lai nomestu.\",\n \"dragStartedVirtual\": \"Uzsākta vilkšana. Pārejiet uz nomešanas mērķi, pēc tam nospiediet Enter, lai nomestu.\",\n \"dropCanceled\": \"Nomešana atcelta.\",\n \"dropComplete\": \"Nomešana pabeigta.\",\n \"dropDescriptionKeyboard\": \"Nospiediet Enter, lai nomestu. Nospiediet Escape, lai atceltu vilkšanu.\",\n \"dropDescriptionTouch\": \"Veiciet dubultskārienu, lai nomestu.\",\n \"dropDescriptionVirtual\": \"Noklikšķiniet, lai nomestu.\",\n \"dropIndicator\": \"nomešanas indikators\",\n \"dropOnItem\": \"Nometiet uz {itemText}\",\n \"dropOnRoot\": \"Nometiet uz\",\n \"endDragKeyboard\": \"Notiek vilkšana. Nospiediet Enter, lai atceltu vilkšanu.\",\n \"endDragTouch\": \"Notiek vilkšana. Veiciet dubultskārienu, lai atceltu vilkšanu.\",\n \"endDragVirtual\": \"Notiek vilkšana. Noklikšķiniet, lai atceltu vilkšanu.\",\n \"insertAfter\": \"Ievietojiet pēc {itemText}\",\n \"insertBefore\": \"Ievietojiet pirms {itemText}\",\n \"insertBetween\": \"Ievietojiet starp {beforeItemText} un {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Trykk på Enter for å begynne å dra.\",\n \"dragDescriptionTouch\": \"Dobbelttrykk for å begynne å dra.\",\n \"dragDescriptionVirtual\": \"Klikk for å begynne å dra.\",\n \"dragItem\": \"Dra {itemText}\",\n \"dragSelectedItems\": \"Dra {count, plural, one {# merket element} other {# merkede elementer}}\",\n \"dragStartedKeyboard\": \"Begynte å dra. Trykk på Tab for å navigere til et mål, og trykk deretter på Enter for å slippe eller på Esc for å avbryte.\",\n \"dragStartedTouch\": \"Begynte å dra. Naviger til et mål, og dobbelttrykk for å slippe.\",\n \"dragStartedVirtual\": \"Begynte å dra. Naviger til et mål, og klikk eller trykk på Enter for å slippe.\",\n \"dropCanceled\": \"Avbrøt slipping.\",\n \"dropComplete\": \"Slippingen er fullført.\",\n \"dropDescriptionKeyboard\": \"Trykk på Enter for å slippe. Trykk på Esc hvis du vil avbryte draingen.\",\n \"dropDescriptionTouch\": \"Dobbelttrykk for å slippe.\",\n \"dropDescriptionVirtual\": \"Klikk for å slippe.\",\n \"dropIndicator\": \"slippeindikator\",\n \"dropOnItem\": \"Slipp på {itemText}\",\n \"dropOnRoot\": \"Slipp på\",\n \"endDragKeyboard\": \"Drar. Trykk på Enter hvis du vil avbryte.\",\n \"endDragTouch\": \"Drar. Dobbelttrykk hvis du vil avbryte.\",\n \"endDragVirtual\": \"Drar. Klikk hvis du vil avbryte.\",\n \"insertAfter\": \"Sett inn etter {itemText}\",\n \"insertBefore\": \"Sett inn før {itemText}\",\n \"insertBetween\": \"Sett inn mellom {beforeItemText} og {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Druk op Enter om te slepen.\",\n \"dragDescriptionTouch\": \"Dubbeltik om te slepen.\",\n \"dragDescriptionVirtual\": \"Klik om met slepen te starten.\",\n \"dragItem\": \"{itemText} slepen\",\n \"dragSelectedItems\": \"{count, plural, one {# geselecteerd item} other {# geselecteerde items}} slepen\",\n \"dragStartedKeyboard\": \"Begonnen met slepen. Druk op Tab om naar een locatie te gaan. Druk dan op Enter om neer te zetten, of op Esc om te annuleren.\",\n \"dragStartedTouch\": \"Begonnen met slepen. Ga naar de gewenste locatie en dubbeltik om neer te zetten.\",\n \"dragStartedVirtual\": \"Begonnen met slepen. Ga naar de gewenste locatie en klik of druk op Enter om neer te zetten.\",\n \"dropCanceled\": \"Neerzetten geannuleerd.\",\n \"dropComplete\": \"Neerzetten voltooid.\",\n \"dropDescriptionKeyboard\": \"Druk op Enter om neer te zetten. Druk op Esc om het slepen te annuleren.\",\n \"dropDescriptionTouch\": \"Dubbeltik om neer te zetten.\",\n \"dropDescriptionVirtual\": \"Klik om neer te zetten.\",\n \"dropIndicator\": \"aanwijzer voor neerzetten\",\n \"dropOnItem\": \"Neerzetten op {itemText}\",\n \"dropOnRoot\": \"Neerzetten op\",\n \"endDragKeyboard\": \"Bezig met slepen. Druk op Enter om te annuleren.\",\n \"endDragTouch\": \"Bezig met slepen. Dubbeltik om te annuleren.\",\n \"endDragVirtual\": \"Bezig met slepen. Klik om te annuleren.\",\n \"insertAfter\": \"Plaatsen na {itemText}\",\n \"insertBefore\": \"Plaatsen vóór {itemText}\",\n \"insertBetween\": \"Plaatsen tussen {beforeItemText} en {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Naciśnij Enter, aby rozpocząć przeciąganie.\",\n \"dragDescriptionTouch\": \"Dotknij dwukrotnie, aby rozpocząć przeciąganie.\",\n \"dragDescriptionVirtual\": \"Kliknij, aby rozpocząć przeciąganie.\",\n \"dragItem\": \"Przeciągnij {itemText}\",\n \"dragSelectedItems\": \"Przeciągnij {count, plural, one {# wybrany element} other {# wybranych elementów}}\",\n \"dragStartedKeyboard\": \"Rozpoczęto przeciąganie. Naciśnij Tab, aby wybrać miejsce docelowe, a następnie naciśnij Enter, aby upuścić, lub Escape, aby anulować.\",\n \"dragStartedTouch\": \"Rozpoczęto przeciąganie. Wybierz miejsce, w którym chcesz upuścić element, a następnie dotknij dwukrotnie, aby upuścić.F\",\n \"dragStartedVirtual\": \"Rozpoczęto przeciąganie. Wybierz miejsce, w którym chcesz upuścić element, a następnie kliknij lub naciśnij Enter, aby upuścić.\",\n \"dropCanceled\": \"Anulowano upuszczenie.\",\n \"dropComplete\": \"Zakończono upuszczanie.\",\n \"dropDescriptionKeyboard\": \"Naciśnij Enter, aby upuścić. Naciśnij Escape, aby anulować przeciągnięcie.\",\n \"dropDescriptionTouch\": \"Dotknij dwukrotnie, aby upuścić.\",\n \"dropDescriptionVirtual\": \"Kliknij, aby upuścić.\",\n \"dropIndicator\": \"wskaźnik upuszczenia\",\n \"dropOnItem\": \"Upuść na {itemText}\",\n \"dropOnRoot\": \"Upuść\",\n \"endDragKeyboard\": \"Przeciąganie. Naciśnij Enter, aby anulować przeciągnięcie.\",\n \"endDragTouch\": \"Przeciąganie. Kliknij dwukrotnie, aby anulować przeciągnięcie.\",\n \"endDragVirtual\": \"Przeciąganie. Kliknij, aby anulować przeciąganie.\",\n \"insertAfter\": \"Umieść za {itemText}\",\n \"insertBefore\": \"Umieść przed {itemText}\",\n \"insertBetween\": \"Umieść między {beforeItemText} i {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Pressione Enter para começar a arrastar.\",\n \"dragDescriptionTouch\": \"Toque duas vezes para começar a arrastar.\",\n \"dragDescriptionVirtual\": \"Clique para começar a arrastar.\",\n \"dragItem\": \"Arrastar {itemText}\",\n \"dragSelectedItems\": \"Arrastar {count, plural, one {# item selecionado} other {# itens selecionados}}\",\n \"dragStartedKeyboard\": \"Comece a arrastar. Pressione Tab para navegar até um alvo e, em seguida, pressione Enter para soltar ou pressione Escape para cancelar.\",\n \"dragStartedTouch\": \"Comece a arrastar. Navegue até um alvo e toque duas vezes para soltar.\",\n \"dragStartedVirtual\": \"Comece a arrastar. Navegue até um alvo e clique ou pressione Enter para soltar.\",\n \"dropCanceled\": \"Liberação cancelada.\",\n \"dropComplete\": \"Liberação concluída.\",\n \"dropDescriptionKeyboard\": \"Pressione Enter para soltar. Pressione Escape para cancelar.\",\n \"dropDescriptionTouch\": \"Toque duas vezes para soltar.\",\n \"dropDescriptionVirtual\": \"Clique para soltar.\",\n \"dropIndicator\": \"indicador de liberação\",\n \"dropOnItem\": \"Soltar em {itemText}\",\n \"dropOnRoot\": \"Soltar\",\n \"endDragKeyboard\": \"Arrastando. Pressione Enter para cancelar.\",\n \"endDragTouch\": \"Arrastando. Toque duas vezes para cancelar.\",\n \"endDragVirtual\": \"Arrastando. Clique para cancelar.\",\n \"insertAfter\": \"Inserir após {itemText}\",\n \"insertBefore\": \"Inserir antes de {itemText}\",\n \"insertBetween\": \"Inserir entre {beforeItemText} e {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Prima Enter para iniciar o arrasto.\",\n \"dragDescriptionTouch\": \"Faça duplo toque para começar a arrastar.\",\n \"dragDescriptionVirtual\": \"Clique para iniciar o arrasto.\",\n \"dragItem\": \"Arrastar {itemText}\",\n \"dragSelectedItems\": \"Arrastar {count, plural, one {# item selecionado} outro {# itens selecionados}}\",\n \"dragStartedKeyboard\": \"Arrasto iniciado. Prima a tecla de tabulação para navegar para um destino para largar, e em seguida prima Enter para largar ou prima Escape para cancelar.\",\n \"dragStartedTouch\": \"Arrasto iniciado. Navegue para um destino para largar, e em seguida faça duplo toque para largar.\",\n \"dragStartedVirtual\": \"Arrasto iniciado. Navegue para um destino para largar, e em seguida clique ou prima Enter para largar.\",\n \"dropCanceled\": \"Largar cancelado.\",\n \"dropComplete\": \"Largar completo.\",\n \"dropDescriptionKeyboard\": \"Prima Enter para largar. Prima Escape para cancelar o arrasto.\",\n \"dropDescriptionTouch\": \"Faça duplo toque para largar.\",\n \"dropDescriptionVirtual\": \"Clique para largar.\",\n \"dropIndicator\": \"Indicador de largar\",\n \"dropOnItem\": \"Largar em {itemText}\",\n \"dropOnRoot\": \"Largar em\",\n \"endDragKeyboard\": \"A arrastar. Prima Enter para cancelar o arrasto.\",\n \"endDragTouch\": \"A arrastar. Faça duplo toque para cancelar o arrasto.\",\n \"endDragVirtual\": \"A arrastar. Clique para cancelar o arrasto.\",\n \"insertAfter\": \"Inserir depois de {itemText}\",\n \"insertBefore\": \"Inserir antes de {itemText}\",\n \"insertBetween\": \"Inserir entre {beforeItemText} e {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Apăsați pe Enter pentru a începe glisarea.\",\n \"dragDescriptionTouch\": \"Atingeți de două ori pentru a începe să glisați.\",\n \"dragDescriptionVirtual\": \"Faceți clic pentru a începe glisarea.\",\n \"dragItem\": \"Glisați {itemText}\",\n \"dragSelectedItems\": \"Glisați {count, plural, one {# element selectat} other {# elemente selectate}}\",\n \"dragStartedKeyboard\": \"A început glisarea. Apăsați pe Tab pentru a naviga la o țintă de fixare, apoi apăsați pe Enter pentru a fixa sau apăsați pe Escape pentru a anula glisarea.\",\n \"dragStartedTouch\": \"A început glisarea. Navigați la o țintă de fixare, apoi atingeți de două ori pentru a fixa.\",\n \"dragStartedVirtual\": \"A început glisarea. Navigați la o țintă de fixare, apoi faceți clic sau apăsați pe Enter pentru a fixa.\",\n \"dropCanceled\": \"Fixare anulată.\",\n \"dropComplete\": \"Fixare finalizată.\",\n \"dropDescriptionKeyboard\": \"Apăsați pe Enter pentru a fixa. Apăsați pe Escape pentru a anula glisarea.\",\n \"dropDescriptionTouch\": \"Atingeți de două ori pentru a fixa.\",\n \"dropDescriptionVirtual\": \"Faceți clic pentru a fixa.\",\n \"dropIndicator\": \"indicator de fixare\",\n \"dropOnItem\": \"Fixați pe {itemText}\",\n \"dropOnRoot\": \"Fixare pe\",\n \"endDragKeyboard\": \"Se glisează. Apăsați pe Enter pentru a anula glisarea.\",\n \"endDragTouch\": \"Se glisează. Atingeți de două ori pentru a anula glisarea.\",\n \"endDragVirtual\": \"Se glisează. Faceți clic pentru a anula glisarea.\",\n \"insertAfter\": \"Inserați după {itemText}\",\n \"insertBefore\": \"Inserați înainte de {itemText}\",\n \"insertBetween\": \"Inserați între {beforeItemText} și {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Нажмите клавишу Enter для начала перетаскивания.\",\n \"dragDescriptionTouch\": \"Дважды нажмите для начала перетаскивания.\",\n \"dragDescriptionVirtual\": \"Щелкните для начала перетаскивания.\",\n \"dragItem\": \"Перетащить {itemText}\",\n \"dragSelectedItems\": \"Перетащить {count, plural, one {# выбранный элемент} other {# выбранных элем}}\",\n \"dragStartedKeyboard\": \"Начато перетаскивание. Нажмите клавишу Tab для выбора цели, затем нажмите клавишу Enter, чтобы применить перетаскивание, или клавишу Escape для отмены действия.\",\n \"dragStartedTouch\": \"Начато перетаскивание. Выберите цель, затем дважды нажмите, чтобы применить перетаскивание.\",\n \"dragStartedVirtual\": \"Начато перетаскивание. Нажмите клавишу Tab для выбора цели, затем нажмите клавишу Enter, чтобы применить перетаскивание.\",\n \"dropCanceled\": \"Перетаскивание отменено.\",\n \"dropComplete\": \"Перетаскивание завершено.\",\n \"dropDescriptionKeyboard\": \"Нажмите клавишу Enter, чтобы применить перетаскивание. Нажмите клавишу Escape для отмены.\",\n \"dropDescriptionTouch\": \"Дважды нажмите, чтобы применить перетаскивание.\",\n \"dropDescriptionVirtual\": \"Щелкните, чтобы применить перетаскивание.\",\n \"dropIndicator\": \"индикатор перетаскивания\",\n \"dropOnItem\": \"Перетащить на {itemText}\",\n \"dropOnRoot\": \"Перетащить на\",\n \"endDragKeyboard\": \"Перетаскивание. Нажмите клавишу Enter для отмены.\",\n \"endDragTouch\": \"Перетаскивание. Дважды нажмите для отмены.\",\n \"endDragVirtual\": \"Перетаскивание. Щелкните для отмены.\",\n \"insertAfter\": \"Вставить после {itemText}\",\n \"insertBefore\": \"Вставить перед {itemText}\",\n \"insertBetween\": \"Вставить между {beforeItemText} и {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Stlačením klávesu Enter začnete presúvanie.\",\n \"dragDescriptionTouch\": \"Dvojitým kliknutím začnete presúvanie.\",\n \"dragDescriptionVirtual\": \"Kliknutím začnete presúvanie.\",\n \"dragItem\": \"Presunúť položku {itemText}\",\n \"dragSelectedItems\": \"Presunúť {count, plural, one {# vybratú položku} other {# vybraté položky}}\",\n \"dragStartedKeyboard\": \"Presúvanie sa začalo. Do cieľového umiestnenia prejdete stlačením klávesu Tab. Ak chcete položku umiestniť, stlačte kláves Enter alebo stlačte kláves Esc, ak chcete presúvanie zrušiť.\",\n \"dragStartedTouch\": \"Presúvanie sa začalo. Prejdite na cieľové umiestnenie a dvojitým kliknutím umiestnite položku.\",\n \"dragStartedVirtual\": \"Presúvanie sa začalo. Prejdite na cieľové umiestnenie a kliknutím alebo stlačením klávesu Enter umiestnite položku.\",\n \"dropCanceled\": \"Umiestnenie zrušené.\",\n \"dropComplete\": \"Umiestnenie dokončené.\",\n \"dropDescriptionKeyboard\": \"Stlačením klávesu Enter umiestnite položku. Stlačením klávesu Esc zrušíte presúvanie.\",\n \"dropDescriptionTouch\": \"Dvojitým kliknutím umiestnite položku.\",\n \"dropDescriptionVirtual\": \"Kliknutím umiestnite položku.\",\n \"dropIndicator\": \"indikátor umiestnenia\",\n \"dropOnItem\": \"Umiestniť na položku {itemText}\",\n \"dropOnRoot\": \"Umiestniť na\",\n \"endDragKeyboard\": \"Prebieha presúvanie. Ak ho chcete zrušiť, stlačte kláves Enter.\",\n \"endDragTouch\": \"Prebieha presúvanie. Dvojitým kliknutím ho môžete zrušiť.\",\n \"endDragVirtual\": \"Prebieha presúvanie.\",\n \"insertAfter\": \"Vložiť za položku {itemText}\",\n \"insertBefore\": \"Vložiť pred položku {itemText}\",\n \"insertBetween\": \"Vložiť medzi položky {beforeItemText} a {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Pritisnite tipko Enter za začetek vlečenja.\",\n \"dragDescriptionTouch\": \"Dvotapnite za začetek vlečenja.\",\n \"dragDescriptionVirtual\": \"Kliknite za začetek vlečenja.\",\n \"dragItem\": \"Povleci {itemText}\",\n \"dragSelectedItems\": \"Povlecite {count, plural, one {# izbran element} other {izbrane elemente (#)}}\",\n \"dragStartedKeyboard\": \"Vlečenje se je začelo. Pritisnite tipko Tab za pomik na mesto, kamor želite spustiti elemente, in pritisnite tipko Enter, da jih spustite, ali tipko Escape, da prekličete postopek.\",\n \"dragStartedTouch\": \"Vlečenje se je začelo. Pomaknite se na mesto, kamor želite spustiti elemente, in dvotapnite, da jih spustite.\",\n \"dragStartedVirtual\": \"Vlečenje se je začelo. Pomaknite se na mesto, kamor želite spustiti elemente, in kliknite ali pritisnite tipko Enter, da jih spustite.\",\n \"dropCanceled\": \"Spust je preklican.\",\n \"dropComplete\": \"Spust je končan.\",\n \"dropDescriptionKeyboard\": \"Pritisnite tipko Enter, da spustite. Pritisnite tipko Escape, da prekličete vlečenje.\",\n \"dropDescriptionTouch\": \"Dvotapnite, da spustite.\",\n \"dropDescriptionVirtual\": \"Kliknite, da spustite.\",\n \"dropIndicator\": \"indikator spusta\",\n \"dropOnItem\": \"Spusti na mesto {itemText}\",\n \"dropOnRoot\": \"Spusti na mesto\",\n \"endDragKeyboard\": \"Vlečenje. Pritisnite tipko Enter za preklic vlečenja.\",\n \"endDragTouch\": \"Vlečenje. Dvotapnite za preklic vlečenja.\",\n \"endDragVirtual\": \"Vlečenje. Kliknite, da prekličete vlečenje.\",\n \"insertAfter\": \"Vstavi za {itemText}\",\n \"insertBefore\": \"Vstavi pred {itemText}\",\n \"insertBetween\": \"Vstavi med {beforeItemText} in {afterItemText}\"\n}\n","{\n \"dragItem\": \"Prevucite {itemText}\",\n \"dragSelectedItems\": \"Prevucite {count, plural, one {# izabranu stavku} other {# izabrane stavke}}\",\n \"dragDescriptionKeyboard\": \"Pritisnite Enter da biste započeli prevlačenje..\",\n \"dragDescriptionTouch\": \"Dvaput dodirnite za otpuštanje.\",\n \"dragDescriptionVirtual\": \"Kliknite da biste započeli prevlačenje.\",\n \"dragStartedKeyboard\": \"Prevlačenje je započeto. Pritisnite Tab da biste otišli do cilja za otpuštanje, zatim pritisnite Enter za ispuštanje ili pritisnite Escape za otkazivanje.\",\n \"dragStartedTouch\": \"Prevlačenje je započeto. Idite do cilja za otpuštanje, a zatim dvaput dodirnite za otpuštanje.\",\n \"dragStartedVirtual\": \"Prevlačenje je započeto. Idite do cilja za otpuštanje, a zatim kliknite ili pritinite Enter za otpuštanje.\",\n \"endDragKeyboard\": \"Prevlačenje u toku. Pritisnite Enter da biste otkazali prevlačenje.\",\n \"endDragTouch\": \"Prevlačenje u toku. Dvaput dodirnite da biste otkazali prevlačenje.\",\n \"endDragVirtual\": \"Prevlačenje u toku. Kliknite da biste otkazali prevlačenje.\",\n \"dropDescriptionKeyboard\": \"Pritisnite Enter da biste otpustili. Pritisnite Escape da biste otkazali prevlačenje.\",\n \"dropDescriptionTouch\": \"Dvaput dodirnite za otpuštanje.\",\n \"dropDescriptionVirtual\": \"Kliknite za otpuštanje.\",\n \"dropCanceled\": \"Otpuštanje je otkazano.\",\n \"dropComplete\": \"Prevlačenje je završeno.\",\n \"dropIndicator\": \"Indikator otpuštanja\",\n \"dropOnRoot\": \"Otpusti na\",\n \"dropOnItem\": \"Otpusti na {itemText}\",\n \"insertBefore\": \"Umetnite ispred {itemText}\",\n \"insertBetween\": \"Umetnite između {beforeItemText} i {afterItemText}\",\n \"insertAfter\": \"Umetnite posle {itemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Tryck på enter för att börja dra.\",\n \"dragDescriptionTouch\": \"Dubbeltryck för att börja dra.\",\n \"dragDescriptionVirtual\": \"Klicka för att börja dra.\",\n \"dragItem\": \"Dra {itemText}\",\n \"dragSelectedItems\": \"Dra {count, plural, one {# valt objekt} other {# valda objekt}}\",\n \"dragStartedKeyboard\": \"Börja dra. Tryck på tabb för att navigera till målet, tryck på enter för att släppa eller på escape för att avbryta.\",\n \"dragStartedTouch\": \"Börja dra. Navigera till ett mål och dubbeltryck för att släppa.\",\n \"dragStartedVirtual\": \"Börja dra. Navigera till ett mål och klicka eller tryck på enter för att släppa.\",\n \"dropCanceled\": \"Släppåtgärd avbröts.\",\n \"dropComplete\": \"Släppåtgärd klar.\",\n \"dropDescriptionKeyboard\": \"Tryck på enter för att släppa. Tryck på escape för att avbryta dragåtgärd.\",\n \"dropDescriptionTouch\": \"Dubbeltryck för att släppa.\",\n \"dropDescriptionVirtual\": \"Klicka för att släppa.\",\n \"dropIndicator\": \"släppindikator\",\n \"dropOnItem\": \"Släpp på {itemText}\",\n \"dropOnRoot\": \"Släpp på\",\n \"endDragKeyboard\": \"Drar. Tryck på enter för att avbryta dragåtgärd.\",\n \"endDragTouch\": \"Drar. Dubbeltryck för att avbryta dragåtgärd.\",\n \"endDragVirtual\": \"Drar. Klicka för att avbryta dragåtgärd.\",\n \"insertAfter\": \"Infoga efter {itemText}\",\n \"insertBefore\": \"Infoga före {itemText}\",\n \"insertBetween\": \"Infoga mellan {beforeItemText} och {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Sürüklemeyi başlatmak için Enter'a basın.\",\n \"dragDescriptionTouch\": \"Sürüklemeyi başlatmak için çift tıklayın.\",\n \"dragDescriptionVirtual\": \"Sürüklemeyi başlatmak için tıklayın.\",\n \"dragItem\": \"{itemText}’i sürükle\",\n \"dragSelectedItems\": \"Sürükle {count, plural, one {# seçili öge} other {# seçili öge}}\",\n \"dragStartedKeyboard\": \"Sürükleme başlatıldı. Bir bırakma hedefine gitmek için Tab’a basın, ardından bırakmak için Enter’a basın veya iptal etmek için Escape’e basın.\",\n \"dragStartedTouch\": \"Sürükleme başlatıldı. Bir bırakma hedefine gidin, ardından bırakmak için çift tıklayın.\",\n \"dragStartedVirtual\": \"Sürükleme başlatıldı. Bir bırakma hedefine gidin, ardından bırakmak için Enter’a tıklayın veya basın.\",\n \"dropCanceled\": \"Bırakma iptal edildi.\",\n \"dropComplete\": \"Bırakma tamamlandı.\",\n \"dropDescriptionKeyboard\": \"Bırakmak için Enter'a basın. Sürüklemeyi iptal etmek için Escape'e basın.\",\n \"dropDescriptionTouch\": \"Bırakmak için çift tıklayın.\",\n \"dropDescriptionVirtual\": \"Bırakmak için tıklayın.\",\n \"dropIndicator\": \"bırakma göstergesi\",\n \"dropOnItem\": \"{itemText} üzerine bırak\",\n \"dropOnRoot\": \"Bırakın\",\n \"endDragKeyboard\": \"Sürükleme. Sürüklemeyi iptal etmek için Enter'a basın.\",\n \"endDragTouch\": \"Sürükleme. Sürüklemeyi iptal etmek için çift tıklayın.\",\n \"endDragVirtual\": \"Sürükleme. Sürüklemeyi iptal etmek için tıklayın.\",\n \"insertAfter\": \"{itemText}’den sonra gir\",\n \"insertBefore\": \"{itemText}’den önce gir\",\n \"insertBetween\": \"{beforeItemText} ve {afterItemText} arasına gir\"\n}\n","{\n \"dragDescriptionKeyboard\": \"Натисніть Enter, щоб почати перетягування.\",\n \"dragDescriptionTouch\": \"Натисніть двічі, щоб почати перетягування.\",\n \"dragDescriptionVirtual\": \"Натисніть, щоб почати перетягування.\",\n \"dragItem\": \"Перетягнути {itemText}\",\n \"dragSelectedItems\": \"Перетягніть {count, plural, one {# вибраний елемент} other {# вибраних елем}}\",\n \"dragStartedKeyboard\": \"Перетягування почалося. Натисніть Tab, щоб перейти до цілі перетягування, потім натисніть Enter, щоб перетягнути, або Escape, щоб скасувати.\",\n \"dragStartedTouch\": \"Перетягування почалося. Перейдіть до цілі перетягування, потім натисніть двічі, щоб перетягнути.\",\n \"dragStartedVirtual\": \"Перетягування почалося. Перейдіть до цілі перетягування, потім натисніть Enter, щоб перетягнути.\",\n \"dropCanceled\": \"Перетягування скасовано.\",\n \"dropComplete\": \"Перетягування завершено.\",\n \"dropDescriptionKeyboard\": \"Натисніть Enter, щоб перетягнути. Натисніть Escape, щоб скасувати перетягування.\",\n \"dropDescriptionTouch\": \"Натисніть двічі, щоб перетягнути.\",\n \"dropDescriptionVirtual\": \"Натисніть, щоб перетягнути.\",\n \"dropIndicator\": \"індикатор перетягування\",\n \"dropOnItem\": \"Перетягнути на {itemText}\",\n \"dropOnRoot\": \"Перетягнути на\",\n \"endDragKeyboard\": \"Триває перетягування. Натисніть Enter, щоб скасувати перетягування.\",\n \"endDragTouch\": \"Триває перетягування. Натисніть двічі, щоб скасувати перетягування.\",\n \"endDragVirtual\": \"Триває перетягування. Натисніть, щоб скасувати перетягування.\",\n \"insertAfter\": \"Вставити після {itemText}\",\n \"insertBefore\": \"Вставити перед {itemText}\",\n \"insertBetween\": \"Вставити між {beforeItemText} і {afterItemText}\"\n}\n","{\n \"dragDescriptionKeyboard\": \"按 Enter 开始拖动。\",\n \"dragDescriptionTouch\": \"双击开始拖动。\",\n \"dragDescriptionVirtual\": \"单击开始拖动。\",\n \"dragItem\": \"拖动 {itemText}\",\n \"dragSelectedItems\": \"拖动 {count, plural, one {# 选中项目} other {# 选中项目}}\",\n \"dragStartedKeyboard\": \"已开始拖动。按 Tab 导航到放置目标,然后按 Enter 放置或按 Escape 取消。\",\n \"dragStartedTouch\": \"已开始拖动。导航到放置目标,然后双击放置。\",\n \"dragStartedVirtual\": \"已开始拖动。导航到放置目标,然后单击或按 Enter 放置。\",\n \"dropCanceled\": \"放置已取消。\",\n \"dropComplete\": \"放置已完成。\",\n \"dropDescriptionKeyboard\": \"按 Enter 放置。按 Escape 取消拖动。\",\n \"dropDescriptionTouch\": \"双击放置。\",\n \"dropDescriptionVirtual\": \"单击放置。\",\n \"dropIndicator\": \"放置标记\",\n \"dropOnItem\": \"放置于 {itemText}\",\n \"dropOnRoot\": \"放置于\",\n \"endDragKeyboard\": \"正在拖动。按 Enter 取消拖动。\",\n \"endDragTouch\": \"正在拖动。双击取消拖动。\",\n \"endDragVirtual\": \"正在拖动。单击取消拖动。\",\n \"insertAfter\": \"插入到 {itemText} 之后\",\n \"insertBefore\": \"插入到 {itemText} 之前\",\n \"insertBetween\": \"插入到 {beforeItemText} 和 {afterItemText} 之间\"\n}\n","{\n \"dragDescriptionKeyboard\": \"按 Enter 鍵以開始拖曳。\",\n \"dragDescriptionTouch\": \"輕點兩下以開始拖曳。\",\n \"dragDescriptionVirtual\": \"按一下滑鼠以開始拖曳。\",\n \"dragItem\": \"拖曳「{itemText}」\",\n \"dragSelectedItems\": \"拖曳 {count, plural, one {# 個選定項目} other {# 個選定項目}}\",\n \"dragStartedKeyboard\": \"已開始拖曳。按 Tab 鍵以瀏覽至放置目標,然後按 Enter 鍵以放置,或按 Escape 鍵以取消。\",\n \"dragStartedTouch\": \"已開始拖曳。瀏覽至放置目標,然後輕點兩下以放置。\",\n \"dragStartedVirtual\": \"已開始拖曳。瀏覽至放置目標,然後按一下滑鼠或按 Enter 鍵以放置。\",\n \"dropCanceled\": \"放置已取消。\",\n \"dropComplete\": \"放置已完成。\",\n \"dropDescriptionKeyboard\": \"按 Enter 鍵以放置。按 Escape 鍵以取消拖曳。\",\n \"dropDescriptionTouch\": \"輕點兩下以放置。\",\n \"dropDescriptionVirtual\": \"按一下滑鼠以放置。\",\n \"dropIndicator\": \"放置指示器\",\n \"dropOnItem\": \"放置在「{itemText}」上\",\n \"dropOnRoot\": \"放置在\",\n \"endDragKeyboard\": \"拖曳中。按 Enter 鍵以取消拖曳。\",\n \"endDragTouch\": \"拖曳中。輕點兩下以取消拖曳。\",\n \"endDragVirtual\": \"拖曳中。按一下滑鼠以取消拖曳。\",\n \"insertAfter\": \"插入至「{itemText}」之後\",\n \"insertBefore\": \"插入至「{itemText}」之前\",\n \"insertBetween\": \"插入至「{beforeItemText}」和「{afterItemText}」之間\"\n}\n","/*\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 {DragEvent, HTMLAttributes, RefObject, useRef, useState} from 'react';\nimport * as DragManager from './DragManager';\nimport {DragTypes, readFromDataTransfer} from './utils';\nimport {DROP_EFFECT_TO_DROP_OPERATION, DROP_OPERATION, DROP_OPERATION_ALLOWED, DROP_OPERATION_TO_DROP_EFFECT} from './constants';\nimport {DropActivateEvent, DropEnterEvent, DropEvent, DropExitEvent, DropMoveEvent, DropOperation, DragTypes as IDragTypes} from '@react-types/shared';\nimport {useLayoutEffect} from '@react-aria/utils';\nimport {useVirtualDrop} from './useVirtualDrop';\n\ninterface DropOptions {\n ref: RefObject<HTMLElement>,\n getDropOperation?: (types: IDragTypes, allowedOperations: DropOperation[]) => DropOperation,\n getDropOperationForPoint?: (types: IDragTypes, allowedOperations: DropOperation[], x: number, y: number) => DropOperation,\n onDropEnter?: (e: DropEnterEvent) => void,\n onDropMove?: (e: DropMoveEvent) => void,\n // When the user hovers over the drop target for a period of time.\n // typically opens that item. macOS/iOS call this \"spring loading\".\n onDropActivate?: (e: DropActivateEvent) => void,\n onDropExit?: (e: DropExitEvent) => void,\n onDrop?: (e: DropEvent) => void\n}\n\ninterface DropResult {\n dropProps: HTMLAttributes<HTMLElement>,\n isDropTarget: boolean // (??) whether the element is currently an active drop target\n}\n\nconst DROP_ACTIVATE_TIMEOUT = 800;\n\nexport function useDrop(options: DropOptions): DropResult {\n let [isDropTarget, setDropTarget] = useState(false);\n let state = useRef({\n x: 0,\n y: 0,\n dragEnterCount: 0,\n dropEffect: 'none' as DataTransfer['dropEffect'],\n dropActivateTimer: null\n }).current;\n\n let onDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (e.clientX === state.x && e.clientY === state.y) {\n e.dataTransfer.dropEffect = state.dropEffect;\n return;\n }\n\n state.x = e.clientX;\n state.y = e.clientY;\n\n if (typeof options.getDropOperationForPoint === 'function') {\n let allowedOperations = effectAllowedToOperations(e.dataTransfer.effectAllowed);\n let types = new DragTypes(e.dataTransfer);\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n let dropOperation = options.getDropOperationForPoint(types, allowedOperations, state.x - rect.x, state.y - rect.y);\n state.dropEffect = DROP_OPERATION_TO_DROP_EFFECT[dropOperation] || 'none';\n }\n\n e.dataTransfer.dropEffect = state.dropEffect;\n\n if (typeof options.onDropMove === 'function') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n options.onDropMove({\n type: 'dropmove',\n x: state.x - rect.x,\n y: state.y - rect.y\n });\n }\n\n clearTimeout(state.dropActivateTimer);\n\n if (typeof options.onDropActivate === 'function' && state.dropEffect !== 'none') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n state.dropActivateTimer = setTimeout(() => {\n options.onDropActivate({\n type: 'dropactivate',\n x: state.x - rect.x,\n y: state.y - rect.y\n });\n }, DROP_ACTIVATE_TIMEOUT);\n }\n };\n\n let onDragEnter = (e: DragEvent) => {\n e.stopPropagation();\n state.dragEnterCount++;\n if (state.dragEnterCount > 1) {\n return;\n }\n\n let allowedOperations = effectAllowedToOperations(e.dataTransfer.effectAllowed);\n let dropOperation = allowedOperations[0];\n\n if (typeof options.getDropOperation === 'function') {\n let types = new DragTypes(e.dataTransfer);\n dropOperation = options.getDropOperation(types, allowedOperations);\n }\n\n if (dropOperation !== 'cancel') {\n setDropTarget(true);\n }\n\n if (typeof options.getDropOperationForPoint === 'function') {\n let types = new DragTypes(e.dataTransfer);\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n dropOperation = options.getDropOperationForPoint(types, allowedOperations, e.clientX - rect.x, e.clientY - rect.y);\n }\n\n state.dropEffect = DROP_OPERATION_TO_DROP_EFFECT[dropOperation] || 'none';\n e.dataTransfer.dropEffect = state.dropEffect;\n\n if (typeof options.onDropEnter === 'function' && dropOperation !== 'cancel') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n options.onDropEnter({\n type: 'dropenter',\n x: e.clientX - rect.x,\n y: e.clientY - rect.y\n });\n }\n\n state.x = e.clientX;\n state.y = e.clientY;\n };\n\n let onDragLeave = (e: DragEvent) => {\n e.stopPropagation();\n state.dragEnterCount--;\n if (state.dragEnterCount > 0) {\n return;\n }\n\n if (typeof options.onDropExit === 'function' && state.dropEffect !== 'none') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n options.onDropExit({\n type: 'dropexit',\n x: e.clientX - rect.x,\n y: e.clientY - rect.y\n });\n }\n\n setDropTarget(false);\n clearTimeout(state.dropActivateTimer);\n };\n\n let onDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (typeof options.onDrop === 'function') {\n let dropOperation = DROP_EFFECT_TO_DROP_OPERATION[state.dropEffect];\n let items = readFromDataTransfer(e.dataTransfer);\n\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n let event: DropEvent = {\n type: 'drop',\n x: e.clientX - rect.x,\n y: e.clientY - rect.y,\n items,\n dropOperation\n };\n\n // Wait a frame to dispatch the drop event so that we ensure the dragend event fires first.\n // Otherwise, if onDrop removes the original dragged element from the DOM, dragend will never be fired.\n // This behavior is consistent across browsers, but see this issue for details:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=460801\n setTimeout(() => {\n options.onDrop(event);\n }, 0);\n }\n\n if (typeof options.onDropExit === 'function') {\n let rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n options.onDropExit({\n type: 'dropexit',\n x: e.clientX - rect.x,\n y: e.clientY - rect.y\n });\n }\n\n state.dragEnterCount = 0;\n setDropTarget(false);\n clearTimeout(state.dropActivateTimer);\n };\n\n let optionsRef = useRef(options);\n optionsRef.current = options;\n\n useLayoutEffect(() => DragManager.registerDropTarget({\n element: optionsRef.current.ref.current,\n getDropOperation: optionsRef.current.getDropOperation,\n onDropEnter(e) {\n setDropTarget(true);\n if (typeof optionsRef.current.onDropEnter === 'function') {\n optionsRef.current.onDropEnter(e);\n }\n },\n onDropExit(e) {\n setDropTarget(false);\n if (typeof optionsRef.current.onDropExit === 'function') {\n optionsRef.current.onDropExit(e);\n }\n },\n onDrop(e) {\n if (typeof optionsRef.current.onDrop === 'function') {\n optionsRef.current.onDrop(e);\n }\n },\n onDropActivate(e) {\n if (typeof optionsRef.current.onDropActivate === 'function') {\n optionsRef.current.onDropActivate(e);\n }\n }\n }), [optionsRef]);\n\n let {dropProps} = useVirtualDrop();\n\n return {\n dropProps: {\n ...dropProps,\n onDragEnter,\n onDragOver,\n onDragLeave,\n onDrop\n },\n isDropTarget\n };\n}\n\nfunction effectAllowedToOperations(effectAllowed: string) {\n let allowedOperationsBits = DROP_OPERATION_ALLOWED[effectAllowed];\n let allowedOperations = [];\n if (allowedOperationsBits & DROP_OPERATION.move) {\n allowedOperations.push('move');\n }\n\n if (allowedOperationsBits & DROP_OPERATION.copy) {\n allowedOperations.push('copy');\n }\n\n if (allowedOperationsBits & DROP_OPERATION.link) {\n allowedOperations.push('link');\n }\n\n return allowedOperations;\n}\n","/*\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 * as DragManager from './DragManager';\nimport {HTMLAttributes} from 'react';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDescription} from '@react-aria/utils';\nimport {useDragModality} from './utils';\nimport {useMessageFormatter} from '@react-aria/i18n';\n\ninterface VirtualDropResult {\n dropProps: HTMLAttributes<HTMLElement>\n}\n\nconst MESSAGES = {\n keyboard: 'dropDescriptionKeyboard',\n touch: 'dropDescriptionTouch',\n virtual: 'dropDescriptionVirtual'\n};\n\nexport function useVirtualDrop(): VirtualDropResult {\n let formatMessage = useMessageFormatter(intlMessages);\n let modality = useDragModality();\n let dragSession = DragManager.useDragSession();\n let descriptionProps = useDescription(dragSession ? formatMessage(MESSAGES[modality]) : '');\n\n return {\n dropProps: {\n ...descriptionProps,\n // Mobile Safari does not properly bubble click events on elements except links or inputs\n // unless there is an onclick handler bound directly to the element itself. By adding this\n // handler, React will take care of adding that for us, and we are able to handle document\n // level click events in the DragManager.\n // See https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n onClick: () => {}\n }\n };\n}\n","/*\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 {Collection, DropEvent, DropOperation, DroppableCollectionProps, DropPosition, DropTarget, KeyboardDelegate, Node} from '@react-types/shared';\nimport * as DragManager from './DragManager';\nimport {DroppableCollectionState} from '@react-stately/dnd';\nimport {getTypes} from './utils';\nimport {HTMLAttributes, Key, RefObject, useCallback, useEffect, useRef} from 'react';\nimport {mergeProps, useLayoutEffect} from '@react-aria/utils';\nimport {setInteractionModality} from '@react-aria/interactions';\nimport {useAutoScroll} from './useAutoScroll';\nimport {useDrop} from './useDrop';\nimport {useDroppableCollectionId} from './utils';\n\ninterface DroppableCollectionOptions extends DroppableCollectionProps {\n keyboardDelegate: KeyboardDelegate,\n getDropTargetFromPoint: (x: number, y: number) => DropTarget | null\n}\n\ninterface DroppableCollectionResult {\n collectionProps: HTMLAttributes<HTMLElement>\n}\n\ninterface DroppingState {\n collection: Collection<Node<unknown>>,\n focusedKey: Key,\n selectedKeys: Set<Key>,\n timeout: NodeJS.Timeout\n}\n\nconst DROP_POSITIONS: DropPosition[] = ['before', 'on', 'after'];\n\nexport function useDroppableCollection(props: DroppableCollectionOptions, state: DroppableCollectionState, ref: RefObject<HTMLElement>): DroppableCollectionResult {\n let localState = useRef({\n props,\n state,\n nextTarget: null,\n dropOperation: null\n }).current;\n localState.props = props;\n localState.state = state;\n\n let autoScroll = useAutoScroll(ref);\n let {dropProps} = useDrop({\n ref,\n onDropEnter(e) {\n let target = props.getDropTargetFromPoint(e.x, e.y);\n state.setTarget(target);\n },\n onDropMove(e) {\n state.setTarget(localState.nextTarget);\n autoScroll.move(e.x, e.y);\n },\n getDropOperationForPoint(types, allowedOperations, x, y) {\n let target = props.getDropTargetFromPoint(x, y);\n if (!target) {\n localState.dropOperation = 'cancel';\n localState.nextTarget = null;\n return 'cancel';\n }\n\n if (state.isDropTarget(target)) {\n localState.nextTarget = target;\n return localState.dropOperation;\n }\n\n localState.dropOperation = state.getDropOperation(target, types, allowedOperations);\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(rootTarget, types, allowedOperations);\n if (dropOperation !== 'cancel') {\n target = rootTarget;\n localState.dropOperation = dropOperation;\n }\n }\n\n localState.nextTarget = localState.dropOperation === 'cancel' ? null : target;\n return localState.dropOperation;\n },\n onDropExit() {\n state.setTarget(null);\n autoScroll.stop();\n },\n onDropActivate(e) {\n if (state.target?.type === 'item' && state.target?.dropPosition === 'on' && 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 if (state.target && typeof props.onDrop === 'function') {\n onDrop(e, state.target);\n }\n }\n });\n\n let droppingState = useRef<DroppingState>(null);\n let onDrop = useCallback((e: DropEvent, target: DropTarget) => {\n let {state} = localState;\n\n // Focus the collection.\n state.selectionManager.setFocused(true);\n\n // Save some state of the collection/selection before the drop occurs so we can compare later.\n let focusedKey = state.selectionManager.focusedKey;\n droppingState.current = {\n timeout: null,\n focusedKey,\n collection: state.collection,\n selectedKeys: state.selectionManager.selectedKeys\n };\n\n localState.props.onDrop({\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 an insert occurs during this time, it will be selected/focused below.\n // If items are not \"immediately\" inserted by the onDrop handler, the application will need to handle\n // selecting and focusing those items themselves.\n droppingState.current.timeout = setTimeout(() => {\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 let {state} = localState;\n if (state.selectionManager.focusedKey === focusedKey) {\n if (target.type === 'item' && target.dropPosition === 'on' && state.collection.getItem(target.key) != null) {\n state.selectionManager.setFocusedKey(target.key);\n state.selectionManager.setFocused(true);\n setInteractionModality('keyboard');\n } else if (!state.selectionManager.isSelected(focusedKey)) {\n setInteractionModality('keyboard');\n }\n }\n\n droppingState.current = null;\n }, 50);\n }, [localState]);\n\n // eslint-disable-next-line arrow-body-style\n useEffect(() => {\n return () => {\n if (droppingState.current) {\n clearTimeout(droppingState.current.timeout);\n }\n };\n }, []);\n\n useLayoutEffect(() => {\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 droppingState.current &&\n state.selectionManager.isFocused &&\n state.collection.size > droppingState.current.collection.size &&\n state.selectionManager.isSelectionEqual(droppingState.current.selectedKeys)\n ) {\n let newKeys = new Set<Key>();\n for (let key of state.collection.getKeys()) {\n if (!droppingState.current.collection.getItem(key)) {\n newKeys.add(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 === droppingState.current.focusedKey) {\n let first = newKeys.keys().next().value;\n state.selectionManager.setFocusedKey(first);\n\n if (state.selectionManager.selectionMode === 'none') {\n setInteractionModality('keyboard');\n }\n }\n\n droppingState.current = null;\n }\n });\n\n useEffect(() => {\n let getNextTarget = (target: DropTarget, wrap = true): DropTarget => {\n if (!target) {\n return {\n type: 'root'\n };\n }\n\n let {keyboardDelegate} = localState.props;\n let nextKey = target.type === 'item'\n ? keyboardDelegate.getKeyBelow(target.key)\n : keyboardDelegate.getFirstKey();\n let dropPosition: DropPosition = 'before';\n\n if (target.type === 'item') {\n let positionIndex = DROP_POSITIONS.indexOf(target.dropPosition);\n let nextDropPosition = DROP_POSITIONS[positionIndex + 1];\n if (positionIndex < DROP_POSITIONS.length - 1 && !(nextDropPosition === 'after' && nextKey != null)) {\n return {\n type: 'item',\n key: target.key,\n dropPosition: nextDropPosition\n };\n }\n\n // If the last drop position was 'after', then 'before' on the next key is equivalent.\n // Switch to 'on' instead.\n if (target.dropPosition === 'after') {\n dropPosition = 'on';\n }\n }\n\n if (nextKey == null) {\n if (wrap) {\n return {\n type: 'root'\n };\n }\n\n return null;\n }\n\n return {\n type: 'item',\n key: nextKey,\n dropPosition\n };\n };\n\n let getPreviousTarget = (target: DropTarget, wrap = true): DropTarget => {\n let {keyboardDelegate} = localState.props;\n let nextKey = target?.type === 'item'\n ? keyboardDelegate.getKeyAbove(target.key)\n : keyboardDelegate.getLastKey();\n let dropPosition: DropPosition = !target || target.type === 'root' ? 'after' : 'on';\n\n if (target?.type === 'item') {\n let positionIndex = DROP_POSITIONS.indexOf(target.dropPosition);\n let nextDropPosition = DROP_POSITIONS[positionIndex - 1];\n if (positionIndex > 0 && nextDropPosition !== 'after') {\n return {\n type: 'item',\n key: target.key,\n dropPosition: nextDropPosition\n };\n }\n\n // If the last drop position was 'before', then 'after' on the previous key is equivalent.\n // Switch to 'on' instead.\n if (target.dropPosition === 'before') {\n dropPosition = 'on';\n }\n }\n\n if (nextKey == null) {\n if (wrap) {\n return {\n type: 'root'\n };\n }\n\n return null;\n }\n\n return {\n type: 'item',\n key: nextKey,\n dropPosition\n };\n };\n\n let nextValidTarget = (\n target: DropTarget,\n types: Set<string>,\n allowedDropOperations: DropOperation[],\n getNextTarget: (target: DropTarget, wrap: boolean) => DropTarget,\n wrap = true\n ): DropTarget => {\n let seenRoot = 0;\n let operation: DropOperation;\n do {\n let nextTarget = getNextTarget(target, wrap);\n if (!nextTarget) {\n return null;\n }\n target = nextTarget;\n operation = localState.state.getDropOperation(nextTarget, types, allowedDropOperations);\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 getDropOperation(types, allowedOperations) {\n if (localState.state.target) {\n return localState.state.getDropOperation(localState.state.target, types, allowedOperations);\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;\n\n // When entering the droppable collection for the first time, the default drop target\n // is after the focused key.\n let key = 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 = localState.state.collection.getItem(key);\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 (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 // If the default target is not valid, find the next one that is.\n if (localState.state.getDropOperation(target, types, drag.allowedDropOperations) === '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 localState.state.setTarget(null);\n },\n onDropTargetEnter(target) {\n localState.state.setTarget(target);\n },\n onDropActivate(e) {\n if (\n localState.state.target?.type === 'item' &&\n localState.state.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: localState.state.target\n });\n }\n },\n onDrop(e, target) {\n if (localState.state.target && typeof localState.props.onDrop === 'function') {\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, getNextTarget);\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, getPreviousTarget);\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 nextKey = keyboardDelegate.getKeyPageBelow(\n target.type === 'item'\n ? target.key\n : keyboardDelegate.getFirstKey()\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();\n dropPosition = 'after';\n }\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 operation = localState.state.getDropOperation(target, types, drag.allowedDropOperations);\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 = keyboardDelegate.getKeyPageAbove(target.key);\n let dropPosition = target.dropPosition;\n if (nextKey == null) {\n nextKey = keyboardDelegate.getFirstKey();\n dropPosition = 'before';\n }\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 operation = localState.state.getDropOperation(target, types, drag.allowedDropOperations);\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 }\n });\n }, [localState, ref, onDrop]);\n\n let id = useDroppableCollectionId(state);\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","/*\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 {getScrollParent, isIOS, isWebKit} from '@react-aria/utils';\nimport {RefObject, useCallback, useEffect, useRef} from 'react';\n\nconst AUTOSCROLL_AREA_SIZE = 20;\n\nexport function useAutoScroll(ref: RefObject<Element>) {\n let scrollableRef = useRef<Element>(null);\n useEffect(() => {\n if (ref.current) {\n scrollableRef.current = getScrollParent(ref.current);\n }\n }, [ref]);\n\n let state = useRef({\n timer: null,\n dx: 0,\n dy: 0\n }).current;\n\n let scroll = useCallback(() => {\n scrollableRef.current.scrollLeft += state.dx;\n scrollableRef.current.scrollTop += state.dy;\n\n if (state.timer) {\n state.timer = requestAnimationFrame(scroll);\n }\n }, [scrollableRef, state]);\n\n return {\n move(x, y) {\n // Most browsers auto scroll natively, but WebKit on macOS does not (iOS does 🤷‍♂️).\n // https://bugs.webkit.org/show_bug.cgi?id=222636\n if (!isWebKit() || isIOS() || !scrollableRef.current) {\n return;\n }\n\n let box = scrollableRef.current.getBoundingClientRect();\n let left = AUTOSCROLL_AREA_SIZE;\n let top = AUTOSCROLL_AREA_SIZE;\n let bottom = box.height - AUTOSCROLL_AREA_SIZE;\n let right = box.width - AUTOSCROLL_AREA_SIZE;\n if (x < left || x > right || y < top || y > bottom) {\n if (x < left) {\n state.dx = x - left;\n } else if (x > right) {\n state.dx = x - right;\n }\n if (y < top) {\n state.dy = y - top;\n } else if (y > bottom) {\n state.dy = y - bottom;\n }\n\n if (!state.timer) {\n state.timer = requestAnimationFrame(scroll);\n }\n } else {\n this.stop();\n }\n },\n stop() {\n if (state.timer) {\n cancelAnimationFrame(state.timer);\n state.timer = null;\n }\n }\n };\n}\n","/*\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 * as DragManager from './DragManager';\nimport {DroppableCollectionState} from '@react-stately/dnd';\nimport {DropTarget} from '@react-types/shared';\nimport {getTypes} from './utils';\nimport {HTMLAttributes, RefObject, useEffect} from 'react';\nimport {useVirtualDrop} from './useVirtualDrop';\n\ninterface DroppableItemOptions {\n target: DropTarget\n}\n\ninterface DroppableItemResult {\n dropProps: HTMLAttributes<HTMLElement>\n}\n\nexport function useDroppableItem(options: DroppableItemOptions, state: DroppableCollectionState, ref: RefObject<HTMLElement>): DroppableItemResult {\n let {dropProps} = useVirtualDrop();\n\n useEffect(() => {\n if (ref.current) {\n return DragManager.registerDropItem({\n element: ref.current,\n target: options.target,\n getDropOperation(types, allowedOperations) {\n return state.getDropOperation(\n options.target,\n types,\n allowedOperations\n );\n }\n });\n }\n }, [ref, options.target, state]);\n\n let dragSession = DragManager.useDragSession();\n let isValidDropTarget = dragSession && state.getDropOperation(\n options.target,\n getTypes(dragSession.dragTarget.items),\n dragSession.dragTarget.allowedDropOperations\n ) !== 'cancel';\n\n let isDropTarget = state.isDropTarget(options.target);\n useEffect(() => {\n if (dragSession && isDropTarget && ref.current) {\n ref.current.focus();\n }\n }, [isDropTarget, dragSession, ref]);\n\n return {\n dropProps: {\n ...dropProps,\n 'aria-hidden': !dragSession || isValidDropTarget ? undefined : 'true'\n }\n };\n}\n","/*\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 * as DragManager from './DragManager';\nimport {DroppableCollectionState} from '@react-stately/dnd';\nimport {DropTarget} from '@react-types/shared';\nimport {getDroppableCollectionId} from './utils';\nimport {HTMLAttributes, Key, RefObject} from 'react';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDroppableItem} from './useDroppableItem';\nimport {useId} from '@react-aria/utils';\nimport {useMessageFormatter} from '@react-aria/i18n';\n\ninterface DropIndicatorProps {\n target: DropTarget\n}\n\ninterface DropIndicatorAria {\n dropIndicatorProps: HTMLAttributes<HTMLElement>\n}\n\nexport function useDropIndicator(props: DropIndicatorProps, state: DroppableCollectionState, ref: RefObject<HTMLElement>): DropIndicatorAria {\n let {target} = props;\n let {collection} = state;\n\n let formatMessage = useMessageFormatter(intlMessages);\n let dragSession = DragManager.useDragSession();\n let {dropProps} = useDroppableItem(props, state, ref);\n let id = useId();\n let getText = (key: Key) => collection.getItem(key)?.textValue;\n\n let label = '';\n let labelledBy: string;\n if (target.type === 'root') {\n label = formatMessage('dropOnRoot');\n labelledBy = `${id} ${getDroppableCollectionId(state)}`;\n } else if (target.dropPosition === 'on') {\n label = formatMessage('dropOnItem', {\n itemText: getText(target.key)\n });\n } else {\n let before = target.dropPosition === 'before'\n ? collection.getKeyBefore(target.key)\n : target.key;\n let after = target.dropPosition === 'after'\n ? collection.getKeyAfter(target.key)\n : target.key;\n\n if (before && after) {\n label = formatMessage('insertBetween', {\n beforeItemText: getText(before),\n afterItemText: getText(after)\n });\n } else if (before) {\n label = formatMessage('insertAfter', {\n itemText: getText(before)\n });\n } else if (after) {\n label = formatMessage('insertBefore', {\n itemText: getText(after)\n });\n }\n }\n\n return {\n dropIndicatorProps: {\n ...dropProps,\n id,\n 'aria-roledescription': formatMessage('dropIndicator'),\n 'aria-label': label,\n 'aria-labelledby': labelledBy,\n 'aria-hidden': !dragSession ? 'true' : dropProps['aria-hidden'],\n tabIndex: -1\n }\n };\n}\n","/*\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 {AriaButtonProps} from '@react-types/button';\nimport {DraggableCollectionState} from '@react-stately/dnd';\nimport {HTMLAttributes, Key} from 'react';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport {useDrag} from './useDrag';\nimport {useMessageFormatter} from '@react-aria/i18n';\n\ninterface DraggableItemProps {\n key: Key\n}\n\ninterface DraggableItemResult {\n dragProps: HTMLAttributes<HTMLElement>,\n dragButtonProps: AriaButtonProps\n}\n\nexport function useDraggableItem(props: DraggableItemProps, state: DraggableCollectionState): DraggableItemResult {\n let formatMessage = useMessageFormatter(intlMessages);\n let {dragProps, dragButtonProps} = useDrag({\n getItems() {\n return state.getItems(props.key);\n },\n renderPreview() {\n return state.renderPreview(props.key);\n },\n onDragStart(e) {\n state.startDrag(props.key, e);\n },\n onDragMove(e) {\n state.moveDrag(e);\n },\n onDragEnd(e) {\n state.endDrag(e);\n }\n });\n\n let item = state.collection.getItem(props.key);\n let numSelectedKeys = state.selectionManager.selectedKeys.size;\n let isSelected = state.selectionManager.isSelected(props.key);\n let message: string;\n if (isSelected && numSelectedKeys > 1) {\n message = formatMessage('dragSelectedItems', {count: numSelectedKeys});\n } else {\n message = formatMessage('dragItem', {itemText: item?.textValue ?? ''});\n }\n\n return {\n dragProps,\n dragButtonProps: {\n ...dragButtonProps,\n 'aria-label': message\n }\n };\n}\n","/*\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 {chain} from '@react-aria/utils';\nimport {DragItem, DropItem} from '@react-types/shared';\nimport {HTMLAttributes, useEffect, useRef} from 'react';\nimport {readFromDataTransfer, writeToDataTransfer} from './utils';\nimport {useFocus} from '@react-aria/interactions';\n\ninterface ClipboardProps {\n getItems?: () => DragItem[],\n onCopy?: () => void,\n onCut?: () => void,\n onPaste?: (items: DropItem[]) => void\n}\n\ninterface ClipboardResult {\n clipboardProps: HTMLAttributes<HTMLElement>\n}\n\nconst globalEvents = new Map();\nfunction addGlobalEventListener(event, fn) {\n let eventData = globalEvents.get(event);\n if (!eventData) {\n let handlers = new Set<(e: Event) => void>();\n let listener = (e) => {\n for (let handler of handlers) {\n handler(e);\n }\n };\n\n eventData = {listener, handlers};\n globalEvents.set(event, eventData);\n\n document.addEventListener(event, listener);\n }\n\n eventData.handlers.add(fn);\n return () => {\n eventData.handlers.delete(fn);\n if (eventData.handlers.size === 0) {\n document.removeEventListener(event, eventData.listener);\n globalEvents.delete(event);\n }\n };\n}\n\nexport function useClipboard(options: ClipboardProps): ClipboardResult {\n let ref = useRef(options);\n ref.current = options;\n\n let isFocusedRef = useRef(false);\n let {focusProps} = useFocus({\n onFocusChange: (isFocused) => {\n isFocusedRef.current = isFocused;\n }\n });\n\n useEffect(() => {\n let onBeforeCopy = (e: ClipboardEvent) => {\n // Enable the \"Copy\" menu item in Safari if this element is focused and copying is supported.\n let options = ref.current;\n if (isFocusedRef.current && options.getItems) {\n e.preventDefault();\n }\n };\n\n let onCopy = (e: ClipboardEvent) => {\n let options = ref.current;\n if (!isFocusedRef.current || !options.getItems) {\n return;\n }\n\n e.preventDefault();\n writeToDataTransfer(e.clipboardData, options.getItems());\n options.onCopy?.();\n };\n\n let onBeforeCut = (e: ClipboardEvent) => {\n let options = ref.current;\n if (isFocusedRef.current && options.onCut && options.getItems) {\n e.preventDefault();\n }\n };\n\n let onCut = (e: ClipboardEvent) => {\n let options = ref.current;\n if (!isFocusedRef.current || !options.onCut || !options.getItems) {\n return;\n }\n\n e.preventDefault();\n writeToDataTransfer(e.clipboardData, options.getItems());\n options.onCut();\n };\n\n let onBeforePaste = (e: ClipboardEvent) => {\n let options = ref.current;\n // Unfortunately, e.clipboardData.types is not available in this event so we always\n // have to enable the Paste menu item even if the type of data is unsupported.\n if (isFocusedRef.current && options.onPaste) {\n e.preventDefault();\n }\n };\n\n let onPaste = (e: ClipboardEvent) => {\n let options = ref.current;\n if (!isFocusedRef.current || !options.onPaste) {\n return;\n }\n\n e.preventDefault();\n let items = readFromDataTransfer(e.clipboardData);\n options.onPaste(items);\n };\n\n return chain(\n addGlobalEventListener('beforecopy', onBeforeCopy),\n addGlobalEventListener('copy', onCopy),\n addGlobalEventListener('beforecut', onBeforeCut),\n addGlobalEventListener('cut', onCut),\n addGlobalEventListener('beforepaste', onBeforePaste),\n addGlobalEventListener('paste', onPaste)\n );\n }, []);\n\n return {\n clipboardProps: focusProps\n };\n}\n"],"names":[],"version":3,"file":"main.js.map"}