motion-v
Version:
<p align="center"> <img width="100" height="100" alt="Motion logo" src="https://user-images.githubusercontent.com/7850794/164965523-3eced4c4-6020-467e-acde-f11b7900ad62.png" /> </p> <h1 align="center">Motion for Vue</h1>
94 lines (93 loc) • 3.19 kB
JavaScript
import { calcLength } from "../../../../projection/geometry/delta-calc.mjs";
import { clamp } from "../../../../utils/clamp.mjs";
import { mixNumber } from "../../../../utils/mix/number.mjs";
import { progress } from "../../../../utils/progress.mjs";
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 = 0.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 = 0.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,
calcRelativeAxisConstraints,
calcRelativeConstraints,
calcViewportAxisConstraints,
calcViewportConstraints,
defaultElastic,
rebaseAxisConstraints,
resolveAxisElastic,
resolveDragElastic,
resolvePointElastic
};