UNPKG

motion-v

Version:

<h1 align="center"> <img width="35" height="35" alt="Motion logo" src="https://github.com/user-attachments/assets/00d6d1c3-72c4-4c2f-a664-69da13182ffc" /><br />Motion for Vue</h1>

68 lines (67 loc) 2.78 kB
import { calcLength, mixNumber } from "motion-dom"; import { clamp, progress } from "motion-utils"; function applyConstraints(point, { min, max }, elastic) { if (min !== void 0 && point < min) point = elastic ? mixNumber(min, point, elastic.min) : Math.max(point, min); else if (max !== void 0 && point > max) point = elastic ? mixNumber(max, point, elastic.max) : Math.min(point, max); return point; } const defaultElastic = .35; function calcRelativeConstraints(layoutBox, { top, left, bottom, right }) { return { x: calcRelativeAxisConstraints(layoutBox.x, left, right), y: calcRelativeAxisConstraints(layoutBox.y, top, bottom) }; } function calcRelativeAxisConstraints(axis, min, max) { return { min: min !== void 0 ? axis.min + min : void 0, max: max !== void 0 ? axis.max + max - (axis.max - axis.min) : void 0 }; } function resolveDragElastic(dragElastic = defaultElastic) { if (dragElastic === false) dragElastic = 0; else if (dragElastic === true) dragElastic = defaultElastic; return { x: resolveAxisElastic(dragElastic, "left", "right"), y: resolveAxisElastic(dragElastic, "top", "bottom") }; } function resolveAxisElastic(dragElastic, minLabel, maxLabel) { return { min: resolvePointElastic(dragElastic, minLabel), max: resolvePointElastic(dragElastic, maxLabel) }; } function resolvePointElastic(dragElastic, label) { return typeof dragElastic === "number" ? dragElastic : dragElastic[label] || 0; } function rebaseAxisConstraints(layout, constraints) { const relativeConstraints = {}; if (constraints.min !== void 0) relativeConstraints.min = constraints.min - layout.min; if (constraints.max !== void 0) relativeConstraints.max = constraints.max - layout.min; return relativeConstraints; } function calcViewportConstraints(layoutBox, constraintsBox) { return { x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x), y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y) }; } function calcViewportAxisConstraints(layoutAxis, constraintsAxis) { let min = constraintsAxis.min - layoutAxis.min; let max = constraintsAxis.max - layoutAxis.max; if (constraintsAxis.max - constraintsAxis.min < layoutAxis.max - layoutAxis.min) [min, max] = [max, min]; return { min, max }; } function calcOrigin(source, target) { let origin = .5; const sourceLength = calcLength(source); const targetLength = calcLength(target); if (targetLength > sourceLength) origin = progress(target.min, target.max - sourceLength, source.min); else if (sourceLength > targetLength) origin = progress(source.min, source.max - targetLength, target.min); return clamp(0, 1, origin); } export { applyConstraints, calcOrigin, calcRelativeConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveDragElastic };