UNPKG

35.4 kBSource Map (JSON)View Raw
1{"version":3,"file":"Observer.min.js","sources":["../src/Observer.js"],"sourcesContent":["/*!\n * Observer 3.10.3\n * https://greensock.com\n *\n * @license Copyright 2008-2022, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n/* eslint-disable */\n\nlet gsap, _coreInitted, _clamp, _win, _doc, _docEl, _body, _isTouch, _pointerType, ScrollTrigger, _root, _normalizer, _eventTypes,\n\t_getGSAP = () => gsap || (typeof(window) !== \"undefined\" && (gsap = window.gsap) && gsap.registerPlugin && gsap),\n\t_passThrough = p => p,\n\t_startup = 1,\n\t_observers = [],\n\t_scrollers = [],\n\t_proxies = [],\n\t_getTime = Date.now,\n\t_bridge = (name, value) => value,\n\t_integrate = () => {\n\t\tlet core = ScrollTrigger.core,\n\t\t\tdata = core.bridge || {},\n\t\t\tscrollers = core._scrollers,\n\t\t\tproxies = core._proxies;\n\t\tscrollers.push(..._scrollers);\n\t\tproxies.push(..._proxies);\n\t\t_scrollers = scrollers;\n\t\t_proxies = proxies;\n\t\t_bridge = (name, value) => data[name](value);\n\t},\n\t_getProxyProp = (element, property) => ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property],\n\t_isViewport = el => !!~_root.indexOf(el),\n\t_addListener = (element, type, func, nonPassive, capture) => element.addEventListener(type, func, {passive: !nonPassive, capture: !!capture}),\n\t_removeListener = (element, type, func) => element.removeEventListener(type, func),\n\t_scrollLeft = \"scrollLeft\",\n\t_scrollTop = \"scrollTop\",\n\t_onScroll = () => (_normalizer && _normalizer.isPressed) || _scrollers.cache++,\n\t_scrollCacheFunc = f => value => { // since reading the scrollTop/scrollLeft/pageOffsetY/pageOffsetX can trigger a layout, this function allows us to cache the value so it only gets read fresh after a \"scroll\" event fires (or while we're refreshing because that can lengthen the page and alter the scroll position). when \"soft\" is true, that means don't actually set the scroll, but cache the new value instead (useful in ScrollSmoother)\n\t\tif (value || value === 0) {\n\t\t\t_startup && (_win.history.scrollRestoration = \"manual\"); // otherwise the new position will get overwritten by the browser onload.\n\t\t\t//value = Math.round(value);\n\t\t\tf(value);\n\t\t\tf.v = value;\n\t\t\tf.c = _scrollers.cache;\n\t\t\t_normalizer && _normalizer.isPressed && _bridge(\"ss\", value); // set scroll (notify ScrollTrigger so it can dispatch a \"scrollStart\" event if necessary\n\t\t} else if (_scrollers.cache !== f.c || _bridge(\"ref\")) {\n\t\t\tf.c = _scrollers.cache;\n\t\t\tf.v = f();\n\t\t}\n\t\treturn f.v;\n\t},\n\t_horizontal = {s: _scrollLeft, p: \"left\", p2: \"Left\", os: \"right\", os2: \"Right\", d: \"width\", d2: \"Width\", a: \"x\", sc: _scrollCacheFunc(function(value) { return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0})},\n\t_vertical = {s: _scrollTop, p: \"top\", p2: \"Top\", os: \"bottom\", os2: \"Bottom\", d: \"height\", d2: \"Height\", a: \"y\", op: _horizontal, sc: _scrollCacheFunc(function(value) { return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0})},\n\t_getTarget = t => gsap.utils.toArray(t)[0] || (typeof(t) === \"string\" && gsap.config().nullTargetWarn !== false ? console.warn(\"Element not found:\", t) : null),\n\n\t_getScrollFunc = (element, {s, sc}) => { // we store the scroller functions in a alternating sequenced Array like [element, verticalScrollFunc, horizontalScrollFunc, ...] so that we can minimize memory, maximize performance, and we also record the last position as a \".rec\" property in order to revert to that after refreshing to ensure things don't shift around.\n\t\tlet i = _scrollers.indexOf(element),\n\t\t\toffset = sc === _vertical.sc ? 1 : 2;\n\t\t!~i && (i = _scrollers.push(element) - 1);\n\t\treturn _scrollers[i + offset] || (_scrollers[i + offset] = _getProxyProp(element, s) || (_isViewport(element) ? sc : _scrollCacheFunc(function(value) { return arguments.length ? (element[s] = value) : element[s]; })));\n\t},\n\t_getVelocityProp = (value, minTimeRefresh, useDelta) => {\n\t\tlet v1 = value,\n\t\t\tv2 = value,\n\t\t\tt1 = _getTime(),\n\t\t\tt2 = t1,\n\t\t\tmin = minTimeRefresh || 50,\n\t\t\tdropToZeroTime = Math.max(500, min * 3),\n\t\t\tupdate = (value, force) => {\n\t\t\t\tlet t = _getTime();\n\t\t\t\tif (force || t - t1 > min) {\n\t\t\t\t\tv2 = v1;\n\t\t\t\t\tv1 = value;\n\t\t\t\t\tt2 = t1;\n\t\t\t\t\tt1 = t;\n\t\t\t\t} else if (useDelta) {\n\t\t\t\t\tv1 += value;\n\t\t\t\t} else { // not totally necessary, but makes it a bit more accurate by adjusting the v1 value according to the new slope. This way we're not just ignoring the incoming data. Removing for now because it doesn't seem to make much practical difference and it's probably not worth the kb.\n\t\t\t\t\tv1 = v2 + (value - v2) / (t - t2) * (t1 - t2);\n\t\t\t\t}\n\t\t\t},\n\t\t\treset = () => { v2 = v1 = useDelta ? 0 : v1; t2 = t1 = 0; },\n\t\t\tgetVelocity = latestValue => {\n\t\t\t\tlet tOld = t2,\n\t\t\t\t\tvOld = v2,\n\t\t\t\t\tt = _getTime();\n\t\t\t\t(latestValue || latestValue === 0) && latestValue !== v1 && update(latestValue);\n\t\t\t\treturn (t1 === t2 || t - t2 > dropToZeroTime) ? 0 : (v1 + (useDelta ? vOld : -vOld)) / ((useDelta ? t : t1) - tOld) * 1000;\n\t\t\t};\n\t\treturn {update, reset, getVelocity};\n\t},\n\t_getEvent = (e, preventDefault) => {\n\t\tpreventDefault && !e._gsapAllow && e.preventDefault();\n\t\treturn e.changedTouches ? e.changedTouches[0] : e;\n\t},\n\t_getAbsoluteMax = a => {\n\t\tlet max = Math.max(...a),\n\t\t\tmin = Math.min(...a);\n\t\treturn Math.abs(max) >= Math.abs(min) ? max : min;\n\t},\n\t_setScrollTrigger = () => {\n\t\tScrollTrigger = gsap.core.globals().ScrollTrigger;\n\t\tScrollTrigger && ScrollTrigger.core && _integrate();\n\t},\n\t_initCore = core => {\n\t\tgsap = core || _getGSAP();\n\t\tif (gsap && typeof(document) !== \"undefined\" && document.body) {\n\t\t\t_win = window;\n\t\t\t_doc = document;\n\t\t\t_docEl = _doc.documentElement;\n\t\t\t_body = _doc.body;\n\t\t\t_root = [_win, _doc, _docEl, _body];\n\t\t\t_clamp = gsap.utils.clamp;\n\t\t\t_pointerType = \"onpointerenter\" in _body ? \"pointer\" : \"mouse\";\n\t\t\t// isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.\n\t\t\t_isTouch = Observer.isTouch = _win.matchMedia && _win.matchMedia(\"(hover: none), (pointer: coarse)\").matches ? 1 : (\"ontouchstart\" in _win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0) ? 2 : 0;\n\t\t\t_eventTypes = Observer.eventTypes = (\"ontouchstart\" in _docEl ? \"touchstart,touchmove,touchcancel,touchend\" : !(\"onpointerdown\" in _docEl) ? \"mousedown,mousemove,mouseup,mouseup\" : \"pointerdown,pointermove,pointercancel,pointerup\").split(\",\");\n\t\t\tsetTimeout(() => _startup = 0, 500);\n\t\t\t_setScrollTrigger();\n\t\t\t_coreInitted = 1;\n\t\t}\n\t\treturn _coreInitted;\n\t};\n\n_horizontal.op = _vertical;\n_scrollers.cache = 0;\n\nexport class Observer {\n\tconstructor(vars) {\n\t\tthis.init(vars);\n\t}\n\n\tinit(vars) {\n\t\t_coreInitted || _initCore(gsap) || console.warn(\"Please gsap.registerPlugin(Observer)\");\n\t\tScrollTrigger || _setScrollTrigger();\n\t\tlet {tolerance, dragMinimum, type, target, lineHeight, debounce, preventDefault, onStop, onStopDelay, ignore, wheelSpeed, event, onDragStart, onDragEnd, onDrag, onPress, onRelease, onRight, onLeft, onUp, onDown, onChangeX, onChangeY, onChange, onToggleX, onToggleY, onHover, onHoverEnd, onMove, ignoreCheck, isNormalizer, onGestureStart, onGestureEnd, onWheel, onEnable, onDisable, onClick, scrollSpeed, capture, allowClicks, lockAxis, onLockAxis} = vars;\n\t\tthis.target = target = _getTarget(target) || _docEl;\n\t\tthis.vars = vars;\n\t\tignore && (ignore = gsap.utils.toArray(ignore));\n\t\ttolerance = tolerance || 0;\n\t\tdragMinimum = dragMinimum || 0;\n\t\twheelSpeed = wheelSpeed || 1;\n\t\tscrollSpeed = scrollSpeed || 1;\n\t\ttype = type || \"wheel,touch,pointer\";\n\t\tdebounce = debounce !== false;\n\t\tlineHeight || (lineHeight = parseFloat(_win.getComputedStyle(_body).lineHeight) || 22); // note: browser may report \"normal\", so default to 22.\n\t\tlet id, onStopDelayedCall, dragged, moved, wheeled, locked, axis,\n\t\t\tself = this,\n\t\t\tprevDeltaX = 0,\n\t\t\tprevDeltaY = 0,\n\t\t\tscrollFuncX = _getScrollFunc(target, _horizontal),\n\t\t\tscrollFuncY = _getScrollFunc(target, _vertical),\n\t\t\tscrollX = scrollFuncX(),\n\t\t\tscrollY = scrollFuncY(),\n\t\t\tlimitToTouch = ~type.indexOf(\"touch\") && !~type.indexOf(\"pointer\") && _eventTypes[0] === \"pointerdown\", // for devices that accommodate mouse events and touch events, we need to distinguish.\n\t\t\tisViewport = _isViewport(target),\n\t\t\townerDoc = target.ownerDocument || _doc,\n\t\t\tdeltaX = [0, 0, 0], // wheel, scroll, pointer/touch\n\t\t\tdeltaY = [0, 0, 0],\n\t\t\tonClickTime = 0,\n\t\t\tclickCapture = () => onClickTime = _getTime(),\n\t\t\t_ignoreCheck = (e, isPointerOrTouch) => (self.event = e) && (ignore && ~ignore.indexOf(e.target)) || (isPointerOrTouch && limitToTouch && e.pointerType !== \"touch\") || (ignoreCheck && ignoreCheck(e, isPointerOrTouch)),\n\t\t\tonStopFunc = () => {\n\t\t\t\tself._vx.reset();\n\t\t\t\tself._vy.reset();\n\t\t\t\tonStopDelayedCall.pause();\n\t\t\t\tonStop && onStop(self);\n\t\t\t},\n\t\t\tupdate = () => {\n\t\t\t\tlet dx = self.deltaX = _getAbsoluteMax(deltaX),\n\t\t\t\t\tdy = self.deltaY = _getAbsoluteMax(deltaY),\n\t\t\t\t\tchangedX = Math.abs(dx) >= tolerance,\n\t\t\t\t\tchangedY = Math.abs(dy) >= tolerance;\n\t\t\t\tonChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY); // in ScrollTrigger.normalizeScroll(), we need to know if it was touch/pointer so we need access to the deltaX/deltaY Arrays before we clear them out.\n\t\t\t\tif (changedX) {\n\t\t\t\t\tonRight && self.deltaX > 0 && onRight(self);\n\t\t\t\t\tonLeft && self.deltaX < 0 && onLeft(self);\n\t\t\t\t\tonChangeX && onChangeX(self);\n\t\t\t\t\tonToggleX && ((self.deltaX < 0) !== (prevDeltaX < 0)) && onToggleX(self);\n\t\t\t\t\tprevDeltaX = self.deltaX;\n\t\t\t\t\tdeltaX[0] = deltaX[1] = deltaX[2] = 0\n\t\t\t\t}\n\t\t\t\tif (changedY) {\n\t\t\t\t\tonDown && self.deltaY > 0 && onDown(self);\n\t\t\t\t\tonUp && self.deltaY < 0 && onUp(self);\n\t\t\t\t\tonChangeY && onChangeY(self);\n\t\t\t\t\tonToggleY && ((self.deltaY < 0) !== (prevDeltaY < 0)) && onToggleY(self);\n\t\t\t\t\tprevDeltaY = self.deltaY;\n\t\t\t\t\tdeltaY[0] = deltaY[1] = deltaY[2] = 0\n\t\t\t\t}\n\t\t\t\tif (moved || dragged) {\n\t\t\t\t\tonMove && onMove(self);\n\t\t\t\t\tonLockAxis && locked && onLockAxis(self);\n\t\t\t\t\tif (dragged) {\n\t\t\t\t\t\tonDrag(self);\n\t\t\t\t\t\tdragged = false;\n\t\t\t\t\t}\n\t\t\t\t\tmoved = locked = false;\n\t\t\t\t}\n\t\t\t\tif (wheeled) {\n\t\t\t\t\tonWheel(self);\n\t\t\t\t\twheeled = false;\n\t\t\t\t}\n\t\t\t\tid = 0;\n\t\t\t},\n\t\t\tonDelta = (x, y, index) => {\n\t\t\t\tdeltaX[index] += x;\n\t\t\t\tdeltaY[index] += y;\n\t\t\t\tself._vx.update(x);\n\t\t\t\tself._vy.update(y);\n\t\t\t\tdebounce ? id || (id = requestAnimationFrame(update)) : update();\n\t\t\t},\n\t\t\tonTouchOrPointerDelta = (x, y) => {\n\t\t\t\tif (axis !== \"y\") {\n\t\t\t\t\tdeltaX[2] += x;\n\t\t\t\t\tself._vx.update(x, true); // update the velocity as frequently as possible instead of in the debounced function so that very quick touch-scrolls (flicks) feel natural. If it's the mouse/touch/pointer, force it so that we get snappy/accurate momentum scroll.\n\t\t\t\t}\n\t\t\t\tif (axis !== \"x\") {\n\t\t\t\t\tdeltaY[2] += y;\n\t\t\t\t\tself._vy.update(y, true);\n\t\t\t\t}\n\t\t\t\tif (lockAxis && !axis) {\n\t\t\t\t\tself.axis = axis = Math.abs(x) > Math.abs(y) ? \"x\" : \"y\";\n\t\t\t\t\tlocked = true;\n\t\t\t\t}\n\t\t\t\tdebounce ? id || (id = requestAnimationFrame(update)) : update();\n\t\t\t},\n\t\t\t_onDrag = e => {\n\t\t\t\tif (_ignoreCheck(e, 1)) {return;}\n\t\t\t\te = _getEvent(e, preventDefault);\n\t\t\t\tlet x = e.clientX,\n\t\t\t\t\ty = e.clientY,\n\t\t\t\t\tdx = x - self.x,\n\t\t\t\t\tdy = y - self.y,\n\t\t\t\t\tisDragging = self.isDragging;\n\t\t\t\tself.x = x;\n\t\t\t\tself.y = y;\n\t\t\t\tif (isDragging || Math.abs(self.startX - x) >= dragMinimum || Math.abs(self.startY - y) >= dragMinimum) {\n\t\t\t\t\tonDrag && (dragged = true);\n\t\t\t\t\tisDragging || (self.isDragging = true);\n\t\t\t\t\tonTouchOrPointerDelta(dx, dy);\n\t\t\t\t\tisDragging || onDragStart && onDragStart(self);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_onPress = self.onPress = e => {\n\t\t\t\tif (_ignoreCheck(e, 1)) {return;}\n\t\t\t\tself.axis = axis = null;\n\t\t\t\tonStopDelayedCall.pause();\n\t\t\t\tself.isPressed = true;\n\t\t\t\te = _getEvent(e); // note: may need to preventDefault(?) Won't side-scroll on iOS Safari if we do, though.\n\t\t\t\tprevDeltaX = prevDeltaY = 0;\n\t\t\t\tself.startX = self.x = e.clientX;\n\t\t\t\tself.startY = self.y = e.clientY;\n\t\t\t\tself._vx.reset(); // otherwise the t2 may be stale if the user touches and flicks super fast and releases in less than 2 requestAnimationFrame ticks, causing velocity to be 0.\n\t\t\t\tself._vy.reset();\n\t\t\t\t_addListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, preventDefault, capture);\n\t\t\t\tself.deltaX = self.deltaY = 0;\n\t\t\t\tonPress && onPress(self);\n\t\t\t},\n\t\t\t_onRelease = e => {\n\t\t\t\tif (_ignoreCheck(e, 1)) {return;}\n\t\t\t\t_removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag);\n\t\t\t\tlet wasDragging = self.isDragging && (Math.abs(self.x - self.startX) > 3 || Math.abs(self.y - self.startY) > 3), // some touch devices need some wiggle room in terms of sensing clicks - the finger may move a few pixels.\n\t\t\t\t\teventData = _getEvent(e);\n\t\t\t\tif (!wasDragging) {\n\t\t\t\t\tself._vx.reset();\n\t\t\t\t\tself._vy.reset();\n\t\t\t\t\tif (preventDefault && allowClicks) {\n\t\t\t\t\t\tgsap.delayedCall(0.05, () => { // some browsers (like Firefox) won't trust script-generated clicks, so if the user tries to click on a video to play it, for example, it simply won't work. Since a regular \"click\" event will most likely be generated anyway (one that has its isTrusted flag set to true), we must slightly delay our script-generated click so that the \"real\"/trusted one is prioritized. Remember, when there are duplicate events in quick succession, we suppress all but the first one. Some browsers don't even trigger the \"real\" one at all, so our synthetic one is a safety valve that ensures that no matter what, a click event does get dispatched.\n\t\t\t\t\t\t\tif (_getTime() - onClickTime > 300 && !e.defaultPrevented) {\n\t\t\t\t\t\t\t\tif (e.target.click) { //some browsers (like mobile Safari) don't properly trigger the click event\n\t\t\t\t\t\t\t\t\te.target.click();\n\t\t\t\t\t\t\t\t} else if (ownerDoc.createEvent) {\n\t\t\t\t\t\t\t\t\tlet syntheticEvent = ownerDoc.createEvent(\"MouseEvents\");\n\t\t\t\t\t\t\t\t\tsyntheticEvent.initMouseEvent(\"click\", true, true, _win, 1, eventData.screenX, eventData.screenY, eventData.clientX, eventData.clientY, false, false, false, false, 0, null);\n\t\t\t\t\t\t\t\t\te.target.dispatchEvent(syntheticEvent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.isDragging = self.isGesturing = self.isPressed = false;\n\t\t\t\tonStop && !isNormalizer && onStopDelayedCall.restart(true);\n\t\t\t\tonDragEnd && wasDragging && onDragEnd(self);\n\t\t\t\tonRelease && onRelease(self, wasDragging);\n\t\t\t},\n\t\t\t_onGestureStart = e => e.touches && e.touches.length > 1 && (self.isGesturing = true) && onGestureStart(e, self.isDragging),\n\t\t\t_onGestureEnd = () => (self.isGesturing = false) || onGestureEnd(self),\n\t\t\tonScroll = e => {\n\t\t\t\tif (_ignoreCheck(e)) {return;}\n\t\t\t\tlet x = scrollFuncX(),\n\t\t\t\t\ty = scrollFuncY();\n\t\t\t\tonDelta((x - scrollX) * scrollSpeed, (y - scrollY) * scrollSpeed, 1);\n\t\t\t\tscrollX = x;\n\t\t\t\tscrollY = y;\n\t\t\t\tonStop && onStopDelayedCall.restart(true);\n\t\t\t},\n\t\t\t_onWheel = e => {\n\t\t\t\tif (_ignoreCheck(e)) {return;}\n\t\t\t\te = _getEvent(e, preventDefault);\n\t\t\t\tonWheel && (wheeled = true);\n\t\t\t\tlet multiplier = (e.deltaMode === 1 ? lineHeight : e.deltaMode === 2 ? _win.innerHeight : 1) * wheelSpeed;\n\t\t\t\tonDelta(e.deltaX * multiplier, e.deltaY * multiplier, 0);\n\t\t\t\tonStop && !isNormalizer && onStopDelayedCall.restart(true);\n\t\t\t},\n\t\t\t_onMove = e => {\n\t\t\t\tif (_ignoreCheck(e)) {return;}\n\t\t\t\tlet x = e.clientX,\n\t\t\t\t\ty = e.clientY,\n\t\t\t\t\tdx = x - self.x,\n\t\t\t\t\tdy = y - self.y;\n\t\t\t\tself.x = x;\n\t\t\t\tself.y = y;\n\t\t\t\tmoved = true;\n\t\t\t\t(dx || dy) && onTouchOrPointerDelta(dx, dy);\n\t\t\t},\n\t\t\t_onHover = e => {self.event = e; onHover(self);},\n\t\t\t_onHoverEnd = e => {self.event = e; onHoverEnd(self);},\n\t\t\t_onClick = e => _ignoreCheck(e) || (_getEvent(e, preventDefault) && onClick(self));\n\n\t\tonStopDelayedCall = self._dc = gsap.delayedCall(onStopDelay || 0.25, onStopFunc).pause();\n\n\t\tself.deltaX = self.deltaY = 0;\n\t\tself._vx = _getVelocityProp(0, 50, true);\n\t\tself._vy = _getVelocityProp(0, 50, true);\n\t\tself.scrollX = scrollFuncX;\n\t\tself.scrollY = scrollFuncY;\n\t\tself.isDragging = self.isGesturing = self.isPressed = false;\n\t\tself.enable = e => {\n\t\t\tif (!self.isEnabled) {\n\t\t\t\t_addListener(isViewport ? ownerDoc : target, \"scroll\", _onScroll);\n\t\t\t\ttype.indexOf(\"scroll\") >= 0 && _addListener(isViewport ? ownerDoc : target, \"scroll\", onScroll, preventDefault, capture);\n\t\t\t\ttype.indexOf(\"wheel\") >= 0 && _addListener(target, \"wheel\", _onWheel, preventDefault, capture);\n\t\t\t\tif ((type.indexOf(\"touch\") >= 0 && _isTouch) || type.indexOf(\"pointer\") >= 0) {\n\t\t\t\t\t_addListener(target, _eventTypes[0], _onPress, preventDefault, capture);\n\t\t\t\t\t_addListener(ownerDoc, _eventTypes[2], _onRelease);\n\t\t\t\t\t_addListener(ownerDoc, _eventTypes[3], _onRelease);\n\t\t\t\t\tallowClicks && _addListener(target, \"click\", clickCapture, false, true);\n\t\t\t\t\tonClick && _addListener(target, \"click\", _onClick);\n\t\t\t\t\tonGestureStart && _addListener(ownerDoc, \"gesturestart\", _onGestureStart);\n\t\t\t\t\tonGestureEnd && _addListener(ownerDoc, \"gestureend\", _onGestureEnd);\n\t\t\t\t\tonHover && _addListener(target, _pointerType + \"enter\", _onHover);\n\t\t\t\t\tonHoverEnd && _addListener(target, _pointerType + \"leave\", _onHoverEnd);\n\t\t\t\t\tonMove && _addListener(target, _pointerType + \"move\", _onMove);\n\t\t\t\t}\n\t\t\t\tself.isEnabled = true;\n\t\t\t\te && e.type && _onPress(e);\n\t\t\t\tonEnable && onEnable(self);\n\t\t\t}\n\t\t\treturn self;\n\t\t};\n\t\tself.disable = () => {\n\t\t\tif (self.isEnabled) {\n\t\t\t\t// only remove the _onScroll listener if there aren't any others that rely on the functionality.\n\t\t\t\t_observers.filter(o => o !== self && _isViewport(o.target)).length || _removeListener(isViewport ? ownerDoc : target, \"scroll\", _onScroll);\n\t\t\t\tif (self.isPressed) {\n\t\t\t\t\tself._vx.reset();\n\t\t\t\t\tself._vy.reset();\n\t\t\t\t\t_removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag);\n\t\t\t\t}\n\t\t\t\t_removeListener(isViewport ? ownerDoc : target, \"scroll\", onScroll);\n\t\t\t\t_removeListener(target, \"wheel\", _onWheel);\n\t\t\t\t_removeListener(target, _eventTypes[0], _onPress);\n\t\t\t\t_removeListener(ownerDoc, _eventTypes[2], _onRelease);\n\t\t\t\t_removeListener(ownerDoc, _eventTypes[3], _onRelease);\n\t\t\t\t_removeListener(target, \"click\", clickCapture);\n\t\t\t\t_removeListener(target, \"click\", _onClick);\n\t\t\t\t_removeListener(ownerDoc, \"gesturestart\", _onGestureStart);\n\t\t\t\t_removeListener(ownerDoc, \"gestureend\", _onGestureEnd);\n\t\t\t\t_removeListener(target, _pointerType + \"enter\", _onHover);\n\t\t\t\t_removeListener(target, _pointerType + \"leave\", _onHoverEnd);\n\t\t\t\t_removeListener(target, _pointerType + \"move\", _onMove);\n\t\t\t\tself.isEnabled = self.isPressed = self.isDragging = false;\n\t\t\t\tonDisable && onDisable(self);\n\t\t\t}\n\t\t};\n\n\t\tself.kill = () => {\n\t\t\tself.disable();\n\t\t\tlet i = _observers.indexOf(self);\n\t\t\ti >= 0 && _observers.splice(i, 1);\n\t\t\t_normalizer === self && (_normalizer = 0);\n\t\t}\n\n\t\t_observers.push(self);\n\t\tisNormalizer && _isViewport(target) && (_normalizer = self);\n\n\t\tself.enable(event);\n\t}\n\n\tget velocityX() {\n\t\treturn this._vx.getVelocity();\n\t}\n\tget velocityY() {\n\t\treturn this._vy.getVelocity();\n\t}\n\n}\n\nObserver.version = \"3.10.3\";\nObserver.create = vars => new Observer(vars);\nObserver.register = _initCore;\nObserver.getAll = () => _observers.slice();\nObserver.getById = id => _observers.filter(o => o.vars.id === id)[0];\n\n_getGSAP() && gsap.registerPlugin(Observer);\n\nexport { Observer as default, _isViewport, _scrollers, _getScrollFunc, _getProxyProp, _proxies, _getVelocityProp, _vertical, _horizontal, _getTarget };"],"names":["_getGSAP","gsap","window","registerPlugin","_coreInitted","_win","_doc","_docEl","_body","_isTouch","_pointerType","ScrollTrigger","_root","_normalizer","_eventTypes","_startup","_observers","_scrollers","_proxies","_getProxyProp","element","property","indexOf","_isViewport","el","_addListener","type","func","nonPassive","capture","addEventListener","passive","_removeListener","removeEventListener","_onScroll","isPressed","cache","_scrollCacheFunc","f","value","history","scrollRestoration","v","c","_bridge","_getTarget","t","utils","toArray","config","nullTargetWarn","console","warn","_getScrollFunc","s","sc","i","offset","_vertical","push","arguments","length","_getVelocityProp","minTimeRefresh","useDelta","update","force","_getTime","min","t1","v2","v1","t2","dropToZeroTime","Math","max","reset","getVelocity","latestValue","tOld","vOld","_getEvent","e","preventDefault","_gsapAllow","changedTouches","_getAbsoluteMax","a","abs","_setScrollTrigger","core","globals","_integrate","data","bridge","scrollers","proxies","name","_initCore","document","body","documentElement","clamp","Observer","isTouch","matchMedia","matches","navigator","maxTouchPoints","msMaxTouchPoints","eventTypes","split","setTimeout","Date","now","_scrollLeft","_scrollTop","_horizontal","p","p2","os","os2","d","d2","scrollTo","pageXOffset","op","pageYOffset","init","vars","tolerance","dragMinimum","target","lineHeight","debounce","onStop","onStopDelay","ignore","wheelSpeed","event","onDragStart","onDragEnd","onDrag","onPress","onRelease","onRight","onLeft","onUp","onDown","onChangeX","onChangeY","onChange","onToggleX","onToggleY","onHover","onHoverEnd","onMove","ignoreCheck","isNormalizer","onGestureStart","onGestureEnd","onWheel","onEnable","onDisable","onClick","scrollSpeed","allowClicks","lockAxis","onLockAxis","clickCapture","onClickTime","_ignoreCheck","isPointerOrTouch","self","limitToTouch","pointerType","dx","deltaX","dy","deltaY","changedX","changedY","prevDeltaX","prevDeltaY","moved","dragged","locked","wheeled","id","onDelta","x","y","index","_vx","_vy","requestAnimationFrame","onTouchOrPointerDelta","axis","_onDrag","clientX","clientY","isDragging","startX","startY","_onRelease","ownerDoc","wasDragging","eventData","delayedCall","defaultPrevented","click","createEvent","syntheticEvent","initMouseEvent","screenX","screenY","dispatchEvent","isGesturing","onStopDelayedCall","restart","_onGestureStart","touches","_onGestureEnd","onScroll","scrollFuncX","scrollFuncY","scrollX","scrollY","_onWheel","multiplier","deltaMode","innerHeight","_onMove","_onHover","_onHoverEnd","_onClick","parseFloat","getComputedStyle","this","isViewport","ownerDocument","_onPress","pause","_dc","onStopFunc","enable","isEnabled","disable","filter","o","kill","splice","version","create","register","getAll","slice","getById"],"mappings":"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"}
\No newline at end of file