luxe-frontend/node_modules/motion-dom/dist/es/animation/utils/arc.mjs.map

1 line
17 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"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 (01) 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 01 — 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 * <motion.div animate={{ x: 200, y: 100 }} transition={{ path: arc() }} />\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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"}