{"version":3,"file":"handle-element.mjs","sources":["../../../src/resize/handle-element.ts"],"sourcesContent":["import { isSVGElement } from \"../utils/is-svg-element\"\nimport { ElementOrSelector, resolveElements } from \"../utils/resolve-elements\"\nimport { ResizeHandler } from \"./types\"\n\nconst resizeHandlers = new WeakMap>>()\n\nlet observer: ResizeObserver | undefined\n\nconst getSize =\n (\n borderBoxAxis: \"inline\" | \"block\",\n svgAxis: \"width\" | \"height\",\n htmlAxis: \"offsetWidth\" | \"offsetHeight\"\n ) =>\n (target: Element, borderBoxSize?: ReadonlyArray) => {\n if (borderBoxSize && borderBoxSize[0]) {\n return borderBoxSize[0][\n (borderBoxAxis + \"Size\") as keyof ResizeObserverSize\n ]\n } else if (isSVGElement(target) && \"getBBox\" in target) {\n return (target as SVGGraphicsElement).getBBox()[svgAxis]\n } else {\n return (target as HTMLElement)[htmlAxis]\n }\n }\n\nconst getWidth = /*@__PURE__*/ getSize(\"inline\", \"width\", \"offsetWidth\")\nconst getHeight = /*@__PURE__*/ getSize(\"block\", \"height\", \"offsetHeight\")\n\nfunction notifyTarget({ target, borderBoxSize }: ResizeObserverEntry) {\n resizeHandlers.get(target)?.forEach((handler) => {\n handler(target, {\n get width() {\n return getWidth(target, borderBoxSize)\n },\n get height() {\n return getHeight(target, borderBoxSize)\n },\n })\n })\n}\n\nfunction notifyAll(entries: ResizeObserverEntry[]) {\n entries.forEach(notifyTarget)\n}\n\nfunction createResizeObserver() {\n if (typeof ResizeObserver === \"undefined\") return\n\n observer = new ResizeObserver(notifyAll)\n}\n\nexport function resizeElement(\n target: ElementOrSelector,\n handler: ResizeHandler\n) {\n if (!observer) createResizeObserver()\n\n const elements = resolveElements(target)\n\n elements.forEach((element) => {\n let elementHandlers = resizeHandlers.get(element)\n\n if (!elementHandlers) {\n elementHandlers = new Set()\n resizeHandlers.set(element, elementHandlers)\n }\n\n elementHandlers.add(handler)\n observer?.observe(element)\n })\n\n return () => {\n elements.forEach((element) => {\n const elementHandlers = resizeHandlers.get(element)\n\n elementHandlers?.delete(handler)\n\n if (!elementHandlers?.size) {\n observer?.unobserve(element)\n }\n })\n }\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,cAAc,GAAG,IAAI,OAAO,EAAwC,CAAA;AAE1E,IAAI,QAAoC,CAAA;AAExC,MAAM,OAAO,GACT,CACI,aAAiC,EACjC,OAA2B,EAC3B,QAAwC,KAE5C,CAAC,MAAe,EAAE,aAAiD,KAAI;AACnE,IAAA,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;QACnC,OAAO,aAAa,CAAC,CAAC,CAAC,EAClB,aAAa,GAAG,MAAM,EAC1B,CAAA;KACJ;SAAM,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,IAAI,MAAM,EAAE;AACpD,QAAA,OAAQ,MAA6B,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAA;KAC3D;SAAM;AACH,QAAA,OAAQ,MAAsB,CAAC,QAAQ,CAAC,CAAA;KAC3C;AACL,CAAC,CAAA;AAEL,MAAM,QAAQ,iBAAiB,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;AACxE,MAAM,SAAS,iBAAiB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAA;AAE1E,SAAS,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,EAAuB,EAAA;IAChE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,KAAI;QAC5C,OAAO,CAAC,MAAM,EAAE;AACZ,YAAA,IAAI,KAAK,GAAA;AACL,gBAAA,OAAO,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;aACzC;AACD,YAAA,IAAI,MAAM,GAAA;AACN,gBAAA,OAAO,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;aAC1C;AACJ,SAAA,CAAC,CAAA;AACN,KAAC,CAAC,CAAA;AACN,CAAC;AAED,SAAS,SAAS,CAAC,OAA8B,EAAA;AAC7C,IAAA,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,oBAAoB,GAAA;IACzB,IAAI,OAAO,cAAc,KAAK,WAAW;QAAE,OAAM;AAEjD,IAAA,QAAQ,GAAG,IAAI,cAAc,CAAC,SAAS,CAAC,CAAA;AAC5C,CAAC;AAEe,SAAA,aAAa,CACzB,MAAyB,EACzB,OAA+B,EAAA;AAE/B,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,oBAAoB,EAAE,CAAA;AAErC,IAAA,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;AAExC,IAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;QACzB,IAAI,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAEjD,IAAI,CAAC,eAAe,EAAE;AAClB,YAAA,eAAe,GAAG,IAAI,GAAG,EAAE,CAAA;AAC3B,YAAA,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;SAC/C;AAED,QAAA,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC5B,QAAA,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;AAC9B,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,MAAK;AACR,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACzB,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAEnD,YAAA,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;AAEhC,YAAA,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE;AACxB,gBAAA,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;aAC/B;AACL,SAAC,CAAC,CAAA;AACN,KAAC,CAAA;AACL;;;;"}