{"version":3,"file":"static/chunks/72141.79d1beeb1c35c520.js","mappings":"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","sources":["webpack://_N_E/./node_modules/bezier-easing/src/index.js","webpack://_N_E/./node_modules/parallax-controller/dist/parallax-controller.esm.js","webpack://_N_E/./node_modules/react-scroll-parallax/dist/react-scroll-parallax.esm.js"],"sourcesContent":["/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","import bezier from 'bezier-easing';\n\nvar Limits = function Limits(properties) {\n this.startX = properties.startX;\n this.startY = properties.startY;\n this.endX = properties.endX;\n this.endY = properties.endY; // Used to calculate the progress of the element\n\n this.totalX = this.endX - this.startX;\n this.totalY = this.endY - this.startY; // Used to scale translate effects\n\n this.startMultiplierX = properties.startMultiplierX || 1;\n this.endMultiplierX = properties.endMultiplierX || 1;\n this.startMultiplierY = properties.startMultiplierY || 1;\n this.endMultiplierY = properties.endMultiplierY || 1;\n};\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar ValidCSSEffects;\n\n(function (ValidCSSEffects) {\n ValidCSSEffects[\"speed\"] = \"speed\";\n ValidCSSEffects[\"translateX\"] = \"translateX\";\n ValidCSSEffects[\"translateY\"] = \"translateY\";\n ValidCSSEffects[\"rotate\"] = \"rotate\";\n ValidCSSEffects[\"rotateX\"] = \"rotateX\";\n ValidCSSEffects[\"rotateY\"] = \"rotateY\";\n ValidCSSEffects[\"rotateZ\"] = \"rotateZ\";\n ValidCSSEffects[\"scale\"] = \"scale\";\n ValidCSSEffects[\"scaleX\"] = \"scaleX\";\n ValidCSSEffects[\"scaleY\"] = \"scaleY\";\n ValidCSSEffects[\"scaleZ\"] = \"scaleZ\";\n ValidCSSEffects[\"opacity\"] = \"opacity\";\n})(ValidCSSEffects || (ValidCSSEffects = {}));\n\nvar Units;\n\n(function (Units) {\n Units[\"px\"] = \"px\";\n Units[\"%\"] = \"%\";\n Units[\"vh\"] = \"vh\";\n Units[\"vw\"] = \"vw\";\n})(Units || (Units = {}));\n\nvar RotationUnits;\n\n(function (RotationUnits) {\n RotationUnits[\"deg\"] = \"deg\";\n RotationUnits[\"turn\"] = \"turn\";\n RotationUnits[\"rad\"] = \"rad\";\n})(RotationUnits || (RotationUnits = {}));\n\nvar ScaleUnits;\n\n(function (ScaleUnits) {\n ScaleUnits[\"\"] = \"\";\n})(ScaleUnits || (ScaleUnits = {}));\n\nvar ScrollAxis;\n\n(function (ScrollAxis) {\n ScrollAxis[\"vertical\"] = \"vertical\";\n ScrollAxis[\"horizontal\"] = \"horizontal\";\n})(ScrollAxis || (ScrollAxis = {}));\n\nvar EasingPreset;\n\n(function (EasingPreset) {\n EasingPreset[\"ease\"] = \"ease\";\n EasingPreset[\"easeIn\"] = \"easeIn\";\n EasingPreset[\"easeOut\"] = \"easeOut\";\n EasingPreset[\"easeInOut\"] = \"easeInOut\";\n EasingPreset[\"easeInQuad\"] = \"easeInQuad\";\n EasingPreset[\"easeInCubic\"] = \"easeInCubic\";\n EasingPreset[\"easeInQuart\"] = \"easeInQuart\";\n EasingPreset[\"easeInQuint\"] = \"easeInQuint\";\n EasingPreset[\"easeInSine\"] = \"easeInSine\";\n EasingPreset[\"easeInExpo\"] = \"easeInExpo\";\n EasingPreset[\"easeInCirc\"] = \"easeInCirc\";\n EasingPreset[\"easeOutQuad\"] = \"easeOutQuad\";\n EasingPreset[\"easeOutCubic\"] = \"easeOutCubic\";\n EasingPreset[\"easeOutQuart\"] = \"easeOutQuart\";\n EasingPreset[\"easeOutQuint\"] = \"easeOutQuint\";\n EasingPreset[\"easeOutSine\"] = \"easeOutSine\";\n EasingPreset[\"easeOutExpo\"] = \"easeOutExpo\";\n EasingPreset[\"easeOutCirc\"] = \"easeOutCirc\";\n EasingPreset[\"easeInOutQuad\"] = \"easeInOutQuad\";\n EasingPreset[\"easeInOutCubic\"] = \"easeInOutCubic\";\n EasingPreset[\"easeInOutQuart\"] = \"easeInOutQuart\";\n EasingPreset[\"easeInOutQuint\"] = \"easeInOutQuint\";\n EasingPreset[\"easeInOutSine\"] = \"easeInOutSine\";\n EasingPreset[\"easeInOutExpo\"] = \"easeInOutExpo\";\n EasingPreset[\"easeInOutCirc\"] = \"easeInOutCirc\";\n EasingPreset[\"easeInBack\"] = \"easeInBack\";\n EasingPreset[\"easeOutBack\"] = \"easeOutBack\";\n EasingPreset[\"easeInOutBack\"] = \"easeInOutBack\";\n})(EasingPreset || (EasingPreset = {}));\n\n/**\r\n * Creates a unique id to distinguish parallax elements.\r\n */\nvar id = 0;\nfunction createId() {\n ++id;\n return id;\n}\n\nvar Rect = /*#__PURE__*/function () {\n function Rect(options) {\n var rect = options.el.getBoundingClientRect(); // rect is based on viewport -- must adjust for relative scroll container\n\n if (options.view.scrollContainer) {\n var scrollRect = options.view.scrollContainer.getBoundingClientRect();\n rect = _extends({}, rect, {\n top: rect.top - scrollRect.top,\n right: rect.right - scrollRect.left,\n bottom: rect.bottom - scrollRect.top,\n left: rect.left - scrollRect.left\n });\n }\n\n this.height = options.el.offsetHeight;\n this.width = options.el.offsetWidth;\n this.left = rect.left;\n this.right = rect.right;\n this.top = rect.top;\n this.bottom = rect.bottom;\n\n if (options.rootMargin) {\n this._setRectWithRootMargin(options.rootMargin);\n }\n }\n /**\r\n * Apply root margin to all properties\r\n */\n\n\n var _proto = Rect.prototype;\n\n _proto._setRectWithRootMargin = function _setRectWithRootMargin(rootMargin) {\n var totalRootY = rootMargin.top + rootMargin.bottom;\n var totalRootX = rootMargin.left + rootMargin.right;\n this.top -= rootMargin.top;\n this.right += rootMargin.right;\n this.bottom += rootMargin.bottom;\n this.left -= rootMargin.left;\n this.height += totalRootY;\n this.width += totalRootX;\n };\n\n return Rect;\n}();\n\nvar VALID_UNITS = [ScaleUnits[''], Units.px, Units['%'], Units['vh'], Units['vw'], RotationUnits.deg, RotationUnits.turn, RotationUnits.rad];\n/**\r\n * Determines the unit of a string and parses the value\r\n */\n\nfunction parseValueAndUnit(str, defaultUnit) {\n if (defaultUnit === void 0) {\n defaultUnit = Units['%'];\n }\n\n var out = {\n value: 0,\n unit: defaultUnit\n };\n if (typeof str === 'undefined') return out;\n var isValid = typeof str === 'number' || typeof str === 'string';\n\n if (!isValid) {\n throw new Error('Invalid value provided. Must provide a value as a string or number');\n }\n\n str = String(str);\n out.value = parseFloat(str); // @ts-ignore\n\n out.unit = str.match(/[\\d.\\-+]*\\s*(.*)/)[1] || defaultUnit; // @ts-expect-error\n\n var isValidUnit = VALID_UNITS.includes(out.unit);\n\n if (!isValidUnit) {\n throw new Error('Invalid unit provided.');\n }\n\n return out;\n}\n\nvar easingPresets = {\n ease: [0.25, 0.1, 0.25, 1.0],\n easeIn: [0.42, 0.0, 1.0, 1.0],\n easeOut: [0.0, 0.0, 0.58, 1.0],\n easeInOut: [0.42, 0.0, 0.58, 1.0],\n\n /* Ease IN curves */\n easeInQuad: [0.55, 0.085, 0.68, 0.53],\n easeInCubic: [0.55, 0.055, 0.675, 0.19],\n easeInQuart: [0.895, 0.03, 0.685, 0.22],\n easeInQuint: [0.755, 0.05, 0.855, 0.06],\n easeInSine: [0.47, 0.0, 0.745, 0.715],\n easeInExpo: [0.95, 0.05, 0.795, 0.035],\n easeInCirc: [0.6, 0.04, 0.98, 0.335],\n\n /* Ease Out Curves */\n easeOutQuad: [0.25, 0.46, 0.45, 0.94],\n easeOutCubic: [0.215, 0.61, 0.355, 1.0],\n easeOutQuart: [0.165, 0.84, 0.44, 1.0],\n easeOutQuint: [0.23, 1.0, 0.32, 1.0],\n easeOutSine: [0.39, 0.575, 0.565, 1.0],\n easeOutExpo: [0.19, 1.0, 0.22, 1.0],\n easeOutCirc: [0.075, 0.82, 0.165, 1.0],\n\n /* Ease IN Out Curves */\n easeInOutQuad: [0.455, 0.03, 0.515, 0.955],\n easeInOutCubic: [0.645, 0.045, 0.355, 1.0],\n easeInOutQuart: [0.77, 0.0, 0.175, 1.0],\n easeInOutQuint: [0.86, 0.0, 0.07, 1.0],\n easeInOutSine: [0.445, 0.05, 0.55, 0.95],\n easeInOutExpo: [1.0, 0.0, 0.0, 1.0],\n easeInOutCirc: [0.785, 0.135, 0.15, 0.86],\n\n /* Ease Bounce Curves */\n easeInBack: [0.6, -0.28, 0.735, 0.045],\n easeOutBack: [0.175, 0.885, 0.32, 1.275],\n easeInOutBack: [0.68, -0.55, 0.265, 1.55]\n};\n\nfunction createEasingFunction(easing) {\n if (Array.isArray(easing)) {\n return bezier(easing[0], easing[1], easing[2], easing[3]);\n }\n\n if (typeof easing === 'string' && typeof easingPresets[easing] !== 'undefined') {\n var params = easingPresets[easing];\n return bezier(params[0], params[1], params[2], params[3]);\n }\n\n return;\n}\n\nvar PARALLAX_EFFECTS = /*#__PURE__*/Object.values(ValidCSSEffects);\nvar MAP_EFFECT_TO_DEFAULT_UNIT = {\n speed: 'px',\n translateX: '%',\n translateY: '%',\n rotate: 'deg',\n rotateX: 'deg',\n rotateY: 'deg',\n rotateZ: 'deg',\n scale: '',\n scaleX: '',\n scaleY: '',\n scaleZ: '',\n opacity: ''\n};\n/**\r\n * Takes a parallax element effects and parses the properties to get the start and end values and units.\r\n */\n\nfunction parseElementTransitionEffects(props, scrollAxis) {\n var parsedEffects = {};\n PARALLAX_EFFECTS.forEach(function (key) {\n var defaultValue = MAP_EFFECT_TO_DEFAULT_UNIT[key]; // If the provided type is a number, this must be the speed prop\n // in which case we need to construct the proper translate config\n\n if (typeof (props == null ? void 0 : props[key]) === 'number') {\n var value = props == null ? void 0 : props[key];\n var startSpeed = (value || 0) * 10 + \"px\";\n var endSpeed = (value || 0) * -10 + \"px\";\n var startParsed = parseValueAndUnit(startSpeed);\n var endParsed = parseValueAndUnit(endSpeed);\n var speedConfig = {\n start: startParsed.value,\n end: endParsed.value,\n unit: startParsed.unit\n }; // Manually set translate y value\n\n if (scrollAxis === ScrollAxis.vertical) {\n parsedEffects.translateY = speedConfig;\n } // Manually set translate y value\n\n\n if (scrollAxis === ScrollAxis.horizontal) {\n parsedEffects.translateX = speedConfig;\n }\n } // The rest are standard effect being parsed\n\n\n if (Array.isArray(props == null ? void 0 : props[key])) {\n var _value = props == null ? void 0 : props[key];\n\n if (typeof _value[0] !== 'undefined' && typeof _value[1] !== 'undefined') {\n var _startParsed = parseValueAndUnit(_value == null ? void 0 : _value[0], defaultValue);\n\n var _endParsed = parseValueAndUnit(_value == null ? void 0 : _value[1], defaultValue);\n\n var easing = createEasingFunction(_value == null ? void 0 : _value[2]);\n parsedEffects[key] = {\n start: _startParsed.value,\n end: _endParsed.value,\n unit: _startParsed.unit,\n easing: easing\n };\n\n if (_startParsed.unit !== _endParsed.unit) {\n throw new Error('Must provide matching units for the min and max offset values of each axis.');\n }\n }\n }\n });\n return parsedEffects;\n}\n\n/**\r\n * Returns the percent (0 - 100) moved based on position in the viewport\r\n */\nfunction getProgressAmount(\n/*\r\n * The start value from cache\r\n */\nstart,\n/*\r\n * total dist the element has to move to be 100% complete (view width/height + element width/height)\r\n */\ntotalDist,\n/*\r\n * Current scroll value\r\n */\ncurrentScroll,\n/*\r\n * an optional easing function to apply\r\n */\neasing) {\n // adjust cached value\n var startAdjustedScroll = currentScroll - start; // Amount the element has moved based on current and total distance to move\n\n var amount = startAdjustedScroll / totalDist; // Apply bezier easing if provided\n\n if (easing) {\n amount = easing(amount);\n }\n\n return amount;\n}\n\n/**\r\n * Takes two values (start, end) and returns whether the current scroll is within range\r\n * @param {number} start - start of scroll (x/y)\r\n * @param {number} end - end of scroll (x/y)\r\n * @param {number} scroll - current scroll (x/y)\r\n * @return {boolean} isInView\r\n */\nfunction isElementInView(start, end, scroll) {\n var isInView = scroll >= start && scroll <= end;\n return isInView;\n}\n\n// Scale between AKA normalize\nfunction scaleBetween(value, newMin, newMax, oldMin, oldMax) {\n return (newMax - newMin) * (value - oldMin) / (oldMax - oldMin) + newMin;\n}\n\n/**\r\n * Scales a start and end value of an effect based on percent moved and easing function\r\n */\n\nfunction scaleEffectByProgress(effect, progress) {\n var value = scaleBetween(typeof effect.easing === 'function' ? effect.easing(progress) : progress, (effect == null ? void 0 : effect.start) || 0, (effect == null ? void 0 : effect.end) || 0, 0, 1);\n return {\n value: value,\n unit: effect == null ? void 0 : effect.unit\n };\n}\n\nvar TRANSFORM_EFFECTS = /*#__PURE__*/Object.values(ValidCSSEffects).filter(function (v) {\n return v !== 'opacity';\n});\nfunction setWillChangeStyles(el, effects) {\n var keys = Object.keys(effects);\n var hasOpacity = keys.includes('opacity');\n var willChange = \"transform\" + (hasOpacity ? ',opacity' : '');\n el.style.willChange = willChange;\n}\nfunction setElementStyles(effects, progress, el) {\n if (!el) return;\n var transform = getTransformStyles(effects, progress);\n var opacity = getOpacityStyles(effects, progress);\n el.style.transform = transform;\n el.style.opacity = opacity;\n}\nfunction getOpacityStyles(effects, progress) {\n var scaledOpacity = effects['opacity'] && scaleEffectByProgress(effects['opacity'], progress);\n\n if (typeof scaledOpacity === 'undefined' || typeof scaledOpacity.value === 'undefined' || typeof scaledOpacity.unit === 'undefined') {\n return '';\n }\n\n var styleStr = \"\" + scaledOpacity.value;\n return styleStr;\n}\nfunction getTransformStyles(effects, progress) {\n var transform = TRANSFORM_EFFECTS.reduce(function (acc, key) {\n var scaledEffect = // @ts-expect-error\n effects[key] && scaleEffectByProgress(effects[key], progress);\n\n if (typeof scaledEffect === 'undefined' || typeof scaledEffect.value === 'undefined' || typeof scaledEffect.unit === 'undefined') {\n return acc;\n }\n\n var styleStr = key + \"(\" + scaledEffect.value + scaledEffect.unit + \")\";\n return acc + styleStr;\n }, '');\n return transform;\n}\n/**\r\n * Takes a parallax element and removes parallax offset styles.\r\n * @param {object} element\r\n */\n\nfunction resetStyles(element) {\n var el = element.el;\n if (!el) return;\n el.style.transform = '';\n el.style.opacity = '';\n}\n\nfunction createLimitsForRelativeElements(rect, view, scroll, shouldAlwaysCompleteAnimation) {\n var startY = rect.top - view.height;\n var startX = rect.left - view.width;\n var endY = rect.bottom;\n var endX = rect.right; // add scroll\n\n startX += scroll.x;\n endX += scroll.x;\n startY += scroll.y;\n endY += scroll.y;\n\n if (shouldAlwaysCompleteAnimation) {\n if (scroll.y + rect.top < view.height) {\n startY = 0;\n }\n\n if (scroll.x + rect.left < view.width) {\n startX = 0;\n }\n\n if (endY > view.scrollHeight - view.height) {\n endY = view.scrollHeight - view.height;\n }\n\n if (endX > view.scrollWidth - view.width) {\n endX = view.scrollWidth - view.width;\n }\n }\n\n var limits = new Limits({\n startX: startX,\n startY: startY,\n endX: endX,\n endY: endY\n });\n return limits;\n}\n\nfunction getTranslateScalar(startTranslatePx, endTranslatePx, totalDist) {\n var slow = endTranslatePx > startTranslatePx; // calculating necessary scale to increase translations\n\n var totalAbsOff = (Math.abs(startTranslatePx) + Math.abs(endTranslatePx)) * (slow ? -1 : 1);\n var totalDistTrue = totalDist + totalAbsOff; // Determine multiple to scale by, only values greater than 1\n\n var scale = Math.max(totalDist / totalDistTrue, 1);\n return scale;\n}\n\n/**\r\n * Return the start and end pixel values for an elements translations\r\n */\nfunction getStartEndValueInPx(translate, elementSize) {\n var start = translate.start,\n end = translate.end,\n unit = translate.unit;\n\n if (unit === '%') {\n var scale = elementSize / 100;\n start = start * scale;\n end = end * scale;\n }\n\n if (unit === 'vw') {\n var startScale = start / 100;\n var endScale = end / 100;\n start = window.innerWidth * startScale;\n end = window.innerWidth * endScale;\n }\n\n if (unit === 'vh') {\n var _startScale = start / 100;\n\n var _endScale = end / 100;\n\n start = window.innerHeight * _startScale;\n end = window.innerHeight * _endScale;\n }\n\n return {\n start: start,\n end: end\n };\n}\n\nvar DEFAULT_VALUE = {\n start: 0,\n end: 0,\n unit: ''\n};\nfunction createLimitsWithTranslationsForRelativeElements(rect, view, effects, scroll, scrollAxis, shouldAlwaysCompleteAnimation) {\n // get start and end accounting for percent effects\n var translateX = effects.translateX || DEFAULT_VALUE;\n var translateY = effects.translateY || DEFAULT_VALUE;\n\n var _getStartEndValueInPx = getStartEndValueInPx(translateX, rect.width),\n startTranslateXPx = _getStartEndValueInPx.start,\n endTranslateXPx = _getStartEndValueInPx.end;\n\n var _getStartEndValueInPx2 = getStartEndValueInPx(translateY, rect.height),\n startTranslateYPx = _getStartEndValueInPx2.start,\n endTranslateYPx = _getStartEndValueInPx2.end; // default starting values\n\n\n var startY = rect.top - view.height;\n var startX = rect.left - view.width;\n var endY = rect.bottom;\n var endX = rect.right;\n var startMultiplierY = 1;\n var endMultiplierY = 1;\n\n if (scrollAxis === ScrollAxis.vertical) {\n startMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, view.height + rect.height);\n endMultiplierY = startMultiplierY;\n }\n\n var startMultiplierX = 1;\n var endMultiplierX = 1;\n\n if (scrollAxis === ScrollAxis.horizontal) {\n startMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, view.width + rect.width);\n endMultiplierX = startMultiplierX;\n } // Apply the scale to initial values\n\n\n if (startTranslateYPx < 0) {\n startY = startY + startTranslateYPx * startMultiplierY;\n }\n\n if (endTranslateYPx > 0) {\n endY = endY + endTranslateYPx * endMultiplierY;\n }\n\n if (startTranslateXPx < 0) {\n startX = startX + startTranslateXPx * startMultiplierX;\n }\n\n if (endTranslateXPx > 0) {\n endX = endX + endTranslateXPx * endMultiplierX;\n } // add scroll\n\n\n startX += scroll.x;\n endX += scroll.x;\n startY += scroll.y;\n endY += scroll.y; // NOTE: please refactor and isolate this :(\n\n if (shouldAlwaysCompleteAnimation) {\n var topBeginsInView = scroll.y + rect.top < view.height;\n var leftBeginsInView = scroll.x + rect.left < view.width;\n var bottomEndsInView = scroll.y + rect.bottom > view.scrollHeight - view.height;\n var rightEndsInView = scroll.x + rect.right > view.scrollWidth - view.height;\n\n if (topBeginsInView && bottomEndsInView) {\n startMultiplierY = 1;\n endMultiplierY = 1;\n startY = 0;\n endY = view.scrollHeight - view.height;\n }\n\n if (leftBeginsInView && rightEndsInView) {\n startMultiplierX = 1;\n endMultiplierX = 1;\n startX = 0;\n endX = view.scrollWidth - view.width;\n }\n\n if (!topBeginsInView && bottomEndsInView) {\n startY = rect.top - view.height + scroll.y;\n endY = view.scrollHeight - view.height;\n var totalDist = endY - startY;\n startMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, totalDist);\n endMultiplierY = 1;\n\n if (startTranslateYPx < 0) {\n startY = startY + startTranslateYPx * startMultiplierY;\n }\n }\n\n if (!leftBeginsInView && rightEndsInView) {\n startX = rect.left - view.width + scroll.x;\n endX = view.scrollWidth - view.width;\n\n var _totalDist = endX - startX;\n\n startMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, _totalDist);\n endMultiplierX = 1;\n\n if (startTranslateXPx < 0) {\n startX = startX + startTranslateXPx * startMultiplierX;\n }\n }\n\n if (topBeginsInView && !bottomEndsInView) {\n startY = 0;\n endY = rect.bottom + scroll.y;\n\n var _totalDist2 = endY - startY;\n\n startMultiplierY = 1;\n endMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, _totalDist2);\n\n if (endTranslateYPx > 0) {\n endY = endY + endTranslateYPx * endMultiplierY;\n }\n }\n\n if (leftBeginsInView && !rightEndsInView) {\n startX = 0;\n endX = rect.right + scroll.x;\n\n var _totalDist3 = endX - startX;\n\n startMultiplierX = 1;\n endMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, _totalDist3);\n\n if (endTranslateXPx > 0) {\n endX = endX + endTranslateXPx * endMultiplierX;\n }\n }\n }\n\n var limits = new Limits({\n startX: startX,\n startY: startY,\n endX: endX,\n endY: endY,\n startMultiplierX: startMultiplierX,\n endMultiplierX: endMultiplierX,\n startMultiplierY: startMultiplierY,\n endMultiplierY: endMultiplierY\n });\n return limits;\n}\n\nfunction scaleTranslateEffectsForSlowerScroll(effects, limits) {\n var effectsCopy = _extends({}, effects);\n\n if (effectsCopy.translateX) {\n effectsCopy.translateX = _extends({}, effects.translateX, {\n start: effectsCopy.translateX.start * limits.startMultiplierX,\n end: effectsCopy.translateX.end * limits.endMultiplierX\n });\n }\n\n if (effectsCopy.translateY) {\n effectsCopy.translateY = _extends({}, effects.translateY, {\n start: effectsCopy.translateY.start * limits.startMultiplierY,\n end: effectsCopy.translateY.end * limits.endMultiplierY\n });\n }\n\n return effectsCopy;\n}\n\nfunction getShouldScaleTranslateEffects(props, effects, scrollAxis) {\n if (props.rootMargin || props.targetElement || props.shouldDisableScalingTranslations) {\n return false;\n }\n\n if (!!effects.translateX && scrollAxis === ScrollAxis.horizontal || !!effects.translateY && scrollAxis === ScrollAxis.vertical) {\n return true;\n }\n\n return false;\n}\n\nvar clamp = function clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n};\n\nvar Element = /*#__PURE__*/function () {\n function Element(options) {\n this.el = options.el;\n this.props = options.props;\n this.scrollAxis = options.scrollAxis;\n this.id = createId();\n this.effects = parseElementTransitionEffects(this.props, this.scrollAxis);\n this.isInView = null;\n this.progress = 0;\n\n this._setElementEasing(options.props.easing);\n\n setWillChangeStyles(options.el, this.effects);\n }\n\n var _proto = Element.prototype;\n\n _proto.updateProps = function updateProps(nextProps) {\n this.props = _extends({}, this.props, nextProps);\n this.effects = parseElementTransitionEffects(nextProps, this.scrollAxis);\n\n this._setElementEasing(nextProps.easing);\n\n return this;\n };\n\n _proto.setCachedAttributes = function setCachedAttributes(view, scroll) {\n // NOTE: Must reset styles before getting the rect, as it might impact the natural position\n resetStyles(this);\n this.rect = new Rect({\n el: this.props.targetElement || this.el,\n rootMargin: this.props.rootMargin,\n view: view\n });\n var shouldScaleTranslateEffects = getShouldScaleTranslateEffects(this.props, this.effects, this.scrollAxis);\n\n if (typeof this.props.startScroll === 'number' && typeof this.props.endScroll === 'number') {\n this.limits = new Limits({\n startX: this.props.startScroll,\n startY: this.props.startScroll,\n endX: this.props.endScroll,\n endY: this.props.endScroll\n }); // Undo the reset -- place it back at current position with styles\n\n this._setElementStyles();\n\n return this;\n }\n\n if (shouldScaleTranslateEffects) {\n this.limits = createLimitsWithTranslationsForRelativeElements(this.rect, view, this.effects, scroll, this.scrollAxis, this.props.shouldAlwaysCompleteAnimation);\n this.scaledEffects = scaleTranslateEffectsForSlowerScroll(this.effects, this.limits);\n } else {\n this.limits = createLimitsForRelativeElements(this.rect, view, scroll, this.props.shouldAlwaysCompleteAnimation);\n } // Undo the reset -- place it back at current position with styles\n\n\n this._setElementStyles();\n\n return this;\n };\n\n _proto._updateElementIsInView = function _updateElementIsInView(nextIsInView) {\n // NOTE: Check if this is the first change to make sure onExit isn't called\n var isFirstChange = this.isInView === null;\n\n if (nextIsInView !== this.isInView) {\n if (nextIsInView) {\n this.props.onEnter && this.props.onEnter(this);\n } else if (!isFirstChange) {\n this._setFinalProgress();\n\n this._setElementStyles();\n\n this.props.onExit && this.props.onExit(this);\n }\n }\n\n this.isInView = nextIsInView;\n };\n\n _proto._setFinalProgress = function _setFinalProgress() {\n var finalProgress = clamp(Math.round(this.progress), 0, 1);\n\n this._updateElementProgress(finalProgress);\n };\n\n _proto._setElementStyles = function _setElementStyles() {\n if (this.props.disabled) return;\n var effects = this.scaledEffects || this.effects;\n setElementStyles(effects, this.progress, this.el);\n };\n\n _proto._updateElementProgress = function _updateElementProgress(nextProgress) {\n this.progress = nextProgress;\n this.props.onProgressChange && this.props.onProgressChange(this.progress);\n this.props.onChange && this.props.onChange(this);\n };\n\n _proto._setElementEasing = function _setElementEasing(easing) {\n this.easing = createEasingFunction(easing);\n };\n\n _proto.updatePosition = function updatePosition(scroll) {\n if (!this.limits) return this;\n var isVertical = this.scrollAxis === ScrollAxis.vertical;\n var isFirstChange = this.isInView === null; // based on scroll axis\n\n var start = isVertical ? this.limits.startY : this.limits.startX;\n var end = isVertical ? this.limits.endY : this.limits.endX;\n var total = isVertical ? this.limits.totalY : this.limits.totalX;\n var s = isVertical ? scroll.y : scroll.x; // check if in view\n\n var nextIsInView = isElementInView(start, end, s);\n\n this._updateElementIsInView(nextIsInView); // set the progress if in view or this is the first change\n\n\n if (nextIsInView) {\n var nextProgress = getProgressAmount(start, total, s, this.easing);\n\n this._updateElementProgress(nextProgress);\n\n this._setElementStyles();\n } else if (isFirstChange) {\n // NOTE: this._updateElementProgress -- dont use this because it will trigger onChange\n this.progress = clamp(Math.round(getProgressAmount(start, total, s, this.easing)), 0, 1);\n\n this._setElementStyles();\n }\n\n return this;\n };\n\n return Element;\n}();\n\nvar View = /*#__PURE__*/function () {\n function View(config) {\n this.scrollContainer = config.scrollContainer;\n this.width = config.width;\n this.height = config.height;\n this.scrollHeight = config.scrollHeight;\n this.scrollWidth = config.scrollWidth;\n }\n\n var _proto = View.prototype;\n\n _proto.hasChanged = function hasChanged(params) {\n if (params.width !== this.width || params.height !== this.height || params.scrollWidth !== this.scrollWidth || params.scrollHeight !== this.scrollHeight) {\n return true;\n }\n\n return false;\n };\n\n _proto.setSize = function setSize(params) {\n this.width = params.width;\n this.height = params.height;\n this.scrollHeight = params.scrollHeight;\n this.scrollWidth = params.scrollWidth;\n return this;\n };\n\n return View;\n}();\n\nvar Scroll = /*#__PURE__*/function () {\n function Scroll(x, y) {\n this.x = x;\n this.y = y;\n this.dx = 0;\n this.dy = 0;\n }\n\n var _proto = Scroll.prototype;\n\n _proto.setScroll = function setScroll(x, y) {\n this.dx = x - this.x;\n this.dy = y - this.y;\n this.x = x;\n this.y = y;\n return this;\n };\n\n return Scroll;\n}();\n\nfunction testForPassiveScroll() {\n var supportsPassiveOption = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassiveOption = true;\n return true;\n }\n }); // @ts-expect-error\n\n window.addEventListener('test', null, opts); // @ts-expect-error\n\n window.removeEventListener('test', null, opts);\n } catch (e) {}\n\n return supportsPassiveOption;\n}\n\n/**\r\n * -------------------------------------------------------\r\n * Parallax Controller\r\n * -------------------------------------------------------\r\n *\r\n * The global controller for setting up and managing a scroll view of elements.\r\n *\r\n */\n\nvar ParallaxController = /*#__PURE__*/function () {\n function ParallaxController(_ref) {\n var _ref$scrollAxis = _ref.scrollAxis,\n scrollAxis = _ref$scrollAxis === void 0 ? ScrollAxis.vertical : _ref$scrollAxis,\n scrollContainer = _ref.scrollContainer;\n this.scrollAxis = scrollAxis; // All parallax elements to be updated\n\n this.elements = [];\n this._hasScrollContainer = !!scrollContainer;\n this.viewEl = scrollContainer != null ? scrollContainer : window; // Scroll and View\n\n var _this$_getScrollPosit = this._getScrollPosition(),\n x = _this$_getScrollPosit[0],\n y = _this$_getScrollPosit[1];\n\n this.scroll = new Scroll(x, y);\n this.view = new View({\n width: 0,\n height: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n scrollContainer: this._hasScrollContainer ? scrollContainer : undefined\n }); // Ticking\n\n this._ticking = false; // Passive support\n\n this._supportsPassive = testForPassiveScroll(); // Bind methods to class\n\n this._bindAllMethods();\n\n this._addListeners(this.viewEl);\n\n this._addResizeObserver();\n\n this._setViewSize();\n }\n /**\r\n * Static method to instantiate the ParallaxController.\r\n * @returns {Class} ParallaxController\r\n */\n\n\n ParallaxController.init = function init(options) {\n var hasWindow = typeof window !== 'undefined';\n\n if (!hasWindow) {\n throw new Error('Looks like ParallaxController.init() was called on the server. This method must be called on the client.');\n }\n\n return new ParallaxController(options);\n };\n\n var _proto = ParallaxController.prototype;\n\n _proto._bindAllMethods = function _bindAllMethods() {\n var _this = this;\n\n ['_addListeners', '_removeListeners', '_getScrollPosition', '_handleScroll', '_handleUpdateCache', '_updateAllElements', '_updateElementPosition', '_setViewSize', '_addResizeObserver', '_checkIfViewHasChanged', '_getViewParams', 'getElements', 'createElement', 'removeElementById', 'resetElementStyles', 'updateElementPropsById', 'update', 'updateScrollContainer', 'destroy'].forEach(function (method) {\n // @ts-expect-error\n _this[method] = _this[method].bind(_this);\n });\n };\n\n _proto._addListeners = function _addListeners(el) {\n el.addEventListener('scroll', this._handleScroll, this._supportsPassive ? {\n passive: true\n } : false);\n window.addEventListener('resize', this._handleUpdateCache, false);\n window.addEventListener('blur', this._handleUpdateCache, false);\n window.addEventListener('focus', this._handleUpdateCache, false);\n window.addEventListener('load', this._handleUpdateCache, false);\n };\n\n _proto._removeListeners = function _removeListeners(el) {\n var _this$_resizeObserver;\n\n el.removeEventListener('scroll', this._handleScroll, false);\n window.removeEventListener('resize', this._handleUpdateCache, false);\n window.removeEventListener('blur', this._handleUpdateCache, false);\n window.removeEventListener('focus', this._handleUpdateCache, false);\n window.removeEventListener('load', this._handleUpdateCache, false);\n (_this$_resizeObserver = this._resizeObserver) == null ? void 0 : _this$_resizeObserver.disconnect();\n };\n\n _proto._addResizeObserver = function _addResizeObserver() {\n var _this2 = this;\n\n try {\n var observedEl = this._hasScrollContainer ? this.viewEl : document.documentElement;\n this._resizeObserver = new ResizeObserver(function () {\n return _this2.update();\n });\n\n this._resizeObserver.observe(observedEl);\n } catch (e) {\n console.warn('Failed to create the resize observer in the ParallaxContoller');\n }\n };\n\n _proto._getScrollPosition = function _getScrollPosition() {\n // Save current scroll\n // Supports IE 9 and up.\n var nx = this._hasScrollContainer ? // @ts-expect-error\n this.viewEl.scrollLeft : window.pageXOffset;\n var ny = this._hasScrollContainer ? // @ts-expect-error\n this.viewEl.scrollTop : window.pageYOffset;\n return [nx, ny];\n }\n /**\r\n * Window scroll handler sets scroll position\r\n * and then calls '_updateAllElements()'.\r\n */\n ;\n\n _proto._handleScroll = function _handleScroll() {\n var _this$_getScrollPosit2 = this._getScrollPosition(),\n nx = _this$_getScrollPosit2[0],\n ny = _this$_getScrollPosit2[1];\n\n this.scroll.setScroll(nx, ny); // Only called if the last animation request has been\n // completed and there are parallax elements to update\n\n if (!this._ticking && this.elements.length > 0) {\n this._ticking = true; // @ts-ignore\n\n window.requestAnimationFrame(this._updateAllElements);\n }\n }\n /**\r\n * Window resize handler. Sets the new window inner height\r\n * then updates parallax element attributes and positions.\r\n */\n ;\n\n _proto._handleUpdateCache = function _handleUpdateCache() {\n this._setViewSize();\n\n this._updateAllElements({\n updateCache: true\n });\n }\n /**\r\n * Update element positions.\r\n * Determines if the element is in view based on the cached\r\n * attributes, if so set the elements parallax styles.\r\n */\n ;\n\n _proto._updateAllElements = function _updateAllElements(_temp) {\n var _this3 = this;\n\n var _ref2 = _temp === void 0 ? {} : _temp,\n updateCache = _ref2.updateCache;\n\n if (this.elements) {\n this.elements.forEach(function (element) {\n if (updateCache) {\n element.setCachedAttributes(_this3.view, _this3.scroll);\n }\n\n _this3._updateElementPosition(element);\n });\n } // reset ticking so more animations can be called\n\n\n this._ticking = false;\n }\n /**\r\n * Update element positions.\r\n * Determines if the element is in view based on the cached\r\n * attributes, if so set the elements parallax styles.\r\n */\n ;\n\n _proto._updateElementPosition = function _updateElementPosition(element) {\n if (element.props.disabled) return;\n element.updatePosition(this.scroll);\n }\n /**\r\n * Gets the params to set in the View from the scroll container or the window\r\n */\n ;\n\n _proto._getViewParams = function _getViewParams() {\n if (this._hasScrollContainer) {\n // @ts-expect-error\n var _width = this.viewEl.offsetWidth; // @ts-expect-error\n\n var _height = this.viewEl.offsetHeight; // @ts-expect-error\n\n var _scrollHeight = this.viewEl.scrollHeight; // @ts-expect-error\n\n var _scrollWidth = this.viewEl.scrollWidth;\n return this.view.setSize({\n width: _width,\n height: _height,\n scrollHeight: _scrollHeight,\n scrollWidth: _scrollWidth\n });\n }\n\n var html = document.documentElement;\n var width = window.innerWidth || html.clientWidth;\n var height = window.innerHeight || html.clientHeight;\n var scrollHeight = html.scrollHeight;\n var scrollWidth = html.scrollWidth;\n return {\n width: width,\n height: height,\n scrollHeight: scrollHeight,\n scrollWidth: scrollWidth\n };\n }\n /**\r\n * Cache the view attributes\r\n */\n ;\n\n _proto._setViewSize = function _setViewSize() {\n return this.view.setSize(this._getViewParams());\n }\n /**\r\n * Checks if any of the cached attributes of the view have changed.\r\n * @returns boolean\r\n */\n ;\n\n _proto._checkIfViewHasChanged = function _checkIfViewHasChanged() {\n return this.view.hasChanged(this._getViewParams());\n }\n /**\r\n * -------------------------------------------------------\r\n * Public methods\r\n * -------------------------------------------------------\r\n */\n\n /**\r\n * Returns all the parallax elements in the controller\r\n */\n ;\n\n _proto.getElements = function getElements() {\n return this.elements;\n }\n /**\r\n * Creates and returns new parallax element with provided options to be managed by the controller.\r\n */\n ;\n\n _proto.createElement = function createElement(options) {\n var newElement = new Element(_extends({}, options, {\n scrollAxis: this.scrollAxis\n }));\n newElement.setCachedAttributes(this.view, this.scroll);\n this.elements = this.elements ? [].concat(this.elements, [newElement]) : [newElement];\n\n this._updateElementPosition(newElement); // NOTE: This checks if the view has changed then update the controller and all elements if it has\n // This shouldn't always be necessary with a resize observer watching the view element\n // but there seems to be cases where the resize observer does not catch and update.\n\n\n if (this._checkIfViewHasChanged()) {\n this.update();\n }\n\n return newElement;\n }\n /**\r\n * Remove an element by id\r\n */\n ;\n\n _proto.removeElementById = function removeElementById(id) {\n if (!this.elements) return;\n this.elements = this.elements.filter(function (el) {\n return el.id !== id;\n });\n }\n /**\r\n * Updates an existing parallax element object with new options.\r\n */\n ;\n\n _proto.updateElementPropsById = function updateElementPropsById(id, props) {\n if (this.elements) {\n this.elements = this.elements.map(function (el) {\n if (el.id === id) {\n return el.updateProps(props);\n }\n\n return el;\n });\n }\n\n this.update();\n }\n /**\r\n * Remove a target elements parallax styles\r\n */\n ;\n\n _proto.resetElementStyles = function resetElementStyles(element) {\n resetStyles(element);\n }\n /**\r\n * Updates all cached attributes on parallax elements.\r\n */\n ;\n\n _proto.update = function update() {\n // Save the latest scroll position because window.scroll\n // may be called and the handle scroll event may not be called.\n var _this$_getScrollPosit3 = this._getScrollPosition(),\n nx = _this$_getScrollPosit3[0],\n ny = _this$_getScrollPosit3[1];\n\n this.scroll.setScroll(nx, ny);\n\n this._setViewSize();\n\n this._updateAllElements({\n updateCache: true\n });\n }\n /**\r\n * Updates the scroll container of the parallax controller\r\n */\n ;\n\n _proto.updateScrollContainer = function updateScrollContainer(el) {\n // remove existing listeners with current el first\n this._removeListeners(this.viewEl);\n\n this.viewEl = el;\n this._hasScrollContainer = !!el;\n this.view = new View({\n width: 0,\n height: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n scrollContainer: el\n });\n\n this._setViewSize();\n\n this._addListeners(this.viewEl);\n\n this._updateAllElements({\n updateCache: true\n });\n }\n /**\r\n * Disable all parallax elements\r\n */\n ;\n\n _proto.disableAllElements = function disableAllElements() {\n if (this.elements) {\n this.elements = this.elements.map(function (el) {\n return el.updateProps({\n disabled: true\n });\n });\n }\n\n this.update();\n }\n /**\r\n * Enable all parallax elements\r\n */\n ;\n\n _proto.enableAllElements = function enableAllElements() {\n if (this.elements) {\n this.elements = this.elements.map(function (el) {\n return el.updateProps({\n disabled: false\n });\n });\n }\n\n this.update();\n }\n /**\r\n * Removes all listeners and resets all styles on managed elements.\r\n */\n ;\n\n _proto.destroy = function destroy() {\n this._removeListeners(this.viewEl);\n\n if (this.elements) {\n this.elements.forEach(function (element) {\n return resetStyles(element);\n });\n } // @ts-expect-error\n\n\n this.elements = undefined;\n };\n\n return ParallaxController;\n}();\n\nexport { EasingPreset, Element, Limits, ParallaxController, Rect, RotationUnits, ScaleUnits, Scroll, ScrollAxis, Units, ValidCSSEffects, View, createId, getProgressAmount, isElementInView, parseElementTransitionEffects, parseValueAndUnit, resetStyles, scaleBetween, scaleEffectByProgress, setElementStyles, testForPassiveScroll };\n//# sourceMappingURL=parallax-controller.esm.js.map\n","import { ParallaxController, parseValueAndUnit, ScrollAxis } from 'parallax-controller';\nexport { EasingPreset } from 'parallax-controller';\nimport React, { useEffect, useContext, useRef, useState, Component } from 'react';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction removeUndefinedObjectKeys(obj) {\n Object.keys(obj).forEach(function (key) {\n return obj[key] === undefined ? delete obj[key] : {};\n });\n return obj;\n}\n\nvar _excluded = [\"disabled\", \"easing\", \"endScroll\", \"onChange\", \"onEnter\", \"onExit\", \"onProgressChange\", \"opacity\", \"rootMargin\", \"rotate\", \"rotateX\", \"rotateY\", \"rotateZ\", \"scale\", \"scaleX\", \"scaleY\", \"scaleZ\", \"shouldAlwaysCompleteAnimation\", \"shouldDisableScalingTranslations\", \"speed\", \"startScroll\", \"targetElement\", \"translateX\", \"translateY\"];\nfunction getIsolatedParallaxProps(props) {\n var disabled = props.disabled,\n easing = props.easing,\n endScroll = props.endScroll,\n onChange = props.onChange,\n onEnter = props.onEnter,\n onExit = props.onExit,\n onProgressChange = props.onProgressChange,\n opacity = props.opacity,\n rootMargin = props.rootMargin,\n rotate = props.rotate,\n rotateX = props.rotateX,\n rotateY = props.rotateY,\n rotateZ = props.rotateZ,\n scale = props.scale,\n scaleX = props.scaleX,\n scaleY = props.scaleY,\n scaleZ = props.scaleZ,\n shouldAlwaysCompleteAnimation = props.shouldAlwaysCompleteAnimation,\n shouldDisableScalingTranslations = props.shouldDisableScalingTranslations,\n speed = props.speed,\n startScroll = props.startScroll,\n targetElement = props.targetElement,\n translateX = props.translateX,\n translateY = props.translateY,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n var parallaxProps = removeUndefinedObjectKeys({\n disabled: disabled,\n easing: easing,\n endScroll: endScroll,\n onChange: onChange,\n onEnter: onEnter,\n onExit: onExit,\n onProgressChange: onProgressChange,\n opacity: opacity,\n rootMargin: rootMargin,\n rotate: rotate,\n rotateX: rotateX,\n rotateY: rotateY,\n rotateZ: rotateZ,\n scale: scale,\n scaleX: scaleX,\n scaleY: scaleY,\n scaleZ: scaleZ,\n shouldAlwaysCompleteAnimation: shouldAlwaysCompleteAnimation,\n shouldDisableScalingTranslations: shouldDisableScalingTranslations,\n speed: speed,\n startScroll: startScroll,\n targetElement: targetElement,\n translateX: translateX,\n translateY: translateY\n });\n return {\n parallaxProps: parallaxProps,\n rest: rest\n };\n}\n\nfunction useVerifyController(controller) {\n useEffect(function () {\n var isServer = typeof window === 'undefined'; // Make sure the provided controller is an instance of the Parallax Controller\n\n var isInstance = controller instanceof ParallaxController; // Throw if neither context or global is available\n\n if (!isServer && !controller && !isInstance) {\n throw new Error(\"Must wrap your application's components in a .\");\n }\n }, [controller]);\n}\n\nvar ParallaxContext = /*#__PURE__*/React.createContext(null);\n\nfunction useParallaxController() {\n var parallaxController = useContext(ParallaxContext);\n var isServer = typeof window === 'undefined';\n\n if (isServer) {\n return null;\n }\n\n if (!parallaxController) {\n throw new Error('Could not find `react-scroll-parallax` context value. Please ensure the component is wrapped in a ');\n }\n\n return parallaxController;\n}\n\nfunction useParallax(props) {\n var controller = useParallaxController();\n var ref = useRef(null);\n\n var _getIsolatedParallaxP = getIsolatedParallaxProps(props),\n parallaxProps = _getIsolatedParallaxP.parallaxProps;\n\n useVerifyController(controller);\n\n var _useState = useState(),\n element = _useState[0],\n setElement = _useState[1]; // create element\n\n\n useEffect(function () {\n var newElement;\n\n if (ref.current instanceof HTMLElement) {\n var options = {\n el: ref.current,\n props: parallaxProps\n };\n newElement = controller == null ? void 0 : controller.createElement(options);\n setElement(newElement);\n } else {\n throw new Error('You must assign the ref returned by the useParallax() hook to an HTML Element.');\n }\n\n return function () {\n if (newElement) {\n controller == null ? void 0 : controller.removeElementById(newElement.id);\n }\n };\n }, []); // update element\n\n useEffect(function () {\n if (element) {\n if (props.disabled) {\n controller == null ? void 0 : controller.resetElementStyles(element);\n controller == null ? void 0 : controller.updateElementPropsById(element.id, parallaxProps);\n } else {\n controller == null ? void 0 : controller.updateElementPropsById(element.id, parallaxProps);\n }\n }\n }, [props.disabled, props.easing, props.endScroll, props.onChange, props.onEnter, props.onExit, props.onProgressChange, props.opacity, props.rootMargin, props.rotate, props.rotateX, props.rotateY, props.rotateZ, props.scale, props.scaleX, props.scaleY, props.scaleZ, props.shouldAlwaysCompleteAnimation, props.shouldDisableScalingTranslations, props.speed, props.startScroll, props.targetElement, props.translateX, props.translateY]);\n return {\n ref: ref,\n controller: controller,\n element: element\n };\n}\n\nfunction Parallax(props) {\n var _getIsolatedParallaxP = getIsolatedParallaxProps(props),\n parallaxProps = _getIsolatedParallaxP.parallaxProps,\n rest = _getIsolatedParallaxP.rest;\n\n var _useParallax = useParallax(parallaxProps),\n ref = _useParallax.ref;\n\n return React.createElement(\"div\", Object.assign({\n ref: ref\n }, rest), props.children);\n}\n\nvar FALLBACK_RECT = {\n height: 0\n};\nfunction getExpandedStyle(layer) {\n if (Array.isArray(layer.translateY)) {\n var translateYStart = parseValueAndUnit(layer.translateY[0]);\n var translateYEnd = parseValueAndUnit(layer.translateY[1]);\n\n if (translateYStart.unit === 'px' && translateYEnd.unit === 'px') {\n return {\n top: Math.abs(translateYEnd.value) * -1 + \"px\",\n bottom: Math.abs(translateYStart.value) * -1 + \"px\"\n };\n }\n\n if (translateYStart.unit === '%' && translateYEnd.unit === '%') {\n var _layer$targetElement;\n\n var clientRect = ((_layer$targetElement = layer.targetElement) == null ? void 0 : _layer$targetElement.getBoundingClientRect()) || FALLBACK_RECT;\n var top = Math.abs(clientRect.height * 0.01 * translateYEnd.value) * -1;\n var bottom = Math.abs(clientRect.height * 0.01 * translateYStart.value) * -1;\n return {\n top: top + \"px\",\n bottom: bottom + \"px\"\n };\n }\n }\n\n if (layer.speed) {\n var speed = layer.speed || 0;\n return {\n top: Math.abs(speed) * 10 * -1 + 'px',\n bottom: Math.abs(speed) * 10 * -1 + 'px'\n };\n }\n\n return {};\n}\n\nfunction getImageStyle(layer) {\n return layer.image ? {\n backgroundImage: \"url(\" + layer.image + \")\",\n backgroundPosition: 'center',\n backgroundSize: 'cover'\n } : {};\n}\n\nvar _excluded$1 = [\"children\", \"disabled\", \"style\", \"expanded\", \"image\", \"testId\"];\nvar absoluteStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n};\nvar ParallaxBannerLayer = function ParallaxBannerLayer(props) {\n var _getIsolatedParallaxP = getIsolatedParallaxProps(props),\n parallaxProps = _getIsolatedParallaxP.parallaxProps,\n rest = _getIsolatedParallaxP.rest;\n\n var style = rest.style,\n _rest$expanded = rest.expanded,\n expanded = _rest$expanded === void 0 ? true : _rest$expanded,\n testId = rest.testId,\n divProps = _objectWithoutPropertiesLoose(rest, _excluded$1);\n\n var imageStyle = getImageStyle(props);\n var expandedStyle = expanded ? getExpandedStyle(props) : {};\n var parallax = useParallax(_extends({\n targetElement: props.targetElement,\n shouldDisableScalingTranslations: true\n }, parallaxProps));\n return React.createElement(\"div\", Object.assign({\n \"data-testid\": testId,\n ref: parallax.ref,\n style: _extends({}, imageStyle, absoluteStyle, expandedStyle, style)\n }, divProps), rest.children);\n};\n\nvar _excluded$2 = [\"disabled\", \"style\", \"layers\"];\nvar containerStyle = {\n position: 'relative',\n overflow: 'hidden',\n width: '100%'\n};\nvar ParallaxBanner = function ParallaxBanner(props) {\n var _useState = useState(null),\n targetElement = _useState[0],\n setTargetElement = _useState[1];\n\n var containerRef = useRef(null);\n useEffect(function () {\n setTargetElement(containerRef.current);\n }, []);\n\n var rootStyle = props.style,\n _props$layers = props.layers,\n layers = _props$layers === void 0 ? [] : _props$layers,\n rootRest = _objectWithoutPropertiesLoose(props, _excluded$2);\n\n function renderLayers() {\n if (targetElement) {\n var shouldUseLayers = layers && layers.length > 0;\n\n if (shouldUseLayers) {\n return layers.map(function (layer, i) {\n return React.createElement(ParallaxBannerLayer, Object.assign({}, layer, {\n targetElement: targetElement,\n key: \"layer-\" + i,\n testId: \"layer-\" + i\n }));\n });\n }\n }\n\n return null;\n }\n\n function renderChildren() {\n if (targetElement) {\n return React.Children.map(props.children, function (child) {\n var item = child; // adds the targetElement prop to any ParallaxBannerLayer components\n\n if ((item == null ? void 0 : item.type) === ParallaxBannerLayer) {\n var clone = React.cloneElement(item, {\n targetElement: targetElement\n });\n return clone;\n }\n\n return child;\n });\n }\n\n return null;\n }\n\n return React.createElement(\"div\", Object.assign({\n ref: containerRef,\n style: _extends({}, containerStyle, rootStyle)\n }, rootRest), renderLayers(), renderChildren());\n};\n\nvar createController = function createController(options) {\n // Don't initialize on the server\n var isServer = typeof window === 'undefined';\n\n if (!isServer) {\n // Must not be the server so kick it off...\n return ParallaxController.init(options);\n }\n\n return null;\n};\n\nvar ParallaxProvider = /*#__PURE__*/function (_Component) {\n _inheritsLoose(ParallaxProvider, _Component);\n\n function ParallaxProvider(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n _this.controller = createController({\n scrollAxis: props.scrollAxis,\n scrollContainer: props.scrollContainer\n });\n return _this;\n }\n\n var _proto = ParallaxProvider.prototype;\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (prevProps.scrollContainer !== this.props.scrollContainer) {\n // @ts-ignore\n this.controller.updateScrollContainer(this.props.scrollContainer);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // @ts-ignore\n this.controller = this.controller.destroy();\n };\n\n _proto.render = function render() {\n var children = this.props.children;\n return (// @ts-ignore\n React.createElement(ParallaxContext.Provider, {\n value: this.controller\n }, children)\n );\n };\n\n return ParallaxProvider;\n}(Component);\nParallaxProvider.defaultProps = {\n scrollAxis: ScrollAxis.vertical\n};\n\nexport { Parallax, ParallaxBanner, ParallaxBannerLayer, ParallaxContext, ParallaxProvider, useParallax, useParallaxController };\n//# sourceMappingURL=react-scroll-parallax.esm.js.map\n"],"names":["kSampleStepSize","float32ArraySupported","Float32Array","A","aA1","aA2","B","C","calcBezier","aT","getSlope","LinearEasing","x","module","exports","mX1","mY1","mX2","mY2","Error","sampleValues","Array","i","getTForX","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","Math","abs","binarySubdivide","ValidCSSEffects","Units","RotationUnits","ScaleUnits","ScrollAxis","EasingPreset","Limits","properties","this","startX","startY","endX","endY","totalX","totalY","startMultiplierX","endMultiplierX","startMultiplierY","endMultiplierY","_extends","Object","assign","target","arguments","length","source","key","prototype","hasOwnProperty","call","apply","id","Rect","options","rect","el","getBoundingClientRect","view","scrollContainer","scrollRect","top","right","left","bottom","height","offsetHeight","width","offsetWidth","rootMargin","_setRectWithRootMargin","totalRootY","totalRootX","VALID_UNITS","px","deg","turn","rad","str","defaultUnit","out","value","unit","String","parseFloat","match","includes","easingPresets","ease","easeIn","easeOut","easeInOut","easeInQuad","easeInCubic","easeInQuart","easeInQuint","easeInSine","easeInExpo","easeInCirc","easeOutQuad","easeOutCubic","easeOutQuart","easeOutQuint","easeOutSine","easeOutExpo","easeOutCirc","easeInOutQuad","easeInOutCubic","easeInOutQuart","easeInOutQuint","easeInOutSine","easeInOutExpo","easeInOutCirc","easeInBack","easeOutBack","easeInOutBack","createEasingFunction","easing","isArray","params","PARALLAX_EFFECTS","values","MAP_EFFECT_TO_DEFAULT_UNIT","speed","translateX","translateY","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","opacity","parseElementTransitionEffects","props","scrollAxis","parsedEffects","forEach","defaultValue","endSpeed","startParsed","endParsed","speedConfig","start","end","vertical","horizontal","_value","_startParsed","_endParsed","getProgressAmount","totalDist","currentScroll","amount","scaleEffectByProgress","effect","progress","newMin","newMax","oldMin","oldMax","scaleBetween","TRANSFORM_EFFECTS","filter","v","setElementStyles","effects","transform","reduce","acc","scaledEffect","getTransformStyles","scaledOpacity","getOpacityStyles","style","resetStyles","element","getTranslateScalar","startTranslatePx","endTranslatePx","slow","totalDistTrue","max","getStartEndValueInPx","translate","elementSize","startScale","endScale","window","innerWidth","_startScale","_endScale","innerHeight","DEFAULT_VALUE","clamp","num","min","Element","isInView","_setElementEasing","willChange","keys","setWillChangeStyles","_proto","updateProps","nextProps","setCachedAttributes","scroll","targetElement","shouldScaleTranslateEffects","shouldDisableScalingTranslations","startScroll","endScroll","limits","_setElementStyles","shouldAlwaysCompleteAnimation","_getStartEndValueInPx","startTranslateXPx","endTranslateXPx","_getStartEndValueInPx2","startTranslateYPx","endTranslateYPx","y","topBeginsInView","leftBeginsInView","bottomEndsInView","scrollHeight","rightEndsInView","scrollWidth","createLimitsWithTranslationsForRelativeElements","scaledEffects","effectsCopy","scaleTranslateEffectsForSlowerScroll","createLimitsForRelativeElements","_updateElementIsInView","nextIsInView","isFirstChange","onEnter","_setFinalProgress","onExit","finalProgress","round","_updateElementProgress","disabled","nextProgress","onProgressChange","onChange","updatePosition","isVertical","total","s","isElementInView","View","config","hasChanged","setSize","Scroll","dx","dy","setScroll","ParallaxController","_ref","_ref$scrollAxis","elements","_hasScrollContainer","viewEl","_this$_getScrollPosit","_getScrollPosition","undefined","_ticking","_supportsPassive","supportsPassiveOption","opts","defineProperty","get","addEventListener","removeEventListener","e","testForPassiveScroll","_bindAllMethods","_addListeners","_addResizeObserver","_setViewSize","init","_this","method","bind","_handleScroll","passive","_handleUpdateCache","_removeListeners","_this$_resizeObserver","_resizeObserver","disconnect","_this2","observedEl","document","documentElement","ResizeObserver","update","observe","console","warn","scrollLeft","pageXOffset","scrollTop","pageYOffset","_this$_getScrollPosit2","nx","ny","requestAnimationFrame","_updateAllElements","updateCache","_temp","_this3","_updateElementPosition","_getViewParams","_width","_height","_scrollHeight","_scrollWidth","html","clientWidth","clientHeight","_checkIfViewHasChanged","getElements","createElement","newElement","concat","removeElementById","updateElementPropsById","map","resetElementStyles","_this$_getScrollPosit3","updateScrollContainer","disableAllElements","enableAllElements","destroy","_setPrototypeOf","o","p","setPrototypeOf","__proto__","ParallaxContext","ParallaxProvider","_Component","subClass","superClass","controller","create","constructor","componentDidUpdate","prevProps","componentWillUnmount","render","children","Provider","Component","defaultProps"],"sourceRoot":""}