react-ui-animate 3.0.0-rc.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +68 -30
  2. package/dist/animation/animationType.d.ts +16 -0
  3. package/dist/animation/helpers/index.d.ts +2 -0
  4. package/dist/animation/helpers/isDefined.d.ts +1 -0
  5. package/dist/animation/{lib/index.d.ts → index.d.ts} +3 -1
  6. package/dist/animation/{lib/interpolation.d.ts → interpolation.d.ts} +4 -3
  7. package/dist/animation/{lib/modules → modules}/AnimatedBlock.d.ts +2 -2
  8. package/dist/animation/{lib/modules → modules}/AnimatedImage.d.ts +2 -2
  9. package/dist/animation/{lib/modules → modules}/AnimatedInline.d.ts +2 -2
  10. package/dist/animation/{lib/modules → modules}/MountedBlock.d.ts +3 -2
  11. package/dist/animation/{lib/modules → modules}/ScrollableBlock.d.ts +2 -3
  12. package/dist/animation/{lib/modules → modules}/TransitionBlock.d.ts +2 -3
  13. package/dist/animation/{lib/useAnimatedValue.d.ts → useAnimatedValue.d.ts} +7 -2
  14. package/dist/animation/{lib/useMountedValue.d.ts → useMountedValue.d.ts} +1 -1
  15. package/dist/animation/withFunctions.d.ts +63 -0
  16. package/dist/index.d.ts +6 -6
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/package.json +4 -1
  20. package/dist/animation/core/controllers/Animation.d.ts +0 -16
  21. package/dist/animation/core/controllers/FluidValue.d.ts +0 -32
  22. package/dist/animation/core/controllers/RequestAnimationFrame.d.ts +0 -8
  23. package/dist/animation/core/controllers/SpringAnimation.d.ts +0 -41
  24. package/dist/animation/core/controllers/TimingAnimation.d.ts +0 -35
  25. package/dist/animation/core/easing/Bezier.d.ts +0 -8
  26. package/dist/animation/core/easing/Easing.d.ts +0 -40
  27. package/dist/animation/core/helpers/camelCaseToKebabCase.d.ts +0 -8
  28. package/dist/animation/core/helpers/getCleanProps.d.ts +0 -10
  29. package/dist/animation/core/helpers/getCssValue.d.ts +0 -8
  30. package/dist/animation/core/helpers/index.d.ts +0 -5
  31. package/dist/animation/core/helpers/isDefined.d.ts +0 -12
  32. package/dist/animation/core/helpers/isFluidValue.d.ts +0 -10
  33. package/dist/animation/core/index.d.ts +0 -11
  34. package/dist/animation/core/interpolation/Colors.d.ts +0 -25
  35. package/dist/animation/core/interpolation/Interpolation.d.ts +0 -80
  36. package/dist/animation/core/interpolation/__tests__/Colors.test.d.ts +0 -1
  37. package/dist/animation/core/react/fluid.d.ts +0 -6
  38. package/dist/animation/core/react/makeFluid.d.ts +0 -30
  39. package/dist/animation/core/react/transforms.d.ts +0 -6
  40. package/dist/animation/core/react/useFluidValue.d.ts +0 -9
  41. package/dist/animation/core/react/useMount.d.ts +0 -20
  42. package/dist/animation/lib/animationType.d.ts +0 -15
  43. package/dist/animation/lib/getInitialConfig.d.ts +0 -3
  44. package/dist/utils/index.d.ts +0 -1
  45. /package/dist/{utils → animation/helpers}/delay.d.ts +0 -0
  46. /package/dist/animation/{lib/modules → modules}/index.d.ts +0 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/animation/core/controllers/Animation.ts","../src/animation/core/controllers/RequestAnimationFrame.ts","../src/animation/core/controllers/SpringAnimation.ts","../src/animation/core/easing/Bezier.ts","../src/animation/core/easing/Easing.ts","../src/animation/core/controllers/TimingAnimation.ts","../src/animation/core/interpolation/Colors.ts","../src/animation/core/helpers/isDefined.ts","../src/animation/core/helpers/isFluidValue.ts","../src/animation/core/helpers/getCssValue.ts","../src/animation/core/interpolation/Interpolation.ts","../src/animation/core/react/transforms.ts","../src/animation/core/react/makeFluid.ts","../src/animation/core/helpers/camelCaseToKebabCase.ts","../src/animation/core/helpers/getCleanProps.ts","../src/animation/core/react/fluid.ts","../src/animation/core/controllers/FluidValue.ts","../src/animation/core/react/useFluidValue.ts","../src/animation/lib/modules/AnimatedBlock.ts","../src/animation/lib/modules/AnimatedInline.ts","../src/animation/lib/modules/AnimatedImage.ts","../src/animation/lib/useMountedValue.ts","../src/animation/core/react/useMount.ts","../src/animation/lib/modules/MountedBlock.tsx","../src/animation/lib/getInitialConfig.ts","../src/animation/lib/animationType.ts","../src/animation/lib/useAnimatedValue.ts","../src/gestures/helpers/math.ts","../src/gestures/helpers/eventAttacher.ts","../src/gestures/helpers/withDefault.ts","../src/gestures/controllers/Gesture.ts","../src/gestures/controllers/DragGesture.ts","../src/gestures/controllers/MouseMoveGesture.ts","../src/gestures/controllers/ScrollGesture.ts","../src/gestures/controllers/WheelGesture.ts","../src/gestures/hooks/useRecognizer.ts","../src/animation/lib/modules/ScrollableBlock.tsx","../src/animation/lib/modules/TransitionBlock.tsx","../src/animation/lib/interpolation.ts","../src/utils/delay.ts","../src/gestures/hooks/useDrag.ts","../src/gestures/hooks/useGesture.ts","../src/hooks/useMeasure.ts","../src/gestures/hooks/useMouseMove.ts","../src/hooks/useOutsideClick.ts","../src/gestures/hooks/useScroll.ts","../src/gestures/hooks/useWheel.ts","../src/hooks/useWindowDimension.ts"],"sourcesContent":["import type { ResultType } from '../types/animation';\n\n/**\n * Base Animation class\n */\nexport class Animation {\n _active: boolean;\n _onEnd: any;\n /**\n * it is necessary to add _onRest function as well\n * because _onEnd is always re-assigned with onUpdate callback\n * so that _onRest function is not fired, so we have to duplicate it\n */\n _onRest?: any;\n\n _debounceOnEnd(result: ResultType) {\n const onEnd = this._onEnd;\n const onRest = this._onRest;\n this._onEnd = null;\n this._onRest = null;\n\n onRest && onRest(result);\n onEnd && onEnd(result);\n }\n\n stop() {}\n}\n","export const RequestAnimationFrame = {\n current: (cb: any) => window.requestAnimationFrame(cb),\n inject(injected: any) {\n RequestAnimationFrame.current = injected;\n },\n};\n\nexport const CancelAnimationFrame = {\n current: (id: any) => window.cancelAnimationFrame(id),\n inject(injected: any) {\n CancelAnimationFrame.current = injected;\n },\n};\n","import { Animation } from './Animation';\nimport {\n RequestAnimationFrame,\n CancelAnimationFrame,\n} from './RequestAnimationFrame';\n\nimport type { FluidValueConfig, ResultType } from '../types/animation';\n\n/**\n * Class implementing spring based animation\n */\nexport class SpringAnimation extends Animation {\n _overshootClamping: boolean;\n _restDisplacementThreshold: number;\n _restSpeedThreshold: number;\n _initialVelocity?: number;\n _lastVelocity: number;\n _startPosition: number;\n _lastPosition: number;\n _position: number;\n _fromValue: number;\n _toValue: any;\n _mass: number;\n _tension: number;\n _friction: number;\n _lastTime: number;\n _onFrame: (value: number) => void;\n _animationFrame: any;\n _timeout: any;\n\n // Modifiers\n _delay: number;\n _onRest?: (value: ResultType) => void;\n _onChange?: (value: number) => void;\n\n constructor({\n initialPosition,\n config,\n }: {\n initialPosition: number;\n config?: Omit<FluidValueConfig, 'duration' | 'easing'>;\n }) {\n super();\n\n this._overshootClamping = false;\n this._initialVelocity = 0;\n this._lastVelocity = 0;\n this._startPosition = initialPosition;\n this._position = this._startPosition;\n\n this._restDisplacementThreshold = config?.restDistance ?? 0.001;\n this._restSpeedThreshold = config?.restDistance ?? 0.001;\n this._mass = config?.mass ?? 1;\n this._tension = config?.tension ?? 170;\n this._friction = config?.friction ?? 26;\n this._delay = config?.delay ?? 0;\n\n this._onRest = config?.onRest;\n this._onChange = config?.onChange;\n }\n\n onChange(value: number) {\n this._onFrame(value);\n\n if (this._lastPosition !== value) {\n if (this._onChange) {\n this._onChange(value);\n }\n }\n\n this._lastPosition = value;\n }\n\n onUpdate() {\n var now = Date.now();\n\n const deltaTime = Math.min(now - this._lastTime, 64);\n this._lastTime = now;\n\n const c = this._friction;\n const m = this._mass;\n const k = this._tension;\n\n const v0 = -this._lastVelocity;\n const x0 = this._toValue - this._position;\n\n const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n const omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay\n\n const t = deltaTime / 1000;\n\n const sin1 = Math.sin(omega1 * t);\n const cos1 = Math.cos(omega1 * t);\n\n // under damped\n const underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n const underDampedFrag1 =\n underDampedEnvelope *\n (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\n const underDampedPosition = this._toValue - underDampedFrag1;\n // This looks crazy -- it's actually just the derivative of the oscillation function\n const underDampedVelocity =\n zeta * omega0 * underDampedFrag1 -\n underDampedEnvelope *\n (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\n // critically damped\n const criticallyDampedEnvelope = Math.exp(-omega0 * t);\n const criticallyDampedPosition =\n this._toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\n const criticallyDampedVelocity =\n criticallyDampedEnvelope *\n (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\n this.onChange(this._position);\n\n const isOvershooting = () => {\n if (this._overshootClamping && this._tension !== 0) {\n return this._position < this._toValue\n ? this._position > this._toValue\n : this._position < this._toValue;\n } else {\n return false;\n }\n };\n\n const isVelocity = Math.abs(this._lastVelocity) < this._restSpeedThreshold;\n const isDisplacement =\n this._tension === 0 ||\n Math.abs(this._toValue - this._position) <\n this._restDisplacementThreshold;\n\n if (zeta < 1) {\n this._position = underDampedPosition;\n this._lastVelocity = underDampedVelocity;\n } else {\n this._position = criticallyDampedPosition;\n this._lastVelocity = criticallyDampedVelocity;\n }\n\n if (isOvershooting() || (isVelocity && isDisplacement)) {\n if (this._tension !== 0) {\n this._lastVelocity = 0;\n this._position = this._toValue;\n\n this.onChange(this._position);\n }\n // clear lastTimestamp to avoid using stale value by the next spring animation that starts after this one\n this._lastTime = 0;\n\n this._debounceOnEnd({ finished: true, value: this._toValue });\n\n return;\n }\n\n this._animationFrame = RequestAnimationFrame.current(\n this.onUpdate.bind(this)\n );\n }\n\n stop() {\n this._active = false;\n clearTimeout(this._timeout);\n CancelAnimationFrame.current(this._animationFrame);\n this._debounceOnEnd({ finished: false, value: this._position });\n }\n\n // Set value\n set(toValue: number) {\n this.stop();\n this._position = toValue;\n this._lastTime = 0;\n this._lastVelocity = 0;\n this.onChange(toValue);\n }\n\n start({\n toValue,\n onFrame,\n previousAnimation,\n onEnd,\n }: {\n toValue: number;\n onFrame: (value: number) => void;\n previousAnimation?: SpringAnimation;\n onEnd?: (result: ResultType) => void;\n }) {\n const onStart: any = () => {\n this._onFrame = onFrame;\n this._active = true;\n this._toValue = toValue;\n this._onEnd = onEnd;\n\n const now = Date.now();\n\n if (previousAnimation instanceof SpringAnimation) {\n this._lastVelocity =\n previousAnimation._lastVelocity || this._lastVelocity || 0;\n this._lastTime = previousAnimation._lastTime || now;\n } else {\n this._lastTime = now;\n }\n\n this._animationFrame = RequestAnimationFrame.current(\n this.onUpdate.bind(this)\n );\n };\n\n if (this._delay !== 0) {\n this._timeout = setTimeout(() => onStart(), this._delay);\n } else {\n onStart();\n }\n }\n}\n","/**\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: number, aA2: number) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1: number, aA2: number) {\n return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1: number) {\n return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: number, aA2: number) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: number, aA2: number) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(\n aX: number,\n aA: number,\n aB: number,\n mX1: number,\n mX2: number\n) {\n var currentX,\n currentT,\n 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 (\n Math.abs(currentX) > SUBDIVISION_PRECISION &&\n ++i < SUBDIVISION_MAX_ITERATIONS\n );\n return currentT;\n}\n\nfunction newtonRaphsonIterate(\n aX: number,\n aGuessT: number,\n mX1: number,\n mX2: number\n) {\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: number) {\n return x;\n}\n\nfunction bezier(mX1: number, mY1: number, mX2: number, mY2: number) {\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\n ? new Float32Array(kSplineTableSize)\n : 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: number) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (\n ;\n currentSample !== lastSample && sampleValues[currentSample] <= aX;\n ++currentSample\n ) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist =\n (aX - sampleValues[currentSample]) /\n (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(\n aX,\n intervalStart,\n intervalStart + kSampleStepSize,\n mX1,\n mX2\n );\n }\n }\n\n return function BezierEasing(x: number) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0 || x === 1) {\n return x;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n}\n\nexport { bezier };\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { bezier as _bezier } from \"./Bezier\";\n\n/**\n * This class implements common easing functions. The math is pretty obscure,\n * but this cool website has nice visual illustrations of what they represent:\n * http://xaedes.de/dev/transitions/\n */\nexport class Easing {\n static step0(n: number) {\n return n > 0 ? 1 : 0;\n }\n\n static step1(n: number) {\n return n >= 1 ? 1 : 0;\n }\n\n static linear(t: number) {\n return t;\n }\n\n static ease(t: number): number {\n return ease(t);\n }\n\n static quad(t: number) {\n return t * t;\n }\n\n static cubic(t: number) {\n return t * t * t;\n }\n\n static poly(n: number) {\n return (t: number) => Math.pow(t, n);\n }\n\n static sin(t: number) {\n return 1 - Math.cos((t * Math.PI) / 2);\n }\n\n static circle(t: number) {\n return 1 - Math.sqrt(1 - t * t);\n }\n\n static exp(t: number) {\n return Math.pow(2, 10 * (t - 1));\n }\n\n /**\n * A simple elastic interaction, similar to a spring. Default bounciness\n * is 1, which overshoots a little bit once. 0 bounciness doesn't overshoot\n * at all, and bounciness of N > 1 will overshoot about N times.\n *\n * Wolfram Plots:\n *\n * http://tiny.cc/elastic_b_1 (default bounciness = 1)\n * http://tiny.cc/elastic_b_3 (bounciness = 3)\n */\n static elastic(bounciness: number = 1): (t: number) => number {\n var p = bounciness * Math.PI;\n return (t) =>\n 1 - Math.pow(Math.cos((t * Math.PI) / 2), 3) * Math.cos(t * p);\n }\n\n static back(s: number): (t: number) => number {\n if (s === undefined) {\n s = 1.70158;\n }\n return (t) => t * t * ((s + 1) * t - s);\n }\n\n static bounce(t: number): number {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n\n if (t < 2 / 2.75) {\n t -= 1.5 / 2.75;\n return 7.5625 * t * t + 0.75;\n }\n\n if (t < 2.5 / 2.75) {\n t -= 2.25 / 2.75;\n return 7.5625 * t * t + 0.9375;\n }\n\n t -= 2.625 / 2.75;\n return 7.5625 * t * t + 0.984375;\n }\n\n static bezier(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n ): (t: number) => number {\n return _bezier(x1, y1, x2, y2);\n }\n\n static in(easing: (t: number) => number): (t: number) => number {\n return easing;\n }\n\n /**\n * Runs an easing function backwards.\n */\n static out(easing: (t: number) => number): (t: number) => number {\n return (t) => 1 - easing(1 - t);\n }\n\n /**\n * Makes any easing function symmetrical.\n */\n static inOut(easing: (t: number) => number): (t: number) => number {\n return (t) => {\n if (t < 0.5) {\n return easing(t * 2) / 2;\n }\n return 1 - easing((1 - t) * 2) / 2;\n };\n }\n}\n\nvar ease = Easing.bezier(0.42, 0, 1, 1);\n","import { Animation } from './Animation';\nimport {\n RequestAnimationFrame,\n CancelAnimationFrame,\n} from './RequestAnimationFrame';\nimport { Easing } from '../easing/Easing';\n\nimport type { FluidValueConfig, ResultType } from '../types/animation';\n\n/**\n * Class implementing timing based animation\n */\nexport class TimingAnimation extends Animation {\n _startTime: number;\n _fromValue: number;\n _toValue: any;\n _duration: number;\n _easing: (value: number) => number;\n _onFrame: (value: number) => void;\n _animationFrame: any;\n _timeout: any;\n _lastPosition: number;\n _position: number;\n\n // Modifiers\n _delay: number;\n _tempDuration: number;\n _onRest?: (value: ResultType) => void;\n _onChange?: (value: number) => void;\n\n constructor({\n initialPosition,\n config,\n }: {\n initialPosition: number;\n config?: Omit<FluidValueConfig, 'mass' | 'friction' | 'tension'>;\n }) {\n super();\n\n this._fromValue = initialPosition;\n this._position = this._fromValue;\n this._easing = config?.easing ?? Easing.linear;\n this._duration = config?.duration ?? 500;\n this._tempDuration = this._duration;\n\n // Modifiers\n // here immediate acts like duration: 0\n if (config?.immediate) {\n this._duration = 0;\n }\n\n this._delay = config?.delay ?? 0;\n this._onRest = config?.onRest;\n this._onChange = config?.onChange;\n }\n\n onChange(value: number) {\n this._onFrame(value);\n\n if (this._lastPosition !== value) {\n if (this._onChange) {\n this._onChange(value);\n }\n }\n\n this._lastPosition = value;\n }\n\n onUpdate() {\n const now = Date.now();\n\n const runTime = now - this._startTime;\n\n if (runTime >= this._duration) {\n this._startTime = 0;\n this._position = this._toValue;\n\n this.onChange(this._position);\n\n this._debounceOnEnd({ finished: true, value: this._position });\n return;\n }\n\n const progress = this._easing(runTime / this._duration);\n\n this._position =\n this._fromValue + (this._toValue - this._fromValue) * progress;\n\n this.onChange(this._position);\n\n this._animationFrame = RequestAnimationFrame.current(\n this.onUpdate.bind(this)\n );\n }\n\n stop() {\n this._active = false;\n clearTimeout(this._timeout);\n CancelAnimationFrame.current(this._animationFrame);\n this._debounceOnEnd({ finished: false, value: this._position });\n }\n\n // Set value\n set(toValue: number) {\n this.stop();\n this._position = toValue;\n this.onChange(toValue);\n }\n\n start({\n toValue,\n onFrame,\n previousAnimation,\n onEnd,\n }: {\n toValue: number;\n onFrame: (value: number) => void;\n previousAnimation?: TimingAnimation;\n onEnd?: (result: ResultType) => void;\n }) {\n const onStart: any = () => {\n this._onFrame = onFrame;\n this._active = true;\n this._onEnd = onEnd;\n this._toValue = toValue;\n\n if (\n previousAnimation &&\n previousAnimation instanceof TimingAnimation &&\n previousAnimation._toValue === toValue &&\n previousAnimation._startTime\n ) {\n this._startTime = previousAnimation._startTime;\n this._fromValue = previousAnimation._fromValue;\n } else {\n const now = Date.now();\n this._startTime = now;\n this._fromValue = this._position;\n }\n\n this._animationFrame = RequestAnimationFrame.current(\n this.onUpdate.bind(this)\n );\n };\n\n if (this._delay !== 0) {\n this._timeout = setTimeout(() => onStart(), this._delay);\n } else {\n onStart();\n }\n }\n}\n","export const COLOR_NUMBER_REGEX =\n /[+-]?\\d+(\\.\\d+)?|[\\s]?\\.\\d+|#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})/gi;\nexport const HEX_NAME_COLOR =\n /#[a-f\\d]{3,}|transparent|aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|burntsienna|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen/gi;\n\ninterface classNameType {\n [name: string]: string;\n}\n\n// Named colors\nexport const colorNames: classNameType = {\n transparent: \"#00000000\",\n aliceblue: \"#f0f8ffff\",\n antiquewhite: \"#faebd7ff\",\n aqua: \"#00ffffff\",\n aquamarine: \"#7fffd4ff\",\n azure: \"#f0ffffff\",\n beige: \"#f5f5dcff\",\n bisque: \"#ffe4c4ff\",\n black: \"#000000ff\",\n blanchedalmond: \"#ffebcdff\",\n blue: \"#0000ffff\",\n blueviolet: \"#8a2be2ff\",\n brown: \"#a52a2aff\",\n burlywood: \"#deb887ff\",\n burntsienna: \"#ea7e5dff\",\n cadetblue: \"#5f9ea0ff\",\n chartreuse: \"#7fff00ff\",\n chocolate: \"#d2691eff\",\n coral: \"#ff7f50ff\",\n cornflowerblue: \"#6495edff\",\n cornsilk: \"#fff8dcff\",\n crimson: \"#dc143cff\",\n cyan: \"#00ffffff\",\n darkblue: \"#00008bff\",\n darkcyan: \"#008b8bff\",\n darkgoldenrod: \"#b8860bff\",\n darkgray: \"#a9a9a9ff\",\n darkgreen: \"#006400ff\",\n darkgrey: \"#a9a9a9ff\",\n darkkhaki: \"#bdb76bff\",\n darkmagenta: \"#8b008bff\",\n darkolivegreen: \"#556b2fff\",\n darkorange: \"#ff8c00ff\",\n darkorchid: \"#9932ccff\",\n darkred: \"#8b0000ff\",\n darksalmon: \"#e9967aff\",\n darkseagreen: \"#8fbc8fff\",\n darkslateblue: \"#483d8bff\",\n darkslategray: \"#2f4f4fff\",\n darkslategrey: \"#2f4f4fff\",\n darkturquoise: \"#00ced1ff\",\n darkviolet: \"#9400d3ff\",\n deeppink: \"#ff1493ff\",\n deepskyblue: \"#00bfffff\",\n dimgray: \"#696969ff\",\n dimgrey: \"#696969ff\",\n dodgerblue: \"#1e90ffff\",\n firebrick: \"#b22222ff\",\n floralwhite: \"#fffaf0ff\",\n forestgreen: \"#228b22ff\",\n fuchsia: \"#ff00ffff\",\n gainsboro: \"#dcdcdcff\",\n ghostwhite: \"#f8f8ffff\",\n gold: \"#ffd700ff\",\n goldenrod: \"#daa520ff\",\n gray: \"#808080ff\",\n green: \"#008000ff\",\n greenyellow: \"#adff2fff\",\n grey: \"#808080ff\",\n honeydew: \"#f0fff0ff\",\n hotpink: \"#ff69b4ff\",\n indianred: \"#cd5c5cff\",\n indigo: \"#4b0082ff\",\n ivory: \"#fffff0ff\",\n khaki: \"#f0e68cff\",\n lavender: \"#e6e6faff\",\n lavenderblush: \"#fff0f5ff\",\n lawngreen: \"#7cfc00ff\",\n lemonchiffon: \"#fffacdff\",\n lightblue: \"#add8e6ff\",\n lightcoral: \"#f08080ff\",\n lightcyan: \"#e0ffffff\",\n lightgoldenrodyellow: \"#fafad2ff\",\n lightgray: \"#d3d3d3ff\",\n lightgreen: \"#90ee90ff\",\n lightgrey: \"#d3d3d3ff\",\n lightpink: \"#ffb6c1ff\",\n lightsalmon: \"#ffa07aff\",\n lightseagreen: \"#20b2aaff\",\n lightskyblue: \"#87cefaff\",\n lightslategray: \"#778899ff\",\n lightslategrey: \"#778899ff\",\n lightsteelblue: \"#b0c4deff\",\n lightyellow: \"#ffffe0ff\",\n lime: \"#00ff00ff\",\n limegreen: \"#32cd32ff\",\n linen: \"#faf0e6ff\",\n magenta: \"#ff00ffff\",\n maroon: \"#800000ff\",\n mediumaquamarine: \"#66cdaaff\",\n mediumblue: \"#0000cdff\",\n mediumorchid: \"#ba55d3ff\",\n mediumpurple: \"#9370dbff\",\n mediumseagreen: \"#3cb371ff\",\n mediumslateblue: \"#7b68eeff\",\n mediumspringgreen: \"#00fa9aff\",\n mediumturquoise: \"#48d1ccff\",\n mediumvioletred: \"#c71585ff\",\n midnightblue: \"#191970ff\",\n mintcream: \"#f5fffaff\",\n mistyrose: \"#ffe4e1ff\",\n moccasin: \"#ffe4b5ff\",\n navajowhite: \"#ffdeadff\",\n navy: \"#000080ff\",\n oldlace: \"#fdf5e6ff\",\n olive: \"#808000ff\",\n olivedrab: \"#6b8e23ff\",\n orange: \"#ffa500ff\",\n orangered: \"#ff4500ff\",\n orchid: \"#da70d6ff\",\n palegoldenrod: \"#eee8aaff\",\n palegreen: \"#98fb98ff\",\n paleturquoise: \"#afeeeeff\",\n palevioletred: \"#db7093ff\",\n papayawhip: \"#ffefd5ff\",\n peachpuff: \"#ffdab9ff\",\n peru: \"#cd853fff\",\n pink: \"#ffc0cbff\",\n plum: \"#dda0ddff\",\n powderblue: \"#b0e0e6ff\",\n purple: \"#800080ff\",\n rebeccapurple: \"#663399ff\",\n red: \"#ff0000ff\",\n rosybrown: \"#bc8f8fff\",\n royalblue: \"#4169e1ff\",\n saddlebrown: \"#8b4513ff\",\n salmon: \"#fa8072ff\",\n sandybrown: \"#f4a460ff\",\n seagreen: \"#2e8b57ff\",\n seashell: \"#fff5eeff\",\n sienna: \"#a0522dff\",\n silver: \"#c0c0c0ff\",\n skyblue: \"#87ceebff\",\n slateblue: \"#6a5acdff\",\n slategray: \"#708090ff\",\n slategrey: \"#708090ff\",\n snow: \"#fffafaff\",\n springgreen: \"#00ff7fff\",\n steelblue: \"#4682b4ff\",\n tan: \"#d2b48cff\",\n teal: \"#008080ff\",\n thistle: \"#d8bfd8ff\",\n tomato: \"#ff6347ff\",\n turquoise: \"#40e0d0ff\",\n violet: \"#ee82eeff\",\n wheat: \"#f5deb3ff\",\n white: \"#ffffffff\",\n whitesmoke: \"#f5f5f5ff\",\n yellow: \"#ffff00ff\",\n yellowgreen: \"#9acd32ff\",\n};\n\nfunction conv3to6(hex: string) {\n const regex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\n return hex.replace(regex, function (_, r, g, b) {\n return \"#\" + r + r + g + g + b + b;\n });\n}\n\nfunction conv6to8(hex: string) {\n if (hex.length === 7) {\n return hex + \"FF\";\n }\n\n return hex;\n}\n\nexport function hexToRgba(hex: string) {\n const hex6: string = conv3to6(hex);\n const hex8: string = conv6to8(hex6);\n const hexRgba: any =\n /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex8);\n\n return {\n r: parseInt(hexRgba[1], 16),\n g: parseInt(hexRgba[2], 16),\n b: parseInt(hexRgba[3], 16),\n a: parseInt(hexRgba[4], 16) / 255,\n };\n}\n\nexport function rgbaToHex(rgba: {\n r: number;\n g: number;\n b: number;\n a: number;\n}) {\n const { r, g, b, a } = rgba;\n\n const hexR = (r | (1 << 8)).toString(16).slice(1);\n const hexG = (g | (1 << 8)).toString(16).slice(1);\n const hexB = (b | (1 << 8)).toString(16).slice(1);\n const hexA = ((a * 255) | (1 << 8)).toString(16).slice(1);\n\n return \"#\" + hexR + hexG + hexB + hexA;\n}\n\nexport function processColor(color: number | string) {\n if (typeof color === \"number\") {\n const alpha = ((color >> 24) & 255) / 255;\n const red = (color >> 16) & 255;\n const green = (color >> 8) & 255;\n const blue = color & 255;\n\n return { r: red, g: green, b: blue, a: alpha };\n } else {\n // If string then check whether it has # in 0 index\n if (color[0] === \"#\") {\n return hexToRgba(color);\n } else {\n // It is string color\n const hexColorName: string = colorNames[color];\n if (hexColorName) {\n return hexToRgba(hexColorName);\n } else {\n throw new Error(\"String cannot be parsed!\");\n }\n }\n }\n}\n","/**\n * Checks if a value is defined (not null or undefined).\n *\n * This utility function helps in determining whether a given value is neither `null` nor `undefined`.\n * It can be useful for validation checks to ensure that a value is properly defined before proceeding\n * with further operations.\n *\n * @param {T} value - The value to check.\n * @returns {boolean} - Returns `true` if the value is neither `null` nor `undefined`, otherwise returns `false`.\n *\n */\nexport const isDefined = <T>(value: T): value is NonNullable<T> => {\n return value !== null && value !== undefined;\n};\n","import { FluidValue } from '../controllers/FluidValue';\nimport { isDefined } from './isDefined';\n\n/**\n * Checks if the given value is of type FluidValue.\n * A value is considered a FluidValue if it is defined,\n * an object, and contains the '_subscribe' property.\n *\n * @param value - The value to check.\n * @returns - True if the value is a FluidValue, false otherwise.\n */\nexport const isFluidValue = (value: unknown): value is FluidValue => {\n return isDefined(value) && typeof value === 'object' && '_subscribe' in value;\n};\n","const unitlessStyleProps = [\n 'borderImageOutset',\n 'borderImageSlice',\n 'borderImageWidth',\n 'fontWeight',\n 'lineHeight',\n 'opacity',\n 'orphans',\n 'tabSize',\n 'widows',\n 'zIndex',\n 'zoom',\n // SVG-related properties\n 'fillOpacity',\n 'floodOpacity',\n 'stopOpacity',\n 'strokeDasharray',\n 'strokeDashoffset',\n 'strokeMiterlimit',\n 'strokeOpacity',\n 'strokeWidth',\n // prefixed\n 'animationIterationCount',\n 'boxFlex',\n 'boxFlexGroup',\n 'boxOrdinalGroup',\n 'columnCount',\n 'flex',\n 'flexGrow',\n 'flexPositive',\n 'flexShrink',\n 'flexNegative',\n 'flexOrder',\n 'gridRow',\n 'gridColumn',\n 'order',\n 'lineClamp',\n];\n\n/**\n * getCssValue() function to get css value with unit or without unit\n * it is only for style property - it cannot be used with transform keys\n * @param property - style property\n * @param value - style value\n * @returns - value with unit or without unit\n */\nexport function getCssValue(property: string, value: number | string) {\n let cssValue;\n if (typeof value === 'number') {\n if (unitlessStyleProps.includes(property)) {\n cssValue = value;\n } else {\n cssValue = value + 'px';\n }\n } else {\n cssValue = value;\n }\n\n return cssValue;\n}\n","import {\n rgbaToHex,\n hexToRgba,\n COLOR_NUMBER_REGEX,\n HEX_NAME_COLOR,\n colorNames,\n} from './Colors';\nimport { isFluidValue } from '../helpers';\nimport { FluidValue } from '../controllers/FluidValue';\n\ntype ExtrapolateType = 'identity' | 'extend' | 'clamp';\n\nconst _internalInterpolate = (\n val: number,\n arr: any,\n extrapolateLeft: ExtrapolateType,\n extrapolateRight: ExtrapolateType\n) => {\n const [inputMin, inputMax, outputMin, outputMax] = arr;\n let result: number = val;\n\n // EXTRAPOLATE\n if (result < inputMin) {\n if (extrapolateLeft === 'identity') {\n return result;\n } else if (extrapolateLeft === 'clamp') {\n result = inputMin;\n } else if (extrapolateLeft === 'extend') {\n // noop\n }\n }\n\n if (result > inputMax) {\n if (extrapolateRight === 'identity') {\n return result;\n } else if (extrapolateRight === 'clamp') {\n result = inputMax;\n } else if (extrapolateRight === 'extend') {\n // noop\n }\n }\n\n if (outputMin === outputMax) {\n return outputMin;\n }\n\n if (inputMin === inputMax) {\n if (val <= inputMin) {\n return outputMin;\n }\n return outputMax;\n }\n\n // Input Range\n if (inputMin === -Infinity) {\n result = -result;\n } else if (inputMax === Infinity) {\n result = result - inputMin;\n } else {\n result = (result - inputMin) / (inputMax - inputMin);\n }\n\n // Output Range\n if (outputMin === -Infinity) {\n result = -result;\n } else if (outputMax === Infinity) {\n result = result + outputMin;\n } else {\n result = result * (outputMax - outputMin) + outputMin;\n }\n\n return result;\n};\n\nconst _getNarrowedInputArray = function (\n x: number,\n input: number[],\n output: Array<number | string>\n): Array<number | string> {\n const length = input.length;\n let narrowedInput: Array<number | string> = [];\n\n // Boundaries\n if (x < input[0]) {\n narrowedInput = [input[0], input[1], output[0], output[1]];\n } else if (x > input[length - 1]) {\n narrowedInput = [\n input[length - 2],\n input[length - 1],\n output[length - 2],\n output[length - 1],\n ];\n }\n\n // Narrow the input and output ranges\n for (let i = 1; i < length; ++i) {\n if (x <= input[i]) {\n narrowedInput = [input[i - 1], input[i], output[i - 1], output[i]];\n break;\n }\n }\n\n return narrowedInput;\n};\n\nconst _getColorInterpolate = (value: number, narrowedInput: Array<string>) => {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n const outputMinProcessed = hexToRgba(outputMin);\n const outputMaxProcessed = hexToRgba(outputMax);\n\n const red = _internalInterpolate(\n value,\n [inputMin, inputMax, outputMinProcessed.r, outputMaxProcessed.r],\n 'clamp',\n 'clamp'\n );\n\n const green = _internalInterpolate(\n value,\n [inputMin, inputMax, outputMinProcessed.g, outputMaxProcessed.g],\n 'clamp',\n 'clamp'\n );\n\n const blue = _internalInterpolate(\n value,\n [inputMin, inputMax, outputMinProcessed.b, outputMaxProcessed.b],\n 'clamp',\n 'clamp'\n );\n\n const alpha = _internalInterpolate(\n value,\n [inputMin, inputMax, outputMinProcessed.a, outputMaxProcessed.a],\n 'clamp',\n 'clamp'\n );\n\n return rgbaToHex({ r: red, g: green, b: blue, a: alpha });\n};\n\nconst _getArrayInterpolate = (\n value: number,\n narrowedInput: Array<any>,\n _extrapolateLeft: ExtrapolateType,\n _extrapolateRight: ExtrapolateType\n) => {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n if (outputMin.length === outputMax.length) {\n return outputMin.map((val: any, index: number) => {\n if (typeof val === 'string') {\n // IF IT IS STRING THEN IT MUST BE HEX COLOR\n return _getColorInterpolate(value, [\n inputMin,\n inputMax,\n val,\n outputMax[index],\n ]);\n } else {\n return _internalInterpolate(\n value,\n [inputMin, inputMax, val, outputMax[index]],\n _extrapolateLeft,\n _extrapolateRight\n );\n }\n });\n } else {\n throw new Error(\"Array length doesn't match\");\n }\n};\n\nexport const _getTemplateString = (str: string) => {\n return str.replace(COLOR_NUMBER_REGEX, '$');\n};\n\nconst _getParsedStringArray = (str: any) => {\n return str.match(COLOR_NUMBER_REGEX).map((v: string) => {\n if (v.indexOf('#') !== -1) {\n return v;\n } else {\n return Number(v);\n }\n });\n};\n\n/**\n * Function returns if the template of two strings are matched\n * i.e. they can be interpolated\n * @param str1 - first string\n * @param str2 - second string\n * @returns boolean indicating two strings matched or not\n */\nexport const stringMatched = (str1: string, str2: string) =>\n _getTemplateString(str1).trim().replace(/\\s/g, '') ===\n _getTemplateString(str2).trim().replace(/\\s/g, '');\n\n/**\n * Function which proccess the\n * hexadecimal colors to its proper formats\n * @param str - string\n * @returns hex color string\n */\nexport const getProcessedColor = (str: string) => {\n return str.replace(HEX_NAME_COLOR, function (match: any) {\n if (match.indexOf('#') !== -1) {\n return rgbaToHex(hexToRgba(match));\n } else if (Object.prototype.hasOwnProperty.call(colorNames, match)) {\n return colorNames[match];\n } else {\n throw new Error('String cannot be parsed!');\n }\n });\n};\n\nexport interface ExtrapolateConfig {\n extrapolate?: ExtrapolateType;\n extrapolateRight?: ExtrapolateType;\n extrapolateLeft?: ExtrapolateType;\n}\n\n/**\n * interpolateNumbers to interpolate the numeric value\n * @param value - number\n * @param inputRange\n * @param outputRange\n * @param extrapolateConfig\n * @returns - number | string\n */\nexport function interpolateNumbers(\n value: number,\n inputRange: Array<number>,\n outputRange: Array<number | string>,\n extrapolateConfig?: ExtrapolateConfig\n) {\n const extrapolate = extrapolateConfig?.extrapolate;\n const extrapolateLeft = extrapolateConfig?.extrapolateLeft;\n const extrapolateRight = extrapolateConfig?.extrapolateRight;\n\n const narrowedInput = _getNarrowedInputArray(value, inputRange, outputRange);\n\n let _extrapolateLeft: ExtrapolateType = 'extend';\n if (extrapolateLeft !== undefined) {\n _extrapolateLeft = extrapolateLeft;\n } else if (extrapolate !== undefined) {\n _extrapolateLeft = extrapolate;\n }\n\n let _extrapolateRight: ExtrapolateType = 'extend';\n if (extrapolateRight !== undefined) {\n _extrapolateRight = extrapolateRight;\n } else if (extrapolate !== undefined) {\n _extrapolateRight = extrapolate;\n }\n\n if (outputRange.length) {\n if (typeof outputRange[0] === 'number') {\n return _internalInterpolate(\n value,\n narrowedInput,\n _extrapolateLeft,\n _extrapolateRight\n );\n } else if (Array.isArray(outputRange[0])) {\n return _getArrayInterpolate(\n value,\n narrowedInput,\n _extrapolateLeft,\n _extrapolateRight\n );\n } else {\n const [inputMin, inputMax, outputMin, outputMax] = narrowedInput;\n\n const processedOutputMin = getProcessedColor(outputMin as string);\n const processedOutputMax = getProcessedColor(outputMax as string);\n\n let templateString = _getTemplateString(processedOutputMin);\n\n if (stringMatched(processedOutputMin, processedOutputMax)) {\n const outputMinParsed = _getParsedStringArray(processedOutputMin);\n const outputMaxParsed = _getParsedStringArray(processedOutputMax);\n\n const result = _getArrayInterpolate(\n value,\n [inputMin, inputMax, outputMinParsed, outputMaxParsed],\n _extrapolateLeft,\n _extrapolateRight\n );\n\n for (const v of result) templateString = templateString.replace('$', v);\n return templateString;\n } else {\n throw new Error(\"Output range doesn't match string format!\");\n }\n }\n } else {\n throw new Error('Output range cannot be Empty');\n }\n}\n\n/**\n * interpolateTransitionValue to interpolating TransitionValue type value\n * @param value\n * @param inputRange\n * @param outputRange\n * @param extrapolateConfig\n * @returns TransitionValue\n */\nexport const interpolateTransitionValue = (\n value: FluidValue,\n inputRange: Array<number>,\n outputRange: Array<number | string>,\n extrapolateConfig?: ExtrapolateConfig\n) => {\n return {\n ...value,\n isInterpolation: true,\n interpolationConfig: {\n inputRange,\n outputRange,\n extrapolateConfig,\n },\n };\n};\n\n/**\n * interpolate function to interpolate both transition\n * as well as numerical value\n * @param value\n * @param inputRange\n * @param outputRange\n * @param extrapolateConfig\n */\nexport const interpolate = (\n value: number | FluidValue,\n inputRange: Array<number>,\n outputRange: Array<number | string>,\n extrapolateConfig?: ExtrapolateConfig\n) => {\n if (isFluidValue(value)) {\n return interpolateTransitionValue(\n value as FluidValue,\n inputRange,\n outputRange,\n extrapolateConfig\n );\n } else if (typeof value === 'number') {\n return interpolateNumbers(\n value,\n inputRange,\n outputRange,\n extrapolateConfig\n );\n } else {\n throw new Error(`'${typeof value}' cannot be interpolated!`);\n }\n};\n\n/**\n * Determines if two values can be interpolated.\n * This function checks if two values, either numbers or strings,\n * can be interpolated by ensuring they are of the same type and, in the case of strings,\n * that they are compatible for interpolation based on processed color values.\n *\n * @param previousValue - The previous value to compare. Can be a number or a string.\n * @param newValue - The new value to compare. Can be a number or a string.\n * @returns True if interpolation is possible, false otherwise.\n */\nexport function canInterpolate(\n previousValue: number | string,\n newValue: number | string\n): boolean {\n if (typeof previousValue !== typeof newValue) {\n return false;\n }\n\n if (typeof newValue === 'number') {\n return true;\n }\n\n if (typeof previousValue === 'string') {\n const processedPreviousValue = getProcessedColor(previousValue);\n const processedNewValue = getProcessedColor(newValue);\n\n return (\n processedPreviousValue !== processedNewValue &&\n _getTemplateString(processedPreviousValue) ===\n _getTemplateString(processedNewValue)\n );\n }\n\n return false;\n}\n","export const styleTrasformKeys = [\n 'translate',\n 'translateX',\n 'translateY',\n 'translateZ',\n 'scale',\n 'scaleX',\n 'scaleY',\n 'scaleZ',\n 'rotate',\n 'rotateX',\n 'rotateY',\n 'rotateZ',\n 'skew',\n 'skewX',\n 'skewY',\n] as const;\n\nfunction splitCSSValueAndUnit(value: string) {\n const valueMatch = value.match(/(-)?(\\d+.)?\\d+/g);\n const unitMatch = value.match(\n /px|rem|em|ex|%|cm|mm|in|pt|pc|ch|vh|vw|vmin|vmax/\n );\n\n return {\n value: Number(valueMatch),\n unit: unitMatch && unitMatch[0],\n };\n}\n\n// get unit of transform style property\nfunction getValueUnit(property: string, value: string) {\n let unit;\n\n const splitValue = splitCSSValueAndUnit(String(value)).value;\n const splitUnit = splitCSSValueAndUnit(String(value)).unit;\n\n // if string value is passed with unit then split it\n if (splitUnit) {\n return { value: splitValue, unit: splitUnit };\n }\n\n if (property.includes('translate') || property.includes('perspective')) {\n unit = 'px';\n } else if (property.includes('scale')) {\n unit = '';\n } else if (property.includes('rotate') || property.includes('skew')) {\n unit = 'deg';\n }\n\n return { value, unit };\n}\n\nfunction getTransformValueWithUnits(property: string, value: string) {\n const valueUnit = getValueUnit(property, value);\n\n if (\n property.includes('X') ||\n property.includes('Y') ||\n property.includes('Z') ||\n property.includes('perspective') ||\n property.includes('rotate') ||\n property.includes('skew')\n ) {\n // axis value\n return `${property}(${valueUnit.value}${valueUnit.unit})`;\n } else if (property.includes('translate') || property.indexOf('scale')) {\n // two parameter value\n return `${property}(${valueUnit.value}${valueUnit.unit}, ${valueUnit.value}${valueUnit.unit})`;\n } else {\n throw new Error(`Error! Property '${property}' cannot be transformed`);\n }\n}\n\n/**\n * getTransform function returns transform string from style object\n */\nexport function getTransform(style: Record<string, any>) {\n return Object.entries(style)\n .map(([prop, value]) => getTransformValueWithUnits(prop, value))\n .reduce(\n (transform: string, value: string) => (transform += ` ${value}`),\n ''\n )\n .trim();\n}\n\nexport function isTransformKey(key: string) {\n return (styleTrasformKeys as readonly string[]).includes(key);\n}\n","import {\n useRef,\n useMemo,\n useLayoutEffect,\n createElement,\n forwardRef,\n RefObject,\n} from 'react';\n\nimport { SpringAnimation } from '../controllers/SpringAnimation';\nimport { TimingAnimation } from '../controllers/TimingAnimation';\nimport {\n ExtrapolateConfig,\n canInterpolate,\n interpolateNumbers,\n} from '../interpolation/Interpolation';\nimport { getTransform, isTransformKey } from './transforms';\nimport {\n isDefined,\n getCleanProps,\n getCssValue,\n camelCaseToKebabCase,\n isFluidValue,\n} from '../helpers';\nimport { FluidValue } from '../controllers/FluidValue';\n\nimport type { ResultType, FluidValueConfig, Length } from '../types/animation';\nimport type { FluidProps, WrappedComponentOrTag } from '../types/fluid';\n\n/**\n * Higher-order component to make any component animatable.\n *\n * This function takes a React component or an HTML tag and returns a new component\n * that can smoothly transition between states using fluid animations. It enhances\n * the user experience by adding dynamic and engaging animations to the wrapped component.\n *\n * @param WrapperComponent - The React component or HTML tag to be wrapped with animation functionality.\n * @returns - A new component with added animation capabilities.\n *\n * The returned component uses fluid animations to smoothly transition between different\n * states. It supports both style and prop animations, handling transforms and other\n * properties seamlessly. The component ensures that animations are efficiently applied\n * and updated based on the current state and configuration of fluid values.\n *\n * @example\n * const AnimatedDiv = makeFluid('div');\n *\n * const MyComponent = () => {\n * const opacity = useAnimatedValue(1)\n * return (\n * <AnimatedDiv style={{ opacity: opacity.value }}>\n * Hello, world!\n * </AnimatedDiv>\n * )};\n */\nexport function makeFluid<C extends WrappedComponentOrTag>(\n WrapperComponent: C\n) {\n return forwardRef((givenProps: FluidProps<C>, givenRef: any) => {\n const instanceRef = useRef<any>(null);\n\n const transformStyleRef = useRef<Record<string, Length>>({});\n\n const { fluids, nonFluids } = useMemo(() => {\n const { style, ...props } = givenProps;\n const fluidStyle = getFluids('style', style);\n const fluidProps = getFluids('props', props);\n\n return {\n fluids: [...fluidStyle.fluids, ...fluidProps.fluids],\n nonFluids: [...fluidStyle.nonFluids, ...fluidProps.nonFluids],\n };\n }, [givenProps]);\n\n const applyAnimationValues = ({\n isTransform,\n propertyType,\n property,\n value,\n }: {\n isTransform: boolean;\n propertyType: 'style' | 'props';\n property: string;\n value: Length;\n }) => {\n if (!instanceRef.current) return;\n\n if (propertyType === 'style') {\n if (isTransform) {\n transformStyleRef.current[property] = value;\n instanceRef.current.style.transform = getTransform(\n transformStyleRef.current\n );\n } else {\n instanceRef.current.style[property] = getCssValue(property, value);\n }\n } else if (propertyType === 'props') {\n instanceRef.current.setAttribute(camelCaseToKebabCase(property), value);\n }\n };\n\n useLayoutEffect(() => {\n nonFluids.forEach(({ isTransform, property, propertyType, value }) =>\n applyAnimationValues({\n isTransform,\n property,\n propertyType,\n value: value as number,\n })\n );\n }, [nonFluids]);\n\n useLayoutEffect(() => {\n const subscribers: any = [];\n\n fluids.forEach((f) => {\n const { value: fluidValue, propertyType, property, isTransform } = f;\n const { _subscribe, _value, _currentValue, _config } = fluidValue;\n\n const interpolationOutputRange: string[] = [];\n const generateAnimation = animationObjectGenerator(_config);\n let animation: any = null;\n\n const onFrame = (value: number) => {\n _currentValue.current = value;\n\n const updatedValue: number =\n fluidValue.isInterpolation && fluidValue.interpolationConfig\n ? interpolateNumbers(\n value,\n fluidValue.interpolationConfig.inputRange,\n fluidValue.interpolationConfig.outputRange,\n fluidValue.interpolationConfig.extrapolateConfig\n )\n : value;\n\n applyAnimationValues({\n isTransform,\n propertyType,\n property,\n value: updatedValue,\n });\n };\n\n const onUpdate = (\n value: Length,\n config?: FluidValueConfig,\n callback?: (value: ResultType) => void\n ) => {\n if (canInterpolate(_value, value)) {\n const previousAnimation = animation;\n\n if (previousAnimation._value !== value) {\n animation.stop();\n\n animation = generateAnimation(\n previousAnimation._position,\n config\n );\n config?.onStart && config.onStart(previousAnimation._position);\n\n if (typeof value === 'string') {\n if (!interpolationOutputRange.includes(_value as string)) {\n interpolationOutputRange.push(_value as string);\n }\n\n if (!interpolationOutputRange.includes(value)) {\n interpolationOutputRange.push(value);\n }\n\n fluidValue.isInterpolation = true;\n fluidValue.interpolationConfig = {\n inputRange: interpolationOutputRange.map((_, i) => i),\n outputRange: interpolationOutputRange,\n };\n }\n\n animation.start({\n toValue:\n typeof value === 'string'\n ? interpolationOutputRange.indexOf(value)\n : value,\n onFrame,\n previousAnimation,\n onEnd: callback,\n });\n }\n } else {\n if (typeof value !== typeof _value) {\n throw new Error(\n `Cannot assign ${typeof value} to animated ${typeof _value}`\n );\n }\n\n applyAnimationValues({\n isTransform,\n propertyType,\n property,\n value,\n });\n }\n };\n\n animation = generateAnimation(typeof _value === 'string' ? 0 : _value);\n applyAnimationValues({\n isTransform,\n propertyType,\n property,\n value: _value,\n });\n\n const subscribe = _subscribe(onUpdate, property, Date.now());\n subscribers.push(subscribe);\n });\n\n return () => {\n subscribers.forEach((subscriber: () => void) => subscriber());\n };\n }, []);\n\n return createElement(WrapperComponent, {\n ...getCleanProps(givenProps),\n ref: combineRefs(instanceRef, givenRef),\n });\n });\n}\n\nfunction combineRefs(\n ...refs: Array<RefObject<any> | ((element: HTMLElement) => void)>\n) {\n return function applyRef(element: HTMLElement) {\n refs.forEach((ref) => {\n if (!ref) return;\n if (typeof ref === 'function') {\n ref(element);\n return;\n }\n if ('current' in ref) (ref.current as HTMLElement) = element;\n });\n };\n}\n\nfunction animationObjectGenerator(defaultConfig?: FluidValueConfig) {\n return (value: number, config?: FluidValueConfig) => {\n const animationConfig = { ...defaultConfig, ...config };\n\n const Animation =\n isDefined(animationConfig?.duration) || animationConfig?.immediate\n ? TimingAnimation\n : SpringAnimation;\n\n return new Animation({\n initialPosition: value,\n config: animationConfig,\n });\n };\n}\n\ninterface InterpolationValue {\n isInterpolation: boolean;\n interpolationConfig: {\n inputRange: Array<number>;\n outputRange: Array<number | string>;\n extrapolateConfig?: ExtrapolateConfig;\n };\n}\n\ntype Fluid = {\n isTransform: boolean;\n property: string;\n propertyType: 'style' | 'props';\n value: FluidValue & Partial<InterpolationValue>;\n};\n\ntype NonFluid = Omit<Fluid, 'value'> & { value: unknown };\n\nfunction getFluids(\n propertyType: Fluid['propertyType'],\n props: Record<string, any> = {}\n) {\n return Object.entries(props).reduce(\n (res, [property, value]) => {\n const isTransform = propertyType === 'style' && isTransformKey(property);\n\n if (isFluidValue(value)) {\n res.fluids.push({ isTransform, property, propertyType, value });\n } else {\n res.nonFluids.push({ isTransform, property, propertyType, value });\n }\n\n return res;\n },\n { fluids: [], nonFluids: [] } as { fluids: Fluid[]; nonFluids: NonFluid[] }\n );\n}\n","/**\n * Converts a camelCase string to kebab-case.\n * e.g. backgroundColor -> background-color\n *\n * @param str - The camelCase string to convert.\n * @returns The converted kebab-case string.\n */\nexport function camelCaseToKebabCase(str: string): string {\n return str.replace(/([A-Z])/g, (match) => '-' + match.toLowerCase());\n}\n","import { isFluidValue } from './isFluidValue';\n\n/**\n * Filters out properties with fluid values from a given props object.\n * This function removes any properties that are considered fluid values,\n * typically those that subscribe to updates and therefore should not be\n * included in a static props object.\n *\n * @param props - The original props object, which may include fluid values.\n * @returns A new props object with fluid values removed.\n */\nexport const getCleanProps = ({ style, ...props }: any) => {\n return Object.fromEntries(\n Object.entries(props).filter(([_, value]) => !isFluidValue(value))\n ) as any;\n};\n","import { makeFluid } from './makeFluid';\n\nimport type { FluidProps } from '../types/fluid';\n\ntype HTMLTags = keyof JSX.IntrinsicElements;\n\nconst tags: HTMLTags[] = [\n 'a',\n 'abbr',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'base',\n 'bdi',\n 'bdo',\n 'big',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'data',\n 'datalist',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'keygen',\n 'label',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'map',\n 'mark',\n 'menu',\n 'menuitem',\n 'meta',\n 'meter',\n 'nav',\n 'noindex',\n 'noscript',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'param',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'search',\n 'section',\n 'select',\n 'small',\n 'source',\n 'span',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'template',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'title',\n 'tr',\n 'track',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n\n // SVG Tags\n 'svg',\n 'animate',\n 'animateMotion',\n 'animateTransform',\n 'circle',\n 'clipPath',\n 'defs',\n 'desc',\n 'ellipse',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'filter',\n 'foreignObject',\n 'g',\n 'image',\n 'line',\n 'linearGradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'set',\n 'stop',\n 'switch',\n 'symbol',\n 'text',\n 'textPath',\n 'tspan',\n 'use',\n 'view',\n];\n\ntype WithFluid = {\n [k in keyof JSX.IntrinsicElements]: React.ComponentType<\n FluidProps<HTMLElement>\n >;\n};\n\nexport const fluid: WithFluid = {} as WithFluid;\n\ntags.forEach((tag) => {\n (fluid as any)[tag] = makeFluid(tag);\n});\n","import type {\n Length,\n ResultType,\n SubscribeFn,\n FluidValueConfig,\n OnUpdateFn,\n AssignValue,\n} from '../types/animation';\nimport type { Fn } from '../types/common';\n\n/**\n * Represents a fluid value that can animate between states.\n */\nexport class FluidValue {\n public _subscribe: SubscribeFn;\n public _value: Length;\n public _config?: FluidValueConfig;\n public _currentValue: { current: Length };\n public _subscriptions: Map<{ uuid: number; property: string }, OnUpdateFn>;\n\n public get: () => Length;\n\n /**\n * Creates a new FluidValue instance.\n * @param initialValue - The initial value of the fluid value.\n * @param config - Optional configuration for the fluid value.\n */\n constructor(initialValue: Length, config?: FluidValueConfig) {\n this._subscriptions = new Map();\n this._subscribe = (\n onUpdate: OnUpdateFn,\n property: string,\n uuid: number\n ) => {\n for (const key of this._subscriptions.keys()) {\n if (key.property === property) {\n this._subscriptions.set(key, onUpdate);\n return () => this._subscriptions.delete(key);\n }\n }\n\n this._subscriptions.set({ uuid, property }, onUpdate);\n return () => this._subscriptions.delete({ uuid, property });\n };\n this._value = initialValue;\n this._currentValue = { current: initialValue };\n this._config = config;\n this.get = () => this._currentValue.current;\n }\n\n /**\n * Animates from the current value to the updated value.\n * Determines whether to perform a multi-stage or single-stage transition.\n * @param updatedValue - The value to animate to, or a function that defines a multi-stage transition.\n * @param config - Optional configuration for the animation.\n * @param callback - Optional callback to be called after the animation ends.\n */\n setValue(\n updatedValue: AssignValue,\n config?: FluidValueConfig,\n callback?: Fn<ResultType, void>\n ) {\n /** Multistage transition */\n if (typeof updatedValue === 'function') {\n updatedValue((nextValue, nextConfig) => {\n const multiStagePromise = new Promise((resolve) => {\n for (const subscriptionKey of this._subscriptions.keys()) {\n const updater = this._subscriptions.get(subscriptionKey);\n\n if (updater) {\n updater(nextValue, nextConfig ?? config, function (result) {\n if (result.finished) {\n resolve(nextValue);\n }\n\n if (callback) {\n callback(result);\n }\n });\n }\n }\n });\n\n return multiStagePromise;\n });\n\n return;\n }\n\n /** Singlestage transition */\n for (const subscriptionKey of this._subscriptions.keys()) {\n const updater = this._subscriptions.get(subscriptionKey);\n\n updater && updater(updatedValue, config, callback);\n }\n }\n}\n","import { useMemo, useCallback } from 'react';\n\nimport { FluidValue } from '../controllers/FluidValue';\n\nimport type {\n FluidValueConfig,\n Length,\n AssignValue,\n OnUpdateCallback,\n} from '../types/animation';\n\n/**\n * useFluidValue\n *\n * @param value - initial value\n * @param config - the config object for `FluidValue`\n */\nexport const useFluidValue = (\n value: Length,\n config?: FluidValueConfig\n): [\n FluidValue,\n (\n updateValue: AssignValue,\n config?: FluidValueConfig,\n callback?: OnUpdateCallback\n ) => void\n] => {\n const fluid = useMemo(() => new FluidValue(value, config), []);\n\n const setFluid = useCallback(\n (\n updateValue: AssignValue,\n config?: FluidValueConfig,\n callback?: OnUpdateCallback\n ) => {\n fluid.setValue(updateValue, config, callback);\n },\n []\n );\n\n return [fluid, setFluid];\n};\n","import { makeFluid } from '../../core';\n\n/**\n * AnimatedBlock - A higher order component built upon `div` element\n * which can accept `AnimatedValue`. It also exposes some extra style properties like\n * translateX, translateY, rotateX, rotateY, scaleX, etc.\n */\nexport const AnimatedBlock = makeFluid('div');\n","import { makeFluid } from '../../core';\n\n/**\n * AnimatedInline - A higher order component built upon `span` element\n * which can accept `AnimatedValue`. It also exposes some extra style properties like\n * translateX, translateY, rotateX, rotateY, scaleX, etc.\n */\nexport const AnimatedInline = makeFluid('span');\n","import { makeFluid } from '../../core';\n\n/**\n * AnimatedImage - A higher order component built upon `img` element\n * which can accept `AnimatedValue`. It also exposes some extra style properties like\n * translateX, translateY, rotateX, rotateY, scaleX, etc.\n */\nexport const AnimatedImage = makeFluid('img');\n","import { useMount, UseMountConfig, FluidValue } from '../core';\n\nexport interface UseMountedValueConfig extends UseMountConfig {}\n\n/**\n * `useMountedValue` handles mounting and unmounting of a component which captures current state\n * passed as an arugment (`state`) and exposes the shadow state which handles the mount and unmount\n * of a component.\n *\n * @param { boolean } state - Boolean indicating the component should mount or unmount.\n * @param { UseMountedValueConfig } config - Animation configuration.\n */\nexport function useMountedValue(state: boolean, config: UseMountedValueConfig) {\n const mv = useMount(state, config);\n return (\n cb: (value: { value: FluidValue }, mounted: boolean) => React.ReactNode\n ) => mv((a, m) => cb({ value: a }, m));\n}\n","import { useState, useRef, useLayoutEffect } from 'react';\n\nimport { useFluidValue } from './useFluidValue';\nimport { FluidValue } from '../controllers/FluidValue';\n\nimport type { AssignValue, FluidValueConfig } from '../types/animation';\n\nexport interface UseMountConfig {\n from: number;\n enter: number | AssignValue;\n exit: number | AssignValue;\n enterConfig?: FluidValueConfig;\n exitConfig?: FluidValueConfig;\n config?: FluidValueConfig;\n}\n\n/**\n * `useMount`\n *\n * applies mounting and unmounting of a component according to state change\n * applying transitions\n *\n * @param state - boolean indicating mount state of a component\n * @param config - the config object `UseMountConfig`\n */\nexport const useMount = (state: boolean, config: UseMountConfig) => {\n const [mounted, setMounted] = useState(false);\n const {\n from,\n enter,\n exit,\n config: innerConfig,\n enterConfig,\n exitConfig,\n } = useRef(config).current;\n const [animation, setAnimation] = useFluidValue(from, innerConfig);\n\n useLayoutEffect(() => {\n if (state) {\n setMounted(true);\n queueMicrotask(() => setAnimation(enter, enterConfig));\n } else {\n setAnimation(\n exit,\n exitConfig,\n function ({ finished }: { finished: boolean }) {\n if (finished) {\n setMounted(false);\n }\n }\n );\n }\n }, [state]);\n\n return (\n callback: (animation: FluidValue, mounted: boolean) => React.ReactNode\n ) => callback(animation, mounted);\n};\n","import * as React from 'react';\nimport { FluidValue, FluidValueConfig } from '../../core';\nimport { useMountedValue } from '../useMountedValue';\n\ninterface MountedValueConfig extends FluidValueConfig {}\n\ninterface MountedBlockProps {\n state: boolean;\n children: (animation: { value: FluidValue }) => React.ReactNode;\n from?: number;\n enter?: number;\n exit?: number;\n config?: MountedValueConfig;\n enterConfig?: MountedValueConfig;\n exitConfig?: MountedValueConfig;\n}\n\n/**\n * MountedBlock - Higher order component which handles mounting and unmounting of a component.\n * @prop { boolean } state - Boolean indicating the component should mount or unmount.\n * @prop { function } children - Child as a function with `AnimatedValue` on `.value` property.\n * @prop { number } from - Number that dictates the beginning state for animation.\n * @prop { number } enter - Number that dictates the entry state for animation.\n * @prop { number } exit - Number that dictates the exit state for animation.\n * @prop { MountedValueConfig } config - Animation configuration for overall animation.\n * @prop { MountedValueConfig } enterConfig - Animation configuration for the entering state of animation.\n * @prop { MountedValueConfig } exitConfig - Animation configuration for the entering state of animation.\n */\nexport const MountedBlock = ({\n state,\n children,\n from = 0,\n enter = 1,\n exit = 0,\n config,\n enterConfig,\n exitConfig,\n}: MountedBlockProps) => {\n const open = useMountedValue(state, {\n from,\n enter,\n exit,\n config,\n enterConfig,\n exitConfig,\n });\n\n return (\n <>{open((animation, mounted) => mounted && children(animation as any))}</>\n );\n};\n","import { Easing, FluidValueConfig } from '../core';\nexport type InitialConfigType =\n | 'linear'\n | 'easein'\n | 'easeout'\n | 'easeinout'\n | 'ease'\n | 'power1'\n | 'power2'\n | 'power3'\n | 'power4'\n | 'elastic'\n | 'stiff'\n | 'wooble'\n | 'bounce';\n\nexport const getInitialConfig = (\n animationType?: InitialConfigType\n): FluidValueConfig => {\n switch (animationType) {\n case 'elastic':\n return { mass: 1, friction: 18, tension: 250 };\n\n case 'stiff':\n return { mass: 1, friction: 18, tension: 350 };\n\n case 'wooble':\n return { mass: 1, friction: 8, tension: 250 };\n\n case 'bounce':\n return { duration: 500, easing: Easing.bounce };\n\n case 'power1':\n return { duration: 500, easing: Easing.bezier(0.17, 0.42, 0.51, 0.97) };\n\n case 'power2':\n return { duration: 500, easing: Easing.bezier(0.07, 0.11, 0.13, 1) };\n\n case 'power3':\n return { duration: 500, easing: Easing.bezier(0.09, 0.7, 0.16, 1.04) };\n\n case 'power4':\n return { duration: 500, easing: Easing.bezier(0.05, 0.54, 0, 1.03) };\n\n case 'linear':\n return { duration: 500, easing: Easing.linear };\n\n case 'easein':\n return { duration: 500, easing: Easing.in(Easing.ease) };\n\n case 'easeout':\n return { duration: 500, easing: Easing.out(Easing.ease) };\n\n case 'easeinout':\n return { duration: 500, easing: Easing.inOut(Easing.ease) };\n\n case 'ease':\n default:\n return { mass: 1, friction: 34, tension: 290 };\n }\n};\n","import { getInitialConfig } from './getInitialConfig';\n\nexport const AnimationConfigUtils = {\n ELASTIC: getInitialConfig('elastic'),\n BOUNCE: getInitialConfig('bounce'),\n EASE: getInitialConfig('ease'),\n STIFF: getInitialConfig('stiff'),\n WOOBLE: getInitialConfig('wooble'),\n EASE_IN: getInitialConfig('easein'),\n EASE_OUT: getInitialConfig('easeout'),\n EASE_IN_OUT: getInitialConfig('easeinout'),\n POWER1: getInitialConfig('power1'),\n POWER2: getInitialConfig('power2'),\n POWER3: getInitialConfig('power3'),\n POWER4: getInitialConfig('power4'),\n LINEAR: getInitialConfig('linear'),\n};\n","import { useFluidValue, FluidValueConfig, FluidValue } from '../core';\nimport { AnimationConfigUtils } from './animationType';\n\n// useAnimatedValue value type\ntype Length = number | string;\n\nexport interface UseAnimatedValueConfig extends FluidValueConfig {}\n\n/**\n * `useAnimatedValue` returns an animation value with `.value` and `.currentValue` property which is\n * initialized when passed to argument (`initialValue`). The retured value persist until the lifetime of\n * a component. It doesnot cast any re-renders which can is very good for performance optimization.\n *\n * @param { string | number } initialValue - Initial value\n * @param { UseAnimatedValueConfig } config - Animation configuration object.\n */\nexport function useAnimatedValue(\n initialValue: Length,\n config?: UseAnimatedValueConfig\n) {\n const [animation, setAnimation] = useFluidValue(initialValue, {\n ...AnimationConfigUtils.EASE,\n ...config,\n });\n\n const targetObject: {\n value: FluidValue | string | number | undefined;\n currentValue: number | string;\n } = {\n value: animation,\n currentValue: animation.get(),\n };\n\n return new Proxy(targetObject, {\n set: function (_, key, value: any) {\n if (key === 'value') {\n if (typeof value === 'number' || typeof value === 'string') {\n setAnimation(value);\n }\n\n return true;\n }\n\n throw new Error('You cannot set any other property to animation node.');\n },\n get: function (_, key) {\n if (key === 'value') {\n return animation;\n }\n\n if (key === 'currentValue') {\n return animation.get();\n }\n\n throw new Error(\n 'You cannot access any other property from animation node.'\n );\n },\n });\n}\n","/**\n * bin(booleanValue)\n * returns 1 if booleanValue == true and 0 if booleanValue == false\n */\nexport function bin(bool: boolean) {\n return bool ? 1 : 0;\n}\n\n/**\n * mix(progress, a, b)\n * linear interpolation between a and b\n */\nexport function mix(perc: number, val1: number, val2: number) {\n return val1 * (1 - perc) + val2 * perc;\n}\n\n/**\n * clamp(value, min, max)\n * clamps value for min and max bounds\n */\nexport function clamp(value: number, lowerbound: number, upperbound: number) {\n return Math.min(Math.max(value, lowerbound), upperbound);\n}\n\nfunction rubber2(distanceFromEdge: number, constant: number) {\n return Math.pow(distanceFromEdge, constant * 5);\n}\n\nfunction rubber(distanceFromEdge: number, dimension: number, constant: number) {\n if (dimension === 0 || Math.abs(dimension) === Infinity)\n return rubber2(distanceFromEdge, constant);\n return (\n (distanceFromEdge * dimension * constant) /\n (dimension + constant * distanceFromEdge)\n );\n}\n\n/**\n * rubberClamp(value, min, max, constant?)\n * constant is optional : default 0.15\n * clamps the value for min and max value and\n * extends beyond min and max values with constant\n * factor to create elastic rubber band effect\n */\nexport function rubberClamp(\n value: number,\n lowerbound: number,\n upperbound: number,\n constant: number = 0.15\n) {\n if (constant === 0) return clamp(value, lowerbound, upperbound);\n\n if (value < lowerbound) {\n return (\n -rubber(lowerbound - value, upperbound - lowerbound, constant) +\n lowerbound\n );\n }\n\n if (value > upperbound) {\n return (\n +rubber(value - upperbound, upperbound - lowerbound, constant) +\n upperbound\n );\n }\n\n return value;\n}\n\n/**\n * snapTo(value, velocity, snapPoints[])\n * Calculates the final snapPoint according to given current value,\n * velocity and snapPoints array\n */\nexport function snapTo(\n value: number,\n velocity: number,\n snapPoints: Array<number>\n): number {\n const finalValue = value + velocity * 0.2;\n const getDiff = (point: number) => Math.abs(point - finalValue);\n const deltas = snapPoints.map(getDiff);\n const minDelta = Math.min(...deltas);\n\n return snapPoints.reduce(function (acc, point) {\n if (getDiff(point) === minDelta) {\n return point;\n } else {\n return acc;\n }\n });\n}\n\n/**\n * move(array, moveIndex, toIndex)\n * move array item from moveIndex to toIndex without array modification\n */\nexport function move(array: Array<any>, moveIndex: number, toIndex: number) {\n const item = array[moveIndex];\n const length = array.length;\n const diff = moveIndex - toIndex;\n\n if (diff > 0) {\n return [\n ...array.slice(0, toIndex),\n item,\n ...array.slice(toIndex, moveIndex),\n ...array.slice(moveIndex + 1, length),\n ];\n } else if (diff < 0) {\n const targetIndex = toIndex + 1;\n return [\n ...array.slice(0, moveIndex),\n ...array.slice(moveIndex + 1, targetIndex),\n item,\n ...array.slice(targetIndex, length),\n ];\n }\n return array;\n}\n","type MouseEventType =\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mousemove'\n | 'mouseup'\n | 'touchstart'\n | 'touchmove'\n | 'touchend'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseout'\n | 'mouseover'\n | 'scroll'\n | 'wheel'\n | 'contextmenu';\n\ntype DomTargetTypes = Array<Window | Document | HTMLElement>;\n\n/**\n * Attach single document / window event / HTMLElement\n */\nfunction attachEvent(\n domTargets: DomTargetTypes,\n event: MouseEventType,\n callback: (e: any) => void,\n capture: any = false\n) {\n domTargets.forEach((target) => {\n target.addEventListener(event, callback, capture);\n });\n\n return function () {\n domTargets.forEach((target) => {\n target.removeEventListener(event, callback, capture);\n });\n };\n}\n\n/**\n * Attach multiple document / window event / HTMLElement\n */\nexport function attachEvents(\n domTargets: DomTargetTypes,\n events: Array<\n [event: MouseEventType, callback: (e: any) => void, capture?: any]\n >\n) {\n const subscribers = new Map();\n\n events.forEach(function ([event, callback, capture = false]) {\n subscribers.set(event, attachEvent(domTargets, event, callback, capture));\n });\n\n return function (eventKeys?: Array<string>) {\n for (const [eventKey, subscriber] of subscribers.entries()) {\n if (!eventKeys) {\n subscriber();\n return;\n }\n\n if (eventKeys.indexOf(eventKey) !== -1) {\n subscriber();\n }\n }\n };\n}\n","export const withDefault = (x: number, y: number) => {\n return { x, y };\n};\n","export class Gesture {\n currentIndex?: number;\n lastTimeStamp: number = Date.now();\n isActive: boolean = false;\n targetElement?: HTMLElement; // represents the bounded element\n targetElements: Array<HTMLElement> = []; // represents the bounded elements\n config?: any;\n callback?: <T>(event: T) => void;\n _subscribe?: (eventKeys?: Array<string>) => void;\n static _VELOCITY_LIMIT: number = 20;\n\n // it must be overridden by other child classes\n _initEvents() {}\n\n // cancel events\n // we only canceled down and move events because mouse up\n // will not be triggered\n _cancelEvents() {\n if (this._subscribe) {\n this._subscribe();\n }\n }\n\n // re-apply new callback\n applyCallback(callback: <T>(event: T) => void) {\n this.callback = callback;\n }\n\n // apply gesture\n applyGesture({\n targetElement,\n targetElements,\n callback,\n config,\n }: {\n targetElement?: any;\n targetElements?: any;\n callback: <T>(event: T) => void;\n config?: any;\n }) {\n this.targetElement = targetElement;\n this.targetElements = targetElements.map(\n (element: { current: any }) => element.current\n );\n this.callback = callback;\n this.config = config;\n\n // initialize events\n this._initEvents();\n\n // unbind\n return () => this._subscribe && this._subscribe();\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nimport type { Vector2 } from '../types';\n\nexport class DragGesture extends Gesture {\n movementStart: Vector2 = withDefault(0, 0);\n initialMovement: Vector2 = withDefault(0, 0);\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n translation: Vector2 = withDefault(0, 0);\n offset: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement || this.targetElements.length > 0) {\n this._subscribe = attachEvents(\n [window],\n [\n ['mousedown', this.pointerDown.bind(this)],\n ['mousemove', this.pointerMove.bind(this)],\n ['mouseup', this.pointerUp.bind(this)],\n ['touchstart', this.pointerDown.bind(this), { passive: false }],\n ['touchmove', this.pointerMove.bind(this), { passive: false }],\n ['touchend', this.pointerUp.bind(this)],\n ]\n );\n }\n }\n\n // @override - cancel events\n // we only canceled down and move events because mouse up\n // will not be triggered\n _cancelEvents() {\n if (this._subscribe) {\n this._subscribe(['mousedown', 'mousemove', 'touchstart', 'touchmove']);\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n args: [this.currentIndex],\n down: this.isActive,\n movementX: this.movement.x,\n movementY: this.movement.y,\n offsetX: this.translation.x,\n offsetY: this.translation.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n distanceX: Math.abs(this.movement.x),\n distanceY: Math.abs(this.movement.y),\n directionX: Math.sign(this.movement.x),\n directionY: Math.sign(this.movement.y),\n cancel: () => {\n this._cancelEvents();\n },\n });\n }\n }\n\n pointerDown(e: any) {\n if (e.type === 'touchstart') {\n this.movementStart = {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY,\n };\n } else {\n this.movementStart = { x: e.clientX, y: e.clientY };\n }\n\n this.movement = { x: 0, y: 0 };\n this.offset = { x: this.translation.x, y: this.translation.y };\n this.previousMovement = { x: 0, y: 0 };\n this.velocity = { x: 0, y: 0 };\n\n // find current selected element\n const currElem = this.targetElements.find((elem: any) => elem === e.target);\n\n if (e.target === this.targetElement || currElem) {\n this.isActive = true;\n e.preventDefault();\n\n // set args\n if (currElem) {\n this.currentIndex = this.targetElements.indexOf(currElem);\n }\n\n // if initial function is defined then call it to get initial movementX and movementY\n // if only select to bounded draggable element\n const initial = this.config?.initial && this.config.initial();\n const initialMovementX = initial?.movementX;\n const initialMovementY = initial?.movementY;\n\n this.initialMovement = {\n x: initialMovementX ?? 0,\n y: initialMovementY ?? 0,\n };\n\n this.movement = {\n x: this.initialMovement.x,\n y: this.initialMovement.y,\n };\n\n this.previousMovement = {\n x: this.initialMovement.x,\n y: this.initialMovement.y,\n };\n\n this._handleCallback();\n }\n }\n\n pointerMove(e: any) {\n if (this.isActive) {\n e.preventDefault();\n const now = Date.now();\n const deltaTime = clamp(now - this.lastTimeStamp, 0.1, 64);\n this.lastTimeStamp = now;\n\n const t = deltaTime / 1000;\n\n if (e.type === 'touchmove') {\n this.movement = {\n x:\n this.initialMovement.x +\n (e.touches[0].clientX - this.movementStart.x),\n y:\n this.initialMovement.y +\n (e.touches[0].clientY - this.movementStart.y),\n };\n } else {\n this.movement = {\n x: this.initialMovement.x + (e.clientX - this.movementStart.x),\n y: this.initialMovement.y + (e.clientY - this.movementStart.y),\n };\n }\n\n this.translation = {\n x: this.offset.x + this.movement.x,\n y: this.offset.y + this.movement.y,\n };\n\n this.velocity = {\n x: clamp(\n (this.movement.x - this.previousMovement.x) / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n (this.movement.y - this.previousMovement.y) / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n }\n\n pointerUp() {\n if (this.isActive) {\n this.isActive = false;\n this._handleCallback();\n this._cancelEvents();\n this._initEvents();\n }\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nexport class MouseMoveGesture extends Gesture {\n event?: MouseEvent;\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['mousemove', this.onMouseMove.bind(this)]]\n );\n } else if (this.targetElements.length > 0) {\n this._subscribe = attachEvents(this.targetElements, [\n ['mousemove', this.onMouseMove.bind(this)],\n ]);\n } else {\n this._subscribe = attachEvents(\n [window],\n [['mousemove', this.onMouseMove.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n args: [this.currentIndex],\n event: this.event,\n isMoving: this.isActive,\n target: this.event?.target,\n mouseX: this.movement.x,\n mouseY: this.movement.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n });\n }\n }\n\n onMouseMove(e: MouseEvent) {\n // find current selected element\n const currElem = this.targetElements.find((elem: any) => elem === e.target);\n\n // set args\n if (currElem) {\n this.currentIndex = this.targetElements.indexOf(currElem);\n }\n\n this.event = e;\n\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n const x = e.clientX;\n const y = e.clientY;\n\n this.movement = { x, y };\n\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.direction = { x: 0, y: 0 };\n this.velocity = { x: 0, y: 0 };\n\n this._handleCallback();\n }, 250); // Debounce 250 milliseconds\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = { x: this.movement.x, y: this.movement.y };\n\n this._handleCallback();\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nexport class ScrollGesture extends Gesture {\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['scroll', this.scrollElementListener.bind(this)]]\n );\n } else {\n this._subscribe = attachEvents(\n [window],\n [['scroll', this.scrollListener.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n isScrolling: this.isActive,\n scrollX: this.movement.x,\n scrollY: this.movement.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n });\n }\n }\n\n onScroll({ x, y }: Vector2) {\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n this.movement = { x, y };\n\n // Clear if scrolling\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.direction = { x: 0, y: 0 };\n\n // Reset Velocity\n this.velocity = { x: 0, y: 0 };\n\n this._handleCallback(); // Debounce 250milliseconds\n }, 250);\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n\n scrollListener() {\n const { pageYOffset: y, pageXOffset: x } = window;\n this.onScroll({ x, y });\n }\n\n scrollElementListener() {\n const x = this.targetElement?.scrollLeft || 0;\n const y = this.targetElement?.scrollTop || 0;\n this.onScroll({ x, y });\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nconst LINE_HEIGHT = 40;\nconst PAGE_HEIGHT = 800;\n\nexport class WheelGesture extends Gesture {\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n delta: Vector2 = withDefault(0, 0);\n\n // Holds offsets\n offset: Vector2 = withDefault(0, 0);\n translation: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['wheel', this.onWheel.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n target: this.targetElement,\n isWheeling: this.isActive,\n deltaX: this.delta.x,\n deltaY: this.delta.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n movementX: this.movement.x,\n movementY: this.movement.y,\n offsetX: this.offset.x,\n offsetY: this.offset.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n });\n }\n }\n\n onWheel(event: WheelEvent) {\n let { deltaX, deltaY, deltaMode } = event;\n\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n this.isActive = true;\n\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.translation = { x: this.offset.x, y: this.offset.y };\n this._handleCallback();\n\n this.velocity = { x: 0, y: 0 }; // Reset Velocity\n this.movement = { x: 0, y: 0 };\n }, 200);\n\n // normalize wheel values, especially for Firefox\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT;\n deltaY *= LINE_HEIGHT;\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT;\n deltaY *= PAGE_HEIGHT;\n }\n\n this.delta = { x: deltaX, y: deltaY };\n this.movement = {\n x: this.movement.x + deltaX,\n y: this.movement.y + deltaY,\n };\n this.offset = {\n x: this.translation.x + this.movement.x,\n y: this.translation.y + this.movement.y,\n };\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\ntype UseRecognizerHandlerType = Array<\n [\n key: 'drag' | 'wheel' | 'move' | 'scroll',\n gesture: any,\n callback: any,\n config?: any\n ]\n>;\n\nexport const useRecognizer = (handlers: UseRecognizerHandlerType) => {\n const ref = React.useRef<any>();\n const elementRefs = React.useRef<Array<any>>([]);\n const subscribers = React.useRef<\n Map<string, { keyIndex: number; gesture: any; unsubscribe: any }>\n >(new Map()).current;\n\n // re-initiate callback on change\n React.useEffect(() => {\n for (let [, { keyIndex, gesture }] of subscribers.entries()) {\n const [, , callback] = handlers[keyIndex];\n gesture.applyCallback(callback);\n }\n }, [handlers]);\n\n React.useEffect(() => {\n handlers.forEach(([key, gesture, callback, config], keyIndex) => {\n subscribers.set(key, {\n keyIndex,\n gesture,\n unsubscribe: gesture.applyGesture({\n targetElement: ref.current,\n targetElements: elementRefs.current,\n callback,\n config,\n }),\n });\n });\n\n return () => {\n for (let [, { unsubscribe }] of subscribers.entries()) {\n unsubscribe && unsubscribe();\n }\n };\n }, []);\n\n return (index?: number) => {\n if (index === null || index === undefined) {\n return { ref };\n } else {\n elementRefs.current[index] =\n elementRefs.current[index] || React.createRef();\n\n return { ref: elementRefs.current[index] };\n }\n };\n};\n","import * as React from 'react';\nimport { useAnimatedValue, UseAnimatedValueConfig } from '../useAnimatedValue';\nimport { FluidValue } from '../../core';\n\ninterface ScrollableBlockProps {\n children?: (animation: {\n value?: FluidValue | string | number;\n }) => React.ReactNode;\n direction?: 'single' | 'both';\n threshold?: number;\n animationConfig?: UseAnimatedValueConfig;\n}\n\n/**\n * ScrollableBlock - Higher order component to handle the entrance or exit animation\n * of a component when it enters or exit the viewport. Accepts child as a function with\n * `AnimatedValue` as its first argument which can be interpolated on input range [0, 1]\n * @prop { function } children - child as a function with `AnimatedValue` as its first argument.\n * @prop { 'single' | 'both' } direction - single applies animation on enter once, both applies on enter and exit.\n * @prop { number } threshold - should be in range 0 to 1 which equivalent to `IntersectionObserver` threshold.\n * @prop { UseAnimatedValueConfig } animationConfig - Animation config\n */\nexport const ScrollableBlock = (props: ScrollableBlockProps) => {\n const {\n children,\n direction = 'single',\n animationConfig,\n threshold = 0.2,\n } = props;\n const scrollableBlockRef = React.useRef<HTMLDivElement>(null);\n const animation = useAnimatedValue(0, animationConfig); // 0: not intersecting | 1: intersecting\n\n React.useEffect(() => {\n const _scrollableBlock = scrollableBlockRef.current;\n\n const observer = new IntersectionObserver(\n function ([entry]) {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n animation.value = 1;\n } else {\n if (direction === 'both') animation.value = 0;\n }\n },\n {\n root: null, // FOR VIEWPORT ONLY\n threshold,\n }\n );\n\n if (_scrollableBlock) {\n observer.observe(_scrollableBlock);\n }\n\n return () => {\n if (_scrollableBlock) {\n observer.unobserve(_scrollableBlock);\n }\n };\n }, []);\n\n return (\n <div ref={scrollableBlockRef}>\n {children && children({ value: animation.value })}\n </div>\n );\n};\n","import * as React from 'react';\nimport { bin } from '../../../gestures/helpers/math';\nimport { useAnimatedValue, UseAnimatedValueConfig } from '../useAnimatedValue';\nimport { FluidValue } from '../../core';\n\ninterface TransitionBlockProps {\n state: boolean;\n children: (animation: {\n value?: FluidValue | string | number;\n }) => React.ReactNode;\n config?: UseAnimatedValueConfig;\n}\n\n/**\n * TransitionBlock - Higher order component which animates on state change.\n * @prop { boolean } state - Boolean indicating the current state of animation, usually `false = 0 and true = 1`.\n * @prop { function } children - Child as a function with `AnimatedValue` on `.value` property.\n * @prop { UseAnimatedValueConfig } config - Animation configuration.\n */\nexport const TransitionBlock = ({\n state,\n children,\n config,\n}: TransitionBlockProps) => {\n const amv = useAnimatedValue(bin(state), config);\n\n return <>{children({ value: amv.value })}</>;\n};\n","import { ExtrapolateConfig, FluidValue, isFluidValue } from '../core';\nimport { interpolate as internalInterpolate } from '../core';\nimport { isDefined } from '../core/helpers';\n\n/**\n * Maps the input range to the given output range using the specified extrapolation configuration.\n * The function ensures that the value is either a number or a FluidValue.\n *\n * @param value - The value to be interpolated, which must be a number or FluidValue.\n * @param inputRange - An array of numbers defining the input range.\n * @param outputRange - An array of numbers or strings defining the output range.\n * @param extrapolateConfig - The extrapolation configuration, which can be \"clamp\", \"identity\", or \"extend\".\n * @returns - The interpolated value, which will be a number or FluidValue.\n * @throws - Will throw an error if the value is not a number or FluidValue.\n */\nexport function interpolate(\n value: FluidValue | number | string | undefined,\n inputRange: Array<number>,\n outputRange: Array<number | string>,\n extrapolateConfig?: ExtrapolateConfig\n) {\n if (!isDefined(value) || typeof value !== 'number' || !isFluidValue(value)) {\n throw new Error(\n `Invalid ${value} type for interpolate function. Expected number or FluidValue.`\n );\n }\n\n return internalInterpolate(value, inputRange, outputRange, extrapolateConfig);\n}\n\n/**\n * A shorthand function for interpolate that maps the input range [0, 1] to the given [minOutput, maxOutput].\n * The function ensures that the value is either a number or a FluidValue.\n *\n * @param value - The value to be interpolated, which must be a number or FluidValue.\n * @param minOutput - The minimum value of the output range, which can be a number or string.\n * @param maxOutput - The maximum value of the output range, which can be a number or string.\n * @param extrapolateConfig - The extrapolation configuration, which can be \"clamp\", \"identity\", or \"extend\".\n * @returns - The interpolated value, which will be a number or FluidValue.\n * @throws - Will throw an error if the value is not a number or FluidValue.\n */\nexport function bInterpolate(\n value: FluidValue | number | string | undefined,\n minOutput: number | string,\n maxOutput: number | string,\n extrapolateConfig?: ExtrapolateConfig\n) {\n if (!isDefined(value) || typeof value !== 'number' || !isFluidValue(value)) {\n throw new Error(\n `Invalid ${value} type for interpolate function. Expected number or FluidValue.`\n );\n }\n\n return internalInterpolate(\n value,\n [0, 1],\n [minOutput, maxOutput],\n extrapolateConfig\n );\n}\n","/**\n * @param { number } ms - number of milliseconds to delay code execution\n * @returns Promise\n */\nexport function delay(ms: number) {\n return new Promise((resolve) => {\n setTimeout(() => resolve(null), ms);\n });\n}\n","import * as React from 'react';\n\nimport { DragEventType, UseDragConfig } from '../types';\nimport { DragGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useDrag(\n callback: (event: DragEventType) => void,\n config?: UseDragConfig\n) {\n const gesture = React.useRef(new DragGesture()).current;\n\n return useRecognizer([['drag', gesture, callback, config]]);\n}\n","import * as React from 'react';\nimport {\n DragGesture,\n MouseMoveGesture,\n ScrollGesture,\n WheelGesture,\n} from '../controllers';\nimport {\n DragEventType,\n WheelEventType,\n ScrollEventType,\n MouseMoveEventType,\n} from '../types';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useGesture({\n onDrag,\n onWheel,\n onScroll,\n onMouseMove,\n}: {\n onDrag?: (event: DragEventType) => void;\n onWheel?: (event: WheelEventType) => void;\n onScroll?: (event: ScrollEventType) => void;\n onMouseMove?: (event: MouseMoveEventType) => void;\n}) {\n const dragGesture = React.useRef(new DragGesture()).current;\n const wheelGesture = React.useRef(new WheelGesture()).current;\n const scrollGesture = React.useRef(new ScrollGesture()).current;\n const mouseMoveGesture = React.useRef(new MouseMoveGesture()).current;\n\n return useRecognizer([\n ['drag', dragGesture, onDrag],\n ['wheel', wheelGesture, onWheel],\n ['scroll', scrollGesture, onScroll],\n ['move', mouseMoveGesture, onMouseMove],\n ]);\n}\n","import { useRef, useEffect, DependencyList, createRef } from 'react';\n\ntype MeasurementValue = number | Array<number>;\n\ntype MeasurementType = {\n left: MeasurementValue;\n top: MeasurementValue;\n width: MeasurementValue;\n height: MeasurementValue;\n vLeft: MeasurementValue;\n vTop: MeasurementValue;\n};\n\nexport function useMeasure(\n callback: (event: MeasurementType) => void,\n deps?: DependencyList\n) {\n const ref = useRef(null);\n const elementRefs = useRef([]);\n const callbackRef = useRef<(event: MeasurementType) => void>(callback);\n\n // Reinitiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const _refElement = ref.current || document.documentElement;\n const _refElementsMultiple = elementRefs.current;\n\n const resizeObserver = new ResizeObserver(([entry]) => {\n const { left, top, width, height } = entry.target.getBoundingClientRect();\n const { pageXOffset, pageYOffset } = window;\n\n if (callbackRef) {\n if (_refElement === document.documentElement) {\n return; // no-op for document\n } else {\n callbackRef.current({\n left: left + pageXOffset,\n top: top + pageYOffset,\n width,\n height,\n vLeft: left,\n vTop: top,\n });\n }\n }\n });\n\n const resizeObserverMultiple = new ResizeObserver((entries) => {\n const left: Array<number> = [];\n const top: Array<number> = [];\n const width: Array<number> = [];\n const height: Array<number> = [];\n const vLeft: Array<number> = [];\n const vTop: Array<number> = [];\n\n entries.forEach((entry) => {\n const {\n left: _left,\n top: _top,\n width: _width,\n height: _height,\n } = entry.target.getBoundingClientRect();\n const { pageXOffset, pageYOffset } = window;\n const _pageLeft = _left + pageXOffset;\n const _pageTop = _top + pageYOffset;\n\n left.push(_pageLeft);\n top.push(_pageTop);\n width.push(_width);\n height.push(_height);\n vLeft.push(_left);\n vTop.push(_top);\n });\n\n if (callbackRef) {\n callbackRef.current({\n left,\n top,\n width,\n height,\n vLeft,\n vTop,\n });\n }\n });\n\n if (_refElement) {\n if (\n _refElement === document.documentElement &&\n _refElementsMultiple.length > 0\n ) {\n _refElementsMultiple.forEach((element: any) => {\n resizeObserverMultiple.observe(element.current);\n });\n } else {\n resizeObserver.observe(_refElement);\n }\n }\n\n return () => {\n if (_refElement) {\n if (\n _refElement === document.documentElement &&\n _refElementsMultiple.length > 0\n ) {\n _refElementsMultiple.forEach((element: any) => {\n resizeObserverMultiple.unobserve(element.current);\n });\n } else {\n resizeObserver.unobserve(_refElement);\n }\n }\n };\n }, []);\n\n return (index?: number) => {\n if (index === null || index === undefined) {\n return { ref };\n } else {\n elementRefs.current[index] = elementRefs.current[index] || createRef();\n\n return { ref: elementRefs.current[index] };\n }\n }; // ...bind() or ...bind(index) for multiple\n}\n","import * as React from 'react';\n\nimport { MouseMoveEventType } from '../types';\nimport { MouseMoveGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useMouseMove(callback: (event: MouseMoveEventType) => void) {\n const gesture = React.useRef(new MouseMoveGesture()).current;\n\n return useRecognizer([['move', gesture, callback]]);\n}\n","import { useRef, useEffect, RefObject, DependencyList } from 'react';\n\nimport { attachEvents } from '../gestures/helpers/eventAttacher';\n\nexport function useOutsideClick(\n elementRef: RefObject<HTMLElement>,\n callback: (event: MouseEvent) => void,\n deps?: DependencyList\n) {\n const callbackRef = useRef<(event: MouseEvent) => void>();\n\n if (!callbackRef.current) {\n callbackRef.current = callback;\n }\n\n // Reinitiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const handleOutsideClick = (e: MouseEvent) => {\n if (!elementRef?.current?.contains(e.target as Element)) {\n callbackRef.current && callbackRef.current(e);\n }\n };\n\n const subscribe = attachEvents([document], [['click', handleOutsideClick]]);\n\n return () => subscribe && subscribe();\n }, []);\n}\n","import * as React from 'react';\n\nimport { ScrollEventType } from '../types';\nimport { ScrollGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useScroll(callback: (event: ScrollEventType) => void) {\n const gesture = React.useRef(new ScrollGesture()).current;\n\n return useRecognizer([['scroll', gesture, callback]]);\n}\n","import * as React from 'react';\n\nimport { WheelEventType } from '../types';\nimport { WheelGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useWheel(callback: (event: WheelEventType) => void) {\n const gesture = React.useRef(new WheelGesture()).current;\n\n return useRecognizer([['wheel', gesture, callback]]);\n}\n","import { useRef, useEffect, DependencyList } from 'react';\n\ntype WindowDimensionType = {\n width: number;\n height: number;\n innerWidth: number;\n innerHeight: number;\n};\n\nexport function useWindowDimension(\n callback: (event: WindowDimensionType) => void,\n deps?: DependencyList\n) {\n const windowDimensionsRef = useRef<WindowDimensionType>({\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n });\n const callbackRef = useRef<(event: WindowDimensionType) => void>(callback);\n\n const handleCallback: () => void = () => {\n if (callbackRef) {\n callbackRef.current({\n ...windowDimensionsRef.current,\n });\n }\n };\n\n // Reinitiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver(([entry]) => {\n const { clientWidth, clientHeight } = entry.target;\n const { innerWidth, innerHeight } = window;\n\n windowDimensionsRef.current = {\n width: clientWidth,\n height: clientHeight,\n innerWidth,\n innerHeight,\n };\n\n handleCallback();\n });\n\n resizeObserver.observe(document.documentElement);\n\n return () => resizeObserver.unobserve(document.documentElement);\n }, []);\n}\n"],"names":["Animation","prototype","_debounceOnEnd","result","onEnd","this","_onEnd","onRest","_onRest","stop","RequestAnimationFrame","current","cb","window","requestAnimationFrame","inject","injected","CancelAnimationFrame","id","cancelAnimationFrame","SpringAnimation","_super","_a","initialPosition","config","_this","_overshootClamping","_initialVelocity","_lastVelocity","_startPosition","_position","_restDisplacementThreshold","_b","restDistance","_restSpeedThreshold","_c","_mass","_d","mass","_tension","_e","tension","_friction","_f","friction","_delay","_g","delay","_onChange","onChange","__extends","value","_onFrame","_lastPosition","onUpdate","now","Date","deltaTime","Math","min","_lastTime","c","m","k","v0","x0","_toValue","zeta","sqrt","omega0","omega1","pow","t","sin1","sin","cos1","cos","underDampedEnvelope","exp","underDampedFrag1","underDampedPosition","underDampedVelocity","criticallyDampedEnvelope","criticallyDampedPosition","criticallyDampedVelocity","isVelocity","abs","isDisplacement","finished","_animationFrame","bind","_active","clearTimeout","_timeout","set","toValue","start","onFrame","previousAnimation","onStart","setTimeout","NEWTON_ITERATIONS","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSampleStepSize","float32ArraySupported","Float32Array","A","aA1","aA2","B","C","calcBezier","aT","getSlope","LinearEasing","x","bezier","mX1","mY1","mX2","mY2","Error","sampleValues","Array","i","getTForX","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","Easing","step0","n","step1","linear","ease","quad","cubic","poly","PI","circle","elastic","bounciness","p","back","s","undefined","bounce","x1","y1","x2","y2","_bezier","in","easing","out","inOut","TimingAnimation","_fromValue","_easing","_duration","duration","_tempDuration","immediate","runTime","_startTime","progress","COLOR_NUMBER_REGEX","HEX_NAME_COLOR","colorNames","transparent","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","hexToRgba","hex","hex6","replace","_","r","g","b","conv3to6","hex8","length","conv6to8","hexRgba","exec","parseInt","a","rgbaToHex","rgba","toString","slice","isDefined","isFluidValue","unitlessStyleProps","_internalInterpolate","val","arr","extrapolateLeft","extrapolateRight","__read","inputMin","inputMax","outputMin","outputMax","Infinity","_getNarrowedInputArray","input","output","narrowedInput","_getArrayInterpolate","_extrapolateLeft","_extrapolateRight","map","index","outputMinProcessed","outputMaxProcessed","_getColorInterpolate","_getTemplateString","str","_getParsedStringArray","match","v","indexOf","Number","stringMatched","str1","str2","trim","getProcessedColor","Object","hasOwnProperty","call","interpolateNumbers","inputRange","outputRange","extrapolateConfig","extrapolate","isArray","processedOutputMin","processedOutputMax","templateString","outputMinParsed","outputMaxParsed","result_1","__values","result_1_1","next","done","interpolate","__assign","isInterpolation","interpolationConfig","interpolateTransitionValue","concat","styleTrasformKeys","splitCSSValueAndUnit","valueMatch","unitMatch","unit","getTransformValueWithUnits","property","valueUnit","splitValue","String","splitUnit","includes","getValueUnit","makeFluid","WrapperComponent","forwardRef","givenProps","givenRef","instanceRef","useRef","transformStyleRef","useMemo","style","props","__rest","fluidStyle","getFluids","fluidProps","fluids","__spreadArray","nonFluids","applyAnimationValues","isTransform","propertyType","transform","entries","reduce","getCssValue","setAttribute","toLowerCase","useLayoutEffect","forEach","subscribers","f","defaultConfig","fluidValue","_subscribe","_value","_currentValue","_config","interpolationOutputRange","generateAnimation","animationConfig","animation","updatedValue","subscribe","callback","previousValue","newValue","processedPreviousValue","processedNewValue","canInterpolate","push","subscriber","createElement","fromEntries","filter","getCleanProps","ref","combineRefs","refs","_i","arguments","element","res","key","fluid","tag","FluidValue","initialValue","_subscriptions","Map","uuid","delete","keys","get","setValue","subscriptionKey","updater","nextValue","nextConfig","multiStagePromise","Promise","resolve","useFluidValue","setFluid","useCallback","updateValue","AnimatedBlock","AnimatedInline","AnimatedImage","useMountedValue","state","mv","useState","mounted","setMounted","from","enter","exit","innerConfig","enterConfig","exitConfig","setAnimation","queueMicrotask","useMount","getInitialConfig","animationType","AnimationConfigUtils","ELASTIC","BOUNCE","EASE","STIFF","WOOBLE","EASE_IN","EASE_OUT","EASE_IN_OUT","POWER1","POWER2","POWER3","POWER4","LINEAR","useAnimatedValue","targetObject","currentValue","Proxy","bin","bool","clamp","lowerbound","upperbound","max","rubber","distanceFromEdge","dimension","constant","rubber2","attachEvents","domTargets","events","event","capture","target","addEventListener","removeEventListener","attachEvent","eventKeys","eventKey","withDefault","y","Gesture","lastTimeStamp","isActive","targetElements","_initEvents","_cancelEvents","applyCallback","applyGesture","targetElement","_VELOCITY_LIMIT","DragGesture","movementStart","initialMovement","movement","previousMovement","translation","offset","velocity","pointerDown","pointerMove","pointerUp","passive","_handleCallback","args","currentIndex","down","movementX","movementY","offsetX","offsetY","velocityX","velocityY","distanceX","distanceY","directionX","sign","directionY","cancel","e","type","touches","clientX","clientY","currElem","find","elem","preventDefault","initial","initialMovementX","initialMovementY","MouseMoveGesture","direction","onMouseMove","isMoving","mouseX","mouseY","isActiveID","diffX","diffY","ScrollGesture","scrollElementListener","scrollListener","isScrolling","scrollX","scrollY","onScroll","pageYOffset","pageXOffset","scrollLeft","scrollTop","WheelGesture","delta","onWheel","isWheeling","deltaX","deltaY","deltaMode","useRecognizer","handlers","React","elementRefs","useEffect","keyIndex","gesture","unsubscribe","createRef","children","open","_jsx","threshold","scrollableBlockRef","_scrollableBlock","observer","IntersectionObserver","isIntersecting","root","observe","unobserve","amv","_Fragment","minOutput","maxOutput","internalInterpolate","ms","perc","val1","val2","array","moveIndex","toIndex","item","diff","targetIndex","snapPoints","finalValue","getDiff","point","deltas","minDelta","acc","onDrag","dragGesture","wheelGesture","scrollGesture","mouseMoveGesture","deps","callbackRef","_refElement","document","documentElement","_refElementsMultiple","resizeObserver","ResizeObserver","getBoundingClientRect","left","top","width","height","vLeft","vTop","resizeObserverMultiple","entry","_left","_top","_width","_height","_pageLeft","_pageTop","elementRef","contains","windowDimensionsRef","innerWidth","innerHeight","clientWidth","clientHeight"],"mappings":"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A,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,SACA,QACA,SACA,KACA,OACA,OACA,MACA,OACA,OACA,WACA,OACA,QACA,MACA,UACA,WACA,SACA,KACA,WACA,SACA,SACA,IACA,QACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,SACA,UACA,SACA,QACA,SACA,OACA,SACA,QACA,MACA,UACA,MACA,QACA,WACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,QACA,KACA,QACA,IACA,KACA,MACA,QACA,MAGA,MACA,UACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,eACA,SACA,gBACA,IACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,MACA,OACA,SACA,SACA,OACA,WACA,QACA,MACA,QAWGnC,SAAQ,SAACoC,GACXD,EAAcC,GAAOhE,EAAUgE,EAClC,ICvLA,IAAAC,GAAA,WAcE,SAAYA,EAAAC,EAAsBrd,GAAlC,IAqBCC,EAAApB,KApBCA,KAAKye,eAAiB,IAAIC,IAC1B1e,KAAKuc,WAAa,SAChBtZ,EACA8W,EACA4E,sBAEWP,GACT,GAAIA,EAAIrE,WAAaA,SACnB3Y,EAAKqd,eAAehZ,IAAI2Y,EAAKnb,UACtB,WAAM,OAAA7B,EAAKqd,eAAeG,OAAOR,EAAI,QAHhD,IAAkB,IAAAzc,EAAAoX,EAAA3X,EAAKqd,eAAeI,QAAM/c,EAAAH,EAAAsX,QAAAnX,EAAAoX,KAAApX,EAAAH,EAAAsX,OAAA,CAAvC,QAASnX,EAAAgB,2CAKb,mGAGD,OADA1B,EAAKqd,eAAehZ,IAAI,CAAEkZ,KAAIA,EAAE5E,SAAQA,GAAI9W,GACrC,WAAM,OAAA7B,EAAKqd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"}
1
+ {"version":3,"file":"index.js","sources":["../src/animation/helpers/isDefined.ts","../src/animation/interpolation.ts","../src/animation/modules/AnimatedBlock.ts","../src/animation/modules/AnimatedInline.ts","../src/animation/modules/AnimatedImage.ts","../src/animation/useMountedValue.ts","../src/animation/modules/MountedBlock.tsx","../src/animation/animationType.ts","../src/animation/useAnimatedValue.ts","../src/gestures/helpers/math.ts","../src/gestures/helpers/eventAttacher.ts","../src/gestures/helpers/withDefault.ts","../src/gestures/controllers/Gesture.ts","../src/gestures/controllers/DragGesture.ts","../src/gestures/controllers/MouseMoveGesture.ts","../src/gestures/controllers/ScrollGesture.ts","../src/gestures/controllers/WheelGesture.ts","../src/gestures/hooks/useRecognizer.ts","../src/animation/modules/ScrollableBlock.tsx","../src/animation/modules/TransitionBlock.tsx","../src/animation/helpers/delay.ts","../src/gestures/hooks/useDrag.ts","../src/gestures/hooks/useGesture.ts","../src/hooks/useMeasure.ts","../src/gestures/hooks/useMouseMove.ts","../src/hooks/useOutsideClick.ts","../src/gestures/hooks/useScroll.ts","../src/gestures/hooks/useWheel.ts","../src/hooks/useWindowDimension.ts","../src/animation/withFunctions.ts"],"sourcesContent":["export const isDefined = <T>(value: T): value is NonNullable<T> => {\n return value !== null && value !== undefined;\n};\n","import {\n ExtrapolateConfig,\n FluidValue,\n isFluidValue,\n interpolate as internalInterpolate,\n} from '@raidipesh78/re-motion';\n\nimport { isDefined } from './helpers';\nimport { ValueType } from './useAnimatedValue';\n\nfunction checkFluidValueOrNumber(value: unknown): number | FluidValue {\n if (\n !isDefined(value) ||\n !(typeof value === 'number' || isFluidValue(value))\n ) {\n console.log(value);\n throw new Error(\n `Invalid ${value} type for interpolate function. Expected number or FluidValue.`\n );\n }\n return value;\n}\n\n/**\n * Maps the input range to the given output range using the specified extrapolation configuration.\n * The function ensures that the value is either a number or a FluidValue.\n *\n * @param value - The value to be interpolated, which must be a number or FluidValue.\n * @param inputRange - An array of numbers defining the input range.\n * @param outputRange - An array of numbers or strings defining the output range.\n * @param extrapolateConfig - The extrapolation configuration, which can be \"clamp\", \"identity\", or \"extend\".\n * @returns - The interpolated value, which will be a number or FluidValue.\n * @throws - Will throw an error if the value is not a number or FluidValue.\n */\nexport function interpolate(\n value: FluidValue | ValueType | number,\n inputRange: Array<number>,\n outputRange: Array<number | string>,\n extrapolateConfig?: ExtrapolateConfig\n) {\n const checkedValue = checkFluidValueOrNumber(value);\n\n return internalInterpolate(\n checkedValue,\n inputRange,\n outputRange,\n extrapolateConfig\n );\n}\n\n/**\n * A shorthand function for interpolate that maps the input range [0, 1] to the given [minOutput, maxOutput].\n * The function ensures that the value is either a number or a FluidValue.\n *\n * @param value - The value to be interpolated, which must be a number or FluidValue.\n * @param minOutput - The minimum value of the output range, which can be a number or string.\n * @param maxOutput - The maximum value of the output range, which can be a number or string.\n * @param extrapolateConfig - The extrapolation configuration, which can be \"clamp\", \"identity\", or \"extend\".\n * @returns - The interpolated value, which will be a number or FluidValue.\n * @throws - Will throw an error if the value is not a number or FluidValue.\n */\nexport function bInterpolate(\n value: FluidValue | ValueType | number,\n minOutput: number | string,\n maxOutput: number | string,\n extrapolateConfig?: ExtrapolateConfig\n) {\n const checkedValue = checkFluidValueOrNumber(value);\n\n return internalInterpolate(\n checkedValue,\n [0, 1],\n [minOutput, maxOutput],\n extrapolateConfig\n );\n}\n","import { makeFluid } from '@raidipesh78/re-motion';\n\n/**\n * AnimatedBlock - A higher order component built upon `div` element\n * which can accept `AnimatedValue`. It also exposes some extra style properties like\n * translateX, translateY, rotateX, rotateY, scaleX, etc.\n */\nexport const AnimatedBlock = makeFluid('div');\n","import { makeFluid } from '@raidipesh78/re-motion';\n\n/**\n * AnimatedInline - A higher order component built upon `span` element\n * which can accept `AnimatedValue`. It also exposes some extra style properties like\n * translateX, translateY, rotateX, rotateY, scaleX, etc.\n */\nexport const AnimatedInline = makeFluid('span');\n","import { makeFluid } from '@raidipesh78/re-motion';\n\n/**\n * AnimatedImage - A higher order component built upon `img` element\n * which can accept `AnimatedValue`. It also exposes some extra style properties like\n * translateX, translateY, rotateX, rotateY, scaleX, etc.\n */\nexport const AnimatedImage = makeFluid('img');\n","import { useMount, UseMountConfig, FluidValue } from '@raidipesh78/re-motion';\n\nexport interface UseMountedValueConfig extends UseMountConfig {}\n\n/**\n * `useMountedValue` handles mounting and unmounting of a component which captures current state\n * passed as an arugment (`state`) and exposes the shadow state which handles the mount and unmount\n * of a component.\n *\n * @param { boolean } state - Boolean indicating the component should mount or unmount.\n * @param { UseMountedValueConfig } config - Animation configuration.\n */\nexport function useMountedValue(state: boolean, config: UseMountedValueConfig) {\n const mv = useMount(state, config);\n return (\n cb: (value: { value: FluidValue }, mounted: boolean) => React.ReactNode\n ) => mv((a, m) => cb({ value: a }, m));\n}\n","import * as React from 'react';\nimport type { FluidValueConfig } from '@raidipesh78/re-motion';\n\nimport { useMountedValue } from '../useMountedValue';\nimport { ValueType } from '../useAnimatedValue';\n\ninterface MountedValueConfig extends FluidValueConfig {}\n\ninterface MountedBlockProps {\n state: boolean;\n children: (animation: { value: ValueType }) => React.ReactNode;\n from?: number;\n enter?: number;\n exit?: number;\n config?: MountedValueConfig;\n enterConfig?: MountedValueConfig;\n exitConfig?: MountedValueConfig;\n}\n\n/**\n * MountedBlock - Higher order component which handles mounting and unmounting of a component.\n * @prop { boolean } state - Boolean indicating the component should mount or unmount.\n * @prop { function } children - Child as a function with `AnimatedValue` on `.value` property.\n * @prop { number } from - Number that dictates the beginning state for animation.\n * @prop { number } enter - Number that dictates the entry state for animation.\n * @prop { number } exit - Number that dictates the exit state for animation.\n * @prop { MountedValueConfig } config - Animation configuration for overall animation.\n * @prop { MountedValueConfig } enterConfig - Animation configuration for the entering state of animation.\n * @prop { MountedValueConfig } exitConfig - Animation configuration for the entering state of animation.\n */\nexport const MountedBlock = ({\n state,\n children,\n from = 0,\n enter = 1,\n exit = 0,\n config,\n enterConfig,\n exitConfig,\n}: MountedBlockProps) => {\n const open = useMountedValue(state, {\n from,\n enter,\n exit,\n config,\n enterConfig,\n exitConfig,\n });\n\n return (\n <>\n {open(\n (animation, mounted) =>\n mounted && children({ value: animation.value as any })\n )}\n </>\n );\n};\n","import { Easing, FluidValueConfig } from '@raidipesh78/re-motion';\n\ntype InitialConfigType =\n | 'linear'\n | 'easein'\n | 'easeout'\n | 'easeinout'\n | 'ease'\n | 'power1'\n | 'power2'\n | 'power3'\n | 'power4'\n | 'elastic'\n | 'stiff'\n | 'wooble'\n | 'bounce';\n\nconst getInitialConfig = (\n animationType?: InitialConfigType\n): FluidValueConfig => {\n switch (animationType) {\n case 'elastic':\n return { mass: 1, friction: 18, tension: 250 };\n\n case 'stiff':\n return { mass: 1, friction: 18, tension: 350 };\n\n case 'wooble':\n return { mass: 1, friction: 8, tension: 250 };\n\n case 'bounce':\n return { duration: 500, easing: Easing.bounce };\n\n case 'power1':\n return { duration: 500, easing: Easing.bezier(0.17, 0.42, 0.51, 0.97) };\n\n case 'power2':\n return { duration: 500, easing: Easing.bezier(0.07, 0.11, 0.13, 1) };\n\n case 'power3':\n return { duration: 500, easing: Easing.bezier(0.09, 0.7, 0.16, 1.04) };\n\n case 'power4':\n return { duration: 500, easing: Easing.bezier(0.05, 0.54, 0, 1.03) };\n\n case 'linear':\n return { duration: 500, easing: Easing.linear };\n\n case 'easein':\n return { duration: 500, easing: Easing.in(Easing.ease) };\n\n case 'easeout':\n return { duration: 500, easing: Easing.out(Easing.ease) };\n\n case 'easeinout':\n return { duration: 500, easing: Easing.inOut(Easing.ease) };\n\n case 'ease':\n default:\n return { mass: 1, friction: 34, tension: 290 };\n }\n};\n\nexport const AnimationConfigUtils = {\n ELASTIC: getInitialConfig('elastic'),\n BOUNCE: getInitialConfig('bounce'),\n EASE: getInitialConfig('ease'),\n STIFF: getInitialConfig('stiff'),\n WOOBLE: getInitialConfig('wooble'),\n EASE_IN: getInitialConfig('easein'),\n EASE_OUT: getInitialConfig('easeout'),\n EASE_IN_OUT: getInitialConfig('easeinout'),\n POWER1: getInitialConfig('power1'),\n POWER2: getInitialConfig('power2'),\n POWER3: getInitialConfig('power3'),\n POWER4: getInitialConfig('power4'),\n LINEAR: getInitialConfig('linear'),\n};\n","import { useFluidValue, FluidValueConfig } from '@raidipesh78/re-motion';\n\nimport { AnimationConfigUtils } from './animationType';\n\n// useAnimatedValue value type\ntype Length = number | string;\n\nexport interface UseAnimatedValueConfig extends FluidValueConfig {}\n\ntype AssignValue = {\n toValue: Length;\n config?: UseAnimatedValueConfig;\n};\n\nexport type ValueType =\n | Length\n | AssignValue\n | ((update: (next: AssignValue) => Promise<any>) => void);\n/**\n * `useAnimatedValue` returns an animation value with `.value` and `.currentValue` property which is\n * initialized when passed to argument (`initialValue`). The retured value persist until the lifetime of\n * a component. It doesnot cast any re-renders which can is very good for performance optimization.\n *\n * @param { string | number } initialValue - Initial value\n * @param { UseAnimatedValueConfig } config - Animation configuration object.\n */\nexport function useAnimatedValue(\n initialValue: Length,\n config?: UseAnimatedValueConfig\n) {\n const [animation, setAnimation] = useFluidValue(initialValue, {\n ...AnimationConfigUtils.EASE,\n ...config,\n });\n\n const targetObject: {\n value: ValueType;\n currentValue: number | string;\n } = {\n value: animation as any,\n currentValue: animation.get(),\n };\n\n return new Proxy(targetObject, {\n set: function (_, key, value: ValueType) {\n if (key === 'value') {\n if (typeof value === 'number' || typeof value === 'string') {\n setAnimation({ toValue: value });\n } else if (typeof value === 'object' || typeof value === 'function') {\n setAnimation(value);\n }\n\n return true;\n }\n\n throw new Error('You cannot set any other property to animation node.');\n },\n get: function (_, key) {\n if (key === 'value') {\n return animation;\n }\n\n if (key === 'currentValue') {\n return animation.get();\n }\n\n throw new Error(\n 'You cannot access any other property from animation node.'\n );\n },\n });\n}\n","/**\n * bin(booleanValue)\n * returns 1 if booleanValue == true and 0 if booleanValue == false\n */\nexport function bin(bool: boolean) {\n return bool ? 1 : 0;\n}\n\n/**\n * mix(progress, a, b)\n * linear interpolation between a and b\n */\nexport function mix(perc: number, val1: number, val2: number) {\n return val1 * (1 - perc) + val2 * perc;\n}\n\n/**\n * clamp(value, min, max)\n * clamps value for min and max bounds\n */\nexport function clamp(value: number, lowerbound: number, upperbound: number) {\n return Math.min(Math.max(value, lowerbound), upperbound);\n}\n\nfunction rubber2(distanceFromEdge: number, constant: number) {\n return Math.pow(distanceFromEdge, constant * 5);\n}\n\nfunction rubber(distanceFromEdge: number, dimension: number, constant: number) {\n if (dimension === 0 || Math.abs(dimension) === Infinity)\n return rubber2(distanceFromEdge, constant);\n return (\n (distanceFromEdge * dimension * constant) /\n (dimension + constant * distanceFromEdge)\n );\n}\n\n/**\n * rubberClamp(value, min, max, constant?)\n * constant is optional : default 0.15\n * clamps the value for min and max value and\n * extends beyond min and max values with constant\n * factor to create elastic rubber band effect\n */\nexport function rubberClamp(\n value: number,\n lowerbound: number,\n upperbound: number,\n constant: number = 0.15\n) {\n if (constant === 0) return clamp(value, lowerbound, upperbound);\n\n if (value < lowerbound) {\n return (\n -rubber(lowerbound - value, upperbound - lowerbound, constant) +\n lowerbound\n );\n }\n\n if (value > upperbound) {\n return (\n +rubber(value - upperbound, upperbound - lowerbound, constant) +\n upperbound\n );\n }\n\n return value;\n}\n\n/**\n * snapTo(value, velocity, snapPoints[])\n * Calculates the final snapPoint according to given current value,\n * velocity and snapPoints array\n */\nexport function snapTo(\n value: number,\n velocity: number,\n snapPoints: Array<number>\n): number {\n const finalValue = value + velocity * 0.2;\n const getDiff = (point: number) => Math.abs(point - finalValue);\n const deltas = snapPoints.map(getDiff);\n const minDelta = Math.min(...deltas);\n\n return snapPoints.reduce(function (acc, point) {\n if (getDiff(point) === minDelta) {\n return point;\n } else {\n return acc;\n }\n });\n}\n\n/**\n * move(array, moveIndex, toIndex)\n * move array item from moveIndex to toIndex without array modification\n */\nexport function move(array: Array<any>, moveIndex: number, toIndex: number) {\n const item = array[moveIndex];\n const length = array.length;\n const diff = moveIndex - toIndex;\n\n if (diff > 0) {\n return [\n ...array.slice(0, toIndex),\n item,\n ...array.slice(toIndex, moveIndex),\n ...array.slice(moveIndex + 1, length),\n ];\n } else if (diff < 0) {\n const targetIndex = toIndex + 1;\n return [\n ...array.slice(0, moveIndex),\n ...array.slice(moveIndex + 1, targetIndex),\n item,\n ...array.slice(targetIndex, length),\n ];\n }\n return array;\n}\n","type MouseEventType =\n | 'click'\n | 'dblclick'\n | 'mousedown'\n | 'mousemove'\n | 'mouseup'\n | 'touchstart'\n | 'touchmove'\n | 'touchend'\n | 'mouseenter'\n | 'mouseleave'\n | 'mouseout'\n | 'mouseover'\n | 'scroll'\n | 'wheel'\n | 'contextmenu';\n\ntype DomTargetTypes = Array<Window | Document | HTMLElement>;\n\n/**\n * Attach single document / window event / HTMLElement\n */\nfunction attachEvent(\n domTargets: DomTargetTypes,\n event: MouseEventType,\n callback: (e: any) => void,\n capture: any = false\n) {\n domTargets.forEach((target) => {\n target.addEventListener(event, callback, capture);\n });\n\n return function () {\n domTargets.forEach((target) => {\n target.removeEventListener(event, callback, capture);\n });\n };\n}\n\n/**\n * Attach multiple document / window event / HTMLElement\n */\nexport function attachEvents(\n domTargets: DomTargetTypes,\n events: Array<\n [event: MouseEventType, callback: (e: any) => void, capture?: any]\n >\n) {\n const subscribers = new Map();\n\n events.forEach(function ([event, callback, capture = false]) {\n subscribers.set(event, attachEvent(domTargets, event, callback, capture));\n });\n\n return function (eventKeys?: Array<string>) {\n for (const [eventKey, subscriber] of subscribers.entries()) {\n if (!eventKeys) {\n subscriber();\n return;\n }\n\n if (eventKeys.indexOf(eventKey) !== -1) {\n subscriber();\n }\n }\n };\n}\n","export const withDefault = (x: number, y: number) => {\n return { x, y };\n};\n","export class Gesture {\n currentIndex?: number;\n lastTimeStamp: number = Date.now();\n isActive: boolean = false;\n targetElement?: HTMLElement; // represents the bounded element\n targetElements: Array<HTMLElement> = []; // represents the bounded elements\n config?: any;\n callback?: <T>(event: T) => void;\n _subscribe?: (eventKeys?: Array<string>) => void;\n static _VELOCITY_LIMIT: number = 20;\n\n // it must be overridden by other child classes\n _initEvents() {}\n\n // cancel events\n // we only canceled down and move events because mouse up\n // will not be triggered\n _cancelEvents() {\n if (this._subscribe) {\n this._subscribe();\n }\n }\n\n // re-apply new callback\n applyCallback(callback: <T>(event: T) => void) {\n this.callback = callback;\n }\n\n // apply gesture\n applyGesture({\n targetElement,\n targetElements,\n callback,\n config,\n }: {\n targetElement?: any;\n targetElements?: any;\n callback: <T>(event: T) => void;\n config?: any;\n }) {\n this.targetElement = targetElement;\n this.targetElements = targetElements.map(\n (element: { current: any }) => element.current\n );\n this.callback = callback;\n this.config = config;\n\n // initialize events\n this._initEvents();\n\n // unbind\n return () => this._subscribe && this._subscribe();\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nimport type { Vector2 } from '../types';\n\nexport class DragGesture extends Gesture {\n movementStart: Vector2 = withDefault(0, 0);\n initialMovement: Vector2 = withDefault(0, 0);\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n translation: Vector2 = withDefault(0, 0);\n offset: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement || this.targetElements.length > 0) {\n this._subscribe = attachEvents(\n [window],\n [\n ['mousedown', this.pointerDown.bind(this)],\n ['mousemove', this.pointerMove.bind(this)],\n ['mouseup', this.pointerUp.bind(this)],\n ['touchstart', this.pointerDown.bind(this), { passive: false }],\n ['touchmove', this.pointerMove.bind(this), { passive: false }],\n ['touchend', this.pointerUp.bind(this)],\n ]\n );\n }\n }\n\n // @override - cancel events\n // we only canceled down and move events because mouse up\n // will not be triggered\n _cancelEvents() {\n if (this._subscribe) {\n this._subscribe(['mousedown', 'mousemove', 'touchstart', 'touchmove']);\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n args: [this.currentIndex],\n down: this.isActive,\n movementX: this.movement.x,\n movementY: this.movement.y,\n offsetX: this.translation.x,\n offsetY: this.translation.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n distanceX: Math.abs(this.movement.x),\n distanceY: Math.abs(this.movement.y),\n directionX: Math.sign(this.movement.x),\n directionY: Math.sign(this.movement.y),\n cancel: () => {\n this._cancelEvents();\n },\n });\n }\n }\n\n pointerDown(e: any) {\n if (e.type === 'touchstart') {\n this.movementStart = {\n x: e.touches[0].clientX,\n y: e.touches[0].clientY,\n };\n } else {\n this.movementStart = { x: e.clientX, y: e.clientY };\n }\n\n this.movement = { x: 0, y: 0 };\n this.offset = { x: this.translation.x, y: this.translation.y };\n this.previousMovement = { x: 0, y: 0 };\n this.velocity = { x: 0, y: 0 };\n\n // find current selected element\n const currElem = this.targetElements.find((elem: any) => elem === e.target);\n\n if (e.target === this.targetElement || currElem) {\n this.isActive = true;\n e.preventDefault();\n\n // set args\n if (currElem) {\n this.currentIndex = this.targetElements.indexOf(currElem);\n }\n\n // if initial function is defined then call it to get initial movementX and movementY\n // if only select to bounded draggable element\n const initial = this.config?.initial && this.config.initial();\n const initialMovementX = initial?.movementX;\n const initialMovementY = initial?.movementY;\n\n this.initialMovement = {\n x: initialMovementX ?? 0,\n y: initialMovementY ?? 0,\n };\n\n this.movement = {\n x: this.initialMovement.x,\n y: this.initialMovement.y,\n };\n\n this.previousMovement = {\n x: this.initialMovement.x,\n y: this.initialMovement.y,\n };\n\n this._handleCallback();\n }\n }\n\n pointerMove(e: any) {\n if (this.isActive) {\n e.preventDefault();\n const now = Date.now();\n const deltaTime = clamp(now - this.lastTimeStamp, 0.1, 64);\n this.lastTimeStamp = now;\n\n const t = deltaTime / 1000;\n\n if (e.type === 'touchmove') {\n this.movement = {\n x:\n this.initialMovement.x +\n (e.touches[0].clientX - this.movementStart.x),\n y:\n this.initialMovement.y +\n (e.touches[0].clientY - this.movementStart.y),\n };\n } else {\n this.movement = {\n x: this.initialMovement.x + (e.clientX - this.movementStart.x),\n y: this.initialMovement.y + (e.clientY - this.movementStart.y),\n };\n }\n\n this.translation = {\n x: this.offset.x + this.movement.x,\n y: this.offset.y + this.movement.y,\n };\n\n this.velocity = {\n x: clamp(\n (this.movement.x - this.previousMovement.x) / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n (this.movement.y - this.previousMovement.y) / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n }\n\n pointerUp() {\n if (this.isActive) {\n this.isActive = false;\n this._handleCallback();\n this._cancelEvents();\n this._initEvents();\n }\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nexport class MouseMoveGesture extends Gesture {\n event?: MouseEvent;\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['mousemove', this.onMouseMove.bind(this)]]\n );\n } else if (this.targetElements.length > 0) {\n this._subscribe = attachEvents(this.targetElements, [\n ['mousemove', this.onMouseMove.bind(this)],\n ]);\n } else {\n this._subscribe = attachEvents(\n [window],\n [['mousemove', this.onMouseMove.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n args: [this.currentIndex],\n event: this.event,\n isMoving: this.isActive,\n target: this.event?.target,\n mouseX: this.movement.x,\n mouseY: this.movement.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n });\n }\n }\n\n onMouseMove(e: MouseEvent) {\n // find current selected element\n const currElem = this.targetElements.find((elem: any) => elem === e.target);\n\n // set args\n if (currElem) {\n this.currentIndex = this.targetElements.indexOf(currElem);\n }\n\n this.event = e;\n\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n const x = e.clientX;\n const y = e.clientY;\n\n this.movement = { x, y };\n\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.direction = { x: 0, y: 0 };\n this.velocity = { x: 0, y: 0 };\n\n this._handleCallback();\n }, 250); // Debounce 250 milliseconds\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = { x: this.movement.x, y: this.movement.y };\n\n this._handleCallback();\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nexport class ScrollGesture extends Gesture {\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['scroll', this.scrollElementListener.bind(this)]]\n );\n } else {\n this._subscribe = attachEvents(\n [window],\n [['scroll', this.scrollListener.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n isScrolling: this.isActive,\n scrollX: this.movement.x,\n scrollY: this.movement.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n });\n }\n }\n\n onScroll({ x, y }: Vector2) {\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n this.movement = { x, y };\n\n // Clear if scrolling\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.direction = { x: 0, y: 0 };\n\n // Reset Velocity\n this.velocity = { x: 0, y: 0 };\n\n this._handleCallback(); // Debounce 250milliseconds\n }, 250);\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n\n scrollListener() {\n const { pageYOffset: y, pageXOffset: x } = window;\n this.onScroll({ x, y });\n }\n\n scrollElementListener() {\n const x = this.targetElement?.scrollLeft || 0;\n const y = this.targetElement?.scrollTop || 0;\n this.onScroll({ x, y });\n }\n}\n","import { attachEvents } from '../helpers/eventAttacher';\nimport { Vector2 } from '../types';\nimport { clamp } from '../helpers/math';\nimport { withDefault } from '../helpers/withDefault';\nimport { Gesture } from './Gesture';\n\nconst LINE_HEIGHT = 40;\nconst PAGE_HEIGHT = 800;\n\nexport class WheelGesture extends Gesture {\n isActiveID?: any;\n movement: Vector2 = withDefault(0, 0);\n previousMovement: Vector2 = withDefault(0, 0);\n direction: Vector2 = withDefault(0, 0);\n velocity: Vector2 = withDefault(0, 0);\n delta: Vector2 = withDefault(0, 0);\n\n // Holds offsets\n offset: Vector2 = withDefault(0, 0);\n translation: Vector2 = withDefault(0, 0);\n\n // @override\n // initialize the events\n _initEvents() {\n if (this.targetElement) {\n this._subscribe = attachEvents(\n [this.targetElement],\n [['wheel', this.onWheel.bind(this)]]\n );\n }\n }\n\n _handleCallback() {\n if (this.callback) {\n this.callback({\n target: this.targetElement,\n isWheeling: this.isActive,\n deltaX: this.delta.x,\n deltaY: this.delta.y,\n directionX: this.direction.x,\n directionY: this.direction.y,\n movementX: this.movement.x,\n movementY: this.movement.y,\n offsetX: this.offset.x,\n offsetY: this.offset.y,\n velocityX: this.velocity.x,\n velocityY: this.velocity.y,\n });\n }\n }\n\n onWheel(event: WheelEvent) {\n let { deltaX, deltaY, deltaMode } = event;\n\n const now: number = Date.now();\n const deltaTime = Math.min(now - this.lastTimeStamp, 64);\n this.lastTimeStamp = now;\n const t = deltaTime / 1000; // seconds\n\n this.isActive = true;\n\n if (this.isActiveID !== -1) {\n this.isActive = true;\n clearTimeout(this.isActiveID);\n }\n\n this.isActiveID = setTimeout(() => {\n this.isActive = false;\n this.translation = { x: this.offset.x, y: this.offset.y };\n this._handleCallback();\n\n this.velocity = { x: 0, y: 0 }; // Reset Velocity\n this.movement = { x: 0, y: 0 };\n }, 200);\n\n // normalize wheel values, especially for Firefox\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT;\n deltaY *= LINE_HEIGHT;\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT;\n deltaY *= PAGE_HEIGHT;\n }\n\n this.delta = { x: deltaX, y: deltaY };\n this.movement = {\n x: this.movement.x + deltaX,\n y: this.movement.y + deltaY,\n };\n this.offset = {\n x: this.translation.x + this.movement.x,\n y: this.translation.y + this.movement.y,\n };\n\n const diffX = this.movement.x - this.previousMovement.x;\n const diffY = this.movement.y - this.previousMovement.y;\n\n this.direction = {\n x: Math.sign(diffX),\n y: Math.sign(diffY),\n };\n\n this.velocity = {\n x: clamp(\n diffX / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n y: clamp(\n diffY / t / 1000,\n -1 * Gesture._VELOCITY_LIMIT,\n Gesture._VELOCITY_LIMIT\n ),\n };\n\n this.previousMovement = {\n x: this.movement.x,\n y: this.movement.y,\n };\n\n this._handleCallback();\n }\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\ntype UseRecognizerHandlerType = Array<\n [\n key: 'drag' | 'wheel' | 'move' | 'scroll',\n gesture: any,\n callback: any,\n config?: any\n ]\n>;\n\nexport const useRecognizer = (handlers: UseRecognizerHandlerType) => {\n const ref = React.useRef<any>();\n const elementRefs = React.useRef<Array<any>>([]);\n const subscribers = React.useRef<\n Map<string, { keyIndex: number; gesture: any; unsubscribe: any }>\n >(new Map()).current;\n\n // re-initiate callback on change\n React.useEffect(() => {\n for (let [, { keyIndex, gesture }] of subscribers.entries()) {\n const [, , callback] = handlers[keyIndex];\n gesture.applyCallback(callback);\n }\n }, [handlers]);\n\n React.useEffect(() => {\n handlers.forEach(([key, gesture, callback, config], keyIndex) => {\n subscribers.set(key, {\n keyIndex,\n gesture,\n unsubscribe: gesture.applyGesture({\n targetElement: ref.current,\n targetElements: elementRefs.current,\n callback,\n config,\n }),\n });\n });\n\n return () => {\n for (let [, { unsubscribe }] of subscribers.entries()) {\n unsubscribe && unsubscribe();\n }\n };\n }, []);\n\n return (index?: number) => {\n if (index === null || index === undefined) {\n return { ref };\n } else {\n elementRefs.current[index] =\n elementRefs.current[index] || React.createRef();\n\n return { ref: elementRefs.current[index] };\n }\n };\n};\n","import * as React from 'react';\nimport {\n useAnimatedValue,\n UseAnimatedValueConfig,\n ValueType,\n} from '../useAnimatedValue';\n\ninterface ScrollableBlockProps {\n children?: (animation: { value: ValueType }) => React.ReactNode;\n direction?: 'single' | 'both';\n threshold?: number;\n animationConfig?: UseAnimatedValueConfig;\n}\n\n/**\n * ScrollableBlock - Higher order component to handle the entrance or exit animation\n * of a component when it enters or exit the viewport. Accepts child as a function with\n * `AnimatedValue` as its first argument which can be interpolated on input range [0, 1]\n * @prop { function } children - child as a function with `AnimatedValue` as its first argument.\n * @prop { 'single' | 'both' } direction - single applies animation on enter once, both applies on enter and exit.\n * @prop { number } threshold - should be in range 0 to 1 which equivalent to `IntersectionObserver` threshold.\n * @prop { UseAnimatedValueConfig } animationConfig - Animation config\n */\nexport const ScrollableBlock = (props: ScrollableBlockProps) => {\n const {\n children,\n direction = 'single',\n animationConfig,\n threshold = 0.2,\n } = props;\n const scrollableBlockRef = React.useRef<HTMLDivElement>(null);\n const animation = useAnimatedValue(0, animationConfig); // 0: not intersecting | 1: intersecting\n\n React.useEffect(() => {\n const _scrollableBlock = scrollableBlockRef.current;\n\n const observer = new IntersectionObserver(\n function ([entry]) {\n const { isIntersecting } = entry;\n\n if (isIntersecting) {\n animation.value = 1;\n } else {\n if (direction === 'both') animation.value = 0;\n }\n },\n {\n root: null, // FOR VIEWPORT ONLY\n threshold,\n }\n );\n\n if (_scrollableBlock) {\n observer.observe(_scrollableBlock);\n }\n\n return () => {\n if (_scrollableBlock) {\n observer.unobserve(_scrollableBlock);\n }\n };\n }, []);\n\n return (\n <div ref={scrollableBlockRef}>\n {children && children({ value: animation.value })}\n </div>\n );\n};\n","import * as React from 'react';\nimport { bin } from '../../gestures/helpers/math';\nimport {\n useAnimatedValue,\n UseAnimatedValueConfig,\n ValueType,\n} from '../useAnimatedValue';\n\ninterface TransitionBlockProps {\n state: boolean;\n children: (animation: { value: ValueType }) => React.ReactNode;\n config?: UseAnimatedValueConfig;\n}\n\n/**\n * TransitionBlock - Higher order component which animates on state change.\n * @prop { boolean } state - Boolean indicating the current state of animation, usually `false = 0 and true = 1`.\n * @prop { function } children - Child as a function with `AnimatedValue` on `.value` property.\n * @prop { UseAnimatedValueConfig } config - Animation configuration.\n */\nexport const TransitionBlock = ({\n state,\n children,\n config,\n}: TransitionBlockProps) => {\n const amv = useAnimatedValue(bin(state), config);\n\n return <>{children({ value: amv.value })}</>;\n};\n","/**\n * @param { number } ms - number of milliseconds to delay code execution\n * @returns Promise\n */\nexport function delay(ms: number) {\n return new Promise((resolve) => {\n setTimeout(() => resolve(null), ms);\n });\n}\n","import * as React from 'react';\n\nimport { DragEventType, UseDragConfig } from '../types';\nimport { DragGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useDrag(\n callback: (event: DragEventType) => void,\n config?: UseDragConfig\n) {\n const gesture = React.useRef(new DragGesture()).current;\n\n return useRecognizer([['drag', gesture, callback, config]]);\n}\n","import * as React from 'react';\nimport {\n DragGesture,\n MouseMoveGesture,\n ScrollGesture,\n WheelGesture,\n} from '../controllers';\nimport {\n DragEventType,\n WheelEventType,\n ScrollEventType,\n MouseMoveEventType,\n} from '../types';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useGesture({\n onDrag,\n onWheel,\n onScroll,\n onMouseMove,\n}: {\n onDrag?: (event: DragEventType) => void;\n onWheel?: (event: WheelEventType) => void;\n onScroll?: (event: ScrollEventType) => void;\n onMouseMove?: (event: MouseMoveEventType) => void;\n}) {\n const dragGesture = React.useRef(new DragGesture()).current;\n const wheelGesture = React.useRef(new WheelGesture()).current;\n const scrollGesture = React.useRef(new ScrollGesture()).current;\n const mouseMoveGesture = React.useRef(new MouseMoveGesture()).current;\n\n return useRecognizer([\n ['drag', dragGesture, onDrag],\n ['wheel', wheelGesture, onWheel],\n ['scroll', scrollGesture, onScroll],\n ['move', mouseMoveGesture, onMouseMove],\n ]);\n}\n","import { useRef, useEffect, DependencyList, createRef } from 'react';\n\ntype MeasurementValue = number | Array<number>;\n\ntype MeasurementType = {\n left: MeasurementValue;\n top: MeasurementValue;\n width: MeasurementValue;\n height: MeasurementValue;\n vLeft: MeasurementValue;\n vTop: MeasurementValue;\n};\n\nexport function useMeasure(\n callback: (event: MeasurementType) => void,\n deps?: DependencyList\n) {\n const ref = useRef(null);\n const elementRefs = useRef([]);\n const callbackRef = useRef<(event: MeasurementType) => void>(callback);\n\n // Reinitiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const _refElement = ref.current || document.documentElement;\n const _refElementsMultiple = elementRefs.current;\n\n const resizeObserver = new ResizeObserver(([entry]) => {\n const { left, top, width, height } = entry.target.getBoundingClientRect();\n const { pageXOffset, pageYOffset } = window;\n\n if (callbackRef) {\n if (_refElement === document.documentElement) {\n return; // no-op for document\n } else {\n callbackRef.current({\n left: left + pageXOffset,\n top: top + pageYOffset,\n width,\n height,\n vLeft: left,\n vTop: top,\n });\n }\n }\n });\n\n const resizeObserverMultiple = new ResizeObserver((entries) => {\n const left: Array<number> = [];\n const top: Array<number> = [];\n const width: Array<number> = [];\n const height: Array<number> = [];\n const vLeft: Array<number> = [];\n const vTop: Array<number> = [];\n\n entries.forEach((entry) => {\n const {\n left: _left,\n top: _top,\n width: _width,\n height: _height,\n } = entry.target.getBoundingClientRect();\n const { pageXOffset, pageYOffset } = window;\n const _pageLeft = _left + pageXOffset;\n const _pageTop = _top + pageYOffset;\n\n left.push(_pageLeft);\n top.push(_pageTop);\n width.push(_width);\n height.push(_height);\n vLeft.push(_left);\n vTop.push(_top);\n });\n\n if (callbackRef) {\n callbackRef.current({\n left,\n top,\n width,\n height,\n vLeft,\n vTop,\n });\n }\n });\n\n if (_refElement) {\n if (\n _refElement === document.documentElement &&\n _refElementsMultiple.length > 0\n ) {\n _refElementsMultiple.forEach((element: any) => {\n resizeObserverMultiple.observe(element.current);\n });\n } else {\n resizeObserver.observe(_refElement);\n }\n }\n\n return () => {\n if (_refElement) {\n if (\n _refElement === document.documentElement &&\n _refElementsMultiple.length > 0\n ) {\n _refElementsMultiple.forEach((element: any) => {\n resizeObserverMultiple.unobserve(element.current);\n });\n } else {\n resizeObserver.unobserve(_refElement);\n }\n }\n };\n }, []);\n\n return (index?: number) => {\n if (index === null || index === undefined) {\n return { ref };\n } else {\n elementRefs.current[index] = elementRefs.current[index] || createRef();\n\n return { ref: elementRefs.current[index] };\n }\n }; // ...bind() or ...bind(index) for multiple\n}\n","import * as React from 'react';\n\nimport { MouseMoveEventType } from '../types';\nimport { MouseMoveGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useMouseMove(callback: (event: MouseMoveEventType) => void) {\n const gesture = React.useRef(new MouseMoveGesture()).current;\n\n return useRecognizer([['move', gesture, callback]]);\n}\n","import { useRef, useEffect, RefObject, DependencyList } from 'react';\n\nimport { attachEvents } from '../gestures/helpers/eventAttacher';\n\nexport function useOutsideClick(\n elementRef: RefObject<HTMLElement>,\n callback: (event: MouseEvent) => void,\n deps?: DependencyList\n) {\n const callbackRef = useRef<(event: MouseEvent) => void>();\n\n if (!callbackRef.current) {\n callbackRef.current = callback;\n }\n\n // Reinitiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const handleOutsideClick = (e: MouseEvent) => {\n if (!elementRef?.current?.contains(e.target as Element)) {\n callbackRef.current && callbackRef.current(e);\n }\n };\n\n const subscribe = attachEvents([document], [['click', handleOutsideClick]]);\n\n return () => subscribe && subscribe();\n }, []);\n}\n","import * as React from 'react';\n\nimport { ScrollEventType } from '../types';\nimport { ScrollGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useScroll(callback: (event: ScrollEventType) => void) {\n const gesture = React.useRef(new ScrollGesture()).current;\n\n return useRecognizer([['scroll', gesture, callback]]);\n}\n","import * as React from 'react';\n\nimport { WheelEventType } from '../types';\nimport { WheelGesture } from '../controllers';\nimport { useRecognizer } from './useRecognizer';\n\nexport function useWheel(callback: (event: WheelEventType) => void) {\n const gesture = React.useRef(new WheelGesture()).current;\n\n return useRecognizer([['wheel', gesture, callback]]);\n}\n","import { useRef, useEffect, DependencyList } from 'react';\n\ntype WindowDimensionType = {\n width: number;\n height: number;\n innerWidth: number;\n innerHeight: number;\n};\n\nexport function useWindowDimension(\n callback: (event: WindowDimensionType) => void,\n deps?: DependencyList\n) {\n const windowDimensionsRef = useRef<WindowDimensionType>({\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n });\n const callbackRef = useRef<(event: WindowDimensionType) => void>(callback);\n\n const handleCallback: () => void = () => {\n if (callbackRef) {\n callbackRef.current({\n ...windowDimensionsRef.current,\n });\n }\n };\n\n // Reinitiate callback when dependency change\n useEffect(() => {\n callbackRef.current = callback;\n\n return () => {\n callbackRef.current = () => false;\n };\n }, deps);\n\n useEffect(() => {\n const resizeObserver = new ResizeObserver(([entry]) => {\n const { clientWidth, clientHeight } = entry.target;\n const { innerWidth, innerHeight } = window;\n\n windowDimensionsRef.current = {\n width: clientWidth,\n height: clientHeight,\n innerWidth,\n innerHeight,\n };\n\n handleCallback();\n });\n\n resizeObserver.observe(document.documentElement);\n\n return () => resizeObserver.unobserve(document.documentElement);\n }, []);\n}\n","import type { FluidValueConfig, Length } from '@raidipesh78/re-motion';\n\nimport { AnimationConfigUtils } from './animationType';\n\ninterface WithSpringConfig\n extends Pick<FluidValueConfig, 'mass' | 'friction' | 'tension'> {}\n\n/**\n * Creates a spring animation configuration.\n * @param {Length} toValue - The target value of the animation.\n * @param {WithSpringConfig} [config=AnimationConfigUtils.ELASTIC] - Optional spring configuration.\n * @returns {{ toValue: Length; config: WithSpringConfig }}\n */\nexport const withSpring = (\n toValue: Length,\n config: WithSpringConfig = AnimationConfigUtils.ELASTIC\n) => {\n return {\n toValue,\n config,\n };\n};\n\ninterface WithTimingConfig\n extends Pick<FluidValueConfig, 'duration' | 'easing'> {}\n\n/**\n * Creates a timing animation configuration.\n * @param {Length} toValue - The target value of the animation.\n * @param {WithTimingConfig} [config={ duration: 250 }] - Optional timing configuration.\n * @returns {{ toValue: Length; config: WithTimingConfig }}\n */\nexport const withTiming = (\n toValue: Length,\n config: WithTimingConfig = { duration: 250 }\n) => {\n return {\n toValue,\n config,\n };\n};\n\n/**\n * Creates a sequence of animations that run one after another.\n * @param {Array<{ toValue: Length; config?: FluidValueConfig }>} configs - An array of animation configurations.\n * @returns {Function} An async function that runs the animations in sequence.\n */\nexport const withSequence = ([...configs]: Array<{\n toValue: Length;\n config?: FluidValueConfig;\n}>) => {\n return async (\n next: (arg: { toValue: Length; config?: FluidValueConfig }) => void\n ) => {\n for (const c of configs) {\n await next(c);\n }\n };\n};\n\n/**\n * Adds a delay before the given animation.\n * @param {number} delay - The delay in milliseconds.\n * @param {{ toValue: Length; config?: FluidValueConfig }} animation - The animation configuration ( withTiming | withSpring )\n * @returns {{ toValue: Length; config: FluidValueConfig }} The updated animation configuration with delay.\n */\nexport const withDelay = (\n delay: number,\n animation: { toValue: Length; config?: FluidValueConfig }\n) => {\n return {\n ...animation,\n config: {\n ...animation.config,\n delay,\n },\n };\n};\n"],"names":["isDefined","value","checkFluidValueOrNumber","isFluidValue","console","log","Error","AnimatedBlock","makeFluid","AnimatedInline","AnimatedImage","useMountedValue","state","config","mv","useMount","cb","a","m","getInitialConfig","animationType","mass","friction","tension","duration","easing","Easing","bounce","bezier","linear","in","ease","out","inOut","AnimationConfigUtils","ELASTIC","BOUNCE","EASE","STIFF","WOOBLE","EASE_IN","EASE_OUT","EASE_IN_OUT","POWER1","POWER2","POWER3","POWER4","LINEAR","useAnimatedValue","initialValue","_a","__read","useFluidValue","__assign","animation","setAnimation","targetObject","currentValue","get","Proxy","set","_","key","toValue","bin","bool","clamp","lowerbound","upperbound","Math","min","max","rubber","distanceFromEdge","dimension","constant","abs","Infinity","pow","rubber2","attachEvents","domTargets","events","subscribers","Map","forEach","_b","event","callback","_c","capture","target","addEventListener","removeEventListener","attachEvent","eventKeys","__values","entries","next","done","_d","eventKey","subscriber","indexOf","withDefault","x","y","Gesture","this","lastTimeStamp","Date","now","isActive","targetElements","prototype","_initEvents","_cancelEvents","_subscribe","applyCallback","applyGesture","_this","targetElement","map","element","current","_VELOCITY_LIMIT","DragGesture","_super","movementStart","initialMovement","movement","previousMovement","translation","offset","velocity","__extends","length","window","pointerDown","bind","pointerMove","pointerUp","passive","_handleCallback","args","currentIndex","down","movementX","movementY","offsetX","offsetY","velocityX","velocityY","distanceX","distanceY","directionX","sign","directionY","cancel","e","type","touches","clientX","clientY","currElem","find","elem","preventDefault","initial","initialMovementX","initialMovementY","deltaTime","t","MouseMoveGesture","direction","onMouseMove","isMoving","mouseX","mouseY","isActiveID","clearTimeout","setTimeout","diffX","diffY","ScrollGesture","scrollElementListener","scrollListener","isScrolling","scrollX","scrollY","onScroll","pageYOffset","pageXOffset","scrollLeft","scrollTop","WheelGesture","delta","onWheel","isWheeling","deltaX","deltaY","deltaMode","useRecognizer","handlers","ref","React","useRef","elementRefs","useEffect","_e","keyIndex","gesture","unsubscribe","index","createRef","children","from","enter","exit","open","enterConfig","exitConfig","_jsx","_Fragment","mounted","props","animationConfig","threshold","scrollableBlockRef","_scrollableBlock","observer","IntersectionObserver","isIntersecting","root","observe","unobserve","amv","minOutput","maxOutput","extrapolateConfig","checkedValue","internalInterpolate","interpolate","ms","Promise","resolve","inputRange","outputRange","perc","val1","val2","array","moveIndex","toIndex","item","diff","__spreadArray","slice","targetIndex","snapPoints","finalValue","getDiff","point","deltas","minDelta","reduce","acc","onDrag","dragGesture","wheelGesture","scrollGesture","mouseMoveGesture","deps","callbackRef","_refElement","document","documentElement","_refElementsMultiple","resizeObserver","ResizeObserver","getBoundingClientRect","left","top","width","height","vLeft","vTop","resizeObserverMultiple","entry","_left","_top","_width","_height","_pageLeft","_pageTop","push","elementRef","subscribe","contains","windowDimensionsRef","innerWidth","innerHeight","clientWidth","clientHeight","delay","configs","__awaiter","configs_1","configs_1_1","c","sent"],"mappings":"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"}