UNPKG

motion-dom

Version:
76 lines (74 loc) • 2.33 kB
const radToDeg = (rad) => (rad * 180) / Math.PI; const rotate = (v) => { const angle = radToDeg(Math.atan2(v[1], v[0])); return rebaseAngle(angle); }; const matrix2dParsers = { x: 4, y: 5, translateX: 4, translateY: 5, scaleX: 0, scaleY: 3, scaleZ: () => 1, scale: (v) => (Math.abs(v[0]) + Math.abs(v[3])) / 2, rotate, rotateZ: rotate, skewX: (v) => radToDeg(Math.atan(v[1])), skewY: (v) => radToDeg(Math.atan(v[2])), skew: (v) => (Math.abs(v[1]) + Math.abs(v[2])) / 2, }; const rebaseAngle = (angle) => { angle = angle % 360; if (angle < 0) angle += 360; return angle; }; const rotateZ = rotate; const scaleX = (v) => Math.hypot(v[0], v[1]); const scaleY = (v) => Math.hypot(v[4], v[5]); const matrix3dParsers = { x: 12, y: 13, z: 14, translateX: 12, translateY: 13, translateZ: 14, scaleX, scaleY, scaleZ: (v) => Math.hypot(v[8], v[9], v[10]), scale: (v) => (scaleX(v) + scaleY(v)) / 2, rotateX: (v) => rebaseAngle(radToDeg(Math.atan2(v[6], v[5]))), rotateY: (v) => rebaseAngle(radToDeg(Math.atan2(-v[2], v[0]))), rotateZ, rotate: rotateZ, skewX: (v) => radToDeg(Math.atan(v[4])), skewY: (v) => radToDeg(Math.atan(v[1])), skew: (v) => (Math.abs(v[1]) + Math.abs(v[4])) / 2, }; function defaultTransformValue(name) { return name.includes("scale") ? 1 : 0; } function parseValueFromTransform(transform, name) { if (!transform || transform === "none") { return defaultTransformValue(name); } const match = transform.match(/^matrix(3d)?\(([-\d.e\s,]+)\)$/u); if (!match) { return defaultTransformValue(name); } const valueParser = (match[1] ? matrix3dParsers : matrix2dParsers)[name]; /** * parseFloat skips leading whitespace and stops at trailing whitespace. */ const values = match[2].split(",").map((v) => parseFloat(v)); return typeof valueParser === "function" ? valueParser(values) : values[valueParser]; } const readTransformValue = (instance, name) => { const { transform = "none" } = getComputedStyle(instance); return parseValueFromTransform(transform, name); }; export { defaultTransformValue, parseValueFromTransform, readTransformValue }; //# sourceMappingURL=parse-transform.mjs.map