@dinoreic/fez 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -145,7 +145,7 @@ This example showcases:
145
145
  * **DOM Morphing** - Uses [Idiomorph](https://github.com/bigskysoftware/idiomorph) for intelligent DOM updates that preserve element state and animations
146
146
  * **Preserve DOM Elements** - Use `fez-keep="unique-key"` attribute to preserve DOM elements across re-renders (useful for animations, form inputs, or stateful elements)
147
147
  * **DOM Memoization** - Use `fez-memoize="key"` attribute to memoize and restore DOM content by key (component-scoped) or `<fez-memoize key="unique-key">` component for global memoization
148
- * **Style Macros** - Define custom CSS shortcuts like `Fez.styleMacro('mobile', '@media (max-width: 768px)')` and use as `:mobile { ... }`
148
+ * **Style Macros** - Define custom CSS shortcuts like `Fez.cssMixin('mobile', '@media (max-width: 768px)')` and use as `:mobile { ... }`
149
149
  * **Scoped & Global Styles** - Components can define both scoped CSS (`:fez { ... }`) and global styles in the same component
150
150
 
151
151
  ### Developer Experience
@@ -301,8 +301,8 @@ Fez('foo-bar', class {
301
301
  // get/set attributes on root node
302
302
  this.attr(name, value)
303
303
 
304
- // hide the custom element wrapper and move children to parent
305
- this.fezHide()
304
+ // dissolves child nodes or given node into parent
305
+ this.dissolve()
306
306
 
307
307
  // automatic form submission handling if there is FORM as parent or child node
308
308
  this.onSubmit(formData) { ... }
@@ -315,9 +315,9 @@ Fez('foo-bar', class {
315
315
  /* Utility methods */
316
316
 
317
317
  // define custom style macro
318
- // Fez.styleMacro('mobile', '@media (max-width: 768px)')
318
+ // Fez.cssMixin('mobile', '@media (max-width: 768px)')
319
319
  // :mobile { ... } -> @media (max-width: 768px) { ... }
320
- Fez.styleMacro(name, value)
320
+ Fez.cssMixin(name, value)
321
321
 
322
322
  // add global scss
323
323
  Fez.globalCss(`
package/dist/fez.js CHANGED
@@ -1,31 +1,54 @@
1
- (()=>{var Ae=Object.defineProperty;var Ce=(r,e)=>()=>(r&&(e=r(r=0)),e);var we=(r,e)=>{for(var t in e)Ae(r,t,{get:e[t],enumerable:!0})};var ce={};we(ce,{loadDefaults:()=>le});var le,ae=Ce(()=>{le=()=>{Fez("fez-component",class{init(e){let t=document.createElement(e.name);for(t.props=e.props||e["data-props"]||e;this.root.firstChild;)this.root.parentNode.insertBefore(this.root.lastChild,t.nextSibling);this.root.innerHTML="",this.root.appendChild(t)}}),Fez("fez-include",class{init(e){Fez.fetch(e.src,t=>{let n=Fez.domRoot(t);Fez.head(n),this.root.innerHTML=n.innerHTML})}}),Fez("fez-inline",class{init(e){let t=this.root.innerHTML;if(this.root.innerHTML.includes("<")){let o=`inline-${Fez.fnv1(this.root.outerHTML)}`;Fez(o,class{HTML=t;init(){Object.assign(this.state,e.state||{})}});let s=document.createElement(o);this.root.after(this.root.lastChild,s),this.root.remove()}}});let r=new Map;Fez("fez-memoize",class{init(e){if(!e.key){Fez.error("fez-memoize: key prop is required");return}if(r.has(e.key)){let t=r.get(e.key);Fez.log(`Memoize - key: "${e.key}" - restore`),this.root.innerHTML="",this.root.appendChild(t.cloneNode(!0))}}onMount(e){r.has(e.key)||requestAnimationFrame(()=>{let t=document.createElement("div");t.innerHTML=this.root.innerHTML,Fez.log(`Memoize - key: "${e.key}" - set`),r.set(e.key,t)})}})};typeof Fez<"u"&&Fez&&le()});function D(r,e={},t){if(typeof e=="string"&&([e,t]=[t,e],e||={}),e instanceof Node&&(t=e,e={}),Array.isArray(r)&&(t=r,r="div"),(typeof e!="object"||Array.isArray(e))&&(t=e,e={}),r.includes(".")){let o=r.split(".");r=o.shift()||"div";let s=o.join(" ");e.class?e.class+=` ${s}`:e.class=s}let n=document.createElement(r);for(let[o,s]of Object.entries(e))if(typeof s=="function")n[o]=s.bind(this);else{let i=String(s).replaceAll("fez.",this.fezHtmlRoot);n.setAttribute(o,i)}if(t)if(Array.isArray(t))for(let o of t)n.appendChild(o);else t instanceof Node?n.appendChild(t):n.innerHTML=String(t);return n}function Te(r,e){if(r=r.replace(/^#?raw/,"@html").replace(/^#?html/,"@html"),r.startsWith("#if")||r.startsWith("if"))return e.push(!1),r=r.replace(/^#?if/,""),`\${ ${r} ? \``;if(r.startsWith("#unless")||r.startsWith("unless"))return e.push(!1),r=r.replace(/^#?unless/,""),`\${ !(${r}) ? \``;if(r=="/block")return"`) && ''}";if(r.startsWith("#for")||r.startsWith("for")){r=r.replace(/^#?for/,"");let t=r.split(" in ",2);return"${"+t[1]+".map(("+t[0]+")=>`"}else if(r.startsWith("#each")||r.startsWith("each")){r=r.replace(/^#?each/,"");let t=r.split(" as ",2);return"${"+t[0]+".map(("+t[1]+")=>`"}else{if(r==":else"||r=="else")return e[e.length-1]=!0,"` : `";if(r=="/if"||r=="/unless")return e.pop()?"`}":"` : ``}";if(r=="/for"||r=="/each")return'`).join("")}';{let t="@html ";return r.startsWith("json ")&&(r=r.replace("json ","@html '<pre class=json>'+JSON.stringify("),r+=", null, 2) + '</pre>'"),r.startsWith(t)?r=r.replace(t,""):r=`Fez.htmlEscape(${r})`,"${"+r+"}"}}}function N(r,e={}){let t=[];r=r.replaceAll("[[","{{").replaceAll("]]","}}"),r=r.replace(/(\w+)=\{\{\s*(.*?)\s*\}\}([\s>])/g,(s,i,u,f)=>`${i}="{{ ${u} }}"${f}`);let n={};r=r.replace(/\{\{block\s+(\w+)\s*\}\}([^§]+)\{\{\/block\}\}/g,(s,i,u)=>(n[i]=u,"")),r=r.replace(/\{\{block:([\w\-]+)\s*\}\}/g,(s,i)=>n[i]||`block:${i}?`),r=r.replace(/:(\w+)="([\w\.\[\]]+)"/,(s,i,u)=>`:${i}=Fez.store.delete({{ Fez.store.set(${u}) }})`);let o=r.replace(/{{(.*?)}}/g,(s,i)=>(i=i.replaceAll("&#x60;","`"),i=i.replaceAll("&lt;","<").replaceAll("&gt;",">").replaceAll("&amp;","&"),Te(i,t)));o=o.replace(/<!\-\-.*?\-\->/g,"").replace(/>\s+</g,"><"),o="`"+o.trim()+"`";try{let s=`const fez = this;
1
+ (()=>{var Me=Object.defineProperty;var Fe=(r,e)=>()=>(r&&(e=r(r=0)),e);var Le=(r,e)=>{for(var t in e)Me(r,t,{get:e[t],enumerable:!0})};var pe={};Le(pe,{loadDefaults:()=>de});var de,he=Fe(()=>{de=()=>{Fez("fez-component",class{init(e){let t=document.createElement(e.name);for(t.props=e.props||e["data-props"]||e;this.root.firstChild;)this.root.parentNode.insertBefore(this.root.lastChild,t.nextSibling);this.root.innerHTML="",this.root.appendChild(t)}}),Fez("fez-include",class{init(e){Fez.fetch(e.src,t=>{let s=Fez.domRoot(t);Fez.head(s),this.root.innerHTML=s.innerHTML})}}),Fez("fez-inline",class{init(e){let t=this.root.innerHTML;if(this.root.innerHTML.includes("<")){let n=`inline-${Fez.fnv1(this.root.outerHTML)}`;Fez(n,class{HTML=t;init(){Object.assign(this.state,e.state||{})}});let i=document.createElement(n);this.root.after(this.root.lastChild,i),this.root.remove()}}});let r=new Map;Fez("fez-memoize",class{init(e){if(!e.key){Fez.error("fez-memoize: key prop is required");return}if(r.has(e.key)){let t=r.get(e.key);Fez.log(`Memoize - key: "${e.key}" - restore`),this.root.innerHTML="",this.root.appendChild(t.cloneNode(!0))}}onMount(e){r.has(e.key)||requestAnimationFrame(()=>{let t=document.createElement("div");t.innerHTML=this.root.innerHTML,Fez.log(`Memoize - key: "${e.key}" - set`),r.set(e.key,t)})}})};typeof Fez<"u"&&Fez&&de()});function D(r,e={},t){if(typeof e=="string"&&([e,t]=[t,e],e||={}),e instanceof Node&&(t=e,e={}),Array.isArray(r)&&(t=r,r="div"),(typeof e!="object"||Array.isArray(e))&&(t=e,e={}),r.includes(".")){let n=r.split(".");r=n.shift()||"div";let i=n.join(" ");e.class?e.class+=` ${i}`:e.class=i}let s=document.createElement(r);for(let[n,i]of Object.entries(e))if(typeof i=="function")s[n]=i.bind(this);else{let o=String(i).replaceAll("fez.",this.fezHtmlRoot);s.setAttribute(n,o)}if(t)if(Array.isArray(t))for(let n of t)s.appendChild(n);else t instanceof Node?s.appendChild(t):s.innerHTML=String(t);return s}function xe(r,e){if(r=r.replace(/^#?raw/,"@html").replace(/^#?html/,"@html"),r.startsWith("#if")||r.startsWith("if"))return e.push(!1),r=r.replace(/^#?if/,""),`\${ ${r} ? \``;if(r.startsWith("#unless")||r.startsWith("unless"))return e.push(!1),r=r.replace(/^#?unless/,""),`\${ !(${r}) ? \``;if(r=="/block")return"`) && ''}";if(r.startsWith("#for")||r.startsWith("for")){r=r.replace(/^#?for/,"");let t=r.split(" in ",2);return"${"+t[1]+".map(("+t[0]+")=>`"}else if(r.startsWith("#each")||r.startsWith("each")){r=r.replace(/^#?each/,"");let t=r.split(" as ",2);return"${"+t[0]+".map(("+t[1]+")=>`"}else{if(r==":else"||r=="else")return e[e.length-1]=!0,"` : `";if(r=="/if"||r=="/unless")return e.pop()?"`}":"` : ``}";if(r=="/for"||r=="/each")return'`).join("")}';{let t="@html ";return r.startsWith("json ")&&(r=r.replace("json ","@html '<pre class=json>'+JSON.stringify("),r+=", null, 2) + '</pre>'"),r.startsWith(t)?r=r.replace(t,""):r=`Fez.htmlEscape(${r})`,"${"+r+"}"}}}function N(r,e={}){let t=[];r=r.replaceAll("[[","{{").replaceAll("]]","}}"),r=r.replace(/(\w+)=\{\{\s*(.*?)\s*\}\}([\s>])/g,(i,o,f,u)=>`${o}="{{ ${f} }}"${u}`);let s={};r=r.replace(/\{\{block\s+(\w+)\s*\}\}([^§]+)\{\{\/block\}\}/g,(i,o,f)=>(s[o]=f,"")),r=r.replace(/\{\{block:([\w\-]+)\s*\}\}/g,(i,o)=>s[o]||`block:${o}?`),r=r.replace(/:(\w+)="([\w\.\[\]]+)"/,(i,o,f)=>`:${o}=Fez.store.delete({{ Fez.store.set(${f}) }})`);let n=r.replace(/{{(.*?)}}/g,(i,o)=>(o=o.replaceAll("&#x60;","`"),o=o.replaceAll("&lt;","<").replaceAll("&gt;",">").replaceAll("&amp;","&"),xe(o,t)));n=n.replace(/<!\-\-.*?\-\->/g,"").replace(/>\s+</g,"><"),n="`"+n.trim()+"`";try{let i=`const fez = this;
2
2
  with (this) {
3
- return ${o}
3
+ return ${n}
4
4
  }
5
- `,i=new Function(s);return f=>{try{return i.bind(f)()}catch(m){m.message=`FEZ template runtime error: ${m.message}
5
+ `,o=new Function(i);return u=>{try{return o.bind(u)()}catch(d){d.message=`FEZ template runtime error: ${d.message}
6
6
 
7
- Template source: ${o}`,console.error(m)}}}catch(s){return s.message=`FEZ template compile error: ${s.message}Template source:
8
- ${o}`,console.error(s),()=>Fez.error("Template Compile Error",!0)}}var _=class{static getProps(e,t){let n={};if(e.props)return e.props;for(let o of e.attributes)n[o.name]=o.value;for(let[o,s]of Object.entries(n))if([":"].includes(o[0])){delete n[o];try{let i=new Function(`return (${s})`).bind(t)();n[o.replace(/[\:_]/,"")]=i}catch(i){console.error(`Fez: Error evaluating attribute ${o}="${s}" for ${e.tagName}: ${i.message}`)}}if(n["data-props"]){let o=n["data-props"];if(typeof o=="object")return o;o[0]!="{"&&(o=decodeURIComponent(o));try{n=JSON.parse(o)}catch(s){console.error(`Fez: Invalid JSON in data-props for ${e.tagName}: ${s.message}`)}}else if(n["data-json-template"]){let o=t.previousSibling?.textContent;if(o)try{n=JSON.parse(o),t.previousSibling.remove()}catch(s){console.error(`Fez: Invalid JSON in template for ${e.tagName}: ${s.message}`)}}return n}static formData(e){let t=e.closest("form")||e.querySelector("form");if(!t)return Fez.log("No form found for formData()"),{};let n=new FormData(t),o={};return n.forEach((s,i)=>{o[i]=s}),o}static nodeName="div";constructor(){}n=D;get fezHtmlRoot(){return`Fez(${this.UID}).`}get isConnected(){return this.root?.isConnected?!0:(this.fezOnDestroy(),!1)}prop(e){let t=this.oldRoot[e]||this.props[e];return typeof t=="function"&&(t=t.bind(this.root)),t}copy(){for(let e of Array.from(arguments)){let t=this.props[e];if(t!==void 0){if(e=="class"){let n=this.root.getAttribute(e,t);n&&(t=[n,t].join(" "))}(e=="style"||!this.root[e])&&(typeof t=="string"?this.root.setAttribute(e,t):this.root[e]=t)}}}fezOnDestroy(){this._onDestroyCallbacks&&(this._onDestroyCallbacks.forEach(e=>{try{e()}catch(t){console.error("Fez: Error in cleanup callback:",t)}}),this._onDestroyCallbacks=[]),this.onDestroy(),this.onDestroy=()=>{},this.root&&(this.root.fez=void 0),this.root=void 0}addOnDestroy(e){this._onDestroyCallbacks=this._onDestroyCallbacks||[],this._onDestroyCallbacks.push(e)}on(e,t,n=200){this._eventHandlers=this._eventHandlers||{},this._eventHandlers[e]&&window.removeEventListener(e,this._eventHandlers[e]);let o=Fez.throttle(()=>{this.isConnected&&t.call(this)},n);this._eventHandlers[e]=o,window.addEventListener(e,o),this.addOnDestroy(()=>{window.removeEventListener(e,o),delete this._eventHandlers[e]})}onWindowResize(e,t){this.on("resize",e,t),e()}onWindowScroll(e,t){this.on("scroll",e,t),e()}onElementResize(e,t,n=200){let o=Fez.throttle(()=>{this.isConnected&&t.call(this,e.getBoundingClientRect(),e)},n),s=new ResizeObserver(o);s.observe(e),t.call(this,e.getBoundingClientRect(),e),this.addOnDestroy(()=>{s.disconnect()})}slot(e,t){t||=document.createElement("template");let n=t.nodeName=="SLOT";for(;e.firstChild;)n?t.parentNode.insertBefore(e.lastChild,t.nextSibling):t.appendChild(e.firstChild);return n?t.parentNode.removeChild(t):e.innerHTML="",t}setStyle(e,t){this.root.style.setProperty(e,t)}connect(){}onMount(){}beforeRender(){}afterRender(){}onDestroy(){}onStateChange(){}onGlobalStateChange(){}publish(e,...t){let n=s=>{if(Fez._subs&&Fez._subs[e]){let i=Fez._subs[e].find(([u])=>u===s);if(i)return i[1].bind(s)(...t),!0}return!1};if(n(this))return!0;let o=this.root.parentElement;for(;o;){if(o.fez&&n(o.fez))return!0;o=o.parentElement}return!1}fezBlocks={};parseHtml(e){let t=this.fezHtmlRoot.replaceAll('"',"&quot;");return e=e.replace(/([!'"\s;])fez\.(\w)/g,`$1${t}$2`).replace(/>\s+</g,"><"),e.trim()}nextTick(e,t){t?(this._nextTicks||={},this._nextTicks[t]||=window.requestAnimationFrame(()=>{e.bind(this)(),this._nextTicks[t]=null},t)):window.requestAnimationFrame(e.bind(this))}render(e){if(e||=this?.class?.fezHtmlFunc,!e||!this.root)return;this.beforeRender();let t=typeof this.class.nodeName=="function"?this.class.nodeName(this.root):this.class.nodeName,n=document.createElement(t||"div"),o;Array.isArray(e)?e[0]instanceof Node?e.forEach(s=>n.appendChild(s)):o=e.join(""):typeof e=="string"?o=N(e)(this):typeof e=="function"&&(o=e(this)),o&&(o=o.replace(/\s\w+="undefined"/g,""),n.innerHTML=this.parseHtml(o)),this.fezKeepNode(n),this.fezMemoization(n),Fez.morphdom(this.root,n),this.fezRenderPostProcess(),this.afterRender()}fezRenderPostProcess(){let e=(t,n)=>{this.root.querySelectorAll(`*[${t}]`).forEach(o=>{let s=o.getAttribute(t);o.removeAttribute(t),s&&n.bind(this)(s,o)})};e("fez-this",(t,n)=>{new Function("n",`this.${t} = n`).bind(this)(n)}),e("fez-use",(t,n)=>{let o=this[t];typeof o=="function"?o(n):console.error(`Fez error: "${t}" is not a function in ${this.fezName}`)}),e("fez-class",(t,n)=>{let o=t.split(/\s+/),s=o.pop();o.forEach(i=>n.classList.add(i)),s&&setTimeout(()=>{n.classList.add(s)},300)}),e("fez-bind",(t,n)=>{if(["INPUT","SELECT","TEXTAREA"].includes(n.nodeName)){let o=new Function(`return this.${t}`).bind(this)(),s=n.type.toLowerCase()=="checkbox",i=["SELECT"].includes(n.nodeName)||s?"onchange":"onkeyup";n.setAttribute(i,`${this.fezHtmlRoot}${t} = this.${s?"checked":"value"}`),this.val(n,o)}else console.error(`Cant fez-bind="${t}" to ${n.nodeName} (needs INPUT, SELECT or TEXTAREA. Want to use fez-this?).`)}),this.root.querySelectorAll("*[disabled]").forEach(t=>{let n=t.getAttribute("disabled");["false"].includes(n)?t.removeAttribute("disabled"):t.setAttribute("disabled","true")})}fezKeepNode(e){e.querySelectorAll("[fez-keep]").forEach(t=>{let n=t.getAttribute("fez-keep"),o=this.root.querySelector(`[fez-keep="${n}"]`);o?t.parentNode.replaceChild(o,t):n==="default-slot"&&Array.from(this.root.childNodes).forEach(s=>t.appendChild(s))})}fezMemoization(e){let t=e.querySelector("[fez-memoize]:not(.fez)");if(!t)return;this.fezMemoStore||=new Map;let n=t.getAttribute("fez-memoize"),o=this.fezMemoStore.get(n);if(o)Fez.log(`Memoize restore ${this.fezName}: ${n}`),t.parentNode.replaceChild(o.cloneNode(!0),t);else{let s=this.root.querySelector("[fez-memoize]:not(.fez)");if(s){let i=s.getAttribute("fez-memoize");this.fezMemoStore.set(i,s.cloneNode(!0))}}}refresh(e){if(alert("NEEDS FIX and remove htmlTemplate"),e){let n=Fez.domRoot(this.class.htmlTemplate).querySelector(e).innerHTML;this.render(e,n)}else this.render()}setInterval(e,t,n){typeof e=="number"&&([t,e]=[e,t]),n||=Fez.fnv1(String(e)),this._setIntervalCache||={},clearInterval(this._setIntervalCache[n]);let o=setInterval(()=>{this.isConnected&&e()},t);return this._setIntervalCache[n]=o,this.addOnDestroy(()=>{clearInterval(o),delete this._setIntervalCache[n]}),o}find(e){return typeof e=="string"?this.root.querySelector(e):e}val(e,t){let n=this.find(e);if(n)if(["INPUT","TEXTAREA","SELECT"].includes(n.nodeName))if(typeof t<"u")n.type=="checkbox"?n.checked=!!t:n.value=t;else return n.value;else if(typeof t<"u")n.innerHTML=t;else return n.innerHTML}formData(e){return this.class.formData(e||this.root)}attr(e,t){return typeof t>"u"?this.root.getAttribute(e):(this.root.setAttribute(e,t),t)}childNodes(e){let t=Array.from(this.root.children);if(e){let n=document.createElement("div");n.style.display="none",document.body.appendChild(n),t.forEach(o=>n.appendChild(o)),t=Array.from(n.children).map(e),document.body.removeChild(n)}return t}subscribe(e,t){Fez._subs||={},Fez._subs[e]||=[],Fez._subs[e]=Fez._subs[e].filter(n=>n[0].isConnected),Fez._subs[e].push([this,t])}rootId(){return this.root.id||=`fez_${this.UID}`,this.root.id}fezRegister(){this.css&&(this.css=Fez.globalCss(this.css,{name:this.fezName,wrap:!0})),this.class.css&&(this.class.css=Fez.globalCss(this.class.css,{name:this.fezName})),this.state||=this.reactiveStore(),this.globalState=Fez.state.createProxy(this),this.fezRegisterBindMethods()}fezRegisterBindMethods(){Object.getOwnPropertyNames(Object.getPrototypeOf(this)).filter(t=>t!=="constructor"&&typeof this[t]=="function").forEach(t=>this[t]=this[t].bind(this))}fezHide(){let e=this.root,t=this.childNodes(),n=this.root.parentNode;return t.reverse().forEach(o=>n.insertBefore(o,e.nextSibling)),this.root.remove(),this.root=n,t}reactiveStore(e,t){e||={},t||=(o,s,i,u)=>{this.onStateChange(s,i,u),this.nextTick(this.render,"render")},t.bind(this);function n(o,s){return typeof o!="object"||o===null?o:new Proxy(o,{set(i,u,f,m){let g=Reflect.get(i,u,m);if(g!==f){typeof f=="object"&&f!==null&&(f=n(f,s));let S=Reflect.set(i,u,f,m);return s(i,u,f,g),S}return!0},get(i,u,f){let m=Reflect.get(i,u,f);return typeof m=="object"&&m!==null?n(m,s):m}})}return n(e,t)}};var $e={data:""},Z=r=>typeof window=="object"?((r?r.querySelector("#_goober"):window._goober)||Object.assign((r||document.head).appendChild(document.createElement("style")),{innerHTML:" ",id:"_goober"})).firstChild:r||$e,Me=r=>{let e=Z(r),t=e.data;return e.data="",t},Fe=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,Le=/\/\*[^]*?\*\/| +/g,X=/\n+/g,w=(r,e)=>{let t="",n="",o="";for(let s in r){let i=r[s];s[0]=="@"?s[1]=="i"?t=s+" "+i+";":n+=s[1]=="f"?w(i,s):s+"{"+w(i,s[1]=="k"?"":e)+"}":typeof i=="object"?n+=w(i,e?e.replace(/([^,])+/g,u=>s.replace(/(^:.*)|([^,])+/g,f=>/&/.test(f)?f.replace(/&/g,u):u?u+" "+f:f)):s):i!=null&&(s=/^--/.test(s)?s:s.replace(/[A-Z]/g,"-$&").toLowerCase(),o+=w.p?w.p(s,i):s+":"+i+";")}return t+(e&&o?e+"{"+o+"}":o)+n},C={},Y=r=>{if(typeof r=="object"){let e="";for(let t in r)e+=t+Y(r[t]);return e}return r},_e=(r,e,t,n,o)=>{let s=Y(r),i=C[s]||(C[s]=(f=>{let m=0,g=11;for(;m<f.length;)g=101*g+f.charCodeAt(m++)>>>0;return"go"+g})(s));if(!C[i]){let f=s!==r?r:(m=>{let g,S,M=[{}];for(;g=Fe.exec(m.replace(Le,""));)g[4]?M.shift():g[3]?(S=g[3].replace(X," ").trim(),M.unshift(M[0][S]=M[0][S]||{})):M[0][g[1]]=g[2].replace(X," ").trim();return M[0]})(r);C[i]=w(o?{["@keyframes "+i]:f}:f,t?"":"."+i)}let u=t&&C.g?C.g:null;return t&&(C.g=C[i]),((f,m,g,S)=>{S?m.data=m.data.replace(S,f):m.data.indexOf(f)===-1&&(m.data=g?f+m.data:m.data+f)})(C[i],e,n,u),i},Oe=(r,e,t)=>r.reduce((n,o,s)=>{let i=e[s];if(i&&i.call){let u=i(t),f=u&&u.props&&u.props.className||/^go/.test(u)&&u;i=f?"."+f:u&&typeof u=="object"?u.props?"":w(u,""):u===!1?"":u}return n+o+(i??"")},"");function j(r){let e=this||{},t=r.call?r(e.p):r;return _e(t.unshift?t.raw?Oe(t,[].slice.call(arguments,1),e.p):t.reduce((n,o)=>Object.assign(n,o&&o.call?o(e.p):o),{}):t,Z(e.target),e.g,e.o,e.k)}var Q,R,P,Ie=j.bind({g:1}),Ne=j.bind({k:1});function ke(r,e,t,n){w.p=e,Q=r,R=t,P=n}function je(r,e){let t=this||{};return function(){let n=arguments;function o(s,i){let u=Object.assign({},s),f=u.className||o.className;t.p=Object.assign({theme:R&&R()},u),t.o=/ *go\d+/.test(f),u.className=j.apply(t,n)+(f?" "+f:""),e&&(u.ref=i);let m=r;return r[0]&&(m=u.as||r,delete u.as),P&&m[0]&&P(u),Q(m,u)}return e?e(o):o}}var ee={css:j,extractCss:Me,glob:Ie,keyframes:Ne,setup:ke,styled:je};var te=function(){"use strict";let r=new Set,e={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:A,afterNodeAdded:A,beforeNodeMorphed:A,afterNodeMorphed:A,beforeNodeRemoved:A,afterNodeRemoved:A,beforeAttributeUpdated:A},head:{style:"merge",shouldPreserve:function(l){return l.getAttribute("im-preserve")==="true"},shouldReAppend:function(l){return l.getAttribute("im-re-append")==="true"},shouldRemove:A,afterHeadMorphed:A}};function t(l,c,a={}){l instanceof Document&&(l=l.documentElement),typeof c=="string"&&(c=pe(c));let d=me(c),h=ue(l,d,a);return n(l,d,h)}function n(l,c,a){if(a.head.block){let d=l.querySelector("head"),h=c.querySelector("head");if(d&&h){let p=S(h,d,a);Promise.all(p).then(function(){n(l,c,Object.assign(a,{head:{block:!1,ignore:!0}}))});return}}if(a.morphStyle==="innerHTML")return i(c,l,a),l.children;if(a.morphStyle==="outerHTML"||a.morphStyle==null){let d=ye(c,l,a),h=d?.previousSibling,p=d?.nextSibling,y=s(l,d,a);return d?be(h,y,p):[]}else throw"Do not understand how to morph style "+a.morphStyle}function o(l,c){return c.ignoreActiveValue&&l===document.activeElement&&l!==document.body}function s(l,c,a){if(!(a.ignoreActive&&l===document.activeElement))return c==null?a.callbacks.beforeNodeRemoved(l)===!1?l:(l.remove(),a.callbacks.afterNodeRemoved(l),null):k(l,c)?(a.callbacks.beforeNodeMorphed(l,c)===!1||(l instanceof HTMLHeadElement&&a.head.ignore||(l instanceof HTMLHeadElement&&a.head.style!=="morph"?S(c,l,a):(f(c,l,a),o(l,a)||i(c,l,a))),a.callbacks.afterNodeMorphed(l,c)),l):a.callbacks.beforeNodeRemoved(l)===!1||a.callbacks.beforeNodeAdded(c)===!1?l:(l.parentElement.replaceChild(c,l),a.callbacks.afterNodeAdded(c),a.callbacks.afterNodeRemoved(l),c)}function i(l,c,a){let d=l.firstChild,h=c.firstChild,p;for(;d;){if(p=d,d=p.nextSibling,h==null){if(a.callbacks.beforeNodeAdded(p)===!1)return;c.appendChild(p),a.callbacks.afterNodeAdded(p),F(a,p);continue}if(W(p,h,a)){s(h,p,a),h=h.nextSibling,F(a,p);continue}let y=de(l,c,p,h,a);if(y){h=V(h,y,a),s(y,p,a),F(a,p);continue}let z=he(l,c,p,h,a);if(z){h=V(h,z,a),s(z,p,a),F(a,p);continue}if(a.callbacks.beforeNodeAdded(p)===!1)return;c.insertBefore(p,h),a.callbacks.afterNodeAdded(p),F(a,p)}for(;h!==null;){let y=h;h=h.nextSibling,U(y,a)}}function u(l,c,a,d){return l==="value"&&d.ignoreActiveValue&&c===document.activeElement?!0:d.callbacks.beforeAttributeUpdated(l,c,a)===!1}function f(l,c,a){let d=l.nodeType;if(d===1){let h=l.attributes,p=c.attributes;for(let y of h)if(!u(y.name,c,"update",a))try{c.getAttribute(y.name)!==y.value&&c.setAttribute(y.name,y.value)}catch(z){console.error("Error setting attribute:",{badNode:c,badAttribute:y,error:z.message})}for(let y=p.length-1;0<=y;y--){let z=p[y];u(z.name,c,"remove",a)||l.hasAttribute(z.name)||c.removeAttribute(z.name)}}(d===8||d===3)&&c.nodeValue!==l.nodeValue&&(c.nodeValue=l.nodeValue),o(c,a)||g(l,c,a)}function m(l,c,a,d){if(l[a]!==c[a]){let h=u(a,c,"update",d);h||(c[a]=l[a]),l[a]?h||c.setAttribute(a,l[a]):u(a,c,"remove",d)||c.removeAttribute(a)}}function g(l,c,a){if(l instanceof HTMLInputElement&&c instanceof HTMLInputElement&&l.type!=="file"){let d=l.value,h=c.value;m(l,c,"checked",a),m(l,c,"disabled",a),l.hasAttribute("value")?d!==h&&(u("value",c,"update",a)||(c.setAttribute("value",d),c.value=d)):u("value",c,"remove",a)||(c.value="",c.removeAttribute("value"))}else if(l instanceof HTMLOptionElement)m(l,c,"selected",a);else if(l instanceof HTMLTextAreaElement&&c instanceof HTMLTextAreaElement){let d=l.value,h=c.value;if(u("value",c,"update",a))return;d!==h&&(c.value=d),c.firstChild&&c.firstChild.nodeValue!==d&&(c.firstChild.nodeValue=d)}}function S(l,c,a){let d=[],h=[],p=[],y=[],z=a.head.style,L=new Map;for(let v of l.children)L.set(v.outerHTML,v);for(let v of c.children){let E=L.has(v.outerHTML),I=a.head.shouldReAppend(v),H=a.head.shouldPreserve(v);E||H?I?h.push(v):(L.delete(v.outerHTML),p.push(v)):z==="append"?I&&(h.push(v),y.push(v)):a.head.shouldRemove(v)!==!1&&h.push(v)}y.push(...L.values());let J=[];for(let v of y){let E=document.createRange().createContextualFragment(v.outerHTML).firstChild;if(a.callbacks.beforeNodeAdded(E)!==!1){if(E.href||E.src){let I=null,H=new Promise(function(Ee){I=Ee});E.addEventListener("load",function(){I()}),J.push(H)}c.appendChild(E),a.callbacks.afterNodeAdded(E),d.push(E)}}for(let v of h)a.callbacks.beforeNodeRemoved(v)!==!1&&(c.removeChild(v),a.callbacks.afterNodeRemoved(v));return a.head.afterHeadMorphed(c,{added:d,kept:p,removed:h}),J}function M(){}function A(){}function fe(l){let c={};return Object.assign(c,e),Object.assign(c,l),c.callbacks={},Object.assign(c.callbacks,e.callbacks),Object.assign(c.callbacks,l.callbacks),c.head={},Object.assign(c.head,e.head),Object.assign(c.head,l.head),c}function ue(l,c,a){return a=fe(a),{target:l,newContent:c,config:a,morphStyle:a.morphStyle,ignoreActive:a.ignoreActive,ignoreActiveValue:a.ignoreActiveValue,idMap:Se(l,c),deadIds:new Set,callbacks:a.callbacks,head:a.head}}function W(l,c,a){return l==null||c==null?!1:l.nodeType===c.nodeType&&l.tagName===c.tagName?l.id!==""&&l.id===c.id?!0:O(a,l,c)>0:!1}function k(l,c){return l==null||c==null?!1:l.nodeType===c.nodeType&&l.tagName===c.tagName}function V(l,c,a){for(;l!==c;){let d=l;l=l.nextSibling,U(d,a)}return F(a,c),c.nextSibling}function de(l,c,a,d,h){let p=O(h,a,c),y=null;if(p>0){let z=d,L=0;for(;z!=null;){if(W(a,z,h))return z;if(L+=O(h,z,l),L>p)return null;z=z.nextSibling}}return y}function he(l,c,a,d,h){let p=d,y=a.nextSibling,z=0;for(;p!=null;){if(O(h,p,l)>0)return null;if(k(a,p))return p;if(k(y,p)&&(z++,y=y.nextSibling,z>=2))return null;p=p.nextSibling}return p}function pe(l){let c=new DOMParser,a=l.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(a.match(/<\/html>/)||a.match(/<\/head>/)||a.match(/<\/body>/)){let d=c.parseFromString(l,"text/html");if(a.match(/<\/html>/))return d.generatedByIdiomorph=!0,d;{let h=d.firstChild;return h?(h.generatedByIdiomorph=!0,h):null}}else{let h=c.parseFromString("<body><template>"+l+"</template></body>","text/html").body.querySelector("template").content;return h.generatedByIdiomorph=!0,h}}function me(l){if(l==null)return document.createElement("div");if(l.generatedByIdiomorph)return l;if(l instanceof Node){let c=document.createElement("div");return c.append(l),c}else{let c=document.createElement("div");for(let a of[...l])c.append(a);return c}}function be(l,c,a){let d=[],h=[];for(;l!=null;)d.push(l),l=l.previousSibling;for(;d.length>0;){let p=d.pop();h.push(p),c.parentElement.insertBefore(p,c)}for(h.push(c);a!=null;)d.push(a),h.push(a),a=a.nextSibling;for(;d.length>0;)c.parentElement.insertBefore(d.pop(),c.nextSibling);return h}function ye(l,c,a){let d;d=l.firstChild;let h=d,p=0;for(;d;){let y=ge(d,c,a);y>p&&(h=d,p=y),d=d.nextSibling}return h}function ge(l,c,a){return k(l,c)?.5+O(a,l,c):0}function U(l,c){F(c,l),c.callbacks.beforeNodeRemoved(l)!==!1&&(l.remove(),c.callbacks.afterNodeRemoved(l))}function ze(l,c){return!l.deadIds.has(c)}function ve(l,c,a){return(l.idMap.get(a)||r).has(c)}function F(l,c){let a=l.idMap.get(c)||r;for(let d of a)l.deadIds.add(d)}function O(l,c,a){let d=l.idMap.get(c)||r,h=0;for(let p of d)ze(l,p)&&ve(l,p,a)&&++h;return h}function K(l,c){let a=l.parentElement,d=l.querySelectorAll("[id]");for(let h of d){let p=h;for(;p!==a&&p!=null;){let y=c.get(p);y==null&&(y=new Set,c.set(p,y)),y.add(h.id),p=p.parentElement}}}function Se(l,c){let a=new Map;return K(l,a),K(c,a),a}return{morph:t,defaults:e}}();var xe=r=>{let e=r.split(/(<\/?[^>]+>)/g).map(o=>o.trim()).filter(o=>o),t=0,n=[];for(let o=0;o<e.length;o++){let s=e[o],i=e[o+1],u=e[o+2];if(s.startsWith("<"))if(!s.startsWith("</")&&!s.endsWith("/>")&&i&&!i.startsWith("<")&&u&&u.startsWith("</")){let f=Math.max(0,t);n.push(" ".repeat(f)+s+i+u),o+=2}else if(s.startsWith("</")){t--;let f=Math.max(0,t);n.push(" ".repeat(f)+s)}else if(s.endsWith("/>")||s.includes(" />")){let f=Math.max(0,t);n.push(" ".repeat(f)+s)}else{let f=Math.max(0,t);n.push(" ".repeat(f)+s),t++}else if(s){let f=Math.max(0,t);n.push(" ".repeat(f)+s)}}return n.join(`
9
- `)},q=(()=>{let r=[],e=[],t=0;document.addEventListener("keydown",s=>{if(s.key==="Escape"){s.preventDefault();let i=document.getElementById("dump-dialog"),u=document.getElementById("log-reopen-button");i?(i.remove(),localStorage.setItem("_LOG_CLOSED","true"),n()):u&&(u.remove(),localStorage.setItem("_LOG_CLOSED","false"),o())}});let n=()=>{let s=document.getElementById("log-reopen-button");s||(s=document.body.appendChild(document.createElement("button")),s.id="log-reopen-button",s.innerHTML='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:middle;margin-right:4px"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>LOG',s.style.cssText="position:fixed; top: 10px; right: 10px;padding:10px 20px;background:#ff3333;color:#fff;border:none;cursor:pointer;font:14px/1.4 monospace;z-index:2147483647;border-radius:8px;display:flex;align-items:center;opacity:1;visibility:visible;box-shadow:0 4px 12px rgba(255,51,51,0.3)",s.onclick=()=>{s.remove(),localStorage.setItem("_LOG_CLOSED","false"),o()})},o=()=>{let s=document.getElementById("dump-dialog");if(!s){s=document.body.appendChild(document.createElement("div")),s.id="dump-dialog";let f=window.pageYOffset||document.documentElement.scrollTop;s.style.cssText="position:absolute; top:"+(f+20)+"px; left: 20px; right:20px;background:#fff; border:1px solid #333; box-shadow:0 0 10px rgba(0,0,0,0.5);padding:20px; overflow:auto; z-index:2147483646; font:13px/1.4 monospace;white-space:pre; display:block; opacity:1; visibility:visible"}let i=parseInt(localStorage.getItem("_LOG_INDEX"));!isNaN(i)&&i>=0&&i<r.length?t=i:t=r.length-1;let u=()=>{let f=r.map((m,g)=>{let S="#f0f0f0";return g!==t&&(e[g]==="object"?S="#d6e3ef":e[g]==="array"&&(S="#d8d5ef")),`<button style="font-size: 14px; font-weight: 400; padding:2px 6px; margin: 0 2px 2px 0;cursor:pointer;background:${g===t?"#333":S};color:${g===t?"#fff":"#000"}" data-index="${g}">${g+1}</button>`}).join("");s.innerHTML='<div style="display:flex;flex-direction:column;height:100%"><div style="display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px"><div style="display:flex;flex-wrap:wrap;gap:4px;flex:1;margin-right:10px">'+f+'</div><button style="padding:4px 8px;cursor:pointer;flex-shrink:0">&times;</button></div><xmp style="font-family:monospace;flex:1;overflow:auto;margin:0;padding:0;color:#000;background:#fff;font-size:14px;line-height:22px">'+r[t]+"</xmp></div>",s.querySelector('button[style*="flex-shrink:0"]').onclick=()=>{s.remove(),localStorage.setItem("_LOG_CLOSED","true"),n()},s.querySelectorAll("button[data-index]").forEach(m=>{m.onclick=()=>{t=parseInt(m.dataset.index),localStorage.setItem("_LOG_INDEX",t),u()}})};u()};return s=>{if(!document.body){window.requestAnimationFrame(()=>q(s));return}s instanceof Node&&(s=xe(s.outerHTML));let i=typeof s;s===void 0&&(s="undefined"),s===null&&(s="null"),Array.isArray(s)?i="array":typeof s=="object"&&s!==null&&(i="object"),typeof s!="string"&&(s=JSON.stringify(s,(f,m)=>typeof m=="function"?String(m):m,2).replaceAll("<","&lt;")),s=s.trim(),r.push(s+`
7
+ Template source: ${n}`,console.error(d)}}}catch(i){return i.message=`FEZ template compile error: ${i.message}Template source:
8
+ ${n}`,console.error(i),()=>Fez.error("Template Compile Error",!0)}}var x=class{static getProps(e,t){let s={};if(e.props)return e.props;for(let n of e.attributes)s[n.name]=n.value;for(let[n,i]of Object.entries(s))if([":"].includes(n[0])){delete s[n];try{let o=new Function(`return (${i})`).bind(t)();s[n.replace(/[\:_]/,"")]=o}catch(o){console.error(`Fez: Error evaluating attribute ${n}="${i}" for ${e.tagName}: ${o.message}`)}}if(s["data-props"]){let n=s["data-props"];if(typeof n=="object")return n;n[0]!="{"&&(n=decodeURIComponent(n));try{s=JSON.parse(n)}catch(i){console.error(`Fez: Invalid JSON in data-props for ${e.tagName}: ${i.message}`)}}else if(s["data-json-template"]){let n=t.previousSibling?.textContent;if(n)try{s=JSON.parse(n),t.previousSibling.remove()}catch(i){console.error(`Fez: Invalid JSON in template for ${e.tagName}: ${i.message}`)}}return s}static formData(e){let t=e.closest("form")||e.querySelector("form");if(!t)return Fez.log("No form found for formData()"),{};let s=new FormData(t),n={};return s.forEach((i,o)=>{n[o]=i}),n}static nodeName="div";constructor(){}n=D;get fezHtmlRoot(){return`Fez(${this.UID}).`}get isConnected(){return this.root?.isConnected?!0:(this.fezOnDestroy(),!1)}prop(e){let t=this.oldRoot[e]||this.props[e];return typeof t=="function"&&(t=t.bind(this.root)),t}copy(){for(let e of Array.from(arguments)){let t=this.props[e];if(t!==void 0){if(e=="class"){let s=this.root.getAttribute(e,t);s&&(t=[s,t].join(" "))}(e=="style"||!this.root[e])&&(typeof t=="string"?this.root.setAttribute(e,t):this.root[e]=t)}}}fezOnDestroy(){this._onDestroyCallbacks&&(this._onDestroyCallbacks.forEach(e=>{try{e()}catch(t){console.error("Fez: Error in cleanup callback:",t)}}),this._onDestroyCallbacks=[]),this.onDestroy(),this.onDestroy=()=>{},this.root&&(this.root.fez=void 0),this.root=void 0}addOnDestroy(e){this._onDestroyCallbacks=this._onDestroyCallbacks||[],this._onDestroyCallbacks.push(e)}on(e,t,s=200){this._eventHandlers=this._eventHandlers||{},this._eventHandlers[e]&&window.removeEventListener(e,this._eventHandlers[e]);let n=Fez.throttle(()=>{this.isConnected&&t.call(this)},s);this._eventHandlers[e]=n,window.addEventListener(e,n),this.addOnDestroy(()=>{window.removeEventListener(e,n),delete this._eventHandlers[e]})}onWindowResize(e,t){this.on("resize",e,t),e()}onWindowScroll(e,t){this.on("scroll",e,t),e()}onElementResize(e,t,s=200){let n=Fez.throttle(()=>{this.isConnected&&t.call(this,e.getBoundingClientRect(),e)},s),i=new ResizeObserver(n);i.observe(e),t.call(this,e.getBoundingClientRect(),e),this.addOnDestroy(()=>{i.disconnect()})}slot(e,t){t||=document.createElement("template");let s=t.nodeName=="SLOT";for(;e.firstChild;)s?t.parentNode.insertBefore(e.lastChild,t.nextSibling):t.appendChild(e.firstChild);return s?t.parentNode.removeChild(t):e.innerHTML="",t}setStyle(e,t){this.root.style.setProperty(e,t)}connect(){}onMount(){}beforeRender(){}afterRender(){}onDestroy(){}onStateChange(){}onGlobalStateChange(){}publish(e,...t){let s=i=>{if(Fez._subs&&Fez._subs[e]){let o=Fez._subs[e].find(([f])=>f===i);if(o)return o[1].bind(i)(...t),!0}return!1};if(s(this))return!0;let n=this.root.parentElement;for(;n;){if(n.fez&&s(n.fez))return!0;n=n.parentElement}return!1}fezBlocks={};parseHtml(e){let t=this.fezHtmlRoot.replaceAll('"',"&quot;");return e=e.replace(/([!'"\s;])fez\.(\w)/g,`$1${t}$2`).replace(/>\s+</g,"><"),e.trim()}nextTick(e,t){t?(this._nextTicks||={},this._nextTicks[t]||=window.requestAnimationFrame(()=>{e.bind(this)(),this._nextTicks[t]=null},t)):window.requestAnimationFrame(e.bind(this))}render(e){if(e||=this?.class?.fezHtmlFunc,!e||!this.root)return;this.beforeRender();let t=typeof this.class.nodeName=="function"?this.class.nodeName(this.root):this.class.nodeName,s=document.createElement(t||"div"),n;Array.isArray(e)?e[0]instanceof Node?e.forEach(i=>s.appendChild(i)):n=e.join(""):typeof e=="string"?n=N(e)(this):typeof e=="function"&&(n=e(this)),n&&(n=n.replace(/\s\w+="undefined"/g,""),s.innerHTML=this.parseHtml(n)),this.fezKeepNode(s),this.fezMemoization(s),Fez.morphdom(this.root,s),this.fezRenderPostProcess(),this.afterRender()}fezRenderPostProcess(){let e=(t,s)=>{this.root.querySelectorAll(`*[${t}]`).forEach(n=>{let i=n.getAttribute(t);n.removeAttribute(t),i&&s.bind(this)(i,n)})};e("fez-this",(t,s)=>{new Function("n",`this.${t} = n`).bind(this)(s)}),e("fez-use",(t,s)=>{if(t.includes("=>"))Fez.getFunction(t)(s);else if(t.includes("."))Fez.getFunction(t).bind(s)();else{let n=this[t];typeof n=="function"?n(s):console.error(`Fez error: "${t}" is not a function in ${this.fezName}`)}}),e("fez-class",(t,s)=>{let n=t.split(/\s+/),i=n.pop();n.forEach(o=>s.classList.add(o)),i&&setTimeout(()=>{s.classList.add(i)},1)}),e("fez-bind",(t,s)=>{if(["INPUT","SELECT","TEXTAREA"].includes(s.nodeName)){let n=new Function(`return this.${t}`).bind(this)(),i=s.type.toLowerCase()=="checkbox",o=["SELECT"].includes(s.nodeName)||i?"onchange":"onkeyup";s.setAttribute(o,`${this.fezHtmlRoot}${t} = this.${i?"checked":"value"}`),this.val(s,n)}else console.error(`Cant fez-bind="${t}" to ${s.nodeName} (needs INPUT, SELECT or TEXTAREA. Want to use fez-this?).`)}),this.root.querySelectorAll("*[disabled]").forEach(t=>{let s=t.getAttribute("disabled");["false"].includes(s)?t.removeAttribute("disabled"):t.setAttribute("disabled","true")})}fezKeepNode(e){e.querySelectorAll("[fez-keep]").forEach(t=>{let s=t.getAttribute("fez-keep"),n=this.root.querySelector(`[fez-keep="${s}"]`);if(n)t.parentNode.replaceChild(n,t);else if(s==="default-slot")if(t.getAttribute("hide")){this.state=null;let i=t.parentNode;Array.from(this.root.childNodes).forEach(o=>{i.insertBefore(o,t)}),t.remove()}else Array.from(this.root.childNodes).forEach(i=>{t.appendChild(i)})})}fezMemoization(e){let t=e.querySelector("[fez-memoize]:not(.fez)");if(!t)return;this.fezMemoStore||=new Map;let s=t.getAttribute("fez-memoize"),n=this.fezMemoStore.get(s);if(n)Fez.log(`Memoize restore ${this.fezName}: ${s}`),t.parentNode.replaceChild(n.cloneNode(!0),t);else{let i=this.root.querySelector("[fez-memoize]:not(.fez)");if(i){let o=i.getAttribute("fez-memoize");this.fezMemoStore.set(o,i.cloneNode(!0))}}}refresh(e){if(alert("NEEDS FIX and remove htmlTemplate"),e){let s=Fez.domRoot(this.class.htmlTemplate).querySelector(e).innerHTML;this.render(e,s)}else this.render()}setInterval(e,t,s){typeof e=="number"&&([t,e]=[e,t]),s||=Fez.fnv1(String(e)),this._setIntervalCache||={},clearInterval(this._setIntervalCache[s]);let n=setInterval(()=>{this.isConnected&&e()},t);return this._setIntervalCache[s]=n,this.addOnDestroy(()=>{clearInterval(n),delete this._setIntervalCache[s]}),n}find(e){return typeof e=="string"?this.root.querySelector(e):e}val(e,t){let s=this.find(e);if(s)if(["INPUT","TEXTAREA","SELECT"].includes(s.nodeName))if(typeof t<"u")s.type=="checkbox"?s.checked=!!t:s.value=t;else return s.value;else if(typeof t<"u")s.innerHTML=t;else return s.innerHTML}formData(e){return this.class.formData(e||this.root)}attr(e,t){return typeof t>"u"?this.root.getAttribute(e):(this.root.setAttribute(e,t),t)}childNodes(e){let t=Array.from(this.root.children);if(e){let s=document.createElement("div");s.style.display="none",document.body.appendChild(s),t.forEach(n=>s.appendChild(n)),t=Array.from(s.children).map(e),document.body.removeChild(s)}return t}subscribe(e,t){Fez._subs||={},Fez._subs[e]||=[],Fez._subs[e]=Fez._subs[e].filter(s=>s[0].isConnected),Fez._subs[e].push([this,t])}rootId(){return this.root.id||=`fez_${this.UID}`,this.root.id}fezRegister(){this.css&&(this.css=Fez.globalCss(this.css,{name:this.fezName,wrap:!0})),this.class.css&&(this.class.css=Fez.globalCss(this.class.css,{name:this.fezName})),this.state||=this.reactiveStore(),this.globalState=Fez.state.createProxy(this),this.fezRegisterBindMethods()}fezRegisterBindMethods(){Object.getOwnPropertyNames(Object.getPrototypeOf(this)).filter(t=>t!=="constructor"&&typeof this[t]=="function").forEach(t=>this[t]=this[t].bind(this))}dissolve(e){e&&(e.classList.add("fez"),e.classList.add(`fez-${this.fezName}`),e.fez=this,this.attr("id")&&e.setAttribute("id",this.attr("id")),this.root.innerHTML="",this.root.appendChild(e));let t=this.root,s=this.childNodes(),n=this.root.parentNode;return s.reverse().forEach(i=>n.insertBefore(i,t.nextSibling)),this.root.remove(),this.root=void 0,e&&(this.root=e),s}reactiveStore(e,t){e||={},t||=(n,i,o,f)=>{this.onStateChange(i,o,f),this.nextTick(this.render,"render")},t.bind(this);function s(n,i){return typeof n!="object"||n===null?n:new Proxy(n,{set(o,f,u,d){let b=Reflect.get(o,f,d);if(b!==u){typeof u=="object"&&u!==null&&(u=s(u,i));let E=Reflect.set(o,f,u,d);return i(o,f,u,b),E}return!0},get(o,f,u){let d=Reflect.get(o,f,u);return typeof d=="object"&&d!==null?s(d,i):d}})}return s(e,t)}};var Oe={data:""},Z=r=>typeof window=="object"?((r?r.querySelector("#_goober"):window._goober)||Object.assign((r||document.head).appendChild(document.createElement("style")),{innerHTML:" ",id:"_goober"})).firstChild:r||Oe,Ie=r=>{let e=Z(r),t=e.data;return e.data="",t},Ne=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,ke=/\/\*[^]*?\*\/| +/g,J=/\n+/g,T=(r,e)=>{let t="",s="",n="";for(let i in r){let o=r[i];i[0]=="@"?i[1]=="i"?t=i+" "+o+";":s+=i[1]=="f"?T(o,i):i+"{"+T(o,i[1]=="k"?"":e)+"}":typeof o=="object"?s+=T(o,e?e.replace(/([^,])+/g,f=>i.replace(/(^:.*)|([^,])+/g,u=>/&/.test(u)?u.replace(/&/g,f):f?f+" "+u:u)):i):o!=null&&(i=/^--/.test(i)?i:i.replace(/[A-Z]/g,"-$&").toLowerCase(),n+=T.p?T.p(i,o):i+":"+o+";")}return t+(e&&n?e+"{"+n+"}":n)+s},w={},Y=r=>{if(typeof r=="object"){let e="";for(let t in r)e+=t+Y(r[t]);return e}return r},_e=(r,e,t,s,n)=>{let i=Y(r),o=w[i]||(w[i]=(u=>{let d=0,b=11;for(;d<u.length;)b=101*b+u.charCodeAt(d++)>>>0;return"go"+b})(i));if(!w[o]){let u=i!==r?r:(d=>{let b,E,M=[{}];for(;b=Ne.exec(d.replace(ke,""));)b[4]?M.shift():b[3]?(E=b[3].replace(J," ").trim(),M.unshift(M[0][E]=M[0][E]||{})):M[0][b[1]]=b[2].replace(J," ").trim();return M[0]})(r);w[o]=T(n?{["@keyframes "+o]:u}:u,t?"":"."+o)}let f=t&&w.g?w.g:null;return t&&(w.g=w[o]),((u,d,b,E)=>{E?d.data=d.data.replace(E,u):d.data.indexOf(u)===-1&&(d.data=b?u+d.data:d.data+u)})(w[o],e,s,f),o},Re=(r,e,t)=>r.reduce((s,n,i)=>{let o=e[i];if(o&&o.call){let f=o(t),u=f&&f.props&&f.props.className||/^go/.test(f)&&f;o=u?"."+u:f&&typeof f=="object"?f.props?"":T(f,""):f===!1?"":f}return s+n+(o??"")},"");function _(r){let e=this||{},t=r.call?r(e.p):r;return _e(t.unshift?t.raw?Re(t,[].slice.call(arguments,1),e.p):t.reduce((s,n)=>Object.assign(s,n&&n.call?n(e.p):n),{}):t,Z(e.target),e.g,e.o,e.k)}var Q,H,B,je=_.bind({g:1}),De=_.bind({k:1});function He(r,e,t,s){T.p=e,Q=r,H=t,B=s}function Be(r,e){let t=this||{};return function(){let s=arguments;function n(i,o){let f=Object.assign({},i),u=f.className||n.className;t.p=Object.assign({theme:H&&H()},f),t.o=/ *go\d+/.test(u),f.className=_.apply(t,s)+(u?" "+u:""),e&&(f.ref=o);let d=r;return r[0]&&(d=f.as||r,delete f.as),B&&d[0]&&B(f),Q(d,f)}return e?e(n):n}}var ee={css:_,extractCss:Ie,glob:je,keyframes:De,setup:He,styled:Be};var te=function(){"use strict";let r=new Set,e={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:S,afterNodeAdded:S,beforeNodeMorphed:S,afterNodeMorphed:S,beforeNodeRemoved:S,afterNodeRemoved:S,beforeAttributeUpdated:S},head:{style:"merge",shouldPreserve:function(l){return l.getAttribute("im-preserve")==="true"},shouldReAppend:function(l){return l.getAttribute("im-re-append")==="true"},shouldRemove:S,afterHeadMorphed:S}};function t(l,c,a={}){l instanceof Document&&(l=l.documentElement),typeof c=="string"&&(c=ze(c));let p=ve(c),h=be(l,p,a);return s(l,p,h)}function s(l,c,a){if(a.head.block){let p=l.querySelector("head"),h=c.querySelector("head");if(p&&h){let m=E(h,p,a);Promise.all(m).then(function(){s(l,c,Object.assign(a,{head:{block:!1,ignore:!0}}))});return}}if(a.morphStyle==="innerHTML")return o(c,l,a),l.children;if(a.morphStyle==="outerHTML"||a.morphStyle==null){let p=Ae(c,l,a),h=p?.previousSibling,m=p?.nextSibling,y=i(l,p,a);return p?Ee(h,y,m):[]}else throw"Do not understand how to morph style "+a.morphStyle}function n(l,c){return c.ignoreActiveValue&&l===document.activeElement&&l!==document.body}function i(l,c,a){if(!(a.ignoreActive&&l===document.activeElement))return c==null?a.callbacks.beforeNodeRemoved(l)===!1?l:(l.remove(),a.callbacks.afterNodeRemoved(l),null):k(l,c)?(a.callbacks.beforeNodeMorphed(l,c)===!1||(l instanceof HTMLHeadElement&&a.head.ignore||(l instanceof HTMLHeadElement&&a.head.style!=="morph"?E(c,l,a):(u(c,l,a),n(l,a)||o(c,l,a))),a.callbacks.afterNodeMorphed(l,c)),l):a.callbacks.beforeNodeRemoved(l)===!1||a.callbacks.beforeNodeAdded(c)===!1?l:(l.parentElement.replaceChild(c,l),a.callbacks.afterNodeAdded(c),a.callbacks.afterNodeRemoved(l),c)}function o(l,c,a){let p=l.firstChild,h=c.firstChild,m;for(;p;){if(m=p,p=m.nextSibling,h==null){if(a.callbacks.beforeNodeAdded(m)===!1)return;c.appendChild(m),a.callbacks.afterNodeAdded(m),F(a,m);continue}if(W(m,h,a)){i(h,m,a),h=h.nextSibling,F(a,m);continue}let y=ye(l,c,m,h,a);if(y){h=V(h,y,a),i(y,m,a),F(a,m);continue}let z=ge(l,c,m,h,a);if(z){h=V(h,z,a),i(z,m,a),F(a,m);continue}if(a.callbacks.beforeNodeAdded(m)===!1)return;c.insertBefore(m,h),a.callbacks.afterNodeAdded(m),F(a,m)}for(;h!==null;){let y=h;h=h.nextSibling,U(y,a)}}function f(l,c,a,p){return l==="value"&&p.ignoreActiveValue&&c===document.activeElement?!0:p.callbacks.beforeAttributeUpdated(l,c,a)===!1}function u(l,c,a){let p=l.nodeType;if(p===1){let h=l.attributes,m=c.attributes;for(let y of h)if(!f(y.name,c,"update",a))try{c.getAttribute(y.name)!==y.value&&c.setAttribute(y.name,y.value)}catch(z){console.error("Error setting attribute:",{badNode:c,badAttribute:y,error:z.message})}for(let y=m.length-1;0<=y;y--){let z=m[y];f(z.name,c,"remove",a)||l.hasAttribute(z.name)||c.removeAttribute(z.name)}}(p===8||p===3)&&c.nodeValue!==l.nodeValue&&(c.nodeValue=l.nodeValue),n(c,a)||b(l,c,a)}function d(l,c,a,p){if(l[a]!==c[a]){let h=f(a,c,"update",p);h||(c[a]=l[a]),l[a]?h||c.setAttribute(a,l[a]):f(a,c,"remove",p)||c.removeAttribute(a)}}function b(l,c,a){if(l instanceof HTMLInputElement&&c instanceof HTMLInputElement&&l.type!=="file"){let p=l.value,h=c.value;d(l,c,"checked",a),d(l,c,"disabled",a),l.hasAttribute("value")?p!==h&&(f("value",c,"update",a)||(c.setAttribute("value",p),c.value=p)):f("value",c,"remove",a)||(c.value="",c.removeAttribute("value"))}else if(l instanceof HTMLOptionElement)d(l,c,"selected",a);else if(l instanceof HTMLTextAreaElement&&c instanceof HTMLTextAreaElement){let p=l.value,h=c.value;if(f("value",c,"update",a))return;p!==h&&(c.value=p),c.firstChild&&c.firstChild.nodeValue!==p&&(c.firstChild.nodeValue=p)}}function E(l,c,a){let p=[],h=[],m=[],y=[],z=a.head.style,L=new Map;for(let v of l.children)L.set(v.outerHTML,v);for(let v of c.children){let A=L.has(v.outerHTML),I=a.head.shouldReAppend(v),j=a.head.shouldPreserve(v);A||j?I?h.push(v):(L.delete(v.outerHTML),m.push(v)):z==="append"?I&&(h.push(v),y.push(v)):a.head.shouldRemove(v)!==!1&&h.push(v)}y.push(...L.values());let K=[];for(let v of y){let A=document.createRange().createContextualFragment(v.outerHTML).firstChild;if(a.callbacks.beforeNodeAdded(A)!==!1){if(A.href||A.src){let I=null,j=new Promise(function(Ce){I=Ce});A.addEventListener("load",function(){I()}),K.push(j)}c.appendChild(A),a.callbacks.afterNodeAdded(A),p.push(A)}}for(let v of h)a.callbacks.beforeNodeRemoved(v)!==!1&&(c.removeChild(v),a.callbacks.afterNodeRemoved(v));return a.head.afterHeadMorphed(c,{added:p,kept:m,removed:h}),K}function M(){}function S(){}function me(l){let c={};return Object.assign(c,e),Object.assign(c,l),c.callbacks={},Object.assign(c.callbacks,e.callbacks),Object.assign(c.callbacks,l.callbacks),c.head={},Object.assign(c.head,e.head),Object.assign(c.head,l.head),c}function be(l,c,a){return a=me(a),{target:l,newContent:c,config:a,morphStyle:a.morphStyle,ignoreActive:a.ignoreActive,ignoreActiveValue:a.ignoreActiveValue,idMap:$e(l,c),deadIds:new Set,callbacks:a.callbacks,head:a.head}}function W(l,c,a){return l==null||c==null?!1:l.nodeType===c.nodeType&&l.tagName===c.tagName?l.id!==""&&l.id===c.id?!0:O(a,l,c)>0:!1}function k(l,c){return l==null||c==null?!1:l.nodeType===c.nodeType&&l.tagName===c.tagName}function V(l,c,a){for(;l!==c;){let p=l;l=l.nextSibling,U(p,a)}return F(a,c),c.nextSibling}function ye(l,c,a,p,h){let m=O(h,a,c),y=null;if(m>0){let z=p,L=0;for(;z!=null;){if(W(a,z,h))return z;if(L+=O(h,z,l),L>m)return null;z=z.nextSibling}}return y}function ge(l,c,a,p,h){let m=p,y=a.nextSibling,z=0;for(;m!=null;){if(O(h,m,l)>0)return null;if(k(a,m))return m;if(k(y,m)&&(z++,y=y.nextSibling,z>=2))return null;m=m.nextSibling}return m}function ze(l){let c=new DOMParser,a=l.replace(/<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim,"");if(a.match(/<\/html>/)||a.match(/<\/head>/)||a.match(/<\/body>/)){let p=c.parseFromString(l,"text/html");if(a.match(/<\/html>/))return p.generatedByIdiomorph=!0,p;{let h=p.firstChild;return h?(h.generatedByIdiomorph=!0,h):null}}else{let h=c.parseFromString("<body><template>"+l+"</template></body>","text/html").body.querySelector("template").content;return h.generatedByIdiomorph=!0,h}}function ve(l){if(l==null)return document.createElement("div");if(l.generatedByIdiomorph)return l;if(l instanceof Node){let c=document.createElement("div");return c.append(l),c}else{let c=document.createElement("div");for(let a of[...l])c.append(a);return c}}function Ee(l,c,a){let p=[],h=[];for(;l!=null;)p.push(l),l=l.previousSibling;for(;p.length>0;){let m=p.pop();h.push(m),c.parentElement.insertBefore(m,c)}for(h.push(c);a!=null;)p.push(a),h.push(a),a=a.nextSibling;for(;p.length>0;)c.parentElement.insertBefore(p.pop(),c.nextSibling);return h}function Ae(l,c,a){let p;p=l.firstChild;let h=p,m=0;for(;p;){let y=Se(p,c,a);y>m&&(h=p,m=y),p=p.nextSibling}return h}function Se(l,c,a){return k(l,c)?.5+O(a,l,c):0}function U(l,c){F(c,l),c.callbacks.beforeNodeRemoved(l)!==!1&&(l.remove(),c.callbacks.afterNodeRemoved(l))}function we(l,c){return!l.deadIds.has(c)}function Te(l,c,a){return(l.idMap.get(a)||r).has(c)}function F(l,c){let a=l.idMap.get(c)||r;for(let p of a)l.deadIds.add(p)}function O(l,c,a){let p=l.idMap.get(c)||r,h=0;for(let m of p)we(l,m)&&Te(l,m,a)&&++h;return h}function X(l,c){let a=l.parentElement,p=l.querySelectorAll("[id]");for(let h of p){let m=h;for(;m!==a&&m!=null;){let y=c.get(m);y==null&&(y=new Set,c.set(m,y)),y.add(h.id),m=m.parentElement}}}function $e(l,c){let a=new Map;return X(l,a),X(c,a),a}return{morph:t,defaults:e}}();var Pe=r=>{let e=r.split(/(<\/?[^>]+>)/g).map(n=>n.trim()).filter(n=>n),t=0,s=[];for(let n=0;n<e.length;n++){let i=e[n],o=e[n+1],f=e[n+2];if(i.startsWith("<"))if(!i.startsWith("</")&&!i.endsWith("/>")&&o&&!o.startsWith("<")&&f&&f.startsWith("</")){let u=Math.max(0,t);s.push(" ".repeat(u)+i+o+f),n+=2}else if(i.startsWith("</")){t--;let u=Math.max(0,t);s.push(" ".repeat(u)+i)}else if(i.endsWith("/>")||i.includes(" />")){let u=Math.max(0,t);s.push(" ".repeat(u)+i)}else{let u=Math.max(0,t);s.push(" ".repeat(u)+i),t++}else if(i){let u=Math.max(0,t);s.push(" ".repeat(u)+i)}}return s.join(`
9
+ `)},P=(()=>{let r=[],e=[],t=0,s=null;document.addEventListener("keydown",o=>{if(o.key==="Escape"){o.preventDefault();let f=document.getElementById("dump-dialog"),u=document.getElementById("log-reopen-button");f?(f.remove(),n()):u&&(u.remove(),i())}else(o.key==="ArrowLeft"||o.key==="ArrowRight"||o.key==="ArrowUp"||o.key==="ArrowDown")&&document.getElementById("dump-dialog")&&r.length>0&&(o.preventDefault(),o.key==="ArrowLeft"&&t>0?(t--,localStorage.setItem("_LOG_INDEX",t),s()):o.key==="ArrowRight"&&t<r.length-1?(t++,localStorage.setItem("_LOG_INDEX",t),s()):o.key==="ArrowUp"&&t>0?(t=Math.max(0,t-5),localStorage.setItem("_LOG_INDEX",t),s()):o.key==="ArrowDown"&&t<r.length-1&&(t=Math.min(r.length-1,t+5),localStorage.setItem("_LOG_INDEX",t),s()))});let n=()=>{let o=document.getElementById("log-reopen-button");o||(o=document.body.appendChild(document.createElement("button")),o.id="log-reopen-button",o.innerHTML='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:middle;margin-right:4px"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>LOG',o.style.cssText="position:fixed; top: 10px; right: 10px;padding:10px 20px;background:#ff3333;color:#fff;border:none;cursor:pointer;font:14px/1.4 monospace;z-index:2147483647;border-radius:8px;display:flex;align-items:center;opacity:1;visibility:visible;box-shadow:0 4px 12px rgba(255,51,51,0.3)",o.onclick=()=>{o.remove(),i()})},i=()=>{let o=document.getElementById("dump-dialog");if(!o){o=document.body.appendChild(document.createElement("div")),o.id="dump-dialog";let u=window.pageYOffset||document.documentElement.scrollTop;o.style.cssText="position:absolute; top:"+(u+20)+"px; left: 20px; right:20px;background:#fff; border:1px solid #333; box-shadow:0 0 10px rgba(0,0,0,0.5);padding:20px; overflow:auto; z-index:2147483646; font:13px/1.4 monospace;white-space:pre; display:block; opacity:1; visibility:visible"}let f=parseInt(localStorage.getItem("_LOG_INDEX"));!isNaN(f)&&f>=0&&f<r.length?t=f:t=r.length-1,s=()=>{let u=r.map((d,b)=>{let E="#f0f0f0";return b!==t&&(e[b]==="object"?E="#d6e3ef":e[b]==="array"&&(E="#d8d5ef")),`<button style="font-size: 14px; font-weight: 400; padding:2px 6px; margin: 0 2px 2px 0;cursor:pointer;background:${b===t?"#333":E};color:${b===t?"#fff":"#000"}" data-index="${b}">${b+1}</button>`}).join("");o.innerHTML='<div style="display:flex;flex-direction:column;height:100%"><div style="display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px"><div style="display:flex;flex-wrap:wrap;gap:4px;flex:1;margin-right:10px">'+u+'</div><button style="padding:4px 8px;cursor:pointer;flex-shrink:0">&times;</button></div><xmp style="font-family:monospace;flex:1;overflow:auto;margin:0;padding:0;color:#000;background:#fff;font-size:14px;line-height:22px">'+r[t]+"</xmp></div>",o.querySelector('button[style*="flex-shrink:0"]').onclick=()=>{o.remove(),n()},o.querySelectorAll("button[data-index]").forEach(d=>{d.onclick=()=>{t=parseInt(d.dataset.index),localStorage.setItem("_LOG_INDEX",t),s()}})},s()};return o=>{if(!document.body){window.requestAnimationFrame(()=>P(o));return}let f=typeof o;o instanceof Node&&(o.nodeType===Node.TEXT_NODE?o=o.textContent||String(o):o=Pe(o.outerHTML)),o===void 0&&(o="undefined"),o===null&&(o="null"),Array.isArray(o)?f="array":typeof o=="object"&&o!==null&&(f="object"),typeof o!="string"&&(o=JSON.stringify(o,(d,b)=>typeof b=="function"?String(b):b,2).replaceAll("<","&lt;")),o=o.trim(),r.push(o+`
10
10
 
11
- type: ${i}`),e.push(i),localStorage.getItem("_LOG_CLOSED")==="true"?n():o()}})();typeof window<"u"&&!window.LOG&&(window.LOG=q);var re=q;function B(r,e){let t=globalThis.window?.Fez||globalThis.Fez;if(r.includes("-")||console.error(`Fez: Invalid custom element name "${r}". Custom element names must contain a dash (e.g., 'my-element', 'ui-button').`),e.fezHtmlRoot)e.html&&(e.html=ne(e.html));else{let n=new e,o=class extends _{};if(Object.getOwnPropertyNames(n).concat(Object.getOwnPropertyNames(e.prototype)).filter(i=>!["constructor","prototype"].includes(i)).forEach(i=>o.prototype[i]=n[i]),n.GLOBAL&&(o.fezGlobal=n.GLOBAL),n.CSS&&(o.css=n.CSS),n.HTML&&(o.html=ne(n.HTML)),n.NAME&&(o.nodeName=n.NAME),n.GLOBAL){let i=()=>document.body.appendChild(document.createElement(r));document.readyState==="loading"?document.addEventListener("DOMContentLoaded",i):i()}e=o,t.log(`${r} compiled`)}e.html&&(e.html=e.html.replace(/<slot\s*\/>|<slot\s*>\s*<\/slot>/g,()=>{let n=e.SLOT||"div";return`<${n} class="fez-slot" fez-keep="default-slot"></${n}>`}),e.fezHtmlFunc=N(e.html)),e.css&&(e.css=t.globalCss(e.css,{name:r})),t.classes[r]=e,He(r,e)}function He(r,e){let t=globalThis.window?.Fez||globalThis.Fez;customElements.get(r)||customElements.define(r,class extends HTMLElement{connectedCallback(){t._pendingConnections||(t._pendingConnections=[],t._batchScheduled=!1),t._pendingConnections.push({name:r,node:this}),t._batchScheduled||(t._batchScheduled=!0,Promise.resolve().then(()=>{let n=t._pendingConnections.slice();t._pendingConnections=[],t._batchScheduled=!1,n.sort((o,s)=>o.node.contains(s.node)?-1:s.node.contains(o.node)?1:0),n.forEach(({name:o,node:s})=>{s.isConnected&&s.parentNode&&De(o,s)})}))}})}function ne(r){let e=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]);return r.replace(/<([a-z-]+)\b([^>]*)\/>/g,(t,n,o)=>e.has(n)?t:`<${n}${o}></${n}>`)}function De(r,e){let t=Fez.classes[r],n=e.parentNode;if(e.isConnected){let o=typeof t.nodeName=="function"?t.nodeName(e):t.nodeName,s=document.createElement(o||"div");s.classList.add("fez"),s.classList.add(`fez-${r}`),n.replaceChild(s,e);let i=new t;if(i.UID=++Fez.instanceCount,Fez.instances.set(i.UID,i),i.oldRoot=e,i.fezName=r,i.root=s,i.props=t.getProps(e,s),i.class=t,i.slot(e,s),s.fez=i,t.fezGlobal&&t.fezGlobal!=!0&&(window[t.fezGlobal]=i),window.$&&(i.$root=$(s)),i.props.id&&s.setAttribute("id",i.props.id),i.fezRegister(),(i.init||i.created||i.connect).bind(i)(i.props),i.render(),i.firstRender=!0,i.onMount(i.props),i.onSubmit){let u=i.root.nodeName=="FORM"?i.root:i.find("form");u.onsubmit=f=>{f.preventDefault(),i.onSubmit(i.formData())}}if(i.onPropsChange){Re.observe(s,{attributes:!0});for(let[u,f]of Object.entries(i.props))i.onPropsChange(u,f)}}}var Re=new MutationObserver((r,e)=>{for(let t of r)if(t.type==="attributes"){let n=t.target.fez,o=t.attributeName,s=t.target.getAttribute(o);n&&(n.props[o]=s,n.onPropsChange(o,s))}});var Pe=r=>{let e={script:"",style:"",html:"",head:""},t=r.split(`
12
- `),n=[],o="";for(var s of t)s=s.trim(),s.startsWith("<script")&&!e.script&&o!="head"?o="script":s.startsWith("<head")&&!e.script?o="head":s.startsWith("<style")?o="style":s.endsWith("<\/script>")&&o==="script"&&!e.script?(e.script=n.join(`
13
- `),n=[],o=null):s.endsWith("</style>")&&o==="style"?(e.style=n.join(`
14
- `),n=[],o=null):(s.endsWith("</head>")||s.endsWith("</header>"))&&o==="head"?(e.head=n.join(`
15
- `),n=[],o=null):o?n.push(s):e.html+=s+`
16
- `;if(e.head){let u=Fez.domRoot(e.head);Array.from(u.children).forEach(f=>{if(f.tagName==="SCRIPT"){let m=document.createElement("script");Array.from(f.attributes).forEach(g=>{m.setAttribute(g.name,g.value)}),m.type||="text/javascript",f.src?document.head.appendChild(m):(m.type.includes("javascript")||m.type=="module")&&(m.textContent=f.textContent,document.head.appendChild(m))}else document.head.appendChild(f.cloneNode(!0))})}let i=e.script;return/class\s+\{/.test(i)||(i=`class {
17
- ${i}
18
- }`),String(e.style).includes(":")&&(Object.entries(Fez._styleMacros).forEach(([u,f])=>{e.style=e.style.replaceAll(`:${u} `,`${f} `)}),e.style=e.style.includes(":fez")||/(?:^|\s)body\s*\{/.test(e.style)?e.style:`:fez {
11
+ type: ${f}`),e.push(f),!!document.getElementById("dump-dialog")?(t=r.length-1,localStorage.setItem("_LOG_INDEX",t),s&&s()):i()}})();typeof window<"u"&&!window.LOG&&(window.LOG=P);var re=P;var se=()=>{let r=parseInt(window.location.port)||80;if(!(Fez.DEV===!0||r>2999&&Fez.DEV!==!1))return;let e=document.querySelectorAll(".fez-highlight-overlay");if(e.length>0){e.forEach(s=>s.remove());return}document.querySelectorAll(".fez, .svelte").forEach(s=>{let n=null,i=null;if(s.classList.contains("fez")&&s.fez&&s.fez.fezName?(n=s.fez.fezName,i="fez"):s.classList.contains("svelte")&&s.svelte&&s.svelte.svelteName&&(n=s.svelte.svelteName,i="svelte"),n){let o=document.createElement("div");o.className="fez-highlight-overlay";let f=s.getBoundingClientRect(),u=window.pageYOffset||document.documentElement.scrollTop,d=window.pageXOffset||document.documentElement.scrollLeft;o.style.cssText=`
12
+ position: absolute;
13
+ top: ${f.top+u}px;
14
+ left: ${f.left+d}px;
15
+ width: ${f.width}px;
16
+ height: ${f.height}px;
17
+ border: 1px solid ${i==="svelte"?"blue":"red"};
18
+ pointer-events: none;
19
+ z-index: 9999;
20
+ `;let b=document.createElement("div");b.textContent=n,b.style.cssText=`
21
+ position: absolute;
22
+ top: -20px;
23
+ left: 0;
24
+ background: ${i==="svelte"?"blue":"red"};
25
+ color: white;
26
+ padding: 4px 6px 2px 6px;
27
+ font-size: 14px;
28
+ font-family: monospace;
29
+ line-height: 1;
30
+ white-space: nowrap;
31
+ cursor: pointer;
32
+ pointer-events: auto;
33
+ text-transform: uppercase;
34
+ `,b.addEventListener("click",E=>{E.stopPropagation(),Fez.dump(s)}),o.appendChild(b),document.body.appendChild(o)}})};document.addEventListener("keydown",r=>{(r.ctrlKey||r.metaKey)&&r.key==="e"&&(r.target.closest("form")||(r.preventDefault(),se()))});var ne=se;var qe=new MutationObserver((r,e)=>{for(let t of r)if(t.type==="attributes"){let s=t.target.fez,n=t.attributeName,i=t.target.getAttribute(n);s&&(s.props[n]=i,s.onPropsChange(n,i))}});function q(r,e){let t=globalThis.window?.Fez||globalThis.Fez;if(r.includes("-")||console.error(`Fez: Invalid custom element name "${r}". Custom element names must contain a dash (e.g., 'my-element', 'ui-button').`),e.fezHtmlRoot)e.html&&(e.html=oe(e.html));else{let s=new e,n=class extends x{};Object.getOwnPropertyNames(s).concat(Object.getOwnPropertyNames(e.prototype)).filter(o=>!["constructor","prototype"].includes(o)).forEach(o=>n.prototype[o]=s[o]),s.FAST&&(n.FAST=s.FAST),s.GLOBAL&&(n.GLOBAL=s.GLOBAL),s.CSS&&(n.css=s.CSS),s.HTML&&(n.html=oe(s.HTML)),s.NAME&&(n.nodeName=s.NAME),s.GLOBAL&&document.body.appendChild(document.createElement(r)),e=n,t.log(`${r} compiled`)}if(e.html){let s=e.SLOT||"div";e.html=e.html.replace("<slot",`<${s} class="fez-slot" fez-keep="default-slot"`).replace("</slot>",`</${s}>`),e.fezHtmlFunc=N(e.html)}e.css&&(e.css=t.globalCss(e.css,{name:r})),t.classes[r]=e,customElements.get(r)||customElements.define(r,class extends HTMLElement{connectedCallback(){Ge(this,e)?ie(r,this):requestAnimationFrame(()=>{ie(r,this)})}})}function Ge(r,e){let t=r.getAttribute("fez-fast");var s=typeof e.FAST=="function"?e.FAST(r):e.FAST;return t=="false"?!1:t||s}function oe(r){let e=new Set(["area","base","br","col","embed","hr","img","input","link","meta","source","track","wbr"]);return r.replace(/<([a-z-]+)\b([^>]*)\/>/g,(t,s,n)=>e.has(s)?t:`<${s}${n}></${s}>`)}function ie(r,e){let t=Fez.classes[r],s=e.parentNode;if(e.isConnected){let n=typeof t.nodeName=="function"?t.nodeName(e):t.nodeName,i=document.createElement(n||"div");i.classList.add("fez"),i.classList.add(`fez-${r}`),s.replaceChild(i,e);let o=new t;if(o.UID=++Fez.instanceCount,Fez.instances.set(o.UID,o),o.oldRoot=e,o.fezName=r,o.root=i,o.props=t.getProps(e,i),o.class=t,o.slot(e,i),i.fez=o,t.GLOBAL&&t.GLOBAL!=!0&&(window[t.GLOBAL]=o),window.$&&(o.$root=$(i)),o.props.id&&i.setAttribute("id",o.props.id),o.fezRegister(),(o.init||o.created||o.connect).bind(o)(o.props),o.render(),o.firstRender=!0,o.onMount(o.props),o.onSubmit){let f=o.root.nodeName=="FORM"?o.root:o.find("form");f.onsubmit=u=>{u.preventDefault(),o.onSubmit(o.formData())}}if(o.onPropsChange){qe.observe(i,{attributes:!0});for(let[f,u]of Object.entries(o.props))o.onPropsChange(f,u)}}}var We=r=>{let e={script:"",style:"",html:"",head:""},t=r.split(`
35
+ `),s=[],n="";for(var i of t)i=i.trim(),i.startsWith("<script")&&!e.script&&n!="head"?n="script":i.startsWith("<head")&&!e.script?n="head":i.startsWith("<style")?n="style":i.endsWith("<\/script>")&&n==="script"&&!e.script?(e.script=s.join(`
36
+ `),s=[],n=null):i.endsWith("</style>")&&n==="style"?(e.style=s.join(`
37
+ `),s=[],n=null):(i.endsWith("</head>")||i.endsWith("</header>"))&&n==="head"?(e.head=s.join(`
38
+ `),s=[],n=null):n?s.push(i):e.html+=i+`
39
+ `;if(e.head){let f=Fez.domRoot(e.head);Array.from(f.children).forEach(u=>{if(u.tagName==="SCRIPT"){let d=document.createElement("script");Array.from(u.attributes).forEach(b=>{d.setAttribute(b.name,b.value)}),d.type||="text/javascript",u.src?document.head.appendChild(d):(d.type.includes("javascript")||d.type=="module")&&(d.textContent=u.textContent,document.head.appendChild(d))}else document.head.appendChild(u.cloneNode(!0))})}let o=e.script;return/class\s+\{/.test(o)||(o=`class {
40
+ ${o}
41
+ }`),String(e.style).includes(":")&&(e.style=Fez.cssMixin(e.style),e.style=e.style.includes(":fez")||/(?:^|\s)body\s*\{/.test(e.style)?e.style:`:fez {
19
42
  ${e.style}
20
- }`,i=i.replace(/\}\s*$/,`
43
+ }`,o=o.replace(/\}\s*$/,`
21
44
  CSS = \`${e.style}\`
22
- }`)),/\w/.test(String(e.html))&&(e.html=e.html.replaceAll("`","&#x60;"),e.html=e.html.replaceAll("$","\\$"),i=i.replace(/\}\s*$/,`
45
+ }`)),/\w/.test(String(e.html))&&(e.html=e.html.replaceAll("`","&#x60;"),e.html=e.html.replaceAll("$","\\$"),o=o.replace(/\}\s*$/,`
23
46
  HTML = \`${e.html}\`
24
- }`)),i};function G(r){if(r instanceof Node){let e=r;e.remove();let t=e.getAttribute("fez");if(t&&(t.includes(".")||t.includes("/"))){qe(t);return}else return t&&!t.includes("-")&&console.error(`Fez: Invalid custom element name "${t}". Custom element names must contain a dash (e.g., 'my-element', 'ui-button').`),x(t,e.innerHTML)}else{(r?Fez.domRoot(r):document.body).querySelectorAll("template[fez], xmp[fez]").forEach(t=>{G(t)});return}}function qe(r){Fez.log(`Loading from ${r}`),Fez.fetch(r).then(e=>{let o=new DOMParser().parseFromString(e,"text/html").querySelectorAll("template[fez], xmp[fez]");if(o.length>0)o.forEach(s=>{let i=s.getAttribute("fez");i&&!i.includes("-")&&!i.includes(".")&&!i.includes("/")&&console.error(`Fez: Invalid custom element name "${i}". Custom element names must contain a dash (e.g., 'my-element', 'ui-button').`);let u=s.innerHTML;x(i,u)});else{let s=r.split("/").pop().split(".")[0];x(s,e)}}).catch(e=>{console.error(`FEZ template load error for "${r}": ${e.message}`)})}function x(r,e){if(arguments.length===1)return G(r);if(e&&e.includes("</xmp>"))return G(e);r&&!r.includes("-")&&!r.includes(".")&&!r.includes("/")&&console.error(`Fez: Invalid custom element name "${r}". Custom element names must contain a dash (e.g., 'my-element', 'ui-button').`);let t=Pe(e),n=t.split(/class\s+\{/,2);if(t=`${n[0]};
47
+ }`)),o};function G(r){if(r instanceof Node){let e=r;e.remove();let t=e.getAttribute("fez");if(t&&(t.includes(".")||t.includes("/"))){Ve(t);return}else{t&&!t.includes("-")&&console.error(`Fez: Invalid custom element name "${t}". Custom element names must contain a dash (e.g., 'my-element', 'ui-button').`),R(t,e.innerHTML);return}}else{(r?Fez.domRoot(r):document.body).querySelectorAll("template[fez], xmp[fez]").forEach(t=>{G(t)});return}}function Ve(r){Fez.log(`Loading from ${r}`),Fez.fetch(r).then(e=>{let n=new DOMParser().parseFromString(e,"text/html").querySelectorAll("template[fez], xmp[fez]");if(n.length>0)n.forEach(i=>{let o=i.getAttribute("fez");o&&!o.includes("-")&&!o.includes(".")&&!o.includes("/")&&console.error(`Fez: Invalid custom element name "${o}". Custom element names must contain a dash (e.g., 'my-element', 'ui-button').`);let f=i.innerHTML;R(o,f)});else{let i=r.split("/").pop().split(".")[0];R(i,e)}}).catch(e=>{console.error(`FEZ template load error for "${r}": ${e.message}`)})}function R(r,e){if(arguments.length===1)return G(r);if(e&&e.includes("</xmp>"))return G(e);r&&!r.includes("-")&&!r.includes(".")&&!r.includes("/")&&console.error(`Fez: Invalid custom element name "${r}". Custom element names must contain a dash (e.g., 'my-element', 'ui-button').`);let t=We(e),s=t.split(/class\s+\{/,2);if(t=`${s[0]};
25
48
 
26
49
  window.Fez('${r}', class {
27
- ${n[1]})`,r){let o=document.getElementById("fez-hidden-styles");o||(o=document.createElement("style"),o.id="fez-hidden-styles",document.head.appendChild(o));let s=[...Object.keys(Fez.classes),r].sort().join(", ");o.textContent=`${s} { display: none; }
28
- `}if(t.includes("import "))Fez.head({script:t}),setTimeout(()=>{Fez.classes[r]||Fez.error(`Template "${r}" possible compile error. (can be a false positive, it imports are not loaded)`)},2e3);else try{new Function(t)()}catch(o){Fez.error(`Template "${r}" compile error: ${o.message}`),console.log(t)}}var se=x;var Be={data:{},listeners:new Map,subscribers:new Map,globalSubscribers:new Set,notify(r,e,t){Fez.log(`Global state change for ${r}: ${e} (from ${t})`);let n=this.listeners.get(r);n&&n.forEach(s=>{s.isConnected?(s.onGlobalStateChange(r,e,t),s.render()):n.delete(s)});let o=this.subscribers.get(r);o&&o.forEach(s=>{try{s(e,t,r)}catch(i){console.error(`Error in subscriber for key ${r}:`,i)}}),this.globalSubscribers.forEach(s=>{try{s(r,e,t)}catch(i){console.error("Error in global subscriber:",i)}})},createProxy(r){return new Proxy({},{get:(e,t)=>(r._globalStateKeys||=new Set,r._globalStateKeys.has(t)||(r._globalStateKeys.add(t),this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(r)),this.data[t]),set:(e,t,n)=>{let o=this.data[t];return o!==n&&(this.data[t]=n,this.notify(t,n,o)),!0}})},set(r,e){let t=this.data[r];t!==e&&(this.data[r]=e,this.notify(r,e,t))},get(r){return this.data[r]},forEach(r,e){let t=this.listeners.get(r);t&&t.forEach(n=>{n.isConnected?e(n):t.delete(n)})},subscribe(r,e){if(typeof r=="function")return this.globalSubscribers.add(r),()=>this.globalSubscribers.delete(r);{let t=r;return this.subscribers.has(t)||this.subscribers.set(t,new Set),this.subscribers.get(t).add(e),()=>{let n=this.subscribers.get(t);n&&(n.delete(e),n.size===0&&this.subscribers.delete(t))}}}},oe=Be;var ie=r=>{r.head=(e,t)=>{if(e.nodeName){e.nodeName=="SCRIPT"?(r.head({script:e.innerText}),e.remove()):(e.querySelectorAll("script").forEach(f=>r.head(f)),e.querySelectorAll("template[fez], xmp[fez], script[fez]").forEach(f=>r.compile(f)));return}if(typeof e!="object"||e===null)throw new Error("head requires an object parameter");let n,o={},s;if(e.script){if(e.script.includes("import ")){t&&r.error("Fez.head callback is not supported when script with import is passed (module context).");let f=document.createElement("script");f.type="module",f.textContent=e.script,document.head.appendChild(f),setTimeout(()=>f.remove(),100)}else try{new Function(e.script)(),t&&t()}catch(f){r.error("Error executing script:",f),console.log(e.script)}return}else if(e.js){n=e.js,s="script";for(let[f,m]of Object.entries(e))f!=="js"&&f!=="module"&&(o[f]=m);e.module&&(o.type="module")}else if(e.css){n=e.css,s="link",o.rel="stylesheet";for(let[f,m]of Object.entries(e))f!=="css"&&(o[f]=m)}else throw new Error('head requires either "script", "js" or "css" property');let i=document.querySelector(`${s}[src="${n}"], ${s}[href="${n}"]`);if(i)return t&&t(),i;let u=document.createElement(s);s==="link"?u.href=n:u.src=n;for(let[f,m]of Object.entries(o))u.setAttribute(f,m);return(t||e.module)&&(u.onload=()=>{e.module&&s==="script"&&import(n).then(f=>{window[e.module]=f.default||f[e.module]||f}).catch(f=>{console.error(`Error importing module ${e.module}:`,f)}),t&&t()}),document.head.appendChild(u),u},r.darkenColor=(e,t=20)=>{let n=parseInt(e.replace("#",""),16),o=Math.round(2.55*t),s=(n>>16)-o,i=(n>>8&255)-o,u=(n&255)-o;return"#"+(16777216+(s<255?s<1?0:s:255)*65536+(i<255?i<1?0:i:255)*256+(u<255?u<1?0:u:255)).toString(16).slice(1)},r.lightenColor=(e,t=20)=>{let n=parseInt(e.replace("#",""),16),o=Math.round(2.55*t),s=(n>>16)+o,i=(n>>8&255)+o,u=(n&255)+o;return"#"+(16777216+(s<255?s<1?0:s:255)*65536+(i<255?i<1?0:i:255)*256+(u<255?u<1?0:u:255)).toString(16).slice(1)},r.htmlEscape=e=>typeof e=="string"?(e=e.replace(/font-family\s*:\s*(?:&[^;]+;|[^;])*?;/gi,"").replaceAll("&","&amp;").replaceAll("'","&apos;").replaceAll('"',"&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;"),e):e===void 0?"":e,r.domRoot=(e,t="div")=>{if(e instanceof Node)return e;{let n=document.createElement(t);return n.innerHTML=e,n}},r.activateNode=(e,t="active")=>{Array.from(e.parentElement.children).forEach(n=>{n.classList.remove(t)}),e.classList.add(t)},r.isTrue=e=>["1","true","on"].includes(String(e).toLowerCase()),r.getFunction=e=>{if(e){if(typeof e=="function")return e;if(typeof e=="string")return new Function(e)}else return()=>{}}};var b=(r,e)=>{if(typeof r=="number"){let t=b.instances.get(r);if(t)return t;b.error(`Instance with UID "${r}" not found.`)}else if(r)if(e)if(typeof e=="function"&&!/^\s*class/.test(e.toString())&&!/\b(this|new)\b/.test(e.toString())){let n=Array.from(document.querySelectorAll(`.fez.fez-${r}`)).filter(o=>o.fez);return n.forEach(o=>e(o.fez)),n}else return typeof e!="function"?b.find(r,e):B(r,e);else{let t=r.nodeName?r.closest(".fez"):document.querySelector(r.includes("#")?r:`.fez.fez-${r}`);if(t){if(t.fez)return t.fez;b.error(`node "${r}" has no Fez attached.`)}else b.error(`node "${r}" not found.`)}else b.error("Fez() ?")};b.classes={};b.instanceCount=0;b.instances=new Map;b.find=(r,e)=>{let t=r;typeof t=="string"&&(t=document.body.querySelector(t)),typeof t.val=="function"&&(t=t[0]);let n=e?`.fez.fez-${e}`:".fez",o=t.closest(n);if(o&&o.fez)return o.fez;console.error("Fez node connector not found",r,t)};b.cssClass=r=>ee.css(r);b.globalCss=(r,e={})=>{if(typeof r=="function"&&(r=r()),r.includes(":")){let t=r.split(`
29
- `).filter(n=>!/^\s*\/\//.test(n)).join(`
30
- `);e.wrap&&(t=`:fez { ${t} }`),t=t.replace(/\:fez|\:host/,`.fez.fez-${e.name}`),r=b.cssClass(t)}return document.body?document.body.parentElement.classList.add(r):document.addEventListener("DOMContentLoaded",()=>{document.body.parentElement.classList.add(r)}),r};b.info=()=>{console.log("Fez components:",Object.keys(b.classes||{}))};b.morphdom=(r,e,t={})=>{Array.from(r.attributes).forEach(o=>{e.setAttribute(o.name,o.value)}),te.morph(r,e,{morphStyle:"outerHTML"});let n=r.nextSibling;n?.nodeType===Node.TEXT_NODE&&n.textContent.trim()===""&&n.remove()};b.publish=(r,...e)=>{b._subs||={},b._subs[r]||=[],b._subs[r].forEach(t=>{t[1].bind(t[0])(...e)})};b.fnv1=r=>{var e,t,n,o,s,i;for(e=2166136261,t=16777619,n=e,o=s=0,i=r.length-1;0<=i?s<=i:s>=i;o=0<=i?++s:--s)n^=r.charCodeAt(o),n*=t;return n.toString(36).replaceAll("-","")};b.tag=(r,e={},t="")=>{let n=encodeURIComponent(JSON.stringify(e));return`<${r} data-props="${n}">${t}</${r}>`};b.error=(r,e)=>{if(r=`Fez: ${r}`,console.error(r),e)return`<span style="border: 1px solid red; font-size: 14px; padding: 3px 7px; background: #fee; border-radius: 4px;">${r}</span>`};b.log=r=>{b.LOG===!0&&(r=String(r).substring(0,180),console.log(`Fez: ${r}`))};document.addEventListener("DOMContentLoaded",()=>{b.log("Fez.LOG === true, logging enabled.")});b.untilTrue=(r,e)=>{e||=200,r()||setTimeout(()=>{b.untilTrue(r,e)},e)};b.throttle=(r,e=200)=>{let t=0,n;return function(...o){let s=Date.now();s-t>=e?(r.apply(this,o),t=s):(clearTimeout(n),n=setTimeout(()=>{r.apply(this,o),t=Date.now()},e-(s-t)))}};b.fetch=function(...r){b._fetchCache||={};let e="GET",t,n;typeof r[0]=="string"&&/^[A-Z]+$/.test(r[0])&&(e=r.shift()),t=r.shift();let o={},s=null;if(typeof r[0]=="object"&&(s=r.shift()),typeof r[0]=="function"&&(n=r.shift()),s){if(e==="GET"){let f=new URLSearchParams(s);t+=(t.includes("?")?"&":"?")+f.toString()}else if(e==="POST"){let f=new FormData;for(let[m,g]of Object.entries(s))f.append(m,g);o.body=f}}o.method=e;let i=`${e}:${t}:${JSON.stringify(o)}`;if(b._fetchCache[i]){let f=b._fetchCache[i];if(b.log(`fetch cache hit: ${e} ${t}`),n){n(f);return}return Promise.resolve(f)}b.log(`fetch live: ${e} ${t}`);let u=f=>f.headers.get("content-type")?.includes("application/json")?f.json():f.text();if(n){fetch(t,o).then(u).then(f=>{b._fetchCache[i]=f,n(f)}).catch(f=>b.onError("fetch",f));return}return fetch(t,o).then(u).then(f=>(b._fetchCache[i]=f,f))};b.onError=(r,e)=>{if(typeof r!="string")throw new Error("Fez.onError: kind must be a string");console.error(`${r}: ${e.toString()}`)};b._styleMacros={};b.styleMacro=(r,e)=>{b._styleMacros[r]=e};b.store={store:new Map,counter:0,set(r){let e=this.counter++;return this.store.set(e,r),e},get(r){return this.store.get(r)},delete(r){let e=this.store.get(r);return this.store.delete(r),e}};ie(b);b.compile=se;b.state=oe;b.dump=re;var T=b;typeof window<"u"&&(window.FezBase=_);typeof window<"u"&&(window.Fez=T);Promise.resolve().then(()=>ae());setInterval(()=>{for(let[r,e]of T.instances)e?.isConnected||(e.fez?.fezOnDestroy(),T.instances.delete(r))},5e3);var Ge=new MutationObserver(r=>{for(let{addedNodes:e,removedNodes:t}of r)e.forEach(n=>{n.nodeType===1&&(n.matches("template[fez], xmp[fez], script[fez]")&&(T.compile(n),n.remove()),n.querySelectorAll&&n.querySelectorAll("template[fez], xmp[fez], script[fez]").forEach(s=>{T.compile(s),s.remove()}))}),t.forEach(n=>{n.nodeType===1&&n.querySelectorAll&&n.querySelectorAll(".fez, :scope.fez").forEach(s=>{s.fez&&s.root&&(T.instances.delete(s.fez.UID),s.fez.fezOnDestroy())})})});Ge.observe(document.documentElement,{childList:!0,subtree:!0});var At=T;})();
50
+ ${s[1]})`,r){let n=document.getElementById("fez-hidden-styles");n||(n=document.createElement("style"),n.id="fez-hidden-styles",document.head.appendChild(n));let i=[...Object.keys(Fez.classes),r].sort().join(", ");n.textContent=`${i} { display: none; }
51
+ `}if(t.includes("import "))Fez.head({script:t}),setTimeout(()=>{Fez.classes[r]||Fez.error(`Template "${r}" possible compile error. (can be a false positive, it imports are not loaded)`)},2e3);else try{new Function(t)()}catch(n){Fez.error(`Template "${r}" compile error: ${n.message}`),console.log(t)}}var le=R;var Ue={data:{},listeners:new Map,subscribers:new Map,globalSubscribers:new Set,notify(r,e,t){Fez.log(`Global state change for ${r}: ${e} (from ${t})`);let s=this.listeners.get(r);s&&s.forEach(i=>{i.isConnected?(i.onGlobalStateChange(r,e,t),i.render()):s.delete(i)});let n=this.subscribers.get(r);n&&n.forEach(i=>{try{i(e,t,r)}catch(o){console.error(`Error in subscriber for key ${r}:`,o)}}),this.globalSubscribers.forEach(i=>{try{i(r,e,t)}catch(o){console.error("Error in global subscriber:",o)}})},createProxy(r){return new Proxy({},{get:(e,t)=>(r._globalStateKeys||=new Set,r._globalStateKeys.has(t)||(r._globalStateKeys.add(t),this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(r)),this.data[t]),set:(e,t,s)=>{let n=this.data[t];return n!==s&&(this.data[t]=s,this.notify(t,s,n)),!0}})},set(r,e){let t=this.data[r];t!==e&&(this.data[r]=e,this.notify(r,e,t))},get(r){return this.data[r]},forEach(r,e){let t=this.listeners.get(r);t&&t.forEach(s=>{s.isConnected?e(s):t.delete(s)})},subscribe(r,e){if(typeof r=="function")return this.globalSubscribers.add(r),()=>this.globalSubscribers.delete(r);{let t=r;return this.subscribers.has(t)||this.subscribers.set(t,new Set),this.subscribers.get(t).add(e),()=>{let s=this.subscribers.get(t);s&&(s.delete(e),s.size===0&&this.subscribers.delete(t))}}}},ce=Ue;var ae=r=>{r.head=(e,t)=>{if(e.nodeName){e.nodeName=="SCRIPT"?(r.head({script:e.innerText}),e.remove()):(e.querySelectorAll("script").forEach(u=>r.head(u)),e.querySelectorAll("template[fez], xmp[fez], script[fez]").forEach(u=>r.compile(u)));return}if(typeof e!="object"||e===null)throw new Error("head requires an object parameter");let s,n={},i;if(e.script){if(e.script.includes("import ")){t&&r.error("Fez.head callback is not supported when script with import is passed (module context).");let u=document.createElement("script");u.type="module",u.textContent=e.script,document.head.appendChild(u),requestAnimationFrame(()=>u.remove())}else try{new Function(e.script)(),t&&t()}catch(u){r.error("Error executing script:",u),console.log(e.script)}return}else if(e.js){s=e.js,i="script";for(let[u,d]of Object.entries(e))u!=="js"&&u!=="module"&&(n[u]=d);e.module&&(n.type="module")}else if(e.css){s=e.css,i="link",n.rel="stylesheet";for(let[u,d]of Object.entries(e))u!=="css"&&(n[u]=d)}else throw new Error('head requires either "script", "js" or "css" property');let o=document.querySelector(`${i}[src="${s}"], ${i}[href="${s}"]`);if(o)return t&&t(),o;let f=document.createElement(i);i==="link"?f.href=s:f.src=s;for(let[u,d]of Object.entries(n))f.setAttribute(u,d);return(t||e.module)&&(f.onload=()=>{e.module&&i==="script"&&import(s).then(u=>{window[e.module]=u.default||u[e.module]||u}).catch(u=>{console.error(`Error importing module ${e.module}:`,u)}),t&&t()}),document.head.appendChild(f),f},r.fetch=function(...e){r._fetchCache||={};let t="GET",s,n;typeof e[0]=="string"&&/^[A-Z]+$/.test(e[0])&&(t=e.shift()),s=e.shift();let i={},o=null;if(typeof e[0]=="object"&&(o=e.shift()),typeof e[0]=="function"&&(n=e.shift()),o){if(t==="GET"){let d=new URLSearchParams(o);s+=(s.includes("?")?"&":"?")+d.toString()}else if(t==="POST"){let d=new FormData;for(let[b,E]of Object.entries(o))d.append(b,E);i.body=d}}i.method=t;let f=`${t}:${s}:${JSON.stringify(i)}`;if(r._fetchCache[f]){let d=r._fetchCache[f];if(r.log(`fetch cache hit: ${t} ${s}`),n){n(d);return}return Promise.resolve(d)}r.log(`fetch live: ${t} ${s}`);let u=d=>d.headers.get("content-type")?.includes("application/json")?d.json():d.text();if(n){fetch(s,i).then(u).then(d=>{r._fetchCache[f]=d,n(d)}).catch(d=>r.onError("fetch",d));return}return fetch(s,i).then(u).then(d=>(r._fetchCache[f]=d,d))},r.darkenColor=(e,t=20)=>{let s=parseInt(e.replace("#",""),16),n=Math.round(2.55*t),i=(s>>16)-n,o=(s>>8&255)-n,f=(s&255)-n;return"#"+(16777216+(i<255?i<1?0:i:255)*65536+(o<255?o<1?0:o:255)*256+(f<255?f<1?0:f:255)).toString(16).slice(1)},r.lightenColor=(e,t=20)=>{let s=parseInt(e.replace("#",""),16),n=Math.round(2.55*t),i=(s>>16)+n,o=(s>>8&255)+n,f=(s&255)+n;return"#"+(16777216+(i<255?i<1?0:i:255)*65536+(o<255?o<1?0:o:255)*256+(f<255?f<1?0:f:255)).toString(16).slice(1)},r.htmlEscape=e=>typeof e=="string"?(e=e.replace(/font-family\s*:\s*(?:&[^;]+;|[^;])*?;/gi,"").replaceAll("&","&amp;").replaceAll("'","&apos;").replaceAll('"',"&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;"),e):e===void 0?"":e,r.domRoot=(e,t="div")=>{if(e instanceof Node)return e;{let s=document.createElement(t);return s.innerHTML=e,s}},r.activateNode=(e,t="active")=>{Array.from(e.parentElement.children).forEach(s=>{s.classList.remove(t)}),e.classList.add(t)},r.isTrue=e=>["1","true","on"].includes(String(e).toLowerCase()),r.getFunction=e=>{if(e){if(typeof e=="function")return e;if(typeof e=="string"){let t=/^\s*\(?\s*\w+(\s*,\s*\w+)*\s*\)?\s*=>/,s=/^\s*function\s*\(/;return t.test(e)||s.test(e)?new Function("return "+e)():e.includes(".")&&!e.includes("(")?new Function(`return function() { return ${e}(); }`):new Function(e)}}else return()=>{}},r.onReady=e=>{document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{e()},{once:!0}):e()},r.fnv1=e=>{var t,s,n,i,o,f;for(t=2166136261,s=16777619,n=t,i=o=0,f=e.length-1;0<=f?o<=f:o>=f;i=0<=f?++o:--o)n^=e.charCodeAt(i),n*=s;return n.toString(36).replaceAll("-","")},r.tag=(e,t={},s="")=>{let n=encodeURIComponent(JSON.stringify(t));return`<${e} data-props="${n}">${s}</${e}>`},r.untilTrue=(e,t)=>{t||=200,e()||setTimeout(()=>{r.untilTrue(e,t)},t)},r.throttle=(e,t=200)=>{let s=0,n;return function(...i){let o=Date.now();o-s>=t?(e.apply(this,i),s=o):(clearTimeout(n),n=setTimeout(()=>{e.apply(this,i),s=Date.now()},t-(o-s)))}}};var fe={},ue=r=>{r.cssMixin=(e,t)=>{if(t)fe[e]=t;else return Object.entries(fe).forEach(([s,n])=>{e=e.replaceAll(`:${s} `,`${n} `),e=e.replaceAll(`@include ${s} `,`${n} `)}),e},r.cssMixin("mobile","@media (max-width: 767px)"),r.cssMixin("tablet","@media (min-width: 768px) and (max-width: 1023px)"),r.cssMixin("desktop","@media (min-width: 1200px)")};var g=(r,e)=>{if(typeof r=="number"){let t=g.instances.get(r);if(t)return t;g.error(`Instance with UID "${r}" not found.`)}else if(r)if(e)if(typeof e=="function"&&!/^\s*class/.test(e.toString())&&!/\b(this|new)\b/.test(e.toString())){let s=Array.from(document.querySelectorAll(`.fez.fez-${r}`)).filter(n=>n.fez);return s.forEach(n=>e(n.fez)),s}else return typeof e!="function"?g.find(r,e):q(r,e);else{let t=r.nodeName?r.closest(".fez"):document.querySelector(r.includes("#")?r:`.fez.fez-${r}`);if(t){if(t.fez)return t.fez;g.error(`node "${r}" has no Fez attached.`)}else g.error(`node "${r}" not found.`)}else g.error("Fez() ?")};g.classes={};g.instanceCount=0;g.instances=new Map;g.find=(r,e)=>{let t=r;typeof t=="string"&&(t=document.body.querySelector(t)),typeof t.val=="function"&&(t=t[0]);let s=e?`.fez.fez-${e}`:".fez",n=t.closest(s);if(n&&n.fez)return n.fez;console.error("Fez node connector not found",r,t)};g.cssClass=r=>ee.css(r);g.globalCss=(r,e={})=>{if(typeof r=="function"&&(r=r()),r.includes(":")){let t=r.split(`
52
+ `).filter(s=>!/^\s*\/\//.test(s)).join(`
53
+ `);e.wrap&&(t=`:fez { ${t} }`),t=t.replace(/\:fez|\:host/,`.fez.fez-${e.name}`),r=g.cssClass(t)}return g.onReady(()=>{document.body.parentElement.classList.add(r)}),r};g.info=()=>{console.log("Fez components:",Object.keys(g.classes||{}))};g.morphdom=(r,e,t={})=>{Array.from(r.attributes).forEach(n=>{e.setAttribute(n.name,n.value)}),te.morph(r,e,{morphStyle:"outerHTML"});let s=r.nextSibling;s?.nodeType===Node.TEXT_NODE&&s.textContent.trim()===""&&s.remove()};g.publish=(r,...e)=>{g._subs||={},g._subs[r]||=[],g._subs[r].forEach(t=>{t[1].bind(t[0])(...e)})};g.error=(r,e)=>{if(r=`Fez: ${r}`,console.error(r),e)return`<span style="border: 1px solid red; font-size: 14px; padding: 3px 7px; background: #fee; border-radius: 4px;">${r}</span>`};g.log=r=>{g.LOG===!0&&(r=String(r).substring(0,180),console.log(`Fez: ${r}`))};g.onError=(r,e)=>{if(typeof r!="string")throw new Error("Fez.onError: kind must be a string");console.error(`${r}: ${e.toString()}`)};g.store={store:new Map,counter:0,set(r){let e=this.counter++;return this.store.set(e,r),e},get(r){return this.store.get(r)},delete(r){let e=this.store.get(r);return this.store.delete(r),e}};ae(g);ue(g);g.compile=le;g.state=ce;g.dump=re;g.dump=ne;g.onReady(()=>{g.log("Fez.LOG === true, logging enabled.")});var C=g;typeof window<"u"&&(window.FezBase=x);typeof window<"u"&&(window.Fez=C);Promise.resolve().then(()=>he());setInterval(()=>{for(let[r,e]of C.instances)e?.isConnected||(e.fez?.fezOnDestroy(),C.instances.delete(r))},5e3);var Xe=new MutationObserver(r=>{for(let{addedNodes:e,removedNodes:t}of r)e.forEach(s=>{s.nodeType===1&&(s.matches("template[fez], xmp[fez], script[fez]")&&(C.compile(s),s.remove()),s.querySelectorAll&&s.querySelectorAll("template[fez], xmp[fez], script[fez]").forEach(i=>{C.compile(i),i.remove()}))}),t.forEach(s=>{s.nodeType===1&&s.querySelectorAll&&s.querySelectorAll(".fez, :scope.fez").forEach(i=>{i.fez&&i.root&&(C.instances.delete(i.fez.UID),i.fez.fezOnDestroy())})})});Xe.observe(document.documentElement,{childList:!0,subtree:!0});var xt=C;})();
31
54
  //# sourceMappingURL=fez.js.map