@qld-gov-au/qgds-bootstrap5 2.1.1 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/components/bs5/button/button.hbs +2 -1
- package/dist/assets/components/bs5/dateinput/dateinput.hbs +3 -3
- package/dist/assets/components/bs5/formcheck/formcheck.hbs +1 -1
- package/dist/assets/components/bs5/head/head.hbs +1 -1
- package/dist/assets/components/bs5/select/select.hbs +1 -1
- package/dist/assets/components/bs5/textarea/textarea.hbs +1 -1
- package/dist/assets/components/bs5/textbox/textbox.hbs +1 -1
- package/dist/assets/css/qld.bootstrap.css +2 -2
- package/dist/assets/css/qld.bootstrap.css.map +2 -2
- package/dist/assets/css/qld.bootstrap.legacy.css +2 -2
- package/dist/assets/css/qld.bootstrap.legacy.css.map +2 -2
- package/dist/assets/js/handlebars.helpers.bundle.js +1 -1
- package/dist/assets/js/handlebars.init.min.js +11 -10
- package/dist/assets/js/handlebars.init.min.js.map +2 -2
- package/dist/assets/js/handlebars.partials.js +11 -10
- package/dist/assets/js/handlebars.partials.js.map +2 -2
- package/dist/assets/js/qld.bootstrap.min.js +6 -6
- package/dist/assets/js/qld.bootstrap.min.js.map +3 -3
- package/dist/assets/node/handlebars.init.min.js +8 -7
- package/dist/assets/node/handlebars.init.min.js.map +2 -2
- package/dist/components/bs5/button/button.hbs +2 -1
- package/dist/components/bs5/dateinput/dateinput.hbs +3 -3
- package/dist/components/bs5/formcheck/formcheck.hbs +1 -1
- package/dist/components/bs5/head/head.hbs +1 -1
- package/dist/components/bs5/select/select.hbs +1 -1
- package/dist/components/bs5/textarea/textarea.hbs +1 -1
- package/dist/components/bs5/textbox/textbox.hbs +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
- package/src/components/bs5/accordion/mdx/_designResources.mdx +0 -1
- package/src/components/bs5/backToTop/backToTop.mdx +0 -1
- package/src/components/bs5/banner/Banner.mdx +0 -1
- package/src/components/bs5/blockquote/Blockquote.mdx +0 -1
- package/src/components/bs5/breadcrumbs/Breadcrumbs.mdx +0 -1
- package/src/components/bs5/button/Button.mdx +0 -1
- package/src/components/bs5/button/button.hbs +2 -1
- package/src/components/bs5/callToAction/callToAction.mdx +0 -1
- package/src/components/bs5/callout/Callout.mdx +0 -1
- package/src/components/bs5/card/Card.mdx +0 -1
- package/src/components/bs5/dateinput/dateinput.hbs +3 -3
- package/src/components/bs5/directionLinks/DirectionLinks.mdx +0 -1
- package/src/components/bs5/footer/Footer.mdx +0 -1
- package/src/components/bs5/formcheck/formcheck.hbs +1 -1
- package/src/components/bs5/formcheck/stories/checkbox/Checkbox.mdx +1 -3
- package/src/components/bs5/formcheck/stories/radio/Radio.mdx +0 -1
- package/src/components/bs5/globalAlert/GlobalAlert.mdx +0 -1
- package/src/components/bs5/header/header.scss +1 -1
- package/src/components/bs5/image/Image.mdx +0 -1
- package/src/components/bs5/inpageAlert/InpageAlert.mdx +0 -1
- package/src/components/bs5/inpagenav/Inpagenav.mdx +0 -1
- package/src/components/bs5/link/link.mdx +1 -3
- package/src/components/bs5/linkColumns/linkColumns.mdx +0 -1
- package/src/components/bs5/navbar/navbar.scss +75 -13
- package/src/components/bs5/pageLayout/pageLayout.stories.js +2 -0
- package/src/components/bs5/pagination/Pagination.mdx +0 -1
- package/src/components/bs5/pagination/pagination.scss +14 -18
- package/src/components/bs5/promotionalPanel/PromotionalPanel.mdx +0 -1
- package/src/components/bs5/searchInput/SearchInput.mdx +1 -1
- package/src/components/bs5/searchInput/search.functions.js +48 -2
- package/src/components/bs5/select/select.hbs +1 -1
- package/src/components/bs5/table/Table.mdx +0 -1
- package/src/components/bs5/tabs/Tabs.mdx +0 -1
- package/src/components/bs5/tag/Tag.mdx +0 -1
- package/src/components/bs5/textarea/textarea.hbs +1 -1
- package/src/components/bs5/textbox/textbox.hbs +1 -1
- package/src/components/bs5/video/Video.mdx +0 -1
- package/src/components/bs5/video/video.scss +1 -1
- package/src/css/mixins/focusable.scss +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";(()=>{var L=(e,t,o)=>new Promise((n,r)=>{var c=a=>{try{s(o.next(a))}catch(p){r(p)}},i=a=>{try{s(o.throw(a))}catch(p){r(p)}},s=a=>a.done?n(a.value):Promise.resolve(a.value).then(c,i);s((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 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=S(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 i=document.querySelectorAll(".accordion-button");e&&e.type==="click"&&(n=S(e.target.hash)),c=Array.from(i).find(s=>S(s.innerText)===n)}c&&(c.matches(".collapsed")&&c.click(),window.scrollTo(0,c.getBoundingClientRect().top+document.documentElement.scrollTop))}}function S(e){return decodeURI(e.toLowerCase().replace(/[^a-zA-Z0-9/]/g,""))}function A(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 j=["A","INPUT","BUTTON","SELECT","TEXTAREA","IFRAME","OBJECT","DETAILS"];function z(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:j.includes(e.tagName)?e.tagName==="A"?!!e.getAttribute("href"):["INPUT","BUTTON","SELECT","TEXTAREA"].includes(e.tagName)?!e.disabled:!0:!1}function K(e){if(!e)return[];let t=e.querySelectorAll("*");return Array.from(t).filter(o=>z(o))}function x(e,t={}){if(!e)throw new Error("Container element is required for focus trap");let{returnFocusElement:o,onEscape:n}=t,r=!1,c=[],i=null;function s(){c=K(e)}function a(l){if(!r||c.length===0)return;let d=c[0],f=c[c.length-1],u=document.activeElement;l.shiftKey?(u===d||!e.contains(u))&&(l.preventDefault(),f.focus()):(u===f||!e.contains(u))&&(l.preventDefault(),d.focus())}function p(l){r&&(l.key==="Escape"||l.key==="Esc")&&(l.preventDefault(),typeof n=="function"&&n())}function g(l){l.key==="Tab"?a(l):(l.key==="Escape"||l.key==="Esc")&&p(l)}function m(){r||(i=document.activeElement,s(),document.addEventListener("keydown",g),c.length>0&&c[0].focus(),r=!0)}function h(){if(!r)return;document.removeEventListener("keydown",g);let l=o||i;l&&typeof l.focus=="function"&&l.focus(),r=!1,i=null}return{activate:m,deactivate:h,update:s,get isActive(){return r}}}var v={xs:0,sm:400,md:700,lg:992,xl:1312};function I(){let e=document.getElementById("main-nav"),t=document.getElementById("overlay"),o=document.getElementById("burgerBtn"),n=document.getElementById("burgerCloseBtn"),c=["head","main","footer"].map(d=>document.getElementById(d)).filter(Boolean),i=d=>{c.forEach(f=>{d?f.setAttribute("aria-hidden","true"):f.removeAttribute("aria-hidden")})},s=null,a=new Map;function p(){e!=null&&e.classList.contains("show")&&(n==null||n.click())}function g(){return!s&&e&&(s=x(e,{returnFocusElement:o,onEscape:()=>{p()}})),s}function m(d,f){if(!a.has(d)){let u=x(d,{returnFocusElement:f,onEscape:()=>{let b=bootstrap.Dropdown.getInstance(f);b&&b.hide()}});a.set(d,u)}return a.get(d)}function h(){let d=e==null?void 0:e.querySelectorAll('[data-bs-toggle="dropdown"]');d==null||d.forEach(f=>{let u=f.closest(".dropdown")||f.closest(".nav-item");if(!u)return;let b=u.querySelector(".dropdown-menu");b&&(f.addEventListener("shown.bs.dropdown",()=>{if(!(window.innerWidth<v.lg)){let _=m(b,f);setTimeout(()=>_.activate(),0)}}),f.addEventListener("hidden.bs.dropdown",()=>{let w=a.get(b);w&&w.isActive&&w.deactivate()}))})}e&&h(),t==null||t.addEventListener("click",()=>{p()});let l=()=>{let d=window.innerWidth<v.lg;document.querySelectorAll(".navbar a.dropdown-toggle, .navbar a.no-dropdown-toggle").forEach(u=>{if(d){if(u.classList.contains("hasNoLink"))return;u.classList.replace("dropdown-toggle","no-dropdown-toggle"),u.removeAttribute("data-bs-toggle")}else u.classList.replace("no-dropdown-toggle","dropdown-toggle"),u.setAttribute("data-bs-toggle","dropdown")}),d||p()};window.addEventListener("resize",l),l(),e==null||e.addEventListener("hide.bs.collapse",()=>{t==null||t.classList.remove("show")}),e==null||e.addEventListener("hidden.bs.collapse",()=>{i(!1),s&&(s.deactivate(),s=null)}),e==null||e.addEventListener("shown.bs.collapse",()=>{setTimeout(()=>{e!=null&&e.classList.contains("show")&&(i(!0),window.innerWidth<v.lg&&g().activate())},0)})}function C(){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),G(n,e))}function G(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 i=document.createElement("li"),s=document.createElement("button");i.classList.add("breadcrumb-item","breadcrumb-toggle"),s.setAttribute("aria-label","Expand the breadcrumbs"),s.type="button",s.classList.add("breadcrumb-toggle-link"),s.addEventListener("click",J),i.appendChild(s),n.after(i)}if(r===e.length-1){let i=document.querySelector(".breadcrumb-toggle");if(i){let s=document.createElement("div");s.classList.add("breadcrumb-collapse-wrapper"),s.appendChild(o),i.append(s),i.addEventListener("focusout",a=>{(!a.relatedTarget||!i.contains(a.relatedTarget))&&s.parentElement.classList.remove("expanded")})}}})}function J(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");$(0);let c=r.querySelector("a");c&&c.focus()}document.querySelector(".breadcrumb-toggle-link")&&document.addEventListener("click",D)}function D(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",D),$(-1))}function $(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:i,max:s,pattern:a}=r,p=r.dataset.previousValue||"";if(s&&parseInt(c)>parseInt(s)){r.dataset.previousValue=r.value=s;return}if(i&&parseInt(c)!==0&&c.length>=i.length&&parseInt(c)<parseInt(i)){r.dataset.previousValue=r.value=i;return}if(c&&c!==""&&parseInt(c)!==0&&!RegExp(a).test(c)){r.value=p;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:i}=r,s=r.minLength||0,a=(r.value||"").trim();if(!a||parseInt(a)===0){r.dataset.previousValue=r.value="";return}if(c&&parseInt(a)<c){r.dataset.previousValue=r.value=c.padStart(s,"0");return}if(i&&parseInt(a)>i){r.dataset.previousValue=r.value=i.padStart(s,"0");return}r.dataset.previousValue=r.value=a.padStart(s,"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&&(Q(),X())}function Q(){let e="https://www.google.com.au/";var t=document.querySelector(".qld-quick-exit-button");t.onclick=function(){return U(e)}}function X(){let e="https://www.google.com.au/";document.addEventListener("keydown",function(t){if(t.keyCode===27)return U(e),t&&(t.preventDefault(),t.returnValue=!1),!1})}function U(e){if(window.open(e,"_blank"),window.location.replace(e),window.history)try{window.history.replaceState({},"","/")}catch(t){t.printStackTrace()}return!1}function N(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 P(e,t){return L(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 q(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"),i=o?o.dataset:null,s=new URLSearchParams({query:r,collection:i.collection||"qgov~sp-search",profile:i.profile||"qld",num_ranks:i.numRanks||"10",tiers:i.tiers||"off"}),a=`${c}?${s.toString()}`;window.location.href=a}}function R(e="",t=!1,o){return L(this,null,function*(){let n=o.querySelector(".qld-search-input input"),r=o.querySelector(".suggestions"),c=o.querySelector(".default-suggestions"),i=o.querySelector(".dynamic-suggestions");if(!r||!n)return;if(t){c&&c.classList.remove("d-none"),i&&(i.innerHTML="",i.classList.add("d-none"));return}if(i&&e.length===0){i.innerHTML="",i.classList.add("d-none");return}c==null||c.classList.add("d-none");let s=n?n.dataset:null;if(i){let a=s.suggestions;if(a){let g=s.collection||"qgov~sp-search",m=s.profile||"qld",h=yield P(`${a}?collection=${g}&profile=${m}&fmt=json&alpha=0.5&partial_query=${encodeURIComponent(e)}`,"suggestions");h.length>0?(i.innerHTML=`
|
|
1
|
+
"use strict";(()=>{var S=(e,t,o)=>new Promise((n,r)=>{var c=a=>{try{s(o.next(a))}catch(f){r(f)}},i=a=>{try{s(o.throw(a))}catch(f){r(f)}},s=a=>a.done?n(a.value):Promise.resolve(a.value).then(c,i);s((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 B(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 i=document.querySelectorAll(".accordion-button");e&&e.type==="click"&&(n=x(e.target.hash)),c=Array.from(i).find(s=>x(s.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 I(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 C(e){let t=e.target;t.classList.contains("collapsed")?t.textContent="Show transcript":t.textContent="Hide transcript"}var z=["A","INPUT","BUTTON","SELECT","TEXTAREA","IFRAME","OBJECT","DETAILS"];function K(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:z.includes(e.tagName)?e.tagName==="A"?!!e.getAttribute("href"):["INPUT","BUTTON","SELECT","TEXTAREA"].includes(e.tagName)?!e.disabled:!0:!1}function G(e){if(!e)return[];let t=e.querySelectorAll("*");return Array.from(t).filter(o=>K(o))}function q(e,t={}){if(!e)throw new Error("Container element is required for focus trap");let{returnFocusElement:o,onEscape:n}=t,r=!1,c=[],i=null;function s(){c=G(e)}function a(l){if(!r||c.length===0)return;let d=c[0],u=c[c.length-1],p=document.activeElement;l.shiftKey?(p===d||!e.contains(p))&&(l.preventDefault(),u.focus()):(p===u||!e.contains(p))&&(l.preventDefault(),d.focus())}function f(l){r&&(l.key==="Escape"||l.key==="Esc")&&(l.preventDefault(),typeof n=="function"&&n())}function m(l){l.key==="Tab"?a(l):(l.key==="Escape"||l.key==="Esc")&&f(l)}function h(){r||(i=document.activeElement,s(),document.addEventListener("keydown",m),c.length>0&&c[0].focus(),r=!0)}function b(){if(!r)return;document.removeEventListener("keydown",m);let l=o||i;l&&typeof l.focus=="function"&&l.focus(),r=!1,i=null}return{activate:h,deactivate:b,update:s,get isActive(){return r}}}var L={xs:0,sm:400,md:700,lg:992,xl:1312};function D(){let e=document.getElementById("main-nav"),t=document.getElementById("overlay"),o=document.getElementById("burgerBtn"),n=document.getElementById("burgerCloseBtn"),c=["head","main","footer"].map(d=>document.getElementById(d)).filter(Boolean),i=d=>{c.forEach(u=>{d?u.setAttribute("aria-hidden","true"):u.removeAttribute("aria-hidden")})},s=null,a=new Map;function f(){e!=null&&e.classList.contains("show")&&(n==null||n.click())}function m(){return!s&&e&&(s=q(e,{returnFocusElement:o,onEscape:()=>{f()}})),s}function h(d,u){if(!a.has(d)){let p=q(d,{returnFocusElement:u,onEscape:()=>{let g=bootstrap.Dropdown.getInstance(u);g&&g.hide()}});a.set(d,p)}return a.get(d)}function b(){let d=e==null?void 0:e.querySelectorAll('[data-bs-toggle="dropdown"]');d==null||d.forEach(u=>{let p=u.closest(".dropdown")||u.closest(".nav-item");if(!p)return;let g=p.querySelector(".dropdown-menu");g&&(u.addEventListener("shown.bs.dropdown",()=>{if(!(window.innerWidth<L.lg)){let T=h(g,u);setTimeout(()=>T.activate(),0)}}),u.addEventListener("hidden.bs.dropdown",()=>{let w=a.get(g);w&&w.isActive&&w.deactivate()}))})}e&&b(),t==null||t.addEventListener("click",()=>{f()});let l=()=>{let d=window.innerWidth<L.lg;document.querySelectorAll(".navbar a.dropdown-toggle, .navbar a.no-dropdown-toggle").forEach(p=>{if(d){if(p.classList.contains("hasNoLink"))return;p.classList.replace("dropdown-toggle","no-dropdown-toggle"),p.removeAttribute("data-bs-toggle")}else p.classList.replace("no-dropdown-toggle","dropdown-toggle"),p.setAttribute("data-bs-toggle","dropdown")}),d||f()};window.addEventListener("resize",l),l(),e==null||e.addEventListener("hide.bs.collapse",()=>{t==null||t.classList.remove("show")}),e==null||e.addEventListener("hidden.bs.collapse",()=>{i(!1),s&&(s.deactivate(),s=null)}),e==null||e.addEventListener("shown.bs.collapse",()=>{setTimeout(()=>{e!=null&&e.classList.contains("show")&&(i(!0),window.innerWidth<L.lg&&m().activate())},0)})}function U(){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),J(n,e))}function J(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 i=document.createElement("li"),s=document.createElement("button");i.classList.add("breadcrumb-item","breadcrumb-toggle"),s.setAttribute("aria-label","Expand the breadcrumbs"),s.type="button",s.classList.add("breadcrumb-toggle-link"),s.addEventListener("click",Q),i.appendChild(s),n.after(i)}if(r===e.length-1){let i=document.querySelector(".breadcrumb-toggle");if(i){let s=document.createElement("div");s.classList.add("breadcrumb-collapse-wrapper"),s.appendChild(o),i.append(s),i.addEventListener("focusout",a=>{(!a.relatedTarget||!i.contains(a.relatedTarget))&&s.parentElement.classList.remove("expanded")})}}})}function Q(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");M(0);let c=r.querySelector("a");c&&c.focus()}document.querySelector(".breadcrumb-toggle-link")&&document.addEventListener("click",$)}function $(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",$),M(-1))}function M(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 N(){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:i,max:s,pattern:a}=r,f=r.dataset.previousValue||"";if(s&&parseInt(c)>parseInt(s)){r.dataset.previousValue=r.value=s;return}if(i&&parseInt(c)!==0&&c.length>=i.length&&parseInt(c)<parseInt(i)){r.dataset.previousValue=r.value=i;return}if(c&&c!==""&&parseInt(c)!==0&&!RegExp(a).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:i}=r,s=r.minLength||0,a=(r.value||"").trim();if(!a||parseInt(a)===0){r.dataset.previousValue=r.value="";return}if(c&&parseInt(a)<c){r.dataset.previousValue=r.value=c.padStart(s,"0");return}if(i&&parseInt(a)>i){r.dataset.previousValue=r.value=i.padStart(s,"0");return}r.dataset.previousValue=r.value=a.padStart(s,"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&&(X(),Z())}function X(){let e="https://www.google.com.au/";var t=document.querySelector(".qld-quick-exit-button");t.onclick=function(){return R(e)}}function Z(){let e="https://www.google.com.au/";document.addEventListener("keydown",function(t){if(t.keyCode===27)return R(e),t&&(t.preventDefault(),t.returnValue=!1),!1})}function R(e){if(window.open(e,"_blank"),window.location.replace(e),window.history)try{window.history.replaceState({},"","/")}catch(t){t.printStackTrace()}return!1}function P(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 V(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 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"),i=o?o.dataset:null,s=new URLSearchParams({query:r,collection:i.collection||"qgov~sp-search",profile:i.profile||"qld",num_ranks:i.numRanks||"10",tiers:i.tiers||"off"}),a=`${c}?${s.toString()}`;window.location.href=a}}function F(e="",t=!1,o){return S(this,null,function*(){let n=o.querySelector(".qld-search-input input"),r=o.querySelector(".suggestions"),c=o.querySelector(".default-suggestions"),i=o.querySelector(".dynamic-suggestions");if(!r||!n)return;if(t){c&&c.classList.remove("d-none"),i&&(i.innerHTML="",i.classList.add("d-none"));return}if(i&&e.length===0){i.innerHTML="",i.classList.add("d-none");return}c==null||c.classList.add("d-none");let s=n?n.dataset:null;if(i){let a=s.suggestions;if(a){let m=s.collection||"qgov~sp-search",h=s.profile||"qld",b=yield V(`${a}?collection=${m}&profile=${h}&fmt=json&alpha=0.5&partial_query=${encodeURIComponent(e)}`,"suggestions");b.length>0?(i.innerHTML=`
|
|
2
2
|
<div class="suggestions-category">
|
|
3
|
-
<ul>${
|
|
4
|
-
</div>`,i.classList.remove("d-none"),o.querySelector(".suggestions .dynamic-suggestions").addEventListener("click",l=>{let d=l.target.closest("a");d
|
|
3
|
+
<ul>${b.slice(0,4).map(l=>`<li><a tabindex="0" href="#">${l.replace(new RegExp(`(${e})`,"gi"),"<strong>$1</strong>")}</a></li>`).join("")}</ul>
|
|
4
|
+
</div>`,i.classList.remove("d-none"),o.querySelector(".suggestions .dynamic-suggestions").addEventListener("click",l=>{let d=l.target.closest("a");if(d){l.preventDefault();let u=d.getAttribute("href");u&&u!=="#"&&(()=>{try{let g=new URL(u,window.location.origin);return g.protocol==="http:"||g.protocol==="https:"}catch(g){return!1}})()?window.location.href=u:k(d.textContent,o)}})):(i.innerHTML="",i.classList.add("d-none"))}let f=s.resultsUrl;if(f){let m=s.collection||"qgov~sp-search",h=s.profile||"qld",b=yield V(`${f}?collection=${m}&profile=${h}&smeta_sfinder_sand=yes&query=${encodeURIComponent(e)}`,"services");if(b.response.resultPacket&&b.response.resultPacket.results.length>0){let l=i.getAttribute("data-view-more"),d=b.response.resultPacket.results.slice(0,4).map(p=>`<li><a tabindex="0" href="${p.liveUrl}">${p.title}</a></li>`).join(""),u=l?`<li><a tabindex="0" href="${l}" class="view-more">View more</a></li>`:"";i.innerHTML+=`
|
|
5
5
|
<div class="suggestions-category feature">
|
|
6
6
|
<strong class="suggestions-category-label d-block">Related services</strong>
|
|
7
|
-
<ul>${d}${
|
|
8
|
-
</div>`,i.classList.remove("d-none"),o.querySelector(".suggestions .dynamic-suggestions").addEventListener("click",
|
|
9
|
-
//# @qld-gov-au/qgds-bootstrap5 - v2.1.
|
|
7
|
+
<ul>${d}${u}</ul>
|
|
8
|
+
</div>`,i.classList.remove("d-none"),o.querySelector(".suggestions .dynamic-suggestions").addEventListener("click",p=>{let g=p.target.closest("a");if(g){p.preventDefault();let w=g.getAttribute("href");w&&w!=="#"&&(()=>{try{let v=new URL(w,window.location.origin);return v.protocol==="http:"||v.protocol==="https:"}catch(v){return!1}})()?window.location.href=w:k(g.textContent,o)}})}}}})}function H(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"}),i=`${t.getAttribute("action")}?${c.toString()}`;window.location.href=i}window.selectDynamicSuggestion=(e,t)=>k(e,t);function O(){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 W(){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"),i=n.scrollWidth;if(n){let s=()=>{n.scrollLeft===0?r.classList.remove("show"):r.classList.add("show"),n.scrollLeft+n.clientWidth>=i?c.classList.remove("show"):c.classList.add("show")};n.addEventListener("scroll",s),s(),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 _(){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 i=()=>{let s=parseInt(n.getAttribute("data-expiry-days"),10);r&&s&&s>0&&t(`dismissedAlert-${r}`,!0,s),n.classList.add("d-none")};n.addEventListener("closed.bs.alert",i),n.addEventListener("btn-closed",i)}});function t(n,r,c){let i=new Date;i.setTime(i.getTime()+c*24*60*60*1e3);let s={value:r,expiry:i.getTime()};localStorage.setItem(n,JSON.stringify(s))}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 j(){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",()=>{O(),W(),_();let e=document.getElementById("qld-header-toggle-search-button");e&&e.addEventListener("click",P),document.querySelectorAll(".site-search").forEach(s=>{let a=s.querySelector(".qld-search-input input");if(a){let f;a.addEventListener("input",function(m){clearTimeout(f),f=setTimeout(()=>{let h=m.target.value.trim();F(h,h==="",s)},300)}),s.addEventListener("submit",function(m){m.preventDefault();let h=a.value.trim();H(h,s)})}});let o=document.querySelector("header");if(o){let s=window.location.origin+window.location.pathname;o.setAttribute("data-page-url",s)}D(),U(),window.addEventListener("click",y,!0),window.addEventListener("keydown",y,!0),y(),document.querySelectorAll(".accordion-toggle-btn").forEach(function(s){s.addEventListener("click",A),s.closest(".accordion-group").querySelectorAll(".accordion-button").forEach(function(f){f.addEventListener("click",B)})});let r=document.querySelectorAll('a[href^="#"]');E(),window.onhashchange=E,r.forEach(function(s){s.addEventListener("click",E)}),document.querySelectorAll(".video-thumbnail").forEach(function(s){s.addEventListener("click",I)}),document.querySelectorAll(".video .accordion .accordion-button").forEach(function(s){s.addEventListener("click",C)}),N(),j()});})();
|
|
9
|
+
//# @qld-gov-au/qgds-bootstrap5 - v2.1.3
|
|
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 * 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\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 const addHideTo = [\"head\", \"main\", \"footer\"];\n const hideTargets = addHideTo\n .map((id) => document.getElementById(id))\n .filter(Boolean);\n\n // Helper to set aria-hidden\n const setAriaHidden = (hidden) => {\n hideTargets.forEach((el) => {\n if (hidden) {\n el.setAttribute(\"aria-hidden\", \"true\");\n } else {\n el.removeAttribute(\"aria-hidden\");\n }\n });\n };\n\n // Focus trap instances (created on-demand)\n let mobileFocusTrap = null;\n const dropdownFocusTraps = new Map();\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 cick 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 // Create dropdown focus trap on-demand (when dropdown opens)\n function getOrCreateDropdownFocusTrap(dropdown, toggle) {\n if (!dropdownFocusTraps.has(dropdown)) {\n const dropdownTrap = createFocusTrap(dropdown, {\n returnFocusElement: toggle,\n onEscape: () => {\n // Close the dropdown using Bootstrap's API\n const bsDropdown = bootstrap.Dropdown.getInstance(toggle);\n if (bsDropdown) {\n bsDropdown.hide();\n }\n },\n });\n dropdownFocusTraps.set(dropdown, dropdownTrap);\n }\n return dropdownFocusTraps.get(dropdown);\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 // Listen for dropdown show event (desktop only)\n toggle.addEventListener(\"shown.bs.dropdown\", () => {\n const isMobile = window.innerWidth < breakpoints.lg;\n if (!isMobile) {\n // Create and activate focus trap on-demand\n const dropdownTrap = getOrCreateDropdownFocusTrap(dropdown, toggle);\n setTimeout(() => dropdownTrap.activate(), 0);\n }\n });\n\n // Listen for dropdown hide event\n toggle.addEventListener(\"hidden.bs.dropdown\", () => {\n const dropdownTrap = dropdownFocusTraps.get(dropdown);\n if (dropdownTrap && dropdownTrap.isActive) {\n dropdownTrap.deactivate();\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 = () => {\n const isMobile = window.innerWidth < breakpoints.lg;\n const dropdownToggles = document.querySelectorAll(\n \".navbar a.dropdown-toggle, .navbar a.no-dropdown-toggle\",\n );\n\n // Toggle dropdown functionality based on screen size\n dropdownToggles.forEach((toggle) => {\n if (isMobile) {\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 } else {\n toggle.classList.replace(\"no-dropdown-toggle\", \"dropdown-toggle\");\n toggle.setAttribute(\"data-bs-toggle\", \"dropdown\");\n }\n });\n\n if (!isMobile) {\n closeNavbar();\n }\n };\n\n window.addEventListener(\"resize\", resetNavbarState);\n resetNavbarState();\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 setAriaHidden(false);\n\n // Deactivate and destroy mobile focus trap\n if (mobileFocusTrap) {\n mobileFocusTrap.deactivate();\n mobileFocusTrap = null;\n }\n });\n\n // Burger buttons - handle open (mobile only)\n navbar?.addEventListener(\"shown.bs.collapse\", () => {\n // Check if navbar is opening\n setTimeout(() => {\n if (navbar?.classList.contains(\"show\")) {\n setAriaHidden(true);\n\n // Create and activate focus trap when navbar opens (mobile only - whole navbar)\n const isMobile = window.innerWidth < breakpoints.lg;\n if (isMobile) {\n const trap = createMobileFocusTrap();\n trap.activate();\n }\n }\n }, 0);\n });\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 selectDynamicSuggestion(linkItem.textContent, form);\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 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=\"${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 selectDynamicSuggestion(linkItem.textContent, form);\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\";\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 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", "breakpoints", "initializeNavbar", "navbar", "overlay", "burgerBtn", "burgerCloseBtn", "hideTargets", "id", "setAriaHidden", "hidden", "el", "mobileFocusTrap", "dropdownFocusTraps", "closeNavbar", "createMobileFocusTrap", "createFocusTrap", "getOrCreateDropdownFocusTrap", "dropdown", "toggle", "dropdownTrap", "bsDropdown", "setupDropdownListeners", "dropdownToggles", "parentItem", "breakpoints", "resetNavbarState", "isMobile", "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", "resultsUrl", "fetchedServices", "viewMoreUrl", "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", "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 * 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\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 const addHideTo = [\"head\", \"main\", \"footer\"];\n const hideTargets = addHideTo\n .map((id) => document.getElementById(id))\n .filter(Boolean);\n\n // Helper to set aria-hidden\n const setAriaHidden = (hidden) => {\n hideTargets.forEach((el) => {\n if (hidden) {\n el.setAttribute(\"aria-hidden\", \"true\");\n } else {\n el.removeAttribute(\"aria-hidden\");\n }\n });\n };\n\n // Focus trap instances (created on-demand)\n let mobileFocusTrap = null;\n const dropdownFocusTraps = new Map();\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 cick 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 // Create dropdown focus trap on-demand (when dropdown opens)\n function getOrCreateDropdownFocusTrap(dropdown, toggle) {\n if (!dropdownFocusTraps.has(dropdown)) {\n const dropdownTrap = createFocusTrap(dropdown, {\n returnFocusElement: toggle,\n onEscape: () => {\n // Close the dropdown using Bootstrap's API\n const bsDropdown = bootstrap.Dropdown.getInstance(toggle);\n if (bsDropdown) {\n bsDropdown.hide();\n }\n },\n });\n dropdownFocusTraps.set(dropdown, dropdownTrap);\n }\n return dropdownFocusTraps.get(dropdown);\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 // Listen for dropdown show event (desktop only)\n toggle.addEventListener(\"shown.bs.dropdown\", () => {\n const isMobile = window.innerWidth < breakpoints.lg;\n if (!isMobile) {\n // Create and activate focus trap on-demand\n const dropdownTrap = getOrCreateDropdownFocusTrap(dropdown, toggle);\n setTimeout(() => dropdownTrap.activate(), 0);\n }\n });\n\n // Listen for dropdown hide event\n toggle.addEventListener(\"hidden.bs.dropdown\", () => {\n const dropdownTrap = dropdownFocusTraps.get(dropdown);\n if (dropdownTrap && dropdownTrap.isActive) {\n dropdownTrap.deactivate();\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 = () => {\n const isMobile = window.innerWidth < breakpoints.lg;\n const dropdownToggles = document.querySelectorAll(\n \".navbar a.dropdown-toggle, .navbar a.no-dropdown-toggle\",\n );\n\n // Toggle dropdown functionality based on screen size\n dropdownToggles.forEach((toggle) => {\n if (isMobile) {\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 } else {\n toggle.classList.replace(\"no-dropdown-toggle\", \"dropdown-toggle\");\n toggle.setAttribute(\"data-bs-toggle\", \"dropdown\");\n }\n });\n\n if (!isMobile) {\n closeNavbar();\n }\n };\n\n window.addEventListener(\"resize\", resetNavbarState);\n resetNavbarState();\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 setAriaHidden(false);\n\n // Deactivate and destroy mobile focus trap\n if (mobileFocusTrap) {\n mobileFocusTrap.deactivate();\n mobileFocusTrap = null;\n }\n });\n\n // Burger buttons - handle open (mobile only)\n navbar?.addEventListener(\"shown.bs.collapse\", () => {\n // Check if navbar is opening\n setTimeout(() => {\n if (navbar?.classList.contains(\"show\")) {\n setAriaHidden(true);\n\n // Create and activate focus trap when navbar opens (mobile only - whole navbar)\n const isMobile = window.innerWidth < breakpoints.lg;\n if (isMobile) {\n const trap = createMobileFocusTrap();\n trap.activate();\n }\n }\n }, 0);\n });\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 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=\"${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\";\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 initDateInput();\n\n // Skip Links\n validateSkipLinks();\n});\n"],
|
|
5
|
+
"mappings": "gOAQO,SAASA,EAAmBC,EAAO,CAExC,GAAI,CACF,OAAO,MAAM,aAAe,GAC5BA,EAAM,gBAAgB,CACxB,OAASC,EAAO,CAEhB,CAEA,IAAIC,EAAkBF,EAAM,OAIxBG,EAFUD,EAAgB,QAAQ,kBAAkB,EAEzB,iBAAiB,mBAAmB,EAG/DA,EAAgB,UAAU,SAAS,8BAA8B,GACnEA,EAAgB,UAAU,OAAO,8BAA8B,EAC/DA,EAAgB,UAAU,IAAI,4BAA4B,EAC1DA,EAAgB,YAAc,YAC9BC,EAAiB,QAASC,GAAW,CAC/BA,EAAO,QAAQ,YAAY,GAAGA,EAAO,MAAM,CACjD,CAAC,GACQF,EAAgB,UAAU,SAAS,4BAA4B,IACxEA,EAAgB,UAAU,OAAO,4BAA4B,EAC7DA,EAAgB,UAAU,IAAI,8BAA8B,EAC5DA,EAAgB,YAAc,WAC9BC,EAAiB,QAASC,GAAW,CAC/BA,EAAO,QAAQ,kBAAkB,GAAGA,EAAO,MAAM,CACvD,CAAC,EAEL,CAUO,SAASC,EAA8BL,EAAO,CAEnD,GAAI,CACF,OAAO,MAAM,aAAe,GAC5BA,EAAM,gBAAgB,CACxB,OAASC,EAAO,CAEhB,CAEA,IAAIK,EAAiBN,EAAM,OAAO,QAAQ,kBAAkB,EAC1DE,EAAkBI,EAAe,cAAc,uBAAuB,EAGtEJ,EAAgB,UAAU,SAAS,8BAA8B,GACjEI,EAAe,iBAAiB,6BAA6B,EAAE,QAAU,GAEzEJ,EAAgB,UAAU,OAAO,8BAA8B,EAC/DA,EAAgB,UAAU,IAAI,4BAA4B,EAC1DA,EAAgB,YAAc,aAE9BA,EAAgB,UAAU,SAAS,4BAA4B,GAC/DI,EAAe,iBAAiB,6BAA6B,EAAE,OAAS,IAExEJ,EAAgB,UAAU,OAAO,4BAA4B,EAC7DA,EAAgB,UAAU,IAAI,8BAA8B,EAC5DA,EAAgB,YAAc,WAElC,CAUO,SAASK,EAAoBP,EAAO,CACzC,IAAIQ,EAAU,OAAO,SAAS,KAC5BC,EAAYD,EAAQ,UAAU,CAAC,EAC/BE,EAAYC,EAAkBH,CAAO,EAEvC,GAAIE,EAAU,OAAS,EAAG,CACxB,IAAIE,EAAgB,SAAS,cAAc,aAAaH,CAAS,EAAE,EACjEI,EAAoB,GAWtB,GARIb,IACAA,EAAM,OAAS,cAAgBA,EAAM,SAAWA,EAAM,QACvDA,EAAM,OAAS,SAAWA,EAAM,OAAO,OAASQ,IAEjDR,EAAM,eAAe,EAInBY,GAAiBA,EAAc,QAAQ,iBAAiB,EAC1DC,EAAoBD,EAAc,QAAQ,iBAAiB,EAAE,cAAc,mBAAmB,MAG3F,CACH,IAAIT,EAAmB,SAAS,iBAAiB,mBAAmB,EAEhEH,GAASA,EAAM,OAAS,UAC1BU,EAAYC,EAAkBX,EAAM,OAAO,IAAI,GAGjDa,EAAoB,MAAM,KAAKV,CAAgB,EAAE,KAAMC,GAAWO,EAAkBP,EAAO,SAAS,IAAMM,CAAS,CACrH,CAEIG,IACEA,EAAkB,QAAQ,YAAY,GAAGA,EAAkB,MAAM,EAErE,OAAO,SAAS,EAAGA,EAAkB,sBAAsB,EAAE,IAC7D,SAAS,gBAAgB,SAAS,EAEtC,CACF,CAOA,SAASF,EAAkBG,EAAO,CAChC,OAAO,UAAUA,EAAM,YAAY,EAAE,QAAQ,iBAAkB,EAAE,CAAC,CACpE,CC9HO,SAASC,EAAeC,EAAO,CACpCA,EAAM,eAAe,EAErB,IAAMC,EAAYD,EAAM,OACtBE,EAAYD,EAAU,QAAQ,QAAQ,EACtCE,EAASD,EAAU,cAAc,qBAAqB,EAKxD,GAHAA,EAAU,UAAU,OAAO,WAAW,EAGlC,CAACC,EAAO,UAAU,SAAS,cAAc,EAAG,CAC9C,IAAMC,EAAM,IAAI,IAAID,EAAO,GAAG,EAC9BC,EAAI,aAAa,IAAI,WAAY,GAAG,EACpCD,EAAO,IAAMC,EAAI,SAAS,CAC5B,CAEAD,EAAO,MAAM,CAEf,CAUO,SAASE,EAAqBL,EAAO,CAC1C,IAAMM,EAAkBN,EAAM,OAE1BM,EAAgB,UAAU,SAAS,WAAW,EAChDA,EAAgB,YAAc,kBAG9BA,EAAgB,YAAc,iBAGlC,CC3CO,IAAMC,EAAgB,CAC3B,IACA,QACA,SACA,SACA,WACA,SACA,SACA,SACF,EASO,SAASC,EAAYC,EAAS,CAInC,MAHI,CAACA,GAAW,OAAOA,GAAY,UAAYA,EAAQ,WAAa,GAIlEA,EAAQ,aAAa,UAAU,GAC/BA,EAAQ,aAAa,aAAa,IAAM,OAEjC,GAELA,EAAQ,aAAa,UAAU,GAGjCA,EAAQ,aAAa,iBAAiB,GACtCA,EAAQ,aAAa,iBAAiB,IAAM,QAErC,GACLF,EAAc,SAASE,EAAQ,OAAO,EACpCA,EAAQ,UAAY,IACf,CAAC,CAACA,EAAQ,aAAa,MAAM,EAElC,CAAC,QAAS,SAAU,SAAU,UAAU,EAAE,SAASA,EAAQ,OAAO,EAC7D,CAACA,EAAQ,SAEX,GAEF,EACT,CAOO,SAASC,EAAqBC,EAAW,CAC9C,GAAI,CAACA,EAAW,MAAO,CAAC,EAExB,IAAMC,EAAcD,EAAU,iBAAiB,GAAG,EAClD,OAAO,MAAM,KAAKC,CAAW,EAAE,OAAQC,GAAOL,EAAYK,CAAE,CAAC,CAC/D,CAWO,SAASC,EAAgBH,EAAWI,EAAU,CAAC,EAAG,CACvD,GAAI,CAACJ,EACH,MAAM,IAAI,MAAM,8CAA8C,EAGhE,GAAM,CAAE,mBAAAK,EAAoB,SAAAC,CAAS,EAAIF,EACrCG,EAAW,GACXC,EAAoB,CAAC,EACrBC,EAAwB,KAK5B,SAASC,GAA0B,CACjCF,EAAoBT,EAAqBC,CAAS,CACpD,CAKA,SAASW,EAAaC,EAAO,CAC3B,GAAI,CAACL,GAAYC,EAAkB,SAAW,EAAG,OAEjD,IAAMK,EAAeL,EAAkB,CAAC,EAClCM,EAAcN,EAAkBA,EAAkB,OAAS,CAAC,EAC5DO,EAAgB,SAAS,cAG3BH,EAAM,UAENG,IAAkBF,GAClB,CAACb,EAAU,SAASe,CAAa,KAEjCH,EAAM,eAAe,EACrBE,EAAY,MAAM,IAKhBC,IAAkBD,GAAe,CAACd,EAAU,SAASe,CAAa,KACpEH,EAAM,eAAe,EACrBC,EAAa,MAAM,EAGzB,CAKA,SAASG,EAAgBJ,EAAO,CACzBL,IAEDK,EAAM,MAAQ,UAAYA,EAAM,MAAQ,SAC1CA,EAAM,eAAe,EACjB,OAAON,GAAa,YACtBA,EAAS,EAGf,CAKA,SAASW,EAAcL,EAAO,CACxBA,EAAM,MAAQ,MAChBD,EAAaC,CAAK,GACTA,EAAM,MAAQ,UAAYA,EAAM,MAAQ,QACjDI,EAAgBJ,CAAK,CAEzB,CAKA,SAASM,GAAW,CACdX,IAGJE,EAAwB,SAAS,cAGjCC,EAAwB,EAGxB,SAAS,iBAAiB,UAAWO,CAAa,EAG9CT,EAAkB,OAAS,GAC7BA,EAAkB,CAAC,EAAE,MAAM,EAG7BD,EAAW,GACb,CAKA,SAASY,GAAa,CACpB,GAAI,CAACZ,EAAU,OAGf,SAAS,oBAAoB,UAAWU,CAAa,EAGrD,IAAMG,EAAiBf,GAAsBI,EACzCW,GAAkB,OAAOA,EAAe,OAAU,YACpDA,EAAe,MAAM,EAGvBb,EAAW,GACXE,EAAwB,IAC1B,CAEA,MAAO,CACL,SAAAS,EACA,WAAAC,EACA,OAAQT,EACR,IAAI,UAAW,CACb,OAAOH,CACT,CACF,CACF,CC7LO,IAAMc,EAAc,CACzB,GAAI,EACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACN,ECNO,SAASC,GAAmB,CACjC,IAAMC,EAAS,SAAS,eAAe,UAAU,EAC3CC,EAAU,SAAS,eAAe,SAAS,EAC3CC,EAAY,SAAS,eAAe,WAAW,EAC/CC,EAAiB,SAAS,eAAe,gBAAgB,EAEzDC,EADY,CAAC,OAAQ,OAAQ,QAAQ,EAExC,IAAKC,GAAO,SAAS,eAAeA,CAAE,CAAC,EACvC,OAAO,OAAO,EAGXC,EAAiBC,GAAW,CAChCH,EAAY,QAASI,GAAO,CACtBD,EACFC,EAAG,aAAa,cAAe,MAAM,EAErCA,EAAG,gBAAgB,aAAa,CAEpC,CAAC,CACH,EAGIC,EAAkB,KAChBC,EAAqB,IAAI,IAE/B,SAASC,GAAc,CAMjBX,GAAA,MAAAA,EAAQ,UAAU,SAAS,UAC7BG,GAAA,MAAAA,EAAgB,QAEpB,CAGA,SAASS,GAAwB,CAC/B,MAAI,CAACH,GAAmBT,IACtBS,EAAkBI,EAAgBb,EAAQ,CACxC,mBAAoBE,EACpB,SAAU,IAAM,CACdS,EAAY,CACd,CACF,CAAC,GAEIF,CACT,CAGA,SAASK,EAA6BC,EAAUC,EAAQ,CACtD,GAAI,CAACN,EAAmB,IAAIK,CAAQ,EAAG,CACrC,IAAME,EAAeJ,EAAgBE,EAAU,CAC7C,mBAAoBC,EACpB,SAAU,IAAM,CAEd,IAAME,EAAa,UAAU,SAAS,YAAYF,CAAM,EACpDE,GACFA,EAAW,KAAK,CAEpB,CACF,CAAC,EACDR,EAAmB,IAAIK,EAAUE,CAAY,CAC/C,CACA,OAAOP,EAAmB,IAAIK,CAAQ,CACxC,CAGA,SAASI,GAAyB,CAEhC,IAAMC,EAAkBpB,GAAA,YAAAA,EAAQ,iBAC9B,+BAGFoB,GAAA,MAAAA,EAAiB,QAASJ,GAAW,CAEnC,IAAMK,EACJL,EAAO,QAAQ,WAAW,GAAKA,EAAO,QAAQ,WAAW,EAC3D,GAAI,CAACK,EAAY,OAEjB,IAAMN,EAAWM,EAAW,cAAc,gBAAgB,EACrDN,IAGLC,EAAO,iBAAiB,oBAAqB,IAAM,CAEjD,GAAI,EADa,OAAO,WAAaM,EAAY,IAClC,CAEb,IAAML,EAAeH,EAA6BC,EAAUC,CAAM,EAClE,WAAW,IAAMC,EAAa,SAAS,EAAG,CAAC,CAC7C,CACF,CAAC,EAGDD,EAAO,iBAAiB,qBAAsB,IAAM,CAClD,IAAMC,EAAeP,EAAmB,IAAIK,CAAQ,EAChDE,GAAgBA,EAAa,UAC/BA,EAAa,WAAW,CAE5B,CAAC,EACH,EACF,CAGIjB,GACFmB,EAAuB,EAIzBlB,GAAA,MAAAA,EAAS,iBAAiB,QAAS,IAAM,CACvCU,EAAY,CACd,GAEA,IAAMY,EAAmB,IAAM,CAC7B,IAAMC,EAAW,OAAO,WAAaF,EAAY,GACzB,SAAS,iBAC/B,yDACF,EAGgB,QAASN,GAAW,CAClC,GAAIQ,EAAU,CAEZ,GAAIR,EAAO,UAAU,SAAS,WAAW,EACvC,OAEFA,EAAO,UAAU,QAAQ,kBAAmB,oBAAoB,EAChEA,EAAO,gBAAgB,gBAAgB,CACzC,MACEA,EAAO,UAAU,QAAQ,qBAAsB,iBAAiB,EAChEA,EAAO,aAAa,iBAAkB,UAAU,CAEpD,CAAC,EAEIQ,GACHb,EAAY,CAEhB,EAEA,OAAO,iBAAiB,SAAUY,CAAgB,EAClDA,EAAiB,EAGjBvB,GAAA,MAAAA,EAAQ,iBAAiB,mBAAoB,IAAM,CACjDC,GAAA,MAAAA,EAAS,UAAU,OAAO,OAC5B,GAGAD,GAAA,MAAAA,EAAQ,iBAAiB,qBAAsB,IAAM,CACnDM,EAAc,EAAK,EAGfG,IACFA,EAAgB,WAAW,EAC3BA,EAAkB,KAEtB,GAGAT,GAAA,MAAAA,EAAQ,iBAAiB,oBAAqB,IAAM,CAElD,WAAW,IAAM,CACXA,GAAA,MAAAA,EAAQ,UAAU,SAAS,UAC7BM,EAAc,EAAI,EAGD,OAAO,WAAagB,EAAY,IAElCV,EAAsB,EAC9B,SAAS,EAGpB,EAAG,CAAC,CACN,EACF,CCzKO,SAASa,GAAiB,CAE/B,IAAIC,EAAY,EAGVC,EAAa,SAAS,cAAc,aAAa,EAMvD,GAJI,CAACA,GAGeA,EAAW,cAAc,oBAAoB,EAG/D,OAEF,IAAMC,EAAiBD,EAAW,iBAAiB,kBAAkB,EAGrE,GAAI,CAACC,GAAkB,CAACA,EAAe,OACrC,OAGF,IAAMC,EAAmBF,EAAW,cAC/BE,IAKDF,EAAW,aAAeE,EAAiB,cAC7CH,EAAY,GAEdI,EAAmBF,EAAgBF,CAAS,EAC9C,CAWO,SAASI,EAAmBF,EAAgBF,EAAY,EAAG,CAEhE,GAAI,CAACE,GAAkBA,EAAe,QAAUF,EAC9C,OAGF,IAAMK,EAAU,SAAS,cAAc,IAAI,EAC3CA,EAAQ,UAAU,IAAI,qBAAqB,EAE3CH,EAAe,QAAQ,CAACI,EAAOC,IAAU,CA5D3C,IAAAC,EAkEI,GALID,EAAQ,GAAKA,EAAQL,EAAe,OAAS,KAC/CM,EAAAF,EAAM,cAAc,GAAG,IAAvB,MAAAE,EAA0B,aAAa,WAAY,IACnDH,EAAQ,YAAYC,CAAK,GAGvBC,IAAU,EAAG,CACf,IAAIE,EAAc,SAAS,cAAc,IAAI,EAC3CC,EAAe,SAAS,cAAc,QAAQ,EAEhDD,EAAY,UAAU,IAAI,kBAAmB,mBAAmB,EAChEC,EAAa,aAAa,aAAc,wBAAwB,EAChEA,EAAa,KAAO,SACpBA,EAAa,UAAU,IAAI,wBAAwB,EACnDA,EAAa,iBAAiB,QAASC,CAAU,EAEjDF,EAAY,YAAYC,CAAY,EACpCJ,EAAM,MAAMG,CAAW,CACzB,CAEA,GAAIF,IAAUL,EAAe,OAAS,EAAG,CACvC,IAAMO,EAAc,SAAS,cAAc,oBAAoB,EAC/D,GAAIA,EAAa,CACf,IAAMG,EAAa,SAAS,cAAc,KAAK,EAC/CA,EAAW,UAAU,IAAI,6BAA6B,EACtDA,EAAW,YAAYP,CAAO,EAC9BI,EAAY,OAAOG,CAAU,EAC7BH,EAAY,iBAAiB,WAAaI,GAAU,EAGhD,CAACA,EAAM,eACP,CAACJ,EAAY,SAASI,EAAM,aAAa,IAEzCD,EAAW,cAAc,UAAU,OAAO,UAAU,CAExD,CAAC,CACH,CACF,CACF,CAAC,CACH,CAUO,SAASD,EAAWE,EAAO,CAChC,IAAMZ,EAAaY,EAAM,OAAO,QAAQ,aAAa,EACrD,GAAI,CAACZ,EAAY,CACf,QAAQ,IAAI,wCAAwC,EACpD,MACF,CACA,IAAMC,EAAiBD,EAAW,iBAAiB,kBAAkB,EAErE,GAAI,CAACC,GAAkB,CAACA,EAAe,OAAQ,CAC7C,QAAQ,IAAI,oDAAoD,EAChE,MACF,CAGA,GADAW,EAAM,OAAO,cAAc,UAAU,OAAO,UAAU,EAClDA,EAAM,OAAO,cAAc,UAAU,SAAS,UAAU,EAAG,CAE7D,IAAMF,EAAa,SAAS,cAAc,8BAA8B,EACxEG,EAAc,CAAC,EACf,IAAMC,EAAYJ,EAAW,cAAc,GAAG,EAC1CI,GACFA,EAAU,MAAM,CAEpB,CACqB,SAAS,cAAc,yBAAyB,GACrD,SAAS,iBAAiB,QAASC,CAAY,CACjE,CAUA,SAASA,EAAaH,EAAO,CAC3BA,EAAM,gBAAgB,EACtB,IAAMH,EAAe,SAAS,cAAc,yBAAyB,EAC/DC,EAAa,SAAS,cAAc,8BAA8B,EAEtE,CAACA,EAAW,SAASE,EAAM,MAAM,GACjC,CAACH,EAAa,SAASG,EAAM,MAAM,IAEnCF,EAAW,cAAc,UAAU,OAAO,UAAU,EACpD,SAAS,oBAAoB,QAASK,CAAY,EAClDF,EAAc,EAAE,EAEpB,CAEA,SAASA,EAAcG,EAAU,CAC/B,IAAMC,EAAyB,SAAS,iBACtC,iCACF,EACKA,GAGLA,EAAuB,QAASZ,GAAU,CArK5C,IAAAE,GAsKIA,EAAAF,EAAM,cAAc,GAAG,IAAvB,MAAAE,EAA0B,aAAa,WAAYS,EACrD,CAAC,CACH,CCxKO,SAASE,GAAgB,CAC9B,IAAMC,EAAiB,SAAS,iBAAiB,iBAAiB,EAM5DC,EAAgBC,GAAM,CAE1B,GAAI,EAAEA,EAAE,OAAO,UAAY,SAAWA,EAAE,OAAO,OAAS,QACtD,OAMF,IAAMC,EAAQD,EAAE,OACV,CAAE,MAAAE,EAAO,IAAAC,EAAK,IAAAC,EAAK,QAAAC,CAAQ,EAAIJ,EAC/BK,EAAgBL,EAAM,QAAQ,eAAiB,GAErD,GAAIG,GAAO,SAASF,CAAK,EAAI,SAASE,CAAG,EAAG,CAC1CH,EAAM,QAAQ,cAAgBA,EAAM,MAAQG,EAC5C,MACF,CAEA,GACED,GACA,SAASD,CAAK,IAAM,GACpBA,EAAM,QAAUC,EAAI,QACpB,SAASD,CAAK,EAAI,SAASC,CAAG,EAC9B,CACAF,EAAM,QAAQ,cAAgBA,EAAM,MAAQE,EAC5C,MACF,CAEA,GACED,GACAA,IAAU,IACV,SAASA,CAAK,IAAM,GACpB,CAAC,OAAOG,CAAO,EAAE,KAAKH,CAAK,EAC3B,CACAD,EAAM,MAAQK,EACd,MACF,CAGAL,EAAM,QAAQ,cAAgBA,EAAM,MAAQA,EAAM,MAAM,KAAK,CAC/D,EAMMM,EAAmBP,GAAM,CAG7B,GAAI,EAAEA,EAAE,OAAO,UAAY,SAAWA,EAAE,OAAO,OAAS,QACtD,OAIF,IAAMC,EAAQD,EAAE,OACV,CAAE,IAAAG,EAAK,IAAAC,CAAI,EAAIH,EACfO,EAAYP,EAAM,WAAa,EAC/BC,GAASD,EAAM,OAAS,IAAI,KAAK,EAEvC,GAAI,CAACC,GAAS,SAASA,CAAK,IAAM,EAAG,CACnCD,EAAM,QAAQ,cAAgBA,EAAM,MAAQ,GAC5C,MACF,CAGA,GAAIE,GAAO,SAASD,CAAK,EAAIC,EAAK,CAChCF,EAAM,QAAQ,cAAgBA,EAAM,MAAQE,EAAI,SAASK,EAAW,GAAG,EACvE,MACF,CAGA,GAAIJ,GAAO,SAASF,CAAK,EAAIE,EAAK,CAChCH,EAAM,QAAQ,cAAgBA,EAAM,MAAQG,EAAI,SAASI,EAAW,GAAG,EACvE,MACF,CAEAP,EAAM,QAAQ,cAAgBA,EAAM,MAAQC,EAAM,SAASM,EAAW,GAAG,CAC3E,EAEAV,EAAe,QAASW,GAAkB,CACxCA,EAAc,iBAAiB,QAASV,CAAY,EACpDU,EAAc,iBAAiB,WAAYF,CAAe,CAC5D,CAAC,CACH,CC1FO,SAASG,GAAgB,CAC9B,IAAIC,EAAmB,SAAS,uBAAuB,gBAAgB,EACnEC,EAAkB,SAAS,cAAc,wBAAwB,EAGnED,EAAiB,OAAS,GAC1B,OAAOC,GAAoB,aAC3BA,GAAmB,OAEnBC,EAAW,EACXC,EAAU,EAEd,CAKA,SAASD,GAAa,CACpB,IAAME,EAAa,6BACnB,IAAIH,EAAkB,SAAS,cAAc,wBAAwB,EACrEA,EAAgB,QAAU,UAAY,CACpC,OAAOI,EAAUD,CAAU,CAC7B,CACF,CAMA,SAASD,GAAY,CACnB,IAAMC,EAAa,6BAEnB,SAAS,iBAAiB,UAAW,SAAUE,EAAG,CAChD,GAAIA,EAAE,UAAY,GAChB,OAAAD,EAAUD,CAAU,EAChBE,IAEFA,EAAE,eAAe,EAEjBA,EAAE,YAAc,IAEX,EAEX,CAAC,CACH,CAOA,SAASD,EAAUE,EAAM,CAKvB,GAHA,OAAO,KAAKA,EAAM,QAAQ,EAC1B,OAAO,SAAS,QAAQA,CAAI,EAExB,OAAO,QACT,GAAI,CACF,OAAO,QAAQ,aAAa,CAAC,EAAG,GAAI,GAAG,CACzC,OAASD,EAAG,CACVA,EAAE,gBAAgB,CACpB,CAGF,MAAO,EACT,CCzDO,SAASE,EAAaC,EAAO,CAElC,GAAI,CACFA,EAAM,eAAe,EACrBA,EAAM,gBAAgB,CACxB,OAASC,EAAO,CACd,QAAQ,MAAM,2BAA4BA,CAAK,CACjD,CAGA,IAAMC,EAAY,SAAS,eAAe,mBAAmB,EACvDC,EAAeH,EAAM,cAGvBE,IACEA,EAAU,UAAU,SAAS,SAAS,GACxCA,EAAU,UAAU,OAAO,SAAS,EACpCA,EAAU,UAAU,IAAI,WAAW,EAGnCC,EAAa,UAAU,OAAO,SAAS,EACvCA,EAAa,UAAU,IAAI,WAAW,EACtCA,EAAa,aAAa,gBAAiB,EAAK,EAChDA,EAAa,aAAa,aAAc,aAAa,EACrDA,EAAa,YAAc,WAE3BD,EAAU,UAAU,OAAO,WAAW,EACtCA,EAAU,UAAU,IAAI,SAAS,EAGjCC,EAAa,UAAU,OAAO,WAAW,EACzCA,EAAa,UAAU,IAAI,SAAS,EACpCA,EAAa,aAAa,gBAAiB,EAAI,EAC/CA,EAAa,aAAa,aAAc,cAAc,EACtDA,EAAa,YAAc,SAGjC,CCtCA,SAAeC,EAAUC,EAAKC,EAAM,QAAAC,EAAA,sBAClC,GAAI,CACF,IAAMC,EAAW,MAAM,MAAMH,CAAG,EAChC,GAAI,CAACG,EAAS,GACZ,MAAM,IAAI,MAAM,6BAA6B,EAG/C,OADa,MAAMA,EAAS,KAAK,CAEnC,OAASC,EAAO,CACd,eAAQ,MAAM,kBAAkBH,CAAI,IAAKG,CAAK,EACvC,CAAC,CACV,CACF,GASO,SAASC,EAAwBC,EAAOC,EAAM,CACnD,IAAMC,EAAcD,EAAK,cAAc,yBAAyB,EAC1DE,EAAcF,EAAK,cAAc,cAAc,EAErD,GAAIC,GAAeC,EAAa,CAE9B,IAAIC,EAAaJ,EAAM,QAAQ,OAAQ,GAAG,EAAE,KAAK,EACjDE,EAAY,MAAQE,EAGpB,IAAMC,EAAYJ,EAAK,aAAa,QAAQ,EAGtCK,EAAOJ,EAAcA,EAAY,QAAU,KAG3CK,EAAS,IAAI,gBAAgB,CACjC,MAAOH,EACP,WAAYE,EAAK,YAAc,iBAC/B,QAASA,EAAK,SAAW,MACzB,UAAWA,EAAK,UAAY,KAC5B,MAAOA,EAAK,OAAS,KACvB,CAAC,EAEKE,EAAY,GAAGH,CAAS,IAAIE,EAAO,SAAS,CAAC,GAGnD,OAAO,SAAS,KAAOC,CACzB,CACF,CAUA,SAAsBC,EAAgBT,EAAQ,GAAIU,EAAY,GAAOT,EAAM,QAAAL,EAAA,sBACzE,IAAMM,EAAcD,EAAK,cAAc,yBAAyB,EAC1DE,EAAcF,EAAK,cAAc,cAAc,EAC/CU,EAA8BV,EAAK,cACvC,sBACF,EACMW,EAA8BX,EAAK,cACvC,sBACF,EAEA,GAAI,CAACE,GAAe,CAACD,EACnB,OAIF,GAAIQ,EAAW,CACTC,GACFA,EAA4B,UAAU,OAAO,QAAQ,EAEnDC,IACFA,EAA4B,UAAY,GACxCA,EAA4B,UAAU,IAAI,QAAQ,GAEpD,MACF,CAGA,GAAIA,GACEZ,EAAM,SAAW,EAAG,CACtBY,EAA4B,UAAY,GACxCA,EAA4B,UAAU,IAAI,QAAQ,EAClD,MACF,CAIFD,GAAA,MAAAA,EAA6B,UAAU,IAAI,UAG3C,IAAML,EAAOJ,EAAcA,EAAY,QAAU,KAGjD,GAAIU,EAA6B,CAC/B,IAAMC,EAAaP,EAAK,YAExB,GAAIO,EAAY,CACd,IAAMC,EAAaR,EAAK,YAAc,iBAChCS,EAAUT,EAAK,SAAW,MAG1BU,EAAqB,MAAMvB,EAC/B,GAAGoB,CAAU,eAAeC,CAAU,YAAYC,CAAO,qCAAqC,mBAAmBf,CAAK,CAAC,GACvH,aACF,EAGIgB,EAAmB,OAAS,GAC9BJ,EAA4B,UAAY;AAAA;AAAA,gBAEhCI,EACH,MAAM,EAAG,CAAC,EACV,IAAKC,GAKG,gCAJiBA,EAAK,QAC3B,IAAI,OAAO,IAAIjB,CAAK,IAAK,IAAI,EAC7B,qBACF,CACsD,WACvD,EACA,KAAK,EAAE,CAAC;AAAA,gBAGbY,EAA4B,UAAU,OAAO,QAAQ,EAGrDX,EACG,cAAc,mCAAmC,EACjD,iBAAiB,QAAUiB,GAAU,CACpC,IAAIC,EAAWD,EAAM,OAAO,QAAQ,GAAG,EACvC,GAAIC,EAAU,CACZD,EAAM,eAAe,EAGrB,IAAME,EAAOD,EAAS,aAAa,MAAM,EAEvCC,GACAA,IAAS,MACR,IAAM,CACL,GAAI,CACF,IAAM1B,EAAM,IAAI,IAAI0B,EAAM,OAAO,SAAS,MAAM,EAChD,OACE1B,EAAI,WAAa,SAAWA,EAAI,WAAa,QAEjD,OAAQ2B,EAAA,CACN,MAAO,EACT,CACF,GAAG,EAIH,OAAO,SAAS,KAAOD,EAGvBrB,EAAwBoB,EAAS,YAAalB,CAAI,CAEtD,CACF,CAAC,IAEHW,EAA4B,UAAY,GACxCA,EAA4B,UAAU,IAAI,QAAQ,EAEtD,CAEA,IAAMU,EAAahB,EAAK,WACxB,GAAIgB,EAAY,CACd,IAAMR,EAAaR,EAAK,YAAc,iBAChCS,EAAUT,EAAK,SAAW,MAG1BiB,EAAkB,MAAM9B,EAC5B,GAAG6B,CAAU,eAAeR,CAAU,YAAYC,CAAO,iCAAiC,mBAAmBf,CAAK,CAAC,GACnH,UACF,EAEA,GACEuB,EAAgB,SAAS,cACzBA,EAAgB,SAAS,aAAa,QAAQ,OAAS,EACvD,CACA,IAAMC,EACJZ,EAA4B,aAAa,gBAAgB,EAGrDa,EAAgBF,EAAgB,SAAS,aAAa,QACzD,MAAM,EAAG,CAAC,EACV,IACEN,GACC,6BAA6BA,EAAK,OAAO,KAAKA,EAAK,KAAK,WAC5D,EACC,KAAK,EAAE,EAEJS,EAAeF,EACjB,6BAA6BA,CAAW,yCACxC,GAEJZ,EAA4B,WAAa;AAAA;AAAA;AAAA,gBAGjCa,CAAa,GAAGC,CAAY;AAAA,gBAGpCd,EAA4B,UAAU,OAAO,QAAQ,EAGrDX,EACG,cAAc,mCAAmC,EACjD,iBAAiB,QAAUiB,GAAU,CACpC,IAAIC,EAAWD,EAAM,OAAO,QAAQ,GAAG,EACvC,GAAIC,EAAU,CACZD,EAAM,eAAe,EAGrB,IAAME,EAAOD,EAAS,aAAa,MAAM,EAEvCC,GACAA,IAAS,MACR,IAAM,CACL,GAAI,CACF,IAAM1B,EAAM,IAAI,IAAI0B,EAAM,OAAO,SAAS,MAAM,EAChD,OACE1B,EAAI,WAAa,SAAWA,EAAI,WAAa,QAEjD,OAAQ2B,EAAA,CACN,MAAO,EACT,CACF,GAAG,EAIH,OAAO,SAAS,KAAOD,EAGvBrB,EAAwBoB,EAAS,YAAalB,CAAI,CAEtD,CACF,CAAC,CACL,CACF,CACF,CACF,GASO,SAAS0B,EAAiBC,EAAQ,GAAI3B,EAAM,CACjD,IAAMC,EAAcD,EAAK,cAAc,yBAAyB,EAC1DK,EAAOJ,EAAcA,EAAY,QAAU,KAE3CE,EAAawB,EAAM,KAAK,EAAE,QAAQ,OAAQ,GAAG,EAE7CrB,EAAS,IAAI,gBAAgB,CACjC,MAAOH,EACP,WAAYE,EAAK,YAAc,iBAC/B,QAASA,EAAK,SAAW,MACzB,UAAWA,EAAK,UAAY,KAC5B,MAAOA,EAAK,OAAS,KACvB,CAAC,EAEKE,EAAY,GAAGP,EAAK,aAAa,QAAQ,CAAC,IAAIM,EAAO,SAAS,CAAC,GACrE,OAAO,SAAS,KAAOC,CACzB,CAGA,OAAO,wBAA0B,CAACR,EAAOC,IACvCF,EAAwBC,EAAOC,CAAI,EC3R9B,SAAS4B,GAAY,CAC1B,IAAMA,EAAY,SAAS,cAAc,4BAA4B,EAEjEA,IACFA,EAAU,QAAU,SAAUC,EAAO,CACnC,SAAS,KAAK,UAAY,EAC1B,SAAS,gBAAgB,UAAY,EACrCA,EAAM,eAAe,CACvB,EAEJ,CCVO,SAASC,GAAiB,CAC/B,IAAMC,EAAY,SAAS,iBAAiB,WAAW,EAEvD,SAASC,EAAWC,EAAK,CACvB,IAAMC,EAAOD,EAAI,cAAc,WAAW,EACpCE,EAAgBF,EAAI,cAAc,cAAc,EAChDG,EAAiBH,EAAI,cAAc,eAAe,EAClDI,EAAgBH,EAAK,YAE3B,GAAIA,EAAM,CAER,IAAMI,EAAyB,IAAM,CAC/BJ,EAAK,aAAe,EACtBC,EAAc,UAAU,OAAO,MAAM,EAErCA,EAAc,UAAU,IAAI,MAAM,EAGhCD,EAAK,WAAaA,EAAK,aAAeG,EACxCD,EAAe,UAAU,OAAO,MAAM,EAEtCA,EAAe,UAAU,IAAI,MAAM,CAEvC,EAGAF,EAAK,iBAAiB,SAAUI,CAAsB,EAGtDA,EAAuB,EAGvBF,EAAe,iBAAiB,QAAS,IAAM,CAC7CF,EAAK,SAAS,CACZ,IAAK,EACL,KAAM,IACN,SAAU,QACZ,CAAC,CACH,CAAC,EAGDC,EAAc,iBAAiB,QAAS,IAAM,CAC5CD,EAAK,SAAS,CACZ,IAAK,EACL,KAAM,KACN,SAAU,QACZ,CAAC,CACH,CAAC,CACH,CACF,CAGAH,EAAU,QAASE,GAAQ,CACzBD,EAAWC,CAAG,CAChB,CAAC,EAGD,OAAO,iBAAiB,SAAU,IAAM,CACtCF,EAAU,QAASE,GAAQ,CACzBD,EAAWC,CAAG,CAChB,CAAC,CACH,CAAC,CACH,CC9DO,SAASM,GAAmB,CACZ,SAAS,iBAAiB,eAAe,EAEjD,QAASC,GAAU,CAC9B,IAAMC,EAAKD,EAAM,aAAa,SAAS,EAcvC,GAXIC,GACqBC,EAA0B,kBAAkBD,CAAE,EAAE,GAErED,EAAM,UAAU,OAAO,QAAQ,EAOfA,EAAM,cAAc,YAAY,EACnC,CAEf,IAAMG,EAAmB,IAAM,CAC7B,IAAMC,EAAsB,SAASJ,EAAM,aAAa,kBAAkB,EAAG,EAAE,EAG3EC,GAAMG,GAAuBA,EAAsB,GACrDC,EAA0B,kBAAkBJ,CAAE,GAAI,GAAMG,CAAmB,EAG7EJ,EAAM,UAAU,IAAI,QAAQ,CAC9B,EAGAA,EAAM,iBAAiB,kBAAmBG,CAAgB,EAG1DH,EAAM,iBAAiB,aAAcG,CAAgB,CACvD,CACF,CAAC,EAGD,SAASE,EAA0BC,EAAKC,EAAOH,EAAqB,CAClE,IAAMI,EAAI,IAAI,KACdA,EAAE,QAAQA,EAAE,QAAQ,EAAIJ,EAAsB,GAAK,GAAK,GAAK,GAAI,EACjE,IAAMK,EAAO,CACX,MAAOF,EACP,OAAQC,EAAE,QAAQ,CACpB,EACA,aAAa,QAAQF,EAAK,KAAK,UAAUG,CAAI,CAAC,CAChD,CAEA,SAASP,EAA0BI,EAAK,CACtC,IAAMI,EAAU,aAAa,QAAQJ,CAAG,EACxC,GAAI,CAACI,EACH,OAAO,KAGT,GAAI,CACF,IAAMD,EAAO,KAAK,MAAMC,CAAO,EAG/B,OAFY,IAAI,KAAK,EAAE,QAAQ,EAErBD,EAAK,QACb,aAAa,WAAWH,CAAG,EACpB,MAGFG,EAAK,KACd,OAASE,EAAG,CACV,oBAAa,WAAWL,CAAG,EACpB,IACT,CACF,CACF,CCnEO,SAASM,GAAoB,CAChB,SAAS,iBAAiB,uBAAuB,EACzD,QAASC,GAAS,CAE1B,IAAMC,EAAOD,EAAK,aAAa,MAAM,EAC/BE,EAAWD,EAAK,QAAQ,KAAM,EAAE,EAEtC,OADe,SAAS,cAAcA,CAAI,EAOnC,IALL,QAAQ,MACN,2BAA2BD,EAAK,WAAW,kDAAkDE,CAAQ,IACvG,EACO,GAGX,CAAC,CACH,CCKA,OAAO,iBAAiB,QAASC,EAAe,EAAI,EACpD,OAAO,iBAAiB,UAAWA,EAAe,EAAI,EACtD,OAAO,iBAAiB,mBAAoB,IAAM,CAChDC,EAAU,EAEVC,EAAe,EAEfC,EAAiB,EAYjB,IAAIC,EAAqB,SAAS,eAChC,iCACF,EACIA,GACFA,EAAmB,iBAAiB,QAASC,CAAY,EAI/C,SAAS,iBAAiB,cAAc,EAE9C,QAASC,GAAS,CAEtB,IAAIC,EAAcD,EAAK,cAAc,yBAAyB,EAE9D,GAAIC,EAAa,CACf,IAAIC,EAGJD,EAAY,iBAAiB,QAAS,SAAUE,EAAG,CACjD,aAAaD,CAAO,EACpBA,EAAU,WAAW,IAAM,CACzB,IAAME,EAAQD,EAAE,OAAO,MAAM,KAAK,EAClCE,EAAgBD,EAAOA,IAAU,GAAIJ,CAAI,CAC3C,EAAG,GAAG,CACR,CAAC,EAGDA,EAAK,iBAAiB,SAAU,SAAUM,EAAO,CAC/CA,EAAM,eAAe,EACrB,IAAMC,EAAQN,EAAY,MAAM,KAAK,EACrCO,EAAiBD,EAAOP,CAAI,CAC9B,CAAC,CACH,CACF,CAAC,EAID,IAAIS,EAAS,SAAS,cAAc,QAAQ,EAC5C,GAAIA,EAAQ,CAEV,IAAIC,EAAM,OAAO,SAAS,OAAS,OAAO,SAAS,SAEnDD,EAAO,aAAa,gBAAiBC,CAAG,CAC1C,CAGAC,EAAiB,EAGjBC,EAAe,EAGf,OAAO,iBAAiB,QAASlB,EAAe,EAAI,EACpD,OAAO,iBAAiB,UAAWA,EAAe,EAAI,EACtDA,EAAc,EAGc,SAAS,iBACnC,uBACF,EAEsB,QAAQ,SAAUmB,EAAc,CACpDA,EAAa,iBAAiB,QAASC,CAAkB,EAElCD,EACpB,QAAQ,kBAAkB,EAC1B,iBAAiB,mBAAmB,EAEtB,QAAQ,SAAUE,EAAQ,CACzCA,EAAO,iBAAiB,QAASC,CAA6B,CAChE,CAAC,CACH,CAAC,EAED,IAAIC,EAAc,SAAS,iBAAiB,cAAc,EAE1DC,EAAmB,EACnB,OAAO,aAAeA,EACtBD,EAAY,QAAQ,SAAUE,EAAM,CAClCA,EAAK,iBAAiB,QAASD,CAAkB,CACnD,CAAC,EAGqB,SAAS,iBAAiB,kBAAkB,EAElD,QAAQ,SAAUE,EAAW,CAC3CA,EAAU,iBAAiB,QAASC,CAAc,CACpD,CAAC,EAEsB,SAAS,iBAC9B,qCACF,EAEiB,QAAQ,SAAUC,EAAY,CAC7CA,EAAW,iBAAiB,QAASC,CAAoB,CAC3D,CAAC,EAEDC,EAAc,EAGdC,EAAkB,CACpB,CAAC",
|
|
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", "breakpoints", "initializeNavbar", "navbar", "overlay", "burgerBtn", "burgerCloseBtn", "hideTargets", "id", "setAriaHidden", "hidden", "el", "mobileFocusTrap", "dropdownFocusTraps", "closeNavbar", "createMobileFocusTrap", "createFocusTrap", "getOrCreateDropdownFocusTrap", "dropdown", "toggle", "dropdownTrap", "bsDropdown", "setupDropdownListeners", "dropdownToggles", "parentItem", "breakpoints", "resetNavbarState", "isMobile", "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", "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", "initDateInput", "validateSkipLinks"]
|
|
7
7
|
}
|
|
@@ -292,7 +292,8 @@ var init_button = __esm({
|
|
|
292
292
|
|
|
293
293
|
{{#unless islink}}
|
|
294
294
|
|
|
295
|
-
<button class="btn {{variantClass}} {{#if isprogress}}btn-progress{{/if}}" onclick="{{{onclick}}}" {{#if isdisabled}}disabled{{/if}} {{#if isprogress}}disabled aria-live="polite"{{/if}} {{#if arialabel}}aria-label="{{arialabel}}"{{/if}} {{
|
|
295
|
+
<button class="btn {{variantClass}} {{#if isprogress}}btn-progress{{/if}}" onclick="{{{onclick}}}" tabindex="0" {{#if isdisabled}}disabled{{/if}} {{#if isprogress}}disabled aria-live="polite"{{/if}} {{#if arialabel}}aria-label="{{arialabel}}"{{/if}} {{#if progressLabel}}data-progress-label="{{progressLabel}}"{{/if}} {{{dataatts}}} >
|
|
296
|
+
|
|
296
297
|
{{#if isprogress}}
|
|
297
298
|
{{~>progressSpinner~}}
|
|
298
299
|
{{else}}
|
|
@@ -623,7 +624,7 @@ var init_customLinks = __esm({
|
|
|
623
624
|
var dateinput_default;
|
|
624
625
|
var init_dateinput = __esm({
|
|
625
626
|
"src/components/bs5/dateinput/dateinput.hbs?raw"() {
|
|
626
|
-
dateinput_default = '<!-- QGDS Component: Date input -->\n\n<label id="{{id}}-label" class="qld-text-input-label {{#if isRequired}}field-required{{/if}} {{#if isDisabled}}field-disabled{{/if}}" for="{{id}}">\n {{label-text}}\n {{#if optional-text}}\n <span class="label-text-optional">({{optional-text}})</span>\n {{/if}}\n</label>\n\n{{#if hint-text}}\n<span class="qld-hint-text" id="{{id}}-hint">{{hint-text}}</span>\n{{/if}}\n{{#contains "qld-input-success" customClass}}{{! legacy support for feedback classes `qld-input-success`}}\n<span class="qld-input-success">{{successMessageText}}</span>\n{{else if successMessageText}}{{! updated bootstrap style classes - `valid-feedback`}}\n<div class="valid-feedback">{{successMessageText}}</div>\n{{/contains}}\n{{#contains "qld-input-error" customClass}}{{! legacy support for feedback classes `qld-input-error`}}\n<span class="qld-input-error">{{errorMessageText}}</span>\n{{else if errorMessageText}}{{! updated bootstrap style classes - `invalid-feedback`}}\n<div class="invalid-feedback">{{errorMessageText}}</div>\n{{/contains}}\n\n<div aria-labelledby="{{id}}-label" role="group" class="row date-container {{customClass}}">\n <!-- day group -->\n <div class="day-group">\n <label id="{{id}}-dayinput-label" for="{{id}}-dayinput" class="date-label qld-text-input-label">Day</label>\n <div>\n <input id="{{id}}-dayinput" aria-labelledby="{{id}}-label {{id}}-dayinput-label" placeholder="{{day-placeholder}}" type="text"\n inputmode="numeric" maxlength="2" minlength="2" min="1" max="31" pattern="^(0?[1-9]|[12][0-9]|3[01])$"\n class="form-control dayinput {{customClass}} {{#if isFilled}}form-style-filled{{/if}} \n {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}" ref="day"\n aria-invalid="false" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}}>\n </div>\n </div>\n <!-- month group -->\n <div class="date-group">\n <label id="{{id}}-monthinput-label" for="{{id}}-monthinput" class="date-label qld-text-input-label">Month</label>\n <div>\n <input id="{{id}}-monthinput" aria-labelledby="{{id}}-label {{id}}-monthinput-label" placeholder="{{month-placeholder}}"\n type="text" inputmode="numeric" maxlength="2" minlength="2" min="1" max="12" pattern="^(0?[1-9]|[1][0-2])$"\n class="form-control monthinput {{customClass}} {{#if isFilled}}form-style-filled{{/if}} \n {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}" ref="month"\n aria-invalid="false" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}}>\n </div>\n </div>\n <!-- year group -->\n <div class="date-group">\n <label id="{{id}}-yearinput-label" for="{{id}}-yearinput" class="date-label qld-text-input-label">Year</label>\n <div class="year-label">\n <input id="{{id}}-yearinput" aria-labelledby="{{id}}-label {{id}}-yearinput-label"\n placeholder="{{year-placeholder}}" type="text" inputmode="numeric" maxlength="4" minlength="4" pattern="[0-9]*" \n {{#if yearMin}}min="{{yearMin}}"{{/if}} {{#if yearMax}}max="{{yearMax}}"{{/if}}\n class="form-control yearinput {{customClass}} {{#if isFilled}}form-style-filled{{/if}} {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}"\n ref="year" aria-invalid="false" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}}>\n </div>\n </div>\n</div>\n';
|
|
627
|
+
dateinput_default = '<!-- QGDS Component: Date input -->\n\n<label id="{{id}}-label" class="qld-text-input-label {{#if isRequired}}field-required{{/if}} {{#if isDisabled}}field-disabled{{/if}}" for="{{id}}">\n {{label-text}}\n {{#if optional-text}}\n <span class="label-text-optional">({{optional-text}})</span>\n {{/if}}\n</label>\n\n{{#if hint-text}}\n<span class="qld-hint-text" id="{{id}}-hint">{{hint-text}}</span>\n{{/if}}\n{{#contains "qld-input-success" customClass}}{{! legacy support for feedback classes `qld-input-success`}}\n<span class="qld-input-success">{{successMessageText}}</span>\n{{else if successMessageText}}{{! updated bootstrap style classes - `valid-feedback`}}\n<div class="valid-feedback">{{successMessageText}}</div>\n{{/contains}}\n{{#contains "qld-input-error" customClass}}{{! legacy support for feedback classes `qld-input-error`}}\n<span class="qld-input-error">{{errorMessageText}}</span>\n{{else if errorMessageText}}{{! updated bootstrap style classes - `invalid-feedback`}}\n<div class="invalid-feedback">{{errorMessageText}}</div>\n{{/contains}}\n\n<div aria-labelledby="{{id}}-label" role="group" class="row date-container {{customClass}}">\n <!-- day group -->\n <div class="day-group">\n <label id="{{id}}-dayinput-label" for="{{id}}-dayinput" class="date-label qld-text-input-label">Day</label>\n <div>\n <input id="{{id}}-dayinput" aria-labelledby="{{id}}-label {{id}}-dayinput-label" placeholder="{{day-placeholder}}" type="text"\n inputmode="numeric" maxlength="2" minlength="2" min="1" max="31" pattern="^(0?[1-9]|[12][0-9]|3[01])$"\n class="form-control dayinput {{customClass}} {{#if isFilled}}form-style-filled{{/if}} \n {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}" ref="day"\n aria-invalid="false" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}} tabindex="0" >\n </div>\n </div>\n <!-- month group -->\n <div class="date-group">\n <label id="{{id}}-monthinput-label" for="{{id}}-monthinput" class="date-label qld-text-input-label">Month</label>\n <div>\n <input id="{{id}}-monthinput" aria-labelledby="{{id}}-label {{id}}-monthinput-label" placeholder="{{month-placeholder}}"\n type="text" inputmode="numeric" maxlength="2" minlength="2" min="1" max="12" pattern="^(0?[1-9]|[1][0-2])$"\n class="form-control monthinput {{customClass}} {{#if isFilled}}form-style-filled{{/if}} \n {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}" ref="month"\n aria-invalid="false" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}} tabindex="0">\n </div>\n </div>\n <!-- year group -->\n <div class="date-group">\n <label id="{{id}}-yearinput-label" for="{{id}}-yearinput" class="date-label qld-text-input-label">Year</label>\n <div class="year-label">\n <input id="{{id}}-yearinput" aria-labelledby="{{id}}-label {{id}}-yearinput-label"\n placeholder="{{year-placeholder}}" type="text" inputmode="numeric" maxlength="4" minlength="4" pattern="[0-9]*" \n {{#if yearMin}}min="{{yearMin}}"{{/if}} {{#if yearMax}}max="{{yearMax}}"{{/if}}\n class="form-control yearinput {{customClass}} {{#if isFilled}}form-style-filled{{/if}} {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}"\n ref="year" aria-invalid="false" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}} tabindex="0">\n </div>\n </div>\n</div>\n';
|
|
627
628
|
}
|
|
628
629
|
});
|
|
629
630
|
|
|
@@ -906,7 +907,7 @@ var init_footer = __esm({
|
|
|
906
907
|
var formcheck_default;
|
|
907
908
|
var init_formcheck = __esm({
|
|
908
909
|
"src/components/bs5/formcheck/formcheck.hbs?raw"() {
|
|
909
|
-
formcheck_default = ' \n {{#if questionLabel}}\n <div class="qld-text-input-label {{listClasses}}">\n {{questionLabel}}\n {{#if optionalLabel}}\n <span class="label-text-optional">{{optionalLabel}}</span>\n {{/if}}\n </div>\n {{/if}}\n\n {{#if hintLabel}}\n <span class="qld-hint-text">{{hintLabel}}</span>\n {{/if}}\n\n {{#if successMessageText}}\n <div class="valid-feedback">{{successMessageText}}</div>\n {{/if}}\n\n {{#if errorMessageText}}\n <div class="invalid-feedback">{{errorMessageText}}</div>\n {{/if}}\n \n {{#each listitems}}\n <div class="form-check {{#if ../isValid}}is-valid{{else}}{{#ifCond ../isValid "===" false}}is-invalid{{/ifCond}}{{/if}}">\n <input class="form-check-input" type="{{#if ../type}}{{../type}}{{else}}{{#if type}}{{type}}{{else}}checkbox{{/if}}{{/if}}" name="{{name}}" id="{{id}}" value="{{value}}" {{#if isDisabled}}disabled{{/if}} {{#if isChecked}}checked{{/if}} {{#if isRequired}}required{{/if}} >\n <label class="form-check-label" for="{{id}}">\n {{label}}\n </label>\n </div>\n {{/each}}\n ';
|
|
910
|
+
formcheck_default = ' \n {{#if questionLabel}}\n <div class="qld-text-input-label {{listClasses}}">\n {{questionLabel}}\n {{#if optionalLabel}}\n <span class="label-text-optional">{{optionalLabel}}</span>\n {{/if}}\n </div>\n {{/if}}\n\n {{#if hintLabel}}\n <span class="qld-hint-text">{{hintLabel}}</span>\n {{/if}}\n\n {{#if successMessageText}}\n <div class="valid-feedback">{{successMessageText}}</div>\n {{/if}}\n\n {{#if errorMessageText}}\n <div class="invalid-feedback">{{errorMessageText}}</div>\n {{/if}}\n \n {{#each listitems}}\n <div class="form-check {{#if ../isValid}}is-valid{{else}}{{#ifCond ../isValid "===" false}}is-invalid{{/ifCond}}{{/if}}">\n <input class="form-check-input" type="{{#if ../type}}{{../type}}{{else}}{{#if type}}{{type}}{{else}}checkbox{{/if}}{{/if}}" name="{{name}}" id="{{id}}" value="{{value}}" tabindex="{{isdefined ../tabindex 0}}" {{#if isDisabled}}disabled{{/if}} {{#if isChecked}}checked{{/if}} {{#if isRequired}}required{{/if}} >\n <label class="form-check-label" for="{{id}}">\n {{label}}\n </label>\n </div>\n {{/each}}\n ';
|
|
910
911
|
}
|
|
911
912
|
});
|
|
912
913
|
|
|
@@ -973,7 +974,7 @@ var head_default;
|
|
|
973
974
|
var init_head = __esm({
|
|
974
975
|
"src/components/bs5/head/head.hbs?raw"() {
|
|
975
976
|
head_default = `
|
|
976
|
-
<!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.
|
|
977
|
+
<!-- VERSION_DETAILS={"project_id":"@qld-gov-au/qgds-bootstrap5","version":"2.1.3","branch":"HEAD","tag":"v2.1.3","commit":"0459f9571a74eab35ed443c3d02fece2a811642c","majorVersion":"v2"} -->
|
|
977
978
|
|
|
978
979
|
{{! Select environment, used verbatium if not using predefind key
|
|
979
980
|
cdn := PROD|STAGING|BETA|TEST|DEV|???
|
|
@@ -1430,7 +1431,7 @@ var init_searchInput = __esm({
|
|
|
1430
1431
|
var select_default;
|
|
1431
1432
|
var init_select = __esm({
|
|
1432
1433
|
"src/components/bs5/select/select.hbs?raw"() {
|
|
1433
|
-
select_default = '<!-- QGDS Component: Select -->\n\n<label class="qld-text-input-label {{#if isRequired}}field-required{{/if}} {{#if isDisabled}}field-disabled{{/if}}" for="{{id}}">\n {{label-text}}\n {{#if optional-text}}\n <span class="label-text-optional">({{optional-text}})</span>\n {{/if}}\n</label>\n\n{{#if hint-text}}\n<span class="qld-hint-text" id="{{id}}-hint">{{hint-text}}</span>\n{{/if}}\n\n{{#contains "qld-input-success" customClass}}{{! legacy support for feedback classes `qld-input-success`}}\n<span class="qld-input-success">{{successMessageText}}</span>\n{{else}}{{! updated bootstrap style classes - `valid-feedback`}}\n{{#if successMessageText}}\n<div class="valid-feedback">{{successMessageText}}</div>\n{{/if}}{{/contains}}\n\n{{#contains "qld-input-error" customClass}}{{! legacy support for feedback classes `qld-input-error`}}\n<span class="qld-input-error">{{errorMessageText}}</span>\n{{else}}{{! updated bootstrap style classes - `invalid-feedback`}}\n{{#if errorMessageText}}\n<div class="invalid-feedback">{{errorMessageText}}</div>\n{{/if}}{{/contains}}\n\n<select id={{id}} class="form-select {{#if isFilled}}is-filled{{/if}} {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}} {{customClass}}" \n {{#if hint-text}}aria-describedby="{{id}}-hint"{{/if}} {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}} >\n <option selected value="">{{placeholder}}</option>\n <option value="1">Option 1</option>\n <option value="2">Option 2</option>\n <option value="3">Option 3</option>\n</select>\n';
|
|
1434
|
+
select_default = '<!-- QGDS Component: Select -->\n\n<label class="qld-text-input-label {{#if isRequired}}field-required{{/if}} {{#if isDisabled}}field-disabled{{/if}}" for="{{id}}">\n {{label-text}}\n {{#if optional-text}}\n <span class="label-text-optional">({{optional-text}})</span>\n {{/if}}\n</label>\n\n{{#if hint-text}}\n<span class="qld-hint-text" id="{{id}}-hint">{{hint-text}}</span>\n{{/if}}\n\n{{#contains "qld-input-success" customClass}}{{! legacy support for feedback classes `qld-input-success`}}\n<span class="qld-input-success">{{successMessageText}}</span>\n{{else}}{{! updated bootstrap style classes - `valid-feedback`}}\n{{#if successMessageText}}\n<div class="valid-feedback">{{successMessageText}}</div>\n{{/if}}{{/contains}}\n\n{{#contains "qld-input-error" customClass}}{{! legacy support for feedback classes `qld-input-error`}}\n<span class="qld-input-error">{{errorMessageText}}</span>\n{{else}}{{! updated bootstrap style classes - `invalid-feedback`}}\n{{#if errorMessageText}}\n<div class="invalid-feedback">{{errorMessageText}}</div>\n{{/if}}{{/contains}}\n\n<select id={{id}} class="form-select {{#if isFilled}}is-filled{{/if}} {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}} {{customClass}}" \n {{#if hint-text}}aria-describedby="{{id}}-hint"{{/if}} tabindex="0" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}} >\n <option selected value="">{{placeholder}}</option>\n <option value="1">Option 1</option>\n <option value="2">Option 2</option>\n <option value="3">Option 3</option>\n</select>\n';
|
|
1434
1435
|
}
|
|
1435
1436
|
});
|
|
1436
1437
|
|
|
@@ -1539,7 +1540,7 @@ var init_tag = __esm({
|
|
|
1539
1540
|
var textarea_default;
|
|
1540
1541
|
var init_textarea = __esm({
|
|
1541
1542
|
"src/components/bs5/textarea/textarea.hbs?raw"() {
|
|
1542
|
-
textarea_default = '<!-- QGDS Component: Textarea -->\n\n<label class="qld-text-input-label {{#if isRequired}}field-required{{/if}} {{#if isDisabled}}field-disabled{{/if}}"\n for="{{id}}">\n {{label-text}}\n {{#if optional-text}}\n <span class="label-text-optional">({{optional-text}})</span>\n {{/if}}\n</label>\n\n{{#if hint-text}}\n<span class="qld-hint-text" id="{{id}}-hint">{{hint-text}}</span>\n{{/if}}\n\n{{#contains "qld-input-success" customClass}}{{! legacy support for feedback classes `qld-input-success`}}\n<span class="qld-input-success">{{successMessageText}}</span>\n{{else}}\n{{#if successMessageText}}{{! updated bootstrap style classes - `valid-feedback`}}\n<div class="valid-feedback">{{successMessageText}}</div>\n{{/if}}{{/contains}}\n\n{{#contains "qld-input-error" customClass}}{{! legacy support for feedback classes `qld-input-error`}}\n<span class="qld-input-error">{{errorMessageText}}</span>\n{{else}}\n{{#if errorMessageText}}{{! updated bootstrap style classes - `invalid-feedback`}}\n<div class="invalid-feedback">{{errorMessageText}}</div>\n{{/if}}{{/contains}}\n\n<!-- First text input field, described by the hint text above -->\n<textarea id="{{id}}" class="form-control {{customClass}} {{#if isFilled}}is-filled{{/if}} {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}"\n placeholder="{{placeholder}}" rows="{{rows}}" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}}\n {{#if hint-text}}aria-describedby="{{id}}-hint"{{/if}}>{{value}}</textarea>';
|
|
1543
|
+
textarea_default = '<!-- QGDS Component: Textarea -->\n\n<label class="qld-text-input-label {{#if isRequired}}field-required{{/if}} {{#if isDisabled}}field-disabled{{/if}}"\n for="{{id}}">\n {{label-text}}\n {{#if optional-text}}\n <span class="label-text-optional">({{optional-text}})</span>\n {{/if}}\n</label>\n\n{{#if hint-text}}\n<span class="qld-hint-text" id="{{id}}-hint">{{hint-text}}</span>\n{{/if}}\n\n{{#contains "qld-input-success" customClass}}{{! legacy support for feedback classes `qld-input-success`}}\n<span class="qld-input-success">{{successMessageText}}</span>\n{{else}}\n{{#if successMessageText}}{{! updated bootstrap style classes - `valid-feedback`}}\n<div class="valid-feedback">{{successMessageText}}</div>\n{{/if}}{{/contains}}\n\n{{#contains "qld-input-error" customClass}}{{! legacy support for feedback classes `qld-input-error`}}\n<span class="qld-input-error">{{errorMessageText}}</span>\n{{else}}\n{{#if errorMessageText}}{{! updated bootstrap style classes - `invalid-feedback`}}\n<div class="invalid-feedback">{{errorMessageText}}</div>\n{{/if}}{{/contains}}\n\n<!-- First text input field, described by the hint text above -->\n<textarea id="{{id}}" class="form-control {{customClass}} {{#if isFilled}}is-filled{{/if}} {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}"\n placeholder="{{placeholder}}" rows="{{rows}}" tabindex="0" {{#if isDisabled}}disabled{{/if}} {{#if isRequired}}required{{/if}}\n {{#if hint-text}}aria-describedby="{{id}}-hint"{{/if}}>{{value}}</textarea>';
|
|
1543
1544
|
}
|
|
1544
1545
|
});
|
|
1545
1546
|
|
|
@@ -1547,7 +1548,7 @@ var init_textarea = __esm({
|
|
|
1547
1548
|
var textbox_default;
|
|
1548
1549
|
var init_textbox = __esm({
|
|
1549
1550
|
"src/components/bs5/textbox/textbox.hbs?raw"() {
|
|
1550
|
-
textbox_default = '<!-- QGDS Component: Textbox -->\n\n<label class="qld-text-input-label {{#if isRequired}}field-required{{/if}} {{#if isDisabled}}field-disabled{{/if}}"\n for="{{id}}">\n {{label-text}}\n {{#if optional-text}}\n <span class="label-text-optional">({{optional-text}})</span>\n {{/if}}\n</label>\n\n{{#if hint-text}}\n<span class="qld-hint-text" id="{{id}}-hint">{{hint-text}}</span>\n{{/if}}\n\n{{#contains "qld-input-success" customClass}}{{! legacy support for feedback classes `qld-input-success`}}\n<span class="qld-input-success">{{successMessageText}}</span>\n{{else}}\n{{#if successMessageText}}{{! updated bootstrap style classes - `valid-feedback`}}\n<div class="valid-feedback">{{successMessageText}}</div>\n{{/if}}{{/contains}}\n\n{{#contains "qld-input-error" customClass}}{{! legacy support for feedback classes `qld-input-error`}}\n<span class="qld-input-error">{{errorMessageText}}</span>\n{{else}}\n{{#if errorMessageText}}{{! updated bootstrap style classes - `invalid-feedback`}}\n<div class="invalid-feedback">{{errorMessageText}}</div>\n{{/if}}{{/contains}}\n\n<input id={{id}} {{#if value}}value="{{value}}"{{/if}} class="form-control {{customClass}} {{#if isFilled}}is-filled{{/if}} {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}"\n type="text" placeholder="{{placeholder}}" {{#if isDisabled}}disabled{{/if}} {{#if\n isRequired}}required{{/if}} {{#if hint-text}}aria-describedby="{{id}}-hint"{{/if}} />';
|
|
1551
|
+
textbox_default = '<!-- QGDS Component: Textbox -->\n\n<label class="qld-text-input-label {{#if isRequired}}field-required{{/if}} {{#if isDisabled}}field-disabled{{/if}}"\n for="{{id}}">\n {{label-text}}\n {{#if optional-text}}\n <span class="label-text-optional">({{optional-text}})</span>\n {{/if}}\n</label>\n\n{{#if hint-text}}\n<span class="qld-hint-text" id="{{id}}-hint">{{hint-text}}</span>\n{{/if}}\n\n{{#contains "qld-input-success" customClass}}{{! legacy support for feedback classes `qld-input-success`}}\n<span class="qld-input-success">{{successMessageText}}</span>\n{{else}}\n{{#if successMessageText}}{{! updated bootstrap style classes - `valid-feedback`}}\n<div class="valid-feedback">{{successMessageText}}</div>\n{{/if}}{{/contains}}\n\n{{#contains "qld-input-error" customClass}}{{! legacy support for feedback classes `qld-input-error`}}\n<span class="qld-input-error">{{errorMessageText}}</span>\n{{else}}\n{{#if errorMessageText}}{{! updated bootstrap style classes - `invalid-feedback`}}\n<div class="invalid-feedback">{{errorMessageText}}</div>\n{{/if}}{{/contains}}\n\n<input id={{id}} {{#if value}}value="{{value}}"{{/if}} class="form-control {{customClass}} {{#if isFilled}}is-filled{{/if}} {{#if isValid}}is-valid{{else}}{{#ifCond isValid "===" false}}is-invalid{{/ifCond}}{{/if}}"\n type="text" placeholder="{{placeholder}}" tabindex="0" {{#if isDisabled}}disabled{{/if}} {{#if\n isRequired}}required{{/if}} {{#if hint-text}}aria-describedby="{{id}}-hint"{{/if}} />';
|
|
1551
1552
|
}
|
|
1552
1553
|
});
|
|
1553
1554
|
|