@qld-gov-au/qgds-bootstrap5 2.1.22 → 2.2.0

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.
@@ -1,3 +1,3 @@
1
1
  "use strict";(()=>{function p(r,t,e){switch(t){case"==":return r==e;case"===":return r===e;case"!=":return r!=e;case"!==":return r!==e;case"<":return r<e;case"<=":return r<=e;case">":return r>e;case">=":return r>=e;case"&&":return r&&e;case"||":return r||e;case"in":return typeof r=="string"&&typeof e=="string"?e.split(",").map(n=>n.trim()).includes(r):!1;case"contains":return typeof r=="string"&&typeof e=="string"?r.toLowerCase().indexOf(e.toLowerCase())>=0:!1;default:return!1}}function c(r){r.registerHelper("contains",function(t,e,n){return t=r.escapeExpression(t),e=r.escapeExpression(e),e.indexOf(t)>-1?n.fn(this):n.inverse(this)}),r.registerHelper("ifCond",function(t,e,n,i){return p(t,e,n)?i.fn(this):i.inverse(this)}),r.registerHelper("cond",(t,e,n)=>p(t,e,n)),r.registerHelper("isType",function(t,e,n){return t===e?n.fn(this):n.inverse(this)}),r.registerHelper("ifAny",function(...t){let e=t.pop();return t.some(n=>!!n)?e.fn(this):e.inverse(this)}),r.registerHelper("ifAll",function(...t){let e=t.pop();return t.every(n=>!!n)?e.fn(this):e.inverse(this)}),r.registerHelper("now",function(){return new Date().toISOString()}),r.registerHelper("formatDate",function(t,e,n){let i;if(t&&(i=new Date(t)),isNaN(i)&&e&&(i=new Date(e)),isNaN(i))return"Invalid Date";var s=["January","February","March","April","May","June","July","August","September","October","November","December"],u=i.getDate(),o=s[i.getMonth()],f=i.getFullYear();switch(n){case"YYYY":return`${f}`;case"MMMM YYYY":return`${o} ${f}`;default:return`${u} ${o} ${f}`}}),r.registerHelper("formatDateOrToday",function(t,e){let n=t||new Date().toISOString();return r.helpers.formatDate(t,n,e)}),r.registerHelper("formatDuration",function(t,e){if(!t)return"";if(typeof t=="string"&&e!=="long")return t;let n="",i=[],s,u,o;if(typeof t=="string"){let f=t.split(":");o=f[0],f.length==2?[u="",o=""]=f:f.length==3&&([s="",u="",o=""]=f)}else[s="",u="",o=""]=t;return e==="long"?(s>0&&i.push(`${s} hour${s>1?"s":""}`),u>0&&i.push(`${u} minute${u>1?"s":""}`),o>0&&i.push(`${o} second${o>1?"s":""}`),n=i.join(" ")):(s>0&&i.push(s.toString().padStart(2,0)),i.push(u.toString().padStart(2,0)),i.push(o.toString().padStart(2,0)),n=i.join(":")),n}),r.registerHelper("isdefined",function(t,e){return t!==void 0&&t!==""?t:e}),r.registerHelper("getClassNames",function(t,e){let n=t.split(",").map(s=>s.trim()),i=[];for(let s=0;s<n.length;s++){let u=n[s];if(e){for(let o=0;o<e.length;o++)if(e[o][u]===!0){i.push(u);break}}}return i.length>0?i.join(" "):""}),r.registerHelper("join",function(t,e){return(!e||typeof e!="string")&&(e=" "),Array.isArray(t)?t.join(e):t}),r.registerHelper("toCamelCase",function(t){return typeof t!="string"?t:t.toLowerCase().replace(/(?:^\w|[A-Z]|\b\w|\s+)/g,(e,n)=>n===0?e.toLowerCase():e.toUpperCase()).replace(/\s+/g,"")})}typeof Handlebars!="undefined"&&c(Handlebars);})();
2
- //# @qld-gov-au/qgds-bootstrap5 - v2.1.22
2
+ //# @qld-gov-au/qgds-bootstrap5 - v2.2.0
3
3
  //# sourceMappingURL=handlebars.helpers.bundle.js.map
@@ -1128,7 +1128,7 @@
1128
1128
  </section>
1129
1129
  {{/each }}
1130
1130
  </div>`;var _=`
1131
- <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.22","branch":"HEAD","tag":"v2.1.22","commit":"823e1a81d563226cc5f1c89939d31e11bfd537e4","majorVersion":"v2"} -->
1131
+ <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.2.0","branch":"HEAD","tag":"v2.2.0","commit":"2bac80bfa04fb8f4c5d0c02e1f621a5bc8cd2a98","majorVersion":"v2"} -->
1132
1132
 
1133
1133
  {{! Select environment, used verbatium if not using predefind key
1134
1134
  cdn := PROD|STAGING|BETA|TEST|DEV|???
@@ -2433,5 +2433,5 @@ cdn := PROD|STAGING|BETA|TEST|DEV|???
2433
2433
  {{! Render the transcript content in an accordion template }}
2434
2434
  </section>
2435
2435
  `;function d(e){e.registerPartial("accordion",f),e.registerPartial("backToTop",p),e.registerPartial("banner",u),e.registerPartial("blockquote",m),e.registerPartial("breadcrumbs",g),e.registerPartial("breadcrumbsWrapper",v),e.registerPartial("button",h),e.registerPartial("callout",b),e.registerPartial("callToAction",L),e.registerPartial("card",H),e.registerPartial("containerLayout",V),e.registerPartial("contentFooter",M),e.registerPartial("contentFooterWrapper",k),e.registerPartial("contentPageWithForm",y),e.registerPartial("contentPageWithSideNavigation",q),e.registerPartial("contentWrapper",Z),e.registerPartial("correctincorrect",x),e.registerPartial("customLinks",w),e.registerPartial("dateinput",T),e.registerPartial("details",S),e.registerPartial("directionLinks",A),e.registerPartial("feedbackForm",D),e.registerPartial("followLinks",P),e.registerPartial("footer",O),e.registerPartial("formcheck",R),e.registerPartial("fullPage",I),e.registerPartial("globalAlert",E),e.registerPartial("head",_),e.registerPartial("header",N),e.registerPartial("headerBrand",G),e.registerPartial("homePage",F),e.registerPartial("icon",Q),e.registerPartial("image",B),e.registerPartial("inpageAlert",j),e.registerPartial("inpagenav",W),e.registerPartial("link",J),e.registerPartial("linkColumns",Y),e.registerPartial("logo",U),e.registerPartial("logoCOADeliveringForQLD",$),e.registerPartial("logoCOALandscape",z),e.registerPartial("logoCOALandscape2Lines",X),e.registerPartial("mainContainerWrapper",K),e.registerPartial("metaDcTerms",e1),e.registerPartial("metaOpenGraph",i1),e.registerPartial("modal",a1),e.registerPartial("navbar",t1),e.registerPartial("pagination",C1),e.registerPartial("promotionalPanel",s1),e.registerPartial("quickexit",l1),e.registerPartial("searchInput",n1),e.registerPartial("select",o1),e.registerPartial("sidenav",r1),e.registerPartial("sidenavWrapper",d1),e.registerPartial("skipLinks",c1),e.registerPartial("spinner",f1),e.registerPartial("table",p1),e.registerPartial("tabs",u1),e.registerPartial("tag",m1),e.registerPartial("textarea",g1),e.registerPartial("textbox",v1),e.registerPartial("typography",h1),e.registerPartial("video",b1)}typeof Handlebars!="undefined"&&d(Handlebars);var L1=!1;function H1(e){typeof e=="undefined"&&console.error("Handlebars.init requires HandleBars"),typeof e!="undefined"?(L1?console.log("HandleBars Helpers And Partials already loaded, loading again"):L1=!0,r(e),d(e)):console.log("Handlebars not found, init failed")}typeof Handlebars!="undefined"&&H1(Handlebars);})();
2436
- //# @qld-gov-au/qgds-bootstrap5 - v2.1.22
2436
+ //# @qld-gov-au/qgds-bootstrap5 - v2.2.0
2437
2437
  //# sourceMappingURL=handlebars.init.min.js.map
@@ -1128,7 +1128,7 @@
1128
1128
  </section>
1129
1129
  {{/each }}
1130
1130
  </div>`;var _=`
1131
- <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.22","branch":"HEAD","tag":"v2.1.22","commit":"823e1a81d563226cc5f1c89939d31e11bfd537e4","majorVersion":"v2"} -->
1131
+ <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.2.0","branch":"HEAD","tag":"v2.2.0","commit":"2bac80bfa04fb8f4c5d0c02e1f621a5bc8cd2a98","majorVersion":"v2"} -->
1132
1132
 
1133
1133
  {{! Select environment, used verbatium if not using predefind key
1134
1134
  cdn := PROD|STAGING|BETA|TEST|DEV|???
@@ -2433,5 +2433,5 @@ cdn := PROD|STAGING|BETA|TEST|DEV|???
2433
2433
  {{! Render the transcript content in an accordion template }}
2434
2434
  </section>
2435
2435
  `;function d(e){e.registerPartial("accordion",f),e.registerPartial("backToTop",p),e.registerPartial("banner",u),e.registerPartial("blockquote",m),e.registerPartial("breadcrumbs",g),e.registerPartial("breadcrumbsWrapper",v),e.registerPartial("button",h),e.registerPartial("callout",b),e.registerPartial("callToAction",L),e.registerPartial("card",H),e.registerPartial("containerLayout",V),e.registerPartial("contentFooter",M),e.registerPartial("contentFooterWrapper",k),e.registerPartial("contentPageWithForm",y),e.registerPartial("contentPageWithSideNavigation",q),e.registerPartial("contentWrapper",Z),e.registerPartial("correctincorrect",x),e.registerPartial("customLinks",w),e.registerPartial("dateinput",T),e.registerPartial("details",S),e.registerPartial("directionLinks",A),e.registerPartial("feedbackForm",D),e.registerPartial("followLinks",P),e.registerPartial("footer",O),e.registerPartial("formcheck",R),e.registerPartial("fullPage",I),e.registerPartial("globalAlert",E),e.registerPartial("head",_),e.registerPartial("header",N),e.registerPartial("headerBrand",G),e.registerPartial("homePage",F),e.registerPartial("icon",Q),e.registerPartial("image",B),e.registerPartial("inpageAlert",j),e.registerPartial("inpagenav",W),e.registerPartial("link",J),e.registerPartial("linkColumns",Y),e.registerPartial("logo",U),e.registerPartial("logoCOADeliveringForQLD",$),e.registerPartial("logoCOALandscape",z),e.registerPartial("logoCOALandscape2Lines",X),e.registerPartial("mainContainerWrapper",K),e.registerPartial("metaDcTerms",e1),e.registerPartial("metaOpenGraph",i1),e.registerPartial("modal",a1),e.registerPartial("navbar",t1),e.registerPartial("pagination",C1),e.registerPartial("promotionalPanel",s1),e.registerPartial("quickexit",l1),e.registerPartial("searchInput",n1),e.registerPartial("select",o1),e.registerPartial("sidenav",r1),e.registerPartial("sidenavWrapper",d1),e.registerPartial("skipLinks",c1),e.registerPartial("spinner",f1),e.registerPartial("table",p1),e.registerPartial("tabs",u1),e.registerPartial("tag",m1),e.registerPartial("textarea",g1),e.registerPartial("textbox",v1),e.registerPartial("typography",h1),e.registerPartial("video",b1)}typeof Handlebars!="undefined"&&d(Handlebars);var L1=!1;function H1(e){typeof e=="undefined"&&console.error("Handlebars.init requires HandleBars"),typeof e!="undefined"?(L1?console.log("HandleBars Helpers And Partials already loaded, loading again"):L1=!0,r(e),d(e)):console.log("Handlebars not found, init failed")}typeof Handlebars!="undefined"&&H1(Handlebars);})();
2436
- //# @qld-gov-au/qgds-bootstrap5 - v2.1.22
2436
+ //# @qld-gov-au/qgds-bootstrap5 - v2.2.0
2437
2437
  //# sourceMappingURL=handlebars.partials.js.map
