{"version":3,"file":"delta-calc.mjs","sources":["../../../../src/projection/geometry/delta-calc.ts"],"sourcesContent":["import { Axis, AxisDelta, Box, Delta, Point } 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(\n    target: Axis,\n    relative: Axis,\n    parent: Axis,\n    anchor: number = 0\n) {\n    const anchorPoint = anchor\n        ? mixNumber(parent.min, parent.max, anchor)\n        : parent.min\n    target.min = anchorPoint + relative.min\n    target.max = target.min + calcLength(relative)\n}\n\nexport function calcRelativeBox(\n    target: Box,\n    relative: Box,\n    parent: Box,\n    anchor?: Point\n) {\n    calcRelativeAxis(target.x, relative.x, parent.x, anchor?.x)\n    calcRelativeAxis(target.y, relative.y, parent.y, anchor?.y)\n}\n\nexport function calcRelativeAxisPosition(\n    target: Axis,\n    layout: Axis,\n    parent: Axis,\n    anchor: number = 0\n) {\n    const anchorPoint = anchor\n        ? mixNumber(parent.min, parent.max, anchor)\n        : parent.min\n    target.min = layout.min - anchorPoint\n    target.max = target.min + calcLength(layout)\n}\n\nexport function calcRelativePosition(\n    target: Box,\n    layout: Box,\n    parent: Box,\n    anchor?: Point\n) {\n    calcRelativeAxisPosition(target.x, layout.x, parent.x, anchor?.x)\n    calcRelativeAxisPosition(target.y, layout.y, parent.y, anchor?.y)\n}\n"],"names":[],"mappings":"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"}