unit-conversion.mjs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { number } from '../../../value/types/numbers/index.mjs';
  2. import { px } from '../../../value/types/numbers/units.mjs';
  3. import { transformPropOrder } from '../../html/utils/keys-transform.mjs';
  4. import { parseValueFromTransform } from '../../html/utils/parse-transform.mjs';
  5. const isNumOrPxType = (v) => v === number || v === px;
  6. const transformKeys = new Set(["x", "y", "z"]);
  7. const nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));
  8. function removeNonTranslationalTransform(visualElement) {
  9. const removedTransforms = [];
  10. nonTranslationalTransformKeys.forEach((key) => {
  11. const value = visualElement.getValue(key);
  12. if (value !== undefined) {
  13. removedTransforms.push([key, value.get()]);
  14. value.set(key.startsWith("scale") ? 1 : 0);
  15. }
  16. });
  17. return removedTransforms;
  18. }
  19. const positionalValues = {
  20. // Dimensions
  21. width: ({ x }, { paddingLeft = "0", paddingRight = "0" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),
  22. height: ({ y }, { paddingTop = "0", paddingBottom = "0" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),
  23. top: (_bbox, { top }) => parseFloat(top),
  24. left: (_bbox, { left }) => parseFloat(left),
  25. bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),
  26. right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),
  27. // Transform
  28. x: (_bbox, { transform }) => parseValueFromTransform(transform, "x"),
  29. y: (_bbox, { transform }) => parseValueFromTransform(transform, "y"),
  30. };
  31. // Alias translate longform names
  32. positionalValues.translateX = positionalValues.x;
  33. positionalValues.translateY = positionalValues.y;
  34. export { isNumOrPxType, positionalValues, removeNonTranslationalTransform };