@hortonstudio/main 1.9.28 → 1.9.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/assets/{hs-animations-tvD4W7u0.js → hs-animations-BhV44nJX.js} +3 -3
  2. package/dist/assets/hs-animations-BhV44nJX.js.br +0 -0
  3. package/dist/assets/hs-animations-BhV44nJX.js.gz +0 -0
  4. package/dist/assets/{hs-animations-tvD4W7u0.js.map → hs-animations-BhV44nJX.js.map} +1 -1
  5. package/dist/assets/{hs-counter-DmspKHOV.js → hs-counter-DYRsLBOF.js} +2 -2
  6. package/dist/assets/hs-counter-DYRsLBOF.js.br +0 -0
  7. package/dist/assets/hs-counter-DYRsLBOF.js.gz +0 -0
  8. package/dist/assets/{hs-counter-DmspKHOV.js.map → hs-counter-DYRsLBOF.js.map} +1 -1
  9. package/dist/assets/hs-default-DL0-aN98.js +2 -0
  10. package/dist/assets/hs-default-DL0-aN98.js.br +0 -0
  11. package/dist/assets/hs-default-DL0-aN98.js.gz +0 -0
  12. package/dist/assets/hs-default-DL0-aN98.js.map +1 -0
  13. package/dist/assets/{hs-marquee-Dwenaw7L.js → hs-marquee-CckKuWTN.js} +2 -2
  14. package/dist/assets/hs-marquee-CckKuWTN.js.br +0 -0
  15. package/dist/assets/hs-marquee-CckKuWTN.js.gz +0 -0
  16. package/dist/assets/{hs-marquee-Dwenaw7L.js.map → hs-marquee-CckKuWTN.js.map} +1 -1
  17. package/dist/assets/hs-normalize-D1O9jDXy.js +2 -0
  18. package/dist/assets/hs-normalize-D1O9jDXy.js.br +0 -0
  19. package/dist/assets/hs-normalize-D1O9jDXy.js.gz +0 -0
  20. package/dist/assets/hs-normalize-D1O9jDXy.js.map +1 -0
  21. package/dist/assets/hs-utils-B_WKwhoM.js +2 -0
  22. package/dist/assets/hs-utils-B_WKwhoM.js.br +0 -0
  23. package/dist/assets/hs-utils-B_WKwhoM.js.gz +0 -0
  24. package/dist/assets/hs-utils-B_WKwhoM.js.map +1 -0
  25. package/dist/main.js +2 -2
  26. package/dist/main.js.br +0 -0
  27. package/dist/main.js.gz +0 -0
  28. package/package.json +1 -1
  29. package/dist/assets/hs-animations-tvD4W7u0.js.br +0 -0
  30. package/dist/assets/hs-animations-tvD4W7u0.js.gz +0 -0
  31. package/dist/assets/hs-counter-DmspKHOV.js.br +0 -0
  32. package/dist/assets/hs-counter-DmspKHOV.js.gz +0 -0
  33. package/dist/assets/hs-default-CkhI97Bk.js +0 -2
  34. package/dist/assets/hs-default-CkhI97Bk.js.br +0 -0
  35. package/dist/assets/hs-default-CkhI97Bk.js.gz +0 -0
  36. package/dist/assets/hs-default-CkhI97Bk.js.map +0 -1
  37. package/dist/assets/hs-marquee-Dwenaw7L.js.br +0 -0
  38. package/dist/assets/hs-marquee-Dwenaw7L.js.gz +0 -0
  39. package/dist/assets/hs-normalize-B6jxy2Yc.js +0 -2
  40. package/dist/assets/hs-normalize-B6jxy2Yc.js.br +0 -0
  41. package/dist/assets/hs-normalize-B6jxy2Yc.js.gz +0 -0
  42. package/dist/assets/hs-normalize-B6jxy2Yc.js.map +0 -1
  43. package/dist/assets/hs-utils-CNwAFmmK.js +0 -2
  44. package/dist/assets/hs-utils-CNwAFmmK.js.br +0 -0
  45. package/dist/assets/hs-utils-CNwAFmmK.js.gz +0 -0
  46. package/dist/assets/hs-utils-CNwAFmmK.js.map +0 -1
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/hs-counter-DmspKHOV.js","assets/hs-utils-CNwAFmmK.js","assets/hs-marquee-Dwenaw7L.js"])))=>i.map(i=>d[i]);
2
- import{_ as e}from"../main.js";import{k as t}from"./hs-utils-CNwAFmmK.js";const r=[{name:"counter",selector:'[data-hs-anim="counter"]',import:()=>e(()=>import("./hs-counter-DmspKHOV.js"),__vite__mapDeps([0,1]))},{name:"marquee",selector:'[data-hs-marquee="wrapper"]',import:()=>e(()=>import("./hs-marquee-Dwenaw7L.js"),__vite__mapDeps([2,1]))}],a=(()=>{const e=r.filter(e=>document.querySelector(e.selector)).map(e=>e.import().catch(t=>(console.error(`[animations] Failed to preload ${e.name}:`,t),null)));return Promise.allSettled(e)})();async function o(){await a;const e=t(r),{loaded:o}=await e.scan();return{result:`animations initialized (${o.length} active)`,rescan:e.scan,destroy:e.destroy}}export{o as init};
3
- //# sourceMappingURL=hs-animations-tvD4W7u0.js.map
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/hs-counter-DYRsLBOF.js","assets/hs-utils-B_WKwhoM.js","assets/hs-marquee-CckKuWTN.js"])))=>i.map(i=>d[i]);
2
+ import{_ as e}from"../main.js";import{k as t}from"./hs-utils-B_WKwhoM.js";const r=[{name:"counter",selector:'[data-hs-anim="counter"]',import:()=>e(()=>import("./hs-counter-DYRsLBOF.js"),__vite__mapDeps([0,1]))},{name:"marquee",selector:'[data-hs-marquee="wrapper"]',import:()=>e(()=>import("./hs-marquee-CckKuWTN.js"),__vite__mapDeps([2,1]))}],a=(()=>{const e=r.filter(e=>document.querySelector(e.selector)).map(e=>e.import().catch(t=>(console.error(`[animations] Failed to preload ${e.name}:`,t),null)));return Promise.allSettled(e)})();async function o(){await a;const e=t(r),{loaded:o}=await e.scan();return{result:`animations initialized (${o.length} active)`,rescan:e.scan,destroy:e.destroy}}export{o as init};
3
+ //# sourceMappingURL=hs-animations-BhV44nJX.js.map
@@ -1 +1 @@
1
- {"version":3,"mappings":";0EAiCA,MAAMA,EAA4C,CAChD,CACEC,KAAM,UACNC,SAAU,2BACVC,OAAQ,UAAMA,OAAO,4BAAwBC,yBAE/C,CACEH,KAAM,UACNC,SAAU,8BACVC,OAAQ,UAAMA,OAAO,4BAAwBC,0BAQ3CC,QACJ,MAKMC,EALmBN,EAAmBO,OAAQC,GAClDC,SAASC,cAAcF,EAAON,WAISS,IAAKH,GAC5CA,EAAOL,SAASS,MAAOC,IACrBC,QAAQD,MAAM,kCAAkCL,EAAOP,QAASY,GACzD,QAIX,OAAOE,QAAQC,WAAWV,EAC5B,KAEAW,eAAsBC,UAEdb,EAGN,MAAMc,EAAeC,EAAmBpB,IAClCqB,OAAEA,SAAiBF,EAAaG,OAEtC,MAAO,CACLC,OAAQ,2BAA2BF,EAAOG,iBAC1CC,OAAQN,EAAaG,KACrBI,QAASP,EAAaO,QAE1B","names":["ANIMATION_REGISTRY","name","selector","import","__VITE_PRELOAD__","preloadAnimations","preloadPromises","filter","module","document","querySelector","map","catch","error","console","Promise","allSettled","async","init","orchestrator","createOrchestrator","loaded","scan","result","length","rescan","destroy"],"ignoreList":[],"sources":["../../src/animations/animations.ts"],"sourcesContent":["/**\n * Animations Orchestrator\n *\n * Conditionally loads animation modules based on DOM presence.\n * Uses registry pattern for scalable animation management.\n *\n * Features:\n * - Self-registering animation system (add new animations in one line)\n * - Dynamic imports for code-splitting\n * - Prevents duplicate initialization\n * - SPA-friendly rescan() method\n * - Centralized destroy cleanup\n * - Webflow IX3 coordination with timeout fallback\n *\n * Architecture:\n * - Registry-based discovery (scales to 100s of animations)\n * - Scans DOM for registered selectors\n * - Dynamically imports only the animations found\n * - Waits for Webflow IX3 before initializing (prevents FOUC)\n * - Removes transition wrapper on IX3 timeout (graceful degradation)\n * - Exposes rescan() for SPA page transitions\n *\n * Adding new animations:\n * 1. Add entry to ANIMATION_REGISTRY below\n * 2. That's it - orchestrator handles the rest\n */\n\nimport { createOrchestrator, type ModuleRegistryEntry } from '@utils';\n\n/**\n * Animation Registry\n * Add new animations here - one line per animation\n */\nconst ANIMATION_REGISTRY: ModuleRegistryEntry[] = [\n {\n name: 'counter',\n selector: '[data-hs-anim=\"counter\"]',\n import: () => import('./functions/counter.ts'),\n },\n {\n name: 'marquee',\n selector: '[data-hs-marquee=\"wrapper\"]',\n import: () => import('./functions/marquee.ts'),\n },\n // Add more animations here:\n // { name: 'hamburger', selector: '[data-hs-hamburger=\"squeeze\"]', import: () => import('./functions/hamburger.ts') },\n];\n\n// Pre-download animation modules as soon as this file loads (before init is called)\n// This allows parallel downloads while still respecting IX3 timing for initialization\nconst preloadAnimations = (() => {\n const modulesToPreload = ANIMATION_REGISTRY.filter((module) =>\n document.querySelector(module.selector)\n );\n\n // Download all found modules in parallel\n const preloadPromises = modulesToPreload.map((module) =>\n module.import().catch((error) => {\n console.error(`[animations] Failed to preload ${module.name}:`, error);\n return null;\n })\n );\n\n return Promise.allSettled(preloadPromises);\n})();\n\nexport async function init() {\n // Wait for preloading to complete (modules are already downloaded)\n await preloadAnimations;\n\n // Initialize all animations\n const orchestrator = createOrchestrator(ANIMATION_REGISTRY);\n const { loaded } = await orchestrator.scan();\n\n return {\n result: `animations initialized (${loaded.length} active)`,\n rescan: orchestrator.scan,\n destroy: orchestrator.destroy,\n };\n}\n"],"file":"hs-animations-tvD4W7u0.js"}
1
+ {"version":3,"mappings":";0EAiCA,MAAMA,EAA4C,CAChD,CACEC,KAAM,UACNC,SAAU,2BACVC,OAAQ,UAAMA,OAAO,4BAAwBC,yBAE/C,CACEH,KAAM,UACNC,SAAU,8BACVC,OAAQ,UAAMA,OAAO,4BAAwBC,0BAQ3CC,QACJ,MAKMC,EALmBN,EAAmBO,OAAQC,GAClDC,SAASC,cAAcF,EAAON,WAISS,IAAKH,GAC5CA,EAAOL,SAASS,MAAOC,IACrBC,QAAQD,MAAM,kCAAkCL,EAAOP,QAASY,GACzD,QAIX,OAAOE,QAAQC,WAAWV,EAC5B,KAEAW,eAAsBC,UAEdb,EAGN,MAAMc,EAAeC,EAAmBpB,IAClCqB,OAAEA,SAAiBF,EAAaG,OAEtC,MAAO,CACLC,OAAQ,2BAA2BF,EAAOG,iBAC1CC,OAAQN,EAAaG,KACrBI,QAASP,EAAaO,QAE1B","names":["ANIMATION_REGISTRY","name","selector","import","__VITE_PRELOAD__","preloadAnimations","preloadPromises","filter","module","document","querySelector","map","catch","error","console","Promise","allSettled","async","init","orchestrator","createOrchestrator","loaded","scan","result","length","rescan","destroy"],"ignoreList":[],"sources":["../../src/animations/animations.ts"],"sourcesContent":["/**\n * Animations Orchestrator\n *\n * Conditionally loads animation modules based on DOM presence.\n * Uses registry pattern for scalable animation management.\n *\n * Features:\n * - Self-registering animation system (add new animations in one line)\n * - Dynamic imports for code-splitting\n * - Prevents duplicate initialization\n * - SPA-friendly rescan() method\n * - Centralized destroy cleanup\n * - Webflow IX3 coordination with timeout fallback\n *\n * Architecture:\n * - Registry-based discovery (scales to 100s of animations)\n * - Scans DOM for registered selectors\n * - Dynamically imports only the animations found\n * - Waits for Webflow IX3 before initializing (prevents FOUC)\n * - Removes transition wrapper on IX3 timeout (graceful degradation)\n * - Exposes rescan() for SPA page transitions\n *\n * Adding new animations:\n * 1. Add entry to ANIMATION_REGISTRY below\n * 2. That's it - orchestrator handles the rest\n */\n\nimport { createOrchestrator, type ModuleRegistryEntry } from '@utils';\n\n/**\n * Animation Registry\n * Add new animations here - one line per animation\n */\nconst ANIMATION_REGISTRY: ModuleRegistryEntry[] = [\n {\n name: 'counter',\n selector: '[data-hs-anim=\"counter\"]',\n import: () => import('./functions/counter.ts'),\n },\n {\n name: 'marquee',\n selector: '[data-hs-marquee=\"wrapper\"]',\n import: () => import('./functions/marquee.ts'),\n },\n // Add more animations here:\n // { name: 'hamburger', selector: '[data-hs-hamburger=\"squeeze\"]', import: () => import('./functions/hamburger.ts') },\n];\n\n// Pre-download animation modules as soon as this file loads (before init is called)\n// This allows parallel downloads while still respecting IX3 timing for initialization\nconst preloadAnimations = (() => {\n const modulesToPreload = ANIMATION_REGISTRY.filter((module) =>\n document.querySelector(module.selector)\n );\n\n // Download all found modules in parallel\n const preloadPromises = modulesToPreload.map((module) =>\n module.import().catch((error) => {\n console.error(`[animations] Failed to preload ${module.name}:`, error);\n return null;\n })\n );\n\n return Promise.allSettled(preloadPromises);\n})();\n\nexport async function init() {\n // Wait for preloading to complete (modules are already downloaded)\n await preloadAnimations;\n\n // Initialize all animations\n const orchestrator = createOrchestrator(ANIMATION_REGISTRY);\n const { loaded } = await orchestrator.scan();\n\n return {\n result: `animations initialized (${loaded.length} active)`,\n rescan: orchestrator.scan,\n destroy: orchestrator.destroy,\n };\n}\n"],"file":"hs-animations-BhV44nJX.js"}
@@ -1,2 +1,2 @@
1
- import{p as e,d as t,j as r}from"./hs-utils-CNwAFmmK.js";const n='[data-hs-anim="counter"]';async function o(){if(e())return{result:"counter skipped - prefers-reduced-motion enabled"};const o=t("counter");if(!o)return{result:"counter skipped - GSAP not loaded"};const{gsap:i,ScrollTrigger:s}=o;if(!s)return r("counter",["ScrollTrigger"],"error"),{result:"counter skipped - ScrollTrigger not loaded"};i.registerPlugin(s);const l=Array.from(document.querySelectorAll(n)),u={timelines:[],scrollTriggers:[]};return l.forEach(e=>{const t=e,r=t.textContent?.trim()||"",n=function(e){const t=e.replace(/,/g,"").match(/([^\d.]*)(\d*\.?\d+)(.*)/);return t?{prefix:t[1]||"",number:parseFloat(t[2]),suffix:t[3]||""}:{prefix:"",number:0,suffix:""}}(r),o=(n.number.toString().split(".")[1]||"").length,l=r.includes(",");t.setAttribute("aria-live","polite"),t.setAttribute("aria-atomic","true");const c={value:0},a=i.timeline({paused:!0});a.to(c,{value:n.number,duration:3,ease:"power4.out",onUpdate:function(){const e=c.value;let r=o>0?e.toFixed(o):Math.round(e).toString();l&&(r=r.replace(/\B(?=(\d{3})+(?!\d))/g,",")),t.textContent=`${n.prefix}${r}${n.suffix}`},onComplete:function(){t.textContent=r}}),u.timelines.push(a);const g=s.create({trigger:e,start:"top bottom",once:!0,onEnter:()=>{a.play()}});u.scrollTriggers.push(g)}),{result:`counter initialized (${l.length} instances)`,destroy:()=>{u.timelines.forEach(e=>{e&&e.kill()}),u.scrollTriggers.forEach(e=>{e&&e.kill()}),u.timelines.length=0,u.scrollTriggers.length=0}}}export{o as init};
2
- //# sourceMappingURL=hs-counter-DmspKHOV.js.map
1
+ import{p as e,d as t,j as r}from"./hs-utils-B_WKwhoM.js";const n='[data-hs-anim="counter"]';async function o(){if(e())return{result:"counter skipped - prefers-reduced-motion enabled"};const o=t("counter");if(!o)return{result:"counter skipped - GSAP not loaded"};const{gsap:i,ScrollTrigger:s}=o;if(!s)return r("counter",["ScrollTrigger"],"error"),{result:"counter skipped - ScrollTrigger not loaded"};i.registerPlugin(s);const l=Array.from(document.querySelectorAll(n)),u={timelines:[],scrollTriggers:[]};return l.forEach(e=>{const t=e,r=t.textContent?.trim()||"",n=function(e){const t=e.replace(/,/g,"").match(/([^\d.]*)(\d*\.?\d+)(.*)/);return t?{prefix:t[1]||"",number:parseFloat(t[2]),suffix:t[3]||""}:{prefix:"",number:0,suffix:""}}(r),o=(n.number.toString().split(".")[1]||"").length,l=r.includes(",");t.setAttribute("aria-live","polite"),t.setAttribute("aria-atomic","true");const c={value:0},a=i.timeline({paused:!0});a.to(c,{value:n.number,duration:3,ease:"power4.out",onUpdate:function(){const e=c.value;let r=o>0?e.toFixed(o):Math.round(e).toString();l&&(r=r.replace(/\B(?=(\d{3})+(?!\d))/g,",")),t.textContent=`${n.prefix}${r}${n.suffix}`},onComplete:function(){t.textContent=r}}),u.timelines.push(a);const g=s.create({trigger:e,start:"top bottom",once:!0,onEnter:()=>{a.play()}});u.scrollTriggers.push(g)}),{result:`counter initialized (${l.length} instances)`,destroy:()=>{u.timelines.forEach(e=>{e&&e.kill()}),u.scrollTriggers.forEach(e=>{e&&e.kill()}),u.timelines.length=0,u.scrollTriggers.length=0}}}export{o as init};
2
+ //# sourceMappingURL=hs-counter-DYRsLBOF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hs-counter-DmspKHOV.js","sources":["../../src/animations/functions/counter.ts"],"sourcesContent":["/**\n * Counter Module\n *\n * GSAP-powered number counter that triggers on scroll into viewport.\n * Supports decimals, prefixes, and suffixes with smooth easing.\n *\n * Usage:\n * <span data-hs-anim=\"counter\">1000</span>\n *\n * Features:\n * - Auto-detects decimals, prefixes, suffixes\n * - Respects prefers-reduced-motion\n * - Triggers on scroll into viewport\n * - Accessible with aria-live announcements\n */\n\nimport { getGsap, prefersReducedMotion, warnMissingDependencies, type GsapTimeline } from '@utils';\n\n// Selectors\nconst SELECTORS = {\n counter: '[data-hs-anim=\"counter\"]',\n};\n\nexport async function init() {\n // Skip if user prefers reduced motion\n if (prefersReducedMotion()) {\n return { result: 'counter skipped - prefers-reduced-motion enabled' };\n }\n\n const gsapLib = getGsap('counter');\n if (!gsapLib) {\n return { result: 'counter skipped - GSAP not loaded' };\n }\n\n const { gsap, ScrollTrigger } = gsapLib;\n\n // ScrollTrigger is required for scroll-based counter animations\n if (!ScrollTrigger) {\n warnMissingDependencies('counter', ['ScrollTrigger'], 'error');\n return { result: 'counter skipped - ScrollTrigger not loaded' };\n }\n\n gsap.registerPlugin(ScrollTrigger);\n\n const counters = Array.from(document.querySelectorAll(SELECTORS.counter));\n const cleanup = {\n timelines: [] as GsapTimeline[],\n scrollTriggers: [] as any[],\n };\n\n function parseText(text: string) {\n // Remove commas from the text before parsing\n const cleanText = text.replace(/,/g, '');\n const match = cleanText.match(/([^\\d.]*)(\\d*\\.?\\d+)(.*)/);\n if (!match) {\n return { prefix: '', number: 0, suffix: '' };\n }\n return {\n prefix: match[1] || '',\n number: parseFloat(match[2]),\n suffix: match[3] || '',\n };\n }\n\n counters.forEach((counter) => {\n const htmlElement = counter as HTMLElement;\n const originalText = htmlElement.textContent?.trim() || '';\n const parsed = parseText(originalText);\n const decimals = (parsed.number.toString().split('.')[1] || '').length;\n\n // Check if original had commas (for numbers >= 1000)\n const hasCommas = originalText.includes(',');\n\n // Add accessibility attributes\n htmlElement.setAttribute('aria-live', 'polite');\n htmlElement.setAttribute('aria-atomic', 'true');\n\n // Create a temporary object to animate\n const counterObj = { value: 0 };\n\n // Create GSAP animation\n const tl = gsap.timeline({ paused: true });\n\n tl.to(counterObj, {\n value: parsed.number,\n duration: 3,\n ease: 'power4.out',\n onUpdate: function () {\n const currentValue = counterObj.value;\n let formatted =\n decimals > 0 ? currentValue.toFixed(decimals) : Math.round(currentValue).toString();\n\n // Add commas if original had them\n if (hasCommas) {\n formatted = formatted.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n htmlElement.textContent = `${parsed.prefix}${formatted}${parsed.suffix}`;\n },\n onComplete: function () {\n // Set final exact value\n htmlElement.textContent = originalText;\n },\n });\n\n cleanup.timelines.push(tl);\n\n // Use ScrollTrigger to play animation on scroll into view\n const st = ScrollTrigger.create({\n trigger: counter,\n start: 'top bottom',\n once: true,\n onEnter: () => {\n tl.play();\n },\n });\n cleanup.scrollTriggers.push(st);\n });\n\n return {\n result: `counter initialized (${counters.length} instances)`,\n destroy: () => {\n // Kill all timelines\n cleanup.timelines.forEach((tl) => {\n if (tl) tl.kill();\n });\n\n // Kill all scroll triggers\n cleanup.scrollTriggers.forEach((st) => {\n if (st) (st as any).kill();\n });\n\n // Clear arrays\n cleanup.timelines.length = 0;\n cleanup.scrollTriggers.length = 0;\n },\n };\n}\n"],"names":["SELECTORS","async","init","prefersReducedMotion","result","gsapLib","getGsap","gsap","ScrollTrigger","warnMissingDependencies","registerPlugin","counters","Array","from","document","querySelectorAll","cleanup","timelines","scrollTriggers","forEach","counter","htmlElement","originalText","textContent","trim","parsed","text","match","replace","prefix","number","parseFloat","suffix","parseText","decimals","toString","split","length","hasCommas","includes","setAttribute","counterObj","value","tl","timeline","paused","to","duration","ease","onUpdate","currentValue","formatted","toFixed","Math","round","onComplete","push","st","create","trigger","start","once","onEnter","play","destroy","kill"],"mappings":"yDAmBA,MAAMA,EACK,2BAGXC,eAAsBC,IAEpB,GAAIC,IACF,MAAO,CAAEC,OAAQ,oDAGnB,MAAMC,EAAUC,EAAQ,WACxB,IAAKD,EACH,MAAO,CAAED,OAAQ,qCAGnB,MAAMG,KAAEA,EAAAC,cAAMA,GAAkBH,EAGhC,IAAKG,EAEH,OADAC,EAAwB,UAAW,CAAC,iBAAkB,SAC/C,CAAEL,OAAQ,8CAGnBG,EAAKG,eAAeF,GAEpB,MAAMG,EAAWC,MAAMC,KAAKC,SAASC,iBAAiBf,IAChDgB,EAAU,CACdC,UAAW,GACXC,eAAgB,IAwElB,OAvDAP,EAASQ,QAASC,IAChB,MAAMC,EAAcD,EACdE,EAAeD,EAAYE,aAAaC,QAAU,GAClDC,EAjBR,SAAmBC,GAEjB,MACMC,EADYD,EAAKE,QAAQ,KAAM,IACbD,MAAM,4BAC9B,OAAKA,EAGE,CACLE,OAAQF,EAAM,IAAM,GACpBG,OAAQC,WAAWJ,EAAM,IACzBK,OAAQL,EAAM,IAAM,IALb,CAAEE,OAAQ,GAAIC,OAAQ,EAAGE,OAAQ,GAO5C,CAKiBC,CAAUX,GACnBY,GAAYT,EAAOK,OAAOK,WAAWC,MAAM,KAAK,IAAM,IAAIC,OAG1DC,EAAYhB,EAAaiB,SAAS,KAGxClB,EAAYmB,aAAa,YAAa,UACtCnB,EAAYmB,aAAa,cAAe,QAGxC,MAAMC,EAAa,CAAEC,MAAO,GAGtBC,EAAKpC,EAAKqC,SAAS,CAAEC,QAAQ,IAEnCF,EAAGG,GAAGL,EAAY,CAChBC,MAAOjB,EAAOK,OACdiB,SAAU,EACVC,KAAM,aACNC,SAAU,WACR,MAAMC,EAAeT,EAAWC,MAChC,IAAIS,EACFjB,EAAW,EAAIgB,EAAaE,QAAQlB,GAAYmB,KAAKC,MAAMJ,GAAcf,WAGvEG,IACFa,EAAYA,EAAUvB,QAAQ,wBAAyB,MAGzDP,EAAYE,YAAc,GAAGE,EAAOI,SAASsB,IAAY1B,EAAOO,QAClE,EACAuB,WAAY,WAEVlC,EAAYE,YAAcD,CAC5B,IAGFN,EAAQC,UAAUuC,KAAKb,GAGvB,MAAMc,EAAKjD,EAAckD,OAAO,CAC9BC,QAASvC,EACTwC,MAAO,aACPC,MAAM,EACNC,QAAS,KACPnB,EAAGoB,UAGP/C,EAAQE,eAAesC,KAAKC,KAGvB,CACLrD,OAAQ,wBAAwBO,EAAS0B,oBACzC2B,QAAS,KAEPhD,EAAQC,UAAUE,QAASwB,IACrBA,KAAOsB,SAIbjD,EAAQE,eAAeC,QAASsC,IAC1BA,KAAgBQ,SAItBjD,EAAQC,UAAUoB,OAAS,EAC3BrB,EAAQE,eAAemB,OAAS,GAGtC"}
1
+ {"version":3,"file":"hs-counter-DYRsLBOF.js","sources":["../../src/animations/functions/counter.ts"],"sourcesContent":["/**\n * Counter Module\n *\n * GSAP-powered number counter that triggers on scroll into viewport.\n * Supports decimals, prefixes, and suffixes with smooth easing.\n *\n * Usage:\n * <span data-hs-anim=\"counter\">1000</span>\n *\n * Features:\n * - Auto-detects decimals, prefixes, suffixes\n * - Respects prefers-reduced-motion\n * - Triggers on scroll into viewport\n * - Accessible with aria-live announcements\n */\n\nimport { getGsap, prefersReducedMotion, warnMissingDependencies, type GsapTimeline } from '@utils';\n\n// Selectors\nconst SELECTORS = {\n counter: '[data-hs-anim=\"counter\"]',\n};\n\nexport async function init() {\n // Skip if user prefers reduced motion\n if (prefersReducedMotion()) {\n return { result: 'counter skipped - prefers-reduced-motion enabled' };\n }\n\n const gsapLib = getGsap('counter');\n if (!gsapLib) {\n return { result: 'counter skipped - GSAP not loaded' };\n }\n\n const { gsap, ScrollTrigger } = gsapLib;\n\n // ScrollTrigger is required for scroll-based counter animations\n if (!ScrollTrigger) {\n warnMissingDependencies('counter', ['ScrollTrigger'], 'error');\n return { result: 'counter skipped - ScrollTrigger not loaded' };\n }\n\n gsap.registerPlugin(ScrollTrigger);\n\n const counters = Array.from(document.querySelectorAll(SELECTORS.counter));\n const cleanup = {\n timelines: [] as GsapTimeline[],\n scrollTriggers: [] as any[],\n };\n\n function parseText(text: string) {\n // Remove commas from the text before parsing\n const cleanText = text.replace(/,/g, '');\n const match = cleanText.match(/([^\\d.]*)(\\d*\\.?\\d+)(.*)/);\n if (!match) {\n return { prefix: '', number: 0, suffix: '' };\n }\n return {\n prefix: match[1] || '',\n number: parseFloat(match[2]),\n suffix: match[3] || '',\n };\n }\n\n counters.forEach((counter) => {\n const htmlElement = counter as HTMLElement;\n const originalText = htmlElement.textContent?.trim() || '';\n const parsed = parseText(originalText);\n const decimals = (parsed.number.toString().split('.')[1] || '').length;\n\n // Check if original had commas (for numbers >= 1000)\n const hasCommas = originalText.includes(',');\n\n // Add accessibility attributes\n htmlElement.setAttribute('aria-live', 'polite');\n htmlElement.setAttribute('aria-atomic', 'true');\n\n // Create a temporary object to animate\n const counterObj = { value: 0 };\n\n // Create GSAP animation\n const tl = gsap.timeline({ paused: true });\n\n tl.to(counterObj, {\n value: parsed.number,\n duration: 3,\n ease: 'power4.out',\n onUpdate: function () {\n const currentValue = counterObj.value;\n let formatted =\n decimals > 0 ? currentValue.toFixed(decimals) : Math.round(currentValue).toString();\n\n // Add commas if original had them\n if (hasCommas) {\n formatted = formatted.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n\n htmlElement.textContent = `${parsed.prefix}${formatted}${parsed.suffix}`;\n },\n onComplete: function () {\n // Set final exact value\n htmlElement.textContent = originalText;\n },\n });\n\n cleanup.timelines.push(tl);\n\n // Use ScrollTrigger to play animation on scroll into view\n const st = ScrollTrigger.create({\n trigger: counter,\n start: 'top bottom',\n once: true,\n onEnter: () => {\n tl.play();\n },\n });\n cleanup.scrollTriggers.push(st);\n });\n\n return {\n result: `counter initialized (${counters.length} instances)`,\n destroy: () => {\n // Kill all timelines\n cleanup.timelines.forEach((tl) => {\n if (tl) tl.kill();\n });\n\n // Kill all scroll triggers\n cleanup.scrollTriggers.forEach((st) => {\n if (st) (st as any).kill();\n });\n\n // Clear arrays\n cleanup.timelines.length = 0;\n cleanup.scrollTriggers.length = 0;\n },\n };\n}\n"],"names":["SELECTORS","async","init","prefersReducedMotion","result","gsapLib","getGsap","gsap","ScrollTrigger","warnMissingDependencies","registerPlugin","counters","Array","from","document","querySelectorAll","cleanup","timelines","scrollTriggers","forEach","counter","htmlElement","originalText","textContent","trim","parsed","text","match","replace","prefix","number","parseFloat","suffix","parseText","decimals","toString","split","length","hasCommas","includes","setAttribute","counterObj","value","tl","timeline","paused","to","duration","ease","onUpdate","currentValue","formatted","toFixed","Math","round","onComplete","push","st","create","trigger","start","once","onEnter","play","destroy","kill"],"mappings":"yDAmBA,MAAMA,EACK,2BAGXC,eAAsBC,IAEpB,GAAIC,IACF,MAAO,CAAEC,OAAQ,oDAGnB,MAAMC,EAAUC,EAAQ,WACxB,IAAKD,EACH,MAAO,CAAED,OAAQ,qCAGnB,MAAMG,KAAEA,EAAAC,cAAMA,GAAkBH,EAGhC,IAAKG,EAEH,OADAC,EAAwB,UAAW,CAAC,iBAAkB,SAC/C,CAAEL,OAAQ,8CAGnBG,EAAKG,eAAeF,GAEpB,MAAMG,EAAWC,MAAMC,KAAKC,SAASC,iBAAiBf,IAChDgB,EAAU,CACdC,UAAW,GACXC,eAAgB,IAwElB,OAvDAP,EAASQ,QAASC,IAChB,MAAMC,EAAcD,EACdE,EAAeD,EAAYE,aAAaC,QAAU,GAClDC,EAjBR,SAAmBC,GAEjB,MACMC,EADYD,EAAKE,QAAQ,KAAM,IACbD,MAAM,4BAC9B,OAAKA,EAGE,CACLE,OAAQF,EAAM,IAAM,GACpBG,OAAQC,WAAWJ,EAAM,IACzBK,OAAQL,EAAM,IAAM,IALb,CAAEE,OAAQ,GAAIC,OAAQ,EAAGE,OAAQ,GAO5C,CAKiBC,CAAUX,GACnBY,GAAYT,EAAOK,OAAOK,WAAWC,MAAM,KAAK,IAAM,IAAIC,OAG1DC,EAAYhB,EAAaiB,SAAS,KAGxClB,EAAYmB,aAAa,YAAa,UACtCnB,EAAYmB,aAAa,cAAe,QAGxC,MAAMC,EAAa,CAAEC,MAAO,GAGtBC,EAAKpC,EAAKqC,SAAS,CAAEC,QAAQ,IAEnCF,EAAGG,GAAGL,EAAY,CAChBC,MAAOjB,EAAOK,OACdiB,SAAU,EACVC,KAAM,aACNC,SAAU,WACR,MAAMC,EAAeT,EAAWC,MAChC,IAAIS,EACFjB,EAAW,EAAIgB,EAAaE,QAAQlB,GAAYmB,KAAKC,MAAMJ,GAAcf,WAGvEG,IACFa,EAAYA,EAAUvB,QAAQ,wBAAyB,MAGzDP,EAAYE,YAAc,GAAGE,EAAOI,SAASsB,IAAY1B,EAAOO,QAClE,EACAuB,WAAY,WAEVlC,EAAYE,YAAcD,CAC5B,IAGFN,EAAQC,UAAUuC,KAAKb,GAGvB,MAAMc,EAAKjD,EAAckD,OAAO,CAC9BC,QAASvC,EACTwC,MAAO,aACPC,MAAM,EACNC,QAAS,KACPnB,EAAGoB,UAGP/C,EAAQE,eAAesC,KAAKC,KAGvB,CACLrD,OAAQ,wBAAwBO,EAAS0B,oBACzC2B,QAAS,KAEPhD,EAAQC,UAAUE,QAASwB,IACrBA,KAAOsB,SAIbjD,EAAQE,eAAeC,QAASsC,IAC1BA,KAAgBQ,SAItBjD,EAAQC,UAAUoB,OAAS,EAC3BrB,EAAQE,eAAemB,OAAS,GAGtC"}
@@ -0,0 +1,2 @@
1
+ import{g as e,i as t,w as n,d as r,a as o,p as s,q as a,b as i,s as l,e as c,o as u,f as d,h as p,c as m,j as f}from"./hs-utils-B_WKwhoM.js";const h=e.apiName,v='[data-hs-transition="wrapper"]',g="data-hs-transition-exit-trigger",y="data-hs-transition-enter-trigger",b="data-hs-transition-trigger",w="data-hs-transition-namespace",A="data-hs-transition-exit-time",E="data-hs-transition-first-delay",L="data-hs-transition-initialized",k="data-hs-exit-time",x="data-hs-delay";async function S(){const e=document.querySelector(v);if(!e)return{result:"transition skipped - no wrapper found",destroy:()=>{}};if(e.hasAttribute(L))return{result:"transition already initialized",destroy:()=>{}};e.setAttribute(L,"true");const r=window[h]?.settings?.isSPA||!1,o=new Map;let s=null;const a=(t,n=null,r=e)=>{const o=r.querySelectorAll(`[${b}="${t}"]`);if(o.length>0){if(n){const e=r.querySelector(`[${w}="${n}"]`);if(e){const n=e.querySelector(`[${b}="${t}"]`);if(n)return n}}const e=Array.from(o).find(e=>{let t=e.parentElement;for(;t&&t!==r;){if(t.hasAttribute(w))return!1;t=t.parentElement}return!0});if(e)return e}const s="exit"===t?g:y,a=r.querySelectorAll(`[${s}]`);if(a.length>0){if(n){const e=r.querySelector(`[${w}="${n}"]`);if(e){const t=e.querySelector(`[${s}]`);if(t)return t}}const e=Array.from(a).find(e=>{let t=e.parentElement;for(;t&&t!==r;){if(t.hasAttribute(w))return!1;t=t.parentElement}return!0});if(e)return e}return null},i=(t=null)=>new Promise(n=>{const r=a("exit",t);if(!r)return void n();const o=(()=>{const t=e.getAttribute(A);if(t)return 1e3*parseFloat(t);const n=e.getAttribute(k);return n?1e3*parseFloat(n):0})();r.click(),setTimeout(()=>n(),o)}),l=(t=null)=>new Promise(n=>{const r=a("enter",t);if(!r)return void n();const o=!sessionStorage.getItem("transition-loaded"),i=(()=>{const t=e.getAttribute(E);if(t)return 1e3*parseFloat(t);const n=e.getAttribute(x);return n?1e3*parseFloat(n):0})(),l=()=>{r.click(),o&&sessionStorage.setItem("transition-loaded","true"),n()};o&&i>0?s=setTimeout(l,i):l()}),c=e=>{i(e?.detail?.namespace||null)},u=e=>{l(e?.detail?.namespace||null)};if(o.set("hsmain:transition-exit",c),o.set("hsmain:transition-enter",u),window.addEventListener("hsmain:transition-exit",c),window.addEventListener("hsmain:transition-enter",u),!r){const e=e=>{const t=e.target.closest("a[href]");if(t&&t.hostname===window.location.hostname&&t.getAttribute("href")&&-1===t.getAttribute("href").indexOf("#")&&"_blank"!==t.getAttribute("target")){e.preventDefault();const n=t.href;i().then(()=>{window.location.href=n})}};o.set("click",e),document.addEventListener("click",e);const t=e=>{e.persisted&&window.location.reload()};o.set("pageshow",t),window.addEventListener("pageshow",t)}const d=()=>{e&&(e.style.display="none")};if(o.set("resize",d),window.addEventListener("resize",d),!r){const r=async()=>{if(t()){if(!(await n(3e3)))return e.remove(),void console.error("[transition] Removed wrapper due to IX3 timeout")}l()};o.set(`${h}:dom-ready`,r),window.addEventListener(`${h}:dom-ready`,r,{once:!0})}return{result:"transition initialized",destroy:()=>{s&&clearTimeout(s),o.forEach((e,t)=>{if("click"===t||"pageshow"===t||"resize"===t){("click"===t?document:window).removeEventListener(t,e)}else window.removeEventListener(t,e)}),o.clear(),e.removeAttribute(L)}}}async function C(e){let t=null,n=null;function a(t){const n=t.target.closest('a[href^="#"]');if(!n)return;const a=n.getAttribute("href");if(!a||"#"===a)return;const i=a.substring(1),l=document.getElementById(i);if(l){t.preventDefault(),history.replaceState&&history.replaceState(null,null,`#${l.id}`);!function(e,t=0){if(!e)return;const n=r("smooth-scroll",!1);if(s()||!n){const n=e.getBoundingClientRect().top+window.scrollY-t;return window.scrollTo(0,n),e.setAttribute("tabindex","-1"),void e.focus({preventScroll:!0})}n.gsap.to(window,{duration:1,scrollTo:{y:e,offsetY:t},ease:"power2.out",onComplete:function(){e.setAttribute("tabindex","-1"),e.focus({preventScroll:!0})}})}(l,function(){const t=o(e,"offset-proxy");if(console.log("[smooth-scroll] Proxy element:",t),t&&t instanceof HTMLElement){const e=getComputedStyle(t).top,n=parseFloat(e)||0;return console.log("[smooth-scroll] Computed top:",e,"-> offset:",n),n}return console.log("[smooth-scroll] No proxy element found, using offset: 0"),0}())}}"undefined"!=typeof $&&$(document).off("click.wf-scroll"),document.documentElement.style.scrollBehavior="auto",document.body.style.scrollBehavior="auto",t=a,n=e=>{"Enter"!==e.key&&" "!==e.key||a(e)},document.addEventListener("click",t),document.addEventListener("keydown",n);const i=r("smooth-scroll",!1);return i&&document.body.scrollHeight>window.innerHeight&&(i.gsap.set(window,{scrollTo:1}),i.gsap.set(window,{scrollTo:0})),{result:"autoInit-smooth-scroll initialized",destroy:()=>{t&&(document.removeEventListener("click",t),t=null),n&&(document.removeEventListener("keydown",n),n=null),document.documentElement.style.scrollBehavior="",document.body.style.scrollBehavior=""}}}let T=null;function q(t){T=t;const n={observers:[],handlers:[]};return function(t,n){const r=a(T,"wrapper"),s=[];r.forEach(r=>{const a=i(e.clickable,"button"),u=r.querySelector(a),d=o(T,"list",r);if(!u||!d)return void console.warn("[dropdown] Dropdown wrapper missing required elements:",r);const p=r.getAttribute("data-hs-nav-dropdown-type")||"hover",m=r.querySelector('[data-hs-height="element"]'),f=m?m.parentElement:null,h=u.textContent?.trim()||"dropdown",v=h.toLowerCase().replace(/[^a-z0-9\s]/g,"").replace(/\s+/g,"-").replace(/^-+|-+$/g,"").substring(0,50);const g=`navbar-dropdown-${v}-toggle`,y=`navbar-dropdown-${v}-list`;u.id=g,u.setAttribute("aria-haspopup","menu"),u.setAttribute("aria-expanded","false"),u.setAttribute("aria-controls",y),d.id=y,d.setAttribute("role","menu"),d.inert=!0;const b=Array.from(d.querySelectorAll(a));b.forEach((e,t)=>{if(e.setAttribute("role","menuitem"),e.setAttribute("tabindex","-1"),0===t){const t=u.textContent?.trim()||"menu";e.getAttribute("aria-label")||e.setAttribute("aria-label",`${e.textContent?.trim()}, ${t} submenu`)}});let w=-1;function A(){return r.classList.contains(e.classes.active)}function E(){const e=A();"true"===u.getAttribute("aria-expanded")&&!e&&d.contains(document.activeElement)&&u.focus(),u.setAttribute("aria-expanded",e?"true":"false"),d.inert=!e,b.forEach(t=>{t.setAttribute("tabindex",e?"0":"-1")}),e||(w=-1),c(f,e,{duration:"hover"===p?200:300,ease:"power2.inOut"})}l(f,A()),E();const L=new MutationObserver(()=>{E()});if(L.observe(r,{attributes:!0,attributeFilter:["class"]}),t(L),"hover"===p){s.push(r);const t=()=>{r.classList.add("is-active")},o=()=>{r.classList.remove("is-active")};n(r,"mouseenter",t),n(r,"mouseleave",o);n(u,"keydown",t=>{"ArrowDown"===t.key?(t.preventDefault(),A()||(r.classList.add(e.classes.active),b.length>0&&setTimeout(()=>{w=0,b[0].focus()},100))):" "===t.key||"Enter"===t.key?(t.preventDefault(),A()?r.classList.remove(e.classes.active):(r.classList.add(e.classes.active),b.length>0&&setTimeout(()=>{w=0,b[0].focus()},100))):"ArrowUp"===t.key?(t.preventDefault(),A()||(r.classList.add(e.classes.active),b.length>0&&setTimeout(()=>{w=b.length-1,b[w].focus()},100))):"Escape"===t.key&&(t.preventDefault(),A()&&r.classList.remove(e.classes.active))});const a=t=>{A()&&r.contains(document.activeElement)&&("ArrowDown"===t.key?(t.preventDefault(),w<b.length-1&&(w++,b[w].focus())):"ArrowUp"===t.key?(t.preventDefault(),0===w?(r.classList.remove(e.classes.active),u.focus(),w=-1):w>0?(w--,b[w].focus()):(u.focus(),w=-1)):"Escape"===t.key&&(t.preventDefault(),r.classList.remove("is-active")))};n(r,"keydown",a)}else if("click"===p){n(u,"click",t=>{t.preventDefault(),r.classList.toggle(e.classes.active)});n(u,"keydown",t=>{" "===t.key||"Enter"===t.key?(t.preventDefault(),r.classList.toggle(e.classes.active)):"Escape"===t.key&&(t.preventDefault(),A()&&r.classList.remove(e.classes.active))})}});const u=e=>{s.forEach(t=>{t.classList.contains("is-active")&&!t.contains(e.target)&&t.classList.remove("is-active")})};s.length>0&&n(document.body,"focusin",u)}(e=>{n.observers.push(e)},(e,t,r,o)=>{e.addEventListener(t,r,o),n.handlers.push({element:e,event:t,handler:r,options:o})}),{result:"dropdown initialized",destroy:()=>{n.observers.forEach(e=>e.disconnect()),n.observers.length=0,n.handlers.forEach(({element:e,event:t,handler:n,options:r})=>{e.removeEventListener(t,n,r)}),n.handlers.length=0,T=null}}}function P(t,n){const r={observers:[],handlers:[],state:{focusTrapHandler:null}},s=e=>{r.observers.push(e)};return function(s,p){const m=a(t,"button"),f=o(t,"wrapper");if(!m.length||!f)return;const h=n?o(n,"wrapper"):null,v=`menu-${Date.now()}`;f.id=v,f.setAttribute("role","dialog"),f.setAttribute("aria-modal","true"),f.inert=!0;const g=f.querySelector('[data-hs-height="element"]'),y=g?g.parentElement:null;m.forEach(t=>{t.setAttribute("aria-expanded","false"),t.setAttribute("aria-controls",v),t.setAttribute("aria-label","Open navigation menu");let a=null,g=!1;function b(){return t.classList.contains(e.classes.active)}function w(){const r=b(),s="true"===t.getAttribute("aria-expanded");r&&!s?(u(),f.classList.add(e.classes.active),f.inert=!1,h&&h.classList.add("hs-menu-open"),m.forEach(e=>{e.setAttribute("aria-expanded","true"),e.setAttribute("aria-label","Close navigation menu")}),y&&c(y,!0,{duration:300,ease:"power2.inOut"}),a=function(){const t=n?o(n,"wrapper"):document.querySelector('[data-hs-nav="wrapper"]');if(!t)return;const r=n=>{if("Tab"===n.key){const r=i(e.clickable,"button"),o=Array.from(t.querySelectorAll(r)),s=t.querySelectorAll('input, select, textarea, [tabindex]:not([tabindex="-1"])'),a=[...o,...Array.from(s)],l=a[0],c=a[a.length-1];n.shiftKey?document.activeElement===l&&(n.preventDefault(),c.focus()):document.activeElement===c&&(n.preventDefault(),l.focus())}};return document.addEventListener("keydown",r),r}(),g&&(setTimeout(()=>{const t=i(e.clickable,"button"),n=Array.from(f.querySelectorAll(t));if("last"===g){const e=n[n.length-1];e&&e.focus()}else{const e=n[0];e&&e.focus()}},100),g=!1)):!r&&s&&(f.contains(document.activeElement)&&t.focus(),d(),f.classList.remove(e.classes.active),f.inert=!0,h&&h.classList.remove("hs-menu-open"),m.forEach(e=>{e.setAttribute("aria-expanded","false"),e.setAttribute("aria-label","Open navigation menu")}),y&&c(y,!1,{duration:300,ease:"power2.inOut"}),function(e){e&&document.removeEventListener("keydown",e)}(a),a=null)}y&&l(y,b()),w();const A=new MutationObserver(()=>{w()});A.observe(t,{attributes:!0,attributeFilter:["class"]}),s(A);p(t,"click",function(e){e.preventDefault(),t.classList.toggle("is-active")});p(t,"keydown",function(n){" "===n.key||"Enter"===n.key?(n.preventDefault(),g=!0,t.classList.toggle(e.classes.active)):"ArrowDown"===n.key?(n.preventDefault(),b()||(g=!0,t.classList.add(e.classes.active))):"ArrowUp"===n.key?(n.preventDefault(),b()||(g="last",t.classList.add(e.classes.active))):"Escape"===n.key&&(n.preventDefault(),b()&&t.classList.remove(e.classes.active))}),r.state.focusTrapHandler=a})}(s,(e,t,n,o)=>{e.addEventListener(t,n,o),r.handlers.push({element:e,event:t,handler:n,options:o})}),function(n){const r=o(t,"wrapper");if(!r)return;let s=null;function a(){const t=window.getComputedStyle(r).getPropertyValue(p.state).trim();if(s===e.cssVars.state.values.active&&t===e.cssVars.state.values.inactive){const e=document.querySelector('[data-hs-nav-menu="button"]');e&&"true"===e.getAttribute("aria-expanded")&&e&&e.classList.remove("is-active")}s=t}const i=new ResizeObserver(a);i.observe(r),n(i),a()}(s),{result:"menu initialized",destroy:()=>{r.state.focusTrapHandler&&(document.removeEventListener("keydown",r.state.focusTrapHandler),r.state.focusTrapHandler=null),r.observers.forEach(e=>e.disconnect()),r.observers.length=0,r.handlers.forEach(({element:e,event:t,handler:n,options:r})=>{e.removeEventListener(t,n,r)}),r.handlers.length=0,document.body.classList.remove("u-overflow-hidden")}}}function D(t,n){const r={handlers:[]},s=(e,t,n,o)=>{e.addEventListener(t,n,o),r.handlers.push({element:e,event:t,handler:n,options:o})};return s(document,"keydown",t=>{if("ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;const r=n?o(n.menu,"wrapper"):document.querySelector('[data-hs-nav-menu="wrapper"]');if(r&&r.contains(document.activeElement))return;const s=n?o(n,"wrapper"):document.querySelector('[data-hs-nav="wrapper"]');if(!s||!s.contains(document.activeElement))return;const a=s.querySelector(`.${e.classes.active}[data-hs-nav-dropdown]`);if(a&&a.contains(document.activeElement))return;t.preventDefault();const l=i(e.clickable,"button"),c=Array.from(s.querySelectorAll(l)),u=Array.from(c).filter(e=>{if("-1"===e.getAttribute("tabindex"))return!1;if(e.closest('[role="menu"]'))return!1;const t=n?n.menu.attributes.elements.wrapper.primary.split("=")[0]:"data-hs-nav-menu";if(e.closest(`[${t}="wrapper"]`))return!1;const r=n?n.attributes.elements["skip-link"].primary.split("=")[0]:"data-hs-nav";if(e.closest(`[${r}="skip-link"]`))return!1;const o=window.getComputedStyle(e),a=e;if("none"===o.display||"hidden"===o.visibility||"0"===o.opacity||0===a.offsetWidth||0===a.offsetHeight)return!1;let i=e.parentElement;for(;i&&i!==s;){const e=window.getComputedStyle(i),t=i;if("none"===e.display||"hidden"===e.visibility||0===t.offsetWidth||0===t.offsetHeight)return!1;i=i.parentElement}return!0}),d=u.indexOf(document.activeElement);-1!==d&&("ArrowRight"===t.key?d<u.length-1&&u[d+1].focus():d>0&&u[d-1].focus())}),function(t){const r=n?o(n.menu,"wrapper"):document.querySelector('[data-hs-nav-menu="wrapper"]');if(!r)return;let s=-1;t(r,"keydown",t=>{const a=function(){const t=i(e.clickable,"button"),n=Array.from(r.querySelectorAll(t));return Array.from(n).filter(e=>{let t=e;for(;t&&t!==r;){if(t.inert)return!1;t=t.parentElement}return!0})}();if(0===a.length)return;const l=document.activeElement;if(s=a.indexOf(l),"ArrowDown"===t.key)t.preventDefault(),s<a.length-1&&(s+=1,a[s].focus());else if("ArrowUp"===t.key)t.preventDefault(),s>0&&(s-=1,a[s].focus());else if("ArrowRight"===t.key){if(t.preventDefault(),l&&"BUTTON"===l.tagName&&l.hasAttribute("aria-controls")){return void("true"===l.getAttribute("aria-expanded")||l.click())}}else if("ArrowLeft"===t.key){if(t.preventDefault(),l&&"BUTTON"===l.tagName&&l.hasAttribute("aria-controls")){return void("true"===l.getAttribute("aria-expanded")&&l.click())}}else if("Home"===t.key)t.preventDefault(),s=0,a[0].focus();else if("End"===t.key)t.preventDefault(),s=a.length-1,a[a.length-1].focus();else if(" "===t.key&&l&&"A"===l.tagName)t.preventDefault();else if("Escape"===t.key){const e=n?o(n.menu,"button"):document.querySelector('[data-hs-nav-menu="button"]');e&&(e.click(),e.focus())}})}(s),{result:"arrow-navigation initialized",destroy:()=>{r.handlers.forEach(({element:e,event:t,handler:n,options:r})=>{e.removeEventListener(t,n,r)}),r.handlers.length=0}}}async function F(e){const t={destroyFunctions:[]},n=await Promise.allSettled([q(e.dropdown),P(e.menu,e),D(e["arrow-navigation"],e)]);n.forEach(e=>{"fulfilled"===e.status&&e.value?.destroy&&t.destroyFunctions.push(e.value.destroy)});const r=n.filter(e=>"fulfilled"===e.status).length,o=n.length-r;return o>0&&console.warn(`[navbar] ${r}/${n.length} functions loaded successfully. ${o} failed but won't affect other functions.`),{result:"navbar initialized",destroy:()=>{t.destroyFunctions.forEach(e=>{try{e()}catch(t){console.error("[navbar] Error during cleanup:",t)}}),t.destroyFunctions.length=0}}}function I(t){const n={observers:[],handlers:[]};return function(n,r){const s=a(t,"wrapper");if(0===s.length)return 0;let u=0;s.forEach((s,a)=>{const d=o(t,"toggle",s),p=o(t,"content",s);if(!d||!p)return;u++;const m=`[${e.attributes.height}="${e.attributes.heightValue}"]`,f=s.querySelector(m),h=f?f.parentElement:p,v=`hs-accordion-btn-${a}`,g=`hs-accordion-content-${a}`,y=s.getAttribute(t.attributes.properties.open),b=s.getAttribute(t.attributes.properties.closed),w=y&&b;let A=[];if(w){const e=i(t,"state");A=Array.from(d.querySelectorAll(e))}function E(){return s.classList.contains(e.classes.active)}function L(){const e=E();if("true"===d.getAttribute("aria-expanded")&&!e&&p.contains(document.activeElement)){d.focus()}d.setAttribute("aria-expanded",e?"true":"false");var t;p.inert=!e,w&&A.length>0&&(t=e?y:b,w&&A.forEach(e=>{e.textContent=t})),c(h,e,{duration:300,ease:"power2.inOut"})}d.setAttribute("id",v),p.setAttribute("id",g),p.setAttribute("role","region"),p.setAttribute("aria-labelledby",v),d.setAttribute("aria-controls",g);const k=s.getAttribute(t.attributes.properties.default);k&&"open"===k.toLowerCase()&&s.classList.add(e.classes.active),l(h,E()),L();r(d,"click",t=>{t.preventDefault(),s.classList.toggle(e.classes.active)});const x=new MutationObserver(()=>{L()});x.observe(s,{attributes:!0,attributeFilter:["class"]}),n(x)})}(e=>n.observers.push(e),(e,t,r,o)=>{e.addEventListener(t,r,o),n.handlers.push({element:e,event:t,handler:r,options:o})}),{result:"accordion initialized",destroy:()=>{n.observers.forEach(e=>e.disconnect()),n.observers.length=0,n.handlers.forEach(({element:e,event:t,handler:n,options:r})=>{e.removeEventListener(t,n,r)}),n.handlers.length=0}}}function N(e){const t=m._global.classes.active,n={observers:[],handlers:[],scrollTimeout:null,headings:[]},r=a(e,"content"),o=a(e,"list");return r.forEach(e=>{const r=o[0];if(!r||0===r.children.length)return;const s=r.children[0].cloneNode(!0),a=s.querySelector("a");a&&a.classList.remove(t),r.innerHTML="";const i=e.querySelectorAll("h2");i.forEach(e=>{const t=e.textContent.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"");e.id=t,n.headings.push(e)}),i.forEach((e,t)=>{const n=s.cloneNode(!0),o=n.querySelector("a"),a=e.id;o.href=`#${a}`;const i=document.createElement("strong");i.textContent=`${t+1}. `,o.innerHTML="",o.appendChild(i),o.appendChild(document.createTextNode(e.textContent)),r.appendChild(n)});const l=r.querySelectorAll("a");let c=null;const u=()=>{const e=.25*window.innerHeight;let n=null;for(let t=i.length-1;t>=0;t--){if(i[t].getBoundingClientRect().top<=e){n=i[t].id;break}}if(n!==c&&(c=n,l.forEach(e=>e.classList.remove(t)),c)){const e=Array.from(l).find(e=>e.getAttribute("href")===`#${c}`);e&&e.classList.add(t)}},d=new IntersectionObserver(()=>{u()},{rootMargin:"-25% 0px -75% 0px",threshold:0});i.forEach(e=>d.observe(e)),(e=>{n.observers.push(e)})(d);var p,m,f;p=window,m="scroll",f=()=>{n.scrollTimeout&&clearTimeout(n.scrollTimeout),n.scrollTimeout=setTimeout(u,50)},p.addEventListener(m,f),n.handlers.push({element:p,event:m,handler:f})}),{result:"toc initialized",destroy:()=>{n.headings.forEach(e=>{e.removeAttribute("id")}),n.headings.length=0,n.observers.forEach(e=>e.disconnect()),n.observers.length=0,n.handlers.forEach(({element:e,event:t,handler:n})=>{e.removeEventListener(t,n)}),n.handlers.length=0,n.scrollTimeout&&(clearTimeout(n.scrollTimeout),n.scrollTimeout=null)}}}async function M(){const e=m.default.toc,t={destroyFunctions:[]},n=i(e,"list");if(document.querySelector(n))try{const n=await N(e);n?.destroy&&t.destroyFunctions.push(n.destroy)}catch(c){console.error("[toc] Error initializing heading-links:",c)}const l=i(e["progress-bar"],"wrapper");if(document.querySelector(l))try{const n=await async function(e){const{progressConfig:t,tocConfig:n}=e;if(s())return{result:"progress-bar skipped - prefers-reduced-motion enabled"};const i=r("progress-bar");if(!i)return{result:"progress-bar skipped - GSAP not loaded"};const{gsap:l,ScrollTrigger:c}=i;if(!c)return console.warn("[progress-bar] GSAP ScrollTrigger plugin not loaded"),{result:"progress-bar skipped - ScrollTrigger not loaded"};l.registerPlugin(c);const u={scrollTriggers:[]},d=o(n,"content");if(!d)return{result:"progress-bar skipped - no content element found"};const p=a(t,"wrapper");return 0===p.length?{result:"progress-bar skipped - no wrapper elements found"}:(p.forEach(e=>{l.set(e,{display:"block"}),Array.from(e.querySelectorAll("*")).filter(e=>{const n=t.attributes.elements.element.primary,[r,o]=n.split("="),s=o?.replace(/['"]/g,"");return e.getAttribute(r)===s}).forEach(e=>{l.set(e,{width:"0%"}),l.to(e,{width:"100%",ease:"none",scrollTrigger:{trigger:d,start:"top bottom",end:"bottom 75%",scrub:!0,invalidateOnRefresh:!0,onUpdate:e=>{u.scrollTriggers.includes(e)||u.scrollTriggers.push(e)}}})})}),{result:`progress-bar initialized (${p.length} instances)`,destroy:()=>{u.scrollTriggers.forEach(e=>{e&&"object"==typeof e&&"kill"in e&&"function"==typeof e.kill&&e.kill()}),u.scrollTriggers.length=0}})}({progressConfig:e["progress-bar"],tocConfig:e});n?.destroy&&t.destroyFunctions.push(n.destroy)}catch(c){console.error("[toc] Error initializing progress-bar:",c)}return{result:`toc initialized (${t.destroyFunctions.length} modules active)`,destroy:()=>{t.destroyFunctions.forEach(e=>{try{e()}catch(c){console.error("[toc] Error during cleanup:",c)}}),t.destroyFunctions.length=0}}}function H(t){const n={observers:[],handlers:[],liveRegions:[]};try{a(t,"wrapper").forEach(r=>{try{const s=function(t,n,r){const s=o(r,"list",t);if(!s)return console.warn("[pagination] Missing required element: list"),null;const a=s.parentElement;if(!a)return null;const l={controls:o(r,"controls",t),counter:o(r,"counter",t),dotsWrap:o(r,"dots",t),nextButton:null,prevButton:null};if(!l.controls)return{initialized:!1};const c=o(r,"next",t),u=o(r,"previous",t),d=i(e.clickable,"button"),m=c?.querySelector(d)||c,f=u?.querySelector(d)||u;if(!m||!f)return console.warn("[pagination] Missing required navigation buttons"),null;l.nextButton=m,l.prevButton=f,l.nextButton.setAttribute("aria-label","Go to next page"),l.prevButton.setAttribute("aria-label","Go to previous page"),l.counter&&(l.counter.setAttribute("aria-live","polite"),l.counter.setAttribute("aria-label","Current page"));const h=parseInt(l.controls?.getAttribute(r.attributes.properties.show)||"6")||6,v=parseInt(l.controls?.getAttribute(r.attributes.properties.showMobile)||String(h))||h,g=()=>getComputedStyle(s).getPropertyValue(p.state).trim()===e.cssVars.state.values.active,y=Array.from(s.children),b=y.length;if(!b)return null;const w={totalPages:1,currentIndex:1,currentPage:1,isAnimating:!1,itemsPerPage:h,dotTemplates:{active:null,inactive:null}};let A=[];const E=document.createElement("div");E.className="sr-only",E.setAttribute("aria-live","assertive"),E.setAttribute("aria-atomic","true"),E.style.cssText="position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden;",t.appendChild(E),n.liveRegions.push(E);const L=()=>{l.counter&&(l.counter.textContent=`${w.currentPage} / ${w.totalPages}`)},k=()=>{E.textContent=`Page ${w.currentPage} of ${w.totalPages}`,setTimeout(()=>E.textContent="",1e3)},x=()=>{A.forEach((e,t)=>{const n=e;t===w.currentIndex?n.removeAttribute("inert"):n.setAttribute("inert","")})},S=()=>{const e=A[w.currentIndex];e&&void 0!==e.offsetHeight&&(a.style.height=e.offsetHeight+"px")},C=()=>{if(!l.dotsWrap)return;const e=Array.from(l.dotsWrap.children);if(!e.length)return;const t=e.find(e=>e.classList.contains("is-active")),r=e.find(e=>!e.classList.contains("is-active"));w.dotTemplates.active=t?t.cloneNode(!0):e[0].cloneNode(!0),w.dotTemplates.inactive=r?r.cloneNode(!0):e[0].cloneNode(!0),l.dotsWrap.innerHTML="",l.dotsWrap.setAttribute("role","group"),l.dotsWrap.setAttribute("aria-label","Page navigation");for(let o=1;o<=w.totalPages;o++){const e=(1===o?w.dotTemplates.active:w.dotTemplates.inactive).cloneNode(!0);e.setAttribute("role","button"),e.setAttribute("tabindex","0"),e.setAttribute("aria-label",`Go to page ${o}`),e.setAttribute("aria-current",1===o?"page":"false"),e.setAttribute("data-page",String(o)),1===o?e.classList.add("is-active"):e.classList.remove("is-active");const t=()=>$(o);e.addEventListener("click",t),n.handlers.push({element:e,event:"click",handler:t});const r=e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),$(o))};e.addEventListener("keydown",r),n.handlers.push({element:e,event:"keydown",handler:r}),l.dotsWrap.appendChild(e)}},T=()=>{if(!l.dotsWrap)return;Array.from(l.dotsWrap.children).forEach((e,t)=>{t+1===w.currentPage?(e.classList.add("is-active"),e.setAttribute("aria-current","page")):(e.classList.remove("is-active"),e.setAttribute("aria-current","false"))})},q=(e=null)=>{const t=g();if(w.itemsPerPage=e||(t?v:h),w.totalPages=Math.ceil(b/w.itemsPerPage),l.dotsWrap&&(n.handlers=n.handlers.filter(({element:e})=>!l.dotsWrap.contains(e))),Array.from(a.children).forEach(e=>{e!==s&&a.removeChild(e)}),s.innerHTML="",y.forEach(e=>s.appendChild(e)),w.totalPages<=1)return l.controls&&(l.controls.contains(document.activeElement)&&document.activeElement&&document.activeElement.blur(),l.controls.style.display="none",l.controls.setAttribute("aria-hidden","true")),l.dotsWrap&&(l.dotsWrap.style.display="none",l.dotsWrap.setAttribute("aria-hidden","true")),Object.assign(w,{totalPages:1,currentIndex:1,currentPage:1,isAnimating:!1}),a.style.cssText=`transform: translateX(0%); height: ${s.offsetHeight}px;`,A=[s],1;l.controls&&(l.controls.style.display="",l.controls.removeAttribute("aria-hidden")),l.dotsWrap&&(l.dotsWrap.style.display="",l.dotsWrap.removeAttribute("aria-hidden"));const r=Array.from({length:w.totalPages},(e,t)=>{const n=s.cloneNode(!1),r=t*w.itemsPerPage,o=Math.min(r+w.itemsPerPage,b);return y.slice(r,o).forEach(e=>n.appendChild(e.cloneNode(!0))),n});return a.insertBefore(r[r.length-1].cloneNode(!0),s),r.slice(1).forEach(e=>a.appendChild(e)),a.appendChild(r[0].cloneNode(!0)),s.innerHTML="",Array.from(r[0].children).forEach(e=>s.appendChild(e)),Object.assign(w,{currentIndex:1,currentPage:1,isAnimating:!1}),A=Array.from(a.children),a.style.transform="translateX(-100%)",L(),S(),x(),C(),w.totalPages};let P=g();const D=new ResizeObserver(()=>{if(w.isAnimating)return;const e=g();e!==P?(P=e,q()):S()});D.observe(a),n.observers.push(D),q();const $=e=>{if(w.isAnimating||w.totalPages<=1||e===w.currentPage)return;w.isAnimating=!0,w.currentIndex=e,w.currentPage=e,L(),k(),S(),T(),g()&&l.controls&&setTimeout(()=>{const e=80,t=l.controls.getBoundingClientRect().bottom+window.pageYOffset-window.innerHeight+e;window.scrollTo({top:t,behavior:"smooth"})},50),a.style.transform=`translateX(${100*-w.currentIndex}%)`;let t=null;const n=()=>{clearTimeout(t),a.removeEventListener("transitionend",n),L(),k(),S(),x(),T(),w.isAnimating=!1};t=setTimeout(n,1e3),a.addEventListener("transitionend",n)},F=e=>{if(w.isAnimating||w.totalPages<=1)return;w.isAnimating=!0,w.currentIndex+=e,w.currentPage=w.currentIndex>w.totalPages?1:w.currentIndex<1?w.totalPages:w.currentIndex,L(),k(),S(),T(),g()&&l.controls&&setTimeout(()=>{const e=80,t=l.controls.getBoundingClientRect().bottom+window.pageYOffset-window.innerHeight+e;window.scrollTo({top:t,behavior:"smooth"})},50),a.style.transform=`translateX(${100*-w.currentIndex}%)`;let t=null;const n=()=>{clearTimeout(t),a.removeEventListener("transitionend",n),w.currentIndex>w.totalPages?(w.currentIndex=1,w.currentPage=1,a.style.transition="none",a.style.transform="translateX(-100%)",a.offsetHeight,a.style.transition=""):w.currentIndex<1&&(w.currentIndex=w.totalPages,w.currentPage=w.totalPages,a.style.transition="none",a.style.transform=`translateX(${100*-w.totalPages}%)`,a.offsetHeight,a.style.transition=""),L(),k(),S(),x(),T(),w.isAnimating=!1};t=setTimeout(n,1e3),a.addEventListener("transitionend",n)},I=()=>F(1),N=()=>F(-1);return l.nextButton.addEventListener("click",I),l.prevButton.addEventListener("click",N),n.handlers.push({element:l.nextButton,event:"click",handler:I},{element:l.prevButton,event:"click",handler:N}),{initialized:!0}}(r,n,t);s||console.warn("[pagination] Failed to initialize container",r)}catch(s){console.error("[pagination] Error initializing container:",s,r)}})}catch(r){console.error("[pagination] Critical error during initialization:",r)}return{result:"pagination initialized",destroy:()=>{try{n.liveRegions.forEach(e=>{try{e.parentNode&&e.parentNode.removeChild(e)}catch(r){console.error("[pagination] Error removing live region:",r)}}),n.liveRegions.length=0,n.observers.forEach(e=>{try{e.disconnect()}catch(r){console.error("[pagination] Error disconnecting observer:",r)}}),n.observers.length=0,n.handlers.forEach(({element:e,event:t,handler:n})=>{try{e.removeEventListener(t,n)}catch(r){console.error("[pagination] Error removing event listener:",r)}}),n.handlers.length=0}catch(r){console.error("[pagination] Critical error during cleanup:",r)}}}}async function O(t){const n=r("comparison");if(!n)return{result:"comparison skipped - GSAP not loaded"};const{gsap:s,Draggable:l}=n;f("comparison",["Draggable"],"error");const c=a(t,"wrapper"),u={draggables:[],handlers:[]},d=i(t,"template-name"),m=i(t,"template-description"),h=i(t,"template-before-image"),v=i(t,"template-after-image");function g(e,t){e.style.setProperty(p.clip,`${t}%`)}function y(n,r){const s=n.templateItems[r];if(!s)return;const a=s.querySelector(d);n.nameElement&&a&&(n.nameElement.textContent=a.textContent);const i=s.querySelector(m);n.descElement&&i&&(n.descElement.textContent=i.textContent);const l=s.querySelector(h);n.beforeImage&&l&&(n.beforeImage.src=l.src,n.beforeImage.alt=l.alt||"");const c=s.querySelector(v);n.afterImage&&c&&(n.afterImage.src=c.src,n.afterImage.alt=c.alt||"",b(n)),n.currentIndex=r,function(n,r){const s=o(t,"pagination",n);if(!s)return;const a=e.classes.active;Array.from(s.children).forEach((e,t)=>{t===r?e.classList.add(a):e.classList.remove(a)})}(n.wrapper,r)}function b(e){const t=e.slider,n=e.wrapper;switch(e.mode){case"before":n.style.setProperty(p.clip,"100%"),t.style.display="none";break;case"after":n.style.setProperty(p.clip,"0%"),t.style.display="none";break;case"split":g(n,e.sliderPosition),t.style.display="flex"}}function w(e,t){const n=e.currentIndex+t,r=e.templateItems.length-1;let o;o=n>r?0:n<0?r:n,y(e,o)}return c.forEach(n=>{const r=o(t,"template-list",n);if(!r)return void console.warn("[comparison] No template list found in wrapper");const a=i(t,"template-item"),c=Array.from(r.querySelectorAll(a));if(0===c.length)return void console.warn("[comparison] No template items found");n.setAttribute("aria-live","polite"),n.setAttribute("aria-label","Before and after image comparison");const d=o(t,"image-wrapper",n),p=o(t,"slider",n),m=o(t,"before-image",n),f=o(t,"after-image",n),h=o(t,"name",n),v=o(t,"description",n);if(!d||!p||!f){const e=[];return d||e.push('image-wrapper (data-hs-comparison="image-wrapper")'),p||e.push('slider (data-hs-comparison="slider")'),f||e.push('after-image (data-hs-comparison-image="after")'),void console.warn(`[comparison] Missing required elements: ${e.join(", ")}`)}const A={wrapper:n,templateItems:c,currentIndex:0,mode:"split",sliderPosition:50,slider:p,beforeImage:m?.querySelector("img"),afterImage:f?.querySelector("img"),nameElement:h,descElement:v,draggable:null};if(y(A,0),g(n,50),l){const e=l.create(p,{type:"x",bounds:d,onDrag:function(){const e=d.getBoundingClientRect(),t=p.getBoundingClientRect().left-e.left,r=Math.max(0,Math.min(100,t/e.width*100));g(n,r),A.sliderPosition=r}});u.draggables.push(e),A.draggable=e[0];const t=e=>{if("split"!==A.mode)return;const t=d.getBoundingClientRect(),r=e.clientX-t.left,o=Math.max(0,Math.min(100,r/t.width*100)),a=r-t.width/2;A.draggable&&(s.set(p,{x:a}),A.draggable.update()),g(n,o),A.sliderPosition=o};d.addEventListener("click",t),u.handlers.push({element:d,event:"click",handler:t})}n.querySelectorAll(`[${t.attributes.properties.modeType}]`).forEach(n=>{const r=n.getAttribute(t.attributes.properties.modeType),o=i(e.clickable,"button"),s=n.querySelector(o)||n;r===A.mode&&n.classList.add(e.classes.active);const a=n=>{n.preventDefault(),function(n,r){const o=n.wrapper.querySelectorAll(`[${t.attributes.properties.modeType}]`),s=e.classes.active;o.forEach(e=>{e.getAttribute(t.attributes.properties.modeType)===r?e.classList.add(s):e.classList.remove(s)}),n.mode=r,b(n)}(A,r)};s.addEventListener("click",a),u.handlers.push({element:s,event:"click",handler:a})}),function(n,r){const o=r.querySelector(`[${t.attributes.properties.navType}="previous"]`),s=r.querySelector(`[${t.attributes.properties.navType}="next"]`);if(o){const t=i(e.clickable,"button"),r=o.querySelector(t)||o;r.setAttribute("aria-label","Previous image");const s=e=>{e.preventDefault(),w(n,-1)};r.addEventListener("click",s),u.handlers.push({element:r,event:"click",handler:s})}if(s){const t=i(e.clickable,"button"),r=s.querySelector(t)||s;r.setAttribute("aria-label","Next image");const o=e=>{e.preventDefault(),w(n,1)};r.addEventListener("click",o),u.handlers.push({element:r,event:"click",handler:o})}}(A,n);const E=o(t,"pagination",n);E&&c.length>1&&function(t,n){const r=n.children[0];if(!r)return;const o=e.classes.active;n.innerHTML="",t.templateItems.forEach((e,s)=>{const a=r.cloneNode(!0);a.classList.remove(o),0===s&&a.classList.add(o);const i=()=>{y(t,s)};a.addEventListener("click",i),u.handlers.push({element:a,event:"click",handler:i}),n.appendChild(a)})}(A,E),function(e){const t=t=>{"ArrowLeft"===t.key||"ArrowUp"===t.key?(t.preventDefault(),w(e,-1)):"ArrowRight"!==t.key&&"ArrowDown"!==t.key||(t.preventDefault(),w(e,1))};e.wrapper.addEventListener("keydown",t),e.wrapper.setAttribute("tabindex","0"),u.handlers.push({element:e.wrapper,event:"keydown",handler:t})}(A)}),{result:`comparison initialized (${c.length} instances)`,destroy:()=>{u.draggables.forEach(e=>{e&&e[0]&&e[0].kill&&e[0].kill()}),u.handlers.forEach(({element:e,event:t,handler:n})=>{e.removeEventListener(t,n)}),u.draggables.length=0,u.handlers.length=0}}}function z(t){const n={handlers:[],timers:[],animationFrames:[],observers:[]},l=(e,t,r,o)=>{e.addEventListener(t,r,o),n.handlers.push({element:e,event:t,handler:r,options:o})},c=e=>n.animationFrames.push(e),u=()=>`${e.cssVars.prefix}${t.cssVars?.progress||"progress"}`,d=(e,t)=>e.style.setProperty(u(),String(t));function p(a){const p=o(t,"links",a),m=o(t,"list",a);if(!p||!m)return;const f=Array.from(p.children),h=Array.from(m.children),v=i(e.clickable,"button"),g=f.map(e=>e.querySelector(v)).filter(e=>null!==e);if(0===g.length)return;const y=a.getAttribute(t.attributes.properties?.autoplay||"data-hs-tab-autoplay"),b=a.getAttribute(t.attributes.properties?.duration||"data-hs-tab-duration"),w=a.getAttribute(t.attributes.properties?.hover||"data-hs-tab-hover"),A=a.getAttribute(t.attributes.properties?.animation||"data-hs-tab-animation"),E=a.getAttribute(t.attributes.properties?.animationDuration||"data-hs-tab-animation-duration"),L="true"===y,k=b?parseFloat(b):6,x="pause"===w,S=A,C=E?parseFloat(E):.3,T=`${"hs-tab"}-${Math.random().toString(36).substring(2,9)}`;h.forEach((e,t)=>{const n=e.id||`${T}-panel-${t}`,r=`${T}-tab-${t}`;e.id=n,g[t]&&(g[t].id=r,g[t].setAttribute("aria-controls",n))});let q=0,P=null,D=null,$=null,F=!1,I=!1,N=!1;async function M(t,n=!1){if(I)return;if(t<0||t>=h.length)return;if(t===q&&!n)return;I=!0;const o=q;if(q=t,g.forEach((e,n)=>{e.setAttribute("aria-selected",n===t?"true":"false"),e.setAttribute("tabindex",n===t?"0":"-1")}),f.forEach((n,r)=>{n.classList.toggle(e.classes.active,r===t)}),L)if(F){const e=f[o]?parseFloat(getComputedStyle(f[o]).getPropertyValue(u())||"0"):0;f.forEach((n,r)=>d(n,r===t?e:0))}else O();const a=h[o],i=h[t];"fade"!==S||n?"clip"!==S||n?h.forEach((n,r)=>{r===t?("fade"===S||"clip"===S?(n.style.position="",n.style.display="block","fade"===S?n.style.opacity="1":n.style.clipPath=""):n.style.display="block",n.inert=!1,n.style.pointerEvents="",n.classList.add(e.classes.active)):("fade"===S||"clip"===S?(n.style.display="none","fade"===S?n.style.opacity="0":n.style.clipPath=""):n.style.display="none",n.inert=!0,n.style.pointerEvents="none",n.classList.remove(e.classes.active))}):await async function(e,t,n){s()&&(n=0);const o=r("tabs",!1);if(!o)return e.style.display="none",e.style.position="",e.style.clipPath="",e.inert=!0,e.style.pointerEvents="none",t.style.display="block",t.style.position="",t.style.clipPath="",t.inert=!1,void(t.style.pointerEvents="");const{gsap:a}=o;return new Promise(r=>{const o=a.timeline({onComplete:()=>{e.style.display="none",e.style.position="",e.style.clipPath="",e.inert=!0,e.style.pointerEvents="none",t.style.position="",t.style.clipPath="",t.inert=!1,t.style.pointerEvents="",r()},defaults:{duration:n,ease:"power1.inOut"}});o.set(e,{position:"absolute",top:0,left:0,width:"100%",clipPath:"inset(0% 0% 0% 0%)"}),o.set(t,{display:"block",position:"relative",clipPath:"inset(0% 0% 100% 0%)"}),o.to(e,{clipPath:"inset(100% 0% 0% 0%)"}),o.to(t,{clipPath:"inset(0% 0% 0% 0%)"},"<40%")})}(a,i,C):await async function(e,t,n){s()&&(n=0);const o=r("tabs",!1);if(!o)return e.style.display="none",e.style.position="",e.inert=!0,e.style.pointerEvents="none",t.style.display="block",t.style.position="",t.inert=!1,void(t.style.pointerEvents="");const{gsap:a}=o;return new Promise(r=>{const o=a.timeline({onComplete:()=>{e.style.display="none",e.style.position="",e.style.opacity="",e.inert=!0,e.style.pointerEvents="none",t.style.position="",t.style.opacity="",t.inert=!1,t.style.pointerEvents="",r()},defaults:{duration:n,ease:"power1.out"}});o.set(e,{position:"absolute",top:0,left:0,width:"100%"}),o.set(t,{display:"block",position:"relative",opacity:0}),o.to(e,{opacity:0}),o.to(t,{opacity:1},"<50%")})}(a,i,C),I=!1}function H(e){if(L){$||($=e);const t=Math.min((e-$)/(1e3*k),1);f.forEach((e,n)=>d(e,n===q?t:0)),t<1&&!F&&(D=requestAnimationFrame(H),D&&c(D))}else f.forEach((e,t)=>d(e,t===q?1:0))}function O(){if(z(),!L)return H(0);if(F||!N)return;const e=f[q]?parseFloat(getComputedStyle(f[q]).getPropertyValue(u())||"0"):0,t=e*k*1e3,r=Math.max(0,1e3*k-t);$=null;const o=e,s=performance.now(),a=e=>{const t=Math.min(o+(e-s)/(1e3*k),1);f.forEach((e,n)=>d(e,n===q?t:0)),t<1&&!F&&(D=requestAnimationFrame(a),D&&c(D))};var i;D=requestAnimationFrame(a),D&&c(D),P=window.setTimeout(()=>M((q+1)%h.length),r),i=P,n.timers.push(i)}function z(){null!==P&&(clearTimeout(P),P=null),null!==D&&(cancelAnimationFrame(D),D=null),$=null}const W=()=>{F=!0,z()},R=()=>{F=!1,O()};g.forEach((e,t)=>{l(e,"click",e=>{e.preventDefault(),M(t)})});const B=e=>{const t=g.indexOf(e.target);if(-1===t)return;let n=t;switch(e.key){case"ArrowLeft":case"ArrowUp":e.preventDefault(),n=0===t?g.length-1:t-1;break;case"ArrowRight":case"ArrowDown":e.preventDefault(),n=t===g.length-1?0:t+1;break;case"Home":e.preventDefault(),n=0;break;case"End":e.preventDefault(),n=g.length-1;break;default:return}I||(M(n),g[n].focus())};g.forEach(e=>l(e,"keydown",B)),x&&L&&(l(a,"mouseenter",W),l(a,"mouseleave",R));let V=!1;l(document,"keydown",()=>V=!0),l(document,"mousedown",()=>V=!1),L&&(l(a,"focusin",()=>{V&&(W(),K())}),l(a,"focusout",()=>{V&&F&&(R(),K())}));const U=`[${t.attributes.properties?.controls||"data-hs-tab-controls"}]`,X=a.querySelectorAll(U);let G=null,Y=null;X.forEach(n=>{const r=n.getAttribute(t.attributes.properties?.controls||"data-hs-tab-controls"),o=n.querySelector(v);if(o)if("previous"===r)o.setAttribute("aria-label","Previous tab"),l(o,"click",e=>{e.preventDefault(),M(0===q?h.length-1:q-1)});else if("next"===r)o.setAttribute("aria-label","Next tab"),l(o,"click",e=>{e.preventDefault(),M((q+1)%h.length)});else if("toggle"===r){if(!L)return void(n.style.display="none");G=n,Y=o,Y.setAttribute("aria-label",F?"Play":"Pause"),G.classList.toggle(e.classes.active,!F),l(o,"click",e=>{e.preventDefault(),F?R():W(),K()})}});const K=()=>{G&&Y&&(G.classList.toggle(e.classes.active,!F),Y.setAttribute("aria-label",F?"Play":"Pause"))};if(M(0,!0),L){const e=new IntersectionObserver(e=>{e.forEach(e=>{N=e.isIntersecting,e.isIntersecting&&!F?O():z()})},{threshold:.1});e.observe(a),j=e,n.observers.push(j)}var j}const m=a(t,"wrapper");return m.forEach(e=>{p(e)}),{result:`tabs initialized (${m.length} systems)`,destroy:()=>{n.timers.forEach(e=>clearTimeout(e)),n.timers.length=0,n.animationFrames.forEach(e=>cancelAnimationFrame(e)),n.animationFrames.length=0,n.observers.forEach(e=>e.disconnect()),n.observers.length=0,n.handlers.forEach(({element:e,event:t,handler:n,options:r})=>{e.removeEventListener(t,n,r)}),n.handlers.length=0}}}function W(e){const t={handlers:[],domContentLoadedHandler:null},n=(e,n,r)=>{e.addEventListener(n,r),t.handlers.push({element:e,event:n,handler:r})};function r(){a(e,"wrapper").forEach(t=>{const r=t;r.dataset.hsFormRangeInit||(r.dataset.hsFormRangeInit="true",function(t,n){const r=t.querySelector("input[type='range']");if(!r)return void console.warn('[range] Missing <input type="range"> element in wrapper',t);const s=o(e,"output",t),a=()=>{const n=r.min?+r.min:0,o=r.max?+r.max:100,a=+r.value||n,i=(a-n)/(o-n);t.style.setProperty(`${m._global.cssVars.prefix}${e.cssVars?.progress||"progress"}`,String(i)),s&&(s.textContent=String(a))};n(r,"input",a),a()}(r,n))})}return"loading"===document.readyState?(t.domContentLoadedHandler=r,document.addEventListener("DOMContentLoaded",t.domContentLoadedHandler)):r(),{result:"range initialized",destroy:()=>{t.domContentLoadedHandler&&(document.removeEventListener("DOMContentLoaded",t.domContentLoadedHandler),t.domContentLoadedHandler=null),t.handlers.forEach(({element:e,event:t,handler:n})=>{e.removeEventListener(t,n)}),t.handlers.length=0;a(e,"wrapper").forEach(e=>{delete e.dataset.hsFormRangeInit})}}}const R=[{name:"Alabama",value:"AL"},{name:"Alaska",value:"AK"},{name:"Arizona",value:"AZ"},{name:"Arkansas",value:"AR"},{name:"California",value:"CA"},{name:"Colorado",value:"CO"},{name:"Connecticut",value:"CT"},{name:"Delaware",value:"DE"},{name:"Florida",value:"FL"},{name:"Georgia",value:"GA"},{name:"Hawaii",value:"HI"},{name:"Idaho",value:"ID"},{name:"Illinois",value:"IL"},{name:"Indiana",value:"IN"},{name:"Iowa",value:"IA"},{name:"Kansas",value:"KS"},{name:"Kentucky",value:"KY"},{name:"Louisiana",value:"LA"},{name:"Maine",value:"ME"},{name:"Maryland",value:"MD"},{name:"Massachusetts",value:"MA"},{name:"Michigan",value:"MI"},{name:"Minnesota",value:"MN"},{name:"Mississippi",value:"MS"},{name:"Missouri",value:"MO"},{name:"Montana",value:"MT"},{name:"Nebraska",value:"NE"},{name:"Nevada",value:"NV"},{name:"New Hampshire",value:"NH"},{name:"New Jersey",value:"NJ"},{name:"New Mexico",value:"NM"},{name:"New York",value:"NY"},{name:"North Carolina",value:"NC"},{name:"North Dakota",value:"ND"},{name:"Ohio",value:"OH"},{name:"Oklahoma",value:"OK"},{name:"Oregon",value:"OR"},{name:"Pennsylvania",value:"PA"},{name:"Rhode Island",value:"RI"},{name:"South Carolina",value:"SC"},{name:"South Dakota",value:"SD"},{name:"Tennessee",value:"TN"},{name:"Texas",value:"TX"},{name:"Utah",value:"UT"},{name:"Vermont",value:"VT"},{name:"Virginia",value:"VA"},{name:"Washington",value:"WA"},{name:"West Virginia",value:"WV"},{name:"Wisconsin",value:"WI"},{name:"Wyoming",value:"WY"}];function B(e){const t={observers:[],handlers:[],timeouts:[],domContentLoadedHandler:null},n=e=>t.observers.push(e),r=(e,n,r,o)=>{e.addEventListener(n,r,o),t.handlers.push({element:e,event:n,handler:r,options:o})},s=e=>t.timeouts.push(e);function i(){document.querySelectorAll("select > div").forEach(e=>{const t=e.parentElement;for(;e.firstChild;)t.appendChild(e.firstChild);e.remove()});a(e,"wrapper").forEach(a=>{!function(n,r,s,a){const i=n.querySelector("select");if(!i)return void console.warn("[select] Missing <select> element in custom select wrapper",n);i.setAttribute("aria-hidden","true"),i.setAttribute("tabindex","-1");const p=i.getAttribute("name")||"custom-select",m=o(e,"list",n),f=o(e,"button",n);if(!m||!f)return void console.warn("[select] Missing required elements (list or button) in custom select wrapper",n);function h(){i.disabled?(f.disabled=!0,f.setAttribute("aria-disabled","true")):(f.disabled=!1,f.removeAttribute("aria-disabled"))}h();const v=m.firstElementChild;if(!v)return void console.warn("[select] Missing option template in custom select list",n);const g=v.cloneNode(!0);v.remove();i.querySelectorAll("option").forEach((e,t)=>{const n=g.cloneNode(!0),r=n.querySelector("span");if(r&&(r.textContent=e.textContent),n.setAttribute("data-value",e.value),n.setAttribute("role","option"),n.setAttribute("id",`${p}-option-${t}`),n.setAttribute("tabindex","-1"),e.selected){n.setAttribute("aria-selected","true");const t=f.querySelector("span")||f;"SPAN"===t.tagName&&(t.textContent=e.textContent),e.value?f.classList.add("is-filled"):f.classList.remove("is-filled")}else n.setAttribute("aria-selected","false");m.appendChild(n)}),m.setAttribute("role","listbox"),m.setAttribute("id",`${p}-listbox`),m.setAttribute("tabindex","-1"),m.setAttribute("aria-hidden","true"),m.inert=!0,f.setAttribute("role","combobox"),f.setAttribute("aria-haspopup","listbox"),f.setAttribute("aria-controls",`${p}-listbox`),f.setAttribute("aria-expanded","false"),f.setAttribute("id",`${p}-button`);const y=n.querySelector("label")||document.querySelector(`label[for="${i.id}"]`);if(y){const e=y.id||`${p}-label`;y.id=e,i.id||(i.id=`${p}-select`),y.setAttribute("for",i.id),f.setAttribute("aria-labelledby",e)}const b=n.querySelector('[data-hs-height="element"]'),w=b||null;let A="",E=null;function L(){return n.classList.contains("is-active")}function k(){const e=L(),t="true"===f.getAttribute("aria-expanded");if(t&&!e&&m.contains(document.activeElement)&&f.focus(),f.setAttribute("aria-expanded",e?"true":"false"),m.setAttribute("aria-hidden",e?"false":"true"),m.inert=!e,e){m.querySelectorAll('[role="option"]').forEach(e=>{e.setAttribute("tabindex","0")}),t||u()}else{f.removeAttribute("aria-activedescendant");m.querySelectorAll('[role="option"]').forEach(e=>{e.setAttribute("tabindex","-1")}),t&&d()}w&&c(w,e,{duration:300,ease:"power2.inOut"})}w&&l(w,L());function x(e){const t=m.querySelectorAll('[role="option"]');e<0||e>=t.length||(t.forEach(e=>{e.classList.remove("focused"),e.setAttribute("tabindex","-1")}),t[e].classList.add("focused"),t[e].setAttribute("tabindex","0"),t[e].focus(),f.setAttribute("aria-activedescendant",t[e].id))}function S(e){if(1!==e.length)return!1;if(null!==E){clearTimeout(E);const e=t.timeouts.indexOf(E);e>-1&&t.timeouts.splice(e,1)}const r=Array.from(m.querySelectorAll('[role="option"]'));if(0===r.length)return!1;A+=e.toLowerCase();const o=r.findIndex(e=>e.classList.contains("focused"));if(1===A.length||A.split("").every(e=>e===A[0])){const e=A[0];let t=o+1;for(let o=0;o<r.length;o++){const s=(t+o)%r.length;if((r[s].querySelector("span")?.textContent||r[s].textContent).toLowerCase().startsWith(e))return x(s),L()||n.classList.add("is-active"),E=setTimeout(C,500),a(E),!0}}else{const e=r.findIndex(e=>(e.querySelector("span")?.textContent||e.textContent).toLowerCase().startsWith(A));if(-1!==e)return x(e),L()||n.classList.add("is-active"),E=setTimeout(C,500),a(E),!0}return E=setTimeout(C,500),a(E),!1}function C(){A="",E=null}function T(e){const t=e.getAttribute("data-value")||"",r=e.querySelector("span")?.textContent||e.textContent;i.value=t,i.dispatchEvent(new Event("change",{bubbles:!0}));const o=f.querySelector("span")||f;"SPAN"===o.tagName&&(o.textContent=r),t?f.classList.add("is-filled"):f.classList.remove("is-filled"),m.querySelectorAll('[role="option"]').forEach(e=>{e.setAttribute("aria-selected","false")}),e.setAttribute("aria-selected","true"),n.classList.remove("is-active")}k();const q=e=>{e.preventDefault(),n.classList.toggle("is-active")};r(f,"click",q);const P=e=>{switch(e.key){case"Enter":e.preventDefault();const t=f.closest("form");if(t){const e=t.querySelector('button[type="submit"], input[type="submit"]')||t.querySelector("button:not([type])");e&&e.click()}break;case" ":e.preventDefault(),n.classList.toggle("is-active");break;case"ArrowDown":e.preventDefault(),L()?x(0):(n.classList.add("is-active"),requestAnimationFrame(()=>{x(0)}));break;case"ArrowUp":if(e.preventDefault(),L()){x(m.querySelectorAll('[role="option"]').length-1)}else n.classList.add("is-active"),requestAnimationFrame(()=>{x(0)});break;case"Escape":L()&&(e.preventDefault(),n.classList.remove("is-active"));break;case"Home":e.preventDefault(),L()||n.classList.add("is-active"),x(0);break;case"End":e.preventDefault(),L()||n.classList.add("is-active");x(m.querySelectorAll('[role="option"]').length-1);break;default:S(e.key)&&e.preventDefault()}};r(f,"keydown",P);const D=e=>{const t=e.target.closest('[role="option"]');if(!t)return;const r=Array.from(m.querySelectorAll('[role="option"]')),o=r.indexOf(t);switch(e.key){case"ArrowDown":e.preventDefault(),o<r.length-1&&x(o+1);break;case"ArrowUp":e.preventDefault(),o>0&&x(o-1);break;case"Enter":e.preventDefault(),T(t);break;case"Escape":e.preventDefault(),n.classList.remove("is-active"),f.focus();break;case"Home":e.preventDefault(),x(0);break;case"End":e.preventDefault(),x(r.length-1);break;default:S(e.key)&&e.preventDefault()}};r(m,"keydown",D);r(m,"click",e=>{const t=e.target.closest('[role="option"]');t&&T(t)});const $=e=>{e.relatedTarget&&n.contains(e.relatedTarget)||!n.classList.contains("is-active")||n.classList.remove("is-active")};r(m,"focusout",$);const F=e=>{n.classList.contains("is-active")&&!n.contains(e.target)&&n.classList.remove("is-active")};r(document,"click",F);const I=new MutationObserver(()=>{k()});I.observe(n,{attributes:!0,attributeFilter:["class"]}),s(I);const N=new MutationObserver(()=>{h()});N.observe(i,{attributes:!0,attributeFilter:["disabled"]}),s(N);const M=()=>{const e=i.options[i.selectedIndex];if(e){const t=m.querySelectorAll('[role="option"]'),n=Array.from(t).find(t=>t.getAttribute("data-value")===e.value);if(n){const r=n.querySelector("span")?.textContent||n.textContent,o=f.querySelector("span")||f;"SPAN"===o.tagName&&(o.textContent=r),e.value?f.classList.add("is-filled"):f.classList.remove("is-filled"),t.forEach(e=>{e.setAttribute("aria-selected","false")}),n.setAttribute("aria-selected","true")}}};r(i,"change",M),r(i,"input",M);const H=i.closest("form");if(H){r(H,"reset",()=>{setTimeout(()=>{M()},0)})}}(a,r,n,s)})}return"loading"===document.readyState?(t.domContentLoadedHandler=i,document.addEventListener("DOMContentLoaded",t.domContentLoadedHandler)):i(),window.initCustomSelects=i,{result:"select initialized",destroy:()=>{t.domContentLoadedHandler&&(document.removeEventListener("DOMContentLoaded",t.domContentLoadedHandler),t.domContentLoadedHandler=null),t.observers.forEach(e=>e.disconnect()),t.observers.length=0,t.timeouts.forEach(e=>clearTimeout(e)),t.timeouts.length=0,t.handlers.forEach(({element:e,event:t,handler:n,options:r})=>{e.removeEventListener(t,n,r)}),t.handlers.length=0,window.initCustomSelects&&delete window.initCustomSelects}}}async function V(e){const t={destroyFunctions:[]};try{const n=function(e){const t=a(e,"states");return t.forEach(e=>{const t=e;if("SELECT"!==t.tagName)return void console.warn('[select-states] data-hs-form-select="states" must be on a <select> element',t);const n=t.querySelectorAll("option");if(1!==n.length)return void console.warn("[select-states] Select must have exactly 1 default template option (placeholder). Found:",n.length,t);const r=n[0];if(""!==r.value)return void console.warn("[select-states] Template option must have empty value for placeholder. Found value:",r.value,t);const o=r.textContent;t.innerHTML="";const s=document.createElement("option");s.value="",s.textContent=o,t.appendChild(s),R.forEach(e=>{const n=document.createElement("option");n.value=e.value,n.textContent=e.name,t.appendChild(n)})}),{result:`states initialized on ${t.length} select${1!==t.length?"s":""}`,destroy:()=>{}}}(e.states);n?.destroy&&t.destroyFunctions.push(n.destroy);const r=B(e["custom-select"]);return r?.destroy&&t.destroyFunctions.push(r.destroy),{result:"select initialized",destroy:()=>{t.destroyFunctions.forEach(e=>{try{e()}catch(t){console.error("[select] Error during cleanup:",t)}}),t.destroyFunctions.length=0}}}catch(n){throw console.error("[select] Initialization failed:",n),t.destroyFunctions.forEach(e=>{try{e()}catch(t){console.error("[select] Error during error cleanup:",t)}}),n}}async function U(){const e=m.default.form,t={destroyFunctions:[]},n=i(e.honeypot,"form-handler");if(document.querySelector(n))try{const n=function(e){const t={honeypotHandler:null},n=t=>{const n=t.target;if("FORM"!==n.tagName)return;const r=o(e,"form-handler",n);return r&&r.value?(t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1):void 0};return t.honeypotHandler=n,document.addEventListener("submit",n,!0),{result:"honeypot initialized",destroy:()=>{t.honeypotHandler&&(document.removeEventListener("submit",t.honeypotHandler,!0),t.honeypotHandler=null)}}}(e.honeypot);n?.destroy&&t.destroyFunctions.push(n.destroy)}catch(c){console.error("[form] Error initializing honeypot:",c)}const r=i(e.range,"wrapper");if(document.querySelector(r))try{const n=W(e.range);n?.destroy&&t.destroyFunctions.push(n.destroy)}catch(c){console.error("[form] Error initializing range:",c)}const s=i(e.test,"wrapper");if(document.querySelector(s))try{const n=function(e){const t={handlers:[]},n=(e,n,r,o)=>{e.addEventListener(n,r,o),t.handlers.push({element:e,event:n,handler:r,options:o})},r=a(e,"wrapper");return r.forEach(t=>{const r=t.querySelector("form");if(!r)return void console.warn('[form-test] No <form> element found within data-hs-form-test="wrapper"',t);const s=o(e,"info",t),a=()=>{const e=new FormData(r),t={};for(const[n,r]of e.entries())t[n]=r;if(s){const e=document.createElement("pre");e.textContent=JSON.stringify(t,null,2),s.innerHTML="",s.appendChild(document.createTextNode("Test mode active - Live form data:")),s.appendChild(e)}};s&&(s.textContent="Test mode active, preventing native submissions",a()),n(r,"input",a),n(r,"change",a);const i=r.querySelector('button[type="submit"], input[type="submit"]')||r.querySelector("button:not([type])");i&&n(i,"click",()=>{console.log("[form-test] Submit button clicked"),requestAnimationFrame(()=>{r.checkValidity()||console.log("[form-test] Browser blocked submission - validation failed")})}),n(r,"submit",e=>{e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),console.log("[form-test] Submission prevented - displaying test results");const t=new FormData(r),n={};for(const[r,s]of t.entries())n[r]=s;const o=`✅ Form would submit successfully at ${(new Date).toLocaleTimeString()}`;if(s){const e=document.createElement("pre");e.textContent=JSON.stringify(n,null,2),s.innerHTML="",s.appendChild(document.createTextNode(o)),s.appendChild(e)}else console.log(o),console.log("Form data:",n);return!1},!0)}),{result:`test initialized on ${r.length} form${1!==r.length?"s":""}`,destroy:()=>{t.handlers.forEach(({element:e,event:t,handler:n,options:r})=>{e.removeEventListener(t,n,r)}),t.handlers.length=0}}}(e.test);n?.destroy&&t.destroyFunctions.push(n.destroy)}catch(c){console.error("[form] Error initializing test:",c)}const l=i(e.select,"wrapper");if(document.querySelector(l))try{const n=await V(e.select);n?.destroy&&t.destroyFunctions.push(n.destroy)}catch(c){console.error("[form] Error initializing select:",c)}return{result:`form initialized (${t.destroyFunctions.length} modules active)`,destroy:()=>{t.destroyFunctions.forEach(e=>{try{e()}catch(c){console.error("[form] Error during cleanup:",c)}}),t.destroyFunctions.length=0}}}async function X(){const e={destroyFunctions:[]},t=m.default;try{const t=await S();t?.destroy&&e.destroyFunctions.push(t.destroy)}catch(a){console.error("[default] Error initializing transition:",a)}const n=[C(t["smooth-scroll"]),F(t.navbar),I(t.accordion),M(),H(t.pagination),O(t.comparison),z(t.tabs),U()],r=await Promise.allSettled(n);r.forEach(t=>{"fulfilled"===t.status&&t.value?.destroy&&e.destroyFunctions.push(t.value.destroy)});const o=r.filter(e=>"fulfilled"===e.status).length,s=r.length-o;return s>0&&console.warn(`[default] ${o+1}/${r.length+1} modules loaded successfully. ${s} failed but won't affect other modules.`),{result:"default initialized",destroy:()=>{e.destroyFunctions.forEach(e=>{try{e()}catch(a){console.error("[default] Error during cleanup:",a)}}),e.destroyFunctions.length=0}}}export{X as init};
2
+ //# sourceMappingURL=hs-default-DL0-aN98.js.map