{"version":3,"file":"index.cjs","sources":["../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js","../src/lib/config.ts","../src/lib/animateUsingInterval.ts","../src/lib/animate.ts"],"sourcesContent":["/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1)      { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n  var currentX, currentT, i = 0;\n  do {\n    currentT = aA + (aB - aA) / 2.0;\n    currentX = calcBezier(currentT, mX1, mX2) - aX;\n    if (currentX > 0.0) {\n      aB = currentT;\n    } else {\n      aA = currentT;\n    }\n  } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n  return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n   var currentSlope = getSlope(aGuessT, mX1, mX2);\n   if (currentSlope === 0.0) {\n     return aGuessT;\n   }\n   var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n   aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n  return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n  if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n    throw new Error('bezier x values must be in [0, 1] range');\n  }\n\n  if (mX1 === mY1 && mX2 === mY2) {\n    return LinearEasing;\n  }\n\n  // Precompute samples table\n  var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n  for (var i = 0; i < kSplineTableSize; ++i) {\n    sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n  }\n\n  function getTForX (aX) {\n    var intervalStart = 0.0;\n    var currentSample = 1;\n    var lastSample = kSplineTableSize - 1;\n\n    for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n      intervalStart += kSampleStepSize;\n    }\n    --currentSample;\n\n    // Interpolate to provide an initial guess for t\n    var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n    var guessForT = intervalStart + dist * kSampleStepSize;\n\n    var initialSlope = getSlope(guessForT, mX1, mX2);\n    if (initialSlope >= NEWTON_MIN_SLOPE) {\n      return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n    } else if (initialSlope === 0.0) {\n      return guessForT;\n    } else {\n      return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n    }\n  }\n\n  return function BezierEasing (x) {\n    // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n    if (x === 0) {\n      return 0;\n    }\n    if (x === 1) {\n      return 1;\n    }\n    return calcBezier(getTForX(x), mY1, mY2);\n  };\n};\n","import type { BezierParams } from './types'\n\nexport type EasingTypes = 'ease' | 'easeIn' | 'easeOut' | 'easeInOut' | 'linear' | 'default'\n\nexport const easingTypes: Record<EasingTypes, BezierParams> = {\n  ease: [0.25, 0.1, 0.25, 1],\n  linear: [0, 0, 1, 1],\n  easeIn: [0.42, 0, 1, 1],\n  easeOut: [0, 0, 0.58, 1],\n  easeInOut: [0.42, 0, 0.58, 1],\n  default: [0.5, 0, 0.5, 1],\n}\n\nexport const defaults = {\n  FPS: 60,\n  BEZIER: easingTypes.default,\n}\n","\nimport BezierEasing from 'bezier-easing'\n\n// types\nimport type { AnimateByIntervalFn, IAnimateByIntervalParams, StopAnimationFn } from './types'\n\nimport { defaults } from './config'\n\n/**\n * animate number using `setInterval`\n */\nexport const animateUsingInterval: AnimateByIntervalFn = ({\n  from,\n  to,\n  duration,\n  fps = defaults.FPS,\n  bezier = defaults.BEZIER,\n  on,\n  completed,\n  stopped,\n  done,\n}: IAnimateByIntervalParams): StopAnimationFn => {\n  const easingFn = BezierEasing(...bezier)\n  const difference = to - from\n\n  const frames = Math.round(duration / (1000 / fps))\n  let frame = 1\n  let currentValue = from\n\n  const intervalId = setInterval(() => {\n    let progress = frame / frames\n    if (progress > 1)\n      progress = 1\n\n    currentValue = from + (difference * easingFn(progress))\n    on(currentValue)\n\n    if (progress === 1) {\n      clearInterval(intervalId)\n      completed?.(currentValue)\n      done?.(currentValue)\n    }\n\n    frame++\n  }, duration / frames)\n\n  return () => {\n    clearInterval(intervalId)\n    stopped?.(currentValue)\n    done?.(currentValue)\n  }\n}\n","import BezierEasing from 'bezier-easing'\n\n// types\nimport type { AnimateFn, IParams, StopAnimationFn } from './types'\n\nimport { defaults } from './config'\n\n/**\n * animate number using `requestAnimationFrame`\n */\nexport const animate: AnimateFn = ({\n  from,\n  to,\n  duration,\n  bezier = defaults.BEZIER,\n  on,\n  completed,\n  stopped,\n  done,\n}: IParams): StopAnimationFn => {\n  const easingFn = BezierEasing(...bezier)\n  const difference = to - from\n\n  const timestamp = Date.now()\n  let rqfId = 0\n  let currentValue = from\n\n  const fn = () => {\n    let progress = (Date.now() - timestamp) / duration\n    if (progress > 1)\n      progress = 1\n\n    currentValue = from + (difference * easingFn(progress))\n    on(currentValue)\n\n    if (progress === 1) {\n      completed?.(currentValue)\n      done?.(currentValue)\n      return\n    }\n\n    rqfId = requestAnimationFrame(fn)\n  }\n\n  rqfId = requestAnimationFrame(fn)\n\n  return () => {\n    cancelAnimationFrame(rqfId)\n    stopped?.(currentValue)\n    done?.(currentValue)\n  }\n}\n"],"names":["NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","i","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","x","src","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","easingTypes","defaults","animateUsingInterval","from","to","duration","fps","bezier","on","completed","stopped","done","easingFn","BezierEasing","difference","frames","frame","currentValue","intervalId","progress","animate","timestamp","rqfId","fn"],"mappings":"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"}