{"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;;;;"}