UNPKG

89.3 kBSource Map (JSON)View Raw
1{"version":3,"file":"ScrollTrigger.min.js","sources":["../src/ScrollTrigger.js"],"sourcesContent":["/*!\n * ScrollTrigger 3.5.1\n * https://greensock.com\n *\n * @license Copyright 2008-2020, 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, _win, _doc, _docEl, _body, _root, _resizeDelay, _raf, _request, _toArray, _clamp, _time2, _syncInterval, _refreshing, _pointerIsDown, _transformProp, _i, _prevWidth, _prevHeight, _autoRefresh, _sort,\n\t_limitCallbacks, // if true, we'll only trigger callbacks if the active state toggles, so if you scroll immediately past both the start and end positions of a ScrollTrigger (thus inactive to inactive), neither its onEnter nor onLeave will be called. This is useful during startup.\n\t_startup = 1,\n\t_proxies = [],\n\t_scrollers = [],\n\t_getTime = Date.now,\n\t_time1 = _getTime(),\n\t_lastScrollTime = 0,\n\t_enabled = 1,\n\t_passThrough = v => v,\n\t_windowExists = () => typeof(window) !== \"undefined\",\n\t_getGSAP = () => gsap || (_windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap),\n\t_isViewport = e => !!~_root.indexOf(e),\n\t_getProxyProp = (element, property) => ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property],\n\t_getScrollFunc = (element, {s, sc}) => {\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 : function(value) { return arguments.length ? (element[s] = value) : element[s]; }));\n\t},\n\t_getBoundsFunc = element => _getProxyProp(element, \"getBoundingClientRect\") || (_isViewport(element) ? () => {_winOffsets.width = _win.innerWidth; _winOffsets.height = _win.innerHeight; return _winOffsets;} : () => _getBounds(element)),\n\t_getSizeFunc = (scroller, isViewport, {d, d2, a}) => (a = _getProxyProp(scroller, \"getBoundingClientRect\")) ? () => a()[d] : () => (isViewport ? _win[\"inner\" + d2] : scroller[\"client\" + d2]) || 0,\n\t_getOffsetsFunc = (element, isViewport) => !isViewport || ~_proxies.indexOf(element) ? _getBoundsFunc(element) : () => _winOffsets,\n\t_maxScroll = (element, {s, d2, d, a}) => (s = \"scroll\" + d2) && (a = _getProxyProp(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport(element) ? Math.max(_docEl[s], _body[s]) - (_win[\"inner\" + d2] || _docEl[\"client\" + d2] || _body[\"client\" + d2]) : element[s] - element[\"offset\" + d2],\n\t_iterateAutoRefresh = (func, events) => {\n\t\tfor (let i = 0; i < _autoRefresh.length; i += 3) {\n\t\t\t(!events || ~events.indexOf(_autoRefresh[i+1])) && func(_autoRefresh[i], _autoRefresh[i+1], _autoRefresh[i+2]);\n\t\t}\n\t},\n\t_isString = value => typeof(value) === \"string\",\n\t_isFunction = value => typeof(value) === \"function\",\n\t_isNumber = value => typeof(value) === \"number\",\n\t_isObject = value => typeof(value) === \"object\",\n\t_callIfFunc = value => _isFunction(value) && value(),\n\t_combineFunc = (f1, f2) => () => {\n\t\tlet result1 = _callIfFunc(f1),\n\t\t\tresult2 = _callIfFunc(f2);\n\t\treturn () => {\n\t\t\t_callIfFunc(result1);\n\t\t\t_callIfFunc(result2);\n\t\t}\n\t},\n\t_abs = Math.abs,\n\t_scrollLeft = \"scrollLeft\",\n\t_scrollTop = \"scrollTop\",\n\t_left = \"left\",\n\t_top = \"top\",\n\t_right = \"right\",\n\t_bottom = \"bottom\",\n\t_width = \"width\",\n\t_height = \"height\",\n\t_Right = \"Right\",\n\t_Left = \"Left\",\n\t_Top = \"Top\",\n\t_Bottom = \"Bottom\",\n\t_padding = \"padding\",\n\t_margin = \"margin\",\n\t_Width = \"Width\",\n\t_Height = \"Height\",\n\t_px = \"px\",\n\t_horizontal = {s: _scrollLeft, p: _left, p2: _Left, os: _right, os2: _Right, d: _width, d2: _Width, a: \"x\", sc: 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: function(value) { return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0}},\n\t_getComputedStyle = element => _win.getComputedStyle(element),\n\t_makePositionable = element => element.style.position = (_getComputedStyle(element).position === \"absolute\") ? \"absolute\" : \"relative\", // if the element already has position: absolute, leave that, otherwise make it position: relative\n\t_setDefaults = (obj, defaults) => {\n\t\tfor (let p in defaults) {\n\t\t\t(p in obj) || (obj[p] = defaults[p]);\n\t\t}\n\t\treturn obj;\n\t},\n\t//_isInViewport = element => (element = _getBounds(element)) && !(element.top > (_win.innerHeight || _docEl.clientHeight) || element.bottom < 0 || element.left > (_win.innerWidth || _docEl.clientWidth) || element.right < 0) && element,\n\t_getBounds = (element, withoutTransforms) => {\n\t\tlet tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== \"matrix(1, 0, 0, 1, 0, 0)\" && gsap.to(element, {x: 0, y: 0, xPercent: 0, yPercent: 0, rotation: 0, rotationX: 0, rotationY: 0, scale: 1, skewX: 0, skewY: 0}).progress(1),\n\t\t\tbounds = element.getBoundingClientRect();\n\t\ttween && tween.progress(0).kill();\n\t\treturn bounds;\n\t},\n\t_getSize = (element, {d2}) => element[\"offset\" + d2] || element[\"client\" + d2] || 0,\n\t_getLabels = animation => {\n\t\treturn value => {\n\t\t\tlet a = [],\n\t\t\t\tlabels = animation.labels,\n\t\t\t\tduration = animation.duration(),\n\t\t\t\tp;\n\t\t\tfor (p in labels) {\n\t\t\t\ta.push(labels[p] / duration);\n\t\t\t}\n\t\t\treturn gsap.utils.snap(a, value);\n\t\t};\n\t},\n\t_multiListener = (func, element, types, callback) => types.split(\",\").forEach(type => func(element, type, callback)),\n\t_addListener = (element, type, func) => element.addEventListener(type, func, {passive: true}),\n\t_removeListener = (element, type, func) => element.removeEventListener(type, func),\n\t_markerDefaults = {startColor: \"green\", endColor: \"red\", indent: 0, fontSize: \"16px\", fontWeight:\"normal\"},\n\t_defaults = {toggleActions: \"play\", anticipatePin: 0},\n\t_keywords = {top: 0, left: 0, center: 0.5, bottom: 1, right: 1},\n\t_offsetToPx = (value, size) => {\n\t\tif (_isString(value)) {\n\t\t\tlet eqIndex = value.indexOf(\"=\"),\n\t\t\t\trelative = ~eqIndex ? +(value.charAt(eqIndex-1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;\n\t\t\tif (relative) {\n\t\t\t\t(value.indexOf(\"%\") > eqIndex) && (relative *= size / 100);\n\t\t\t\tvalue = value.substr(0, eqIndex-1);\n\t\t\t}\n\t\t\tvalue = relative + ((value in _keywords) ? _keywords[value] * size : ~value.indexOf(\"%\") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);\n\t\t}\n\t\treturn value;\n\t},\n\t_createMarker = (type, name, container, direction, {startColor, endColor, fontSize, indent, fontWeight}, offset, matchWidthEl) => {\n\t\tlet e = _doc.createElement(\"div\"),\n\t\t\tuseFixedPosition = _isViewport(container) || _getProxyProp(container, \"pinType\") === \"fixed\",\n\t\t\tisScroller = type.indexOf(\"scroller\") !== -1,\n\t\t\tparent = useFixedPosition ? _body : container,\n\t\t\tisStart = type.indexOf(\"start\") !== -1,\n\t\t\tcolor = isStart ? startColor : endColor,\n\t\t\tcss = \"border-color:\" + color + \";font-size:\" + fontSize + \";color:\" + color + \";font-weight:\" + fontWeight + \";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;\";\n\t\tcss += \"position:\" + (isScroller && useFixedPosition ? \"fixed;\" : \"absolute;\");\n\t\t(isScroller || !useFixedPosition) && (css += (direction === _vertical ? _right : _bottom) + \":\" + (offset + parseFloat(indent)) + \"px;\");\n\t\tmatchWidthEl && (css += \"box-sizing:border-box;text-align:left;width:\" + matchWidthEl.offsetWidth + \"px;\");\n\t\te._isStart = isStart;\n\t\te.setAttribute(\"class\", \"gsap-marker-\" + type);\n\t\te.style.cssText = css;\n\t\te.innerText = name || name === 0 ? type + \"-\" + name : type;\n\t\tparent.insertBefore(e, parent.children[0]);\n\t\te._offset = e[\"offset\" + direction.op.d2];\n\t\t_positionMarker(e, 0, direction, isStart);\n\t\treturn e;\n\t},\n\t_positionMarker = (marker, start, direction, flipped) => {\n\t\tlet vars = {display: \"block\"},\n\t\t\tside = direction[flipped ? \"os2\" : \"p2\"],\n\t\t\toppositeSide = direction[flipped ? \"p2\" : \"os2\"];\n\t\tmarker._isFlipped = flipped;\n\t\tvars[direction.a + \"Percent\"] = flipped ? -100 : 0;\n\t\tvars[direction.a] = flipped ? 1 : 0;\n\t\tvars[\"border\" + side + _Width] = 1;\n\t\tvars[\"border\" + oppositeSide + _Width] = 0;\n\t\tvars[direction.p] = start;\n\t\tgsap.set(marker, vars);\n\t},\n\t_triggers = [],\n\t_ids = {},\n\t_sync = () => _request || (_request = _raf(_updateAll)),\n\t_onScroll = () => {\n\t\tif (!_request) {\n\t\t\t_request = _raf(_updateAll);\n\t\t\t_lastScrollTime || _dispatch(\"scrollStart\");\n\t\t\t_lastScrollTime = _getTime();\n\t\t}\n\t},\n\t_onResize = () => !_refreshing && _resizeDelay.restart(true), // ignore resizes triggered by refresh()\n\t_listeners = {},\n\t_emptyArray = [],\n\t_media = [],\n\t_creatingMedia, // when ScrollTrigger.matchMedia() is called, we record the current media key here (like \"(min-width: 800px)\") so that we can assign it to everything that's created during that call. Then we can revert just those when necessary. In the ScrollTrigger's init() call, the _creatingMedia is recorded as a \"media\" property on the instance.\n\t_lastMediaTick,\n\t_onMediaChange = e => {\n\t\tlet tick = gsap.ticker.frame,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tindex;\n\t\tif (_lastMediaTick !== tick || _startup) {\n\t\t\t_revertAll();\n\t\t\tfor (; i < _media.length; i+=4) {\n\t\t\t\tindex = _win.matchMedia(_media[i]).matches;\n\t\t\t\tif (index !== _media[i+3]) { // note: some browsers fire the matchMedia event multiple times, like when going full screen, so we shouldn't call the function multiple times. Check to see if it's already matched.\n\t\t\t\t\t_media[i+3] = index;\n\t\t\t\t\tindex ? matches.push(i) : _revertAll(1, _media[i]) || (_isFunction(_media[i+2]) && _media[i+2]()); // Firefox doesn't update the \"matches\" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.\n\t\t\t\t}\n\t\t\t}\n\t\t\t_revertRecorded(); // in case killing/reverting any of the animations actually added inline styles back.\n\t\t\tfor (i = 0; i < matches.length; i++) {\n\t\t\t\tindex = matches[i];\n\t\t\t\t_creatingMedia = _media[index];\n\t\t\t\t_media[index+2] = _media[index+1](e);\n\t\t\t}\n\t\t\t_creatingMedia = 0;\n\t\t\t_refreshAll(0, 1);\n\t\t\t_lastMediaTick = tick;\n\t\t\t_dispatch(\"matchMedia\");\n\t\t}\n\t},\n\t_softRefresh = () => _removeListener(ScrollTrigger, \"scrollEnd\", _softRefresh) || _refreshAll(true),\n\t_dispatch = type => (_listeners[type] && _listeners[type].map(f => f())) || _emptyArray,\n\t_savedStyles = [], // when ScrollTrigger.saveStyles() is called, the inline styles are recorded in this Array in a sequential format like [element, cssText, gsCache, media]. This keeps it very memory-efficient and fast to iterate through.\n\t_revertRecorded = media => {\n\t\tfor (let i = 0; i < _savedStyles.length; i+=4) {\n\t\t\tif (!media || _savedStyles[i+3] === media) {\n\t\t\t\t_savedStyles[i].style.cssText = _savedStyles[i+1];\n\t\t\t\t_savedStyles[i+2].uncache = 1;\n\t\t\t}\n\t\t}\n\t},\n\t_revertAll = (kill, media) => {\n\t\tlet trigger;\n\t\tfor (_i = 0; _i < _triggers.length; _i++) {\n\t\t\ttrigger = _triggers[_i];\n\t\t\tif (!media || trigger.media === media) {\n\t\t\t\tif (kill) {\n\t\t\t\t\ttrigger.kill(1);\n\t\t\t\t} else {\n\t\t\t\t\ttrigger.scroll.rec || (trigger.scroll.rec = trigger.scroll()); // record the scroll positions so that in each refresh() we can ensure that it doesn't shift. Remember, pinning can make things change around, especially if the same element is pinned multiple times. If one was already recorded, don't re-record because unpinning may have occurred and made it shorter.\n\t\t\t\t\ttrigger.revert();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_revertRecorded(media);\n\t\tmedia || _dispatch(\"revert\");\n\t},\n\t_refreshAll = (force, skipRevert) => {\n\t\tif (_lastScrollTime && !force) {\n\t\t\t_addListener(ScrollTrigger, \"scrollEnd\", _softRefresh);\n\t\t\treturn;\n\t\t}\n\t\tlet refreshInits = _dispatch(\"refreshInit\");\n\t\t_sort && ScrollTrigger.sort();\n\t\tskipRevert || _revertAll();\n\t\tfor (_i = 0; _i < _triggers.length; _i++) {\n\t\t\t_triggers[_i].refresh();\n\t\t}\n\t\trefreshInits.forEach(result => result && result.render && result.render(-1)); // if the onRefreshInit() returns an animation (typically a gsap.set()), revert it. This makes it easy to put things in a certain spot before refreshing for measurement purposes, and then put things back.\n\t\t_i = _triggers.length;\n\t\twhile (_i--) {\n\t\t\t_triggers[_i].scroll.rec = 0;\n\t\t}\n\t\t_resizeDelay.pause();\n\t\t_dispatch(\"refresh\");\n\t},\n\t_lastScroll = 0,\n\t_direction = 1,\n\t_updateAll = () => {\n\t\tlet l = _triggers.length,\n\t\t\ttime = _getTime(),\n\t\t\trecordVelocity = time - _time1 >= 50,\n\t\t\tscroll = l && _triggers[0].scroll();\n\t\t_direction = _lastScroll > scroll ? -1 : 1;\n\t\t_lastScroll = scroll;\n\t\tif (recordVelocity) {\n\t\t\tif (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {\n\t\t\t\t_lastScrollTime = 0;\n\t\t\t\t_dispatch(\"scrollEnd\");\n\t\t\t}\n\t\t\t_time2 = _time1;\n\t\t\t_time1 = time;\n\t\t}\n\t\tif (_direction < 0) {\n\t\t\t_i = l;\n\t\t\twhile (_i--) {\n\t\t\t\t_triggers[_i] && _triggers[_i].update(0, recordVelocity);\n\t\t\t}\n\t\t\t_direction = 1;\n\t\t} else {\n\t\t\tfor (_i = 0; _i < l; _i++) {\n\t\t\t\t_triggers[_i] && _triggers[_i].update(0, recordVelocity);\n\t\t\t}\n\t\t}\n\t\t_request = 0;\n\t},\n\t_propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, \"display\", \"flexShrink\", \"float\"],\n\t_stateProps = _propNamesToCopy.concat([_width, _height, \"boxSizing\", \"max\" + _Width, \"max\" + _Height, \"position\", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),\n\t_swapPinOut = (pin, spacer, state) => {\n\t\t_setState(state);\n\t\tif (pin.parentNode === spacer) {\n\t\t\tlet parent = spacer.parentNode;\n\t\t\tif (parent) {\n\t\t\t\tparent.insertBefore(pin, spacer);\n\t\t\t\tparent.removeChild(spacer);\n\t\t\t}\n\t\t}\n\t},\n\t_swapPinIn = (pin, spacer, cs, spacerState) => {\n\t\tif (pin.parentNode !== spacer) {\n\t\t\tlet i = _propNamesToCopy.length,\n\t\t\t\tspacerStyle = spacer.style,\n\t\t\t\tpinStyle = pin.style,\n\t\t\t\tp;\n\t\t\twhile (i--) {\n\t\t\t\tp = _propNamesToCopy[i];\n\t\t\t\tspacerStyle[p] = cs[p];\n\t\t\t}\n\t\t\tspacerStyle.position = cs.position === \"absolute\" ? \"absolute\" : \"relative\";\n\t\t\t(cs.display === \"inline\") && (spacerStyle.display = \"inline-block\");\n\t\t\tpinStyle[_bottom] = pinStyle[_right] = \"auto\";\n\t\t\tspacerStyle.overflow = \"visible\";\n\t\t\tspacerStyle.boxSizing = \"border-box\";\n\t\t\tspacerStyle[_width] = _getSize(pin, _horizontal) + _px;\n\t\t\tspacerStyle[_height] = _getSize(pin, _vertical) + _px;\n\t\t\tspacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = \"0\";\n\t\t\t_setState(spacerState);\n\t\t\tpinStyle[_width] = pinStyle[\"max\" + _Width] = cs[_width];\n\t\t\tpinStyle[_height] = pinStyle[\"max\" + _Height] = cs[_height];\n\t\t\tpinStyle[_padding] = cs[_padding];\n\t\t\tpin.parentNode.insertBefore(spacer, pin);\n\t\t\tspacer.appendChild(pin);\n\t\t}\n\t},\n\t_capsExp = /([A-Z])/g,\n\t_setState = state => {\n\t\tif (state) {\n\t\t\tlet style = state.t.style,\n\t\t\t\tl = state.length,\n\t\t\t\ti = 0,\n\t\t\t\tp, value;\n\t\t\tfor (; i < l; i +=2) {\n\t\t\t\tvalue = state[i+1];\n\t\t\t\tp = state[i];\n\t\t\t\tif (value) {\n\t\t\t\t\tstyle[p] = value;\n\t\t\t\t} else if (style[p]) {\n\t\t\t\t\tstyle.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t_getState = element => { // returns an array with alternating values like [property, value, property, value] and a \"t\" property pointing to the target (element). Makes it fast and cheap.\n\t\tlet l = _stateProps.length,\n\t\t\tstyle = element.style,\n\t\t\tstate = [],\n\t\t\ti = 0;\n\t\tfor (; i < l; i++) {\n\t\t\tstate.push(_stateProps[i], style[_stateProps[i]]);\n\t\t}\n\t\tstate.t = element;\n\t\treturn state;\n\t},\n\t_copyState = (state, override, omitOffsets) => {\n\t\tlet result = [],\n\t\t\tl = state.length,\n\t\t\ti = omitOffsets ? 8 : 0, // skip top, left, right, bottom if omitOffsets is true\n\t\t\tp;\n\t\tfor (; i < l; i += 2) {\n\t\t\tp = state[i];\n\t\t\tresult.push(p, (p in override) ? override[p] : state[i+1]);\n\t\t}\n\t\tresult.t = state.t;\n\t\treturn result;\n\t},\n\t_winOffsets = {left:0, top:0},\n\t_parsePosition = (value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax) => {\n\t\t_isFunction(value) && (value = value(self));\n\t\tif (_isString(value) && value.substr(0,3) === \"max\") {\n\t\t\tvalue = scrollerMax + (value.charAt(4) === \"=\" ? _offsetToPx(\"0\" + value.substr(3), scrollerSize) : 0);\n\t\t}\n\t\tif (!_isNumber(value)) {\n\t\t\t_isFunction(trigger) && (trigger = trigger(self));\n\t\t\tlet element = _toArray(trigger)[0] || _body,\n\t\t\t\tbounds = _getBounds(element) || {},\n\t\t\t\toffsets = value.split(\" \"),\n\t\t\t\tlocalOffset, globalOffset, display;\n\t\t\tif ((!bounds || (!bounds.left && !bounds.top)) && _getComputedStyle(element).display === \"none\") { // if display is \"none\", it won't report getBoundingClientRect() properly\n\t\t\t\tdisplay = element.style.display;\n\t\t\t\telement.style.display = \"block\";\n\t\t\t\tbounds = _getBounds(element);\n\t\t\t\tdisplay ? (element.style.display = display) : element.style.removeProperty(\"display\");\n\t\t\t}\n\t\t\tlocalOffset = _offsetToPx(offsets[0], bounds[direction.d]);\n\t\t\tglobalOffset = _offsetToPx(offsets[1] || \"0\", scrollerSize);\n\t\t\tvalue = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;\n\t\t\tmarkerScroller && _positionMarker(markerScroller, globalOffset, direction, (scrollerSize - globalOffset < 20 || (markerScroller._isStart && globalOffset > 20)));\n\t\t\tscrollerSize -= scrollerSize - globalOffset; // adjust for the marker\n\t\t} else if (markerScroller) {\n\t\t\t_positionMarker(markerScroller, scrollerSize, direction, true);\n\t\t}\n\t\tif (marker) {\n\t\t\tlet position = value + scrollerSize,\n\t\t\t\tisStart = marker._isStart;\n\t\t\tscrollerMax = \"scroll\" + direction.d2;\n\t\t\t_positionMarker(marker, position, direction, (isStart && position > 20) || (!isStart && (useFixedPosition ? Math.max(_body[scrollerMax], _docEl[scrollerMax]) : marker.parentNode[scrollerMax]) <= position + 1));\n\t\t\tif (useFixedPosition) {\n\t\t\t\tscrollerBounds = _getBounds(markerScroller);\n\t\t\t\tuseFixedPosition && (marker.style[direction.op.p] = (scrollerBounds[direction.op.p] - direction.op.m - marker._offset) + _px);\n\t\t\t}\n\t\t}\n\t\treturn Math.round(value);\n\t},\n\t_prefixExp = /(?:webkit|moz|length|cssText)/i,\n\t_reparent = (element, parent, top, left) => {\n\t\tif (element.parentNode !== parent) {\n\t\t\tlet style = element.style,\n\t\t\t\tp, cs;\n\t\t\tif (parent === _body) {\n\t\t\t\telement._stOrig = style.cssText; // record original inline styles so we can revert them later\n\t\t\t\tcs = _getComputedStyle(element);\n\t\t\t\tfor (p in cs) { // must copy all relevant styles to ensure that nothing changes visually when we reparent to the <body>. Skip the vendor prefixed ones.\n\t\t\t\t\tif (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === \"string\" && p !== \"0\") {\n\t\t\t\t\t\tstyle[p] = cs[p];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.top = top;\n\t\t\t\tstyle.left = left;\n\t\t\t} else {\n\t\t\t\tstyle.cssText = element._stOrig;\n\t\t\t}\n\t\t\tgsap.core.getCache(element).uncache = 1;\n\t\t\tparent.appendChild(element);\n\t\t}\n\t},\n\t// returns a function that can be used to tween the scroll position in the direction provided, and when doing so it'll add a .tween property to the FUNCTION itself, and remove it when the tween completes or gets killed. This gives us a way to have multiple ScrollTriggers use a central function for any given scroller and see if there's a scroll tween running (which would affect if/how things get updated)\n\t_getTweenCreator = (scroller, direction) => {\n\t\tlet getScroll = _getScrollFunc(scroller, direction),\n\t\t\tprop = \"_scroll\" + direction.p2, // add a tweenable property to the scroller that's a getter/setter function, like _scrollTop or _scrollLeft. This way, if someone does gsap.killTweensOf(scroller) it'll kill the scroll tween.\n\t\t\tlastScroll1, lastScroll2,\n\t\t\tgetTween = (scrollTo, vars, initialValue, change1, change2) => {\n\t\t\t\tlet tween = getTween.tween,\n\t\t\t\t\tonComplete = vars.onComplete,\n\t\t\t\t\tmodifiers = {};\n\t\t\t\ttween && tween.kill();\n\t\t\t\tlastScroll1 = Math.round(initialValue);\n\t\t\t\tvars[prop] = scrollTo;\n\t\t\t\tvars.modifiers = modifiers;\n\t\t\t\tmodifiers[prop] = value => {\n\t\t\t\t\tvalue = Math.round(getScroll()); // round because in some [very uncommon] Windows environments, it can get reported with decimals even though it was set without.\n\t\t\t\t\tif (value !== lastScroll1 && value !== lastScroll2) { // if the user scrolls, kill the tween. iOS Safari intermittently misreports the scroll position, it may be the most recently-set one or the one before that!\n\t\t\t\t\t\ttween.kill();\n\t\t\t\t\t\tgetTween.tween = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio;\n\t\t\t\t\t}\n\t\t\t\t\tlastScroll2 = lastScroll1;\n\t\t\t\t\treturn (lastScroll1 = Math.round(value));\n\t\t\t\t};\n\t\t\t\tvars.onComplete = () => {\n\t\t\t\t\tgetTween.tween = 0;\n\t\t\t\t\tonComplete && onComplete.call(tween);\n\t\t\t\t};\n\t\t\t\ttween = getTween.tween = gsap.to(scroller, vars);\n\t\t\t\treturn tween;\n\t\t\t};\n\t\tscroller[prop] = getScroll;\n\t\treturn getTween;\n\t};\n\n_horizontal.op = _vertical;\n\n\n\nexport class ScrollTrigger {\n\n\tconstructor(vars, animation) {\n\t\t_coreInitted || ScrollTrigger.register(gsap) || console.warn(\"Please gsap.registerPlugin(ScrollTrigger)\");\n\t\tthis.init(vars, animation);\n\t}\n\n\tinit(vars, animation) {\n\t\tthis.progress = 0;\n\t\tthis.vars && this.kill(1); // in case it's being initted again\n\t\tif (!_enabled) {\n\t\t\tthis.update = this.refresh = this.kill = _passThrough;\n\t\t\treturn;\n\t\t}\n\t\tvars = _setDefaults((_isString(vars) || _isNumber(vars) || vars.nodeType) ? {trigger: vars} : vars, _defaults);\n\t\tlet direction = vars.horizontal ? _horizontal : _vertical,\n\t\t\t{onUpdate, toggleClass, id, onToggle, onRefresh, scrub, trigger, pin, pinSpacing, invalidateOnRefresh, anticipatePin, onScrubComplete, onSnapComplete, once, snap, pinReparent} = vars,\n\t\t\tisToggle = !scrub && scrub !== 0,\n\t\t\tscroller = _toArray(vars.scroller || _win)[0],\n\t\t\tscrollerCache = gsap.core.getCache(scroller),\n\t\t\tisViewport = _isViewport(scroller),\n\t\t\tuseFixedPosition = \"pinType\" in vars ? vars.pinType === \"fixed\" : isViewport || _getProxyProp(scroller, \"pinType\") === \"fixed\",\n\t\t\tcallbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],\n\t\t\ttoggleActions = isToggle && vars.toggleActions.split(\" \"),\n\t\t\tmarkers = \"markers\" in vars ? vars.markers : _defaults.markers,\n\t\t\tborderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\"border\" + direction.p2 + _Width]) || 0,\n\t\t\tself = this,\n\t\t\tonRefreshInit = vars.onRefreshInit && (() => vars.onRefreshInit(self)),\n\t\t\tgetScrollerSize = _getSizeFunc(scroller, isViewport, direction),\n\t\t\tgetScrollerOffsets = _getOffsetsFunc(scroller, isViewport),\n\t\t\ttweenTo, pinCache, snapFunc, isReverted, scroll1, scroll2, start, end, markerStart, markerEnd, markerStartTrigger, markerEndTrigger, markerVars,\n\t\t\tchange, pinOriginalState, pinActiveState, pinState, spacer, offset, pinGetter, pinSetter, pinStart, pinChange, spacingStart, spacerState, markerStartSetter,\n\t\t\tmarkerEndSetter, cs, snap1, snap2, scrubTween, scrubSmooth, snapDurClamp, snapDelayedCall, prevProgress, prevScroll, prevAnimProgress;\n\n\t\tself.media = _creatingMedia;\n\t\tanticipatePin *= 45;\n\t\t_triggers.push(self);\n\t\tself.scroller = scroller;\n\t\tself.scroll = _getScrollFunc(scroller, direction);\n\t\tscroll1 = self.scroll();\n\t\tself.vars = vars;\n\t\tanimation = animation || vars.animation;\n\t\t(\"refreshPriority\" in vars) && (_sort = 1);\n\t\tscrollerCache.tweenScroll = scrollerCache.tweenScroll || {\n\t\t\ttop: _getTweenCreator(scroller, _vertical),\n\t\t\tleft: _getTweenCreator(scroller, _horizontal)\n\t\t};\n\t\tself.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];\n\t\tif (animation) {\n\t\t\tanimation.vars.lazy = false;\n\t\t\tanimation._initted || (animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.render(0, true, true));\n\t\t\tself.animation = animation.pause();\n\t\t\tanimation.scrollTrigger = self;\n\t\t\tscrubSmooth = _isNumber(scrub) && scrub;\n\t\t\tscrubSmooth && (scrubTween = gsap.to(animation, {ease: \"power3\", duration: scrubSmooth, onComplete: () => onScrubComplete && onScrubComplete(self)}));\n\t\t\tsnap1 = 0;\n\t\t\tid || (id = animation.vars.id);\n\t\t}\n\t\tif (snap) {\n\t\t\t_isObject(snap) || (snap = {snapTo: snap});\n\t\t\tgsap.set(isViewport ? [_body, _docEl] : scroller, {scrollBehavior: \"auto\"}); // smooth scrolling doesn't work with snap.\n\t\t\tsnapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === \"labels\" ? _getLabels(animation) : gsap.utils.snap(snap.snapTo);\n\t\t\tsnapDurClamp = snap.duration || {min: 0.1, max: 2};\n\t\t\tsnapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp);\n\t\t\tsnapDelayedCall = gsap.delayedCall(snap.delay || (scrubSmooth / 2) || 0.1, () => {\n\t\t\t\tif (Math.abs(self.getVelocity()) < 10 && !_pointerIsDown) {\n\t\t\t\t\tlet totalProgress = animation && !isToggle ? animation.totalProgress() : self.progress,\n\t\t\t\t\t\tvelocity = ((totalProgress - snap2) / (_getTime() - _time2) * 1000) || 0,\n\t\t\t\t\t\tchange1 = _abs(velocity / 2) * velocity / 0.185,\n\t\t\t\t\t\tnaturalEnd = totalProgress + change1,\n\t\t\t\t\t\tendValue = _clamp(0, 1, snapFunc(naturalEnd, self)),\n\t\t\t\t\t\tscroll = self.scroll(),\n\t\t\t\t\t\tendScroll = Math.round(start + endValue * change),\n\t\t\t\t\t\ttween = tweenTo.tween;\n\t\t\t\t\tif (scroll <= end && scroll >= start && endScroll !== scroll) {\n\t\t\t\t\t\tif (tween && !tween._initted && tween.data <= Math.abs(endScroll - scroll)) { // there's an overlapping snap! So we must figure out which one is closer and let that tween live.\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttweenTo(endScroll, {\n\t\t\t\t\t\t\tduration: snapDurClamp(_abs( (Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05) || 0)),\n\t\t\t\t\t\t\tease: snap.ease || \"power3\",\n\t\t\t\t\t\t\tdata: Math.abs(endScroll - scroll), // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap.\n\t\t\t\t\t\t\tonComplete: () => {\n\t\t\t\t\t\t\t\tsnap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;\n\t\t\t\t\t\t\t\tonSnapComplete && onSnapComplete(self);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, scroll, change1 * change, endScroll - scroll - change1 * change);\n\t\t\t\t\t}\n\t\t\t\t} else if (self.isActive) {\n\t\t\t\t\tsnapDelayedCall.restart(true);\n\t\t\t\t}\n\t\t\t}).pause();\n\t\t}\n\t\tid && (_ids[id] = self);\n\t\ttrigger = self.trigger = _toArray(trigger || pin)[0];\n\t\tpin = pin === true ? trigger : _toArray(pin)[0];\n\t\t_isString(toggleClass) && (toggleClass = {targets: trigger, className: toggleClass});\n\t\tif (pin) {\n\t\t\t(pinSpacing === false || pinSpacing === _margin) || (pinSpacing = !pinSpacing && _getComputedStyle(pin.parentNode).display === \"flex\" ? false : _padding); // if the parent is display: flex, don't apply pinSpacing by default.\n\t\t\tself.pin = pin;\n\t\t\tvars.force3D !== false && gsap.set(pin, {force3D: true});\n\t\t\tpinCache = gsap.core.getCache(pin);\n\t\t\tif (!pinCache.spacer) { // record the spacer and pinOriginalState on the cache in case someone tries pinning the same element with MULTIPLE ScrollTriggers - we don't want to have multiple spacers or record the \"original\" pin state after it has already been affected by another ScrollTrigger.\n\t\t\t\tpinCache.spacer = spacer = _doc.createElement(\"div\");\n\t\t\t\tspacer.setAttribute(\"class\", \"pin-spacer\" + (id ? \" pin-spacer-\" + id : \"\"));\n\t\t\t\tpinCache.pinState = pinOriginalState = _getState(pin);\n\t\t\t} else {\n\t\t\t\tpinOriginalState = pinCache.pinState;\n\t\t\t}\n\t\t\tself.spacer = spacer = pinCache.spacer;\n\t\t\tcs = _getComputedStyle(pin);\n\t\t\tspacingStart = cs[pinSpacing + direction.os2];\n\t\t\tpinGetter = gsap.getProperty(pin);\n\t\t\tpinSetter = gsap.quickSetter(pin, direction.a, _px);\n\t\t\t// pin.firstChild && !_maxScroll(pin, direction) && (pin.style.overflow = \"hidden\"); // protects from collapsing margins, but can have unintended consequences as demonstrated here: https://codepen.io/GreenSock/pen/1e42c7a73bfa409d2cf1e184e7a4248d so it was removed in favor of just telling people to set up their CSS to avoid the collapsing margins (overflow: hidden | auto is just one option. Another is border-top: 1px solid transparent).\n\t\t\t_swapPinIn(pin, spacer, cs);\n\t\t\tpinState = _getState(pin);\n\t\t}\n\t\tif (markers) {\n\t\t\tmarkerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;\n\t\t\tmarkerStartTrigger = _createMarker(\"scroller-start\", id, scroller, direction, markerVars, 0);\n\t\t\tmarkerEndTrigger = _createMarker(\"scroller-end\", id, scroller, direction, markerVars, 0, markerStartTrigger);\n\t\t\toffset = markerStartTrigger[\"offset\" + direction.op.d2];\n\t\t\tmarkerStart = _createMarker(\"start\", id, scroller, direction, markerVars, offset);\n\t\t\tmarkerEnd =_createMarker(\"end\", id, scroller, direction, markerVars, offset);\n\t\t\tif (!useFixedPosition) {\n\t\t\t\t_makePositionable(scroller);\n\t\t\t\tgsap.set([markerStartTrigger, markerEndTrigger], {force3D: true});\n\t\t\t\tmarkerStartSetter = gsap.quickSetter(markerStartTrigger, direction.a, _px);\n\t\t\t\tmarkerEndSetter = gsap.quickSetter(markerEndTrigger, direction.a, _px);\n\t\t\t}\n\t\t}\n\n\t\tself.revert = revert => {\n\t\t\tlet r = revert !== false || !self.enabled,\n\t\t\t\tprevRefreshing = _refreshing;\n\t\t\tif (r !== isReverted) {\n\t\t\t\tif (r) {\n\t\t\t\t\tprevScroll = Math.max(self.scroll(), self.scroll.rec || 0); // record the scroll so we can revert later (repositioning/pinning things can affect scroll position). In the static refresh() method, we first record all the scroll positions as a reference.\n\t\t\t\t\tprevProgress = self.progress;\n\t\t\t\t\tprevAnimProgress = animation && animation.progress();\n\t\t\t\t}\n\t\t\t\tmarkerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(m => m.style.display = r ? \"none\" : \"block\");\n\t\t\t\tr && (_refreshing = 1);\n\t\t\t\tself.update(r); // make sure the pin is back in its original position so that all the measurements are correct.\n\t\t\t\t_refreshing = prevRefreshing;\n\t\t\t\tpin && (r ? _swapPinOut(pin, spacer, pinOriginalState) : (!pinReparent || !self.isActive) && _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState));\n\t\t\t\tisReverted = r;\n\t\t\t}\n\t\t}\n\n\n\t\tself.refresh = soft => {\n\t\t\tif (_refreshing || !self.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (pin && soft && _lastScrollTime) {\n\t\t\t\t_addListener(ScrollTrigger, \"scrollEnd\", _softRefresh);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_refreshing = 1;\n\t\t\tscrubTween && scrubTween.kill();\n\t\t\tinvalidateOnRefresh && animation && animation.progress(0).invalidate();\n\t\t\tisReverted || self.revert();\n\t\t\tlet size = getScrollerSize(),\n\t\t\t\tscrollerBounds = getScrollerOffsets(),\n\t\t\t\tmax = _maxScroll(scroller, direction),\n\t\t\t\toffset = 0,\n\t\t\t\totherPinOffset = 0,\n\t\t\t\tparsedEnd = vars.end,\n\t\t\t\tparsedEndTrigger = vars.endTrigger || trigger,\n\t\t\t\tparsedStart = vars.start || (vars.start === 0 ? 0 : (pin || !trigger ? \"0 0\" : \"0 100%\")),\n\t\t\t\ttriggerIndex = (trigger && Math.max(0, _triggers.indexOf(self))) || 0,\n\t\t\t\ti = triggerIndex,\n\t\t\t\tcs, bounds, scroll, isVertical, override, curTrigger, curPin, oppositeScroll;\n\t\t\twhile (i--) { // user might try to pin the same element more than once, so we must find any prior triggers with the same pin, revert them, and determine how long they're pinning so that we can offset things appropriately. Make sure we revert from last to first so that things \"rewind\" properly.\n\t\t\t\tcurPin = _triggers[i].pin;\n\t\t\t\tcurPin && (curPin === trigger || curPin === pin) && _triggers[i].revert();\n\t\t\t}\n\t\t\tstart = _parsePosition(parsedStart, trigger, size, direction, self.scroll(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max) || (pin ? -0.001 : 0);\n\t\t\t_isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));\n\t\t\tif (_isString(parsedEnd) && !parsedEnd.indexOf(\"+=\")) {\n\t\t\t\tif (~parsedEnd.indexOf(\" \")) {\n\t\t\t\t\tparsedEnd = (_isString(parsedStart) ? parsedStart.split(\" \")[0] : \"\") + parsedEnd;\n\t\t\t\t} else {\n\t\t\t\t\toffset = _offsetToPx(parsedEnd.substr(2), size);\n\t\t\t\t\tparsedEnd = _isString(parsedStart) ? parsedStart : start + offset; // _parsePosition won't factor in the offset if the start is a number, so do it here.\n\t\t\t\t\tparsedEndTrigger = trigger;\n\t\t\t\t}\n\t\t\t}\n\t\t\tend = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? \"100% 0\" : max), parsedEndTrigger, size, direction, self.scroll() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max)) || -0.001;\n\t\t\tchange = (end - start) || ((start -= 0.01) && 0.001);\n\n\t\t\toffset = 0;\n\t\t\ti = triggerIndex;\n\t\t\twhile (i--) {\n\t\t\t\tcurTrigger = _triggers[i];\n\t\t\t\tcurPin = curTrigger.pin;\n\t\t\t\tif (curPin && curTrigger.start - curTrigger._pinPush < start) {\n\t\t\t\t\tcs = curTrigger.end - curTrigger.start;\n\t\t\t\t\tcurPin === trigger && (offset += cs);\n\t\t\t\t\tcurPin === pin && (otherPinOffset += cs);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstart += offset;\n\t\t\tend += offset;\n\t\t\tself._pinPush = otherPinOffset;\n\t\t\tif (markerStart && offset) { // offset the markers if necessary\n\t\t\t\tcs = {};\n\t\t\t\tcs[direction.a] = \"+=\" + offset;\n\t\t\t\tgsap.set([markerStart, markerEnd], cs);\n\t\t\t}\n\n\t\t\tif (pin) {\n\t\t\t\tcs = _getComputedStyle(pin);\n\t\t\t\tisVertical = direction === _vertical;\n\t\t\t\tscroll = self.scroll(); // recalculate because the triggers can affect the scroll\n\t\t\t\tpinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;\n\t\t\t\t!max && end > 1 && ((isViewport ? _body : scroller).style[\"overflow-\" + direction.a] = \"scroll\"); // makes sure the scroller has a scrollbar, otherwise if something has width: 100%, for example, it would be too big (exclude the scrollbar). See https://greensock.com/forums/topic/25182-scrolltrigger-width-of-page-increase-where-markers-are-set-to-false/\n\t\t\t\t_swapPinIn(pin, spacer, cs);\n\t\t\t\tpinState = _getState(pin);\n\t\t\t\t// transforms will interfere with the top/left/right/bottom placement, so remove them temporarily. getBoundingClientRect() factors in transforms.\n\t\t\t\tbounds = _getBounds(pin, true);\n\t\t\t\toppositeScroll = useFixedPosition && _getScrollFunc(scroller, isVertical ? _horizontal : _vertical)();\n\t\t\t\tif (pinSpacing) {\n\t\t\t\t\tspacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];\n\t\t\t\t\tspacerState.t = spacer;\n\t\t\t\t\ti = (pinSpacing === _padding) ? _getSize(pin, direction) + change + otherPinOffset : 0;\n\t\t\t\t\ti && spacerState.push(direction.d, i + _px); // for box-sizing: border-box (must include padding).\n\t\t\t\t\t_setState(spacerState);\n\t\t\t\t\tuseFixedPosition && self.scroll(prevScroll);\n\t\t\t\t}\n\t\t\t\tif (useFixedPosition) {\n\t\t\t\t\toverride = {\n\t\t\t\t\t\ttop: (bounds.top + (isVertical ? scroll - start : oppositeScroll)) + _px,\n\t\t\t\t\t\tleft: (bounds.left + (isVertical ? oppositeScroll : scroll - start)) + _px,\n\t\t\t\t\t\tboxSizing: \"border-box\",\n\t\t\t\t\t\tposition: \"fixed\"\n\t\t\t\t\t};\n\t\t\t\t\toverride[_width] = override[\"max\" + _Width] = Math.ceil(bounds.width) + _px;\n\t\t\t\t\toverride[_height] = override[\"max\" + _Height] = Math.ceil(bounds.height) + _px;\n\t\t\t\t\toverride[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = \"0\";\n\t\t\t\t\toverride[_padding] = cs[_padding];\n\t\t\t\t\toverride[_padding + _Top] = cs[_padding + _Top];\n\t\t\t\t\toverride[_padding + _Right] = cs[_padding + _Right];\n\t\t\t\t\toverride[_padding + _Bottom] = cs[_padding + _Bottom];\n\t\t\t\t\toverride[_padding + _Left] = cs[_padding + _Left];\n\t\t\t\t\tpinActiveState = _copyState(pinOriginalState, override, pinReparent);\n\t\t\t\t}\n\t\t\t\tif (animation) { // the animation might be affecting the transform, so we must jump to the end, check the value, and compensate accordingly. Otherwise, when it becomes unpinned, the pinSetter() will get set to a value that doesn't include whatever the animation did.\n\t\t\t\t\tanimation.progress(1, true);\n\t\t\t\t\tpinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;\n\t\t\t\t\tchange !== pinChange && pinActiveState.splice(pinActiveState.length - 2, 2); // transform is the last property/value set in the state Array. Since the animation is controlling that, we should omit it.\n\t\t\t\t\tanimation.progress(0, true);\n\t\t\t\t} else {\n\t\t\t\t\tpinChange = change\n\t\t\t\t}\n\t\t\t} else if (trigger && self.scroll()) { // it may be INSIDE a pinned element, so walk up the tree and look for any elements with _pinOffset to compensate because anything with pinSpacing that's already scrolled would throw off the measurements in getBoundingClientRect()\n\t\t\t\tbounds = trigger.parentNode;\n\t\t\t\twhile (bounds && bounds !== _body) {\n\t\t\t\t\tif (bounds._pinOffset) {\n\t\t\t\t\t\tstart -= bounds._pinOffset;\n\t\t\t\t\t\tend -= bounds._pinOffset;\n\t\t\t\t\t}\n\t\t\t\t\tbounds = bounds.parentNode;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (i = 0; i < triggerIndex; i++) { // make sure we revert from first to last to make sure things reach their end state properly\n\t\t\t\tcurTrigger = _triggers[i].pin;\n\t\t\t\tcurTrigger && (curTrigger === trigger || curTrigger === pin) && _triggers[i].revert(false);\n\t\t\t}\n\t\t\tself.start = start;\n\t\t\tself.end = end;\n\t\t\tscroll1 = scroll2 = self.scroll(); // reset velocity\n\t\t\tscroll1 < prevScroll && self.scroll(prevScroll);\n\t\t\tself.revert(false);\n\t\t\t_refreshing = 0;\n\t\t\tprevAnimProgress && isToggle && animation.progress(prevAnimProgress, true);\n\t\t\tif (prevProgress !== self.progress) { // ensures that the direction is set properly (when refreshing, progress is set back to 0 initially, then back again to wherever it needs to be) and that callbacks are triggered.\n\t\t\t\tscrubTween && animation.totalProgress(prevProgress, true); // to avoid issues where animation callbacks like onStart aren't triggered.\n\t\t\t\tself.progress = prevProgress;\n\t\t\t\tself.update();\n\t\t\t}\n\t\t\tpin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));\n\t\t\tonRefresh && onRefresh(self);\n\t\t};\n\n\t\tself.getVelocity = () => ((self.scroll() - scroll2) / (_getTime() - _time2) * 1000) || 0;\n\n\t\tself.update = (reset, recordVelocity) => {\n\t\t\tlet scroll = self.scroll(),\n\t\t\t\tp = reset ? 0 : (scroll - start) / change,\n\t\t\t\tclipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,\n\t\t\t\tprevProgress = self.progress,\n\t\t\t\tisActive, wasActive, toggleState, action, stateChanged, toggled;\n\t\t\tif (recordVelocity) {\n\t\t\t\tscroll2 = scroll1;\n\t\t\t\tscroll1 = scroll;\n\t\t\t\tif (snap) {\n\t\t\t\t\tsnap2 = snap1;\n\t\t\t\t\tsnap1 = animation && !isToggle ? animation.totalProgress() : clipped;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// anticipate the pinning a few ticks ahead of time based on velocity to avoid a visual glitch due to the fact that most browsers do scrolling on a separate thread (not synced with requestAnimationFrame).\n\t\t\t(anticipatePin && !clipped && pin && !_refreshing && !_startup && _lastScrollTime && start < scroll + ((scroll - scroll2) / (_getTime() - _time2)) * anticipatePin) && (clipped = 0.0001);\n\t\t\tif (clipped !== prevProgress && self.enabled) {\n\t\t\t\tisActive = self.isActive = !!clipped && clipped < 1;\n\t\t\t\twasActive = !!prevProgress && prevProgress < 1;\n\t\t\t\ttoggled = isActive !== wasActive;\n\t\t\t\tstateChanged = toggled || !!clipped !== !!prevProgress; // could go from start all the way to end, thus it didn't toggle but it did change state in a sense (may need to fire a callback)\n\t\t\t\tself.direction = clipped > prevProgress ? 1 : -1;\n\t\t\t\tself.progress = clipped;\n\t\t\t\tif (!isToggle) {\n\t\t\t\t\tif (scrubTween && !_refreshing && !_startup) {\n\t\t\t\t\t\tscrubTween.vars.totalProgress = clipped;\n\t\t\t\t\t\tscrubTween.invalidate().restart();\n\t\t\t\t\t} else if (animation) {\n\t\t\t\t\t\tanimation.totalProgress(clipped, !!_refreshing);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pin) {\n\t\t\t\t\treset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);\n\t\t\t\t\tif (!useFixedPosition) {\n\t\t\t\t\t\tpinSetter(pinStart + pinChange * clipped);\n\t\t\t\t\t} else if (stateChanged) {\n\t\t\t\t\t\taction = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction); // if it's at the VERY end of the page, don't switch away from position: fixed because it's pointless and it could cause a brief flash when the user scrolls back up (when it gets pinned again)\n\t\t\t\t\t\tif (pinReparent) {\n\t\t\t\t\t\t\tif (!reset && (isActive || action)) {\n\t\t\t\t\t\t\t\tlet bounds = _getBounds(pin, true),\n\t\t\t\t\t\t\t\t\toffset = scroll - start;\n\t\t\t\t\t\t\t\t_reparent(pin, _body, (bounds.top + (direction === _vertical ? offset : 0)) + _px, (bounds.left + (direction === _vertical ? 0 : offset)) + _px);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_reparent(pin, spacer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_setState(isActive || action ? pinActiveState : pinState);\n\t\t\t\t\t\t(pinChange !== change && clipped < 1 && isActive) || pinSetter(pinStart + (clipped === 1 && !action ? pinChange : 0));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsnap && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true);\n\t\t\t\ttoggleClass && (toggled || (once && clipped && (clipped < 1 || !_limitCallbacks))) && _toArray(toggleClass.targets).forEach(el => el.classList[isActive || once ? \"add\" : \"remove\"](toggleClass.className)); // classes could affect positioning, so do it even if reset or refreshing is true.\n\t\t\t\tonUpdate && !isToggle && !reset && onUpdate(self);\n\t\t\t\tif (stateChanged && !_refreshing) {\n\t\t\t\t\ttoggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3; // 0 = enter, 1 = leave, 2 = enterBack, 3 = leaveBack (we prioritize the FIRST encounter, thus if you scroll really fast past the onEnter and onLeave in one tick, it'd prioritize onEnter.\n\t\t\t\t\tif (isToggle) {\n\t\t\t\t\t\taction = (!toggled && toggleActions[toggleState + 1] !== \"none\" && toggleActions[toggleState + 1]) || toggleActions[toggleState]; // if it didn't toggle, that means it shot right past and since we prioritize the \"enter\" action, we should switch to the \"leave\" in this case (but only if one is defined)\n\t\t\t\t\t\tif (animation && (action === \"complete\" || action === \"reset\" || action in animation)) {\n\t\t\t\t\t\t\tif (action === \"complete\") {\n\t\t\t\t\t\t\t\tanimation.pause().totalProgress(1);\n\t\t\t\t\t\t\t} else if (action === \"reset\") {\n\t\t\t\t\t\t\t\tanimation.restart(true).pause();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tanimation[action]();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonUpdate && onUpdate(self);\n\t\t\t\t\t}\n\t\t\t\t\tif (toggled || !_limitCallbacks) { // on startup, the page could be scrolled and we don't want to fire callbacks that didn't toggle. For example onEnter shouldn't fire if the ScrollTrigger isn't actually entered.\n\t\t\t\t\t\tonToggle && toggled && onToggle(self);\n\t\t\t\t\t\tcallbacks[toggleState] && callbacks[toggleState](self);\n\t\t\t\t\t\tonce && (clipped === 1 ? self.kill(false, 1) : (callbacks[toggleState] = 0)); // a callback shouldn't be called again if once is true.\n\t\t\t\t\t\tif (!toggled) { // it's possible to go completely past, like from before the start to after the end (or vice-versa) in which case BOTH callbacks should be fired in that order\n\t\t\t\t\t\t\ttoggleState = clipped === 1 ? 1 : 3;\n\t\t\t\t\t\t\tcallbacks[toggleState] && callbacks[toggleState](self);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (isToggle && onUpdate && !_refreshing) {\n\t\t\t\t\tonUpdate(self);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// update absolutely-positioned markers (only if the scroller isn't the viewport)\n\t\t\tif (markerEndSetter) {\n\t\t\t\tmarkerStartSetter(scroll + (markerStartTrigger._isFlipped ? 1 : 0));\n\t\t\t\tmarkerEndSetter(scroll);\n\t\t\t}\n\t\t};\n\n\t\tself.enable = () => {\n\t\t\tif (!self.enabled) {\n\t\t\t\tself.enabled = true;\n\t\t\t\t_addListener(scroller, \"resize\", _onResize);\n\t\t\t\t_addListener(scroller, \"scroll\", _onScroll);\n\t\t\t\tonRefreshInit && _addListener(ScrollTrigger, \"refreshInit\", onRefreshInit);\n\t\t\t\t!animation || !animation.add ? self.refresh() : gsap.delayedCall(0.01, () => start || end || self.refresh()) && (change = 0.01) && (start = end = 0); // if the animation is a timeline, it may not have been populated yet, so it wouldn't render at the proper place on the first refresh(), thus we should schedule one for the next tick.\n\t\t\t}\n\t\t};\n\n\t\tself.disable = (reset, allowAnimation) => {\n\t\t\tif (self.enabled) {\n\t\t\t\treset !== false && self.revert();\n\t\t\t\tself.enabled = self.isActive = false;\n\t\t\t\tallowAnimation || (scrubTween && scrubTween.pause());\n\t\t\t\tprevScroll = 0;\n\t\t\t\tpinCache && (pinCache.uncache = 1);\n\t\t\t\tonRefreshInit && _removeListener(ScrollTrigger, \"refreshInit\", onRefreshInit);\n\t\t\t\tif (snapDelayedCall) {\n\t\t\t\t\tsnapDelayedCall.pause();\n\t\t\t\t\ttweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);\n\t\t\t\t}\n\t\t\t\tif (!isViewport) {\n\t\t\t\t\tlet i = _triggers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (_triggers[i].scroller === scroller && _triggers[i] !== self) {\n\t\t\t\t\t\t\treturn; //don't remove the listeners if there are still other triggers referencing it.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_removeListener(scroller, \"resize\", _onResize);\n\t\t\t\t\t_removeListener(scroller, \"scroll\", _onScroll);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tself.kill = (revert, allowAnimation) => {\n\t\t\tself.disable(revert, allowAnimation);\n\t\t\tid && (delete _ids[id]);\n\t\t\tlet i = _triggers.indexOf(self);\n\t\t\t_triggers.splice(i, 1);\n\t\t\ti === _i && _direction > 0 && _i--; // if we're in the middle of a refresh() or update(), splicing would cause skips in the index, so adjust...\n\t\t\tif (animation) {\n\t\t\t\tanimation.scrollTrigger = null;\n\t\t\t\trevert && animation.render(-1);\n\t\t\t\tallowAnimation || animation.kill();\n\t\t\t}\n\t\t\tmarkerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(m => m.parentNode.removeChild(m));\n\t\t\tpinCache && (pinCache.uncache = 1);\n\t\t};\n\n\t\tself.enable();\n\t}\n\n\n\tstatic register(core) {\n\t\tif (!_coreInitted) {\n\t\t\tgsap = core || _getGSAP();\n\t\t\tif (_windowExists() && window.document) {\n\t\t\t\t_win = window;\n\t\t\t\t_doc = document;\n\t\t\t\t_docEl = _doc.documentElement;\n\t\t\t\t_body = _doc.body;\n\t\t\t}\n\t\t\tif (gsap) {\n\t\t\t\t_toArray = gsap.utils.toArray;\n\t\t\t\t_clamp = gsap.utils.clamp;\n\t\t\t\tgsap.core.globals(\"ScrollTrigger\", ScrollTrigger); // must register the global manually because in Internet Explorer, functions (classes) don't have a \"name\" property.\n\t\t\t\tif (_body) {\n\t\t\t\t\t_raf = _win.requestAnimationFrame || (f => setTimeout(f, 16));\n\t\t\t\t\t_addListener(_win, \"mousewheel\", _onScroll);\n\t\t\t\t\t_root = [_win, _doc, _docEl, _body];\n\t\t\t\t\t_addListener(_doc, \"scroll\", _onScroll); // some browsers (like Chrome), the window stops dispatching scroll events on the window if you scroll really fast, but it's consistent on the document!\n\t\t\t\t\tlet bodyStyle = _body.style,\n\t\t\t\t\t\tborder = bodyStyle.borderTop,\n\t\t\t\t\t\tbounds;\n\t\t\t\t\tbodyStyle.borderTop = \"1px solid #000\"; // works around an issue where a margin of a child element could throw off the bounds of the _body, making it seem like there's a margin when there actually isn't. The border ensures that the bounds are accurate.\n\t\t\t\t\tbounds = _getBounds(_body);\n\t\t\t\t\t_vertical.m = Math.round(bounds.top + _vertical.sc()) || 0; // accommodate the offset of the <body> caused by margins and/or padding\n\t\t\t\t\t_horizontal.m = Math.round(bounds.left + _horizontal.sc()) || 0;\n\t\t\t\t\tborder ? (bodyStyle.borderTop = border) : bodyStyle.removeProperty(\"border-top\");\n\t\t\t\t\t_syncInterval = setInterval(_sync, 200);\n\t\t\t\t\tgsap.delayedCall(0.5, () => _startup = 0);\n\t\t\t\t\t_addListener(_doc, \"touchcancel\", _passThrough); // some older Android devices intermittently stop dispatching \"touchmove\" events if we don't listen for \"touchcancel\" on the document.\n\t\t\t\t\t_addListener(_body, \"touchstart\", _passThrough); //works around Safari bug: https://greensock.com/forums/topic/21450-draggable-in-iframe-on-mobile-is-buggy/\n\t\t\t\t\t_multiListener(_addListener, _doc, \"pointerdown,touchstart,mousedown\", () => _pointerIsDown = 1);\n\t\t\t\t\t_multiListener(_addListener, _doc, \"pointerup,touchend,mouseup\", () => _pointerIsDown = 0);\n\t\t\t\t\t_transformProp = gsap.utils.checkPrefix(\"transform\");\n\t\t\t\t\t_stateProps.push(_transformProp);\n\t\t\t\t\t_coreInitted = _getTime();\n\t\t\t\t\t_resizeDelay = gsap.delayedCall(0.2, _refreshAll).pause();\n\t\t\t\t\t_autoRefresh = [_doc, \"visibilitychange\", () => {\n\t\t\t\t\t\tlet w = _win.innerWidth,\n\t\t\t\t\t\t\th = _win.innerHeight;\n\t\t\t\t\t\tif (_doc.hidden) {\n\t\t\t\t\t\t\t_prevWidth = w;\n\t\t\t\t\t\t\t_prevHeight = h;\n\t\t\t\t\t\t} else if (_prevWidth !== w || _prevHeight !== h) {\n\t\t\t\t\t\t\t_onResize();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, _doc, \"DOMContentLoaded\", _refreshAll, _win, \"load\", () => _lastScrollTime || _refreshAll(), _win, \"resize\", _onResize];\n\t\t\t\t\t_iterateAutoRefresh(_addListener);\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn _coreInitted;\n\t}\n\n\tstatic defaults(config) {\n\t\tfor (let p in config) {\n\t\t\t_defaults[p] = config[p];\n\t\t}\n\t}\n\n\tstatic kill() {\n\t\t_enabled = 0;\n\t\t_triggers.slice(0).forEach(trigger => trigger.kill(1));\n\t}\n\n\tstatic config(vars) {\n\t\t(\"limitCallbacks\" in vars) && (_limitCallbacks = !!vars.limitCallbacks);\n\t\tlet ms = vars.syncInterval;\n\t\tms && clearInterval(_syncInterval) || ((_syncInterval = ms) && setInterval(_sync, ms));\n\t\t(\"autoRefreshEvents\" in vars) && (_iterateAutoRefresh(_removeListener) || _iterateAutoRefresh(_addListener, vars.autoRefreshEvents || \"none\"));\n\t}\n\n\tstatic scrollerProxy(target, vars) {\n\t\tlet t = _toArray(target)[0];\n\t\t_isViewport(t) ? _proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _proxies.unshift(t, vars);\n\t}\n\n\tstatic matchMedia(vars) { // _media is populated in the following order: mediaQueryString, onMatch, onUnmatch, isMatched. So if there are two media queries, the Array would have a length of 8\n\t\tlet mq, p, i, func, result;\n\t\tfor (p in vars) {\n\t\t\ti = _media.indexOf(p);\n\t\t\tfunc = vars[p];\n\t\t\t_creatingMedia = p;\n\t\t\tif (p === \"all\") {\n\t\t\t\tfunc();\n\t\t\t} else {\n\t\t\t\tmq = _win.matchMedia(p);\n\t\t\t\tif (mq) {\n\t\t\t\t\tmq.matches && (result = func());\n\t\t\t\t\tif (~i) {\n\t\t\t\t\t\t_media[i + 1] = _combineFunc(_media[i + 1], func);\n\t\t\t\t\t\t_media[i + 2] = _combineFunc(_media[i + 2], result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = _media.length;\n\t\t\t\t\t\t_media.push(p, func, result);\n\t\t\t\t\t\tmq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener(\"change\", _onMediaChange);\n\t\t\t\t\t}\n\t\t\t\t\t_media[i + 3] = mq.matches;\n\t\t\t\t}\n\t\t\t}\n\t\t\t_creatingMedia = 0;\n\t\t}\n\t\treturn _media;\n\t}\n\n\tstatic clearMatchMedia(query) {\n\t\tquery || (_media.length = 0);\n\t\tquery = _media.indexOf(query);\n\t\tquery >= 0 && _media.splice(query, 4);\n\t}\n\n}\n\nScrollTrigger.version = \"3.5.1\";\nScrollTrigger.saveStyles = targets => targets ? _toArray(targets).forEach(target => {\n\tlet i = _savedStyles.indexOf(target);\n\ti >= 0 && _savedStyles.splice(i, 4);\n\t_savedStyles.push(target, target.style.cssText, gsap.core.getCache(target), _creatingMedia);\n}) : _savedStyles;\nScrollTrigger.revert = (soft, media) => _revertAll(!soft, media);\nScrollTrigger.create = (vars, animation) => new ScrollTrigger(vars, animation);\nScrollTrigger.refresh = safe => safe ? _onResize() : _refreshAll(true);\nScrollTrigger.update = _updateAll;\nScrollTrigger.maxScroll = (element, horizontal) => _maxScroll(element, horizontal ? _horizontal : _vertical);\nScrollTrigger.getScrollFunc = (element, horizontal) => _getScrollFunc(_toArray(element)[0], horizontal ? _horizontal : _vertical);\nScrollTrigger.getById = id => _ids[id];\nScrollTrigger.getAll = () => _triggers.slice(0);\nScrollTrigger.isScrolling = () => !!_lastScrollTime;\nScrollTrigger.addEventListener = (type, callback) => {\n\tlet a = _listeners[type] || (_listeners[type] = []);\n\t~a.indexOf(callback) || a.push(callback);\n};\nScrollTrigger.removeEventListener = (type, callback) => {\n\tlet a = _listeners[type],\n\t\ti = a && a.indexOf(callback);\n\ti >= 0 && a.splice(i, 1);\n};\nScrollTrigger.batch = (targets, vars) => {\n\tlet result = [],\n\t\tvarsCopy = {},\n\t\tinterval = vars.interval || 0.016,\n\t\tbatchMax = vars.batchMax || 1e9,\n\t\tproxyCallback = (type, callback) => {\n\t\t\tlet elements = [],\n\t\t\t\ttriggers = [],\n\t\t\t\tdelay = gsap.delayedCall(interval, () => {callback(elements, triggers); elements = []; triggers = [];}).pause();\n\t\t\treturn self => {\n\t\t\t\telements.length || delay.restart(true);\n\t\t\t\telements.push(self.trigger);\n\t\t\t\ttriggers.push(self);\n\t\t\t\tbatchMax <= elements.length && delay.progress(1);\n\t\t\t};\n\t\t},\n\t\tp;\n\tfor (p in vars) {\n\t\tvarsCopy[p] = (p.substr(0, 2) === \"on\" && _isFunction(vars[p]) && p !== \"onRefreshInit\") ? proxyCallback(p, vars[p]) : vars[p];\n\t}\n\tif (_isFunction(batchMax)) {\n\t\tbatchMax = batchMax();\n\t\t_addListener(ScrollTrigger, \"refresh\", () => batchMax = vars.batchMax());\n\t}\n\t_toArray(targets).forEach(target => {\n\t\tlet config = {};\n\t\tfor (p in varsCopy) {\n\t\t\tconfig[p] = varsCopy[p];\n\t\t}\n\t\tconfig.trigger = target;\n\t\tresult.push(ScrollTrigger.create(config));\n\t});\n\treturn result;\n}\nScrollTrigger.sort = func => _triggers.sort(func || ((a, b) => (a.vars.refreshPriority || 0) * -1e6 + a.start - (b.start + (b.vars.refreshPriority || 0) * -1e6)));\n\n_getGSAP() && gsap.registerPlugin(ScrollTrigger);\n\nexport { ScrollTrigger as default };"],"names":["_passThrough","v","_windowExists","window","_getGSAP","gsap","registerPlugin","_isViewport","e","_root","indexOf","_getProxyProp","element","property","_proxies","_getScrollFunc","s","sc","i","_scrollers","offset","_vertical","push","value","arguments","length","_getBoundsFunc","_winOffsets","width","_win","innerWidth","height","innerHeight","_getBounds","_maxScroll","d2","d","a","Math","max","_docEl","_body","_iterateAutoRefresh","func","events","_autoRefresh","_isString","_isFunction","_isNumber","_isObject","_callIfFunc","_combineFunc","f1","f2","result1","result2","_getComputedStyle","getComputedStyle","_setDefaults","obj","defaults","p","_getSize","_multiListener","types","callback","split","forEach","type","_addListener","addEventListener","passive","_removeListener","removeEventListener","_offsetToPx","size","eqIndex","relative","charAt","parseFloat","substr","_keywords","_createMarker","name","container","direction","matchWidthEl","startColor","endColor","fontSize","indent","fontWeight","_doc","createElement","useFixedPosition","isScroller","parent","isStart","color","css","_right","_bottom","offsetWidth","_isStart","setAttribute","style","cssText","innerText","insertBefore","children","_offset","op","_positionMarker","_sync","_request","_raf","_updateAll","_onScroll","_lastScrollTime","_dispatch","_getTime","_onResize","_refreshing","_resizeDelay","restart","_onMediaChange","index","tick","ticker","frame","matches","_lastMediaTick","_startup","_revertAll","_media","matchMedia","_revertRecorded","_creatingMedia","_refreshAll","_softRefresh","ScrollTrigger","_swapPinIn","pin","spacer","cs","spacerState","parentNode","_propNamesToCopy","spacerStyle","pinStyle","position","display","overflow","boxSizing","_width","_horizontal","_px","_height","_padding","_margin","_left","_setState","appendChild","_getState","l","_stateProps","state","t","_parsePosition","trigger","scrollerSize","scroll","marker","markerScroller","self","scrollerBounds","borderWidth","scrollerMax","localOffset","globalOffset","_toArray","bounds","offsets","left","top","removeProperty","m","round","_reparent","_stOrig","_prefixExp","test","core","getCache","uncache","_getTweenCreator","scroller","lastScroll1","lastScroll2","getScroll","prop","p2","getTween","scrollTo","vars","initialValue","change1","change2","tween","onComplete","modifiers","kill","ratio","call","to","_coreInitted","_clamp","_time2","_syncInterval","_pointerIsDown","_transformProp","_i","_prevWidth","_prevHeight","_sort","_limitCallbacks","Date","now","_time1","_enabled","_abs","abs","_scrollLeft","_scrollTop","_Right","_Left","_Top","_Bottom","_Width","_Height","os","os2","pageXOffset","pageYOffset","withoutTransforms","x","y","xPercent","yPercent","rotation","rotationX","rotationY","scale","skewX","skewY","progress","getBoundingClientRect","_markerDefaults","_defaults","toggleActions","anticipatePin","center","bottom","right","start","flipped","side","oppositeSide","_isFlipped","set","_triggers","_ids","_listeners","_emptyArray","map","f","_savedStyles","media","rec","revert","force","skipRevert","refreshInits","sort","refresh","result","render","pause","_lastScroll","_direction","time","recordVelocity","update","concat","_capsExp","replace","toLowerCase","init","animation","this","tweenTo","pinCache","snapFunc","isReverted","scroll1","scroll2","end","markerStart","markerEnd","markerStartTrigger","markerEndTrigger","markerVars","change","pinOriginalState","pinActiveState","pinState","pinGetter","pinSetter","pinStart","pinChange","spacingStart","markerStartSetter","markerEndSetter","snap1","snap2","scrubTween","scrubSmooth","snapDurClamp","snapDelayedCall","prevProgress","prevScroll","prevAnimProgress","nodeType","horizontal","onUpdate","toggleClass","id","onToggle","onRefresh","scrub","pinSpacing","invalidateOnRefresh","onScrubComplete","onSnapComplete","once","snap","pinReparent","isToggle","scrollerCache","isViewport","pinType","callbacks","onEnter","onLeave","onEnterBack","onLeaveBack","markers","onRefreshInit","getScrollerSize","_getSizeFunc","getScrollerOffsets","_getOffsetsFunc","tweenScroll","lazy","_initted","immediateRender","scrollTrigger","ease","duration","snapTo","scrollBehavior","_getLabels","labels","utils","min","delayedCall","delay","getVelocity","totalProgress","velocity","naturalEnd","endValue","endScroll","data","isActive","targets","className","force3D","getProperty","quickSetter","_makePositionable","r","enabled","prevRefreshing","_swapPinOut","removeChild","soft","invalidate","isVertical","override","curTrigger","curPin","oppositeScroll","otherPinOffset","parsedEnd","parsedEndTrigger","endTrigger","parsedStart","triggerIndex","_pinPush","ceil","_copyState","omitOffsets","splice","_pinOffset","reset","toggleState","action","stateChanged","toggled","clipped","el","classList","enable","add","disable","allowAnimation","register","document","documentElement","body","toArray","clamp","globals","requestAnimationFrame","setTimeout","bodyStyle","border","borderTop","setInterval","checkPrefix","w","h","hidden","config","slice","limitCallbacks","ms","syncInterval","clearInterval","autoRefreshEvents","scrollerProxy","target","unshift","mq","addListener","clearMatchMedia","query","console","warn","version","saveStyles","create","safe","maxScroll","getScrollFunc","getById","getAll","isScrolling","batch","proxyCallback","elements","triggers","interval","batchMax","varsCopy","b","refreshPriority"],"mappings":"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"}
\No newline at end of file