{"map":"{\"version\":3,\"file\":\"Draggable.js\",\"sourceRoot\":\"\",\"sources\":[\"../../../src/interactions/Draggable.ts\"],\"names\":[],\"mappings\":\"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\"}","code":"/** @license\r\n *  Copyright 2016 - present The Material Motion Authors. All Rights Reserved.\r\n *\r\n *  Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\r\n *  use this file except in compliance with the License. You may obtain a copy\r\n *  of the License at\r\n *\r\n *      http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n *  Unless required by applicable law or agreed to in writing, software\r\n *  distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n *  License for the specific language governing permissions and limitations\r\n *  under the License.\r\n */\r\nimport { not, when, } from '../aggregators';\r\nimport { Axis, GestureRecognitionState, State, } from '../enums';\r\nimport { MemorylessMotionSubject, MotionObservable, createProperty, } from '../observables';\r\nimport { isPointerEvent, } from '../typeGuards';\r\nexport class Draggable {\r\n    constructor({ down$, move$, up$, cancel$, contextMenu$, capturedClick$, capturedDragStart$ }) {\r\n        this.state$ = createProperty({\r\n            initialValue: State.AT_REST,\r\n        });\r\n        this.recognitionState$ = createProperty({\r\n            initialValue: GestureRecognitionState.POSSIBLE,\r\n        });\r\n        this.recognitionThreshold$ = createProperty({\r\n            initialValue: 16,\r\n        });\r\n        this.axis$ = createProperty({\r\n            initialValue: Axis.ALL,\r\n        });\r\n        this.cancellation$ = new MemorylessMotionSubject();\r\n        this.enabled$ = new MemorylessMotionSubject();\r\n        this.down$ = down$;\r\n        this.move$ = move$;\r\n        this.up$ = up$;\r\n        this.cancel$ = cancel$;\r\n        this.contextMenu$ = contextMenu$;\r\n        this.capturedClick$ = capturedClick$;\r\n        this.capturedDragStart$ = capturedDragStart$;\r\n        this.value$ = new MotionObservable((observer) => {\r\n            let downSubscription;\r\n            let moveSubscription;\r\n            let cancellationSubscription;\r\n            let enabledSubscription;\r\n            // If we've recognized a drag, we'll prevent any children from receiving\r\n            // clicks.\r\n            let preventClicks = false;\r\n            // HTML's OS-integrated drag-and-drop will interrupt a PointerEvent stream\r\n            // without emitting pointercancel; this is the best way I've found to\r\n            // prevent that.\r\n            //\r\n            // See also https://github.com/w3c/pointerevents/issues/205\r\n            const capturedDragStartSubscription = capturedDragStart$.subscribe((dragStartEvent) => {\r\n                dragStartEvent.preventDefault();\r\n            });\r\n            const capturedClickSubscription = capturedClick$.subscribe((clickEvent) => {\r\n                if (preventClicks) {\r\n                    clickEvent.preventDefault();\r\n                    clickEvent.stopImmediatePropagation();\r\n                }\r\n            });\r\n            const subscribeToDown = () => {\r\n                return down$.subscribe((downEvent) => {\r\n                    this.state$.write(State.ACTIVE);\r\n                    const currentAxis = this.axis$.read();\r\n                    // If we get a new down event while we're already listening for\r\n                    // moves, ignore it.\r\n                    if (!moveSubscription) {\r\n                        preventClicks = false;\r\n                        if (isPointerEvent(downEvent)) {\r\n                            // The `as Element` is a workaround for\r\n                            // https://github.com/Microsoft/TypeScript/issues/299\r\n                            downEvent.target.setPointerCapture(downEvent.pointerId);\r\n                        }\r\n                        moveSubscription = move$.merge([up$])._filter({\r\n                            predicate: (nextEvent) => nextEvent.pointerId === downEvent.pointerId\r\n                        }).subscribe((nextEvent) => {\r\n                            const atRest = nextEvent.type.includes('up');\r\n                            const translation = {\r\n                                x: currentAxis !== Axis.Y\r\n                                    ? nextEvent.x - downEvent.x\r\n                                    : 0,\r\n                                y: currentAxis !== Axis.X\r\n                                    ? nextEvent.y - downEvent.y\r\n                                    : 0,\r\n                            };\r\n                            switch (this.recognitionState$.read()) {\r\n                                case GestureRecognitionState.POSSIBLE:\r\n                                    if (Math.sqrt(Math.pow(translation.x, 2) + Math.pow(translation.y, 2)) > this.recognitionThreshold$.read()) {\r\n                                        this.recognitionState$.write(GestureRecognitionState.BEGAN);\r\n                                        preventClicks = true;\r\n                                    }\r\n                                    break;\r\n                                case GestureRecognitionState.BEGAN:\r\n                                    this.recognitionState$.write(GestureRecognitionState.CHANGED);\r\n                                    break;\r\n                                default: break;\r\n                            }\r\n                            if (atRest) {\r\n                                // This would be a takeWhile if we were using an Observable\r\n                                // implementation that supported completion.\r\n                                moveSubscription.unsubscribe();\r\n                                moveSubscription = undefined;\r\n                                if (this.recognitionState$.read() === GestureRecognitionState.POSSIBLE) {\r\n                                    this.recognitionState$.write(GestureRecognitionState.FAILED);\r\n                                }\r\n                                else {\r\n                                    this.recognitionState$.write(GestureRecognitionState.ENDED);\r\n                                }\r\n                                // Doing the simple thing for now and setting AT_REST in up,\r\n                                // but it might be better on a delay to give time for clicks\r\n                                // to happen first.\r\n                                this.state$.write(State.AT_REST);\r\n                                this.recognitionState$.write(GestureRecognitionState.POSSIBLE);\r\n                            }\r\n                            else {\r\n                                observer.next(translation);\r\n                            }\r\n                        });\r\n                    }\r\n                });\r\n            };\r\n            downSubscription = subscribeToDown();\r\n            enabledSubscription = this.enabled$.subscribe((enabled) => {\r\n                if (enabled && !downSubscription) {\r\n                    downSubscription = subscribeToDown();\r\n                }\r\n                else if (!enabled && downSubscription) {\r\n                    downSubscription.unsubscribe();\r\n                    downSubscription = undefined;\r\n                    preventClicks = false;\r\n                    // moveSubscription handled by cancellation flow\r\n                }\r\n            });\r\n            cancellationSubscription = this.cancellation$.merge([\r\n                when(not(this.enabled$)),\r\n                cancel$,\r\n                contextMenu$,\r\n            ]).subscribe(() => {\r\n                if (moveSubscription) {\r\n                    moveSubscription.unsubscribe();\r\n                    moveSubscription = undefined;\r\n                    this.recognitionState$.write(GestureRecognitionState.CANCELLED);\r\n                    this.state$.write(State.AT_REST);\r\n                    this.recognitionState$.write(GestureRecognitionState.POSSIBLE);\r\n                }\r\n            });\r\n            return () => {\r\n                capturedClickSubscription.unsubscribe();\r\n                capturedDragStartSubscription.unsubscribe();\r\n                if (downSubscription) {\r\n                    downSubscription.unsubscribe();\r\n                }\r\n                if (moveSubscription) {\r\n                    moveSubscription.unsubscribe();\r\n                }\r\n                if (cancellationSubscription) {\r\n                    cancellationSubscription.unsubscribe();\r\n                }\r\n                if (enabledSubscription) {\r\n                    enabledSubscription.unsubscribe();\r\n                }\r\n            };\r\n        })._multicast();\r\n    }\r\n    get state() {\r\n        return this.state$.read();\r\n    }\r\n    get recognitionState() {\r\n        return this.recognitionState$.read();\r\n    }\r\n    get recognitionThreshold() {\r\n        return this.recognitionThreshold$.read();\r\n    }\r\n    set recognitionThreshold(value) {\r\n        this.recognitionThreshold$.write(value);\r\n    }\r\n    get axis() {\r\n        return this.axis$.read();\r\n    }\r\n    set axis(value) {\r\n        this.axis$.write(value);\r\n    }\r\n    cancel() {\r\n        this.cancellation$.next(undefined);\r\n    }\r\n    enable() {\r\n        this.enabled$.next(true);\r\n    }\r\n    disable() {\r\n        this.enabled$.next(false);\r\n    }\r\n}\r\nexport default Draggable;\r\n//# sourceMappingURL=Draggable.js.map"}
