{"version":3,"file":"arc.mjs","sources":["../../../../src/animation/utils/arc.ts"],"sourcesContent":["import { wrap } from \"motion-utils\"\nimport { motionValue } from \"../../value\"\nimport { animateMotionValue } from \"../interfaces/motion-value\"\nimport type { MotionPath, PathInterpolator, Point2D } from \"../types\"\nimport { getValueTransition } from \"./get-value-transition\"\n\nexport interface ArcOptions {\n /**\n * How far the arc bulges perpendicular to the straight-line path,\n * as a fraction of the total distance. A value of `1` means the arc\n * peaks at a height equal to the full travel distance. Default `0.5`.\n */\n strength?: number\n /**\n * Where along the path (0–1) the arc reaches its maximum height.\n * Default `0.5` (symmetric).\n */\n peak?: number\n /**\n * Which side the arc bulges toward.\n * - `\"cw\"` / `\"ccw\"` — locked relative to direction of travel\n * - unset — auto-pick a stable screen-space side\n */\n direction?: \"cw\" | \"ccw\"\n /**\n * Rotates the element to follow the tangent of the arc path.\n * - `true` — full tangent following (1.0)\n * - number 0–1 — scale factor\n */\n rotate?: boolean | number\n}\n\nconst MIN_LAYOUT_DISTANCE = 20\n\nfunction bezierPoint(\n t: number,\n origin: number,\n control: number,\n target: number\n): number {\n const inv = 1 - t\n return inv * inv * origin + 2 * inv * t * control + t * t * target\n}\n\nfunction bezierTangentAngle(\n t: number,\n originX: number,\n controlX: number,\n targetX: number,\n originY: number,\n controlY: number,\n targetY: number\n): number {\n const dx =\n 2 * (1 - t) * (controlX - originX) + 2 * t * (targetX - controlX)\n const dy =\n 2 * (1 - t) * (controlY - originY) + 2 * t * (targetY - controlY)\n return Math.atan2(dy, dx) * (180 / Math.PI)\n}\n\nfunction computeArcControlPoint(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number,\n strength: number,\n peak: number\n): { x: number; y: number } {\n const deltaX = toX - fromX\n const deltaY = toY - fromY\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY)\n\n if (distance > 0) {\n const normalPerpX = -deltaY / distance\n const normalPerpY = deltaX / distance\n const desiredHeight = strength * distance\n\n return {\n x: fromX + deltaX * peak + normalPerpX * desiredHeight,\n y: fromY + deltaY * peak + normalPerpY * desiredHeight,\n }\n }\n\n return { x: fromX, y: fromY }\n}\n\n/**\n * The pure sampling factory: `(from, to) => (t) => point`. Internal —\n * used by {@link arc} and the unit tests. Not part of the public surface.\n */\nexport function createArcPath({\n strength = 0.5,\n peak = 0.5,\n direction,\n rotate = false,\n}: ArcOptions = {}): (from: Point2D, to: Point2D) => PathInterpolator {\n const rotationScale =\n rotate === true ? 1 : typeof rotate === \"number\" ? rotate : 0\n\n // Auto-direction only: persists across calls to flip the bulge back\n // onto the same screen side when the dominant axis changes between\n // calls. Reuse the factory (module scope / useMemo) to keep this alive.\n let prevBulgeSign: number | undefined\n\n const createInterpolator = (\n from: Point2D,\n to: Point2D\n ): PathInterpolator => {\n const dx = to.x - from.x\n const dy = to.y - from.y\n\n let signed: number\n if (direction === \"cw\") {\n signed = -strength\n } else if (direction === \"ccw\") {\n signed = strength\n } else {\n const dom = Math.abs(dx) >= Math.abs(dy) ? dx : dy\n signed = dom < 0 ? -strength : strength\n }\n\n let control = computeArcControlPoint(\n from.x,\n from.y,\n to.x,\n to.y,\n signed,\n peak\n )\n\n if (direction === undefined) {\n const isVertical = Math.abs(dx) < Math.abs(dy)\n const midX = from.x + dx * peak\n const midY = from.y + dy * peak\n const bulgeSign = isVertical\n ? Math.sign(control.x - midX)\n : Math.sign(control.y - midY)\n\n if (\n prevBulgeSign !== undefined &&\n bulgeSign !== 0 &&\n bulgeSign !== prevBulgeSign\n ) {\n signed = -signed\n control = computeArcControlPoint(\n from.x,\n from.y,\n to.x,\n to.y,\n signed,\n peak\n )\n } else if (bulgeSign !== 0) {\n prevBulgeSign = bulgeSign\n }\n }\n\n const tangent0 = rotationScale\n ? bezierTangentAngle(\n 0,\n from.x,\n control.x,\n to.x,\n from.y,\n control.y,\n to.y\n )\n : 0\n const tangent1 = rotationScale\n ? bezierTangentAngle(\n 1,\n from.x,\n control.x,\n to.x,\n from.y,\n control.y,\n to.y\n )\n : 0\n const tangentDelta = rotationScale\n ? wrap(-180, 180, tangent1 - tangent0)\n : 0\n\n return (t: number) => {\n const out: { x: number; y: number; rotate?: number } = {\n x: bezierPoint(t, from.x, control.x, to.x),\n y: bezierPoint(t, from.y, control.y, to.y),\n }\n if (rotationScale) {\n const raw = bezierTangentAngle(\n t,\n from.x,\n control.x,\n to.x,\n from.y,\n control.y,\n to.y\n )\n const baseline = tangent0 + tangentDelta * t\n out.rotate = wrap(-180, 180, raw - baseline) * rotationScale\n }\n return out\n }\n }\n\n return createInterpolator\n}\n\n/**\n * Creates a curved path for `transition.path`:\n *\n * ```ts\n * \n * ```\n *\n * Reuse the returned value (module scope / useMemo / useRef) so its\n * continuity closure survives re-renders — a fresh `arc()` has no memory.\n */\nexport function arc(options: ArcOptions = {}): MotionPath {\n const sample = createArcPath(options)\n\n const path: MotionPath = {\n interpolateProjection(delta) {\n // `from` is the current translate offset (carries any in-flight\n // displacement when interrupted); `to` is the new layout origin.\n // The distance floor avoids visible wobble on tiny shifts.\n const tx = delta.x.translate\n const ty = delta.y.translate\n if (Math.sqrt(tx * tx + ty * ty) < MIN_LAYOUT_DISTANCE) {\n return undefined\n }\n return sample({ x: tx, y: ty }, { x: 0, y: 0 })\n },\n\n animateVisualElement(\n visualElement,\n target,\n transition,\n delay,\n animations\n ) {\n if (!(\"x\" in target || \"y\" in target)) return\n\n const xValue = visualElement.getValue(\n \"x\",\n visualElement.latestValues[\"x\"] ?? 0\n )\n const yValue = visualElement.getValue(\n \"y\",\n visualElement.latestValues[\"y\"] ?? 0\n )\n\n const xRaw = target.x as number | number[] | undefined\n const yRaw = target.y as number | number[] | undefined\n\n const xFrom = ((Array.isArray(xRaw) && xRaw[0] != null\n ? xRaw[0]\n : xValue?.get()) as number) ?? 0\n const yFrom = ((Array.isArray(yRaw) && yRaw[0] != null\n ? yRaw[0]\n : yValue?.get()) as number) ?? 0\n const xTo = (Array.isArray(xRaw)\n ? xRaw[xRaw.length - 1]\n : xRaw ?? xFrom) as number\n const yTo = (Array.isArray(yRaw)\n ? yRaw[yRaw.length - 1]\n : yRaw ?? yFrom) as number\n\n // Interruption needs no flag: x/y already hold the displaced\n // mid-arc position, so xFrom/yFrom carry the continuity geometry.\n const interpolate = sample(\n { x: xFrom, y: yFrom },\n { x: xTo, y: yTo }\n )\n\n // Drive a dedicated `pathRotation` value (composed onto `rotate`\n // at the build sites) rather than `rotate` itself, so a\n // concurrent rotate animation composes and nothing accumulates\n // on interrupt.\n const pathRotationValue =\n interpolate(0).rotate !== undefined\n ? visualElement.getValue(\"pathRotation\", 0)\n : undefined\n\n const pathTransition = {\n delay,\n ...getValueTransition(transition || {}, \"x\"),\n }\n delete (pathTransition as { path?: unknown }).path\n\n const progress = motionValue(0)\n progress.start(\n animateMotionValue(\"\", progress, [0, 1000] as any, {\n ...pathTransition,\n isSync: true,\n velocity: 0,\n onUpdate: (latest: number) => {\n const point = interpolate(latest / 1000)\n xValue?.set(point.x)\n yValue?.set(point.y)\n if (pathRotationValue && point.rotate !== undefined) {\n pathRotationValue.set(point.rotate)\n }\n },\n onComplete: () => {\n xValue?.set(xTo)\n yValue?.set(yTo)\n pathRotationValue?.set(0)\n },\n // Interrupt/cancel must clear our additive contribution\n // so it can't linger on top of the user's `rotate`.\n onStop: () => pathRotationValue?.set(0),\n onCancel: () => pathRotationValue?.set(0),\n })\n )\n\n if (progress.animation) animations.push(progress.animation)\n\n delete (target as { x?: unknown }).x\n delete (target as { y?: unknown }).y\n },\n }\n\n return path\n}\n"],"names":[],"mappings":"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"}