{"version":3,"sources":["webpack:///./node_modules/gsap/ScrollSmoother.js","webpack:///./node_modules/gsap/utils/strings.js","webpack:///./node_modules/gsap/SplitText.js"],"names":["_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","gsap","_coreInitted","_win","_doc","_docEl","_body","_toArray","_clamp","ScrollTrigger","_mainInstance","_expo","_getVelocityProp","_inputObserver","_context","_onResizeDelayedCall","_windowExists","window","_getGSAP","registerPlugin","_maxScroll","scroller","maxScroll","_wrap","el","wrapper","querySelector","createElement","classList","add","parentNode","insertBefore","appendChild","ScrollSmoother","vars","_this","this","register","console","warn","kill","content","height","mainST","effects","sections","intervalID","wrapperCSS","contentCSS","paused","pausedNormalizer","recordedRefreshScroll","recordedRefreshScrub","allowUpdates","isProxyScrolling","lastFocusElement","_vars","smoothTouch","_onUpdate","onUpdate","onStop","smooth","onFocusIn","normalizeScroll","wholePixels","self","effectsPrefix","scrollFunc","getScrollFunc","smoothDuration","isTouch","parseFloat","speed","currentY","delta","startupPhase","tracker","updateVelocity","update","scroll","y","removeScroll","style","overflow","killScrub","trigger","scrub","getTween","pause","_time","_dur","_tTime","_tDur","animation","progress","render","force","Math","round","transform","_gsap","isUpdating","isRefreshing","scrollTop","value","arguments","resizeObserver","ResizeObserver","autoResize","max","restart","_onFocusIn","e","contains","isInViewport","scrollTo","_transformPosition","position","st","start","ratio","isNaN","change","end","distance","offset","pins","pinOffset","progressOffset","_startClamp","_endClamp","forEach","p","nativeStart","adjustEffectRelatedTriggers","triggers","partial","dif","isClamped","nativeEnd","trig","markers","pinnedContainer","_startNative","_endNative","pin","setPositions","markerStart","push","quickSetter","markerEnd","adjustParallaxPosition","createdAfterEffectWasApplied","onRefresh","requestAnimationFrame","getAll","autoSpeed","min","abs","s","sort","reset","addOnRefresh","addEventListener","restoreEffects","revertEffects","onRefreshInit","effectValueGetter","name","index","v","getAttribute","setAttribute","clamp","substr","createEffect","lag","effectsPadding","yOffset","getSpeed","getLag","startY","getProperty","cache","initDynamicValues","to","ease","overwrite","duration","revert","renderTransform","updateChange","auto","extraChange","parent","b1","getBoundingClientRect","b2","gapTop","top","gapBottom","bottom","innerHeight","_autoDistance","create","refreshPriority","onKill","indexOf","splice","scrollY","extraY","isActive","direction","resetTo","utils","setter","core","getCache","stRevert","willChange","refreshHeight","clientHeight","delayedCall","ignoreSpeed","cssText","refresh","uncache","element","newContent","children","observe","set","width","boxSizing","clearProps","left","right","targets","config","_effects","slice","_config","effectsToAdd","apply","_sections","newSections","map","onToggle","opacity","pointerEvents","getVelocity","scrollerProxy","scrollHeight","fixedMarkers","innerWidth","defaults","existingScrollTriggers","filter","fromTo","immediateRender","data","_pins","pinST","init","_end","_dp","invalidate","id","invalidateOnRefresh","onScrubComplete","scrubDuration","scrollTrigger","allowNestedScroll","disable","preventDefault","type","debounce","allowClicks","onChangeY","nested","enable","concat","removeEventListener","normalizer","clearInterval","disconnect","removeProperty","soft","getComputedStyle","overscrollBehavior","scrollBehavior","setInterval","readyState","Constructor","protoProps","staticProps","document","documentElement","body","toArray","parseEase","context","globals","get","prototype","version","emojiExp","getText","nodeType","result","textContent","firstChild","nextSibling","nodeValue","_stripExp","_multipleSpacesExp","_nonBreakingSpace","String","fromCharCode","_initCore","_getComputedStyle","_isAbsolute","absolute","_findSpecialChars","text","chars","_cssClassFunc","cssClass","tag","iterate","num","split","join","_swapText","oldText","newText","_pushReversed","a","merge","_isBeforeWordDelimiter","root","wordDelimiter","next","_next","charAt","_parent","_deWordify","child","childNodes","l","_isSplit","previousSibling","removeChild","_getStyleAsNumber","computedStyle","_setPositionsAfterSplit","allChars","allWords","allLines","origWidth","origHeight","j","node","nodes","isChild","curLine","addWordSpaces","lineNode","lineWidth","cs","paddingLeft","lineOffsetY","borderTopAndBottom","borderLeftAndRight","padTopAndBottom","padLeftAndRight","lineThreshold","textAlign","charArray","wordArray","lineArray","span","types","lines","words","linesClass","iterateLine","spaceNodesToRemove","isFlex","display","prevInlineDisplay","getElementsByTagName","offsetTop","nodeName","_x","offsetLeft","_y","_w","offsetWidth","_h","offsetHeight","_wordEnd","_isFirst","createTextNode","innerHTML","offsetParent","className","clientWidth","_splitRawText","wordStart","charStart","splitText","character","hasTagStart","testResult","isWordDelimiter","_char","space","wordEnd","wordIsOpen","specialChars","container","reduceWhiteSpace","replace","charCodeAt","outerHTML","_split","test","SplitText","elements","_originals","_proto","isSplit","wordsClass","charsClass","html","reverse","originals"],"mappings":"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","file":"82b8482.js","sourcesContent":["function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/*!\n * ScrollSmoother 3.12.5\n * https://gsap.com\n *\n * @license Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar gsap,\n _coreInitted,\n _win,\n _doc,\n _docEl,\n _body,\n _root,\n _toArray,\n _clamp,\n ScrollTrigger,\n _mainInstance,\n _expo,\n _getVelocityProp,\n _inputObserver,\n _context,\n _onResizeDelayedCall,\n _windowExists = function _windowExists() {\n return typeof window !== \"undefined\";\n},\n _getGSAP = function _getGSAP() {\n return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;\n},\n _bonusValidated = 1,\n //ScrollSmoother\n_round = function _round(value) {\n return Math.round(value * 100000) / 100000 || 0;\n},\n _maxScroll = function _maxScroll(scroller) {\n return ScrollTrigger.maxScroll(scroller || _win);\n},\n _autoDistance = function _autoDistance(el, progress) {\n // for calculating the distance (and offset) for elements with speed: \"auto\". Progress is for if it's \"above the fold\" (negative start position), so we can crop as little as possible.\n var parent = el.parentNode || _docEl,\n b1 = el.getBoundingClientRect(),\n b2 = parent.getBoundingClientRect(),\n gapTop = b2.top - b1.top,\n gapBottom = b2.bottom - b1.bottom,\n change = (Math.abs(gapTop) > Math.abs(gapBottom) ? gapTop : gapBottom) / (1 - progress),\n offset = -change * progress,\n ratio,\n extraChange;\n\n if (change > 0) {\n // if the image starts at the BOTTOM of the container, adjust things so that it shows as much of the image as possible while still covering.\n ratio = b2.height / (_win.innerHeight + b2.height);\n extraChange = ratio === 0.5 ? b2.height * 2 : Math.min(b2.height, Math.abs(-change * ratio / (2 * ratio - 1))) * 2 * (progress || 1);\n offset += progress ? -extraChange * progress : -extraChange / 2; // whatever the offset, we must double that in the opposite direction to compensate.\n\n change += extraChange;\n }\n\n return {\n change: change,\n offset: offset\n };\n},\n _wrap = function _wrap(el) {\n var wrapper = _doc.querySelector(\".ScrollSmoother-wrapper\"); // some frameworks load multiple times, so one already exists, just use that to avoid duplicates\n\n\n if (!wrapper) {\n wrapper = _doc.createElement(\"div\");\n wrapper.classList.add(\"ScrollSmoother-wrapper\");\n el.parentNode.insertBefore(wrapper, el);\n wrapper.appendChild(el);\n }\n\n return wrapper;\n};\n\nexport var ScrollSmoother = /*#__PURE__*/function () {\n function ScrollSmoother(vars) {\n var _this = this;\n\n _coreInitted || ScrollSmoother.register(gsap) || console.warn(\"Please gsap.registerPlugin(ScrollSmoother)\");\n vars = this.vars = vars || {};\n _mainInstance && _mainInstance.kill();\n _mainInstance = this;\n\n _context(this);\n\n var _vars = vars,\n smoothTouch = _vars.smoothTouch,\n _onUpdate = _vars.onUpdate,\n onStop = _vars.onStop,\n smooth = _vars.smooth,\n onFocusIn = _vars.onFocusIn,\n normalizeScroll = _vars.normalizeScroll,\n wholePixels = _vars.wholePixels,\n content,\n wrapper,\n height,\n mainST,\n effects,\n sections,\n intervalID,\n wrapperCSS,\n contentCSS,\n paused,\n pausedNormalizer,\n recordedRefreshScroll,\n recordedRefreshScrub,\n allowUpdates,\n self = this,\n effectsPrefix = vars.effectsPrefix || \"\",\n scrollFunc = ScrollTrigger.getScrollFunc(_win),\n smoothDuration = ScrollTrigger.isTouch === 1 ? smoothTouch === true ? 0.8 : parseFloat(smoothTouch) || 0 : smooth === 0 || smooth === false ? 0 : parseFloat(smooth) || 0.8,\n speed = smoothDuration && +vars.speed || 1,\n currentY = 0,\n delta = 0,\n startupPhase = 1,\n tracker = _getVelocityProp(0),\n updateVelocity = function updateVelocity() {\n return tracker.update(-currentY);\n },\n scroll = {\n y: 0\n },\n removeScroll = function removeScroll() {\n return content.style.overflow = \"visible\";\n },\n isProxyScrolling,\n killScrub = function killScrub(trigger) {\n trigger.update(); // it's possible that it hasn't been synchronized with the actual scroll position yet, like if it's later in the _triggers Array. If it was already updated, it'll skip the processing anyway.\n\n var scrub = trigger.getTween();\n\n if (scrub) {\n scrub.pause();\n scrub._time = scrub._dur; // force the playhead to completion without rendering just so that when it resumes, it doesn't jump back in the .resetTo().\n\n scrub._tTime = scrub._tDur;\n }\n\n isProxyScrolling = false;\n trigger.animation.progress(trigger.progress, true);\n },\n render = function render(y, force) {\n if (y !== currentY && !paused || force) {\n wholePixels && (y = Math.round(y));\n\n if (smoothDuration) {\n content.style.transform = \"matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, \" + y + \", 0, 1)\"; //content.style.transform = \"translateY(\" + y + \"px)\"; // NOTE: when we used matrix3d() or set will-change: transform, it performed noticeably worse on iOS counter-intuitively!\n\n content._gsap.y = y + \"px\";\n }\n\n delta = y - currentY;\n currentY = y;\n ScrollTrigger.isUpdating || ScrollSmoother.isRefreshing || ScrollTrigger.update(); // note: if we allowed an update() when in the middle of a refresh() it could render all the other ScrollTriggers and inside the update(), _refreshing would be true thus scrubs would jump instantly, but then on the very next update they'd continue from there. Basically this allowed update() to be called on OTHER ScrollTriggers during the refresh() of the mainST which could cause some complications. See https://gsap.com/forums/topic/35536-smoothscroller-ignoremobileresize-for-non-touch-devices\n }\n },\n scrollTop = function scrollTop(value) {\n if (arguments.length) {\n value < 0 && (value = 0);\n scroll.y = -value; // don't use currentY because we must accurately track the delta variable (in render() method)\n\n isProxyScrolling = true; // otherwise, if snapping was applied (or anything that attempted to SET the scroll proxy's scroll position), we'd set the scroll here which would then (on the next tick) update the content tween/ScrollTrigger which would try to smoothly animate to that new value, thus the scrub tween would impede the progress. So we use this flag to respond accordingly in the ScrollTrigger's onUpdate and effectively force the scrub to its end immediately.\n\n paused ? currentY = -value : render(-value);\n ScrollTrigger.isRefreshing ? mainST.update() : scrollFunc(value / speed); // during a refresh, we revert all scrollers to 0 and then put them back. We shouldn't force the window to that value too during the refresh.\n\n return this;\n }\n\n return -currentY;\n },\n resizeObserver = typeof ResizeObserver !== \"undefined\" && vars.autoResize !== false && new ResizeObserver(function () {\n if (!ScrollTrigger.isRefreshing) {\n var max = _maxScroll(wrapper) * speed;\n max < -currentY && scrollTop(max); // if the user scrolled down to the bottom, for example, and then the page resizes smaller, we should adjust things accordingly right away so that the scroll position isn't past the very end.\n\n _onResizeDelayedCall.restart(true);\n }\n }),\n lastFocusElement,\n _onFocusIn = function _onFocusIn(e) {\n // when the focus changes, make sure that element is on-screen\n wrapper.scrollTop = 0;\n\n if (e.target.contains && e.target.contains(wrapper) || onFocusIn && onFocusIn(_this, e) === false) {\n return;\n }\n\n ScrollTrigger.isInViewport(e.target) || e.target === lastFocusElement || _this.scrollTo(e.target, false, \"center center\");\n lastFocusElement = e.target;\n },\n _transformPosition = function _transformPosition(position, st) {\n // feed in a position (start or end scroll value) and a ScrollTrigger that's associated with a parallax effect and it'll spit back the adjusted position based on the movement of the trigger. For example, if the trigger goes at a speed of 0.5 while in the viewport, we must push the start/end values of OTHER ScrollTriggers that use that same trigger further down to compensate.\n if (position < st.start) {\n return position;\n }\n\n var ratio = isNaN(st.ratio) ? 1 : st.ratio,\n change = st.end - st.start,\n distance = position - st.start,\n offset = st.offset || 0,\n pins = st.pins || [],\n pinOffset = pins.offset || 0,\n progressOffset = st._startClamp && st.start <= 0 || st.pins && st.pins.offset ? 0 : st._endClamp && st.end === _maxScroll() ? 1 : 0.5;\n pins.forEach(function (p) {\n // remove any pinning space/distance\n change -= p.distance;\n\n if (p.nativeStart <= position) {\n distance -= p.distance;\n }\n });\n\n if (pinOffset) {\n // edge case when a clamped effect starts mid-pin; we've gotta compensate for the smaller change amount (the yOffset gets set to the st.pins.offset, so let's say it clamps such that the page starts with the element pinned 100px in, we have to set the yOffset to 100 but then subtract 100 from the change value to compensate, thus we must scale the positions accordingly based on the ratios. Like if it would normally have a change of 2000, and a pin would normally hit at 1000, but we're offsetting by 100, that means everything must scale now that we're only moving 1900px rather than 2000px.\n distance *= (change - pinOffset / ratio) / change;\n }\n\n return position + (distance - offset * progressOffset) / ratio - distance;\n },\n adjustEffectRelatedTriggers = function adjustEffectRelatedTriggers(st, triggers, partial) {\n // if we're using this method to do only a partial Array of triggers, we should NOT reset or rebuild the pin data. For example, we tap into this from the offset() method.\n partial || (st.pins.length = st.pins.offset = 0);\n var pins = st.pins,\n markers = st.markers,\n dif,\n isClamped,\n start,\n end,\n nativeStart,\n nativeEnd,\n i,\n trig;\n\n for (i = 0; i < triggers.length; i++) {\n trig = triggers[i];\n\n if (st.trigger && trig.trigger && st !== trig && (trig.trigger === st.trigger || trig.pinnedContainer === st.trigger || st.trigger.contains(trig.trigger))) {\n nativeStart = trig._startNative || trig._startClamp || trig.start;\n nativeEnd = trig._endNative || trig._endClamp || trig.end;\n start = _transformPosition(nativeStart, st); // note: _startClamp and _endClamp are populated with the unclamped values. For the sake of efficiency sake, we use the property both like a boolean to indicate that clamping is enabled AND the actual original unclamped value which we need in situations like if there's a data-speed=\"\" on an element that has something like start=\"clamp(top bottom)\". For in-viewport elements, it would clamp the values on the ScrollTrigger first, then feed it here and we'd adjust it on the clamped value which could throw things off - we need to apply the logic to the unclamped value and THEN re-apply clamping on the result.\n\n end = trig.pin && nativeEnd > 0 ? start + (nativeEnd - nativeStart) : _transformPosition(nativeEnd, st);\n trig.setPositions(start, end, true, (trig._startClamp ? Math.max(0, start) : start) - nativeStart); // the last value (pinOffset) is to adjust the pinStart y value inside ScrollTrigger to accommodate for the y offset that gets applied by the parallax effect.\n\n trig.markerStart && markers.push(gsap.quickSetter([trig.markerStart, trig.markerEnd], \"y\", \"px\"));\n\n if (trig.pin && trig.end > 0 && !partial) {\n dif = trig.end - trig.start;\n isClamped = st._startClamp && trig.start < 0;\n\n if (isClamped) {\n if (st.start > 0) {\n // the trigger element on the effect must have been pinned BEFORE its starting position, so in this edge case we must adjust the start position to be 0 and end position to get pushed further by the amount of the overlap\n st.setPositions(0, st.end + (st._startNative - st.start), true); // add the overlap amount\n\n adjustEffectRelatedTriggers(st, triggers);\n return; // start over for this trigger element!\n }\n\n dif += trig.start;\n pins.offset = -trig.start; // edge case when a clamped effect starts mid-pin, we've gotta compensate in the onUpdate algorithm.\n }\n\n pins.push({\n start: trig.start,\n nativeStart: nativeStart,\n end: trig.end,\n distance: dif,\n trig: trig\n });\n st.setPositions(st.start, st.end + (isClamped ? -trig.start : dif), true);\n }\n }\n }\n },\n adjustParallaxPosition = function adjustParallaxPosition(triggers, createdAfterEffectWasApplied) {\n effects.forEach(function (st) {\n return adjustEffectRelatedTriggers(st, triggers, createdAfterEffectWasApplied);\n });\n },\n onRefresh = function onRefresh() {\n removeScroll();\n requestAnimationFrame(removeScroll);\n\n if (effects) {\n // adjust all the effect start/end positions including any pins!\n ScrollTrigger.getAll().forEach(function (st) {\n // record the native start/end positions because we'll be messing with them and need a way to have a \"source of truth\"\n st._startNative = st.start;\n st._endNative = st.end;\n });\n effects.forEach(function (st) {\n var start = st._startClamp || st.start,\n // if it was already clamped, we should base things on the unclamped value and then do the clamping here.\n end = st.autoSpeed ? Math.min(_maxScroll(), st.end) : start + Math.abs((st.end - start) / st.ratio),\n offset = end - st.end; // we split the difference so that it reaches its natural position in the MIDDLE of the viewport\n\n start -= offset / 2;\n end -= offset / 2;\n\n if (start > end) {\n var s = start;\n start = end;\n end = s;\n }\n\n if (st._startClamp && start < 0) {\n end = st.ratio < 0 ? _maxScroll() : st.end / st.ratio;\n offset = end - st.end;\n start = 0;\n } else if (st.ratio < 0 || st._endClamp && end >= _maxScroll()) {\n end = _maxScroll();\n start = st.ratio < 0 ? 0 : st.ratio > 1 ? 0 : end - (end - st.start) / st.ratio;\n offset = (end - start) * st.ratio - (st.end - st.start);\n }\n\n st.offset = offset || 0.0001; // we assign at least a tiny value because we check in the onUpdate for .offset being set in order to apply values.\n\n st.pins.length = st.pins.offset = 0;\n st.setPositions(start, end, true); // note: another way of getting only the amount of offset traveled for a certain ratio is: distanceBetweenStartAndEnd * (1 / ratio - 1)\n });\n adjustParallaxPosition(ScrollTrigger.sort());\n }\n\n tracker.reset();\n },\n addOnRefresh = function addOnRefresh() {\n return ScrollTrigger.addEventListener(\"refresh\", onRefresh);\n },\n restoreEffects = function restoreEffects() {\n return effects && effects.forEach(function (st) {\n return st.vars.onRefresh(st);\n });\n },\n revertEffects = function revertEffects() {\n effects && effects.forEach(function (st) {\n return st.vars.onRefreshInit(st);\n });\n return restoreEffects;\n },\n effectValueGetter = function effectValueGetter(name, value, index, el) {\n return function () {\n var v = typeof value === \"function\" ? value(index, el) : value;\n v || v === 0 || (v = el.getAttribute(\"data-\" + effectsPrefix + name) || (name === \"speed\" ? 1 : 0));\n el.setAttribute(\"data-\" + effectsPrefix + name, v);\n var clamp = (v + \"\").substr(0, 6) === \"clamp(\";\n return {\n clamp: clamp,\n value: clamp ? v.substr(6, v.length - 7) : v\n };\n };\n },\n createEffect = function createEffect(el, speed, lag, index, effectsPadding) {\n effectsPadding = (typeof effectsPadding === \"function\" ? effectsPadding(index, el) : effectsPadding) || 0;\n\n var getSpeed = effectValueGetter(\"speed\", speed, index, el),\n getLag = effectValueGetter(\"lag\", lag, index, el),\n startY = gsap.getProperty(el, \"y\"),\n cache = el._gsap,\n ratio,\n st,\n autoSpeed,\n scrub,\n progressOffset,\n yOffset,\n pins = [],\n initDynamicValues = function initDynamicValues() {\n speed = getSpeed();\n lag = parseFloat(getLag().value);\n ratio = parseFloat(speed.value) || 1;\n autoSpeed = speed.value === \"auto\";\n progressOffset = autoSpeed || st && st._startClamp && st.start <= 0 || pins.offset ? 0 : st && st._endClamp && st.end === _maxScroll() ? 1 : 0.5;\n scrub && scrub.kill();\n scrub = lag && gsap.to(el, {\n ease: _expo,\n overwrite: false,\n y: \"+=0\",\n duration: lag\n });\n\n if (st) {\n st.ratio = ratio;\n st.autoSpeed = autoSpeed;\n }\n },\n revert = function revert() {\n cache.y = startY + \"px\";\n cache.renderTransform(1);\n initDynamicValues();\n },\n markers = [],\n change = 0,\n updateChange = function updateChange(self) {\n if (autoSpeed) {\n revert();\n\n var auto = _autoDistance(el, _clamp(0, 1, -self.start / (self.end - self.start)));\n\n change = auto.change;\n yOffset = auto.offset;\n } else {\n yOffset = pins.offset || 0;\n change = (self.end - self.start - yOffset) * (1 - ratio);\n }\n\n pins.forEach(function (p) {\n return change -= p.distance * (1 - ratio);\n });\n self.offset = change || 0.001;\n self.vars.onUpdate(self);\n scrub && scrub.progress(1);\n };\n\n initDynamicValues();\n\n if (ratio !== 1 || autoSpeed || scrub) {\n st = ScrollTrigger.create({\n trigger: autoSpeed ? el.parentNode : el,\n start: function start() {\n return speed.clamp ? \"clamp(top bottom+=\" + effectsPadding + \")\" : \"top bottom+=\" + effectsPadding;\n },\n end: function end() {\n return speed.value < 0 ? \"max\" : speed.clamp ? \"clamp(bottom top-=\" + effectsPadding + \")\" : \"bottom top-=\" + effectsPadding;\n },\n scroller: wrapper,\n scrub: true,\n refreshPriority: -999,\n // must update AFTER any other ScrollTrigger pins\n onRefreshInit: revert,\n onRefresh: updateChange,\n onKill: function onKill(self) {\n var i = effects.indexOf(self);\n i >= 0 && effects.splice(i, 1);\n revert();\n },\n onUpdate: function onUpdate(self) {\n var y = startY + change * (self.progress - progressOffset),\n i = pins.length,\n extraY = 0,\n pin,\n scrollY,\n end;\n\n if (self.offset) {\n // wait until the effects are adjusted.\n if (i) {\n // pinning must be handled in a special way because when pinned, slope changes to 1.\n scrollY = -currentY; // -scroll.y;\n\n end = self.end;\n\n while (i--) {\n pin = pins[i];\n\n if (pin.trig.isActive || scrollY >= pin.start && scrollY <= pin.end) {\n // currently pinned so no need to set anything\n if (scrub) {\n pin.trig.progress += pin.trig.direction < 0 ? 0.001 : -0.001; // just to make absolutely sure that it renders (if the progress didn't change, it'll skip)\n\n pin.trig.update(0, 0, 1);\n scrub.resetTo(\"y\", parseFloat(cache.y), -delta, true);\n startupPhase && scrub.progress(1);\n }\n\n return;\n }\n\n scrollY > pin.end && (extraY += pin.distance);\n end -= pin.distance;\n }\n\n y = startY + extraY + change * ((gsap.utils.clamp(self.start, self.end, scrollY) - self.start - extraY) / (end - self.start) - progressOffset);\n }\n\n markers.length && !autoSpeed && markers.forEach(function (setter) {\n return setter(y - extraY);\n });\n y = _round(y + yOffset);\n\n if (scrub) {\n scrub.resetTo(\"y\", y, -delta, true);\n startupPhase && scrub.progress(1);\n } else {\n cache.y = y + \"px\";\n cache.renderTransform(1);\n }\n }\n }\n });\n updateChange(st);\n gsap.core.getCache(st.trigger).stRevert = revertEffects; // if user calls ScrollSmoother.create() with effects and THEN creates a ScrollTrigger on the same trigger element, the effect would throw off the start/end positions thus we needed a way to revert things when creating a new ScrollTrigger in that scenario, so we use this stRevert property of the GSCache inside ScrollTrigger.\n\n st.startY = startY;\n st.pins = pins;\n st.markers = markers;\n st.ratio = ratio;\n st.autoSpeed = autoSpeed;\n el.style.willChange = \"transform\";\n }\n\n return st;\n };\n\n addOnRefresh();\n ScrollTrigger.addEventListener(\"killAll\", addOnRefresh);\n gsap.delayedCall(0.5, function () {\n return startupPhase = 0;\n });\n this.scrollTop = scrollTop;\n\n this.scrollTo = function (target, smooth, position) {\n var p = gsap.utils.clamp(0, _maxScroll(), isNaN(target) ? _this.offset(target, position, !!smooth && !paused) : +target);\n !smooth ? scrollTop(p) : paused ? gsap.to(_this, {\n duration: smoothDuration,\n scrollTop: p,\n overwrite: \"auto\",\n ease: _expo\n }) : scrollFunc(p);\n };\n\n this.offset = function (target, position, ignoreSpeed) {\n target = _toArray(target)[0];\n var cssText = target.style.cssText,\n // because if there's an effect applied, we revert(). We need to restore.\n st = ScrollTrigger.create({\n trigger: target,\n start: position || \"top top\"\n }),\n y;\n\n if (effects) {\n startupPhase ? ScrollTrigger.refresh() : adjustParallaxPosition([st], true); // all the effects need to go through the initial full refresh() so that all the pins and ratios and offsets are set up. That's why we do a full refresh() if it's during the startupPhase.\n }\n\n y = st.start / (ignoreSpeed ? speed : 1);\n st.kill(false);\n target.style.cssText = cssText;\n gsap.core.getCache(target).uncache = 1;\n return y;\n };\n\n function refreshHeight() {\n height = content.clientHeight;\n content.style.overflow = \"visible\";\n _body.style.height = _win.innerHeight + (height - _win.innerHeight) / speed + \"px\";\n return height - _win.innerHeight;\n }\n\n this.content = function (element) {\n if (arguments.length) {\n var newContent = _toArray(element || \"#smooth-content\")[0] || console.warn(\"ScrollSmoother needs a valid content element.\") || _body.children[0];\n\n if (newContent !== content) {\n content = newContent;\n contentCSS = content.getAttribute(\"style\") || \"\";\n resizeObserver && resizeObserver.observe(content);\n gsap.set(content, {\n overflow: \"visible\",\n width: \"100%\",\n boxSizing: \"border-box\",\n y: \"+=0\"\n });\n smoothDuration || gsap.set(content, {\n clearProps: \"transform\"\n });\n }\n\n return this;\n }\n\n return content;\n };\n\n this.wrapper = function (element) {\n if (arguments.length) {\n wrapper = _toArray(element || \"#smooth-wrapper\")[0] || _wrap(content);\n wrapperCSS = wrapper.getAttribute(\"style\") || \"\";\n refreshHeight();\n gsap.set(wrapper, smoothDuration ? {\n overflow: \"hidden\",\n position: \"fixed\",\n height: \"100%\",\n width: \"100%\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n } : {\n overflow: \"visible\",\n position: \"relative\",\n width: \"100%\",\n height: \"auto\",\n top: \"auto\",\n bottom: \"auto\",\n left: \"auto\",\n right: \"auto\"\n });\n return this;\n }\n\n return wrapper;\n };\n\n this.effects = function (targets, config) {\n var _effects;\n\n effects || (effects = []);\n\n if (!targets) {\n return effects.slice(0);\n }\n\n targets = _toArray(targets);\n targets.forEach(function (target) {\n var i = effects.length;\n\n while (i--) {\n effects[i].trigger === target && effects[i].kill(); // will automatically splice() it from the effects Array in the onKill\n }\n });\n config = config || {};\n var _config = config,\n speed = _config.speed,\n lag = _config.lag,\n effectsPadding = _config.effectsPadding,\n effectsToAdd = [],\n i,\n st;\n\n for (i = 0; i < targets.length; i++) {\n st = createEffect(targets[i], speed, lag, i, effectsPadding);\n st && effectsToAdd.push(st);\n }\n\n (_effects = effects).push.apply(_effects, effectsToAdd);\n\n config.refresh !== false && ScrollTrigger.refresh(); // certain effects require a refresh to work properly\n\n return effectsToAdd;\n };\n\n this.sections = function (targets, config) {\n var _sections;\n\n sections || (sections = []);\n\n if (!targets) {\n return sections.slice(0);\n }\n\n var newSections = _toArray(targets).map(function (el) {\n return ScrollTrigger.create({\n trigger: el,\n start: \"top 120%\",\n end: \"bottom -20%\",\n onToggle: function onToggle(self) {\n el.style.opacity = self.isActive ? \"1\" : \"0\";\n el.style.pointerEvents = self.isActive ? \"all\" : \"none\";\n }\n });\n });\n\n config && config.add ? (_sections = sections).push.apply(_sections, newSections) : sections = newSections.slice(0);\n return newSections;\n };\n\n this.content(vars.content);\n this.wrapper(vars.wrapper);\n\n this.render = function (y) {\n return render(y || y === 0 ? y : currentY);\n };\n\n this.getVelocity = function () {\n return tracker.getVelocity(-currentY);\n };\n\n ScrollTrigger.scrollerProxy(wrapper, {\n scrollTop: scrollTop,\n scrollHeight: function scrollHeight() {\n return refreshHeight() && _body.scrollHeight;\n },\n fixedMarkers: vars.fixedMarkers !== false && !!smoothDuration,\n content: content,\n getBoundingClientRect: function getBoundingClientRect() {\n return {\n top: 0,\n left: 0,\n width: _win.innerWidth,\n height: _win.innerHeight\n };\n }\n });\n ScrollTrigger.defaults({\n scroller: wrapper\n });\n var existingScrollTriggers = ScrollTrigger.getAll().filter(function (st) {\n return st.scroller === _win || st.scroller === wrapper;\n });\n existingScrollTriggers.forEach(function (st) {\n return st.revert(true, true);\n }); // in case it's in an environment like React where child components that have ScrollTriggers instantiate BEFORE the parent that does ScrollSmoother.create(...);\n\n mainST = ScrollTrigger.create({\n animation: gsap.fromTo(scroll, {\n y: function y() {\n allowUpdates = 0;\n return 0;\n }\n }, {\n y: function y() {\n allowUpdates = 1;\n return -refreshHeight();\n },\n immediateRender: false,\n ease: \"none\",\n data: \"ScrollSmoother\",\n duration: 100,\n // for added precision\n onUpdate: function onUpdate() {\n if (allowUpdates) {\n // skip when it's the \"from\" part of the tween (setting the startAt)\n var force = isProxyScrolling;\n\n if (force) {\n killScrub(mainST);\n scroll.y = currentY;\n }\n\n render(scroll.y, force);\n updateVelocity();\n _onUpdate && !paused && _onUpdate(self);\n }\n }\n }),\n onRefreshInit: function onRefreshInit(self) {\n if (ScrollSmoother.isRefreshing) {\n // gets called on the onRefresh() when we do self.setPositions(...) in which case we should skip this\n return;\n }\n\n ScrollSmoother.isRefreshing = true;\n\n if (effects) {\n var _pins = ScrollTrigger.getAll().filter(function (st) {\n return !!st.pin;\n });\n\n effects.forEach(function (st) {\n if (!st.vars.pinnedContainer) {\n _pins.forEach(function (pinST) {\n if (pinST.pin.contains(st.trigger)) {\n var v = st.vars;\n v.pinnedContainer = pinST.pin;\n st.vars = null; // otherwise, it'll self.kill(), triggering the onKill()\n\n st.init(v, st.animation);\n }\n });\n }\n });\n }\n\n var scrub = self.getTween();\n recordedRefreshScrub = scrub && scrub._end > scrub._dp._time; // don't use scrub.progress() < 1 because we may have called killScrub() recently in which case it'll report progress() as 1 when we were actually in the middle of a scrub. That's why we tap into the _end instead.\n\n recordedRefreshScroll = currentY;\n scroll.y = 0;\n\n if (smoothDuration) {\n ScrollTrigger.isTouch === 1 && (wrapper.style.position = \"absolute\"); // Safari 16 has a major bug - if you set wrapper.scrollTop to 0 (even if it's already 0), it blocks the whole page from scrolling page non-scrollable! See https://bugs.webkit.org/show_bug.cgi?id=245300 and https://codepen.io/GreenSock/pen/YzLZVOz. Originally we set pointer-events: none on the wrapper temporarily, and set it back to all after setting scrollTop to 0, but that could cause mouseenter/mouseleave/etc. events to fire too, so we opted to set the position to absolute and then back to fixed after setting scrollTop.\n\n wrapper.scrollTop = 0; // set wrapper.scrollTop to 0 because in some very rare situations, the browser will auto-set that, like if there's a hash in the link or changing focus to an off-screen input\n\n ScrollTrigger.isTouch === 1 && (wrapper.style.position = \"fixed\");\n }\n },\n onRefresh: function onRefresh(self) {\n self.animation.invalidate(); // because pinnedContainers may have been found in ScrollTrigger's _refreshAll() that extend the height. Without this, it may prevent the user from being able to scroll all the way down.\n\n self.setPositions(self.start, refreshHeight() / speed);\n recordedRefreshScrub || killScrub(self);\n scroll.y = -scrollFunc() * speed; // in 3.11.1, we shifted to forcing the scroll position to 0 during the entire refreshAll() in ScrollTrigger and then restored the scroll position AFTER everything had been updated, thus we should always make these adjustments AFTER a full refresh rather than putting it in the onRefresh() of the individual mainST ScrollTrigger which would fire before the scroll position was restored.\n\n render(scroll.y);\n\n if (!startupPhase) {\n recordedRefreshScrub && (isProxyScrolling = false); // otherwise, we lose any in-progress scrub. When we set the progress(), it fires the onUpdate() which sets the scroll position immediately (jumps ahead if isProxyScrolling is true). See https://gsap.com/community/forums/topic/37515-dynamic-scrolltrigger-with-pin-inside-a-scrollsmoother/\n\n self.animation.progress(gsap.utils.clamp(0, 1, recordedRefreshScroll / speed / -self.end));\n }\n\n if (recordedRefreshScrub) {\n // we need to trigger the scrub to happen again\n self.progress -= 0.001;\n self.update();\n }\n\n ScrollSmoother.isRefreshing = false;\n },\n id: \"ScrollSmoother\",\n scroller: _win,\n invalidateOnRefresh: true,\n start: 0,\n refreshPriority: -9999,\n // because all other pins, etc. should be calculated first before this figures out the height of the body. BUT this should also update FIRST so that the scroll position on the proxy is up-to-date when all the ScrollTriggers calculate their progress! -9999 is a special number that ScrollTrigger looks for to handle in this way.\n end: function end() {\n return refreshHeight() / speed;\n },\n onScrubComplete: function onScrubComplete() {\n tracker.reset();\n onStop && onStop(_this);\n },\n scrub: smoothDuration || true\n });\n\n this.smooth = function (value) {\n if (arguments.length) {\n smoothDuration = value || 0;\n speed = smoothDuration && +vars.speed || 1;\n mainST.scrubDuration(value);\n }\n\n return mainST.getTween() ? mainST.getTween().duration() : 0;\n };\n\n mainST.getTween() && (mainST.getTween().vars.ease = vars.ease || _expo);\n this.scrollTrigger = mainST;\n vars.effects && this.effects(vars.effects === true ? \"[data-\" + effectsPrefix + \"speed], [data-\" + effectsPrefix + \"lag]\" : vars.effects, {\n effectsPadding: vars.effectsPadding,\n refresh: false\n });\n vars.sections && this.sections(vars.sections === true ? \"[data-section]\" : vars.sections);\n existingScrollTriggers.forEach(function (st) {\n st.vars.scroller = wrapper;\n st.revert(false, true);\n st.init(st.vars, st.animation);\n });\n\n this.paused = function (value, allowNestedScroll) {\n if (arguments.length) {\n if (!!paused !== value) {\n if (value) {\n // pause\n mainST.getTween() && mainST.getTween().pause();\n scrollFunc(-currentY / speed);\n tracker.reset();\n pausedNormalizer = ScrollTrigger.normalizeScroll();\n pausedNormalizer && pausedNormalizer.disable(); // otherwise the normalizer would try to scroll the page on things like wheel events.\n\n paused = ScrollTrigger.observe({\n preventDefault: true,\n type: \"wheel,touch,scroll\",\n debounce: false,\n allowClicks: true,\n onChangeY: function onChangeY() {\n return scrollTop(-currentY);\n } // refuse to scroll\n\n });\n paused.nested = _inputObserver(_docEl, \"wheel,touch,scroll\", true, allowNestedScroll !== false); // allow nested scrolling, like modals\n } else {\n // resume\n paused.nested.kill();\n paused.kill();\n paused = 0;\n pausedNormalizer && pausedNormalizer.enable();\n mainST.progress = (-currentY / speed - mainST.start) / (mainST.end - mainST.start);\n killScrub(mainST);\n }\n }\n\n return this;\n }\n\n return !!paused;\n };\n\n this.kill = this.revert = function () {\n _this.paused(false);\n\n killScrub(mainST);\n mainST.kill();\n var triggers = (effects || []).concat(sections || []),\n i = triggers.length;\n\n while (i--) {\n // make sure we go backwards because the onKill() will effects.splice(index, 1) and we don't want to skip\n triggers[i].kill();\n }\n\n ScrollTrigger.scrollerProxy(wrapper);\n ScrollTrigger.removeEventListener(\"killAll\", addOnRefresh);\n ScrollTrigger.removeEventListener(\"refresh\", onRefresh);\n wrapper.style.cssText = wrapperCSS;\n content.style.cssText = contentCSS;\n var defaults = ScrollTrigger.defaults({});\n defaults && defaults.scroller === wrapper && ScrollTrigger.defaults({\n scroller: _win\n });\n _this.normalizer && ScrollTrigger.normalizeScroll(false);\n clearInterval(intervalID);\n _mainInstance = null;\n resizeObserver && resizeObserver.disconnect();\n\n _body.style.removeProperty(\"height\");\n\n _win.removeEventListener(\"focusin\", _onFocusIn);\n };\n\n this.refresh = function (soft, force) {\n return mainST.refresh(soft, force);\n };\n\n if (normalizeScroll) {\n this.normalizer = ScrollTrigger.normalizeScroll(normalizeScroll === true ? {\n debounce: true,\n content: !smoothDuration && content\n } : normalizeScroll);\n }\n\n ScrollTrigger.config(vars); // in case user passes in ignoreMobileResize for example\n\n \"overscrollBehavior\" in _win.getComputedStyle(_body) && gsap.set([_body, _docEl], {\n overscrollBehavior: \"none\"\n });\n \"scrollBehavior\" in _win.getComputedStyle(_body) && gsap.set([_body, _docEl], {\n scrollBehavior: \"auto\"\n }); // if the user hits the tab key (or whatever) to shift focus to an element that's off-screen, center that element.\n\n _win.addEventListener(\"focusin\", _onFocusIn);\n\n intervalID = setInterval(updateVelocity, 250);\n _doc.readyState === \"loading\" || requestAnimationFrame(function () {\n return ScrollTrigger.refresh();\n });\n }\n\n ScrollSmoother.register = function register(core) {\n if (!_coreInitted) {\n gsap = core || _getGSAP();\n\n if (_windowExists() && window.document) {\n _win = window;\n _doc = document;\n _docEl = _doc.documentElement;\n _body = _doc.body;\n }\n\n if (gsap) {\n _toArray = gsap.utils.toArray;\n _clamp = gsap.utils.clamp;\n _expo = gsap.parseEase(\"expo\");\n\n _context = gsap.core.context || function () {};\n\n ScrollTrigger = gsap.core.globals().ScrollTrigger;\n gsap.core.globals(\"ScrollSmoother\", ScrollSmoother); // must register the global manually because in Internet Explorer, functions (classes) don't have a \"name\" property.\n\n if (_body && ScrollTrigger) {\n _onResizeDelayedCall = gsap.delayedCall(0.2, function () {\n return ScrollTrigger.isRefreshing || _mainInstance && _mainInstance.refresh();\n }).pause();\n _root = [_win, _doc, _docEl, _body];\n _getVelocityProp = ScrollTrigger.core._getVelocityProp;\n _inputObserver = ScrollTrigger.core._inputObserver;\n ScrollSmoother.refresh = ScrollTrigger.refresh;\n _coreInitted = 1;\n }\n }\n }\n\n return _coreInitted;\n };\n\n _createClass(ScrollSmoother, [{\n key: \"progress\",\n get: function get() {\n return this.scrollTrigger ? this.scrollTrigger.animation._time / 100 : 0;\n }\n }]);\n\n return ScrollSmoother;\n}();\nScrollSmoother.version = \"3.12.5\";\n\nScrollSmoother.create = function (vars) {\n return _mainInstance && vars && _mainInstance.content() === _toArray(vars.content)[0] ? _mainInstance : new ScrollSmoother(vars);\n};\n\nScrollSmoother.get = function () {\n return _mainInstance;\n};\n\n_getGSAP() && gsap.registerPlugin(ScrollSmoother);\nexport { ScrollSmoother as default };","/*!\n * strings: 3.12.5\n * https://gsap.com\n *\n * Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar _trimExp = /(?:^\\s+|\\s+$)/g;\nexport var emojiExp = /([\\uD800-\\uDBFF][\\uDC00-\\uDFFF](?:[\\u200D\\uFE0F][\\uD800-\\uDBFF][\\uDC00-\\uDFFF]){2,}|\\uD83D\\uDC69(?:\\u200D(?:(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC67|(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC66)|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]\\uFE0F|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC6F\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDD6-\\uDDDF])\\u200D[\\u2640\\u2642]\\uFE0F|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642])\\uFE0F|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]|\\uD83D\\uDC69\\u200D[\\u2695\\u2696\\u2708]|\\uD83D\\uDC68(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708]))\\uFE0F|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83D\\uDC69\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]))|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDD1-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\u200D(?:(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC67|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC66)|\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC69\\uDC6E\\uDC70-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3D\\uDD3E\\uDDD1-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])?|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDEEB\\uDEEC\\uDEF4-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])\\uFE0F)/;\nexport function getText(e) {\n var type = e.nodeType,\n result = \"\";\n\n if (type === 1 || type === 9 || type === 11) {\n if (typeof e.textContent === \"string\") {\n return e.textContent;\n } else {\n for (e = e.firstChild; e; e = e.nextSibling) {\n result += getText(e);\n }\n }\n } else if (type === 3 || type === 4) {\n return e.nodeValue;\n }\n\n return result;\n}\nexport function splitInnerHTML(element, delimiter, trim, preserveSpaces) {\n var node = element.firstChild,\n result = [],\n s;\n\n while (node) {\n if (node.nodeType === 3) {\n s = (node.nodeValue + \"\").replace(/^\\n+/g, \"\");\n\n if (!preserveSpaces) {\n s = s.replace(/\\s+/g, \" \");\n }\n\n result.push.apply(result, emojiSafeSplit(s, delimiter, trim, preserveSpaces));\n } else if ((node.nodeName + \"\").toLowerCase() === \"br\") {\n result[result.length - 1] += \"
\";\n } else {\n result.push(node.outerHTML);\n }\n\n node = node.nextSibling;\n }\n\n s = result.length;\n\n while (s--) {\n result[s] === \"&\" && result.splice(s, 1, \"&\");\n }\n\n return result;\n}\n/*\n//smaller kb version that only handles the simpler emoji's, which is often perfectly adequate.\n\nlet _emoji = \"[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2694-\\u2697]|\\uD83E[\\uDD10-\\uDD5D]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\",\n\t_emojiExp = new RegExp(_emoji),\n\t_emojiAndCharsExp = new RegExp(_emoji + \"|.\", \"g\"),\n\t_emojiSafeSplit = (text, delimiter, trim) => {\n\t\tif (trim) {\n\t\t\ttext = text.replace(_trimExp, \"\");\n\t\t}\n\t\treturn ((delimiter === \"\" || !delimiter) && _emojiExp.test(text)) ? text.match(_emojiAndCharsExp) : text.split(delimiter || \"\");\n\t};\n */\n\nexport function emojiSafeSplit(text, delimiter, trim, preserveSpaces) {\n text += \"\"; // make sure it's cast as a string. Someone may pass in a number.\n\n trim && (text = text.trim ? text.trim() : text.replace(_trimExp, \"\")); // IE9 and earlier compatibility\n\n if (delimiter && delimiter !== \"\") {\n return text.replace(/>/g, \">\").replace(/= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {\n //special emoji characters use 2 or 4 unicode characters that we must keep together.\n j = ((text.substr(i, 12).split(emojiExp) || [])[1] || \"\").length || 2;\n character = text.substr(i, j);\n result.emoji = 1;\n i += j - 1;\n }\n\n result.push(character === \">\" ? \">\" : character === \"<\" ? \"<\" : preserveSpaces && character === \" \" && (text.charAt(i - 1) === \" \" || text.charAt(i + 1) === \" \") ? \" \" : character);\n }\n\n return result;\n}","/*!\n * SplitText: 3.12.5\n * https://gsap.com\n *\n * @license Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nimport { emojiExp, getText } from \"./utils/strings.js\";\n\nvar _doc,\n _win,\n _coreInitted,\n gsap,\n _context,\n _toArray,\n _stripExp = /(?:\\r|\\n|\\t\\t)/g,\n //find carriage returns, new line feeds and double-tabs.\n_multipleSpacesExp = /(?:\\s\\s+)/g,\n _nonBreakingSpace = String.fromCharCode(160),\n _initCore = function _initCore(core) {\n _doc = document;\n _win = window;\n gsap = gsap || core || _win.gsap || console.warn(\"Please gsap.registerPlugin(SplitText)\");\n\n if (gsap) {\n _toArray = gsap.utils.toArray;\n\n _context = gsap.core.context || function () {};\n\n _coreInitted = 1;\n }\n},\n _bonusValidated = 1,\n //SplitText\n_getComputedStyle = function _getComputedStyle(element) {\n return _win.getComputedStyle(element);\n},\n _isAbsolute = function _isAbsolute(vars) {\n return vars.position === \"absolute\" || vars.absolute === true;\n},\n //some characters are combining marks (think diacritics/accents in European languages) which involve 2 or 4 characters that combine in the browser to form a single character. Pass in the remaining text and an array of the special characters to search for and if the text starts with one of those special characters, it'll spit back the number of characters to retain (often 2 or 4). Used in the specialChars features that was introduced in 0.6.0.\n_findSpecialChars = function _findSpecialChars(text, chars) {\n var i = chars.length,\n s;\n\n while (--i > -1) {\n s = chars[i];\n\n if (text.substr(0, s.length) === s) {\n return s.length;\n }\n }\n},\n _divStart = \" style='position:relative;display:inline-block;'\",\n _cssClassFunc = function _cssClassFunc(cssClass, tag) {\n if (cssClass === void 0) {\n cssClass = \"\";\n }\n\n var iterate = ~cssClass.indexOf(\"++\"),\n num = 1;\n\n if (iterate) {\n cssClass = cssClass.split(\"++\").join(\"\");\n }\n\n return function () {\n return \"<\" + tag + _divStart + (cssClass ? \" class='\" + cssClass + (iterate ? num++ : \"\") + \"'>\" : \">\");\n };\n},\n _swapText = function _swapText(element, oldText, newText) {\n var type = element.nodeType;\n\n if (type === 1 || type === 9 || type === 11) {\n for (element = element.firstChild; element; element = element.nextSibling) {\n _swapText(element, oldText, newText);\n }\n } else if (type === 3 || type === 4) {\n element.nodeValue = element.nodeValue.split(oldText).join(newText);\n }\n},\n _pushReversed = function _pushReversed(a, merge) {\n var i = merge.length;\n\n while (--i > -1) {\n a.push(merge[i]);\n }\n},\n _isBeforeWordDelimiter = function _isBeforeWordDelimiter(e, root, wordDelimiter) {\n var next;\n\n while (e && e !== root) {\n next = e._next || e.nextSibling;\n\n if (next) {\n return next.textContent.charAt(0) === wordDelimiter;\n }\n\n e = e.parentNode || e._parent;\n }\n},\n _deWordify = function _deWordify(e) {\n var children = _toArray(e.childNodes),\n l = children.length,\n i,\n child;\n\n for (i = 0; i < l; i++) {\n child = children[i];\n\n if (child._isSplit) {\n _deWordify(child);\n } else {\n if (i && child.previousSibling && child.previousSibling.nodeType === 3) {\n child.previousSibling.nodeValue += child.nodeType === 3 ? child.nodeValue : child.firstChild.nodeValue;\n e.removeChild(child);\n } else if (child.nodeType !== 3) {\n e.insertBefore(child.firstChild, child);\n e.removeChild(child);\n }\n }\n }\n},\n _getStyleAsNumber = function _getStyleAsNumber(name, computedStyle) {\n return parseFloat(computedStyle[name]) || 0;\n},\n _setPositionsAfterSplit = function _setPositionsAfterSplit(element, vars, allChars, allWords, allLines, origWidth, origHeight) {\n var cs = _getComputedStyle(element),\n paddingLeft = _getStyleAsNumber(\"paddingLeft\", cs),\n lineOffsetY = -999,\n borderTopAndBottom = _getStyleAsNumber(\"borderBottomWidth\", cs) + _getStyleAsNumber(\"borderTopWidth\", cs),\n borderLeftAndRight = _getStyleAsNumber(\"borderLeftWidth\", cs) + _getStyleAsNumber(\"borderRightWidth\", cs),\n padTopAndBottom = _getStyleAsNumber(\"paddingTop\", cs) + _getStyleAsNumber(\"paddingBottom\", cs),\n padLeftAndRight = _getStyleAsNumber(\"paddingLeft\", cs) + _getStyleAsNumber(\"paddingRight\", cs),\n lineThreshold = _getStyleAsNumber(\"fontSize\", cs) * (vars.lineThreshold || 0.2),\n textAlign = cs.textAlign,\n charArray = [],\n wordArray = [],\n lineArray = [],\n wordDelimiter = vars.wordDelimiter || \" \",\n tag = vars.tag ? vars.tag : vars.span ? \"span\" : \"div\",\n types = vars.type || vars.split || \"chars,words,lines\",\n lines = allLines && ~types.indexOf(\"lines\") ? [] : null,\n words = ~types.indexOf(\"words\"),\n chars = ~types.indexOf(\"chars\"),\n absolute = _isAbsolute(vars),\n linesClass = vars.linesClass,\n iterateLine = ~(linesClass || \"\").indexOf(\"++\"),\n spaceNodesToRemove = [],\n isFlex = cs.display === \"flex\",\n prevInlineDisplay = element.style.display,\n i,\n j,\n l,\n node,\n nodes,\n isChild,\n curLine,\n addWordSpaces,\n style,\n lineNode,\n lineWidth,\n offset;\n\n iterateLine && (linesClass = linesClass.split(\"++\").join(\"\"));\n isFlex && (element.style.display = \"block\"); //copy all the descendant nodes into an array (we can't use a regular nodeList because it's live and we may need to renest things)\n\n j = element.getElementsByTagName(\"*\");\n l = j.length;\n nodes = [];\n\n for (i = 0; i < l; i++) {\n nodes[i] = j[i];\n } //for absolute positioning, we need to record the x/y offsets and width/height for every
. And even if we're not positioning things absolutely, in order to accommodate lines, we must figure out where the y offset changes so that we can sense where the lines break, and we populate the lines array.\n\n\n if (lines || absolute) {\n for (i = 0; i < l; i++) {\n node = nodes[i];\n isChild = node.parentNode === element;\n\n if (isChild || absolute || chars && !words) {\n offset = node.offsetTop;\n\n if (lines && isChild && Math.abs(offset - lineOffsetY) > lineThreshold && (node.nodeName !== \"BR\" || i === 0)) {\n //we found some rare occasions where a certain character like ‑ could cause the offsetTop to be off by 1 pixel, so we build in a threshold.\n curLine = [];\n lines.push(curLine);\n lineOffsetY = offset;\n }\n\n if (absolute) {\n //record offset x and y, as well as width and height so that we can access them later for positioning. Grabbing them at once ensures we don't trigger a browser paint & we maximize performance.\n node._x = node.offsetLeft;\n node._y = offset;\n node._w = node.offsetWidth;\n node._h = node.offsetHeight;\n }\n\n if (lines) {\n if (node._isSplit && isChild || !chars && isChild || words && isChild || !words && node.parentNode.parentNode === element && !node.parentNode._isSplit) {\n curLine.push(node);\n node._x -= paddingLeft;\n\n if (_isBeforeWordDelimiter(node, element, wordDelimiter)) {\n node._wordEnd = true;\n }\n }\n\n if (node.nodeName === \"BR\" && (node.nextSibling && node.nextSibling.nodeName === \"BR\" || i === 0)) {\n //two consecutive
tags signify a new [empty] line. Also, if the entire block of content STARTS with a
, add a line.\n lines.push([]);\n }\n }\n }\n }\n }\n\n for (i = 0; i < l; i++) {\n node = nodes[i];\n isChild = node.parentNode === element;\n\n if (node.nodeName === \"BR\") {\n if (lines || absolute) {\n node.parentNode && node.parentNode.removeChild(node);\n nodes.splice(i--, 1);\n l--;\n } else if (!words) {\n element.appendChild(node);\n }\n\n continue;\n }\n\n if (absolute) {\n style = node.style;\n\n if (!words && !isChild) {\n node._x += node.parentNode._x;\n node._y += node.parentNode._y;\n }\n\n style.left = node._x + \"px\";\n style.top = node._y + \"px\";\n style.position = \"absolute\";\n style.display = \"block\"; //if we don't set the width/height, things collapse in older versions of IE and the origin for transforms is thrown off in all browsers.\n\n style.width = node._w + 1 + \"px\"; //IE is 1px short sometimes. Avoid wrapping\n\n style.height = node._h + \"px\";\n }\n\n if (!words && chars) {\n //we always start out wrapping words in their own
so that line breaks happen correctly, but here we'll remove those
tags if necessary and re-nest the characters directly into the element rather than inside the word
\n if (node._isSplit) {\n node._next = j = node.nextSibling;\n node.parentNode.appendChild(node); //put it at the end to keep the order correct.\n\n while (j && j.nodeType === 3 && j.textContent === \" \") {\n // if there are nodes that are just a space right afterward, go ahead and append them to the end so they're not out of order.\n node._next = j.nextSibling;\n node.parentNode.appendChild(j);\n j = j.nextSibling;\n }\n } else if (node.parentNode._isSplit) {\n node._parent = node.parentNode;\n\n if (!node.previousSibling && node.firstChild) {\n node.firstChild._isFirst = true;\n }\n\n if (node.nextSibling && node.nextSibling.textContent === \" \" && !node.nextSibling.nextSibling) {\n //if the last node inside a nested element is just a space (like Tnested ), remove it otherwise it'll get placed in the wrong order. Don't remove it right away, though, because we need to sense when words/characters are before a space like _isBeforeWordDelimiter(). Removing it now would make that a false negative.\n spaceNodesToRemove.push(node.nextSibling);\n }\n\n node._next = node.nextSibling && node.nextSibling._isFirst ? null : node.nextSibling;\n node.parentNode.removeChild(node);\n nodes.splice(i--, 1);\n l--;\n } else if (!isChild) {\n offset = !node.nextSibling && _isBeforeWordDelimiter(node.parentNode, element, wordDelimiter); //if this is the last letter in the word (and we're not breaking by lines and not positioning things absolutely), we need to add a space afterwards so that the characters don't just mash together\n\n node.parentNode._parent && node.parentNode._parent.appendChild(node);\n offset && node.parentNode.appendChild(_doc.createTextNode(\" \"));\n\n if (tag === \"span\") {\n node.style.display = \"inline\"; //so that word breaks are honored properly.\n }\n\n charArray.push(node);\n }\n } else if (node.parentNode._isSplit && !node._isSplit && node.innerHTML !== \"\") {\n wordArray.push(node);\n } else if (chars && !node._isSplit) {\n if (tag === \"span\") {\n node.style.display = \"inline\";\n }\n\n charArray.push(node);\n }\n }\n\n i = spaceNodesToRemove.length;\n\n while (--i > -1) {\n spaceNodesToRemove[i].parentNode.removeChild(spaceNodesToRemove[i]);\n }\n\n if (lines) {\n //the next 7 lines just give us the line width in the most reliable way and figure out the left offset (if position isn't relative or absolute). We must set the width along with text-align to ensure everything works properly for various alignments.\n if (absolute) {\n lineNode = _doc.createElement(tag);\n element.appendChild(lineNode);\n lineWidth = lineNode.offsetWidth + \"px\";\n offset = lineNode.offsetParent === element ? 0 : element.offsetLeft;\n element.removeChild(lineNode);\n }\n\n style = element.style.cssText;\n element.style.cssText = \"display:none;\"; //to improve performance, set display:none on the element so that the browser doesn't have to worry about reflowing or rendering while we're renesting things. We'll revert the cssText later.\n //we can't use element.innerHTML = \"\" because that causes IE to literally delete all the nodes and their content even though we've stored them in an array! So we must loop through the children and remove them.\n\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n\n addWordSpaces = wordDelimiter === \" \" && (!absolute || !words && !chars);\n\n for (i = 0; i < lines.length; i++) {\n curLine = lines[i];\n lineNode = _doc.createElement(tag);\n lineNode.style.cssText = \"display:block;text-align:\" + textAlign + \";position:\" + (absolute ? \"absolute;\" : \"relative;\");\n\n if (linesClass) {\n lineNode.className = linesClass + (iterateLine ? i + 1 : \"\");\n }\n\n lineArray.push(lineNode);\n l = curLine.length;\n\n for (j = 0; j < l; j++) {\n if (curLine[j].nodeName !== \"BR\") {\n node = curLine[j];\n lineNode.appendChild(node);\n addWordSpaces && node._wordEnd && lineNode.appendChild(_doc.createTextNode(\" \"));\n\n if (absolute) {\n if (j === 0) {\n lineNode.style.top = node._y + \"px\";\n lineNode.style.left = paddingLeft + offset + \"px\";\n }\n\n node.style.top = \"0px\";\n\n if (offset) {\n node.style.left = node._x - offset + \"px\";\n }\n }\n }\n }\n\n if (l === 0) {\n //if there are no nodes in the line (typically meaning there were two consecutive
tags, just add a non-breaking space so that things display properly.\n lineNode.innerHTML = \" \";\n } else if (!words && !chars) {\n _deWordify(lineNode);\n\n _swapText(lineNode, String.fromCharCode(160), \" \");\n }\n\n if (absolute) {\n lineNode.style.width = lineWidth;\n lineNode.style.height = node._h + \"px\";\n }\n\n element.appendChild(lineNode);\n }\n\n element.style.cssText = style;\n } //if everything shifts to being position:absolute, the container can collapse in terms of height or width, so fix that here.\n\n\n if (absolute) {\n if (origHeight > element.clientHeight) {\n element.style.height = origHeight - padTopAndBottom + \"px\";\n\n if (element.clientHeight < origHeight) {\n //IE8 and earlier use a different box model - we must include padding and borders\n element.style.height = origHeight + borderTopAndBottom + \"px\";\n }\n }\n\n if (origWidth > element.clientWidth) {\n element.style.width = origWidth - padLeftAndRight + \"px\";\n\n if (element.clientWidth < origWidth) {\n //IE8 and earlier use a different box model - we must include padding and borders\n element.style.width = origWidth + borderLeftAndRight + \"px\";\n }\n }\n }\n\n isFlex && (prevInlineDisplay ? element.style.display = prevInlineDisplay : element.style.removeProperty(\"display\"));\n\n _pushReversed(allChars, charArray);\n\n words && _pushReversed(allWords, wordArray);\n\n _pushReversed(allLines, lineArray);\n},\n _splitRawText = function _splitRawText(element, vars, wordStart, charStart) {\n var tag = vars.tag ? vars.tag : vars.span ? \"span\" : \"div\",\n types = vars.type || vars.split || \"chars,words,lines\",\n //words = (types.indexOf(\"words\") !== -1),\n chars = ~types.indexOf(\"chars\"),\n absolute = _isAbsolute(vars),\n wordDelimiter = vars.wordDelimiter || \" \",\n isWordDelimiter = function isWordDelimiter(_char) {\n return _char === wordDelimiter || _char === _nonBreakingSpace && wordDelimiter === \" \";\n },\n space = wordDelimiter !== \" \" ? \"\" : absolute ? \"­ \" : \" \",\n wordEnd = \"\",\n wordIsOpen = 1,\n specialChars = vars.specialChars ? typeof vars.specialChars === \"function\" ? vars.specialChars : _findSpecialChars : null,\n //specialChars can be an array or a function. For performance reasons, we always set this local \"specialChars\" to a function to which we pass the remaining text and whatever the original vars.specialChars was so that if it's an array, it works with the _findSpecialChars() function.\n text,\n splitText,\n i,\n j,\n l,\n character,\n hasTagStart,\n testResult,\n container = _doc.createElement(\"div\"),\n parent = element.parentNode;\n\n parent.insertBefore(container, element);\n container.textContent = element.nodeValue;\n parent.removeChild(element);\n element = container;\n text = getText(element);\n hasTagStart = text.indexOf(\"<\") !== -1;\n\n if (vars.reduceWhiteSpace !== false) {\n text = text.replace(_multipleSpacesExp, \" \").replace(_stripExp, \"\");\n }\n\n if (hasTagStart) {\n text = text.split(\"<\").join(\"{{LT}}\"); //we can't leave \"<\" in the string, or when we set the innerHTML, it can be interpreted as a node\n }\n\n l = text.length;\n splitText = (text.charAt(0) === \" \" ? space : \"\") + wordStart();\n\n for (i = 0; i < l; i++) {\n character = text.charAt(i);\n\n if (specialChars && (testResult = specialChars(text.substr(i), vars.specialChars))) {\n // look for any specialChars that were declared. Remember, they can be passed in like {specialChars:[\"मी\", \"पा\", \"है\"]} or a function could be defined instead. Either way, the function should return the number of characters that should be grouped together for this \"character\".\n character = text.substr(i, testResult || 1);\n splitText += chars && character !== \" \" ? charStart() + character + \"\" : character;\n i += testResult - 1;\n } else if (isWordDelimiter(character) && !isWordDelimiter(text.charAt(i - 1)) && i) {\n splitText += wordIsOpen ? wordEnd : \"\";\n wordIsOpen = 0;\n\n while (isWordDelimiter(text.charAt(i + 1))) {\n //skip over empty spaces (to avoid making them words)\n splitText += space;\n i++;\n }\n\n if (i === l - 1) {\n splitText += space;\n } else if (text.charAt(i + 1) !== \")\") {\n splitText += space + wordStart();\n wordIsOpen = 1;\n }\n } else if (character === \"{\" && text.substr(i, 6) === \"{{LT}}\") {\n splitText += chars ? charStart() + \"{{LT}}\" + \"\" : \"{{LT}}\";\n i += 5;\n } else if (character.charCodeAt(0) >= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {\n //special emoji characters use 2 or 4 unicode characters that we must keep together.\n j = ((text.substr(i, 12).split(emojiExp) || [])[1] || \"\").length || 2;\n splitText += chars && character !== \" \" ? charStart() + text.substr(i, j) + \"\" : text.substr(i, j);\n i += j - 1;\n } else {\n splitText += chars && character !== \" \" ? charStart() + character + \"\" : character;\n }\n }\n\n element.outerHTML = splitText + (wordIsOpen ? wordEnd : \"\");\n hasTagStart && _swapText(parent, \"{{LT}}\", \"<\"); //note: don't perform this on \"element\" because that gets replaced with all new elements when we set element.outerHTML.\n},\n _split = function _split(element, vars, wordStart, charStart) {\n var children = _toArray(element.childNodes),\n l = children.length,\n absolute = _isAbsolute(vars),\n i,\n child;\n\n if (element.nodeType !== 3 || l > 1) {\n vars.absolute = false;\n\n for (i = 0; i < l; i++) {\n child = children[i];\n child._next = child._isFirst = child._parent = child._wordEnd = null;\n\n if (child.nodeType !== 3 || /\\S+/.test(child.nodeValue)) {\n if (absolute && child.nodeType !== 3 && _getComputedStyle(child).display === \"inline\") {\n //if there's a child node that's display:inline, switch it to inline-block so that absolute positioning works properly (most browsers don't report offsetTop/offsetLeft properly inside a for example)\n child.style.display = \"inline-block\";\n child.style.position = \"relative\";\n }\n\n child._isSplit = true;\n\n _split(child, vars, wordStart, charStart); //don't split lines on child elements\n\n }\n }\n\n vars.absolute = absolute;\n element._isSplit = true;\n return;\n }\n\n _splitRawText(element, vars, wordStart, charStart);\n};\n\nexport var SplitText = /*#__PURE__*/function () {\n function SplitText(element, vars) {\n _coreInitted || _initCore();\n this.elements = _toArray(element);\n this.chars = [];\n this.words = [];\n this.lines = [];\n this._originals = [];\n this.vars = vars || {};\n\n _context(this);\n\n _bonusValidated && this.split(vars);\n }\n\n var _proto = SplitText.prototype;\n\n _proto.split = function split(vars) {\n this.isSplit && this.revert();\n this.vars = vars = vars || this.vars;\n this._originals.length = this.chars.length = this.words.length = this.lines.length = 0;\n\n var i = this.elements.length,\n tag = vars.tag ? vars.tag : vars.span ? \"span\" : \"div\",\n wordStart = _cssClassFunc(vars.wordsClass, tag),\n charStart = _cssClassFunc(vars.charsClass, tag),\n origHeight,\n origWidth,\n e; //we split in reversed order so that if/when we position:absolute elements, they don't affect the position of the ones after them in the document flow (shifting them up as they're taken out of the document flow).\n\n\n while (--i > -1) {\n e = this.elements[i];\n this._originals[i] = {\n html: e.innerHTML,\n style: e.getAttribute(\"style\")\n };\n origHeight = e.clientHeight;\n origWidth = e.clientWidth;\n\n _split(e, vars, wordStart, charStart);\n\n _setPositionsAfterSplit(e, vars, this.chars, this.words, this.lines, origWidth, origHeight);\n }\n\n this.chars.reverse();\n this.words.reverse();\n this.lines.reverse();\n this.isSplit = true;\n return this;\n };\n\n _proto.revert = function revert() {\n var originals = this._originals;\n\n if (!originals) {\n throw \"revert() call wasn't scoped properly.\";\n }\n\n this.elements.forEach(function (e, i) {\n e.innerHTML = originals[i].html;\n e.setAttribute(\"style\", originals[i].style);\n });\n this.chars = [];\n this.words = [];\n this.lines = [];\n this.isSplit = false;\n return this;\n };\n\n SplitText.create = function create(element, vars) {\n return new SplitText(element, vars);\n };\n\n return SplitText;\n}();\nSplitText.version = \"3.12.5\";\nSplitText.register = _initCore;\nexport { SplitText as default };"],"sourceRoot":""}