@dinoreic/fez 0.3.0 → 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
@@ -144,7 +144,8 @@ This example showcases:
144
144
  * **Reactive State Management** - Built-in reactive `state` object automatically triggers re-renders on property changes
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
- * **Style Macros** - Define custom CSS shortcuts like `Fez.styleMacro('mobile', '@media (max-width: 768px)')` and use as `:mobile { ... }`
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.cssMixin('mobile', '@media (max-width: 768px)')` and use as `:mobile { ... }`
148
149
  * **Scoped & Global Styles** - Components can define both scoped CSS (`:fez { ... }`) and global styles in the same component
149
150
 
150
151
  ### Developer Experience
@@ -300,8 +301,8 @@ Fez('foo-bar', class {
300
301
  // get/set attributes on root node
301
302
  this.attr(name, value)
302
303
 
303
- // hide the custom element wrapper and move children to parent
304
- this.fezHide()
304
+ // dissolves child nodes or given node into parent
305
+ this.dissolve()
305
306
 
306
307
  // automatic form submission handling if there is FORM as parent or child node
307
308
  this.onSubmit(formData) { ... }
@@ -314,9 +315,9 @@ Fez('foo-bar', class {
314
315
  /* Utility methods */
315
316
 
316
317
  // define custom style macro
317
- // Fez.styleMacro('mobile', '@media (max-width: 768px)')
318
+ // Fez.cssMixin('mobile', '@media (max-width: 768px)')
318
319
  // :mobile { ... } -> @media (max-width: 768px) { ... }
319
- Fez.styleMacro(name, value)
320
+ Fez.cssMixin(name, value)
320
321
 
321
322
  // add global scss
322
323
  Fez.globalCss(`
@@ -473,6 +474,10 @@ All parts are optional
473
474
  <!-- preserve state by key, not affected by state changes-->>
474
475
  <p fez-keep="key">...</p>
475
476
 
477
+ <!-- memoize DOM content by key (component-scoped) -->
478
+ <!-- stores DOM on first render, restores on subsequent renders with same key -->
479
+ <div fez-memoize="unique-key">expensive content</div>
480
+
476
481
  <!-- :attribute for evaluated attributes (converts to JSON) -->
477
482
  <div :data-config="state.config"></div>
478
483
  </div>
@@ -547,6 +552,45 @@ Fez.onError = (kind, error) => {
547
552
  }
548
553
  ```
549
554
 
555
+ ## Default Components
556
+
557
+ Fez includes several built-in components available when you include `defaults.js`:
558
+
559
+ ### fez-component
560
+ Dynamically includes a Fez component by name:
561
+ ```html
562
+ <fez-component name="some-node" :props="fez.props"></fez-component>
563
+ ```
564
+
565
+ ### fez-include
566
+ Loads remote HTML content via URL:
567
+ ```html
568
+ <fez-include src="./demo/fez/ui-slider.html"></fez-include>
569
+ ```
570
+
571
+ ### fez-inline
572
+ Creates inline components with reactive state:
573
+ ```html
574
+ <fez-inline :state="{count: 0}">
575
+ <button onclick="fez.state.count += 1">+</button>
576
+ {{ state.count }} * {{ state.count }} = {{ state.count * state.count }}
577
+ </fez-inline>
578
+ ```
579
+
580
+ ### fez-memoize
581
+ Memoizes DOM content by key (global scope):
582
+ ```html
583
+ <!-- First render: stores the content -->
584
+ <fez-memoize key="unique-key">
585
+ <expensive-component></expensive-component>
586
+ </fez-memoize>
587
+
588
+ <!-- Subsequent renders: restores stored content instantly -->
589
+ <fez-memoize key="unique-key">
590
+ <!-- Content here is ignored, stored version is used -->
591
+ </fez-memoize>
592
+ ```
593
+
550
594
  ## Global State Management
551
595
 
552
596
  Fez includes a built-in global state manager that automatically tracks component subscriptions. It automatically tracks which components use which state variables and only updates exactly what's needed.
package/dist/fez.js CHANGED
@@ -1,28 +1,54 @@
1
- (()=>{var Se=Object.defineProperty;var Ee=(r,e)=>()=>(r&&(e=r(r=0)),e);var Ae=(r,e)=>{for(var t in e)Se(r,t,{get:e[t],enumerable:!0})};var ie={};Ae(ie,{loadDefaults:()=>oe});var oe,le=Ee(()=>{oe=()=>{Fez("fez-component",class{init(r){let e=document.createElement(r.name);for(e.props=r.props||r["data-props"]||r;this.root.firstChild;)this.root.parentNode.insertBefore(this.root.lastChild,e.nextSibling);this.root.innerHTML="",this.root.appendChild(e)}}),Fez("fez-include",class{init(r){Fez.fetch(r.src,e=>{let t=Fez.domRoot(e);Fez.head(t),this.root.innerHTML=t.innerHTML})}}),Fez("fez-inline",class{init(r){let e=this.root.innerHTML;if(this.root.innerHTML.includes("<")){let s=`inline-${Fez.fnv1(this.root.outerHTML)}`;Fez(s,class{HTML=e;init(){Object.assign(this.state,r.state||{})}});let n=document.createElement(s);this.root.after(this.root.lastChild,n),this.root.remove()}}})};typeof Fez<"u"&&Fez&&oe()});function k(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 o=n.join(" ");e.class?e.class+=` ${o}`:e.class=o}let s=document.createElement(r);for(let[n,o]of Object.entries(e))if(typeof o=="function")s[n]=o.bind(this);else{let i=String(o).replaceAll("fez.",this.fezHtmlRoot);s.setAttribute(n,i)}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 Ce(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 H(r,e={}){let t=[];r=r.replaceAll("[[","{{").replaceAll("]]","}}"),r=r.replace(/(\w+)=\{\{\s*(.*?)\s*\}\}([\s>])/g,(o,i,u,f)=>`${i}="{{ ${u} }}"${f}`);let s={};r=r.replace(/\{\{block\s+(\w+)\s*\}\}([^§]+)\{\{\/block\}\}/g,(o,i,u)=>(s[i]=u,"")),r=r.replace(/\{\{block:([\w\-]+)\s*\}\}/g,(o,i)=>s[i]||`block:${i}?`),r=r.replace(/:(\w+)="([\w\.\[\]]+)"/,(o,i,u)=>`:${i}=Fez.store.delete({{ Fez.store.set(${u}) }})`);let n=r.replace(/{{(.*?)}}/g,(o,i)=>(i=i.replaceAll("&#x60;","`"),i=i.replaceAll("&lt;","<").replaceAll("&gt;",">").replaceAll("&amp;","&"),Ce(i,t)));n=n.replace(/<!\-\-.*?\-\->/g,"").replace(/>\s+</g,"><"),n="`"+n.trim()+"`";try{let o=`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
3
  return ${n}
4
4
  }