@@ -1,10 +1,10 @@
1
- "use strict";(()=>{var q=(e,t,o)=>new Promise((n,r)=>{var c=l=>{try{i(o.next(l))}catch(f){r(f)}},s=l=>{try{i(o.throw(l))}catch(f){r(f)}},i=l=>l.done?n(l.value):Promise.resolve(l.value).then(c,s);i((o=o.apply(e,t)).next())});function A(e){try{window.event.cancelBubble=!0,e.stopPropagation()}catch(r){}let t=e.target,n=t.closest(".accordion-group").querySelectorAll(".accordion-button");t.classList.contains("accordion-toggle-btn--closed")?(t.classList.remove("accordion-toggle-btn--closed"),t.classList.add("accordion-toggle-btn--open"),t.textContent="Close all",n.forEach(r=>{r.matches(".collapsed")&&r.click()})):t.classList.contains("accordion-toggle-btn--open")&&(t.classList.remove("accordion-toggle-btn--open"),t.classList.add("accordion-toggle-btn--closed"),t.textContent="Open all",n.forEach(r=>{r.matches(":not(.collapsed)")&&r.click()}))}function T(e){try{window.event.cancelBubble=!0,e.stopPropagation()}catch(n){}let t=e.target.closest(".accordion-group"),o=t.querySelector(".accordion-toggle-btn");o.classList.contains("accordion-toggle-btn--closed")&&t.querySelectorAll(".accordion-button.collapsed").length==0?(o.classList.remove("accordion-toggle-btn--closed"),o.classList.add("accordion-toggle-btn--open"),o.textContent="Close all"):o.classList.contains("accordion-toggle-btn--open")&&t.querySelectorAll(".accordion-button.collapsed").length>0&&(o.classList.remove("accordion-toggle-btn--open"),o.classList.add("accordion-toggle-btn--closed"),o.textContent="Open all")}function E(e){let t=window.location.hash,o=t.substring(1),n=x(t);if(n.length>0){let r=document.querySelector(`#collapse-${o}`),c=!1;if(e&&(e.type==="hashchange"&&e.newURL===e.oldURL||e.type==="click"&&e.target.hash===t)&&e.preventDefault(),r&&r.closest(".accordion-item"))c=r.closest(".accordion-item").querySelector(".accordion-button");else{let s=document.querySelectorAll(".accordion-button");e&&e.type==="click"&&(n=x(e.target.hash)),c=Array.from(s).find(i=>x(i.innerText)===n)}c&&(c.matches(".collapsed")&&c.click(),window.scrollTo(0,c.getBoundingClientRect().top+document.documentElement.scrollTop))}}function x(e){return decodeURI(e.toLowerCase().replace(/[^a-zA-Z0-9/]/g,""))}function B(e){e.preventDefault();let t=e.target,o=t.closest(".video"),n=o.querySelector(".video-embed iframe");if(o.classList.remove("not-ready"),!n.classList.contains("video-custom")){let r=new URL(n.src);r.searchParams.set("autoplay","1"),n.src=r.toString()}n.focus()}function I(e){let t=e.target;t.classList.contains("collapsed")?t.textContent="Show transcript":t.textContent="Hide transcript"}var G=["A","INPUT","BUTTON","SELECT","TEXTAREA","IFRAME","OBJECT","DETAILS"];function J(e){return!e||typeof e!="object"||e.nodeType!==1||e.hasAttribute("disabled")||e.getAttribute("aria-hidden")==="true"?!1:e.hasAttribute("tabindex")||e.hasAttribute("contenteditable")&&e.getAttribute("contenteditable")!=="false"?!0:G.includes(e.tagName)?e.tagName==="A"?!!e.getAttribute("href"):["INPUT","BUTTON","SELECT","TEXTAREA"].includes(e.tagName)?!e.disabled:!0:!1}function Q(e){if(!e)return[];let t=e.querySelectorAll("*");return Array.from(t).filter(o=>J(o))}function C(e,t={}){if(!e)throw new Error("Container element is required for focus trap");let{returnFocusElement:o,onEscape:n}=t,r=!1,c=[],s=null;function i(){c=Q(e)}function l(a){if(!r||c.length===0)return;let p=c[0],h=c[c.length-1],m=document.activeElement;a.shiftKey?(m===p||!e.contains(m))&&(a.preventDefault(),h.focus()):(m===h||!e.contains(m))&&(a.preventDefault(),p.focus())}function f(a){r&&(a.key==="Escape"||a.key==="Esc")&&(a.preventDefault(),typeof n=="function"&&n())}function g(a){a.key==="Tab"?l(a):(a.key==="Escape"||a.key==="Esc")&&f(a)}function d(){r||(s=document.activeElement,i(),document.addEventListener("keydown",g),c.length>0&&c[0].focus(),r=!0)}function u(){if(!r)return;document.removeEventListener("keydown",g);let a=o||s;a&&typeof a.focus=="function"&&a.focus(),r=!1,s=null}return{activate:d,deactivate:u,update:i,get isActive(){return r}}}function D(){let e=document.querySelector(".js-print");e&&e.addEventListener("click",function(t){t.preventDefault(),window.print()})}var U={xs:0,sm:400,md:700,lg:992,xl:1312};var L=()=>window.innerWidth<U.lg;function $(){let e=document.getElementById("main-nav"),t=document.getElementById("overlay"),o=document.getElementById("burgerBtn"),n=document.getElementById("burgerCloseBtn"),r=L(),c=[],s=null;function i(){e!=null&&e.classList.contains("show")&&(n==null||n.click())}function l(){return!s&&e&&(s=C(e,{returnFocusElement:o,onEscape:()=>{i()}})),s}function f(){let d=e==null?void 0:e.querySelectorAll('[data-bs-toggle="dropdown"]');d==null||d.forEach(u=>{let a=u.closest(".dropdown")||u.closest(".nav-item");if(!a)return;let p=a.querySelector(".dropdown-menu");p&&((u==null?void 0:u.tagName)==="A"&&u.addEventListener("keydown",h=>{h.key===" "&&(h.preventDefault(),u.click())}),u.addEventListener("hidden.bs.dropdown",h=>{let m=a.querySelector('a[data-bs-toggle="dropdown"]');m==null||m.classList.remove("show"),p!=null&&p.contains(document.activeElement)&&!(L()||e.classList.contains("vertical"))&&(m==null||m.focus())}))})}e&&f(),t==null||t.addEventListener("click",()=>{i()});let g=d=>{let u=e==null?void 0:e.querySelectorAll("a.dropdown-toggle, a.no-dropdown-toggle");d?(u==null||u.forEach(a=>{a.classList.contains("hasNoLink")||(a.classList.replace("dropdown-toggle","no-dropdown-toggle"),a.removeAttribute("data-bs-toggle"))}),e==null||e.querySelectorAll('[data-is-expanded-on-mobile="true"]').forEach(a=>{a.querySelectorAll(".dropdown-toggle, .dropdown-menu").forEach(p=>{p.classList.add("show")})})):(u==null||u.forEach(a=>{a.classList.replace("no-dropdown-toggle","dropdown-toggle"),a.setAttribute("data-bs-toggle","dropdown")}),e==null||e.querySelectorAll('[data-is-expanded-on-mobile="true"]').forEach(a=>{a.querySelectorAll(".dropdown-toggle, .dropdown-menu").forEach(p=>{p.classList.remove("show")})}),i())};e==null||e.addEventListener("hide.bs.collapse",()=>{t==null||t.classList.remove("show")}),e==null||e.addEventListener("hidden.bs.collapse",()=>{c.forEach(d=>{d.inert=!1}),s&&(s.deactivate(),s=null)}),e==null||e.addEventListener("shown.bs.collapse",()=>{L&&setTimeout(()=>{e!=null&&e.classList.contains("show")&&(c=Array.from(e.parentElement.children).filter(u=>u!==e),c.forEach(u=>{u.inert=!0}),l().activate())},0)}),window.addEventListener("resize",()=>{let d=L();r!==d&&(r=d,g(d))}),g(r)}function N(){let e=5,t=document.querySelector(".breadcrumb");if(!t||t.querySelector(".breadcrumb-toggle"))return;let n=t.querySelectorAll(".breadcrumb-item");if(!n||!n.length)return;let r=t.parentElement;r&&(t.clientWidth>=r.clientWidth&&(e=3),X(n,e))}function X(e,t=5){if(!e||e.length<=t)return;let o=document.createElement("ol");o.classList.add("breadcrumb-vertical"),e.forEach((n,r)=>{var c;if(r>0&&r<e.length-2&&((c=n.querySelector("a"))==null||c.setAttribute("tabindex",-1),o.appendChild(n)),r===0){let s=document.createElement("li"),i=document.createElement("button");s.classList.add("breadcrumb-item","breadcrumb-toggle"),i.setAttribute("aria-label","Expand the breadcrumbs"),i.type="button",i.classList.add("breadcrumb-toggle-link"),i.addEventListener("click",Z),s.appendChild(i),n.after(s)}if(r===e.length-1){let s=document.querySelector(".breadcrumb-toggle");if(s){let i=document.createElement("div");i.classList.add("breadcrumb-collapse-wrapper"),i.appendChild(o),s.append(i),s.addEventListener("focusout",l=>{(!l.relatedTarget||!s.contains(l.relatedTarget))&&i.parentElement.classList.remove("expanded")})}}})}function Z(e){let t=e.target.closest(".breadcrumb");if(!t){console.log("expandMenu: Breadcrumb does not exist.");return}let o=t.querySelectorAll(".breadcrumb-item");if(!o||!o.length){console.log("expandMenu: Breadcrumb does not exist or is empty.");return}if(e.target.parentElement.classList.toggle("expanded"),e.target.parentElement.classList.contains("expanded")){let r=document.querySelector(".breadcrumb-collapse-wrapper");R(0);let c=r.querySelector("a");c&&c.focus()}document.querySelector(".breadcrumb-toggle-link")&&document.addEventListener("click",P)}function P(e){e.stopPropagation();let t=document.querySelector(".breadcrumb-toggle-link"),o=document.querySelector(".breadcrumb-collapse-wrapper");!o.contains(e.target)&&!t.contains(e.target)&&(o.parentElement.classList.remove("expanded"),document.removeEventListener("click",P),R(-1))}function R(e){let t=document.querySelectorAll(".breadcrumb-collapse-wrapper li");t&&t.forEach(o=>{var n;(n=o.querySelector("a"))==null||n.setAttribute("tabindex",e)})}function M(){let e=document.querySelectorAll(".date-container"),t=n=>{if(!(n.target.tagName==="INPUT"&&n.target.type==="text"))return;let r=n.target,{value:c,min:s,max:i,pattern:l}=r,f=r.dataset.previousValue||"";if(i&&parseInt(c)>parseInt(i)){r.dataset.previousValue=r.value=i;return}if(s&&parseInt(c)!==0&&c.length>=s.length&&parseInt(c)<parseInt(s)){r.dataset.previousValue=r.value=s;return}if(c&&c!==""&&parseInt(c)!==0&&!RegExp(l).test(c)){r.value=f;return}r.dataset.previousValue=r.value=r.value.trim()},o=n=>{if(!(n.target.tagName==="INPUT"&&n.target.type==="text"))return;let r=n.target,{min:c,max:s}=r,i=r.minLength||0,l=(r.value||"").trim();if(!l||parseInt(l)===0){r.dataset.previousValue=r.value="";return}if(c&&parseInt(l)<c){r.dataset.previousValue=r.value=c.padStart(i,"0");return}if(s&&parseInt(l)>s){r.dataset.previousValue=r.value=s.padStart(i,"0");return}r.dataset.previousValue=r.value=l.padStart(i,"0")};e.forEach(n=>{n.addEventListener("input",t),n.addEventListener("focusout",o)})}function y(){var e=document.getElementsByClassName("qld-quick-exit"),t=document.querySelector(".qld-quick-exit-button");e.length>0&&typeof t!="undefined"&&t!=null&&(Y(),ee())}function Y(){let e="https://www.google.com.au/";var t=document.querySelector(".qld-quick-exit-button");t.onclick=function(){return V(e)}}function ee(){let e="https://www.google.com.au/";document.addEventListener("keydown",function(t){if(t.keyCode===27)return V(e),t&&(t.preventDefault(),t.returnValue=!1),!1})}function V(e){if(window.open(e,"_blank"),window.location.replace(e),window.history)try{window.history.replaceState({},"","/")}catch(t){t.printStackTrace()}return!1}function H(e){try{e.preventDefault(),e.stopPropagation()}catch(n){console.error("Error in event handling:",n)}let t=document.getElementById("qld-header-search"),o=e.currentTarget;t&&(t.classList.contains("is-open")?(t.classList.remove("is-open"),t.classList.add("is-closed"),o.classList.remove("is-open"),o.classList.add("is-closed"),o.setAttribute("aria-expanded",!1),o.setAttribute("aria-label","Open search"),o.textContent="Search"):(t.classList.remove("is-closed"),t.classList.add("is-open"),o.classList.remove("is-closed"),o.classList.add("is-open"),o.setAttribute("aria-expanded",!0),o.setAttribute("aria-label","Close search"),o.textContent="Close"))}function F(e,t){return q(this,null,function*(){try{let o=yield fetch(e);if(!o.ok)throw new Error("Network response was not ok");return yield o.json()}catch(o){return console.error(`Error fetching ${t}:`,o),{}}})}function k(e,t){let o=t.querySelector(".qld-search-input input"),n=t.querySelector(".suggestions");if(o&&n){let r=e.replace(/\s+/g," ").trim();o.value=r;let c=t.getAttribute("action"),s=o?o.dataset:null,i=new URLSearchParams({query:r,collection:s.collection||"qgov~sp-search",profile:s.profile||"qld",num_ranks:s.numRanks||"10",tiers:s.tiers||"off"}),l=`${c}?${i.toString()}`;window.location.href=l}}function O(e="",t=!1,o){return q(this,null,function*(){let n=o.querySelector(".qld-search-input input"),r=o.querySelector(".suggestions"),c=o.querySelector(".default-suggestions"),s=o.querySelector(".dynamic-suggestions");if(!r||!n)return;if(t){c&&c.classList.remove("d-none"),s&&(s.innerHTML="",s.classList.add("d-none"));return}if(s&&e.length===0){s.innerHTML="",s.classList.add("d-none");return}c==null||c.classList.add("d-none");let i=n?n.dataset:null;if(s){let l=i.suggestions;if(l){let g=i.collection||"qgov~sp-search",d=i.profile||"qld",u=yield F(`${l}?collection=${g}&profile=${d}&fmt=json&alpha=0.5&partial_query=${encodeURIComponent(e)}`,"suggestions");u.length>0?(s.innerHTML=`
1
+ "use strict";(()=>{var S=(e,t,o)=>new Promise((n,r)=>{var i=l=>{try{c(o.next(l))}catch(f){r(f)}},s=l=>{try{c(o.throw(l))}catch(f){r(f)}},c=l=>l.done?n(l.value):Promise.resolve(l.value).then(i,s);c((o=o.apply(e,t)).next())});function k(e){try{window.event.cancelBubble=!0,e.stopPropagation()}catch(r){}let t=e.target,n=t.closest(".accordion-group").querySelectorAll(".accordion-button");t.classList.contains("accordion-toggle-btn--closed")?(t.classList.remove("accordion-toggle-btn--closed"),t.classList.add("accordion-toggle-btn--open"),t.textContent="Close all",n.forEach(r=>{r.matches(".collapsed")&&r.click()})):t.classList.contains("accordion-toggle-btn--open")&&(t.classList.remove("accordion-toggle-btn--open"),t.classList.add("accordion-toggle-btn--closed"),t.textContent="Open all",n.forEach(r=>{r.matches(":not(.collapsed)")&&r.click()}))}function A(e){try{window.event.cancelBubble=!0,e.stopPropagation()}catch(n){}let t=e.target.closest(".accordion-group"),o=t.querySelector(".accordion-toggle-btn");o.classList.contains("accordion-toggle-btn--closed")&&t.querySelectorAll(".accordion-button.collapsed").length==0?(o.classList.remove("accordion-toggle-btn--closed"),o.classList.add("accordion-toggle-btn--open"),o.textContent="Close all"):o.classList.contains("accordion-toggle-btn--open")&&t.querySelectorAll(".accordion-button.collapsed").length>0&&(o.classList.remove("accordion-toggle-btn--open"),o.classList.add("accordion-toggle-btn--closed"),o.textContent="Open all")}function E(e){let t=window.location.hash,o=t.substring(1),n=q(t);if(n.length>0){let r=document.querySelector(`#collapse-${o}`),i=!1;if(e&&(e.type==="hashchange"&&e.newURL===e.oldURL||e.type==="click"&&e.target.hash===t)&&e.preventDefault(),r&&r.closest(".accordion-item"))i=r.closest(".accordion-item").querySelector(".accordion-button");else{let s=document.querySelectorAll(".accordion-button");e&&e.type==="click"&&(n=q(e.target.hash)),i=Array.from(s).find(c=>q(c.innerText)===n)}i&&(i.matches(".collapsed")&&i.click(),window.scrollTo(0,i.getBoundingClientRect().top+document.documentElement.scrollTop))}}function q(e){return decodeURI(e.toLowerCase().replace(/[^a-zA-Z0-9/]/g,""))}function T(e){e.preventDefault();let t=e.target,o=t.closest(".video"),n=o.querySelector(".video-embed iframe");if(o.classList.remove("not-ready"),!n.classList.contains("video-custom")){let r=new URL(n.src);r.searchParams.set("autoplay","1"),n.src=r.toString()}n.focus()}function B(e){let t=e.target;t.classList.contains("collapsed")?t.textContent="Show transcript":t.textContent="Hide transcript"}var G=["A","INPUT","BUTTON","SELECT","TEXTAREA","IFRAME","OBJECT","DETAILS"];function J(e){return!e||typeof e!="object"||e.nodeType!==1||e.hasAttribute("disabled")||e.getAttribute("aria-hidden")==="true"?!1:e.hasAttribute("tabindex")||e.hasAttribute("contenteditable")&&e.getAttribute("contenteditable")!=="false"?!0:G.includes(e.tagName)?e.tagName==="A"?!!e.getAttribute("href"):["INPUT","BUTTON","SELECT","TEXTAREA"].includes(e.tagName)?!e.disabled:!0:!1}function Q(e){if(!e)return[];let t=e.querySelectorAll("*");return Array.from(t).filter(o=>J(o))}function I(e,t={}){if(!e)throw new Error("Container element is required for focus trap");let{returnFocusElement:o,onEscape:n}=t,r=!1,i=[],s=null;function c(){i=Q(e)}function l(a){if(!r||i.length===0)return;let p=i[0],h=i[i.length-1],m=document.activeElement;a.shiftKey?(m===p||!e.contains(m))&&(a.preventDefault(),h.focus()):(m===h||!e.contains(m))&&(a.preventDefault(),p.focus())}function f(a){r&&(a.key==="Escape"||a.key==="Esc")&&(a.preventDefault(),typeof n=="function"&&n())}function g(a){a.key==="Tab"?l(a):(a.key==="Escape"||a.key==="Esc")&&f(a)}function d(){r||(s=document.activeElement,c(),document.addEventListener("keydown",g),i.length>0&&i[0].focus(),r=!0)}function u(){if(!r)return;document.removeEventListener("keydown",g);let a=o||s;a&&typeof a.focus=="function"&&a.focus(),r=!1,s=null}return{activate:d,deactivate:u,update:c,get isActive(){return r}}}function C(){let e=document.querySelector(".js-print");e&&e.addEventListener("click",function(t){t.preventDefault(),window.print()})}var U={xs:0,sm:400,md:700,lg:992,xl:1312};var L=()=>window.innerWidth<U.lg;function D(){let e=document.getElementById("main-nav"),t=document.getElementById("overlay"),o=document.getElementById("burgerBtn"),n=document.getElementById("burgerCloseBtn"),r=L(),i=[],s=null;function c(){e!=null&&e.classList.contains("show")&&(n==null||n.click())}function l(){return!s&&e&&(s=I(e,{returnFocusElement:o,onEscape:()=>{c()}})),s}function f(){let d=e==null?void 0:e.querySelectorAll('[data-bs-toggle="dropdown"]');d==null||d.forEach(u=>{let a=u.closest(".dropdown")||u.closest(".nav-item");if(!a)return;let p=a.querySelector(".dropdown-menu");p&&((u==null?void 0:u.tagName)==="A"&&u.addEventListener("keydown",h=>{h.key===" "&&(h.preventDefault(),u.click())}),u.addEventListener("hidden.bs.dropdown",h=>{let m=a.querySelector('a[data-bs-toggle="dropdown"]');m==null||m.classList.remove("show"),p!=null&&p.contains(document.activeElement)&&!(L()||e.classList.contains("vertical"))&&(m==null||m.focus())}))})}e&&f(),t==null||t.addEventListener("click",()=>{c()});let g=d=>{let u=e==null?void 0:e.querySelectorAll("a.dropdown-toggle, a.no-dropdown-toggle");d?(u==null||u.forEach(a=>{a.classList.contains("hasNoLink")||(a.classList.replace("dropdown-toggle","no-dropdown-toggle"),a.removeAttribute("data-bs-toggle"))}),e==null||e.querySelectorAll('[data-is-expanded-on-mobile="true"]').forEach(a=>{a.querySelectorAll(".dropdown-toggle, .dropdown-menu").forEach(p=>{p.classList.add("show")})})):(u==null||u.forEach(a=>{a.classList.replace("no-dropdown-toggle","dropdown-toggle"),a.setAttribute("data-bs-toggle","dropdown")}),e==null||e.querySelectorAll('[data-is-expanded-on-mobile="true"]').forEach(a=>{a.querySelectorAll(".dropdown-toggle, .dropdown-menu").forEach(p=>{p.classList.remove("show")})}),c())};e==null||e.addEventListener("hide.bs.collapse",()=>{t==null||t.classList.remove("show")}),e==null||e.addEventListener("hidden.bs.collapse",()=>{i.forEach(d=>{d.inert=!1}),s&&(s.deactivate(),s=null)}),e==null||e.addEventListener("shown.bs.collapse",()=>{L&&setTimeout(()=>{e!=null&&e.classList.contains("show")&&(i=Array.from(e.parentElement.children).filter(u=>u!==e),i.forEach(u=>{u.inert=!0}),l().activate())},0)}),window.addEventListener("resize",()=>{let d=L();r!==d&&(r=d,g(d))}),g(r)}function $(){let e=5,t=document.querySelector(".breadcrumb");if(!t||t.querySelector(".breadcrumb-toggle"))return;let n=t.querySelectorAll(".breadcrumb-item");if(!n||!n.length)return;let r=t.parentElement;r&&(t.clientWidth>=r.clientWidth&&(e=3),X(n,e))}function X(e,t=5){if(!e||e.length<=t)return;let o=document.createElement("ol");o.classList.add("breadcrumb-vertical"),e.forEach((n,r)=>{var i;if(r>0&&r<e.length-2&&((i=n.querySelector("a"))==null||i.setAttribute("tabindex",-1),o.appendChild(n)),r===0){let s=document.createElement("li"),c=document.createElement("button");s.classList.add("breadcrumb-item","breadcrumb-toggle"),c.setAttribute("aria-label","Expand the breadcrumbs"),c.type="button",c.classList.add("breadcrumb-toggle-link"),c.addEventListener("click",Z),s.appendChild(c),n.after(s)}if(r===e.length-1){let s=document.querySelector(".breadcrumb-toggle");if(s){let c=document.createElement("div");c.classList.add("breadcrumb-collapse-wrapper"),c.appendChild(o),s.append(c),s.addEventListener("focusout",l=>{(!l.relatedTarget||!s.contains(l.relatedTarget))&&c.parentElement.classList.remove("expanded")})}}})}function Z(e){let t=e.target.closest(".breadcrumb");if(!t){console.log("expandMenu: Breadcrumb does not exist.");return}let o=t.querySelectorAll(".breadcrumb-item");if(!o||!o.length){console.log("expandMenu: Breadcrumb does not exist or is empty.");return}if(e.target.parentElement.classList.toggle("expanded"),e.target.parentElement.classList.contains("expanded")){let r=document.querySelector(".breadcrumb-collapse-wrapper");P(0);let i=r.querySelector("a");i&&i.focus()}document.querySelector(".breadcrumb-toggle-link")&&document.addEventListener("click",N)}function N(e){e.stopPropagation();let t=document.querySelector(".breadcrumb-toggle-link"),o=document.querySelector(".breadcrumb-collapse-wrapper");!o.contains(e.target)&&!t.contains(e.target)&&(o.parentElement.classList.remove("expanded"),document.removeEventListener("click",N),P(-1))}function P(e){let t=document.querySelectorAll(".breadcrumb-collapse-wrapper li");t&&t.forEach(o=>{var n;(n=o.querySelector("a"))==null||n.setAttribute("tabindex",e)})}function R(){let e=document.querySelectorAll(".date-container"),t=n=>{if(!(n.target.tagName==="INPUT"&&n.target.type==="text"))return;let r=n.target,{value:i,min:s,max:c,pattern:l}=r,f=r.dataset.previousValue||"";if(c&&parseInt(i)>parseInt(c)){r.dataset.previousValue=r.value=c;return}if(s&&parseInt(i)!==0&&i.length>=s.length&&parseInt(i)<parseInt(s)){r.dataset.previousValue=r.value=s;return}if(i&&i!==""&&parseInt(i)!==0&&!RegExp(l).test(i)){r.value=f;return}r.dataset.previousValue=r.value=r.value.trim()},o=n=>{if(!(n.target.tagName==="INPUT"&&n.target.type==="text"))return;let r=n.target,{min:i,max:s}=r,c=r.minLength||0,l=(r.value||"").trim();if(!l||parseInt(l)===0){r.dataset.previousValue=r.value="";return}if(i&&parseInt(l)<i){r.dataset.previousValue=r.value=i.padStart(c,"0");return}if(s&&parseInt(l)>s){r.dataset.previousValue=r.value=s.padStart(c,"0");return}r.dataset.previousValue=r.value=l.padStart(c,"0")};e.forEach(n=>{n.addEventListener("input",t),n.addEventListener("focusout",o)})}function M(){var e=document.getElementsByClassName("qld-quick-exit"),t=document.querySelector(".qld-quick-exit-button");e.length>0&&typeof t!="undefined"&&t!=null&&(Y(),document.addEventListener("keydown",ee))}function Y(){let e="https://www.google.com.au/";var t=document.querySelector(".qld-quick-exit-button");t.onclick=function(){return V(e)}}function ee(e){let t="https://www.google.com.au/";if(e.key==="Escape")return V(t),e&&(e.preventDefault(),e.returnValue=!1),!1}function V(e){if(window.open(e,"_blank"),window.location.replace(e),window.history)try{window.history.replaceState({},"","/")}catch(t){t.printStackTrace()}return!1}function H(e){try{e.preventDefault(),e.stopPropagation()}catch(n){console.error("Error in event handling:",n)}let t=document.getElementById("qld-header-search"),o=e.currentTarget;t&&(t.classList.contains("is-open")?(t.classList.remove("is-open"),t.classList.add("is-closed"),o.classList.remove("is-open"),o.classList.add("is-closed"),o.setAttribute("aria-expanded",!1),o.setAttribute("aria-label","Open search"),o.textContent="Search"):(t.classList.remove("is-closed"),t.classList.add("is-open"),o.classList.remove("is-closed"),o.classList.add("is-open"),o.setAttribute("aria-expanded",!0),o.setAttribute("aria-label","Close search"),o.textContent="Close"))}function F(e,t){return S(this,null,function*(){try{let o=yield fetch(e);if(!o.ok)throw new Error("Network response was not ok");return yield o.json()}catch(o){return console.error(`Error fetching ${t}:`,o),{}}})}function x(e,t){let o=t.querySelector(".qld-search-input input"),n=t.querySelector(".suggestions");if(o&&n){let r=e.replace(/\s+/g," ").trim();o.value=r;let i=t.getAttribute("action"),s=o?o.dataset:null,c=new URLSearchParams({query:r,collection:s.collection||"qgov~sp-search",profile:s.profile||"qld",num_ranks:s.numRanks||"10",tiers:s.tiers||"off"}),l=`${i}?${c.toString()}`;window.location.href=l}}function O(e="",t=!1,o){return S(this,null,function*(){let n=o.querySelector(".qld-search-input input"),r=o.querySelector(".suggestions"),i=o.querySelector(".default-suggestions"),s=o.querySelector(".dynamic-suggestions");if(!r||!n)return;if(t){i&&i.classList.remove("d-none"),s&&(s.innerHTML="",s.classList.add("d-none"));return}if(s&&e.length===0){s.innerHTML="",s.classList.add("d-none");return}i==null||i.classList.add("d-none");let c=n?n.dataset:null;if(s){let l=c.suggestions;if(l){let g=c.collection||"qgov~sp-search",d=c.profile||"qld",u=yield F(`${l}?collection=${g}&profile=${d}&fmt=json&alpha=0.5&partial_query=${encodeURIComponent(e)}`,"suggestions");u.length>0?(s.innerHTML=`
2
2
  <div class="suggestions-category">
3
3
  <ul>${u.slice(0,4).map(a=>`<li><a tabindex="0" href="#">${a.replace(new RegExp(`(${e})`,"gi"),"<strong>$1</strong>")}</a></li>`).join("")}</ul>
4
- </div>`,s.classList.remove("d-none"),o.querySelector(".suggestions .dynamic-suggestions").addEventListener("click",a=>{let p=a.target.closest("a");if(p){a.preventDefault();let h=p.getAttribute("href");h&&h!=="#"&&(()=>{try{let b=new URL(h,window.location.origin);return b.protocol==="http:"||b.protocol==="https:"}catch(b){return!1}})()?window.location.href=h:k(p.textContent,o)}})):(s.innerHTML="",s.classList.add("d-none"))}let f=i.resultsUrl;if(f){let g=i.collection||"qgov~sp-search",d=i.profile||"qld",u=yield F(`${f}?collection=${g}&profile=${d}&smeta_sfinder_sand=yes&query=${encodeURIComponent(e)}`,"services");if(u.response.resultPacket&&u.response.resultPacket.results.length>0){let a=s.getAttribute("data-view-more"),p=b=>String(b).replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),h=u.response.resultPacket.results.slice(0,4).map(b=>`<li><a tabindex="0" href="${b.liveUrl}">${b.title}</a></li>`).join(""),m=a?`<li><a tabindex="0" href="${p(a)}" class="view-more">View more</a></li>`:"";s.innerHTML+=`
4
+ </div>`,s.classList.remove("d-none"),o.querySelector(".suggestions .dynamic-suggestions").addEventListener("click",a=>{let p=a.target.closest("a");if(p){a.preventDefault();let h=p.getAttribute("href");h&&h!=="#"&&(()=>{try{let b=new URL(h,window.location.origin);return b.protocol==="http:"||b.protocol==="https:"}catch(b){return!1}})()?window.location.href=h:x(p.textContent,o)}})):(s.innerHTML="",s.classList.add("d-none"))}let f=c.resultsUrl;if(f){let g=c.collection||"qgov~sp-search",d=c.profile||"qld",u=yield F(`${f}?collection=${g}&profile=${d}&smeta_sfinder_sand=yes&query=${encodeURIComponent(e)}`,"services");if(u.response.resultPacket&&u.response.resultPacket.results.length>0){let a=s.getAttribute("data-view-more"),p=b=>String(b).replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),h=u.response.resultPacket.results.slice(0,4).map(b=>`<li><a tabindex="0" href="${b.liveUrl}">${b.title}</a></li>`).join(""),m=a?`<li><a tabindex="0" href="${p(a)}" class="view-more">View more</a></li>`:"";s.innerHTML+=`
5
5
  <div class="suggestions-category feature">
6
6
  <strong class="suggestions-category-label d-block">Related services</strong>
7
7
  <ul>${h}${m}</ul>
8
- </div>`,s.classList.remove("d-none"),o.querySelector(".suggestions .dynamic-suggestions").addEventListener("click",b=>{let v=b.target.closest("a");if(v){b.preventDefault();let w=v.getAttribute("href");w&&w!=="#"&&(()=>{try{let S=new URL(w,window.location.origin);return S.protocol==="http:"||S.protocol==="https:"}catch(S){return!1}})()?window.location.href=w:k(v.textContent,o)}})}}}})}function W(e="",t){let o=t.querySelector(".qld-search-input input"),n=o?o.dataset:null,r=e.trim().replace(/\s+/g," "),c=new URLSearchParams({query:r,collection:n.collection||"qgov~sp-search",profile:n.profile||"qld",num_ranks:n.numRanks||"10",tiers:n.tiers||"off"}),s=`${t.getAttribute("action")}?${c.toString()}`;window.location.href=s}window.selectDynamicSuggestion=(e,t)=>k(e,t);function j(){let e=document.querySelector(".back-to-top .qld-dir-link");e&&(e.onclick=function(t){document.body.scrollTop=0,document.documentElement.scrollTop=0,t.preventDefault()})}function z(){let e=document.querySelectorAll(".qld-tabs");function t(o){let n=o.querySelector(".nav-tabs"),r=o.querySelector(".scroll-left"),c=o.querySelector(".scroll-right"),s=n.scrollWidth;if(n){let i=()=>{n.scrollLeft===0?r.classList.remove("show"):r.classList.add("show"),n.scrollLeft+n.clientWidth>=s?c.classList.remove("show"):c.classList.add("show")};n.addEventListener("scroll",i),i(),c.addEventListener("click",()=>{n.scrollBy({top:0,left:200,behavior:"smooth"})}),r.addEventListener("click",()=>{n.scrollBy({top:0,left:-200,behavior:"smooth"})})}}e.forEach(o=>{t(o)}),window.addEventListener("resize",()=>{e.forEach(o=>{t(o)})})}function K(){document.querySelectorAll(".global-alert").forEach(n=>{let r=n.getAttribute("data-id");if(r&&o(`dismissedAlert-${r}`)||n.classList.remove("d-none"),n.querySelector(".btn-close")){let s=()=>{let i=parseInt(n.getAttribute("data-expiry-days"),10);r&&i&&i>0&&t(`dismissedAlert-${r}`,!0,i),n.classList.add("d-none")};n.addEventListener("closed.bs.alert",s),n.addEventListener("btn-closed",s)}});function t(n,r,c){let s=new Date;s.setTime(s.getTime()+c*24*60*60*1e3);let i={value:r,expiry:s.getTime()};localStorage.setItem(n,JSON.stringify(i))}function o(n){let r=localStorage.getItem(n);if(!r)return null;try{let c=JSON.parse(r);return new Date().getTime()>c.expiry?(localStorage.removeItem(n),null):c.value}catch(c){return localStorage.removeItem(n),null}}}function _(){document.querySelectorAll(".qld-skip-links__item").forEach(t=>{let o=t.getAttribute("href"),n=o.replace(/^#/,"");return document.querySelector(o)?!0:(console.error(`A skip link with label "${t.textContent}" is targeting a non-existent element with id "${n}".`),!1)})}window.addEventListener("click",y,!0);window.addEventListener("keydown",y,!0);window.addEventListener("DOMContentLoaded",()=>{j(),z(),K();let e=document.getElementById("qld-header-toggle-search-button");e&&e.addEventListener("click",H),document.querySelectorAll(".site-search").forEach(i=>{let l=i.querySelector(".qld-search-input input");if(l){let f;l.addEventListener("input",function(g){clearTimeout(f),f=setTimeout(()=>{let d=g.target.value.trim();O(d,d==="",i)},300)}),i.addEventListener("submit",function(g){g.preventDefault();let d=l.value.trim();W(d,i)})}});let o=document.querySelector("header");if(o){let i=window.location.origin+window.location.pathname;o.setAttribute("data-page-url",i)}$(),N(),window.addEventListener("click",y,!0),window.addEventListener("keydown",y,!0),y(),document.querySelectorAll(".accordion-toggle-btn").forEach(function(i){i.addEventListener("click",A),i.closest(".accordion-group").querySelectorAll(".accordion-button").forEach(function(f){f.addEventListener("click",T)})});let r=document.querySelectorAll('a[href^="#"]');E(),window.onhashchange=E,r.forEach(function(i){i.addEventListener("click",E)}),document.querySelectorAll(".video-thumbnail").forEach(function(i){i.addEventListener("click",B)}),document.querySelectorAll(".video .accordion .accordion-button").forEach(function(i){i.addEventListener("click",I)}),D(),M(),_()});})();
9
- //# @qld-gov-au/qgds-bootstrap5 - v2.1.22
8
+ </div>`,s.classList.remove("d-none"),o.querySelector(".suggestions .dynamic-suggestions").addEventListener("click",b=>{let w=b.target.closest("a");if(w){b.preventDefault();let y=w.getAttribute("href");y&&y!=="#"&&(()=>{try{let v=new URL(y,window.location.origin);return v.protocol==="http:"||v.protocol==="https:"}catch(v){return!1}})()?window.location.href=y:x(w.textContent,o)}})}}}})}function W(e="",t){let o=t.querySelector(".qld-search-input input"),n=o?o.dataset:null,r=e.trim().replace(/\s+/g," "),i=new URLSearchParams({query:r,collection:n.collection||"qgov~sp-search",profile:n.profile||"qld",num_ranks:n.numRanks||"10",tiers:n.tiers||"off"}),s=`${t.getAttribute("action")}?${i.toString()}`;window.location.href=s}window.selectDynamicSuggestion=(e,t)=>x(e,t);function j(){let e=document.querySelector(".back-to-top .qld-dir-link");e&&(e.onclick=function(t){document.body.scrollTop=0,document.documentElement.scrollTop=0,t.preventDefault()})}function z(){let e=document.querySelectorAll(".qld-tabs");function t(o){let n=o.querySelector(".nav-tabs"),r=o.querySelector(".scroll-left"),i=o.querySelector(".scroll-right"),s=n.scrollWidth;if(n){let c=()=>{n.scrollLeft===0?r.classList.remove("show"):r.classList.add("show"),n.scrollLeft+n.clientWidth>=s?i.classList.remove("show"):i.classList.add("show")};n.addEventListener("scroll",c),c(),i.addEventListener("click",()=>{n.scrollBy({top:0,left:200,behavior:"smooth"})}),r.addEventListener("click",()=>{n.scrollBy({top:0,left:-200,behavior:"smooth"})})}}e.forEach(o=>{t(o)}),window.addEventListener("resize",()=>{e.forEach(o=>{t(o)})})}function K(){document.querySelectorAll(".global-alert").forEach(n=>{let r=n.getAttribute("data-id");if(r&&o(`dismissedAlert-${r}`)||n.classList.remove("d-none"),n.querySelector(".btn-close")){let s=()=>{let c=parseInt(n.getAttribute("data-expiry-days"),10);r&&c&&c>0&&t(`dismissedAlert-${r}`,!0,c),n.classList.add("d-none")};n.addEventListener("closed.bs.alert",s),n.addEventListener("btn-closed",s)}});function t(n,r,i){let s=new Date;s.setTime(s.getTime()+i*24*60*60*1e3);let c={value:r,expiry:s.getTime()};localStorage.setItem(n,JSON.stringify(c))}function o(n){let r=localStorage.getItem(n);if(!r)return null;try{let i=JSON.parse(r);return new Date().getTime()>i.expiry?(localStorage.removeItem(n),null):i.value}catch(i){return localStorage.removeItem(n),null}}}function _(){document.querySelectorAll(".qld-skip-links__item").forEach(t=>{let o=t.getAttribute("href"),n=o.replace(/^#/,"");return document.querySelector(o)?!0:(console.error(`A skip link with label "${t.textContent}" is targeting a non-existent element with id "${n}".`),!1)})}window.addEventListener("DOMContentLoaded",()=>{j(),z(),K();let e=document.getElementById("qld-header-toggle-search-button");e&&e.addEventListener("click",H),document.querySelectorAll(".site-search").forEach(c=>{let l=c.querySelector(".qld-search-input input");if(l){let f;l.addEventListener("input",function(g){clearTimeout(f),f=setTimeout(()=>{let d=g.target.value.trim();O(d,d==="",c)},300)}),c.addEventListener("submit",function(g){g.preventDefault();let d=l.value.trim();W(d,c)})}});let o=document.querySelector("header");if(o){let c=window.location.origin+window.location.pathname;o.setAttribute("data-page-url",c)}D(),$(),M(),document.querySelectorAll(".accordion-toggle-btn").forEach(function(c){c.addEventListener("click",k),c.closest(".accordion-group").querySelectorAll(".accordion-button").forEach(function(f){f.addEventListener("click",A)})});let r=document.querySelectorAll('a[href^="#"]');E(),window.onhashchange=E,r.forEach(function(c){c.addEventListener("click",E)}),document.querySelectorAll(".video-thumbnail").forEach(function(c){c.addEventListener("click",T)}),document.querySelectorAll(".video .accordion .accordion-button").forEach(function(c){c.addEventListener("click",B)}),C(),R(),_()});})();
9
+ //# @qld-gov-au/qgds-bootstrap5 - v2.2.0
10
10
  //# sourceMappingURL=qld.bootstrap.min.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/bs5/accordion/accordion.functions.js", "../../../src/components/bs5/video/video.functions.js", "../../../src/js/utils.js", "../../../src/js/constants.js", "../../../src/components/bs5/navbar/navbar.functions.js", "../../../src/components/bs5/breadcrumbs/breadcrumbs.functions.js", "../../../src/components/bs5/dateinput/dateinput.functions.js", "../../../src/components/bs5/quickexit/quickexit.functions.js", "../../../src/components/bs5/header/header.functions.js", "../../../src/components/bs5/searchInput/search.functions.js", "../../../src/components/bs5/backToTop/backToTop.functions.js", "../../../src/components/bs5/tabs/tabs.functions.js", "../../../src/components/bs5/globalAlert/globalAlert.function.js", "../../../src/components/bs5/skiplinks/skipLinks.functions.js", "../../../src/js/qld.bootstrap.js"],
4
- "sourcesContent": ["/**\n * Toggle all accordion elements\n *\n * @memberof module:Accordion\n *\n * @param {Object} event - The event that triggered this function.\n * @returns {void}\n */\nexport function accordionToggleAll(event) {\n // stop event propagation\n try {\n window.event.cancelBubble = true;\n event.stopPropagation();\n } catch (error) {\n //error message\n }\n\n let toggleAllButton = event.target;\n // find the accordion wrapper\n let wrapper = toggleAllButton.closest(\".accordion-group\");\n // get all the accordion buttons\n let accordionButtons = wrapper.querySelectorAll(\".accordion-button\");\n\n // Check if opened or closed\n if (toggleAllButton.classList.contains(\"accordion-toggle-btn--closed\")) {\n toggleAllButton.classList.remove(\"accordion-toggle-btn--closed\");\n toggleAllButton.classList.add(\"accordion-toggle-btn--open\");\n toggleAllButton.textContent = \"Close all\";\n accordionButtons.forEach((button) => {\n if (button.matches(\".collapsed\")) button.click();\n });\n } else if (toggleAllButton.classList.contains(\"accordion-toggle-btn--open\")) {\n toggleAllButton.classList.remove(\"accordion-toggle-btn--open\");\n toggleAllButton.classList.add(\"accordion-toggle-btn--closed\");\n toggleAllButton.textContent = \"Open all\";\n accordionButtons.forEach((button) => {\n if (button.matches(\":not(.collapsed)\")) button.click();\n });\n }\n}\n\n/**\n * Updates toggle all button if all panels are open/closed individually.\n *\n * @memberof module:Accordion\n *\n * @param {Object} event - The event that triggered this function.\n * @returns {void}\n */\nexport function accordionToggleAllButtonState(event) {\n // stop event propagation\n try {\n window.event.cancelBubble = true;\n event.stopPropagation();\n } catch (error) {\n //error message\n }\n\n let accordionGroup = event.target.closest(\".accordion-group\"),\n toggleAllButton = accordionGroup.querySelector(\".accordion-toggle-btn\");\n\n if (\n toggleAllButton.classList.contains(\"accordion-toggle-btn--closed\") &&\n accordionGroup.querySelectorAll(\".accordion-button.collapsed\").length == 0\n ) {\n toggleAllButton.classList.remove(\"accordion-toggle-btn--closed\");\n toggleAllButton.classList.add(\"accordion-toggle-btn--open\");\n toggleAllButton.textContent = \"Close all\";\n } else if (\n toggleAllButton.classList.contains(\"accordion-toggle-btn--open\") &&\n accordionGroup.querySelectorAll(\".accordion-button.collapsed\").length > 0\n ) {\n toggleAllButton.classList.remove(\"accordion-toggle-btn--open\");\n toggleAllButton.classList.add(\"accordion-toggle-btn--closed\");\n toggleAllButton.textContent = \"Open all\";\n }\n}\n\n/**\n * Open and scroll to an accordion panel specified via URL hash.\n *\n * @memberof module:Accordion\n *\n * @param {Object} event - (optional) The event that triggered this function.\n * @returns {void}\n */\nexport function accordionHashLinks (event) {\n let urlHash = window.location.hash,\n urlHashId = urlHash.substring(1),\n cleanHash = filterSpecialChar(urlHash);\n\n if (cleanHash.length > 0) {\n let targetElement = document.querySelector(`#collapse-${urlHashId}`),\n targetPanelButton = false;\n\n // Stop default hash link behaviour if target matches current hash location.\n if (event &&\n ((event.type === 'hashchange' && event.newURL === event.oldURL) ||\n (event.type === 'click' && event.target.hash === urlHash))\n ) {\n event.preventDefault();\n }\n\n // ID matching\n if (targetElement && targetElement.closest('.accordion-item')) {\n targetPanelButton = targetElement.closest(\".accordion-item\").querySelector(\".accordion-button\");\n }\n // Title matching\n else {\n let accordionButtons = document.querySelectorAll(\".accordion-button\");\n\n if (event && event.type === 'click') {\n cleanHash = filterSpecialChar(event.target.hash);\n }\n\n targetPanelButton = Array.from(accordionButtons).find((button) => filterSpecialChar(button.innerText) === cleanHash);\n }\n\n if (targetPanelButton){\n if (targetPanelButton.matches(\".collapsed\")) targetPanelButton.click();\n\n window.scrollTo(0, targetPanelButton.getBoundingClientRect().top +\n document.documentElement.scrollTop);\n }\n }\n}\n\n/**\n * filterSpecialChar\n * @param {string} value - value to filter\n * @return {undefined}\n **/\nfunction filterSpecialChar(value) {\n return decodeURI(value.toLowerCase().replace(/[^a-zA-Z0-9/]/g, ''));\n}\n", "/**\n * Show and play the embedded video\n *\n * @memberof module:Video\n *\n * @param {Object} event - The event that triggered this function.\n * @returns {void}\n */\nexport function videoEmbedPlay(event) {\n event.preventDefault();\n\n const thumbnail = event.target,\n component = thumbnail.closest(\".video\"),\n iframe = component.querySelector(\".video-embed iframe\")\n\n component.classList.remove(\"not-ready\");\n\n // Parse iFrame URL and set the 'autoplay' parameter to 1.\n if (!iframe.classList.contains(\"video-custom\")) {\n const url = new URL(iframe.src);\n url.searchParams.set('autoplay', '1');\n iframe.src = url.toString();\n }\n\n iframe.focus();\n\n}\n\n/**\n * Toggle the title of the video transcript accordion\n *\n * @memberof module:Video\n *\n * @param {Object} event - The event that triggered this function.\n * @returns {void}\n */\nexport function videoTranscriptTitle(event) {\n const accordionButton = event.target\n\n if (accordionButton.classList.contains('collapsed')) {\n accordionButton.textContent = \"Show transcript\"\n }\n else {\n accordionButton.textContent = \"Hide transcript\"\n }\n\n}\n", "/**\n * All native focusable tag names.\n */\nexport const focusableTags = [\n \"A\",\n \"INPUT\",\n \"BUTTON\",\n \"SELECT\",\n \"TEXTAREA\",\n \"IFRAME\",\n \"OBJECT\",\n \"DETAILS\",\n];\n\n/**\n *\n * Check whether an element is able to receive focus.\n * Note items with tabindex=\"-1\" are focusable via hash links and javascript - include extra logic if you need to filter these out.\n * @param {HTMLElement} element The HTML Element to check\n * @returns {boolean} true if element is able to receive focus, or false if not\n */\nexport function isFocusable(element) {\n if (!element || typeof element !== \"object\" || element.nodeType !== 1)\n return false;\n // Disabled or aria-hidden elements are not focusable\n if (\n element.hasAttribute(\"disabled\") ||\n element.getAttribute(\"aria-hidden\") === \"true\"\n )\n return false;\n // Elements with tabindex (any value) are focusable\n if (element.hasAttribute(\"tabindex\")) return true;\n // Contenteditable elements are focusable\n if (\n element.hasAttribute(\"contenteditable\") &&\n element.getAttribute(\"contenteditable\") !== \"false\"\n )\n return true;\n if (focusableTags.includes(element.tagName)) {\n if (element.tagName === \"A\") {\n return !!element.getAttribute(\"href\");\n }\n if ([\"INPUT\", \"BUTTON\", \"SELECT\", \"TEXTAREA\"].includes(element.tagName)) {\n return !element.disabled;\n }\n return true;\n }\n return false;\n}\n\n/**\n * Get all focusable elements within a container\n * @param {HTMLElement} container The container element to search within\n * @returns {HTMLElement[]} Array of focusable elements\n */\nexport function getFocusableElements(container) {\n if (!container) return [];\n\n const allElements = container.querySelectorAll(\"*\");\n return Array.from(allElements).filter((el) => isFocusable(el));\n}\n\n/**\n * Create a focus trap for accessibility\n * Traps keyboard focus within a container element (e.g., modal, navbar, menu)\n * @param {HTMLElement} container The container element to trap focus within\n * @param {Object} options Configuration options\n * @param {HTMLElement} options.returnFocusElement Element to return focus to when deactivated\n * @param {Function} options.onEscape Callback function when Escape key is pressed\n * @returns {Object} Focus trap controller with activate, deactivate, and update methods\n */\nexport function createFocusTrap(container, options = {}) {\n if (!container) {\n throw new Error(\"Container element is required for focus trap\");\n }\n\n const { returnFocusElement, onEscape } = options;\n let isActive = false;\n let focusableElements = [];\n let previousActiveElement = null;\n\n /**\n * Update the list of focusable elements\n */\n function updateFocusableElements() {\n focusableElements = getFocusableElements(container);\n }\n\n /**\n * Handle Tab key navigation within the trap\n */\n function handleTabKey(event) {\n if (!isActive || focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n const activeElement = document.activeElement;\n\n // Shift + Tab (backward)\n if (event.shiftKey) {\n if (\n activeElement === firstElement ||\n !container.contains(activeElement)\n ) {\n event.preventDefault();\n lastElement.focus();\n }\n }\n // Tab (forward)\n else {\n if (activeElement === lastElement || !container.contains(activeElement)) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n }\n\n /**\n * Handle Escape key to close/deactivate\n */\n function handleEscapeKey(event) {\n if (!isActive) return;\n\n if (event.key === \"Escape\" || event.key === \"Esc\") {\n event.preventDefault();\n if (typeof onEscape === \"function\") {\n onEscape();\n }\n }\n }\n\n /**\n * Handle all keyboard events\n */\n function handleKeyDown(event) {\n if (event.key === \"Tab\") {\n handleTabKey(event);\n } else if (event.key === \"Escape\" || event.key === \"Esc\") {\n handleEscapeKey(event);\n }\n }\n\n /**\n * Activate the focus trap\n */\n function activate() {\n if (isActive) return;\n\n // Store the currently focused element to return focus later\n previousActiveElement = document.activeElement;\n\n // Update focusable elements\n updateFocusableElements();\n\n // Add keyboard event listener\n document.addEventListener(\"keydown\", handleKeyDown);\n\n // Focus the first focusable element\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n }\n\n isActive = true;\n }\n\n /**\n * Deactivate the focus trap\n */\n function deactivate() {\n if (!isActive) return;\n\n // Remove keyboard event listener\n document.removeEventListener(\"keydown\", handleKeyDown);\n\n // Return focus to the element that had focus before activation\n const elementToFocus = returnFocusElement || previousActiveElement;\n if (elementToFocus && typeof elementToFocus.focus === \"function\") {\n elementToFocus.focus();\n }\n\n isActive = false;\n previousActiveElement = null;\n }\n\n return {\n activate,\n deactivate,\n update: updateFocusableElements,\n get isActive() {\n return isActive;\n },\n };\n}\n\n/**\n * Print page function\n * Attaches event listener to elements with class 'js-print' to trigger window.print()\n */\nexport function printPage() {\n // Add btn page print functions\n let printButton = document.querySelector(\".js-print\");\n if (printButton) {\n printButton.addEventListener(\"click\", function (event) {\n event.preventDefault();\n window.print();\n });\n }\n}\n", "/**\n * Media query breakpoints. These must be kept in sync with breakpoints defined in sass variables.\n */\nexport const breakpoints = {\n xs: 0,\n sm: 400,\n md: 700,\n lg: 992,\n xl: 1312,\n};\n", "import { createFocusTrap } from \"../../../js/utils.js\";\nimport { breakpoints } from \"../../../js/constants.js\";\n\nconst getIsMobile = () => window.innerWidth < breakpoints.lg;\n\nexport function initializeNavbar() {\n const navbar = document.getElementById(\"main-nav\");\n const overlay = document.getElementById(\"overlay\");\n const burgerBtn = document.getElementById(\"burgerBtn\");\n const burgerCloseBtn = document.getElementById(\"burgerCloseBtn\");\n let wasMobile = getIsMobile();\n\n /** @type {HTMLElement[]} */\n let inertTargets = [];\n\n // Focus trap instances (created on-demand)\n let mobileFocusTrap = null;\n\n function closeNavbar() {\n // Do not call static method bootstrap.Collapse.getInstance(navbar).hide()\n // because storybook has a problem with referencing global bootstrap object in production build.\n // Instead simulate the close button click - same thing.\n // Do not put side effects of closing menu here (eg clearing menu focus trap), instead use \"hidden.bs.collapse\" or \"hide.bs.collapse\" event handlers declared below.\n // Need to check if menu is actually set to show, otherwise click will open instead.\n if (navbar?.classList.contains(\"show\")) {\n burgerCloseBtn?.click();\n }\n }\n\n // Create mobile focus trap on-demand (when mobile menu opens)\n function createMobileFocusTrap() {\n if (!mobileFocusTrap && navbar) {\n mobileFocusTrap = createFocusTrap(navbar, {\n returnFocusElement: burgerBtn,\n onEscape: () => {\n closeNavbar();\n },\n });\n }\n return mobileFocusTrap;\n }\n\n // Setup dropdown event listeners.\n function setupDropdownListeners() {\n // Find all dropdown toggles (elements with data-bs-toggle=\"dropdown\")\n const dropdownToggles = navbar?.querySelectorAll(\n '[data-bs-toggle=\"dropdown\"]',\n );\n\n dropdownToggles?.forEach((toggle) => {\n // Find the associated dropdown menu within the same parent container\n const parentItem =\n toggle.closest(\".dropdown\") || toggle.closest(\".nav-item\");\n if (!parentItem) return;\n\n const dropdown = parentItem.querySelector(\".dropdown-menu\");\n if (!dropdown) return;\n\n // Add spacebar click for <a> tags, <buttons> already have this.\n if (toggle?.tagName === \"A\") {\n toggle.addEventListener(\"keydown\", (/** @type KeyboardEvent*/ e) => {\n if (e.key === \" \") {\n e.preventDefault();\n toggle.click();\n }\n });\n }\n\n // There are two separate toggle elements for desktop and mobile. Bootstrap only keeps one registered for these events,\n // which is the mobile button, hidden on desktop. Therefore, we need to handle any `a.dropdown-toggle` updates manually. The event is caught on the\n // mobile toggle, so traverse back up find the desktop toggle.\n toggle.addEventListener(\"hidden.bs.dropdown\", (e) => {\n const _toggle = parentItem.querySelector(\n 'a[data-bs-toggle=\"dropdown\"]',\n );\n _toggle?.classList.remove(\"show\");\n if (\n dropdown?.contains(document.activeElement) &&\n !(getIsMobile() || navbar.classList.contains(\"vertical\"))\n ) {\n _toggle?.focus();\n }\n });\n });\n }\n\n // Setup dropdown listeners on load\n if (navbar) {\n setupDropdownListeners();\n }\n\n // Close navbar when overlay is clicked\n overlay?.addEventListener(\"click\", () => {\n closeNavbar();\n });\n\n const resetNavbarState = (isMobile) => {\n const dropdownToggles = navbar?.querySelectorAll(\n \"a.dropdown-toggle, a.no-dropdown-toggle\",\n );\n\n if (isMobile) {\n // disable navlinks as toggles\n dropdownToggles?.forEach((toggle) => {\n // Skip toggle items with hasNoLink class\n if (toggle.classList.contains(\"hasNoLink\")) {\n return;\n }\n toggle.classList.replace(\"dropdown-toggle\", \"no-dropdown-toggle\");\n toggle.removeAttribute(\"data-bs-toggle\");\n });\n\n // Expand any dropdowns set to expand on mobile\n navbar\n ?.querySelectorAll('[data-is-expanded-on-mobile=\"true\"]')\n .forEach((item) => {\n item\n .querySelectorAll(\".dropdown-toggle, .dropdown-menu\")\n .forEach((item) => {\n item.classList.add(\"show\");\n });\n });\n } else {\n // reenable navlinks as toggle\n dropdownToggles?.forEach((toggle) => {\n toggle.classList.replace(\"no-dropdown-toggle\", \"dropdown-toggle\");\n toggle.setAttribute(\"data-bs-toggle\", \"dropdown\");\n });\n\n // Collapse any dropdowns set to expand on mobile\n navbar\n ?.querySelectorAll('[data-is-expanded-on-mobile=\"true\"]')\n .forEach((item) => {\n item\n .querySelectorAll(\".dropdown-toggle, .dropdown-menu\")\n .forEach((item) => {\n item.classList.remove(\"show\");\n });\n });\n\n // close the navbar\n closeNavbar();\n }\n };\n\n //All associated side effects of navbar collapse beginning belong here\n navbar?.addEventListener(\"hide.bs.collapse\", () => {\n overlay?.classList.remove(\"show\");\n });\n\n // All associated side effects of navbar collapse completion belong here.\n navbar?.addEventListener(\"hidden.bs.collapse\", () => {\n inertTargets.forEach((target) => {\n target.inert = false;\n });\n // Deactivate and destroy mobile focus trap\n if (mobileFocusTrap) {\n mobileFocusTrap.deactivate();\n mobileFocusTrap = null;\n }\n });\n\n // All associated side effects of navbar opening belong here.\n navbar?.addEventListener(\"shown.bs.collapse\", () => {\n if (getIsMobile) {\n // Check if navbar is opening\n setTimeout(() => {\n if (navbar?.classList.contains(\"show\")) {\n // set all siblings to inert\n inertTargets = Array.from(navbar.parentElement.children).filter(\n (child) => child !== navbar,\n );\n inertTargets.forEach((target) => {\n target.inert = true;\n });\n\n const trap = createMobileFocusTrap();\n trap.activate();\n }\n }, 0);\n }\n });\n\n window.addEventListener(\"resize\", () => {\n const isMobile = getIsMobile();\n if (wasMobile !== isMobile) {\n wasMobile = isMobile;\n resetNavbarState(isMobile);\n }\n });\n\n resetNavbarState(wasMobile);\n}\n", "/**\n * Initialise the Breadcrumb component.\n * Collapse long breadcrumbs when required.\n *\n * @memberof module:Breadcrumb\n *\n * @returns {void} Returns early when breadcrumb does not exist or its length is within set maxLength.\n */\nexport function initBreadcrumb() {\n // Set the standard breadcrumb length.\n let maxLength = 5;\n\n // Get the breadcrumb DOM element.\n const breadcrumb = document.querySelector(\".breadcrumb\");\n\n if (!breadcrumb) {\n return;\n }\n const expandCrumb = breadcrumb.querySelector(\".breadcrumb-toggle\");\n if (expandCrumb) {\n // Breadcrumb has already been initialised.\n return;\n }\n const breadcrumbList = breadcrumb.querySelectorAll(\".breadcrumb-item\");\n\n // Return when breadcrumb does not exist.\n if (!breadcrumbList || !breadcrumbList.length) {\n return;\n }\n\n const breadcrumbParent = breadcrumb.parentElement;\n if (!breadcrumbParent) {\n return;\n }\n\n // Collapse breadcrumb when width of breadcrumb overflows the container.\n if (breadcrumb.clientWidth >= breadcrumbParent.clientWidth) {\n maxLength = 3;\n }\n breadcrumbCollapse(breadcrumbList, maxLength);\n}\n\n/**\n * Collapse long breadcrumb lists\n *\n * @memberof module:Breadcrumb\n *\n * @param {Element} breadcrumbList - Breadcrumb DOM element.\n * @param {number} maxLength - Standard maximum length for breadcrumb.\n * @returns {void} Returns early when breadcrumb does not exist or its length is within set maxLength.\n */\nexport function breadcrumbCollapse(breadcrumbList, maxLength = 5) {\n // No shortening is required when breadcrumb does not exist or its length is within the maximum range.\n if (!breadcrumbList || breadcrumbList.length <= maxLength) {\n return;\n }\n\n const newList = document.createElement(\"ol\");\n newList.classList.add(\"breadcrumb-vertical\");\n\n breadcrumbList.forEach((crumb, index) => {\n if (index > 0 && index < breadcrumbList.length - 2) {\n crumb.querySelector(\"a\")?.setAttribute(\"tabindex\", -1);\n newList.appendChild(crumb);\n }\n\n if (index === 0) {\n let expandCrumb = document.createElement(\"li\"),\n expandButton = document.createElement(\"button\");\n\n expandCrumb.classList.add(\"breadcrumb-item\", \"breadcrumb-toggle\");\n expandButton.setAttribute(\"aria-label\", \"Expand the breadcrumbs\");\n expandButton.type = \"button\";\n expandButton.classList.add(\"breadcrumb-toggle-link\");\n expandButton.addEventListener(\"click\", expandMenu);\n\n expandCrumb.appendChild(expandButton);\n crumb.after(expandCrumb);\n }\n\n if (index === breadcrumbList.length - 1) {\n const expandCrumb = document.querySelector(\".breadcrumb-toggle\");\n if (expandCrumb) {\n const wrapperDiv = document.createElement(\"div\");\n wrapperDiv.classList.add(\"breadcrumb-collapse-wrapper\");\n wrapperDiv.appendChild(newList);\n expandCrumb.append(wrapperDiv);\n expandCrumb.addEventListener(\"focusout\", (event) => {\n // Check if the element receiving focus is outside the dropdown container\n if (\n !event.relatedTarget ||\n !expandCrumb.contains(event.relatedTarget)\n ) {\n wrapperDiv.parentElement.classList.remove(\"expanded\");\n }\n });\n }\n }\n });\n}\n\n/**\n * Expand shortened breadcrumb lists\n *\n * @memberof module:Breadcrumb\n *\n * @param {Event} event - The event that triggered this function.\n * @returns {void} Returns early when the breadcrumb does not exist or is empty.\n */\nexport function expandMenu(event) {\n const breadcrumb = event.target.closest(\".breadcrumb\");\n if (!breadcrumb) {\n console.log(\"expandMenu: Breadcrumb does not exist.\");\n return;\n }\n const breadcrumbList = breadcrumb.querySelectorAll(\".breadcrumb-item\");\n\n if (!breadcrumbList || !breadcrumbList.length) {\n console.log(\"expandMenu: Breadcrumb does not exist or is empty.\");\n return;\n }\n\n event.target.parentElement.classList.toggle(\"expanded\");\n if (event.target.parentElement.classList.contains(\"expanded\")) {\n // Focus the first focusable element inside\n const expandMenu = document.querySelector(\".breadcrumb-collapse-wrapper\");\n resetTabIndex(0);\n const firstItem = expandMenu.querySelector(\"a\");\n if (firstItem) {\n firstItem.focus();\n }\n }\n const expandButton = document.querySelector(\".breadcrumb-toggle-link\");\n expandButton && document.addEventListener(\"click\", collapseMenu);\n}\n\n/**\n * event listener for document click event used to collapse menu on clicking elsewhere\n * and also remove the event listener to prevent multiple listeners from being attached\n * @memberof module:Breadcrumb\n *\n * @param {Event} event - The event that triggered this function.\n * @returns {void} Returns nothing.\n */\nfunction collapseMenu(event) {\n event.stopPropagation();\n const expandButton = document.querySelector(\".breadcrumb-toggle-link\");\n const expandMenu = document.querySelector(\".breadcrumb-collapse-wrapper\");\n if (\n !expandMenu.contains(event.target) &&\n !expandButton.contains(event.target)\n ) {\n expandMenu.parentElement.classList.remove(\"expanded\");\n document.removeEventListener(\"click\", collapseMenu);\n resetTabIndex(-1);\n }\n}\n\nfunction resetTabIndex(tabindex) {\n const breadcrumbListExpanded = document.querySelectorAll(\n \".breadcrumb-collapse-wrapper li\",\n );\n if (!breadcrumbListExpanded) {\n return;\n }\n breadcrumbListExpanded.forEach((crumb) => {\n crumb.querySelector(\"a\")?.setAttribute(\"tabindex\", tabindex);\n });\n}\n", "export function initDateInput() {\n const dateContainers = document.querySelectorAll(\".date-container\");\n\n /**\n * @param {InputEvent} e\n * @returns void\n */\n const inputHandler = (e) => {\n // verify the event target is what we expect.\n if (!(e.target.tagName === \"INPUT\" && e.target.type === \"text\")) {\n return;\n }\n\n /**\n * @type HTMLInputElement\n */\n const input = e.target;\n const { value, min, max, pattern } = input;\n const previousValue = input.dataset.previousValue || \"\";\n // enforce the validation attributes\n if (max && parseInt(value) > parseInt(max)) {\n input.dataset.previousValue = input.value = max;\n return;\n }\n\n if (\n min &&\n parseInt(value) !== 0 && // Must allow typing leading zeroes\n value.length >= min.length &&\n parseInt(value) < parseInt(min)\n ) {\n input.dataset.previousValue = input.value = min;\n return;\n }\n\n if (\n value &&\n value !== \"\" &&\n parseInt(value) !== 0 &&\n !RegExp(pattern).test(value)\n ) {\n input.value = previousValue;\n return;\n }\n\n // all good - update previousValue with current value\n input.dataset.previousValue = input.value = input.value.trim();\n };\n\n /**\n * @param {FocusEvent} e\n * @returns void\n */\n const focusOutHandler = (e) => {\n // Because format is dd/mm/yyyy we want to add leading zeroes to single digits\n // verify the event target is what we expect\n if (!(e.target.tagName === \"INPUT\" && e.target.type === \"text\")) {\n return;\n }\n\n /** @type {HTMLInputElement} */\n const input = e.target;\n const { min, max } = input;\n const minLength = input.minLength || 0;\n const value = (input.value || \"\").trim();\n\n if (!value || parseInt(value) === 0) {\n input.dataset.previousValue = input.value = \"\";\n return;\n }\n\n // If value is less than the min, bump up to min and add padding.\n if (min && parseInt(value) < min) {\n input.dataset.previousValue = input.value = min.padStart(minLength, \"0\");\n return;\n }\n\n // If value exceeds max, bring it down to max and add padding\n if (max && parseInt(value) > max) {\n input.dataset.previousValue = input.value = max.padStart(minLength, \"0\");\n return;\n }\n\n input.dataset.previousValue = input.value = value.padStart(minLength, \"0\");\n };\n\n dateContainers.forEach((dateContainer) => {\n dateContainer.addEventListener(\"input\", inputHandler);\n dateContainer.addEventListener(\"focusout\", focusOutHandler);\n });\n}\n", "export function initQuickexit() {\n var quickExitElement = document.getElementsByClassName(\"qld-quick-exit\");\n var quickExitButton = document.querySelector(\".qld-quick-exit-button\");\n\n if (\n quickExitElement.length > 0 &&\n typeof quickExitButton !== \"undefined\" &&\n quickExitButton != null\n ) {\n onbtnClick();\n onKeyDown();\n }\n}\n/**\n * onbtnClick -> clicking quick exit button a page\n * @return {undefined}\n **/\nfunction onbtnClick() {\n const escapeSite = \"https://www.google.com.au/\";\n var quickExitButton = document.querySelector(\".qld-quick-exit-button\");\n quickExitButton.onclick = function () {\n return quickExit(escapeSite);\n };\n}\n\n/**\n * onKeyDown -> escape keydown event\n * @return {undefined}\n **/\nfunction onKeyDown() {\n const escapeSite = \"https://www.google.com.au/\";\n // add hotkey trigger\n document.addEventListener(\"keydown\", function (e) {\n if (e.keyCode === 27) {\n quickExit(escapeSite);\n if (e) {\n // stop escape from cancelling redirect\n e.preventDefault();\n // early IEs don't have preventDefault\n e.returnValue = false;\n }\n return false;\n }\n });\n}\n\n/**\n * quickExit function redirects a user on click and Esc key down\n * @param {string} site - site to replace on initiating the 'quick exit' ('Esc' key or clicking 'Close this site' button) function\n * @return {undefined}\n **/\nfunction quickExit(site) {\n // then redirect to a non-sensitive site\n window.open(site, \"_blank\");\n window.location.replace(site);\n // remove as much info from URL as possible\n if (window.history) {\n try {\n window.history.replaceState({}, \"\", \"/\");\n } catch (e) {\n e.printStackTrace();\n }\n }\n // disable default event handling\n return false;\n}\n", "/**\n * Toggles the class on a search div based on button click.\n *\n * @memberof module:Header\n *\n * @param {Event} event - The event that triggered this function.\n * @returns {void}\n */\nexport function toggleSearch(event) {\n // Prevent default action and stop event propagation\n try {\n event.preventDefault();\n event.stopPropagation();\n } catch (error) {\n console.error(\"Error in event handling:\", error);\n }\n\n // Get the search div\n const searchDiv = document.getElementById(\"qld-header-search\");\n const toggleButton = event.currentTarget;\n\n // Check current class and swap\n if (searchDiv) {\n if (searchDiv.classList.contains(\"is-open\")) {\n searchDiv.classList.remove(\"is-open\");\n searchDiv.classList.add(\"is-closed\");\n\n // Change icon and text back to default\n toggleButton.classList.remove(\"is-open\");\n toggleButton.classList.add(\"is-closed\");\n toggleButton.setAttribute(\"aria-expanded\", false);\n toggleButton.setAttribute(\"aria-label\", \"Open search\");\n toggleButton.textContent = \"Search\";\n } else {\n searchDiv.classList.remove(\"is-closed\");\n searchDiv.classList.add(\"is-open\");\n\n // Change icon and text to active state\n toggleButton.classList.remove(\"is-closed\");\n toggleButton.classList.add(\"is-open\");\n toggleButton.setAttribute(\"aria-expanded\", true);\n toggleButton.setAttribute(\"aria-label\", \"Close search\");\n toggleButton.textContent = \"Close\";\n }\n }\n}\n", "/**\n * Fetches data from the provided URL.\n *\n * @param {string} url - The URL to fetch data from.\n * @param {string} type - The type of data to fetch (suggestions or services).\n * @returns {Promise<Object>} - A promise that resolves to the fetched data.\n */\nasync function fetchData(url, type) {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n const data = await response.json();\n return data;\n } catch (error) {\n console.error(`Error fetching ${type}:`, error);\n return {};\n }\n}\n\n/**\n * Sets the selected suggestion into the input field and submits the form.\n *\n * @param {string} value - The selected suggestion.\n * @param {HTMLFormElement} form - The form element.\n * @returns {void}\n */\nexport function selectDynamicSuggestion(value, form) {\n const searchInput = form.querySelector(\".qld-search-input input\");\n const suggestions = form.querySelector(\".suggestions\");\n\n if (searchInput && suggestions) {\n // Assign queryValue, and cleanup string before submission\n let queryValue = value.replace(/\\s+/g, \" \").trim();\n searchInput.value = queryValue;\n\n // Form action\n const actionUrl = form.getAttribute(\"action\");\n\n //data-* attributes on search input field\n const atts = searchInput ? searchInput.dataset : null;\n\n // Construct the URL with proper parameters\n const params = new URLSearchParams({\n query: queryValue,\n collection: atts.collection || \"qgov~sp-search\",\n profile: atts.profile || \"qld\",\n num_ranks: atts.numRanks || \"10\",\n tiers: atts.tiers || \"off\",\n });\n\n const searchUrl = `${actionUrl}?${params.toString()}`;\n\n // Manually set the window location to the constructed URL\n window.location.href = searchUrl;\n }\n}\n\n/**\n * Shows/hides suggestions based on the user's input.\n *\n * @param {string} value - The current input value.\n * @param {boolean} isDefault - Whether to show default suggestions or not.\n * @param {HTMLFormElement} form - The form element.\n * @returns {void}\n **/\nexport async function showSuggestions(value = \"\", isDefault = false, form) {\n const searchInput = form.querySelector(\".qld-search-input input\");\n const suggestions = form.querySelector(\".suggestions\");\n const defaultSuggestionsContainer = form.querySelector(\n \".default-suggestions\",\n );\n const dynamicSuggestionsContainer = form.querySelector(\n \".dynamic-suggestions\",\n );\n\n if (!suggestions || !searchInput) {\n return;\n }\n\n // Hide/show default suggestions, and return early\n if (isDefault) {\n if (defaultSuggestionsContainer) {\n defaultSuggestionsContainer.classList.remove(\"d-none\");\n }\n if (dynamicSuggestionsContainer) {\n dynamicSuggestionsContainer.innerHTML = \"\";\n dynamicSuggestionsContainer.classList.add(\"d-none\");\n }\n return;\n }\n\n // If input is empty, hide dynamic suggestions and return early\n if (dynamicSuggestionsContainer) {\n if (value.length === 0) {\n dynamicSuggestionsContainer.innerHTML = \"\";\n dynamicSuggestionsContainer.classList.add(\"d-none\");\n return;\n }\n }\n\n // Script continues...dynamic suggestions is true and value.length > 0\n defaultSuggestionsContainer?.classList.add(\"d-none\");\n\n //data-* attributes on search input field\n const atts = searchInput ? searchInput.dataset : null;\n\n // Fetch dynamic suggestions if available\n if (dynamicSuggestionsContainer) {\n const suggestUrl = atts.suggestions;\n\n if (suggestUrl) {\n const collection = atts.collection || \"qgov~sp-search\";\n const profile = atts.profile || \"qld\";\n\n //Fetch data from suggestions API\n const fetchedSuggestions = await fetchData(\n `${suggestUrl}?collection=${collection}&profile=${profile}&fmt=json&alpha=0.5&partial_query=${encodeURIComponent(value)}`,\n \"suggestions\",\n );\n\n //Rended a suggestions list\n if (fetchedSuggestions.length > 0) {\n dynamicSuggestionsContainer.innerHTML = `\n <div class=\"suggestions-category\">\n <ul>${fetchedSuggestions\n .slice(0, 4)\n .map((item) => {\n const highlightedText = item.replace(\n new RegExp(`(${value})`, \"gi\"),\n \"<strong>$1</strong>\",\n );\n return `<li><a tabindex=\"0\" href=\"#\">${highlightedText}</a></li>`;\n })\n .join(\"\")}</ul>\n </div>`;\n\n dynamicSuggestionsContainer.classList.remove(\"d-none\");\n\n // Bind an event listener to suggestions container\n form\n .querySelector(\".suggestions .dynamic-suggestions\")\n .addEventListener(\"click\", (event) => {\n let linkItem = event.target.closest(\"a\");\n if (linkItem) {\n event.preventDefault();\n\n // Check if the link has a valid absolute URL\n const href = linkItem.getAttribute(\"href\");\n const isValidUrl =\n href &&\n href !== \"#\" &&\n (() => {\n try {\n const url = new URL(href, window.location.origin);\n return (\n url.protocol === \"http:\" || url.protocol === \"https:\"\n );\n } catch {\n return false;\n }\n })();\n\n if (isValidUrl) {\n // Navigate directly to the URL\n window.location.href = href;\n } else {\n // Use the search suggestion flow\n selectDynamicSuggestion(linkItem.textContent, form);\n }\n }\n });\n } else {\n dynamicSuggestionsContainer.innerHTML = \"\";\n dynamicSuggestionsContainer.classList.add(\"d-none\");\n }\n }\n\n const resultsUrl = atts.resultsUrl; //data-results-url;\n if (resultsUrl) {\n const collection = atts.collection || \"qgov~sp-search\";\n const profile = atts.profile || \"qld\";\n\n // Fetch related services from services API\n const fetchedServices = await fetchData(\n `${resultsUrl}?collection=${collection}&profile=${profile}&smeta_sfinder_sand=yes&query=${encodeURIComponent(value)}`,\n \"services\",\n );\n\n if (\n fetchedServices.response.resultPacket &&\n fetchedServices.response.resultPacket.results.length > 0\n ) {\n const viewMoreUrl =\n dynamicSuggestionsContainer.getAttribute(\"data-view-more\");\n\n // Build the services HTML safely\n const escapeHtmlAttr = (str) =>\n String(str)\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n\n const servicesItems = fetchedServices.response.resultPacket.results\n .slice(0, 4)\n .map(\n (item) =>\n `<li><a tabindex=\"0\" href=\"${item.liveUrl}\">${item.title}</a></li>`,\n )\n .join(\"\");\n\n const viewMoreItem = viewMoreUrl\n ? `<li><a tabindex=\"0\" href=\"${escapeHtmlAttr(viewMoreUrl)}\" class=\"view-more\">View more</a></li>`\n : \"\";\n\n dynamicSuggestionsContainer.innerHTML += `\n <div class=\"suggestions-category feature\">\n <strong class=\"suggestions-category-label d-block\">Related services</strong>\n <ul>${servicesItems}${viewMoreItem}</ul>\n </div>`;\n\n dynamicSuggestionsContainer.classList.remove(\"d-none\");\n\n // Attach click event listeners to each SERVICE item in list\n form\n .querySelector(\".suggestions .dynamic-suggestions\")\n .addEventListener(\"click\", (event) => {\n let linkItem = event.target.closest(\"a\");\n if (linkItem) {\n event.preventDefault();\n\n // Check if the link has a valid absolute URL\n const href = linkItem.getAttribute(\"href\");\n const isValidUrl =\n href &&\n href !== \"#\" &&\n (() => {\n try {\n const url = new URL(href, window.location.origin);\n return (\n url.protocol === \"http:\" || url.protocol === \"https:\"\n );\n } catch {\n return false;\n }\n })();\n\n if (isValidUrl) {\n // Navigate directly to the URL\n window.location.href = href;\n } else {\n // Use the search suggestion flow\n selectDynamicSuggestion(linkItem.textContent, form);\n }\n }\n });\n }\n }\n }\n}\n\n/**\n * Submits the search form with proper parameters.\n *\n * @param {string} query - The search query.\n * @param {HTMLFormElement} form - The form element.\n * @returns {void}\n */\nexport function submitSearchForm(query = \"\", form) {\n const searchInput = form.querySelector(\".qld-search-input input\");\n const atts = searchInput ? searchInput.dataset : null;\n\n const queryValue = query.trim().replace(/\\s+/g, \" \");\n\n const params = new URLSearchParams({\n query: queryValue,\n collection: atts.collection || \"qgov~sp-search\",\n profile: atts.profile || \"qld\",\n num_ranks: atts.numRanks || \"10\",\n tiers: atts.tiers || \"off\",\n });\n\n const searchUrl = `${form.getAttribute(\"action\")}?${params.toString()}`;\n window.location.href = searchUrl;\n}\n\n// Attach the function to the window object to make it globally accessible\nwindow.selectDynamicSuggestion = (value, form) =>\n selectDynamicSuggestion(value, form);\n", "export function backToTop() {\n const backToTop = document.querySelector(\".back-to-top .qld-dir-link\");\n\n if (backToTop) {\n backToTop.onclick = function (event) {\n document.body.scrollTop = 0; // For Safari\n document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera\n event.preventDefault();\n };\n }\n}\n", "export function initTabsScroll() {\n const tabObject = document.querySelectorAll('.qld-tabs');\n\n function updateTabs(tab) {\n const tabs = tab.querySelector('.nav-tabs');\n const scrollLeftBtn = tab.querySelector('.scroll-left');\n const scrollRightBtn = tab.querySelector('.scroll-right');\n const tabsAreaWidth = tabs.scrollWidth;\n\n if (tabs) {\n // Show or hide scroll buttons based on initial state\n const updateButtonVisibility = () => {\n if (tabs.scrollLeft === 0) {\n scrollLeftBtn.classList.remove('show');\n } else {\n scrollLeftBtn.classList.add('show');\n }\n\n if (tabs.scrollLeft + tabs.clientWidth >= tabsAreaWidth) {\n scrollRightBtn.classList.remove('show');\n } else {\n scrollRightBtn.classList.add('show');\n }\n };\n\n // Add scroll event listener to dynamically update button visibility\n tabs.addEventListener('scroll', updateButtonVisibility);\n\n // Initial visibility update\n updateButtonVisibility();\n\n // Scroll right button click event\n scrollRightBtn.addEventListener('click', () => {\n tabs.scrollBy({\n top: 0,\n left: 200,\n behavior: 'smooth',\n });\n });\n\n // Scroll left button click event\n scrollLeftBtn.addEventListener('click', () => {\n tabs.scrollBy({\n top: 0,\n left: -200,\n behavior: 'smooth',\n });\n });\n }\n }\n\n // Initial setup for all tabs\n tabObject.forEach((tab) => {\n updateTabs(tab);\n });\n\n // Update tabs on window resize\n window.addEventListener('resize', () => {\n tabObject.forEach((tab) => {\n updateTabs(tab);\n });\n });\n}\n", "export function initGlobalAlerts() {\n const globalAlerts = document.querySelectorAll(\".global-alert\");\n\n globalAlerts.forEach((alert) => {\n const id = alert.getAttribute(\"data-id\");\n\n // Only check localStorage if there's an ID\n if (id) {\n const dismissedAlert = getLocalStorageWithExpiry(`dismissedAlert-${id}`);\n if (!dismissedAlert) {\n alert.classList.remove(\"d-none\");\n }\n } else {\n alert.classList.remove(\"d-none\");\n }\n\n // Check if alert is dismissable (only add listeners if dismissable)\n const closeButton = alert.querySelector(\".btn-close\");\n if (closeButton) {\n // Handle both Bootstrap alert close event and custom btn-closed event\n const handleAlertClose = () => {\n const dismissedExpiryDays = parseInt(alert.getAttribute(\"data-expiry-days\"), 10);\n\n // Only save to localStorage if both ID and valid expiry exist\n if (id && dismissedExpiryDays && dismissedExpiryDays > 0) {\n setLocalStorageWithExpiry(`dismissedAlert-${id}`, true, dismissedExpiryDays);\n }\n\n alert.classList.add(\"d-none\");\n };\n\n // Listen for Bootstrap's close event (for Storybook compatibility)\n alert.addEventListener(\"closed.bs.alert\", handleAlertClose);\n\n // Listen for custom btn-closed event (for existing functionality)\n alert.addEventListener(\"btn-closed\", handleAlertClose);\n }\n });\n\n // basic set local storage function\n function setLocalStorageWithExpiry(key, value, dismissedExpiryDays) {\n const d = new Date();\n d.setTime(d.getTime() + dismissedExpiryDays * 24 * 60 * 60 * 1000);\n const item = {\n value: value,\n expiry: d.getTime(),\n };\n localStorage.setItem(key, JSON.stringify(item));\n }\n\n function getLocalStorageWithExpiry(key) {\n const itemStr = localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n\n try {\n const item = JSON.parse(itemStr);\n const now = new Date().getTime();\n\n if (now > item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n return item.value;\n } catch (e) {\n localStorage.removeItem(key);\n return null;\n }\n }\n}\n", "/**\n * Checks whether target elements in a list of skip links are valid - ie they can receive focus.\n * @returns {boolean} Return true if skip links are valid, false if there is a problem.\n */\nexport function validateSkipLinks() {\n const skipLinks = document.querySelectorAll(\".qld-skip-links__item\");\n skipLinks.forEach((item) => {\n // check if target exists\n const href = item.getAttribute(\"href\"); // getAttribute returns the value as authored, not resolved value as full URL.\n const targetId = href.replace(/^#/, \"\");\n const target = document.querySelector(href);\n if (!target) {\n console.error(\n `A skip link with label \"${item.textContent}\" is targeting a non-existent element with id \"${targetId}\".`,\n );\n return false;\n }\n return true;\n });\n}\n", "import {\n accordionToggleAll,\n accordionToggleAllButtonState,\n accordionHashLinks,\n} from \"./../components/bs5/accordion/accordion.functions\";\nimport {\n videoEmbedPlay,\n videoTranscriptTitle,\n} from \"./../components/bs5/video/video.functions\";\nimport { initializeNavbar } from \"./../components/bs5/navbar/navbar.functions\";\nimport { initBreadcrumb } from \"./../components/bs5/breadcrumbs/breadcrumbs.functions\";\nimport { initDateInput } from \"../components/bs5/dateinput/dateinput.functions\";\nimport { initQuickexit } from \"./../components/bs5/quickexit/quickexit.functions\";\n//import { displayFeedbackForm } from \"./../components/bs5/footer/footer.functions\";\nimport { toggleSearch } from \"./../components/bs5/header/header.functions\";\nimport {\n showSuggestions,\n submitSearchForm,\n} from \"./../components/bs5/searchInput/search.functions\";\nimport { backToTop } from \"./../components/bs5/backToTop/backToTop.functions\";\nimport { initTabsScroll } from \"./../components/bs5/tabs/tabs.functions\";\nimport { initGlobalAlerts } from \"./../components/bs5/globalAlert/globalAlert.function\";\nimport { validateSkipLinks } from \"./../components/bs5/skiplinks/skipLinks.functions\";\nimport { printPage } from \"./utils\";\n\nwindow.addEventListener(\"click\", initQuickexit, true);\nwindow.addEventListener(\"keydown\", initQuickexit, true);\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n backToTop();\n\n initTabsScroll();\n\n initGlobalAlerts();\n\n // Footer FormIO Action\n // Note: This is added here, as there is an issue with breadcrumbShorten() function.\n // Will move this once that issue is fixed.\n /* \n const footerFormio = document.getElementById(\"qg-feedback-toggle\");\n if (footerFormio) {\n displayFeedbackForm();\n }\n */\n //Header search\n let headerSearchButton = document.getElementById(\n \"qld-header-toggle-search-button\",\n );\n if (headerSearchButton) {\n headerSearchButton.addEventListener(\"click\", toggleSearch);\n }\n\n // Get all forms with the class 'site-search'\n let forms = document.querySelectorAll(\".site-search\");\n\n forms.forEach((form) => {\n // Get the search input within the current form\n let searchInput = form.querySelector(\".qld-search-input input\");\n\n if (searchInput) {\n let timeout;\n\n // Add keyup event listener to the search input\n searchInput.addEventListener(\"input\", function (e) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n const value = e.target.value.trim();\n showSuggestions(value, value === \"\", form);\n }, 300);\n });\n\n // Attach event listener to form submit\n form.addEventListener(\"submit\", function (event) {\n event.preventDefault();\n const query = searchInput.value.trim();\n submitSearchForm(query, form);\n });\n }\n });\n\n //Header\n // Get the <header> element\n let header = document.querySelector(\"header\");\n if (header) {\n // Get the current page URL without query string parameters\n let url = window.location.origin + window.location.pathname;\n // Set the data-page-url attribute on the <header> element\n header.setAttribute(\"data-page-url\", url);\n }\n\n // Navbar\n initializeNavbar();\n\n // Breadcrumb\n initBreadcrumb();\n\n // Quick exit\n window.addEventListener(\"click\", initQuickexit, true);\n window.addEventListener(\"keydown\", initQuickexit, true);\n initQuickexit();\n\n // Accordion\n let accordionToggleButton = document.querySelectorAll(\n \".accordion-toggle-btn\",\n );\n\n accordionToggleButton.forEach(function (toggleButton) {\n toggleButton.addEventListener(\"click\", accordionToggleAll);\n\n let accordionButtons = toggleButton\n .closest(\".accordion-group\")\n .querySelectorAll(\".accordion-button\");\n\n accordionButtons.forEach(function (button) {\n button.addEventListener(\"click\", accordionToggleAllButtonState);\n });\n });\n\n let inPageLinks = document.querySelectorAll('a[href^=\"#\"]');\n\n accordionHashLinks();\n window.onhashchange = accordionHashLinks;\n inPageLinks.forEach(function (link) {\n link.addEventListener(\"click\", accordionHashLinks);\n });\n\n // Video\n let videoThumbnails = document.querySelectorAll(\".video-thumbnail\");\n\n videoThumbnails.forEach(function (thumbnail) {\n thumbnail.addEventListener(\"click\", videoEmbedPlay);\n });\n\n let videoTranscripts = document.querySelectorAll(\n \".video .accordion .accordion-button\",\n );\n\n videoTranscripts.forEach(function (transcript) {\n transcript.addEventListener(\"click\", videoTranscriptTitle);\n });\n\n // Add btn page print functions\n printPage();\n\n // Date Input\n initDateInput();\n\n // Skip Links\n validateSkipLinks();\n});\n"],
5
- "mappings": "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",
6
- "names": ["accordionToggleAll", "event", "error", "toggleAllButton", "accordionButtons", "button", "accordionToggleAllButtonState", "accordionGroup", "accordionHashLinks", "urlHash", "urlHashId", "cleanHash", "filterSpecialChar", "targetElement", "targetPanelButton", "value", "videoEmbedPlay", "event", "thumbnail", "component", "iframe", "url", "videoTranscriptTitle", "accordionButton", "focusableTags", "isFocusable", "element", "getFocusableElements", "container", "allElements", "el", "createFocusTrap", "options", "returnFocusElement", "onEscape", "isActive", "focusableElements", "previousActiveElement", "updateFocusableElements", "handleTabKey", "event", "firstElement", "lastElement", "activeElement", "handleEscapeKey", "handleKeyDown", "activate", "deactivate", "elementToFocus", "printPage", "printButton", "breakpoints", "getIsMobile", "breakpoints", "initializeNavbar", "navbar", "overlay", "burgerBtn", "burgerCloseBtn", "wasMobile", "inertTargets", "mobileFocusTrap", "closeNavbar", "createMobileFocusTrap", "createFocusTrap", "setupDropdownListeners", "dropdownToggles", "toggle", "parentItem", "dropdown", "e", "_toggle", "resetNavbarState", "isMobile", "item", "target", "child", "initBreadcrumb", "maxLength", "breadcrumb", "breadcrumbList", "breadcrumbParent", "breadcrumbCollapse", "newList", "crumb", "index", "_a", "expandCrumb", "expandButton", "expandMenu", "wrapperDiv", "event", "resetTabIndex", "firstItem", "collapseMenu", "tabindex", "breadcrumbListExpanded", "initDateInput", "dateContainers", "inputHandler", "e", "input", "value", "min", "max", "pattern", "previousValue", "focusOutHandler", "minLength", "dateContainer", "initQuickexit", "quickExitElement", "quickExitButton", "onbtnClick", "onKeyDown", "escapeSite", "quickExit", "e", "site", "toggleSearch", "event", "error", "searchDiv", "toggleButton", "fetchData", "url", "type", "__async", "response", "error", "selectDynamicSuggestion", "value", "form", "searchInput", "suggestions", "queryValue", "actionUrl", "atts", "params", "searchUrl", "showSuggestions", "isDefault", "defaultSuggestionsContainer", "dynamicSuggestionsContainer", "suggestUrl", "collection", "profile", "fetchedSuggestions", "item", "event", "linkItem", "href", "e", "resultsUrl", "fetchedServices", "viewMoreUrl", "escapeHtmlAttr", "str", "servicesItems", "viewMoreItem", "submitSearchForm", "query", "backToTop", "event", "initTabsScroll", "tabObject", "updateTabs", "tab", "tabs", "scrollLeftBtn", "scrollRightBtn", "tabsAreaWidth", "updateButtonVisibility", "initGlobalAlerts", "alert", "id", "getLocalStorageWithExpiry", "handleAlertClose", "dismissedExpiryDays", "setLocalStorageWithExpiry", "key", "value", "d", "item", "itemStr", "e", "validateSkipLinks", "item", "href", "targetId", "initQuickexit", "backToTop", "initTabsScroll", "initGlobalAlerts", "headerSearchButton", "toggleSearch", "form", "searchInput", "timeout", "e", "value", "showSuggestions", "event", "query", "submitSearchForm", "header", "url", "initializeNavbar", "initBreadcrumb", "toggleButton", "accordionToggleAll", "button", "accordionToggleAllButtonState", "inPageLinks", "accordionHashLinks", "link", "thumbnail", "videoEmbedPlay", "transcript", "videoTranscriptTitle", "printPage", "initDateInput", "validateSkipLinks"]
4
+ "sourcesContent": ["/**\n * Toggle all accordion elements\n *\n * @memberof module:Accordion\n *\n * @param {Object} event - The event that triggered this function.\n * @returns {void}\n */\nexport function accordionToggleAll(event) {\n // stop event propagation\n try {\n window.event.cancelBubble = true;\n event.stopPropagation();\n } catch (error) {\n //error message\n }\n\n let toggleAllButton = event.target;\n // find the accordion wrapper\n let wrapper = toggleAllButton.closest(\".accordion-group\");\n // get all the accordion buttons\n let accordionButtons = wrapper.querySelectorAll(\".accordion-button\");\n\n // Check if opened or closed\n if (toggleAllButton.classList.contains(\"accordion-toggle-btn--closed\")) {\n toggleAllButton.classList.remove(\"accordion-toggle-btn--closed\");\n toggleAllButton.classList.add(\"accordion-toggle-btn--open\");\n toggleAllButton.textContent = \"Close all\";\n accordionButtons.forEach((button) => {\n if (button.matches(\".collapsed\")) button.click();\n });\n } else if (toggleAllButton.classList.contains(\"accordion-toggle-btn--open\")) {\n toggleAllButton.classList.remove(\"accordion-toggle-btn--open\");\n toggleAllButton.classList.add(\"accordion-toggle-btn--closed\");\n toggleAllButton.textContent = \"Open all\";\n accordionButtons.forEach((button) => {\n if (button.matches(\":not(.collapsed)\")) button.click();\n });\n }\n}\n\n/**\n * Updates toggle all button if all panels are open/closed individually.\n *\n * @memberof module:Accordion\n *\n * @param {Object} event - The event that triggered this function.\n * @returns {void}\n */\nexport function accordionToggleAllButtonState(event) {\n // stop event propagation\n try {\n window.event.cancelBubble = true;\n event.stopPropagation();\n } catch (error) {\n //error message\n }\n\n let accordionGroup = event.target.closest(\".accordion-group\"),\n toggleAllButton = accordionGroup.querySelector(\".accordion-toggle-btn\");\n\n if (\n toggleAllButton.classList.contains(\"accordion-toggle-btn--closed\") &&\n accordionGroup.querySelectorAll(\".accordion-button.collapsed\").length == 0\n ) {\n toggleAllButton.classList.remove(\"accordion-toggle-btn--closed\");\n toggleAllButton.classList.add(\"accordion-toggle-btn--open\");\n toggleAllButton.textContent = \"Close all\";\n } else if (\n toggleAllButton.classList.contains(\"accordion-toggle-btn--open\") &&\n accordionGroup.querySelectorAll(\".accordion-button.collapsed\").length > 0\n ) {\n toggleAllButton.classList.remove(\"accordion-toggle-btn--open\");\n toggleAllButton.classList.add(\"accordion-toggle-btn--closed\");\n toggleAllButton.textContent = \"Open all\";\n }\n}\n\n/**\n * Open and scroll to an accordion panel specified via URL hash.\n *\n * @memberof module:Accordion\n *\n * @param {Object} event - (optional) The event that triggered this function.\n * @returns {void}\n */\nexport function accordionHashLinks (event) {\n let urlHash = window.location.hash,\n urlHashId = urlHash.substring(1),\n cleanHash = filterSpecialChar(urlHash);\n\n if (cleanHash.length > 0) {\n let targetElement = document.querySelector(`#collapse-${urlHashId}`),\n targetPanelButton = false;\n\n // Stop default hash link behaviour if target matches current hash location.\n if (event &&\n ((event.type === 'hashchange' && event.newURL === event.oldURL) ||\n (event.type === 'click' && event.target.hash === urlHash))\n ) {\n event.preventDefault();\n }\n\n // ID matching\n if (targetElement && targetElement.closest('.accordion-item')) {\n targetPanelButton = targetElement.closest(\".accordion-item\").querySelector(\".accordion-button\");\n }\n // Title matching\n else {\n let accordionButtons = document.querySelectorAll(\".accordion-button\");\n\n if (event && event.type === 'click') {\n cleanHash = filterSpecialChar(event.target.hash);\n }\n\n targetPanelButton = Array.from(accordionButtons).find((button) => filterSpecialChar(button.innerText) === cleanHash);\n }\n\n if (targetPanelButton){\n if (targetPanelButton.matches(\".collapsed\")) targetPanelButton.click();\n\n window.scrollTo(0, targetPanelButton.getBoundingClientRect().top +\n document.documentElement.scrollTop);\n }\n }\n}\n\n/**\n * filterSpecialChar\n * @param {string} value - value to filter\n * @return {undefined}\n **/\nfunction filterSpecialChar(value) {\n return decodeURI(value.toLowerCase().replace(/[^a-zA-Z0-9/]/g, ''));\n}\n", "/**\n * Show and play the embedded video\n *\n * @memberof module:Video\n *\n * @param {Object} event - The event that triggered this function.\n * @returns {void}\n */\nexport function videoEmbedPlay(event) {\n event.preventDefault();\n\n const thumbnail = event.target,\n component = thumbnail.closest(\".video\"),\n iframe = component.querySelector(\".video-embed iframe\")\n\n component.classList.remove(\"not-ready\");\n\n // Parse iFrame URL and set the 'autoplay' parameter to 1.\n if (!iframe.classList.contains(\"video-custom\")) {\n const url = new URL(iframe.src);\n url.searchParams.set('autoplay', '1');\n iframe.src = url.toString();\n }\n\n iframe.focus();\n\n}\n\n/**\n * Toggle the title of the video transcript accordion\n *\n * @memberof module:Video\n *\n * @param {Object} event - The event that triggered this function.\n * @returns {void}\n */\nexport function videoTranscriptTitle(event) {\n const accordionButton = event.target\n\n if (accordionButton.classList.contains('collapsed')) {\n accordionButton.textContent = \"Show transcript\"\n }\n else {\n accordionButton.textContent = \"Hide transcript\"\n }\n\n}\n", "/**\n * All native focusable tag names.\n */\nexport const focusableTags = [\n \"A\",\n \"INPUT\",\n \"BUTTON\",\n \"SELECT\",\n \"TEXTAREA\",\n \"IFRAME\",\n \"OBJECT\",\n \"DETAILS\",\n];\n\n/**\n *\n * Check whether an element is able to receive focus.\n * Note items with tabindex=\"-1\" are focusable via hash links and javascript - include extra logic if you need to filter these out.\n * @param {HTMLElement} element The HTML Element to check\n * @returns {boolean} true if element is able to receive focus, or false if not\n */\nexport function isFocusable(element) {\n if (!element || typeof element !== \"object\" || element.nodeType !== 1)\n return false;\n // Disabled or aria-hidden elements are not focusable\n if (\n element.hasAttribute(\"disabled\") ||\n element.getAttribute(\"aria-hidden\") === \"true\"\n )\n return false;\n // Elements with tabindex (any value) are focusable\n if (element.hasAttribute(\"tabindex\")) return true;\n // Contenteditable elements are focusable\n if (\n element.hasAttribute(\"contenteditable\") &&\n element.getAttribute(\"contenteditable\") !== \"false\"\n )\n return true;\n if (focusableTags.includes(element.tagName)) {\n if (element.tagName === \"A\") {\n return !!element.getAttribute(\"href\");\n }\n if ([\"INPUT\", \"BUTTON\", \"SELECT\", \"TEXTAREA\"].includes(element.tagName)) {\n return !element.disabled;\n }\n return true;\n }\n return false;\n}\n\n/**\n * Get all focusable elements within a container\n * @param {HTMLElement} container The container element to search within\n * @returns {HTMLElement[]} Array of focusable elements\n */\nexport function getFocusableElements(container) {\n if (!container) return [];\n\n const allElements = container.querySelectorAll(\"*\");\n return Array.from(allElements).filter((el) => isFocusable(el));\n}\n\n/**\n * Create a focus trap for accessibility\n * Traps keyboard focus within a container element (e.g., modal, navbar, menu)\n * @param {HTMLElement} container The container element to trap focus within\n * @param {Object} options Configuration options\n * @param {HTMLElement} options.returnFocusElement Element to return focus to when deactivated\n * @param {Function} options.onEscape Callback function when Escape key is pressed\n * @returns {Object} Focus trap controller with activate, deactivate, and update methods\n */\nexport function createFocusTrap(container, options = {}) {\n if (!container) {\n throw new Error(\"Container element is required for focus trap\");\n }\n\n const { returnFocusElement, onEscape } = options;\n let isActive = false;\n let focusableElements = [];\n let previousActiveElement = null;\n\n /**\n * Update the list of focusable elements\n */\n function updateFocusableElements() {\n focusableElements = getFocusableElements(container);\n }\n\n /**\n * Handle Tab key navigation within the trap\n */\n function handleTabKey(event) {\n if (!isActive || focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n const activeElement = document.activeElement;\n\n // Shift + Tab (backward)\n if (event.shiftKey) {\n if (\n activeElement === firstElement ||\n !container.contains(activeElement)\n ) {\n event.preventDefault();\n lastElement.focus();\n }\n }\n // Tab (forward)\n else {\n if (activeElement === lastElement || !container.contains(activeElement)) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n }\n\n /**\n * Handle Escape key to close/deactivate\n */\n function handleEscapeKey(event) {\n if (!isActive) return;\n\n if (event.key === \"Escape\" || event.key === \"Esc\") {\n event.preventDefault();\n if (typeof onEscape === \"function\") {\n onEscape();\n }\n }\n }\n\n /**\n * Handle all keyboard events\n */\n function handleKeyDown(event) {\n if (event.key === \"Tab\") {\n handleTabKey(event);\n } else if (event.key === \"Escape\" || event.key === \"Esc\") {\n handleEscapeKey(event);\n }\n }\n\n /**\n * Activate the focus trap\n */\n function activate() {\n if (isActive) return;\n\n // Store the currently focused element to return focus later\n previousActiveElement = document.activeElement;\n\n // Update focusable elements\n updateFocusableElements();\n\n // Add keyboard event listener\n document.addEventListener(\"keydown\", handleKeyDown);\n\n // Focus the first focusable element\n if (focusableElements.length > 0) {\n focusableElements[0].focus();\n }\n\n isActive = true;\n }\n\n /**\n * Deactivate the focus trap\n */\n function deactivate() {\n if (!isActive) return;\n\n // Remove keyboard event listener\n document.removeEventListener(\"keydown\", handleKeyDown);\n\n // Return focus to the element that had focus before activation\n const elementToFocus = returnFocusElement || previousActiveElement;\n if (elementToFocus && typeof elementToFocus.focus === \"function\") {\n elementToFocus.focus();\n }\n\n isActive = false;\n previousActiveElement = null;\n }\n\n return {\n activate,\n deactivate,\n update: updateFocusableElements,\n get isActive() {\n return isActive;\n },\n };\n}\n\n/**\n * Print page function\n * Attaches event listener to elements with class 'js-print' to trigger window.print()\n */\nexport function printPage() {\n // Add btn page print functions\n let printButton = document.querySelector(\".js-print\");\n if (printButton) {\n printButton.addEventListener(\"click\", function (event) {\n event.preventDefault();\n window.print();\n });\n }\n}\n", "/**\n * Media query breakpoints. These must be kept in sync with breakpoints defined in sass variables.\n */\nexport const breakpoints = {\n xs: 0,\n sm: 400,\n md: 700,\n lg: 992,\n xl: 1312,\n};\n", "import { createFocusTrap } from \"../../../js/utils.js\";\nimport { breakpoints } from \"../../../js/constants.js\";\n\nconst getIsMobile = () => window.innerWidth < breakpoints.lg;\n\nexport function initializeNavbar() {\n const navbar = document.getElementById(\"main-nav\");\n const overlay = document.getElementById(\"overlay\");\n const burgerBtn = document.getElementById(\"burgerBtn\");\n const burgerCloseBtn = document.getElementById(\"burgerCloseBtn\");\n let wasMobile = getIsMobile();\n\n /** @type {HTMLElement[]} */\n let inertTargets = [];\n\n // Focus trap instances (created on-demand)\n let mobileFocusTrap = null;\n\n function closeNavbar() {\n // Do not call static method bootstrap.Collapse.getInstance(navbar).hide()\n // because storybook has a problem with referencing global bootstrap object in production build.\n // Instead simulate the close button click - same thing.\n // Do not put side effects of closing menu here (eg clearing menu focus trap), instead use \"hidden.bs.collapse\" or \"hide.bs.collapse\" event handlers declared below.\n // Need to check if menu is actually set to show, otherwise click will open instead.\n if (navbar?.classList.contains(\"show\")) {\n burgerCloseBtn?.click();\n }\n }\n\n // Create mobile focus trap on-demand (when mobile menu opens)\n function createMobileFocusTrap() {\n if (!mobileFocusTrap && navbar) {\n mobileFocusTrap = createFocusTrap(navbar, {\n returnFocusElement: burgerBtn,\n onEscape: () => {\n closeNavbar();\n },\n });\n }\n return mobileFocusTrap;\n }\n\n // Setup dropdown event listeners.\n function setupDropdownListeners() {\n // Find all dropdown toggles (elements with data-bs-toggle=\"dropdown\")\n const dropdownToggles = navbar?.querySelectorAll(\n '[data-bs-toggle=\"dropdown\"]',\n );\n\n dropdownToggles?.forEach((toggle) => {\n // Find the associated dropdown menu within the same parent container\n const parentItem =\n toggle.closest(\".dropdown\") || toggle.closest(\".nav-item\");\n if (!parentItem) return;\n\n const dropdown = parentItem.querySelector(\".dropdown-menu\");\n if (!dropdown) return;\n\n // Add spacebar click for <a> tags, <buttons> already have this.\n if (toggle?.tagName === \"A\") {\n toggle.addEventListener(\"keydown\", (/** @type KeyboardEvent*/ e) => {\n if (e.key === \" \") {\n e.preventDefault();\n toggle.click();\n }\n });\n }\n\n // There are two separate toggle elements for desktop and mobile. Bootstrap only keeps one registered for these events,\n // which is the mobile button, hidden on desktop. Therefore, we need to handle any `a.dropdown-toggle` updates manually. The event is caught on the\n // mobile toggle, so traverse back up find the desktop toggle.\n toggle.addEventListener(\"hidden.bs.dropdown\", (e) => {\n const _toggle = parentItem.querySelector(\n 'a[data-bs-toggle=\"dropdown\"]',\n );\n _toggle?.classList.remove(\"show\");\n if (\n dropdown?.contains(document.activeElement) &&\n !(getIsMobile() || navbar.classList.contains(\"vertical\"))\n ) {\n _toggle?.focus();\n }\n });\n });\n }\n\n // Setup dropdown listeners on load\n if (navbar) {\n setupDropdownListeners();\n }\n\n // Close navbar when overlay is clicked\n overlay?.addEventListener(\"click\", () => {\n closeNavbar();\n });\n\n const resetNavbarState = (isMobile) => {\n const dropdownToggles = navbar?.querySelectorAll(\n \"a.dropdown-toggle, a.no-dropdown-toggle\",\n );\n\n if (isMobile) {\n // disable navlinks as toggles\n dropdownToggles?.forEach((toggle) => {\n // Skip toggle items with hasNoLink class\n if (toggle.classList.contains(\"hasNoLink\")) {\n return;\n }\n toggle.classList.replace(\"dropdown-toggle\", \"no-dropdown-toggle\");\n toggle.removeAttribute(\"data-bs-toggle\");\n });\n\n // Expand any dropdowns set to expand on mobile\n navbar\n ?.querySelectorAll('[data-is-expanded-on-mobile=\"true\"]')\n .forEach((item) => {\n item\n .querySelectorAll(\".dropdown-toggle, .dropdown-menu\")\n .forEach((item) => {\n item.classList.add(\"show\");\n });\n });\n } else {\n // reenable navlinks as toggle\n dropdownToggles?.forEach((toggle) => {\n toggle.classList.replace(\"no-dropdown-toggle\", \"dropdown-toggle\");\n toggle.setAttribute(\"data-bs-toggle\", \"dropdown\");\n });\n\n // Collapse any dropdowns set to expand on mobile\n navbar\n ?.querySelectorAll('[data-is-expanded-on-mobile=\"true\"]')\n .forEach((item) => {\n item\n .querySelectorAll(\".dropdown-toggle, .dropdown-menu\")\n .forEach((item) => {\n item.classList.remove(\"show\");\n });\n });\n\n // close the navbar\n closeNavbar();\n }\n };\n\n //All associated side effects of navbar collapse beginning belong here\n navbar?.addEventListener(\"hide.bs.collapse\", () => {\n overlay?.classList.remove(\"show\");\n });\n\n // All associated side effects of navbar collapse completion belong here.\n navbar?.addEventListener(\"hidden.bs.collapse\", () => {\n inertTargets.forEach((target) => {\n target.inert = false;\n });\n // Deactivate and destroy mobile focus trap\n if (mobileFocusTrap) {\n mobileFocusTrap.deactivate();\n mobileFocusTrap = null;\n }\n });\n\n // All associated side effects of navbar opening belong here.\n navbar?.addEventListener(\"shown.bs.collapse\", () => {\n if (getIsMobile) {\n // Check if navbar is opening\n setTimeout(() => {\n if (navbar?.classList.contains(\"show\")) {\n // set all siblings to inert\n inertTargets = Array.from(navbar.parentElement.children).filter(\n (child) => child !== navbar,\n );\n inertTargets.forEach((target) => {\n target.inert = true;\n });\n\n const trap = createMobileFocusTrap();\n trap.activate();\n }\n }, 0);\n }\n });\n\n window.addEventListener(\"resize\", () => {\n const isMobile = getIsMobile();\n if (wasMobile !== isMobile) {\n wasMobile = isMobile;\n resetNavbarState(isMobile);\n }\n });\n\n resetNavbarState(wasMobile);\n}\n", "/**\n * Initialise the Breadcrumb component.\n * Collapse long breadcrumbs when required.\n *\n * @memberof module:Breadcrumb\n *\n * @returns {void} Returns early when breadcrumb does not exist or its length is within set maxLength.\n */\nexport function initBreadcrumb() {\n // Set the standard breadcrumb length.\n let maxLength = 5;\n\n // Get the breadcrumb DOM element.\n const breadcrumb = document.querySelector(\".breadcrumb\");\n\n if (!breadcrumb) {\n return;\n }\n const expandCrumb = breadcrumb.querySelector(\".breadcrumb-toggle\");\n if (expandCrumb) {\n // Breadcrumb has already been initialised.\n return;\n }\n const breadcrumbList = breadcrumb.querySelectorAll(\".breadcrumb-item\");\n\n // Return when breadcrumb does not exist.\n if (!breadcrumbList || !breadcrumbList.length) {\n return;\n }\n\n const breadcrumbParent = breadcrumb.parentElement;\n if (!breadcrumbParent) {\n return;\n }\n\n // Collapse breadcrumb when width of breadcrumb overflows the container.\n if (breadcrumb.clientWidth >= breadcrumbParent.clientWidth) {\n maxLength = 3;\n }\n breadcrumbCollapse(breadcrumbList, maxLength);\n}\n\n/**\n * Collapse long breadcrumb lists\n *\n * @memberof module:Breadcrumb\n *\n * @param {Element} breadcrumbList - Breadcrumb DOM element.\n * @param {number} maxLength - Standard maximum length for breadcrumb.\n * @returns {void} Returns early when breadcrumb does not exist or its length is within set maxLength.\n */\nexport function breadcrumbCollapse(breadcrumbList, maxLength = 5) {\n // No shortening is required when breadcrumb does not exist or its length is within the maximum range.\n if (!breadcrumbList || breadcrumbList.length <= maxLength) {\n return;\n }\n\n const newList = document.createElement(\"ol\");\n newList.classList.add(\"breadcrumb-vertical\");\n\n breadcrumbList.forEach((crumb, index) => {\n if (index > 0 && index < breadcrumbList.length - 2) {\n crumb.querySelector(\"a\")?.setAttribute(\"tabindex\", -1);\n newList.appendChild(crumb);\n }\n\n if (index === 0) {\n let expandCrumb = document.createElement(\"li\"),\n expandButton = document.createElement(\"button\");\n\n expandCrumb.classList.add(\"breadcrumb-item\", \"breadcrumb-toggle\");\n expandButton.setAttribute(\"aria-label\", \"Expand the breadcrumbs\");\n expandButton.type = \"button\";\n expandButton.classList.add(\"breadcrumb-toggle-link\");\n expandButton.addEventListener(\"click\", expandMenu);\n\n expandCrumb.appendChild(expandButton);\n crumb.after(expandCrumb);\n }\n\n if (index === breadcrumbList.length - 1) {\n const expandCrumb = document.querySelector(\".breadcrumb-toggle\");\n if (expandCrumb) {\n const wrapperDiv = document.createElement(\"div\");\n wrapperDiv.classList.add(\"breadcrumb-collapse-wrapper\");\n wrapperDiv.appendChild(newList);\n expandCrumb.append(wrapperDiv);\n expandCrumb.addEventListener(\"focusout\", (event) => {\n // Check if the element receiving focus is outside the dropdown container\n if (\n !event.relatedTarget ||\n !expandCrumb.contains(event.relatedTarget)\n ) {\n wrapperDiv.parentElement.classList.remove(\"expanded\");\n }\n });\n }\n }\n });\n}\n\n/**\n * Expand shortened breadcrumb lists\n *\n * @memberof module:Breadcrumb\n *\n * @param {Event} event - The event that triggered this function.\n * @returns {void} Returns early when the breadcrumb does not exist or is empty.\n */\nexport function expandMenu(event) {\n const breadcrumb = event.target.closest(\".breadcrumb\");\n if (!breadcrumb) {\n console.log(\"expandMenu: Breadcrumb does not exist.\");\n return;\n }\n const breadcrumbList = breadcrumb.querySelectorAll(\".breadcrumb-item\");\n\n if (!breadcrumbList || !breadcrumbList.length) {\n console.log(\"expandMenu: Breadcrumb does not exist or is empty.\");\n return;\n }\n\n event.target.parentElement.classList.toggle(\"expanded\");\n if (event.target.parentElement.classList.contains(\"expanded\")) {\n // Focus the first focusable element inside\n const expandMenu = document.querySelector(\".breadcrumb-collapse-wrapper\");\n resetTabIndex(0);\n const firstItem = expandMenu.querySelector(\"a\");\n if (firstItem) {\n firstItem.focus();\n }\n }\n const expandButton = document.querySelector(\".breadcrumb-toggle-link\");\n expandButton && document.addEventListener(\"click\", collapseMenu);\n}\n\n/**\n * event listener for document click event used to collapse menu on clicking elsewhere\n * and also remove the event listener to prevent multiple listeners from being attached\n * @memberof module:Breadcrumb\n *\n * @param {Event} event - The event that triggered this function.\n * @returns {void} Returns nothing.\n */\nfunction collapseMenu(event) {\n event.stopPropagation();\n const expandButton = document.querySelector(\".breadcrumb-toggle-link\");\n const expandMenu = document.querySelector(\".breadcrumb-collapse-wrapper\");\n if (\n !expandMenu.contains(event.target) &&\n !expandButton.contains(event.target)\n ) {\n expandMenu.parentElement.classList.remove(\"expanded\");\n document.removeEventListener(\"click\", collapseMenu);\n resetTabIndex(-1);\n }\n}\n\nfunction resetTabIndex(tabindex) {\n const breadcrumbListExpanded = document.querySelectorAll(\n \".breadcrumb-collapse-wrapper li\",\n );\n if (!breadcrumbListExpanded) {\n return;\n }\n breadcrumbListExpanded.forEach((crumb) => {\n crumb.querySelector(\"a\")?.setAttribute(\"tabindex\", tabindex);\n });\n}\n", "export function initDateInput() {\n const dateContainers = document.querySelectorAll(\".date-container\");\n\n /**\n * @param {InputEvent} e\n * @returns void\n */\n const inputHandler = (e) => {\n // verify the event target is what we expect.\n if (!(e.target.tagName === \"INPUT\" && e.target.type === \"text\")) {\n return;\n }\n\n /**\n * @type HTMLInputElement\n */\n const input = e.target;\n const { value, min, max, pattern } = input;\n const previousValue = input.dataset.previousValue || \"\";\n // enforce the validation attributes\n if (max && parseInt(value) > parseInt(max)) {\n input.dataset.previousValue = input.value = max;\n return;\n }\n\n if (\n min &&\n parseInt(value) !== 0 && // Must allow typing leading zeroes\n value.length >= min.length &&\n parseInt(value) < parseInt(min)\n ) {\n input.dataset.previousValue = input.value = min;\n return;\n }\n\n if (\n value &&\n value !== \"\" &&\n parseInt(value) !== 0 &&\n !RegExp(pattern).test(value)\n ) {\n input.value = previousValue;\n return;\n }\n\n // all good - update previousValue with current value\n input.dataset.previousValue = input.value = input.value.trim();\n };\n\n /**\n * @param {FocusEvent} e\n * @returns void\n */\n const focusOutHandler = (e) => {\n // Because format is dd/mm/yyyy we want to add leading zeroes to single digits\n // verify the event target is what we expect\n if (!(e.target.tagName === \"INPUT\" && e.target.type === \"text\")) {\n return;\n }\n\n /** @type {HTMLInputElement} */\n const input = e.target;\n const { min, max } = input;\n const minLength = input.minLength || 0;\n const value = (input.value || \"\").trim();\n\n if (!value || parseInt(value) === 0) {\n input.dataset.previousValue = input.value = \"\";\n return;\n }\n\n // If value is less than the min, bump up to min and add padding.\n if (min && parseInt(value) < min) {\n input.dataset.previousValue = input.value = min.padStart(minLength, \"0\");\n return;\n }\n\n // If value exceeds max, bring it down to max and add padding\n if (max && parseInt(value) > max) {\n input.dataset.previousValue = input.value = max.padStart(minLength, \"0\");\n return;\n }\n\n input.dataset.previousValue = input.value = value.padStart(minLength, \"0\");\n };\n\n dateContainers.forEach((dateContainer) => {\n dateContainer.addEventListener(\"input\", inputHandler);\n dateContainer.addEventListener(\"focusout\", focusOutHandler);\n });\n}\n", "export function initQuickexit() {\n var quickExitElement = document.getElementsByClassName(\"qld-quick-exit\");\n var quickExitButton = document.querySelector(\".qld-quick-exit-button\");\n\n if (\n quickExitElement.length > 0 &&\n typeof quickExitButton !== \"undefined\" &&\n quickExitButton != null\n ) {\n onbtnClick();\n document.addEventListener(\"keydown\", handleKeydown);\n }\n}\n/**\n * onbtnClick -> clicking quick exit button a page\n * @return {undefined}\n **/\nfunction onbtnClick() {\n const escapeSite = \"https://www.google.com.au/\";\n var quickExitButton = document.querySelector(\".qld-quick-exit-button\");\n quickExitButton.onclick = function () {\n return quickExit(escapeSite);\n };\n}\n\n/**\n * handleKeydown -> escape keydown event\n * @return {undefined}\n **/\nfunction handleKeydown(e) {\n const escapeSite = \"https://www.google.com.au/\";\n\n if (e.key === \"Escape\") {\n quickExit(escapeSite);\n if (e) {\n // stop escape from cancelling redirect\n e.preventDefault();\n // early IEs don't have preventDefault\n e.returnValue = false;\n }\n return false;\n }\n}\n\n/**\n * quickExit function redirects a user on click and Esc key down\n * @param {string} site - site to replace on initiating the 'quick exit' ('Esc' key or clicking 'Close this site' button) function\n * @return {undefined}\n **/\nfunction quickExit(site) {\n // then redirect to a non-sensitive site\n window.open(site, \"_blank\");\n window.location.replace(site);\n // remove as much info from URL as possible\n if (window.history) {\n try {\n window.history.replaceState({}, \"\", \"/\");\n } catch (e) {\n e.printStackTrace();\n }\n }\n // disable default event handling\n return false;\n}\n", "/**\n * Toggles the class on a search div based on button click.\n *\n * @memberof module:Header\n *\n * @param {Event} event - The event that triggered this function.\n * @returns {void}\n */\nexport function toggleSearch(event) {\n // Prevent default action and stop event propagation\n try {\n event.preventDefault();\n event.stopPropagation();\n } catch (error) {\n console.error(\"Error in event handling:\", error);\n }\n\n // Get the search div\n const searchDiv = document.getElementById(\"qld-header-search\");\n const toggleButton = event.currentTarget;\n\n // Check current class and swap\n if (searchDiv) {\n if (searchDiv.classList.contains(\"is-open\")) {\n searchDiv.classList.remove(\"is-open\");\n searchDiv.classList.add(\"is-closed\");\n\n // Change icon and text back to default\n toggleButton.classList.remove(\"is-open\");\n toggleButton.classList.add(\"is-closed\");\n toggleButton.setAttribute(\"aria-expanded\", false);\n toggleButton.setAttribute(\"aria-label\", \"Open search\");\n toggleButton.textContent = \"Search\";\n } else {\n searchDiv.classList.remove(\"is-closed\");\n searchDiv.classList.add(\"is-open\");\n\n // Change icon and text to active state\n toggleButton.classList.remove(\"is-closed\");\n toggleButton.classList.add(\"is-open\");\n toggleButton.setAttribute(\"aria-expanded\", true);\n toggleButton.setAttribute(\"aria-label\", \"Close search\");\n toggleButton.textContent = \"Close\";\n }\n }\n}\n", "/**\n * Fetches data from the provided URL.\n *\n * @param {string} url - The URL to fetch data from.\n * @param {string} type - The type of data to fetch (suggestions or services).\n * @returns {Promise<Object>} - A promise that resolves to the fetched data.\n */\nasync function fetchData(url, type) {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n const data = await response.json();\n return data;\n } catch (error) {\n console.error(`Error fetching ${type}:`, error);\n return {};\n }\n}\n\n/**\n * Sets the selected suggestion into the input field and submits the form.\n *\n * @param {string} value - The selected suggestion.\n * @param {HTMLFormElement} form - The form element.\n * @returns {void}\n */\nexport function selectDynamicSuggestion(value, form) {\n const searchInput = form.querySelector(\".qld-search-input input\");\n const suggestions = form.querySelector(\".suggestions\");\n\n if (searchInput && suggestions) {\n // Assign queryValue, and cleanup string before submission\n let queryValue = value.replace(/\\s+/g, \" \").trim();\n searchInput.value = queryValue;\n\n // Form action\n const actionUrl = form.getAttribute(\"action\");\n\n //data-* attributes on search input field\n const atts = searchInput ? searchInput.dataset : null;\n\n // Construct the URL with proper parameters\n const params = new URLSearchParams({\n query: queryValue,\n collection: atts.collection || \"qgov~sp-search\",\n profile: atts.profile || \"qld\",\n num_ranks: atts.numRanks || \"10\",\n tiers: atts.tiers || \"off\",\n });\n\n const searchUrl = `${actionUrl}?${params.toString()}`;\n\n // Manually set the window location to the constructed URL\n window.location.href = searchUrl;\n }\n}\n\n/**\n * Shows/hides suggestions based on the user's input.\n *\n * @param {string} value - The current input value.\n * @param {boolean} isDefault - Whether to show default suggestions or not.\n * @param {HTMLFormElement} form - The form element.\n * @returns {void}\n **/\nexport async function showSuggestions(value = \"\", isDefault = false, form) {\n const searchInput = form.querySelector(\".qld-search-input input\");\n const suggestions = form.querySelector(\".suggestions\");\n const defaultSuggestionsContainer = form.querySelector(\n \".default-suggestions\",\n );\n const dynamicSuggestionsContainer = form.querySelector(\n \".dynamic-suggestions\",\n );\n\n if (!suggestions || !searchInput) {\n return;\n }\n\n // Hide/show default suggestions, and return early\n if (isDefault) {\n if (defaultSuggestionsContainer) {\n defaultSuggestionsContainer.classList.remove(\"d-none\");\n }\n if (dynamicSuggestionsContainer) {\n dynamicSuggestionsContainer.innerHTML = \"\";\n dynamicSuggestionsContainer.classList.add(\"d-none\");\n }\n return;\n }\n\n // If input is empty, hide dynamic suggestions and return early\n if (dynamicSuggestionsContainer) {\n if (value.length === 0) {\n dynamicSuggestionsContainer.innerHTML = \"\";\n dynamicSuggestionsContainer.classList.add(\"d-none\");\n return;\n }\n }\n\n // Script continues...dynamic suggestions is true and value.length > 0\n defaultSuggestionsContainer?.classList.add(\"d-none\");\n\n //data-* attributes on search input field\n const atts = searchInput ? searchInput.dataset : null;\n\n // Fetch dynamic suggestions if available\n if (dynamicSuggestionsContainer) {\n const suggestUrl = atts.suggestions;\n\n if (suggestUrl) {\n const collection = atts.collection || \"qgov~sp-search\";\n const profile = atts.profile || \"qld\";\n\n //Fetch data from suggestions API\n const fetchedSuggestions = await fetchData(\n `${suggestUrl}?collection=${collection}&profile=${profile}&fmt=json&alpha=0.5&partial_query=${encodeURIComponent(value)}`,\n \"suggestions\",\n );\n\n //Rended a suggestions list\n if (fetchedSuggestions.length > 0) {\n dynamicSuggestionsContainer.innerHTML = `\n <div class=\"suggestions-category\">\n <ul>${fetchedSuggestions\n .slice(0, 4)\n .map((item) => {\n const highlightedText = item.replace(\n new RegExp(`(${value})`, \"gi\"),\n \"<strong>$1</strong>\",\n );\n return `<li><a tabindex=\"0\" href=\"#\">${highlightedText}</a></li>`;\n })\n .join(\"\")}</ul>\n </div>`;\n\n dynamicSuggestionsContainer.classList.remove(\"d-none\");\n\n // Bind an event listener to suggestions container\n form\n .querySelector(\".suggestions .dynamic-suggestions\")\n .addEventListener(\"click\", (event) => {\n let linkItem = event.target.closest(\"a\");\n if (linkItem) {\n event.preventDefault();\n\n // Check if the link has a valid absolute URL\n const href = linkItem.getAttribute(\"href\");\n const isValidUrl =\n href &&\n href !== \"#\" &&\n (() => {\n try {\n const url = new URL(href, window.location.origin);\n return (\n url.protocol === \"http:\" || url.protocol === \"https:\"\n );\n } catch {\n return false;\n }\n })();\n\n if (isValidUrl) {\n // Navigate directly to the URL\n window.location.href = href;\n } else {\n // Use the search suggestion flow\n selectDynamicSuggestion(linkItem.textContent, form);\n }\n }\n });\n } else {\n dynamicSuggestionsContainer.innerHTML = \"\";\n dynamicSuggestionsContainer.classList.add(\"d-none\");\n }\n }\n\n const resultsUrl = atts.resultsUrl; //data-results-url;\n if (resultsUrl) {\n const collection = atts.collection || \"qgov~sp-search\";\n const profile = atts.profile || \"qld\";\n\n // Fetch related services from services API\n const fetchedServices = await fetchData(\n `${resultsUrl}?collection=${collection}&profile=${profile}&smeta_sfinder_sand=yes&query=${encodeURIComponent(value)}`,\n \"services\",\n );\n\n if (\n fetchedServices.response.resultPacket &&\n fetchedServices.response.resultPacket.results.length > 0\n ) {\n const viewMoreUrl =\n dynamicSuggestionsContainer.getAttribute(\"data-view-more\");\n\n // Build the services HTML safely\n const escapeHtmlAttr = (str) =>\n String(str)\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n\n const servicesItems = fetchedServices.response.resultPacket.results\n .slice(0, 4)\n .map(\n (item) =>\n `<li><a tabindex=\"0\" href=\"${item.liveUrl}\">${item.title}</a></li>`,\n )\n .join(\"\");\n\n const viewMoreItem = viewMoreUrl\n ? `<li><a tabindex=\"0\" href=\"${escapeHtmlAttr(viewMoreUrl)}\" class=\"view-more\">View more</a></li>`\n : \"\";\n\n dynamicSuggestionsContainer.innerHTML += `\n <div class=\"suggestions-category feature\">\n <strong class=\"suggestions-category-label d-block\">Related services</strong>\n <ul>${servicesItems}${viewMoreItem}</ul>\n </div>`;\n\n dynamicSuggestionsContainer.classList.remove(\"d-none\");\n\n // Attach click event listeners to each SERVICE item in list\n form\n .querySelector(\".suggestions .dynamic-suggestions\")\n .addEventListener(\"click\", (event) => {\n let linkItem = event.target.closest(\"a\");\n if (linkItem) {\n event.preventDefault();\n\n // Check if the link has a valid absolute URL\n const href = linkItem.getAttribute(\"href\");\n const isValidUrl =\n href &&\n href !== \"#\" &&\n (() => {\n try {\n const url = new URL(href, window.location.origin);\n return (\n url.protocol === \"http:\" || url.protocol === \"https:\"\n );\n } catch {\n return false;\n }\n })();\n\n if (isValidUrl) {\n // Navigate directly to the URL\n window.location.href = href;\n } else {\n // Use the search suggestion flow\n selectDynamicSuggestion(linkItem.textContent, form);\n }\n }\n });\n }\n }\n }\n}\n\n/**\n * Submits the search form with proper parameters.\n *\n * @param {string} query - The search query.\n * @param {HTMLFormElement} form - The form element.\n * @returns {void}\n */\nexport function submitSearchForm(query = \"\", form) {\n const searchInput = form.querySelector(\".qld-search-input input\");\n const atts = searchInput ? searchInput.dataset : null;\n\n const queryValue = query.trim().replace(/\\s+/g, \" \");\n\n const params = new URLSearchParams({\n query: queryValue,\n collection: atts.collection || \"qgov~sp-search\",\n profile: atts.profile || \"qld\",\n num_ranks: atts.numRanks || \"10\",\n tiers: atts.tiers || \"off\",\n });\n\n const searchUrl = `${form.getAttribute(\"action\")}?${params.toString()}`;\n window.location.href = searchUrl;\n}\n\n// Attach the function to the window object to make it globally accessible\nwindow.selectDynamicSuggestion = (value, form) =>\n selectDynamicSuggestion(value, form);\n", "export function backToTop() {\n const backToTop = document.querySelector(\".back-to-top .qld-dir-link\");\n\n if (backToTop) {\n backToTop.onclick = function (event) {\n document.body.scrollTop = 0; // For Safari\n document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera\n event.preventDefault();\n };\n }\n}\n", "export function initTabsScroll() {\n const tabObject = document.querySelectorAll('.qld-tabs');\n\n function updateTabs(tab) {\n const tabs = tab.querySelector('.nav-tabs');\n const scrollLeftBtn = tab.querySelector('.scroll-left');\n const scrollRightBtn = tab.querySelector('.scroll-right');\n const tabsAreaWidth = tabs.scrollWidth;\n\n if (tabs) {\n // Show or hide scroll buttons based on initial state\n const updateButtonVisibility = () => {\n if (tabs.scrollLeft === 0) {\n scrollLeftBtn.classList.remove('show');\n } else {\n scrollLeftBtn.classList.add('show');\n }\n\n if (tabs.scrollLeft + tabs.clientWidth >= tabsAreaWidth) {\n scrollRightBtn.classList.remove('show');\n } else {\n scrollRightBtn.classList.add('show');\n }\n };\n\n // Add scroll event listener to dynamically update button visibility\n tabs.addEventListener('scroll', updateButtonVisibility);\n\n // Initial visibility update\n updateButtonVisibility();\n\n // Scroll right button click event\n scrollRightBtn.addEventListener('click', () => {\n tabs.scrollBy({\n top: 0,\n left: 200,\n behavior: 'smooth',\n });\n });\n\n // Scroll left button click event\n scrollLeftBtn.addEventListener('click', () => {\n tabs.scrollBy({\n top: 0,\n left: -200,\n behavior: 'smooth',\n });\n });\n }\n }\n\n // Initial setup for all tabs\n tabObject.forEach((tab) => {\n updateTabs(tab);\n });\n\n // Update tabs on window resize\n window.addEventListener('resize', () => {\n tabObject.forEach((tab) => {\n updateTabs(tab);\n });\n });\n}\n", "export function initGlobalAlerts() {\n const globalAlerts = document.querySelectorAll(\".global-alert\");\n\n globalAlerts.forEach((alert) => {\n const id = alert.getAttribute(\"data-id\");\n\n // Only check localStorage if there's an ID\n if (id) {\n const dismissedAlert = getLocalStorageWithExpiry(`dismissedAlert-${id}`);\n if (!dismissedAlert) {\n alert.classList.remove(\"d-none\");\n }\n } else {\n alert.classList.remove(\"d-none\");\n }\n\n // Check if alert is dismissable (only add listeners if dismissable)\n const closeButton = alert.querySelector(\".btn-close\");\n if (closeButton) {\n // Handle both Bootstrap alert close event and custom btn-closed event\n const handleAlertClose = () => {\n const dismissedExpiryDays = parseInt(alert.getAttribute(\"data-expiry-days\"), 10);\n\n // Only save to localStorage if both ID and valid expiry exist\n if (id && dismissedExpiryDays && dismissedExpiryDays > 0) {\n setLocalStorageWithExpiry(`dismissedAlert-${id}`, true, dismissedExpiryDays);\n }\n\n alert.classList.add(\"d-none\");\n };\n\n // Listen for Bootstrap's close event (for Storybook compatibility)\n alert.addEventListener(\"closed.bs.alert\", handleAlertClose);\n\n // Listen for custom btn-closed event (for existing functionality)\n alert.addEventListener(\"btn-closed\", handleAlertClose);\n }\n });\n\n // basic set local storage function\n function setLocalStorageWithExpiry(key, value, dismissedExpiryDays) {\n const d = new Date();\n d.setTime(d.getTime() + dismissedExpiryDays * 24 * 60 * 60 * 1000);\n const item = {\n value: value,\n expiry: d.getTime(),\n };\n localStorage.setItem(key, JSON.stringify(item));\n }\n\n function getLocalStorageWithExpiry(key) {\n const itemStr = localStorage.getItem(key);\n if (!itemStr) {\n return null;\n }\n\n try {\n const item = JSON.parse(itemStr);\n const now = new Date().getTime();\n\n if (now > item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n return item.value;\n } catch (e) {\n localStorage.removeItem(key);\n return null;\n }\n }\n}\n", "/**\n * Checks whether target elements in a list of skip links are valid - ie they can receive focus.\n * @returns {boolean} Return true if skip links are valid, false if there is a problem.\n */\nexport function validateSkipLinks() {\n const skipLinks = document.querySelectorAll(\".qld-skip-links__item\");\n skipLinks.forEach((item) => {\n // check if target exists\n const href = item.getAttribute(\"href\"); // getAttribute returns the value as authored, not resolved value as full URL.\n const targetId = href.replace(/^#/, \"\");\n const target = document.querySelector(href);\n if (!target) {\n console.error(\n `A skip link with label \"${item.textContent}\" is targeting a non-existent element with id \"${targetId}\".`,\n );\n return false;\n }\n return true;\n });\n}\n", "import {\n accordionToggleAll,\n accordionToggleAllButtonState,\n accordionHashLinks,\n} from \"./../components/bs5/accordion/accordion.functions\";\nimport {\n videoEmbedPlay,\n videoTranscriptTitle,\n} from \"./../components/bs5/video/video.functions\";\nimport { initializeNavbar } from \"./../components/bs5/navbar/navbar.functions\";\nimport { initBreadcrumb } from \"./../components/bs5/breadcrumbs/breadcrumbs.functions\";\nimport { initDateInput } from \"../components/bs5/dateinput/dateinput.functions\";\nimport { initQuickexit } from \"./../components/bs5/quickexit/quickexit.functions\";\n//import { displayFeedbackForm } from \"./../components/bs5/footer/footer.functions\";\nimport { toggleSearch } from \"./../components/bs5/header/header.functions\";\nimport {\n showSuggestions,\n submitSearchForm,\n} from \"./../components/bs5/searchInput/search.functions\";\nimport { backToTop } from \"./../components/bs5/backToTop/backToTop.functions\";\nimport { initTabsScroll } from \"./../components/bs5/tabs/tabs.functions\";\nimport { initGlobalAlerts } from \"./../components/bs5/globalAlert/globalAlert.function\";\nimport { validateSkipLinks } from \"./../components/bs5/skiplinks/skipLinks.functions\";\nimport { printPage } from \"./utils\";\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n backToTop();\n\n initTabsScroll();\n\n initGlobalAlerts();\n\n // Footer FormIO Action\n // Note: This is added here, as there is an issue with breadcrumbShorten() function.\n // Will move this once that issue is fixed.\n /* \n const footerFormio = document.getElementById(\"qg-feedback-toggle\");\n if (footerFormio) {\n displayFeedbackForm();\n }\n */\n //Header search\n let headerSearchButton = document.getElementById(\n \"qld-header-toggle-search-button\",\n );\n if (headerSearchButton) {\n headerSearchButton.addEventListener(\"click\", toggleSearch);\n }\n\n // Get all forms with the class 'site-search'\n let forms = document.querySelectorAll(\".site-search\");\n\n forms.forEach((form) => {\n // Get the search input within the current form\n let searchInput = form.querySelector(\".qld-search-input input\");\n\n if (searchInput) {\n let timeout;\n\n // Add keyup event listener to the search input\n searchInput.addEventListener(\"input\", function (e) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n const value = e.target.value.trim();\n showSuggestions(value, value === \"\", form);\n }, 300);\n });\n\n // Attach event listener to form submit\n form.addEventListener(\"submit\", function (event) {\n event.preventDefault();\n const query = searchInput.value.trim();\n submitSearchForm(query, form);\n });\n }\n });\n\n //Header\n // Get the <header> element\n let header = document.querySelector(\"header\");\n if (header) {\n // Get the current page URL without query string parameters\n let url = window.location.origin + window.location.pathname;\n // Set the data-page-url attribute on the <header> element\n header.setAttribute(\"data-page-url\", url);\n }\n\n // Navbar\n initializeNavbar();\n\n // Breadcrumb\n initBreadcrumb();\n\n // Quick exit\n initQuickexit();\n\n // Accordion\n let accordionToggleButton = document.querySelectorAll(\n \".accordion-toggle-btn\",\n );\n\n accordionToggleButton.forEach(function (toggleButton) {\n toggleButton.addEventListener(\"click\", accordionToggleAll);\n\n let accordionButtons = toggleButton\n .closest(\".accordion-group\")\n .querySelectorAll(\".accordion-button\");\n\n accordionButtons.forEach(function (button) {\n button.addEventListener(\"click\", accordionToggleAllButtonState);\n });\n });\n\n let inPageLinks = document.querySelectorAll('a[href^=\"#\"]');\n\n accordionHashLinks();\n window.onhashchange = accordionHashLinks;\n inPageLinks.forEach(function (link) {\n link.addEventListener(\"click\", accordionHashLinks);\n });\n\n // Video\n let videoThumbnails = document.querySelectorAll(\".video-thumbnail\");\n\n videoThumbnails.forEach(function (thumbnail) {\n thumbnail.addEventListener(\"click\", videoEmbedPlay);\n });\n\n let videoTranscripts = document.querySelectorAll(\n \".video .accordion .accordion-button\",\n );\n\n videoTranscripts.forEach(function (transcript) {\n transcript.addEventListener(\"click\", videoTranscriptTitle);\n });\n\n // Add btn page print functions\n printPage();\n\n // Date Input\n initDateInput();\n\n // Skip Links\n validateSkipLinks();\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["accordionToggleAll", "event", "error", "toggleAllButton", "accordionButtons", "button", "accordionToggleAllButtonState", "accordionGroup", "accordionHashLinks", "urlHash", "urlHashId", "cleanHash", "filterSpecialChar", "targetElement", "targetPanelButton", "value", "videoEmbedPlay", "event", "thumbnail", "component", "iframe", "url", "videoTranscriptTitle", "accordionButton", "focusableTags", "isFocusable", "element", "getFocusableElements", "container", "allElements", "el", "createFocusTrap", "options", "returnFocusElement", "onEscape", "isActive", "focusableElements", "previousActiveElement", "updateFocusableElements", "handleTabKey", "event", "firstElement", "lastElement", "activeElement", "handleEscapeKey", "handleKeyDown", "activate", "deactivate", "elementToFocus", "printPage", "printButton", "breakpoints", "getIsMobile", "breakpoints", "initializeNavbar", "navbar", "overlay", "burgerBtn", "burgerCloseBtn", "wasMobile", "inertTargets", "mobileFocusTrap", "closeNavbar", "createMobileFocusTrap", "createFocusTrap", "setupDropdownListeners", "dropdownToggles", "toggle", "parentItem", "dropdown", "e", "_toggle", "resetNavbarState", "isMobile", "item", "target", "child", "initBreadcrumb", "maxLength", "breadcrumb", "breadcrumbList", "breadcrumbParent", "breadcrumbCollapse", "newList", "crumb", "index", "_a", "expandCrumb", "expandButton", "expandMenu", "wrapperDiv", "event", "resetTabIndex", "firstItem", "collapseMenu", "tabindex", "breadcrumbListExpanded", "initDateInput", "dateContainers", "inputHandler", "e", "input", "value", "min", "max", "pattern", "previousValue", "focusOutHandler", "minLength", "dateContainer", "initQuickexit", "quickExitElement", "quickExitButton", "onbtnClick", "handleKeydown", "escapeSite", "quickExit", "site", "e", "toggleSearch", "event", "error", "searchDiv", "toggleButton", "fetchData", "url", "type", "__async", "response", "error", "selectDynamicSuggestion", "value", "form", "searchInput", "suggestions", "queryValue", "actionUrl", "atts", "params", "searchUrl", "showSuggestions", "isDefault", "defaultSuggestionsContainer", "dynamicSuggestionsContainer", "suggestUrl", "collection", "profile", "fetchedSuggestions", "item", "event", "linkItem", "href", "e", "resultsUrl", "fetchedServices", "viewMoreUrl", "escapeHtmlAttr", "str", "servicesItems", "viewMoreItem", "submitSearchForm", "query", "backToTop", "event", "initTabsScroll", "tabObject", "updateTabs", "tab", "tabs", "scrollLeftBtn", "scrollRightBtn", "tabsAreaWidth", "updateButtonVisibility", "initGlobalAlerts", "alert", "id", "getLocalStorageWithExpiry", "handleAlertClose", "dismissedExpiryDays", "setLocalStorageWithExpiry", "key", "value", "d", "item", "itemStr", "e", "validateSkipLinks", "item", "href", "targetId", "backToTop", "initTabsScroll", "initGlobalAlerts", "headerSearchButton", "toggleSearch", "form", "searchInput", "timeout", "e", "value", "showSuggestions", "event", "query", "submitSearchForm", "header", "url", "initializeNavbar", "initBreadcrumb", "initQuickexit", "toggleButton", "accordionToggleAll", "button", "accordionToggleAllButtonState", "inPageLinks", "accordionHashLinks", "link", "thumbnail", "videoEmbedPlay", "transcript", "videoTranscriptTitle", "printPage", "initDateInput", "validateSkipLinks"]
7
7
  }
@@ -1128,7 +1128,7 @@ var i=(e,a)=>()=>(e&&(a=e(e=0)),a);var O5=(e,a)=>()=>(a||e((a={exports:{}}).expo
1128
1128
  </section>
1129
1129
  {{/each }}
1130
1130
  </div>`});var g1,m1=i(()=>{g1=`
1131
- <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.22","branch":"HEAD","tag":"v2.1.22","commit":"823e1a81d563226cc5f1c89939d31e11bfd537e4","majorVersion":"v2"} -->
1131
+ <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.2.0","branch":"HEAD","tag":"v2.2.0","commit":"2bac80bfa04fb8f4c5d0c02e1f621a5bc8cd2a98","majorVersion":"v2"} -->
1132
1132
 
1133
1133
  {{! Select environment, used verbatium if not using predefind key
1134
1134
  cdn := PROD|STAGING|BETA|TEST|DEV|???
@@ -1,5 +1,5 @@
1
1
 
2
- <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.22","branch":"HEAD","tag":"v2.1.22","commit":"823e1a81d563226cc5f1c89939d31e11bfd537e4","majorVersion":"v2"} -->
2
+ <!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.2.0","branch":"HEAD","tag":"v2.2.0","commit":"2bac80bfa04fb8f4c5d0c02e1f621a5bc8cd2a98","majorVersion":"v2"} -->
3
3
 
4
4
  {{! Select environment, used verbatium if not using predefind key
5
5
  cdn := PROD|STAGING|BETA|TEST|DEV|???