@zeix/ui-element
Version:
UIElement - a HTML-first library for reactive Web Components
4 lines (2 loc) • 30.7 kB
JavaScript
var S=(L)=>typeof L==="function",W1=(L,x)=>Object.prototype.toString.call(L)===`[object ${x}]`,A1=(L)=>L instanceof Error?L:Error(String(L));class T1 extends Error{constructor(L){super(`Circular dependency in ${L} detected`);return this}}var f,i=new Set,z1=0,G1=new Map,s,E1=()=>{s=void 0;let L=Array.from(G1.values());G1.clear();for(let x of L)x()},FL=()=>{if(s)cancelAnimationFrame(s);s=requestAnimationFrame(E1)};queueMicrotask(E1);var O1=(L)=>{let x=new Set,M=L;return M.off=(H)=>{x.add(H)},M.cleanup=()=>{for(let H of x)H();x.clear()},M},l=(L)=>{if(f&&!L.has(f)){let x=f;L.add(x),f.off(()=>{L.delete(x)})}},Z=(L)=>{for(let x of L)if(z1)i.add(x);else x()},g1=()=>{while(i.size){let L=Array.from(i);i.clear();for(let x of L)x()}},Q1=(L)=>{z1++;try{L()}finally{g1(),z1--}},w1=(L,x)=>{let M=f;f=x;try{L()}finally{f=M}},$=(L,x)=>new Promise((M,H)=>{G1.set(x||Symbol(),()=>{try{M(L())}catch(k){H(k)}}),FL()}),I1="State",D=(L)=>{let x=new Set,M=L,H={[Symbol.toStringTag]:I1,get:()=>{return l(x),M},set:(k)=>{if(Object.is(M,k))return;if(M=k,Z(x),N===M)x.clear()},update:(k)=>{H.set(k(M))}};return H},r=(L)=>W1(L,I1),t="Computed",d=(L)=>{let x=new Set,M=N,H,k,C=!0,b=!1,F=!1,A=(Y)=>{if(!Object.is(Y,M))M=Y,b=!0;H=void 0,C=!1},V=()=>{b=N!==M,M=N,H=void 0},P=(Y)=>{let U=A1(Y);b=!H||U.name!==H.name||U.message!==H.message,M=N,H=U},j=(Y)=>(U)=>{if(F=!1,k=void 0,Y(U),b)Z(x)},X=O1(()=>{if(C=!0,k?.abort("Aborted because source signal changed"),x.size)Z(x);else X.cleanup()}),q=()=>w1(()=>{if(F)throw new T1("computed");if(b=!1,S(L)&&L.constructor.name==="AsyncFunction"){if(k)return M;k=new AbortController,k.signal.addEventListener("abort",()=>{F=!1,k=void 0,q()},{once:!0})}let Y;F=!0;try{Y=k?L(k.signal):L()}catch(U){if(U instanceof DOMException&&U.name==="AbortError")V();else P(U);F=!1;return}if(Y instanceof Promise)Y.then(j(A),j(P));else if(Y==null||N===Y)V();else A(Y);F=!1},X);return{[Symbol.toStringTag]:t,get:()=>{if(l(x),g1(),C)q();if(H)throw H;return M}}},m1=(L)=>W1(L,t),VL=(L)=>S(L)&&L.length<2,N=Symbol(),e=(L)=>r(L)||m1(L),d1=(L)=>e(L)?L:VL(L)?d(L):D(L);function v(L){let{signals:x,ok:M,err:H=console.error,nil:k=()=>{}}=S(L)?{signals:[],ok:L}:L,C=!1,b=O1(()=>w1(()=>{if(C)throw new T1("effect");C=!0;let F=[],A=!1,V=x.map((j)=>{try{let X=j.get();if(X===N)A=!0;return X}catch(X){return F.push(A1(X)),N}}),P=void 0;try{P=A?k():F.length?H(...F):M(...V)}catch(j){P=H(A1(j))}finally{if(S(P))b.off(P)}C=!1},b));return b(),()=>b.cleanup()}var m=!1,PL="debug";var jL="warn",L1="error",AL=(L)=>L?`#${L}`:"",zL=(L)=>L?.length?`.${Array.from(L).join(".")}`:"",p1=(L)=>!!L&&typeof L==="object",K=(L)=>typeof L==="string",f1=(L,x)=>K(x)&&(x in L)&&S(L[x]),GL=(L)=>L.nodeType===Node.ELEMENT_NODE,K1=(L)=>L.localName.includes("-"),XL=(L)=>{if(!K1(L))return!0;let x=customElements.get(L.localName);return!!x&&L instanceof x},R=(L)=>L?`<${L.localName}${AL(L.id)}${zL(L.classList)}>`:"<unknown>",a=(L)=>K(L)?`"${L}"`:p1(L)?JSON.stringify(L):String(L),P1=(L)=>{if(L===null)return"null";if(typeof L!=="object")return typeof L;if(Array.isArray(L))return"Array";if(Symbol.toStringTag in Object(L))return L[Symbol.toStringTag];return L.constructor?.name||"Object"},g=(L,x,M=PL)=>{if(m||[L1,jL].includes(M))console[M](x,L);return L};class h1 extends Error{constructor(L){super(L);this.name="CircularMutationError"}}var YL=(L)=>{let x=new Set;if(L.includes("."))x.add("class");if(L.includes("#"))x.add("id");if(L.includes("[")){let M=L.split("[");for(let H=1;H<M.length;H++){let k=M[H];if(!k.includes("]"))continue;let C=k.split("=")[0].trim().replace(/[^a-zA-Z0-9_-]/g,"");if(C)x.add(C)}}return[...x]},TL=(L,x)=>{if(L.length!==x.length)return!1;let M=new Set(L);for(let H of x)if(!M.has(H))return!1;return!0},_=(L,x,M)=>(H)=>{let k=new Set,C=S(L)?L(H):L,b=new Map,F,A=()=>{for(let[V,P]of Object.entries(M)){let j=(X)=>{let q=X.target;if(!q)return;let Y=q.closest(x);if(!Y||!H.contains(Y))return;X.stopPropagation();try{let U=P({event:X,host:H,target:Y,value:C});if(U==null)return;if(!Object.is(U,C)){if(C=U,k.size>0)Z(k);else if(F)F()}}catch(U){throw X.stopImmediatePropagation(),U}};b.set(V,j),H.addEventListener(V,j)}F=()=>{if(b.size){for(let[V,P]of b)H.removeEventListener(V,P);b.clear()}F=void 0}};return{[Symbol.toStringTag]:t,get(){if(l(k),k.size&&!b.size)A();return C}}},J1=(L,x,M)=>{let H=new MutationObserver(M),k={childList:!0,subtree:!0},C=YL(x);if(C.length)k.attributes=!0,k.attributeFilter=C;return H.observe(L,k),H},w=(L)=>(x)=>{let M=new Set,H=()=>Array.from(x.querySelectorAll(L)),k=N,C,b=0,F=2,A=()=>{k=H(),C=J1(x,L,()=>{if(!M.size){C?.disconnect(),C=void 0;return}if(b++,b>F)throw C?.disconnect(),C=void 0,b=0,new h1("Circular mutation in element selection detected");try{let V=H();if(!TL(k,V))k=V,Z(M)}finally{b--}})};return{[Symbol.toStringTag]:t,get(){if(l(M),!M.size)k=H();else if(!C)A();return k}}},n1=(L,x,M,H)=>d(()=>w(x)(L).get().reduce(M,H)),B1=(L,x,M)=>{let H=L.querySelector(x);return M(H,H?XL(H):!1)},W=(L,x)=>{let M=L.querySelector(x);if(!M)throw new Error(`Component ${R(L)} does not contain required <${x}> element`);return M},E=Symbol(),QL=new Set(["constructor","prototype"]),DL=new Set(["id","class","className","title","role","style","dataset","lang","dir","hidden","children","innerHTML","outerHTML","textContent","innerText"]),j1=(L)=>S(L)&&L.length>=2,U1=(L)=>{if(QL.has(L))return`Property name "${L}" is a reserved word`;if(DL.has(L))return`Property name "${L}" conflicts with inherited HTMLElement property`;return null},X1=(L,x,M=x)=>{let H=L.filter(S).map((k)=>k(x,M));return()=>{H.filter(S).forEach((k)=>k()),H.length=0}},NL=()=>({first:(L,...x)=>(M)=>{let H=(M.shadowRoot||M).querySelector(L);if(H)X1(x,M,H)},all:(L,...x)=>(M)=>{let H=new Map,k=M.shadowRoot||M,C=(V)=>{if(!H.has(V))H.set(V,X1(x,M,V))},b=(V)=>{let P=H.get(V);if(S(P))P();H.delete(V)},F=(V)=>(P)=>{if(GL(P)){if(P.matches(L))V(P);P.querySelectorAll(L).forEach(V)}},A=J1(k,L,(V)=>{for(let P of V)P.addedNodes.forEach(F(C)),P.removedNodes.forEach(F(b))});return k.querySelectorAll(L).forEach(C),()=>{A.disconnect(),H.forEach((V)=>V()),H.clear()}}}),z=(L,x={},M)=>{for(let H of Object.keys(x)){let k=U1(H);if(k)throw new TypeError(`${k} in component "${L}".`)}customElements.define(L,class extends HTMLElement{debug;#L={};#x;static observedAttributes=Object.entries(x)?.filter(([,H])=>j1(H)).map(([H])=>H)??[];constructor(){super();for(let[H,k]of Object.entries(x)){if(k==null)continue;let C=j1(k)?k(this,null):S(k)?k(this):k;if(C!=null)this.setSignal(H,d1(C))}}connectedCallback(){if(m){if(this.debug=this.hasAttribute("debug"),this.debug)g(this,"Connected")}let H=M(this,NL());if(!Array.isArray(H))throw new TypeError(`Expected array of functions as return value of setup function in ${R(this)}`);this.#x=X1(H,this)}disconnectedCallback(){if(S(this.#x))this.#x();if(m&&this.debug)g(this,"Disconnected")}attributeChangedCallback(H,k,C){if(C===k||m1(this.#L[H]))return;let b=x[H];if(!j1(b))return;let F=b(this,C,k);if(m&&this.debug)g(C,`Attribute "${H}" of ${R(this)} changed from ${a(k)} to ${a(C)}, parsed as <${P1(F)}> ${a(F)}`);this[H]=F}getSignal(H){let k=this.#L[H];if(m&&this.debug)g(k,`Get ${P1(k)} "${String(H)}" in ${R(this)}`);return k}setSignal(H,k){let C=U1(String(H));if(C)throw new TypeError(`${C} on ${R(this)}.`);if(!e(k))throw new TypeError(`Expected signal as value for property "${String(H)}" on ${R(this)}.`);let b=this.#L[H],F=r(k);if(this.#L[H]=k,Object.defineProperty(this,H,{get:k.get,set:F?k.set:void 0,enumerable:!0,configurable:F}),b&&r(b))b.set(N);if(m&&this.debug)g(k,`Set ${P1(k)} "${String(H)} in ${R(this)}`)}})},S1="context-request";var x1=(L)=>(x)=>{let M=(H)=>{let{context:k,callback:C}=H;if(L.includes(k)&&S(C))H.stopImmediatePropagation(),C(x.getSignal(String(k)))};return x.addEventListener(S1,M),()=>x.removeEventListener(S1,M)};var _1=(L,x)=>{if(x==null)return;let M=L(x);return Number.isFinite(M)?M:void 0},H1=()=>(L,x)=>x!=null&&x!=="false",I=(L=0)=>(x,M)=>{if(M==null)return L;let H=M.trim();if(H.toLowerCase().startsWith("0x"))return _1((C)=>parseInt(C,16),H)??L;let k=_1(parseFloat,M);return k!=null?Math.trunc(k):L};var h=(L="")=>(x,M)=>M??L;var M1=Symbol("RESOLVE_ERROR"),D1=(L,x,M,H)=>{try{return K(L)?x.getSignal(L).get():e(L)?L.get():S(L)?L(M):E}catch(k){if(H)g(k,`Failed to resolve value of ${a(L)}${H?` for ${H}`:""} in ${R(M)}${x!==M?` in ${R(x)}`:""}`,L1);return M1}},yL=(L,x="")=>{return{a:"attribute ",c:"class ",d:"dataset ",h:"inner HTML",m:"method call ",p:"property ",s:"style property ",t:"text content"}[L]+x},RL=(L,x,M,H,k)=>{return{ok:(C)=>()=>{if(m&&L.debug)g(x,`${C} ${M} of ${R(x)} in ${R(L)}`);H?.(x)},err:(C)=>(b)=>{g(b,`Failed to ${C} ${M} of ${R(x)} in ${R(L)}`,L1),k?.(b)}}},Y1=(L,x)=>{return Symbol(x?`${L}:${x}`:L)},qL=(L,x,M,H,k)=>{return v(()=>{let C=D1(L,x,M,H);if(C===M1)return;k(C)})},UL=(L)=>{if(/^(mailto|tel):/i.test(L))return!0;if(L.includes("://"))try{let x=new URL(L,window.location.origin);return["http:","https:","ftp:"].includes(x.protocol)}catch{return!1}return!0},SL=(L,x,M)=>{if(/^on/i.test(x))throw new Error(`Unsafe attribute: ${x}`);if(M=String(M).trim(),!UL(M))throw new Error(`Unsafe URL for ${x}: ${M}`);L.setAttribute(x,M)},p=(L,x)=>(M,H)=>{let{op:k,name:C="",read:b,update:F}=x,A=b(H),V=yL(k,C);if(K(L)&&K(A)&&M[L]===E)M.attributeChangedCallback(L,null,A);let{ok:P,err:j}=RL(M,H,V,x.resolve,x.reject);return v(()=>{let X=Y1(k,C),q=D1(L,M,H,V);if(q===M1)return;let Y=q===E?A:q===N?x.delete?null:A:q;if(x.delete&&Y===null)$(()=>{return x.delete(H),!0},X).then(P("Deleted")).catch(j("delete"));else if(Y!=null){let U=b(H);if(Object.is(Y,U))return;$(()=>{return F(H,Y),!0},X).then(P("Updated")).catch(j("update"))}})},o=(L,x)=>(M,H)=>{let k=(b)=>()=>{if(m&&M.debug)g(H,`${b} element in ${R(H)} in ${R(M)}`);if(S(x?.resolve))x.resolve(H);else{let F=e(L)?L:K(L)?M.getSignal(L):void 0;if(r(F))F.set(0)}},C=(b)=>(F)=>{g(F,`Failed to ${b} element in ${R(H)} in ${R(M)}`,L1),x?.reject?.(F)};return v(()=>{let b=Y1("i"),F=Y1("r"),A=D1(L,M,H,"insertion or deletion");if(A===M1)return;let V=A===E?0:A;if(V>0){if(!x)throw new TypeError("No inserter provided");$(()=>{for(let P=0;P<V;P++){let j=x.create(H);if(!j)continue;H.insertAdjacentElement(x.position??"beforeend",j)}return!0},b).then(k("Inserted")).catch(C("insert"))}else if(V<0)$(()=>{if(x&&(x.position==="afterbegin"||x.position==="beforeend"))for(let P=0;P>V;P--)if(x.position==="afterbegin")H.firstElementChild?.remove();else H.lastElementChild?.remove();else H.remove();return!0},F).then(k("Removed")).catch(C("remove"))})},T=(L)=>p(L,{op:"t",read:(x)=>x.textContent,update:(x,M)=>{Array.from(x.childNodes).filter((H)=>H.nodeType!==Node.COMMENT_NODE).forEach((H)=>H.remove()),x.append(document.createTextNode(M))}}),Q=(L,x=L)=>p(x,{op:"p",name:String(L),read:(M)=>(L in M)?M[L]:N,update:(M,H)=>{M[L]=H}}),y=(L)=>p(L,{op:"p",name:"hidden",read:(x)=>!x.hidden,update:(x,M)=>{x.hidden=!M}}),Z1=(L)=>p(L,{op:"m",name:"focus",read:(x)=>x===document.activeElement,update:(x,M)=>{if(M&&f1(x,"focus"))x.focus()}}),O=(L,x=L)=>p(x,{op:"a",name:L,read:(M)=>M.getAttribute(L),update:(M,H)=>{SL(M,L,H)},delete:(M)=>{M.removeAttribute(L)}}),k1=(L,x=L)=>p(x,{op:"a",name:L,read:(M)=>M.hasAttribute(L),update:(M,H)=>{M.toggleAttribute(L,H)}}),n=(L,x=L)=>p(x,{op:"c",name:L,read:(M)=>M.classList.contains(L),update:(M,H)=>{M.classList.toggle(L,H)}});var C1=(L,x={})=>p(L,{op:"h",read:(M)=>(M.shadowRoot||!x.shadowRootMode?M:null)?.innerHTML??"",update:(M,H)=>{let{shadowRootMode:k,allowScripts:C}=x;if(!H){if(M.shadowRoot)M.shadowRoot.innerHTML="<slot></slot>";return""}if(k&&!M.shadowRoot)M.attachShadow({mode:k});let b=M.shadowRoot||M;if(b.innerHTML=H,!C)return"";return b.querySelectorAll("script").forEach((F)=>{let A=document.createElement("script");A.appendChild(document.createTextNode(F.textContent??"")),b.appendChild(A),F.remove()})," with scripts"}}),G=(L,x,M=!1)=>(H,k)=>{if(!S(x))throw new TypeError(`Invalid event listener provided for "${L} event on element ${R(k)}`);return k.addEventListener(L,x,M),()=>k.removeEventListener(L,x)},v1=(L,x)=>(M,H)=>qL(x,M,H,`custom event "${L}" detail`,(k)=>{if(k===E||k===N)return;H.dispatchEvent(new CustomEvent(L,{detail:k,bubbles:!0}))}),c=(L)=>(x,M)=>{if(!p1(L))throw new TypeError("Reactives must be an object of passed signals");if(!K1(M))throw new TypeError(`Target ${R(M)} is not a custom element`);customElements.whenDefined(M.localName).then(()=>{if(!f1(M,"setSignal"))throw new TypeError(`Target ${R(M)} is not a UIElement component`);for(let[H,k]of Object.entries(L))M.setSignal(H,K(k)?x.getSignal(k):d1(k))}).catch((H)=>{throw new Error(`Failed to pass signals to ${R(M)}`,{cause:H})})};var o1=new Map,_L=(L)=>{let x=L.toLowerCase().split(",").map((H)=>H.trim()),M={noCache:!1,noStore:!1,maxAge:void 0};for(let H of x)if(H==="no-cache")M.noCache=!0;else if(H==="no-store")M.noStore=!0;else if(H.startsWith("max-age=")){let k=parseInt(H.substring(8),10);if(!isNaN(k))M.maxAge=k}return M},WL=(L)=>{if(L.maxAge!==void 0)return(Date.now()-L.timestamp)/1000<L.maxAge;return!0},b1=async(L,x)=>{let M=o1.get(L),H={};if(M?.etag)H["If-None-Match"]=M.etag;if(M?.lastModified)H["If-Modified-Since"]=M.lastModified;let k=await fetch(L,{signal:x,headers:H});if(k.status===304&&M)return{content:M.content,fromCache:!0};if(!k.ok)throw new Error(`HTTP error! status: ${k.status}`);let C=await k.text(),b=k.headers.get("cache-control"),F=k.headers.get("etag"),A=k.headers.get("last-modified"),V=b?_L(b):{noCache:!1,noStore:!1};if(!V.noStore){let P={content:C,timestamp:Date.now(),etag:F||void 0,lastModified:A||void 0,maxAge:V.maxAge};if(!V.noCache||WL(P))o1.set(L,P)}return{content:C,fromCache:!1}};var N1=(L)=>{if(L||!(L instanceof HTMLAnchorElement))return!1;let x=L.getAttribute("href");if(!x||x.startsWith("#"))return!1;try{return new URL(x,window.location.href).origin===window.location.origin}catch{return!1}};var B="router-pathname",c1="router-query",Hx=z("context-router",{[B]:window.location.pathname,[c1]:()=>{let L=new Map;for(let[H,k]of new URLSearchParams(window.location.search))L.set(H,D(k));let x=(H,k)=>{if(!L.has(H))L.set(H,D(k??N));else if(k!=null)L.get(H).set(k);return L.get(H).get()},M=()=>{let H=new URLSearchParams;for(let[k,C]of L){let b=C.get();if(b&&b!==N)H.set(k,b)}window.history.replaceState(null,"",`${window.location.pathname}?${H.toString()}${window.location.hash}`)};return()=>new Proxy({},{has(H,k){return L.has(k)},get(H,k){return x(k)},set(H,k,C){return x(k,C),M(),!0},ownKeys(){return[...L.keys()]}})}},(L,{all:x,first:M})=>{let H=L.getAttribute("outlet")??"main",k=D("");for(let b of L.querySelectorAll("a[href]")){let F=b.getAttribute("href");if(F&&!F.startsWith("#")&&!F.includes("://")&&!F.startsWith("/"))try{let A=new URL(F,window.location.href);b.setAttribute("href",A.pathname)}catch{}}let C=d(async(b)=>{let F=String(L[B]),A=String(new URL(F,window.location.origin));if(b?.aborted)return C.get();try{k.set("");let{content:V}=await b1(A,b),P=new DOMParser().parseFromString(V,"text/html"),j=P.querySelector("title")?.textContent;if(j)document.title=j;if(F!==window.location.pathname)window.history.pushState({},"",A);return P.querySelector(H)?.innerHTML??""}catch(V){let P=`Navigation failed: ${V instanceof Error?V.message:String(V)}`;return k.set(P),C.get()}});return[x1([B,c1]),x('a[href]:not([href^="#"])',n("active",(b)=>N1(b)&&L[B]===b.pathname),G("click",(b)=>{if(!N1(b.target))return;let F=new URL(b.target.href);if(F.origin===window.location.origin)b.preventDefault(),L[B]=F.pathname})),M(H,C1(C,{allowScripts:!0})),M("card-callout",y(()=>!!k.get())),M(".error",T(k)),()=>{let b=()=>{L[B]=window.location.pathname};return window.addEventListener("popstate",b),()=>{window.removeEventListener("popstate",b)}}]});var u1="media-motion",i1="media-theme",s1="media-viewport",a1="media-orientation",Cx=z("context-media",{[u1]:()=>{let L=matchMedia("(prefers-reduced-motion: reduce)"),x=D(L.matches);return L.addEventListener("change",(M)=>{x.set(M.matches)}),x},[i1]:()=>{let L=matchMedia("(prefers-color-scheme: dark)"),x=D(L.matches?"dark":"light");return L.addEventListener("change",(M)=>{x.set(M.matches?"dark":"light")}),x},[s1]:(L)=>{let x=(A,V)=>{let j=L.getAttribute(A)?.trim();if(!j)return V;let X=j.match(/em$/)?"em":"px",q=parseFloat(j);return Number.isFinite(q)?q+X:V},M=matchMedia(`(min-width: ${x("sm","32em")})`),H=matchMedia(`(min-width: ${x("md","48em")})`),k=matchMedia(`(min-width: ${x("lg","72em")})`),C=matchMedia(`(min-width: ${x("xl","104em")})`),b=()=>{if(C.matches)return"xl";if(k.matches)return"lg";if(H.matches)return"md";if(M.matches)return"sm";return"xs"},F=D(b());return M.addEventListener("change",()=>{F.set(b())}),H.addEventListener("change",()=>{F.set(b())}),k.addEventListener("change",()=>{F.set(b())}),C.addEventListener("change",()=>{F.set(b())}),F},[a1]:()=>{let L=matchMedia("(orientation: landscape)"),x=D(L.matches?"landscape":"portrait");return L.addEventListener("change",(M)=>{x.set(M.matches?"landscape":"portrait")}),x}},()=>[x1([u1,i1,s1,a1])]);var Vx=z("hello-world",{name:h(E)},(L,{first:x})=>{return W(L,"span"),[x("input",G("input",(M)=>{L.name=M.target.value||E})),x("span",T("name"))]});var Ax=z("basic-counter",{count:_((L)=>I()(L,L.querySelector("span")?.textContent),"button",{click:({value:L})=>++L})},(L,{first:x})=>[x("span",T("count"))]);var Yx=z("basic-button",{disabled:H1(),label:h(E),badge:h()},(L,{first:x})=>{return W(L,"button"),W(L,".label"),[x("button",Q("disabled")),x(".label",T("label")),x(".badge",T("badge"))]});var Dx=z("form-checkbox",{checked:_((L)=>L.querySelector("input")?.checked,"input",{change:({target:L})=>L.checked}),label:h(E)},(L,{first:x})=>{return W(L,'input[type="checkbox"]'),W(L,".label"),[k1("checked"),x(".label",T("label"))]});var EL=["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"],$1=(L,x)=>{let M=D(x(L));return[G("change",()=>{M.set(x(L))}),G("keydown",(H)=>{let{key:k}=H;if(EL.includes(k)){if(H.preventDefault(),H.stopPropagation(),k==="Home")M.set(0);else if(k==="End")M.set(L.length-1);else M.update((C)=>Math.min(Math.max(C+(k==="ArrowRight"||k==="ArrowDown"?1:-1),0),L.length-1));if(L[M.get()])L[M.get()].focus()}})]};var OL=({target:L})=>L.value,gL=({event:L,target:x})=>{if(L.key==="Enter")x.click()},Sx=z("form-radiogroup",{value:_((L)=>L.querySelector("input:checked")?.value??"","input",{change:OL,keyup:gL})},(L,{all:x})=>[O("value"),x("input",Q("tabIndex",(M)=>M.value===L.value?0:-1),...$1(Array.from(L.querySelectorAll("input")),(M)=>M.findIndex((H)=>H.checked))),x("label",n("selected",(M)=>L.value===M.querySelector("input")?.value))]);var F1=(L)=>()=>{L.value="",L.setCustomValidity(""),L.checkValidity(),L.dispatchEvent(new Event("input",{bubbles:!0})),L.dispatchEvent(new Event("change",{bubbles:!0}))};var wx=z("form-textbox",{value:_("","input, textarea",{change:({host:L,target:x})=>{return x.checkValidity(),L.error=x.validationMessage,x.value}}),length:_(0,"input, textarea",{input:({target:L})=>L.value.length}),error:"",description:"",clear(){}},(L,{first:x})=>{let M=L.querySelector("input, textarea");if(!M)throw new Error("No Input or textarea element found");L.clear=F1(M);let H=L.querySelector(".description");if(H?.dataset.remaining&&M.maxLength)L.setSignal("description",d(()=>H.dataset.remaining.replace("${n}",String(M.maxLength-L.length))));let k=L.querySelector(".error")?.id,C=H?.id;return[O("value"),x("input, textarea",Q("ariaInvalid",()=>String(!!L.error)),O("aria-errormessage",()=>L.error&&k?k:N),O("aria-describedby",()=>L.description&&C?C:N)),x(".clear",y(()=>!!L.length),G("click",()=>{L.clear()})),x(".error",T("error")),x(".description",T("description"))]});var px=z("form-combobox",{value:"",length:0,error:"",description:"",clear(){}},(L,{first:x,all:M})=>{let H=L.querySelector("input");if(!H)throw new Error("Input element not found");let k=D("idle"),C=D(-1),b=D(""),F=D(!1),A=w('[role="option"]:not([hidden])')(L),V=()=>k.get()==="editing"&&F.get(),P=(j)=>{H.value=j,H.setCustomValidity(""),H.checkValidity(),Q1(()=>{k.set("selected"),L.value=j,L.length=j.length,L.error=H.validationMessage??"",b.set(j.toLowerCase()),C.set(-1),F.set(H.required&&!H.value||!1)})};return L.clear=F1(H),[O("value"),()=>v(()=>{let j=k.get(),X=C.get();if(j==="idle")return;else if(j==="editing"&&X>=0)A.get().at(X)?.focus();else H.focus()}),G("keydown",(j)=>{let{key:X,altKey:q}=j;if(["ArrowDown","ArrowUp"].includes(X))if(j.preventDefault(),j.stopPropagation(),k.set("editing"),q)F.set(X==="ArrowDown");else C.update((Y)=>X==="ArrowDown"?Math.min(Y+1,A.get().length-1):Math.max(Y-1,-1))}),G("keyup",(j)=>{let{key:X}=j;if(X==="Delete")j.preventDefault(),j.stopPropagation(),P("")}),G("focusout",()=>{requestAnimationFrame(()=>{if(!L.contains(document.activeElement))k.set("idle")})}),x(".error",T("error")),x(".description",T("description")),x("input",Q("ariaInvalid",()=>String(!!L.error)),O("aria-errormessage",()=>L.error&&L.querySelector(".error")?.id?L.querySelector(".error")?.id:N),O("aria-describedby",()=>L.description&&L.querySelector(".description")?.id?L.querySelector(".description")?.id:N),Q("ariaExpanded",()=>String(V())),G("change",()=>{H.checkValidity(),L.value=H.value,L.error=H.validationMessage??""}),G("input",()=>{Q1(()=>{k.set("editing"),F.set(!0),b.set(H.value.trim().toLowerCase()),L.length=H.value.length})})),x(".clear",y(()=>!!L.length),G("click",()=>{L.clear()})),x('[role="listbox"]',y(V),G("keyup",(j)=>{let{key:X}=j;if(X==="Enter")P(A.get().at(C.get())?.textContent?.trim()||"");else if(X==="Escape")P(L.value);else{let q=X.toLowerCase(),Y=A.get().findIndex((U)=>(U.textContent?.trim().toLowerCase()||"").startsWith(q));if(Y!==-1)C.set(Y)}})),M('[role="option"]',Q("ariaSelected",(j)=>String(j.textContent?.trim().toLowerCase()===L.value.toLowerCase())),y((j)=>j.textContent?.trim().toLowerCase().includes(b.get())),G("click",(j)=>{P(j.target.textContent?.trim()||"")}))]});var wL=({target:L,value:x})=>x+(L.classList.contains("decrement")?-1:1),IL=({event:L,value:x})=>{let{key:M}=L;if(["ArrowUp","ArrowDown","-","+"].includes(M))return L.stopPropagation(),L.preventDefault(),x+(M==="ArrowDown"||M==="-"?-1:1)},hx=z("form-spinbutton",{value:_((L)=>I()(L,L.querySelector("value")?.textContent),"button",{click:wL,keydown:IL})},(L,{first:x})=>{let M=L.getAttribute("zero-label")||"Add to Cart",H=L.getAttribute("increment-label")||"Increment",k=I(9)(L,L.getAttribute("max")),C=()=>L.value!==0;return[x(".value",T("value"),y(C)),x(".decrement",y(C)),x(".increment",T(()=>C()?"+":M),Q("ariaLabel",()=>C()?H:M),Q("disabled",()=>L.value>=k))]});var r1=(L,x)=>(L+x)%x,mL=({host:L,target:x,value:M})=>{let H=L.slides.length,k=x.classList.contains("prev")?M-1:x.classList.contains("next")?M+1:parseInt(x.dataset.index||"0");return Number.isInteger(k)?r1(k,H):0},dL=({event:L,host:x,value:M})=>{let H=L.key;if(["ArrowLeft","ArrowRight","Home","End"].includes(H)){L.preventDefault(),L.stopPropagation();let k=x.slides.length,C=H==="Home"?0:H==="End"?k-1:r1(M+(H==="ArrowLeft"?-1:1),k);return x.slides[C].focus(),C}},Bx=z("module-carousel",{slides:w('[role="tabpanel"]'),index:_((L)=>Math.max(L.slides.findIndex((x)=>x.ariaCurrent==="true"),0),"nav button",{click:mL,keyup:dL})},(L,{all:x})=>{let M=(H)=>H.dataset.index===String(L.index);return[x('[role="tab"]',Q("ariaSelected",(H)=>String(M(H))),Q("tabIndex",(H)=>M(H)?0:-1)),x('[role="tabpanel"]',Q("ariaCurrent",(H)=>String(H.id===L.slides[L.index].id)))]});var ox=z("module-catalog",{},(L,{first:x})=>{let M=n1(L,"form-spinbutton",(H,k)=>H+k.value,0);return[x("basic-button",c({badge:()=>M.get()>0?String(M.get()):"",disabled:()=>!M.get()}))]});var l1="success",pL="error",t1=(L,x)=>(M,H)=>G("click",async()=>{let k=H.textContent?.trim()??"",C=l1;try{await navigator.clipboard.writeText(L.textContent?.trim()??"")}catch(b){console.error("Error while trying to use navigator.clipboard.writeText()",b),C=pL}H.disabled=!0,H.label=x[C]??k,setTimeout(()=>{H.disabled=!1,H.label=k},C===l1?1000:3000)})(M,H);var $x=z("module-codeblock",{collapsed:H1()},(L,{first:x})=>{let M=W(L,"code");return[k1("collapsed"),x(".overlay",G("click",()=>{L.collapsed=!1})),x(".copy",t1(M,{success:L.getAttribute("copy-success")||"Copied!",error:L.getAttribute("copy-success")||"Error trying to copy to clipboard!"}))]});var e1=new Map,fL,KL=()=>{fL=void 0;let L=Array.from(e1.values());e1.clear();for(let x of L)x()};queueMicrotask(KL);var u=Symbol();var uL=(L)=>L?`#${L}`:"",iL=(L)=>L?.length?`.${Array.from(L).join(".")}`:"";var kL=(L)=>L?`<${L.localName}${uL(L.id)}${iL(L.classList)}>`:"<unknown>";var J=(L,x)=>{let M=L.querySelector(x);if(!M)throw new Error(`Component ${kL(L)} does not contain required <${x}> element`);return M};var q1=(L)=>L?.getAttribute("aria-controls")??"",CL=(L,x,M=0)=>q1(L[Math.min(Math.max(L.findIndex(x)+M,0),L.length-1)]),sL=({target:L})=>q1(L),aL=({event:L,host:x,target:M})=>{let H=L.key;if(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(H))return L.preventDefault(),L.stopPropagation(),CL(x.tabs,(k)=>k===M,H==="Home"?-x.tabs.length:H==="End"?x.tabs.length:H==="ArrowLeft"||H==="ArrowUp"?-1:1)},f0=z("module-tabgroup",{tabs:w('[role="tab"]'),selected:_((L)=>CL(L.tabs,(x)=>x.ariaSelected==="true"),'[role="tab"]',{click:sL,keyup:aL})},(L,{all:x})=>{J(L,'[role="tablist"]'),J(L,'[role="tab"]'),J(L,'[role="tabpanel"]');let M=(H)=>L.selected===q1(H);return[x('[role="tab"]',Q("ariaSelected",(H)=>String(M(H))),Q("tabIndex",(H)=>M(H)?0:-1),Z1(M)),x('[role="tabpanel"]',y((H)=>L.selected===H.id))]});var bL=(L,x)=>{let M="",H="";if(!x)H="No URL provided";else if((L.parentElement||L.getRootNode().host)?.closest(`${L.localName}[src="${x}"]`))H="Recursive loading detected";else try{let k=new URL(x,location.href);if(k.origin===location.origin)M=String(k);else H="Invalid URL origin"}catch(k){H=String(k)}return{value:M,error:H}};var v0=z("module-lazy",{src:bL},(L,{first:x})=>{J(L,"card-callout"),J(L,".error");let M=D(""),H=d(async(k)=>{let C=L.src.value;if(L.src.error||!C)return M.set(L.src.error??"No URL provided"),"";try{M.set(""),L.querySelector(".loading")?.remove();let{content:b}=await b1(C,k);return b}catch(b){let F=b instanceof Error?b.message:String(b);return M.set(F),""}});return[C1(H),x("card-callout",y(()=>!!M.get()||H.get()===N),n("danger",()=>!M.get())),x(".error",T(M))]});var i0=z("module-todo",{active:w("form-checkbox:not([checked])"),completed:w("form-checkbox[checked]")},(L,{first:x})=>{let M=W(L,"form-textbox"),H=W(L,"template"),k=W(L,"ol");return[x(".submit",c({disabled:()=>!M.length})),x("form",G("submit",(C)=>{C.preventDefault(),queueMicrotask(()=>{let b=M.value.trim();if(!b)return;let F=document.importNode(H.content,!0).firstElementChild;if(!(F instanceof HTMLLIElement))throw new Error("Invalid template for list item; expected <li>");F.querySelector("slot")?.replaceWith(b),k.append(F),M.clear()})})),x("ol",O("filter",()=>B1(L,"form-radiogroup",(C,b)=>C&&b?C.value:"all")),G("click",(C)=>{let b=C.target;if(b.localName==="button")b.closest("li").remove()})),x(".count",T(()=>String(L.active.length))),x(".singular",y(()=>L.active.length===1)),x(".plural",y(()=>L.active.length>1)),x(".remaining",y(()=>!!L.active.length)),x(".all-done",y(()=>!L.active.length)),x(".clear-completed",c({disabled:()=>!L.completed.length,badge:()=>L.completed.length>0?String(L.completed.length):""}),G("click",()=>{let C=Array.from(L.querySelectorAll("ol li"));for(let b=C.length-1;b>=0;b--)if(C[b].querySelector("form-checkbox")?.checked)C[b].remove()}))]});var $0=z("rating-stars",{value:I()},(L,{all:x})=>{let M=(H)=>parseInt(H.dataset.key||"0");return[v1("change-rating","value"),x("input",Q("checked",(H)=>L.value===M(H)),G("change",(H)=>{H.stopPropagation();let k=parseInt(H.currentTarget?.value);L.value=k+1})),x(".label",T((H)=>M(H)<=L.value?"\u2605":"\u2606"))]});var t0=z("rating-feedback",{},(L,{all:x,first:M})=>{let H=D(0),k=D(!0),C=D(!1);if(!L.querySelector("rating-stars"))throw new Error("No rating-stars component found");return[G("change-rating",(F)=>{H.set(F.detail)}),G("submit",(F)=>{F.preventDefault(),C.set(!0),console.log("Feedback submitted")}),M(".hide",G("click",()=>{let F=L.querySelector(".feedback");if(F)F.hidden=!0})),M("textarea",G("input",(F)=>{k.set(F.target?.value.trim()==="")})),M(".feedback",y(()=>!C.get()&&!!H.get())),x(".feedback p",y((F)=>H.get()===parseInt(F.dataset.key||"0"))),M("basic-button",Q("disabled",k))]});var x4=z("calc-table",{columns:I(),rows:I()},(L,{all:x,first:M})=>{let k=L.querySelector(".calc-table-row"),C=L.querySelector(".calc-table-colhead"),b=L.querySelector(".calc-table-cell");if(!k||!C||!b)throw new Error("Missing template elements");let F=new Map;for(let V=0;V<L.columns;V++)F.set("ABCDEFGHIJKLMNOPQRSTUVWXYZ"[V],D(0));let A=(V)=>{return Array.from(L.querySelectorAll(`tbody input[data-key="${V}"]`)).map((P)=>Number.isFinite(P.valueAsNumber)?P.valueAsNumber:0).reduce((P,j)=>P+j,0)};return[Q("rows",()=>L.querySelector(".rows form-spinbutton")?.value),Q("columns",()=>L.querySelector(".columns form-spinbutton")?.value),M("tbody",o((V)=>L.rows-V.querySelectorAll("tr").length,{position:"beforeend",create:(V)=>{let P=document.importNode(k.content,!0).firstElementChild;if(!(P instanceof HTMLTableRowElement))throw new Error(`Expected <tr> as root in table row template, got ${P}`);let j=String(V.querySelectorAll("tr").length+1);return P.dataset.key=j,P.querySelector("slot")?.replaceWith(document.createTextNode(j)),P},resolve:()=>{for(let[V,P]of F)P.set(A(V))}})),M("thead tr",o((V)=>L.columns-(V.querySelectorAll("th").length-1),{position:"beforeend",create:(V)=>{let P=document.importNode(C.content,!0).firstElementChild;if(!(P instanceof HTMLTableCellElement))throw new Error(`Expected <th> as root in column header template, got ${P}`);let j="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[V.querySelectorAll("th").length-1];return F.set(j,D(0)),P.querySelector("slot")?.replaceWith(document.createTextNode(j)),P}})),x("tbody tr",o((V)=>L.columns-V.querySelectorAll("td").length,{position:"beforeend",create:(V)=>{let P=document.importNode(b.content,!0).firstElementChild;if(!(P instanceof HTMLTableCellElement))throw new Error(`Expected <td> as root in cell template, got ${P}`);let j=V.dataset.key,X="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[V.querySelectorAll("td").length],q=P.querySelector("input");if(!q)throw new Error("No input found in cell template");return q.dataset.key=X,P.querySelector("slot")?.replaceWith(document.createTextNode(`${X}${j}`)),P}})),M("tfoot tr",o((V)=>L.columns-V.querySelectorAll("td").length,{position:"beforeend",create:(V)=>{let P=document.createElement("td"),j="ABCDEFGHIJKLMNOPQRSTUVWXYZ"[V.querySelectorAll("td").length];return P.dataset.key=j,P}})),x("tbody input",G("change",(V)=>{let P=V.target?.dataset.key;F.get(P)?.set(A(P))})),x("tfoot td",T((V)=>String(F.get(V.dataset.key).get())))]});
//# debugId=A42153BDB431CBC964756E2164756E21