/**
 * Mechanical translation of a raw Figma MCP `get_motion_context` response
 * into MotionDocs — no hand transcription (design spec §6 motion notes).
 *
 * Field-tested decoding rules (2026-07, SDS "Unlocked" card):
 *
 * - The response carries two encodings per node. The motion.dev snippet is
 *   the reliable one: every track is sampled inside the timeline-cohort
 *   window, so values are correct AT their normalized times. The CSS
 *   snippet stretches per-track durations and can disagree — it is ignored.
 * - Keyframes clustered at the tail of the window (segments spanning less
 *   than WRAP_EPSILON_S of real time) are LOOP-WRAP MARKERS — the instant
 *   reset at the loop boundary — not authored motion. They are stripped and
 *   the wrap is realized by the tween's `repeat` restart. Inventing visible
 *   returns from wrap markers is the known failure mode this module exists
 *   to prevent.
 * - After stripping, the last kept keyframe's time extends to 1 so the
 *   track fills its window (the dropped tail spanned sub-millisecond time).
 *
 * Verification is still mandatory: render and compare against
 * `export_video` ground truth with skills/figma/scripts/verify-motion.mjs.
 */
import type { MotionDoc } from "./types";
export interface MotionContextNode {
    nodeId: string;
    nodeName: string;
    nodeType?: string;
    codeSnippets?: {
        css?: string;
        motionDev?: string;
    };
}
export interface MotionContextResponse {
    nodes: MotionContextNode[];
    timelineCohorts?: Array<{
        rootNodeId: string;
        durationMs: number;
        loopMode?: string;
        memberNodeIds?: string[];
    }>;
}
export interface MotionContextToDocsOptions {
    /**
     * Maps a node to the CSS selector of its imported element. REQUIRED in
     * practice: pass the ids from the Phase-3 component import (the mapper's
     * slugs, e.g. `#headphones-3d`) — deriving selectors from node names here
     * would silently drift from the imported HTML.
     */
    selectorFor: (node: MotionContextNode) => string;
    /** Extra plays per track (GSAP semantics: 0 = play once). Default 0. */
    repeat?: number;
}
/**
 * Raw `get_motion_context` response → MotionDoc[], mechanically. Feed the
 * result to motionToGsap/emitTimelineScript; then verify against
 * export_video ground truth before calling the import done.
 */
export declare function motionContextToDocs(response: MotionContextResponse, options: MotionContextToDocsOptions): MotionDoc[];
//# sourceMappingURL=motionContextToDocs.d.ts.map