{"version":3,"file":"delta-calc.mjs","sources":["../../../../src/projection/geometry/delta-calc.ts"],"sourcesContent":["import { Axis, AxisDelta, Box, Delta } from \"motion-utils\"\nimport { mixNumber } from \"../../utils/mix/number\"\nimport { ResolvedValues } from \"../../render/types\"\n\nconst SCALE_PRECISION = 0.0001\nconst SCALE_MIN = 1 - SCALE_PRECISION\nconst SCALE_MAX = 1 + SCALE_PRECISION\nconst TRANSLATE_PRECISION = 0.01\nconst TRANSLATE_MIN = 0 - TRANSLATE_PRECISION\nconst TRANSLATE_MAX = 0 + TRANSLATE_PRECISION\n\nexport function calcLength(axis: Axis) {\n    return axis.max - axis.min\n}\n\nexport function isNear(\n    value: number,\n    target: number,\n    maxDistance: number\n): boolean {\n    return Math.abs(value - target) <= maxDistance\n}\n\nexport function calcAxisDelta(\n    delta: AxisDelta,\n    source: Axis,\n    target: Axis,\n    origin: number = 0.5\n) {\n    delta.origin = origin\n    delta.originPoint = mixNumber(source.min, source.max, delta.origin)\n    delta.scale = calcLength(target) / calcLength(source)\n    delta.translate =\n        mixNumber(target.min, target.max, delta.origin) - delta.originPoint\n\n    if (\n        (delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||\n        isNaN(delta.scale)\n    ) {\n        delta.scale = 1.0\n    }\n\n    if (\n        (delta.translate >= TRANSLATE_MIN &&\n            delta.translate <= TRANSLATE_MAX) ||\n        isNaN(delta.translate)\n    ) {\n        delta.translate = 0.0\n    }\n}\n\nexport function calcBoxDelta(\n    delta: Delta,\n    source: Box,\n    target: Box,\n    origin?: ResolvedValues\n): void {\n    calcAxisDelta(\n        delta.x,\n        source.x,\n        target.x,\n        origin ? (origin.originX as number) : undefined\n    )\n    calcAxisDelta(\n        delta.y,\n        source.y,\n        target.y,\n        origin ? (origin.originY as number) : undefined\n    )\n}\n\nexport function calcRelativeAxis(target: Axis, relative: Axis, parent: Axis) {\n    target.min = parent.min + relative.min\n    target.max = target.min + calcLength(relative)\n}\n\nexport function calcRelativeBox(target: Box, relative: Box, parent: Box) {\n    calcRelativeAxis(target.x, relative.x, parent.x)\n    calcRelativeAxis(target.y, relative.y, parent.y)\n}\n\nexport function calcRelativeAxisPosition(\n    target: Axis,\n    layout: Axis,\n    parent: Axis\n) {\n    target.min = layout.min - parent.min\n    target.max = target.min + calcLength(layout)\n}\n\nexport function calcRelativePosition(target: Box, layout: Box, parent: Box) {\n    calcRelativeAxisPosition(target.x, layout.x, parent.x)\n    calcRelativeAxisPosition(target.y, layout.y, parent.y)\n}\n"],"names":[],"mappings":"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"}