{"version":3,"file":"offset-to-range.mjs","sources":["../../../../../../src/render/dom/scroll/utils/offset-to-range.ts"],"sourcesContent":["import { resolveOffset } from \"../offsets/offset\"\nimport { ScrollOffset as presets } from \"../offsets/presets\"\nimport { ScrollOffset } from \"../types\"\n\nexport interface ViewTimelineRange {\n /**\n * Named range offsets of the offset's two points.\n */\n points: string[]\n\n /**\n * The offset runs forwards when a × target length + b × container length\n * is >= 0. Otherwise its range runs from the second point to the first,\n * with progress reversed.\n */\n a: number\n b: number\n\n /**\n * Whether this is the ViewTimeline's default range, run forwards.\n */\n cover: boolean\n}\n\n/**\n * Resolved offsets are linear in the target and container lengths, so\n * probing them gives [target progress, container progress, pixels].\n * vw/vh can resolve to 0px, so they're rejected up front.\n */\nconst toIntersection = (o: ScrollOffset[number]) => {\n if (/v/u.test(o as string)) return []\n const px = resolveOffset(o, 0, 0, 0)\n return [resolveOffset(o, 0, 1, 0) - px, px - resolveOffset(o, 1, 0, 0), px]\n}\n\nconst toRange = ([t, c, px]: number[]) =>\n !px &&\n (c === 0 || c === 1) &&\n `${c ? \"entry\" : \"exit\"}-crossing ${t * 100}%`\n\n/**\n * Maps an offset to an equivalent ViewTimeline range. Returns undefined when\n * there isn't one, which signals the caller to fall back to JS-based scroll\n * tracking.\n */\nexport function offsetToViewTimelineRange(\n offset: ScrollOffset = presets.All\n): ViewTimelineRange | undefined {\n if (offset.length !== 2) return\n\n const [start, end] = offset.map(toIntersection)\n const points = [toRange(start), toRange(end)]\n const a = end[0] - start[0]\n const b = start[1] - end[1]\n\n if (points[0] && points[1] && (a || b)) {\n return {\n points: points as string[],\n a,\n b,\n cover: !start[0] && a === 1 && b === 1,\n }\n }\n}\n"],"names":["presets"],"mappings":";;;AAwBA;;;;AAIG;AACH,MAAM,cAAc,GAAG,CAAC,CAAuB,KAAI;AAC/C,IAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAW,CAAC;AAAE,QAAA,OAAO,EAAE;AACrC,IAAA,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpC,IAAA,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAC/E,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAW,KACjC,CAAC,EAAE;AACH,KAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,IAAA,CAAA,EAAG,CAAC,GAAG,OAAO,GAAG,MAAM,CAAA,UAAA,EAAa,CAAC,GAAG,GAAG,GAAG;AAElD;;;;AAIG;SACa,yBAAyB,CACrC,MAAA,GAAuBA,YAAO,CAAC,GAAG,EAAA;AAElC,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE;AAEzB,IAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;AAC/C,IAAA,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAE3B,IAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;QACpC,OAAO;AACH,YAAA,MAAM,EAAE,MAAkB;YAC1B,CAAC;YACD,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACzC;IACL;AACJ;;;;"}