UNPKG

@kcirtaptrick/framer-motion

Version:

A simple and powerful React animation library

62 lines (59 loc) 2.88 kB
import { __read } from 'tslib'; import { mix } from 'popmotion'; import { percent } from 'style-value-types'; import { scalePoint } from './delta-apply.mjs'; /** * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse */ function removePointDelta(point, translate, scale, originPoint, boxScale) { point -= translate; point = scalePoint(point, 1 / scale, originPoint); if (boxScale !== undefined) { point = scalePoint(point, 1 / boxScale, originPoint); } return point; } /** * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse */ function removeAxisDelta(axis, translate, scale, origin, boxScale, originAxis, sourceAxis) { if (translate === void 0) { translate = 0; } if (scale === void 0) { scale = 1; } if (origin === void 0) { origin = 0.5; } if (originAxis === void 0) { originAxis = axis; } if (sourceAxis === void 0) { sourceAxis = axis; } if (percent.test(translate)) { translate = parseFloat(translate); var relativeProgress = mix(sourceAxis.min, sourceAxis.max, translate / 100); translate = relativeProgress - sourceAxis.min; } if (typeof translate !== "number") return; var originPoint = mix(originAxis.min, originAxis.max, origin); if (axis === originAxis) originPoint -= translate; axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale); axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale); } /** * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse * and acts as a bridge between motion values and removeAxisDelta */ function removeAxisTransforms(axis, transforms, _a, origin, sourceAxis) { var _b = __read(_a, 3), key = _b[0], scaleKey = _b[1], originKey = _b[2]; removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis); } /** * The names of the motion values we want to apply as translation, scale and origin. */ var xKeys = ["x", "scaleX", "originX"]; var yKeys = ["y", "scaleY", "originY"]; /** * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse * and acts as a bridge between motion values and removeAxisDelta */ function removeBoxTransforms(box, transforms, originBox, sourceBox) { removeAxisTransforms(box.x, transforms, xKeys, originBox === null || originBox === void 0 ? void 0 : originBox.x, sourceBox === null || sourceBox === void 0 ? void 0 : sourceBox.x); removeAxisTransforms(box.y, transforms, yKeys, originBox === null || originBox === void 0 ? void 0 : originBox.y, sourceBox === null || sourceBox === void 0 ? void 0 : sourceBox.y); } export { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };