mancha 0.20.13 → 0.21.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/dist/mancha.js CHANGED
@@ -8,41 +8,42 @@ function i(e,t){let n=r(t);n!==void 0&&(e.href=n)}
8
8
  * @license
9
9
  * SPDX-License-Identifier: Apache-2.0
10
10
  */
11
- function a(e,t){let n=r(t);n!==void 0&&(e.href=n)}let o={};var s=class{constructor(e,t){this.privateDoNotAccessOrElseWrappedAttributePrefix=t}toString(){return this.privateDoNotAccessOrElseWrappedAttributePrefix}};let c=s;function l(e){return new c(o,e)}function u(e){return e instanceof s}function d(e){if(u(e))return e.privateDoNotAccessOrElseWrappedAttributePrefix;throw Error(``)}function ee(e,t,n,r){if(e.length===0)throw Error(``);let i=e.map(e=>d(e)),a=n.toLowerCase();if(i.every(e=>a.indexOf(e)!==0))throw Error(`Attribute "${n}" does not match any of the allowed prefixes.`);t.setAttribute(n,r)}var te=class{},ne=class extends te{constructor(e,t){super(),this.privateDoNotAccessOrElseWrappedStyleSheet=e}toString(){return this.privateDoNotAccessOrElseWrappedStyleSheet}};function re(e){return new ne(e,o)}function ie(e){if(e instanceof ne)return e.privateDoNotAccessOrElseWrappedStyleSheet;throw Error(``)}
11
+ function a(e,t){let n=r(t);n!==void 0&&(e.href=n)}let o={};var s=class{constructor(e,t){this.privateDoNotAccessOrElseWrappedAttributePrefix=t}toString(){return this.privateDoNotAccessOrElseWrappedAttributePrefix}};let c=s;function l(e){return new c(o,e)}function u(e){return e instanceof s}function d(e){if(u(e))return e.privateDoNotAccessOrElseWrappedAttributePrefix;throw Error(``)}function f(e,t,n,r){if(e.length===0)throw Error(``);let i=e.map(e=>d(e)),a=n.toLowerCase();if(i.every(e=>a.indexOf(e)!==0))throw Error(`Attribute "${n}" does not match any of the allowed prefixes.`);t.setAttribute(n,r)}var p=class{},m=class extends p{constructor(e,t){super(),this.privateDoNotAccessOrElseWrappedStyleSheet=e}toString(){return this.privateDoNotAccessOrElseWrappedStyleSheet}};function h(e){return new m(e,o)}function g(e){if(e instanceof m)return e.privateDoNotAccessOrElseWrappedStyleSheet;throw Error(``)}
12
12
  /**
13
13
  * @license
14
14
  * SPDX-License-Identifier: Apache-2.0
15
15
  */
16
- function ae(e,t){e.textContent=ie(t)}function f(e){return l(e[0].toLowerCase())}function p(e){let t=e[0];return re(t)}function oe(e){return re(e.map(ie).join(``))}let se=[f`:`,f`style`,f`class`];function*m(e,t=new Set){let n=new Set,r=Array.from(e.childNodes).filter(e=>!t.has(e));for(yield e;r.length;){let e=r.shift();n.has(e)||(n.add(e),yield e),e.childNodes&&Array.from(e.childNodes).filter(e=>!t.has(e)).forEach(e=>{r.push(e)})}}function h(e,t){return e?.[t]!==void 0}function g(e,t){return typeof e?.[t]==`function`}function _(e){return e.replace(/-./g,e=>e[1].toUpperCase())}function v(e,t){return e.attribs?e.attribs[t]??null:e.getAttribute?.(t)??null}function ce(e,t){return e.attribs?t in e.attribs:e.hasAttribute?.(t)??!1}function y(e,t,n=``){return v(e,n+t)||v(e,`data-${t}`)||(e.dataset?.[_(t)]??null)}function b(e,t,n){e.attribs?e.attribs[t]=n:e.setAttribute?.(t,n)}function x(e,t,n){e.attribs?e.attribs[t]=n:ee(se,e,t,n)}function S(e,t,n){switch(t){case`disabled`:e.disabled=n;return;case`selected`:e.selected=n;return;case`checked`:e.checked=n;return;default:e[t]=n}}function C(e,t){e.attribs?delete e.attribs[t]:e.removeAttribute?.(t)}function le(e,t,n,r=``){ce(e,`${r}${t}`)?b(e,`${r}${t}`,n):ce(e,`data-${t}`)?b(e,`data-${t}`,n):b(e,`${r}${t}`,n)}function w(e,t,n=``){C(e,`${n}${t}`),C(e,`data-${t}`)}function ue(e,t,n){if(e.attribs&&t.attribs)t.attribs[n]=e.attribs[n];else if(n.startsWith(`data-`)){let r=_(n.slice(5));t.dataset&&e.dataset&&(t.dataset[r]=e.dataset[r])}else{let r=e?.getAttribute?.(n);x(t,n,r||``)}}function de(e){return h(e,`firstElementChild`)?e.firstElementChild:Array.from(e.children).find(e=>e.nodeType===1)}function T(e,...t){if(g(e,`replaceWith`)){e.replaceWith(...t);return}else{let n=e,r=n.parentNode;if(!r)return;let i=Array.from(r.childNodes).indexOf(n);n.parentNode=null,t.forEach(e=>{e.parentNode=r}),r.childNodes=[].concat(Array.from(r.childNodes).slice(0,i),t,Array.from(r.childNodes).slice(i+1))}}function fe(e,...t){g(e,`replaceChildren`)?e.replaceChildren(...t):(e.childNodes=t,t.forEach(t=>{t.parentNode=e}))}function E(e,t){return g(t,`appendChild`)?e.appendChild(t):(e.childNodes.push(t),t.parentNode=e,t)}function D(e,t){return g(t,`removeChild`)?e.removeChild(t):(fe(e,...Array.from(e.childNodes).filter(e=>e!==t)),t)}function pe(e,t,n){return n?g(e,`insertBefore`)?e.insertBefore(t,n):(T(n,t,n),t):E(e,t)}function O(e,t=0){return e?e.length<=t?e:`${e.slice(0,t-1)}…`:``}function k(e,t=0){return globalThis.DocumentFragment&&e instanceof DocumentFragment?Array.from(e.childNodes).map(e=>k(e,t)).join(``):O(e.outerHTML||e.nodeValue||String(e),t)}function A(e){return e.includes(`/`)?e.split(`/`).slice(0,-1).join(`/`):``}function me(e){return!e.includes(`://`)&&!e.startsWith(`/`)&&!e.startsWith(`#`)&&!e.startsWith(`data:`)}var he=class e{iterable;constructor(e){this.iterable=e}filter(t){return new e(e.filterGenerator(t,this.iterable))}map(t){return new e(e.mapGenerator(t,this.iterable))}find(e){for(let t of this.iterable)if(e(t))return t}array(){return Array.from(this.iterable)}*generator(){for(let e of this.iterable)yield e}static*filterGenerator(e,t){for(let n of t)e(n)&&(yield n)}static*mapGenerator(e,t){for(let n of t)yield e(n)}static equals(e,t){let n=e[Symbol.iterator](),r=t[Symbol.iterator](),i=n.next(),a=r.next();for(;!i.done&&!a.done;){if(i.value!==a.value)return!1;i=n.next(),a=r.next()}return i.done===a.done}};let j;(function(e){e.resolveIncludes=async function(e,t){let n=e,r=n.tagName?.toLowerCase();if(![`include`,`link`].includes(r)||r===`link`&&v(n,`rel`)!==`subresource`)return;this.log(`include directive found in:
17
- `,k(e,128)),this.log(`include params:`,t);let i=n.tagName.toLocaleLowerCase()===`link`?`href`:`src`,a=v(n,i);if(!a)throw Error(`"${i}" attribute missing from ${k(e,128)}.`);let o=[];r===`include`&&o.push(`src`),r===`link`&&o.push(`rel`,`href`);let s=t=>{let r=de(t);for(let e of Array.from(n.attributes))r&&!o.includes(e.name)&&ue(n,r,e.name);T(e,...t.childNodes)},c={...t,rootDocument:!1,maxdepth:(t?.maxdepth??100)-1};if(c.maxdepth===0)throw Error(`Maximum recursion depth reached.`);if(a.includes(`://`)||a.startsWith(`//`))this.log(`Including remote file from absolute path:`,a),await this.preprocessRemote(a,c).then(s);else if(t?.dirpath?.includes(`://`)||t?.dirpath?.startsWith(`//`)){let e=a.startsWith(`/`)?a:`${t.dirpath}/${a}`;this.log(`Including remote file from relative path:`,e),await this.preprocessRemote(e,c).then(s)}else if(a.charAt(0)===`/`)this.log(`Including local file from absolute path:`,a),await this.preprocessLocal(a,c).then(s);else{let e=t?.dirpath&&t?.dirpath!==`.`?`${t?.dirpath}/${a}`:a;this.log(`Including local file from relative path:`,e),await this.preprocessLocal(e,c).then(s)}},e.rebaseRelativePaths=function(e,t){let n=e,r=n.tagName?.toLowerCase();if(!t?.dirpath)return;let o=v(n,`src`),s=v(n,`href`),c=y(n,`render`,`:`),l=o||s||c;if(!l||!me(l))return;let u=`${t.dirpath}/${l}`;this.log(`Rebasing relative path as:`,u),c?le(n,`render`,u,`:`):h(n,`attribs`)?x(n,o?`src`:`href`,u):r===`img`?n.src=u:r===`a`?i(n,u):r===`source`||r===`audio`||r===`video`||r===`track`||r===`input`?n.src=u:r===`area`?a(n,u):this.log(`Unable to rebase relative path for element:`,r)},e.registerCustomElements=function(e,t){let n=e,r=n.tagName?.toLowerCase(),i=(v(n,`is`)||v(n,`alt`))?.toLowerCase();if([`template`,`div`].includes(r)&&i){if(r===`div`&&v(n,`role`)!==`template`)return;if(!this._customElements.has(i)){this.log(`Registering custom element: ${i}\n`,k(n,128));let e=n.content||n,r=Array.from(m(e));for(let e=1;e<r.length;e++)j.rebaseRelativePaths.call(this,r[e],t);this._customElements.set(i,n),n?.parentNode&&D(n.parentNode,n)}}},e.resolveCustomElements=function(e,t){let n=e,r=n.tagName?.toLowerCase(),i=r;if(i===`div`&&(i=v(n,`role`)?.toLowerCase()||i),i&&this._customElements.has(i)){this.log(`Processing custom element: ${i}\n`,k(n,128));let t=this._customElements.get(i),a=(t.content||t).cloneNode(!0),o=de(a);if(o)for(let e of Array.from(n.attributes))(r!==`div`||e.name!==`role`)&&ue(n,o,e.name);let s=new he(m(a)).find(e=>e.tagName?.toLowerCase()===`slot`);s&&T(s,...n.childNodes),T(e,...a.childNodes)}},e.resolveTextNodeExpressions=function(e,t){let n=e.nodeValue||``;if(e.nodeType!==3||!n?.trim())return;this.log(`Processing node content value:
18
- `,O(n,128));let r=new RegExp(/{{ ([^}]+) }}/gm),i=Array.from(n.matchAll(r)).map(e=>e[1]);return this.effect(function(){let t=n;for(let n of i){let r=this.eval(n,{$elem:e});t=t.replace(`{{ ${n} }}`,r==null?``:String(r))}e.nodeValue=t},{directive:`text`,element:e.parentElement??void 0,expression:i.join(`, `)})},e.resolveDataAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`data`,`:`);if(r){this.log(`:data attribute found in:
19
- `,k(e,128)),w(n,`data`,`:`);let i;h(e,`renderer`)?(i=e.renderer,this.log(`Reusing existing subrenderer for node:`,k(e,64))):(i=this.subrenderer(),S(e,`renderer`,i),this.log(`Created and attached new subrenderer for node:`,k(e,64)));let a=i.eval(r,{$elem:e});if(await Promise.all(Object.entries(a).map(([e,t])=>e.startsWith(`$$`)?(i._store.get(`$rootRenderer`)||i).set(e,t):i.set(e,t,!0))),i===this)return;for(let t of m(e,this._skipNodes))this._skipNodes.add(t);await i.mount(e,t)}},e.resolveClassAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`class`,`:`);if(r){this.log(`:class attribute found in:
20
- `,k(e,128)),w(n,`class`,`:`);let t=v(n,`class`)||``;return this.effect(function(){let i=this.eval(r,{$elem:e});x(n,`class`,(i?`${t} ${i}`:t).trim())},{directive:`class`,element:n,expression:r})}},e.resolveTextAttributes=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`text`,`:`);if(r){this.log(`:text attribute found in:
21
- `,k(e,128)),w(n,`text`,`:`);let t=t=>this.textContent(e,t);return this.effect(function(){let n=this.eval(r,{$elem:e});t(n==null?``:String(n))},{directive:`:text`,element:n,expression:r})}},e.resolveHtmlAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`html`,`:`);if(r){this.log(`:html attribute found in:
22
- `,k(e,128)),w(n,`html`,`:`);let i=null;return this.effect(function(){let a=this.eval(r,{$elem:e});return new Promise(e=>{(async()=>{i&&=(i.dispose(),null);let r=this.subrenderer();i=r;let o=await r.preprocessString(a,t);await r.renderNode(o),fe(n,o),r._store.set(`$rootNode`,n),e()})()})},{directive:`:html`,element:n,expression:r})}},e.resolveEventAttributes=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[]))if(t.name.startsWith(`:on:`)||t.name.startsWith(`data-on-`)){let r=``,i=[];if(t.name.startsWith(`:on:`)?[r,...i]=t.name.substring(4).split(`.`):t.name.startsWith(`data-on-`)&&([r,...i]=t.name.substring(8).split(`.`)),!r)throw Error(`Invalid event attribute: ${t.name}`);this.log(t.name,`attribute found in:
23
- `,k(e,128)),w(n,t.name);let a=r===`submit`&&n.tagName.toUpperCase()===`FORM`;e.addEventListener?.(r,n=>((i.includes(`prevent`)||a)&&n.preventDefault(),this.eval(t.value,{$elem:e,$event:n})))}},e.resolveForAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`for`,`:`)?.trim();if(r){this.log(`:for attribute found in:
24
- `,k(e,128)),w(n,`for`,`:`);for(let t of m(e,this._skipNodes))this._skipNodes.add(t);let i=v(n,`style`)||``;b(n,`style`,`display: none;`);let a=e.parentNode;if(!a)return;let o=this.createElement(`template`,e.ownerDocument);pe(a,o,e),D(a,e),`content`in o?E(o.content,e):E(o,e),this.log(`:for template:
25
- `,k(o,128));let s=r.split(` in `,2);if(s.length!==2)throw Error(`Invalid :for format: \`${r}\`. Expected "{key} in {expression}".`);let c=[],l=[],[u,d]=s;await this.effect(function(){let n=this.eval(d,{$elem:e});if(this.log(`:for list items:`,n),l.splice(0,l.length).forEach(e=>{e.dispose()}),c.splice(0,c.length).forEach(e=>{e.parentNode&&D(e.parentNode,e),this._skipNodes.delete(e)}),!Array.isArray(n)){console.error(`Expression did not yield a list: \`${d}\` => \`${n}\``);return}let r=o.nextSibling,s=[];for(let o of n){let n=this.subrenderer();n.set(u,o,!0);let d=e.cloneNode(!0);pe(a,d,r),c.push(d),l.push(n),this._skipNodes.add(d),s.push(n.mount(d,t).then(()=>{b(d,`style`,i)})),this.log(`Rendered list child:
26
- `,k(d,128))}return Promise.all(s).then(()=>{})},{directive:`:for`,element:n,expression:r})}},e.resolveBindAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`bind`,`:`);if(r){this.log(`:bind attribute found in:
27
- `,k(e,128));let t=v(n,`:bind:on`)?.split(`,`)||n.dataset?.bindOn?.split(`,`)||[`change`,`input`];w(n,`bind`,`:`),C(n,`:bind:on`),C(n,`data-bind-on`);let i=v(n,`type`)===`checkbox`?`checked`:`value`;!r.includes(`.`)&&!this.has(r)&&this.set(r,``);let a=this;this.effect(function(){let t=this.eval(r,{$elem:e});i===`checked`?n.checked=!!t:(n.value=t,n.value!==t&&t!=null&&a._pendingValueRetries.push(()=>{n.value=t}))},{directive:`:bind`,element:n,expression:r});let o=`${r} = $elem.${i}`;for(let n of t)e.addEventListener(n,()=>this.eval(o,{$elem:e}))}},e.resolveIfAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`if`,`:`);if(r){this.log(`:if attribute found in:
28
- `,k(e,128)),w(n,`if`,`:`);let t=this.createComment(` :if placeholder `,e.ownerDocument);this.effect(function(){this.eval(r,{$elem:e})?!n.parentNode&&t.parentNode&&T(t,n):n.parentNode&&T(n,t)},{directive:`:if`,element:n,expression:r})}},e.resolveShowAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`show`,`:`);if(r){this.log(`:show attribute found in:
29
- `,k(e,128)),w(n,`show`,`:`);let t=n.style?.display===`none`?``:n.style?.display??v(n,`style`)?.split(`;`)?.find(e=>e.split(`:`)[0]===`display`)?.split(`:`)?.at(1)?.trim();this.effect(function(){let i=this.eval(r,{$elem:e});n.style?n.style.display=i?t:`none`:x(n,`style`,`display: ${i?t:`none`};`)},{directive:`:show`,element:n,expression:r})}},e.resolveCustomAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[])){let r=`:attr:`,i=`data-attr-`;if(t.name.startsWith(r)||t.name.startsWith(i)){this.log(t.name,`attribute found in:
30
- `,k(e,128)),C(n,t.name);let a=(t.name.split(r,2).at(-1)||``).split(i,2).at(-1)??``;this.effect(function(){b(n,a,this.eval(t.value,{$elem:e}))},{directive:`:attr:${a}`,element:n,expression:t.value})}}},e.resolveCustomProperty=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[])){let r=`:prop:`,i=`data-prop-`;if(t.name.startsWith(r)||t.name.startsWith(i)){this.log(t.name,`property found in:
31
- `,k(e,128)),C(n,t.name);let a=_((t.name.split(r,2).at(-1)||``).split(i,2).at(-1)??``);this.effect(function(){S(n,a,this.eval(t.value,{$elem:e}))},{directive:`:prop:${a}`,element:n,expression:t.value})}}},e.stripTypes=(e,t)=>{let n=e;v(n,`:types`)&&C(n,`:types`),v(n,`data-types`)&&C(n,`data-types`)},e.resolveRenderAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=y(n,`render`,`:`);if(!r)return;this.log(`:render attribute found: ${r}`),w(n,`render`,`:`);let i;h(e,`renderer`)?(i=e.renderer,this.log(`Reusing existing subrenderer for :render:`,k(e,64))):(i=this.subrenderer(),S(n,`renderer`,i)),await i.mount(e,t);for(let t of m(e,this._skipNodes))this._skipNodes.add(t);try{let e=await import(r);typeof e.default==`function`?await e.default(n,i):e.default!==void 0&&console.warn(`Module ${r} default export is not a function`)}catch(e){console.error(`Failed to execute render init from ${r}:`,e)}}})(j||={});function M(){return new URL(globalThis.window?.location?.href||`http://localhost/`)}function ge(e){return e.substring(2)}function _e(e){return`\$\$${e}`}function ve(e){return e.keys().filter(e=>e.startsWith(`$$`))}async function ye(e,t){for(let[n,r]of t.searchParams.entries()){let t=_e(n);e.get(t)!==r&&await e.set(t,r)}}function be(e,t,n){let r=ge(t),i=!1;if(!n)e.searchParams.has(r)&&(e.searchParams.delete(r),i=!0);else{let t=String(n);e.searchParams.get(r)!==t&&(e.searchParams.set(r,t),i=!0)}return i}function xe(e,t){let n=!1;for(let r of ve(t))be(e,r,t.get(r))&&(n=!0);n&&globalThis.window?.history?.replaceState({},``,e.toString())}function Se(e){return async()=>{let t=M(),n=new Set;for(let[r,i]of t.searchParams.entries()){let t=_e(r);n.add(t),e.get(t)!==i&&e.set(t,i)}let r=ve(e);for(let t of r)n.has(t)||e.del(t)}}async function Ce(e){let t=M();await ye(e,t),xe(t,e),e.addKeyHandler(/^\$\$/,(e,t)=>{let n=M();be(n,e,t)&&globalThis.window?.history?.replaceState({},``,n.toString())}),globalThis.window?.addEventListener(`popstate`,Se(e))}
16
+ function _(e,t){e.textContent=g(t)}function v(e){return l(e[0].toLowerCase())}function y(e){let t=e[0];return h(t)}function ee(e){return h(e.map(g).join(``))}function b(e){let t=e.childNodes;for(let e=0;e<t.length;e++){let n=t[e];n.prev=e>0?t[e-1]:null,n.next=e<t.length-1?t[e+1]:null}}let te=[v`:`,v`style`,v`class`];function*x(e,t=new Set){let n=new Set,r=Array.from(e.childNodes).filter(e=>!t.has(e));for(yield e;r.length;){let e=r.shift();n.has(e)||(n.add(e),yield e),e.childNodes&&Array.from(e.childNodes).filter(e=>!t.has(e)).forEach(e=>{r.push(e)})}}function S(e,t){return e?.[t]!==void 0}function C(e,t){return typeof e?.[t]==`function`}function ne(e){return e.replace(/-./g,e=>e[1].toUpperCase())}function w(e,t){return e.attribs?e.attribs[t]??null:e.getAttribute?.(t)??null}function re(e,t){return e.attribs?t in e.attribs:e.hasAttribute?.(t)??!1}function T(e,t,n=``){return w(e,n+t)||w(e,`data-${t}`)||(e.dataset?.[ne(t)]??null)}function E(e,t,n){e.attribs?e.attribs[t]=n:e.setAttribute?.(t,n)}function D(e,t,n){e.attribs?e.attribs[t]=n:f(te,e,t,n)}function O(e,t,n){switch(t){case`disabled`:e.disabled=n;return;case`selected`:e.selected=n;return;case`checked`:e.checked=n;return;default:e[t]=n}}function k(e,t){e.attribs?delete e.attribs[t]:e.removeAttribute?.(t)}function ie(e,t,n,r=``){re(e,`${r}${t}`)?E(e,`${r}${t}`,n):re(e,`data-${t}`)?E(e,`data-${t}`,n):E(e,`${r}${t}`,n)}function A(e,t,n=``){k(e,`${n}${t}`),k(e,`data-${t}`)}function ae(e,t,n){if(e.attribs&&t.attribs)t.attribs[n]=e.attribs[n];else if(n.startsWith(`data-`)){let r=ne(n.slice(5));t.dataset&&e.dataset&&(t.dataset[r]=e.dataset[r])}else{let r=e?.getAttribute?.(n);D(t,n,r||``)}}function oe(e){return S(e,`firstElementChild`)?e.firstElementChild:Array.from(e.children).find(e=>e.nodeType===1)}function j(e,...t){if(C(e,`replaceWith`)){e.replaceWith(...t);return}else{let n=e,r=n.parentNode;if(!r)return;let i=Array.from(r.childNodes).indexOf(n);n.parentNode=null,t.forEach(e=>{e.parentNode=r}),r.childNodes=[].concat(Array.from(r.childNodes).slice(0,i),t,Array.from(r.childNodes).slice(i+1)),b(r)}}function se(e,...t){C(e,`replaceChildren`)?e.replaceChildren(...t):(e.childNodes=t,t.forEach(t=>{t.parentNode=e}),b(e))}function M(e,t){return C(t,`appendChild`)?e.appendChild(t):(e.childNodes.push(t),t.parentNode=e,b(e),t)}function N(e,t){return C(t,`removeChild`)?e.removeChild(t):(se(e,...Array.from(e.childNodes).filter(e=>e!==t)),t)}function P(e,t,n){return n?C(e,`insertBefore`)?e.insertBefore(t,n):(t.parentNode&&N(t.parentNode,t),j(n,t,n),t):M(e,t)}function ce(e,t=0){return e?e.length<=t?e:`${e.slice(0,t-1)}…`:``}function F(e,t=0){return globalThis.DocumentFragment&&e instanceof DocumentFragment?Array.from(e.childNodes).map(e=>F(e,t)).join(``):ce(e.outerHTML||e.nodeValue||String(e),t)}function le(e){return e.includes(`/`)?e.split(`/`).slice(0,-1).join(`/`):``}function ue(e){return!e.includes(`://`)&&!e.startsWith(`/`)&&!e.startsWith(`#`)&&!e.startsWith(`data:`)}var de=class e{iterable;constructor(e){this.iterable=e}filter(t){return new e(e.filterGenerator(t,this.iterable))}map(t){return new e(e.mapGenerator(t,this.iterable))}find(e){for(let t of this.iterable)if(e(t))return t}array(){return Array.from(this.iterable)}*generator(){for(let e of this.iterable)yield e}static*filterGenerator(e,t){for(let n of t)e(n)&&(yield n)}static*mapGenerator(e,t){for(let n of t)yield e(n)}static equals(e,t){let n=e[Symbol.iterator](),r=t[Symbol.iterator](),i=n.next(),a=r.next();for(;!i.done&&!a.done;){if(i.value!==a.value)return!1;i=n.next(),a=r.next()}return i.done===a.done}};let I;(function(e){e.resolveIncludes=async function(e,t){let n=e,r=n.tagName?.toLowerCase();if(![`include`,`link`].includes(r)||r===`link`&&w(n,`rel`)!==`subresource`)return;this.log(`include directive found in:
17
+ `,F(e,128)),this.log(`include params:`,t);let i=n.tagName.toLocaleLowerCase()===`link`?`href`:`src`,a=w(n,i);if(!a)throw Error(`"${i}" attribute missing from ${F(e,128)}.`);let o=[];r===`include`&&o.push(`src`),r===`link`&&o.push(`rel`,`href`);let s=t=>{let r=oe(t);for(let e of Array.from(n.attributes))r&&!o.includes(e.name)&&ae(n,r,e.name);j(e,...t.childNodes)},c={...t,rootDocument:!1,maxdepth:(t?.maxdepth??100)-1};if(c.maxdepth===0)throw Error(`Maximum recursion depth reached.`);if(a.includes(`://`)||a.startsWith(`//`))this.log(`Including remote file from absolute path:`,a),await this.preprocessRemote(a,c).then(s);else if(t?.dirpath?.includes(`://`)||t?.dirpath?.startsWith(`//`)){let e=a.startsWith(`/`)?a:`${t.dirpath}/${a}`;this.log(`Including remote file from relative path:`,e),await this.preprocessRemote(e,c).then(s)}else if(a.charAt(0)===`/`)this.log(`Including local file from absolute path:`,a),await this.preprocessLocal(a,c).then(s);else{let e=t?.dirpath&&t?.dirpath!==`.`?`${t?.dirpath}/${a}`:a;this.log(`Including local file from relative path:`,e),await this.preprocessLocal(e,c).then(s)}},e.rebaseRelativePaths=function(e,t){let n=e,r=n.tagName?.toLowerCase();if(!t?.dirpath)return;let o=w(n,`src`),s=w(n,`href`),c=T(n,`render`,`:`),l=o||s||c;if(!l||!ue(l))return;let u=`${t.dirpath}/${l}`;this.log(`Rebasing relative path as:`,u),c?ie(n,`render`,u,`:`):S(n,`attribs`)?D(n,o?`src`:`href`,u):r===`img`?n.src=u:r===`a`?i(n,u):r===`source`||r===`audio`||r===`video`||r===`track`||r===`input`?n.src=u:r===`area`?a(n,u):this.log(`Unable to rebase relative path for element:`,r)},e.registerCustomElements=function(e,t){let n=e,r=n.tagName?.toLowerCase(),i=(w(n,`is`)||w(n,`alt`))?.toLowerCase();if([`template`,`div`].includes(r)&&i){if(r===`div`&&w(n,`role`)!==`template`)return;if(!this._customElements.has(i)){this.log(`Registering custom element: ${i}\n`,F(n,128));let e=n.content||n,r=Array.from(x(e));for(let e=1;e<r.length;e++)I.rebaseRelativePaths.call(this,r[e],t);this._customElements.set(i,n),n?.parentNode&&N(n.parentNode,n)}}},e.resolveCustomElements=function(e,t){let n=e,r=n.tagName?.toLowerCase(),i=r;if(i===`div`&&(i=w(n,`role`)?.toLowerCase()||i),i&&this._customElements.has(i)){this.log(`Processing custom element: ${i}\n`,F(n,128));let t=this._customElements.get(i),a=(t.content||t).cloneNode(!0),o=oe(a);if(o)for(let e of Array.from(n.attributes))(r!==`div`||e.name!==`role`)&&ae(n,o,e.name);let s=new de(x(a)).find(e=>e.tagName?.toLowerCase()===`slot`);s&&j(s,...n.childNodes),j(e,...a.childNodes)}},e.resolveTextNodeExpressions=function(e,t){let n=e.nodeValue||``;if(e.nodeType!==3||!n?.trim())return;this.log(`Processing node content value:
18
+ `,ce(n,128));let r=new RegExp(/{{ ([^}]+) }}/gm),i=Array.from(n.matchAll(r)).map(e=>e[1]);return this.effect(function(){let t=n;for(let n of i){let r=this.eval(n,{$elem:e});t=t.replace(`{{ ${n} }}`,r==null?``:String(r))}e.nodeValue=t},{directive:`text`,element:e.parentElement??void 0,expression:i.join(`, `)})},e.resolveDataAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`data`,`:`);if(r){this.log(`:data attribute found in:
19
+ `,F(e,128)),A(n,`data`,`:`);let i;S(e,`renderer`)?(i=e.renderer,this.log(`Reusing existing subrenderer for node:`,F(e,64))):(i=this.subrenderer(),O(e,`renderer`,i),this.log(`Created and attached new subrenderer for node:`,F(e,64)));let a=i.eval(r,{$elem:e});if(await Promise.all(Object.entries(a).map(([e,t])=>e.startsWith(`$$`)?(i._store.get(`$rootRenderer`)||i).set(e,t):i.set(e,t,!0))),i===this)return;for(let t of x(e,this._skipNodes))this._skipNodes.add(t);await i.mount(e,t)}},e.resolveClassAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`class`,`:`);if(r){this.log(`:class attribute found in:
20
+ `,F(e,128)),A(n,`class`,`:`);let t=w(n,`class`)||``;return this.effect(function(){let i=this.eval(r,{$elem:e});D(n,`class`,(i?`${t} ${i}`:t).trim())},{directive:`class`,element:n,expression:r})}},e.resolveTextAttributes=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`text`,`:`);if(r){this.log(`:text attribute found in:
21
+ `,F(e,128)),A(n,`text`,`:`);let t=t=>this.textContent(e,t);return this.effect(function(){let n=this.eval(r,{$elem:e});t(n==null?``:String(n))},{directive:`:text`,element:n,expression:r})}},e.resolveHtmlAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`html`,`:`);if(r){this.log(`:html attribute found in:
22
+ `,F(e,128)),A(n,`html`,`:`);let i=null;return this.effect(function(){let a=this.eval(r,{$elem:e});return new Promise(e=>{(async()=>{i&&=(i.dispose(),null);let r=this.subrenderer();i=r;let o=await r.preprocessString(a,t);await r.renderNode(o),se(n,o),r._store.set(`$rootNode`,n),e()})()})},{directive:`:html`,element:n,expression:r})}},e.resolveEventAttributes=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[]))if(t.name.startsWith(`:on:`)||t.name.startsWith(`data-on-`)){let r=``,i=[];if(t.name.startsWith(`:on:`)?[r,...i]=t.name.substring(4).split(`.`):t.name.startsWith(`data-on-`)&&([r,...i]=t.name.substring(8).split(`.`)),!r)throw Error(`Invalid event attribute: ${t.name}`);this.log(t.name,`attribute found in:
23
+ `,F(e,128)),A(n,t.name);let a=r===`submit`&&n.tagName.toUpperCase()===`FORM`;e.addEventListener?.(r,n=>((i.includes(`prevent`)||a)&&n.preventDefault(),this.eval(t.value,{$elem:e,$event:n})))}},e.resolveForAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`for`,`:`)?.trim();if(r){this.log(`:for attribute found in:
24
+ `,F(e,128)),A(n,`for`,`:`);let i=T(n,`key`,`:`);i&&A(n,`key`,`:`);for(let t of x(e,this._skipNodes))this._skipNodes.add(t);let a=w(n,`style`)||``;E(n,`style`,`display: none;`);let o=e.parentNode;if(!o)return;let s=this.createElement(`template`,e.ownerDocument);P(o,s,e),N(o,e),`content`in s?M(s.content,e):M(s,e),this.log(`:for template:
25
+ `,F(s,128));let c=r.split(` in `,2);if(c.length!==2)throw Error(`Invalid :for format: \`${r}\`. Expected "{key} in {expression}".`);let l=new Map,u=[],d=[],[f,p]=c;await this.effect(function(){let n=this.eval(p,{$elem:e});if(this.log(`:for list items:`,n),!Array.isArray(n)){console.error(`Expression did not yield a list: \`${p}\` => \`${n}\``);return}if(i){let r=new Set,c=new Map,u=[],d=s.nextSibling;for(let s=0;s<n.length;s++){let p=n[s],m=this.eval(i,{[f]:p,$index:s});r.has(m)&&console.warn(`:for duplicate key detected: ${m}. Using last item.`),r.add(m);let h,g,_=l.get(m);if(_)h=_.node,g=_.subrenderer,u.push(g.set(f,p,!0)),u.push(g.set(`$index`,s,!0)),h===d||h.nextSibling===d||P(o,h,d);else{g=this.subrenderer(),g.set(f,p,!0),g.set(`$index`,s,!0);let n=e.cloneNode(!0);P(o,n,d),this._skipNodes.add(n),u.push(g.mount(n,t).then(()=>{E(n,`style`,a)})),h=n,this.log(`Rendered list child:
26
+ `,F(n,128))}c.set(m,{node:h,subrenderer:g}),d=h.nextSibling}for(let[e,{node:t,subrenderer:n}]of l)r.has(e)||(n.dispose(),t.parentNode&&N(t.parentNode,t),this._skipNodes.delete(t));l.clear();for(let[e,t]of c)l.set(e,t);return Promise.all(u).then(()=>{})}else{d.splice(0,d.length).forEach(e=>{e.dispose()}),u.splice(0,u.length).forEach(e=>{e.parentNode&&N(e.parentNode,e),this._skipNodes.delete(e)});let r=s.nextSibling,i=[];for(let s=0;s<n.length;s++){let c=n[s],l=this.subrenderer();l.set(f,c,!0),l.set(`$index`,s,!0);let p=e.cloneNode(!0);P(o,p,r),u.push(p),d.push(l),this._skipNodes.add(p),i.push(l.mount(p,t).then(()=>{E(p,`style`,a)})),this.log(`Rendered list child:
27
+ `,F(p,128))}return Promise.all(i).then(()=>{})}},{directive:`:for`,element:n,expression:r})}},e.resolveBindAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`bind`,`:`);if(r){this.log(`:bind attribute found in:
28
+ `,F(e,128));let t=w(n,`:bind:on`)?.split(`,`)||n.dataset?.bindOn?.split(`,`)||[`change`,`input`];A(n,`bind`,`:`),k(n,`:bind:on`),k(n,`data-bind-on`);let i=w(n,`type`)===`checkbox`?`checked`:`value`;!r.includes(`.`)&&!this.has(r)&&this.set(r,``);let a=this;this.effect(function(){let t=this.eval(r,{$elem:e});i===`checked`?n.checked=!!t:(n.value=t,n.value!==t&&t!=null&&a._pendingValueRetries.push(()=>{n.value=t}))},{directive:`:bind`,element:n,expression:r});let o=`${r} = $elem.${i}`;for(let n of t)e.addEventListener(n,()=>this.eval(o,{$elem:e}))}},e.resolveIfAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`if`,`:`);if(r){this.log(`:if attribute found in:
29
+ `,F(e,128)),A(n,`if`,`:`);let t=this.createComment(` :if placeholder `,e.ownerDocument);this.effect(function(){this.eval(r,{$elem:e})?!n.parentNode&&t.parentNode&&j(t,n):n.parentNode&&j(n,t)},{directive:`:if`,element:n,expression:r})}},e.resolveShowAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`show`,`:`);if(r){this.log(`:show attribute found in:
30
+ `,F(e,128)),A(n,`show`,`:`);let t=n.style?.display===`none`?``:n.style?.display??w(n,`style`)?.split(`;`)?.find(e=>e.split(`:`)[0]===`display`)?.split(`:`)?.at(1)?.trim();this.effect(function(){let i=this.eval(r,{$elem:e});n.style?n.style.display=i?t:`none`:D(n,`style`,`display: ${i?t:`none`};`)},{directive:`:show`,element:n,expression:r})}},e.resolveCustomAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[])){let r=`:attr:`,i=`data-attr-`;if(t.name.startsWith(r)||t.name.startsWith(i)){this.log(t.name,`attribute found in:
31
+ `,F(e,128)),k(n,t.name);let a=(t.name.split(r,2).at(-1)||``).split(i,2).at(-1)??``;this.effect(function(){E(n,a,this.eval(t.value,{$elem:e}))},{directive:`:attr:${a}`,element:n,expression:t.value})}}},e.resolveCustomProperty=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[])){let r=`:prop:`,i=`data-prop-`;if(t.name.startsWith(r)||t.name.startsWith(i)){this.log(t.name,`property found in:
32
+ `,F(e,128)),k(n,t.name);let a=ne((t.name.split(r,2).at(-1)||``).split(i,2).at(-1)??``);this.effect(function(){O(n,a,this.eval(t.value,{$elem:e}))},{directive:`:prop:${a}`,element:n,expression:t.value})}}},e.stripTypes=(e,t)=>{let n=e;w(n,`:types`)&&k(n,`:types`),w(n,`data-types`)&&k(n,`data-types`)},e.resolveRenderAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=T(n,`render`,`:`);if(!r)return;this.log(`:render attribute found: ${r}`),A(n,`render`,`:`);let i;S(e,`renderer`)?(i=e.renderer,this.log(`Reusing existing subrenderer for :render:`,F(e,64))):(i=this.subrenderer(),O(n,`renderer`,i)),await i.mount(e,t);for(let t of x(e,this._skipNodes))this._skipNodes.add(t);try{let e=await import(r);typeof e.default==`function`?await e.default(n,i):e.default!==void 0&&console.warn(`Module ${r} default export is not a function`)}catch(e){console.error(`Failed to execute render init from ${r}:`,e)}}})(I||={});function L(){return new URL(globalThis.window?.location?.href||`http://localhost/`)}function fe(e){return e.substring(2)}function pe(e){return`\$\$${e}`}function me(e){return e.keys().filter(e=>e.startsWith(`$$`))}async function he(e,t){for(let[n,r]of t.searchParams.entries()){let t=pe(n);e.get(t)!==r&&await e.set(t,r)}}function ge(e,t,n){let r=fe(t),i=!1;if(!n)e.searchParams.has(r)&&(e.searchParams.delete(r),i=!0);else{let t=String(n);e.searchParams.get(r)!==t&&(e.searchParams.set(r,t),i=!0)}return i}function _e(e,t){let n=!1;for(let r of me(t))ge(e,r,t.get(r))&&(n=!0);n&&globalThis.window?.history?.replaceState({},``,e.toString())}function ve(e){return async()=>{let t=L(),n=new Set;for(let[r,i]of t.searchParams.entries()){let t=pe(r);n.add(t),e.get(t)!==i&&e.set(t,i)}let r=me(e);for(let t of r)n.has(t)||e.del(t)}}async function ye(e){let t=L();await he(e,t),_e(t,e),e.addKeyHandler(/^\$\$/,(e,t)=>{let n=L();ge(n,e,t)&&globalThis.window?.history?.replaceState({},``,n.toString())}),globalThis.window?.addEventListener(`popstate`,ve(e))}
32
33
  /*
33
34
  * @license
34
35
  * Portions Copyright (c) 2013, the Dart project authors.
35
36
  */
36
- let we=new Set([`this`,`typeof`]),Te=new Set([`in`]),Ee=new Set([`+`,`-`,`!`,`typeof`]),De=new Set([`=`,`+`,`-`,`*`,`/`,`%`,`^`,`==`,`!=`,`>`,`<`,`>=`,`<=`,`||`,`&&`,`??`,`&`,`===`,`!==`,`|`,`in`]),N={"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":2,"??":3,"||":4,"&&":5,"|":6,"^":7,"&":8,"!=":9,"==":9,"!==":9,"===":9,">=":10,">":10,"<=":10,"<":10,in:10,"+":11,"-":11,"%":12,"/":12,"*":12,"(":13,"[":13,".":13,"?.":13,"{":13},Oe={"+":(e,t)=>e+t,"-":(e,t)=>e-t,"*":(e,t)=>e*t,"/":(e,t)=>e/t,"%":(e,t)=>e%t,"==":(e,t)=>e==t,"!=":(e,t)=>e!=t,"===":(e,t)=>e===t,"!==":(e,t)=>e!==t,">":(e,t)=>e>t,">=":(e,t)=>e>=t,"<":(e,t)=>e<t,"<=":(e,t)=>e<=t,"||":(e,t)=>e||t,"&&":(e,t)=>e&&t,"??":(e,t)=>e??t,"|":(e,t)=>t(e),in:(e,t)=>e in t},ke={"+":e=>e,"-":e=>-e,"!":e=>!e,typeof:e=>typeof e};var Ae=class{empty(){return{type:`Empty`,evaluate(e){return e},getIds(e){return e}}}literal(e){return{type:`Literal`,value:e,evaluate(e){return this.value},getIds(e){return e}}}id(e){return{type:`ID`,value:e,evaluate(e){return this.value===`this`?e:e?.[this.value]},getIds(e){return e.push(this.value),e}}}unary(e,t){let n=ke[e];return{type:`Unary`,operator:e,child:t,evaluate(e){return n(this.child.evaluate(e))},getIds(e){return this.child.getIds(e)}}}binary(e,t,n){let r=Oe[t];return{type:`Binary`,operator:t,left:e,right:n,evaluate(e){if(this.operator===`=`){if(this.left.type!==`ID`&&this.left.type!==`Getter`&&this.left.type!==`Index`)throw Error(`Invalid assignment target: ${this.left}`);let t=this.right.evaluate(e),n,r;return this.left.type===`Getter`?(n=this.left.receiver.evaluate(e),r=this.left.name):this.left.type===`Index`?(n=this.left.receiver.evaluate(e),r=String(this.left.argument.evaluate(e))):this.left.type===`ID`&&(n=e,r=this.left.value),n===void 0?void 0:(n[r]=t,t)}return r(this.left.evaluate(e),this.right.evaluate(e))},getIds(e){return this.left.getIds(e),this.right.getIds(e),e}}}getter(e,t,n){return{type:`Getter`,receiver:e,name:t,optional:n,evaluate(e){let t=this.receiver.evaluate(e);if(!(this.optional&&t==null))return t?.[this.name]},getIds(e){return this.receiver.getIds(e),e}}}invoke(e,t,n,r){if(t!=null&&typeof t!=`string`)throw Error(`method not a string`);return{type:`Invoke`,receiver:e,method:t,arguments:n,optional:r,evaluate(e){let t=this.receiver.evaluate(e);if(this.optional&&t==null)return;let n=this.method?t:e?.this??e,r=this.method?t?.[this.method]:t,i=this.arguments??[],a=[];for(let t of i)if(t?.type===`SpreadElement`){let n=t.evaluate(e);n&&typeof n[Symbol.iterator]==`function`&&a.push(...n)}else a.push(t?.evaluate(e));return r?.apply?.(n,a)},getIds(e){return this.receiver.getIds(e),this.arguments?.forEach(t=>{t?.getIds(e)}),e}}}paren(e){return e}index(e,t,n){return{type:`Index`,receiver:e,argument:t,optional:n,evaluate(e){let t=this.receiver.evaluate(e);if(this.optional&&t==null)return;let n=this.argument.evaluate(e);return t?.[n]},getIds(e){return this.receiver.getIds(e),e}}}ternary(e,t,n){return{type:`Ternary`,condition:e,trueExpr:t,falseExpr:n,evaluate(e){return this.condition.evaluate(e)?this.trueExpr.evaluate(e):this.falseExpr.evaluate(e)},getIds(e){return this.condition.getIds(e),this.trueExpr.getIds(e),this.falseExpr.getIds(e),e}}}map(e){return{type:`Map`,properties:e,evaluate(t){let n={};if(e&&this.properties)for(let e of this.properties)e.type===`SpreadProperty`?Object.assign(n,e.evaluate(t)):n[e.key]=e.value.evaluate(t);return n},getIds(t){if(e&&this.properties)for(let e of this.properties)e.type===`SpreadProperty`?e.expression.getIds(t):e.value.getIds(t);return t}}}property(e,t){return{type:`Property`,key:e,value:t,evaluate(e){return this.value.evaluate(e)},getIds(e){return this.value.getIds(e)}}}list(e){return{type:`List`,items:e,evaluate(e){if(!this.items)return[];let t=[];for(let n of this.items)if(n?.type===`SpreadElement`){let r=n.evaluate(e);r&&typeof r[Symbol.iterator]==`function`&&t.push(...r)}else t.push(n?.evaluate(e));return t},getIds(e){return this.items?.forEach(t=>{t?.getIds(e)}),e}}}arrowFunction(e,t){return{type:`ArrowFunction`,params:e,body:t,evaluate(e){let t=this.params,n=this.body;return function(...r){let i=Object.fromEntries(t.map((e,t)=>[e,r[t]])),a=this??e??{},o=new Proxy(a,{set(e,t,n){return Object.hasOwn(i,t)&&(i[t]=n),e[t]=n,n},get(e,t){return Object.hasOwn(i,t)?i[t]:e[t]}});return n.evaluate(o)}},getIds(e){return this.body.getIds(e).filter(e=>!this.params.includes(e))}}}spreadProperty(e){return{type:`SpreadProperty`,expression:e,evaluate(e){return this.expression.evaluate(e)},getIds(e){return this.expression.getIds(e)}}}spreadElement(e){return{type:`SpreadElement`,expression:e,evaluate(e){return this.expression.evaluate(e)},getIds(e){return this.expression.getIds(e)}}}};
37
+ let be=new Set([`this`,`typeof`]),xe=new Set([`in`]),Se=new Set([`+`,`-`,`!`,`typeof`]),Ce=new Set([`=`,`+`,`-`,`*`,`/`,`%`,`^`,`==`,`!=`,`>`,`<`,`>=`,`<=`,`||`,`&&`,`??`,`&`,`===`,`!==`,`|`,`in`]),R={"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":2,"??":3,"||":4,"&&":5,"|":6,"^":7,"&":8,"!=":9,"==":9,"!==":9,"===":9,">=":10,">":10,"<=":10,"<":10,in:10,"+":11,"-":11,"%":12,"/":12,"*":12,"(":13,"[":13,".":13,"?.":13,"{":13},we={"+":(e,t)=>e+t,"-":(e,t)=>e-t,"*":(e,t)=>e*t,"/":(e,t)=>e/t,"%":(e,t)=>e%t,"==":(e,t)=>e==t,"!=":(e,t)=>e!=t,"===":(e,t)=>e===t,"!==":(e,t)=>e!==t,">":(e,t)=>e>t,">=":(e,t)=>e>=t,"<":(e,t)=>e<t,"<=":(e,t)=>e<=t,"||":(e,t)=>e||t,"&&":(e,t)=>e&&t,"??":(e,t)=>e??t,"|":(e,t)=>t(e),in:(e,t)=>e in t},Te={"+":e=>e,"-":e=>-e,"!":e=>!e,typeof:e=>typeof e};var Ee=class{empty(){return{type:`Empty`,evaluate(e){return e},getIds(e){return e}}}literal(e){return{type:`Literal`,value:e,evaluate(e){return this.value},getIds(e){return e}}}id(e){return{type:`ID`,value:e,evaluate(e){return this.value===`this`?e:e?.[this.value]},getIds(e){return e.push(this.value),e}}}unary(e,t){let n=Te[e];return{type:`Unary`,operator:e,child:t,evaluate(e){return n(this.child.evaluate(e))},getIds(e){return this.child.getIds(e)}}}binary(e,t,n){let r=we[t];return{type:`Binary`,operator:t,left:e,right:n,evaluate(e){if(this.operator===`=`){if(this.left.type!==`ID`&&this.left.type!==`Getter`&&this.left.type!==`Index`)throw Error(`Invalid assignment target: ${this.left}`);let t=this.right.evaluate(e),n,r;return this.left.type===`Getter`?(n=this.left.receiver.evaluate(e),r=this.left.name):this.left.type===`Index`?(n=this.left.receiver.evaluate(e),r=String(this.left.argument.evaluate(e))):this.left.type===`ID`&&(n=e,r=this.left.value),n===void 0?void 0:(n[r]=t,t)}return r(this.left.evaluate(e),this.right.evaluate(e))},getIds(e){return this.left.getIds(e),this.right.getIds(e),e}}}getter(e,t,n){return{type:`Getter`,receiver:e,name:t,optional:n,evaluate(e){let t=this.receiver.evaluate(e);if(!(this.optional&&t==null))return t?.[this.name]},getIds(e){return this.receiver.getIds(e),e}}}invoke(e,t,n,r){if(t!=null&&typeof t!=`string`)throw Error(`method not a string`);return{type:`Invoke`,receiver:e,method:t,arguments:n,optional:r,evaluate(e){let t=this.receiver.evaluate(e);if(this.optional&&t==null)return;let n=this.method?t:e?.this??e,r=this.method?t?.[this.method]:t,i=this.arguments??[],a=[];for(let t of i)if(t?.type===`SpreadElement`){let n=t.evaluate(e);n&&typeof n[Symbol.iterator]==`function`&&a.push(...n)}else a.push(t?.evaluate(e));return r?.apply?.(n,a)},getIds(e){return this.receiver.getIds(e),this.arguments?.forEach(t=>{t?.getIds(e)}),e}}}paren(e){return e}index(e,t,n){return{type:`Index`,receiver:e,argument:t,optional:n,evaluate(e){let t=this.receiver.evaluate(e);if(this.optional&&t==null)return;let n=this.argument.evaluate(e);return t?.[n]},getIds(e){return this.receiver.getIds(e),e}}}ternary(e,t,n){return{type:`Ternary`,condition:e,trueExpr:t,falseExpr:n,evaluate(e){return this.condition.evaluate(e)?this.trueExpr.evaluate(e):this.falseExpr.evaluate(e)},getIds(e){return this.condition.getIds(e),this.trueExpr.getIds(e),this.falseExpr.getIds(e),e}}}map(e){return{type:`Map`,properties:e,evaluate(t){let n={};if(e&&this.properties)for(let e of this.properties)e.type===`SpreadProperty`?Object.assign(n,e.evaluate(t)):n[e.key]=e.value.evaluate(t);return n},getIds(t){if(e&&this.properties)for(let e of this.properties)e.type===`SpreadProperty`?e.expression.getIds(t):e.value.getIds(t);return t}}}property(e,t){return{type:`Property`,key:e,value:t,evaluate(e){return this.value.evaluate(e)},getIds(e){return this.value.getIds(e)}}}list(e){return{type:`List`,items:e,evaluate(e){if(!this.items)return[];let t=[];for(let n of this.items)if(n?.type===`SpreadElement`){let r=n.evaluate(e);r&&typeof r[Symbol.iterator]==`function`&&t.push(...r)}else t.push(n?.evaluate(e));return t},getIds(e){return this.items?.forEach(t=>{t?.getIds(e)}),e}}}arrowFunction(e,t){return{type:`ArrowFunction`,params:e,body:t,evaluate(e){let t=this.params,n=this.body;return function(...r){let i=Object.fromEntries(t.map((e,t)=>[e,r[t]])),a=this??e??{},o=new Proxy(a,{set(e,t,n){return Object.hasOwn(i,t)&&(i[t]=n),e[t]=n,n},get(e,t){return Object.hasOwn(i,t)?i[t]:e[t]}});return n.evaluate(o)}},getIds(e){return this.body.getIds(e).filter(e=>!this.params.includes(e))}}}spreadProperty(e){return{type:`SpreadProperty`,expression:e,evaluate(e){return this.expression.evaluate(e)},getIds(e){return this.expression.getIds(e)}}}spreadElement(e){return{type:`SpreadElement`,expression:e,evaluate(e){return this.expression.evaluate(e)},getIds(e){return this.expression.getIds(e)}}}};
37
38
  /*
38
39
  * @license
39
40
  * Portions Copyright (c) 2013, the Dart project authors.
40
41
  */
41
- let je=new Set([`==`,`!=`,`<=`,`>=`,`||`,`&&`,`??`,`?.`]),Me=new Set([`===`,`!==`]),P=function(e){return e[e.STRING=1]=`STRING`,e[e.IDENTIFIER=2]=`IDENTIFIER`,e[e.DOT=3]=`DOT`,e[e.COMMA=4]=`COMMA`,e[e.COLON=5]=`COLON`,e[e.INTEGER=6]=`INTEGER`,e[e.DECIMAL=7]=`DECIMAL`,e[e.OPERATOR=8]=`OPERATOR`,e[e.GROUPER=9]=`GROUPER`,e[e.KEYWORD=10]=`KEYWORD`,e[e.ARROW=11]=`ARROW`,e[e.OPTIONAL_DOT=12]=`OPTIONAL_DOT`,e[e.SPREAD=13]=`SPREAD`,e}({}),F=(e,t,n=0)=>({kind:e,value:t,precedence:n}),Ne=e=>e===9||e===10||e===13||e===32,Pe=e=>{if(e===95||e===36)return!0;let t=e&-33;return 65<=t&&t<=90},Fe=e=>Pe(e)||I(e),Ie=e=>we.has(e),Le=e=>e===34||e===39,I=e=>48<=e&&e<=57,Re=e=>e===43||e===45||e===42||e===47||e===33||e===38||e===37||e===60||e===61||e===62||e===63||e===94||e===124,ze=e=>e===40||e===41||e===91||e===93||e===123||e===125,Be=e=>e.replace(/\\(.)/g,(e,t)=>{switch(t){case`n`:return`
42
- `;case`r`:return`\r`;case`t`:return` `;case`b`:return`\b`;case`f`:return`\f`;default:return t}});var Ve=class{_input;_index=-1;_tokenStart=0;_next;constructor(e){this._input=e,this._advance()}nextToken(){for(;Ne(this._next??-1);)this._advance(!0);if(Le(this._next??-1))return this._tokenizeString();if(Pe(this._next??-1))return this._tokenizeIdentOrKeyword();if(I(this._next??-1))return this._tokenizeNumber();if(this._next===46)return this._tokenizeDot();if(this._next===44)return this._tokenizeComma();if(this._next===58)return this._tokenizeColon();if(Re(this._next??-1))return this._tokenizeOperator();if(ze(this._next??-1))return this._tokenizeGrouper();if(this._advance(),this._next!==void 0)throw Error(`Expected end of input, got ${this._next}`)}_advance(e){this._index++,this._index<this._input.length?(this._next=this._input.charCodeAt(this._index),e===!0&&(this._tokenStart=this._index)):this._next=void 0}_getValue(e=0){let t=this._input.substring(this._tokenStart,this._index+e);return e===0&&this._clearValue(),t}_clearValue(){this._tokenStart=this._index}_tokenizeString(){let e=this._next;for(this._advance(!0);this._next!==e;){if(this._next===void 0||this._next===92&&(this._advance(),this._next===void 0))throw Error(`unterminated string`);this._advance()}let t=F(P.STRING,Be(this._getValue()));return this._advance(),t}_tokenizeIdentOrKeyword(){do this._advance();while(Fe(this._next??-1));let e=this._getValue();return F(Ie(e)?P.KEYWORD:Te.has(e)?P.OPERATOR:P.IDENTIFIER,e,N[e]??0)}_tokenizeNumber(){do this._advance();while(I(this._next??-1));return this._next===46?this._tokenizeDot():F(P.INTEGER,this._getValue())}_tokenizeDot(){if(this._advance(),I(this._next??-1))return this._tokenizeFraction();if(this._next===46){if(this._advance(),this._next===46)return this._advance(),this._clearValue(),F(P.SPREAD,`...`);throw Error(`Unexpected token ..`)}return this._clearValue(),F(P.DOT,`.`,13)}_tokenizeComma(){return this._advance(!0),F(P.COMMA,`,`)}_tokenizeColon(){return this._advance(!0),F(P.COLON,`:`)}_tokenizeFraction(){do this._advance();while(I(this._next??-1));return F(P.DECIMAL,this._getValue())}_tokenizeOperator(){this._advance();let e=this._getValue(2);if(Me.has(e))this._advance(),this._advance();else{if(e=this._getValue(1),e===`=>`)return this._advance(),F(P.ARROW,e);je.has(e)&&this._advance()}return e=this._getValue(),e===`?.`?F(P.OPTIONAL_DOT,e,13):F(P.OPERATOR,e,N[e])}_tokenizeGrouper(){let e=String.fromCharCode(this._next??0),t=F(P.GROUPER,e,N[e]);return this._advance(!0),t}};let He=(e,t)=>new Ue(e,t).parse();var Ue=class{_kind;_tokenizer;_ast;_token;_value;constructor(e,t){this._tokenizer=new Ve(e),this._ast=t}parse(){this._advance();let e=this._parseExpression();if(this._token)throw Error(`Unexpected token: ${this._token.value}`);return e}_advance(e,t){if(!this._matches(e,t))throw Error(`Expected kind ${e} (${t}), was ${this._token?.kind} (${this._token?.value})`);let n=this._tokenizer.nextToken();this._token=n,this._kind=n?.kind,this._value=n?.value}_matches(e,t){return!(e&&this._kind!==e||t&&this._value!==t)}_parseExpression(){if(!this._token)return this._ast.empty();let e=this._parseUnary();return e===void 0?void 0:this._parsePrecedence(e,0)}_parsePrecedence(e,t){if(e===void 0)throw Error(`Expected left to be defined.`);for(;this._token;)if(this._matches(P.GROUPER,`(`)){let t=this._parseArguments();e=this._ast.invoke(e,void 0,t)}else if(this._matches(P.GROUPER,`[`)){let t=this._parseIndex();e=this._ast.index(e,t)}else if(this._matches(P.DOT)||this._matches(P.OPTIONAL_DOT)){let t=this._kind===P.OPTIONAL_DOT;if(this._advance(),t&&this._matches(P.GROUPER,`[`)){let t=this._parseIndex();e=this._ast.index(e,t,!0)}else if(t&&this._matches(P.GROUPER,`(`)){let t=this._parseArguments();e=this._ast.invoke(e,void 0,t,!0)}else{let n=this._parseUnary();e=this._makeInvokeOrGetter(e,n,t)}}else if(this._matches(P.KEYWORD))break;else if(this._matches(P.OPERATOR)&&this._token.precedence>=t)e=this._value===`?`?this._parseTernary(e):this._parseBinary(e,this._token);else break;return e}_makeInvokeOrGetter(e,t,n){if(t===void 0)throw Error(`expected identifier`);if(t.type===`ID`)return this._ast.getter(e,t.value,n);if(t.type===`Invoke`&&t.receiver.type===`ID`){let r=t.receiver;return this._ast.invoke(e,r.value,t.arguments,n)}else throw Error(`expected identifier: ${t}`)}_parseBinary(e,t){if(!De.has(t.value))throw Error(`unknown operator: ${t.value}`);this._advance();let n=this._parseUnary();for(;(this._kind===P.OPERATOR||this._kind===P.DOT||this._kind===P.GROUPER)&&this._token&&(this._token.precedence??0)>t.precedence;)n=this._parsePrecedence(n,this._token?.precedence??0);if(n===void 0)throw Error(`Expected expression after ${t.value}`);return this._ast.binary(e,t.value,n)}_parseUnary(){if(this._matches(P.KEYWORD,`typeof`)){this._advance();let e=this._parsePrecedence(this._parsePrimary(),13);return this._ast.unary(`typeof`,e)}if(this._matches(P.OPERATOR)){let e=this._value;if(this._advance(),e===`+`||e===`-`){if(this._matches(P.INTEGER))return this._parseInteger(e);if(this._matches(P.DECIMAL))return this._parseDecimal(e)}if(!e||!Ee.has(e))throw Error(`unexpected token: ${e}`);let t=this._parsePrecedence(this._parsePrimary(),13);return this._ast.unary(e,t)}return this._parsePrimary()}_parseTernary(e){this._advance(P.OPERATOR,`?`);let t=this._parseExpression();this._advance(P.COLON);let n=this._parseExpression();return this._ast.ternary(e,t,n)}_parsePrimary(){switch(this._kind){case P.KEYWORD:{let e=this._value??``;if(e===`this`)return this._advance(),this._ast.id(e);throw we.has(e)?Error(`unexpected keyword: ${e}`):Error(`unrecognized keyword: ${e}`)}case P.IDENTIFIER:return this._parseInvokeOrIdentifier();case P.STRING:return this._parseString();case P.INTEGER:return this._parseInteger();case P.DECIMAL:return this._parseDecimal();case P.GROUPER:return this._value===`(`?this._parseParenOrFunction():this._value===`{`?this._parseMap():this._value===`[`?this._parseList():void 0;case P.COLON:throw Error(`unexpected token ":"`);default:return}}_parseList(){let e=[];do{if(this._advance(),this._matches(P.GROUPER,`]`))break;if(this._matches(P.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadElement(t))}else e.push(this._parseExpression())}while(this._matches(P.COMMA));return this._advance(P.GROUPER,`]`),this._ast.list(e)}_parseMap(){let e=[];do{if(this._advance(),this._matches(P.GROUPER,`}`))break;if(this._matches(P.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadProperty(t))}else{let t=this._value??``;if((this._matches(P.STRING)||this._matches(P.IDENTIFIER))&&this._advance(),this._matches(P.COLON)){this._advance(P.COLON);let n=this._parseExpression();n&&e.push(this._ast.property(t,n))}else e.push(this._ast.property(t,this._ast.id(t)))}}while(this._matches(P.COMMA));return this._advance(P.GROUPER,`}`),this._ast.map(e)}_parseInvokeOrIdentifier(){let e=this._value;if(e===`true`)return this._advance(),this._ast.literal(!0);if(e===`false`)return this._advance(),this._ast.literal(!1);if(e===`null`)return this._advance(),this._ast.literal(null);if(e===`undefined`)return this._advance(),this._ast.literal(void 0);let t=this._parseIdentifier(),n=this._parseArguments();return n?this._ast.invoke(t,void 0,n):t}_parseIdentifier(){if(!this._matches(P.IDENTIFIER))throw Error(`expected identifier: ${this._value}`);let e=this._value;return this._advance(),this._ast.id(e??``)}_parseArguments(){if(!this._matches(P.GROUPER,`(`))return;let e=[];do{if(this._advance(),this._matches(P.GROUPER,`)`))break;if(this._matches(P.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadElement(t))}else{let t=this._parseExpression();e.push(t)}}while(this._matches(P.COMMA));return this._advance(P.GROUPER,`)`),e}_parseIndex(){this._advance();let e=this._parseExpression();return this._advance(P.GROUPER,`]`),e}_parseParenOrFunction(){let e=this._parseArguments();if(this._matches(P.ARROW)){this._advance();let t=this._parseExpression(),n=e?.map(e=>e.value)??[];return this._ast.arrowFunction(n,t)}else return this._ast.paren(e?.[0])}_parseString(){let e=this._ast.literal(this._value??``);return this._advance(),e}_parseInteger(e=``){let t=this._ast.literal(parseInt(`${e}${this._value}`,10));return this._advance(),t}_parseDecimal(e=``){let t=this._ast.literal(parseFloat(`${e}${this._value}`));return this._advance(),t}};let L=Symbol(`__computed__`);function We(e){return typeof e==`object`&&!!e&&L in e&&e[L]===!0}let Ge=new Ae,R=`__is_proxy__`;function Ke(e){return e instanceof Ye||e[R]===!0}function qe(e,t){let n=e?._store;if(n?.has(t))return n.get(t);if(n?.has(`$parent`))return qe(n.get(`$parent`),t)}function z(e,t){let n=e?._store;return n?.has(t)?e:n?.has(`$parent`)?z(n.get(`$parent`),t):null}function Je(e,t,n){let r=z(e,t);r?r._store.set(t,n):e._store.set(t,n)}var Ye=class e{evalkeys=[`$elem`,`$event`];expressionCache=new Map;observers=new Map;keyHandlers=new Map;_store=new Map;_lock=Promise.resolve();_notify=new Map;_computedDepth=0;constructor(e){for(let[t,n]of Object.entries(e||{}))this.set(t,n)}wrapObject(e,t){if(e==null||Ke(e)||Object.isFrozen(e)||Object.isSealed(e))return e;let n=Object.getPrototypeOf(e);return!(n===Object.prototype||n===null)&&!Array.isArray(e)?e:new Proxy(e,{deleteProperty:(e,n)=>typeof n==`string`&&n in e?(delete e[n],t(),!0):!1,set:(e,n,r,i)=>{if(Reflect.get(e,n,i)===r)return!0;typeof r==`object`&&r&&(r=this.wrapObject(r,t));let a=Reflect.set(e,n,r,i);return t(),a},get:(e,n,r)=>{if(n===R)return!0;let i=Reflect.get(e,n,r);if(typeof i==`object`&&i&&!Ke(i)){let a=this.wrapObject(i,t);if(a!==i)return Reflect.set(e,n,a,r),a}return i}})}watch(e,t){let n=z(this,e);if(!n)throw Error(`Cannot watch key "${e}" as it does not exist in the store.`);n.observers.has(e)||n.observers.set(e,new Set),Array.from(n.observers.get(e)||[]).some(e=>e.observer===t)||n.observers.get(e)?.add({observer:t,store:this})}addKeyHandler(e,t){this.keyHandlers.has(e)||this.keyHandlers.set(e,new Set),this.keyHandlers.get(e)?.add(t)}async notify(e,t=10){let n=z(this,e),r=Array.from(n?.observers.get(e)||[]),i=this._notify.get(e);if(i!==`executing`)return i&&clearTimeout(i),new Promise(i=>{this._notify.set(e,setTimeout(async()=>{this._notify.set(e,`executing`);try{await Promise.all(r.map(e=>e.observer.call(e.store.proxify(e.observer))))}finally{this._notify.delete(e)}let t=n?.observers.get(e);if(t)for(let e of r){let n=e.store._store.has(`$parent`),r=e.store._store.get(`$rootNode`);n&&r&&!r.isConnected&&t.delete(e)}i()},t))})}get(e,t){return t&&this.watch(e,t),qe(this,e)}setupComputed(e,t){let n=this;this.effect(function(){n._computedDepth++;try{let r=t.call(this,this);if(n._store.get(e)!==r){Je(n,e,r);let t=z(n,e),i=Array.from(t?.observers.get(e)||[]);for(let e of i)e.observer.call(e.store.proxify(e.observer))}}finally{n._computedDepth--}},{directive:`computed`,id:e})}async set(e,t,n){if(We(t)){this.setupComputed(e,t.fn);return}if(this._store.has(e)&&t===this._store.get(e))return;let r=()=>this.notify(e);if(t&&typeof t==`object`&&(t=this.wrapObject(t,r)),n?this._store.set(e,t):Je(this,e,t),!n){for(let[n,r]of this.keyHandlers.entries())if(n.test(e))for(let n of r)await Promise.resolve(n.call(this.$,e,t))}await r()}async del(e){await this.set(e,null),this._store.delete(e),this.observers.delete(e)}dispose(){for(let e of this.observers.values())e.clear();this.observers.clear();let e=this._store.get(`$parent`);for(;e;){for(let t of e.observers.values())for(let e of t)e.store===this&&t.delete(e);e=e._store.get(`$parent`)}}keys(){return Array.from(this._store.keys())}has(e){return this._store.has(e)}getObserverStats(){let e={},t=0;for(let[n,r]of this.observers)e[n]=r.size,t+=r.size;return{totalKeys:this.observers.size,totalObservers:t,byKey:e}}effect(e,t){return e.call(this.proxify(e))}$computed(e){return{[L]:!0,fn:e}}proxify(t){let n=Array.from(this._store.entries()).map(([e])=>e),r=Object.fromEntries(n.map(e=>[e,null])),i=(e,t,n)=>typeof e==`function`&&t!==`constructor`?(...t)=>e.call(n,...t):e;return new Proxy(r,{has:(e,t)=>typeof t==`string`&&(z(this,t)||Reflect.has(this,t))?!0:Reflect.has(r,t),get:(n,r,a)=>{if(typeof r==`string`){if(z(this,r)){let n=this.get(r,t);return t&&n instanceof e?n.proxify(t):i(n,r,a)}if(t&&r!==R&&!Reflect.has(this,r))return this.set(r,void 0),this.get(r,t)}return r===`$`?this.proxify(t):i(Reflect.get(this,r,a),r,a)},set:(e,t,n,r)=>(typeof t!=`string`||t in this?Reflect.set(this,t,n,r):(this._computedDepth>0&&console.warn(`[mancha] Computed wrote to '${t}'. Computeds should be pure; use $effect for side effects.`),this.set(t,n)),!0)})}get $(){return this.proxify()}makeEvalFunction(e){return(t,n)=>{let r=He(e,Ge),i=new Proxy(n,{has(e,n){return n in e||n in t||n in globalThis},get(e,n){if(typeof n==`string`)return n in e?e[n]:n in t?t[n]:n in globalThis?globalThis[n]:t[n]},set(e,n,r){return typeof n==`string`?n in e?(e[n]=r,!0):(t[n]=r,!0):!1}});return r?.evaluate(i)}}cachedExpressionFunction(e){e=e.trim(),this.expressionCache.has(e)||this.expressionCache.set(e,this.makeEvalFunction(e));let t=this.expressionCache.get(e);if(!t)throw Error(`Failed to retrieve cached expression: ${e}`);return t}eval(e,t={}){let n=this.$;if(this._store.has(e))return n[e];{let r=this.cachedExpressionFunction(e);try{return r(n,t)}catch(t){return console.error(`Failed to evaluate expression: ${e}`),console.error(t),null}}}$resolve(e,t){let n={$pending:!0,$result:null,$error:null};return Promise.resolve().then(()=>e(t)).then(e=>{n.$result=e}).catch(e=>{n.$error=e instanceof Error?e:Error(String(e))}).finally(()=>{n.$pending=!1}),n}},Xe=class e extends Ye{_debugLevel=`off`;dirpath=``;_perfData={lifecycle:{},effects:new Map};static DEBUG_LEVELS=[`off`,`lifecycle`,`effects`,`verbose`];_skipNodes=new Set;_customElements=new Map;_pendingValueRetries=[];debug(e){return typeof e==`boolean`?this._debugLevel=e?`lifecycle`:`off`:this._debugLevel=e,this}get debugging(){return this._debugLevel!==`off`}shouldLog(t){return e.DEBUG_LEVELS.indexOf(this._debugLevel)>=e.DEBUG_LEVELS.indexOf(t)}clearPerformanceReport(){this._perfData={lifecycle:{},effects:new Map}}getNodePath(e){let t=[],n=e;for(;n?.tagName;){let e=n.tagName.toLowerCase(),r=n.parentElement;if(r){let i=Array.from(r.children).filter(t=>t.tagName.toLowerCase()===e);if(i.length>1){let r=i.indexOf(n)+1;t.unshift(`${e}:nth-child(${r})`)}else t.unshift(e)}else t.unshift(e);n=r}return t.join(`>`)}buildObserverId(e){let t=e?.directive??`unknown`,n=O(e?.expression??``,32),r=e?.element,i=e?.id??(r?r.dataset?.perfid??r.id??r.dataset?.testid??this.getNodePath(r):`unknown`);return n?`${t}:${i}:${n}`:`${t}:${i}`}recordObserverExecution(e,t){let n=this.buildObserverId(e),r=this._perfData.effects.get(n)??{count:0,totalTime:0};r.count++,r.totalTime+=t,this._perfData.effects.set(n,r)}getPerformanceReport(){let e=Array.from(this._perfData.effects.entries()),t={};for(let[n,r]of e){let e=n.split(`:`)[0];t[e]||(t[e]={count:0,totalTime:0}),t[e].count+=r.count,t[e].totalTime+=r.totalTime}let n=e.map(([e,t])=>({id:e,executionCount:t.count,totalTime:t.totalTime,avgTime:t.count>0?t.totalTime/t.count:0})).sort((e,t)=>t.totalTime-e.totalTime).slice(0,10);return{lifecycle:this._perfData.lifecycle,effects:{total:e.length,byDirective:t,slowest:n},observers:this.getObserverStats()}}effect(e,t){let n=this;function r(){if(!n.shouldLog(`lifecycle`))return e.call(this);let r=performance.now(),i=e.call(this),a=performance.now()-r;return t&&n.recordObserverExecution(t,a),a>16&&console.warn(`[mancha] Slow observer (${a.toFixed(1)}ms):`,n.buildObserverId(t)),n.shouldLog(`effects`)&&console.debug(`[mancha] Observer (${a.toFixed(2)}ms):`,n.buildObserverId(t)),i}return super.effect(r,t)}async fetchRemote(e,t){return fetch(e,{cache:t?.cache??`default`}).then(e=>e.text())}async fetchLocal(e,t){return this.fetchRemote(e,t)}async preprocessString(e,t){this.log(`Preprocessing string content with params:
43
- `,t);let n=this.parseHTML(e,t);return await this.preprocessNode(n,t),n}async preprocessRemote(e,t){let n={};t?.cache&&(n.cache=t.cache);let r=await fetch(e,n).then(e=>e.text());return this.preprocessString(r,{...t,dirpath:A(e),rootDocument:t?.rootDocument??!e.endsWith(`.tpl.html`)})}async preprocessLocal(e,t){let n=await this.fetchLocal(e,t);return this.preprocessString(n,{...t,dirpath:A(e),rootDocument:t?.rootDocument??!e.endsWith(`.tpl.html`)})}subrenderer(){let e=new this.constructor().debug(this.debugging);return e._store.set(`$parent`,this),e._store.set(`$rootRenderer`,this.get(`$rootRenderer`)??this),e._customElements=this._customElements,e}log(...e){this.shouldLog(`verbose`)&&console.debug(...e)}async preprocessNode(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;t={dirpath:this.dirpath,maxdepth:10,...t};let r=new he(m(e,this._skipNodes)).map(async e=>{this.log(`Preprocessing node:
44
- `,k(e,128)),await j.resolveIncludes.call(this,e,t),await j.rebaseRelativePaths.call(this,e,t),await j.registerCustomElements.call(this,e,t),await j.resolveCustomElements.call(this,e,t)});return await Promise.all(r.generator()),n&&(this._perfData.lifecycle.preprocessTime=(this._perfData.lifecycle.preprocessTime??0)+(performance.now()-n)),e}async renderNode(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;for(let n of m(e,this._skipNodes))this.log(`Rendering node:
45
- `,k(n,128)),await j.resolveForAttribute.call(this,n,t),await j.resolveRenderAttribute.call(this,n,t),await j.resolveDataAttribute.call(this,n,t),await j.resolveTextAttributes.call(this,n,t),await j.resolveHtmlAttribute.call(this,n,t),await j.resolveIfAttribute.call(this,n,t),await j.resolveShowAttribute.call(this,n,t),await j.resolveClassAttribute.call(this,n,t),await j.resolveBindAttribute.call(this,n,t),await j.resolveEventAttributes.call(this,n,t),await j.resolveTextNodeExpressions.call(this,n,t),await j.resolveCustomAttribute.call(this,n,t),await j.resolveCustomProperty.call(this,n,t),await j.stripTypes.call(this,n,t);for(let e of this._pendingValueRetries.splice(0))e();return n&&(this._perfData.lifecycle.renderTime=(this._perfData.lifecycle.renderTime??0)+(performance.now()-n)),e}async mount(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;n&&this.clearPerformanceReport(),t={...t,rootNode:e},S(e,`renderer`,this),this._store.set(`$rootNode`,e),this.has(`$rootRenderer`)||this._store.set(`$rootRenderer`,this),this.get(`$rootRenderer`)===this&&await Ce(this),await this.preprocessNode(e,t),await this.renderNode(e,t),n&&(this._perfData.lifecycle.mountTime=performance.now()-n)}};function Ze(){return oe([p`*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}`,p`html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}`,p`body{margin:0;line-height:inherit}`,p`hr{height:0;color:inherit;border-top-width:1px}`,p`abbr:where([title]){text-decoration:underline dotted}`,p`b,strong{font-weight:bolder}`,p`code,kbd,samp,pre{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-size:1em}`,p`small{font-size:80%}`,p`sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}`,p`sub{bottom:-0.25em}`,p`sup{top:-0.5em}`,p`button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}`,p`button,select{text-transform:none}`,p`button,[type='button'],[type='reset'],[type='submit']{-webkit-appearance:button;background-color:transparent;background-image:none;cursor:pointer}`,p`:-moz-focusring{outline:auto}`,p`:-moz-ui-invalid{box-shadow:none}`,p`progress{vertical-align:baseline}`,p`::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}`,p`[type='search']{-webkit-appearance:textfield;outline-offset:-2px}`,p`::-webkit-search-decoration{-webkit-appearance:none}`,p`::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}`,p`summary{display:list-item}`,p`blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}`,p`fieldset{margin:0;padding:0}`,p`legend{padding:0}`,p`ol,ul,menu{list-style:none;margin:0;padding:0}`,p`textarea{resize:vertical}`,p`::placeholder{opacity:1;color:#9ca3af}`,p`button,[role="button"]{cursor:pointer}`,p`:disabled{cursor:default;pointer-events:none;opacity:0.75}`,p`img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}`,p`img,video{max-width:100%;height:auto}`,p`[hidden]{display:none}`,p`dialog{padding:0}`,p`dialog::backdrop{background:rgba(0,0,0,0.5)}`])}function Qe(){return oe([p`html{`,p`max-width: 70ch;`,p`padding: 2em 1em;`,p`margin: auto;`,p`line-height: 1.75;`,p`font-size: 1.25em;`,p`font-family: sans-serif;`,p`}`,p`h1,h2,h3,h4,h5,h6{`,p`margin: 1em 0 0.5em;`,p`}`,p`p,ul,ol{`,p`margin-bottom: 1em;`,p`color: #1d1d1d;`,p`}`])}let $e={sm:640,md:768,lg:1024,xl:1280},et=Object.entries($e),B=.25,V=[...Array(15)].map((e,t)=>t+1),tt=[16,20,24,28,32,36,40,48,56,64],nt=[72,80,96,128,160,192,256,320,384,512],H=[...V,...tt,...nt,...Object.values($e)],U=Array.from({length:20},(e,t)=>(t+1)*5),rt=[0,10,20,30,40,50,60,70,80,90,100],it=[25,50,75,100,150,200,300,500,700,1e3],at=[`hover`,`focus`,`disabled`],W={margin:`m`,padding:`p`},ot={width:`w`,height:`h`},st={top:`top`,right:`right`,bottom:`bottom`,left:`left`},ct={"min-width":`min-w`,"min-height":`min-h`,"max-width":`max-w`,"max-height":`max-h`},lt={"font-mono":{"font-family":`monospace`},"font-sans":{"font-family":`sans-serif`},"font-serif":{"font-family":`serif`},"font-cursive":{"font-family":`cursive`},"text-xs":{"font-size":`.75rem`,"line-height":`calc(1 / 0.75)`},"text-sm":{"font-size":`.875rem`,"line-height":`calc(1.25 / 0.875)`},"text-base":{"font-size":`1rem`,"line-height":`calc(1.5 / 1)`},"text-lg":{"font-size":`1.125rem`,"line-height":`calc(1.75 / 1.125)`},"text-xl":{"font-size":`1.25rem`,"line-height":`calc(1.75 / 1.25)`},"text-2xl":{"font-size":`1.5rem`,"line-height":`calc(2 / 1.5)`},"text-3xl":{"font-size":`1.875rem`,"line-height":`calc(2.25 / 1.875)`},"text-4xl":{"font-size":`2.25rem`,"line-height":`calc(2.5 / 2.25)`},"text-5xl":{"font-size":`3rem`,"line-height":`1`},"text-6xl":{"font-size":`3.75rem`,"line-height":`1`},"text-7xl":{"font-size":`4.5rem`,"line-height":`1`},"font-thin":{"font-weight":100},"font-extralight":{"font-weight":200},"font-light":{"font-weight":300},"font-normal":{"font-weight":400},"font-medium":{"font-weight":500},"font-semibold":{"font-weight":600},"font-bold":{"font-weight":700},"font-extrabold":{"font-weight":800},"font-black":{"font-weight":900},italic:{"font-style":`italic`},"not-italic":{"font-style":`normal`},"w-max":{width:`max-content`},"w-min":{width:`min-content`},"w-fit":{width:`fit-content`},"h-max":{height:`max-content`},"h-min":{height:`min-content`},"h-fit":{height:`fit-content`},"size-auto":{width:`auto`,height:`auto`},"size-px":{width:`1px`,height:`1px`},"size-full":{width:`100%`,height:`100%`},"size-dvw":{width:`100dvw`,height:`100dvw`},"size-dvh":{width:`100dvh`,height:`100dvh`},"size-lvw":{width:`100lvw`,height:`100lvw`},"size-lvh":{width:`100lvh`,height:`100lvh`},"size-svw":{width:`100svw`,height:`100svw`},"size-svh":{width:`100svh`,height:`100svh`},"size-min":{width:`min-content`,height:`min-content`},"size-max":{width:`max-content`,height:`max-content`},"size-fit":{width:`fit-content`,height:`fit-content`},"tracking-tighter":{"letter-spacing":`-0.05em`},"tracking-tight":{"letter-spacing":`-0.025em`},"tracking-normal":{"letter-spacing":`0`},"tracking-wide":{"letter-spacing":`0.025em`},"tracking-wider":{"letter-spacing":`0.05em`},"tracking-widest":{"letter-spacing":`0.1em`},"leading-none":{"line-height":`1`},"leading-tight":{"line-height":`1.25`},"leading-snug":{"line-height":`1.375`},"leading-normal":{"line-height":`1.5`},"leading-relaxed":{"line-height":`1.625`},"leading-loose":{"line-height":`2`},"text-left":{"text-align":`left`},"text-right":{"text-align":`right`},"text-center":{"text-align":`center`},"text-justify":{"text-align":`justify`},underline:{"text-decoration":`underline`},"no-underline":{"text-decoration":`none`},"decoration-none":{"text-decoration":`none`},"line-through":{"text-decoration":`line-through`},uppercase:{"text-transform":`uppercase`},lowercase:{"text-transform":`lowercase`},capitalize:{"text-transform":`capitalize`},truncate:{"white-space":`nowrap`,overflow:`hidden`,"text-overflow":`ellipsis`},"text-elipsis":{"text-overflow":`ellipsis`},"text-clip":{"text-overflow":`clip`},"text-wrap":{"text-wrap":`wrap`},"text-nowrap":{"text-wrap":`nowrap`},"text-balance":{"text-wrap":`balance`},"text-pretty":{"text-wrap":`pretty`},"whitespace-normal":{"white-space":`normal`},"whitespace-nowrap":{"white-space":`nowrap`},"whitespace-pre":{"white-space":`pre`},"whitespace-pre-line":{"white-space":`pre-line`},"whitespace-pre-wrap":{"white-space":`pre-wrap`},"whitespace-break-spaces":{"white-space":`break-spaces`},relative:{position:`relative`},fixed:{position:`fixed`},absolute:{position:`absolute`},sticky:{position:`sticky`},"object-contain":{"object-fit":`contain`},"object-cover":{"object-fit":`cover`},"object-fill":{"object-fit":`fill`},"object-none":{"object-fit":`none`},block:{display:`block`},contents:{display:`contents`},hidden:{display:`none`},inline:{display:`inline`},"inline-block":{display:`inline-block`},visible:{visibility:`visible`},invisible:{visibility:`hidden`},collapse:{visibility:`collapse`},"list-none":{"list-style-type":`none`},"list-disc":{"list-style-type":`disc`},"list-decimal":{"list-style-type":`decimal`},flex:{display:`flex`},grid:{display:`grid`},"flex-1":{flex:`1 1 0%`},"flex-inline":{display:`inline-flex`},"flex-row":{"flex-direction":`row`},"flex-col":{"flex-direction":`column`},"flex-row-reverse":{"flex-direction":`row-reverse`},"flex-col-reverse":{"flex-direction":`column-reverse`},"flex-wrap":{"flex-wrap":`wrap`},"flex-wrap-reverse":{"flex-wrap":`wrap-reverse`},"flex-nowrap":{"flex-wrap":`nowrap`},"justify-start":{"justify-content":`flex-start`},"justify-end":{"justify-content":`flex-end`},"justify-center":{"justify-content":`center`},"justify-between":{"justify-content":`space-between`},"justify-around":{"justify-content":`space-around`},"justify-evenly":{"justify-content":`space-evenly`},"justify-stretch":{"justify-content":`stretch`},"items-start":{"align-items":`flex-start`},"items-end":{"align-items":`flex-end`},"items-center":{"align-items":`center`},"items-stretch":{"align-items":`stretch`},"flex-grow":{"flex-grow":1},"flex-shrink":{"flex-shrink":1},"align-baseline":{"vertical-align":`baseline`},"align-top":{"vertical-align":`top`},"align-middle":{"vertical-align":`middle`},"align-bottom":{"vertical-align":`bottom`},"align-text-top":{"vertical-align":`text-top`},"align-text-bottom":{"vertical-align":`text-bottom`},"overflow-auto":{overflow:`auto`},"overflow-x-auto":{"overflow-x":`auto`},"overflow-y-auto":{"overflow-y":`auto`},"overflow-hidden":{overflow:`hidden`},"overflow-x-hidden":{"overflow-x":`hidden`},"overflow-y-hidden":{"overflow-y":`hidden`},"overflow-visible":{overflow:`visible`},"overscroll-auto":{"overscroll-behavior":`auto`},"overscroll-contain":{"overscroll-behavior":`contain`},"overscroll-none":{"overscroll-behavior":`none`},"overscroll-x-auto":{"overscroll-behavior-x":`auto`},"overscroll-x-contain":{"overscroll-behavior-x":`contain`},"overscroll-x-none":{"overscroll-behavior-x":`none`},"overscroll-y-auto":{"overscroll-behavior-y":`auto`},"overscroll-y-contain":{"overscroll-behavior-y":`contain`},"overscroll-y-none":{"overscroll-behavior-y":`none`},"z-auto":{"z-index":`auto`},"cursor-pointer":{cursor:`pointer`},"cursor-wait":{cursor:`wait`},"cursor-not-allowed":{cursor:`not-allowed`},"select-none":{"user-select":`none`},"select-all":{"user-select":`all`},"pointer-events-auto":{"pointer-events":`auto`},"pointer-events-none":{"pointer-events":`none`},"box-border":{"box-sizing":`border-box`},"box-content":{"box-sizing":`content-box`},resize:{resize:`both`},"resize-x":{resize:`horizontal`},"resize-y":{resize:`vertical`},"resize-none":{resize:`none`},"appearance-none":{appearance:`none`,"-webkit-appearance":`none`,"-moz-appearance":`none`},border:{border:`1px solid`},"border-none":{border:`none`},"border-solid":{"border-style":`solid`},"border-dashed":{"border-style":`dashed`},"border-dotted":{"border-style":`dotted`},"border-collapse":{"border-collapse":`collapse`},"rounded-none":{"border-radius":`0`},rounded:{"border-radius":`.25rem`},"rounded-sm":{"border-radius":`.125rem`},"rounded-md":{"border-radius":`.375rem`},"rounded-lg":{"border-radius":`.5rem`},"rounded-xl":{"border-radius":`.75rem`},"rounded-full":{"border-radius":`9999px`},"shadow-2xs":{"box-shadow":`0 1px rgb(0 0 0 / 0.05)`},"shadow-xs":{"box-shadow":`0 1px 2px 0 rgb(0 0 0 / 0.05)`},shadow:{"box-shadow":`0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)`},"shadow-sm":{"box-shadow":`0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)`},"shadow-md":{"box-shadow":`0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`},"shadow-lg":{"box-shadow":`0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)`},"shadow-xl":{"box-shadow":`0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)`},"shadow-2xl":{"box-shadow":`0 25px 50px -12px rgb(0 0 0 / 0.25)`},"shadow-inner":{"box-shadow":`inset 0 2px 4px 0 rgb(0 0 0 / 0.05)`},"shadow-none":{"box-shadow":`0 0 #0000`},ring:{"box-shadow":`var(--ring-inset, ) 0 0 0 3px rgb(59 130 246 / 0.5)`},"ring-0":{"box-shadow":`var(--ring-inset, ) 0 0 0 0px rgb(59 130 246 / 0.5)`},"ring-1":{"box-shadow":`var(--ring-inset, ) 0 0 0 1px rgb(59 130 246 / 0.5)`},"ring-2":{"box-shadow":`var(--ring-inset, ) 0 0 0 2px rgb(59 130 246 / 0.5)`},"ring-4":{"box-shadow":`var(--ring-inset, ) 0 0 0 4px rgb(59 130 246 / 0.5)`},"ring-8":{"box-shadow":`var(--ring-inset, ) 0 0 0 8px rgb(59 130 246 / 0.5)`},"ring-inset":{"--ring-inset":`inset`},outline:{"outline-style":`solid`},"outline-none":{outline:`2px solid transparent`,"outline-offset":`2px`},"outline-dashed":{"outline-style":`dashed`},"outline-dotted":{"outline-style":`dotted`},"outline-double":{"outline-style":`double`},"outline-0":{"outline-width":`0px`},"outline-1":{"outline-width":`1px`},"outline-2":{"outline-width":`2px`},"outline-4":{"outline-width":`4px`},"outline-8":{"outline-width":`8px`},"outline-offset-0":{"outline-offset":`0px`},"outline-offset-1":{"outline-offset":`1px`},"outline-offset-2":{"outline-offset":`2px`},"outline-offset-4":{"outline-offset":`4px`},"outline-offset-8":{"outline-offset":`8px`},"aspect-auto":{"aspect-ratio":`auto`},"aspect-square":{"aspect-ratio":`1 / 1`},"aspect-video":{"aspect-ratio":`16 / 9`},"backdrop-blur-none":{"backdrop-filter":`blur(0)`},"backdrop-blur-sm":{"backdrop-filter":`blur(4px)`},"backdrop-blur":{"backdrop-filter":`blur(8px)`},"backdrop-blur-md":{"backdrop-filter":`blur(12px)`},"backdrop-blur-lg":{"backdrop-filter":`blur(16px)`},"backdrop-blur-xl":{"backdrop-filter":`blur(24px)`},"backdrop-blur-2xl":{"backdrop-filter":`blur(40px)`},"backdrop-blur-3xl":{"backdrop-filter":`blur(64px)`},"transition-none":{transition:`none`},transition:{"transition-property":`all`,"transition-timing-function":`ease-in-out`,"transition-duration":`var(--transition-duration, 150ms)`},"animate-none":{animation:`none`},"animate-spin":{animation:`spin 1s linear infinite`},"animate-ping":{animation:`ping 1s cubic-bezier(0, 0, 0.2, 1) infinite`},"animate-pulse":{animation:`pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite`},"bg-auto":{"background-size":`auto`},"bg-cover":{"background-size":`cover`},"bg-contain":{"background-size":`contain`},"bg-no-repeat":{"background-repeat":`no-repeat`},"bg-fixed":{"background-attachment":`fixed`},"bg-local":{"background-attachment":`local`},"bg-scroll":{"background-attachment":`scroll`},"min-h-screen":{"min-height":`100vh`},"max-h-screen":{"max-height":`100vh`},"min-w-screen":{"min-width":`100vw`},"h-dvh":{height:`100dvh`},"h-svh":{height:`100svh`},"h-lvh":{height:`100lvh`},"w-dvw":{width:`100dvw`},"w-svw":{width:`100svw`},"w-lvw":{width:`100lvw`},"min-h-dvh":{"min-height":`100dvh`},"min-h-svh":{"min-height":`100svh`},"min-h-lvh":{"min-height":`100lvh`},"flex-none":{flex:`none`},"flex-auto":{flex:`1 1 auto`},"flex-initial":{flex:`0 1 auto`},grow:{"flex-grow":`1`},"grow-0":{"flex-grow":`0`},shrink:{"flex-shrink":`1`},"shrink-0":{"flex-shrink":`0`},"self-auto":{"align-self":`auto`},"self-start":{"align-self":`flex-start`},"self-end":{"align-self":`flex-end`},"self-center":{"align-self":`center`},"self-stretch":{"align-self":`stretch`},"self-baseline":{"align-self":`baseline`},"content-normal":{"align-content":`normal`},"content-start":{"align-content":`flex-start`},"content-end":{"align-content":`flex-end`},"content-center":{"align-content":`center`},"content-between":{"align-content":`space-between`},"content-around":{"align-content":`space-around`},"content-evenly":{"align-content":`space-evenly`},"content-stretch":{"align-content":`stretch`},"items-baseline":{"align-items":`baseline`},"inset-0":{inset:`0`},"inset-auto":{inset:`auto`},"inset-x-0":{left:`0`,right:`0`},"inset-y-0":{top:`0`,bottom:`0`},"inset-x-auto":{left:`auto`,right:`auto`},"inset-y-auto":{top:`auto`,bottom:`auto`},"sr-only":{position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,"white-space":`nowrap`,"border-width":`0`},"not-sr-only":{position:`static`,width:`auto`,height:`auto`,padding:`0`,margin:`0`,overflow:`visible`,clip:`auto`,"white-space":`normal`}},ut=[`@keyframes spin {
42
+ let De=new Set([`==`,`!=`,`<=`,`>=`,`||`,`&&`,`??`,`?.`]),Oe=new Set([`===`,`!==`]),z=function(e){return e[e.STRING=1]=`STRING`,e[e.IDENTIFIER=2]=`IDENTIFIER`,e[e.DOT=3]=`DOT`,e[e.COMMA=4]=`COMMA`,e[e.COLON=5]=`COLON`,e[e.INTEGER=6]=`INTEGER`,e[e.DECIMAL=7]=`DECIMAL`,e[e.OPERATOR=8]=`OPERATOR`,e[e.GROUPER=9]=`GROUPER`,e[e.KEYWORD=10]=`KEYWORD`,e[e.ARROW=11]=`ARROW`,e[e.OPTIONAL_DOT=12]=`OPTIONAL_DOT`,e[e.SPREAD=13]=`SPREAD`,e}({}),B=(e,t,n=0)=>({kind:e,value:t,precedence:n}),ke=e=>e===9||e===10||e===13||e===32,Ae=e=>{if(e===95||e===36)return!0;let t=e&-33;return 65<=t&&t<=90},je=e=>Ae(e)||V(e),Me=e=>be.has(e),Ne=e=>e===34||e===39,V=e=>48<=e&&e<=57,Pe=e=>e===43||e===45||e===42||e===47||e===33||e===38||e===37||e===60||e===61||e===62||e===63||e===94||e===124,Fe=e=>e===40||e===41||e===91||e===93||e===123||e===125,Ie=e=>e.replace(/\\(.)/g,(e,t)=>{switch(t){case`n`:return`
43
+ `;case`r`:return`\r`;case`t`:return` `;case`b`:return`\b`;case`f`:return`\f`;default:return t}});var Le=class{_input;_index=-1;_tokenStart=0;_next;constructor(e){this._input=e,this._advance()}nextToken(){for(;ke(this._next??-1);)this._advance(!0);if(Ne(this._next??-1))return this._tokenizeString();if(Ae(this._next??-1))return this._tokenizeIdentOrKeyword();if(V(this._next??-1))return this._tokenizeNumber();if(this._next===46)return this._tokenizeDot();if(this._next===44)return this._tokenizeComma();if(this._next===58)return this._tokenizeColon();if(Pe(this._next??-1))return this._tokenizeOperator();if(Fe(this._next??-1))return this._tokenizeGrouper();if(this._advance(),this._next!==void 0)throw Error(`Expected end of input, got ${this._next}`)}_advance(e){this._index++,this._index<this._input.length?(this._next=this._input.charCodeAt(this._index),e===!0&&(this._tokenStart=this._index)):this._next=void 0}_getValue(e=0){let t=this._input.substring(this._tokenStart,this._index+e);return e===0&&this._clearValue(),t}_clearValue(){this._tokenStart=this._index}_tokenizeString(){let e=this._next;for(this._advance(!0);this._next!==e;){if(this._next===void 0||this._next===92&&(this._advance(),this._next===void 0))throw Error(`unterminated string`);this._advance()}let t=B(z.STRING,Ie(this._getValue()));return this._advance(),t}_tokenizeIdentOrKeyword(){do this._advance();while(je(this._next??-1));let e=this._getValue();return B(Me(e)?z.KEYWORD:xe.has(e)?z.OPERATOR:z.IDENTIFIER,e,R[e]??0)}_tokenizeNumber(){do this._advance();while(V(this._next??-1));return this._next===46?this._tokenizeDot():B(z.INTEGER,this._getValue())}_tokenizeDot(){if(this._advance(),V(this._next??-1))return this._tokenizeFraction();if(this._next===46){if(this._advance(),this._next===46)return this._advance(),this._clearValue(),B(z.SPREAD,`...`);throw Error(`Unexpected token ..`)}return this._clearValue(),B(z.DOT,`.`,13)}_tokenizeComma(){return this._advance(!0),B(z.COMMA,`,`)}_tokenizeColon(){return this._advance(!0),B(z.COLON,`:`)}_tokenizeFraction(){do this._advance();while(V(this._next??-1));return B(z.DECIMAL,this._getValue())}_tokenizeOperator(){this._advance();let e=this._getValue(2);if(Oe.has(e))this._advance(),this._advance();else{if(e=this._getValue(1),e===`=>`)return this._advance(),B(z.ARROW,e);De.has(e)&&this._advance()}return e=this._getValue(),e===`?.`?B(z.OPTIONAL_DOT,e,13):B(z.OPERATOR,e,R[e])}_tokenizeGrouper(){let e=String.fromCharCode(this._next??0),t=B(z.GROUPER,e,R[e]);return this._advance(!0),t}};let Re=(e,t)=>new ze(e,t).parse();var ze=class{_kind;_tokenizer;_ast;_token;_value;constructor(e,t){this._tokenizer=new Le(e),this._ast=t}parse(){this._advance();let e=this._parseExpression();if(this._token)throw Error(`Unexpected token: ${this._token.value}`);return e}_advance(e,t){if(!this._matches(e,t))throw Error(`Expected kind ${e} (${t}), was ${this._token?.kind} (${this._token?.value})`);let n=this._tokenizer.nextToken();this._token=n,this._kind=n?.kind,this._value=n?.value}_matches(e,t){return!(e&&this._kind!==e||t&&this._value!==t)}_parseExpression(){if(!this._token)return this._ast.empty();let e=this._parseUnary();return e===void 0?void 0:this._parsePrecedence(e,0)}_parsePrecedence(e,t){if(e===void 0)throw Error(`Expected left to be defined.`);for(;this._token;)if(this._matches(z.GROUPER,`(`)){let t=this._parseArguments();e=this._ast.invoke(e,void 0,t)}else if(this._matches(z.GROUPER,`[`)){let t=this._parseIndex();e=this._ast.index(e,t)}else if(this._matches(z.DOT)||this._matches(z.OPTIONAL_DOT)){let t=this._kind===z.OPTIONAL_DOT;if(this._advance(),t&&this._matches(z.GROUPER,`[`)){let t=this._parseIndex();e=this._ast.index(e,t,!0)}else if(t&&this._matches(z.GROUPER,`(`)){let t=this._parseArguments();e=this._ast.invoke(e,void 0,t,!0)}else{let n=this._parseUnary();e=this._makeInvokeOrGetter(e,n,t)}}else if(this._matches(z.KEYWORD))break;else if(this._matches(z.OPERATOR)&&this._token.precedence>=t)e=this._value===`?`?this._parseTernary(e):this._parseBinary(e,this._token);else break;return e}_makeInvokeOrGetter(e,t,n){if(t===void 0)throw Error(`expected identifier`);if(t.type===`ID`)return this._ast.getter(e,t.value,n);if(t.type===`Invoke`&&t.receiver.type===`ID`){let r=t.receiver;return this._ast.invoke(e,r.value,t.arguments,n)}else throw Error(`expected identifier: ${t}`)}_parseBinary(e,t){if(!Ce.has(t.value))throw Error(`unknown operator: ${t.value}`);this._advance();let n=this._parseUnary();for(;(this._kind===z.OPERATOR||this._kind===z.DOT||this._kind===z.GROUPER)&&this._token&&(this._token.precedence??0)>t.precedence;)n=this._parsePrecedence(n,this._token?.precedence??0);if(n===void 0)throw Error(`Expected expression after ${t.value}`);return this._ast.binary(e,t.value,n)}_parseUnary(){if(this._matches(z.KEYWORD,`typeof`)){this._advance();let e=this._parsePrecedence(this._parsePrimary(),13);return this._ast.unary(`typeof`,e)}if(this._matches(z.OPERATOR)){let e=this._value;if(this._advance(),e===`+`||e===`-`){if(this._matches(z.INTEGER))return this._parseInteger(e);if(this._matches(z.DECIMAL))return this._parseDecimal(e)}if(!e||!Se.has(e))throw Error(`unexpected token: ${e}`);let t=this._parsePrecedence(this._parsePrimary(),13);return this._ast.unary(e,t)}return this._parsePrimary()}_parseTernary(e){this._advance(z.OPERATOR,`?`);let t=this._parseExpression();this._advance(z.COLON);let n=this._parseExpression();return this._ast.ternary(e,t,n)}_parsePrimary(){switch(this._kind){case z.KEYWORD:{let e=this._value??``;if(e===`this`)return this._advance(),this._ast.id(e);throw be.has(e)?Error(`unexpected keyword: ${e}`):Error(`unrecognized keyword: ${e}`)}case z.IDENTIFIER:return this._parseInvokeOrIdentifier();case z.STRING:return this._parseString();case z.INTEGER:return this._parseInteger();case z.DECIMAL:return this._parseDecimal();case z.GROUPER:return this._value===`(`?this._parseParenOrFunction():this._value===`{`?this._parseMap():this._value===`[`?this._parseList():void 0;case z.COLON:throw Error(`unexpected token ":"`);default:return}}_parseList(){let e=[];do{if(this._advance(),this._matches(z.GROUPER,`]`))break;if(this._matches(z.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadElement(t))}else e.push(this._parseExpression())}while(this._matches(z.COMMA));return this._advance(z.GROUPER,`]`),this._ast.list(e)}_parseMap(){let e=[];do{if(this._advance(),this._matches(z.GROUPER,`}`))break;if(this._matches(z.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadProperty(t))}else{let t=this._value??``;if((this._matches(z.STRING)||this._matches(z.IDENTIFIER))&&this._advance(),this._matches(z.COLON)){this._advance(z.COLON);let n=this._parseExpression();n&&e.push(this._ast.property(t,n))}else e.push(this._ast.property(t,this._ast.id(t)))}}while(this._matches(z.COMMA));return this._advance(z.GROUPER,`}`),this._ast.map(e)}_parseInvokeOrIdentifier(){let e=this._value;if(e===`true`)return this._advance(),this._ast.literal(!0);if(e===`false`)return this._advance(),this._ast.literal(!1);if(e===`null`)return this._advance(),this._ast.literal(null);if(e===`undefined`)return this._advance(),this._ast.literal(void 0);let t=this._parseIdentifier(),n=this._parseArguments();return n?this._ast.invoke(t,void 0,n):t}_parseIdentifier(){if(!this._matches(z.IDENTIFIER))throw Error(`expected identifier: ${this._value}`);let e=this._value;return this._advance(),this._ast.id(e??``)}_parseArguments(){if(!this._matches(z.GROUPER,`(`))return;let e=[];do{if(this._advance(),this._matches(z.GROUPER,`)`))break;if(this._matches(z.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadElement(t))}else{let t=this._parseExpression();e.push(t)}}while(this._matches(z.COMMA));return this._advance(z.GROUPER,`)`),e}_parseIndex(){this._advance();let e=this._parseExpression();return this._advance(z.GROUPER,`]`),e}_parseParenOrFunction(){let e=this._parseArguments();if(this._matches(z.ARROW)){this._advance();let t=this._parseExpression(),n=e?.map(e=>e.value)??[];return this._ast.arrowFunction(n,t)}else return this._ast.paren(e?.[0])}_parseString(){let e=this._ast.literal(this._value??``);return this._advance(),e}_parseInteger(e=``){let t=this._ast.literal(parseInt(`${e}${this._value}`,10));return this._advance(),t}_parseDecimal(e=``){let t=this._ast.literal(parseFloat(`${e}${this._value}`));return this._advance(),t}};let H=Symbol(`__computed__`);function Be(e){return typeof e==`object`&&!!e&&H in e&&e[H]===!0}let Ve=new Ee,U=`__is_proxy__`;function He(e){return e instanceof Ge||e[U]===!0}function Ue(e,t){let n=e?._store;if(n?.has(t))return n.get(t);if(n?.has(`$parent`))return Ue(n.get(`$parent`),t)}function W(e,t){let n=e?._store;return n?.has(t)?e:n?.has(`$parent`)?W(n.get(`$parent`),t):null}function We(e,t,n){let r=W(e,t);r?r._store.set(t,n):e._store.set(t,n)}var Ge=class e{evalkeys=[`$elem`,`$event`];expressionCache=new Map;observers=new Map;keyHandlers=new Map;_store=new Map;_lock=Promise.resolve();_notify=new Map;_computedDepth=0;constructor(e){for(let[t,n]of Object.entries(e||{}))this.set(t,n)}wrapObject(e,t){if(e==null||He(e)||Object.isFrozen(e)||Object.isSealed(e))return e;let n=Object.getPrototypeOf(e);return!(n===Object.prototype||n===null)&&!Array.isArray(e)?e:new Proxy(e,{deleteProperty:(e,n)=>typeof n==`string`&&n in e?(delete e[n],t(),!0):!1,set:(e,n,r,i)=>{if(Reflect.get(e,n,i)===r)return!0;typeof r==`object`&&r&&(r=this.wrapObject(r,t));let a=Reflect.set(e,n,r,i);return t(),a},get:(e,n,r)=>{if(n===U)return!0;let i=Reflect.get(e,n,r);if(typeof i==`object`&&i&&!He(i)){let a=this.wrapObject(i,t);if(a!==i)return Reflect.set(e,n,a,r),a}return i}})}watch(e,t){let n=W(this,e);if(!n)throw Error(`Cannot watch key "${e}" as it does not exist in the store.`);n.observers.has(e)||n.observers.set(e,new Set),Array.from(n.observers.get(e)||[]).some(e=>e.observer===t)||n.observers.get(e)?.add({observer:t,store:this})}addKeyHandler(e,t){this.keyHandlers.has(e)||this.keyHandlers.set(e,new Set),this.keyHandlers.get(e)?.add(t)}async notify(e,t=10){let n=W(this,e),r=Array.from(n?.observers.get(e)||[]),i=this._notify.get(e);if(i!==`executing`)return i&&clearTimeout(i),new Promise(i=>{this._notify.set(e,setTimeout(async()=>{this._notify.set(e,`executing`);try{await Promise.all(r.map(e=>e.observer.call(e.store.proxify(e.observer))))}finally{this._notify.delete(e)}let t=n?.observers.get(e);if(t)for(let e of r){let n=e.store._store.has(`$parent`),r=e.store._store.get(`$rootNode`);n&&r&&!r.isConnected&&t.delete(e)}i()},t))})}get(e,t){return t&&this.watch(e,t),Ue(this,e)}setupComputed(e,t){let n=this;this.effect(function(){n._computedDepth++;try{let r=t.call(this,this);if(n._store.get(e)!==r){We(n,e,r);let t=W(n,e),i=Array.from(t?.observers.get(e)||[]);for(let e of i)e.observer.call(e.store.proxify(e.observer))}}finally{n._computedDepth--}},{directive:`computed`,id:e})}async set(e,t,n){if(Be(t)){this.setupComputed(e,t.fn);return}if(this._store.has(e)&&t===this._store.get(e))return;let r=()=>this.notify(e);if(t&&typeof t==`object`&&(t=this.wrapObject(t,r)),n?this._store.set(e,t):We(this,e,t),!n){for(let[n,r]of this.keyHandlers.entries())if(n.test(e))for(let n of r)await Promise.resolve(n.call(this.$,e,t))}await r()}async del(e){await this.set(e,null),this._store.delete(e),this.observers.delete(e)}dispose(){for(let e of this.observers.values())e.clear();this.observers.clear();let e=this._store.get(`$parent`);for(;e;){for(let t of e.observers.values())for(let e of t)e.store===this&&t.delete(e);e=e._store.get(`$parent`)}}keys(){return Array.from(this._store.keys())}has(e){return this._store.has(e)}getObserverStats(){let e={},t=0;for(let[n,r]of this.observers)e[n]=r.size,t+=r.size;return{totalKeys:this.observers.size,totalObservers:t,byKey:e}}effect(e,t){return e.call(this.proxify(e))}$computed(e){return{[H]:!0,fn:e}}proxify(t){let n=Array.from(this._store.entries()).map(([e])=>e),r=Object.fromEntries(n.map(e=>[e,null])),i=(e,t,n)=>typeof e==`function`&&t!==`constructor`?(...t)=>e.call(n,...t):e;return new Proxy(r,{has:(e,t)=>typeof t==`string`&&(W(this,t)||Reflect.has(this,t))?!0:Reflect.has(r,t),get:(n,r,a)=>{if(typeof r==`string`){if(W(this,r)){let n=this.get(r,t);return t&&n instanceof e?n.proxify(t):i(n,r,a)}if(t&&r!==U&&!Reflect.has(this,r))return this.set(r,void 0),this.get(r,t)}return r===`$`?this.proxify(t):i(Reflect.get(this,r,a),r,a)},set:(e,t,n,r)=>(typeof t!=`string`||t in this?Reflect.set(this,t,n,r):(this._computedDepth>0&&console.warn(`[mancha] Computed wrote to '${t}'. Computeds should be pure; use $effect for side effects.`),this.set(t,n)),!0)})}get $(){return this.proxify()}makeEvalFunction(e){return(t,n)=>{let r=Re(e,Ve),i=new Proxy(n,{has(e,n){return n in e||n in t||n in globalThis},get(e,n){if(typeof n==`string`)return n in e?e[n]:n in t?t[n]:n in globalThis?globalThis[n]:t[n]},set(e,n,r){return typeof n==`string`?n in e?(e[n]=r,!0):(t[n]=r,!0):!1}});return r?.evaluate(i)}}cachedExpressionFunction(e){e=e.trim(),this.expressionCache.has(e)||this.expressionCache.set(e,this.makeEvalFunction(e));let t=this.expressionCache.get(e);if(!t)throw Error(`Failed to retrieve cached expression: ${e}`);return t}eval(e,t={}){let n=this.$;if(this._store.has(e))return n[e];{let r=this.cachedExpressionFunction(e);try{return r(n,t)}catch(t){return console.error(`Failed to evaluate expression: ${e}`),console.error(t),null}}}$resolve(e,t){let n={$pending:!0,$result:null,$error:null};return Promise.resolve().then(()=>e(t)).then(e=>{n.$result=e}).catch(e=>{n.$error=e instanceof Error?e:Error(String(e))}).finally(()=>{n.$pending=!1}),n}},Ke=class e extends Ge{_debugLevel=`off`;dirpath=``;_perfData={lifecycle:{},effects:new Map};static DEBUG_LEVELS=[`off`,`lifecycle`,`effects`,`verbose`];_skipNodes=new Set;_customElements=new Map;_pendingValueRetries=[];debug(e){return typeof e==`boolean`?this._debugLevel=e?`lifecycle`:`off`:this._debugLevel=e,this}get debugging(){return this._debugLevel!==`off`}shouldLog(t){return e.DEBUG_LEVELS.indexOf(this._debugLevel)>=e.DEBUG_LEVELS.indexOf(t)}clearPerformanceReport(){this._perfData={lifecycle:{},effects:new Map}}getNodePath(e){let t=[],n=e;for(;n?.tagName;){let e=n.tagName.toLowerCase(),r=n.parentElement;if(r){let i=Array.from(r.children).filter(t=>t.tagName.toLowerCase()===e);if(i.length>1){let r=i.indexOf(n)+1;t.unshift(`${e}:nth-child(${r})`)}else t.unshift(e)}else t.unshift(e);n=r}return t.join(`>`)}buildObserverId(e){let t=e?.directive??`unknown`,n=ce(e?.expression??``,32),r=e?.element,i=e?.id??(r?r.dataset?.perfid??r.id??r.dataset?.testid??this.getNodePath(r):`unknown`);return n?`${t}:${i}:${n}`:`${t}:${i}`}recordObserverExecution(e,t){let n=this.buildObserverId(e),r=this._perfData.effects.get(n)??{count:0,totalTime:0};r.count++,r.totalTime+=t,this._perfData.effects.set(n,r)}getPerformanceReport(){let e=Array.from(this._perfData.effects.entries()),t={};for(let[n,r]of e){let e=n.split(`:`)[0];t[e]||(t[e]={count:0,totalTime:0}),t[e].count+=r.count,t[e].totalTime+=r.totalTime}let n=e.map(([e,t])=>({id:e,executionCount:t.count,totalTime:t.totalTime,avgTime:t.count>0?t.totalTime/t.count:0})).sort((e,t)=>t.totalTime-e.totalTime).slice(0,10);return{lifecycle:this._perfData.lifecycle,effects:{total:e.length,byDirective:t,slowest:n},observers:this.getObserverStats()}}effect(e,t){let n=this;function r(){if(!n.shouldLog(`lifecycle`))return e.call(this);let r=performance.now(),i=e.call(this),a=performance.now()-r;return t&&n.recordObserverExecution(t,a),a>16&&console.warn(`[mancha] Slow observer (${a.toFixed(1)}ms):`,n.buildObserverId(t)),n.shouldLog(`effects`)&&console.debug(`[mancha] Observer (${a.toFixed(2)}ms):`,n.buildObserverId(t)),i}return super.effect(r,t)}async fetchRemote(e,t){return fetch(e,{cache:t?.cache??`default`}).then(e=>e.text())}async fetchLocal(e,t){return this.fetchRemote(e,t)}async preprocessString(e,t){this.log(`Preprocessing string content with params:
44
+ `,t);let n=this.parseHTML(e,t);return await this.preprocessNode(n,t),n}async preprocessRemote(e,t){let n={};t?.cache&&(n.cache=t.cache);let r=await fetch(e,n).then(e=>e.text());return this.preprocessString(r,{...t,dirpath:le(e),rootDocument:t?.rootDocument??!e.endsWith(`.tpl.html`)})}async preprocessLocal(e,t){let n=await this.fetchLocal(e,t);return this.preprocessString(n,{...t,dirpath:le(e),rootDocument:t?.rootDocument??!e.endsWith(`.tpl.html`)})}subrenderer(){let e=new this.constructor().debug(this.debugging);return e._store.set(`$parent`,this),e._store.set(`$rootRenderer`,this.get(`$rootRenderer`)??this),e._customElements=this._customElements,e}log(...e){this.shouldLog(`verbose`)&&console.debug(...e)}async preprocessNode(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;t={dirpath:this.dirpath,maxdepth:10,...t};let r=new de(x(e,this._skipNodes)).map(async e=>{this.log(`Preprocessing node:
45
+ `,F(e,128)),await I.resolveIncludes.call(this,e,t),await I.rebaseRelativePaths.call(this,e,t),await I.registerCustomElements.call(this,e,t),await I.resolveCustomElements.call(this,e,t)});return await Promise.all(r.generator()),n&&(this._perfData.lifecycle.preprocessTime=(this._perfData.lifecycle.preprocessTime??0)+(performance.now()-n)),e}async renderNode(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;for(let n of x(e,this._skipNodes))this.log(`Rendering node:
46
+ `,F(n,128)),await I.resolveForAttribute.call(this,n,t),await I.resolveRenderAttribute.call(this,n,t),await I.resolveDataAttribute.call(this,n,t),await I.resolveTextAttributes.call(this,n,t),await I.resolveHtmlAttribute.call(this,n,t),await I.resolveIfAttribute.call(this,n,t),await I.resolveShowAttribute.call(this,n,t),await I.resolveClassAttribute.call(this,n,t),await I.resolveBindAttribute.call(this,n,t),await I.resolveEventAttributes.call(this,n,t),await I.resolveTextNodeExpressions.call(this,n,t),await I.resolveCustomAttribute.call(this,n,t),await I.resolveCustomProperty.call(this,n,t),await I.stripTypes.call(this,n,t);for(let e of this._pendingValueRetries.splice(0))e();return n&&(this._perfData.lifecycle.renderTime=(this._perfData.lifecycle.renderTime??0)+(performance.now()-n)),e}async mount(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;n&&this.clearPerformanceReport(),t={...t,rootNode:e},O(e,`renderer`,this),this._store.set(`$rootNode`,e),this.has(`$rootRenderer`)||this._store.set(`$rootRenderer`,this),this.get(`$rootRenderer`)===this&&await ye(this),await this.preprocessNode(e,t),await this.renderNode(e,t),n&&(this._perfData.lifecycle.mountTime=performance.now()-n)}};function qe(){return ee([y`*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}`,y`html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}`,y`body{margin:0;line-height:inherit}`,y`hr{height:0;color:inherit;border-top-width:1px}`,y`abbr:where([title]){text-decoration:underline dotted}`,y`b,strong{font-weight:bolder}`,y`code,kbd,samp,pre{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-size:1em}`,y`small{font-size:80%}`,y`sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}`,y`sub{bottom:-0.25em}`,y`sup{top:-0.5em}`,y`button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}`,y`button,select{text-transform:none}`,y`button,[type='button'],[type='reset'],[type='submit']{-webkit-appearance:button;background-color:transparent;background-image:none;cursor:pointer}`,y`:-moz-focusring{outline:auto}`,y`:-moz-ui-invalid{box-shadow:none}`,y`progress{vertical-align:baseline}`,y`::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}`,y`[type='search']{-webkit-appearance:textfield;outline-offset:-2px}`,y`::-webkit-search-decoration{-webkit-appearance:none}`,y`::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}`,y`summary{display:list-item}`,y`blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}`,y`fieldset{margin:0;padding:0}`,y`legend{padding:0}`,y`ol,ul,menu{list-style:none;margin:0;padding:0}`,y`textarea{resize:vertical}`,y`::placeholder{opacity:1;color:#9ca3af}`,y`button,[role="button"]{cursor:pointer}`,y`:disabled{cursor:default;pointer-events:none;opacity:0.75}`,y`img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}`,y`img,video{max-width:100%;height:auto}`,y`[hidden]{display:none}`,y`dialog{padding:0}`,y`dialog::backdrop{background:rgba(0,0,0,0.5)}`])}function Je(){return ee([y`html{`,y`max-width: 70ch;`,y`padding: 2em 1em;`,y`margin: auto;`,y`line-height: 1.75;`,y`font-size: 1.25em;`,y`font-family: sans-serif;`,y`}`,y`h1,h2,h3,h4,h5,h6{`,y`margin: 1em 0 0.5em;`,y`}`,y`p,ul,ol{`,y`margin-bottom: 1em;`,y`color: #1d1d1d;`,y`}`])}let Ye={sm:640,md:768,lg:1024,xl:1280},Xe=Object.entries(Ye),G=.25,K=[...Array(15)].map((e,t)=>t+1),Ze=[16,20,24,28,32,36,40,48,56,64],Qe=[72,80,96,128,160,192,256,320,384,512],q=[...K,...Ze,...Qe,...Object.values(Ye)],J=Array.from({length:20},(e,t)=>(t+1)*5),$e=[0,10,20,30,40,50,60,70,80,90,100],et=[25,50,75,100,150,200,300,500,700,1e3],tt=[`hover`,`focus`,`disabled`],Y={margin:`m`,padding:`p`},nt={width:`w`,height:`h`},rt={top:`top`,right:`right`,bottom:`bottom`,left:`left`},it={"min-width":`min-w`,"min-height":`min-h`,"max-width":`max-w`,"max-height":`max-h`},at={"font-mono":{"font-family":`monospace`},"font-sans":{"font-family":`sans-serif`},"font-serif":{"font-family":`serif`},"font-cursive":{"font-family":`cursive`},"text-xs":{"font-size":`.75rem`,"line-height":`calc(1 / 0.75)`},"text-sm":{"font-size":`.875rem`,"line-height":`calc(1.25 / 0.875)`},"text-base":{"font-size":`1rem`,"line-height":`calc(1.5 / 1)`},"text-lg":{"font-size":`1.125rem`,"line-height":`calc(1.75 / 1.125)`},"text-xl":{"font-size":`1.25rem`,"line-height":`calc(1.75 / 1.25)`},"text-2xl":{"font-size":`1.5rem`,"line-height":`calc(2 / 1.5)`},"text-3xl":{"font-size":`1.875rem`,"line-height":`calc(2.25 / 1.875)`},"text-4xl":{"font-size":`2.25rem`,"line-height":`calc(2.5 / 2.25)`},"text-5xl":{"font-size":`3rem`,"line-height":`1`},"text-6xl":{"font-size":`3.75rem`,"line-height":`1`},"text-7xl":{"font-size":`4.5rem`,"line-height":`1`},"font-thin":{"font-weight":100},"font-extralight":{"font-weight":200},"font-light":{"font-weight":300},"font-normal":{"font-weight":400},"font-medium":{"font-weight":500},"font-semibold":{"font-weight":600},"font-bold":{"font-weight":700},"font-extrabold":{"font-weight":800},"font-black":{"font-weight":900},italic:{"font-style":`italic`},"not-italic":{"font-style":`normal`},"w-max":{width:`max-content`},"w-min":{width:`min-content`},"w-fit":{width:`fit-content`},"h-max":{height:`max-content`},"h-min":{height:`min-content`},"h-fit":{height:`fit-content`},"size-auto":{width:`auto`,height:`auto`},"size-px":{width:`1px`,height:`1px`},"size-full":{width:`100%`,height:`100%`},"size-dvw":{width:`100dvw`,height:`100dvw`},"size-dvh":{width:`100dvh`,height:`100dvh`},"size-lvw":{width:`100lvw`,height:`100lvw`},"size-lvh":{width:`100lvh`,height:`100lvh`},"size-svw":{width:`100svw`,height:`100svw`},"size-svh":{width:`100svh`,height:`100svh`},"size-min":{width:`min-content`,height:`min-content`},"size-max":{width:`max-content`,height:`max-content`},"size-fit":{width:`fit-content`,height:`fit-content`},"tracking-tighter":{"letter-spacing":`-0.05em`},"tracking-tight":{"letter-spacing":`-0.025em`},"tracking-normal":{"letter-spacing":`0`},"tracking-wide":{"letter-spacing":`0.025em`},"tracking-wider":{"letter-spacing":`0.05em`},"tracking-widest":{"letter-spacing":`0.1em`},"leading-none":{"line-height":`1`},"leading-tight":{"line-height":`1.25`},"leading-snug":{"line-height":`1.375`},"leading-normal":{"line-height":`1.5`},"leading-relaxed":{"line-height":`1.625`},"leading-loose":{"line-height":`2`},"text-left":{"text-align":`left`},"text-right":{"text-align":`right`},"text-center":{"text-align":`center`},"text-justify":{"text-align":`justify`},underline:{"text-decoration":`underline`},"no-underline":{"text-decoration":`none`},"decoration-none":{"text-decoration":`none`},"line-through":{"text-decoration":`line-through`},uppercase:{"text-transform":`uppercase`},lowercase:{"text-transform":`lowercase`},capitalize:{"text-transform":`capitalize`},truncate:{"white-space":`nowrap`,overflow:`hidden`,"text-overflow":`ellipsis`},"text-elipsis":{"text-overflow":`ellipsis`},"text-clip":{"text-overflow":`clip`},"text-wrap":{"text-wrap":`wrap`},"text-nowrap":{"text-wrap":`nowrap`},"text-balance":{"text-wrap":`balance`},"text-pretty":{"text-wrap":`pretty`},"whitespace-normal":{"white-space":`normal`},"whitespace-nowrap":{"white-space":`nowrap`},"whitespace-pre":{"white-space":`pre`},"whitespace-pre-line":{"white-space":`pre-line`},"whitespace-pre-wrap":{"white-space":`pre-wrap`},"whitespace-break-spaces":{"white-space":`break-spaces`},relative:{position:`relative`},fixed:{position:`fixed`},absolute:{position:`absolute`},sticky:{position:`sticky`},"object-contain":{"object-fit":`contain`},"object-cover":{"object-fit":`cover`},"object-fill":{"object-fit":`fill`},"object-none":{"object-fit":`none`},block:{display:`block`},contents:{display:`contents`},hidden:{display:`none`},inline:{display:`inline`},"inline-block":{display:`inline-block`},visible:{visibility:`visible`},invisible:{visibility:`hidden`},collapse:{visibility:`collapse`},"list-none":{"list-style-type":`none`},"list-disc":{"list-style-type":`disc`},"list-decimal":{"list-style-type":`decimal`},flex:{display:`flex`},grid:{display:`grid`},"flex-1":{flex:`1 1 0%`},"flex-inline":{display:`inline-flex`},"flex-row":{"flex-direction":`row`},"flex-col":{"flex-direction":`column`},"flex-row-reverse":{"flex-direction":`row-reverse`},"flex-col-reverse":{"flex-direction":`column-reverse`},"flex-wrap":{"flex-wrap":`wrap`},"flex-wrap-reverse":{"flex-wrap":`wrap-reverse`},"flex-nowrap":{"flex-wrap":`nowrap`},"justify-start":{"justify-content":`flex-start`},"justify-end":{"justify-content":`flex-end`},"justify-center":{"justify-content":`center`},"justify-between":{"justify-content":`space-between`},"justify-around":{"justify-content":`space-around`},"justify-evenly":{"justify-content":`space-evenly`},"justify-stretch":{"justify-content":`stretch`},"items-start":{"align-items":`flex-start`},"items-end":{"align-items":`flex-end`},"items-center":{"align-items":`center`},"items-stretch":{"align-items":`stretch`},"flex-grow":{"flex-grow":1},"flex-shrink":{"flex-shrink":1},"align-baseline":{"vertical-align":`baseline`},"align-top":{"vertical-align":`top`},"align-middle":{"vertical-align":`middle`},"align-bottom":{"vertical-align":`bottom`},"align-text-top":{"vertical-align":`text-top`},"align-text-bottom":{"vertical-align":`text-bottom`},"overflow-auto":{overflow:`auto`},"overflow-x-auto":{"overflow-x":`auto`},"overflow-y-auto":{"overflow-y":`auto`},"overflow-hidden":{overflow:`hidden`},"overflow-x-hidden":{"overflow-x":`hidden`},"overflow-y-hidden":{"overflow-y":`hidden`},"overflow-visible":{overflow:`visible`},"overscroll-auto":{"overscroll-behavior":`auto`},"overscroll-contain":{"overscroll-behavior":`contain`},"overscroll-none":{"overscroll-behavior":`none`},"overscroll-x-auto":{"overscroll-behavior-x":`auto`},"overscroll-x-contain":{"overscroll-behavior-x":`contain`},"overscroll-x-none":{"overscroll-behavior-x":`none`},"overscroll-y-auto":{"overscroll-behavior-y":`auto`},"overscroll-y-contain":{"overscroll-behavior-y":`contain`},"overscroll-y-none":{"overscroll-behavior-y":`none`},"z-auto":{"z-index":`auto`},"cursor-pointer":{cursor:`pointer`},"cursor-wait":{cursor:`wait`},"cursor-not-allowed":{cursor:`not-allowed`},"select-none":{"user-select":`none`},"select-all":{"user-select":`all`},"pointer-events-auto":{"pointer-events":`auto`},"pointer-events-none":{"pointer-events":`none`},"box-border":{"box-sizing":`border-box`},"box-content":{"box-sizing":`content-box`},resize:{resize:`both`},"resize-x":{resize:`horizontal`},"resize-y":{resize:`vertical`},"resize-none":{resize:`none`},"appearance-none":{appearance:`none`,"-webkit-appearance":`none`,"-moz-appearance":`none`},border:{border:`1px solid`},"border-none":{border:`none`},"border-solid":{"border-style":`solid`},"border-dashed":{"border-style":`dashed`},"border-dotted":{"border-style":`dotted`},"border-collapse":{"border-collapse":`collapse`},"rounded-none":{"border-radius":`0`},rounded:{"border-radius":`.25rem`},"rounded-sm":{"border-radius":`.125rem`},"rounded-md":{"border-radius":`.375rem`},"rounded-lg":{"border-radius":`.5rem`},"rounded-xl":{"border-radius":`.75rem`},"rounded-full":{"border-radius":`9999px`},"shadow-2xs":{"box-shadow":`0 1px rgb(0 0 0 / 0.05)`},"shadow-xs":{"box-shadow":`0 1px 2px 0 rgb(0 0 0 / 0.05)`},shadow:{"box-shadow":`0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)`},"shadow-sm":{"box-shadow":`0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)`},"shadow-md":{"box-shadow":`0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`},"shadow-lg":{"box-shadow":`0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)`},"shadow-xl":{"box-shadow":`0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)`},"shadow-2xl":{"box-shadow":`0 25px 50px -12px rgb(0 0 0 / 0.25)`},"shadow-inner":{"box-shadow":`inset 0 2px 4px 0 rgb(0 0 0 / 0.05)`},"shadow-none":{"box-shadow":`0 0 #0000`},ring:{"box-shadow":`var(--ring-inset, ) 0 0 0 3px rgb(59 130 246 / 0.5)`},"ring-0":{"box-shadow":`var(--ring-inset, ) 0 0 0 0px rgb(59 130 246 / 0.5)`},"ring-1":{"box-shadow":`var(--ring-inset, ) 0 0 0 1px rgb(59 130 246 / 0.5)`},"ring-2":{"box-shadow":`var(--ring-inset, ) 0 0 0 2px rgb(59 130 246 / 0.5)`},"ring-4":{"box-shadow":`var(--ring-inset, ) 0 0 0 4px rgb(59 130 246 / 0.5)`},"ring-8":{"box-shadow":`var(--ring-inset, ) 0 0 0 8px rgb(59 130 246 / 0.5)`},"ring-inset":{"--ring-inset":`inset`},outline:{"outline-style":`solid`},"outline-none":{outline:`2px solid transparent`,"outline-offset":`2px`},"outline-dashed":{"outline-style":`dashed`},"outline-dotted":{"outline-style":`dotted`},"outline-double":{"outline-style":`double`},"outline-0":{"outline-width":`0px`},"outline-1":{"outline-width":`1px`},"outline-2":{"outline-width":`2px`},"outline-4":{"outline-width":`4px`},"outline-8":{"outline-width":`8px`},"outline-offset-0":{"outline-offset":`0px`},"outline-offset-1":{"outline-offset":`1px`},"outline-offset-2":{"outline-offset":`2px`},"outline-offset-4":{"outline-offset":`4px`},"outline-offset-8":{"outline-offset":`8px`},"aspect-auto":{"aspect-ratio":`auto`},"aspect-square":{"aspect-ratio":`1 / 1`},"aspect-video":{"aspect-ratio":`16 / 9`},"backdrop-blur-none":{"backdrop-filter":`blur(0)`},"backdrop-blur-sm":{"backdrop-filter":`blur(4px)`},"backdrop-blur":{"backdrop-filter":`blur(8px)`},"backdrop-blur-md":{"backdrop-filter":`blur(12px)`},"backdrop-blur-lg":{"backdrop-filter":`blur(16px)`},"backdrop-blur-xl":{"backdrop-filter":`blur(24px)`},"backdrop-blur-2xl":{"backdrop-filter":`blur(40px)`},"backdrop-blur-3xl":{"backdrop-filter":`blur(64px)`},"transition-none":{transition:`none`},transition:{"transition-property":`all`,"transition-timing-function":`ease-in-out`,"transition-duration":`var(--transition-duration, 150ms)`},"animate-none":{animation:`none`},"animate-spin":{animation:`spin 1s linear infinite`},"animate-ping":{animation:`ping 1s cubic-bezier(0, 0, 0.2, 1) infinite`},"animate-pulse":{animation:`pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite`},"bg-auto":{"background-size":`auto`},"bg-cover":{"background-size":`cover`},"bg-contain":{"background-size":`contain`},"bg-no-repeat":{"background-repeat":`no-repeat`},"bg-fixed":{"background-attachment":`fixed`},"bg-local":{"background-attachment":`local`},"bg-scroll":{"background-attachment":`scroll`},"min-h-screen":{"min-height":`100vh`},"max-h-screen":{"max-height":`100vh`},"min-w-screen":{"min-width":`100vw`},"h-dvh":{height:`100dvh`},"h-svh":{height:`100svh`},"h-lvh":{height:`100lvh`},"w-dvw":{width:`100dvw`},"w-svw":{width:`100svw`},"w-lvw":{width:`100lvw`},"min-h-dvh":{"min-height":`100dvh`},"min-h-svh":{"min-height":`100svh`},"min-h-lvh":{"min-height":`100lvh`},"flex-none":{flex:`none`},"flex-auto":{flex:`1 1 auto`},"flex-initial":{flex:`0 1 auto`},grow:{"flex-grow":`1`},"grow-0":{"flex-grow":`0`},shrink:{"flex-shrink":`1`},"shrink-0":{"flex-shrink":`0`},"self-auto":{"align-self":`auto`},"self-start":{"align-self":`flex-start`},"self-end":{"align-self":`flex-end`},"self-center":{"align-self":`center`},"self-stretch":{"align-self":`stretch`},"self-baseline":{"align-self":`baseline`},"content-normal":{"align-content":`normal`},"content-start":{"align-content":`flex-start`},"content-end":{"align-content":`flex-end`},"content-center":{"align-content":`center`},"content-between":{"align-content":`space-between`},"content-around":{"align-content":`space-around`},"content-evenly":{"align-content":`space-evenly`},"content-stretch":{"align-content":`stretch`},"items-baseline":{"align-items":`baseline`},"inset-0":{inset:`0`},"inset-auto":{inset:`auto`},"inset-x-0":{left:`0`,right:`0`},"inset-y-0":{top:`0`,bottom:`0`},"inset-x-auto":{left:`auto`,right:`auto`},"inset-y-auto":{top:`auto`,bottom:`auto`},"sr-only":{position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,"white-space":`nowrap`,"border-width":`0`},"not-sr-only":{position:`static`,width:`auto`,height:`auto`,padding:`0`,margin:`0`,overflow:`visible`,clip:`auto`,"white-space":`normal`}},ot=[`@keyframes spin {
46
47
  from { transform: rotate(0deg) }
47
48
  to { transform: rotate(360deg) }
48
49
  }`,`@keyframes ping {
@@ -53,5 +54,5 @@ let je=new Set([`==`,`!=`,`<=`,`>=`,`||`,`&&`,`??`,`?.`]),Me=new Set([`===`,`!==
53
54
  }`,`@keyframes pulse {
54
55
  0%, 100% { opacity: 1 }
55
56
  50% { opacity: .5 }
56
- }`],dt={red:{50:`#ffebee`,100:`#ffcdd2`,200:`#ef9a9a`,300:`#e57373`,400:`#ef5350`,500:`#f44336`,600:`#e53935`,700:`#d32f2f`,800:`#c62828`,900:`#b71c1c`},pink:{50:`#fce4ec`,100:`#f8bbd0`,200:`#f48fb1`,300:`#f06292`,400:`#ec407a`,500:`#e91e63`,600:`#d81b60`,700:`#c2185b`,800:`#ad1457`,900:`#880e4f`},purple:{50:`#f3e5f5`,100:`#e1bee7`,200:`#ce93d8`,300:`#ba68c8`,400:`#ab47bc`,500:`#9c27b0`,600:`#8e24aa`,700:`#7b1fa2`,800:`#6a1b9a`,900:`#4a148c`},"deep-purple":{50:`#ede7f6`,100:`#d1c4e9`,200:`#b39ddb`,300:`#9575cd`,400:`#7e57c2`,500:`#673ab7`,600:`#5e35b1`,700:`#512da8`,800:`#4527a0`,900:`#311b92`},indigo:{50:`#e8eaf6`,100:`#c5cae9`,200:`#9fa8da`,300:`#7986cb`,400:`#5c6bc0`,500:`#3f51b5`,600:`#3949ab`,700:`#303f9f`,800:`#283593`,900:`#1a237e`},blue:{50:`#e3f2fd`,100:`#bbdefb`,200:`#90caf9`,300:`#64b5f6`,400:`#42a5f5`,500:`#2196f3`,600:`#1e88e5`,700:`#1976d2`,800:`#1565c0`,900:`#0d47a1`},"light-blue":{50:`#e1f5fe`,100:`#b3e5fc`,200:`#81d4fa`,300:`#4fc3f7`,400:`#29b6f6`,500:`#03a9f4`,600:`#039be5`,700:`#0288d1`,800:`#0277bd`,900:`#01579b`},cyan:{50:`#e0f7fa`,100:`#b2ebf2`,200:`#80deea`,300:`#4dd0e1`,400:`#26c6da`,500:`#00bcd4`,600:`#00acc1`,700:`#0097a7`,800:`#00838f`,900:`#006064`},teal:{50:`#e0f2f1`,100:`#b2dfdb`,200:`#80cbc4`,300:`#4db6ac`,400:`#26a69a`,500:`#009688`,600:`#00897b`,700:`#00796b`,800:`#00695c`,900:`#004d40`},green:{50:`#e8f5e9`,100:`#c8e6c9`,200:`#a5d6a7`,300:`#81c784`,400:`#66bb6a`,500:`#4caf50`,600:`#43a047`,700:`#388e3c`,800:`#2e7d32`,900:`#1b5e20`},"light-green":{50:`#f1f8e9`,100:`#dcedc8`,200:`#c5e1a5`,300:`#aed581`,400:`#9ccc65`,500:`#8bc34a`,600:`#7cb342`,700:`#689f38`,800:`#558b2f`,900:`#33691e`},lime:{50:`#f9fbe7`,100:`#f0f4c3`,200:`#e6ee9c`,300:`#dce775`,400:`#d4e157`,500:`#cddc39`,600:`#c0ca33`,700:`#afb42b`,800:`#9e9d24`,900:`#827717`},yellow:{50:`#fffde7`,100:`#fff9c4`,200:`#fff59d`,300:`#fff176`,400:`#ffee58`,500:`#ffeb3b`,600:`#fdd835`,700:`#fbc02d`,800:`#f9a825`,900:`#f57f17`},amber:{50:`#fff8e1`,100:`#ffecb3`,200:`#ffe082`,300:`#ffd54f`,400:`#ffca28`,500:`#ffc107`,600:`#ffb300`,700:`#ffa000`,800:`#ff8f00`,900:`#ff6f00`},orange:{50:`#fff3e0`,100:`#ffe0b2`,200:`#ffcc80`,300:`#ffb74d`,400:`#ffa726`,500:`#ff9800`,600:`#fb8c00`,700:`#f57c00`,800:`#ef6c00`,900:`#e65100`},"deep-orange":{50:`#fbe9e7`,100:`#ffccbc`,200:`#ffab91`,300:`#ff8a65`,400:`#ff7043`,500:`#ff5722`,600:`#f4511e`,700:`#e64a19`,800:`#d84315`,900:`#bf360c`},brown:{50:`#efebe9`,100:`#d7ccc8`,200:`#bcaaa4`,300:`#a1887f`,400:`#8d6e63`,500:`#795548`,600:`#6d4c41`,700:`#5d4037`,800:`#4e342e`,900:`#3e2723`},gray:{50:`#fafafa`,100:`#f5f5f5`,200:`#eeeeee`,300:`#e0e0e0`,400:`#bdbdbd`,500:`#9e9e9e`,600:`#757575`,700:`#616161`,800:`#424242`,900:`#212121`},"blue-gray":{50:`#eceff1`,100:`#cfd8dc`,200:`#b0bec5`,300:`#90a4ae`,400:`#78909c`,500:`#607d8b`,600:`#546e7a`,700:`#455a64`,800:`#37474f`,900:`#263238`}};function G(e){return at.map(t=>`.${t}\\:${e}:${t}`)}function ft(e,t){return et.map(([n,r])=>`@media (min-width: ${r}px) { .${n}\\:${e} { ${t} } }`)}function K(e){return e.flatMap(([e,t])=>[`.${e} { ${t} }`,`${G(e).join(`,`)} { ${t} }`,...ft(e,t)])}function pt(e){return e.flatMap(([e,t])=>[`.${e} { ${t} }`,`${G(e).join(`,`)} { ${t} }`])}function mt(e,t){let n=e[0]===`@`,r=t[0]===`@`;return n&&!r?1:!n&&r?-1:e.localeCompare(t)}function q(e){return K(Object.entries(e).flatMap(([e,t])=>[[`${t}-0`,`${e}: 0`],[`${t}-screen`,`${e}: 100v${e.includes(`height`)?`h`:`w`}`],[`${t}-full`,`${e}: 100%`],...H.map(n=>[`${t}-${n}`,`${e}: ${n*B}rem`]),...H.map(n=>[`-${t}-${n}`,`${e}: -${n*B}rem`]),...H.map(n=>[`${t}-${n}px`,`${e}: ${n}px`]),...H.map(n=>[`-${t}-${n}px`,`${e}: -${n}px`]),...U.map(n=>[`${t}-${n}\\%`,`${e}: ${n}%`]),...U.map(n=>[`-${t}-${n}\\%`,`${e}: -${n}%`]),...et.map(([n,r])=>[`${t}-${n}`,`${e}: ${r}px`])]))}function ht(e){return K(Object.entries(e).flatMap(([e,t])=>[[`${t}-auto`,`${e}: auto`],[`${t}x-auto`,`${e}-left: auto; ${e}-right: auto;`],[`${t}y-auto`,`${e}-top: auto; ${e}-bottom: auto;`],[`${t}x-0`,`${e}-left: 0; ${e}-right: 0;`],[`${t}y-0`,`${e}-top: 0; ${e}-bottom: 0;`],...H.map(n=>[`${t}x-${n}`,`${e}-left: ${n*B}rem; ${e}-right: ${n*B}rem;`]),...H.map(n=>[`${t}y-${n}`,`${e}-top: ${n*B}rem; ${e}-bottom: ${n*B}rem;`]),...H.map(n=>[`${t}x-${n}px`,`${e}-left: ${n}px; ${e}-right: ${n}px;`]),...H.map(n=>[`${t}y-${n}px`,`${e}-top: ${n}px; ${e}-bottom: ${n}px;`]),...U.map(n=>[`${t}x-${n}\\%`,`${e}-left: ${n}%; ${e}-right: ${n}%;`]),...U.map(n=>[`${t}y-${n}\\%`,`${e}-top: ${n}%; ${e}-bottom: ${n}%;`])]))}function gt(e){return K(Object.entries(e).flatMap(([e,t])=>[[`${t}t-0`,`${e}-top: 0`],[`${t}b-0`,`${e}-bottom: 0`],[`${t}l-0`,`${e}-left: 0`],[`${t}r-0`,`${e}-right: 0`],[`${t}t-auto`,`${e}-top: auto`],[`${t}b-auto`,`${e}-bottom: auto`],[`${t}l-auto`,`${e}-left: auto`],[`${t}r-auto`,`${e}-right: auto`],...[``,`-`].flatMap(n=>[...H.map(r=>[`${n}${t}t-${r}`,`${e}-top: ${n}${r*B}rem`]),...H.map(r=>[`${n}${t}b-${r}`,`${e}-bottom: ${n}${r*B}rem`]),...H.map(r=>[`${n}${t}l-${r}`,`${e}-left: ${n}${r*B}rem`]),...H.map(r=>[`${n}${t}r-${r}`,`${e}-right: ${n}${r*B}rem`]),...H.map(r=>[`${n}${t}t-${r}px`,`${e}-top: ${n}${r}px`]),...H.map(r=>[`${n}${t}b-${r}px`,`${e}-bottom: ${n}${r}px`]),...H.map(r=>[`${n}${t}l-${r}px`,`${e}-left: ${n}${r}px`]),...H.map(r=>[`${n}${t}r-${r}px`,`${e}-right: ${n}${r}px`]),...U.map(r=>[`${n}${t}t-${r}\\%`,`${e}-top: ${n}${r}%`]),...U.map(r=>[`${n}${t}b-${r}\\%`,`${e}-bottom: ${n}${r}%`]),...U.map(r=>[`${n}${t}l-${r}\\%`,`${e}-left: ${n}${r}%`]),...U.map(r=>[`${n}${t}r-${r}\\%`,`${e}-right: ${n}${r}%`])])]))}function _t(){return K([[`border`,`border: 1px`],[`border-x`,`border-inline-width: 1px`],[`border-y`,`border-block-width: 1px`],...[0,...V].map(e=>[`border-${e}`,`border-width: ${e}px`]),...[0,...V].map(e=>[`border-x-${e}`,`border-inline-width: ${e}px;`]),...[0,...V].map(e=>[`border-y-${e}`,`border-block-width: ${e}px;`]),...[`top`,`bottom`,`left`,`right`].flatMap(e=>[[`border-${e.slice(0,1)}`,`border-${e}: 1px`],...[0,...V].map(t=>[`border-${e.slice(0,1)}-${t}`,`border-${e}-width: ${t}px`])])])}function vt(){return K(U.map(e=>[`z-${e}`,`z-index: ${e}`]))}function yt(){return K(it.map(e=>[`duration-${e}`,`--transition-duration: ${e}ms; transition-duration: ${e}ms`]))}function bt(){return K([[`space-x-0 > *`,`margin-left: 0`],[`space-y-0 > *`,`margin-top: 0`],...H.map(e=>[`space-x-${e} > :not(:first-child)`,`margin-left: ${e*B}rem`]),...H.map(e=>[`space-y-${e} > :not(:first-child)`,`margin-top: ${e*B}rem`]),...H.map(e=>[`space-x-${e}px > :not(:first-child)`,`margin-left: ${e}px`]),...H.map(e=>[`space-y-${e}px > :not(:first-child)`,`margin-top: ${e}px`]),[`gap-0`,`gap: 0`],...H.map(e=>[`gap-${e}`,`gap: ${e*B}rem`]),...H.map(e=>[`gap-${e}px`,`gap: ${e}px`]),...H.map(e=>[`gap-x-${e}`,`column-gap: ${e*B}rem`]),...H.map(e=>[`gap-y-${e}`,`row-gap: ${e*B}rem`]),...H.map(e=>[`gap-x-${e}px`,`column-gap: ${e}px`]),...H.map(e=>[`gap-y-${e}px`,`row-gap: ${e}px`]),[`divide-x > :not(:last-child)`,`border-inline-end-width: 1px`],[`divide-y > :not(:last-child)`,`border-bottom-width: 1px`],[`divide-x-0 > :not(:last-child)`,`border-inline-end-width: 0px`],[`divide-y-0 > :not(:last-child)`,`border-bottom-width: 0px`],...[2,4,8].map(e=>[`divide-x-${e} > :not(:last-child)`,`border-inline-end-width: ${e}px`]),...[2,4,8].map(e=>[`divide-y-${e} > :not(:last-child)`,`border-bottom-width: ${e}px`]),[`divide-solid > :not(:last-child)`,`border-style: solid`],[`divide-dashed > :not(:last-child)`,`border-style: dashed`],[`divide-dotted > :not(:last-child)`,`border-style: dotted`],[`divide-none > :not(:last-child)`,`border-style: none`]])}function xt(){return K([...Array.from({length:100},(e,t)=>[`text-${t}px`,`font-size: ${t}px`]),...Array.from({length:100},(e,t)=>[`text-${t*B}rem`,`font-size: ${t*B}rem`])])}function St(){return K([...Array.from({length:12},(e,t)=>t+1).map(e=>[`grid-cols-${e}`,`grid-template-columns: repeat(${e}, minmax(0, 1fr))`]),[`grid-cols-none`,`grid-template-columns: none`],...Array.from({length:12},(e,t)=>t+1).map(e=>[`col-span-${e}`,`grid-column: span ${e} / span ${e}`]),[`col-span-full`,`grid-column: 1 / -1`],...Array.from({length:13},(e,t)=>t+1).map(e=>[`col-start-${e}`,`grid-column-start: ${e}`]),[`col-start-auto`,`grid-column-start: auto`],...Array.from({length:13},(e,t)=>t+1).map(e=>[`col-end-${e}`,`grid-column-end: ${e}`]),[`col-end-auto`,`grid-column-end: auto`]])}function Ct(){return Object.entries(lt).flatMap(([e,t])=>{let n=Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`; `);return[`.${e} { ${n} }`,`${G(e).join(`,`)} { ${n} }`,...ft(e,n)]})}function wt(e){let t=0,n=0,r=0;return e.length===4?(t=parseInt(e[1]+e[1],16),n=parseInt(e[2]+e[2],16),r=parseInt(e[3]+e[3],16)):e.length===7&&(t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16)),`${t} ${n} ${r}`}function Tt(){let e=(e,t)=>{let n=[[`text-${e}`,`color: ${t}`],[`fill-${e}`,`fill: ${t}`],[`bg-${e}`,`background-color: ${t}`],[`border-${e}`,`border-color: ${t}`]];if(t.startsWith(`#`)){let r=wt(t);for(let t of rt){let i=t/100;n.push([`text-${e}\\/${t}`,`color: rgb(${r} / ${i})`],[`bg-${e}\\/${t}`,`background-color: rgb(${r} / ${i})`],[`border-${e}\\/${t}`,`border-color: rgb(${r} / ${i})`])}}return n};return pt([...e(`white`,`#fff`),...e(`black`,`#000`),...e(`transparent`,`transparent`),...Object.entries(dt).flatMap(([t,n])=>[...e(t,n[500]),...Object.entries(n).flatMap(([n,r])=>e(`${t}-${n}`,r))])])}function Et(){return K([[`opacity-0`,`opacity: 0`],...U.map(e=>[`opacity-${e}`,`opacity: ${e/100}`])])}let J=null;function Dt(){return J===null&&(J=[...ut,...Ct(),...Tt(),...Et(),...vt(),...yt(),...q(st),...q(ot),...ht(ot),...gt(W),...q(W),...ht(W),...bt(),...q(ct),..._t(),...xt(),...St()].sort(mt).join(`
57
- `)),J}var Y=class extends Xe{impl=`browser`;dirpath=A(globalThis.location?.href??`http://localhost/`);parseHTML(e,t={rootDocument:!1}){if(t.rootDocument)return new DOMParser().parseFromString(e,`text/html`);{let t=document.createRange();return t.selectNodeContents(document.body),t.createContextualFragment(e)}}serializeHTML(e){return new XMLSerializer().serializeToString(e).replace(/\s?xmlns="[^"]+"/gm,``)}preprocessLocal(e,t){return this.preprocessRemote(e,t)}createElement(e,t){return(t||document).createElement(e)}createComment(e,t){return(t||document).createComment(e)}textContent(e,t){e.textContent=t}};new Y;function Ot(e){for(let t of e){let e=document.createElement(`style`);switch(t){case`minimal`:ae(e,Qe());break;case`basic`:ae(e,Ze());break;case`utils`:e.textContent=Dt();break;default:console.error(`Unknown style name: "${t}"`);continue}globalThis.document.head.appendChild(e)}}let X=`mancha-cloak`;function kt(e,t){let n=`${e.join(`, `)} { opacity: 0 !important; ${t>0?`transition: opacity ${t}ms ease-in-out !important;`:``} }`,r=document.getElementById(X);r||(r=document.createElement(`style`),r.id=X,document.head.appendChild(r)),r.textContent=n}function At(e){let t=!1;return async()=>{if(t)return;t=!0;let n=document.getElementById(X);if(n){if(e!==!1){let t=n.sheet;t&&t.cssRules.length>0&&t.cssRules[0].style.setProperty(`opacity`,`1`,`important`),await new Promise(t=>setTimeout(t,e))}n.remove()}}}async function Z(e={}){let t;document.documentElement.classList.add(`mancha-loading`);let n=e.cloak?e.cloak===!0?{}:e.cloak:void 0;if(n){let r=e.target?Array.isArray(e.target)?e.target:[e.target]:[`body`],i=n.selector&&(Array.isArray(n.selector)||typeof n.selector==`string`)?Array.isArray(n.selector)?n.selector:[n.selector]:r,a=n.duration??0;kt(i,a),t=At(a>0?a:!1)}else t=At(!1);document.readyState===`loading`&&await new Promise(e=>{window.addEventListener(`DOMContentLoaded`,()=>e(),{once:!0})});let r=e.renderer??new Y;if(e.css&&e.css.length>0&&Ot(e.css),e.debug&&r.debug(!0),e.state)for(let[t,n]of Object.entries(e.state))await r.set(t,n);try{if(e.callback)await e.callback(r);else if(e.target){let t=Array.isArray(e.target)?e.target:[e.target];for(let n of t){let t=globalThis.document.querySelector(n);t?await r.mount(t,{cache:e.cache}):console.error(`Target element not found: "${n}"`)}}}finally{document.documentElement.classList.remove(`mancha-loading`),t&&await t()}return r}let Q=globalThis.document?.currentScript,$=new Y;if($.initMancha=Z,globalThis.Mancha=$,Q?.hasAttribute(`init`)){let e=Q.hasAttribute(`debug`),t=Q.getAttribute(`cache`)||void 0,n=Q.getAttribute(`target`)?.split(`+`)||[`body`],r=Q.getAttribute(`css`)?.split(`+`),i,a=Q.getAttribute(`cloak`);if(a===`false`)i=void 0;else if(a&&!Number.isNaN(parseInt(a,10))){let e=parseInt(a,10);i=e>0?{duration:e}:!0}else i=!0;Z({renderer:$,css:r,target:n,debug:e,cache:t,cloak:i})}else if(Q?.hasAttribute(`css`)){let e=Q.getAttribute(`css`)?.split(`+`);Z({css:e})}return $})();
57
+ }`],st={red:{50:`#ffebee`,100:`#ffcdd2`,200:`#ef9a9a`,300:`#e57373`,400:`#ef5350`,500:`#f44336`,600:`#e53935`,700:`#d32f2f`,800:`#c62828`,900:`#b71c1c`},pink:{50:`#fce4ec`,100:`#f8bbd0`,200:`#f48fb1`,300:`#f06292`,400:`#ec407a`,500:`#e91e63`,600:`#d81b60`,700:`#c2185b`,800:`#ad1457`,900:`#880e4f`},purple:{50:`#f3e5f5`,100:`#e1bee7`,200:`#ce93d8`,300:`#ba68c8`,400:`#ab47bc`,500:`#9c27b0`,600:`#8e24aa`,700:`#7b1fa2`,800:`#6a1b9a`,900:`#4a148c`},"deep-purple":{50:`#ede7f6`,100:`#d1c4e9`,200:`#b39ddb`,300:`#9575cd`,400:`#7e57c2`,500:`#673ab7`,600:`#5e35b1`,700:`#512da8`,800:`#4527a0`,900:`#311b92`},indigo:{50:`#e8eaf6`,100:`#c5cae9`,200:`#9fa8da`,300:`#7986cb`,400:`#5c6bc0`,500:`#3f51b5`,600:`#3949ab`,700:`#303f9f`,800:`#283593`,900:`#1a237e`},blue:{50:`#e3f2fd`,100:`#bbdefb`,200:`#90caf9`,300:`#64b5f6`,400:`#42a5f5`,500:`#2196f3`,600:`#1e88e5`,700:`#1976d2`,800:`#1565c0`,900:`#0d47a1`},"light-blue":{50:`#e1f5fe`,100:`#b3e5fc`,200:`#81d4fa`,300:`#4fc3f7`,400:`#29b6f6`,500:`#03a9f4`,600:`#039be5`,700:`#0288d1`,800:`#0277bd`,900:`#01579b`},cyan:{50:`#e0f7fa`,100:`#b2ebf2`,200:`#80deea`,300:`#4dd0e1`,400:`#26c6da`,500:`#00bcd4`,600:`#00acc1`,700:`#0097a7`,800:`#00838f`,900:`#006064`},teal:{50:`#e0f2f1`,100:`#b2dfdb`,200:`#80cbc4`,300:`#4db6ac`,400:`#26a69a`,500:`#009688`,600:`#00897b`,700:`#00796b`,800:`#00695c`,900:`#004d40`},green:{50:`#e8f5e9`,100:`#c8e6c9`,200:`#a5d6a7`,300:`#81c784`,400:`#66bb6a`,500:`#4caf50`,600:`#43a047`,700:`#388e3c`,800:`#2e7d32`,900:`#1b5e20`},"light-green":{50:`#f1f8e9`,100:`#dcedc8`,200:`#c5e1a5`,300:`#aed581`,400:`#9ccc65`,500:`#8bc34a`,600:`#7cb342`,700:`#689f38`,800:`#558b2f`,900:`#33691e`},lime:{50:`#f9fbe7`,100:`#f0f4c3`,200:`#e6ee9c`,300:`#dce775`,400:`#d4e157`,500:`#cddc39`,600:`#c0ca33`,700:`#afb42b`,800:`#9e9d24`,900:`#827717`},yellow:{50:`#fffde7`,100:`#fff9c4`,200:`#fff59d`,300:`#fff176`,400:`#ffee58`,500:`#ffeb3b`,600:`#fdd835`,700:`#fbc02d`,800:`#f9a825`,900:`#f57f17`},amber:{50:`#fff8e1`,100:`#ffecb3`,200:`#ffe082`,300:`#ffd54f`,400:`#ffca28`,500:`#ffc107`,600:`#ffb300`,700:`#ffa000`,800:`#ff8f00`,900:`#ff6f00`},orange:{50:`#fff3e0`,100:`#ffe0b2`,200:`#ffcc80`,300:`#ffb74d`,400:`#ffa726`,500:`#ff9800`,600:`#fb8c00`,700:`#f57c00`,800:`#ef6c00`,900:`#e65100`},"deep-orange":{50:`#fbe9e7`,100:`#ffccbc`,200:`#ffab91`,300:`#ff8a65`,400:`#ff7043`,500:`#ff5722`,600:`#f4511e`,700:`#e64a19`,800:`#d84315`,900:`#bf360c`},brown:{50:`#efebe9`,100:`#d7ccc8`,200:`#bcaaa4`,300:`#a1887f`,400:`#8d6e63`,500:`#795548`,600:`#6d4c41`,700:`#5d4037`,800:`#4e342e`,900:`#3e2723`},gray:{50:`#fafafa`,100:`#f5f5f5`,200:`#eeeeee`,300:`#e0e0e0`,400:`#bdbdbd`,500:`#9e9e9e`,600:`#757575`,700:`#616161`,800:`#424242`,900:`#212121`},"blue-gray":{50:`#eceff1`,100:`#cfd8dc`,200:`#b0bec5`,300:`#90a4ae`,400:`#78909c`,500:`#607d8b`,600:`#546e7a`,700:`#455a64`,800:`#37474f`,900:`#263238`}};function ct(e){return tt.map(t=>`.${t}\\:${e}:${t}`)}function lt(e,t){return Xe.map(([n,r])=>`@media (min-width: ${r}px) { .${n}\\:${e} { ${t} } }`)}function X(e){return e.flatMap(([e,t])=>[`.${e} { ${t} }`,`${ct(e).join(`,`)} { ${t} }`,...lt(e,t)])}function ut(e){return e.flatMap(([e,t])=>[`.${e} { ${t} }`,`${ct(e).join(`,`)} { ${t} }`])}function dt(e,t){let n=e[0]===`@`,r=t[0]===`@`;return n&&!r?1:!n&&r?-1:e.localeCompare(t)}function Z(e){return X(Object.entries(e).flatMap(([e,t])=>[[`${t}-0`,`${e}: 0`],[`${t}-screen`,`${e}: 100v${e.includes(`height`)?`h`:`w`}`],[`${t}-full`,`${e}: 100%`],...q.map(n=>[`${t}-${n}`,`${e}: ${n*G}rem`]),...q.map(n=>[`-${t}-${n}`,`${e}: -${n*G}rem`]),...q.map(n=>[`${t}-${n}px`,`${e}: ${n}px`]),...q.map(n=>[`-${t}-${n}px`,`${e}: -${n}px`]),...J.map(n=>[`${t}-${n}\\%`,`${e}: ${n}%`]),...J.map(n=>[`-${t}-${n}\\%`,`${e}: -${n}%`]),...Xe.map(([n,r])=>[`${t}-${n}`,`${e}: ${r}px`])]))}function ft(e){return X(Object.entries(e).flatMap(([e,t])=>[[`${t}-auto`,`${e}: auto`],[`${t}x-auto`,`${e}-left: auto; ${e}-right: auto;`],[`${t}y-auto`,`${e}-top: auto; ${e}-bottom: auto;`],[`${t}x-0`,`${e}-left: 0; ${e}-right: 0;`],[`${t}y-0`,`${e}-top: 0; ${e}-bottom: 0;`],...q.map(n=>[`${t}x-${n}`,`${e}-left: ${n*G}rem; ${e}-right: ${n*G}rem;`]),...q.map(n=>[`${t}y-${n}`,`${e}-top: ${n*G}rem; ${e}-bottom: ${n*G}rem;`]),...q.map(n=>[`${t}x-${n}px`,`${e}-left: ${n}px; ${e}-right: ${n}px;`]),...q.map(n=>[`${t}y-${n}px`,`${e}-top: ${n}px; ${e}-bottom: ${n}px;`]),...J.map(n=>[`${t}x-${n}\\%`,`${e}-left: ${n}%; ${e}-right: ${n}%;`]),...J.map(n=>[`${t}y-${n}\\%`,`${e}-top: ${n}%; ${e}-bottom: ${n}%;`])]))}function pt(e){return X(Object.entries(e).flatMap(([e,t])=>[[`${t}t-0`,`${e}-top: 0`],[`${t}b-0`,`${e}-bottom: 0`],[`${t}l-0`,`${e}-left: 0`],[`${t}r-0`,`${e}-right: 0`],[`${t}t-auto`,`${e}-top: auto`],[`${t}b-auto`,`${e}-bottom: auto`],[`${t}l-auto`,`${e}-left: auto`],[`${t}r-auto`,`${e}-right: auto`],...[``,`-`].flatMap(n=>[...q.map(r=>[`${n}${t}t-${r}`,`${e}-top: ${n}${r*G}rem`]),...q.map(r=>[`${n}${t}b-${r}`,`${e}-bottom: ${n}${r*G}rem`]),...q.map(r=>[`${n}${t}l-${r}`,`${e}-left: ${n}${r*G}rem`]),...q.map(r=>[`${n}${t}r-${r}`,`${e}-right: ${n}${r*G}rem`]),...q.map(r=>[`${n}${t}t-${r}px`,`${e}-top: ${n}${r}px`]),...q.map(r=>[`${n}${t}b-${r}px`,`${e}-bottom: ${n}${r}px`]),...q.map(r=>[`${n}${t}l-${r}px`,`${e}-left: ${n}${r}px`]),...q.map(r=>[`${n}${t}r-${r}px`,`${e}-right: ${n}${r}px`]),...J.map(r=>[`${n}${t}t-${r}\\%`,`${e}-top: ${n}${r}%`]),...J.map(r=>[`${n}${t}b-${r}\\%`,`${e}-bottom: ${n}${r}%`]),...J.map(r=>[`${n}${t}l-${r}\\%`,`${e}-left: ${n}${r}%`]),...J.map(r=>[`${n}${t}r-${r}\\%`,`${e}-right: ${n}${r}%`])])]))}function mt(){return X([[`border`,`border: 1px`],[`border-x`,`border-inline-width: 1px`],[`border-y`,`border-block-width: 1px`],...[0,...K].map(e=>[`border-${e}`,`border-width: ${e}px`]),...[0,...K].map(e=>[`border-x-${e}`,`border-inline-width: ${e}px;`]),...[0,...K].map(e=>[`border-y-${e}`,`border-block-width: ${e}px;`]),...[`top`,`bottom`,`left`,`right`].flatMap(e=>[[`border-${e.slice(0,1)}`,`border-${e}: 1px`],...[0,...K].map(t=>[`border-${e.slice(0,1)}-${t}`,`border-${e}-width: ${t}px`])])])}function ht(){return X(J.map(e=>[`z-${e}`,`z-index: ${e}`]))}function gt(){return X(et.map(e=>[`duration-${e}`,`--transition-duration: ${e}ms; transition-duration: ${e}ms`]))}function _t(){return X([[`space-x-0 > *`,`margin-left: 0`],[`space-y-0 > *`,`margin-top: 0`],...q.map(e=>[`space-x-${e} > :not(:first-child)`,`margin-left: ${e*G}rem`]),...q.map(e=>[`space-y-${e} > :not(:first-child)`,`margin-top: ${e*G}rem`]),...q.map(e=>[`space-x-${e}px > :not(:first-child)`,`margin-left: ${e}px`]),...q.map(e=>[`space-y-${e}px > :not(:first-child)`,`margin-top: ${e}px`]),[`gap-0`,`gap: 0`],...q.map(e=>[`gap-${e}`,`gap: ${e*G}rem`]),...q.map(e=>[`gap-${e}px`,`gap: ${e}px`]),...q.map(e=>[`gap-x-${e}`,`column-gap: ${e*G}rem`]),...q.map(e=>[`gap-y-${e}`,`row-gap: ${e*G}rem`]),...q.map(e=>[`gap-x-${e}px`,`column-gap: ${e}px`]),...q.map(e=>[`gap-y-${e}px`,`row-gap: ${e}px`]),[`divide-x > :not(:last-child)`,`border-inline-end-width: 1px`],[`divide-y > :not(:last-child)`,`border-bottom-width: 1px`],[`divide-x-0 > :not(:last-child)`,`border-inline-end-width: 0px`],[`divide-y-0 > :not(:last-child)`,`border-bottom-width: 0px`],...[2,4,8].map(e=>[`divide-x-${e} > :not(:last-child)`,`border-inline-end-width: ${e}px`]),...[2,4,8].map(e=>[`divide-y-${e} > :not(:last-child)`,`border-bottom-width: ${e}px`]),[`divide-solid > :not(:last-child)`,`border-style: solid`],[`divide-dashed > :not(:last-child)`,`border-style: dashed`],[`divide-dotted > :not(:last-child)`,`border-style: dotted`],[`divide-none > :not(:last-child)`,`border-style: none`]])}function vt(){return X([...Array.from({length:100},(e,t)=>[`text-${t}px`,`font-size: ${t}px`]),...Array.from({length:100},(e,t)=>[`text-${t*G}rem`,`font-size: ${t*G}rem`])])}function yt(){return X([...Array.from({length:12},(e,t)=>t+1).map(e=>[`grid-cols-${e}`,`grid-template-columns: repeat(${e}, minmax(0, 1fr))`]),[`grid-cols-none`,`grid-template-columns: none`],...Array.from({length:12},(e,t)=>t+1).map(e=>[`col-span-${e}`,`grid-column: span ${e} / span ${e}`]),[`col-span-full`,`grid-column: 1 / -1`],...Array.from({length:13},(e,t)=>t+1).map(e=>[`col-start-${e}`,`grid-column-start: ${e}`]),[`col-start-auto`,`grid-column-start: auto`],...Array.from({length:13},(e,t)=>t+1).map(e=>[`col-end-${e}`,`grid-column-end: ${e}`]),[`col-end-auto`,`grid-column-end: auto`]])}function bt(){return Object.entries(at).flatMap(([e,t])=>{let n=Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`; `);return[`.${e} { ${n} }`,`${ct(e).join(`,`)} { ${n} }`,...lt(e,n)]})}function xt(e){let t=0,n=0,r=0;return e.length===4?(t=parseInt(e[1]+e[1],16),n=parseInt(e[2]+e[2],16),r=parseInt(e[3]+e[3],16)):e.length===7&&(t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16)),`${t} ${n} ${r}`}function St(){let e=(e,t)=>{let n=[[`text-${e}`,`color: ${t}`],[`fill-${e}`,`fill: ${t}`],[`bg-${e}`,`background-color: ${t}`],[`border-${e}`,`border-color: ${t}`]];if(t.startsWith(`#`)){let r=xt(t);for(let t of $e){let i=t/100;n.push([`text-${e}\\/${t}`,`color: rgb(${r} / ${i})`],[`bg-${e}\\/${t}`,`background-color: rgb(${r} / ${i})`],[`border-${e}\\/${t}`,`border-color: rgb(${r} / ${i})`])}}return n};return ut([...e(`white`,`#fff`),...e(`black`,`#000`),...e(`transparent`,`transparent`),...Object.entries(st).flatMap(([t,n])=>[...e(t,n[500]),...Object.entries(n).flatMap(([n,r])=>e(`${t}-${n}`,r))])])}function Ct(){return X([[`opacity-0`,`opacity: 0`],...J.map(e=>[`opacity-${e}`,`opacity: ${e/100}`])])}let wt=null;function Tt(){return wt===null&&(wt=[...ot,...bt(),...St(),...Ct(),...ht(),...gt(),...Z(rt),...Z(nt),...ft(nt),...pt(Y),...Z(Y),...ft(Y),..._t(),...Z(it),...mt(),...vt(),...yt()].sort(dt).join(`
58
+ `)),wt}var Et=class extends Ke{impl=`browser`;dirpath=le(globalThis.location?.href??`http://localhost/`);parseHTML(e,t={rootDocument:!1}){if(t.rootDocument)return new DOMParser().parseFromString(e,`text/html`);{let t=document.createRange();return t.selectNodeContents(document.body),t.createContextualFragment(e)}}serializeHTML(e){return new XMLSerializer().serializeToString(e).replace(/\s?xmlns="[^"]+"/gm,``)}preprocessLocal(e,t){return this.preprocessRemote(e,t)}createElement(e,t){return(t||document).createElement(e)}createComment(e,t){return(t||document).createComment(e)}textContent(e,t){e.textContent=t}};new Et;function Dt(e){for(let t of e){let e=document.createElement(`style`);switch(t){case`minimal`:_(e,Je());break;case`basic`:_(e,qe());break;case`utils`:e.textContent=Tt();break;default:console.error(`Unknown style name: "${t}"`);continue}globalThis.document.head.appendChild(e)}}let Ot=`mancha-cloak`;function kt(e,t){let n=`${e.join(`, `)} { opacity: 0 !important; ${t>0?`transition: opacity ${t}ms ease-in-out !important;`:``} }`,r=document.getElementById(Ot);r||(r=document.createElement(`style`),r.id=Ot,document.head.appendChild(r)),r.textContent=n}function At(e){let t=!1;return async()=>{if(t)return;t=!0;let n=document.getElementById(Ot);if(n){if(e!==!1){let t=n.sheet;t&&t.cssRules.length>0&&t.cssRules[0].style.setProperty(`opacity`,`1`,`important`),await new Promise(t=>setTimeout(t,e))}n.remove()}}}async function jt(e={}){let t;document.documentElement.classList.add(`mancha-loading`);let n=e.cloak?e.cloak===!0?{}:e.cloak:void 0;if(n){let r=e.target?Array.isArray(e.target)?e.target:[e.target]:[`body`],i=n.selector&&(Array.isArray(n.selector)||typeof n.selector==`string`)?Array.isArray(n.selector)?n.selector:[n.selector]:r,a=n.duration??0;kt(i,a),t=At(a>0?a:!1)}else t=At(!1);document.readyState===`loading`&&await new Promise(e=>{window.addEventListener(`DOMContentLoaded`,()=>e(),{once:!0})});let r=e.renderer??new Et;if(e.css&&e.css.length>0&&Dt(e.css),e.debug&&r.debug(!0),e.state)for(let[t,n]of Object.entries(e.state))await r.set(t,n);try{if(e.callback)await e.callback(r);else if(e.target){let t=Array.isArray(e.target)?e.target:[e.target];for(let n of t){let t=globalThis.document.querySelector(n);t?await r.mount(t,{cache:e.cache}):console.error(`Target element not found: "${n}"`)}}}finally{document.documentElement.classList.remove(`mancha-loading`),t&&await t()}return r}let Q=globalThis.document?.currentScript,$=new Et;if($.initMancha=jt,globalThis.Mancha=$,Q?.hasAttribute(`init`)){let e=Q.hasAttribute(`debug`),t=Q.getAttribute(`cache`)||void 0,n=Q.getAttribute(`target`)?.split(`+`)||[`body`],r=Q.getAttribute(`css`)?.split(`+`),i,a=Q.getAttribute(`cloak`);if(a===`false`)i=void 0;else if(a&&!Number.isNaN(parseInt(a,10))){let e=parseInt(a,10);i=e>0?{duration:e}:!0}else i=!0;jt({renderer:$,css:r,target:n,debug:e,cache:t,cloak:i})}else if(Q?.hasAttribute(`css`)){let e=Q.getAttribute(`css`)?.split(`+`);jt({css:e})}return $})();
package/dist/plugins.js CHANGED
@@ -352,6 +352,10 @@ export var RendererPlugins;
352
352
  this.log(":for attribute found in:\n", nodeToString(node, 128));
353
353
  // Remove the processed attributes from node.
354
354
  removeAttributeOrDataset(elem, "for", ":");
355
+ // Parse optional :key attribute for keyed reconciliation.
356
+ const keyExpr = getAttributeOrDataset(elem, "key", ":");
357
+ if (keyExpr)
358
+ removeAttributeOrDataset(elem, "key", ":");
355
359
  // Ensure the node and its children are not processed by subsequent steps.
356
360
  for (const child of traverse(node, this._skipNodes)) {
357
361
  this._skipNodes.add(child);
@@ -379,7 +383,9 @@ export var RendererPlugins;
379
383
  if (tokens.length !== 2) {
380
384
  throw new Error(`Invalid :for format: \`${forAttr}\`. Expected "{key} in {expression}".`);
381
385
  }
382
- // Keep track of all the child nodes and their subrenderers.
386
+ // Map for keyed reconciliation (only used when :key is provided).
387
+ const keyMap = new Map();
388
+ // Arrays for non-keyed mode (original behavior).
383
389
  const children = [];
384
390
  const subrenderers = [];
385
391
  // Compute the container expression and track dependencies.
@@ -387,49 +393,104 @@ export var RendererPlugins;
387
393
  await this.effect(function () {
388
394
  const items = this.eval(itemsExpr, { $elem: node });
389
395
  this.log(":for list items:", items);
390
- // Dispose all previous subrenderers to clean up their observers.
391
- subrenderers.splice(0, subrenderers.length).forEach((sub) => {
392
- sub.dispose();
393
- });
394
- // Remove all the previously added children, if any.
395
- children.splice(0, children.length).forEach((child) => {
396
- if (child.parentNode) {
397
- removeChild(child.parentNode, child);
398
- }
399
- this._skipNodes.delete(child);
400
- });
401
396
  // Validate that the expression returns a list of items.
402
397
  if (!Array.isArray(items)) {
403
398
  console.error(`Expression did not yield a list: \`${itemsExpr}\` => \`${items}\``);
404
399
  return;
405
400
  }
406
- // Insert point for new elements.
407
- const reference = template.nextSibling;
408
- // Loop through the container items synchronously.
409
- const awaiters = [];
410
- for (const item of items) {
411
- // Create a subrenderer that will hold the loop item and all node descendants.
412
- const subrenderer = this.subrenderer();
413
- // Use local=true to avoid modifying ancestor values.
414
- subrenderer.set(loopKey, item, true);
415
- // Create a new HTML element for each item.
416
- // The copy inherits "display: none" from the template node.
417
- const copy = node.cloneNode(true);
418
- // Insert into DOM while hidden to avoid race conditions.
419
- insertBefore(parent, copy, reference);
420
- // Track the element and subrenderer for cleanup.
421
- children.push(copy);
422
- subrenderers.push(subrenderer);
423
- // Since the element will be handled by a subrenderer, skip it in parent renderer.
424
- this._skipNodes.add(copy);
425
- // Mount the element, then reveal it once complete.
426
- awaiters.push(subrenderer.mount(copy, params).then(() => {
427
- setAttribute(copy, "style", originalStyle);
428
- }));
429
- this.log("Rendered list child:\n", nodeToString(copy, 128));
401
+ // If :key is provided, use keyed reconciliation. Otherwise, use original behavior.
402
+ if (keyExpr) {
403
+ // KEYED RECONCILIATION: Reuse nodes and subrenderers based on key.
404
+ const seenKeys = new Set();
405
+ const newKeyMap = new Map();
406
+ const awaiters = [];
407
+ let cursor = template.nextSibling;
408
+ for (let idx = 0; idx < items.length; idx++) {
409
+ const item = items[idx];
410
+ const key = this.eval(keyExpr, { [loopKey]: item, $index: idx });
411
+ if (seenKeys.has(key)) {
412
+ console.warn(`:for duplicate key detected: ${key}. Using last item.`);
413
+ }
414
+ seenKeys.add(key);
415
+ let nodeForThisItem;
416
+ let subrenderer;
417
+ const existingEntry = keyMap.get(key);
418
+ if (existingEntry) {
419
+ // REUSE existing node and subrenderer.
420
+ nodeForThisItem = existingEntry.node;
421
+ subrenderer = existingEntry.subrenderer;
422
+ // Update the loop variable if the item object changed.
423
+ // Await set() to ensure observers are notified before continuing.
424
+ awaiters.push(subrenderer.set(loopKey, item, true));
425
+ awaiters.push(subrenderer.set("$index", idx, true));
426
+ // Move node to correct position if needed.
427
+ // Node is already in position if it equals cursor or its nextSibling is cursor.
428
+ const alreadyInPosition = nodeForThisItem === cursor || nodeForThisItem.nextSibling === cursor;
429
+ if (!alreadyInPosition) {
430
+ insertBefore(parent, nodeForThisItem, cursor);
431
+ }
432
+ }
433
+ else {
434
+ // CREATE new node and subrenderer.
435
+ subrenderer = this.subrenderer();
436
+ subrenderer.set(loopKey, item, true);
437
+ subrenderer.set("$index", idx, true);
438
+ const copy = node.cloneNode(true);
439
+ insertBefore(parent, copy, cursor);
440
+ this._skipNodes.add(copy);
441
+ awaiters.push(subrenderer.mount(copy, params).then(() => {
442
+ setAttribute(copy, "style", originalStyle);
443
+ }));
444
+ nodeForThisItem = copy;
445
+ this.log("Rendered list child:\n", nodeToString(copy, 128));
446
+ }
447
+ newKeyMap.set(key, { node: nodeForThisItem, subrenderer });
448
+ cursor = nodeForThisItem.nextSibling;
449
+ }
450
+ // Remove nodes for keys that no longer exist.
451
+ for (const [key, { node: oldNode, subrenderer: sub }] of keyMap) {
452
+ if (!seenKeys.has(key)) {
453
+ sub.dispose();
454
+ if (oldNode.parentNode)
455
+ removeChild(oldNode.parentNode, oldNode);
456
+ this._skipNodes.delete(oldNode);
457
+ }
458
+ }
459
+ keyMap.clear();
460
+ for (const [k, v] of newKeyMap)
461
+ keyMap.set(k, v);
462
+ return Promise.all(awaiters).then(() => { });
463
+ }
464
+ else {
465
+ // ORIGINAL BEHAVIOR: Dispose all and recreate.
466
+ // This ensures fresh effects are set up with current values.
467
+ subrenderers.splice(0, subrenderers.length).forEach((sub) => {
468
+ sub.dispose();
469
+ });
470
+ children.splice(0, children.length).forEach((child) => {
471
+ if (child.parentNode)
472
+ removeChild(child.parentNode, child);
473
+ this._skipNodes.delete(child);
474
+ });
475
+ const reference = template.nextSibling;
476
+ const awaiters = [];
477
+ for (let idx = 0; idx < items.length; idx++) {
478
+ const item = items[idx];
479
+ const subrenderer = this.subrenderer();
480
+ subrenderer.set(loopKey, item, true);
481
+ subrenderer.set("$index", idx, true);
482
+ const copy = node.cloneNode(true);
483
+ insertBefore(parent, copy, reference);
484
+ children.push(copy);
485
+ subrenderers.push(subrenderer);
486
+ this._skipNodes.add(copy);
487
+ awaiters.push(subrenderer.mount(copy, params).then(() => {
488
+ setAttribute(copy, "style", originalStyle);
489
+ }));
490
+ this.log("Rendered list child:\n", nodeToString(copy, 128));
491
+ }
492
+ return Promise.all(awaiters).then(() => { });
430
493
  }
431
- // Wait for all mounts to complete.
432
- return Promise.all(awaiters).then(() => { });
433
494
  }, { directive: ":for", element: elem, expression: forAttr });
434
495
  }
435
496
  };