framer-motion
Version:
An open source and production-ready motion library for React on the web
23 lines (20 loc) • 753 B
text/typescript
import { px } from "style-value-types"
import { SVGDimensions } from "../types"
function calcOrigin(origin: number | string, offset: number, size: number) {
return typeof origin === "string"
? origin
: (px as any).transform(offset + size * origin)
}
/**
* The SVG transform origin defaults are different to CSS and is less intuitive,
* so we use the measured dimensions of the SVG to reconcile these.
*/
export function calcSVGTransformOrigin(
dimensions: SVGDimensions,
originX: number | string,
originY: number | string
) {
const pxOriginX = calcOrigin(originX, dimensions.x, dimensions.width)
const pxOriginY = calcOrigin(originY, dimensions.y, dimensions.height)
return `${pxOriginX} ${pxOriginY}`
}