{"version":3,"names":["createObserver","type","callback","options","isBrowser","undefined","Observer","getObserver","ExtendedMutationObserver","window","MutationObserver","constructor","super","this","observedEntry","observe","target","push","unobserve","newObservedEntries","filter","observed","takeRecords","disconnect","forEach","IntersectionObserver","ResizeObserver"],"sources":["src/utils/observers.ts"],"sourcesContent":["import { isBrowser } from \"./browser\";\n\nexport interface ExtendedMutationObserver extends MutationObserver {\n new: () => ExtendedMutationObserver;\n unobserve: (target: Node) => void;\n}\n\ndeclare const ExtendedMutationObserver: {\n prototype: ExtendedMutationObserver;\n new (callback: MutationCallback): ExtendedMutationObserver;\n};\n\ntype ObserverType = \"mutation\" | \"intersection\" | \"resize\";\n\ntype ObserverCallbackType = T extends \"mutation\"\n ? MutationCallback\n : T extends \"intersection\"\n ? IntersectionObserverCallback\n : T extends \"resize\"\n ? ResizeObserverCallback\n : never;\n\ntype ObserverOptions = T extends \"intersection\" ? IntersectionObserverInit : never;\n\ntype ObserverClassType = T extends \"mutation\"\n ? typeof ExtendedMutationObserver\n : T extends \"intersection\"\n ? typeof IntersectionObserver\n : T extends \"resize\"\n ? typeof ResizeObserver\n : never;\n\ntype ObserverInstanceType = T extends \"mutation\"\n ? ExtendedMutationObserver\n : T extends \"intersection\"\n ? IntersectionObserver\n : T extends \"resize\"\n ? ResizeObserver\n : never;\n\n/**\n * This utility ensures observers are created only for browser contexts.\n *\n * @param type - the type of observer to create\n * @param callback - the observer callback\n * @param options - the observer options\n */\nexport function createObserver(\n type: T,\n callback: ObserverCallbackType,\n options?: ObserverOptions,\n): ObserverInstanceType | undefined {\n if (!isBrowser()) {\n return undefined;\n }\n\n const Observer = getObserver(type);\n return new Observer(callback as any, options) as any;\n}\n\nfunction getObserver(type: T): ObserverClassType {\n // based on https://github.com/whatwg/dom/issues/126#issuecomment-1049814948\n class ExtendedMutationObserver extends window.MutationObserver implements ExtendedMutationObserver {\n private observedEntry: Array<{\n target: Node;\n options?: MutationObserverInit;\n }> = [];\n\n private readonly callback: MutationCallback;\n\n constructor(callback: MutationCallback) {\n super(callback);\n this.callback = callback;\n }\n\n observe(target: Node, options?: MutationObserverInit): void {\n this.observedEntry.push({ target, options });\n\n return super.observe(target, options);\n }\n\n unobserve(target: Node): void {\n const newObservedEntries = this.observedEntry.filter((observed) => observed.target !== target);\n this.observedEntry = [];\n this.callback(super.takeRecords(), this);\n this.disconnect();\n newObservedEntries.forEach((observed) => this.observe(observed.target, observed.options));\n }\n }\n\n return (function () {\n return (\n type === \"intersection\"\n ? window.IntersectionObserver\n : type === \"mutation\"\n ? ExtendedMutationObserver\n : window.ResizeObserver\n ) as any;\n })();\n}\n"],"mappings":";;;;;6CA+CgBA,EACdC,EACAC,EACAC,GAEA,IAAKC,IAAa,CAChB,OAAOC,S,CAGT,MAAMC,EAAWC,EAAeN,GAChC,OAAO,IAAIK,EAASJ,EAAiBC,EACvC,CAEA,SAASI,EAAoCN,GAE3C,MAAMO,UAAiCC,OAAOC,iBAQ5C,WAAAC,CAAYT,GACVU,MAAMV,GARAW,KAAAC,cAGH,GAMHD,KAAKX,SAAWA,C,CAGlB,OAAAa,CAAQC,EAAcb,GACpBU,KAAKC,cAAcG,KAAK,CAAED,SAAQb,YAElC,OAAOS,MAAMG,QAAQC,EAAQb,E,CAG/B,SAAAe,CAAUF,GACR,MAAMG,EAAqBN,KAAKC,cAAcM,QAAQC,GAAaA,EAASL,SAAWA,IACvFH,KAAKC,cAAgB,GACrBD,KAAKX,SAASU,MAAMU,cAAeT,MACnCA,KAAKU,aACLJ,EAAmBK,SAASH,GAAaR,KAAKE,QAAQM,EAASL,OAAQK,EAASlB,U,EAIpF,OAAO,WACL,OACEF,IAAS,eACLQ,OAAOgB,qBACPxB,IAAS,WACPO,EACAC,OAAOiB,cAEhB,CARM,EAST,Q","ignoreList":[]}