natura11y 4.2.1 → 4.2.2
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.
package/dist/natura11y.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";let e,t=0,n=document.querySelector(":root");const r=function(r){e=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:null)||document.activeElement,t=window.scrollY,n.style.setProperty("--scroll-position",`-${t}px`),n.classList.add("has-overlay"),r&&o(r)},s=r=>{n.removeAttribute("style"),n.classList.remove("has-overlay"),n.classList.length||n.removeAttribute("class"),window.scrollTo({top:t,behavior:"instant"}),r&&"false"===r.getAttribute("aria-hidden")&&r.setAttribute("aria-hidden",!0),r&&e&&e.focus()},a=new Map,i=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{exclude:n=[]}=t;return[...e.querySelectorAll(["a[href]","area","button","details","frame","iframe","input","object","summary","textarea","select",'[tabindex]:not([tabindex="-1"])',"video","audio"])].filter((e=>!e.hasAttribute("disabled")&&!n.some((t=>e.closest(t)))))},o=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=i(e),r=n[0],o=n[n.length-1];t.setAttribute("tabindex","-1"),t.focus();const l=a.get(e);l&&e.removeEventListener("keydown",l);const d=t=>{switch(t.code){case"Tab":document.activeElement===o&&(t.shiftKey||(t.preventDefault(),r.focus())),document.activeElement===r&&t.shiftKey&&(t.preventDefault(),o.focus());break;case"Escape":s(e)}};e.addEventListener("keydown",d),a.set(e,d)},l=(e,t,n,r)=>{e instanceof Element||e instanceof Document?"string"==typeof t&&t?"string"==typeof n&&n?"function"==typeof r?e.addEventListener(t,(e=>{(e.target.matches(n)||e.target.closest(n))&&r(e)})):console.error("Invalid or missing handler function provided to delegateEvent."):console.error("Invalid or missing selector provided to delegateEvent."):console.error("Invalid or missing event type provided to delegateEvent."):console.error("Invalid parent element provided to delegateEvent.")};class d{#e=(()=>document.querySelectorAll(".accordion"))();#t(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];i(e).forEach((e=>{e.setAttribute("tabindex",t?0:-1)}))}#n(e,t,n,r){e.preventDefault(),e.stopPropagation(),r.forEach((e=>{e.classList.remove("show"),e!==n&&(e.classList.remove("shown"),e.previousElementSibling.setAttribute("aria-expanded",!1),e.setAttribute("aria-hidden",!0),this.#t(e,!1))})),n.classList.toggle("shown");const s="true"===t.getAttribute("aria-expanded");t.setAttribute("aria-expanded",!s),n.setAttribute("aria-hidden",s),this.#t(n,!s);const a=new Event("accTrigger",{bubbles:!0});document.dispatchEvent(a)}#r(e,t,n){const r=r=>{e.preventDefault();let s=n+r;-1===r&&s<0?t[t.length-1].focus():1===r&&s>=t.length?t[0].focus():t[s].focus()};switch(e.code){case"ArrowUp":r(-1);break;case"ArrowDown":r(1)}}init(){this.#e.forEach((e=>{const t=e.querySelectorAll(':scope > [data-accordion="button"]'),n=e.querySelectorAll(':scope > [data-accordion="panel"]');t.forEach(((e,t)=>{const n=e.nextElementSibling,r="true"===e.getAttribute("aria-expanded");e.setAttribute("tabindex",0),n.classList.toggle("show",r),this.#t(n,r)})),l(e,"click",'[data-accordion="button"]',(e=>{const t=e.target,r=t.nextElementSibling;this.#n(e,t,r,n)})),l(e,"keydown",'[data-accordion="button"]',(e=>{if("Enter"===e.code||"Space"===e.code){e.preventDefault();const t=e.target,r=t.nextElementSibling;this.#n(e,t,r,n)}else{const n=Array.from(t).indexOf(e.target);this.#r(e,t,n)}}))}))}}class c{#s='\n <button class="button button--icon-only" aria-label="Close alert" aria-describedby="alert-description">\n <span class="icon icon-close" aria-hidden="true"></span>\n </button>\n ';#a=e=>{e.preventDefault();const t=e.target.closest(".alert--dismissable");t&&(t.classList.add("dismissed"),t.addEventListener("animationend",(()=>{t.remove()})))};#i=e=>{e.insertAdjacentHTML("afterbegin",this.#s),e.setAttribute("role","alert"),e.setAttribute("aria-live","assertive"),e.setAttribute("aria-atomic","true")};init=()=>{document.querySelectorAll(".alert--dismissable").forEach((e=>{this.#i(e)})),l(document,"click",".alert--dismissable .button--icon-only",this.#a)}}class h{#o=null;#l=(()=>window.matchMedia("(prefers-reduced-motion: reduce)"))();#d=(()=>new Map)();#c(e,t){const n=t.querySelector(".icon");e.paused?(e.play(),this.#h(n,t,"pause")):(e.pause(),this.#h(n,t,"play"))}#u(e,t){if(t.hasAttribute("data-check-reduced-motion")){const n=t.querySelector(".icon");this.#l.matches?(e.pause(),this.#h(n,t,"play")):(e.play(),this.#h(n,t,"pause"));const r=this.#d.get(t);r&&this.#l.removeEventListener("change",r);const s=()=>{this.#l.matches?(e.pause(),this.#h(n,t,"play")):(e.play(),this.#h(n,t,"pause"))};this.#l.addEventListener("change",s),this.#d.set(t,s)}}#h(e,t,n){const r="pause"===n;e.classList.toggle("icon-play",!r),e.classList.toggle("icon-pause",r),t.setAttribute("aria-label",r?"Pause video":"Play video"),t.setAttribute("aria-pressed",String(r))}#g(e){const t=e.querySelector("video"),n=e.querySelector(".backdrop__media__control .button");t&&n&&(this.#u(t,n),n.addEventListener("click",(()=>{this.#c(t,n)})))}init=()=>{this.#o=document.querySelectorAll(".backdrop:has(video)"),this.#o.forEach((e=>this.#g(e)))}}class u{#p=(()=>new Map)();#v=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.setAttribute("aria-expanded","false"),t.classList.remove("shown"),n&&e.focus()};#b=(()=>function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.setAttribute("aria-expanded","true"),t.classList.add("shown"),o(t),n&&n.focus()})();#m=(e,t,n)=>r=>{switch(r.code){case"Tab":document.activeElement===n&&r.shiftKey&&(r.preventDefault(),e.focus());break;case"Escape":this.#v(e,t,!0)}};#f=e=>{e.preventDefault();const t=e.target.closest('[data-toggle="collapse"]');if(!t)return;const n=t.getAttribute("aria-controls")?.replace(/^#/,""),r=document.getElementById(n);if(!r)return void console.error(`Collapse target with ID "${n}" not found.`);const s=i(r)[0];"true"===t.getAttribute("aria-expanded")||r.classList.contains("shown")?this.#v(t,r):this.#b(t,r,r.hasAttribute("data-focus-first")?s:null);const a=this.#p.get(r);a&&r.removeEventListener("keydown",a);const o=this.#m(t,r,s);if(r.addEventListener("keydown",o),this.#p.set(r,o),r.addEventListener("transitionend",(()=>{r.classList.contains("shown")||(r.removeEventListener("keydown",o),this.#p.delete(r))})),t.hasAttribute("data-target-close")){const e=t.getAttribute("data-target-close")?.replace(/^#/,""),n=document.getElementById(e),r=document.querySelector(`[aria-controls="${e}"]`);n&&r?this.#v(r,n):console.error(`Could not find close target or close target button for ID ${e}`)}};init=()=>{l(document,"click",'[data-toggle="collapse"]',this.#f)}}class g{#y=["is-invalid"];#L=!1;get invalidClasses(){return this.#y}get formSubmitAttempted(){return this.#L}set formSubmitAttempted(e){this.#L=e}#E(e){const t=((e,t)=>{if("checkbox"===t?.type||"radio"===t?.type){const e=t.name,n=t.closest("form"),r=n?n.querySelectorAll(`input[name="${e}"]`):document.querySelectorAll(`input[name="${e}"]`);return!Array.from(r).some((e=>e.checked))}return!e?.trim()})(e.value,e);return function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:["is-invalid"];e.closest(".form-entry").classList.toggle(n[0],!t),e.setAttribute("aria-invalid",!t)}(e,!t,this.#y),t}_checkIfEmpty(e){return this.#E(e)}_cleanupHandlers(e,t){e.forEach(((e,n)=>{"string"==typeof t?n.removeEventListener(t,e):t(n,e)})),e.clear()}cleanup(){throw new Error("cleanup() must be implemented by subclass")}init(){throw new Error("init() must be implemented by subclass")}}class p extends g{#w=(()=>document.querySelectorAll(".form-entry"))();#x=(()=>new Map)();#A=(()=>new Map)();#H=(()=>new Map)();#k(e,t){this.formSubmitAttempted&&t&&this._checkIfEmpty(e),e.closest(".form-entry").classList.toggle("has-value",""!==e.value)}#S(e,t){if(!t)return;const n=this.#x.get(e);n&&e.removeEventListener("input",n);const r=()=>{this._checkIfEmpty(e)};e.addEventListener("input",r),this.#x.set(e,r)}#C(e,t){const n=e.closest(".form-entry").querySelector(".form-entry__field__input");t&&(e.setAttribute("required","true"),e.setAttribute("aria-required","true")),this.#S(e,t);const r=this.#A.get(e);r&&e.removeEventListener("change",r);const s=()=>this.#k(e,t);if(e.addEventListener("change",s),this.#A.set(e,s),n){const e=this.#H.get(n);e&&n.removeEventListener("click",e);const t=this.#_;n.addEventListener("click",t),this.#H.set(n,t)}}#_(e){const t=e.target.closest(".form-entry__field__input").querySelector("input");"SPAN"===e.target.tagName&&t.focus()}cleanup(){this._cleanupHandlers(this.#x,"input"),this._cleanupHandlers(this.#A,"change"),this._cleanupHandlers(this.#H,"click")}init(){this.#w.forEach((e=>{const t=e.hasAttribute("data-required");e.querySelectorAll("input, select, textarea").forEach((e=>this.#C(e,t))),l(e,"focusin","input, select, textarea",(e=>{this.#T(e,!0)})),l(e,"focusout","input, select, textarea",(e=>{this.#T(e,!1)}))}))}#T(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.target.closest(".form-entry").classList.toggle("is-focused",t)}}class v extends g{#M=(()=>document.querySelectorAll("form[data-validate]"))();#q=(()=>new Map)();#O(e,t){e.forEach((e=>{const n=e.closest(".form-entry"),r=n.querySelector(".form-entry__field__label"),s=n.getAttribute("data-error-message")||"This field is required",a=n.querySelector(".form-entry__help")?.innerHTML||"";t.push([s,a]),n.querySelector(".form-entry__feedback")||r.insertAdjacentHTML("afterend",this.#I(s,a))}))}#I(e,t){return`\n <small class="form-entry__feedback">\n <span class="icon icon-warn" aria-hidden="true"></span>\n <span class="message">\n <strong>${e}</strong> ${t||""}\n </span>\n </small>\n `}#D(e,t){const n=`\n <div class="alert alert--warn font-size-md margin-bottom-4" aria-labelledby="alert-label" aria-describedby="alert-description" role="alert">\n <div class="alert__title h5">\n <span class="icon icon-warn" aria-hidden="true"></span>\n <span class="alert__title__text" id="alert-label">Form Validation Error</span>\n </div>\n <div class="alert__description" id="alert-description">\n <p>${1===t?"There is 1 error":`There are ${t} errors`} in the form. Please review and correct the highlighted fields below.</p>\n </div>\n </div>\n `;e.insertAdjacentHTML("afterbegin",n)}#P(e){const t=e.querySelector(".is-invalid, [data-alert]");if(t){const e=t.querySelector("input, select, textarea");e&&(e.focus(),e.scrollIntoView({behavior:"smooth",block:"center"}))}}#F(e){const t=this.#q.get(e);t&&e.removeEventListener("submit",t);const n=t=>{t.preventDefault();const n=e.querySelector(".alert");n&&n.remove(),this.formSubmitAttempted=!0;const r=[];e.querySelectorAll("input, select, textarea").forEach((e=>{e.hasAttribute("required")&&this._checkIfEmpty(e)}));const s=e.querySelectorAll(":invalid");this.#O(s,r),r.length>0&&(t.preventDefault(),this.#D(e,r.length),this.#P(e))};e.addEventListener("submit",n),this.#q.set(e,n)}cleanup(){this._cleanupHandlers(this.#q,"submit")}init(){this.#M.forEach((e=>this.#F(e)))}}class b extends g{#$=(()=>document.querySelectorAll(".file-upload"))();#B=(()=>new Map)();#N(e){return t=>{const[n]=t.target.files;if(!n)return;const{name:r,size:s}=n,a=s>=1e6?`${(s/1e6).toFixed(2)} MB`:`${(s/1e3).toFixed(2)} KB`,i=e.querySelector(".file-upload__data");i&&i.remove(),e.insertAdjacentHTML("beforeend",`\n <span class="file-upload__data">\n <span class="file-name">${r}</span>\n <span class="file-size">${a}</span>\n </span>\n `)}}dragOver(e){e.preventDefault(),e.target.closest(".form-entry").classList.add("is-focused")}dragOff(e){e.target.closest(".form-entry").classList.remove("is-focused")}dropped(e){return t=>{t.preventDefault(),t.target.closest(".form-entry").classList.remove("is-focused");const n=t.dataTransfer.files;if(n.length>0){const t=e.querySelector('input[type="file"]');t.files=n;const r=new Event("change",{bubbles:!0});t.dispatchEvent(r)}}}#R(e){const t=e.querySelector('input[type="file"]'),n=this.#B.get(e);n&&(t.removeEventListener("change",n.changeHandler),e.removeEventListener("dragenter",n.dragenterHandler),e.removeEventListener("dragover",n.dragoverHandler),e.removeEventListener("dragleave",n.dragleaveHandler),e.removeEventListener("dragend",n.dragendHandler),e.removeEventListener("drop",n.dropHandler));const r=this.#N(e),s=this.dragOver.bind(this),a=this.dragOver.bind(this),i=this.dragOff.bind(this),o=this.dragOff.bind(this),l=this.dropped(e);t.addEventListener("change",r),e.addEventListener("dragenter",s),e.addEventListener("dragover",a),e.addEventListener("dragleave",i),e.addEventListener("dragend",o),e.addEventListener("drop",l),this.#B.set(e,{input:t,changeHandler:r,dragenterHandler:s,dragoverHandler:a,dragleaveHandler:i,dragendHandler:o,dropHandler:l})}cleanup(){this._cleanupHandlers(this.#B,((e,t)=>{t.input.removeEventListener("change",t.changeHandler),e.removeEventListener("dragenter",t.dragenterHandler),e.removeEventListener("dragover",t.dragoverHandler),e.removeEventListener("dragleave",t.dragleaveHandler),e.removeEventListener("dragend",t.dragendHandler),e.removeEventListener("drop",t.dropHandler)}))}init(){this.#$.forEach((e=>this.#R(e)))}}class m{#K=(()=>document.querySelectorAll("[data-lightbox]"))();#V=(()=>new Map)();#z=(()=>new Map)();#U='\n <figure class="lightbox__container" aria-live="polite" aria-atomic="true">\n <div class="lightbox__media"></div> \n <figcaption class="lightbox__caption"></figcaption>\n </figure>\n <div class="lightbox__controls">\n <button class="button button--icon-only" data-lightbox-previous aria-label="Previous">\n <span class="icon icon-arrow-left" aria-hidden="true"></span>\n </button>\n <button class="button button--icon-only" data-lightbox-next aria-label="Next">\n <span class="icon icon-arrow-right" aria-hidden="true"></span>\n </button>\n <button class="button button--icon-only" data-lightbox-close aria-label="Close">\n <span class="icon icon-close" aria-hidden="true"></span>\n </button>\n </div>\n ';#W='\n <video controls tabindex="0">\n <source type="video/mp4">\n </video>\n ';#Q='\n <iframe\n frameborder="0"\n allow="autoplay; fullscreen;"\n allowfullscreen\n controls\n tabindex="0"\n ></iframe>\n ';#j='\n <div class="lightbox__media__loader">\n <span class="icon icon-loading icon--rotate" aria-hidden="true"></span>\n </div>\n <div class="lightbox__media__error" style="display: none;">\n <span class="icon icon-warn" aria-hidden="true"></span>\n <p>Failed to load content. Please try again later.</p>\n </div>\n ';#G='<img src="https://source.unsplash.com/1600x900"/>';#Y=[];#J=(e,t)=>n=>{document.querySelector(".lightbox")||(n.preventDefault(),this.lightbox=this.#X(),this.lightbox.setAttribute("aria-hidden",!1),this.currentLB=e,this.#Z(e),r(this.lightbox,t))};#ee=e=>{if(e.stopPropagation(),e.target!==e.currentTarget&&"click"===e.type)return;const t=this.lightbox.querySelector("[data-lightbox-previous]"),n=this.lightbox.querySelector("[data-lightbox-next]"),r=this.lightbox.querySelector("[data-lightbox-close]");t.removeEventListener("click",this.#te),n.removeEventListener("click",this.#te),r.removeEventListener("click",this.#ee),this.#V.forEach(((e,t)=>{t.removeEventListener("focus",e)})),this.#V.clear(),this.#z.forEach(((e,t)=>{"VIDEO"===t.nodeName?(t.removeEventListener("loadedmetadata",e),t.removeEventListener("loadeddata",e)):t.removeEventListener("load",e)})),this.#z.clear(),s(this.lightbox),this.lightbox.parentElement.removeChild(this.lightbox),window.removeEventListener("keyup",this.#ne)};#re=(()=>{var e=this;return function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e.lightbox.querySelector(".lightbox__caption").style.display=t?"block":"none"}})();#te=e=>{if(e.preventDefault(),e.target.hasAttribute("data-lightbox-previous"))this.#se(-1);else{if(!e.target.hasAttribute("data-lightbox-next"))return;this.#se(1)}};#ne=e=>{if(e.preventDefault(),!(this.#Y.length<=1)||"ArrowLeft"!==e.code&&"ArrowRight"!==e.code)switch(e.code){case"ArrowLeft":this.#se(-1),this.lightbox.querySelector("[data-lightbox-previous]").focus();break;case"ArrowRight":this.#se(1),this.lightbox.querySelector("[data-lightbox-next]").focus();break;case"Escape":this.#ee(e);break;default:return}};#ae=e=>{const t=this.#V.get(e);t&&e.removeEventListener("focus",t);const n=t=>{t.preventDefault(),e.children[0].focus(),i(e.children[0])};e.setAttribute("tabindex",0),e.addEventListener("focus",n),this.#V.set(e,n)};#se(e){this.currentLB+=e,this.currentLB<0?this.currentLB=this.#Y.length-1:this.currentLB>=this.#Y.length&&(this.currentLB=0),this.#Z(this.currentLB)}#Z(e){const t=this.lightbox.querySelector(".lightbox__media"),n=this.lightbox.querySelector(".lightbox__caption");t.innerHTML="";const{lbType:r,lbSrc:s,lbCaption:a}=this.#Y[e],i=null!==a;switch(this.#re(i),r){case"image":this.#ie(t,s);break;case"video":this.#oe(t,s)}this.#ae(t),i&&(n.innerHTML=a),o(this.lightbox)}#ie=(e,t)=>{e.hasAttribute("style")&&e.removeAttribute("style"),e.innerHTML=this.#G;const n=this.#le();e.appendChild(n);const r=e.querySelector("img");return r.src=t,this.#de(r,n),r};#oe=(e,t)=>{const n=/youtube/i.test(t),r=/vimeo/i.test(t);let s;if(n||r)e.innerHTML=this.#Q,s=e.querySelector("iframe"),s.src=t;else{e.innerHTML=this.#W;const n=this.#le();e.appendChild(n),s=e.querySelector("source");const r=e.querySelector("video"),a=this.#z.get(r);a&&r.removeEventListener("loadedmetadata",a);const i=()=>{let t=r.videoWidth,n=r.videoHeight;e.style.maxWidth=`${t}px`,e.style.aspectRatio=`${t} / ${n}`};r.addEventListener("loadedmetadata",i),this.#z.set(r,i),this.#de(s,n),s.src=t}return s};#le=()=>{const e=document.createElement("div");return e.className="lightbox__media__loader",e.innerHTML=this.#j,e};#de=(e,t)=>{const n="SOURCE"===e.nodeName?"loadeddata":"load",r=e.closest("SOURCE"===e.nodeName?"video":"img"),s=this.#z.get(r);s&&r.removeEventListener(n,s);const a=()=>{t&&t.parentNode&&t.parentNode.removeChild(t),null!==this.#Y[this.currentLB].lbCaption&&this.#re(!0)};r.addEventListener(n,a),this.#z.set(r,a),e.onerror=()=>{const n=t.querySelector(".lightbox__media__loader"),r=t.querySelector(".lightbox__media__error");e.style.display="none",this.#re(!1),n.style.display="none",r.style.display="block"}};#X=()=>{const e=document.createElement("div");e.classList.add("lightbox"),e.setAttribute("aria-hidden",!0),e.setAttribute("aria-live","polite"),e.innerHTML=this.#U,document.body.appendChild(e);const t=e.querySelector("[data-lightbox-previous]"),n=e.querySelector("[data-lightbox-next]"),r=e.querySelector("[data-lightbox-close]");return this.#Y.length<=1&&(t.setAttribute("disabled",!0),n.setAttribute("disabled",!0),t.style.display="none",n.style.display="none"),r.addEventListener("click",this.#ee),t.addEventListener("click",this.#te),n.addEventListener("click",this.#te),window.addEventListener("keyup",this.#ne),e};#ce=e=>{let t=null,n="";if(null!==e.querySelector("img")){const r=e.querySelector("img");t=r.src||null,n=r.alt||""}const r=e.getAttribute("data-lightbox")||"image",s=e.getAttribute("data-lightbox-src")||t,a=e.getAttribute("data-lightbox-caption")||null,i=e.getAttribute("data-lightbox-alt")||n;return null===s?(console.error("No source provided for lightbox"),null):{lbType:r,lbSrc:s,lbCaption:a,lbAlt:i}};#he=()=>{this.#K.forEach((e=>{this.#Y.push(this.#ce(e))}))};#ue=()=>{l(document,"click","[data-lightbox]",(e=>{const t=e.target.closest("[data-lightbox]"),n=Array.from(this.#K).indexOf(t);-1!==n&&this.#J(n,t)(e)}))};#ge=()=>{const e=new IntersectionObserver((t=>{t.forEach((t=>{if(t.isIntersecting){const n=t.target,r=n.dataset.lightboxSrc||n.src;if(!r)return;e.unobserve(n);const s=new Image;s.onload=()=>{document.body.appendChild(s)},s.onerror=()=>{console.error(`Failed to load image: ${r}`)},s.src=r,s.style.display="none",this.#Y[Number(n.dataset.index)].hiddenImage=s}}))}),{threshold:.25});Array.from(this.#K).filter((e=>"image"===e.getAttribute("data-lightbox"))).forEach(((t,n)=>{const r=t.querySelector("img");r&&(r.dataset.index=n,e.observe(r))}))};init=()=>{this.#he(),this.#ue(),this.#ge()}}class f{#pe=(()=>new Map)();#ve=(()=>new Map)();#be=this.#me.bind(this);#fe(e,t){const n=n=>{e.querySelector(".modal__content").contains(n.target)||t(n)};window.addEventListener("pointerdown",n),this.#pe.set(e,n)}#ye(e){const t=this.#pe.get(e);t&&(window.removeEventListener("pointerdown",t),this.#pe.delete(e))}#Le(e){const t=e.querySelectorAll("[data-modal-close]"),n=[];t.forEach((t=>{const r=()=>this.#Ee(e);t.addEventListener("click",r),t.setAttribute("aria-label","Close Modal Window"),n.push({element:t,handler:r})})),this.#ve.set(e,n)}#we(e){const t=this.#ve.get(e);t&&(t.forEach((e=>{let{element:t,handler:n}=e;t.removeEventListener("click",n)})),this.#ve.delete(e))}#me(e){"Escape"===e.code&&document.querySelectorAll(".modal.shown").forEach((e=>this.#Ee(e)))}#Ee(e){e.classList.remove("shown"),s(e),this.#ye(e),this.#we(e),window.removeEventListener("keydown",this.#be)}openModal(e){if(!e)return void console.warn("Modal target not found.");e.classList.add("shown"),e.focus();const t=e.querySelector(".modal__content");if(t){if(r(t),e.classList.contains("modal--scroll-all")&&(e.scrollTop=0),this.#we(e),this.#Le(e),"true"===e.dataset.modalCloseOutside){const t=()=>this.#Ee(e);this.#fe(e,t)}window.addEventListener("keydown",this.#be)}else console.warn("Modal content not found.")}init(){l(document,"click",'[data-modal="open"]',(e=>{const t=e.target.getAttribute("aria-controls")?.replace(/^#/,""),n=document.getElementById(t);this.openModal(n)}))}}const y=(e,t,n,r)=>{e.preventDefault();let s=t;switch(e.code){case"ArrowLeft":case"ArrowUp":s=t-1<0?n.length-1:t-1;break;case"ArrowRight":case"ArrowDown":s=t+1>=n.length?0:t+1;break;case"Home":s=0;break;case"End":s=n.length-1;break;default:return}r(s)};class L{#xe=!1;#Ae=400;#He=(()=>document.querySelectorAll(".primary-nav__menu"))();#ke(e){const t=Array.from(e.classList).find((e=>e.startsWith("mega-menu--")));if(!t)return!0;const n=t.split("--")[1],r=(()=>{const e=window.getComputedStyle(document.documentElement).getPropertyValue("--current-bp").trim().replace(/^["']|["']$/g,"");return{value:e,isDesktop:["lg","xl","xxl"].includes(e),isMobile:["sm","md"].includes(e)}})().value,s=["sm","md","lg","xl","xxl"],a=s.indexOf(r),i=s.indexOf(n);return-1!==a&&a>=i}#Se(e,t){this.#xe=!0,e.setAttribute("aria-expanded","true"),t.classList.add("shown"),Array.from(t.classList).some((e=>e.startsWith("mega-menu")))&&this.#ke(t)&&r()}#Ce(e,t){this.#xe=this.#_e(),t.classList.remove("shown"),e.setAttribute("aria-expanded","false"),Array.from(t.classList).some((e=>e.startsWith("mega-menu")))&&this.#ke(t)&&s()}#_e(){return Array.from(document.querySelectorAll('[data-toggle="dropdown"]')).some((e=>{const t=document.getElementById(e.getAttribute("aria-controls"));return t&&t.classList.contains("shown")}))}#Te=e=>{this.#xe&&document.querySelectorAll('[data-toggle="dropdown"]').forEach((t=>{const n=document.getElementById(t.getAttribute("aria-controls"));if(n&&n.classList.contains("shown")){if(n.contains(e.target))return;(t.closest(".nav-link-dropdown")||t).contains(e.target)||this.#Ce(t,n)}}))};#Me=e=>{"Escape"===e.key&&this.#xe&&(document.querySelectorAll('[data-toggle="dropdown"]').forEach((e=>{const t=document.getElementById(e.getAttribute("aria-controls"));t.classList.contains("shown")&&(this.#Ce(e,t),e.focus())})),this.#xe=!1)};#qe=(e,t)=>n=>{if("absolute"!==window.getComputedStyle(t).position)return;const r=n.relatedTarget;!r||t.contains(r)||e.contains(r)||this.#Ce(e,t)};#Oe(e,t){const n=e.closest(".nav-link-dropdown")||e;n._hoverInHandler&&(n.removeEventListener("mouseenter",n._hoverInHandler),delete n._hoverInHandler),t._hoverInHandler&&(t.removeEventListener("mouseenter",t._hoverInHandler),delete t._hoverInHandler),n._hoverOutHandler&&(n.removeEventListener("mouseleave",n._hoverOutHandler),delete n._hoverOutHandler),t._hoverOutHandler&&(t.removeEventListener("mouseleave",t._hoverOutHandler),delete t._hoverOutHandler),e._hoverObserver&&(e._hoverObserver.disconnect(),delete e._hoverObserver),e._hasHoverListeners=!1}init(){l(document,"click",'[data-toggle="dropdown"]',(e=>{const t=e.target,n=t.getAttribute("aria-controls"),r=document.getElementById(n);r?r.classList.contains("shown")?this.#Ce(t,r):this.#Se(t,r):console.warn(`No dropdown menu found for ${n}`)}));const e=()=>{document.querySelectorAll('[data-toggle="dropdown"][data-hover="true"], .nav-link-dropdown [data-toggle="dropdown"]').forEach((e=>{if(e._hasHoverListeners)return;e._hasHoverListeners=!0;const t=e.getAttribute("aria-controls"),n=document.getElementById(t);if(!n)return;let r=!1;e.addEventListener("click",(()=>{r=!0})),e.addEventListener("keydown",(e=>{"Enter"!==e.key&&" "!==e.key&&"ArrowDown"!==e.key&&"ArrowUp"!==e.key||(r=!0)})),n.addEventListener("keydown",(()=>{r=!0}));const s=e.closest(".nav-link-dropdown"),a=s||e;a.addEventListener("mouseenter",a._hoverInHandler=()=>{r||(document.querySelectorAll('[data-toggle="dropdown"][aria-expanded="true"]').forEach((t=>{if(t!==e){const e=t.getAttribute("aria-controls"),n=document.getElementById(e);n&&this.#Ce(t,n)}})),this.#Se(e,n))}),n.addEventListener("mouseenter",n._hoverInHandler=()=>{r||this.#Se(e,n)});const i=()=>{setTimeout((()=>{(s?!s.matches(":hover")&&!n.matches(":hover"):!e.matches(":hover")&&!n.matches(":hover"))&&!r&&(this.#Ce(e,n),r=!1)}),this.#Ae)};a.addEventListener("mouseleave",a._hoverOutHandler=i),n.addEventListener("mouseleave",n._hoverOutHandler=i);const o=new MutationObserver((()=>{n.classList.contains("shown")||(r=!1)}));o.observe(n,{attributes:!0,attributeFilter:["class"]}),e._hoverObserver=o}))},t=()=>{document.querySelectorAll('[data-toggle="dropdown"][data-hover="true"], .nav-link-dropdown [data-toggle="dropdown"]').forEach((e=>{if(!e._hasHoverListeners)return;const t=e.getAttribute("aria-controls"),n=document.getElementById(t);n&&this.#Oe(e,n)}))},n=()=>{const n=Array.from(document.querySelectorAll('[class*="mega-menu"]')).some((e=>this.#ke(e)));window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches&&n?e():t()};n(),window.addEventListener("resize",n),document.querySelectorAll('[data-toggle="dropdown"]').forEach((e=>{const t=e.getAttribute("aria-controls"),n=document.getElementById(t);if(!n)return;const r=this.#qe(e,n);e.addEventListener("focusout",r),n.addEventListener("focusout",r)})),window.addEventListener("click",this.#Te),document.addEventListener("keydown",this.#Me),this.#He.forEach((e=>{l(e,"keydown",":is(button, a)",(t=>{if(!["ArrowLeft","ArrowRight","Home","End"].includes(t.code))return;const n=i(e,{exclude:[".nav__dropdown",'[class*="mega-menu"]']}),r=n.indexOf(t.target);-1!==r&&y(t,r,n,(e=>n[e].focus()))}))}))}}class E{#Ie=(()=>document.querySelectorAll('[class*="table--stack"]'))();#De=(()=>document.querySelectorAll(".table-scroll"))();#Pe=null;#Fe(e){const t=e.querySelectorAll("thead th"),n=e.querySelectorAll("tbody tr");let r=[];t.forEach(((e,t)=>{if(""!==e.textContent){const n=e.textContent.trim();r.push({title:n,id:`header-${t}`}),e.setAttribute("id",`header-${t}`)}})),n.forEach((e=>{e.querySelectorAll("td").forEach(((e,t)=>{e.innerHTML=this.#$e(e.innerHTML),e.setAttribute("data-header",r[t].title),e.setAttribute("aria-labelledby",r[t].id)}))}))}#$e(e){return`\n <div class="td-content">\n ${e}\n </div>\n `}#Be(){this.#De.forEach((e=>{let t=e.querySelector(".table-scroll__container"),n=e.offsetWidth;t.scrollWidth>n?e.setAttribute("data-scroll",!0):e.setAttribute("data-scroll",!1),t.addEventListener("scroll",(()=>{t.scrollLeft>1?t.setAttribute("data-scrolling",!0):t.setAttribute("data-scrolling",!1)}),{passive:!0})}))}#Ne(){clearTimeout(this.#Pe),this.#Pe=setTimeout((()=>{this.#Be()}),150)}init(){this.#Ie.forEach((e=>{this.#Fe(e)})),this.#Be(),window.addEventListener("resize",this.#Ne.bind(this))}destroy(){clearTimeout(this.#Pe)}}class w{#Re=(()=>document.querySelectorAll(".tabs"))();#Ke(e,t){e.forEach((e=>{e.setAttribute("aria-selected","false"),e.setAttribute("tabindex","-1"),e.classList.remove("is-active")})),t.forEach((e=>{e.classList.remove("shown"),e.setAttribute("aria-hidden","true")}))}#Ve(e,t,n){this.#Ke(t,n),e.setAttribute("aria-selected","true"),e.setAttribute("tabindex","0"),e.classList.add("is-active");const r=e.getAttribute("aria-controls"),s=document.getElementById(r);s.classList.add("shown"),s.setAttribute("aria-hidden","false")}init(){this.#Re.forEach((e=>{const t=e.querySelectorAll('[role="tab"]'),n=e.querySelectorAll('[role="tabpanel"]');l(e,"click",'[role="tab"]',(e=>{const r=e.target.closest('[role="tab"]');this.#Ve(r,t,n)})),l(e,"keydown",'[role="tab"]',(e=>{if(!["Enter","Space","ArrowLeft","ArrowRight","Home","End"].includes(e.code))return;const r=e.target.closest('[role="tab"]'),s=Array.from(t).indexOf(r);switch(e.code){case"Enter":case"Space":e.preventDefault(),this.#Ve(r,t,n);break;case"ArrowLeft":case"ArrowRight":case"Home":case"End":y(e,s,t,(e=>{t[e].focus()}))}})),this.#Ve(t[0],t,n)}))}}class x{#ze=(()=>document.querySelectorAll(".track"))();#Ue=null;#We=(()=>new WeakMap)();#Qe(e){return this.#We.has(e)||this.#We.set(e,{panels:e.querySelector(".track__panels"),pagination:e.querySelector("[data-track-pagination]"),liveRegion:e.querySelector(".liveregion")}),this.#We.get(e)}#je(e){this.#We.delete(e)}#Ge(e){return parseInt(getComputedStyle(e).getPropertyValue("--visible-panels"),10)||1}#Ye(e,t){e.classList.toggle("hide-controls",t<=1)}#Je(e){const t=this.#Qe(e),n=t.panels,r=t.pagination,s=this.#Ge(n),a=e.getAttribute("data-track-id");n.setAttribute("tabindex","-1");const i=[];let o=[];Array.from(n.children).forEach(((e,t)=>{const r=`${a}-panel-${t}`;e.setAttribute("id",r),o.push(e),o.length!==s&&t!==n.children.length-1||(i.push([...o]),o=[])})),e.pages=i,e.currentPageIndex=0,r&&(r.innerHTML=i.map(((e,t)=>`\n <li>\n <button\n type="button"\n data-page-index="${t}"\n aria-label="Go To Page ${t+1}"\n ${0===t?'aria-current="true"':""}\n >\n <span class="pagination__number">\n ${t+1}\n </span>\n </button>\n </li>\n `)).join("")),this.#Ye(e,i.length),this.#Xe(e,0)}#Ze(e,t){const n=this.#Qe(e),r=n.pagination?.querySelectorAll("[data-page-index]");r&&r.forEach(((e,n)=>{e.classList.toggle("active",n===t),e.setAttribute("aria-current",n===t?"true":"false")})),this.#et(e,t,e.pages.length)}#Xe(e,t){e.pages.forEach(((e,n)=>{e.forEach((e=>{const r=i(e),s=n===t;e.setAttribute("aria-hidden",s?"false":"true"),r.forEach((e=>{e.setAttribute("tabindex",s?"0":"-1")}))}))}))}#tt(e,t){const n=this.#Qe(e).panels,r=e.pages[t][0];e.currentPageIndex=t,e.isNavigating=!0;const s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;n.scrollTo({left:r.offsetLeft,behavior:s?"auto":"smooth"}),clearTimeout(this.#Ue);const a=s?0:300;this.#Ue=setTimeout((()=>{this.#Ze(e,t),e.isNavigating=!1}),a)}#nt(e){const t=e.currentPageIndex<e.pages.length-1?e.currentPageIndex+1:0;this.#tt(e,t)}#rt(e){const t=e.currentPageIndex>0?e.currentPageIndex-1:e.pages.length-1;this.#tt(e,t)}#st(e){const t=getComputedStyle(e);return parseFloat(t.paddingLeft)||0}#at(e,t){const n=this.#Qe(e).panels,r=new IntersectionObserver((t=>{t.forEach((t=>{if(t.isIntersecting){const r=t.target.id,s=e.pages.findIndex((e=>e.some((e=>e.id===r)))),a=()=>{e.isNavigating||(e.currentPageIndex=s,this.#Ze(e,s))};if(-1!==s){if(n.scrollHandler){const e=n.scrollEventType||"scroll";n.removeEventListener(e,n.scrollHandler)}if("onscrollend"in window)n.scrollEventType="scrollend",n.scrollHandler=a,n.addEventListener("scrollend",a);else{const e=()=>{clearTimeout(this.#Ue),this.#Ue=setTimeout(a,250)};n.scrollEventType="scroll",n.scrollHandler=e,n.addEventListener("scroll",e)}}}}))}),{root:n,threshold:.5,rootMargin:`0px -${.5*t}px`});e.pages.forEach((e=>{r.observe(e[0])})),e.pageObserver=r}#it(e,t){const n=this.#Qe(e).panels,r=new IntersectionObserver((e=>{e.forEach((e=>{const t=i(e.target),n=e.isIntersecting;e.target.setAttribute("aria-hidden",n?"false":"true"),t.forEach((e=>{e.setAttribute("tabindex",n?"0":"-1")}))}))}),{root:n,threshold:.5,rootMargin:`0px -${t}px`});e.pages.flat().forEach((e=>{r.observe(e)})),e.tabbingObserver=r}#ot(e){l(e,"keydown","[data-track-prev], [data-track-next]",(t=>{const n=e.querySelector("[data-track-prev]"),r=e.querySelector("[data-track-next]");"ArrowRight"===t.code?(t.preventDefault(),this.#nt(e),r?.focus()):"ArrowLeft"===t.code&&(t.preventDefault(),this.#rt(e),n?.focus())})),l(e,"keydown",".track__panel",(t=>{if("ArrowRight"!==t.code&&"ArrowLeft"!==t.code)return;t.preventDefault();const n=t.target.closest(".track__panel"),r=e.pages[e.currentPageIndex],s=r.indexOf(n);if(-1===s)return;let a=null;if("ArrowRight"===t.code&&s<r.length-1?a=r[s+1]:"ArrowLeft"===t.code&&s>0&&(a=r[s-1]),a){const e=i(a);e[0]?.focus()}}))}#lt(e){const t=new ResizeObserver((()=>{if(e.isResetting)return;e.isResetting=!0,this.#je(e);const t=this.#Qe(e),n=t.panels;n.scrollLeft=0;const r=t.pagination;if(r&&(r.innerHTML=""),e.pageObserver&&e.pageObserver.disconnect(),e.tabbingObserver&&e.tabbingObserver.disconnect(),n.scrollHandler){const e=n.scrollEventType||"scroll";n.removeEventListener(e,n.scrollHandler),delete n.scrollHandler,delete n.scrollEventType}e.currentPageIndex=0;const s=this.#st(n);this.#Je(e),this.#at(e,s),this.#it(e,s),e.isResetting=!1}));t.observe(e),e.resizeObserver=t}#dt(e){this.#je(e);const t=this.#Qe(e),n=t.panels,r=t.pagination;if(n.scrollLeft=0,r&&(r.innerHTML=""),e.pageObserver&&e.pageObserver.disconnect(),e.tabbingObserver&&e.tabbingObserver.disconnect(),n.scrollHandler){const e=n.scrollEventType||"scroll";n.removeEventListener(e,n.scrollHandler),delete n.scrollHandler,delete n.scrollEventType}e.currentPageIndex=0;const s=this.#st(n);this.#Je(e),this.#ct(e),this.#at(e,s),this.#it(e,s),this.#ot(e),e.resizeObserver||this.#lt(e)}#ue(e){l(e,"click","[data-page-index]",(t=>{const n=t.target.closest("[data-page-index]");if(n){const t=parseInt(n.getAttribute("data-page-index"));this.#tt(e,t)}})),l(e,"click","[data-track-prev]",(()=>{this.#rt(e)})),l(e,"click","[data-track-next]",(()=>{this.#nt(e)}))}#ct(e){let t=this.#Qe(e).liveRegion;t||(t=document.createElement("div"),t.className="liveregion screen-reader-only",t.setAttribute("aria-live","polite"),t.setAttribute("aria-atomic","true"),e.appendChild(t),this.#je(e))}#et(e,t,n){const r=this.#Qe(e).liveRegion;r&&(r.textContent=`Page ${t+1} of ${n}`)}init(){this.#ze.forEach(((e,t)=>{e.setAttribute("data-track-id",`track-${t}`),this.#dt(e),this.#ue(e)}))}destroy(e){["pageObserver","tabbingObserver","resizeObserver"].forEach((t=>{e[t]&&e[t].disconnect()}));const t=this.#Qe(e).panels;if(t?.scrollHandler){const e=t.scrollEventType||"scroll";t.removeEventListener(e,t.scrollHandler),delete t.scrollHandler,delete t.scrollEventType}clearTimeout(this.#Ue)}}document.addEventListener("DOMContentLoaded",(()=>{(new d).init(),(new c).init(),(new h).init(),(new u).init(),(new p).init(),(new v).init(),(new b).init(),(new m).init(),(new f).init(),(new L).init(),(new E).init(),(new w).init(),(new x).init()}))}();
|
|
1
|
+
!function(){"use strict";let e,t,n=0;"undefined"!=typeof document&&(e=document.querySelector(":root"));const r=function(r){t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:null)||document.activeElement,n=window.scrollY,e.style.setProperty("--scroll-position",`-${n}px`),e.classList.add("has-overlay"),r&&o(r)},s=r=>{e.removeAttribute("style"),e.classList.remove("has-overlay"),e.classList.length||e.removeAttribute("class"),window.scrollTo({top:n,behavior:"instant"}),r&&"false"===r.getAttribute("aria-hidden")&&r.setAttribute("aria-hidden",!0),r&&t&&t.focus()},a=new Map,i=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{exclude:n=[]}=t;return[...e.querySelectorAll(["a[href]","area","button","details","frame","iframe","input","object","summary","textarea","select",'[tabindex]:not([tabindex="-1"])',"video","audio"])].filter((e=>!e.hasAttribute("disabled")&&!n.some((t=>e.closest(t)))))},o=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=i(e),r=n[0],o=n[n.length-1];t.setAttribute("tabindex","-1"),t.focus();const l=a.get(e);l&&e.removeEventListener("keydown",l);const d=t=>{switch(t.code){case"Tab":document.activeElement===o&&(t.shiftKey||(t.preventDefault(),r.focus())),document.activeElement===r&&t.shiftKey&&(t.preventDefault(),o.focus());break;case"Escape":s(e)}};e.addEventListener("keydown",d),a.set(e,d)},l=(e,t,n,r)=>{e instanceof Element||e instanceof Document?"string"==typeof t&&t?"string"==typeof n&&n?"function"==typeof r?e.addEventListener(t,(e=>{(e.target.matches(n)||e.target.closest(n))&&r(e)})):console.error("Invalid or missing handler function provided to delegateEvent."):console.error("Invalid or missing selector provided to delegateEvent."):console.error("Invalid or missing event type provided to delegateEvent."):console.error("Invalid parent element provided to delegateEvent.")};class d{#e=(()=>document.querySelectorAll(".accordion"))();#t(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];i(e).forEach((e=>{e.setAttribute("tabindex",t?0:-1)}))}#n(e,t,n,r){e.preventDefault(),e.stopPropagation(),r.forEach((e=>{e.classList.remove("show"),e!==n&&(e.classList.remove("shown"),e.previousElementSibling.setAttribute("aria-expanded",!1),e.setAttribute("aria-hidden",!0),this.#t(e,!1))})),n.classList.toggle("shown");const s="true"===t.getAttribute("aria-expanded");t.setAttribute("aria-expanded",!s),n.setAttribute("aria-hidden",s),this.#t(n,!s);const a=new Event("accTrigger",{bubbles:!0});document.dispatchEvent(a)}#r(e,t,n){const r=r=>{e.preventDefault();let s=n+r;-1===r&&s<0?t[t.length-1].focus():1===r&&s>=t.length?t[0].focus():t[s].focus()};switch(e.code){case"ArrowUp":r(-1);break;case"ArrowDown":r(1)}}init(){this.#e.forEach((e=>{const t=e.querySelectorAll(':scope > [data-accordion="button"]'),n=e.querySelectorAll(':scope > [data-accordion="panel"]');t.forEach(((e,t)=>{const n=e.nextElementSibling,r="true"===e.getAttribute("aria-expanded");e.setAttribute("tabindex",0),n.classList.toggle("show",r),this.#t(n,r)})),l(e,"click",'[data-accordion="button"]',(e=>{const t=e.target,r=t.nextElementSibling;this.#n(e,t,r,n)})),l(e,"keydown",'[data-accordion="button"]',(e=>{if("Enter"===e.code||"Space"===e.code){e.preventDefault();const t=e.target,r=t.nextElementSibling;this.#n(e,t,r,n)}else{const n=Array.from(t).indexOf(e.target);this.#r(e,t,n)}}))}))}}class c{#s='\n <button class="button button--icon-only" aria-label="Close alert" aria-describedby="alert-description">\n <span class="icon icon-close" aria-hidden="true"></span>\n </button>\n ';#a=e=>{e.preventDefault();const t=e.target.closest(".alert--dismissable");t&&(t.classList.add("dismissed"),t.addEventListener("animationend",(()=>{t.remove()})))};#i=e=>{e.insertAdjacentHTML("afterbegin",this.#s),e.setAttribute("role","alert"),e.setAttribute("aria-live","assertive"),e.setAttribute("aria-atomic","true")};init=()=>{document.querySelectorAll(".alert--dismissable").forEach((e=>{this.#i(e)})),l(document,"click",".alert--dismissable .button--icon-only",this.#a)}}class h{#o=null;#l=(()=>window.matchMedia("(prefers-reduced-motion: reduce)"))();#d=(()=>new Map)();#c(e,t){const n=t.querySelector(".icon");e.paused?(e.play(),this.#h(n,t,"pause")):(e.pause(),this.#h(n,t,"play"))}#u(e,t){if(t.hasAttribute("data-check-reduced-motion")){const n=t.querySelector(".icon");this.#l.matches?(e.pause(),this.#h(n,t,"play")):(e.play(),this.#h(n,t,"pause"));const r=this.#d.get(t);r&&this.#l.removeEventListener("change",r);const s=()=>{this.#l.matches?(e.pause(),this.#h(n,t,"play")):(e.play(),this.#h(n,t,"pause"))};this.#l.addEventListener("change",s),this.#d.set(t,s)}}#h(e,t,n){const r="pause"===n;e.classList.toggle("icon-play",!r),e.classList.toggle("icon-pause",r),t.setAttribute("aria-label",r?"Pause video":"Play video"),t.setAttribute("aria-pressed",String(r))}#g(e){const t=e.querySelector("video"),n=e.querySelector(".backdrop__media__control .button");t&&n&&(this.#u(t,n),n.addEventListener("click",(()=>{this.#c(t,n)})))}init=()=>{this.#o=document.querySelectorAll(".backdrop:has(video)"),this.#o.forEach((e=>this.#g(e)))}}class u{#p=(()=>new Map)();#v=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.setAttribute("aria-expanded","false"),t.classList.remove("shown"),n&&e.focus()};#b=(()=>function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.setAttribute("aria-expanded","true"),t.classList.add("shown"),o(t),n&&n.focus()})();#m=(e,t,n)=>r=>{switch(r.code){case"Tab":document.activeElement===n&&r.shiftKey&&(r.preventDefault(),e.focus());break;case"Escape":this.#v(e,t,!0)}};#f=e=>{e.preventDefault();const t=e.target.closest('[data-toggle="collapse"]');if(!t)return;const n=t.getAttribute("aria-controls")?.replace(/^#/,""),r=document.getElementById(n);if(!r)return void console.error(`Collapse target with ID "${n}" not found.`);const s=i(r)[0];"true"===t.getAttribute("aria-expanded")||r.classList.contains("shown")?this.#v(t,r):this.#b(t,r,r.hasAttribute("data-focus-first")?s:null);const a=this.#p.get(r);a&&r.removeEventListener("keydown",a);const o=this.#m(t,r,s);if(r.addEventListener("keydown",o),this.#p.set(r,o),r.addEventListener("transitionend",(()=>{r.classList.contains("shown")||(r.removeEventListener("keydown",o),this.#p.delete(r))})),t.hasAttribute("data-target-close")){const e=t.getAttribute("data-target-close")?.replace(/^#/,""),n=document.getElementById(e),r=document.querySelector(`[aria-controls="${e}"]`);n&&r?this.#v(r,n):console.error(`Could not find close target or close target button for ID ${e}`)}};init=()=>{l(document,"click",'[data-toggle="collapse"]',this.#f)}}class g{#y=["is-invalid"];#L=!1;get invalidClasses(){return this.#y}get formSubmitAttempted(){return this.#L}set formSubmitAttempted(e){this.#L=e}#E(e){const t=((e,t)=>{if("checkbox"===t?.type||"radio"===t?.type){const e=t.name,n=t.closest("form"),r=n?n.querySelectorAll(`input[name="${e}"]`):document.querySelectorAll(`input[name="${e}"]`);return!Array.from(r).some((e=>e.checked))}return!e?.trim()})(e.value,e);return function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:["is-invalid"];e.closest(".form-entry").classList.toggle(n[0],!t),e.setAttribute("aria-invalid",!t)}(e,!t,this.#y),t}_checkIfEmpty(e){return this.#E(e)}_cleanupHandlers(e,t){e.forEach(((e,n)=>{"string"==typeof t?n.removeEventListener(t,e):t(n,e)})),e.clear()}cleanup(){throw new Error("cleanup() must be implemented by subclass")}init(){throw new Error("init() must be implemented by subclass")}}class p extends g{#w=(()=>document.querySelectorAll(".form-entry"))();#x=(()=>new Map)();#A=(()=>new Map)();#H=(()=>new Map)();#k(e,t){this.formSubmitAttempted&&t&&this._checkIfEmpty(e),e.closest(".form-entry").classList.toggle("has-value",""!==e.value)}#S(e,t){if(!t)return;const n=this.#x.get(e);n&&e.removeEventListener("input",n);const r=()=>{this._checkIfEmpty(e)};e.addEventListener("input",r),this.#x.set(e,r)}#C(e,t){const n=e.closest(".form-entry").querySelector(".form-entry__field__input");t&&(e.setAttribute("required","true"),e.setAttribute("aria-required","true")),this.#S(e,t);const r=this.#A.get(e);r&&e.removeEventListener("change",r);const s=()=>this.#k(e,t);if(e.addEventListener("change",s),this.#A.set(e,s),n){const e=this.#H.get(n);e&&n.removeEventListener("click",e);const t=this.#_;n.addEventListener("click",t),this.#H.set(n,t)}}#_(e){const t=e.target.closest(".form-entry__field__input").querySelector("input");"SPAN"===e.target.tagName&&t.focus()}cleanup(){this._cleanupHandlers(this.#x,"input"),this._cleanupHandlers(this.#A,"change"),this._cleanupHandlers(this.#H,"click")}init(){this.#w.forEach((e=>{const t=e.hasAttribute("data-required");e.querySelectorAll("input, select, textarea").forEach((e=>this.#C(e,t))),l(e,"focusin","input, select, textarea",(e=>{this.#T(e,!0)})),l(e,"focusout","input, select, textarea",(e=>{this.#T(e,!1)}))}))}#T(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.target.closest(".form-entry").classList.toggle("is-focused",t)}}class v extends g{#M=(()=>document.querySelectorAll("form[data-validate]"))();#q=(()=>new Map)();#O(e,t){e.forEach((e=>{const n=e.closest(".form-entry"),r=n.querySelector(".form-entry__field__label"),s=n.getAttribute("data-error-message")||"This field is required",a=n.querySelector(".form-entry__help")?.innerHTML||"";t.push([s,a]),n.querySelector(".form-entry__feedback")||r.insertAdjacentHTML("afterend",this.#D(s,a))}))}#D(e,t){return`\n <small class="form-entry__feedback">\n <span class="icon icon-warn" aria-hidden="true"></span>\n <span class="message">\n <strong>${e}</strong> ${t||""}\n </span>\n </small>\n `}#I(e,t){const n=`\n <div class="alert alert--warn font-size-md margin-bottom-4" aria-labelledby="alert-label" aria-describedby="alert-description" role="alert">\n <div class="alert__title h5">\n <span class="icon icon-warn" aria-hidden="true"></span>\n <span class="alert__title__text" id="alert-label">Form Validation Error</span>\n </div>\n <div class="alert__description" id="alert-description">\n <p>${1===t?"There is 1 error":`There are ${t} errors`} in the form. Please review and correct the highlighted fields below.</p>\n </div>\n </div>\n `;e.insertAdjacentHTML("afterbegin",n)}#P(e){const t=e.querySelector(".is-invalid, [data-alert]");if(t){const e=t.querySelector("input, select, textarea");e&&(e.focus(),e.scrollIntoView({behavior:"smooth",block:"center"}))}}#F(e){const t=this.#q.get(e);t&&e.removeEventListener("submit",t);const n=t=>{t.preventDefault();const n=e.querySelector(".alert");n&&n.remove(),this.formSubmitAttempted=!0;const r=[];e.querySelectorAll("input, select, textarea").forEach((e=>{e.hasAttribute("required")&&this._checkIfEmpty(e)}));const s=e.querySelectorAll(":invalid");this.#O(s,r),r.length>0&&(t.preventDefault(),this.#I(e,r.length),this.#P(e))};e.addEventListener("submit",n),this.#q.set(e,n)}cleanup(){this._cleanupHandlers(this.#q,"submit")}init(){this.#M.forEach((e=>this.#F(e)))}}class b extends g{#$=(()=>document.querySelectorAll(".file-upload"))();#B=(()=>new Map)();#N(e){return t=>{const[n]=t.target.files;if(!n)return;const{name:r,size:s}=n,a=s>=1e6?`${(s/1e6).toFixed(2)} MB`:`${(s/1e3).toFixed(2)} KB`,i=e.querySelector(".file-upload__data");i&&i.remove(),e.insertAdjacentHTML("beforeend",`\n <span class="file-upload__data">\n <span class="file-name">${r}</span>\n <span class="file-size">${a}</span>\n </span>\n `)}}dragOver(e){e.preventDefault(),e.target.closest(".form-entry").classList.add("is-focused")}dragOff(e){e.target.closest(".form-entry").classList.remove("is-focused")}dropped(e){return t=>{t.preventDefault(),t.target.closest(".form-entry").classList.remove("is-focused");const n=t.dataTransfer.files;if(n.length>0){const t=e.querySelector('input[type="file"]');t.files=n;const r=new Event("change",{bubbles:!0});t.dispatchEvent(r)}}}#R(e){const t=e.querySelector('input[type="file"]'),n=this.#B.get(e);n&&(t.removeEventListener("change",n.changeHandler),e.removeEventListener("dragenter",n.dragenterHandler),e.removeEventListener("dragover",n.dragoverHandler),e.removeEventListener("dragleave",n.dragleaveHandler),e.removeEventListener("dragend",n.dragendHandler),e.removeEventListener("drop",n.dropHandler));const r=this.#N(e),s=this.dragOver.bind(this),a=this.dragOver.bind(this),i=this.dragOff.bind(this),o=this.dragOff.bind(this),l=this.dropped(e);t.addEventListener("change",r),e.addEventListener("dragenter",s),e.addEventListener("dragover",a),e.addEventListener("dragleave",i),e.addEventListener("dragend",o),e.addEventListener("drop",l),this.#B.set(e,{input:t,changeHandler:r,dragenterHandler:s,dragoverHandler:a,dragleaveHandler:i,dragendHandler:o,dropHandler:l})}cleanup(){this._cleanupHandlers(this.#B,((e,t)=>{t.input.removeEventListener("change",t.changeHandler),e.removeEventListener("dragenter",t.dragenterHandler),e.removeEventListener("dragover",t.dragoverHandler),e.removeEventListener("dragleave",t.dragleaveHandler),e.removeEventListener("dragend",t.dragendHandler),e.removeEventListener("drop",t.dropHandler)}))}init(){this.#$.forEach((e=>this.#R(e)))}}class m{#K=(()=>document.querySelectorAll("[data-lightbox]"))();#V=(()=>new Map)();#z=(()=>new Map)();#U='\n <figure class="lightbox__container" aria-live="polite" aria-atomic="true">\n <div class="lightbox__media"></div> \n <figcaption class="lightbox__caption"></figcaption>\n </figure>\n <div class="lightbox__controls">\n <button class="button button--icon-only" data-lightbox-previous aria-label="Previous">\n <span class="icon icon-arrow-left" aria-hidden="true"></span>\n </button>\n <button class="button button--icon-only" data-lightbox-next aria-label="Next">\n <span class="icon icon-arrow-right" aria-hidden="true"></span>\n </button>\n <button class="button button--icon-only" data-lightbox-close aria-label="Close">\n <span class="icon icon-close" aria-hidden="true"></span>\n </button>\n </div>\n ';#W='\n <video controls tabindex="0">\n <source type="video/mp4">\n </video>\n ';#Q='\n <iframe\n frameborder="0"\n allow="autoplay; fullscreen;"\n allowfullscreen\n controls\n tabindex="0"\n ></iframe>\n ';#j='\n <div class="lightbox__media__loader">\n <span class="icon icon-loading icon--rotate" aria-hidden="true"></span>\n </div>\n <div class="lightbox__media__error" style="display: none;">\n <span class="icon icon-warn" aria-hidden="true"></span>\n <p>Failed to load content. Please try again later.</p>\n </div>\n ';#G='<img src="https://source.unsplash.com/1600x900"/>';#Y=[];#J=(e,t)=>n=>{document.querySelector(".lightbox")||(n.preventDefault(),this.lightbox=this.#X(),this.lightbox.setAttribute("aria-hidden",!1),this.currentLB=e,this.#Z(e),r(this.lightbox,t))};#ee=e=>{if(e.stopPropagation(),e.target!==e.currentTarget&&"click"===e.type)return;const t=this.lightbox.querySelector("[data-lightbox-previous]"),n=this.lightbox.querySelector("[data-lightbox-next]"),r=this.lightbox.querySelector("[data-lightbox-close]");t.removeEventListener("click",this.#te),n.removeEventListener("click",this.#te),r.removeEventListener("click",this.#ee),this.#V.forEach(((e,t)=>{t.removeEventListener("focus",e)})),this.#V.clear(),this.#z.forEach(((e,t)=>{"VIDEO"===t.nodeName?(t.removeEventListener("loadedmetadata",e),t.removeEventListener("loadeddata",e)):t.removeEventListener("load",e)})),this.#z.clear(),s(this.lightbox),this.lightbox.parentElement.removeChild(this.lightbox),window.removeEventListener("keyup",this.#ne)};#re=(()=>{var e=this;return function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e.lightbox.querySelector(".lightbox__caption").style.display=t?"block":"none"}})();#te=e=>{if(e.preventDefault(),e.target.hasAttribute("data-lightbox-previous"))this.#se(-1);else{if(!e.target.hasAttribute("data-lightbox-next"))return;this.#se(1)}};#ne=e=>{if(e.preventDefault(),!(this.#Y.length<=1)||"ArrowLeft"!==e.code&&"ArrowRight"!==e.code)switch(e.code){case"ArrowLeft":this.#se(-1),this.lightbox.querySelector("[data-lightbox-previous]").focus();break;case"ArrowRight":this.#se(1),this.lightbox.querySelector("[data-lightbox-next]").focus();break;case"Escape":this.#ee(e);break;default:return}};#ae=e=>{const t=this.#V.get(e);t&&e.removeEventListener("focus",t);const n=t=>{t.preventDefault(),e.children[0].focus(),i(e.children[0])};e.setAttribute("tabindex",0),e.addEventListener("focus",n),this.#V.set(e,n)};#se(e){this.currentLB+=e,this.currentLB<0?this.currentLB=this.#Y.length-1:this.currentLB>=this.#Y.length&&(this.currentLB=0),this.#Z(this.currentLB)}#Z(e){const t=this.lightbox.querySelector(".lightbox__media"),n=this.lightbox.querySelector(".lightbox__caption");t.innerHTML="";const{lbType:r,lbSrc:s,lbCaption:a}=this.#Y[e],i=null!==a;switch(this.#re(i),r){case"image":this.#ie(t,s);break;case"video":this.#oe(t,s)}this.#ae(t),i&&(n.innerHTML=a),o(this.lightbox)}#ie=(e,t)=>{e.hasAttribute("style")&&e.removeAttribute("style"),e.innerHTML=this.#G;const n=this.#le();e.appendChild(n);const r=e.querySelector("img");return r.src=t,this.#de(r,n),r};#oe=(e,t)=>{const n=/youtube/i.test(t),r=/vimeo/i.test(t);let s;if(n||r)e.innerHTML=this.#Q,s=e.querySelector("iframe"),s.src=t;else{e.innerHTML=this.#W;const n=this.#le();e.appendChild(n),s=e.querySelector("source");const r=e.querySelector("video"),a=this.#z.get(r);a&&r.removeEventListener("loadedmetadata",a);const i=()=>{let t=r.videoWidth,n=r.videoHeight;e.style.maxWidth=`${t}px`,e.style.aspectRatio=`${t} / ${n}`};r.addEventListener("loadedmetadata",i),this.#z.set(r,i),this.#de(s,n),s.src=t}return s};#le=()=>{const e=document.createElement("div");return e.className="lightbox__media__loader",e.innerHTML=this.#j,e};#de=(e,t)=>{const n="SOURCE"===e.nodeName?"loadeddata":"load",r=e.closest("SOURCE"===e.nodeName?"video":"img"),s=this.#z.get(r);s&&r.removeEventListener(n,s);const a=()=>{t&&t.parentNode&&t.parentNode.removeChild(t),null!==this.#Y[this.currentLB].lbCaption&&this.#re(!0)};r.addEventListener(n,a),this.#z.set(r,a),e.onerror=()=>{const n=t.querySelector(".lightbox__media__loader"),r=t.querySelector(".lightbox__media__error");e.style.display="none",this.#re(!1),n.style.display="none",r.style.display="block"}};#X=()=>{const e=document.createElement("div");e.classList.add("lightbox"),e.setAttribute("aria-hidden",!0),e.setAttribute("aria-live","polite"),e.innerHTML=this.#U,document.body.appendChild(e);const t=e.querySelector("[data-lightbox-previous]"),n=e.querySelector("[data-lightbox-next]"),r=e.querySelector("[data-lightbox-close]");return this.#Y.length<=1&&(t.setAttribute("disabled",!0),n.setAttribute("disabled",!0),t.style.display="none",n.style.display="none"),r.addEventListener("click",this.#ee),t.addEventListener("click",this.#te),n.addEventListener("click",this.#te),window.addEventListener("keyup",this.#ne),e};#ce=e=>{let t=null,n="";if(null!==e.querySelector("img")){const r=e.querySelector("img");t=r.src||null,n=r.alt||""}const r=e.getAttribute("data-lightbox")||"image",s=e.getAttribute("data-lightbox-src")||t,a=e.getAttribute("data-lightbox-caption")||null,i=e.getAttribute("data-lightbox-alt")||n;return null===s?(console.error("No source provided for lightbox"),null):{lbType:r,lbSrc:s,lbCaption:a,lbAlt:i}};#he=()=>{this.#K.forEach((e=>{this.#Y.push(this.#ce(e))}))};#ue=()=>{l(document,"click","[data-lightbox]",(e=>{const t=e.target.closest("[data-lightbox]"),n=Array.from(this.#K).indexOf(t);-1!==n&&this.#J(n,t)(e)}))};#ge=()=>{const e=new IntersectionObserver((t=>{t.forEach((t=>{if(t.isIntersecting){const n=t.target,r=n.dataset.lightboxSrc||n.src;if(!r)return;e.unobserve(n);const s=new Image;s.onload=()=>{document.body.appendChild(s)},s.onerror=()=>{console.error(`Failed to load image: ${r}`)},s.src=r,s.style.display="none",this.#Y[Number(n.dataset.index)].hiddenImage=s}}))}),{threshold:.25});Array.from(this.#K).filter((e=>"image"===e.getAttribute("data-lightbox"))).forEach(((t,n)=>{const r=t.querySelector("img");r&&(r.dataset.index=n,e.observe(r))}))};init=()=>{this.#he(),this.#ue(),this.#ge()}}class f{#pe=(()=>new Map)();#ve=(()=>new Map)();#be=this.#me.bind(this);#fe(e,t){const n=n=>{e.querySelector(".modal__content").contains(n.target)||t(n)};window.addEventListener("pointerdown",n),this.#pe.set(e,n)}#ye(e){const t=this.#pe.get(e);t&&(window.removeEventListener("pointerdown",t),this.#pe.delete(e))}#Le(e){const t=e.querySelectorAll("[data-modal-close]"),n=[];t.forEach((t=>{const r=()=>this.#Ee(e);t.addEventListener("click",r),t.setAttribute("aria-label","Close Modal Window"),n.push({element:t,handler:r})})),this.#ve.set(e,n)}#we(e){const t=this.#ve.get(e);t&&(t.forEach((e=>{let{element:t,handler:n}=e;t.removeEventListener("click",n)})),this.#ve.delete(e))}#me(e){"Escape"===e.code&&document.querySelectorAll(".modal.shown").forEach((e=>this.#Ee(e)))}#Ee(e){e.classList.remove("shown"),s(e),this.#ye(e),this.#we(e),window.removeEventListener("keydown",this.#be)}openModal(e){if(!e)return void console.warn("Modal target not found.");e.classList.add("shown"),e.focus();const t=e.querySelector(".modal__content");if(t){if(r(t),e.classList.contains("modal--scroll-all")&&(e.scrollTop=0),this.#we(e),this.#Le(e),"true"===e.dataset.modalCloseOutside){const t=()=>this.#Ee(e);this.#fe(e,t)}window.addEventListener("keydown",this.#be)}else console.warn("Modal content not found.")}init(){l(document,"click",'[data-modal="open"]',(e=>{const t=e.target.getAttribute("aria-controls")?.replace(/^#/,""),n=document.getElementById(t);this.openModal(n)}))}}const y=(e,t,n,r)=>{e.preventDefault();let s=t;switch(e.code){case"ArrowLeft":case"ArrowUp":s=t-1<0?n.length-1:t-1;break;case"ArrowRight":case"ArrowDown":s=t+1>=n.length?0:t+1;break;case"Home":s=0;break;case"End":s=n.length-1;break;default:return}r(s)};class L{#xe=!1;#Ae=400;#He=(()=>document.querySelectorAll(".primary-nav__menu"))();#ke(e){const t=Array.from(e.classList).find((e=>e.startsWith("mega-menu--")));if(!t)return!0;const n=t.split("--")[1],r=(()=>{if("undefined"==typeof window)return{value:"md",isDesktop:!1,isMobile:!0};const e=window.getComputedStyle(document.documentElement).getPropertyValue("--current-bp").trim().replace(/^["']|["']$/g,"");return{value:e,isDesktop:["lg","xl","xxl"].includes(e),isMobile:["sm","md"].includes(e)}})().value,s=["sm","md","lg","xl","xxl"],a=s.indexOf(r),i=s.indexOf(n);return-1!==a&&a>=i}#Se(e,t){this.#xe=!0,e.setAttribute("aria-expanded","true"),t.classList.add("shown"),Array.from(t.classList).some((e=>e.startsWith("mega-menu")))&&this.#ke(t)&&r()}#Ce(e,t){this.#xe=this.#_e(),t.classList.remove("shown"),e.setAttribute("aria-expanded","false"),Array.from(t.classList).some((e=>e.startsWith("mega-menu")))&&this.#ke(t)&&s()}#_e(){return Array.from(document.querySelectorAll('[data-toggle="dropdown"]')).some((e=>{const t=document.getElementById(e.getAttribute("aria-controls"));return t&&t.classList.contains("shown")}))}#Te=e=>{this.#xe&&document.querySelectorAll('[data-toggle="dropdown"]').forEach((t=>{const n=document.getElementById(t.getAttribute("aria-controls"));if(n&&n.classList.contains("shown")){if(n.contains(e.target))return;(t.closest(".nav-link-dropdown")||t).contains(e.target)||this.#Ce(t,n)}}))};#Me=e=>{"Escape"===e.key&&this.#xe&&(document.querySelectorAll('[data-toggle="dropdown"]').forEach((e=>{const t=document.getElementById(e.getAttribute("aria-controls"));t.classList.contains("shown")&&(this.#Ce(e,t),e.focus())})),this.#xe=!1)};#qe=(e,t)=>n=>{if("absolute"!==window.getComputedStyle(t).position)return;const r=n.relatedTarget;!r||t.contains(r)||e.contains(r)||this.#Ce(e,t)};#Oe(e,t){const n=e.closest(".nav-link-dropdown")||e;n._hoverInHandler&&(n.removeEventListener("mouseenter",n._hoverInHandler),delete n._hoverInHandler),t._hoverInHandler&&(t.removeEventListener("mouseenter",t._hoverInHandler),delete t._hoverInHandler),n._hoverOutHandler&&(n.removeEventListener("mouseleave",n._hoverOutHandler),delete n._hoverOutHandler),t._hoverOutHandler&&(t.removeEventListener("mouseleave",t._hoverOutHandler),delete t._hoverOutHandler),e._hoverObserver&&(e._hoverObserver.disconnect(),delete e._hoverObserver),e._hasHoverListeners=!1}init(){l(document,"click",'[data-toggle="dropdown"]',(e=>{const t=e.target,n=t.getAttribute("aria-controls"),r=document.getElementById(n);r?r.classList.contains("shown")?this.#Ce(t,r):this.#Se(t,r):console.warn(`No dropdown menu found for ${n}`)}));const e=()=>{document.querySelectorAll('[data-toggle="dropdown"][data-hover="true"], .nav-link-dropdown [data-toggle="dropdown"]').forEach((e=>{if(e._hasHoverListeners)return;e._hasHoverListeners=!0;const t=e.getAttribute("aria-controls"),n=document.getElementById(t);if(!n)return;let r=!1;e.addEventListener("click",(()=>{r=!0})),e.addEventListener("keydown",(e=>{"Enter"!==e.key&&" "!==e.key&&"ArrowDown"!==e.key&&"ArrowUp"!==e.key||(r=!0)})),n.addEventListener("keydown",(()=>{r=!0}));const s=e.closest(".nav-link-dropdown"),a=s||e;a.addEventListener("mouseenter",a._hoverInHandler=()=>{r||(document.querySelectorAll('[data-toggle="dropdown"][aria-expanded="true"]').forEach((t=>{if(t!==e){const e=t.getAttribute("aria-controls"),n=document.getElementById(e);n&&this.#Ce(t,n)}})),this.#Se(e,n))}),n.addEventListener("mouseenter",n._hoverInHandler=()=>{r||this.#Se(e,n)});const i=()=>{setTimeout((()=>{(s?!s.matches(":hover")&&!n.matches(":hover"):!e.matches(":hover")&&!n.matches(":hover"))&&!r&&(this.#Ce(e,n),r=!1)}),this.#Ae)};a.addEventListener("mouseleave",a._hoverOutHandler=i),n.addEventListener("mouseleave",n._hoverOutHandler=i);const o=new MutationObserver((()=>{n.classList.contains("shown")||(r=!1)}));o.observe(n,{attributes:!0,attributeFilter:["class"]}),e._hoverObserver=o}))},t=()=>{document.querySelectorAll('[data-toggle="dropdown"][data-hover="true"], .nav-link-dropdown [data-toggle="dropdown"]').forEach((e=>{if(!e._hasHoverListeners)return;const t=e.getAttribute("aria-controls"),n=document.getElementById(t);n&&this.#Oe(e,n)}))},n=()=>{const n=Array.from(document.querySelectorAll('[class*="mega-menu"]')).some((e=>this.#ke(e)));window.matchMedia&&window.matchMedia("(hover: hover) and (pointer: fine)").matches&&n?e():t()};n(),window.addEventListener("resize",n),document.querySelectorAll('[data-toggle="dropdown"]').forEach((e=>{const t=e.getAttribute("aria-controls"),n=document.getElementById(t);if(!n)return;const r=this.#qe(e,n);e.addEventListener("focusout",r),n.addEventListener("focusout",r)})),window.addEventListener("click",this.#Te),document.addEventListener("keydown",this.#Me),this.#He.forEach((e=>{l(e,"keydown",":is(button, a)",(t=>{if(!["ArrowLeft","ArrowRight","Home","End"].includes(t.code))return;const n=i(e,{exclude:[".nav__dropdown",'[class*="mega-menu"]']}),r=n.indexOf(t.target);-1!==r&&y(t,r,n,(e=>n[e].focus()))}))}))}}class E{#De=(()=>document.querySelectorAll('[class*="table--stack"]'))();#Ie=(()=>document.querySelectorAll(".table-scroll"))();#Pe=null;#Fe(e){const t=e.querySelectorAll("thead th"),n=e.querySelectorAll("tbody tr");let r=[];t.forEach(((e,t)=>{if(""!==e.textContent){const n=e.textContent.trim();r.push({title:n,id:`header-${t}`}),e.setAttribute("id",`header-${t}`)}})),n.forEach((e=>{e.querySelectorAll("td").forEach(((e,t)=>{e.innerHTML=this.#$e(e.innerHTML),e.setAttribute("data-header",r[t].title),e.setAttribute("aria-labelledby",r[t].id)}))}))}#$e(e){return`\n <div class="td-content">\n ${e}\n </div>\n `}#Be(){this.#Ie.forEach((e=>{let t=e.querySelector(".table-scroll__container"),n=e.offsetWidth;t.scrollWidth>n?e.setAttribute("data-scroll",!0):e.setAttribute("data-scroll",!1),t.addEventListener("scroll",(()=>{t.scrollLeft>1?t.setAttribute("data-scrolling",!0):t.setAttribute("data-scrolling",!1)}),{passive:!0})}))}#Ne(){clearTimeout(this.#Pe),this.#Pe=setTimeout((()=>{this.#Be()}),150)}init(){this.#De.forEach((e=>{this.#Fe(e)})),this.#Be(),window.addEventListener("resize",this.#Ne.bind(this))}destroy(){clearTimeout(this.#Pe)}}class w{#Re=(()=>document.querySelectorAll(".tabs"))();#Ke(e,t){e.forEach((e=>{e.setAttribute("aria-selected","false"),e.setAttribute("tabindex","-1"),e.classList.remove("is-active")})),t.forEach((e=>{e.classList.remove("shown"),e.setAttribute("aria-hidden","true")}))}#Ve(e,t,n){this.#Ke(t,n),e.setAttribute("aria-selected","true"),e.setAttribute("tabindex","0"),e.classList.add("is-active");const r=e.getAttribute("aria-controls"),s=document.getElementById(r);s.classList.add("shown"),s.setAttribute("aria-hidden","false")}init(){this.#Re.forEach((e=>{const t=e.querySelectorAll('[role="tab"]'),n=e.querySelectorAll('[role="tabpanel"]');l(e,"click",'[role="tab"]',(e=>{const r=e.target.closest('[role="tab"]');this.#Ve(r,t,n)})),l(e,"keydown",'[role="tab"]',(e=>{if(!["Enter","Space","ArrowLeft","ArrowRight","Home","End"].includes(e.code))return;const r=e.target.closest('[role="tab"]'),s=Array.from(t).indexOf(r);switch(e.code){case"Enter":case"Space":e.preventDefault(),this.#Ve(r,t,n);break;case"ArrowLeft":case"ArrowRight":case"Home":case"End":y(e,s,t,(e=>{t[e].focus()}))}})),this.#Ve(t[0],t,n)}))}}class x{#ze=(()=>document.querySelectorAll(".track"))();#Ue=null;#We=(()=>new WeakMap)();#Qe(e){return this.#We.has(e)||this.#We.set(e,{panels:e.querySelector(".track__panels"),pagination:e.querySelector("[data-track-pagination]"),liveRegion:e.querySelector(".liveregion")}),this.#We.get(e)}#je(e){this.#We.delete(e)}#Ge(e){return parseInt(getComputedStyle(e).getPropertyValue("--visible-panels"),10)||1}#Ye(e,t){e.classList.toggle("hide-controls",t<=1)}#Je(e){const t=this.#Qe(e),n=t.panels,r=t.pagination,s=this.#Ge(n),a=e.getAttribute("data-track-id");n.setAttribute("tabindex","-1");const i=[];let o=[];Array.from(n.children).forEach(((e,t)=>{const r=`${a}-panel-${t}`;e.setAttribute("id",r),o.push(e),o.length!==s&&t!==n.children.length-1||(i.push([...o]),o=[])})),e.pages=i,e.currentPageIndex=0,r&&(r.innerHTML=i.map(((e,t)=>`\n <li>\n <button\n type="button"\n data-page-index="${t}"\n aria-label="Go To Page ${t+1}"\n ${0===t?'aria-current="true"':""}\n >\n <span class="pagination__number">\n ${t+1}\n </span>\n </button>\n </li>\n `)).join("")),this.#Ye(e,i.length),this.#Xe(e,0)}#Ze(e,t){const n=this.#Qe(e),r=n.pagination?.querySelectorAll("[data-page-index]");r&&r.forEach(((e,n)=>{e.classList.toggle("active",n===t),e.setAttribute("aria-current",n===t?"true":"false")})),this.#et(e,t,e.pages.length)}#Xe(e,t){e.pages.forEach(((e,n)=>{e.forEach((e=>{const r=i(e),s=n===t;e.setAttribute("aria-hidden",s?"false":"true"),r.forEach((e=>{e.setAttribute("tabindex",s?"0":"-1")}))}))}))}#tt(e,t){const n=this.#Qe(e).panels,r=e.pages[t][0];e.currentPageIndex=t,e.isNavigating=!0;const s=window.matchMedia("(prefers-reduced-motion: reduce)").matches;n.scrollTo({left:r.offsetLeft,behavior:s?"auto":"smooth"}),clearTimeout(this.#Ue);const a=s?0:300;this.#Ue=setTimeout((()=>{this.#Ze(e,t),e.isNavigating=!1}),a)}#nt(e){const t=e.currentPageIndex<e.pages.length-1?e.currentPageIndex+1:0;this.#tt(e,t)}#rt(e){const t=e.currentPageIndex>0?e.currentPageIndex-1:e.pages.length-1;this.#tt(e,t)}#st(e){const t=getComputedStyle(e);return parseFloat(t.paddingLeft)||0}#at(e,t){const n=this.#Qe(e).panels,r=new IntersectionObserver((t=>{t.forEach((t=>{if(t.isIntersecting){const r=t.target.id,s=e.pages.findIndex((e=>e.some((e=>e.id===r)))),a=()=>{e.isNavigating||(e.currentPageIndex=s,this.#Ze(e,s))};if(-1!==s){if(n.scrollHandler){const e=n.scrollEventType||"scroll";n.removeEventListener(e,n.scrollHandler)}if("onscrollend"in window)n.scrollEventType="scrollend",n.scrollHandler=a,n.addEventListener("scrollend",a);else{const e=()=>{clearTimeout(this.#Ue),this.#Ue=setTimeout(a,250)};n.scrollEventType="scroll",n.scrollHandler=e,n.addEventListener("scroll",e)}}}}))}),{root:n,threshold:.5,rootMargin:`0px -${.5*t}px`});e.pages.forEach((e=>{r.observe(e[0])})),e.pageObserver=r}#it(e,t){const n=this.#Qe(e).panels,r=new IntersectionObserver((e=>{e.forEach((e=>{const t=i(e.target),n=e.isIntersecting;e.target.setAttribute("aria-hidden",n?"false":"true"),t.forEach((e=>{e.setAttribute("tabindex",n?"0":"-1")}))}))}),{root:n,threshold:.5,rootMargin:`0px -${t}px`});e.pages.flat().forEach((e=>{r.observe(e)})),e.tabbingObserver=r}#ot(e){l(e,"keydown","[data-track-prev], [data-track-next]",(t=>{const n=e.querySelector("[data-track-prev]"),r=e.querySelector("[data-track-next]");"ArrowRight"===t.code?(t.preventDefault(),this.#nt(e),r?.focus()):"ArrowLeft"===t.code&&(t.preventDefault(),this.#rt(e),n?.focus())})),l(e,"keydown",".track__panel",(t=>{if("ArrowRight"!==t.code&&"ArrowLeft"!==t.code)return;t.preventDefault();const n=t.target.closest(".track__panel"),r=e.pages[e.currentPageIndex],s=r.indexOf(n);if(-1===s)return;let a=null;if("ArrowRight"===t.code&&s<r.length-1?a=r[s+1]:"ArrowLeft"===t.code&&s>0&&(a=r[s-1]),a){const e=i(a);e[0]?.focus()}}))}#lt(e){const t=new ResizeObserver((()=>{if(e.isResetting)return;e.isResetting=!0,this.#je(e);const t=this.#Qe(e),n=t.panels;n.scrollLeft=0;const r=t.pagination;if(r&&(r.innerHTML=""),e.pageObserver&&e.pageObserver.disconnect(),e.tabbingObserver&&e.tabbingObserver.disconnect(),n.scrollHandler){const e=n.scrollEventType||"scroll";n.removeEventListener(e,n.scrollHandler),delete n.scrollHandler,delete n.scrollEventType}e.currentPageIndex=0;const s=this.#st(n);this.#Je(e),this.#at(e,s),this.#it(e,s),e.isResetting=!1}));t.observe(e),e.resizeObserver=t}#dt(e){this.#je(e);const t=this.#Qe(e),n=t.panels,r=t.pagination;if(n.scrollLeft=0,r&&(r.innerHTML=""),e.pageObserver&&e.pageObserver.disconnect(),e.tabbingObserver&&e.tabbingObserver.disconnect(),n.scrollHandler){const e=n.scrollEventType||"scroll";n.removeEventListener(e,n.scrollHandler),delete n.scrollHandler,delete n.scrollEventType}e.currentPageIndex=0;const s=this.#st(n);this.#Je(e),this.#ct(e),this.#at(e,s),this.#it(e,s),this.#ot(e),e.resizeObserver||this.#lt(e)}#ue(e){l(e,"click","[data-page-index]",(t=>{const n=t.target.closest("[data-page-index]");if(n){const t=parseInt(n.getAttribute("data-page-index"));this.#tt(e,t)}})),l(e,"click","[data-track-prev]",(()=>{this.#rt(e)})),l(e,"click","[data-track-next]",(()=>{this.#nt(e)}))}#ct(e){let t=this.#Qe(e).liveRegion;t||(t=document.createElement("div"),t.className="liveregion screen-reader-only",t.setAttribute("aria-live","polite"),t.setAttribute("aria-atomic","true"),e.appendChild(t),this.#je(e))}#et(e,t,n){const r=this.#Qe(e).liveRegion;r&&(r.textContent=`Page ${t+1} of ${n}`)}init(){this.#ze.forEach(((e,t)=>{e.setAttribute("data-track-id",`track-${t}`),this.#dt(e),this.#ue(e)}))}destroy(e){["pageObserver","tabbingObserver","resizeObserver"].forEach((t=>{e[t]&&e[t].disconnect()}));const t=this.#Qe(e).panels;if(t?.scrollHandler){const e=t.scrollEventType||"scroll";t.removeEventListener(e,t.scrollHandler),delete t.scrollHandler,delete t.scrollEventType}clearTimeout(this.#Ue)}}document.addEventListener("DOMContentLoaded",(()=>{(new d).init(),(new c).init(),(new h).init(),(new u).init(),(new p).init(),(new v).init(),(new b).init(),(new m).init(),(new f).init(),(new L).init(),(new E).init(),(new w).init(),(new x).init()}))}();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "natura11y",
|
|
3
|
-
"version": "4.2.
|
|
3
|
+
"version": "4.2.2",
|
|
4
4
|
"description": "Natura11y is an open-source design system for creating beautiful web interfaces with a focus on accessible interaction design and front-end development.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"scripts": {
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
export const getCurrentBreakpoint = () => {
|
|
2
|
+
|
|
3
|
+
// SSR guard
|
|
4
|
+
if (typeof window === 'undefined') {
|
|
5
|
+
return {
|
|
6
|
+
value: 'md',
|
|
7
|
+
isDesktop: false,
|
|
8
|
+
isMobile: true,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
|
|
2
12
|
const breakpoint = window
|
|
3
13
|
.getComputedStyle(document.documentElement)
|
|
4
14
|
.getPropertyValue('--current-bp')
|
|
5
15
|
.trim()
|
|
6
|
-
.replace(/^["']|["']$/g, '');
|
|
16
|
+
.replace(/^["']|["']$/g, '');
|
|
7
17
|
|
|
8
18
|
const isDesktop = ['lg', 'xl', 'xxl'].includes(breakpoint);
|
|
9
19
|
const isMobile = ['sm', 'md'].includes(breakpoint);
|
|
@@ -13,9 +13,14 @@ import { focusTrap } from './focus';
|
|
|
13
13
|
//////////////////////////////////////////////
|
|
14
14
|
|
|
15
15
|
let scrollPosition = 0;
|
|
16
|
-
let rootElement
|
|
16
|
+
let rootElement;
|
|
17
17
|
let lastFocusedElement;
|
|
18
18
|
|
|
19
|
+
// SSR guard
|
|
20
|
+
if (typeof document !== 'undefined') {
|
|
21
|
+
rootElement = document.querySelector(':root');
|
|
22
|
+
}
|
|
23
|
+
|
|
19
24
|
export const handleOverlayOpen = (element, triggerElement = null) => {
|
|
20
25
|
lastFocusedElement = triggerElement || document.activeElement;
|
|
21
26
|
|