UNPKG

35.5 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/TouchBackendImpl.ts"],"sourcesContent":["import { invariant } from '@react-dnd/invariant'\nimport type {\n\tBackend,\n\tDragDropActions,\n\tDragDropManager,\n\tDragDropMonitor,\n\tIdentifier,\n\tUnsubscribe,\n\tXYCoord,\n} from 'dnd-core'\n\nimport type {\n\tEventName,\n\tTouchBackendContext,\n\tTouchBackendOptions,\n} from './interfaces.js'\nimport { ListenerType } from './interfaces.js'\nimport { OptionsReader } from './OptionsReader.js'\nimport { distance, inAngleRanges } from './utils/math.js'\nimport { getEventClientOffset, getNodeClientOffset } from './utils/offsets.js'\nimport {\n\teventShouldEndDrag,\n\teventShouldStartDrag,\n\tisTouchEvent,\n} from './utils/predicates.js'\nimport { supportsPassive } from './utils/supportsPassive.js'\n\nconst eventNames: Record<ListenerType, EventName> = {\n\t[ListenerType.mouse]: {\n\t\tstart: 'mousedown',\n\t\tmove: 'mousemove',\n\t\tend: 'mouseup',\n\t\tcontextmenu: 'contextmenu',\n\t},\n\t[ListenerType.touch]: {\n\t\tstart: 'touchstart',\n\t\tmove: 'touchmove',\n\t\tend: 'touchend',\n\t},\n\t[ListenerType.keyboard]: {\n\t\tkeydown: 'keydown',\n\t},\n}\n\nexport class TouchBackendImpl implements Backend {\n\tprivate options: OptionsReader\n\n\t// React-DnD Dependencies\n\tprivate actions: DragDropActions\n\tprivate monitor: DragDropMonitor\n\n\t// Internal State\n\tprivate static isSetUp: boolean\n\tpublic sourceNodes: Map<Identifier, HTMLElement>\n\tpublic sourcePreviewNodes: Map<string, HTMLElement>\n\tpublic sourcePreviewNodeOptions: Map<string, any>\n\tpublic targetNodes: Map<string, HTMLElement>\n\tprivate _mouseClientOffset: Partial<XYCoord>\n\tprivate _isScrolling: boolean\n\tprivate listenerTypes: ListenerType[]\n\tprivate moveStartSourceIds: string[] | undefined\n\tprivate waitingForDelay: boolean | undefined\n\tprivate timeout: ReturnType<typeof setTimeout> | undefined\n\tprivate dragOverTargetIds: string[] | undefined\n\tprivate draggedSourceNode: HTMLElement | undefined\n\tprivate draggedSourceNodeRemovalObserver: MutationObserver | undefined\n\n\t// Patch for iOS 13, discussion over #1585\n\tprivate lastTargetTouchFallback: Touch | undefined\n\n\tpublic constructor(\n\t\tmanager: DragDropManager,\n\t\tcontext: TouchBackendContext,\n\t\toptions: Partial<TouchBackendOptions>,\n\t) {\n\t\tthis.options = new OptionsReader(options, context)\n\t\tthis.actions = manager.getActions()\n\t\tthis.monitor = manager.getMonitor()\n\n\t\tthis.sourceNodes = new Map()\n\t\tthis.sourcePreviewNodes = new Map()\n\t\tthis.sourcePreviewNodeOptions = new Map()\n\t\tthis.targetNodes = new Map()\n\t\tthis.listenerTypes = []\n\t\tthis._mouseClientOffset = {}\n\t\tthis._isScrolling = false\n\n\t\tif (this.options.enableMouseEvents) {\n\t\t\tthis.listenerTypes.push(ListenerType.mouse)\n\t\t}\n\n\t\tif (this.options.enableTouchEvents) {\n\t\t\tthis.listenerTypes.push(ListenerType.touch)\n\t\t}\n\n\t\tif (this.options.enableKeyboardEvents) {\n\t\t\tthis.listenerTypes.push(ListenerType.keyboard)\n\t\t}\n\t}\n\n\t/**\n\t * Generate profiling statistics for the HTML5Backend.\n\t */\n\tpublic profile(): Record<string, number> {\n\t\treturn {\n\t\t\tsourceNodes: this.sourceNodes.size,\n\t\t\tsourcePreviewNodes: this.sourcePreviewNodes.size,\n\t\t\tsourcePreviewNodeOptions: this.sourcePreviewNodeOptions.size,\n\t\t\ttargetNodes: this.targetNodes.size,\n\t\t\tdragOverTargetIds: this.dragOverTargetIds?.length || 0,\n\t\t}\n\t}\n\n\t// public for test\n\tpublic get document(): Document | undefined {\n\t\treturn this.options.document\n\t}\n\n\tpublic setup(): void {\n\t\tconst root = this.options.rootElement\n\t\tif (!root) {\n\t\t\treturn\n\t\t}\n\n\t\tinvariant(\n\t\t\t!TouchBackendImpl.isSetUp,\n\t\t\t'Cannot have two Touch backends at the same time.',\n\t\t)\n\t\tTouchBackendImpl.isSetUp = true\n\n\t\tthis.addEventListener(root, 'start', this.getTopMoveStartHandler() as any)\n\t\tthis.addEventListener(\n\t\t\troot,\n\t\t\t'start',\n\t\t\tthis.handleTopMoveStartCapture as any,\n\t\t\ttrue,\n\t\t)\n\t\tthis.addEventListener(root, 'move', this.handleTopMove as any)\n\t\tthis.addEventListener(root, 'move', this.handleTopMoveCapture, true)\n\t\tthis.addEventListener(\n\t\t\troot,\n\t\t\t'end',\n\t\t\tthis.handleTopMoveEndCapture as any,\n\t\t\ttrue,\n\t\t)\n\n\t\tif (this.options.enableMouseEvents && !this.options.ignoreContextMenu) {\n\t\t\tthis.addEventListener(\n\t\t\t\troot,\n\t\t\t\t'contextmenu',\n\t\t\t\tthis.handleTopMoveEndCapture as any,\n\t\t\t)\n\t\t}\n\n\t\tif (this.options.enableKeyboardEvents) {\n\t\t\tthis.addEventListener(\n\t\t\t\troot,\n\t\t\t\t'keydown',\n\t\t\t\tthis.handleCancelOnEscape as any,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic teardown(): void {\n\t\tconst root = this.options.rootElement\n\t\tif (!root) {\n\t\t\treturn\n\t\t}\n\n\t\tTouchBackendImpl.isSetUp = false\n\t\tthis._mouseClientOffset = {}\n\n\t\tthis.removeEventListener(\n\t\t\troot,\n\t\t\t'start',\n\t\t\tthis.handleTopMoveStartCapture as any,\n\t\t\ttrue,\n\t\t)\n\t\tthis.removeEventListener(root, 'start', this.handleTopMoveStart as any)\n\t\tthis.removeEventListener(root, 'move', this.handleTopMoveCapture, true)\n\t\tthis.removeEventListener(root, 'move', this.handleTopMove as any)\n\t\tthis.removeEventListener(\n\t\t\troot,\n\t\t\t'end',\n\t\t\tthis.handleTopMoveEndCapture as any,\n\t\t\ttrue,\n\t\t)\n\n\t\tif (this.options.enableMouseEvents && !this.options.ignoreContextMenu) {\n\t\t\tthis.removeEventListener(\n\t\t\t\troot,\n\t\t\t\t'contextmenu',\n\t\t\t\tthis.handleTopMoveEndCapture as any,\n\t\t\t)\n\t\t}\n\n\t\tif (this.options.enableKeyboardEvents) {\n\t\t\tthis.removeEventListener(\n\t\t\t\troot,\n\t\t\t\t'keydown',\n\t\t\t\tthis.handleCancelOnEscape as any,\n\t\t\t\ttrue,\n\t\t\t)\n\t\t}\n\n\t\tthis.uninstallSourceNodeRemovalObserver()\n\t}\n\n\tprivate addEventListener<K extends keyof EventName>(\n\t\tsubject: Node,\n\t\tevent: K,\n\t\thandler: (e: any) => void,\n\t\tcapture = false,\n\t) {\n\t\tconst options = supportsPassive ? { capture, passive: false } : capture\n\n\t\tthis.listenerTypes.forEach(function (listenerType) {\n\t\t\tconst evt = eventNames[listenerType][event]\n\n\t\t\tif (evt) {\n\t\t\t\tsubject.addEventListener(evt as any, handler as any, options)\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate removeEventListener<K extends keyof EventName>(\n\t\tsubject: Node,\n\t\tevent: K,\n\t\thandler: (e: any) => void,\n\t\tcapture = false,\n\t) {\n\t\tconst options = supportsPassive ? { capture, passive: false } : capture\n\n\t\tthis.listenerTypes.forEach(function (listenerType) {\n\t\t\tconst evt = eventNames[listenerType][event]\n\n\t\t\tif (evt) {\n\t\t\t\tsubject.removeEventListener(evt as any, handler as any, options)\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic connectDragSource(sourceId: string, node: HTMLElement): Unsubscribe {\n\t\tconst handleMoveStart = this.handleMoveStart.bind(this, sourceId)\n\t\tthis.sourceNodes.set(sourceId, node)\n\n\t\tthis.addEventListener(node, 'start', handleMoveStart)\n\n\t\treturn (): void => {\n\t\t\tthis.sourceNodes.delete(sourceId)\n\t\t\tthis.removeEventListener(node, 'start', handleMoveStart)\n\t\t}\n\t}\n\n\tpublic connectDragPreview(\n\t\tsourceId: string,\n\t\tnode: HTMLElement,\n\t\toptions: unknown,\n\t): Unsubscribe {\n\t\tthis.sourcePreviewNodeOptions.set(sourceId, options)\n\t\tthis.sourcePreviewNodes.set(sourceId, node)\n\n\t\treturn (): void => {\n\t\t\tthis.sourcePreviewNodes.delete(sourceId)\n\t\t\tthis.sourcePreviewNodeOptions.delete(sourceId)\n\t\t}\n\t}\n\n\tpublic connectDropTarget(targetId: string, node: HTMLElement): Unsubscribe {\n\t\tconst root = this.options.rootElement\n\t\tif (!this.document || !root) {\n\t\t\treturn (): void => {\n\t\t\t\t/* noop */\n\t\t\t}\n\t\t}\n\n\t\tconst handleMove = (e: MouseEvent | TouchEvent) => {\n\t\t\tif (!this.document || !root || !this.monitor.isDragging()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlet coords\n\n\t\t\t/**\n\t\t\t * Grab the coordinates for the current mouse/touch position\n\t\t\t */\n\t\t\tswitch (e.type) {\n\t\t\t\tcase eventNames.mouse.move:\n\t\t\t\t\tcoords = {\n\t\t\t\t\t\tx: (e as MouseEvent).clientX,\n\t\t\t\t\t\ty: (e as MouseEvent).clientY,\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\n\t\t\t\tcase eventNames.touch.move:\n\t\t\t\t\tcoords = {\n\t\t\t\t\t\tx: (e as TouchEvent).touches[0]?.clientX || 0,\n\t\t\t\t\t\ty: (e as TouchEvent).touches[0]?.clientY || 0,\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Use the coordinates to grab the element the drag ended on.\n\t\t\t * If the element is the same as the target node (or any of it's children) then we have hit a drop target and can handle the move.\n\t\t\t */\n\t\t\tconst droppedOn =\n\t\t\t\tcoords != null\n\t\t\t\t\t? this.document.elementFromPoint(coords.x, coords.y)\n\t\t\t\t\t: undefined\n\t\t\tconst childMatch = droppedOn && node.contains(droppedOn)\n\n\t\t\tif (droppedOn === node || childMatch) {\n\t\t\t\treturn this.handleMove(e, targetId)\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Attaching the event listener to the body so that touchmove will work while dragging over multiple target elements.\n\t\t */\n\t\tthis.addEventListener(this.document.body, 'move', handleMove as any)\n\t\tthis.targetNodes.set(targetId, node)\n\n\t\treturn (): void => {\n\t\t\tif (this.document) {\n\t\t\t\tthis.targetNodes.delete(targetId)\n\t\t\t\tthis.removeEventListener(this.document.body, 'move', handleMove as any)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getSourceClientOffset = (sourceId: string): XYCoord | undefined => {\n\t\tconst element = this.sourceNodes.get(sourceId)\n\t\treturn element && getNodeClientOffset(element)\n\t}\n\n\tpublic handleTopMoveStartCapture = (e: Event): void => {\n\t\tif (!eventShouldStartDrag(e as MouseEvent)) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.moveStartSourceIds = []\n\t}\n\n\tpublic handleMoveStart = (sourceId: string): void => {\n\t\t// Just because we received an event doesn't necessarily mean we need to collect drag sources.\n\t\t// We only collect start collecting drag sources on touch and left mouse events.\n\t\tif (Array.isArray(this.moveStartSourceIds)) {\n\t\t\tthis.moveStartSourceIds.unshift(sourceId)\n\t\t}\n\t}\n\n\tprivate getTopMoveStartHandler() {\n\t\tif (!this.options.delayTouchStart && !this.options.delayMouseStart) {\n\t\t\treturn this.handleTopMoveStart\n\t\t}\n\n\t\treturn this.handleTopMoveStartDelay\n\t}\n\n\tpublic handleTopMoveStart = (e: MouseEvent | TouchEvent): void => {\n\t\tif (!eventShouldStartDrag(e as MouseEvent)) {\n\t\t\treturn\n\t\t}\n\n\t\t// Don't prematurely preventDefault() here since it might:\n\t\t// 1. Mess up scrolling\n\t\t// 2. Mess up long tap (which brings up context menu)\n\t\t// 3. If there's an anchor link as a child, tap won't be triggered on link\n\n\t\tconst clientOffset = getEventClientOffset(e)\n\t\tif (clientOffset) {\n\t\t\tif (isTouchEvent(e)) {\n\t\t\t\tthis.lastTargetTouchFallback = e.targetTouches[0]\n\t\t\t}\n\t\t\tthis._mouseClientOffset = clientOffset\n\t\t}\n\t\tthis.waitingForDelay = false\n\t}\n\n\tpublic handleTopMoveStartDelay = (e: Event): void => {\n\t\tif (!eventShouldStartDrag(e as MouseEvent)) {\n\t\t\treturn\n\t\t}\n\n\t\tconst delay =\n\t\t\te.type === eventNames.touch.start\n\t\t\t\t? this.options.delayTouchStart\n\t\t\t\t: this.options.delayMouseStart\n\t\tthis.timeout = setTimeout(\n\t\t\tthis.handleTopMoveStart.bind(this, e as any),\n\t\t\tdelay,\n\t\t) as any as ReturnType<typeof setTimeout>\n\t\tthis.waitingForDelay = true\n\t}\n\n\tpublic handleTopMoveCapture = (): void => {\n\t\tthis.dragOverTargetIds = []\n\t}\n\n\tpublic handleMove = (\n\t\t_evt: MouseEvent | TouchEvent,\n\t\ttargetId: string,\n\t): void => {\n\t\tif (this.dragOverTargetIds) {\n\t\t\tthis.dragOverTargetIds.unshift(targetId)\n\t\t}\n\t}\n\n\tpublic handleTopMove = (e: TouchEvent | MouseEvent): void => {\n\t\tif (this.timeout) {\n\t\t\tclearTimeout(this.timeout)\n\t\t}\n\t\tif (!this.document || this.waitingForDelay) {\n\t\t\treturn\n\t\t}\n\t\tconst { moveStartSourceIds, dragOverTargetIds } = this\n\t\tconst enableHoverOutsideTarget = this.options.enableHoverOutsideTarget\n\n\t\tconst clientOffset = getEventClientOffset(e, this.lastTargetTouchFallback)\n\n\t\tif (!clientOffset) {\n\t\t\treturn\n\t\t}\n\n\t\t// If the touch move started as a scroll, or is is between the scroll angles\n\t\tif (\n\t\t\tthis._isScrolling ||\n\t\t\t(!this.monitor.isDragging() &&\n\t\t\t\tinAngleRanges(\n\t\t\t\t\tthis._mouseClientOffset.x || 0,\n\t\t\t\t\tthis._mouseClientOffset.y || 0,\n\t\t\t\t\tclientOffset.x,\n\t\t\t\t\tclientOffset.y,\n\t\t\t\t\tthis.options.scrollAngleRanges,\n\t\t\t\t))\n\t\t) {\n\t\t\tthis._isScrolling = true\n\t\t\treturn\n\t\t}\n\n\t\t// If we're not dragging and we've moved a little, that counts as a drag start\n\t\tif (\n\t\t\t!this.monitor.isDragging() &&\n\t\t\t// eslint-disable-next-line no-prototype-builtins\n\t\t\tthis._mouseClientOffset.hasOwnProperty('x') &&\n\t\t\tmoveStartSourceIds &&\n\t\t\tdistance(\n\t\t\t\tthis._mouseClientOffset.x || 0,\n\t\t\t\tthis._mouseClientOffset.y || 0,\n\t\t\t\tclientOffset.x,\n\t\t\t\tclientOffset.y,\n\t\t\t) > (this.options.touchSlop ? this.options.touchSlop : 0)\n\t\t) {\n\t\t\tthis.moveStartSourceIds = undefined\n\n\t\t\tthis.actions.beginDrag(moveStartSourceIds, {\n\t\t\t\tclientOffset: this._mouseClientOffset,\n\t\t\t\tgetSourceClientOffset: this.getSourceClientOffset,\n\t\t\t\tpublishSource: false,\n\t\t\t})\n\t\t}\n\n\t\tif (!this.monitor.isDragging()) {\n\t\t\treturn\n\t\t}\n\n\t\tconst sourceNode = this.sourceNodes.get(\n\t\t\tthis.monitor.getSourceId() as string,\n\t\t)\n\t\tthis.installSourceNodeRemovalObserver(sourceNode)\n\t\tthis.actions.publishDragSource()\n\n\t\tif (e.cancelable) e.preventDefault()\n\n\t\t// Get the node elements of the hovered DropTargets\n\t\tconst dragOverTargetNodes: HTMLElement[] = (dragOverTargetIds || [])\n\t\t\t.map((key) => this.targetNodes.get(key))\n\t\t\t.filter((e) => !!e) as HTMLElement[]\n\n\t\t// Get the a ordered list of nodes that are touched by\n\t\tconst elementsAtPoint = this.options.getDropTargetElementsAtPoint\n\t\t\t? this.options.getDropTargetElementsAtPoint(\n\t\t\t\t\tclientOffset.x,\n\t\t\t\t\tclientOffset.y,\n\t\t\t\t\tdragOverTargetNodes,\n\t\t\t )\n\t\t\t: this.document.elementsFromPoint(clientOffset.x, clientOffset.y)\n\t\t// Extend list with parents that are not receiving elementsFromPoint events (size 0 elements and svg groups)\n\t\tconst elementsAtPointExtended: Element[] = []\n\t\tfor (const nodeId in elementsAtPoint) {\n\t\t\t// eslint-disable-next-line no-prototype-builtins\n\t\t\tif (!elementsAtPoint.hasOwnProperty(nodeId)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlet currentNode: Element | undefined | null = elementsAtPoint[nodeId]\n\t\t\tif (currentNode != null) {\n\t\t\t\telementsAtPointExtended.push(currentNode)\n\t\t\t}\n\t\t\twhile (currentNode) {\n\t\t\t\tcurrentNode = currentNode.parentElement\n\t\t\t\tif (\n\t\t\t\t\tcurrentNode &&\n\t\t\t\t\telementsAtPointExtended.indexOf(currentNode) === -1\n\t\t\t\t) {\n\t\t\t\t\telementsAtPointExtended.push(currentNode)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst orderedDragOverTargetIds: string[] = elementsAtPointExtended\n\t\t\t// Filter off nodes that arent a hovered DropTargets nodes\n\t\t\t.filter((node) => dragOverTargetNodes.indexOf(node as HTMLElement) > -1)\n\t\t\t// Map back the nodes elements to targetIds\n\t\t\t.map((node) => this._getDropTargetId(node))\n\t\t\t// Filter off possible null rows\n\t\t\t.filter((node) => !!node)\n\t\t\t.filter((id, index, ids) => ids.indexOf(id) === index) as string[]\n\n\t\t// Invoke hover for drop targets when source node is still over and pointer is outside\n\t\tif (enableHoverOutsideTarget) {\n\t\t\tfor (const targetId in this.targetNodes) {\n\t\t\t\tconst targetNode = this.targetNodes.get(targetId)\n\t\t\t\tif (\n\t\t\t\t\tsourceNode &&\n\t\t\t\t\ttargetNode &&\n\t\t\t\t\ttargetNode.contains(sourceNode) &&\n\t\t\t\t\torderedDragOverTargetIds.indexOf(targetId) === -1\n\t\t\t\t) {\n\t\t\t\t\torderedDragOverTargetIds.unshift(targetId)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Reverse order because dnd-core reverse it before calling the DropTarget drop methods\n\t\torderedDragOverTargetIds.reverse()\n\n\t\tthis.actions.hover(orderedDragOverTargetIds, {\n\t\t\tclientOffset: clientOffset,\n\t\t})\n\t}\n\n\t/**\n\t *\n\t * visible for testing\n\t */\n\tpublic _getDropTargetId = (node: Element): Identifier | undefined => {\n\t\tconst keys = this.targetNodes.keys()\n\t\tlet next = keys.next()\n\t\twhile (next.done === false) {\n\t\t\tconst targetId = next.value\n\t\t\tif (node === this.targetNodes.get(targetId)) {\n\t\t\t\treturn targetId\n\t\t\t} else {\n\t\t\t\tnext = keys.next()\n\t\t\t}\n\t\t}\n\t\treturn undefined\n\t}\n\n\tpublic handleTopMoveEndCapture = (e: Event): void => {\n\t\tthis._isScrolling = false\n\t\tthis.lastTargetTouchFallback = undefined\n\n\t\tif (!eventShouldEndDrag(e as MouseEvent)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.monitor.isDragging() || this.monitor.didDrop()) {\n\t\t\tthis.moveStartSourceIds = undefined\n\t\t\treturn\n\t\t}\n\n\t\tif (e.cancelable) e.preventDefault()\n\n\t\tthis._mouseClientOffset = {}\n\n\t\tthis.uninstallSourceNodeRemovalObserver()\n\t\tthis.actions.drop()\n\t\tthis.actions.endDrag()\n\t}\n\n\tpublic handleCancelOnEscape = (e: KeyboardEvent): void => {\n\t\tif (e.key === 'Escape' && this.monitor.isDragging()) {\n\t\t\tthis._mouseClientOffset = {}\n\n\t\t\tthis.uninstallSourceNodeRemovalObserver()\n\t\t\tthis.actions.endDrag()\n\t\t}\n\t}\n\n\tprivate installSourceNodeRemovalObserver(node: HTMLElement | undefined) {\n\t\tthis.uninstallSourceNodeRemovalObserver()\n\n\t\tthis.draggedSourceNode = node\n\t\tthis.draggedSourceNodeRemovalObserver = new MutationObserver(() => {\n\t\t\tif (node && !node.parentElement) {\n\t\t\t\tthis.resurrectSourceNode()\n\t\t\t\tthis.uninstallSourceNodeRemovalObserver()\n\t\t\t}\n\t\t})\n\n\t\tif (!node || !node.parentElement) {\n\t\t\treturn\n\t\t}\n\n\t\tthis.draggedSourceNodeRemovalObserver.observe(node.parentElement, {\n\t\t\tchildList: true,\n\t\t})\n\t}\n\n\tprivate resurrectSourceNode() {\n\t\tif (this.document && this.draggedSourceNode) {\n\t\t\tthis.draggedSourceNode.style.display = 'none'\n\t\t\tthis.draggedSourceNode.removeAttribute('data-reactid')\n\t\t\tthis.document.body.appendChild(this.draggedSourceNode)\n\t\t}\n\t}\n\n\tprivate uninstallSourceNodeRemovalObserver() {\n\t\tif (this.draggedSourceNodeRemovalObserver) {\n\t\t\tthis.draggedSourceNodeRemovalObserver.disconnect()\n\t\t}\n\n\t\tthis.draggedSourceNodeRemovalObserver = undefined\n\t\tthis.draggedSourceNode = undefined\n\t}\n}\n"],"names":["invariant","ListenerType","OptionsReader","distance","inAngleRanges","getEventClientOffset","getNodeClientOffset","eventShouldEndDrag","eventShouldStartDrag","isTouchEvent","supportsPassive","eventNames","mouse","start","move","end","contextmenu","touch","keyboard","keydown","TouchBackendImpl","profile","sourceNodes","size","sourcePreviewNodes","sourcePreviewNodeOptions","targetNodes","dragOverTargetIds","length","document","options","setup","root","rootElement","isSetUp","addEventListener","getTopMoveStartHandler","handleTopMoveStartCapture","handleTopMove","handleTopMoveCapture","handleTopMoveEndCapture","enableMouseEvents","ignoreContextMenu","enableKeyboardEvents","handleCancelOnEscape","teardown","_mouseClientOffset","removeEventListener","handleTopMoveStart","uninstallSourceNodeRemovalObserver","subject","event","handler","capture","passive","listenerTypes","forEach","listenerType","evt","connectDragSource","sourceId","node","handleMoveStart","bind","set","delete","connectDragPreview","connectDropTarget","targetId","handleMove","e","monitor","isDragging","coords","type","x","clientX","y","clientY","touches","droppedOn","elementFromPoint","undefined","childMatch","contains","body","delayTouchStart","delayMouseStart","handleTopMoveStartDelay","installSourceNodeRemovalObserver","draggedSourceNode","draggedSourceNodeRemovalObserver","MutationObserver","parentElement","resurrectSourceNode","observe","childList","style","display","removeAttribute","appendChild","disconnect","manager","context","getSourceClientOffset","element","get","moveStartSourceIds","Array","isArray","unshift","clientOffset","lastTargetTouchFallback","targetTouches","waitingForDelay","delay","timeout","setTimeout","_evt","clearTimeout","enableHoverOutsideTarget","_isScrolling","scrollAngleRanges","hasOwnProperty","touchSlop","actions","beginDrag","publishSource","sourceNode","getSourceId","publishDragSource","cancelable","preventDefault","dragOverTargetNodes","map","key","filter","elementsAtPoint","getDropTargetElementsAtPoint","elementsFromPoint","elementsAtPointExtended","nodeId","currentNode","push","indexOf","orderedDragOverTargetIds","_getDropTargetId","id","index","ids","targetNode","reverse","hover","keys","next","done","value","didDrop","drop","endDrag","getActions","getMonitor","Map","enableTouchEvents"],"mappings":"AAAA,SAASA,SAAS,QAAQ,sBAAsB,CAAA;AAgBhD,SAASC,YAAY,QAAQ,iBAAiB,CAAA;AAC9C,SAASC,aAAa,QAAQ,oBAAoB,CAAA;AAClD,SAASC,QAAQ,EAAEC,aAAa,QAAQ,iBAAiB,CAAA;AACzD,SAASC,oBAAoB,EAAEC,mBAAmB,QAAQ,oBAAoB,CAAA;AAC9E,SACCC,kBAAkB,EAClBC,oBAAoB,EACpBC,YAAY,QACN,uBAAuB,CAAA;AAC9B,SAASC,eAAe,QAAQ,4BAA4B,CAAA;AAE5D,MAAMC,UAAU,GAAoC;IACnD,CAACV,YAAY,CAACW,KAAK,CAAC,EAAE;QACrBC,KAAK,EAAE,WAAW;QAClBC,IAAI,EAAE,WAAW;QACjBC,GAAG,EAAE,SAAS;QACdC,WAAW,EAAE,aAAa;KAC1B;IACD,CAACf,YAAY,CAACgB,KAAK,CAAC,EAAE;QACrBJ,KAAK,EAAE,YAAY;QACnBC,IAAI,EAAE,WAAW;QACjBC,GAAG,EAAE,UAAU;KACf;IACD,CAACd,YAAY,CAACiB,QAAQ,CAAC,EAAE;QACxBC,OAAO,EAAE,SAAS;KAClB;CACD;AAED,OAAO,MAAMC,gBAAgB;IAwD5B;;IAEG,CACH,AAAOC,OAAO,GAA2B;YAMpB,GAAsB;QAL1C,OAAO;YACNC,WAAW,EAAE,IAAI,CAACA,WAAW,CAACC,IAAI;YAClCC,kBAAkB,EAAE,IAAI,CAACA,kBAAkB,CAACD,IAAI;YAChDE,wBAAwB,EAAE,IAAI,CAACA,wBAAwB,CAACF,IAAI;YAC5DG,WAAW,EAAE,IAAI,CAACA,WAAW,CAACH,IAAI;YAClCI,iBAAiB,EAAE,CAAA,CAAA,GAAsB,GAAtB,IAAI,CAACA,iBAAiB,cAAtB,GAAsB,WAAQ,GAA9B,KAAA,CAA8B,GAA9B,GAAsB,CAAEC,MAAM,CAAA,IAAI,CAAC;SACtD,CAAA;KACD;IAED,kBAAkB;IAClB,IAAWC,QAAQ,GAAyB;QAC3C,OAAO,IAAI,CAACC,OAAO,CAACD,QAAQ,CAAA;KAC5B;IAED,AAAOE,KAAK,GAAS;QACpB,MAAMC,IAAI,GAAG,IAAI,CAACF,OAAO,CAACG,WAAW;QACrC,IAAI,CAACD,IAAI,EAAE;YACV,OAAM;SACN;QAEDhC,SAAS,CACR,CAACoB,gBAAgB,CAACc,OAAO,EACzB,kDAAkD,CAClD;QACDd,gBAAgB,CAACc,OAAO,GAAG,IAAI;QAE/B,IAAI,CAACC,gBAAgB,CAACH,IAAI,EAAE,OAAO,EAAE,IAAI,CAACI,sBAAsB,EAAE,CAAQ;QAC1E,IAAI,CAACD,gBAAgB,CACpBH,IAAI,EACJ,OAAO,EACP,IAAI,CAACK,yBAAyB,EAC9B,IAAI,CACJ;QACD,IAAI,CAACF,gBAAgB,CAACH,IAAI,EAAE,MAAM,EAAE,IAAI,CAACM,aAAa,CAAQ;QAC9D,IAAI,CAACH,gBAAgB,CAACH,IAAI,EAAE,MAAM,EAAE,IAAI,CAACO,oBAAoB,EAAE,IAAI,CAAC;QACpE,IAAI,CAACJ,gBAAgB,CACpBH,IAAI,EACJ,KAAK,EACL,IAAI,CAACQ,uBAAuB,EAC5B,IAAI,CACJ;QAED,IAAI,IAAI,CAACV,OAAO,CAACW,iBAAiB,IAAI,CAAC,IAAI,CAACX,OAAO,CAACY,iBAAiB,EAAE;YACtE,IAAI,CAACP,gBAAgB,CACpBH,IAAI,EACJ,aAAa,EACb,IAAI,CAACQ,uBAAuB,CAC5B;SACD;QAED,IAAI,IAAI,CAACV,OAAO,CAACa,oBAAoB,EAAE;YACtC,IAAI,CAACR,gBAAgB,CACpBH,IAAI,EACJ,SAAS,EACT,IAAI,CAACY,oBAAoB,EACzB,IAAI,CACJ;SACD;KACD;IAED,AAAOC,QAAQ,GAAS;QACvB,MAAMb,IAAI,GAAG,IAAI,CAACF,OAAO,CAACG,WAAW;QACrC,IAAI,CAACD,IAAI,EAAE;YACV,OAAM;SACN;QAEDZ,gBAAgB,CAACc,OAAO,GAAG,KAAK;QAChC,IAAI,CAACY,kBAAkB,GAAG,EAAE;QAE5B,IAAI,CAACC,mBAAmB,CACvBf,IAAI,EACJ,OAAO,EACP,IAAI,CAACK,yBAAyB,EAC9B,IAAI,CACJ;QACD,IAAI,CAACU,mBAAmB,CAACf,IAAI,EAAE,OAAO,EAAE,IAAI,CAACgB,kBAAkB,CAAQ;QACvE,IAAI,CAACD,mBAAmB,CAACf,IAAI,EAAE,MAAM,EAAE,IAAI,CAACO,oBAAoB,EAAE,IAAI,CAAC;QACvE,IAAI,CAACQ,mBAAmB,CAACf,IAAI,EAAE,MAAM,EAAE,IAAI,CAACM,aAAa,CAAQ;QACjE,IAAI,CAACS,mBAAmB,CACvBf,IAAI,EACJ,KAAK,EACL,IAAI,CAACQ,uBAAuB,EAC5B,IAAI,CACJ;QAED,IAAI,IAAI,CAACV,OAAO,CAACW,iBAAiB,IAAI,CAAC,IAAI,CAACX,OAAO,CAACY,iBAAiB,EAAE;YACtE,IAAI,CAACK,mBAAmB,CACvBf,IAAI,EACJ,aAAa,EACb,IAAI,CAACQ,uBAAuB,CAC5B;SACD;QAED,IAAI,IAAI,CAACV,OAAO,CAACa,oBAAoB,EAAE;YACtC,IAAI,CAACI,mBAAmB,CACvBf,IAAI,EACJ,SAAS,EACT,IAAI,CAACY,oBAAoB,EACzB,IAAI,CACJ;SACD;QAED,IAAI,CAACK,kCAAkC,EAAE;KACzC;IAED,AAAQd,gBAAgB,CACvBe,OAAa,EACbC,KAAQ,EACRC,OAAyB,EACzBC,OAAO,GAAG,KAAK,EACd;QACD,MAAMvB,OAAO,GAAGpB,eAAe,GAAG;YAAE2C,OAAO;YAAEC,OAAO,EAAE,KAAK;SAAE,GAAGD,OAAO;QAEvE,IAAI,CAACE,aAAa,CAACC,OAAO,CAAC,SAAUC,YAAY,EAAE;YAClD,MAAMC,GAAG,GAAG/C,UAAU,CAAC8C,YAAY,CAAC,CAACN,KAAK,CAAC;YAE3C,IAAIO,GAAG,EAAE;gBACRR,OAAO,CAACf,gBAAgB,CAACuB,GAAG,EAASN,OAAO,EAAStB,OAAO,CAAC;aAC7D;SACD,CAAC;KACF;IAED,AAAQiB,mBAAmB,CAC1BG,OAAa,EACbC,KAAQ,EACRC,OAAyB,EACzBC,OAAO,GAAG,KAAK,EACd;QACD,MAAMvB,OAAO,GAAGpB,eAAe,GAAG;YAAE2C,OAAO;YAAEC,OAAO,EAAE,KAAK;SAAE,GAAGD,OAAO;QAEvE,IAAI,CAACE,aAAa,CAACC,OAAO,CAAC,SAAUC,YAAY,EAAE;YAClD,MAAMC,GAAG,GAAG/C,UAAU,CAAC8C,YAAY,CAAC,CAACN,KAAK,CAAC;YAE3C,IAAIO,GAAG,EAAE;gBACRR,OAAO,CAACH,mBAAmB,CAACW,GAAG,EAASN,OAAO,EAAStB,OAAO,CAAC;aAChE;SACD,CAAC;KACF;IAED,AAAO6B,iBAAiB,CAACC,QAAgB,EAAEC,IAAiB,EAAe;QAC1E,MAAMC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACC,IAAI,CAAC,IAAI,EAAEH,QAAQ,CAAC;QACjE,IAAI,CAACtC,WAAW,CAAC0C,GAAG,CAACJ,QAAQ,EAAEC,IAAI,CAAC;QAEpC,IAAI,CAAC1B,gBAAgB,CAAC0B,IAAI,EAAE,OAAO,EAAEC,eAAe,CAAC;QAErD,OAAO,IAAY;YAClB,IAAI,CAACxC,WAAW,CAAC2C,MAAM,CAACL,QAAQ,CAAC;YACjC,IAAI,CAACb,mBAAmB,CAACc,IAAI,EAAE,OAAO,EAAEC,eAAe,CAAC;SACxD,CAAA;KACD;IAED,AAAOI,kBAAkB,CACxBN,QAAgB,EAChBC,IAAiB,EACjB/B,OAAgB,EACF;QACd,IAAI,CAACL,wBAAwB,CAACuC,GAAG,CAACJ,QAAQ,EAAE9B,OAAO,CAAC;QACpD,IAAI,CAACN,kBAAkB,CAACwC,GAAG,CAACJ,QAAQ,EAAEC,IAAI,CAAC;QAE3C,OAAO,IAAY;YAClB,IAAI,CAACrC,kBAAkB,CAACyC,MAAM,CAACL,QAAQ,CAAC;YACxC,IAAI,CAACnC,wBAAwB,CAACwC,MAAM,CAACL,QAAQ,CAAC;SAC9C,CAAA;KACD;IAED,AAAOO,iBAAiB,CAACC,QAAgB,EAAEP,IAAiB,EAAe;QAC1E,MAAM7B,IAAI,GAAG,IAAI,CAACF,OAAO,CAACG,WAAW;QACrC,IAAI,CAAC,IAAI,CAACJ,QAAQ,IAAI,CAACG,IAAI,EAAE;YAC5B,OAAO,IAAY;YAClB,UAAU,EACV,CAAA;SACD;QAED,MAAMqC,UAAU,GAAG,CAACC,CAA0B,GAAK;YAClD,IAAI,CAAC,IAAI,CAACzC,QAAQ,IAAI,CAACG,IAAI,IAAI,CAAC,IAAI,CAACuC,OAAO,CAACC,UAAU,EAAE,EAAE;gBAC1D,OAAM;aACN;YAED,IAAIC,MAAM;YAEV;;MAEG,CACH,OAAQH,CAAC,CAACI,IAAI;gBACb,KAAK/D,UAAU,CAACC,KAAK,CAACE,IAAI;oBACzB2D,MAAM,GAAG;wBACRE,CAAC,EAAE,AAACL,CAAC,CAAgBM,OAAO;wBAC5BC,CAAC,EAAE,AAACP,CAAC,CAAgBQ,OAAO;qBAC5B;oBACD,MAAK;gBAEN,KAAKnE,UAAU,CAACM,KAAK,CAACH,IAAI;wBAErB,GAA4B,EAC5B,IAA4B;oBAFhC2D,MAAM,GAAG;wBACRE,CAAC,EAAE,CAAA,CAAA,GAA4B,GAA5B,AAACL,CAAC,CAAgBS,OAAO,CAAC,CAAC,CAAC,cAA5B,GAA4B,WAAS,GAArC,KAAA,CAAqC,GAArC,GAA4B,CAAEH,OAAO,CAAA,IAAI,CAAC;wBAC7CC,CAAC,EAAE,CAAA,CAAA,IAA4B,GAA5B,AAACP,CAAC,CAAgBS,OAAO,CAAC,CAAC,CAAC,cAA5B,IAA4B,WAAS,GAArC,KAAA,CAAqC,GAArC,IAA4B,CAAED,OAAO,CAAA,IAAI,CAAC;qBAC7C;oBACD,MAAK;aACN;YAED;;;MAGG,CACH,MAAME,SAAS,GACdP,MAAM,IAAI,IAAI,GACX,IAAI,CAAC5C,QAAQ,CAACoD,gBAAgB,CAACR,MAAM,CAACE,CAAC,EAAEF,MAAM,CAACI,CAAC,CAAC,GAClDK,SAAS;YACb,MAAMC,UAAU,GAAGH,SAAS,IAAInB,IAAI,CAACuB,QAAQ,CAACJ,SAAS,CAAC;YAExD,IAAIA,SAAS,KAAKnB,IAAI,IAAIsB,UAAU,EAAE;gBACrC,OAAO,IAAI,CAACd,UAAU,CAACC,CAAC,EAAEF,QAAQ,CAAC,CAAA;aACnC;SACD;QAED;;KAEG,CACH,IAAI,CAACjC,gBAAgB,CAAC,IAAI,CAACN,QAAQ,CAACwD,IAAI,EAAE,MAAM,EAAEhB,UAAU,CAAQ;QACpE,IAAI,CAAC3C,WAAW,CAACsC,GAAG,CAACI,QAAQ,EAAEP,IAAI,CAAC;QAEpC,OAAO,IAAY;YAClB,IAAI,IAAI,CAAChC,QAAQ,EAAE;gBAClB,IAAI,CAACH,WAAW,CAACuC,MAAM,CAACG,QAAQ,CAAC;gBACjC,IAAI,CAACrB,mBAAmB,CAAC,IAAI,CAAClB,QAAQ,CAACwD,IAAI,EAAE,MAAM,EAAEhB,UAAU,CAAQ;aACvE;SACD,CAAA;KACD;IAuBD,AAAQjC,sBAAsB,GAAG;QAChC,IAAI,CAAC,IAAI,CAACN,OAAO,CAACwD,eAAe,IAAI,CAAC,IAAI,CAACxD,OAAO,CAACyD,eAAe,EAAE;YACnE,OAAO,IAAI,CAACvC,kBAAkB,CAAA;SAC9B;QAED,OAAO,IAAI,CAACwC,uBAAuB,CAAA;KACnC;IAyOD,AAAQC,gCAAgC,CAAC5B,IAA6B,EAAE;QACvE,IAAI,CAACZ,kCAAkC,EAAE;QAEzC,IAAI,CAACyC,iBAAiB,GAAG7B,IAAI;QAC7B,IAAI,CAAC8B,gCAAgC,GAAG,IAAIC,gBAAgB,CAAC,IAAM;YAClE,IAAI/B,IAAI,IAAI,CAACA,IAAI,CAACgC,aAAa,EAAE;gBAChC,IAAI,CAACC,mBAAmB,EAAE;gBAC1B,IAAI,CAAC7C,kCAAkC,EAAE;aACzC;SACD,CAAC;QAEF,IAAI,CAACY,IAAI,IAAI,CAACA,IAAI,CAACgC,aAAa,EAAE;YACjC,OAAM;SACN;QAED,IAAI,CAACF,gCAAgC,CAACI,OAAO,CAAClC,IAAI,CAACgC,aAAa,EAAE;YACjEG,SAAS,EAAE,IAAI;SACf,CAAC;KACF;IAED,AAAQF,mBAAmB,GAAG;QAC7B,IAAI,IAAI,CAACjE,QAAQ,IAAI,IAAI,CAAC6D,iBAAiB,EAAE;YAC5C,IAAI,CAACA,iBAAiB,CAACO,KAAK,CAACC,OAAO,GAAG,MAAM;YAC7C,IAAI,CAACR,iBAAiB,CAACS,eAAe,CAAC,cAAc,CAAC;YACtD,IAAI,CAACtE,QAAQ,CAACwD,IAAI,CAACe,WAAW,CAAC,IAAI,CAACV,iBAAiB,CAAC;SACtD;KACD;IAED,AAAQzC,kCAAkC,GAAG;QAC5C,IAAI,IAAI,CAAC0C,gCAAgC,EAAE;YAC1C,IAAI,CAACA,gCAAgC,CAACU,UAAU,EAAE;SAClD;QAED,IAAI,CAACV,gCAAgC,GAAGT,SAAS;QACjD,IAAI,CAACQ,iBAAiB,GAAGR,SAAS;KAClC;IA7iBD,YACCoB,OAAwB,EACxBC,OAA4B,EAC5BzE,OAAqC,CACpC;QAkQF,KAAQ0E,qBAAqB,GAAG,CAAC5C,QAAgB,GAA0B;YAC1E,MAAM6C,OAAO,GAAG,IAAI,CAACnF,WAAW,CAACoF,GAAG,CAAC9C,QAAQ,CAAC;YAC9C,OAAO6C,OAAO,IAAInG,mBAAmB,CAACmG,OAAO,CAAC,CAAA;SAC9C,AA/UF,CA+UE;QAED,KAAOpE,yBAAyB,GAAG,CAACiC,CAAQ,GAAW;YACtD,IAAI,CAAC9D,oBAAoB,CAAC8D,CAAC,CAAe,EAAE;gBAC3C,OAAM;aACN;YAED,IAAI,CAACqC,kBAAkB,GAAG,EAAE;SAC5B,AAvVF,CAuVE;QAED,KAAO7C,eAAe,GAAG,CAACF,QAAgB,GAAW;YACpD,8FAA8F;YAC9F,gFAAgF;YAChF,IAAIgD,KAAK,CAACC,OAAO,CAAC,IAAI,CAACF,kBAAkB,CAAC,EAAE;gBAC3C,IAAI,CAACA,kBAAkB,CAACG,OAAO,CAAClD,QAAQ,CAAC;aACzC;SACD,AA/VF,CA+VE;QAUD,KAAOZ,kBAAkB,GAAG,CAACsB,CAA0B,GAAW;YACjE,IAAI,CAAC9D,oBAAoB,CAAC8D,CAAC,CAAe,EAAE;gBAC3C,OAAM;aACN;YAED,0DAA0D;YAC1D,uBAAuB;YACvB,qDAAqD;YACrD,0EAA0E;YAE1E,MAAMyC,YAAY,GAAG1G,oBAAoB,CAACiE,CAAC,CAAC;YAC5C,IAAIyC,YAAY,EAAE;gBACjB,IAAItG,YAAY,CAAC6D,CAAC,CAAC,EAAE;oBACpB,IAAI,CAAC0C,uBAAuB,GAAG1C,CAAC,CAAC2C,aAAa,CAAC,CAAC,CAAC;iBACjD;gBACD,IAAI,CAACnE,kBAAkB,GAAGiE,YAAY;aACtC;YACD,IAAI,CAACG,eAAe,GAAG,KAAK;SAC5B,AA3XF,CA2XE;QAED,KAAO1B,uBAAuB,GAAG,CAAClB,CAAQ,GAAW;YACpD,IAAI,CAAC9D,oBAAoB,CAAC8D,CAAC,CAAe,EAAE;gBAC3C,OAAM;aACN;YAED,MAAM6C,KAAK,GACV7C,CAAC,CAACI,IAAI,KAAK/D,UAAU,CAACM,KAAK,CAACJ,KAAK,GAC9B,IAAI,CAACiB,OAAO,CAACwD,eAAe,GAC5B,IAAI,CAACxD,OAAO,CAACyD,eAAe;YAChC,IAAI,CAAC6B,OAAO,GAAGC,UAAU,CACxB,IAAI,CAACrE,kBAAkB,CAACe,IAAI,CAAC,IAAI,EAAEO,CAAC,CAAQ,EAC5C6C,KAAK,CACL,AAAwC;YACzC,IAAI,CAACD,eAAe,GAAG,IAAI;SAC3B,AA3YF,CA2YE;QAED,KAAO3E,oBAAoB,GAAG,IAAY;YACzC,IAAI,CAACZ,iBAAiB,GAAG,EAAE;SAC3B,AA/YF,CA+YE;QAED,KAAO0C,UAAU,GAAG,CACnBiD,IAA6B,EAC7BlD,QAAgB,GACN;YACV,IAAI,IAAI,CAACzC,iBAAiB,EAAE;gBAC3B,IAAI,CAACA,iBAAiB,CAACmF,OAAO,CAAC1C,QAAQ,CAAC;aACxC;SACD,AAxZF,CAwZE;QAED,KAAO9B,aAAa,GAAG,CAACgC,EAA0B,GAAW;YAC5D,IAAI,IAAI,CAAC8C,OAAO,EAAE;gBACjBG,YAAY,CAAC,IAAI,CAACH,OAAO,CAAC;aAC1B;YACD,IAAI,CAAC,IAAI,CAACvF,QAAQ,IAAI,IAAI,CAACqF,eAAe,EAAE;gBAC3C,OAAM;aACN;YACD,MAAM,EAAEP,kBAAkB,CAAA,EAAEhF,iBAAiB,CAAA,EAAE,GAAG,IAAI;YACtD,MAAM6F,wBAAwB,GAAG,IAAI,CAAC1F,OAAO,CAAC0F,wBAAwB;YAEtE,MAAMT,YAAY,GAAG1G,oBAAoB,CAACiE,EAAC,EAAE,IAAI,CAAC0C,uBAAuB,CAAC;YAE1E,IAAI,CAACD,YAAY,EAAE;gBAClB,OAAM;aACN;YAED,4EAA4E;YAC5E,IACC,IAAI,CAACU,YAAY,IAChB,CAAC,IAAI,CAAClD,OAAO,CAACC,UAAU,EAAE,IAC1BpE,aAAa,CACZ,IAAI,CAAC0C,kBAAkB,CAAC6B,CAAC,IAAI,CAAC,EAC9B,IAAI,CAAC7B,kBAAkB,CAAC+B,CAAC,IAAI,CAAC,EAC9BkC,YAAY,CAACpC,CAAC,EACdoC,YAAY,CAAClC,CAAC,EACd,IAAI,CAAC/C,OAAO,CAAC4F,iBAAiB,CAC9B,AAAC,EACF;gBACD,IAAI,CAACD,YAAY,GAAG,IAAI;gBACxB,OAAM;aACN;YAED,8EAA8E;YAC9E,IACC,CAAC,IAAI,CAAClD,OAAO,CAACC,UAAU,EAAE,IAC1B,iDAAiD;YACjD,IAAI,CAAC1B,kBAAkB,CAAC6E,cAAc,CAAC,GAAG,CAAC,IAC3ChB,kBAAkB,IAClBxG,QAAQ,CACP,IAAI,CAAC2C,kBAAkB,CAAC6B,CAAC,IAAI,CAAC,EAC9B,IAAI,CAAC7B,kBAAkB,CAAC+B,CAAC,IAAI,CAAC,EAC9BkC,YAAY,CAACpC,CAAC,EACdoC,YAAY,CAAClC,CAAC,CACd,GAAG,CAAC,IAAI,CAAC/C,OAAO,CAAC8F,SAAS,GAAG,IAAI,CAAC9F,OAAO,CAAC8F,SAAS,GAAG,CAAC,CAAC,EACxD;gBACD,IAAI,CAACjB,kBAAkB,GAAGzB,SAAS;gBAEnC,IAAI,CAAC2C,OAAO,CAACC,SAAS,CAACnB,kBAAkB,EAAE;oBAC1CI,YAAY,EAAE,IAAI,CAACjE,kBAAkB;oBACrC0D,qBAAqB,EAAE,IAAI,CAACA,qBAAqB;oBACjDuB,aAAa,EAAE,KAAK;iBACpB,CAAC;aACF;YAED,IAAI,CAAC,IAAI,CAACxD,OAAO,CAACC,UAAU,EAAE,EAAE;gBAC/B,OAAM;aACN;YAED,MAAMwD,UAAU,GAAG,IAAI,CAAC1G,WAAW,CAACoF,GAAG,CACtC,IAAI,CAACnC,OAAO,CAAC0D,WAAW,EAAE,CAC1B;YACD,IAAI,CAACxC,gCAAgC,CAACuC,UAAU,CAAC;YACjD,IAAI,CAACH,OAAO,CAACK,iBAAiB,EAAE;YAEhC,IAAI5D,EAAC,CAAC6D,UAAU,EAAE7D,EAAC,CAAC8D,cAAc,EAAE;YAEpC,mDAAmD;YACnD,MAAMC,mBAAmB,GAAkB,CAAC1G,iBAAiB,IAAI,EAAE,CAAC,CAClE2G,GAAG,CAAC,CAACC,GAAG,GAAK,IAAI,CAAC7G,WAAW,CAACgF,GAAG,CAAC6B,GAAG,CAAC;YAAA,CAAC,CACvCC,MAAM,CAAC,CAAClE,CAAC,GAAK,CAAC,CAACA,CAAC;YAAA,CAAC,AAAiB;YAErC,sDAAsD;YACtD,MAAMmE,eAAe,GAAG,IAAI,CAAC3G,OAAO,CAAC4G,4BAA4B,GAC9D,IAAI,CAAC5G,OAAO,CAAC4G,4BAA4B,CACzC3B,YAAY,CAACpC,CAAC,EACdoC,YAAY,CAAClC,CAAC,EACdwD,mBAAmB,CAClB,GACD,IAAI,CAACxG,QAAQ,CAAC8G,iBAAiB,CAAC5B,YAAY,CAACpC,CAAC,EAAEoC,YAAY,CAAClC,CAAC,CAAC;YAClE,4GAA4G;YAC5G,MAAM+D,uBAAuB,GAAc,EAAE;YAC7C,IAAK,MAAMC,MAAM,IAAIJ,eAAe,CAAE;gBACrC,iDAAiD;gBACjD,IAAI,CAACA,eAAe,CAACd,cAAc,CAACkB,MAAM,CAAC,EAAE;oBAC5C,SAAQ;iBACR;gBACD,IAAIC,WAAW,GAA+BL,eAAe,CAACI,MAAM,CAAC;gBACrE,IAAIC,WAAW,IAAI,IAAI,EAAE;oBACxBF,uBAAuB,CAACG,IAAI,CAACD,WAAW,CAAC;iBACzC;gBACD,MAAOA,WAAW,CAAE;oBACnBA,WAAW,GAAGA,WAAW,CAACjD,aAAa;oBACvC,IACCiD,WAAW,IACXF,uBAAuB,CAACI,OAAO,CAACF,WAAW,CAAC,KAAK,CAAC,CAAC,EAClD;wBACDF,uBAAuB,CAACG,IAAI,CAACD,WAAW,CAAC;qBACzC;iBACD;aACD;YACD,MAAMG,wBAAwB,GAAaL,uBAAuB,AACjE,0DAA0D;aACzDJ,MAAM,CAAC,CAAC3E,IAAI,GAAKwE,mBAAmB,CAACW,OAAO,CAACnF,IAAI,CAAgB,GAAG,CAAC,CAAC;YAAA,CAAC,AACxE,2CAA2C;aAC1CyE,GAAG,CAAC,CAACzE,IAAI,GAAK,IAAI,CAACqF,gBAAgB,CAACrF,IAAI,CAAC;YAAA,CAAC,AAC3C,gCAAgC;aAC/B2E,MAAM,CAAC,CAAC3E,IAAI,GAAK,CAAC,CAACA,IAAI;YAAA,CAAC,CACxB2E,MAAM,CAAC,CAACW,EAAE,EAAEC,KAAK,EAAEC,GAAG,GAAKA,GAAG,CAACL,OAAO,CAACG,EAAE,CAAC,KAAKC,KAAK;YAAA,CAAC,AAAY;YAEnE,sFAAsF;YACtF,IAAI5B,wBAAwB,EAAE;gBAC7B,IAAK,MAAMpD,QAAQ,IAAI,IAAI,CAAC1C,WAAW,CAAE;oBACxC,MAAM4H,UAAU,GAAG,IAAI,CAAC5H,WAAW,CAACgF,GAAG,CAACtC,QAAQ,CAAC;oBACjD,IACC4D,UAAU,IACVsB,UAAU,IACVA,UAAU,CAAClE,QAAQ,CAAC4C,UAAU,CAAC,IAC/BiB,wBAAwB,CAACD,OAAO,CAAC5E,QAAQ,CAAC,KAAK,CAAC,CAAC,EAChD;wBACD6E,wBAAwB,CAACnC,OAAO,CAAC1C,QAAQ,CAAC;wBAC1C,MAAK;qBACL;iBACD;aACD;YAED,uFAAuF;YACvF6E,wBAAwB,CAACM,OAAO,EAAE;YAElC,IAAI,CAAC1B,OAAO,CAAC2B,KAAK,CAACP,wBAAwB,EAAE;gBAC5ClC,YAAY,EAAEA,YAAY;aAC1B,CAAC;SACF,AA7hBF,CA6hBE;QAED;;;IAGG,CACH,KAAOmC,gBAAgB,GAAG,CAACrF,IAAa,GAA6B;YACpE,MAAM4F,IAAI,GAAG,IAAI,CAAC/H,WAAW,CAAC+H,IAAI,EAAE;YACpC,IAAIC,IAAI,GAAGD,IAAI,CAACC,IAAI,EAAE;YACtB,MAAOA,IAAI,CAACC,IAAI,KAAK,KAAK,CAAE;gBAC3B,MAAMvF,QAAQ,GAAGsF,IAAI,CAACE,KAAK;gBAC3B,IAAI/F,IAAI,KAAK,IAAI,CAACnC,WAAW,CAACgF,GAAG,CAACtC,QAAQ,CAAC,EAAE;oBAC5C,OAAOA,QAAQ,CAAA;iBACf,MAAM;oBACNsF,IAAI,GAAGD,IAAI,CAACC,IAAI,EAAE;iBAClB;aACD;YACD,OAAOxE,SAAS,CAAA;SAChB,AA/iBF,CA+iBE;QAED,KAAO1C,uBAAuB,GAAG,CAAC8B,CAAQ,GAAW;YACpD,IAAI,CAACmD,YAAY,GAAG,KAAK;YACzB,IAAI,CAACT,uBAAuB,GAAG9B,SAAS;YAExC,IAAI,CAAC3E,kBAAkB,CAAC+D,CAAC,CAAe,EAAE;gBACzC,OAAM;aACN;YAED,IAAI,CAAC,IAAI,CAACC,OAAO,CAACC,UAAU,EAAE,IAAI,IAAI,CAACD,OAAO,CAACsF,OAAO,EAAE,EAAE;gBACzD,IAAI,CAAClD,kBAAkB,GAAGzB,SAAS;gBACnC,OAAM;aACN;YAED,IAAIZ,CAAC,CAAC6D,UAAU,EAAE7D,CAAC,CAAC8D,cAAc,EAAE;YAEpC,IAAI,CAACtF,kBAAkB,GAAG,EAAE;YAE5B,IAAI,CAACG,kCAAkC,EAAE;YACzC,IAAI,CAAC4E,OAAO,CAACiC,IAAI,EAAE;YACnB,IAAI,CAACjC,OAAO,CAACkC,OAAO,EAAE;SACtB,AArkBF,CAqkBE;QAED,KAAOnH,oBAAoB,GAAG,CAAC0B,CAAgB,GAAW;YACzD,IAAIA,CAAC,CAACiE,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAChE,OAAO,CAACC,UAAU,EAAE,EAAE;gBACpD,IAAI,CAAC1B,kBAAkB,GAAG,EAAE;gBAE5B,IAAI,CAACG,kCAAkC,EAAE;gBACzC,IAAI,CAAC4E,OAAO,CAACkC,OAAO,EAAE;aACtB;SACD,AA9kBF,CA8kBE;QAngBA,IAAI,CAACjI,OAAO,GAAG,IAAI5B,aAAa,CAAC4B,OAAO,EAAEyE,OAAO,CAAC;QAClD,IAAI,CAACsB,OAAO,GAAGvB,OAAO,CAAC0D,UAAU,EAAE;QACnC,IAAI,CAACzF,OAAO,GAAG+B,OAAO,CAAC2D,UAAU,EAAE;QAEnC,IAAI,CAAC3I,WAAW,GAAG,IAAI4I,GAAG,EAAE;QAC5B,IAAI,CAAC1I,kBAAkB,GAAG,IAAI0I,GAAG,EAAE;QACnC,IAAI,CAACzI,wBAAwB,GAAG,IAAIyI,GAAG,EAAE;QACzC,IAAI,CAACxI,WAAW,GAAG,IAAIwI,GAAG,EAAE;QAC5B,IAAI,CAAC3G,aAAa,GAAG,EAAE;QACvB,IAAI,CAACT,kBAAkB,GAAG,EAAE;QAC5B,IAAI,CAAC2E,YAAY,GAAG,KAAK;QAEzB,IAAI,IAAI,CAAC3F,OAAO,CAACW,iBAAiB,EAAE;YACnC,IAAI,CAACc,aAAa,CAACwF,IAAI,CAAC9I,YAAY,CAACW,KAAK,CAAC;SAC3C;QAED,IAAI,IAAI,CAACkB,OAAO,CAACqI,iBAAiB,EAAE;YACnC,IAAI,CAAC5G,aAAa,CAACwF,IAAI,CAAC9I,YAAY,CAACgB,KAAK,CAAC;SAC3C;QAED,IAAI,IAAI,CAACa,OAAO,CAACa,oBAAoB,EAAE;YACtC,IAAI,CAACY,aAAa,CAACwF,IAAI,CAAC9I,YAAY,CAACiB,QAAQ,CAAC;SAC9C;KACD;CAkhBD"}
\No newline at end of file