{"version":3,"file":"unit-conversion.mjs","sources":["../../../../../src/animation/keyframes/utils/unit-conversion.ts"],"sourcesContent":["import type { Box } from \"motion-utils\"\nimport { parseValueFromTransform } from \"../../../render/dom/parse-transform\"\nimport { transformPropOrder } from \"../../../render/utils/keys-transform\"\nimport { MotionValue } from \"../../../value\"\nimport { number } from \"../../../value/types/numbers\"\nimport { px } from \"../../../value/types/numbers/units\"\nimport { ValueType } from \"../../../value/types/types\"\nimport { AnyResolvedKeyframe } from \"../../types\"\nimport { WithRender } from \"../types\"\n\nexport const isNumOrPxType = (v?: ValueType): v is ValueType =>\n v === number || v === px\n\n/**\n * Measures a positional value in pixels from an element's computed style.\n * The bounding box is only measured on demand as it forces layout and is\n * affected by transforms.\n */\ntype GetActualMeasurementInPixels = (\n computedStyle: Partial,\n measureBox: () => Box\n) => number\n\nconst transformKeys = new Set([\"x\", \"y\", \"z\"])\nconst nonTranslationalTransformKeys = transformPropOrder.filter(\n (key) => !transformKeys.has(key)\n)\n\ntype RemovedTransforms = [string, AnyResolvedKeyframe][]\n\n/**\n * Reset any bounding box-changing transforms so the element can be\n * measured. Returns the values to restore. Values already at their\n * default don't change the box, so they're left alone: an element with\n * only `rotate: 0` doesn't need to be re-rendered before measuring.\n */\nexport function removeNonTranslationalTransform(visualElement: WithRender) {\n const removedTransforms: RemovedTransforms = []\n\n nonTranslationalTransformKeys.forEach((key) => {\n const value: MotionValue | undefined =\n visualElement.getValue(key)\n if (value !== undefined) {\n const current = value.get()\n const reset = key.startsWith(\"scale\") ? 1 : 0\n\n if (current === reset) return\n\n removedTransforms.push([key, current])\n value.set(reset)\n }\n })\n\n return removedTransforms\n}\n\n/**\n * Values that can only be measured from the bounding box. Elements with\n * these values need bounding box-changing transforms removed first.\n */\nexport const boxDependentValues = new Set([\"bottom\", \"right\"])\n\n/**\n * Computed width/height is already in pixels and unaffected by\n * transforms. It's \"auto\" for elements without a layout box (e.g. inline),\n * in which case we fall back to measuring the bounding box.\n */\nfunction measureDimension(\n computed: string | undefined,\n measureBox: () => Box,\n axis: \"x\" | \"y\",\n paddingStart: string,\n paddingEnd: string,\n boxSizing?: string\n) {\n const px = parseFloat(computed as string)\n if (!isNaN(px)) return px\n\n const { min, max } = measureBox()[axis]\n const size = max - min\n return boxSizing === \"border-box\"\n ? size\n : size - parseFloat(paddingStart) - parseFloat(paddingEnd)\n}\n\nexport const positionalValues: { [key: string]: GetActualMeasurementInPixels } =\n {\n // Dimensions\n width: (\n { width, paddingLeft = \"0\", paddingRight = \"0\", boxSizing },\n measureBox\n ) =>\n measureDimension(\n width,\n measureBox,\n \"x\",\n paddingLeft,\n paddingRight,\n boxSizing\n ),\n height: (\n { height, paddingTop = \"0\", paddingBottom = \"0\", boxSizing },\n measureBox\n ) =>\n measureDimension(\n height,\n measureBox,\n \"y\",\n paddingTop,\n paddingBottom,\n boxSizing\n ),\n\n top: ({ top }) => parseFloat(top as string),\n left: ({ left }) => parseFloat(left as string),\n bottom: ({ top }, measureBox) => {\n const { y } = measureBox()\n return parseFloat(top as string) + (y.max - y.min)\n },\n right: ({ left }, measureBox) => {\n const { x } = measureBox()\n return parseFloat(left as string) + (x.max - x.min)\n },\n\n // Transform\n x: ({ transform }) => parseValueFromTransform(transform, \"x\"),\n y: ({ transform }) => parseValueFromTransform(transform, \"y\"),\n }\n\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x\npositionalValues.translateY = positionalValues.y\n"],"names":[],"mappings":"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"}