{"version":3,"file":"on-scroll-handler.mjs","sources":["../../../../../src/render/dom/scroll/on-scroll-handler.ts"],"sourcesContent":["import { warnOnce } from \"motion-utils\"\nimport { Axis, axisKeys } from \"./info\"\nimport { resolveOffsets } from \"./offsets/index\"\nimport { calcInset } from \"./offsets/inset\"\nimport {\n OnScrollHandler,\n OnScrollInfo,\n ScrollInfo,\n ScrollInfoOptions,\n} from \"./types\"\n\nfunction getTargetSize(target: Element) {\n return \"getBBox\" in target && target.tagName !== \"svg\"\n ? (target as SVGGraphicsElement).getBBox()\n : { width: target.clientWidth, height: target.clientHeight }\n}\n\nexport function createOnScrollHandler(\n container: Element,\n onScroll: OnScrollInfo,\n info: ScrollInfo,\n options: ScrollInfoOptions = {}\n): OnScrollHandler {\n const { target } = options\n\n /**\n * In development mode ensure scroll containers aren't position: static as this makes\n * it difficult to measure their relative positions. The document scrolling element\n * is exempt: offsetParent measurements naturally resolve relative to the document.\n */\n if (process.env.NODE_ENV !== \"production\") {\n if (\n target &&\n target !== container &&\n container !== document.documentElement &&\n container !== document.scrollingElement &&\n container !== document.body\n ) {\n warnOnce(\n getComputedStyle(container).position !== \"static\",\n \"Please ensure that the container has a non-static position, like 'relative', 'fixed', or 'absolute' to ensure scroll offset is calculated correctly.\"\n )\n }\n }\n\n /**\n * Handlers without a target or offset are notified with the container's\n * shared info object, so they measure nothing themselves.\n */\n const needsOwnInfo = target || options.offset\n\n return {\n measure: (containerInfo) => {\n if (!needsOwnInfo) return\n\n info.time = containerInfo.time\n for (const key in axisKeys) {\n const axis = key as Axis\n const { offset } = info[axis]\n Object.assign(info[axis], containerInfo[axis])\n info[axis].offset = offset\n }\n\n if (target && target !== container) {\n const inset = calcInset(target, container)\n const size = getTargetSize(target)\n info.x.targetOffset = inset.x\n info.y.targetOffset = inset.y\n info.x.targetLength = size.width\n info.y.targetLength = size.height\n }\n\n resolveOffsets(info, options)\n },\n notify: (containerInfo) =>\n onScroll(needsOwnInfo ? info : containerInfo),\n }\n}\n"],"names":[],"mappings":";;;;;AAWA,SAAS,aAAa,CAAC,MAAe,EAAA;IAClC,OAAO,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK;AAC7C,UAAG,MAA6B,CAAC,OAAO;AACxC,UAAE,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE;AACpE;AAEM,SAAU,qBAAqB,CACjC,SAAkB,EAClB,QAAsB,EACtB,IAAgB,EAChB,OAAA,GAA6B,EAAE,EAAA;AAE/B,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;AAE1B;;;;AAIG;IACH,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;AACvC,QAAA,IACI,MAAM;AACN,YAAA,MAAM,KAAK,SAAS;YACpB,SAAS,KAAK,QAAQ,CAAC,eAAe;YACtC,SAAS,KAAK,QAAQ,CAAC,gBAAgB;AACvC,YAAA,SAAS,KAAK,QAAQ,CAAC,IAAI,EAC7B;AACE,YAAA,QAAQ,CACJ,gBAAgB,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAK,QAAQ,EACjD,sJAAsJ,CACzJ;QACL;IACJ;AAEA;;;AAGG;AACH,IAAA,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM;IAE7C,OAAO;AACH,QAAA,OAAO,EAAE,CAAC,aAAa,KAAI;AACvB,YAAA,IAAI,CAAC,YAAY;gBAAE;AAEnB,YAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI;AAC9B,YAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;gBACxB,MAAM,IAAI,GAAG,GAAW;gBACxB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;AAC7B,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM;YAC9B;AAEA,YAAA,IAAI,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE;gBAChC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;AAC1C,gBAAA,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;gBAClC,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK;gBAChC,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM;YACrC;AAEA,YAAA,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;QACjC,CAAC;AACD,QAAA,MAAM,EAAE,CAAC,aAAa,KAClB,QAAQ,CAAC,YAAY,GAAG,IAAI,GAAG,aAAa,CAAC;KACpD;AACL;;;;"}