{"version":3,"sources":["../src/adapters/dom/initDom.ts"],"names":["IMAGE_SELECTOR","TEXT_SELECTOR","LAZY_ROOT_MARGIN","lazyStarted","initDom","options","initLazyEffects","LasciiImageEffect_default","LasciiTextEffect_default","autoInitDom","elements","remaining","observer","entries","entry","initLazyElement","element"],"mappings":"qHAGA,IAAMA,EAAiB,qBAAA,CACjBC,CAAAA,CAAgB,qBAChBC,CAAAA,CAAmB,OAAA,CAEnBC,EAAc,IAAI,OAAA,CAMjB,SAASC,CAAAA,CAAQC,CAAAA,CAA0B,EAAC,CAAS,CAC1D,GAAIA,CAAAA,CAAQ,IAAA,CAAM,CAChBC,CAAAA,EAAgB,CAChB,MACF,CAEAC,mBAAAA,CAAkB,KAAKP,CAAc,CAAA,CACrCQ,oBAAiB,IAAA,CAAKP,CAAa,EACrC,CAEO,SAASQ,EAAYJ,CAAAA,CAA0B,GAAU,CAC9D,GAAI,SAAS,UAAA,GAAe,SAAA,CAAW,CACrC,QAAA,CAAS,gBAAA,CAAiB,kBAAA,CAAoB,IAAMD,EAAQC,CAAO,CAAC,EACpE,MACF,CAEAD,EAAQC,CAAO,EACjB,CAEA,SAASC,CAAAA,EAAwB,CAC/B,GAAI,OAAO,qBAAyB,GAAA,CAAa,CAC/CC,oBAAkB,IAAA,CAAKP,CAAc,EACrCQ,mBAAAA,CAAiB,IAAA,CAAKP,CAAa,CAAA,CACnC,MACF,CAEA,IAAMS,CAAAA,CAAW,SAAS,gBAAA,CACxB,CAAA,EAAGV,CAAc,CAAA,EAAA,EAAKC,CAAa,EACrC,CAAA,CACA,GAAIS,EAAS,MAAA,GAAW,CAAA,CAAG,OAE3B,IAAIC,CAAAA,CAAY,CAAA,CACVC,CAAAA,CAAW,IAAI,oBAAA,CAClBC,CAAAA,EAAY,CACX,IAAA,IAAWC,CAAAA,IAASD,EACbC,CAAAA,CAAM,cAAA,GACXF,EAAS,SAAA,CAAUE,CAAAA,CAAM,MAAM,CAAA,CAC/BC,CAAAA,CAAgBD,EAAM,MAAM,CAAA,CAC5BH,GAAa,CAAA,CACTA,CAAAA,GAAc,GAChBC,CAAAA,CAAS,UAAA,IAGf,CAAA,CACA,CAAE,WAAYV,CAAiB,CACjC,EAEAQ,CAAAA,CAAS,OAAA,CAASM,GAAY,CACxBb,CAAAA,CAAY,IAAIa,CAAO,CAAA,GAC3BL,GAAa,CAAA,CACbC,CAAAA,CAAS,QAAQI,CAAO,CAAA,EAC1B,CAAC,CAAA,CAEGL,CAAAA,GAAc,GAChBC,CAAAA,CAAS,UAAA,GAEb,CAEA,SAASG,EAAgBC,CAAAA,CAAwB,CAC/C,GAAI,CAAAb,CAAAA,CAAY,IAAIa,CAAO,CAAA,CAG3B,IAFAb,CAAAA,CAAY,GAAA,CAAIa,CAAO,CAAA,CAGrBA,CAAAA,YAAmB,kBACnBA,CAAAA,CAAQ,OAAA,CAAQhB,CAAc,CAAA,CAC9B,CACA,IAAIO,mBAAAA,CAAkBS,CAAAA,CAAS,CAAC,CAAA,CAChC,MACF,CAEIA,CAAAA,YAAmB,WAAA,EAAeA,EAAQ,OAAA,CAAQf,CAAa,GACjE,IAAIO,mBAAAA,CAAiBQ,CAAO,EAAA,CAEhC","file":"chunk-MD23KPBG.cjs","sourcesContent":["import LasciiImageEffect from \"../../core/effects/LasciiImageEffect.js\";\r\nimport LasciiTextEffect from \"../../core/effects/LasciiTextEffect.js\";\r\n\r\nconst IMAGE_SELECTOR = \"[data-lascii-image]\";\r\nconst TEXT_SELECTOR = \"[data-lascii-text]\";\r\nconst LAZY_ROOT_MARGIN = \"100px\";\r\n\r\nconst lazyStarted = new WeakSet<Element>();\r\n\r\nexport interface InitDomOptions {\r\n  lazy?: boolean;\r\n}\r\n\r\nexport function initDom(options: InitDomOptions = {}): void {\r\n  if (options.lazy) {\r\n    initLazyEffects();\r\n    return;\r\n  }\r\n\r\n  LasciiImageEffect.init(IMAGE_SELECTOR);\r\n  LasciiTextEffect.init(TEXT_SELECTOR);\r\n}\r\n\r\nexport function autoInitDom(options: InitDomOptions = {}): void {\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", () => initDom(options));\r\n    return;\r\n  }\r\n\r\n  initDom(options);\r\n}\r\n\r\nfunction initLazyEffects(): void {\r\n  if (typeof IntersectionObserver === \"undefined\") {\r\n    LasciiImageEffect.init(IMAGE_SELECTOR);\r\n    LasciiTextEffect.init(TEXT_SELECTOR);\r\n    return;\r\n  }\r\n\r\n  const elements = document.querySelectorAll(\r\n    `${IMAGE_SELECTOR}, ${TEXT_SELECTOR}`,\r\n  );\r\n  if (elements.length === 0) return;\r\n\r\n  let remaining = 0;\r\n  const observer = new IntersectionObserver(\r\n    (entries) => {\r\n      for (const entry of entries) {\r\n        if (!entry.isIntersecting) continue;\r\n        observer.unobserve(entry.target);\r\n        initLazyElement(entry.target);\r\n        remaining -= 1;\r\n        if (remaining === 0) {\r\n          observer.disconnect();\r\n        }\r\n      }\r\n    },\r\n    { rootMargin: LAZY_ROOT_MARGIN },\r\n  );\r\n\r\n  elements.forEach((element) => {\r\n    if (lazyStarted.has(element)) return;\r\n    remaining += 1;\r\n    observer.observe(element);\r\n  });\r\n\r\n  if (remaining === 0) {\r\n    observer.disconnect();\r\n  }\r\n}\r\n\r\nfunction initLazyElement(element: Element): void {\r\n  if (lazyStarted.has(element)) return;\r\n  lazyStarted.add(element);\r\n\r\n  if (\r\n    element instanceof HTMLImageElement &&\r\n    element.matches(IMAGE_SELECTOR)\r\n  ) {\r\n    new LasciiImageEffect(element, 0);\r\n    return;\r\n  }\r\n\r\n  if (element instanceof HTMLElement && element.matches(TEXT_SELECTOR)) {\r\n    new LasciiTextEffect(element);\r\n  }\r\n}\r\n"]}