5
- `,i=new Function(o);return f=>{try{return i.bind(f)()}catch(b){b.message=`FEZ template runtime error: ${b.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: ${n}`,console.error(b)}}}catch(o){return o.message=`FEZ template compile error: ${o.message}Template source:
8
- ${n}`,console.error(o),()=>Fez.error("Template Compile Error",!0)}}var _=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,o]of Object.entries(s))if([":"].includes(n[0])){delete s[n];try{let i=new Function(`return (${o})`).bind(t)();s[n.replace(/[\:_]/,"")]=i}catch(i){console.error(`Fez: Error evaluating attribute ${n}="${o}" for ${e.tagName}: ${i.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(o){console.error(`Fez: Invalid JSON in data-props for ${e.tagName}: ${o.message}`)}}else if(s["data-json-template"]){let n=t.previousSibling?.textContent;if(n)try{s=JSON.parse(n),t.previousSibling.remove()}catch(o){console.error(`Fez: Invalid JSON in template for ${e.tagName}: ${o.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((o,i)=>{n[i]=o}),n}static nodeName="div";constructor(){}n=k;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),o=new ResizeObserver(n);o.observe(e),t.call(this,e.getBoundingClientRect(),e),this.addOnDestroy(()=>{o.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=o=>{if(Fez._subs&&Fez._subs[e]){let i=Fez._subs[e].find(([u])=>u===o);if(i)return i[1].bind(o)(...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(o=>s.appendChild(o)):n=e.join(""):typeof e=="string"?n=H(e)(this):typeof e=="function"&&(n=e(this)),n&&(n=n.replace(/\s\w+="undefined"/g,""),s.innerHTML=this.parseHtml(n)),s.querySelectorAll("[fez-keep]").forEach(o=>{let i=o.getAttribute("fez-keep"),u=this.root.querySelector(`[fez-keep="${i}"]`);u?o.parentNode.replaceChild(u,o):i==="default-slot"&&Array.from(this.root.childNodes).forEach(f=>o.appendChild(f))}),Fez.morphdom(this.root,s),this.renderFezPostProcess(),this.afterRender()}renderFezPostProcess(){let e=(t,s)=>{this.root.querySelectorAll(`*[${t}]`).forEach(n=>{let o=n.getAttribute(t);n.removeAttribute(t),o&&s.bind(this)(o,n)})};e("fez-this",(t,s)=>{new Function("n",`this.${t} = n`).bind(this)(s)}),e("fez-use",(t,s)=>{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+/),o=n.pop();n.forEach(i=>s.classList.add(i)),o&&setTimeout(()=>{s.classList.add(o)},300)}),e("fez-bind",(t,s)=>{if(["INPUT","SELECT","TEXTAREA"].includes(s.nodeName)){let n=new Function(`return this.${t}`).bind(this)(),o=s.type.toLowerCase()=="checkbox",i=["SELECT"].includes(s.nodeName)||o?"onchange":"onkeyup";s.setAttribute(i,`${this.fezHtmlRoot}${t} = this.${o?"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")})}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))}fezHide(){let e=this.root,t=this.childNodes(),s=this.root.parentNode;return t.reverse().forEach(n=>s.insertBefore(n,e.nextSibling)),this.root.remove(),this.root=s,t}reactiveStore(e,t){e||={},t||=(n,o,i,u)=>{this.onStateChange(o,i,u),this.nextTick(this.render,"render")},t.bind(this);function s(n,o){return typeof n!="object"||n===null?n:new Proxy(n,{set(i,u,f,b){let g=Reflect.get(i,u,b);if(g!==f){typeof f=="object"&&f!==null&&(f=s(f,o));let S=Reflect.set(i,u,f,b);return o(i,u,f,g),S}return!0},get(i,u,f){let b=Reflect.get(i,u,f);return typeof b=="object"&&b!==null?s(b,o):b}})}return s(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,Fe=r=>{let e=Z(r),t=e.data;return e.data="",t},Te=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,we=/\/\*[^]*?\*\/| +/g,X=/\n+/g,F=(r,e)=>{let t="",s="",n="";for(let o in r){let i=r[o];o[0]=="@"?o[1]=="i"?t=o+" "+i+";":s+=o[1]=="f"?F(i,o):o+"{"+F(i,o[1]=="k"?"":e)+"}":typeof i=="object"?s+=F(i,e?e.replace(/([^,])+/g,u=>o.replace(/(^:.*)|([^,])+/g,f=>/&/.test(f)?f.replace(/&/g,u):u?u+" "+f:f)):o):i!=null&&(o=/^--/.test(o)?o:o.replace(/[A-Z]/g,"-$&").toLowerCase(),n+=F.p?F.p(o,i):o+":"+i+";")}return t+(e&&n?e+"{"+n+"}":n)+s},C={},Y=r=>{if(typeof r=="object"){let e="";for(let t in r)e+=t+Y(r[t]);return e}return r},Me=(r,e,t,s,n)=>{let o=Y(r),i=C[o]||(C[o]=(f=>{let b=0,g=11;for(;b<f.length;)g=101*g+f.charCodeAt(b++)>>>0;return"go"+g})(o));if(!C[i]){let f=o!==r?r:(b=>{let g,S,w=[{}];for(;g=Te.exec(b.replace(we,""));)g[4]?w.shift():g[3]?(S=g[3].replace(X," ").trim(),w.unshift(w[0][S]=w[0][S]||{})):w[0][g[1]]=g[2].replace(X," ").trim();return w[0]})(r);C[i]=F(n?{["@keyframes "+i]:f}:f,t?"":"."+i)}let u=t&&C.g?C.g:null;return t&&(C.g=C[i]),((f,b,g,S)=>{S?b.data=b.data.replace(S,f):b.data.indexOf(f)===-1&&(b.data=g?f+b.data:b.data+f)})(C[i],e,s,u),i},Le=(r,e,t)=>r.reduce((s,n,o)=>{let i=e[o];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?"":F(u,""):u===!1?"":u}return s+n+(i??"")},"");function I(r){let e=this||{},t=r.call?r(e.p):r;return Me(t.unshift?t.raw?Le(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 x,P,q,_e=I.bind({g:1}),Oe=I.bind({k:1});function je(r,e,t,s){F.p=e,x=r,P=t,q=s}function He(r,e){let t=this||{};return function(){let s=arguments;function n(o,i){let u=Object.assign({},o),f=u.className||n.className;t.p=Object.assign({theme:P&&P()},u),t.o=/ *go\d+/.test(f),u.className=I.apply(t,s)+(f?" "+f:""),e&&(u.ref=i);let b=r;return r[0]&&(b=u.as||r,delete u.as),q&&b[0]&&q(u),x(b,u)}return e?e(n):n}}var Q={css:I,extractCss:Fe,glob:_e,keyframes:Oe,setup:je,styled:He};var ee=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=de(c));let d=he(c),h=ae(l,d,a);return s(l,d,h)}function s(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(){s(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=me(c,l,a),h=d?.previousSibling,p=d?.nextSibling,y=o(l,d,a);return d?pe(h,y,p):[]}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 o(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):R(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),n(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),M(a,p);continue}if(G(p,h,a)){o(h,p,a),h=h.nextSibling,M(a,p);continue}let y=fe(l,c,p,h,a);if(y){h=V(h,y,a),o(y,p,a),M(a,p);continue}let z=ue(l,c,p,h,a);if(z){h=V(h,z,a),o(z,p,a),M(a,p);continue}if(a.callbacks.beforeNodeAdded(p)===!1)return;c.insertBefore(p,h),a.callbacks.afterNodeAdded(p),M(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),n(c,a)||g(l,c,a)}function b(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;b(l,c,"checked",a),b(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)b(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),j=a.head.shouldReAppend(v),D=a.head.shouldPreserve(v);E||D?j?h.push(v):(L.delete(v.outerHTML),p.push(v)):z==="append"?j&&(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 E=document.createRange().createContextualFragment(v.outerHTML).firstChild;if(a.callbacks.beforeNodeAdded(E)!==!1){if(E.href||E.src){let j=null,D=new Promise(function(ve){j=ve});E.addEventListener("load",function(){j()}),K.push(D)}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}),K}function w(){}function A(){}function ce(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 ae(l,c,a){return a=ce(a),{target:l,newContent:c,config:a,morphStyle:a.morphStyle,ignoreActive:a.ignoreActive,ignoreActiveValue:a.ignoreActiveValue,idMap:ze(l,c),deadIds:new Set,callbacks:a.callbacks,head:a.head}}function G(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 R(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 M(a,c),c.nextSibling}function fe(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(G(a,z,h))return z;if(L+=O(h,z,l),L>p)return null;z=z.nextSibling}}return y}function ue(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(R(a,p))return p;if(R(y,p)&&(z++,y=y.nextSibling,z>=2))return null;p=p.nextSibling}return p}function de(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 he(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 pe(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 me(l,c,a){let d;d=l.firstChild;let h=d,p=0;for(;d;){let y=be(d,c,a);y>p&&(h=d,p=y),d=d.nextSibling}return h}function be(l,c,a){return R(l,c)?.5+O(a,l,c):0}function U(l,c){M(c,l),c.callbacks.beforeNodeRemoved(l)!==!1&&(l.remove(),c.callbacks.afterNodeRemoved(l))}function ye(l,c){return!l.deadIds.has(c)}function ge(l,c,a){return(l.idMap.get(a)||r).has(c)}function M(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)ye(l,p)&&ge(l,p,a)&&++h;return h}function J(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 ze(l,c){let a=new Map;return J(l,a),J(c,a),a}return{morph:t,defaults:e}}();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=te(e.html));else{let s=new e,n=class extends _{};if(Object.getOwnPropertyNames(s).concat(Object.getOwnPropertyNames(e.prototype)).filter(i=>!["constructor","prototype"].includes(i)).forEach(i=>n.prototype[i]=s[i]),s.GLOBAL&&(n.fezGlobal=s.GLOBAL),s.CSS&&(n.css=s.CSS),s.HTML&&(n.html=te(s.HTML)),s.NAME&&(n.nodeName=s.NAME),s.GLOBAL){let i=()=>document.body.appendChild(document.createElement(r));document.readyState==="loading"?document.addEventListener("DOMContentLoaded",i):i()}e=n,t.log(`${r} compiled`)}e.html&&(e.html=e.html.replace(/<slot\s*\/>|<slot\s*>\s*<\/slot>/g,()=>{let s=e.SLOT||"div";return`<${s} class="fez-slot" fez-keep="default-slot"></${s}>`}),e.fezHtmlFunc=H(e.html)),e.css&&(e.css=t.globalCss(e.css,{name:r})),t.classes[r]=e,Re(r,e)}function Re(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 s=t._pendingConnections.slice();t._pendingConnections=[],t._batchScheduled=!1,s.sort((n,o)=>n.node.contains(o.node)?-1:o.node.contains(n.node)?1:0),s.forEach(({name:n,node:o})=>{o.isConnected&&o.parentNode&&Ie(n,o)})}))}})}function te(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,o=document.createElement(n||"div");o.classList.add("fez"),o.classList.add(`fez-${r}`),s.replaceChild(o,e);let i=new t;if(i.UID=++Fez.instanceCount,Fez.instances.set(i.UID,i),i.oldRoot=e,i.fezName=r,i.root=o,i.props=t.getProps(e,o),i.class=t,i.slot(e,o),o.fez=i,t.fezGlobal&&t.fezGlobal!=!0&&(window[t.fezGlobal]=i),window.$&&(i.$root=$(o)),i.props.id&&o.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){Ne.observe(o,{attributes:!0});for(let[u,f]of Object.entries(i.props))i.onPropsChange(u,f)}}}var Ne=new MutationObserver((r,e)=>{for(let t of r)if(t.type==="attributes"){let s=t.target.fez,n=t.attributeName,o=t.target.getAttribute(n);s&&(s.props[n]=o,s.onPropsChange(n,o))}});var De=r=>{let e={script:"",style:"",html:"",head:""},t=r.split(`
9
- `),s=[],n="";for(var o of t)o=o.trim(),o.startsWith("<script")&&!e.script&&n!="head"?n="script":o.startsWith("<head")&&!e.script?n="head":o.startsWith("<style")?n="style":o.endsWith("<\/script>")&&n==="script"&&!e.script?(e.script=s.join(`
10
- `),s=[],n=null):o.endsWith("</style>")&&n==="style"?(e.style=s.join(`
11
- `),s=[],n=null):(o.endsWith("</head>")||o.endsWith("</header>"))&&n==="head"?(e.head=s.join(`
12
- `),s=[],n=null):n?s.push(o):e.html+=o+`
13
- `;if(e.head){let u=Fez.domRoot(e.head);Array.from(u.children).forEach(f=>{if(f.tagName==="SCRIPT"){let b=document.createElement("script");Array.from(f.attributes).forEach(g=>{b.setAttribute(g.name,g.value)}),b.type||="text/javascript",f.src?document.head.appendChild(b):(b.type.includes("javascript")||b.type=="module")&&(b.textContent=f.textContent,document.head.appendChild(b))}else document.head.appendChild(f.cloneNode(!0))})}let i=e.script;return/class\s+\{/.test(i)||(i=`class {
14
- ${i}
15
- }`),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 {
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
+
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 {
16
42
  ${e.style}
17
- }`,i=i.replace(/\}\s*$/,`
43
+ }`,o=o.replace(/\}\s*$/,`
18
44
  CSS = \`${e.style}\`
19
- }`)),/\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*$/,`
20
46
  HTML = \`${e.html}\`
21
- }`)),i};function W(r){if(r instanceof Node){let e=r;e.remove();let t=e.getAttribute("fez");if(t&&(t.includes(".")||t.includes("/"))){ke(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').`),N(t,e.innerHTML)}else{(r?Fez.domRoot(r):document.body).querySelectorAll("template[fez], xmp[fez]").forEach(t=>{W(t)});return}}function ke(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(o=>{let i=o.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=o.innerHTML;N(i,u)});else{let o=r.split("/").pop().split(".")[0];N(o,e)}}).catch(e=>{console.error(`FEZ template load error for "${r}": ${e.message}`)})}function N(r,e){if(arguments.length===1)return W(r);if(e&&e.includes("</xmp>"))return W(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=De(e),s=t.split(/class\s+\{/,2);if(t=`${s[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]};
22
48
 
23
49
  window.Fez('${r}', class {
24
- ${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 o=[...Object.keys(Fez.classes),r].sort().join(", ");n.textContent=`${o} { display: none; }
25
- `}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 re=N;var Pe={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(o=>{o.isConnected?(o.onGlobalStateChange(r,e,t),o.render()):s.delete(o)});let n=this.subscribers.get(r);n&&n.forEach(o=>{try{o(e,t,r)}catch(i){console.error(`Error in subscriber for key ${r}:`,i)}}),this.globalSubscribers.forEach(o=>{try{o(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,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))}}}},se=Pe;var ne=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 s,n={},o;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){s=e.js,o="script";for(let[f,b]of Object.entries(e))f!=="js"&&f!=="module"&&(n[f]=b);e.module&&(n.type="module")}else if(e.css){s=e.css,o="link",n.rel="stylesheet";for(let[f,b]of Object.entries(e))f!=="css"&&(n[f]=b)}else throw new Error('head requires either "script", "js" or "css" property');let i=document.querySelector(`${o}[src="${s}"], ${o}[href="${s}"]`);if(i)return t&&t(),i;let u=document.createElement(o);o==="link"?u.href=s:u.src=s;for(let[f,b]of Object.entries(n))u.setAttribute(f,b);return(t||e.module)&&(u.onload=()=>{e.module&&o==="script"&&import(s).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 s=parseInt(e.replace("#",""),16),n=Math.round(2.55*t),o=(s>>16)-n,i=(s>>8&255)-n,u=(s&255)-n;return"#"+(16777216+(o<255?o<1?0:o: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 s=parseInt(e.replace("#",""),16),n=Math.round(2.55*t),o=(s>>16)+n,i=(s>>8&255)+n,u=(s&255)+n;return"#"+(16777216+(o<255?o<1?0:o: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 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())};var m=(r,e)=>{if(typeof r=="number"){let t=m.instances.get(r);if(t)return t;m.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"?m.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;m.error(`node "${r}" has no Fez attached.`)}else m.error(`node "${r}" not found.`)}else m.error("Fez() ?")};m.classes={};m.instanceCount=0;m.instances=new Map;m.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)};m.cssClass=r=>Q.css(r);m.globalCss=(r,e={})=>{if(typeof r=="function"&&(r=r()),r.includes(":")){let t=r.split(`
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(`
26
52
  `).filter(s=>!/^\s*\/\//.test(s)).join(`
27
- `);e.wrap&&(t=`:fez { ${t} }`),t=t.replace(/\:fez|\:host/,`.fez.fez-${e.name}`),r=m.cssClass(t)}return document.body?document.body.parentElement.classList.add(r):document.addEventListener("DOMContentLoaded",()=>{document.body.parentElement.classList.add(r)}),r};m.info=()=>{console.log("Fez components:",Object.keys(m.classes||{}))};m.morphdom=(r,e,t={})=>{Array.from(r.attributes).forEach(n=>{e.setAttribute(n.name,n.value)}),ee.morph(r,e,{morphStyle:"outerHTML"});let s=r.nextSibling;s?.nodeType===Node.TEXT_NODE&&s.textContent.trim()===""&&s.remove()};m.publish=(r,...e)=>{m._subs||={},m._subs[r]||=[],m._subs[r].forEach(t=>{t[1].bind(t[0])(...e)})};m.fnv1=r=>{var e,t,s,n,o,i;for(e=2166136261,t=16777619,s=e,n=o=0,i=r.length-1;0<=i?o<=i:o>=i;n=0<=i?++o:--o)s^=r.charCodeAt(n),s*=t;return s.toString(36).replaceAll("-","")};m.tag=(r,e={},t="")=>{let s=encodeURIComponent(JSON.stringify(e));return`<${r} data-props="${s}">${t}</${r}>`};m.getFunction=r=>{if(r){if(typeof r=="function")return r;if(typeof r=="string")return new Function(r)}else return()=>{}};m.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>`};m.log=r=>{m.LOG===!0&&(r=String(r).substring(0,180),console.log(`Fez: ${r}`))};document.addEventListener("DOMContentLoaded",()=>{m.log("Fez.LOG === true, logging enabled.")});m.untilTrue=(r,e)=>{e||=200,r()||setTimeout(()=>{m.untilTrue(r,e)},e)};m.throttle=(r,e=200)=>{let t=0,s;return function(...n){let o=Date.now();o-t>=e?(r.apply(this,n),t=o):(clearTimeout(s),s=setTimeout(()=>{r.apply(this,n),t=Date.now()},e-(o-t)))}};m.fetch=function(...r){m._fetchCache||={};let e="GET",t,s;typeof r[0]=="string"&&/^[A-Z]+$/.test(r[0])&&(e=r.shift()),t=r.shift();let n={},o=null;if(typeof r[0]=="object"&&(o=r.shift()),typeof r[0]=="function"&&(s=r.shift()),o){if(e==="GET"){let f=new URLSearchParams(o);t+=(t.includes("?")?"&":"?")+f.toString()}else if(e==="POST"){let f=new FormData;for(let[b,g]of Object.entries(o))f.append(b,g);n.body=f}}n.method=e;let i=`${e}:${t}:${JSON.stringify(n)}`;if(m._fetchCache[i]){let f=m._fetchCache[i];if(m.log(`fetch cache hit: ${e} ${t}`),s){s(f);return}return Promise.resolve(f)}m.log(`fetch live: ${e} ${t}`);let u=f=>f.headers.get("content-type")?.includes("application/json")?f.json():f.text();if(s){fetch(t,n).then(u).then(f=>{m._fetchCache[i]=f,s(f)}).catch(f=>m.onError("fetch",f));return}return fetch(t,n).then(u).then(f=>(m._fetchCache[i]=f,f))};m.onError=(r,e)=>{if(typeof r!="string")throw new Error("Fez.onError: kind must be a string");console.error(`${r}: ${e.toString()}`)};m._styleMacros={};m.styleMacro=(r,e)=>{m._styleMacros[r]=e};m.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}};ne(m);m.compile=re;m.state=se;var T=m;typeof window<"u"&&(window.FezBase=_);typeof window<"u"&&(window.Fez=T);Promise.resolve().then(()=>le());setInterval(()=>{for(let[r,e]of T.instances)e?.isConnected||(e.fez?.fezOnDestroy(),T.instances.delete(r))},5e3);var qe=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]")&&(T.compile(s),s.remove()),s.querySelectorAll&&s.querySelectorAll("template[fez], xmp[fez], script[fez]").forEach(o=>{T.compile(o),o.remove()}))}),t.forEach(s=>{s.nodeType===1&&s.querySelectorAll&&s.querySelectorAll(".fez, :scope.fez").forEach(o=>{o.fez&&o.root&&(T.instances.delete(o.fez.UID),o.fez.fezOnDestroy())})})});qe.observe(document.documentElement,{childList:!0,subtree:!0});var yt=T;})();
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;})();
28
54
  //# sourceMappingURL=fez.js.map