{"version":3,"file":"get-final.mjs","sources":["../../../../src/animation/keyframes/get-final.ts"],"sourcesContent":["import { AnimationPlaybackOptions } from \"../types\"\n\nexport function getFinalKeyframe<T>(\n    keyframes: T[],\n    { repeat, repeatType = \"loop\" }: AnimationPlaybackOptions,\n    finalKeyframe?: T,\n    speed: number = 1\n): T {\n    /**\n     * The first and last keyframes that aren't null, and how many there\n     * are. Found in one pass rather than filtering into a new array, as\n     * this runs for every value of every animation.\n     */\n    let first: T | undefined\n    let last: T | undefined\n    let numResolved = 0\n    for (let i = 0; i < keyframes.length; i++) {\n        const keyframe = keyframes[i]\n        if (keyframe !== null) {\n            if (!numResolved++) first = keyframe\n            last = keyframe\n        }\n    }\n\n    const useFirstKeyframe =\n        speed < 0 || (repeat && repeatType !== \"loop\" && repeat % 2 === 1)\n    const index = useFirstKeyframe ? 0 : numResolved - 1\n\n    return !index || finalKeyframe === undefined\n        ? ((index ? last : first) as T)\n        : finalKeyframe\n}\n"],"names":[],"mappings":"SAEgB,gBAAgB,CAC5B,SAAc,EACd,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,EAA4B,EACzD,aAAiB,EACjB,QAAgB,CAAC,EAAA;AAEjB;;;;AAIG;AACH,IAAA,IAAI,KAAoB;AACxB,IAAA,IAAI,IAAmB;IACvB,IAAI,WAAW,GAAG,CAAC;AACnB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,WAAW,EAAE;gBAAE,KAAK,GAAG,QAAQ;YACpC,IAAI,GAAG,QAAQ;QACnB;IACJ;AAEA,IAAA,MAAM,gBAAgB,GAClB,KAAK,GAAG,CAAC,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,IAAI,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;AACtE,IAAA,MAAM,KAAK,GAAG,gBAAgB,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC;AAEpD,IAAA,OAAO,CAAC,KAAK,IAAI,aAAa,KAAK;WAC3B,KAAK,GAAG,IAAI,GAAG,KAAK;UACtB,aAAa;AACvB;;;;"}