{"version":3,"file":"index.mjs","sources":["../../../../../../src/render/dom/scroll/offsets/index.ts"],"sourcesContent":["import { clamp, progress } from \"motion-utils\"\nimport { Axis, axisKeys } from \"../info\"\nimport { ScrollInfo, ScrollInfoOptions } from \"../types\"\nimport { resolveOffset } from \"./offset\"\nimport { ScrollOffset } from \"./presets\"\n\n/**\n * Resolved offsets map to evenly spaced progress values, so progress is\n * derived from the segment index rather than building an interpolator.\n */\nfunction offsetsToProgress(offsets: number[], v: number) {\n    const n = offsets.length - 1\n    if (n < 1) return 0\n\n    const reverse = offsets[0] > offsets[n]\n    const at = (i: number) => offsets[reverse ? n - i : i]\n\n    /**\n     * Matches interpolate(), which checks for a zero-length first range\n     * before reversing descending offsets.\n     */\n    if (offsets[0] === offsets[1] && v < at(0)) return reverse ? 1 : 0\n\n    let i = 0\n    while (i < n - 1 && v >= at(i + 1)) i++\n\n    const p = (i + progress(at(i), at(i + 1), v)) / n\n    return reverse ? 1 - p : p\n}\n\n/**\n * Resolves offsets on both axes, as useScroll reports the target's progress\n * on each (#2546). `axis` only picks which progress scroll() reports.\n */\nexport function resolveOffsets(\n    info: ScrollInfo,\n    { offset: offsetDefinition = ScrollOffset.All }: ScrollInfoOptions\n) {\n    for (const axis in axisKeys) {\n        const axisInfo = info[axis as Axis]\n\n        /**\n         * Reset the length of the resolved offset array rather than creating a new one.\n         */\n        axisInfo.offset.length = 0\n\n        /**\n         * Populate the offset array by resolving the user's offset definition into\n         * a list of pixel scroll offsets.\n         */\n        for (let i = 0; i < offsetDefinition.length; i++) {\n            axisInfo.offset[i] = resolveOffset(\n                offsetDefinition[i],\n                axisInfo.containerLength,\n                axisInfo.targetLength,\n                axisInfo.targetOffset\n            )\n        }\n\n        axisInfo.progress = clamp(\n            0,\n            1,\n            offsetsToProgress(axisInfo.offset, axisInfo.current)\n        )\n    }\n}\n"],"names":[],"mappings":";;;;;AAMA;;;AAGG;AACH,SAAS,iBAAiB,CAAC,OAAiB,EAAE,CAAS,EAAA;AACnD,IAAA,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,CAAC;IAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,CAAS,KAAK,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEtD;;;AAGG;AACH,IAAA,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,GAAG,CAAC,GAAG,CAAC;IAElE,IAAI,CAAC,GAAG,CAAC;AACT,IAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAAE,QAAA,CAAC,EAAE;IAEvC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;IACjD,OAAO,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9B;AAEA;;;AAGG;AACG,SAAU,cAAc,CAC1B,IAAgB,EAChB,EAAE,MAAM,EAAE,gBAAgB,GAAG,YAAY,CAAC,GAAG,EAAqB,EAAA;AAElE,IAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAY,CAAC;AAEnC;;AAEG;AACH,QAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAE1B;;;AAGG;AACH,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAC9B,gBAAgB,CAAC,CAAC,CAAC,EACnB,QAAQ,CAAC,eAAe,EACxB,QAAQ,CAAC,YAAY,EACrB,QAAQ,CAAC,YAAY,CACxB;QACL;QAEA,QAAQ,CAAC,QAAQ,GAAG,KAAK,CACrB,CAAC,EACD,CAAC,EACD,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CACvD;IACL;AACJ;;;;"}