PageSourceSearch

https://gardenstatedental.com/build-next/assets/dynamic-module-loader-DFmQ1oKg.js

js gardenstatedental.com collected 2026-10-04 14:57:19 UTC 25,912 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/nav-menu-G-0T4mD6.js","assets/header-bZJp-l-_.js","assets/carousel-Lwq8mUKF.js","assets/engine-k1uunxGy.js","assets/hero-carousel-qxxmtKCv.js","assets/location-search-DnCuxXhm.js","assets/gmaps-BylYYdKs.js","assets/scheduling-map-DCHxJnRR.js","assets/accordion-Cu_ZAXkz.js","assets/hash-set-CXYJz-Gf.js","assets/personalized-accordion-ChL3cl6M.js","assets/multimedia-embed-CltdZCRa.js","assets/app-C6vu4kPS.js","assets/multimedia-accordion-BYHcjrvx.js","assets/booking-wizard-CJOCasKk.js","assets/combobox-BIZlKaGA.js","assets/recaptcha-C4pId7I1.js","assets/input-mask-BEBFWImt.js","assets/patient-prism-BXM6z7n9.js","assets/booking-section-C8nSfWyH.js","assets/ghost-tracking-Cwpow2yd.js","assets/track-BjSCo8vP.js","assets/forms-CDIK643_.js","assets/turnstile-loader-B8ke1ZFV.js","assets/insurance-finder-DiO0dIjp.js","assets/registration-form-DrbuMudE.js","assets/careers-form-C5AxN3qP.js","assets/careers-locator-C_CR_v8j.js","assets/filter-combobox-CCYZqGZa.js","assets/store-locator-Hy71w2uX.js"])))=>i.map(i=>d[i]);
2import{_ as a}from"./app-C6vu4kPS.js";const d={header:{load:()=>a(()=>import("./header-bZJp-l-_.js"),[]),category:"navigation",description:"Header shell behavior: hamburger open/close (legacy class dance + 300ms timing), multi-phone menu",loadStrategy:"immediate"},"nav-menu":{load:()=>a(()=>import("./nav-menu-G-0T4mD6.js"),__vite__mapDeps([0,1])),category:"navigation",description:"Primary-nav ARIA disclosure dropdowns: click toggle, Esc/arrows/Home/End keyboard model, mobile close-on-navigate (desktop hover reveal stays pure CSS)",loadStrategy:"immediate"},"slide-out":{load:()=>a(()=>import("./slide-out-byu_nUkV.js"),[]),category:"navigation",description:"Medicare/booking slide-out callout toggle (legacy slideOutClose class dance) + careers side-button scroll/label swap",loadStrategy:"immediate"},interstitial:{load:()=>a(()=>import("./interstitial-CrAKSkuM.js"),[]),category:"navigation",description:"Header interstitial banner 24h localStorage gate (widget/interstitial.vue + page-header.vue mounted() port): removes a within-24h-dismissed banner, records the dismissal on close",loadStrategy:"immediate"},"lake-geneva-footer":{load:()=>a(()=>import("./lake-geneva-footer-CNTq8x6J.js"),[]),category:"navigation",description:'Lake Geneva bespoke footer "Dental services" accordion toggle (lake-geneva-page-footer.vue servicesOpen v-show port)',loadStrategy:"lazy"},carousel:{load:()=>a(()=>import("./carousel-Lwq8mUKF.js"),__vite__mapDeps([2,3])),category:"carousels",description:"Generic carousel — boots the in-repo dependency-free CarouselEngine on .carousel roots (+ biosLockSync for the staff slider)",loadStrategy:"lazy"},"hero-carousel":{load:()=>a(()=>import("./hero-carousel-qxxmtKCv.js"),__vite__mapDeps([4,3])),category:"carousels",description:"Homepage hero carousel + scheduling USP rotator: engine boot, Pause/Play (G12), reduced-motion, loop-clone inerting, randomOrder shuffle",loadStrategy:"idle"},"video-carousel":{load:()=>a(()=>import("./video-carousel-qzLDSkA1.js"),[]),category:"carousels",description:"Video Carousel (patient_video_carousel_section) click surface — opens each card in a focus-trapped youtube-nocookie lightbox shaped to the section orientation (9:16 default, 16:9 optional; no iframe until click) and walks the YouTube thumbnail fallbacks when a poster 404s",loadStrategy:"idle"},"available-appointments":{load:()=>a(()=>import("./available-appointments-Dp0fqTG4.js"),[]),category:"widgets",description:"New Patient Appointments card — POSTs /api/appointments/available-slots (g-path header) and renders slot links",loadStrategy:"idle"},"location-search":{load:()=>a(()=>import("./location-search-DnCuxXhm.js"),__vite__mapDeps([5,6])),category:"widgets",description:"Org hero locations widget — Places autocomplete combobox + geolocate + nearest-locations list (Google loads on first user intent only)",loadStrategy:"lazy"},"scheduling-map":{load:()=>a(()=>import("./scheduling-map-DCHxJnRR.js"),__vite__mapDeps([7,6])),category:"embeds",loadStrategy:"lazy"},"review-archive":{load:()=>a(()=>import("./review-archive-vF6HpH2F.js"),[]),category:"interactive",description:'review_section_layout masonry sizing (grid-row-end spans — LAYOUT-CRITICAL, hence idle) + "Read more reviews" pagination',loadStrategy:"idle"},"article-archive":{load:()=>a(()=>import("./article-archive-BZL3ybxx.js"),[]),category:"interactive",description:'article_section_layout "Load more" pagination (server markup is static until clicked)',loadStrategy:"lazy"},accordion:{load:()=>a(()=>import("./accordion-Cu_ZAXkz.js"),__vite__mapDeps([8,9])),category:"interactive",description:"Disclosure accordion with URL-hash deep links (donor: resources/js/accordion/hash-set.ts)",loadStrategy:"lazy"},"before-after":{load:()=>a(()=>import("./before-after--Q9KueU1.js"),[]),category:"interactive",description:"Before/after comparison slider (donor: resources/js/before-after/slider.ts)",loadStrategy:"lazy"},"faq-accordion":{load:()=>a(()=>import("./faq-accordion-BJdzxY5U.js"),[]),category:"interactive",description:'lake_geneva_faq_section disclosure — reproduces the legacy <accordion :items> widget (accordion.vue) togglePanel: single-open, h3.active toggle, panel inline max-height. Distinct from the smooth-accordion "accordion" module (different DOM/CSS mechanism).',loadStrategy:"idle"},"scroll-to-top":{load:()=>a(()=>import("./scroll-to-top-CCDkD5s-.js"),[]),category:"interactive",description:'content_with_sidebar_section "Back to top" button — visible past scrollY 200, smooth scroll to top (scroll-to-top.vue port)',loadStrategy:"lazy"},"coupon-print":{load:()=>a(()=>import("./coupon-print-CNry4QJM.js"),[]),category:"interactive",description:'Special-offers "Print coupon" button — spawns a PRINT window with the enclosing .special-offer markup (legacy genesis-page.vue triggerPrintCoupon port; [SPECIAL_OFFERS] shortcode anchors). Delegated click on the content_with_sidebar_section .text-wrapper; attached only where offers render.',loadStrategy:"idle"},"personalized-accordion":{load:()=>a(()=>import("./personalized-accordion-ChL3cl6M.js"),__vite__mapDeps([10,9])),category:"interactive",description:"personalized_accordion_section homepage accordion: single-open + URL-hash deep links (reuses accordion/hash-set.ts); toggles is-open on trigger/icon/panel (personalized-accordion-section.vue port)",loadStrategy:"lazy"},"personalized-services":{load:()=>a(()=>import("./personalized-services-BNlCTtK2.js"),[]),category:"interactive",description:"personalized_services_section expanding-cards hover: mouseenter activates the hovered .services-card (flex-grow), mouseleave resets to card 0 (personalized-services-section.vue port)",loadStrategy:"lazy"},"carecredit-calculator":{load:()=>a(()=>import("./carecredit-calculator-BhKEhoYM.js"),[]),category:"interactive",description:"[CARECREDIT_CALCULATOR] emitter behavior — currency validation + carecredit.com payment-calculator new-tab open (carecredit-calculator-form.vue port)",loadStrategy:"lazy"},"orthodontic-calculator":{load:()=>a(()=>import("./orthodontic-calculator-lKhq4h8k.js"),[]),category:"interactive",description:"orthodontic_calculator_section — down-payment/length sliders + ± buttons + monthly-payment recalc (orthodontic-calculator.vue data()/methods port; server renders the settled initial state)",loadStrategy:"lazy"},"curated-appointments":{load:()=>a(()=>import("./curated-appointments-D-Jb4KhN.js"),[]),category:"interactive",description:'curated_three_boxes_section "Next available consultation" box: POST availableAppointmentsAPI (g-path header) + f
2ill the <p> with .next-appointment slot anchors (layout.vue curated branch). idle: the box shows without interaction but the POST stays off the critical path.',loadStrategy:"idle"},"multimedia-embed":{load:()=>a(()=>import("./multimedia-embed-CltdZCRa.js"),__vite__mapDeps([11,12])),category:"embeds",description:"[MULTIMEDIA]/[MAP_WITH_DIRECTIONS] emitter activation — facade->iframe/map swap after window load + intersection; boots Google Maps for kind=map (reserved space, zero CLS)",loadStrategy:"idle"},jotform:{load:()=>a(()=>import("./jotform-CLEBMYqg.js"),[]),category:"embeds",description:"[JOTFORM] emitter activation — replaces the placeholder with the real jsform script after the window load event (legacy loaded regardless of visibility: idle, not lazy)",loadStrategy:"idle"},cherry:{load:()=>a(()=>import("./cherry-BqFU05NK.js"),[]),category:"embeds",description:"[CHERRY] emitter activation — loads the Cherry web font + withcherry.com widget.js and calls _hw('init', …) after the window load event to fill the empty mount points (cherry-widget.vue port; legacy loaded regardless of visibility: idle, not lazy)",loadStrategy:"idle"},"multimedia-accordion":{load:()=>a(()=>import("./multimedia-accordion-BYHcjrvx.js"),__vite__mapDeps([13,9])),category:"interactive",description:"[MULTIMEDIA_ACCORDION] emitter toggle — header click flips the panel with a height/opacity animation and mirrors the open state into the shared URL-hash set (reuses accordion/hash-set.ts); server-rendered closed panel keeps its multimedia embeds dormant until opened (multimedia-accordion.vue port)",loadStrategy:"lazy"},"gallery-lightbox":{load:()=>a(()=>import("./gallery-lightbox-RUwQ62UN.js"),[]),category:"interactive",description:"[GALLERY] emitter click surface — opens the full-size urls in a self-contained overlay (prev/next/esc), replacing vue-easy-lightbox; the settled thumbnail grid is server-rendered (gallery.vue port)",loadStrategy:"lazy"},"booking-wizard":{load:()=>a(()=>import("./booking-wizard-CJOCasKk.js"),__vite__mapDeps([14,15,16,17,18])),category:"booking",description:"Appointment 6-slide momentum-modal wizard (modal brands) — replaces momentum-modal + @headlessui + vue-select + vue-the-mask + a month-grid calendar library; dependency-free calendar skeleton, g-path slot APIs, intercept-friendly submit",loadStrategy:"lazy"},"booking-section":{load:()=>a(()=>import("./booking-section-C8nSfWyH.js"),__vite__mapDeps([19,12,16,17,18])),category:"booking",description:"Booking-page 3-screen widget (use_booking_experience orgs) — patient-type/reason cards + hand-rolled month calendar + slot list OR request preferences, Step N of 7 progressbar, g-path APIs, ?slotStart&reasonId preselect, intercept-friendly submit",loadStrategy:"lazy"},"external-link-a11y":{load:()=>a(()=>import("./external-link-a11y-DtqwVou6.js"),[]),category:"a11y",description:'Legacy external-link-a11y.js port (G15+G14): rel=noopener noreferrer + sr-only "(opens in new window)"/"(PDF, opens in new tab)" cues + data-a11y-cue stamps on external/PDF anchors, generic-link aria-labels; MutationObserver for late content. Mounted on <body>.',loadStrategy:"idle"},"ghost-tracking":{load:()=>a(()=>import("./ghost-tracking-Cwpow2yd.js"),__vite__mapDeps([20,21])),category:"analytics",description:"Global click-to-call/email/SMS tracking (tel/mailto/sms -> trackEvent + Goal 3) + cumulative Engaged-Visitor 5s/90s timer (port of the legacy app.js initClickTracking()+initEngagedVisitor()). idle so it NEVER runs during the CWV measurement window; co-listed on <body> only when app is production (production-guarded). Events buffer in _paq/dataLayer until the interaction-gated container drains them.",loadStrategy:"idle"},forms:{load:()=>a(()=>import("./forms-CDIK643_.js"),__vite__mapDeps([22,15,17,21,23,18])),category:"forms",description:"Generic CMS form (form_section): field validation + tel mask + location combobox + explicit Turnstile + POST /api/form/submit with the g-path header",loadStrategy:"lazy"},"insurance-finder":{load:()=>a(()=>import("./insurance-finder-DiO0dIjp.js"),__vite__mapDeps([24,15,21])),category:"forms",description:"Hero Insurance Finder (form_id=2): provider combobox + client-side matching + success/error states (no network)",loadStrategy:"lazy"},"registration-form":{load:()=>a(()=>import("./registration-form-DrbuMudE.js"),__vite__mapDeps([25,15,17,21,23])),category:"forms",description:"org-112 child/adult registration monoliths (forms 273/274): 19 vue-select comboboxes + date/phone/zip masks + per-field validation + validateAllFields submit gate + selectData merge + explicit Turnstile + POST /api/form/submit",loadStrategy:"lazy"},"careers-form":{load:()=>a(()=>import("./careers-form-C5AxN3qP.js"),__vite__mapDeps([26,15,21,23])),category:"forms",description:"careers_form_section application form: validation/mask/resume checks/Turnstile + multipart POST to /api/forms/careers (tenant-middleware-free — legacy sends NO g-path)",loadStrategy:"lazy"},"careers-locator":{load:()=>a(()=>import("./careers-locator-C_CR_v8j.js"),__vite__mapDeps([27,12,28])),category:"locators",description:"Org-website [CAREERS_LOCATOR]: intersect-gated reveal (legacy lifecycle), search/filter/view-toggle + Google Maps (SDK loads only at reveal)",loadStrategy:"lazy"},"store-locator":{load:()=>a(()=>import("./store-locator-Hy71w2uX.js"),__vite__mapDeps([29,6,28])),category:"locators",description:"Org-website [STORE_LOCATOR] offices-index: server-rendered offices grid + search (distance slider / location autocomplete / practice-type + insurance filters), map SDK loads AFT
2ER window load on intersection (reserved container, zero CLS)",loadStrategy:"lazy"},locator:{load:()=>a(()=>import("./locator-ClMrtJ5O.js"),[]),category:"locators",description:"Stub — store/careers locator list + filters (map itself is the maps module)",loadStrategy:"lazy"},maps:{load:()=>a(()=>import("./maps-DXq0K34V.js"),[]),category:"maps",description:"Stub — Google Maps embeds. lazy-interaction and reserved layout space are non-negotiable",loadStrategy:"lazy-interaction"},video:{load:()=>a(()=>import("./video-CAcBwffu.js"),[]),category:"embeds",description:"Stub — video/360/multimedia iframe facades (server renders the facade, module swaps in the iframe)",loadStrategy:"lazy-interaction"},gtm:{load:()=>a(()=>import("./gtm-BJ7LhD4F.js"),[]),category:"analytics",description:"Stub — Google Tag Manager injection; interaction-gated so it never loads during a Lighthouse pass",loadStrategy:"interaction"},"ghost-metrics":{load:()=>a(()=>import("./ghost-metrics-DDNiF80M.js"),[]),category:"analytics",description:"Stub — Ghost Metrics/Matomo container injection; interaction-gated",loadStrategy:"interaction"},"oral-health-cards":{load:()=>a(()=>import("./oral-health-cards-COAu7X8_.js"),[]),description:"Condition cards expand/collapse, one open at a time",loadStrategy:"lazy"},"oral-health-hero":{load:()=>a(()=>import("./oral-health-hero-DsQD8xv2.js"),[]),description:"Hero image crossfade (replaces the removed Swiper dependency)",loadStrategy:"idle"},"oral-health-multistep":{load:()=>a(()=>import("./oral-health-multistep-BEcn369u.js"),[]),description:"Multistep scroll-scrubbed step stack; rides native scroll, never hijacks it",loadStrategy:"idle"}};function _(c){return d[c]?.loadStrategy??"lazy"}function y(c){return Object.entries(d).filter(([,e])=>e.category===c).map(([e])=>e)}const g=["click","scroll","keydown","mousemove","touchstart"],h=5e3,u={immediate:4,lazy:3,idle:2,"lazy-interaction":1,interaction:0};class f{loadingModules=new Map;loadedModules=new Map;moduleInstances=new WeakMap;debugMode;domObserver=null;intersectionObserver=null;pendingLazyElements=new Map;pendingIdleElements=new Map;pendingInteractionElements=new Map;idleCallbackId=null;idleScheduled=!1;isInitialized=!1;interactionTriggered=!1;interactionCleanup=null;interactionTimeoutId=null;constructor(e=!1){this.debugMode=e}async initialize(){if(this.isInitialized){this.log("loader already initialized");return}this.isInitialized=!0,this.log("initializing…"),this.createIntersectionObserver(),this.startDomObserving(),await this.discoverAndCategorize(),this.processLazyModules(),this.scheduleIdleModules(),this.log("initialization complete")}createIntersectionObserver(){this.intersectionObserver?.disconnect(),this.intersectionObserver=new IntersectionObserver(e=>this.handleIntersection(e),{root:null,rootMargin:"0px",threshold:0})}handleIntersection(e){for(const t of e){if(!t.isIntersecting)continue;const o=t.target,i=this.pendingLazyElements.get(o);!i||i.length===0||(this.log(`viewport entry -> loading: ${i.join(", ")}`),this.intersectionObserver?.unobserve(o),this.pendingLazyElements.delete(o),this.loadAndInitializeModules(o,i))}}async discoverAndCategorize(){const e=document.querySelectorAll("[data-module]:not([data-module-loaded])"),t=[],o=[];e.forEach(i=>{const r=i,n=this.claim(r);if(n)switch(this.effectiveStrategyFor(r,n.moduleNames)){case"immediate":t.push(n);break;case"lazy":this.pendingLazyElements.set(r,n.moduleNames);break;case"idle":this.pendingIdleElements.set(r,n.moduleNames);break;case"lazy-interaction":o.push(n);break;case"interaction":this.pendingInteractionElements.set(r,n.moduleNames);break}}),this.log(`discovered — immediate: ${t.length}, lazy: ${this.pendingLazyElements.size}, idle: ${this.pendingIdleElements.size}, lazy-interaction: ${o.length}, interaction: ${this.pendingInteractionElements.size}`),o.length>0&&await this.detectLazyInteractionStrategy(o),this.pendingInteractionElements.size>0&&this.armInteractionListeners(),await this.processImmediateElements(t)}claim(e){const t=e.getAttribute("data-module");if(!t)return null;const o=t.trim().split(/\s+/).filter(i=>i&&d[i]);return o.length===0?null:(e.setAttribute("data-module-loaded","pending"),{element:e,moduleNames:o})}effectiveStrategyFor(e,t){const o=e.getAttribute("data-load-strategy");if(o&&o in u)return o;let i="interaction";for(const r of t){const n=_(r);if(u[n]>u[i]&&(i=n),i==="immediate")break}return i}detectLazyInteractionStrategy(e){return new Promise(t=>{setTimeout(()=>{let o=0;const i=new IntersectionObserver(r=>{for(const n of r){const s=n.target,l=e.find(p=>p.element===s);l&&(n.isIntersecting?(this.log(`lazy-interaction IN viewport -> interaction: ${l.moduleNames.join(", ")}`),this.pendingInteractionElements.set(s,l.moduleNames),this.interactionTriggered?this.processInteractionModules():this.armInteractionListeners()):(this.log(`lazy-interaction BELOW fold -> lazy: ${l.moduleNames.join(", ")}`),this.pendingLazyElements.set(s,l.moduleNames),this.intersectionObserver?.observe(s)),i.unobserve(s),o+=1,o===e.length&&(i.disconnect(),t()))}},{rootMargin:"0px",threshold:0});e.forEach(({element:r})=>i.observe(r))},200)})}processImmediateElements(e){return e.length===0?Promise.resolve():(this.log(`loading ${e.length}
2 immediate element(s)…`),new Promise(t=>{requestAnimationFrame(()=>{(async()=>{const o=new Set;e.forEach(({moduleNames:i})=>i.forEach(r=>o.add(r))),await this.loadModules([...o]);for(const{element:i,moduleNames:r}of e)await this.initializeElement(i,r);t()})()})}))}processLazyModules(){this.pendingLazyElements.size!==0&&(this.log(`observing ${this.pendingLazyElements.size} lazy element(s)…`),this.pendingLazyElements.forEach((e,t)=>{this.intersectionObserver?.observe(t)}))}scheduleIdleModules(){if(this.pendingIdleElements.size===0||this.idleScheduled)return;this.idleScheduled=!0;const e=async t=>{for(this.idleScheduled=!1;this.pendingIdleElements.size>0;){if(t?t.timeRemaining()<10:!1){this.idleScheduled=!0,this.scheduleIdleCallback(e);return}const i=this.pendingIdleElements.entries().next();if(i.done)break;const[r,n]=i.value;this.pendingIdleElements.delete(r),this.log(`idle -> loading: ${n.join(", ")}`),await this.loadAndInitializeModules(r,n)}};this.scheduleIdleCallback(e)}scheduleIdleCallback(e){typeof window.requestIdleCallback=="function"?this.idleCallbackId=window.requestIdleCallback(t=>{e(t)},{timeout:2e3}):document.readyState==="complete"?setTimeout(()=>{e()},1):window.addEventListener("load",()=>setTimeout(()=>{e()},100),{once:!0})}armInteractionListeners(){if(this.interactionTriggered||this.interactionCleanup)return;this.log(`arming interaction listeners for ${this.pendingInteractionElements.size} element(s)…`);const e=()=>{this.interactionTriggered||(this.interactionTriggered=!0,this.log("user interaction detected — loading interaction modules…"),this.interactionCleanup?.(),this.interactionCleanup=null,this.processInteractionModules())};g.forEach(t=>{window.addEventListener(t,e,{passive:!0})}),this.interactionCleanup=()=>{g.forEach(t=>{window.removeEventListener(t,e)}),this.interactionTimeoutId&&(clearTimeout(this.interactionTimeoutId),this.interactionTimeoutId=null)},this.interactionTimeoutId=setTimeout(()=>{this.interactionTriggered||(this.log(`interaction fallback (${h}ms) — loading…`),e())},h)}async processInteractionModules(){if(this.pendingInteractionElements.size===0)return;const e=[...this.pendingInteractionElements.entries()];this.pendingInteractionElements.clear();for(const[t,o]of e)this.log(`interaction -> loading: ${o.join(", ")}`),await this.loadAndInitializeModules(t,o)}async loadAndInitializeModules(e,t){try{await this.loadModules(t),await this.initializeElement(e,t)}catch(o){this.error(`failed to load/initialize: ${t.join(", ")}`,o)}}async loadModule(e){if(this.loadedModules.has(e))return this.loadedModules.get(e)??null;const t=this.loadingModules.get(e);if(t)return t.promise;const o=d[e];if(!o)return this.error(`unknown module: ${e}`),null;this.log(`loading module: ${e} [${o.category??"uncategorized"}]`);const i=o.load().then(r=>{const n=r;return this.loadedModules.set(e,n),this.loadingModules.delete(e),typeof n.autoInit=="function"&&(this.log(`auto-initializing: ${e}`),n.autoInit()),this.dispatchModuleEvent("module-loaded",{moduleName:e,module:n}),n}).catch(r=>{throw this.error(`failed to load module: ${e}`,r),this.loadingModules.delete(e),this.dispatchModuleEvent("module-error",{moduleName:e,error:r}),r});return this.loadingModules.set(e,{promise:i,status:"loading"}),i}async loadModules(e){const t=[...new Set(e)];await Promise.all(t.map(o=>this.loadModule(o)))}async initializeElement(e,t){if(e.getAttribute("data-module-loaded")==="true")return;const o=e.getAttribute("data-module-config");let i={};if(o)try{i=JSON.parse(o)}catch(r){this.error("invalid data-module-config JSON:",r,e)}for(const r of t){if(d[r]?.category==="maps"){this.log(`skipping per-element init for maps module: ${r}`);continue}const s=this.loadedModules.get(r);if(!s){this.error(`module not loaded: ${r}`);continue}let l=null;typeof s.default=="function"?l=new s.default:s.default&&typeof s.default.initialize=="function"?l=s.default:typeof s.initialize=="function"&&(l=s),l?.initialize&&(this.log(`initializing element with ${r}`),await l.initialize(e,i),this.moduleInstances.set(e,l),this.dispatchModuleEvent("module-initialized",{moduleName:r,element:e,config:i}))}e.setAttribute("data-module-loaded","true"),e.setAttribute("data-module-initialized","true")}startDomObserving(){this.domObserver||(this.domObserver=new MutationObserver(e=>{let t=!1;
2for(const o of e)if(o.addedNodes.forEach(i=>{i instanceof Element&&(i.hasAttribute("data-module")&&!i.hasAttribute("data-module-loaded")||i.querySelector("[data-module]:not([data-module-loaded])"))&&(t=!0)}),t)break;t&&(this.log("new [data-module] elements detected"),this.handleNewElements())}),this.domObserver.observe(document.body,{childList:!0,subtree:!0}))}async handleNewElements(){const e=document.querySelectorAll("[data-module]:not([data-module-loaded])"),t=[];e.forEach(o=>{const i=o,r=this.claim(i);if(r)switch(this.effectiveStrategyFor(i,r.moduleNames)){case"immediate":this.loadAndInitializeModules(i,r.moduleNames);break;case"lazy":this.pendingLazyElements.set(i,r.moduleNames),this.intersectionObserver?.observe(i);break;case"idle":this.pendingIdleElements.set(i,r.moduleNames),this.scheduleIdleModules();break;case"lazy-interaction":t.push(r);break;case"interaction":this.interactionTriggered?this.loadAndInitializeModules(i,r.moduleNames):(this.pendingInteractionElements.set(i,r.moduleNames),this.armInteractionListeners());break}}),t.length>0&&await this.detectLazyInteractionStrategy(t)}stopObserving(){this.domObserver?.disconnect(),this.domObserver=null,this.intersectionObserver?.disconnect(),this.intersectionObserver=null,this.idleCallbackId!==null&&"cancelIdleCallback"in window&&(window.cancelIdleCallback(this.idleCallbackId),this.idleCallbackId=null),this.interactionCleanup?.(),this.interactionCleanup=null}destroyElement(e){const t=this.moduleInstances.get(e);t?.destroy&&(t.destroy(),this.moduleInstances.delete(e),e.removeAttribute("data-module-initialized"),e.removeAttribute("data-module-loaded"))}async refreshElement(e,t){const o=e.getAttribute("data-module");if(!o)return;const i=o.trim().split(/\s+/).filter(Boolean),r=this.moduleInstances.get(e);if(r?.refresh){r.refresh(t);return}this.destroyElement(e),e.removeAttribute("data-module-initialized"),e.removeAttribute("data-module-loaded"),t!==void 0&&e.setAttribute("data-module-config",JSON.stringify(t)),await this.loadAndInitializeModules(e,i)}async reset(){this.log("resetting…");for(const e of[this.pendingLazyElements,this.pendingIdleElements,this.pendingInteractionElements])e.forEach((t,o)=>o.removeAttribute("data-module-loaded")),e.clear();this.interactionTriggered=!1,this.interactionCleanup?.(),this.interactionCleanup=null,await this.discoverAndCategorize(),this.processLazyModules(),this.scheduleIdleModules()}getLoadedModules(){return[...this.loadedModules.keys()]}getModulesByCategory(e){return y(e)}log(...e){this.debugMode&&console.log("[next:loader]",...e)}error(...e){console.error("[next:loader]",...e)}dispatchModuleEvent(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}}const v=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname.endsWith(".test")),m=new f(v);async function b(){await m.initialize()}typeof window<"u"&&(window.addEventListener("next:content-rendered",()=>{m.reset()}),window.nextLoader=m);export{f as DynamicModuleLoader,b as initializeLoader,m as loader,d as moduleRegistry};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.