interpolate.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { __read } from "tslib";
  2. export var numberInterpolate = function (from, to) {
  3. return function (t) {
  4. return from * (1 - t) + to * t;
  5. };
  6. };
  7. export function arrayInterpolate(from, to) {
  8. var nb = to ? to.length : 0;
  9. var na = from ? Math.min(nb, from.length) : 0;
  10. return function (t) {
  11. var x = new Array(na);
  12. var c = new Array(nb);
  13. var i = 0;
  14. for (i = 0; i < na; ++i)
  15. x[i] = interpolate(from[i], to[i]);
  16. for (; i < nb; ++i)
  17. c[i] = to[i];
  18. for (i = 0; i < na; ++i)
  19. c[i] = x[i](t);
  20. return c;
  21. };
  22. }
  23. export function objectInterpolate(from, to) {
  24. if (from === void 0) { from = {}; }
  25. if (to === void 0) { to = {}; }
  26. var i = {};
  27. var c = {};
  28. Object.entries(to).forEach(function (_a) {
  29. var _b = __read(_a, 2), k = _b[0], v = _b[1];
  30. if (k in from)
  31. i[k] = interpolate(from[k], v);
  32. else
  33. c[k] = v;
  34. });
  35. return function (t) {
  36. Object.entries(i).forEach(function (_a) {
  37. var _b = __read(_a, 2), k = _b[0], v = _b[1];
  38. return (c[k] = v(t));
  39. });
  40. return c;
  41. };
  42. }
  43. export function interpolate(from, to) {
  44. if (typeof from === 'number' && typeof to === 'number') {
  45. // @ts-ignore
  46. return numberInterpolate(from, to);
  47. }
  48. if (Array.isArray(from) && Array.isArray(to)) {
  49. // @ts-ignore
  50. return arrayInterpolate(from, to);
  51. }
  52. if (typeof from === 'object' && typeof to === 'object') {
  53. // @ts-ignore
  54. return objectInterpolate(from, to);
  55. }
  56. return (function (t) { return from; });
  57. }
  58. //# sourceMappingURL=interpolate.js.map