37 lines
1.8 KiB
JavaScript
37 lines
1.8 KiB
JavaScript
import { parseValueFromTransform } from '../../../render/dom/parse-transform.mjs';
|
|
import { transformPropOrder } from '../../../render/utils/keys-transform.mjs';
|
|
import { number } from '../../../value/types/numbers/index.mjs';
|
|
import { px } from '../../../value/types/numbers/units.mjs';
|
|
|
|
const isNumOrPxType = (v) => v === number || v === px;
|
|
const transformKeys = new Set(["x", "y", "z"]);
|
|
const nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));
|
|
function removeNonTranslationalTransform(visualElement) {
|
|
const removedTransforms = [];
|
|
nonTranslationalTransformKeys.forEach((key) => {
|
|
const value = visualElement.getValue(key);
|
|
if (value !== undefined) {
|
|
removedTransforms.push([key, value.get()]);
|
|
value.set(key.startsWith("scale") ? 1 : 0);
|
|
}
|
|
});
|
|
return removedTransforms;
|
|
}
|
|
const positionalValues = {
|
|
// Dimensions
|
|
width: ({ x }, { paddingLeft = "0", paddingRight = "0" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),
|
|
height: ({ y }, { paddingTop = "0", paddingBottom = "0" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),
|
|
top: (_bbox, { top }) => parseFloat(top),
|
|
left: (_bbox, { left }) => parseFloat(left),
|
|
bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),
|
|
right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),
|
|
// Transform
|
|
x: (_bbox, { transform }) => parseValueFromTransform(transform, "x"),
|
|
y: (_bbox, { transform }) => parseValueFromTransform(transform, "y"),
|
|
};
|
|
// Alias translate longform names
|
|
positionalValues.translateX = positionalValues.x;
|
|
positionalValues.translateY = positionalValues.y;
|
|
|
|
export { isNumOrPxType, positionalValues, removeNonTranslationalTransform };
|