{"version":3,"file":"index.mjs","sources":["../../../../../../src/render/dom/scroll/offsets/index.ts"],"sourcesContent":["import { clamp, progress } from \"motion-utils\"\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\nexport function resolveOffsets(info: ScrollInfo, options: ScrollInfoOptions) {\n    const { offset: offsetDefinition = ScrollOffset.All, axis = \"y\" } = options\n    const axisInfo = info[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    const numOffsets = offsetDefinition.length\n    for (let i = 0; i < numOffsets; 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"],"names":[],"mappings":";;;;AAKA;;;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;AAEM,SAAU,cAAc,CAAC,IAAgB,EAAE,OAA0B,EAAA;AACvE,IAAA,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,OAAO;AAC3E,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAE3B;;AAEG;AACH,IAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAE1B;;;AAGG;AACH,IAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM;AAC1C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;QACjC,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;IACL;IAEA,QAAQ,CAAC,QAAQ,GAAG,KAAK,CACrB,CAAC,EACD,CAAC,EACD,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CACvD;AACL;;;;"}