tosijs-ui 1.7.2 → 1.7.4
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/CHANGELOG.md +46 -0
- package/dist/color-input.d.ts +0 -1
- package/dist/color-input.js +24 -10
- package/dist/doc-browser.d.ts +9 -0
- package/dist/doc-browser.js +54 -9
- package/dist/doc-system/doc-system-styles.d.ts +2 -0
- package/dist/doc-system/doc-system-styles.js +15 -1
- package/dist/doc-system/doc-system.js +1 -0
- package/dist/doc-system/site/check-examples-cli.js +5 -3
- package/dist/doc-system/site/check-examples.d.ts +13 -0
- package/dist/doc-system/site/check-examples.js +26 -10
- package/dist/doc-system/site/generate-site.d.ts +2 -0
- package/dist/doc-system/site/generate-site.js +1 -0
- package/dist/doc-system/site/orchestrator.js +16 -2
- package/dist/doc-system/site/site-config.d.ts +7 -0
- package/dist/form.d.ts +0 -1
- package/dist/form.js +35 -21
- package/dist/hydrate/hydrate.js +82 -82
- package/dist/hydrate/hydrate.js.map +16 -15
- package/dist/iife.js +114 -114
- package/dist/iife.js.map +16 -15
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/live-example/code-transform.d.ts +14 -0
- package/dist/live-example/code-transform.js +20 -2
- package/dist/live-example/component.d.ts +24 -51
- package/dist/live-example/component.js +44 -51
- package/dist/live-example/styles.d.ts +22 -50
- package/dist/live-example/styles.js +48 -49
- package/dist/live-example/types.d.ts +2 -2
- package/dist/pocket-bar.d.ts +99 -0
- package/dist/pocket-bar.js +298 -0
- package/dist/pop-float.d.ts +1 -1
- package/dist/pop-float.js +13 -7
- package/dist/segmented.d.ts +0 -1
- package/dist/segmented.js +38 -20
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/llms.txt +3 -1
- package/package.json +3 -3
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/tosijs/dist/module.js", "../../src/ab-test.ts", "../../src/via-tag.ts", "../../src/icon-data.ts", "../../src/icons.ts", "../../src/babylon-3d.ts", "../../src/bodymovin-player.ts", "../../src/carousel.ts", "../../src/diff.ts", "../../src/code-editor.ts", "../../src/color-input.ts", "../../src/track-drag.ts", "../../src/make-sorter.ts", "../../src/float.ts", "../../src/pop-float.ts", "../../src/match-shortcut.ts", "../../src/drag-and-drop.ts", "../../src/menu.ts", "../../src/select.ts", "../../src/localize.ts", "../../src/value-renderer.ts", "../../src/data-table.ts", "../../src/dialog.ts", "../../src/doc-system/routing.ts", "../../src/doc-system/nav-tree.ts", "../../node_modules/marked/lib/marked.esm.js", "../../src/doc-system/render.ts", "../../src/doc-system/doc-title.ts", "../../src/tab-selector.ts", "../../src/notifications.ts", "../../src/live-example/code-transform.ts", "../../src/live-example/remote-sync.ts", "../../src/live-example/execution.ts", "../../src/live-example/insert-examples.ts", "../../src/live-example/save-to-source.ts", "../../src/live-example/example-store.ts", "../../src/live-example/styles.ts", "../../src/live-example/test-harness.ts", "../../src/live-example/component.ts", "../../src/side-nav.ts", "../../src/doc-browser.ts", "../../src/doc-system/book-html.ts", "../../src/doc-system/doc-system-styles.ts", "../../src/form.ts", "../../src/doc-system/css-var-editor.ts", "../../src/doc-system/doc-system.ts", "../../src/editable-rect.ts", "../../src/filter-builder.ts", "../../src/header.ts", "../../src/gamepad.ts", "../../src/layout.ts", "../../src/theme.ts", "../../src/live-theme.ts", "../../src/mapbox.ts", "../../src/markdown-viewer.ts", "../../src/month.ts", "../../src/password-strength.ts", "../../src/rating.ts", "../../src/rich-text.ts", "../../src/router.ts", "../../src/segmented.ts", "../../src/size-break.ts", "../../src/sizer.ts", "../../src/tag-list.ts", "../../src/version.ts", "../../src/tooltip.ts", "../../src/index-iife.ts"],
|
|
3
|
+
"sources": ["../../node_modules/tosijs/dist/module.js", "../../src/ab-test.ts", "../../src/via-tag.ts", "../../src/icon-data.ts", "../../src/icons.ts", "../../src/babylon-3d.ts", "../../src/bodymovin-player.ts", "../../src/carousel.ts", "../../src/diff.ts", "../../src/code-editor.ts", "../../src/color-input.ts", "../../src/track-drag.ts", "../../src/make-sorter.ts", "../../src/float.ts", "../../src/pop-float.ts", "../../src/match-shortcut.ts", "../../src/drag-and-drop.ts", "../../src/menu.ts", "../../src/select.ts", "../../src/localize.ts", "../../src/value-renderer.ts", "../../src/data-table.ts", "../../src/dialog.ts", "../../src/doc-system/routing.ts", "../../src/doc-system/nav-tree.ts", "../../node_modules/marked/lib/marked.esm.js", "../../src/doc-system/render.ts", "../../src/doc-system/doc-title.ts", "../../src/tab-selector.ts", "../../src/pocket-bar.ts", "../../src/notifications.ts", "../../src/live-example/code-transform.ts", "../../src/live-example/remote-sync.ts", "../../src/live-example/execution.ts", "../../src/live-example/insert-examples.ts", "../../src/live-example/save-to-source.ts", "../../src/live-example/example-store.ts", "../../src/live-example/styles.ts", "../../src/live-example/test-harness.ts", "../../src/live-example/component.ts", "../../src/side-nav.ts", "../../src/doc-browser.ts", "../../src/doc-system/book-html.ts", "../../src/doc-system/doc-system-styles.ts", "../../src/form.ts", "../../src/doc-system/css-var-editor.ts", "../../src/doc-system/doc-system.ts", "../../src/editable-rect.ts", "../../src/filter-builder.ts", "../../src/header.ts", "../../src/gamepad.ts", "../../src/layout.ts", "../../src/theme.ts", "../../src/live-theme.ts", "../../src/mapbox.ts", "../../src/markdown-viewer.ts", "../../src/month.ts", "../../src/password-strength.ts", "../../src/rating.ts", "../../src/rich-text.ts", "../../src/router.ts", "../../src/segmented.ts", "../../src/size-break.ts", "../../src/sizer.ts", "../../src/tag-list.ts", "../../src/version.ts", "../../src/tooltip.ts", "../../src/index-iife.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"function m(f,E){if(f==null||typeof f!==\"object\")return f;if(f instanceof Date)return new Date(f.getTime());if(E===void 0)E=new WeakMap;else if(E.has(f))return E.get(f);if(f instanceof Set){let L=new Set;E.set(f,L);for(let H of f)L.add(m(H,E));return L}if(f instanceof Map){let L=new Map;E.set(f,L);for(let[H,J]of f)L.set(m(H,E),m(J,E));return L}if(Array.isArray(f)){let L=[];E.set(f,L);for(let H of f)L.push(m(H,E));return L}let M={};E.set(f,M);for(let L in f)M[L]=m(f[L],E);return M}var B0=\"-xin-data\",u=`.${B0}`,s0=\"-xin-event\",p0=`.${s0}`,c=Symbol.for(\"xin-path\"),p=Symbol.for(\"xin-value\"),bf=\"xinObserve\",mf=\"xinBind\",cf=\"xinOn\",T0=Symbol.for(\"tosi-accessor\"),E0=Symbol.for(\"tosi-take\"),G0=Symbol(\"list-binding\"),l=Symbol(\"list-instance\"),i0=new Map;function gf(f,E){let M=i0.get(f);if(M===void 0)M=new Set,i0.set(f,M);M.add(E)}function vf(f){return i0.get(f)}var Pf=new Set;function B(f,E){if(!Pf.has(f))console.warn(E),Pf.add(f)}function n0(f,E){let M=!1;return(...L)=>{if(!M)console.warn(E),M=!0;return f(...L)}}var A=(f)=>{return f&&f[c]||void 0};function k(f){if(typeof f===\"object\"&&f!==null){let E=f[p];return E!==void 0?E:f}return f}function dE(f){return f!=null?f[T0]:void 0}function uE(f,E){if(A(f)===void 0)throw Error(\"tosiSetValue requires a xin or boxed proxy\");f[p]=E}var iE=n0(A,\"xinPath is deprecated. Use tosiPath instead.\"),sE=n0(k,\"xinValue is deprecated. Use tosiValue instead.\"),f0=new WeakMap,v=new WeakMap;var M0=(f)=>{let E=f.cloneNode();if(E instanceof Element){let L=v.get(f),H=f0.get(f);if(L!=null)v.set(E,m(L));if(H!=null)f0.set(E,m(H))}let M=E instanceof HTMLTemplateElement?E.content:E;for(let L of Array.from(f instanceof HTMLTemplateElement?f.content.childNodes:f.childNodes))if(L instanceof Element||L instanceof DocumentFragment)M.appendChild(M0(L));else M.appendChild(L.cloneNode());return E};var L0={debug:!1,perf:!1};var pE=(f)=>{try{return JSON.stringify(f)}catch(E){return\"{has circular references}\"}},r0=(...f)=>Error(f.map(pE).join(\" \"));var nE=()=>new Date(parseInt(\"1000000000\",36)+Date.now()).valueOf().toString(36).slice(1),rE=0,lE=()=>(parseInt(\"10000\",36)+ ++rE).toString(36).slice(-5),a0=()=>nE()+lE(),o0=Symbol(\"delete\"),uf=Symbol(\"new-object\"),l0=Symbol(\"automatic-index\");function sf(f){if(f===\"\")return[];if(Array.isArray(f))return f;else{let E=[];while(f.length>0){let M=f.search(/\\[[^\\]]+\\]/);if(M===-1){E.push(f.split(\".\"));break}else{let L=f.slice(0,M);if(f=f.slice(M),L!==\"\")E.push(L.split(\".\"));if(M=f.indexOf(\"]\")+1,E.push(f.slice(1,M-1)),f.slice(M,M+1)===\".\")M+=1;f=f.slice(M)}}return E}}var H0=new WeakMap;function pf(f,E){if(H0.get(f)===void 0)H0.set(f,{});let M={};if(H0.get(f)[E]=M,E===\"_auto_\")f.forEach((L,H)=>{if(L[l0]===void 0)L[l0]=a0();M[L[l0]+\"\"]=H});else f.forEach((L,H)=>{M[R(L,E)+\"\"]=H});return M}function oE(f,E){if(H0.get(f)===void 0||H0.get(f)[E]===void 0)return pf(f,E);else return H0.get(f)[E]}function aE(f,E,M){M=M+\"\";let L=oE(f,E)[M];if(L===void 0||R(f[L],E)+\"\"!==M)L=pf(f,E)[M];return L}function tE(f,E,M){if(f[E]===void 0&&M!==void 0)f[E]=M;return f[E]}function nf(f,E,M,L){let H=E!==\"\"?aE(f,E,M):M;if(L===o0){if(H!==void 0)f.splice(H,1),H0.delete(f);return Symbol(\"deleted\")}else if(L===uf){if(E===\"\"&&f[H]===void 0)f[H]={}}else if(L!==void 0)if(H!==void 0)f[H]=L;else if(E!==\"\"&&R(L,E)+\"\"===M+\"\")f.push(L),H=f.length-1;else throw Error(`byIdPath insert failed at [${E}=${M}]`);return f[H]}function hf(f){if(!Array.isArray(f))throw r0(\"setByPath failed: expected array, found\",f)}function df(f){if(f==null||!(f instanceof Object))throw r0(\"setByPath failed: expected Object, found\",f)}function R(f,E){let M=sf(E),L=f,H,J,Z,Q;for(H=0,J=M.length;L!==void 0&&H<J;H++){let $=M[H];if(Array.isArray($))for(Z=0,Q=$.length;L!==void 0&&Z<Q;Z++){let Y=$[Z];L=L[Y]}else if(L.length===0){if(L=L[Number($.slice(1))],$[0]!==\"=\")return}else if($.includes(\"=\")){let[Y,...z]=$.split(\"=\");L=nf(L,Y,z.join(\"=\"))}else Z=parseInt($,10),L=L[Z]}return L}function J0(f,E,M){let L=f;if(E===\"\")throw Error(\"setByPath cannot be used to set the root object\");let H=sf(E);while(L!=null&&H.length>0){let J=H.shift();if(typeof J===\"string\"){let Z=J.indexOf(\"=\");if(Z>-1){if(Z===0)df(L);else hf(L);let Q=J.slice(0,Z),$=J.slice(Z+1);if(L=nf(L,Q,$,H.length>0?uf:M),H.length===0)return!0}else{hf(L);let Q=parseInt(J,10);if(H.length>0)L=L[Q];else{if(M!==o0){if(L[Q]===M)return!1;L[Q]=M}else L.splice(Q,1);return!0}}}else if(Array.isArray(J)&&J.length>0){df(L);while(J.length>0){let Z=J.shift();if(J.length>0||H.length>0)L=tE(L,Z,J.length>0?{}:[]);else{if(M!==o0){if(L[Z]===M)return!1;L[Z]=M}else{if(!Object.prototype.hasOwnProperty.call(L,Z))return!1;delete L[Z]}return!0}}}else throw Error(`setByPath failed, bad path ${E}`)}throw Error(`setByPath(${f}, ${E}, ${M}) failed`)}var T={},t0=null,rf=(f)=>{t0=f},q0=()=>{if(t0===null)throw Error(\"xin proxy not initialized\");return t0},e0=null,ff=null,lf=(f,E)=>{e0=f,ff=E},of=()=>{if(e0===null)throw Error(\"bind not initialized\");return e0},af=()=>{if(ff===null)throw Error(\"on not initialized\");return ff};var tf=Symbol(\"observer should be removed\"),I0=[],z0=[],Ef=!1,Mf,Lf;function eE(f,E,M,L){let H=vf(f);if(H===void 0)return[];let J=[];for(let Z of H){let Q=R(M,Z);if(Q!==void 0)J.push(`${f}[${Z}=${Q}]${L}`)}return J}var X0=(f,E)=>{if(!E.startsWith(f))return!1;if(E.length===f.length)return!0;let M=E.charAt(f.length);return M===\".\"||M===\"[\"};class ef{description;test;callback;constructor(f,E){let M=typeof E===\"string\"?`\"${E}\"`:`function ${E.name}`,L;if(typeof f===\"string\")this.test=(H)=>typeof H===\"string\"&&H!==\"\"&&(X0(H,f)||X0(f,H)),L=`test = \"${f}\"`;else if(f instanceof RegExp)this.test=f.test.bind(f),L=`test = \"${f.toString()}\"`;else if(f instanceof Function)this.test=f,L=`test = function ${f.name}`;else throw Error(\"expect listener test to be a string, RegExp, or test function\");if(this.description=`${L}, ${M}`,typeof E===\"function\")this.callback=E;else throw Error(\"expect callback to be a path or function\");I0.push(this)}}var W0=async()=>{if(Mf===void 0)return;await Mf},f8=()=>{if(L0.perf)console.time(\"xin async update\");let f=Array.from(z0);z0.length=0,Ef=!1;let E=Lf;Lf=void 0;try{for(let M of f)I0.filter((L)=>{let H;try{H=L.test(M)}catch(J){return console.error(`Listener ${L.description} threw \"${J}\" at \"${M}\"`),!1}if(H===tf)return Z0(L),!1;return H}).forEach((L)=>{let H;try{H=L.callback(M)}catch(J){console.error(`Listener ${L.description} threw \"${J}\" handling \"${M}\"`)}if(H===tf)Z0(L)})}finally{if(typeof E===\"function\")E();if(L0.perf)console.timeEnd(\"xin async update\")}},P=(f)=>{let E=typeof f===\"string\"?f:A(f);if(E===void 0)throw console.error(\"touch was called on an invalid target\",f),Error(\"touch was called on an invalid target\");if(Ef===!1)Mf=new Promise((L)=>{Lf=L}),Ef=setTimeout(f8);if(z0.find((L)=>X0(L,E))==null)z0.push(E);let M=E.match(/^(.+)\\[(\\d+)\\](.*)$/);if(M!==null){let[,L,H,J]=M,Z=parseInt(H,10),Q=R(T,`${L}[${Z}]`);if(Q!=null){let $=eE(L,Z,Q,J);for(let Y of $)if(z0.find((z)=>X0(z,Y))==null)z0.push(Y)}}},n=(f,E)=>{return new ef(f,E)},Z0=(f)=>{let E=I0.indexOf(f);if(E>-1)I0.splice(E,1);else throw Error(\"unobserve failed, listener not found\")};var Hf=(f,E,{bubbles:M=!1,composed:L=!1}={})=>{let H=new Event(E,{bubbles:M,composed:L});f.dispatchEvent(H)},EE=(f)=>{if(f instanceof HTMLInputElement)return f.type;else if(f instanceof HTMLSelectElement&&f.hasAttribute(\"multiple\"))return\"multi-select\";else return\"other\"},b=(f,E=2)=>String(f).padStart(E,\"0\"),E8=(f,E)=>{switch(f){case\"date\":return`${E.getUTCFullYear()}-${b(E.getUTCMonth()+1)}-${b(E.getUTCDate())}`;case\"month\":return`${E.getUTCFullYear()}-${b(E.getUTCMonth()+1)}`;case\"datetime-local\":return`${E.getFullYear()}-${b(E.getMonth()+1)}-${b(E.getDate())}T${b(E.getHours())}:${b(E.getMinutes())}`;default:return E.toISOString()}},M8=(f)=>{let E=Math.floor(f/1000),M=`${b(Math.floor(E/3600))}:${b(Math.floor(E/60)%60)}`;return E%60===0?M:`${M}:${b(E%60)}`},L8=(f)=>{let E=f.match(/^(\\d\\d):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d+))?)?$/);if(E==null)return NaN;let[,M,L,H,J]=E;return(Number(M)*60+Number(L))*60000+Number(H??0)*1000+Number(J??0)};var ME=(f,E)=>{let M=EE(f);switch(M){case\"radio\":f.checked=E!=null&&f.value===String(E);break;case\"checkbox\":f.checked=!!E;break;case\"date\":case\"datetime-local\":case\"month\":case\"week\":{let L=f;if(E==null||E===\"\")L.value=\"\";else if(E instanceof Date||typeof E===\"number\"){let H=E instanceof Date?E:new Date(E);if(M===\"week\")try{L.valueAsDate=H}catch(J){}else L.value=E8(M,H)}else L.value=String(E);break}case\"time\":{let L=f;if(E==null||E===\"\")L.value=\"\";else if(typeof E===\"number\")L.value=M8(E);else if(E instanceof Date)L.value=`${b(E.getHours())}:${b(E.getMinutes())}:${b(E.getSeconds())}`;else L.value=String(E);break}case\"multi-select\":for(let L of Array.from(f.querySelectorAll(\"option\")))L.selected=Array.isArray(E)?E.map(String).includes(L.value):E!=null?!!E[L.value]:!1;break;default:f.value=E==null?\"\":E}},LE=(f)=>{switch(EE(f)){case\"radio\":{let M=f.parentElement?.querySelector(`[name=\"${f.name}\"]:checked`);return M!=null?M.value:null}case\"checkbox\":return f.checked;case\"number\":case\"range\":{let M=f,L=typeof M.valueAsNumber===\"number\"?M.valueAsNumber:Number(M.value);return Number.isNaN(L)?M.value:L}case\"date\":case\"datetime-local\":case\"month\":case\"week\":{let M=f,L=M.valueAsDate??(M.value!==\"\"?new Date(M.value):null);return L!=null&&!Number.isNaN(L.getTime())?L:M.value}case\"time\":{let M=f,L=typeof M.valueAsNumber===\"number\"?M.valueAsNumber:NaN;if(Number.isNaN(L))L=L8(M.value);return Number.isNaN(L)?M.value:L}case\"multi-select\":return Array.from(f.querySelectorAll(\"option\")).reduce((M,L)=>{return M[L.value]=L.selected,M},{});default:return f.value}};var{ResizeObserver:fE}=globalThis,D0=fE!=null?new fE((f)=>{for(let E of f){let M=E.target;Hf(M,\"resize\")}}):{observe(){},unobserve(){}},Jf=(f,E,M=!0)=>{if(f!=null&&E!=null)if(typeof E===\"string\")f.textContent=E;else if(Array.isArray(E))E.forEach((L)=>{f.append(L instanceof Node&&M?M0(L):L)});else if(E instanceof Node)f.append(M?M0(E):E);else throw Error(\"expect text content or document node\")};var K0=(f,E=250)=>{let M;return function(...L){if(M!==void 0)clearTimeout(M);M=setTimeout(()=>{f.apply(this,L)},E)}},U0=(f,E=250)=>{let M,L=Date.now()-E;return function(...H){clearTimeout(M);let J=Date.now()-L;if(J>=E)L=Date.now(),f.apply(this,H);else M=setTimeout(()=>{L=Date.now(),f.apply(this,H)},E-J)}};var V0={value:{toDOM:ME,fromDOM(f){return LE(f)}},text:{toDOM(f,E){f.textContent=E}},enabled:{toDOM(f,E){f.disabled=!E}},disabled:{toDOM(f,E){f.disabled=Boolean(E)}},list:{toDOM(f,E,M){O0(f,E,M).update(E)}}};function S(f){return f.replace(/[A-Z]/g,(E)=>{return`-${E.toLocaleLowerCase()}`})}function Zf(f){return f.replace(/-([a-z])/g,(E,M)=>{return M.toLocaleUpperCase()})}var H8=180/Math.PI,J8=Math.PI/180;function h(f,E,M){return M<f?NaN:E<f?f:E>M?M:E}function r(f,E,M,L=!0){if(L)M=h(0,M,1);return M*(E-f)+f}var Z8={RADIANS_TO_DEGREES:H8,DEGREES_TO_RADIANS:J8,clamp:h,lerp:r};function $f(f,E=document.body){let M=getComputedStyle(E);if(f.endsWith(\")\")&&f.startsWith(\"var(\"))f=f.slice(4,-1);return M.getPropertyValue(f).trim()}var _0={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgreen:\"#90ee90\",lightgrey:\"#d3d3d3\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370db\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#db7093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",rebeccapurple:\"#663399\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\"};var $8=(f,E,M)=>{return(0.299*f+0.587*E+0.114*M)/255},$0=(f)=>(\"00\"+Math.round(Number(f)).toString(16)).slice(-2);class HE{h;s;l;constructor(f,E,M){f/=255,E/=255,M/=255;let L=Math.max(f,E,M),H=L-Math.min(f,E,M),J=H!==0?L===f?(E-M)/H:L===E?2+(M-f)/H:4+(f-E)/H:0;this.h=60*J<0?60*J+360:60*J,this.s=H!==0?L<=0.5?H/(2*L-H):H/(2-(2*L-H)):0,this.l=(2*L-H)/2}}var o=globalThis.document!==void 0?globalThis.document.createElement(\"span\"):void 0;if(o)o.style.display=\"none\";class X{r;g;b;a;static fromVar(f,E=document.body){return X.fromCss($f(f,E))}static fromCss(f){let E=_0[String(f).trim().toLowerCase()];if(E!==void 0)f=E;let M=f.match(/^#([0-9a-fA-F]+)$/);if(M){let Y=M[1],z=(G,W)=>parseInt(Y.slice(G,G+W),16);if(Y.length===3||Y.length===4){let G=(W)=>z(W,1)*17;return new X(G(0),G(1),G(2),Y.length===4?G(3)/255:1)}if(Y.length===6||Y.length===8)return new X(z(0,2),z(2,2),z(4,2),Y.length===8?z(6,2)/255:1)}let L=f;if(o instanceof HTMLSpanElement)o.style.color=\"black\",o.style.color=f,document.body.appendChild(o),L=getComputedStyle(o).color,o.remove();let[H,J,Z,Q]=L.match(/[\\d.]+/g)||[\"0\",\"0\",\"0\",\"0\"],$=L.startsWith(\"color(srgb\")?255:1;return new X(Number(H)*$,Number(J)*$,Number(Z)*$,Q==null?1:Number(Q))}static fromHsl(f,E,M,L=1){let H,J,Z;if(E===0)H=J=Z=M;else{let $=(W,I,U)=>{if(U<0)U+=1;if(U>1)U-=1;if(U<0.16666666666666666)return W+(I-W)*6*U;if(U<0.5)return I;if(U<0.6666666666666666)return W+(I-W)*(0.6666666666666666-U)*6;return W},Y=M<0.5?M*(1+E):M+E-M*E,z=2*M-Y,G=(f%360+360)%360/360;H=$(z,Y,G+0.3333333333333333),J=$(z,Y,G),Z=$(z,Y,G-0.3333333333333333)}let Q=new X(H*255,J*255,Z*255,L);return Q.hslCached={h:(f%360+360)%360,s:E,l:M},Q}static black=new X(0,0,0);static white=new X(255,255,255);constructor(f,E,M,L=1){this.r=h(0,f,255),this.g=h(0,E,255),this.b=h(0,M,255),this.a=h(0,L,1)}get inverse(){return new X(255-this.r,255-this.g,255-this.b,this.a)}get inverseLuminance(){let{h:f,s:E,l:M}=this._hsl;return X.fromHsl(f,E,1-M,this.a)}get opaque(){return this.a===1?this:new X(this.r,this.g,this.b,1)}contrasting(f=1){return this.opaque.blend(this.brightness>0.5?X.black:X.white,f)}get rgb(){let{r:f,g:E,b:M}=this;return`rgb(${f.toFixed(0)},${E.toFixed(0)},${M.toFixed(0)})`}get rgba(){let{r:f,g:E,b:M,a:L}=this;return`rgba(${f.toFixed(0)},${E.toFixed(0)},${M.toFixed(0)},${L.toFixed(2)})`}get RGBA(){return[this.r/255,this.g/255,this.b/255,this.a]}get ARGB(){return[this.a,this.r/255,this.g/255,this.b/255]}hslCached;get _hsl(){if(this.hslCached==null)this.hslCached=new HE(this.r,this.g,this.b);return this.hslCached}get hsl(){let{h:f,s:E,l:M}=this._hsl;return`hsl(${f.toFixed(0)}deg ${(E*100).toFixed(0)}% ${(M*100).toFixed(0)}%)`}get hsla(){let{h:f,s:E,l:M}=this._hsl;return`hsl(${f.toFixed(0)}deg ${(E*100).toFixed(0)}% ${(M*100).toFixed(0)}% / ${(this.a*100).toFixed(0)}%)`}get mono(){let f=this.brightness*255;return new X(f,f,f)}get brightness(){return $8(this.r,this.g,this.b)}get html(){return this.toString()}toString(){return this.a===1?\"#\"+$0(this.r)+$0(this.g)+$0(this.b):\"#\"+$0(this.r)+$0(this.g)+$0(this.b)+$0(255*this.a)}brighten(f){let{h:E,s:M,l:L}=this._hsl,H=h(0,L+f*(1-L),1);return X.fromHsl(E,M,H,this.a)}darken(f){let{h:E,s:M,l:L}=this._hsl,H=h(0,L*(1-f),1);return X.fromHsl(E,M,H,this.a)}saturate(f){let{h:E,s:M,l:L}=this._hsl,H=h(0,M+f*(1-M),1);return X.fromHsl(E,H,L,this.a)}desaturate(f){let{h:E,s:M,l:L}=this._hsl,H=h(0,M*(1-f),1);return X.fromHsl(E,H,L,this.a)}rotate(f){let{h:E,s:M,l:L}=this._hsl,H=(E+360+f)%360;return X.fromHsl(H,M,L,this.a)}opacity(f){let{h:E,s:M,l:L}=this._hsl;return X.fromHsl(E,M,L,f)}swatch(){return console.log(`%c %c ${this.html}, ${this.rgba}`,`background-color: ${this.html}`,\"background-color: transparent\"),this}blend(f,E){return new X(r(this.r,f.r,E),r(this.g,f.g,E),r(this.b,f.b,E),r(this.a,f.a,E))}static blendHue(f,E,M){let L=(E-f+720)%360;if(L<180)return f+M*L;else return f-(360-L)*M}mix(f,E){let M=this._hsl,L=f._hsl;return X.fromHsl(M.s===0?L.h:L.s===0?M.h:X.blendHue(M.h,L.h,E),r(M.s,L.s,E),r(M.l,L.l,E),r(this.a,f.a,E))}colorMix(f,E){return X.fromCss(`color-mix(in hsl, ${this.html}, ${f.html} ${(E*100).toFixed(0)}%)`)}static computedColorStylesheet=null;static computedColors=new Map;static recomputeQueued=!1;static registerComputedColor(f,E,M,L){if(!X.computedColors.has(f))X.computedColors.set(f,{varName:E,scale:M,method:L}),X.queueRecompute()}static queueRecompute(){if(X.recomputeQueued)return;X.recomputeQueued=!0,queueMicrotask(()=>{X.recomputeQueued=!1,X.recomputeColors()})}static recomputeColors(){if(X.computedColors.size===0)return;let f=[];for(let[M,{varName:L,scale:H,method:J}]of X.computedColors)try{let Z=X.fromVar(L),Q;switch(J){case\"b\":Q=H>0?Z.brighten(H):Z.darken(-H);break;case\"s\":Q=H>0?Z.saturate(H):Z.desaturate(-H);break;case\"h\":Q=Z.rotate(H*100);break;case\"o\":Q=Z.opacity(H);break;default:continue}f.push(` ${M}: ${Q.rgba};`)}catch(Z){}if(f.length===0)return;let E=`:root {\n${f.join(`\n`)}\n}`;if(X.computedColorStylesheet===null)X.computedColorStylesheet=document.createElement(\"style\"),X.computedColorStylesheet.id=\"tosijs-computed-colors\",document.head.append(X.computedColorStylesheet);X.computedColorStylesheet.textContent=E}}var w0=new Set,JE=!1;function Q8(){if(!JE)JE=!0,w0.add(()=>X.queueRecompute())}function Y8(f){return w0.add(f),()=>w0.delete(f)}function G8(){Q8();for(let f of w0)f()}function z8(f,E){let M=k(E),L=_.style(Q0(M));L.id=f,document.head.append(L);let H=A(E);if(H!==void 0)C0(H,()=>{L.textContent=Q0(k(E)),G8()});return L}var X8=/^(animation-iteration-count|column-count|flex(-grow|-shrink)?|font-weight|line-height|opacity|order|orphans|scale|tab-size|widows|z-index|zoom)$/,Qf=(f,E)=>{if(typeof E===\"number\"&&!X8.test(f.replace(/^_+/,\"\")))E=`${E}px`;if(f.startsWith(\"_\"))if(f.startsWith(\"__\"))f=\"--\"+f.substring(2),E=`var(${f}-default, ${E})`;else f=\"--\"+f.substring(1);return{prop:f,value:String(E)}},W8=(f,E,M)=>{if(M===void 0)return\"\";if(M instanceof X)M=M.html;let L=Qf(E,M);return`${f} ${L.prop}: ${L.value};`},ZE=(f,E,M=\"\")=>{let L=S(f);if(typeof E===\"object\"&&!(E instanceof X)){let H=Object.keys(E).map((J)=>ZE(J,E[J],`${M} `)).join(`\n`);return`${M} ${f} {\n${H}\n${M} }`}else return W8(M,L,E)},Q0=(f,E=\"\")=>{return Object.keys(f).map((L)=>{let H=f[L];if(typeof H===\"string\"){if(L===\"@import\")return`@import url('${H}');`;throw Error(\"top-level string value only allowed for `@import`\")}let J=Object.keys(H).map((Z)=>ZE(Z,H[Z])).join(`\n`);return`${E}${L} {\n${J}\n}`}).join(`\n\n`)},U8=(f)=>{B(\"initVars\",\"initVars is deprecated. Just use _ and __ prefixes instead.\");let E={};for(let M of Object.keys(f)){let L=f[M],H=S(M);E[`--${H}`]=typeof L===\"number\"&&L!==0?String(L)+\"px\":L}return E},F8=(f)=>{let E={};for(let M of Object.keys(f)){let L=f[M];if(L instanceof X)E[M]=L.inverseLuminance;else if(typeof L===\"string\"&&(L.match(/^(#[0-9a-fA-F]{3}|rgba?\\(|hsla?\\()/)!=null||_0[L.trim().toLowerCase()]!==void 0))E[M]=X.fromCss(L).inverseLuminance}return E},S0=new Proxy({},{get(f,E){if(f[E]===void 0){let M=\"--\"+S(E);f[E]=(L)=>`var(${M}, ${L})`}return f[E]}}),Yf=new Proxy({},{get(f,E){if(E===\"default\")return S0;if(f[E]==null){E=S(E);let[,M,,L,H,J]=E.match(/^([-\\w]*?)((_)?(\\d+)(\\w?))?$/)||[\"\",E],Z=`--${M}`;if(H!=null){let Q=L==null?Number(H)/100:-Number(H)/100;switch(J){case\"b\":case\"s\":case\"h\":case\"o\":{let $=`--${E}`;X.registerComputedColor($,Z,Q,J),f[E]=`var(${$})`}break;case\"\":f[E]=`calc(var(${Z}) * ${Q})`;break;default:throw console.error(J),Error(`Unrecognized method ${J} for css variable ${Z}`)}}else f[E]=`var(${Z})`}return f[E]}});function $E(){let f=(E)=>typeof matchMedia<\"u\"&&matchMedia(E).matches;return{colorScheme:f(\"(prefers-color-scheme: dark)\")?\"dark\":\"light\",contrast:f(\"(prefers-contrast: more)\")?\"more\":f(\"(prefers-contrast: less)\")?\"less\":f(\"(prefers-contrast: custom)\")?\"custom\":\"no-preference\",reducedMotion:f(\"(prefers-reduced-motion: reduce)\"),reducedTransparency:f(\"(prefers-reduced-transparency: reduce)\"),forcedColors:f(\"(forced-colors: active)\")}}function q8(f){if(typeof matchMedia>\"u\")return()=>{};let E=[\"(prefers-color-scheme: dark)\",\"(prefers-contrast: more)\",\"(prefers-contrast: less)\",\"(prefers-contrast: custom)\",\"(prefers-reduced-motion: reduce)\",\"(prefers-reduced-transparency: reduce)\",\"(forced-colors: active)\"],M=()=>f($E()),L=E.map((H)=>matchMedia(H));for(let H of L)H.addEventListener(\"change\",M);return()=>{for(let H of L)H.removeEventListener(\"change\",M)}}var QE=\"http://www.w3.org/1998/Math/MathML\",YE=\"http://www.w3.org/2000/svg\";var N0={},WE=(f,E,M)=>{let L=Qf(S(E),M);if(L.prop.startsWith(\"--\"))f.style.setProperty(L.prop,L.value);else f.style[E]=L.value},D8=(f)=>{return{toDOM(E,M){WE(E,f,M)}}},GE=new WeakMap,UE=(f,E,M)=>{if(E===\"style\")if(typeof M===\"object\")for(let L of Object.keys(M))if(A(M[L]))d(f,M[L],D8(L));else WE(f,L,M[L]);else f.setAttribute(\"style\",M);else{let L=S(E),H=f.constructor.observedAttributes;if(H?.includes(E)||H?.includes(L))if(typeof M===\"boolean\")M?f.setAttribute(L,\"\"):f.removeAttribute(L);else f.setAttribute(L,M);else if(f[E]!==void 0){let{MathMLElement:Z}=globalThis;if(f instanceof SVGElement||Z!==void 0&&f instanceof Z)f.setAttribute(E,M);else f[E]=M}else if(L===\"class\"){let Z=(z)=>String(z||\"\").split(/\\s+/).filter(Boolean),Q=new Set,$=new Set;if(Array.isArray(M))for(let z of M)for(let G of Z(z))Q.add(G);else if(M!=null&&typeof M===\"object\")for(let[z,G]of Object.entries(M))for(let W of Z(z))(G?Q:$).add(W);else for(let z of Z(M))Q.add(z);let Y=GE.get(f);if(Y){for(let z of Y)if(!Q.has(z))f.classList.remove(z)}for(let z of $)f.classList.remove(z);for(let z of Q)f.classList.add(z);GE.set(f,Q)}else if(f[L]!==void 0)f[L]=M;else if(typeof M===\"boolean\")M?f.setAttribute(L,\"\"):f.removeAttribute(L);else f.setAttribute(L,M)}},Gf={},zE=(f)=>{if(!Gf[f])Gf[f]={toDOM(E,M){UE(E,f,M)}};return Gf[f]},x0=(f,E,M)=>{if(E===\"apply\")M(f);else if(E.match(/^on[A-Z]/)!=null){let L=E.substring(2).toLowerCase();F0(f,L,M)}else if(E===\"bind\"){let L=typeof M.binding===\"string\"?V0[M.binding]:M.binding;if(L!==void 0&&M.value!==void 0)d(f,M.value,L instanceof Function?{toDOM:L}:L);else throw Error(\"bad binding\")}else if(E.match(/^bind[A-Z]/)!=null){let L=E.substring(4,5).toLowerCase()+E.substring(5);if(L!==\"value\"){let J=L===\"text\"?\"textContent\":L===\"enabled\"?\"disabled (with .tosi.take(v => !v))\":L===\"disabled\"?\"disabled\":L===\"list\"?\".tosi.listBinding()\":null;if(J)B(`bind${L}`,`bind${E.substring(4)} is deprecated. Use { ${J}: ... } instead.`)}let H=V0[L];if(H!==void 0)d(f,M,H);else throw Error(`${E} is not allowed, bindings.${L} is not defined`)}else if(M!=null&&typeof M===\"object\"&&M[E0])d(f,M,zE(E));else if(A(M))d(f,M,zE(E));else UE(f,E,M)},zf=(f,...E)=>{if(N0[f]===void 0){let[H,J]=f.split(\"|\");if(J===void 0)N0[f]=globalThis.document.createElement(H);else N0[f]=globalThis.document.createElementNS(J,H)}let M=N0[f].cloneNode(),L={};for(let H of E)if(H instanceof Element||H instanceof DocumentFragment||typeof H===\"string\"||typeof H===\"number\")if(M instanceof HTMLTemplateElement)M.content.append(H);else M.append(H);else if(A(H))M.append(_.span({bindText:H}));else Object.assign(L,H);for(let H of Object.keys(L)){let J=L[H];x0(M,H,J)}return M},Xf=(...f)=>{let E=globalThis.document.createDocumentFragment();for(let M of f)E.append(M);return E},_=new Proxy({fragment:Xf},{get(f,E){if(E=E.replace(/[A-Z]/g,(M)=>`-${M.toLocaleLowerCase()}`),f[E]===void 0)f[E]=(...M)=>zf(E,...M);return f[E]},set(){throw Error(\"You may not add new properties to elements\")}}),Wf=new Proxy({fragment:Xf},{get(f,E){if(f[E]===void 0)f[E]=(...M)=>zf(`${E}|${YE}`,...M);return f[E]},set(){throw Error(\"You may not add new properties to elements\")}}),Uf=new Proxy({fragment:Xf},{get(f,E){if(f[E]===void 0)f[E]=(...M)=>zf(`${E}|${QE}`,...M);return f[E]},set(){throw Error(\"You may not add new properties to elements\")}}),XE=new WeakSet;function K8(f,E,M=\"part\"){let L=`[data-${M}]`;for(let H of Array.from(f.querySelectorAll(L))){if(XE.has(H))continue;let J=H.getAttribute(`data-${M}`);if(J==null)continue;let Z=E[J];if(Z==null)continue;XE.add(H);for(let Q of Object.keys(Z))x0(H,Q,Z[Q])}}var O8=[\"sort\",\"splice\",\"copyWithin\",\"fill\",\"pop\",\"push\",\"reverse\",\"shift\",\"unshift\"],C8=!0,k8=/^\\.?([^.[\\](),])+(\\.[^.[\\](),]+|\\[\\d+\\]|\\[[^=[\\](),]*=[^[\\]()]+\\])*$/,j8=(f)=>k8.test(f),a=(f=\"\",E=\"\")=>{if(f===\"\")return E;else if(E.startsWith(\"[\")&&E.endsWith(\"]\"))return`${f}${E}`;else if(E.match(/^\\d+$/)!==null||E.includes(\"=\"))return`${f}[${E}]`;else return`${f}.${E}`},y0={};function Ff(f,E){if(f!==null&&(typeof f===\"object\"||typeof f===\"function\"))return f;return new Proxy(y0,t(E,!0))}var OE=()=>new Proxy({},t(\"^\",!0)),qf=(f)=>{let M=f(OE())?.path;if(!M?.startsWith(\"^.\"))throw Error(\"selector must return a property of the item\");return M.substring(2)},Df=(f,E,M)=>{for(let L=0;L<f.length;L++)if(`${R(f[L],E)}`===`${M}`)return L;return-1},A8=(f,E)=>({listFind(M,L){if(M instanceof Element){let Z=M;while(Z&&!Z[l]&&Z.parentElement)Z=Z.parentElement;let Q=Z?.[l];if(Q==null)return;let $=E.indexOf(Q);return $!==-1?N[f][$]:void 0}let H=qf(M),J=Df(E,H,L);return J!==-1?N[f][J]:void 0},listUpdate(M,L){let H=qf(M),J=R(L,H),Z=Df(E,H,J);if(Z!==-1){let Q=N[f][Z];for(let $ of Object.keys(L))Q[$]=L[$];return Q}return N[f].push(L),N[f][E.length-1]},listRemove(M,L){let H=qf(M),J=Df(E,H,L);if(J===-1)return!1;return N[f].splice(J,1),!0}}),FE=!1;function R8(){if(!FE)console.warn(\"xinValue, tosiValue, xinPath, tosiPath, etc. are deprecated. Use .tosi.value, .tosi.path, .tosi.observe(), etc. instead.\"),FE=!0}var qE=(f)=>{return f===y0},B8=(f,E)=>({get(M,L){switch(L){case\"value\":return E===y0?R(T,f):E.valueOf?E.valueOf():E;case\"path\":return f;case\"touch\":return()=>P(f);case\"observe\":return(H)=>{let J=n(f,H);return()=>Z0(J)};case\"bind\":return(H,J,Z)=>{of()(H,f,J,Z)};case\"on\":{let H=E===y0?R(T,f):E.valueOf?E.valueOf():E;return(J,Z)=>af()(J,Z,H)}case\"binding\":return(H)=>({bind:{value:f,binding:H}});case\"listBinding\":return(H=({span:Z})=>Z({bindText:\"^\"}),J={})=>{let Z=J.virtual?.itemsPerRow??1,Q=[];for(let $=0;$<Z;$++)Q.push(H(_,OE(),$));return[{bindList:{value:f,...J}},_.template(...Q)]};case\"listFind\":case\"listUpdate\":case\"listRemove\":return A8(f,Array.isArray(E)?E:[])[L];case\"take\":return(...H)=>{let J=H[H.length-1],Q=H.slice(0,-1).map(($)=>typeof $===\"string\"?$:$[c]);return{[E0]:!0,paths:[f,...Q],transform:J}}}return},set(M,L,H){if(L===\"value\"){if(H=k(H),k(w[f])!==H&&J0(T,f,H))P(f);return!0}return!1}}),k0=(f,E)=>new Proxy(E,B8(f,E)),DE=new Set([\"path\",\"value\",\"touch\",\"observe\",\"bind\",\"on\",\"binding\",\"listBinding\",\"listFind\",\"listUpdate\",\"listRemove\",\"take\"]),KE=new Map([[c,\"path\"],[\"xinPath\",\"path\"],[\"tosiPath\",\"path\"],[p,\"value\"],[\"xinValue\",\"value\"],[\"tosiValue\",\"value\"],[bf,\"observe\"],[\"xinObserve\",\"observe\"],[\"tosiObserve\",\"observe\"],[cf,\"on\"],[\"xinOn\",\"on\"],[\"tosiOn\",\"on\"],[mf,\"bind\"],[\"xinBind\",\"bind\"],[\"tosiBind\",\"bind\"],[\"tosiBinding\",\"binding\"],[\"tosiListBinding\",\"listBinding\"]]),t=(f,E)=>({get(M,L){if((L===\"tosi\"||L===T0)&&E)return k0(f,M);if(qE(M)){let $=()=>R(T,f);switch(L){case\"valueOf\":case\"toJSON\":return()=>$();case Symbol.toPrimitive:return(G)=>{let W=$();if(G===\"number\")return Number(W);if(G===\"string\")return String(W);return W};case\"toString\":return()=>String($())}if(DE.has(L))return k0(f,M)[L];let Y=KE.get(L);if(Y!==void 0)return R8(),k0(f,M)[Y];let z=$();if(z!=null){let G=Object(z);if(L in G){let W=G[L];return typeof W===\"function\"?W.bind(G):W}}return}if(E&&(L===\"valueOf\"||L===\"toJSON\"))return()=>M.valueOf?M.valueOf():M;if(E&&!(L in M)&&DE.has(L))return k0(f,M)[L];let H=KE.get(L);if(H!==void 0)return k0(f,M)[H];if(typeof L===\"symbol\")return M[L];let J=Object.getOwnPropertyDescriptor(M,L);if(J&&!J.configurable&&!J.writable&&\"value\"in J)return J.value;let Z=L,Q=Z.match(/^([^.[]+)\\.(.+)$/)??Z.match(/^([^\\]]+)(\\[.+)/)??Z.match(/^(\\[[^\\]]+\\])\\.(.+)$/)??Z.match(/^(\\[[^\\]]+\\])\\[(.+)$/);if(Q!==null){let[,$,Y]=Q,z=a(f,$),G=k(R(M,$));return G!==null&&typeof G===\"object\"?new Proxy(G,t(z,E))[Y]:G}if(Z.startsWith(\"[\")&&Z.endsWith(\"]\"))Z=Z.substring(1,Z.length-1);if(!Array.isArray(M)&&M[Z]!==void 0||Array.isArray(M)&&Z.includes(\"=\")){let $;if(Z.includes(\"=\")){let[Y,z]=Z.split(\"=\");$=M.find((G)=>`${R(G,Y)}`===z)}else $=M[Z];if($ instanceof Object){$=k($);let Y=a(f,Z);return new Proxy($ instanceof Function?$.bind(M):$,t(Y,E))}else return E?Ff($,a(f,Z)):$}else if(Array.isArray(M)){let $=M[Z];return typeof $===\"function\"?(...Y)=>{let z=Y.map((W)=>k(W)),G=$.apply(M,z);if(O8.includes(Z))P(f);if(G!=null&&typeof G===\"object\"){if(Z===\"find\"||Z===\"findLast\"||Z===\"at\"){let W=M.indexOf(G);if(W!==-1)return new Proxy(G,t(a(f,String(W)),E))}}return G}:typeof $===\"object\"?new Proxy(k($),t(a(f,Z),E)):E?Ff($,a(f,Z)):$}else{let $=M[Z];if($!==null&&typeof $===\"object\")$=k($);return E?Ff($,a(f,Z)):$}},set(M,L,H){if(H=k(H),typeof L===\"symbol\"&&L!==p)return M[L]=H,!0;if(H!==null&&typeof H===\"object\")if(Array.isArray(H))for(let $=0;$<H.length;$++)H[$]=k(H[$]);else for(let $ of Object.keys(H))H[$]=k(H[$]);let Z=L===p||L===\"xinValue\"||L===\"tosiValue\"||L===\"value\"&&(qE(M)||E&&!(\"value\"in M))?f:a(f,L);if(C8&&!j8(Z))throw Error(`setting invalid path ${Z}`);if(k(w[Z])!==H&&J0(T,Z,H))P(Z);return!0}}),C0=(f,E)=>{let M=typeof E===\"function\"?E:w[E];if(typeof M!==\"function\")throw Error(`observe expects a function or path to a function, ${E} is neither`);return n(f,M)},w=new Proxy(T,t(\"\",!1));rf(w);var N=new Proxy(T,t(\"\",!0));var T8=16,I8=100;function CE(f,E){let M=Array.from(f.querySelectorAll(u));if(f.matches(u))M.unshift(f);for(let L of M){let H=v.get(L);for(let J of H){if(J.path.startsWith(\"^\"))J.path=`${E}${J.path.substring(1)}`;if(J.binding.toDOM!=null)J.binding.toDOM(L,w[J.path],J.options)}}}var kE=!1;class jE{boundElement;listTop;listBottom;isNamespaced;templates;options;itemToElement;idToElement=new Map;array=[];_filteredCache;_update;_previousSlice;static filterBoundObservers=new WeakMap;constructor(f,E,M={}){if(this.boundElement=f,this.itemToElement=new WeakMap,M.idPath!=null){let Q=A(E);if(Q!=null)gf(Q,M.idPath)}let L=M.virtual?.itemsPerRow??1,H=Array.from(f.children).find((Q)=>Q instanceof HTMLTemplateElement),J=null;if(H!=null){let Q=L;if(H.content.children.length<1||H.content.children.length!==Q)throw Error(`ListBinding expects a template with exactly ${Q} child element(s)`);this.templates=Array.from(H.content.children).map(($)=>M0($)),J=H.nextElementSibling,H.remove()}else if(f.children.length===1)this.templates=[f.children[0]],this.templates[0].remove();else throw Error(\"ListBinding expects a <template> child or exactly one child element\");this.options=M;let Z=f.namespaceURI;if(this.isNamespaced=Z===\"http://www.w3.org/2000/svg\"||Z===\"http://www.w3.org/1998/Math/MathML\",this.isNamespaced)this.listTop=null,this.listBottom=null;else if(this.listTop=document.createElement(\"div\"),this.listBottom=document.createElement(\"div\"),this.listTop.classList.add(\"virtual-list-padding\"),this.listBottom.classList.add(\"virtual-list-padding\"),this.listTop.setAttribute(\"role\",\"presentation\"),this.listBottom.setAttribute(\"role\",\"presentation\"),this.listTop.setAttribute(\"aria-hidden\",\"true\"),this.listBottom.setAttribute(\"aria-hidden\",\"true\"),J!=null)this.boundElement.insertBefore(this.listTop,J),this.boundElement.insertBefore(this.listBottom,J);else this.boundElement.append(this.listTop),this.boundElement.append(this.listBottom);if(L>1){this.boundElement.classList.add(\"tosi-virtual-grid\");let Q=this.boundElement.style;if(Q!=null)Q.setProperty(\"--tosi-columns\",String(L)),Q.display=Q.display||\"grid\",Q.gridTemplateColumns=Q.gridTemplateColumns||\"repeat(var(--tosi-columns), 1fr)\";if(this.listTop!=null&&this.listBottom!=null)this.listTop.style.gridColumn=\"1 / -1\",this.listBottom.style.gridColumn=\"1 / -1\"}if(M.virtual!=null&&!this.boundElement.getAttribute(\"role\"))this.boundElement.setAttribute(\"role\",L>1?\"grid\":\"list\");if(this.boundElement[G0]=this,this.isNamespaced&&M.virtual!=null)console.warn(\"ListBinding: virtual scrolling is not supported in SVG/MathML containers, ignoring virtual option\");if(!this.isNamespaced&&M.virtual!=null)if(D0.observe(this.boundElement),this._update=U0(()=>{this.update(this.array,!0)},T8),this.boundElement.addEventListener(\"resize\",this._update),M.virtual.scrollContainer===\"window\")window.addEventListener(\"scroll\",this._update),window.addEventListener(\"resize\",this._update);else this.boundElement.addEventListener(\"scroll\",this._update)}filteredArray(){if(this._filteredCache!=null)return this._filteredCache;let{hiddenProp:f,visibleProp:E}=this.options,M=this.array;if(f!==void 0)M=M.filter((L)=>L[f]!==!0);if(E!==void 0)M=M.filter((L)=>L[E]===!0);if(this.options.filter&&this.needle!==void 0)M=this.options.filter(M,this.needle);return this._filteredCache=M,M}visibleSlice(){let{virtual:f}=this.options,E=this.filteredArray(),M=0,L=E.length-1,H=0,J=0;if(f!=null&&this.boundElement instanceof HTMLElement){let Z=this.boundElement.offsetWidth,Q=f.scrollContainer===\"window\",$,Y;if(Q){$=window.innerHeight;let W=this.boundElement.getBoundingClientRect();Y=Math.max(0,-W.top)}else $=this.boundElement.offsetHeight,Y=this.boundElement.scrollTop;let z=f.width!=null?Math.max(1,Math.floor(Z/f.width)):f.visibleColumns??1,G=Math.ceil(E.length/z);if(f.minHeight!=null){let W=f.minHeight,I=Math.ceil($/W)+(f.rowChunkSize||1),U=z*I,F=G*W,j=Math.max(0,F-$),K=j>0?Math.min(1,Math.max(0,Y/j)):0,i=Math.max(0,G-I+1),x=K*i,y=Math.floor(x);if(f.rowChunkSize)y-=y%f.rowChunkSize;return M=y*z,L=M+U-1,H=Y,J=Math.max(0,F-Y-$),{items:E,firstItem:M,lastItem:L,topBuffer:H,bottomBuffer:J,interpolation:{t:K,position:x,scrollTop:Y,viewportHeight:$,totalScrollHeight:F,rowHeight:f.height}}}else{let W=Math.ceil($/f.height)+(f.rowChunkSize||1),I=z*W,U=Math.floor(Y/f.height);if(U>G-W+1)U=Math.max(0,G-W+1);if(f.rowChunkSize)U-=U%f.rowChunkSize;M=U*z,L=M+I-1,H=U*f.height,J=Math.max((G-W)*f.height-H,0)}}return{items:E,firstItem:M,lastItem:L,topBuffer:H,bottomBuffer:J}}needle;filter=U0((f)=>{if(this.needle!==f)this.needle=f,this.update(this.array)},I8);update(f,E){if(f==null)f=[];if(this.array=f,!E)this._filteredCache=void 0;let{hiddenProp:M,visibleProp:L}=this.options,H=A(f),J=this.visibleSlice();if(this.boundElement.classList.toggle(\"-xin-empty-list\",J.items.length===0),this.options.virtual!=null)this.boundElement.setAttribute(\"aria-rowcount\",String(J.items.length));let Z=this._previousSlice,{firstItem:Q,lastItem:$,topBuffer:Y,bottomBuffer:z}=J,G=M===void 0&&L===void 0&&E===!0&&Z!=null&&Q===Z.firstItem&&$===Z.lastItem;if(G&&J.interpolation==null&&Y===Z.topBuffer&&z===Z.bottomBuffer)return;if(G&&J.interpolation!=null){this._updateInterpolatedBuffers(J);return}this._previousSlice=J;let W=0,I=0,U=0,{idPath:F}=this.options,j=this.options.virtual?.itemsPerRow??1,K;if(F!=null){K=new Set;for(let q=Q;q<=$;q++){let D=J.items[q];if(D!==void 0)K.add(String(D[F]))}}let i=new Set;for(let q of Array.from(this.boundElement.children)){if(q===this.listTop||q===this.listBottom)continue;let D=q[l];if(D==null)continue;else if(D===!0)q.remove(),W++;else{if(i.has(D))continue;let O;if(F!=null)O=!K.has(String(D[F]));else{let V=J.items.indexOf(D);O=V<Q||V>$}if(O){i.add(D);let V=this.itemToElement.get(D);if(V!=null)for(let C of V)C.remove();else q.remove();if(this.itemToElement.delete(D),F!=null)this.idToElement.delete(String(D[F]));W++}}}if(this.listTop!=null&&this.listBottom!=null)this.listTop.style.height=String(Y)+\"px\",this.listBottom.style.height=String(z)+\"px\";let x=[],y=F!=null?new Set:null;for(let q=Q;q<=$;q++){let D=J.items[q];if(D===void 0)continue;if(y!=null&&F!=null){let V=String(D[F]);if(y.has(V)){if(!kE)kE=!0,console.error(`tosijs list binding: duplicate idPath value \"${V}\" (idPath: \"${F}\"). `+\"id-path values must be unique — items sharing an id collapse to a single \"+\"row and updates target the wrong item. Warned once per session.\")}else y.add(V)}let O=this.itemToElement.get(k(D));if(O==null&&F!=null){let V=String(D[F]);if(O=this.idToElement.get(V),O!=null){let C=k(D);this.itemToElement.set(C,O);for(let s of O)s[l]=C}}if(O==null){U++;let V=k(D);if(O=this.templates.map((C)=>M0(C)),typeof D===\"object\")this.itemToElement.set(V,O);for(let C of O)C[l]=typeof D===\"object\"?V:!0;for(let C of O)if(this.listBottom!=null)this.boundElement.insertBefore(C,this.listBottom);else this.boundElement.append(C);if(F!=null){let C=D[F],s=`${H}[${F}=${C}]`;for(let hE of O)CE(hE,s);this.idToElement.set(String(C),O)}else{let C=`${H}[${q}]`;for(let s of O)CE(s,C)}}if(this.options.virtual!=null){let V=String(q+1);if(j>1)for(let C=0;C<O.length;C++){let s=O[C];s.setAttribute(\"role\",\"gridcell\"),s.setAttribute(\"aria-rowindex\",V),s.setAttribute(\"aria-colindex\",String(C+1))}else for(let C of O)C.setAttribute(\"role\",\"listitem\"),C.setAttribute(\"aria-rowindex\",V)}x.push(...O)}let e=this.listTop;for(let q of x){if(q.previousElementSibling!==e)if(I++,e?.nextElementSibling!=null)this.boundElement.insertBefore(q,e.nextElementSibling);else if(this.listBottom!=null)this.boundElement.insertBefore(q,this.listBottom);else this.boundElement.append(q);e=q}if(J.interpolation!=null)this._updateInterpolatedBuffers(J);if(L0.perf)console.log(H,\"updated\",{removed:W,created:U,moved:I})}_updateInterpolatedBuffers(f){let{t:E,position:M,scrollTop:L,viewportHeight:H,totalScrollHeight:J,rowHeight:Z}=f.interpolation,Q=0;for(let G of Array.from(this.boundElement.children)){if(G===this.listTop||G===this.listBottom)continue;Q+=G.offsetHeight||Z}let $=L,Y=L+H-Q,z=Math.max(0,E*Y+(1-E)*$-M%1*Z);if(this.listTop!=null&&this.listBottom!=null)this.listTop.style.height=String(z)+\"px\",this.listBottom.style.height=String(Math.max(0,J-z-Q))+\"px\"}}var O0=(f,E,M)=>{let L=f[G0];if(E&&L===void 0)L=new jE(f,E,M),f[G0]=L;return L},Kf=(f)=>{let E;while(!(E=f[l])&&f&&f.parentElement)f=f.parentElement;return E?{element:f,item:E}:void 0},Of=(f)=>{let E=Kf(f);return E?E.item:void 0},V8=(f)=>{let E=Kf(f);if(!E)return console.error(\"deleteListItem failed, element is not part of a list instance\",f),!1;let M=O0(E.element.parentElement);if(!M.options.idPath)return console.error(\"deleteListItem failed, list binding has no idPath\",f.parentElement,M),!1;let L=M.array.indexOf(E.item);if(L>-1)return M.array.splice(L,1),!0;return!1},_8={start:\"start\",middle:\"center\",end:\"end\",nearest:\"nearest\"},w8=(f,E,M={})=>{let L=O0(f);if(L==null)return console.error(\"scrollListItemIntoView failed, element has no list binding\",f),!1;let{position:H=\"middle\",behavior:J=\"smooth\"}=M,Z=L.filteredArray(),Q=k(E)??E,$=Z.indexOf(Q);if($===-1)return console.error(\"scrollListItemIntoView failed, item not found in list\",E),!1;let{virtual:Y}=L.options;if(Y!=null&&f instanceof HTMLElement){let z=Y.width!=null?Math.max(1,Math.floor(f.offsetWidth/Y.width)):Y.visibleColumns??1,G=Math.floor($/z),W=Y.minHeight??Y.height,I=Math.ceil(Z.length/z),U=Y.scrollContainer===\"window\",F=U?window.innerHeight:f.offsetHeight,j;if(Y.minHeight!=null){let K=Math.ceil(F/W)+(Y.rowChunkSize||1),i=I*W,x=Math.max(0,i-F),y=Math.max(1,I-K+1),e=G/y;switch(H){case\"start\":j=e*x;break;case\"end\":j=Math.max(0,(G-K+1)/y*x);break;case\"nearest\":{let q=U?Math.max(0,-f.getBoundingClientRect().top):f.scrollTop,D=x>0?q/x:0,O=Math.floor(D*y);if(G<O)j=e*x;else if(G>=O+K)j=Math.max(0,(G-K+1)/y*x);else return!0;break}default:{let q=G-Math.floor(K/2);j=Math.max(0,q)/y*x}}}else{let K=G*Y.height;switch(H){case\"start\":j=K;break;case\"end\":j=K-F+Y.height;break;case\"nearest\":{let i=U?Math.max(0,-f.getBoundingClientRect().top):f.scrollTop;if(K<i)j=K;else if(K+Y.height>i+F)j=K-F+Y.height;else return!0;break}default:j=K-(F-Y.height)/2}}if(j=Math.max(0,j),U){let K=f.getBoundingClientRect().top+window.scrollY;window.scrollTo({top:K+j,behavior:J})}else f.scrollTo({top:j,behavior:J})}else{let z=L.itemToElement.get(Q);if(z==null||z.length===0)return console.error(\"scrollListItemIntoView failed, no DOM element found for item\",E),!1;z[0].scrollIntoView({block:_8[H]??\"center\",behavior:J})}return!0};var{document:j0,MutationObserver:AE}=globalThis,Cf=(f,E)=>{let M=v.get(f);if(M==null)return;for(let L of M){let{binding:H,options:J}=L,{path:Z}=L,{toDOM:Q}=H;if(Q!=null){if(Z.startsWith(\"^\")){let $=Of(f);if($!=null&&$[c]!=null)Z=L.path=`${$[c]}${Z.substring(1)}`;else{if(f instanceof HTMLElement)console.warn(`Unresolved relative binding \"${Z}\" —`,f,\"is not part of a list. If this is a list template, wrap it in a <template>.\");continue}}if(E==null||X0(E,Z))Q(f,q0()[Z],J)}}};if(AE!=null)new AE((E)=>{E.forEach((M)=>{Array.from(M.addedNodes).forEach((L)=>{if(L instanceof Element)Array.from(L.querySelectorAll(u)).forEach((H)=>Cf(H))})})}).observe(j0.body,{subtree:!0,childList:!0});n(()=>!0,(f)=>{let E=Array.from(j0.querySelectorAll(u));for(let M of E)Cf(M,f)});var IE=(f)=>{let E=f.composedPath!=null?f.composedPath()[0]:f.target;return E instanceof Element?E:null},P0=(f,E)=>{while(f!=null){let M=f.closest(E);if(M!=null)return M;let L=f.getRootNode();f=typeof ShadowRoot<\"u\"&&L instanceof ShadowRoot?L.host:null}return null},VE=(f,E)=>{if(f.parentElement!=null)return P0(f.parentElement,E);let M=f.getRootNode();if(typeof ShadowRoot<\"u\"&&M instanceof ShadowRoot)return P0(M.host,E);return null},RE=(f)=>{let E=P0(IE(f),u);while(E!=null){let M=v.get(E);for(let L of M??[]){let{binding:H,path:J}=L,{fromDOM:Z}=H;if(Z!=null){let Q;try{Q=Z(E,L.options)}catch($){throw console.error(\"Cannot get value from\",E,\"via\",L),Error(\"Cannot obtain value fromDOM\")}if(Q!=null){let $=q0(),Y=$[J];if(Y==null)$[J]=Q;else{let z=Y[c]!=null?Y[p]:Y,G=Q[c]!=null?Q[p]:Q;if(typeof z===\"number\"&&typeof G===\"string\"){let U=G.trim();if(U!==\"\"){let F=Number(U);if(!Number.isNaN(F))G=F}}else if(G instanceof Date){if(typeof z===\"number\")G=G.getTime();else if(typeof z===\"string\")G=E.value}if(z instanceof Date&&G instanceof Date?z.getTime()!==G.getTime():z!==G)$[J]=G}}}}E=VE(E,u)}};if(globalThis.document!=null)j0.body.addEventListener(\"change\",RE,!0),j0.body.addEventListener(\"input\",RE,!0);function S8(f,E,M,L){let{paths:H,transform:J}=E,{toDOM:Z}=M;if(Z==null)return f;let Q=null,$={toDOM(z,G,W){let I=q0(),U=H.map((j)=>I[j]);if(Q!==null&&U.every((j,K)=>j===Q[K]))return;Q=U;let F=J(...U);Z(z,F,W)},fromDOM:M.fromDOM};f.classList?.add(B0);let Y=v.get(f);if(Y==null)Y=[],v.set(f,Y);for(let z of H)Y.push({path:z,binding:$,options:L});if(!H[0].startsWith(\"^\"))P(H[0]);return f}var BE=!1,N8=(f,E)=>{if(BE)return;if(typeof ShadowRoot<\"u\"&&f.getRootNode!=null&&f.getRootNode()instanceof ShadowRoot)BE=!0,console.warn(`tosijs: ${E} targets an element inside a shadow root, where data bindings do not operate (documented Component design boundary). A shadow-DOM component is bound like an <input>: bind its VALUE from outside (bindings.value) and implement render() to reflect value into the shadow DOM. Warned once per session.`,f)};function d(f,E,M,L){if(f instanceof DocumentFragment)throw Error(\"bind cannot bind to a DocumentFragment\");if(N8(f,\"bind()\"),E!=null&&typeof E===\"object\"&&E[E0])return S8(f,E,M,L);let H;if(typeof E===\"object\"&&E[c]===void 0&&L===void 0){let{value:Q}=E;H=typeof Q===\"string\"?Q:Q[c],L={...E},delete L.value}else H=typeof E===\"string\"?E:E[c];if(H==null)throw Error(\"bind requires a path or object with xin Proxy\");let{toDOM:J}=M;f.classList?.add(B0);let Z=v.get(f);if(Z==null)Z=[],v.set(f,Z);if(Z.push({path:H,binding:M,options:L}),J!=null&&!H.startsWith(\"^\"))P(H);if(L?.filter&&L?.needle)d(f,L.needle,{toDOM(Q,$){Q[G0]?.filter($)}});return f}var TE=new Set,x8=(f)=>{let E=P0(IE(f),p0),M=!1,L=new Proxy(f,{get(J,Z){if(Z===\"stopPropagation\")return()=>{f.stopPropagation(),M=!0};else{let Q=J[Z];return typeof Q===\"function\"?Q.bind(J):Q}}}),H=new Set;while(!M&&E!=null){let Z=f0.get(E)?.[f.type]??H;for(let Q of Z){if(typeof Q===\"function\")Q(L);else{let $=q0()[Q];if(typeof $===\"function\")$(L);else throw Error(`no event handler found at path ${Q}`)}if(M)continue}E=VE(E,p0)}};function F0(f,E,M){let L=f0.get(f);if(f.classList.add(s0),L==null)L={},f0.set(f,L);if(!L[E])L[E]=new Set;if(L[E].add(M),!TE.has(E))TE.add(E),j0.body.addEventListener(E,x8,!0);return()=>{L[E].delete(M)}}lf(d,F0);function kf(f,E){if(!f.internals)return;let M={},L=\"\";if(f.hasAttribute(\"required\")&&E===\"\")M.valueMissing=!0,L=\"Please fill out this field.\";let H=f.getAttribute(\"minlength\");if(H&&E.length<parseInt(H,10))M.tooShort=!0,L=`Please use at least ${H} characters.`;let J=f.getAttribute(\"maxlength\");if(J&&E.length>parseInt(J,10))M.tooLong=!0,L=`Please use no more than ${J} characters.`;let Z=f.getAttribute(\"pattern\");if(Z&&E!==\"\")try{if(!new RegExp(`^(?:${Z})$`).test(E))M.patternMismatch=!0,L=\"Please match the requested format.\"}catch{}if(Object.keys(M).length>0)f.internals.setValidity(M,L,f);else f.internals.setValidity({})}var y8=0;function jf(){return`custom-elt${(y8++).toString(36)}`}var _E=0,wE=new Set,SE=new Set,NE=Symbol(\"tosiDrainWrapped\"),xE=new WeakSet,Af=null;function P8(){if(Af===null)Af=new MutationObserver((f)=>{let E=new Set;for(let M of f)if(M.type===\"attributes\"&&M.target instanceof g){let L=M.target,H=Zf(M.attributeName);if(L._legacyTrackedAttrs?.has(H))E.add(L)}for(let M of E)M.queueRender(!1)});return Af}var A0={};function b8(f,E){let M=A0[f],L=Q0(E).replace(/:host\\(([^)]+)\\)/g,`${f}$1`).replace(/:host\\b/g,f);A0[f]=M?M+`\n`+L:L}function m8(f){if(A0[f])document.head.append(_.style({id:f+\"-component\"},A0[f]));delete A0[f]}class g extends HTMLElement{static elements=_;static _elementCreator;static initAttributes;static formAssociated;static preferredTagName;static shadowStyleSpec;static lightStyleSpec;static extends;internals;get validity(){return this.internals?.validity}get validationMessage(){return this.internals?.validationMessage??\"\"}get willValidate(){return this.internals?.willValidate??!1}checkValidity(){return this.internals?.checkValidity()??!0}reportValidity(){return this.internals?.reportValidity()??!0}setCustomValidity(f){if(this.internals)if(f)this.internals.setValidity({customError:!0},f);else this.internals.setValidity({})}setValidity(f,E,M){this.internals?.setValidity(f,E,M)}setFormValue(f,E){this.internals?.setFormValue(f,E)}static get observedAttributes(){let f=this.initAttributes;if(f)return[\"hidden\",...Object.keys(f).map(S)];return[\"hidden\"]}instanceId;styleNode;static styleSpec;static styleNode;content=_.slot();isSlotted;static _tagName=null;static get tagName(){return this._tagName}_legacyTrackedAttrs;_attrValues;_valueChanged=!1;_pendingAttrOps;static StyleNode(f){return console.warn(\"StyleNode is deprecated, use static shadowStyleSpec instead\"),_.style(Q0(f))}static elementCreator(f={}){let E=this;if(!Object.prototype.hasOwnProperty.call(E,\"_elementCreator\")){if(f.tag!==void 0)B(\"elementCreator-tag\",\"Passing tag to elementCreator() is deprecated. Use static preferredTagName instead.\");if(f.styleSpec!==void 0)B(\"elementCreator-styleSpec\",\"Passing styleSpec to elementCreator() is deprecated. Use static lightStyleSpec instead.\");if(f.extends!==void 0)B(\"elementCreator-extends\",\"Passing extends to elementCreator() is deprecated. Use static extends instead.\");let M=f.tag??E.preferredTagName;if(M==null)if(typeof E.name===\"string\"&&E.name!==\"\"){if(M=S(E.name),M.startsWith(\"-\"))M=M.slice(1)}else M=jf();if(customElements.get(M)!=null)console.warn(`${M} is already defined`);if(M.match(/\\w+(-\\w+)+/)==null)console.warn(`${M} is not a legal tag for a custom-element`),M=jf();while(customElements.get(M)!==void 0)M=jf();E._tagName=M;let L=f.styleSpec??E.lightStyleSpec;if(L!==void 0)b8(M,L);let H=f.extends??E.extends,J=H?{extends:H}:void 0,Z=this.prototype;if(Z!=null&&!Object.prototype.hasOwnProperty.call(Z,NE)){let Q=Z.connectedCallback;Z.connectedCallback=function(){if(this._drainPendingAttrOps(),Q)Q.call(this)},Object.defineProperty(Z,NE,{value:!0,enumerable:!1})}window.customElements.define(M,this,J),E._elementCreator=_[M]}return E._elementCreator}initAttributes(...f){if(B(\"initAttributes\",\"initAttributes() is deprecated. Use static initAttributes = { ... } instead.\"),!this._legacyTrackedAttrs)this._legacyTrackedAttrs=new Set;for(let H of f)this._legacyTrackedAttrs.add(H);P8().observe(this,{attributes:!0});let M={},L={};f.forEach((H)=>{M[H]=m(this[H]);let J=S(H);Object.defineProperty(this,H,{enumerable:!1,get(){if(typeof M[H]===\"boolean\")return this.hasAttribute(J);else if(this.hasAttribute(J))return typeof M[H]===\"number\"?parseFloat(this.getAttribute(J)):this.getAttribute(J);else if(L[H]!==void 0)return L[H];else return M[H]},set(Z){if(typeof M[H]===\"boolean\"){if(Z!==this[H]){if(Z)this.setAttribute(J,\"\");else this.removeAttribute(J);this.queueRender()}}else if(typeof M[H]===\"number\"){if(Z!==parseFloat(this[H]))this.setAttribute(J,Z),this.queueRender()}else if(typeof Z===\"object\"||`${Z}`!==`${this[H]}`){if(Z===null||Z===void 0||typeof Z===\"object\")this.removeAttribute(J);else this.setAttribute(J,Z);this.queueRender(),L[H]=Z}}})})}initValue(){let f=Object.getOwnPropertyDescriptor(this,\"value\");if(f===void 0||f.get!==void 0||f.set!==void 0)return;let E=this.hasAttribute(\"value\")?this.getAttribute(\"value\"):m(this.value);delete this.value,Object.defineProperty(this,\"value\",{enumerable:!1,get(){return E},set(M){if(E!==M)E=M,this._valueChanged=!0,this.queueRender(!0)}})}_parts;get parts(){let f=this.shadowRoot!=null?this.shadowRoot:this;if(this._parts==null)this._parts=new Proxy({},{get(E,M){if(typeof M!==\"string\")return;if(E[M]===void 0){let L=f.querySelector(`[part=\"${M}\"]`);if(L==null)L=f.querySelector(`[data-ref=\"${M}\"]`);if(L==null)L=f.querySelector(M);if(L==null)throw Error(`elementRef \"${M}\" does not exist!`);L.removeAttribute(\"data-ref\"),E[M]=L}return E[M]}});return this._parts}attributeChangedCallback(f,E,M){let L=Zf(f);if(M===null&&this._attrValues?.has(L))this._attrValues.delete(L);if(!this._legacyTrackedAttrs?.has(L))this.queueRender(!1)}constructor(){super();if(_E+=1,this._installAttributeQueue(),this.constructor.formAssociated&&typeof this.attachInternals===\"function\"&&!this.internals)this.internals=this.attachInternals();let f=this.constructor.initAttributes;if(f)this._setupAttributeAccessors(f);this.instanceId=`${this.tagName.toLocaleLowerCase()}-${_E}`,this._value=m(this.defaultValue),this._warnOnHandlerCollisions()}_warnOnHandlerCollisions(){let f=this.constructor;if(xE.has(f))return;xE.add(f),queueMicrotask(()=>{let E=new Set;for(let Z of Object.keys(this))if(/^on[A-Z]/.test(Z))E.add(Z);let M=Object.getPrototypeOf(this);while(M&&M!==g.prototype){for(let Z of Object.getOwnPropertyNames(M))if(/^on[A-Z]/.test(Z))E.add(Z);M=Object.getPrototypeOf(M)}let L=this.tagName.toLowerCase();if(E.delete(\"onResize\")&&this.handleResize===void 0)console.warn(`<${L}> defines 'onResize', which is deprecated. Rename it to 'handleResize'. The on<Event> prefix is reserved for event-handler sugar in the elements factory (creator({ onResize }) would attach a 'resize' listener) and is being retired for component callbacks in favor of the handle<Event> convention.`);if(E.size===0)return;let J=Array.from(E,(Z)=>`'${Z}'`).join(\", \");console.warn(`<${L}> defines ${J}. The elements factory treats on<Event> property `+\"names as event-handler sugar — e.g. creator({ onClick }) attaches a \"+\"'click' listener rather than assigning the property — so these members \"+\"are shadowed and cannot be set or read via the element creator. Rename them with the handle<Event> convention (e.g. 'handleClick') to keep them usable as component members.\")})}_installAttributeQueue(){let f=this.constructor.initAttributes;if(!f)return;let E=new Set(Object.keys(f).map(S)),M=[];this._pendingAttrOps=M;let L=HTMLElement.prototype;this.setAttribute=(H,J)=>{if(E.has(H))M.push([\"set\",H,String(J)]);else L.setAttribute.call(this,H,J)},this.removeAttribute=(H)=>{if(E.has(H))M.push([\"remove\",H]);else L.removeAttribute.call(this,H)},queueMicrotask(()=>this._drainPendingAttrOps())}_drainPendingAttrOps(){let f=this._pendingAttrOps;if(f===void 0)return;this._pendingAttrOps=void 0,delete this.setAttribute,delete this.removeAttribute;let E=new Set;for(let M of f)if(this.hasAttribute(M[1]))E.add(M[1]);for(let M of f)if(M[0]===\"set\"){if(!E.has(M[1]))this.setAttribute(M[1],M[2])}else E.delete(M[1]),this.removeAttribute(M[1])}_installedAttrAccessors;_setupAttributeAccessors(f){if(!this._attrValues)this._attrValues=new Map;if(!this._installedAttrAccessors)this._installedAttrAccessors=new Set;for(let E of Object.keys(f)){let M=S(E),L=f[E];if(E===\"value\"){console.warn(`${this.tagName}: 'value' cannot be an attribute. Use the Component value property instead.`);continue}if(typeof L===\"object\"&&L!==null){console.warn(`${this.tagName}: initAttributes.${E} is an object. Use a regular property instead.`);continue}if(L===!0)throw Error(`${this.tagName}: static initAttributes.${E} defaults a boolean attribute to true, but HTML boolean attributes are false-by-default (presence = true, absence = false) and `+`cannot reflect a true default — it would silently become false. Use { ${E}: false }, or model it as a string/number attribute or a plain (non-attribute) property.`);let H=this,J=!1;while(H){let Z=Object.getOwnPropertyDescriptor(H,E);if(Z){if(!Z.configurable||Z.get||Z.set){J=!0;break}break}H=Object.getPrototypeOf(H)}if(J)continue;this._installAttrAccessor(E,M,L)}}_installAttrAccessor(f,E,M){Object.defineProperty(this,f,{enumerable:!1,configurable:!0,get:()=>{if(typeof M===\"boolean\"){if(this.hasAttribute(E))return!0;if(this._attrValues.has(f))return this._attrValues.get(f);return!1}else if(this.hasAttribute(E))return typeof M===\"number\"?parseFloat(this.getAttribute(E)):this.getAttribute(E);else if(this._attrValues.has(f))return this._attrValues.get(f);else return M},set:(L)=>{if(typeof M===\"boolean\"){if(L!==this[f]){if(L)this.setAttribute(E,\"\");else this.removeAttribute(E);this.queueRender(),this._attrValues.set(f,!!L)}}else if(typeof M===\"number\"){if(L!==parseFloat(this[f]))this.setAttribute(E,L),this.queueRender(),this._attrValues.set(f,L)}else if(typeof L===\"object\"||`${L}`!==`${this[f]}`){if(L===null||L===void 0||typeof L===\"object\")this.removeAttribute(E);else this.setAttribute(E,L);this.queueRender(),this._attrValues.set(f,L)}}}),this._installedAttrAccessors.add(f)}_recoverShadowedAttrAccessors(){let f=this._installedAttrAccessors,E=this.constructor.initAttributes;if(f==null||E==null)return;let M=[];for(let L of f){let H=Object.getOwnPropertyDescriptor(this,L);if(H==null||H.get!=null||H.set!=null)continue;let J=H.value;delete this[L],this._installAttrAccessor(L,S(L),E[L]),this[L]=J,M.push(L)}if(M.length>0&&!SE.has(this.tagName)){SE.add(this.tagName);let L=M.map((H)=>`'${H}'`).join(\", \");console.warn(`<${this.tagName.toLowerCase()}> declares instance field(s) ${L} that shadow static initAttributes accessors (class fields use [[Define]] semantics). The field value was adopted and the `+\"reactive accessor restored — delete the field declaration; \"+\"static initAttributes already defines the property.\")}}connectedCallback(){if(this._recoverShadowedAttrAccessors(),this._drainPendingAttrOps(),m8(this.constructor.tagName),this.hydrate(),this.role!=null)this.setAttribute(\"role\",this.role);if(this.constructor.formAssociated&&!this.hasAttribute(\"tabindex\"))this.setAttribute(\"tabindex\",\"0\");let f=this.handleResize??this.onResize;if(f!==void 0){if(D0.observe(this),this._onResize==null)this._onResize=f.bind(this);this.addEventListener(\"resize\",this._onResize)}if(this.value!=null&&this.getAttribute(\"value\")!=null)this._value=this.getAttribute(\"value\");if(this.internals&&this.value!==void 0)this.internals.setFormValue(this.value),this.validateValue();this.queueRender()}disconnectedCallback(){D0.unobserve(this)}formResetCallback(){if(this.value!==void 0)this.value=this.defaultValue??\"\"}formDisabledCallback(f){if(f)this.setAttribute(\"disabled\",\"\");else this.removeAttribute(\"disabled\")}formStateRestoreCallback(f){if(this.value!==void 0&&typeof f===\"string\")this.value=f}_changeQueued=!1;_renderQueued=!1;queueRender(f=!1){if(!this._hydrated)return;if(!this._changeQueued)this._changeQueued=f;if(!this._renderQueued)this._renderQueued=!0,requestAnimationFrame(()=>{if(this._changeQueued){if(Hf(this,\"change\",{bubbles:!0,composed:!0}),this.internals&&this.value!==void 0)this.internals.setFormValue(this.value)}this._changeQueued=!1,this._renderQueued=!1,this.render()})}_hydrated=!1;_whenHydrated;_resolveHydrated;get hydrated(){return this._hydrated}get whenHydrated(){if(this._hydrated)return Promise.resolve();if(this._whenHydrated==null)this._whenHydrated=new Promise((f)=>{this._resolveHydrated=f});return this._whenHydrated}hydrate(){if(!this._hydrated){this.initValue();let f=typeof this.content!==\"function\",E=typeof this.content===\"function\"?this.content(_):this.content;if(Array.isArray(E)){let J={};E=E.filter((Z)=>{if(Z instanceof Node||typeof Z===\"string\"||typeof Z===\"number\"||A(Z))return!0;return Object.assign(J,Z),!1});for(let Z of Object.keys(J))x0(this,Z,J[Z])}let M=this.constructor,L=M.shadowStyleSpec??M.styleSpec;if(M.styleSpec&&!M.shadowStyleSpec)B(\"static-styleSpec\",\"static styleSpec is deprecated. Use static shadowStyleSpec instead.\");let{styleNode:H}=M;if(L)H=M.styleNode=_.style(Q0(L)),delete M.styleNode;if(this.styleNode)console.warn(this,\"styleNode is deprecated, use static shadowStyleSpec instead\"),H=this.styleNode;if(H){let J=this.attachShadow({mode:\"open\"});if(J.appendChild(H.cloneNode(!0)),Jf(J,E,f),!wE.has(this.tagName)&&J.querySelector(u)!=null)wE.add(this.tagName),console.warn(`<${this.tagName.toLowerCase()}> has data-binding sugar in its shadow-DOM content, where bindings do not operate. A shadow-DOM component is bound like an <input>: bind its VALUE from outside (bindings.value) and implement render() to reflect value into `+\"the shadow DOM — setting value queues render() and emits change \"+\"automatically. on() event handlers are fine. Warned once per component class.\")}else if(E!==null){let J=Array.from(this.childNodes);Jf(this,E,f),this.isSlotted=this.querySelector(\"slot,tosi-slot,xin-slot\")!==null;let Z=Array.from(this.querySelectorAll(\"slot\"));if(Z.length>0)Z.forEach(b0.replaceSlot);if(J.length>0){let Q={\"\":this};Array.from(this.querySelectorAll(\"tosi-slot,xin-slot\")).forEach(($)=>{Q[$.name]=$}),J.forEach(($)=>{let Y=Q[\"\"],z=$ instanceof Element?Q[$.slot]:Y;(z!==void 0?z:Y).append($)})}}this._hydrated=!0,this._parts=void 0,this._resolveHydrated?.()}}render(){if(this._valueChanged&&this.internals&&this.value!==void 0)this.internals.setFormValue(this.value),this.validateValue();this._valueChanged=!1}validateValue(){if(!this.internals||this.value===void 0)return;let f=typeof this.value===\"string\"?this.value:String(this.value);kf(this,f)}}class b0 extends g{static preferredTagName=\"tosi-slot\";static initAttributes={name:\"\"};content=null;static replaceSlot(f){let E=document.createElement(\"tosi-slot\");if(f.name!==\"\")E.setAttribute(\"name\",f.name);while(f.firstChild!=null)E.appendChild(f.firstChild);f.replaceWith(E)}}var c8=b0.elementCreator();class yE extends g{static preferredTagName=\"xin-slot\";static initAttributes={name:\"\"};content=null;constructor(){super();B(\"xin-slot\",\"<xin-slot> is deprecated. Use <tosi-slot> instead.\")}static replaceSlot=b0.replaceSlot}var g8=yE.elementCreator();var v8=(f=()=>!0)=>{let E=localStorage.getItem(\"xin-state\");if(E!=null){let H=JSON.parse(E);for(let J of Object.keys(H).filter(f))w[J]=H[J]}let M=K0(()=>{let H={},J=k(w);for(let Z of Object.keys(J).filter(f))H[Z]=J[Z];localStorage.setItem(\"xin-state\",JSON.stringify(H)),console.log(\"xin state saved to localStorage\")},500);C0((H)=>{let J=H.split(/[.[]/)[0];return f(J)},M)};var h8=\"tosijs-share\",d8=\"tosijs-share\",R0=\"shared\",u8=1,Bf=new Set,Tf=new Set,If=new Set,Vf=new Set,Rf=new Map,Y0=null,_f=\"\",m0=null,i8=null;function PE(){if(m0!=null)return Promise.resolve(m0);return new Promise((f,E)=>{let M=indexedDB.open(d8,u8);M.onupgradeneeded=()=>{M.result.createObjectStore(R0)},M.onsuccess=()=>{m0=M.result,f(m0)},M.onerror=()=>E(M.error)})}var s8={async get(f){let E=await PE();return new Promise((M,L)=>{let J=E.transaction(R0,\"readonly\").objectStore(R0).get(f);J.onsuccess=()=>M(J.result),J.onerror=()=>L(J.error)})},async set(f,E){let M=await PE();return new Promise((L,H)=>{let J=M.transaction(R0,\"readwrite\");J.objectStore(R0).put(E,f),J.oncomplete=()=>L(),J.onerror=()=>H(J.error)})}};function bE(){return i8??s8}function p8(f){return f!=null&&f.type===\"tosijs-share\"&&typeof f.path===\"string\"}function wf(f){for(let E of Bf)if(f===E||f.startsWith(E+\".\"))return E;return}function n8(f){for(let E of Tf)if(f===E||f.startsWith(E+\".\"))return!0;return!1}function mE(f,E){let M=wf(f);if(M!==void 0&&If.has(M))Vf.add(M);Tf.add(f),J0(T,f,E),P(f),W0().then(()=>{Tf.delete(f)})}function r8(){if(Y0!=null)return Y0;return _f=crypto.randomUUID(),Y0=new BroadcastChannel(h8),Y0.onmessage=(f)=>{let E=f.data;if(!p8(E))return;if(E.origin===_f)return;if(wf(E.path)===void 0)return;mE(E.path,E.value)},Y0}function l8(f,E){if(Y0==null)return;let M={type:\"tosijs-share\",path:f,value:E,origin:_f};Y0.postMessage(M)}function o8(f){if(!Rf.has(f))Rf.set(f,K0(()=>{let E=R(T,f);bE().set(f,E)},500));Rf.get(f)()}async function a8(...f){if(typeof BroadcastChannel>\"u\")return{restored:[]};r8();let E=[],M=bE();for(let L of f){let H=typeof L===\"string\"?L:A(L);if(H===void 0)throw Error(\"share() requires boxed proxies or string paths. Got a non-proxy value.\");if(Bf.has(H))continue;Bf.add(H),If.add(H);let J=await M.get(H),Z=Vf.has(H);if(If.delete(H),Vf.delete(H),J!==void 0&&!Z)mE(H,J),E.push(L);else if(J===void 0){let Q=R(T,H);await M.set(H,Q)}n((Q)=>Q===H||Q.startsWith(H+\".\"),(Q)=>{if(n8(Q))return;let $=wf(Q);if($===void 0)return;let Y=R(T,Q);l8(Q,Y),o8($)})}return{restored:E}}var Sf=new Set;function cE(f,E){for(let M of f)if(E===M||E.startsWith(M+\".\"))return M;return}function t8(f){for(let E of Sf)if(f===E||f.startsWith(E+\".\"))return!0;return!1}function e8(f,E){Sf.add(f),J0(T,f,E),P(f),W0().then(()=>{Sf.delete(f)})}async function fM(f,E,...M){let L=new Set,H=[],J=[],Z=E.throttleInterval??100;await f.connect();let Q=U0(()=>{if(H.length===0)return;let $=H.splice(0);try{f.send($)}catch(Y){H.unshift(...$),console.error(\"sync: transport.send failed; deltas requeued and will retry on the next flush\",Y)}},Z);f.onReceive(($)=>{for(let Y of $){if(cE(L,Y.path)===void 0)continue;e8(Y.path,Y.value)}});for(let $ of M){let Y=typeof $===\"string\"?$:A($);if(Y===void 0)throw Error(\"sync() requires boxed proxies or string paths. Got a non-proxy value.\");L.add(Y);let z=n((G)=>G===Y||G.startsWith(Y+\".\"),(G)=>{if(t8(G))return;if(cE(L,G)===void 0)return;let W=R(T,G);H.push({path:G,value:W}),Q()});J.push(z)}return{disconnect(){for(let $ of J)Z0($);J.length=0,L.clear(),H.length=0,f.disconnect()}}}var Nf=\"1.7.0\";function c0(f){return Object.assign(N,f),N}function g0(f){return B(\"boxedProxy\",\"boxedProxy is deprecated, please use tosi() instead\"),c0(f)}var EM=new FinalizationRegistry((f)=>{f()});function MM(f,E){let M=a0();N[M]=f;let L=N[M],H=()=>{delete w[M]};if(E)EM.register(E,H);return[L,H]}function xf(f,E=!1){if(E)return B(\"xinProxy-boxed\",\"xinProxy(..., true) is deprecated; use tosi(...) instead\"),g0(f);return Object.keys(f).forEach((M)=>{w[M]=f[M]}),w}var LM={};async function v0(f,E){let M=await E(f,{Color:X,Component:g,elements:_,svgElements:Wf,mathML:Uf,varDefault:S0,vars:Yf,xin:w,boxed:N,xinProxy:xf,boxedProxy:g0,tosi:c0,makeComponent:v0,bind:d,on:F0,version:Nf}),{type:L}=M;L.preferredTagName=f;let H=M.lightStyleSpec??M.styleSpec;if(H)L.lightStyleSpec=H;let J={type:L,creator:L.elementCreator()};return LM[f]=J,J}var d0={\":host\":{display:\"none\"}},h0={},HM=(f)=>import(f);class u0 extends g{static preferredTagName=\"tosi-blueprint\";static lightStyleSpec=d0;static initAttributes={tag:\"anon-elt\",src:\"\",property:\"default\"};loaded;blueprintLoaded=(f)=>{};async packaged(){let{tag:f,src:E,property:M}=this,L=`${f}.${M}:${E}`;if(!this.loaded){if(h0[L]===void 0)h0[L]=HM(E).then((H)=>{let J=H[M];return v0(f,J)});else console.log(`using cached ${f} with signature ${L}`);try{this.loaded=await h0[L]}catch(H){throw delete h0[L],H}this.blueprintLoaded(this.loaded)}return this.loaded}}var JM=u0.elementCreator();class yf extends g{static preferredTagName=\"tosi-loader\";static lightStyleSpec=d0;allLoaded=()=>{};async load(){let f=Array.from(this.querySelectorAll(\"tosi-blueprint, xin-blueprint\")).filter((M)=>M.src),E=await Promise.allSettled(f.map((M)=>M.packaged()));for(let M=0;M<E.length;M++){let L=E[M];if(L.status===\"rejected\")console.error(`<tosi-loader> failed to load blueprint from \"${f[M].src}\":`,L.reason)}this.allLoaded()}connectedCallback(){super.connectedCallback(),this.load()}}var ZM=yf.elementCreator();class gE extends u0{static preferredTagName=\"xin-blueprint\";static lightStyleSpec=d0;constructor(){super();B(\"xin-blueprint\",\"<xin-blueprint> is deprecated. Use <tosi-blueprint> instead.\")}}var $M=gE.elementCreator();class vE extends g{static preferredTagName=\"xin-loader\";static lightStyleSpec=d0;allLoaded=()=>{};constructor(){super();B(\"xin-loader\",\"<xin-loader> is deprecated. Use <tosi-loader> instead.\")}async load(){let f=Array.from(this.querySelectorAll(\"xin-blueprint\")).filter((M)=>M.src),E=await Promise.allSettled(f.map((M)=>M.packaged()));for(let M=0;M<E.length;M++){let L=E[M];if(L.status===\"rejected\")console.error(`<xin-loader> failed to load blueprint from \"${f[M].src}\":`,L.reason)}this.allLoaded()}connectedCallback(){super.connectedCallback(),this.load()}}var QM=vE.elementCreator();export{sE as xinValue,g8 as xinSlot,xf as xinProxy,iE as xinPath,w as xin,B as warnDeprecated,Nf as version,Yf as vars,S0 as varDefault,kf as validateAgainstConstraints,W0 as updates,Z0 as unobserve,Cf as touchElement,P as touch,k as tosiValue,MM as tosiUnique,c8 as tosiSlot,uE as tosiSetValue,A as tosiPath,ZM as tosiLoader,JM as tosiBlueprint,dE as tosiAccessor,c0 as tosi,U0 as throttle,fM as sync,Wf as svgElements,a8 as share,L0 as settings,w8 as scrollListItemIntoView,q8 as onThemePreferencesChange,Y8 as onStylesheetChange,F0 as on,C0 as observe,Uf as mathML,v0 as makeComponent,F8 as invertLuminance,U8 as initVars,v8 as hotReload,$E as getThemePreferences,Of as getListItem,Kf as getListInstance,O0 as getListBinding,$f as getCssVar,_ as elements,n0 as deprecated,V8 as deleteListItem,K0 as debounce,Q0 as css,g0 as boxedProxy,N as boxed,QM as blueprintLoader,$M as blueprint,V0 as bindings,K8 as bindParts,d as bind,T0 as TOSI_ACCESSOR,E0 as TAKE_DESCRIPTOR,z8 as StyleSheet,Z8 as MoreMath,g as Component,X as Color,yf as BlueprintLoader,u0 as Blueprint};\n\n//# debugId=BD5A588C21CE2A1F64756E2164756E21\n//# sourceMappingURL=module.js.map\n",
|
|
5
|
+
"function m(E,f){if(E==null||typeof E!==\"object\")return E;if(E instanceof Date)return new Date(E.getTime());if(f===void 0)f=new WeakMap;else if(f.has(E))return f.get(E);if(E instanceof Set){let L=new Set;f.set(E,L);for(let H of E)L.add(m(H,f));return L}if(E instanceof Map){let L=new Map;f.set(E,L);for(let[H,J]of E)L.set(m(H,f),m(J,f));return L}if(Array.isArray(E)){let L=[];f.set(E,L);for(let H of E)L.push(m(H,f));return L}let M={};f.set(E,M);for(let L in E)M[L]=m(E[L],f);return M}var u=\"-tosi-data\",G0=`.${u}`,g=Symbol.for(\"xin-path\"),s=Symbol.for(\"xin-value\"),PE=\"xinObserve\",yE=\"xinBind\",bE=\"xinOn\",B0=Symbol.for(\"tosi-accessor\"),f0=Symbol.for(\"tosi-take\"),z0=Symbol(\"list-binding\"),o=Symbol(\"list-instance\"),u0=new Map;function mE(E,f){let M=u0.get(E);if(M===void 0)M=new Set,u0.set(E,M);M.add(f)}function gE(E){return u0.get(E)}var xE=new Set;function T(E,f){if(!xE.has(E))console.warn(f),xE.add(E)}function i0(E,f){let M=!1;return(...L)=>{if(!M)console.warn(f),M=!0;return E(...L)}}var A=(E)=>{return E&&E[g]||void 0};function j(E){if(typeof E===\"object\"&&E!==null){let f=E[s];return f!==void 0?f:E}return E}function h8(E){return E!=null?E[B0]:void 0}function d8(E,f){if(A(E)===void 0)throw Error(\"tosiSetValue requires a xin or boxed proxy\");E[s]=f}var u8=i0(A,\"xinPath is deprecated. Use tosiPath instead.\"),i8=i0(j,\"xinValue is deprecated. Use tosiValue instead.\"),l=new WeakMap,c=new WeakMap;var M0=(E)=>{let f=E.cloneNode();if(f instanceof Element){let L=c.get(E),H=l.get(E);if(L!=null)c.set(f,m(L));if(H!=null)l.set(f,m(H))}let M=f instanceof HTMLTemplateElement?f.content:f;for(let L of Array.from(E instanceof HTMLTemplateElement?E.content.childNodes:E.childNodes))if(L instanceof Element||L instanceof DocumentFragment)M.appendChild(M0(L));else M.appendChild(L.cloneNode());return f};var L0={debug:!1,perf:!1};var p8=(E)=>{try{return JSON.stringify(E)}catch(f){return\"{has circular references}\"}},p0=(...E)=>Error(E.map(p8).join(\" \"));var s8=()=>new Date(parseInt(\"1000000000\",36)+Date.now()).valueOf().toString(36).slice(1),n8=0,r8=()=>(parseInt(\"10000\",36)+ ++n8).toString(36).slice(-5),r0=()=>s8()+r8(),n0=Symbol(\"delete\"),hE=Symbol(\"new-object\"),s0=Symbol(\"automatic-index\");function dE(E){if(E===\"\")return[];if(Array.isArray(E))return E;else{let f=[];while(E.length>0){let M=E.search(/\\[[^\\]]+\\]/);if(M===-1){f.push(E.split(\".\"));break}else{let L=E.slice(0,M);if(E=E.slice(M),L!==\"\")f.push(L.split(\".\"));if(M=E.indexOf(\"]\")+1,f.push(E.slice(1,M-1)),E.slice(M,M+1)===\".\")M+=1;E=E.slice(M)}}return f}}var H0=new WeakMap;function uE(E,f){if(H0.get(E)===void 0)H0.set(E,{});let M={};if(H0.get(E)[f]=M,f===\"_auto_\")E.forEach((L,H)=>{if(L[s0]===void 0)L[s0]=r0();M[L[s0]+\"\"]=H});else E.forEach((L,H)=>{M[R(L,f)+\"\"]=H});return M}function l8(E,f){if(H0.get(E)===void 0||H0.get(E)[f]===void 0)return uE(E,f);else return H0.get(E)[f]}function o8(E,f,M){M=M+\"\";let L=l8(E,f)[M];if(L===void 0||R(E[L],f)+\"\"!==M)L=uE(E,f)[M];return L}function a8(E,f,M){if(E[f]===void 0&&M!==void 0)E[f]=M;return E[f]}function iE(E,f,M,L){let H=f!==\"\"?o8(E,f,M):M;if(L===n0){if(H!==void 0)E.splice(H,1),H0.delete(E);return Symbol(\"deleted\")}else if(L===hE){if(f===\"\"&&E[H]===void 0)E[H]={}}else if(L!==void 0)if(H!==void 0)E[H]=L;else if(f!==\"\"&&R(L,f)+\"\"===M+\"\")E.push(L),H=E.length-1;else throw Error(`byIdPath insert failed at [${f}=${M}]`);return E[H]}function vE(E){if(!Array.isArray(E))throw p0(\"setByPath failed: expected array, found\",E)}function cE(E){if(E==null||!(E instanceof Object))throw p0(\"setByPath failed: expected Object, found\",E)}function R(E,f){let M=dE(f),L=E,H,J,Z,Q;for(H=0,J=M.length;L!==void 0&&H<J;H++){let $=M[H];if(Array.isArray($))for(Z=0,Q=$.length;L!==void 0&&Z<Q;Z++){let Y=$[Z];L=L[Y]}else if(L.length===0){if(L=L[Number($.slice(1))],$[0]!==\"=\")return}else if($.includes(\"=\")){let[Y,...z]=$.split(\"=\");L=iE(L,Y,z.join(\"=\"))}else Z=parseInt($,10),L=L[Z]}return L}function J0(E,f,M){let L=E;if(f===\"\")throw Error(\"setByPath cannot be used to set the root object\");let H=dE(f);while(L!=null&&H.length>0){let J=H.shift();if(typeof J===\"string\"){let Z=J.indexOf(\"=\");if(Z>-1){if(Z===0)cE(L);else vE(L);let Q=J.slice(0,Z),$=J.slice(Z+1);if(L=iE(L,Q,$,H.length>0?hE:M),H.length===0)return!0}else{vE(L);let Q=parseInt(J,10);if(H.length>0)L=L[Q];else{if(M!==n0){if(L[Q]===M)return!1;L[Q]=M}else L.splice(Q,1);return!0}}}else if(Array.isArray(J)&&J.length>0){cE(L);while(J.length>0){let Z=J.shift();if(J.length>0||H.length>0)L=a8(L,Z,J.length>0?{}:[]);else{if(M!==n0){if(L[Z]===M)return!1;L[Z]=M}else{if(!Object.prototype.hasOwnProperty.call(L,Z))return!1;delete L[Z]}return!0}}}else throw Error(`setByPath failed, bad path ${f}`)}throw Error(`setByPath(${E}, ${f}, ${M}) failed`)}var B={},l0=null,pE=(E)=>{l0=E},K0=()=>{if(l0===null)throw Error(\"xin proxy not initialized\");return l0},o0=null,a0=null,sE=(E,f)=>{o0=E,a0=f},nE=()=>{if(o0===null)throw Error(\"bind not initialized\");return o0},rE=()=>{if(a0===null)throw Error(\"on not initialized\");return a0};var lE=Symbol(\"observer should be removed\"),I0=[],W0=[],t0=!1,e0,EE;function t8(E,f,M,L){let H=gE(E);if(H===void 0)return[];let J=[];for(let Z of H){let Q=R(M,Z);if(Q!==void 0)J.push(`${E}[${Z}=${Q}]${L}`)}return J}var X0=(E,f)=>{if(!f.startsWith(E))return!1;if(f.length===E.length)return!0;let M=f.charAt(E.length);return M===\".\"||M===\"[\"};class oE{description;test;callback;constructor(E,f){let M=typeof f===\"string\"?`\"${f}\"`:`function ${f.name}`,L;if(typeof E===\"string\")this.test=(H)=>typeof H===\"string\"&&H!==\"\"&&(X0(H,E)||X0(E,H)),L=`test = \"${E}\"`;else if(E instanceof RegExp)this.test=E.test.bind(E),L=`test = \"${E.toString()}\"`;else if(E instanceof Function)this.test=E,L=`test = function ${E.name}`;else throw Error(\"expect listener test to be a string, RegExp, or test function\");if(this.description=`${L}, ${M}`,typeof f===\"function\")this.callback=f;else throw Error(\"expect callback to be a path or function\");I0.push(this)}}var U0=async()=>{if(e0===void 0)return;await e0},e8=()=>{if(L0.perf)console.time(\"xin async update\");let E=Array.from(W0);W0.length=0,t0=!1;let f=EE;EE=void 0;try{for(let M of E)I0.filter((L)=>{let H;try{H=L.test(M)}catch(J){return console.error(`Listener ${L.description} threw \"${J}\" at \"${M}\"`),!1}if(H===lE)return Z0(L),!1;return H}).forEach((L)=>{let H;try{H=L.callback(M)}catch(J){console.error(`Listener ${L.description} threw \"${J}\" handling \"${M}\"`)}if(H===lE)Z0(L)})}finally{if(typeof f===\"function\")f();if(L0.perf)console.timeEnd(\"xin async update\")}},y=(E)=>{let f=typeof E===\"string\"?E:A(E);if(f===void 0)throw console.error(\"touch was called on an invalid target\",E),Error(\"touch was called on an invalid target\");if(t0===!1)e0=new Promise((L)=>{EE=L}),t0=setTimeout(e8);if(W0.find((L)=>X0(L,f))==null)W0.push(f);let M=f.match(/^(.+)\\[(\\d+)\\](.*)$/);if(M!==null){let[,L,H,J]=M,Z=parseInt(H,10),Q=R(B,`${L}[${Z}]`);if(Q!=null){let $=t8(L,Z,Q,J);for(let Y of $)if(W0.find((z)=>X0(z,Y))==null)W0.push(Y)}}},n=(E,f)=>{return new oE(E,f)},Z0=(E)=>{let f=I0.indexOf(E);if(f>-1)I0.splice(f,1);else throw Error(\"unobserve failed, listener not found\")};var fE=(E,f,{bubbles:M=!1,composed:L=!1}={})=>{let H=new Event(f,{bubbles:M,composed:L});E.dispatchEvent(H)},tE=(E)=>{if(E instanceof HTMLInputElement)return E.type;else if(E instanceof HTMLSelectElement&&E.hasAttribute(\"multiple\"))return\"multi-select\";else return\"other\"},b=(E,f=2)=>String(E).padStart(f,\"0\"),Ef=(E,f)=>{switch(E){case\"date\":return`${f.getUTCFullYear()}-${b(f.getUTCMonth()+1)}-${b(f.getUTCDate())}`;case\"month\":return`${f.getUTCFullYear()}-${b(f.getUTCMonth()+1)}`;case\"datetime-local\":return`${f.getFullYear()}-${b(f.getMonth()+1)}-${b(f.getDate())}T${b(f.getHours())}:${b(f.getMinutes())}`;default:return f.toISOString()}},ff=(E)=>{let f=Math.floor(E/1000),M=`${b(Math.floor(f/3600))}:${b(Math.floor(f/60)%60)}`;return f%60===0?M:`${M}:${b(f%60)}`},Mf=(E)=>{let f=E.match(/^(\\d\\d):(\\d\\d)(?::(\\d\\d)(?:\\.(\\d+))?)?$/);if(f==null)return NaN;let[,M,L,H,J]=f;return(Number(M)*60+Number(L))*60000+Number(H??0)*1000+Number(J??0)},eE=(E,f)=>{let M=tE(E);switch(M){case\"radio\":E.checked=f!=null&&E.value===String(f);break;case\"checkbox\":E.checked=!!f;break;case\"date\":case\"datetime-local\":case\"month\":case\"week\":{let L=E;if(f==null||f===\"\")L.value=\"\";else if(f instanceof Date||typeof f===\"number\"){let H=f instanceof Date?f:new Date(f);if(M===\"week\")try{L.valueAsDate=H}catch(J){}else L.value=Ef(M,H)}else L.value=String(f);break}case\"time\":{let L=E;if(f==null||f===\"\")L.value=\"\";else if(typeof f===\"number\")L.value=ff(f);else if(f instanceof Date)L.value=`${b(f.getHours())}:${b(f.getMinutes())}:${b(f.getSeconds())}`;else L.value=String(f);break}case\"multi-select\":for(let L of Array.from(E.querySelectorAll(\"option\")))L.selected=Array.isArray(f)?f.map(String).includes(L.value):f!=null?!!f[L.value]:!1;break;default:E.value=f==null?\"\":f}},E8=(E)=>{switch(tE(E)){case\"radio\":{let M=E.parentElement?.querySelector(`[name=\"${E.name}\"]:checked`);return M!=null?M.value:null}case\"checkbox\":return E.checked;case\"number\":case\"range\":{let M=E,L=typeof M.valueAsNumber===\"number\"?M.valueAsNumber:Number(M.value);return Number.isNaN(L)?M.value:L}case\"date\":case\"datetime-local\":case\"month\":case\"week\":{let M=E,L=M.valueAsDate??(M.value!==\"\"?new Date(M.value):null);return L!=null&&!Number.isNaN(L.getTime())?L:M.value}case\"time\":{let M=E,L=typeof M.valueAsNumber===\"number\"?M.valueAsNumber:NaN;if(Number.isNaN(L))L=Mf(M.value);return Number.isNaN(L)?M.value:L}case\"multi-select\":return Array.from(E.querySelectorAll(\"option\")).reduce((M,L)=>{return M[L.value]=L.selected,M},{});default:return E.value}},{ResizeObserver:aE}=globalThis,D0=aE!=null?new aE((E)=>{for(let f of E){let M=f.target;fE(M,\"resize\")}}):{observe(){},unobserve(){}},ME=(E,f,M=!0)=>{if(E!=null&&f!=null)if(typeof f===\"string\")E.textContent=f;else if(Array.isArray(f))f.forEach((L)=>{E.append(L instanceof Node&&M?M0(L):L)});else if(f instanceof Node)E.append(M?M0(f):f);else throw Error(\"expect text content or document node\")};var O0=(E,f=250)=>{let M;return function(...L){if(M!==void 0)clearTimeout(M);M=setTimeout(()=>{E.apply(this,L)},f)}},F0=(E,f=250)=>{let M,L=Date.now()-f;return function(...H){clearTimeout(M);let J=Date.now()-L;if(J>=f)L=Date.now(),E.apply(this,H);else M=setTimeout(()=>{L=Date.now(),E.apply(this,H)},f-J)}};var V0={value:{toDOM:eE,fromDOM(E){return E8(E)}},text:{toDOM(E,f){E.textContent=f}},enabled:{toDOM(E,f){E.disabled=!f}},disabled:{toDOM(E,f){E.disabled=Boolean(f)}},list:{toDOM(E,f,M){C0(E,f,M).update(f)}}};function S(E){return E.replace(/[A-Z]/g,(f)=>{return`-${f.toLocaleLowerCase()}`})}function LE(E){return E.replace(/-([a-z])/g,(f,M)=>{return M.toLocaleUpperCase()})}var Lf=180/Math.PI,Hf=Math.PI/180;function h(E,f,M){return M<E?NaN:f<E?E:f>M?M:f}function r(E,f,M,L=!0){if(L)M=h(0,M,1);return M*(f-E)+E}var Jf={RADIANS_TO_DEGREES:Lf,DEGREES_TO_RADIANS:Hf,clamp:h,lerp:r};function HE(E,f=document.body){let M=getComputedStyle(f);if(E.endsWith(\")\")&&E.startsWith(\"var(\"))E=E.slice(4,-1);return M.getPropertyValue(E).trim()}var _0={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgreen:\"#90ee90\",lightgrey:\"#d3d3d3\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370db\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#db7093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",rebeccapurple:\"#663399\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\"};var Zf=(E,f,M)=>{return(0.299*E+0.587*f+0.114*M)/255},$0=(E)=>(\"00\"+Math.round(Number(E)).toString(16)).slice(-2);class f8{h;s;l;constructor(E,f,M){E/=255,f/=255,M/=255;let L=Math.max(E,f,M),H=L-Math.min(E,f,M),J=H!==0?L===E?(f-M)/H:L===f?2+(M-E)/H:4+(E-f)/H:0;this.h=60*J<0?60*J+360:60*J,this.s=H!==0?L<=0.5?H/(2*L-H):H/(2-(2*L-H)):0,this.l=(2*L-H)/2}}var a=globalThis.document!==void 0?globalThis.document.createElement(\"span\"):void 0;if(a)a.style.display=\"none\";class W{r;g;b;a;static fromVar(E,f=document.body){return W.fromCss(HE(E,f))}static fromCss(E){let f=_0[String(E).trim().toLowerCase()];if(f!==void 0)E=f;let M=E.match(/^#([0-9a-fA-F]+)$/);if(M){let Y=M[1],z=(G,X)=>parseInt(Y.slice(G,G+X),16);if(Y.length===3||Y.length===4){let G=(X)=>z(X,1)*17;return new W(G(0),G(1),G(2),Y.length===4?G(3)/255:1)}if(Y.length===6||Y.length===8)return new W(z(0,2),z(2,2),z(4,2),Y.length===8?z(6,2)/255:1)}let L=E;if(a instanceof HTMLSpanElement)a.style.color=\"black\",a.style.color=E,document.body.appendChild(a),L=getComputedStyle(a).color,a.remove();let[H,J,Z,Q]=L.match(/[\\d.]+/g)||[\"0\",\"0\",\"0\",\"0\"],$=L.startsWith(\"color(srgb\")?255:1;return new W(Number(H)*$,Number(J)*$,Number(Z)*$,Q==null?1:Number(Q))}static fromHsl(E,f,M,L=1){let H,J,Z;if(f===0)H=J=Z=M;else{let $=(X,I,U)=>{if(U<0)U+=1;if(U>1)U-=1;if(U<0.16666666666666666)return X+(I-X)*6*U;if(U<0.5)return I;if(U<0.6666666666666666)return X+(I-X)*(0.6666666666666666-U)*6;return X},Y=M<0.5?M*(1+f):M+f-M*f,z=2*M-Y,G=(E%360+360)%360/360;H=$(z,Y,G+0.3333333333333333),J=$(z,Y,G),Z=$(z,Y,G-0.3333333333333333)}let Q=new W(H*255,J*255,Z*255,L);return Q.hslCached={h:(E%360+360)%360,s:f,l:M},Q}static black=new W(0,0,0);static white=new W(255,255,255);constructor(E,f,M,L=1){this.r=h(0,E,255),this.g=h(0,f,255),this.b=h(0,M,255),this.a=h(0,L,1)}get inverse(){return new W(255-this.r,255-this.g,255-this.b,this.a)}get inverseLuminance(){let{h:E,s:f,l:M}=this._hsl;return W.fromHsl(E,f,1-M,this.a)}get opaque(){return this.a===1?this:new W(this.r,this.g,this.b,1)}contrasting(E=1){return this.opaque.blend(this.brightness>0.5?W.black:W.white,E)}get rgb(){let{r:E,g:f,b:M}=this;return`rgb(${E.toFixed(0)},${f.toFixed(0)},${M.toFixed(0)})`}get rgba(){let{r:E,g:f,b:M,a:L}=this;return`rgba(${E.toFixed(0)},${f.toFixed(0)},${M.toFixed(0)},${L.toFixed(2)})`}get RGBA(){return[this.r/255,this.g/255,this.b/255,this.a]}get ARGB(){return[this.a,this.r/255,this.g/255,this.b/255]}hslCached;get _hsl(){if(this.hslCached==null)this.hslCached=new f8(this.r,this.g,this.b);return this.hslCached}get hsl(){let{h:E,s:f,l:M}=this._hsl;return`hsl(${E.toFixed(0)}deg ${(f*100).toFixed(0)}% ${(M*100).toFixed(0)}%)`}get hsla(){let{h:E,s:f,l:M}=this._hsl;return`hsl(${E.toFixed(0)}deg ${(f*100).toFixed(0)}% ${(M*100).toFixed(0)}% / ${(this.a*100).toFixed(0)}%)`}get mono(){let E=this.brightness*255;return new W(E,E,E)}get brightness(){return Zf(this.r,this.g,this.b)}get html(){return this.toString()}toString(){return this.a===1?\"#\"+$0(this.r)+$0(this.g)+$0(this.b):\"#\"+$0(this.r)+$0(this.g)+$0(this.b)+$0(255*this.a)}brighten(E){let{h:f,s:M,l:L}=this._hsl,H=h(0,L+E*(1-L),1);return W.fromHsl(f,M,H,this.a)}darken(E){let{h:f,s:M,l:L}=this._hsl,H=h(0,L*(1-E),1);return W.fromHsl(f,M,H,this.a)}saturate(E){let{h:f,s:M,l:L}=this._hsl,H=h(0,M+E*(1-M),1);return W.fromHsl(f,H,L,this.a)}desaturate(E){let{h:f,s:M,l:L}=this._hsl,H=h(0,M*(1-E),1);return W.fromHsl(f,H,L,this.a)}rotate(E){let{h:f,s:M,l:L}=this._hsl,H=(f+360+E)%360;return W.fromHsl(H,M,L,this.a)}opacity(E){let{h:f,s:M,l:L}=this._hsl;return W.fromHsl(f,M,L,E)}swatch(){return console.log(`%c %c ${this.html}, ${this.rgba}`,`background-color: ${this.html}`,\"background-color: transparent\"),this}blend(E,f){return new W(r(this.r,E.r,f),r(this.g,E.g,f),r(this.b,E.b,f),r(this.a,E.a,f))}static blendHue(E,f,M){let L=(f-E+720)%360;if(L<180)return E+M*L;else return E-(360-L)*M}mix(E,f){let M=this._hsl,L=E._hsl;return W.fromHsl(M.s===0?L.h:L.s===0?M.h:W.blendHue(M.h,L.h,f),r(M.s,L.s,f),r(M.l,L.l,f),r(this.a,E.a,f))}colorMix(E,f){return W.fromCss(`color-mix(in hsl, ${this.html}, ${E.html} ${(f*100).toFixed(0)}%)`)}static computedColorStylesheet=null;static computedColors=new Map;static recomputeQueued=!1;static registerComputedColor(E,f,M,L){if(!W.computedColors.has(E))W.computedColors.set(E,{varName:f,scale:M,method:L}),W.queueRecompute()}static queueRecompute(){if(W.recomputeQueued)return;W.recomputeQueued=!0,queueMicrotask(()=>{W.recomputeQueued=!1,W.recomputeColors()})}static recomputeColors(){if(W.computedColors.size===0)return;let E=[];for(let[M,{varName:L,scale:H,method:J}]of W.computedColors)try{let Z=W.fromVar(L),Q;switch(J){case\"b\":Q=H>0?Z.brighten(H):Z.darken(-H);break;case\"s\":Q=H>0?Z.saturate(H):Z.desaturate(-H);break;case\"h\":Q=Z.rotate(H*100);break;case\"o\":Q=Z.opacity(H);break;default:continue}E.push(` ${M}: ${Q.rgba};`)}catch(Z){}if(E.length===0)return;let f=`:root {\n${E.join(`\n`)}\n}`;if(W.computedColorStylesheet===null)W.computedColorStylesheet=document.createElement(\"style\"),W.computedColorStylesheet.id=\"tosijs-computed-colors\",document.head.append(W.computedColorStylesheet);W.computedColorStylesheet.textContent=f}}var w0=new Set,M8=!1;function $f(){if(!M8)M8=!0,w0.add(()=>W.queueRecompute())}function Qf(E){return w0.add(E),()=>w0.delete(E)}function Yf(){$f();for(let E of w0)E()}function Gf(E,f){let M=j(f),L=_.style(Q0(M));L.id=E,document.head.append(L);let H=A(f);if(H!==void 0)j0(H,()=>{L.textContent=Q0(j(f)),Yf()});return L}var zf=/^(animation-iteration-count|column-count|flex(-grow|-shrink)?|font-weight|opacity|order|orphans|scale|tab-size|widows|z-index|zoom)$/,Wf=/^line-height$/,JE=(E,f)=>{let M=E.replace(/^_+/,\"\"),L=E.startsWith(\"_\"),H=zf.test(M)||!L&&Wf.test(M);if(typeof f===\"number\"&&!H)f=`${f}px`;if(E.startsWith(\"_\"))if(E.startsWith(\"__\"))E=\"--\"+E.substring(2),f=`var(${E}-default, ${f})`;else E=\"--\"+E.substring(1);return{prop:E,value:String(f)}},Xf=(E,f,M)=>{if(M===void 0)return\"\";if(M instanceof W)M=M.html;let L=JE(f,M);return`${E} ${L.prop}: ${L.value};`},L8=(E,f,M=\"\")=>{let L=S(E);if(typeof f===\"object\"&&!(f instanceof W)){let H=Object.keys(f).map((J)=>L8(J,f[J],`${M} `)).join(`\n`);return`${M} ${E} {\n${H}\n${M} }`}else return Xf(M,L,f)},Q0=(E,f=\"\")=>{return Object.keys(E).map((L)=>{let H=E[L];if(typeof H===\"string\"){if(L===\"@import\")return`@import url('${H}');`;throw Error(\"top-level string value only allowed for `@import`\")}let J=Object.keys(H).map((Z)=>L8(Z,H[Z])).join(`\n`);return`${f}${L} {\n${J}\n}`}).join(`\n\n`)},Uf=(E)=>{T(\"initVars\",\"initVars is deprecated. Just use _ and __ prefixes instead.\");let f={};for(let M of Object.keys(E)){let L=E[M],H=S(M);f[`--${H}`]=typeof L===\"number\"&&L!==0?String(L)+\"px\":L}return f},Ff=(E)=>{let f={};for(let M of Object.keys(E)){let L=E[M];if(L instanceof W)f[M]=L.inverseLuminance;else if(typeof L===\"string\"&&(L.match(/^(#[0-9a-fA-F]{3}|rgba?\\(|hsla?\\()/)!=null||_0[L.trim().toLowerCase()]!==void 0))f[M]=W.fromCss(L).inverseLuminance}return f},S0=new Proxy({},{get(E,f){if(E[f]===void 0){let M=\"--\"+S(f);E[f]=(L)=>`var(${M}, ${L})`}return E[f]}}),ZE=new Proxy({},{get(E,f){if(f===\"default\")return S0;if(E[f]==null){f=S(f);let[,M,,L,H,J]=f.match(/^([-\\w]*?)((_)?(\\d+)(\\w?))?$/)||[\"\",f],Z=`--${M}`;if(H!=null){let Q=L==null?Number(H)/100:-Number(H)/100;switch(J){case\"b\":case\"s\":case\"h\":case\"o\":{let $=`--${f}`;W.registerComputedColor($,Z,Q,J),E[f]=`var(${$})`}break;case\"\":E[f]=`calc(var(${Z}) * ${Q})`;break;default:throw console.error(J),Error(`Unrecognized method ${J} for css variable ${Z}`)}}else E[f]=`var(${Z})`}return E[f]}});function H8(){let E=(f)=>typeof matchMedia<\"u\"&&matchMedia(f).matches;return{colorScheme:E(\"(prefers-color-scheme: dark)\")?\"dark\":\"light\",contrast:E(\"(prefers-contrast: more)\")?\"more\":E(\"(prefers-contrast: less)\")?\"less\":E(\"(prefers-contrast: custom)\")?\"custom\":\"no-preference\",reducedMotion:E(\"(prefers-reduced-motion: reduce)\"),reducedTransparency:E(\"(prefers-reduced-transparency: reduce)\"),forcedColors:E(\"(forced-colors: active)\")}}function qf(E){if(typeof matchMedia>\"u\")return()=>{};let f=[\"(prefers-color-scheme: dark)\",\"(prefers-contrast: more)\",\"(prefers-contrast: less)\",\"(prefers-contrast: custom)\",\"(prefers-reduced-motion: reduce)\",\"(prefers-reduced-transparency: reduce)\",\"(forced-colors: active)\"],M=()=>E(H8()),L=f.map((H)=>matchMedia(H));for(let H of L)H.addEventListener(\"change\",M);return()=>{for(let H of L)H.removeEventListener(\"change\",M)}}var J8=\"http://www.w3.org/1998/Math/MathML\",Z8=\"http://www.w3.org/2000/svg\";var N0={},G8=(E,f,M)=>{let L=JE(S(f),M);if(L.prop.startsWith(\"--\"))E.style.setProperty(L.prop,L.value);else E.style[f]=L.value},Kf=(E)=>{return{toDOM(f,M){G8(f,E,M)}}},$8=new WeakMap,z8=(E,f,M)=>{if(f===\"style\")if(typeof M===\"object\")for(let L of Object.keys(M))if(A(M[L]))d(E,M[L],Kf(L));else G8(E,L,M[L]);else E.setAttribute(\"style\",M);else{let L=S(f),H=E.constructor.observedAttributes;if(H?.includes(f)||H?.includes(L))if(typeof M===\"boolean\")M?E.setAttribute(L,\"\"):E.removeAttribute(L);else E.setAttribute(L,M);else if(E[f]!==void 0){let{MathMLElement:Z}=globalThis;if(E instanceof SVGElement||Z!==void 0&&E instanceof Z)E.setAttribute(f,M);else E[f]=M}else if(L===\"class\"){let Z=(z)=>String(z||\"\").split(/\\s+/).filter(Boolean),Q=new Set,$=new Set;if(Array.isArray(M))for(let z of M)for(let G of Z(z))Q.add(G);else if(M!=null&&typeof M===\"object\")for(let[z,G]of Object.entries(M))for(let X of Z(z))(G?Q:$).add(X);else for(let z of Z(M))Q.add(z);let Y=$8.get(E);if(Y){for(let z of Y)if(!Q.has(z))E.classList.remove(z)}for(let z of $)E.classList.remove(z);for(let z of Q)E.classList.add(z);$8.set(E,Q)}else if(E[L]!==void 0)E[L]=M;else if(typeof M===\"boolean\")M?E.setAttribute(L,\"\"):E.removeAttribute(L);else E.setAttribute(L,M)}},$E={},Q8=(E)=>{if(!$E[E])$E[E]={toDOM(f,M){z8(f,E,M)}};return $E[E]},x0=(E,f,M)=>{if(f===\"apply\")M(E);else if(f.match(/^on[A-Z]/)!=null){let L=f.substring(2).toLowerCase();q0(E,L,M)}else if(f===\"bind\"){let L=typeof M.binding===\"string\"?V0[M.binding]:M.binding;if(L!==void 0&&M.value!==void 0)d(E,M.value,L instanceof Function?{toDOM:L}:L);else throw Error(\"bad binding\")}else if(f.match(/^bind[A-Z]/)!=null){let L=f.substring(4,5).toLowerCase()+f.substring(5);if(L!==\"value\"){let J=L===\"text\"?\"textContent\":L===\"enabled\"?\"disabled (with .tosi.take(v => !v))\":L===\"disabled\"?\"disabled\":L===\"list\"?\".tosi.listBinding()\":null;if(J)T(`bind${L}`,`bind${f.substring(4)} is deprecated. Use { ${J}: ... } instead.`)}let H=V0[L];if(H!==void 0)d(E,M,H);else throw Error(`${f} is not allowed, bindings.${L} is not defined`)}else if(M!=null&&typeof M===\"object\"&&M[f0])d(E,M,Q8(f));else if(A(M))d(E,M,Q8(f));else z8(E,f,M)},QE=(E,...f)=>{if(N0[E]===void 0){let[H,J]=E.split(\"|\");if(J===void 0)N0[E]=globalThis.document.createElement(H);else N0[E]=globalThis.document.createElementNS(J,H)}let M=N0[E].cloneNode(),L={};for(let H of f)if(H instanceof Element||H instanceof DocumentFragment||typeof H===\"string\"||typeof H===\"number\")if(M instanceof HTMLTemplateElement)M.content.append(H);else M.append(H);else if(A(H))M.append(_.span({bindText:H}));else Object.assign(L,H);for(let H of Object.keys(L)){let J=L[H];x0(M,H,J)}return M},YE=(...E)=>{let f=globalThis.document.createDocumentFragment();for(let M of E)f.append(M);return f},_=new Proxy({fragment:YE},{get(E,f){if(f=f.replace(/[A-Z]/g,(M)=>`-${M.toLocaleLowerCase()}`),E[f]===void 0)E[f]=(...M)=>QE(f,...M);return E[f]},set(){throw Error(\"You may not add new properties to elements\")}}),GE=new Proxy({fragment:YE},{get(E,f){if(E[f]===void 0)E[f]=(...M)=>QE(`${f}|${Z8}`,...M);return E[f]},set(){throw Error(\"You may not add new properties to elements\")}}),zE=new Proxy({fragment:YE},{get(E,f){if(E[f]===void 0)E[f]=(...M)=>QE(`${f}|${J8}`,...M);return E[f]},set(){throw Error(\"You may not add new properties to elements\")}}),Y8=new WeakSet;function Df(E,f,M=\"part\"){let L=`[data-${M}]`;for(let H of Array.from(E.querySelectorAll(L))){if(Y8.has(H))continue;let J=H.getAttribute(`data-${M}`);if(J==null)continue;let Z=f[J];if(Z==null)continue;Y8.add(H);for(let Q of Object.keys(Z))x0(H,Q,Z[Q])}}var Of=[\"sort\",\"splice\",\"copyWithin\",\"fill\",\"pop\",\"push\",\"reverse\",\"shift\",\"unshift\"],Cf=!0,jf=/^\\.?([^.[\\](),])+(\\.[^.[\\](),]+|\\[\\d+\\]|\\[[^=[\\](),]*=[^[\\]()]+\\])*$/,kf=(E)=>jf.test(E),t=(E=\"\",f=\"\")=>{if(E===\"\")return f;else if(f.startsWith(\"[\")&&f.endsWith(\"]\"))return`${E}${f}`;else if(f.match(/^\\d+$/)!==null||f.includes(\"=\"))return`${E}[${f}]`;else return`${E}.${f}`},P0={};function WE(E,f){if(E!==null&&(typeof E===\"object\"||typeof E===\"function\"))return E;return new Proxy(P0,e(f,!0))}var q8=()=>new Proxy({},e(\"^\",!0)),XE=(E)=>{let M=E(q8())?.path;if(!M?.startsWith(\"^.\"))throw Error(\"selector must return a property of the item\");return M.substring(2)},UE=(E,f,M)=>{for(let L=0;L<E.length;L++)if(`${R(E[L],f)}`===`${M}`)return L;return-1},Af=(E,f)=>({listFind(M,L){if(M instanceof Element){let Z=M;while(Z&&!Z[o]&&Z.parentElement)Z=Z.parentElement;let Q=Z?.[o];if(Q==null)return;let $=f.indexOf(Q);return $!==-1?N[E][$]:void 0}let H=XE(M),J=UE(f,H,L);return J!==-1?N[E][J]:void 0},listUpdate(M,L){let H=XE(M),J=R(L,H),Z=UE(f,H,J);if(Z!==-1){let Q=N[E][Z];for(let $ of Object.keys(L))Q[$]=L[$];return Q}return N[E].push(L),N[E][f.length-1]},listRemove(M,L){let H=XE(M),J=UE(f,H,L);if(J===-1)return!1;return N[E].splice(J,1),!0}}),W8=!1;function Rf(){if(!W8)console.warn(\"xinValue, tosiValue, xinPath, tosiPath, etc. are deprecated. Use .tosi.value, .tosi.path, .tosi.observe(), etc. instead.\"),W8=!0}var X8=(E)=>{return E===P0},Tf=(E,f)=>({get(M,L){switch(L){case\"value\":return f===P0?R(B,E):f.valueOf?f.valueOf():f;case\"path\":return E;case\"touch\":return()=>y(E);case\"observe\":return(H)=>{let J=n(E,H);return()=>Z0(J)};case\"bind\":return(H,J,Z)=>{nE()(H,E,J,Z)};case\"on\":{let H=f===P0?R(B,E):f.valueOf?f.valueOf():f;return(J,Z)=>rE()(J,Z,H)}case\"binding\":return(H)=>({bind:{value:E,binding:H}});case\"listBinding\":return(H=({span:Z})=>Z({bindText:\"^\"}),J={})=>{let Z=J.virtual?.itemsPerRow??1,Q=[];for(let $=0;$<Z;$++)Q.push(H(_,q8(),$));return[{bindList:{value:E,...J}},_.template(...Q)]};case\"listFind\":case\"listUpdate\":case\"listRemove\":return Af(E,Array.isArray(f)?f:[])[L];case\"take\":return(...H)=>{let J=H[H.length-1],Q=H.slice(0,-1).map(($)=>typeof $===\"string\"?$:$[g]);return{[f0]:!0,paths:[E,...Q],transform:J}}}return},set(M,L,H){if(L===\"value\"){if(H=j(H),j(w[E])!==H&&J0(B,E,H))y(E);return!0}return!1}}),k0=(E,f)=>new Proxy(f,Tf(E,f)),U8=new Set([\"path\",\"value\",\"touch\",\"observe\",\"bind\",\"on\",\"binding\",\"listBinding\",\"listFind\",\"listUpdate\",\"listRemove\",\"take\"]),F8=new Map([[g,\"path\"],[\"xinPath\",\"path\"],[\"tosiPath\",\"path\"],[s,\"value\"],[\"xinValue\",\"value\"],[\"tosiValue\",\"value\"],[PE,\"observe\"],[\"xinObserve\",\"observe\"],[\"tosiObserve\",\"observe\"],[bE,\"on\"],[\"xinOn\",\"on\"],[\"tosiOn\",\"on\"],[yE,\"bind\"],[\"xinBind\",\"bind\"],[\"tosiBind\",\"bind\"],[\"tosiBinding\",\"binding\"],[\"tosiListBinding\",\"listBinding\"]]),e=(E,f)=>({get(M,L){if((L===\"tosi\"||L===B0)&&f)return k0(E,M);if(X8(M)){let $=()=>R(B,E);switch(L){case\"valueOf\":case\"toJSON\":return()=>$();case Symbol.toPrimitive:return(G)=>{let X=$();if(G===\"number\")return Number(X);if(G===\"string\")return String(X);return X};case\"toString\":return()=>String($())}if(U8.has(L))return k0(E,M)[L];let Y=F8.get(L);if(Y!==void 0)return Rf(),k0(E,M)[Y];let z=$();if(z!=null){let G=Object(z);if(L in G){let X=G[L];return typeof X===\"function\"?X.bind(G):X}}return}if(f&&(L===\"valueOf\"||L===\"toJSON\"))return()=>M.valueOf?M.valueOf():M;if(f&&!(L in M)&&U8.has(L))return k0(E,M)[L];let H=F8.get(L);if(H!==void 0)return k0(E,M)[H];if(typeof L===\"symbol\")return M[L];let J=Object.getOwnPropertyDescriptor(M,L);if(J&&!J.configurable&&!J.writable&&\"value\"in J)return J.value;let Z=L,Q=Z.match(/^([^.[]+)\\.(.+)$/)??Z.match(/^([^\\]]+)(\\[.+)/)??Z.match(/^(\\[[^\\]]+\\])\\.(.+)$/)??Z.match(/^(\\[[^\\]]+\\])\\[(.+)$/);if(Q!==null){let[,$,Y]=Q,z=t(E,$),G=j(R(M,$));return G!==null&&typeof G===\"object\"?new Proxy(G,e(z,f))[Y]:G}if(Z.startsWith(\"[\")&&Z.endsWith(\"]\"))Z=Z.substring(1,Z.length-1);if(!Array.isArray(M)&&M[Z]!==void 0||Array.isArray(M)&&Z.includes(\"=\")){let $;if(Z.includes(\"=\")){let[Y,z]=Z.split(\"=\");$=M.find((G)=>`${R(G,Y)}`===z)}else $=M[Z];if($ instanceof Object){$=j($);let Y=t(E,Z);return new Proxy($ instanceof Function?$.bind(M):$,e(Y,f))}else return f?WE($,t(E,Z)):$}else if(Array.isArray(M)){let $=M[Z];return typeof $===\"function\"?(...Y)=>{let z=Y.map((X)=>j(X)),G=$.apply(M,z);if(Of.includes(Z))y(E);if(G!=null&&typeof G===\"object\"){if(Z===\"find\"||Z===\"findLast\"||Z===\"at\"){let X=M.indexOf(G);if(X!==-1)return new Proxy(G,e(t(E,String(X)),f))}}return G}:typeof $===\"object\"?new Proxy(j($),e(t(E,Z),f)):f?WE($,t(E,Z)):$}else{let $=M[Z];if($!==null&&typeof $===\"object\")$=j($);return f?WE($,t(E,Z)):$}},set(M,L,H){if(H=j(H),typeof L===\"symbol\"&&L!==s)return M[L]=H,!0;if(H!==null&&typeof H===\"object\")if(Array.isArray(H))for(let $=0;$<H.length;$++){let Y=Object.getOwnPropertyDescriptor(H,$);if(Y===void 0||Y.writable!==!0)continue;if(Y.value!==null&&typeof Y.value===\"object\")H[$]=j(Y.value)}else for(let $ of Object.keys(H)){let Y=Object.getOwnPropertyDescriptor(H,$);if(Y===void 0||Y.writable!==!0)continue;if(Y.value!==null&&typeof Y.value===\"object\")H[$]=j(Y.value)}let Z=L===s||L===\"xinValue\"||L===\"tosiValue\"||L===\"value\"&&(X8(M)||f&&!(\"value\"in M))?E:t(E,L);if(Cf&&!kf(Z))throw Error(`setting invalid path ${Z}`);if(j(w[Z])!==H&&J0(B,Z,H))y(Z);return!0}}),j0=(E,f)=>{let M=typeof f===\"function\"?f:w[f];if(typeof M!==\"function\")throw Error(`observe expects a function or path to a function, ${f} is neither`);return n(E,M)},w=new Proxy(B,e(\"\",!1));pE(w);var N=new Proxy(B,e(\"\",!0));var Bf=16,If=100;function K8(E,f){let M=Array.from(E.getElementsByClassName(u));if(E.classList.contains(u))M.unshift(E);for(let L of M){let H=c.get(L);for(let J of H){if(J.path.startsWith(\"^\"))J.path=`${f}${J.path.substring(1)}`;if(J.binding.toDOM!=null)J.binding.toDOM(L,w[J.path],J.options)}}}var D8=!1;class O8{boundElement;listTop;listBottom;isNamespaced;templates;options;itemToElement;idToElement=new Map;array=[];_filteredCache;_update;_previousSlice;static filterBoundObservers=new WeakMap;constructor(E,f,M={}){if(this.boundElement=E,this.itemToElement=new WeakMap,M.idPath!=null){let Q=A(f);if(Q!=null)mE(Q,M.idPath)}let L=M.virtual?.itemsPerRow??1,H=Array.from(E.children).find((Q)=>Q instanceof HTMLTemplateElement),J=null;if(H!=null){let Q=L;if(H.content.children.length<1||H.content.children.length!==Q)throw Error(`ListBinding expects a template with exactly ${Q} child element(s)`);this.templates=Array.from(H.content.children).map(($)=>M0($)),J=H.nextElementSibling,H.remove()}else if(E.children.length===1)this.templates=[E.children[0]],this.templates[0].remove();else throw Error(\"ListBinding expects a <template> child or exactly one child element\");this.options=M;let Z=E.namespaceURI;if(this.isNamespaced=Z===\"http://www.w3.org/2000/svg\"||Z===\"http://www.w3.org/1998/Math/MathML\",this.isNamespaced)this.listTop=null,this.listBottom=null;else if(this.listTop=document.createElement(\"div\"),this.listBottom=document.createElement(\"div\"),this.listTop.classList.add(\"virtual-list-padding\"),this.listBottom.classList.add(\"virtual-list-padding\"),this.listTop.setAttribute(\"role\",\"presentation\"),this.listBottom.setAttribute(\"role\",\"presentation\"),this.listTop.setAttribute(\"aria-hidden\",\"true\"),this.listBottom.setAttribute(\"aria-hidden\",\"true\"),J!=null)this.boundElement.insertBefore(this.listTop,J),this.boundElement.insertBefore(this.listBottom,J);else this.boundElement.append(this.listTop),this.boundElement.append(this.listBottom);if(L>1){this.boundElement.classList.add(\"tosi-virtual-grid\");let Q=this.boundElement.style;if(Q!=null)Q.setProperty(\"--tosi-columns\",String(L)),Q.display=Q.display||\"grid\",Q.gridTemplateColumns=Q.gridTemplateColumns||\"repeat(var(--tosi-columns), 1fr)\";if(this.listTop!=null&&this.listBottom!=null)this.listTop.style.gridColumn=\"1 / -1\",this.listBottom.style.gridColumn=\"1 / -1\"}if(M.virtual!=null&&!this.boundElement.getAttribute(\"role\"))this.boundElement.setAttribute(\"role\",L>1?\"grid\":\"list\");if(this.boundElement[z0]=this,this.isNamespaced&&M.virtual!=null)console.warn(\"ListBinding: virtual scrolling is not supported in SVG/MathML containers, ignoring virtual option\");if(!this.isNamespaced&&M.virtual!=null)if(D0.observe(this.boundElement),this._update=F0(()=>{this.update(this.array,!0)},Bf),this.boundElement.addEventListener(\"resize\",this._update),M.virtual.scrollContainer===\"window\")window.addEventListener(\"scroll\",this._update),window.addEventListener(\"resize\",this._update);else this.boundElement.addEventListener(\"scroll\",this._update)}filteredArray(){if(this._filteredCache!=null)return this._filteredCache;let{hiddenProp:E,visibleProp:f}=this.options,M=this.array;if(E!==void 0)M=M.filter((L)=>L[E]!==!0);if(f!==void 0)M=M.filter((L)=>L[f]===!0);if(this.options.filter&&this.needle!==void 0)M=this.options.filter(M,this.needle);return this._filteredCache=M,M}visibleSlice(){let{virtual:E}=this.options,f=this.filteredArray(),M=0,L=f.length-1,H=0,J=0;if(E!=null&&this.boundElement instanceof HTMLElement){let Z=this.boundElement.offsetWidth,Q=E.scrollContainer===\"window\",$,Y;if(Q){$=window.innerHeight;let X=this.boundElement.getBoundingClientRect();Y=Math.max(0,-X.top)}else $=this.boundElement.offsetHeight,Y=this.boundElement.scrollTop;let z=E.width!=null?Math.max(1,Math.floor(Z/E.width)):E.visibleColumns??1,G=Math.ceil(f.length/z);if(E.minHeight!=null){let X=E.minHeight,I=Math.ceil($/X)+(E.rowChunkSize||1),U=z*I,F=G*X,k=Math.max(0,F-$),D=k>0?Math.min(1,Math.max(0,Y/k)):0,i=Math.max(0,G-I+1),x=D*i,P=Math.floor(x);if(E.rowChunkSize)P-=P%E.rowChunkSize;return M=P*z,L=M+U-1,H=Y,J=Math.max(0,F-Y-$),{items:f,firstItem:M,lastItem:L,topBuffer:H,bottomBuffer:J,interpolation:{t:D,position:x,scrollTop:Y,viewportHeight:$,totalScrollHeight:F,rowHeight:E.height}}}else{let X=Math.ceil($/E.height)+(E.rowChunkSize||1),I=z*X,U=Math.floor(Y/E.height);if(U>G-X+1)U=Math.max(0,G-X+1);if(E.rowChunkSize)U-=U%E.rowChunkSize;M=U*z,L=M+I-1,H=U*E.height,J=Math.max((G-X)*E.height-H,0)}}return{items:f,firstItem:M,lastItem:L,topBuffer:H,bottomBuffer:J}}needle;filter=F0((E)=>{if(this.needle!==E)this.needle=E,this.update(this.array)},If);update(E,f){if(E==null)E=[];if(this.array=E,!f)this._filteredCache=void 0;let{hiddenProp:M,visibleProp:L}=this.options,H=A(E),J=this.visibleSlice();if(this.boundElement.classList.toggle(\"-xin-empty-list\",J.items.length===0),this.options.virtual!=null)this.boundElement.setAttribute(\"aria-rowcount\",String(J.items.length));let Z=this._previousSlice,{firstItem:Q,lastItem:$,topBuffer:Y,bottomBuffer:z}=J,G=M===void 0&&L===void 0&&f===!0&&Z!=null&&Q===Z.firstItem&&$===Z.lastItem;if(G&&J.interpolation==null&&Y===Z.topBuffer&&z===Z.bottomBuffer)return;if(G&&J.interpolation!=null){this._updateInterpolatedBuffers(J);return}this._previousSlice=J;let X=0,I=0,U=0,{idPath:F}=this.options,k=this.options.virtual?.itemsPerRow??1,D;if(F!=null){D=new Set;for(let q=Q;q<=$;q++){let K=J.items[q];if(K!==void 0)D.add(String(K[F]))}}let i=new Set;for(let q of Array.from(this.boundElement.children)){if(q===this.listTop||q===this.listBottom)continue;let K=q[o];if(K==null)continue;else if(K===!0)q.remove(),X++;else{if(i.has(K))continue;let O;if(F!=null)O=!D.has(String(K[F]));else{let V=J.items.indexOf(K);O=V<Q||V>$}if(O){i.add(K);let V=this.itemToElement.get(K);if(V!=null)for(let C of V)C.remove();else q.remove();if(this.itemToElement.delete(K),F!=null)this.idToElement.delete(String(K[F]));X++}}}if(this.listTop!=null&&this.listBottom!=null)this.listTop.style.height=String(Y)+\"px\",this.listBottom.style.height=String(z)+\"px\";let x=[],P=F!=null?new Set:null;for(let q=Q;q<=$;q++){let K=J.items[q];if(K===void 0)continue;if(P!=null&&F!=null){let V=String(K[F]);if(P.has(V)){if(!D8)D8=!0,console.error(`tosijs list binding: duplicate idPath value \"${V}\" (idPath: \"${F}\"). `+\"id-path values must be unique — items sharing an id collapse to a single \"+\"row and updates target the wrong item. Warned once per session.\")}else P.add(V)}let O=this.itemToElement.get(j(K));if(O==null&&F!=null){let V=String(K[F]);if(O=this.idToElement.get(V),O!=null){let C=j(K);this.itemToElement.set(C,O);for(let p of O)p[o]=C}}if(O==null){U++;let V=j(K);if(O=this.templates.map((C)=>M0(C)),typeof K===\"object\")this.itemToElement.set(V,O);for(let C of O)C[o]=typeof K===\"object\"?V:!0;for(let C of O)if(this.listBottom!=null)this.boundElement.insertBefore(C,this.listBottom);else this.boundElement.append(C);if(F!=null){let C=K[F],p=`${H}[${F}=${C}]`;for(let c8 of O)K8(c8,p);this.idToElement.set(String(C),O)}else{let C=`${H}[${q}]`;for(let p of O)K8(p,C)}}if(this.options.virtual!=null){let V=String(q+1);if(k>1)for(let C=0;C<O.length;C++){let p=O[C];p.setAttribute(\"role\",\"gridcell\"),p.setAttribute(\"aria-rowindex\",V),p.setAttribute(\"aria-colindex\",String(C+1))}else for(let C of O)C.setAttribute(\"role\",\"listitem\"),C.setAttribute(\"aria-rowindex\",V)}x.push(...O)}let E0=this.listTop;for(let q of x){if(q.previousElementSibling!==E0)if(I++,E0?.nextElementSibling!=null)this.boundElement.insertBefore(q,E0.nextElementSibling);else if(this.listBottom!=null)this.boundElement.insertBefore(q,this.listBottom);else this.boundElement.append(q);E0=q}if(J.interpolation!=null)this._updateInterpolatedBuffers(J);if(L0.perf)console.log(H,\"updated\",{removed:X,created:U,moved:I})}_updateInterpolatedBuffers(E){let{t:f,position:M,scrollTop:L,viewportHeight:H,totalScrollHeight:J,rowHeight:Z}=E.interpolation,Q=0;for(let G of Array.from(this.boundElement.children)){if(G===this.listTop||G===this.listBottom)continue;Q+=G.offsetHeight||Z}let $=L,Y=L+H-Q,z=Math.max(0,f*Y+(1-f)*$-M%1*Z);if(this.listTop!=null&&this.listBottom!=null)this.listTop.style.height=String(z)+\"px\",this.listBottom.style.height=String(Math.max(0,J-z-Q))+\"px\"}}var C0=(E,f,M)=>{let L=E[z0];if(f&&L===void 0)L=new O8(E,f,M),E[z0]=L;return L},FE=(E)=>{let f;while(!(f=E[o])&&E&&E.parentElement)E=E.parentElement;return f?{element:E,item:f}:void 0},qE=(E)=>{let f=FE(E);return f?f.item:void 0},Vf=(E)=>{let f=FE(E);if(!f)return console.error(\"deleteListItem failed, element is not part of a list instance\",E),!1;let M=C0(f.element.parentElement);if(!M.options.idPath)return console.error(\"deleteListItem failed, list binding has no idPath\",E.parentElement,M),!1;let L=M.array.indexOf(f.item);if(L>-1)return M.array.splice(L,1),!0;return!1},_f={start:\"start\",middle:\"center\",end:\"end\",nearest:\"nearest\"},wf=(E,f,M={})=>{let L=C0(E);if(L==null)return console.error(\"scrollListItemIntoView failed, element has no list binding\",E),!1;let{position:H=\"middle\",behavior:J=\"smooth\"}=M,Z=L.filteredArray(),Q=j(f)??f,$=Z.indexOf(Q);if($===-1)return console.error(\"scrollListItemIntoView failed, item not found in list\",f),!1;let{virtual:Y}=L.options;if(Y!=null&&E instanceof HTMLElement){let z=Y.width!=null?Math.max(1,Math.floor(E.offsetWidth/Y.width)):Y.visibleColumns??1,G=Math.floor($/z),X=Y.minHeight??Y.height,I=Math.ceil(Z.length/z),U=Y.scrollContainer===\"window\",F=U?window.innerHeight:E.offsetHeight,k;if(Y.minHeight!=null){let D=Math.ceil(F/X)+(Y.rowChunkSize||1),i=I*X,x=Math.max(0,i-F),P=Math.max(1,I-D+1),E0=G/P;switch(H){case\"start\":k=E0*x;break;case\"end\":k=Math.max(0,(G-D+1)/P*x);break;case\"nearest\":{let q=U?Math.max(0,-E.getBoundingClientRect().top):E.scrollTop,K=x>0?q/x:0,O=Math.floor(K*P);if(G<O)k=E0*x;else if(G>=O+D)k=Math.max(0,(G-D+1)/P*x);else return!0;break}default:{let q=G-Math.floor(D/2);k=Math.max(0,q)/P*x}}}else{let D=G*Y.height;switch(H){case\"start\":k=D;break;case\"end\":k=D-F+Y.height;break;case\"nearest\":{let i=U?Math.max(0,-E.getBoundingClientRect().top):E.scrollTop;if(D<i)k=D;else if(D+Y.height>i+F)k=D-F+Y.height;else return!0;break}default:k=D-(F-Y.height)/2}}if(k=Math.max(0,k),U){let D=E.getBoundingClientRect().top+window.scrollY;window.scrollTo({top:D+k,behavior:J})}else E.scrollTo({top:k,behavior:J})}else{let z=L.itemToElement.get(Q);if(z==null||z.length===0)return console.error(\"scrollListItemIntoView failed, no DOM element found for item\",f),!1;z[0].scrollIntoView({block:_f[H]??\"center\",behavior:J})}return!0};var{document:A0,MutationObserver:C8}=globalThis,DE=(E,f)=>{let M=c.get(E);if(M==null)return;for(let L of M){let{binding:H,options:J}=L,{path:Z}=L,{toDOM:Q}=H;if(Q!=null){if(Z.startsWith(\"^\")){let $=qE(E);if($!=null&&$[g]!=null)Z=L.path=`${$[g]}${Z.substring(1)}`;else{if(E instanceof HTMLElement)console.warn(`Unresolved relative binding \"${Z}\" —`,E,\"is not part of a list. If this is a list template, wrap it in a <template>.\");continue}}if(f==null||X0(f,Z))Q(E,K0()[Z],J)}}};if(C8!=null)new C8((f)=>{f.forEach((M)=>{Array.from(M.addedNodes).forEach((L)=>{if(L instanceof Element)Array.from(L.getElementsByClassName(u)).forEach((H)=>DE(H))})})}).observe(A0.body,{subtree:!0,childList:!0});n(()=>!0,(E)=>{let f=Array.from(A0.getElementsByClassName(u));for(let M of f)DE(M,E)});var T8=(E)=>{let f=E.composed&&E.composedPath!=null?E.composedPath()[0]:E.target;return f instanceof Element?f:null},KE=(E,f)=>{while(E!=null){let M=E.closest(f);if(M!=null)return M;let L=E.getRootNode();E=typeof ShadowRoot<\"u\"&&L instanceof ShadowRoot?L.host:null}return null},Sf=(E,f)=>{if(E.parentElement!=null)return KE(E.parentElement,f);let M=E.getRootNode();if(typeof ShadowRoot<\"u\"&&M instanceof ShadowRoot)return KE(M.host,f);return null},B8=(E)=>{if(E.parentElement!=null)return E.parentElement;let f=E.getRootNode();return typeof ShadowRoot<\"u\"&&f instanceof ShadowRoot?f.host:null},j8=(E)=>{while(E!=null&&!l.has(E))E=B8(E);return E},k8=(E)=>{let f=KE(T8(E),G0);while(f!=null){let M=c.get(f);for(let L of M??[]){let{binding:H,path:J}=L,{fromDOM:Z}=H;if(Z!=null){let Q;try{Q=Z(f,L.options)}catch($){throw console.error(\"Cannot get value from\",f,\"via\",L),Error(\"Cannot obtain value fromDOM\")}if(Q!=null){let $=K0(),Y=$[J];if(Y==null)$[J]=Q;else{let z=Y[g]!=null?Y[s]:Y,G=Q[g]!=null?Q[s]:Q;if(typeof z===\"number\"&&typeof G===\"string\"){let U=G.trim();if(U!==\"\"){let F=Number(U);if(!Number.isNaN(F))G=F}}else if(G instanceof Date){if(typeof z===\"number\")G=G.getTime();else if(typeof z===\"string\")G=f.value}if(z instanceof Date&&G instanceof Date?z.getTime()!==G.getTime():z!==G)$[J]=G}}}}f=Sf(f,G0)}};if(globalThis.document!=null)A0.body.addEventListener(\"change\",k8,!0),A0.body.addEventListener(\"input\",k8,!0);function Nf(E,f,M,L){let{paths:H,transform:J}=f,{toDOM:Z}=M;if(Z==null)return E;let Q=null,$={toDOM(z,G,X){let I=K0(),U=H.map((k)=>I[k]);if(Q!==null&&U.every((k,D)=>k===Q[D]))return;Q=U;let F=J(...U);Z(z,F,X)},fromDOM:M.fromDOM};E.classList?.add(u);let Y=c.get(E);if(Y==null)Y=[],c.set(E,Y);for(let z of H)Y.push({path:z,binding:$,options:L});if(!H[0].startsWith(\"^\"))y(H[0]);return E}var A8=!1,xf=(E,f)=>{if(A8)return;if(typeof ShadowRoot<\"u\"&&E.getRootNode!=null&&E.getRootNode()instanceof ShadowRoot)A8=!0,console.warn(`tosijs: ${f} targets an element inside a shadow root, where data bindings do not operate (documented Component design boundary). A shadow-DOM component is bound like an <input>: bind its VALUE from outside (bindings.value) and implement render() to reflect value into the shadow DOM. Warned once per session.`,E)};function d(E,f,M,L){if(E instanceof DocumentFragment)throw Error(\"bind cannot bind to a DocumentFragment\");if(xf(E,\"bind()\"),f!=null&&typeof f===\"object\"&&f[f0])return Nf(E,f,M,L);let H;if(typeof f===\"object\"&&f[g]===void 0&&L===void 0){let{value:Q}=f;H=typeof Q===\"string\"?Q:Q[g],L={...f},delete L.value}else H=typeof f===\"string\"?f:f[g];if(H==null)throw Error(\"bind requires a path or object with xin Proxy\");let{toDOM:J}=M;E.classList?.add(u);let Z=c.get(E);if(Z==null)Z=[],c.set(E,Z);if(Z.push({path:H,binding:M,options:L}),J!=null&&!H.startsWith(\"^\"))y(H);if(L?.filter&&L?.needle)d(E,L.needle,{toDOM(Q,$){Q[z0]?.filter($)}});return E}var R8=new Set,Pf=(E)=>{let f=j8(T8(E)),M=!1,L=new Proxy(E,{get(J,Z){if(Z===\"stopPropagation\")return()=>{E.stopPropagation(),M=!0};else{let Q=J[Z];return typeof Q===\"function\"?Q.bind(J):Q}}}),H=new Set;while(!M&&f!=null){let Z=l.get(f)?.[E.type]??H;for(let Q of Z){if(typeof Q===\"function\")Q(L);else{let $=K0()[Q];if(typeof $===\"function\")$(L);else throw Error(`no event handler found at path ${Q}`)}if(M)continue}f=j8(B8(f))}};function q0(E,f,M){let L=l.get(E);if(L==null)L={},l.set(E,L);if(!L[f])L[f]=new Set;if(L[f].add(M),!R8.has(f))R8.add(f),A0.body.addEventListener(f,Pf,!0);return()=>{L[f].delete(M)}}sE(d,q0);function OE(E,f){if(!E.internals)return;let M={},L=\"\";if(E.hasAttribute(\"required\")&&f===\"\")M.valueMissing=!0,L=\"Please fill out this field.\";let H=E.getAttribute(\"minlength\");if(H&&f.length<parseInt(H,10))M.tooShort=!0,L=`Please use at least ${H} characters.`;let J=E.getAttribute(\"maxlength\");if(J&&f.length>parseInt(J,10))M.tooLong=!0,L=`Please use no more than ${J} characters.`;let Z=E.getAttribute(\"pattern\");if(Z&&f!==\"\")try{if(!new RegExp(`^(?:${Z})$`).test(f))M.patternMismatch=!0,L=\"Please match the requested format.\"}catch{}if(Object.keys(M).length>0)E.internals.setValidity(M,L,E);else E.internals.setValidity({})}var yf=0;function CE(){return`custom-elt${(yf++).toString(36)}`}var I8=0,V8=new Set,_8=new Set,w8=Symbol(\"tosiDrainWrapped\"),S8=new WeakSet,jE=null;function bf(){if(jE===null)jE=new MutationObserver((E)=>{let f=new Set;for(let M of E)if(M.type===\"attributes\"&&M.target instanceof v){let L=M.target,H=LE(M.attributeName);if(L._legacyTrackedAttrs?.has(H))f.add(L)}for(let M of f)M.queueRender(!1)});return jE}var R0={};function mf(E,f){let M=R0[E],L=Q0(f).replace(/:host\\(([^)]+)\\)/g,`${E}$1`).replace(/:host\\b/g,E);R0[E]=M?M+`\n`+L:L}function gf(E){if(R0[E])document.head.append(_.style({id:E+\"-component\"},R0[E]));delete R0[E]}function vf(E){let f=Object.create(null),M=(L)=>{if(Array.isArray(L)){L.forEach(M);return}if(!(L instanceof Element))return;let H=L.getAttribute(\"part\");if(H!=null&&!(H in f))f[H]=L;for(let J of Array.from(L.children))M(J)};return M(E),f}class v extends HTMLElement{static elements=_;static _elementCreator;static initAttributes;static formAssociated;static preferredTagName;static shadowStyleSpec;static lightStyleSpec;static extends;internals;get validity(){return this.internals?.validity}get validationMessage(){return this.internals?.validationMessage??\"\"}get willValidate(){return this.internals?.willValidate??!1}checkValidity(){return this.internals?.checkValidity()??!0}reportValidity(){return this.internals?.reportValidity()??!0}setCustomValidity(E){if(this.internals)if(E)this.internals.setValidity({customError:!0},E);else this.internals.setValidity({})}setValidity(E,f,M){this.internals?.setValidity(E,f,M)}setFormValue(E,f){this.internals?.setFormValue(E,f)}static get observedAttributes(){let E=this.initAttributes;if(E)return[\"hidden\",...Object.keys(E).map(S)];return[\"hidden\"]}instanceId;styleNode;static styleSpec;static styleNode;content=_.slot();isSlotted;static _tagName=null;static get tagName(){return this._tagName}_legacyTrackedAttrs;_attrValues;_valueChanged=!1;_pendingAttrOps;static StyleNode(E){return console.warn(\"StyleNode is deprecated, use static shadowStyleSpec instead\"),_.style(Q0(E))}static elementCreator(E={}){let f=this;if(!Object.prototype.hasOwnProperty.call(f,\"_elementCreator\")){if(E.tag!==void 0)T(\"elementCreator-tag\",\"Passing tag to elementCreator() is deprecated. Use static preferredTagName instead.\");if(E.styleSpec!==void 0)T(\"elementCreator-styleSpec\",\"Passing styleSpec to elementCreator() is deprecated. Use static lightStyleSpec instead.\");if(E.extends!==void 0)T(\"elementCreator-extends\",\"Passing extends to elementCreator() is deprecated. Use static extends instead.\");let M=E.tag??f.preferredTagName;if(M==null)if(typeof f.name===\"string\"&&f.name!==\"\"){if(M=S(f.name),M.startsWith(\"-\"))M=M.slice(1)}else M=CE();if(customElements.get(M)!=null)console.warn(`${M} is already defined`);if(M.match(/\\w+(-\\w+)+/)==null)console.warn(`${M} is not a legal tag for a custom-element`),M=CE();while(customElements.get(M)!==void 0)M=CE();f._tagName=M;let L=E.styleSpec??f.lightStyleSpec;if(L!==void 0)mf(M,L);let H=E.extends??f.extends,J=H?{extends:H}:void 0,Z=this.prototype;if(Z!=null&&!Object.prototype.hasOwnProperty.call(Z,w8)){let Q=Z.connectedCallback;Z.connectedCallback=function(){if(this._drainPendingAttrOps(),Q)Q.call(this)},Object.defineProperty(Z,w8,{value:!0,enumerable:!1})}window.customElements.define(M,this,J),f._elementCreator=_[M]}return f._elementCreator}initAttributes(...E){if(T(\"initAttributes\",\"initAttributes() is deprecated. Use static initAttributes = { ... } instead.\"),!this._legacyTrackedAttrs)this._legacyTrackedAttrs=new Set;for(let H of E)this._legacyTrackedAttrs.add(H);bf().observe(this,{attributes:!0});let M={},L={};E.forEach((H)=>{M[H]=m(this[H]);let J=S(H);Object.defineProperty(this,H,{enumerable:!1,get(){if(typeof M[H]===\"boolean\")return this.hasAttribute(J);else if(this.hasAttribute(J))return typeof M[H]===\"number\"?parseFloat(this.getAttribute(J)):this.getAttribute(J);else if(L[H]!==void 0)return L[H];else return M[H]},set(Z){if(typeof M[H]===\"boolean\"){if(Z!==this[H]){if(Z)this.setAttribute(J,\"\");else this.removeAttribute(J);this.queueRender()}}else if(typeof M[H]===\"number\"){if(Z!==parseFloat(this[H]))this.setAttribute(J,Z),this.queueRender()}else if(typeof Z===\"object\"||`${Z}`!==`${this[H]}`){if(Z===null||Z===void 0||typeof Z===\"object\")this.removeAttribute(J);else this.setAttribute(J,Z);this.queueRender(),L[H]=Z}}})})}initValue(){let E=Object.getOwnPropertyDescriptor(this,\"value\");if(E===void 0||E.get!==void 0||E.set!==void 0)return;let f=this.hasAttribute(\"value\")?this.getAttribute(\"value\"):m(this.value);delete this.value,Object.defineProperty(this,\"value\",{enumerable:!1,get(){return f},set(M){if(f!==M)f=M,this._valueChanged=!0,this.queueRender(!0)}})}_parts;_partsCache=Object.create(null);get parts(){let E=this;if(this._parts==null)this._parts=new Proxy({},{get(f,M){if(typeof M!==\"string\")return;let L=E._partsCache,H=L[M]??null,J=H;if(J!=null&&!J.isConnected)J=null;if(J==null){let Z=E.shadowRoot!=null?E.shadowRoot:E;if(J=Z.querySelector(`[part=\"${M}\"]`),J==null){let Q=Z.querySelector(`[data-ref=\"${M}\"]`);if(Q!=null)T(\"data-ref\",'data-ref is deprecated and will be removed in tosijs 1.8.0 — use part=\"…\" instead.'),Q.removeAttribute(\"data-ref\"),J=Q}if(J==null)J=Z.querySelector(M);if(J==null&&H!=null)return H;if(J==null)throw Error(`elementRef \"${M}\" does not exist!`);L[M]=J}return J}});return this._parts}attributeChangedCallback(E,f,M){let L=LE(E);if(M===null&&this._attrValues?.has(L))this._attrValues.delete(L);if(!this._legacyTrackedAttrs?.has(L))this.queueRender(!1)}constructor(){super();if(I8+=1,this._installAttributeQueue(),this.constructor.formAssociated&&typeof this.attachInternals===\"function\"&&!this.internals)this.internals=this.attachInternals();let E=this.constructor.initAttributes;if(E)this._setupAttributeAccessors(E);this.instanceId=`${this.tagName.toLocaleLowerCase()}-${I8}`,this._value=m(this.defaultValue),this._warnOnHandlerCollisions()}_warnOnHandlerCollisions(){let E=this.constructor;if(S8.has(E))return;S8.add(E),queueMicrotask(()=>{let f=new Set;for(let Z of Object.keys(this))if(/^on[A-Z]/.test(Z))f.add(Z);let M=Object.getPrototypeOf(this);while(M&&M!==v.prototype){for(let Z of Object.getOwnPropertyNames(M))if(/^on[A-Z]/.test(Z))f.add(Z);M=Object.getPrototypeOf(M)}let L=this.tagName.toLowerCase();if(f.delete(\"onResize\")&&this.handleResize===void 0)console.warn(`<${L}> defines 'onResize', which is deprecated. Rename it to 'handleResize'. The on<Event> prefix is reserved for event-handler sugar in the elements factory (creator({ onResize }) would attach a 'resize' listener) and is being retired for component callbacks in favor of the handle<Event> convention.`);if(f.size===0)return;let J=Array.from(f,(Z)=>`'${Z}'`).join(\", \");console.warn(`<${L}> defines ${J}. The elements factory treats on<Event> property `+\"names as event-handler sugar — e.g. creator({ onClick }) attaches a \"+\"'click' listener rather than assigning the property — so these members \"+\"are shadowed and cannot be set or read via the element creator. Rename by intent: use 'handle<Event>' for a handler function the component invokes (e.g. 'handleClick'), or 'add<Event>Listener' for a method that registers listeners for a synthetic event the component dispatches (e.g. 'addClickListener').\")})}_installAttributeQueue(){let E=this.constructor.initAttributes;if(!E)return;let f=new Set(Object.keys(E).map(S)),M=[];this._pendingAttrOps=M;let L=HTMLElement.prototype;this.setAttribute=(H,J)=>{if(f.has(H))M.push([\"set\",H,String(J)]);else L.setAttribute.call(this,H,J)},this.removeAttribute=(H)=>{if(f.has(H))M.push([\"remove\",H]);else L.removeAttribute.call(this,H)},queueMicrotask(()=>this._drainPendingAttrOps())}_drainPendingAttrOps(){let E=this._pendingAttrOps;if(E===void 0)return;this._pendingAttrOps=void 0,delete this.setAttribute,delete this.removeAttribute;let f=new Set;for(let M of E)if(this.hasAttribute(M[1]))f.add(M[1]);for(let M of E)if(M[0]===\"set\"){if(!f.has(M[1]))this.setAttribute(M[1],M[2])}else f.delete(M[1]),this.removeAttribute(M[1])}_installedAttrAccessors;_setupAttributeAccessors(E){if(!this._attrValues)this._attrValues=new Map;if(!this._installedAttrAccessors)this._installedAttrAccessors=new Set;for(let f of Object.keys(E)){let M=S(f),L=E[f];if(f===\"value\"){console.warn(`${this.tagName}: 'value' cannot be an attribute. Use the Component value property instead.`);continue}if(typeof L===\"object\"&&L!==null){console.warn(`${this.tagName}: initAttributes.${f} is an object. Use a regular property instead.`);continue}if(L===!0)throw Error(`${this.tagName}: static initAttributes.${f} defaults a boolean attribute to true, but HTML boolean attributes are false-by-default (presence = true, absence = false) and `+`cannot reflect a true default — it would silently become false. Use { ${f}: false }, or model it as a string/number attribute or a plain (non-attribute) property.`);let H=this,J=!1;while(H){let Z=Object.getOwnPropertyDescriptor(H,f);if(Z){if(!Z.configurable||Z.get||Z.set){J=!0;break}break}H=Object.getPrototypeOf(H)}if(J)continue;this._installAttrAccessor(f,M,L)}}_installAttrAccessor(E,f,M){Object.defineProperty(this,E,{enumerable:!1,configurable:!0,get:()=>{if(typeof M===\"boolean\"){if(this.hasAttribute(f))return!0;if(this._attrValues.has(E))return this._attrValues.get(E);return!1}else if(this.hasAttribute(f))return typeof M===\"number\"?parseFloat(this.getAttribute(f)):this.getAttribute(f);else if(this._attrValues.has(E))return this._attrValues.get(E);else return M},set:(L)=>{if(typeof M===\"boolean\"){if(L!==this[E]){if(L)this.setAttribute(f,\"\");else this.removeAttribute(f);this.queueRender(),this._attrValues.set(E,!!L)}}else if(typeof M===\"number\"){if(L!==parseFloat(this[E]))this.setAttribute(f,L),this.queueRender(),this._attrValues.set(E,L)}else if(typeof L===\"object\"||`${L}`!==`${this[E]}`){if(L===null||L===void 0||typeof L===\"object\")this.removeAttribute(f);else this.setAttribute(f,L);this.queueRender(),this._attrValues.set(E,L)}}}),this._installedAttrAccessors.add(E)}_recoverShadowedAttrAccessors(){let E=this._installedAttrAccessors,f=this.constructor.initAttributes;if(E==null||f==null)return;let M=[];for(let L of E){let H=Object.getOwnPropertyDescriptor(this,L);if(H==null||H.get!=null||H.set!=null)continue;let J=H.value;delete this[L],this._installAttrAccessor(L,S(L),f[L]),this[L]=J,M.push(L)}if(M.length>0&&!_8.has(this.tagName)){_8.add(this.tagName);let L=M.map((H)=>`'${H}'`).join(\", \");console.warn(`<${this.tagName.toLowerCase()}> declares instance field(s) ${L} that shadow static initAttributes accessors (class fields use [[Define]] semantics). The field value was adopted and the `+\"reactive accessor restored — delete the field declaration; \"+\"static initAttributes already defines the property.\")}}connectedCallback(){if(this._recoverShadowedAttrAccessors(),this._drainPendingAttrOps(),gf(this.constructor.tagName),this.hydrate(),this.role!=null)this.setAttribute(\"role\",this.role);if(this.constructor.formAssociated&&!this.hasAttribute(\"tabindex\"))this.setAttribute(\"tabindex\",\"0\");let E=this.handleResize??this.onResize;if(E!==void 0){if(D0.observe(this),this._onResize==null)this._onResize=E.bind(this);this.addEventListener(\"resize\",this._onResize)}if(this.value!=null&&this.getAttribute(\"value\")!=null)this._value=this.getAttribute(\"value\");if(this.internals&&this.value!==void 0)this.internals.setFormValue(this.value),this.validateValue();this.queueRender()}disconnectedCallback(){D0.unobserve(this)}formResetCallback(){if(this.value!==void 0)this.value=this.defaultValue??\"\"}formDisabledCallback(E){if(E)this.setAttribute(\"disabled\",\"\");else this.removeAttribute(\"disabled\")}formStateRestoreCallback(E){if(this.value!==void 0&&typeof E===\"string\")this.value=E}_changeQueued=!1;_renderQueued=!1;queueRender(E=!1){if(!this._hydrated)return;if(!this._changeQueued)this._changeQueued=E;if(!this._renderQueued)this._renderQueued=!0,requestAnimationFrame(()=>{if(this._changeQueued){if(fE(this,\"change\",{bubbles:!0,composed:!0}),this.internals&&this.value!==void 0)this.internals.setFormValue(this.value)}this._changeQueued=!1,this._renderQueued=!1,this.render()})}_hydrated=!1;_whenHydrated;_resolveHydrated;get hydrated(){return this._hydrated}get whenHydrated(){if(this._hydrated)return Promise.resolve();if(this._whenHydrated==null)this._whenHydrated=new Promise((E)=>{this._resolveHydrated=E});return this._whenHydrated}hydrate(){if(!this._hydrated){this.initValue();let E=typeof this.content!==\"function\",f=typeof this.content===\"function\"?this.content(_):this.content;if(Array.isArray(f)){let J={};f=f.filter((Z)=>{if(Z instanceof Node||typeof Z===\"string\"||typeof Z===\"number\"||A(Z))return!0;return Object.assign(J,Z),!1});for(let Z of Object.keys(J))x0(this,Z,J[Z])}let M=this.constructor,L=M.shadowStyleSpec??M.styleSpec;if(M.styleSpec&&!M.shadowStyleSpec)T(\"static-styleSpec\",\"static styleSpec is deprecated. Use static shadowStyleSpec instead.\");let{styleNode:H}=M;if(L)H=M.styleNode=_.style(Q0(L)),delete M.styleNode;if(this.styleNode)console.warn(this,\"styleNode is deprecated, use static shadowStyleSpec instead\"),H=this.styleNode;if(H){let J=this.attachShadow({mode:\"open\"});if(J.appendChild(H.cloneNode(!0)),ME(J,f,E),!V8.has(this.tagName)&&J.querySelector(G0)!=null)V8.add(this.tagName),console.warn(`<${this.tagName.toLowerCase()}> has data-binding sugar in its shadow-DOM content, where bindings do not operate. A shadow-DOM component is bound like an <input>: bind its VALUE from outside (bindings.value) and implement render() to reflect value into `+\"the shadow DOM — setting value queues render() and emits change \"+\"automatically. on() event handlers are fine. Warned once per component class.\")}else if(f!==null){let J=Array.from(this.childNodes);if(!E)this._partsCache=vf(f);ME(this,f,E),this.isSlotted=this.querySelector(\"slot,tosi-slot,xin-slot\")!==null;let Z=Array.from(this.querySelectorAll(\"slot\"));if(Z.length>0)Z.forEach(y0.replaceSlot);if(J.length>0){let Q={\"\":this};Array.from(this.querySelectorAll(\"tosi-slot,xin-slot\")).forEach(($)=>{Q[$.name]=$}),J.forEach(($)=>{let Y=Q[\"\"],z=$ instanceof Element?Q[$.slot]:Y;(z!==void 0?z:Y).append($)})}}this._hydrated=!0,this._parts=void 0,this._resolveHydrated?.()}}render(){if(this._valueChanged&&this.internals&&this.value!==void 0)this.internals.setFormValue(this.value),this.validateValue();this._valueChanged=!1}validateValue(){if(!this.internals||this.value===void 0)return;let E=typeof this.value===\"string\"?this.value:String(this.value);OE(this,E)}}class y0 extends v{static preferredTagName=\"tosi-slot\";static initAttributes={name:\"\"};content=null;static replaceSlot(E){let f=document.createElement(\"tosi-slot\");if(E.name!==\"\")f.setAttribute(\"name\",E.name);while(E.firstChild!=null)f.appendChild(E.firstChild);E.replaceWith(f)}}var cf=y0.elementCreator();class N8 extends v{static preferredTagName=\"xin-slot\";static initAttributes={name:\"\"};content=null;constructor(){super();T(\"xin-slot\",\"<xin-slot> is deprecated. Use <tosi-slot> instead.\")}static replaceSlot=y0.replaceSlot}var hf=N8.elementCreator();var df=(E=()=>!0)=>{let f=localStorage.getItem(\"xin-state\");if(f!=null){let H=JSON.parse(f);for(let J of Object.keys(H).filter(E))w[J]=H[J]}let M=O0(()=>{let H={},J=j(w);for(let Z of Object.keys(J).filter(E))H[Z]=J[Z];localStorage.setItem(\"xin-state\",JSON.stringify(H)),console.log(\"xin state saved to localStorage\")},500);j0((H)=>{let J=H.split(/[.[]/)[0];return E(J)},M)};var uf=\"tosijs-share\",pf=\"tosijs-share\",T0=\"shared\",sf=1,AE=new Set,RE=new Set,TE=new Set,BE=new Set,kE=new Map,Y0=null,IE=\"\",b0=null,nf=null;function x8(){if(b0!=null)return Promise.resolve(b0);return new Promise((E,f)=>{let M=indexedDB.open(pf,sf);M.onupgradeneeded=()=>{M.result.createObjectStore(T0)},M.onsuccess=()=>{b0=M.result,E(b0)},M.onerror=()=>f(M.error)})}var rf={async get(E){let f=await x8();return new Promise((M,L)=>{let J=f.transaction(T0,\"readonly\").objectStore(T0).get(E);J.onsuccess=()=>M(J.result),J.onerror=()=>L(J.error)})},async set(E,f){let M=await x8();return new Promise((L,H)=>{let J=M.transaction(T0,\"readwrite\");J.objectStore(T0).put(f,E),J.oncomplete=()=>L(),J.onerror=()=>H(J.error)})}};function P8(){return nf??rf}function lf(E){return E!=null&&E.type===\"tosijs-share\"&&typeof E.path===\"string\"}function VE(E){for(let f of AE)if(E===f||E.startsWith(f+\".\"))return f;return}function of(E){for(let f of RE)if(E===f||E.startsWith(f+\".\"))return!0;return!1}function y8(E,f){let M=VE(E);if(M!==void 0&&TE.has(M))BE.add(M);RE.add(E),J0(B,E,f),y(E),U0().then(()=>{RE.delete(E)})}function af(){if(Y0!=null)return Y0;return IE=crypto.randomUUID(),Y0=new BroadcastChannel(uf),Y0.onmessage=(E)=>{let f=E.data;if(!lf(f))return;if(f.origin===IE)return;if(VE(f.path)===void 0)return;y8(f.path,f.value)},Y0}function tf(E,f){if(Y0==null)return;let M={type:\"tosijs-share\",path:E,value:f,origin:IE};Y0.postMessage(M)}function ef(E){if(!kE.has(E))kE.set(E,O0(()=>{let f=R(B,E);P8().set(E,f)},500));kE.get(E)()}async function EM(...E){if(typeof BroadcastChannel>\"u\")return{restored:[]};af();let f=[],M=P8();for(let L of E){let H=typeof L===\"string\"?L:A(L);if(H===void 0)throw Error(\"share() requires boxed proxies or string paths. Got a non-proxy value.\");if(AE.has(H))continue;AE.add(H),TE.add(H);let J=await M.get(H),Z=BE.has(H);if(TE.delete(H),BE.delete(H),J!==void 0&&!Z)y8(H,J),f.push(L);else if(J===void 0){let Q=R(B,H);await M.set(H,Q)}n((Q)=>Q===H||Q.startsWith(H+\".\"),(Q)=>{if(of(Q))return;let $=VE(Q);if($===void 0)return;let Y=R(B,Q);tf(Q,Y),ef($)})}return{restored:f}}var _E=new Set;function b8(E,f){for(let M of E)if(f===M||f.startsWith(M+\".\"))return M;return}function fM(E){for(let f of _E)if(E===f||E.startsWith(f+\".\"))return!0;return!1}function MM(E,f){_E.add(E),J0(B,E,f),y(E),U0().then(()=>{_E.delete(E)})}async function LM(E,f,...M){let L=new Set,H=[],J=[],Z=f.throttleInterval??100;await E.connect();let Q=F0(()=>{if(H.length===0)return;let $=H.splice(0);try{E.send($)}catch(Y){H.unshift(...$),console.error(\"sync: transport.send failed; deltas requeued and will retry on the next flush\",Y)}},Z);E.onReceive(($)=>{for(let Y of $){if(b8(L,Y.path)===void 0)continue;MM(Y.path,Y.value)}});for(let $ of M){let Y=typeof $===\"string\"?$:A($);if(Y===void 0)throw Error(\"sync() requires boxed proxies or string paths. Got a non-proxy value.\");L.add(Y);let z=n((G)=>G===Y||G.startsWith(Y+\".\"),(G)=>{if(fM(G))return;if(b8(L,G)===void 0)return;let X=R(B,G);H.push({path:G,value:X}),Q()});J.push(z)}return{disconnect(){for(let $ of J)Z0($);J.length=0,L.clear(),H.length=0,E.disconnect()}}}var wE=\"1.7.8\";function m0(E){return Object.assign(N,E),N}function g0(E){return T(\"boxedProxy\",\"boxedProxy is deprecated, please use tosi() instead\"),m0(E)}var HM=new FinalizationRegistry((E)=>{E()});function JM(E,f){let M=r0();N[M]=E;let L=N[M],H=()=>{delete w[M]};if(f)HM.register(f,H);return[L,H]}function SE(E,f=!1){if(f)return T(\"xinProxy-boxed\",\"xinProxy(..., true) is deprecated; use tosi(...) instead\"),g0(E);return Object.keys(E).forEach((M)=>{w[M]=E[M]}),w}var ZM={};async function v0(E,f){let M=await f(E,{Color:W,Component:v,elements:_,svgElements:GE,mathML:zE,varDefault:S0,vars:ZE,xin:w,boxed:N,xinProxy:SE,boxedProxy:g0,tosi:m0,makeComponent:v0,bind:d,on:q0,version:wE}),{type:L}=M;L.preferredTagName=E;let H=M.lightStyleSpec??M.styleSpec;if(H)L.lightStyleSpec=H;let J={type:L,creator:L.elementCreator()};return ZM[E]=J,J}var h0={\":host\":{display:\"none\"}},c0={},$M=(E)=>import(E);async function m8(E,f,M){let L=Array.from(E.querySelectorAll(f)).filter((J)=>J.src),H=await Promise.allSettled(L.map((J)=>J.packaged()));for(let J=0;J<H.length;J++){let Z=H[J];if(Z.status===\"rejected\")console.error(`<${M}> failed to load blueprint from \"${L[J].src}\":`,Z.reason)}}class d0 extends v{static preferredTagName=\"tosi-blueprint\";static lightStyleSpec=h0;static initAttributes={tag:\"anon-elt\",src:\"\",property:\"default\"};loaded;blueprintLoaded=(E)=>{};async packaged(){let{tag:E,src:f,property:M}=this,L=`${E}.${M}:${f}`;if(!this.loaded){if(c0[L]===void 0)c0[L]=$M(f).then((H)=>{let J=H[M];return v0(E,J)});else console.log(`using cached ${E} with signature ${L}`);try{this.loaded=await c0[L]}catch(H){throw delete c0[L],H}this.blueprintLoaded(this.loaded)}return this.loaded}}var QM=d0.elementCreator();class NE extends v{static preferredTagName=\"tosi-loader\";static lightStyleSpec=h0;allLoaded=()=>{};async load(){await m8(this,\"tosi-blueprint, xin-blueprint\",\"tosi-loader\"),this.allLoaded()}connectedCallback(){super.connectedCallback(),this.load()}}var YM=NE.elementCreator();class g8 extends d0{static preferredTagName=\"xin-blueprint\";static lightStyleSpec=h0;constructor(){super();T(\"xin-blueprint\",\"<xin-blueprint> is deprecated. Use <tosi-blueprint> instead.\")}}var GM=g8.elementCreator();class v8 extends v{static preferredTagName=\"xin-loader\";static lightStyleSpec=h0;allLoaded=()=>{};constructor(){super();T(\"xin-loader\",\"<xin-loader> is deprecated. Use <tosi-loader> instead.\")}async load(){await m8(this,\"xin-blueprint\",\"xin-loader\"),this.allLoaded()}connectedCallback(){super.connectedCallback(),this.load()}}var zM=v8.elementCreator();export{i8 as xinValue,hf as xinSlot,SE as xinProxy,u8 as xinPath,w as xin,T as warnDeprecated,wE as version,ZE as vars,S0 as varDefault,OE as validateAgainstConstraints,U0 as updates,Z0 as unobserve,DE as touchElement,y as touch,j as tosiValue,JM as tosiUnique,cf as tosiSlot,d8 as tosiSetValue,A as tosiPath,YM as tosiLoader,QM as tosiBlueprint,h8 as tosiAccessor,m0 as tosi,F0 as throttle,LM as sync,GE as svgElements,EM as share,L0 as settings,wf as scrollListItemIntoView,qf as onThemePreferencesChange,Qf as onStylesheetChange,q0 as on,j0 as observe,zE as mathML,v0 as makeComponent,Ff as invertLuminance,Uf as initVars,df as hotReload,H8 as getThemePreferences,qE as getListItem,FE as getListInstance,C0 as getListBinding,HE as getCssVar,_ as elements,i0 as deprecated,Vf as deleteListItem,O0 as debounce,Q0 as css,g0 as boxedProxy,N as boxed,zM as blueprintLoader,GM as blueprint,V0 as bindings,Df as bindParts,d as bind,B0 as TOSI_ACCESSOR,f0 as TAKE_DESCRIPTOR,Gf as StyleSheet,Jf as MoreMath,v as Component,W as Color,NE as BlueprintLoader,d0 as Blueprint,G0 as BOUND_SELECTOR,u as BOUND_CLASS};\n\n//# debugId=2C07243A7602455564756E2164756E21\n//# sourceMappingURL=module.js.map\n",
|
|
6
6
|
"/*#\n# ab-test\n\n`<tosi-ab>` provides a simple method for implementing A|B-testing.\n\n```js\nimport { AbTest } from 'tosijs-ui'\n\nfunction randomize() {\n const conditions = {\n testA: Math.random() < 0.5,\n testB: Math.random() < 0.5,\n testC: Math.random() < 0.5\n }\n\n AbTest.conditions = conditions\n\n preview.querySelector('pre').innerText = JSON.stringify(conditions, null, 2)\n}\n\npreview.querySelector('.randomize-conditions').addEventListener('click', randomize)\n\nrandomize()\n```\n```html\n<div style=\"display: flex; gap: 10px; align-items: center;\">\n <div style=\"display: flex; flex-direction: column; gap: 10px;\">\n <tosi-ab class=\"a\" condition=\"testA\">\n <p>testA</p>\n </tosi-ab>\n <tosi-ab class=\"not-a\" not condition=\"testA\">\n <p>not testA</p>\n </tosi-ab>\n <tosi-ab class=\"b\" condition=\"testB\">\n <p>testB</p>\n </tosi-ab>\n <tosi-ab class=\"not-b\" not condition=\"testB\">\n <p>not testB</p>\n </tosi-ab>\n <tosi-ab class=\"c\" condition=\"testC\">\n <p>testC</p>\n </tosi-ab>\n <tosi-ab class=\"not-c\" not condition=\"testC\">\n <p>not testC</p>\n </tosi-ab>\n </div>\n <pre>\n </pre>\n</div>\n<button class=\"randomize-conditions\">Randomize</button>\n```\n```css\n.preview {\n display: flex;\n flex-direction: column;\n gap: 4px;\n align-items: flex-start;\n}\n.preview p {\n background: #44c;\n color: white;\n display: block;\n border-radius: 99px;\n padding: 4px 10px;\n margin: 0;\n}\n\n.preview tosi-ab[not] p {\n background: red;\n}\n```\n\n- Set `AbTest.conditions` to anything you like.\n- Use `<tosi-ab>` elements to display conditional content.\n- `condition` attribute determines which value in `AbTest.conditions` controls the element\n- `not` reverses the condition (so `<tosi-ab not condition=\"foo\">` will be visible if `conditions.foo` is `false`)\n*/\n\n/*{ \"parent\": \"Helper Libraries\" }*/\n\nimport { Component } from 'tosijs'\n\nconst abTestConditions = {} as { [key: string]: any }\n\nexport class AbTest extends Component {\n static preferredTagName = 'tosi-ab'\n\n static set conditions(context: { [key: string]: any }) {\n Object.assign(abTestConditions, context)\n\n for (const abTest of [...AbTest.instances]) {\n abTest.queueRender()\n }\n }\n\n static initAttributes = {\n condition: '',\n not: false,\n }\n\n static instances: Set<AbTest> = new Set()\n\n connectedCallback() {\n super.connectedCallback()\n AbTest.instances.add(this)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n AbTest.instances.delete(this)\n }\n\n render(): void {\n if (\n this.condition !== '' &&\n (this.not\n ? abTestConditions[this.condition] !== true\n : abTestConditions[this.condition] === true)\n ) {\n this.toggleAttribute('hidden', false)\n } else {\n this.toggleAttribute('hidden', true)\n }\n }\n}\n\nexport const abTest = AbTest.elementCreator()\n",
|
|
7
7
|
"/*#\n# scriptTag & styleSheet\n\n## scriptTag\n\nIf you need to load an old school (cjs) javascript or css library via cdn then use these two functions.\n\n`tosijs-ui` uses this library to implement the `<tosi-code>`, `<tosi-lottie>`, and `<tosi-map>`\nelements.\n\n`scriptTag()` and `styleSheet()` return promises that resolve `globalThis` when the module in question\nhas loaded and otherwise behave as much like `import()` as possible.\n\nThis example uses `scriptTag` and `styleSheet` to load [quilljs](https://quilljs.com) on-the-fly.\n\n```js\nimport { elements } from 'tosijs'\nimport { scriptTag, styleSheet } from 'tosijs-ui'\n\nconst toolbarOptions = [\n [{ header: [1, 2, 3, 4, false] }],\n ['blockquote', 'code-block'],\n [{ 'align': [] }],\n ['bold', 'italic', 'strike'],\n ['link', 'image', 'video'],\n [{ 'list': 'ordered'}, { 'list': 'bullet' }, { 'list': 'check' }],\n [{ 'indent': '-1'}, { 'indent': '+1' }],\n ['clean']\n]\n\n;(async () => {\n await Promise.all([\n styleSheet('https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.core.css'),\n styleSheet('https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css'),\n ])\n\n const container = elements.div()\n const { Quill } = await scriptTag('https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js')\n preview.append(container)\n\n const quill = new Quill(container, {\n debug: 'info',\n modules: {\n toolbar: toolbarOptions,\n },\n theme: 'snow',\n })\n})()\n```\n\nNote that `scriptTag` will resolve `globalThis` so it behaves as much like async `import()`\nas possible.\n\nAs an aside:\n\n`<tosi-lottie>` is implemented in such a way that if you've preloaded the module\n(e.g. via a script tag or packaging) it won't load it again, which affords offline\nuse.\n\nThere's no point for `<tosi-map>` since it won't work without connectivity anyway.\n\n## styleSheet\n\nstyleSheet creates a `<link>` tag for a specified css file.\n\nUsing `styleSheet`:\n\n styleSheet('../path/to/style.css')\n\nThis is awaitable, if you care. The stylesheet `<link>` will only be inserted _once_.\n*/\n\n/*{ \"parent\": \"Helper Libraries\" }*/\n\nimport { elements } from 'tosijs'\n\ninterface PromiseMap {\n [key: string]: Promise<any>\n}\n\nconst loadedScripts: PromiseMap = {}\nexport function scriptTag(\n src: string,\n existingSymbolName?: string\n): Promise<any> {\n if (loadedScripts[src] === undefined) {\n if (existingSymbolName !== undefined) {\n const existing = (globalThis as Record<string, unknown>)[\n existingSymbolName\n ]\n loadedScripts[src] = Promise.resolve({ [existingSymbolName]: existing })\n }\n\n const scriptElt = elements.script({ src })\n\n document.head.append(scriptElt)\n\n loadedScripts[src] = new Promise((resolve) => {\n scriptElt.onload = () => resolve(globalThis)\n })\n }\n\n return loadedScripts[src]\n}\n\nconst loadedStyleSheets: PromiseMap = {}\nexport function styleSheet(href: string): Promise<void> {\n if (loadedStyleSheets[href] === undefined) {\n const linkElement = elements.link({\n rel: 'stylesheet',\n type: 'text/css',\n href,\n })\n\n document.head.append(linkElement)\n\n loadedStyleSheets[href] = new Promise((resolve) => {\n linkElement.onload = resolve\n })\n }\n return loadedStyleSheets[href]\n}\n",
|
|
8
8
|
"export interface IconData { [key: string]: string }\n\nexport default {\n blueprint: \"<svg class=\\\"color\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M10.5,14.5 C10.5,14.5,7.5,15.5,7.5,17.5 C7.5,19.5,10.5,19.5,10.5,19.5\\\"/><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M18.5,14.5 C18.5,14.5,21.5,15.5,21.5,17.5 C21.5,19.5,18.5,19.5,18.5,19.5\\\"/><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M7,5.09 C7,3.94,7.9,3,9,3 C9,3,20,3,20,3 C21.1,3,22,3.94,22,5.09 C22,5.09,22,12.41,22,12.41 C22,13.56,21.1,14.5,20,14.5 C20,14.5,9,14.5,9,14.5 C7.9,14.5,7,13.56,7,12.41 C7,12.41,7,5.09,7,5.09 z\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M14.5,5.5 C14.5,5.5,14.5,11.5,14.5,11.5\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M16.5,7.5 C16.5,7.5,16.5,8.5,16.5,8.5\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M12.5,7.5 C12.5,7.5,12.5,8.5,12.5,8.5\\\"/><g/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M18.5,21.5 C18.5,21.5,17.5,20.5,17.5,20.5 C17.5,20.5,16.5,21.5,16.5,21.5\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M12.5,21.5 C12.5,21.5,11.5,20.5,11.5,20.5 C11.5,20.5,10.5,21.5,10.5,21.5\\\"/><path style=\\\"fill:#e4e4e4;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M10.5,14.5 C10.5,14.5,18.5,14.5,18.5,14.5 C18.5,14.5,18.5,19.5,18.5,19.5 C18.5,19.5,10.5,19.5,10.5,19.5 C10.5,19.5,10.5,14.5,10.5,14.5 z\\\"/><g><g><path style=\\\"fill:#5e78ca;fill-rule:nonzero;stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M14,16.5 C14,16.5,16,16.5,16,16.5 C16,16.5,14.53,19.5,14.53,19.5\\\"/><path style=\\\"fill:#5e78ca;fill-rule:evenodd;stroke:none;\\\" d=\\\"M3.59,8.5 C3.59,8.5,12.59,8.5,12.59,8.5 C12.59,8.5,14.53,19.5,14.53,19.5 C14.53,19.5,5.53,19.5,5.53,19.5 C5.53,19.5,3.59,8.5,3.59,8.5 z\\\"/><path style=\\\"fill:#5e78ca;fill-rule:nonzero;stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M12.59,8.5 C12.59,8.5,11.12,11.5,11.12,11.5 C11.12,11.5,2.12,11.5,2.12,11.5 C2.12,11.5,3.59,8.5,3.59,8.5\\\"/><path style=\\\"fill:#5e78ca;fill-rule:nonzero;stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M12.59,8.5 C12.59,8.5,14.53,19.5,14.53,19.5\\\"/><path style=\\\"fill:#5e78ca;fill-rule:nonzero;stroke:#f2f2f2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M4.12,11.5 C4.12,11.5,5.53,19.5,5.53,19.5\\\"/></g><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M9.24,12.5 C10.75,12.5,12.2,13.73,12.46,15.24 C12.46,15.24,12.46,15.24,12.46,15.24 C12.68,16.49,11.85,17.5,10.6,17.5 C10.6,17.5,10.55,17.5,10.55,17.5 C10.17,17.5,9.92,17.81,9.98,18.19 C9.98,18.19,9.98,18.19,9.98,18.19 C10.21,19.47,9.36,20.5,8.08,20.5 C8.08,20.5,6.39,20.5,6.39,20.5 C5.1,20.5,3.87,19.45,3.64,18.16 C3.64,18.16,3.12,15.21,3.12,15.21 C2.86,13.71,3.86,12.5,5.35,12.5 C5.35,12.5,9.24,12.5,9.24,12.5 z\\\"/></g></g></svg> \",\n earth: \"<svg class=\\\"color\\\" viewBox=\\\"0 0 48 48\\\"><g><g><g><path style=\\\"fill:#a3d9ff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M7,13.46 C5.1,16.52,4,20.13,4,24 C4,31.81,8.47,38.57,15,41.87 C15,41.87,15,31,15,31 C15,31,9,29,9,29 C9,29,9,19,9,19 C9,19,7,15,7,15 C7,15,7,13.46,7,13.46 z\\\"/><path style=\\\"fill:#a3d9ff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M18.4,4.79 C20.18,4.28,22.06,4,24,4 C27.57,4,30.92,4.93,33.82,6.57 C33.82,6.57,29,13,29,13 C29,13,31,19,31,19 C31,19,37,21,37,21 C37,21,39,29,39,29 C39,29,37.35,38.89,37.35,38.89 C33.81,42.07,29.13,44,24,44 C21.03,44,18.22,43.35,15.69,42.2 C15.69,42.2,27,29,27,29 C27,29,27,25,27,25 C27,25,21,23,21,23 C21,23,15,19,15,19 C15,19,11,19,11,19 C11,19,11,13,11,13 C11,13,13,11,13,11 C13,11,15,15,15,15 C15,15,17,15,17,15 C17,15,17,9,17,9 C17,9,18.4,4.79,18.4,4.79 z\\\"/><path style=\\\"fill:#274e42;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M18.4,4.79 C18.4,4.79,17,9,17,9 C17,9,17,15,17,15 C17,15,15,15,15,15 C15,15,13,11,13,11 C13,11,11,13,11,13 C11,13,11,19,11,19 C11,19,15,19,15,19 C15,19,21,23,21,23 C21,23,27,25,27,25 C27,25,27,29,27,29 C27,29,15.69,42.2,15.69,42.2 C15.46,42.09,15.23,41.98,15,41.87 C15,41.87,15,31,15,31 C15,31,9,29,9,29 C9,29,9,19,9,19 C9,19,7,15,7,15 C7,15,7,13.46,7,13.46 C9.57,9.32,13.62,6.19,18.4,4.79 z\\\"/><path style=\\\"fill:#274e42;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M33.82,6.57 C33.82,6.57,29,13,29,13 C29,13,31,19,31,19 C31,19,37,21,37,21 C37,21,39,29,39,29 C39,29,37.35,38.89,37.35,38.89 C41.43,35.23,44,29.91,44,24 C44,16.52,39.9,10,33.82,6.57 z\\\"/></g></g></g></svg> \",\n cmy: \"<svg class=\\\"color filled\\\" viewBox=\\\"0 0 24 24\\\"><g><g><path style=\\\"fill:#00ff00;fill-rule:evenodd;\\\" d=\\\"M12,10.88 C10.9,10.01,9.51,9.5,8,9.5 C7.22,9.5,6.47,9.64,5.78,9.89 C6.37,11.85,7.87,13.42,9.78,14.11 C10.17,12.81,10.96,11.69,12,10.88 z\\\"/><path style=\\\"fill:#0000ff;fill-rule:evenodd;\\\" d=\\\"M12,10.88 C13.1,10.01,14.49,9.5,16,9.5 C16.78,9.5,17.53,9.64,18.22,9.89 C17.63,11.85,16.13,13.42,14.22,14.11 C13.83,12.81,13.04,11.69,12,10.88 C12,10.88,12,10.88,12,10.88 z\\\"/><path style=\\\"fill:#000000;fill-rule:evenodd;\\\" d=\\\"M9.78,14.11 C10.17,12.81,10.96,11.69,12,10.88 C13.04,11.69,13.83,12.81,14.22,14.11 C13.53,14.36,12.78,14.5,12,14.5 C11.22,14.5,10.47,14.36,9.78,14.11 C9.78,14.11,9.78,14.11,9.78,14.11 z\\\"/><path style=\\\"fill:#ff0000;fill-rule:evenodd;\\\" d=\\\"M9.78,14.11 C9.6,14.71,9.5,15.34,9.5,16 C9.5,18.08,10.48,19.93,12,21.12 C13.52,19.93,14.5,18.08,14.5,16 C14.5,15.34,14.4,14.71,14.22,14.11 C13.53,14.36,12.78,14.5,12,14.5 C11.22,14.5,10.47,14.36,9.78,14.11 C9.78,14.11,9.78,14.11,9.78,14.11 z\\\"/><path style=\\\"fill:#02fefe;fill-rule:evenodd;\\\" d=\\\"M5.78,9.89 C5.6,9.29,5.5,8.66,5.5,8 C5.5,4.41,8.41,1.5,12,1.5 C15.59,1.5,18.5,4.41,18.5,8 C18.5,8.66,18.4,9.29,18.22,9.89 C17.53,9.64,16.78,9.5,16,9.5 C14.49,9.5,13.1,10.01,12,10.88 C10.9,10.01,9.51,9.5,8,9.5 C7.22,9.5,6.47,9.64,5.78,9.89 C5.78,9.89,5.78,9.89,5.78,9.89 z\\\"/><path style=\\\"fill:#fffe00;fill-rule:evenodd;\\\" d=\\\"M5.78,9.89 C3.28,10.8,1.5,13.19,1.5,16 C1.5,19.59,4.41,22.5,8,22.5 C9.51,22.5,10.9,21.99,12,21.12 C10.48,19.93,9.5,18.08,9.5,16 C9.5,15.34,9.6,14.71,9.78,14.11 C7.87,13.42,6.37,11.85,5.78,9.89 C5.78,9.89,5.78,9.89,5.78,9.89 z\\\"/><path style=\\\"fill:#ff00ff;fill-rule:evenodd;\\\" d=\\\"M18.22,9.89 C20.72,10.8,22.5,13.19,22.5,16 C22.5,19.59,19.59,22.5,16,22.5 C14.49,22.5,13.1,21.99,12,21.12 C13.52,19.93,14.5,18.08,14.5,16 C14.5,15.34,14.4,14.71,14.22,14.11 C16.13,13.42,17.63,11.85,18.22,9.89 z\\\"/></g></g></svg> \",\n rgb: \"<svg class=\\\"color filled\\\" viewBox=\\\"0 0 24 24\\\"><g><g><path style=\\\"fill:#ff00ff;fill-rule:evenodd;\\\" d=\\\"M12,10.88 C10.9,10.01,9.51,9.5,8,9.5 C7.22,9.5,6.47,9.64,5.78,9.89 C6.37,11.85,7.87,13.42,9.78,14.11 C10.17,12.81,10.96,11.69,12,10.88 z\\\"/><path style=\\\"fill:#ffff00;fill-rule:evenodd;\\\" d=\\\"M12,10.88 C13.1,10.01,14.49,9.5,16,9.5 C16.78,9.5,17.53,9.64,18.22,9.89 C17.63,11.85,16.13,13.42,14.22,14.11 C13.83,12.81,13.04,11.69,12,10.88 C12,10.88,12,10.88,12,10.88 z\\\"/><path style=\\\"fill:#ffffff;fill-rule:evenodd;\\\" d=\\\"M9.78,14.11 C10.17,12.81,10.96,11.69,12,10.88 C13.04,11.69,13.83,12.81,14.22,14.11 C13.53,14.36,12.78,14.5,12,14.5 C11.22,14.5,10.47,14.36,9.78,14.11 C9.78,14.11,9.78,14.11,9.78,14.11 z\\\"/><path style=\\\"fill:#00ffff;fill-rule:evenodd;\\\" d=\\\"M9.78,14.11 C9.6,14.71,9.5,15.34,9.5,16 C9.5,18.08,10.48,19.93,12,21.12 C13.52,19.93,14.5,18.08,14.5,16 C14.5,15.34,14.4,14.71,14.22,14.11 C13.53,14.36,12.78,14.5,12,14.5 C11.22,14.5,10.47,14.36,9.78,14.11 C9.78,14.11,9.78,14.11,9.78,14.11 z\\\"/><path style=\\\"fill:#ff0000;fill-rule:evenodd;\\\" d=\\\"M5.78,9.89 C5.6,9.29,5.5,8.66,5.5,8 C5.5,4.41,8.41,1.5,12,1.5 C15.59,1.5,18.5,4.41,18.5,8 C18.5,8.66,18.4,9.29,18.22,9.89 C17.53,9.64,16.78,9.5,16,9.5 C14.49,9.5,13.1,10.01,12,10.88 C10.9,10.01,9.51,9.5,8,9.5 C7.22,9.5,6.47,9.64,5.78,9.89 C5.78,9.89,5.78,9.89,5.78,9.89 z\\\"/><path style=\\\"fill:#0000ff;fill-rule:evenodd;\\\" d=\\\"M5.78,9.89 C3.28,10.8,1.5,13.19,1.5,16 C1.5,19.59,4.41,22.5,8,22.5 C9.51,22.5,10.9,21.99,12,21.12 C10.48,19.93,9.5,18.08,9.5,16 C9.5,15.34,9.6,14.71,9.78,14.11 C7.87,13.42,6.37,11.85,5.78,9.89 C5.78,9.89,5.78,9.89,5.78,9.89 z\\\"/><path style=\\\"fill:#00ff00;fill-rule:evenodd;\\\" d=\\\"M18.22,9.89 C20.72,10.8,22.5,13.19,22.5,16 C22.5,19.59,19.59,22.5,16,22.5 C14.49,22.5,13.1,21.99,12,21.12 C13.52,19.93,14.5,18.08,14.5,16 C14.5,15.34,14.4,14.71,14.22,14.11 C16.13,13.42,17.63,11.85,18.22,9.89 z\\\"/></g></g></svg> \",\n xrColor: \"<svg class=\\\"color filled\\\" viewBox=\\\"0 0 40 24\\\"><g><g><g><path style=\\\"fill:#000000;fill-rule:evenodd;\\\" d=\\\"M20,2 C19.99,2,19.98,2,19.98,2 C8.39,2,2,3.61,2,12 C2,18.41,5.32,22,10.54,22 C15.77,22,17.37,17.85,19.98,17.85 C19.98,17.85,19.99,17.85,20,17.85 C20.01,17.85,20.02,17.85,20.02,17.85 C22.63,17.85,24.23,22,29.46,22 C34.68,22,38,18.41,38,12 C38,3.61,31.61,2,20.02,2 C20.02,2,20.01,2,20,2 C20,2,20,2,20,2 z\\\"/></g><path style=\\\"fill:#fbed21;fill-rule:evenodd;\\\" d=\\\"M12.2,19.84 C15.79,19.39,17.07,16.46,19.07,16.46 C19.07,16.46,19.08,16.46,19.09,16.46 C19.09,16.46,19.1,16.46,19.11,16.46 C19.44,16.46,19.75,16.54,20.06,16.68 C20.37,16.54,20.68,16.46,21.01,16.46 C21.02,16.46,21.02,16.46,21.03,16.46 C21.04,16.46,21.04,16.46,21.05,16.46 C23.05,16.46,24.33,19.39,27.92,19.84 C31.66,19.4,33.98,16.5,33.98,11.62 C33.98,4.91,29.04,3.44,20.06,3.35 C11.07,3.44,6.14,4.91,6.14,11.62 C6.14,16.5,8.46,19.4,12.2,19.84 z\\\"/><path style=\\\"fill:#8cc63f;fill-rule:evenodd;\\\" d=\\\"M12.2,19.84 C12.52,19.87,12.86,19.89,13.21,19.89 C16.86,19.89,18.37,17.43,20.06,16.68 C19.75,16.54,19.44,16.46,19.11,16.46 C19.1,16.46,19.09,16.46,19.09,16.46 C19.08,16.46,19.07,16.46,19.07,16.46 C17.07,16.46,15.79,19.39,12.2,19.84 z\\\"/><path style=\\\"fill:#8cc63f;fill-rule:evenodd;\\\" d=\\\"M20.06,3.35 C20.37,3.35,20.69,3.35,21.01,3.35 C21.02,3.35,21.02,3.35,21.03,3.35 C21.03,3.35,21.03,3.35,21.03,3.35 C21.04,3.35,21.04,3.35,21.05,3.35 C30.64,3.35,35.92,4.68,35.92,11.62 C35.92,16.92,33.18,19.89,28.86,19.89 C28.53,19.89,28.22,19.87,27.92,19.84 C31.66,19.4,33.98,16.5,33.98,11.62 C33.98,4.91,29.04,3.44,20.06,3.35 C20.06,3.35,20.06,3.35,20.06,3.35 z\\\"/><path style=\\\"fill:#ff1c23;fill-rule:evenodd;\\\" d=\\\"M20.06,16.68 C21.74,17.43,23.25,19.89,26.91,19.89 C27.26,19.89,27.59,19.87,27.92,19.84 C24.33,19.39,23.05,16.46,21.05,16.46 C21.04,16.46,21.04,16.46,21.03,16.46 C21.02,16.46,21.02,16.46,21.01,16.46 C20.68,16.46,20.37,16.54,20.06,16.68 z\\\"/><path style=\\\"fill:#ff1c23;fill-rule:evenodd;\\\" d=\\\"M12.2,19.84 C11.9,19.87,11.59,19.89,11.26,19.89 C6.94,19.89,4.19,16.92,4.19,11.62 C4.19,4.68,9.48,3.35,19.07,3.35 C19.07,3.35,19.08,3.35,19.09,3.35 C19.09,3.35,19.09,3.35,19.09,3.35 C19.09,3.35,19.1,3.35,19.11,3.35 C19.43,3.35,19.75,3.35,20.06,3.35 C11.07,3.44,6.14,4.91,6.14,11.62 C6.14,16.5,8.46,19.4,12.2,19.84 z\\\"/></g><g><path style=\\\"fill:#8cc63e;fill-rule:nonzero;\\\" d=\\\"M22.55,8.63 C22.55,9.05,22.55,9.46,22.55,9.88 C22.54,10.25,22.85,10.56,23.2,10.55 C23.54,10.56,23.85,10.25,23.85,9.88 C23.85,9.46,23.85,9.05,23.85,8.63 C23.85,8.26,23.54,7.95,23.2,7.96 C22.85,7.95,22.54,8.26,22.55,8.63 z\\\"/><path style=\\\"fill:#8cc63e;fill-rule:nonzero;\\\" d=\\\"M17.32,8.63 C17.32,9.05,17.32,9.46,17.32,9.88 C17.31,10.25,17.62,10.56,17.97,10.55 C18.31,10.56,18.62,10.25,18.62,9.88 C18.62,9.46,18.62,9.05,18.62,8.63 C18.62,8.26,18.31,7.95,17.97,7.96 C17.62,7.95,17.31,8.26,17.32,8.63 z\\\"/><path style=\\\"fill:#8cc63e;fill-rule:nonzero;\\\" d=\\\"M19.99,4.39 C19.99,8.09,19.99,11.8,19.99,15.5 C19.99,15.87,20.3,16.18,20.64,16.17 C20.99,16.18,21.3,15.87,21.29,15.5 C21.29,11.8,21.29,8.09,21.29,4.39 C21.3,4.02,20.99,3.71,20.64,3.72 C20.3,3.71,19.99,4.02,19.99,4.39 z\\\"/><path style=\\\"fill:#fe1a22;fill-rule:nonzero;\\\" d=\\\"M21.43,8.63 C21.43,9.05,21.43,9.46,21.43,9.88 C21.42,10.25,21.73,10.56,22.08,10.55 C22.42,10.56,22.73,10.25,22.73,9.88 C22.73,9.46,22.73,9.05,22.73,8.63 C22.73,8.26,22.42,7.95,22.08,7.96 C21.73,7.95,21.42,8.26,21.43,8.63 z\\\"/><path style=\\\"fill:#fe1a22;fill-rule:nonzero;\\\" d=\\\"M16.2,8.63 C16.2,9.05,16.2,9.46,16.2,9.88 C16.19,10.25,16.5,10.56,16.85,10.55 C17.19,10.56,17.5,10.25,17.5,9.88 C17.5,9.46,17.5,9.05,17.5,8.63 C17.5,8.26,17.19,7.95,16.85,7.96 C16.5,7.95,16.19,8.26,16.2,8.63 z\\\"/><path style=\\\"fill:#fe1a22;fill-rule:nonzero;\\\" d=\\\"M18.87,4.39 C18.87,8.09,18.87,11.8,18.87,15.5 C18.87,15.87,19.18,16.18,19.52,16.17 C19.86,16.18,20.18,15.87,20.17,15.5 C20.17,11.8,20.17,8.09,20.17,4.39 C20.18,4.02,19.86,3.71,19.52,3.72 C19.18,3.71,18.87,4.02,18.87,4.39 z\\\"/><path style=\\\"fill:#000000;fill-rule:nonzero;\\\" d=\\\"M21.97,8.63 C21.97,9.05,21.97,9.46,21.97,9.88 C21.97,10.25,22.28,10.56,22.62,10.55 C22.97,10.56,23.28,10.25,23.27,9.88 C23.27,9.46,23.27,9.05,23.27,8.63 C23.28,8.26,22.97,7.95,22.62,7.96 C22.28,7.95,21.97,8.26,21.97,8.63 z\\\"/><path style=\\\"fill:#000000;fill-rule:nonzero;\\\" d=\\\"M16.74,8.63 C16.74,9.05,16.74,9.46,16.74,9.88 C16.74,10.25,17.05,10.56,17.39,10.55 C17.74,10.56,18.05,10.25,18.04,9.88 C18.04,9.46,18.04,9.05,18.04,8.63 C18.05,8.26,17.74,7.95,17.39,7.96 C17.05,7.95,16.74,8.26,16.74,8.63 z\\\"/><path style=\\\"fill:#000000;fill-rule:nonzero;\\\" d=\\\"M19.41,4.39 C19.41,8.09,19.41,11.8,19.41,15.5 C19.41,15.87,19.72,16.18,20.07,16.17 C20.41,16.18,20.72,15.87,20.72,15.5 C20.72,11.8,20.72,8.09,20.72,4.39 C20.72,4.02,20.41,3.71,20.07,3.72 C19.72,3.71,19.41,4.02,19.41,4.39 z\\\"/></g></g></svg> \",\n tosiFavicon: \"<svg class=\\\"color\\\" viewBox=\\\"0 0 48 48\\\"><g><g><path style=\\\"fill:#ed247b;fill-rule:evenodd;stroke:none;\\\" d=\\\"M1,9 C1,4.58,4.58,1,9,1 C9,1,39,1,39,1 C43.42,1,47,4.58,47,9 C47,9,47,39,47,39 C47,43.42,43.42,47,39,47 C39,47,9,47,9,47 C4.58,47,1,43.42,1,39 C1,39,1,9,1,9 z\\\"/><g><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M16,29 C16,29,10,31,10,35 C10,39,16,39,16,39\\\"/><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M32,29 C32,29,38,31,38,35 C38,39,32,39,32,39\\\"/><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M9,10.18 C9,7.87,10.79,6,13,6 C13,6,35,6,35,6 C37.21,6,39,7.87,39,10.18 C39,10.18,39,24.82,39,24.82 C39,27.13,37.21,29,35,29 C35,29,13,29,13,29 C10.79,29,9,27.13,9,24.82 C9,24.82,9,10.18,9,10.18 z\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M24,11 C24,11,24,23,24,23\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M28,15 C28,15,28,17,28,17\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M20,15 C20,15,20,17,20,17\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M32,43 C32,43,30,41,30,41 C30,41,28,43,28,43\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M20,43 C20,43,18,41,18,41 C18,41,16,43,16,43\\\"/><path style=\\\"fill:#e4e4e4;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M16,29 C16,29,32,29,32,29 C32,29,32,39,32,39 C32,39,16,39,16,39 C16,39,16,29,16,29 z\\\"/></g></g></g></svg> \",\n tosiPlatform: \"<svg class=\\\"color\\\" viewBox=\\\"0 0 48 48\\\"><g><g><g><path style=\\\"fill:#3ea9f5;fill-rule:evenodd;stroke:none;\\\" d=\\\"M23.97,47 C23.97,47,39,47,39,47 C43.42,47,47,43.42,47,39 C47,39,47,9,47,9 C47,4.58,43.42,1,39,1 C39,1,9,1,9,1 C4.58,1,1,4.58,1,9 C1,9,1,39,1,39 C1,41.64,2.28,43.98,4.25,45.44 C4.09,44.82,4,44.17,4,43.5 C4,39.36,7.36,36,11.5,36 C15.14,36,18.18,38.6,18.86,42.05 C19.07,42.02,19.28,42,19.5,42 C21.99,42,24,44.01,24,46.5 C24,46.67,23.99,46.84,23.97,47 z\\\"/><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:none;\\\" d=\\\"M4.25,45.44 C4.09,44.82,4,44.17,4,43.5 C4,39.36,7.36,36,11.5,36 C15.14,36,18.18,38.6,18.86,42.05 C19.07,42.02,19.28,42,19.5,42 C21.99,42,24,44.01,24,46.5 C24,46.67,23.99,46.84,23.97,47 C23.97,47,9,47,9,47 C7.22,47,5.58,46.42,4.25,45.44 z\\\"/></g><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M35,35 C35,35,32.17,35,32.17,35 C32.17,35,32.17,37.83,32.17,37.83\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M31,39 C31,39,28.17,39,28.17,39 C28.17,39,28.17,41.83,28.17,41.83\\\"/><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M7.48,16 C4.45,16,2,18.45,2,21.48 C2,21.48,2,21.48,2,21.48 C2,23.98,4.02,26,6.52,26 C6.52,26,6.62,26,6.62,26 C7.38,26,8,26.62,8,27.38 C8,27.38,8,27.38,8,27.38 C8,29.93,10.07,32,12.62,32 C12.62,32,16,32,16,32 C18.58,32,20.68,29.91,20.68,27.32 C20.68,27.32,20.68,21.42,20.68,21.42 C20.68,18.43,18.25,16,15.26,16 C15.26,16,7.48,16,7.48,16 z\\\"/><path style=\\\"fill:#e4e4e4;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M17,29 C17,29,33,29,33,29 C33,29,33,29,33,29 C33,34.52,28.52,39,23,39 C23,39,23,39,23,39 C19.69,39,17,36.31,17,33 C17,33,17,29,17,29 z\\\"/><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M40.52,16 C43.55,16,46,18.45,46,21.48 C46,21.48,46,21.48,46,21.48 C46,23.98,43.98,26,41.48,26 C41.48,26,41.38,26,41.38,26 C40.62,26,40,26.62,40,27.38 C40,27.38,40,27.38,40,27.38 C40,29.93,37.93,32,35.38,32 C35.38,32,32,32,32,32 C29.42,32,27.32,29.91,27.32,27.32 C27.32,27.32,27.32,21.42,27.32,21.42 C27.32,18.43,29.75,16,32.74,16 C32.74,16,40.52,16,40.52,16 z\\\"/><g><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M6,10.18 C6,7.87,7.79,6,10,6 C10,6,32,6,32,6 C34.21,6,36,7.87,36,10.18 C36,10.18,36,24.82,36,24.82 C36,27.13,34.21,29,32,29 C32,29,10,29,10,29 C7.79,29,6,27.13,6,24.82 C6,24.82,6,10.18,6,10.18 z\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M21,11 C21,11,21,23,21,23\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M25,15 C25,15,25,17,25,17\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M17,15 C17,15,17,17,17,17\\\"/></g></g></g></svg> \",\n tosiUi: \"<svg class=\\\"color\\\" viewBox=\\\"0 0 48 48\\\"><g><g><g><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M3,33 C3,31.9,3.9,31,5,31 C5,31,43,31,43,31 C44.1,31,45,31.9,45,33 C45,33,45,43,45,43 C45,44.1,44.1,45,43,45 C43,45,5,45,5,45 C3.9,45,3,44.1,3,43 C3,43,3,33,3,33 z\\\"/><g><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:#ed247b;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M7,35 C7,35,7,36.34,7,38 C7,39.66,8.34,41,10,41 C11.66,41,13,39.66,13,38 C13,36.34,13,35,13,35\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#ed247b;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M17,35 C17,35,17,41,17,41\\\"/></g><g><path style=\\\"fill:#ed247b;fill-rule:evenodd;stroke:none;\\\" d=\\\"M38,33 C40.76,33,43,35.24,43,38 C43,40.76,40.76,43,38,43 C35.24,43,33,40.76,33,38 C33,35.24,35.24,33,38,33 z\\\"/><path style=\\\"fill:#ed247b;fill-rule:nonzero;stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M40,36 C40,36,36,40,36,40\\\"/><path style=\\\"fill:#ed247b;fill-rule:nonzero;stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M36,36 C36,36,40,40,40,40\\\"/></g></g><g><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M15.97,21.01 C15.97,21.01,9.97,23.01,9.97,27.01 C9.97,31.01,15.97,31.01,15.97,31.01\\\"/><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M31.97,21.01 C31.97,21.01,37.97,23.01,37.97,27.01 C37.97,31.01,31.97,31.01,31.97,31.01\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M31,33 C31,33,29.49,31,29.49,31 C29.49,31,27.97,33,27.97,33\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M19.97,33 C19.97,33,17.97,31,17.97,31 C17.97,31,15.97,33,15.97,33\\\"/><path style=\\\"fill:#e4e4e4;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M15.97,21 C15.97,21,31.97,21,31.97,21 C31.97,21,31.97,31,31.97,31 C31.97,31,15.97,31,15.97,31 C15.97,31,15.97,21,15.97,21 z\\\"/><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M9,7.18 C9,4.87,10.79,3,13,3 C13,3,35.02,3,35.02,3 C37.23,3,39.03,4.87,39.03,7.18 C39.03,7.18,39.03,21.82,39.03,21.82 C39.03,24.13,37.23,26,35.02,26 C35.02,26,13,26,13,26 C10.79,26,9,24.13,9,21.82 C9,21.82,9,7.18,9,7.18 z\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M24,11 C24,11,24,23,24,23\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M28,15 C28,15,28,17,28,17\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M20,15 C20,15,20,17,20,17\\\"/></g></g></g></svg> \",\n tosiXr: \"<svg class=\\\"color\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M8,14.25 C8,14.25,5,15.25,5,17.25 C5,19.25,8,19.25,8,19.25\\\"/><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M16,14.25 C16,14.25,19,15.25,19,17.25 C19,19.25,16,19.25,16,19.25\\\"/><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M4.5,4.85 C4.5,3.69,5.4,2.75,6.5,2.75 C6.5,2.75,17.5,2.75,17.5,2.75 C18.61,2.75,19.5,3.69,19.5,4.85 C19.5,4.85,19.5,12.16,19.5,12.16 C19.5,13.32,18.61,14.25,17.5,14.25 C17.5,14.25,6.5,14.25,6.5,14.25 C5.4,14.25,4.5,13.32,4.5,12.16 C4.5,12.16,4.5,4.85,4.5,4.85 z\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M12,5.25 C12,5.25,12,11.25,12,11.25\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M14,7.25 C14,7.25,14,8.25,14,8.25\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M10,7.25 C10,7.25,10,8.25,10,8.25\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M16,21.25 C16,21.25,15,20.25,15,20.25 C15,20.25,14,21.25,14,21.25\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M10,21.25 C10,21.25,9,20.25,9,20.25 C9,20.25,8,21.25,8,21.25\\\"/><path style=\\\"fill:#e4e4e4;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M8,14.25 C8,14.25,16,14.25,16,14.25 C16,14.25,16,19.25,16,19.25 C16,19.25,8,19.25,8,19.25 C8,19.25,8,14.25,8,14.25 z\\\"/><path style=\\\"fill:#ff7bac;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-width:1;\\\" d=\\\"M12,4 C12,4,11.99,4,11.99,4 C6.19,4,3,4.73,3,8.5 C3,11.39,4.66,13,7.27,13 C9.88,13,10.68,11.13,11.99,11.13 C11.99,11.13,12,11.13,12,11.13 C12,11.13,12.01,11.13,12.01,11.13 C13.32,11.13,14.12,13,16.73,13 C19.34,13,21,11.39,21,8.5 C21,4.73,17.81,4,12.01,4 C12.01,4,12,4,12,4 C12,4,12,4,12,4 z\\\"/></g></svg> \",\n tosi: \"<svg class=\\\"color\\\" viewBox=\\\"0 0 48 48\\\"><g><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M38.35,31.7 C39.78,34.37,38.78,37.69,36.11,39.13 C36.11,39.13,36.11,39.13,36.11,39.13 C33.92,40.31,31.18,39.48,29.99,37.29 C29.99,37.29,29.95,37.2,29.95,37.2 C29.58,36.53,28.75,36.27,28.08,36.64 C28.08,36.64,28.08,36.64,28.08,36.64 C25.83,37.84,23.03,37,21.82,34.76 C21.82,34.76,20.22,31.78,20.22,31.78 C18.99,29.5,19.85,26.67,22.12,25.44 C22.12,25.44,27.32,22.65,27.32,22.65 C29.96,21.23,33.24,22.22,34.66,24.85 C34.66,24.85,38.35,31.7,38.35,31.7 z\\\"/><path style=\\\"fill:#9e9e9e;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M10.65,31.7 C9.22,34.37,10.22,37.69,12.89,39.13 C12.89,39.13,12.89,39.13,12.89,39.13 C15.08,40.31,17.82,39.48,19.01,37.29 C19.01,37.29,19.05,37.2,19.05,37.2 C19.42,36.53,20.25,36.27,20.92,36.64 C20.92,36.64,20.92,36.64,20.92,36.64 C23.17,37.84,25.97,37,27.18,34.76 C27.18,34.76,28.78,31.78,28.78,31.78 C30.01,29.5,29.15,26.67,26.88,25.44 C26.88,25.44,21.68,22.65,21.68,22.65 C19.04,21.23,15.76,22.22,14.34,24.85 C14.34,24.85,10.65,31.7,10.65,31.7 z\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M32.5,43 C32.5,43,30.5,41,30.5,41 C30.5,41,28.5,43,28.5,43\\\"/><path style=\\\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M20.5,43 C20.5,43,18.5,41,18.5,41 C18.5,41,16.5,43,16.5,43\\\"/><path style=\\\"fill:#e4e4e4;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M16.5,29 C16.5,29,32.5,29,32.5,29 C32.5,29,32.5,36,32.5,36 C32.5,37.66,31.16,39,29.5,39 C29.5,39,19.5,39,19.5,39 C17.84,39,16.5,37.66,16.5,36 C16.5,36,16.5,29,16.5,29 z\\\"/><g><path style=\\\"fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M9.5,10.18 C9.5,7.87,11.29,6,13.5,6 C13.5,6,35.5,6,35.5,6 C37.71,6,39.5,7.87,39.5,10.18 C39.5,10.18,39.5,24.82,39.5,24.82 C39.5,27.13,37.71,29,35.5,29 C35.5,29,13.5,29,13.5,29 C11.29,29,9.5,27.13,9.5,24.82 C9.5,24.82,9.5,10.18,9.5,10.18 z\\\"/><g><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M24.5,11 C24.5,11,24.5,23,24.5,23\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M28.5,15 C28.5,15,28.5,17,28.5,17\\\"/><path style=\\\"fill:#ffffff;fill-rule:nonzero;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2;\\\" d=\\\"M20.5,15 C20.5,15,20.5,17,20.5,17\\\"/></g></g></g></svg> \",\n discord: \"<svg class=\\\"filled\\\" version=\\\"1\\\" viewBox=\\\"0 0 1013 768\\\"><path d=\\\"M858 64c-60-28-131-51-204-64l-5-1c-8 14-17 32-25 51l-1 4c-35-6-75-9-116-9s-81 3-120 9l4-1c-9-22-18-40-28-57l1 3c-79 14-149 36-214 67l5-2c-132 196-168 387-150 575v0c73 55 158 99 250 127l6 2c19-26 38-55 53-85l2-3c-33-13-62-27-89-43l2 1c7-5 14-11 21-16 75 36 163 57 256 57s181-21 260-59l-4 2c7 6 14 11 21 16-25 15-53 29-83 40l-4 1c17 34 36 63 56 90l-1-2c98-30 183-74 259-130l-2 2c21-218-36-407-151-575zM338 524c-50 0-91-45-91-101s40-102 91-102 92 46 91 102-40 101-91 101zM675 524c-50 0-91-45-91-101s40-102 91-102 92 46 91 102-40 101-91 101z\\\"></path></svg> \",\n facebook: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\\\"></path></svg>\",\n game: \"<svg class=\\\"filled\\\" version=\\\"1\\\" viewBox=\\\"0 0 704 512\\\"><path d=\\\"M528 97v-1h-336c-88 0-160 72-160 160s72 160 160 160c52 0 99-25 128-64h64c29 39 76 64 128 64 88 0 160-72 160-160 0-83-63-151-144-159zM288 288h-64v64h-64v-64h-64v-64h64v-64h64v64h64v64zM480 288c-18 0-32-14-32-32s14-32 32-32 32 14 32 32-14 32-32 32zM576 288c-18 0-32-14-32-32 0-18 14-32 32-32s32 14 32 32c0 18-14 32-32 32z\\\"></path></svg> \",\n google: \"<svg class=\\\"filled\\\" version=\\\"1\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M256 0c-141 0-256 115-256 256s115 256 256 256 256-115 256-256-115-256-256-256zM260 448c-106 0-192-86-192-192s86-192 192-192c52 0 95 19 129 50l-52 50c-14-14-39-30-77-30-66 0-119 54-119 121s54 121 119 121c76 0 105-55 109-83h-109v-66h181c2 10 3 19 3 32 0 110-73 188-184 188z\\\"></path></svg> \",\n npm: \"<svg class=\\\"filled\\\" version=\\\"1\\\" viewBox=\\\"0 0 512 512\\\"><path d=\\\"M0 0v512h512v-512h-512zM416 416h-64v-256h-96v256h-160v-320h320v320z\\\"></path></svg> \",\n youtube: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z\\\"></path><polygon points=\\\"9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02\\\"></polygon></svg>\",\n blog: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M21,10.02 C21,10.02,21,15,21,15 C21,15.53,20.79,16.04,20.41,16.41 C20.04,16.79,19.53,17,19,17 C19,17,7,17,7,17 C5.67,18.33,4.33,19.67,3,21 C3,21,3,5,3,5 C3,4.47,3.21,3.96,3.59,3.59 C3.96,3.21,4.47,3,5,3 C8.53,3,10.49,3,14.02,3\\\"/><path style=\\\"\\\" d=\\\"M19,2 C19.54,1.46,20.32,1.25,21.05,1.45 C21.78,1.65,22.35,2.22,22.55,2.95 C22.75,3.68,22.54,4.46,22,5 C22,5,15.5,11.5,15.5,11.5 C14.17,11.83,12.83,12.17,11.5,12.5 C11.83,11.17,12.17,9.83,12.5,8.5 C15.67,5.33,15.83,5.17,19,2 z\\\"/><path style=\\\"\\\" d=\\\"M14.6,3\\\"/><path style=\\\"\\\" d=\\\"M21,8.77\\\"/><path style=\\\"\\\" d=\\\"M7,7 C7,7,10,7,10,7\\\"/><path style=\\\"\\\" d=\\\"M7,10 C7,10,9,10,9,10\\\"/></g></svg> \",\n bug: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M8,6 C8,3.79,9.79,2,12,2 C14.21,2,16,3.79,16,6 C16,6,8,6,8,6 z\\\"/><path style=\\\"\\\" d=\\\"M20,7 C20,7,18,9,18,9\\\"/><path style=\\\"\\\" d=\\\"M20,19 C20,19,18,17,18,17\\\"/><path style=\\\"\\\" d=\\\"M21,13 C21,13,18,13,18,13\\\"/><path style=\\\"\\\" d=\\\"M16.44,9 C17.3,9,18,9.7,18,10.56 C18,10.56,18,15,18,15 C18,18.31,15.31,21,12,21 C8.69,21,6,18.31,6,15 C6,15,6,10.56,6,10.56 C6,9.7,6.7,9,7.56,9 C7.56,9,16.44,9,16.44,9 z\\\"/><path style=\\\"\\\" d=\\\"M4,7 C4,7,6,9,6,9\\\"/><path style=\\\"\\\" d=\\\"M4,19 C4,19,6,17,6,17\\\"/><path style=\\\"\\\" d=\\\"M3,13 C3,13,6,13,6,13\\\"/><path style=\\\"\\\" d=\\\"M12,12 C12,12,12,17,12,17\\\"/></g></svg> \",\n activity: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"22 12 18 12 15 21 9 3 6 12 2 12\\\"></polyline></svg>\",\n airplay: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1\\\"></path><polygon points=\\\"12 15 17 21 7 21 12 15\\\"></polygon></svg>\",\n alertCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12.01\\\" y2=\\\"16\\\"></line></svg>\",\n alertOctagon: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\\\"></polygon><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12.01\\\" y2=\\\"16\\\"></line></svg>\",\n alertTriangle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\\\"></path><line x1=\\\"12\\\" y1=\\\"9\\\" x2=\\\"12\\\" y2=\\\"13\\\"></line><line x1=\\\"12\\\" y1=\\\"17\\\" x2=\\\"12.01\\\" y2=\\\"17\\\"></line></svg>\",\n alignCenter: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"18\\\" y1=\\\"10\\\" x2=\\\"6\\\" y2=\\\"10\\\"></line><line x1=\\\"21\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"21\\\" y1=\\\"14\\\" x2=\\\"3\\\" y2=\\\"14\\\"></line><line x1=\\\"18\\\" y1=\\\"18\\\" x2=\\\"6\\\" y2=\\\"18\\\"></line></svg>\",\n alignJustify: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"21\\\" y1=\\\"10\\\" x2=\\\"3\\\" y2=\\\"10\\\"></line><line x1=\\\"21\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"21\\\" y1=\\\"14\\\" x2=\\\"3\\\" y2=\\\"14\\\"></line><line x1=\\\"21\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line></svg>\",\n alignLeft: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"17\\\" y1=\\\"10\\\" x2=\\\"3\\\" y2=\\\"10\\\"></line><line x1=\\\"21\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"21\\\" y1=\\\"14\\\" x2=\\\"3\\\" y2=\\\"14\\\"></line><line x1=\\\"17\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line></svg>\",\n alignRight: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"21\\\" y1=\\\"10\\\" x2=\\\"7\\\" y2=\\\"10\\\"></line><line x1=\\\"21\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"21\\\" y1=\\\"14\\\" x2=\\\"3\\\" y2=\\\"14\\\"></line><line x1=\\\"21\\\" y1=\\\"18\\\" x2=\\\"7\\\" y2=\\\"18\\\"></line></svg>\",\n anchor: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"5\\\" r=\\\"3\\\"></circle><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"8\\\"></line><path d=\\\"M5 12H2a10 10 0 0 0 20 0h-3\\\"></path></svg>\",\n aperture: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"14.31\\\" y1=\\\"8\\\" x2=\\\"20.05\\\" y2=\\\"17.94\\\"></line><line x1=\\\"9.69\\\" y1=\\\"8\\\" x2=\\\"21.17\\\" y2=\\\"8\\\"></line><line x1=\\\"7.38\\\" y1=\\\"12\\\" x2=\\\"13.12\\\" y2=\\\"2.06\\\"></line><line x1=\\\"9.69\\\" y1=\\\"16\\\" x2=\\\"3.95\\\" y2=\\\"6.06\\\"></line><line x1=\\\"14.31\\\" y1=\\\"16\\\" x2=\\\"2.83\\\" y2=\\\"16\\\"></line><line x1=\\\"16.62\\\" y1=\\\"12\\\" x2=\\\"10.88\\\" y2=\\\"21.94\\\"></line></svg>\",\n archive: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"21 8 21 21 3 21 3 8\\\"></polyline><rect x=\\\"1\\\" y=\\\"3\\\" width=\\\"22\\\" height=\\\"5\\\"></rect><line x1=\\\"10\\\" y1=\\\"12\\\" x2=\\\"14\\\" y2=\\\"12\\\"></line></svg>\",\n arrowUpRight: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"7\\\" y1=\\\"17\\\" x2=\\\"17\\\" y2=\\\"7\\\"></line><polyline points=\\\"7 7 17 7 17 17\\\"></polyline></svg>\",\n atSign: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"></circle><path d=\\\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94\\\"></path></svg>\",\n award: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"8\\\" r=\\\"7\\\"></circle><polyline points=\\\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\\\"></polyline></svg>\",\n barChart2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"18\\\" y1=\\\"20\\\" x2=\\\"18\\\" y2=\\\"10\\\"></line><line x1=\\\"12\\\" y1=\\\"20\\\" x2=\\\"12\\\" y2=\\\"4\\\"></line><line x1=\\\"6\\\" y1=\\\"20\\\" x2=\\\"6\\\" y2=\\\"14\\\"></line></svg>\",\n barChart: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"12\\\" y1=\\\"20\\\" x2=\\\"12\\\" y2=\\\"10\\\"></line><line x1=\\\"18\\\" y1=\\\"20\\\" x2=\\\"18\\\" y2=\\\"4\\\"></line><line x1=\\\"6\\\" y1=\\\"20\\\" x2=\\\"6\\\" y2=\\\"16\\\"></line></svg>\",\n batteryCharging: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19\\\"></path><line x1=\\\"23\\\" y1=\\\"13\\\" x2=\\\"23\\\" y2=\\\"11\\\"></line><polyline points=\\\"11 6 7 12 13 12 9 18\\\"></polyline></svg>\",\n battery: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"1\\\" y=\\\"6\\\" width=\\\"18\\\" height=\\\"12\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"23\\\" y1=\\\"13\\\" x2=\\\"23\\\" y2=\\\"11\\\"></line></svg>\",\n bellOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13.73 21a2 2 0 0 1-3.46 0\\\"></path><path d=\\\"M18.63 13A17.89 17.89 0 0 1 18 8\\\"></path><path d=\\\"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14\\\"></path><path d=\\\"M18 8a6 6 0 0 0-9.33-5\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line></svg>\",\n bell: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\\\"></path><path d=\\\"M13.73 21a2 2 0 0 1-3.46 0\\\"></path></svg>\",\n bluetooth: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5\\\"></polyline></svg>\",\n bold: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\\\"></path><path d=\\\"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\\\"></path></svg>\",\n bookOpen: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\\\"></path><path d=\\\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\\\"></path></svg>\",\n book: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\\\"></path><path d=\\\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\\\"></path></svg>\",\n bookmark: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\\\"></path></svg>\",\n box: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"></path><polyline points=\\\"3.27 6.96 12 12.01 20.73 6.96\\\"></polyline><line x1=\\\"12\\\" y1=\\\"22.08\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line></svg>\",\n briefcase: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"2\\\" y=\\\"7\\\" width=\\\"20\\\" height=\\\"14\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><path d=\\\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\\\"></path></svg>\",\n calendar: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"4\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"16\\\" y1=\\\"2\\\" x2=\\\"16\\\" y2=\\\"6\\\"></line><line x1=\\\"8\\\" y1=\\\"2\\\" x2=\\\"8\\\" y2=\\\"6\\\"></line><line x1=\\\"3\\\" y1=\\\"10\\\" x2=\\\"21\\\" y2=\\\"10\\\"></line></svg>\",\n cameraOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line><path d=\\\"M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56\\\"></path></svg>\",\n camera: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\\\"></path><circle cx=\\\"12\\\" cy=\\\"13\\\" r=\\\"4\\\"></circle></svg>\",\n cast: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6\\\"></path><line x1=\\\"2\\\" y1=\\\"20\\\" x2=\\\"2.01\\\" y2=\\\"20\\\"></line></svg>\",\n checkCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22 11.08V12a10 10 0 1 1-5.93-9.14\\\"></path><polyline points=\\\"22 4 12 14.01 9 11.01\\\"></polyline></svg>\",\n checkSquare: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"9 11 12 14 22 4\\\"></polyline><path d=\\\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\\\"></path></svg>\",\n check: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"20 6 9 17 4 12\\\"></polyline></svg>\",\n chrome: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"></circle><line x1=\\\"21.17\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"8\\\"></line><line x1=\\\"3.95\\\" y1=\\\"6.06\\\" x2=\\\"8.54\\\" y2=\\\"14\\\"></line><line x1=\\\"10.88\\\" y1=\\\"21.94\\\" x2=\\\"15.46\\\" y2=\\\"14\\\"></line></svg>\",\n circle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle></svg>\",\n clipboard: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\\\"></path><rect x=\\\"8\\\" y=\\\"2\\\" width=\\\"8\\\" height=\\\"4\\\" rx=\\\"1\\\" ry=\\\"1\\\"></rect></svg>\",\n clock: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polyline points=\\\"12 6 12 12 16 14\\\"></polyline></svg>\",\n cloudDrizzle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"8\\\" y1=\\\"19\\\" x2=\\\"8\\\" y2=\\\"21\\\"></line><line x1=\\\"8\\\" y1=\\\"13\\\" x2=\\\"8\\\" y2=\\\"15\\\"></line><line x1=\\\"16\\\" y1=\\\"19\\\" x2=\\\"16\\\" y2=\\\"21\\\"></line><line x1=\\\"16\\\" y1=\\\"13\\\" x2=\\\"16\\\" y2=\\\"15\\\"></line><line x1=\\\"12\\\" y1=\\\"21\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><line x1=\\\"12\\\" y1=\\\"15\\\" x2=\\\"12\\\" y2=\\\"17\\\"></line><path d=\\\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\\\"></path></svg>\",\n cloudLightning: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9\\\"></path><polyline points=\\\"13 11 9 17 15 17 11 23\\\"></polyline></svg>\",\n cloudOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line></svg>\",\n cloudRain: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"16\\\" y1=\\\"13\\\" x2=\\\"16\\\" y2=\\\"21\\\"></line><line x1=\\\"8\\\" y1=\\\"13\\\" x2=\\\"8\\\" y2=\\\"21\\\"></line><line x1=\\\"12\\\" y1=\\\"15\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><path d=\\\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\\\"></path></svg>\",\n cloudSnow: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25\\\"></path><line x1=\\\"8\\\" y1=\\\"16\\\" x2=\\\"8.01\\\" y2=\\\"16\\\"></line><line x1=\\\"8\\\" y1=\\\"20\\\" x2=\\\"8.01\\\" y2=\\\"20\\\"></line><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12.01\\\" y2=\\\"18\\\"></line><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12.01\\\" y2=\\\"22\\\"></line><line x1=\\\"16\\\" y1=\\\"16\\\" x2=\\\"16.01\\\" y2=\\\"16\\\"></line><line x1=\\\"16\\\" y1=\\\"20\\\" x2=\\\"16.01\\\" y2=\\\"20\\\"></line></svg>\",\n cloud: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z\\\"></path></svg>\",\n code: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"16 18 22 12 16 6\\\"></polyline><polyline points=\\\"8 6 2 12 8 18\\\"></polyline></svg>\",\n codepen: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2\\\"></polygon><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"15.5\\\"></line><polyline points=\\\"22 8.5 12 15.5 2 8.5\\\"></polyline><polyline points=\\\"2 15.5 12 8.5 22 15.5\\\"></polyline><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"8.5\\\"></line></svg>\",\n codesandbox: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"></path><polyline points=\\\"7.5 4.21 12 6.81 16.5 4.21\\\"></polyline><polyline points=\\\"7.5 19.79 7.5 14.6 3 12\\\"></polyline><polyline points=\\\"21 12 16.5 14.6 16.5 19.79\\\"></polyline><polyline points=\\\"3.27 6.96 12 12.01 20.73 6.96\\\"></polyline><line x1=\\\"12\\\" y1=\\\"22.08\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line></svg>\",\n coffee: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18 8h1a4 4 0 0 1 0 8h-1\\\"></path><path d=\\\"M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z\\\"></path><line x1=\\\"6\\\" y1=\\\"1\\\" x2=\\\"6\\\" y2=\\\"4\\\"></line><line x1=\\\"10\\\" y1=\\\"1\\\" x2=\\\"10\\\" y2=\\\"4\\\"></line><line x1=\\\"14\\\" y1=\\\"1\\\" x2=\\\"14\\\" y2=\\\"4\\\"></line></svg>\",\n columns: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18\\\"></path></svg>\",\n command: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\\\"></path></svg>\",\n compass: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polygon points=\\\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\\\"></polygon></svg>\",\n copy: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"9\\\" y=\\\"9\\\" width=\\\"13\\\" height=\\\"13\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><path d=\\\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\\\"></path></svg>\",\n cpu: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"4\\\" y=\\\"4\\\" width=\\\"16\\\" height=\\\"16\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><rect x=\\\"9\\\" y=\\\"9\\\" width=\\\"6\\\" height=\\\"6\\\"></rect><line x1=\\\"9\\\" y1=\\\"1\\\" x2=\\\"9\\\" y2=\\\"4\\\"></line><line x1=\\\"15\\\" y1=\\\"1\\\" x2=\\\"15\\\" y2=\\\"4\\\"></line><line x1=\\\"9\\\" y1=\\\"20\\\" x2=\\\"9\\\" y2=\\\"23\\\"></line><line x1=\\\"15\\\" y1=\\\"20\\\" x2=\\\"15\\\" y2=\\\"23\\\"></line><line x1=\\\"20\\\" y1=\\\"9\\\" x2=\\\"23\\\" y2=\\\"9\\\"></line><line x1=\\\"20\\\" y1=\\\"14\\\" x2=\\\"23\\\" y2=\\\"14\\\"></line><line x1=\\\"1\\\" y1=\\\"9\\\" x2=\\\"4\\\" y2=\\\"9\\\"></line><line x1=\\\"1\\\" y1=\\\"14\\\" x2=\\\"4\\\" y2=\\\"14\\\"></line></svg>\",\n creditCard: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"1\\\" y=\\\"4\\\" width=\\\"22\\\" height=\\\"16\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"1\\\" y1=\\\"10\\\" x2=\\\"23\\\" y2=\\\"10\\\"></line></svg>\",\n crop: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6.13 1L6 16a2 2 0 0 0 2 2h15\\\"></path><path d=\\\"M1 6.13L16 6a2 2 0 0 1 2 2v15\\\"></path></svg>\",\n crosshair: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"22\\\" y1=\\\"12\\\" x2=\\\"18\\\" y2=\\\"12\\\"></line><line x1=\\\"6\\\" y1=\\\"12\\\" x2=\\\"2\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"6\\\" x2=\\\"12\\\" y2=\\\"2\\\"></line><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"18\\\"></line></svg>\",\n database: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><ellipse cx=\\\"12\\\" cy=\\\"5\\\" rx=\\\"9\\\" ry=\\\"3\\\"></ellipse><path d=\\\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\\\"></path><path d=\\\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\\\"></path></svg>\",\n delete: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z\\\"></path><line x1=\\\"18\\\" y1=\\\"9\\\" x2=\\\"12\\\" y2=\\\"15\\\"></line><line x1=\\\"12\\\" y1=\\\"9\\\" x2=\\\"18\\\" y2=\\\"15\\\"></line></svg>\",\n disc: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle></svg>\",\n divideCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"8\\\"></line><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle></svg>\",\n divideSquare: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"8\\\"></line></svg>\",\n divide: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"6\\\" r=\\\"2\\\"></circle><line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"></line><circle cx=\\\"12\\\" cy=\\\"18\\\" r=\\\"2\\\"></circle></svg>\",\n dollarSign: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"12\\\" y1=\\\"1\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><path d=\\\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\\\"></path></svg>\",\n downloadCloud: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"8 17 12 21 16 17\\\"></polyline><line x1=\\\"12\\\" y1=\\\"12\\\" x2=\\\"12\\\" y2=\\\"21\\\"></line><path d=\\\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\\\"></path></svg>\",\n download: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"></path><polyline points=\\\"7 10 12 15 17 10\\\"></polyline><line x1=\\\"12\\\" y1=\\\"15\\\" x2=\\\"12\\\" y2=\\\"3\\\"></line></svg>\",\n dribbble: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><path d=\\\"M8.56 2.75c4.37 6.03 6.02 9.42 8.03 17.72m2.54-15.38c-3.72 4.35-8.94 5.66-16.88 5.85m19.5 1.9c-3.5-.93-6.63-.82-8.94 0-2.58.92-5.01 2.86-7.44 6.32\\\"></path></svg>\",\n droplet: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z\\\"></path></svg>\",\n edit2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M17 3a2.83 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\\\"></path></svg>\",\n edit3: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12 20h9\\\"></path><path d=\\\"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\\\"></path></svg>\",\n edit: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\\\"></path><path d=\\\"M18.5 2.5a2.12 2.12 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\\\"></path></svg>\",\n externalLink: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"></path><polyline points=\\\"15 3 21 3 21 9\\\"></polyline><line x1=\\\"10\\\" y1=\\\"14\\\" x2=\\\"21\\\" y2=\\\"3\\\"></line></svg>\",\n eyeOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line></svg>\",\n eye: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\\\"></path><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle></svg>\",\n fastForward: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"13 19 22 12 13 5 13 19\\\"></polygon><polygon points=\\\"2 19 11 12 2 5 2 19\\\"></polygon></svg>\",\n feather: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z\\\"></path><line x1=\\\"16\\\" y1=\\\"8\\\" x2=\\\"2\\\" y2=\\\"22\\\"></line><line x1=\\\"17.5\\\" y1=\\\"15\\\" x2=\\\"9\\\" y2=\\\"15\\\"></line></svg>\",\n figma: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z\\\"></path><path d=\\\"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z\\\"></path><path d=\\\"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z\\\"></path><path d=\\\"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z\\\"></path><path d=\\\"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z\\\"></path></svg>\",\n fileMinus: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\\\"></path><polyline points=\\\"14 2 14 8 20 8\\\"></polyline><line x1=\\\"9\\\" y1=\\\"15\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line></svg>\",\n filePlus: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\\\"></path><polyline points=\\\"14 2 14 8 20 8\\\"></polyline><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"9\\\" y1=\\\"15\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line></svg>\",\n fileText: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\\\"></path><polyline points=\\\"14 2 14 8 20 8\\\"></polyline><line x1=\\\"16\\\" y1=\\\"13\\\" x2=\\\"8\\\" y2=\\\"13\\\"></line><line x1=\\\"16\\\" y1=\\\"17\\\" x2=\\\"8\\\" y2=\\\"17\\\"></line><polyline points=\\\"10 9 9 9 8 9\\\"></polyline></svg>\",\n file: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\\\"></path><polyline points=\\\"13 2 13 9 20 9\\\"></polyline></svg>\",\n film: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"2\\\" y=\\\"2\\\" width=\\\"20\\\" height=\\\"20\\\" rx=\\\"2.18\\\" ry=\\\"2.18\\\"></rect><line x1=\\\"7\\\" y1=\\\"2\\\" x2=\\\"7\\\" y2=\\\"22\\\"></line><line x1=\\\"17\\\" y1=\\\"2\\\" x2=\\\"17\\\" y2=\\\"22\\\"></line><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"></line><line x1=\\\"2\\\" y1=\\\"7\\\" x2=\\\"7\\\" y2=\\\"7\\\"></line><line x1=\\\"2\\\" y1=\\\"17\\\" x2=\\\"7\\\" y2=\\\"17\\\"></line><line x1=\\\"17\\\" y1=\\\"17\\\" x2=\\\"22\\\" y2=\\\"17\\\"></line><line x1=\\\"17\\\" y1=\\\"7\\\" x2=\\\"22\\\" y2=\\\"7\\\"></line></svg>\",\n filter: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\\\"></polygon></svg>\",\n flag: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\\\"></path><line x1=\\\"4\\\" y1=\\\"22\\\" x2=\\\"4\\\" y2=\\\"15\\\"></line></svg>\",\n folderMinus: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\\\"></path><line x1=\\\"9\\\" y1=\\\"14\\\" x2=\\\"15\\\" y2=\\\"14\\\"></line></svg>\",\n folderPlus: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\\\"></path><line x1=\\\"12\\\" y1=\\\"11\\\" x2=\\\"12\\\" y2=\\\"17\\\"></line><line x1=\\\"9\\\" y1=\\\"14\\\" x2=\\\"15\\\" y2=\\\"14\\\"></line></svg>\",\n folder: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\\\"></path></svg>\",\n framer: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7\\\"></path></svg>\",\n frown: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><path d=\\\"M16 16s-1.5-2-4-2-4 2-4 2\\\"></path><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"9.01\\\" y2=\\\"9\\\"></line><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"15.01\\\" y2=\\\"9\\\"></line></svg>\",\n gift: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"20 12 20 22 4 22 4 12\\\"></polyline><rect x=\\\"2\\\" y=\\\"7\\\" width=\\\"20\\\" height=\\\"5\\\"></rect><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"7\\\"></line><path d=\\\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\\\"></path><path d=\\\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\\\"></path></svg>\",\n gitBranch: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"6\\\" y1=\\\"3\\\" x2=\\\"6\\\" y2=\\\"15\\\"></line><circle cx=\\\"18\\\" cy=\\\"6\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><path d=\\\"M18 9a9 9 0 0 1-9 9\\\"></path></svg>\",\n gitCommit: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"></circle><line x1=\\\"1.05\\\" y1=\\\"12\\\" x2=\\\"7\\\" y2=\\\"12\\\"></line><line x1=\\\"17.01\\\" y1=\\\"12\\\" x2=\\\"22.96\\\" y2=\\\"12\\\"></line></svg>\",\n gitMerge: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"></circle><path d=\\\"M6 21V9a9 9 0 0 0 9 9\\\"></path></svg>\",\n gitPullRequest: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"></circle><path d=\\\"M13 6h3a2 2 0 0 1 2 2v7\\\"></path><line x1=\\\"6\\\" y1=\\\"9\\\" x2=\\\"6\\\" y2=\\\"21\\\"></line></svg>\",\n github: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\\\"></path></svg>\",\n gitlab: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z\\\"></path></svg>\",\n globe: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"></line><path d=\\\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\\\"></path></svg>\",\n grid: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"7\\\" height=\\\"7\\\"></rect><rect x=\\\"14\\\" y=\\\"3\\\" width=\\\"7\\\" height=\\\"7\\\"></rect><rect x=\\\"14\\\" y=\\\"14\\\" width=\\\"7\\\" height=\\\"7\\\"></rect><rect x=\\\"3\\\" y=\\\"14\\\" width=\\\"7\\\" height=\\\"7\\\"></rect></svg>\",\n hardDrive: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"22\\\" y1=\\\"12\\\" x2=\\\"2\\\" y2=\\\"12\\\"></line><path d=\\\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\\\"></path><line x1=\\\"6\\\" y1=\\\"16\\\" x2=\\\"6.01\\\" y2=\\\"16\\\"></line><line x1=\\\"10\\\" y1=\\\"16\\\" x2=\\\"10.01\\\" y2=\\\"16\\\"></line></svg>\",\n hash: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"4\\\" y1=\\\"9\\\" x2=\\\"20\\\" y2=\\\"9\\\"></line><line x1=\\\"4\\\" y1=\\\"15\\\" x2=\\\"20\\\" y2=\\\"15\\\"></line><line x1=\\\"10\\\" y1=\\\"3\\\" x2=\\\"8\\\" y2=\\\"21\\\"></line><line x1=\\\"16\\\" y1=\\\"3\\\" x2=\\\"14\\\" y2=\\\"21\\\"></line></svg>\",\n headphones: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M3 18v-6a9 9 0 0 1 18 0v6\\\"></path><path d=\\\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\\\"></path></svg>\",\n heart: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\\\"></path></svg>\",\n helpCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><path d=\\\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\\\"></path><line x1=\\\"12\\\" y1=\\\"17\\\" x2=\\\"12.01\\\" y2=\\\"17\\\"></line></svg>\",\n hexagon: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"></path></svg>\",\n home: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\\\"></path><polyline points=\\\"9 22 9 12 15 12 15 22\\\"></polyline></svg>\",\n image: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><circle cx=\\\"8.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\"></circle><polyline points=\\\"21 15 16 10 5 21\\\"></polyline></svg>\",\n inbox: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"22 12 16 12 14 15 10 15 8 12 2 12\\\"></polyline><path d=\\\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\\\"></path></svg>\",\n info: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"7.75\\\"></line></svg>\",\n instagram: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"2\\\" y=\\\"2\\\" width=\\\"20\\\" height=\\\"20\\\" rx=\\\"5\\\" ry=\\\"5\\\"></rect><path d=\\\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\\\"></path><line x1=\\\"17.5\\\" y1=\\\"6.5\\\" x2=\\\"17.51\\\" y2=\\\"6.5\\\"></line></svg>\",\n italic: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"19\\\" y1=\\\"4\\\" x2=\\\"10\\\" y2=\\\"4\\\"></line><line x1=\\\"14\\\" y1=\\\"20\\\" x2=\\\"5\\\" y2=\\\"20\\\"></line><line x1=\\\"15\\\" y1=\\\"4\\\" x2=\\\"9\\\" y2=\\\"20\\\"></line></svg>\",\n key: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.78 7.78 5.5 5.5 0 0 1 7.78-7.78zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\\\"></path></svg>\",\n layers: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"12 2 2 7 12 12 22 7 12 2\\\"></polygon><polyline points=\\\"2 17 12 22 22 17\\\"></polyline><polyline points=\\\"2 12 12 17 22 12\\\"></polyline></svg>\",\n layout: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"3\\\" y1=\\\"9\\\" x2=\\\"21\\\" y2=\\\"9\\\"></line><line x1=\\\"9\\\" y1=\\\"21\\\" x2=\\\"9\\\" y2=\\\"9\\\"></line></svg>\",\n lifeBuoy: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"></circle><line x1=\\\"4.93\\\" y1=\\\"4.93\\\" x2=\\\"9.17\\\" y2=\\\"9.17\\\"></line><line x1=\\\"14.83\\\" y1=\\\"14.83\\\" x2=\\\"19.07\\\" y2=\\\"19.07\\\"></line><line x1=\\\"14.83\\\" y1=\\\"9.17\\\" x2=\\\"19.07\\\" y2=\\\"4.93\\\"></line><line x1=\\\"14.83\\\" y1=\\\"9.17\\\" x2=\\\"18.36\\\" y2=\\\"5.64\\\"></line><line x1=\\\"4.93\\\" y1=\\\"19.07\\\" x2=\\\"9.17\\\" y2=\\\"14.83\\\"></line></svg>\",\n link2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\\\"></path><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line></svg>\",\n link: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\\\"></path><path d=\\\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\\\"></path></svg>\",\n linkedin: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\\\"></path><rect x=\\\"2\\\" y=\\\"9\\\" width=\\\"4\\\" height=\\\"12\\\"></rect><circle cx=\\\"4\\\" cy=\\\"4\\\" r=\\\"2\\\"></circle></svg>\",\n list: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"8\\\" y1=\\\"6\\\" x2=\\\"21\\\" y2=\\\"6\\\"></line><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"21\\\" y2=\\\"12\\\"></line><line x1=\\\"8\\\" y1=\\\"18\\\" x2=\\\"21\\\" y2=\\\"18\\\"></line><line x1=\\\"3\\\" y1=\\\"6\\\" x2=\\\"3.01\\\" y2=\\\"6\\\"></line><line x1=\\\"3\\\" y1=\\\"12\\\" x2=\\\"3.01\\\" y2=\\\"12\\\"></line><line x1=\\\"3\\\" y1=\\\"18\\\" x2=\\\"3.01\\\" y2=\\\"18\\\"></line></svg>\",\n loader: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"6\\\"></line><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12\\\" y2=\\\"22\\\"></line><line x1=\\\"4.93\\\" y1=\\\"4.93\\\" x2=\\\"7.76\\\" y2=\\\"7.76\\\"></line><line x1=\\\"16.24\\\" y1=\\\"16.24\\\" x2=\\\"19.07\\\" y2=\\\"19.07\\\"></line><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"6\\\" y2=\\\"12\\\"></line><line x1=\\\"18\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"></line><line x1=\\\"4.93\\\" y1=\\\"19.07\\\" x2=\\\"7.76\\\" y2=\\\"16.24\\\"></line><line x1=\\\"16.24\\\" y1=\\\"7.76\\\" x2=\\\"19.07\\\" y2=\\\"4.93\\\"></line></svg>\",\n lock: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"11\\\" width=\\\"18\\\" height=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><path d=\\\"M7 11V7a5 5 0 0 1 10 0v4\\\"></path></svg> \",\n logIn: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\\\"></path><polyline points=\\\"10 17 15 12 10 7\\\"></polyline><line x1=\\\"15\\\" y1=\\\"12\\\" x2=\\\"3\\\" y2=\\\"12\\\"></line></svg>\",\n logOut: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\\\"></path><polyline points=\\\"16 17 21 12 16 7\\\"></polyline><line x1=\\\"21\\\" y1=\\\"12\\\" x2=\\\"9\\\" y2=\\\"12\\\"></line></svg>\",\n mail: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\\\"></path><polyline points=\\\"22,6 12,13 2,6\\\"></polyline></svg>\",\n mapPin: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\\\"></path><circle cx=\\\"12\\\" cy=\\\"10\\\" r=\\\"3\\\"></circle></svg>\",\n map: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\\\"></polygon><line x1=\\\"8\\\" y1=\\\"2\\\" x2=\\\"8\\\" y2=\\\"18\\\"></line><line x1=\\\"16\\\" y1=\\\"6\\\" x2=\\\"16\\\" y2=\\\"22\\\"></line></svg>\",\n maximize2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"15 3 21 3 21 9\\\"></polyline><polyline points=\\\"9 21 3 21 3 15\\\"></polyline><line x1=\\\"21\\\" y1=\\\"3\\\" x2=\\\"14\\\" y2=\\\"10\\\"></line><line x1=\\\"3\\\" y1=\\\"21\\\" x2=\\\"10\\\" y2=\\\"14\\\"></line></svg>\",\n maximize: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\\\"></path></svg>\",\n meh: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"8\\\" y1=\\\"15\\\" x2=\\\"16\\\" y2=\\\"15\\\"></line><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"9.01\\\" y2=\\\"9\\\"></line><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"15.01\\\" y2=\\\"9\\\"></line></svg>\",\n menu: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"3\\\" y1=\\\"12\\\" x2=\\\"21\\\" y2=\\\"12\\\"></line><line x1=\\\"3\\\" y1=\\\"6\\\" x2=\\\"21\\\" y2=\\\"6\\\"></line><line x1=\\\"3\\\" y1=\\\"18\\\" x2=\\\"21\\\" y2=\\\"18\\\"></line></svg>\",\n messageCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\\\"></path></svg>\",\n messageSquare: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\\\"></path></svg>\",\n micOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line><path d=\\\"M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6\\\"></path><path d=\\\"M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23\\\"></path><line x1=\\\"12\\\" y1=\\\"19\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><line x1=\\\"8\\\" y1=\\\"23\\\" x2=\\\"16\\\" y2=\\\"23\\\"></line></svg>\",\n mic: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\\\"></path><path d=\\\"M19 10v2a7 7 0 0 1-14 0v-2\\\"></path><line x1=\\\"12\\\" y1=\\\"19\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><line x1=\\\"8\\\" y1=\\\"23\\\" x2=\\\"16\\\" y2=\\\"23\\\"></line></svg>\",\n minimize2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"4 14 10 14 10 20\\\"></polyline><polyline points=\\\"20 10 14 10 14 4\\\"></polyline><line x1=\\\"14\\\" y1=\\\"10\\\" x2=\\\"21\\\" y2=\\\"3\\\"></line><line x1=\\\"3\\\" y1=\\\"21\\\" x2=\\\"10\\\" y2=\\\"14\\\"></line></svg>\",\n minimize: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\\\"></path></svg>\",\n minusCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line></svg>\",\n minusSquare: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line></svg>\",\n minus: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"></line></svg>\",\n monitor: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"2\\\" y=\\\"3\\\" width=\\\"20\\\" height=\\\"14\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"8\\\" y1=\\\"21\\\" x2=\\\"16\\\" y2=\\\"21\\\"></line><line x1=\\\"12\\\" y1=\\\"17\\\" x2=\\\"12\\\" y2=\\\"21\\\"></line></svg>\",\n moon: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\\\"></path></svg>\",\n moreHorizontal: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"></circle><circle cx=\\\"19\\\" cy=\\\"12\\\" r=\\\"1\\\"></circle><circle cx=\\\"5\\\" cy=\\\"12\\\" r=\\\"1\\\"></circle></svg>\",\n moreVertical: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"></circle><circle cx=\\\"12\\\" cy=\\\"5\\\" r=\\\"1\\\"></circle><circle cx=\\\"12\\\" cy=\\\"19\\\" r=\\\"1\\\"></circle></svg>\",\n mousePointer: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\\\"></path><path d=\\\"M13 13l6 6\\\"></path></svg>\",\n move: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"5 9 2 12 5 15\\\"></polyline><polyline points=\\\"9 5 12 2 15 5\\\"></polyline><polyline points=\\\"15 19 12 22 9 19\\\"></polyline><polyline points=\\\"19 9 22 12 19 15\\\"></polyline><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"22\\\"></line></svg>\",\n music: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M9 18V5l12-2v13\\\"></path><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><circle cx=\\\"18\\\" cy=\\\"16\\\" r=\\\"3\\\"></circle></svg>\",\n navigation2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"12 2 19 21 12 17 5 21 12 2\\\"></polygon></svg>\",\n navigation: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"3 11 22 2 13 21 11 13 3 11\\\"></polygon></svg>\",\n octagon: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\\\"></polygon></svg>\",\n package: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"16.5\\\" y1=\\\"9.4\\\" x2=\\\"7.5\\\" y2=\\\"4.21\\\"></line><path d=\\\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"></path><polyline points=\\\"3.27 6.96 12 12.01 20.73 6.96\\\"></polyline><line x1=\\\"12\\\" y1=\\\"22.08\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line></svg>\",\n paperclip: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\\\"></path></svg>\",\n pauseCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"10\\\" y1=\\\"15\\\" x2=\\\"10\\\" y2=\\\"9\\\"></line><line x1=\\\"14\\\" y1=\\\"15\\\" x2=\\\"14\\\" y2=\\\"9\\\"></line></svg>\",\n pause: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"6\\\" y=\\\"4\\\" width=\\\"4\\\" height=\\\"16\\\"></rect><rect x=\\\"14\\\" y=\\\"4\\\" width=\\\"4\\\" height=\\\"16\\\"></rect></svg>\",\n penTool: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12 19l7-7 3 3-7 7-3-3z\\\"></path><path d=\\\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\\\"></path><path d=\\\"M2 2l7.59 7.59\\\"></path><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"2\\\"></circle></svg>\",\n percent: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"19\\\" y1=\\\"5\\\" x2=\\\"5\\\" y2=\\\"19\\\"></line><circle cx=\\\"6.5\\\" cy=\\\"6.5\\\" r=\\\"2.5\\\"></circle><circle cx=\\\"17.5\\\" cy=\\\"17.5\\\" r=\\\"2.5\\\"></circle></svg>\",\n phoneCall: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path></svg>\",\n phoneForwarded: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"19 1 23 5 19 9\\\"></polyline><line x1=\\\"15\\\" y1=\\\"5\\\" x2=\\\"23\\\" y2=\\\"5\\\"></line><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path></svg>\",\n phoneIncoming: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"16 2 16 8 22 8\\\"></polyline><line x1=\\\"23\\\" y1=\\\"1\\\" x2=\\\"16\\\" y2=\\\"8\\\"></line><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path></svg>\",\n phoneMissed: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"23\\\" y1=\\\"1\\\" x2=\\\"17\\\" y2=\\\"7\\\"></line><line x1=\\\"17\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"7\\\"></line><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path></svg>\",\n phoneOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\\\"></path><line x1=\\\"23\\\" y1=\\\"1\\\" x2=\\\"1\\\" y2=\\\"23\\\"></line></svg>\",\n phoneOutgoing: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"23 7 23 1 17 1\\\"></polyline><line x1=\\\"16\\\" y1=\\\"8\\\" x2=\\\"23\\\" y2=\\\"1\\\"></line><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path></svg>\",\n phone: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path></svg>\",\n pieChart: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21.21 15.89A10 10 0 1 1 8 2.83\\\"></path><path d=\\\"M22 12A10 10 0 0 0 12 2v10z\\\"></path></svg>\",\n playCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polygon points=\\\"10 8 16 12 10 16 10 8\\\"></polygon></svg>\",\n play: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"5 3 19 12 5 21 5 3\\\"></polygon></svg>\",\n plusCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line></svg>\",\n plusSquare: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line></svg>\",\n plus: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"12\\\" y1=\\\"5\\\" x2=\\\"12\\\" y2=\\\"19\\\"></line><line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"></line></svg>\",\n pocket: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z\\\"></path><polyline points=\\\"8 10 12 14 16 10\\\"></polyline></svg>\",\n power: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M18.36 6.64a9 9 0 1 1-12.73 0\\\"></path><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line></svg>\",\n printer: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"6 9 6 2 18 2 18 9\\\"></polyline><path d=\\\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\\\"></path><rect x=\\\"6\\\" y=\\\"14\\\" width=\\\"12\\\" height=\\\"8\\\"></rect></svg>\",\n radio: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"2\\\"></circle><path d=\\\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\\\"></path></svg>\",\n repeat: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"17 1 21 5 17 9\\\"></polyline><path d=\\\"M3 11V9a4 4 0 0 1 4-4h14\\\"></path><polyline points=\\\"7 23 3 19 7 15\\\"></polyline><path d=\\\"M21 13v2a4 4 0 0 1-4 4H3\\\"></path></svg>\",\n rewind: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"11 19 2 12 11 5 11 19\\\"></polygon><polygon points=\\\"22 19 13 12 22 5 22 19\\\"></polygon></svg>\",\n cornerDownRight: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"15 10 20 15 15 20\\\"></polyline><path d=\\\"M4 4v7a4 4 0 0 0 4 4h12\\\"></path></svg>\",\n cornerRightDown: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"10 15 15 20 20 15\\\"></polyline><path d=\\\"M4 4h7a4 4 0 0 1 4 4v12\\\"></path></svg>\",\n cornerRightUp: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"10 9 15 4 20 9\\\"></polyline><path d=\\\"M4 20h7a4 4 0 0 0 4-4V4\\\"></path></svg>\",\n cornerUpRight: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"15 14 20 9 15 4\\\"></polyline><path d=\\\"M4 20v-7a4 4 0 0 1 4-4h12\\\"></path></svg>\",\n refreshCw: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"23 4 23 10 17 10\\\"></polyline><polyline points=\\\"1 20 1 14 7 14\\\"></polyline><path d=\\\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\\\"></path></svg>\",\n rotateCw: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"23 4 23 10 17 10\\\"></polyline><path d=\\\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\\\"></path></svg>\",\n skipForward: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"5 4 15 12 5 20 5 4\\\"></polygon><line x1=\\\"19\\\" y1=\\\"5\\\" x2=\\\"19\\\" y2=\\\"19\\\"></line></svg>\",\n toggleRight: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"1\\\" y=\\\"5\\\" width=\\\"22\\\" height=\\\"14\\\" rx=\\\"7\\\" ry=\\\"7\\\"></rect><circle cx=\\\"16\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle></svg>\",\n rss: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4 11a9 9 0 0 1 9 9\\\"></path><path d=\\\"M4 4a16 16 0 0 1 16 16\\\"></path><circle cx=\\\"5\\\" cy=\\\"19\\\" r=\\\"1\\\"></circle></svg>\",\n save: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\\\"></path><polyline points=\\\"17 21 17 13 7 13 7 21\\\"></polyline><polyline points=\\\"7 3 7 8 15 8\\\"></polyline></svg>\",\n scissors: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><line x1=\\\"20\\\" y1=\\\"4\\\" x2=\\\"8.12\\\" y2=\\\"15.88\\\"></line><line x1=\\\"14.47\\\" y1=\\\"14.48\\\" x2=\\\"20\\\" y2=\\\"20\\\"></line><line x1=\\\"8.12\\\" y1=\\\"8.12\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line></svg>\",\n search: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"></circle><line x1=\\\"21\\\" y1=\\\"21\\\" x2=\\\"16.65\\\" y2=\\\"16.65\\\"></line></svg>\",\n send: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"22\\\" y1=\\\"2\\\" x2=\\\"11\\\" y2=\\\"13\\\"></line><polygon points=\\\"22 2 15 22 11 13 2 9 22 2\\\"></polygon></svg>\",\n server: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"2\\\" y=\\\"2\\\" width=\\\"20\\\" height=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><rect x=\\\"2\\\" y=\\\"14\\\" width=\\\"20\\\" height=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"6\\\" y1=\\\"6\\\" x2=\\\"6.01\\\" y2=\\\"6\\\"></line><line x1=\\\"6\\\" y1=\\\"18\\\" x2=\\\"6.01\\\" y2=\\\"18\\\"></line></svg>\",\n settings: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M4.78,6.75 C6.02,7.26,7.26,6.02,6.75,4.78 C6.75,4.78,6.24,3.57,6.24,3.57 C5.93,2.8,6.29,1.92,7.06,1.6 C7.06,1.6,8.14,1.15,8.14,1.15 C8.91,0.83,9.79,1.2,10.11,1.96 C10.11,1.96,10.61,3.18,10.61,3.18 C11.12,4.42,12.88,4.42,13.39,3.18 C13.39,3.18,13.89,1.97,13.89,1.97 C14.21,1.2,15.09,0.83,15.86,1.15 C15.86,1.15,16.94,1.6,16.94,1.6 C17.71,1.92,18.08,2.8,17.76,3.57 C17.76,3.57,17.15,5.03,17.15,5.03 C16.64,6.27,17.88,7.51,19.12,7 C19.12,7,20.51,6.42,20.51,6.42 C21.28,6.1,22.16,6.47,22.47,7.23 C22.47,7.23,22.92,8.32,22.92,8.32 C23.24,9.09,22.88,9.96,22.11,10.28 C22.11,10.28,21.07,10.71,21.07,10.71 C19.83,11.23,19.83,12.98,21.07,13.49 C21.07,13.49,22.04,13.89,22.04,13.89 C22.8,14.21,23.17,15.09,22.85,15.86 C22.85,15.86,22.4,16.94,22.4,16.94 C22.08,17.71,21.2,18.07,20.43,17.76 C20.43,17.76,19.22,17.25,19.22,17.25 C17.98,16.74,16.74,17.98,17.25,19.22 C17.25,19.22,17.76,20.43,17.76,20.43 C18.07,21.2,17.71,22.08,16.94,22.4 C16.94,22.4,15.86,22.85,15.86,22.85 C15.09,23.17,14.21,22.8,13.89,22.04 C13.89,22.04,13.39,20.82,13.39,20.82 C12.88,19.58,11.12,19.58,10.61,20.82 C10.61,20.82,10.11,22.04,10.11,22.04 C9.79,22.8,8.91,23.17,8.14,22.85 C8.14,22.85,7.06,22.4,7.06,22.4 C6.29,22.08,5.93,21.2,6.24,20.44 C6.24,20.44,6.64,19.47,6.64,19.47 C7.16,18.23,5.92,16.99,4.68,17.5 C4.68,17.5,3.64,17.93,3.64,17.93 C2.87,18.25,1.99,17.89,1.67,17.12 C1.67,17.12,1.22,16.04,1.22,16.04 C0.91,15.27,1.27,14.39,2.04,14.07 C2.04,14.07,3.43,13.49,3.43,13.49 C4.67,12.98,4.67,11.23,3.43,10.71 C3.43,10.71,1.96,10.11,1.96,10.11 C1.2,9.79,0.83,8.91,1.15,8.14 C1.15,8.14,1.6,7.06,1.6,7.06 C1.92,6.29,2.8,5.93,3.57,6.24 C3.57,6.24,4.78,6.75,4.78,6.75 z M14.31,11.04 C14.84,12.32,14.23,13.78,12.96,14.31 C11.68,14.84,10.22,14.23,9.69,12.96 C9.16,11.68,9.77,10.22,11.04,9.69 C12.32,9.16,13.78,9.77,14.31,11.04 z\\\"/></g></svg> \",\n share2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"18\\\" cy=\\\"5\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle><circle cx=\\\"18\\\" cy=\\\"19\\\" r=\\\"3\\\"></circle><line x1=\\\"8.59\\\" y1=\\\"13.51\\\" x2=\\\"15.42\\\" y2=\\\"17.49\\\"></line><line x1=\\\"15.41\\\" y1=\\\"6.51\\\" x2=\\\"8.59\\\" y2=\\\"10.49\\\"></line></svg>\",\n share: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\\\"></path><polyline points=\\\"16 6 12 2 8 6\\\"></polyline><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"15\\\"></line></svg>\",\n shieldOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18\\\"></path><path d=\\\"M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line></svg>\",\n shield: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\\\"></path></svg>\",\n shoppingBag: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\\\"></path><line x1=\\\"3\\\" y1=\\\"6\\\" x2=\\\"21\\\" y2=\\\"6\\\"></line><path d=\\\"M16 10a4 4 0 0 1-8 0\\\"></path></svg>\",\n shoppingCart: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"9\\\" cy=\\\"21\\\" r=\\\"1\\\"></circle><circle cx=\\\"20\\\" cy=\\\"21\\\" r=\\\"1\\\"></circle><path d=\\\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\\\"></path></svg>\",\n shuffle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"16 3 21 3 21 8\\\"></polyline><line x1=\\\"4\\\" y1=\\\"20\\\" x2=\\\"21\\\" y2=\\\"3\\\"></line><polyline points=\\\"21 16 21 21 16 21\\\"></polyline><line x1=\\\"15\\\" y1=\\\"15\\\" x2=\\\"21\\\" y2=\\\"21\\\"></line><line x1=\\\"4\\\" y1=\\\"4\\\" x2=\\\"9\\\" y2=\\\"9\\\"></line></svg>\",\n sidebar: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"9\\\" y1=\\\"3\\\" x2=\\\"9\\\" y2=\\\"21\\\"></line></svg>\",\n slack: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z\\\"></path><path d=\\\"M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\\\"></path><path d=\\\"M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z\\\"></path><path d=\\\"M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z\\\"></path><path d=\\\"M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z\\\"></path><path d=\\\"M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\\\"></path><path d=\\\"M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z\\\"></path><path d=\\\"M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z\\\"></path></svg>\",\n slash: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"4.93\\\" y1=\\\"4.93\\\" x2=\\\"19.07\\\" y2=\\\"19.07\\\"></line></svg>\",\n sliders: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"4\\\" y1=\\\"21\\\" x2=\\\"4\\\" y2=\\\"14\\\"></line><line x1=\\\"4\\\" y1=\\\"10\\\" x2=\\\"4\\\" y2=\\\"3\\\"></line><line x1=\\\"12\\\" y1=\\\"21\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"3\\\"></line><line x1=\\\"20\\\" y1=\\\"21\\\" x2=\\\"20\\\" y2=\\\"16\\\"></line><line x1=\\\"20\\\" y1=\\\"12\\\" x2=\\\"20\\\" y2=\\\"3\\\"></line><line x1=\\\"1\\\" y1=\\\"14\\\" x2=\\\"7\\\" y2=\\\"14\\\"></line><line x1=\\\"9\\\" y1=\\\"8\\\" x2=\\\"15\\\" y2=\\\"8\\\"></line><line x1=\\\"17\\\" y1=\\\"16\\\" x2=\\\"23\\\" y2=\\\"16\\\"></line></svg>\",\n smartphone: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"5\\\" y=\\\"2\\\" width=\\\"14\\\" height=\\\"20\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12.01\\\" y2=\\\"18\\\"></line></svg>\",\n smile: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><path d=\\\"M8 14s1.5 2 4 2 4-2 4-2\\\"></path><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"9.01\\\" y2=\\\"9\\\"></line><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"15.01\\\" y2=\\\"9\\\"></line></svg>\",\n speaker: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"4\\\" y=\\\"2\\\" width=\\\"16\\\" height=\\\"20\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><circle cx=\\\"12\\\" cy=\\\"14\\\" r=\\\"4\\\"></circle><line x1=\\\"12\\\" y1=\\\"6\\\" x2=\\\"12.01\\\" y2=\\\"6\\\"></line></svg>\",\n square: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect></svg>\",\n star: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\\\"></polygon></svg>\",\n stopCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><rect x=\\\"9\\\" y=\\\"9\\\" width=\\\"6\\\" height=\\\"6\\\"></rect></svg>\",\n sun: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"5\\\"></circle><line x1=\\\"12\\\" y1=\\\"1\\\" x2=\\\"12\\\" y2=\\\"3\\\"></line><line x1=\\\"12\\\" y1=\\\"21\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><line x1=\\\"4.22\\\" y1=\\\"4.22\\\" x2=\\\"5.64\\\" y2=\\\"5.64\\\"></line><line x1=\\\"18.36\\\" y1=\\\"18.36\\\" x2=\\\"19.78\\\" y2=\\\"19.78\\\"></line><line x1=\\\"1\\\" y1=\\\"12\\\" x2=\\\"3\\\" y2=\\\"12\\\"></line><line x1=\\\"21\\\" y1=\\\"12\\\" x2=\\\"23\\\" y2=\\\"12\\\"></line><line x1=\\\"4.22\\\" y1=\\\"19.78\\\" x2=\\\"5.64\\\" y2=\\\"18.36\\\"></line><line x1=\\\"18.36\\\" y1=\\\"5.64\\\" x2=\\\"19.78\\\" y2=\\\"4.22\\\"></line></svg>\",\n sunrise: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M17 18a5 5 0 0 0-10 0\\\"></path><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"9\\\"></line><line x1=\\\"4.22\\\" y1=\\\"10.22\\\" x2=\\\"5.64\\\" y2=\\\"11.64\\\"></line><line x1=\\\"1\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line><line x1=\\\"21\\\" y1=\\\"18\\\" x2=\\\"23\\\" y2=\\\"18\\\"></line><line x1=\\\"18.36\\\" y1=\\\"11.64\\\" x2=\\\"19.78\\\" y2=\\\"10.22\\\"></line><line x1=\\\"23\\\" y1=\\\"22\\\" x2=\\\"1\\\" y2=\\\"22\\\"></line><polyline points=\\\"8 6 12 2 16 6\\\"></polyline></svg>\",\n sunset: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M17 18a5 5 0 0 0-10 0\\\"></path><line x1=\\\"12\\\" y1=\\\"9\\\" x2=\\\"12\\\" y2=\\\"2\\\"></line><line x1=\\\"4.22\\\" y1=\\\"10.22\\\" x2=\\\"5.64\\\" y2=\\\"11.64\\\"></line><line x1=\\\"1\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line><line x1=\\\"21\\\" y1=\\\"18\\\" x2=\\\"23\\\" y2=\\\"18\\\"></line><line x1=\\\"18.36\\\" y1=\\\"11.64\\\" x2=\\\"19.78\\\" y2=\\\"10.22\\\"></line><line x1=\\\"23\\\" y1=\\\"22\\\" x2=\\\"1\\\" y2=\\\"22\\\"></line><polyline points=\\\"16 5 12 9 8 5\\\"></polyline></svg>\",\n table: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18\\\"></path></svg>\",\n tablet: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"4\\\" y=\\\"2\\\" width=\\\"16\\\" height=\\\"20\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12.01\\\" y2=\\\"18\\\"></line></svg>\",\n tag: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\\\"></path><line x1=\\\"7\\\" y1=\\\"7\\\" x2=\\\"7.01\\\" y2=\\\"7\\\"></line></svg>\",\n target: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"6\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"2\\\"></circle></svg>\",\n terminal: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"4 17 10 11 4 5\\\"></polyline><line x1=\\\"12\\\" y1=\\\"19\\\" x2=\\\"20\\\" y2=\\\"19\\\"></line></svg>\",\n thermometer: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z\\\"></path></svg>\",\n tool: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\\\"></path></svg>\",\n trash2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"3 6 5 6 21 6\\\"></polyline><path d=\\\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\\\"></path><line x1=\\\"10\\\" y1=\\\"11\\\" x2=\\\"10\\\" y2=\\\"17\\\"></line><line x1=\\\"14\\\" y1=\\\"11\\\" x2=\\\"14\\\" y2=\\\"17\\\"></line></svg>\",\n trash: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"3 6 5 6 21 6\\\"></polyline><path d=\\\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\\\"></path></svg>\",\n trello: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><rect x=\\\"7\\\" y=\\\"7\\\" width=\\\"3\\\" height=\\\"9\\\"></rect><rect x=\\\"14\\\" y=\\\"7\\\" width=\\\"3\\\" height=\\\"5\\\"></rect></svg>\",\n trendingDown: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"23 18 13.5 8.5 8.5 13.5 1 6\\\"></polyline><polyline points=\\\"17 18 23 18 23 12\\\"></polyline></svg>\",\n trendingUp: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"23 6 13.5 15.5 8.5 10.5 1 18\\\"></polyline><polyline points=\\\"17 6 23 6 23 12\\\"></polyline></svg>\",\n triangle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\\\"></path></svg>\",\n truck: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"1\\\" y=\\\"3\\\" width=\\\"15\\\" height=\\\"13\\\"></rect><polygon points=\\\"16 8 20 8 23 11 23 16 16 16 16 8\\\"></polygon><circle cx=\\\"5.5\\\" cy=\\\"18.5\\\" r=\\\"2.5\\\"></circle><circle cx=\\\"18.5\\\" cy=\\\"18.5\\\" r=\\\"2.5\\\"></circle></svg>\",\n tv: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"2\\\" y=\\\"7\\\" width=\\\"20\\\" height=\\\"15\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><polyline points=\\\"17 2 12 7 7 2\\\"></polyline></svg>\",\n twitch: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7\\\"></path></svg>\",\n twitter: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z\\\"></path></svg>\",\n type: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"4 7 4 4 20 4 20 7\\\"></polyline><line x1=\\\"9\\\" y1=\\\"20\\\" x2=\\\"15\\\" y2=\\\"20\\\"></line><line x1=\\\"12\\\" y1=\\\"4\\\" x2=\\\"12\\\" y2=\\\"20\\\"></line></svg>\",\n umbrella: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7\\\"></path></svg>\",\n underline: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3\\\"></path><line x1=\\\"4\\\" y1=\\\"21\\\" x2=\\\"20\\\" y2=\\\"21\\\"></line></svg>\",\n unlock: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"11\\\" width=\\\"18\\\" height=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><path d=\\\"M7 11V7a5 5 0 0 1 9.9-1\\\"></path></svg>\",\n thumbsUp: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\\\"></path></svg>\",\n arrowRightCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polyline points=\\\"12 16 16 12 12 8\\\"></polyline><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line></svg>\",\n arrowRight: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"></line><polyline points=\\\"12 5 19 12 12 19\\\"></polyline></svg>\",\n chevronRight: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"9 18 15 12 9 6\\\"></polyline></svg>\",\n chevronsRight: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"13 17 18 12 13 7\\\"></polyline><polyline points=\\\"6 17 11 12 6 7\\\"></polyline></svg>\",\n uploadCloud: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"16 16 12 12 8 16\\\"></polyline><line x1=\\\"12\\\" y1=\\\"12\\\" x2=\\\"12\\\" y2=\\\"21\\\"></line><path d=\\\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\\\"></path><polyline points=\\\"16 16 12 12 8 16\\\"></polyline></svg>\",\n upload: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"></path><polyline points=\\\"17 8 12 3 7 8\\\"></polyline><line x1=\\\"12\\\" y1=\\\"3\\\" x2=\\\"12\\\" y2=\\\"15\\\"></line></svg>\",\n userCheck: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"8.5\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><polyline points=\\\"17 11 19 13 23 9\\\"></polyline></svg>\",\n userMinus: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"8.5\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><line x1=\\\"23\\\" y1=\\\"11\\\" x2=\\\"17\\\" y2=\\\"11\\\"></line></svg>\",\n userPlus: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"8.5\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><line x1=\\\"20\\\" y1=\\\"8\\\" x2=\\\"20\\\" y2=\\\"14\\\"></line><line x1=\\\"23\\\" y1=\\\"11\\\" x2=\\\"17\\\" y2=\\\"11\\\"></line></svg>\",\n userX: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"8.5\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><line x1=\\\"18\\\" y1=\\\"8\\\" x2=\\\"23\\\" y2=\\\"13\\\"></line><line x1=\\\"23\\\" y1=\\\"8\\\" x2=\\\"18\\\" y2=\\\"13\\\"></line></svg>\",\n user: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"12\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle></svg>\",\n users: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"9\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><path d=\\\"M23 21v-2a4 4 0 0 0-3-3.87\\\"></path><path d=\\\"M16 3.13a4 4 0 0 1 0 7.75\\\"></path></svg>\",\n videoOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line></svg>\",\n video: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"23 7 16 12 23 17 23 7\\\"></polygon><rect x=\\\"1\\\" y=\\\"5\\\" width=\\\"15\\\" height=\\\"14\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect></svg>\",\n voicemail: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"5.5\\\" cy=\\\"11.5\\\" r=\\\"4.5\\\"></circle><circle cx=\\\"18.5\\\" cy=\\\"11.5\\\" r=\\\"4.5\\\"></circle><line x1=\\\"5.5\\\" y1=\\\"16\\\" x2=\\\"18.5\\\" y2=\\\"16\\\"></line></svg>\",\n volume1: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\\"></polygon><path d=\\\"M15.54 8.46a5 5 0 0 1 0 7.07\\\"></path></svg>\",\n volume2: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\\"></polygon><path d=\\\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\\\"></path></svg>\",\n volumeX: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\\"></polygon><line x1=\\\"23\\\" y1=\\\"9\\\" x2=\\\"17\\\" y2=\\\"15\\\"></line><line x1=\\\"17\\\" y1=\\\"9\\\" x2=\\\"23\\\" y2=\\\"15\\\"></line></svg>\",\n volume: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\\"></polygon></svg>\",\n watch: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"7\\\"></circle><polyline points=\\\"12 9 12 12 13.5 13.5\\\"></polyline><path d=\\\"M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83\\\"></path></svg>\",\n wifiOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line><path d=\\\"M16.72 11.06A10.94 10.94 0 0 1 19 12.55\\\"></path><path d=\\\"M5 12.55a10.94 10.94 0 0 1 5.17-2.39\\\"></path><path d=\\\"M10.71 5.05A16 16 0 0 1 22.58 9\\\"></path><path d=\\\"M1.42 9a15.91 15.91 0 0 1 4.7-2.88\\\"></path><path d=\\\"M8.53 16.11a6 6 0 0 1 6.95 0\\\"></path><line x1=\\\"12\\\" y1=\\\"20\\\" x2=\\\"12.01\\\" y2=\\\"20\\\"></line></svg>\",\n wifi: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M5 12.55a11 11 0 0 1 14.08 0\\\"></path><path d=\\\"M1.42 9a16 16 0 0 1 21.16 0\\\"></path><path d=\\\"M8.53 16.11a6 6 0 0 1 6.95 0\\\"></path><line x1=\\\"12\\\" y1=\\\"20\\\" x2=\\\"12.01\\\" y2=\\\"20\\\"></line></svg>\",\n wind: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\\\"></path></svg>\",\n xCircle: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"9\\\" y2=\\\"15\\\"></line><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line></svg>\",\n xOctagon: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\\\"></polygon><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"9\\\" y2=\\\"15\\\"></line><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line></svg>\",\n xSquare: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"9\\\" y2=\\\"15\\\"></line></svg>\",\n x: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><line x1=\\\"18\\\" y1=\\\"6\\\" x2=\\\"6\\\" y2=\\\"18\\\"></line><line x1=\\\"6\\\" y1=\\\"6\\\" x2=\\\"18\\\" y2=\\\"18\\\"></line></svg>\",\n zapOff: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polyline points=\\\"12.41 6.75 13 2 10.57 4.92\\\"></polyline><polyline points=\\\"18.57 12.91 21 10 15.66 10\\\"></polyline><polyline points=\\\"8 8 3 14 12 14 11 22 16 16\\\"></polyline><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line></svg>\",\n zap: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><polygon points=\\\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\\\"></polygon></svg>\",\n zoomIn: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"></circle><line x1=\\\"21\\\" y1=\\\"21\\\" x2=\\\"16.65\\\" y2=\\\"16.65\\\"></line><line x1=\\\"11\\\" y1=\\\"8\\\" x2=\\\"11\\\" y2=\\\"14\\\"></line><line x1=\\\"8\\\" y1=\\\"11\\\" x2=\\\"14\\\" y2=\\\"11\\\"></line></svg>\",\n zoomOut: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"></circle><line x1=\\\"21\\\" y1=\\\"21\\\" x2=\\\"16.65\\\" y2=\\\"16.65\\\"></line><line x1=\\\"8\\\" y1=\\\"11\\\" x2=\\\"14\\\" y2=\\\"11\\\"></line></svg>\",\n fontBold: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M13.5,11 C15.71,11,17.5,12.68,17.5,14.75 C17.5,16.82,15.71,18.5,13.5,18.5 C13.5,18.5,8.5,18.5,8.5,18.5 C8.5,18.5,8.5,3.5,8.5,3.5 C8.5,3.5,13.5,3.5,13.5,3.5 C15.71,3.5,17.5,5.18,17.5,7.25 C17.5,9.32,15.71,11,13.5,11 C13.5,11,13.5,11,13.5,11 z\\\"/><path style=\\\"\\\" d=\\\"M13.5,11 C13.5,11,8.5,11,8.5,11\\\"/><path style=\\\"\\\" d=\\\"M12.5,11 C14.71,11,16.5,12.68,16.5,14.75 C16.5,16.82,14.71,18.5,12.5,18.5 C12.5,18.5,7.5,18.5,7.5,18.5 C7.5,18.5,7.5,3.5,7.5,3.5 C7.5,3.5,12.5,3.5,12.5,3.5 C14.71,3.5,16.5,5.18,16.5,7.25 C16.5,9.32,14.71,11,12.5,11 C12.5,11,12.5,11,12.5,11 z\\\"/><path style=\\\"\\\" d=\\\"M12.5,11 C12.5,11,7.5,11,7.5,11\\\"/></g></svg> \",\n fontItalic: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M17,4.5 C17,4.5,13,4.5,13,4.5\\\"/><path style=\\\"\\\" d=\\\"M11,19.5 C11,19.5,7,19.5,7,19.5\\\"/><path style=\\\"\\\" d=\\\"M15,4.5 C15,4.5,9,19.5,9,19.5\\\"/></g></svg> \",\n fontUnderline: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M7.5,3.5 C7.5,3.5,7.5,10.74,7.5,13.5 C7.5,16.26,9.74,18.5,12.5,18.5 C15.26,18.5,17.5,16.26,17.5,13.5 C17.5,10.74,17.5,3.5,17.5,3.5\\\"/><path style=\\\"\\\" d=\\\"M7.5,21.5 C7.5,21.5,17.5,21.5,17.5,21.5\\\"/></g></svg> \",\n indent: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M21,10 C21,10,8,10,8,10\\\"/><path style=\\\"\\\" d=\\\"M21,6 C21,6,8,6,8,6\\\"/><path style=\\\"\\\" d=\\\"M21,14 C21,14,8,14,8,14\\\"/><path style=\\\"\\\" d=\\\"M21,18 C21,18,8,18,8,18\\\"/><path style=\\\"\\\" d=\\\"M2.5,9 C2.5,9,5.5,12,5.5,12 C5.5,12,2.5,15,2.5,15\\\"/></g></svg> \",\n listBullet: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M21,6 C21,6,10,6,10,6\\\"/><path style=\\\"\\\" d=\\\"M21,12 C21,12,10,12,10,12\\\"/><path style=\\\"\\\" d=\\\"M21,18 C21,18,10,18,10,18\\\"/><path style=\\\"\\\" d=\\\"M5.5,5 C6.05,5,6.5,5.45,6.5,6 C6.5,6.55,6.05,7,5.5,7 C4.95,7,4.5,6.55,4.5,6 C4.5,5.45,4.95,5,5.5,5 z\\\"/><path style=\\\"\\\" d=\\\"M5.5,11 C6.05,11,6.5,11.45,6.5,12 C6.5,12.55,6.05,13,5.5,13 C4.95,13,4.5,12.55,4.5,12 C4.5,11.45,4.95,11,5.5,11 z\\\"/><path style=\\\"\\\" d=\\\"M5.5,17 C6.05,17,6.5,17.45,6.5,18 C6.5,18.55,6.05,19,5.5,19 C4.95,19,4.5,18.55,4.5,18 C4.5,17.45,4.95,17,5.5,17 z\\\"/></g></svg> \",\n listNumber: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M21,6 C21,6,10,6,10,6\\\"/><path style=\\\"\\\" d=\\\"M21,12 C21,12,10,12,10,12\\\"/><path style=\\\"\\\" d=\\\"M21,18 C21,18,10,18,10,18\\\"/><path style=\\\"\\\" d=\\\"M4.5,5 C4.5,5,5.5,4,5.5,4 C5.5,4,5.5,8,5.5,8\\\"/><path style=\\\"\\\" d=\\\"M4.5,10 C4.5,10,5.5,10,5.5,10 C6.05,10,6.5,10.45,6.5,11 C6.5,11,6.5,11,6.5,11 C6.5,11.55,6.05,12,5.5,12 C5.5,12,5.5,12,5.5,12 C4.95,12,4.5,12.45,4.5,13 C4.5,13,4.5,14,4.5,14 C4.5,14,6.5,14,6.5,14\\\"/><path style=\\\"\\\" d=\\\"M4.5,16 C4.5,16,5.5,16,5.5,16 C6.05,16,6.5,16.45,6.5,17 C6.5,17,6.5,17,6.5,17 C6.5,17.55,6.05,18,5.5,18 C5.5,18,4.5,18,4.5,18 C4.5,18,5.5,18,5.5,18 C6.05,18,6.5,18.45,6.5,19 C6.5,19,6.5,19,6.5,19 C6.5,19.55,6.05,20,5.5,20 C5.5,20,4.5,20,4.5,20\\\"/></g></svg> \",\n outdent: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path style=\\\"\\\" d=\\\"M21,10 C21,10,8,10,8,10\\\"/><path style=\\\"\\\" d=\\\"M21,6 C21,6,8,6,8,6\\\"/><path style=\\\"\\\" d=\\\"M21,14 C21,14,8,14,8,14\\\"/><path style=\\\"\\\" d=\\\"M21,18 C21,18,8,18,8,18\\\"/><path style=\\\"\\\" d=\\\"M5.5,9 C5.5,9,2.5,12,2.5,12 C2.5,12,5.5,15,5.5,15\\\"/></g></svg> \",\n pin: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><g><path style=\\\"\\\" d=\\\"M16.23,4.73 C16.23,4.73,19.42,7.9,19.42,7.9 C19.42,7.9,14.46,15.69,14.46,15.69 C14.46,15.69,8.45,9.68,8.45,9.68 C8.45,9.68,16.23,4.73,16.23,4.73 z\\\"/><path style=\\\"\\\" d=\\\"M20.84,9.32 C20.84,9.32,14.47,2.95,14.47,2.95\\\"/><path style=\\\"\\\" d=\\\"M16.6,17.8 C16.6,17.8,6.7,7.9,6.7,7.9\\\"/><path style=\\\"\\\" d=\\\"M10.23,11.44 C10.23,11.44,5.99,18.51,5.99,18.51 C5.99,18.51,13.06,14.27,13.06,14.27\\\"/></g></g></svg> \",\n resize: \"<svg class=\\\"stroked\\\" version=\\\"1.1\\\" viewBox=\\\"0, 0, 24, 24\\\"><g><path d=\\\"M9,3 L3,3 L3,9\\\"/><path d=\\\"M15,21 L21,21 L21,15\\\"/><path d=\\\"M3,3 L10,10\\\"/><path d=\\\"M21,21 L14,14\\\"/></g></svg> \",\n sortAscending: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path d=\\\"M16.5,10.5 C16.5,10.5,7.5,10.5,7.5,10.5\\\"/><path d=\\\"M14.5,6.5 C14.5,6.5,9.5,6.5,9.5,6.5\\\"/><path d=\\\"M18.5,14.5 C18.5,14.5,5.5,14.5,5.5,14.5\\\"/><path d=\\\"M20.5,18.5 C20.5,18.5,3.5,18.5,3.5,18.5\\\"/></g></svg> \",\n sortDescending: \"<svg class=\\\"stroked\\\" viewBox=\\\"0 0 24 24\\\"><g><path d=\\\"M16.5,14.5 C16.5,14.5,7.5,14.5,7.5,14.5\\\"/><path d=\\\"M14.5,18.5 C14.5,18.5,9.5,18.5,9.5,18.5\\\"/><path d=\\\"M18.5,10.5 C18.5,10.5,5.5,10.5,5.5,10.5\\\"/><path d=\\\"M20.5,6.5 C20.5,6.5,3.5,6.5,3.5,6.5\\\"/></g></svg> \",\n cornerDownLeft: \"cornerDownRight0f\",\n cornerLeftDown: \"cornerRightDown0f\",\n cornerLeftUp: \"cornerRightUp0f\",\n cornerUpLeft: \"cornerUpRight0f\",\n refreshCcw: \"refreshCw0f\",\n rotateCcw: \"rotateCw0f\",\n skipBack: \"skipForward0f\",\n toggleLeft: \"toggleRight0f\",\n thumbsDown: \"thumbsUp1f\",\n arrowDownCircle: \"arrowRightCircle90r\",\n arrowLeftCircle: \"arrowRightCircle180r\",\n arrowUpCircle: \"arrowRightCircle270r\",\n arrowDown: \"arrowRight90r\",\n arrowLeft: \"arrowRight180r\",\n arrowUp: \"arrowRight270r\",\n chevronDown: \"chevronRight90r\",\n chevronLeft: \"chevronRight180r\",\n chevronUp: \"chevronRight270r\",\n chevronsDown: \"chevronsRight90r\",\n chevronsLeft: \"chevronsRight180r\",\n chevronsUp: \"chevronsRight270r\",\n arrowDownRight: \"arrowUpRight90r\",\n arrowDownLeft: \"arrowUpRight180r\",\n arrowUpLeft: \"arrowUpRight270r\"\n} as IconData\n",
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
"/*#\n# carousel\n\n```html\n<tosi-carousel arrows dots max-visible-items=2 auto=2 snap-delay=4 snap-duration=0.5 loop>\n <tosi-icon icon=\"tosiFavicon\" class=\"thing\"></tosi-icon>\n <tosi-icon icon=\"tosi\" class=\"thing\"></tosi-icon>\n <tosi-icon icon=\"tosiUi\" class=\"thing\"></tosi-icon>\n <tosi-icon icon=\"tosiPlatform\" class=\"thing\"></tosi-icon>\n <tosi-icon icon=\"tosiXr\" class=\"thing\"></tosi-icon>\n <tosi-icon icon=\"blueprint\" class=\"thing\"></tosi-icon>\n <tosi-icon icon=\"cmy\" class=\"thing\"></tosi-icon>\n <tosi-icon icon=\"rgb\" class=\"thing\"></tosi-icon>\n</tosi-carousel>\n```\n```css\n.thing {\n --tosi-icon-size: 160px;\n height: 160px;\n margin: 30px 0 70px;\n position: relative;\n}\n\n.thing::after {\n content: attr(icon);\n color: white;\n position: absolute;\n bottom: -50px;\n left: 50%;\n padding: 5px 15px;\n transform: translateX(-50%);\n filter: drop-shadow(0 1px 1px #0008);\n background: #0004;\n border-radius: 5px;\n}\n\n.preview tosi-carousel {\n background: #8883;\n margin: 10px;\n border-radius: 10px;\n}\n```\n\nThis is a minimalist carousel component that supports the usual stuff.\n\n## Attributes\n\n- `arrows` (boolean, false by default) shows/hides the arrow paging controls\n- `dots` (boolean, false by default) shows/hides the dot progress indicators\n- `max-visible-items` (number, 1 by default) determines how many items are shown at once.\n- `snap-duration` (number, 0.25 [seconds] by default) determines the time taken to scroll / snap scroll.\n- `snap-delay` (number, 0.1 [seconds] by default)\n- `loop` (boolean, false by default) causes next/previous buttons to loop\n- `auto` (number, 0 [seconds] by default) if > 0, automatically advances after that many seconds (always loops!)\n\n<tosi-css-var-editor element-selector=\"tosi-carousel\"></tosi-css-var-editor>\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport {\n Component as WebComponent,\n ElementCreator,\n elements,\n vars,\n} from 'tosijs'\nimport { icons } from './icons'\n\nconst { button, slot, div } = elements\n\ninterface CarouselParts {\n [key: string]: HTMLElement\n back: HTMLButtonElement\n forward: HTMLButtonElement\n}\n\nexport class TosiCarousel extends WebComponent {\n static preferredTagName = 'tosi-carousel'\n\n static initAttributes = {\n dots: false,\n arrows: false,\n maxVisibleItems: 1,\n snapDuration: 0.25,\n snapDelay: 0.1,\n loop: false,\n auto: 0,\n }\n\n private lastAutoAdvance = Date.now()\n private interval?: Timer\n\n private autoAdvance = () => {\n if (this.auto > 0 && this.auto * 1000 < Date.now() - this.lastAutoAdvance) {\n this.forward()\n }\n }\n\n private _page = 0\n\n get page(): number {\n return this._page\n }\n\n set page(p: number) {\n const { scroller, back, forward } = this.parts as CarouselParts\n if (this.lastPage <= 0) {\n forward.disabled = back.disabled = true\n p = 0\n } else {\n p = Math.max(0, Math.min(this.lastPage, p))\n p = isNaN(p) ? 0 : p\n }\n if (this._page !== p) {\n this._page = isNaN(p) ? 0 : p\n this.animateScroll(this._page * scroller.offsetWidth)\n back.disabled = this.page <= 0 && !this.loop\n forward.disabled = this.page >= this.lastPage && !this.loop\n }\n }\n\n get visibleItems(): HTMLElement[] {\n return [...this.children].filter(\n (element) => getComputedStyle(element).display !== 'none'\n ) as HTMLElement[]\n }\n\n get lastPage(): number {\n return Math.max(\n Math.ceil(this.visibleItems.length / (this.maxVisibleItems || 1)) - 1,\n 0\n )\n }\n\n static shadowStyleSpec = {\n ':host': {\n _carouselIconSize: 24,\n _carouselButtonColor: '#0004',\n _carouselButtonHoverColor: '#0006',\n _carouselButtonActiveColor: '#000c',\n _carouseButtonWidth: 48,\n _carouselDotCurrentColor: '#0008',\n _carouselDotSize: 8,\n _carouselDotSpacing: vars.carouselDotSize,\n _carouselProgressPadding: 12,\n _carouselDotTransition: '0.125s ease-in-out',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n },\n ':host:focus': {\n outline: 'none',\n boxShadow: 'none',\n },\n ':host svg': {\n height: vars.carouselIconSize,\n },\n ':host button': {\n outline: 'none',\n border: 'none',\n boxShadow: 'none',\n background: 'transparent',\n color: vars.carouselButtonColor,\n padding: 0,\n },\n ':host::part(back), :host::part(forward)': {\n position: 'absolute',\n top: 0,\n bottom: 0,\n width: vars.carouseButtonWidth,\n zIndex: 2,\n },\n ':host::part(back)': {\n left: 0,\n },\n ':host::part(forward)': {\n right: 0,\n },\n ':host button:disabled': {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n ':host button:hover': {\n color: vars.carouselButtonHoverColor,\n },\n ':host button:active': {\n color: vars.carouselButtonActiveColor,\n },\n ':host::part(pager)': {\n position: 'relative',\n },\n ':host::part(scroller)': {\n overflow: 'auto hidden',\n position: 'relative',\n },\n ':host::part(grid)': {\n display: 'grid',\n justifyItems: 'center',\n },\n ':host *::-webkit-scrollbar, *::-webkit-scrollbar-thumb': {\n display: 'none',\n },\n ':host .dot': {\n background: vars.carouselButtonColor,\n borderRadius: vars.carouselDotSize,\n height: vars.carouselDotSize,\n width: vars.carouselDotSize,\n transition: vars.carouselDotTransition,\n },\n ':host .dot:not(.current):hover': {\n background: vars.carouselButtonHoverColor,\n height: vars.carouselDotSize150,\n width: vars.carouselDotSize150,\n margin: vars.carouselDotSize_25,\n },\n ':host .dot:not(.current):active': {\n background: vars.carouselButtonActiveColor,\n },\n ':host .dot.current': {\n background: vars.carouselDotCurrentColor,\n },\n ':host::part(progress)': {\n display: 'flex',\n gap: vars.carouselDotSpacing,\n justifyContent: 'center',\n padding: vars.carouselProgressPadding,\n },\n }\n\n easing = (t: number) => {\n return Math.sin(t * Math.PI * 0.5)\n }\n\n indicateCurrent = () => {\n const { scroller, progress } = this.parts as CarouselParts\n const page = scroller.scrollLeft / scroller.offsetWidth\n ;[...progress.children].forEach((dot, index) => {\n dot.classList.toggle(\n 'current',\n Math.floor(index / this.maxVisibleItems - page) === 0\n )\n })\n this.lastAutoAdvance = Date.now()\n clearTimeout(this.snapTimer)\n this.snapTimer = setTimeout(this.snapPosition, this.snapDelay * 1000)\n }\n\n snapPosition = () => {\n const { scroller } = this.parts as CarouselParts\n const currentPosition = Math.round(\n scroller.scrollLeft / scroller.offsetWidth\n )\n if (currentPosition !== this.page) {\n this.page =\n currentPosition > this.page\n ? Math.ceil(currentPosition)\n : Math.floor(currentPosition)\n }\n this.lastAutoAdvance = Date.now()\n }\n\n back = () => {\n this.page = this.page > 0 ? this.page - 1 : this.lastPage\n }\n\n forward = () => {\n this.page = this.page < this.lastPage ? this.page + 1 : 0\n }\n\n handleDotClick = (event: Event) => {\n const { progress } = this.parts\n const index = [...progress.children].indexOf(event.target as HTMLElement)\n if (index > -1) {\n this.page = Math.floor(index / this.maxVisibleItems)\n }\n }\n\n private snapTimer: any\n private animationFrame: any\n animateScroll(position: number, startingPosition = -1, timestamp = 0) {\n cancelAnimationFrame(this.animationFrame)\n const { scroller } = this.parts\n if (startingPosition === -1) {\n startingPosition = scroller.scrollLeft\n timestamp = Date.now()\n this.animationFrame = requestAnimationFrame(() => {\n this.animateScroll(position, startingPosition, timestamp)\n })\n return\n }\n const elapsed = (Date.now() - timestamp) / 1000\n if (\n elapsed >= this.snapDuration ||\n Math.abs(scroller.scrollLeft - position) < 2\n ) {\n scroller.scrollLeft = position\n this.animationFrame = null\n } else {\n scroller.scrollLeft =\n startingPosition +\n this.easing(elapsed / this.snapDuration) * (position - startingPosition)\n this.animationFrame = requestAnimationFrame(() => {\n this.animateScroll(position, startingPosition, timestamp)\n })\n }\n }\n\n content = () => [\n div(\n { part: 'pager' },\n button({ title: 'previous slide', part: 'back' }, icons.chevronLeft()),\n div(\n { title: 'slides', role: 'group', part: 'scroller' },\n div({ part: 'grid' }, slot())\n ),\n button({ title: 'next slide', part: 'forward' }, icons.chevronRight())\n ),\n div({ title: 'choose slide to display', role: 'group', part: 'progress' }),\n ]\n\n connectedCallback() {\n super.connectedCallback()\n\n this.ariaRoleDescription = 'carousel'\n this.ariaOrientation = 'horizontal'\n this.ariaReadOnly = 'true'\n\n const { back, forward, scroller, progress } = this.parts\n back.addEventListener('click', this.back)\n forward.addEventListener('click', this.forward)\n scroller.addEventListener('scroll', this.indicateCurrent)\n progress.addEventListener('click', this.handleDotClick)\n\n this.lastAutoAdvance = Date.now()\n this.interval = setInterval(this.autoAdvance, 100)\n }\n\n disconnectedCallback() {\n clearInterval(this.interval)\n }\n\n render() {\n super.render()\n\n const { dots, arrows, visibleItems, lastPage } = this\n const { progress, back, forward, grid } = this.parts as CarouselParts\n\n visibleItems.forEach((item) => {\n item.role = 'group'\n })\n grid.style.gridTemplateColumns = `${\n 100 / this.maxVisibleItems / (1 + this.lastPage)\n }% `\n .repeat(visibleItems.length)\n .trim()\n grid.style.width = (1 + this.lastPage) * 100 + '%'\n progress.textContent = ''\n progress.append(\n ...visibleItems.map((_, index) =>\n button({ title: `item ${index + 1}`, class: 'dot' })\n )\n )\n\n this.indicateCurrent()\n progress.style.display = dots && lastPage > 0 ? '' : 'none'\n back.hidden = forward.hidden = !(arrows && lastPage > 0)\n }\n}\n\n/** @deprecated Use TosiCarousel instead */\nexport type XinCarousel = TosiCarousel\n/** @deprecated Use TosiCarousel instead */\nexport const XinCarousel: typeof TosiCarousel = TosiCarousel\n\nexport const tosiCarousel =\n TosiCarousel.elementCreator() as ElementCreator<TosiCarousel>\n\n/** @deprecated Use tosiCarousel instead */\nexport const xinCarousel = tosiCarousel\n",
|
|
13
13
|
"/*#\n# diff\n\n`<tosi-diff>` renders a unified, line-by-line diff between two strings — the kind\nof view you'd see in a code review, with removed lines marked `-` and added\nlines marked `+`.\n\nSet its `original` and `modified` properties (or attributes) to the two versions\nof the text; it recomputes and re-renders. (They're named `original`/`modified`\nrather than `before`/`after` to avoid the native `Element.before()`/`after()`\nmethods.)\n\n```js\nconst { tosiDiff } = tosijsui\n\npreview.append(\n tosiDiff({\n original: 'one\\ntwo\\nthree\\nfour',\n modified: 'one\\nTWO\\nthree\\nfour\\nfive',\n style: { width: '100%', height: '100%' },\n })\n)\n```\n\nThe diff is computed with a longest-common-subsequence pass over the lines, so\nunchanged lines are shown as context and only genuine insertions/deletions are\nhighlighted. The pure `diffLines(before, after)` function is exported too, if you\njust want the data.\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component, ElementCreator, PartsMap, elements } from 'tosijs'\n\nconst { div, span } = elements\n\nexport type DiffOp = 'context' | 'add' | 'remove'\n\nexport interface DiffLine {\n op: DiffOp\n text: string\n}\n\n/**\n * Line-level diff of two strings via longest-common-subsequence, returning each\n * line tagged `context` (unchanged), `remove` (only in `before`), or `add` (only\n * in `after`), in display order.\n */\nexport function diffLines(before: string, after: string): DiffLine[] {\n const a = before.split('\\n')\n const b = after.split('\\n')\n const m = a.length\n const n = b.length\n\n // lcs[i][j] = length of the LCS of a[i:] and b[j:]\n const lcs: number[][] = Array.from({ length: m + 1 }, () =>\n new Array(n + 1).fill(0)\n )\n for (let i = m - 1; i >= 0; i -= 1) {\n for (let j = n - 1; j >= 0; j -= 1) {\n lcs[i][j] =\n a[i] === b[j]\n ? lcs[i + 1][j + 1] + 1\n : Math.max(lcs[i + 1][j], lcs[i][j + 1])\n }\n }\n\n const out: DiffLine[] = []\n let i = 0\n let j = 0\n while (i < m && j < n) {\n if (a[i] === b[j]) {\n out.push({ op: 'context', text: a[i] })\n i += 1\n j += 1\n } else if (lcs[i + 1][j] >= lcs[i][j + 1]) {\n out.push({ op: 'remove', text: a[i] })\n i += 1\n } else {\n out.push({ op: 'add', text: b[j] })\n j += 1\n }\n }\n while (i < m) {\n out.push({ op: 'remove', text: a[i] })\n i += 1\n }\n while (j < n) {\n out.push({ op: 'add', text: b[j] })\n j += 1\n }\n return out\n}\n\ninterface DiffParts extends PartsMap {\n body: HTMLElement\n}\n\nconst MARKER: Record<DiffOp, string> = { context: ' ', add: '+', remove: '-' }\n\nexport class TosiDiff extends Component<DiffParts> {\n static preferredTagName = 'tosi-diff'\n\n // `before`/`after` would collide with the native Element.before()/after()\n // methods, so the component props are `original`/`modified`.\n static initAttributes = {\n original: '',\n modified: '',\n }\n\n static shadowStyleSpec = {\n ':host': {\n display: 'block',\n overflow: 'auto',\n font: 'var(--tosi-code-font, 12px/1.5 monospace)',\n background: 'var(--tosi-diff-bg, #fff)',\n color: 'var(--tosi-diff-color, #222)',\n },\n // `:host{display:block}` would otherwise beat the UA `[hidden]` rule, so the\n // element couldn't be hidden via the attribute — restore that.\n ':host([hidden])': {\n display: 'none',\n },\n '.diff-line': {\n display: 'grid',\n gridTemplateColumns: '1.5em 1fr',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n },\n '.diff-line .marker': {\n textAlign: 'center',\n userSelect: 'none',\n opacity: '0.5',\n },\n '.diff-add': {\n background: 'var(--tosi-diff-add-bg, #e6ffed)',\n },\n '.diff-add .marker': { color: 'var(--tosi-diff-add-color, #22863a)' },\n '.diff-remove': {\n background: 'var(--tosi-diff-remove-bg, #ffeef0)',\n },\n '.diff-remove .marker': { color: 'var(--tosi-diff-remove-color, #cb2431)' },\n }\n\n content = () => [div({ part: 'body' })]\n\n render(): void {\n super.render()\n const lines = diffLines(this.original, this.modified)\n this.parts.body.replaceChildren(\n ...lines.map((line) =>\n div(\n { class: `diff-line diff-${line.op}` },\n span({ class: 'marker' }, MARKER[line.op]),\n // Non-breaking fallback so empty lines keep their row height.\n span({ class: 'text' }, line.text === '' ? ' ' : line.text)\n )\n )\n )\n }\n}\n\nexport const tosiDiff = TosiDiff.elementCreator() as ElementCreator<TosiDiff>\n",
|
|
14
14
|
"/*#\n# code\n\nA [CodeMirror 6](https://codemirror.net/) wrapper.\n\nSometimes, it's nice to be able to just toss a code-editor in a web-page.\n\n`<tosi-code>`'s `value` is the code it contains. Its `mode` attribute sets the\nlanguage (`javascript`, `typescript`, `tjs`, `css`, `html`, `markdown`).\n\n```html\n<tosi-code style=\"width: 100%; height: 100%\" mode=\"css\">\nbody {\n box-sizing: border-box;\n}\n</tosi-code>\n```\n\n## Properties & events\n\n| member | what it does |\n| --- | --- |\n| `value` | the code in the editor (get/set) |\n| `mode` | `javascript`, `typescript`, `tjs`, `ajs`, `css`, `html`, `markdown` |\n| `disabled` | makes the editor read-only |\n| `original` + `showDiff(on)` | diff the current `value` against a baseline, as an overlay |\n| `editor` | the underlying CodeMirror [`EditorView`](https://codemirror.net/docs/ref/#view.EditorView) (`undefined` until loaded) |\n| `undo()` / `redo()` / `canUndo()` / `canRedo()` | history control |\n| `tjsAutocomplete` | runtime-value autocomplete hooks (tjs mode) — see below |\n| `change` event | fires when the text changes; `event.detail.value` is the new text |\n\nIn `tjs`/`ajs` mode the editor loads tjs-lang's CodeMirror language and completion\nsource (if `tjs-lang` is installed — it's an optional peer). Set `tjsAutocomplete`\nto a `TjsAutocompleteConfig` and completion will suggest the **real members of live\nruntime values** — including proxy members no static analysis can see:\n\n```typescript\ncodeEl.tjsAutocomplete = { getLiveBindings: () => ({ app, elements }) }\n```\n\n## Bundling\n\nCodeMirror is a **lazy chunk**: with a bundler (ESM), a page that never uses\n`<tosi-code>` doesn't load it. **This is not true of the IIFE** (`dist/iife.js`) —\nbun's IIFE format cannot code-split, so CodeMirror is inlined there. That is a\ndeliberate trade: the doc-system's editor (and its save-to-source flow) is the\npoint of the IIFE, so it carries the editor. It costs ~376KB gzipped, up from\n~118KB in 1.6.x.\n\n## Migrating from the ACE editor (pre-1.7)\n\n1.7 replaced ACE with CodeMirror 6. `value`, `original`/`showDiff()`, `mode` and\n`disabled` are unchanged. Removed (each warns once, then no-ops):\n\n| removed | replacement |\n| --- | --- |\n| `theme` | style with `--code-bg` / `--text-color` |\n| `options` (ACE-shaped) | configure via `editor` (an `EditorView`) |\n| `ace` | there is no ACE global; use `editor` |\n| `editor.session.getUndoManager()` | `undo()` / `redo()` / `canUndo()` / `canRedo()` |\n\n`editor` **changed type in place** — it was an ACE `Editor`, it is now a CodeMirror\n`EditorView`. Code that reached into it needs revisiting; a grep for removed names\nwon't catch this one.\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport {\n Component as WebComponent,\n ElementCreator,\n elements,\n PartsMap,\n varDefault,\n} from 'tosijs'\nimport { tosiDiff, TosiDiff } from './diff'\nimport type { CmHandle, TjsAutocompleteConfig } from './code-editor-cm'\nexport type { TjsAutocompleteConfig } from './code-editor-cm'\n\nconst { div } = elements\n\n// Warn once per removed member, not once per access — a live-example page holds\n// dozens of editors and a render-loop read would otherwise flood the console.\nconst warned = new Set<string>()\nconst warnRemoved = (member: string, advice: string): void => {\n if (warned.has(member)) return\n warned.add(member)\n console.warn(\n `<tosi-code>.${member} was removed in tosijs-ui 1.7 (the editor is now CodeMirror 6, not ACE) — ${advice}. See CHANGELOG 1.7.0.`\n )\n}\n\ninterface CodeEditorParts extends PartsMap {\n host: HTMLDivElement\n diffHost: HTMLDivElement\n}\n\n// One warning per page, not per element — see the `editor` getter.\nlet warnedEditor = false\nlet warnedTjs = false\n\nexport class CodeEditor extends WebComponent<CodeEditorParts> {\n static preferredTagName = 'tosi-code'\n\n private source = ''\n private _handle: CmHandle | undefined\n private _loadPromise: Promise<CmHandle | undefined> | undefined\n // Bumped on every connect. The lazy chunk resolves asynchronously, so by the time it\n // does, this element may have been removed — or removed and re-added, starting a newer\n // load. Mounting a stale load would build an EditorView nothing ever destroys.\n private _loadGeneration = 0\n private _appliedMode = ''\n private _appliedDisabled: boolean | undefined\n private _tjsAutocomplete: TjsAutocompleteConfig | undefined\n\n /**\n * Runtime-introspection hooks for tjs autocomplete (`getLiveBindings` /\n * `getMembers`) — lets completion suggest the REAL members of live values (e.g.\n * a tosijs proxy or a DOM element) that static analysis can't see. Only used in\n * tjs mode; setting it re-applies the tjs extension so it takes effect live.\n */\n get tjsAutocomplete(): TjsAutocompleteConfig | undefined {\n return this._tjsAutocomplete\n }\n set tjsAutocomplete(config: TjsAutocompleteConfig | undefined) {\n this._tjsAutocomplete = config\n if (this._handle && this.isTjsMode()) this.applyTjsExtension()\n }\n\n get value(): string {\n return this._handle ? this._handle.getValue() : this.source\n }\n\n set value(text: string) {\n if (this._handle) {\n this._handle.setValue(text)\n } else {\n this.source = text\n }\n }\n\n // Baseline for `showDiff()` — the version to diff the current `value` against.\n // Defaults to the current value (no diff) until a caller sets it.\n private _original: string | undefined\n get original(): string {\n return this._original ?? this.value\n }\n set original(text: string) {\n this._original = text\n }\n\n // Diff overlay — built only on the editor's public surface (`value` + `original`)\n // and the tosi-diff component, never the underlying editor's API, so it stays\n // editor-agnostic.\n //\n // It lives in the SHADOW root (the `diffHost` part), not the light DOM. Under the\n // old Ace editor this component had no `content`, so tosijs's default `slot()`\n // filled the shadow root and Ace mounted into the light DOM — a light-DOM overlay\n // projected through that slot. CodeMirror mounts into `[part=host]` inside the\n // shadow root, and this component now declares its own `content`, so there is no\n // slot: `this.append(overlay)` would put it in the light DOM where nothing renders\n // it. (Re-adding a slot is NOT the fix — it would also project the element's\n // textContent, i.e. the initial code, and double-render it under the editor.)\n private diffOverlay: TosiDiff | undefined\n\n // Hydration state comes from the base class (`this.hydrated`), as of tosijs 1.6.9.\n // This used to be a hand-rolled `_partsHydrated` flag — because before 1.6.9 the\n // `parts` proxy poisoned itself on any pre-hydration read (touching it once rooted\n // the proxy at the light-DOM element forever, so the editor never mounted), and\n // there was no public way to ask \"am I hydrated yet?\" without triggering exactly\n // that. 1.6.9 fixed both — it invalidates the cached proxy at hydrate AND exposes\n // `hydrated`/`whenHydrated` — so the flag is gone. (tonioloewald/tosijs#13.)\n\n // A showDiff() call made before hydration, replayed once we're ready. Still needed:\n // `parts` genuinely doesn't exist before hydration (content is injected at connect),\n // so work that touches it is legitimately deferred — that is not the poisoning bug.\n private _pendingDiff: boolean | undefined\n\n get showingDiff(): boolean {\n if (!this.hydrated) return this._pendingDiff ?? false\n return !this.parts.diffHost.hidden\n }\n\n showDiff(on: boolean): void {\n if (!this.hydrated) {\n this._pendingDiff = on\n return\n }\n const { diffHost } = this.parts\n if (on) {\n if (this.diffOverlay === undefined) {\n this.diffOverlay = tosiDiff()\n diffHost.append(this.diffOverlay)\n }\n this.diffOverlay.original = this.original\n this.diffOverlay.modified = this.value\n }\n diffHost.hidden = !on\n }\n\n static initAttributes = {\n mode: 'javascript',\n disabled: false,\n }\n\n role = 'code editor'\n\n /**\n * The underlying CodeMirror `EditorView` (undefined until loaded).\n *\n * **Changed in 1.7 (ACE → CodeMirror 6).** In 1.6 this was an ACE editor, and\n * `editor.session.getUndoManager()` was documented public API. `^1.6.x` resolves\n * 1.7.0, so an app that never changed a line auto-upgrades into a `TypeError` on the\n * next install — and this is the ONE break the warn-once shims below cannot catch,\n * because the property still exists and still returns an object; it is simply a\n * different object. TS consumers get a compile error (1.6 typed this `any`); vanilla\n * JS and CDN consumers — the audience this component's own docs court — would get the\n * bare TypeError with no explanation at all.\n *\n * So: one neutral note on first access. `editor` is NOT deprecated — it is the\n * supported CM6 accessor — so this is `console.info` (not `warn`) and leads with that,\n * to help a 1.6→1.7 migrator without scolding correct CM6 use. Use\n * `undo()`/`redo()`/`canUndo()`/`canRedo()` for history — they survived the migration.\n */\n get editor(): CmHandle['view'] | undefined {\n if (!warnedEditor) {\n warnedEditor = true\n console.info(\n '<tosi-code>.editor is the CodeMirror 6 EditorView (the supported accessor; it ' +\n 'was an ACE editor in 1.6). ACE-era `editor.session` / `getSession()` / ' +\n '`setOption()` are gone — use undo()/redo()/canUndo()/canRedo() for history.'\n )\n }\n return this._handle?.view\n }\n\n // ── Removed in 1.7 (ACE → CodeMirror 6) ────────────────────────────────────\n // `^1.6.x` resolves 1.7.0, so existing consumers auto-upgrade into this. Left as\n // warn-once no-ops rather than simply deleted, so `theme`/`options`/`ace` fail\n // with an actionable message instead of silently doing nothing (or, for `ace`,\n // a bare `TypeError` on undefined). See CHANGELOG 1.7.0 → Breaking.\n\n /** @deprecated Removed in 1.7 — CodeMirror themes via `--code-bg`/`--text-color`. */\n get theme(): string {\n warnRemoved(\n 'theme',\n 'style the editor with --code-bg / --text-color instead'\n )\n return ''\n }\n set theme(_: string) {\n warnRemoved(\n 'theme',\n 'style the editor with --code-bg / --text-color instead'\n )\n }\n\n /** @deprecated Removed in 1.7 — ACE-shaped options have no CodeMirror equivalent. */\n get options(): Record<string, unknown> {\n warnRemoved(\n 'options',\n 'configure CodeMirror via the `editor` (EditorView) instead'\n )\n return {}\n }\n set options(_: Record<string, unknown>) {\n warnRemoved(\n 'options',\n 'configure CodeMirror via the `editor` (EditorView) instead'\n )\n }\n\n /** @deprecated Removed in 1.7 — there is no ACE global; use `editor` (an EditorView). */\n get ace(): undefined {\n warnRemoved('ace', 'use `editor`, which is now a CodeMirror EditorView')\n return undefined\n }\n\n // History control — so consumers use these instead of reaching into `editor`.\n undo(): void {\n this._handle?.undo()\n }\n redo(): void {\n this._handle?.redo()\n }\n canUndo(): boolean {\n return this._handle?.canUndo() ?? false\n }\n canRedo(): boolean {\n return this._handle?.canRedo() ?? false\n }\n\n // `diffHost` starts hidden — an always-present absolutely-positioned overlay would\n // otherwise sit on top of the editor and swallow every click.\n content = () => [\n div({ part: 'host' }),\n div({ part: 'diffHost', hidden: true }),\n ]\n\n static shadowStyleSpec = {\n ':host': {\n display: 'block',\n position: 'relative',\n width: '100%',\n height: '100%',\n },\n '[part=\"host\"]': { height: '100%' },\n '[part=\"diffHost\"]': {\n position: 'absolute',\n inset: '0',\n zIndex: '5',\n overflow: 'auto',\n background: varDefault.tosiDiffBg(varDefault.background('#fff')),\n },\n '.cm-editor': { height: '100%' },\n '.cm-scroller': {\n outline: 'none',\n fontFamily: \"Menlo, Monaco, Consolas, 'Courier New', monospace\",\n },\n }\n\n handleResize() {\n this._handle?.refresh()\n }\n\n connectedCallback() {\n super.connectedCallback()\n // super.connectedCallback() hydrated us, so `this.hydrated` is now true and\n // `this.parts` is safe from here on.\n\n if (this.source === '') {\n this.value = this.textContent !== null ? this.textContent.trim() : ''\n }\n\n // Replay a showDiff() that arrived before we were hydrated.\n if (this._pendingDiff !== undefined) {\n const pending = this._pendingDiff\n this._pendingDiff = undefined\n this.showDiff(pending)\n }\n\n if (this._loadPromise === undefined) {\n // Lazy chunk — CodeMirror only enters the bundle here, on first editor use.\n const generation = ++this._loadGeneration\n this._loadPromise = import('./code-editor-cm').then(\n ({ createCmEditor }) => {\n // The chunk fetch is async, and the pre-load window is WIDE on a cold fetch —\n // doc-browser navigation and closeEditor() both remove editors mid-flight. If we\n // mounted regardless:\n // append → remove → an EditorView built into a detached shadow root,\n // with no disconnectedCallback left to destroy it.\n // append → remove → append → TWO views in the host; `_handle` points only at\n // the second, so the first (and its darkmode\n // listener) is retained forever.\n // That is precisely the leak disconnectedCallback exists to prevent, relocated\n // into the load window. Bail if a newer connect superseded us, or we're detached.\n if (generation !== this._loadGeneration || !this.isConnected)\n return undefined\n const handle = createCmEditor(this.parts.host, {\n value: this.source,\n mode: this.mode,\n readOnly: this.disabled,\n root: this.shadowRoot ?? undefined,\n onChange: (value) =>\n this.dispatchEvent(\n new CustomEvent('change', { detail: { value } })\n ),\n })\n this._handle = handle\n this._appliedMode = this.mode\n this._appliedDisabled = this.disabled\n this.applyTjsExtension()\n return handle\n }\n )\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n // Without this, `CmHandle.destroy()` has no call sites: the EditorView (and its\n // darkmode listener) outlive the element, so every doc-page navigation leaked all\n // ~20 editors on the page.\n if (this._handle) {\n // Preserve the live text first — `value` falls back to `source` once the handle\n // is gone, and `source` would otherwise hold a stale pre-edit value.\n this.source = this._handle.getValue()\n this._handle.destroy()\n this._handle = undefined\n }\n // Re-connecting rebuilds the editor (a destroyed view can't be reused).\n this._loadPromise = undefined\n this._appliedMode = ''\n this._appliedDisabled = undefined\n // NB: do NOT clear `diffOverlay` — hydrate() runs once, so the shadow DOM (and the\n // overlay inside `diffHost`) survives disconnect. Clearing it would append a second\n // overlay on reconnect.\n }\n\n private isTjsMode(): boolean {\n return this.mode === 'tjs' || this.mode === 'ajs'\n }\n\n /**\n * When in tjs mode, lazily upgrade the editor to tjs-lang's CodeMirror language +\n * autocomplete. No-op (keeps TS highlighting) if not tjs, if tjs-lang isn't\n * installed, or if the mode/handle changed before the async load resolved.\n */\n private applyTjsExtension(): void {\n const handle = this._handle\n if (!handle || !this.isTjsMode()) return\n import('./code-editor-cm')\n .then(({ loadTjsExtension }) =>\n loadTjsExtension(this._tjsAutocomplete ?? {})\n )\n .then((ext) => {\n if (ext && this._handle === handle && this.isTjsMode()) {\n handle.setLanguageExtension(ext)\n this._tjsExtensionApplied = true\n return\n }\n // Degrade LOUDLY. `loadTjsExtension` swallows everything and returns null by\n // design, and the guard is `typeof mod.tjsEditorExtension === 'function'` — so\n // an upstream export rename returns null without even throwing, and every tjs\n // editor on the page silently falls back to plain TypeScript highlighting with\n // no autocomplete. Nothing goes red; the feature just quietly isn't there.\n if (!ext && this._handle === handle && this.isTjsMode() && !warnedTjs) {\n warnedTjs = true\n console.warn(\n `<tosi-code mode=\"${this.mode}\">: tjs-lang's CodeMirror extension did not load — ` +\n `falling back to TypeScript highlighting (no tjs autocomplete). Install the ` +\n `optional peer \\`tjs-lang\\`, or check that tjs-lang/editors/codemirror still ` +\n `exports \\`tjsEditorExtension\\`.`\n )\n }\n })\n .catch((e) => {\n // The chain had no .catch(), so any throw here was an unhandled rejection.\n if (!warnedTjs) {\n warnedTjs = true\n console.warn(`<tosi-code>: failed to apply the tjs extension —`, e)\n }\n })\n }\n\n /** True once tjs-lang's CM language+autocomplete is actually live (test seam). */\n get tjsExtensionApplied(): boolean {\n return this._tjsExtensionApplied\n }\n private _tjsExtensionApplied = false\n\n render(): void {\n super.render()\n\n if (this._handle) {\n if (this.disabled !== this._appliedDisabled) {\n this._handle.setReadOnly(this.disabled)\n this._appliedDisabled = this.disabled\n }\n if (this.mode !== this._appliedMode) {\n this._handle.setMode(this.mode)\n this._appliedMode = this.mode\n this.applyTjsExtension()\n }\n }\n }\n}\n\nexport const codeEditor =\n CodeEditor.elementCreator() as ElementCreator<CodeEditor>\n",
|
|
15
|
-
"/*#\n\n# color input field\n\nThis is a color input field that supports opacity\n\n```js\nconst colorInput = preview.querySelector('tosi-color')\nconst circle = preview.querySelector('div')\n\ncolorInput.addEventListener('change', () => {\n circle.style.background = colorInput.value\n})\n```\n```html\n<tosi-color value=\"red\"></tosi-color>\n<div\n style=\"\n width: 200px;\n height: 200px;\n background: red;\n border-radius: 100px;\n \"\n></div>\n```\n\n\n<tosi-css-var-editor element-selector=\"tosi-color\"></tosi-css-var-editor>\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component,\n ElementCreator,\n elements,\n Color,\n vars,\n PartsMap,\n} from 'tosijs'\n\nconst { input } = elements\n\nconst defaultColor = Color.fromCss('#8888')\n\ninterface ColorParts extends PartsMap {\n rgb: HTMLInputElement\n alpha: HTMLInputElement\n css: HTMLInputElement\n}\n\nclass ColorInput extends Component<ColorParts> {\n static preferredTagName = 'tosi-color'\n\n value = defaultColor.rgba\n color = defaultColor\n\n static shadowStyleSpec = {\n ':host': {\n _gap: 8,\n _swatchSize: 32,\n _cssWidth: 72,\n _alphaWidth: 72,\n display: 'inline-flex',\n gap: vars.gap,\n alignItems: 'center',\n },\n ':host input[type=\"color\"]': {\n border: 0,\n width: vars.swatchSize,\n height: vars.swatchSize,\n background: 'transparent',\n },\n ':host::part(alpha)': {\n width: vars.alphaWidth,\n },\n ':host::part(css)': {\n width: vars.cssWidth,\n fontFamily: 'monospace',\n },\n }\n\n content = [\n input({ title: 'base color', type: 'color', part: 'rgb' }),\n input({\n type: 'range',\n title: 'opacity',\n part: 'alpha',\n min: 0,\n max: 1,\n step: 0.05,\n }),\n input({ title: 'css color spec', part: 'css' }),\n ]\n\n
|
|
15
|
+
"/*#\n\n# color input field\n\nThis is a color input field that supports opacity\n\n```js\nconst colorInput = preview.querySelector('tosi-color')\nconst circle = preview.querySelector('div')\n\ncolorInput.addEventListener('change', () => {\n circle.style.background = colorInput.value\n})\n```\n```html\n<tosi-color value=\"red\"></tosi-color>\n<div\n style=\"\n width: 200px;\n height: 200px;\n background: red;\n border-radius: 100px;\n \"\n></div>\n```\n\n\n<tosi-css-var-editor element-selector=\"tosi-color\"></tosi-css-var-editor>\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component,\n ElementCreator,\n elements,\n Color,\n vars,\n PartsMap,\n} from 'tosijs'\n\nconst { input } = elements\n\nconst defaultColor = Color.fromCss('#8888')\n\ninterface ColorParts extends PartsMap {\n rgb: HTMLInputElement\n alpha: HTMLInputElement\n css: HTMLInputElement\n}\n\nclass ColorInput extends Component<ColorParts> {\n static preferredTagName = 'tosi-color'\n\n value = defaultColor.rgba\n color = defaultColor\n\n static shadowStyleSpec = {\n ':host': {\n _gap: 8,\n _swatchSize: 32,\n _cssWidth: 72,\n _alphaWidth: 72,\n display: 'inline-flex',\n gap: vars.gap,\n alignItems: 'center',\n },\n ':host input[type=\"color\"]': {\n border: 0,\n width: vars.swatchSize,\n height: vars.swatchSize,\n background: 'transparent',\n },\n ':host::part(alpha)': {\n width: vars.alphaWidth,\n },\n ':host::part(css)': {\n width: vars.cssWidth,\n fontFamily: 'monospace',\n },\n }\n\n content = [\n input({ title: 'base color', type: 'color', part: 'rgb' }),\n input({\n type: 'range',\n title: 'opacity',\n part: 'alpha',\n min: 0,\n max: 1,\n step: 0.05,\n }),\n input({ title: 'css color spec', part: 'css' }),\n ]\n\n update = (event: Event) => {\n const { rgb, alpha, css } = this.parts\n if (event.type === 'input') {\n this.color = Color.fromCss(rgb.value)\n this.color.a = Number(alpha.value)\n css.value = this.color.html\n } else {\n this.color = Color.fromCss(css.value)\n rgb.value = this.color.html.substring(0, 7)\n alpha.value = String(this.color.a)\n }\n rgb.style.opacity = String(this.color.a)\n this.value = this.color.rgba\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n const { rgb, alpha, css } = this.parts\n rgb.addEventListener('input', this.update)\n alpha.addEventListener('input', this.update)\n css.addEventListener('change', this.update)\n }\n\n render() {\n const { rgb, alpha, css } = this.parts\n this.color = Color.fromCss(this.value)\n const rgba = this.color.rgba\n const alphaStr = String(this.color.a)\n\n // Idempotent: only WRITE an input whose value doesn't already represent this\n // colour. Compare the PARSED colour, not the string — `#rrggbb` and `rgba(...)`\n // are the same colour, so a string compare (or a blind write) would clobber the\n // caret / selection and re-round-trip the user's format on the field they're\n // editing, every render. Skipping provably-redundant work is right; a `valueChanged`\n // timing flag to decide it was the fragile part (broke under tosijs 1.7.7).\n const sameColor = (v: string): boolean => {\n try {\n return Color.fromCss(v).rgba === rgba\n } catch {\n return false\n }\n }\n if (!sameColor(rgb.value)) rgb.value = this.color.html.substring(0, 7)\n if (rgb.style.opacity !== alphaStr) rgb.style.opacity = alphaStr\n if (alpha.value !== alphaStr) alpha.value = alphaStr\n if (!sameColor(css.value)) css.value = this.color.html\n }\n}\n\nexport const colorInput =\n ColorInput.elementCreator() as ElementCreator<ColorInput>\n",
|
|
16
16
|
"import { elements } from 'tosijs'\n\ntype TrackerCallback = (\n dx: number,\n dy: number,\n event: PointerEvent\n) => boolean | undefined\n\n/*#\n# trackDrag\n\nSometimes you want to track a mouse-drag or touch-drag operation without messing around.\nThis is how the resizeable columns in `<tosi-table>` work.\n\nJust call `trackDrag(event, (dx, dy, event) => { ... })` and you'll get updates on corresponding events until\nyou return `true` from the event-handler (or, in the case of `touch` events, the last `touch` ends).\nFor mouse events, a \"tracker\" element is thrown up in front of everything for the event.\n\n```html\n<p>\n Try dragging the squares…<br>\n (You can drag them separately with multi-touch!)\n</p>\n<div class=\"draggable\" style=\"top: 20px; left: 40px; background: #f008\"></div>\n<div class=\"draggable\" style=\"left: 40%; bottom: 30%; background: #0f08\"></div>\n<div class=\"draggable\" style=\"bottom: 30px; right: 10px; background: #00f8\"></div>\n```\n```css\n.preview {\n touch-action: none;\n}\n\n.draggable {\n content: ' ';\n position: absolute;\n width: 50px;\n height: 50px;\n cursor: move;\n}\n\n.preview p {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n}\n```\n```js\nimport { trackDrag } from 'tosijs-ui'\n\nfunction dragItem(event) {\n const draggable = event.target\n if (draggable.classList.contains('draggable')) {\n const x = draggable.offsetLeft\n const y = draggable.offsetTop\n trackDrag(event, (dx, dy, event) => {\n draggable.style.left = (x + dx) + 'px'\n draggable.style.top = (y + dy) + 'px'\n draggable.style.bottom = 'auto'\n draggable.style.right = 'auto'\n return event.type === 'mouseup'\n })\n }\n}\n\npreview.addEventListener('mousedown', dragItem )\npreview.addEventListener('touchstart', dragItem, { passive: true } )\n```\n\nFor `touch` events, `dx` and `dy` are based on tracking `event.changedTouches[0]` which\nis almost certainly what you want.\n\nTo handle multi-touch gestures you will need to track the touches yourself.\n\n## bringToFront\n\n`bringToFront(element: HTMLElement, selector = 'body *')` gives the element the highest\n`z-index` of any element matching the selector (which is passed to findHighestZ).\n\n## findHighestZ\n\n`findHighestZ(selector = 'body *'): number` returns the the highest `z-index` of any element\nmatching `selector`.\n*/\n\n/*{ \"parent\": \"Helper Libraries\" }*/\nconst TRACKER = elements.div({\n style: {\n content: ' ',\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n})\n\nconst PASSIVE = { passive: true }\n\nexport const trackDrag = (\n event: PointerEvent,\n callback: TrackerCallback,\n cursor = 'move'\n): void => {\n const isTouchEvent = event.type.startsWith('touch')\n\n if (!isTouchEvent) {\n const origX = event.clientX\n const origY = event.clientY\n\n TRACKER.style.cursor = cursor\n bringToFront(TRACKER)\n document.body.append(TRACKER)\n\n const wrappedCallback = (event: any) => {\n const dx = event.clientX - origX\n const dy = event.clientY - origY\n if (callback(dx, dy, event) === true) {\n TRACKER.removeEventListener('mousemove', wrappedCallback)\n TRACKER.removeEventListener('mouseup', wrappedCallback)\n TRACKER.remove()\n }\n }\n\n TRACKER.addEventListener('mousemove', wrappedCallback, PASSIVE)\n TRACKER.addEventListener('mouseup', wrappedCallback, PASSIVE)\n } else if (event instanceof TouchEvent) {\n const touch = event.changedTouches[0]\n const touchId = touch.identifier\n const origX = touch.clientX\n const origY = touch.clientY\n const target: any = event.target\n\n let dx = 0\n let dy = 0\n const wrappedCallback = (event: any) => {\n const touch = [...event.touches].find(\n (touch) => touch.identifier === touchId\n )\n if (touch !== undefined) {\n dx = touch.clientX - origX\n dy = touch.clientY - origY\n }\n if (event.type === 'touchmove') {\n event.stopPropagation()\n event.preventDefault()\n }\n if (callback(dx, dy, event) === true || touch === undefined) {\n target.removeEventListener('touchmove', wrappedCallback)\n target.removeEventListener('touchend', wrappedCallback)\n target.removeEventListener('touchcancel', wrappedCallback)\n }\n }\n\n target.addEventListener('touchmove', wrappedCallback)\n target.addEventListener('touchend', wrappedCallback, PASSIVE)\n target.addEventListener('touchcancel', wrappedCallback, PASSIVE)\n }\n}\n\nexport const findHighestZ = (selector = 'body *'): number =>\n [...document.querySelectorAll(selector)]\n .map((elt) => parseFloat(getComputedStyle(elt).zIndex))\n .reduce(\n (z, highest) => (isNaN(z) || Number(z) < highest ? highest : Number(z)),\n 0\n )\n\nexport const bringToFront = (\n element: HTMLElement,\n selector = 'body *'\n): void => {\n element.style.zIndex = String(findHighestZ(selector) + 1)\n}\n",
|
|
17
17
|
"export type SortValuator<T = object> = (f: T) => (string | number)[]\n\nexport type SortCallback<T = object> = (p: T, q: T) => number\n\n/*#\n# makeSorter\n\nI'm always confusing myself when writing sort functions, so I wrote `makeSorter()`. It's\ninsanely simple and just works™. It makes writing an array sort callback for anything\nother than an array of numbers or strings easier.\n\n```js\nimport { select, option, div, span, ul, li } from 'tosijs'.elements\nimport { icons, makeSorter } from 'tosijs-ui'\n\nconst people = [\n { first: 'Frasier', last: 'Crane', age: 38 },\n { first: 'Lilith', last: 'Crane', age: 37 },\n { first: 'Rebecca', last: 'Howe', age: 35 },\n { first: 'Woody', last: 'Boyd', age: 25 },\n { first: 'Sam', last: 'Malone', age: 40 },\n { first: 'Norm', last: 'Peterson', age: 38 },\n]\n\nconst sorters = {\n firstSort: makeSorter(person => [person.first]),\n firstDescSort: makeSorter(person => [person.first], false),\n nameSort: makeSorter(person => [person.last, person.first]),\n ageFirst: makeSorter(person => [-person.age, person.last]),\n ageLast: makeSorter(person => [person.age, person.first], [true, false]),\n}\n\nfunction person({first, last, age}) {\n return li(`${first} ${last}, ${age}`)\n}\n\nconst list = ul()\nsortPicker = select(\n option('Sort by first', {value: 'firstSort'}),\n option('Sort by first (desc)', {value: 'firstDescSort'}),\n option('Sort by last, first', {value: 'nameSort'}),\n option('Sort by age (desc), first', {value: 'ageFirst'}),\n option('Sort by age, last (desc)', {value: 'ageLast'}),\n {\n onChange: render,\n value: 'nameSort'\n },\n)\n\nfunction render () {\n list.textContent = ''\n list.append(...people.sort(sorters[sortPicker.value]).map(person))\n}\n\npreview.append(\n div(\n sortPicker,\n icons.chevronDown()\n ),\n list\n)\n\nrender()\n```\n```css\n.preview {\n padding: var(--spacing);\n}\n\n.preview div {\n position: absolute;\n top: var(--spacing);\n right: var(--spacing);\n}\n```\n\n## Details\n\nTo create a sort callback that sorts by propA then propB (if propA is tied):\n\n```\nconst sorter = makeSorter(\n obj => [obj.propA, obj.propB]\n)\n```\n\nAs above, but sort descending:\n```\nconst sorter = makeSorter(\n obj => [obj.propA, obj.propB],\n false\n)\n```\n\nAs above but propA is sorted ascending, propB descending\n```\nconst sorter = makeSorter(\n obj => [obj.propA, obj.propB],\n [true, false]\n)\n```\n*/\n\n/*{ \"parent\": \"Helper Libraries\" }*/\n\nexport function makeSorter<T>(\n sortValuator: SortValuator<T>,\n ascending: boolean | boolean[] = true\n): SortCallback<T> {\n return (p: any, q: any) => {\n const pSort = sortValuator(p)\n const qSort = sortValuator(q)\n for (const i in pSort) {\n if (pSort[i] !== qSort[i]) {\n const isAscending = Array.isArray(ascending)\n ? ascending[i] !== false\n : ascending\n return isAscending\n ? pSort[i] > qSort[i]\n ? 1\n : -1\n : pSort[i] > qSort[i]\n ? -1\n : 1\n }\n }\n return 0\n }\n}\n",
|
|
18
18
|
"/*#\n# float\n\nA floating, potentially draggable user interface element.\n\n```html\n<tosi-float class=\"float\" remain-on-resize=\"remain\" remain-on-scroll=\"remain\" drag>\n <h4>Drag Me</h4>\n <div class=\"no-drag balloon\">🎈</div>\n <div class=\"behavior\">I ignore resizing and scrolling</div>\n <footer style=\"font-size: 75%\">neunundneunzig pixel-ballon</footer>\n</tosi-float>\n\n<tosi-float class=\"float\" remain-on-scroll=\"remain\" style=\"top: 50px; right: 20px;\" drag>\n <h4>Drag Me</h4>\n <div class=\"no-drag balloon\">🎈</div>\n <div class=\"behavior\">I disappear on resize</div>\n <footer style=\"font-size: 75%\">neunundneunzig pixel-ballon</footer>\n</tosi-float>\n\n<tosi-float class=\"float\" remain-on-resize=\"remain\" remain-on-scroll=\"remove\" style=\"bottom: 20px; left: 50px;\" drag>\n <h4>Drag Me</h4>\n <div class=\"no-drag balloon\">🎈</div>\n <div class=\"behavior\">I disappear on scroll</div>\n <footer style=\"font-size: 75%\">neunundneunzig pixel-ballon</footer>\n</tosi-float>\n```\n```css\n.preview .float {\n width: 220px;\n height: 180px;\n padding: 0;\n gap: 5px;\n display: flex;\n flex-direction: column;\n border-radius: 5px;\n background: #fff8;\n box-shadow: 2px 10px 20px #0004;\n overflow: hidden;\n cursor: move;\n}\n\n.preview h4 {\n margin: 0;\n padding: 5px 10px;\n color: white;\n background: red;\n}\n\n.preview .balloon {\n cursor: default;\n flex: 1 1 auto;\n font-size: 99px;\n line-height: 120px;\n text-align: center;\n height: auto;\n overflow: hidden;\n}\n\n.preview .behavior {\n position: absolute;\n bottom: 16px;\n left: 8px;\n right: 8px;\n background: #fffc;\n}\n\n.preview footer {\n text-align: center;\n background: #f008;\n color: white;\n```\n\n## Styling\n\nNote that the `<tosi-float>` element has absolutely minimal styling. It's up to you to provide a drop\nshadow and background and so on.\n\n## Attributes\n\n- `drag` false | true — to make a `<tosi-float>` element draggable, simply set its `drag` attribute.\n- `remain-on-resize` 'remove' | 'hide' | 'remain' — by default, floats will hide if the window is resized\n- `remain-on-scroll` 'remain' | 'remove' | 'hide' — by default, floats will remain if the document is scrolled\n\nNote that `remain-on-scroll` behavior applies to any scrolling in the document (including within the float) so\nif you want finer-grained disappearing behavior triggered by scrolling, you might want to implement it yourself.\n\nTo prevent dragging for an interior element (e.g. if you want a floating palette with buttons or input fields)\njust add the `no-drag` class to an element or its container.\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component as WebComponent, elements, ElementCreator } from 'tosijs'\nimport { trackDrag, bringToFront } from './track-drag'\n\nconst { slot } = elements\n\nexport class TosiFloat extends WebComponent {\n static preferredTagName = 'tosi-float'\n static floats: Set<TosiFloat> = new Set()\n\n static initAttributes = {\n drag: false,\n remainOnResize: 'remove' as 'hide' | 'remove' | 'remain',\n remainOnScroll: 'remain' as 'hide' | 'remove' | 'remain',\n }\n\n content = slot()\n\n static shadowStyleSpec = {\n ':host': {\n position: 'fixed',\n },\n }\n\n reposition = (event: Event) => {\n if (event instanceof MouseEvent && event.button !== 0) {\n return\n }\n const target = event.target as HTMLElement | null\n if (target?.closest('.no-drag')) {\n return\n }\n if (this.drag) {\n bringToFront(this)\n const x = this.offsetLeft\n const y = this.offsetTop\n\n trackDrag(\n event as PointerEvent,\n (\n dx: number,\n dy: number,\n pointerEvent: PointerEvent\n ): true | undefined => {\n this.style.left = `${x + dx}px`\n this.style.top = `${y + dy}px`\n this.style.right = 'auto'\n this.style.bottom = 'auto'\n if (pointerEvent.type === 'mouseup') {\n return true\n }\n }\n )\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n ensureFloatListeners()\n TosiFloat.floats.add(this)\n const PASSIVE = { passive: true }\n this.addEventListener('touchstart', this.reposition, PASSIVE)\n this.addEventListener('mousedown', this.reposition, PASSIVE)\n bringToFront(this)\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n\n TosiFloat.floats.delete(this)\n }\n}\n\n/** @deprecated Use TosiFloat instead */\nexport type XinFloat = TosiFloat\n/** @deprecated Use TosiFloat instead */\nexport const XinFloat: typeof TosiFloat = TosiFloat\n\nexport const tosiFloat = TosiFloat.elementCreator() as ElementCreator<TosiFloat>\n\n/** @deprecated Use tosiFloat instead */\nexport const xinFloat = tosiFloat\n\n// Register the global reposition/dismiss handlers on first float connecting,\n// not at import (keeps the module side-effect-free for tree-shaking). They\n// iterate TosiFloat.floats, so they're no-ops until a float exists — registered\n// once, no teardown needed.\nlet floatListenersRegistered = false\nfunction ensureFloatListeners(): void {\n if (floatListenersRegistered) return\n floatListenersRegistered = true\n window.addEventListener(\n 'resize',\n () => {\n Array.from(TosiFloat.floats).forEach((float: TosiFloat) => {\n if (float.remainOnResize === 'hide') {\n float.hidden = true\n } else if (float.remainOnResize === 'remove') {\n float.remove()\n }\n })\n },\n { passive: true }\n )\n\n document.addEventListener(\n 'scroll',\n (event: Event) => {\n if (\n event.target instanceof HTMLElement &&\n event.target.closest(TosiFloat.tagName as string)\n ) {\n return\n }\n Array.from(TosiFloat.floats).forEach((float: TosiFloat) => {\n if (float.remainOnScroll === 'hide') {\n float.hidden = true\n } else if (float.remainOnScroll === 'remove') {\n float.remove()\n }\n })\n },\n { passive: true, capture: true }\n )\n}\n",
|
|
19
|
-
"/*#\n# popFloat\n\nThere are so many cases in user-interfaces where it's useful to pop-up a floating\nuser interface element that a simple and reliable way of doing this seems like\na good idea.\n\nThe problem with many such approaches is that they assume a highly specific\nuse-case (e.g. popup menu or combo box) and while meeting the creator's intended\npurpose admirably, turn out to have some annoying limitation that prevents them\nhandling the specific case at hand.\n\n```js\nimport { popFloat, positionFloat } from 'tosijs-ui'\nimport { button } from 'tosijs'.elements\nconst grid = preview.querySelector('.grid')\n\ngrid.addEventListener('click', (event) => {\n const { target } = event\n if (!target.closest('button')) {\n return\n }\n const float = document.querySelector('.popped-float')\n if (float === null) {\n // create and position a float\n popFloat({\n class: 'popped-float',\n content: [\n 'hello, I am a float',\n button('close me', {\n onClick(event){\n event.target.closest('tosi-float').remove()\n }\n })\n ],\n target,\n position: target.dataset.float,\n remainOnScroll: 'remove',\n remainOnResize: 'remove'\n })\n } else {\n // position an existing float\n positionFloat(float, target, target.dataset.float, 'remove', 'remove')\n }\n})\n```\n```html\n<h2>Pop Float Demo</h2>\n<div class=\"grid\">\n <button data-float=\"nw\">nw</button>\n <button data-float=\"n\">n</button>\n <button data-float=\"ne\">ne</button>\n <button data-float=\"wn\">wn</button>\n <span> </span>\n <button data-float=\"en\">en</button>\n <button data-float=\"w\">w</button>\n <button data-float=\"auto\">auto</button>\n <button data-float=\"e\">e</button>\n <button data-float=\"ws\">ws</button>\n <button data-float=\"side\">side</button>\n <button data-float=\"es\">es</button>\n <button data-float=\"sw\">sw</button>\n <button data-float=\"s\">s</button>\n <button data-float=\"se\">se</button>\n</div>\n```\n```css\n.preview .grid {\n display: grid;\n grid-template-columns: 80px 80px 80px;\n}\n\n.popped-float {\n display: flex;\n flex-direction: column;\n border-radius: 5px;\n padding: 10px 15px;\n background: var(--inset-bg);\n box-shadow:\n inset 0 0 0 1px var(--brand-color),\n 2px 10px 5px #0004;\n}\n```\n\n## popFloat\n\n```\nexport interface PopFloatOptions {\n class?: string\n content: HTMLElement | ElementPart[]\n target: HTMLElement\n position?: FloatPosition\n remainOnResize?: 'hide' | 'remove' | 'remain' // default is 'remove',\n remainOnScroll?: 'hide' | 'remove' | 'remain' // default is 'remain',\n draggable?: boolean\n}\n\nexport const popFloat = (options: PopFloatOptions): TosiFloat\n```\n\nCreate a `<tosi-float>` with the content provided, positioned as specified (or automatically).\n\n## positionFloat\n\n```\nexport const positionFloat = (\n element: HTMLElement,\n target: HTMLElement,\n position?: FloatPosition,\n remainOnScroll: 'hide' | 'remove' | 'remain' = 'remain',\n remainOnResize: 'hide' | 'remove' | 'remain' = 'remove',\n draggable = false\n): void\n```\n\nThis allows you to, for example, provide a global menu that can be used on any element\ninstead of needing to have a whole instance of the menu wrapped around every instance\nof the thing you want the menu to affect (a common anti-pattern of front-end frameworks).\n\n### Handling Overflow\n\n`positionFloat` automatically sets two css-variables `--max-height` and `--max-width` on\nthe floating element to help you deal with overflow (e.g. in menus). E.g. if the float\nis positioned with `top: 125px` then it will set `--max-height: calc(100vh - 125px)`.\n\n## FloatPosition\n\n```\nexport type FloatPosition =\n| 'n'\n| 's'\n| 'e'\n| 'w'\n| 'ne'\n| 'nw'\n| 'se'\n| 'sw'\n| 'en'\n| 'wn'\n| 'es'\n| 'ws'\n| 'side'\n| 'auto'\n```\n\n## Draggable\n\nSometimes it's nice to have popup palettes and modeless dialogs the user can drag away.\n`popFloat()` makes this really easy to do.\n\n```js\nimport { elements } from 'tosijs'\nimport { popFloat, icons } from 'tosijs-ui'\n\nconst { button, h4, p } = elements\n\npreview.append(button(\n 'Draggable Popup',\n {\n class: 'spawn-draggable',\n onClick(event) {\n popFloat({\n class: 'tearoff',\n content: [\n h4('Move me!'),\n p('I’m delicious!'),\n button(\n icons.x(),\n {\n class: 'no-drag close-tearoff',\n onClick(event) {\n event.target.closest('tosi-float').remove()\n }\n }\n )\n ],\n target: event.target,\n remainOnScroll: 'remain',\n remainOnResize: 'remain',\n draggable: true,\n })\n }\n },\n))\n```\n```css\n.tearoff {\n --tearoff-bg: #fff6;\n --tearoff-button-bg: #fff2;\n --tearoff-color: #222;\n --tearoff-hilite: #fff8;\n --tearoff-shadow: #0002;\n display: flex;\n flex-direction: column;\n border-radius: 20px;\n padding: 10px 15px;\n background: var(--tearoff-bg);\n backdrop-filter: blur(6px);\n box-shadow:\n inset 1px 1px 0 1px var(--tearoff-hilite),\n inset -1px -1px 0 1px var(--tearoff-shadow),\n 2px 5px 10px var(--tearoff-shadow);\n width: 200px;\n color: var(--tearoff-color);\n --text-color: var(--tearoff-color);\n}\n\n.darkmode .tearoff {\n --tearoff-bg: #0004;\n --tearoff-button-bg: #0001;\n --tearoff-color: #fff;\n}\n\n.tearoff > :first-child {\n margin-top: 0;\n}\n\n.tearoff > :last-child {\n margin-bottom: 0;\n}\n\n.spawn-draggable {\n margin: 10px;\n}\n\n.close-tearoff {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 32px;\n height: 32px;\n text-align: center;\n padding: 0;\n line-height: 32px;\n background: var(--tearoff-button-bg);\n border-radius: 100px;\n box-shadow:\n inset 1px 1px 0 1px var(--tearoff-hilite),\n inset -1px -1px 0 1px var(--tearoff-shadow);\n}\n```\n\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { ElementPart } from 'tosijs'\nimport { tosiFloat, TosiFloat } from './float'\nimport { bringToFront } from './track-drag'\n\nexport type FloatPosition =\n | 'n'\n | 's'\n | 'e'\n | 'w'\n | 'ne'\n | 'nw'\n | 'se'\n | 'sw'\n | 'en'\n | 'wn'\n | 'es'\n | 'ws'\n | 'side'\n | 'auto'\n\nexport interface PopFloatOptions {\n class?: string\n content: HTMLElement | ElementPart[]\n target: HTMLElement\n position?: FloatPosition\n remainOnScroll?: 'hide' | 'remove' | 'remain'\n remainOnResize?: 'hide' | 'remove' | 'remain'\n draggable?: boolean\n}\n\nexport const popFloat = (options: PopFloatOptions): TosiFloat => {\n const {\n content,\n target,\n position,\n remainOnScroll,\n remainOnResize,\n draggable,\n } = options\n const float = Array.isArray(content)\n ? tosiFloat(...content)\n : tosiFloat(content)\n\n positionFloat(\n float,\n target,\n position,\n remainOnScroll,\n remainOnResize,\n draggable\n )\n if (options.class) {\n float.setAttribute('class', options.class)\n }\n document.body.append(float)\n return float\n}\n\nexport const positionFloat = (\n element: TosiFloat,\n target: HTMLElement,\n position?: FloatPosition,\n remainOnScroll?: 'hide' | 'remove' | 'remain',\n remainOnResize?: 'hide' | 'remove' | 'remain',\n draggable = false\n): void => {\n {\n const { position } = getComputedStyle(element)\n if (position !== 'fixed') {\n element.style.position = 'fixed'\n }\n if (remainOnResize) element.remainOnResize = remainOnResize\n if (remainOnScroll) element.remainOnScroll = remainOnScroll\n bringToFront(element)\n }\n element.drag = draggable\n const { left, top, width, height } = target.getBoundingClientRect()\n const cx = left + width * 0.5\n const cy = top + height * 0.5\n const w = window.innerWidth\n const h = window.innerHeight\n if (position === 'side') {\n position = ((cx < w * 0.5 ? 'e' : 'w') +\n (cy < h * 0.5 ? 's' : 'n')) as FloatPosition\n } else if (position === 'auto' || position === undefined) {\n position = ((cy < h * 0.5 ? 's' : 'n') +\n (cx < w * 0.5 ? 'e' : 'w')) as FloatPosition\n }\n element.style.top =\n element.style.left =\n element.style.right =\n element.style.bottom =\n element.style.transform =\n ''\n if (position.length === 2) {\n const [first, second] = position\n switch (first) {\n case 'n':\n element.style.bottom = (h - top).toFixed(2) + 'px'\n break\n case 'e':\n element.style.left = (left + width).toFixed(2) + 'px'\n break\n case 's':\n element.style.top = (top + height).toFixed(2) + 'px'\n break\n case 'w':\n element.style.right = (w - left).toFixed(2) + 'px'\n break\n }\n\n switch (second) {\n case 'n':\n element.style.bottom = (h - top - height).toFixed(2) + 'px'\n break\n case 'e':\n element.style.left = left.toFixed(2) + 'px'\n break\n case 's':\n element.style.top = top.toFixed(2) + 'px'\n break\n case 'w':\n element.style.right = (w - left - width).toFixed(2) + 'px'\n break\n }\n element.style.transform = ''\n } else if (position === 'n') {\n element.style.bottom = (h - top).toFixed(2) + 'px'\n element.style.left = cx.toFixed(2) + 'px'\n element.style.transform = 'translateX(-50%)'\n } else if (position === 's') {\n element.style.top = (top + height).toFixed(2) + 'px'\n element.style.left = cx.toFixed(2) + 'px'\n element.style.transform = 'translateX(-50%)'\n } else if (position === 'e') {\n element.style.left = (left + width).toFixed(2) + 'px'\n element.style.top = cy.toFixed(2) + 'px'\n element.style.transform = 'translateY(-50%)'\n } else if (position === 'w') {\n element.style.right = (w - left).toFixed(2) + 'px'\n element.style.top = cy.toFixed(2) + 'px'\n element.style.transform = 'translateY(-50%)'\n }\n element.style.setProperty(\n '--max-height',\n `calc(100vh - ${element.style.top || element.style.bottom})`\n )\n element.style.setProperty(\n '--max-width',\n `calc(100vw - ${element.style.left || element.style.right})`\n )\n}\n",
|
|
19
|
+
"/*#\n# popFloat\n\nThere are so many cases in user-interfaces where it's useful to pop-up a floating\nuser interface element that a simple and reliable way of doing this seems like\na good idea.\n\nThe problem with many such approaches is that they assume a highly specific\nuse-case (e.g. popup menu or combo box) and while meeting the creator's intended\npurpose admirably, turn out to have some annoying limitation that prevents them\nhandling the specific case at hand.\n\n```js\nimport { popFloat, positionFloat } from 'tosijs-ui'\nimport { button } from 'tosijs'.elements\nconst grid = preview.querySelector('.grid')\n\ngrid.addEventListener('click', (event) => {\n const { target } = event\n if (!target.closest('button')) {\n return\n }\n const float = document.querySelector('.popped-float')\n if (float === null) {\n // create and position a float\n popFloat({\n class: 'popped-float',\n content: [\n 'hello, I am a float',\n button('close me', {\n onClick(event){\n event.target.closest('tosi-float').remove()\n }\n })\n ],\n target,\n position: target.dataset.float,\n remainOnScroll: 'remove',\n remainOnResize: 'remove'\n })\n } else {\n // position an existing float\n positionFloat(float, target, target.dataset.float, 'remove', 'remove')\n }\n})\n```\n```html\n<h2>Pop Float Demo</h2>\n<div class=\"grid\">\n <button data-float=\"nw\">nw</button>\n <button data-float=\"n\">n</button>\n <button data-float=\"ne\">ne</button>\n <button data-float=\"wn\">wn</button>\n <span> </span>\n <button data-float=\"en\">en</button>\n <button data-float=\"w\">w</button>\n <button data-float=\"auto\">auto</button>\n <button data-float=\"e\">e</button>\n <button data-float=\"ws\">ws</button>\n <button data-float=\"side\">side</button>\n <button data-float=\"es\">es</button>\n <button data-float=\"sw\">sw</button>\n <button data-float=\"s\">s</button>\n <button data-float=\"se\">se</button>\n</div>\n```\n```css\n.preview .grid {\n display: grid;\n grid-template-columns: 80px 80px 80px;\n}\n\n.popped-float {\n display: flex;\n flex-direction: column;\n border-radius: 5px;\n padding: 10px 15px;\n background: var(--inset-bg);\n box-shadow:\n inset 0 0 0 1px var(--brand-color),\n 2px 10px 5px #0004;\n}\n```\n\n## popFloat\n\n```\nexport interface PopFloatOptions {\n class?: string\n content: HTMLElement | ElementPart[]\n target: HTMLElement\n position?: FloatPosition\n remainOnResize?: 'hide' | 'remove' | 'remain' // default is 'remove',\n remainOnScroll?: 'hide' | 'remove' | 'remain' // default is 'remain',\n draggable?: boolean\n}\n\nexport const popFloat = (options: PopFloatOptions): TosiFloat\n```\n\nCreate a `<tosi-float>` with the content provided, positioned as specified (or automatically).\n\n## positionFloat\n\n```\nexport const positionFloat = (\n element: HTMLElement,\n target: HTMLElement,\n position?: FloatPosition,\n remainOnScroll: 'hide' | 'remove' | 'remain' = 'remain',\n remainOnResize: 'hide' | 'remove' | 'remain' = 'remove',\n draggable = false\n): void\n```\n\nThis allows you to, for example, provide a global menu that can be used on any element\ninstead of needing to have a whole instance of the menu wrapped around every instance\nof the thing you want the menu to affect (a common anti-pattern of front-end frameworks).\n\n### Handling Overflow\n\n`positionFloat` automatically sets two css-variables `--max-height` and `--max-width` on\nthe floating element to help you deal with overflow (e.g. in menus). E.g. if the float\nis positioned with `top: 125px` then it will set `--max-height: calc(100vh - 125px)`.\n\n## FloatPosition\n\n```\nexport type FloatPosition =\n| 'n'\n| 's'\n| 'e'\n| 'w'\n| 'ne'\n| 'nw'\n| 'se'\n| 'sw'\n| 'en'\n| 'wn'\n| 'es'\n| 'ws'\n| 'side'\n| 'auto'\n```\n\n## Draggable\n\nSometimes it's nice to have popup palettes and modeless dialogs the user can drag away.\n`popFloat()` makes this really easy to do.\n\n```js\nimport { elements } from 'tosijs'\nimport { popFloat, icons } from 'tosijs-ui'\n\nconst { button, h4, p } = elements\n\npreview.append(button(\n 'Draggable Popup',\n {\n class: 'spawn-draggable',\n onClick(event) {\n popFloat({\n class: 'tearoff',\n content: [\n h4('Move me!'),\n p('I’m delicious!'),\n button(\n icons.x(),\n {\n class: 'no-drag close-tearoff',\n onClick(event) {\n event.target.closest('tosi-float').remove()\n }\n }\n )\n ],\n target: event.target,\n remainOnScroll: 'remain',\n remainOnResize: 'remain',\n draggable: true,\n })\n }\n },\n))\n```\n```css\n.tearoff {\n --tearoff-bg: #fff6;\n --tearoff-button-bg: #fff2;\n --tearoff-color: #222;\n --tearoff-hilite: #fff8;\n --tearoff-shadow: #0002;\n display: flex;\n flex-direction: column;\n border-radius: 20px;\n padding: 10px 15px;\n background: var(--tearoff-bg);\n backdrop-filter: blur(6px);\n box-shadow:\n inset 1px 1px 0 1px var(--tearoff-hilite),\n inset -1px -1px 0 1px var(--tearoff-shadow),\n 2px 5px 10px var(--tearoff-shadow);\n width: 200px;\n color: var(--tearoff-color);\n --text-color: var(--tearoff-color);\n}\n\n.darkmode .tearoff {\n --tearoff-bg: #0004;\n --tearoff-button-bg: #0001;\n --tearoff-color: #fff;\n}\n\n.tearoff > :first-child {\n margin-top: 0;\n}\n\n.tearoff > :last-child {\n margin-bottom: 0;\n}\n\n.spawn-draggable {\n margin: 10px;\n}\n\n.close-tearoff {\n position: absolute;\n top: 4px;\n right: 4px;\n width: 32px;\n height: 32px;\n text-align: center;\n padding: 0;\n line-height: 32px;\n background: var(--tearoff-button-bg);\n border-radius: 100px;\n box-shadow:\n inset 1px 1px 0 1px var(--tearoff-hilite),\n inset -1px -1px 0 1px var(--tearoff-shadow);\n}\n```\n\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { ElementPart } from 'tosijs'\nimport { tosiFloat, TosiFloat } from './float'\nimport { bringToFront } from './track-drag'\n\nexport type FloatPosition =\n | 'n'\n | 's'\n | 'e'\n | 'w'\n | 'ne'\n | 'nw'\n | 'se'\n | 'sw'\n | 'en'\n | 'wn'\n | 'es'\n | 'ws'\n | 'side'\n | 'auto'\n\nexport interface PopFloatOptions {\n class?: string\n content: HTMLElement | ElementPart[]\n target: HTMLElement\n position?: FloatPosition\n remainOnScroll?: 'hide' | 'remove' | 'remain'\n remainOnResize?: 'hide' | 'remove' | 'remain'\n draggable?: boolean\n}\n\nexport const popFloat = (options: PopFloatOptions): TosiFloat => {\n const {\n content,\n target,\n position,\n remainOnScroll,\n remainOnResize,\n draggable,\n } = options\n const float = Array.isArray(content)\n ? tosiFloat(...content)\n : tosiFloat(content)\n\n positionFloat(\n float,\n target,\n position,\n remainOnScroll,\n remainOnResize,\n draggable\n )\n if (options.class) {\n float.setAttribute('class', options.class)\n }\n document.body.append(float)\n return float\n}\n\nexport const positionFloat = (\n // Any element can be positioned relative to a target — only the remain-on-* /\n // drag behaviors below are TosiFloat-specific (guarded), the geometry is not.\n // (A `<tosi-pocket-bar>` positions its plain bar element this way.)\n element: HTMLElement,\n target: HTMLElement,\n position?: FloatPosition,\n remainOnScroll?: 'hide' | 'remove' | 'remain',\n remainOnResize?: 'hide' | 'remove' | 'remain',\n draggable = false\n): void => {\n {\n const { position } = getComputedStyle(element)\n if (position !== 'fixed') {\n element.style.position = 'fixed'\n }\n if (element instanceof TosiFloat) {\n if (remainOnResize) element.remainOnResize = remainOnResize\n if (remainOnScroll) element.remainOnScroll = remainOnScroll\n element.drag = draggable\n }\n bringToFront(element)\n }\n const { left, top, width, height } = target.getBoundingClientRect()\n const cx = left + width * 0.5\n const cy = top + height * 0.5\n const w = window.innerWidth\n const h = window.innerHeight\n if (position === 'side') {\n position = ((cx < w * 0.5 ? 'e' : 'w') +\n (cy < h * 0.5 ? 's' : 'n')) as FloatPosition\n } else if (position === 'auto' || position === undefined) {\n position = ((cy < h * 0.5 ? 's' : 'n') +\n (cx < w * 0.5 ? 'e' : 'w')) as FloatPosition\n }\n element.style.top =\n element.style.left =\n element.style.right =\n element.style.bottom =\n element.style.transform =\n ''\n if (position.length === 2) {\n const [first, second] = position\n switch (first) {\n case 'n':\n element.style.bottom = (h - top).toFixed(2) + 'px'\n break\n case 'e':\n element.style.left = (left + width).toFixed(2) + 'px'\n break\n case 's':\n element.style.top = (top + height).toFixed(2) + 'px'\n break\n case 'w':\n element.style.right = (w - left).toFixed(2) + 'px'\n break\n }\n\n switch (second) {\n case 'n':\n element.style.bottom = (h - top - height).toFixed(2) + 'px'\n break\n case 'e':\n element.style.left = left.toFixed(2) + 'px'\n break\n case 's':\n element.style.top = top.toFixed(2) + 'px'\n break\n case 'w':\n element.style.right = (w - left - width).toFixed(2) + 'px'\n break\n }\n element.style.transform = ''\n } else if (position === 'n') {\n element.style.bottom = (h - top).toFixed(2) + 'px'\n element.style.left = cx.toFixed(2) + 'px'\n element.style.transform = 'translateX(-50%)'\n } else if (position === 's') {\n element.style.top = (top + height).toFixed(2) + 'px'\n element.style.left = cx.toFixed(2) + 'px'\n element.style.transform = 'translateX(-50%)'\n } else if (position === 'e') {\n element.style.left = (left + width).toFixed(2) + 'px'\n element.style.top = cy.toFixed(2) + 'px'\n element.style.transform = 'translateY(-50%)'\n } else if (position === 'w') {\n element.style.right = (w - left).toFixed(2) + 'px'\n element.style.top = cy.toFixed(2) + 'px'\n element.style.transform = 'translateY(-50%)'\n }\n element.style.setProperty(\n '--max-height',\n `calc(100vh - ${element.style.top || element.style.bottom})`\n )\n element.style.setProperty(\n '--max-width',\n `calc(100vw - ${element.style.left || element.style.right})`\n )\n}\n",
|
|
20
20
|
"export interface KeyboardEventLike {\n key: string\n code?: string\n ctrlKey: boolean\n metaKey: boolean\n altKey: boolean\n shiftKey: boolean\n}\n\nconst isMacOS =\n typeof navigator !== 'undefined' &&\n /Mac|iPhone|iPad|iPod/.test(navigator.platform || '')\n\nexport const modifierKeys: Record<string, string> = isMacOS\n ? { meta: '⌘', ctrl: '⌃', alt: '⌥', shift: '⇧', escape: '⎋' }\n : { meta: 'Meta', ctrl: 'Ctrl', alt: 'Alt', shift: 'Shift', escape: 'Esc' }\n\nexport const keycode = (evt: KeyboardEventLike): string => {\n if (evt.code) {\n return evt.code.replace(/^Key|^Digit/, '')\n }\n return evt.key\n}\n\nexport const keystroke = (evt: KeyboardEventLike): string => {\n const parts: string[] = []\n if (evt.altKey) parts.push('alt')\n if (evt.ctrlKey) parts.push('ctrl')\n if (evt.metaKey) parts.push('meta')\n if (evt.shiftKey) parts.push('shift')\n parts.push(keycode(evt))\n return parts.join('-')\n}\n\ninterface ParsedShortcut {\n ctrlKey: boolean\n metaKey: boolean\n altKey: boolean\n shiftKey: boolean\n key: string\n}\n\nconst MODIFIER_PATTERNS: [RegExp, keyof ParsedShortcut][] = [\n [/\\^|ctrl-?/i, 'ctrlKey'],\n [/⌘|meta-?/i, 'metaKey'],\n [/⌥|⎇|alt-?|option-?/i, 'altKey'],\n [/⇧|shift-?/i, 'shiftKey'],\n]\n\nexport const parseShortcut = (shortcut: string): ParsedShortcut => {\n let remaining = shortcut.trim()\n const result: ParsedShortcut = {\n ctrlKey: false,\n metaKey: false,\n altKey: false,\n shiftKey: false,\n key: '',\n }\n\n for (const [pattern, prop] of MODIFIER_PATTERNS) {\n if (pattern.test(remaining)) {\n ;(result as any)[prop] = true\n remaining = remaining.replace(pattern, '')\n }\n }\n\n // Strip any remaining hyphens from between modifiers and key\n remaining = remaining.replace(/^-+/, '')\n result.key = remaining.toLowerCase()\n\n return result\n}\n\nexport const matchShortcut = (\n event: KeyboardEventLike,\n shortcut: string\n): boolean => {\n const parsed = parseShortcut(shortcut)\n\n return (\n event.key.toLowerCase() === parsed.key &&\n event.metaKey === parsed.metaKey &&\n event.ctrlKey === parsed.ctrlKey &&\n event.altKey === parsed.altKey &&\n event.shiftKey === parsed.shiftKey\n )\n}\n\nexport const canonicalShortcut = (shortcut: string): string => {\n const parsed = parseShortcut(shortcut)\n const parts: string[] = []\n if (parsed.altKey) parts.push('alt')\n if (parsed.ctrlKey) parts.push('ctrl')\n if (parsed.metaKey) parts.push('meta')\n if (parsed.shiftKey) parts.push('shift')\n parts.push(parsed.key)\n return parts.join('-')\n}\n\nexport const displayShortcut = (shortcut: string): string => {\n const parsed = parseShortcut(shortcut)\n if (isMacOS) {\n const parts: string[] = []\n if (parsed.ctrlKey) parts.push('⌃')\n if (parsed.altKey) parts.push('⌥')\n if (parsed.shiftKey) parts.push('⇧')\n if (parsed.metaKey) parts.push('⌘')\n parts.push(parsed.key.toUpperCase())\n return parts.join('')\n }\n const parts: string[] = []\n if (parsed.ctrlKey) parts.push('Ctrl')\n if (parsed.altKey) parts.push('Alt')\n if (parsed.shiftKey) parts.push('Shift')\n if (parsed.metaKey) parts.push('Meta')\n parts.push(parsed.key.toUpperCase())\n return parts.join('+')\n}\n",
|
|
21
21
|
"/*#\n# drag & drop\n\nA lightweight library that leverages HTML5 drag and drop behavior.\n\nTo use it, simply call `dragAndDrop.init()` (it only needs to be called once,\nbut calling it again is harmless).\n\n```\nimport { dragAndDrop } from 'tosijs-ui'\n\ndragAndDrop.init()\n```\n\nThis module sets up some global event handlers and *just works*™ (arguably, it merely does things\nthat the browser should do, such as add a CSS selector for drop zones that are compatible\nwith what's being dragged). Drop zones added dynamically during a drag (e.g. menu items)\nare automatically detected and marked.\n\nYou can use `dragAndDrop.draggedElement()` to get the element being dragged (if it's\nactually from the page you're in).\n\n> ### The beauty of HTML5 drag-and-drop\n>\n> The nice thing about HTML5 drag-and-drop is that it leverages the OS's drag and\n> drop support. This means you can drag from one window to another, from the desktop\n> to your app and vice versa. It's all a matter of configuring the DOM elements.\n\nThis module uses but *does not define* the following class selectors:\n\n- `.drag-source` an element being dragged\n- `.drag-target` an element on which the dragged object may be dropped\n- `.drag-over` a `.drag-target` which the object is currently over\n\nYou may also wish to create style rules for:\n\n- `[draggable=\"true\"]` anything other than a `<a>` (and perhaps an `<img>`) that can be dragged\n- `[data-drag]` indicates *types* of draggable things that can be dropped on them.\n- `[data-drop]` indicates potential *drop zones*.\n\n> **Note** `draggable` is has to be set to \"true\", [see documentation on draggable](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/draggable).\n\n## Draggable Objects\n\nTo create a draggable element, add `draggable=\"true\"`.\n\n <div draggable=\"true\">Drag Me</div>\n\nTo specify the type(s) of content that will be dragged, use the `data-drag` attribute:\n\n <div draggable=\"true\" data-drag=\"text/plain\">Drag Me</div>\n\nTo specify the content dragged, use a `data-drag-content` attribute.\n\n <div\n draggable=\"true\"\n data-drag=\"text/plain\"\n data-drag-content=\"Surprise!\"\n >Drag Me</div>\n\n## Drop Zones\n\nTo create a drop zone, use the data-drop attribute set to a semicolon-delimited list\nof mime types:\n\n <div data-drop=\"text/plain\">\n Drop plain text here\n </div>\n <div data-drop=\"text/plain;text/html\">\n Drop html or plain text here\n </div>\n\nFinally, you can override default drop behavior (which is to copy the dragged node into\nthe drop zone node) by adding your own `drop` event handler.\n\nE.g.\n\n element.addEventListener('drop', (event) => {\n // event.target is the dragged element\n ...\n\n event.stopPropagation()\n event.preventDefault()\n })\n\nAnd of course `elementCreator()`s provide syntax sugar for this:\n\n elements.div({\n onDrop(event) {\n // ...\n }\n })\n\n### Typed Drop Zones Example\n\nIn this example, the types are set using `data-drag` attributes and the drop zones are\nset using `data-drop` attributes, but everything else is default behavior. You can also\ndrop the draggable objects to another window or the desktop, and similarly you can drag\nappropriate stuff into the drop zones. (You can test this out by opening this page in\na second browser window—event a different browser.)\n\n```html\n<div style=\"display: grid; grid-template-columns: 50% 50%\">\n <div>\n <h4>Draggable</h4>\n <a class=\"drag\" href=\"javascript: alert('I don't do anything)\">Links are draggable by default</a>\n <p draggable=\"true\">\n Just adding the <code>draggable=\"true\"</code>\n makes this paragraph draggable (as text/html by default)\n </p>\n <p draggable=\"true\" data-drag=\"text/html\">\n Draggable as <i>text/html</i>\n </p>\n <p draggable=\"true\" data-drag=\"text/plain\" data-drag-content=\"Surprise!\">\n Draggable as <i>text/plain</i>, with <b>custom content</b>\n </p>\n <p draggable=\"true\" data-drag=\"text/html;text/plain\">\n Draggable as <i>text/html</i> or <i>text/plain</i>\n </p>\n <p draggable=\"true\" data-drag=\"text/plain\">\n Draggable as <i>text/plain</i>\n </p>\n </div>\n <div>\n <h4>Drop Targets</h4>\n <div data-drop=\"text/html\">\n You can drop stuff here\n </div>\n <div data-drop=\"text/html\">\n You can drop HTML here\n </div>\n <div data-drop=\"text/*\">\n You can drop any text\n </div>\n <div data-drop=\"text/html;url\">\n You can drop HTML or urls here\n </div>\n <div\n data-drop=\"special/any\"\n data-event=\"drop:_component_.drop\"\n >\n I accept anything and have special drop handling\n </div>\n </div>\n</div>\n```\n```css\n.drag-source {\n box-shadow: 0 0 2px 2px orange;\n opacity: 0.5;\n}\n.drag-target {\n min-height: 10px;\n background: rgba(0,0,255,0.25);\n}\n.drag-target.drag-over {\n background: rgba(0,0,255,0.5);\n}\n:not([data-drop]) > .drag,\n[draggable=\"true\"] {\n border: 1px solid rgba(255,192,0,0.5);\n cursor: pointer;\n display: block;\n}\n\n:not([data-drop]) > .drag,\n[data-drop],\n[draggable=\"true\"] {\n padding: 4px;\n margin: 4px;\n border-radius: 5px;\n}\n```\n```js\nimport { dragAndDrop } from 'tosijs-ui'\n\ndragAndDrop.init()\n```\n\n> Note that you can drag between two browser tabs containing this\n> example (or between two different browsers) and it will work.\n\n### Reorderable List Example\n\nThis example uses a custom `drop` event handler. When you sort the spectrum\ninto the correct order you \"win\" and then the items are reshuffled.\n\nAlso notice that the `data-drag` and `data-drop` values are set to a\nrandom dragId so you cannot drag to another window or the desktop.\n\n```js\nimport { elements, tosi, getListItem } from 'tosijs'\nimport { dragAndDrop, TosiDialog } from 'tosijs-ui'\n\ndragAndDrop.init()\n\nconst shuffle = (deck) => {\n var shuffled = [];\n for( const card of deck ){\n shuffled.splice( Math.floor( Math.random() * (1 + shuffled.length) ), 0, card );\n }\n return shuffled;\n}\n\nconst colors = [\n 'red',\n 'orange',\n 'yellow',\n 'green',\n 'blue',\n 'indigo',\n 'violet',\n]\n\nlet spectrum\n\nconst start = () => {\n ({ spectrum } = tosi({\n spectrum: shuffle(colors).map(color => ({color}))\n }))\n}\n\nstart()\n\nlet dragged = null\n\nconst dropColor = (event) => {\n const dropped = getListItem(event.target)\n const draggedIndex = spectrum.indexOf(dragged)\n const droppedIndex = spectrum.indexOf(dropped)\n spectrum.splice(draggedIndex, 1)\n spectrum.splice(droppedIndex, 0, dragged)\n\n if (JSON.stringify(spectrum.map(c => c.color)) === JSON.stringify(colors)) {\n TosiDialog.alert('You win!').then(start)\n }\n\n console.log({dragged, draggedIndex, dropped, droppedIndex})\n\n event.preventDefault()\n event.stopPropagation()\n}\n\nconst dragId = 'spectrum/' + Math.floor(Math.random() * 1e9)\n\nconst { div, button, template } = elements\n\npreview.append(\n div(\n {\n bindList: { value: spectrum, idPath: 'color' }\n },\n template(\n div({\n class: 'spectrum',\n bindText: '^.color',\n draggable: 'true',\n dataDrag: dragId,\n dataDrop: dragId,\n onDrop: dropColor,\n bind: {\n value: '^.color',\n binding(element, value) {\n element.style.backgroundColor = value\n }\n },\n onDragstart(event) {\n dragged = getListItem(event.target)\n }\n })\n )\n ),\n)\n```\n```css\n.spectrum {\n height: 36px;\n color: white;\n font-weight: 700;\n text-shadow: 1px 2px 0 black;\n padding-left: 10px;\n}\n\n.spectrum.drag-over {\n box-shadow: 0 0 0 4px blue;\n}\n```\n\n> To prevent this example from allowing drags between windows (which\n> wouldn't make sense) a random dragId is assigned to `data-drag` and\n> `data-drop` in this example.\n)\n*/\n\n/*{ \"parent\": \"Helper Libraries\" }*/\n\nconst dragInProgress = () => !!document.querySelector('.drag-source')\n\nexport const isTypeAllowed = (\n allowedTypes: readonly string[] | undefined,\n type: string\n) => {\n if (!allowedTypes) {\n return false\n }\n for (const allowedType of allowedTypes) {\n if (allowedType === 'special/any') {\n return true\n } else if (allowedType.indexOf('*') > -1) {\n const [A, B] = allowedType.split('/')\n const [a, b] = type.split('/')\n if ((A === '*' || A === a) && (B === '*' || B === b)) {\n return true\n }\n } else {\n if (allowedType === type) {\n return true\n }\n }\n }\n}\n\nconst removeClass = (className: string) => {\n for (const elt of [...document.querySelectorAll(`.${className}`)]) {\n elt.classList.remove(className)\n }\n}\nconst end = () => {\n if (dropObserver) {\n dropObserver.disconnect()\n dropObserver = null\n }\n activeDragTypes = []\n removeClass('drag-over')\n removeClass('drag-source')\n removeClass('drag-target')\n}\n\nexport const stringToTypes = (\n s: string | undefined,\n delimiter = ';'\n): string[] => {\n return (s || '')\n .split(delimiter)\n .map((t) => t.trim())\n .filter((i) => i !== '')\n}\n\nlet activeDragTypes: readonly string[] = []\nlet dropObserver: MutationObserver | null = null\n\nconst markDroppable = (types: readonly string[] | undefined) => {\n if (!types) types = []\n activeDragTypes = types\n const elements = [\n ...document.querySelectorAll('[data-drop]'),\n ] as HTMLElement[]\n for (const element of elements) {\n const dropTypes = stringToTypes(element.dataset.drop)\n if (types.find((type) => isTypeAllowed(dropTypes, type))) {\n element.classList.add('drag-target')\n } else {\n element.classList.remove('drag-target')\n }\n }\n if (!dropObserver) {\n dropObserver = new MutationObserver(() => markDroppable(activeDragTypes))\n dropObserver.observe(document.body, { childList: true, subtree: true })\n }\n}\n\nfunction start(evt: DragEvent) {\n const target = (evt.target as HTMLElement)?.closest(\n '[draggable=\"true\"],a[href]'\n ) as HTMLElement | null\n if (!target) {\n return\n }\n target.classList.add('drag-source')\n const types = target.matches('[draggable=\"true\"]')\n ? stringToTypes(target.dataset.drag || 'text/html')\n : stringToTypes(target.dataset.drag || 'url')\n for (const type of types) {\n const content =\n target.dataset.dragContent ||\n (type === 'text/html' ? target.innerHTML : target.textContent)\n evt.dataTransfer?.setData(type, content || '')\n }\n markDroppable(evt.dataTransfer?.types)\n evt.stopPropagation()\n}\n\nfunction drag(evt: DragEvent) {\n if (!dragInProgress()) {\n markDroppable(evt.dataTransfer?.types)\n }\n const target = (evt.target as HTMLElement).closest('.drag-target')\n if (target && evt.dataTransfer) {\n target.classList.add('drag-over')\n evt.dataTransfer.dropEffect = 'copy'\n } else {\n evt.preventDefault()\n evt.stopPropagation()\n }\n}\n\nfunction leave() {\n removeClass('drag-over')\n}\n\nfunction drop(evt: DragEvent) {\n const target = (evt.target as HTMLElement).closest(\n '.drag-target'\n ) as HTMLElement | null\n if (target) {\n const dropTypes = (target.dataset?.drop || '').split(';')\n for (const type of dropTypes) {\n if (isTypeAllowed(evt.dataTransfer?.types, type)) {\n if (type === 'text/html') {\n target.innerHTML = evt.dataTransfer?.getData(type) || ''\n } else {\n target.textContent = evt.dataTransfer?.getData(type) || ''\n }\n }\n }\n }\n end()\n}\n\nexport const draggedElement = () => document.querySelector('.drag-source')\n\nlet isInitialized = false\n\nexport const init = () => {\n if (isInitialized) {\n return\n }\n\n document.body.addEventListener('dragstart', start)\n document.body.addEventListener('dragenter', drag)\n document.body.addEventListener('dragover', drag)\n document.body.addEventListener('drop', drop)\n document.body.addEventListener('dragleave', leave)\n document.body.addEventListener('dragend', end)\n\n // stop dragged items from reloading the window\n window.addEventListener('dragover', (evt) => evt.preventDefault())\n window.addEventListener('drop', (evt) => evt.preventDefault())\n\n isInitialized = true\n}\n",
|
|
22
22
|
"/*#\n# menu\n\nBeing able to pop a menu up anywhere is just so nice, and `tosijs-ui` allows menus\nto be generated on-the-fly, and even supports hierarchical menus.\n\n## popMenu and `<tosi-menu>`\n\n`popMenu({target, menuItems, …})` will spawn a menu from a target.\n\nThe `<tosi-menu>` component places creates a trigger button, hosts\nmenuItems, and (because it persists in the DOM) supports keyboard\nshortcuts.\n\n```js\nimport { popMenu, localize, tosiMenu, postNotification, tosiLocalized, icons } from 'tosijs-ui'\nimport { elements } from 'tosijs'\n\nlet picked = ''\nlet testingEnabled = false\n\nconst menuItems = [\n {\n icon: 'thumbsUp',\n caption: 'Like',\n shortcut: '^L',\n action() {\n postNotification({\n message: 'I like it!',\n icon: 'thumbsUp',\n duration: 1\n })\n }\n },\n {\n icon: 'heart',\n caption: 'Love',\n shortcut: '⌘⇧L',\n action() {\n postNotification({\n type: 'success',\n message: 'I LOVE it!',\n icon: 'heart',\n duration: 1\n })\n }\n },\n {\n icon: 'thumbsDown',\n caption: 'dislike',\n shortcut: '⌘D',\n action() {\n postNotification({\n type: 'error',\n message: 'Awwwwwww…',\n icon: 'thumbsDown',\n duration: 1\n })\n }\n },\n null, // separator\n {\n caption: localize('Localized placeholder'),\n action() {\n alert(localize('Localized placeholder'))\n }\n },\n {\n icon: elements.span('🥹'),\n caption: 'Also see…',\n menuItems: [\n {\n icon: elements.span('😳'),\n caption: 'And that’s not all…',\n menuItems: [\n {\n icon: 'externalLink',\n caption: 'timezones',\n action: 'https://timezones.tosijs.net/'\n },\n {\n icon: 'externalLink',\n caption: 'b8rjs',\n action: 'https://b8rjs.com'\n },\n {\n caption: 'deep shortcut',\n shortcut: '⌘⇧D',\n action() {\n postNotification({\n message: 'Deep shortcut fired!',\n duration: 1\n })\n }\n },\n ]\n },\n {\n icon: 'tosi',\n caption: 'tosi',\n action: 'https://xinjs.net'\n },\n {\n icon: 'tosiPlatform',\n caption: 'tosi-platform',\n action: 'https://xinie.net'\n },\n ]\n },\n {\n icon: testingEnabled ? 'check' : '',\n caption: 'Testing Enabled',\n action() {\n testingEnabled = !testingEnabled\n }\n },\n {\n caption: 'Testing…',\n enabled() {\n return testingEnabled\n },\n menuItems: [\n {\n caption: 'one',\n shortcut: '⌘1',\n checked: () => picked === 'one',\n action () {\n picked = 'one'\n }\n },\n {\n caption: 'two',\n shortcut: '⌘2',\n checked: () => picked === 'two',\n action () {\n picked = 'two'\n }\n },\n {\n caption: 'three',\n shortcut: '⌘3',\n checked: () => picked === 'three',\n action () {\n picked = 'three'\n }\n }\n ]\n }\n]\n\npreview.addEventListener('click', (event) => {\n if (!event.target.closest('button')) {\n return\n }\n popMenu({\n target: event.target,\n menuItems\n })\n})\n\npreview.append(\n tosiMenu(\n {\n menuItems,\n localized: true,\n },\n tosiLocalized('Menu'),\n icons.chevronDown()\n )\n)\n```\n```html\n<button title=\"menu test\">\n <tosi-icon icon=\"moreVertical\"></tosi-icon>\n</button>\n<button title=\"menu test from bottom-right\" style=\"position: absolute; bottom: 0; right: 0\">\n <tosi-icon icon=\"moreVertical\"></tosi-icon>\n</button>\n```\n```css\n.preview button {\n min-width: 44px;\n text-align: center;\n height: 44px;\n margin: 5px;\n}\n```\n\n## Overflow test\n\n```js\nimport { popMenu, icons, postNotification } from 'tosijs-ui'\nimport { elements } from 'tosijs'\n\npreview.querySelector('button').addEventListener('click', (event) => {\n popMenu({\n target: event.target,\n menuItems: Object.keys(icons).map(icon => ({\n icon,\n caption: icon,\n action() {\n postNotification({\n icon: icon,\n message: icon,\n duration: 1\n })\n }\n }))\n })\n})\n```\n```html\n<button title=\"big menu test\" style=\"position: absolute; top: 0; left: 0\">\n Big Menu Test\n</button>\n```\n\n## popMenu({target, width, menuItems…})\n\n```\nexport interface PopMenuOptions {\n target: HTMLElement\n menuItems: MenuItem[]\n width?: string | number\n position?: FloatPosition\n submenuDepth?: number // don't set this, it's set internally by popMenu\n submenuOffset?: { x: number; y: number }\n localized?: boolean,\n showChecked?: boolean, // if true, scroll checked item(s) into view\n hideDisabled?: boolean, // if true, non-applicable items are hidden (default: shown disabled)\n}\n```\n\n`popMenu` will spawn a menu on a target element. A menu is just a `MenuItem[]`.\n\n## MenuItem\n\nA `MenuItem` can be one of four things:\n\n- `null` denotes a separator\n- `MenuAction` denotes a labeled button or `<a>` tag based on whether the `action` provided\n is a url (string) or an event handler (function).\n- `SubMenu` is a submenu.\n- A `() => HTMLElement` function returns a custom element to embed inline in\n the menu (see `MenuElement` below).\n\n### MenuAction\n\nNote that popMenu does not implement shortcuts for you (yet!).\n\n```\ninterface MenuAction {\n caption: string\n shortcut?: string\n checked?: () => boolean\n enabled?: () => boolean\n action: ActionCallback | string\n icon?: string | Element\n tooltip?: string\n properties?: ElementProps\n}\n```\n\n### SubMenu\n\n```\ninterface SubMenu {\n caption: string\n enabled?: () => boolean\n menuItems: MenuItem[]\n icon?: string | Element\n tooltip?: string\n properties?: ElementProps\n}\n```\n\n### MenuElement\n\nFor embedding a custom widget inline in a menu — e.g. a `<tosi-segmented>` for\nquick option-picking — pass a function that returns an `HTMLElement`:\n\n```\ntype MenuElement = () => HTMLElement\n```\n\nThe returned element is added as-is and tagged with the `tosi-menu-element`\nclass, which sets `min-height` to match standard menu items so the row\naligns visually. The widget is responsible for its own click/focus behaviour.\n\n```js\nimport { popMenu, tosiSegmented } from 'tosijs-ui'\nimport { elements } from 'tosijs'\n\nconst { button } = elements\n\nlet view = 'list'\n\nconst btn = button('View options')\nbtn.addEventListener('click', () => {\n popMenu({\n target: btn,\n menuItems: [\n { caption: 'Refresh', icon: 'refreshCcw', action() {} },\n null,\n () => tosiSegmented({\n choices: 'list,grid,table',\n value: view,\n style: { margin: '0 1em' },\n onChange(event) {\n view = event.target.value\n },\n // stop the menu's outer onClick from closing it when the user\n // picks a segment\n onClick(event) { event.stopPropagation() },\n }),\n null,\n { caption: 'Settings…', icon: 'settings', action() {} },\n ]\n })\n})\n\npreview.append(btn)\n```\n\n### Keyboard Shortcuts\n\nIf a menu is embodied in a `<tosi-menu>` it is supported by keyboard\nshortcuts. Both text and symbolic shortcut descriptions are supported,\ne.g.\n\n- `⌘C` or `meta-C`\n- `⇧P` for `shift-P`\n- `^F` or `ctrl-f`\n- `⌥x`, `⎇x`, `alt-x` or `option-x`\n\n## Localization\n\nIf you set `localized: true` in `PopMenuOptions` then menu captions will be be\npassed through `localize`. You'll need to provide the appropriate localized strings,\nof course.\n\n> `<tosi-menu>` supports the `localized` attribute but it doesn't localize\n> its trigger button.\n\nTo see this in action, see the example below, or look at the\n[table example](?data-table.ts). It uses a `localized` menu\nto render column names when you show hidden columns.\n\n```js\nimport { elements } from 'tosijs'\nimport { tosiLocalized, localize, icons, popMenu, postNotification } from 'tosijs-ui'\nconst { button } = elements\nconst makeItem = s => ({\n caption: s,\n action() {\n postNotification({\n message: localize(s),\n duration: 1\n })\n }\n})\nconst target = button(\n {\n onClick(event) {\n popMenu({\n target: event.target.closest('button'),\n localized: true,\n menuItems: [\n makeItem('New'),\n makeItem('Open...'),\n makeItem('Save'),\n makeItem('Close'),\n ]\n })\n }\n },\n tosiLocalized(\n { style: { marginRight: '5px' }},\n 'menu'\n ),\n icons.chevronDown()\n)\npreview.append(target)\n```\n\n## Why another menu library?!\n\nSupport for menus is sadly lacking in HTML, and unfortunately there's a huge conceptual problem\nwith menus implemented the way React and React-influenced libraries work, i.e. you need\nto have an instance of a menu \"wrapped around\" the DOM element that triggers it, whereas\na better approach (and one dating back at least as far as the original Mac UI) is to treat\na menu as a separate resource that can be instantiated on demand.\n\nA simple example where this becomes really obvious is if you want to associate a \"more options\"\nmenu with every row of a large table. Either you end up having an enormous DOM (virtual or otherwise)\nor you have to painfully swap out components on-the-fly.\n\nAnd, finally, submenus are darn useful for any serious app.\n\nFor this reason, `tosijs-ui` has its own menu implementation.\n\n## Drop Menus\n\n`popDropMenu` extends the menu system to support drag-and-drop. A single `menuItems`\narray can serve both click navigation (via `popMenu`) and drag-to-drop (via `popDropMenu`).\n\nItems with `acceptsDrop` (array of MIME types) participate in drop mode.\nItems with `dropAction` are valid drop targets. Submenus auto-disclose when\na matching drag hovers over them.\n\n### DropMenu Interfaces\n\n`MenuAction` and `SubMenu` gain two optional fields:\n\n```\nacceptsDrop?: string[] // MIME types this item accepts\ndropAction?: (dataTransfer: DataTransfer) => void\n```\n\n- A **SubMenu** with `acceptsDrop` auto-discloses on drag hover\n- A **SubMenu** with `dropAction` can also receive drops directly\n- A **MenuAction** with `dropAction` is a drop target\n- Items without `acceptsDrop` are shown disabled in drop mode (or hidden if `hideDisabled` is set)\n\n### popDropMenu({target, menuItems, dataTypes, …})\n\n```\nexport interface PopDropMenuOptions extends PopMenuOptions {\n dataTypes: readonly string[] // MIME types from the current drag\n}\n```\n\n`popDropMenu` filters menuItems to only those matching `dataTypes`,\nthen opens the menu in drop mode. Non-matching items are shown\ndisabled by default; set `hideDisabled: true` to remove them entirely.\n\n`disclosureDelay` (ms, default 200) controls how long a drag must hover\nover a submenu before it auto-discloses.\n\n### hideDisabled\n\nBy default (`hideDisabled: false`), non-matching items remain visible but disabled.\nThis preserves spatial stability — items don't jump around as you drag different\ntypes. Set `hideDisabled: true` to hide them entirely for a cleaner menu.\n\nApplies symmetrically to both `filterForDrop` and `filterForClick`.\n\n### filterForDrop / filterForClick\n\n```\nfilterForDrop(items: MenuItem[], dataTypes: readonly string[], hideDisabled?: boolean): MenuItem[]\nfilterForClick(items: MenuItem[], hideDisabled?: boolean): MenuItem[]\n```\n\nUtility functions to filter a single menu definition for each mode.\nWhen `hideDisabled` is false (default), non-matching items are kept but disabled.\n\n### TosiMenu accepts-drop\n\nSet `accepts-drop` (semicolon-delimited MIME types) on `<tosi-menu>` to auto-open\nin drop mode when a matching drag enters. Set `dropAction` to accept drops\ndirectly on the trigger (e.g. saving to the root folder). Set `disclosure-delay`\n(ms) to control submenu auto-disclosure speed.\n\n <tosi-menu accepts-drop=\"text/plain;text/html\" disclosure-delay=\"150\">Files</tosi-menu>\n\n menuElement.dropAction = (data) => saveToRoot(data)\n\n### Drop Menu Example\n\n```js\nimport { popMenu, popDropMenu, tosiMenu, dragAndDrop, icons, postNotification } from 'tosijs-ui'\nimport { elements } from 'tosijs'\n\ndragAndDrop.init()\n\nconst { button, div, span } = elements\n\nconst adjectives = ['Important', 'Old', 'Shared', 'Archive', 'Draft', 'Final', 'Review', 'Backup']\nconst randomFolders = (type) => () => {\n const count = 2 + Math.floor(Math.random() * 3)\n const picked = []\n const pool = [...adjectives]\n for (let i = 0; i < count; i++) {\n const idx = Math.floor(Math.random() * pool.length)\n picked.push(pool.splice(idx, 1)[0])\n }\n return picked.map(name => ({\n caption: name,\n icon: 'folder',\n acceptsDrop: [type],\n dropAction(data) {\n postNotification({\n type: 'success',\n message: 'Saved to ' + name + ': ' + (data.getData(type) || 'file'),\n duration: 2\n })\n },\n action() {\n postNotification({ message: 'Opened ' + name, duration: 1 })\n },\n }))\n}\n\nconst menuItems = [\n {\n caption: 'Documents',\n icon: 'folder',\n acceptsDrop: ['text/*'],\n dropAction(data) {\n postNotification({\n type: 'success',\n message: 'Saved to Documents: ' + (data.getData('text/plain') || data.getData('text/html')),\n duration: 2\n })\n },\n action() {\n postNotification({ message: 'Navigated to Documents', duration: 1 })\n },\n menuItems: [\n {\n caption: 'Text Files',\n icon: 'folder',\n acceptsDrop: ['text/plain'],\n dropAction(data) {\n postNotification({\n type: 'success',\n message: 'Saved to Text Files: ' + data.getData('text/plain'),\n duration: 2\n })\n },\n action() {\n postNotification({ message: 'Navigated to Text Files', duration: 1 })\n },\n menuItems: randomFolders('text/plain'),\n },\n {\n caption: 'HTML Files',\n icon: 'folder',\n acceptsDrop: ['text/html'],\n dropAction(data) {\n postNotification({\n type: 'success',\n message: 'Saved to HTML Files: ' + data.getData('text/html'),\n duration: 2\n })\n },\n action() {\n postNotification({ message: 'Navigated to HTML Files', duration: 1 })\n },\n menuItems: randomFolders('text/html'),\n },\n {\n caption: 'readme.txt',\n icon: 'file',\n action() {\n postNotification({ message: 'Opened readme.txt', duration: 1 })\n },\n },\n ]\n },\n null,\n {\n caption: 'Trash',\n icon: 'trash',\n acceptsDrop: ['special/any'],\n dropAction(data) {\n postNotification({\n type: 'error',\n message: 'Trashed: ' + (data.getData('text/plain') || 'item'),\n duration: 2\n })\n },\n action() {\n postNotification({ message: 'Opened Trash', duration: 1 })\n },\n },\n]\n\nconst clickBtn = button('Click: Browse Files', {\n onClick(event) {\n popMenu({ target: event.target.closest('button'), menuItems })\n }\n})\n\nconst dropMenu = tosiMenu(\n {\n menuItems,\n acceptsDrop: 'text/plain;text/html',\n dropAction(data) {\n postNotification({\n type: 'success',\n message: 'Saved to root: ' + (data.getData('text/plain') || data.getData('text/html')),\n duration: 2\n })\n },\n },\n icons.folder(),\n span(' Drop (show all)')\n)\n\nconst dropMenuHidden = tosiMenu(\n {\n menuItems,\n acceptsDrop: 'text/plain;text/html',\n hideDisabled: true,\n dropAction(data) {\n postNotification({\n type: 'success',\n message: 'Saved to root: ' + (data.getData('text/plain') || data.getData('text/html')),\n duration: 2\n })\n },\n },\n icons.folder(),\n span(' Drop (hide disabled)')\n)\n\npreview.append(\n div(\n { style: { display: 'flex', gap: '10px', alignItems: 'flex-start' } },\n div(\n { draggable: 'true', dataDrag: 'text/plain', dataDragContent: 'quarterly-report.txt', style: { padding: '8px', border: '1px dashed #888', borderRadius: '4px', cursor: 'grab' } },\n 'quarterly-report.txt'\n ),\n div(\n { draggable: 'true', dataDrag: 'text/html', dataDragContent: '<b>notes</b>', style: { padding: '8px', border: '1px dashed #888', borderRadius: '4px', cursor: 'grab' } },\n 'notes.html'\n ),\n ),\n div(\n { style: { display: 'flex', gap: '10px', marginTop: '10px', flexWrap: 'wrap' } },\n clickBtn,\n dropMenu,\n dropMenuHidden,\n )\n)\n```\n```css\n.preview {\n padding: 10px;\n}\n```\n\n> **Try it:** Click \"Browse Files\" to navigate the menu normally.\n> Drag a file over \"Drop (show all)\" — non-matching items appear\n> disabled. Drag over \"Drop (hide disabled)\" — non-matching items\n> are hidden entirely. \"Text Files\" only accepts .txt, \"HTML Files\"\n> only accepts .html. Subfolders are randomly generated each time\n> a folder is disclosed (dynamic `menuItems`).\n\n## Shadow DOM\n\nMenus work when triggered from inside a shadow DOM. Clicking outside\nthe menu dismisses it; clicking the shadow DOM target toggles it.\n\n```js\nimport { popMenu, removeLastMenu } from 'tosijs-ui'\n\nclass ShadowMenuHost extends HTMLElement {\n constructor() {\n super()\n const shadow = this.attachShadow({ mode: 'open' })\n const wrapper = document.createElement('div')\n wrapper.style.cssText = 'padding: 20px; background: #d0dce8; border-radius: 8px; display: inline-block'\n const btn = document.createElement('button')\n btn.textContent = 'Shadow Menu'\n btn.id = 'shadow-btn'\n btn.style.cssText = 'padding: 8px 16px; cursor: pointer'\n btn.addEventListener('click', () => {\n popMenu({\n target: btn,\n menuItems: [\n { caption: 'Alpha', action() {} },\n { caption: 'Bravo', action() {} },\n { caption: 'Charlie', action() {} },\n ]\n })\n })\n wrapper.appendChild(btn)\n shadow.appendChild(wrapper)\n }\n}\nif (!customElements.get('shadow-menu-host')) {\n customElements.define('shadow-menu-host', ShadowMenuHost)\n}\n\nconst host = document.createElement('shadow-menu-host')\nconst outside = document.createElement('button')\noutside.textContent = 'Click to dismiss'\noutside.id = 'outside-btn'\noutside.style.cssText = 'padding: 8px 16px; margin-left: 10px'\npreview.append(host, outside)\n```\n```test\nimport { removeLastMenu } from 'tosijs-ui'\n\ntest('shadow DOM menu: open and dismiss', async () => {\n const host = preview.querySelector('shadow-menu-host')\n const btn = host.shadowRoot.querySelector('#shadow-btn')\n const countFloats = () => document.querySelectorAll('tosi-float').length\n\n // opens from shadow DOM button click\n const before = countFloats()\n btn.click()\n await waitMs(100)\n expect(countFloats()).toBe(before + 1)\n\n // removeLastMenu dismisses it\n removeLastMenu(0)\n expect(countFloats()).toBe(before)\n\n // re-open and verify target mousedown keeps it open\n btn.click()\n await waitMs(100)\n expect(countFloats()).toBe(before + 1)\n btn.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, composed: true }))\n await waitMs(100)\n expect(countFloats()).toBe(before + 1)\n removeLastMenu(0)\n})\n```\n\n## Menu Item Tooltips\n\nAdd `tooltip` to any menu item to show a tooltip on hover (requires\n`initTooltips()`).\n\n```js\nimport { elements } from 'tosijs'\nimport { popMenu, initTooltips, icons } from 'tosijs-ui'\n\ninitTooltips()\n\nconst { button } = elements\nconst btn = button('Tooltipped Menu')\n\nbtn.addEventListener('click', () => {\n popMenu({\n target: btn,\n menuItems: [\n { caption: 'Copy', icon: 'copy', tooltip: 'Copy to **clipboard**', shortcut: '⌘C', action() {} },\n { caption: 'Paste', icon: 'clipboard', tooltip: 'Paste from clipboard', shortcut: '⌘V', action() {} },\n null,\n { caption: 'Export', icon: 'download', tooltip: 'Export as `JSON` or `CSV`', menuItems: [\n { caption: 'JSON', action() {} },\n { caption: 'CSV', action() {} },\n ]},\n ]\n })\n})\n\npreview.append(btn)\n```\n\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport {\n elements,\n ElementProps,\n varDefault,\n vars,\n StyleSheet,\n Component,\n PartsMap,\n} from 'tosijs'\nimport { popFloat, FloatPosition } from './pop-float'\nimport { icons, SvgIcon } from './icons'\nimport { localize } from './localize'\nimport { matchShortcut, displayShortcut } from './match-shortcut'\nimport { isTypeAllowed, stringToTypes } from './drag-and-drop'\n\nexport type ActionCallback = () => void | Promise<void>\n\nexport interface MenuAction {\n caption: string\n shortcut?: string\n checked?: () => boolean\n enabled?: () => boolean\n action: ActionCallback | string\n icon?: string | Element\n tooltip?: string\n properties?: ElementProps\n acceptsDrop?: string[]\n dropAction?: (dataTransfer: DataTransfer) => void\n}\n\nexport type MenuItemsProvider = MenuItem[] | (() => MenuItem[])\n\nexport interface SubMenu {\n caption: string\n checked?: () => boolean\n enabled?: () => boolean\n menuItems: MenuItemsProvider\n icon?: string | Element\n tooltip?: string\n properties?: ElementProps\n acceptsDrop?: string[]\n dropAction?: (dataTransfer: DataTransfer) => void\n}\n\nexport type MenuSeparator = null\n\n// A function returning an HTMLElement is rendered as-is, sized to match the\n// height of standard menu items via `tosi-menu-element`. Useful for embedding\n// custom controls (e.g. a tosiSegmented for inline option pickers).\nexport type MenuElement = () => HTMLElement\n\nexport type MenuItem = MenuAction | SubMenu | MenuSeparator | MenuElement\n\nexport const resolveMenuItems = (provider: MenuItemsProvider): MenuItem[] =>\n typeof provider === 'function' ? provider() : provider\n\nconst { div, button, span, a, tosiSlot } = elements\n\nconst cleanSeparators = (items: MenuItem[]): MenuItem[] => {\n const result: MenuItem[] = []\n for (const item of items) {\n if (item === null) {\n if (result.length > 0 && result[result.length - 1] !== null) {\n result.push(item)\n }\n } else {\n result.push(item)\n }\n }\n while (result.length > 0 && result[result.length - 1] === null) {\n result.pop()\n }\n return result\n}\n\nexport const filterForDrop = (\n items: MenuItem[],\n dataTypes: readonly string[],\n hideDisabled = false\n): MenuItem[] => {\n const filtered: MenuItem[] = []\n for (const item of items) {\n if (item === null) {\n filtered.push(item)\n continue\n }\n if (typeof item === 'function') {\n filtered.push(item)\n continue\n }\n const { acceptsDrop } = item\n if (!acceptsDrop) {\n if (!hideDisabled) {\n filtered.push({ ...item, enabled: () => false } as MenuItem)\n }\n continue\n }\n const matches = dataTypes.some((t) => isTypeAllowed(acceptsDrop, t))\n if (!matches) {\n if (!hideDisabled) {\n filtered.push({ ...item, enabled: () => false } as MenuItem)\n }\n continue\n }\n const subMenu = item as SubMenu\n if (subMenu.menuItems) {\n // Always check with hideDisabled=true to see if there are valid children\n const validChildren = filterForDrop(\n resolveMenuItems(subMenu.menuItems),\n dataTypes,\n true\n )\n if (validChildren.length > 0 || subMenu.dropAction) {\n const childItems = hideDisabled\n ? validChildren\n : filterForDrop(resolveMenuItems(subMenu.menuItems), dataTypes, false)\n filtered.push({ ...subMenu, menuItems: childItems })\n } else if (!hideDisabled) {\n filtered.push({ ...subMenu, enabled: () => false } as MenuItem)\n }\n } else {\n filtered.push(item)\n }\n }\n return cleanSeparators(filtered)\n}\n\nexport const filterForClick = (\n items: MenuItem[],\n hideDisabled = false\n): MenuItem[] => {\n const filtered: MenuItem[] = []\n for (const item of items) {\n if (item === null) {\n filtered.push(item)\n continue\n }\n if (typeof item === 'function') {\n filtered.push(item)\n continue\n }\n const action = (item as MenuAction).action\n const menuItemsProvider = (item as SubMenu).menuItems\n if (action || menuItemsProvider) {\n if (menuItemsProvider) {\n // Always check with hideDisabled=true to see if there are valid children\n const validChildren = filterForClick(\n resolveMenuItems(menuItemsProvider),\n true\n )\n if (validChildren.length > 0) {\n const childItems = hideDisabled\n ? validChildren\n : filterForClick(resolveMenuItems(menuItemsProvider), false)\n filtered.push({ ...item, menuItems: childItems } as SubMenu)\n } else if (!hideDisabled) {\n filtered.push({ ...item, enabled: () => false } as MenuItem)\n }\n } else {\n filtered.push(item)\n }\n } else if (!hideDisabled) {\n filtered.push({ ...item, enabled: () => false } as MenuItem)\n }\n }\n return cleanSeparators(filtered)\n}\n\n// @deprecated xin-menu-* classes — use tosi-menu-* instead; remove in next major\nconst menuStyles = {\n overflow: 'hidden auto',\n maxHeight: `calc(${vars.maxHeight} - ${varDefault.menuInset('8px')})`,\n borderRadius: vars.spacing50,\n background: varDefault.menuBg('#fafafa'),\n boxShadow: varDefault.menuShadow(\n `${vars.spacing13} ${vars.spacing50} ${vars.spacing} #0004`\n ),\n}\nconst menuItemStyles = {\n boxShadow: 'none',\n border: 'none !important',\n display: 'grid',\n alignItems: 'center',\n justifyContent: 'flex-start',\n textDecoration: 'none',\n // Shortcut column sizes to its content (collapses to ~0 with no shortcut, fits\n // compound chords like ⇧⌘Z without clipping).\n gridTemplateColumns: '0px 1fr max-content',\n width: '100%',\n gap: 0,\n background: 'transparent',\n padding: varDefault.menuItemPadding('0 8px'),\n height: varDefault.menuItemHeight('48px'),\n lineHeight: varDefault.menuItemHeight('48px'),\n textAlign: 'left',\n}\nconst menuItemColorStyles = {\n color: varDefault.menuItemColor('#222'),\n}\nconst menuItemHoverStyles = {\n boxShadow: 'none !important',\n background: varDefault.menuItemHoverBg('#eee'),\n}\nconst menuItemActiveStyles = {\n boxShadow: 'none !important',\n background: varDefault.menuItemActiveBg('#aaa'),\n color: varDefault.menuItemActiveColor('#000'),\n}\nconst dropOverStyles = {\n background: `${varDefault.menuDropOverBg('#2196F3')} !important`,\n color: `${varDefault.menuDropOverColor('#fff')} !important`,\n}\nconst dropOverSpanStyles = {\n color: `${varDefault.menuDropOverColor('#fff')} !important`,\n}\nconst dropOverSvgStyles = {\n stroke: `${varDefault.menuDropOverColor('#fff')} !important`,\n}\nconst dragTargetHoverStyles = {\n boxShadow: `inset 0 0 0 2px color-mix(in srgb, ${varDefault.menuDropOverBg(\n '#2196F3'\n )} 50%, transparent) !important`,\n}\n\nconst menuHelperStyleSpec = {\n '.xin-menu, .tosi-menu': menuStyles,\n '.xin-menu > div, .tosi-menu > div': {\n width: varDefault.menuWidth('auto'),\n },\n '.xin-menu-trigger, .tosi-menu-trigger': {\n paddingLeft: 0,\n paddingRight: 0,\n minWidth: varDefault.touchSize('48px'),\n },\n '.xin-menu-separator, .tosi-menu-separator': {\n display: 'inline-block',\n content: ' ',\n height: '1px',\n width: '100%',\n background: varDefault.menuSeparatorColor('#2224'),\n margin: varDefault.menuSeparatorMargin('8px 0'),\n },\n '.xin-menu-element, .tosi-menu-element': {\n minHeight: varDefault.menuItemHeight('48px'),\n },\n '.xin-menu-item, .tosi-menu-item': menuItemStyles,\n '.xin-menu-item, .xin-menu-item > span, .tosi-menu-item, .tosi-menu-item > span':\n menuItemColorStyles,\n '.xin-menu-with-icons .xin-menu-item, .tosi-menu-with-icons .tosi-menu-item':\n {\n gridTemplateColumns: '24px 1fr max-content',\n gap: varDefault.menuItemGap('8px'),\n },\n // Keep compound shortcuts on one line and give them a little room from the\n // caption (covers the no-icon menus too, whose column gap is 0).\n '.xin-menu-shortcut, .tosi-menu-shortcut': {\n whiteSpace: 'nowrap',\n paddingLeft: '1em',\n textAlign: 'right',\n opacity: '0.65',\n },\n '.xin-menu-item > :first-child, .tosi-menu-item > :first-child': {\n justifySelf: 'center',\n alignSelf: 'center',\n },\n '.xin-menu-item svg, .tosi-menu-item svg': {\n stroke: varDefault.menuItemIconColor('#222'),\n },\n '.xin-menu-item.xin-menu-item-checked, .tosi-menu-item.tosi-menu-item-checked':\n {\n background: varDefault.menuItemHoverBg('#eee'),\n },\n '.xin-menu-item > span:nth-child(2), .tosi-menu-item > span:nth-child(2)': {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n textAlign: 'left',\n },\n '.xin-menu-item:hover, .tosi-menu-item:hover': menuItemHoverStyles,\n '.xin-menu-item.drag-target:hover, .tosi-menu-item.drag-target:hover':\n dragTargetHoverStyles,\n '.xin-menu-item:active, .tosi-menu-item:active': menuItemActiveStyles,\n '.xin-menu-item:active svg, .tosi-menu-item:active svg': {\n stroke: varDefault.menuItemIconActiveColor('#000'),\n },\n '.xin-menu-item-highlight, .tosi-menu-item-highlight': menuItemActiveStyles,\n '.xin-menu-item-highlight svg, .tosi-menu-item-highlight svg': {\n stroke: varDefault.menuItemIconActiveColor('#000'),\n },\n '.xin-drop-over, .tosi-drop-over': dropOverStyles,\n '.xin-drop-over > span, .tosi-drop-over > span': dropOverSpanStyles,\n '.xin-drop-over svg, .tosi-drop-over svg': dropOverSvgStyles,\n '.drag-target': dragTargetHoverStyles,\n}\n\n// Initialize the menu system on first use (popMenu / popDropMenu / a <tosi-menu>\n// connecting) rather than at import, so importing this module has no side effect\n// and it can be tree-shaken when unused. Injects the stylesheet and registers\n// the global dismiss handlers once. Both handlers early-out when no menu is\n// open, so registering them only once (no teardown) is harmless. poppedMenus /\n// removeLastMenu are resolved at call time (defined below; this only runs once a\n// menu actually opens).\nlet menuInitialized = false\nfunction ensureMenu(): void {\n if (menuInitialized) return\n menuInitialized = true\n StyleSheet('xin-menu-helper', menuHelperStyleSpec)\n document.addEventListener('mousedown', (event: Event) => {\n if (poppedMenus.length === 0) return\n const path = event.composedPath()\n if (\n !poppedMenus.find(\n (popped) => path.includes(popped.target) || path.includes(popped.menu)\n )\n ) {\n removeLastMenu(0)\n }\n })\n document.body.addEventListener('keydown', (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n removeLastMenu(0)\n }\n })\n}\n\nexport const createMenuAction = (\n item: MenuAction,\n options: PopMenuOptions\n): HTMLElement => {\n const checked = (item.checked && item.checked() && 'check') || false\n let icon = item?.icon || checked || span(' ')\n if (typeof icon === 'string') {\n icon = icons[icon]()\n }\n const itemRole = options.role === 'listbox' ? 'option' : 'menuitem'\n let menuItem: HTMLElement\n const props = item.properties || {}\n if (typeof item?.action === 'string') {\n menuItem = a(\n props,\n {\n role: itemRole,\n href: item.action,\n },\n icon,\n options.localized ? span(localize(item.caption)) : span(item.caption),\n span(\n { class: 'tosi-menu-shortcut' },\n item.shortcut ? displayShortcut(item.shortcut) : ' '\n )\n )\n } else {\n menuItem = button(\n props,\n {\n role: itemRole,\n onClick: item.action,\n },\n icon,\n options.localized ? span(localize(item.caption)) : span(item.caption),\n span(\n { class: 'tosi-menu-shortcut' },\n item.shortcut ? displayShortcut(item.shortcut) : ' '\n )\n )\n }\n menuItem.classList.add('xin-menu-item', 'tosi-menu-item')\n menuItem.classList.toggle('xin-menu-item-checked', checked !== false)\n menuItem.classList.toggle('tosi-menu-item-checked', checked !== false)\n if (item.tooltip) {\n menuItem.dataset.tooltip = item.tooltip\n }\n if (options.role === 'listbox') {\n menuItem.toggleAttribute('aria-selected', checked !== false)\n }\n if (item?.enabled && !item.enabled()) {\n menuItem.setAttribute('disabled', '')\n menuItem.setAttribute('aria-disabled', 'true')\n }\n return menuItem\n}\n\nexport const createDropMenuItem = (\n item: MenuAction,\n options: PopMenuOptions\n): HTMLElement => {\n let icon = item?.icon || span(' ')\n if (typeof icon === 'string') {\n icon = icons[icon]()\n }\n const props = item.properties || {}\n const menuItem = button(\n props,\n {\n onDragenter(event: DragEvent) {\n clearDropGraceTimer()\n menuItem.classList.add('xin-drop-over', 'tosi-drop-over')\n event.preventDefault()\n },\n onDragover(event: DragEvent) {\n event.preventDefault()\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'copy'\n }\n },\n onDragleave(event: DragEvent) {\n const related = event.relatedTarget as Node | null\n if (related && menuItem.contains(related)) return\n menuItem.classList.remove('xin-drop-over', 'tosi-drop-over')\n },\n onDrop(event: DragEvent) {\n event.preventDefault()\n event.stopPropagation()\n menuItem.classList.remove('xin-drop-over', 'tosi-drop-over')\n if (item.dropAction && event.dataTransfer) {\n item.dropAction(event.dataTransfer)\n }\n removeLastMenu(0)\n },\n },\n icon,\n options.localized ? span(localize(item.caption)) : span(item.caption),\n span(' ')\n )\n menuItem.classList.add('xin-menu-item', 'tosi-menu-item')\n if (item.tooltip) {\n menuItem.dataset.tooltip = item.tooltip\n }\n if (item.dropAction && item.acceptsDrop) {\n menuItem.dataset.drop = item.acceptsDrop.join(';')\n }\n if (item?.enabled && !item.enabled()) {\n menuItem.setAttribute('disabled', '')\n menuItem.setAttribute('aria-disabled', 'true')\n }\n return menuItem\n}\n\nexport const createSubMenu = (\n item: SubMenu,\n options: PopMenuOptions\n): HTMLElement => {\n const checked = (item.checked && item.checked() && 'check') || false\n let icon = item?.icon || checked || span(' ')\n if (typeof icon === 'string') {\n icon = icons[icon]()\n }\n\n let disclosureTimer: ReturnType<typeof setTimeout> | null = null\n let disclosed = false\n\n const props = item.properties || {}\n const submenuItem = button(\n props,\n {\n disabled: !(!item.enabled || item.enabled()),\n onClick(event: Event) {\n if (options._dropMode) return\n popMenu(\n Object.assign({}, options, {\n menuItems: resolveMenuItems(item.menuItems),\n target: submenuItem,\n submenuDepth: (options.submenuDepth || 0) + 1,\n position: 'side',\n })\n )\n event.stopPropagation()\n event.preventDefault()\n },\n onDragenter(event: DragEvent) {\n if (!options._dropMode) return\n clearDropGraceTimer()\n event.preventDefault()\n event.stopPropagation()\n const from = event.relatedTarget as Node | null\n // Ignore dragenter from own child elements (icon, text, chevron)\n if (from && submenuItem.contains(from)) return\n submenuItem.classList.add('xin-drop-over', 'tosi-drop-over')\n if (disclosed) {\n // Dragged back to this item — close child menus, don't re-disclose\n removeLastMenu((options.submenuDepth || 0) + 1)\n disclosed = false\n if (disclosureTimer) clearTimeout(disclosureTimer)\n disclosureTimer = null\n return\n }\n if (disclosureTimer) clearTimeout(disclosureTimer)\n disclosureTimer = setTimeout(() => {\n disclosed = true\n const resolved = resolveMenuItems(item.menuItems)\n const filteredItems = options._dataTypes\n ? filterForDrop(resolved, options._dataTypes, options.hideDisabled)\n : resolved\n if (filteredItems.length > 0) {\n popMenu(\n Object.assign({}, options, {\n menuItems: filteredItems,\n target: submenuItem,\n submenuDepth: (options.submenuDepth || 0) + 1,\n position: 'side',\n _dropMode: true,\n _dataTypes: options._dataTypes,\n })\n )\n }\n }, options.disclosureDelay ?? 200)\n },\n onDragover(event: DragEvent) {\n if (!options._dropMode) return\n event.preventDefault()\n event.stopPropagation()\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = item.dropAction ? 'copy' : 'link'\n }\n },\n onDragleave(event: DragEvent) {\n if (!options._dropMode) return\n const related = event.relatedTarget as Node | null\n if (related && submenuItem.contains(related)) return\n // Keep highlight if cursor moved into the disclosed child menu\n if (\n disclosed &&\n related &&\n poppedMenus.some(\n (p) => p.menu.contains(related) || p.target.contains(related)\n )\n ) {\n return\n }\n submenuItem.classList.remove('xin-drop-over', 'tosi-drop-over')\n if (disclosureTimer) {\n clearTimeout(disclosureTimer)\n disclosureTimer = null\n }\n },\n onDrop(event: DragEvent) {\n if (!options._dropMode || !item.dropAction) return\n event.preventDefault()\n event.stopPropagation()\n submenuItem.classList.remove('xin-drop-over', 'tosi-drop-over')\n if (event.dataTransfer) {\n item.dropAction(event.dataTransfer)\n }\n removeLastMenu(0)\n },\n },\n icon,\n options.localized ? span(localize(item.caption)) : span(item.caption),\n icons.chevronRight({ style: { justifySelf: 'flex-end' } })\n )\n submenuItem.classList.add('xin-menu-item', 'tosi-menu-item')\n if (item.tooltip) {\n submenuItem.dataset.tooltip = item.tooltip\n }\n if (options._dropMode && item.dropAction && item.acceptsDrop) {\n submenuItem.dataset.drop = item.acceptsDrop.join(';')\n }\n return submenuItem\n}\n\nexport const createMenuItem = (\n item: MenuItem,\n options: PopMenuOptions\n): HTMLElement => {\n if (item === null) {\n return span({ class: 'xin-menu-separator tosi-menu-separator' })\n } else if (typeof item === 'function') {\n const el = item()\n el.classList.add('xin-menu-element', 'tosi-menu-element')\n return el\n } else if (options._dropMode) {\n const sub = item as SubMenu\n const hasChildren =\n sub.menuItems && resolveMenuItems(sub.menuItems).length > 0\n if (hasChildren) {\n return createSubMenu(sub, options)\n } else if ((item as MenuAction).dropAction) {\n return createDropMenuItem(item as MenuAction, options)\n } else {\n // Drop mode item with acceptsDrop but no dropAction and no children\n // Render as non-interactive label\n let icon = item?.icon || span(' ')\n if (typeof icon === 'string') {\n icon = icons[icon]()\n }\n return button(\n {\n class: 'xin-menu-item tosi-menu-item',\n disabled: true,\n },\n icon,\n options.localized ? span(localize(item.caption)) : span(item.caption),\n span(' ')\n )\n }\n } else {\n const createdItem = (item as MenuAction)?.action\n ? createMenuAction(item as MenuAction, options)\n : createSubMenu(item as SubMenu, options)\n if (options.showChecked && item.checked && item.checked()) {\n requestAnimationFrame(() => {\n createdItem.scrollIntoView({ block: 'center' })\n })\n }\n return createdItem\n }\n}\n\nexport const menu = (options: PopMenuOptions): HTMLDivElement => {\n const { target, width, menuItems, role = 'menu' } = options\n const hasIcons = menuItems.find(\n (item) =>\n item != null &&\n typeof item !== 'function' &&\n ((item as MenuAction).icon || (item as MenuAction).checked)\n )\n\n const menuDepth = options.submenuDepth || 0\n\n const menuDiv = div(\n {\n class: hasIcons\n ? 'xin-menu tosi-menu xin-menu-with-icons tosi-menu-with-icons'\n : 'xin-menu tosi-menu',\n role,\n onClick() {\n if (!options._dropMode) {\n removeLastMenu(0)\n }\n },\n onDragover(event: DragEvent) {\n if (!options._dropMode) return\n event.preventDefault()\n },\n onDragenter() {\n if (!options._dropMode) return\n clearDropGraceTimer()\n },\n onDragleave(event: DragEvent) {\n if (!options._dropMode) return\n const related = event.relatedTarget as Node | null\n if (related && menuDiv.contains(related)) return\n // Check if we moved into a child submenu float\n if (\n related &&\n poppedMenus.some(\n (p) => p.menu.contains(related) || p.target.contains(related)\n )\n ) {\n return\n }\n startDropGraceTimer(menuDepth)\n },\n },\n div(\n {\n style: {\n minWidth: target.offsetWidth + 'px',\n width: typeof width === 'number' ? `${width}px` : width,\n },\n onMousedown(event: Event) {\n event.preventDefault()\n event.stopPropagation()\n },\n },\n ...menuItems.map((item) => createMenuItem(item, options))\n )\n )\n return menuDiv\n}\n\ninterface PoppedMenu {\n target: HTMLElement\n menu: HTMLElement\n onClose?: () => void\n}\nlet lastPopped: PoppedMenu | undefined\nconst poppedMenus: PoppedMenu[] = []\nlet dropGraceTimer: ReturnType<typeof setTimeout> | null = null\n\nconst clearDropGraceTimer = () => {\n if (dropGraceTimer) {\n clearTimeout(dropGraceTimer)\n dropGraceTimer = null\n }\n}\n\nconst startDropGraceTimer = (depth: number) => {\n clearDropGraceTimer()\n dropGraceTimer = setTimeout(() => {\n dropGraceTimer = null\n removeLastMenu(depth)\n }, 500)\n}\n\nexport const removeLastMenu = (depth = 0): PoppedMenu | undefined => {\n clearDropGraceTimer()\n if (depth === 0) {\n document\n .querySelectorAll('tosi-menu.xin-drop-over, tosi-menu.tosi-drop-over')\n .forEach((el) => el.classList.remove('xin-drop-over', 'tosi-drop-over'))\n }\n const toBeRemoved = poppedMenus.splice(depth)\n for (const popped of toBeRemoved) {\n popped.menu.remove()\n if (popped.onClose) {\n popped.onClose()\n }\n }\n lastPopped = toBeRemoved[0]\n return depth > 0 ? poppedMenus[depth - 1] : undefined\n}\n\nexport interface PopMenuOptions {\n target: HTMLElement\n menuItems: MenuItem[]\n width?: string | number\n position?: FloatPosition\n submenuDepth?: number\n submenuOffset?: { x: number; y: number }\n localized?: boolean\n showChecked?: boolean\n hideDisabled?: boolean\n onClose?: () => void\n role?: 'menu' | 'listbox'\n _dropMode?: boolean\n _dataTypes?: readonly string[]\n disclosureDelay?: number\n}\n\nexport interface PopDropMenuOptions\n extends Omit<PopMenuOptions, '_dropMode' | '_dataTypes'> {\n dataTypes: readonly string[]\n}\n\nexport const popMenu = (options: PopMenuOptions): void => {\n ensureMenu()\n options = Object.assign({ submenuDepth: 0 }, options)\n const { target, position, submenuDepth } = options\n if (lastPopped && !document.body.contains(lastPopped?.menu)) {\n lastPopped = undefined\n }\n if (poppedMenus.length && !document.body.contains(poppedMenus[0].menu)) {\n poppedMenus.splice(0)\n }\n if (options._dropMode) {\n // In drop mode, don't toggle — just ensure the right depth is open\n // If this exact submenu is already open at this depth, leave it\n if (\n poppedMenus.length > submenuDepth! &&\n poppedMenus[submenuDepth!]?.target === target\n ) {\n return\n }\n removeLastMenu(submenuDepth)\n } else {\n if (submenuDepth === 0 && lastPopped?.target === target) return\n const popped = removeLastMenu(submenuDepth)\n if (lastPopped?.target === target) return\n if (popped && popped.target === target) {\n removeLastMenu()\n return\n }\n }\n\n if (!options.menuItems?.length) {\n return\n }\n const content = menu(options)\n const float = popFloat({\n content,\n target,\n position,\n })\n float.remainOnScroll = options._dropMode ? 'remain' : 'remove'\n poppedMenus.push({\n target,\n menu: float,\n onClose: options.onClose,\n })\n}\n\nexport const popDropMenu = (options: PopDropMenuOptions): void => {\n ensureMenu()\n const { dataTypes, ...rest } = options\n const filtered = filterForDrop(\n options.menuItems,\n dataTypes,\n options.hideDisabled\n )\n if (!filtered.length) return\n popMenu({\n ...rest,\n menuItems: filtered,\n _dropMode: true,\n _dataTypes: dataTypes,\n })\n}\n\ninterface ShortcutMatch {\n action: MenuAction\n path: SubMenu[]\n}\n\nexport function findShortcutAction(\n items: MenuItem[],\n event: KeyboardEvent,\n path: SubMenu[] = []\n): ShortcutMatch | undefined {\n for (const item of items) {\n if (!item) continue\n if (typeof item === 'function') continue\n const { shortcut } = item as MenuAction\n const { menuItems } = item as SubMenu\n\n if (shortcut) {\n if (matchShortcut(event, shortcut)) {\n const menuAction = item as MenuAction\n // Check if the action itself is disabled\n if (menuAction.enabled && !menuAction.enabled()) return undefined\n // Check if any parent submenu is disabled\n if (path.some((sub) => sub.enabled && !sub.enabled())) return undefined\n return { action: menuAction, path }\n }\n } else if (menuItems) {\n const found = findShortcutAction(resolveMenuItems(menuItems), event, [\n ...path,\n item as SubMenu,\n ])\n if (found) return found\n }\n }\n return undefined\n}\n\ninterface TosiMenuParts extends PartsMap {\n trigger: HTMLButtonElement\n icon: SvgIcon\n}\n\nexport class TosiMenu extends Component<TosiMenuParts> {\n static preferredTagName = 'tosi-menu'\n static lightStyleSpec = {\n ':host': {\n display: 'inline-flex',\n minWidth: vars.touchSize,\n minHeight: vars.touchSize,\n },\n ':host button': {\n margin: 0,\n padding: 0,\n alignSelf: 'stretch',\n flex: '1',\n textAlign: 'center',\n },\n ':host button > tosi-slot': {\n display: 'flex',\n alignItems: 'center',\n gap: varDefault.tosiMenuTriggerGap('10px'),\n },\n }\n\n static initAttributes = {\n menuWidth: 'auto',\n localized: false,\n icon: '',\n acceptsDrop: '',\n disclosureDelay: 0,\n hideDisabled: false,\n }\n\n menuItems: MenuItem[] = []\n dropAction: ((dataTransfer: DataTransfer) => void) | null = null\n\n private _dragMatches = false\n\n private _matchesDrag(event: DragEvent): boolean {\n if (!this.acceptsDrop) return false\n const accepted = stringToTypes(this.acceptsDrop)\n const dragTypes = [...(event.dataTransfer?.types || [])]\n return dragTypes.some((t) => accepted.some((a) => isTypeAllowed([a], t)))\n }\n\n showMenu = (event: Event) => {\n if (event.type === 'click' || (event as KeyboardEvent).code === 'Space') {\n popMenu({\n target: this.parts.trigger,\n width: this.menuWidth,\n localized: this.localized,\n menuItems: this.menuItems,\n })\n event.stopPropagation()\n event.preventDefault()\n }\n }\n\n handleDragEnter = (event: DragEvent) => {\n this._dragMatches = this._matchesDrag(event)\n if (!this._dragMatches) return\n clearDropGraceTimer()\n this.classList.add('xin-drop-over', 'tosi-drop-over')\n const dragTypes = [...(event.dataTransfer?.types || [])]\n if (this.menuItems.length) {\n popDropMenu({\n target: this.parts.trigger,\n menuItems: this.menuItems,\n dataTypes: dragTypes,\n width: this.menuWidth,\n localized: this.localized,\n disclosureDelay: this.disclosureDelay || undefined,\n hideDisabled: this.hideDisabled,\n })\n }\n event.preventDefault()\n }\n\n handleDragOver = (event: DragEvent) => {\n if (!this._dragMatches) return\n event.preventDefault()\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = this.dropAction ? 'copy' : 'link'\n }\n }\n\n handleDragLeave = (event: DragEvent) => {\n if (!this._dragMatches) return\n const related = event.relatedTarget as Node | null\n if (related && this.contains(related)) return\n // Check if moved into an open drop menu\n if (\n related &&\n poppedMenus.some(\n (p) => p.menu.contains(related) || p.target.contains(related)\n )\n ) {\n this.classList.remove('xin-drop-over', 'tosi-drop-over')\n return\n }\n this.classList.remove('xin-drop-over', 'tosi-drop-over')\n startDropGraceTimer(0)\n }\n\n handleDrop = (event: DragEvent) => {\n if (!this._dragMatches || !this.dropAction) return\n event.preventDefault()\n event.stopPropagation()\n this.classList.remove('xin-drop-over', 'tosi-drop-over')\n if (event.dataTransfer) {\n this.dropAction(event.dataTransfer)\n }\n removeLastMenu(0)\n }\n\n content = () =>\n button({ tabindex: 0, part: 'trigger', onClick: this.showMenu }, tosiSlot())\n\n handleShortcut = async (event: KeyboardEvent) => {\n const match = findShortcutAction(this.menuItems, event)\n if (!match) return\n\n event.preventDefault()\n event.stopImmediatePropagation()\n\n const { action: menuAction, path } = match\n\n // Animate: disclose menu path, highlight item, then execute\n if (this.isConnected && document.body.contains(this)) {\n await this.animateShortcut(path, menuAction)\n }\n\n if (menuAction.action instanceof Function) {\n menuAction.action()\n }\n }\n\n private findMenuItemByCaption(\n container: Element,\n caption: string\n ): HTMLElement | null {\n for (const el of container.querySelectorAll('.xin-menu-item')) {\n // Menu items are: icon (svg or span), span(caption), span(shortcut/chevron)\n // Caption is always children[1]\n const captionEl = el.children[1]\n if (captionEl && captionEl.textContent === caption) {\n return el as HTMLElement\n }\n }\n return null\n }\n\n private async animateShortcut(\n path: SubMenu[],\n action: MenuAction\n ): Promise<void> {\n // Ensure any existing menus are closed first\n removeLastMenu(0)\n\n // Open root menu\n popMenu({\n target: this.parts.trigger,\n width: this.menuWidth,\n localized: this.localized,\n menuItems: this.menuItems,\n })\n await new Promise((r) => setTimeout(r, 80))\n\n // Disclose each submenu in the path\n for (let i = 0; i < path.length; i++) {\n const depth = i + 1\n const parentFloat = poppedMenus[i]?.menu\n if (!parentFloat) break\n\n const submenuEl = this.findMenuItemByCaption(parentFloat, path[i].caption)\n if (!submenuEl) break\n\n popMenu({\n target: submenuEl,\n width: this.menuWidth,\n localized: this.localized,\n menuItems: resolveMenuItems(path[i].menuItems),\n submenuDepth: depth,\n position: 'side' as FloatPosition,\n })\n await new Promise((r) => setTimeout(r, 80))\n }\n\n // Highlight the matching action item\n const lastFloat = poppedMenus[poppedMenus.length - 1]?.menu\n if (lastFloat) {\n const itemEl = this.findMenuItemByCaption(lastFloat, action.caption)\n if (itemEl) {\n itemEl.classList.add(\n 'xin-menu-item-highlight',\n 'tosi-menu-item-highlight'\n )\n }\n }\n\n // Brief pause so user can see the highlight\n await new Promise((r) => setTimeout(r, 300))\n\n // Close everything\n removeLastMenu(0)\n }\n\n constructor() {\n super()\n this.addEventListener('keydown', this.showMenu)\n this.addEventListener('dragenter', this.handleDragEnter)\n this.addEventListener('dragover', this.handleDragOver)\n this.addEventListener('dragleave', this.handleDragLeave)\n this.addEventListener('drop', this.handleDrop)\n }\n\n connectedCallback() {\n super.connectedCallback()\n ensureMenu()\n document.addEventListener('keydown', this.handleShortcut, true)\n if (this.acceptsDrop) {\n this.dataset.drop = this.acceptsDrop\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n\n document.removeEventListener('keydown', this.handleShortcut)\n }\n}\n\nexport const tosiMenu = TosiMenu.elementCreator()\n\n/** @deprecated Use tosiMenu instead */\nexport const xinMenu = tosiMenu\n/** @deprecated Use TosiMenu instead */\nexport type XinMenu = TosiMenu\n/** @deprecated Use TosiMenu instead */\nexport const XinMenu: typeof TosiMenu = TosiMenu\n",
|
|
@@ -31,23 +31,24 @@
|
|
|
31
31
|
"/*\nShared markdown rendering for the static doc system.\n\nBoth the build-time pre-render and the client (doc-browser) call THIS function, so\nthe static page hydrates byte-identically. Fenced code blocks are left as\n<pre><code class=\"language-*\"> so the static page shows readable, indexable code\nAND the component can later upgrade consecutive blocks into <live-example> widgets\nvia insertExamples(). A fence info string may carry a `#id` (```js#my-example) to\ngive that example a stable anchor — see the docMarked renderer below.\n*/\n\nimport { Marked, Renderer } from 'marked'\n\nconst baseRenderer = new Renderer()\n\n// A doc-scoped marked instance. Its ONLY customization: a fenced code block whose\n// info string carries a `#id` suffix — e.g. ```js#my-example — renders the lang\n// clean (`language-js`, so all existing grouping/highlighting is unaffected) but\n// stamps `data-example-id=\"my-example\"` on the <pre>. insertExamples (client) and\n// the book builders both read that to give the live example a stable anchor for\n// deep-linking. A block with no `#id` is byte-identical to default marked output.\n// Build-time transpiled JS for executable blocks, keyed by exact source text (see\n// `renderDocMarkdown`). When present for a block, the renderer emits a hidden,\n// non-executing `<script type=\"application/tosi-transpiled\">` sibling carrying the\n// baked JS so the page can RUN the example without loading the tjs/ts transpiler —\n// see self-contained-examples-plan.md. Per-parse module state, safe because\n// `docMarked.parse` is synchronous (same pattern as the footnote state below).\nexport interface ExampleBake {\n dialect: string\n js: string\n}\nexport type ExampleBakes = Map<string, ExampleBake>\nlet currentBakes: ExampleBakes | undefined\n\nconst docMarked = new Marked()\ndocMarked.use({\n renderer: {\n code(token: any) {\n // Fence info grammar: `<lang>` optionally with a `:<mode>` and/or `#<id>` in\n // EITHER order — `js`, `css#anchor`, `js:iframe`, `ts:ide#demo`, `ts#demo:ide`.\n // `:mode` (inline | iframe | ide) sets the live example's execution mode; `#id`\n // gives it a stable anchor. `#id` is `[A-Za-z0-9_-]+` and `:mode` is `[a-z]+`, so\n // the two can't overlap — parse each independently, order-free. Both are stripped\n // so the language stays clean (`language-js`) for grouping/highlighting.\n const info = String(token.lang || '')\n const lang = info.match(/^[a-z]+/)?.[0] ?? ''\n const id = info.match(/#([A-Za-z0-9_-]+)/)?.[1] ?? ''\n const mode = info.match(/:([a-z]+)/)?.[1] ?? ''\n const bake = currentBakes?.get(token.text)\n if (!id && !mode && !bake) return false // default rendering — byte-identical\n let html = baseRenderer.code({ ...token, lang })\n const attrs = [\n id && `data-example-id=\"${id}\"`,\n mode && `data-example-mode=\"${mode}\"`,\n ]\n .filter(Boolean)\n .join(' ')\n if (attrs) html = html.replace(/^<pre>/, `<pre ${attrs}>`)\n if (bake) {\n // `<` → < prevents a `</script>` inside the JS from breaking the tag;\n // JSON.parse decodes it unchanged at hydration.\n const json = JSON.stringify(bake.js).replace(/</g, '\\\\u003c')\n html += `<script type=\"application/tosi-transpiled\" data-dialect=\"${bake.dialect}\">${json}</script>`\n }\n return html\n },\n },\n})\n\n// ── Prose Markdown: wikilinks + footnotes ────────────────────────────────────\n// Enabled by default because each activates ONLY on its own syntax ([[…]] /\n// [^id]) — a doc that doesn't use them renders byte-identically (tosijs-ui's own\n// docs use neither). marked core supports neither; both are common in prose.\n\nfunction slugify(s: string): string {\n return s\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n}\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\n}\n\n// Per-parse footnote state. `parse()` is synchronous and Marked tokenizes fully\n// before rendering, so a module-level object is safe: preprocess resets it, the\n// tokenizers fill it (defs during the block pass, refs during inline — refs set\n// the number by first-appearance order), postprocess renders the endnotes.\nconst plainMarked = new Marked() // renders footnote-definition markdown (no extensions)\nlet footnoteDefs = new Map<string, string>()\nlet footnoteOrder: string[] = []\n\ndocMarked.use({\n hooks: {\n preprocess(markdown: string) {\n footnoteDefs = new Map()\n footnoteOrder = []\n return markdown\n },\n postprocess(html: string) {\n if (footnoteOrder.length === 0) return html\n const items = footnoteOrder\n .map((id) => {\n const body = plainMarked.parseInline(\n footnoteDefs.get(id) ?? ''\n ) as string\n const eid = slugify(id)\n return `<li id=\"fn-${eid}\"><p>${body} <a href=\"#fnref-${eid}\" class=\"footnote-backref\" aria-label=\"Back to reference\">↩</a></p></li>`\n })\n .join('\\n')\n return `${html}\\n<section class=\"footnotes\" role=\"doc-endnotes\">\\n<hr />\\n<ol>\\n${items}\\n</ol>\\n</section>\\n`\n },\n },\n extensions: [\n {\n // [[slug]] / [[slug|label]] → link to /slug/. Not matched inside code spans\n // (Marked tokenizes those first). Resolves by slugifying the target.\n name: 'wikilink',\n level: 'inline',\n start(src: string) {\n return src.match(/\\[\\[/)?.index\n },\n tokenizer(src: string) {\n const m = /^\\[\\[([^\\]|]+?)(?:\\|([^\\]]+?))?\\]\\]/.exec(src)\n if (!m) return undefined\n return {\n type: 'wikilink',\n raw: m[0],\n target: m[1].trim(),\n label: (m[2] ?? m[1]).trim(),\n }\n },\n renderer(token: any) {\n return `<a href=\"/${slugify(\n token.target\n )}/\" class=\"wikilink\">${escapeHtml(token.label)}</a>`\n },\n },\n {\n // [^id]: definition (single line) — collected, rendered as endnotes.\n name: 'footnoteDef',\n level: 'block',\n start(src: string) {\n return src.match(/^\\[\\^[^\\]]+\\]:/m)?.index\n },\n tokenizer(src: string) {\n const m = /^\\[\\^([^\\]]+)\\]:[ \\t]*([^\\n]*)(?:\\n|$)/.exec(src)\n if (!m) return undefined\n footnoteDefs.set(m[1].trim(), m[2].trim())\n return { type: 'footnoteDef', raw: m[0] } // collected; renders nothing inline\n },\n renderer() {\n return ''\n },\n },\n {\n // [^id] reference → superscript link to the endnote.\n name: 'footnoteRef',\n level: 'inline',\n start(src: string) {\n return src.match(/\\[\\^/)?.index\n },\n tokenizer(src: string) {\n const m = /^\\[\\^([^\\]]+)\\]/.exec(src)\n if (!m) return undefined\n const id = m[1].trim()\n if (!footnoteOrder.includes(id)) footnoteOrder.push(id)\n return { type: 'footnoteRef', raw: m[0], id }\n },\n renderer(token: any) {\n const n = footnoteOrder.indexOf(token.id) + 1\n const eid = slugify(token.id)\n return `<sup class=\"footnote-ref\"><a href=\"#fn-${eid}\" id=\"fnref-${eid}\">${n}</a></sup>`\n },\n },\n ],\n})\n\n/** Render a doc's markdown text to HTML (synchronous, default marked options). */\nexport function renderDocMarkdown(\n text: string,\n opts: { bakes?: ExampleBakes } = {}\n): string {\n currentBakes = opts.bakes\n try {\n return docMarked.parse(text) as string\n } finally {\n currentBakes = undefined\n }\n}\n\n/**\n * Derive a clean <meta name=\"description\"> from a doc's first prose paragraph.\n * Skips the title heading, code fences, tables, quotes, html and image/link-only\n * lines; strips inline markdown; drops low-value \"This is a…\" leads; and truncates\n * on a sentence boundary where possible (never mid-clause ending in a comma).\n * Pages can override this entirely via their JSON metadata `description`.\n */\nexport function docDescription(text: string, maxLength = 160): string {\n const lines = text.split('\\n')\n let inFence = false\n const prose: string[] = []\n for (const raw of lines) {\n const line = raw.trim()\n if (line.startsWith('```') || line.startsWith('~~~')) {\n inFence = !inFence\n continue\n }\n if (inFence) continue\n if (line === '') {\n if (prose.length) break // end of the first prose paragraph\n continue\n }\n if (line.startsWith('#')) continue // headings\n if (line.startsWith('<!--') || line.startsWith('/*')) continue // metadata\n if (line.startsWith('<')) continue // raw html\n if (line.startsWith('|') || line.startsWith('>')) continue // tables, quotes\n if (line.startsWith('![') || /^\\[.*\\]\\(.*\\)$/.test(line)) continue // image/link-only\n prose.push(line)\n if (prose.join(' ').length >= maxLength) break\n }\n\n let s = prose\n .join(' ')\n .replace(/`([^`]+)`/g, '$1')\n .replace(/\\*\\*([^*]+)\\*\\*/g, '$1')\n .replace(/\\*([^*]+)\\*/g, '$1')\n .replace(/\\[([^\\]]+)\\]\\([^)]*\\)/g, '$1')\n .replace(/^This (?:is|component is|widget is)\\s+(?:a|an|the)\\s+/i, '')\n .trim()\n if (!s) return ''\n s = s.charAt(0).toUpperCase() + s.slice(1)\n if (s.length <= maxLength) return s.replace(/[,;:\\s]+$/, '')\n\n const slice = s.slice(0, maxLength)\n const sentenceEnd = Math.max(\n slice.lastIndexOf('. '),\n slice.lastIndexOf('! '),\n slice.lastIndexOf('? ')\n )\n if (sentenceEnd > maxLength * 0.6)\n return slice.slice(0, sentenceEnd + 1).trim()\n const wordEnd = slice.lastIndexOf(' ')\n return (\n slice\n .slice(0, wordEnd)\n .replace(/[,;:.\\s]+$/, '')\n .trim() + '…'\n )\n}\n",
|
|
32
32
|
"/*\nThe ONE rule for a doc page's <title>.\n\nIt has to be one rule, because it is applied twice — once by the static generator into\nthe pre-rendered `<head>`, and once by the doc-browser when it hydrates. Two\nindependently-written copies drifted, and the title became the one thing on the page\nthat visibly MOVED on hydration:\n\n JS off → \"tosijs-ui — robust, dependency-free web components\" (headTitle)\n hydrated → \"tosijs-ui — tosijs-ui\" (!)\n\n...because the runtime copy ignored `headTitle` and re-suffixed a title that already\nended in the project name. That is GitHub issue #6, and it was live on our own home\npage while this release's whole thesis was \"hydration is purely additive, nothing\nmoves\".\n\nShared by `site/generate-site.ts` (build) and `doc-browser.ts` (runtime). Pure — no DOM,\nno Bun — so both can import it.\n*/\n\n/** The fields of a Doc that bear on its title. Structural, so both callers fit. */\nexport interface TitledDoc {\n title: string\n /** verbatim <title>, no project suffix — a per-doc override */\n headTitle?: string\n}\n\n/**\n * `headTitle` wins verbatim. Otherwise suffix the project name — but only when the two\n * are genuinely distinct.\n *\n * \"Distinct\" means **neither string contains the other, compared case-insensitively.**\n * A one-way, case-sensitive `title.includes(projectName)` check missed real cases: a\n * project titled `Tosijs-UI` against a doc titled `tosijs-ui` (case), and a doc whose\n * title is a *substring* of the project name (the containment runs the other way). Any\n * of those, suffixed, reads as redundant — \"tosijs-ui — tosijs-ui\" being the one that\n * shipped (issue #6). When one already contains the other, the doc's own title is the\n * more specific label, so use it alone.\n */\nexport function pageTitle(doc: TitledDoc, projectName?: string): string {\n // A whitespace-only `headTitle` is not an override, it's a blank <title> — trim it\n // and fall through. Trimming also cleans up an accidentally-padded one (\"verbatim\"\n // means \"no project suffix\", not \"keep your stray whitespace\").\n const headTitle = doc.headTitle?.trim()\n if (headTitle) return headTitle\n // Trim first: a whitespace-only name ('' or ' ') is \"no project name\", not a real\n // one. Untrimmed, ' ' is truthy and slips through — and worse, `title.includes(' ')`\n // is true for any multi-word title, so it would silently suppress a suffix that\n // should appear. Trimming also strips a padded 'tosijs-ui ' down to the real name.\n const project = projectName?.trim() ?? ''\n if (!project) return doc.title\n const t = doc.title.toLowerCase()\n const p = project.toLowerCase()\n if (t.includes(p) || p.includes(t)) return doc.title\n return `${doc.title} — ${project}`\n}\n",
|
|
33
33
|
"/*#\n# tabs\n\n`<tosi-tabs>` creates a `tabpanel` for its children, creating a `tab` for each based on its\n`name` attribute.\n\n```js\n[...preview.querySelectorAll('div[name]')].forEach(div => {\n div.style.color = `hsl(${(Math.random() * 360).toFixed(0)} 50% 50%)`\n})\n\nimport { div, button } from 'tosijs'.elements\nconst tabSelector = preview.querySelector('tosi-tabs')\n\ntabSelector.handleCloseTab = body => {\n if (!confirm(`Are you sure you want to close the ${body.getAttribute('name')} tab?`)) {\n return false\n }\n}\n\nlet bodycount = 0\npreview.querySelector('.add').addEventListener('click', () => {\n const name = `new tab ${++bodycount}`\n const body = div(\n {name, dataClose: true},\n name,\n )\n tabSelector.addTabBody(body, true)\n})\n```\n```html\n<tosi-tabs>\n <div name=\"first\">first body</div>\n <div name=\"second\" data-close>\n <template role=\"tab\">\n <tosi-icon\n style=\"\n display: inline-block;\n width: 16px;\n height: 16px;\n transform: translateY(2px);\n margin-right: 4px;\n stroke: var(--brand-color);\n \"\n icon=\"eye\"\n ></tosi-icon>\n <span>Ooooh!!!</span>\n </template>\n look at the html…\n </div>\n <div name=\"third\">third body</div>\n <button class=\"add\" slot=\"after-tabs\">\n <tosi-icon icon=\"plus\"></tosi-icon>\n </button>\n</tosi-tabs>\n```\n```css\n .preview tosi-tabs {\n height: 100%;\n }\n\n .preview div[name] {\n padding: 20px;\n text-align: center;\n height: 100%;\n font-size: 200%;\n }\n\n .preview .add {\n width: 38px;\n line-height: 38px;\n height: 38px;\n padding: 0;\n }\n```\n\nThe `<tosi-tabs>`s `value` is the index of its active body.\n\nA `<tosi-tabs>` has `addTabBody(body: HTMLElement, select?: boolean)` and\n`removeTabBody(body: number | HTMLElement)` methods for updating its content.\n\nYou can also just insert or remove tab bodies directly and call `setupTabs()`.\n\n## Closeable Tabs\n\nAdding the `data-close` attribute to a tab will make it closeable.\n\nWhen a tab is closed, the `<tosi-tabs>` element's `handleCloseTab: (tabBody: Element) => boolean | undefined | void`\nwill be called (the old `onCloseTab` name still works but is deprecated). If you set this and return `false`, the tab will\nnot be closed (e.g. if you want to implement save/cancel behavior).\n\n## Custom Tab Content\n\nYou can specify the exact content of the tab for a given body by\nadding a `<template role=\"tab\">` to that body. The contents of that\ntemplate will be cloned into the tab.\n\n## Localized Support\n\n```html\n<tosi-tabs localized>\n <div name=\"localize\"><h2>localize!</h2></div>\n <div name=\"tabs\"><h2>tabs</h2></div>\n</tosi-tabs>\n```\n\n`<tosi-tabs>` supports the `localized` attribute. It will automatically localize\ntab names (but it won't override custom tab content, so localizing that is on you).\n\n## Tab Tooltips\n\nAdd `data-tooltip` to a tab body and it will be shown on its tab button\n(requires `initTooltips()`).\n\n```js\nimport { initTooltips } from 'tosijs-ui'\n\ninitTooltips()\n```\n```html\n<tosi-tabs>\n <div name=\"Overview\" data-tooltip=\"Project summary and status\">Overview content</div>\n <div name=\"Details\" data-tooltip=\"Configuration and **advanced** settings\">Details content</div>\n <div name=\"Log\" data-tooltip=\"Recent activity and events\">Log content</div>\n</tosi-tabs>\n```\n```css\n.preview tosi-tabs {\n height: 100%;\n}\n.preview div[name] {\n padding: 20px;\n text-align: center;\n}\n```\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport {\n Component as WebComponent,\n ElementCreator,\n elements,\n vars,\n PartsMap,\n} from 'tosijs'\n\nimport { tosiLocalized, TosiLocalized } from './localize'\n\nimport { icons } from './icons'\n\nconst { div, slot, span, button } = elements\n\ntype TabCloseHandler = (tabBody: Element) => boolean | undefined | void\n\ninterface TabsParts extends PartsMap {\n tabs: HTMLElement\n selected: HTMLElement\n}\n\nexport class TosiTabs extends WebComponent {\n static preferredTagName = 'tosi-tabs'\n\n static initAttributes = {\n localized: false,\n }\n\n value = 0\n\n makeTab(tabs: TosiTabs, tabBody: HTMLElement, bodyId: string): HTMLElement {\n const tabName = tabBody.getAttribute('name') as string\n const tabContent =\n (\n tabBody.querySelector('template[role=\"tab\"]') as HTMLTemplateElement\n )?.content.cloneNode(true) ||\n (this.localized ? tosiLocalized(tabName) : span(tabName))\n const tab = div(\n tabContent,\n {\n part: 'tab',\n tabindex: 0,\n role: 'tab',\n ariaControls: bodyId,\n },\n tabBody.hasAttribute('data-close')\n ? button(\n {\n title: 'close',\n class: 'close',\n },\n icons.x()\n )\n : {}\n )\n const tooltip = tabBody.dataset.tooltip\n if (tooltip) {\n tab.dataset.tooltip = tooltip\n }\n return tab\n }\n\n static shadowStyleSpec = {\n ':host': {\n // New --tosi-tabs-* variables with legacy fallbacks\n '--tosi-tabs-selected-color':\n 'var(--xin-tabs-selected-color, var(--tosi-accent, currentColor))',\n '--tosi-tabs-bar-color': 'var(--xin-tabs-bar-color, #ccc)',\n '--tosi-tabs-bar-height': 'var(--xin-tabs-bar-height, 2px)',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n overflow: 'hidden',\n boxShadow: 'none !important',\n },\n slot: {\n position: 'relative',\n display: 'block',\n flex: '1',\n overflow: 'hidden',\n overflowY: 'auto',\n },\n 'slot[name=\"after-tabs\"]': {\n flex: '0 0 auto',\n },\n '::slotted([hidden])': {\n display: 'none !important',\n },\n ':host::part(tabpanel)': {\n display: 'flex',\n flexDirection: 'column',\n overflowX: 'auto',\n },\n ':host::part(tabrow)': {\n display: 'flex',\n },\n ':host .tabs': {\n display: 'flex',\n userSelect: 'none',\n whiteSpace: 'nowrap',\n },\n ':host .tabs > div': {\n padding: `${vars.spacing50} ${vars.spacing}`,\n cursor: 'default',\n display: 'flex',\n alignItems: 'baseline',\n },\n ':host .tabs > [aria-selected]': {\n '--text-color': vars.tosiTabsSelectedColor,\n color: vars.textColor,\n },\n ':host .elastic': {\n flex: '1',\n },\n ':host .border': {\n background: vars.tosiTabsBarColor,\n },\n ':host .border > .selected': {\n content: ' ',\n width: 0,\n height: vars.tosiTabsBarHeight,\n background: vars.tosiTabsSelectedColor,\n transition: 'ease-out 0.2s',\n },\n ':host button.close': {\n border: 0,\n background: 'transparent',\n textAlign: 'center',\n marginLeft: vars.spacing50,\n padding: 0,\n },\n ':host button.close > svg': {\n height: '12px',\n },\n }\n\n handleCloseTab: TabCloseHandler | null = null\n\n /**\n * @deprecated Use `handleCloseTab`. The `on<Event>` prefix is reserved for the\n * elements-factory event-handler sugar (`tosiTabs({ onCloseTab })` would attach a\n * dead `closetab` listener instead of setting the callback), and tosijs warns when a\n * component defines such a property. This alias keeps existing `el.onCloseTab = fn`\n * code working; migrate to `handleCloseTab`.\n */\n get onCloseTab(): TabCloseHandler | null {\n return this.handleCloseTab\n }\n set onCloseTab(handler: TabCloseHandler | null) {\n this.handleCloseTab = handler\n }\n\n content = [\n div(\n { role: 'tabpanel', part: 'tabpanel' },\n div(\n { part: 'tabrow' },\n div({ class: 'tabs', part: 'tabs' }),\n div({ class: 'elastic' }),\n slot({ name: 'after-tabs' })\n ),\n div({ class: 'border' }, div({ class: 'selected', part: 'selected' }))\n ),\n slot(),\n ]\n\n addTabBody(body: HTMLElement, selectTab = false): void {\n if (!body.hasAttribute('name')) {\n console.error('element has no name attribute', body)\n throw new Error('element has no name attribute')\n }\n this.append(body)\n this.setupTabs()\n if (selectTab) {\n this.value = this.bodies.length - 1\n }\n this.queueRender()\n }\n\n removeTabBody(body: HTMLElement): void {\n body.remove()\n this.setupTabs()\n this.queueRender()\n }\n\n keyTab = (event: Event): void => {\n const { tabs } = this.parts\n const tabIndex = [...tabs.children].indexOf(event.target as HTMLElement)\n switch ((event as KeyboardEvent).key) {\n case 'ArrowLeft':\n this.value =\n (tabIndex + Number(tabs.children.length) - 1) % tabs.children.length\n ;(tabs.children[this.value] as HTMLElement).focus()\n event.preventDefault()\n break\n case 'ArrowRight':\n this.value = (tabIndex + 1) % tabs.children.length\n ;(tabs.children[this.value] as HTMLElement).focus()\n event.preventDefault()\n break\n case ' ':\n this.pickTab(event)\n event.preventDefault()\n break\n default:\n // console.log(event.key)\n }\n }\n\n get bodies(): Element[] {\n return [...this.children].filter((elt) => elt.hasAttribute('name'))\n }\n\n pickTab = (event: Event): void => {\n const { tabs } = this.parts\n const target = event.target as HTMLElement\n const isCloseEvent = target.closest('button.close') !== null\n const tab = target.closest('.tabs > div') as HTMLElement\n const tabIndex = [...tabs.children].indexOf(tab)\n if (isCloseEvent) {\n const body = this.bodies[tabIndex]\n if (!this.handleCloseTab || this.handleCloseTab(body) !== false) {\n this.removeTabBody(this.bodies[tabIndex] as HTMLElement)\n }\n } else {\n if (tabIndex > -1) {\n this.value = tabIndex\n }\n }\n }\n\n setupTabs = (): void => {\n const { tabs } = this.parts\n const tabBodies = [...this.children].filter(\n (child) => !child.hasAttribute('slot') && child.hasAttribute('name')\n )\n tabs.textContent = ''\n if (this.value >= tabBodies.length) {\n this.value = tabBodies.length - 1\n }\n for (const index in tabBodies) {\n const tabBody = tabBodies[index] as HTMLElement\n const bodyId = `${this.instanceId}-${index}`\n tabBody.id = bodyId\n const tab = this.makeTab(this, tabBody, bodyId)\n tabs.append(tab)\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n const { tabs } = this.parts\n tabs.addEventListener('click', this.pickTab)\n tabs.addEventListener('keydown', this.keyTab)\n this.setupTabs()\n TosiLocalized.allInstances.add(this)\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n TosiLocalized.allInstances.delete(this)\n }\n\n localeChanged = () => {\n this.queueRender()\n }\n\n handleResize(): void {\n this.queueRender()\n }\n\n render(): void {\n const { tabs, selected } = this.parts as TabsParts\n const tabBodies = this.bodies\n for (let i = 0; i < tabBodies.length; i++) {\n const tabBody = tabBodies[i]\n const tab = tabs.children[i] as HTMLElement\n const isSelected = this.value === Number(i)\n tab.toggleAttribute('aria-selected', isSelected)\n tabBody.toggleAttribute('hidden', !isSelected)\n if (isSelected) {\n selected.style!.marginLeft = `${tab.offsetLeft - tabs.offsetLeft}px`\n selected.style!.width = `${tab.offsetWidth}px`\n }\n }\n }\n}\n\n/** @deprecated Use TosiTabs instead */\nexport type TabSelector = TosiTabs\n/** @deprecated Use TosiTabs instead */\nexport const TabSelector: typeof TosiTabs = TosiTabs\n\nexport const tosiTabs = TosiTabs.elementCreator() as ElementCreator<TosiTabs>\n\n/** @deprecated Use tosiTabs instead */\nexport const tabSelector = tosiTabs\n\n/** @deprecated Use tosiTabs instead */\nexport const xinTabs = tosiTabs\n",
|
|
34
|
+
"/*#\n# pocket bar\n\nA **pocket toolbar**: a single icon at rest that expands into a bar of your controls\non hover or tap, then tucks away again. It's translucent until you touch it, so it\nstays out of the way when pinned over content.\n\nWhatever you put inside is the toolbar — they're your light-DOM children, so *any*\ncontrol works: buttons, a checkbox, a segmented control. The component only supplies\nthe handle, the reveal, and the positioning.\n\nHover (or focus, or tap) peeks it open; **click the handle to keep it open**, and\nclick the handle again — or anywhere outside — to dismiss it.\n\n```html\n<div class=\"pocket-demo\">\n <tosi-pocket-bar direction=\"e\">\n <button title=\"Cut\"><tosi-icon icon=\"scissors\"></tosi-icon></button>\n <button title=\"Copy\"><tosi-icon icon=\"copy\"></tosi-icon></button>\n <button title=\"Paste\"><tosi-icon icon=\"clipboard\"></tosi-icon></button>\n </tosi-pocket-bar>\n\n <tosi-pocket-bar direction=\"s\">\n <button title=\"Bold\"><tosi-icon icon=\"bold\"></tosi-icon></button>\n <button title=\"Italic\"><tosi-icon icon=\"italic\"></tosi-icon></button>\n <button title=\"Underline\"><tosi-icon icon=\"underline\"></tosi-icon></button>\n </tosi-pocket-bar>\n\n <tosi-pocket-bar direction=\"w\">\n <button title=\"Zoom in\"><tosi-icon icon=\"zoomIn\"></tosi-icon></button>\n <button title=\"Zoom out\"><tosi-icon icon=\"zoomOut\"></tosi-icon></button>\n </tosi-pocket-bar>\n\n <tosi-pocket-bar direction=\"n\" icon=\"settings\">\n <label title=\"Snap to grid\"><input type=\"checkbox\" checked /><tosi-icon icon=\"grid\"></tosi-icon></label>\n <button title=\"Undo\"><tosi-icon icon=\"cornerUpLeft\"></tosi-icon></button>\n <button title=\"Redo\"><tosi-icon icon=\"cornerUpRight\"></tosi-icon></button>\n </tosi-pocket-bar>\n</div>\n```\n```css\n.preview .pocket-demo {\n display: flex;\n align-items: center;\n justify-content: space-around;\n height: 260px;\n padding: 60px 20px;\n}\n.preview .pocket-demo tosi-pocket-bar button,\n.preview .pocket-demo tosi-pocket-bar label {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 5px;\n border: 0;\n border-radius: 6px;\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n.preview .pocket-demo tosi-pocket-bar button:hover,\n.preview .pocket-demo tosi-pocket-bar label:hover {\n background: #8882;\n}\n```\n\nEach handle above hints its axis — `⋯` for the horizontal bars (`e`, `w`), `⋮` for the\nvertical ones (`n`, `s`) — and the fourth uses an explicit `settings` icon. Hover any of\nthem to see the bar grow in its `direction`.\n\n## Attributes\n\n- `icon` — the handle icon (any icon name or [composition](icon-composition)). By\n default it hints the growth axis: `moreHorizontal` (⋯) for a horizontal bar,\n `moreVertical` (⋮) for a vertical one.\n- `direction` — where the bar grows, using the `FloatPosition` vocabulary\n (`n | e | s | w | ne | nw | se | sw | en | wn | es | ws | side | auto`). `auto`\n (the default) grows a **horizontal** bar toward the nearer edge of the screen.\n `e` / `w` (and `en` / `es` / `wn` / `ws`) grow a horizontal bar; `n` / `s` (and\n `ne` / `nw` / `se` / `sw`) grow a **vertical** one. The bar is placed\n edge-contiguous with the handle via [positionFloat](popFloat).\n- `open` — reflects the open state. Hover / focus / tap peek it open; clicking the\n handle keeps it open until you click the handle again or click outside.\n\nThe handle is slightly translucent at rest (`--tosi-pocket-opacity`, default `0.75`)\nand opaque while open; it keeps a blurred glass chip (`--tosi-pocket-bg`, a translucent\ntint of `--tosi-bg`, so it follows the theme) so it stays legible over busy content.\n\n### Styling hooks\n\n- `--tosi-pocket-opacity` — resting opacity of the whole widget (default `0.75`).\n- `--tosi-pocket-bg` — the glass background (a translucent tint of `--tosi-bg`).\n- `--tosi-pocket-handle-color` — colour of just the collapsed handle icon, independent\n of the bar's controls (e.g. to flag status on the handle alone). Default `inherit`.\n\nSlotted `<button>`s and `<label>`s get flat icon-button styling by default. A\ncheckbox-as-icon — a `<label>` wrapping an `<input type=checkbox>` and an icon — greys\nand desaturates until checked, so a toggle needs no extra CSS.\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport {\n Component as WebComponent,\n elements,\n ElementCreator,\n PartsMap,\n vars,\n varDefault,\n} from 'tosijs'\nimport { svgIcon, SvgIcon } from './icons'\nimport { positionFloat, FloatPosition } from './pop-float'\n\nconst { button, div, slot } = elements\n\ninterface PocketBarParts extends PartsMap {\n handle: HTMLButtonElement\n handleIcon: SvgIcon\n bar: HTMLDivElement\n}\n\nexport class TosiPocketBar extends WebComponent<PocketBarParts> {\n static preferredTagName = 'tosi-pocket-bar'\n\n static initAttributes = {\n icon: '',\n direction: 'auto',\n open: false,\n }\n\n // Whether the bar is *pinned* open by a click (vs. a transient hover/focus peek).\n private pinned = false\n\n // n/s grow a vertical bar; everything else (auto, e/w, side) is horizontal.\n private get vertical(): boolean {\n return /^[ns]/.test(this.direction)\n }\n\n // Default handle hints the growth axis: ⋮ for a vertical bar, ⋯ for a horizontal\n // one. An explicit `icon` always wins.\n private get resolvedIcon(): string {\n return this.icon || (this.vertical ? 'moreVertical' : 'moreHorizontal')\n }\n\n // `auto` → positionFloat's `side` mode: a horizontal bar toward the nearer screen\n // edge. Everything else is a FloatPosition passed straight through.\n private get floatPosition(): FloatPosition {\n return (\n this.direction === 'auto' ? 'side' : this.direction\n ) as FloatPosition\n }\n\n reposition = (): void => {\n if (!this.hydrated) return\n positionFloat(\n this.parts.bar,\n this.parts.handle,\n this.floatPosition,\n 'remain',\n 'remain'\n )\n }\n\n // Open is driven authoritatively in JS (not CSS :hover), so an explicit close —\n // clicking the handle again, or clicking outside — always wins over a lingering\n // hover. Otherwise a click-to-open bar could never be dismissed while the pointer\n // stayed over it.\n private setOpen(open: boolean): void {\n if (this.open !== open) this.open = open\n if (open) this.reposition()\n }\n\n private handlePointerEnter = (): void => this.setOpen(true)\n private handlePointerLeave = (): void => {\n if (!this.pinned) this.setOpen(false)\n }\n private handleFocusIn = (): void => this.setOpen(true)\n private handleFocusOut = (): void => {\n // Close once focus has left the whole component (unless pinned) — next frame,\n // after focus has landed on its new target.\n requestAnimationFrame(() => {\n if (!this.pinned && !this.matches(':focus-within')) this.setOpen(false)\n })\n }\n\n toggle = (event?: Event): void => {\n event?.preventDefault()\n this.pinned = !this.pinned\n this.setOpen(this.pinned)\n }\n\n // A pointer-down anywhere outside a pinned bar dismisses it (composedPath so it\n // works across the shadow boundary and the position:fixed bar).\n private handleOutsidePointer = (event: Event): void => {\n if (!this.pinned) return\n const path = event.composedPath()\n if (!path.includes(this) && !path.includes(this.parts.bar)) {\n this.pinned = false\n this.setOpen(false)\n }\n }\n\n private handleScrollResize = (): void => {\n if (this.open) this.reposition()\n }\n\n content = () => [\n button(\n {\n part: 'handle',\n class: 'no-drag',\n title: 'toolbar',\n 'aria-label': 'toolbar',\n 'aria-expanded': 'false',\n onClick: this.toggle,\n },\n svgIcon({ part: 'handleIcon', icon: this.resolvedIcon })\n ),\n div(\n {\n part: 'bar',\n role: 'toolbar',\n // Set at construction (render() keeps it in sync if `direction` changes).\n style: { flexDirection: this.vertical ? 'column' : 'row' },\n },\n slot()\n ),\n ]\n\n static shadowStyleSpec = {\n ':host': {\n display: 'inline-flex',\n position: 'relative',\n // Slightly translucent at rest so it stays out of the way, fully opaque when\n // open. The handle keeps a blurred glass chip even at rest (below), so it\n // stays legible over busy content instead of a bare, hard-to-see icon.\n opacity: varDefault.tosiPocketOpacity('0.75'),\n transition: 'opacity 0.15s ease-out',\n },\n ':host([open])': {\n opacity: '1',\n },\n ':host [part=\"handle\"]': {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: vars.spacing50,\n border: '0',\n margin: '0',\n cursor: 'pointer',\n // The handle's colour is independently settable (the bar's controls stay\n // neutral), so a consumer can e.g. flag status on just the collapsed icon.\n color: varDefault.tosiPocketHandleColor('inherit'),\n // A blurred \"glass\" chip tinted from --tosi-bg (theme-aware, light or dark).\n // The backdrop blur keeps the icon readable over any background.\n background: varDefault.tosiPocketBg(\n 'color-mix(in srgb, var(--tosi-bg, #fff) 85%, transparent)'\n ),\n backdropFilter: 'blur(12px)',\n borderRadius: vars.spacing,\n transition: 'background 0.15s ease-out',\n },\n ':host [part=\"bar\"]': {\n position: 'fixed',\n display: 'flex',\n gap: vars.spacing25,\n padding: vars.spacing25,\n background: varDefault.tosiPocketBg(\n 'color-mix(in srgb, var(--tosi-bg, #fff) 82%, transparent)'\n ),\n backdropFilter: 'blur(12px)',\n borderRadius: vars.spacing,\n boxShadow: `0 ${vars.spacing25} ${vars.spacing} #0003`,\n // Hidden and inert at rest; revealed when open.\n opacity: '0',\n pointerEvents: 'none',\n transform: 'scale(0.9)',\n transition: 'opacity 0.15s ease-out, transform 0.15s ease-out',\n },\n ':host([open]) [part=\"bar\"]': {\n opacity: '1',\n pointerEvents: 'auto',\n transform: 'scale(1)',\n },\n\n // Sensible defaults for slotted controls so a bar of icon-buttons needs no\n // extra CSS: flat icon-buttons with a subtle hover tint. A checkbox-as-icon\n // (label wrapping an <input type=checkbox> + an icon) greys and desaturates\n // until it's checked — the easy way to build a toggle. Consumers override any\n // of this from the light DOM (higher specificity) or hide the native checkbox.\n '::slotted(button), ::slotted(label)': {\n display: 'inline-flex',\n alignItems: 'center',\n gap: vars.spacing25,\n padding: vars.spacing50,\n margin: '0',\n border: '0',\n background: 'transparent',\n color: 'inherit',\n font: 'inherit',\n cursor: 'pointer',\n borderRadius: vars.spacing25,\n transition: 'background 0.15s ease-out, opacity 0.15s, filter 0.15s',\n },\n '::slotted(button:hover), ::slotted(label:hover)': {\n background: 'color-mix(in srgb, currentColor 15%, transparent)',\n },\n '::slotted(label:has(input[type=\"checkbox\"]:not(:checked)))': {\n opacity: '0.45',\n filter: 'grayscale(1)',\n },\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n this.addEventListener('pointerenter', this.handlePointerEnter)\n this.addEventListener('pointerleave', this.handlePointerLeave)\n this.addEventListener('focusin', this.handleFocusIn)\n this.addEventListener('focusout', this.handleFocusOut)\n document.addEventListener('pointerdown', this.handleOutsidePointer, true)\n window.addEventListener('scroll', this.handleScrollResize, {\n passive: true,\n capture: true,\n })\n window.addEventListener('resize', this.handleScrollResize, { passive: true })\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n document.removeEventListener('pointerdown', this.handleOutsidePointer, true)\n window.removeEventListener('scroll', this.handleScrollResize, true)\n window.removeEventListener('resize', this.handleScrollResize)\n }\n\n render(): void {\n super.render()\n this.parts.handleIcon.icon = this.resolvedIcon\n this.parts.bar.style.flexDirection = this.vertical ? 'column' : 'row'\n this.parts.handle.setAttribute('aria-expanded', String(!!this.open))\n this.reposition()\n }\n}\n\nexport const tosiPocketBar =\n TosiPocketBar.elementCreator() as ElementCreator<TosiPocketBar>\n",
|
|
34
35
|
"/*#\n\n# notifications\n\n`TosiNotification` provides a singleton custom `<tosi-notification>` element that manages\na list of notifications.\n\nThe notifications are displayed most-recent first. If the notifications would take more than\nhalf the height of the display, they are scrolled.\n\nYou can post a notification simply with `TosiNotification.post()` or `postNotification()`.\n\n```\ninterface NotificationSpec {\n message: string\n type?: 'success' | 'info' | 'log' | 'warn' | 'error' | 'progress' // default 'info'\n icon?: SVGElement | string // defaults to an info icon\n duration?: number\n progress?: () => number // return percentage completion\n close?: () => void\n color?: string // specify color\n}\n```\n\nIf you provide a `progress` callback (which is assumed to return a number from `0-100`, with\n100+ indicating completion) then `TosiNotification` will poll it every second until the\ntask completes or the notification is closed. Returning 100 or more will automatically close\nthe notification.\n\nIf you configure a notification's `type = \"progress\"` but don't provide a `progress` callback\nthen an indefinite `<progress>` element will be displayed.\n\nIf you provide a `close` callback, it will be fired if the user closes the notification.\n\n`postNotification` returns a callback function that closes the note programmatically (e.g.\nwhen an operation completes). This will *also* call any `close` callback function you\nprovided. (The progress demos in the example exercise this functionality.)\n\n```js\nimport { postNotification, icons } from 'tosijs-ui'\n\nconst form = preview.querySelector('tosi-form')\nconst submit = preview.querySelector('.submit')\nconst closeButton = preview.querySelector('.close')\n\nlet close\n\nform.submitCallback = (value, isValid) => {\n if (!isValid) return\n if (value.type.startsWith('progress')) {\n startTime = Date.now()\n const { message, duration, icon } = value\n close = postNotification({\n message,\n type: 'progress',\n icon,\n progress: value.type === 'progress' ? () => (Date.now() - startTime) / (10 * duration) : undefined,\n close: () => { postNotification(`${value.message} cancelled`) },\n })\n } else {\n close = postNotification(value)\n }\n closeButton.disabled = false\n}\n\nsubmit.addEventListener('click', form.submit)\ncloseButton.addEventListener('click', () => {\n if (close) {\n close()\n }\n})\n\npostNotification({\n message: 'Welcome to tosijs-ui notifications, this message will disappear in 2s',\n duration: 2\n})\n```\n```html\n<tosi-form>\n <h3 slot=\"header\">Notification Test</h3>\n <tosi-field caption=\"Message\" key=\"message\" type=\"string\" value=\"This is a test…\"></tosi-field>\n <tosi-field caption=\"Type\" key=\"type\" value=\"info\">\n <tosi-select slot=\"input\"\n options=\"error,warn,info,success,log,,progress,progress (indefinite)\"\n ></tosi-select>\n </tosi-field>\n <tosi-field caption=\"Icon\" key=\"icon\" value=\"info\">\n <tosi-select slot=\"input\"\n options=\"info,bug,thumbsUp,thumbsDown,message,spin120Loader\"\n ></tosi-select>\n </tosi-field>\n <tosi-field caption=\"Duration\" key=\"duration\" type=\"number\" value=\"2\"></tosi-field>\n <button slot=\"footer\" class=\"close\" disabled>Close Last Notification</button>\n <span slot=\"footer\" class=\"elastic\"></span>\n <button slot=\"footer\" class=\"submit\">Post Notification</button>\n</tosi-form>\n```\n```css\ntosi-form {\n height: 100%;\n}\n\ntosi-form::part(content) {\n display: flex;\n flex-direction: column;\n padding: 10px;\n gap: 10px;\n background: var(--background);\n}\n\ntosi-form::part(header),\ntosi-form::part(footer) {\n background: #eee;\n justify-content: center;\n padding: 10px;\n}\n\ntosi-form h3 {\n margin: 0;\n}\n\ntosi-form label {\n display: grid;\n grid-template-columns: 120px 1fr;\n}\n```\n```test\ntest('notification singleton exists', async () => {\n await waitMs(100)\n const notification = document.querySelector('tosi-notification')\n expect(notification).toBeTruthy()\n})\ntest('form renders', () => {\n const form = preview.querySelector('tosi-form')\n expect(form).toBeTruthy()\n})\n```\n\n## `postNotification(spec: NotificationSpec | string)`\n\nThis is simply a wrapper for `TosiNotification.post()`.\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component, elements, vars } from 'tosijs'\nimport { icons } from './icons'\nimport { findHighestZ } from './track-drag'\nconst { div, button } = elements\n\ninterface NotificationSpec {\n message: string\n type?: 'success' | 'info' | 'log' | 'warn' | 'error' | 'progress' // default 'info'\n icon?: SVGElement | string\n duration?: number\n progress?: () => number\n close?: () => void\n color?: string\n}\n\nconst COLOR_MAP = {\n error: 'red',\n warn: 'orange',\n info: 'royalblue',\n log: 'gray',\n success: 'green',\n progress: 'royalblue',\n}\n\ntype callback = () => void\n\nexport class TosiNotification extends Component {\n static preferredTagName = 'tosi-notification'\n private static singleton?: TosiNotification\n\n static shadowStyleSpec = {\n ':host': {\n _notificationSpacing: 8,\n _notificationWidth: 360,\n _notificationPadding: `${vars.notificationSpacing} ${vars.notificationSpacing50} ${vars.notificationSpacing} ${vars.notificationSpacing200}`,\n _notificationBg: '#fafafa',\n _notificationAccentColor: '#aaa',\n _notificationTextColor: '#444',\n _notificationIconSize: vars.notificationSpacing300,\n _notificationButtonSize: 48,\n _notificationBorderWidth: '3px 0 0',\n _notificationBorderRadius: vars.notificationSpacing50,\n position: 'fixed',\n left: 0,\n right: 0,\n bottom: 0,\n paddingBottom: vars.notificationSpacing,\n width: vars.notificationWidth,\n display: 'flex',\n flexDirection: 'column-reverse',\n margin: '0 auto',\n gap: vars.notificationSpacing,\n maxHeight: '50vh',\n overflow: 'hidden auto',\n boxShadow: 'none !important',\n color: vars.notificationTextColor,\n },\n ':host .note': {\n display: 'grid',\n background: vars.notificationBg,\n padding: vars.notificationPadding,\n gridTemplateColumns: `${vars.notificationIconSize} 1fr ${vars.notificationButtonSize}`,\n gap: vars.notificationSpacing,\n alignItems: 'center',\n borderRadius: vars.notificationBorderRadius,\n boxShadow: `0 2px 8px #0006, inset 0 0 0 2px ${vars.notificationAccentColor}`,\n borderColor: vars.notificationAccentColor,\n borderWidth: vars.notificationBorderWidth,\n borderStyle: 'solid',\n transition: '0.5s ease-in',\n transitionProperty: 'margin, opacity',\n zIndex: 1,\n },\n ':host .note button': {\n display: 'flex',\n lineHeight: vars.notificationButtonSize,\n padding: 0,\n margin: 0,\n height: vars.notificationButtonSize,\n width: vars.notificationButtonSize,\n background: 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n boxShadow: 'none',\n border: 'none',\n position: 'relative',\n },\n ':host .note button:hover svg': {\n stroke: vars.notificationAccentColor,\n },\n ':host .note button:active svg': {\n borderRadius: 99,\n stroke: vars.notificationBg,\n background: vars.notificationAccentColor,\n padding: vars.spacing50,\n },\n ':host .note svg': {\n height: vars.notificationIconSize,\n width: vars.notificationIconSize,\n pointerEvents: 'none',\n color: vars.notificationAccentColor,\n },\n ':host .message': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: vars.notificationSpacing,\n },\n ':host .note.closing': {\n opacity: 0,\n zIndex: 0,\n },\n }\n\n static removeNote(note: HTMLElement): void {\n note.classList.add('closing')\n note.style.marginBottom = -note.offsetHeight + 'px'\n const remove = () => {\n note.remove()\n }\n note.addEventListener('transitionend', remove)\n setTimeout(remove, 1000)\n }\n\n static post(spec: NotificationSpec | string): callback {\n const { message, duration, type, close, progress, icon, color } =\n Object.assign(\n { type: 'info', duration: -1 },\n typeof spec === 'string' ? { message: spec } : spec\n )\n\n if (!this.singleton) {\n this.singleton = tosiNotification()\n }\n\n const singleton = this.singleton as HTMLElement\n\n document.body.append(singleton)\n singleton.style.zIndex = String(findHighestZ() + 1)\n\n const _notificationAccentColor = color || COLOR_MAP[type]\n const progressBar =\n progress || type === 'progress' ? elements.progress() : {}\n const closeCallback = () => {\n if (close) {\n close()\n }\n TosiNotification.removeNote(note)\n }\n const iconElement: SVGElement =\n icon instanceof SVGElement ? icon : icon ? icons[icon]() : icons.info()\n // Use assertive for errors/warnings, polite for info/success\n const isUrgent = type === 'error' || type === 'warn'\n const note = div(\n {\n class: `note ${type}`,\n role: isUrgent ? 'alert' : 'status',\n ariaLive: isUrgent ? 'assertive' : 'polite',\n style: {\n _notificationAccentColor,\n },\n },\n iconElement,\n div({ class: 'message' }, div(message), progressBar),\n button(\n {\n class: 'close',\n title: 'close',\n ariaLabel: 'Close notification',\n // we can't use onClick because this lives inside a shadowDOM\n apply(elt) {\n elt.addEventListener('click', closeCallback)\n },\n },\n icons.x()\n )\n )\n\n singleton.shadowRoot!.append(note)\n\n if (\n progressBar instanceof HTMLProgressElement &&\n progress instanceof Function\n ) {\n progressBar.setAttribute('max', String(100))\n progressBar.value = progress()\n const interval = setInterval(() => {\n if (!singleton.shadowRoot!.contains(note)) {\n clearInterval(interval)\n return\n }\n const percentage = progress()\n progressBar.value = percentage\n if (percentage >= 100) {\n TosiNotification.removeNote(note)\n }\n }, 1000)\n }\n\n if (duration > 0) {\n setTimeout(() => {\n TosiNotification.removeNote(note)\n }, duration * 1000)\n }\n\n note.scrollIntoView()\n\n return closeCallback\n }\n\n content = null\n}\n\n/** @deprecated Use TosiNotification instead */\nexport type XinNotification = TosiNotification\n/** @deprecated Use TosiNotification instead */\nexport const XinNotification: typeof TosiNotification = TosiNotification\n\nexport const tosiNotification = TosiNotification.elementCreator()\n\n/** @deprecated Use tosiNotification instead */\nexport const xinNotification = tosiNotification\n\nexport function postNotification(spec: NotificationSpec | string): callback {\n return TosiNotification.post(spec)\n}\n",
|
|
35
|
-
"import { Dialect, ExampleContext, TransformFn } from './types'\n\nexport const AsyncFunction = (async () => {\n /* placeholder */\n}).constructor\n\n/**\n * Sanitize a context module key into a JS identifier used as the binding name\n * in rewritten imports and as the AsyncFunction parameter. Must be applied\n * consistently on both sides. e.g. 'tosijs-ui' -> 'tosijsui',\n * '@babylonjs/core' -> 'babylonjscore'.\n */\nexport function contextVarName(key: string): string {\n return key.replace(/[^a-zA-Z0-9_$]/g, '')\n}\n\n/**\n * Rewrite import statements (from the example context) to const bindings:\n * import { x } from 'tosijs' -> const { x } = tosijs\n * import * as B from '@babylonjs' -> const B = babylonjs (context key)\n * import Foo from 'my-lib' -> const Foo = mylib\n * The `.elements` accessor form (`import { x } from 'tosijs'.elements`) is\n * preserved. Any static import that isn't from a context module (or uses an\n * unsupported form) throws a clear error rather than becoming a SyntaxError in\n * the AsyncFunction body.\n */\n/**\n * Turn the import specifiers a `X as Y` clause carries into destructuring pairs:\n * `a, b as c` → `a, b: c`.\n */\nfunction destructureClause(names: string): string {\n return names\n .split(',')\n .map((n) => {\n const as = n.trim().match(/^(\\w+)\\s+as\\s+(\\w+)$/)\n return as ? `${as[1]}: ${as[2]}` : n.trim()\n })\n .filter(Boolean)\n .join(', ')\n}\n\n/**\n * Rewrite the import statements the context DIDN'T inject into dynamic imports the\n * import-resolver service worker can fulfil — a bare specifier `pkg` becomes\n * `await import('<prefix>pkg')`, a `./x` / `https://…` specifier a direct dynamic\n * import. This is what lets a live example pull real npm code from anywhere; it only\n * runs when the resolver is enabled (a `prefix` is known). See import-resolver-plan.md.\n */\nfunction rewriteBareImportsToDynamic(code: string, prefix: string): string {\n const urlFor = (spec: string) =>\n /^(\\.|\\/|https?:)/.test(spec) ? spec : prefix + spec\n return (\n code\n // import <clause> from '<spec>' ({ a, b } | * as X | X | X, { a })\n // NB the trailing `[ \\t]*;?` must NOT eat the newline, or the next line glues on.\n .replace(\n /import\\s+([^;'\"]+?)\\s+from\\s+(['\"])([^'\"]+)\\2[ \\t]*;?/g,\n (match, clause: string, q: string, spec: string) => {\n const imp = `await import(${q}${urlFor(spec)}${q})`\n const c = clause.trim()\n let m\n if ((m = c.match(/^\\{([^}]*)\\}$/)))\n return `const { ${destructureClause(m[1])} } = ${imp}`\n if ((m = c.match(/^\\*\\s+as\\s+(\\w+)$/))) return `const ${m[1]} = ${imp}`\n if ((m = c.match(/^(\\w+)$/)))\n return `const ${m[1]} = (${imp}).default`\n if ((m = c.match(/^(\\w+)\\s*,\\s*\\{([^}]*)\\}$/)))\n return `const { default: ${m[1]}, ${destructureClause(m[2])} } = ${imp}`\n return match // unhandled form — left to fail loudly below\n }\n )\n // side-effect only: import '<spec>'\n .replace(\n /import\\s+(['\"])([^'\"]+)\\1[ \\t]*;?/g,\n (_m, q: string, spec: string) => `await import(${q}${urlFor(spec)}${q})`\n )\n )\n}\n\n/** The import-resolver prefix, if the SW was registered on this page (runtime). */\nfunction resolverPrefix(): string | undefined {\n return (\n globalThis as unknown as { __TOSI_IMPORT_RESOLVER?: { prefix?: string } }\n ).__TOSI_IMPORT_RESOLVER?.prefix\n}\n\nexport function rewriteImports(\n code: string,\n contextKeys: string[],\n // The import-resolver prefix (e.g. '/lib/'). When set — or when the SW is registered\n // on the page — non-context imports become dynamic imports the worker resolves.\n // Omitted + no SW → the old behavior: a non-context import is unsupported.\n importPrefix: string | undefined = resolverPrefix()\n): string {\n let result = code\n for (const moduleName of contextKeys) {\n const js = contextVarName(moduleName)\n const m = moduleName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n // import { a, b } from 'mod'\n result = result.replace(\n new RegExp(`import\\\\s*\\\\{([^}]*)\\\\}\\\\s*from\\\\s*'${m}'`, 'g'),\n (_, names: string) =>\n `const { ${names.replace(/\\s+/g, ' ').trim()} } = ${js}`\n )\n // import * as X from 'mod'\n result = result.replace(\n new RegExp(`import\\\\s*\\\\*\\\\s*as\\\\s+(\\\\w+)\\\\s+from\\\\s*'${m}'`, 'g'),\n (_, name: string) => `const ${name} = ${js}`\n )\n // import X from 'mod' (default)\n result = result.replace(\n new RegExp(`import\\\\s+(\\\\w+)\\\\s+from\\\\s*'${m}'`, 'g'),\n (_, name: string) => `const ${name} = ${js}`\n )\n }\n // With the resolver on, route the imports the context didn't inject to the SW.\n if (importPrefix) {\n result = rewriteBareImportsToDynamic(result, importPrefix)\n }\n // Anything still a static import is unsupported — fail loudly with the line.\n const leftover = result.match(/^\\s*import\\s+['\"{*\\w][^\\n]*/m)\n if (leftover) {\n throw new Error(\n `live example: unsupported import \\`${leftover[0].trim()}\\` — imports ` +\n `from the example context (${contextKeys.join(', ')}) are supported in ` +\n `{ named }, * as ns, or default form` +\n (importPrefix\n ? `, and other packages resolve via the import-resolver.`\n : ` (enable importResolver to import other packages).`)\n )\n }\n return result\n}\n\n/**\n * Execute code as an async function with injected context\n */\nexport async function executeCode(\n code: string,\n context: ExampleContext,\n transform: TransformFn\n): Promise<void> {\n const rewrittenCode = rewriteImports(code, Object.keys(context))\n const transformedCode = (\n await transform(rewrittenCode, {\n transforms: ['typescript'],\n })\n ).code\n\n const contextKeys = Object.keys(context).map(contextVarName)\n const contextValues = Object.values(context)\n\n // @ts-expect-error AsyncFunction constructor typing\n const func = new AsyncFunction(...contextKeys, transformedCode)\n await func(...contextValues)\n}\n\n/** The tjs() entry from tjs-lang/lang — the only part we need at the JS seam. */\ntype TjsFn = (\n source: string,\n options?: { dialect?: 'js' | 'tjs'; runTests?: boolean | 'only' | 'report' }\n) => { code: string }\n\n/**\n * The fromTS() entry from tjs-lang/browser/from-ts — lowers TypeScript to tjs.\n * Async: it lazy-loads the TypeScript compiler (from a CDN) on first call.\n */\ntype FromTsFn = (\n source: string,\n options?: { emitTJS?: boolean }\n) => Promise<{ code: string }>\n\n// tjs-lang/browser is a SELF-CONTAINED transpiler bundle (acorn/tosijs-schema\n// inlined, zero bare imports), so it loads as a raw CDN file — no `+esm` rewrite\n// needed. The TypeScript path lives behind tjs-lang/browser/from-ts (also\n// self-contained) and is loaded only for `ts` examples; from-ts in turn fetches\n// the TypeScript compiler lazily at runtime, so tsc is never pulled in until a TS\n// example actually transforms. Pinned to match the dev dep.\nconst TJS_VERSION = '0.12.0'\n\n// Where to fetch a tjs-lang browser bundle from, in priority order:\n// 1. SAME-ORIGIN — the doc-site build copies the bundles next to the iife and\n// sets `__TJS_LOCAL_BASE`, so the transpiler ships in lockstep with the page,\n// works offline, and is immune to CDN propagation lag. Preferred when present.\n// 2. CDN chain (jsdelivr → unpkg → esm.sh) — for IIFE consumers who don't serve\n// it same-origin. A freshly-published version 404s on one CDN until it caches\n// it (minutes–hours) and any one can blip, so we try several. The module-cache\n// service worker caches all three hosts.\nfunction bundleUrls(file: string): string[] {\n const localBase = (globalThis as { __TJS_LOCAL_BASE?: string })\n .__TJS_LOCAL_BASE\n return [\n ...(typeof localBase === 'string' ? [`${localBase}${file}`] : []),\n `https://cdn.jsdelivr.net/npm/tjs-lang@${TJS_VERSION}/dist/${file}`,\n `https://unpkg.com/tjs-lang@${TJS_VERSION}/dist/${file}`,\n `https://esm.sh/tjs-lang@${TJS_VERSION}/dist/${file}`,\n ]\n}\n\n/** Try each URL in turn; return the first module that loads, else null. */\nasync function importFirstAvailable(urls: string[]): Promise<any | null> {\n for (const url of urls) {\n try {\n // variable specifier → bundlers leave it as a runtime import (external)\n const m = await import(/* webpackIgnore: true */ /* @vite-ignore */ url)\n if (m) return m\n } catch {\n // try the next source\n }\n }\n return null\n}\n\nasync function loadTjs(): Promise<TjsFn | null> {\n // Installed peer (ESM consumers / dev build) — static specifier so bundlers\n // resolve it to the local package.\n try {\n const { tjs } = (await import('tjs-lang/browser')) as { tjs: TjsFn }\n if (typeof tjs === 'function') return tjs\n } catch {\n // not installed — try same-origin / CDN\n }\n const m = await importFirstAvailable(bundleUrls('tjs-browser.js'))\n if (m && typeof m.tjs === 'function') return m.tjs as TjsFn\n return null\n}\n\n/**\n * tjs inline-test API (from tjs-lang/lang):\n * extractTests(src) → { code (test-stripped), tests, testRunner }\n * testUtils — a string defining `expect`/`assert` etc. for the runner\n * Run with: `new AsyncFunction(...ctx, execJs + testUtils + 'return ' + testRunner)`\n * which resolves to `{ passed, failed, results }`.\n */\nexport interface TjsTestApi {\n extractTests: (source: string) => {\n code: string\n tests: { description: string }[]\n testRunner: string\n }\n testUtils: string\n}\n\nexport interface TjsTestResult {\n passed: number\n failed: number\n results: { description: string; passed: boolean; error?: string }[]\n}\n\nlet testApiOnce: Promise<TjsTestApi | null> | undefined\n\nasync function loadTjsTestApiImpl(): Promise<TjsTestApi | null> {\n const sources: Array<() => Promise<any>> = [\n () => import('tjs-lang/browser'),\n () => importFirstAvailable(bundleUrls('tjs-browser.js')),\n ]\n for (const load of sources) {\n try {\n const m = (await load()) as Partial<TjsTestApi> | null\n if (\n m &&\n typeof m.extractTests === 'function' &&\n typeof m.testUtils === 'string'\n ) {\n return { extractTests: m.extractTests, testUtils: m.testUtils }\n }\n } catch {\n // try next source\n }\n }\n return null\n}\n\n/** Load the tjs inline-test API (memoized). null if tjs-lang is unavailable. */\nexport function loadTjsTestApi(): Promise<TjsTestApi | null> {\n return (testApiOnce ??= loadTjsTestApiImpl())\n}\n\n// from-ts pulls in the TypeScript compiler, so it's loaded lazily and only when a\n// `ts` example is actually transformed — never for `js`/`tjs` pages.\nasync function loadFromTs(): Promise<FromTsFn | null> {\n try {\n const { fromTS } = (await import('tjs-lang/browser/from-ts')) as {\n fromTS: FromTsFn\n }\n if (typeof fromTS === 'function') return fromTS\n } catch {\n // not installed — try same-origin / CDN\n }\n const m = await importFirstAvailable(bundleUrls('tjs-browser-from-ts.js'))\n if (m && typeof m.fromTS === 'function') return m.fromTS as FromTsFn\n return null\n}\n\n// Load tjs once per page, not once per example. refresh() runs on every render\n// (and renders fire repeatedly while tests run), so a per-call import + parse\n// would re-pay tjs's cost each time and make every preview swap visibly lag —\n// the engine load is memoized and transform output is cached by dialect+source.\nlet tjsOnce: Promise<TjsFn | null> | undefined\nlet fromTsOnce: Promise<FromTsFn | null> | undefined\n/**\n * Memoized transform output, keyed by dialect + full source text.\n *\n * BOUNDED, and it has to be. The key contains the whole source, so a *changed*\n * example is a new entry and the superseded one is never looked up again — the cache\n * only ever grows, one entry per version of every example ever transformed. On a page\n * you merely read, that is a handful of entries. But this module is also imported by\n * the doc-site BUILD (check-examples), and — more to the point — the doc system is an\n * *authoring* system: in an edit-in-place session, every keystroke-to-save produces a\n * fresh source string, so an unbounded map grows for as long as the page is open,\n * holding both the source and its transpiled output forever.\n *\n * A plain insertion-ordered eviction is enough here: re-transforming a cold example\n * costs a few ms, and the working set is \"the examples on this page\".\n */\nconst RESULT_CACHE_MAX = 256\nconst resultCache = new Map<string, { code: string }>()\nconst cacheResult = (key: string, result: { code: string }) => {\n if (resultCache.size >= RESULT_CACHE_MAX) {\n // Map preserves insertion order, so the first key is the oldest.\n const oldest = resultCache.keys().next().value\n if (oldest !== undefined) resultCache.delete(oldest)\n }\n resultCache.set(key, result)\n}\nlet warnedNoTjs = false\nlet warnedNoFromTs = false\n\n/**\n * Load a live-example transform for a given source dialect.\n *\n * tjs-lang is the engine:\n * - `js` → `tjs(code, { dialect: 'js' })`, which leaves vanilla JavaScript\n * untouched (no footgun rewriting) — behavior-neutral for plain JS.\n * - `tjs` → `tjs(code, { dialect: 'tjs' })`, the full tjs lowering (structural\n * `==`, type guards, runtime instrumentation).\n * - `ts` → `fromTS(code)` → tjs source → `tjs(…, { dialect: 'tjs' })`. The\n * TypeScript compiler is loaded lazily, only here.\n *\n * The dialect is baked into the returned closure, so callers just pass code.\n *\n * Degraded mode: if tjs-lang can't be loaded, plain JS still runs unchanged\n * (`dialect: 'js'` is a no-op on it), so we pass the code through. A `ts` page\n * with no from-ts available likewise falls back to running the source as JS.\n */\nexport async function loadTransform(\n dialect: Dialect = 'js'\n): Promise<TransformFn> {\n // `js` needs no transpiler. tjs's `js` dialect leaves vanilla JS untouched, and\n // the build check guarantees js/`test` blocks ARE vanilla JS (a TS-typed one\n // fails `new AsyncFunction` at build). So identity is behaviorally exact — and it\n // keeps the tjs bundle off the first-paint path for the common all-`js`-examples\n // page. `tjs`/`ts` still load it. See self-contained-examples-plan.md.\n if (dialect === 'js') return (code) => ({ code })\n const tjs = await (tjsOnce ??= loadTjs())\n if (!tjs && !warnedNoTjs) {\n warnedNoTjs = true\n console.warn(\n 'tjs-lang not available — live examples run as raw JavaScript ' +\n '(tjs/TypeScript examples will not transpile). Install with: npm install tjs-lang'\n )\n }\n const fromTS = dialect === 'ts' ? await (fromTsOnce ??= loadFromTs()) : null\n if (dialect === 'ts' && !fromTS && !warnedNoFromTs) {\n warnedNoFromTs = true\n console.warn(\n 'tjs-lang/browser/from-ts not available — `ts` examples run as raw JavaScript.'\n )\n }\n return (code) => {\n const cacheKey = `${dialect}\\0${code}`\n const cached = resultCache.get(cacheKey)\n if (cached) return cached\n // runTests:false — examples must not run tjs inline tests at transpile time\n // (the default throws on failure, which would break the example render).\n if (!tjs) {\n const result = { code }\n cacheResult(cacheKey, result)\n return result\n }\n if (dialect === 'ts') {\n // async: fromTS lazy-loads the TypeScript compiler on first use.\n return (async () => {\n const tjsSource = fromTS\n ? (await fromTS(code, { emitTJS: true })).code\n : code\n const result = {\n code: tjs(tjsSource, { dialect: 'tjs', runTests: false }).code,\n }\n cacheResult(cacheKey, result)\n return result\n })()\n }\n const result = { code: tjs(code, { dialect, runTests: false }).code }\n cacheResult(cacheKey, result)\n return result\n }\n}\n",
|
|
36
|
+
"import { Dialect, ExampleContext, TransformFn } from './types'\n\nexport const AsyncFunction = (async () => {\n /* placeholder */\n}).constructor\n\n/**\n * Thrown by `rewriteImports` when an example has a static import the environment\n * can't satisfy (a non-context package with no import-resolver). This is NOT a code\n * defect — the code is fine, the doc environment just doesn't provide the dependency\n * — so the build check treats it as a *warning* (the block is display-only) rather\n * than a fatal error, and can tell it apart from a real syntax/transpile error.\n */\nexport class UnsupportedImportError extends Error {\n constructor(\n message: string,\n /** The offending `import …` statement. */\n readonly statement: string\n ) {\n super(message)\n this.name = 'UnsupportedImportError'\n }\n}\n\n/**\n * Sanitize a context module key into a JS identifier used as the binding name\n * in rewritten imports and as the AsyncFunction parameter. Must be applied\n * consistently on both sides. e.g. 'tosijs-ui' -> 'tosijsui',\n * '@babylonjs/core' -> 'babylonjscore'.\n */\nexport function contextVarName(key: string): string {\n return key.replace(/[^a-zA-Z0-9_$]/g, '')\n}\n\n/**\n * Rewrite import statements (from the example context) to const bindings:\n * import { x } from 'tosijs' -> const { x } = tosijs\n * import * as B from '@babylonjs' -> const B = babylonjs (context key)\n * import Foo from 'my-lib' -> const Foo = mylib\n * The `.elements` accessor form (`import { x } from 'tosijs'.elements`) is\n * preserved. Any static import that isn't from a context module (or uses an\n * unsupported form) throws a clear error rather than becoming a SyntaxError in\n * the AsyncFunction body.\n */\n/**\n * Turn the import specifiers a `X as Y` clause carries into destructuring pairs:\n * `a, b as c` → `a, b: c`.\n */\nfunction destructureClause(names: string): string {\n return names\n .split(',')\n .map((n) => {\n const as = n.trim().match(/^(\\w+)\\s+as\\s+(\\w+)$/)\n return as ? `${as[1]}: ${as[2]}` : n.trim()\n })\n .filter(Boolean)\n .join(', ')\n}\n\n/**\n * Rewrite the import statements the context DIDN'T inject into dynamic imports the\n * import-resolver service worker can fulfil — a bare specifier `pkg` becomes\n * `await import('<prefix>pkg')`, a `./x` / `https://…` specifier a direct dynamic\n * import. This is what lets a live example pull real npm code from anywhere; it only\n * runs when the resolver is enabled (a `prefix` is known). See import-resolver-plan.md.\n */\nfunction rewriteBareImportsToDynamic(code: string, prefix: string): string {\n const urlFor = (spec: string) =>\n /^(\\.|\\/|https?:)/.test(spec) ? spec : prefix + spec\n return (\n code\n // import <clause> from '<spec>' ({ a, b } | * as X | X | X, { a })\n // NB the trailing `[ \\t]*;?` must NOT eat the newline, or the next line glues on.\n .replace(\n /import\\s+([^;'\"]+?)\\s+from\\s+(['\"])([^'\"]+)\\2[ \\t]*;?/g,\n (match, clause: string, q: string, spec: string) => {\n const imp = `await import(${q}${urlFor(spec)}${q})`\n const c = clause.trim()\n let m\n if ((m = c.match(/^\\{([^}]*)\\}$/)))\n return `const { ${destructureClause(m[1])} } = ${imp}`\n if ((m = c.match(/^\\*\\s+as\\s+(\\w+)$/))) return `const ${m[1]} = ${imp}`\n if ((m = c.match(/^(\\w+)$/)))\n return `const ${m[1]} = (${imp}).default`\n if ((m = c.match(/^(\\w+)\\s*,\\s*\\{([^}]*)\\}$/)))\n return `const { default: ${m[1]}, ${destructureClause(m[2])} } = ${imp}`\n return match // unhandled form — left to fail loudly below\n }\n )\n // side-effect only: import '<spec>'\n .replace(\n /import\\s+(['\"])([^'\"]+)\\1[ \\t]*;?/g,\n (_m, q: string, spec: string) => `await import(${q}${urlFor(spec)}${q})`\n )\n )\n}\n\n/** The import-resolver prefix, if the SW was registered on this page (runtime). */\nfunction resolverPrefix(): string | undefined {\n return (\n globalThis as unknown as { __TOSI_IMPORT_RESOLVER?: { prefix?: string } }\n ).__TOSI_IMPORT_RESOLVER?.prefix\n}\n\nexport function rewriteImports(\n code: string,\n contextKeys: string[],\n // The import-resolver prefix (e.g. '/lib/'). When set — or when the SW is registered\n // on the page — non-context imports become dynamic imports the worker resolves.\n // Omitted + no SW → the old behavior: a non-context import is unsupported.\n importPrefix: string | undefined = resolverPrefix()\n): string {\n let result = code\n for (const moduleName of contextKeys) {\n const js = contextVarName(moduleName)\n const m = moduleName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n // import { a, b } from 'mod'\n result = result.replace(\n new RegExp(`import\\\\s*\\\\{([^}]*)\\\\}\\\\s*from\\\\s*'${m}'`, 'g'),\n (_, names: string) =>\n `const { ${names.replace(/\\s+/g, ' ').trim()} } = ${js}`\n )\n // import * as X from 'mod'\n result = result.replace(\n new RegExp(`import\\\\s*\\\\*\\\\s*as\\\\s+(\\\\w+)\\\\s+from\\\\s*'${m}'`, 'g'),\n (_, name: string) => `const ${name} = ${js}`\n )\n // import X from 'mod' (default)\n result = result.replace(\n new RegExp(`import\\\\s+(\\\\w+)\\\\s+from\\\\s*'${m}'`, 'g'),\n (_, name: string) => `const ${name} = ${js}`\n )\n }\n // With the resolver on, route the imports the context didn't inject to the SW.\n if (importPrefix) {\n result = rewriteBareImportsToDynamic(result, importPrefix)\n }\n // Anything still a static import is unsupported — fail loudly with the line.\n const leftover = result.match(/^\\s*import\\s+['\"{*\\w][^\\n]*/m)\n if (leftover) {\n const statement = leftover[0].trim()\n throw new UnsupportedImportError(\n `live example: unsupported import \\`${statement}\\` — imports ` +\n `from the example context (${contextKeys.join(', ')}) are supported in ` +\n `{ named }, * as ns, or default form` +\n (importPrefix\n ? `, and other packages resolve via the import-resolver.`\n : ` (enable importResolver to import other packages).`),\n statement\n )\n }\n return result\n}\n\n/**\n * Execute code as an async function with injected context\n */\nexport async function executeCode(\n code: string,\n context: ExampleContext,\n transform: TransformFn\n): Promise<void> {\n const rewrittenCode = rewriteImports(code, Object.keys(context))\n const transformedCode = (\n await transform(rewrittenCode, {\n transforms: ['typescript'],\n })\n ).code\n\n const contextKeys = Object.keys(context).map(contextVarName)\n const contextValues = Object.values(context)\n\n // @ts-expect-error AsyncFunction constructor typing\n const func = new AsyncFunction(...contextKeys, transformedCode)\n await func(...contextValues)\n}\n\n/** The tjs() entry from tjs-lang/lang — the only part we need at the JS seam. */\ntype TjsFn = (\n source: string,\n options?: { dialect?: 'js' | 'tjs'; runTests?: boolean | 'only' | 'report' }\n) => { code: string }\n\n/**\n * The fromTS() entry from tjs-lang/browser/from-ts — lowers TypeScript to tjs.\n * Async: it lazy-loads the TypeScript compiler (from a CDN) on first call.\n */\ntype FromTsFn = (\n source: string,\n options?: { emitTJS?: boolean }\n) => Promise<{ code: string }>\n\n// tjs-lang/browser is a SELF-CONTAINED transpiler bundle (acorn/tosijs-schema\n// inlined, zero bare imports), so it loads as a raw CDN file — no `+esm` rewrite\n// needed. The TypeScript path lives behind tjs-lang/browser/from-ts (also\n// self-contained) and is loaded only for `ts` examples; from-ts in turn fetches\n// the TypeScript compiler lazily at runtime, so tsc is never pulled in until a TS\n// example actually transforms. Pinned to match the dev dep.\nconst TJS_VERSION = '0.12.0'\n\n// Where to fetch a tjs-lang browser bundle from, in priority order:\n// 1. SAME-ORIGIN — the doc-site build copies the bundles next to the iife and\n// sets `__TJS_LOCAL_BASE`, so the transpiler ships in lockstep with the page,\n// works offline, and is immune to CDN propagation lag. Preferred when present.\n// 2. CDN chain (jsdelivr → unpkg → esm.sh) — for IIFE consumers who don't serve\n// it same-origin. A freshly-published version 404s on one CDN until it caches\n// it (minutes–hours) and any one can blip, so we try several. The module-cache\n// service worker caches all three hosts.\nfunction bundleUrls(file: string): string[] {\n const localBase = (globalThis as { __TJS_LOCAL_BASE?: string })\n .__TJS_LOCAL_BASE\n return [\n ...(typeof localBase === 'string' ? [`${localBase}${file}`] : []),\n `https://cdn.jsdelivr.net/npm/tjs-lang@${TJS_VERSION}/dist/${file}`,\n `https://unpkg.com/tjs-lang@${TJS_VERSION}/dist/${file}`,\n `https://esm.sh/tjs-lang@${TJS_VERSION}/dist/${file}`,\n ]\n}\n\n/** Try each URL in turn; return the first module that loads, else null. */\nasync function importFirstAvailable(urls: string[]): Promise<any | null> {\n for (const url of urls) {\n try {\n // variable specifier → bundlers leave it as a runtime import (external)\n const m = await import(/* webpackIgnore: true */ /* @vite-ignore */ url)\n if (m) return m\n } catch {\n // try the next source\n }\n }\n return null\n}\n\nasync function loadTjs(): Promise<TjsFn | null> {\n // Installed peer (ESM consumers / dev build) — static specifier so bundlers\n // resolve it to the local package.\n try {\n const { tjs } = (await import('tjs-lang/browser')) as { tjs: TjsFn }\n if (typeof tjs === 'function') return tjs\n } catch {\n // not installed — try same-origin / CDN\n }\n const m = await importFirstAvailable(bundleUrls('tjs-browser.js'))\n if (m && typeof m.tjs === 'function') return m.tjs as TjsFn\n return null\n}\n\n/**\n * tjs inline-test API (from tjs-lang/lang):\n * extractTests(src) → { code (test-stripped), tests, testRunner }\n * testUtils — a string defining `expect`/`assert` etc. for the runner\n * Run with: `new AsyncFunction(...ctx, execJs + testUtils + 'return ' + testRunner)`\n * which resolves to `{ passed, failed, results }`.\n */\nexport interface TjsTestApi {\n extractTests: (source: string) => {\n code: string\n tests: { description: string }[]\n testRunner: string\n }\n testUtils: string\n}\n\nexport interface TjsTestResult {\n passed: number\n failed: number\n results: { description: string; passed: boolean; error?: string }[]\n}\n\nlet testApiOnce: Promise<TjsTestApi | null> | undefined\n\nasync function loadTjsTestApiImpl(): Promise<TjsTestApi | null> {\n const sources: Array<() => Promise<any>> = [\n () => import('tjs-lang/browser'),\n () => importFirstAvailable(bundleUrls('tjs-browser.js')),\n ]\n for (const load of sources) {\n try {\n const m = (await load()) as Partial<TjsTestApi> | null\n if (\n m &&\n typeof m.extractTests === 'function' &&\n typeof m.testUtils === 'string'\n ) {\n return { extractTests: m.extractTests, testUtils: m.testUtils }\n }\n } catch {\n // try next source\n }\n }\n return null\n}\n\n/** Load the tjs inline-test API (memoized). null if tjs-lang is unavailable. */\nexport function loadTjsTestApi(): Promise<TjsTestApi | null> {\n return (testApiOnce ??= loadTjsTestApiImpl())\n}\n\n// from-ts pulls in the TypeScript compiler, so it's loaded lazily and only when a\n// `ts` example is actually transformed — never for `js`/`tjs` pages.\nasync function loadFromTs(): Promise<FromTsFn | null> {\n try {\n const { fromTS } = (await import('tjs-lang/browser/from-ts')) as {\n fromTS: FromTsFn\n }\n if (typeof fromTS === 'function') return fromTS\n } catch {\n // not installed — try same-origin / CDN\n }\n const m = await importFirstAvailable(bundleUrls('tjs-browser-from-ts.js'))\n if (m && typeof m.fromTS === 'function') return m.fromTS as FromTsFn\n return null\n}\n\n// Load tjs once per page, not once per example. refresh() runs on every render\n// (and renders fire repeatedly while tests run), so a per-call import + parse\n// would re-pay tjs's cost each time and make every preview swap visibly lag —\n// the engine load is memoized and transform output is cached by dialect+source.\nlet tjsOnce: Promise<TjsFn | null> | undefined\nlet fromTsOnce: Promise<FromTsFn | null> | undefined\n/**\n * Memoized transform output, keyed by dialect + full source text.\n *\n * BOUNDED, and it has to be. The key contains the whole source, so a *changed*\n * example is a new entry and the superseded one is never looked up again — the cache\n * only ever grows, one entry per version of every example ever transformed. On a page\n * you merely read, that is a handful of entries. But this module is also imported by\n * the doc-site BUILD (check-examples), and — more to the point — the doc system is an\n * *authoring* system: in an edit-in-place session, every keystroke-to-save produces a\n * fresh source string, so an unbounded map grows for as long as the page is open,\n * holding both the source and its transpiled output forever.\n *\n * A plain insertion-ordered eviction is enough here: re-transforming a cold example\n * costs a few ms, and the working set is \"the examples on this page\".\n */\nconst RESULT_CACHE_MAX = 256\nconst resultCache = new Map<string, { code: string }>()\nconst cacheResult = (key: string, result: { code: string }) => {\n if (resultCache.size >= RESULT_CACHE_MAX) {\n // Map preserves insertion order, so the first key is the oldest.\n const oldest = resultCache.keys().next().value\n if (oldest !== undefined) resultCache.delete(oldest)\n }\n resultCache.set(key, result)\n}\nlet warnedNoTjs = false\nlet warnedNoFromTs = false\n\n/**\n * Load a live-example transform for a given source dialect.\n *\n * tjs-lang is the engine:\n * - `js` → `tjs(code, { dialect: 'js' })`, which leaves vanilla JavaScript\n * untouched (no footgun rewriting) — behavior-neutral for plain JS.\n * - `tjs` → `tjs(code, { dialect: 'tjs' })`, the full tjs lowering (structural\n * `==`, type guards, runtime instrumentation).\n * - `ts` → `fromTS(code)` → tjs source → `tjs(…, { dialect: 'tjs' })`. The\n * TypeScript compiler is loaded lazily, only here.\n *\n * The dialect is baked into the returned closure, so callers just pass code.\n *\n * Degraded mode: if tjs-lang can't be loaded, plain JS still runs unchanged\n * (`dialect: 'js'` is a no-op on it), so we pass the code through. A `ts` page\n * with no from-ts available likewise falls back to running the source as JS.\n */\nexport async function loadTransform(\n dialect: Dialect = 'js'\n): Promise<TransformFn> {\n // `js` needs no transpiler. tjs's `js` dialect leaves vanilla JS untouched, and\n // the build check guarantees js/`test` blocks ARE vanilla JS (a TS-typed one\n // fails `new AsyncFunction` at build). So identity is behaviorally exact — and it\n // keeps the tjs bundle off the first-paint path for the common all-`js`-examples\n // page. `tjs`/`ts` still load it. See self-contained-examples-plan.md.\n if (dialect === 'js') return (code) => ({ code })\n const tjs = await (tjsOnce ??= loadTjs())\n if (!tjs && !warnedNoTjs) {\n warnedNoTjs = true\n console.warn(\n 'tjs-lang not available — live examples run as raw JavaScript ' +\n '(tjs/TypeScript examples will not transpile). Install with: npm install tjs-lang'\n )\n }\n const fromTS = dialect === 'ts' ? await (fromTsOnce ??= loadFromTs()) : null\n if (dialect === 'ts' && !fromTS && !warnedNoFromTs) {\n warnedNoFromTs = true\n console.warn(\n 'tjs-lang/browser/from-ts not available — `ts` examples run as raw JavaScript.'\n )\n }\n return (code) => {\n const cacheKey = `${dialect}\\0${code}`\n const cached = resultCache.get(cacheKey)\n if (cached) return cached\n // runTests:false — examples must not run tjs inline tests at transpile time\n // (the default throws on failure, which would break the example render).\n if (!tjs) {\n const result = { code }\n cacheResult(cacheKey, result)\n return result\n }\n if (dialect === 'ts') {\n // async: fromTS lazy-loads the TypeScript compiler on first use.\n return (async () => {\n const tjsSource = fromTS\n ? (await fromTS(code, { emitTJS: true })).code\n : code\n const result = {\n code: tjs(tjsSource, { dialect: 'tjs', runTests: false }).code,\n }\n cacheResult(cacheKey, result)\n return result\n })()\n }\n const result = { code: tjs(code, { dialect, runTests: false }).code }\n cacheResult(cacheKey, result)\n return result\n }\n}\n",
|
|
36
37
|
"import { RemotePayload } from './types'\n\nexport const STORAGE_KEY = 'live-example-payload'\n\nexport function createRemoteKey(\n prefix: string,\n uuid: string,\n remoteId: string\n): string {\n return remoteId !== '' ? `${prefix}-${remoteId}` : `${prefix}-${uuid}`\n}\n\nexport function sendPayload(storageKey: string, payload: RemotePayload): void {\n try {\n localStorage.setItem(storageKey, JSON.stringify(payload))\n } catch (e) {\n console.warn('live-example: failed to write to localStorage', e)\n }\n}\n\nexport function parsePayload(data: string | null): RemotePayload | null {\n if (data === null) return null\n try {\n return JSON.parse(data)\n } catch {\n return null\n }\n}\n\nexport function openEditorWindow(\n prefix: string,\n uuid: string,\n storageKey: string,\n remoteKey: string,\n code: { css: string; html: string; js: string; test?: string },\n // Passed through so the pop-out window can offer the full menu (Save / View\n // changes): the source↔doc key rides the URL; the pristine snapshot the payload.\n meta?: {\n sourceFile?: string | null\n ordinal?: string | null\n original?: RemotePayload['original']\n }\n): void {\n const params = new URLSearchParams({ [prefix]: uuid })\n if (meta?.sourceFile && meta.ordinal != null) {\n params.set('sf', meta.sourceFile)\n params.set('ord', meta.ordinal)\n }\n const href = location.href.split('?')[0] + '?' + params.toString()\n sendPayload(storageKey, {\n remoteKey,\n sentAt: Date.now(),\n ...code,\n original: meta?.original,\n })\n window.open(href)\n}\n\nexport function sendCloseSignal(storageKey: string, remoteKey: string): void {\n sendPayload(storageKey, {\n remoteKey,\n sentAt: Date.now(),\n css: '',\n html: '',\n js: '',\n close: true,\n })\n}\n\nconst hasBroadcastChannel = typeof BroadcastChannel !== 'undefined'\n\n/**\n * Manager for remote window synchronization.\n *\n * Primary transport: BroadcastChannel (reliable, instant, works when\n * tabs close). Falls back to localStorage polling for environments\n * that lack BroadcastChannel (e.g. older Quest 3 browser builds).\n *\n * localStorage is still used for the initial payload (persisted so the\n * new window can read it on first render).\n */\nexport class RemoteSyncManager {\n private storageKey: string\n private remoteKey: string\n private lastUpdate = 0\n private interval?: ReturnType<typeof setInterval>\n private channel?: BroadcastChannel\n private listening = false\n private onReceive: (payload: RemotePayload) => void\n\n constructor(\n storageKey: string,\n remoteKey: string,\n onReceive: (payload: RemotePayload) => void\n ) {\n this.storageKey = storageKey\n this.remoteKey = remoteKey\n this.onReceive = onReceive\n }\n\n private handlePayload = (payload: RemotePayload) => {\n if (payload.sentAt <= this.lastUpdate) return\n if (payload.remoteKey !== this.remoteKey) return\n\n this.lastUpdate = payload.sentAt\n this.onReceive(payload)\n }\n\n /** Handle incoming BroadcastChannel messages */\n private handleMessage = (event: MessageEvent) => {\n const payload = event.data as RemotePayload\n if (payload) this.handlePayload(payload)\n }\n\n /** Polling fallback — reads from localStorage */\n private handlePoll = () => {\n let data: string | null\n try {\n data = localStorage.getItem(this.storageKey)\n } catch {\n return\n }\n\n const payload = parsePayload(data)\n if (payload) this.handlePayload(payload)\n }\n\n startListening(): void {\n if (this.listening) return\n this.listening = true\n\n if (hasBroadcastChannel) {\n this.channel = new BroadcastChannel(this.storageKey)\n this.channel.onmessage = this.handleMessage\n }\n\n // Polling fallback — covers environments without BroadcastChannel\n // and catches the initial localStorage payload written before the\n // remote window's BroadcastChannel is ready.\n this.interval = setInterval(this.handlePoll, 500)\n }\n\n stopListening(): void {\n if (!this.listening) return\n this.listening = false\n\n if (this.channel) {\n this.channel.close()\n this.channel = undefined\n }\n\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = undefined\n }\n }\n\n send(code: { css: string; html: string; js: string; test?: string }): void {\n const payload: RemotePayload = {\n remoteKey: this.remoteKey,\n sentAt: Date.now(),\n ...code,\n }\n\n // Write to localStorage (persistence for initial load + fallback)\n sendPayload(this.storageKey, payload)\n\n // Broadcast for instant delivery\n if (this.channel) {\n this.channel.postMessage(payload)\n }\n }\n\n sendClose(): void {\n const payload: RemotePayload = {\n remoteKey: this.remoteKey,\n sentAt: Date.now(),\n css: '',\n html: '',\n js: '',\n close: true,\n }\n\n sendPayload(this.storageKey, payload)\n\n if (this.channel) {\n this.channel.postMessage(payload)\n }\n }\n}\n",
|
|
37
38
|
"import { elements } from 'tosijs'\nimport { ExampleContext, TransformFn } from './types'\nimport { rewriteImports, AsyncFunction, contextVarName } from './code-transform'\n\n// Injected context name for the scope-capture callback (see `onScope`). Chosen to\n// not collide with anything an example would plausibly declare.\nconst SCOPE_CAPTURE_VAR = '__tosiCaptureScope'\n\nconst { div } = elements\n\n/**\n * Register web components in an iframe's customElements registry.\n *\n * Uses two strategies:\n * 1. Scans context exports for creator functions with a `tagName` property\n * 2. Scans the iframe HTML for any custom-element tags (contain a hyphen)\n * and registers them from the main window's customElements registry\n */\nexport function registerComponentsInIframe(\n iframeWindow: Window,\n context: ExampleContext\n): void {\n const iframeCustomElements = iframeWindow.customElements\n if (!iframeCustomElements) return\n\n const register = (tagName: string) => {\n if (!tagName || iframeCustomElements.get(tagName)) return\n const ComponentClass = customElements.get(tagName)\n if (ComponentClass) {\n try {\n iframeCustomElements.define(tagName, ComponentClass)\n } catch {\n // May fail if already defined — ignore\n }\n }\n }\n\n // Strategy 1: context exports with tagName (e.g. element creators)\n for (const lib of Object.values(context)) {\n if (lib && typeof lib === 'object') {\n for (const creator of Object.values(lib as Record<string, unknown>)) {\n if (typeof creator === 'function' && 'tagName' in creator) {\n register((creator as { tagName: string }).tagName)\n }\n }\n }\n }\n\n // Strategy 2: scan iframe DOM for unregistered custom-element tags\n const iframeDoc = iframeWindow.document\n if (iframeDoc) {\n const allElements = iframeDoc.querySelectorAll('*')\n for (const el of allElements) {\n const tag = el.tagName.toLowerCase()\n if (tag.includes('-')) {\n register(tag)\n }\n }\n }\n}\n\nexport interface ExecutionOptions {\n html: string\n css: string\n js: string\n context: ExampleContext\n /**\n * The tjs/ts transpiler. Optional ONLY when `compiledJs` is supplied — then the\n * source is already transpiled and no transpiler is loaded or called.\n */\n transform?: TransformFn\n /**\n * Build-time transpiled JS for the source block (the bake — see\n * self-contained-examples-plan.md). When present it is run VERBATIM: the\n * `rewriteImports` + `transform` step is skipped entirely, so a page runs the\n * example without loading the tjs transpiler. Already equals\n * `transform(rewriteImports(js, contextKeys))`, so scope-capture still applies.\n */\n compiledJs?: string\n onError?: (error: Error) => void\n /**\n * Receives the example's top-level locals after a successful run, so tjs\n * autocomplete can introspect the REAL values (e.g. a `const app = tosi(…)`\n * proxy) the user just created. Captured in-run — no re-execution, so no\n * doubled side effects.\n */\n onScope?: (scope: Record<string, unknown>) => void\n}\n\n/**\n * Append a scope-capture epilogue to already-transformed example code when a\n * consumer wants the run's locals. Returns the (possibly unchanged) code plus the\n * extra context entry to inject. The epilogue no-ops if the example binds nothing.\n */\nexport async function withScopeCapture(\n transformedCode: string,\n onScope?: (scope: Record<string, unknown>) => void\n): Promise<{ code: string; extraContext: Record<string, unknown> }> {\n if (!onScope) return { code: transformedCode, extraContext: {} }\n // tjs-lang 0.10.x's real AST-based scope extractor (tjs-lang#10) — replaced our\n // hand-rolled scanner. Loaded via DYNAMIC import so the OPTIONAL `tjs-lang` peer\n // never enters the static live-example/doc-browser graph (a plain-`js` doc site\n // that omits the peer must still bundle): absent tjs-lang → skip capture, keep the\n // example running. Callers gate `onScope` to edit-time tjs/ts, so on the reader\n // path this import never fires. It emits `try { <captureVar>({ a, b }) } catch {}`,\n // the object-of-bindings contract onScope already expects.\n let scopeCaptureEpilogue: (source: string, captureVar: string) => string\n try {\n ;({ scopeCaptureEpilogue } = await import('tjs-lang/editors'))\n } catch {\n return { code: transformedCode, extraContext: {} }\n }\n const epilogue = scopeCaptureEpilogue(transformedCode, SCOPE_CAPTURE_VAR)\n if (!epilogue) return { code: transformedCode, extraContext: {} }\n return {\n code: transformedCode + epilogue,\n extraContext: { [SCOPE_CAPTURE_VAR]: onScope },\n }\n}\n\n/**\n * Execute code inline (directly in the page)\n */\nexport async function executeInline(\n options: ExecutionOptions & {\n exampleElement: HTMLElement\n styleElement: HTMLStyleElement\n widgetsElement: HTMLElement\n }\n): Promise<HTMLElement> {\n const {\n html,\n css,\n js,\n context,\n transform,\n compiledJs,\n exampleElement,\n styleElement,\n widgetsElement,\n onError,\n onScope,\n } = options\n\n const preview = div({ class: 'preview' })\n preview.innerHTML = html\n styleElement.innerText = css\n\n const oldPreview = exampleElement.querySelector('.preview')\n if (oldPreview) {\n oldPreview.replaceWith(preview)\n } else {\n exampleElement.insertBefore(preview, widgetsElement)\n }\n\n try {\n const transformedCode =\n compiledJs ??\n (\n await transform!(rewriteImports(js, Object.keys(context)), {\n transforms: ['typescript'],\n })\n ).code\n\n const { code: finalCode, extraContext } = await withScopeCapture(\n transformedCode,\n onScope\n )\n const fullContext = { preview, ...context, ...extraContext }\n\n const contextKeys = Object.keys(fullContext).map(contextVarName)\n const contextValues = Object.values(fullContext)\n\n // @ts-expect-error AsyncFunction constructor typing\n const func = new AsyncFunction(...contextKeys, finalCode)\n await func(...contextValues)\n } catch (e) {\n console.error(e)\n preview.append(\n div({ class: 'preview-error' }, String((e as Error).message || e))\n )\n if (onError) onError(e as Error)\n else window.alert(`Error: ${e}, the console may have more information…`)\n }\n\n return preview\n}\n\n/**\n * Execute code in an isolated iframe\n */\nexport async function executeInIframe(\n options: ExecutionOptions & {\n exampleElement: HTMLElement\n widgetsElement: HTMLElement\n }\n): Promise<HTMLElement | null> {\n const {\n html,\n css,\n js,\n context,\n transform,\n compiledJs,\n exampleElement,\n widgetsElement,\n onError,\n onScope,\n } = options\n\n // Create or reuse iframe\n let iframe = exampleElement.querySelector(\n 'iframe.preview-iframe'\n ) as HTMLIFrameElement | null\n\n if (!iframe) {\n iframe = document.createElement('iframe')\n iframe.className = 'preview-iframe'\n iframe.style.cssText = 'width: 100%; height: 100%; border: none;'\n const oldPreview = exampleElement.querySelector('.preview')\n if (oldPreview) {\n oldPreview.replaceWith(iframe)\n } else {\n exampleElement.insertBefore(iframe, widgetsElement)\n }\n }\n\n const iframeDoc = iframe.contentDocument\n if (!iframeDoc) {\n console.error('Could not access iframe document')\n return null\n }\n\n const iframeWindow = iframe.contentWindow as Window & {\n tosijs?: unknown\n tosijsui?: unknown\n }\n\n // Copy libraries to iframe window\n if (context['tosijs']) {\n iframeWindow.tosijs = context['tosijs']\n }\n if (context['tosijs-ui']) {\n iframeWindow.tosijsui = context['tosijs-ui']\n }\n\n // Write HTML and CSS to iframe\n iframeDoc.open()\n iframeDoc.write(`<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { margin: 0; }\n .preview { height: 100%; position: relative; }\n ${css}\n </style>\n</head>\n<body>\n <div class=\"preview\">${html}</div>\n</body>\n</html>`)\n iframeDoc.close()\n\n // Register web components in iframe\n registerComponentsInIframe(iframeWindow, context)\n\n const preview = iframeDoc.querySelector('.preview') as HTMLElement\n if (!preview) {\n console.error('Could not find preview element in iframe')\n return null\n }\n\n try {\n const transformedCode =\n compiledJs ??\n (\n await transform!(rewriteImports(js, Object.keys(context)), {\n transforms: ['typescript'],\n })\n ).code\n\n const { code: finalCode, extraContext } = await withScopeCapture(\n transformedCode,\n onScope\n )\n // Execute JS in iframe context\n const fullContext = { preview, ...context, ...extraContext }\n\n // Create AsyncFunction in iframe's context\n const IframeAsyncFunction = (\n iframeWindow as Window & { eval: typeof eval }\n ).eval('(async () => {}).constructor')\n\n const contextKeys = Object.keys(fullContext).map(contextVarName)\n const contextValues = Object.values(fullContext)\n\n const func = new IframeAsyncFunction(...contextKeys, finalCode)\n await func(...contextValues)\n } catch (e) {\n console.error(e)\n const errorDiv = iframeDoc.createElement('div')\n errorDiv.className = 'preview-error'\n errorDiv.textContent = String((e as Error).message || e)\n preview.append(errorDiv)\n if (onError) onError(e as Error)\n else window.alert(`Error: ${e}, the console may have more information…`)\n }\n\n return preview\n}\n",
|
|
38
39
|
"import { ElementCreator } from 'tosijs'\nimport { ExampleContext } from './types'\nimport type { LiveExample } from './component'\n\ninterface SourceBlock {\n block: HTMLPreElement\n language: string | undefined\n code: string\n // Build-time transpiled JS from the block's baked `<script>` sibling, if any.\n compiled?: string\n // Execution mode from a `<lang>:<mode>` fence (inline | iframe | ide), if any.\n mode?: string\n}\n\n// A block's `<pre>` may be followed by a hidden `<script type=\"application/tosi-\n// transpiled\">` carrying its build-time transpiled JS (see\n// self-contained-examples-plan.md). It sits BETWEEN consecutive code blocks, so the\n// grouping walk must step over it — otherwise a tjs+test pair stops grouping. Returns\n// the next element sibling that isn't such a script.\nfunction nextGroupableSibling(el: Element | null): Element | null {\n let n = el?.nextElementSibling ?? null\n while (\n n?.tagName === 'SCRIPT' &&\n n.getAttribute('type') === 'application/tosi-transpiled'\n ) {\n n = n.nextElementSibling\n }\n return n\n}\n\n// The block's build-time transpiled JS, from the baked `<script>` immediately after\n// its `<pre>` (JSON-encoded so a `</script>` in the JS can't break out). Absent on\n// client-rendered pages (SPA nav re-renders markdown without bakes); the example then\n// transpiles on demand at run time.\nfunction bakedJsForBlock(block: Element): string | undefined {\n const n = block.nextElementSibling\n if (\n n?.tagName !== 'SCRIPT' ||\n n.getAttribute('type') !== 'application/tosi-transpiled'\n ) {\n return undefined\n }\n try {\n const parsed = JSON.parse(n.textContent || '')\n return typeof parsed === 'string' ? parsed : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Find and replace sequences of code blocks with live examples\n */\nexport function insertExamples(\n element: HTMLElement,\n context: ExampleContext,\n liveExampleCreator: ElementCreator<LiveExample>,\n liveExampleTagName: string,\n // The source file this doc was extracted from (a `.md`, or a `.ts`/`.js`/`.css`\n // with extracted doc comments). Stamped onto each example as\n // `data-source-file` + `data-example-ordinal` so a DocStore can locate the\n // originating fenced block to save edits back. Read-only; the write path comes\n // with Foundation B. Omitted when there's no source (e.g. embedded corpora).\n sourceFile?: string\n): void {\n const sources: SourceBlock[] = [\n ...element.querySelectorAll(\n '.language-html,.language-js,.language-tjs,.language-ts,.language-css,.language-test'\n ),\n ]\n .filter((el) => !el.closest(liveExampleTagName))\n .map((code) => ({\n block: code.parentElement as HTMLPreElement,\n language: code.classList[0].split('-').pop(),\n code: (code as HTMLElement).innerText,\n compiled: bakedJsForBlock(code.parentElement as HTMLPreElement),\n mode:\n (code.parentElement as HTMLElement).getAttribute(\n 'data-example-mode'\n ) || undefined,\n }))\n\n // Per-doc ordinal: the Nth live example on the page. Combined with sourceFile\n // it's the key back to the originating fenced-block group in the source.\n let ordinal = 0\n for (let index = 0; index < sources.length; index += 1) {\n const exampleSources = [sources[index]]\n\n // Group consecutive code blocks\n while (\n index < sources.length - 1 &&\n nextGroupableSibling(sources[index].block) === sources[index + 1].block\n ) {\n exampleSources.push(sources[index + 1])\n index += 1\n }\n\n const example = liveExampleCreator({ context })\n if (sourceFile !== undefined) {\n example.setAttribute('data-source-file', sourceFile)\n example.setAttribute('data-example-ordinal', String(ordinal))\n }\n // Execution mode from a `<lang>:<mode>` fence — take the FIRST mode in the group.\n // Contradictory modes across the group's blocks are an authoring error: shout in the\n // console (which the doc-tests console-clean guard also catches) but obey the first.\n const modes = exampleSources\n .map((s) => s.mode)\n .filter((m): m is string => !!m)\n if (modes.length) {\n const distinct = [...new Set(modes)]\n if (distinct.length > 1) {\n console.error(\n `live example ${ordinal + 1}${\n sourceFile ? ` (${sourceFile})` : ''\n }: contradictory modes [${distinct.join(\n ', '\n )}] — using the first, \"${modes[0]}\".`\n )\n }\n example.setAttribute('mode', modes[0])\n }\n // Stable anchor for deep-linking (and for book \"run this live\" links): an\n // author override `data-example-id` (from a ```js#my-id fence on any block in\n // the group) wins, else the 1-based positional `example-N`. The book builder\n // derives the same id from the same rendered DOM, so the links line up.\n const overrideId = exampleSources\n .map((s) => s.block.getAttribute('data-example-id'))\n .find((v): v is string => !!v)\n example.id = overrideId || `example-${ordinal + 1}`\n ordinal += 1\n const parent = exampleSources[0].block.parentElement as HTMLElement\n parent.insertBefore(example, exampleSources[0].block)\n\n exampleSources.forEach((source) => {\n switch (source.language) {\n case 'js':\n case 'tjs':\n case 'ts':\n // All three are the example's executable \"source\" block; they land in\n // the same editor and the dialect drives how it's transpiled/run.\n example.js = source.code\n example.dialect = source.language\n // The build-time bake (tjs only today) lets refresh() run the preview\n // without loading the transpiler — see self-contained-examples-plan.md.\n // Pair it with the source it was transpiled from so refresh() drops it the\n // moment the example is edited.\n if (source.compiled !== undefined) {\n example.compiledJs = source.compiled\n example.compiledJsSource = source.code\n }\n break\n case 'html':\n example.html = source.code\n break\n case 'css':\n example.css = source.code\n break\n case 'test':\n example.test = source.code\n break\n }\n source.block.remove()\n })\n\n example.showDefaultTab()\n // Snapshot the original source, then restore any locally-saved edit on top\n // (per-browser scratchpad, keyed by the data-source-file/ordinal stamps).\n example.snapshotAndRestoreLocalEdit()\n }\n}\n",
|
|
39
40
|
"/*\nsave-to-source\n\nRewrites the fenced code blocks of a single live example back into the doc source\nstring, so an in-place example edit can be persisted to the file it came from.\n\nOperates on the *raw source* (the `.md`, or a `.ts`/`.js`/`.css` whose doc\ncomments contain the markdown), located by the example's ordinal — the same\ngrouping `insert-examples` uses: consecutive executable fenced blocks\n(`js`/`html`/`css`/`test`), separated only by whitespace, form one example; any\nother content (prose, a heading, or a non-executable block) starts a new one.\n\nLimitations (v1): only blocks already present in the source are updated — adding a\nnew block type to an example isn't persisted. Replaces by block position, so it\nnever depends on the rendered/entity-decoded text matching the source.\n*/\n\n// `js`/`tjs`/`ts` are interchangeable \"source\" blocks (the example's executable\n// code); html/css/test are the rest. All count toward grouping so example\n// ordinals stay aligned with insert-examples.\nconst SOURCE_LANGS = new Set(['js', 'tjs', 'ts'])\nconst EXECUTABLE = new Set(['js', 'tjs', 'ts', 'html', 'css', 'test'])\n\ninterface FencedBlock {\n lang: string\n indent: string // leading whitespace of the fence lines (see below)\n start: number // index of the opening ```\n end: number // index just past the closing ```\n codeStart: number // index of the first char of the code body\n codeEnd: number // index just past the last char of the code body\n}\n\n/**\n * Find every ```lang …``` fenced block in document order, with positions.\n *\n * `^([ \\t]*)` captures the fence's indentation: a doc comment is often itself\n * indented (some code styles indent block-comment bodies), so its fences —\n * and their code lines — are indented in the raw source. The doc extractor dedents\n * them, so examples render with the right ordinals, but a raw scan must match them\n * where they actually sit (and re-indent on write-back). The old anchor-free regex\n * required the closing ``` immediately after a newline, so an indented file yielded\n * ZERO blocks → save-to-source always failed with \"no matching block\".\n */\nexport function findFencedBlocks(src: string): FencedBlock[] {\n const re = /^([ \\t]*)```([\\w-]*)[^\\n]*\\n([\\s\\S]*?)\\n[ \\t]*```/gm\n const blocks: FencedBlock[] = []\n let m: RegExpExecArray | null\n while ((m = re.exec(src)) !== null) {\n const codeStart = m.index + m[0].indexOf('\\n') + 1\n blocks.push({\n lang: m[2] || '',\n indent: m[1],\n start: m.index,\n end: m.index + m[0].length,\n codeStart,\n codeEnd: codeStart + m[3].length,\n })\n }\n return blocks\n}\n\n/** Re-indent each non-empty line of `text` by `indent` (inverse of dedentBy). */\nfunction indentBy(text: string, indent: string): string {\n if (!indent) return text\n return text\n .split('\\n')\n .map((line) => (line ? indent + line : line))\n .join('\\n')\n}\n\n/** Strip a leading `indent` from each line that has it (best-effort dedent). */\nfunction dedentBy(text: string, indent: string): string {\n if (!indent) return text\n return text\n .split('\\n')\n .map((line) => (line.startsWith(indent) ? line.slice(indent.length) : line))\n .join('\\n')\n}\n\n/** Group executable blocks into examples, mirroring insert-examples. */\nexport function groupExamples(\n src: string,\n blocks: FencedBlock[]\n): FencedBlock[][] {\n const groups: FencedBlock[][] = []\n let current: FencedBlock[] | null = null\n for (let i = 0; i < blocks.length; i += 1) {\n const block = blocks[i]\n if (!EXECUTABLE.has(block.lang)) {\n current = null // a non-executable block breaks the run\n continue\n }\n const prev = blocks[i - 1]\n const adjacent =\n current !== null &&\n prev !== undefined &&\n EXECUTABLE.has(prev.lang) &&\n src.slice(prev.end, block.start).trim() === ''\n if (adjacent && current) {\n current.push(block)\n } else {\n current = [block]\n groups.push(current)\n }\n }\n return groups\n}\n\nexport type ExampleEdits = {\n js?: string\n html?: string\n css?: string\n test?: string\n}\n\n/**\n * Return `src` with the `ordinal`-th example's edited blocks replaced, or `null`\n * if that example or none of the edited blocks exist in the source.\n */\nexport function rewriteExampleBlocks(\n src: string,\n ordinal: number,\n edits: ExampleEdits\n): string | null {\n const group = groupExamples(src, findFencedBlocks(src))[ordinal]\n if (!group) return null\n\n // Code editors normalize trailing whitespace (e.g. add a trailing newline), so\n // an *untouched* block's editor value rarely byte-matches the source. Compare\n // with trailing whitespace trimmed so we only rewrite blocks the user actually\n // changed — otherwise saving one block churns its unedited siblings.\n const trimEnd = (s: string): string => s.replace(/\\s+$/, '')\n const replacements: { start: number; end: number; text: string }[] = []\n // `edits.js` is the example's source code regardless of its dialect, so it maps\n // to whichever js/tjs/ts block the group actually has.\n const blockFor = (lang: 'js' | 'html' | 'css' | 'test') =>\n lang === 'js'\n ? group.find((b) => SOURCE_LANGS.has(b.lang))\n : group.find((b) => b.lang === lang)\n for (const lang of ['js', 'html', 'css', 'test'] as const) {\n const next = edits[lang]\n if (next === undefined) continue\n const block = blockFor(lang)\n if (!block) continue\n // The source fence may be indented (inside an indented doc comment) while the\n // editor value is dedented — compare dedented, and re-indent when writing back\n // so the block keeps its place in the comment.\n const sourceCode = src.slice(block.codeStart, block.codeEnd)\n if (trimEnd(dedentBy(sourceCode, block.indent)) === trimEnd(next)) continue\n replacements.push({\n start: block.codeStart,\n end: block.codeEnd,\n text: indentBy(next, block.indent),\n })\n }\n if (replacements.length === 0) return null\n\n // Apply right-to-left so earlier positions stay valid.\n replacements.sort((a, b) => b.start - a.start)\n let out = src\n for (const r of replacements) {\n out = out.slice(0, r.start) + r.text + out.slice(r.end)\n }\n return out\n}\n",
|
|
40
41
|
"/*\nPer-example local edit scratchpad.\n\nLive examples can be edited in place; this persists those edits to the browser\n(localStorage) keyed by the source-to-doc map (sourceFile + ordinal) so they\nsurvive reloads. Per-browser, no server — the local-only flavor of the DocStore\nexample scratchpad. An example with no source map can't be keyed, so it isn't\npersisted.\n*/\n\nconst PREFIX = 'tosi-example-edit:'\n\nexport interface ExampleEdit {\n js?: string\n html?: string\n css?: string\n test?: string\n // The transpiled JS for `js` (tjs/ts dialects), so a restored local edit runs\n // without reloading the transpiler — see self-contained-examples-plan.md slice 4.\n // Absent for `js`-dialect examples (they need no transpiler) and older saves.\n compiledJs?: string\n}\n\n/** Stable key for an example, from its source↔doc map attributes. */\nexport function exampleEditKey(\n sourceFile: string,\n ordinal: string | number\n): string {\n return `${PREFIX}${sourceFile}#${ordinal}`\n}\n\nexport function saveExampleEdit(key: string, edit: ExampleEdit): void {\n try {\n localStorage.setItem(key, JSON.stringify(edit))\n } catch (e) {\n console.warn('example-store: save failed', e)\n }\n}\n\nexport function loadExampleEdit(key: string): ExampleEdit | null {\n try {\n const raw = localStorage.getItem(key)\n return raw ? (JSON.parse(raw) as ExampleEdit) : null\n } catch {\n return null\n }\n}\n\nexport function clearExampleEdit(key: string): void {\n try {\n localStorage.removeItem(key)\n } catch {\n // ignore\n }\n}\n\nexport function hasExampleEdit(key: string): boolean {\n try {\n return localStorage.getItem(key) !== null\n } catch {\n return false\n }\n}\n",
|
|
41
|
-
"import { vars } from 'tosijs'\n\nexport const liveExampleStyleSpec = {\n ':host': {\n '--tosi-example-height': '320px',\n '--code-editors-bar-bg': '#777',\n '--code-editors-bar-color': '#fff',\n '--widget-bg': '#fff8',\n '--widget-color': '#000',\n position: 'relative',\n display: 'flex',\n height: 'var(--tosi-example-height)',\n background: 'var(--background)',\n boxSizing: 'border-box',\n // The bordered, rounded card wraps the whole example (preview + editors).\n // overflow:hidden clips the inner split to the radius; the inset box-shadow\n // (moved here from .preview) draws the border over both panes. CM tooltips\n // escape this clip via tooltips({position:'fixed'}) in code-editor-cm.ts.\n borderRadius: vars.spacing25,\n boxShadow: 'inset 0 0 0 2px #8883',\n overflow: 'hidden',\n },\n\n // Local-edit indicator: an accent outline on the always-visible `<>`
|
|
42
|
+
"import { vars } from 'tosijs'\n\nexport const liveExampleStyleSpec = {\n ':host': {\n '--tosi-example-height': '320px',\n '--code-editors-bar-bg': '#777',\n '--code-editors-bar-color': '#fff',\n '--widget-bg': '#fff8',\n '--widget-color': '#000',\n position: 'relative',\n display: 'flex',\n height: 'var(--tosi-example-height)',\n background: 'var(--background)',\n boxSizing: 'border-box',\n // The bordered, rounded card wraps the whole example (preview + editors).\n // overflow:hidden clips the inner split to the radius; the inset box-shadow\n // (moved here from .preview) draws the border over both panes. CM tooltips\n // escape this clip via tooltips({position:'fixed'}) in code-editor-cm.ts.\n borderRadius: vars.spacing25,\n boxShadow: 'inset 0 0 0 2px #8883',\n overflow: 'hidden',\n },\n\n // Local-edit indicator: an accent outline on the always-visible `<>` handle when\n // this example differs from its doc source. NB every `:host.STATE [part=…]` rule\n // in this file uses `> [part=\"example\"] > [part=\"exampleWidgets\"]`, not a bare\n // descendant: a light-DOM `:host` is a global `tosi-example …` selector, so a\n // descendant combinator would leak a CONTAINER example's state class onto a\n // NESTED example's widget (the self-hosting demo). The child chain pins each rule\n // to the example's own direct toolbar.\n ':host.-locally-edited > [part=\"example\"] > [part=\"exampleWidgets\"]': {\n outline: '2px solid var(--brand-color, #da1167)',\n outlineOffset: '1px',\n borderRadius: '4px',\n },\n\n ':host.-maximize': {\n position: 'fixed',\n left: '0',\n top: '0',\n height: '100vh',\n width: '100vw',\n margin: '0 !important',\n },\n\n '.-maximize': {\n zIndex: 101,\n },\n\n ':host.-vertical': {\n flexDirection: 'column',\n },\n\n ':host .layout-indicator': {\n transition: '0.5s ease-out',\n transform: 'rotateZ(270deg)',\n },\n\n ':host.-vertical .layout-indicator': {\n transform: 'rotateZ(180deg)',\n },\n\n // Maximize/restore icon toggle — scoped to the example's own toolbar so a\n // container example's -maximize doesn't hide a nested example's maximize icon.\n ':host.-maximize > [part=\"example\"] > [part=\"exampleWidgets\"] .hide-if-maximized, :host:not(.-maximize) > [part=\"example\"] > [part=\"exampleWidgets\"] .show-if-maximized':\n {\n display: 'none',\n },\n\n ':host [part=\"example\"]': {\n flex: '1 1 50%',\n height: '100%',\n position: 'relative',\n overflowX: 'auto',\n },\n\n ':host .preview': {\n height: '100%',\n position: 'relative',\n overflow: 'hidden',\n boxSizing: 'border-box',\n // Breathing room around rendered example content (border-box so height:100%\n // still fits). The border/radius now live on :host.\n padding: vars.spacing,\n },\n\n // The first rendered child often carries its own top margin (a heading, a\n // paragraph); drop it so it doesn't stack on top of the new padding.\n ':host .preview > :first-child': {\n marginTop: '0',\n },\n\n ':host .preview-error': {\n padding: '8px 12px',\n margin: '8px',\n background: '#fee',\n color: '#900',\n borderRadius: '4px',\n fontSize: '13px',\n fontFamily: 'system-ui, sans-serif',\n whiteSpace: 'pre-wrap',\n },\n\n ':host [part=\"editors\"]': {\n flex: '1 1 200px',\n height: '100%',\n position: 'relative',\n },\n\n // The example toolbar (a <tosi-pocket-bar>), pinned top-right so it never covers\n // the editor in side-by-side mode. Only the collapsed `<>` handle carries the\n // test-status colour — the action buttons stay neutral — via the pocket bar's\n // --tosi-pocket-handle-color (the -test-* rules below drive --widget-color).\n ':host [part=\"exampleWidgets\"]': {\n position: 'absolute',\n top: '5px',\n right: '5px',\n zIndex: '100',\n // Action controls are neutral (text colour); only the handle carries status.\n color: 'var(--text-color)',\n '--widget-color': 'var(--brand-color)',\n '--tosi-pocket-handle-color': 'var(--widget-color)',\n },\n\n // The doc site brand-colours bare <button>s by overriding --text-color ON the\n // button (a link affordance). Revert it here so the toolbar's icon buttons are\n // neutral, matching the check <label> (which the button rule never touched).\n ':host [part=\"exampleWidgets\"] button': {\n '--text-color': 'inherit',\n },\n\n // Run-tests toggle: the native checkbox is hidden; its icon is full-colour when\n // tests are on and greyed + monochrome when off. --tests-enabled (0|1, set on\n // <body>) is global, so every example's toggle stays in sync with no JS.\n ':host [part=\"exampleWidgets\"] .tests-toggle input': {\n display: 'none',\n },\n ':host [part=\"exampleWidgets\"] .tests-toggle': {\n opacity: 'calc(0.4 + 0.6 * var(--tests-enabled, 0))',\n filter: 'grayscale(calc(1 - var(--tests-enabled, 0)))',\n transition: 'opacity 0.2s, filter 0.2s',\n },\n\n ':host .code-editors': {\n overflow: 'hidden',\n // Match the editor surface (neutral off-white; off-black in dark mode) instead\n // of a hardcoded white that wouldn't adapt.\n background: 'var(--code-bg, #fdfdfd)',\n position: 'relative',\n top: '0',\n right: '0',\n flex: '1 1 50%',\n height: '100%',\n flexDirection: 'column',\n zIndex: '10',\n },\n\n ':host .code-editors:not([hidden])': {\n display: 'flex',\n },\n\n ':host .code-editors > h4': {\n padding: '5px',\n margin: '0',\n textAlign: 'center',\n background: 'var(--code-editors-bar-bg)',\n color: 'var(--code-editors-bar-color)',\n cursor: 'move',\n },\n\n ':host button.transparent, :host .sizer': {\n width: '32px',\n height: '32px',\n lineHeight: '32px',\n textAlign: 'center',\n padding: '0',\n margin: '0',\n },\n\n ':host .sizer': {\n cursor: 'nwse-resize',\n },\n\n '@keyframes test-pulse': {\n '0%, 100%': { opacity: '1' },\n '50%': { opacity: '0.4' },\n },\n\n // Test status colours the `<>` handle (via --widget-color → the pocket bar's\n // --tosi-pocket-handle-color). The handle is translucent at rest, so the colour\n // reads as a subtle tint until you hover.\n ':host.-test-running > [part=\"example\"] > [part=\"exampleWidgets\"]': {\n '--widget-color': '#fa0',\n animation: 'test-pulse 0.75s ease-in-out infinite',\n },\n\n ':host.-test-passed > [part=\"example\"] > [part=\"exampleWidgets\"]': {\n '--widget-color': '#0a0',\n },\n\n ':host.-test-failed > [part=\"example\"] > [part=\"exampleWidgets\"]': {\n '--widget-color': '#f00',\n },\n\n ':host [part=\"testResults\"]': {\n position: 'absolute',\n bottom: '54px',\n left: '5px',\n background: 'var(--widget-bg)',\n borderRadius: '5px',\n padding: '8px',\n fontSize: '14px',\n margin: '0',\n maxWidth: '400px',\n maxHeight: '200px',\n overflow: 'auto',\n zIndex: '100',\n },\n\n ':host [part=\"testResults\"][hidden]': {\n display: 'none',\n },\n\n ':host .test-pass': {\n color: '#0a0',\n },\n\n ':host .test-fail': {\n color: '#f00',\n },\n\n // Read-only \"tjs tests\" results tab (inline /*test*/ results).\n ':host .tjs-test-results': {\n padding: '8px 12px',\n fontSize: '14px',\n fontFamily: 'var(--mono-font, monospace)',\n overflow: 'auto',\n lineHeight: '1.6',\n },\n\n ':host .tjs-test-summary': {\n fontWeight: 'bold',\n marginBottom: '6px',\n },\n\n ':host .tjs-test-empty': {\n opacity: '0.6',\n },\n\n ':host .tjs-test-error': {\n opacity: '0.7',\n },\n}\n",
|
|
42
43
|
"import { ExampleContext, TransformFn } from './types'\nimport { rewriteImports, AsyncFunction } from './code-transform'\n\nexport interface TestResult {\n name: string\n passed: boolean\n error?: string\n}\n\nexport interface TestResults {\n passed: number\n failed: number\n tests: TestResult[]\n}\n\nclass AssertionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'AssertionError'\n }\n}\n\n// Parse an Error.stack and return the first frame that isn't from inside\n// the bundled harness itself — that's the user's test code. The harness is\n// minified into a single bundle (index.js / module.js / iife.js), so we\n// skip frames whose URL ends in those filenames and pick the next one.\n// Stack-frame format varies across browsers (Chrome: \" at fn (url:line:col)\";\n// Safari/FF: \"fn@url:line:col\") — the trailing \"url:line:col\" capture handles\n// both.\nconst BUNDLE_FILES = /\\/(index|module|iife|module\\.debug|module\\.safe)\\.js$/\ninterface UserFrame {\n url: string\n line: number\n col: number\n}\nfunction firstUserStackFrame(stack: string | undefined): UserFrame | null {\n if (!stack) return null\n for (const raw of stack.split('\\n')) {\n const line = raw.trim()\n if (!line) continue\n // Skip the \"AssertionError: ...\" header line.\n if (/^\\w*Error[:\\s]/.test(line)) continue\n const match = line.match(/[(@\\s]([^()\\s]+):(\\d+):(\\d+)\\)?$/)\n if (!match) continue\n const [, url, ln, col] = match\n if (BUNDLE_FILES.test(url)) continue\n return { url, line: Number(ln), col: Number(col) }\n }\n return null\n}\n\n// Source of the currently-running test block, set by runTests so matchers\n// can lift the failing line out of it for inclusion in the error message.\nlet currentTestSource: string | null = null\nfunction getSourceLine(lineNum: number): string | null {\n if (!currentTestSource || lineNum < 1) return null\n const lines = currentTestSource.split('\\n')\n return lines[lineNum - 1]?.trim() || null\n}\n\ninterface Matchers {\n toBe: (expected: unknown) => void\n toEqual: (expected: unknown) => void\n toBeTruthy: () => void\n toBeFalsy: () => void\n toBeNull: () => void\n toBeUndefined: () => void\n toBeDefined: () => void\n toContain: (item: unknown) => void\n toHaveLength: (length: number) => void\n toMatch: (pattern: RegExp) => void\n toBeGreaterThan: (n: number) => void\n toBeLessThan: (n: number) => void\n toBeInstanceOf: (cls: new (...args: unknown[]) => unknown) => void\n not: Matchers\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true\n if (typeof a !== typeof b) return false\n if (a === null || b === null) return a === b\n if (typeof a !== 'object') return false\n\n const aObj = a as Record<string, unknown>\n const bObj = b as Record<string, unknown>\n\n if (Array.isArray(aObj) !== Array.isArray(bObj)) return false\n\n const aKeys = Object.keys(aObj)\n const bKeys = Object.keys(bObj)\n if (aKeys.length !== bKeys.length) return false\n\n return aKeys.every((key) => deepEqual(aObj[key], bObj[key]))\n}\n\n/** Default timeout for individual tests (ms) */\nexport const TEST_TIMEOUT = 5000\n\n// Safe JSON that handles DOM elements and circular references\nconst safeJSON = {\n stringify(val: unknown): string {\n if (typeof val === 'undefined') return 'undefined'\n if (val === null) return 'null'\n if (typeof Element !== 'undefined' && val instanceof Element) {\n return `<${val.tagName.toLowerCase()}>`\n }\n if (typeof Node !== 'undefined' && val instanceof Node) {\n return `[${val.nodeName}]`\n }\n try {\n return JSON.stringify(val)\n } catch {\n return String(val)\n }\n },\n}\n\nconst { stringify } = safeJSON\n\nfunction createMatchers(value: unknown, negated = false): Matchers {\n const assert = (condition: boolean, message: string) => {\n const result = negated ? !condition : condition\n if (!result) {\n const err = new AssertionError(negated ? `not: ${message}` : message)\n const frame = firstUserStackFrame(err.stack)\n if (frame) {\n const src = getSourceLine(frame.line)\n const loc = `line ${frame.line}`\n err.message = src\n ? `${err.message} | ${src} (${loc})`\n : `${err.message} (${loc})`\n }\n throw err\n }\n }\n\n const matchers: Matchers = {\n toBe(expected: unknown) {\n assert(\n value === expected,\n `Expected ${stringify(value)} to be ${stringify(expected)}`\n )\n },\n toEqual(expected: unknown) {\n assert(\n deepEqual(value, expected),\n `Expected ${stringify(value)} to equal ${stringify(expected)}`\n )\n },\n toBeTruthy() {\n assert(!!value, `Expected ${stringify(value)} to be truthy`)\n },\n toBeFalsy() {\n assert(!value, `Expected ${stringify(value)} to be falsy`)\n },\n toBeNull() {\n assert(value === null, `Expected ${stringify(value)} to be null`)\n },\n toBeUndefined() {\n assert(\n value === undefined,\n `Expected ${stringify(value)} to be undefined`\n )\n },\n toBeDefined() {\n assert(value !== undefined, `Expected ${stringify(value)} to be defined`)\n },\n toContain(item: unknown) {\n if (typeof value === 'string') {\n assert(\n value.includes(item as string),\n `Expected \"${value}\" to contain \"${item}\"`\n )\n } else if (Array.isArray(value)) {\n assert(\n value.includes(item),\n `Expected array to contain ${stringify(item)}`\n )\n } else {\n throw new AssertionError('toContain requires string or array')\n }\n },\n toHaveLength(length: number) {\n const actual = (value as { length: number }).length\n assert(actual === length, `Expected length ${actual} to be ${length}`)\n },\n toMatch(pattern: RegExp) {\n assert(\n pattern.test(value as string),\n `Expected \"${value}\" to match ${pattern}`\n )\n },\n toBeGreaterThan(n: number) {\n assert((value as number) > n, `Expected ${value} to be greater than ${n}`)\n },\n toBeLessThan(n: number) {\n assert((value as number) < n, `Expected ${value} to be less than ${n}`)\n },\n toBeInstanceOf(cls: new (...args: unknown[]) => unknown) {\n assert(\n value instanceof cls,\n `Expected value to be instance of ${cls.name}`\n )\n },\n get not() {\n return createMatchers(value, !negated)\n },\n }\n\n return matchers\n}\n\nexport function expect(value: unknown): Matchers {\n return createMatchers(value)\n}\n\n/**\n * Wait for a specified number of milliseconds\n */\nexport function waitMs(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Wait for an element matching the selector to appear in the preview\n * @param preview - The preview element to search within\n * @param selector - CSS selector to find\n * @param timeout - Maximum time to wait in ms (default: 1000)\n */\nexport function waitFor(\n preview: HTMLElement,\n selector: string,\n timeout = 1000\n): Promise<Element> {\n return new Promise((resolve, reject) => {\n const startTime = Date.now()\n\n const check = () => {\n const element = preview.querySelector(selector)\n if (element) {\n resolve(element)\n return\n }\n\n if (Date.now() - startTime >= timeout) {\n reject(\n new Error(`Timeout waiting for \"${selector}\" after ${timeout}ms`)\n )\n return\n }\n\n requestAnimationFrame(check)\n }\n\n check()\n })\n}\n\nexport interface TestContext {\n expect: typeof expect\n test: (name: string, fn: () => void | Promise<void>) => void\n describe: (name: string, fn: () => void) => void\n}\n\nfunction withTimeout<T>(\n promise: Promise<T>,\n ms: number,\n name: string\n): Promise<T> {\n return Promise.race([\n promise,\n new Promise<never>((_, reject) =>\n setTimeout(\n () => reject(new Error(`Test \"${name}\" timed out after ${ms}ms`)),\n ms\n )\n ),\n ])\n}\n\n/**\n * Create a test context that collects results.\n * Returns the context and a `pending` promise array that must be awaited\n * to capture async test results.\n */\nexport function createTestContext(\n results: TestResult[],\n timeout = TEST_TIMEOUT\n): TestContext & { pending: Promise<void>[] } {\n let currentDescribe = ''\n const pending: Promise<void>[] = []\n\n return {\n pending,\n expect,\n test(name: string, fn: () => void | Promise<void>) {\n const fullName = currentDescribe ? `${currentDescribe} > ${name}` : name\n try {\n const result = fn()\n if (result instanceof Promise) {\n const wrapped = withTimeout(result, timeout, fullName)\n .then(() => {\n results.push({ name: fullName, passed: true })\n })\n .catch((err: Error) => {\n results.push({\n name: fullName,\n passed: false,\n error: err.message,\n })\n })\n pending.push(wrapped)\n } else {\n results.push({ name: fullName, passed: true })\n }\n } catch (err) {\n results.push({\n name: fullName,\n passed: false,\n error: (err as Error).message,\n })\n }\n },\n describe(name: string, fn: () => void) {\n const previousDescribe = currentDescribe\n currentDescribe = currentDescribe ? `${currentDescribe} > ${name}` : name\n fn()\n currentDescribe = previousDescribe\n },\n }\n}\n\n/**\n * Run test code and collect results\n */\nexport async function runTests(\n testCode: string,\n preview: HTMLElement,\n context: ExampleContext,\n transform: TransformFn\n): Promise<TestResults> {\n const results: TestResult[] = []\n const testContext = createTestContext(results)\n\n const fullContext = {\n preview,\n ...context,\n expect: testContext.expect,\n test: testContext.test,\n describe: testContext.describe,\n waitMs,\n waitFor: (selector: string, timeout?: number) =>\n waitFor(preview, selector, timeout),\n }\n\n try {\n const code = rewriteImports(testCode, Object.keys(context))\n const transformedCode = (\n await transform(code, { transforms: ['typescript'] })\n ).code\n\n const contextKeys = Object.keys(fullContext).map((key) =>\n key.replace(/-/g, '')\n )\n const contextValues = Object.values(fullContext)\n\n // Tag the AsyncFunction body with a sourceURL so stack traces report\n // line numbers relative to the test source (not a position inside the\n // bundled harness). `firstUserStackFrame` uses this to skip our own\n // frames and surface the assertion's actual location to the user.\n const taggedCode = `${transformedCode}\\n//# sourceURL=inline-test`\n\n // Capture the source so matchers can lift the failing line into the\n // error message. rewriteImports + tjs (dialect: 'js') leave plain JS\n // untouched, preserving line breaks so stack line numbers match this source.\n currentTestSource = transformedCode\n\n // @ts-expect-error AsyncFunction constructor typing\n const func = new AsyncFunction(...contextKeys, taggedCode)\n await func(...contextValues)\n } catch (err) {\n // If the test code itself throws (not an assertion), add it as a failed test\n results.push({\n name: 'Test execution',\n passed: false,\n error: (err as Error).message,\n })\n }\n\n // Wait for any async tests to settle\n if (testContext.pending.length > 0) {\n await Promise.all(testContext.pending)\n }\n\n currentTestSource = null\n\n return {\n passed: results.filter((r) => r.passed).length,\n failed: results.filter((r) => !r.passed).length,\n tests: results,\n }\n}\n",
|
|
43
|
-
"/*#\n# example\n\n`<tosi-example>` makes it easy to insert interactive code examples in a web page. It\nstarted life as a super lightweight, easier-to-embed implementation of\n[b8rjs's fiddle component](https://b8rjs.com)—which I dearly missed—but now the student\nis, by far, the master. And it's still super lightweight.\n\n*You're probably looking at it right now.*\n\n```js\n// this code executes in an async function body\n// it has tosijs, tosijsui, and preview (the preview div) available as local variables\nimport { div } from 'tosijs'.elements\npreview.append(div({class: 'example'}, 'fiddle de dee!'))\npreview.append('Try editing some code and hitting refresh…')\n```\n```html\n<h2>Example</h2>\n```\n```css\n.preview {\n padding: 0 var(--spacing);\n}\n\n.example {\n animation: throb ease-in-out 1s infinite alternate;\n}\n\n@keyframes throb {\n from { color: blue }\n to { color: red }\n}\n```\n\n## How examples run: one shared page (read this)\n\nBy default every example on a page runs **inline — in the page's own document and\nJavaScript realm**, not in a sandbox. Each example gets its own `preview` element\n(and its `css` is scoped to that preview), but they all share the one `tosijs`\nmodule, so **`tosi()` state singletons are shared across every example on the page**.\n\nThis is a deliberate choice, and it buys two things:\n\n1. It's a live demonstration of how clean tosi's isolation is — many independent\n components mount into one page and coexist without stepping on each other's DOM.\n2. You can drive any demo from the console (or from another example) through the same\n global singleton — the state is right there, not walled off in a frame.\n\nThe trade-off is the gotcha to know about: **examples can see and clobber each\nother's state.** Two examples that both do `tosi({ app: … })` bind to the *same*\n`app` singleton (the tosi registry is keyed by the top-level name), so one overwrites\nthe other — and you get \"impossible\" bugs where an example misbehaves only when some\n*other* example happens to be on the same page. Worth it, but plan for it:\n\n- **Namespace your state.** Give each example a unique top-level key\n (`tosi({ ratingDemo: … })`, not a generic `tosi({ app: … })`).\n- Prefer local variables and `preview`-scoped DOM over shared singletons when a demo\n doesn't need to be globally reachable.\n- In `test` blocks, assert with **counts / deltas**, not presence/absence — other\n examples may have left their elements in the DOM.\n\nFor real isolation of the **DOM and CSS**, add the `iframe` attribute (below). Note\nit does **not** isolate tosijs *state*: the `tosijs`/`tosijs-ui` handed to an iframe\nexample are still the host page's module instances, so `tosi()` singletons stay\nshared. Namespacing is the fix for state; `iframe` is the fix for DOM/CSS bleed.\n\n## Source dialects: `js`, `tjs`, `ts`\n\nThe executable block's fence language picks how the source is compiled before it\nruns, via [tjs-lang](https://www.npmjs.com/package/tjs-lang):\n\n- **`js`** — plain JavaScript, run as-is (tjs's `dialect: 'js'` leaves vanilla JS\n untouched, so there's no surprise rewriting).\n- **`tjs`** — [tjs-lang](https://www.npmjs.com/package/tjs-lang) source, lowered to\n JavaScript. Type annotations and tjs's safety transforms are compiled away.\n- **`ts`** — TypeScript, lowered to tjs (via `tjs-lang/browser/from-ts`) and then to\n JavaScript. The TypeScript compiler loads lazily, only for pages that use it.\n\nA `tjs` block — note the type annotation (which a plain `js` block couldn't run)\nand the inline `test '…' { … }` unit test. Open the code panel: the source tab\nis labeled **tjs**, with read-only **JS** (the compiled output) and **tjs tests**\n(the inline-test results) tabs, alongside the **DOM tests** tab.\n\n```tjs\nimport { div } from 'tosijs'.elements\n\nfunction badge(label: string, n: number) {\n return `${label}: ${n}`\n}\n\ntest 'badge formats label and number' {\n expect(badge('count', 42)).toBe('count: 42')\n}\n\npreview.append(div({ class: 'badge' }, badge('count', 42)))\n```\n```test\ntest('tjs example transpiled and ran', () => {\n const badge = preview.querySelector('.badge')\n expect(badge).not.toBe(null)\n expect(badge.textContent).toBe('count: 42')\n})\n```\n\nThe inline test above is tjs's native `test '…' { … }` syntax. In a *TypeScript*\nexample the equivalent is written inside a comment (so it survives `tsc`) — but\nthat comment form can't appear inside a doc comment like this one, since the\ntest's own closing delimiter would end the doc comment.\n\n## Inline WebAssembly (SIMD)\n\nA `tjs` example can drop a hot loop into **WebAssembly** with a `wasm { … } fallback\n{ … }` block — compiled to bytecode *at transpile time*, embedded as base64, and run\nin your browser. No Emscripten, no `.wasm` file, no build step, no server.\n\nWASM earns its keep with **SIMD**: scalar WASM roughly ties the JS JIT, but a\nbranchless `f32x4` kernel does four values per instruction. Below, a field of a few\nthousand particles is held on a grid by springs and pushed aside by your pointer —\nevery particle's position updated four at a time in WASM SIMD. **Click the button to\ntoggle WASM ↔ JavaScript** and watch the per-step time — the same code, one path\ncompiled to SIMD bytecode:\n\n```tjs\n// One physics step for the whole field, 4 particles per iteration with f32x4 SIMD:\n// a spring pulls each particle to its home cell, and an inverse-square push shoves\n// it away from the pointer. Pure arithmetic — no per-lane branches (tjs's f32x4 has\n// no compare/select yet), which is exactly what SIMD wants. `fallback { }` is the\n// scalar-JS twin.\nfunction step(! px: Float32Array, py: Float32Array, vx: Float32Array, vy: Float32Array, hx: Float32Array, hy: Float32Array, n: 0, tx: 0.0, ty: 0.0) {\n wasm {\n let txv = f32x4_splat(tx)\n let tyv = f32x4_splat(ty)\n let spring = f32x4_splat(0.03)\n let damp = f32x4_splat(0.86)\n let repel = f32x4_splat(1600.0)\n let soft = f32x4_splat(140.0)\n for (let i = 0; i < n; i = i + 4) {\n let off = i * 4\n let x = f32x4_load(px, off)\n let y = f32x4_load(py, off)\n let sx = f32x4_mul(f32x4_sub(f32x4_load(hx, off), x), spring)\n let sy = f32x4_mul(f32x4_sub(f32x4_load(hy, off), y), spring)\n let rx = f32x4_sub(x, txv)\n let ry = f32x4_sub(y, tyv)\n let push = f32x4_div(repel, f32x4_add(f32x4_add(f32x4_mul(rx, rx), f32x4_mul(ry, ry)), soft))\n let nvx = f32x4_mul(f32x4_add(f32x4_load(vx, off), f32x4_add(sx, f32x4_mul(rx, push))), damp)\n let nvy = f32x4_mul(f32x4_add(f32x4_load(vy, off), f32x4_add(sy, f32x4_mul(ry, push))), damp)\n f32x4_store(vx, off, nvx)\n f32x4_store(vy, off, nvy)\n f32x4_store(px, off, f32x4_add(x, nvx))\n f32x4_store(py, off, f32x4_add(y, nvy))\n }\n } fallback {\n for (let i = 0; i < n; i++) {\n const sx = (hx[i] - px[i]) * 0.03, sy = (hy[i] - py[i]) * 0.03\n const rx = px[i] - tx, ry = py[i] - ty\n const push = 1600.0 / (rx * rx + ry * ry + 140.0)\n const nvx = (vx[i] + sx + rx * push) * 0.86, nvy = (vy[i] + sy + ry * push) * 0.86\n vx[i] = nvx; vy[i] = nvy; px[i] += nvx; py[i] += nvy\n }\n }\n}\n\n// 100k particles, not 6k. At 6k each step took ~0.02ms — right at the resolution floor\n// of performance.now(), so the readout was mostly measuring the timer. At this size both\n// paths land in the hundreds of microseconds and the comparison actually means something.\nconst W = 480, H = 300, cols = 400, rows = 250, N = cols * rows\n\n// Allocate the particle arrays INSIDE wasm memory. This is the whole ballgame: if a\n// typed array's buffer isn't the wasm memory, every call copies it in and out again —\n// six 6,000-float arrays per frame — and you end up timing memcpy, not SIMD. (With\n// plain `new Float32Array(N)` this demo measured ~4x SLOWER than its own JS fallback.)\n// `wasmBuffer` is a bump allocator handing out views into the shared wasm memory, so\n// the wrapper passes a byte offset and copies nothing. Fall back gracefully if the\n// wasm block didn't compile, so the JS twin still runs.\nconst f32 = (n) => globalThis.wasmBuffer ? wasmBuffer(Float32Array, n) : new Float32Array(n)\nconst px = f32(N), py = f32(N)\nconst vx = f32(N), vy = f32(N)\nconst hx = f32(N), hy = f32(N)\nfor (let i = 0; i < N; i++) {\n const c = i % cols, r = (i / cols) | 0\n hx[i] = (c + 0.5) * W / cols\n hy[i] = (r + 0.5) * H / rows\n px[i] = hx[i]\n py[i] = hy[i]\n}\n\nconst canvas = document.createElement('canvas')\ncanvas.width = W\ncanvas.height = H\ncanvas.style.cssText = 'width:100%;max-width:480px;border-radius:8px;display:block;background:#0b0e14;touch-action:none;cursor:crosshair'\nconst ctx = canvas.getContext('2d')\n\n// Plot straight into an ImageData buffer (one 32-bit store per particle) instead of\n// 100k fillRect() calls — otherwise the DRAW would dominate and we'd be benchmarking\n// canvas, not the kernel.\nconst img = ctx.createImageData(W, H)\nconst pix = new Uint32Array(img.data.buffer)\nconst BG = 0xff140e0b // #0b0e14, little-endian ABGR\nconst TEAL = 0xffc5d14f // #4fd1c5\nconst AMBER = 0xff55adf6 // #f6ad55\n\nlet tx = W / 2, ty = H / 2, idle = 0, frame = 0\ncanvas.addEventListener('pointermove', (e) => {\n const r = canvas.getBoundingClientRect()\n tx = (e.clientX - r.left) / r.width * W\n ty = (e.clientY - r.top) / r.height * H\n idle = 0\n})\n\n// tjs-lang 0.9.1+ gates every wasm call on `globalThis.__tjs_wasm_enabled`, so this\n// flips the kernel between WASM and its JS twin without touching tjs internals.\n// (Don't reach for `__tjs_wasm_0` — it's private AND index-keyed per transpile, so\n// a second wasm example on the page registers the same name and you'd clobber it.)\nlet useWasm = true\nconst btn = document.createElement('button')\nbtn.style.cssText = 'margin:8px 0;padding:6px 12px;border-radius:6px;cursor:pointer'\nconst readout = document.createElement('p')\nlet acc = 0, frames = 0\nfunction applyMode() {\n globalThis.__tjs_wasm_enabled = useWasm\n acc = 0; frames = 0 // don't average across a mode switch\n btn.textContent = useWasm ? '⚡ WebAssembly SIMD — click for JavaScript' : '🐢 JavaScript — click for WASM SIMD'\n}\nbtn.onclick = () => { useWasm = !useWasm; applyMode() }\n\n// Warm BOTH paths before timing anything. The JS twin never executes until you click\n// over to it, so an un-warmed comparison times cold, un-JITed JavaScript and flatters\n// WASM (it read ~2x too good). A warmed V8 does this kernel in ~0.024 ms/step; the\n// zero-copy SIMD kernel does ~0.015 — a real but modest ~1.6x, which is the honest\n// number this demo should show.\nfunction warmUp() {\n for (const on of [false, true]) {\n globalThis.__tjs_wasm_enabled = on\n for (let i = 0; i < 150; i++) step(px, py, vx, vy, hx, hy, N, W / 2, H / 2)\n }\n // the warm-up perturbed the particles — put them back on the grid\n for (let i = 0; i < N; i++) { px[i] = hx[i]; py[i] = hy[i]; vx[i] = 0; vy[i] = 0 }\n}\nfunction loop() {\n if (!document.body.contains(canvas)) return // example removed → stop\n frame++\n idle++\n if (idle > 45) {\n tx = W / 2 + Math.cos(frame * 0.02) * W * 0.32\n ty = H / 2 + Math.sin(frame * 0.031) * H * 0.32\n }\n const t0 = performance.now()\n step(px, py, vx, vy, hx, hy, N, tx, ty)\n acc += performance.now() - t0\n frames++\n\n pix.fill(BG)\n const dot = useWasm ? TEAL : AMBER\n for (let i = 0; i < N; i++) {\n const x = px[i] | 0, y = py[i] | 0\n if (x >= 0 && x < W && y >= 0 && y < H) pix[y * W + x] = dot\n }\n ctx.putImageData(img, 0, 0)\n\n if (frames >= 20) {\n readout.textContent = N.toLocaleString() + ' particles · ' + (acc / frames).toFixed(3) +\n ' ms/step (' + (useWasm ? 'WASM SIMD' : 'JS') + ') · move the pointer'\n acc = 0\n frames = 0\n }\n requestAnimationFrame(loop)\n}\n\n;(async () => {\n // The wasm bootstrap is async. tjs-lang 0.9.1+ exposes an awaitable ready signal,\n // so we start only once the kernel is instantiated — otherwise the first frames\n // silently run the JS fallback while the button claims \"WebAssembly SIMD\".\n await globalThis.__tjs_wasm_ready?.()\n warmUp()\n applyMode()\n requestAnimationFrame(loop)\n})()\n\npreview.append(canvas, btn, readout)\n```\n\n```test\n// Guard the claim the button makes. A `wasm {}` block that fails to compile falls\n// back to JS *silently*, so without this the demo can advertise \"⚡ WebAssembly SIMD\"\n// while running the JS twin, and every test stays green.\ntest('the wasm kernel actually compiled (no silent fallback to JS)', async () => {\n await globalThis.__tjs_wasm_ready?.()\n expect(typeof globalThis.__tjs_wasm_ready).toBe('function')\n // 0.10.x names each compiled wasm export `__tjs_wasm_<hash>_<n>` on globalThis — the\n // hash makes it collision-free across examples (tjs-lang#11). The kernel calls that\n // global when present and falls back to its JS twin when it's not, so a truthy one\n // means the wasm really compiled. Matched by pattern (the hash is per-transpile), and\n // asserting >0 keeps the guard from ever passing vacuously.\n const compiled = Object.keys(globalThis).filter(\n (k) => /^__tjs_wasm_[a-z0-9]+_\\d+$/.test(k) && globalThis[k]\n )\n expect(compiled.length).toBeGreaterThan(0)\n})\n```\n\n## Execution modes\n\nAn example runs in one of three modes. Signal the mode on a code fence with\n`` ```<lang>:<mode> `` — `` ```js:iframe ``, `` ```css:ide `` — on **any** block in the\ngroup; the first mode in the group wins (contradictory modes across a group are an\nauthoring error: they log to the console and the first is used). Or set the `mode`\nattribute directly.\n\n- **`inline`** (default) — runs in the page, against the **library you're building**\n (your in-page working copy). Real npm imports resolve alongside it (with the\n import-resolver enabled). Shares the page's DOM, CSS, and `tosi()` state.\n- **`iframe`** — same working-copy library, but the preview gets its own document, CSS\n scope, and custom-element registry, so a demo's styles can't leak into (or be leaked\n on by) the rest of the page. It isolates **DOM and CSS, not state** — the injected\n `tosijs`/`tosijs-ui` are the host's own instances, so `tosi()` singletons stay shared;\n namespace your state to keep examples from stomping each other. (The boolean `iframe`\n attribute is a back-compat alias for `mode=\"iframe\"`.)\n- **`ide`** — fully sandboxed: real, **published** dependencies (all imports resolved by\n the import-resolver, not your working copy) in an isolated realm — the standalone-app\n mode, for running arbitrary code rather than demoing the library under development.\n *(Recognized now; its distinct real-module execution is in progress.)*\n\n*Fully-isolated examples (a separate module realm, so even `tosi()` state and\nimported dependencies are sandboxed — the way tjs-lang's playgrounds do it with a\nservice worker intercepting imports) are a possible future option. For **actual\nexamples** the shared-page default is usually the nicer behavior: it shows off tosi's\nisolation and lets you poke demos through the live global state.*\n\n## Test Blocks\n\nAdd \\`\\`\\``test` code blocks to write inline tests that run against the preview:\n\n```html\n<button class=\"demo-btn\">Click me</button>\n```\n```js\npreview.querySelector('.demo-btn').onclick = () => {\n preview.querySelector('.demo-btn').textContent = 'Clicked!'\n}\n```\n```test\ntest('button exists', () => {\n const btn = preview.querySelector('.demo-btn')\n expect(btn).toBeDefined()\n expect(btn.textContent).toBe('Click me')\n})\n\ntest('slow test shows running state', async () => {\n await waitMs(500)\n expect(true).toBe(true)\n})\n```\n\nTests have access to:\n- `preview` - the DOM element containing the rendered HTML\n- `expect(value)` - Jest-like assertions (.toBe, .toEqual, .toBeTruthy, etc.)\n- `test(name, fn)` - define a test case (can be async)\n- `describe(name, fn)` - group tests\n- `waitMs(ms)` - wait for a specified number of milliseconds\n- `waitFor(selector, timeout?)` - wait for an element to appear (default 1s timeout)\n- All context libraries (tosijs, tosijs-ui, etc.)\n\n### Async Tests\n\nTests can be async functions. Use `waitMs` for simple delays and `waitFor` to wait\nfor dynamically created elements:\n\n```html\n<button class=\"async-btn\">Load Data</button>\n<div class=\"result\"></div>\n```\n```js\npreview.querySelector('.async-btn').onclick = () => {\n setTimeout(() => {\n preview.querySelector('.result').innerHTML = '<span class=\"data\">Loaded!</span>'\n }, 100)\n}\n// Auto-click to trigger the async behavior\npreview.querySelector('.async-btn').click()\n```\n```test\ntest('waitFor finds dynamically created element', async () => {\n const data = await waitFor('.data')\n expect(data.textContent).toBe('Loaded!')\n})\n\ntest('waitMs delays execution', async () => {\n const start = Date.now()\n await waitMs(50)\n expect(Date.now() - start).toBeGreaterThan(40)\n})\n```\n\n## `context`\n\nA `<tosi-example>` is given a `context` object which is the set of values available\nin the javascript's execution context. The context always includes `preview`.\n\n```\nimport * as tosijs from 'tosijs'\nimport * as tosijsui from 'tosijs-ui'\n\ncontext = {\n tosijs,\n 'tosijs-ui': tosijsui\n}\n```\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component, ElementCreator, elements, tosi } from 'tosijs'\nimport { codeEditor, CodeEditor } from '../code-editor'\nimport { tosiTabs } from '../tab-selector'\nimport { icons } from '../icons'\nimport { postNotification } from '../notifications'\nimport { popMenu } from '../menu'\n\nimport { Dialect, ExampleContext, ExampleParts, TransformFn } from './types'\nimport {\n loadTransform,\n loadTjsTestApi,\n rewriteImports,\n contextVarName,\n AsyncFunction,\n TjsTestResult,\n} from './code-transform'\nimport {\n STORAGE_KEY,\n createRemoteKey,\n RemoteSyncManager,\n openEditorWindow,\n} from './remote-sync'\nimport { executeInline, executeInIframe } from './execution'\nimport { insertExamples } from './insert-examples'\nimport {\n rewriteExampleBlocks,\n groupExamples,\n findFencedBlocks,\n} from './save-to-source'\nimport {\n exampleEditKey,\n saveExampleEdit,\n loadExampleEdit,\n clearExampleEdit,\n hasExampleEdit,\n ExampleEdit,\n} from './example-store'\nimport { liveExampleStyleSpec } from './styles'\nimport { runTests, TestResults } from './test-harness'\n\nconst { div, tosiSlot, style, button, pre, span } = elements\n\n// Test mode: controlled by localStorage, defaults to enabled on localhost\nconst TESTS_ENABLED_KEY = 'tosijs-ui-tests-enabled'\n\nconst isLocalhost =\n typeof window !== 'undefined' &&\n (window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1')\n\nfunction getStoredTestsEnabled(): boolean {\n if (typeof localStorage === 'undefined') return false\n const stored = localStorage.getItem(TESTS_ENABLED_KEY)\n if (stored !== null) {\n return stored === 'true'\n }\n // Default: enabled on localhost, disabled elsewhere\n return isLocalhost\n}\n\n// Test manager - observable state for test mode\nexport const { testManager } = tosi({\n testManager: {\n enabled: getStoredTestsEnabled(),\n },\n})\n\n// Set CSS variable on body for test visibility (CSS vars pierce shadow DOM)\nfunction updateTestsEnabledClass() {\n document.body.classList.toggle('tests-enabled', testManager.enabled.value)\n document.body.style.setProperty(\n '--tests-enabled',\n testManager.enabled.value ? '1' : '0'\n )\n}\nif (typeof document !== 'undefined') {\n // Set initial state when DOM is ready\n if (document.body) {\n updateTestsEnabledClass()\n } else {\n document.addEventListener('DOMContentLoaded', updateTestsEnabledClass)\n }\n}\n\n/** Enable test mode (runs tests and shows indicators) */\nexport function enableTests(): void {\n localStorage.setItem(TESTS_ENABLED_KEY, 'true')\n testManager.enabled.value = true\n updateTestsEnabledClass()\n // Re-run tests on all existing examples\n document.querySelectorAll('tosi-example').forEach((el) => {\n ;(el as LiveExample).refresh()\n })\n}\n\n/** Disable test mode */\nexport function disableTests(): void {\n localStorage.setItem(TESTS_ENABLED_KEY, 'false')\n testManager.enabled.value = false\n updateTestsEnabledClass()\n}\n\nexport class LiveExample extends Component<ExampleParts> {\n static preferredTagName = 'tosi-example'\n static lightStyleSpec = liveExampleStyleSpec\n\n static initAttributes = {\n persistToDom: false,\n iframe: false,\n // Execution mode: 'inline' (default — runs in the page against your working\n // library), 'iframe' (DOM/CSS isolation, still your working library), or 'ide'\n // (fully sandboxed, real published deps — the standalone-app mode). Set from a\n // `<lang>:<mode>` fence by insert-examples; `iframe` boolean is a back-compat alias.\n mode: '',\n }\n\n /** Resolved execution mode — `mode` attribute wins; `iframe` boolean is the alias. */\n get effectiveMode(): 'inline' | 'iframe' | 'ide' {\n const m = this.mode\n if (m === 'iframe' || m === 'ide' || m === 'inline') return m\n if (m) console.warn(`<tosi-example>: unknown mode \"${m}\" — running inline`)\n return this.iframe ? 'iframe' : 'inline'\n }\n\n prefix = 'lx'\n storageKey = STORAGE_KEY\n context: ExampleContext = {}\n // The example's top-level locals from the latest run, captured in-run for tjs\n // runtime-value autocomplete (see `liveBindings`). Populated via `onScope`.\n private capturedScope: Record<string, unknown> = {}\n uuid: string = crypto.randomUUID()\n remoteId = ''\n\n private remoteSync?: RemoteSyncManager\n private undoInterval?: ReturnType<typeof setInterval>\n private testResults?: TestResults\n private pendingValues: Record<string, string> = {}\n private pendingShowDefaultTab = false\n private beforeUnloadHandler?: () => void\n // The code-editor panel (the 4 <tosi-code> editors + toolbar) is built LAZILY on\n // first showCode, NOT in content() — so a reader who never opens a panel never\n // pulls the CodeMirror chunk. Until then, values live in `pendingValues` (the same\n // cache used pre-hydration) and the preview runs from them. See\n // self-contained-examples-plan.md slice 3.\n private editorsBuilt = false\n\n static insertExamples(\n element: HTMLElement,\n context: ExampleContext = {},\n sourceFile?: string\n ): void {\n insertExamples(\n element,\n context,\n liveExample,\n LiveExample.tagName as string,\n sourceFile\n )\n }\n\n get activeTab(): Element | undefined {\n if (!this.editorsBuilt) return undefined\n const { editors } = this.parts\n return [...editors.children].find(\n (elt) => elt.getAttribute('hidden') === null\n )\n }\n\n // Hydration state is the base class's `this.hydrated`, as of tosijs 1.6.9. This file\n // used to hand-roll it as `try { return this.parts.js !== undefined } catch { false }`\n // — the one probe you must never write, since reading `parts` before hydration bound\n // the proxy to the light-DOM element permanently (it survived only by accident of\n // being light-DOM, where the root never flips). 1.6.9 invalidates the proxy at hydrate\n // and exposes `hydrated`/`whenHydrated`, so the hand-roll is gone. (tosijs#13.)\n\n private getEditorValue(which: string): string {\n // Until the editors are built (a reader who never opens a panel, or pre-\n // hydration) the string cache is the source of truth.\n if (!this.editorsBuilt) return this.pendingValues[which] ?? ''\n return (this.parts[which] as CodeEditor).value\n }\n\n private setEditorValue(which: string, code: string): void {\n if (!this.editorsBuilt) {\n this.pendingValues[which] = code\n return\n }\n const codeEditor = this.parts[which] as CodeEditor\n codeEditor.value = code\n }\n\n private flushPendingValues(): void {\n for (const [which, code] of Object.entries(this.pendingValues)) {\n const codeEditor = this.parts[which] as CodeEditor\n if (codeEditor) codeEditor.value = code\n }\n this.pendingValues = {}\n\n if (this.pendingShowDefaultTab) {\n this.pendingShowDefaultTab = false\n this.showDefaultTab()\n }\n }\n\n get css(): string {\n return this.getEditorValue('css')\n }\n set css(code: string) {\n this.setEditorValue('css', code)\n }\n\n get html(): string {\n return this.getEditorValue('html')\n }\n set html(code: string) {\n this.setEditorValue('html', code)\n }\n\n get js(): string {\n return this.getEditorValue('js')\n }\n set js(code: string) {\n this.setEditorValue('js', code)\n }\n\n get test(): string {\n return this.getEditorValue('test')\n }\n set test(code: string) {\n this.setEditorValue('test', code)\n }\n\n get remoteKey(): string {\n return createRemoteKey(this.prefix, this.uuid, this.remoteId)\n }\n\n // The source block's dialect (js | tjs | ts). Set by insert-examples from the\n // fenced-block language; persisted as an attribute so it survives a re-render.\n // `js` is the default and keeps the original pass-through behavior.\n get dialect(): Dialect {\n return (this.getAttribute('data-dialect') as Dialect) || 'js'\n }\n set dialect(value: Dialect) {\n this.setAttribute('data-dialect', value)\n }\n\n // Build-time transpiled JS for the source block, set by insert-examples from the\n // page's baked `<script type=\"application/tosi-transpiled\">` (see\n // self-contained-examples-plan.md). When present AND tests are off (the deployed\n // reader), refresh() runs it directly and never loads the tjs transpiler. When\n // tests are on (localhost / the doc-test harness) it's ignored and refresh() takes\n // the original full-transform path — so the harness can't be regressed. Runtime\n // data only (not reflected to an attribute); absent on client-rendered SPA nav,\n // where refresh() falls back to transpiling on demand.\n compiledJs?: string\n // The source `compiledJs` was transpiled FROM. refresh() runs the bake only while it\n // still matches `this.js`, so the moment the user edits a tjs example the (now stale)\n // original bake is dropped and the edit transpiles on demand. Re-paired to the edited\n // source when a saved local edit carries its own bake (slice 4).\n compiledJsSource?: string\n\n // ── Read-only product tabs (tjs/ts only) ──────────────────────────────────\n // A `tjs`/`ts` example's source is editable; the JavaScript it compiles to is\n // shown read-only in an extra \"JS\" tab. The tab is added lazily (examples show\n // every named editor as a tab, so a static child would pollute plain-`js`\n // examples) the first time the code panel opens. `js` examples get nothing.\n private jsOutEditor?: CodeEditor\n private tjsTestsView?: HTMLElement\n private productTabsReady = false\n private lastGeneratedJs = ''\n private inlineTjsTestCount = 0\n private lastTjsTests?: TjsTestResult\n\n // Run the example's inline tjs tests (the `/*test 'desc' { … }*/` comments in\n // the tjs/ts source — distinct from the DOM-testing `test` block). Extract +\n // strip the tests, transpile the rest the same way execution does, then run\n // `execJs + testUtils + return testRunner` with the example context injected.\n private async runInlineTjsTests(transform: TransformFn): Promise<void> {\n if (this.dialect === 'js') {\n this.inlineTjsTestCount = 0\n return\n }\n const api = await loadTjsTestApi()\n if (!api) {\n this.inlineTjsTestCount = 0\n return\n }\n let extracted\n try {\n extracted = api.extractTests(this.js)\n } catch {\n this.inlineTjsTestCount = 0\n return\n }\n this.inlineTjsTestCount = extracted.tests.length\n if (extracted.tests.length === 0) {\n this.lastTjsTests = undefined\n this.renderTjsTests()\n return\n }\n try {\n const execJs = (\n await transform(\n rewriteImports(extracted.code, Object.keys(this.context))\n )\n ).code\n const body = `${execJs}\\n${api.testUtils}\\nreturn ${extracted.testRunner}`\n // The test-stripped source still runs its top-level statements (to define\n // the functions under test), which may touch `preview` — give them a\n // throwaway one, mirroring execution's `{ preview, ...context }` scope.\n const fullContext = {\n preview: div({ class: 'preview' }),\n ...this.context,\n }\n const keys = Object.keys(fullContext).map(contextVarName)\n const values = Object.values(fullContext)\n // @ts-expect-error AsyncFunction constructor typing\n const fn = new AsyncFunction(...keys, body)\n this.lastTjsTests = (await fn(...values)) as TjsTestResult\n } catch (error) {\n this.lastTjsTests = {\n passed: 0,\n failed: 1,\n results: [\n {\n description: 'inline tests failed to run',\n passed: false,\n error: String(error),\n },\n ],\n }\n }\n this.renderTjsTests()\n }\n\n private renderTjsTests(): void {\n const view = this.tjsTestsView\n if (!view) return\n const results = this.lastTjsTests\n if (!results || results.results.length === 0) {\n view.replaceChildren(\n div({ class: 'tjs-test-empty' }, 'No inline tjs tests.')\n )\n return\n }\n view.replaceChildren(\n div(\n { class: 'tjs-test-summary' },\n `${results.passed}/${results.results.length} passed`\n ),\n ...results.results.map((r) =>\n div(\n { class: r.passed ? 'test-pass' : 'test-fail' },\n `${r.passed ? '✓' : '✗'} ${r.description}`,\n r.error ? span({ class: 'tjs-test-error' }, ` — ${r.error}`) : ''\n )\n )\n )\n }\n\n // The JavaScript `this.js` compiles to under the current dialect — the same\n // pipeline execution runs (rewriteImports → dialect transform), so the tab\n // shows what actually executes. Transpile errors render as a comment.\n private async computeGeneratedJs(transform: TransformFn): Promise<string> {\n if (this.dialect === 'js') return ''\n try {\n return (\n await transform(rewriteImports(this.js, Object.keys(this.context)))\n ).code\n } catch (error) {\n return `// transpile error:\\n// ${(error as Error).message}`\n }\n }\n\n private ensureProductTabs(): void {\n if (\n this.productTabsReady ||\n this.dialect === 'js' ||\n !this.hydrated ||\n !this.editorsBuilt // the editors it relabels don't exist yet\n )\n return\n this.productTabsReady = true\n const { editors } = this.parts\n // Relabel the source tab from \"js\" to the actual dialect (the `part` stays\n // `js`, so everything referencing this.parts.js / this.js is unaffected), and\n // put the source editor in the dialect's mode — so a `tjs` example gets\n // first-class tjs editing (highlighting + autocomplete), `ts` gets TypeScript.\n this.parts.js.setAttribute('name', this.dialect)\n // Runtime-value autocomplete: give the tjs completion source the example's live\n // bindings (context modules + the rendered preview) so it can suggest their REAL\n // members — including tosijs proxy members that static analysis can't see. Set\n // before `.mode` so the tjs extension loads with the config in one shot.\n this.parts.js.tjsAutocomplete = {\n getLiveBindings: () => this.liveBindings(),\n }\n this.parts.js.mode = this.dialect\n this.jsOutEditor = codeEditor({\n name: 'JS',\n mode: 'javascript',\n disabled: true,\n }) as unknown as CodeEditor\n editors.append(this.jsOutEditor)\n // Add a read-only \"tjs tests\" results tab only when the source has inline\n // `/*test*/` tests (computed during refresh, which runs before first open).\n if (this.inlineTjsTestCount > 0) {\n this.tjsTestsView = div({ name: 'tjs tests', class: 'tjs-test-results' })\n editors.append(this.tjsTestsView)\n }\n editors.setupTabs()\n this.jsOutEditor.value = this.lastGeneratedJs\n this.renderTjsTests()\n }\n\n // Capture the latest run's top-level locals (arrow property so `this` is bound\n // when passed as execution's `onScope`).\n private captureScope = (scope: Record<string, unknown>): void => {\n this.capturedScope = scope\n }\n\n /**\n * Live bindings for tjs runtime-value autocomplete: the example's context modules\n * (keyed by the identifier the rewritten code uses, e.g. `tosijs`, `tosijsui`),\n * the currently-rendered `preview` element, and the latest run's top-level locals\n * (so `const app = tosi(…)` gives real `app.` / `app.items.` completions, proxy\n * members and all). Read lazily on each completion, so it reflects the latest run.\n */\n private liveBindings(): Record<string, unknown> {\n const bindings: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(this.context)) {\n bindings[contextVarName(key)] = value\n }\n const preview = this.parts.example?.querySelector('.preview')\n if (preview) bindings.preview = preview\n // Run locals last so they win over same-named context entries.\n Object.assign(bindings, this.capturedScope)\n return bindings\n }\n\n updateUndo = () => {\n // The undo/redo buttons live in the lazy editor panel; only touch them once it's\n // built. The edited-indicator and test-results visibility work without editors\n // (they read the cached values / test state), so they always run.\n if (this.editorsBuilt) {\n const { activeTab } = this\n const { undo, redo } = this.parts\n if (activeTab instanceof CodeEditor) {\n undo.disabled = !activeTab.canUndo()\n redo.disabled = !activeTab.canRedo()\n } else {\n undo.disabled = true\n redo.disabled = true\n }\n }\n this.updateEditedIndicator()\n this.updateTestResultsVisibility()\n }\n\n private updateTestResultsVisibility(): void {\n const { testResults: resultsEl } = this.parts\n const results = this.testResults\n // The \"DOM tests\" tab's editor is this.parts.test (the part stays `test`\n // even though the tab label changed). No tab is active until the panel exists.\n const isTestTabActive =\n this.editorsBuilt && this.activeTab === this.parts.test\n const hasFailed = results && results.failed > 0\n\n // Show results if: has results AND (test tab is active OR there are failures)\n resultsEl.hidden =\n !results || results.tests.length === 0 || (!isTestTabActive && !hasFailed)\n }\n\n undo = () => {\n const { activeTab } = this\n if (activeTab instanceof CodeEditor) {\n activeTab.undo()\n }\n }\n\n redo = () => {\n const { activeTab } = this\n if (activeTab instanceof CodeEditor) {\n activeTab.redo()\n }\n }\n\n get isMaximized(): boolean {\n return this.classList.contains('-maximize')\n }\n\n flipLayout = () => {\n this.classList.toggle('-vertical')\n }\n\n // Persist this example's edits back to the source file's fenced blocks, located\n // by the source↔doc map (data-source-file + data-example-ordinal). Dev only —\n // writes via the /__docstore/source endpoint; the watcher then rebuilds.\n saveToSource = async (): Promise<void> => {\n const sourceFile = this.getAttribute('data-source-file')\n const ordinalAttr = this.getAttribute('data-example-ordinal')\n if (!sourceFile || ordinalAttr === null) {\n window.alert('No source mapping for this example.')\n return\n }\n let content: string\n try {\n const response = await fetch(\n `/__docstore/source?file=${encodeURIComponent(sourceFile)}`\n )\n if (!response.ok) throw new Error(String(response.status))\n content = await response.text()\n } catch {\n window.alert(\n 'Source endpoint unavailable — saving to source works in dev only.'\n )\n return\n }\n const updated = rewriteExampleBlocks(content, Number(ordinalAttr), {\n js: this.js,\n html: this.html,\n css: this.css,\n test: this.test,\n })\n if (updated === null) {\n // Distinguish the two failure modes so a source↔doc mismatch is diagnosable\n // (vs. a genuine no-op). An ordinal past the source's group count means the\n // page and the file disagree on how many example groups exist — commonly a\n // file with more than one doc comment, or fenced blocks the doc extractor\n // treats differently from a raw scan (e.g. indented inside the comment).\n const ordinal = Number(ordinalAttr)\n const groups = groupExamples(content, findFencedBlocks(content))\n if (ordinal >= groups.length) {\n window.alert(\n `Couldn't locate this example in ${sourceFile}: it's example ` +\n `#${\n ordinal + 1\n } on the page, but a raw scan of the file finds only ` +\n `${groups.length} fenced example group(s). The page↔source ordinals ` +\n `disagree — likely multiple docs in one file, or indented fences. ` +\n `(File a report with the source structure.)`\n )\n } else {\n window.alert('No changes to save.')\n }\n return\n }\n try {\n const response = await fetch('/__docstore/source', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ file: sourceFile, content: updated }),\n })\n if (!response.ok) throw new Error(String(response.status))\n window.alert(`Saved to ${sourceFile}`)\n } catch {\n window.alert('Save failed.')\n }\n }\n\n exampleMenu = () => {\n const testsOn = testManager.enabled.value\n popMenu({\n target: this.parts.exampleWidgets,\n width: 'auto',\n menuItems: [\n {\n icon: 'edit2',\n caption: 'view/edit code',\n action: this.showCode,\n },\n {\n icon: 'edit',\n caption: 'view/edit code in a new window',\n action: this.openEditorWindow,\n },\n null,\n {\n icon: this.isMaximized ? 'minimize' : 'maximize',\n caption: this.isMaximized ? 'restore preview' : 'maximize preview',\n action: this.toggleMaximize,\n },\n null,\n {\n icon: testsOn ? 'check' : '',\n caption: 'Run tests',\n action: () => {\n if (testsOn) {\n disableTests()\n } else {\n enableTests()\n }\n },\n },\n ],\n })\n }\n\n handleShortcuts = (event: KeyboardEvent) => {\n if (event.metaKey || event.ctrlKey) {\n let block = false\n switch (event.key) {\n case 's':\n case 'r':\n this.doRefresh()\n block = true\n break\n case '/':\n this.flipLayout()\n break\n case 'c':\n if (event.shiftKey) {\n this.copy()\n block = true\n }\n break\n }\n if (block) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n }\n\n content = () => [\n div(\n { part: 'example' },\n style({ part: 'style' }),\n div({ part: 'testIndicator', title: 'test status' }),\n pre({ part: 'testResults', hidden: true }),\n button(\n {\n title: 'example menu',\n part: 'exampleWidgets',\n onClick: this.exampleMenu,\n },\n icons.code()\n )\n ),\n // Empty until first showCode. buildEditorPanel() fills it lazily so a reader\n // who never opens a panel never constructs a <tosi-code> (and never pulls the\n // CodeMirror chunk). See ensureEditors().\n div({\n class: 'code-editors',\n part: 'codeEditors',\n onKeydown: this.handleShortcuts,\n hidden: true,\n }),\n tosiSlot({ part: 'sources', hidden: true }),\n ]\n\n // The editor panel (4 <tosi-code> editors + toolbar). Built on demand by\n // ensureEditors(), NOT in content() — constructing a <tosi-code> is what imports\n // the CodeMirror chunk, so keeping it out of the reader's mount path is the whole\n // point of slice 3. The `part` names match what content() used, so every\n // this.parts.{js,html,css,test,editors,undo,redo} reference resolves once built.\n private buildEditorPanel(): HTMLElement {\n return tosiTabs(\n {\n part: 'editors',\n onChange: this.updateUndo,\n },\n codeEditor({ name: 'js', mode: 'javascript', part: 'js' }),\n codeEditor({ name: 'html', mode: 'html', part: 'html' }),\n codeEditor({ name: 'css', mode: 'css', part: 'css' }),\n // The `test` block tests the rendered preview (DOM), so its tab is\n // labeled \"DOM tests\" to distinguish it from inline tjs unit tests. The\n // `part`/`name` stay `test`; only the displayed label differs.\n codeEditor({ name: 'DOM tests', mode: 'javascript', part: 'test' }),\n div(\n { slot: 'after-tabs', class: 'row' },\n button(\n {\n title: 'undo',\n part: 'undo',\n class: 'transparent',\n onClick: this.undo,\n },\n icons.cornerUpLeft()\n ),\n button(\n {\n title: 'redo',\n part: 'redo',\n class: 'transparent',\n onClick: this.redo,\n },\n icons.cornerUpRight()\n ),\n button(\n {\n title: 'example menu — refresh, flip, undo, copy, save/revert edits',\n class: 'transparent source-menu',\n onClick: this.sourceMenu,\n },\n icons.moreVertical()\n ),\n button(\n {\n title: 'close code',\n class: 'transparent',\n onClick: this.closeCode,\n },\n icons.x()\n )\n )\n )\n }\n\n // Build the editor panel the first time a code panel is opened, flush the cached\n // values into the now-real editors, and wire the tjs/ts read-only JS tab. Idempotent.\n private ensureEditors(): void {\n if (this.editorsBuilt || !this.hydrated) return\n this.parts.codeEditors.append(this.buildEditorPanel())\n this.editorsBuilt = true\n // pendingValues → the real editors, then pick the default tab and product tabs.\n this.flushPendingValues()\n this.ensureProductTabs()\n this.showDefaultTab()\n this.updateUndo()\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n // super.connectedCallback() ran hydrate(), so `this.hydrated` is now true and\n // `parts` is safe to touch. The editor panel is NOT built here — values stay in\n // `pendingValues` and are flushed into the editors when ensureEditors() builds\n // them (first showCode). The preview runs from `pendingValues` meanwhile.\n\n const { sources } = this.parts\n this.initFromElements([...sources.children] as HTMLElement[])\n\n // Set up remote sync\n this.remoteSync = new RemoteSyncManager(\n this.storageKey,\n this.remoteKey,\n (payload) => {\n if (payload.close) {\n if (this.remoteId !== '') {\n // Remote editor window — close the popup\n window.close()\n } else {\n // Original window — restore from maximized state\n this.classList.remove('-maximize')\n this.parts.codeEditors.hidden = true\n }\n return\n }\n this.css = payload.css\n this.html = payload.html\n this.js = payload.js\n if (payload.test) this.test = payload.test\n // Adopt the main window's pristine snapshot (once) so this pop-out can\n // compute \"has edits\", diff View changes, and enable the Save actions.\n if (this.remoteId !== '' && payload.original && !this.originalCode) {\n this.originalCode = { ...payload.original }\n }\n this.refresh()\n }\n )\n this.remoteSync.startListening()\n\n // Stochastic undo-state polling — jittered base interval avoids\n // synchronizing when many examples are on the same page.\n const jitter = Math.random() * 100\n this.undoInterval = setInterval(() => {\n if (!document.hidden) this.updateUndo()\n }, 250 + jitter)\n\n // Send close signal when the tab/window closes — disconnectedCallback\n // does not fire reliably during page unload.\n this.beforeUnloadHandler = () => this.remoteSync?.sendClose()\n addEventListener('beforeunload', this.beforeUnloadHandler)\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n\n this.remoteSync?.sendClose()\n this.remoteSync?.stopListening()\n\n if (this.undoInterval) {\n clearInterval(this.undoInterval)\n this.undoInterval = undefined\n }\n\n if (this.beforeUnloadHandler) {\n removeEventListener('beforeunload', this.beforeUnloadHandler)\n this.beforeUnloadHandler = undefined\n }\n }\n\n private exampleMarkdown(): string {\n const block = (lang: string, code: string) =>\n code !== '' ? '```' + lang + '\\n' + code.trim() + '\\n```\\n' : ''\n return (\n block(this.dialect, this.js) +\n block('html', this.html) +\n block('css', this.css) +\n block('test', this.test)\n )\n }\n\n copy = () => {\n navigator.clipboard.writeText(this.exampleMarkdown())\n }\n\n downloadExample = () => {\n const src = this.getAttribute('data-source-file') || 'example'\n const ord = this.getAttribute('data-example-ordinal')\n const name =\n (src.split('/').pop() || 'example').replace(/\\.\\w+$/, '') +\n (ord !== null ? `-example-${ord}` : '') +\n '.md'\n const url = URL.createObjectURL(\n new Blob([this.exampleMarkdown()], { type: 'text/markdown' })\n )\n const link = document.createElement('a')\n link.href = url\n link.download = name\n link.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n }\n\n // ── Local edit scratchpad (per-browser; keyed by the source↔doc map) ───────\n // The original source blocks, snapshotted at mount so \"revert\" can restore\n // them after a locally-saved edit.\n private originalCode: ExampleEdit | null = null\n\n private localEditKey(): string {\n const src = this.getAttribute('data-source-file')\n const ord = this.getAttribute('data-example-ordinal')\n return src && ord !== null ? exampleEditKey(src, ord) : ''\n }\n\n private applyEdit(edit: ExampleEdit): void {\n if (edit.js !== undefined) this.js = edit.js\n if (edit.html !== undefined) this.html = edit.html\n if (edit.css !== undefined) this.css = edit.css\n if (edit.test !== undefined) this.test = edit.test\n // If the saved edit carried its own bake, re-pair it to the edited source so a\n // reader reload runs the edit without the transpiler. Otherwise leave compiledJs\n // as-is; the source→bake mismatch makes refresh() transpile on demand (correct).\n if (edit.compiledJs !== undefined && edit.js !== undefined) {\n this.compiledJs = edit.compiledJs\n this.compiledJsSource = edit.js\n }\n }\n\n // \"Has edits\" = current code differs from the snapshotted original (trailing\n // whitespace ignored, since editors normalize it). Drives Save/Revert enabled\n // state and the local-edit indicator.\n hasLocalEdits(): boolean {\n if (!this.originalCode) return false\n const o = this.originalCode\n const t = (s?: string) => (s ?? '').replace(/\\s+$/, '')\n return (\n t(this.js) !== t(o.js) ||\n t(this.html) !== t(o.html) ||\n t(this.css) !== t(o.css) ||\n t(this.test) !== t(o.test)\n )\n }\n\n private updateEditedIndicator(): void {\n this.classList.toggle('-locally-edited', this.hasLocalEdits())\n }\n\n private canUndo(): boolean {\n const t = this.activeTab\n return t instanceof CodeEditor && t.canUndo()\n }\n\n private canRedo(): boolean {\n const t = this.activeTab\n return t instanceof CodeEditor && t.canRedo()\n }\n\n saveLocalEdit = () => {\n const key = this.localEditKey()\n if (!key) {\n window.alert('This example has no source mapping to key a local save.')\n return\n }\n saveExampleEdit(key, {\n js: this.js,\n html: this.html,\n css: this.css,\n test: this.test,\n // Keep the transpiled code alongside the source so a restored edit runs without\n // reloading the transpiler. refresh() keeps compiledJs paired with the current\n // source, so persist it only when it still matches (never a stale value). `js`\n // needs no transpiler.\n compiledJs:\n this.dialect !== 'js' && this.compiledJsSource === this.js\n ? this.compiledJs\n : undefined,\n })\n this.updateEditedIndicator()\n // A local save is a per-browser scratchpad, not a file write — say so, or it\n // reads as a no-op (\"I saved but the file didn't change\"). \"Save to source\"\n // (localhost + editableSources) is the one that writes the file.\n postNotification({\n type: 'success',\n message:\n 'Saved to this browser only — use “Save to source” to write the file.',\n })\n }\n\n revertLocalEdit = () => {\n const key = this.localEditKey()\n if (key) clearExampleEdit(key)\n if (this.originalCode) this.applyEdit(this.originalCode)\n // Reverting leaves nothing to diff — drop out of the diff view if we're in it.\n if (this.viewingChanges) this.viewChanges()\n this.updateEditedIndicator()\n this.refresh()\n }\n\n // Called once by insert-examples after the source blocks + map attrs are set:\n // snapshot the original, then restore any saved local edit on top.\n snapshotAndRestoreLocalEdit = () => {\n // this.js/html/css/test are guarded (return '' before hydration). Do NOT\n // touch this.parts.* directly here — that throws \"elementRef does not exist\"\n // when the example isn't hydrated yet, which breaks the whole doc render.\n // Editor diff baselines are applied later, in viewChanges().\n this.originalCode = {\n js: this.js,\n html: this.html,\n css: this.css,\n test: this.test,\n }\n const key = this.localEditKey()\n if (!key || !hasExampleEdit(key)) return\n const edit = loadExampleEdit(key)\n if (edit) {\n this.applyEdit(edit)\n this.updateEditedIndicator()\n this.refresh()\n }\n }\n\n // Toggle a per-tab diff (current vs original source) across the example's\n // editors. Each editor diffs its own single text — no need to combine the\n // html/css/js/test split — so switching tabs shows that tab's changes.\n viewingChanges = false\n viewChanges = () => {\n if (!this.hydrated) return\n this.ensureEditors() // diffing reaches into this.parts[tab] — build them first\n this.viewingChanges = !this.viewingChanges\n if (this.viewingChanges) this.showCode()\n const originals = this.originalCode ?? {}\n for (const tab of ['js', 'html', 'css', 'test'] as const) {\n // Set the diff baseline (the source) right before showing the diff, now\n // that the editors are hydrated.\n this.parts[tab].original = originals[tab] ?? ''\n this.parts[tab].showDiff(this.viewingChanges)\n }\n }\n\n // The example's overflow menu. Stable item set — actions stay put and toggle\n // enabled (Save/Revert key off whether there are edits); items are only hidden\n // when they could NEVER apply here (local save needs a source-map key; save to\n // source additionally needs the dev server). Shortcuts are display-only; the\n // keys are routed by handleShortcuts / the editor, not the menu.\n // Refresh means different things in the two modes: the page-embedded example\n // re-runs itself; the pop-out editor window (refresh() is a no-op there) pushes\n // its code to the main window so IT re-runs.\n doRefresh = () => {\n if (this.remoteId !== '') {\n this.refreshRemote()\n } else {\n void this.refresh()\n }\n }\n\n sourceMenu = (event: Event) => {\n const key = this.localEditKey()\n const hasEdits = () => this.hasLocalEdits()\n // View changes / Revert need the source snapshot, which only the page-embedded\n // example has — the pop-out editor window has no originalCode to compare to.\n const hasSnapshot = this.originalCode != null\n popMenu({\n target: (event.target as HTMLElement).closest('button') as HTMLElement,\n width: 'auto',\n menuItems: [\n {\n icon: 'refreshCw',\n caption: 'Refresh',\n shortcut: '⌘R',\n action: this.doRefresh,\n },\n {\n icon: 'columns',\n caption: 'Flip layout',\n shortcut: '⌘/',\n action: this.flipLayout,\n },\n {\n icon: 'cornerUpLeft',\n caption: 'Undo',\n shortcut: '⌘Z',\n action: this.undo,\n enabled: () => this.canUndo(),\n },\n {\n icon: 'cornerUpRight',\n caption: 'Redo',\n shortcut: '⌘⇧Z',\n action: this.redo,\n enabled: () => this.canRedo(),\n },\n null,\n {\n icon: 'copy',\n caption: 'Copy as markdown',\n shortcut: '⌘⇧C',\n action: this.copy,\n },\n { icon: 'download', caption: 'Download', action: this.downloadExample },\n null,\n ...(hasSnapshot\n ? [\n this.viewingChanges\n ? {\n icon: 'edit',\n caption: 'Back to editing',\n action: this.viewChanges,\n }\n : {\n icon: 'code',\n caption: 'View changes',\n action: this.viewChanges,\n enabled: hasEdits,\n },\n ]\n : []),\n ...(key\n ? [\n {\n icon: 'save',\n caption: 'Save changes (local)',\n action: this.saveLocalEdit,\n enabled: hasEdits,\n },\n ]\n : []),\n ...(key && isLocalhost\n ? [\n {\n icon: 'upload',\n caption: 'Save to source',\n action: () => {\n void this.saveToSource()\n },\n enabled: hasEdits,\n },\n ]\n : []),\n ...(hasSnapshot\n ? [\n {\n icon: 'rotateCcw',\n caption: 'Revert to original',\n action: this.revertLocalEdit,\n enabled: hasEdits,\n },\n ]\n : []),\n ],\n })\n }\n\n toggleMaximize = () => {\n this.classList.toggle('-maximize')\n }\n\n showCode = () => {\n this.ensureEditors() // first open builds the CodeMirror panel (and pulls the chunk)\n this.classList.add('-maximize')\n this.classList.toggle('-vertical', this.offsetHeight > this.offsetWidth)\n this.parts.codeEditors.hidden = false\n this.ensureProductTabs()\n }\n\n closeCode = () => {\n if (this.remoteId !== '') {\n // Remote editor window — send close signal to original, then close popup\n this.remoteSync?.sendClose()\n window.close()\n } else {\n // Original window — restore and close any remote editor\n this.remoteSync?.sendClose()\n this.classList.remove('-maximize')\n this.parts.codeEditors.hidden = true\n }\n }\n\n openEditorWindow = () => {\n const { css, html, js, test } = this\n openEditorWindow(\n this.prefix,\n this.uuid,\n this.storageKey,\n this.remoteKey,\n { css, html, js, test },\n {\n // Give the pop-out the same source↔doc key + pristine snapshot the main\n // window has, so it offers the full menu (Save local / Save to source /\n // View changes) instead of a reduced one.\n sourceFile: this.getAttribute('data-source-file'),\n ordinal: this.getAttribute('data-example-ordinal'),\n original: this.originalCode ?? undefined,\n }\n )\n // The pop-out window owns editing now — maximize the preview AND close the\n // inline code view here (it stays open otherwise if it was already showing).\n this.classList.add('-maximize')\n this.parts.codeEditors.hidden = true\n }\n\n refreshRemote = () => {\n this.remoteSync?.send({\n css: this.css,\n html: this.html,\n js: this.js,\n test: this.test,\n })\n }\n\n updateSources = () => {\n if (this.persistToDom) {\n const { sources } = this.parts\n sources.innerText = ''\n for (const language of ['js', 'css', 'html', 'test']) {\n if (this[language as 'js' | 'css' | 'html' | 'test']) {\n sources.append(\n pre({\n class: `language-${language}`,\n innerHTML: this[language as 'js' | 'css' | 'html' | 'test'],\n })\n )\n }\n }\n }\n }\n\n refresh = async () => {\n if (this.remoteId !== '') return\n\n // Reader fast path: with the build-time bake AND tests off (the deployed\n // reader — tests default off outside localhost), run the example WITHOUT\n // loading the tjs transpiler. When tests are on (localhost / the doc-test\n // harness) `bake` is undefined and this is the original full-transform path,\n // so the harness is untouched. The bake is byte-identical to what the\n // transform would produce (it IS `transform(rewriteImports(js))`).\n // ...and only while the bake still matches the current source — an edit drops the\n // stale original bake and transpiles the edit on demand (slice 4).\n const bake =\n this.dialect !== 'js' &&\n !testManager.enabled.value &&\n this.compiledJs !== undefined &&\n this.compiledJsSource === this.js\n ? this.compiledJs\n : undefined\n const transform = bake === undefined ? await loadTransform(this.dialect) : undefined\n const { example, style: styleEl, exampleWidgets } = this.parts\n\n // Keep the read-only generated-JS tab (tjs/ts) in sync with the source, and\n // re-run any inline tjs tests for the \"tjs tests\" results tab. With the bake we\n // already have the generated JS and skip the transpiler-bound inline-test run.\n if (this.dialect !== 'js') {\n this.lastGeneratedJs = bake ?? (await this.computeGeneratedJs(transform!))\n if (this.jsOutEditor) this.jsOutEditor.value = this.lastGeneratedJs\n if (bake === undefined) {\n // Freshly transpiled (edited source, or a dialect the build didn't bake):\n // cache it AS the bake, paired with the source it came from. So saveLocalEdit\n // can persist it and later refreshes of the same source skip re-transpiling —\n // the transpiler is already loaded at this point, so this costs nothing.\n this.compiledJs = this.lastGeneratedJs\n this.compiledJsSource = this.js\n await this.runInlineTjsTests(transform!)\n }\n }\n\n let preview: HTMLElement | null\n let executionError: Error | undefined\n\n const onError = (error: Error) => {\n executionError = error\n }\n\n // Scope capture feeds tjs autocomplete (getLiveBindings), which is only consulted\n // for tjs/ts examples once a code panel is open. Gating it here keeps the optional\n // tjs-lang/editors bundle (and its AST parse) off the reader path — it loads only\n // when someone actually edits a tjs/ts example. `js` never needs it.\n const onScope =\n this.dialect !== 'js' && this.editorsBuilt ? this.captureScope : undefined\n\n // 'iframe' and (for now) 'ide' both run in an isolated iframe. 'ide' — the fully\n // sandboxed real-published-deps mode — is a recognized flag; its distinct\n // real-module execution is a follow-up (import-resolver-plan.md phase 2), so it\n // currently uses the iframe path.\n const mode = this.effectiveMode\n if (mode === 'iframe' || mode === 'ide') {\n preview = await executeInIframe({\n html: this.html,\n css: this.css,\n js: this.js,\n context: this.context,\n transform,\n compiledJs: bake,\n exampleElement: example,\n widgetsElement: exampleWidgets,\n onError,\n onScope,\n })\n } else {\n preview = await executeInline({\n html: this.html,\n css: this.css,\n js: this.js,\n context: this.context,\n transform,\n compiledJs: bake,\n exampleElement: example,\n styleElement: styleEl,\n widgetsElement: exampleWidgets,\n onError,\n onScope,\n })\n }\n\n if (this.persistToDom) {\n this.updateSources()\n }\n\n // Run tests when there are any — but a build/exec failure is a test failure\n // in its own right, so surface it even when the example defines no `test`\n // blocks (and even if the failure was hard enough to produce no preview).\n if ((this.test || executionError) && testManager.enabled.value) {\n // Let queued renders (rAF) settle before running tests\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n this.classList.add('-has-tests', '-test-running')\n this.classList.remove('-test-passed', '-test-failed')\n // `test` blocks are conventional JS/TS regardless of the example's dialect,\n // so they're transpiled as plain js — never lowered through tjs/ts.\n // This block only runs when tests are enabled, and `bake` only exists when\n // they're off — so `transform` was loaded above and is defined here.\n const testTransform =\n this.dialect === 'js' ? transform! : await loadTransform('js')\n // Only run `test` blocks if the example actually produced a preview to\n // assert against; a failed build has nothing to test but still fails below.\n this.testResults =\n this.test && preview\n ? await runTests(this.test, preview, this.context, testTransform)\n : { passed: 0, failed: 0, tests: [] }\n if (executionError) {\n this.testResults.failed += 1\n this.testResults.tests.unshift({\n name: 'example loads without error',\n passed: false,\n error: String(executionError),\n })\n }\n this.classList.remove('-test-running')\n this.displayTestResults()\n } else {\n this.classList.remove(\n '-has-tests',\n '-test-running',\n '-test-passed',\n '-test-failed'\n )\n }\n }\n\n private displayTestResults(): void {\n const { testResults: resultsEl, testIndicator } = this.parts\n const results = this.testResults\n\n if (!results || results.tests.length === 0) {\n resultsEl.hidden = true\n this.classList.remove('-test-passed', '-test-failed')\n testIndicator.title = 'no tests'\n return\n }\n\n resultsEl.innerHTML = ''\n\n const summary = div(\n { style: { marginBottom: '8px', fontWeight: 'bold' } },\n `${results.passed}/${results.tests.length} tests passed`\n )\n resultsEl.append(summary)\n\n for (const test of results.tests) {\n const icon = test.passed ? '✓' : '✗'\n const cls = test.passed ? 'test-pass' : 'test-fail'\n const testEl = div(\n { class: cls },\n span(icon + ' '),\n test.name,\n test.error\n ? span({ style: { opacity: '0.7' } }, ` - ${test.error}`)\n : ''\n )\n resultsEl.append(testEl)\n }\n\n this.classList.toggle('-test-passed', results.failed === 0)\n this.classList.toggle('-test-failed', results.failed > 0)\n\n // Update indicator title\n testIndicator.title =\n results.failed === 0\n ? `${results.passed} tests passed`\n : `${results.failed}/${results.tests.length} tests failed`\n\n // Update visibility based on tab and failure status\n this.updateTestResultsVisibility()\n\n // Dispatch event for doc-browser to track results\n this.dispatchEvent(\n new CustomEvent('testcomplete', {\n bubbles: true,\n detail: {\n results,\n element: this,\n },\n })\n )\n }\n\n initFromElements(elements: HTMLElement[]) {\n for (const element of elements) {\n element.hidden = true\n const [mode, ...lines] = element.innerHTML.split('\\n') as string[]\n if (['js', 'html', 'css', 'test'].includes(mode)) {\n const minIndex = lines\n .filter((line) => line.trim() !== '')\n .map((line) => (line.match(/^\\s*/) as string[])[0].length)\n .sort()[0]\n const source = (\n minIndex > 0 ? lines.map((line) => line.substring(minIndex)) : lines\n ).join('\\n')\n this.setEditorValue(mode, source)\n } else {\n const language = ['js', 'html', 'css', 'test'].find((lang) =>\n element.matches(`.language-${lang}`)\n )\n if (language) {\n this.setEditorValue(\n language,\n language === 'html' ? element.innerHTML : element.innerText\n )\n }\n }\n }\n }\n\n showDefaultTab() {\n // No tab strip until the panel is built; remember to pick the tab then.\n if (!this.hydrated || !this.editorsBuilt) {\n this.pendingShowDefaultTab = true\n return\n }\n const { editors } = this.parts\n if (this.js !== '') {\n editors.value = 0\n } else if (this.html !== '') {\n editors.value = 1\n } else if (this.css !== '') {\n editors.value = 2\n } else if (this.test !== '') {\n editors.value = 3\n }\n }\n\n render(): void {\n super.render()\n\n if (this.remoteId !== '') {\n const data = localStorage.getItem(this.storageKey)\n if (data !== null) {\n const payload = JSON.parse(data)\n if (this.remoteKey !== payload.remoteKey) return\n\n this.css = payload.css\n this.html = payload.html\n this.js = payload.js\n if (payload.test) this.test = payload.test\n // The pop-out editor window IS the editor — build the panel and flush the\n // values above into it (they went to pendingValues since it wasn't built yet).\n this.ensureEditors()\n this.parts.example.hidden = true\n this.parts.codeEditors.hidden = false\n this.classList.add('-maximize')\n this.updateUndo()\n }\n } else {\n this.refresh()\n }\n }\n}\n\nexport const liveExample =\n LiveExample.elementCreator() as ElementCreator<LiveExample>\n\n// Auto-initialize remote editor window\nconst params = new URL(window.location.href).searchParams\nconst remoteId = params.get('lx')\nif (remoteId) {\n document.title += ' [code editor]'\n document.body.textContent = ''\n const example = liveExample({ remoteId })\n // Carry the source↔doc key through so the pop-out's Save local / Save to source\n // menu items appear and work (the pristine snapshot arrives via the payload).\n const sourceFile = params.get('sf')\n const ordinal = params.get('ord')\n if (sourceFile && ordinal !== null) {\n example.setAttribute('data-source-file', sourceFile)\n example.setAttribute('data-example-ordinal', ordinal)\n }\n document.body.append(example)\n}\n",
|
|
44
|
+
"/*#\n# example\n\n`<tosi-example>` makes it easy to insert interactive code examples in a web page. It\nstarted life as a super lightweight, easier-to-embed implementation of\n[b8rjs's fiddle component](https://b8rjs.com)—which I dearly missed—but now the student\nis, by far, the master. And it's still super lightweight.\n\n*You're probably looking at it right now.*\n\n```js\n// this code executes in an async function body\n// it has tosijs, tosijsui, and preview (the preview div) available as local variables\nimport { div } from 'tosijs'.elements\npreview.append(div({class: 'example'}, 'fiddle de dee!'))\npreview.append('Try editing some code and hitting refresh…')\n```\n```html\n<h2>Example</h2>\n```\n```css\n.preview {\n padding: 0 var(--spacing);\n}\n\n.example {\n animation: throb ease-in-out 1s infinite alternate;\n}\n\n@keyframes throb {\n from { color: blue }\n to { color: red }\n}\n```\n\n## How examples run: one shared page (read this)\n\nBy default every example on a page runs **inline — in the page's own document and\nJavaScript realm**, not in a sandbox. Each example gets its own `preview` element\n(and its `css` is scoped to that preview), but they all share the one `tosijs`\nmodule, so **`tosi()` state singletons are shared across every example on the page**.\n\nThis is a deliberate choice, and it buys two things:\n\n1. It's a live demonstration of how clean tosi's isolation is — many independent\n components mount into one page and coexist without stepping on each other's DOM.\n2. You can drive any demo from the console (or from another example) through the same\n global singleton — the state is right there, not walled off in a frame.\n\nThe trade-off is the gotcha to know about: **examples can see and clobber each\nother's state.** Two examples that both do `tosi({ app: … })` bind to the *same*\n`app` singleton (the tosi registry is keyed by the top-level name), so one overwrites\nthe other — and you get \"impossible\" bugs where an example misbehaves only when some\n*other* example happens to be on the same page. Worth it, but plan for it:\n\n- **Namespace your state.** Give each example a unique top-level key\n (`tosi({ ratingDemo: … })`, not a generic `tosi({ app: … })`).\n- Prefer local variables and `preview`-scoped DOM over shared singletons when a demo\n doesn't need to be globally reachable.\n- In `test` blocks, assert with **counts / deltas**, not presence/absence — other\n examples may have left their elements in the DOM.\n\nFor real isolation of the **DOM and CSS**, add the `iframe` attribute (below). Note\nit does **not** isolate tosijs *state*: the `tosijs`/`tosijs-ui` handed to an iframe\nexample are still the host page's module instances, so `tosi()` singletons stay\nshared. Namespacing is the fix for state; `iframe` is the fix for DOM/CSS bleed.\n\n## Source dialects: `js`, `tjs`, `ts`\n\nThe executable block's fence language picks how the source is compiled before it\nruns, via [tjs-lang](https://www.npmjs.com/package/tjs-lang):\n\n- **`js`** — plain JavaScript, run as-is (tjs's `dialect: 'js'` leaves vanilla JS\n untouched, so there's no surprise rewriting).\n- **`tjs`** — [tjs-lang](https://www.npmjs.com/package/tjs-lang) source, lowered to\n JavaScript. Type annotations and tjs's safety transforms are compiled away.\n- **`ts`** — TypeScript, lowered to tjs (via `tjs-lang/browser/from-ts`) and then to\n JavaScript. The TypeScript compiler loads lazily, only for pages that use it.\n\nA `tjs` block — note the type annotation (which a plain `js` block couldn't run)\nand the inline `test '…' { … }` unit test. Open the code panel: the source tab\nis labeled **tjs**, with read-only **JS** (the compiled output) and **tjs tests**\n(the inline-test results) tabs, alongside the **DOM tests** tab.\n\n```tjs\nimport { div } from 'tosijs'.elements\n\nfunction badge(label: string, n: number) {\n return `${label}: ${n}`\n}\n\ntest 'badge formats label and number' {\n expect(badge('count', 42)).toBe('count: 42')\n}\n\npreview.append(div({ class: 'badge' }, badge('count', 42)))\n```\n```test\ntest('tjs example transpiled and ran', () => {\n const badge = preview.querySelector('.badge')\n expect(badge).not.toBe(null)\n expect(badge.textContent).toBe('count: 42')\n})\n```\n\nThe inline test above is tjs's native `test '…' { … }` syntax. In a *TypeScript*\nexample the equivalent is written inside a comment (so it survives `tsc`) — but\nthat comment form can't appear inside a doc comment like this one, since the\ntest's own closing delimiter would end the doc comment.\n\n## Inline WebAssembly (SIMD)\n\nA `tjs` example can drop a hot loop into **WebAssembly** with a `wasm { … } fallback\n{ … }` block — compiled to bytecode *at transpile time*, embedded as base64, and run\nin your browser. No Emscripten, no `.wasm` file, no build step, no server.\n\nWASM earns its keep with **SIMD**: scalar WASM roughly ties the JS JIT, but a\nbranchless `f32x4` kernel does four values per instruction. Below, a field of a few\nthousand particles is held on a grid by springs and pushed aside by your pointer —\nevery particle's position updated four at a time in WASM SIMD. **Click the button to\ntoggle WASM ↔ JavaScript** and watch the per-step time — the same code, one path\ncompiled to SIMD bytecode:\n\n```tjs\n// One physics step for the whole field, 4 particles per iteration with f32x4 SIMD:\n// a spring pulls each particle to its home cell, and an inverse-square push shoves\n// it away from the pointer. Pure arithmetic — no per-lane branches (tjs's f32x4 has\n// no compare/select yet), which is exactly what SIMD wants. `fallback { }` is the\n// scalar-JS twin.\nfunction step(! px: Float32Array, py: Float32Array, vx: Float32Array, vy: Float32Array, hx: Float32Array, hy: Float32Array, n: 0, tx: 0.0, ty: 0.0) {\n wasm {\n let txv = f32x4_splat(tx)\n let tyv = f32x4_splat(ty)\n let spring = f32x4_splat(0.03)\n let damp = f32x4_splat(0.86)\n let repel = f32x4_splat(1600.0)\n let soft = f32x4_splat(140.0)\n for (let i = 0; i < n; i = i + 4) {\n let off = i * 4\n let x = f32x4_load(px, off)\n let y = f32x4_load(py, off)\n let sx = f32x4_mul(f32x4_sub(f32x4_load(hx, off), x), spring)\n let sy = f32x4_mul(f32x4_sub(f32x4_load(hy, off), y), spring)\n let rx = f32x4_sub(x, txv)\n let ry = f32x4_sub(y, tyv)\n let push = f32x4_div(repel, f32x4_add(f32x4_add(f32x4_mul(rx, rx), f32x4_mul(ry, ry)), soft))\n let nvx = f32x4_mul(f32x4_add(f32x4_load(vx, off), f32x4_add(sx, f32x4_mul(rx, push))), damp)\n let nvy = f32x4_mul(f32x4_add(f32x4_load(vy, off), f32x4_add(sy, f32x4_mul(ry, push))), damp)\n f32x4_store(vx, off, nvx)\n f32x4_store(vy, off, nvy)\n f32x4_store(px, off, f32x4_add(x, nvx))\n f32x4_store(py, off, f32x4_add(y, nvy))\n }\n } fallback {\n for (let i = 0; i < n; i++) {\n const sx = (hx[i] - px[i]) * 0.03, sy = (hy[i] - py[i]) * 0.03\n const rx = px[i] - tx, ry = py[i] - ty\n const push = 1600.0 / (rx * rx + ry * ry + 140.0)\n const nvx = (vx[i] + sx + rx * push) * 0.86, nvy = (vy[i] + sy + ry * push) * 0.86\n vx[i] = nvx; vy[i] = nvy; px[i] += nvx; py[i] += nvy\n }\n }\n}\n\n// 100k particles, not 6k. At 6k each step took ~0.02ms — right at the resolution floor\n// of performance.now(), so the readout was mostly measuring the timer. At this size both\n// paths land in the hundreds of microseconds and the comparison actually means something.\nconst W = 480, H = 300, cols = 400, rows = 250, N = cols * rows\n\n// Allocate the particle arrays INSIDE wasm memory. This is the whole ballgame: if a\n// typed array's buffer isn't the wasm memory, every call copies it in and out again —\n// six 6,000-float arrays per frame — and you end up timing memcpy, not SIMD. (With\n// plain `new Float32Array(N)` this demo measured ~4x SLOWER than its own JS fallback.)\n// `wasmBuffer` is a bump allocator handing out views into the shared wasm memory, so\n// the wrapper passes a byte offset and copies nothing. Fall back gracefully if the\n// wasm block didn't compile, so the JS twin still runs.\nconst f32 = (n) => globalThis.wasmBuffer ? wasmBuffer(Float32Array, n) : new Float32Array(n)\nconst px = f32(N), py = f32(N)\nconst vx = f32(N), vy = f32(N)\nconst hx = f32(N), hy = f32(N)\nfor (let i = 0; i < N; i++) {\n const c = i % cols, r = (i / cols) | 0\n hx[i] = (c + 0.5) * W / cols\n hy[i] = (r + 0.5) * H / rows\n px[i] = hx[i]\n py[i] = hy[i]\n}\n\nconst canvas = document.createElement('canvas')\ncanvas.width = W\ncanvas.height = H\ncanvas.style.cssText = 'width:100%;max-width:480px;border-radius:8px;display:block;background:#0b0e14;touch-action:none;cursor:crosshair'\nconst ctx = canvas.getContext('2d')\n\n// Plot straight into an ImageData buffer (one 32-bit store per particle) instead of\n// 100k fillRect() calls — otherwise the DRAW would dominate and we'd be benchmarking\n// canvas, not the kernel.\nconst img = ctx.createImageData(W, H)\nconst pix = new Uint32Array(img.data.buffer)\nconst BG = 0xff140e0b // #0b0e14, little-endian ABGR\nconst TEAL = 0xffc5d14f // #4fd1c5\nconst AMBER = 0xff55adf6 // #f6ad55\n\nlet tx = W / 2, ty = H / 2, idle = 0, frame = 0\ncanvas.addEventListener('pointermove', (e) => {\n const r = canvas.getBoundingClientRect()\n tx = (e.clientX - r.left) / r.width * W\n ty = (e.clientY - r.top) / r.height * H\n idle = 0\n})\n\n// tjs-lang 0.9.1+ gates every wasm call on `globalThis.__tjs_wasm_enabled`, so this\n// flips the kernel between WASM and its JS twin without touching tjs internals.\n// (Don't reach for `__tjs_wasm_0` — it's private AND index-keyed per transpile, so\n// a second wasm example on the page registers the same name and you'd clobber it.)\nlet useWasm = true\nconst btn = document.createElement('button')\nbtn.style.cssText = 'margin:8px 0;padding:6px 12px;border-radius:6px;cursor:pointer'\nconst readout = document.createElement('p')\nlet acc = 0, frames = 0\nfunction applyMode() {\n globalThis.__tjs_wasm_enabled = useWasm\n acc = 0; frames = 0 // don't average across a mode switch\n btn.textContent = useWasm ? '⚡ WebAssembly SIMD — click for JavaScript' : '🐢 JavaScript — click for WASM SIMD'\n}\nbtn.onclick = () => { useWasm = !useWasm; applyMode() }\n\n// Warm BOTH paths before timing anything. The JS twin never executes until you click\n// over to it, so an un-warmed comparison times cold, un-JITed JavaScript and flatters\n// WASM (it read ~2x too good). A warmed V8 does this kernel in ~0.024 ms/step; the\n// zero-copy SIMD kernel does ~0.015 — a real but modest ~1.6x, which is the honest\n// number this demo should show.\nfunction warmUp() {\n for (const on of [false, true]) {\n globalThis.__tjs_wasm_enabled = on\n for (let i = 0; i < 150; i++) step(px, py, vx, vy, hx, hy, N, W / 2, H / 2)\n }\n // the warm-up perturbed the particles — put them back on the grid\n for (let i = 0; i < N; i++) { px[i] = hx[i]; py[i] = hy[i]; vx[i] = 0; vy[i] = 0 }\n}\nfunction loop() {\n if (!document.body.contains(canvas)) return // example removed → stop\n frame++\n idle++\n if (idle > 45) {\n tx = W / 2 + Math.cos(frame * 0.02) * W * 0.32\n ty = H / 2 + Math.sin(frame * 0.031) * H * 0.32\n }\n const t0 = performance.now()\n step(px, py, vx, vy, hx, hy, N, tx, ty)\n acc += performance.now() - t0\n frames++\n\n pix.fill(BG)\n const dot = useWasm ? TEAL : AMBER\n for (let i = 0; i < N; i++) {\n const x = px[i] | 0, y = py[i] | 0\n if (x >= 0 && x < W && y >= 0 && y < H) pix[y * W + x] = dot\n }\n ctx.putImageData(img, 0, 0)\n\n if (frames >= 20) {\n readout.textContent = N.toLocaleString() + ' particles · ' + (acc / frames).toFixed(3) +\n ' ms/step (' + (useWasm ? 'WASM SIMD' : 'JS') + ') · move the pointer'\n acc = 0\n frames = 0\n }\n requestAnimationFrame(loop)\n}\n\n;(async () => {\n // The wasm bootstrap is async. tjs-lang 0.9.1+ exposes an awaitable ready signal,\n // so we start only once the kernel is instantiated — otherwise the first frames\n // silently run the JS fallback while the button claims \"WebAssembly SIMD\".\n await globalThis.__tjs_wasm_ready?.()\n warmUp()\n applyMode()\n requestAnimationFrame(loop)\n})()\n\npreview.append(canvas, btn, readout)\n```\n\n```test\n// Guard the claim the button makes. A `wasm {}` block that fails to compile falls\n// back to JS *silently*, so without this the demo can advertise \"⚡ WebAssembly SIMD\"\n// while running the JS twin, and every test stays green.\ntest('the wasm kernel actually compiled (no silent fallback to JS)', async () => {\n await globalThis.__tjs_wasm_ready?.()\n expect(typeof globalThis.__tjs_wasm_ready).toBe('function')\n // 0.10.x names each compiled wasm export `__tjs_wasm_<hash>_<n>` on globalThis — the\n // hash makes it collision-free across examples (tjs-lang#11). The kernel calls that\n // global when present and falls back to its JS twin when it's not, so a truthy one\n // means the wasm really compiled. Matched by pattern (the hash is per-transpile), and\n // asserting >0 keeps the guard from ever passing vacuously.\n const compiled = Object.keys(globalThis).filter(\n (k) => /^__tjs_wasm_[a-z0-9]+_\\d+$/.test(k) && globalThis[k]\n )\n expect(compiled.length).toBeGreaterThan(0)\n})\n```\n\n## Execution modes\n\nAn example runs in one of three modes. Signal the mode on a code fence with\n`` ```<lang>:<mode> `` — `` ```js:iframe ``, `` ```css:ide `` — on **any** block in the\ngroup; the first mode in the group wins (contradictory modes across a group are an\nauthoring error: they log to the console and the first is used). Or set the `mode`\nattribute directly.\n\n- **`inline`** (default) — runs in the page, against the **library you're building**\n (your in-page working copy). Real npm imports resolve alongside it (with the\n import-resolver enabled). Shares the page's DOM, CSS, and `tosi()` state.\n- **`iframe`** — same working-copy library, but the preview gets its own document, CSS\n scope, and custom-element registry, so a demo's styles can't leak into (or be leaked\n on by) the rest of the page. It isolates **DOM and CSS, not state** — the injected\n `tosijs`/`tosijs-ui` are the host's own instances, so `tosi()` singletons stay shared;\n namespace your state to keep examples from stomping each other. (The boolean `iframe`\n attribute is a back-compat alias for `mode=\"iframe\"`.)\n- **`ide`** — fully sandboxed: real, **published** dependencies (all imports resolved by\n the import-resolver, not your working copy) in an isolated realm — the standalone-app\n mode, for running arbitrary code rather than demoing the library under development.\n *(Recognized now; its distinct real-module execution is in progress.)*\n\n*Fully-isolated examples (a separate module realm, so even `tosi()` state and\nimported dependencies are sandboxed — the way tjs-lang's playgrounds do it with a\nservice worker intercepting imports) are a possible future option. For **actual\nexamples** the shared-page default is usually the nicer behavior: it shows off tosi's\nisolation and lets you poke demos through the live global state.*\n\n## Test Blocks\n\nAdd \\`\\`\\``test` code blocks to write inline tests that run against the preview:\n\n```html\n<button class=\"demo-btn\">Click me</button>\n```\n```js\npreview.querySelector('.demo-btn').onclick = () => {\n preview.querySelector('.demo-btn').textContent = 'Clicked!'\n}\n```\n```test\ntest('button exists', () => {\n const btn = preview.querySelector('.demo-btn')\n expect(btn).toBeDefined()\n expect(btn.textContent).toBe('Click me')\n})\n\ntest('slow test shows running state', async () => {\n await waitMs(500)\n expect(true).toBe(true)\n})\n```\n\nTests have access to:\n- `preview` - the DOM element containing the rendered HTML\n- `expect(value)` - Jest-like assertions (.toBe, .toEqual, .toBeTruthy, etc.)\n- `test(name, fn)` - define a test case (can be async)\n- `describe(name, fn)` - group tests\n- `waitMs(ms)` - wait for a specified number of milliseconds\n- `waitFor(selector, timeout?)` - wait for an element to appear (default 1s timeout)\n- All context libraries (tosijs, tosijs-ui, etc.)\n\n### Async Tests\n\nTests can be async functions. Use `waitMs` for simple delays and `waitFor` to wait\nfor dynamically created elements:\n\n```html\n<button class=\"async-btn\">Load Data</button>\n<div class=\"result\"></div>\n```\n```js\npreview.querySelector('.async-btn').onclick = () => {\n setTimeout(() => {\n preview.querySelector('.result').innerHTML = '<span class=\"data\">Loaded!</span>'\n }, 100)\n}\n// Auto-click to trigger the async behavior\npreview.querySelector('.async-btn').click()\n```\n```test\ntest('waitFor finds dynamically created element', async () => {\n const data = await waitFor('.data')\n expect(data.textContent).toBe('Loaded!')\n})\n\ntest('waitMs delays execution', async () => {\n const start = Date.now()\n await waitMs(50)\n expect(Date.now() - start).toBeGreaterThan(40)\n})\n```\n\n## `context`\n\nA `<tosi-example>` is given a `context` object which is the set of values available\nin the javascript's execution context. The context always includes `preview`.\n\n```\nimport * as tosijs from 'tosijs'\nimport * as tosijsui from 'tosijs-ui'\n\ncontext = {\n tosijs,\n 'tosijs-ui': tosijsui\n}\n```\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component, ElementCreator, elements, tosi } from 'tosijs'\nimport { codeEditor, CodeEditor } from '../code-editor'\nimport { tosiTabs } from '../tab-selector'\nimport { icons } from '../icons'\nimport { tosiPocketBar } from '../pocket-bar'\nimport { postNotification } from '../notifications'\nimport { popMenu } from '../menu'\n\nimport { Dialect, ExampleContext, ExampleParts, TransformFn } from './types'\nimport {\n loadTransform,\n loadTjsTestApi,\n rewriteImports,\n contextVarName,\n AsyncFunction,\n TjsTestResult,\n} from './code-transform'\nimport {\n STORAGE_KEY,\n createRemoteKey,\n RemoteSyncManager,\n openEditorWindow,\n} from './remote-sync'\nimport { executeInline, executeInIframe } from './execution'\nimport { insertExamples } from './insert-examples'\nimport {\n rewriteExampleBlocks,\n groupExamples,\n findFencedBlocks,\n} from './save-to-source'\nimport {\n exampleEditKey,\n saveExampleEdit,\n loadExampleEdit,\n clearExampleEdit,\n hasExampleEdit,\n ExampleEdit,\n} from './example-store'\nimport { liveExampleStyleSpec } from './styles'\nimport { runTests, TestResults } from './test-harness'\n\nconst { div, tosiSlot, style, button, pre, span, label, input } = elements\n\n// Test mode: controlled by localStorage, defaults to enabled on localhost\nconst TESTS_ENABLED_KEY = 'tosijs-ui-tests-enabled'\n\nconst isLocalhost =\n typeof window !== 'undefined' &&\n (window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1')\n\nfunction getStoredTestsEnabled(): boolean {\n if (typeof localStorage === 'undefined') return false\n const stored = localStorage.getItem(TESTS_ENABLED_KEY)\n if (stored !== null) {\n return stored === 'true'\n }\n // Default: enabled on localhost, disabled elsewhere\n return isLocalhost\n}\n\n// Test manager - observable state for test mode\nexport const { testManager } = tosi({\n testManager: {\n enabled: getStoredTestsEnabled(),\n },\n})\n\n// Set CSS variable on body for test visibility (CSS vars pierce shadow DOM)\nfunction updateTestsEnabledClass() {\n document.body.classList.toggle('tests-enabled', testManager.enabled.value)\n document.body.style.setProperty(\n '--tests-enabled',\n testManager.enabled.value ? '1' : '0'\n )\n}\nif (typeof document !== 'undefined') {\n // Set initial state when DOM is ready\n if (document.body) {\n updateTestsEnabledClass()\n } else {\n document.addEventListener('DOMContentLoaded', updateTestsEnabledClass)\n }\n}\n\n/** Enable test mode (runs tests and shows indicators) */\nexport function enableTests(): void {\n localStorage.setItem(TESTS_ENABLED_KEY, 'true')\n testManager.enabled.value = true\n updateTestsEnabledClass()\n // Re-run tests on all existing examples\n document.querySelectorAll('tosi-example').forEach((el) => {\n ;(el as LiveExample).refresh()\n })\n}\n\n/** Disable test mode */\nexport function disableTests(): void {\n localStorage.setItem(TESTS_ENABLED_KEY, 'false')\n testManager.enabled.value = false\n updateTestsEnabledClass()\n}\n\nexport class LiveExample extends Component<ExampleParts> {\n static preferredTagName = 'tosi-example'\n static lightStyleSpec = liveExampleStyleSpec\n\n static initAttributes = {\n persistToDom: false,\n iframe: false,\n // Execution mode: 'inline' (default — runs in the page against your working\n // library), 'iframe' (DOM/CSS isolation, still your working library), or 'ide'\n // (fully sandboxed, real published deps — the standalone-app mode). Set from a\n // `<lang>:<mode>` fence by insert-examples; `iframe` boolean is a back-compat alias.\n mode: '',\n }\n\n /** Resolved execution mode — `mode` attribute wins; `iframe` boolean is the alias. */\n get effectiveMode(): 'inline' | 'iframe' | 'ide' {\n const m = this.mode\n if (m === 'iframe' || m === 'ide' || m === 'inline') return m\n if (m) console.warn(`<tosi-example>: unknown mode \"${m}\" — running inline`)\n // STRICT boolean: only an explicit `true` means iframe. `iframe` is a\n // presence-only boolean attribute aliasing mode; a loose `this.iframe ?` would\n // treat a stray non-boolean value ('', 'false', an attribute string) as truthy\n // and silently force EVERY example into an iframe. Default is inline.\n return this.iframe === true ? 'iframe' : 'inline'\n }\n\n prefix = 'lx'\n storageKey = STORAGE_KEY\n context: ExampleContext = {}\n // The example's top-level locals from the latest run, captured in-run for tjs\n // runtime-value autocomplete (see `liveBindings`). Populated via `onScope`.\n private capturedScope: Record<string, unknown> = {}\n uuid: string = crypto.randomUUID()\n remoteId = ''\n\n private remoteSync?: RemoteSyncManager\n private undoInterval?: ReturnType<typeof setInterval>\n private testResults?: TestResults\n private pendingValues: Record<string, string> = {}\n private pendingShowDefaultTab = false\n private beforeUnloadHandler?: () => void\n // The code-editor panel (the 4 <tosi-code> editors + toolbar) is built LAZILY on\n // first showCode, NOT in content() — so a reader who never opens a panel never\n // pulls the CodeMirror chunk. Until then, values live in `pendingValues` (the same\n // cache used pre-hydration) and the preview runs from them. See\n // self-contained-examples-plan.md slice 3.\n private editorsBuilt = false\n\n static insertExamples(\n element: HTMLElement,\n context: ExampleContext = {},\n sourceFile?: string\n ): void {\n insertExamples(\n element,\n context,\n liveExample,\n LiveExample.tagName as string,\n sourceFile\n )\n }\n\n get activeTab(): Element | undefined {\n if (!this.editorsBuilt) return undefined\n const { editors } = this.parts\n return [...editors.children].find(\n (elt) => elt.getAttribute('hidden') === null\n )\n }\n\n // Hydration state is the base class's `this.hydrated`, as of tosijs 1.6.9. This file\n // used to hand-roll it as `try { return this.parts.js !== undefined } catch { false }`\n // — the one probe you must never write, since reading `parts` before hydration bound\n // the proxy to the light-DOM element permanently (it survived only by accident of\n // being light-DOM, where the root never flips). 1.6.9 invalidates the proxy at hydrate\n // and exposes `hydrated`/`whenHydrated`, so the hand-roll is gone. (tosijs#13.)\n\n private getEditorValue(which: string): string {\n // Until the editors are built (a reader who never opens a panel, or pre-\n // hydration) the string cache is the source of truth.\n if (!this.editorsBuilt) return this.pendingValues[which] ?? ''\n return (this.parts[which] as CodeEditor).value\n }\n\n private setEditorValue(which: string, code: string): void {\n if (!this.editorsBuilt) {\n this.pendingValues[which] = code\n return\n }\n const codeEditor = this.parts[which] as CodeEditor\n codeEditor.value = code\n }\n\n private flushPendingValues(): void {\n for (const [which, code] of Object.entries(this.pendingValues)) {\n const codeEditor = this.parts[which] as CodeEditor\n if (codeEditor) codeEditor.value = code\n }\n this.pendingValues = {}\n\n if (this.pendingShowDefaultTab) {\n this.pendingShowDefaultTab = false\n this.showDefaultTab()\n }\n }\n\n get css(): string {\n return this.getEditorValue('css')\n }\n set css(code: string) {\n this.setEditorValue('css', code)\n }\n\n get html(): string {\n return this.getEditorValue('html')\n }\n set html(code: string) {\n this.setEditorValue('html', code)\n }\n\n get js(): string {\n return this.getEditorValue('js')\n }\n set js(code: string) {\n this.setEditorValue('js', code)\n }\n\n get test(): string {\n return this.getEditorValue('test')\n }\n set test(code: string) {\n this.setEditorValue('test', code)\n }\n\n get remoteKey(): string {\n return createRemoteKey(this.prefix, this.uuid, this.remoteId)\n }\n\n // The source block's dialect (js | tjs | ts). Set by insert-examples from the\n // fenced-block language; persisted as an attribute so it survives a re-render.\n // `js` is the default and keeps the original pass-through behavior.\n get dialect(): Dialect {\n return (this.getAttribute('data-dialect') as Dialect) || 'js'\n }\n set dialect(value: Dialect) {\n this.setAttribute('data-dialect', value)\n }\n\n // Build-time transpiled JS for the source block, set by insert-examples from the\n // page's baked `<script type=\"application/tosi-transpiled\">` (see\n // self-contained-examples-plan.md). When present AND tests are off (the deployed\n // reader), refresh() runs it directly and never loads the tjs transpiler. When\n // tests are on (localhost / the doc-test harness) it's ignored and refresh() takes\n // the original full-transform path — so the harness can't be regressed. Runtime\n // data only (not reflected to an attribute); absent on client-rendered SPA nav,\n // where refresh() falls back to transpiling on demand.\n compiledJs?: string\n // The source `compiledJs` was transpiled FROM. refresh() runs the bake only while it\n // still matches `this.js`, so the moment the user edits a tjs example the (now stale)\n // original bake is dropped and the edit transpiles on demand. Re-paired to the edited\n // source when a saved local edit carries its own bake (slice 4).\n compiledJsSource?: string\n\n // ── Read-only product tabs (tjs/ts only) ──────────────────────────────────\n // A `tjs`/`ts` example's source is editable; the JavaScript it compiles to is\n // shown read-only in an extra \"JS\" tab. The tab is added lazily (examples show\n // every named editor as a tab, so a static child would pollute plain-`js`\n // examples) the first time the code panel opens. `js` examples get nothing.\n private jsOutEditor?: CodeEditor\n private tjsTestsView?: HTMLElement\n private productTabsReady = false\n private lastGeneratedJs = ''\n private inlineTjsTestCount = 0\n private lastTjsTests?: TjsTestResult\n\n // Run the example's inline tjs tests (the `/*test 'desc' { … }*/` comments in\n // the tjs/ts source — distinct from the DOM-testing `test` block). Extract +\n // strip the tests, transpile the rest the same way execution does, then run\n // `execJs + testUtils + return testRunner` with the example context injected.\n private async runInlineTjsTests(transform: TransformFn): Promise<void> {\n if (this.dialect === 'js') {\n this.inlineTjsTestCount = 0\n return\n }\n const api = await loadTjsTestApi()\n if (!api) {\n this.inlineTjsTestCount = 0\n return\n }\n let extracted\n try {\n extracted = api.extractTests(this.js)\n } catch {\n this.inlineTjsTestCount = 0\n return\n }\n this.inlineTjsTestCount = extracted.tests.length\n if (extracted.tests.length === 0) {\n this.lastTjsTests = undefined\n this.renderTjsTests()\n return\n }\n try {\n const execJs = (\n await transform(\n rewriteImports(extracted.code, Object.keys(this.context))\n )\n ).code\n const body = `${execJs}\\n${api.testUtils}\\nreturn ${extracted.testRunner}`\n // The test-stripped source still runs its top-level statements (to define\n // the functions under test), which may touch `preview` — give them a\n // throwaway one, mirroring execution's `{ preview, ...context }` scope.\n const fullContext = {\n preview: div({ class: 'preview' }),\n ...this.context,\n }\n const keys = Object.keys(fullContext).map(contextVarName)\n const values = Object.values(fullContext)\n // @ts-expect-error AsyncFunction constructor typing\n const fn = new AsyncFunction(...keys, body)\n this.lastTjsTests = (await fn(...values)) as TjsTestResult\n } catch (error) {\n this.lastTjsTests = {\n passed: 0,\n failed: 1,\n results: [\n {\n description: 'inline tests failed to run',\n passed: false,\n error: String(error),\n },\n ],\n }\n }\n this.renderTjsTests()\n }\n\n private renderTjsTests(): void {\n const view = this.tjsTestsView\n if (!view) return\n const results = this.lastTjsTests\n if (!results || results.results.length === 0) {\n view.replaceChildren(\n div({ class: 'tjs-test-empty' }, 'No inline tjs tests.')\n )\n return\n }\n view.replaceChildren(\n div(\n { class: 'tjs-test-summary' },\n `${results.passed}/${results.results.length} passed`\n ),\n ...results.results.map((r) =>\n div(\n { class: r.passed ? 'test-pass' : 'test-fail' },\n `${r.passed ? '✓' : '✗'} ${r.description}`,\n r.error ? span({ class: 'tjs-test-error' }, ` — ${r.error}`) : ''\n )\n )\n )\n }\n\n // The JavaScript `this.js` compiles to under the current dialect — the same\n // pipeline execution runs (rewriteImports → dialect transform), so the tab\n // shows what actually executes. Transpile errors render as a comment.\n private async computeGeneratedJs(transform: TransformFn): Promise<string> {\n if (this.dialect === 'js') return ''\n try {\n return (\n await transform(rewriteImports(this.js, Object.keys(this.context)))\n ).code\n } catch (error) {\n return `// transpile error:\\n// ${(error as Error).message}`\n }\n }\n\n private ensureProductTabs(): void {\n if (\n this.productTabsReady ||\n this.dialect === 'js' ||\n !this.hydrated ||\n !this.editorsBuilt // the editors it relabels don't exist yet\n )\n return\n this.productTabsReady = true\n const { editors } = this.parts\n // Relabel the source tab from \"js\" to the actual dialect (the `part` stays\n // `js`, so everything referencing this.parts.js / this.js is unaffected), and\n // put the source editor in the dialect's mode — so a `tjs` example gets\n // first-class tjs editing (highlighting + autocomplete), `ts` gets TypeScript.\n this.parts.js.setAttribute('name', this.dialect)\n // Runtime-value autocomplete: give the tjs completion source the example's live\n // bindings (context modules + the rendered preview) so it can suggest their REAL\n // members — including tosijs proxy members that static analysis can't see. Set\n // before `.mode` so the tjs extension loads with the config in one shot.\n this.parts.js.tjsAutocomplete = {\n getLiveBindings: () => this.liveBindings(),\n }\n this.parts.js.mode = this.dialect\n this.jsOutEditor = codeEditor({\n name: 'JS',\n mode: 'javascript',\n disabled: true,\n }) as unknown as CodeEditor\n editors.append(this.jsOutEditor)\n // Add a read-only \"tjs tests\" results tab only when the source has inline\n // `/*test*/` tests (computed during refresh, which runs before first open).\n if (this.inlineTjsTestCount > 0) {\n this.tjsTestsView = div({ name: 'tjs tests', class: 'tjs-test-results' })\n editors.append(this.tjsTestsView)\n }\n editors.setupTabs()\n this.jsOutEditor.value = this.lastGeneratedJs\n this.renderTjsTests()\n }\n\n // Capture the latest run's top-level locals (arrow property so `this` is bound\n // when passed as execution's `onScope`).\n private captureScope = (scope: Record<string, unknown>): void => {\n this.capturedScope = scope\n }\n\n /**\n * Live bindings for tjs runtime-value autocomplete: the example's context modules\n * (keyed by the identifier the rewritten code uses, e.g. `tosijs`, `tosijsui`),\n * the currently-rendered `preview` element, and the latest run's top-level locals\n * (so `const app = tosi(…)` gives real `app.` / `app.items.` completions, proxy\n * members and all). Read lazily on each completion, so it reflects the latest run.\n */\n private liveBindings(): Record<string, unknown> {\n const bindings: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(this.context)) {\n bindings[contextVarName(key)] = value\n }\n const preview = this.parts.example?.querySelector('.preview')\n if (preview) bindings.preview = preview\n // Run locals last so they win over same-named context entries.\n Object.assign(bindings, this.capturedScope)\n return bindings\n }\n\n updateUndo = () => {\n // The undo/redo buttons live in the lazy editor panel; only touch them once it's\n // built. The edited-indicator and test-results visibility work without editors\n // (they read the cached values / test state), so they always run.\n if (this.editorsBuilt) {\n const { activeTab } = this\n const { undo, redo } = this.parts\n if (activeTab instanceof CodeEditor) {\n undo.disabled = !activeTab.canUndo()\n redo.disabled = !activeTab.canRedo()\n } else {\n undo.disabled = true\n redo.disabled = true\n }\n }\n this.updateEditedIndicator()\n this.updateTestResultsVisibility()\n }\n\n private updateTestResultsVisibility(): void {\n const { testResults: resultsEl } = this.parts\n const results = this.testResults\n // The \"DOM tests\" tab's editor is this.parts.test (the part stays `test`\n // even though the tab label changed). No tab is active until the panel exists.\n const isTestTabActive =\n this.editorsBuilt && this.activeTab === this.parts.test\n const hasFailed = results && results.failed > 0\n\n // Show results if: has results AND (test tab is active OR there are failures)\n resultsEl.hidden =\n !results || results.tests.length === 0 || (!isTestTabActive && !hasFailed)\n }\n\n undo = () => {\n const { activeTab } = this\n if (activeTab instanceof CodeEditor) {\n activeTab.undo()\n }\n }\n\n redo = () => {\n const { activeTab } = this\n if (activeTab instanceof CodeEditor) {\n activeTab.redo()\n }\n }\n\n get isMaximized(): boolean {\n return this.classList.contains('-maximize')\n }\n\n flipLayout = () => {\n this.classList.toggle('-vertical')\n }\n\n // Persist this example's edits back to the source file's fenced blocks, located\n // by the source↔doc map (data-source-file + data-example-ordinal). Dev only —\n // writes via the /__docstore/source endpoint; the watcher then rebuilds.\n saveToSource = async (): Promise<void> => {\n const sourceFile = this.getAttribute('data-source-file')\n const ordinalAttr = this.getAttribute('data-example-ordinal')\n if (!sourceFile || ordinalAttr === null) {\n window.alert('No source mapping for this example.')\n return\n }\n let content: string\n try {\n const response = await fetch(\n `/__docstore/source?file=${encodeURIComponent(sourceFile)}`\n )\n if (!response.ok) throw new Error(String(response.status))\n content = await response.text()\n } catch {\n window.alert(\n 'Source endpoint unavailable — saving to source works in dev only.'\n )\n return\n }\n const updated = rewriteExampleBlocks(content, Number(ordinalAttr), {\n js: this.js,\n html: this.html,\n css: this.css,\n test: this.test,\n })\n if (updated === null) {\n // Distinguish the two failure modes so a source↔doc mismatch is diagnosable\n // (vs. a genuine no-op). An ordinal past the source's group count means the\n // page and the file disagree on how many example groups exist — commonly a\n // file with more than one doc comment, or fenced blocks the doc extractor\n // treats differently from a raw scan (e.g. indented inside the comment).\n const ordinal = Number(ordinalAttr)\n const groups = groupExamples(content, findFencedBlocks(content))\n if (ordinal >= groups.length) {\n window.alert(\n `Couldn't locate this example in ${sourceFile}: it's example ` +\n `#${\n ordinal + 1\n } on the page, but a raw scan of the file finds only ` +\n `${groups.length} fenced example group(s). The page↔source ordinals ` +\n `disagree — likely multiple docs in one file, or indented fences. ` +\n `(File a report with the source structure.)`\n )\n } else {\n window.alert('No changes to save.')\n }\n return\n }\n try {\n const response = await fetch('/__docstore/source', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ file: sourceFile, content: updated }),\n })\n if (!response.ok) throw new Error(String(response.status))\n window.alert(`Saved to ${sourceFile}`)\n } catch {\n window.alert('Save failed.')\n }\n }\n\n handleTestsToggle = (event: Event): void => {\n if ((event.target as HTMLInputElement).checked) enableTests()\n else disableTests()\n }\n\n // The maximize icon + title toggle purely in CSS (.hide-if-maximized /\n // .show-if-maximized); only the run-tests checkbox needs a JS sync so its state\n // is correct on first paint and after the global flag changes. (Its greyed /\n // monochrome look keys off the --tests-enabled CSS var, which is global.)\n updateExampleWidgets = (): void => {\n if (!this.hydrated) return\n if (this.parts.testsCheckbox)\n this.parts.testsCheckbox.checked = testManager.enabled.value\n }\n\n handleShortcuts = (event: KeyboardEvent) => {\n if (event.metaKey || event.ctrlKey) {\n let block = false\n switch (event.key) {\n case 's':\n case 'r':\n this.doRefresh()\n block = true\n break\n case '/':\n this.flipLayout()\n break\n case 'c':\n if (event.shiftKey) {\n this.copy()\n block = true\n }\n break\n }\n if (block) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n }\n\n content = () => [\n div(\n { part: 'example' },\n style({ part: 'style' }),\n pre({ part: 'testResults', hidden: true }),\n // The example toolbar: a pocket bar whose collapsed `<>` handle carries the\n // test-status colour (via --widget-color). Pinned top-right, growing left, so\n // it never covers the editor in side-by-side mode.\n tosiPocketBar(\n { part: 'exampleWidgets', icon: 'code', direction: 'w' },\n button(\n { title: 'view/edit code', onClick: this.showCode },\n icons.edit2()\n ),\n button(\n { title: 'view/edit code in a new window', onClick: this.openEditorWindow },\n icons.edit()\n ),\n button(\n { title: 'toggle preview size', onClick: this.toggleMaximize },\n // Both icons render; the existing .hide-if-maximized / .show-if-maximized\n // CSS shows the right one for the current state — no JS icon swap.\n icons.maximize({ class: 'hide-if-maximized' }),\n icons.minimize({ class: 'show-if-maximized' })\n ),\n label(\n { class: 'tests-toggle', title: 'run tests' },\n input({ type: 'checkbox', part: 'testsCheckbox', onChange: this.handleTestsToggle }),\n icons.check()\n )\n )\n ),\n // Empty until first showCode. buildEditorPanel() fills it lazily so a reader\n // who never opens a panel never constructs a <tosi-code> (and never pulls the\n // CodeMirror chunk). See ensureEditors().\n div({\n class: 'code-editors',\n part: 'codeEditors',\n onKeydown: this.handleShortcuts,\n hidden: true,\n }),\n tosiSlot({ part: 'sources', hidden: true }),\n ]\n\n // The editor panel (4 <tosi-code> editors + toolbar). Built on demand by\n // ensureEditors(), NOT in content() — constructing a <tosi-code> is what imports\n // the CodeMirror chunk, so keeping it out of the reader's mount path is the whole\n // point of slice 3. The `part` names match what content() used, so every\n // this.parts.{js,html,css,test,editors,undo,redo} reference resolves once built.\n private buildEditorPanel(): HTMLElement {\n return tosiTabs(\n {\n part: 'editors',\n onChange: this.updateUndo,\n },\n codeEditor({ name: 'js', mode: 'javascript', part: 'js' }),\n codeEditor({ name: 'html', mode: 'html', part: 'html' }),\n codeEditor({ name: 'css', mode: 'css', part: 'css' }),\n // The `test` block tests the rendered preview (DOM), so its tab is\n // labeled \"DOM tests\" to distinguish it from inline tjs unit tests. The\n // `part`/`name` stay `test`; only the displayed label differs.\n codeEditor({ name: 'DOM tests', mode: 'javascript', part: 'test' }),\n div(\n { slot: 'after-tabs', class: 'row' },\n button(\n {\n title: 'undo',\n part: 'undo',\n class: 'transparent',\n onClick: this.undo,\n },\n icons.cornerUpLeft()\n ),\n button(\n {\n title: 'redo',\n part: 'redo',\n class: 'transparent',\n onClick: this.redo,\n },\n icons.cornerUpRight()\n ),\n button(\n {\n title: 'example menu — refresh, flip, undo, copy, save/revert edits',\n class: 'transparent source-menu',\n onClick: this.sourceMenu,\n },\n icons.moreVertical()\n ),\n button(\n {\n title: 'close code',\n class: 'transparent',\n onClick: this.closeCode,\n },\n icons.x()\n )\n )\n )\n }\n\n // Build the editor panel the first time a code panel is opened, flush the cached\n // values into the now-real editors, and wire the tjs/ts read-only JS tab. Idempotent.\n private ensureEditors(): void {\n if (this.editorsBuilt || !this.hydrated) return\n this.parts.codeEditors.append(this.buildEditorPanel())\n this.editorsBuilt = true\n // pendingValues → the real editors, then pick the default tab and product tabs.\n this.flushPendingValues()\n this.ensureProductTabs()\n this.showDefaultTab()\n this.updateUndo()\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n // super.connectedCallback() ran hydrate(), so `this.hydrated` is now true and\n // `parts` is safe to touch. The editor panel is NOT built here — values stay in\n // `pendingValues` and are flushed into the editors when ensureEditors() builds\n // them (first showCode). The preview runs from `pendingValues` meanwhile.\n\n const { sources } = this.parts\n this.initFromElements([...sources.children] as HTMLElement[])\n\n // Set up remote sync\n this.remoteSync = new RemoteSyncManager(\n this.storageKey,\n this.remoteKey,\n (payload) => {\n if (payload.close) {\n if (this.remoteId !== '') {\n // Remote editor window — close the popup\n window.close()\n } else {\n // Original window — restore from maximized state\n this.classList.remove('-maximize')\n this.parts.codeEditors.hidden = true\n }\n return\n }\n this.css = payload.css\n this.html = payload.html\n this.js = payload.js\n if (payload.test) this.test = payload.test\n // Adopt the main window's pristine snapshot (once) so this pop-out can\n // compute \"has edits\", diff View changes, and enable the Save actions.\n if (this.remoteId !== '' && payload.original && !this.originalCode) {\n this.originalCode = { ...payload.original }\n }\n this.refresh()\n }\n )\n this.remoteSync.startListening()\n\n // Stochastic undo-state polling — jittered base interval avoids\n // synchronizing when many examples are on the same page.\n const jitter = Math.random() * 100\n this.undoInterval = setInterval(() => {\n if (!document.hidden) this.updateUndo()\n }, 250 + jitter)\n\n // Send close signal when the tab/window closes — disconnectedCallback\n // does not fire reliably during page unload.\n this.beforeUnloadHandler = () => this.remoteSync?.sendClose()\n addEventListener('beforeunload', this.beforeUnloadHandler)\n\n // Reflect maximize state + tests-enabled on the pocket-bar controls. The\n // run-tests icon greys globally via the --tests-enabled CSS var (maintained on\n // <body>), so no per-instance observer is needed to keep examples in sync.\n this.updateExampleWidgets()\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n\n this.remoteSync?.sendClose()\n this.remoteSync?.stopListening()\n\n if (this.undoInterval) {\n clearInterval(this.undoInterval)\n this.undoInterval = undefined\n }\n\n if (this.beforeUnloadHandler) {\n removeEventListener('beforeunload', this.beforeUnloadHandler)\n this.beforeUnloadHandler = undefined\n }\n }\n\n private exampleMarkdown(): string {\n const block = (lang: string, code: string) =>\n code !== '' ? '```' + lang + '\\n' + code.trim() + '\\n```\\n' : ''\n return (\n block(this.dialect, this.js) +\n block('html', this.html) +\n block('css', this.css) +\n block('test', this.test)\n )\n }\n\n copy = () => {\n navigator.clipboard.writeText(this.exampleMarkdown())\n }\n\n downloadExample = () => {\n const src = this.getAttribute('data-source-file') || 'example'\n const ord = this.getAttribute('data-example-ordinal')\n const name =\n (src.split('/').pop() || 'example').replace(/\\.\\w+$/, '') +\n (ord !== null ? `-example-${ord}` : '') +\n '.md'\n const url = URL.createObjectURL(\n new Blob([this.exampleMarkdown()], { type: 'text/markdown' })\n )\n const link = document.createElement('a')\n link.href = url\n link.download = name\n link.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n }\n\n // ── Local edit scratchpad (per-browser; keyed by the source↔doc map) ───────\n // The original source blocks, snapshotted at mount so \"revert\" can restore\n // them after a locally-saved edit.\n private originalCode: ExampleEdit | null = null\n\n private localEditKey(): string {\n const src = this.getAttribute('data-source-file')\n const ord = this.getAttribute('data-example-ordinal')\n return src && ord !== null ? exampleEditKey(src, ord) : ''\n }\n\n private applyEdit(edit: ExampleEdit): void {\n if (edit.js !== undefined) this.js = edit.js\n if (edit.html !== undefined) this.html = edit.html\n if (edit.css !== undefined) this.css = edit.css\n if (edit.test !== undefined) this.test = edit.test\n // If the saved edit carried its own bake, re-pair it to the edited source so a\n // reader reload runs the edit without the transpiler. Otherwise leave compiledJs\n // as-is; the source→bake mismatch makes refresh() transpile on demand (correct).\n if (edit.compiledJs !== undefined && edit.js !== undefined) {\n this.compiledJs = edit.compiledJs\n this.compiledJsSource = edit.js\n }\n }\n\n // \"Has edits\" = current code differs from the snapshotted original (trailing\n // whitespace ignored, since editors normalize it). Drives Save/Revert enabled\n // state and the local-edit indicator.\n hasLocalEdits(): boolean {\n if (!this.originalCode) return false\n const o = this.originalCode\n const t = (s?: string) => (s ?? '').replace(/\\s+$/, '')\n return (\n t(this.js) !== t(o.js) ||\n t(this.html) !== t(o.html) ||\n t(this.css) !== t(o.css) ||\n t(this.test) !== t(o.test)\n )\n }\n\n private updateEditedIndicator(): void {\n this.classList.toggle('-locally-edited', this.hasLocalEdits())\n }\n\n private canUndo(): boolean {\n const t = this.activeTab\n return t instanceof CodeEditor && t.canUndo()\n }\n\n private canRedo(): boolean {\n const t = this.activeTab\n return t instanceof CodeEditor && t.canRedo()\n }\n\n saveLocalEdit = () => {\n const key = this.localEditKey()\n if (!key) {\n window.alert('This example has no source mapping to key a local save.')\n return\n }\n saveExampleEdit(key, {\n js: this.js,\n html: this.html,\n css: this.css,\n test: this.test,\n // Keep the transpiled code alongside the source so a restored edit runs without\n // reloading the transpiler. refresh() keeps compiledJs paired with the current\n // source, so persist it only when it still matches (never a stale value). `js`\n // needs no transpiler.\n compiledJs:\n this.dialect !== 'js' && this.compiledJsSource === this.js\n ? this.compiledJs\n : undefined,\n })\n this.updateEditedIndicator()\n // A local save is a per-browser scratchpad, not a file write — say so, or it\n // reads as a no-op (\"I saved but the file didn't change\"). \"Save to source\"\n // (localhost + editableSources) is the one that writes the file.\n postNotification({\n type: 'success',\n message:\n 'Saved to this browser only — use “Save to source” to write the file.',\n })\n }\n\n revertLocalEdit = () => {\n const key = this.localEditKey()\n if (key) clearExampleEdit(key)\n if (this.originalCode) this.applyEdit(this.originalCode)\n // Reverting leaves nothing to diff — drop out of the diff view if we're in it.\n if (this.viewingChanges) this.viewChanges()\n this.updateEditedIndicator()\n this.refresh()\n }\n\n // Called once by insert-examples after the source blocks + map attrs are set:\n // snapshot the original, then restore any saved local edit on top.\n snapshotAndRestoreLocalEdit = () => {\n // this.js/html/css/test are guarded (return '' before hydration). Do NOT\n // touch this.parts.* directly here — that throws \"elementRef does not exist\"\n // when the example isn't hydrated yet, which breaks the whole doc render.\n // Editor diff baselines are applied later, in viewChanges().\n this.originalCode = {\n js: this.js,\n html: this.html,\n css: this.css,\n test: this.test,\n }\n const key = this.localEditKey()\n if (!key || !hasExampleEdit(key)) return\n const edit = loadExampleEdit(key)\n if (edit) {\n this.applyEdit(edit)\n this.updateEditedIndicator()\n this.refresh()\n }\n }\n\n // Toggle a per-tab diff (current vs original source) across the example's\n // editors. Each editor diffs its own single text — no need to combine the\n // html/css/js/test split — so switching tabs shows that tab's changes.\n viewingChanges = false\n viewChanges = () => {\n if (!this.hydrated) return\n this.ensureEditors() // diffing reaches into this.parts[tab] — build them first\n this.viewingChanges = !this.viewingChanges\n if (this.viewingChanges) this.showCode()\n const originals = this.originalCode ?? {}\n for (const tab of ['js', 'html', 'css', 'test'] as const) {\n // Set the diff baseline (the source) right before showing the diff, now\n // that the editors are hydrated.\n this.parts[tab].original = originals[tab] ?? ''\n this.parts[tab].showDiff(this.viewingChanges)\n }\n }\n\n // The example's overflow menu. Stable item set — actions stay put and toggle\n // enabled (Save/Revert key off whether there are edits); items are only hidden\n // when they could NEVER apply here (local save needs a source-map key; save to\n // source additionally needs the dev server). Shortcuts are display-only; the\n // keys are routed by handleShortcuts / the editor, not the menu.\n // Refresh means different things in the two modes: the page-embedded example\n // re-runs itself; the pop-out editor window (refresh() is a no-op there) pushes\n // its code to the main window so IT re-runs.\n doRefresh = () => {\n if (this.remoteId !== '') {\n this.refreshRemote()\n } else {\n void this.refresh()\n }\n }\n\n sourceMenu = (event: Event) => {\n const key = this.localEditKey()\n const hasEdits = () => this.hasLocalEdits()\n // View changes / Revert need the source snapshot, which only the page-embedded\n // example has — the pop-out editor window has no originalCode to compare to.\n const hasSnapshot = this.originalCode != null\n popMenu({\n target: (event.target as HTMLElement).closest('button') as HTMLElement,\n width: 'auto',\n menuItems: [\n {\n icon: 'refreshCw',\n caption: 'Refresh',\n shortcut: '⌘R',\n action: this.doRefresh,\n },\n {\n icon: 'columns',\n caption: 'Flip layout',\n shortcut: '⌘/',\n action: this.flipLayout,\n },\n {\n icon: 'cornerUpLeft',\n caption: 'Undo',\n shortcut: '⌘Z',\n action: this.undo,\n enabled: () => this.canUndo(),\n },\n {\n icon: 'cornerUpRight',\n caption: 'Redo',\n shortcut: '⌘⇧Z',\n action: this.redo,\n enabled: () => this.canRedo(),\n },\n null,\n {\n icon: 'copy',\n caption: 'Copy as markdown',\n shortcut: '⌘⇧C',\n action: this.copy,\n },\n { icon: 'download', caption: 'Download', action: this.downloadExample },\n null,\n ...(hasSnapshot\n ? [\n this.viewingChanges\n ? {\n icon: 'edit',\n caption: 'Back to editing',\n action: this.viewChanges,\n }\n : {\n icon: 'code',\n caption: 'View changes',\n action: this.viewChanges,\n enabled: hasEdits,\n },\n ]\n : []),\n ...(key\n ? [\n {\n icon: 'save',\n caption: 'Save changes (local)',\n action: this.saveLocalEdit,\n enabled: hasEdits,\n },\n ]\n : []),\n ...(key && isLocalhost\n ? [\n {\n icon: 'upload',\n caption: 'Save to source',\n action: () => {\n void this.saveToSource()\n },\n enabled: hasEdits,\n },\n ]\n : []),\n ...(hasSnapshot\n ? [\n {\n icon: 'rotateCcw',\n caption: 'Revert to original',\n action: this.revertLocalEdit,\n enabled: hasEdits,\n },\n ]\n : []),\n ],\n })\n }\n\n toggleMaximize = () => {\n this.classList.toggle('-maximize')\n }\n\n showCode = () => {\n this.ensureEditors() // first open builds the CodeMirror panel (and pulls the chunk)\n this.classList.add('-maximize')\n this.classList.toggle('-vertical', this.offsetHeight > this.offsetWidth)\n this.parts.codeEditors.hidden = false\n this.ensureProductTabs()\n }\n\n closeCode = () => {\n if (this.remoteId !== '') {\n // Remote editor window — send close signal to original, then close popup\n this.remoteSync?.sendClose()\n window.close()\n } else {\n // Original window — restore and close any remote editor\n this.remoteSync?.sendClose()\n this.classList.remove('-maximize')\n this.parts.codeEditors.hidden = true\n }\n }\n\n openEditorWindow = () => {\n const { css, html, js, test } = this\n openEditorWindow(\n this.prefix,\n this.uuid,\n this.storageKey,\n this.remoteKey,\n { css, html, js, test },\n {\n // Give the pop-out the same source↔doc key + pristine snapshot the main\n // window has, so it offers the full menu (Save local / Save to source /\n // View changes) instead of a reduced one.\n sourceFile: this.getAttribute('data-source-file'),\n ordinal: this.getAttribute('data-example-ordinal'),\n original: this.originalCode ?? undefined,\n }\n )\n // The pop-out window owns editing now — maximize the preview AND close the\n // inline code view here (it stays open otherwise if it was already showing).\n this.classList.add('-maximize')\n this.parts.codeEditors.hidden = true\n }\n\n refreshRemote = () => {\n this.remoteSync?.send({\n css: this.css,\n html: this.html,\n js: this.js,\n test: this.test,\n })\n }\n\n updateSources = () => {\n if (this.persistToDom) {\n const { sources } = this.parts\n sources.innerText = ''\n for (const language of ['js', 'css', 'html', 'test']) {\n if (this[language as 'js' | 'css' | 'html' | 'test']) {\n sources.append(\n pre({\n class: `language-${language}`,\n innerHTML: this[language as 'js' | 'css' | 'html' | 'test'],\n })\n )\n }\n }\n }\n }\n\n refresh = async () => {\n if (this.remoteId !== '') return\n\n // Reader fast path: with the build-time bake AND tests off (the deployed\n // reader — tests default off outside localhost), run the example WITHOUT\n // loading the tjs transpiler. When tests are on (localhost / the doc-test\n // harness) `bake` is undefined and this is the original full-transform path,\n // so the harness is untouched. The bake is byte-identical to what the\n // transform would produce (it IS `transform(rewriteImports(js))`).\n // ...and only while the bake still matches the current source — an edit drops the\n // stale original bake and transpiles the edit on demand (slice 4).\n const bake =\n this.dialect !== 'js' &&\n !testManager.enabled.value &&\n this.compiledJs !== undefined &&\n this.compiledJsSource === this.js\n ? this.compiledJs\n : undefined\n const transform = bake === undefined ? await loadTransform(this.dialect) : undefined\n const { example, style: styleEl, exampleWidgets } = this.parts\n\n // Keep the read-only generated-JS tab (tjs/ts) in sync with the source, and\n // re-run any inline tjs tests for the \"tjs tests\" results tab. With the bake we\n // already have the generated JS and skip the transpiler-bound inline-test run.\n if (this.dialect !== 'js') {\n this.lastGeneratedJs = bake ?? (await this.computeGeneratedJs(transform!))\n if (this.jsOutEditor) this.jsOutEditor.value = this.lastGeneratedJs\n if (bake === undefined) {\n // Freshly transpiled (edited source, or a dialect the build didn't bake):\n // cache it AS the bake, paired with the source it came from. So saveLocalEdit\n // can persist it and later refreshes of the same source skip re-transpiling —\n // the transpiler is already loaded at this point, so this costs nothing.\n this.compiledJs = this.lastGeneratedJs\n this.compiledJsSource = this.js\n await this.runInlineTjsTests(transform!)\n }\n }\n\n let preview: HTMLElement | null\n let executionError: Error | undefined\n\n const onError = (error: Error) => {\n executionError = error\n }\n\n // Scope capture feeds tjs autocomplete (getLiveBindings), which is only consulted\n // for tjs/ts examples once a code panel is open. Gating it here keeps the optional\n // tjs-lang/editors bundle (and its AST parse) off the reader path — it loads only\n // when someone actually edits a tjs/ts example. `js` never needs it.\n const onScope =\n this.dialect !== 'js' && this.editorsBuilt ? this.captureScope : undefined\n\n // 'iframe' and (for now) 'ide' both run in an isolated iframe. 'ide' — the fully\n // sandboxed real-published-deps mode — is a recognized flag; its distinct\n // real-module execution is a follow-up (import-resolver-plan.md phase 2), so it\n // currently uses the iframe path.\n const mode = this.effectiveMode\n if (mode === 'iframe' || mode === 'ide') {\n preview = await executeInIframe({\n html: this.html,\n css: this.css,\n js: this.js,\n context: this.context,\n transform,\n compiledJs: bake,\n exampleElement: example,\n widgetsElement: exampleWidgets,\n onError,\n onScope,\n })\n } else {\n preview = await executeInline({\n html: this.html,\n css: this.css,\n js: this.js,\n context: this.context,\n transform,\n compiledJs: bake,\n exampleElement: example,\n styleElement: styleEl,\n widgetsElement: exampleWidgets,\n onError,\n onScope,\n })\n }\n\n if (this.persistToDom) {\n this.updateSources()\n }\n\n // Run tests when there are any — but a build/exec failure is a test failure\n // in its own right, so surface it even when the example defines no `test`\n // blocks (and even if the failure was hard enough to produce no preview).\n if ((this.test || executionError) && testManager.enabled.value) {\n // Let queued renders (rAF) settle before running tests\n await new Promise((resolve) => requestAnimationFrame(resolve))\n\n this.classList.add('-has-tests', '-test-running')\n this.classList.remove('-test-passed', '-test-failed')\n // `test` blocks are conventional JS/TS regardless of the example's dialect,\n // so they're transpiled as plain js — never lowered through tjs/ts.\n // This block only runs when tests are enabled, and `bake` only exists when\n // they're off — so `transform` was loaded above and is defined here.\n const testTransform =\n this.dialect === 'js' ? transform! : await loadTransform('js')\n // Only run `test` blocks if the example actually produced a preview to\n // assert against; a failed build has nothing to test but still fails below.\n this.testResults =\n this.test && preview\n ? await runTests(this.test, preview, this.context, testTransform)\n : { passed: 0, failed: 0, tests: [] }\n if (executionError) {\n this.testResults.failed += 1\n this.testResults.tests.unshift({\n name: 'example loads without error',\n passed: false,\n error: String(executionError),\n })\n }\n this.classList.remove('-test-running')\n this.displayTestResults()\n } else {\n this.classList.remove(\n '-has-tests',\n '-test-running',\n '-test-passed',\n '-test-failed'\n )\n }\n }\n\n private displayTestResults(): void {\n const { testResults: resultsEl, exampleWidgets } = this.parts\n const results = this.testResults\n\n if (!results || results.tests.length === 0) {\n resultsEl.hidden = true\n this.classList.remove('-test-passed', '-test-failed')\n if (exampleWidgets) exampleWidgets.title = 'no tests'\n return\n }\n\n resultsEl.innerHTML = ''\n\n const summary = div(\n { style: { marginBottom: '8px', fontWeight: 'bold' } },\n `${results.passed}/${results.tests.length} tests passed`\n )\n resultsEl.append(summary)\n\n for (const test of results.tests) {\n const icon = test.passed ? '✓' : '✗'\n const cls = test.passed ? 'test-pass' : 'test-fail'\n const testEl = div(\n { class: cls },\n span(icon + ' '),\n test.name,\n test.error\n ? span({ style: { opacity: '0.7' } }, ` - ${test.error}`)\n : ''\n )\n resultsEl.append(testEl)\n }\n\n this.classList.toggle('-test-passed', results.failed === 0)\n this.classList.toggle('-test-failed', results.failed > 0)\n\n // The `<>` handle colour shows pass/fail; its tooltip carries the detail.\n if (exampleWidgets)\n exampleWidgets.title =\n results.failed === 0\n ? `${results.passed} tests passed`\n : `${results.failed}/${results.tests.length} tests failed`\n\n // Update visibility based on tab and failure status\n this.updateTestResultsVisibility()\n\n // Dispatch event for doc-browser to track results\n this.dispatchEvent(\n new CustomEvent('testcomplete', {\n bubbles: true,\n detail: {\n results,\n element: this,\n },\n })\n )\n }\n\n initFromElements(elements: HTMLElement[]) {\n for (const element of elements) {\n element.hidden = true\n const [mode, ...lines] = element.innerHTML.split('\\n') as string[]\n if (['js', 'html', 'css', 'test'].includes(mode)) {\n const minIndex = lines\n .filter((line) => line.trim() !== '')\n .map((line) => (line.match(/^\\s*/) as string[])[0].length)\n .sort()[0]\n const source = (\n minIndex > 0 ? lines.map((line) => line.substring(minIndex)) : lines\n ).join('\\n')\n this.setEditorValue(mode, source)\n } else {\n const language = ['js', 'html', 'css', 'test'].find((lang) =>\n element.matches(`.language-${lang}`)\n )\n if (language) {\n this.setEditorValue(\n language,\n language === 'html' ? element.innerHTML : element.innerText\n )\n }\n }\n }\n }\n\n showDefaultTab() {\n // No tab strip until the panel is built; remember to pick the tab then.\n if (!this.hydrated || !this.editorsBuilt) {\n this.pendingShowDefaultTab = true\n return\n }\n const { editors } = this.parts\n if (this.js !== '') {\n editors.value = 0\n } else if (this.html !== '') {\n editors.value = 1\n } else if (this.css !== '') {\n editors.value = 2\n } else if (this.test !== '') {\n editors.value = 3\n }\n }\n\n render(): void {\n super.render()\n\n this.updateExampleWidgets()\n\n if (this.remoteId !== '') {\n const data = localStorage.getItem(this.storageKey)\n if (data !== null) {\n const payload = JSON.parse(data)\n if (this.remoteKey !== payload.remoteKey) return\n\n this.css = payload.css\n this.html = payload.html\n this.js = payload.js\n if (payload.test) this.test = payload.test\n // The pop-out editor window IS the editor — build the panel and flush the\n // values above into it (they went to pendingValues since it wasn't built yet).\n this.ensureEditors()\n this.parts.example.hidden = true\n this.parts.codeEditors.hidden = false\n this.classList.add('-maximize')\n this.updateUndo()\n }\n } else {\n this.refresh()\n }\n }\n}\n\nexport const liveExample =\n LiveExample.elementCreator() as ElementCreator<LiveExample>\n\n// Auto-initialize remote editor window\nconst params = new URL(window.location.href).searchParams\nconst remoteId = params.get('lx')\nif (remoteId) {\n document.title += ' [code editor]'\n document.body.textContent = ''\n const example = liveExample({ remoteId })\n // Carry the source↔doc key through so the pop-out's Save local / Save to source\n // menu items appear and work (the pristine snapshot arrives via the payload).\n const sourceFile = params.get('sf')\n const ordinal = params.get('ord')\n if (sourceFile && ordinal !== null) {\n example.setAttribute('data-source-file', sourceFile)\n example.setAttribute('data-example-ordinal', ordinal)\n }\n document.body.append(example)\n}\n",
|
|
44
45
|
"/*#\n# sidebar\n\nThe default layout for iOS / iPadOS apps is to hide the sidebar when displaying content on small\nscreens, and display the sidebar when space is available (with the user able to explicitly hide\nthe sidebar if so desired). `<tosi-sidenav>` provides this functionality.\n\n`<tosi-sidenav>` is used to handle the layout of the documentation tab panel.\n\n`<tosi-sidenav>`'s behavior is controlled by two attributes, `minSize` is the point at which it will toggle between showing the navigation\nsidebar and content, while `navSize` is the width of the sidebar. You can interrogate its `compact` property to find out if it's\ncurrently in `compact` form.\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component, ElementCreator, elements, varDefault } from 'tosijs'\n\nconst { slot } = elements\n\ntype NavState = 'normal' | 'compact/nav' | 'compact/content'\n\nexport class TosiSidenav extends Component {\n static preferredTagName = 'tosi-sidenav'\n\n static initAttributes = {\n minSize: 800,\n navSize: 200,\n compact: false,\n contentVisible: false,\n }\n\n value: NavState = 'normal'\n\n content = [slot({ name: 'nav', part: 'nav' }), slot({ part: 'content' })]\n\n static shadowStyleSpec = {\n ':host': {\n display: 'grid',\n gridTemplateColumns: `${varDefault.navWidth(\n '50%'\n )} ${varDefault.contentWidth('50%')}`,\n gridTemplateRows: '100%',\n position: 'relative',\n margin: varDefault.margin('0 0 0 -100%'),\n transition: varDefault.sideNavTransition('0.25s ease-out'),\n },\n ':host slot': {\n position: 'relative',\n },\n ':host slot:not([name])': {\n display: 'block',\n },\n ':host slot[name=\"nav\"]': {\n display: 'block',\n },\n }\n\n handleResize = () => {\n const { content } = this.parts\n const parent = this.offsetParent as HTMLElement | null\n if (parent === null) {\n return\n }\n\n let navState: NavState\n\n this.compact = parent.offsetWidth < this.minSize\n\n const empty =\n [...this.childNodes].find((node) =>\n node instanceof Element ? node.getAttribute('slot') !== 'nav' : true\n ) === undefined\n if (empty) {\n navState = 'compact/nav'\n this.style.setProperty('--nav-width', '100%')\n this.style.setProperty('--content-width', '0%')\n } else if (!this.compact) {\n navState = 'normal'\n content.classList.add('-tosi-sidenav-visible')\n this.style.setProperty('--nav-width', `${this.navSize}px`)\n this.style.setProperty(\n '--content-width',\n `calc(100% - ${this.navSize}px)`\n )\n this.style.setProperty('--margin', '0')\n } else {\n content.classList.remove('-tosi-sidenav-visible')\n this.style.setProperty('--nav-width', '50%')\n this.style.setProperty('--content-width', '50%')\n\n if (this.contentVisible) {\n navState = 'compact/content'\n this.style.setProperty('--margin', '0 0 0 -100%')\n } else {\n navState = 'compact/nav'\n this.style.setProperty('--margin', '0 -100% 0 0')\n }\n }\n\n if (this.value !== navState) {\n this.value = navState\n }\n }\n\n private observer: any\n connectedCallback(): void {\n super.connectedCallback()\n this.contentVisible = this.parts.content.childNodes.length === 0\n globalThis.addEventListener('resize', this.handleResize)\n\n this.observer = new MutationObserver(this.handleResize)\n this.observer.observe(this, { childList: true })\n this.style.setProperty('--side-nav-transition', '0s')\n setTimeout(() => {\n this.style.removeProperty('--side-nav-transition')\n }, 250)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.observer.disconnect()\n }\n\n render(): void {\n super.render()\n this.handleResize()\n }\n}\n\n/** @deprecated Use TosiSidenav instead */\nexport type SideNav = TosiSidenav\n/** @deprecated Use TosiSidenav instead */\nexport const SideNav: typeof TosiSidenav = TosiSidenav\n\nexport const tosiSidenav =\n TosiSidenav.elementCreator() as ElementCreator<TosiSidenav>\n\n/** @deprecated Use tosiSidenav instead */\nexport const sideNav = tosiSidenav\n\n/** @deprecated Use tosiSidenav instead */\nexport const xinSidenav = tosiSidenav\n",
|
|
45
|
-
"/*#\n# doc-browser\n\nThe `tosijs-ui` library provides everything you need to create a self-documented testbed similar\nto the [tosijs-ui documentation site](https://ui.tosijs.net). It's like Storybook but much simpler\nto set up and maintain.\n\n## Quick Start\n\n### 1. Extract Documentation\n\nUse the CLI tool to extract documentation from your source files:\n\n```bash\nnpx tosijs-ui-docs --dirs src,README.md --output docs.json\n```\n\nThis scans for:\n\n- `.md` files (uses entire content)\n- Multi-line comments starting with `/*#` in `.ts`, `.js`, `.css` files\n\n### 2. Create Your Doc Browser\n\n```typescript\nimport { createDocBrowser } from 'tosijs-ui'\nimport * as mylib from './my-library.js'\nimport docs from './docs.json'\n\nconst browser = createDocBrowser({\n docs,\n context: { mylib },\n projectName: 'My Project',\n projectLinks: {\n github: 'https://github.com/user/project',\n npm: 'https://www.npmjs.com/package/project',\n },\n})\n\ndocument.body.append(browser)\n```\n\n### 3. Add Live Examples in Your Docs\n\nIn your source files or markdown, use code fences. Any sequence of\nhtml, js, and css code examples will be turned in to a live, interactive\nexample.\n\n /*#\n # My Component\n\n This component does amazing things!\n\n ```html\n <my-component></my-component>\n ```\n ```js\n import { myComponent } from 'mylib'\n preview.append(myComponent({ value: 'Hello!' }))\n ```\n ```css\n my-component {\n color: blue;\n }\n ```\n */\n\n export class MyComponent extends Component {\n // ...\n }\n\n export const myComponent = MyComponent.elementCreator({\n tag: 'my-component'\n })\n\n## Documentation Format\n\n### Inline Comments\n\nStart multi-line comments with `/*#` to mark them as documentation:\n\n```typescript\n/*#\n# Component Name\n\nDescription and examples go here...\n*/\n```\n\n### Metadata\n\nControl sort order with JSON metadata:\n\n```\n<!--{ \"pin\": \"bottom\" }-->\n```\n\nor\n\n```\n/*{ \"pin\": \"bottom\" }*/\n```\n\n## Programmatic API\n\n```typescript\nimport { extractDocs, saveDocsJSON } from 'tosijs-ui'\n\nconst docs = extractDocs({\n dirs: ['src', 'README.md'],\n ignore: ['node_modules', 'dist'],\n})\n\nsaveDocsJSON(docs, './docs.json')\n\n// Or use the docs directly\nimport { createDocBrowser } from 'tosijs-ui'\nconst browser = createDocBrowser({ docs, context: { mylib } })\n```\n\n## createDocBrowser Options\n\n```typescript\ninterface DocBrowserOptions {\n docs: Doc[] // Array of documentation objects\n context?: Record<string, any> // Modules for live examples\n projectName?: string // Display name\n projectLinks?: ProjectLinks // Links to show in header\n navSize?: number // Nav width (default: 200)\n minSize?: number // Min width before compact (default: 600)\n}\n\ninterface ProjectLinks {\n github?: string\n npm?: string\n discord?: string\n blog?: string\n tosijs?: string\n bundle?: string\n cdn?: string\n [key: string]: string | undefined\n}\n```\n\n## See Also\n\nThe `tosijs-ui` demo is a complete working example. See:\n\n- `/tosijs-site.config.ts` - How this repo configures its doc site (`defineSiteConfig` / `tosijs-ui/site`)\n- `/src/doc-system/site/docs.ts` - The extraction tool (`extractDocs`, exported from `tosijs-ui/site`)\n- `/src/doc-browser.ts` - The createDocBrowser implementation\n*/\n/*{\"pin\":\"bottom\",\"parent\":\"Appendices\"}*/\n\nimport {\n elements,\n vars,\n varDefault,\n bindings,\n touch,\n getListItem,\n debounce,\n tosi,\n StyleSheet,\n XinStyleSheet,\n} from 'tosijs'\nimport {\n buildSlugMap,\n pathForSlug,\n filenameForPath,\n} from './doc-system/routing'\nimport { buildNavTree, NavNode } from './doc-system/nav-tree'\nimport { renderDocMarkdown } from './doc-system/render'\nimport { pageTitle } from './doc-system/doc-title'\nimport { LiveExample, testManager } from './live-example'\nimport { TestResults } from './live-example/test-harness'\nimport { tosiSidenav, TosiSidenav } from './side-nav'\nimport { icons } from './icons'\nimport { tosiLocalized } from './localize'\nimport { popMenu } from './menu'\nimport { codeEditor, CodeEditor } from './code-editor'\nimport { tosiDiff } from './diff'\n\n// Types for global test results\nexport interface PageTestResults {\n passed: boolean\n tests: TestResults['tests']\n totalPassed: number\n totalFailed: number\n}\n\nexport interface DocTestResults {\n passed: number\n failed: number\n pages: Record<string, PageTestResults>\n}\n\ndeclare global {\n interface Window {\n __docTestResults?: Promise<DocTestResults>\n }\n}\n\nconst {\n div,\n span,\n a,\n header,\n button,\n template,\n input,\n h2,\n details,\n summary,\n ul,\n li,\n} = elements\n\n// Test colors\nconst testColor = {\n pass: varDefault.testColorPass('#0a0'),\n fail: varDefault.testColorFail('#c00'),\n running: varDefault.testColorRunning('#fa0'),\n}\n\n// Test indicator styles - widget inherits button styles from base stylesheet\nconst testIndicatorStyleSpec: XinStyleSheet = {\n '.view-source': { opacity: '0.9' },\n '.view-source:hover': { opacity: '1' },\n '@keyframes test-pulse': {\n '0%, 100%': { opacity: '1' },\n '50%': { opacity: '0.7' },\n },\n '@keyframes test-appear': {\n from: { opacity: '0', transform: 'scale(0.8)' },\n to: { opacity: '1', transform: 'scale(1)' },\n },\n '@keyframes test-fade': {\n '0%, 20%': { opacity: '1', transform: 'scale(1)' },\n '70%': { opacity: '1', transform: 'scale(1.1)' },\n '100%': { opacity: '0', transform: 'scale(0.9)', pointerEvents: 'none' },\n },\n\n // Hide when tests disabled\n 'body:not(.tests-enabled) .doc-link::after, body:not(.tests-enabled) .test-widget':\n {\n display: 'none !important',\n },\n\n // Nav link dot indicators\n '.doc-link.-test-passed::after, .doc-link.-test-failed::after': {\n content: \"''\",\n width: vars.fontSize50,\n height: vars.fontSize50,\n borderRadius: '50%',\n marginLeft: vars.spacing50,\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n '.doc-link.-test-passed::after': { background: testColor.pass },\n '.doc-link.-test-failed::after': {\n background: testColor.fail,\n animation: 'test-pulse 2s ease-in-out infinite',\n },\n\n // Floating widget - position and colors only, inherits button structure\n '.test-widget': {\n _testBg: testColor.running,\n position: 'fixed',\n bottom: vars.spacing,\n right: vars.spacing,\n zIndex: '1000',\n background: vars.testBg,\n color: 'white',\n gap: vars.spacing50,\n },\n '.test-widget[hidden]': { display: 'none' },\n '.test-widget.-running': {\n _testBg: testColor.running,\n animation:\n 'test-appear 0.3s ease-out, test-pulse 2s ease-in-out 0.3s infinite',\n },\n '.test-widget.-passed': {\n _testBg: testColor.pass,\n animation: 'test-fade 3s ease-out forwards',\n },\n '.test-widget.-failed': {\n _testBg: testColor.fail,\n animation: 'test-pulse 2s ease-in-out infinite',\n },\n\n // Count badge\n '.test-widget .count': {\n background: 'white',\n color: vars.testBg,\n borderRadius: '50%',\n width: vars.lineHeight,\n height: vars.lineHeight,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontWeight: 'bold',\n },\n\n // Deep-linked example (e.g. arriving at /slug/#example-2): brief highlight pulse\n '@keyframes example-target-pulse': {\n from: { boxShadow: `0 0 0 3px ${varDefault.accent('#007aff')}` },\n to: { boxShadow: '0 0 0 3px transparent' },\n },\n '.example-target': {\n animation: 'example-target-pulse 1.5s ease-out',\n borderRadius: vars.roundedRadius,\n },\n}\n\nexport interface Doc {\n text: string\n title: string\n filename: string\n path: string\n pin?: string\n hidden?: boolean\n testStatus?: 'passed' | 'failed' | 'pending'\n // Build-time transpiled JS for this doc's `tjs` examples ([source, {dialect, js}]\n // entries), attached to docs.json by generate-site so client-side navigation runs\n // examples without the tjs transpiler. See self-contained-examples-plan.md.\n bakes?: Array<[string, { dialect: string; js: string }]>\n}\n\nexport interface ProjectLinks {\n github?: string\n npm?: string\n discord?: string\n blog?: string\n tosijs?: string\n bundle?: string\n cdn?: string\n [key: string]: string | undefined\n}\n\n/** A configurable link for the header bar or the overflow menu. */\nexport interface LinkItem {\n href: string\n label: string\n /** optional icon name (from `icons`); falls back to the text label if unknown */\n icon?: string\n}\n\n/**\n * How the doc browser maps docs to URLs.\n * - 'query' (default, legacy): single-page app, links are `?filename`.\n * - 'path': clean per-page URLs (`/slug/`), for the static pre-rendered site\n * driven by <tosi-doc-system>. Requires a real page to exist at each path.\n * - 'memory': self-contained — navigation never touches window.history/location\n * and the instance ignores the page URL. For an embedded/nested browser (a\n * live demo, a floating help panel). Drive it via `initialRoute` +\n * `onRouteChange`, and the returned element's `.navigate(slug)` method.\n */\nexport type DocRoutingMode = 'query' | 'path' | 'memory'\n\nexport interface DocBrowserOptions {\n docs: Doc[]\n context?: Record<string, any>\n projectName?: string\n projectLinks?: ProjectLinks\n navSize?: number\n minSize?: number\n routing?: DocRoutingMode\n /**\n * Memory routing only: the slug to show first (instead of the page URL / first\n * doc). Lets a host mount the browser already pointed at a specific doc.\n */\n initialRoute?: string\n /**\n * Memory routing only: called with the current doc's slug whenever in-app\n * navigation happens, so a host can reflect it (e.g. to an attribute).\n */\n onRouteChange?: (slug: string) => void\n /**\n * Header-bar links. When provided, these replace the legacy `projectLinks` icon\n * set in the header (each renders as an icon if `icon` names a known icon, else\n * as its text label). `projectLinks` is still used for the logo and view-source.\n */\n navbarLinks?: LinkItem[]\n /**\n * Pre-rendered content for the landing doc to ADOPT in place (true hydration).\n * When provided, the current page's already-rendered markdown is left untouched\n * — only live examples are wired up — instead of being re-rendered from text.\n * Used by <tosi-doc-system>. Subsequent navigation renders from doc text.\n */\n contentElement?: HTMLElement\n}\n\n// Monotonic per-page counter so each createDocBrowser() call gets a distinct\n// tosi() registry key (see stateKey below) and two browsers can't share state.\nlet docBrowserSeq = 0\n\nexport function createDocBrowser(options: DocBrowserOptions): HTMLElement {\n const {\n docs,\n context = {},\n projectName = '',\n projectLinks = {},\n navSize = 200,\n minSize = 600,\n routing = 'query',\n initialRoute,\n onRouteChange,\n navbarLinks,\n contentElement,\n } = options\n\n // Memory routing is fully self-contained: it never reads or writes\n // window.history/location, so an embedded or nested browser can't hijack the\n // host page's URL (or recurse into it).\n const memoryRouting = routing === 'memory'\n\n // Initialize testStatus on all docs so tosi can track it\n for (const doc of docs) {\n doc.testStatus = undefined\n }\n\n // Routing abstraction — keeps the legacy `?filename` SPA behavior the default,\n // while letting <tosi-doc-system> drive clean `/slug/` URLs off the same docs.\n // Both path and memory routing key off slugs; only legacy query routing doesn't.\n const slugMap = routing === 'query' ? {} : buildSlugMap(docs)\n const slugFor = (filename: string): string => slugMap[filename] ?? filename\n const filenameForSlug = (slug: string): string => {\n for (const d of docs) if (slugFor(d.filename) === slug) return d.filename\n return ''\n }\n const hrefFor = (filename: string): string =>\n routing === 'query' ? `?${filename}` : pathForSlug(slugFor(filename))\n const filenameFromLocation = (): string => {\n // Memory routing ignores the page URL entirely — it starts at initialRoute.\n if (memoryRouting) return initialRoute ? filenameForSlug(initialRoute) : ''\n return routing === 'path'\n ? filenameForPath(document.location.pathname, slugMap)\n : document.location.search !== ''\n ? document.location.search.substring(1).split('&')[0]\n : ''\n }\n\n // Resolve a content-link anchor to one of our docs' filenames, in either the\n // legacy `?filename` form or a clean `/slug/` path — or null for external\n // links, in-page anchors, mailto:, downloads, etc. Used to navigate internal\n // doc links client-side (via go()) instead of triggering a full page reload,\n // and to canonicalize their hrefs for the current routing mode.\n const docFilenameForHref = (anchor: HTMLAnchorElement): string | null => {\n const raw = anchor.getAttribute('href') || ''\n if (raw === '' || raw.startsWith('#')) return null\n let url: URL\n try {\n url = new URL(raw, document.location.href)\n } catch {\n return null\n }\n if (url.origin !== document.location.origin) return null // external\n const known = (filename: string): string | null =>\n docs.some((doc) => doc.filename === filename) ? filename : null\n // Legacy `?filename` form: a single bare filename, not a real query string.\n const query = url.search.replace(/^\\?/, '')\n if (query !== '' && !query.includes('=') && !query.includes('&')) {\n const filename = known(decodeURIComponent(query))\n if (filename) return filename\n }\n // Clean `/slug/` path form (only meaningful when slugs are in play).\n if (!memoryRouting && routing !== 'query') {\n const filename = known(filenameForPath(url.pathname, slugMap))\n if (filename) return filename\n }\n return null\n }\n\n const docName = filenameFromLocation() || docs[0]?.filename || 'README.md'\n\n const currentDoc = docs.find((doc) => doc.filename === docName) || docs[0]\n\n // tosi() registers its top-level keys in a GLOBAL observable registry, so two\n // doc browsers on one page (e.g. a page whose live example embeds a nested\n // <tosi-doc-system>) would BOTH register `app` and share it — the second wins,\n // so the outer browser's nav / currentDoc / edit-source silently read the\n // nested one's doc. Give each instance its own key. (This is the same collision\n // the live-example docs warn about: never register a generic `app`.)\n const stateKey = `docBrowser${docBrowserSeq++}`\n const state = tosi({\n [stateKey]: {\n docs,\n currentDoc,\n compact: false,\n },\n })\n const app = state[stateKey]\n\n // Assigned by the hierarchical nav builder (path routing); re-applies current\n // highlight, test status, search visibility, and auto-open imperatively.\n // resetOpen=true collapses every section except the current doc's.\n let refreshNav: (resetOpen?: boolean) => void = () => {}\n\n // Test result tracking\n const pageTestResults: Record<string, PageTestResults> = {}\n let testResultsResolve: ((results: DocTestResults) => void) | undefined\n let backgroundTestsStarted = false\n let pagesWithTests = 0\n let pagesTested = 0\n\n // Set up global promise for scriptable browser integration. A memory-routed\n // (embedded) browser must not clobber the host page's global.\n if (!memoryRouting) {\n window.__docTestResults = new Promise((resolve) => {\n testResultsResolve = resolve\n })\n }\n\n const updateDocTestStatus = (filename: string) => {\n const results = pageTestResults[filename]\n // Callback receives bare object, return is proxy - cast to work with both\n const doc = (app.docs as unknown as Doc[]).find(\n (d) => d.filename === filename\n )\n if (doc) {\n doc.testStatus = results\n ? results.passed\n ? 'passed'\n : 'failed'\n : undefined\n }\n refreshNav()\n }\n\n const checkAllTestsComplete = () => {\n if (pagesTested >= pagesWithTests && testResultsResolve) {\n const allResults: DocTestResults = {\n passed: 0,\n failed: 0,\n pages: pageTestResults,\n }\n\n for (const pageResults of Object.values(pageTestResults)) {\n allResults.passed += pageResults.totalPassed\n allResults.failed += pageResults.totalFailed\n }\n\n testResultsResolve(allResults)\n testResultsResolve = undefined\n\n // Post results to dev server on localhost (not from test iframes)\n if (isLocalhost && !isTestFrame) {\n fetch('/report', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(allResults),\n }).catch(() => {\n // Ignore errors - server may not support this endpoint\n })\n }\n }\n }\n\n const isLocalhost =\n window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1'\n\n const handleTestComplete = (event: CustomEvent) => {\n const { results } = event.detail as {\n results: TestResults\n element: LiveExample\n }\n const filename = String(app.currentDoc.filename)\n\n // Reset page results each time (don't accumulate across reloads)\n pageTestResults[filename] = {\n passed: results.failed === 0,\n tests: [...results.tests],\n totalPassed: results.passed,\n totalFailed: results.failed,\n }\n\n updateDocTestStatus(filename)\n }\n\n // Track when a page finishes loading all its tests\n const markPageTested = (_filename: string) => {\n pagesTested++\n checkAllTestsComplete()\n updateTestWidget()\n }\n\n bindings.docLink = {\n toDOM(elt, filename) {\n elt.setAttribute('href', hrefFor(filename))\n ;(elt as HTMLElement).dataset.filename = filename\n },\n }\n\n bindings.current = {\n toDOM(elt, currentFile) {\n elt.classList.toggle(\n 'current',\n currentFile === (elt as HTMLElement).dataset.filename\n )\n },\n }\n\n bindings.testStatus = {\n toDOM(elt, status) {\n elt.classList.remove('-test-passed', '-test-failed')\n if (status === 'passed') {\n elt.classList.add('-test-passed')\n } else if (status === 'failed') {\n elt.classList.add('-test-failed')\n }\n },\n }\n\n const filterDocs = debounce(() => {\n const needle = searchField.value.toLocaleLowerCase()\n app.docs.forEach((doc: any) => {\n doc.hidden =\n !doc.title.toLocaleLowerCase().includes(needle) &&\n !doc.text.toLocaleLowerCase().includes(needle)\n })\n touch(app.docs)\n // resetOpen: when the field is cleared this collapses back to the current\n // section; while typing, matching sections expand via the needle branch.\n refreshNav(true)\n })\n\n const searchField = input({\n slot: 'nav',\n placeholder: 'search',\n type: 'search',\n style: {\n width: 'calc(100% - 10px)',\n margin: '5px',\n },\n onInput: filterDocs,\n })\n\n // Memory routing is decoupled from the page URL, so it ignores browser\n // back/forward (the host owns history, if any).\n if (!memoryRouting) {\n window.addEventListener('popstate', () => {\n // Back/forward while the source editor is open with unsaved changes: the\n // URL already moved, so on \"keep editing\" we push it back to match the\n // still-open editor; on discard we close the editor and navigate.\n if (editUI) {\n if (\n editorHasUnsavedChanges() &&\n !window.confirm('Discard unsaved changes to the source?')\n ) {\n const href = hrefFor(String(editUI.doc.filename))\n window.history.pushState({ href }, '', href)\n return\n }\n closeEditor()\n }\n navigateTo(filenameFromLocation())\n })\n\n // Reload / tab-close / external navigation: native \"leave site?\" prompt when\n // there are unsaved source edits (the only guard the browser allows here).\n window.addEventListener('beforeunload', (event: BeforeUnloadEvent) => {\n if (editorHasUnsavedChanges()) {\n event.preventDefault()\n event.returnValue = ''\n }\n })\n }\n\n // This instance's own sidenav. Captured from its own change event (below), so the\n // header nav toggle drives THIS doc-browser — not `document.querySelector('tosi-\n // sidenav')`, which returns the FIRST sidenav in the document (an OUTER instance\n // when this one is an embedded, memory-routed browser).\n let sidenav: TosiSidenav | null = null\n\n const headerContent: any[] = [\n button(\n {\n class: 'iconic',\n style: { color: vars.linkColor },\n title: 'navigation',\n bind: {\n value: app.compact,\n binding: {\n toDOM(element, compact) {\n element.style.display = compact ? '' : 'none'\n ;(element.nextSibling as HTMLElement).style.display = compact\n ? ''\n : 'none'\n },\n },\n },\n onClick() {\n if (sidenav) sidenav.contentVisible = !sidenav.contentVisible\n },\n },\n icons.menu()\n ),\n span({ style: { flex: '0 0 10px' } }),\n ]\n\n if (projectName) {\n headerContent.push(\n a(\n {\n href: '/',\n style: {\n display: 'flex',\n alignItems: 'center',\n borderBottom: 'none',\n },\n },\n projectLinks.tosijs\n ? icons.tosiUi({\n style: { _xinIconSize: 40, marginRight: 10 },\n })\n : span(),\n h2(projectName)\n )\n )\n }\n\n headerContent.push(span({ class: 'elastic' }))\n\n // A header link renders as an icon (if `icon` names a known icon) or its label.\n const headerLink = (link: LinkItem) => {\n const iconFactory = link.icon ? (icons as any)[link.icon] : undefined\n return a(\n {\n class: iconFactory ? 'iconic' : '',\n title: link.label,\n target: '_blank',\n href: link.href,\n },\n iconFactory ? iconFactory() : link.label\n )\n }\n\n if (navbarLinks) {\n // Configurable link set.\n navbarLinks.forEach((link) => headerContent.push(headerLink(link)))\n } else {\n // Legacy: derive header icons from the known `projectLinks` keys.\n const legacy: Array<[string | undefined, string, string]> = [\n [projectLinks.tosijs, 'tosi', 'tosijs'],\n [projectLinks.discord, 'discord', 'discord'],\n [projectLinks.blog, 'blog', 'blog'],\n [projectLinks.github, 'github', 'github'],\n [projectLinks.npm, 'npm', 'npmjs'],\n ]\n for (const [href, icon, label] of legacy) {\n if (href) headerContent.push(headerLink({ href, label, icon }))\n }\n }\n\n // The rendered-markdown content area. When hydrating a static page we ADOPT the\n // pre-rendered node so the landing page's HTML is never re-rendered; otherwise we\n // render from doc text. Every navigation funnels through navigateTo() -> showDoc().\n const docContent = contentElement || div()\n docContent.classList.add('doc-content')\n Object.assign(docContent.style, {\n display: 'block',\n // Same var the pre-hydration `:not(:defined)` layout uses (doc-system-styles.ts).\n // This node is ADOPTED from the pre-rendered page, so if the two boxes disagree\n // the content jumps the instant we hydrate. The fallback keeps a standalone\n // doc-browser (no doc-system stylesheet) working.\n maxWidth: 'var(--doc-content-max-width, 44em)',\n margin: 'auto',\n padding: '0 1em',\n overflow: 'hidden',\n })\n\n // Adoption is zero-flash hydration of a statically pre-rendered page: it only\n // holds for the page's own path-routed instance, whose static `.doc-content`\n // matches the initial doc. A memory-routed embed's initial doc\n // (initialRoute/docs[0]) has no relation to whatever happens to sit inside the\n // host element (often an empty placeholder), so always render it fresh.\n // Canonicalize internal content links to the current routing mode's href and\n // tag them — so copy-link / right-click / no-JS land on the right page, and a\n // left-click can be short-circuited to client-side nav. Authored docs use the\n // routing-agnostic `?filename` form (the only one resolvable in every mode);\n // this rewrites them to `/slug/` on the static path-routed site, etc.\n const rewriteContentLinks = (): void => {\n for (const anchor of docContent.querySelectorAll('a')) {\n const filename = docFilenameForHref(anchor as HTMLAnchorElement)\n if (filename !== null) {\n anchor.setAttribute('href', hrefFor(filename))\n ;(anchor as HTMLElement).dataset.docLink = filename\n }\n }\n }\n\n // Deep-link to a specific live example: arriving at /slug/#example-2 (or a\n // custom ```js#my-id anchor) scrolls it into view with a brief highlight. The\n // example ids are set by insertExamples, so this runs after it. Skipped in\n // memory routing (which must never touch window.location).\n const scrollToHashExample = (): void => {\n if (memoryRouting) return\n const hash = location.hash.replace(/^#/, '')\n if (!hash) return\n requestAnimationFrame(() => {\n let el: Element | null = null\n try {\n el = docContent.querySelector(`#${CSS.escape(hash)}`)\n } catch {\n el = null\n }\n if (!el) return\n el.scrollIntoView({ block: 'center', behavior: 'smooth' })\n el.classList.add('example-target')\n setTimeout(() => el && el.classList.remove('example-target'), 1600)\n })\n }\n\n let adoptInitialContent = contentElement !== undefined && !memoryRouting\n const showDoc = (doc: Doc) => {\n if (adoptInitialContent) {\n adoptInitialContent = false // leave the pre-rendered HTML untouched\n } else {\n // Pass the doc's build-time tjs bakes so this client-rendered page embeds the\n // same hidden transpiled <script>s the pre-rendered page has — examples run\n // without loading the tjs transpiler. See self-contained-examples-plan.md.\n docContent.innerHTML = renderDocMarkdown(doc.text, {\n bakes: doc.bakes ? new Map(doc.bakes) : undefined,\n })\n }\n rewriteContentLinks()\n // Stamp each example with its source file (for the source↔doc map). doc.path\n // is the extracted file (.md, or a source file with doc comments).\n LiveExample.insertExamples(docContent, context, doc.path || undefined)\n scrollToHashExample()\n if (routing === 'path') {\n // The SAME rule the static generator used for this page's <head> (doc-title.ts).\n // This used to re-derive it — ignoring `headTitle` and re-suffixing a title that\n // already ended in the project name — so the home page's title flipped from\n // \"tosijs-ui — robust, dependency-free web components\" to \"tosijs-ui — tosijs-ui\"\n // the moment the bundle loaded. Issue #6, and the only thing on the page that\n // visibly moved on hydration.\n document.title = pageTitle(doc, projectName)\n }\n }\n // Always resolve to the RAW doc from the original array — docs reached via the\n // app.docs proxy expose BoxedScalar fields (doc.text), which break marked().\n const navigateTo = (filename: string) => {\n const doc = docs.find((d) => d.filename === filename) || docs[0]\n app.currentDoc = doc as any\n showDoc(doc)\n refreshNav(true)\n }\n\n // User-initiated navigation: record the new location (history for path/query,\n // the onRouteChange callback for memory) and then render the doc. Every nav\n // click funnels through here so memory mode never touches window.history.\n const go = (filename: string) => {\n // If the source editor is open with unsaved changes, confirm before leaving;\n // on confirm it discards + closes, otherwise navigation is aborted.\n if (!confirmLeaveEditor()) return\n if (memoryRouting) {\n onRouteChange?.(slugFor(filename))\n } else {\n const href = hrefFor(filename)\n window.history.pushState({ href }, '', href)\n }\n navigateTo(filename)\n }\n\n // Intercept clicks on internal doc links anywhere in the rendered content so\n // they navigate client-side instead of reloading the page. Plain left-clicks\n // only — modified clicks / middle-clicks / new-tab / download links fall\n // through to the browser. Works for both freshly-rendered and statically\n // pre-rendered (adopted) content, resolving the href at click time.\n docContent.addEventListener('click', (event: MouseEvent) => {\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n )\n return\n const anchor = (event.target as HTMLElement).closest(\n 'a'\n ) as HTMLAnchorElement | null\n if (\n !anchor ||\n anchor.target === '_blank' ||\n anchor.hasAttribute('download')\n )\n return\n const filename = docFilenameForHref(anchor)\n if (filename === null) return\n event.preventDefault()\n go(filename)\n })\n\n // ── Edit page source (Foundation B / #4) ──────────────────────────────────\n // The \"view source\" affordance opens a menu: edit the whole source file in a\n // code editor that fills the content area, preview the result in-browser, and\n // save (dev: write the repo file via /__docstore/source; the watcher rebuilds)\n // or download it. Source is read from the dev endpoint, falling back to GitHub\n // raw, so editing works on the deployed site too (save there = download).\n const editorModeFor = (p: string): string =>\n p.endsWith('.md')\n ? 'markdown'\n : p.endsWith('.css')\n ? 'css'\n : p.endsWith('.ts') || p.endsWith('.tjs')\n ? 'typescript'\n : 'javascript'\n\n // Pure mirror of docs.ts extraction: a .md *is* the markdown; a source file is\n // the concatenation of its doc-comment blocks. Lets us preview an edit in the\n // browser with no rebuild.\n const docMarkdownFromSource = (content: string, p: string): string => {\n if (p.endsWith('.md')) return content\n const blocks = content.match(/\\/\\*#[\\s\\S]+?\\*\\//g) || []\n return blocks.map((s) => s.substring(3, s.length - 2).trim()).join('\\n\\n')\n }\n\n const githubRawUrl = (p: string): string | null => {\n const gh = projectLinks.github\n if (!gh || !p) return null\n const m = gh.match(/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?\\/?$/)\n return m\n ? `https://raw.githubusercontent.com/${m[1]}/${m[2]}/main/${p}`\n : null\n }\n\n const loadSource = async (p: string): Promise<string | null> => {\n try {\n const r = await fetch(`/__docstore/source?file=${encodeURIComponent(p)}`)\n // Accept only a genuine source response. A misconfigured dev server (no\n // editableSources) or a SPA-rewrite host answers an unknown path with\n // index.html at status 200 — taking that would load the PAGE as the source.\n // Reject HTML and fall through to the GitHub raw source instead.\n const contentType = r.headers.get('content-type') || ''\n if (r.ok && !/text\\/html/i.test(contentType)) return await r.text()\n } catch {\n // dev endpoint not available — fall through to GitHub raw\n }\n const raw = githubRawUrl(p)\n if (raw) {\n try {\n const r = await fetch(raw)\n if (r.ok) return await r.text()\n } catch {\n // offline / no network\n }\n }\n return null\n }\n\n const saveSourceToDisk = async (\n p: string,\n content: string\n ): Promise<boolean> => {\n try {\n const r = await fetch('/__docstore/source', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ file: p, content }),\n })\n return r.ok\n } catch {\n return false\n }\n }\n\n const downloadText = (filename: string, content: string): void => {\n const url = URL.createObjectURL(new Blob([content], { type: 'text/plain' }))\n const link = a({ href: url, download: filename }) as HTMLAnchorElement\n link.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n }\n\n let editUI: {\n editor: CodeEditor\n doc: Doc\n view: 'edit' | 'preview' | 'diff'\n // The source as loaded (and re-baselined on save) — compared against the\n // editor value to detect unsaved changes when navigating away.\n original: string\n } | null = null\n\n const editorHasUnsavedChanges = (): boolean =>\n editUI !== null && editUI.editor.value !== editUI.original\n\n // Tear the editor down without re-rendering the current doc (the caller is\n // about to navigate). exitEditSource() restores the current doc instead.\n const closeEditor = (): void => {\n if (!editUI) return\n editUI.editor.remove()\n editUI = null\n docContent.style.display = ''\n }\n\n // Called before in-app navigation: if the editor is open with unsaved changes,\n // confirm discarding them. Returns false to abort navigation.\n const confirmLeaveEditor = (): boolean => {\n if (!editUI) return true\n if (\n editorHasUnsavedChanges() &&\n !window.confirm('Discard unsaved changes to the source?')\n ) {\n return false\n }\n closeEditor()\n return true\n }\n\n // Switch the source editor between the raw editor, the rendered preview, and a\n // diff of the edits against the loaded original. preview/diff render into the\n // doc-content area; edit shows the CodeEditor.\n const setSourceView = (view: 'edit' | 'preview' | 'diff'): void => {\n if (!editUI) return\n editUI.view = view\n if (view === 'preview') {\n docContent.innerHTML = renderDocMarkdown(\n docMarkdownFromSource(editUI.editor.value, editUI.doc.path)\n )\n rewriteContentLinks()\n LiveExample.insertExamples(\n docContent,\n context,\n editUI.doc.path || undefined\n )\n } else if (view === 'diff') {\n docContent.replaceChildren(\n tosiDiff({\n original: editUI.original,\n modified: editUI.editor.value,\n style: { display: 'block', width: '100%', height: '100%' },\n })\n )\n }\n docContent.style.display = view === 'edit' ? 'none' : ''\n editUI.editor.style.display = view === 'edit' ? 'block' : 'none'\n }\n\n const exitEditSource = (): void => {\n if (!editUI) return\n const filename = String(app.currentDoc.filename)\n closeEditor()\n navigateTo(filename) // restore the canonical rendered doc\n }\n\n const saveSourceEdit = async (): Promise<void> => {\n if (!editUI) return\n const { doc, editor } = editUI\n const ok = await saveSourceToDisk(doc.path, editor.value)\n if (ok) {\n editUI.original = editor.value // saved — this is the new clean baseline\n setSourceView('preview') // the watcher also rebuilds in the background\n } else {\n // No write endpoint (deployed site) — hand the file back for the repo.\n downloadText(doc.path.split('/').pop() || 'source.txt', editor.value)\n }\n }\n\n const enterEditSource = async (doc: Doc): Promise<void> => {\n if (editUI) return\n const content = await loadSource(doc.path)\n if (content === null) {\n window.alert(`Could not load source for ${doc.path}`)\n return\n }\n const editor = codeEditor({ mode: editorModeFor(doc.path) }) as CodeEditor\n // No toolbar — the Source menu carries the edit controls (it adapts while\n // editing), so the editor fills the whole content area.\n editor.style.cssText =\n 'display:block; width:100%; height:100%; border:none;'\n editor.value = content\n const container = docContent.parentElement as HTMLElement\n container.append(editor)\n editUI = { editor, doc, view: 'edit', original: content }\n setSourceView('edit')\n }\n\n const openSourceMenu = (target: HTMLElement): void => {\n const doc = docs.find(\n (d) => String(d.filename) === String(app.currentDoc.filename)\n )\n if (!doc) return\n const fileName = (path: string) => path.split('/').pop() || path\n\n // While editing, the Source menu becomes the editor's controls (no separate\n // toolbar). Otherwise it offers entry points: edit, view on GitHub, download.\n const menuItems = editUI\n ? [\n ...(editUI.view !== 'edit'\n ? [\n {\n caption: 'Edit',\n icon: 'edit',\n action: () => setSourceView('edit'),\n },\n ]\n : []),\n ...(editUI.view !== 'preview'\n ? [\n {\n caption: 'Preview',\n icon: 'eye',\n action: () => setSourceView('preview'),\n },\n ]\n : []),\n {\n caption: 'View changes',\n icon: 'code',\n action: () => setSourceView('diff'),\n enabled: () => editorHasUnsavedChanges(),\n },\n null,\n {\n caption: 'Save to source',\n icon: 'save',\n action: () => void saveSourceEdit(),\n },\n {\n caption: 'Download',\n icon: 'download',\n action: () =>\n downloadText(fileName(editUI!.doc.path), editUI!.editor.value),\n },\n null,\n { caption: 'Close editor', icon: 'x', action: exitEditSource },\n ]\n : [\n {\n caption: 'Edit page source',\n icon: 'edit',\n action: () => void enterEditSource(doc),\n },\n ...(projectLinks.github && doc.path && doc.path !== 'README.md'\n ? [\n {\n caption: 'View on GitHub',\n icon: 'github',\n action: () => {\n window.open(\n `${projectLinks.github}/blob/main/${doc.path}`,\n '_blank'\n )\n },\n },\n ]\n : []),\n {\n caption: 'Download source',\n icon: 'download',\n action: () =>\n void loadSource(doc.path).then((c) => {\n if (c !== null) downloadText(fileName(doc.path), c)\n }),\n },\n ]\n\n popMenu({\n target,\n // The trigger is position:fixed at the top-right; `auto` placement opens\n // upward into zero space and collapses the menu, so open below-left.\n position: 'sw',\n menuItems,\n })\n }\n\n // ── Hierarchical nav (path routing) ───────────────────────────────────────\n // Build nested <details> from the doc tree; current-highlight, test status,\n // search visibility, and auto-open are applied imperatively by refreshNav.\n const navStyle = {\n slot: 'nav',\n // .doc-nav so the shared nav CSS (list reset, indentation) matches the\n // runtime nav too, not just the static pre-rendered <nav class=\"doc-nav\">.\n class: 'doc-nav',\n style: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: 'calc(100% - 44px)',\n overflowY: 'scroll',\n },\n }\n\n const buildHierarchicalNav = (): HTMLElement => {\n const roots = buildNavTree(docs as any, slugMap)\n const leaves = new Map<string, { li: HTMLElement; link: HTMLElement }>()\n const branches: {\n li: HTMLElement\n el: HTMLDetailsElement\n link: HTMLElement\n filename: string\n subtree: string[]\n }[] = []\n\n const subtreeFilenames = (node: NavNode<any>): string[] => {\n const out = [node.doc.filename]\n for (const c of node.children) out.push(...subtreeFilenames(c))\n return out\n }\n\n const navClick = (doc: Doc) => (event: Event) => {\n // Use the href from the closure, not the event — the click can land on a\n // child of the <a> (the localized label), so event.currentTarget/target\n // isn't reliably the anchor.\n const nav = (event.target as HTMLElement).closest(\n 'tosi-sidenav'\n ) as TosiSidenav | null\n if (nav) nav.contentVisible = true\n go(String(doc.filename))\n event.preventDefault()\n const results = pageTestResults[doc.filename]\n if (results && !results.passed) {\n setTimeout(() => {\n const failed = document.querySelector('tosi-example.-test-failed')\n if (failed)\n failed.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }, 100)\n }\n }\n\n const renderNode = (node: NavNode<any>): HTMLElement => {\n const link = a(\n {\n class: 'doc-link',\n href: hrefFor(node.doc.filename),\n onClick: navClick(node.doc),\n },\n tosiLocalized(node.doc.title)\n )\n if (node.children.length === 0) {\n const item = li(link)\n leaves.set(node.doc.filename, { li: item, link })\n return item\n }\n const det = details(\n summary(link),\n ul(...node.children.map(renderNode))\n ) as HTMLDetailsElement\n const item = li(det)\n branches.push({\n li: item,\n el: det,\n link,\n filename: node.doc.filename,\n subtree: subtreeFilenames(node),\n })\n return item\n }\n\n const root = div(navStyle, ul(...roots.map(renderNode)))\n\n // Search is computed straight from the raw docs (plain strings) — going\n // through app.docs gives BoxedScalars / unreliable write-through.\n const matchesSearch = (filename: string, needle: string): boolean => {\n if (!needle) return true\n const doc = docs.find((d) => d.filename === filename) as any\n return (\n !!doc &&\n (String(doc.title).toLocaleLowerCase().includes(needle) ||\n String(doc.text).toLocaleLowerCase().includes(needle))\n )\n }\n const applyStatus = (\n link: HTMLElement,\n filename: string,\n current: string\n ) => {\n link.classList.toggle('current', filename === current)\n const r = pageTestResults[filename]\n link.classList.toggle('-test-passed', !!r && r.passed)\n link.classList.toggle('-test-failed', !!r && !r.passed)\n }\n\n refreshNav = (resetOpen = false) => {\n // app.currentDoc.filename is a BoxedScalar; coerce so === / includes work.\n const cur = app.currentDoc as any\n const current = cur && cur.filename != null ? String(cur.filename) : ''\n const needle = searchField.value.trim().toLocaleLowerCase()\n\n // Use inline display (not the [hidden] attr): an author `display` rule on\n // .doc-nav li would override [hidden]'s display:none.\n for (const [filename, { li: item, link }] of leaves) {\n item.style.display = matchesSearch(filename, needle) ? '' : 'none'\n applyStatus(link, filename, current)\n }\n for (const { li: item, el, link, filename, subtree } of branches) {\n // Visible if the section name matches, or any descendant leaf is shown.\n const visible =\n matchesSearch(filename, needle) ||\n subtree.some(\n (fn) =>\n leaves.has(fn) && leaves.get(fn)!.li.style.display !== 'none'\n )\n item.style.display = visible ? '' : 'none'\n applyStatus(link, filename, current)\n // While searching, expand sections with matches. On navigation/clear\n // (resetOpen), collapse everything except the current doc's section.\n // Otherwise (e.g. test-status refresh) leave user toggles alone.\n if (needle) el.open = visible\n else if (resetOpen) el.open = subtree.includes(current)\n else if (subtree.includes(current)) el.open = true\n }\n }\n refreshNav(true)\n return root\n }\n\n const navContent =\n routing !== 'query'\n ? buildHierarchicalNav()\n : div(\n {\n ...navStyle,\n bindList: {\n idPath: 'filename',\n hiddenProp: 'hidden',\n value: app.docs,\n },\n },\n template(\n a(\n {\n class: 'doc-link',\n bindCurrent: `${stateKey}.currentDoc.filename`,\n bindDocLink: '^.filename',\n bindTestStatus: '^.testStatus',\n onClick(event: Event) {\n const doc = getListItem(event.target as HTMLElement)\n const nav = (event.target as HTMLElement).closest(\n 'tosi-sidenav'\n ) as TosiSidenav\n nav.contentVisible = true\n go(String((doc as Doc).filename))\n event.preventDefault()\n },\n },\n tosiLocalized({ bindText: '^.title' })\n )\n )\n )\n\n const container = div(\n {\n style: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '100vw',\n height: '100vh',\n overflow: 'hidden',\n },\n },\n header(...headerContent),\n tosiSidenav(\n {\n name: 'Documentation',\n navSize,\n minSize,\n style: {\n flex: '1 1 auto',\n overflow: 'hidden',\n },\n onChange(event: Event) {\n // Scope to the sidenav that fired — and capture it so the header toggle\n // targets THIS instance, not the first sidenav in the document.\n sidenav = (event.target as HTMLElement).closest(\n TosiSidenav.tagName!\n ) as TosiSidenav | null\n if (sidenav) app.compact = sidenav.compact as any\n },\n },\n searchField,\n navContent,\n div(\n {\n style: {\n position: 'relative',\n overflowY: 'scroll',\n height: '100%',\n },\n },\n button(\n {\n class: 'view-source',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n position: 'fixed',\n top: 'calc(var(--xin-header-height, 60px) + 5px)',\n right: '5px',\n // Above the code editor (which fills the content area); below the\n // popped menu (z 1002).\n zIndex: '100',\n fontSize: '0.875em',\n color: 'var(--brand-color, inherit)',\n // Solid, theme-aware chip so it stays legible over the editor.\n background: 'var(--background, white)',\n border: 'none',\n borderRadius: '4px',\n padding: '3px 8px',\n boxShadow: '0 1px 4px #0003',\n cursor: 'pointer',\n transition: 'opacity 0.2s ease',\n },\n // Opacity + :hover live in CSS (.view-source) — a JS hover handler\n // here would fade the delegation root (the whole page), not the button.\n onClick(event: Event) {\n // tosijs delegates clicks, so event.currentTarget is the delegation\n // root, not the button — resolve the real trigger for menu anchoring.\n const btn = (event.target as HTMLElement).closest(\n '.view-source'\n ) as HTMLElement | null\n if (btn) openSourceMenu(btn)\n },\n bind: {\n value: app.currentDoc,\n binding(element: HTMLButtonElement, doc: Doc) {\n // Show when there's a source file to edit/view (any doc with a\n // path); the menu handles dev-vs-GitHub availability per item.\n element.style.display = doc.path ? 'flex' : 'none'\n },\n },\n },\n icons.code({ style: { _xinIconSize: 16 } }),\n 'Source'\n ),\n docContent\n )\n )\n )\n\n // Render the landing doc (adopts pre-rendered HTML when hydrating).\n showDoc(currentDoc)\n\n // Inject test indicator styles\n StyleSheet('test-indicators', testIndicatorStyleSpec)\n\n // Floating widget for test status\n const testWidget = button(\n {\n class: 'test-widget',\n hidden: true,\n onClick: showTestMenu,\n },\n span({ part: 'label' }, 'Tests'),\n span({ class: 'count', part: 'count' }, '0')\n )\n container.appendChild(testWidget)\n\n let testsRunning = false\n\n function setTestWidgetRunning() {\n testsRunning = true\n testWidget.hidden = false\n testWidget.classList.remove('-passed', '-failed')\n testWidget.classList.add('-running')\n updateTestWidgetDisplay()\n }\n\n function updateTestWidgetDisplay() {\n const labelEl = testWidget.querySelector('[part=\"label\"]')\n const countEl = testWidget.querySelector('[part=\"count\"]')\n\n const totalPassed = Object.values(pageTestResults).reduce(\n (sum, r) => sum + r.totalPassed,\n 0\n )\n const totalFailed = Object.values(pageTestResults).reduce(\n (sum, r) => sum + r.totalFailed,\n 0\n )\n\n if (labelEl) {\n if (testsRunning) {\n labelEl.textContent = 'Running'\n } else if (totalFailed > 0) {\n labelEl.textContent = 'Failed'\n } else if (totalPassed > 0) {\n labelEl.textContent = 'Passed'\n } else {\n labelEl.textContent = 'Tests'\n }\n }\n if (countEl) {\n countEl.textContent =\n totalFailed > 0 ? String(totalFailed) : String(totalPassed)\n }\n }\n\n function updateTestWidget() {\n const totalFailed = Object.values(pageTestResults).reduce(\n (sum, r) => sum + r.totalFailed,\n 0\n )\n\n if (testsRunning && pagesTested >= pagesWithTests) {\n // Tests complete\n testsRunning = false\n testWidget.classList.remove('-running')\n if (totalFailed > 0) {\n testWidget.classList.add('-failed')\n testWidget.classList.remove('-passed')\n testWidget.hidden = false\n } else {\n testWidget.classList.add('-passed')\n testWidget.classList.remove('-failed')\n testWidget.hidden = false // Show briefly before fade\n }\n }\n\n updateTestWidgetDisplay()\n }\n\n function showTestMenu() {\n const failedPages = Object.entries(pageTestResults).filter(\n ([, results]) => !results.passed\n )\n\n const menuItems: any[] = []\n\n for (const [filename, results] of failedPages) {\n const doc = docs.find((d) => d.filename === filename)\n const failedTests = results.tests.filter((t) => !t.passed)\n\n for (const test of failedTests) {\n menuItems.push({\n caption: `${doc?.title || filename}: ${test.name}`,\n action: () => {\n // Navigate to the page\n const docObj = app.docs.find(\n (d: any) => String(d.filename) === filename\n )\n if (docObj) {\n go(filename)\n // Scroll to failing test after render\n setTimeout(() => {\n const failedExample = document.querySelector(\n 'tosi-example.-test-failed'\n )\n if (failedExample) {\n failedExample.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n })\n }\n }, 100)\n }\n },\n })\n }\n }\n\n if (menuItems.length > 0) {\n menuItems.push(null) // separator\n }\n\n menuItems.push({\n icon: 'copy',\n caption: 'Copy test results to clipboard',\n action: () => {\n const report = generateTestReport()\n navigator.clipboard.writeText(report)\n },\n })\n\n popMenu({\n target: testWidget,\n menuItems,\n })\n }\n\n function generateTestReport(): string {\n const lines: string[] = ['# Test Results', '']\n let totalPassed = 0\n let totalFailed = 0\n\n for (const [filename, results] of Object.entries(pageTestResults)) {\n const doc = docs.find((d) => d.filename === filename)\n const title = doc?.title || filename\n\n totalPassed += results.totalPassed\n totalFailed += results.totalFailed\n\n if (results.tests.length > 0) {\n lines.push(`## ${title}`)\n lines.push('')\n for (const test of results.tests) {\n const icon = test.passed ? '✓' : '✗'\n const line = test.error\n ? `- ${icon} ${test.name}: ${test.error}`\n : `- ${icon} ${test.name}`\n lines.push(line)\n }\n lines.push('')\n }\n }\n\n lines.unshift(\n `**Summary: ${totalPassed} passed, ${totalFailed} failed**`,\n ''\n )\n\n return lines.join('\\n')\n }\n\n // Detect if running as background test iframe (never for an embedded browser —\n // it shares the host page's URL but isn't the test target).\n const searchParams = new URLSearchParams(window.location.search)\n const isTestFrame = !memoryRouting && searchParams.get('_testMode') === '1'\n const testFrameFilename = isTestFrame ? filenameFromLocation() : null\n\n // Listen for test completion events\n container.addEventListener('testcomplete', ((event: CustomEvent) => {\n handleTestComplete(event)\n updateTestWidget()\n\n // If running in test iframe, post results to parent\n if (isTestFrame && window.parent !== window && testFrameFilename) {\n const { results } = event.detail as { results: TestResults }\n window.parent.postMessage(\n { type: 'tosi-test-results', filename: testFrameFilename, results },\n '*'\n )\n }\n }) as EventListener)\n\n // If running as test iframe, signal when all tests on this page are done\n if (isTestFrame && testFrameFilename) {\n const signalDone = () => {\n const examples = container.querySelectorAll('tosi-example')\n const withTests = [...examples].filter((ex) =>\n ex.classList.contains('-has-tests')\n )\n const running = withTests.filter((ex) =>\n ex.classList.contains('-test-running')\n )\n if (withTests.length > 0 && running.length === 0) {\n window.parent.postMessage(\n { type: 'tosi-tests-done', filename: testFrameFilename },\n '*'\n )\n } else {\n setTimeout(signalDone, 100)\n }\n }\n // Give time for examples to start running\n setTimeout(signalDone, 500)\n }\n\n // Background test runner for all doc pages\n const runBackgroundTests = async () => {\n if (backgroundTestsStarted) return\n if (!testManager.enabled.value) return\n if (isTestFrame) return // Don't run background tests in test iframe\n backgroundTestsStarted = true\n\n // Find all docs that have test blocks. (Pages with examples but no explicit\n // tests are covered cheaply at BUILD time by the transpile check —\n // src/doc-system/site/check-examples.ts — without loading them in a browser,\n // so the runner doesn't have to render every heavy page just to notice a\n // build error.)\n const docsWithTests = docs.filter((doc) => doc.text.includes('```test'))\n pagesWithTests = docsWithTests.length\n\n if (pagesWithTests > 0) {\n setTestWidgetRunning()\n }\n\n if (pagesWithTests === 0) {\n if (testResultsResolve) {\n testResultsResolve({ passed: 0, failed: 0, pages: {} })\n testResultsResolve = undefined\n }\n return\n }\n\n const currentFilename = String(app.currentDoc.filename)\n\n // Create a hidden iframe that loads the full page. Keep its real 800x600\n // layout size (layout-dependent example tests need it) but park it\n // off-screen rather than rely on opacity:0 over the visible page — Chromium\n // (and haltija on top of it) still composites a 0-opacity layer at 0,0,\n // which flashes as the frame navigates page to page.\n const testFrame = document.createElement('iframe')\n testFrame.style.cssText =\n 'position: fixed; left: -10000px; top: 0; width: 800px; height: 600px; opacity: 0; pointer-events: none;'\n document.body.appendChild(testFrame)\n\n // Listen for test results posted from the iframe\n const messageHandler = (event: MessageEvent) => {\n if (event.data?.type !== 'tosi-test-results') return\n const { filename, results } = event.data as {\n type: string\n filename: string\n results: TestResults\n }\n if (!pageTestResults[filename]) {\n pageTestResults[filename] = {\n passed: true,\n tests: [],\n totalPassed: 0,\n totalFailed: 0,\n }\n }\n const pageResults = pageTestResults[filename]\n pageResults.tests.push(...results.tests)\n pageResults.totalPassed += results.passed\n pageResults.totalFailed += results.failed\n pageResults.passed = pageResults.totalFailed === 0\n updateDocTestStatus(filename)\n updateTestWidget()\n }\n window.addEventListener('message', messageHandler)\n\n for (const doc of docsWithTests) {\n // Skip current page — it runs tests naturally\n if (doc.filename === currentFilename) continue\n\n // Navigate iframe to the page\n testFrame.src =\n routing === 'path'\n ? `${window.location.origin}${hrefFor(doc.filename)}?_testMode=1`\n : `${window.location.origin}${window.location.pathname}?${doc.filename}&_testMode=1`\n\n // Wait for the iframe to signal it's done (max 30s per page)\n await new Promise<void>((resolve) => {\n const deadline = Date.now() + 30_000\n const onDone = (event: MessageEvent) => {\n if (\n event.data?.type === 'tosi-tests-done' &&\n event.data.filename === doc.filename\n ) {\n window.removeEventListener('message', onDone)\n resolve()\n }\n }\n window.addEventListener('message', onDone)\n setTimeout(() => {\n window.removeEventListener('message', onDone)\n resolve()\n }, deadline - Date.now())\n })\n\n markPageTested(doc.filename)\n }\n\n // Clean up\n window.removeEventListener('message', messageHandler)\n testFrame.remove()\n\n // Mark current page as tested if it has tests\n if (docsWithTests.some((d) => d.filename === currentFilename)) {\n setTimeout(() => markPageTested(currentFilename), 1000)\n }\n }\n\n // Run background tests when enabled (initially or when toggled on)\n const startBackgroundTests = () => {\n if (!testManager.enabled.value) return\n if (isLocalhost) {\n setTimeout(runBackgroundTests, 1000)\n } else {\n const currentHasTests = currentDoc.text.includes('```test')\n if (currentHasTests) {\n pagesWithTests = 1\n setTestWidgetRunning()\n setTimeout(() => markPageTested(currentDoc.filename), 2000)\n } else if (testResultsResolve) {\n testResultsResolve({ passed: 0, failed: 0, pages: {} })\n testResultsResolve = undefined\n }\n }\n }\n\n // Start now if enabled, and watch for toggle. A memory-routed (embedded)\n // browser never spawns the test-runner iframes (they'd navigate the host site).\n if (!memoryRouting) {\n startBackgroundTests()\n testManager.enabled.observe(startBackgroundTests)\n }\n\n // Memory routing: let the host drive navigation programmatically (by slug) and\n // read the current slug back, so the browser can live in a floating panel etc.\n if (memoryRouting) {\n ;(container as any).navigate = (slug: string) =>\n navigateTo(filenameForSlug(slug) || slug)\n Object.defineProperty(container, 'currentSlug', {\n get: () => slugFor(String(app.currentDoc.filename)),\n })\n }\n\n return container as HTMLElement\n}\n",
|
|
46
|
+
"/*#\n# doc-browser\n\nThe `tosijs-ui` library provides everything you need to create a self-documented testbed similar\nto the [tosijs-ui documentation site](https://ui.tosijs.net). It's like Storybook but much simpler\nto set up and maintain.\n\n## Quick Start\n\n### 1. Extract Documentation\n\nUse the CLI tool to extract documentation from your source files:\n\n```bash\nnpx tosijs-ui-docs --dirs src,README.md --output docs.json\n```\n\nThis scans for:\n\n- `.md` files (uses entire content)\n- Multi-line comments starting with `/*#` in `.ts`, `.js`, `.css` files\n\n### 2. Create Your Doc Browser\n\n```typescript\nimport { createDocBrowser } from 'tosijs-ui'\nimport * as mylib from './my-library.js'\nimport docs from './docs.json'\n\nconst browser = createDocBrowser({\n docs,\n context: { mylib },\n projectName: 'My Project',\n projectLinks: {\n github: 'https://github.com/user/project',\n npm: 'https://www.npmjs.com/package/project',\n },\n})\n\ndocument.body.append(browser)\n```\n\n### 3. Add Live Examples in Your Docs\n\nIn your source files or markdown, use code fences. Any sequence of\nhtml, js, and css code examples will be turned in to a live, interactive\nexample.\n\n /*#\n # My Component\n\n This component does amazing things!\n\n ```html\n <my-component></my-component>\n ```\n ```js\n import { myComponent } from 'mylib'\n preview.append(myComponent({ value: 'Hello!' }))\n ```\n ```css\n my-component {\n color: blue;\n }\n ```\n */\n\n export class MyComponent extends Component {\n // ...\n }\n\n export const myComponent = MyComponent.elementCreator({\n tag: 'my-component'\n })\n\n## Documentation Format\n\n### Inline Comments\n\nStart multi-line comments with `/*#` to mark them as documentation:\n\n```typescript\n/*#\n# Component Name\n\nDescription and examples go here...\n*/\n```\n\n### Metadata\n\nControl sort order with JSON metadata:\n\n```\n<!--{ \"pin\": \"bottom\" }-->\n```\n\nor\n\n```\n/*{ \"pin\": \"bottom\" }*/\n```\n\n## Programmatic API\n\n```typescript\nimport { extractDocs, saveDocsJSON } from 'tosijs-ui'\n\nconst docs = extractDocs({\n dirs: ['src', 'README.md'],\n ignore: ['node_modules', 'dist'],\n})\n\nsaveDocsJSON(docs, './docs.json')\n\n// Or use the docs directly\nimport { createDocBrowser } from 'tosijs-ui'\nconst browser = createDocBrowser({ docs, context: { mylib } })\n```\n\n## createDocBrowser Options\n\n```typescript\ninterface DocBrowserOptions {\n docs: Doc[] // Array of documentation objects\n context?: Record<string, any> // Modules for live examples\n projectName?: string // Display name\n projectLinks?: ProjectLinks // Links to show in header\n navSize?: number // Nav width (default: 200)\n minSize?: number // Min width before compact (default: 600)\n}\n\ninterface ProjectLinks {\n github?: string\n npm?: string\n discord?: string\n blog?: string\n tosijs?: string\n bundle?: string\n cdn?: string\n [key: string]: string | undefined\n}\n```\n\n## See Also\n\nThe `tosijs-ui` demo is a complete working example. See:\n\n- `/tosijs-site.config.ts` - How this repo configures its doc site (`defineSiteConfig` / `tosijs-ui/site`)\n- `/src/doc-system/site/docs.ts` - The extraction tool (`extractDocs`, exported from `tosijs-ui/site`)\n- `/src/doc-browser.ts` - The createDocBrowser implementation\n*/\n/*{\"pin\":\"bottom\",\"parent\":\"Appendices\"}*/\n\nimport {\n elements,\n vars,\n varDefault,\n bindings,\n touch,\n getListItem,\n debounce,\n tosi,\n StyleSheet,\n XinStyleSheet,\n} from 'tosijs'\nimport {\n buildSlugMap,\n pathForSlug,\n filenameForPath,\n} from './doc-system/routing'\nimport { buildNavTree, NavNode } from './doc-system/nav-tree'\nimport { renderDocMarkdown } from './doc-system/render'\nimport { pageTitle } from './doc-system/doc-title'\nimport { LiveExample, testManager } from './live-example'\nimport { TestResults } from './live-example/test-harness'\nimport { tosiSidenav, TosiSidenav } from './side-nav'\nimport { icons } from './icons'\nimport { tosiLocalized } from './localize'\nimport { popMenu } from './menu'\nimport { codeEditor, CodeEditor } from './code-editor'\nimport { tosiDiff } from './diff'\n\n// Types for global test results\nexport interface PageTestResults {\n passed: boolean\n tests: TestResults['tests']\n totalPassed: number\n totalFailed: number\n}\n\nexport interface DocTestResults {\n passed: number\n failed: number\n pages: Record<string, PageTestResults>\n}\n\ndeclare global {\n interface Window {\n __docTestResults?: Promise<DocTestResults>\n }\n}\n\nconst {\n div,\n span,\n a,\n header,\n button,\n template,\n input,\n h2,\n img,\n details,\n summary,\n ul,\n li,\n} = elements\n\n// Test colors\nconst testColor = {\n pass: varDefault.testColorPass('#0a0'),\n fail: varDefault.testColorFail('#c00'),\n running: varDefault.testColorRunning('#fa0'),\n}\n\n// Test indicator styles - widget inherits button styles from base stylesheet\nconst testIndicatorStyleSpec: XinStyleSheet = {\n '.view-source': { opacity: '0.9' },\n '.view-source:hover': { opacity: '1' },\n '@keyframes test-pulse': {\n '0%, 100%': { opacity: '1' },\n '50%': { opacity: '0.7' },\n },\n '@keyframes test-appear': {\n from: { opacity: '0', transform: 'scale(0.8)' },\n to: { opacity: '1', transform: 'scale(1)' },\n },\n '@keyframes test-fade': {\n '0%, 20%': { opacity: '1', transform: 'scale(1)' },\n '70%': { opacity: '1', transform: 'scale(1.1)' },\n '100%': { opacity: '0', transform: 'scale(0.9)', pointerEvents: 'none' },\n },\n\n // Hide when tests disabled\n 'body:not(.tests-enabled) .doc-link::after, body:not(.tests-enabled) .test-widget':\n {\n display: 'none !important',\n },\n\n // Nav link dot indicators\n '.doc-link.-test-passed::after, .doc-link.-test-failed::after': {\n content: \"''\",\n width: vars.fontSize50,\n height: vars.fontSize50,\n borderRadius: '50%',\n marginLeft: vars.spacing50,\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n '.doc-link.-test-passed::after': { background: testColor.pass },\n '.doc-link.-test-failed::after': {\n background: testColor.fail,\n animation: 'test-pulse 2s ease-in-out infinite',\n },\n\n // Floating widget - position and colors only, inherits button structure.\n // Bottom-LEFT: bottom-right is where the injected haltija dev widget sits, and it\n // was overlaying this.\n '.test-widget': {\n _testBg: testColor.running,\n position: 'fixed',\n bottom: vars.spacing,\n left: vars.spacing,\n zIndex: '1000',\n background: vars.testBg,\n color: 'white',\n gap: vars.spacing50,\n },\n '.test-widget[hidden]': { display: 'none' },\n '.test-widget.-running': {\n _testBg: testColor.running,\n animation:\n 'test-appear 0.3s ease-out, test-pulse 2s ease-in-out 0.3s infinite',\n },\n '.test-widget.-passed': {\n _testBg: testColor.pass,\n animation: 'test-fade 3s ease-out forwards',\n },\n '.test-widget.-failed': {\n _testBg: testColor.fail,\n animation: 'test-pulse 2s ease-in-out infinite',\n },\n\n // Count badge\n '.test-widget .count': {\n background: 'white',\n color: vars.testBg,\n borderRadius: '50%',\n width: vars.lineHeight,\n height: vars.lineHeight,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontWeight: 'bold',\n },\n\n // Deep-linked example (e.g. arriving at /slug/#example-2): brief highlight pulse\n '@keyframes example-target-pulse': {\n from: { boxShadow: `0 0 0 3px ${varDefault.accent('#007aff')}` },\n to: { boxShadow: '0 0 0 3px transparent' },\n },\n '.example-target': {\n animation: 'example-target-pulse 1.5s ease-out',\n borderRadius: vars.roundedRadius,\n },\n}\n\nexport interface Doc {\n text: string\n title: string\n filename: string\n path: string\n pin?: string\n hidden?: boolean\n testStatus?: 'passed' | 'failed' | 'pending'\n // Build-time transpiled JS for this doc's `tjs` examples ([source, {dialect, js}]\n // entries), attached to docs.json by generate-site so client-side navigation runs\n // examples without the tjs transpiler. See self-contained-examples-plan.md.\n bakes?: Array<[string, { dialect: string; js: string }]>\n}\n\nexport interface ProjectLinks {\n github?: string\n npm?: string\n discord?: string\n blog?: string\n tosijs?: string\n bundle?: string\n cdn?: string\n [key: string]: string | undefined\n}\n\n/** A configurable link for the header bar or the overflow menu. */\nexport interface LinkItem {\n href: string\n label: string\n /** optional icon name (from `icons`); falls back to the text label if unknown */\n icon?: string\n}\n\n/**\n * How the doc browser maps docs to URLs.\n * - 'query' (default, legacy): single-page app, links are `?filename`.\n * - 'path': clean per-page URLs (`/slug/`), for the static pre-rendered site\n * driven by <tosi-doc-system>. Requires a real page to exist at each path.\n * - 'memory': self-contained — navigation never touches window.history/location\n * and the instance ignores the page URL. For an embedded/nested browser (a\n * live demo, a floating help panel). Drive it via `initialRoute` +\n * `onRouteChange`, and the returned element's `.navigate(slug)` method.\n */\nexport type DocRoutingMode = 'query' | 'path' | 'memory'\n\nexport interface DocBrowserOptions {\n docs: Doc[]\n context?: Record<string, any>\n projectName?: string\n projectLinks?: ProjectLinks\n /**\n * The brand mark shown left of the site title in the header. One of:\n * - the name of a known icon (from `icons`), e.g. `'tosiUi'`\n * - an image URL / path / data: URI (rendered as an `<img>`)\n * - a raw inline `<svg …>…</svg>` string\n * Omit to fall back to the tosijs-ui logo when `projectLinks.tosijs` is set,\n * or to no mark at all otherwise.\n */\n logo?: string\n navSize?: number\n minSize?: number\n routing?: DocRoutingMode\n /**\n * Memory routing only: the slug to show first (instead of the page URL / first\n * doc). Lets a host mount the browser already pointed at a specific doc.\n */\n initialRoute?: string\n /**\n * Memory routing only: called with the current doc's slug whenever in-app\n * navigation happens, so a host can reflect it (e.g. to an attribute).\n */\n onRouteChange?: (slug: string) => void\n /**\n * Header-bar links. When provided, these replace the legacy `projectLinks` icon\n * set in the header (each renders as an icon if `icon` names a known icon, else\n * as its text label). `projectLinks` is still used for the logo and view-source.\n */\n navbarLinks?: LinkItem[]\n /**\n * Pre-rendered content for the landing doc to ADOPT in place (true hydration).\n * When provided, the current page's already-rendered markdown is left untouched\n * — only live examples are wired up — instead of being re-rendered from text.\n * Used by <tosi-doc-system>. Subsequent navigation renders from doc text.\n */\n contentElement?: HTMLElement\n}\n\n// The brand mark shown left of the site title. `logo` (from config) may name a\n// known icon, be an inline `<svg>` string, or be an image URL; when absent we\n// keep the legacy behavior — the tosijs-ui logo iff this is a tosijs project,\n// else nothing. Sized to match the header height so hydration doesn't reflow.\nconst LOGO_SIZE = 40\nconst LOGO_GAP = 10\n// `icons` is a Proxy that returns a factory for ANY string (unknown names get a\n// placeholder glyph), so we can't ask it whether a name is real — we route by the\n// shape of the string instead: an inline `<svg>` renders as-is, a URL/path/data:\n// URI renders as an <img>, and anything else is treated as an icon(-composition)\n// name.\nfunction looksLikeImageUrl(s: string): boolean {\n return (\n /^(https?:)?\\/\\//.test(s) ||\n s.startsWith('data:') ||\n s.startsWith('/') ||\n s.startsWith('./') ||\n s.startsWith('../') ||\n /\\.(png|jpe?g|gif|webp|avif|svg|ico)(\\?.*)?$/i.test(s)\n )\n}\nfunction logoMark(\n logo: string | undefined,\n projectLinks: ProjectLinks\n): Element {\n if (logo) {\n if (logo.trimStart().startsWith('<')) {\n const holder = span({\n style: {\n display: 'inline-flex',\n height: `${LOGO_SIZE}px`,\n marginRight: `${LOGO_GAP}px`,\n },\n })\n holder.innerHTML = logo\n return holder\n }\n if (looksLikeImageUrl(logo)) {\n return img({\n src: logo,\n alt: '',\n style: { height: `${LOGO_SIZE}px`, marginRight: `${LOGO_GAP}px` },\n })\n }\n return (icons as any)[logo]({\n style: { _xinIconSize: LOGO_SIZE, marginRight: LOGO_GAP },\n })\n }\n return projectLinks.tosijs\n ? icons.tosiUi({ style: { _xinIconSize: LOGO_SIZE, marginRight: LOGO_GAP } })\n : span()\n}\n\n// Monotonic per-page counter so each createDocBrowser() call gets a distinct\n// tosi() registry key (see stateKey below) and two browsers can't share state.\nlet docBrowserSeq = 0\n\nexport function createDocBrowser(options: DocBrowserOptions): HTMLElement {\n const {\n docs,\n context = {},\n projectName = '',\n projectLinks = {},\n logo,\n navSize = 200,\n minSize = 600,\n routing = 'query',\n initialRoute,\n onRouteChange,\n navbarLinks,\n contentElement,\n } = options\n\n // Memory routing is fully self-contained: it never reads or writes\n // window.history/location, so an embedded or nested browser can't hijack the\n // host page's URL (or recurse into it).\n const memoryRouting = routing === 'memory'\n\n // Initialize testStatus on all docs so tosi can track it\n for (const doc of docs) {\n doc.testStatus = undefined\n }\n\n // Routing abstraction — keeps the legacy `?filename` SPA behavior the default,\n // while letting <tosi-doc-system> drive clean `/slug/` URLs off the same docs.\n // Both path and memory routing key off slugs; only legacy query routing doesn't.\n const slugMap = routing === 'query' ? {} : buildSlugMap(docs)\n const slugFor = (filename: string): string => slugMap[filename] ?? filename\n const filenameForSlug = (slug: string): string => {\n for (const d of docs) if (slugFor(d.filename) === slug) return d.filename\n return ''\n }\n const hrefFor = (filename: string): string =>\n routing === 'query' ? `?${filename}` : pathForSlug(slugFor(filename))\n const filenameFromLocation = (): string => {\n // Memory routing ignores the page URL entirely — it starts at initialRoute.\n if (memoryRouting) return initialRoute ? filenameForSlug(initialRoute) : ''\n return routing === 'path'\n ? filenameForPath(document.location.pathname, slugMap)\n : document.location.search !== ''\n ? document.location.search.substring(1).split('&')[0]\n : ''\n }\n\n // Resolve a content-link anchor to one of our docs' filenames, in either the\n // legacy `?filename` form or a clean `/slug/` path — or null for external\n // links, in-page anchors, mailto:, downloads, etc. Used to navigate internal\n // doc links client-side (via go()) instead of triggering a full page reload,\n // and to canonicalize their hrefs for the current routing mode.\n const docFilenameForHref = (anchor: HTMLAnchorElement): string | null => {\n const raw = anchor.getAttribute('href') || ''\n if (raw === '' || raw.startsWith('#')) return null\n let url: URL\n try {\n url = new URL(raw, document.location.href)\n } catch {\n return null\n }\n if (url.origin !== document.location.origin) return null // external\n const known = (filename: string): string | null =>\n docs.some((doc) => doc.filename === filename) ? filename : null\n // Legacy `?filename` form: a single bare filename, not a real query string.\n const query = url.search.replace(/^\\?/, '')\n if (query !== '' && !query.includes('=') && !query.includes('&')) {\n const filename = known(decodeURIComponent(query))\n if (filename) return filename\n }\n // Clean `/slug/` path form (only meaningful when slugs are in play).\n if (!memoryRouting && routing !== 'query') {\n const filename = known(filenameForPath(url.pathname, slugMap))\n if (filename) return filename\n }\n return null\n }\n\n const docName = filenameFromLocation() || docs[0]?.filename || 'README.md'\n\n const currentDoc = docs.find((doc) => doc.filename === docName) || docs[0]\n\n // tosi() registers its top-level keys in a GLOBAL observable registry, so two\n // doc browsers on one page (e.g. a page whose live example embeds a nested\n // <tosi-doc-system>) would BOTH register `app` and share it — the second wins,\n // so the outer browser's nav / currentDoc / edit-source silently read the\n // nested one's doc. Give each instance its own key. (This is the same collision\n // the live-example docs warn about: never register a generic `app`.)\n const stateKey = `docBrowser${docBrowserSeq++}`\n const state = tosi({\n [stateKey]: {\n docs,\n currentDoc,\n compact: false,\n },\n })\n const app = state[stateKey]\n\n // Assigned by the hierarchical nav builder (path routing); re-applies current\n // highlight, test status, search visibility, and auto-open imperatively.\n // resetOpen=true collapses every section except the current doc's.\n let refreshNav: (resetOpen?: boolean) => void = () => {}\n\n // Test result tracking\n const pageTestResults: Record<string, PageTestResults> = {}\n let testResultsResolve: ((results: DocTestResults) => void) | undefined\n let backgroundTestsStarted = false\n let pagesWithTests = 0\n let pagesTested = 0\n\n // Set up global promise for scriptable browser integration. A memory-routed\n // (embedded) browser must not clobber the host page's global.\n if (!memoryRouting) {\n window.__docTestResults = new Promise((resolve) => {\n testResultsResolve = resolve\n })\n }\n\n const updateDocTestStatus = (filename: string) => {\n const results = pageTestResults[filename]\n // Callback receives bare object, return is proxy - cast to work with both\n const doc = (app.docs as unknown as Doc[]).find(\n (d) => d.filename === filename\n )\n if (doc) {\n doc.testStatus = results\n ? results.passed\n ? 'passed'\n : 'failed'\n : undefined\n }\n refreshNav()\n }\n\n const checkAllTestsComplete = () => {\n if (pagesTested >= pagesWithTests && testResultsResolve) {\n const allResults: DocTestResults = {\n passed: 0,\n failed: 0,\n pages: pageTestResults,\n }\n\n for (const pageResults of Object.values(pageTestResults)) {\n allResults.passed += pageResults.totalPassed\n allResults.failed += pageResults.totalFailed\n }\n\n testResultsResolve(allResults)\n testResultsResolve = undefined\n\n // Post results to dev server on localhost (not from test iframes)\n if (isLocalhost && !isTestFrame) {\n fetch('/report', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(allResults),\n }).catch(() => {\n // Ignore errors - server may not support this endpoint\n })\n }\n }\n }\n\n const isLocalhost =\n window.location.hostname === 'localhost' ||\n window.location.hostname === '127.0.0.1'\n\n const handleTestComplete = (event: CustomEvent) => {\n const { results } = event.detail as {\n results: TestResults\n element: LiveExample\n }\n const filename = String(app.currentDoc.filename)\n\n // Reset page results each time (don't accumulate across reloads)\n pageTestResults[filename] = {\n passed: results.failed === 0,\n tests: [...results.tests],\n totalPassed: results.passed,\n totalFailed: results.failed,\n }\n\n updateDocTestStatus(filename)\n }\n\n // Track when a page finishes loading all its tests\n const markPageTested = (_filename: string) => {\n pagesTested++\n checkAllTestsComplete()\n updateTestWidget()\n }\n\n bindings.docLink = {\n toDOM(elt, filename) {\n elt.setAttribute('href', hrefFor(filename))\n ;(elt as HTMLElement).dataset.filename = filename\n },\n }\n\n bindings.current = {\n toDOM(elt, currentFile) {\n elt.classList.toggle(\n 'current',\n currentFile === (elt as HTMLElement).dataset.filename\n )\n },\n }\n\n bindings.testStatus = {\n toDOM(elt, status) {\n elt.classList.remove('-test-passed', '-test-failed')\n if (status === 'passed') {\n elt.classList.add('-test-passed')\n } else if (status === 'failed') {\n elt.classList.add('-test-failed')\n }\n },\n }\n\n const filterDocs = debounce(() => {\n const needle = searchField.value.toLocaleLowerCase()\n app.docs.forEach((doc: any) => {\n doc.hidden =\n !doc.title.toLocaleLowerCase().includes(needle) &&\n !doc.text.toLocaleLowerCase().includes(needle)\n })\n touch(app.docs)\n // resetOpen: when the field is cleared this collapses back to the current\n // section; while typing, matching sections expand via the needle branch.\n refreshNav(true)\n })\n\n const searchField = input({\n slot: 'nav',\n placeholder: 'search',\n type: 'search',\n style: {\n width: 'calc(100% - 10px)',\n margin: '5px',\n },\n onInput: filterDocs,\n })\n\n // Memory routing is decoupled from the page URL, so it ignores browser\n // back/forward (the host owns history, if any).\n if (!memoryRouting) {\n window.addEventListener('popstate', () => {\n // Back/forward while the source editor is open with unsaved changes: the\n // URL already moved, so on \"keep editing\" we push it back to match the\n // still-open editor; on discard we close the editor and navigate.\n if (editUI) {\n if (\n editorHasUnsavedChanges() &&\n !window.confirm('Discard unsaved changes to the source?')\n ) {\n const href = hrefFor(String(editUI.doc.filename))\n window.history.pushState({ href }, '', href)\n return\n }\n closeEditor()\n }\n navigateTo(filenameFromLocation())\n })\n\n // Reload / tab-close / external navigation: native \"leave site?\" prompt when\n // there are unsaved source edits (the only guard the browser allows here).\n window.addEventListener('beforeunload', (event: BeforeUnloadEvent) => {\n if (editorHasUnsavedChanges()) {\n event.preventDefault()\n event.returnValue = ''\n }\n })\n }\n\n // This instance's own sidenav. Captured from its own change event (below), so the\n // header nav toggle drives THIS doc-browser — not `document.querySelector('tosi-\n // sidenav')`, which returns the FIRST sidenav in the document (an OUTER instance\n // when this one is an embedded, memory-routed browser).\n let sidenav: TosiSidenav | null = null\n\n const headerContent: any[] = [\n button(\n {\n class: 'iconic',\n style: { color: vars.linkColor },\n title: 'navigation',\n bind: {\n value: app.compact,\n binding: {\n toDOM(element, compact) {\n element.style.display = compact ? '' : 'none'\n ;(element.nextSibling as HTMLElement).style.display = compact\n ? ''\n : 'none'\n },\n },\n },\n onClick() {\n if (sidenav) sidenav.contentVisible = !sidenav.contentVisible\n },\n },\n icons.menu()\n ),\n span({ style: { flex: '0 0 10px' } }),\n ]\n\n if (projectName) {\n headerContent.push(\n a(\n {\n href: '/',\n style: {\n display: 'flex',\n alignItems: 'center',\n borderBottom: 'none',\n },\n },\n logoMark(logo, projectLinks),\n h2(projectName)\n )\n )\n }\n\n headerContent.push(span({ class: 'elastic' }))\n\n // A header link renders as an icon (if `icon` names a known icon) or its label.\n const headerLink = (link: LinkItem) => {\n const iconFactory = link.icon ? (icons as any)[link.icon] : undefined\n return a(\n {\n class: iconFactory ? 'iconic' : '',\n title: link.label,\n target: '_blank',\n href: link.href,\n },\n iconFactory ? iconFactory() : link.label\n )\n }\n\n if (navbarLinks) {\n // Configurable link set.\n navbarLinks.forEach((link) => headerContent.push(headerLink(link)))\n } else {\n // Legacy: derive header icons from the known `projectLinks` keys.\n const legacy: Array<[string | undefined, string, string]> = [\n [projectLinks.tosijs, 'tosi', 'tosijs'],\n [projectLinks.discord, 'discord', 'discord'],\n [projectLinks.blog, 'blog', 'blog'],\n [projectLinks.github, 'github', 'github'],\n [projectLinks.npm, 'npm', 'npmjs'],\n ]\n for (const [href, icon, label] of legacy) {\n if (href) headerContent.push(headerLink({ href, label, icon }))\n }\n }\n\n // The rendered-markdown content area. When hydrating a static page we ADOPT the\n // pre-rendered node so the landing page's HTML is never re-rendered; otherwise we\n // render from doc text. Every navigation funnels through navigateTo() -> showDoc().\n const docContent = contentElement || div()\n docContent.classList.add('doc-content')\n Object.assign(docContent.style, {\n display: 'block',\n // Same var the pre-hydration `:not(:defined)` layout uses (doc-system-styles.ts).\n // This node is ADOPTED from the pre-rendered page, so if the two boxes disagree\n // the content jumps the instant we hydrate. The fallback keeps a standalone\n // doc-browser (no doc-system stylesheet) working.\n maxWidth: 'var(--doc-content-max-width, 44em)',\n margin: 'auto',\n padding: '0 1em',\n overflow: 'hidden',\n })\n\n // Adoption is zero-flash hydration of a statically pre-rendered page: it only\n // holds for the page's own path-routed instance, whose static `.doc-content`\n // matches the initial doc. A memory-routed embed's initial doc\n // (initialRoute/docs[0]) has no relation to whatever happens to sit inside the\n // host element (often an empty placeholder), so always render it fresh.\n // Canonicalize internal content links to the current routing mode's href and\n // tag them — so copy-link / right-click / no-JS land on the right page, and a\n // left-click can be short-circuited to client-side nav. Authored docs use the\n // routing-agnostic `?filename` form (the only one resolvable in every mode);\n // this rewrites them to `/slug/` on the static path-routed site, etc.\n const rewriteContentLinks = (): void => {\n for (const anchor of docContent.querySelectorAll('a')) {\n const filename = docFilenameForHref(anchor as HTMLAnchorElement)\n if (filename !== null) {\n anchor.setAttribute('href', hrefFor(filename))\n ;(anchor as HTMLElement).dataset.docLink = filename\n }\n }\n }\n\n // Deep-link to a specific live example: arriving at /slug/#example-2 (or a\n // custom ```js#my-id anchor) scrolls it into view with a brief highlight. The\n // example ids are set by insertExamples, so this runs after it. Skipped in\n // memory routing (which must never touch window.location).\n const scrollToHashExample = (): void => {\n if (memoryRouting) return\n const hash = location.hash.replace(/^#/, '')\n if (!hash) return\n requestAnimationFrame(() => {\n let el: Element | null = null\n try {\n el = docContent.querySelector(`#${CSS.escape(hash)}`)\n } catch {\n el = null\n }\n if (!el) return\n el.scrollIntoView({ block: 'center', behavior: 'smooth' })\n el.classList.add('example-target')\n setTimeout(() => el && el.classList.remove('example-target'), 1600)\n })\n }\n\n let adoptInitialContent = contentElement !== undefined && !memoryRouting\n const showDoc = (doc: Doc) => {\n if (adoptInitialContent) {\n adoptInitialContent = false // leave the pre-rendered HTML untouched\n } else {\n // Pass the doc's build-time tjs bakes so this client-rendered page embeds the\n // same hidden transpiled <script>s the pre-rendered page has — examples run\n // without loading the tjs transpiler. See self-contained-examples-plan.md.\n docContent.innerHTML = renderDocMarkdown(doc.text, {\n bakes: doc.bakes ? new Map(doc.bakes) : undefined,\n })\n }\n rewriteContentLinks()\n // Stamp each example with its source file (for the source↔doc map). doc.path\n // is the extracted file (.md, or a source file with doc comments).\n LiveExample.insertExamples(docContent, context, doc.path || undefined)\n scrollToHashExample()\n if (routing === 'path') {\n // The SAME rule the static generator used for this page's <head> (doc-title.ts).\n // This used to re-derive it — ignoring `headTitle` and re-suffixing a title that\n // already ended in the project name — so the home page's title flipped from\n // \"tosijs-ui — robust, dependency-free web components\" to \"tosijs-ui — tosijs-ui\"\n // the moment the bundle loaded. Issue #6, and the only thing on the page that\n // visibly moved on hydration.\n document.title = pageTitle(doc, projectName)\n }\n }\n // Always resolve to the RAW doc from the original array — docs reached via the\n // app.docs proxy expose BoxedScalar fields (doc.text), which break marked().\n const navigateTo = (filename: string) => {\n const doc = docs.find((d) => d.filename === filename) || docs[0]\n app.currentDoc = doc as any\n showDoc(doc)\n refreshNav(true)\n }\n\n // User-initiated navigation: record the new location (history for path/query,\n // the onRouteChange callback for memory) and then render the doc. Every nav\n // click funnels through here so memory mode never touches window.history.\n const go = (filename: string) => {\n // If the source editor is open with unsaved changes, confirm before leaving;\n // on confirm it discards + closes, otherwise navigation is aborted.\n if (!confirmLeaveEditor()) return\n if (memoryRouting) {\n onRouteChange?.(slugFor(filename))\n } else {\n const href = hrefFor(filename)\n window.history.pushState({ href }, '', href)\n }\n navigateTo(filename)\n }\n\n // Intercept clicks on internal doc links anywhere in the rendered content so\n // they navigate client-side instead of reloading the page. Plain left-clicks\n // only — modified clicks / middle-clicks / new-tab / download links fall\n // through to the browser. Works for both freshly-rendered and statically\n // pre-rendered (adopted) content, resolving the href at click time.\n docContent.addEventListener('click', (event: MouseEvent) => {\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n )\n return\n const anchor = (event.target as HTMLElement).closest(\n 'a'\n ) as HTMLAnchorElement | null\n if (\n !anchor ||\n anchor.target === '_blank' ||\n anchor.hasAttribute('download')\n )\n return\n const filename = docFilenameForHref(anchor)\n if (filename === null) return\n event.preventDefault()\n go(filename)\n })\n\n // ── Edit page source (Foundation B / #4) ──────────────────────────────────\n // The \"view source\" affordance opens a menu: edit the whole source file in a\n // code editor that fills the content area, preview the result in-browser, and\n // save (dev: write the repo file via /__docstore/source; the watcher rebuilds)\n // or download it. Source is read from the dev endpoint, falling back to GitHub\n // raw, so editing works on the deployed site too (save there = download).\n const editorModeFor = (p: string): string =>\n p.endsWith('.md')\n ? 'markdown'\n : p.endsWith('.css')\n ? 'css'\n : p.endsWith('.ts') || p.endsWith('.tjs')\n ? 'typescript'\n : 'javascript'\n\n // Pure mirror of docs.ts extraction: a .md *is* the markdown; a source file is\n // the concatenation of its doc-comment blocks. Lets us preview an edit in the\n // browser with no rebuild.\n const docMarkdownFromSource = (content: string, p: string): string => {\n if (p.endsWith('.md')) return content\n const blocks = content.match(/\\/\\*#[\\s\\S]+?\\*\\//g) || []\n return blocks.map((s) => s.substring(3, s.length - 2).trim()).join('\\n\\n')\n }\n\n const githubRawUrl = (p: string): string | null => {\n const gh = projectLinks.github\n if (!gh || !p) return null\n const m = gh.match(/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?\\/?$/)\n return m\n ? `https://raw.githubusercontent.com/${m[1]}/${m[2]}/main/${p}`\n : null\n }\n\n const loadSource = async (p: string): Promise<string | null> => {\n try {\n const r = await fetch(`/__docstore/source?file=${encodeURIComponent(p)}`)\n // Accept only a genuine source response. A misconfigured dev server (no\n // editableSources) or a SPA-rewrite host answers an unknown path with\n // index.html at status 200 — taking that would load the PAGE as the source.\n // Reject HTML and fall through to the GitHub raw source instead.\n const contentType = r.headers.get('content-type') || ''\n if (r.ok && !/text\\/html/i.test(contentType)) return await r.text()\n } catch {\n // dev endpoint not available — fall through to GitHub raw\n }\n const raw = githubRawUrl(p)\n if (raw) {\n try {\n const r = await fetch(raw)\n if (r.ok) return await r.text()\n } catch {\n // offline / no network\n }\n }\n return null\n }\n\n const saveSourceToDisk = async (\n p: string,\n content: string\n ): Promise<boolean> => {\n try {\n const r = await fetch('/__docstore/source', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ file: p, content }),\n })\n return r.ok\n } catch {\n return false\n }\n }\n\n const downloadText = (filename: string, content: string): void => {\n const url = URL.createObjectURL(new Blob([content], { type: 'text/plain' }))\n const link = a({ href: url, download: filename }) as HTMLAnchorElement\n link.click()\n setTimeout(() => URL.revokeObjectURL(url), 1000)\n }\n\n let editUI: {\n editor: CodeEditor\n doc: Doc\n view: 'edit' | 'preview' | 'diff'\n // The source as loaded (and re-baselined on save) — compared against the\n // editor value to detect unsaved changes when navigating away.\n original: string\n } | null = null\n\n const editorHasUnsavedChanges = (): boolean =>\n editUI !== null && editUI.editor.value !== editUI.original\n\n // Tear the editor down without re-rendering the current doc (the caller is\n // about to navigate). exitEditSource() restores the current doc instead.\n const closeEditor = (): void => {\n if (!editUI) return\n editUI.editor.remove()\n editUI = null\n docContent.style.display = ''\n }\n\n // Called before in-app navigation: if the editor is open with unsaved changes,\n // confirm discarding them. Returns false to abort navigation.\n const confirmLeaveEditor = (): boolean => {\n if (!editUI) return true\n if (\n editorHasUnsavedChanges() &&\n !window.confirm('Discard unsaved changes to the source?')\n ) {\n return false\n }\n closeEditor()\n return true\n }\n\n // Switch the source editor between the raw editor, the rendered preview, and a\n // diff of the edits against the loaded original. preview/diff render into the\n // doc-content area; edit shows the CodeEditor.\n const setSourceView = (view: 'edit' | 'preview' | 'diff'): void => {\n if (!editUI) return\n editUI.view = view\n if (view === 'preview') {\n docContent.innerHTML = renderDocMarkdown(\n docMarkdownFromSource(editUI.editor.value, editUI.doc.path)\n )\n rewriteContentLinks()\n LiveExample.insertExamples(\n docContent,\n context,\n editUI.doc.path || undefined\n )\n } else if (view === 'diff') {\n docContent.replaceChildren(\n tosiDiff({\n original: editUI.original,\n modified: editUI.editor.value,\n style: { display: 'block', width: '100%', height: '100%' },\n })\n )\n }\n docContent.style.display = view === 'edit' ? 'none' : ''\n editUI.editor.style.display = view === 'edit' ? 'block' : 'none'\n }\n\n const exitEditSource = (): void => {\n if (!editUI) return\n const filename = String(app.currentDoc.filename)\n closeEditor()\n navigateTo(filename) // restore the canonical rendered doc\n }\n\n const saveSourceEdit = async (): Promise<void> => {\n if (!editUI) return\n const { doc, editor } = editUI\n const ok = await saveSourceToDisk(doc.path, editor.value)\n if (ok) {\n editUI.original = editor.value // saved — this is the new clean baseline\n setSourceView('preview') // the watcher also rebuilds in the background\n } else {\n // No write endpoint (deployed site) — hand the file back for the repo.\n downloadText(doc.path.split('/').pop() || 'source.txt', editor.value)\n }\n }\n\n const enterEditSource = async (doc: Doc): Promise<void> => {\n if (editUI) return\n const content = await loadSource(doc.path)\n if (content === null) {\n window.alert(`Could not load source for ${doc.path}`)\n return\n }\n const editor = codeEditor({ mode: editorModeFor(doc.path) }) as CodeEditor\n // No toolbar — the Source menu carries the edit controls (it adapts while\n // editing), so the editor fills the whole content area.\n editor.style.cssText =\n 'display:block; width:100%; height:100%; border:none;'\n editor.value = content\n const container = docContent.parentElement as HTMLElement\n container.append(editor)\n editUI = { editor, doc, view: 'edit', original: content }\n setSourceView('edit')\n }\n\n const openSourceMenu = (target: HTMLElement): void => {\n const doc = docs.find(\n (d) => String(d.filename) === String(app.currentDoc.filename)\n )\n if (!doc) return\n const fileName = (path: string) => path.split('/').pop() || path\n\n // While editing, the Source menu becomes the editor's controls (no separate\n // toolbar). Otherwise it offers entry points: edit, view on GitHub, download.\n const menuItems = editUI\n ? [\n ...(editUI.view !== 'edit'\n ? [\n {\n caption: 'Edit',\n icon: 'edit',\n action: () => setSourceView('edit'),\n },\n ]\n : []),\n ...(editUI.view !== 'preview'\n ? [\n {\n caption: 'Preview',\n icon: 'eye',\n action: () => setSourceView('preview'),\n },\n ]\n : []),\n {\n caption: 'View changes',\n icon: 'code',\n action: () => setSourceView('diff'),\n enabled: () => editorHasUnsavedChanges(),\n },\n null,\n {\n caption: 'Save to source',\n icon: 'save',\n action: () => void saveSourceEdit(),\n },\n {\n caption: 'Download',\n icon: 'download',\n action: () =>\n downloadText(fileName(editUI!.doc.path), editUI!.editor.value),\n },\n null,\n { caption: 'Close editor', icon: 'x', action: exitEditSource },\n ]\n : [\n {\n caption: 'Edit page source',\n icon: 'edit',\n action: () => void enterEditSource(doc),\n },\n ...(projectLinks.github && doc.path && doc.path !== 'README.md'\n ? [\n {\n caption: 'View on GitHub',\n icon: 'github',\n action: () => {\n window.open(\n `${projectLinks.github}/blob/main/${doc.path}`,\n '_blank'\n )\n },\n },\n ]\n : []),\n {\n caption: 'Download source',\n icon: 'download',\n action: () =>\n void loadSource(doc.path).then((c) => {\n if (c !== null) downloadText(fileName(doc.path), c)\n }),\n },\n ]\n\n popMenu({\n target,\n // The trigger is position:fixed at the top-right; `auto` placement opens\n // upward into zero space and collapses the menu, so open below-left.\n position: 'sw',\n menuItems,\n })\n }\n\n // ── Hierarchical nav (path routing) ───────────────────────────────────────\n // Build nested <details> from the doc tree; current-highlight, test status,\n // search visibility, and auto-open are applied imperatively by refreshNav.\n const navStyle = {\n slot: 'nav',\n // .doc-nav so the shared nav CSS (list reset, indentation) matches the\n // runtime nav too, not just the static pre-rendered <nav class=\"doc-nav\">.\n class: 'doc-nav',\n style: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: 'calc(100% - 44px)',\n overflowY: 'scroll',\n },\n }\n\n const buildHierarchicalNav = (): HTMLElement => {\n const roots = buildNavTree(docs as any, slugMap)\n const leaves = new Map<string, { li: HTMLElement; link: HTMLElement }>()\n const branches: {\n li: HTMLElement\n el: HTMLDetailsElement\n link: HTMLElement\n filename: string\n subtree: string[]\n }[] = []\n\n const subtreeFilenames = (node: NavNode<any>): string[] => {\n const out = [node.doc.filename]\n for (const c of node.children) out.push(...subtreeFilenames(c))\n return out\n }\n\n const navClick = (doc: Doc) => (event: Event) => {\n // Use the href from the closure, not the event — the click can land on a\n // child of the <a> (the localized label), so event.currentTarget/target\n // isn't reliably the anchor.\n const nav = (event.target as HTMLElement).closest(\n 'tosi-sidenav'\n ) as TosiSidenav | null\n if (nav) nav.contentVisible = true\n go(String(doc.filename))\n event.preventDefault()\n const results = pageTestResults[doc.filename]\n if (results && !results.passed) {\n setTimeout(() => {\n const failed = document.querySelector('tosi-example.-test-failed')\n if (failed)\n failed.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }, 100)\n }\n }\n\n const renderNode = (node: NavNode<any>): HTMLElement => {\n const link = a(\n {\n class: 'doc-link',\n href: hrefFor(node.doc.filename),\n onClick: navClick(node.doc),\n },\n tosiLocalized(node.doc.title)\n )\n if (node.children.length === 0) {\n const item = li(link)\n leaves.set(node.doc.filename, { li: item, link })\n return item\n }\n const det = details(\n summary(link),\n ul(...node.children.map(renderNode))\n ) as HTMLDetailsElement\n const item = li(det)\n branches.push({\n li: item,\n el: det,\n link,\n filename: node.doc.filename,\n subtree: subtreeFilenames(node),\n })\n return item\n }\n\n const root = div(navStyle, ul(...roots.map(renderNode)))\n\n // Search is computed straight from the raw docs (plain strings) — going\n // through app.docs gives BoxedScalars / unreliable write-through.\n const matchesSearch = (filename: string, needle: string): boolean => {\n if (!needle) return true\n const doc = docs.find((d) => d.filename === filename) as any\n return (\n !!doc &&\n (String(doc.title).toLocaleLowerCase().includes(needle) ||\n String(doc.text).toLocaleLowerCase().includes(needle))\n )\n }\n const applyStatus = (\n link: HTMLElement,\n filename: string,\n current: string\n ) => {\n link.classList.toggle('current', filename === current)\n const r = pageTestResults[filename]\n link.classList.toggle('-test-passed', !!r && r.passed)\n link.classList.toggle('-test-failed', !!r && !r.passed)\n }\n\n refreshNav = (resetOpen = false) => {\n // app.currentDoc.filename is a BoxedScalar; coerce so === / includes work.\n const cur = app.currentDoc as any\n const current = cur && cur.filename != null ? String(cur.filename) : ''\n const needle = searchField.value.trim().toLocaleLowerCase()\n\n // Use inline display (not the [hidden] attr): an author `display` rule on\n // .doc-nav li would override [hidden]'s display:none.\n for (const [filename, { li: item, link }] of leaves) {\n item.style.display = matchesSearch(filename, needle) ? '' : 'none'\n applyStatus(link, filename, current)\n }\n for (const { li: item, el, link, filename, subtree } of branches) {\n // Visible if the section name matches, or any descendant leaf is shown.\n const visible =\n matchesSearch(filename, needle) ||\n subtree.some(\n (fn) =>\n leaves.has(fn) && leaves.get(fn)!.li.style.display !== 'none'\n )\n item.style.display = visible ? '' : 'none'\n applyStatus(link, filename, current)\n // While searching, expand sections with matches. On navigation/clear\n // (resetOpen), collapse everything except the current doc's section.\n // Otherwise (e.g. test-status refresh) leave user toggles alone.\n if (needle) el.open = visible\n else if (resetOpen) el.open = subtree.includes(current)\n else if (subtree.includes(current)) el.open = true\n }\n }\n refreshNav(true)\n return root\n }\n\n const navContent =\n routing !== 'query'\n ? buildHierarchicalNav()\n : div(\n {\n ...navStyle,\n bindList: {\n idPath: 'filename',\n hiddenProp: 'hidden',\n value: app.docs,\n },\n },\n template(\n a(\n {\n class: 'doc-link',\n bindCurrent: `${stateKey}.currentDoc.filename`,\n bindDocLink: '^.filename',\n bindTestStatus: '^.testStatus',\n onClick(event: Event) {\n const doc = getListItem(event.target as HTMLElement)\n const nav = (event.target as HTMLElement).closest(\n 'tosi-sidenav'\n ) as TosiSidenav\n nav.contentVisible = true\n go(String((doc as Doc).filename))\n event.preventDefault()\n },\n },\n tosiLocalized({ bindText: '^.title' })\n )\n )\n )\n\n const container = div(\n {\n style: {\n display: 'flex',\n flexDirection: 'column',\n maxWidth: '100vw',\n height: '100vh',\n overflow: 'hidden',\n },\n },\n header(...headerContent),\n tosiSidenav(\n {\n name: 'Documentation',\n navSize,\n minSize,\n style: {\n flex: '1 1 auto',\n overflow: 'hidden',\n },\n onChange(event: Event) {\n // Scope to the sidenav that fired — and capture it so the header toggle\n // targets THIS instance, not the first sidenav in the document.\n sidenav = (event.target as HTMLElement).closest(\n TosiSidenav.tagName!\n ) as TosiSidenav | null\n if (sidenav) app.compact = sidenav.compact as any\n },\n },\n searchField,\n navContent,\n div(\n {\n style: {\n position: 'relative',\n overflowY: 'scroll',\n height: '100%',\n },\n },\n button(\n {\n class: 'view-source',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n position: 'fixed',\n top: 'calc(var(--xin-header-height, 60px) + 5px)',\n right: '5px',\n // Above the code editor (which fills the content area); below the\n // popped menu (z 1002).\n zIndex: '100',\n fontSize: '0.875em',\n color: 'var(--brand-color, inherit)',\n // Solid, theme-aware chip so it stays legible over the editor.\n background: 'var(--background, white)',\n border: 'none',\n borderRadius: '4px',\n padding: '3px 8px',\n boxShadow: '0 1px 4px #0003',\n cursor: 'pointer',\n transition: 'opacity 0.2s ease',\n },\n // Opacity + :hover live in CSS (.view-source) — a JS hover handler\n // here would fade the delegation root (the whole page), not the button.\n onClick(event: Event) {\n // tosijs delegates clicks, so event.currentTarget is the delegation\n // root, not the button — resolve the real trigger for menu anchoring.\n const btn = (event.target as HTMLElement).closest(\n '.view-source'\n ) as HTMLElement | null\n if (btn) openSourceMenu(btn)\n },\n bind: {\n value: app.currentDoc,\n binding(element: HTMLButtonElement, doc: Doc) {\n // Show when there's a source file to edit/view (any doc with a\n // path); the menu handles dev-vs-GitHub availability per item.\n element.style.display = doc.path ? 'flex' : 'none'\n },\n },\n },\n icons.code({ style: { _xinIconSize: 16 } }),\n 'Source'\n ),\n docContent\n )\n )\n )\n\n // Render the landing doc (adopts pre-rendered HTML when hydrating).\n showDoc(currentDoc)\n\n // Inject test indicator styles\n StyleSheet('test-indicators', testIndicatorStyleSpec)\n\n // Floating widget for test status\n const testWidget = button(\n {\n class: 'test-widget',\n hidden: true,\n onClick: showTestMenu,\n },\n span({ part: 'label' }, 'Tests'),\n span({ class: 'count', part: 'count' }, '0')\n )\n container.appendChild(testWidget)\n\n let testsRunning = false\n\n function setTestWidgetRunning() {\n testsRunning = true\n testWidget.hidden = false\n testWidget.classList.remove('-passed', '-failed')\n testWidget.classList.add('-running')\n updateTestWidgetDisplay()\n }\n\n function updateTestWidgetDisplay() {\n const labelEl = testWidget.querySelector('[part=\"label\"]')\n const countEl = testWidget.querySelector('[part=\"count\"]')\n\n const totalPassed = Object.values(pageTestResults).reduce(\n (sum, r) => sum + r.totalPassed,\n 0\n )\n const totalFailed = Object.values(pageTestResults).reduce(\n (sum, r) => sum + r.totalFailed,\n 0\n )\n\n if (labelEl) {\n if (testsRunning) {\n labelEl.textContent = 'Running'\n } else if (totalFailed > 0) {\n labelEl.textContent = 'Failed'\n } else if (totalPassed > 0) {\n labelEl.textContent = 'Passed'\n } else {\n labelEl.textContent = 'Tests'\n }\n }\n if (countEl) {\n countEl.textContent =\n totalFailed > 0 ? String(totalFailed) : String(totalPassed)\n }\n }\n\n function updateTestWidget() {\n const totalFailed = Object.values(pageTestResults).reduce(\n (sum, r) => sum + r.totalFailed,\n 0\n )\n\n if (testsRunning && pagesTested >= pagesWithTests) {\n // Tests complete\n testsRunning = false\n testWidget.classList.remove('-running')\n if (totalFailed > 0) {\n testWidget.classList.add('-failed')\n testWidget.classList.remove('-passed')\n testWidget.hidden = false\n } else {\n testWidget.classList.add('-passed')\n testWidget.classList.remove('-failed')\n testWidget.hidden = false // Show briefly before fade\n }\n }\n\n updateTestWidgetDisplay()\n }\n\n function showTestMenu() {\n const failedPages = Object.entries(pageTestResults).filter(\n ([, results]) => !results.passed\n )\n\n const menuItems: any[] = []\n\n for (const [filename, results] of failedPages) {\n const doc = docs.find((d) => d.filename === filename)\n const failedTests = results.tests.filter((t) => !t.passed)\n\n for (const test of failedTests) {\n menuItems.push({\n caption: `${doc?.title || filename}: ${test.name}`,\n action: () => {\n // Navigate to the page\n const docObj = app.docs.find(\n (d: any) => String(d.filename) === filename\n )\n if (docObj) {\n go(filename)\n // Scroll to failing test after render\n setTimeout(() => {\n const failedExample = document.querySelector(\n 'tosi-example.-test-failed'\n )\n if (failedExample) {\n failedExample.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n })\n }\n }, 100)\n }\n },\n })\n }\n }\n\n if (menuItems.length > 0) {\n menuItems.push(null) // separator\n }\n\n menuItems.push({\n icon: 'copy',\n caption: 'Copy test results to clipboard',\n action: () => {\n const report = generateTestReport()\n navigator.clipboard.writeText(report)\n },\n })\n\n popMenu({\n target: testWidget,\n menuItems,\n })\n }\n\n function generateTestReport(): string {\n const lines: string[] = ['# Test Results', '']\n let totalPassed = 0\n let totalFailed = 0\n\n for (const [filename, results] of Object.entries(pageTestResults)) {\n const doc = docs.find((d) => d.filename === filename)\n const title = doc?.title || filename\n\n totalPassed += results.totalPassed\n totalFailed += results.totalFailed\n\n if (results.tests.length > 0) {\n lines.push(`## ${title}`)\n lines.push('')\n for (const test of results.tests) {\n const icon = test.passed ? '✓' : '✗'\n const line = test.error\n ? `- ${icon} ${test.name}: ${test.error}`\n : `- ${icon} ${test.name}`\n lines.push(line)\n }\n lines.push('')\n }\n }\n\n lines.unshift(\n `**Summary: ${totalPassed} passed, ${totalFailed} failed**`,\n ''\n )\n\n return lines.join('\\n')\n }\n\n // Detect if running as background test iframe (never for an embedded browser —\n // it shares the host page's URL but isn't the test target).\n const searchParams = new URLSearchParams(window.location.search)\n const isTestFrame = !memoryRouting && searchParams.get('_testMode') === '1'\n const testFrameFilename = isTestFrame ? filenameFromLocation() : null\n\n // Listen for test completion events\n container.addEventListener('testcomplete', ((event: CustomEvent) => {\n handleTestComplete(event)\n updateTestWidget()\n\n // If running in test iframe, post results to parent\n if (isTestFrame && window.parent !== window && testFrameFilename) {\n const { results } = event.detail as { results: TestResults }\n window.parent.postMessage(\n { type: 'tosi-test-results', filename: testFrameFilename, results },\n '*'\n )\n }\n }) as EventListener)\n\n // If running as test iframe, signal when all tests on this page are done\n if (isTestFrame && testFrameFilename) {\n const signalDone = () => {\n const examples = container.querySelectorAll('tosi-example')\n const withTests = [...examples].filter((ex) =>\n ex.classList.contains('-has-tests')\n )\n const running = withTests.filter((ex) =>\n ex.classList.contains('-test-running')\n )\n if (withTests.length > 0 && running.length === 0) {\n window.parent.postMessage(\n { type: 'tosi-tests-done', filename: testFrameFilename },\n '*'\n )\n } else {\n setTimeout(signalDone, 100)\n }\n }\n // Give time for examples to start running\n setTimeout(signalDone, 500)\n }\n\n // Background test runner for all doc pages\n const runBackgroundTests = async () => {\n if (backgroundTestsStarted) return\n if (!testManager.enabled.value) return\n if (isTestFrame) return // Don't run background tests in test iframe\n backgroundTestsStarted = true\n\n // Find all docs that have test blocks. (Pages with examples but no explicit\n // tests are covered cheaply at BUILD time by the transpile check —\n // src/doc-system/site/check-examples.ts — without loading them in a browser,\n // so the runner doesn't have to render every heavy page just to notice a\n // build error.)\n const docsWithTests = docs.filter((doc) => doc.text.includes('```test'))\n pagesWithTests = docsWithTests.length\n\n if (pagesWithTests > 0) {\n setTestWidgetRunning()\n }\n\n if (pagesWithTests === 0) {\n if (testResultsResolve) {\n testResultsResolve({ passed: 0, failed: 0, pages: {} })\n testResultsResolve = undefined\n }\n return\n }\n\n const currentFilename = String(app.currentDoc.filename)\n\n // Create a hidden iframe that loads the full page. Keep its real 800x600\n // layout size (layout-dependent example tests need it) but park it\n // off-screen rather than rely on opacity:0 over the visible page — Chromium\n // (and haltija on top of it) still composites a 0-opacity layer at 0,0,\n // which flashes as the frame navigates page to page.\n const testFrame = document.createElement('iframe')\n testFrame.style.cssText =\n 'position: fixed; left: -10000px; top: 0; width: 800px; height: 600px; opacity: 0; pointer-events: none;'\n document.body.appendChild(testFrame)\n\n // Listen for test results posted from the iframe\n const messageHandler = (event: MessageEvent) => {\n if (event.data?.type !== 'tosi-test-results') return\n const { filename, results } = event.data as {\n type: string\n filename: string\n results: TestResults\n }\n if (!pageTestResults[filename]) {\n pageTestResults[filename] = {\n passed: true,\n tests: [],\n totalPassed: 0,\n totalFailed: 0,\n }\n }\n const pageResults = pageTestResults[filename]\n pageResults.tests.push(...results.tests)\n pageResults.totalPassed += results.passed\n pageResults.totalFailed += results.failed\n pageResults.passed = pageResults.totalFailed === 0\n updateDocTestStatus(filename)\n updateTestWidget()\n }\n window.addEventListener('message', messageHandler)\n\n for (const doc of docsWithTests) {\n // Skip current page — it runs tests naturally\n if (doc.filename === currentFilename) continue\n\n // Navigate iframe to the page\n testFrame.src =\n routing === 'path'\n ? `${window.location.origin}${hrefFor(doc.filename)}?_testMode=1`\n : `${window.location.origin}${window.location.pathname}?${doc.filename}&_testMode=1`\n\n // Wait for the iframe to signal it's done (max 30s per page)\n await new Promise<void>((resolve) => {\n const deadline = Date.now() + 30_000\n const onDone = (event: MessageEvent) => {\n if (\n event.data?.type === 'tosi-tests-done' &&\n event.data.filename === doc.filename\n ) {\n window.removeEventListener('message', onDone)\n resolve()\n }\n }\n window.addEventListener('message', onDone)\n setTimeout(() => {\n window.removeEventListener('message', onDone)\n resolve()\n }, deadline - Date.now())\n })\n\n markPageTested(doc.filename)\n }\n\n // Clean up\n window.removeEventListener('message', messageHandler)\n testFrame.remove()\n\n // Mark current page as tested if it has tests\n if (docsWithTests.some((d) => d.filename === currentFilename)) {\n setTimeout(() => markPageTested(currentFilename), 1000)\n }\n }\n\n // Run background tests when enabled (initially or when toggled on)\n const startBackgroundTests = () => {\n if (!testManager.enabled.value) return\n if (isLocalhost) {\n setTimeout(runBackgroundTests, 1000)\n } else {\n const currentHasTests = currentDoc.text.includes('```test')\n if (currentHasTests) {\n pagesWithTests = 1\n setTestWidgetRunning()\n setTimeout(() => markPageTested(currentDoc.filename), 2000)\n } else if (testResultsResolve) {\n testResultsResolve({ passed: 0, failed: 0, pages: {} })\n testResultsResolve = undefined\n }\n }\n }\n\n // Start now if enabled, and watch for toggle. A memory-routed (embedded)\n // browser never spawns the test-runner iframes (they'd navigate the host site).\n if (!memoryRouting) {\n startBackgroundTests()\n testManager.enabled.observe(startBackgroundTests)\n }\n\n // Memory routing: let the host drive navigation programmatically (by slug) and\n // read the current slug back, so the browser can live in a floating panel etc.\n if (memoryRouting) {\n ;(container as any).navigate = (slug: string) =>\n navigateTo(filenameForSlug(slug) || slug)\n Object.defineProperty(container, 'currentSlug', {\n get: () => slugFor(String(app.currentDoc.filename)),\n })\n }\n\n return container as HTMLElement\n}\n",
|
|
46
47
|
"/*\nShared, browser-safe assembly of the whole doc corpus into one printable HTML\n\"book\": a title page, a generated table of contents, then every doc as a chapter\nthat starts on a new page. Used by the client-side **Print** button in the\ndoc-browser (the user's browser prints it to PDF). Pure rendering — no fs, no\nNode-only APIs — so it bundles into the iife. Live examples are pretty-printed,\nforce-wrapped code listings, not executed.\n*/\n\nimport { renderDocMarkdown } from './render'\nimport { buildSlugMap } from './routing'\nimport { buildNavTree, NavNode, NavDoc } from './nav-tree'\n\nexport interface BookDoc {\n filename: string\n title: string\n text: string\n parent?: string\n hidden?: boolean\n}\n\n// Clean book typography; force-wraps code so listings never overflow a page.\nexport const DEFAULT_BOOK_CSS = `/* doc-system book stylesheet */\nhtml { font-size: 100%; }\nbody {\n font-family: Georgia, 'Times New Roman', serif;\n line-height: 1.5;\n margin: 0 1em;\n color: #1a1a1a;\n}\nh1, h2, h3, h4, h5, h6 {\n font-family: -apple-system, 'Helvetica Neue', Arial, sans-serif;\n line-height: 1.2;\n margin: 1.4em 0 0.5em;\n}\nh1 { font-size: 1.8em; }\nh2 { font-size: 1.4em; }\nh3 { font-size: 1.2em; }\np { margin: 0.6em 0; }\na { color: #08c; text-decoration: none; }\nul, ol { margin: 0.6em 0; padding-left: 1.4em; }\nblockquote {\n margin: 0.8em 0;\n padding: 0 0 0 1em;\n border-left: 3px solid #ccc;\n color: #555;\n}\nimg { max-width: 100%; height: auto; }\ntable { border-collapse: collapse; margin: 0.8em 0; font-size: 0.85em; }\nth, td { border: 1px solid #ccc; padding: 0.3em 0.6em; text-align: left; }\ncode, pre {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 0.8em;\n}\n:not(pre) > code {\n background: #f3f3f3;\n padding: 0.1em 0.3em;\n border-radius: 3px;\n}\npre {\n background: #f6f8fa;\n border: 1px solid #e1e4e8;\n border-radius: 4px;\n padding: 0.7em 0.9em;\n margin: 0.8em 0;\n white-space: pre-wrap;\n word-break: break-word;\n overflow-wrap: anywhere;\n}\npre code { background: none; padding: 0; }\n/* the in-flow Contents page (ePub spine TOC) */\n.toc-title { text-align: center; }\nol.toc, ol.toc ol { list-style: none; padding-left: 0; }\nol.toc ol { padding-left: 1.2em; }\nol.toc li { margin: 0.3em 0; }\nol.toc > li > a { font-weight: bold; }\n/* per-example \"run this live\" deep link */\n.example-live-link { margin: 0.6em 0 0; font-size: 0.85em; }\n.example-live-link a { color: #08c; font-weight: bold; }\n/* footnotes / endnotes + wikilinks */\nsup.footnote-ref { font-size: 0.7em; line-height: 0; }\nsup.footnote-ref a { text-decoration: none; }\n.footnotes { margin-top: 2em; font-size: 0.9em; }\n.footnotes hr { border: none; border-top: 1px solid #ccc; margin: 1em 0; }\n.footnote-backref { text-decoration: none; }\na.wikilink { text-decoration: none; border-bottom: 1px dotted currentColor; }\n`\n\n// Print-only layout: page margins, a chapter per page, an avoid-break TOC.\nexport const PRINT_CSS = `\n@page { margin: 18mm 16mm; }\n.book-title { text-align: center; margin: 30vh 0 1em; }\n.book-toc { page-break-after: always; }\n.book-toc h2 { page-break-before: avoid; }\n.book-toc ol { list-style: none; padding-left: 0; }\n.book-toc ol ol { padding-left: 1.2em; }\n.book-toc a { color: inherit; }\n.chapter { page-break-before: always; }\n`\n\nexport function escapeHtml(s: string): string {\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\n}\n\nexport function slugify(s: string): string {\n return s\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n}\n\n/** Drop the `<!--{ … }-->` metadata directives the extractor leaves in the text. */\nexport function stripDocMeta(text: string): string {\n return text.replace(/<!--\\{[\\s\\S]*?\\}-->\\s*/g, '')\n}\n\n/** Flatten a nav-tree depth-first into reading order. */\nexport function flatten<T extends NavDoc>(nodes: NavNode<T>[]): NavNode<T>[] {\n const out: NavNode<T>[] = []\n for (const node of nodes) {\n out.push(node)\n out.push(...flatten(node.children))\n }\n return out\n}\n\nfunction tocHtml(nodes: NavNode<BookDoc>[]): string {\n return nodes\n .map(\n (node) =>\n `<li><a href=\"#${slugify(node.doc.filename)}\">${escapeHtml(\n node.doc.title\n )}</a>${\n node.children.length ? `<ol>${tocHtml(node.children)}</ol>` : ''\n }</li>`\n )\n .join('')\n}\n\nexport interface BookHtmlOptions {\n title: string\n /** full stylesheet (defaults to DEFAULT_BOOK_CSS + PRINT_CSS) */\n css?: string\n lang?: string\n /** inject a script that opens the print dialog once the page has loaded */\n autoPrint?: boolean\n}\n\n/** Assemble the whole corpus into one self-contained printable HTML document. */\nexport function buildBookHtml(docs: BookDoc[], opts: BookHtmlOptions): string {\n const visible = docs.filter((d) => !d.hidden)\n const slugMap = buildSlugMap(visible)\n const roots = buildNavTree(visible, slugMap)\n const css = opts.css ?? `${DEFAULT_BOOK_CSS}\\n${PRINT_CSS}`\n\n const chapters = flatten(roots)\n .map(\n (node) =>\n `<section class=\"chapter\" id=\"${slugify(\n node.doc.filename\n )}\">\\n${renderDocMarkdown(stripDocMeta(node.doc.text))}\\n</section>`\n )\n .join('\\n')\n\n return `<!DOCTYPE html>\n<html lang=\"${opts.lang ?? 'en'}\">\n<head>\n<meta charset=\"utf-8\"/>\n<title>${escapeHtml(opts.title)}</title>\n<style>${css}</style>\n</head>\n<body>\n<h1 class=\"book-title\">${escapeHtml(opts.title)}</h1>\n<nav class=\"book-toc\"><h2>Contents</h2><ol>${tocHtml(roots)}</ol></nav>\n${chapters}\n${\n opts.autoPrint\n ? '<script>addEventListener(\"load\",function(){setTimeout(function(){print()},300)})</script>'\n : ''\n}\n</body>\n</html>`\n}\n",
|
|
47
|
-
"/*\nDefault theme + page styling for <tosi-doc-system>.\n\nThis is the stylesheet the component injects so a generated static page looks like\na finished doc site without depending on any app bootstrap. It uses the legacy\n`--brand-color` / `--background` / `--spacing` CSS-variable family that the doc\nbrowser and markdown styles are built on.\n\nColors are computed from a small set of base colors via tosijs `Color` math, so the\npalette can eventually be driven entirely by a few attributes on the element\n(accent/background/text) — most of the palette is derived from `accent`.\n*/\n\nimport {\n XinStyleSheet,\n XinStyleRule,\n vars,\n Color,\n invertLuminance,\n} from 'tosijs'\nimport { icons, svg2DataUrl } from '../icons'\n\n// The sidebar's geometry, shared by the hydrated layout and the pre-hydration one.\n// These mirror what <tosi-sidenav> is given by doc-browser (navSize / minSize): the\n// sidebar is `SIDEBAR_WIDTH` wide and collapses behind a toggle below\n// `SIDEBAR_BREAKPOINT`. Keep them in step, or the page jumps as it hydrates.\nexport const SIDEBAR_WIDTH = 200\nexport const SIDEBAR_BREAKPOINT = 600\n\nexport interface DocSystemTheme {\n /** brand / accent color — most of the palette is derived from this */\n accent?: string\n background?: string\n text?: string\n buttonBg?: string\n inputBg?: string\n}\n\n/** Compute the full set of `:root` color variables from a few base colors. */\nexport function docSystemColors(theme: DocSystemTheme = {}): XinStyleRule {\n const brandColor = Color.fromCss(theme.accent ?? '#EE257B')\n return {\n _textColor: theme.text ?? '#222',\n _brandColor: brandColor,\n _background: theme.background ?? '#fafafa',\n _buttonBg: theme.buttonBg ?? '#fdfdfd',\n _inputBg: theme.inputBg ?? '#fdfdfd',\n _backgroundShaded: '#f5f5f5',\n _navBg: brandColor.rotate(30).desaturate(0.5).brighten(0.9),\n _barColor: brandColor.opacity(0.4),\n _focusColor: brandColor.opacity(0.7),\n _placeholderColor: brandColor.opacity(0.4),\n _brandTextColor: brandColor.rotate(30).brighten(0.9),\n _insetBg: brandColor.rotate(45).brighten(0.8),\n _codeBg: brandColor.rotate(-15).desaturate(0.5).brighten(0.9),\n _linkColor: brandColor.rotate(-30).darken(0.5),\n _shadowColor: '#0004',\n _menuBg: '#fafafa',\n _menuItemActiveColor: '#000',\n _menuItemIconActiveColor: '#000',\n _menuItemActiveBg: '#aaa',\n _menuItemHoverBg: '#eee',\n _menuItemColor: '#222',\n _menuSeparatorColor: '#2224',\n _menuShadow: '0 4px 8px #0004',\n _scrollThumbColor: '#0006',\n _scrollBarColor: '#0001',\n _inputBorderShadow: 'inset 0 0 2px #0006',\n }\n}\n\n/** Build the full doc-system stylesheet for a given base theme. */\nexport function docSystemStyleSpec(theme: DocSystemTheme = {}): XinStyleSheet {\n const colors = docSystemColors(theme)\n const brandColor = Color.fromCss(theme.accent ?? '#EE257B')\n return {\n '@import':\n 'https://fonts.googleapis.com/css2?family=Aleo:ital,wght@0,100..900;1,100..900&famiSpline+Sans+Mono:ital,wght@0,300..700;1,300..700&display=swap',\n ':root': {\n _fontFamily: \"'Aleo', sans-serif\",\n _codeFontFamily: \"'Spline Sans Mono', monospace\",\n _fontSize: '16px',\n _codeFontSize: '14px',\n ...colors,\n // Bridge the tosijs component palette (`--tosi-*`) onto the doc-system's color\n // family. Defined as REFERENCES, so a component reading `var(--tosi-bg)` follows\n // the site theme automatically — including dark mode, where `invertLuminance()`\n // flips the referenced `--background`/`--text-color`/… in `.darkmode`. Without\n // this the doc-system never set `--tosi-*`, so components fell back to their\n // baked-in light defaults (e.g. `var(--tosi-bg, #fff)` → white <tosi-table> in\n // dark mode). Colors only — component metrics keep their own defaults.\n _tosiAccent: vars.brandColor,\n _tosiBg: vars.background,\n _tosiText: vars.textColor,\n _tosiBgInset: vars.insetBg,\n _spacing: '10px',\n _lineHeight: 'calc(var(--font-size) * 1.6)',\n _h1Scale: '2',\n _h2Scale: '1.5',\n _h3Scale: '1.25',\n _touchSize: '32px',\n _headerHeight:\n 'calc( var(--line-height) * var(--h2-scale) + var(--spacing) * 2 )',\n // The content column's width. ONE definition, read by both the hydrated\n // doc-browser (doc-browser.ts) and the pre-hydration `:not(:defined)` layout\n // below — if these two ever disagree, the page jumps on hydration.\n _docContentMaxWidth: '44em',\n },\n '.darkmode': {\n ...invertLuminance(colors),\n _shadowColor: brandColor.opacity(0.5),\n _menuShadow: `0 0 0 2px ${brandColor.opacity(0.75)}`,\n _menuSeparatorColor: brandColor.opacity(0.5),\n },\n '.high-contrast': {\n filter: 'contrast(2)',\n },\n '*': {\n boxSizing: 'border-box',\n scrollbarColor: `${vars.scrollThumbColor} ${vars.scrollBarColor}`,\n scrollbarWidth: 'thin',\n },\n body: {\n fontFamily: vars.fontFamily,\n fontSize: vars.fontSize,\n margin: '0',\n lineHeight: vars.lineHeight,\n background: vars.background,\n _tosiTabsSelectedColor: vars.brandColor,\n _tosiTabsBarColor: vars.brandTextColor,\n _menuItemIconColor: vars.brandColor,\n color: vars.textColor,\n },\n // <tosi-doc-system> is a light-DOM block that fills the viewport; the doc\n // browser container inside it provides the flex column + 100vh.\n 'tosi-doc-system': {\n display: 'block',\n },\n 'tosi-doc-system tosi-sidenav::part(nav)': {\n background: vars.navBg,\n },\n\n // ── Pre-hydration layout (`:not(:defined)`) ──────────────────────────────\n //\n // An UNDEFINED custom element is `display: inline`, so before the bundle loads\n // the pre-rendered page — which already contains the nav tree, the content and\n // the code blocks — stacks as bare text with no chrome. That reflow-on-hydrate\n // is why the page used to hide its own body (`body{opacity:0}`) until the\n // bundle arrived: on a cheap phone that's ~4.5s of blank screen for content\n // that was in the HTML at ~300ms.\n //\n // Instead, lay the static page out AS THOUGH the chrome were already there:\n // the content sits in a scrolling rectangle inset by the header, and by the\n // sidebar once the viewport is wide enough. Hydration then only ADDS the\n // chrome — and `doc-browser` ADOPTS this very `.doc-content` node rather than\n // re-rendering it, so with the same box metrics below, nothing moves at all.\n //\n // These rules evaporate by themselves the moment the element upgrades.\n 'tosi-doc-system:not(:defined)': {\n display: 'block',\n position: 'fixed',\n inset: `${vars.headerHeight} 0 0 0`,\n overflow: 'auto',\n },\n // The header bar: painted, not populated — its contents (brand, links) arrive\n // with hydration, in this exact space.\n 'tosi-doc-system:not(:defined)::before': {\n content: '\"\"',\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n height: vars.headerHeight,\n background: vars.brandColor,\n },\n // Same box the hydrated doc-browser gives this node (see doc-browser.ts), so\n // adoption is a no-op geometrically.\n 'tosi-doc-system:not(:defined) .doc-content': {\n display: 'block',\n maxWidth: vars.docContentMaxWidth,\n margin: 'auto',\n padding: '0 1em',\n // Must match doc-browser's inline style EXACTLY, `overflow` included: it\n // establishes a block formatting context, which stops the <h1>'s top margin\n // collapsing out of the box. Without it the static content sits 10px lower\n // than the hydrated content, and the page nudges as it comes alive.\n overflow: 'hidden',\n },\n // The header-bar links are icon links; without the icon font they'd render as\n // stray text in the bar. They arrive with hydration.\n 'tosi-doc-system:not(:defined) .doc-navbar': {\n display: 'none',\n },\n // A `test` block is an example's ASSERTIONS. The live example keeps them behind\n // a tab — a reader is never shown them — so rendering them statically both\n // misrepresents the page and adds height that disappears the moment the example\n // mounts. (`:has()` is a progressive enhancement: where it isn't supported the\n // block simply stays visible, which is what happens today anyway.)\n 'tosi-doc-system:not(:defined) pre:has(> code.language-test)': {\n display: 'none',\n },\n // Below the sidebar breakpoint (side-nav goes compact under\n // `doc-browser`'s minSize) the nav is behind a toggle, so it isn't shown.\n 'tosi-doc-system:not(:defined) .doc-nav': {\n display: 'none',\n },\n // Wide enough for the sidebar: reserve its column, and show the REAL nav tree\n // in it. It's a plain <ul> with native <details> groups, so it navigates and\n // collapses without a line of JavaScript — a no-JS reader gets a working site,\n // and hydration merely upgrades it in place.\n [`@media (min-width: ${SIDEBAR_BREAKPOINT}px)`]: {\n 'tosi-doc-system:not(:defined)': {\n left: `${SIDEBAR_WIDTH}px`,\n },\n 'tosi-doc-system:not(:defined) .doc-nav': {\n display: 'block',\n position: 'fixed',\n left: '0',\n top: vars.headerHeight,\n bottom: '0',\n width: `${SIDEBAR_WIDTH}px`,\n overflow: 'auto',\n background: vars.navBg,\n // NO padding. The hydrated nav sits in a <tosi-sidenav> whose own padding is 0 —\n // the visual inset comes from `.doc-link`'s padding, which both states share. A\n // `padding: spacing` here shifted every static nav link 10px right, so the whole\n // column jumped left the instant the bundle loaded. Whatever this block sets, the\n // upgraded component must already set too, or hydration is not \"purely additive\".\n padding: '0',\n },\n // NOTE: no `a` / `ul` rules here on purpose. There used to be a second,\n // hand-authored copy of the nav's link styling under `:not(:defined)`, because\n // the static generator emitted a bare <a> while the hydrated nav emits\n // <a class=\"doc-link\">. It drifted (2.5px vs 5px/15px padding, a brand-coloured\n // underline that only the static copy had), so every page painted one nav and\n // then reflowed into a different one. The generator now emits `doc-link` too, so\n // the SHARED rules below style both states and nothing moves on hydration.\n //\n // Only genuinely pre-hydration-specific rules belong in this block — the fixed\n // positioning above, which the upgraded component takes over itself.\n 'tosi-doc-system:not(:defined) .doc-nav summary': {\n cursor: 'pointer',\n },\n },\n '.center': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n 'input, button, select, textarea': {\n fontFamily: vars.fontFamily,\n fontSize: vars.fontSize,\n color: 'currentColor',\n background: vars.inputBg,\n },\n select: {\n WebkitAppearance: 'none',\n appearance: 'none',\n },\n header: {\n background: vars.brandColor,\n color: vars.brandTextColor,\n _textColor: vars.brandTextColor,\n _linkColor: vars.brandTextColor,\n display: 'flex',\n alignItems: 'center',\n padding: '0 var(--spacing)',\n lineHeight: 'calc(var(--line-height) * var(--h1-scale))',\n height: vars.headerHeight,\n whiteSpace: 'nowrap',\n },\n h1: {\n color: vars.brandColor,\n fontSize: 'calc(var(--font-size) * var(--h1-scale))',\n lineHeight: 'calc(var(--line-height) * var(--h1-scale))',\n fontWeight: '400',\n borderBottom: `4px solid ${vars.barColor}`,\n margin: `${vars.spacing} 0 ${vars.spacing200}`,\n padding: 0,\n },\n 'header h2': {\n color: vars.brandTextColor,\n whiteSpace: 'nowrap',\n },\n h2: {\n color: vars.brandColor,\n fontSize: 'calc(var(--font-size) * var(--h2-scale))',\n lineHeight: 'calc(var(--line-height) * var(--h2-scale))',\n margin: 'calc(var(--spacing) * var(--h2-scale)) 0',\n },\n h3: {\n fontSize: 'calc(var(--font-size) * var(--h3-scale))',\n lineHeight: 'calc(var(--line-height) * var(--h3-scale))',\n margin: 'calc(var(--spacing) * var(--h3-scale)) 0',\n },\n 'input[type=search]': {\n borderRadius: 99,\n },\n blockquote: {\n position: 'relative',\n background: vars.insetBg,\n margin: '0 48px 56px 0',\n borderRadius: vars.spacing,\n padding: 'var(--spacing) calc(var(--spacing) * 2)',\n filter: `drop-shadow(0px 1px 1px ${vars.shadowColor})`,\n },\n 'blockquote > :first-child': {\n marginTop: '0',\n },\n 'blockquote > :last-child': {\n marginBottom: '0',\n },\n 'blockquote::before': {\n content: '\" \"',\n display: 'block',\n width: 1,\n height: 1,\n border: '10px solid transparent',\n borderTopColor: vars.insetBg,\n borderRightColor: vars.insetBg,\n position: 'absolute',\n bottom: -20,\n right: 24,\n },\n 'blockquote::after': {\n content: '\" \"',\n width: 48,\n height: 48,\n display: 'block',\n bottom: -48,\n right: -24,\n position: 'absolute',\n background: svg2DataUrl(icons.tosi(), undefined, undefined, 2),\n },\n a: {\n textDecoration: 'none',\n color: vars.linkColor,\n opacity: '0.9',\n borderBottom: '1px solid var(--brand-color)',\n },\n 'button, select, .clickable': {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'ease-out 0.2s',\n _textColor: vars.brandColor,\n color: vars.textColor,\n textDecoration: 'none',\n background: vars.buttonBg,\n padding: '0 calc(var(--spacing) * 1.25)',\n border: 'none',\n borderRadius: 'calc(var(--spacing) * 0.5)',\n },\n 'button, select, .clickable, input': {\n lineHeight: 'calc(var(--line-height) + var(--spacing))',\n },\n 'input, textarea': {\n border: 'none',\n outline: 'none',\n borderRadius: 'calc(var(--spacing) * 0.5)',\n boxShadow: vars.inputBorderShadow,\n },\n input: {\n padding: '0 calc(var(--spacing) * 1.5)',\n },\n '::placeholder': {\n color: vars.placeholderColor,\n },\n img: {\n verticalAlign: 'middle',\n },\n 'button:hover, .clickable:hover': {\n boxShadow: 'inset 0 0 0 2px var(--brand-color)',\n },\n 'button:active, .clickable:active': {\n background: vars.brandColor,\n color: vars.brandTextColor,\n },\n label: {\n display: 'inline-flex',\n gap: 'calc(var(--spacing) * 0.5)',\n alignItems: 'center',\n },\n '.elastic': {\n flex: '1 1 auto',\n overflow: 'hidden',\n position: 'relative',\n },\n // Scope the icon styling (currentColor fill, click-through) to actual icons\n // and SVGs inside buttons — a blanket `svg` rule sets pointer-events:none on\n // every SVG, which breaks interactive SVG-based UIs (maps, charts, diagrams).\n 'svg.tosi-icon, button svg': {\n fill: 'currentColor',\n pointerEvents: 'none',\n },\n '[aria-selected]': {\n background: '#08835820',\n },\n ':disabled': {\n opacity: '0.5',\n filter: 'saturate(0)',\n pointerEvents: 'none',\n },\n pre: {\n background: vars.codeBg,\n padding: vars.spacing,\n borderRadius: 'calc(var(--spacing) * 0.25)',\n overflow: 'auto',\n fontSize: vars.codeFontSize,\n lineHeight: 'calc(var(--font-size) * 1.2)',\n },\n 'pre, code': {\n fontFamily: vars.codeFontFamily,\n _textColor: vars.brandColor,\n },\n '.transparent, .iconic': {\n background: 'none',\n },\n '.iconic': {\n padding: '0',\n fontSize: '150%',\n height: 'calc(var(--line-height) + var(--spacing))',\n lineHeight: 'calc(var(--line-height) + var(--spacing))',\n width: 'calc(var(--line-height) + var(--spacing))',\n textAlign: 'center',\n },\n '.transparent:hover, .iconic:hover': {\n background: '#0002',\n boxShadow: 'none',\n color: vars.textColor,\n },\n '.transparent:active, .iconic:active': {\n background: '#0004',\n boxShadow: 'none',\n color: vars.textColor,\n },\n '.current, summary:has(.current)': {\n background: vars.background,\n },\n '.doc-link': {\n cursor: 'pointer',\n borderBottom: 'none',\n transition: '0.15s ease-out',\n marginLeft: '10px',\n padding: 'calc(var(--spacing) * 0.5) calc(var(--spacing) * 1.5)',\n },\n '.doc-link:not(.current):hover': {\n background: vars.background,\n },\n '.doc-link:not(.current)': {\n opacity: '0.8',\n marginLeft: 0,\n },\n 'tosi-example': {\n margin: 'var(--spacing) 0',\n },\n 'tosi-example [part=editors]': {\n background: vars.insetBg,\n },\n \"[class*='icon-'], tosi-icon\": {\n color: 'currentcolor',\n pointerEvents: 'none',\n },\n \"[class*='icon-']\": {\n verticalAlign: 'middle',\n },\n table: {\n borderCollapse: 'collapse',\n },\n thead: {\n background: vars.brandColor,\n color: vars.brandTextColor,\n },\n tbody: {\n background: vars.background,\n },\n 'tr:nth-child(2n)': {\n background: vars.backgroundShaded,\n },\n 'th, td': {\n padding: 'calc(var(--spacing) * 0.5) var(--spacing)',\n },\n // Nav lists carry semantics only — no list styling. Hierarchy indentation\n // comes from left-padding on each section's child list (inside <details>).\n '.doc-nav ul, .doc-nav li': {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n },\n '.doc-nav li': {\n display: 'flex',\n flexDirection: 'column',\n },\n '.doc-nav': {\n display: 'flex',\n flexDirection: 'column',\n },\n '.doc-nav details > ul': {\n paddingLeft: vars.spacing,\n },\n // <summary> is the section header (its triangle toggles; the link navigates).\n '.doc-nav summary': {\n cursor: 'pointer',\n // indent the disclosure marker a bit from the edge\n paddingLeft: 'calc(var(--spacing) * 0.5)',\n },\n '.doc-nav summary::marker': {\n color: vars.brandColor,\n },\n '.doc-nav summary > .doc-link': {\n display: 'inline-block',\n // push the summary text in a bit less than a normal doc-link\n paddingLeft: 'calc(var(--spacing) * 0.5)',\n },\n // Declarative header link list — shown for no-JS, removed on hydration.\n '.doc-navbar': {\n listStyle: 'none',\n display: 'flex',\n flexWrap: 'wrap',\n gap: vars.spacing,\n margin: 0,\n padding: vars.spacing,\n },\n }\n}\n",
|
|
48
|
-
"/*#\n# forms\n\n`<tosi-form>` and `<tosi-field>` can be used to quickly create forms complete with\n[client-side validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation#built-in_form_validation_examples).\n\n```js\nconst form = preview.querySelector('tosi-form')\npreview.querySelector('.submit').addEventListener('click', form.submit)\n```\n```html\n<tosi-form value='{\"formInitializer\": \"initial value from form\"}'>\n <h3 slot=\"header\">Example Form Header</h3>\n <tosi-field caption=\"Required field\" key=\"required\"></tosi-field>\n <tosi-field optional key=\"optional\"><i>Optional</i> Field</tosi-field>\n <tosi-field key=\"text\" type=\"text\" placeholder=\"type it in here\">Tell us a long story</tosi-field>\n <tosi-field caption=\"Zip Code\" placeholder=\"12345 or 12345-6789\" key=\"zipcode\" pattern=\"\\d{5}(-\\d{4})?\"></tosi-field>\n <tosi-field caption=\"Date\" key=\"date\" type=\"date\"></tosi-field>\n <tosi-field caption=\"Number\" key=\"number\" type=\"number\"></tosi-field>\n <tosi-field caption=\"Range\" key=\"range\" type=\"range\" min=\"0\" max=\"10\"></tosi-field>\n <tosi-field key=\"boolean\" type=\"checkbox\">😃 <b>Agreed?!</b></tosi-field>\n <tosi-field key=\"color\" type=\"color\" value=\"pink\">\n favorite color\n </tosi-field>\n <tosi-field key=\"select\">\n Custom Field\n <select slot=\"input\">\n <option>This</option>\n <option>That</option>\n <option>The Other</option>\n </select>\n </tosi-field>\n <tosi-field key=\"tags\">\n Tag List\n <tosi-tag-list editable slot=\"input\" available-tags=\"pick me,no pick me\"></tosi-tag-list>\n </tosi-field>\n <tosi-field key=\"rating\">\n Rate this form!\n <tosi-rating slot=\"input\"></tosi-rating>\n </tosi-field>\n <tosi-field key=\"like\">\n Do you like it?\n <tosi-segmented\n choices=\"yes=Yes:thumbsUp,no=No:thumbsDown\"\n slot=\"input\"\n ></tosi-segmented>\n </tosi-field>\n <tosi-field key=\"relationship\">\n Relationship Status\n <tosi-segmented\n style=\"--segmented-direction: column; --segmented-align-items: stretch\"\n choices=\"couple=In a relationship,single=Single\"\n other=\"It's complicated…\"\n slot=\"input\"\n ></tosi-segmented>\n </tosi-field>\n <tosi-field key=\"amount\" fixed-precision=\"2\" type=\"number\" prefix=\"$\" suffix=\"(USD)\">\n What's it worth?\n </tosi-field>\n <tosi-field key=\"valueInitializer\" value=\"initial value from field\">\n Initialized by field\n </tosi-field>\n <tosi-field key=\"formInitializer\">\n Initialized by form\n </tosi-field>\n <button slot=\"footer\" class=\"submit\">Submit</button>\n</tosi-form>\n```\n```css\n.preview tosi-form {\n height: 100%;\n}\n\n.preview ::part(header), .preview ::part(footer) {\n background: var(--inset-bg);\n justify-content: center;\n padding: calc(var(--spacing) * 0.5) var(--spacing);\n}\n\n.preview h3, .preview h4 {\n margin: 0;\n padding: 0;\n}\n\n.preview ::part(content) {\n padding: var(--spacing);\n gap: var(--spacing);\n background: var(--background);\n}\n\n.preview label {\n display: grid;\n grid-template-columns: 180px auto 100px;\n gap: var(--spacing);\n}\n\n.preview label [part=\"caption\"] {\n text-align: right;\n}\n\n.preview label:has(:invalid:required)::after {\n content: '* required'\n}\n\n@media (max-width: 500px) {\n .preview label [part=\"caption\"] {\n text-align: center;\n }\n\n .preview label {\n display: flex;\n flex-direction: column;\n position: relative;\n align-items: stretch;\n gap: calc(var(--spacing) * 0.5);\n }\n\n .preview label:has(:invalid:required)::after {\n position: absolute;\n top: 0;\n right: 0;\n content: '*'\n }\n\n .preview tosi-field [part=\"field\"],\n .preview tosi-field [part=\"input\"] > * {\n display: flex;\n justify-content: center;\n }\n}\n\n.preview :invalid {\n box-shadow: inset 0 0 0 2px #F008;\n}\n```\n\n## `<tosi-form>`\n\n`<tosi-form>` prevents the default form behavior when a `submit` event is triggered and instead validates the\nform contents (generating feedback if desired) and calls its `submitCallback(value: {[key: string]: any}, isValid: boolean): void`\nmethod.\n\n`<tosi-form>` offers a `fields` proxy that allows values stored in the form to be updated. Any changes will trigger a `change`\nevent on the `<tosi-form>` (in addition to any events fired by form fields).\n\n`<tosi-form>` instances have `value` and `isValid` properties you can access any time. Note that `isValid` is computed\nand triggers form validation.\n\n`<tosi-form>` has `header` and `footer` `<slot>`s in addition to default `<slot>`, which is tucked inside a `<form>` element.\n\n## `<tosi-field>`\n\n`<tosi-field>` is a simple web-component with no shadowDOM that combines an `<input>` field wrapped with a `<label>`. Any\ncontent of the custom-element will become the `caption` or you can simply set the `caption` attribute.\n\nYou can replace the default `<input>` field by adding an element to the slot `input` (it's a `tosiSlot`) whereupon\nthe `value` of that element will be used instead of the built-in `<input>`. (The `<input>` is retained and\nis used to drive form-validation.)\n\n`<tosi-field>` supports the following attributes:\n\n- `caption` labels the field\n- `key` determines the form property the field will populate\n- `type` determines the data-type: '' | 'checkbox' | 'number' | 'range' | 'date' | 'text' | 'color'\n- `optional` turns off the `required` attribute (fields are required by default)\n- `pattern` is an (optional) regex pattern\n- `placeholder` is an (optional) placeholder\n\nThe `text` type populates the `input` slot with a `<textarea>` element.\n\nThe `color` type populates the `input` slot with a `<tosi-color>` element (and thus supports colors with alpha values).\n\n<tosi-css-var-editor element-selector=\"tosi-field\" target-selector=\".preview\"></tosi-css-var-editor>\n\n## Native Form Integration\n\nThe following components support native form integration via `formAssociated`:\n\n- `<tosi-rating>` - star ratings\n- `<tosi-select>` - custom select dropdowns\n- `<tosi-segmented>` - segmented button groups\n- `<tosi-tag-list>` - tag selection lists\n\nThese components can be used directly in a standard `<form>` element with full support for:\n- Form submission (values included in FormData)\n- Form reset\n- Required field validation\n- The `:invalid` and `:valid` CSS pseudo-classes\n\n```html\n<form id=\"native-form\" class=\"native-form\">\n <label>\n <span>Rate our service (required):</span>\n <tosi-rating name=\"rating\" required min=\"1\"></tosi-rating>\n </label>\n\n <label>\n <span>Select your country:</span>\n <tosi-select name=\"country\" required placeholder=\"-- Select --\"\n options=\"us=United States:flag,uk=United Kingdom:flag,ca=Canada:flag,au=Australia:flag\"\n ></tosi-select>\n </label>\n\n <label>\n <span>Subscription tier:</span>\n <tosi-segmented\n name=\"tier\"\n required\n choices=\"free=Free,pro=Pro:star,enterprise=Enterprise:tosi\"\n ></tosi-segmented>\n </label>\n\n <label>\n <span>Interests (select at least one):</span>\n <tosi-tag-list\n name=\"interests\"\n required\n editable\n available-tags=\"Technology,Sports,Music,Art,Travel,Food\"\n ></tosi-tag-list>\n </label>\n\n <div class=\"buttons\">\n <button type=\"submit\">Submit</button>\n <button type=\"reset\">Reset</button>\n </div>\n</form>\n```\n```css\n.preview .native-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n overflow: auto;\n height: 100%;\n}\n\n.preview .native-form label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.preview .native-form .buttons {\n display: flex;\n gap: 8px;\n}\n\n.preview tosi-rating:invalid,\n.preview tosi-select:invalid,\n.preview tosi-segmented:invalid,\n.preview tosi-tag-list:invalid {\n outline: 2px solid #f008;\n outline-offset: 2px;\n}\n\n.preview tosi-rating:valid,\n.preview tosi-select:valid,\n.preview tosi-segmented:valid,\n.preview tosi-tag-list:valid {\n outline: 2px solid #0a08;\n outline-offset: 2px;\n}\n```\n```js\nconst { TosiDialog } = tosijsui\nconst form = preview.querySelector('#native-form')\n\nform.addEventListener('submit', (e) => {\n e.preventDefault()\n const formData = new FormData(form)\n const data = Object.fromEntries(formData.entries())\n TosiDialog.alert(JSON.stringify(data, null, 2), 'Form Submitted')\n})\n\nform.addEventListener('reset', () => {\n TosiDialog.alert('Form has been reset', 'Reset')\n})\n```\n\n## Using formAssociated Components with tosi-form\n\nWhile the formAssociated components work with native `<form>` elements, using them with `<tosi-form>`\nprovides additional benefits:\n\n- **No submit prevention boilerplate** - `tosi-form` automatically prevents the default form submission\n- **JSON state management** - Initialize and access form state as a JavaScript object via `value` and `fields`\n- **Validation feedback** - Built-in `isValid` property and `submitCallback` with validation status\n- **Change events** - Unified change events on the form element\n\nSince these components now support `formAssociated`, they participate directly in form submission\nand validation without needing the hidden input workaround that `tosi-field` uses.\n\n```html\n<tosi-form id=\"tosi-form\" value='{\"rating\": 3, \"tier\": \"pro\"}'>\n <h4 slot=\"header\">tosi-form with formAssociated Components</h4>\n\n <label class=\"form-row\">\n <span>Service Rating:</span>\n <tosi-rating name=\"rating\" required min=\"1\"></tosi-rating>\n </label>\n\n <label class=\"form-row\">\n <span>Country:</span>\n <tosi-select name=\"country\" required placeholder=\"-- Select --\"\n options=\"us=United States:flag,uk=United Kingdom:flag,ca=Canada:flag\"\n ></tosi-select>\n </label>\n\n <label class=\"form-row\">\n <span>Subscription:</span>\n <tosi-segmented\n name=\"tier\"\n required\n choices=\"free=Free,pro=Pro:star,enterprise=Enterprise:tosi\"\n ></tosi-segmented>\n </label>\n\n <label class=\"form-row\">\n <span>Interests:</span>\n <tosi-tag-list\n name=\"interests\"\n required\n editable\n available-tags=\"Tech,Sports,Music,Art\"\n ></tosi-tag-list>\n </label>\n\n <div slot=\"footer\" style=\"display: flex; gap: 8px;\">\n <button class=\"submit-btn\">Submit</button>\n <button class=\"reset-btn\">Reset</button>\n <button class=\"set-values-btn\">Set Values</button>\n </div>\n</tosi-form>\n```\n```css\n.preview #tosi-form {\n height: auto;\n}\n\n.preview #tosi-form .form-row {\n display: grid;\n grid-template-columns: 120px 1fr;\n gap: 8px;\n align-items: center;\n}\n\n.preview #tosi-form .form-row > span {\n text-align: right;\n}\n\n.preview #tosi-form ::part(content) {\n padding: 16px;\n gap: 12px;\n}\n\n.preview #tosi-form ::part(header) {\n padding: 8px 16px;\n}\n\n.preview #tosi-form ::part(footer) {\n padding: 8px 16px;\n}\n```\n```js\nconst { TosiDialog } = tosijsui\nconst tosiForm = preview.querySelector('#tosi-form')\n\n// Set up submit callback\ntosiForm.submitCallback = (value, isValid) => {\n const title = isValid ? 'Form Submitted (Valid)' : 'Form Submitted (Invalid)'\n TosiDialog.alert(JSON.stringify(value, null, 2), title)\n}\n\npreview.querySelector('.submit-btn').addEventListener('click', () => {\n tosiForm.submit()\n})\n\npreview.querySelector('.reset-btn').addEventListener('click', () => {\n tosiForm.value = {}\n tosiForm.querySelectorAll('tosi-rating, tosi-select, tosi-segmented, tosi-tag-list').forEach(el => {\n el.value = el.tagName === 'TOSI-TAG-LIST' ? [] : null\n })\n TosiDialog.alert('Form has been reset', 'Reset')\n})\n\npreview.querySelector('.set-values-btn').addEventListener('click', () => {\n // Demonstrate programmatic value setting\n const rating = tosiForm.querySelector('tosi-rating')\n const select = tosiForm.querySelector('tosi-select')\n const segmented = tosiForm.querySelector('tosi-segmented')\n const tagList = tosiForm.querySelector('tosi-tag-list')\n\n rating.value = 5\n select.value = 'uk'\n segmented.value = 'enterprise'\n tagList.value = ['Tech', 'Music']\n\n TosiDialog.alert('Values set programmatically:\\n\\nRating: 5\\nCountry: uk\\nTier: enterprise\\nInterests: Tech, Music', 'Values Set')\n})\n```\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component as XinComponent,\n ElementCreator,\n elements,\n varDefault,\n} from 'tosijs'\n\nimport { colorInput } from './color-input'\n\nconst { form, slot, tosiSlot, label, input, span } = elements\n\nfunction attr(element: HTMLElement, name: string, value: any): void {\n if (value !== '' && value !== false) {\n element.setAttribute(name, value)\n } else {\n element.removeAttribute(name)\n }\n}\n\nfunction getInputValue(input: HTMLInputElement): any {\n switch (input.type) {\n case 'checkbox':\n return input.checked\n case 'radio': {\n const picked = input.parentElement?.querySelector(\n `input[type=\"radio\"][name=\"${input.name}\"]:checked`\n ) as HTMLInputElement | null\n return picked ? picked.value : null\n }\n case 'range':\n case 'number':\n return Number(input.value)\n default:\n return Array.isArray(input.value) && input.value.length === 0\n ? null\n : input.value\n }\n}\n\nfunction setElementValue(input: HTMLElement | null | undefined, value: any) {\n if (!(input instanceof HTMLElement)) {\n // do nothing\n } else if (input instanceof HTMLInputElement) {\n switch (input.type) {\n case 'checkbox':\n input.checked = value\n break\n case 'radio':\n input.checked = value === input.value\n break\n default:\n input.value = String(value || '')\n }\n } else {\n if (value != null || (input as HTMLInputElement).value != null) {\n ;(input as HTMLInputElement).value = String(value || '')\n }\n }\n}\n\nexport class TosiField extends XinComponent {\n static preferredTagName = 'tosi-field'\n\n static lightStyleSpec = {\n ':host [part=\"field\"]': {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: varDefault.prefixSuffixGap('8px'),\n },\n ':host [part=\"field\"][prefix]::before': {\n content: 'attr(prefix)',\n },\n ':host [part=\"field\"][suffix]::after': {\n content: 'attr(suffix)',\n },\n ':host [part=\"field\"] > *, :host [part=\"input\"] > *': {\n width: '100%',\n },\n ':host textarea': {\n resize: 'none',\n },\n ':host input[type=\"checkbox\"]': {\n width: 'fit-content',\n },\n ':host .hidden': {\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0,\n },\n }\n\n static initAttributes = {\n caption: '',\n key: '',\n type: '' as\n | ''\n | 'checkbox'\n | 'number'\n | 'range'\n | 'date'\n | 'text'\n | 'color',\n optional: false,\n pattern: '',\n placeholder: '',\n min: '',\n max: '',\n step: '',\n fixedPrecision: -1,\n prefix: '',\n suffix: '',\n }\n\n value: any = null\n\n content = label(\n tosiSlot({ part: 'caption' }),\n span(\n { part: 'field' },\n tosiSlot({ part: 'input', name: 'input' }),\n input({ part: 'valueHolder' })\n )\n )\n\n private valueChanged = false\n handleChange = () => {\n const { input, valueHolder } = this.parts as {\n input: HTMLElement\n valueHolder: HTMLInputElement\n }\n const inputElement = (input.children[0] || valueHolder) as HTMLInputElement\n if (inputElement !== valueHolder) {\n valueHolder.value = inputElement.value\n }\n this.value = getInputValue(inputElement)\n this.valueChanged = true\n const form = this.closest('tosi-form') as TosiForm\n if (form && this.key !== '') {\n switch (this.type) {\n case 'checkbox':\n form.fields[this.key] = inputElement.checked\n break\n case 'number':\n case 'range':\n if (this.fixedPrecision > -1) {\n inputElement.value = Number(inputElement.value).toFixed(\n this.fixedPrecision\n )\n form.fields[this.key] = Number(inputElement.value)\n } else {\n form.fields[this.key] = Number(inputElement.value)\n }\n break\n default:\n form.fields[this.key] = inputElement.value\n }\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n const { input, valueHolder } = this.parts as {\n input: HTMLElement\n valueHolder: HTMLInputElement\n }\n\n // Initialization from form value is handled by tosi-form.initializeNamedElements()\n\n valueHolder.addEventListener('change', this.handleChange)\n input.addEventListener('change', this.handleChange, true)\n }\n\n render() {\n if (this.valueChanged) {\n this.valueChanged = false\n return\n }\n const { input, caption, valueHolder, field } = this.parts as {\n input: HTMLElement\n field: HTMLElement\n caption: HTMLElement\n valueHolder: HTMLInputElement\n }\n if (caption.textContent?.trim() === '') {\n caption.append(this.caption !== '' ? this.caption : this.key)\n }\n if (this.type === 'text') {\n input.textContent = ''\n const textarea = elements.textarea({ value: this.value })\n if (this.placeholder) {\n textarea.setAttribute('placeholder', this.placeholder)\n }\n input.append(textarea)\n } else if (this.type === 'color') {\n input.textContent = ''\n input.append(colorInput({ value: this.value }))\n } else if (input.children.length === 0) {\n attr(valueHolder, 'placeholder', this.placeholder)\n attr(valueHolder, 'type', this.type)\n attr(valueHolder, 'pattern', this.pattern)\n attr(valueHolder, 'min', this.min)\n attr(valueHolder, 'max', this.max)\n if (this.step) {\n attr(valueHolder, 'step', this.step)\n } else if (this.fixedPrecision > 0 && this.type === 'number') {\n attr(valueHolder, 'step', Math.pow(10, -this.fixedPrecision))\n }\n }\n setElementValue(valueHolder, this.value)\n setElementValue(input.children[0] as HTMLElement, this.value)\n\n if (this.prefix) {\n field.setAttribute('prefix', this.prefix)\n } else {\n field.removeAttribute('prefix')\n }\n if (this.suffix) {\n field.setAttribute('suffix', this.suffix)\n } else {\n field.removeAttribute('suffix')\n }\n\n valueHolder.classList.toggle('hidden', input.children.length > 0)\n if (input.children.length > 0) {\n valueHolder.setAttribute('tabindex', '-1')\n } else {\n valueHolder.removeAttribute('tabindex')\n }\n input.style.display = input.children.length === 0 ? 'none' : ''\n attr(valueHolder, 'required', !this.optional)\n }\n}\n\nexport class TosiForm extends XinComponent {\n static preferredTagName = 'tosi-form'\n\n context = {} as { [key: string]: any }\n value = {} as { [key: string]: any }\n get isValid(): boolean {\n const widgets = (\n [...this.querySelectorAll('*')] as HTMLInputElement[]\n ).filter((widget) => widget.required !== undefined)\n return widgets.find((widget) => !widget.reportValidity()) === undefined\n }\n\n static shadowStyleSpec = {\n ':host': {\n display: 'flex',\n flexDirection: 'column',\n },\n ':host::part(header), :host::part(footer)': {\n display: 'flex',\n },\n ':host::part(content)': {\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden auto',\n height: '100%',\n width: '100%',\n position: 'relative',\n boxSizing: 'border-box',\n },\n ':host form': {\n display: 'flex',\n flex: '1 1 auto',\n position: 'relative',\n overflow: 'hidden',\n },\n }\n\n content = [\n slot({ part: 'header', name: 'header' }),\n form({ part: 'form' }, slot({ part: 'content' })),\n slot({ part: 'footer', name: 'footer' }),\n ]\n\n getField = (key: string): TosiField | null => {\n return this.querySelector(`tosi-field[key=\"${key}\"]`) as TosiField | null\n }\n\n get fields(): any {\n if (typeof this.value === 'string') {\n try {\n this.value = JSON.parse(this.value)\n } catch {\n console.log('<tosi-form> could not use its value, expects valid JSON')\n this.value = {}\n }\n }\n const { getField } = this\n const dispatch = this.dispatchEvent.bind(this)\n return new Proxy(this.value, {\n get(target, prop: string): any {\n return target[prop]\n },\n\n set(target, prop: string, newValue: any): boolean {\n if (target[prop] !== newValue) {\n target[prop] = newValue\n const field = getField(prop)\n if (field) {\n field.value = newValue\n }\n dispatch(new Event('change'))\n }\n return true\n },\n })\n }\n\n set fields(values: { [key: string]: any }) {\n const fields = [...this.querySelectorAll('tosi-field')] as TosiField[]\n for (const field of fields) {\n field.value = values[field.key]\n }\n }\n\n submit = () => {\n this.parts.form.dispatchEvent(new Event('submit'))\n }\n\n handleSubmit = (event: SubmitEvent) => {\n event.preventDefault()\n event.stopPropagation()\n // Sync field values before submitting\n this.syncFieldValues()\n const value = this.fields\n this.submitCallback(value, this.isValid)\n }\n\n submitCallback = (value: { [key: string]: any }, isValid: boolean): void => {\n console.log('override submitCallback to handle this data', {\n value,\n isValid,\n })\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n const { form } = this.parts as { form: HTMLFormElement }\n form.addEventListener('submit', this.handleSubmit)\n\n // Listen for change events from named elements to update form value\n // Use 'this' to capture events from slotted content\n this.addEventListener('change', this.handleElementChange, true)\n\n // Initialize formAssociated components (those with name attribute) from form value\n this.initializeNamedElements()\n }\n\n private handleElementChange = (event: Event) => {\n const target = event.target as HTMLElement\n const name = target.getAttribute('name')\n if (name && 'value' in target) {\n this.fields[name] = (target as any).value\n }\n }\n\n private syncFieldValues(): void {\n const formValue = this.fields\n const namedElements = this.querySelectorAll(\n '[name], [key]'\n ) as NodeListOf<HTMLElement>\n for (const el of namedElements) {\n const key = el.getAttribute('name') || el.getAttribute('key')\n if (!key) continue\n if (formValue[key] === undefined) {\n const val = (el as any).value ?? el.getAttribute('value')\n if (val != null) {\n formValue[key] = val\n }\n }\n }\n }\n\n private initializeNamedElements(): void {\n const formValue = this.fields\n // Handle both 'name' (formAssociated) and 'key' (tosi-field) attributes\n const namedElements = this.querySelectorAll(\n '[name], [key]'\n ) as NodeListOf<HTMLElement>\n for (const el of namedElements) {\n const key = el.getAttribute('name') || el.getAttribute('key')\n if (!key) continue\n if (formValue[key] !== undefined) {\n ;(el as any).value = formValue[key]\n }\n }\n }\n}\n\n/** @deprecated Use TosiField instead */\nexport type XinField = TosiField\n/** @deprecated Use TosiField instead */\nexport const XinField: typeof TosiField = TosiField\n\n/** @deprecated Use TosiForm instead */\nexport type XinForm = TosiForm\n/** @deprecated Use TosiForm instead */\nexport const XinForm: typeof TosiForm = TosiForm\n\nexport const tosiField = TosiField.elementCreator() as ElementCreator<TosiField>\n\nexport const tosiForm = TosiForm.elementCreator() as ElementCreator<TosiForm>\n\n/** @deprecated Use tosiField instead (tag is now tosi-field) */\nexport const xinField = tosiField\n\n/** @deprecated Use tosiForm instead (tag is now tosi-form) */\nexport const xinForm = tosiForm\n",
|
|
48
|
+
"/*\nDefault theme + page styling for <tosi-doc-system>.\n\nThis is the stylesheet the component injects so a generated static page looks like\na finished doc site without depending on any app bootstrap. It uses the legacy\n`--brand-color` / `--background` / `--spacing` CSS-variable family that the doc\nbrowser and markdown styles are built on.\n\nColors are computed from a small set of base colors via tosijs `Color` math, so the\npalette can eventually be driven entirely by a few attributes on the element\n(accent/background/text) — most of the palette is derived from `accent`.\n*/\n\nimport {\n XinStyleSheet,\n XinStyleRule,\n vars,\n Color,\n invertLuminance,\n} from 'tosijs'\nimport { icons, svg2DataUrl } from '../icons'\n\n// The sidebar's geometry, shared by the hydrated layout and the pre-hydration one.\n// These mirror what <tosi-sidenav> is given by doc-browser (navSize / minSize): the\n// sidebar is `SIDEBAR_WIDTH` wide and collapses behind a toggle below\n// `SIDEBAR_BREAKPOINT`. Keep them in step, or the page jumps as it hydrates.\nexport const SIDEBAR_WIDTH = 200\nexport const SIDEBAR_BREAKPOINT = 600\n\nexport interface DocSystemTheme {\n /** brand / accent color — most of the palette is derived from this */\n accent?: string\n background?: string\n text?: string\n buttonBg?: string\n inputBg?: string\n /** code-editor surface (`--code-bg`); neutral off-white by default, not brand-tinted. */\n codeBg?: string\n}\n\n/** Compute the full set of `:root` color variables from a few base colors. */\nexport function docSystemColors(theme: DocSystemTheme = {}): XinStyleRule {\n const brandColor = Color.fromCss(theme.accent ?? '#EE257B')\n return {\n _textColor: theme.text ?? '#222',\n _brandColor: brandColor,\n _background: theme.background ?? '#fafafa',\n _buttonBg: theme.buttonBg ?? '#fdfdfd',\n _inputBg: theme.inputBg ?? '#fdfdfd',\n _backgroundShaded: '#f5f5f5',\n _navBg: brandColor.rotate(30).desaturate(0.5).brighten(0.9),\n _barColor: brandColor.opacity(0.4),\n _focusColor: brandColor.opacity(0.7),\n _placeholderColor: brandColor.opacity(0.4),\n _brandTextColor: brandColor.rotate(30).brighten(0.9),\n _insetBg: brandColor.rotate(45).brighten(0.8),\n // Neutral off-white (not brand-tinted); dark mode inverts its luminance to\n // off-black, so the editor surface stays a clean neutral in both themes.\n _codeBg: theme.codeBg ?? '#fdfdfd',\n _linkColor: brandColor.rotate(-30).darken(0.5),\n _shadowColor: '#0004',\n _menuBg: '#fafafa',\n _menuItemActiveColor: '#000',\n _menuItemIconActiveColor: '#000',\n _menuItemActiveBg: '#aaa',\n _menuItemHoverBg: '#eee',\n _menuItemColor: '#222',\n _menuSeparatorColor: '#2224',\n _menuShadow: '0 4px 8px #0004',\n _scrollThumbColor: '#0006',\n _scrollBarColor: '#0001',\n _inputBorderShadow: 'inset 0 0 2px #0006',\n }\n}\n\n/** Build the full doc-system stylesheet for a given base theme. */\nexport function docSystemStyleSpec(theme: DocSystemTheme = {}): XinStyleSheet {\n const colors = docSystemColors(theme)\n const brandColor = Color.fromCss(theme.accent ?? '#EE257B')\n return {\n '@import':\n 'https://fonts.googleapis.com/css2?family=Aleo:ital,wght@0,100..900;1,100..900&famiSpline+Sans+Mono:ital,wght@0,300..700;1,300..700&display=swap',\n ':root': {\n _fontFamily: \"'Aleo', sans-serif\",\n _codeFontFamily: \"'Spline Sans Mono', monospace\",\n _fontSize: '16px',\n _codeFontSize: '14px',\n ...colors,\n // Bridge the tosijs component palette (`--tosi-*`) onto the doc-system's color\n // family. Defined as REFERENCES, so a component reading `var(--tosi-bg)` follows\n // the site theme automatically — including dark mode, where `invertLuminance()`\n // flips the referenced `--background`/`--text-color`/… in `.darkmode`. Without\n // this the doc-system never set `--tosi-*`, so components fell back to their\n // baked-in light defaults (e.g. `var(--tosi-bg, #fff)` → white <tosi-table> in\n // dark mode). Colors only — component metrics keep their own defaults.\n _tosiAccent: vars.brandColor,\n _tosiBg: vars.background,\n _tosiText: vars.textColor,\n _tosiBgInset: vars.insetBg,\n _spacing: '10px',\n _lineHeight: 'calc(var(--font-size) * 1.6)',\n _h1Scale: '2',\n _h2Scale: '1.5',\n _h3Scale: '1.25',\n _touchSize: '32px',\n _headerHeight:\n 'calc( var(--line-height) * var(--h2-scale) + var(--spacing) * 2 )',\n // The content column's width. ONE definition, read by both the hydrated\n // doc-browser (doc-browser.ts) and the pre-hydration `:not(:defined)` layout\n // below — if these two ever disagree, the page jumps on hydration.\n _docContentMaxWidth: '44em',\n },\n '.darkmode': {\n ...invertLuminance(colors),\n _shadowColor: brandColor.opacity(0.5),\n _menuShadow: `0 0 0 2px ${brandColor.opacity(0.75)}`,\n _menuSeparatorColor: brandColor.opacity(0.5),\n },\n '.high-contrast': {\n filter: 'contrast(2)',\n },\n '*': {\n boxSizing: 'border-box',\n scrollbarColor: `${vars.scrollThumbColor} ${vars.scrollBarColor}`,\n scrollbarWidth: 'thin',\n },\n body: {\n fontFamily: vars.fontFamily,\n fontSize: vars.fontSize,\n margin: '0',\n lineHeight: vars.lineHeight,\n background: vars.background,\n _tosiTabsSelectedColor: vars.brandColor,\n _tosiTabsBarColor: vars.brandTextColor,\n _menuItemIconColor: vars.brandColor,\n color: vars.textColor,\n },\n // <tosi-doc-system> is a light-DOM block that fills the viewport; the doc\n // browser container inside it provides the flex column + 100vh.\n 'tosi-doc-system': {\n display: 'block',\n },\n 'tosi-doc-system tosi-sidenav::part(nav)': {\n background: vars.navBg,\n },\n\n // ── Pre-hydration layout (`:not(:defined)`) ──────────────────────────────\n //\n // An UNDEFINED custom element is `display: inline`, so before the bundle loads\n // the pre-rendered page — which already contains the nav tree, the content and\n // the code blocks — stacks as bare text with no chrome. That reflow-on-hydrate\n // is why the page used to hide its own body (`body{opacity:0}`) until the\n // bundle arrived: on a cheap phone that's ~4.5s of blank screen for content\n // that was in the HTML at ~300ms.\n //\n // Instead, lay the static page out AS THOUGH the chrome were already there:\n // the content sits in a scrolling rectangle inset by the header, and by the\n // sidebar once the viewport is wide enough. Hydration then only ADDS the\n // chrome — and `doc-browser` ADOPTS this very `.doc-content` node rather than\n // re-rendering it, so with the same box metrics below, nothing moves at all.\n //\n // These rules evaporate by themselves the moment the element upgrades.\n 'tosi-doc-system:not(:defined)': {\n display: 'block',\n position: 'fixed',\n inset: `${vars.headerHeight} 0 0 0`,\n overflow: 'auto',\n },\n // The header bar: painted, not populated — its contents (brand, links) arrive\n // with hydration, in this exact space.\n 'tosi-doc-system:not(:defined)::before': {\n content: '\"\"',\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n height: vars.headerHeight,\n background: vars.brandColor,\n },\n // Same box the hydrated doc-browser gives this node (see doc-browser.ts), so\n // adoption is a no-op geometrically.\n 'tosi-doc-system:not(:defined) .doc-content': {\n display: 'block',\n maxWidth: vars.docContentMaxWidth,\n margin: 'auto',\n padding: '0 1em',\n // Must match doc-browser's inline style EXACTLY, `overflow` included: it\n // establishes a block formatting context, which stops the <h1>'s top margin\n // collapsing out of the box. Without it the static content sits 10px lower\n // than the hydrated content, and the page nudges as it comes alive.\n overflow: 'hidden',\n },\n // The header-bar links are icon links; without the icon font they'd render as\n // stray text in the bar. They arrive with hydration.\n 'tosi-doc-system:not(:defined) .doc-navbar': {\n display: 'none',\n },\n // A `test` block is an example's ASSERTIONS. The live example keeps them behind\n // a tab — a reader is never shown them — so rendering them statically both\n // misrepresents the page and adds height that disappears the moment the example\n // mounts. (`:has()` is a progressive enhancement: where it isn't supported the\n // block simply stays visible, which is what happens today anyway.)\n 'tosi-doc-system:not(:defined) pre:has(> code.language-test)': {\n display: 'none',\n },\n // Below the sidebar breakpoint (side-nav goes compact under\n // `doc-browser`'s minSize) the nav is behind a toggle, so it isn't shown.\n 'tosi-doc-system:not(:defined) .doc-nav': {\n display: 'none',\n },\n // Wide enough for the sidebar: reserve its column, and show the REAL nav tree\n // in it. It's a plain <ul> with native <details> groups, so it navigates and\n // collapses without a line of JavaScript — a no-JS reader gets a working site,\n // and hydration merely upgrades it in place.\n [`@media (min-width: ${SIDEBAR_BREAKPOINT}px)`]: {\n 'tosi-doc-system:not(:defined)': {\n left: `${SIDEBAR_WIDTH}px`,\n },\n 'tosi-doc-system:not(:defined) .doc-nav': {\n display: 'block',\n position: 'fixed',\n left: '0',\n top: vars.headerHeight,\n bottom: '0',\n width: `${SIDEBAR_WIDTH}px`,\n overflow: 'auto',\n background: vars.navBg,\n // NO padding. The hydrated nav sits in a <tosi-sidenav> whose own padding is 0 —\n // the visual inset comes from `.doc-link`'s padding, which both states share. A\n // `padding: spacing` here shifted every static nav link 10px right, so the whole\n // column jumped left the instant the bundle loaded. Whatever this block sets, the\n // upgraded component must already set too, or hydration is not \"purely additive\".\n padding: '0',\n },\n // NOTE: no `a` / `ul` rules here on purpose. There used to be a second,\n // hand-authored copy of the nav's link styling under `:not(:defined)`, because\n // the static generator emitted a bare <a> while the hydrated nav emits\n // <a class=\"doc-link\">. It drifted (2.5px vs 5px/15px padding, a brand-coloured\n // underline that only the static copy had), so every page painted one nav and\n // then reflowed into a different one. The generator now emits `doc-link` too, so\n // the SHARED rules below style both states and nothing moves on hydration.\n //\n // Only genuinely pre-hydration-specific rules belong in this block — the fixed\n // positioning above, which the upgraded component takes over itself.\n 'tosi-doc-system:not(:defined) .doc-nav summary': {\n cursor: 'pointer',\n },\n },\n '.center': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n 'input, button, select, textarea': {\n fontFamily: vars.fontFamily,\n fontSize: vars.fontSize,\n color: 'currentColor',\n background: vars.inputBg,\n },\n select: {\n WebkitAppearance: 'none',\n appearance: 'none',\n },\n header: {\n background: vars.brandColor,\n color: vars.brandTextColor,\n _textColor: vars.brandTextColor,\n _linkColor: vars.brandTextColor,\n display: 'flex',\n alignItems: 'center',\n padding: '0 var(--spacing)',\n lineHeight: 'calc(var(--line-height) * var(--h1-scale))',\n height: vars.headerHeight,\n whiteSpace: 'nowrap',\n },\n h1: {\n color: vars.brandColor,\n fontSize: 'calc(var(--font-size) * var(--h1-scale))',\n lineHeight: 'calc(var(--line-height) * var(--h1-scale))',\n fontWeight: '400',\n borderBottom: `4px solid ${vars.barColor}`,\n margin: `${vars.spacing} 0 ${vars.spacing200}`,\n padding: 0,\n },\n 'header h2': {\n color: vars.brandTextColor,\n whiteSpace: 'nowrap',\n },\n h2: {\n color: vars.brandColor,\n fontSize: 'calc(var(--font-size) * var(--h2-scale))',\n lineHeight: 'calc(var(--line-height) * var(--h2-scale))',\n margin: 'calc(var(--spacing) * var(--h2-scale)) 0',\n },\n h3: {\n fontSize: 'calc(var(--font-size) * var(--h3-scale))',\n lineHeight: 'calc(var(--line-height) * var(--h3-scale))',\n margin: 'calc(var(--spacing) * var(--h3-scale)) 0',\n },\n 'input[type=search]': {\n borderRadius: 99,\n },\n blockquote: {\n position: 'relative',\n background: vars.insetBg,\n margin: '0 48px 56px 0',\n borderRadius: vars.spacing,\n padding: 'var(--spacing) calc(var(--spacing) * 2)',\n filter: `drop-shadow(0px 1px 1px ${vars.shadowColor})`,\n },\n 'blockquote > :first-child': {\n marginTop: '0',\n },\n 'blockquote > :last-child': {\n marginBottom: '0',\n },\n 'blockquote::before': {\n content: '\" \"',\n display: 'block',\n width: 1,\n height: 1,\n border: '10px solid transparent',\n borderTopColor: vars.insetBg,\n borderRightColor: vars.insetBg,\n position: 'absolute',\n bottom: -20,\n right: 24,\n },\n 'blockquote::after': {\n content: '\" \"',\n width: 48,\n height: 48,\n display: 'block',\n bottom: -48,\n right: -24,\n position: 'absolute',\n background: svg2DataUrl(icons.tosi(), undefined, undefined, 2),\n },\n a: {\n textDecoration: 'none',\n color: vars.linkColor,\n opacity: '0.9',\n borderBottom: '1px solid var(--brand-color)',\n },\n 'button, select, .clickable': {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'ease-out 0.2s',\n _textColor: vars.brandColor,\n color: vars.textColor,\n textDecoration: 'none',\n background: vars.buttonBg,\n padding: '0 calc(var(--spacing) * 1.25)',\n border: 'none',\n borderRadius: 'calc(var(--spacing) * 0.5)',\n },\n 'button, select, .clickable, input': {\n lineHeight: 'calc(var(--line-height) + var(--spacing))',\n },\n 'input, textarea': {\n border: 'none',\n outline: 'none',\n borderRadius: 'calc(var(--spacing) * 0.5)',\n boxShadow: vars.inputBorderShadow,\n },\n input: {\n padding: '0 calc(var(--spacing) * 1.5)',\n },\n '::placeholder': {\n color: vars.placeholderColor,\n },\n img: {\n verticalAlign: 'middle',\n },\n 'button:hover, .clickable:hover': {\n boxShadow: 'inset 0 0 0 2px var(--brand-color)',\n },\n 'button:active, .clickable:active': {\n background: vars.brandColor,\n color: vars.brandTextColor,\n },\n label: {\n display: 'inline-flex',\n gap: 'calc(var(--spacing) * 0.5)',\n alignItems: 'center',\n },\n '.elastic': {\n flex: '1 1 auto',\n overflow: 'hidden',\n position: 'relative',\n },\n // Scope the icon styling (currentColor fill, click-through) to actual icons\n // and SVGs inside buttons — a blanket `svg` rule sets pointer-events:none on\n // every SVG, which breaks interactive SVG-based UIs (maps, charts, diagrams).\n 'svg.tosi-icon, button svg': {\n fill: 'currentColor',\n pointerEvents: 'none',\n },\n '[aria-selected]': {\n background: '#08835820',\n },\n ':disabled': {\n opacity: '0.5',\n filter: 'saturate(0)',\n pointerEvents: 'none',\n },\n pre: {\n background: vars.codeBg,\n padding: vars.spacing,\n borderRadius: 'calc(var(--spacing) * 0.25)',\n overflow: 'auto',\n fontSize: vars.codeFontSize,\n lineHeight: 'calc(var(--font-size) * 1.2)',\n },\n 'pre, code': {\n fontFamily: vars.codeFontFamily,\n _textColor: vars.brandColor,\n },\n '.transparent, .iconic': {\n background: 'none',\n },\n '.iconic': {\n padding: '0',\n fontSize: '150%',\n height: 'calc(var(--line-height) + var(--spacing))',\n lineHeight: 'calc(var(--line-height) + var(--spacing))',\n width: 'calc(var(--line-height) + var(--spacing))',\n textAlign: 'center',\n },\n '.transparent:hover, .iconic:hover': {\n background: '#0002',\n boxShadow: 'none',\n color: vars.textColor,\n },\n '.transparent:active, .iconic:active': {\n background: '#0004',\n boxShadow: 'none',\n color: vars.textColor,\n },\n '.current, summary:has(.current)': {\n background: vars.background,\n },\n '.doc-link': {\n cursor: 'pointer',\n borderBottom: 'none',\n transition: '0.15s ease-out',\n marginLeft: '10px',\n padding: 'calc(var(--spacing) * 0.5) calc(var(--spacing) * 1.5)',\n },\n '.doc-link:not(.current):hover': {\n background: vars.background,\n },\n '.doc-link:not(.current)': {\n opacity: '0.8',\n marginLeft: 0,\n },\n 'tosi-example': {\n margin: 'var(--spacing) 0',\n },\n 'tosi-example [part=editors]': {\n background: vars.insetBg,\n },\n \"[class*='icon-'], tosi-icon\": {\n color: 'currentcolor',\n pointerEvents: 'none',\n },\n \"[class*='icon-']\": {\n verticalAlign: 'middle',\n },\n table: {\n borderCollapse: 'collapse',\n },\n thead: {\n background: vars.brandColor,\n color: vars.brandTextColor,\n },\n tbody: {\n background: vars.background,\n },\n 'tr:nth-child(2n)': {\n background: vars.backgroundShaded,\n },\n 'th, td': {\n padding: 'calc(var(--spacing) * 0.5) var(--spacing)',\n },\n // Nav lists carry semantics only — no list styling. Hierarchy indentation\n // comes from left-padding on each section's child list (inside <details>).\n '.doc-nav ul, .doc-nav li': {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n },\n '.doc-nav li': {\n display: 'flex',\n flexDirection: 'column',\n },\n '.doc-nav': {\n display: 'flex',\n flexDirection: 'column',\n },\n '.doc-nav details > ul': {\n paddingLeft: vars.spacing,\n },\n // Collapse a closed section's list SYNCHRONOUSLY. The UA collapses <details>\n // via `::details-content { content-visibility: hidden }`, which is applied\n // lazily and — for this static tree — non-deterministically on first paint:\n // sometimes the closed section is still laid out at full height for a frame\n // before it snaps shut. That frame is a visible flicker on refresh, and it made\n // the \"nav does not move on hydration\" test measure a 36px row that hydration\n // then collapses to 0. An explicit display:none collapses it in the first layout\n // pass with no content-visibility race, and still opens on a no-JS <summary>\n // toggle (the UA adds [open], so this rule stops matching).\n '.doc-nav details:not([open]) > ul': {\n display: 'none',\n },\n // <summary> is the section header (its triangle toggles; the link navigates).\n '.doc-nav summary': {\n cursor: 'pointer',\n // indent the disclosure marker a bit from the edge\n paddingLeft: 'calc(var(--spacing) * 0.5)',\n },\n '.doc-nav summary::marker': {\n color: vars.brandColor,\n },\n '.doc-nav summary > .doc-link': {\n display: 'inline-block',\n // push the summary text in a bit less than a normal doc-link\n paddingLeft: 'calc(var(--spacing) * 0.5)',\n },\n // Declarative header link list — shown for no-JS, removed on hydration.\n '.doc-navbar': {\n listStyle: 'none',\n display: 'flex',\n flexWrap: 'wrap',\n gap: vars.spacing,\n margin: 0,\n padding: vars.spacing,\n },\n }\n}\n",
|
|
49
|
+
"/*#\n# forms\n\n`<tosi-form>` and `<tosi-field>` can be used to quickly create forms complete with\n[client-side validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation#built-in_form_validation_examples).\n\n```js\nconst form = preview.querySelector('tosi-form')\npreview.querySelector('.submit').addEventListener('click', form.submit)\n```\n```html\n<tosi-form value='{\"formInitializer\": \"initial value from form\"}'>\n <h3 slot=\"header\">Example Form Header</h3>\n <tosi-field caption=\"Required field\" key=\"required\"></tosi-field>\n <tosi-field optional key=\"optional\"><i>Optional</i> Field</tosi-field>\n <tosi-field key=\"text\" type=\"text\" placeholder=\"type it in here\">Tell us a long story</tosi-field>\n <tosi-field caption=\"Zip Code\" placeholder=\"12345 or 12345-6789\" key=\"zipcode\" pattern=\"\\d{5}(-\\d{4})?\"></tosi-field>\n <tosi-field caption=\"Date\" key=\"date\" type=\"date\"></tosi-field>\n <tosi-field caption=\"Number\" key=\"number\" type=\"number\"></tosi-field>\n <tosi-field caption=\"Range\" key=\"range\" type=\"range\" min=\"0\" max=\"10\"></tosi-field>\n <tosi-field key=\"boolean\" type=\"checkbox\">😃 <b>Agreed?!</b></tosi-field>\n <tosi-field key=\"color\" type=\"color\" value=\"pink\">\n favorite color\n </tosi-field>\n <tosi-field key=\"select\">\n Custom Field\n <select slot=\"input\">\n <option>This</option>\n <option>That</option>\n <option>The Other</option>\n </select>\n </tosi-field>\n <tosi-field key=\"tags\">\n Tag List\n <tosi-tag-list editable slot=\"input\" available-tags=\"pick me,no pick me\"></tosi-tag-list>\n </tosi-field>\n <tosi-field key=\"rating\">\n Rate this form!\n <tosi-rating slot=\"input\"></tosi-rating>\n </tosi-field>\n <tosi-field key=\"like\">\n Do you like it?\n <tosi-segmented\n choices=\"yes=Yes:thumbsUp,no=No:thumbsDown\"\n slot=\"input\"\n ></tosi-segmented>\n </tosi-field>\n <tosi-field key=\"relationship\">\n Relationship Status\n <tosi-segmented\n style=\"--segmented-direction: column; --segmented-align-items: stretch\"\n choices=\"couple=In a relationship,single=Single\"\n other=\"It's complicated…\"\n slot=\"input\"\n ></tosi-segmented>\n </tosi-field>\n <tosi-field key=\"amount\" fixed-precision=\"2\" type=\"number\" prefix=\"$\" suffix=\"(USD)\">\n What's it worth?\n </tosi-field>\n <tosi-field key=\"valueInitializer\" value=\"initial value from field\">\n Initialized by field\n </tosi-field>\n <tosi-field key=\"formInitializer\">\n Initialized by form\n </tosi-field>\n <button slot=\"footer\" class=\"submit\">Submit</button>\n</tosi-form>\n```\n```css\n.preview tosi-form {\n height: 100%;\n}\n\n.preview ::part(header), .preview ::part(footer) {\n background: var(--inset-bg);\n justify-content: center;\n padding: calc(var(--spacing) * 0.5) var(--spacing);\n}\n\n.preview h3, .preview h4 {\n margin: 0;\n padding: 0;\n}\n\n.preview ::part(content) {\n padding: var(--spacing);\n gap: var(--spacing);\n background: var(--background);\n}\n\n.preview label {\n display: grid;\n grid-template-columns: 180px auto 100px;\n gap: var(--spacing);\n}\n\n.preview label [part=\"caption\"] {\n text-align: right;\n}\n\n.preview label:has(:invalid:required)::after {\n content: '* required'\n}\n\n@media (max-width: 500px) {\n .preview label [part=\"caption\"] {\n text-align: center;\n }\n\n .preview label {\n display: flex;\n flex-direction: column;\n position: relative;\n align-items: stretch;\n gap: calc(var(--spacing) * 0.5);\n }\n\n .preview label:has(:invalid:required)::after {\n position: absolute;\n top: 0;\n right: 0;\n content: '*'\n }\n\n .preview tosi-field [part=\"field\"],\n .preview tosi-field [part=\"input\"] > * {\n display: flex;\n justify-content: center;\n }\n}\n\n.preview :invalid {\n box-shadow: inset 0 0 0 2px #F008;\n}\n```\n\n## `<tosi-form>`\n\n`<tosi-form>` prevents the default form behavior when a `submit` event is triggered and instead validates the\nform contents (generating feedback if desired) and calls its `submitCallback(value: {[key: string]: any}, isValid: boolean): void`\nmethod.\n\n`<tosi-form>` offers a `fields` proxy that allows values stored in the form to be updated. Any changes will trigger a `change`\nevent on the `<tosi-form>` (in addition to any events fired by form fields).\n\n`<tosi-form>` instances have `value` and `isValid` properties you can access any time. Note that `isValid` is computed\nand triggers form validation.\n\n`<tosi-form>` has `header` and `footer` `<slot>`s in addition to default `<slot>`, which is tucked inside a `<form>` element.\n\n## `<tosi-field>`\n\n`<tosi-field>` is a simple web-component with no shadowDOM that combines an `<input>` field wrapped with a `<label>`. Any\ncontent of the custom-element will become the `caption` or you can simply set the `caption` attribute.\n\nYou can replace the default `<input>` field by adding an element to the slot `input` (it's a `tosiSlot`) whereupon\nthe `value` of that element will be used instead of the built-in `<input>`. (The `<input>` is retained and\nis used to drive form-validation.)\n\n`<tosi-field>` supports the following attributes:\n\n- `caption` labels the field\n- `key` determines the form property the field will populate\n- `type` determines the data-type: '' | 'checkbox' | 'number' | 'range' | 'date' | 'text' | 'color'\n- `optional` turns off the `required` attribute (fields are required by default)\n- `pattern` is an (optional) regex pattern\n- `placeholder` is an (optional) placeholder\n\nThe `text` type populates the `input` slot with a `<textarea>` element.\n\nThe `color` type populates the `input` slot with a `<tosi-color>` element (and thus supports colors with alpha values).\n\n<tosi-css-var-editor element-selector=\"tosi-field\" target-selector=\".preview\"></tosi-css-var-editor>\n\n## Native Form Integration\n\nThe following components support native form integration via `formAssociated`:\n\n- `<tosi-rating>` - star ratings\n- `<tosi-select>` - custom select dropdowns\n- `<tosi-segmented>` - segmented button groups\n- `<tosi-tag-list>` - tag selection lists\n\nThese components can be used directly in a standard `<form>` element with full support for:\n- Form submission (values included in FormData)\n- Form reset\n- Required field validation\n- The `:invalid` and `:valid` CSS pseudo-classes\n\n```html\n<form id=\"native-form\" class=\"native-form\">\n <label>\n <span>Rate our service (required):</span>\n <tosi-rating name=\"rating\" required min=\"1\"></tosi-rating>\n </label>\n\n <label>\n <span>Select your country:</span>\n <tosi-select name=\"country\" required placeholder=\"-- Select --\"\n options=\"us=United States:flag,uk=United Kingdom:flag,ca=Canada:flag,au=Australia:flag\"\n ></tosi-select>\n </label>\n\n <label>\n <span>Subscription tier:</span>\n <tosi-segmented\n name=\"tier\"\n required\n choices=\"free=Free,pro=Pro:star,enterprise=Enterprise:tosi\"\n ></tosi-segmented>\n </label>\n\n <label>\n <span>Interests (select at least one):</span>\n <tosi-tag-list\n name=\"interests\"\n required\n editable\n available-tags=\"Technology,Sports,Music,Art,Travel,Food\"\n ></tosi-tag-list>\n </label>\n\n <div class=\"buttons\">\n <button type=\"submit\">Submit</button>\n <button type=\"reset\">Reset</button>\n </div>\n</form>\n```\n```css\n.preview .native-form {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n overflow: auto;\n height: 100%;\n}\n\n.preview .native-form label {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.preview .native-form .buttons {\n display: flex;\n gap: 8px;\n}\n\n.preview tosi-rating:invalid,\n.preview tosi-select:invalid,\n.preview tosi-segmented:invalid,\n.preview tosi-tag-list:invalid {\n outline: 2px solid #f008;\n outline-offset: 2px;\n}\n\n.preview tosi-rating:valid,\n.preview tosi-select:valid,\n.preview tosi-segmented:valid,\n.preview tosi-tag-list:valid {\n outline: 2px solid #0a08;\n outline-offset: 2px;\n}\n```\n```js\nconst { TosiDialog } = tosijsui\nconst form = preview.querySelector('#native-form')\n\nform.addEventListener('submit', (e) => {\n e.preventDefault()\n const formData = new FormData(form)\n const data = Object.fromEntries(formData.entries())\n TosiDialog.alert(JSON.stringify(data, null, 2), 'Form Submitted')\n})\n\nform.addEventListener('reset', () => {\n TosiDialog.alert('Form has been reset', 'Reset')\n})\n```\n\n## Using formAssociated Components with tosi-form\n\nWhile the formAssociated components work with native `<form>` elements, using them with `<tosi-form>`\nprovides additional benefits:\n\n- **No submit prevention boilerplate** - `tosi-form` automatically prevents the default form submission\n- **JSON state management** - Initialize and access form state as a JavaScript object via `value` and `fields`\n- **Validation feedback** - Built-in `isValid` property and `submitCallback` with validation status\n- **Change events** - Unified change events on the form element\n\nSince these components now support `formAssociated`, they participate directly in form submission\nand validation without needing the hidden input workaround that `tosi-field` uses.\n\n```html\n<tosi-form id=\"tosi-form\" value='{\"rating\": 3, \"tier\": \"pro\"}'>\n <h4 slot=\"header\">tosi-form with formAssociated Components</h4>\n\n <label class=\"form-row\">\n <span>Service Rating:</span>\n <tosi-rating name=\"rating\" required min=\"1\"></tosi-rating>\n </label>\n\n <label class=\"form-row\">\n <span>Country:</span>\n <tosi-select name=\"country\" required placeholder=\"-- Select --\"\n options=\"us=United States:flag,uk=United Kingdom:flag,ca=Canada:flag\"\n ></tosi-select>\n </label>\n\n <label class=\"form-row\">\n <span>Subscription:</span>\n <tosi-segmented\n name=\"tier\"\n required\n choices=\"free=Free,pro=Pro:star,enterprise=Enterprise:tosi\"\n ></tosi-segmented>\n </label>\n\n <label class=\"form-row\">\n <span>Interests:</span>\n <tosi-tag-list\n name=\"interests\"\n required\n editable\n available-tags=\"Tech,Sports,Music,Art\"\n ></tosi-tag-list>\n </label>\n\n <div slot=\"footer\" style=\"display: flex; gap: 8px;\">\n <button class=\"submit-btn\">Submit</button>\n <button class=\"reset-btn\">Reset</button>\n <button class=\"set-values-btn\">Set Values</button>\n </div>\n</tosi-form>\n```\n```css\n.preview #tosi-form {\n height: auto;\n}\n\n.preview #tosi-form .form-row {\n display: grid;\n grid-template-columns: 120px 1fr;\n gap: 8px;\n align-items: center;\n}\n\n.preview #tosi-form .form-row > span {\n text-align: right;\n}\n\n.preview #tosi-form ::part(content) {\n padding: 16px;\n gap: 12px;\n}\n\n.preview #tosi-form ::part(header) {\n padding: 8px 16px;\n}\n\n.preview #tosi-form ::part(footer) {\n padding: 8px 16px;\n}\n```\n```js\nconst { TosiDialog } = tosijsui\nconst tosiForm = preview.querySelector('#tosi-form')\n\n// Set up submit callback\ntosiForm.submitCallback = (value, isValid) => {\n const title = isValid ? 'Form Submitted (Valid)' : 'Form Submitted (Invalid)'\n TosiDialog.alert(JSON.stringify(value, null, 2), title)\n}\n\npreview.querySelector('.submit-btn').addEventListener('click', () => {\n tosiForm.submit()\n})\n\npreview.querySelector('.reset-btn').addEventListener('click', () => {\n tosiForm.value = {}\n tosiForm.querySelectorAll('tosi-rating, tosi-select, tosi-segmented, tosi-tag-list').forEach(el => {\n el.value = el.tagName === 'TOSI-TAG-LIST' ? [] : null\n })\n TosiDialog.alert('Form has been reset', 'Reset')\n})\n\npreview.querySelector('.set-values-btn').addEventListener('click', () => {\n // Demonstrate programmatic value setting\n const rating = tosiForm.querySelector('tosi-rating')\n const select = tosiForm.querySelector('tosi-select')\n const segmented = tosiForm.querySelector('tosi-segmented')\n const tagList = tosiForm.querySelector('tosi-tag-list')\n\n rating.value = 5\n select.value = 'uk'\n segmented.value = 'enterprise'\n tagList.value = ['Tech', 'Music']\n\n TosiDialog.alert('Values set programmatically:\\n\\nRating: 5\\nCountry: uk\\nTier: enterprise\\nInterests: Tech, Music', 'Values Set')\n})\n```\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component as XinComponent,\n ElementCreator,\n elements,\n varDefault,\n} from 'tosijs'\n\nimport { colorInput } from './color-input'\n\nconst { form, slot, tosiSlot, label, input, span } = elements\n\nfunction attr(element: HTMLElement, name: string, value: any): void {\n if (value !== '' && value !== false) {\n element.setAttribute(name, value)\n } else {\n element.removeAttribute(name)\n }\n}\n\nfunction getInputValue(input: HTMLInputElement): any {\n switch (input.type) {\n case 'checkbox':\n return input.checked\n case 'radio': {\n const picked = input.parentElement?.querySelector(\n `input[type=\"radio\"][name=\"${input.name}\"]:checked`\n ) as HTMLInputElement | null\n return picked ? picked.value : null\n }\n case 'range':\n case 'number':\n return Number(input.value)\n default:\n return Array.isArray(input.value) && input.value.length === 0\n ? null\n : input.value\n }\n}\n\n// Idempotent: write only when the value actually differs. Blindly re-assigning\n// `input.value` (even the same string) moves the caret / drops the selection of a\n// field being edited, so render must not do it as redundant work — and it lets\n// render run any number of times without side-effects.\nfunction setElementValue(input: HTMLElement | null | undefined, value: any) {\n if (!(input instanceof HTMLElement)) {\n // do nothing\n } else if (input instanceof HTMLInputElement) {\n switch (input.type) {\n case 'checkbox':\n if (input.checked !== Boolean(value)) input.checked = value\n break\n case 'radio': {\n const checked = value === input.value\n if (input.checked !== checked) input.checked = checked\n break\n }\n default: {\n const v = String(value || '')\n if (input.value !== v) input.value = v\n }\n }\n } else if (value != null || (input as HTMLInputElement).value != null) {\n const v = String(value || '')\n if ((input as HTMLInputElement).value !== v) (input as HTMLInputElement).value = v\n }\n}\n\nexport class TosiField extends XinComponent {\n static preferredTagName = 'tosi-field'\n\n static lightStyleSpec = {\n ':host [part=\"field\"]': {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: varDefault.prefixSuffixGap('8px'),\n },\n ':host [part=\"field\"][prefix]::before': {\n content: 'attr(prefix)',\n },\n ':host [part=\"field\"][suffix]::after': {\n content: 'attr(suffix)',\n },\n ':host [part=\"field\"] > *, :host [part=\"input\"] > *': {\n width: '100%',\n },\n ':host textarea': {\n resize: 'none',\n },\n ':host input[type=\"checkbox\"]': {\n width: 'fit-content',\n },\n ':host .hidden': {\n position: 'absolute',\n pointerEvents: 'none',\n opacity: 0,\n },\n }\n\n static initAttributes = {\n caption: '',\n key: '',\n type: '' as\n | ''\n | 'checkbox'\n | 'number'\n | 'range'\n | 'date'\n | 'text'\n | 'color',\n optional: false,\n pattern: '',\n placeholder: '',\n min: '',\n max: '',\n step: '',\n fixedPrecision: -1,\n prefix: '',\n suffix: '',\n }\n\n value: any = null\n\n content = label(\n tosiSlot({ part: 'caption' }),\n span(\n { part: 'field' },\n tosiSlot({ part: 'input', name: 'input' }),\n input({ part: 'valueHolder' })\n )\n )\n\n handleChange = () => {\n const { input, valueHolder } = this.parts as {\n input: HTMLElement\n valueHolder: HTMLInputElement\n }\n const inputElement = (input.children[0] || valueHolder) as HTMLInputElement\n if (inputElement !== valueHolder) {\n valueHolder.value = inputElement.value\n }\n this.value = getInputValue(inputElement)\n const form = this.closest('tosi-form') as TosiForm\n if (form && this.key !== '') {\n switch (this.type) {\n case 'checkbox':\n form.fields[this.key] = inputElement.checked\n break\n case 'number':\n case 'range':\n if (this.fixedPrecision > -1) {\n inputElement.value = Number(inputElement.value).toFixed(\n this.fixedPrecision\n )\n form.fields[this.key] = Number(inputElement.value)\n } else {\n form.fields[this.key] = Number(inputElement.value)\n }\n break\n default:\n form.fields[this.key] = inputElement.value\n }\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n const { input, valueHolder } = this.parts as {\n input: HTMLElement\n valueHolder: HTMLInputElement\n }\n\n // Initialization from form value is handled by tosi-form.initializeNamedElements()\n\n valueHolder.addEventListener('change', this.handleChange)\n input.addEventListener('change', this.handleChange, true)\n }\n\n render() {\n const { input, caption, valueHolder, field } = this.parts as {\n input: HTMLElement\n field: HTMLElement\n caption: HTMLElement\n valueHolder: HTMLInputElement\n }\n if (caption.textContent?.trim() === '') {\n caption.append(this.caption !== '' ? this.caption : this.key)\n }\n // Build the type-specific child ONCE and reuse it. Re-creating the <textarea> /\n // <tosi-color> every render (the old behavior, only avoided by a `valueChanged`\n // timing flag) destroyed focus, caret and selection mid-edit — provably redundant\n // when the child of the right kind already exists. The value is reconciled\n // idempotently by setElementValue below.\n if (this.type === 'text') {\n let textarea = input.children[0]\n if (!(textarea instanceof HTMLTextAreaElement)) {\n input.textContent = ''\n textarea = elements.textarea({ value: this.value })\n input.append(textarea)\n }\n if (this.placeholder) {\n textarea.setAttribute('placeholder', this.placeholder)\n }\n } else if (this.type === 'color') {\n if (!input.children[0]?.matches('tosi-color')) {\n input.textContent = ''\n input.append(colorInput({ value: this.value }))\n }\n } else if (input.children.length === 0) {\n attr(valueHolder, 'placeholder', this.placeholder)\n attr(valueHolder, 'type', this.type)\n attr(valueHolder, 'pattern', this.pattern)\n attr(valueHolder, 'min', this.min)\n attr(valueHolder, 'max', this.max)\n if (this.step) {\n attr(valueHolder, 'step', this.step)\n } else if (this.fixedPrecision > 0 && this.type === 'number') {\n attr(valueHolder, 'step', Math.pow(10, -this.fixedPrecision))\n }\n }\n setElementValue(valueHolder, this.value)\n setElementValue(input.children[0] as HTMLElement, this.value)\n\n if (this.prefix) {\n field.setAttribute('prefix', this.prefix)\n } else {\n field.removeAttribute('prefix')\n }\n if (this.suffix) {\n field.setAttribute('suffix', this.suffix)\n } else {\n field.removeAttribute('suffix')\n }\n\n valueHolder.classList.toggle('hidden', input.children.length > 0)\n if (input.children.length > 0) {\n valueHolder.setAttribute('tabindex', '-1')\n } else {\n valueHolder.removeAttribute('tabindex')\n }\n input.style.display = input.children.length === 0 ? 'none' : ''\n attr(valueHolder, 'required', !this.optional)\n }\n}\n\nexport class TosiForm extends XinComponent {\n static preferredTagName = 'tosi-form'\n\n context = {} as { [key: string]: any }\n value = {} as { [key: string]: any }\n get isValid(): boolean {\n const widgets = (\n [...this.querySelectorAll('*')] as HTMLInputElement[]\n ).filter((widget) => widget.required !== undefined)\n return widgets.find((widget) => !widget.reportValidity()) === undefined\n }\n\n static shadowStyleSpec = {\n ':host': {\n display: 'flex',\n flexDirection: 'column',\n },\n ':host::part(header), :host::part(footer)': {\n display: 'flex',\n },\n ':host::part(content)': {\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden auto',\n height: '100%',\n width: '100%',\n position: 'relative',\n boxSizing: 'border-box',\n },\n ':host form': {\n display: 'flex',\n flex: '1 1 auto',\n position: 'relative',\n overflow: 'hidden',\n },\n }\n\n content = [\n slot({ part: 'header', name: 'header' }),\n form({ part: 'form' }, slot({ part: 'content' })),\n slot({ part: 'footer', name: 'footer' }),\n ]\n\n getField = (key: string): TosiField | null => {\n return this.querySelector(`tosi-field[key=\"${key}\"]`) as TosiField | null\n }\n\n get fields(): any {\n if (typeof this.value === 'string') {\n try {\n this.value = JSON.parse(this.value)\n } catch {\n console.log('<tosi-form> could not use its value, expects valid JSON')\n this.value = {}\n }\n }\n const { getField } = this\n const dispatch = this.dispatchEvent.bind(this)\n return new Proxy(this.value, {\n get(target, prop: string): any {\n return target[prop]\n },\n\n set(target, prop: string, newValue: any): boolean {\n if (target[prop] !== newValue) {\n target[prop] = newValue\n const field = getField(prop)\n if (field) {\n field.value = newValue\n }\n dispatch(new Event('change'))\n }\n return true\n },\n })\n }\n\n set fields(values: { [key: string]: any }) {\n const fields = [...this.querySelectorAll('tosi-field')] as TosiField[]\n for (const field of fields) {\n field.value = values[field.key]\n }\n }\n\n submit = () => {\n this.parts.form.dispatchEvent(new Event('submit'))\n }\n\n handleSubmit = (event: SubmitEvent) => {\n event.preventDefault()\n event.stopPropagation()\n // Sync field values before submitting\n this.syncFieldValues()\n const value = this.fields\n this.submitCallback(value, this.isValid)\n }\n\n submitCallback = (value: { [key: string]: any }, isValid: boolean): void => {\n console.log('override submitCallback to handle this data', {\n value,\n isValid,\n })\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n const { form } = this.parts as { form: HTMLFormElement }\n form.addEventListener('submit', this.handleSubmit)\n\n // Listen for change events from named elements to update form value\n // Use 'this' to capture events from slotted content\n this.addEventListener('change', this.handleElementChange, true)\n\n // Initialize formAssociated components (those with name attribute) from form value\n this.initializeNamedElements()\n }\n\n private handleElementChange = (event: Event) => {\n const target = event.target as HTMLElement\n const name = target.getAttribute('name')\n if (name && 'value' in target) {\n this.fields[name] = (target as any).value\n }\n }\n\n private syncFieldValues(): void {\n const formValue = this.fields\n const namedElements = this.querySelectorAll(\n '[name], [key]'\n ) as NodeListOf<HTMLElement>\n for (const el of namedElements) {\n const key = el.getAttribute('name') || el.getAttribute('key')\n if (!key) continue\n if (formValue[key] === undefined) {\n const val = (el as any).value ?? el.getAttribute('value')\n if (val != null) {\n formValue[key] = val\n }\n }\n }\n }\n\n private initializeNamedElements(): void {\n const formValue = this.fields\n // Handle both 'name' (formAssociated) and 'key' (tosi-field) attributes\n const namedElements = this.querySelectorAll(\n '[name], [key]'\n ) as NodeListOf<HTMLElement>\n for (const el of namedElements) {\n const key = el.getAttribute('name') || el.getAttribute('key')\n if (!key) continue\n if (formValue[key] !== undefined) {\n ;(el as any).value = formValue[key]\n }\n }\n }\n}\n\n/** @deprecated Use TosiField instead */\nexport type XinField = TosiField\n/** @deprecated Use TosiField instead */\nexport const XinField: typeof TosiField = TosiField\n\n/** @deprecated Use TosiForm instead */\nexport type XinForm = TosiForm\n/** @deprecated Use TosiForm instead */\nexport const XinForm: typeof TosiForm = TosiForm\n\nexport const tosiField = TosiField.elementCreator() as ElementCreator<TosiField>\n\nexport const tosiForm = TosiForm.elementCreator() as ElementCreator<TosiForm>\n\n/** @deprecated Use tosiField instead (tag is now tosi-field) */\nexport const xinField = tosiField\n\n/** @deprecated Use tosiForm instead (tag is now tosi-form) */\nexport const xinForm = tosiForm\n",
|
|
49
50
|
"/*\n`<tosi-css-var-editor>` — a doc-system affordance (NOT a general library component).\nReads the CSS custom properties a component defines in its shadow `<style>` and builds\na live form to tweak them, applying changes to the matching element(s) on the page. It\nis registered as a side effect of loading the doc-system (see doc-system.ts) so doc pages\ncan drop `<tosi-css-var-editor element-selector=\"tosi-widget\">` under an example; it is\ndeliberately not exported from `tosijs-ui`.\n*/\nimport {\n Component as WebComponent,\n ElementCreator,\n elements,\n Color,\n} from 'tosijs'\nimport { tosiForm, TosiForm, tosiField } from '../form'\n\nconst { h2, code } = elements\n\n// A value is a color if it's a hex literal or an rgb()/hsl() (with or without alpha)\n// functional notation — the forms getComputedStyle / getPropertyValue return. The old\n// regex (`[\\d()a-fA-F]+`) rejected the commas and spaces in `rgb(255, 0, 0)`, so every\n// functional color fell through to a plain text field.\nconst COLOR_RE = /^(#[0-9a-f]{3,8}|(?:rgb|hsl)a?\\([^)]*\\))$/i\n\nclass TosiCssVarEditor extends WebComponent {\n static preferredTagName = 'tosi-css-var-editor'\n\n static initAttributes = {\n elementSelector: '',\n targetSelector: '',\n }\n\n content = () => [\n h2({ part: 'title' }, 'CSS variables'),\n tosiForm({ part: 'variables', changeCallback: this.update }),\n ]\n\n // The example the editor targets can mount a frame or two after this element does;\n // retry a bounded number of times (≈10s) rather than polling forever, and cancel on\n // disconnect so a removed editor can't keep firing timers against a dead page.\n private retryTimer?: ReturnType<typeof setTimeout>\n private retries = 0\n\n loadVars = () => {\n const { title, variables } = this.parts\n\n variables.textContent = ''\n\n if (!this.elementSelector) return\n title.textContent = `CSS variables for ${this.elementSelector}`\n\n const element = document.querySelector(this.elementSelector)\n if (!element) {\n if (this.retries++ < 40) this.retryTimer = setTimeout(this.loadVars, 250)\n return\n }\n\n const styleNode = element.shadowRoot\n ? element.shadowRoot.querySelector('style')\n : document.querySelector(`style#${this.elementSelector}-component`)\n if (!styleNode || !styleNode.textContent) return\n\n const computedStyle = getComputedStyle(element)\n const cssVars = [\n ...new Set<string>(styleNode.textContent.match(/--[\\w-]+/g) ?? []),\n ]\n\n for (const cssVar of cssVars) {\n let value = computedStyle.getPropertyValue(cssVar).trim()\n const type = COLOR_RE.test(value) ? 'color' : 'string'\n if (type === 'color') value = Color.fromCss(value).html\n variables.append(tosiField(code(cssVar), { key: cssVar, value, type }))\n }\n }\n\n update = () => {\n const selector = this.targetSelector || this.elementSelector\n if (!selector) return\n const targets = [...document.querySelectorAll(selector)] as HTMLElement[]\n const { value } = this.parts.variables as TosiForm\n for (const target of targets) {\n for (const key of Object.keys(value)) {\n target.style.setProperty(key, value[key])\n }\n }\n }\n\n connectedCallback() {\n super.connectedCallback()\n this.retries = 0\n this.loadVars()\n this.parts.variables.addEventListener('change', this.update)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n if (this.retryTimer) clearTimeout(this.retryTimer)\n }\n}\n\nexport const tosiCssVarEditor =\n TosiCssVarEditor.elementCreator() as ElementCreator<TosiCssVarEditor>\n",
|
|
50
|
-
"/*#\n# doc-system\n\n`<tosi-doc-system>` turns a folder of pre-rendered, statically-served pages into a\nfast, SPA-like documentation site **without giving up SEO or web-1.0 fallback**.\n\nEach page is plain HTML — optimized `<head>`, the doc's markdown already rendered\nto HTML, and a real `<ul>` of links to every other page — so search engines and\nno-JS browsers get everything. When the library's IIFE bundle loads, the\n`<tosi-doc-system>` element upgrades that static content into the interactive\n[doc-browser](?doc-browser.ts): client-side navigation (no full reloads), live\ncode examples, search, responsive navigation, and a settings menu (theme +\nlanguage).\n\n```html\n<body>\n <tosi-doc-system docs=\"/docs.json\" config='{\"projectName\":\"My Project\"}'>\n <article class=\"doc-content\"><!-- markdown pre-rendered to HTML --></article>\n <ul class=\"doc-nav\"><!-- links to every page --></ul>\n <ul class=\"doc-navbar\"><!-- header-bar links --></ul>\n </tosi-doc-system>\n <script src=\"/iife.js\"></script>\n</body>\n```\n\n## Attributes\n\n- `docs` — URL of the generated `docs.json` (default `/docs.json`). The whole doc\n corpus is the size of a JPEG, so the client fetches it once and renders any page\n instantly.\n- `config` — inline JSON `{ projectName, projectLinks }` baked in at build time.\n- `localized` — URL of a tab-separated translation table; when set, it powers the\n settings menu's language picker.\n- `routing` — `''` (default) drives the page with clean `/slug/` URLs. Set\n `\"memory\"` for a **self-contained** instance whose navigation never touches the\n page URL or history — for embedding the docs in a dialog, side panel, or\n floating element. (A `<tosi-doc-system>` nested inside another one — e.g. the\n live demo on this page — is forced to memory routing automatically, and a demo\n nested two levels deep renders an inert placeholder instead of recursing.)\n- `route` — memory routing only: the current doc's slug. Set it to navigate the\n embedded browser to a doc; it's reflected back here as the user clicks around,\n so a host can observe/bind it (e.g. to remember where a help panel was left).\n- `accent` / `background` / `text` — base theme colors (most of the palette is\n derived from `accent` via color math).\n\nThe element is light-DOM (no shadow root) so the pre-rendered markdown remains the\nreal, indexable page content until hydration replaces it with the live browser.\nLive-example modules default to the `xinjs` / `xinjsui` IIFE globals; override by\nsetting the element's `context` property before it connects.\n\nA self-contained, controllable embed (e.g. docs in a floating panel):\n\n```html\n<tosi-doc-system docs=\"/docs.json\" routing=\"memory\" route=\"data-table\">\n</tosi-doc-system>\n```\n*/\n\n/*{ \"parent\": \"Appendices\" }*/\n\nimport {\n Component,\n ElementCreator,\n StyleSheet,\n elements,\n tosi,\n vars,\n} from 'tosijs'\nimport { createDocBrowser, Doc, ProjectLinks, LinkItem } from '../doc-browser'\nimport { buildSlugMap, legacyQueryPath } from './routing'\nimport { buildBookHtml, slugify } from './book-html'\nimport { docSystemStyleSpec } from './doc-system-styles'\nimport { icons } from '../icons'\nimport { popMenu } from '../menu'\nimport { i18n, setLocale, initLocalization } from '../localize'\n// Side-effect: register <tosi-css-var-editor> so doc pages can drop the live CSS-var\n// tweaker under an example. Part of the doc-system, NOT re-exported from tosijs-ui.\nimport './css-var-editor'\n\nconst { button, div } = elements\n\ninterface DocSystemConfig {\n projectName?: string\n projectLinks?: ProjectLinks\n}\n\nconst PREFS_KEY = 'tosi-doc-system-prefs'\n\nexport class TosiDocSystem extends Component {\n static preferredTagName = 'tosi-doc-system'\n\n static initAttributes = {\n docs: '/docs.json',\n config: '',\n localized: '',\n // Routing mode. '' (default) → clean `/slug/` URLs that drive the page. Set\n // 'memory' (or 'internal') for a self-contained instance that never touches\n // the page URL — for embedding the docs in a panel, dialog, etc. A nested\n // <tosi-doc-system> (inside a live example) is forced to 'memory' too.\n routing: '',\n // Memory routing only: the current doc slug. Set it to navigate the embedded\n // browser; it's reflected back here as the user clicks around, so a host can\n // bind/observe it (e.g. docs in a floating element).\n route: '',\n // Base theme colors — most of the palette is derived from `accent`.\n accent: '',\n background: '',\n text: '',\n }\n\n // Modules exposed to live examples. Defaults to the IIFE globals on connect.\n context?: Record<string, any>\n\n // Light DOM: leave the pre-rendered children in place until render() swaps in\n // the live browser. (null = framework leaves our children alone, as in tosi-md.)\n content = null\n\n // The loaded corpus and the mounted browser; both also act as one-time guards.\n private corpus?: Doc[]\n private browser?: HTMLElement\n\n // Route-reflection bookkeeping (memory routing): the last slug applied to the\n // browser, so external `route` changes navigate but internal navigation (which\n // writes `route` back) doesn't re-navigate or loop.\n private appliedRoute = ''\n private suppressed = false\n\n // How many <tosi-doc-system> ancestors this element has, crossing shadow\n // boundaries. 0 = the page's own; ≥1 = embedded in another (e.g. the live\n // demo on the doc-system page). Used to force memory routing on nested\n // instances and to stop runaway recursion (a doc page that demos itself).\n private nestingDepth(): number {\n let depth = 0\n let node: Node | null = this.parentNode\n while (node) {\n if (\n node.nodeType === Node.ELEMENT_NODE &&\n (node as Element).tagName === 'TOSI-DOC-SYSTEM'\n ) {\n depth++\n }\n node = node.parentNode || (node as ShadowRoot).host || null\n }\n return depth\n }\n\n // User theme/locale preferences (persisted to localStorage).\n private prefs: any\n private stylesApplied = false\n\n // ---- Theme ---------------------------------------------------------------\n\n private applyStyles(): void {\n if (this.stylesApplied) return\n this.stylesApplied = true\n // When the generator has burned the theme into a static <link>, the page is\n // already styled (no JS / no flash) — don't inject a duplicate. Otherwise this\n // is a drop-in usage, so inject the computed theme.\n if (!document.querySelector('link[data-tosi-doc-system]')) {\n StyleSheet(\n 'tosi-doc-system',\n docSystemStyleSpec({\n accent: this.accent || undefined,\n background: this.background || undefined,\n text: this.text || undefined,\n })\n )\n }\n }\n\n private applyThemePrefs = (): void => {\n const theme = this.prefs.theme.value\n const dark =\n theme === 'dark' ||\n (theme === 'system' && matchMedia('(prefers-color-scheme: dark)').matches)\n const contrast = this.prefs.highContrast.value\n document.body.classList.toggle('darkmode', dark)\n document.body.classList.toggle('high-contrast', contrast)\n // Also on <html>, because the generated pages set it there BEFORE first paint\n // (a static page is now painted, not hidden, so a dark reader would otherwise\n // see a flash of the light theme — and only a head script can read the stored\n // preference). If we left that class alone, switching to light would clear it\n // from <body> while <html> still supplied the dark vars, and the page would be\n // stuck dark. Other code watches `body.darkmode` (e.g. the code editor), so the\n // body class stays authoritative — this just keeps the two from disagreeing.\n document.documentElement.classList.toggle('darkmode', dark)\n document.documentElement.classList.toggle('high-contrast', contrast)\n }\n\n private persistPrefs(): void {\n try {\n localStorage.setItem(\n PREFS_KEY,\n JSON.stringify({\n theme: this.prefs.theme.value,\n highContrast: this.prefs.highContrast.value,\n locale: this.prefs.locale.value,\n })\n )\n } catch {\n // localStorage may be unavailable (private mode); preferences just won't persist.\n }\n }\n\n private initPrefs(): void {\n let saved: any = {}\n try {\n saved = JSON.parse(localStorage.getItem(PREFS_KEY) || '{}')\n } catch {\n /* ignore */\n }\n this.prefs = tosi({\n prefs: {\n theme: saved.theme || 'system',\n highContrast: saved.highContrast || false,\n locale: saved.locale || '',\n },\n }).prefs\n\n this.applyThemePrefs()\n matchMedia('(prefers-color-scheme: dark)').addEventListener(\n 'change',\n this.applyThemePrefs\n )\n this.prefs.theme.observe(() => {\n this.applyThemePrefs()\n this.persistPrefs()\n })\n this.prefs.highContrast.observe(() => {\n this.applyThemePrefs()\n this.persistPrefs()\n })\n this.prefs.locale.observe(() => this.persistPrefs())\n }\n\n // ---- Localization --------------------------------------------------------\n\n private async initLocale(): Promise<void> {\n if (!this.localized) return\n try {\n const text = await (await fetch(this.localized)).text()\n initLocalization(text)\n if (this.prefs.locale.value) setLocale(this.prefs.locale.value)\n } catch (error) {\n console.warn(\n '<tosi-doc-system> could not load localization from',\n this.localized,\n error\n )\n }\n }\n\n // ---- Settings menu -------------------------------------------------------\n\n private settingsButton(): HTMLElement {\n return button(\n {\n class: 'iconic',\n // Header buttons default to the brand color (invisible on the brand bar);\n // use the link color like the nav toggle so the icon is visible.\n style: { color: vars.linkColor },\n title: 'settings',\n onClick: (event: Event) => {\n const menuItems: any[] = []\n\n // Print / ePub of the whole corpus, before a separator + the prefs.\n let projectName = ''\n try {\n projectName = JSON.parse(this.config || '{}').projectName || ''\n } catch {\n // ignore — fall through to document.title\n }\n const bookTitle = projectName || document.title || 'Documentation'\n menuItems.push({\n caption: 'Print as PDF',\n icon: 'printer',\n action: () => {\n const win = window.open('', '_blank')\n if (!win) {\n window.alert(\n 'Allow pop-ups to print the documentation as a book.'\n )\n return\n }\n win.document.open()\n win.document.write(\n buildBookHtml(this.corpus as any, {\n title: bookTitle,\n autoPrint: true,\n })\n )\n win.document.close()\n },\n })\n menuItems.push({\n caption: 'Download ePub',\n icon: 'book',\n action: () => {\n const link = document.createElement('a')\n link.href = `/${slugify(bookTitle)}.epub`\n link.download = ''\n link.click()\n },\n })\n menuItems.push(null)\n\n const localeOptions = (i18n.localeOptions.value as any[]) || []\n if (localeOptions.length > 1) {\n menuItems.push({\n caption: 'Language',\n icon: 'globe',\n menuItems: localeOptions.map((locale) => ({\n caption: locale.caption,\n icon: locale.icon,\n checked: () => locale.value === i18n.locale.value,\n action: () => {\n this.prefs.locale.value = locale.value\n setLocale(locale.value)\n },\n })),\n })\n }\n menuItems.push({\n caption: 'Color Theme',\n icon: 'rgb',\n menuItems: [\n {\n caption: 'System',\n checked: () => this.prefs.theme.value === 'system',\n action: () => (this.prefs.theme.value = 'system'),\n },\n {\n caption: 'Dark',\n checked: () => this.prefs.theme.value === 'dark',\n action: () => (this.prefs.theme.value = 'dark'),\n },\n {\n caption: 'Light',\n checked: () => this.prefs.theme.value === 'light',\n action: () => (this.prefs.theme.value = 'light'),\n },\n null,\n {\n caption: 'High Contrast',\n checked: () => this.prefs.highContrast.value,\n action: () =>\n (this.prefs.highContrast.value =\n !this.prefs.highContrast.value),\n },\n ],\n })\n popMenu({\n target: event.target as HTMLElement,\n localized: true,\n menuItems,\n })\n },\n },\n icons.moreVertical()\n )\n }\n\n // ---- Lifecycle -----------------------------------------------------------\n\n // Parse a declarative <ul class=\"...\"> of <li><a href data-icon?>label</a> into\n // LinkItem[]. Returns [] when the list is absent.\n private parseLinks(selector: string): LinkItem[] {\n const list = this.querySelector(selector)\n if (!list) return []\n return [...list.querySelectorAll('a')].map((anchor) => ({\n href: anchor.getAttribute('href') || '',\n label: (anchor.textContent || '').trim(),\n icon: (anchor as HTMLElement).dataset.icon || undefined,\n }))\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n // A doc page can demo the doc system itself. The page's browser (depth 0)\n // and one embedded demo (depth 1) are fine, but a demo INSIDE that demo\n // (depth ≥ 2) would recurse forever — so render an inert placeholder and\n // stop. (Don't even fetch the corpus.)\n if (this.nestingDepth() >= 2) {\n this.suppressed = true\n this.replaceChildren(\n div(\n { class: 'doc-system-nested' },\n '📖 nested doc-system preview (suppressed)'\n )\n )\n return\n }\n this.applyStyles()\n this.initPrefs()\n void this.initLocale()\n // Async data source: fetch once, then let the normal render pipeline mount.\n if (this.corpus === undefined) {\n const url = this.docs || '/docs.json'\n fetch(url)\n .then((response) => response.json())\n .then((corpus: Doc[]) => {\n this.corpus = corpus\n // Redirect legacy ?filename query-param links (the old doc-browser's\n // routing) to the new /slug/ paths.\n const legacy = legacyQueryPath(location.search, buildSlugMap(corpus))\n if (legacy) {\n if (legacy !== location.pathname) {\n // Different page — navigate to the real pre-rendered static page.\n location.replace(legacy + location.hash)\n return\n }\n // Same page — just drop the stale legacy query, no reload.\n history.replaceState(null, '', legacy + location.hash)\n }\n this.queueRender()\n })\n .catch((error) =>\n console.error(\n '<tosi-doc-system> could not load docs from',\n url,\n error\n )\n )\n }\n }\n\n render(): void {\n super.render()\n if (this.suppressed || this.corpus === undefined) return\n\n // Already mounted: the only live input is an external `route` change (memory\n // routing), which navigates the embedded browser. The appliedRoute guard\n // stops the browser's own write-back to `route` from re-navigating.\n if (this.browser !== undefined) {\n const navigate = (this.browser as any).navigate as\n | ((slug: string) => void)\n | undefined\n if (navigate && this.route && this.route !== this.appliedRoute) {\n this.appliedRoute = this.route\n navigate(this.route)\n }\n return\n }\n\n let config: DocSystemConfig = {}\n if (this.config) {\n try {\n config = JSON.parse(this.config)\n } catch {\n console.warn('<tosi-doc-system> ignoring invalid config attribute')\n }\n }\n\n // Nested instances (a live demo of the doc system) must never drive the page\n // URL — force memory routing. A top-level instance opts in via the attribute.\n const nested = this.nestingDepth() >= 1\n const memory =\n nested || this.routing === 'memory' || this.routing === 'internal'\n\n // Adopt the pre-rendered markdown for the landing page so it is hydrated in\n // place, never re-rendered. createDocBrowser grafts this node into its content\n // area; the static nav list (already crawled) is replaced by the reactive one.\n const contentElement =\n (this.querySelector('.doc-content') as HTMLElement | null) || undefined\n\n // Header-bar links are declared as a real, crawlable list in the static page.\n const navbarLinks = this.parseLinks('.doc-navbar')\n\n this.appliedRoute = this.route\n\n this.browser = createDocBrowser({\n docs: this.corpus,\n routing: memory ? 'memory' : 'path',\n initialRoute: memory ? this.route || undefined : undefined,\n onRouteChange: memory\n ? (slug: string) => {\n // Record before reflecting so the resulting render() no-ops.\n this.appliedRoute = slug\n this.route = slug\n }\n : undefined,\n context: this.context || {\n tosijs: (globalThis as any).xinjs,\n 'tosijs-ui': (globalThis as any).xinjsui,\n },\n projectName: config.projectName,\n projectLinks: config.projectLinks,\n navbarLinks: navbarLinks.length ? navbarLinks : undefined,\n contentElement,\n })\n\n // Add the settings (theme + language) menu — except in a nested demo, where\n // a gear that retints the whole host page would be surprising.\n if (!nested) {\n const header = this.browser.querySelector('header')\n if (header) header.append(this.settingsButton())\n }\n\n this.replaceChildren(this.browser)\n\n // (The `document.body.style.opacity = '1'` that used to live here is gone. It was\n // the other half of an opacity gate the generated <head> no longer emits — the page\n // is pre-rendered and readable before any JS runs, so there is nothing to reveal.\n // Setting opacity on a body that was never hidden did nothing but keep a stale\n // comment alive, claiming a behavior the release had already removed.)\n }\n}\n\nexport const tosiDocSystem =\n TosiDocSystem.elementCreator() as ElementCreator<TosiDocSystem>\n\n// Register the import-resolver service worker when the build opted in — the config\n// global is injected into the page head by orchestrator's importResolverHead (gated on\n// SiteConfig.importResolver). Dynamic import keeps tjs-lang/import-resolver out of the\n// bundle unless a site actually enables it, and out of a plain component consumer's\n// graph entirely. Experimental; 1.7.0 ships with the flag off. See import-resolver-plan.md.\nfunction initImportResolver(): void {\n if (typeof document === 'undefined') return\n const cfg = (globalThis as unknown as { __TOSI_IMPORT_RESOLVER?: object })\n .__TOSI_IMPORT_RESOLVER\n if (!cfg) return\n void import('tjs-lang/import-resolver')\n .then(({ registerImportResolver }) => registerImportResolver(cfg))\n .catch((e) => console.warn('import-resolver: registration failed', e))\n}\ninitImportResolver()\n",
|
|
51
|
+
"/*#\n# doc-system\n\n`<tosi-doc-system>` turns a folder of pre-rendered, statically-served pages into a\nfast, SPA-like documentation site **without giving up SEO or web-1.0 fallback**.\n\nEach page is plain HTML — optimized `<head>`, the doc's markdown already rendered\nto HTML, and a real `<ul>` of links to every other page — so search engines and\nno-JS browsers get everything. When the library's IIFE bundle loads, the\n`<tosi-doc-system>` element upgrades that static content into the interactive\n[doc-browser](?doc-browser.ts): client-side navigation (no full reloads), live\ncode examples, search, responsive navigation, and a settings menu (theme +\nlanguage).\n\n```html\n<body>\n <tosi-doc-system docs=\"/docs.json\" config='{\"projectName\":\"My Project\"}'>\n <article class=\"doc-content\"><!-- markdown pre-rendered to HTML --></article>\n <ul class=\"doc-nav\"><!-- links to every page --></ul>\n <ul class=\"doc-navbar\"><!-- header-bar links --></ul>\n </tosi-doc-system>\n <script src=\"/iife.js\"></script>\n</body>\n```\n\n## Attributes\n\n- `docs` — URL of the generated `docs.json` (default `/docs.json`). The whole doc\n corpus is the size of a JPEG, so the client fetches it once and renders any page\n instantly.\n- `config` — inline JSON `{ projectName, projectLinks }` baked in at build time.\n- `localized` — URL of a tab-separated translation table; when set, it powers the\n settings menu's language picker.\n- `routing` — `''` (default) drives the page with clean `/slug/` URLs. Set\n `\"memory\"` for a **self-contained** instance whose navigation never touches the\n page URL or history — for embedding the docs in a dialog, side panel, or\n floating element. (A `<tosi-doc-system>` nested inside another one — e.g. the\n live demo on this page — is forced to memory routing automatically, and a demo\n nested two levels deep renders an inert placeholder instead of recursing.)\n- `route` — memory routing only: the current doc's slug. Set it to navigate the\n embedded browser to a doc; it's reflected back here as the user clicks around,\n so a host can observe/bind it (e.g. to remember where a help panel was left).\n- `accent` / `background` / `text` — base theme colors (most of the palette is\n derived from `accent` via color math).\n\nThe element is light-DOM (no shadow root) so the pre-rendered markdown remains the\nreal, indexable page content until hydration replaces it with the live browser.\nLive-example modules default to the `xinjs` / `xinjsui` IIFE globals; override by\nsetting the element's `context` property before it connects.\n\nA self-contained, controllable embed (e.g. docs in a floating panel):\n\n```html\n<tosi-doc-system docs=\"/docs.json\" routing=\"memory\" route=\"data-table\">\n</tosi-doc-system>\n```\n*/\n\n/*{ \"parent\": \"Appendices\" }*/\n\nimport {\n Component,\n ElementCreator,\n StyleSheet,\n elements,\n tosi,\n vars,\n} from 'tosijs'\nimport { createDocBrowser, Doc, ProjectLinks, LinkItem } from '../doc-browser'\nimport { buildSlugMap, legacyQueryPath } from './routing'\nimport { buildBookHtml, slugify } from './book-html'\nimport { docSystemStyleSpec } from './doc-system-styles'\nimport { icons } from '../icons'\nimport { popMenu } from '../menu'\nimport { i18n, setLocale, initLocalization } from '../localize'\n// Side-effect: register <tosi-css-var-editor> so doc pages can drop the live CSS-var\n// tweaker under an example. Part of the doc-system, NOT re-exported from tosijs-ui.\nimport './css-var-editor'\n\nconst { button, div } = elements\n\ninterface DocSystemConfig {\n projectName?: string\n projectLinks?: ProjectLinks\n logo?: string\n}\n\nconst PREFS_KEY = 'tosi-doc-system-prefs'\n\nexport class TosiDocSystem extends Component {\n static preferredTagName = 'tosi-doc-system'\n\n static initAttributes = {\n docs: '/docs.json',\n config: '',\n localized: '',\n // Routing mode. '' (default) → clean `/slug/` URLs that drive the page. Set\n // 'memory' (or 'internal') for a self-contained instance that never touches\n // the page URL — for embedding the docs in a panel, dialog, etc. A nested\n // <tosi-doc-system> (inside a live example) is forced to 'memory' too.\n routing: '',\n // Memory routing only: the current doc slug. Set it to navigate the embedded\n // browser; it's reflected back here as the user clicks around, so a host can\n // bind/observe it (e.g. docs in a floating element).\n route: '',\n // Base theme colors — most of the palette is derived from `accent`.\n accent: '',\n background: '',\n text: '',\n }\n\n // Modules exposed to live examples. Defaults to the IIFE globals on connect.\n context?: Record<string, any>\n\n // Light DOM: leave the pre-rendered children in place until render() swaps in\n // the live browser. (null = framework leaves our children alone, as in tosi-md.)\n content = null\n\n // The loaded corpus and the mounted browser; both also act as one-time guards.\n private corpus?: Doc[]\n private browser?: HTMLElement\n\n // Route-reflection bookkeeping (memory routing): the last slug applied to the\n // browser, so external `route` changes navigate but internal navigation (which\n // writes `route` back) doesn't re-navigate or loop.\n private appliedRoute = ''\n private suppressed = false\n\n // How many <tosi-doc-system> ancestors this element has, crossing shadow\n // boundaries. 0 = the page's own; ≥1 = embedded in another (e.g. the live\n // demo on the doc-system page). Used to force memory routing on nested\n // instances and to stop runaway recursion (a doc page that demos itself).\n private nestingDepth(): number {\n let depth = 0\n let node: Node | null = this.parentNode\n while (node) {\n if (\n node.nodeType === Node.ELEMENT_NODE &&\n (node as Element).tagName === 'TOSI-DOC-SYSTEM'\n ) {\n depth++\n }\n node = node.parentNode || (node as ShadowRoot).host || null\n }\n return depth\n }\n\n // User theme/locale preferences (persisted to localStorage).\n private prefs: any\n private stylesApplied = false\n\n // ---- Theme ---------------------------------------------------------------\n\n private applyStyles(): void {\n if (this.stylesApplied) return\n this.stylesApplied = true\n // When the generator has burned the theme into a static <link>, the page is\n // already styled (no JS / no flash) — don't inject a duplicate. Otherwise this\n // is a drop-in usage, so inject the computed theme.\n if (!document.querySelector('link[data-tosi-doc-system]')) {\n StyleSheet(\n 'tosi-doc-system',\n docSystemStyleSpec({\n accent: this.accent || undefined,\n background: this.background || undefined,\n text: this.text || undefined,\n })\n )\n }\n }\n\n private applyThemePrefs = (): void => {\n const theme = this.prefs.theme.value\n const dark =\n theme === 'dark' ||\n (theme === 'system' && matchMedia('(prefers-color-scheme: dark)').matches)\n const contrast = this.prefs.highContrast.value\n document.body.classList.toggle('darkmode', dark)\n document.body.classList.toggle('high-contrast', contrast)\n // Also on <html>, because the generated pages set it there BEFORE first paint\n // (a static page is now painted, not hidden, so a dark reader would otherwise\n // see a flash of the light theme — and only a head script can read the stored\n // preference). If we left that class alone, switching to light would clear it\n // from <body> while <html> still supplied the dark vars, and the page would be\n // stuck dark. Other code watches `body.darkmode` (e.g. the code editor), so the\n // body class stays authoritative — this just keeps the two from disagreeing.\n document.documentElement.classList.toggle('darkmode', dark)\n document.documentElement.classList.toggle('high-contrast', contrast)\n }\n\n private persistPrefs(): void {\n try {\n localStorage.setItem(\n PREFS_KEY,\n JSON.stringify({\n theme: this.prefs.theme.value,\n highContrast: this.prefs.highContrast.value,\n locale: this.prefs.locale.value,\n })\n )\n } catch {\n // localStorage may be unavailable (private mode); preferences just won't persist.\n }\n }\n\n private initPrefs(): void {\n let saved: any = {}\n try {\n saved = JSON.parse(localStorage.getItem(PREFS_KEY) || '{}')\n } catch {\n /* ignore */\n }\n this.prefs = tosi({\n prefs: {\n theme: saved.theme || 'system',\n highContrast: saved.highContrast || false,\n locale: saved.locale || '',\n },\n }).prefs\n\n this.applyThemePrefs()\n matchMedia('(prefers-color-scheme: dark)').addEventListener(\n 'change',\n this.applyThemePrefs\n )\n this.prefs.theme.observe(() => {\n this.applyThemePrefs()\n this.persistPrefs()\n })\n this.prefs.highContrast.observe(() => {\n this.applyThemePrefs()\n this.persistPrefs()\n })\n this.prefs.locale.observe(() => this.persistPrefs())\n }\n\n // ---- Localization --------------------------------------------------------\n\n private async initLocale(): Promise<void> {\n if (!this.localized) return\n try {\n const text = await (await fetch(this.localized)).text()\n initLocalization(text)\n if (this.prefs.locale.value) setLocale(this.prefs.locale.value)\n } catch (error) {\n console.warn(\n '<tosi-doc-system> could not load localization from',\n this.localized,\n error\n )\n }\n }\n\n // ---- Settings menu -------------------------------------------------------\n\n private settingsButton(): HTMLElement {\n return button(\n {\n class: 'iconic',\n // Header buttons default to the brand color (invisible on the brand bar);\n // use the link color like the nav toggle so the icon is visible.\n style: { color: vars.linkColor },\n title: 'settings',\n onClick: (event: Event) => {\n const menuItems: any[] = []\n\n // Print / ePub of the whole corpus, before a separator + the prefs.\n let projectName = ''\n try {\n projectName = JSON.parse(this.config || '{}').projectName || ''\n } catch {\n // ignore — fall through to document.title\n }\n const bookTitle = projectName || document.title || 'Documentation'\n menuItems.push({\n caption: 'Print as PDF',\n icon: 'printer',\n action: () => {\n const win = window.open('', '_blank')\n if (!win) {\n window.alert(\n 'Allow pop-ups to print the documentation as a book.'\n )\n return\n }\n win.document.open()\n win.document.write(\n buildBookHtml(this.corpus as any, {\n title: bookTitle,\n autoPrint: true,\n })\n )\n win.document.close()\n },\n })\n menuItems.push({\n caption: 'Download ePub',\n icon: 'book',\n action: () => {\n const link = document.createElement('a')\n link.href = `/${slugify(bookTitle)}.epub`\n link.download = ''\n link.click()\n },\n })\n menuItems.push(null)\n\n const localeOptions = (i18n.localeOptions.value as any[]) || []\n if (localeOptions.length > 1) {\n menuItems.push({\n caption: 'Language',\n icon: 'globe',\n menuItems: localeOptions.map((locale) => ({\n caption: locale.caption,\n icon: locale.icon,\n checked: () => locale.value === i18n.locale.value,\n action: () => {\n this.prefs.locale.value = locale.value\n setLocale(locale.value)\n },\n })),\n })\n }\n menuItems.push({\n caption: 'Color Theme',\n icon: 'rgb',\n menuItems: [\n {\n caption: 'System',\n checked: () => this.prefs.theme.value === 'system',\n action: () => (this.prefs.theme.value = 'system'),\n },\n {\n caption: 'Dark',\n checked: () => this.prefs.theme.value === 'dark',\n action: () => (this.prefs.theme.value = 'dark'),\n },\n {\n caption: 'Light',\n checked: () => this.prefs.theme.value === 'light',\n action: () => (this.prefs.theme.value = 'light'),\n },\n null,\n {\n caption: 'High Contrast',\n checked: () => this.prefs.highContrast.value,\n action: () =>\n (this.prefs.highContrast.value =\n !this.prefs.highContrast.value),\n },\n ],\n })\n popMenu({\n target: event.target as HTMLElement,\n localized: true,\n menuItems,\n })\n },\n },\n icons.moreVertical()\n )\n }\n\n // ---- Lifecycle -----------------------------------------------------------\n\n // Parse a declarative <ul class=\"...\"> of <li><a href data-icon?>label</a> into\n // LinkItem[]. Returns [] when the list is absent.\n private parseLinks(selector: string): LinkItem[] {\n const list = this.querySelector(selector)\n if (!list) return []\n return [...list.querySelectorAll('a')].map((anchor) => ({\n href: anchor.getAttribute('href') || '',\n label: (anchor.textContent || '').trim(),\n icon: (anchor as HTMLElement).dataset.icon || undefined,\n }))\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n // A doc page can demo the doc system itself. The page's browser (depth 0)\n // and one embedded demo (depth 1) are fine, but a demo INSIDE that demo\n // (depth ≥ 2) would recurse forever — so render an inert placeholder and\n // stop. (Don't even fetch the corpus.)\n if (this.nestingDepth() >= 2) {\n this.suppressed = true\n this.replaceChildren(\n div(\n { class: 'doc-system-nested' },\n '📖 nested doc-system preview (suppressed)'\n )\n )\n return\n }\n this.applyStyles()\n this.initPrefs()\n void this.initLocale()\n // Async data source: fetch once, then let the normal render pipeline mount.\n if (this.corpus === undefined) {\n const url = this.docs || '/docs.json'\n fetch(url)\n .then((response) => response.json())\n .then((corpus: Doc[]) => {\n this.corpus = corpus\n // Redirect legacy ?filename query-param links (the old doc-browser's\n // routing) to the new /slug/ paths.\n const legacy = legacyQueryPath(location.search, buildSlugMap(corpus))\n if (legacy) {\n if (legacy !== location.pathname) {\n // Different page — navigate to the real pre-rendered static page.\n location.replace(legacy + location.hash)\n return\n }\n // Same page — just drop the stale legacy query, no reload.\n history.replaceState(null, '', legacy + location.hash)\n }\n this.queueRender()\n })\n .catch((error) =>\n console.error(\n '<tosi-doc-system> could not load docs from',\n url,\n error\n )\n )\n }\n }\n\n render(): void {\n super.render()\n if (this.suppressed || this.corpus === undefined) return\n\n // Already mounted: the only live input is an external `route` change (memory\n // routing), which navigates the embedded browser. The appliedRoute guard\n // stops the browser's own write-back to `route` from re-navigating.\n if (this.browser !== undefined) {\n const navigate = (this.browser as any).navigate as\n | ((slug: string) => void)\n | undefined\n if (navigate && this.route && this.route !== this.appliedRoute) {\n this.appliedRoute = this.route\n navigate(this.route)\n }\n return\n }\n\n let config: DocSystemConfig = {}\n if (this.config) {\n try {\n config = JSON.parse(this.config)\n } catch {\n console.warn('<tosi-doc-system> ignoring invalid config attribute')\n }\n }\n\n // Nested instances (a live demo of the doc system) must never drive the page\n // URL — force memory routing. A top-level instance opts in via the attribute.\n const nested = this.nestingDepth() >= 1\n const memory =\n nested || this.routing === 'memory' || this.routing === 'internal'\n\n // Adopt the pre-rendered markdown for the landing page so it is hydrated in\n // place, never re-rendered. createDocBrowser grafts this node into its content\n // area; the static nav list (already crawled) is replaced by the reactive one.\n const contentElement =\n (this.querySelector('.doc-content') as HTMLElement | null) || undefined\n\n // Header-bar links are declared as a real, crawlable list in the static page.\n const navbarLinks = this.parseLinks('.doc-navbar')\n\n this.appliedRoute = this.route\n\n this.browser = createDocBrowser({\n docs: this.corpus,\n routing: memory ? 'memory' : 'path',\n initialRoute: memory ? this.route || undefined : undefined,\n onRouteChange: memory\n ? (slug: string) => {\n // Record before reflecting so the resulting render() no-ops.\n this.appliedRoute = slug\n this.route = slug\n }\n : undefined,\n context: this.context || {\n tosijs: (globalThis as any).xinjs,\n 'tosijs-ui': (globalThis as any).xinjsui,\n },\n projectName: config.projectName,\n projectLinks: config.projectLinks,\n logo: config.logo,\n navbarLinks: navbarLinks.length ? navbarLinks : undefined,\n contentElement,\n })\n\n // Add the settings (theme + language) menu — except in a nested demo, where\n // a gear that retints the whole host page would be surprising.\n if (!nested) {\n const header = this.browser.querySelector('header')\n if (header) header.append(this.settingsButton())\n }\n\n this.replaceChildren(this.browser)\n\n // (The `document.body.style.opacity = '1'` that used to live here is gone. It was\n // the other half of an opacity gate the generated <head> no longer emits — the page\n // is pre-rendered and readable before any JS runs, so there is nothing to reveal.\n // Setting opacity on a body that was never hidden did nothing but keep a stale\n // comment alive, claiming a behavior the release had already removed.)\n }\n}\n\nexport const tosiDocSystem =\n TosiDocSystem.elementCreator() as ElementCreator<TosiDocSystem>\n\n// Register the import-resolver service worker when the build opted in — the config\n// global is injected into the page head by orchestrator's importResolverHead (gated on\n// SiteConfig.importResolver). Dynamic import keeps tjs-lang/import-resolver out of the\n// bundle unless a site actually enables it, and out of a plain component consumer's\n// graph entirely. Experimental; 1.7.0 ships with the flag off. See import-resolver-plan.md.\nfunction initImportResolver(): void {\n if (typeof document === 'undefined') return\n const cfg = (globalThis as unknown as { __TOSI_IMPORT_RESOLVER?: object })\n .__TOSI_IMPORT_RESOLVER\n if (!cfg) return\n void import('tjs-lang/import-resolver')\n .then(({ registerImportResolver }) => registerImportResolver(cfg))\n .catch((e) => console.warn('import-resolver: registration failed', e))\n}\ninitImportResolver()\n",
|
|
51
52
|
"/*#\n# editable-rect\n\n`<tosi-editable>` (`editableRect` is the `ElementCreator` and `EditableRect` is the class) is an element\nfor allowing the adjustment of another element's position and size. Simply insert it in a `position: absolute`\nor `position: fixed` element and you can directly adjust its CSS positioning, including rotation.\n\nClick on an element to adjust its position, dimensions, and rotation.\n\n```js\nimport { editableRect, icons } from 'tosijs-ui'\nimport { elements } from 'tosijs'\nconst { button } = elements\n\nfunction showTools(event) {\n event.stopPropagation()\n event.preventDefault()\n}\n\nconst editable = editableRect(button({class: 'more-popup', onClick: showTools}, icons.moreVertical()))\npreview.addEventListener('click', (event) => {\n const target = event.target\n if (['absolute', 'fixed'].includes(getComputedStyle(target).position)) {\n target.append(editable)\n } else {\n editable.remove()\n }\n})\npreview.addEventListener('change', event => console.log(event))\n```\n```html\n<div class=\"editable\" style=\"top: 20px; left: 20px; width: auto; height: auto; right: 20px; bottom: 20px;\">\n <div class=\"editable\" style=\"top: 20px; left: 20px; width: 200px; height: 150px;\">\n </div>\n <div class=\"editable\" style=\"bottom: 20px; top: 20px; width: 300px; height: auto; right: 20px;\">\n </div>\n</div>\n```\n```css\n.preview .editable {\n position: absolute;\n box-shadow: inset 0 0 0 1px #0ccc;\n background: #0cc1;\n}\n\n.preview button.more-popup {\n position: absolute;\n width: 44px;\n height: 44px;\n top: 2px;\n right: 2px;\n --text-color: black;\n background: transparent;\n box-shadow: none;\n}\n\n.previw button\n```\n\n## Snapping\n\nWhen `EditableRect.snapToGrid === true` or the shift-key is depresseed, position will snap to `EditableRect.gridSize` pixels (default = 8).\n\nSimilarly `EditableRect.snapAngle === true` or the shift-key will snap rotation to increments of `EditableRect.angleSize` degrees (default = 15).\n\n## Events\n\nAfter an element's position, size, or rotation are adjusted a `change` event is triggered on the element.\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component, elements, vars } from 'tosijs'\nimport { icons } from './icons'\nimport { trackDrag } from './track-drag'\n\nconst { div, slot } = elements\n\ninterface Locks {\n left: boolean\n right: boolean\n top: boolean\n bottom: boolean\n}\n\ntype Side = keyof Locks\n\nexport class EditableRect extends Component {\n static preferredTagName = 'tosi-editable'\n\n static initAttributes = {\n rotationSnap: 0,\n positionSnap: 0,\n }\n\n static angleSize = 15\n static gridSize = 8\n static snapAngle = false\n static snapToGrid = false\n\n static shadowStyleSpec = {\n ':host': {\n '--handle-bg': '#fff4',\n '--handle-color': '#2228',\n '--handle-hover-bg': '#8ff8',\n '--handle-hover-color': '#222',\n '--handle-size': '20px',\n '--handle-padding': '2px',\n },\n ':host ::slotted(*)': {\n position: 'absolute',\n },\n ':host > :not(style,slot)': {\n boxSizing: 'border-box',\n content: '\" \"',\n position: 'absolute',\n display: 'flex',\n height: vars.handleSize,\n width: vars.handleSize,\n padding: vars.handlePadding,\n '--text-color': vars.handleColor,\n background: vars.handleBg,\n },\n ':host > .drag-size': {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n height: 'auto',\n width: 'auto',\n background: 'transparent',\n cursor: 'ew-resize',\n },\n ':host > [part=\"rotate\"]': {\n transform: `translateY(${vars.handleSize_50})`,\n },\n ':host > [locked] > svg:first-child, :host > :not([locked]) > svg+svg': {\n display: 'none',\n },\n ':host .icon-unlock': {\n opacity: 0.5,\n },\n ':host svg': {\n pointerEvents: 'none',\n },\n ':host > *:hover': {\n '--text-color': vars.handleHoverColor,\n background: vars.handleHoverBg,\n },\n }\n\n static snappedCoords(event: PointerEvent, coords: number[]): number[] {\n const { gridSize } = EditableRect\n return EditableRect.snapToGrid || event.shiftKey\n ? coords.map((v) => Math.round(v / gridSize) * gridSize)\n : coords\n }\n\n static snappedAngle(event: PointerEvent, a: number): number {\n const { angleSize } = EditableRect\n return EditableRect.snapAngle || event.shiftKey\n ? Math.round(a / angleSize) * angleSize\n : a\n }\n\n get locked(): Locks {\n const element = this.parentElement!\n if (element.style.inset) {\n return { left: true, top: true, bottom: true, right: true }\n }\n const right = element.style.right.match(/\\d/) !== null\n const left = !right || element.style.left.match(/\\d/) !== null\n const bottom = element.style.bottom.match(/\\d/) !== null\n const top = !bottom || element.style.top.match(/\\d/) !== null\n return { left, top, bottom, right }\n }\n\n set locked(locks: Locks) {\n const { bottom, right } = locks\n let { left, top } = locks\n const element = this.parentElement!\n const l = element.offsetLeft\n const t = element.offsetTop\n const w = element.offsetWidth\n const h = element.offsetHeight\n const r = (element.offsetParent as HTMLElement).offsetWidth - l - w\n const b = (element.offsetParent as HTMLElement).offsetHeight - t - h\n Object.assign(element.style, {\n left: '',\n right: '',\n top: '',\n bottom: '',\n width: '',\n height: '',\n })\n if (!right) left = true\n if (!bottom) top = true\n if (left) element.style.left = l + 'px'\n if (right) element.style.right = r + 'px'\n if (left && right) {\n element.style.width = 'auto'\n } else {\n element.style.width = w + 'px'\n }\n if (top) element.style.top = t + 'px'\n if (bottom) element.style.bottom = b + 'px'\n if (top && bottom) {\n element.style.height = 'auto'\n } else {\n element.style.height = h + 'px'\n }\n this.queueRender()\n }\n\n get coords(): { top: number; left: number; bottom: number; right: number } {\n const { top, left, right, bottom } = this.parentElement!.style\n return {\n top: parseFloat(top),\n left: parseFloat(left),\n right: parseFloat(right),\n bottom: parseFloat(bottom),\n }\n }\n\n get left(): number {\n return this.parentElement!.offsetLeft\n }\n\n get width(): number {\n return this.parentElement!.offsetWidth\n }\n\n get right(): number {\n return (\n (this.parentElement!.offsetParent as HTMLElement).offsetWidth -\n (this.left + this.width)\n )\n }\n\n get top(): number {\n return this.parentElement!.offsetTop\n }\n\n get height(): number {\n return this.parentElement!.offsetHeight\n }\n\n get bottom(): number {\n return (\n (this.parentElement!.offsetParent as HTMLElement).offsetHeight -\n (this.top + this.height)\n )\n }\n\n triggerChange = () => {\n this.parentElement!.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n })\n )\n }\n\n adjustPosition = (event: Event) => {\n // this means there will be some positioning coordinate set!\n const { locked } = this\n this.locked = locked\n const target = this.parentElement!\n const { top, left, bottom, right } = this.coords\n trackDrag(event as PointerEvent, (dx, dy, dragEvent) => {\n ;[dx, dy] = EditableRect.snappedCoords(dragEvent, [dx, dy])\n if (!isNaN(top)) {\n target.style.top = top + dy + 'px'\n }\n if (!isNaN(bottom)) {\n target.style.bottom = bottom - dy + 'px'\n }\n if (!isNaN(left)) {\n target.style.left = left + dx + 'px'\n }\n if (!isNaN(right)) {\n target.style.right = right - dx + 'px'\n }\n if (dragEvent.type === 'mouseup') {\n this.triggerChange()\n return true\n }\n })\n }\n\n resize = (event: Event) => {\n const target = this.parentElement!\n const { locked } = this\n this.locked = Object.assign({\n left: true,\n top: true,\n right: true,\n bottom: true,\n })\n const [right, bottom] = [this.right, this.bottom]\n\n trackDrag(event as PointerEvent, (dx, dy, dragEvent) => {\n let r = right - dx\n let b = bottom - dy\n ;[r, b] = EditableRect.snappedCoords(dragEvent as PointerEvent, [r, b])\n target.style.right = r + 'px'\n target.style.bottom = b + 'px'\n if (dragEvent.type === 'mouseup') {\n this.locked = locked\n this.triggerChange()\n return true\n }\n })\n }\n\n adjustSize = (event: Event) => {\n const target = this.parentElement!\n const { locked } = this\n const dimension = (event.target as HTMLElement).getAttribute('part') as Side\n this.locked = Object.assign({\n left: true,\n right: true,\n top: true,\n bottom: true,\n })\n const original = this[dimension]\n\n trackDrag(event as PointerEvent, (dx, dy, dragEvent) => {\n const [adjusted] = EditableRect.snappedCoords(dragEvent, [\n original +\n (['left', 'right'].includes(dimension) ? dx : dy) *\n (['right', 'bottom'].includes(dimension) ? -1 : 1),\n ])\n target.style[dimension] = adjusted + 'px'\n if (dragEvent.type === 'mouseup') {\n this.locked = locked\n this.triggerChange()\n return true\n }\n })\n }\n\n get rect(): DOMRect {\n return this.parentElement!.getBoundingClientRect()\n }\n\n get center(): { x: number; y: number } {\n const rect = this.parentElement!.getBoundingClientRect()\n return {\n x: rect.x + rect.width * 0.5,\n y: rect.y + rect.height * 0.5,\n }\n }\n\n get element(): HTMLElement {\n return this.parentElement as HTMLElement\n }\n\n adjustRotation = (event: Event) => {\n const { center } = this\n const { transformOrigin } = this.element.style\n if (!transformOrigin) {\n this.element.style.transformOrigin = '50% 50%'\n }\n trackDrag(event as PointerEvent, (_dx, _dy, dragEvent: PointerEvent) => {\n const { clientX, clientY } = dragEvent\n const x = clientX - center.x\n const y = clientY - center.y\n let alpha = y > 0 ? 90 : -90\n if (x !== 0) {\n alpha = (Math.atan2(y, x) * 180) / Math.PI\n }\n alpha = EditableRect.snappedAngle(dragEvent, alpha)\n if (alpha === 0) {\n this.element.style.transformOrigin = ''\n this.element.style.transform = ''\n } else {\n this.element.style.transform = `rotate(${alpha}deg)`\n }\n this.triggerChange()\n return dragEvent.type === 'mouseup'\n })\n }\n\n toggleLock = (event: Event) => {\n const { locked } = this\n const which = (event.target as HTMLElement).title.split(' ')[1] as Side\n locked[which] = !locked[which]\n this.locked = locked\n this.queueRender()\n event.stopPropagation()\n event.preventDefault()\n }\n\n content = () => [\n div(\n {\n part: 'move',\n style: { top: '50%', left: '50%', transform: 'translate(-50%,-50%)' },\n },\n icons.move()\n ),\n div({\n part: 'left',\n title: 'resize left',\n class: 'drag-size',\n style: { left: '-6px', width: '8px' },\n }),\n div({\n part: 'right',\n title: 'resize right',\n class: 'drag-size',\n style: { left: 'calc(100% - 2px)', width: '8px' },\n }),\n div({\n part: 'top',\n title: 'resize top',\n class: 'drag-size',\n style: { top: '-6px', height: '8px', cursor: 'ns-resize' },\n }),\n div({\n part: 'bottom',\n title: 'resize bottom',\n class: 'drag-size',\n style: { top: 'calc(100% - 2px)', height: '8px', cursor: 'ns-resize' },\n }),\n div(\n {\n part: 'resize',\n style: { top: '100%', left: '100%' },\n },\n icons.resize()\n ),\n div(\n {\n part: 'rotate',\n style: { top: '50%', right: '0' },\n },\n icons.refreshCw()\n ),\n div(\n {\n part: 'lockLeft',\n title: 'lock left',\n style: { top: '50%', left: 0, transform: 'translate(-100%, -50%)' },\n },\n icons.unlock(),\n icons.lock()\n ),\n div(\n {\n part: 'lockRight',\n title: 'lock right',\n style: { top: '50%', left: '100%', transform: 'translate(0%, -50%)' },\n },\n icons.unlock(),\n icons.lock()\n ),\n div(\n {\n part: 'lockTop',\n title: 'lock top',\n style: { top: 0, left: '50%', transform: 'translate(-50%, -100%)' },\n },\n icons.unlock(),\n icons.lock()\n ),\n div(\n {\n part: 'lockBottom',\n title: 'lock bottom',\n style: { top: '100%', left: '50%', transform: 'translate(-50%, 0%)' },\n },\n icons.unlock(),\n icons.lock()\n ),\n slot(),\n ]\n\n connectedCallback(): void {\n super.connectedCallback()\n\n const {\n left,\n right,\n top,\n bottom,\n lockLeft,\n lockRight,\n lockTop,\n lockBottom,\n move,\n resize,\n rotate,\n } = this.parts\n\n const PASSIVE = { passive: true }\n ;[left, right, top, bottom].forEach((elt) => {\n elt.addEventListener('mousedown', this.adjustSize, PASSIVE)\n elt.addEventListener('touchstart', this.adjustSize, PASSIVE)\n })\n ;[lockLeft, lockRight, lockTop, lockBottom].forEach((elt) => {\n elt.addEventListener('click', this.toggleLock)\n })\n resize.addEventListener('mousedown', this.resize, PASSIVE)\n move.addEventListener('mousedown', this.adjustPosition, PASSIVE)\n rotate.addEventListener('mousedown', this.adjustRotation, PASSIVE)\n resize.addEventListener('touchstart', this.resize, PASSIVE)\n move.addEventListener('touchstart', this.adjustPosition, PASSIVE)\n rotate.addEventListener('touchstart', this.adjustRotation, PASSIVE)\n }\n\n render() {\n super.render()\n\n if (!this.parentElement) {\n return\n }\n\n const { lockLeft, lockRight, lockTop, lockBottom } = this.parts\n const { left, right, top, bottom } = this.locked\n\n lockLeft.toggleAttribute('locked', left)\n lockRight.toggleAttribute('locked', right)\n lockTop.toggleAttribute('locked', top)\n lockBottom.toggleAttribute('locked', bottom)\n }\n}\n\nexport const editableRect = EditableRect.elementCreator()\n",
|
|
52
53
|
"/*#\n# filter\n\nAutomatically creates `ArrayFilter` functions `(a: any[]) => any[]` based on the query you build using its\nmacOS Finder-inspired interface, using an easily customizable / extensible collection of `Filter` objects.\n\n```js\nimport { elements } from 'tosijs'\nimport { tosiTable, filterBuilder, availableFilters } from 'tosijs-ui'\n\nconst sourceWords = ['acorn', 'bubblegum', 'copper', 'daisy', 'ellipse', 'fabulous', 'gerund', 'hopscotch', 'idiom', 'joke']\nfunction randomWords () {\n let numWords = Math.random() * 4\n const words = []\n while (numWords > 0) {\n numWords -= 1\n words.push(sourceWords[Math.floor(Math.random() * 10)])\n }\n return [...new Set(words)]\n}\n\nconst array = []\nfor(let i = 0; i < 1000; i++) {\n array.push({\n date: new Date(Math.random() * Date.now()).toISOString().split('T')[0],\n isLucky: Math.random() < 0.1,\n number: Math.floor(Math.random() * 200 - 100),\n string: randomWords().join(' '),\n tags: randomWords()\n })\n}\n\nconst { span } = elements\nconst tagsBinding = {\n value: '^.tags',\n binding: {\n toDOM(element, value) {\n element.classList.add('tag-list')\n element.textContent = ''\n element.append(...value.map(tag => span(tag, {class: 'tag'})))\n }\n }\n}\n\nconst columns = [\n {\n prop: 'date',\n width: 120\n },\n {\n prop: 'isLucky',\n type: 'boolean',\n width: 90\n },\n {\n prop: 'number',\n align: 'right',\n width: 90\n },\n {\n prop: 'string',\n width: 200\n },\n {\n prop: 'tags',\n width: 200,\n dataCell() {\n return elements.div({ bind: tagsBinding })\n }\n },\n]\n\nconst table = tosiTable({ array, columns })\nconst filter = filterBuilder({\n fields: columns,\n onChange(event) {\n table.filter = filter.filter\n }\n})\npreview.append(filter, table)\n```\n```css\n.preview {\n display: flex;\n flex-direction: column;\n}\n\n.preview tosi-table {\n flex: 1 1 auto;\n}\n\n.preview .tag-list {\n display: flex;\n font-size: 80%;\n align-items: center;\n gap: 2px;\n}\n\n.preview .tag {\n display: inline-block;\n border-radius: 4px;\n padding: 0 5px;\n line-height: 20px;\n height: 20px;\n color: var(--brand-text-color);\n background: var(--brand-color);\n}\n```\n\n## serialization\n\nThe current state of a `<tosi-filter>` can be serialized as, and restored from, a Javascript object (which itself\ncan easily be converted into JSON or a URL component) via its `state` property. Obviously, a `<tosi-filter>` can\nonly restore state if it has the necessary constituent `filters`.\n\n## availableFilters\n\n`<tosi-filter>` has a default set of `FilterMaker` objects which it uses to construct filter function.\nIn the example above, the default collection of filters is reduced to `contains`, `equals`, `after`, and `isTrue`.\n\nThe full collection includes:\n\n- **contains** * looks for fields containing a string (ignoring case)\n- **equals** * looks for fields containing equivalent values (ignoring case)\n- **after** * looks for fields with a date after a provided value\n- **greaterThan** * looks for fields with a value greater than a provided value\n- **truthy** * looks for fields that are true / non-zero / non-empty\n- **true** looks for fields that are `true`\n- **false** looks for fields that are `false`\n- **hasTags** looks for fields that are arrays containing all the (space/comma) delimited strings\n- **doesNotHaveTags** looks for fields that are arrays containing *none* of the strings\n\n**Note**: the filters marked with an * have negative version (e.g. does not contain).\n\n```\ntype ObjectTest (obj: any) => boolean\n\ninterface FilterMaker {\n caption: string // describes the test condition\n negative?: string // describes the negative test condition\n needsValue?: boolean // if false, the filterMaker doesn't need a needle value\n filterMaker(needle: any) => ObjectTest // builds an ObjectTest\n}\n```\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component as WebComponent,\n ElementCreator,\n elements,\n PartsMap,\n} from 'tosijs'\nimport { icons } from './icons'\nimport { tosiSelect, TosiSelect, SelectOption } from './select'\n\nconst { div, input, button, span } = elements\n\ntype ObjectTest = (obj: any) => boolean\ntype ArrayFilter = (array: any[]) => any[]\n\nconst passThru = (array: any[]) => array\nconst NULL_FILTER_DESCRIPTION = 'null filter, everything matches'\n\ninterface FilterMaker {\n caption: string\n negative?: string\n needsValue?: boolean // default true\n makeTest: (value: any) => ObjectTest\n}\n\nexport const availableFilters: { [key: string]: FilterMaker } = {\n contains: {\n caption: 'contains',\n negative: 'does not contain',\n makeTest: (value: string) => {\n value = value.toLocaleLowerCase()\n return (obj: any) => String(obj).toLocaleLowerCase().includes(value)\n },\n },\n hasTags: {\n caption: 'has tags',\n makeTest: (value: string) => {\n const tags = value\n .split(/[\\s,]/)\n .map((tag) => tag.trim().toLocaleLowerCase())\n .filter((tag) => tag !== '')\n return (obj: any) =>\n Array.isArray(obj) &&\n tags.find((tag) => !obj.includes(tag)) === undefined\n },\n },\n doesNotHaveTags: {\n caption: 'does not have tags',\n makeTest: (value: string) => {\n const tags = value\n .split(/[\\s,]/)\n .map((tag) => tag.trim().toLocaleLowerCase())\n .filter((tag) => tag !== '')\n return (obj: any) =>\n Array.isArray(obj) &&\n tags.find((tag) => obj.includes(tag)) === undefined\n },\n },\n equals: {\n caption: '=',\n negative: '≠',\n makeTest: (value: string) => {\n if (isNaN(Number(value))) {\n value = String(value).toLocaleLowerCase()\n return (obj: any) => String(obj).toLocaleLowerCase() === value\n }\n const num = Number(value)\n return (obj: any) => Number(obj) === num\n },\n },\n after: {\n caption: 'is after',\n negative: 'is before',\n makeTest: (value: any) => {\n const date = new Date(value)\n return (obj: any) => new Date(obj) > date\n },\n },\n greaterThan: {\n caption: '>',\n negative: '≤',\n makeTest: (value: any) => {\n if (!isNaN(Number(value))) {\n const num = Number(value)\n return (obj: any) => Number(obj) > num\n }\n value = value.toLocaleLowerCase()\n return (obj: any) => String(obj).toLocaleLowerCase() > value\n },\n },\n truthy: {\n caption: 'is true/non-empty/non-zero',\n negative: 'is false/empty/zero',\n needsValue: false,\n makeTest: () => (obj: any) => !!obj,\n },\n isTrue: {\n caption: '= true',\n needsValue: false,\n makeTest: () => (obj: any) => obj === true,\n },\n isFalse: {\n caption: '= false',\n needsValue: false,\n makeTest: () => (obj: any) => obj === false,\n },\n}\n\ninterface Filter {\n description: string\n test: ObjectTest\n}\n\nconst passAnything = {\n description: 'anything',\n test: () => true,\n}\n\nfunction getSelectText(select: TosiSelect): string {\n return (select.options[select.selectedIndex] as SelectOption)?.caption || ''\n}\n\ntype Fields = Array<{ name?: string; prop: string }>\n\nexport interface FilterPartState {\n haystack: string\n condition: string\n needle: string\n}\n\ninterface FilterPartParts extends PartsMap {\n haystack: TosiSelect\n condition: TosiSelect\n needle: HTMLInputElement\n remove: HTMLButtonElement\n}\n\nexport class FilterPart extends WebComponent<FilterPartParts> {\n static preferredTagName = 'tosi-filter-part'\n\n static lightStyleSpec = {\n ':host': {\n display: 'flex',\n },\n\n ':host .tosi-icon:': {\n verticalAlign: 'middle',\n pointerEvents: 'none',\n },\n\n ':host [part=\"haystack\"], :host [part=\"condition\"]': {\n flex: '1',\n },\n\n ':host [part=\"needle\"]': {\n flex: 2,\n },\n\n ':host [hidden]+[part=\"padding\"]': {\n display: 'block',\n content: ' ',\n flex: '1 1 auto',\n },\n }\n\n static initAttributes = {\n haystack: '*',\n condition: 'contains',\n needle: '',\n }\n\n fields: Fields = []\n filters = availableFilters\n\n content = () => [\n tosiSelect({ part: 'haystack' }),\n tosiSelect({ part: 'condition' }),\n input({ part: 'needle', type: 'search' }),\n span({ part: 'padding' }),\n button({ part: 'remove', title: 'delete' }, icons.trash()),\n ]\n\n filter: Filter = passAnything\n\n get state(): FilterPartState {\n const { haystack, needle, condition } = this.parts\n return {\n haystack: haystack.value,\n needle: needle.value,\n condition: condition.value,\n }\n }\n\n set state(newState: FilterPartState) {\n Object.assign(this, newState)\n }\n\n buildFilter = (/* event: Event */) => {\n const { haystack, condition, needle } = this.parts\n\n const negative = condition.value.startsWith('~')\n const key = negative ? condition.value.slice(1) : condition.value\n const filter = this.filters[key] as FilterMaker\n needle.hidden = filter.needsValue === false\n\n const baseTest =\n filter.needsValue === false\n ? filter.makeTest(undefined)\n : filter.makeTest(needle.value)\n const field = haystack.value\n let test\n\n if (field !== '*') {\n test = negative\n ? (obj: any) => !baseTest(obj[field])\n : (obj: any) => baseTest(obj[field])\n } else {\n test = negative\n ? (obj: any) =>\n Object.values(obj).find((v) => !baseTest(v)) !== undefined\n : (obj: any) =>\n Object.values(obj).find((v) => baseTest(v)) !== undefined\n }\n\n const matchValue = filter.needsValue !== false ? ` \"${needle.value}\"` : ''\n const description = `${getSelectText(haystack)} ${getSelectText(\n condition\n )}${matchValue}`\n\n this.filter = {\n description,\n test,\n }\n\n this.parentElement?.dispatchEvent(new Event('change'))\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n const { haystack, condition, needle, remove } = this.parts\n\n haystack.addEventListener('change', this.buildFilter)\n condition.addEventListener('change', this.buildFilter)\n needle.addEventListener('input', this.buildFilter)\n haystack.value = this.haystack\n condition.value = this.condition\n needle.value = this.needle\n\n remove.addEventListener('click', () => {\n const { parentElement } = this\n this.remove()\n parentElement?.dispatchEvent(new Event('change'))\n })\n }\n\n render() {\n super.render()\n\n const { haystack, condition, needle } = this.parts\n\n haystack.options = [\n {\n caption: 'any field',\n value: '*',\n },\n ...this.fields.map((field) => field.prop),\n ]\n\n condition.options = Object.keys(this.filters)\n .map((key) => {\n const filter = this.filters[key]\n return filter.negative !== undefined\n ? [\n { caption: filter.caption, value: key },\n { caption: filter.negative, value: '~' + key },\n ]\n : { caption: filter.caption, value: key }\n })\n .flat() as SelectOption[]\n\n if (this.haystack !== '') {\n haystack.value = this.haystack\n }\n if (this.condition !== '') {\n condition.value = this.condition\n }\n if (this.needle !== '') {\n needle.value = this.needle\n }\n this.buildFilter()\n }\n}\n\nexport const filterPart =\n FilterPart.elementCreator() as ElementCreator<FilterPart>\n\nexport type FilterState = FilterPartState[]\n\nexport interface FilterBuilderParts extends PartsMap {\n add: HTMLButtonElement\n resent: HTMLButtonElement\n}\n\nexport class FilterBuilder extends WebComponent<FilterBuilderParts> {\n static preferredTagName = 'tosi-filter'\n\n static lightStyleSpec = {\n ':host': {\n height: 'auto',\n display: 'grid',\n gridTemplateColumns: '32px calc(100% - 64px) 32px',\n alignItems: 'center',\n },\n\n ':host [part=\"filterContainer\"]': {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n flex: '1 1 auto',\n },\n\n ':host [part=\"haystack\"]': {\n _fieldWidth: '100px',\n },\n\n ':host [part=\"condition\"]': {\n _fieldWidth: '60px',\n },\n\n ':host [part=\"needle\"]': {\n _fieldWidth: '80px',\n },\n\n ':host [part=\"add\"], :host [part=\"reset\"]': {\n '--button-size': 'var(--touch-size, 32px)',\n borderRadius: '999px',\n height: 'var(--button-size)',\n lineHeight: 'var(--button-size)',\n margin: '0',\n padding: '0',\n textAlign: 'center',\n width: 'var(--button-size)',\n flex: '0 0 var(--button-size)',\n },\n }\n\n private _fields: Fields = []\n\n get fields(): Fields {\n return this._fields\n }\n\n set fields(_fields: Fields) {\n this._fields = _fields\n this.queueRender()\n }\n\n get state(): FilterState {\n const { filterContainer } = this.parts\n return ([...filterContainer.children] as FilterPart[]).map(\n (part) => part.state\n )\n }\n\n set state(parts: FilterState) {\n const { fields, filters } = this\n const { filterContainer } = this.parts\n filterContainer.textContent = ''\n for (const state of parts) {\n filterContainer.append(filterPart({ fields, filters, ...state }))\n }\n }\n\n filter: ArrayFilter = passThru\n description = NULL_FILTER_DESCRIPTION\n\n addFilter = () => {\n const { fields, filters } = this\n const { filterContainer } = this.parts\n filterContainer.append(filterPart({ fields, filters }))\n }\n\n content = () => [\n button(\n {\n part: 'add',\n title: 'add filter condition',\n onClick: this.addFilter,\n class: 'round',\n },\n icons.plus()\n ),\n div({ part: 'filterContainer' }),\n button(\n { part: 'reset', title: 'reset filter', onClick: this.reset },\n icons.x()\n ),\n ]\n\n filters = availableFilters\n\n reset = () => {\n const { fields, filters } = this\n const { filterContainer } = this.parts\n this.description = NULL_FILTER_DESCRIPTION\n this.filter = passThru\n filterContainer.textContent = ''\n filterContainer.append(filterPart({ fields, filters }))\n this.dispatchEvent(new Event('change'))\n }\n\n buildFilter = (/* event: Event */) => {\n const { filterContainer } = this.parts\n if (filterContainer.children.length === 0) {\n this.reset()\n return\n }\n const filters = ([...filterContainer.children] as FilterPart[]).map(\n (filterPart) => filterPart.filter\n ) as Filter[]\n const tests = filters.map((filter) => filter.test) as ObjectTest[]\n this.description = filters.map((filter) => filter.description).join(', ')\n this.filter = (array: any[]) =>\n array.filter(\n (obj: any) => tests.find((f) => f(obj) === false) === undefined\n )\n this.dispatchEvent(new Event('change'))\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n const { filterContainer } = this.parts\n filterContainer.addEventListener('change', this.buildFilter)\n\n this.reset()\n }\n\n render() {\n super.render()\n }\n}\n\nexport const filterBuilder =\n FilterBuilder.elementCreator() as ElementCreator<FilterBuilder>\n",
|
|
53
54
|
"/*#\n# header\n\nA simple flex header. Compose it with `elastic()` and `spacer()` from\n`layout` to arrange content however you like.\n\n## Basic Header\n\n```html\n<tosi-header>\n <h2 class=\"header-part\">My App</h2>\n</tosi-header>\n```\n```css\n.header-part {\n color: white;\n margin: 0;\n line-height: 32px;\n}\n```\n\n## Header with Menu\n\nUse `elastic()` to push the menu to the right:\n\n```js\nimport { elements } from 'tosijs'\nimport { tosiHeader, tosiMenu, elastic, icons } from 'tosijs-ui'\n\nconst menu = tosiMenu({ class: 'menu-demo' }, icons.moreVertical())\nmenu.menuItems = [\n { caption: 'About', tooltip: 'Learn more about this app', action() { alert('About!') } },\n { caption: 'Settings', icon: 'settings', tooltip: 'Appearance options', menuItems: [\n { caption: 'Dark Mode' },\n { caption: 'High Contrast' },\n ]},\n]\n\npreview.append(\n tosiHeader(\n { class: 'menu-demo' },\n elements.h2({ class: 'menu-demo' }, 'Demo'),\n elastic(),\n menu,\n )\n)\n```\n```css\n.menu-demo * {\n color: white;\n margin: 0;\n --text-color: white;\n --button-bg: transparent;\n}\n.menu-demo button:hover {\n background: #fff4;\n}\n```\n\n## Header with Links\n\nUse `elastic()` to push `<tosi-header-links>` to the right:\n\n```js\nimport { elements } from 'tosijs'\nimport { tosiHeader, tosiHeaderLinks, elastic } from 'tosijs-ui'\n\npreview.append(\n tosiHeader(\n { class: 'links-demo' },\n elements.h2({ class: 'links-demo' }, 'My Project'),\n elastic(),\n tosiHeaderLinks({\n links: {\n github: 'https://github.com/example/project',\n npm: 'https://www.npmjs.com/package/example',\n discord: 'https://discord.gg/example',\n },\n })\n )\n)\n```\n```css\n.links-demo {\n color: white;\n margin: 0;\n}\n```\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component, ElementCreator, elements, varDefault } from 'tosijs'\n\nimport { icons } from './icons'\n\nconst { a } = elements\n\n// ============================================================================\n// Header Component\n// ============================================================================\n\nexport class TosiHeader extends Component {\n static preferredTagName = 'tosi-header'\n\n static shadowStyleSpec = {\n ':host': {\n display: 'flex',\n alignItems: 'center',\n padding: varDefault.tosiHeaderPadding('12px 24px'),\n background: varDefault.tosiHeaderBg('var(--tosi-accent, #EE257B)'),\n lineHeight: varDefault.tosiHeaderLineHeight('32px'),\n gap: varDefault.tosiHeaderGap('8px'),\n },\n '::slotted(*)': {\n display: 'inline-flex',\n alignItems: 'center',\n },\n }\n\n content = ({ slot }: typeof elements) => [slot()]\n}\n\nexport const tosiHeader =\n TosiHeader.elementCreator() as ElementCreator<TosiHeader>\n\n// ============================================================================\n// Header Links Component\n// ============================================================================\n\nexport interface HeaderLinks {\n github?: string\n npm?: string\n discord?: string\n blog?: string\n tosijs?: string\n [key: string]: string | undefined\n}\n\nconst linkIcons: Record<string, () => Element> = {\n tosijs: () => icons.tosi(),\n discord: () => icons.discord(),\n blog: () => icons.blog(),\n github: () => icons.github(),\n npm: () => icons.npm(),\n}\n\nexport class TosiHeaderLinks extends Component {\n static preferredTagName = 'tosi-header-links'\n\n static lightStyleSpec = {\n ':host': {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n },\n ':host a': {\n color: 'inherit',\n textDecoration: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px',\n opacity: '0.8',\n cursor: 'pointer',\n },\n ':host a:hover': {\n opacity: '1',\n },\n }\n\n links: HeaderLinks = {}\n\n content = null\n\n render(): void {\n super.render()\n const fragment: HTMLElement[] = []\n for (const [key, url] of Object.entries(this.links)) {\n if (!url || !linkIcons[key]) continue\n fragment.push(\n a({ title: key, target: '_blank', href: url }, linkIcons[key]())\n )\n }\n this.replaceChildren(...fragment)\n }\n}\n\nexport const tosiHeaderLinks =\n TosiHeaderLinks.elementCreator() as ElementCreator<TosiHeaderLinks>\n",
|
|
@@ -62,15 +63,15 @@
|
|
|
62
63
|
"/*#\n# rating\n\n`TosiRating` / `<tosi-rating>` provides a drop-in replacement for an `<input>`\nthat renders a rating using icons.\n\n```js\nconst { tosiRating } = tosijsui\npreview.append(\n tosiRating({ value: 3.4 }),\n tosiRating({ min: 0, value: 3.4, step: 0.5, hollow: true }),\n tosiRating({ value: 3.4, ratingFill: 'deepskyblue', ratingStroke: 'deepskyblue' }),\n tosiRating({ value: 3.1, max: 10, ratingFill: 'hotpink', ratingStroke: 'hotpink', icon: 'heart', iconSize: 32 }),\n tosiRating({ class: 'color', value: 3.1, max: 5, icon: 'tosiPlatform', iconSize: 32 }),\n)\n```\n```test\nconst rating = preview.querySelector('tosi-rating')\ntest('rating renders', () => {\n expect(rating).toBeTruthy()\n expect(rating.tagName.toLowerCase()).toBe('tosi-rating')\n})\ntest('rating has correct value', () => {\n expect(rating.value).toBe(3.4)\n})\ntest('rating has correct max', () => {\n expect(rating.max).toBe(5)\n})\n```\n```css\n.preview {\n display: flex;\n flex-direction: column;\n}\n\n.preview .color::part(empty) {\n filter: grayscale(1);\n opacity: 0.25;\n}\n```\n\n## Attributes\n\n- `icon-size` (24 by default) determines the height of the control and along with `max` its width\n- `max` maximum rating\n- `min` (1 by default) can be 0 or 1 (allowing ratings of 0 to max or 1 to max)\n- `step` (0.5 by default) granularity of rating\n- `icon` ('star' by default) determines the icon used\n- `rating-stroke` (#e81 by default) is the stroke of the filled (active) icons\n- `rating-fill` (#f91 by default) is the fill of the filled (active) icons\n- `empty-stroke` (#ccc by default) is the stroke of the empty icons\n- `empty-fill` (#ccc by default) is the fill of the empty icons (ignored when `hollow`)\n- `readonly` (false by default) prevents the user from changing the rating\n- `hollow` (false by default) makes the empty rating icons hollow (outline only).\n- `required` (false by default) marks the field as required for form validation\n- `name` the form field name (for formAssociated support)\n\n## Form Integration\n\n`<tosi-rating>` is form-associated, meaning it works directly in native `<form>` elements:\n\n```html\n<form>\n <tosi-rating name=\"rating\" required></tosi-rating>\n <button type=\"submit\">Submit</button>\n</form>\n```\n\n## Keyboard\n\n`<tosi-rating>` should be fully keyboard navigable (and, I hope, accessible).\n\nThe up key increases the rating, down descreases it. This is the same\nas the behavior of `<input type=\"number\">`, [Shoelace's rating widget](https://shoelace.style/components/rating/),\nand (in my opinion) common sense, but not like [MUI's rating widget](https://mui.com/material-ui/react-rating/).\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component,\n elements,\n ElementCreator,\n PartsMap,\n deprecated,\n} from 'tosijs'\nimport { icons } from './icons'\n\nconst { span } = elements\n\ninterface RatingParts extends PartsMap {\n empty: HTMLElement\n filled: HTMLElement\n container: HTMLElement\n}\n\nexport class TosiRating extends Component {\n static preferredTagName = 'tosi-rating'\n static formAssociated = true\n\n static initAttributes = {\n max: 5,\n min: 1 as 0 | 1,\n icon: 'star',\n step: 1,\n ratingStroke: '#e81',\n ratingFill: '#f91',\n emptyStroke: '#ccc',\n emptyFill: '#ccc',\n readonly: false,\n iconSize: 24,\n hollow: false,\n required: false,\n name: '',\n }\n\n value: number | string = ''\n\n // Form-associated lifecycle callbacks\n formDisabledCallback(disabled: boolean) {\n this.readonly = disabled\n }\n\n formResetCallback() {\n this.value = ''\n }\n\n static shadowStyleSpec = {\n ':host': {\n display: 'inline-block',\n position: 'relative',\n width: 'fit-content',\n },\n ':host::part(container)': {\n position: 'relative',\n display: 'inline-block',\n },\n ':host::part(empty), :host::part(filled)': {\n height: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n },\n ':host::part(empty)': {\n pointerEvents: 'none',\n },\n ':host::part(filled)': {\n position: 'absolute',\n left: 0,\n transition: 'width 0.15s ease-out',\n },\n ':host svg': {\n transform: 'scale(0.9)',\n pointerEvents: 'all !important',\n transition: '0.25s ease-in-out',\n },\n ':host svg:hover': {\n transform: 'scale(1)',\n },\n ':host svg:active': {\n transform: 'scale(1.1)',\n },\n }\n\n content = () =>\n span(\n { part: 'container' },\n span({ part: 'empty' }),\n span({ part: 'filled' })\n )\n\n displayValue(value: number | string) {\n const { empty, filled } = this.parts as RatingParts\n const numValue = typeof value === 'string' ? 0 : value || 0\n const roundedValue = Math.round(numValue / this.step) * this.step\n filled.style.width = (roundedValue / this.max) * empty.offsetWidth + 'px'\n }\n\n update = (event: Event) => {\n if (this.readonly) {\n return\n }\n\n const { empty } = this.parts as RatingParts\n\n const x =\n event instanceof MouseEvent\n ? event.pageX - empty.getBoundingClientRect().x\n : 0\n const value = Math.min(\n Math.max(\n this.min,\n Math.round(\n ((x / empty.offsetWidth) * this.max) / this.step + this.step * 0.5\n ) * this.step\n ),\n this.max\n )\n if (event.type === 'click') {\n this.value = value\n } else if (event.type === 'mousemove') {\n this.displayValue(value)\n } else {\n this.displayValue(this.value || 0)\n }\n }\n\n handleKey = (event: KeyboardEvent) => {\n let value = this.value === '' ? NaN : Number(this.value)\n if (isNaN(value)) {\n value = Math.round((this.min + this.max) * 0.5 * this.step) * this.step\n }\n let blockEvent = false\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowRight':\n value += this.step\n blockEvent = true\n break\n case 'ArrowDown':\n case 'ArrowLeft':\n value -= this.step\n blockEvent = true\n break\n }\n this.value = Math.max(Math.min(value, this.max), this.min)\n if (blockEvent) {\n event.stopPropagation()\n event.preventDefault()\n }\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n const { container } = this.parts as RatingParts\n\n container.tabIndex = 0\n container.addEventListener('mousemove', this.update, true)\n container.addEventListener('mouseleave', this.update)\n container.addEventListener('blur', this.update)\n container.addEventListener('click', this.update)\n\n container.addEventListener('keydown', this.handleKey)\n }\n\n private _renderedIcon = ''\n\n render() {\n super.render()\n\n const height = this.iconSize + 'px'\n this.style.setProperty('--tosi-icon-size', height)\n\n if (this.readonly) {\n this.role = 'image'\n } else {\n this.role = 'slider'\n }\n this.ariaLabel = `rating ${this.value} out of ${this.max}`\n this.ariaValueMax = String(this.max)\n this.ariaValueMin = String(this.min)\n this.ariaValueNow = this.value === '' ? String(-1) : String(this.value)\n\n const { empty, filled } = this.parts as RatingParts\n\n // Icons are single fill+stroke SVGs now: empty stars are gray (outlined when\n // `hollow`, solid otherwise), active stars are solid. Colors cascade to the\n // SVGs via these CSS variables.\n empty.style.setProperty(\n '--tosi-icon-fill',\n this.hollow ? 'none' : this.emptyFill\n )\n empty.style.setProperty('--tosi-icon-stroke', this.emptyStroke)\n filled.style.setProperty('--tosi-icon-fill', this.ratingFill)\n filled.style.setProperty('--tosi-icon-stroke', this.ratingStroke)\n\n if (this._renderedIcon !== this.icon) {\n this._renderedIcon = this.icon\n for (let i = 0; i < this.max; i++) {\n empty.append(icons[this.icon]())\n filled.append(icons[this.icon]())\n }\n }\n\n this.displayValue(this.value)\n }\n}\n\n/** @deprecated Use TosiRating instead */\nexport type XinRating = TosiRating\n/** @deprecated Use TosiRating instead */\nexport const XinRating: typeof TosiRating = TosiRating\n\nexport const tosiRating =\n TosiRating.elementCreator() as ElementCreator<TosiRating>\n\n/** @deprecated Use tosiRating instead (tag is now tosi-rating) */\nexport const xinRating = deprecated(\n (...args: Parameters<typeof tosiRating>) => tosiRating(...args),\n 'xinRating is deprecated, use tosiRating instead (tag is now <tosi-rating>)'\n) as ElementCreator<TosiRating>\n",
|
|
63
64
|
"/*#\n# rich text\n\n`<tosi-rich-text>` is a simple and easily extensible `document.execCommand` WYSIWYG editor with some conveniences.\nThe class name is `RichText` and the ElementCreator is `tosiRichText`.\n\n### `default` widgets\n\n```html\n<tosi-rich-text>\n<h3>Heading</h3>\n<p>And some <b>text</b></p>\n</tosi-rich-text>\n```\n```css\ntosi-rich-text {\n background: white;\n}\n\ntosi-rich-text [part=\"toolbar\"] {\n background: #f8f8f8;\n}\n\ntosi-rich-text [part=\"doc\"] {\n padding: 20px;\n}\n```\n\n### `minimal` widgets\n\n```html\n<tosi-rich-text widgets=\"minimal\">\n<h3>Heading</h3>\n<p>And some <b>text</b></p>\n</tosi-rich-text>\n```\n```css\ntosi-rich-text {\n background: white;\n}\n\ntosi-rich-text [part=\"toolbar\"] {\n background: #f8f8f8;\n}\n\ntosi-rich-text [part=\"doc\"] {\n padding: 20px;\n}\n```\n\nBy default, `<tosi-rich-text>` treats its initial contents as its document, but you can also set (and get)\nits `value`.\n\n## toolbar\n\n`<tosi-rich-text>` elements have a `toolbar` slot (actually a tosi-slot because it doesn't use\nthe shadowDOM).\n\nIf you set the `widgets` attribute to `default` or `minimal` you will get a toolbar\nfor free. Or you can add your own custom widgets.\n\n## helper functions\n\nA number of helper functions are available, including:\n\n- `commandButton(title: string, command: string, iconClass: string)`\n- `blockStyle(options: Array<{caption: string, tagType: string}>)`\n- `spacer(width = '10px')`\n- `elastic(width = '10px')`\n\nThese each create a toolbar widget. A `blockStyle`-generated `<select>` element will\nautomatically have its value changed based on the current selection.\n\n## properties\n\nA `<tosi-rich-text>` element also has `selectedText` and `selectedBlocks` properties, allowing\nyou to easily perform operations on text selections, and a `selectionChange` callback (which\nsimply passes through document `selectionchange` events, but also passes a reference to\nthe `<tosi-rich-text>` component).\n\n## Form Integration\n\n`<tosi-rich-text>` is form-associated, making it work directly in native forms:\n\n```html\n<form class=\"richtext-form\">\n <label>\n <b>Compose message (required):</b>\n <tosi-rich-text name=\"content\" widgets=\"minimal\" required style=\"height: 150px\">\n </tosi-rich-text>\n </label>\n <button type=\"submit\">Submit</button>\n <button type=\"reset\">Reset</button>\n <pre class=\"output\" style=\"max-height: 100px; overflow: auto\"></pre>\n</form>\n```\n```css\n.preview .richtext-form {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n.preview .richtext-form label {\n display: flex;\n flex-direction: column;\n gap: 5px;\n}\n.preview tosi-rich-text {\n background: white;\n}\n.preview tosi-rich-text [part=\"toolbar\"] {\n background: #f8f8f8;\n}\n```\n```js\nconst form = preview.querySelector('.richtext-form')\nform.addEventListener('submit', (e) => {\n e.preventDefault()\n const data = new FormData(form)\n form.querySelector('.output').textContent = 'Content: ' + data.get('content')\n})\n```\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component as WebComponent,\n ElementCreator,\n PartsMap,\n elements,\n deprecated,\n XinStyleSheet,\n} from 'tosijs'\nimport { icons } from './icons'\n\nimport { tosiSelect, TosiSelect } from './select'\nimport { spacer as layoutSpacer } from './layout'\n\nconst { tosiSlot, div, button } = elements\n\nconst blockStyles = [\n {\n caption: 'Title',\n tagType: 'H1',\n },\n {\n caption: 'Heading',\n tagType: 'H2',\n },\n {\n caption: 'Subheading',\n tagType: 'H3',\n },\n {\n caption: 'Minor heading',\n tagType: 'H4',\n },\n {\n caption: 'Body',\n tagType: 'P',\n },\n {\n caption: 'Code Block',\n tagType: 'PRE',\n },\n]\n\nexport function blockStyle(options = blockStyles) {\n return tosiSelect({\n title: 'paragraph style',\n slot: 'toolbar',\n class: 'block-style',\n options: options.map(({ caption, tagType }) => ({\n caption,\n value: `formatBlock,${tagType}`,\n })),\n })\n}\n\nconst spacer = () => layoutSpacer({ slot: 'toolbar' })\n\nexport function commandButton(\n title: string,\n dataCommand: string,\n icon: SVGElement\n) {\n return button({ slot: 'toolbar', dataCommand, title }, icon)\n}\n\nconst paragraphStyleWidgets = () => [\n commandButton('left-justify', 'justifyLeft', icons.alignLeft()),\n commandButton('center', 'justifyCenter', icons.alignCenter()),\n commandButton('right-justify', 'justifyRight', icons.alignRight()),\n spacer(),\n commandButton('bullet list', 'insertUnorderedList', icons.listBullet()),\n commandButton('numbered list', 'insertOrderedList', icons.listNumber()),\n spacer(),\n commandButton('indent', 'indent', icons.indent()),\n commandButton('indent', 'outdent', icons.outdent()),\n]\n\nconst characterStyleWidgets = () => [\n commandButton('bold', 'bold', icons.fontBold()),\n commandButton('italic', 'italic', icons.fontItalic()),\n commandButton('underline', 'underline', icons.fontUnderline()),\n]\n\nconst minimalWidgets = () => [\n blockStyle(),\n spacer(),\n ...characterStyleWidgets(),\n]\n\nexport const richTextWidgets = () => [\n blockStyle(),\n spacer(),\n ...paragraphStyleWidgets(),\n spacer(),\n ...characterStyleWidgets(),\n]\n\ninterface EditorParts extends PartsMap {\n toolbar: HTMLElement\n doc: HTMLElement\n content: HTMLElement\n}\n\nexport class RichText extends WebComponent<EditorParts> {\n static preferredTagName = 'tosi-rich-text'\n\n static lightStyleSpec: XinStyleSheet = {\n ':host': {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n ':host [part=\"toolbar\"]': {\n padding: 4,\n display: 'flex',\n gap: '0px',\n flex: '0 0 auto',\n flexWrap: 'wrap',\n },\n ':host [part=\"toolbar\"] > button': {\n _xinIconSize: 18,\n },\n }\n\n static formAssociated = true\n\n static initAttributes = {\n widgets: 'default' as 'none' | 'minimal' | 'default',\n name: '',\n required: false,\n }\n\n private isInitialized = false\n private savedValue = ''\n\n // Form lifecycle callbacks\n formDisabledCallback(disabled: boolean) {\n if (this.isInitialized) {\n this.parts.doc.contentEditable = disabled ? 'false' : 'true'\n }\n }\n\n formResetCallback() {\n this.value = ''\n }\n\n private _value = ''\n\n get value(): string {\n return this.isInitialized ? this.parts.doc.innerHTML : this._value\n }\n\n set value(docHtml: string) {\n const oldValue = this._value\n this._value = docHtml\n if (this.isInitialized) {\n if (this.parts.doc.innerHTML !== docHtml) {\n this.parts.doc.innerHTML = docHtml\n }\n }\n // Notify tosijs of the change for form value updates\n if (oldValue !== docHtml && this.internals) {\n this.internals.setFormValue(docHtml)\n }\n }\n\n blockElement(elt: Node): Element | undefined {\n const { doc } = this.parts\n while (elt.parentElement !== null && elt.parentElement !== doc) {\n elt = elt.parentElement\n }\n return elt.parentElement === doc ? (elt as Element) : undefined\n }\n\n get selectedBlocks(): any[] {\n const { doc } = this.parts\n const selObject = window.getSelection()\n if (selObject === null) {\n return []\n }\n const blocks = [] as any[]\n for (let i = 0; i < selObject.rangeCount; i++) {\n const range = selObject.getRangeAt(i)\n if (!doc.contains(range.commonAncestorContainer)) {\n continue\n }\n let block: Element | null = this.blockElement(\n range.startContainer\n ) as Element\n const lastBlock = this.blockElement(range.endContainer) as Element\n blocks.push(block)\n while (block !== lastBlock && block !== null) {\n block = block.nextElementSibling\n blocks.push(block)\n }\n }\n return blocks\n }\n\n get selectedText(): string {\n const selObject = window.getSelection()\n if (selObject === null) {\n return ''\n }\n return this.selectedBlocks.length ? selObject.toString() : ''\n }\n\n selectionChange: (event: Event, editor: RichText) => void = () => {\n /* no not care */\n }\n\n private _updatingBlockStyle = false\n\n handleSelectChange = (event: Event) => {\n // Ignore changes triggered by updateBlockStyle\n if (this._updatingBlockStyle) {\n return\n }\n\n const target = event.target as Element | null\n const select = target?.closest(\n TosiSelect.tagName as string\n ) as HTMLSelectElement | null\n if (select == null) {\n return\n }\n\n this.doCommand(select.value)\n }\n\n handleButtonClick = (event: Event) => {\n const target = event.target as Element | null\n const button = target?.closest('button')\n if (button == null) {\n return\n }\n\n this.doCommand(button.dataset.command)\n }\n\n content = [\n tosiSlot({\n name: 'toolbar',\n part: 'toolbar',\n onClick: this.handleButtonClick,\n onChange: this.handleSelectChange,\n }),\n div({\n part: 'doc',\n contenteditable: true,\n style: {\n flex: '1 1 auto',\n outline: 'none',\n },\n }),\n tosiSlot({\n part: 'content',\n }),\n ]\n\n doCommand(command?: string) {\n if (command === undefined) {\n return\n }\n const args = command.split(',') as string[]\n\n console.log('execCommand', args[0], false, ...args.slice(1))\n document.execCommand(args[0], false, ...args.slice(1))\n }\n\n updateBlockStyle() {\n const select = this.parts.toolbar.querySelector(\n '.block-style'\n ) as HTMLSelectElement | null\n if (select === null) {\n return\n }\n let blockTags = (this.selectedBlocks as HTMLElement[]).map(\n (block) => block.tagName\n )\n blockTags = [...new Set(blockTags)]\n this._updatingBlockStyle = true\n select.value = blockTags.length === 1 ? `formatBlock,${blockTags[0]}` : ''\n this._updatingBlockStyle = false\n }\n\n // Check if the editor has meaningful content\n private hasContent(): boolean {\n const text = this.parts.doc.textContent || ''\n return text.trim().length > 0\n }\n\n // Update form value and validity when content changes\n handleInput = () => {\n if (this.internals) {\n this.internals.setFormValue(this.parts.doc.innerHTML)\n this.updateValidity()\n }\n }\n\n private updateValidity(): void {\n if (this.internals) {\n if (this.required && !this.hasContent()) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please enter some content',\n this.parts.doc\n )\n } else {\n this.internals.setValidity({})\n }\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n const { doc, content } = this.parts\n if (content.innerHTML !== '' && doc.innerHTML === '') {\n doc.innerHTML = content.innerHTML\n content.innerHTML = ''\n }\n\n this.isInitialized = true\n\n content.style.display = 'none'\n\n // Listen for content changes\n doc.addEventListener('input', this.handleInput)\n\n // Initialize validity state\n this.updateValidity()\n\n document.addEventListener('selectionchange', (event: Event) => {\n this.updateBlockStyle()\n this.selectionChange(event, this)\n })\n }\n\n render(): void {\n const { toolbar } = this.parts\n\n super.render()\n\n if (toolbar.children.length === 0) {\n switch (this.widgets) {\n case 'minimal':\n toolbar.append(...minimalWidgets())\n break\n case 'default':\n toolbar.append(...richTextWidgets())\n break\n }\n }\n }\n}\n\n/** @deprecated Use RichText instead */\nexport type XinWord = RichText\n/** @deprecated Use RichText instead */\nexport const XinWord: typeof RichText = RichText\n\nexport const tosiRichText =\n RichText.elementCreator() as ElementCreator<RichText>\n\n/** @deprecated Use tosiRichText instead (tag is now <tosi-rich-text>) */\nexport const richText = deprecated(\n (...args: Parameters<typeof tosiRichText>) => tosiRichText(...args),\n 'richText is deprecated, use tosiRichText instead (tag is now <tosi-rich-text>)'\n) as ElementCreator<RichText>\n",
|
|
64
65
|
"/*#\n# router\n\nA lightweight client-side router for single-page applications. Supports\npattern matching with named parameters, hash-based routing, and multiple\nnamed route views (slots).\n\n## Basic Usage\n\n```js\nimport { defineRoutes, navigate, router, tosiRouteView } from 'tosijs-ui'\n\nconst home = () => {\n const el = document.createElement('div')\n el.textContent = 'Home page'\n return el\n}\n\nconst about = () => {\n const el = document.createElement('div')\n el.textContent = 'About page'\n return el\n}\n\nconst greeting = (params) => {\n const el = document.createElement('div')\n el.textContent = `Hello, ${params.name}!`\n return el\n}\n\ndefineRoutes(\n [\n { pattern: '', targets: [{ component: home }] },\n { pattern: 'about', targets: [{ component: about }] },\n { pattern: 'greet/:name', targets: [{ component: greeting }] },\n ],\n { hashRouting: true }\n)\n\npreview.append(\n tosiRouteView(),\n)\n\n// Navigate programmatically\nnavigate('greet/World')\n```\n\n## Named Views\n\nRoutes can target multiple named views simultaneously. This is useful\nfor layouts where a route change should update several areas of the page.\n\n```js\nimport { defineRoutes, navigate, tosiRouteView } from 'tosijs-ui'\n\nconst mainContent = (params) => {\n const el = document.createElement('div')\n el.textContent = `Editing photo ${params.id}`\n el.style.padding = '12px'\n el.style.background = '#f0f0f0'\n return el\n}\n\nconst sidebar = () => {\n const el = document.createElement('div')\n el.textContent = 'Color palette tools'\n el.style.padding = '12px'\n el.style.background = '#e0e0ff'\n return el\n}\n\ndefineRoutes(\n [\n {\n pattern: 'photos/:id/edit',\n targets: [\n { view: 'main', component: mainContent },\n { view: 'tools', component: sidebar },\n ],\n },\n ],\n { hashRouting: true }\n)\n\nconst container = document.createElement('div')\ncontainer.style.display = 'flex'\ncontainer.style.gap = '8px'\ncontainer.append(\n tosiRouteView({ name: 'main', style: { flex: '1' } }),\n tosiRouteView({ name: 'tools', style: { width: '200px' } }),\n)\npreview.append(container)\n\nnavigate('photos/42/edit')\n```\n\n## Hash Routing\n\nSet `hashRouting: true` when defining routes to use hash-based URLs\n(`#/path`) instead of History API paths. This is useful when your app\nis served from a static file server that doesn't support URL rewriting.\n\n```js\nimport { defineRoutes, navigate, tosiRouteView } from 'tosijs-ui'\n\ndefineRoutes(\n [\n {\n pattern: 'page/:id',\n targets: [{\n component: (p) => {\n const el = document.createElement('div')\n el.textContent = `Page ${p.id}`\n return el\n },\n }],\n },\n ],\n { hashRouting: true }\n)\n\npreview.append(tosiRouteView())\nnavigate('page/1')\n```\n*/\n\n/*{ \"parent\": \"Helper Libraries\" }*/\n\nimport { Component, ElementCreator, tosi } from 'tosijs'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface RouteParams {\n [key: string]: string\n}\n\nexport interface RouteTarget {\n view?: string\n component: (params: RouteParams) => HTMLElement\n}\n\nexport interface RouteDefinition {\n pattern: string\n targets: RouteTarget[]\n fallback?: boolean\n}\n\nexport interface RouterOptions {\n hashRouting?: boolean\n}\n\ninterface CompiledRoute {\n regex: RegExp\n paramNames: string[]\n targets: RouteTarget[]\n fallback: boolean\n}\n\n// ============================================================================\n// Router State\n// ============================================================================\n\nexport const { router } = tosi({\n router: {\n path: '',\n hash: '',\n pattern: '',\n },\n})\n\nlet routerParams: RouteParams = {}\n\nexport function getRouterParams(): RouteParams {\n return { ...routerParams }\n}\n\n// ============================================================================\n// Route Registry\n// ============================================================================\n\nlet compiledRoutes: CompiledRoute[] = []\nlet useHashRouting = false\nconst viewRegistry = new Set<TosiRouteView>()\n\n// ============================================================================\n// Pattern Compilation\n// ============================================================================\n\nfunction compilePattern(pattern: string): {\n regex: RegExp\n paramNames: string[]\n} {\n const paramNames: string[] = []\n\n if (pattern === '') {\n return { regex: /^\\/?$/, paramNames }\n }\n\n const regexParts = pattern.split('/').map((segment) => {\n if (segment.startsWith(':')) {\n paramNames.push(segment.slice(1))\n return '([^/]+)'\n }\n return segment.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n })\n\n const regex = new RegExp('^/?' + regexParts.join('/') + '/?$')\n return { regex, paramNames }\n}\n\n// ============================================================================\n// Route Matching\n// ============================================================================\n\nfunction matchRoute(path: string): {\n route: CompiledRoute\n params: RouteParams\n} | null {\n const cleanPath = path.split('?')[0].split('#')[0]\n\n for (const route of compiledRoutes) {\n if (route.fallback) continue\n const match = cleanPath.match(route.regex)\n if (match) {\n const params: RouteParams = {}\n route.paramNames.forEach((name, i) => {\n params[name] = decodeURIComponent(match[i + 1])\n })\n return { route, params }\n }\n }\n\n // Try fallback route\n const fallback = compiledRoutes.find((r) => r.fallback)\n if (fallback) {\n return { route: fallback, params: {} }\n }\n\n return null\n}\n\n// ============================================================================\n// Rendering\n// ============================================================================\n\nfunction renderRoute(): void {\n const path = useHashRouting\n ? window.location.hash.replace(/^#\\/?/, '')\n : window.location.pathname\n\n router.path.value = path\n router.hash.value = window.location.hash\n\n const match = matchRoute(path)\n\n if (match) {\n routerParams = match.params\n router.pattern.value = match.route.regex.source\n\n const targetsByView = new Map<string, RouteTarget>()\n for (const target of match.route.targets) {\n targetsByView.set(target.view ?? 'default', target)\n }\n\n for (const view of viewRegistry) {\n const viewName = view.name || 'default'\n const target = targetsByView.get(viewName)\n if (target) {\n view.replaceChildren(target.component(match.params))\n } else {\n view.replaceChildren()\n }\n }\n } else {\n routerParams = {}\n router.pattern.value = ''\n for (const view of viewRegistry) {\n view.replaceChildren()\n }\n }\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\nlet initialized = false\n\nfunction ensureListeners(): void {\n if (initialized) return\n initialized = true\n\n window.addEventListener('popstate', renderRoute)\n window.addEventListener('hashchange', renderRoute)\n}\n\nexport function defineRoutes(\n routes: RouteDefinition[],\n options: RouterOptions = {}\n): void {\n useHashRouting = options.hashRouting ?? false\n\n compiledRoutes = routes.map((def) => {\n const { regex, paramNames } = compilePattern(def.pattern)\n return {\n regex,\n paramNames,\n targets: def.targets,\n fallback: def.fallback ?? false,\n }\n })\n\n ensureListeners()\n renderRoute()\n}\n\nexport function navigate(path: string): void {\n ensureListeners()\n\n if (useHashRouting) {\n window.location.hash = '#/' + path.replace(/^\\//, '')\n } else {\n window.history.pushState({}, '', '/' + path.replace(/^\\//, ''))\n }\n\n renderRoute()\n}\n\n// ============================================================================\n// Route View Component\n// ============================================================================\n\nexport class TosiRouteView extends Component {\n static preferredTagName = 'tosi-route-view'\n\n static initAttributes = {\n name: 'default',\n }\n\n content = null\n\n connectedCallback(): void {\n super.connectedCallback()\n viewRegistry.add(this)\n // Re-render if routes are already defined\n if (compiledRoutes.length > 0) {\n renderRoute()\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n viewRegistry.delete(this)\n }\n}\n\nexport const tosiRouteView =\n TosiRouteView.elementCreator() as ElementCreator<TosiRouteView>\n",
|
|
65
|
-
"/*#\n# segmented select\n\nThis is a fairly general-purpose segmented select control.\n\n```html\n<div class=\"grid\">\n <tosi-segmented value=\"yes\" choices=\"yes, no, don't care\">\n Should we?\n </tosi-segmented>\n\n <div>\n <b>Localized!</b><br>\n <tosi-segmented\n localized\n title=\"do you like?\"\n choices=\"yes=Yes:thumbsUp, no=No:thumbsDown\"\n ></tosi-segmented>\n </div>\n\n <tosi-segmented\n style=\"--segmented-direction: column; --segmented-align-items: stretch\"\n choices=\"in a relationship, single\"\n other=\"it's complicated...\"\n placeholder=\"please elaborate\"\n value=\"separated\"\n >\n Relationship Status\n </tosi-segmented>\n\n <tosi-segmented\n multiple\n style=\"--segmented-direction: column; --segmented-align-items: start; --segmented-option-grid-columns: 24px 24px 100px; --segmented-input-visibility: visible;\"\n choices=\"star=Star:star, game=Game:game, bug=Bug:bug, camera=Camera:camera\"\n value=\"star,bug\"\n >\n Pick all that apply\n </tosi-segmented>\n</div>\n```\n```css\n.preview .grid {\n --segmented-option-current-background: var(--brand-color);\n --segmented-option-current-color: var(--brand-text-color);\n padding: 16px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n}\n```\n```js\nfunction logEvent(event) {\n const { target } = event\n if (target.matches('tosi-segmented')) {\n console.log((target.textContent || target.title).trim(), target.value)\n }\n}\npreview.addEventListener('change', logEvent, true)\n```\n```test\nconst segmented = preview.querySelectorAll('tosi-segmented')\ntest('segmented controls render', () => {\n expect(segmented.length).toBe(4)\n})\ntest('first segmented has value \"yes\"', () => {\n expect(segmented[0].value).toBe('yes')\n})\ntest('multiple segmented has array value', () => {\n expect(segmented[3].value).toBe('star,bug')\n})\n```\n\n> Check the console to see the values being set.\n\n## Form Integration\n\n`<tosi-segmented>` is form-associated, meaning it works directly in native `<form>` elements:\n\n```html\n<form class=\"segmented-form\">\n <tosi-segmented name=\"choice\" choices=\"a,b,c\" required></tosi-segmented>\n <button type=\"submit\">Submit</button>\n <span class=\"output\"></span>\n</form>\n```\n```js\nconst form = preview.querySelector('.segmented-form')\nform.addEventListener('submit', (e) => {\n e.preventDefault()\n const data = new FormData(form)\n form.querySelector('.output').textContent = 'Submitted: ' + data.get('choice')\n})\n```\n\n## Properties\n\n- `values` is an array of values (only really useful if `multiple` is set to true)\n\nYou can set `choices` programmatically to an array of `Choice` objects:\n\n interface Choice {\n icon?: string | SVGElement\n value: string\n caption: string\n }\n\n## Attributes\n\n- `choices` is a string of comma-delimited options of the form `value=caption:icon`,\n where caption and icon are optional\n- `multiple` allows multiple selection\n- `name` the form field name (for formAssociated support)\n- `other` (default '', meaning other is not allowed) is the caption for other options, allowing\n the user to input their choice. It will be reset to '' if `multiple` is set.\n- `placeholder` is the placeholder displayed in the `<input>` field for **other** responses\n- `localized` automatically localizes captions\n- `required` marks the field as required for form validation\n\n## Styling\n\nThe following CSS variables can be used to control customize the `<tosi-segmented>` component.\n\n --segmented-align-items\n --segmented-direction\n --segmented-option-color\n --segmented-option-current-background\n --segmented-option-current-color\n --segmented-option-font\n --segmented-option-gap\n --segmented-option-grid-columns\n --segmented-option-icon-color\n --segmented-option-padding\n --segmented-options-background\n --segmented-options-border-radius\n --segmented-placeholder-opacity\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component as WebComponent,\n ElementCreator,\n elements,\n varDefault,\n deprecated,\n} from 'tosijs'\nimport { icons } from './icons'\nimport { tosiLocalized } from './localize'\n\nconst { div, slot, label, span, input } = elements\n\ninterface Choice {\n icon?: string | SVGElement\n value: string\n caption: string\n}\n\ninterface SegmentParts {\n [key: string]: HTMLElement\n custom: HTMLInputElement\n options: HTMLElement\n}\n\nexport class TosiSegmented extends WebComponent {\n static preferredTagName = 'tosi-segmented'\n static formAssociated = true\n\n static initAttributes = {\n direction: 'row',\n other: '',\n multiple: false,\n name: '',\n placeholder: 'Please specify…',\n localized: false,\n required: false,\n }\n\n private _choices: Choice[] = []\n\n get choices(): Choice[] {\n return this._choices\n }\n\n set choices(v: Choice[] | string) {\n if (typeof v === 'string') {\n this._choices = TosiSegmented.parseChoicesString(v)\n } else {\n this._choices = v\n }\n this.queueRender()\n }\n\n // Parse choices string format: value=caption:icon (caption and icon are optional)\n private static parseChoicesString(choicesStr: string): Choice[] {\n return choicesStr\n .split(',')\n .filter((c) => c.trim() !== '')\n .map((c) => {\n const [value, remains] = c.split('=').map((v) => v.trim())\n const [caption, iconName] = (remains || value)\n .split(':')\n .map((v) => v.trim())\n\n const icon = iconName ? icons[iconName]() : ''\n return { value, icon, caption }\n })\n }\n\n value = ''\n\n // Form-associated lifecycle callbacks\n formDisabledCallback(disabled: boolean) {\n // Could add disabled support here\n void disabled\n }\n\n formResetCallback() {\n this.value = ''\n }\n\n get values(): string[] {\n return (this.value || '')\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '')\n }\n\n content = () => [\n slot(),\n div({ part: 'options' }, input({ part: 'custom', hidden: true })),\n ]\n\n static shadowStyleSpec = {\n ':host': {\n display: 'inline-flex',\n gap: varDefault.segmentedOptionGap('8px'),\n alignItems: varDefault.segmentedAlignItems('center'),\n },\n ':host, :host::part(options)': {\n flexDirection: varDefault.segmentedDirection('row'),\n },\n ':host label': {\n display: 'inline-grid',\n alignItems: 'center',\n gap: varDefault.segmentedOptionGap('8px'),\n gridTemplateColumns:\n varDefault.segmentedOptionGridColumns('0px 24px 1fr'),\n padding: varDefault.segmentedOptionPadding('4px 12px'),\n font: varDefault.segmentedOptionFont('16px'),\n },\n ':host label:focus': {\n outline: 'none',\n boxShadow: varDefault.segmentedFocusShadow(\n `inset 0 0 0 2px ${varDefault.segmentedOptionCurrentBackground('#44a')}`\n ),\n borderRadius: varDefault.segmentedOptionsBorderRadius('8px'),\n },\n // Selection highlight is driven by an explicit `.current` class rather than\n // `label:has(:checked)`. Firefox does not reliably re-evaluate `:has(:checked)`\n // when a descendant radio's checked state changes via interaction, leaving the\n // previously-selected segment highlighted (works in Chrome/Safari).\n ':host label.current': {\n color: varDefault.segmentedOptionCurrentColor('#eee'),\n background: varDefault.segmentedOptionCurrentBackground('#44a'),\n },\n ':host label.current:focus': {\n boxShadow: varDefault.segmentedCurrentFocusShadow(\n `inset 0 0 0 2px ${varDefault.segmentedOptionCurrentColor('#eee')}`\n ),\n },\n ':host svg': {\n height: varDefault.segmentOptionIconSize('16px'),\n stroke: varDefault.segmentedOptionIconColor('currentColor'),\n },\n ':host label.no-icon': {\n gap: 0,\n gridTemplateColumns: varDefault.segmentedOptionGridColumns('0px 1fr'),\n },\n ':host input[type=\"radio\"], :host input[type=\"checkbox\"]': {\n visibility: varDefault.segmentedInputVisibility('hidden'),\n },\n ':host::part(options)': {\n display: 'flex',\n borderRadius: varDefault.segmentedOptionsBorderRadius('8px'),\n background: varDefault.segmentedOptionsBackground('#fff'),\n color: varDefault.segmentedOptionColor('#222'),\n overflow: 'hidden',\n alignItems: varDefault.segmentedOptionAlignItems('stretch'),\n },\n ':host::part(custom)': {\n padding: varDefault.segmentedOptionPadding('4px 12px'),\n color: varDefault.segmentedOptionCurrentColor('#eee'),\n background: varDefault.segmentedOptionCurrentBackground('#44a'),\n font: varDefault.segmentedOptionFont('16px'),\n border: '0',\n outline: 'none',\n },\n ':host::part(custom)::placeholder': {\n color: varDefault.segmentedOptionCurrentColor('#eee'),\n opacity: varDefault.segmentedPlaceholderOpacity(0.75),\n },\n }\n\n // Reflects each radio/checkbox's checked state onto its containing label as a\n // `.current` class so the selection highlight updates reliably (see note on the\n // `.current` style rule).\n private syncCurrent() {\n const { options } = this.parts as SegmentParts\n options.querySelectorAll('label').forEach((label) => {\n const input = label.querySelector('input')\n label.classList.toggle('current', Boolean(input && input.checked))\n })\n }\n\n private valueChanged = false\n handleChange = () => {\n const { options, custom } = this.parts as SegmentParts\n if (this.multiple) {\n const inputs = [\n ...options.querySelectorAll('input:checked'),\n ] as HTMLInputElement[]\n this.value = inputs.map((input) => input.value).join(',')\n } else {\n const input = options.querySelector(\n 'input:checked'\n ) as HTMLInputElement | null\n if (!input) {\n this.value = ''\n } else if (input.value) {\n custom.setAttribute('hidden', '')\n this.value = input.value\n } else {\n custom.removeAttribute('hidden')\n custom.focus()\n custom.select()\n this.value = custom.value\n }\n }\n this.syncCurrent()\n this.valueChanged = true\n }\n\n handleKey = (event: KeyboardEvent) => {\n let blockEvent = false\n switch (event.code) {\n case 'Space':\n if (event.target instanceof HTMLLabelElement) {\n event.target.click()\n blockEvent = true\n }\n break\n case 'Tab':\n if (!(event.target instanceof HTMLLabelElement)) {\n const label = (event.target as HTMLElement).closest(\n 'label'\n ) as HTMLLabelElement\n label.focus()\n }\n break\n case 'ArrowLeft':\n case 'ArrowUp':\n {\n const label = (event.target as HTMLElement).closest(\n 'label'\n ) as HTMLLabelElement\n if (label.previousElementSibling instanceof HTMLLabelElement) {\n label.previousElementSibling.focus!()\n }\n }\n blockEvent = true\n break\n case 'ArrowRight':\n case 'ArrowDown':\n {\n const label = (event.target as HTMLElement).closest(\n 'label'\n ) as HTMLLabelElement\n if (label.nextElementSibling instanceof HTMLLabelElement) {\n label.nextElementSibling.focus!()\n }\n }\n blockEvent = true\n break\n }\n if (blockEvent) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n // Parse choices from HTML attribute if present and not already set programmatically\n const choicesAttr = this.getAttribute('choices')\n if (choicesAttr && this._choices.length === 0) {\n this._choices = TosiSegmented.parseChoicesString(choicesAttr)\n }\n\n const { options } = this.parts\n\n if (this.name === '') {\n this.name = this.instanceId\n }\n\n options.addEventListener('change', this.handleChange)\n options.addEventListener('keydown', this.handleKey as EventListener)\n\n if (this.other && this.multiple) {\n console.warn(\n this,\n 'is set to [other] and [multiple]; [other] will be ignored'\n )\n this.other = ''\n }\n }\n\n private get _choicesWithOther(): Choice[] {\n const options: Choice[] = [...this.choices]\n\n if (this.other && !this.multiple) {\n const [caption, icon] = this.other.split(':')\n options.push({\n value: '',\n caption,\n icon,\n })\n }\n\n return options\n }\n\n get isOtherValue(): boolean {\n return Boolean(\n this.value === '' ||\n (this.value &&\n !this._choicesWithOther.find((choice) => choice.value === this.value))\n )\n }\n\n render() {\n super.render()\n\n if (this.valueChanged) {\n this.valueChanged = false\n return\n }\n\n const { options, custom } = this.parts as SegmentParts\n options.textContent = ''\n const type = this.multiple ? 'checkbox' : 'radio'\n const { values, isOtherValue } = this\n options.append(\n ...this._choicesWithOther.map((choice) => {\n return label(\n { tabindex: 0 },\n input({\n type,\n name: this.name,\n value: choice.value,\n checked:\n values.includes(choice.value) ||\n (choice.value === '' && isOtherValue),\n tabIndex: -1,\n }),\n choice.icon || { class: 'no-icon' },\n this.localized ? tosiLocalized(choice.caption) : span(choice.caption)\n )\n })\n )\n if (this.other && !this.multiple) {\n custom.hidden = !isOtherValue\n custom.value = isOtherValue ? (this.value as string) : ''\n custom.placeholder = this.placeholder\n options.append(custom)\n }\n this.syncCurrent()\n }\n}\n\n/** @deprecated Use TosiSegmented instead */\nexport type XinSegmented = TosiSegmented\n/** @deprecated Use TosiSegmented instead */\nexport const XinSegmented: typeof TosiSegmented = TosiSegmented\n\nexport const tosiSegmented =\n TosiSegmented.elementCreator() as ElementCreator<TosiSegmented>\n\n/** @deprecated Use tosiSegmented instead (tag is now tosi-segmented) */\nexport const xinSegmented = deprecated(\n (...args: Parameters<typeof tosiSegmented>) => tosiSegmented(...args),\n 'xinSegmented is deprecated, use tosiSegmented instead (tag is now <tosi-segmented>)'\n) as ElementCreator<TosiSegmented>\n",
|
|
66
|
+
"/*#\n# segmented select\n\nThis is a fairly general-purpose segmented select control.\n\n```html\n<div class=\"grid\">\n <tosi-segmented value=\"yes\" choices=\"yes, no, don't care\">\n Should we?\n </tosi-segmented>\n\n <div>\n <b>Localized!</b><br>\n <tosi-segmented\n localized\n title=\"do you like?\"\n choices=\"yes=Yes:thumbsUp, no=No:thumbsDown\"\n ></tosi-segmented>\n </div>\n\n <tosi-segmented\n style=\"--segmented-direction: column; --segmented-align-items: stretch\"\n choices=\"in a relationship, single\"\n other=\"it's complicated...\"\n placeholder=\"please elaborate\"\n value=\"separated\"\n >\n Relationship Status\n </tosi-segmented>\n\n <tosi-segmented\n multiple\n style=\"--segmented-direction: column; --segmented-align-items: start; --segmented-option-grid-columns: 24px 24px 100px; --segmented-input-visibility: visible;\"\n choices=\"star=Star:star, game=Game:game, bug=Bug:bug, camera=Camera:camera\"\n value=\"star,bug\"\n >\n Pick all that apply\n </tosi-segmented>\n</div>\n```\n```css\n.preview .grid {\n --segmented-option-current-background: var(--brand-color);\n --segmented-option-current-color: var(--brand-text-color);\n padding: 16px;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n}\n```\n```js\nfunction logEvent(event) {\n const { target } = event\n if (target.matches('tosi-segmented')) {\n console.log((target.textContent || target.title).trim(), target.value)\n }\n}\npreview.addEventListener('change', logEvent, true)\n```\n```test\nconst segmented = preview.querySelectorAll('tosi-segmented')\ntest('segmented controls render', () => {\n expect(segmented.length).toBe(4)\n})\ntest('first segmented has value \"yes\"', () => {\n expect(segmented[0].value).toBe('yes')\n})\ntest('multiple segmented has array value', () => {\n expect(segmented[3].value).toBe('star,bug')\n})\n```\n\n> Check the console to see the values being set.\n\n## Form Integration\n\n`<tosi-segmented>` is form-associated, meaning it works directly in native `<form>` elements:\n\n```html\n<form class=\"segmented-form\">\n <tosi-segmented name=\"choice\" choices=\"a,b,c\" required></tosi-segmented>\n <button type=\"submit\">Submit</button>\n <span class=\"output\"></span>\n</form>\n```\n```js\nconst form = preview.querySelector('.segmented-form')\nform.addEventListener('submit', (e) => {\n e.preventDefault()\n const data = new FormData(form)\n form.querySelector('.output').textContent = 'Submitted: ' + data.get('choice')\n})\n```\n\n## Properties\n\n- `values` is an array of values (only really useful if `multiple` is set to true)\n\nYou can set `choices` programmatically to an array of `Choice` objects:\n\n interface Choice {\n icon?: string | SVGElement\n value: string\n caption: string\n }\n\n## Attributes\n\n- `choices` is a string of comma-delimited options of the form `value=caption:icon`,\n where caption and icon are optional\n- `multiple` allows multiple selection\n- `name` the form field name (for formAssociated support)\n- `other` (default '', meaning other is not allowed) is the caption for other options, allowing\n the user to input their choice. It will be reset to '' if `multiple` is set.\n- `placeholder` is the placeholder displayed in the `<input>` field for **other** responses\n- `localized` automatically localizes captions\n- `required` marks the field as required for form validation\n\n## Styling\n\nThe following CSS variables can be used to control customize the `<tosi-segmented>` component.\n\n --segmented-align-items\n --segmented-direction\n --segmented-option-color\n --segmented-option-current-background\n --segmented-option-current-color\n --segmented-option-font\n --segmented-option-gap\n --segmented-option-grid-columns\n --segmented-option-icon-color\n --segmented-option-padding\n --segmented-options-background\n --segmented-options-border-radius\n --segmented-placeholder-opacity\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component as WebComponent,\n ElementCreator,\n elements,\n varDefault,\n deprecated,\n} from 'tosijs'\nimport { icons } from './icons'\nimport { tosiLocalized } from './localize'\n\nconst { div, slot, label, span, input } = elements\n\ninterface Choice {\n icon?: string | SVGElement\n value: string\n caption: string\n}\n\ninterface SegmentParts {\n [key: string]: HTMLElement\n custom: HTMLInputElement\n options: HTMLElement\n}\n\nexport class TosiSegmented extends WebComponent {\n static preferredTagName = 'tosi-segmented'\n static formAssociated = true\n\n static initAttributes = {\n direction: 'row',\n other: '',\n multiple: false,\n name: '',\n placeholder: 'Please specify…',\n localized: false,\n required: false,\n }\n\n private _choices: Choice[] = []\n\n get choices(): Choice[] {\n return this._choices\n }\n\n set choices(v: Choice[] | string) {\n if (typeof v === 'string') {\n this._choices = TosiSegmented.parseChoicesString(v)\n } else {\n this._choices = v\n }\n this.queueRender()\n }\n\n // Parse choices string format: value=caption:icon (caption and icon are optional)\n private static parseChoicesString(choicesStr: string): Choice[] {\n return choicesStr\n .split(',')\n .filter((c) => c.trim() !== '')\n .map((c) => {\n const [value, remains] = c.split('=').map((v) => v.trim())\n const [caption, iconName] = (remains || value)\n .split(':')\n .map((v) => v.trim())\n\n const icon = iconName ? icons[iconName]() : ''\n return { value, icon, caption }\n })\n }\n\n value = ''\n\n // Form-associated lifecycle callbacks\n formDisabledCallback(disabled: boolean) {\n // Could add disabled support here\n void disabled\n }\n\n formResetCallback() {\n this.value = ''\n }\n\n get values(): string[] {\n return (this.value || '')\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v !== '')\n }\n\n content = () => [\n slot(),\n div({ part: 'options' }, input({ part: 'custom', hidden: true })),\n ]\n\n static shadowStyleSpec = {\n ':host': {\n display: 'inline-flex',\n gap: varDefault.segmentedOptionGap('8px'),\n alignItems: varDefault.segmentedAlignItems('center'),\n },\n ':host, :host::part(options)': {\n flexDirection: varDefault.segmentedDirection('row'),\n },\n ':host label': {\n display: 'inline-grid',\n alignItems: 'center',\n gap: varDefault.segmentedOptionGap('8px'),\n gridTemplateColumns:\n varDefault.segmentedOptionGridColumns('0px 24px 1fr'),\n padding: varDefault.segmentedOptionPadding('4px 12px'),\n font: varDefault.segmentedOptionFont('16px'),\n },\n ':host label:focus': {\n outline: 'none',\n boxShadow: varDefault.segmentedFocusShadow(\n `inset 0 0 0 2px ${varDefault.segmentedOptionCurrentBackground('#44a')}`\n ),\n borderRadius: varDefault.segmentedOptionsBorderRadius('8px'),\n },\n // Selection highlight is driven by an explicit `.current` class rather than\n // `label:has(:checked)`. Firefox does not reliably re-evaluate `:has(:checked)`\n // when a descendant radio's checked state changes via interaction, leaving the\n // previously-selected segment highlighted (works in Chrome/Safari).\n ':host label.current': {\n color: varDefault.segmentedOptionCurrentColor('#eee'),\n background: varDefault.segmentedOptionCurrentBackground('#44a'),\n },\n ':host label.current:focus': {\n boxShadow: varDefault.segmentedCurrentFocusShadow(\n `inset 0 0 0 2px ${varDefault.segmentedOptionCurrentColor('#eee')}`\n ),\n },\n ':host svg': {\n height: varDefault.segmentOptionIconSize('16px'),\n stroke: varDefault.segmentedOptionIconColor('currentColor'),\n },\n ':host label.no-icon': {\n gap: 0,\n gridTemplateColumns: varDefault.segmentedOptionGridColumns('0px 1fr'),\n },\n ':host input[type=\"radio\"], :host input[type=\"checkbox\"]': {\n visibility: varDefault.segmentedInputVisibility('hidden'),\n },\n ':host::part(options)': {\n display: 'flex',\n borderRadius: varDefault.segmentedOptionsBorderRadius('8px'),\n background: varDefault.segmentedOptionsBackground('#fff'),\n color: varDefault.segmentedOptionColor('#222'),\n overflow: 'hidden',\n alignItems: varDefault.segmentedOptionAlignItems('stretch'),\n },\n ':host::part(custom)': {\n padding: varDefault.segmentedOptionPadding('4px 12px'),\n color: varDefault.segmentedOptionCurrentColor('#eee'),\n background: varDefault.segmentedOptionCurrentBackground('#44a'),\n font: varDefault.segmentedOptionFont('16px'),\n border: '0',\n outline: 'none',\n },\n ':host::part(custom)::placeholder': {\n color: varDefault.segmentedOptionCurrentColor('#eee'),\n opacity: varDefault.segmentedPlaceholderOpacity(0.75),\n },\n }\n\n // Reflects the selection onto each label as a `.current` class so the highlight\n // updates reliably (see note on the `.current` style rule). Derived from\n // `this.value` (the authoritative selection, matching render()'s `checked` logic),\n // NOT from re-reading each `input.checked`: on Firefox/WebKit that live read can\n // lag the native radio update at change time, leaving `.current` on the previous\n // segment while `input.checked` (and `value`) are already correct.\n private syncCurrent() {\n const { options } = this.parts as SegmentParts\n const { values, isOtherValue } = this\n options.querySelectorAll('label').forEach((label) => {\n const val = label.querySelector('input')?.value ?? ''\n label.classList.toggle(\n 'current',\n values.includes(val) || (val === '' && isOtherValue)\n )\n })\n }\n\n handleChange = () => {\n const { options, custom } = this.parts as SegmentParts\n if (this.multiple) {\n const inputs = [\n ...options.querySelectorAll('input:checked'),\n ] as HTMLInputElement[]\n this.value = inputs.map((input) => input.value).join(',')\n } else {\n const input = options.querySelector(\n 'input:checked'\n ) as HTMLInputElement | null\n if (!input) {\n this.value = ''\n } else if (input.value) {\n custom.setAttribute('hidden', '')\n this.value = input.value\n } else {\n custom.removeAttribute('hidden')\n custom.focus()\n custom.select()\n this.value = custom.value\n }\n }\n this.syncCurrent()\n }\n\n handleKey = (event: KeyboardEvent) => {\n let blockEvent = false\n switch (event.code) {\n case 'Space':\n if (event.target instanceof HTMLLabelElement) {\n event.target.click()\n blockEvent = true\n }\n break\n case 'Tab':\n if (!(event.target instanceof HTMLLabelElement)) {\n const label = (event.target as HTMLElement).closest(\n 'label'\n ) as HTMLLabelElement\n label.focus()\n }\n break\n case 'ArrowLeft':\n case 'ArrowUp':\n {\n const label = (event.target as HTMLElement).closest(\n 'label'\n ) as HTMLLabelElement\n if (label.previousElementSibling instanceof HTMLLabelElement) {\n label.previousElementSibling.focus!()\n }\n }\n blockEvent = true\n break\n case 'ArrowRight':\n case 'ArrowDown':\n {\n const label = (event.target as HTMLElement).closest(\n 'label'\n ) as HTMLLabelElement\n if (label.nextElementSibling instanceof HTMLLabelElement) {\n label.nextElementSibling.focus!()\n }\n }\n blockEvent = true\n break\n }\n if (blockEvent) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n // Parse choices from HTML attribute if present and not already set programmatically\n const choicesAttr = this.getAttribute('choices')\n if (choicesAttr && this._choices.length === 0) {\n this._choices = TosiSegmented.parseChoicesString(choicesAttr)\n }\n\n const { options } = this.parts\n\n if (this.name === '') {\n this.name = this.instanceId\n }\n\n options.addEventListener('change', this.handleChange)\n options.addEventListener('keydown', this.handleKey as EventListener)\n\n if (this.other && this.multiple) {\n console.warn(\n this,\n 'is set to [other] and [multiple]; [other] will be ignored'\n )\n this.other = ''\n }\n }\n\n private get _choicesWithOther(): Choice[] {\n const options: Choice[] = [...this.choices]\n\n if (this.other && !this.multiple) {\n const [caption, icon] = this.other.split(':')\n options.push({\n value: '',\n caption,\n icon,\n })\n }\n\n return options\n }\n\n get isOtherValue(): boolean {\n return Boolean(\n this.value === '' ||\n (this.value &&\n !this._choicesWithOther.find((choice) => choice.value === this.value))\n )\n }\n\n render() {\n super.render()\n\n const { options, custom } = this.parts as SegmentParts\n const type = this.multiple ? 'checkbox' : 'radio'\n const { values, isOtherValue } = this\n const choices = this._choicesWithOther\n const isChecked = (value: string): boolean =>\n values.includes(value) || (value === '' && isOtherValue)\n\n // Idempotent: rebuild the <label>s ONLY when the choice set changed; otherwise\n // reconcile `checked` in place. Re-creating them every render (previously avoided\n // by a `valueChanged` timing flag) dropped focus from the segment you just\n // clicked and is provably redundant when the labels already match the choices —\n // so render is now safe to run any number of times, any time.\n const labels = [...options.querySelectorAll('label')] as HTMLLabelElement[]\n const structureMatches =\n labels.length === choices.length &&\n labels.every(\n (l, i) => l.querySelector('input')?.value === choices[i].value\n )\n\n if (structureMatches) {\n labels.forEach((label) => {\n const input = label.querySelector('input') as HTMLInputElement | null\n if (input && input.checked !== isChecked(input.value)) {\n input.checked = isChecked(input.value)\n }\n })\n } else {\n options.textContent = ''\n options.append(\n ...choices.map((choice) =>\n label(\n { tabindex: 0 },\n input({\n type,\n name: this.name,\n value: choice.value,\n checked: isChecked(choice.value),\n tabIndex: -1,\n }),\n choice.icon || { class: 'no-icon' },\n this.localized ? tosiLocalized(choice.caption) : span(choice.caption)\n )\n )\n )\n }\n\n if (this.other && !this.multiple) {\n custom.hidden = !isOtherValue\n const customValue = isOtherValue ? (this.value as string) : ''\n if (custom.value !== customValue) custom.value = customValue\n custom.placeholder = this.placeholder\n if (custom.parentElement !== options) options.append(custom)\n }\n this.syncCurrent()\n }\n}\n\n/** @deprecated Use TosiSegmented instead */\nexport type XinSegmented = TosiSegmented\n/** @deprecated Use TosiSegmented instead */\nexport const XinSegmented: typeof TosiSegmented = TosiSegmented\n\nexport const tosiSegmented =\n TosiSegmented.elementCreator() as ElementCreator<TosiSegmented>\n\n/** @deprecated Use tosiSegmented instead (tag is now tosi-segmented) */\nexport const xinSegmented = deprecated(\n (...args: Parameters<typeof tosiSegmented>) => tosiSegmented(...args),\n 'xinSegmented is deprecated, use tosiSegmented instead (tag is now <tosi-segmented>)'\n) as ElementCreator<TosiSegmented>\n",
|
|
66
67
|
"import { Component as WebComponent, ElementCreator, elements } from 'tosijs'\n\nconst { slot } = elements\n\n/*#\n# size-break\n\nWhile we wait for enough browsers to implement [container-queries](https://www.w3.org/TR/css-contain-3/),\nand in any event when you simply want to do different things at different sizes (e.g. in the project I'm\nworking on right now, a row of buttons turns into a menu at narrow widths) there's `<tosi-sizebreak>`.\n\nNote that the sizes referred to are of the `<tosi-sizebreak>`'s `.offsetParent`, and it watches for\nthe window's `resize` events and its own (via `ResizeObserver`).\n\n```html\n<div class=\"container\">\n <tosi-sizebreak min-width=\"300\" min-height=\"150\">\n <h1>BIG!</h1>\n <i slot=\"small\">little</i>\n </tosi-sizebreak>\n <tosi-sizer></tosi-sizer>\n</div>\n```\n```css\n.preview {\n touch-action: none;\n}\n\n.preview tosi-sizebreak {\n width: 100%;\n height: 100%;\n background: #fff8;\n border: 1px solid #aaa;\n}\n\n.preview tosi-sizebreak * {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n}\n\n.preview .container {\n position: relative;\n min-width: 100px;\n min-height: 40px;\n max-height: 100%;\n width: 400px;\n height: 100px;\n}\n\n.preview .sizer {\n position: absolute;\n width: 24px;\n height: 24px;\n line-height: 24px;\n text-align: center;\n background: #0002;\n bottom: 0;\n right: 0;\n cursor: nwse-resize;\n opacity: 0.5;\n}\n\n.preview .sizer:hover {\n opacity: 1.0;\n}\n```\n\n`<tosi-sizebreak>` supports both `min-width` and/or `min-height`, and you can of course target only one\nof the slots if you like. The demo site uses them to hide the\n[jsdelivr](https://www.jsdelivr.com/) badge when space is tight.\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nexport class SizeBreak extends WebComponent {\n static preferredTagName = 'tosi-sizebreak'\n\n static initAttributes = {\n minWidth: 0,\n minHeight: 0,\n }\n\n value: 'normal' | 'small' = 'normal'\n\n content = [slot({ part: 'normal' }), slot({ part: 'small', name: 'small' })]\n\n static shadowStyleSpec = {\n ':host': {\n display: 'inline-block',\n position: 'relative',\n },\n }\n\n handleResize = () => {\n const { normal, small } = this.parts as { [key: string]: HTMLElement }\n const parent = this.offsetParent as HTMLElement | null\n if (!(parent instanceof HTMLElement)) {\n return\n } else if (\n parent.offsetWidth < this.minWidth ||\n parent.offsetHeight < this.minHeight\n ) {\n normal.hidden = true\n small.hidden = false\n this.value = 'small'\n } else {\n normal.hidden = false\n small.hidden = true\n this.value = 'normal'\n }\n }\n\n // TODO trigger a resize event when an ancestor element\n // is inserted or moved into the DOM.\n connectedCallback(): void {\n super.connectedCallback()\n globalThis.addEventListener('resize', this.handleResize)\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n globalThis.removeEventListener('resize', this.handleResize)\n }\n}\n\nexport const sizeBreak = SizeBreak.elementCreator() as ElementCreator<SizeBreak>\n",
|
|
67
68
|
"/*#\n# sizer\n\nThis is a super-simple component that you can put in a fixed size element allowing it to be resized\nfrom the bottom-right.\n\n```html\n<div>\n <tosi-sizer></tosi-sizer>\n</div>\n```\n```css\n.preview div {\n position: absolute;\n top: 10px;\n left: 10px;\n width: 200px;\n height: 100px;\n background: #ff02;\n border: 1px solid #555;\n}\n```\n\n<tosi-css-var-editor element-selector=\"tosi-sizer\"></tosi-css-var-editor>\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { Component as XinComponent, ElementCreator, vars } from 'tosijs'\nimport { icons } from './icons'\nimport { trackDrag } from './track-drag'\n\nexport class TosiSizer extends XinComponent {\n static preferredTagName = 'tosi-sizer'\n target?: HTMLElement | null = null\n\n static shadowStyleSpec = {\n ':host': {\n _resizeIconFill: '#222',\n display: 'block',\n position: 'absolute',\n bottom: -7,\n right: -7,\n padding: 14,\n width: 44,\n height: 44,\n opacity: 0.25,\n transition: 'opacity 0.25s ease-out',\n },\n ':host(:hover)': {\n opacity: 0.5,\n },\n ':host svg': {\n width: 16,\n height: 16,\n stroke: vars.resizeIconFill,\n },\n }\n\n content = icons.resize()\n\n get minSize(): { width: number; height: number } {\n const { minWidth, minHeight } = getComputedStyle(this.target!)\n return {\n width: parseFloat(minWidth) || 32,\n height: parseFloat(minHeight) || 32,\n }\n }\n\n resizeTarget = (event: Event): void => {\n const { target } = this\n if (!target) return\n const w = target.offsetWidth\n const h = target.offsetHeight\n target.style.left = target.offsetLeft + 'px'\n target.style.top = target.offsetTop + 'px'\n target.style.bottom = ''\n target.style.right = ''\n const { minSize } = this\n\n trackDrag(\n event as PointerEvent,\n (dx: number, dy: number, event: any): true | undefined => {\n target.style.width = Math.max(minSize.width, w + dx) + 'px'\n target.style.height = Math.max(minSize.height, h + dy) + 'px'\n if (event.type === 'mouseup') {\n return true\n }\n },\n 'nwse-resize'\n )\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n\n if (!this.target) {\n this.target = this.parentElement\n }\n\n const PASSIVE = { passive: true }\n this.addEventListener('mousedown', this.resizeTarget, PASSIVE)\n this.addEventListener('touchstart', this.resizeTarget, PASSIVE)\n }\n}\n\n/** @deprecated Use TosiSizer instead */\nexport type XinSizer = TosiSizer\n/** @deprecated Use TosiSizer instead */\nexport const XinSizer: typeof TosiSizer = TosiSizer\n\nexport const tosiSizer = TosiSizer.elementCreator() as ElementCreator<TosiSizer>\n\n/** @deprecated Use tosiSizer instead */\nexport const xinSizer = tosiSizer\n",
|
|
68
69
|
"/*#\n# tag-list\n\nBuilding a tag-list from standard HTML elements is a bit of a nightmare.\n\n`<tosi-tag-list>` allows you to display an editable or read-only tag list (represented either\nas a comma-delimited string or an array of strings).\n\n```html\n<label style=\"position: absolute; right: 10px; top: 10px; display: block\">\n <input type=\"checkbox\" class=\"disable-toggle\">\n <b>Disable All</b>\n</label>\n<label>\n <b>Display Only</b>\n <tosi-tag-list\n value=\"this,that,,the-other\"\n ></tosi-tag-list>\n</label>\n<tosi-tag-list\n class=\"compact\"\n value=\"this,that,,the-other\"\n></tosi-tag-list>\n<br>\n<label>\n <b>Editable</b>\n <tosi-tag-list\n class=\"editable-tag-list\"\n value=\"belongs,also belongs,has\\, comma,custom\"\n editable\n available-tags=\"belongs,also belongs,has\\, comma,not initially chosen\"\n ></tosi-tag-list>\n</label>\n<br>\n<b>Text-Entry</b>\n<tosi-tag-list\n value=\"this,that,the-other,not,enough,space\"\n editable\n text-entry\n available-tags=\"tomasina,dick,,harriet\"\n></tosi-tag-list>\n```\n```css\n.preview .compact {\n --spacing: 8px;\n --font-size: 12px;\n --line-height: 18px;\n}\n.preview label {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n```\n```js\npreview.addEventListener('change', (event) => {\n if (event.target.matches('tosi-tag-list')) {\n console.log(event.target, event.target.value)\n }\n}, true)\npreview.querySelector('.disable-toggle').addEventListener('change', (event) => {\n const tagLists = Array.from(preview.querySelectorAll('tosi-tag-list'))\n for(const tagList of tagLists) {\n tagList.disabled = event.target.checked\n }\n})\n```\n```test\nconst tagLists = preview.querySelectorAll('tosi-tag-list')\ntest('tag-lists render', () => {\n expect(tagLists.length).toBe(4)\n})\ntest('first tag-list has correct tags', () => {\n expect(tagLists[0].tags.length).toBe(3)\n expect(tagLists[0].tags).toContain('this')\n})\ntest('editable tag-list has editable attribute', () => {\n expect(tagLists[2].editable).toBe(true)\n})\ntest('a comma inside a tag survives the value round-trip', () => {\n const tl = document.createElement('tosi-tag-list')\n tl.tags = ['New York, NY', 'Boston']\n // the literal comma is escaped in `value` so it is not a delimiter\n expect(tl.value).toBe('New York\\\\, NY,Boston')\n expect(tl.tags.length).toBe(2)\n expect(tl.tags).toContain('New York, NY')\n})\ntest('an escaped comma in a value string parses as one tag', () => {\n const tl = document.createElement('tosi-tag-list')\n tl.value = 'New York\\\\, NY,Boston'\n expect(tl.tags.length).toBe(2)\n expect(tl.tags).toContain('New York, NY')\n})\n```\n\n## Properties\n\n### `value`: string | string[]\n\nA comma-delimited list of tags. A tag that itself contains a comma must\nescape it as `\\,` — e.g. `value=\"New York\\, NY,Boston\"` is two tags. The\n`tags` accessor handles this escaping for you in both directions.\n\n### `tags`: string[]\n\n## `popSelectMenu`: () => void\n\nThis is the method called when the user clicks the menu button. By default is displays a\npick list of tags, but if you wish to customize the behavior, just replace this method.\n\nA read-only property giving the value as an array.\n\n### `available-tags`: string | string[]\n\nA list of tags that will be displayed in the popup menu by default. The popup menu\nwill always display custom tags (allowing their removal). As with `value`, a\ncomma inside a tag must be escaped as `\\,` when set via the attribute string.\n\n### `editable`: boolean\n\nAllows the tag list to be modified via menu and removing tags.\n\n### `text-entry`: boolean\n\nIf `editable`, an input field is provided for entering tags directly.\n\n### `placeholder`: string = 'enter tags'\n\nPlaceholder shown on input field.\n*/\n\n/*{ \"parent\": \"Form Components\" }*/\n\nimport {\n Component as WebComponent,\n elements,\n vars,\n varDefault,\n ElementCreator,\n deprecated,\n XinStyleSheet,\n} from 'tosijs'\nimport { popMenu, MenuItem } from './menu'\nimport { icons } from './icons'\n\nconst { div, input, span, button } = elements\n\n// Tags are serialised as a comma-delimited string (the form `value`). A\n// literal comma inside a tag is escaped as `\\,` so it survives the\n// split/join round-trip — both in programmatic values and in the\n// `value` / `available-tags` HTML attributes.\nconst splitTags = (str: string): string[] =>\n str.split(/(?<!\\\\),/).map((tag) => tag.trim().replace(/\\\\,/g, ','))\n\nconst joinTags = (tags: string[]): string =>\n tags.map((tag) => tag.replace(/,/g, '\\\\,')).join(',')\n\nexport class TosiTag extends WebComponent {\n static preferredTagName = 'tosi-tag'\n\n static lightStyleSpec = {\n ':host': {\n '--tag-close-button-color': '#000c',\n '--tag-close-button-bg': '#fffc',\n '--tag-button-opacity': '0.5',\n '--tag-button-hover-opacity': '0.75',\n '--tag-bg': varDefault.brandColor('blue'),\n '--tag-text-color': varDefault.brandTextColor('white'),\n display: 'inline-flex',\n borderRadius: varDefault.tagRoundedRadius(vars.spacing50),\n color: vars.tagTextColor,\n background: vars.tagBg,\n padding: `0 ${vars.spacing75} 0 ${vars.spacing75}`,\n height: `calc(${vars.lineHeight} + ${vars.spacing50})`,\n lineHeight: `calc(${vars.lineHeight} + ${vars.spacing50})`,\n },\n ':host > [part=\"caption\"]': {\n position: 'relative',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n flex: '1 1 auto',\n fontSize: varDefault.fontSize('16px'),\n color: vars.tagTextColor,\n textOverflow: 'ellipsis',\n },\n ':host [part=\"remove\"]': {\n boxShadow: 'none',\n margin: `0 ${vars.spacing_50} 0 ${vars.spacing25}`,\n padding: 0,\n display: 'inline-flex',\n alignItems: 'center',\n alignSelf: 'center',\n justifyContent: 'center',\n height: vars.spacing150,\n width: vars.spacing150,\n color: vars.tagCloseButtonColor,\n background: vars.tagCloseButtonBg,\n borderRadius: varDefault.tagCloseButtonRadius('99px'),\n opacity: vars.tagButtonOpacity,\n },\n ':host [part=\"remove\"]:hover': {\n background: vars.tagCloseButtonBg,\n opacity: vars.tagButtonHoverOpacity,\n },\n }\n\n static initAttributes = {\n caption: '',\n removeable: false,\n }\n\n removeCallback: (event: Event) => void = () => {\n this.remove()\n }\n\n content = () => [\n span({ part: 'caption' }, this.caption),\n button(icons.x(), {\n type: 'button',\n part: 'remove',\n hidden: !this.removeable,\n ariaLabel: `Remove ${this.caption}`,\n onClick: this.removeCallback,\n }),\n ]\n}\n\n/** @deprecated Use TosiTag instead */\nexport type XinTag = TosiTag\n/** @deprecated Use TosiTag instead */\nexport const XinTag: typeof TosiTag = TosiTag\n\nexport const tosiTag = TosiTag.elementCreator() as ElementCreator<TosiTag>\n\n/** @deprecated Use tosiTag instead */\nexport const xinTag = deprecated(\n (...args: Parameters<typeof tosiTag>) => tosiTag(...args),\n 'xinTag is deprecated, use tosiTag instead (tag is now <tosi-tag>)'\n) as ElementCreator<TosiTag>\n\ninterface Tag {\n value: string\n caption?: string\n color?: string\n background?: string\n icon?: string | HTMLElement\n}\n\ntype TagList = (string | Tag | null)[]\n\nexport class TosiTagList extends WebComponent {\n static preferredTagName = 'tosi-tag-list'\n\n static lightStyleSpec: XinStyleSheet = {\n ':host': {\n '--tag-list-bg': '#f8f8f8',\n '--touch-size': '44px',\n '--spacing': '16px',\n display: 'grid',\n gridTemplateColumns: 'auto',\n alignItems: 'center',\n background: vars.tagListBg,\n gap: vars.spacing25,\n borderRadius: varDefault.taglistRoundedRadius(vars.spacing50),\n overflow: 'hidden',\n },\n ':host[editable]': {\n gridTemplateColumns: `0px auto ${vars.touchSize}`,\n },\n ':host[editable][text-entry]': {\n gridTemplateColumns: `0px 2fr 1fr ${vars.touchSize}`,\n },\n ':host [part=\"tagContainer\"]': {\n display: 'flex',\n content: '\" \"',\n alignItems: 'center',\n background: vars.inputBg,\n borderRadius: varDefault.tagContainerRadius(vars.spacing50),\n boxShadow: vars.borderShadow,\n flexWrap: 'nowrap',\n overflow: 'auto hidden',\n gap: vars.spacing25,\n minHeight: `calc(${vars.lineHeight} + ${vars.spacing})`,\n padding: vars.spacing25,\n },\n ':host [part=\"tagMenu\"]': {\n width: vars.touchSize,\n height: vars.touchSize,\n lineHeight: vars.touchSize,\n textAlign: 'center',\n padding: 0,\n margin: 0,\n },\n ':host [hidden]': {\n display: 'none !important',\n },\n ':host button[part=\"tagMenu\"]': {\n background: vars.brandColor,\n color: vars.brandTextColor,\n },\n }\n\n static formAssociated = true\n\n static initAttributes = {\n name: '',\n textEntry: false,\n editable: false,\n placeholder: 'enter tags',\n disabled: false,\n required: false,\n }\n\n // value is the source of truth (Component watches this for form handling)\n value = ''\n\n // tags parses value into array\n get tags(): string[] {\n return splitTags(this.value).filter((tag) => tag !== '')\n }\n\n set tags(v: string[]) {\n this.value = joinTags(v)\n }\n\n private _availableTags: TagList = []\n\n get availableTags(): TagList {\n return this._availableTags\n }\n\n set availableTags(v: TagList | string) {\n if (typeof v === 'string') {\n this._availableTags = TosiTagList.parseAvailableTagsString(v)\n } else {\n this._availableTags = v\n }\n this.queueRender()\n }\n\n // Parse available-tags string (comma-delimited; `\\,` is a literal comma).\n private static parseAvailableTagsString(tagsStr: string): TagList {\n return splitTags(tagsStr).map((tag) => (tag === '' ? null : tag))\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n // Parse available-tags from HTML attribute if present and not already set programmatically\n const tagsAttr = this.getAttribute('available-tags')\n if (tagsAttr && this._availableTags.length === 0) {\n this._availableTags = TosiTagList.parseAvailableTagsString(tagsAttr)\n }\n }\n\n // Form lifecycle callbacks\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled\n }\n\n formResetCallback(): void {\n this.value = ''\n }\n\n addTag = (tag: string) => {\n const trimmed = tag.trim()\n if (trimmed === '' || this.tags.includes(trimmed)) {\n return\n }\n this.tags = [...this.tags, trimmed]\n this.queueRender(true)\n }\n\n toggleTag = (toggled: string) => {\n if (this.tags.includes(toggled)) {\n this.tags = this.tags.filter((t) => t !== toggled)\n this.queueRender(true)\n } else {\n this.addTag(toggled)\n }\n }\n\n enterTag = (event: KeyboardEvent) => {\n const { tagInput } = this.parts as { tagInput: HTMLInputElement }\n switch (event.key) {\n case ',':\n {\n const tag = tagInput.value.split(',')[0]\n this.addTag(tag)\n }\n break\n case 'Enter':\n {\n const tag = tagInput.value.split(',')[0]\n this.addTag(tag)\n }\n event.stopPropagation()\n event.preventDefault()\n break\n default:\n // do nothing\n }\n }\n\n popSelectMenu = () => {\n const { toggleTag } = this\n const { tagMenu } = this.parts\n const tags: TagList = [...this.availableTags]\n const extraTags = this.tags.filter((tag) => !tags.includes(tag))\n if (extraTags.length) {\n tags.push(null, ...extraTags)\n }\n const menuItems: MenuItem[] = tags.map((tag) => {\n if (tag === '' || tag === null) {\n return null\n } else if (typeof tag === 'object') {\n return {\n checked: () => this.tags.includes(tag.value),\n caption: tag.caption!,\n action() {\n toggleTag(tag.value)\n },\n }\n } else {\n return {\n checked: () => this.tags.includes(tag),\n caption: tag,\n action() {\n toggleTag(tag)\n },\n }\n }\n })\n\n popMenu({\n target: tagMenu as HTMLElement,\n width: 'auto',\n menuItems,\n })\n }\n\n content = () => [\n // this button is simply here to eat click events sent via a label\n button({ type: 'button', style: { visibility: 'hidden' }, tabindex: -1 }),\n div({\n part: 'tagContainer',\n class: 'row',\n role: 'list',\n ariaLabel: 'Selected tags',\n }),\n input({\n part: 'tagInput',\n class: 'elastic',\n ariaLabel: 'Enter new tag',\n onKeydown: this.enterTag,\n }),\n button(\n {\n type: 'button',\n title: 'add tag',\n ariaLabel: 'Select tags from list',\n ariaHaspopup: 'listbox',\n part: 'tagMenu',\n onClick: this.popSelectMenu,\n },\n icons.chevronDown()\n ),\n ]\n\n removeTag = (event: Event) => {\n if (this.editable && !this.disabled) {\n const tag = (event.target as HTMLElement).closest(\n TosiTag.tagName!\n ) as TosiTag\n this.tags = this.tags.filter((t) => t !== tag.caption)\n tag.remove()\n this.queueRender(true)\n }\n event.stopPropagation()\n event.preventDefault()\n }\n\n render(): void {\n super.render()\n\n const { tagContainer, tagMenu, tagInput } = this.parts as {\n tagContainer: HTMLDivElement\n tagMenu: HTMLButtonElement\n tagInput: HTMLInputElement\n }\n\n tagMenu.disabled = this.disabled\n tagInput.value = ''\n tagInput.setAttribute('placeholder', this.placeholder)\n if (this.editable && !this.disabled) {\n tagMenu.toggleAttribute('hidden', false)\n tagInput.toggleAttribute('hidden', !this.textEntry)\n } else {\n tagMenu.toggleAttribute('hidden', true)\n tagInput.toggleAttribute('hidden', true)\n }\n\n tagContainer.textContent = ''\n for (const tag of this.tags) {\n tagContainer.append(\n tosiTag({\n caption: tag,\n removeable: this.editable && !this.disabled,\n removeCallback: this.removeTag,\n })\n )\n }\n }\n}\n\n/** @deprecated Use TosiTagList instead */\nexport type XinTagList = TosiTagList\n/** @deprecated Use TosiTagList instead */\nexport const XinTagList: typeof TosiTagList = TosiTagList\n\nexport const tosiTagList =\n TosiTagList.elementCreator() as ElementCreator<TosiTagList>\n\n/** @deprecated Use tosiTagList instead */\nexport const xinTagList = deprecated(\n (...args: Parameters<typeof tosiTagList>) => tosiTagList(...args),\n 'xinTagList is deprecated, use tosiTagList instead (tag is now <tosi-tag-list>)'\n) as ElementCreator<TosiTagList>\n",
|
|
69
|
-
"export const version = '1.7.
|
|
70
|
+
"export const version = '1.7.4'",
|
|
70
71
|
"/*#\n# tooltip\n\nAutomatic tooltips for any element with `data-tooltip` or `title` attributes.\nCall `initTooltips()` once to activate. By default, `title` attributes are\nconverted to `data-tooltip` on hover so the browser's native tooltip is\nreplaced.\n\nTooltip text is parsed as **markdown** (if `marked` is available), so you\ncan use `*bold*`, `` `code` ``, links, etc.\n\n```js\nimport { elements } from 'tosijs'\nimport { initTooltips } from 'tosijs-ui'\n\nconst { button, div } = elements\n\ninitTooltips()\n\npreview.append(\n div(\n { style: { display: 'flex', gap: '12px', flexWrap: 'wrap', alignItems: 'center' } },\n button({ dataTooltip: 'Save your work' }, 'Save'),\n button({ dataTooltip: '**Bold** and `code` work' }, 'Markdown'),\n button({ title: 'This was a title attribute' }, 'Title → Tooltip'),\n )\n)\n```\n\n## Options\n\n```\ninitTooltips({\n convertTitles: true, // convert title attrs to data-tooltip (default true)\n delay: 250, // ms before showing (default 250)\n localize: false, // pass tooltip text through localize() (default false)\n})\n```\n*/\n\n/*{ \"parent\": \"Components\" }*/\n\nimport { elements, StyleSheet, varDefault } from 'tosijs'\nimport { marked } from 'marked'\nimport { popFloat, FloatPosition } from './pop-float'\nimport { TosiFloat } from './float'\nimport { localize } from './localize'\n\nconst { span } = elements\n\nexport interface TooltipOptions {\n convertTitles?: boolean\n delay?: number\n localize?: boolean\n}\n\nlet tooltipFloat: TosiFloat | null = null\nlet showTimeout: ReturnType<typeof setTimeout> | null = null\nlet currentTarget: HTMLElement | null = null\n\nconst TOOLTIP_CLASS = 'tosi-tooltip'\n\nconst tooltipStyleSpec = {\n [`.${TOOLTIP_CLASS}`]: {\n pointerEvents: 'none',\n padding: varDefault.tosiTooltipPadding('4px 10px'),\n borderRadius: varDefault.tosiTooltipRadius('6px'),\n background: varDefault.tosiTooltipBg('#333'),\n color: varDefault.tosiTooltipColor('#fff'),\n fontSize: varDefault.tosiTooltipFontSize('13px'),\n lineHeight: '1.4',\n maxWidth: varDefault.tosiTooltipMaxWidth('280px'),\n whiteSpace: 'pre-line',\n boxShadow: '0 2px 8px #0003',\n position: 'relative',\n },\n [`.${TOOLTIP_CLASS} p`]: {\n margin: '0',\n },\n [`.${TOOLTIP_CLASS} code`]: {\n background: '#fff2',\n padding: '0 4px',\n borderRadius: '3px',\n fontSize: '0.9em',\n },\n [`.${TOOLTIP_CLASS} a`]: {\n color: 'inherit',\n },\n [`.${TOOLTIP_CLASS}::before`]: {\n content: '\"\"',\n position: 'absolute',\n width: '8px',\n height: '8px',\n background: 'inherit',\n transform: 'rotate(45deg)',\n },\n [`.${TOOLTIP_CLASS}.tt-s::before`]: {\n top: '-4px',\n left: 'var(--tosi-tooltip-arrow)',\n },\n [`.${TOOLTIP_CLASS}.tt-n::before`]: {\n bottom: '-4px',\n left: 'var(--tosi-tooltip-arrow)',\n },\n [`.${TOOLTIP_CLASS}.tt-e::before`]: {\n left: '-4px',\n top: 'var(--tosi-tooltip-arrow)',\n },\n [`.${TOOLTIP_CLASS}.tt-w::before`]: {\n right: '-4px',\n top: 'var(--tosi-tooltip-arrow)',\n },\n}\n\n// Inject tooltip styles on first use (showTooltip / initTooltips) rather than at\n// import, so importing this module has no side effect and it tree-shakes when\n// unused. StyleSheet() dedupes by id; the flag avoids re-calling it.\nlet tooltipStylesInjected = false\nfunction ensureTooltipStyles(): void {\n if (tooltipStylesInjected) return\n tooltipStylesInjected = true\n StyleSheet('tosi-tooltip', tooltipStyleSpec)\n}\n\nfunction hideTooltip(): void {\n if (showTimeout !== null) {\n clearTimeout(showTimeout)\n showTimeout = null\n }\n if (tooltipFloat !== null) {\n tooltipFloat.remove()\n tooltipFloat = null\n }\n currentTarget = null\n}\n\nfunction arrowClass(position: FloatPosition): string {\n if (position.startsWith('s')) return 'tt-s'\n if (position.startsWith('n')) return 'tt-n'\n if (position.startsWith('e')) return 'tt-e'\n if (position.startsWith('w')) return 'tt-w'\n return 'tt-s'\n}\n\nfunction positionArrow(\n tooltipEl: HTMLElement,\n target: HTMLElement,\n position: FloatPosition\n): void {\n const targetRect = target.getBoundingClientRect()\n const tipRect = tooltipEl.getBoundingClientRect()\n const targetCx = targetRect.left + targetRect.width * 0.5\n const targetCy = targetRect.top + targetRect.height * 0.5\n\n let offset: number\n if (position.startsWith('s') || position.startsWith('n')) {\n offset =\n Math.max(8, Math.min(tipRect.width - 8, targetCx - tipRect.left)) - 4\n } else {\n offset =\n Math.max(8, Math.min(tipRect.height - 8, targetCy - tipRect.top)) - 4\n }\n tooltipEl.style.setProperty('--tosi-tooltip-arrow', offset + 'px')\n}\n\nfunction renderText(text: string, useLocalize: boolean): HTMLElement {\n if (useLocalize) {\n text = localize(text)\n }\n const el = span({ class: TOOLTIP_CLASS })\n el.innerHTML = marked.parseInline(text) as string\n return el\n}\n\nfunction showTooltip(\n target: HTMLElement,\n text: string,\n useLocalize: boolean\n): void {\n ensureTooltipStyles()\n hideTooltip()\n currentTarget = target\n\n const { top, left, width } = target.getBoundingClientRect()\n const cx = left + width * 0.5\n const h = window.innerHeight\n const w = window.innerWidth\n const position: FloatPosition = ((top > h * 0.5 ? 'n' : 's') +\n (cx > w * 0.5 ? 'w' : 'e')) as FloatPosition\n\n const content = renderText(text, useLocalize)\n content.classList.add(arrowClass(position))\n\n tooltipFloat = popFloat({\n content,\n target,\n position,\n remainOnScroll: 'remove',\n remainOnResize: 'remove',\n })\n\n requestAnimationFrame(() => {\n if (tooltipFloat && currentTarget) {\n positionArrow(content, target, position)\n }\n })\n}\n\nfunction findTooltipTarget(event: Event): HTMLElement | null {\n for (const node of event.composedPath()) {\n if (node instanceof HTMLElement && node.dataset.tooltip) {\n return node\n }\n }\n return null\n}\n\nexport function initTooltips(options: TooltipOptions = {}): void {\n ensureTooltipStyles()\n const {\n convertTitles = true,\n delay = 250,\n localize: useLocalize = false,\n } = options\n\n document.addEventListener('pointermove', (event: PointerEvent) => {\n if (convertTitles) {\n for (const node of event.composedPath()) {\n if (\n node instanceof HTMLElement &&\n node.title &&\n !node.dataset.tooltip\n ) {\n node.dataset.tooltip = node.title\n node.removeAttribute('title')\n break\n }\n }\n }\n\n const target = findTooltipTarget(event)\n\n if (target === currentTarget) return\n\n hideTooltip()\n\n if (!target) return\n const text = target.dataset.tooltip || null\n if (!text) return\n\n showTimeout = setTimeout(\n () => showTooltip(target, text, useLocalize),\n delay\n )\n })\n\n document.addEventListener('pointerleave', hideTooltip)\n\n document.addEventListener('pointerdown', hideTooltip)\n document.addEventListener('keydown', hideTooltip)\n window.addEventListener('scroll', hideTooltip, true)\n}\n",
|
|
71
72
|
"import * as xinjsui from './index'\nimport * as xinjs from 'tosijs'\n\nObject.assign(globalThis, { xinjs, xinjsui })\n"
|
|
72
73
|
],
|
|
73
|
-
"mappings": "4wKAAA,SAAS,EAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,OAAO,IAAI,SAAS,OAAO,EAAE,GAAG,aAAa,KAAK,OAAO,IAAI,KAAK,EAAE,QAAQ,CAAC,EAAE,GAAG,IAAS,OAAE,EAAE,IAAI,QAAa,QAAG,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,aAAa,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,IAAI,GAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,aAAa,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,GAAE,EAAE,CAAC,EAAE,GAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,KAAK,GAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,GAAG,GAAE,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,YAAY,GAAE,IAAI,KAAK,GAAG,aAAa,GAAG,IAAI,KAAK,GAAE,OAAO,IAAI,UAAU,EAAE,GAAE,OAAO,IAAI,WAAW,EAAE,GAAG,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,IAAI,eAAe,EAAE,GAAG,OAAO,IAAI,WAAW,EAAE,GAAG,OAAO,cAAc,EAAE,GAAE,OAAO,eAAe,EAAE,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAS,OAAE,EAAE,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,IAAI,SAAS,EAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,KAAK,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,GAAE,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,KAAS,QAAG,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,IAAI,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,IAAG,OAAO,IAAS,OAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,EAAE,IAAS,OAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAE,CAAC,IAAS,OAAE,MAAM,MAAM,4CAA4C,EAAE,EAAE,IAAG,EAAE,IAAI,GAAG,GAAG,GAAE,8CAA8C,EAAE,GAAG,GAAG,EAAE,gDAAgD,EAAE,GAAG,IAAI,QAAQ,GAAE,IAAI,QAAY,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,aAAa,QAAQ,CAAC,IAAI,EAAE,GAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,KAAK,GAAE,IAAI,EAAE,GAAE,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,EAAE,GAAE,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,KAAK,MAAM,KAAK,aAAa,oBAAoB,EAAE,QAAQ,WAAW,EAAE,UAAU,EAAE,GAAG,aAAa,SAAS,aAAa,iBAAiB,EAAE,YAAY,GAAG,CAAC,CAAC,EAAO,OAAE,YAAY,EAAE,UAAU,CAAC,EAAE,OAAO,GAAO,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,EAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,8BAA8B,GAAG,IAAI,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,EAAM,GAAG,IAAI,IAAI,KAAK,SAAS,aAAa,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,SAAS,QAAQ,EAAE,GAAG,EAAE,IAAI,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,QAAQ,EAAE,GAAG,OAAO,YAAY,EAAE,GAAG,OAAO,iBAAiB,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,QAAQ,CAAC,EAAE,OAAO,EAAM,KAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,MAAU,KAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,QAAQ,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,IAAS,OAAE,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,MAAW,OAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,EAAO,OAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,GAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,IAAS,QAAG,GAAG,IAAI,CAAC,EAAE,KAAU,OAAE,OAAO,GAAG,EAAE,CAAC,EAAO,YAAO,GAAG,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,IAAS,QAAG,GAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,KAAU,QAAG,IAAS,OAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,IAAS,OAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,OAAO,SAAS,EAAO,QAAG,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,KAAU,OAAE,EAAE,GAAG,CAAC,EAAO,QAAG,IAAS,OAAE,GAAG,IAAS,OAAE,EAAE,GAAG,EAAO,QAAG,IAAI,IAAI,GAAE,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,EAAO,WAAM,MAAM,8BAA8B,KAAK,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,EAAE,MAAM,GAAG,0CAA0C,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,MAAM,EAAE,aAAa,QAAQ,MAAM,GAAG,2CAA2C,CAAC,EAAE,SAAS,EAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,IAAS,QAAG,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,IAAS,QAAG,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAQ,QAAG,EAAE,SAAS,GAAG,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,IAAI,OAAY,QAAG,EAAE,SAAS,GAAG,EAAE,CAAC,IAAI,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAO,OAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,GAAG,MAAM,MAAM,iDAAiD,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAO,QAAG,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAO,KAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,GAAO,KAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAO,OAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAU,QAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAM,KAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAM,KAAC,GAAG,CAAC,OAAO,UAAU,eAAe,KAAK,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,MAAM,KAAU,WAAM,MAAM,8BAA8B,GAAG,EAAE,MAAM,MAAM,aAAa,MAAM,MAAM,WAAW,EAAE,IAAI,GAAE,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,MAAM,MAAM,2BAA2B,EAAE,OAAO,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,MAAM,MAAM,sBAAsB,EAAE,OAAO,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,MAAM,MAAM,oBAAoB,EAAE,OAAO,IAAQ,GAAG,OAAO,4BAA4B,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAS,OAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,CAAC,IAAI,EAAE,GAAE,EAAE,CAAC,EAAE,GAAG,IAAS,OAAE,EAAE,KAAK,GAAG,KAAK,KAAK,KAAK,GAAG,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,EAAE,OAAO,MAAM,GAAG,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,YAAY,KAAK,SAAS,WAAW,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,IAAI,KAAK,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,OAAO,IAAI,UAAU,IAAI,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,WAAW,KAAU,QAAG,aAAa,OAAO,KAAK,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,KAAU,QAAG,aAAa,SAAS,KAAK,KAAK,EAAE,EAAE,mBAAmB,EAAE,OAAY,WAAM,MAAM,+DAA+D,EAAE,GAAG,KAAK,YAAY,GAAG,MAAM,IAAI,OAAO,IAAI,WAAW,KAAK,SAAS,EAAO,WAAM,MAAM,0CAA0C,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,KAAU,OAAE,OAAO,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,KAAK,QAAQ,KAAK,kBAAkB,EAAE,IAAI,EAAE,MAAM,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,GAAQ,OAAE,GAAG,CAAC,QAAQ,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,QAAQ,MAAM,YAAY,EAAE,sBAAsB,UAAU,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,MAAM,YAAY,EAAE,sBAAsB,gBAAgB,IAAI,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,EAAE,SAAE,CAAQ,GAAG,OAAO,IAAI,WAAW,EAAE,EAAE,GAAG,GAAG,KAAK,QAAQ,QAAQ,kBAAkB,IAAI,GAAE,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,EAAE,GAAE,CAAC,EAAE,GAAG,IAAS,OAAE,MAAM,QAAQ,MAAM,wCAAwC,CAAC,EAAE,MAAM,uCAAuC,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,qBAAqB,EAAE,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAE,GAAE,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,GAAE,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,EAAE,CAAC,EAAO,WAAM,MAAM,sCAAsC,GAAO,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,iBAAiB,OAAO,EAAE,KAAU,QAAG,aAAa,mBAAmB,EAAE,aAAa,UAAU,EAAE,MAAM,eAAoB,WAAM,SAAS,GAAE,CAAC,EAAE,EAAE,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,OAAO,OAAO,MAAM,GAAG,EAAE,eAAe,KAAK,GAAE,EAAE,YAAY,EAAE,CAAC,KAAK,GAAE,EAAE,WAAW,CAAC,QAAQ,QAAQ,MAAM,GAAG,EAAE,eAAe,KAAK,GAAE,EAAE,YAAY,EAAE,CAAC,QAAQ,iBAAiB,MAAM,GAAG,EAAE,YAAY,KAAK,GAAE,EAAE,SAAS,EAAE,CAAC,KAAK,GAAE,EAAE,QAAQ,CAAC,KAAK,GAAE,EAAE,SAAS,CAAC,KAAK,GAAE,EAAE,WAAW,CAAC,YAAY,OAAO,EAAE,YAAY,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,GAAE,KAAK,MAAM,EAAE,IAAI,CAAC,KAAK,GAAE,KAAK,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,GAAE,EAAE,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,yCAAyC,EAAE,GAAG,GAAG,KAAK,MAAO,KAAI,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,MAAM,OAAO,GAAG,CAAC,EAAE,KAAK,OAAO,GAAG,CAAC,GAAO,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,OAAO,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,QAAQ,OAAO,CAAC,EAAE,UAAU,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,WAAW,qBAAqB,YAAY,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,MAAM,GAAQ,QAAG,aAAa,MAAM,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,aAAa,KAAK,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,OAAO,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAO,OAAE,MAAM,GAAG,EAAE,CAAC,EAAO,OAAE,MAAM,OAAO,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,MAAM,GAAQ,QAAG,OAAO,IAAI,SAAS,EAAE,MAAM,GAAG,CAAC,EAAO,QAAG,aAAa,KAAK,EAAE,MAAM,GAAG,GAAE,EAAE,SAAS,CAAC,KAAK,GAAE,EAAE,WAAW,CAAC,KAAK,GAAE,EAAE,WAAW,CAAC,IAAS,OAAE,MAAM,OAAO,CAAC,EAAE,KAAK,KAAK,eAAe,QAAQ,KAAK,MAAM,KAAK,EAAE,iBAAiB,QAAQ,CAAC,EAAE,EAAE,SAAS,MAAM,QAAQ,CAAC,EAAE,EAAE,IAAI,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,OAAO,GAAG,cAAc,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,eAAe,cAAc,UAAU,EAAE,gBAAgB,EAAE,OAAO,GAAG,KAAK,EAAE,MAAM,IAAI,KAAK,WAAW,OAAO,EAAE,YAAY,aAAa,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,SAAS,EAAE,cAAc,OAAO,EAAE,KAAK,EAAE,OAAO,OAAO,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,WAAW,qBAAqB,YAAY,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,GAAG,IAAI,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,SAAS,EAAE,cAAc,IAAI,GAAG,OAAO,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,OAAO,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,eAAe,OAAO,MAAM,KAAK,EAAE,iBAAiB,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,GAAG,CAAC,CAAC,UAAU,OAAO,EAAE,SAAY,eAAe,IAAI,WAAW,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,IAAI,SAAS,EAAE,YAAY,EAAO,QAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,aAAa,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAO,QAAG,aAAa,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,EAAO,WAAM,MAAM,sCAAsC,GAAO,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,QAAQ,IAAI,EAAE,CAAC,GAAG,IAAS,OAAE,aAAa,CAAC,EAAE,EAAE,WAAW,IAAI,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,OAAO,QAAQ,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,KAAK,CAAC,EAAO,OAAE,WAAW,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,IAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAC,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,kBAAkB,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,IAAI,SAAS,EAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,GAAE,EAAE,EAAE,CAAC,EAAE,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,mBAAmB,GAAG,mBAAmB,GAAG,MAAM,GAAE,KAAK,EAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,GAAG,EAAE,SAAS,GAAG,GAAG,EAAE,WAAW,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,UAAU,aAAa,UAAU,KAAK,UAAU,WAAW,UAAU,MAAM,UAAU,MAAM,UAAU,OAAO,UAAU,MAAM,UAAU,eAAe,UAAU,KAAK,UAAU,WAAW,UAAU,MAAM,UAAU,UAAU,UAAU,UAAU,UAAU,WAAW,UAAU,UAAU,UAAU,MAAM,UAAU,eAAe,UAAU,SAAS,UAAU,QAAQ,UAAU,KAAK,UAAU,SAAS,UAAU,SAAS,UAAU,cAAc,UAAU,SAAS,UAAU,UAAU,UAAU,SAAS,UAAU,UAAU,UAAU,YAAY,UAAU,eAAe,UAAU,WAAW,UAAU,WAAW,UAAU,QAAQ,UAAU,WAAW,UAAU,aAAa,UAAU,cAAc,UAAU,cAAc,UAAU,cAAc,UAAU,cAAc,UAAU,WAAW,UAAU,SAAS,UAAU,YAAY,UAAU,QAAQ,UAAU,QAAQ,UAAU,WAAW,UAAU,UAAU,UAAU,YAAY,UAAU,YAAY,UAAU,QAAQ,UAAU,UAAU,UAAU,WAAW,UAAU,KAAK,UAAU,UAAU,UAAU,KAAK,UAAU,MAAM,UAAU,YAAY,UAAU,KAAK,UAAU,SAAS,UAAU,QAAQ,UAAU,UAAU,UAAU,OAAO,UAAU,MAAM,UAAU,MAAM,UAAU,SAAS,UAAU,cAAc,UAAU,UAAU,UAAU,aAAa,UAAU,UAAU,UAAU,WAAW,UAAU,UAAU,UAAU,qBAAqB,UAAU,UAAU,UAAU,WAAW,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,UAAU,cAAc,UAAU,aAAa,UAAU,eAAe,UAAU,eAAe,UAAU,eAAe,UAAU,YAAY,UAAU,KAAK,UAAU,UAAU,UAAU,MAAM,UAAU,QAAQ,UAAU,OAAO,UAAU,iBAAiB,UAAU,WAAW,UAAU,aAAa,UAAU,aAAa,UAAU,eAAe,UAAU,gBAAgB,UAAU,kBAAkB,UAAU,gBAAgB,UAAU,gBAAgB,UAAU,aAAa,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,UAAU,YAAY,UAAU,KAAK,UAAU,QAAQ,UAAU,MAAM,UAAU,UAAU,UAAU,OAAO,UAAU,UAAU,UAAU,OAAO,UAAU,cAAc,UAAU,UAAU,UAAU,cAAc,UAAU,cAAc,UAAU,WAAW,UAAU,UAAU,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,UAAU,WAAW,UAAU,OAAO,UAAU,cAAc,UAAU,IAAI,UAAU,UAAU,UAAU,UAAU,UAAU,YAAY,UAAU,OAAO,UAAU,WAAW,UAAU,SAAS,UAAU,SAAS,UAAU,OAAO,UAAU,OAAO,UAAU,QAAQ,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,KAAK,UAAU,YAAY,UAAU,UAAU,UAAU,IAAI,UAAU,KAAK,UAAU,QAAQ,UAAU,OAAO,UAAU,UAAU,UAAU,OAAO,UAAU,MAAM,UAAU,MAAM,UAAU,WAAW,UAAU,OAAO,UAAU,YAAY,SAAS,EAAM,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,GAAE,WAAW,WAAgB,OAAE,WAAW,SAAS,cAAc,MAAM,EAAO,OAAE,GAAG,GAAE,GAAE,MAAM,QAAQ,OAAO,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,QAAS,QAAO,CAAC,EAAE,EAAE,SAAS,KAAK,CAAC,OAAO,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC,QAAS,QAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,GAAG,IAAS,OAAE,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,OAAO,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,cAAa,gBAAgB,GAAE,MAAM,MAAM,QAAQ,GAAE,MAAM,MAAM,EAAE,SAAS,KAAK,YAAY,EAAC,EAAE,EAAE,iBAAiB,EAAC,EAAE,MAAM,GAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,WAAW,YAAY,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,QAAS,QAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAM,KAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,oBAAoB,OAAO,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,GAAG,EAAE,mBAAmB,OAAO,GAAG,EAAE,IAAI,mBAAmB,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,KAAK,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,QAAS,OAAM,IAAI,EAAE,EAAE,EAAE,CAAC,QAAS,OAAM,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,GAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAE,EAAE,EAAE,CAAC,KAAM,QAAO,EAAE,CAAC,OAAO,IAAI,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,KAAK,CAAC,KAAM,iBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,KAAM,OAAM,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,OAAO,MAAM,KAAK,WAAW,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAM,IAAG,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAS,KAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAS,KAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC,KAAM,KAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,EAAE,IAAI,KAAK,EAAE,GAAG,EAAE,aAAc,KAAI,EAAE,CAAC,GAAG,KAAK,WAAW,KAAK,KAAK,UAAU,IAAI,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,aAAc,IAAG,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,QAAQ,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,SAAU,KAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,QAAQ,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,SAAS,KAAK,EAAE,KAAK,QAAQ,CAAC,SAAU,KAAI,EAAE,CAAC,IAAI,EAAE,KAAK,WAAW,IAAI,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,KAAM,WAAU,EAAE,CAAC,OAAO,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAM,KAAI,EAAE,CAAC,OAAO,KAAK,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,KAAK,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,EAAE,GAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,EAAE,GAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,EAAE,GAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,EAAE,GAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,GAAG,EAAE,IAAI,GAAG,IAAI,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,QAAQ,IAAI,cAAc,KAAK,SAAS,KAAK,OAAO,qBAAqB,KAAK,OAAO,+BAA+B,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,GAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,GAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,GAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,GAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,QAAS,SAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,EAAO,YAAO,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,qBAAqB,KAAK,SAAS,EAAE,SAAS,EAAE,KAAK,QAAQ,CAAC,KAAK,QAAS,yBAAwB,WAAY,gBAAe,IAAI,UAAW,iBAAgB,SAAU,sBAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,eAAe,IAAI,CAAC,EAAE,EAAE,eAAe,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,eAAe,QAAS,eAAc,EAAE,CAAC,GAAG,EAAE,gBAAgB,OAAO,EAAE,gBAAgB,GAAG,eAAe,IAAI,CAAC,EAAE,gBAAgB,GAAG,EAAE,gBAAgB,EAAE,QAAS,gBAAe,EAAE,CAAC,GAAG,EAAE,eAAe,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,MAAM,EAAE,eAAe,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,OAAO,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,cAAc,SAAS,EAAE,KAAK,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE;AAAA,EACt8kB,EAAE,KAAK;AAAA,CACR;AAAA,GACE,GAAG,EAAE,0BAA0B,KAAK,EAAE,wBAAwB,SAAS,cAAc,OAAO,EAAE,EAAE,wBAAwB,GAAG,yBAAyB,SAAS,KAAK,OAAO,EAAE,uBAAuB,EAAE,EAAE,wBAAwB,YAAY,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,eAAe,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC,EAAE,IAAI,EAAE,GAAE,CAAC,EAAE,GAAG,IAAS,OAAE,GAAG,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,mJAAmJ,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,IAAI,UAAU,CAAC,GAAG,KAAK,EAAE,QAAQ,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,GAAG,EAAE,WAAW,GAAG,EAAE,GAAG,EAAE,WAAW,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,OAAO,cAAc,KAAU,OAAE,KAAK,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAS,OAAE,MAAM,GAAG,GAAG,aAAa,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,GAAE,CAAC,EAAE,GAAG,OAAO,IAAI,UAAU,EAAE,aAAa,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,KAAK;AAAA,CAC3pC,EAAE,MAAM,GAAG,MAAM;AAAA,EAChB;AAAA,EACA,OAAY,YAAO,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,OAAO,IAAI,SAAS,CAAC,GAAG,IAAI,UAAU,MAAM,gBAAgB,OAAO,MAAM,MAAM,mDAAmD,EAAE,IAAI,EAAE,OAAO,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK;AAAA,CAC9Q,EAAE,MAAM,GAAG,IAAI;AAAA,EACd;AAAA,GACC,EAAE,KAAK;AAAA;AAAA,CAET,GAAG,GAAG,CAAC,IAAI,CAAC,GAAE,WAAW,6DAA6D,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,EAAE,KAAK,KAAK,OAAO,IAAI,UAAU,IAAI,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,aAAa,EAAE,EAAE,GAAG,EAAE,iBAAsB,QAAG,OAAO,IAAI,WAAW,EAAE,MAAM,oCAAoC,GAAG,MAAM,GAAG,EAAE,KAAK,EAAE,YAAY,KAAU,QAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,iBAAiB,OAAO,GAAG,EAAG,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAU,OAAE,CAAC,IAAI,EAAE,KAAK,GAAE,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,OAAO,MAAM,KAAK,OAAO,EAAE,GAAG,CAAC,EAAE,EAAG,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,UAAU,OAAO,EAAG,GAAG,EAAE,IAAI,KAAK,CAAC,EAAE,GAAE,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,8BAA8B,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,OAAO,QAAQ,QAAQ,QAAQ,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,YAAY,QAAQ,KAAK,cAAc,MAAM,QAAQ,MAAM,CAAC,EAAE,MAAM,uBAAuB,sBAAsB,GAAG,GAAQ,OAAE,GAAG,OAAO,KAAK,OAAO,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,OAAO,WAAW,KAAK,WAAW,CAAC,EAAE,QAAQ,MAAM,CAAC,YAAY,EAAE,8BAA8B,EAAE,OAAO,QAAQ,SAAS,EAAE,0BAA0B,EAAE,OAAO,EAAE,0BAA0B,EAAE,OAAO,EAAE,4BAA4B,EAAE,SAAS,gBAAgB,cAAc,EAAE,kCAAkC,EAAE,oBAAoB,EAAE,wCAAwC,EAAE,aAAa,EAAE,yBAAyB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,WAAW,IAAI,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,+BAA+B,2BAA2B,2BAA2B,6BAA6B,mCAAmC,yCAAyC,yBAAyB,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,iBAAiB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE,oBAAoB,SAAS,CAAC,GAAG,IAAI,GAAG,qCAAqC,GAAG,6BAAiC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,GAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,WAAW,IAAI,EAAE,EAAE,MAAM,YAAY,EAAE,KAAK,EAAE,KAAK,EAAO,OAAE,MAAM,GAAG,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,QAAQ,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,QAAQ,GAAG,OAAO,IAAI,SAAS,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,GAAG,GAAE,EAAE,EAAE,EAAE,GAAE,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,EAAO,QAAG,EAAE,EAAE,EAAE,EAAE,EAAO,OAAE,aAAa,QAAQ,CAAC,EAAM,KAAC,IAAI,EAAE,GAAE,CAAC,EAAE,EAAE,EAAE,YAAY,mBAAmB,GAAG,GAAG,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,IAAI,UAAU,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,gBAAgB,CAAC,EAAO,OAAE,aAAa,EAAE,CAAC,EAAO,QAAG,EAAE,KAAU,OAAE,CAAC,IAAI,cAAc,GAAG,WAAW,GAAG,aAAa,YAAY,IAAS,QAAG,aAAa,EAAE,EAAE,aAAa,EAAE,CAAC,EAAO,OAAE,GAAG,EAAO,QAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,OAAO,GAAG,EAAE,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,QAAQ,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAO,QAAG,GAAG,MAAM,OAAO,IAAI,SAAS,QAAQ,EAAE,KAAK,OAAO,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,EAAO,aAAQ,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,QAAQ,KAAK,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,OAAO,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,UAAU,OAAO,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,UAAU,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAO,QAAG,EAAE,KAAU,OAAE,EAAE,GAAG,EAAO,QAAG,OAAO,IAAI,UAAU,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,gBAAgB,CAAC,EAAO,OAAE,aAAa,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC,EAAO,QAAG,EAAE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,EAAE,CAAC,EAAO,QAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,SAAS,GAAG,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAS,QAAG,EAAE,QAAa,OAAE,GAAE,EAAE,EAAE,MAAM,aAAa,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAO,WAAM,MAAM,aAAa,EAAO,QAAG,EAAE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,UAAU,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,OAAO,cAAc,IAAI,UAAU,sCAAsC,IAAI,WAAW,WAAW,IAAI,OAAO,sBAAsB,KAAK,GAAG,EAAE,GAAE,OAAO,IAAI,OAAO,EAAE,UAAU,CAAC,0BAA0B,mBAAmB,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,IAAS,OAAE,GAAE,EAAE,EAAE,CAAC,EAAO,WAAM,MAAM,GAAG,8BAA8B,kBAAkB,EAAO,QAAG,GAAG,MAAM,OAAO,IAAI,UAAU,EAAE,IAAI,GAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAO,QAAG,GAAE,CAAC,EAAE,GAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAO,QAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,KAAU,OAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG,IAAS,OAAE,GAAG,GAAG,WAAW,SAAS,cAAc,CAAC,EAAO,QAAG,GAAG,WAAW,SAAS,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,GAAG,aAAa,SAAS,aAAa,kBAAkB,OAAO,IAAI,UAAU,OAAO,IAAI,SAAS,GAAG,aAAa,oBAAoB,EAAE,QAAQ,OAAO,CAAC,EAAO,OAAE,OAAO,CAAC,EAAO,QAAG,GAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAO,YAAO,OAAO,EAAE,CAAC,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,SAAS,uBAAuB,EAAE,QAAQ,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,SAAS,CAAC,IAAI,IAAI,EAAE,kBAAkB,GAAG,EAAE,EAAE,KAAU,OAAE,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,MAAM,MAAM,4CAA4C,EAAE,CAAC,EAAE,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAU,OAAE,EAAE,GAAG,IAAI,IAAI,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,MAAM,MAAM,4CAA4C,EAAE,CAAC,EAAE,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAU,OAAE,EAAE,GAAG,IAAI,IAAI,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,MAAM,MAAM,4CAA4C,EAAE,CAAC,EAAE,GAAG,IAAI,QAAQ,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,KAAK,QAAQ,KAAK,MAAM,KAAK,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,SAAS,IAAI,EAAE,EAAE,aAAa,QAAQ,GAAG,EAAE,GAAG,GAAG,KAAK,SAAS,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,SAAS,GAAG,IAAI,CAAC,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,SAAS,aAAa,OAAO,MAAM,OAAO,UAAU,QAAQ,SAAS,EAAE,GAAG,GAAG,GAAG,uEAAuE,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,EAAO,QAAG,EAAE,WAAW,GAAG,GAAG,EAAE,SAAS,GAAG,EAAE,MAAM,GAAG,IAAI,IAAS,QAAG,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,SAAS,GAAG,EAAE,MAAM,GAAG,KAAK,KAAU,WAAM,GAAG,KAAK,KAAK,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY,OAAO,EAAE,OAAO,IAAI,MAAM,GAAG,GAAE,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC,EAAE,GAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,WAAW,IAAI,EAAE,MAAM,MAAM,6CAA6C,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,GAAG,GAAG,GAAE,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,aAAa,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,KAAI,EAAE,cAAc,EAAE,EAAE,cAAc,IAAI,EAAE,IAAI,IAAG,GAAG,GAAG,KAAK,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO,IAAI,GAAG,GAAE,GAAG,GAAQ,OAAE,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,IAAI,GAAG,GAAE,GAAG,GAAQ,QAAG,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,GAAE,GAAG,GAAG,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,OAAO,GAAE,GAAG,KAAK,CAAC,EAAE,GAAE,GAAG,EAAE,OAAO,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAE,GAAG,OAAO,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,QAAQ,KAAK,0HAA0H,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,OAAO,QAAQ,OAAO,IAAI,GAAG,GAAE,GAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,OAAO,OAAO,MAAM,QAAQ,MAAM,IAAI,GAAE,CAAC,MAAM,UAAU,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAE,EAAE,CAAC,EAAE,MAAM,IAAI,GAAG,CAAC,OAAO,OAAO,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,GAAE,GAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,cAAc,MAAM,CAAC,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,aAAa,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,OAAO,eAAe,iBAAiB,aAAa,OAAO,GAAG,EAAE,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,OAAO,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,IAAI,SAAS,EAAE,EAAE,GAAE,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAE,EAAE,IAAI,GAAG,GAAG,GAAE,EAAE,CAAC,EAAE,GAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,QAAQ,QAAQ,UAAU,OAAO,KAAK,UAAU,cAAc,WAAW,aAAa,aAAa,MAAM,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,GAAE,MAAM,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,WAAW,MAAM,EAAE,CAAC,GAAE,OAAO,EAAE,CAAC,WAAW,OAAO,EAAE,CAAC,YAAY,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,aAAa,SAAS,EAAE,CAAC,cAAc,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,UAAU,MAAM,EAAE,CAAC,WAAW,MAAM,EAAE,CAAC,cAAc,SAAS,EAAE,CAAC,kBAAkB,aAAa,CAAC,CAAC,EAAE,GAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,QAAQ,IAAI,KAAK,EAAE,OAAO,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAE,GAAE,CAAC,EAAE,OAAO,OAAO,cAAc,SAAS,MAAM,IAAI,EAAE,OAAO,OAAO,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,SAAS,OAAO,OAAO,CAAC,EAAE,GAAG,IAAI,SAAS,OAAO,OAAO,CAAC,EAAE,OAAO,OAAO,WAAW,MAAM,IAAI,OAAO,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAS,OAAE,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,OAAO,IAAI,WAAW,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,GAAG,IAAI,IAAI,WAAW,IAAI,UAAU,MAAM,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAS,OAAE,OAAO,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,IAAI,SAAS,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,yBAAyB,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,cAAc,CAAC,EAAE,UAAU,UAAU,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,kBAAkB,GAAG,EAAE,MAAM,iBAAiB,GAAG,EAAE,MAAM,sBAAsB,GAAG,EAAE,MAAM,sBAAsB,EAAE,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,GAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAE,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,MAAM,OAAO,IAAI,SAAS,IAAI,MAAM,EAAE,GAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,GAAG,GAAG,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAU,QAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,GAAE,EAAE,CAAC,MAAM,CAAC,EAAO,OAAE,EAAE,GAAG,GAAG,aAAa,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAE,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,aAAa,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,GAAE,EAAE,CAAC,CAAC,EAAO,YAAO,EAAE,GAAG,EAAE,GAAE,EAAE,CAAC,CAAC,EAAE,EAAO,QAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,OAAO,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,EAAE,GAAE,CAAC,EAAE,GAAG,GAAG,MAAM,OAAO,IAAI,UAAU,GAAG,IAAI,QAAQ,IAAI,YAAY,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,IAAI,GAAG,OAAO,IAAI,MAAM,EAAE,GAAE,GAAE,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,OAAO,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC,EAAE,GAAE,GAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAE,EAAE,CAAC,CAAC,EAAE,EAAM,KAAC,IAAI,EAAE,EAAE,GAAG,GAAG,IAAI,MAAM,OAAO,IAAI,SAAS,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,IAAI,UAAU,IAAI,GAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,MAAM,OAAO,IAAI,SAAS,GAAG,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAO,aAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,IAAG,IAAI,YAAY,IAAI,aAAa,IAAI,UAAU,GAAG,CAAC,GAAG,GAAG,EAAE,UAAU,IAAI,EAAE,GAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAE,EAAE,IAAI,GAAG,GAAG,GAAE,EAAE,CAAC,EAAE,GAAE,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,GAAE,GAAG,GAAG,OAAO,IAAI,WAAW,MAAM,MAAM,qDAAqD,cAAc,EAAE,OAAO,GAAE,EAAE,CAAC,GAAG,GAAE,IAAI,MAAM,GAAE,GAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAC,EAAE,IAAI,GAAE,IAAI,MAAM,GAAE,GAAE,GAAG,EAAE,CAAC,EAAM,GAAG,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE,iBAAiB,EAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,EAAE,CAAC,IAAI,EAAE,GAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,WAAW,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,UAAU,CAAC,IAAI,GAAG,EAAE,QAAQ,OAAO,KAAK,EAAE,QAAQ,MAAM,EAAE,GAAE,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC,aAAa,QAAQ,WAAW,aAAa,UAAU,QAAQ,cAAc,YAAY,IAAI,IAAI,MAAM,CAAC,EAAE,eAAe,QAAQ,qBAAsB,sBAAqB,IAAI,QAAQ,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,aAAa,EAAE,KAAK,cAAc,IAAI,QAAQ,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,GAAE,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,aAAa,EAAE,EAAE,MAAM,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,aAAa,mBAAmB,EAAE,EAAE,KAAK,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,SAAS,OAAO,GAAG,EAAE,QAAQ,SAAS,SAAS,EAAE,MAAM,MAAM,+CAA+C,oBAAoB,EAAE,KAAK,UAAU,MAAM,KAAK,EAAE,QAAQ,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAO,QAAG,EAAE,SAAS,SAAS,EAAE,KAAK,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,KAAK,UAAU,GAAG,OAAO,EAAO,WAAM,MAAM,qEAAqE,EAAE,KAAK,QAAQ,EAAE,IAAI,EAAE,EAAE,aAAa,GAAG,KAAK,aAAa,IAAI,8BAA8B,IAAI,qCAAqC,KAAK,aAAa,KAAK,QAAQ,KAAK,KAAK,WAAW,KAAU,QAAG,KAAK,QAAQ,SAAS,cAAc,KAAK,EAAE,KAAK,WAAW,SAAS,cAAc,KAAK,EAAE,KAAK,QAAQ,UAAU,IAAI,sBAAsB,EAAE,KAAK,WAAW,UAAU,IAAI,sBAAsB,EAAE,KAAK,QAAQ,aAAa,OAAO,cAAc,EAAE,KAAK,WAAW,aAAa,OAAO,cAAc,EAAE,KAAK,QAAQ,aAAa,cAAc,MAAM,EAAE,KAAK,WAAW,aAAa,cAAc,MAAM,EAAE,GAAG,KAAK,KAAK,aAAa,aAAa,KAAK,QAAQ,CAAC,EAAE,KAAK,aAAa,aAAa,KAAK,WAAW,CAAC,EAAO,UAAK,aAAa,OAAO,KAAK,OAAO,EAAE,KAAK,aAAa,OAAO,KAAK,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,aAAa,UAAU,IAAI,mBAAmB,EAAE,IAAI,EAAE,KAAK,aAAa,MAAM,GAAG,GAAG,KAAK,EAAE,YAAY,iBAAiB,OAAO,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,mCAAmC,GAAG,KAAK,SAAS,MAAM,KAAK,YAAY,KAAK,KAAK,QAAQ,MAAM,WAAW,SAAS,KAAK,WAAW,MAAM,WAAW,SAAS,GAAG,EAAE,SAAS,MAAM,CAAC,KAAK,aAAa,aAAa,MAAM,EAAE,KAAK,aAAa,aAAa,OAAO,EAAE,EAAE,OAAO,MAAM,EAAE,GAAG,KAAK,aAAa,IAAI,KAAK,KAAK,cAAc,EAAE,SAAS,KAAK,QAAQ,KAAK,mGAAmG,EAAE,GAAG,CAAC,KAAK,cAAc,EAAE,SAAS,KAAK,GAAG,GAAG,QAAQ,KAAK,YAAY,EAAE,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,OAAO,KAAK,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,aAAa,iBAAiB,SAAS,KAAK,OAAO,EAAE,EAAE,QAAQ,kBAAkB,SAAS,OAAO,iBAAiB,SAAS,KAAK,OAAO,EAAE,OAAO,iBAAiB,SAAS,KAAK,OAAO,EAAO,UAAK,aAAa,iBAAiB,SAAS,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,GAAG,KAAK,gBAAgB,KAAK,OAAO,KAAK,eAAe,IAAI,WAAW,EAAE,YAAY,GAAG,KAAK,QAAQ,EAAE,KAAK,MAAM,GAAG,IAAS,OAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,IAAS,OAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,QAAQ,QAAQ,KAAK,SAAc,OAAE,EAAE,KAAK,QAAQ,OAAO,EAAE,KAAK,MAAM,EAAE,OAAO,KAAK,eAAe,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,QAAQ,GAAG,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,MAAM,KAAK,wBAAwB,YAAY,CAAC,IAAI,EAAE,KAAK,aAAa,YAAY,EAAE,EAAE,kBAAkB,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,YAAY,IAAI,EAAE,KAAK,aAAa,sBAAsB,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,EAAO,OAAE,KAAK,aAAa,aAAa,EAAE,KAAK,aAAa,UAAU,IAAI,EAAE,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,KAAK,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,KAAK,EAAE,CAAC,GAAG,EAAE,cAAc,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE,GAAG,EAAE,aAAa,GAAG,EAAE,EAAE,aAAa,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC,EAAM,KAAC,IAAI,EAAE,KAAK,KAAK,EAAE,EAAE,MAAM,GAAG,EAAE,cAAc,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,GAAG,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,OAAO,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,KAAK,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC,EAAE,KAAK,eAAoB,OAAE,IAAI,WAAW,EAAE,YAAY,GAAG,KAAK,QAAQ,EAAE,GAAE,CAAC,EAAE,EAAE,KAAK,aAAa,EAAE,GAAG,KAAK,aAAa,UAAU,OAAO,kBAAkB,EAAE,MAAM,SAAS,CAAC,EAAE,KAAK,QAAQ,SAAS,KAAK,KAAK,aAAa,aAAa,gBAAgB,OAAO,EAAE,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,gBAAgB,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,GAAG,EAAE,EAAE,IAAS,QAAG,IAAS,QAAG,IAAI,IAAI,GAAG,MAAM,IAAI,EAAE,WAAW,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE,eAAe,MAAM,IAAI,EAAE,WAAW,IAAI,EAAE,aAAa,OAAO,GAAG,GAAG,EAAE,eAAe,KAAK,CAAC,KAAK,2BAA2B,CAAC,EAAE,OAAO,KAAK,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,GAAG,KAAK,QAAQ,EAAE,KAAK,QAAQ,SAAS,aAAa,EAAE,EAAE,GAAG,GAAG,KAAK,CAAC,EAAE,IAAI,IAAI,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,GAAG,IAAS,OAAE,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,QAAQ,KAAK,MAAM,KAAK,KAAK,aAAa,QAAQ,EAAE,CAAC,GAAG,IAAI,KAAK,SAAS,IAAI,KAAK,WAAW,SAAS,IAAI,EAAE,EAAE,IAAG,GAAG,GAAG,KAAK,SAAc,QAAG,IAAI,GAAG,EAAE,OAAO,EAAE,IAAQ,KAAC,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS,IAAI,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,EAAM,KAAC,IAAI,EAAE,EAAE,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,cAAc,IAAI,CAAC,EAAE,GAAG,GAAG,KAAK,QAAQ,KAAK,EAAE,EAAE,OAAO,EAAO,OAAE,OAAO,EAAE,GAAG,KAAK,cAAc,OAAO,CAAC,EAAE,GAAG,KAAK,KAAK,YAAY,OAAO,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,KAAK,SAAS,MAAM,KAAK,YAAY,KAAK,KAAK,QAAQ,MAAM,OAAO,OAAO,CAAC,EAAE,KAAK,KAAK,WAAW,MAAM,OAAO,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,GAAG,IAAS,OAAE,SAAS,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,QAAQ,MAAM,gDAAgD,gBAAgB,QAAQ,4EAA2E,iEAAiE,EAAO,OAAE,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,cAAc,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,cAAc,IAAI,EAAE,CAAC,EAAE,QAAQ,MAAK,EAAE,GAAE,IAAG,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,SAAS,KAAK,cAAc,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,IAAG,OAAO,IAAI,SAAS,EAAE,GAAG,QAAQ,KAAK,EAAE,GAAG,KAAK,YAAY,KAAK,KAAK,aAAa,aAAa,EAAE,KAAK,UAAU,EAAO,UAAK,aAAa,OAAO,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,GAAE,GAAG,KAAK,KAAK,KAAK,QAAQ,MAAM,EAAE,GAAG,GAAG,EAAC,EAAE,KAAK,YAAY,IAAI,OAAO,CAAC,EAAE,CAAC,EAAM,KAAC,IAAI,EAAE,GAAG,KAAK,KAAK,QAAQ,MAAK,EAAE,GAAG,GAAE,CAAC,GAAG,GAAG,KAAK,QAAQ,SAAS,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,GAAE,EAAE,GAAG,GAAE,aAAa,OAAO,UAAU,EAAE,GAAE,aAAa,gBAAgB,CAAC,EAAE,GAAE,aAAa,gBAAgB,OAAO,EAAE,CAAC,CAAC,EAAO,aAAQ,KAAK,EAAE,EAAE,aAAa,OAAO,UAAU,EAAE,EAAE,aAAa,gBAAgB,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,GAAE,KAAK,QAAQ,QAAQ,KAAK,EAAE,CAAC,GAAG,EAAE,yBAAyB,GAAE,GAAG,IAAI,IAAG,oBAAoB,KAAK,KAAK,aAAa,aAAa,EAAE,GAAE,kBAAkB,EAAO,QAAG,KAAK,YAAY,KAAK,KAAK,aAAa,aAAa,EAAE,KAAK,UAAU,EAAO,UAAK,aAAa,OAAO,CAAC,EAAE,GAAE,EAAE,GAAG,EAAE,eAAe,KAAK,KAAK,2BAA2B,CAAC,EAAE,GAAG,GAAG,KAAK,QAAQ,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,0BAA0B,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,GAAG,EAAE,cAAc,EAAE,EAAE,QAAQ,KAAK,MAAM,KAAK,KAAK,aAAa,QAAQ,EAAE,CAAC,GAAG,IAAI,KAAK,SAAS,IAAI,KAAK,WAAW,SAAS,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,KAAK,SAAS,MAAM,KAAK,YAAY,KAAK,KAAK,QAAQ,MAAM,OAAO,OAAO,CAAC,EAAE,KAAK,KAAK,WAAW,MAAM,OAAO,OAAO,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,GAAG,GAAG,IAAS,OAAE,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAK,GAAG,EAAE,cAAc,EAAE,EAAE,cAAc,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAO,QAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,KAAU,QAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,QAAQ,MAAM,gEAAgE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAAQ,aAAa,EAAE,GAAG,CAAC,EAAE,QAAQ,OAAO,OAAO,QAAQ,MAAM,oDAAoD,EAAE,cAAc,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,MAAM,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,OAAO,EAAE,CAAC,EAAE,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,OAAO,SAAS,IAAI,MAAM,QAAQ,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,OAAO,QAAQ,MAAM,6DAA6D,CAAC,EAAE,GAAG,IAAI,SAAS,EAAE,SAAS,SAAS,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,IAAI,GAAG,OAAO,QAAQ,MAAM,wDAAwD,CAAC,EAAE,GAAG,IAAI,QAAQ,GAAG,EAAE,QAAQ,GAAG,GAAG,MAAM,aAAa,YAAY,CAAC,IAAI,EAAE,EAAE,OAAO,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,KAAK,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,kBAAkB,SAAS,EAAE,EAAE,OAAO,YAAY,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC,GAAG,EAAE,cAAc,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAE,EAAE,EAAE,OAAO,OAAO,QAAQ,EAAE,GAAE,EAAE,UAAU,MAAM,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,sBAAsB,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAE,EAAO,QAAG,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,EAAO,WAAM,GAAG,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAO,KAAC,IAAI,EAAE,EAAE,EAAE,OAAO,OAAO,OAAO,QAAQ,EAAE,EAAE,UAAU,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,UAAU,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,sBAAsB,EAAE,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE,EAAO,QAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAY,WAAM,GAAG,KAAK,SAAS,EAAE,GAAG,EAAE,EAAE,QAAQ,GAAG,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,sBAAsB,EAAE,IAAI,OAAO,QAAQ,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,EAAO,OAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAM,KAAC,IAAI,EAAE,EAAE,cAAc,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,SAAS,EAAE,OAAO,QAAQ,MAAM,+DAA+D,CAAC,EAAE,GAAG,EAAE,GAAG,eAAe,CAAC,MAAM,GAAG,IAAI,SAAS,SAAS,CAAC,CAAC,EAAE,MAAM,KAAQ,SAAS,GAAG,iBAAiB,IAAI,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,GAAE,IAAI,CAAC,EAAE,GAAG,GAAG,KAAK,OAAO,QAAQ,KAAK,EAAE,CAAC,IAAI,QAAQ,EAAE,QAAQ,GAAG,GAAG,KAAK,GAAG,GAAG,MAAM,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,KAAI,KAAK,EAAE,EAAE,KAAK,GAAG,EAAE,MAAK,EAAE,UAAU,CAAC,IAAQ,KAAC,GAAG,aAAa,YAAY,QAAQ,KAAK,gCAAgC,OAAO,EAAE,6EAA6E,EAAE,UAAU,GAAG,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,QAAQ,MAAM,KAAK,EAAE,iBAAiB,EAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,UAAU,EAAE,CAAC,EAAE,GAAE,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,iBAAiB,EAAC,CAAC,EAAE,QAAQ,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,cAAc,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,OAAO,aAAa,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,KAAK,OAAO,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,OAAO,WAAW,KAAK,aAAa,WAAW,EAAE,KAAK,KAAK,OAAO,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,GAAG,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,OAAO,WAAW,KAAK,aAAa,WAAW,OAAO,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,EAAC,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,GAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,KAAK,GAAG,GAAG,QAAQ,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,QAAQ,MAAM,wBAAwB,EAAE,MAAM,CAAC,EAAE,MAAM,6BAA6B,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,KAAK,EAAE,GAAG,EAAM,KAAC,IAAI,EAAE,EAAE,KAAI,KAAK,EAAE,IAAG,EAAE,EAAE,EAAE,KAAI,KAAK,EAAE,IAAG,EAAE,GAAG,OAAO,IAAI,UAAU,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,MAAM,CAAC,EAAE,EAAE,GAAQ,QAAG,aAAa,MAAM,GAAG,OAAO,IAAI,SAAS,EAAE,EAAE,QAAQ,EAAO,QAAG,OAAO,IAAI,SAAS,EAAE,EAAE,MAAM,GAAG,aAAa,MAAM,aAAa,KAAK,EAAE,QAAQ,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,EAAC,IAAI,GAAG,WAAW,UAAU,KAAK,GAAG,KAAK,iBAAiB,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,iBAAiB,QAAQ,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,MAAM,EAAE,UAAU,GAAG,GAAG,MAAM,GAAG,EAAE,GAAG,GAAG,KAAK,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE,GAAE,IAAI,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,EAAE,GAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,WAAW,GAAG,EAAE,GAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,OAAO,WAAW,KAAK,EAAE,aAAa,MAAM,EAAE,YAAY,YAAY,WAAW,GAAG,GAAG,QAAQ,KAAK,WAAW,4SAA4S,CAAC,GAAG,SAAS,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,aAAa,iBAAiB,MAAM,MAAM,wCAAwC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,IAAI,UAAU,EAAE,IAAI,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,UAAU,EAAE,MAAU,QAAG,IAAS,OAAE,CAAC,IAAI,MAAM,GAAG,EAAE,EAAE,OAAO,IAAI,SAAS,EAAE,EAAE,IAAG,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAW,OAAE,OAAO,IAAI,SAAS,EAAE,EAAE,IAAG,GAAG,GAAG,KAAK,MAAM,MAAM,+CAA+C,EAAE,IAAI,MAAM,GAAG,EAAE,EAAE,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE,GAAE,IAAI,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,EAAE,GAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,WAAW,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,GAAG,QAAQ,GAAG,OAAO,GAAE,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,kBAAkB,MAAM,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,IAAQ,KAAC,IAAI,EAAE,EAAE,GAAG,OAAO,OAAO,IAAI,WAAW,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,IAAI,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,KAAK,EAAE,CAAC,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC,EAAM,KAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC,EAAO,WAAM,MAAM,kCAAkC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,iBAAiB,EAAE,GAAG,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,GAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,aAAa,UAAU,GAAG,IAAI,GAAG,EAAE,aAAa,GAAG,EAAE,8BAA8B,IAAI,EAAE,EAAE,aAAa,WAAW,EAAE,GAAG,GAAG,EAAE,OAAO,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,GAAG,EAAE,uBAAuB,gBAAgB,IAAI,EAAE,EAAE,aAAa,WAAW,EAAE,GAAG,GAAG,EAAE,OAAO,SAAS,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAG,EAAE,2BAA2B,gBAAgB,IAAI,EAAE,EAAE,aAAa,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,OAAO,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,gBAAgB,GAAG,EAAE,qCAAqC,KAAK,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,UAAU,YAAY,EAAE,EAAE,CAAC,EAAO,OAAE,UAAU,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,cAAc,MAAM,SAAS,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,OAAO,kBAAkB,EAAE,GAAG,IAAI,QAAQ,GAAG,KAAK,SAAS,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,QAAQ,KAAK,EAAE,GAAG,EAAE,OAAO,cAAc,EAAE,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,qBAAqB,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,oBAAoB,GAAG,KAAK,EAAE,QAAQ,WAAW,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE;AAAA,EACl6zB,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,SAAS,KAAK,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,MAAM,UAAU,WAAW,OAAQ,UAAS,QAAS,uBAAuB,sBAAsB,sBAAsB,wBAAwB,uBAAuB,sBAAsB,SAAQ,aAAc,SAAQ,EAAE,CAAC,OAAO,KAAK,WAAW,YAAa,kBAAiB,EAAE,CAAC,OAAO,KAAK,WAAW,mBAAmB,MAAO,aAAY,EAAE,CAAC,OAAO,KAAK,WAAW,cAAc,GAAG,aAAa,EAAE,CAAC,OAAO,KAAK,WAAW,cAAc,GAAG,GAAG,cAAc,EAAE,CAAC,OAAO,KAAK,WAAW,eAAe,GAAG,GAAG,iBAAiB,CAAC,EAAE,CAAC,GAAG,KAAK,UAAU,GAAG,EAAE,KAAK,UAAU,YAAY,CAAC,YAAY,EAAE,EAAE,CAAC,EAAO,UAAK,UAAU,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,WAAW,YAAY,EAAE,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,WAAW,aAAa,EAAE,CAAC,YAAa,mBAAkB,EAAE,CAAC,IAAI,EAAE,KAAK,eAAe,GAAG,EAAE,MAAM,CAAC,SAAS,GAAG,OAAO,KAAK,CAAC,EAAE,IAAI,EAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,gBAAiB,iBAAiB,WAAU,QAAQ,EAAE,KAAK,EAAE,gBAAiB,UAAS,eAAgB,QAAO,EAAE,CAAC,OAAO,KAAK,SAAS,oBAAoB,YAAY,cAAc,GAAG,sBAAuB,UAAS,CAAC,EAAE,CAAC,OAAO,QAAQ,KAAK,6DAA6D,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,QAAS,eAAc,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,UAAU,eAAe,KAAK,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAW,OAAE,GAAE,qBAAqB,qFAAqF,EAAE,GAAG,EAAE,YAAiB,OAAE,GAAE,2BAA2B,yFAAyF,EAAE,GAAG,EAAE,UAAe,OAAE,GAAE,yBAAyB,gFAAgF,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,GAAG,GAAG,KAAK,GAAG,OAAO,EAAE,OAAO,UAAU,EAAE,OAAO,IAAI,GAAG,EAAE,GAAE,EAAE,IAAI,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,EAAO,OAAE,GAAG,EAAE,GAAG,eAAe,IAAI,CAAC,GAAG,KAAK,QAAQ,KAAK,GAAG,sBAAsB,EAAE,GAAG,EAAE,MAAM,YAAY,GAAG,KAAK,QAAQ,KAAK,GAAG,2CAA2C,EAAE,EAAE,GAAG,EAAE,MAAM,eAAe,IAAI,CAAC,IAAS,OAAE,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,eAAe,GAAG,IAAS,OAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAO,OAAE,EAAE,KAAK,UAAU,GAAG,GAAG,MAAM,CAAC,OAAO,UAAU,eAAe,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,kBAAkB,QAAQ,EAAE,CAAC,GAAG,KAAK,qBAAqB,EAAE,EAAE,EAAE,KAAK,IAAI,GAAG,OAAO,eAAe,EAAE,GAAG,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC,EAAE,OAAO,eAAe,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,gBAAgB,EAAE,GAAG,OAAO,EAAE,gBAAgB,cAAc,IAAI,EAAE,CAAC,GAAG,GAAE,iBAAiB,8EAA8E,EAAE,CAAC,KAAK,oBAAoB,KAAK,oBAAoB,IAAI,IAAI,QAAQ,KAAK,EAAE,KAAK,oBAAoB,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAE,CAAC,EAAE,OAAO,eAAe,KAAK,EAAE,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,UAAU,OAAO,KAAK,aAAa,CAAC,EAAO,QAAG,KAAK,aAAa,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,SAAS,WAAW,KAAK,aAAa,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAO,QAAG,EAAE,KAAU,OAAE,OAAO,EAAE,GAAQ,YAAO,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,WAAW,GAAG,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,aAAa,EAAE,EAAE,EAAO,UAAK,gBAAgB,CAAC,EAAE,KAAK,YAAY,GAAQ,QAAG,OAAO,EAAE,KAAK,UAAU,GAAG,IAAI,WAAW,KAAK,EAAE,EAAE,KAAK,aAAa,EAAE,CAAC,EAAE,KAAK,YAAY,EAAO,QAAG,OAAO,IAAI,UAAU,GAAG,MAAM,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,IAAS,QAAG,OAAO,IAAI,SAAS,KAAK,gBAAgB,CAAC,EAAO,UAAK,aAAa,EAAE,CAAC,EAAE,KAAK,YAAY,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,yBAAyB,KAAK,OAAO,EAAE,GAAG,IAAS,QAAG,EAAE,MAAW,QAAG,EAAE,MAAW,OAAE,OAAO,IAAI,EAAE,KAAK,aAAa,OAAO,EAAE,KAAK,aAAa,OAAO,EAAE,GAAE,KAAK,KAAK,EAAE,OAAO,KAAK,MAAM,OAAO,eAAe,KAAK,QAAQ,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,KAAK,cAAc,GAAG,KAAK,YAAY,EAAE,EAAE,CAAC,EAAE,UAAW,MAAK,EAAE,CAAC,IAAI,EAAE,KAAK,YAAY,KAAK,KAAK,WAAW,KAAK,GAAG,KAAK,QAAQ,KAAK,KAAK,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,SAAS,OAAO,GAAG,EAAE,KAAU,OAAE,CAAC,IAAI,EAAE,EAAE,cAAc,UAAU,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,cAAc,cAAc,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,EAAE,GAAG,GAAG,KAAK,MAAM,MAAM,eAAe,oBAAoB,EAAE,EAAE,gBAAgB,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,OAAO,wBAAwB,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,MAAM,KAAK,aAAa,IAAI,CAAC,EAAE,KAAK,YAAY,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,qBAAqB,IAAI,CAAC,EAAE,KAAK,YAAY,EAAE,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,uBAAuB,EAAE,KAAK,YAAY,gBAAgB,OAAO,KAAK,kBAAkB,YAAY,CAAC,KAAK,UAAU,KAAK,UAAU,KAAK,gBAAgB,EAAE,IAAI,EAAE,KAAK,YAAY,eAAe,GAAG,EAAE,KAAK,yBAAyB,CAAC,EAAE,KAAK,WAAW,GAAG,KAAK,QAAQ,kBAAkB,KAAK,KAAK,KAAK,OAAO,GAAE,KAAK,YAAY,EAAE,KAAK,yBAAyB,EAAE,wBAAwB,EAAE,CAAC,IAAI,EAAE,KAAK,YAAY,GAAG,GAAG,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,EAAE,eAAe,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,QAAQ,KAAK,OAAO,KAAK,IAAI,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,eAAe,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,CAAC,QAAQ,KAAK,OAAO,oBAAoB,CAAC,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,QAAQ,YAAY,EAAE,GAAG,EAAE,OAAO,UAAU,GAAG,KAAK,eAAoB,OAAE,QAAQ,KAAK,IAAI,2SAA2S,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,MAAM,KAAK,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI,cAAc,qDAAqD,uEAAsE,0EAA0E,8KAA8K,EAAE,EAAE,sBAAsB,EAAE,CAAC,IAAI,EAAE,KAAK,YAAY,eAAe,GAAG,CAAC,EAAE,OAAO,IAAI,EAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,IAAI,EAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,gBAAgB,EAAE,IAAI,EAAE,YAAY,UAAU,KAAK,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAO,OAAE,aAAa,KAAK,KAAK,EAAE,CAAC,GAAG,KAAK,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAO,OAAE,gBAAgB,KAAK,KAAK,CAAC,GAAG,eAAe,IAAI,KAAK,qBAAqB,CAAC,EAAE,oBAAoB,EAAE,CAAC,IAAI,EAAE,KAAK,gBAAgB,GAAG,IAAS,OAAE,OAAO,KAAK,gBAAqB,OAAE,OAAO,KAAK,aAAa,OAAO,KAAK,gBAAgB,IAAI,EAAE,IAAI,IAAI,QAAQ,KAAK,EAAE,GAAG,KAAK,aAAa,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,KAAK,EAAE,GAAG,EAAE,KAAK,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,aAAa,EAAE,GAAG,EAAE,EAAE,EAAO,OAAE,OAAO,EAAE,EAAE,EAAE,KAAK,gBAAgB,EAAE,EAAE,EAAE,wBAAwB,wBAAwB,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,YAAY,IAAI,IAAI,GAAG,CAAC,KAAK,wBAAwB,KAAK,wBAAwB,IAAI,IAAI,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,QAAQ,CAAC,QAAQ,KAAK,GAAG,KAAK,oFAAoF,EAAE,SAAS,GAAG,OAAO,IAAI,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,GAAG,KAAK,2BAA2B,iDAAiD,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,MAAM,GAAG,KAAK,kCAAkC,mIAAmI,yEAAyE,2FAA2F,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,yBAAyB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,MAAM,MAAM,EAAE,OAAO,eAAe,CAAC,EAAE,GAAG,EAAE,SAAS,KAAK,qBAAqB,EAAE,EAAE,CAAC,GAAG,oBAAoB,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,eAAe,KAAK,EAAE,CAAC,WAAW,GAAG,aAAa,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO,IAAI,UAAU,CAAC,GAAG,KAAK,aAAa,CAAC,EAAE,MAAM,GAAG,GAAG,KAAK,YAAY,IAAI,CAAC,EAAE,OAAO,KAAK,YAAY,IAAI,CAAC,EAAE,MAAM,GAAQ,QAAG,KAAK,aAAa,CAAC,EAAE,OAAO,OAAO,IAAI,SAAS,WAAW,KAAK,aAAa,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAO,QAAG,KAAK,YAAY,IAAI,CAAC,EAAE,OAAO,KAAK,YAAY,IAAI,CAAC,EAAO,YAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,IAAI,WAAW,GAAG,IAAI,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,aAAa,EAAE,EAAE,EAAO,UAAK,gBAAgB,CAAC,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,GAAQ,QAAG,OAAO,IAAI,UAAU,GAAG,IAAI,WAAW,KAAK,EAAE,EAAE,KAAK,aAAa,EAAE,CAAC,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,IAAI,EAAE,CAAC,EAAO,QAAG,OAAO,IAAI,UAAU,GAAG,MAAM,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,IAAS,QAAG,OAAO,IAAI,SAAS,KAAK,gBAAgB,CAAC,EAAO,UAAK,aAAa,EAAE,CAAC,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,wBAAwB,IAAI,CAAC,EAAE,6BAA6B,EAAE,CAAC,IAAI,EAAE,KAAK,wBAAwB,EAAE,KAAK,YAAY,eAAe,GAAG,GAAG,MAAM,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,yBAAyB,KAAK,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,KAAK,SAAS,IAAI,EAAE,EAAE,MAAM,OAAO,KAAK,GAAG,KAAK,qBAAqB,EAAE,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI,KAAK,QAAQ,YAAY,iCAAiC,8HAA8H,8DAA8D,qDAAqD,GAAG,iBAAiB,EAAE,CAAC,GAAG,KAAK,8BAA8B,EAAE,KAAK,qBAAqB,EAAE,GAAG,KAAK,YAAY,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,KAAK,KAAK,aAAa,OAAO,KAAK,IAAI,EAAE,GAAG,KAAK,YAAY,gBAAgB,CAAC,KAAK,aAAa,UAAU,EAAE,KAAK,aAAa,WAAW,GAAG,EAAE,IAAI,EAAE,KAAK,cAAc,KAAK,SAAS,GAAG,IAAS,OAAE,CAAC,GAAG,GAAG,QAAQ,IAAI,EAAE,KAAK,WAAW,KAAK,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,KAAK,iBAAiB,SAAS,KAAK,SAAS,EAAE,GAAG,KAAK,OAAO,MAAM,KAAK,aAAa,OAAO,GAAG,KAAK,KAAK,OAAO,KAAK,aAAa,OAAO,EAAE,GAAG,KAAK,WAAW,KAAK,QAAa,OAAE,KAAK,UAAU,aAAa,KAAK,KAAK,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,oBAAoB,EAAE,CAAC,GAAG,UAAU,IAAI,EAAE,iBAAiB,EAAE,CAAC,GAAG,KAAK,QAAa,OAAE,KAAK,MAAM,KAAK,cAAc,GAAG,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,aAAa,WAAW,EAAE,EAAO,UAAK,gBAAgB,UAAU,EAAE,wBAAwB,CAAC,EAAE,CAAC,GAAG,KAAK,QAAa,QAAG,OAAO,IAAI,SAAS,KAAK,MAAM,EAAE,cAAc,GAAG,cAAc,GAAG,WAAW,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,UAAU,OAAO,GAAG,CAAC,KAAK,cAAc,KAAK,cAAc,EAAE,GAAG,CAAC,KAAK,cAAc,KAAK,cAAc,GAAG,sBAAsB,IAAI,CAAC,GAAG,KAAK,eAAe,GAAG,GAAG,KAAK,SAAS,CAAC,QAAQ,GAAG,SAAS,EAAE,CAAC,EAAE,KAAK,WAAW,KAAK,QAAa,OAAE,KAAK,UAAU,aAAa,KAAK,KAAK,EAAE,KAAK,cAAc,GAAG,KAAK,cAAc,GAAG,KAAK,OAAO,EAAE,EAAE,UAAU,GAAG,cAAc,oBAAqB,SAAQ,EAAE,CAAC,OAAO,KAAK,aAAc,aAAY,EAAE,CAAC,GAAG,KAAK,UAAU,OAAO,QAAQ,QAAQ,EAAE,GAAG,KAAK,eAAe,KAAK,KAAK,cAAc,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,iBAAiB,EAAE,EAAE,OAAO,KAAK,cAAc,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,UAAU,EAAE,IAAI,EAAE,OAAO,KAAK,UAAU,WAAW,EAAE,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,CAAC,EAAE,KAAK,QAAQ,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,MAAM,OAAO,IAAI,UAAU,OAAO,IAAI,UAAU,GAAE,CAAC,EAAE,MAAM,GAAG,OAAO,OAAO,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,EAAE,iBAAiB,EAAE,UAAU,GAAG,EAAE,WAAW,CAAC,EAAE,gBAAgB,GAAE,mBAAmB,qEAAqE,EAAE,IAAI,UAAU,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG,KAAK,UAAU,QAAQ,KAAK,KAAK,6DAA6D,EAAE,EAAE,KAAK,UAAU,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,aAAa,CAAC,KAAK,MAAM,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,GAAG,EAAE,cAAc,EAAC,GAAG,KAAK,GAAG,IAAI,KAAK,OAAO,EAAE,QAAQ,KAAK,IAAI,KAAK,QAAQ,YAAY,kOAAkO,mEAAmE,+EAA+E,EAAO,QAAG,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,KAAK,UAAU,KAAK,cAAc,yBAAyB,IAAI,KAAK,IAAI,EAAE,MAAM,KAAK,KAAK,iBAAiB,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,KAAK,KAAK,iBAAiB,oBAAoB,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,QAAQ,EAAE,EAAE,MAAM,GAAG,IAAS,OAAE,EAAE,GAAG,OAAO,CAAC,EAAE,GAAG,KAAK,UAAU,GAAG,KAAK,OAAY,OAAE,KAAK,mBAAmB,GAAG,MAAM,EAAE,CAAC,GAAG,KAAK,eAAe,KAAK,WAAW,KAAK,QAAa,OAAE,KAAK,UAAU,aAAa,KAAK,KAAK,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,KAAK,WAAW,KAAK,QAAa,OAAE,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ,SAAS,KAAK,MAAM,OAAO,KAAK,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,WAAW,CAAC,OAAQ,kBAAiB,kBAAmB,gBAAe,CAAC,KAAK,EAAE,EAAE,QAAQ,WAAY,YAAW,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,cAAc,WAAW,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,aAAa,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,eAAe,EAAE,MAAM,WAAW,CAAC,OAAQ,kBAAiB,iBAAkB,gBAAe,CAAC,KAAK,EAAE,EAAE,QAAQ,KAAK,WAAW,EAAE,CAAC,MAAM,EAAE,GAAE,WAAW,oDAAoD,QAAS,aAAY,GAAG,WAAW,CAAC,IAAI,GAAG,GAAG,eAAe,EAAM,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,aAAa,QAAQ,WAAW,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,GAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAC,EAAE,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,aAAa,QAAQ,YAAY,KAAK,UAAU,CAAC,CAAC,EAAE,QAAQ,IAAI,iCAAiC,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,GAAO,GAAG,eAAe,GAAG,eAAe,GAAG,SAAS,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,QAAQ,QAAQ,EAAE,EAAE,OAAO,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE,EAAE,EAAE,gBAAgB,IAAI,CAAC,EAAE,OAAO,kBAAkB,EAAE,GAAG,EAAE,UAAU,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,GAAG,MAAO,IAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,OAAO,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,GAAG,UAAU,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,IAAI,EAAE,EAAE,KAAK,EAAE,QAAS,IAAG,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,OAAO,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,GAAG,WAAW,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,IAAI,EAAE,EAAE,EAAE,QAAQ,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,gBAAgB,OAAO,EAAE,OAAO,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,IAAI,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,IAAI,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAS,QAAG,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAE,EAAE,CAAC,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,GAAG,OAAO,GAAG,OAAO,WAAW,EAAE,GAAG,IAAI,iBAAiB,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,SAAS,GAAG,OAAO,GAAG,GAAG,EAAE,IAAI,IAAS,OAAE,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,KAAK,eAAe,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAE,GAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,iBAAiB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,EAAE,GAAE,CAAC,EAAE,GAAG,IAAS,OAAE,MAAM,MAAM,wEAAwE,EAAE,GAAG,GAAG,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAS,QAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAO,QAAG,IAAS,OAAE,CAAC,IAAI,EAAE,GAAE,GAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAE,CAAC,IAAI,IAAI,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAS,OAAE,OAAO,IAAI,EAAE,GAAE,GAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,IAAI,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAE,EAAE,CAAC,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,kBAAkB,IAAI,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,MAAM,gFAAgF,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,IAAI,IAAS,OAAE,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,EAAE,GAAE,CAAC,EAAE,GAAG,IAAS,OAAE,MAAM,MAAM,uEAAuE,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,GAAE,CAAC,IAAI,IAAI,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,CAAC,IAAS,OAAE,OAAO,IAAI,EAAE,GAAE,GAAE,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,QAAQ,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,GAAG,QAAQ,SAAS,CAAE,CAAC,EAAE,CAAC,OAAO,OAAO,OAAO,GAAE,CAAC,EAAE,GAAE,SAAS,EAAE,CAAC,EAAE,CAAC,OAAO,GAAE,aAAa,qDAAqD,EAAE,EAAG,CAAC,EAAE,IAAI,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAE,GAAG,EAAE,IAAI,EAAE,GAAE,GAAG,EAAE,IAAI,CAAC,OAAO,GAAE,IAAI,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,GAAE,iBAAiB,0DAA0D,EAAE,GAAG,CAAC,EAAE,OAAO,OAAO,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAE,GAAG,EAAE,GAAG,EAAE,GAAE,IAAI,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,GAAG,OAAO,GAAG,WAAW,EAAG,KAAK,EAAG,IAAI,GAAE,MAAM,GAAE,SAAS,GAAG,WAAW,GAAG,KAAK,EAAG,cAAc,GAAG,KAAK,GAAE,GAAG,GAAG,QAAQ,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,gBAAgB,EAAE,UAAU,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,IAAW,UAAG,MAAM,WAAW,CAAC,OAAQ,kBAAiB,uBAAwB,gBAAe,SAAU,gBAAe,CAAC,IAAI,WAAW,IAAI,GAAG,SAAS,SAAS,EAAE,OAAO,gBAAgB,CAAC,IAAI,QAAS,SAAQ,EAAE,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,GAAG,KAAU,OAAE,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,EAAE,EAAO,aAAQ,IAAI,gBAAgB,oBAAoB,GAAG,EAAE,GAAG,CAAC,KAAK,OAAO,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE,KAAK,gBAAgB,KAAK,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,GAAG,GAAG,eAAe,EAAE,MAAM,WAAW,CAAC,OAAQ,kBAAiB,oBAAqB,gBAAe,GAAG,UAAU,IAAI,QAAS,KAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,iBAAiB,+BAA+B,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,QAAQ,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,SAAS,WAAW,QAAQ,MAAM,gDAAgD,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,iBAAiB,EAAE,CAAC,MAAM,kBAAkB,EAAE,KAAK,KAAK,EAAE,CAAC,IAAI,GAAG,GAAG,eAAe,EAAE,MAAM,WAAW,EAAE,OAAQ,kBAAiB,sBAAuB,gBAAe,GAAG,WAAW,EAAE,CAAC,MAAM,EAAE,GAAE,gBAAgB,8DAA8D,EAAE,CAAC,IAAI,GAAG,GAAG,eAAe,EAAE,MAAM,WAAW,CAAC,OAAQ,kBAAiB,mBAAoB,gBAAe,GAAG,UAAU,IAAI,GAAG,WAAW,EAAE,CAAC,MAAM,EAAE,GAAE,aAAa,wDAAwD,OAAQ,KAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,iBAAiB,eAAe,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,QAAQ,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,SAAS,WAAW,QAAQ,MAAM,+CAA+C,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,iBAAiB,EAAE,CAAC,MAAM,kBAAkB,EAAE,KAAK,KAAK,EAAE,CAAC,IAAI,GAAG,GAAG,eAAe,ECsE1nnB,IAAM,GAAmB,CAAC,EAEnB,MAAM,WAAe,CAAU,OAC7B,kBAAmB,oBAEf,WAAU,CAAC,EAAiC,CACrD,OAAO,OAAO,GAAkB,CAAO,EAEvC,QAAW,IAAU,CAAC,GAAG,GAAO,SAAS,EACvC,EAAO,YAAY,QAIhB,gBAAiB,CACtB,UAAW,GACX,IAAK,EACP,QAEO,WAAyB,IAAI,IAEpC,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EACxB,GAAO,UAAU,IAAI,IAAI,EAG3B,oBAAoB,EAAG,CACrB,MAAM,qBAAqB,EAC3B,GAAO,UAAU,OAAO,IAAI,EAG9B,MAAM,EAAS,CACb,GACE,KAAK,YAAc,KAClB,KAAK,IACF,GAAiB,KAAK,aAAe,GACrC,GAAiB,KAAK,aAAe,IAEzC,KAAK,gBAAgB,SAAU,EAAK,EAEpC,UAAK,gBAAgB,SAAU,EAAI,EAGzC,CAEO,IAAM,GAAS,GAAO,eAAe,EC9C5C,IAAM,GAA4B,CAAC,EAC5B,SAAS,EAAS,CACvB,EACA,EACc,CACd,GAAI,GAAc,KAAS,OAAW,CACpC,GAAI,IAAuB,OAAW,CACpC,IAAM,EAAY,WAChB,GAEF,GAAc,GAAO,QAAQ,QAAQ,EAAG,GAAqB,CAAS,CAAC,EAGzE,IAAM,EAAY,EAAS,OAAO,CAAE,KAAI,CAAC,EAEzC,SAAS,KAAK,OAAO,CAAS,EAE9B,GAAc,GAAO,IAAI,QAAQ,CAAC,IAAY,CAC5C,EAAU,OAAS,IAAM,EAAQ,UAAU,EAC5C,EAGH,OAAO,GAAc,GAGvB,IAAM,GAAgC,CAAC,EAChC,SAAS,EAAU,CAAC,EAA6B,CACtD,GAAI,GAAkB,KAAU,OAAW,CACzC,IAAM,EAAc,EAAS,KAAK,CAChC,IAAK,aACL,KAAM,WACN,MACF,CAAC,EAED,SAAS,KAAK,OAAO,CAAW,EAEhC,GAAkB,GAAQ,IAAI,QAAQ,CAAC,IAAY,CACjD,EAAY,OAAS,EACtB,EAEH,OAAO,GAAkB,GCtH3B,IAAe,IACb,UAAW,klHACX,MAAO,mzDACP,IAAK,k1DACL,IAAK,k1DACL,QAAS,4nJACT,YAAa,+iEACb,aAAc,4tGACd,OAAQ,6uGACR,OAAQ,28EACR,KAAM,4yFACN,QAAS,4mBACT,SAAU,qIACV,KAAM,iZACN,OAAQ,iWACR,IAAK,qJACL,QAAS,4YACT,KAAM,krBACN,IAAK,ynBACL,SAAU,gHACV,QAAS,iMACT,YAAa,sLACb,aAAc,iPACd,cAAe,wPACf,YAAa,gOACb,aAAc,gOACd,UAAW,gOACX,WAAY,gOACZ,OAAQ,iLACR,SAAU,8YACV,QAAS,gMACT,aAAc,0IACd,OAAQ,yJACR,MAAO,8JACP,UAAW,sLACX,SAAU,sLACV,gBAAiB,yPACjB,QAAS,6JACT,QAAS,kSACT,KAAM,2JACN,UAAW,+HACX,KAAM,iKACN,SAAU,wKACV,KAAM,mLACN,SAAU,qHACV,IAAK,ySACL,UAAW,4KACX,SAAU,gPACV,UAAW,qNACX,OAAQ,4LACR,KAAM,6NACN,YAAa,0JACb,YAAa,2KACb,MAAO,+FACP,OAAQ,wRACR,OAAQ,0FACR,UAAW,wMACX,MAAO,yIACP,aAAc,8XACd,eAAgB,wKAChB,SAAU,wMACV,UAAW,yPACX,UAAW,gZACX,MAAO,iHACP,KAAM,6IACN,QAAS,6TACT,YAAa,idACb,OAAQ,uRACR,QAAS,6JACT,QAAS,4PACT,QAAS,6KACT,KAAM,yLACN,IAAK,sfACL,WAAY,4JACZ,KAAM,gJACN,UAAW,0QACX,SAAU,0MACV,OAAQ,8MACR,KAAM,iIACN,aAAc,8NACd,aAAc,oPACd,OAAQ,2KACR,WAAY,iKACZ,cAAe,mNACf,SAAU,wMACV,SAAU,8PACV,QAAS,yGACT,MAAO,yHACP,MAAO,mJACP,KAAM,qMACN,aAAc,qNACd,OAAQ,mSACR,IAAK,uJACL,YAAa,qJACb,QAAS,4MACT,MAAO,kYACP,UAAW,uNACX,SAAU,oQACV,SAAU,8SACV,KAAM,2KACN,KAAM,oaACN,OAAQ,0HACR,KAAM,wKACN,YAAa,2LACb,WAAY,wOACZ,OAAQ,+IACR,OAAQ,8GACR,MAAO,+NACP,KAAM,2TACN,UAAW,6MACX,UAAW,0LACX,SAAU,qKACV,eAAgB,iNAChB,OAAQ,uWACR,OAAQ,kUACR,MAAO,kPACP,KAAM,8OACN,UAAW,wTACX,KAAM,+NACN,WAAY,+NACZ,MAAO,4MACP,WAAY,gMACZ,QAAS,6LACT,KAAM,sKACN,MAAO,0MACP,MAAO,8OACP,KAAM,qLACN,UAAW,qOACX,OAAQ,oLACR,IAAK,uLACL,OAAQ,qMACR,OAAQ,oMACR,SAAU,oZACV,MAAO,2LACP,KAAM,6MACN,SAAU,sOACV,KAAM,4TACN,OAAQ,8bACR,KAAM,4JACN,MAAO,wMACP,OAAQ,sMACR,KAAM,4LACN,OAAQ,yJACR,IAAK,gNACL,UAAW,oOACX,SAAU,iKACV,IAAK,gOACL,KAAM,oLACN,cAAe,4PACf,cAAe,iIACf,OAAQ,qUACR,IAAK,6PACL,UAAW,wOACX,SAAU,iKACV,YAAa,sIACb,YAAa,4JACb,MAAO,8FACP,QAAS,yMACT,KAAM,mHACN,eAAgB,sKAChB,aAAc,sKACd,aAAc,wIACd,KAAM,gUACN,MAAO,gKACP,YAAa,yGACb,WAAY,yGACZ,QAAS,qJACT,QAAS,4VACT,UAAW,qLACX,YAAa,kLACb,MAAO,iJACP,QAAS,2NACT,QAAS,qLACT,UAAW,oZACX,eAAgB,ybAChB,cAAe,ybACf,YAAa,ubACb,SAAU,oaACV,cAAe,ybACf,MAAO,iWACP,SAAU,gJACV,WAAY,4IACZ,KAAM,iGACN,WAAY,kLACZ,WAAY,wMACZ,KAAM,0IACN,OAAQ,8LACR,MAAO,6IACP,QAAS,8OACT,MAAO,8NACP,OAAQ,gOACR,OAAQ,uJACR,gBAAiB,2IACjB,gBAAiB,2IACjB,cAAe,wIACf,cAAe,2IACf,UAAW,oOACX,SAAU,sJACV,YAAa,6IACb,YAAa,uJACb,IAAK,qKACL,KAAM,kOACN,SAAU,kRACV,OAAQ,4IACR,KAAM,oJACN,OAAQ,uQACR,SAAU,20DACV,OAAQ,oRACR,MAAO,qMACP,UAAW,yOACX,OAAQ,+GACR,YAAa,sMACb,aAAc,gNACd,QAAS,gRACT,QAAS,0JACT,MAAO,g0BACP,MAAO,iJACP,QAAS,0bACT,WAAY,gKACZ,MAAO,6NACP,QAAS,qMACT,OAAQ,gHACR,KAAM,6KACN,WAAY,wIACZ,IAAK,qeACL,QAAS,oaACT,OAAQ,oaACR,MAAO,6KACP,OAAQ,gKACR,IAAK,8LACL,OAAQ,wKACR,SAAU,4IACV,YAAa,4HACb,KAAM,4NACN,OAAQ,uRACR,MAAO,6LACP,OAAQ,6MACR,aAAc,4JACd,WAAY,2JACZ,SAAU,4JACV,MAAO,wPACP,GAAI,4JACJ,OAAQ,6GACR,QAAS,+OACT,KAAM,0LACN,SAAU,wHACV,UAAW,oJACX,OAAQ,0JACR,SAAU,uLACV,iBAAkB,qLAClB,WAAY,6IACZ,aAAc,+FACd,cAAe,8IACf,YAAa,iQACb,OAAQ,qMACR,UAAW,mMACX,UAAW,iMACX,SAAU,6OACV,MAAO,4OACP,KAAM,mJACN,MAAO,yOACP,SAAU,gNACV,MAAO,kKACP,UAAW,2LACX,QAAS,8JACT,QAAS,6LACT,QAAS,wMACT,OAAQ,gHACR,MAAO,uSACP,QAAS,+YACT,KAAM,2OACN,KAAM,gKACN,QAAS,gLACT,SAAU,2OACV,QAAS,sMACT,EAAG,wIACH,OAAQ,wQACR,IAAK,qHACL,OAAQ,oOACR,QAAS,wLACT,SAAU,8qBACV,WAAY,kNACZ,cAAe,6QACf,OAAQ,4SACR,WAAY,qkBACZ,WAAY,iuBACZ,QAAS,4SACT,IAAK,4cACL,OAAQ,qLACR,cAAe,kQACf,eAAgB,kQAChB,eAAgB,oBAChB,eAAgB,oBAChB,aAAc,kBACd,aAAc,kBACd,WAAY,cACZ,UAAW,aACX,SAAU,gBACV,WAAY,gBACZ,WAAY,aACZ,gBAAiB,sBACjB,gBAAiB,uBACjB,cAAe,uBACf,UAAW,gBACX,UAAW,iBACX,QAAS,iBACT,YAAa,kBACb,YAAa,mBACb,UAAW,mBACX,aAAc,mBACd,aAAc,oBACd,WAAY,oBACZ,eAAgB,kBAChB,cAAe,mBACf,YAAa,kBACf,ECqOO,IAAM,GAAc,CAAC,IAA8C,CACxE,OAAO,OAAO,GAAU,CAAQ,GAGrB,GAAc,CACzB,EACA,EACA,EACA,IACW,CAEX,IAAM,EACJ,aAAgB,WACZ,CAAC,CAAI,EACL,MAAM,KAAK,EAAK,iBAAiB,KAAK,CAAC,EAE7C,GAAI,EAAK,OAAS,EAAG,CACnB,IAAM,EAAQ,EAAqB,SAAS,MAAQ,UACpD,QAAQ,MACN,gCAAgC,iEAClC,EAGF,IAAM,EAAM,EAAK,GACjB,EAAI,aAAa,QAAS,4BAA4B,EACtD,QAAW,KAAQ,EAAI,iBACrB,sDACF,EAAG,CACD,GAAI,IAAS,OAAW,EAAK,aAAa,OAAQ,CAAI,EACtD,GAAI,IAAW,OAAW,EAAK,aAAa,SAAU,CAAM,EAC5D,GAAI,IAAgB,OAClB,EAAK,aAAa,eAAgB,OAAO,CAAW,CAAC,EAGzD,IAAM,EAAS,EAAI,iBAAiB,SAAS,EAC7C,EAAI,gBAAgB,OAAO,EAC3B,QAAW,IAAQ,CAAC,GAAG,CAAM,EAAoB,CAC/C,IAAM,EAAI,EAAK,MACf,GAAI,EAAE,KAAM,EAAK,aAAa,OAAQ,EAAM,QAAQ,EAAE,IAAI,EAAE,IAAI,EAChE,GAAI,EAAE,OAAQ,EAAK,aAAa,SAAU,EAAM,QAAQ,EAAE,MAAM,EAAE,IAAI,EACtE,GAAI,EAAE,YAAa,EAAK,aAAa,cAAe,EAAE,WAAW,EACjE,GAAI,EAAE,cAAe,EAAK,aAAa,gBAAiB,EAAE,aAAa,EACvE,GAAI,EAAE,eAAgB,EAAK,aAAa,iBAAkB,EAAE,cAAc,EAC1E,EAAK,gBAAgB,OAAO,EAI9B,MAAO,wCADM,mBAAmB,EAAI,SAAS,MAezC,GAAiB,CAAC,IACtB,MAAM,KAAK,CAAI,EAAI,EAAO,IAAM,EAErB,GAAwB,CACnC,CACE,OAAQ,eACR,KAAK,CAAC,EAAU,EAAO,EAAO,CAC5B,IAAM,EAAO,EAA2B,GAAG,QAAQ,IAAK,GAAG,EACrD,EAAW,IAAM,KAAK,IAAI,WAAW,CAAG,CAAC,EACzC,EAAY,EAAI,WAAW,GAAG,EAAI,UAAY,SAE9C,EAAO,GAAY,EAAU,CAAC,CAAC,EAC/B,EAAK,EACX,GAAI,EAAG,QAAS,CACd,IAAM,EAAO,EAAG,MAAM,WAAa,GACnC,EAAG,QACD,CACE,CAAE,UAAW,GAAG,gBAAoB,EACpC,CAAE,UAAW,GAAG,kBAAsB,CACxC,EACA,CACE,SAAU,EAAW,KACrB,WAAY,IACZ,WACF,CACF,EAEF,OAAO,GAAS,EAAU,EAAO,CAAI,EAEzC,EACA,CACE,OAAQ,KACR,MAAO,CAAC,IAAa,YAAY,SACnC,EACA,CACE,OAAQ,QACR,MAAO,CAAC,IAAa,oBAAoB,SAC3C,EACA,CACE,OAAQ,SACR,MAAO,CAAC,IAAa,gBAAgB,SACvC,EACA,CACE,OAAQ,SACR,MAAO,CAAC,IAAa,mBAAmB,MAC1C,CACF,EAEI,GAAgB,EAEpB,SAAS,EAAQ,CAAC,EAAc,EAAkC,CAChE,IAAM,EAAM,EAAS,IAAI,EACzB,EAAI,UAAY,EAChB,IAAM,EAAY,EAAI,cAAc,KAAK,EAGnC,EAAQ,EAAU,iBAAiB,MAAM,EAC/C,GAAI,EAAM,OAAS,EAAG,CACpB,IAAM,EAAQ,IAAI,IAClB,QAAW,KAAM,EAAO,CACtB,IAAM,EAAQ,EAAG,GACX,EAAQ,eAAe,EAAE,KAC/B,EAAM,IAAI,EAAO,CAAK,EACtB,EAAG,GAAK,EAGV,IAAM,EAAO,EAAU,UACnB,EAAU,EACd,QAAY,EAAO,KAAU,EAAO,CAClC,IAAM,EAAU,EAAM,QAAQ,sBAAuB,MAAM,EAC3D,EAAU,EACP,QAAQ,IAAI,OAAO,UAAU,OAAc,GAAG,EAAG,QAAQ,IAAQ,EACjE,QAAQ,IAAI,OAAO,UAAU,KAAY,GAAG,EAAG,UAAU,IAAQ,EAEtE,GAAI,IAAY,EACd,EAAU,UAAY,EAI1B,IAAM,EAAU,IAAI,IAAI,EAAU,SAAS,EAC3C,EAAQ,IAAI,WAAW,EACvB,IAAM,EAAM,GAAY,IACtB,CACE,MAAO,MAAM,KAAK,CAAO,EAAE,KAAK,GAAG,EACnC,QAAS,EAAU,aAAa,SAAS,CAC3C,EACA,GAAG,EACH,GAAG,EAAU,QACf,EAEA,GADA,EAAI,MAAM,YAAc,EAAW,oBAAoB,KAAK,EACxD,EAAQ,IAAI,QAAQ,EACtB,EAAI,MAAM,OAAS,OACnB,EAAI,MAAM,KAAO,eACZ,QAAI,EAAQ,IAAI,SAAS,EAC9B,EAAI,MAAM,OAAS,EAAW,eAAe,cAAc,EAI3D,EAAI,MAAM,KAAO,EAAW,aAAa,MAAM,EAE/C,OAAI,MAAM,OAAS,EAAW,eAAe,cAAc,EAC3D,EAAI,MAAM,KAAO,EAAW,aAAa,cAAc,EAGzD,OADA,EAAI,MAAM,OAAS,EAAW,aAAa,MAAM,EAC1C,EAIF,SAAS,EAAQ,CACtB,EACA,KACG,EACc,CACjB,IAAM,EAAU,EAAS,KACvB,CACE,MAAO,sBACP,SAAU,EACV,MAAO,CACL,QAAS,cACT,SAAU,WACV,cAAe,MACjB,CACF,EACA,GAAG,CACL,EAEA,QAAW,KAAQ,EACjB,GAAI,GAAQ,OAAO,IAAS,UAAY,EAAE,aAAe,GAAe,CACtE,IAAM,EAAQ,EACd,GAAI,EAAM,OAAS,OAAO,EAAM,QAAU,SACxC,OAAO,OAAO,EAAQ,MAAO,EAAM,KAAK,EAE1C,GAAI,EAAM,MACR,EAAQ,UAAU,IAAI,GAAG,OAAO,EAAM,KAAK,EAAE,MAAM,GAAG,CAAC,EAI7D,OAAO,EAGT,SAAS,EAAU,CAAC,EAAuB,CACzC,IAAM,EAAO,GACb,GAAI,EAAK,GAAO,MAAO,GACvB,IAAM,EAAS,GAAmB,CAAI,EACtC,OAAO,GAAU,MAAQ,CAAC,CAAC,EAAK,EAAO,UAGzC,SAAS,EAAW,CAAC,EAAc,EAAsC,CACvE,QAAW,KAAQ,GAAW,CAC5B,IAAI,EACA,EAEJ,GAAI,EAAK,kBAAkB,OAAQ,CACjC,IAAM,EAAK,IAAI,OAAO,EAAK,OAAO,OAAS,OAAO,EAC5C,EAAI,EAAK,MAAM,CAAE,EACvB,GAAI,CAAC,EAAG,SACR,EAAW,EAAE,EAAE,OAAS,GACxB,EAAW,EAAS,GAAG,YAAY,EAAI,EAAS,MAAM,CAAC,EACvD,EAAQ,EACH,KACL,GAAI,CAAC,EAAK,WAAW,EAAK,MAAM,GAAK,EAAK,QAAU,EAAK,OAAO,OAC9D,SACF,EACE,EAAK,EAAK,OAAO,QAAQ,YAAY,EACrC,EAAK,MAAM,EAAK,OAAO,OAAS,CAAC,EACnC,EAAQ,EAAK,OAIf,GAAI,CAAC,GAAW,CAAQ,EAAG,SAE3B,IAAM,EAAS,EAAK,MAAM,GAAe,CAAQ,EAAG,EAAO,CAAK,EAChE,GAAI,OAAO,IAAW,SAAU,OAAO,GAAY,EAAQ,CAAK,EAChE,GAAI,EAAQ,OAAO,EAGrB,OAAO,KAGT,IAAM,GAAgB,GAQhB,GACJ,oEAEF,SAAS,EAAkB,CAAC,EAGnB,CACP,IAAM,EAAQ,EAAK,MAAM,EAAS,EAClC,GAAI,CAAC,EAAO,OAAO,KACnB,IAAI,EAAW,EAAK,MAAM,EAAG,EAAM,KAAM,EACzC,GAAI,CAAC,EAAU,OAAO,KAEtB,GAAI,EAAS,SAAS,GAAG,EAAG,EAAW,EAAS,MAAM,EAAG,EAAE,EAC3D,GAAI,CAAC,EAAU,OAAO,KAGtB,GAAI,CAFS,GAEH,IASR,GAAI,CARgB,GAAU,KAAK,CAAC,IAAS,CAC3C,GAAI,EAAK,kBAAkB,OACzB,OAAO,EAAK,OAAO,KAAK,CAAQ,EAElC,OACE,EAAS,WAAW,EAAK,MAAM,GAAK,EAAS,OAAS,EAAK,OAAO,OAErE,EACiB,OAAO,KAG3B,IAAM,EAAsC,CAAC,EACvC,EAAW,EAAM,GAAG,MAAM,4CAA4C,EAC5E,GAAI,CAAC,EAAU,OAAO,KACtB,IAAM,EAAuB,CAAC,EAC9B,QAAW,KAAK,EAAU,CACxB,IAAM,EAAO,EAAE,EAAE,OAAS,GAC1B,GAAI,IAAS,KAAO,IAAS,IAAK,CAChC,IAAM,EAAM,EAAE,MAAM,EAAG,EAAE,EAEnB,EADQ,qBAAqB,KAAK,CAAG,EACrB,IAAM,EAAO,EAAa,GAChD,GAAI,IAAS,IACX,EAAM,KAAO,EAEb,OAAM,OAAS,EAEZ,QAAI,IAAS,IAClB,EAAM,YAAc,EAAE,MAAM,EAAG,EAAE,EAC5B,KACL,IAAM,EAAM,SAAS,EAAE,QAAQ,IAAK,GAAG,CAAC,EACxC,OAAQ,OACD,IACH,EAAM,QAAU,OAAO,EAAM,GAAG,EAChC,UACG,IACH,EAAW,KAAK,SAAS,EAAM,MAAM,EACrC,UACG,IACH,EAAW,KAAK,cAAc,KAAO,EACrC,UACG,IACH,EAAW,KAAK,cAAc,KAAO,EACrC,UACG,IACH,EAAW,KAAK,UAAU,OAAS,EACnC,UACG,IACH,EAAW,KAAK,IAAQ,EAAI,aAAe,YAAY,EACvD,QAIR,GAAI,EAAW,OAAS,EACtB,EAAM,UAAY,EAAW,KAAK,GAAG,EACrC,EAAM,gBAAkB,UAE1B,MAAO,CAAE,WAAU,OAAM,EAIpB,SAAS,EAAW,CAAC,EAAc,EAA+B,CACvE,GAAI,EAAK,SAAS,GAAG,EAAG,EAAO,EAAK,MAAM,EAAG,EAAE,EAC/C,IAAM,EAAO,GAET,EAAO,EACX,QAAS,EAAI,EAAG,EAAI,GAAe,IAAK,CACtC,IAAM,EAAO,EAAK,GAClB,GAAI,CAAC,EAAM,MACX,GAAI,EAAK,WAAW,GAAG,EAAG,OAAO,GAAS,EAAM,CAAK,EACrD,EAAO,EAET,GAAI,IAAS,EAAM,CACjB,IAAM,EAAW,GAAY,EAAM,CAAK,EACxC,GAAI,EAAU,OAAO,EACrB,IAAM,EAAS,GAAmB,CAAI,EACtC,GAAI,EAAQ,CACV,IAAM,EAAO,GAAY,EAAO,SAAU,CAAK,EAE/C,OADA,OAAO,OAAQ,EAAqB,MAAO,EAAO,KAAK,EAChD,GAKX,GAAI,EAAK,SAAS,GAAG,EAAG,CACtB,IAAM,EAAW,EAAK,MAAM,GAAG,EAEzB,EAAO,GAAY,EAAS,EAAS,OAAS,GAAI,CAAC,CAAC,EACpD,EAAW,EACd,MAAM,EAAG,EAAE,EACX,QAAQ,EACR,IAAI,CAAC,IAAS,CACb,IAAM,EAAO,GAAY,EAAM,CAAC,CAAC,EAOjC,OANA,OAAO,OAAQ,EAAqB,MAAO,CACzC,SAAU,WACV,MAAO,IACP,MAAO,OACP,OAAQ,MACV,CAAC,EACM,EACR,EACH,OAAO,GAAS,EAAM,EAAO,EAAiB,GAAI,CAAsB,EAI1E,IAAM,EAAW,GAAY,EAAM,CAAK,EACxC,GAAI,EAAU,OAAO,EAGrB,IAAM,EAAS,GAAmB,CAAI,EACtC,GAAI,EAAQ,CACV,IAAM,EAAO,GAAY,EAAO,SAAU,CAAK,EAE/C,OADA,OAAO,OAAQ,EAAqB,MAAO,EAAO,KAAK,EAChD,EAGT,GAAI,EACF,QAAQ,KAAK,QAAQ,kBAAqB,EAE5C,OAAO,GAAS,GAAS,OAAQ,CAAK,EAGjC,IAAM,EAAQ,IAAI,MAAM,GAAU,CACvC,GAAG,CAAC,EAAQ,EAA8B,CACxC,MAAO,IAAI,IAAyB,GAAY,EAAM,CAAK,EAE/D,CAAC,EAEM,MAAM,WAAgB,CAAa,OACjC,kBAAmB,kBACnB,gBAAiB,CACtB,QAAS,CAEP,mBAAoB,6BACpB,2BACE,8DACF,8BAA+B,qCAC/B,6BAA8B,oCAC9B,mBAAoB,+CACpB,QAAS,cACT,cAAe,cACf,OAAQ,eACR,YAAa,EAAW,oBAAoB,KAAK,EACjD,eAAgB,EAAW,uBAAuB,OAAO,EACzD,cAAe,EAAW,sBAAsB,OAAO,EACvD,KAAM,EAAW,aAAa,MAAM,EACpC,OAAQ,EAAK,YACf,EACA,wCAAyC,CACvC,OAAQ,EAAW,aAAa,MAAM,CACxC,CACF,QAEO,gBAAiB,CACtB,KAAM,GACN,KAAM,EACN,KAAM,GACN,OAAQ,GACR,YAAa,CACf,EAEA,MAAM,EAAS,CACb,MAAM,OAAO,EACb,KAAK,YAAc,GACnB,IAAM,EAAsB,CAAC,EAC7B,GAAI,KAAK,KACP,EAAM,OAAS,KAAK,KAAO,KAC3B,KAAK,MAAM,YAAY,mBAAoB,GAAG,KAAK,QAAQ,EAE3D,KAAK,MAAM,YAAY,kBAAmB,GAAG,KAAK,QAAQ,EAE5D,GAAI,KAAK,OACP,EAAM,OAAS,KAAK,OACpB,EAAM,YAAc,KAAK,YAE3B,GAAI,KAAK,KACP,EAAM,KAAO,KAAK,KAEpB,KAAK,OAAO,EAAM,KAAK,MAAM,CAAE,OAAM,CAAC,CAAC,EAE3C,CAEO,IAAM,GAAU,GAAQ,eAAe,EC9vB9C,IAAM,GAAO,IAAM,GAMnB,SAAS,EAAQ,CAAC,EAAc,EAAkB,CAChD,GAAI,CAAC,GAAO,EAAI,KAAK,IAAM,cACzB,OAAO,IAAI,EAAQ,OAAO,EAAG,EAAG,EAAG,CAAC,EACtC,IAAI,EAAM,EAAI,KAAK,EAAE,QAAQ,KAAM,EAAE,EACrC,GAAI,EAAI,SAAW,EACjB,EAAM,EACH,MAAM,EAAE,EACR,IAAI,CAAC,IAAM,EAAI,CAAC,EAChB,KAAK,EAAE,EACZ,GAAI,EAAI,SAAW,EAAG,GAAO,KAC7B,IAAM,EAAI,SAAS,EAAK,EAAE,EAC1B,GAAI,OAAO,MAAM,CAAC,GAAK,EAAI,SAAW,EAAG,OAAO,IAAI,EAAQ,OAAO,EAAG,EAAG,EAAG,CAAC,EAC7E,OAAO,IAAI,EAAQ,QACf,IAAM,GAAM,KAAO,KACnB,IAAM,GAAM,KAAO,KACnB,IAAM,EAAK,KAAO,KACnB,EAAI,KAAO,GACd,EAGK,MAAM,WAAY,CAAa,OAC7B,kBAAmB,gBAInB,gBAAiB,CAEtB,IAAK,GAGL,WAAY,GAIZ,IAAK,EAGL,UAAW,EACb,EAEA,aACA,cAEO,iBAAkB,CACvB,QAAS,CACP,QAAS,QACT,SAAU,UACZ,EACA,eAAgB,CACd,MAAO,OACP,OAAQ,MACV,EACA,uBAAwB,CACtB,OAAQ,GACR,MAAO,GACP,gBAAiB,cACjB,OAAQ,6BACR,gBAAiB,GAAY,EAAM,QAAQ,CAAC,EAC5C,mBAAoB,SACpB,iBAAkB,YAClB,OAAQ,OACR,aAAc,EACd,YAAa,OACb,QAAS,OACT,WAAY,2BACd,EACA,6BAA8B,CAC5B,UAAW,YACb,CACF,EAEA,QAAU,EAAS,OAAO,CAAE,KAAM,QAAS,CAAC,EAE5C,WAAW,EAAG,CACZ,MAAM,EAEN,KAAK,cAAgB,SAAY,CAC/B,IAAQ,WAAY,MAAM,GACxB,uCACA,SACF,EACA,OAAO,IACN,EAGL,MACA,OAEA,aAA4B,GAC5B,OAAsB,GAEd,QAAU,IAAM,CACtB,GAAI,KAAK,MAAO,CACd,GAAI,KAAK,SAAW,OAClB,KAAK,OAAO,KAAM,KAAK,OAAO,EAEhC,GAAI,KAAK,MAAM,eAAiB,OAC9B,KAAK,MAAM,OAAO,IAKxB,YAAY,EAAG,CACb,GAAI,KAAK,OACP,KAAK,OAAO,OAAO,EAIvB,UAAY,MACV,EACA,EACA,IACkB,CAClB,IAAQ,WAAY,MAAM,GACxB,6DACA,SACF,EAEA,EAAQ,YAAY,OAAO,EAAM,EAAM,KAAK,MAAO,CAAe,GAGpE,OAAS,MAAO,IAAwC,CACtD,IAAQ,WAAY,MAAM,GACxB,mDACA,SACF,EACM,EACJ,EAAQ,IAAI,uBAAuB,mBACjC,MACA,GACA,KAAK,KACP,GACM,YAAW,UAAS,OAAM,QAAS,EAC3C,GAAI,EACF,EAAgB,WAAa,EAC7B,EAAgB,kBAAoB,GAItC,IAAI,EACJ,GAAI,EACF,EAAM,MAAM,EAAgB,sBAAsB,CAAS,EACtD,QAAI,EACT,EAAM,MAAM,EAAgB,kBAAkB,CAAO,EAChD,QAAI,EACT,EAAM,EAAgB,aAAa,CAAI,EAEvC,YAAO,KAGT,IAAM,EAAO,EAAgB,YAAY,EAAE,GACrC,EAAU,EAAK,SAAS,OAC5B,CAAC,EAA6B,IAAgB,CAE5C,OADA,EAAI,EAAO,MAAQ,EACZ,GAET,CAAC,CACH,EAEA,MAAO,CAAE,kBAAiB,MAAK,OAAM,SAAQ,GAG/C,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAExB,IAAQ,UAAW,KAAK,MAExB,KAAK,aAAa,KAAK,MAAO,IAAY,CACxC,KAAK,QAAU,EAGf,IAAM,EAAa,KAAK,WACpB,GAAS,EAAS,KAAK,UAAU,EACjC,KASJ,GARA,KAAK,OAAS,IAAI,EAAQ,OACxB,EACA,GACA,GAAc,EAAW,EAAI,EACzB,CAAE,MAAO,GAAM,mBAAoB,EAAM,EACzC,MACN,EACA,KAAK,MAAQ,IAAI,EAAQ,MAAM,KAAK,MAAM,EACtC,EAAY,KAAK,MAAM,WAAa,EACxC,GAAI,KAAK,aACP,MAAM,KAAK,aAAa,KAAM,CAAO,EAIvC,GAAI,KAAK,IAAK,CACZ,IAAM,EAAQ,KAAK,IAAI,YAAY,GAAG,EACtC,MAAM,KAAK,UACT,KAAK,IAAI,MAAM,EAAG,EAAQ,CAAC,GAAK,IAChC,KAAK,IAAI,MAAM,EAAQ,CAAC,CAC1B,EAEF,GAAI,KAAK,MAAM,eAAiB,OAIf,IAAI,EAAQ,gBACzB,iBACA,CAAC,KAAK,GAAK,EACX,KAAK,GAAK,IACV,EACA,IAAI,EAAQ,QAAQ,EAAG,EAAG,CAAC,EAC3B,KAAK,KACP,EACO,cAAc,KAAK,MAAM,OAAQ,EAAI,EAI9C,GAAI,KAAK,KAAO,KAAK,MAAQ,GAAK,KAAK,MAAM,aAC3C,KAAK,MAAM,aAAa,KAAO,KAAK,IAItC,GAAI,KAAK,MAAM,OAAO,SAAW,EAAG,CAClC,IAAM,EAAO,IAAI,EAAQ,iBACvB,OACA,IAAI,EAAQ,QAAQ,EAAG,EAAG,CAAC,EAC3B,KAAK,KACP,EACA,EAAK,UAAY,IAGnB,GAAI,KAAK,UAAW,CAClB,IAAM,EAAM,IAAI,EAAQ,iBACtB,OACA,IAAI,EAAQ,QAAQ,GAAI,GAAI,CAAC,EAC7B,KAAK,KACP,EACA,EAAI,UAAY,IAElB,KAAK,OAAO,cAAc,KAAK,OAAO,EACvC,EAEL,CAEO,IAAM,GAAM,GAAI,eAAe,EC/V/B,MAAM,WAAwB,CAAa,OACzC,kBAAmB,oBAEnB,gBAAiB,CACtB,IAAK,GACL,KAAM,EACR,EAEA,QAAU,KACV,OAAuB,CACrB,SAAU,MACV,KAAM,GACN,SAAU,EACZ,QAEO,oBAEP,gBAEO,iBAAkB,CACvB,QAAS,CACP,MAAO,IACP,OAAQ,IACR,QAAS,cACX,CACF,EAEQ,SAAW,MAEf,QAAO,EAAY,CACrB,OAAO,KAAK,SAGd,WAAW,EAAG,CACZ,MAAM,EACN,GAAI,GAAgB,qBAAuB,OACzC,GAAgB,mBAAqB,GACnC,wEACA,WACF,EAIa,YAAc,IAAY,CACzC,KAAK,SAAW,IAGD,KAAO,EAAG,eAA0C,CAKnE,GAJA,KAAK,SAAW,GAEhB,KAAK,OAAO,UACV,KAAK,aAAe,KAAO,KAAK,WAAa,OAC3C,KAAK,OAAS,GAChB,KAAK,OAAO,cAAgB,KAAK,KACjC,OAAO,KAAK,OAAO,KACd,QAAI,KAAK,MAAQ,GACtB,OAAO,KAAK,OAAO,cACnB,KAAK,OAAO,KAAO,KAAK,IAExB,aAAQ,IACN,kGACA,gDACA,iBACA,gDACA,iBACA,gDACA,gBACF,EAGF,GAAI,KAAK,UAAW,CAClB,KAAK,UAAU,QAAQ,EACvB,IAAM,EAAO,KAAK,WAClB,GAAI,IAAS,KACX,EAAK,cAAc,KAAK,GAAG,OAAO,EAGtC,KAAK,UAAY,EAAU,cAAc,KAAK,MAAM,EACpD,KAAK,UAAU,iBAAiB,YAAa,KAAK,WAAW,GAG/D,MAAM,EAAS,CACb,MAAM,OAAO,EAEb,GAAgB,mBAAoB,KAAK,KAAK,IAAI,EAAE,MAClD,CAAC,IAAoB,CACnB,QAAQ,MAAM,CAAC,EAEnB,EAEJ,CAEO,IAAM,GACX,GAAgB,eAAe,EChJjC,IAAQ,UAAQ,QAAM,QAAQ,EAQvB,MAAM,WAAqB,CAAa,OACtC,kBAAmB,sBAEnB,gBAAiB,CACtB,KAAM,GACN,OAAQ,GACR,gBAAiB,EACjB,aAAc,KACd,UAAW,IACX,KAAM,GACN,KAAM,CACR,EAEQ,gBAAkB,KAAK,IAAI,EAC3B,SAEA,YAAc,IAAM,CAC1B,GAAI,KAAK,KAAO,GAAK,KAAK,KAAO,KAAO,KAAK,IAAI,EAAI,KAAK,gBACxD,KAAK,QAAQ,GAIT,MAAQ,KAEZ,KAAI,EAAW,CACjB,OAAO,KAAK,SAGV,KAAI,CAAC,EAAW,CAClB,IAAQ,WAAU,OAAM,WAAY,KAAK,MACzC,GAAI,KAAK,UAAY,EACnB,EAAQ,SAAW,EAAK,SAAW,GACnC,EAAI,EAEJ,OAAI,KAAK,IAAI,EAAG,KAAK,IAAI,KAAK,SAAU,CAAC,CAAC,EAC1C,EAAI,MAAM,CAAC,EAAI,EAAI,EAErB,GAAI,KAAK,QAAU,EACjB,KAAK,MAAQ,MAAM,CAAC,EAAI,EAAI,EAC5B,KAAK,cAAc,KAAK,MAAQ,EAAS,WAAW,EACpD,EAAK,SAAW,KAAK,MAAQ,GAAK,CAAC,KAAK,KACxC,EAAQ,SAAW,KAAK,MAAQ,KAAK,UAAY,CAAC,KAAK,QAIvD,aAAY,EAAkB,CAChC,MAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,OACxB,CAAC,IAAY,iBAAiB,CAAO,EAAE,UAAY,MACrD,KAGE,SAAQ,EAAW,CACrB,OAAO,KAAK,IACV,KAAK,KAAK,KAAK,aAAa,QAAU,KAAK,iBAAmB,EAAE,EAAI,EACpE,CACF,QAGK,iBAAkB,CACvB,QAAS,CACP,kBAAmB,GACnB,qBAAsB,QACtB,0BAA2B,QAC3B,2BAA4B,QAC5B,oBAAqB,GACrB,yBAA0B,QAC1B,iBAAkB,EAClB,oBAAqB,EAAK,gBAC1B,yBAA0B,GAC1B,uBAAwB,qBACxB,QAAS,OACT,cAAe,SACf,SAAU,UACZ,EACA,cAAe,CACb,QAAS,OACT,UAAW,MACb,EACA,YAAa,CACX,OAAQ,EAAK,gBACf,EACA,eAAgB,CACd,QAAS,OACT,OAAQ,OACR,UAAW,OACX,WAAY,cACZ,MAAO,EAAK,oBACZ,QAAS,CACX,EACA,0CAA2C,CACzC,SAAU,WACV,IAAK,EACL,OAAQ,EACR,MAAO,EAAK,mBACZ,OAAQ,CACV,EACA,oBAAqB,CACnB,KAAM,CACR,EACA,uBAAwB,CACtB,MAAO,CACT,EACA,wBAAyB,CACvB,QAAS,IACT,cAAe,MACjB,EACA,qBAAsB,CACpB,MAAO,EAAK,wBACd,EACA,sBAAuB,CACrB,MAAO,EAAK,yBACd,EACA,qBAAsB,CACpB,SAAU,UACZ,EACA,wBAAyB,CACvB,SAAU,cACV,SAAU,UACZ,EACA,oBAAqB,CACnB,QAAS,OACT,aAAc,QAChB,EACA,yDAA0D,CACxD,QAAS,MACX,EACA,aAAc,CACZ,WAAY,EAAK,oBACjB,aAAc,EAAK,gBACnB,OAAQ,EAAK,gBACb,MAAO,EAAK,gBACZ,WAAY,EAAK,qBACnB,EACA,iCAAkC,CAChC,WAAY,EAAK,yBACjB,OAAQ,EAAK,mBACb,MAAO,EAAK,mBACZ,OAAQ,EAAK,kBACf,EACA,kCAAmC,CACjC,WAAY,EAAK,yBACnB,EACA,qBAAsB,CACpB,WAAY,EAAK,uBACnB,EACA,wBAAyB,CACvB,QAAS,OACT,IAAK,EAAK,mBACV,eAAgB,SAChB,QAAS,EAAK,uBAChB,CACF,EAEA,OAAS,CAAC,IAAc,CACtB,OAAO,KAAK,IAAI,EAAI,KAAK,GAAK,GAAG,GAGnC,gBAAkB,IAAM,CACtB,IAAQ,WAAU,YAAa,KAAK,MAC9B,EAAO,EAAS,WAAa,EAAS,YAC3C,CAAC,GAAG,EAAS,QAAQ,EAAE,QAAQ,CAAC,EAAK,IAAU,CAC9C,EAAI,UAAU,OACZ,UACA,KAAK,MAAM,EAAQ,KAAK,gBAAkB,CAAI,IAAM,CACtD,EACD,EACD,KAAK,gBAAkB,KAAK,IAAI,EAChC,aAAa,KAAK,SAAS,EAC3B,KAAK,UAAY,WAAW,KAAK,aAAc,KAAK,UAAY,IAAI,GAGtE,aAAe,IAAM,CACnB,IAAQ,YAAa,KAAK,MACpB,EAAkB,KAAK,MAC3B,EAAS,WAAa,EAAS,WACjC,EACA,GAAI,IAAoB,KAAK,KAC3B,KAAK,KACH,EAAkB,KAAK,KACnB,KAAK,KAAK,CAAe,EACzB,KAAK,MAAM,CAAe,EAElC,KAAK,gBAAkB,KAAK,IAAI,GAGlC,KAAO,IAAM,CACX,KAAK,KAAO,KAAK,KAAO,EAAI,KAAK,KAAO,EAAI,KAAK,UAGnD,QAAU,IAAM,CACd,KAAK,KAAO,KAAK,KAAO,KAAK,SAAW,KAAK,KAAO,EAAI,GAG1D,eAAiB,CAAC,IAAiB,CACjC,IAAQ,YAAa,KAAK,MACpB,EAAQ,CAAC,GAAG,EAAS,QAAQ,EAAE,QAAQ,EAAM,MAAqB,EACxE,GAAI,EAAQ,GACV,KAAK,KAAO,KAAK,MAAM,EAAQ,KAAK,eAAe,GAI/C,UACA,eACR,aAAa,CAAC,EAAkB,EAAmB,GAAI,EAAY,EAAG,CACpE,qBAAqB,KAAK,cAAc,EACxC,IAAQ,YAAa,KAAK,MAC1B,GAAI,IAAqB,GAAI,CAC3B,EAAmB,EAAS,WAC5B,EAAY,KAAK,IAAI,EACrB,KAAK,eAAiB,sBAAsB,IAAM,CAChD,KAAK,cAAc,EAAU,EAAkB,CAAS,EACzD,EACD,OAEF,IAAM,GAAW,KAAK,IAAI,EAAI,GAAa,KAC3C,GACE,GAAW,KAAK,cAChB,KAAK,IAAI,EAAS,WAAa,CAAQ,EAAI,EAE3C,EAAS,WAAa,EACtB,KAAK,eAAiB,KAEtB,OAAS,WACP,EACA,KAAK,OAAO,EAAU,KAAK,YAAY,GAAK,EAAW,GACzD,KAAK,eAAiB,sBAAsB,IAAM,CAChD,KAAK,cAAc,EAAU,EAAkB,CAAS,EACzD,EAIL,QAAU,IAAM,CACd,GACE,CAAE,KAAM,OAAQ,EAChB,GAAO,CAAE,MAAO,iBAAkB,KAAM,MAAO,EAAG,EAAM,YAAY,CAAC,EACrE,GACE,CAAE,MAAO,SAAU,KAAM,QAAS,KAAM,UAAW,EACnD,GAAI,CAAE,KAAM,MAAO,EAAG,GAAK,CAAC,CAC9B,EACA,GAAO,CAAE,MAAO,aAAc,KAAM,SAAU,EAAG,EAAM,aAAa,CAAC,CACvE,EACA,GAAI,CAAE,MAAO,0BAA2B,KAAM,QAAS,KAAM,UAAW,CAAC,CAC3E,EAEA,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EAExB,KAAK,oBAAsB,WAC3B,KAAK,gBAAkB,aACvB,KAAK,aAAe,OAEpB,IAAQ,OAAM,UAAS,WAAU,YAAa,KAAK,MACnD,EAAK,iBAAiB,QAAS,KAAK,IAAI,EACxC,EAAQ,iBAAiB,QAAS,KAAK,OAAO,EAC9C,EAAS,iBAAiB,SAAU,KAAK,eAAe,EACxD,EAAS,iBAAiB,QAAS,KAAK,cAAc,EAEtD,KAAK,gBAAkB,KAAK,IAAI,EAChC,KAAK,SAAW,YAAY,KAAK,YAAa,GAAG,EAGnD,oBAAoB,EAAG,CACrB,cAAc,KAAK,QAAQ,EAG7B,MAAM,EAAG,CACP,MAAM,OAAO,EAEb,IAAQ,OAAM,SAAQ,eAAc,YAAa,MACzC,WAAU,OAAM,UAAS,QAAS,KAAK,MAE/C,EAAa,QAAQ,CAAC,IAAS,CAC7B,EAAK,KAAO,QACb,EACD,EAAK,MAAM,oBAAsB,GAC/B,IAAM,KAAK,iBAAmB,EAAI,KAAK,cAEtC,OAAO,EAAa,MAAM,EAC1B,KAAK,EACR,EAAK,MAAM,OAAS,EAAI,KAAK,UAAY,IAAM,IAC/C,EAAS,YAAc,GACvB,EAAS,OACP,GAAG,EAAa,IAAI,CAAC,EAAG,IACtB,GAAO,CAAE,MAAO,QAAQ,EAAQ,IAAK,MAAO,KAAM,CAAC,CACrD,CACF,EAEA,KAAK,gBAAgB,EACrB,EAAS,MAAM,QAAU,GAAQ,EAAW,EAAI,GAAK,OACrD,EAAK,OAAS,EAAQ,OAAS,EAAE,GAAU,EAAW,GAE1D,CAKO,IAAM,GAAmC,GAEnC,GACX,GAAa,eAAe,EAGjB,GAAc,GCxV3B,IAAQ,OAAK,SAAS,EAcf,SAAS,EAAS,CAAC,EAAgB,EAA2B,CACnE,IAAM,EAAI,EAAO,MAAM;AAAA,CAAI,EACrB,EAAI,EAAM,MAAM;AAAA,CAAI,EACpB,EAAI,EAAE,OACN,EAAI,EAAE,OAGN,EAAkB,MAAM,KAAK,CAAE,OAAQ,EAAI,CAAE,EAAG,IAChD,MAAM,EAAI,CAAC,EAAE,KAAK,CAAC,CACzB,EACA,QAAS,EAAI,EAAI,EAAG,GAAK,EAAG,GAAK,EAC/B,QAAS,EAAI,EAAI,EAAG,GAAK,EAAG,GAAK,EAC/B,EAAI,GAAG,GACL,EAAE,KAAO,EAAE,GACP,EAAI,EAAI,GAAG,EAAI,GAAK,EACpB,KAAK,IAAI,EAAI,EAAI,GAAG,GAAI,EAAI,GAAG,EAAI,EAAE,EAI/C,IAAM,EAAkB,CAAC,EACrB,EAAI,EACJ,EAAI,EACR,MAAO,EAAI,GAAK,EAAI,EAClB,GAAI,EAAE,KAAO,EAAE,GACb,EAAI,KAAK,CAAE,GAAI,UAAW,KAAM,EAAE,EAAG,CAAC,EACtC,GAAK,EACL,GAAK,EACA,QAAI,EAAI,EAAI,GAAG,IAAM,EAAI,GAAG,EAAI,GACrC,EAAI,KAAK,CAAE,GAAI,SAAU,KAAM,EAAE,EAAG,CAAC,EACrC,GAAK,EAEL,OAAI,KAAK,CAAE,GAAI,MAAO,KAAM,EAAE,EAAG,CAAC,EAClC,GAAK,EAGT,MAAO,EAAI,EACT,EAAI,KAAK,CAAE,GAAI,SAAU,KAAM,EAAE,EAAG,CAAC,EACrC,GAAK,EAEP,MAAO,EAAI,EACT,EAAI,KAAK,CAAE,GAAI,MAAO,KAAM,EAAE,EAAG,CAAC,EAClC,GAAK,EAEP,OAAO,EAOT,IAAM,GAAiC,CAAE,QAAS,IAAK,IAAK,IAAK,OAAQ,GAAI,EAEtE,MAAM,WAAiB,CAAqB,OAC1C,kBAAmB,kBAInB,gBAAiB,CACtB,SAAU,GACV,SAAU,EACZ,QAEO,iBAAkB,CACvB,QAAS,CACP,QAAS,QACT,SAAU,OACV,KAAM,4CACN,WAAY,4BACZ,MAAO,8BACT,EAGA,kBAAmB,CACjB,QAAS,MACX,EACA,aAAc,CACZ,QAAS,OACT,oBAAqB,YACrB,WAAY,WACZ,UAAW,YACb,EACA,qBAAsB,CACpB,UAAW,SACX,WAAY,OACZ,QAAS,KACX,EACA,YAAa,CACX,WAAY,kCACd,EACA,oBAAqB,CAAE,MAAO,qCAAsC,EACpE,eAAgB,CACd,WAAY,qCACd,EACA,uBAAwB,CAAE,MAAO,wCAAyC,CAC5E,EAEA,QAAU,IAAM,CAAC,GAAI,CAAE,KAAM,MAAO,CAAC,CAAC,EAEtC,MAAM,EAAS,CACb,MAAM,OAAO,EACb,IAAM,EAAQ,GAAU,KAAK,SAAU,KAAK,QAAQ,EACpD,KAAK,MAAM,KAAK,gBACd,GAAG,EAAM,IAAI,CAAC,IACZ,GACE,CAAE,MAAO,kBAAkB,EAAK,IAAK,EACrC,GAAK,CAAE,MAAO,WAAS,EAAG,GAAO,EAAK,GAAG,EAEzC,GAAK,CAAE,MAAO,MAAO,EAAG,EAAK,OAAS,GAAK,IAAK,EAAK,IAAI,CAC3D,CACF,CACF,EAEJ,CAEO,IAAM,GAAW,GAAS,eAAe,ECnFhD,IAAQ,QAAQ,EAIV,GAAS,IAAI,IACb,GAAc,CAAC,EAAgB,IAAyB,CAC5D,GAAI,GAAO,IAAI,CAAM,EAAG,OACxB,GAAO,IAAI,CAAM,EACjB,QAAQ,KACN,eAAe,8EAAkF,yBACnG,GASE,GAAe,GACf,GAAY,GAET,MAAM,WAAmB,CAA8B,OACrD,kBAAmB,YAElB,OAAS,GACT,QACA,aAIA,gBAAkB,EAClB,aAAe,GACf,iBACA,oBAQJ,gBAAe,EAAsC,CACvD,OAAO,KAAK,oBAEV,gBAAe,CAAC,EAA2C,CAE7D,GADA,KAAK,iBAAmB,EACpB,KAAK,SAAW,KAAK,UAAU,EAAG,KAAK,kBAAkB,KAG3D,MAAK,EAAW,CAClB,OAAO,KAAK,QAAU,KAAK,QAAQ,SAAS,EAAI,KAAK,UAGnD,MAAK,CAAC,EAAc,CACtB,GAAI,KAAK,QACP,KAAK,QAAQ,SAAS,CAAI,EAE1B,UAAK,OAAS,EAMV,aACJ,SAAQ,KAAW,CACrB,OAAO,KAAK,WAAa,KAAK,SAE5B,SAAQ,CAAC,EAAc,CACzB,KAAK,UAAY,EAeX,YAaA,gBAEJ,YAAW,EAAY,CACzB,GAAI,CAAC,KAAK,SAAU,OAAO,KAAK,cAAgB,GAChD,MAAO,CAAC,KAAK,MAAM,SAAS,OAG9B,QAAQ,CAAC,EAAmB,CAC1B,GAAI,CAAC,KAAK,SAAU,CAClB,KAAK,aAAe,EACpB,OAEF,IAAQ,YAAa,KAAK,MAC1B,GAAI,EAAI,CACN,GAAI,KAAK,cAAgB,OACvB,KAAK,YAAc,GAAS,EAC5B,EAAS,OAAO,KAAK,WAAW,EAElC,KAAK,YAAY,SAAW,KAAK,SACjC,KAAK,YAAY,SAAW,KAAK,MAEnC,EAAS,OAAS,CAAC,QAGd,gBAAiB,CACtB,KAAM,aACN,SAAU,EACZ,EAEA,KAAO,iBAmBH,OAAM,EAAiC,CACzC,GAAI,CAAC,GACH,GAAe,GACf,QAAQ,KACN,wJAEE,6EACJ,EAEF,OAAO,KAAK,SAAS,QAUnB,MAAK,EAAW,CAKlB,OAJA,GACE,QACA,wDACF,EACO,MAEL,MAAK,CAAC,EAAW,CACnB,GACE,QACA,wDACF,KAIE,QAAO,EAA4B,CAKrC,OAJA,GACE,UACA,4DACF,EACO,CAAC,KAEN,QAAO,CAAC,EAA4B,CACtC,GACE,UACA,4DACF,KAIE,IAAG,EAAc,CACnB,GAAY,MAAO,oDAAoD,EACvE,OAIF,IAAI,EAAS,CACX,KAAK,SAAS,KAAK,EAErB,IAAI,EAAS,CACX,KAAK,SAAS,KAAK,EAErB,OAAO,EAAY,CACjB,OAAO,KAAK,SAAS,QAAQ,GAAK,GAEpC,OAAO,EAAY,CACjB,OAAO,KAAK,SAAS,QAAQ,GAAK,GAKpC,QAAU,IAAM,CACd,GAAI,CAAE,KAAM,MAAO,CAAC,EACpB,GAAI,CAAE,KAAM,WAAY,OAAQ,EAAK,CAAC,CACxC,QAEO,iBAAkB,CACvB,QAAS,CACP,QAAS,QACT,SAAU,WACV,MAAO,OACP,OAAQ,MACV,EACA,gBAAiB,CAAE,OAAQ,MAAO,EAClC,oBAAqB,CACnB,SAAU,WACV,MAAO,IACP,OAAQ,IACR,SAAU,OACV,WAAY,EAAW,WAAW,EAAW,WAAW,MAAM,CAAC,CACjE,EACA,aAAc,CAAE,OAAQ,MAAO,EAC/B,eAAgB,CACd,QAAS,OACT,WAAY,mDACd,CACF,EAEA,YAAY,EAAG,CACb,KAAK,SAAS,QAAQ,EAGxB,iBAAiB,EAAG,CAKlB,GAJA,MAAM,kBAAkB,EAIpB,KAAK,SAAW,GAClB,KAAK,MAAQ,KAAK,cAAgB,KAAO,KAAK,YAAY,KAAK,EAAI,GAIrE,GAAI,KAAK,eAAiB,OAAW,CACnC,IAAM,EAAU,KAAK,aACrB,KAAK,aAAe,OACpB,KAAK,SAAS,CAAO,EAGvB,GAAI,KAAK,eAAiB,OAAW,CAEnC,IAAM,EAAa,EAAE,KAAK,gBAC1B,KAAK,aAAsB,oCAAoB,KAC7C,EAAG,oBAAqB,CAWtB,GAAI,IAAe,KAAK,iBAAmB,CAAC,KAAK,YAC/C,OACF,IAAM,EAAS,EAAe,KAAK,MAAM,KAAM,CAC7C,MAAO,KAAK,OACZ,KAAM,KAAK,KACX,SAAU,KAAK,SACf,KAAM,KAAK,YAAc,OACzB,SAAU,CAAC,IACT,KAAK,cACH,IAAI,YAAY,SAAU,CAAE,OAAQ,CAAE,OAAM,CAAE,CAAC,CACjD,CACJ,CAAC,EAKD,OAJA,KAAK,QAAU,EACf,KAAK,aAAe,KAAK,KACzB,KAAK,iBAAmB,KAAK,SAC7B,KAAK,kBAAkB,EAChB,EAEX,GAIJ,oBAAoB,EAAS,CAK3B,GAJA,MAAM,qBAAqB,EAIvB,KAAK,QAGP,KAAK,OAAS,KAAK,QAAQ,SAAS,EACpC,KAAK,QAAQ,QAAQ,EACrB,KAAK,QAAU,OAGjB,KAAK,aAAe,OACpB,KAAK,aAAe,GACpB,KAAK,iBAAmB,OAMlB,SAAS,EAAY,CAC3B,OAAO,KAAK,OAAS,OAAS,KAAK,OAAS,MAQtC,iBAAiB,EAAS,CAChC,IAAM,EAAS,KAAK,QACpB,GAAI,CAAC,GAAU,CAAC,KAAK,UAAU,EAAG,OAC3B,oCACJ,KAAK,EAAG,sBACP,EAAiB,KAAK,kBAAoB,CAAC,CAAC,CAC9C,EACC,KAAK,CAAC,IAAQ,CACb,GAAI,GAAO,KAAK,UAAY,GAAU,KAAK,UAAU,EAAG,CACtD,EAAO,qBAAqB,CAAG,EAC/B,KAAK,qBAAuB,GAC5B,OAOF,GAAI,CAAC,GAAO,KAAK,UAAY,GAAU,KAAK,UAAU,GAAK,CAAC,GAC1D,GAAY,GACZ,QAAQ,KACN,oBAAoB,KAAK,0DACvB,oLAGJ,EAEH,EACA,MAAM,CAAC,IAAM,CAEZ,GAAI,CAAC,GACH,GAAY,GACZ,QAAQ,KAAK,mDAAmD,CAAC,EAEpE,KAID,oBAAmB,EAAY,CACjC,OAAO,KAAK,qBAEN,qBAAuB,GAE/B,MAAM,EAAS,CAGb,GAFA,MAAM,OAAO,EAET,KAAK,QAAS,CAChB,GAAI,KAAK,WAAa,KAAK,iBACzB,KAAK,QAAQ,YAAY,KAAK,QAAQ,EACtC,KAAK,iBAAmB,KAAK,SAE/B,GAAI,KAAK,OAAS,KAAK,aACrB,KAAK,QAAQ,QAAQ,KAAK,IAAI,EAC9B,KAAK,aAAe,KAAK,KACzB,KAAK,kBAAkB,GAI/B,CAEO,IAAM,GACX,GAAW,eAAe,EC5a5B,IAAQ,UAAU,EAEZ,GAAe,EAAM,QAAQ,OAAO,EAQ1C,MAAM,WAAmB,CAAsB,OACtC,kBAAmB,aAE1B,MAAQ,GAAa,KACrB,MAAQ,SAED,iBAAkB,CACvB,QAAS,CACP,KAAM,EACN,YAAa,GACb,UAAW,GACX,YAAa,GACb,QAAS,cACT,IAAK,EAAK,IACV,WAAY,QACd,EACA,4BAA6B,CAC3B,OAAQ,EACR,MAAO,EAAK,WACZ,OAAQ,EAAK,WACb,WAAY,aACd,EACA,qBAAsB,CACpB,MAAO,EAAK,UACd,EACA,mBAAoB,CAClB,MAAO,EAAK,SACZ,WAAY,WACd,CACF,EAEA,QAAU,CACR,GAAM,CAAE,MAAO,aAAc,KAAM,QAAS,KAAM,KAAM,CAAC,EACzD,GAAM,CACJ,KAAM,QACN,MAAO,UACP,KAAM,QACN,IAAK,EACL,IAAK,EACL,KAAM,IACR,CAAC,EACD,GAAM,CAAE,MAAO,iBAAkB,KAAM,KAAM,CAAC,CAChD,EAEQ,aAAe,GACvB,OAAS,CAAC,IAAiB,CACzB,IAAQ,MAAK,QAAO,OAAQ,KAAK,MACjC,GAAI,EAAM,OAAS,QACjB,KAAK,MAAQ,EAAM,QAAQ,EAAI,KAAK,EACpC,KAAK,MAAM,EAAI,OAAO,EAAM,KAAK,EACjC,EAAI,MAAQ,KAAK,MAAM,KAEvB,UAAK,MAAQ,EAAM,QAAQ,EAAI,KAAK,EACpC,EAAI,MAAQ,KAAK,MAAM,KAAK,UAAU,EAAG,CAAC,EAC1C,EAAM,MAAQ,OAAO,KAAK,MAAM,CAAC,EAEnC,EAAI,MAAM,QAAU,OAAO,KAAK,MAAM,CAAC,EACvC,KAAK,MAAQ,KAAK,MAAM,KACxB,KAAK,aAAe,IAGtB,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EAExB,IAAQ,MAAK,QAAO,OAAQ,KAAK,MACjC,EAAI,iBAAiB,QAAS,KAAK,MAAM,EACzC,EAAM,iBAAiB,QAAS,KAAK,MAAM,EAC3C,EAAI,iBAAiB,SAAU,KAAK,MAAM,EAG5C,MAAM,EAAG,CACP,GAAI,KAAK,aAAc,CACrB,KAAK,aAAe,GACpB,OAEF,IAAQ,MAAK,QAAO,OAAQ,KAAK,MACjC,KAAK,MAAQ,EAAM,QAAQ,KAAK,KAAK,EAErC,EAAI,MAAQ,KAAK,MAAM,KAAK,UAAU,EAAG,CAAC,EAC1C,EAAI,MAAM,QAAU,OAAO,KAAK,MAAM,CAAC,EACvC,EAAM,MAAQ,OAAO,KAAK,MAAM,CAAC,EACjC,EAAI,MAAQ,KAAK,MAAM,KAE3B,CAEO,IAAM,GACX,GAAW,eAAe,ECnD5B,IAAM,GAAU,EAAS,IAAI,CAC3B,MAAO,CACL,QAAS,IACT,SAAU,QACV,IAAK,EACL,KAAM,EACN,MAAO,EACP,OAAQ,CACV,CACF,CAAC,EAEK,GAAU,CAAE,QAAS,EAAK,EAEnB,GAAY,CACvB,EACA,EACA,EAAS,SACA,CAGT,GAAI,CAFiB,EAAM,KAAK,WAAW,OAAO,EAE/B,CACjB,IAAoB,QAAd,EACc,QAAd,GAAQ,EAEd,GAAQ,MAAM,OAAS,EACvB,GAAa,EAAO,EACpB,SAAS,KAAK,OAAO,EAAO,EAE5B,IAAM,EAAkB,CAAC,IAAe,CACtC,IAAM,EAAK,EAAM,QAAU,EACrB,EAAK,EAAM,QAAU,EAC3B,GAAI,EAAS,EAAI,EAAI,CAAK,IAAM,GAC9B,GAAQ,oBAAoB,YAAa,CAAe,EACxD,GAAQ,oBAAoB,UAAW,CAAe,EACtD,GAAQ,OAAO,GAInB,GAAQ,iBAAiB,YAAa,EAAiB,EAAO,EAC9D,GAAQ,iBAAiB,UAAW,EAAiB,EAAO,EACvD,QAAI,aAAiB,WAAY,CACtC,IAAM,EAAQ,EAAM,eAAe,GAC7B,EAAU,EAAM,WAChB,EAAQ,EAAM,QACd,EAAQ,EAAM,QACd,EAAc,EAAM,OAEtB,EAAK,EACL,EAAK,EACH,EAAkB,CAAC,IAAe,CACtC,IAAM,EAAQ,CAAC,GAAG,EAAM,OAAO,EAAE,KAC/B,CAAC,IAAU,EAAM,aAAe,CAClC,EACA,GAAI,IAAU,OACZ,EAAK,EAAM,QAAU,EACrB,EAAK,EAAM,QAAU,EAEvB,GAAI,EAAM,OAAS,YACjB,EAAM,gBAAgB,EACtB,EAAM,eAAe,EAEvB,GAAI,EAAS,EAAI,EAAI,CAAK,IAAM,IAAQ,IAAU,OAChD,EAAO,oBAAoB,YAAa,CAAe,EACvD,EAAO,oBAAoB,WAAY,CAAe,EACtD,EAAO,oBAAoB,cAAe,CAAe,GAI7D,EAAO,iBAAiB,YAAa,CAAe,EACpD,EAAO,iBAAiB,WAAY,EAAiB,EAAO,EAC5D,EAAO,iBAAiB,cAAe,EAAiB,EAAO,IAItD,GAAe,CAAC,EAAW,WACtC,CAAC,GAAG,SAAS,iBAAiB,CAAQ,CAAC,EACpC,IAAI,CAAC,IAAQ,WAAW,iBAAiB,CAAG,EAAE,MAAM,CAAC,EACrD,OACC,CAAC,EAAG,IAAa,MAAM,CAAC,GAAK,OAAO,CAAC,EAAI,EAAU,EAAU,OAAO,CAAC,EACrE,CACF,EAES,GAAe,CAC1B,EACA,EAAW,WACF,CACT,EAAQ,MAAM,OAAS,OAAO,GAAa,CAAQ,EAAI,CAAC,GCnEnD,SAAS,EAAa,CAC3B,EACA,EAAiC,GAChB,CACjB,MAAO,CAAC,EAAQ,IAAW,CACzB,IAAM,EAAQ,EAAa,CAAC,EACtB,EAAQ,EAAa,CAAC,EAC5B,QAAW,KAAK,EACd,GAAI,EAAM,KAAO,EAAM,GAIrB,OAHoB,MAAM,QAAQ,CAAS,EACvC,EAAU,KAAO,GACjB,GAEA,EAAM,GAAK,EAAM,GACf,EACA,GACF,EAAM,GAAK,EAAM,GACjB,GACA,EAGR,MAAO,IC9BX,IAAQ,SAAS,EAEV,MAAM,WAAkB,CAAa,OACnC,kBAAmB,mBACnB,QAAyB,IAAI,UAE7B,gBAAiB,CACtB,KAAM,GACN,eAAgB,SAChB,eAAgB,QAClB,EAEA,QAAU,GAAK,QAER,iBAAkB,CACvB,QAAS,CACP,SAAU,OACZ,CACF,EAEA,WAAa,CAAC,IAAiB,CAC7B,GAAI,aAAiB,YAAc,EAAM,SAAW,EAClD,OAGF,GADe,EAAM,QACT,QAAQ,UAAU,EAC5B,OAEF,GAAI,KAAK,KAAM,CACb,GAAa,IAAI,EACjB,IAAM,EAAI,KAAK,WACT,EAAI,KAAK,UAEf,GACE,EACA,CACE,EACA,EACA,IACqB,CAKrB,GAJA,KAAK,MAAM,KAAO,GAAG,EAAI,MACzB,KAAK,MAAM,IAAM,GAAG,EAAI,MACxB,KAAK,MAAM,MAAQ,OACnB,KAAK,MAAM,OAAS,OAChB,EAAa,OAAS,UACxB,MAAO,GAGb,IAIJ,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAExB,GAAqB,EACrB,GAAU,OAAO,IAAI,IAAI,EACzB,IAAM,EAAU,CAAE,QAAS,EAAK,EAChC,KAAK,iBAAiB,aAAc,KAAK,WAAY,CAAO,EAC5D,KAAK,iBAAiB,YAAa,KAAK,WAAY,CAAO,EAC3D,GAAa,IAAI,EAGnB,oBAAoB,EAAS,CAC3B,MAAM,qBAAqB,EAE3B,GAAU,OAAO,OAAO,IAAI,EAEhC,CAKO,IAAM,GAA6B,GAE7B,GAAY,GAAU,eAAe,EAGrC,GAAW,GAMpB,GAA2B,GAC/B,SAAS,EAAoB,EAAS,CACpC,GAAI,GAA0B,OAC9B,GAA2B,GAC3B,OAAO,iBACL,SACA,IAAM,CACJ,MAAM,KAAK,GAAU,MAAM,EAAE,QAAQ,CAAC,IAAqB,CACzD,GAAI,EAAM,iBAAmB,OAC3B,EAAM,OAAS,GACV,QAAI,EAAM,iBAAmB,SAClC,EAAM,OAAO,EAEhB,GAEH,CAAE,QAAS,EAAK,CAClB,EAEA,SAAS,iBACP,SACA,CAAC,IAAiB,CAChB,GACE,EAAM,kBAAkB,aACxB,EAAM,OAAO,QAAQ,GAAU,OAAiB,EAEhD,OAEF,MAAM,KAAK,GAAU,MAAM,EAAE,QAAQ,CAAC,IAAqB,CACzD,GAAI,EAAM,iBAAmB,OAC3B,EAAM,OAAS,GACV,QAAI,EAAM,iBAAmB,SAClC,EAAM,OAAO,EAEhB,GAEH,CAAE,QAAS,GAAM,QAAS,EAAK,CACjC,EC4DK,IAAM,GAAW,CAAC,IAAwC,CAC/D,IACE,UACA,SACA,WACA,iBACA,iBACA,aACE,EACE,EAAQ,MAAM,QAAQ,CAAO,EAC/B,GAAU,GAAG,CAAO,EACpB,GAAU,CAAO,EAUrB,GARA,GACE,EACA,EACA,EACA,EACA,EACA,CACF,EACI,EAAQ,MACV,EAAM,aAAa,QAAS,EAAQ,KAAK,EAG3C,OADA,SAAS,KAAK,OAAO,CAAK,EACnB,GAGI,GAAgB,CAC3B,EACA,EACA,EACA,EACA,EACA,EAAY,KACH,CACT,CACE,IAAQ,YAAa,iBAAiB,CAAO,EAC7C,GAAI,IAAa,QACf,EAAQ,MAAM,SAAW,QAE3B,GAAI,EAAgB,EAAQ,eAAiB,EAC7C,GAAI,EAAgB,EAAQ,eAAiB,EAC7C,GAAa,CAAO,CACtB,CACA,EAAQ,KAAO,EACf,IAAQ,OAAM,MAAK,QAAO,UAAW,EAAO,sBAAsB,EAC5D,EAAK,EAAO,EAAQ,IACpB,EAAK,EAAM,EAAS,IACpB,EAAI,OAAO,WACX,EAAI,OAAO,YACjB,GAAI,IAAa,OACf,GAAa,EAAK,EAAI,IAAM,IAAM,MAC/B,EAAK,EAAI,IAAM,IAAM,KACnB,QAAI,IAAa,QAAU,IAAa,OAC7C,GAAa,EAAK,EAAI,IAAM,IAAM,MAC/B,EAAK,EAAI,IAAM,IAAM,KAQ1B,GANA,EAAQ,MAAM,IACZ,EAAQ,MAAM,KACd,EAAQ,MAAM,MACd,EAAQ,MAAM,OACd,EAAQ,MAAM,UACZ,GACA,EAAS,SAAW,EAAG,CACzB,IAAO,EAAO,GAAU,EACxB,OAAQ,OACD,IACH,EAAQ,MAAM,QAAU,EAAI,GAAK,QAAQ,CAAC,EAAI,KAC9C,UACG,IACH,EAAQ,MAAM,MAAQ,EAAO,GAAO,QAAQ,CAAC,EAAI,KACjD,UACG,IACH,EAAQ,MAAM,KAAO,EAAM,GAAQ,QAAQ,CAAC,EAAI,KAChD,UACG,IACH,EAAQ,MAAM,OAAS,EAAI,GAAM,QAAQ,CAAC,EAAI,KAC9C,MAGJ,OAAQ,OACD,IACH,EAAQ,MAAM,QAAU,EAAI,EAAM,GAAQ,QAAQ,CAAC,EAAI,KACvD,UACG,IACH,EAAQ,MAAM,KAAO,EAAK,QAAQ,CAAC,EAAI,KACvC,UACG,IACH,EAAQ,MAAM,IAAM,EAAI,QAAQ,CAAC,EAAI,KACrC,UACG,IACH,EAAQ,MAAM,OAAS,EAAI,EAAO,GAAO,QAAQ,CAAC,EAAI,KACtD,MAEJ,EAAQ,MAAM,UAAY,GACrB,QAAI,IAAa,IACtB,EAAQ,MAAM,QAAU,EAAI,GAAK,QAAQ,CAAC,EAAI,KAC9C,EAAQ,MAAM,KAAO,EAAG,QAAQ,CAAC,EAAI,KACrC,EAAQ,MAAM,UAAY,mBACrB,QAAI,IAAa,IACtB,EAAQ,MAAM,KAAO,EAAM,GAAQ,QAAQ,CAAC,EAAI,KAChD,EAAQ,MAAM,KAAO,EAAG,QAAQ,CAAC,EAAI,KACrC,EAAQ,MAAM,UAAY,mBACrB,QAAI,IAAa,IACtB,EAAQ,MAAM,MAAQ,EAAO,GAAO,QAAQ,CAAC,EAAI,KACjD,EAAQ,MAAM,IAAM,EAAG,QAAQ,CAAC,EAAI,KACpC,EAAQ,MAAM,UAAY,mBACrB,QAAI,IAAa,IACtB,EAAQ,MAAM,OAAS,EAAI,GAAM,QAAQ,CAAC,EAAI,KAC9C,EAAQ,MAAM,IAAM,EAAG,QAAQ,CAAC,EAAI,KACpC,EAAQ,MAAM,UAAY,mBAE5B,EAAQ,MAAM,YACZ,eACA,gBAAgB,EAAQ,MAAM,KAAO,EAAQ,MAAM,SACrD,EACA,EAAQ,MAAM,YACZ,cACA,gBAAgB,EAAQ,MAAM,MAAQ,EAAQ,MAAM,QACtD,GCnYF,IAAM,GACJ,OAAO,UAAc,KACrB,uBAAuB,KAAK,UAAU,UAAY,EAAE,EAEzC,GAAuC,GAChD,CAAE,KAAM,IAAI,KAAM,IAAK,IAAK,IAAK,MAAO,IAAK,OAAQ,GAAI,EACzD,CAAE,KAAM,OAAQ,KAAM,OAAQ,IAAK,MAAO,MAAO,QAAS,OAAQ,KAAM,EAE/D,GAAU,CAAC,IAAmC,CACzD,GAAI,EAAI,KACN,OAAO,EAAI,KAAK,QAAQ,cAAe,EAAE,EAE3C,OAAO,EAAI,KAGA,GAAY,CAAC,IAAmC,CAC3D,IAAM,EAAkB,CAAC,EACzB,GAAI,EAAI,OAAQ,EAAM,KAAK,KAAK,EAChC,GAAI,EAAI,QAAS,EAAM,KAAK,MAAM,EAClC,GAAI,EAAI,QAAS,EAAM,KAAK,MAAM,EAClC,GAAI,EAAI,SAAU,EAAM,KAAK,OAAO,EAEpC,OADA,EAAM,KAAK,GAAQ,CAAG,CAAC,EAChB,EAAM,KAAK,GAAG,GAWjB,GAAsD,CAC1D,CAAC,aAAc,SAAS,EACxB,CAAC,YAAY,SAAS,EACtB,CAAC,sBAAsB,QAAQ,EAC/B,CAAC,aAAa,UAAU,CAC1B,EAEa,GAAgB,CAAC,IAAqC,CACjE,IAAI,EAAY,EAAS,KAAK,EACxB,EAAyB,CAC7B,QAAS,GACT,QAAS,GACT,OAAQ,GACR,SAAU,GACV,IAAK,EACP,EAEA,QAAY,EAAS,KAAS,GAC5B,GAAI,EAAQ,KAAK,CAAS,EACtB,EAAe,GAAQ,GACzB,EAAY,EAAU,QAAQ,EAAS,EAAE,EAQ7C,OAHA,EAAY,EAAU,QAAQ,MAAO,EAAE,EACvC,EAAO,IAAM,EAAU,YAAY,EAE5B,GAGI,GAAgB,CAC3B,EACA,IACY,CACZ,IAAM,EAAS,GAAc,CAAQ,EAErC,OACE,EAAM,IAAI,YAAY,IAAM,EAAO,KACnC,EAAM,UAAY,EAAO,SACzB,EAAM,UAAY,EAAO,SACzB,EAAM,SAAW,EAAO,QACxB,EAAM,WAAa,EAAO,UAIjB,GAAoB,CAAC,IAA6B,CAC7D,IAAM,EAAS,GAAc,CAAQ,EAC/B,EAAkB,CAAC,EACzB,GAAI,EAAO,OAAQ,EAAM,KAAK,KAAK,EACnC,GAAI,EAAO,QAAS,EAAM,KAAK,MAAM,EACrC,GAAI,EAAO,QAAS,EAAM,KAAK,MAAM,EACrC,GAAI,EAAO,SAAU,EAAM,KAAK,OAAO,EAEvC,OADA,EAAM,KAAK,EAAO,GAAG,EACd,EAAM,KAAK,GAAG,GAGV,GAAkB,CAAC,IAA6B,CAC3D,IAAM,EAAS,GAAc,CAAQ,EACrC,GAAI,GAAS,CACX,IAAM,EAAkB,CAAC,EACzB,GAAI,EAAO,QAAS,EAAM,KAAK,GAAE,EACjC,GAAI,EAAO,OAAQ,EAAM,KAAK,GAAE,EAChC,GAAI,EAAO,SAAU,EAAM,KAAK,GAAE,EAClC,GAAI,EAAO,QAAS,EAAM,KAAK,GAAE,EAEjC,OADA,EAAM,KAAK,EAAO,IAAI,YAAY,CAAC,EAC5B,EAAM,KAAK,EAAE,EAEtB,IAAM,EAAkB,CAAC,EACzB,GAAI,EAAO,QAAS,EAAM,KAAK,MAAM,EACrC,GAAI,EAAO,OAAQ,EAAM,KAAK,KAAK,EACnC,GAAI,EAAO,SAAU,EAAM,KAAK,OAAO,EACvC,GAAI,EAAO,QAAS,EAAM,KAAK,MAAM,EAErC,OADA,EAAM,KAAK,EAAO,IAAI,YAAY,CAAC,EAC5B,EAAM,KAAK,GAAG,kGCoLvB,IAAM,GAAiB,IAAM,CAAC,CAAC,SAAS,cAAc,cAAc,EAEvD,GAAgB,CAC3B,EACA,IACG,CACH,GAAI,CAAC,EACH,MAAO,GAET,QAAW,KAAe,EACxB,GAAI,IAAgB,cAClB,MAAO,GACF,QAAI,EAAY,QAAQ,GAAG,EAAI,GAAI,CACxC,IAAO,EAAG,GAAK,EAAY,MAAM,GAAG,GAC7B,EAAG,GAAK,EAAK,MAAM,GAAG,EAC7B,IAAK,IAAM,KAAO,IAAM,KAAO,IAAM,KAAO,IAAM,GAChD,MAAO,GAGT,QAAI,IAAgB,EAClB,MAAO,IAMT,GAAc,CAAC,IAAsB,CACzC,QAAW,IAAO,CAAC,GAAG,SAAS,iBAAiB,IAAI,GAAW,CAAC,EAC9D,EAAI,UAAU,OAAO,CAAS,GAG5B,GAAM,IAAM,CAChB,GAAI,GACF,GAAa,WAAW,EACxB,GAAe,KAEjB,GAAkB,CAAC,EACnB,GAAY,WAAW,EACvB,GAAY,aAAa,EACzB,GAAY,aAAa,GAGd,GAAgB,CAC3B,EACA,EAAY,MACC,CACb,OAAQ,GAAK,IACV,MAAM,CAAS,EACf,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,IAAM,IAAM,EAAE,GAGvB,GAAqC,CAAC,EACtC,GAAwC,KAEtC,GAAgB,CAAC,IAAyC,CAC9D,GAAI,CAAC,EAAO,EAAQ,CAAC,EACrB,GAAkB,EAClB,IAAM,EAAW,CACf,GAAG,SAAS,iBAAiB,aAAa,CAC5C,EACA,QAAW,KAAW,EAAU,CAC9B,IAAM,EAAY,GAAc,EAAQ,QAAQ,IAAI,EACpD,GAAI,EAAM,KAAK,CAAC,IAAS,GAAc,EAAW,CAAI,CAAC,EACrD,EAAQ,UAAU,IAAI,aAAa,EAEnC,OAAQ,UAAU,OAAO,aAAa,EAG1C,GAAI,CAAC,GACH,GAAe,IAAI,iBAAiB,IAAM,GAAc,EAAe,CAAC,EACxE,GAAa,QAAQ,SAAS,KAAM,CAAE,UAAW,GAAM,QAAS,EAAK,CAAC,GAI1E,SAAS,EAAK,CAAC,EAAgB,CAC7B,IAAM,EAAU,EAAI,QAAwB,QAC1C,4BACF,EACA,GAAI,CAAC,EACH,OAEF,EAAO,UAAU,IAAI,aAAa,EAClC,IAAM,EAAQ,EAAO,QAAQ,oBAAoB,EAC7C,GAAc,EAAO,QAAQ,MAAQ,WAAW,EAChD,GAAc,EAAO,QAAQ,MAAQ,KAAK,EAC9C,QAAW,KAAQ,EAAO,CACxB,IAAM,EACJ,EAAO,QAAQ,cACd,IAAS,YAAc,EAAO,UAAY,EAAO,aACpD,EAAI,cAAc,QAAQ,EAAM,GAAW,EAAE,EAE/C,GAAc,EAAI,cAAc,KAAK,EACrC,EAAI,gBAAgB,EAGtB,SAAS,EAAI,CAAC,EAAgB,CAC5B,GAAI,CAAC,GAAe,EAClB,GAAc,EAAI,cAAc,KAAK,EAEvC,IAAM,EAAU,EAAI,OAAuB,QAAQ,cAAc,EACjE,GAAI,GAAU,EAAI,aAChB,EAAO,UAAU,IAAI,WAAW,EAChC,EAAI,aAAa,WAAa,OAE9B,OAAI,eAAe,EACnB,EAAI,gBAAgB,EAIxB,SAAS,EAAK,EAAG,CACf,GAAY,WAAW,EAGzB,SAAS,EAAI,CAAC,EAAgB,CAC5B,IAAM,EAAU,EAAI,OAAuB,QACzC,cACF,EACA,GAAI,EAAQ,CACV,IAAM,GAAa,EAAO,SAAS,MAAQ,IAAI,MAAM,GAAG,EACxD,QAAW,KAAQ,EACjB,GAAI,GAAc,EAAI,cAAc,MAAO,CAAI,EAC7C,GAAI,IAAS,YACX,EAAO,UAAY,EAAI,cAAc,QAAQ,CAAI,GAAK,GAEtD,OAAO,YAAc,EAAI,cAAc,QAAQ,CAAI,GAAK,GAKhE,GAAI,EAGC,IAAM,GAAiB,IAAM,SAAS,cAAc,cAAc,EAErE,GAAgB,GAEP,GAAO,IAAM,CACxB,GAAI,GACF,OAGF,SAAS,KAAK,iBAAiB,YAAa,EAAK,EACjD,SAAS,KAAK,iBAAiB,YAAa,EAAI,EAChD,SAAS,KAAK,iBAAiB,WAAY,EAAI,EAC/C,SAAS,KAAK,iBAAiB,OAAQ,EAAI,EAC3C,SAAS,KAAK,iBAAiB,YAAa,EAAK,EACjD,SAAS,KAAK,iBAAiB,UAAW,EAAG,EAG7C,OAAO,iBAAiB,WAAY,CAAC,IAAQ,EAAI,eAAe,CAAC,EACjE,OAAO,iBAAiB,OAAQ,CAAC,IAAQ,EAAI,eAAe,CAAC,EAE7D,GAAgB,IC2WX,IAAM,GAAmB,CAAC,IAC/B,OAAO,IAAa,WAAa,EAAS,EAAI,GAExC,OAAK,UAAQ,OAAM,KAAG,aAAa,EAErC,GAAkB,CAAC,IAAkC,CACzD,IAAM,EAAqB,CAAC,EAC5B,QAAW,KAAQ,EACjB,GAAI,IAAS,MACX,GAAI,EAAO,OAAS,GAAK,EAAO,EAAO,OAAS,KAAO,KACrD,EAAO,KAAK,CAAI,EAGlB,OAAO,KAAK,CAAI,EAGpB,MAAO,EAAO,OAAS,GAAK,EAAO,EAAO,OAAS,KAAO,KACxD,EAAO,IAAI,EAEb,OAAO,GAGI,GAAgB,CAC3B,EACA,EACA,EAAe,KACA,CACf,IAAM,EAAuB,CAAC,EAC9B,QAAW,KAAQ,EAAO,CACxB,GAAI,IAAS,KAAM,CACjB,EAAS,KAAK,CAAI,EAClB,SAEF,GAAI,OAAO,IAAS,WAAY,CAC9B,EAAS,KAAK,CAAI,EAClB,SAEF,IAAQ,eAAgB,EACxB,GAAI,CAAC,EAAa,CAChB,GAAI,CAAC,EACH,EAAS,KAAK,IAAK,EAAM,QAAS,IAAM,EAAM,CAAa,EAE7D,SAGF,GAAI,CADY,EAAU,KAAK,CAAC,IAAM,GAAc,EAAa,CAAC,CAAC,EACrD,CACZ,GAAI,CAAC,EACH,EAAS,KAAK,IAAK,EAAM,QAAS,IAAM,EAAM,CAAa,EAE7D,SAEF,IAAM,EAAU,EAChB,GAAI,EAAQ,UAAW,CAErB,IAAM,EAAgB,GACpB,GAAiB,EAAQ,SAAS,EAClC,EACA,EACF,EACA,GAAI,EAAc,OAAS,GAAK,EAAQ,WAAY,CAClD,IAAM,EAAa,EACf,EACA,GAAc,GAAiB,EAAQ,SAAS,EAAG,EAAW,EAAK,EACvE,EAAS,KAAK,IAAK,EAAS,UAAW,CAAW,CAAC,EAC9C,QAAI,CAAC,EACV,EAAS,KAAK,IAAK,EAAS,QAAS,IAAM,EAAM,CAAa,EAGhE,OAAS,KAAK,CAAI,EAGtB,OAAO,GAAgB,CAAQ,GAGpB,GAAiB,CAC5B,EACA,EAAe,KACA,CACf,IAAM,EAAuB,CAAC,EAC9B,QAAW,KAAQ,EAAO,CACxB,GAAI,IAAS,KAAM,CACjB,EAAS,KAAK,CAAI,EAClB,SAEF,GAAI,OAAO,IAAS,WAAY,CAC9B,EAAS,KAAK,CAAI,EAClB,SAEF,IAAoC,OAA9B,EACsC,UAAtC,GAAqB,EAC3B,GAAI,GAAU,EACZ,GAAI,EAAmB,CAErB,IAAM,EAAgB,GACpB,GAAiB,CAAiB,EAClC,EACF,EACA,GAAI,EAAc,OAAS,EAAG,CAC5B,IAAM,EAAa,EACf,EACA,GAAe,GAAiB,CAAiB,EAAG,EAAK,EAC7D,EAAS,KAAK,IAAK,EAAM,UAAW,CAAW,CAAY,EACtD,QAAI,CAAC,EACV,EAAS,KAAK,IAAK,EAAM,QAAS,IAAM,EAAM,CAAa,EAG7D,OAAS,KAAK,CAAI,EAEf,QAAI,CAAC,EACV,EAAS,KAAK,IAAK,EAAM,QAAS,IAAM,EAAM,CAAa,EAG/D,OAAO,GAAgB,CAAQ,GAI3B,GAAa,CACjB,SAAU,cACV,UAAW,QAAQ,EAAK,eAAe,EAAW,UAAU,KAAK,KACjE,aAAc,EAAK,UACnB,WAAY,EAAW,OAAO,SAAS,EACvC,UAAW,EAAW,WACpB,GAAG,EAAK,aAAa,EAAK,aAAa,EAAK,eAC9C,CACF,EACM,GAAiB,CACrB,UAAW,OACX,OAAQ,kBACR,QAAS,OACT,WAAY,SACZ,eAAgB,aAChB,eAAgB,OAGhB,oBAAqB,sBACrB,MAAO,OACP,IAAK,EACL,WAAY,cACZ,QAAS,EAAW,gBAAgB,OAAO,EAC3C,OAAQ,EAAW,eAAe,MAAM,EACxC,WAAY,EAAW,eAAe,MAAM,EAC5C,UAAW,MACb,EACM,GAAsB,CAC1B,MAAO,EAAW,cAAc,MAAM,CACxC,EACM,GAAsB,CAC1B,UAAW,kBACX,WAAY,EAAW,gBAAgB,MAAM,CAC/C,EACM,GAAuB,CAC3B,UAAW,kBACX,WAAY,EAAW,iBAAiB,MAAM,EAC9C,MAAO,EAAW,oBAAoB,MAAM,CAC9C,EACM,GAAiB,CACrB,WAAY,GAAG,EAAW,eAAe,SAAS,eAClD,MAAO,GAAG,EAAW,kBAAkB,MAAM,cAC/C,EACM,GAAqB,CACzB,MAAO,GAAG,EAAW,kBAAkB,MAAM,cAC/C,EACM,GAAoB,CACxB,OAAQ,GAAG,EAAW,kBAAkB,MAAM,cAChD,EACM,GAAwB,CAC5B,UAAW,sCAAsC,EAAW,eAC1D,SACF,gCACF,EAEM,GAAsB,CAC1B,wBAAyB,GACzB,oCAAqC,CACnC,MAAO,EAAW,UAAU,MAAM,CACpC,EACA,wCAAyC,CACvC,YAAa,EACb,aAAc,EACd,SAAU,EAAW,UAAU,MAAM,CACvC,EACA,4CAA6C,CAC3C,QAAS,eACT,QAAS,IACT,OAAQ,MACR,MAAO,OACP,WAAY,EAAW,mBAAmB,OAAO,EACjD,OAAQ,EAAW,oBAAoB,OAAO,CAChD,EACA,wCAAyC,CACvC,UAAW,EAAW,eAAe,MAAM,CAC7C,EACA,kCAAmC,GACnC,iFACE,GACF,6EACE,CACE,oBAAqB,uBACrB,IAAK,EAAW,YAAY,KAAK,CACnC,EAGF,0CAA2C,CACzC,WAAY,SACZ,YAAa,MACb,UAAW,QACX,QAAS,MACX,EACA,gEAAiE,CAC/D,YAAa,SACb,UAAW,QACb,EACA,0CAA2C,CACzC,OAAQ,EAAW,kBAAkB,MAAM,CAC7C,EACA,+EACE,CACE,WAAY,EAAW,gBAAgB,MAAM,CAC/C,EACF,0EAA2E,CACzE,WAAY,SACZ,SAAU,SACV,aAAc,WACd,UAAW,MACb,EACA,8CAA+C,GAC/C,sEACE,GACF,gDAAiD,GACjD,wDAAyD,CACvD,OAAQ,EAAW,wBAAwB,MAAM,CACnD,EACA,sDAAuD,GACvD,8DAA+D,CAC7D,OAAQ,EAAW,wBAAwB,MAAM,CACnD,EACA,kCAAmC,GACnC,gDAAiD,GACjD,0CAA2C,GAC3C,eAAgB,EAClB,EASI,GAAkB,GACtB,SAAS,EAAU,EAAS,CAC1B,GAAI,GAAiB,OACrB,GAAkB,GAClB,GAAW,kBAAmB,EAAmB,EACjD,SAAS,iBAAiB,YAAa,CAAC,IAAiB,CACvD,GAAI,GAAY,SAAW,EAAG,OAC9B,IAAM,EAAO,EAAM,aAAa,EAChC,GACE,CAAC,GAAY,KACX,CAAC,IAAW,EAAK,SAAS,EAAO,MAAM,GAAK,EAAK,SAAS,EAAO,IAAI,CACvE,EAEA,GAAe,CAAC,EAEnB,EACD,SAAS,KAAK,iBAAiB,UAAW,CAAC,IAAyB,CAClE,GAAI,EAAM,MAAQ,SAChB,GAAe,CAAC,EAEnB,EAGI,IAAM,GAAmB,CAC9B,EACA,IACgB,CAChB,IAAM,EAAW,EAAK,SAAW,EAAK,QAAQ,GAAK,SAAY,GAC3D,EAAO,GAAM,MAAQ,GAAW,EAAK,GAAG,EAC5C,GAAI,OAAO,IAAS,SAClB,EAAO,EAAM,GAAM,EAErB,IAAM,EAAW,EAAQ,OAAS,UAAY,SAAW,WACrD,EACE,EAAQ,EAAK,YAAc,CAAC,EAClC,GAAI,OAAO,GAAM,SAAW,SAC1B,EAAW,GACT,EACA,CACE,KAAM,EACN,KAAM,EAAK,MACb,EACA,EACA,EAAQ,UAAY,EAAK,EAAS,EAAK,OAAO,CAAC,EAAI,EAAK,EAAK,OAAO,EACpE,EACE,CAAE,MAAO,oBAAqB,EAC9B,EAAK,SAAW,GAAgB,EAAK,QAAQ,EAAI,GACnD,CACF,EAEA,OAAW,GACT,EACA,CACE,KAAM,EACN,QAAS,EAAK,MAChB,EACA,EACA,EAAQ,UAAY,EAAK,EAAS,EAAK,OAAO,CAAC,EAAI,EAAK,EAAK,OAAO,EACpE,EACE,CAAE,MAAO,oBAAqB,EAC9B,EAAK,SAAW,GAAgB,EAAK,QAAQ,EAAI,GACnD,CACF,EAKF,GAHA,EAAS,UAAU,IAAI,gBAAiB,gBAAgB,EACxD,EAAS,UAAU,OAAO,wBAAyB,IAAY,EAAK,EACpE,EAAS,UAAU,OAAO,yBAA0B,IAAY,EAAK,EACjE,EAAK,QACP,EAAS,QAAQ,QAAU,EAAK,QAElC,GAAI,EAAQ,OAAS,UACnB,EAAS,gBAAgB,gBAAiB,IAAY,EAAK,EAE7D,GAAI,GAAM,SAAW,CAAC,EAAK,QAAQ,EACjC,EAAS,aAAa,WAAY,EAAE,EACpC,EAAS,aAAa,gBAAiB,MAAM,EAE/C,OAAO,GAGI,GAAqB,CAChC,EACA,IACgB,CAChB,IAAI,EAAO,GAAM,MAAQ,EAAK,GAAG,EACjC,GAAI,OAAO,IAAS,SAClB,EAAO,EAAM,GAAM,EAErB,IAAM,EAAQ,EAAK,YAAc,CAAC,EAC5B,EAAW,GACf,EACA,CACE,WAAW,CAAC,EAAkB,CAC5B,GAAoB,EACpB,EAAS,UAAU,IAAI,gBAAiB,gBAAgB,EACxD,EAAM,eAAe,GAEvB,UAAU,CAAC,EAAkB,CAE3B,GADA,EAAM,eAAe,EACjB,EAAM,aACR,EAAM,aAAa,WAAa,QAGpC,WAAW,CAAC,EAAkB,CAC5B,IAAM,EAAU,EAAM,cACtB,GAAI,GAAW,EAAS,SAAS,CAAO,EAAG,OAC3C,EAAS,UAAU,OAAO,gBAAiB,gBAAgB,GAE7D,MAAM,CAAC,EAAkB,CAIvB,GAHA,EAAM,eAAe,EACrB,EAAM,gBAAgB,EACtB,EAAS,UAAU,OAAO,gBAAiB,gBAAgB,EACvD,EAAK,YAAc,EAAM,aAC3B,EAAK,WAAW,EAAM,YAAY,EAEpC,GAAe,CAAC,EAEpB,EACA,EACA,EAAQ,UAAY,EAAK,EAAS,EAAK,OAAO,CAAC,EAAI,EAAK,EAAK,OAAO,EACpE,EAAK,GAAG,CACV,EAEA,GADA,EAAS,UAAU,IAAI,gBAAiB,gBAAgB,EACpD,EAAK,QACP,EAAS,QAAQ,QAAU,EAAK,QAElC,GAAI,EAAK,YAAc,EAAK,YAC1B,EAAS,QAAQ,KAAO,EAAK,YAAY,KAAK,GAAG,EAEnD,GAAI,GAAM,SAAW,CAAC,EAAK,QAAQ,EACjC,EAAS,aAAa,WAAY,EAAE,EACpC,EAAS,aAAa,gBAAiB,MAAM,EAE/C,OAAO,GAGI,GAAgB,CAC3B,EACA,IACgB,CAChB,IAAM,EAAW,EAAK,SAAW,EAAK,QAAQ,GAAK,SAAY,GAC3D,EAAO,GAAM,MAAQ,GAAW,EAAK,GAAG,EAC5C,GAAI,OAAO,IAAS,SAClB,EAAO,EAAM,GAAM,EAGrB,IAAI,EAAwD,KACxD,EAAY,GAEV,EAAQ,EAAK,YAAc,CAAC,EAC5B,EAAc,GAClB,EACA,CACE,SAAU,EAAE,CAAC,EAAK,SAAW,EAAK,QAAQ,GAC1C,OAAO,CAAC,EAAc,CACpB,GAAI,EAAQ,UAAW,OACvB,EACE,OAAO,OAAO,CAAC,EAAG,EAAS,CACzB,UAAW,GAAiB,EAAK,SAAS,EAC1C,OAAQ,EACR,cAAe,EAAQ,cAAgB,GAAK,EAC5C,SAAU,MACZ,CAAC,CACH,EACA,EAAM,gBAAgB,EACtB,EAAM,eAAe,GAEvB,WAAW,CAAC,EAAkB,CAC5B,GAAI,CAAC,EAAQ,UAAW,OACxB,GAAoB,EACpB,EAAM,eAAe,EACrB,EAAM,gBAAgB,EACtB,IAAM,EAAO,EAAM,cAEnB,GAAI,GAAQ,EAAY,SAAS,CAAI,EAAG,OAExC,GADA,EAAY,UAAU,IAAI,gBAAiB,gBAAgB,EACvD,EAAW,CAIb,GAFA,IAAgB,EAAQ,cAAgB,GAAK,CAAC,EAC9C,EAAY,GACR,EAAiB,aAAa,CAAe,EACjD,EAAkB,KAClB,OAEF,GAAI,EAAiB,aAAa,CAAe,EACjD,EAAkB,WAAW,IAAM,CACjC,EAAY,GACZ,IAAM,EAAW,GAAiB,EAAK,SAAS,EAC1C,EAAgB,EAAQ,WAC1B,GAAc,EAAU,EAAQ,WAAY,EAAQ,YAAY,EAChE,EACJ,GAAI,EAAc,OAAS,EACzB,EACE,OAAO,OAAO,CAAC,EAAG,EAAS,CACzB,UAAW,EACX,OAAQ,EACR,cAAe,EAAQ,cAAgB,GAAK,EAC5C,SAAU,OACV,UAAW,GACX,WAAY,EAAQ,UACtB,CAAC,CACH,GAED,EAAQ,iBAAmB,GAAG,GAEnC,UAAU,CAAC,EAAkB,CAC3B,GAAI,CAAC,EAAQ,UAAW,OAGxB,GAFA,EAAM,eAAe,EACrB,EAAM,gBAAgB,EAClB,EAAM,aACR,EAAM,aAAa,WAAa,EAAK,WAAa,OAAS,QAG/D,WAAW,CAAC,EAAkB,CAC5B,GAAI,CAAC,EAAQ,UAAW,OACxB,IAAM,EAAU,EAAM,cACtB,GAAI,GAAW,EAAY,SAAS,CAAO,EAAG,OAE9C,GACE,GACA,GACA,GAAY,KACV,CAAC,IAAM,EAAE,KAAK,SAAS,CAAO,GAAK,EAAE,OAAO,SAAS,CAAO,CAC9D,EAEA,OAGF,GADA,EAAY,UAAU,OAAO,gBAAiB,gBAAgB,EAC1D,EACF,aAAa,CAAe,EAC5B,EAAkB,MAGtB,MAAM,CAAC,EAAkB,CACvB,GAAI,CAAC,EAAQ,WAAa,CAAC,EAAK,WAAY,OAI5C,GAHA,EAAM,eAAe,EACrB,EAAM,gBAAgB,EACtB,EAAY,UAAU,OAAO,gBAAiB,gBAAgB,EAC1D,EAAM,aACR,EAAK,WAAW,EAAM,YAAY,EAEpC,GAAe,CAAC,EAEpB,EACA,EACA,EAAQ,UAAY,EAAK,EAAS,EAAK,OAAO,CAAC,EAAI,EAAK,EAAK,OAAO,EACpE,EAAM,aAAa,CAAE,MAAO,CAAE,YAAa,UAAW,CAAE,CAAC,CAC3D,EAEA,GADA,EAAY,UAAU,IAAI,gBAAiB,gBAAgB,EACvD,EAAK,QACP,EAAY,QAAQ,QAAU,EAAK,QAErC,GAAI,EAAQ,WAAa,EAAK,YAAc,EAAK,YAC/C,EAAY,QAAQ,KAAO,EAAK,YAAY,KAAK,GAAG,EAEtD,OAAO,GAGI,GAAiB,CAC5B,EACA,IACgB,CAChB,GAAI,IAAS,KACX,OAAO,EAAK,CAAE,MAAO,wCAAyC,CAAC,EAC1D,QAAI,OAAO,IAAS,WAAY,CACrC,IAAM,EAAK,EAAK,EAEhB,OADA,EAAG,UAAU,IAAI,mBAAoB,mBAAmB,EACjD,EACF,QAAI,EAAQ,UAAW,CAC5B,IAAM,EAAM,EAGZ,GADE,EAAI,WAAa,GAAiB,EAAI,SAAS,EAAE,OAAS,EAE1D,OAAO,GAAc,EAAK,CAAO,EAC5B,QAAK,EAAoB,WAC9B,OAAO,GAAmB,EAAoB,CAAO,EAChD,KAGL,IAAI,EAAO,GAAM,MAAQ,EAAK,GAAG,EACjC,GAAI,OAAO,IAAS,SAClB,EAAO,EAAM,GAAM,EAErB,OAAO,GACL,CACE,MAAO,+BACP,SAAU,EACZ,EACA,EACA,EAAQ,UAAY,EAAK,EAAS,EAAK,OAAO,CAAC,EAAI,EAAK,EAAK,OAAO,EACpE,EAAK,GAAG,CACV,GAEG,KACL,IAAM,EAAe,GAAqB,OACtC,GAAiB,EAAoB,CAAO,EAC5C,GAAc,EAAiB,CAAO,EAC1C,GAAI,EAAQ,aAAe,EAAK,SAAW,EAAK,QAAQ,EACtD,sBAAsB,IAAM,CAC1B,EAAY,eAAe,CAAE,MAAO,QAAS,CAAC,EAC/C,EAEH,OAAO,IAIE,GAAO,CAAC,IAA4C,CAC/D,IAAQ,SAAQ,QAAO,YAAW,OAAO,QAAW,EAC9C,EAAW,EAAU,KACzB,CAAC,IACC,GAAQ,MACR,OAAO,IAAS,aACd,EAAoB,MAAS,EAAoB,QACvD,EAEM,EAAY,EAAQ,cAAgB,EAEpC,EAAU,GACd,CACE,MAAO,EACH,8DACA,qBACJ,OACA,OAAO,EAAG,CACR,GAAI,CAAC,EAAQ,UACX,GAAe,CAAC,GAGpB,UAAU,CAAC,EAAkB,CAC3B,GAAI,CAAC,EAAQ,UAAW,OACxB,EAAM,eAAe,GAEvB,WAAW,EAAG,CACZ,GAAI,CAAC,EAAQ,UAAW,OACxB,GAAoB,GAEtB,WAAW,CAAC,EAAkB,CAC5B,GAAI,CAAC,EAAQ,UAAW,OACxB,IAAM,EAAU,EAAM,cACtB,GAAI,GAAW,EAAQ,SAAS,CAAO,EAAG,OAE1C,GACE,GACA,GAAY,KACV,CAAC,IAAM,EAAE,KAAK,SAAS,CAAO,GAAK,EAAE,OAAO,SAAS,CAAO,CAC9D,EAEA,OAEF,GAAoB,CAAS,EAEjC,EACA,GACE,CACE,MAAO,CACL,SAAU,EAAO,YAAc,KAC/B,MAAO,OAAO,IAAU,SAAW,GAAG,MAAY,CACpD,EACA,WAAW,CAAC,EAAc,CACxB,EAAM,eAAe,EACrB,EAAM,gBAAgB,EAE1B,EACA,GAAG,EAAU,IAAI,CAAC,IAAS,GAAe,EAAM,CAAO,CAAC,CAC1D,CACF,EACA,OAAO,GAQL,GACE,GAA4B,CAAC,EAC/B,GAAuD,KAErD,GAAsB,IAAM,CAChC,GAAI,GACF,aAAa,EAAc,EAC3B,GAAiB,MAIf,GAAsB,CAAC,IAAkB,CAC7C,GAAoB,EACpB,GAAiB,WAAW,IAAM,CAChC,GAAiB,KACjB,GAAe,CAAK,GACnB,GAAG,GAGK,GAAiB,CAAC,EAAQ,IAA8B,CAEnE,GADA,GAAoB,EAChB,IAAU,EACZ,SACG,iBAAiB,mDAAmD,EACpE,QAAQ,CAAC,IAAO,EAAG,UAAU,OAAO,gBAAiB,gBAAgB,CAAC,EAE3E,IAAM,EAAc,GAAY,OAAO,CAAK,EAC5C,QAAW,KAAU,EAEnB,GADA,EAAO,KAAK,OAAO,EACf,EAAO,QACT,EAAO,QAAQ,EAInB,OADA,GAAa,EAAY,GAClB,EAAQ,EAAI,GAAY,EAAQ,GAAK,QAyBjC,EAAU,CAAC,IAAkC,CACxD,GAAW,EACX,EAAU,OAAO,OAAO,CAAE,aAAc,CAAE,EAAG,CAAO,EACpD,IAAQ,SAAQ,WAAU,gBAAiB,EAC3C,GAAI,IAAc,CAAC,SAAS,KAAK,SAAS,IAAY,IAAI,EACxD,GAAa,OAEf,GAAI,GAAY,QAAU,CAAC,SAAS,KAAK,SAAS,GAAY,GAAG,IAAI,EACnE,GAAY,OAAO,CAAC,EAEtB,GAAI,EAAQ,UAAW,CAGrB,GACE,GAAY,OAAS,GACrB,GAAY,IAAgB,SAAW,EAEvC,OAEF,GAAe,CAAY,EACtB,KACL,GAAI,IAAiB,GAAK,IAAY,SAAW,EAAQ,OACzD,IAAM,EAAS,GAAe,CAAY,EAC1C,GAAI,IAAY,SAAW,EAAQ,OACnC,GAAI,GAAU,EAAO,SAAW,EAAQ,CACtC,GAAe,EACf,QAIJ,GAAI,CAAC,EAAQ,WAAW,OACtB,OAEF,IAAM,EAAU,GAAK,CAAO,EACtB,EAAQ,GAAS,CACrB,UACA,SACA,UACF,CAAC,EACD,EAAM,eAAiB,EAAQ,UAAY,SAAW,SACtD,GAAY,KAAK,CACf,SACA,KAAM,EACN,QAAS,EAAQ,OACnB,CAAC,GAGU,GAAc,CAAC,IAAsC,CAChE,GAAW,EACX,IAAQ,eAAc,GAAS,EACzB,EAAW,GACf,EAAQ,UACR,EACA,EAAQ,YACV,EACA,GAAI,CAAC,EAAS,OAAQ,OACtB,EAAQ,IACH,EACH,UAAW,EACX,UAAW,GACX,WAAY,CACd,CAAC,GAQI,SAAS,EAAkB,CAChC,EACA,EACA,EAAkB,CAAC,EACQ,CAC3B,QAAW,KAAQ,EAAO,CACxB,GAAI,CAAC,EAAM,SACX,GAAI,OAAO,IAAS,WAAY,SAChC,IAAQ,YAAa,GACb,aAAc,EAEtB,GAAI,GACF,GAAI,GAAc,EAAO,CAAQ,EAAG,CAClC,IAAM,EAAa,EAEnB,GAAI,EAAW,SAAW,CAAC,EAAW,QAAQ,EAAG,OAEjD,GAAI,EAAK,KAAK,CAAC,IAAQ,EAAI,SAAW,CAAC,EAAI,QAAQ,CAAC,EAAG,OACvD,MAAO,CAAE,OAAQ,EAAY,MAAK,GAE/B,QAAI,EAAW,CACpB,IAAM,EAAQ,GAAmB,GAAiB,CAAS,EAAG,EAAO,CACnE,GAAG,EACH,CACF,CAAC,EACD,GAAI,EAAO,OAAO,GAGtB,OAQK,MAAM,WAAiB,CAAyB,OAC9C,kBAAmB,kBACnB,gBAAiB,CACtB,QAAS,CACP,QAAS,cACT,SAAU,EAAK,UACf,UAAW,EAAK,SAClB,EACA,eAAgB,CACd,OAAQ,EACR,QAAS,EACT,UAAW,UACX,KAAM,IACN,UAAW,QACb,EACA,2BAA4B,CAC1B,QAAS,OACT,WAAY,SACZ,IAAK,EAAW,mBAAmB,MAAM,CAC3C,CACF,QAEO,gBAAiB,CACtB,UAAW,OACX,UAAW,GACX,KAAM,GACN,YAAa,GACb,gBAAiB,EACjB,aAAc,EAChB,EAEA,UAAwB,CAAC,EACzB,WAA4D,KAEpD,aAAe,GAEf,YAAY,CAAC,EAA2B,CAC9C,GAAI,CAAC,KAAK,YAAa,MAAO,GAC9B,IAAM,EAAW,GAAc,KAAK,WAAW,EAE/C,MADkB,CAAC,GAAI,EAAM,cAAc,OAAS,CAAC,CAAE,EACtC,KAAK,CAAC,IAAM,EAAS,KAAK,CAAC,IAAM,GAAc,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,EAG1E,SAAW,CAAC,IAAiB,CAC3B,GAAI,EAAM,OAAS,SAAY,EAAwB,OAAS,QAC9D,EAAQ,CACN,OAAQ,KAAK,MAAM,QACnB,MAAO,KAAK,UACZ,UAAW,KAAK,UAChB,UAAW,KAAK,SAClB,CAAC,EACD,EAAM,gBAAgB,EACtB,EAAM,eAAe,GAIzB,gBAAkB,CAAC,IAAqB,CAEtC,GADA,KAAK,aAAe,KAAK,aAAa,CAAK,EACvC,CAAC,KAAK,aAAc,OACxB,GAAoB,EACpB,KAAK,UAAU,IAAI,gBAAiB,gBAAgB,EACpD,IAAM,EAAY,CAAC,GAAI,EAAM,cAAc,OAAS,CAAC,CAAE,EACvD,GAAI,KAAK,UAAU,OACjB,GAAY,CACV,OAAQ,KAAK,MAAM,QACnB,UAAW,KAAK,UAChB,UAAW,EACX,MAAO,KAAK,UACZ,UAAW,KAAK,UAChB,gBAAiB,KAAK,iBAAmB,OACzC,aAAc,KAAK,YACrB,CAAC,EAEH,EAAM,eAAe,GAGvB,eAAiB,CAAC,IAAqB,CACrC,GAAI,CAAC,KAAK,aAAc,OAExB,GADA,EAAM,eAAe,EACjB,EAAM,aACR,EAAM,aAAa,WAAa,KAAK,WAAa,OAAS,QAI/D,gBAAkB,CAAC,IAAqB,CACtC,GAAI,CAAC,KAAK,aAAc,OACxB,IAAM,EAAU,EAAM,cACtB,GAAI,GAAW,KAAK,SAAS,CAAO,EAAG,OAEvC,GACE,GACA,GAAY,KACV,CAAC,IAAM,EAAE,KAAK,SAAS,CAAO,GAAK,EAAE,OAAO,SAAS,CAAO,CAC9D,EACA,CACA,KAAK,UAAU,OAAO,gBAAiB,gBAAgB,EACvD,OAEF,KAAK,UAAU,OAAO,gBAAiB,gBAAgB,EACvD,GAAoB,CAAC,GAGvB,WAAa,CAAC,IAAqB,CACjC,GAAI,CAAC,KAAK,cAAgB,CAAC,KAAK,WAAY,OAI5C,GAHA,EAAM,eAAe,EACrB,EAAM,gBAAgB,EACtB,KAAK,UAAU,OAAO,gBAAiB,gBAAgB,EACnD,EAAM,aACR,KAAK,WAAW,EAAM,YAAY,EAEpC,GAAe,CAAC,GAGlB,QAAU,IACR,GAAO,CAAE,SAAU,EAAG,KAAM,UAAW,QAAS,KAAK,QAAS,EAAG,GAAS,CAAC,EAE7E,eAAiB,MAAO,IAAyB,CAC/C,IAAM,EAAQ,GAAmB,KAAK,UAAW,CAAK,EACtD,GAAI,CAAC,EAAO,OAEZ,EAAM,eAAe,EACrB,EAAM,yBAAyB,EAE/B,IAAQ,OAAQ,EAAY,QAAS,EAGrC,GAAI,KAAK,aAAe,SAAS,KAAK,SAAS,IAAI,EACjD,MAAM,KAAK,gBAAgB,EAAM,CAAU,EAG7C,GAAI,EAAW,kBAAkB,SAC/B,EAAW,OAAO,GAId,qBAAqB,CAC3B,EACA,EACoB,CACpB,QAAW,KAAM,EAAU,iBAAiB,gBAAgB,EAAG,CAG7D,IAAM,EAAY,EAAG,SAAS,GAC9B,GAAI,GAAa,EAAU,cAAgB,EACzC,OAAO,EAGX,OAAO,UAGK,gBAAe,CAC3B,EACA,EACe,CAEf,GAAe,CAAC,EAGhB,EAAQ,CACN,OAAQ,KAAK,MAAM,QACnB,MAAO,KAAK,UACZ,UAAW,KAAK,UAChB,UAAW,KAAK,SAClB,CAAC,EACD,MAAM,IAAI,QAAQ,CAAC,IAAM,WAAW,EAAG,EAAE,CAAC,EAG1C,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,IAAM,EAAQ,EAAI,EACZ,EAAc,GAAY,IAAI,KACpC,GAAI,CAAC,EAAa,MAElB,IAAM,EAAY,KAAK,sBAAsB,EAAa,EAAK,GAAG,OAAO,EACzE,GAAI,CAAC,EAAW,MAEhB,EAAQ,CACN,OAAQ,EACR,MAAO,KAAK,UACZ,UAAW,KAAK,UAChB,UAAW,GAAiB,EAAK,GAAG,SAAS,EAC7C,aAAc,EACd,SAAU,MACZ,CAAC,EACD,MAAM,IAAI,QAAQ,CAAC,IAAM,WAAW,EAAG,EAAE,CAAC,EAI5C,IAAM,EAAY,GAAY,GAAY,OAAS,IAAI,KACvD,GAAI,EAAW,CACb,IAAM,EAAS,KAAK,sBAAsB,EAAW,EAAO,OAAO,EACnE,GAAI,EACF,EAAO,UAAU,IACf,0BACA,0BACF,EAKJ,MAAM,IAAI,QAAQ,CAAC,IAAM,WAAW,EAAG,GAAG,CAAC,EAG3C,GAAe,CAAC,EAGlB,WAAW,EAAG,CACZ,MAAM,EACN,KAAK,iBAAiB,UAAW,KAAK,QAAQ,EAC9C,KAAK,iBAAiB,YAAa,KAAK,eAAe,EACvD,KAAK,iBAAiB,WAAY,KAAK,cAAc,EACrD,KAAK,iBAAiB,YAAa,KAAK,eAAe,EACvD,KAAK,iBAAiB,OAAQ,KAAK,UAAU,EAG/C,iBAAiB,EAAG,CAIlB,GAHA,MAAM,kBAAkB,EACxB,GAAW,EACX,SAAS,iBAAiB,UAAW,KAAK,eAAgB,EAAI,EAC1D,KAAK,YACP,KAAK,QAAQ,KAAO,KAAK,YAI7B,oBAAoB,EAAS,CAC3B,MAAM,qBAAqB,EAE3B,SAAS,oBAAoB,UAAW,KAAK,cAAc,EAE/D,CAEO,IAAM,GAAW,GAAS,eAAe,EAGnC,GAAU,GAIV,GAA2B,GC1kDxC,IAAQ,UAAQ,QAAM,UAAU,EAwB1B,GAAW,CAAC,EAAwB,IAA2B,CACnE,MAAO,CAAC,CAAC,EAAQ,KAAK,CAAC,IAAW,CAChC,GAAI,IAAW,MAAQ,GAAS,KAC9B,MAAO,GACF,QAAI,MAAM,QAAQ,CAAM,EAC7B,OAAO,GAAS,EAAQ,CAAK,EACxB,QAAK,EAAwB,QAAU,GAAS,IAAW,EAChE,MAAO,GAEV,GAQI,MAAM,WAAmB,CAAuB,OAC9C,kBAAmB,oBACnB,gBAAiB,SAEjB,gBAAiB,CACtB,QAAS,CAEP,oBAAqB,8BACrB,2BAA4B,+BAC5B,wBAAyB,gCACzB,8BAA+B,gCAC/B,2BAA4B,OAC5B,4BAA6B,QAE7B,QAAS,yBACT,eAAgB,gCAChB,YAAa,6BACb,kBAAmB,mCACnB,eAAgB,gCAChB,eAAgB,iCAChB,QAAS,cACT,SAAU,UACZ,EACA,eAAgB,CACd,QAAS,OACT,WAAY,SACZ,aAAc,SACd,IAAK,EAAK,cACV,UAAW,OACX,OAAQ,EAAK,oBACb,QAAS,EAAK,kBACd,SAAU,WACV,MAAO,MACT,EACA,+CAAgD,CAC9C,QAAS,MACX,EACA,6CAA8C,CAC5C,QAAS,MACX,EACA,uBAAwB,CACtB,MAAO,EAAK,qBACZ,QAAS,EAAK,uBACd,OAAQ,EAAK,oBACb,WAAY,EAAK,oBACjB,UAAW,OACX,WAAY,SACZ,QAAS,OACT,WAAY,cACZ,KAAM,GACR,EACA,mCAAoC,CAClC,SAAU,SACV,aAAc,WACd,WAAY,aACd,CACF,QAEO,gBAAiB,CACtB,SAAU,GACV,YAAa,GACb,SAAU,GACV,YAAa,GACb,UAAW,GACX,SAAU,GACV,SAAU,GACV,KAAM,EACR,EAEQ,SAA0B,CAAC,KAE/B,QAAO,EAAkB,CAC3B,OAAO,KAAK,YAGV,QAAO,CAAC,EAA2B,CACrC,GAAI,OAAO,IAAM,SACf,KAAK,SAAW,GAAW,mBAAmB,CAAC,EAE/C,UAAK,SAAW,EAElB,KAAK,YAAY,QAIJ,mBAAkB,CAAC,EAAmC,CACnE,OAAO,EAAW,MAAM,GAAG,EAAE,IAAI,CAAC,IAAW,CAC3C,IAAM,EAAU,EAAO,KAAK,EAC5B,GAAI,IAAY,GAAI,OAAO,KAC3B,IAAO,EAAO,GAAW,EAAQ,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EAC/D,GAAI,CAAC,EAEH,MAAO,CAAE,QAAO,QAAS,CAAM,EAEjC,IAAO,EAAS,GAAY,EAAQ,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EAClE,MAAO,CACL,QACA,QAAS,GAAW,EACpB,KAAM,GAAY,MACpB,EACD,EAEH,MAAQ,GACR,OAAS,GACD,WAAa,GAGrB,oBAAoB,CAAC,EAAmB,CACtC,KAAK,SAAW,EAGlB,iBAAiB,EAAG,CAClB,KAAK,MAAQ,GAGP,SAAW,CAAC,EAAe,EAAgB,KAAU,CAC3D,GAAI,KAAK,QAAU,EACjB,KAAK,MAAQ,EACb,KAAK,YAAY,EAAI,EAEvB,GAAI,EACF,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC,GAIlC,SAAW,IAAM,KAAK,SAE1B,cAAa,EAAkB,CACjC,OAAO,KAAK,QAGN,oBAAsB,CAC5B,IACa,CACb,GAAI,IAAW,KACb,OAAO,KAET,IAAQ,WAAU,YAAa,KAC3B,EACA,EACA,EACA,EACA,EACJ,GAAI,OAAO,IAAW,SACpB,EAAU,EAAQ,EAEjB,KAAC,CAAE,OAAM,UAAS,QAAO,UAAS,YAAW,EAC5C,GAKJ,GAAI,KAAK,UACP,EAAU,EAAS,CAAO,EAE5B,IAAQ,WAAY,EACpB,GAAI,EACF,MAAO,CACL,OACA,UACA,UACA,aACA,QAAS,IAAM,GAAS,EAAS,EAAS,CAAC,EAC3C,UAAW,EAAQ,IAAI,KAAK,mBAAmB,CACjD,EAEF,MAAO,CACL,OACA,UACA,UACA,aACA,QAAS,IAAM,EAAS,IAAM,EAC9B,OACE,OAAO,IAAU,WACb,SAAY,CACV,IAAM,EAAW,MAAO,EAAwB,EAChD,GAAI,IAAa,OACf,EAAS,EAAU,EAAI,GAG3B,IAAM,CACJ,GAAI,OAAO,IAAU,SACnB,EAAS,EAAO,EAAI,EAGhC,GAGF,cAA4B,CAAC,KAEzB,YAAW,EAAe,CAC5B,IAAM,EAAU,KAAK,cAAc,IAAI,KAAK,mBAAmB,EAC/D,GAAI,KAAK,SAAW,GAClB,OAAO,EAET,IAAM,EAAa,CAAC,IAAqB,CACvC,GAAI,IAAW,MAAQ,OAAO,IAAW,WACvC,MAAO,GACF,QAAK,EAAmB,UAAW,CACxC,IAAM,EAAW,GAAkB,EAAmB,SAAS,EAE/D,OADE,EAAmB,UAAY,EAAS,OAAO,CAAU,EACpD,EAAS,OAAS,EAEzB,YAAO,EAAO,QAAQ,kBAAkB,EAAE,SAAS,KAAK,MAAM,GAGlE,OAAO,EAAQ,OAAO,CAAU,EAGlC,aAAe,CAAC,IAAiB,CAC/B,IAAQ,SAAU,KAAK,MACjB,EAAW,EAAM,OAAS,GAChC,GAAI,KAAK,QAAU,OAAO,CAAQ,EAChC,KAAK,MAAQ,EACb,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC,EAExC,KAAK,OAAS,GACd,EAAM,gBAAgB,EACtB,EAAM,eAAe,GAGvB,UAAY,CAAC,IAAyB,CACpC,GAAI,EAAM,MAAQ,QAChB,EAAM,eAAe,GAIzB,WAAa,GAAS,IAAM,CAC1B,KAAK,OACH,KAAK,MAAM,MACX,MAAM,kBAAkB,EAC1B,GAAe,CAAC,EAChB,KAAK,WAAW,EACjB,EAED,WAAa,CAAC,IAAkB,CAC9B,GAAI,GAAS,EAAM,OAAS,QAC1B,KAAK,OAAS,GAEhB,KAAK,cAAgB,KAAK,YAC1B,KAAK,WAAa,GAClB,KAAK,mBAAmB,EACxB,EAAQ,CACN,OAAQ,KACR,UAAW,KAAK,cAChB,YAAa,GACb,KAAM,UACN,QAAS,IAAM,CACb,KAAK,WAAa,GAClB,KAAK,mBAAmB,EAE5B,CAAC,GAGK,kBAAkB,EAAG,CAC3B,IAAQ,SAAU,KAAK,MACvB,EAAM,aAAa,gBAAiB,OAAO,KAAK,UAAU,CAAC,EAG7D,QAAU,IAAM,CACd,GACE,CACE,KAAM,SACN,KAAM,SACN,QAAS,KAAK,UAChB,EACA,GAAK,EACL,GAAM,CACJ,KAAM,QACN,MAAO,KAAK,MACZ,SAAU,EACV,KAAM,WACN,aAAc,UACd,aAAc,QACd,iBAAkB,KAAK,SAAW,OAAS,OAC3C,UAAW,KAAK,UAChB,QAAS,KAAK,WACd,SAAU,KAAK,YACjB,CAAC,EACD,EAAM,YAAY,CACpB,CACF,KAEI,WAAU,EAAmB,CAC/B,IAAM,EAAsB,CAAC,EAE7B,SAAS,CAAO,CAAC,EAA2B,CAC1C,QAAW,KAAU,EACnB,GAAI,OAAO,IAAW,SACpB,EAAI,KAAK,CAAE,QAAS,EAAQ,MAAO,CAAO,CAAC,EACtC,QAAK,GAAyB,MACnC,EAAI,KAAK,CAAsB,EAC1B,QAAK,GAAgC,QAC1C,EAAS,EAA+B,OAAO,EAMrD,OADA,EAAQ,KAAK,aAAa,EACnB,EAGT,UAAU,EAAiB,CAEzB,OADc,KAAK,WAAW,KAAK,CAAC,IAAW,EAAO,QAAU,KAAK,KAAK,GAC1D,CAAE,QAAS,KAAK,MAAO,MAAO,KAAK,KAAM,EAG3D,cAAgB,IAAM,CACpB,KAAK,YAAY,GAGnB,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EAGxB,IAAM,EAAc,KAAK,aAAa,SAAS,EAC/C,GAAI,GAAe,KAAK,SAAS,SAAW,EAC1C,KAAK,SAAW,GAAW,mBAAmB,CAAW,EAG3D,GAAI,KAAK,UACP,GAAa,aAAa,IAAI,IAAI,EAItC,oBAAoB,EAAG,CAGrB,GAFA,MAAM,qBAAqB,EAEvB,KAAK,UACP,GAAa,aAAa,OAAO,IAAI,EAIzC,MAAM,EAAS,CACb,MAAM,OAAO,EAEb,IAAQ,QAAO,UAAW,KAAK,MAC/B,EAAO,SAAW,KAAK,SACvB,IAAM,EAAO,EAAM,uBAEb,EAAS,KAAK,WAAW,EAC3B,EAAmB,GAAK,EAE5B,GADA,EAAM,MAAQ,KAAK,UAAY,EAAS,EAAO,OAAO,EAAI,EAAO,QAC7D,EAAO,KACT,GAAI,EAAO,gBAAgB,YACzB,EAAU,EAAO,KAAK,UAAU,EAAI,EAEpC,OAAU,EAAM,EAAO,MAAM,EAGjC,EAAK,YAAY,CAAO,EACxB,EAAM,aACJ,cACA,KAAK,UAAY,EAAS,KAAK,WAAW,EAAI,KAAK,WACrD,EACA,EAAM,MAAM,cAAgB,KAAK,SAAW,GAAK,OACjD,EAAM,SAAW,CAAC,KAAK,SAE3B,CAKO,IAAM,GAA+B,GAE/B,GACX,GAAW,eAAe,EAGf,GAAY,GACvB,IAAI,IAAwC,GAAW,GAAG,CAAI,EAC9D,4EACF,EClTA,IAAQ,SAAS,GAEF,QAAS,EAAK,CAC3B,KAAM,CACJ,OAAQ,OAAO,UAAU,SACzB,QAAS,CAAC,OAAO,UAAU,QAAQ,EACnC,UAAW,CAAC,OAAO,UAAU,QAAQ,EACrC,MAAO,CAAC,EAAE,EACV,UAAW,CAAC,EACZ,cAAe,CACb,CACE,KAAM,GAAK,EACX,QAAS,OAAO,UAAU,SAC1B,MAAO,OAAO,UAAU,QAC1B,CACF,CACF,CACF,CAAC,EAED,GAAS,cAAgB,CACvB,KAAK,CAAC,EAAQ,EAAS,CACrB,GAAI,aAAkB,GACpB,EAAO,QAAU,EAGvB,EAEO,IAAM,GAAY,CAAC,IAAqB,CAC7C,GAAI,EAAK,QAAQ,MAAM,SAAS,CAAQ,EACtC,EAAK,OAAO,MAAQ,EAEpB,aAAQ,MAAM,YAAY,oBAA2B,GAI5C,GAAkB,IAAM,CACnC,IAAM,EAAa,MAAM,KAAK,GAAc,YAAY,EACxD,QAAW,KAAa,EACtB,EAAU,cAAc,EAE1B,GAAyB,GAI3B,EAAK,OAAO,QAAQ,EAAe,EAInC,IAAM,GAAiB,sBAQhB,SAAS,EAAc,CAAC,EAAmB,CAChD,IAAM,EAAO,EAAG,aAAa,EAAc,EAC3C,GAAI,CAAC,EAAM,OACX,IAAI,EACJ,GAAI,CACF,EAAM,KAAK,MAAM,CAAI,EACrB,MAAO,EAAK,CACZ,QAAQ,KAAK,uCAAuC,IAAQ,CAAG,EAC/D,OAEF,GAAI,CAAC,GAAO,OAAO,IAAQ,SAAU,OACrC,QAAY,EAAM,KAAQ,OAAO,QAAQ,CAAG,EAAG,CAC7C,GAAI,OAAO,IAAQ,SAAU,SAC7B,EAAG,aAAa,EAAM,EAAS,CAAG,CAAC,GAIvC,SAAU,EAAkB,CAAC,EAAiD,CAC5E,QAAW,KAAM,MAAM,KAAK,EAAK,iBAAiB,IAAI,KAAiB,CAAC,EACtE,MAAM,EAER,QAAW,KAAM,MAAM,KAAK,EAAK,iBAAiB,GAAG,CAAC,EAAG,CACvD,IAAM,EAAU,EACb,WACH,GAAI,EAAQ,MAAO,GAAmB,CAAM,GAIhD,SAAS,EAAwB,EAAS,CACxC,GAAI,OAAO,SAAa,IAAa,OACrC,QAAW,KAAM,GAAmB,QAAQ,EAC1C,GAAe,CAAE,EAOrB,IAAI,GAA6C,KAEjD,GACE,OAAO,SAAa,KACpB,OAAO,iBAAqB,IAC5B,CACA,IAAM,EAAgB,IAAY,CAChC,GAAI,CAAC,SAAS,KAAM,CAClB,eAAe,CAAa,EAC5B,OAEF,GAAoB,IAAI,iBAAiB,CAAC,IAAY,CACpD,QAAW,KAAO,EAAS,CACzB,GAAI,EAAI,OAAS,cAAgB,EAAI,kBAAkB,QAAS,CAC9D,GAAe,EAAI,MAAM,EACzB,SAEF,QAAW,KAAQ,MAAM,KAAK,EAAI,UAAU,EAAG,CAC7C,GAAI,EAAE,aAAgB,SAAU,SAChC,GAAI,EAAK,aAAa,EAAc,EAAG,GAAe,CAAI,EAC1D,QAAW,KAAM,MAAM,KACrB,EAAK,iBAAiB,IAAI,KAAiB,CAC7C,EACE,GAAe,CAAE,IAIxB,EACD,GAAkB,QAAQ,SAAS,KAAM,CACvC,UAAW,GACX,QAAS,GACT,WAAY,GACZ,gBAAiB,CAAC,EAAc,CAClC,CAAC,EAED,GAAyB,GAE3B,EAAc,EAGhB,IAAM,GAAc,GAAW,CAAC,IAAgC,CAC9D,EAAO,QAAQ,kBAAkB,CACnC,CAAC,EAEM,SAAS,EAAgB,CAAC,EAA0B,CACzD,IAAO,GAAW,EAAW,KAAU,GAAW,EAC/C,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,IAAS,EAAK,MAAM,IAAI,CAAC,EACjC,GAAI,GAAW,GAAa,GAAS,EAAS,CAoB5C,GAnBA,EAAK,QAAQ,MAAQ,EACrB,EAAK,UAAU,MAAQ,EACvB,EAAK,MAAM,MAAQ,EACnB,EAAK,UAAU,MAAQ,EAAQ,OAC7B,CAAC,EAAqB,IAAsB,CAE1C,OADA,EAAI,EAAQ,GAAG,kBAAkB,GAAK,EAC/B,GAET,CAAC,CACH,EACA,EAAK,cAAc,MAAQ,EACxB,IAAI,CAAC,EAAQ,KAAW,CACvB,KAAM,GAAK,CAAE,MAAO,EAAQ,EAAO,EAAG,EAAM,EAAM,EAClD,QAAS,EAAU,GACnB,MAAO,CACT,EAAE,EACD,KAAK,EAAW,EAGf,CAAC,EAAK,QAAQ,MAAM,SAAS,EAAK,OAAO,KAAK,EAAG,CACnD,IAAM,EAAY,EAAK,OAAO,MAAiB,UAAU,EAAG,CAAC,EAC7D,EAAK,OAAO,MACV,EAAK,QAAQ,MAAM,KACjB,CAAC,IAAmB,EAAO,UAAU,EAAG,CAAC,IAAM,CACjD,GAAK,EAAK,QAAQ,MAAM,GAE5B,GAAgB,GAIb,SAAS,CAAQ,CAAC,EAAqB,CAC5C,GAAI,EAAI,SAAS,GAAE,EACjB,OAAO,EAAS,EAAI,UAAU,EAAG,EAAI,OAAS,CAAC,CAAC,EAAI,IAEtD,IAAM,EAAQ,EAAK,QAAQ,MAAM,QAAQ,EAAK,OAAO,KAAK,EAC1D,GAAI,EAAQ,GAAI,CACd,IAAM,EAAiB,EACrB,EAAK,SACP,EACM,EAAW,EAAI,kBAAkB,EACjC,EAAM,EAAe,GACvB,EAAY,GAAO,EAAI,GAE3B,IAAK,CAAC,GAAa,IAAc,MAAQ,EAAS,SAAS,GAAG,EAAG,CAC/D,IAAM,EACJ,EAAe,EAAS,UAAU,EAAG,EAAS,QAAQ,GAAG,CAAC,GAC5D,EAAY,GAAW,EAAQ,GAEjC,GAAI,EACF,EAAY,EAAU,MAAM,IAAK,CAAC,EAAE,GACpC,EACE,EAAI,kBAAkB,IAAM,EACxB,EAAU,kBAAkB,EAC5B,EAEN,OAAM,EAAI,MAAM,IAAK,CAAC,EAAE,GAG1B,OAAM,EAAI,MAAM,IAAK,CAAC,EAAE,GAE1B,OAAO,EAGF,MAAM,WAAyB,CAAU,OACvC,kBAAmB,2BAEnB,gBAAiB,CACtB,YAAa,EACf,EAEA,QAAU,IAAM,CACd,OAAO,GAAW,CAChB,KAAM,SACN,SAAU,GACV,MAAO,EAAS,UAAU,EAC1B,UAAW,EAAK,OAChB,kBAAmB,EAAK,aAC1B,CAAC,GAGH,MAAM,EAAS,CACb,MAAM,OAAO,EAEb,KAAK,MAAM,OAAO,gBAAgB,eAAgB,KAAK,WAAW,EAEtE,CAKO,IAAM,GAAwC,GAExC,GAAmB,GAAiB,eAAe,EAGnD,GAAe,GAQrB,MAAM,WAAsB,CAAU,OACpC,kBAAmB,uBACnB,gBAAiB,CACtB,QAAS,CACP,cAAe,MACjB,CACF,QAEO,cAAe,IAAI,UACnB,gBAAiB,CACtB,UAAW,EACb,EAEA,SAAW,IAAM,EAAS,SAAS,EAEnC,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EAExB,GAAc,aAAa,IAAI,IAAoC,EAGrE,oBAAoB,EAAS,CAC3B,MAAM,qBAAqB,EAE3B,GAAc,aAAa,OAAO,IAAoC,EAGxE,aAAa,EAAG,CACd,GAAI,CAAC,KAAK,UACR,KAAK,UAAY,KAAK,aAAe,GAEvC,KAAK,YAAc,KAAK,UAAY,EAAS,KAAK,SAAS,EAAI,GAGjE,MAAM,EAAG,CACP,MAAM,OAAO,EAEb,KAAK,cAAc,EAEvB,CAKO,IAAM,GAAqC,GAErC,GAAgB,GAAc,eAAe,EAG7C,GAAe,GC3hBrB,SAAS,EAAc,CAAC,EAA0B,CACvD,IAAM,EAAI,yCAAyC,KAAK,CAAI,EAC5D,GAAI,CAAC,EAAG,MAAO,CAAE,KAAM,EAAK,KAAK,EAAE,YAAY,EAAG,KAAM,CAAC,CAAE,EAC3D,IAAM,EACJ,EAAE,KAAO,OACL,CAAC,EACD,EAAE,GACC,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO,EACvB,MAAO,CAAE,KAAM,EAAE,GAAG,YAAY,EAAG,MAAK,EAG1C,SAAS,EAAa,EAAuB,CAC3C,GAAI,CACF,OAAQ,EAAuC,OAAO,OAAS,OAC/D,KAAM,CACN,QASJ,SAAS,EAAQ,CAAC,EAA0D,CAC1E,IAAI,EAAwC,GACxC,EACJ,MAAO,IAAyB,CAC9B,IAAM,EAAM,GAAc,EAC1B,GAAI,IAAQ,EACV,EAAM,EACN,EAAK,EAAM,CAAG,EAEhB,OAAO,GAGX,IAAM,GAAO,OAAO,SAAS,EAE7B,SAAS,EAAQ,CAAC,EAA+B,CAC/C,GAAI,IAAU,MAAQ,IAAU,QAAa,IAAU,GAAI,OAAO,KAClE,IAAM,EAAI,OAAO,IAAU,SAAW,EAAQ,OAAO,CAAK,EAC1D,OAAO,OAAO,SAAS,CAAC,EAAI,EAAI,KAIlC,IAAM,GAAgB,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EACpE,GAAiB,CAAC,IAAK,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAEnF,SAAS,EAAW,CAClB,EACA,EACA,EACA,EACA,EACQ,CACR,IAAM,EAAM,EAAI,EACZ,EAAI,KAAK,IAAI,CAAC,EACd,EAAI,EACR,MAAO,GAAK,GAAQ,EAAI,EAAM,OAAS,EACrC,GAAK,EACL,GAAK,EAEP,IAAM,GAAO,IAAM,EAAI,EAAQ,GAAQ,OAAO,CAAC,EAC/C,MAAO,GAAG,EAAM,IAAM,KAAK,KAAY,EAAM,KAG/C,SAAS,EAAY,CACnB,EACA,EACe,CACf,MAAO,CACL,QACA,SACA,KAAK,CAAC,EAAS,EAAO,CACpB,EAAQ,YAAc,EAAO,CAAK,EAEtC,EAIK,SAAS,EAAa,CAAC,EAAwC,CACpE,IAAQ,OAAM,QAAS,GAAe,CAAI,EAMpC,EAAkB,CACtB,KACmB,CACnB,MAAO,QACP,OAAQ,CAAC,IAAM,CACb,IAAM,EAAI,GAAS,CAAC,EACpB,OAAO,IAAM,KAAO,GAAK,EAAa,CAAC,GAEzC,KAAK,CAAC,EAAS,EAAG,CAChB,IAAM,EAAI,GAAS,CAAC,EACpB,EAAQ,YAAc,IAAM,KAAO,GAAK,EAAa,CAAC,EACtD,EAAQ,UAAU,OAAO,YAAa,IAAM,MAAQ,EAAI,CAAC,EACzD,EAAQ,UAAU,OAAO,QAAS,IAAM,CAAC,EAE7C,GAEM,EAAU,CAAC,IAAwD,CACvE,IAAM,EAAK,GAAS,CAAK,EACzB,OAAO,EAAgB,CAAC,IAAM,EAAG,EAAE,OAAO,CAAC,CAAC,GAG9C,OAAQ,OACD,SACH,OAAO,EAAQ,CAAC,IAAM,IAAI,KAAK,aAAa,CAAC,CAAC,MAC3C,WAAY,CACf,IAAM,GAAY,EAAK,IAAM,OAAO,YAAY,EAChD,OAAO,EACL,CAAC,IAAM,IAAI,KAAK,aAAa,EAAG,CAAE,MAAO,WAAY,UAAS,CAAC,CACjE,CACF,KACK,QAAS,CACZ,IAAM,EACJ,EAAK,KAAO,OACR,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,KAAK,MAAM,OAAO,EAAK,EAAE,CAAC,GAAK,CAAC,CAAC,EAC1D,EACN,OAAO,EACL,CAAC,IACC,IAAI,KAAK,aAAa,EAAG,CACvB,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,CACL,CACF,KACK,UAAW,CAEd,IAAM,EACJ,EAAK,KAAO,OACR,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,KAAK,MAAM,OAAO,EAAK,EAAE,CAAC,GAAK,CAAC,CAAC,EAC1D,EACN,OAAO,EACL,CAAC,IACC,IAAI,KAAK,aAAa,EAAG,CACvB,MAAO,UACP,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,CACL,CACF,KACK,MACH,OAAO,EAAQ,CAAC,IAAM,IAAI,KAAK,aAAa,EAAG,CAAE,SAAU,YAAa,CAAC,CAAC,MACvE,MACH,OAAO,EACL,CAAC,IAAM,IAAI,KAAK,aAAa,EAAG,CAAE,SAAU,aAAc,CAAC,CAC7D,MACG,QAAS,CACZ,IAAM,GAAO,EAAK,IAAM,IAAI,YAAY,IAAM,MACxC,EAAO,EAAM,KAAO,KACpB,EAAQ,EAAM,GAAiB,GAC/B,EAAS,GACb,CAAC,IAAM,IAAI,KAAK,aAAa,EAAG,CAAE,sBAAuB,CAAE,CAAC,CAC9D,EACM,EAAQ,GACZ,CAAC,IAAM,IAAI,KAAK,aAAa,EAAG,CAAE,sBAAuB,CAAE,CAAC,CAC9D,EACA,OAAO,EAAgB,CAAC,IAAM,GAAY,EAAG,EAAM,EAAO,EAAO,EAAG,EAAM,CAAC,CAAC,CAC9E,KACK,UAAW,CAId,IAAM,EAAW,EAAK,IAAM,cACtB,EAAY,EAAK,SAAW,EAAI,SAAW,EAAK,IAAM,KACtD,EAAW,CAAC,IAAqC,CACrD,GAAI,CAAC,EAAM,OAAO,KAClB,IAAM,EAAW,EAAkC,GACnD,OAAO,OAAO,IAAY,WACrB,EAAQ,EACT,SAAS,eAAe,EAAE,GAEhC,MAAO,CACL,MAAO,SACP,OAAQ,CAAC,IACP,EAAS,EAAI,EAAW,CAAS,GAAK,SAAS,eAAe,EAAE,EAClE,KAAK,CAAC,EAAS,EAAG,CAChB,IAAM,EAAO,EAAS,EAAI,EAAW,CAAS,EAC9C,EAAQ,gBAAgB,GAAI,EAAO,CAAC,CAAI,EAAI,CAAC,CAAE,EAEnD,CACF,SAGE,OAAO,GAAa,OAAW,CAAC,IAAO,GAAK,KAAO,GAAK,OAAO,CAAC,CAAE,GCoTxE,SAAS,EAAY,CACnB,EACA,EACA,EACkB,CAClB,IAAM,EAAU,EAAM,KACpB,CAAC,IAAS,EAAK,KAAU,QAAa,EAAK,KAAU,IACvD,EACA,GAAI,IAAY,OAAW,CACzB,IAAM,EAAQ,EAAQ,GACtB,OAAQ,OAAO,OACR,SACH,GAAI,EAAM,MAAM,eAAe,EAC7B,MAAO,GAAI,EACN,QAAI,EAAM,SAAS,GAAG,EAC3B,MAAO,IAAK,EAEZ,WAAO,IAAK,MAEX,SACH,MAAO,GAAI,MACR,UACH,MAAO,GAAI,MACR,SACH,MAAO,WAEP,MAAO,GAAI,GAGjB,MAAO,GAGT,IAAQ,OAAK,QAAM,WAAW,EA2BxB,GAAW,CAAC,IAAiB,EAa7B,GAAkB,IAAI,QAC5B,SAAS,EAAc,CAAC,EAA0C,CAChE,GAAI,CAAC,EAAI,MAAQ,EAAI,SAAU,OAAO,KACtC,IAAI,EAAW,GAAgB,IAAI,CAAG,EACtC,GAAI,CAAC,EACH,EAAW,GAAc,EAAI,IAAI,EACjC,GAAgB,IAAI,EAAK,CAAQ,EAEnC,OAAO,EAGF,MAAM,WAAkB,CAAa,OACnC,kBAAmB,mBAWnB,gBAAiB,CACtB,QAAS,CACP,0BAA2B,OAC3B,0BAA2B,+BAC3B,iCAAkC,QAClC,oCAAqC,OACrC,8BAA+B,QAC/B,QAAS,QACT,SAAU,SACV,WAAY,EAAW,YAAY,sBAAsB,CAC3D,EACA,qBAAsB,CACpB,MAAO,OACP,OAAQ,OACR,SAAU,OACV,mBAAoB,MACtB,EAKA,6BAA8B,CAC5B,QAAS,UACX,EACA,YAAa,CACX,QAAS,OACT,oBAAqB,EAAK,qBAC1B,MAAO,EAAK,sBACZ,OAAQ,EAAK,mBACb,WAAY,EAAW,YAAY,sBAAsB,CAC3D,EACA,mBAAoB,CAClB,SAAU,SACV,IAAK,IACL,OAAQ,IACR,WAAY,EAAW,kBACrB,EAAW,YAAY,sBAAsB,CAC/C,CACF,EAGA,8DAA+D,CAC7D,SAAU,SACV,OAAQ,GACV,EACA,uBAAwB,CACtB,SAAU,SACV,WAAY,SACZ,aAAc,WACd,QAAS,OACT,WAAY,SACZ,OAAQ,EAAK,mBACb,WAAY,EAAK,kBACnB,EACA,oBAAqB,CACnB,SAAU,SACV,OAAQ,IACR,WAAY,EAAW,YAAY,sBAAsB,CAC3D,EACA,uBAAwB,CACtB,OAAQ,IACR,WAAY,EAAW,kBACrB,EAAW,YAAY,sBAAsB,CAC/C,CACF,EACA,+BAAgC,CAC9B,WAAY,EAAW,oBACrB,+BACF,CACF,EACA,mCAAoC,CAClC,QAAS,wCACT,cAAe,OACf,OAAQ,GACV,EACA,0BAA2B,CACzB,OAAQ,GACV,EACA,wBAAyB,CACvB,UAAW,6CACb,EACA,uBAAwB,CACtB,UAAW,8CACb,EACA,yBAA0B,CACxB,UAAW,6CACb,EACA,sBAAuB,CACrB,UAAW,8CACb,EACA,0BAA2B,CACzB,MAAO,eACP,WAAY,OACZ,QAAS,EACT,WAAY,EAAK,mBACjB,OAAQ,EAAK,mBACb,MAAO,EAAK,kBACd,EACA,2BAA4B,CAC1B,OAAQ,WACV,EACA,kCAAmC,CACjC,WAAY,EAAK,yBACjB,MAAO,EAAK,2BACd,EACA,mBAAoB,CAClB,WAAY,EAAK,qBACnB,CACF,QAEO,gBAAiB,CACtB,UAAW,GACX,UAAW,GACX,eAAgB,GAChB,OAAQ,GACR,SAAU,GACV,UAAW,EACX,aAAc,EACd,OAAQ,GACR,OAAQ,GACR,UAAW,GACX,UAAW,EACb,EAEA,iBAAmC,IAAM,GAIzC,YAAkE,KAE1D,YAAc,OAAO,UAAU,EAC/B,cAAgB,CAAC,EAAc,IAAa,CAClD,GAAI,GAAO,KAAM,OACjB,EAAI,gBAAgB,gBAAiB,EAAI,KAAK,eAAiB,EAAI,GAGrE,eAAiB,IAKT,MAA4B,KAC5B,YAAkC,KAClC,UAAgC,KAChC,aAAmC,KACnC,uBAAkD,KAGlD,eAAiB,IAAI,QAIrB,OAAO,CAAC,EAAoB,CAClC,OAAO,GAAY,CAAI,EAIjB,QAAQ,CAAC,EAAsC,CACrD,IAAM,EAAM,EAAU,CAAI,EAC1B,QAAW,IAAU,CACnB,KAAK,UACL,KAAK,YACL,KAAK,YACP,EAAG,CACD,GAAI,CAAC,EAAQ,SACb,IAAM,EAAU,GAAe,CAAM,EACrC,GAAI,CAAC,EAAS,SACd,IAAM,EAAS,EAAQ,cAAc,IAAI,CAAG,EAC5C,GAAI,GAAU,EAAO,OAAS,EAAG,CAC/B,IAAM,EAAM,EAAO,GACf,EAAS,KAAK,eAAe,IAAI,CAAG,EACxC,GAAI,CAAC,EACH,EAAS,MAAM,KAAK,EAAI,QAAQ,EAChC,KAAK,eAAe,IAAI,EAAK,CAAM,EAErC,OAAO,GAGX,UAGE,MAAK,EAAc,CACrB,MAAO,CACL,MAAO,KAAK,MACZ,OAAQ,KAAK,OACb,QAAS,KAAK,OAChB,KAGE,MAAK,CAAC,EAAiB,CACzB,IAAQ,QAAO,UAAS,UAAW,EAAU,CAAI,EACjD,GACE,KAAK,SAAW,GAChB,KAAK,WAAa,GAClB,KAAK,UAAY,EAEjB,KAAK,YAAY,EAEnB,KAAK,OAAS,GAAS,CAAC,EACxB,KAAK,SAAW,GAAW,KAC3B,KAAK,QAAU,GAAU,GAGnB,QAAU,CAChB,QAAS,CAAC,EACV,cAAe,CAAC,EAChB,iBAAkB,CAAC,CACrB,EAEQ,OAAgB,CAAC,EACjB,SAAmC,KACnC,QAAuB,GACvB,MAIA,eACA,qBAEJ,cAAa,EAAsB,CACrC,OAAO,KAAK,kBAGV,cAAa,CAAC,EAAyB,CACzC,KAAK,eAAiB,EAAO,EAAU,CAAI,EAAI,OAC/C,KAAK,YAAY,KAGf,iBAAgB,EAAsB,CACxC,OAAO,KAAK,qBAGV,iBAAgB,CAAC,EAAyB,CAC5C,KAAK,kBAAoB,EAAO,EAAU,CAAI,EAAI,OAClD,KAAK,YAAY,KAKf,uBAAsB,EAAU,CAClC,GAAI,KAAK,eAAgB,OAAO,KAAK,eACrC,OAAO,KAAK,UAAY,EAAI,KAAK,OAAO,MAAM,EAAG,KAAK,SAAS,EAAI,CAAC,KAGlE,0BAAyB,EAAU,CACrC,GAAI,KAAK,kBAAmB,OAAO,KAAK,kBACxC,OAAO,KAAK,aAAe,EAAI,KAAK,OAAO,MAAM,CAAC,KAAK,YAAY,EAAI,CAAC,KAK9D,kBAAiB,EAAU,CACrC,GAAI,KAAK,gBAAkB,KAAK,kBAAmB,OAAO,KAAK,OAC/D,OAAO,KAAK,OAAO,MACjB,KAAK,UACL,KAAK,OAAO,OAAS,KAAK,YAC5B,EAGF,WAAW,EAAG,CACZ,MAAM,EAEN,KAAK,QAAU,EAAK,EACjB,KAAK,YAAa,KAAK,OAC1B,CAAC,EAAE,KAAK,eAGN,MAAK,EAAU,CACjB,OAAO,KAAK,UAGV,MAAK,CAAC,EAAiB,CACzB,KAAK,OAAS,EAAU,CAAQ,EAChC,KAAK,YAAY,KAGf,OAAM,EAAgB,CACxB,OAAO,KAAK,WAGV,OAAM,CAAC,EAAyB,CAClC,GAAI,KAAK,UAAY,EACnB,KAAK,QAAU,EACf,KAAK,YAAY,KAIjB,KAAI,EAA6B,CACnC,GAAI,KAAK,MACP,OAAO,KAAK,MAEd,IAAM,EAAa,KAAK,UAAU,KAChC,CAAC,IAAM,EAAE,OAAS,aAAe,EAAE,OAAS,YAC9C,EACA,GAAI,CAAC,EACH,OAEF,IAAQ,QAAS,EAEjB,OAAO,EAAW,OAAS,YACvB,CAAC,EAAQ,IAAY,EAAE,GAAQ,EAAE,GAAQ,EAAI,GAC7C,CAAC,EAAQ,IAAY,EAAE,GAAQ,EAAE,GAAQ,GAAK,KAGhD,KAAI,CAAC,EAAoC,CAC3C,GAAI,KAAK,QAAU,EACjB,KAAK,MAAQ,EACb,KAAK,YAAY,KAIjB,QAAO,EAAoB,CAC7B,GAAI,CAAC,MAAM,QAAQ,KAAK,QAAQ,EAAG,CACjC,IAAQ,UAAW,KACnB,KAAK,SAAW,OAAO,KAAK,EAAO,IAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAiB,CACjE,IAAM,EAAQ,GAAa,EAAQ,EAAM,KAAK,SAAS,EACvD,MAAO,CACL,KAAM,EAAK,QAAQ,kBAAmB,OAAO,EAAE,kBAAkB,EACjE,OACA,MACE,OAAO,EAAO,GAAG,KAAU,UAC1B,EAAO,GAAG,KAAU,IAAM,CAAC,MAAM,EAAO,GAAG,EAAK,EAC7C,QACA,OACN,QAAS,IAAU,GACnB,MAAO,EAAQ,EAAQ,CACzB,EACD,EAEH,OAAO,KAAK,YAGV,QAAO,CAAC,EAA6B,CACvC,KAAK,SAAW,EAChB,KAAK,YAAY,KAGf,eAAc,EAAoB,CACpC,IAAM,EAAU,KAAK,QAAQ,OAAO,CAAC,IAAM,EAAE,UAAY,EAAK,EACxD,EAAO,EAAQ,OAAO,CAAC,IAAM,EAAE,SAAW,MAAM,EAChD,EAAS,EAAQ,OAAO,CAAC,IAAM,CAAC,EAAE,MAAM,EACxC,EAAQ,EAAQ,OAAO,CAAC,IAAM,EAAE,SAAW,OAAO,EACxD,MAAO,CAAC,GAAG,EAAM,GAAG,EAAQ,GAAG,CAAK,KAIlC,WAAU,EAAW,CACvB,OAAO,KAAK,eAAe,OAAO,CAAC,IAAM,EAAE,SAAW,MAAM,EAAE,UAI5D,WAAU,CAAC,EAAW,CACxB,IAAM,EAAU,KAAK,QAAQ,OAAO,CAAC,IAAM,EAAE,UAAY,EAAK,EAC9D,QAAW,KAAO,EAChB,GAAI,EAAI,SAAW,OAAQ,OAAO,EAAI,OAExC,QAAS,EAAI,EAAG,EAAI,GAAK,EAAI,EAAQ,OAAQ,IAC3C,EAAQ,GAAG,OAAS,OAEtB,KAAK,YAAY,KAIf,YAAW,EAAW,CACxB,OAAO,KAAK,eAAe,OAAO,CAAC,IAAM,EAAE,SAAW,OAAO,EAAE,UAI7D,YAAW,CAAC,EAAW,CACzB,IAAM,EAAU,KAAK,QAAQ,OAAO,CAAC,IAAM,EAAE,UAAY,EAAK,EAC9D,QAAW,KAAO,EAChB,GAAI,EAAI,SAAW,QAAS,OAAO,EAAI,OAEzC,QAAS,EAAI,EAAQ,OAAS,EAAG,EAAI,EAAQ,OAAQ,IACnD,GAAI,GAAK,EAAG,EAAQ,GAAG,OAAS,QAElC,KAAK,YAAY,EAGnB,QAAU,KAEF,iBAAiB,CAAC,EAAqC,CAC7D,IAAM,EAAqB,EAAK,IAAI,KAAO,CAAC,EAAE,EAG1C,EAAa,EACb,EAAW,GACf,QAAS,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,GAAI,EAAK,GAAG,SAAW,OAAQ,MAC/B,EAAK,GAAG,KAAO,EAAa,KAC5B,GAAc,EAAK,GAAG,MACtB,EAAW,EAEb,GAAI,GAAY,EACd,EAAK,GAAU,UAAY,iBAI7B,IAAI,EAAc,EACd,EAAa,EAAK,OACtB,QAAS,EAAI,EAAK,OAAS,EAAG,GAAK,EAAG,IAAK,CACzC,GAAI,EAAK,GAAG,SAAW,QAAS,MAChC,EAAK,GAAG,MAAQ,EAAc,KAC9B,GAAe,EAAK,GAAG,MACvB,EAAa,EAEf,GAAI,EAAa,EAAK,OACpB,EAAK,GAAY,UAAY,gBAG/B,OAAO,EAGD,WAAW,CAAC,EAAc,EAAwB,CACxD,IAAI,EAAM,EACV,GAAI,EAAG,MAAQ,MAAQ,EAAG,OAAS,KAAM,GAAO,cAChD,GAAI,EAAG,UAAW,GAAO,IAAM,EAAG,UAClC,OAAO,EAGD,UAAU,CAChB,EACQ,CACR,OAAO,IAAW,UAAY,KAAO,gBAQ/B,cAAgB,IAAM,CAC5B,KAAK,eAAe,KAAK,UAAW,KAAK,EACzC,KAAK,eAAe,KAAK,aAAc,QAAQ,GAGzC,cAAc,CACpB,EACA,EACM,CACN,GAAI,CAAC,EAAO,OACZ,IAAM,EAAO,MAAM,KAAK,EAAM,iBAAiB,KAAK,CAAC,EACrD,GAAI,EAAK,SAAW,EAAG,OAIvB,IAAM,EAAO,EAAK,OAAS,EACrB,EAAY,IAAS,MAAQ,kBAAoB,eACvD,EAAK,QAAQ,CAAC,EAAG,IAAM,CACrB,EAAE,UAAU,OAAO,CAAS,EAC5B,IAAM,EAAQ,IAAS,MAAQ,EAAI,EAAI,EAAO,EAC9C,EAAE,MAAM,GAAQ,uCAAuC,KACxD,GACe,IAAS,MAAQ,EAAK,GAAQ,EAAK,IAC3C,UAAU,IAAI,CAAS,EAGzB,SAAS,CACf,EACA,EACA,EACwB,CAGxB,IAAM,EAAgC,CAGpC,eAAgB,EAAI,OAAS,GAAe,CAAG,GAAG,OAAS,UACxD,CACL,EACA,GAAI,EAAG,MAAQ,KAAM,EAAM,KAAO,EAAG,KACrC,GAAI,EAAG,OAAS,KAAM,EAAM,MAAQ,EAAG,MACvC,OAAO,EAGD,kBAAkB,CACxB,EACA,EACA,EACA,EACM,CACN,EAAK,aAAa,gBAAiB,OAAO,EAAW,CAAC,CAAC,EACvD,EAAK,SAAW,GAChB,EAAK,UAAU,IAAI,GAAG,KAAK,YAAY,KAAM,CAAE,EAAE,MAAM,GAAG,CAAC,EAC3D,OAAO,OAAO,EAAK,MAAO,CAAK,EAMzB,SAAS,CACf,EACA,EACA,EACA,EACa,CACb,IAAM,EAAQ,KAAK,UAAU,EAAK,CAAE,EACpC,GAAI,EAAI,WAAa,OAAW,CAC9B,IAAM,EAAO,EAAI,SAAS,CAAG,EAE7B,OADA,KAAK,mBAAmB,EAAM,EAAU,EAAI,CAAK,EAC1C,EAKT,IAAM,EAAW,GAAe,CAAG,EACnC,GAAI,EACF,OAAO,GAAK,CACV,MAAO,KAAK,YAAY,KAAM,CAAE,EAChC,KAAM,WACN,SAAU,GACV,aAAc,OAAO,EAAW,CAAC,EACjC,QACA,KAAM,CACJ,MAAO,EAAK,EAAI,MAChB,QAAS,CACP,KAAK,CAAC,EAAiB,EAAc,CACnC,EAAS,MAAM,EAAI,CAAG,EAE1B,CACF,CACF,CAAQ,EAEV,OAAO,GAAK,CACV,MAAO,KAAK,YAAY,KAAM,CAAE,EAChC,KAAM,WACN,SAAU,GACV,aAAc,OAAO,EAAW,CAAC,EACjC,QACA,SAAU,EAAK,EAAI,KACrB,CAAQ,EAOF,QAAQ,CACd,EACA,EACA,EACA,EAAW,KACE,CACb,IAAM,EAAQ,EAAK,IAAI,CAAC,EAAK,IAC3B,KAAK,UAAU,EAAK,EAAG,EAAW,GAAI,CAAI,CAC5C,EACM,EAAkB,KAAK,cACvB,EAAa,CAAE,MAAO,CAAS,EAiBrC,OAZA,EAAM,KAAO,CACX,MAAO,EACP,QAAS,CACP,MAAO,CAAC,EAAgB,IAAe,CACrC,EAAgB,EAAO,CAAK,EAC5B,IAAM,EAAK,KAAK,YAChB,GAAI,EACF,EAAG,EAAO,MAAM,KAAK,EAAM,QAAQ,CAAkB,EAG3D,CACF,EACO,GAAI,EAAO,GAAG,CAAK,EAIpB,eAAe,CACrB,EACA,EACA,EACa,CACb,IAAQ,iBAAkB,KACtB,EAAW,OACX,EACJ,OAAQ,EAAI,UACL,YACH,EAAW,EAAM,cAAc,EAC/B,EAAW,aACX,UACG,aACH,EAAW,YACX,EAAW,EAAM,eAAe,EAChC,MAGJ,IAAM,EAAa,EAAE,KAAK,QAAU,KAAK,QACrC,GACE,CACE,MAAO,eACP,OAAO,CAAC,EAAc,CACpB,EAAc,EAAM,OAAuB,CAAG,EAC9C,EAAM,gBAAgB,EAE1B,EACA,GAAY,EAAM,aAAa,CACjC,EACA,CAAC,EAEC,EACJ,EAAI,aAAe,OACf,EAAI,WAAW,CAAG,EAClB,GACE,CACE,MAAO,KAAK,YAAY,KAAM,CAAE,EAChC,KAAM,eACN,SAAU,GACV,WACA,aAAc,OAAO,EAAW,CAAC,EACjC,MAAO,KAAK,UAAU,EAAK,CAAE,CAC/B,EACA,KAAK,YACH,CAAE,MAAO,CAAE,KAAM,GAAI,CAAE,EACvB,OAAO,EAAI,OAAS,SAAW,EAAI,KAAO,EAAI,IAChD,EACA,CACF,EAEN,GAAI,EAAI,aAAe,OACrB,KAAK,mBACH,EACA,EACA,EACA,KAAK,UAAU,EAAK,CAAE,CACxB,EACA,EAAK,UAAU,OAAO,IAAI,EAC1B,EAAK,UAAU,IAAI,IAAI,EACvB,EAAK,aAAa,OAAQ,cAAc,EAG1C,GAAI,CAAC,KAAK,WAAa,EAAK,SAAS,GAAI,CAC3B,GAAK,EACjB,IAAM,EAAS,KAAK,WAAa,iBAC3B,EAAU,EAAK,SAAS,GAC9B,EAAQ,aAAa,YAAa,MAAM,EACxC,EAAQ,MAAM,cAAgB,MAC9B,EAAQ,QAAQ,KAAO,EACrB,EAAqB,QAAQ,KAAO,EACtC,EAAQ,iBAAiB,YAAa,IAAM,CAC1C,KAAK,cAAgB,EACtB,EACD,EAAK,iBAAiB,OAAQ,KAAK,UAAU,EAG/C,OAAO,EAGD,WAAW,CACjB,EACA,EACa,CACb,IAAM,EAAc,EAAK,IAAI,CAAC,EAAK,IACjC,KAAK,gBAAgB,EAAK,EAAG,EAAW,EAAE,CAC5C,EACA,OAAO,GACL,CAAE,MAAO,QAAS,KAAM,UAAW,EACnC,GAAI,CAAE,MAAO,KAAM,KAAM,KAAM,EAAG,GAAG,CAAW,CAClD,EASM,eAAe,CACrB,EACA,EACA,EACA,EACoB,CACpB,IAAM,EAAO,EAAU,CAAS,EAChC,GAAI,CAAC,GAAQ,EAAK,SAAW,EAAG,OAAO,KACvC,IAAM,EAAO,IAAW,aAAe,gBAAkB,mBACnD,EAAW,KAAK,WAAW,CAAM,EACjC,EAAW,EAAkB,YACjC,CAAC,EAAgB,IACf,KAAK,SAAS,EAAM,EAAM,EAAY,CAAQ,EAChD,CAAC,CACH,EACA,OAAO,GACL,CACE,MAAO,eAAe,IACtB,KAAM,WACN,MACF,EACA,GAAG,CACL,EAGF,SAAS,CAAC,EAAuC,CAC/C,GAAI,CAAC,KAAK,YAAa,OACvB,IAAM,GACH,EAAM,UAAY,OAAY,EAAM,QAAQ,GAAG,QAAU,EAAM,SAChE,KAAK,YAAY,sBAAsB,EAAE,EACrC,EAAU,EAAM,UAAY,OAAY,GAAK,GAC3C,aAAY,cAAa,eAAgB,KAAK,YAChD,EAAO,KAAK,eACZ,EAAc,EAAc,EAAc,EAE5C,EAAY,EAChB,OAAO,EAAK,KAAK,CAAC,IAA2B,CAC3C,GAAI,EAAQ,UAAY,GAAO,MAAO,GACtC,GAAa,EAAQ,MACrB,IAAI,EACJ,GAAI,EAAQ,SAAW,OACrB,EAAiB,EACZ,QAAI,EAAQ,SAAW,QAC5B,EAAiB,EAAY,EAAa,EAE1C,OAAiB,EAAY,EAE/B,OAAO,KAAK,IAAI,EAAW,CAAc,EAAI,EAC9C,EAGK,UAAY,CAAC,IAAiB,CACpC,IAAM,EAAS,KAAK,UAAU,CAAK,EACnC,KAAK,MAAM,OAAS,IAAW,OAAY,aAAe,IAGpD,aAAe,CAAC,IAAe,CACrC,IAAM,EAAS,KAAK,UAAU,CAAK,EACnC,GAAI,IAAW,OAAW,CACxB,IAAM,EAAY,OAAO,EAAO,KAAK,EAC/B,EAAe,EAAM,UAAY,OACjC,EAAkB,EACpB,EAAM,QAAQ,GAAG,WACjB,OACJ,GACE,EACA,CAAC,EAAI,EAAK,IAAe,CAMvB,IALc,EACV,CAAC,GAAG,EAAM,OAAO,EAAE,KACjB,CAAC,IAAe,EAAM,aAAe,CACvC,EACA,MACU,OACZ,MAAO,GAET,IAAM,EAAQ,EAAY,EAI1B,GAHA,EAAO,MACL,EAAQ,KAAK,eAAiB,EAAQ,KAAK,eAC7C,KAAK,gBAAgB,EACjB,EAAM,OAAS,UACjB,MAAO,IAGX,YACF,IAIJ,SAAS,CAAC,EAAU,EAAS,GAAM,CACjC,GAAI,EACF,EAAI,KAAK,aAAe,GAExB,YAAO,EAAI,KAAK,aAElB,KAAK,uBAAuB,EAG9B,UAAU,CAAC,EAAc,EAAS,GAAM,CACtC,QAAW,KAAO,GAAQ,KAAK,MAC7B,GAAI,EACF,EAAI,KAAK,aAAe,GAExB,YAAO,EAAI,KAAK,aAGpB,KAAK,uBAAuB,EAG9B,QAAQ,CAAC,EAAc,CACrB,KAAK,WAAW,EAAM,EAAK,EAGrB,sBAAsB,EAAG,CAI/B,IAAM,EAAO,KAAK,aAAa,iBAAiB,KAAK,GAAK,CAAC,EAC3D,QAAW,KAAO,EAAM,CACtB,IAAM,EAAO,KAAK,QAAQ,CAAG,EAC7B,GAAI,GAAQ,KACV,KAAK,cAAc,EAAK,CAAI,GAM1B,WACA,gBAAkB,CAAC,IAAiB,CAC1C,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,SACxB,OAEF,IAAQ,UAAW,EACnB,GAAI,EAAE,aAAkB,aACtB,OAEF,IAAM,EAAa,KAAK,QAAQ,CAAM,EACtC,GAAI,GAAc,KAChB,OAEF,IAAM,EAAa,EAEb,EAAY,OAAO,aAAa,EACtC,GAAI,IAAc,KAChB,EAAU,gBAAgB,EAE5B,IAAM,EAAO,KAAK,YAClB,GACE,KAAK,UACL,EAAW,UACX,EAAK,OAAS,GACd,KAAK,aAAe,EACpB,CACA,IAAM,EACJ,KAAK,aAAe,QACpB,KAAK,WAAW,KAAK,eAAiB,IACjC,EAAO,GAAU,CACtB,KAAK,aAAe,OAAY,EAAK,QAAQ,KAAK,UAAU,EAAI,EAChE,EAAK,QAAQ,CAAU,CACzB,EAAE,KAAK,CAAC,EAAG,IAAM,EAAI,CAAC,EAGtB,GAAI,EAAQ,GACV,QAAS,EAAM,EAAO,GAAO,EAAQ,IAAO,CAC1C,IAAM,EAAM,EAAK,GACjB,KAAK,UAAU,EAAK,CAAI,GAGvB,QAAI,KAAK,UAAY,EAAW,QAAS,CAC9C,KAAK,UAAU,EAAY,CAAC,EAAW,KAAK,YAAY,EACxD,IAAM,EAAc,EAAK,QAAQ,CAAU,EACrC,EAAW,EAAK,EAAc,GAC9B,EAAe,EAAc,EAAI,EAAK,EAAc,GAAK,OAC/D,GAAI,IAAa,QAAa,EAAS,KAAK,eAAiB,GAC3D,KAAK,WAAa,EACb,QACL,IAAiB,QACjB,EAAa,KAAK,eAAiB,GAEnC,KAAK,WAAa,EAElB,UAAK,WAAa,OAGpB,UAAK,WAAa,EAClB,KAAK,SAAS,EACd,KAAK,UAAU,EAAY,EAAI,EAEjC,KAAK,iBAAiB,KAAK,mBAAmB,EAC9C,KAAK,uBAAuB,GAMtB,QAAQ,CAAC,EAAkB,EAAsC,CACvE,GAAI,IAAa,GACf,OAAO,KAAK,cACV,6BAA6B,EAAW,KAC1C,EAGF,IAAM,EAAM,KAAK,uBACX,EAAU,KAAK,YACf,EAAS,KAAK,0BAEhB,EACJ,GAAI,EAAW,EAAI,OACjB,EAAO,EAAI,GACN,QAAI,EAAW,EAAI,OAAS,EAAQ,OACzC,EAAO,EAAQ,EAAW,EAAI,QACzB,QAAI,EAAW,EAAI,OAAS,EAAQ,OAAS,EAAO,OACzD,EAAO,EAAO,EAAW,EAAI,OAAS,EAAQ,QAE9C,YAAO,KAIT,OADc,KAAK,SAAS,CAAI,IAChB,IAAyC,KAGnD,cAAqD,KAErD,gBAAkB,IAAM,CAC9B,GAAI,CAAC,KAAK,cAAe,OACzB,IAAQ,MAAK,OAAQ,KAAK,cAC1B,KAAK,cAAgB,KACrB,IAAM,EAAO,KAAK,SAAS,EAAK,CAAG,EACnC,GAAI,EAAM,EAAK,MAAM,GAGf,SAAS,CAAC,EAAkB,EAAwB,CAC1D,KAAK,cAAgB,CAAE,IAAK,EAAU,IAAK,CAAS,EAEpD,IAAM,EAAO,KAAK,SAAS,EAAU,CAAQ,EAC7C,GAAI,EACF,EAAK,MAAM,EACX,EAAK,eAAe,CAAE,MAAO,UAAW,OAAQ,SAAU,CAAC,EACtD,QAAI,KAAK,YAAa,CAE3B,IAAM,EAAM,KAAK,uBACX,EAAe,EAAW,EAAI,OACpC,GAAI,GAAgB,GAAK,EAAe,KAAK,YAAY,OACvD,KAAK,YAAY,UAAY,EAAe,KAAK,WAK/C,aAAe,CAAC,IAAyB,CAC/C,IAAM,EAAK,EAAM,OACX,EAAS,EAAG,QAAQ,KAAK,GAAK,EAAG,QAAQ,KAAK,EACpD,GAAI,CAAC,EAAQ,OAEb,IAAM,EAAU,SAAS,EAAO,aAAa,eAAe,GAAK,GAAI,EAAE,EACvE,GAAI,MAAM,CAAO,EAAG,OACpB,IAAM,EAAW,EAAU,EAErB,EAAO,KAAK,eAAe,OAC3B,EAAM,KAAK,uBACX,EAAU,KAAK,YACf,EAAS,KAAK,0BACd,EAAY,EAAI,OAAS,EAAQ,OAAS,EAAO,OACjD,EAAO,EAAM,SAAW,EAAM,QAC9B,EAAW,EAAO,UAAU,SAAS,IAAI,EAI3C,EACJ,GAAI,EACF,EAAW,GACN,KACL,IAAM,EAAM,EAAO,QAAQ,KAAK,EAChC,GAAI,CAAC,EAAK,OACV,IAAM,EAAO,GAAY,CAAG,EAC5B,GAAI,GAAQ,KAAM,OAClB,IAAM,EAAS,EAAI,QAAQ,CAAI,EACzB,EAAa,IAAW,GAAK,EAAQ,QAAQ,CAAI,EAAI,GACrD,EACJ,IAAW,IAAM,IAAe,GAAK,EAAO,QAAQ,CAAI,EAAI,GAC9D,GAAI,IAAW,GACb,EAAW,EACN,QAAI,IAAe,GACxB,EAAW,EAAI,OAAS,EACnB,QAAI,IAAc,GACvB,EAAW,EAAI,OAAS,EAAQ,OAAS,EAEzC,YAIJ,IAAI,EAAU,EACV,EAAU,EAEd,OAAQ,EAAM,SACP,UACH,EAAU,EAAO,EAAI,KAAK,IAAI,GAAI,EAAW,CAAC,EAC9C,UACG,YACH,EAAU,EAAO,EAAY,EAAI,KAAK,IAAI,EAAY,EAAG,EAAW,CAAC,EACrE,UACG,YACH,EAAU,EAAO,EAAI,KAAK,IAAI,EAAG,EAAW,CAAC,EAC7C,UACG,aACH,EAAU,EAAO,EAAO,EAAI,KAAK,IAAI,EAAO,EAAG,EAAW,CAAC,EAC3D,UACG,MACH,GAAI,EAAM,SACR,GAAI,EAAW,EACb,EAAU,EAAW,EAChB,QAAI,EAAW,EACpB,EAAU,EAAW,EACrB,EAAU,EAAO,EAEjB,YAGF,QAAI,EAAW,EAAO,EACpB,EAAU,EAAW,EAChB,QAAI,EAAW,EAAY,EAChC,EAAU,EAAW,EACrB,EAAU,EAEV,YAGJ,UACG,OACH,GAAI,EACF,EAAU,EACV,EAAU,EAEV,OAAU,EAEZ,UACG,MACH,GAAI,EACF,EAAU,EAAY,EACtB,EAAU,EAAO,EAEjB,OAAU,EAAO,EAEnB,cAEA,OAGJ,GAAI,IAAY,GAAY,IAAY,EACtC,EAAM,eAAe,EACrB,KAAK,UAAU,EAAS,CAAO,GAInC,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAExB,KAAK,iBAAiB,YAAa,KAAK,SAAS,EACjD,KAAK,iBAAiB,YAAa,KAAK,YAAY,EACpD,KAAK,iBAAiB,aAAc,KAAK,aAAc,CAAE,QAAS,EAAK,CAAC,EACxE,KAAK,iBAAiB,UAAW,KAAK,eAAe,EACrD,KAAK,iBAAiB,WAAY,KAAK,eAAe,EACtD,KAAK,iBAAiB,UAAW,KAAK,YAAY,EAGpD,eAAe,EAAG,CAChB,IAAM,EAAO,KAAK,eACZ,EAAU,EAAK,IAAI,CAAC,IAAM,EAAE,MAAQ,IAAI,EAAE,KAAK,GAAG,EAClD,EAAW,EAAK,OAAO,CAAC,EAAG,IAAM,EAAI,EAAE,MAAO,CAAC,EAAI,KAIzD,KAAK,MAAM,YAAY,4BAA6B,CAAO,EAC3D,KAAK,MAAM,YAAY,8BAA+B,CAAQ,EAE9D,KAAK,MAAM,YAAY,iBAAkB,CAAO,EAChD,KAAK,MAAM,YAAY,mBAAoB,CAAQ,EAGnD,IAAM,EAAa,KAAK,kBAAkB,CAAI,EAC9C,QAAW,KAAQ,KAAK,iBAAiB,aAAa,EAAG,CACvD,IAAM,EAAK,SAAS,EAAK,aAAa,eAAe,GAAK,GAAI,EAAE,EAAI,EACpE,GAAI,CAAC,MAAM,CAAE,GAAK,EAAW,GAAK,CAChC,IAAM,EAAK,EAAW,GACtB,GAAI,EAAG,MAAQ,KAAO,EAAqB,MAAM,KAAO,EAAG,KAC3D,GAAI,EAAG,OAAS,KAAO,EAAqB,MAAM,MAAQ,EAAG,QAKnE,aAAe,CACb,EACA,EAAiD,SAC9C,CACH,QAAW,KAAU,KAAK,QAAQ,OAChC,CAAC,IAAM,EAAU,EAAE,IAAI,IAAM,EAC/B,EACE,GAAI,EAAU,CAAM,IAAM,EAAe,CACvC,GAAI,IAAc,OAChB,EAAO,KAAO,EAAO,OAAS,YAAc,aAAe,YAE3D,OAAO,KAAO,EAEhB,KAAK,YAAY,EAEjB,YAAO,EAAO,MAKpB,cAAgB,CAAC,EAAqB,IAA2B,CAC/D,IAAQ,gBAAiB,KACnB,EAAgB,KAAK,QAAQ,OACjC,CAAC,IAAW,EAAO,UAAY,EACjC,EACM,EAAc,KAAK,YAAY,KAAK,IAAI,EACxC,EAAmB,CAAC,EAC1B,GAAI,CAAC,KAAK,QAAU,EAAQ,OAAS,GACnC,EAAK,KACH,CACE,QAAS,KAAK,UACV,GAAG,EAAS,MAAM,KAAK,EAAS,WAAW,IAC3C,iBACJ,KAAM,gBACN,MAAM,EAAG,CACP,EAAa,CAAO,EAExB,EACA,CACE,QAAS,KAAK,UACV,GAAG,EAAS,MAAM,KAAK,EAAS,YAAY,IAC5C,kBACJ,KAAM,iBACN,MAAM,EAAG,CACP,EAAa,EAAS,YAAY,EAEtC,CACF,EAEF,GAAI,CAAC,KAAK,OAAQ,CAChB,GAAI,EAAK,OACP,EAAK,KAAK,IAAI,EAEhB,EAAK,KACH,CACE,QAAS,KAAK,UACV,GAAG,EAAS,MAAM,KAAK,EAAS,QAAQ,IACxC,cACJ,KAAM,SACN,QAAS,IAAM,EAAQ,UAAY,GACnC,MAAM,EAAG,CACP,EAAQ,QAAU,GAClB,EAAY,EAEhB,EACA,CACE,QAAS,KAAK,UACV,GAAG,EAAS,MAAM,KAAK,EAAS,QAAQ,IACxC,cACJ,KAAM,MACN,QAAS,IAAM,EAAc,OAAS,EACtC,UAAW,EAAc,IAAI,CAAC,IAAW,CACvC,MAAO,CACL,QAAS,EAAO,MAAQ,EAAO,KAC/B,MAAM,EAAG,CACP,OAAO,EAAO,QACd,EAAY,EAEhB,EACD,CACH,CACF,EAGF,GAAI,EAAK,OACP,EAAK,KAAK,IAAI,EAEhB,IAAM,EACJ,EAAQ,SAAW,OACf,MACA,EAAQ,SAAW,QACnB,QACA,SACN,EAAK,KAAK,CACR,QAAS,KAAK,UAAY,EAAS,KAAK,EAAI,MAC5C,KAAM,EACN,UAAW,CACT,CACE,QAAS,KAAK,UAAY,EAAS,MAAM,EAAI,OAC7C,KAAM,MACN,QAAS,IAAM,EAAQ,SAAW,OAClC,MAAM,EAAG,CACP,EAAQ,OAAS,OACjB,EAAY,EAEhB,EACA,CACE,QAAS,KAAK,UAAY,EAAS,OAAO,EAAI,QAC9C,KAAM,QACN,QAAS,IAAM,EAAQ,SAAW,QAClC,MAAM,EAAG,CACP,EAAQ,OAAS,QACjB,EAAY,EAEhB,EACA,CACE,QAAS,KAAK,UAAY,EAAS,OAAO,EAAI,QAC9C,KAAM,QACN,QAAS,IAAM,CAAC,CAAC,EAAQ,OACzB,MAAM,EAAG,CACP,OAAO,EAAQ,OACf,EAAY,EAEhB,CACF,CACF,CAAC,EAED,EAAQ,CACN,SACA,UAAW,KAAK,UAChB,UAAW,CACb,CAAC,MAGC,YAAW,EAAmB,CAChC,OAAO,KAAK,UAAY,GAAgB,MAGtC,YAAW,EAAU,CACvB,OAAO,EAAU,KAAK,QAAQ,OAAO,KAGnC,oBAAmB,EAAU,CAC/B,OAAO,KAAK,YAAY,OAAO,CAAC,IAAQ,EAAI,KAAK,YAAY,KAG3D,aAAY,EAAU,CAGxB,GAAI,KAAK,gBAAkB,KAAK,kBAM9B,MALY,CACV,GAAI,KAAK,gBAAkB,CAAC,EAC5B,GAAG,KAAK,OACR,GAAI,KAAK,mBAAqB,CAAC,CACjC,EACW,OAAO,CAAC,IAAQ,EAAI,KAAK,YAAY,EAElD,OAAO,KAAK,OAAO,OAAO,CAAC,IAAQ,EAAI,KAAK,YAAY,EAG1D,QAAQ,CAAC,EAA4C,CACnD,IAAM,EACJ,aAAsB,QAAU,KAAK,QAAQ,CAAU,EAAI,EAC7D,OAAO,GAAQ,KAAO,OAAY,KAAK,SAAS,CAAI,EAGtD,OAAO,CAAC,EAAoB,CAC1B,OAAO,KAAK,QAAQ,CAAI,EAGlB,cAEA,WAAa,CAAC,IAAiB,CACrC,IAAM,EAAU,EAAM,OAAuB,QAC3C,YACF,EACM,EACJ,SAAS,EAAO,aAAa,eAAe,GAAK,GAAI,EAAE,EAAI,EACvD,EAAU,KAAK,eAAe,GAC9B,EAAe,KAAK,QAAQ,QAAQ,KAAK,aAAc,EACvD,EAAe,KAAK,QAAQ,QAAQ,CAAO,EAEjD,KAAK,cAAe,OAAS,EAAQ,OACrC,KAAK,QAAQ,OAAO,EAAc,CAAC,EACnC,KAAK,QAAQ,OAAO,EAAc,EAAG,KAAK,aAAc,EACxD,KAAK,YAAY,EAEjB,EAAM,eAAe,EACrB,EAAM,gBAAgB,GAGxB,MAAM,EAAG,CACP,MAAM,OAAO,EACb,KAAK,YAAc,GAGnB,IAAM,EAAgB,KAAK,uBACrB,EAAmB,KAAK,0BACxB,EAAW,KAAK,kBAChB,EAAM,KAAK,IAAI,EAAS,OAAQ,KAAK,cAAc,EACnD,EAAc,KAAK,OAAO,EAAS,MAAM,EAAG,CAAG,CAAC,GAC9C,QAAS,KACjB,GAAI,EAAM,EAAY,KAAK,CAAI,EAE/B,KAAK,QAAQ,cAAgB,EAC7B,KAAK,QAAQ,iBAAmB,EAChC,KAAK,QAAQ,QAAU,EAGvB,IAAM,EAAO,KAAK,eAClB,GAAI,EAAK,SAAW,EAAG,OACvB,IAAM,EAAa,KAAK,kBAAkB,CAAI,EAE9C,KAAK,MAAM,YACT,0BACA,KAAK,UAAY,EAAI,GAAG,KAAK,cAAgB,MAC/C,EACA,KAAK,gBAAgB,EAOrB,KAAK,MAAQ,KAAK,YAAY,EAAM,CAAU,EAC9C,KAAK,UAAY,KAAK,gBACpB,KAAK,QAAQ,cACb,EACA,EACA,YACF,EACA,KAAK,aAAe,KAAK,gBACvB,KAAK,QAAQ,iBACb,EACA,EACA,eACF,EAKA,IAAM,EAAkB,KAAK,QAAQ,QAAgB,YACnD,CAAC,EAAgB,IAAc,KAAK,SAAS,EAAM,EAAM,CAAU,EACnE,KAAK,UAAY,EAAI,CAAE,QAAS,CAAE,OAAQ,KAAK,SAAU,CAAE,EAAI,CAAC,CAClE,EAEA,KAAK,YAAc,GACjB,CAAE,MAAO,cAAe,KAAM,aAAc,EAC5C,GAAG,CACD,KAAK,MACL,KAAK,UACL,GAAG,EACH,KAAK,YACP,EAAE,OAAO,OAAO,CAClB,EACA,KAAK,YAAY,iBAAiB,YAAa,KAAK,eAAe,EAEnE,KAAK,OAAO,KAAK,WAAW,EAE5B,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EAMb,yBAAyB,EAAS,CACxC,KAAK,wBAAwB,WAAW,EACxC,KAAK,uBAAyB,IAAI,iBAAiB,KAAK,aAAa,EACrE,QAAW,IAAS,CAAC,KAAK,UAAW,KAAK,YAAY,EACpD,GAAI,EACF,KAAK,uBAAuB,QAAQ,EAAO,CAAE,UAAW,EAAK,CAAC,EAItE,CAKO,IAAM,GAA8B,GAE9B,GAAY,GAAU,eAAe,EAGrC,GAAY,GAGZ,GAAW,GC72DxB,IAAQ,UAAQ,UAAQ,UAAQ,UAAQ,YAAU,MAAI,KAAG,SAAO,SAAO,QACrE,EAOK,MAAM,WAAmB,CAAuB,OAC9C,kBAAmB,oBAEnB,gBAAiB,CACtB,2BAA4B,CAC1B,eAAgB,WAClB,EACA,6BAA8B,CAC5B,QAAS,MACX,EACA,uBAAwB,CACtB,SAAU,IACV,OAAQ,EACR,aAAc,GACd,SAAU,SACV,UAAW,oBACX,QAAS,EACT,QAAS,OACT,cAAe,SACf,IAAK,EACL,cAAe,EAAW,WAAW,kBAAkB,EACvD,kBAAmB,EAAW,WAAW,SAAS,EAClD,aAAc,EAAW,UAAU,MAAM,EACzC,UAAW,EAAK,aAChB,WAAY,EAAK,iBACjB,MAAO,EAAK,WACd,EACA,qBAAsB,CACpB,QAAS,QACX,EACA,0BAA2B,CACzB,QAAS,OACT,eAAgB,SAChB,IAAK,EACP,EACA,0BAA2B,CACzB,QAAS,OACT,eAAgB,WAChB,IAAK,GACL,cAAe,EACjB,CACF,cAEa,MAAK,CAAC,EAAiB,EAAQ,QAAwB,CAClE,OAAO,IAAI,QAAQ,CAAC,IAAY,CAC9B,IAAM,EAAc,GAClB,CACE,cAAe,GACf,uBAAwB,GACxB,eAAe,EAAG,CAChB,EAAQ,EAEZ,EACA,GAAG,CAAE,KAAM,QAAS,EAAG,CAAK,EAC5B,EAAQ,SAAS;AAAA,CAAI,EACjB,EAAS,IACP,CAAE,MAAO,CAAE,WAAY,WAAY,OAAQ,CAAE,CAAE,EAC/C,CACF,EACA,GAAE,CAAO,CACf,EACA,SAAS,KAAK,OAAO,CAAW,EAChC,EAAY,UAAU,EACvB,cAGU,QAAO,CAAC,EAAiB,EAAQ,UAA6B,CACzE,OAAO,IAAI,QAAQ,CAAC,IAAY,CAC9B,IAAM,EAAgB,GACpB,CACE,cAAe,GACf,eAAe,CAAC,EAAiB,CAC/B,EAAQ,IAAW,SAAS,EAEhC,EACA,GAAG,CAAE,KAAM,QAAS,EAAG,CAAK,EAC5B,GAAE,CAAO,EACT,GACE,CACE,KAAM,SACN,OAAO,EAAG,CACR,EAAc,MAAM,EAExB,EACA,QACF,CACF,EACA,SAAS,KAAK,OAAO,CAAa,EAClC,EAAc,UAAU,EACzB,cAGU,OAAM,CACjB,EACA,EAAQ,SACR,EAAe,GACS,CACxB,OAAO,IAAI,QAAQ,CAAC,IAAY,CAC9B,IAAM,EAAa,GAAM,CAAE,MAAO,CAAa,CAAC,EAC1C,EAAe,GACnB,CACE,cAAe,GACf,eAAe,CAAC,EAAiB,CAC/B,EAAQ,IAAW,UAAY,EAAW,MAAQ,IAAI,GAExD,YAAY,EAAG,CACb,EAAW,MAAM,EAErB,EACA,GAAG,CAAE,KAAM,QAAS,EAAG,CAAK,EAC5B,GACE,GACE,CACE,MAAO,CACL,QAAS,OACT,cAAe,SACf,WAAY,UACZ,IAAK,CACP,CACF,EACA,GAAI,CAAO,EACX,CACF,CACF,EACA,GACE,CACE,KAAM,SACN,OAAO,EAAG,CACR,EAAa,MAAM,EAEvB,EACA,QACF,CACF,EACA,SAAS,KAAK,OAAO,CAAY,EACjC,EAAa,UAAU,EACxB,EAGH,cAAgB,GAChB,uBAAyB,GAEzB,WAAW,EAAG,CACZ,MAAM,EACN,GAAG,KAAM,QAAS,IAAM,CACtB,GAAI,KAAK,uBACP,KAAK,MAAM,EAEd,EAGH,gBAAkB,CAAC,EAAS,WAAa,CACvC,QAAQ,IAAI,yBAA0B,CAAM,GAG9C,YAAY,EAAG,CACb,KAAK,MAAM,GAAG,MAAM,EAGtB,GAAmB,CAAC,IAA4B,GAIhD,UAAY,IAA8B,CAExC,OADA,KAAK,MAAM,OAAS,OAAO,GAAa,CAAC,EAClC,IAAI,QAAQ,CAAC,IAAY,CAC9B,KAAK,GAAmB,EACxB,KAAK,MAAM,OAAO,UAAU,EAC5B,sBAAsB,IAAM,CAC1B,KAAK,aAAa,EACnB,EACF,GAGH,MAAQ,CAAC,EAAS,WAAa,CAI7B,GAHA,KAAK,gBAAgB,CAAM,EAC3B,KAAK,GAAiB,CAAM,EAC5B,KAAK,MAAM,OAAO,MAAM,EACpB,KAAK,cACP,KAAK,OAAO,GAIhB,GAAK,IAAM,CACT,KAAK,MAAM,SAAS,GAGtB,QAAU,IACR,GACE,CAAE,KAAM,QAAS,EACjB,GAAO,GAAS,CAAE,KAAM,QAAS,CAAC,CAAC,EACnC,GAAS,EACT,GACE,GAAS,CAAE,KAAM,QAAS,CAAC,EAC3B,GAAO,CAAE,KAAM,KAAM,QAAS,KAAK,EAAG,EAAG,IAAI,CAC/C,CACF,CACJ,CAEO,IAAM,GAAa,GAAW,eAAe,EC1TpD,IAAM,GAAS,gBAGf,SAAS,EAAQ,CAAC,EAA0B,CAC1C,GAAI,GAAO,KAAK,CAAQ,EAAG,MAAO,GAClC,OAAO,EAAS,QAAQ,WAAY,EAAE,EAWjC,SAAS,EAAY,CAAC,EAAyC,CACpE,IAAM,EAAiC,CAAC,EACxC,QAAW,KAAO,EAAM,CACtB,IAAM,EAAO,GAAS,EAAI,QAAQ,EAClC,EAAO,IAAS,EAAO,IAAS,GAAK,EAEvC,IAAM,EAA8B,CAAC,EACrC,QAAW,KAAO,EAAM,CACtB,IAAM,EAAO,GAAS,EAAI,QAAQ,EAElC,EAAI,EAAI,UACN,IAAS,IAAM,EAAO,GAAQ,EAAI,EAAI,SAAS,QAAQ,MAAO,GAAG,EAAI,EAEzE,OAAO,EAIF,SAAS,EAAW,CAAC,EAAsB,CAChD,OAAO,IAAS,GAAK,IAAM,IAAI,KA4B1B,SAAS,EAAe,CAC7B,EACA,EACe,CACf,IAAM,EAAQ,EAAO,QAAQ,MAAO,EAAE,EAGtC,GAAI,CAAC,GAAS,EAAM,SAAS,GAAG,GAAK,EAAM,SAAS,GAAG,EAAG,OAAO,KACjE,IAAM,EAAW,mBAAmB,CAAK,EACnC,EAAO,EAAQ,GACrB,GAAI,IAAS,OAAW,OAAO,KAC/B,OAAO,GAAY,CAAI,EAIlB,SAAS,EAAW,CAAC,EAA0B,CACpD,OAAO,EACJ,QAAQ,OAAQ,EAAE,EAClB,QAAQ,OAAQ,EAAE,EAClB,QAAQ,kBAAmB,EAAE,EAO3B,SAAS,EAAe,CAC7B,EACA,EACQ,CACR,IAAM,EAAO,GAAY,CAAQ,EACjC,QAAY,EAAU,KAAY,OAAO,QAAQ,CAAO,EACtD,GAAI,IAAY,EAAM,OAAO,EAE/B,MAAO,GAIF,SAAS,EAAO,CAAC,EAAmB,CACzC,OAAO,EACJ,YAAY,EACZ,KAAK,EACL,QAAQ,cAAe,GAAG,EAC1B,QAAQ,WAAY,EAAE,EASpB,SAAS,EAAa,CAC3B,EACA,EACA,EACQ,CACR,GAAI,CAAC,EAAa,MAAO,GACzB,QAAW,KAAK,EAAM,GAAI,EAAE,WAAa,EAAa,OAAO,EAAE,SAC/D,QAAW,KAAK,EACd,GAAI,EAAQ,EAAE,YAAc,EAAa,OAAO,EAAE,SACpD,IAAM,EAAS,GAAQ,CAAW,EAClC,QAAW,KAAK,EAAM,GAAI,EAAQ,EAAE,YAAc,EAAQ,OAAO,EAAE,SACnE,QAAW,KAAK,EACd,GAAI,EAAE,OAAS,GAAQ,EAAE,KAAK,IAAM,EAAQ,OAAO,EAAE,SACvD,MAAO,GCzGF,SAAS,EAAU,CAAC,EAAqB,CAC9C,IAAM,EAAS,EAAI,MAAQ,MAAQ,IAAM,EAAI,MAAQ,SAAW,IAAM,IAChE,EAAQ,OAAO,EAAI,OAAS,GAAG,EAAE,SAAS,EAAG,GAAG,EACtD,OACE,EAAS,GAAS,EAAI,OAAS,IAAI,kBAAkB,EAAI,OAAM,EAAI,SAIhE,SAAS,EAAU,CAAC,EAAW,EAAmB,CACvD,IAAM,EAAK,GAAW,CAAC,EACjB,EAAK,GAAW,CAAC,EACvB,OAAO,EAAK,EAAK,EAAI,EAAK,EAAK,GAAK,EAQ/B,SAAS,EAA8B,CAC5C,EACA,EACc,CACd,IAAM,EAAQ,IAAI,IAClB,QAAW,KAAO,EAChB,EAAM,IAAI,EAAI,SAAU,CACtB,MACA,KAAM,EAAQ,EAAI,WAAa,GAC/B,SAAU,CAAC,EACX,MAAO,CACT,CAAC,EAIH,IAAM,EAAW,IAAI,IACrB,QAAW,KAAO,EAAM,CACtB,IAAI,EAAK,EAAI,OAAS,GAAc,EAAI,OAAQ,EAAM,CAAO,EAAI,GACjE,GACE,IACC,IAAO,EAAI,UACV,CAAC,EAAM,IAAI,CAAE,GACb,GAAa,EAAI,SAAU,EAAI,EAAM,CAAO,GAE9C,EAAK,GAEP,EAAS,IAAI,EAAI,SAAU,CAAE,EAG/B,IAAM,EAAsB,CAAC,EAC7B,QAAW,KAAO,EAAM,CACtB,IAAM,EAAK,EAAS,IAAI,EAAI,QAAQ,GAAK,GACnC,EAAO,EAAM,IAAI,EAAI,QAAQ,EACnC,GAAI,EAAI,EAAM,IAAI,CAAE,EAAG,SAAS,KAAK,CAAI,EACpC,OAAM,KAAK,CAAI,EAGtB,IAAM,EAAY,CAAC,EAAmB,IAAwB,CAC5D,EAAI,KAAK,CAAC,EAAG,IAAM,GAAW,EAAE,IAAK,EAAE,GAAG,CAAC,EAC3C,QAAW,KAAK,EACd,EAAE,MAAQ,EACV,EAAU,EAAE,SAAU,EAAQ,CAAC,GAInC,OADA,EAAU,EAAO,CAAC,EACX,EAIT,SAAS,EAAY,CACnB,EACA,EACA,EACA,EACS,CACT,IAAM,EAAa,IAAI,IAAI,EAAK,IAAI,CAAC,IAAM,CAAC,EAAE,SAAU,CAAC,CAAC,CAAC,EACvD,EAA6B,EAC3B,EAAO,IAAI,IAAY,CAAC,CAAK,CAAC,EACpC,MAAO,EAAQ,CACb,GAAI,EAAK,IAAI,CAAM,EAAG,MAAO,GAC7B,EAAK,IAAI,CAAM,EACf,IAAM,EAAM,EAAW,IAAI,CAAM,EACjC,EAAS,GAAK,OAAS,GAAc,EAAI,OAAQ,EAAM,CAAO,EAAI,GAEpE,MAAO,GC9GT,SAAS,EAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,GAAG,WAAW,KAAK,IAAI,GAAG,MAAM,KAAK,SAAS,GAAG,SAAS,KAAK,OAAO,GAAG,UAAU,KAAK,WAAW,IAAI,EAAE,IAAI,GAAE,GAAE,EAAE,SAAS,EAAC,CAAC,EAAE,CAAC,GAAE,EAAE,IAAI,GAAE,CAAC,KAAK,IAAI,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,OAAO,OAAO,EAAE,EAAE,QAAQ,GAAE,MAAM,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,SAAS,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,cAAc,EAAE,KAAK,CAAC,MAAM,MAAM,EAAE,GAAE,CAAC,iBAAiB,yBAAyB,kBAAkB,cAAc,uBAAuB,gBAAgB,eAAe,OAAO,WAAW,KAAK,kBAAkB,KAAK,gBAAgB,KAAK,aAAa,OAAO,kBAAkB,MAAM,cAAc,MAAM,oBAAoB,OAAO,UAAU,WAAW,gBAAgB,oBAAoB,gBAAgB,WAAW,wBAAwB,iCAAiC,yBAAyB,mBAAmB,gBAAgB,OAAO,mBAAmB,0BAA0B,WAAW,cAAc,gBAAgB,eAAe,QAAQ,SAAS,aAAa,WAAW,eAAe,OAAO,gBAAgB,aAAa,kBAAkB,YAAY,gBAAgB,YAAY,iBAAiB,aAAa,eAAe,YAAY,UAAU,QAAQ,QAAQ,UAAU,kBAAkB,iCAAiC,gBAAgB,mCAAmC,kBAAkB,KAAK,gBAAgB,KAAK,kBAAkB,gCAAgC,oBAAoB,gBAAgB,WAAW,UAAU,cAAc,WAAW,mBAAmB,oDAAoD,sBAAsB,qDAAqD,aAAa,6CAA6C,MAAM,eAAe,cAAc,OAAO,SAAS,MAAM,UAAU,MAAM,UAAU,QAAQ,eAAe,WAAW,UAAU,SAAS,cAAc,OAAO,cAAc,MAAM,cAAc,KAAG,IAAI,OAAO,WAAW,+BAA+B,EAAE,gBAAgB,KAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,EAAE,EAAE,CAAC,qDAAqD,EAAE,QAAQ,KAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,EAAE,EAAE,CAAC,qDAAqD,EAAE,iBAAiB,KAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,EAAE,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,KAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,eAAe,KAAG,IAAI,OAAO,QAAQ,KAAK,IAAI,EAAE,EAAE,CAAC,sBAAsB,GAAG,CAAC,EAAE,GAAG,uBAAuB,GAAG,wDAAwD,GAAG,8GAA8G,GAAE,qEAAqE,GAAG,uCAAuC,GAAE,wBAAwB,GAAG,iKAAiK,GAAG,EAAE,EAAE,EAAE,QAAQ,QAAQ,EAAC,EAAE,QAAQ,aAAa,mBAAmB,EAAE,QAAQ,UAAU,uBAAuB,EAAE,QAAQ,cAAc,SAAS,EAAE,QAAQ,WAAW,cAAc,EAAE,QAAQ,QAAQ,mBAAmB,EAAE,QAAQ,WAAW,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,QAAQ,EAAC,EAAE,QAAQ,aAAa,mBAAmB,EAAE,QAAQ,UAAU,uBAAuB,EAAE,QAAQ,cAAc,SAAS,EAAE,QAAQ,WAAW,cAAc,EAAE,QAAQ,QAAQ,mBAAmB,EAAE,QAAQ,SAAS,mCAAmC,EAAE,SAAS,EAAE,GAAE,uFAAuF,GAAG,UAAU,GAAE,mCAAmC,GAAG,EAAE,6GAA6G,EAAE,QAAQ,QAAQ,EAAC,EAAE,QAAQ,QAAQ,8DAA8D,EAAE,SAAS,EAAE,GAAG,EAAE,sCAAsC,EAAE,QAAQ,QAAQ,EAAC,EAAE,SAAS,EAAE,GAAE,gWAAgW,GAAE,gCAAgC,GAAG,EAAE,+dAA4d,GAAG,EAAE,QAAQ,UAAU,EAAC,EAAE,QAAQ,MAAM,EAAC,EAAE,QAAQ,YAAY,0EAA0E,EAAE,SAAS,EAAE,GAAG,EAAE,EAAC,EAAE,QAAQ,KAAK,EAAC,EAAE,QAAQ,UAAU,uBAAuB,EAAE,QAAQ,YAAY,EAAE,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,aAAa,SAAS,EAAE,QAAQ,SAAS,gDAAgD,EAAE,QAAQ,OAAO,wBAAwB,EAAE,QAAQ,OAAO,6DAA6D,EAAE,QAAQ,MAAM,EAAC,EAAE,SAAS,EAAE,GAAG,EAAE,yCAAyC,EAAE,QAAQ,YAAY,EAAE,EAAE,SAAS,EAAE,GAAE,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,GAAG,GAAE,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAE,KAAK,EAAE,EAAE,GAAG,EAAE,6JAA6J,EAAE,QAAQ,KAAK,EAAC,EAAE,QAAQ,UAAU,uBAAuB,EAAE,QAAQ,aAAa,SAAS,EAAE,QAAQ,OAAO,yBAAwB,EAAE,QAAQ,SAAS,gDAAgD,EAAE,QAAQ,OAAO,wBAAwB,EAAE,QAAQ,OAAO,6DAA6D,EAAE,QAAQ,MAAM,EAAC,EAAE,SAAS,EAAE,GAAG,IAAI,GAAE,SAAS,GAAG,MAAM,GAAG,UAAU,EAAE,EAAC,EAAE,QAAQ,KAAK,EAAC,EAAE,QAAQ,UAAU,uBAAuB,EAAE,QAAQ,YAAY,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,QAAQ,aAAa,SAAS,EAAE,QAAQ,SAAS,gDAAgD,EAAE,QAAQ,OAAO,wBAAwB,EAAE,QAAQ,OAAO,6DAA6D,EAAE,QAAQ,MAAM,EAAC,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,GAAE,KAAK,EAAE,wIAAwI,EAAE,QAAQ,UAAU,EAAC,EAAE,QAAQ,OAAO,mKAAmK,EAAE,SAAS,EAAE,IAAI,oEAAoE,QAAQ,yBAAyB,OAAO,GAAE,SAAS,mCAAmC,UAAU,EAAE,EAAC,EAAE,QAAQ,KAAK,EAAC,EAAE,QAAQ,UAAU;AAAA,EACn1N,EAAE,QAAQ,WAAW,EAAE,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,aAAa,SAAS,EAAE,QAAQ,UAAU,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,8CAA8C,GAAG,sCAAsC,GAAG,wBAAwB,GAAG,8EAA8E,GAAE,gBAAgB,GAAE,kBAAkB,GAAG,mBAAmB,GAAG,EAAE,wBAAwB,GAAG,EAAE,QAAQ,cAAc,EAAC,EAAE,SAAS,EAAE,GAAG,qBAAqB,GAAG,uBAAuB,GAAG,yBAAyB,GAAG,EAAE,yBAAyB,GAAG,EAAE,QAAQ,OAAO,mGAAmG,EAAE,QAAQ,WAAW,GAAG,WAAW,WAAW,EAAE,QAAQ,OAAO,yBAAyB,EAAE,QAAQ,OAAO,gBAAgB,EAAE,SAAS,EAAE,GAAG,gEAAgE,GAAG,EAAE,GAAG,GAAG,EAAE,QAAQ,SAAS,EAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,QAAQ,SAAS,EAAE,EAAE,SAAS,EAAE,GAAG,wQAAwQ,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,iBAAiB,EAAE,EAAE,QAAQ,cAAc,EAAC,EAAE,QAAQ,SAAS,EAAC,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,iBAAiB,EAAE,EAAE,QAAQ,cAAc,EAAE,EAAE,QAAQ,SAAS,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,mNAAmN,IAAI,EAAE,QAAQ,iBAAiB,EAAE,EAAE,QAAQ,cAAc,EAAC,EAAE,QAAQ,SAAS,EAAC,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,QAAQ,SAAS,EAAC,EAAE,SAAS,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,SAAS,8BAA8B,EAAE,QAAQ,QAAQ,8IAA8I,EAAE,SAAS,EAAE,GAAG,EAAE,EAAC,EAAE,QAAQ,YAAY,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,0JAA0J,EAAE,QAAQ,UAAU,EAAE,EAAE,QAAQ,YAAY,6EAA6E,EAAE,SAAS,EAAE,GAAE,wEAAwE,GAAG,EAAE,mEAAmE,EAAE,QAAQ,QAAQ,EAAC,EAAE,QAAQ,OAAO,yCAAyC,EAAE,QAAQ,QAAQ,6DAA6D,EAAE,SAAS,EAAE,GAAG,EAAE,yBAAyB,EAAE,QAAQ,QAAQ,EAAC,EAAE,QAAQ,MAAM,EAAC,EAAE,SAAS,EAAE,GAAG,EAAE,uBAAuB,EAAE,QAAQ,MAAM,EAAC,EAAE,SAAS,EAAE,GAAG,EAAE,wBAAwB,GAAG,EAAE,QAAQ,UAAU,EAAE,EAAE,QAAQ,SAAS,EAAE,EAAE,SAAS,EAAE,GAAG,qCAAqC,GAAE,CAAC,WAAW,GAAE,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAE,eAAe,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,cAAc,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,EAAC,EAAE,GAAG,IAAI,GAAE,KAAK,EAAE,yBAAyB,EAAE,QAAQ,QAAQ,EAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,+BAA+B,EAAE,QAAQ,QAAQ,EAAC,EAAE,SAAS,CAAC,EAAE,GAAE,IAAI,GAAE,kBAAkB,GAAG,eAAe,GAAG,IAAI,EAAE,gEAAgE,EAAE,QAAQ,WAAW,EAAE,EAAE,QAAQ,QAAQ,2EAA2E,EAAE,SAAS,EAAE,WAAW,6EAA6E,IAAI,0EAA0E,KAAK,EAAE,qNAAqN,EAAE,QAAQ,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,GAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,OAAO,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAE,IAAI,EAAE,QAAQ,OAAO,eAAe,EAAE,QAAQ,UAAU,GAAG,EAAE,SAAS,CAAC,EAAE,GAAE,CAAC,OAAO,GAAE,IAAI,GAAG,SAAS,EAAE,EAAE,GAAE,CAAC,OAAO,GAAE,IAAI,GAAE,OAAO,GAAG,SAAS,EAAE,EAAM,GAAG,CAAC,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,EAAE,GAAG,KAAG,GAAG,GAAG,SAAS,EAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAE,WAAW,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAE,cAAc,EAAE,EAAO,QAAG,GAAE,mBAAmB,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAE,sBAAsB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAE,cAAc,GAAG,EAAE,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,SAAS,EAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,QAAQ,GAAE,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,KAAK,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE,EAAE,EAAE,MAAM,GAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAO,UAAK,EAAE,OAAO,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,GAAE,UAAU,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,IAAS,QAAG,IAAI,GAAG,EAAE,IAAS,WAAM,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,GAAG,EAAE,KAAK,KAAK,IAAS,QAAG,EAAE,KAAK,EAAE,GAAG,IAAS,QAAG,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,KAAK,EAAE,EAAE,GAAG,QAAQ,EAAE,MAAM,kBAAkB,IAAI,EAAE,EAAE,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,OAAO,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,sBAAsB,EAAE,GAAG,IAAI,KAAK,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM;AAAA,CACtiL,EAAE,IAAI,KAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,EAAE,GAAG,IAAI,KAAK,OAAO,EAAE,IAAI,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK;AAAA,CACnI,EAAE,IAAI,GAAE,KAAK,CAAC,QAAQ,MAAM,MAAM,WAAW,CAAC,EAAE,CAAC,KAAK,QAAQ,GAAG,GAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,QAAQ,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,CAAC,KAAK,QAAQ,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,KAAK,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,KAAK,MAAM,MAAM,iBAAiB,EAAE,EAAE,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG,eAAe,WAAW,KAAK,KAAK,QAAQ,SAAS,EAAE,GAAE,EAAE;AAAA,CACvW,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,OAAO,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,GAAG,KAAK,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,KAAK,MAAM,OAAO,eAAe,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,QAAQ,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,MAAM,MAAM,WAAW,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAE,EAAE,GAAG,GAAG,KAAK,QAAQ,UAAU,CAAC,GAAG,KAAK,MAAM,MAAM,gBAAgB,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,UAAU,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,KAAK,EAAE,OAAO,KAAK,MAAM,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,GAAE,EAAE,GAAG;AAAA,CACjkB,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,WAAW,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAE,EAAE,GAAG;AAAA,CAC9E,EAAE,MAAM;AAAA,CACR,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,GAAG,KAAK,MAAM,MAAM,gBAAgB,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAQ,QAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAO,WAAM,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK;AAAA,CACxM,EAAE,EAAE,EAAE,QAAQ,KAAK,MAAM,MAAM,wBAAwB;AAAA,OACjD,EAAE,QAAQ,KAAK,MAAM,MAAM,yBAAyB,EAAE,EAAE,EAAE,EAAE,GAAG;AAAA,EACpE,IAAI,EAAE,EAAE,EAAE,GAAG;AAAA,EACb,IAAI,EAAE,IAAI,EAAE,KAAK,MAAM,MAAM,IAAI,GAAG,KAAK,MAAM,MAAM,IAAI,GAAG,KAAK,MAAM,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,MAAM,MAAM,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,OAAO,OAAO,MAAM,GAAG,GAAG,OAAO,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI;AAAA,EACzN,EAAE,KAAK;AAAA,CACR,EAAE,EAAE,KAAK,WAAW,CAAC,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,EAAE,KAAK,MAAW,QAAG,GAAG,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI;AAAA,EAClL,EAAE,KAAK;AAAA,CACR,EAAE,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM;AAAA,CACpK,EAAE,UAAU,MAAM,CAAC,KAAK,aAAa,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,KAAK,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,IAAI,GAAG,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,KAAK,QAAQ,WAAW,EAAE,EAAE,EAAE,SAAS,IAAI,EAAE,KAAK,MAAM,MAAM,cAAc,CAAC,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM;AAAA,EACvd,CAAC,EAAE,GAAG,QAAQ,KAAK,MAAM,MAAM,gBAAgB,KAAG,IAAI,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM;AAAA,EACpF,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,QAAQ,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,GAAG,EAAE,EAAE,GAAG,OAAO,KAAK,MAAM,MAAM,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,QAAQ,GAAG,KAAK,MAAM,MAAM,UAAU,KAAK,CAAC,IAAI,GAAG,EAAE;AAAA,EACzN,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,gBAAgB,CAAC,EAAE,EAAG,KAAK,MAAM,MAAM,QAAQ,CAAC,EAAE,EAAG,KAAK,MAAM,MAAM,iBAAiB,CAAC,EAAE,EAAG,KAAK,MAAM,MAAM,kBAAkB,CAAC,EAAE,GAAG,KAAK,MAAM,MAAM,eAAe,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM;AAAA,EAC3P,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,QAAQ,UAAU,EAAE,EAAE,QAAQ,KAAK,MAAM,MAAM,mBAAmB,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,KAAK,MAAM,MAAM,cAAc,MAAM,EAAE,EAAG,KAAK,CAAC,GAAG,EAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAG,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG;AAAA,EAChR,EAAE,MAAM,CAAC,EAAM,KAAC,GAAG,GAAG,EAAE,QAAQ,KAAK,MAAM,MAAM,cAAc,MAAM,EAAE,OAAO,KAAK,MAAM,MAAM,YAAY,GAAG,GAAG,EAAG,KAAK,CAAC,GAAG,EAAG,KAAK,CAAC,GAAG,EAAG,KAAK,CAAC,EAAE,MAAM,GAAG;AAAA,EAC7J,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,GAAG,EAAE;AAAA,EAC7B,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,MAAM,GAAG,KAAK,MAAM,MAAM,gBAAgB,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,QAAQ,MAAM,EAAE,KAAK,MAAM,MAAM,WAAW,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,OAAO,EAAE,EAAE,QAAQ,KAAK,MAAM,MAAM,gBAAgB,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,KAAK,YAAY,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,QAAQ,EAAO,YAAO,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,OAAO,IAAI,GAAG,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,MAAM,GAAG,OAAO,KAAK,MAAM,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,OAAO,OAAO,KAAG,EAAE,OAAO,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,EAAE,KAAK,KAAG,KAAK,MAAM,MAAM,QAAQ,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,OAAO,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,KAAK,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,OAAO,MAAM,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,YAAY,EAAE,QAAQ,KAAK,MAAM,MAAM,oBAAoB,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,QAAQ,KAAK,MAAM,MAAM,aAAa,IAAI,EAAE,QAAQ,KAAK,MAAM,OAAO,eAAe,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,QAAQ,KAAK,MAAM,OAAO,eAAe,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,MAAM,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,MAAM,eAAe,KAAK,EAAE,EAAE,EAAE,OAAO,IAAI,EAAE,GAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,QAAQ,KAAK,MAAM,MAAM,gBAAgB,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,KAAK,EAAE,EAAE,GAAG,QAAQ,KAAK,MAAM,MAAM,kBAAkB,EAAE,EAAE,MAAM;AAAA,CAClhD,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,QAAQ,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,KAAK,EAAE,KAAK,MAAM,MAAM,gBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,EAAE,KAAK,MAAM,MAAM,iBAAiB,KAAK,CAAC,EAAE,EAAE,MAAM,KAAK,QAAQ,EAAE,KAAK,MAAM,MAAM,eAAe,KAAK,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,EAAE,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK,CAAC,KAAK,EAAE,GAAG,OAAO,KAAK,MAAM,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,EAAE,KAAK,KAAK,GAAE,EAAE,EAAE,OAAO,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,SAAS,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,UAAU,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,KAAK,MAAM,OAAO,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,UAAU,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI;AAAA,EACzyB,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,YAAY,IAAI,EAAE,GAAG,KAAK,EAAE,OAAO,KAAK,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,KAAK,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,KAAK,MAAM,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,OAAO,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,SAAS,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,MAAM,MAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,KAAK,EAAE,EAAE,EAAE,KAAK,MAAM,MAAM,OAAO,GAAG,KAAK,MAAM,MAAM,QAAQ,KAAK,MAAM,MAAM,QAAQ,KAAK,EAAE,EAAE,IAAI,KAAK,MAAM,MAAM,OAAO,IAAI,CAAC,KAAK,MAAM,MAAM,YAAY,KAAK,MAAM,MAAM,kBAAkB,KAAK,EAAE,EAAE,EAAE,KAAK,MAAM,MAAM,WAAW,GAAG,KAAK,MAAM,MAAM,YAAY,KAAK,MAAM,MAAM,gBAAgB,KAAK,EAAE,EAAE,IAAI,KAAK,MAAM,MAAM,WAAW,IAAI,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG,OAAO,KAAK,MAAM,MAAM,OAAO,WAAW,KAAK,MAAM,MAAM,WAAW,MAAM,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,KAAK,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,QAAQ,UAAU,KAAK,MAAM,MAAM,kBAAkB,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,MAAM,MAAM,gBAAgB,KAAK,CAAC,EAAE,OAAO,IAAI,EAAE,GAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE,OAAW,KAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,KAAK,QAAQ,SAAS,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,kBAAkB,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,IAAS,OAAE,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,MAAM,MAAM,kBAAkB,KAAK,CAAC,IAAI,KAAK,QAAQ,UAAU,CAAC,KAAK,MAAM,MAAM,gBAAgB,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,QAAQ,KAAK,MAAM,OAAO,eAAe,IAAI,EAAE,MAAM,GAAG,EAAE,QAAQ,KAAK,MAAM,OAAO,eAAe,IAAI,CAAC,EAAE,EAAE,GAAG,KAAK,MAAM,KAAK,KAAK,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,MAAM,OAAO,QAAQ,KAAK,CAAC,KAAK,EAAE,KAAK,MAAM,OAAO,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,QAAQ,KAAK,MAAM,MAAM,oBAAoB,GAAG,EAAE,EAAE,EAAE,EAAE,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,KAAK,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,eAAe,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,MAAM,mBAAmB,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,KAAS,CAAC,GAAG,KAAK,MAAM,OAAO,YAAY,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,IAAI,KAAK,MAAM,OAAO,kBAAkB,KAAK,MAAM,OAAO,kBAAkB,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,SAAc,SAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,KAAK,EAAE,OAAO,KAAK,MAAM,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,OAAO,KAAK,MAAM,aAAa,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,KAAK,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,KAAK,MAAM,MAAM,kBAAkB,GAAG,EAAE,EAAE,KAAK,MAAM,MAAM,aAAa,KAAK,CAAC,EAAE,EAAE,KAAK,MAAM,MAAM,kBAAkB,KAAK,CAAC,GAAG,KAAK,MAAM,MAAM,gBAAgB,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,MAAM,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,KAAK,MAAM,aAAa,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,SAAS,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,KAAK,EAAE,EAAE,GAAG,EAAE,UAAU,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,EAAM,KAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,OAAO,WAAW,KAAK,EAAE,EAAE,IAAI,IAAI,SAAS,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,OAAO,KAAK,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,MAAM,WAAW,MAAM,CAAC,KAAK,OAAO,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAM,GAAE,MAAM,CAAC,CAAC,OAAO,QAAQ,MAAM,UAAU,YAAY,WAAW,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,EAAE,KAAK,OAAO,MAAM,OAAO,OAAO,IAAI,EAAE,KAAK,QAAQ,GAAG,GAAE,KAAK,QAAQ,UAAU,KAAK,QAAQ,WAAW,IAAI,GAAE,KAAK,UAAU,KAAK,QAAQ,UAAU,KAAK,UAAU,QAAQ,KAAK,QAAQ,KAAK,UAAU,MAAM,KAAK,KAAK,YAAY,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,GAAG,WAAW,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAE,MAAM,GAAE,OAAO,OAAO,GAAE,MAAM,EAAE,KAAK,QAAQ,UAAU,EAAE,MAAM,GAAE,SAAS,EAAE,OAAO,GAAE,UAAU,KAAK,QAAQ,MAAM,EAAE,MAAM,GAAE,IAAI,KAAK,QAAQ,OAAO,EAAE,OAAO,GAAE,OAAO,EAAE,OAAO,GAAE,KAAK,KAAK,UAAU,MAAM,YAAa,MAAK,EAAE,CAAC,MAAM,CAAC,MAAM,GAAE,OAAO,EAAC,QAAS,IAAG,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,QAAS,UAAS,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,GAAE,eAAe;AAAA,CACvqJ,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,YAAY,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY,GAAG,KAAK,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,KAAK,YAAY,CAAC,EAAE,KAAK,OAAO,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,QAAQ,WAAW,EAAE,EAAE,QAAQ,GAAE,cAAc,MAAM,EAAE,QAAQ,GAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,QAAQ,YAAY,OAAO,KAAK,MAAI,EAAE,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,SAAS,GAAG,IAAS,OAAE,EAAE,KAAK;AAAA,EACxhB,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,aAAa,GAAG,OAAO,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAS;AAAA,CAC5J,EAAE,GAAG;AAAA,GACH,EAAE,IAAI,EAAE,MAAM;AAAA,EACf,EAAE,KAAK,KAAK,YAAY,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,aAAa,GAAG,OAAO,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAS;AAAA,CACvpB,EAAE,GAAG;AAAA,GACH,EAAE,IAAI,EAAE,MAAM;AAAA,EACf,EAAE,IAAI,KAAK,YAAY,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,MAAM,EAAE,OAAO,KAAK,OAAO,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,GAAG,SAAS,GAAG,EAAE,KAAK,UAAU,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,EAAE,GAAG,KAAK,QAAQ,YAAY,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,QAAQ,WAAW,WAAW,QAAQ,KAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,MAAM,MAAM,EAAE,KAAK,UAAU,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,OAAO,aAAa,EAAE,MAAM,EAAE,IAAI,SAAS;AAAA,CACnoB,EAAE,GAAG;AAAA,GACH,EAAE,IAAI,EAAE,MAAM;AAAA,EACf,EAAE,KAAK,KAAK,YAAY,IAAI,EAAE,KAAK,YAAY,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAS;AAAA,CACzP,EAAE,GAAG;AAAA,GACH,EAAE,IAAI,EAAE,MAAM;AAAA,EACf,EAAE,KAAK,KAAK,YAAY,IAAI,EAAE,KAAK,YAAY,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,IAAI,EAAE,0BAA0B,EAAE,WAAW,CAAC,EAAE,GAAG,KAAK,QAAQ,OAAO,CAAC,QAAQ,MAAM,CAAC,EAAE,MAAW,WAAU,MAAM,CAAC,GAAG,OAAO,KAAK,MAAM,IAAI,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,YAAY,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,MAAM,OAAO,cAAc,KAAK,CAAC,IAAI,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,YAAY,GAAG,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,OAAO,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,UAAU,MAAM,OAAO,cAAc,SAAS,GAAG,MAAM,EAAE,KAAK,UAAU,MAAM,OAAO,eAAe,KAAK,CAAC,IAAI,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,UAAU,MAAM,OAAO,eAAe,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,UAAU,MAAM,OAAO,UAAU,KAAK,CAAC,IAAI,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,UAAU,MAAM,OAAO,UAAU,SAAS,EAAE,EAAE,KAAK,QAAQ,OAAO,cAAc,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,QAAQ,YAAY,QAAQ,KAAK,MAAI,EAAE,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,QAAQ,EAAE,KAAK,OAAO,KAAK,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,QAAQ,GAAG,OAAO,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,UAAU,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,CAAC,KAAK,MAAM,SAAS,EAAE,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,EAAE,GAAG,KAAK,QAAQ,YAAY,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,QAAQ,WAAW,YAAY,QAAQ,KAAG,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,KAAK,UAAU,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,MAAM,EAAE,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,EAAE,IAAI,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC,IAAI,EAAE,0BAA0B,EAAE,WAAW,CAAC,EAAE,GAAG,KAAK,QAAQ,OAAO,CAAC,QAAQ,MAAM,CAAC,EAAE,MAAW,WAAU,MAAM,CAAC,GAAG,OAAO,EAAE,EAAM,GAAE,KAAK,CAAC,QAAQ,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,QAAQ,GAAG,GAAE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,MAAM,GAAE,aAAa,IAAI,GAAG,EAAE,EAAE,QAAQ,GAAE,cAAc,EAAE,EAAE;AAAA,EAC7zF,OAAO,EAAE,8BAA8B,GAAE,CAAC,EAAE,MAAM,EAAE,EAAE,GAAE,EAAE,EAAE,GAAG;AAAA,EAC/D,eAAe,EAAE,EAAE,GAAE,EAAE,EAAE,GAAG;AAAA,EAC5B,UAAU,EAAE,OAAO,GAAG,CAAC,MAAM;AAAA,EAC7B,KAAK,OAAO,MAAM,CAAC;AAAA,EACnB,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,KAAK,KAAK,KAAK,OAAO,YAAY,CAAC,OAAO;AAAA,EACpH,EAAE,CAAC,EAAE,CAAC,MAAM;AAAA,EACZ,IAAI,CAAC,EAAE,CAAC,IAAQ,QAAJ,EAAgB,MAAJ,GAAE,EAAQ,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,KAAK,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,GAAG,MAAM,IAAI,EAAE,EAAE;AAAA,EAC7K,EAAE,KAAK,EAAE;AAAA,EACT,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,IAAI,OAAO,aAAa,EAAE,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,GAAG,OAAO,OAAO,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,EAAE,IAAI,GAAE,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,KAAK,EAAE,OAAO,QAAQ,CAAC,KAAK,OAAO,IAAI,EAAE,IAAI,KAAK,EAAE,IAAI,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,OAAO,GAAG,KAAK,OAAO,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO;AAAA,EACrd,QAAQ,EAAE,QAAQ,GAAG,CAAC,MAAM,WAAW,EAAE,cAAc,IAAI,+BAA+B,SAAS,EAAE,OAAO,GAAG,CAAC,MAAM,MAAM,KAAK,OAAO,YAAY,CAAC;AAAA,EACrJ,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,OAAO,IAAI,GAAG,KAAK,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,GAAG,KAAK,UAAU,EAAE,EAAE,EAAE,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,UAAU,aAAa;AAAA;AAAA,EAEpS,EAAE;AAAA,EACF,EAAE;AAAA,EACF,QAAQ,EAAE,KAAK,GAAG,CAAC,MAAM;AAAA,EACzB;AAAA,EACA,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,KAAK,KAAK,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,UAAU,IAAI,MAAM,EAAE,KAAK;AAAA,EACtI,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,WAAW,KAAK,OAAO,YAAY,CAAC,aAAa,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,KAAK,OAAO,YAAY,CAAC,SAAS,QAAQ,EAAE,KAAK,GAAG,CAAC,MAAM,SAAS,GAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,MAAM,OAAO,GAAG,EAAE,OAAO,GAAG,CAAC,MAAM,QAAQ,KAAK,OAAO,YAAY,CAAC,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO,YAAY,CAAC,EAAE,EAAE,GAAE,CAAC,EAAE,GAAG,IAAI,KAAK,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,OAAO,IAAI,GAAG,WAAW,GAAE,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO,YAAY,EAAE,KAAK,OAAO,YAAY,GAAG,IAAI,EAAE,GAAE,CAAC,EAAE,GAAG,IAAI,KAAK,OAAO,GAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,WAAW,KAAK,OAAO,IAAI,GAAG,WAAW,GAAE,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,WAAW,GAAG,EAAE,OAAO,KAAK,OAAO,YAAY,EAAE,MAAM,GAAE,YAAY,IAAG,EAAE,QAAQ,EAAE,KAAK,GAAE,EAAE,IAAI,EAAE,EAAM,GAAE,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,GAAG,EAAM,GAAE,MAAM,CAAC,CAAC,QAAQ,SAAS,aAAa,WAAW,CAAC,EAAE,CAAC,KAAK,QAAQ,GAAG,GAAE,KAAK,QAAQ,SAAS,KAAK,QAAQ,UAAU,IAAI,GAAE,KAAK,SAAS,KAAK,QAAQ,SAAS,KAAK,SAAS,QAAQ,KAAK,QAAQ,KAAK,SAAS,OAAO,KAAK,KAAK,aAAa,IAAI,SAAS,MAAK,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,QAAS,YAAW,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,QAAQ,YAAY,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,QAAQ,WAAW,UAAU,EAAE,MAAM,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,UAAU,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,YAAY,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,UAAU,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,QAAQ,CAAC,GAAG,KAAK,SAAS,MAAM,CAAC,EAAE,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,SAAS,GAAG,CAAC,EAAE,QAAQ,KAAK,UAAU,CAAC,GAAG,KAAK,SAAS,QAAQ,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,GAAG,KAAK,SAAS,MAAM,CAAC,EAAE,QAAQ,KAAK,aAAa,CAAC,GAAG,KAAK,SAAS,WAAW,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC,EAAE,QAAQ,KAAK,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,EAAE,QAAQ,KAAK,YAAY,CAAC,GAAG,KAAK,SAAS,UAAU,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,SAAS,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG;AAAA,EAC3uE,KAAK,SAAS,KAAK,CAAC,EAAE,EAAE,GAAG,KAAK,SAAS,UAAU,CAAC,KAAK,YAAY,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,wBAAwB,GAAG,KAAK,QAAQ,OAAO,OAAO,QAAQ,MAAM,CAAC,EAAE,GAAG,MAAU,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,SAAS,CAAC,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,KAAK,QAAQ,YAAY,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,QAAQ,WAAW,UAAU,EAAE,MAAM,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,OAAO,OAAO,QAAQ,SAAS,KAAK,WAAW,KAAK,MAAM,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,UAAU,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,KAAK,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,wBAAwB,GAAG,KAAK,QAAQ,OAAO,OAAO,QAAQ,MAAM,CAAC,EAAE,GAAG,MAAU,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,EAAM,GAAE,KAAK,CAAC,QAAQ,MAAM,WAAW,CAAC,EAAE,CAAC,KAAK,QAAQ,GAAG,SAAS,kBAAiB,IAAI,IAAI,CAAC,aAAa,cAAc,mBAAmB,cAAc,CAAC,QAAS,8BAA6B,IAAI,IAAI,CAAC,aAAa,cAAc,kBAAkB,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,OAAO,KAAK,MAAM,GAAE,IAAI,GAAE,UAAU,aAAa,EAAE,CAAC,OAAO,KAAK,MAAM,GAAE,MAAM,GAAE,YAAY,EAAM,GAAE,KAAK,CAAC,SAAS,GAAE,EAAE,QAAQ,KAAK,WAAW,MAAM,KAAK,cAAc,EAAE,EAAE,YAAY,KAAK,cAAc,EAAE,EAAE,OAAO,GAAE,SAAS,GAAE,aAAa,GAAE,MAAM,GAAE,UAAU,GAAE,MAAM,GAAE,WAAW,IAAI,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,EAAE,EAAE,UAAU,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,KAAK,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,KAAK,EAAE,KAAK,QAAQ,KAAK,EAAE,EAAE,EAAE,OAAO,KAAK,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,KAAK,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,SAAS,YAAY,cAAc,EAAE,MAAM,KAAK,SAAS,WAAW,YAAY,EAAE,MAAM,QAAQ,KAAG,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,GAAG,EAAE,EAAE,EAAE,OAAO,KAAK,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,KAAK,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,SAAS,YAAY,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,KAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,SAAS,OAAO,EAAE,OAAO,GAAG,EAAE,aAAa,EAAE,WAAW,QAAQ,KAAG,CAAC,GAAG,CAAC,EAAE,KAAK,MAAU,MAAM,yBAAyB,EAAE,GAAG,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,GAAG,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,SAAS,EAAE,QAAQ,SAAS,MAAU,MAAM,6CAA6C,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,QAAQ,EAAE,WAAW,EAAE,WAAW,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,WAAW,EAAE,YAAY,EAAE,YAAY,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,EAAE,KAAK,IAAI,gBAAgB,GAAG,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,WAAW,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,SAAS,UAAU,IAAI,GAAE,KAAK,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,GAAG,MAAU,MAAM,aAAa,mBAAmB,EAAE,GAAG,CAAC,UAAU,QAAQ,EAAE,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,SAAS,WAAW,IAAI,GAAE,KAAK,QAAQ,EAAE,QAAQ,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,MAAU,MAAM,cAAc,mBAAmB,EAAE,GAAG,CAAC,UAAU,QAAQ,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,SAAS,OAAO,IAAI,GAAE,QAAQ,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,GAAG,MAAU,MAAM,SAAS,mBAAmB,EAAE,GAAG,CAAC,UAAU,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,GAAE,iBAAiB,IAAI,CAAC,EAAE,EAAE,GAAG,KAAG,CAAC,GAAG,KAAK,SAAS,OAAO,GAAE,6BAA6B,IAAI,CAAC,EAAE,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,MAAM,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,IAAI,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,SAAS,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,SAAS,IAAI,KAAK,YAAY,CAAC,EAAE,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,YAAY,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,GAAE,IAAI,EAAE,GAAG,KAAK,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,OAAO,GAAE,MAAM,EAAE,GAAG,KAAK,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,KAAK,YAAY,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,SAAS,QAAQ,IAAI,EAAE,QAAQ,GAAG,OAAO,EAAM,MAAM,oIAAoI,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,OAAO,EAAM,MAAM,gDAAgD,CAAC,EAAE,GAAG,OAAO,GAAG,SAAS,OAAO,EAAM,MAAM,wCAAwC,OAAO,UAAU,SAAS,KAAK,CAAC,EAAE,mBAAmB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,QAAQ,EAAE,EAAE,MAAM,MAAM,GAAG,EAAE,MAAM,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,MAAM,EAAE,MAAM,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,aAAa,EAAE,EAAE,GAAE,IAAI,GAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,MAAM,EAAE,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,YAAY,MAAM,QAAQ,IAAI,KAAK,WAAW,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,cAAc,EAAE,EAAE,GAAE,MAAM,GAAE,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,MAAM,EAAE,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,WAAW,CAAC,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,EAAE,EAAE,GAAE,IAAI,GAAE,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,iBAAiB,CAAC,GAAG,EAAE,YAAY,KAAK,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,EAAE,EAAE,GAAE,MAAM,GAAE,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,MAAO,KAAG,CAAC,GAAG,EAAE,SAAS;AAAA,2DACt7L,EAAE,CAAC,IAAI,EAAE,iCAAiC,GAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,SAAS,OAAO,EAAE,QAAQ,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,QAAQ,OAAO,CAAC,EAAE,MAAM,GAAG,EAAM,GAAE,IAAI,GAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,GAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,QAAQ,CAAC,EAAE,CAAC,OAAO,GAAE,WAAW,CAAC,EAAE,EAAE,SAAS,GAAE,SAAS,GAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,GAAE,EAAE,SAAS,GAAE,EAAE,IAAI,QAAQ,IAAI,EAAE,CAAC,OAAO,GAAE,IAAI,GAAG,CAAC,EAAE,EAAE,SAAS,GAAE,SAAS,GAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,GAAE,WAAW,EAAE,CAAC,GAAG,EAAE,YAAY,GAAE,YAAY,EAAE,OAAO,GAAE,EAAE,OAAO,GAAE,MAAM,EAAE,SAAS,GAAE,EAAE,aAAa,GAAE,EAAE,MAAM,GAAE,EAAE,MAAM,GAAE,IAAI,EAAE,UAAU,GAAE,EAAE,MAAM,GAAE,EAAE,MAAM,EAAE,IAAS,QAAL,GAAkB,WAAL,GAAqB,IAAL,GAAc,WAAL,GAAqB,YAAL,IAAtC,EAApB,IAAgF,GAAG,GAAE,MAAM,GAAG,GAAE,IC1D1uB,IAAM,GAAe,IAAI,GAmBrB,GAEE,GAAY,IAAI,GACtB,GAAU,IAAI,CACZ,SAAU,CACR,IAAI,CAAC,EAAY,CAOf,IAAM,EAAO,OAAO,EAAM,MAAQ,EAAE,EAC9B,EAAO,EAAK,MAAM,SAAS,IAAI,IAAM,GACrC,EAAK,EAAK,MAAM,mBAAmB,IAAI,IAAM,GAC7C,EAAO,EAAK,MAAM,WAAW,IAAI,IAAM,GACvC,EAAO,IAAc,IAAI,EAAM,IAAI,EACzC,GAAI,CAAC,GAAM,CAAC,GAAQ,CAAC,EAAM,MAAO,GAClC,IAAI,EAAO,GAAa,KAAK,IAAK,EAAO,MAAK,CAAC,EACzC,EAAQ,CACZ,GAAM,oBAAoB,KAC1B,GAAQ,sBAAsB,IAChC,EACG,OAAO,OAAO,EACd,KAAK,GAAG,EACX,GAAI,EAAO,EAAO,EAAK,QAAQ,SAAU,QAAQ,IAAQ,EACzD,GAAI,EAAM,CAGR,IAAM,EAAO,KAAK,UAAU,EAAK,EAAE,EAAE,QAAQ,KAAM,SAAS,EAC5D,GAAQ,4DAA4D,EAAK,YAAY,aAEvF,OAAO,EAEX,CACF,CAAC,EAOD,SAAS,EAAO,CAAC,EAAmB,CAClC,OAAO,EACJ,YAAY,EACZ,QAAQ,cAAe,GAAG,EAC1B,QAAQ,WAAY,EAAE,EAE3B,SAAS,EAAU,CAAC,EAAmB,CACrC,OAAO,EAAE,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,EAO5E,IAAM,GAAc,IAAI,GACpB,GAAe,IAAI,IACnB,GAA0B,CAAC,EAE/B,GAAU,IAAI,CACZ,MAAO,CACL,UAAU,CAAC,EAAkB,CAG3B,OAFA,GAAe,IAAI,IACnB,GAAgB,CAAC,EACV,GAET,WAAW,CAAC,EAAc,CACxB,GAAI,GAAc,SAAW,EAAG,OAAO,EACvC,IAAM,EAAQ,GACX,IAAI,CAAC,IAAO,CACX,IAAM,EAAO,GAAY,YACvB,GAAa,IAAI,CAAE,GAAK,EAC1B,EACM,EAAM,GAAQ,CAAE,EACtB,MAAO,cAAc,SAAW,qBAAwB,4EACzD,EACA,KAAK;AAAA,CAAI,EACZ,MAAO,GAAG;AAAA;AAAA;AAAA;AAAA,EAAwE;AAAA;AAAA;AAAA,EAEtF,EACA,WAAY,CACV,CAGE,KAAM,WACN,MAAO,SACP,KAAK,CAAC,EAAa,CACjB,OAAO,EAAI,MAAM,MAAM,GAAG,OAE5B,SAAS,CAAC,EAAa,CACrB,IAAM,EAAI,sCAAsC,KAAK,CAAG,EACxD,GAAI,CAAC,EAAG,OACR,MAAO,CACL,KAAM,WACN,IAAK,EAAE,GACP,OAAQ,EAAE,GAAG,KAAK,EAClB,OAAQ,EAAE,IAAM,EAAE,IAAI,KAAK,CAC7B,GAEF,QAAQ,CAAC,EAAY,CACnB,MAAO,aAAa,GAClB,EAAM,MACR,wBAAwB,GAAW,EAAM,KAAK,QAElD,EACA,CAEE,KAAM,cACN,MAAO,QACP,KAAK,CAAC,EAAa,CACjB,OAAO,EAAI,MAAM,iBAAiB,GAAG,OAEvC,SAAS,CAAC,EAAa,CACrB,IAAM,EAAI,yCAAyC,KAAK,CAAG,EAC3D,GAAI,CAAC,EAAG,OAER,OADA,GAAa,IAAI,EAAE,GAAG,KAAK,EAAG,EAAE,GAAG,KAAK,CAAC,EAClC,CAAE,KAAM,cAAe,IAAK,EAAE,EAAG,GAE1C,QAAQ,EAAG,CACT,MAAO,GAEX,EACA,CAEE,KAAM,cACN,MAAO,SACP,KAAK,CAAC,EAAa,CACjB,OAAO,EAAI,MAAM,MAAM,GAAG,OAE5B,SAAS,CAAC,EAAa,CACrB,IAAM,EAAI,kBAAkB,KAAK,CAAG,EACpC,GAAI,CAAC,EAAG,OACR,IAAM,EAAK,EAAE,GAAG,KAAK,EACrB,GAAI,CAAC,GAAc,SAAS,CAAE,EAAG,GAAc,KAAK,CAAE,EACtD,MAAO,CAAE,KAAM,cAAe,IAAK,EAAE,GAAI,IAAG,GAE9C,QAAQ,CAAC,EAAY,CACnB,IAAM,EAAI,GAAc,QAAQ,EAAM,EAAE,EAAI,EACtC,EAAM,GAAQ,EAAM,EAAE,EAC5B,MAAO,0CAA0C,gBAAkB,MAAQ,cAE/E,CACF,CACF,CAAC,EAGM,SAAS,EAAiB,CAC/B,EACA,EAAiC,CAAC,EAC1B,CACR,GAAe,EAAK,MACpB,GAAI,CACF,OAAO,GAAU,MAAM,CAAI,SAC3B,CACA,GAAe,QCpJZ,SAAS,EAAS,CAAC,EAAgB,EAA8B,CAItE,IAAM,EAAY,EAAI,WAAW,KAAK,EACtC,GAAI,EAAW,OAAO,EAKtB,IAAM,EAAU,GAAa,KAAK,GAAK,GACvC,GAAI,CAAC,EAAS,OAAO,EAAI,MACzB,IAAM,EAAI,EAAI,MAAM,YAAY,EAC1B,EAAI,EAAQ,YAAY,EAC9B,GAAI,EAAE,SAAS,CAAC,GAAK,EAAE,SAAS,CAAC,EAAG,OAAO,EAAI,MAC/C,MAAO,GAAG,EAAI,WAAU,ICiG1B,IAAQ,OAAK,QAAM,QAAM,WAAW,EAS7B,MAAM,WAAiB,CAAa,OAClC,kBAAmB,kBAEnB,gBAAiB,CACtB,UAAW,EACb,EAEA,MAAQ,EAER,OAAO,CAAC,EAAgB,EAAsB,EAA6B,CACzE,IAAM,EAAU,EAAQ,aAAa,MAAM,EACrC,EAEF,EAAQ,cAAc,sBAAsB,GAC3C,QAAQ,UAAU,EAAI,IACxB,KAAK,UAAY,GAAc,CAAO,EAAI,GAAK,CAAO,GACnD,EAAM,GACV,EACA,CACE,KAAM,MACN,SAAU,EACV,KAAM,MACN,aAAc,CAChB,EACA,EAAQ,aAAa,YAAY,EAC7B,GACE,CACE,MAAO,QACP,MAAO,OACT,EACA,EAAM,EAAE,CACV,EACA,CAAC,CACP,EACM,EAAU,EAAQ,QAAQ,QAChC,GAAI,EACF,EAAI,QAAQ,QAAU,EAExB,OAAO,QAGF,iBAAkB,CACvB,QAAS,CAEP,6BACE,mEACF,wBAAyB,kCACzB,yBAA0B,kCAC1B,QAAS,OACT,cAAe,SACf,SAAU,WACV,SAAU,SACV,UAAW,iBACb,EACA,KAAM,CACJ,SAAU,WACV,QAAS,QACT,KAAM,IACN,SAAU,SACV,UAAW,MACb,EACA,0BAA2B,CACzB,KAAM,UACR,EACA,sBAAuB,CACrB,QAAS,iBACX,EACA,wBAAyB,CACvB,QAAS,OACT,cAAe,SACf,UAAW,MACb,EACA,sBAAuB,CACrB,QAAS,MACX,EACA,cAAe,CACb,QAAS,OACT,WAAY,OACZ,WAAY,QACd,EACA,oBAAqB,CACnB,QAAS,GAAG,EAAK,aAAa,EAAK,UACnC,OAAQ,UACR,QAAS,OACT,WAAY,UACd,EACA,gCAAiC,CAC/B,eAAgB,EAAK,sBACrB,MAAO,EAAK,SACd,EACA,iBAAkB,CAChB,KAAM,GACR,EACA,gBAAiB,CACf,WAAY,EAAK,UACnB,EACA,4BAA6B,CAC3B,QAAS,IACT,MAAO,EACP,OAAQ,EAAK,kBACb,WAAY,EAAK,sBACjB,WAAY,eACd,EACA,qBAAsB,CACpB,OAAQ,EACR,WAAY,cACZ,UAAW,SACX,WAAY,EAAK,UACjB,QAAS,CACX,EACA,2BAA4B,CAC1B,OAAQ,MACV,CACF,EAEA,eAAyC,QASrC,WAAU,EAA2B,CACvC,OAAO,KAAK,kBAEV,WAAU,CAAC,EAAiC,CAC9C,KAAK,eAAiB,EAGxB,QAAU,CACR,GACE,CAAE,KAAM,WAAY,KAAM,UAAW,EACrC,GACE,CAAE,KAAM,QAAS,EACjB,GAAI,CAAE,MAAO,OAAQ,KAAM,MAAO,CAAC,EACnC,GAAI,CAAE,MAAO,SAAU,CAAC,EACxB,GAAK,CAAE,KAAM,YAAa,CAAC,CAC7B,EACA,GAAI,CAAE,MAAO,QAAS,EAAG,GAAI,CAAE,MAAO,WAAY,KAAM,UAAW,CAAC,CAAC,CACvE,EACA,GAAK,CACP,EAEA,UAAU,CAAC,EAAmB,EAAY,GAAa,CACrD,GAAI,CAAC,EAAK,aAAa,MAAM,EAE3B,MADA,QAAQ,MAAM,gCAAiC,CAAI,EACzC,MAAM,+BAA+B,EAIjD,GAFA,KAAK,OAAO,CAAI,EAChB,KAAK,UAAU,EACX,EACF,KAAK,MAAQ,KAAK,OAAO,OAAS,EAEpC,KAAK,YAAY,EAGnB,aAAa,CAAC,EAAyB,CACrC,EAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,YAAY,EAGnB,OAAS,CAAC,IAAuB,CAC/B,IAAQ,QAAS,KAAK,MAChB,EAAW,CAAC,GAAG,EAAK,QAAQ,EAAE,QAAQ,EAAM,MAAqB,EACvE,OAAS,EAAwB,SAC1B,YACH,KAAK,OACF,EAAW,OAAO,EAAK,SAAS,MAAM,EAAI,GAAK,EAAK,SAAS,OAC9D,EAAK,SAAS,KAAK,OAAuB,MAAM,EAClD,EAAM,eAAe,EACrB,UACG,aACH,KAAK,OAAS,EAAW,GAAK,EAAK,SAAS,OAC1C,EAAK,SAAS,KAAK,OAAuB,MAAM,EAClD,EAAM,eAAe,EACrB,UACG,IACH,KAAK,QAAQ,CAAK,EAClB,EAAM,eAAe,EACrB,oBAMF,OAAM,EAAc,CACtB,MAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,OAAO,CAAC,IAAQ,EAAI,aAAa,MAAM,CAAC,EAGpE,QAAU,CAAC,IAAuB,CAChC,IAAQ,QAAS,KAAK,MAChB,EAAS,EAAM,OACf,EAAe,EAAO,QAAQ,cAAc,IAAM,KAClD,EAAM,EAAO,QAAQ,aAAa,EAClC,EAAW,CAAC,GAAG,EAAK,QAAQ,EAAE,QAAQ,CAAG,EAC/C,GAAI,EAAc,CAChB,IAAM,EAAO,KAAK,OAAO,GACzB,GAAI,CAAC,KAAK,gBAAkB,KAAK,eAAe,CAAI,IAAM,GACxD,KAAK,cAAc,KAAK,OAAO,EAAwB,EAGzD,QAAI,EAAW,GACb,KAAK,MAAQ,GAKnB,UAAY,IAAY,CACtB,IAAQ,QAAS,KAAK,MAChB,EAAY,CAAC,GAAG,KAAK,QAAQ,EAAE,OACnC,CAAC,IAAU,CAAC,EAAM,aAAa,MAAM,GAAK,EAAM,aAAa,MAAM,CACrE,EAEA,GADA,EAAK,YAAc,GACf,KAAK,OAAS,EAAU,OAC1B,KAAK,MAAQ,EAAU,OAAS,EAElC,QAAW,KAAS,EAAW,CAC7B,IAAM,EAAU,EAAU,GACpB,EAAS,GAAG,KAAK,cAAc,IACrC,EAAQ,GAAK,EACb,IAAM,EAAM,KAAK,QAAQ,KAAM,EAAS,CAAM,EAC9C,EAAK,OAAO,CAAG,IAInB,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EACxB,IAAQ,QAAS,KAAK,MACtB,EAAK,iBAAiB,QAAS,KAAK,OAAO,EAC3C,EAAK,iBAAiB,UAAW,KAAK,MAAM,EAC5C,KAAK,UAAU,EACf,GAAc,aAAa,IAAI,IAAI,EAGrC,oBAAoB,EAAS,CAC3B,MAAM,qBAAqB,EAC3B,GAAc,aAAa,OAAO,IAAI,EAGxC,cAAgB,IAAM,CACpB,KAAK,YAAY,GAGnB,YAAY,EAAS,CACnB,KAAK,YAAY,EAGnB,MAAM,EAAS,CACb,IAAQ,OAAM,YAAa,KAAK,MAC1B,EAAY,KAAK,OACvB,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,IAAK,CACzC,IAAM,EAAU,EAAU,GACpB,EAAM,EAAK,SAAS,GACpB,EAAa,KAAK,QAAU,OAAO,CAAC,EAG1C,GAFA,EAAI,gBAAgB,gBAAiB,CAAU,EAC/C,EAAQ,gBAAgB,SAAU,CAAC,CAAU,EACzC,EACF,EAAS,MAAO,WAAa,GAAG,EAAI,WAAa,EAAK,eACtD,EAAS,MAAO,MAAQ,GAAG,EAAI,iBAIvC,CAKO,IAAM,GAA+B,GAE/B,GAAW,GAAS,eAAe,EAGnC,GAAc,GAGd,GAAU,GClSvB,IAAQ,OAAK,WAAW,EAYlB,GAAY,CAChB,MAAO,MACP,KAAM,SACN,KAAM,YACN,IAAK,OACL,QAAS,QACT,SAAU,WACZ,EAIO,MAAM,WAAyB,CAAU,OACvC,kBAAmB,0BACX,iBAER,iBAAkB,CACvB,QAAS,CACP,qBAAsB,EACtB,mBAAoB,IACpB,qBAAsB,GAAG,EAAK,uBAAuB,EAAK,yBAAyB,EAAK,uBAAuB,EAAK,yBACpH,gBAAiB,UACjB,yBAA0B,OAC1B,uBAAwB,OACxB,sBAAuB,EAAK,uBAC5B,wBAAyB,GACzB,yBAA0B,UAC1B,0BAA2B,EAAK,sBAChC,SAAU,QACV,KAAM,EACN,MAAO,EACP,OAAQ,EACR,cAAe,EAAK,oBACpB,MAAO,EAAK,kBACZ,QAAS,OACT,cAAe,iBACf,OAAQ,SACR,IAAK,EAAK,oBACV,UAAW,OACX,SAAU,cACV,UAAW,kBACX,MAAO,EAAK,qBACd,EACA,cAAe,CACb,QAAS,OACT,WAAY,EAAK,eACjB,QAAS,EAAK,oBACd,oBAAqB,GAAG,EAAK,4BAA4B,EAAK,yBAC9D,IAAK,EAAK,oBACV,WAAY,SACZ,aAAc,EAAK,yBACnB,UAAW,oCAAoC,EAAK,0BACpD,YAAa,EAAK,wBAClB,YAAa,EAAK,wBAClB,YAAa,QACb,WAAY,eACZ,mBAAoB,kBACpB,OAAQ,CACV,EACA,qBAAsB,CACpB,QAAS,OACT,WAAY,EAAK,uBACjB,QAAS,EACT,OAAQ,EACR,OAAQ,EAAK,uBACb,MAAO,EAAK,uBACZ,WAAY,cACZ,WAAY,SACZ,eAAgB,SAChB,UAAW,OACX,OAAQ,OACR,SAAU,UACZ,EACA,+BAAgC,CAC9B,OAAQ,EAAK,uBACf,EACA,gCAAiC,CAC/B,aAAc,GACd,OAAQ,EAAK,eACb,WAAY,EAAK,wBACjB,QAAS,EAAK,SAChB,EACA,kBAAmB,CACjB,OAAQ,EAAK,qBACb,MAAO,EAAK,qBACZ,cAAe,OACf,MAAO,EAAK,uBACd,EACA,iBAAkB,CAChB,QAAS,OACT,cAAe,SACf,WAAY,SACZ,IAAK,EAAK,mBACZ,EACA,sBAAuB,CACrB,QAAS,EACT,OAAQ,CACV,CACF,QAEO,WAAU,CAAC,EAAyB,CACzC,EAAK,UAAU,IAAI,SAAS,EAC5B,EAAK,MAAM,aAAe,CAAC,EAAK,aAAe,KAC/C,IAAM,EAAS,IAAM,CACnB,EAAK,OAAO,GAEd,EAAK,iBAAiB,gBAAiB,CAAM,EAC7C,WAAW,EAAQ,IAAI,QAGlB,KAAI,CAAC,EAA2C,CACrD,IAAQ,UAAS,WAAU,OAAM,QAAO,WAAU,OAAM,SACtD,OAAO,OACL,CAAE,KAAM,OAAQ,SAAU,EAAG,EAC7B,OAAO,IAAS,SAAW,CAAE,QAAS,CAAK,EAAI,CACjD,EAEF,GAAI,CAAC,KAAK,UACR,KAAK,UAAY,GAAiB,EAGpC,IAAM,EAAY,KAAK,UAEvB,SAAS,KAAK,OAAO,CAAS,EAC9B,EAAU,MAAM,OAAS,OAAO,GAAa,EAAI,CAAC,EAElD,IAAM,EAA2B,GAAS,GAAU,GAC9C,EACJ,GAAY,IAAS,WAAa,EAAS,SAAS,EAAI,CAAC,EACrD,EAAgB,IAAM,CAC1B,GAAI,EACF,EAAM,EAER,GAAiB,WAAW,CAAI,GAE5B,EACJ,aAAgB,WAAa,EAAO,EAAO,EAAM,GAAM,EAAI,EAAM,KAAK,EAElE,EAAW,IAAS,SAAW,IAAS,OACxC,EAAO,GACX,CACE,MAAO,QAAQ,IACf,KAAM,EAAW,QAAU,SAC3B,SAAU,EAAW,YAAc,SACnC,MAAO,CACL,0BACF,CACF,EACA,EACA,GAAI,CAAE,MAAO,SAAU,EAAG,GAAI,CAAO,EAAG,CAAW,EACnD,GACE,CACE,MAAO,QACP,MAAO,QACP,UAAW,qBAEX,KAAK,CAAC,EAAK,CACT,EAAI,iBAAiB,QAAS,CAAa,EAE/C,EACA,EAAM,EAAE,CACV,CACF,EAIA,GAFA,EAAU,WAAY,OAAO,CAAI,EAG/B,aAAuB,qBACvB,aAAoB,SACpB,CACA,EAAY,aAAa,MAAO,OAAO,GAAG,CAAC,EAC3C,EAAY,MAAQ,EAAS,EAC7B,IAAM,EAAW,YAAY,IAAM,CACjC,GAAI,CAAC,EAAU,WAAY,SAAS,CAAI,EAAG,CACzC,cAAc,CAAQ,EACtB,OAEF,IAAM,EAAa,EAAS,EAE5B,GADA,EAAY,MAAQ,EAChB,GAAc,IAChB,GAAiB,WAAW,CAAI,GAEjC,IAAI,EAGT,GAAI,EAAW,EACb,WAAW,IAAM,CACf,GAAiB,WAAW,CAAI,GAC/B,EAAW,IAAI,EAKpB,OAFA,EAAK,eAAe,EAEb,EAGT,QAAU,IACZ,CAKO,IAAM,GAA2C,GAE3C,GAAmB,GAAiB,eAAe,EAGnD,GAAkB,GAExB,SAAS,EAAgB,CAAC,EAA2C,CAC1E,OAAO,GAAiB,KAAK,CAAI,EC/W5B,IAAM,IAAiB,SAAY,IAEvC,YAQI,SAAS,EAAc,CAAC,EAAqB,CAClD,OAAO,EAAI,QAAQ,kBAAmB,EAAE,EAiB1C,SAAS,EAAiB,CAAC,EAAuB,CAChD,OAAO,EACJ,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,CACV,IAAM,EAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,EAChD,OAAO,EAAK,GAAG,EAAG,OAAO,EAAG,KAAO,EAAE,KAAK,EAC3C,EACA,OAAO,OAAO,EACd,KAAK,IAAI,EAUd,SAAS,EAA2B,CAAC,EAAc,EAAwB,CACzE,IAAM,EAAS,CAAC,IACd,mBAAmB,KAAK,CAAI,EAAI,EAAO,EAAS,EAClD,OACE,EAGG,QACC,yDACA,CAAC,EAAO,EAAgB,EAAW,IAAiB,CAClD,IAAM,EAAM,gBAAgB,IAAI,EAAO,CAAI,IAAI,KACzC,EAAI,EAAO,KAAK,EAClB,EACJ,GAAK,EAAI,EAAE,MAAM,eAAe,EAC9B,MAAO,WAAW,GAAkB,EAAE,EAAE,SAAS,IACnD,GAAK,EAAI,EAAE,MAAM,mBAAmB,EAAI,MAAO,SAAS,EAAE,QAAQ,IAClE,GAAK,EAAI,EAAE,MAAM,SAAS,EACxB,MAAO,SAAS,EAAE,SAAS,aAC7B,GAAK,EAAI,EAAE,MAAM,2BAA2B,EAC1C,MAAO,oBAAoB,EAAE,OAAO,GAAkB,EAAE,EAAE,SAAS,IACrE,OAAO,EAEX,EAEC,QACC,qCACA,CAAC,EAAI,EAAW,IAAiB,gBAAgB,IAAI,EAAO,CAAI,IAAI,IACtE,EAKN,SAAS,EAAc,EAAuB,CAC5C,OACE,WACA,wBAAwB,OAGrB,SAAS,EAAc,CAC5B,EACA,EAIA,EAAmC,GAAe,EAC1C,CACR,IAAI,EAAS,EACb,QAAW,KAAc,EAAa,CACpC,IAAM,EAAK,GAAe,CAAU,EAC9B,EAAI,EAAW,QAAQ,sBAAuB,MAAM,EAE1D,EAAS,EAAO,QACd,IAAI,OAAO,uCAAuC,KAAM,GAAG,EAC3D,CAAC,EAAG,IACF,WAAW,EAAM,QAAQ,OAAQ,GAAG,EAAE,KAAK,SAAS,GACxD,EAEA,EAAS,EAAO,QACd,IAAI,OAAO,6CAA6C,KAAM,GAAG,EACjE,CAAC,EAAG,IAAiB,SAAS,OAAU,GAC1C,EAEA,EAAS,EAAO,QACd,IAAI,OAAO,gCAAgC,KAAM,GAAG,EACpD,CAAC,EAAG,IAAiB,SAAS,OAAU,GAC1C,EAGF,GAAI,EACF,EAAS,GAA4B,EAAQ,CAAY,EAG3D,IAAM,EAAW,EAAO,MAAM,8BAA8B,EAC5D,GAAI,EACF,MAAU,MACR,sCAAsC,EAAS,GAAG,KAAK,iBACrD,6BAA6B,EAAY,KAAK,IAAI,2DAEjD,EACG,wDACA,qDACR,EAEF,OAAO,EAMT,eAAsB,EAAW,CAC/B,EACA,EACA,EACe,CACf,IAAM,EAAgB,GAAe,EAAM,OAAO,KAAK,CAAO,CAAC,EACzD,GACJ,MAAM,EAAU,EAAe,CAC7B,WAAY,CAAC,YAAY,CAC3B,CAAC,GACD,KAEI,EAAc,OAAO,KAAK,CAAO,EAAE,IAAI,EAAc,EACrD,EAAgB,OAAO,OAAO,CAAO,EAI3C,MADa,IAAI,GAAc,GAAG,EAAa,CAAe,EACnD,GAAG,CAAa,EAwB7B,IAAM,GAAc,SAUpB,SAAS,EAAU,CAAC,EAAwB,CAC1C,IAAM,EAAa,WAChB,iBACH,MAAO,CACL,GAAI,OAAO,IAAc,SAAW,CAAC,GAAG,IAAY,GAAM,EAAI,CAAC,EAC/D,yCAAyC,WAAoB,IAC7D,8BAA8B,WAAoB,IAClD,2BAA2B,WAAoB,GACjD,EAIF,eAAe,EAAoB,CAAC,EAAqC,CACvE,QAAW,KAAO,EAChB,GAAI,CAEF,IAAM,EAAI,MAA0D,UACpE,GAAI,EAAG,OAAO,EACd,KAAM,EAIV,OAAO,KAGT,eAAe,EAAO,EAA0B,CAG9C,GAAI,CACF,IAAQ,OAAS,KAAa,4BAC9B,GAAI,OAAO,IAAQ,WAAY,OAAO,EACtC,KAAM,EAGR,IAAM,EAAI,MAAM,GAAqB,GAAW,gBAAgB,CAAC,EACjE,GAAI,GAAK,OAAO,EAAE,MAAQ,WAAY,OAAO,EAAE,IAC/C,OAAO,KAyBT,IAAI,GAEJ,eAAe,EAAkB,EAA+B,CAC9D,IAAM,EAAqC,CACzC,IAAa,2BACb,IAAM,GAAqB,GAAW,gBAAgB,CAAC,CACzD,EACA,QAAW,KAAQ,EACjB,GAAI,CACF,IAAM,EAAK,MAAM,EAAK,EACtB,GACE,GACA,OAAO,EAAE,eAAiB,YAC1B,OAAO,EAAE,YAAc,SAEvB,MAAO,CAAE,aAAc,EAAE,aAAc,UAAW,EAAE,SAAU,EAEhE,KAAM,EAIV,OAAO,KAIF,SAAS,EAAc,EAA+B,CAC3D,OAAQ,KAAgB,GAAmB,EAK7C,eAAe,EAAU,EAA6B,CACpD,GAAI,CACF,IAAQ,UAAY,KAAa,oCAGjC,GAAI,OAAO,IAAW,WAAY,OAAO,EACzC,KAAM,EAGR,IAAM,EAAI,MAAM,GAAqB,GAAW,wBAAwB,CAAC,EACzE,GAAI,GAAK,OAAO,EAAE,SAAW,WAAY,OAAO,EAAE,OAClD,OAAO,KAOT,IAAI,GACA,GAgBE,GAAmB,IACnB,GAAc,IAAI,IAClB,GAAc,CAAC,EAAa,IAA6B,CAC7D,GAAI,GAAY,MAAQ,GAAkB,CAExC,IAAM,EAAS,GAAY,KAAK,EAAE,KAAK,EAAE,MACzC,GAAI,IAAW,OAAW,GAAY,OAAO,CAAM,EAErD,GAAY,IAAI,EAAK,CAAM,GAEzB,GAAc,GACd,GAAiB,GAmBrB,eAAsB,EAAa,CACjC,EAAmB,KACG,CAMtB,GAAI,IAAY,KAAM,MAAO,CAAC,KAAU,CAAE,MAAK,GAC/C,IAAM,EAAM,MAAO,KAAY,GAAQ,GACvC,GAAI,CAAC,GAAO,CAAC,GACX,GAAc,GACd,QAAQ,KACN,gEACE,kFACJ,EAEF,IAAM,EAAS,IAAY,KAAO,MAAO,KAAe,GAAW,GAAK,KACxE,GAAI,IAAY,MAAQ,CAAC,GAAU,CAAC,GAClC,GAAiB,GACjB,QAAQ,KACN,+EACF,EAEF,MAAO,CAAC,IAAS,CACf,IAAM,EAAW,GAAG,QAAY,IAC1B,EAAS,GAAY,IAAI,CAAQ,EACvC,GAAI,EAAQ,OAAO,EAGnB,GAAI,CAAC,EAAK,CACR,IAAM,EAAS,CAAE,MAAK,EAEtB,OADA,GAAY,EAAU,CAAM,EACrB,EAET,GAAI,IAAY,KAEd,OAAQ,SAAY,CAClB,IAAM,EAAY,GACb,MAAM,EAAO,EAAM,CAAE,QAAS,EAAK,CAAC,GAAG,KACxC,EACE,EAAS,CACb,KAAM,EAAI,EAAW,CAAE,QAAS,MAAO,SAAU,EAAM,CAAC,EAAE,IAC5D,EAEA,OADA,GAAY,EAAU,CAAM,EACrB,IACN,EAEL,IAAM,EAAS,CAAE,KAAM,EAAI,EAAM,CAAE,UAAS,SAAU,EAAM,CAAC,EAAE,IAAK,EAEpE,OADA,GAAY,EAAU,CAAM,EACrB,GCzYJ,IAAM,GAAc,uBAEpB,SAAS,EAAe,CAC7B,EACA,EACA,EACQ,CACR,OAAO,IAAa,GAAK,GAAG,KAAU,IAAa,GAAG,KAAU,IAG3D,SAAS,EAAW,CAAC,EAAoB,EAA8B,CAC5E,GAAI,CACF,aAAa,QAAQ,EAAY,KAAK,UAAU,CAAO,CAAC,EACxD,MAAO,EAAG,CACV,QAAQ,KAAK,gDAAiD,CAAC,GAI5D,SAAS,EAAY,CAAC,EAA2C,CACtE,GAAI,IAAS,KAAM,OAAO,KAC1B,GAAI,CACF,OAAO,KAAK,MAAM,CAAI,EACtB,KAAM,CACN,OAAO,MAIJ,SAAS,EAAgB,CAC9B,EACA,EACA,EACA,EACA,EAGA,EAKM,CACN,IAAM,EAAS,IAAI,gBAAgB,EAAG,GAAS,CAAK,CAAC,EACrD,GAAI,GAAM,YAAc,EAAK,SAAW,KACtC,EAAO,IAAI,KAAM,EAAK,UAAU,EAChC,EAAO,IAAI,MAAO,EAAK,OAAO,EAEhC,IAAM,EAAO,SAAS,KAAK,MAAM,GAAG,EAAE,GAAK,IAAM,EAAO,SAAS,EACjE,GAAY,EAAY,CACtB,YACA,OAAQ,KAAK,IAAI,KACd,EACH,SAAU,GAAM,QAClB,CAAC,EACD,OAAO,KAAK,CAAI,EAclB,IAAM,GAAsB,OAAO,iBAAqB,IAYjD,MAAM,EAAkB,CACrB,WACA,UACA,WAAa,EACb,SACA,QACA,UAAY,GACZ,UAER,WAAW,CACT,EACA,EACA,EACA,CACA,KAAK,WAAa,EAClB,KAAK,UAAY,EACjB,KAAK,UAAY,EAGX,cAAgB,CAAC,IAA2B,CAClD,GAAI,EAAQ,QAAU,KAAK,WAAY,OACvC,GAAI,EAAQ,YAAc,KAAK,UAAW,OAE1C,KAAK,WAAa,EAAQ,OAC1B,KAAK,UAAU,CAAO,GAIhB,cAAgB,CAAC,IAAwB,CAC/C,IAAM,EAAU,EAAM,KACtB,GAAI,EAAS,KAAK,cAAc,CAAO,GAIjC,WAAa,IAAM,CACzB,IAAI,EACJ,GAAI,CACF,EAAO,aAAa,QAAQ,KAAK,UAAU,EAC3C,KAAM,CACN,OAGF,IAAM,EAAU,GAAa,CAAI,EACjC,GAAI,EAAS,KAAK,cAAc,CAAO,GAGzC,cAAc,EAAS,CACrB,GAAI,KAAK,UAAW,OAGpB,GAFA,KAAK,UAAY,GAEb,GACF,KAAK,QAAU,IAAI,iBAAiB,KAAK,UAAU,EACnD,KAAK,QAAQ,UAAY,KAAK,cAMhC,KAAK,SAAW,YAAY,KAAK,WAAY,GAAG,EAGlD,aAAa,EAAS,CACpB,GAAI,CAAC,KAAK,UAAW,OAGrB,GAFA,KAAK,UAAY,GAEb,KAAK,QACP,KAAK,QAAQ,MAAM,EACnB,KAAK,QAAU,OAGjB,GAAI,KAAK,SACP,cAAc,KAAK,QAAQ,EAC3B,KAAK,SAAW,OAIpB,IAAI,CAAC,EAAsE,CACzE,IAAM,EAAyB,CAC7B,UAAW,KAAK,UAChB,OAAQ,KAAK,IAAI,KACd,CACL,EAMA,GAHA,GAAY,KAAK,WAAY,CAAO,EAGhC,KAAK,QACP,KAAK,QAAQ,YAAY,CAAO,EAIpC,SAAS,EAAS,CAChB,IAAM,EAAyB,CAC7B,UAAW,KAAK,UAChB,OAAQ,KAAK,IAAI,EACjB,IAAK,GACL,KAAM,GACN,GAAI,GACJ,MAAO,EACT,EAIA,GAFA,GAAY,KAAK,WAAY,CAAO,EAEhC,KAAK,QACP,KAAK,QAAQ,YAAY,CAAO,EAGtC,CCvLA,IAAM,GAAoB,sBAElB,QAAQ,EAUT,SAAS,EAA0B,CACxC,EACA,EACM,CACN,IAAM,EAAuB,EAAa,eAC1C,GAAI,CAAC,EAAsB,OAE3B,IAAM,EAAW,CAAC,IAAoB,CACpC,GAAI,CAAC,GAAW,EAAqB,IAAI,CAAO,EAAG,OACnD,IAAM,EAAiB,eAAe,IAAI,CAAO,EACjD,GAAI,EACF,GAAI,CACF,EAAqB,OAAO,EAAS,CAAc,EACnD,KAAM,IAOZ,QAAW,KAAO,OAAO,OAAO,CAAO,EACrC,GAAI,GAAO,OAAO,IAAQ,UACxB,QAAW,KAAW,OAAO,OAAO,CAA8B,EAChE,GAAI,OAAO,IAAY,YAAc,YAAa,EAChD,EAAU,EAAgC,OAAO,EAOzD,IAAM,EAAY,EAAa,SAC/B,GAAI,EAAW,CACb,IAAM,EAAc,EAAU,iBAAiB,GAAG,EAClD,QAAW,KAAM,EAAa,CAC5B,IAAM,EAAM,EAAG,QAAQ,YAAY,EACnC,GAAI,EAAI,SAAS,GAAG,EAClB,EAAS,CAAG,IAuCpB,eAAsB,EAAgB,CACpC,EACA,EACkE,CAClE,GAAI,CAAC,EAAS,MAAO,CAAE,KAAM,EAAiB,aAAc,CAAC,CAAE,EAQ/D,IAAI,EACJ,GAAI,EACA,CAAE,sBAAqB,EAAI,KAAa,sCAC1C,KAAM,CACN,MAAO,CAAE,KAAM,EAAiB,aAAc,CAAC,CAAE,EAEnD,IAAM,EAAW,EAAqB,EAAiB,EAAiB,EACxE,GAAI,CAAC,EAAU,MAAO,CAAE,KAAM,EAAiB,aAAc,CAAC,CAAE,EAChE,MAAO,CACL,KAAM,EAAkB,EACxB,aAAc,EAAG,IAAoB,CAAQ,CAC/C,EAMF,eAAsB,EAAa,CACjC,EAKsB,CACtB,IACE,OACA,MACA,KACA,UACA,YACA,aACA,iBACA,eACA,iBACA,UACA,WACE,EAEE,EAAU,GAAI,CAAE,MAAO,SAAU,CAAC,EACxC,EAAQ,UAAY,EACpB,EAAa,UAAY,EAEzB,IAAM,EAAa,EAAe,cAAc,UAAU,EAC1D,GAAI,EACF,EAAW,YAAY,CAAO,EAE9B,OAAe,aAAa,EAAS,CAAc,EAGrD,GAAI,CACF,IAAM,EACJ,IAEE,MAAM,EAAW,GAAe,EAAI,OAAO,KAAK,CAAO,CAAC,EAAG,CACzD,WAAY,CAAC,YAAY,CAC3B,CAAC,GACD,MAEI,KAAM,EAAW,gBAAiB,MAAM,GAC9C,EACA,CACF,EACM,EAAc,CAAE,aAAY,KAAY,CAAa,EAErD,EAAc,OAAO,KAAK,CAAW,EAAE,IAAI,EAAc,EACzD,EAAgB,OAAO,OAAO,CAAW,EAI/C,MADa,IAAI,GAAc,GAAG,EAAa,CAAS,EAC7C,GAAG,CAAa,EAC3B,MAAO,EAAG,CAKV,GAJA,QAAQ,MAAM,CAAC,EACf,EAAQ,OACN,GAAI,CAAE,MAAO,eAAgB,EAAG,OAAQ,EAAY,SAAW,CAAC,CAAC,CACnE,EACI,EAAS,EAAQ,CAAU,EAC1B,YAAO,MAAM,UAAU,2CAA0C,EAGxE,OAAO,EAMT,eAAsB,EAAe,CACnC,EAI6B,CAC7B,IACE,OACA,MACA,KACA,UACA,YACA,aACA,iBACA,iBACA,UACA,WACE,EAGA,EAAS,EAAe,cAC1B,uBACF,EAEA,GAAI,CAAC,EAAQ,CACX,EAAS,SAAS,cAAc,QAAQ,EACxC,EAAO,UAAY,iBACnB,EAAO,MAAM,QAAU,2CACvB,IAAM,EAAa,EAAe,cAAc,UAAU,EAC1D,GAAI,EACF,EAAW,YAAY,CAAM,EAE7B,OAAe,aAAa,EAAQ,CAAc,EAItD,IAAM,EAAY,EAAO,gBACzB,GAAI,CAAC,EAEH,OADA,QAAQ,MAAM,kCAAkC,EACzC,KAGT,IAAM,EAAe,EAAO,cAM5B,GAAI,EAAQ,OACV,EAAa,OAAS,EAAQ,OAEhC,GAAI,EAAQ,aACV,EAAa,SAAW,EAAQ,aAIlC,EAAU,KAAK,EACf,EAAU,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ;AAAA;AAAA;AAAA;AAAA,yBAImB;AAAA;AAAA,QAEjB,EACN,EAAU,MAAM,EAGhB,GAA2B,EAAc,CAAO,EAEhD,IAAM,EAAU,EAAU,cAAc,UAAU,EAClD,GAAI,CAAC,EAEH,OADA,QAAQ,MAAM,0CAA0C,EACjD,KAGT,GAAI,CACF,IAAM,EACJ,IAEE,MAAM,EAAW,GAAe,EAAI,OAAO,KAAK,CAAO,CAAC,EAAG,CACzD,WAAY,CAAC,YAAY,CAC3B,CAAC,GACD,MAEI,KAAM,EAAW,gBAAiB,MAAM,GAC9C,EACA,CACF,EAEM,EAAc,CAAE,aAAY,KAAY,CAAa,EAGrD,EACJ,EACA,KAAK,8BAA8B,EAE/B,EAAc,OAAO,KAAK,CAAW,EAAE,IAAI,EAAc,EACzD,GAAgB,OAAO,OAAO,CAAW,EAG/C,MADa,IAAI,EAAoB,GAAG,EAAa,CAAS,EACnD,GAAG,EAAa,EAC3B,MAAO,EAAG,CACV,QAAQ,MAAM,CAAC,EACf,IAAM,EAAW,EAAU,cAAc,KAAK,EAI9C,GAHA,EAAS,UAAY,gBACrB,EAAS,YAAc,OAAQ,EAAY,SAAW,CAAC,EACvD,EAAQ,OAAO,CAAQ,EACnB,EAAS,EAAQ,CAAU,EAC1B,YAAO,MAAM,UAAU,2CAA0C,EAGxE,OAAO,ECjST,SAAS,EAAoB,CAAC,EAAoC,CAChE,IAAI,EAAI,GAAI,oBAAsB,KAClC,MACE,GAAG,UAAY,UACf,EAAE,aAAa,MAAM,IAAM,8BAE3B,EAAI,EAAE,mBAER,OAAO,EAOT,SAAS,EAAe,CAAC,EAAoC,CAC3D,IAAM,EAAI,EAAM,mBAChB,GACE,GAAG,UAAY,UACf,EAAE,aAAa,MAAM,IAAM,8BAE3B,OAEF,GAAI,CACF,IAAM,EAAS,KAAK,MAAM,EAAE,aAAe,EAAE,EAC7C,OAAO,OAAO,IAAW,SAAW,EAAS,OAC7C,KAAM,CACN,QAOG,SAAS,EAAc,CAC5B,EACA,EACA,EACA,EAMA,EACM,CACN,IAAM,EAAyB,CAC7B,GAAG,EAAQ,iBACT,qFACF,CACF,EACG,OAAO,CAAC,IAAO,CAAC,EAAG,QAAQ,CAAkB,CAAC,EAC9C,IAAI,CAAC,KAAU,CACd,MAAO,EAAK,cACZ,SAAU,EAAK,UAAU,GAAG,MAAM,GAAG,EAAE,IAAI,EAC3C,KAAO,EAAqB,UAC5B,SAAU,GAAgB,EAAK,aAA+B,EAC9D,KACG,EAAK,cAA8B,aAClC,mBACF,GAAK,MACT,EAAE,EAIA,EAAU,EACd,QAAS,EAAQ,EAAG,EAAQ,EAAQ,OAAQ,GAAS,EAAG,CACtD,IAAM,EAAiB,CAAC,EAAQ,EAAM,EAGtC,MACE,EAAQ,EAAQ,OAAS,GACzB,GAAqB,EAAQ,GAAO,KAAK,IAAM,EAAQ,EAAQ,GAAG,MAElE,EAAe,KAAK,EAAQ,EAAQ,EAAE,EACtC,GAAS,EAGX,IAAM,EAAU,EAAmB,CAAE,SAAQ,CAAC,EAC9C,GAAI,IAAe,OACjB,EAAQ,aAAa,mBAAoB,CAAU,EACnD,EAAQ,aAAa,uBAAwB,OAAO,CAAO,CAAC,EAK9D,IAAM,EAAQ,EACX,IAAI,CAAC,IAAM,EAAE,IAAI,EACjB,OAAO,CAAC,IAAmB,CAAC,CAAC,CAAC,EACjC,GAAI,EAAM,OAAQ,CAChB,IAAM,EAAW,CAAC,GAAG,IAAI,IAAI,CAAK,CAAC,EACnC,GAAI,EAAS,OAAS,EACpB,QAAQ,MACN,gBAAgB,EAAU,IACxB,EAAa,KAAK,KAAgB,4BACV,EAAS,KACjC,IACF,0BAAyB,EAAM,MACjC,EAEF,EAAQ,aAAa,OAAQ,EAAM,EAAE,EAMvC,IAAM,EAAa,EAChB,IAAI,CAAC,IAAM,EAAE,MAAM,aAAa,iBAAiB,CAAC,EAClD,KAAK,CAAC,IAAmB,CAAC,CAAC,CAAC,EAC/B,EAAQ,GAAK,GAAc,WAAW,EAAU,IAChD,GAAW,EACI,EAAe,GAAG,MAAM,cAChC,aAAa,EAAS,EAAe,GAAG,KAAK,EAEpD,EAAe,QAAQ,CAAC,IAAW,CACjC,OAAQ,EAAO,cACR,SACA,UACA,KASH,GANA,EAAQ,GAAK,EAAO,KACpB,EAAQ,QAAU,EAAO,SAKrB,EAAO,WAAa,OACtB,EAAQ,WAAa,EAAO,SAC5B,EAAQ,iBAAmB,EAAO,KAEpC,UACG,OACH,EAAQ,KAAO,EAAO,KACtB,UACG,MACH,EAAQ,IAAM,EAAO,KACrB,UACG,OACH,EAAQ,KAAO,EAAO,KACtB,MAEJ,EAAO,MAAM,OAAO,EACrB,EAED,EAAQ,eAAe,EAGvB,EAAQ,4BAA4B,GCnJxC,IAAM,GAAe,IAAI,IAAI,CAAC,KAAM,MAAO,IAAI,CAAC,EAC1C,GAAa,IAAI,IAAI,CAAC,KAAM,MAAO,KAAM,OAAQ,MAAO,MAAM,CAAC,EAsB9D,SAAS,EAAgB,CAAC,EAA4B,CAC3D,IAAM,EAAK,sDACL,EAAwB,CAAC,EAC3B,EACJ,OAAQ,EAAI,EAAG,KAAK,CAAG,KAAO,KAAM,CAClC,IAAM,EAAY,EAAE,MAAQ,EAAE,GAAG,QAAQ;AAAA,CAAI,EAAI,EACjD,EAAO,KAAK,CACV,KAAM,EAAE,IAAM,GACd,OAAQ,EAAE,GACV,MAAO,EAAE,MACT,IAAK,EAAE,MAAQ,EAAE,GAAG,OACpB,YACA,QAAS,EAAY,EAAE,GAAG,MAC5B,CAAC,EAEH,OAAO,EAIT,SAAS,EAAQ,CAAC,EAAc,EAAwB,CACtD,GAAI,CAAC,EAAQ,OAAO,EACpB,OAAO,EACJ,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,IAAU,EAAO,EAAS,EAAO,CAAK,EAC3C,KAAK;AAAA,CAAI,EAId,SAAS,EAAQ,CAAC,EAAc,EAAwB,CACtD,GAAI,CAAC,EAAQ,OAAO,EACpB,OAAO,EACJ,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,IAAU,EAAK,WAAW,CAAM,EAAI,EAAK,MAAM,EAAO,MAAM,EAAI,CAAK,EAC1E,KAAK;AAAA,CAAI,EAIP,SAAS,EAAa,CAC3B,EACA,EACiB,CACjB,IAAM,EAA0B,CAAC,EAC7B,EAAgC,KACpC,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,GAAK,EAAG,CACzC,IAAM,EAAQ,EAAO,GACrB,GAAI,CAAC,GAAW,IAAI,EAAM,IAAI,EAAG,CAC/B,EAAU,KACV,SAEF,IAAM,EAAO,EAAO,EAAI,GAMxB,GAJE,IAAY,MACZ,IAAS,QACT,GAAW,IAAI,EAAK,IAAI,GACxB,EAAI,MAAM,EAAK,IAAK,EAAM,KAAK,EAAE,KAAK,IAAM,IAC9B,EACd,EAAQ,KAAK,CAAK,EAElB,OAAU,CAAC,CAAK,EAChB,EAAO,KAAK,CAAO,EAGvB,OAAO,EAcF,SAAS,EAAoB,CAClC,EACA,EACA,EACe,CACf,IAAM,EAAQ,GAAc,EAAK,GAAiB,CAAG,CAAC,EAAE,GACxD,GAAI,CAAC,EAAO,OAAO,KAMnB,IAAM,EAAU,CAAC,IAAsB,EAAE,QAAQ,OAAQ,EAAE,EACrD,EAA+D,CAAC,EAGhE,EAAW,CAAC,IAChB,IAAS,KACL,EAAM,KAAK,CAAC,IAAM,GAAa,IAAI,EAAE,IAAI,CAAC,EAC1C,EAAM,KAAK,CAAC,IAAM,EAAE,OAAS,CAAI,EACvC,QAAW,IAAQ,CAAC,KAAM,OAAQ,MAAO,MAAM,EAAY,CACzD,IAAM,EAAO,EAAM,GACnB,GAAI,IAAS,OAAW,SACxB,IAAM,EAAQ,EAAS,CAAI,EAC3B,GAAI,CAAC,EAAO,SAIZ,IAAM,EAAa,EAAI,MAAM,EAAM,UAAW,EAAM,OAAO,EAC3D,GAAI,EAAQ,GAAS,EAAY,EAAM,MAAM,CAAC,IAAM,EAAQ,CAAI,EAAG,SACnE,EAAa,KAAK,CAChB,MAAO,EAAM,UACb,IAAK,EAAM,QACX,KAAM,GAAS,EAAM,EAAM,MAAM,CACnC,CAAC,EAEH,GAAI,EAAa,SAAW,EAAG,OAAO,KAGtC,EAAa,KAAK,CAAC,EAAG,IAAM,EAAE,MAAQ,EAAE,KAAK,EAC7C,IAAI,EAAM,EACV,QAAW,KAAK,EACd,EAAM,EAAI,MAAM,EAAG,EAAE,KAAK,EAAI,EAAE,KAAO,EAAI,MAAM,EAAE,GAAG,EAExD,OAAO,EC3IF,SAAS,EAAc,CAC5B,EACA,EACQ,CACR,MAAO,qBAAY,KAAc,IAG5B,SAAS,EAAe,CAAC,EAAa,EAAyB,CACpE,GAAI,CACF,aAAa,QAAQ,EAAK,KAAK,UAAU,CAAI,CAAC,EAC9C,MAAO,EAAG,CACV,QAAQ,KAAK,6BAA8B,CAAC,GAIzC,SAAS,EAAe,CAAC,EAAiC,CAC/D,GAAI,CACF,IAAM,EAAM,aAAa,QAAQ,CAAG,EACpC,OAAO,EAAO,KAAK,MAAM,CAAG,EAAoB,KAChD,KAAM,CACN,OAAO,MAIJ,SAAS,EAAgB,CAAC,EAAmB,CAClD,GAAI,CACF,aAAa,WAAW,CAAG,EAC3B,KAAM,GAKH,SAAS,EAAc,CAAC,EAAsB,CACnD,GAAI,CACF,OAAO,aAAa,QAAQ,CAAG,IAAM,KACrC,KAAM,CACN,MAAO,IC1DJ,IAAM,GAAuB,CAClC,QAAS,CACP,wBAAyB,QACzB,wBAAyB,OACzB,2BAA4B,OAC5B,cAAe,QACf,iBAAkB,OAClB,SAAU,WACV,QAAS,OACT,OAAQ,6BACR,WAAY,oBACZ,UAAW,aAKX,aAAc,EAAK,UACnB,UAAW,wBACX,SAAU,QACZ,EAKA,gDAAiD,CAC/C,QAAS,wCACT,cAAe,MACf,aAAc,KAChB,EAEA,kBAAmB,CACjB,SAAU,QACV,KAAM,IACN,IAAK,IACL,OAAQ,QACR,MAAO,QACP,OAAQ,cACV,EAEA,aAAc,CACZ,OAAQ,GACV,EAEA,kBAAmB,CACjB,cAAe,QACjB,EAEA,0BAA2B,CACzB,WAAY,gBACZ,UAAW,iBACb,EAEA,oCAAqC,CACnC,UAAW,iBACb,EAEA,+EACE,CACE,QAAS,MACX,EAEF,yBAA0B,CACxB,KAAM,UACN,OAAQ,OACR,SAAU,WACV,UAAW,MACb,EAEA,iBAAkB,CAChB,OAAQ,OACR,SAAU,WACV,SAAU,SACV,UAAW,aAGX,QAAS,EAAK,OAChB,EAIA,gCAAiC,CAC/B,UAAW,GACb,EAEA,uBAAwB,CACtB,QAAS,WACT,OAAQ,MACR,WAAY,OACZ,MAAO,OACP,aAAc,MACd,SAAU,OACV,WAAY,wBACZ,WAAY,UACd,EAEA,yBAA0B,CACxB,KAAM,YACN,OAAQ,OACR,SAAU,UACZ,EAEA,gCAAiC,CAC/B,SAAU,WACV,KAAM,MACN,OAAQ,MACR,iBAAkB,qBAClB,aAAc,MACd,MAAO,OACP,OAAQ,OACR,WAAY,OACZ,OAAQ,KACV,EAEA,oCAAqC,CACnC,OAAQ,qBACV,EAEA,sBAAuB,CACrB,SAAU,SACV,WAAY,QACZ,SAAU,WACV,IAAK,IACL,MAAO,IACP,KAAM,UACN,OAAQ,OACR,cAAe,SACf,OAAQ,IACV,EAEA,oCAAqC,CACnC,QAAS,MACX,EAEA,2BAA4B,CAC1B,QAAS,MACT,OAAQ,IACR,UAAW,SACX,WAAY,6BACZ,MAAO,gCACP,OAAQ,MACV,EAEA,yCAA0C,CACxC,MAAO,OACP,OAAQ,OACR,WAAY,OACZ,UAAW,SACX,QAAS,IACT,OAAQ,GACV,EAEA,eAAgB,CACd,OAAQ,aACV,EAGA,+BAAgC,CAC9B,SAAU,WACV,IAAK,MACL,MAAO,MACP,MAAO,OACP,OAAQ,OACR,aAAc,MACd,WAAY,OACZ,OAAQ,MACR,QAAS,MACX,EAEA,0CAA2C,CACzC,QAAS,QACT,QAAS,yBACX,EAEA,6CAA8C,CAC5C,WAAY,OACZ,UAAW,sCACb,EAEA,4CAA6C,CAC3C,WAAY,OACZ,UAAW,gCACb,EAEA,4CAA6C,CAC3C,WAAY,OACZ,UAAW,oCACb,EAEA,wBAAyB,CACvB,WAAY,CAAE,QAAS,GAAI,EAC3B,MAAO,CAAE,QAAS,KAAM,CAC1B,EAEA,uBAAwB,CACtB,KAAM,CAAE,QAAS,GAAI,EACrB,MAAO,CAAE,QAAS,GAAI,EACtB,OAAQ,CAAE,QAAS,GAAI,CACzB,EAEA,6CAA8C,CAC5C,iBAAkB,MACpB,EAEA,6CAA8C,CAC5C,iBAAkB,MACpB,EAEA,6BAA8B,CAC5B,SAAU,WACV,OAAQ,OACR,KAAM,MACN,WAAY,mBACZ,aAAc,MACd,QAAS,MACT,SAAU,OACV,OAAQ,IACR,SAAU,QACV,UAAW,QACX,SAAU,OACV,OAAQ,KACV,EAEA,qCAAsC,CACpC,QAAS,MACX,EAEA,mBAAoB,CAClB,MAAO,MACT,EAEA,mBAAoB,CAClB,MAAO,MACT,EAGA,0BAA2B,CACzB,QAAS,WACT,SAAU,OACV,WAAY,8BACZ,SAAU,OACV,WAAY,KACd,EAEA,0BAA2B,CACzB,WAAY,OACZ,aAAc,KAChB,EAEA,wBAAyB,CACvB,QAAS,KACX,EAEA,wBAAyB,CACvB,QAAS,KACX,CACF,EClPA,MAAM,WAAuB,KAAM,CACjC,WAAW,CAAC,EAAiB,CAC3B,MAAM,CAAO,EACb,KAAK,KAAO,iBAEhB,CASA,IAAM,GAAe,wDAMrB,SAAS,EAAmB,CAAC,EAA6C,CACxE,GAAI,CAAC,EAAO,OAAO,KACnB,QAAW,KAAO,EAAM,MAAM;AAAA,CAAI,EAAG,CACnC,IAAM,EAAO,EAAI,KAAK,EACtB,GAAI,CAAC,EAAM,SAEX,GAAI,iBAAiB,KAAK,CAAI,EAAG,SACjC,IAAM,EAAQ,EAAK,MAAM,kCAAkC,EAC3D,GAAI,CAAC,EAAO,SACZ,KAAS,EAAK,EAAI,GAAO,EACzB,GAAI,GAAa,KAAK,CAAG,EAAG,SAC5B,MAAO,CAAE,MAAK,KAAM,OAAO,CAAE,EAAG,IAAK,OAAO,CAAG,CAAE,EAEnD,OAAO,KAKT,IAAI,GAAmC,KACvC,SAAS,EAAa,CAAC,EAAgC,CACrD,GAAI,CAAC,IAAqB,EAAU,EAAG,OAAO,KAE9C,OADc,GAAkB,MAAM;AAAA,CAAI,EAC7B,EAAU,IAAI,KAAK,GAAK,KAoBvC,SAAS,EAAS,CAAC,EAAY,EAAqB,CAClD,GAAI,IAAM,EAAG,MAAO,GACpB,GAAI,OAAO,IAAM,OAAO,EAAG,MAAO,GAClC,GAAI,IAAM,MAAQ,IAAM,KAAM,OAAO,IAAM,EAC3C,GAAI,OAAO,IAAM,SAAU,MAAO,GAElC,IAAM,EAAO,EACP,EAAO,EAEb,GAAI,MAAM,QAAQ,CAAI,IAAM,MAAM,QAAQ,CAAI,EAAG,MAAO,GAExD,IAAM,EAAQ,OAAO,KAAK,CAAI,EACxB,EAAQ,OAAO,KAAK,CAAI,EAC9B,GAAI,EAAM,SAAW,EAAM,OAAQ,MAAO,GAE1C,OAAO,EAAM,MAAM,CAAC,IAAQ,GAAU,EAAK,GAAM,EAAK,EAAI,CAAC,EAItD,IAAM,GAAe,KAGtB,GAAW,CACf,SAAS,CAAC,EAAsB,CAC9B,GAAI,OAAO,EAAQ,IAAa,MAAO,YACvC,GAAI,IAAQ,KAAM,MAAO,OACzB,GAAI,OAAO,QAAY,KAAe,aAAe,QACnD,MAAO,IAAI,EAAI,QAAQ,YAAY,KAErC,GAAI,OAAO,KAAS,KAAe,aAAe,KAChD,MAAO,IAAI,EAAI,YAEjB,GAAI,CACF,OAAO,KAAK,UAAU,CAAG,EACzB,KAAM,CACN,OAAO,OAAO,CAAG,GAGvB,GAEQ,cAAc,GAEtB,SAAS,EAAc,CAAC,EAAgB,EAAU,GAAiB,CACjE,IAAM,EAAS,CAAC,EAAoB,IAAoB,CAEtD,GAAI,EADW,EAAU,CAAC,EAAY,GACzB,CACX,IAAM,EAAM,IAAI,GAAe,EAAU,QAAQ,IAAY,CAAO,EAC9D,EAAQ,GAAoB,EAAI,KAAK,EAC3C,GAAI,EAAO,CACT,IAAM,EAAM,GAAc,EAAM,IAAI,EAC9B,EAAM,QAAQ,EAAM,OAC1B,EAAI,QAAU,EACV,GAAG,EAAI,aAAa,MAAQ,KAC5B,GAAG,EAAI,YAAY,KAEzB,MAAM,IA6EV,MAzE2B,CACzB,IAAI,CAAC,EAAmB,CACtB,EACE,IAAU,EACV,YAAY,GAAU,CAAK,WAAW,GAAU,CAAQ,GAC1D,GAEF,OAAO,CAAC,EAAmB,CACzB,EACE,GAAU,EAAO,CAAQ,EACzB,YAAY,GAAU,CAAK,cAAc,GAAU,CAAQ,GAC7D,GAEF,UAAU,EAAG,CACX,EAAO,CAAC,CAAC,EAAO,YAAY,GAAU,CAAK,gBAAgB,GAE7D,SAAS,EAAG,CACV,EAAO,CAAC,EAAO,YAAY,GAAU,CAAK,eAAe,GAE3D,QAAQ,EAAG,CACT,EAAO,IAAU,KAAM,YAAY,GAAU,CAAK,cAAc,GAElE,aAAa,EAAG,CACd,EACE,IAAU,OACV,YAAY,GAAU,CAAK,mBAC7B,GAEF,WAAW,EAAG,CACZ,EAAO,IAAU,OAAW,YAAY,GAAU,CAAK,iBAAiB,GAE1E,SAAS,CAAC,EAAe,CACvB,GAAI,OAAO,IAAU,SACnB,EACE,EAAM,SAAS,CAAc,EAC7B,aAAa,kBAAsB,IACrC,EACK,QAAI,MAAM,QAAQ,CAAK,EAC5B,EACE,EAAM,SAAS,CAAI,EACnB,6BAA6B,GAAU,CAAI,GAC7C,EAEA,WAAM,IAAI,GAAe,oCAAoC,GAGjE,YAAY,CAAC,EAAgB,CAC3B,IAAM,EAAU,EAA6B,OAC7C,EAAO,IAAW,EAAQ,mBAAmB,WAAgB,GAAQ,GAEvE,OAAO,CAAC,EAAiB,CACvB,EACE,EAAQ,KAAK,CAAe,EAC5B,aAAa,eAAmB,GAClC,GAEF,eAAe,CAAC,EAAW,CACzB,EAAQ,EAAmB,EAAG,YAAY,wBAA4B,GAAG,GAE3E,YAAY,CAAC,EAAW,CACtB,EAAQ,EAAmB,EAAG,YAAY,qBAAyB,GAAG,GAExE,cAAc,CAAC,EAA0C,CACvD,EACE,aAAiB,EACjB,oCAAoC,EAAI,MAC1C,MAEE,IAAG,EAAG,CACR,OAAO,GAAe,EAAO,CAAC,CAAO,EAEzC,EAKK,SAAS,EAAM,CAAC,EAA0B,CAC/C,OAAO,GAAe,CAAK,EAMtB,SAAS,EAAM,CAAC,EAA2B,CAChD,OAAO,IAAI,QAAQ,CAAC,IAAY,WAAW,EAAS,CAAE,CAAC,EASlD,SAAS,EAAO,CACrB,EACA,EACA,EAAU,KACQ,CAClB,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,IAAM,EAAY,KAAK,IAAI,EAErB,EAAQ,IAAM,CAClB,IAAM,EAAU,EAAQ,cAAc,CAAQ,EAC9C,GAAI,EAAS,CACX,EAAQ,CAAO,EACf,OAGF,GAAI,KAAK,IAAI,EAAI,GAAa,EAAS,CACrC,EACM,MAAM,wBAAwB,YAAmB,KAAW,CAClE,EACA,OAGF,sBAAsB,CAAK,GAG7B,EAAM,EACP,EASH,SAAS,EAAc,CACrB,EACA,EACA,EACY,CACZ,OAAO,QAAQ,KAAK,CAClB,EACA,IAAI,QAAe,CAAC,EAAG,IACrB,WACE,IAAM,EAAW,MAAM,SAAS,sBAAyB,KAAM,CAAC,EAChE,CACF,CACF,CACF,CAAC,EAQI,SAAS,EAAiB,CAC/B,EACA,EAAU,GACkC,CAC5C,IAAI,EAAkB,GAChB,EAA2B,CAAC,EAElC,MAAO,CACL,UACA,UACA,IAAI,CAAC,EAAc,EAAgC,CACjD,IAAM,EAAW,EAAkB,GAAG,OAAqB,IAAS,EACpE,GAAI,CACF,IAAM,EAAS,EAAG,EAClB,GAAI,aAAkB,QAAS,CAC7B,IAAM,EAAU,GAAY,EAAQ,EAAS,CAAQ,EAClD,KAAK,IAAM,CACV,EAAQ,KAAK,CAAE,KAAM,EAAU,OAAQ,EAAK,CAAC,EAC9C,EACA,MAAM,CAAC,IAAe,CACrB,EAAQ,KAAK,CACX,KAAM,EACN,OAAQ,GACR,MAAO,EAAI,OACb,CAAC,EACF,EACH,EAAQ,KAAK,CAAO,EAEpB,OAAQ,KAAK,CAAE,KAAM,EAAU,OAAQ,EAAK,CAAC,EAE/C,MAAO,EAAK,CACZ,EAAQ,KAAK,CACX,KAAM,EACN,OAAQ,GACR,MAAQ,EAAc,OACxB,CAAC,IAGL,QAAQ,CAAC,EAAc,EAAgB,CACrC,IAAM,EAAmB,EACzB,EAAkB,EAAkB,GAAG,OAAqB,IAAS,EACrE,EAAG,EACH,EAAkB,EAEtB,EAMF,eAAsB,EAAQ,CAC5B,EACA,EACA,EACA,EACsB,CACtB,IAAM,EAAwB,CAAC,EACzB,EAAc,GAAkB,CAAO,EAEvC,EAAc,CAClB,aACG,EACH,OAAQ,EAAY,OACpB,KAAM,EAAY,KAClB,SAAU,EAAY,SACtB,UACA,QAAS,CAAC,EAAkB,IAC1B,GAAQ,EAAS,EAAU,CAAO,CACtC,EAEA,GAAI,CACF,IAAM,EAAO,GAAe,EAAU,OAAO,KAAK,CAAO,CAAC,EACpD,GACJ,MAAM,EAAU,EAAM,CAAE,WAAY,CAAC,YAAY,CAAE,CAAC,GACpD,KAEI,EAAc,OAAO,KAAK,CAAW,EAAE,IAAI,CAAC,IAChD,EAAI,QAAQ,KAAM,EAAE,CACtB,EACM,EAAgB,OAAO,OAAO,CAAW,EAMzC,EAAa,GAAG;AAAA,2BAKtB,GAAoB,EAIpB,MADa,IAAI,GAAc,GAAG,EAAa,CAAU,EAC9C,GAAG,CAAa,EAC3B,MAAO,EAAK,CAEZ,EAAQ,KAAK,CACX,KAAM,iBACN,OAAQ,GACR,MAAQ,EAAc,OACxB,CAAC,EAIH,GAAI,EAAY,QAAQ,OAAS,EAC/B,MAAM,QAAQ,IAAI,EAAY,OAAO,EAKvC,OAFA,GAAoB,KAEb,CACL,OAAQ,EAAQ,OAAO,CAAC,IAAM,EAAE,MAAM,EAAE,OACxC,OAAQ,EAAQ,OAAO,CAAC,IAAM,CAAC,EAAE,MAAM,EAAE,OACzC,MAAO,CACT,ECqDF,IAAQ,OAAK,YAAU,SAAO,UAAQ,OAAK,SAAS,EAG9C,GAAoB,0BAEpB,GACJ,OAAO,OAAW,MACjB,OAAO,SAAS,WAAa,aAC5B,OAAO,SAAS,WAAa,aAEjC,SAAS,EAAqB,EAAY,CACxC,GAAI,OAAO,aAAiB,IAAa,MAAO,GAChD,IAAM,EAAS,aAAa,QAAQ,EAAiB,EACrD,GAAI,IAAW,KACb,OAAO,IAAW,OAGpB,OAAO,GAIF,IAAQ,gBAAgB,EAAK,CAClC,YAAa,CACX,QAAS,GAAsB,CACjC,CACF,CAAC,EAGD,SAAS,EAAuB,EAAG,CACjC,SAAS,KAAK,UAAU,OAAO,gBAAiB,GAAY,QAAQ,KAAK,EACzE,SAAS,KAAK,MAAM,YAClB,kBACA,GAAY,QAAQ,MAAQ,IAAM,GACpC,EAEF,GAAI,OAAO,SAAa,IAEtB,GAAI,SAAS,KACX,GAAwB,EAExB,cAAS,iBAAiB,mBAAoB,EAAuB,EAKlE,SAAS,EAAW,EAAS,CAClC,aAAa,QAAQ,GAAmB,MAAM,EAC9C,GAAY,QAAQ,MAAQ,GAC5B,GAAwB,EAExB,SAAS,iBAAiB,cAAc,EAAE,QAAQ,CAAC,IAAO,CACtD,EAAmB,QAAQ,EAC9B,EAII,SAAS,EAAY,EAAS,CACnC,aAAa,QAAQ,GAAmB,OAAO,EAC/C,GAAY,QAAQ,MAAQ,GAC5B,GAAwB,EAGnB,MAAM,WAAoB,CAAwB,OAChD,kBAAmB,qBACnB,gBAAiB,SAEjB,gBAAiB,CACtB,aAAc,GACd,OAAQ,GAKR,KAAM,EACR,KAGI,cAAa,EAAgC,CAC/C,IAAM,EAAI,KAAK,KACf,GAAI,IAAM,UAAY,IAAM,OAAS,IAAM,SAAU,OAAO,EAC5D,GAAI,EAAG,QAAQ,KAAK,iCAAiC,qBAAoB,EACzE,OAAO,KAAK,OAAS,SAAW,SAGlC,OAAS,KACT,WAAa,GACb,QAA0B,CAAC,EAGnB,cAAyC,CAAC,EAClD,KAAe,OAAO,WAAW,EACjC,SAAW,GAEH,WACA,aACA,YACA,cAAwC,CAAC,EACzC,sBAAwB,GACxB,oBAMA,aAAe,SAEhB,eAAc,CACnB,EACA,EAA0B,CAAC,EAC3B,EACM,CACN,GACE,EACA,EACA,GACA,GAAY,QACZ,CACF,KAGE,UAAS,EAAwB,CACnC,GAAI,CAAC,KAAK,aAAc,OACxB,IAAQ,WAAY,KAAK,MACzB,MAAO,CAAC,GAAG,EAAQ,QAAQ,EAAE,KAC3B,CAAC,IAAQ,EAAI,aAAa,QAAQ,IAAM,IAC1C,EAUM,cAAc,CAAC,EAAuB,CAG5C,GAAI,CAAC,KAAK,aAAc,OAAO,KAAK,cAAc,IAAU,GAC5D,OAAQ,KAAK,MAAM,GAAsB,MAGnC,cAAc,CAAC,EAAe,EAAoB,CACxD,GAAI,CAAC,KAAK,aAAc,CACtB,KAAK,cAAc,GAAS,EAC5B,OAEF,IAAM,EAAa,KAAK,MAAM,GAC9B,EAAW,MAAQ,EAGb,kBAAkB,EAAS,CACjC,QAAY,EAAO,KAAS,OAAO,QAAQ,KAAK,aAAa,EAAG,CAC9D,IAAM,EAAa,KAAK,MAAM,GAC9B,GAAI,EAAY,EAAW,MAAQ,EAIrC,GAFA,KAAK,cAAgB,CAAC,EAElB,KAAK,sBACP,KAAK,sBAAwB,GAC7B,KAAK,eAAe,KAIpB,IAAG,EAAW,CAChB,OAAO,KAAK,eAAe,KAAK,KAE9B,IAAG,CAAC,EAAc,CACpB,KAAK,eAAe,MAAO,CAAI,KAG7B,KAAI,EAAW,CACjB,OAAO,KAAK,eAAe,MAAM,KAE/B,KAAI,CAAC,EAAc,CACrB,KAAK,eAAe,OAAQ,CAAI,KAG9B,GAAE,EAAW,CACf,OAAO,KAAK,eAAe,IAAI,KAE7B,GAAE,CAAC,EAAc,CACnB,KAAK,eAAe,KAAM,CAAI,KAG5B,KAAI,EAAW,CACjB,OAAO,KAAK,eAAe,MAAM,KAE/B,KAAI,CAAC,EAAc,CACrB,KAAK,eAAe,OAAQ,CAAI,KAG9B,UAAS,EAAW,CACtB,OAAO,GAAgB,KAAK,OAAQ,KAAK,KAAM,KAAK,QAAQ,KAM1D,QAAO,EAAY,CACrB,OAAQ,KAAK,aAAa,cAAc,GAAiB,QAEvD,QAAO,CAAC,EAAgB,CAC1B,KAAK,aAAa,eAAgB,CAAK,EAWzC,WAKA,iBAOQ,YACA,aACA,iBAAmB,GACnB,gBAAkB,GAClB,mBAAqB,EACrB,kBAMM,kBAAiB,CAAC,EAAuC,CACrE,GAAI,KAAK,UAAY,KAAM,CACzB,KAAK,mBAAqB,EAC1B,OAEF,IAAM,EAAM,MAAM,GAAe,EACjC,GAAI,CAAC,EAAK,CACR,KAAK,mBAAqB,EAC1B,OAEF,IAAI,EACJ,GAAI,CACF,EAAY,EAAI,aAAa,KAAK,EAAE,EACpC,KAAM,CACN,KAAK,mBAAqB,EAC1B,OAGF,GADA,KAAK,mBAAqB,EAAU,MAAM,OACtC,EAAU,MAAM,SAAW,EAAG,CAChC,KAAK,aAAe,OACpB,KAAK,eAAe,EACpB,OAEF,GAAI,CAMF,IAAM,EAAO,IAJX,MAAM,EACJ,GAAe,EAAU,KAAM,OAAO,KAAK,KAAK,OAAO,CAAC,CAC1D,GACA;AAAA,EACyB,EAAI;AAAA,SAAqB,EAAU,aAIxD,EAAc,CAClB,QAAS,GAAI,CAAE,MAAO,SAAU,CAAC,KAC9B,KAAK,OACV,EACM,EAAO,OAAO,KAAK,CAAW,EAAE,IAAI,EAAc,EAClD,EAAS,OAAO,OAAO,CAAW,EAElC,EAAK,IAAI,GAAc,GAAG,EAAM,CAAI,EAC1C,KAAK,aAAgB,MAAM,EAAG,GAAG,CAAM,EACvC,MAAO,EAAO,CACd,KAAK,aAAe,CAClB,OAAQ,EACR,OAAQ,EACR,QAAS,CACP,CACE,YAAa,6BACb,OAAQ,GACR,MAAO,OAAO,CAAK,CACrB,CACF,CACF,EAEF,KAAK,eAAe,EAGd,cAAc,EAAS,CAC7B,IAAM,EAAO,KAAK,aAClB,GAAI,CAAC,EAAM,OACX,IAAM,EAAU,KAAK,aACrB,GAAI,CAAC,GAAW,EAAQ,QAAQ,SAAW,EAAG,CAC5C,EAAK,gBACH,GAAI,CAAE,MAAO,gBAAiB,EAAG,sBAAsB,CACzD,EACA,OAEF,EAAK,gBACH,GACE,CAAE,MAAO,kBAAmB,EAC5B,GAAG,EAAQ,UAAU,EAAQ,QAAQ,eACvC,EACA,GAAG,EAAQ,QAAQ,IAAI,CAAC,IACtB,GACE,CAAE,MAAO,EAAE,OAAS,YAAc,WAAY,EAC9C,GAAG,EAAE,OAAS,IAAK,OAAO,EAAE,cAC5B,EAAE,MAAQ,GAAK,CAAE,MAAO,gBAAiB,EAAG,MAAK,EAAE,OAAO,EAAI,EAChE,CACF,CACF,OAMY,mBAAkB,CAAC,EAAyC,CACxE,GAAI,KAAK,UAAY,KAAM,MAAO,GAClC,GAAI,CACF,OACE,MAAM,EAAU,GAAe,KAAK,GAAI,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,GAClE,KACF,MAAO,EAAO,CACd,MAAO;AAAA,KAA4B,EAAgB,WAI/C,iBAAiB,EAAS,CAChC,GACE,KAAK,kBACL,KAAK,UAAY,MACjB,CAAC,KAAK,UACN,CAAC,KAAK,aAEN,OACF,KAAK,iBAAmB,GACxB,IAAQ,WAAY,KAAK,MAsBzB,GAjBA,KAAK,MAAM,GAAG,aAAa,OAAQ,KAAK,OAAO,EAK/C,KAAK,MAAM,GAAG,gBAAkB,CAC9B,gBAAiB,IAAM,KAAK,aAAa,CAC3C,EACA,KAAK,MAAM,GAAG,KAAO,KAAK,QAC1B,KAAK,YAAc,GAAW,CAC5B,KAAM,KACN,KAAM,aACN,SAAU,EACZ,CAAC,EACD,EAAQ,OAAO,KAAK,WAAW,EAG3B,KAAK,mBAAqB,EAC5B,KAAK,aAAe,GAAI,CAAE,KAAM,YAAa,MAAO,kBAAmB,CAAC,EACxE,EAAQ,OAAO,KAAK,YAAY,EAElC,EAAQ,UAAU,EAClB,KAAK,YAAY,MAAQ,KAAK,gBAC9B,KAAK,eAAe,EAKd,aAAe,CAAC,IAAyC,CAC/D,KAAK,cAAgB,GAUf,YAAY,EAA4B,CAC9C,IAAM,EAAoC,CAAC,EAC3C,QAAY,EAAK,KAAU,OAAO,QAAQ,KAAK,OAAO,EACpD,EAAS,GAAe,CAAG,GAAK,EAElC,IAAM,EAAU,KAAK,MAAM,SAAS,cAAc,UAAU,EAC5D,GAAI,EAAS,EAAS,QAAU,EAGhC,OADA,OAAO,OAAO,EAAU,KAAK,aAAa,EACnC,EAGT,WAAa,IAAM,CAIjB,GAAI,KAAK,aAAc,CACrB,IAAQ,aAAc,MACd,OAAM,QAAS,KAAK,MAC5B,GAAI,aAAqB,GACvB,EAAK,SAAW,CAAC,EAAU,QAAQ,EACnC,EAAK,SAAW,CAAC,EAAU,QAAQ,EAEnC,OAAK,SAAW,GAChB,EAAK,SAAW,GAGpB,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,GAG3B,2BAA2B,EAAS,CAC1C,IAAQ,YAAa,GAAc,KAAK,MAClC,EAAU,KAAK,YAGf,EACJ,KAAK,cAAgB,KAAK,YAAc,KAAK,MAAM,KAC/C,EAAY,GAAW,EAAQ,OAAS,EAG9C,EAAU,OACR,CAAC,GAAW,EAAQ,MAAM,SAAW,GAAM,CAAC,GAAmB,CAAC,EAGpE,KAAO,IAAM,CACX,IAAQ,aAAc,KACtB,GAAI,aAAqB,GACvB,EAAU,KAAK,GAInB,KAAO,IAAM,CACX,IAAQ,aAAc,KACtB,GAAI,aAAqB,GACvB,EAAU,KAAK,MAIf,YAAW,EAAY,CACzB,OAAO,KAAK,UAAU,SAAS,WAAW,EAG5C,WAAa,IAAM,CACjB,KAAK,UAAU,OAAO,WAAW,GAMnC,aAAe,SAA2B,CACxC,IAAM,EAAa,KAAK,aAAa,kBAAkB,EACjD,EAAc,KAAK,aAAa,sBAAsB,EAC5D,GAAI,CAAC,GAAc,IAAgB,KAAM,CACvC,OAAO,MAAM,qCAAqC,EAClD,OAEF,IAAI,EACJ,GAAI,CACF,IAAM,EAAW,MAAM,MACrB,2BAA2B,mBAAmB,CAAU,GAC1D,EACA,GAAI,CAAC,EAAS,GAAI,MAAU,MAAM,OAAO,EAAS,MAAM,CAAC,EACzD,EAAU,MAAM,EAAS,KAAK,EAC9B,KAAM,CACN,OAAO,MACL,mEACF,EACA,OAEF,IAAM,EAAU,GAAqB,EAAS,OAAO,CAAW,EAAG,CACjE,GAAI,KAAK,GACT,KAAM,KAAK,KACX,IAAK,KAAK,IACV,KAAM,KAAK,IACb,CAAC,EACD,GAAI,IAAY,KAAM,CAMpB,IAAM,EAAU,OAAO,CAAW,EAC5B,EAAS,GAAc,EAAS,GAAiB,CAAO,CAAC,EAC/D,GAAI,GAAW,EAAO,OACpB,OAAO,MACL,mCAAmC,oBAE/B,EAAU,wDAET,EAAO,4DACV,oEACA,4CACJ,EAEA,YAAO,MAAM,qBAAqB,EAEpC,OAEF,GAAI,CACF,IAAM,EAAW,MAAM,MAAM,qBAAsB,CACjD,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CAAE,KAAM,EAAY,QAAS,CAAQ,CAAC,CAC7D,CAAC,EACD,GAAI,CAAC,EAAS,GAAI,MAAU,MAAM,OAAO,EAAS,MAAM,CAAC,EACzD,OAAO,MAAM,YAAY,GAAY,EACrC,KAAM,CACN,OAAO,MAAM,cAAc,IAI/B,YAAc,IAAM,CAClB,IAAM,EAAU,GAAY,QAAQ,MACpC,EAAQ,CACN,OAAQ,KAAK,MAAM,eACnB,MAAO,OACP,UAAW,CACT,CACE,KAAM,QACN,QAAS,iBACT,OAAQ,KAAK,QACf,EACA,CACE,KAAM,OACN,QAAS,iCACT,OAAQ,KAAK,gBACf,EACA,KACA,CACE,KAAM,KAAK,YAAc,WAAa,WACtC,QAAS,KAAK,YAAc,kBAAoB,mBAChD,OAAQ,KAAK,cACf,EACA,KACA,CACE,KAAM,EAAU,QAAU,GAC1B,QAAS,YACT,OAAQ,IAAM,CACZ,GAAI,EACF,GAAa,EAEb,QAAY,EAGlB,CACF,CACF,CAAC,GAGH,gBAAkB,CAAC,IAAyB,CAC1C,GAAI,EAAM,SAAW,EAAM,QAAS,CAClC,IAAI,EAAQ,GACZ,OAAQ,EAAM,SACP,QACA,IACH,KAAK,UAAU,EACf,EAAQ,GACR,UACG,IACH,KAAK,WAAW,EAChB,UACG,IACH,GAAI,EAAM,SACR,KAAK,KAAK,EACV,EAAQ,GAEV,MAEJ,GAAI,EACF,EAAM,eAAe,EACrB,EAAM,gBAAgB,IAK5B,QAAU,IAAM,CACd,GACE,CAAE,KAAM,SAAU,EAClB,GAAM,CAAE,KAAM,OAAQ,CAAC,EACvB,GAAI,CAAE,KAAM,gBAAiB,MAAO,aAAc,CAAC,EACnD,GAAI,CAAE,KAAM,cAAe,OAAQ,EAAK,CAAC,EACzC,GACE,CACE,MAAO,eACP,KAAM,iBACN,QAAS,KAAK,WAChB,EACA,EAAM,KAAK,CACb,CACF,EAIA,GAAI,CACF,MAAO,eACP,KAAM,cACN,UAAW,KAAK,gBAChB,OAAQ,EACV,CAAC,EACD,GAAS,CAAE,KAAM,UAAW,OAAQ,EAAK,CAAC,CAC5C,EAOQ,gBAAgB,EAAgB,CACtC,OAAO,GACL,CACE,KAAM,UACN,SAAU,KAAK,UACjB,EACA,GAAW,CAAE,KAAM,KAAM,KAAM,aAAc,KAAM,IAAK,CAAC,EACzD,GAAW,CAAE,KAAM,OAAQ,KAAM,OAAQ,KAAM,MAAO,CAAC,EACvD,GAAW,CAAE,KAAM,MAAO,KAAM,MAAO,KAAM,KAAM,CAAC,EAIpD,GAAW,CAAE,KAAM,YAAa,KAAM,aAAc,KAAM,MAAO,CAAC,EAClE,GACE,CAAE,KAAM,aAAc,MAAO,KAAM,EACnC,GACE,CACE,MAAO,OACP,KAAM,OACN,MAAO,cACP,QAAS,KAAK,IAChB,EACA,EAAM,aAAa,CACrB,EACA,GACE,CACE,MAAO,OACP,KAAM,OACN,MAAO,cACP,QAAS,KAAK,IAChB,EACA,EAAM,cAAc,CACtB,EACA,GACE,CACE,MAAO,8DACP,MAAO,0BACP,QAAS,KAAK,UAChB,EACA,EAAM,aAAa,CACrB,EACA,GACE,CACE,MAAO,aACP,MAAO,cACP,QAAS,KAAK,SAChB,EACA,EAAM,EAAE,CACV,CACF,CACF,EAKM,aAAa,EAAS,CAC5B,GAAI,KAAK,cAAgB,CAAC,KAAK,SAAU,OACzC,KAAK,MAAM,YAAY,OAAO,KAAK,iBAAiB,CAAC,EACrD,KAAK,aAAe,GAEpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,WAAW,EAGlB,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAMxB,IAAQ,WAAY,KAAK,MACzB,KAAK,iBAAiB,CAAC,GAAG,EAAQ,QAAQ,CAAkB,EAG5D,KAAK,WAAa,IAAI,GACpB,KAAK,WACL,KAAK,UACL,CAAC,IAAY,CACX,GAAI,EAAQ,MAAO,CACjB,GAAI,KAAK,WAAa,GAEpB,OAAO,MAAM,EAGb,UAAK,UAAU,OAAO,WAAW,EACjC,KAAK,MAAM,YAAY,OAAS,GAElC,OAKF,GAHA,KAAK,IAAM,EAAQ,IACnB,KAAK,KAAO,EAAQ,KACpB,KAAK,GAAK,EAAQ,GACd,EAAQ,KAAM,KAAK,KAAO,EAAQ,KAGtC,GAAI,KAAK,WAAa,IAAM,EAAQ,UAAY,CAAC,KAAK,aACpD,KAAK,aAAe,IAAK,EAAQ,QAAS,EAE5C,KAAK,QAAQ,EAEjB,EACA,KAAK,WAAW,eAAe,EAI/B,IAAM,EAAS,KAAK,OAAO,EAAI,IAC/B,KAAK,aAAe,YAAY,IAAM,CACpC,GAAI,CAAC,SAAS,OAAQ,KAAK,WAAW,GACrC,IAAM,CAAM,EAIf,KAAK,oBAAsB,IAAM,KAAK,YAAY,UAAU,EAC5D,iBAAiB,eAAgB,KAAK,mBAAmB,EAG3D,oBAAoB,EAAS,CAM3B,GALA,MAAM,qBAAqB,EAE3B,KAAK,YAAY,UAAU,EAC3B,KAAK,YAAY,cAAc,EAE3B,KAAK,aACP,cAAc,KAAK,YAAY,EAC/B,KAAK,aAAe,OAGtB,GAAI,KAAK,oBACP,oBAAoB,eAAgB,KAAK,mBAAmB,EAC5D,KAAK,oBAAsB,OAIvB,eAAe,EAAW,CAChC,IAAM,EAAQ,CAAC,EAAc,IAC3B,IAAS,GAAK,MAAQ,EAAO;AAAA,EAAO,EAAK,KAAK,EAAI,UAAY,GAChE,OACE,EAAM,KAAK,QAAS,KAAK,EAAE,EAC3B,EAAM,OAAQ,KAAK,IAAI,EACvB,EAAM,MAAO,KAAK,GAAG,EACrB,EAAM,OAAQ,KAAK,IAAI,EAI3B,KAAO,IAAM,CACX,UAAU,UAAU,UAAU,KAAK,gBAAgB,CAAC,GAGtD,gBAAkB,IAAM,CACtB,IAAM,EAAM,KAAK,aAAa,kBAAkB,GAAK,UAC/C,EAAM,KAAK,aAAa,sBAAsB,EAC9C,GACH,EAAI,MAAM,GAAG,EAAE,IAAI,GAAK,WAAW,QAAQ,SAAU,EAAE,GACvD,IAAQ,KAAO,YAAY,IAAQ,IACpC,MACI,EAAM,IAAI,gBACd,IAAI,KAAK,CAAC,KAAK,gBAAgB,CAAC,EAAG,CAAE,KAAM,eAAgB,CAAC,CAC9D,EACM,EAAO,SAAS,cAAc,GAAG,EACvC,EAAK,KAAO,EACZ,EAAK,SAAW,EAChB,EAAK,MAAM,EACX,WAAW,IAAM,IAAI,gBAAgB,CAAG,EAAG,IAAI,GAMzC,aAAmC,KAEnC,YAAY,EAAW,CAC7B,IAAM,EAAM,KAAK,aAAa,kBAAkB,EAC1C,EAAM,KAAK,aAAa,sBAAsB,EACpD,OAAO,GAAO,IAAQ,KAAO,GAAe,EAAK,CAAG,EAAI,GAGlD,SAAS,CAAC,EAAyB,CACzC,GAAI,EAAK,KAAO,OAAW,KAAK,GAAK,EAAK,GAC1C,GAAI,EAAK,OAAS,OAAW,KAAK,KAAO,EAAK,KAC9C,GAAI,EAAK,MAAQ,OAAW,KAAK,IAAM,EAAK,IAC5C,GAAI,EAAK,OAAS,OAAW,KAAK,KAAO,EAAK,KAI9C,GAAI,EAAK,aAAe,QAAa,EAAK,KAAO,OAC/C,KAAK,WAAa,EAAK,WACvB,KAAK,iBAAmB,EAAK,GAOjC,aAAa,EAAY,CACvB,GAAI,CAAC,KAAK,aAAc,MAAO,GAC/B,IAAM,EAAI,KAAK,aACT,EAAI,CAAC,KAAgB,GAAK,IAAI,QAAQ,OAAQ,EAAE,EACtD,OACE,EAAE,KAAK,EAAE,IAAM,EAAE,EAAE,EAAE,GACrB,EAAE,KAAK,IAAI,IAAM,EAAE,EAAE,IAAI,GACzB,EAAE,KAAK,GAAG,IAAM,EAAE,EAAE,GAAG,GACvB,EAAE,KAAK,IAAI,IAAM,EAAE,EAAE,IAAI,EAIrB,qBAAqB,EAAS,CACpC,KAAK,UAAU,OAAO,kBAAmB,KAAK,cAAc,CAAC,EAGvD,OAAO,EAAY,CACzB,IAAM,EAAI,KAAK,UACf,OAAO,aAAa,IAAc,EAAE,QAAQ,EAGtC,OAAO,EAAY,CACzB,IAAM,EAAI,KAAK,UACf,OAAO,aAAa,IAAc,EAAE,QAAQ,EAG9C,cAAgB,IAAM,CACpB,IAAM,EAAM,KAAK,aAAa,EAC9B,GAAI,CAAC,EAAK,CACR,OAAO,MAAM,yDAAyD,EACtE,OAEF,GAAgB,EAAK,CACnB,GAAI,KAAK,GACT,KAAM,KAAK,KACX,IAAK,KAAK,IACV,KAAM,KAAK,KAKX,WACE,KAAK,UAAY,MAAQ,KAAK,mBAAqB,KAAK,GACpD,KAAK,WACL,MACR,CAAC,EACD,KAAK,sBAAsB,EAI3B,GAAiB,CACf,KAAM,UACN,QACE,sEACJ,CAAC,GAGH,gBAAkB,IAAM,CACtB,IAAM,EAAM,KAAK,aAAa,EAC9B,GAAI,EAAK,GAAiB,CAAG,EAC7B,GAAI,KAAK,aAAc,KAAK,UAAU,KAAK,YAAY,EAEvD,GAAI,KAAK,eAAgB,KAAK,YAAY,EAC1C,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,GAKf,4BAA8B,IAAM,CAKlC,KAAK,aAAe,CAClB,GAAI,KAAK,GACT,KAAM,KAAK,KACX,IAAK,KAAK,IACV,KAAM,KAAK,IACb,EACA,IAAM,EAAM,KAAK,aAAa,EAC9B,GAAI,CAAC,GAAO,CAAC,GAAe,CAAG,EAAG,OAClC,IAAM,EAAO,GAAgB,CAAG,EAChC,GAAI,EACF,KAAK,UAAU,CAAI,EACnB,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,GAOjB,eAAiB,GACjB,YAAc,IAAM,CAClB,GAAI,CAAC,KAAK,SAAU,OAGpB,GAFA,KAAK,cAAc,EACnB,KAAK,eAAiB,CAAC,KAAK,eACxB,KAAK,eAAgB,KAAK,SAAS,EACvC,IAAM,EAAY,KAAK,cAAgB,CAAC,EACxC,QAAW,IAAO,CAAC,KAAM,OAAQ,MAAO,MAAM,EAG5C,KAAK,MAAM,GAAK,SAAW,EAAU,IAAQ,GAC7C,KAAK,MAAM,GAAK,SAAS,KAAK,cAAc,GAYhD,UAAY,IAAM,CAChB,GAAI,KAAK,WAAa,GACpB,KAAK,cAAc,EAEnB,KAAK,KAAK,QAAQ,GAItB,WAAa,CAAC,IAAiB,CAC7B,IAAM,EAAM,KAAK,aAAa,EACxB,EAAW,IAAM,KAAK,cAAc,EAGpC,EAAc,KAAK,cAAgB,KACzC,EAAQ,CACN,OAAS,EAAM,OAAuB,QAAQ,QAAQ,EACtD,MAAO,OACP,UAAW,CACT,CACE,KAAM,YACN,QAAS,UACT,SAAU,KACV,OAAQ,KAAK,SACf,EACA,CACE,KAAM,UACN,QAAS,cACT,SAAU,KACV,OAAQ,KAAK,UACf,EACA,CACE,KAAM,eACN,QAAS,OACT,SAAU,KACV,OAAQ,KAAK,KACb,QAAS,IAAM,KAAK,QAAQ,CAC9B,EACA,CACE,KAAM,gBACN,QAAS,OACT,SAAU,MACV,OAAQ,KAAK,KACb,QAAS,IAAM,KAAK,QAAQ,CAC9B,EACA,KACA,CACE,KAAM,OACN,QAAS,mBACT,SAAU,MACV,OAAQ,KAAK,IACf,EACA,CAAE,KAAM,WAAY,QAAS,WAAY,OAAQ,KAAK,eAAgB,EACtE,KACA,GAAI,EACA,CACE,KAAK,eACD,CACE,KAAM,OACN,QAAS,kBACT,OAAQ,KAAK,WACf,EACA,CACE,KAAM,OACN,QAAS,eACT,OAAQ,KAAK,YACb,QAAS,CACX,CACN,EACA,CAAC,EACL,GAAI,EACA,CACE,CACE,KAAM,OACN,QAAS,uBACT,OAAQ,KAAK,cACb,QAAS,CACX,CACF,EACA,CAAC,EACL,GAAI,GAAO,GACP,CACE,CACE,KAAM,SACN,QAAS,iBACT,OAAQ,IAAM,CACP,KAAK,aAAa,GAEzB,QAAS,CACX,CACF,EACA,CAAC,EACL,GAAI,EACA,CACE,CACE,KAAM,YACN,QAAS,qBACT,OAAQ,KAAK,gBACb,QAAS,CACX,CACF,EACA,CAAC,CACP,CACF,CAAC,GAGH,eAAiB,IAAM,CACrB,KAAK,UAAU,OAAO,WAAW,GAGnC,SAAW,IAAM,CACf,KAAK,cAAc,EACnB,KAAK,UAAU,IAAI,WAAW,EAC9B,KAAK,UAAU,OAAO,YAAa,KAAK,aAAe,KAAK,WAAW,EACvE,KAAK,MAAM,YAAY,OAAS,GAChC,KAAK,kBAAkB,GAGzB,UAAY,IAAM,CAChB,GAAI,KAAK,WAAa,GAEpB,KAAK,YAAY,UAAU,EAC3B,OAAO,MAAM,EAGb,UAAK,YAAY,UAAU,EAC3B,KAAK,UAAU,OAAO,WAAW,EACjC,KAAK,MAAM,YAAY,OAAS,IAIpC,iBAAmB,IAAM,CACvB,IAAQ,MAAK,OAAM,KAAI,QAAS,KAChC,GACE,KAAK,OACL,KAAK,KACL,KAAK,WACL,KAAK,UACL,CAAE,MAAK,OAAM,KAAI,MAAK,EACtB,CAIE,WAAY,KAAK,aAAa,kBAAkB,EAChD,QAAS,KAAK,aAAa,sBAAsB,EACjD,SAAU,KAAK,cAAgB,MACjC,CACF,EAGA,KAAK,UAAU,IAAI,WAAW,EAC9B,KAAK,MAAM,YAAY,OAAS,IAGlC,cAAgB,IAAM,CACpB,KAAK,YAAY,KAAK,CACpB,IAAK,KAAK,IACV,KAAM,KAAK,KACX,GAAI,KAAK,GACT,KAAM,KAAK,IACb,CAAC,GAGH,cAAgB,IAAM,CACpB,GAAI,KAAK,aAAc,CACrB,IAAQ,WAAY,KAAK,MACzB,EAAQ,UAAY,GACpB,QAAW,IAAY,CAAC,KAAM,MAAO,OAAQ,MAAM,EACjD,GAAI,KAAK,GACP,EAAQ,OACN,GAAI,CACF,MAAO,YAAY,IACnB,UAAW,KAAK,EAClB,CAAC,CACH,IAMR,QAAU,SAAY,CACpB,GAAI,KAAK,WAAa,GAAI,OAU1B,IAAM,EACJ,KAAK,UAAY,MACjB,CAAC,GAAY,QAAQ,OACrB,KAAK,aAAe,QACpB,KAAK,mBAAqB,KAAK,GAC3B,KAAK,WACL,OACA,EAAY,IAAS,OAAY,MAAM,GAAc,KAAK,OAAO,EAAI,QACnE,UAAS,MAAO,EAAS,kBAAmB,KAAK,MAKzD,GAAI,KAAK,UAAY,KAAM,CAEzB,GADA,KAAK,gBAAkB,GAAS,MAAM,KAAK,mBAAmB,CAAU,EACpE,KAAK,YAAa,KAAK,YAAY,MAAQ,KAAK,gBACpD,GAAI,IAAS,OAKX,KAAK,WAAa,KAAK,gBACvB,KAAK,iBAAmB,KAAK,GAC7B,MAAM,KAAK,kBAAkB,CAAU,EAI3C,IAAI,EACA,EAEE,EAAU,CAAC,IAAiB,CAChC,EAAiB,GAOb,EACJ,KAAK,UAAY,MAAQ,KAAK,aAAe,KAAK,aAAe,OAM7D,EAAO,KAAK,cAClB,GAAI,IAAS,UAAY,IAAS,MAChC,EAAU,MAAM,GAAgB,CAC9B,KAAM,KAAK,KACX,IAAK,KAAK,IACV,GAAI,KAAK,GACT,QAAS,KAAK,QACd,YACA,WAAY,EACZ,eAAgB,EAChB,eAAgB,EAChB,UACA,SACF,CAAC,EAED,OAAU,MAAM,GAAc,CAC5B,KAAM,KAAK,KACX,IAAK,KAAK,IACV,GAAI,KAAK,GACT,QAAS,KAAK,QACd,YACA,WAAY,EACZ,eAAgB,EAChB,aAAc,EACd,eAAgB,EAChB,UACA,SACF,CAAC,EAGH,GAAI,KAAK,aACP,KAAK,cAAc,EAMrB,IAAK,KAAK,MAAQ,IAAmB,GAAY,QAAQ,MAAO,CAE9D,MAAM,IAAI,QAAQ,CAAC,IAAY,sBAAsB,CAAO,CAAC,EAE7D,KAAK,UAAU,IAAI,aAAc,eAAe,EAChD,KAAK,UAAU,OAAO,eAAgB,cAAc,EAKpD,IAAM,EACJ,KAAK,UAAY,KAAO,EAAa,MAAM,GAAc,IAAI,EAO/D,GAJA,KAAK,YACH,KAAK,MAAQ,EACT,MAAM,GAAS,KAAK,KAAM,EAAS,KAAK,QAAS,CAAa,EAC9D,CAAE,OAAQ,EAAG,OAAQ,EAAG,MAAO,CAAC,CAAE,EACpC,EACF,KAAK,YAAY,QAAU,EAC3B,KAAK,YAAY,MAAM,QAAQ,CAC7B,KAAM,8BACN,OAAQ,GACR,MAAO,OAAO,CAAc,CAC9B,CAAC,EAEH,KAAK,UAAU,OAAO,eAAe,EACrC,KAAK,mBAAmB,EAExB,UAAK,UAAU,OACb,aACA,gBACA,eACA,cACF,GAII,kBAAkB,EAAS,CACjC,IAAQ,YAAa,EAAW,iBAAkB,KAAK,MACjD,EAAU,KAAK,YAErB,GAAI,CAAC,GAAW,EAAQ,MAAM,SAAW,EAAG,CAC1C,EAAU,OAAS,GACnB,KAAK,UAAU,OAAO,eAAgB,cAAc,EACpD,EAAc,MAAQ,WACtB,OAGF,EAAU,UAAY,GAEtB,IAAM,EAAU,GACd,CAAE,MAAO,CAAE,aAAc,MAAO,WAAY,MAAO,CAAE,EACrD,GAAG,EAAQ,UAAU,EAAQ,MAAM,qBACrC,EACA,EAAU,OAAO,CAAO,EAExB,QAAW,KAAQ,EAAQ,MAAO,CAChC,IAAM,EAAO,EAAK,OAAS,IAAK,IAC1B,EAAM,EAAK,OAAS,YAAc,YAClC,EAAS,GACb,CAAE,MAAO,CAAI,EACb,GAAK,EAAO,GAAG,EACf,EAAK,KACL,EAAK,MACD,GAAK,CAAE,MAAO,CAAE,QAAS,KAAM,CAAE,EAAG,MAAM,EAAK,OAAO,EACtD,EACN,EACA,EAAU,OAAO,CAAM,EAGzB,KAAK,UAAU,OAAO,eAAgB,EAAQ,SAAW,CAAC,EAC1D,KAAK,UAAU,OAAO,eAAgB,EAAQ,OAAS,CAAC,EAGxD,EAAc,MACZ,EAAQ,SAAW,EACf,GAAG,EAAQ,sBACX,GAAG,EAAQ,UAAU,EAAQ,MAAM,sBAGzC,KAAK,4BAA4B,EAGjC,KAAK,cACH,IAAI,YAAY,eAAgB,CAC9B,QAAS,GACT,OAAQ,CACN,UACA,QAAS,IACX,CACF,CAAC,CACH,EAGF,gBAAgB,CAAC,EAAyB,CACxC,QAAW,KAAW,EAAU,CAC9B,EAAQ,OAAS,GACjB,IAAO,KAAS,GAAS,EAAQ,UAAU,MAAM;AAAA,CAAI,EACrD,GAAI,CAAC,KAAM,OAAQ,MAAO,MAAM,EAAE,SAAS,CAAI,EAAG,CAChD,IAAM,EAAW,EACd,OAAO,CAAC,IAAS,EAAK,KAAK,IAAM,EAAE,EACnC,IAAI,CAAC,IAAU,EAAK,MAAM,MAAM,EAAe,GAAG,MAAM,EACxD,KAAK,EAAE,GACJ,GACJ,EAAW,EAAI,EAAM,IAAI,CAAC,IAAS,EAAK,UAAU,CAAQ,CAAC,EAAI,GAC/D,KAAK;AAAA,CAAI,EACX,KAAK,eAAe,EAAM,CAAM,EAC3B,KACL,IAAM,EAAW,CAAC,KAAM,OAAQ,MAAO,MAAM,EAAE,KAAK,CAAC,IACnD,EAAQ,QAAQ,aAAa,GAAM,CACrC,EACA,GAAI,EACF,KAAK,eACH,EACA,IAAa,OAAS,EAAQ,UAAY,EAAQ,SACpD,IAMR,cAAc,EAAG,CAEf,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,aAAc,CACxC,KAAK,sBAAwB,GAC7B,OAEF,IAAQ,WAAY,KAAK,MACzB,GAAI,KAAK,KAAO,GACd,EAAQ,MAAQ,EACX,QAAI,KAAK,OAAS,GACvB,EAAQ,MAAQ,EACX,QAAI,KAAK,MAAQ,GACtB,EAAQ,MAAQ,EACX,QAAI,KAAK,OAAS,GACvB,EAAQ,MAAQ,EAIpB,MAAM,EAAS,CAGb,GAFA,MAAM,OAAO,EAET,KAAK,WAAa,GAAI,CACxB,IAAM,EAAO,aAAa,QAAQ,KAAK,UAAU,EACjD,GAAI,IAAS,KAAM,CACjB,IAAM,EAAU,KAAK,MAAM,CAAI,EAC/B,GAAI,KAAK,YAAc,EAAQ,UAAW,OAK1C,GAHA,KAAK,IAAM,EAAQ,IACnB,KAAK,KAAO,EAAQ,KACpB,KAAK,GAAK,EAAQ,GACd,EAAQ,KAAM,KAAK,KAAO,EAAQ,KAGtC,KAAK,cAAc,EACnB,KAAK,MAAM,QAAQ,OAAS,GAC5B,KAAK,MAAM,YAAY,OAAS,GAChC,KAAK,UAAU,IAAI,WAAW,EAC9B,KAAK,WAAW,GAGlB,UAAK,QAAQ,EAGnB,CAEO,IAAM,GACX,GAAY,eAAe,EAGvB,GAAS,IAAI,IAAI,OAAO,SAAS,IAAI,EAAE,aACvC,GAAW,GAAO,IAAI,IAAI,EAChC,GAAI,GAAU,CACZ,SAAS,OAAS,iBAClB,SAAS,KAAK,YAAc,GAC5B,IAAM,EAAU,GAAY,CAAE,WAAS,CAAC,EAGlC,EAAa,GAAO,IAAI,IAAI,EAC5B,EAAU,GAAO,IAAI,KAAK,EAChC,GAAI,GAAc,IAAY,KAC5B,EAAQ,aAAa,mBAAoB,CAAU,EACnD,EAAQ,aAAa,uBAAwB,CAAO,EAEtD,SAAS,KAAK,OAAO,CAAO,EC3xD9B,IAAQ,SAAS,EAIV,MAAM,WAAoB,CAAU,OAClC,kBAAmB,qBAEnB,gBAAiB,CACtB,QAAS,IACT,QAAS,IACT,QAAS,GACT,eAAgB,EAClB,EAEA,MAAkB,SAElB,QAAU,CAAC,GAAK,CAAE,KAAM,MAAO,KAAM,KAAM,CAAC,EAAG,GAAK,CAAE,KAAM,SAAU,CAAC,CAAC,QAEjE,iBAAkB,CACvB,QAAS,CACP,QAAS,OACT,oBAAqB,GAAG,EAAW,SACjC,KACF,KAAK,EAAW,aAAa,KAAK,IAClC,iBAAkB,OAClB,SAAU,WACV,OAAQ,EAAW,OAAO,aAAa,EACvC,WAAY,EAAW,kBAAkB,gBAAgB,CAC3D,EACA,aAAc,CACZ,SAAU,UACZ,EACA,yBAA0B,CACxB,QAAS,OACX,EACA,yBAA0B,CACxB,QAAS,OACX,CACF,EAEA,aAAe,IAAM,CACnB,IAAQ,WAAY,KAAK,MACnB,EAAS,KAAK,aACpB,GAAI,IAAW,KACb,OAGF,IAAI,EAQJ,GANA,KAAK,QAAU,EAAO,YAAc,KAAK,QAGvC,CAAC,GAAG,KAAK,UAAU,EAAE,KAAK,CAAC,IACzB,aAAgB,QAAU,EAAK,aAAa,MAAM,IAAM,MAAQ,EAClE,IAAM,OAEN,EAAW,cACX,KAAK,MAAM,YAAY,cAAe,MAAM,EAC5C,KAAK,MAAM,YAAY,kBAAmB,IAAI,EACzC,QAAI,CAAC,KAAK,QACf,EAAW,SACX,EAAQ,UAAU,IAAI,uBAAuB,EAC7C,KAAK,MAAM,YAAY,cAAe,GAAG,KAAK,WAAW,EACzD,KAAK,MAAM,YACT,kBACA,eAAe,KAAK,YACtB,EACA,KAAK,MAAM,YAAY,WAAY,GAAG,EAMtC,QAJA,EAAQ,UAAU,OAAO,uBAAuB,EAChD,KAAK,MAAM,YAAY,cAAe,KAAK,EAC3C,KAAK,MAAM,YAAY,kBAAmB,KAAK,EAE3C,KAAK,eACP,EAAW,kBACX,KAAK,MAAM,YAAY,WAAY,aAAa,EAEhD,OAAW,cACX,KAAK,MAAM,YAAY,WAAY,aAAa,EAIpD,GAAI,KAAK,QAAU,EACjB,KAAK,MAAQ,GAIT,SACR,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EACxB,KAAK,eAAiB,KAAK,MAAM,QAAQ,WAAW,SAAW,EAC/D,WAAW,iBAAiB,SAAU,KAAK,YAAY,EAEvD,KAAK,SAAW,IAAI,iBAAiB,KAAK,YAAY,EACtD,KAAK,SAAS,QAAQ,KAAM,CAAE,UAAW,EAAK,CAAC,EAC/C,KAAK,MAAM,YAAY,wBAAyB,IAAI,EACpD,WAAW,IAAM,CACf,KAAK,MAAM,eAAe,uBAAuB,GAChD,GAAG,EAGR,oBAAoB,EAAG,CACrB,MAAM,qBAAqB,EAC3B,KAAK,SAAS,WAAW,EAG3B,MAAM,EAAS,CACb,MAAM,OAAO,EACb,KAAK,aAAa,EAEtB,CAKO,IAAM,GAA8B,GAE9B,GACX,GAAY,eAAe,EAGhB,GAAU,GAGV,GAAa,GC6D1B,IACE,OACA,QACA,KACA,UACA,UACA,YACA,SACA,MACA,WACA,WACA,MACA,OACE,EAGE,GAAY,CAChB,KAAM,EAAW,cAAc,MAAM,EACrC,KAAM,EAAW,cAAc,MAAM,EACrC,QAAS,EAAW,iBAAiB,MAAM,CAC7C,EAGM,GAAwC,CAC5C,eAAgB,CAAE,QAAS,KAAM,EACjC,qBAAsB,CAAE,QAAS,GAAI,EACrC,wBAAyB,CACvB,WAAY,CAAE,QAAS,GAAI,EAC3B,MAAO,CAAE,QAAS,KAAM,CAC1B,EACA,yBAA0B,CACxB,KAAM,CAAE,QAAS,IAAK,UAAW,YAAa,EAC9C,GAAI,CAAE,QAAS,IAAK,UAAW,UAAW,CAC5C,EACA,uBAAwB,CACtB,UAAW,CAAE,QAAS,IAAK,UAAW,UAAW,EACjD,MAAO,CAAE,QAAS,IAAK,UAAW,YAAa,EAC/C,OAAQ,CAAE,QAAS,IAAK,UAAW,aAAc,cAAe,MAAO,CACzE,EAGA,mFACE,CACE,QAAS,iBACX,EAGF,+DAAgE,CAC9D,QAAS,KACT,MAAO,EAAK,WACZ,OAAQ,EAAK,WACb,aAAc,MACd,WAAY,EAAK,UACjB,QAAS,eACT,cAAe,QACjB,EACA,gCAAiC,CAAE,WAAY,GAAU,IAAK,EAC9D,gCAAiC,CAC/B,WAAY,GAAU,KACtB,UAAW,oCACb,EAGA,eAAgB,CACd,QAAS,GAAU,QACnB,SAAU,QACV,OAAQ,EAAK,QACb,MAAO,EAAK,QACZ,OAAQ,OACR,WAAY,EAAK,OACjB,MAAO,QACP,IAAK,EAAK,SACZ,EACA,uBAAwB,CAAE,QAAS,MAAO,EAC1C,wBAAyB,CACvB,QAAS,GAAU,QACnB,UACE,oEACJ,EACA,uBAAwB,CACtB,QAAS,GAAU,KACnB,UAAW,gCACb,EACA,uBAAwB,CACtB,QAAS,GAAU,KACnB,UAAW,oCACb,EAGA,sBAAuB,CACrB,WAAY,QACZ,MAAO,EAAK,OACZ,aAAc,MACd,MAAO,EAAK,WACZ,OAAQ,EAAK,WACb,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,WAAY,MACd,EAGA,kCAAmC,CACjC,KAAM,CAAE,UAAW,aAAa,EAAW,OAAO,SAAS,GAAI,EAC/D,GAAI,CAAE,UAAW,uBAAwB,CAC3C,EACA,kBAAmB,CACjB,UAAW,qCACX,aAAc,EAAK,aACrB,CACF,EAkFI,GAAgB,EAEb,SAAS,EAAgB,CAAC,EAAyC,CACxE,IACE,OACA,UAAU,CAAC,EACX,cAAc,GACd,eAAe,CAAC,EAChB,UAAU,IACV,UAAU,IACV,UAAU,QACV,eACA,gBACA,cACA,kBACE,EAKE,EAAgB,IAAY,SAGlC,QAAW,KAAO,EAChB,EAAI,WAAa,OAMnB,IAAM,EAAU,IAAY,QAAU,CAAC,EAAI,GAAa,CAAI,EACtD,EAAU,CAAC,IAA6B,EAAQ,IAAa,EAC7D,EAAkB,CAAC,IAAyB,CAChD,QAAW,KAAK,EAAM,GAAI,EAAQ,EAAE,QAAQ,IAAM,EAAM,OAAO,EAAE,SACjE,MAAO,IAEH,EAAU,CAAC,IACf,IAAY,QAAU,IAAI,IAAa,GAAY,EAAQ,CAAQ,CAAC,EAChE,EAAuB,IAAc,CAEzC,GAAI,EAAe,OAAO,EAAe,EAAgB,CAAY,EAAI,GACzE,OAAO,IAAY,OACf,GAAgB,SAAS,SAAS,SAAU,CAAO,EACnD,SAAS,SAAS,SAAW,GAC7B,SAAS,SAAS,OAAO,UAAU,CAAC,EAAE,MAAM,GAAG,EAAE,GACjD,IAQA,EAAqB,CAAC,IAA6C,CACvE,IAAM,EAAM,EAAO,aAAa,MAAM,GAAK,GAC3C,GAAI,IAAQ,IAAM,EAAI,WAAW,GAAG,EAAG,OAAO,KAC9C,IAAI,EACJ,GAAI,CACF,EAAM,IAAI,IAAI,EAAK,SAAS,SAAS,IAAI,EACzC,KAAM,CACN,OAAO,KAET,GAAI,EAAI,SAAW,SAAS,SAAS,OAAQ,OAAO,KACpD,IAAM,EAAQ,CAAC,IACb,EAAK,KAAK,CAAC,IAAQ,EAAI,WAAa,CAAQ,EAAI,EAAW,KAEvD,EAAQ,EAAI,OAAO,QAAQ,MAAO,EAAE,EAC1C,GAAI,IAAU,IAAM,CAAC,EAAM,SAAS,GAAG,GAAK,CAAC,EAAM,SAAS,GAAG,EAAG,CAChE,IAAM,EAAW,EAAM,mBAAmB,CAAK,CAAC,EAChD,GAAI,EAAU,OAAO,EAGvB,GAAI,CAAC,GAAiB,IAAY,QAAS,CACzC,IAAM,EAAW,EAAM,GAAgB,EAAI,SAAU,CAAO,CAAC,EAC7D,GAAI,EAAU,OAAO,EAEvB,OAAO,MAGH,EAAU,EAAqB,GAAK,EAAK,IAAI,UAAY,YAEzD,EAAa,EAAK,KAAK,CAAC,IAAQ,EAAI,WAAa,CAAO,GAAK,EAAK,GAQlE,GAAW,aAAa,OAQxB,EAPQ,EAAK,EAChB,IAAW,CACV,OACA,aACA,QAAS,EACX,CACF,CAAC,EACiB,IAKd,EAA4C,IAAM,GAGhD,EAAmD,CAAC,EACtD,EACA,GAAyB,GACzB,GAAiB,EACjB,GAAc,EAIlB,GAAI,CAAC,EACH,OAAO,iBAAmB,IAAI,QAAQ,CAAC,IAAY,CACjD,EAAqB,EACtB,EAGH,IAAM,GAAsB,CAAC,IAAqB,CAChD,IAAM,EAAU,EAAgB,GAE1B,EAAO,EAAI,KAA0B,KACzC,CAAC,IAAM,EAAE,WAAa,CACxB,EACA,GAAI,EACF,EAAI,WAAa,EACb,EAAQ,OACN,SACA,SACF,OAEN,EAAW,GAGP,GAAwB,IAAM,CAClC,GAAI,IAAe,IAAkB,EAAoB,CACvD,IAAM,EAA6B,CACjC,OAAQ,EACR,OAAQ,EACR,MAAO,CACT,EAEA,QAAW,KAAe,OAAO,OAAO,CAAe,EACrD,EAAW,QAAU,EAAY,YACjC,EAAW,QAAU,EAAY,YAOnC,GAJA,EAAmB,CAAU,EAC7B,EAAqB,OAGjB,IAAe,CAAC,GAClB,MAAM,UAAW,CACf,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CAAU,CACjC,CAAC,EAAE,MAAM,IAAM,EAEd,IAKD,GACJ,OAAO,SAAS,WAAa,aAC7B,OAAO,SAAS,WAAa,YAEzB,GAAqB,CAAC,IAAuB,CACjD,IAAQ,WAAY,EAAM,OAIpB,EAAW,OAAO,EAAI,WAAW,QAAQ,EAG/C,EAAgB,GAAY,CAC1B,OAAQ,EAAQ,SAAW,EAC3B,MAAO,CAAC,GAAG,EAAQ,KAAK,EACxB,YAAa,EAAQ,OACrB,YAAa,EAAQ,MACvB,EAEA,GAAoB,CAAQ,GAIxB,GAAiB,CAAC,IAAsB,CAC5C,KACA,GAAsB,EACtB,GAAiB,GAGnB,GAAS,QAAU,CACjB,KAAK,CAAC,EAAK,EAAU,CACnB,EAAI,aAAa,OAAQ,EAAQ,CAAQ,CAAC,EACxC,EAAoB,QAAQ,SAAW,EAE7C,EAEA,GAAS,QAAU,CACjB,KAAK,CAAC,EAAK,EAAa,CACtB,EAAI,UAAU,OACZ,UACA,IAAiB,EAAoB,QAAQ,QAC/C,EAEJ,EAEA,GAAS,WAAa,CACpB,KAAK,CAAC,EAAK,EAAQ,CAEjB,GADA,EAAI,UAAU,OAAO,eAAgB,cAAc,EAC/C,IAAW,SACb,EAAI,UAAU,IAAI,cAAc,EAC3B,QAAI,IAAW,SACpB,EAAI,UAAU,IAAI,cAAc,EAGtC,EAEA,IAAM,GAAa,GAAS,IAAM,CAChC,IAAM,EAAS,GAAY,MAAM,kBAAkB,EACnD,EAAI,KAAK,QAAQ,CAAC,IAAa,CAC7B,EAAI,OACF,CAAC,EAAI,MAAM,kBAAkB,EAAE,SAAS,CAAM,GAC9C,CAAC,EAAI,KAAK,kBAAkB,EAAE,SAAS,CAAM,EAChD,EACD,GAAM,EAAI,IAAI,EAGd,EAAW,EAAI,EAChB,EAEK,GAAc,GAAM,CACxB,KAAM,MACN,YAAa,SACb,KAAM,SACN,MAAO,CACL,MAAO,oBACP,OAAQ,KACV,EACA,QAAS,EACX,CAAC,EAID,GAAI,CAAC,EACH,OAAO,iBAAiB,WAAY,IAAM,CAIxC,GAAI,EAAQ,CACV,GACE,GAAwB,GACxB,CAAC,OAAO,QAAQ,wCAAwC,EACxD,CACA,IAAM,EAAO,EAAQ,OAAO,EAAO,IAAI,QAAQ,CAAC,EAChD,OAAO,QAAQ,UAAU,CAAE,MAAK,EAAG,GAAI,CAAI,EAC3C,OAEF,GAAY,EAEd,GAAW,EAAqB,CAAC,EAClC,EAID,OAAO,iBAAiB,eAAgB,CAAC,IAA6B,CACpE,GAAI,GAAwB,EAC1B,EAAM,eAAe,EACrB,EAAM,YAAc,GAEvB,EAOH,IAAI,GAA8B,KAE5B,GAAuB,CAC3B,GACE,CACE,MAAO,SACP,MAAO,CAAE,MAAO,EAAK,SAAU,EAC/B,MAAO,aACP,KAAM,CACJ,MAAO,EAAI,QACX,QAAS,CACP,KAAK,CAAC,EAAS,EAAS,CACtB,EAAQ,MAAM,QAAU,EAAU,GAAK,OACrC,EAAQ,YAA4B,MAAM,QAAU,EAClD,GACA,OAER,CACF,EACA,OAAO,EAAG,CACR,GAAI,GAAS,GAAQ,eAAiB,CAAC,GAAQ,eAEnD,EACA,EAAM,KAAK,CACb,EACA,GAAK,CAAE,MAAO,CAAE,KAAM,UAAW,CAAE,CAAC,CACtC,EAEA,GAAI,EACF,GAAc,KACZ,GACE,CACE,KAAM,IACN,MAAO,CACL,QAAS,OACT,WAAY,SACZ,aAAc,MAChB,CACF,EACA,EAAa,OACT,EAAM,OAAO,CACX,MAAO,CAAE,aAAc,GAAI,YAAa,EAAG,CAC7C,CAAC,EACD,GAAK,EACT,GAAG,CAAW,CAChB,CACF,EAGF,GAAc,KAAK,GAAK,CAAE,MAAO,SAAU,CAAC,CAAC,EAG7C,IAAM,GAAa,CAAC,IAAmB,CACrC,IAAM,EAAc,EAAK,KAAQ,EAAc,EAAK,MAAQ,OAC5D,OAAO,GACL,CACE,MAAO,EAAc,SAAW,GAChC,MAAO,EAAK,MACZ,OAAQ,SACR,KAAM,EAAK,IACb,EACA,EAAc,EAAY,EAAI,EAAK,KACrC,GAGF,GAAI,EAEF,EAAY,QAAQ,CAAC,IAAS,GAAc,KAAK,GAAW,CAAI,CAAC,CAAC,EAC7D,KAEL,IAAM,EAAsD,CAC1D,CAAC,EAAa,OAAQ,OAAQ,QAAQ,EACtC,CAAC,EAAa,QAAS,UAAW,SAAS,EAC3C,CAAC,EAAa,KAAM,OAAQ,MAAM,EAClC,CAAC,EAAa,OAAQ,SAAU,QAAQ,EACxC,CAAC,EAAa,IAAK,MAAO,OAAO,CACnC,EACA,QAAY,EAAM,EAAM,KAAU,EAChC,GAAI,EAAM,GAAc,KAAK,GAAW,CAAE,OAAM,QAAO,MAAK,CAAC,CAAC,EAOlE,IAAM,GAAa,GAAkB,GAAI,EACzC,GAAW,UAAU,IAAI,aAAa,EACtC,OAAO,OAAO,GAAW,MAAO,CAC9B,QAAS,QAKT,SAAU,qCACV,OAAQ,OACR,QAAS,QACT,SAAU,QACZ,CAAC,EAYD,IAAM,GAAsB,IAAY,CACtC,QAAW,KAAU,GAAW,iBAAiB,GAAG,EAAG,CACrD,IAAM,EAAW,EAAmB,CAA2B,EAC/D,GAAI,IAAa,KACf,EAAO,aAAa,OAAQ,EAAQ,CAAQ,CAAC,EAC3C,EAAuB,QAAQ,QAAU,IAS3C,GAAsB,IAAY,CACtC,GAAI,EAAe,OACnB,IAAM,EAAO,SAAS,KAAK,QAAQ,KAAM,EAAE,EAC3C,GAAI,CAAC,EAAM,OACX,sBAAsB,IAAM,CAC1B,IAAI,EAAqB,KACzB,GAAI,CACF,EAAK,GAAW,cAAc,IAAI,IAAI,OAAO,CAAI,GAAG,EACpD,KAAM,CACN,EAAK,KAEP,GAAI,CAAC,EAAI,OACT,EAAG,eAAe,CAAE,MAAO,SAAU,SAAU,QAAS,CAAC,EACzD,EAAG,UAAU,IAAI,gBAAgB,EACjC,WAAW,IAAM,GAAM,EAAG,UAAU,OAAO,gBAAgB,EAAG,IAAI,EACnE,GAGC,GAAsB,IAAmB,QAAa,CAAC,EACrD,GAAU,CAAC,IAAa,CAC5B,GAAI,GACF,GAAsB,GAKtB,QAAW,UAAY,GAAkB,EAAI,KAAM,CACjD,MAAO,EAAI,MAAQ,IAAI,IAAI,EAAI,KAAK,EAAI,MAC1C,CAAC,EAOH,GALA,GAAoB,EAGpB,GAAY,eAAe,GAAY,EAAS,EAAI,MAAQ,MAAS,EACrE,GAAoB,EAChB,IAAY,OAOd,SAAS,MAAQ,GAAU,EAAK,CAAW,GAKzC,GAAa,CAAC,IAAqB,CACvC,IAAM,EAAM,EAAK,KAAK,CAAC,IAAM,EAAE,WAAa,CAAQ,GAAK,EAAK,GAC9D,EAAI,WAAa,EACjB,GAAQ,CAAG,EACX,EAAW,EAAI,GAMX,GAAK,CAAC,IAAqB,CAG/B,GAAI,CAAC,GAAmB,EAAG,OAC3B,GAAI,EACF,IAAgB,EAAQ,CAAQ,CAAC,EAC5B,KACL,IAAM,EAAO,EAAQ,CAAQ,EAC7B,OAAO,QAAQ,UAAU,CAAE,MAAK,EAAG,GAAI,CAAI,EAE7C,GAAW,CAAQ,GAQrB,GAAW,iBAAiB,QAAS,CAAC,IAAsB,CAC1D,GACE,EAAM,kBACN,EAAM,SAAW,GACjB,EAAM,SACN,EAAM,SACN,EAAM,UACN,EAAM,OAEN,OACF,IAAM,EAAU,EAAM,OAAuB,QAC3C,GACF,EACA,GACE,CAAC,GACD,EAAO,SAAW,UAClB,EAAO,aAAa,UAAU,EAE9B,OACF,IAAM,EAAW,EAAmB,CAAM,EAC1C,GAAI,IAAa,KAAM,OACvB,EAAM,eAAe,EACrB,GAAG,CAAQ,EACZ,EAQD,IAAM,GAAgB,CAAC,IACrB,EAAE,SAAS,KAAK,EACZ,WACA,EAAE,SAAS,MAAM,EACjB,MACA,EAAE,SAAS,KAAK,GAAK,EAAE,SAAS,MAAM,EACtC,aACA,aAKA,GAAwB,CAAC,EAAiB,IAAsB,CACpE,GAAI,EAAE,SAAS,KAAK,EAAG,OAAO,EAE9B,OADe,EAAQ,MAAM,oBAAoB,GAAK,CAAC,GACzC,IAAI,CAAC,IAAM,EAAE,UAAU,EAAG,EAAE,OAAS,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK;AAAA;AAAA,CAAM,GAGrE,GAAe,CAAC,IAA6B,CACjD,IAAM,EAAK,EAAa,OACxB,GAAI,CAAC,GAAM,CAAC,EAAG,OAAO,KACtB,IAAM,EAAI,EAAG,MAAM,8CAA8C,EACjE,OAAO,EACH,qCAAqC,EAAE,MAAM,EAAE,WAAW,IAC1D,MAGA,GAAa,MAAO,IAAsC,CAC9D,GAAI,CACF,IAAM,EAAI,MAAM,MAAM,2BAA2B,mBAAmB,CAAC,GAAG,EAKlE,EAAc,EAAE,QAAQ,IAAI,cAAc,GAAK,GACrD,GAAI,EAAE,IAAM,CAAC,cAAc,KAAK,CAAW,EAAG,OAAO,MAAM,EAAE,KAAK,EAClE,KAAM,EAGR,IAAM,EAAM,GAAa,CAAC,EAC1B,GAAI,EACF,GAAI,CACF,IAAM,EAAI,MAAM,MAAM,CAAG,EACzB,GAAI,EAAE,GAAI,OAAO,MAAM,EAAE,KAAK,EAC9B,KAAM,EAIV,OAAO,MAGH,GAAmB,MACvB,EACA,IACqB,CACrB,GAAI,CAMF,OALU,MAAM,MAAM,qBAAsB,CAC1C,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CAAE,KAAM,EAAG,SAAQ,CAAC,CAC3C,CAAC,GACQ,GACT,KAAM,CACN,MAAO,KAIL,GAAe,CAAC,EAAkB,IAA0B,CAChE,IAAM,EAAM,IAAI,gBAAgB,IAAI,KAAK,CAAC,CAAO,EAAG,CAAE,KAAM,YAAa,CAAC,CAAC,EAC9D,GAAE,CAAE,KAAM,EAAK,SAAU,CAAS,CAAC,EAC3C,MAAM,EACX,WAAW,IAAM,IAAI,gBAAgB,CAAG,EAAG,IAAI,GAG7C,EAOO,KAEL,GAA0B,IAC9B,IAAW,MAAQ,EAAO,OAAO,QAAU,EAAO,SAI9C,GAAc,IAAY,CAC9B,GAAI,CAAC,EAAQ,OACb,EAAO,OAAO,OAAO,EACrB,EAAS,KACT,GAAW,MAAM,QAAU,IAKvB,GAAqB,IAAe,CACxC,GAAI,CAAC,EAAQ,MAAO,GACpB,GACE,GAAwB,GACxB,CAAC,OAAO,QAAQ,wCAAwC,EAExD,MAAO,GAGT,OADA,GAAY,EACL,IAMH,GAAgB,CAAC,IAA4C,CACjE,GAAI,CAAC,EAAQ,OAEb,GADA,EAAO,KAAO,EACV,IAAS,UACX,GAAW,UAAY,GACrB,GAAsB,EAAO,OAAO,MAAO,EAAO,IAAI,IAAI,CAC5D,EACA,GAAoB,EACpB,GAAY,eACV,GACA,EACA,EAAO,IAAI,MAAQ,MACrB,EACK,QAAI,IAAS,OAClB,GAAW,gBACT,GAAS,CACP,SAAU,EAAO,SACjB,SAAU,EAAO,OAAO,MACxB,MAAO,CAAE,QAAS,QAAS,MAAO,OAAQ,OAAQ,MAAO,CAC3D,CAAC,CACH,EAEF,GAAW,MAAM,QAAU,IAAS,OAAS,OAAS,GACtD,EAAO,OAAO,MAAM,QAAU,IAAS,OAAS,QAAU,QAGtD,GAAiB,IAAY,CACjC,GAAI,CAAC,EAAQ,OACb,IAAM,EAAW,OAAO,EAAI,WAAW,QAAQ,EAC/C,GAAY,EACZ,GAAW,CAAQ,GAGf,GAAiB,SAA2B,CAChD,GAAI,CAAC,EAAQ,OACb,IAAQ,MAAK,UAAW,EAExB,GADW,MAAM,GAAiB,EAAI,KAAM,EAAO,KAAK,EAEtD,EAAO,SAAW,EAAO,MACzB,GAAc,SAAS,EAGvB,QAAa,EAAI,KAAK,MAAM,GAAG,EAAE,IAAI,GAAK,aAAc,EAAO,KAAK,GAIlE,GAAkB,MAAO,IAA4B,CACzD,GAAI,EAAQ,OACZ,IAAM,EAAU,MAAM,GAAW,EAAI,IAAI,EACzC,GAAI,IAAY,KAAM,CACpB,OAAO,MAAM,6BAA6B,EAAI,MAAM,EACpD,OAEF,IAAM,EAAS,GAAW,CAAE,KAAM,GAAc,EAAI,IAAI,CAAE,CAAC,EAG3D,EAAO,MAAM,QACX,uDACF,EAAO,MAAQ,EACG,GAAW,cACnB,OAAO,CAAM,EACvB,EAAS,CAAE,SAAQ,MAAK,KAAM,OAAQ,SAAU,CAAQ,EACxD,GAAc,MAAM,GAGhB,GAAiB,CAAC,IAA8B,CACpD,IAAM,EAAM,EAAK,KACf,CAAC,IAAM,OAAO,EAAE,QAAQ,IAAM,OAAO,EAAI,WAAW,QAAQ,CAC9D,EACA,GAAI,CAAC,EAAK,OACV,IAAM,EAAW,CAAC,IAAiB,EAAK,MAAM,GAAG,EAAE,IAAI,GAAK,EAItD,EAAY,EACd,CACE,GAAI,EAAO,OAAS,OAChB,CACE,CACE,QAAS,OACT,KAAM,OACN,OAAQ,IAAM,GAAc,MAAM,CACpC,CACF,EACA,CAAC,EACL,GAAI,EAAO,OAAS,UAChB,CACE,CACE,QAAS,UACT,KAAM,MACN,OAAQ,IAAM,GAAc,SAAS,CACvC,CACF,EACA,CAAC,EACL,CACE,QAAS,eACT,KAAM,OACN,OAAQ,IAAM,GAAc,MAAM,EAClC,QAAS,IAAM,GAAwB,CACzC,EACA,KACA,CACE,QAAS,iBACT,KAAM,OACN,OAAQ,IAAM,KAAK,GAAe,CACpC,EACA,CACE,QAAS,WACT,KAAM,WACN,OAAQ,IACN,GAAa,EAAS,EAAQ,IAAI,IAAI,EAAG,EAAQ,OAAO,KAAK,CACjE,EACA,KACA,CAAE,QAAS,eAAgB,KAAM,IAAK,OAAQ,EAAe,CAC/D,EACA,CACE,CACE,QAAS,mBACT,KAAM,OACN,OAAQ,IAAM,KAAK,GAAgB,CAAG,CACxC,EACA,GAAI,EAAa,QAAU,EAAI,MAAQ,EAAI,OAAS,YAChD,CACE,CACE,QAAS,iBACT,KAAM,SACN,OAAQ,IAAM,CACZ,OAAO,KACL,GAAG,EAAa,oBAAoB,EAAI,OACxC,QACF,EAEJ,CACF,EACA,CAAC,EACL,CACE,QAAS,kBACT,KAAM,WACN,OAAQ,IACN,KAAK,GAAW,EAAI,IAAI,EAAE,KAAK,CAAC,IAAM,CACpC,GAAI,IAAM,KAAM,GAAa,EAAS,EAAI,IAAI,EAAG,CAAC,EACnD,CACL,CACF,EAEJ,EAAQ,CACN,SAGA,SAAU,KACV,WACF,CAAC,GAMG,GAAW,CACf,KAAM,MAGN,MAAO,UACP,MAAO,CACL,QAAS,OACT,cAAe,SACf,MAAO,OACP,OAAQ,oBACR,UAAW,QACb,CACF,EA8HM,GACJ,IAAY,SA7He,IAAmB,CAC9C,IAAM,EAAQ,GAAa,EAAa,CAAO,EACzC,EAAS,IAAI,IACb,EAMA,CAAC,EAED,EAAmB,CAAC,IAAiC,CACzD,IAAM,EAAM,CAAC,EAAK,IAAI,QAAQ,EAC9B,QAAW,KAAK,EAAK,SAAU,EAAI,KAAK,GAAG,EAAiB,CAAC,CAAC,EAC9D,OAAO,GAGH,EAAW,CAAC,IAAa,CAAC,IAAiB,CAI/C,IAAM,EAAO,EAAM,OAAuB,QACxC,cACF,EACA,GAAI,EAAK,EAAI,eAAiB,GAC9B,GAAG,OAAO,EAAI,QAAQ,CAAC,EACvB,EAAM,eAAe,EACrB,IAAM,EAAU,EAAgB,EAAI,UACpC,GAAI,GAAW,CAAC,EAAQ,OACtB,WAAW,IAAM,CACf,IAAM,GAAS,SAAS,cAAc,2BAA2B,EACjE,GAAI,GACF,GAAO,eAAe,CAAE,SAAU,SAAU,MAAO,QAAS,CAAC,GAC9D,GAAG,GAIJ,EAAa,CAAC,IAAoC,CACtD,IAAM,EAAO,GACX,CACE,MAAO,WACP,KAAM,EAAQ,EAAK,IAAI,QAAQ,EAC/B,QAAS,EAAS,EAAK,GAAG,CAC5B,EACA,GAAc,EAAK,IAAI,KAAK,CAC9B,EACA,GAAI,EAAK,SAAS,SAAW,EAAG,CAC9B,IAAM,GAAO,GAAG,CAAI,EAEpB,OADA,EAAO,IAAI,EAAK,IAAI,SAAU,CAAE,GAAI,GAAM,MAAK,CAAC,EACzC,GAET,IAAM,EAAM,GACV,GAAQ,CAAI,EACZ,GAAG,GAAG,EAAK,SAAS,IAAI,CAAU,CAAC,CACrC,EACM,EAAO,GAAG,CAAG,EAQnB,OAPA,EAAS,KAAK,CACZ,GAAI,EACJ,GAAI,EACJ,OACA,SAAU,EAAK,IAAI,SACnB,QAAS,EAAiB,CAAI,CAChC,CAAC,EACM,GAGH,EAAO,GAAI,GAAU,GAAG,GAAG,EAAM,IAAI,CAAU,CAAC,CAAC,EAIjD,EAAgB,CAAC,EAAkB,IAA4B,CACnE,GAAI,CAAC,EAAQ,MAAO,GACpB,IAAM,EAAM,EAAK,KAAK,CAAC,IAAM,EAAE,WAAa,CAAQ,EACpD,MACE,CAAC,CAAC,IACD,OAAO,EAAI,KAAK,EAAE,kBAAkB,EAAE,SAAS,CAAM,GACpD,OAAO,EAAI,IAAI,EAAE,kBAAkB,EAAE,SAAS,CAAM,IAGpD,GAAc,CAClB,EACA,EACA,IACG,CACH,EAAK,UAAU,OAAO,UAAW,IAAa,CAAO,EACrD,IAAM,EAAI,EAAgB,GAC1B,EAAK,UAAU,OAAO,eAAgB,CAAC,CAAC,GAAK,EAAE,MAAM,EACrD,EAAK,UAAU,OAAO,eAAgB,CAAC,CAAC,GAAK,CAAC,EAAE,MAAM,GAkCxD,OA/BA,EAAa,CAAC,EAAY,KAAU,CAElC,IAAM,EAAM,EAAI,WACV,EAAU,GAAO,EAAI,UAAY,KAAO,OAAO,EAAI,QAAQ,EAAI,GAC/D,EAAS,GAAY,MAAM,KAAK,EAAE,kBAAkB,EAI1D,QAAY,IAAY,GAAI,GAAM,YAAW,EAC3C,GAAK,MAAM,QAAU,EAAc,GAAU,CAAM,EAAI,GAAK,OAC5D,GAAY,GAAM,GAAU,CAAO,EAErC,QAAa,GAAI,GAAM,MAAI,QAAM,YAAU,cAAa,EAAU,CAEhE,IAAM,GACJ,EAAc,GAAU,CAAM,GAC9B,GAAQ,KACN,CAAC,KACC,EAAO,IAAI,EAAE,GAAK,EAAO,IAAI,EAAE,EAAG,GAAG,MAAM,UAAY,MAC3D,EAMF,GALA,GAAK,MAAM,QAAU,GAAU,GAAK,OACpC,GAAY,GAAM,GAAU,CAAO,EAI/B,EAAQ,GAAG,KAAO,GACjB,QAAI,EAAW,GAAG,KAAO,GAAQ,SAAS,CAAO,EACjD,QAAI,GAAQ,SAAS,CAAO,EAAG,GAAG,KAAO,KAGlD,EAAW,EAAI,EACR,IAKkB,EACrB,GACE,IACK,GACH,SAAU,CACR,OAAQ,WACR,WAAY,SACZ,MAAO,EAAI,IACb,CACF,EACA,GACE,GACE,CACE,MAAO,WACP,YAAa,GAAG,yBAChB,YAAa,aACb,eAAgB,eAChB,OAAO,CAAC,EAAc,CACpB,IAAM,EAAM,GAAY,EAAM,MAAqB,EAC7C,EAAO,EAAM,OAAuB,QACxC,cACF,EACA,EAAI,eAAiB,GACrB,GAAG,OAAQ,EAAY,QAAQ,CAAC,EAChC,EAAM,eAAe,EAEzB,EACA,GAAc,CAAE,SAAU,SAAU,CAAC,CACvC,CACF,CACF,EAEA,GAAY,GAChB,CACE,MAAO,CACL,QAAS,OACT,cAAe,SACf,SAAU,QACV,OAAQ,QACR,SAAU,QACZ,CACF,EACA,GAAO,GAAG,EAAa,EACvB,GACE,CACE,KAAM,gBACN,UACA,UACA,MAAO,CACL,KAAM,WACN,SAAU,QACZ,EACA,QAAQ,CAAC,EAAc,CAMrB,GAHA,GAAW,EAAM,OAAuB,QACtC,GAAY,OACd,EACI,GAAS,EAAI,QAAU,GAAQ,QAEvC,EACA,GACA,GACA,GACE,CACE,MAAO,CACL,SAAU,WACV,UAAW,SACX,OAAQ,MACV,CACF,EACA,GACE,CACE,MAAO,cACP,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAK,MACL,SAAU,QACV,IAAK,6CACL,MAAO,MAGP,OAAQ,MACR,SAAU,UACV,MAAO,8BAEP,WAAY,2BACZ,OAAQ,OACR,aAAc,MACd,QAAS,UACT,UAAW,kBACX,OAAQ,UACR,WAAY,mBACd,EAGA,OAAO,CAAC,EAAc,CAGpB,IAAM,EAAO,EAAM,OAAuB,QACxC,cACF,EACA,GAAI,EAAK,GAAe,CAAG,GAE7B,KAAM,CACJ,MAAO,EAAI,WACX,OAAO,CAAC,EAA4B,EAAU,CAG5C,EAAQ,MAAM,QAAU,EAAI,KAAO,OAAS,OAEhD,CACF,EACA,EAAM,KAAK,CAAE,MAAO,CAAE,aAAc,EAAG,CAAE,CAAC,EAC1C,QACF,EACA,EACF,CACF,CACF,EAGA,GAAQ,CAAU,EAGlB,GAAW,kBAAmB,EAAsB,EAGpD,IAAM,GAAa,GACjB,CACE,MAAO,cACP,OAAQ,GACR,QAAS,EACX,EACA,GAAK,CAAE,KAAM,OAAQ,EAAG,OAAO,EAC/B,GAAK,CAAE,MAAO,QAAS,KAAM,OAAQ,EAAG,GAAG,CAC7C,EACA,GAAU,YAAY,EAAU,EAEhC,IAAI,GAAe,GAEnB,SAAS,EAAoB,EAAG,CAC9B,GAAe,GACf,GAAW,OAAS,GACpB,GAAW,UAAU,OAAO,UAAW,SAAS,EAChD,GAAW,UAAU,IAAI,UAAU,EACnC,GAAwB,EAG1B,SAAS,EAAuB,EAAG,CACjC,IAAM,EAAU,GAAW,cAAc,gBAAgB,EACnD,EAAU,GAAW,cAAc,gBAAgB,EAEnD,EAAc,OAAO,OAAO,CAAe,EAAE,OACjD,CAAC,EAAK,IAAM,EAAM,EAAE,YACpB,CACF,EACM,EAAc,OAAO,OAAO,CAAe,EAAE,OACjD,CAAC,EAAK,IAAM,EAAM,EAAE,YACpB,CACF,EAEA,GAAI,EACF,GAAI,GACF,EAAQ,YAAc,UACjB,QAAI,EAAc,EACvB,EAAQ,YAAc,SACjB,QAAI,EAAc,EACvB,EAAQ,YAAc,SAEtB,OAAQ,YAAc,QAG1B,GAAI,EACF,EAAQ,YACN,EAAc,EAAI,OAAO,CAAW,EAAI,OAAO,CAAW,EAIhE,SAAS,EAAgB,EAAG,CAC1B,IAAM,EAAc,OAAO,OAAO,CAAe,EAAE,OACjD,CAAC,EAAK,IAAM,EAAM,EAAE,YACpB,CACF,EAEA,GAAI,IAAgB,IAAe,GAIjC,GAFA,GAAe,GACf,GAAW,UAAU,OAAO,UAAU,EAClC,EAAc,EAChB,GAAW,UAAU,IAAI,SAAS,EAClC,GAAW,UAAU,OAAO,SAAS,EACrC,GAAW,OAAS,GAEpB,QAAW,UAAU,IAAI,SAAS,EAClC,GAAW,UAAU,OAAO,SAAS,EACrC,GAAW,OAAS,GAIxB,GAAwB,EAG1B,SAAS,EAAY,EAAG,CACtB,IAAM,EAAc,OAAO,QAAQ,CAAe,EAAE,OAClD,GAAI,KAAa,CAAC,EAAQ,MAC5B,EAEM,EAAmB,CAAC,EAE1B,QAAY,EAAU,KAAY,EAAa,CAC7C,IAAM,EAAM,EAAK,KAAK,CAAC,IAAM,EAAE,WAAa,CAAQ,EAC9C,EAAc,EAAQ,MAAM,OAAO,CAAC,IAAM,CAAC,EAAE,MAAM,EAEzD,QAAW,KAAQ,EACjB,EAAU,KAAK,CACb,QAAS,GAAG,GAAK,OAAS,MAAa,EAAK,OAC5C,OAAQ,IAAM,CAKZ,GAHe,EAAI,KAAK,KACtB,CAAC,KAAW,OAAO,GAAE,QAAQ,IAAM,CACrC,EAEE,GAAG,CAAQ,EAEX,WAAW,IAAM,CACf,IAAM,GAAgB,SAAS,cAC7B,2BACF,EACA,GAAI,GACF,GAAc,eAAe,CAC3B,SAAU,SACV,MAAO,QACT,CAAC,GAEF,GAAG,EAGZ,CAAC,EAIL,GAAI,EAAU,OAAS,EACrB,EAAU,KAAK,IAAI,EAGrB,EAAU,KAAK,CACb,KAAM,OACN,QAAS,iCACT,OAAQ,IAAM,CACZ,IAAM,EAAS,GAAmB,EAClC,UAAU,UAAU,UAAU,CAAM,EAExC,CAAC,EAED,EAAQ,CACN,OAAQ,GACR,WACF,CAAC,EAGH,SAAS,EAAkB,EAAW,CACpC,IAAM,EAAkB,CAAC,iBAAkB,EAAE,EACzC,EAAc,EACd,EAAc,EAElB,QAAY,EAAU,KAAY,OAAO,QAAQ,CAAe,EAAG,CAEjE,IAAM,EADM,EAAK,KAAK,CAAC,IAAM,EAAE,WAAa,CAAQ,GACjC,OAAS,EAK5B,GAHA,GAAe,EAAQ,YACvB,GAAe,EAAQ,YAEnB,EAAQ,MAAM,OAAS,EAAG,CAC5B,EAAM,KAAK,MAAM,GAAO,EACxB,EAAM,KAAK,EAAE,EACb,QAAW,KAAQ,EAAQ,MAAO,CAChC,IAAM,GAAO,EAAK,OAAS,IAAK,IAC1B,EAAO,EAAK,MACd,KAAK,MAAQ,EAAK,SAAS,EAAK,QAChC,KAAK,MAAQ,EAAK,OACtB,EAAM,KAAK,CAAI,EAEjB,EAAM,KAAK,EAAE,GASjB,OALA,EAAM,QACJ,cAAc,aAAuB,aACrC,EACF,EAEO,EAAM,KAAK;AAAA,CAAI,EAKxB,IAAM,GAAe,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACzD,GAAc,CAAC,GAAiB,GAAa,IAAI,WAAW,IAAM,IAClE,GAAoB,GAAc,EAAqB,EAAI,KAkBjE,GAfA,GAAU,iBAAiB,eAAiB,CAAC,IAAuB,CAKlE,GAJA,GAAmB,CAAK,EACxB,GAAiB,EAGb,IAAe,OAAO,SAAW,QAAU,GAAmB,CAChE,IAAQ,WAAY,EAAM,OAC1B,OAAO,OAAO,YACZ,CAAE,KAAM,oBAAqB,SAAU,GAAmB,SAAQ,EAClE,GACF,GAEe,EAGf,IAAe,GAAmB,CACpC,IAAM,EAAa,IAAM,CAEvB,IAAM,EAAY,CAAC,GADF,GAAU,iBAAiB,cAAc,CAC5B,EAAE,OAAO,CAAC,IACtC,EAAG,UAAU,SAAS,YAAY,CACpC,EACM,EAAU,EAAU,OAAO,CAAC,IAChC,EAAG,UAAU,SAAS,eAAe,CACvC,EACA,GAAI,EAAU,OAAS,GAAK,EAAQ,SAAW,EAC7C,OAAO,OAAO,YACZ,CAAE,KAAM,kBAAmB,SAAU,EAAkB,EACvD,GACF,EAEA,gBAAW,EAAY,GAAG,GAI9B,WAAW,EAAY,GAAG,EAI5B,IAAM,GAAqB,SAAY,CACrC,GAAI,GAAwB,OAC5B,GAAI,CAAC,GAAY,QAAQ,MAAO,OAChC,GAAI,GAAa,OACjB,GAAyB,GAOzB,IAAM,EAAgB,EAAK,OAAO,CAAC,IAAQ,EAAI,KAAK,SAAS,SAAS,CAAC,EAGvE,GAFA,GAAiB,EAAc,OAE3B,GAAiB,EACnB,GAAqB,EAGvB,GAAI,KAAmB,EAAG,CACxB,GAAI,EACF,EAAmB,CAAE,OAAQ,EAAG,OAAQ,EAAG,MAAO,CAAC,CAAE,CAAC,EACtD,EAAqB,OAEvB,OAGF,IAAM,EAAkB,OAAO,EAAI,WAAW,QAAQ,EAOhD,EAAY,SAAS,cAAc,QAAQ,EACjD,EAAU,MAAM,QACd,0GACF,SAAS,KAAK,YAAY,CAAS,EAGnC,IAAM,EAAiB,CAAC,IAAwB,CAC9C,GAAI,EAAM,MAAM,OAAS,oBAAqB,OAC9C,IAAQ,WAAU,WAAY,EAAM,KAKpC,GAAI,CAAC,EAAgB,GACnB,EAAgB,GAAY,CAC1B,OAAQ,GACR,MAAO,CAAC,EACR,YAAa,EACb,YAAa,CACf,EAEF,IAAM,EAAc,EAAgB,GACpC,EAAY,MAAM,KAAK,GAAG,EAAQ,KAAK,EACvC,EAAY,aAAe,EAAQ,OACnC,EAAY,aAAe,EAAQ,OACnC,EAAY,OAAS,EAAY,cAAgB,EACjD,GAAoB,CAAQ,EAC5B,GAAiB,GAEnB,OAAO,iBAAiB,UAAW,CAAc,EAEjD,QAAW,KAAO,EAAe,CAE/B,GAAI,EAAI,WAAa,EAAiB,SAGtC,EAAU,IACR,IAAY,OACR,GAAG,OAAO,SAAS,SAAS,EAAQ,EAAI,QAAQ,gBAChD,GAAG,OAAO,SAAS,SAAS,OAAO,SAAS,YAAY,EAAI,uBAGlE,MAAM,IAAI,QAAc,CAAC,IAAY,CACnC,IAAM,EAAW,KAAK,IAAI,EAAI,MACxB,EAAS,CAAC,KAAwB,CACtC,GACE,GAAM,MAAM,OAAS,mBACrB,GAAM,KAAK,WAAa,EAAI,SAE5B,OAAO,oBAAoB,UAAW,CAAM,EAC5C,EAAQ,GAGZ,OAAO,iBAAiB,UAAW,CAAM,EACzC,WAAW,IAAM,CACf,OAAO,oBAAoB,UAAW,CAAM,EAC5C,EAAQ,GACP,EAAW,KAAK,IAAI,CAAC,EACzB,EAED,GAAe,EAAI,QAAQ,EAQ7B,GAJA,OAAO,oBAAoB,UAAW,CAAc,EACpD,EAAU,OAAO,EAGb,EAAc,KAAK,CAAC,IAAM,EAAE,WAAa,CAAe,EAC1D,WAAW,IAAM,GAAe,CAAe,EAAG,IAAI,GAKpD,GAAuB,IAAM,CACjC,GAAI,CAAC,GAAY,QAAQ,MAAO,OAChC,GAAI,GACF,WAAW,GAAoB,IAAI,EAGnC,QADwB,EAAW,KAAK,SAAS,SAAS,EAExD,GAAiB,EACjB,GAAqB,EACrB,WAAW,IAAM,GAAe,EAAW,QAAQ,EAAG,IAAI,EACrD,QAAI,EACT,EAAmB,CAAE,OAAQ,EAAG,OAAQ,EAAG,MAAO,CAAC,CAAE,CAAC,EACtD,EAAqB,QAO3B,GAAI,CAAC,EACH,GAAqB,EACrB,GAAY,QAAQ,QAAQ,EAAoB,EAKlD,GAAI,EACA,GAAkB,SAAW,CAAC,IAC9B,GAAW,EAAgB,CAAI,GAAK,CAAI,EAC1C,OAAO,eAAe,GAAW,cAAe,CAC9C,IAAK,IAAM,EAAQ,OAAO,EAAI,WAAW,QAAQ,CAAC,CACpD,CAAC,EAGH,OAAO,GC5uDF,IAAM,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmEnB,GAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlB,SAAS,EAAU,CAAC,EAAmB,CAC5C,OAAO,EAAE,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,EAGrE,SAAS,EAAO,CAAC,EAAmB,CACzC,OAAO,EACJ,YAAY,EACZ,QAAQ,cAAe,GAAG,EAC1B,QAAQ,WAAY,EAAE,EAIpB,SAAS,EAAY,CAAC,EAAsB,CACjD,OAAO,EAAK,QAAQ,0BAA2B,EAAE,EAI5C,SAAS,EAAyB,CAAC,EAAmC,CAC3E,IAAM,EAAoB,CAAC,EAC3B,QAAW,KAAQ,EACjB,EAAI,KAAK,CAAI,EACb,EAAI,KAAK,GAAG,GAAQ,EAAK,QAAQ,CAAC,EAEpC,OAAO,EAGT,SAAS,EAAO,CAAC,EAAmC,CAClD,OAAO,EACJ,IACC,CAAC,IACC,iBAAiB,GAAQ,EAAK,IAAI,QAAQ,MAAM,GAC9C,EAAK,IAAI,KACX,QACE,EAAK,SAAS,OAAS,OAAO,GAAQ,EAAK,QAAQ,SAAW,SAEpE,EACC,KAAK,EAAE,EAaL,SAAS,EAAa,CAAC,EAAiB,EAA+B,CAC5E,IAAM,EAAU,EAAK,OAAO,CAAC,IAAM,CAAC,EAAE,MAAM,EACtC,EAAU,GAAa,CAAO,EAC9B,EAAQ,GAAa,EAAS,CAAO,EACrC,EAAM,EAAK,KAAO,GAAG;AAAA,EAAqB,KAE1C,EAAW,GAAQ,CAAK,EAC3B,IACC,CAAC,IACC,gCAAgC,GAC9B,EAAK,IAAI,QACX;AAAA,EAAQ,GAAkB,GAAa,EAAK,IAAI,IAAI,CAAC;AAAA,WACzD,EACC,KAAK;AAAA,CAAI,EAEZ,MAAO;AAAA,cACK,EAAK,MAAQ;AAAA;AAAA;AAAA,SAGlB,GAAW,EAAK,KAAK;AAAA,SACrB;AAAA;AAAA;AAAA,yBAGgB,GAAW,EAAK,KAAK;AAAA,6CACD,GAAQ,CAAK;AAAA,EACxD;AAAA,EAEA,EAAK,UACD,4FACA;AAAA;SCxJC,IAAM,GAAgB,IAChB,GAAqB,IAY3B,SAAS,EAAe,CAAC,EAAwB,CAAC,EAAiB,CACxE,IAAM,EAAa,EAAM,QAAQ,EAAM,QAAU,SAAS,EAC1D,MAAO,CACL,WAAY,EAAM,MAAQ,OAC1B,YAAa,EACb,YAAa,EAAM,YAAc,UACjC,UAAW,EAAM,UAAY,UAC7B,SAAU,EAAM,SAAW,UAC3B,kBAAmB,UACnB,OAAQ,EAAW,OAAO,EAAE,EAAE,WAAW,GAAG,EAAE,SAAS,GAAG,EAC1D,UAAW,EAAW,QAAQ,GAAG,EACjC,YAAa,EAAW,QAAQ,GAAG,EACnC,kBAAmB,EAAW,QAAQ,GAAG,EACzC,gBAAiB,EAAW,OAAO,EAAE,EAAE,SAAS,GAAG,EACnD,SAAU,EAAW,OAAO,EAAE,EAAE,SAAS,GAAG,EAC5C,QAAS,EAAW,OAAO,GAAG,EAAE,WAAW,GAAG,EAAE,SAAS,GAAG,EAC5D,WAAY,EAAW,OAAO,GAAG,EAAE,OAAO,GAAG,EAC7C,aAAc,QACd,QAAS,UACT,qBAAsB,OACtB,yBAA0B,OAC1B,kBAAmB,OACnB,iBAAkB,OAClB,eAAgB,OAChB,oBAAqB,QACrB,YAAa,kBACb,kBAAmB,QACnB,gBAAiB,QACjB,mBAAoB,qBACtB,EAIK,SAAS,EAAkB,CAAC,EAAwB,CAAC,EAAkB,CAC5E,IAAM,EAAS,GAAgB,CAAK,EAC9B,EAAa,EAAM,QAAQ,EAAM,QAAU,SAAS,EAC1D,MAAO,CACL,UACE,kJACF,QAAS,CACP,YAAa,qBACb,gBAAiB,gCACjB,UAAW,OACX,cAAe,UACZ,EAQH,YAAa,EAAK,WAClB,QAAS,EAAK,WACd,UAAW,EAAK,UAChB,aAAc,EAAK,QACnB,SAAU,OACV,YAAa,+BACb,SAAU,IACV,SAAU,MACV,SAAU,OACV,WAAY,OACZ,cACE,oEAIF,oBAAqB,MACvB,EACA,YAAa,IACR,GAAgB,CAAM,EACzB,aAAc,EAAW,QAAQ,GAAG,EACpC,YAAa,aAAa,EAAW,QAAQ,IAAI,IACjD,oBAAqB,EAAW,QAAQ,GAAG,CAC7C,EACA,iBAAkB,CAChB,OAAQ,aACV,EACA,IAAK,CACH,UAAW,aACX,eAAgB,GAAG,EAAK,oBAAoB,EAAK,iBACjD,eAAgB,MAClB,EACA,KAAM,CACJ,WAAY,EAAK,WACjB,SAAU,EAAK,SACf,OAAQ,IACR,WAAY,EAAK,WACjB,WAAY,EAAK,WACjB,uBAAwB,EAAK,WAC7B,kBAAmB,EAAK,eACxB,mBAAoB,EAAK,WACzB,MAAO,EAAK,SACd,EAGA,kBAAmB,CACjB,QAAS,OACX,EACA,0CAA2C,CACzC,WAAY,EAAK,KACnB,EAkBA,gCAAiC,CAC/B,QAAS,QACT,SAAU,QACV,MAAO,GAAG,EAAK,qBACf,SAAU,MACZ,EAGA,wCAAyC,CACvC,QAAS,KACT,SAAU,QACV,IAAK,IACL,KAAM,IACN,MAAO,IACP,OAAQ,EAAK,aACb,WAAY,EAAK,UACnB,EAGA,6CAA8C,CAC5C,QAAS,QACT,SAAU,EAAK,mBACf,OAAQ,OACR,QAAS,QAKT,SAAU,QACZ,EAGA,4CAA6C,CAC3C,QAAS,MACX,EAMA,8DAA+D,CAC7D,QAAS,MACX,EAGA,yCAA0C,CACxC,QAAS,MACX,GAKC,sBAAsB,SAA0B,CAC/C,gCAAiC,CAC/B,KAAM,GAAG,MACX,EACA,yCAA0C,CACxC,QAAS,QACT,SAAU,QACV,KAAM,IACN,IAAK,EAAK,aACV,OAAQ,IACR,MAAO,GAAG,OACV,SAAU,OACV,WAAY,EAAK,MAMjB,QAAS,GACX,EAWA,iDAAkD,CAChD,OAAQ,SACV,CACF,EACA,UAAW,CACT,QAAS,OACT,WAAY,SACZ,eAAgB,QAClB,EACA,kCAAmC,CACjC,WAAY,EAAK,WACjB,SAAU,EAAK,SACf,MAAO,eACP,WAAY,EAAK,OACnB,EACA,OAAQ,CACN,iBAAkB,OAClB,WAAY,MACd,EACA,OAAQ,CACN,WAAY,EAAK,WACjB,MAAO,EAAK,eACZ,WAAY,EAAK,eACjB,WAAY,EAAK,eACjB,QAAS,OACT,WAAY,SACZ,QAAS,mBACT,WAAY,6CACZ,OAAQ,EAAK,aACb,WAAY,QACd,EACA,GAAI,CACF,MAAO,EAAK,WACZ,SAAU,2CACV,WAAY,6CACZ,WAAY,MACZ,aAAc,aAAa,EAAK,WAChC,OAAQ,GAAG,EAAK,aAAa,EAAK,aAClC,QAAS,CACX,EACA,YAAa,CACX,MAAO,EAAK,eACZ,WAAY,QACd,EACA,GAAI,CACF,MAAO,EAAK,WACZ,SAAU,2CACV,WAAY,6CACZ,OAAQ,0CACV,EACA,GAAI,CACF,SAAU,2CACV,WAAY,6CACZ,OAAQ,0CACV,EACA,qBAAsB,CACpB,aAAc,EAChB,EACA,WAAY,CACV,SAAU,WACV,WAAY,EAAK,QACjB,OAAQ,gBACR,aAAc,EAAK,QACnB,QAAS,0CACT,OAAQ,2BAA2B,EAAK,cAC1C,EACA,4BAA6B,CAC3B,UAAW,GACb,EACA,2BAA4B,CAC1B,aAAc,GAChB,EACA,qBAAsB,CACpB,QAAS,MACT,QAAS,QACT,MAAO,EACP,OAAQ,EACR,OAAQ,yBACR,eAAgB,EAAK,QACrB,iBAAkB,EAAK,QACvB,SAAU,WACV,OAAQ,IACR,MAAO,EACT,EACA,oBAAqB,CACnB,QAAS,MACT,MAAO,GACP,OAAQ,GACR,QAAS,QACT,OAAQ,IACR,MAAO,IACP,SAAU,WACV,WAAY,GAAY,EAAM,KAAK,EAAG,OAAW,OAAW,CAAC,CAC/D,EACA,EAAG,CACD,eAAgB,OAChB,MAAO,EAAK,UACZ,QAAS,MACT,aAAc,8BAChB,EACA,6BAA8B,CAC5B,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,WAAY,gBACZ,WAAY,EAAK,WACjB,MAAO,EAAK,UACZ,eAAgB,OAChB,WAAY,EAAK,SACjB,QAAS,gCACT,OAAQ,OACR,aAAc,4BAChB,EACA,oCAAqC,CACnC,WAAY,2CACd,EACA,kBAAmB,CACjB,OAAQ,OACR,QAAS,OACT,aAAc,6BACd,UAAW,EAAK,iBAClB,EACA,MAAO,CACL,QAAS,8BACX,EACA,gBAAiB,CACf,MAAO,EAAK,gBACd,EACA,IAAK,CACH,cAAe,QACjB,EACA,iCAAkC,CAChC,UAAW,oCACb,EACA,mCAAoC,CAClC,WAAY,EAAK,WACjB,MAAO,EAAK,cACd,EACA,MAAO,CACL,QAAS,cACT,IAAK,6BACL,WAAY,QACd,EACA,WAAY,CACV,KAAM,WACN,SAAU,SACV,SAAU,UACZ,EAIA,4BAA6B,CAC3B,KAAM,eACN,cAAe,MACjB,EACA,kBAAmB,CACjB,WAAY,WACd,EACA,YAAa,CACX,QAAS,MACT,OAAQ,cACR,cAAe,MACjB,EACA,IAAK,CACH,WAAY,EAAK,OACjB,QAAS,EAAK,QACd,aAAc,8BACd,SAAU,OACV,SAAU,EAAK,aACf,WAAY,8BACd,EACA,YAAa,CACX,WAAY,EAAK,eACjB,WAAY,EAAK,UACnB,EACA,wBAAyB,CACvB,WAAY,MACd,EACA,UAAW,CACT,QAAS,IACT,SAAU,OACV,OAAQ,4CACR,WAAY,4CACZ,MAAO,4CACP,UAAW,QACb,EACA,oCAAqC,CACnC,WAAY,QACZ,UAAW,OACX,MAAO,EAAK,SACd,EACA,sCAAuC,CACrC,WAAY,QACZ,UAAW,OACX,MAAO,EAAK,SACd,EACA,kCAAmC,CACjC,WAAY,EAAK,UACnB,EACA,YAAa,CACX,OAAQ,UACR,aAAc,OACd,WAAY,iBACZ,WAAY,OACZ,QAAS,uDACX,EACA,gCAAiC,CAC/B,WAAY,EAAK,UACnB,EACA,0BAA2B,CACzB,QAAS,MACT,WAAY,CACd,EACA,eAAgB,CACd,OAAQ,kBACV,EACA,8BAA+B,CAC7B,WAAY,EAAK,OACnB,EACA,8BAA+B,CAC7B,MAAO,eACP,cAAe,MACjB,EACA,mBAAoB,CAClB,cAAe,QACjB,EACA,MAAO,CACL,eAAgB,UAClB,EACA,MAAO,CACL,WAAY,EAAK,WACjB,MAAO,EAAK,cACd,EACA,MAAO,CACL,WAAY,EAAK,UACnB,EACA,mBAAoB,CAClB,WAAY,EAAK,gBACnB,EACA,SAAU,CACR,QAAS,2CACX,EAGA,2BAA4B,CAC1B,UAAW,OACX,OAAQ,EACR,QAAS,CACX,EACA,cAAe,CACb,QAAS,OACT,cAAe,QACjB,EACA,WAAY,CACV,QAAS,OACT,cAAe,QACjB,EACA,wBAAyB,CACvB,YAAa,EAAK,OACpB,EAEA,mBAAoB,CAClB,OAAQ,UAER,YAAa,4BACf,EACA,2BAA4B,CAC1B,MAAO,EAAK,UACd,EACA,+BAAgC,CAC9B,QAAS,eAET,YAAa,4BACf,EAEA,cAAe,CACb,UAAW,OACX,QAAS,OACT,SAAU,OACV,IAAK,EAAK,QACV,OAAQ,EACR,QAAS,EAAK,OAChB,CACF,EC5GF,IAAQ,QAAM,QAAM,YAAU,SAAO,SAAO,SAAS,EAErD,SAAS,EAAI,CAAC,EAAsB,EAAc,EAAkB,CAClE,GAAI,IAAU,IAAM,IAAU,GAC5B,EAAQ,aAAa,EAAM,CAAK,EAEhC,OAAQ,gBAAgB,CAAI,EAIhC,SAAS,EAAa,CAAC,EAA8B,CACnD,OAAQ,EAAM,UACP,WACH,OAAO,EAAM,YACV,QAAS,CACZ,IAAM,EAAS,EAAM,eAAe,cAClC,6BAA6B,EAAM,gBACrC,EACA,OAAO,EAAS,EAAO,MAAQ,IACjC,KACK,YACA,SACH,OAAO,OAAO,EAAM,KAAK,UAEzB,OAAO,MAAM,QAAQ,EAAM,KAAK,GAAK,EAAM,MAAM,SAAW,EACxD,KACA,EAAM,OAIhB,SAAS,EAAe,CAAC,EAAuC,EAAY,CAC1E,GAAI,EAAE,aAAiB,aAAc,CAE9B,QAAI,aAAiB,iBAC1B,OAAQ,EAAM,UACP,WACH,EAAM,QAAU,EAChB,UACG,QACH,EAAM,QAAU,IAAU,EAAM,MAChC,cAEA,EAAM,MAAQ,OAAO,GAAS,EAAE,EAGpC,QAAI,GAAS,MAAS,EAA2B,OAAS,KACtD,EAA2B,MAAQ,OAAO,GAAS,EAAE,EAKtD,MAAM,WAAkB,CAAa,OACnC,kBAAmB,mBAEnB,gBAAiB,CACtB,uBAAwB,CACtB,SAAU,WACV,QAAS,OACT,WAAY,SACZ,IAAK,EAAW,gBAAgB,KAAK,CACvC,EACA,uCAAwC,CACtC,QAAS,cACX,EACA,sCAAuC,CACrC,QAAS,cACX,EACA,qDAAsD,CACpD,MAAO,MACT,EACA,iBAAkB,CAChB,OAAQ,MACV,EACA,+BAAgC,CAC9B,MAAO,aACT,EACA,gBAAiB,CACf,SAAU,WACV,cAAe,OACf,QAAS,CACX,CACF,QAEO,gBAAiB,CACtB,QAAS,GACT,IAAK,GACL,KAAM,GAQN,SAAU,GACV,QAAS,GACT,YAAa,GACb,IAAK,GACL,IAAK,GACL,KAAM,GACN,eAAgB,GAChB,OAAQ,GACR,OAAQ,EACV,EAEA,MAAa,KAEb,QAAU,GACR,GAAS,CAAE,KAAM,SAAU,CAAC,EAC5B,GACE,CAAE,KAAM,OAAQ,EAChB,GAAS,CAAE,KAAM,QAAS,KAAM,OAAQ,CAAC,EACzC,GAAM,CAAE,KAAM,aAAc,CAAC,CAC/B,CACF,EAEQ,aAAe,GACvB,aAAe,IAAM,CACnB,IAAQ,QAAO,eAAgB,KAAK,MAI9B,EAAgB,EAAM,SAAS,IAAM,EAC3C,GAAI,IAAiB,EACnB,EAAY,MAAQ,EAAa,MAEnC,KAAK,MAAQ,GAAc,CAAY,EACvC,KAAK,aAAe,GACpB,IAAM,EAAO,KAAK,QAAQ,WAAW,EACrC,GAAI,GAAQ,KAAK,MAAQ,GACvB,OAAQ,KAAK,UACN,WACH,EAAK,OAAO,KAAK,KAAO,EAAa,QACrC,UACG,aACA,QACH,GAAI,KAAK,eAAiB,GACxB,EAAa,MAAQ,OAAO,EAAa,KAAK,EAAE,QAC9C,KAAK,cACP,EACA,EAAK,OAAO,KAAK,KAAO,OAAO,EAAa,KAAK,EAEjD,OAAK,OAAO,KAAK,KAAO,OAAO,EAAa,KAAK,EAEnD,cAEA,EAAK,OAAO,KAAK,KAAO,EAAa,QAK7C,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EACxB,IAAQ,QAAO,eAAgB,KAAK,MAOpC,EAAY,iBAAiB,SAAU,KAAK,YAAY,EACxD,EAAM,iBAAiB,SAAU,KAAK,aAAc,EAAI,EAG1D,MAAM,EAAG,CACP,GAAI,KAAK,aAAc,CACrB,KAAK,aAAe,GACpB,OAEF,IAAQ,QAAO,UAAS,cAAa,SAAU,KAAK,MAMpD,GAAI,EAAQ,aAAa,KAAK,IAAM,GAClC,EAAQ,OAAO,KAAK,UAAY,GAAK,KAAK,QAAU,KAAK,GAAG,EAE9D,GAAI,KAAK,OAAS,OAAQ,CACxB,EAAM,YAAc,GACpB,IAAM,EAAW,EAAS,SAAS,CAAE,MAAO,KAAK,KAAM,CAAC,EACxD,GAAI,KAAK,YACP,EAAS,aAAa,cAAe,KAAK,WAAW,EAEvD,EAAM,OAAO,CAAQ,EAChB,QAAI,KAAK,OAAS,QACvB,EAAM,YAAc,GACpB,EAAM,OAAO,GAAW,CAAE,MAAO,KAAK,KAAM,CAAC,CAAC,EACzC,QAAI,EAAM,SAAS,SAAW,GAMnC,GALA,GAAK,EAAa,cAAe,KAAK,WAAW,EACjD,GAAK,EAAa,OAAQ,KAAK,IAAI,EACnC,GAAK,EAAa,UAAW,KAAK,OAAO,EACzC,GAAK,EAAa,MAAO,KAAK,GAAG,EACjC,GAAK,EAAa,MAAO,KAAK,GAAG,EAC7B,KAAK,KACP,GAAK,EAAa,OAAQ,KAAK,IAAI,EAC9B,QAAI,KAAK,eAAiB,GAAK,KAAK,OAAS,SAClD,GAAK,EAAa,OAAQ,KAAK,IAAI,GAAI,CAAC,KAAK,cAAc,CAAC,EAMhE,GAHA,GAAgB,EAAa,KAAK,KAAK,EACvC,GAAgB,EAAM,SAAS,GAAmB,KAAK,KAAK,EAExD,KAAK,OACP,EAAM,aAAa,SAAU,KAAK,MAAM,EAExC,OAAM,gBAAgB,QAAQ,EAEhC,GAAI,KAAK,OACP,EAAM,aAAa,SAAU,KAAK,MAAM,EAExC,OAAM,gBAAgB,QAAQ,EAIhC,GADA,EAAY,UAAU,OAAO,SAAU,EAAM,SAAS,OAAS,CAAC,EAC5D,EAAM,SAAS,OAAS,EAC1B,EAAY,aAAa,WAAY,IAAI,EAEzC,OAAY,gBAAgB,UAAU,EAExC,EAAM,MAAM,QAAU,EAAM,SAAS,SAAW,EAAI,OAAS,GAC7D,GAAK,EAAa,WAAY,CAAC,KAAK,QAAQ,EAEhD,CAEO,MAAM,WAAiB,CAAa,OAClC,kBAAmB,YAE1B,QAAU,CAAC,EACX,MAAQ,CAAC,KACL,QAAO,EAAY,CAIrB,MAFE,CAAC,GAAG,KAAK,iBAAiB,GAAG,CAAC,EAC9B,OAAO,CAAC,IAAW,EAAO,WAAa,MAAS,EACnC,KAAK,CAAC,IAAW,CAAC,EAAO,eAAe,CAAC,IAAM,aAGzD,iBAAkB,CACvB,QAAS,CACP,QAAS,OACT,cAAe,QACjB,EACA,2CAA4C,CAC1C,QAAS,MACX,EACA,uBAAwB,CACtB,QAAS,OACT,cAAe,SACf,SAAU,cACV,OAAQ,OACR,MAAO,OACP,SAAU,WACV,UAAW,YACb,EACA,aAAc,CACZ,QAAS,OACT,KAAM,WACN,SAAU,WACV,SAAU,QACZ,CACF,EAEA,QAAU,CACR,GAAK,CAAE,KAAM,SAAU,KAAM,QAAS,CAAC,EACvC,GAAK,CAAE,KAAM,MAAO,EAAG,GAAK,CAAE,KAAM,SAAU,CAAC,CAAC,EAChD,GAAK,CAAE,KAAM,SAAU,KAAM,QAAS,CAAC,CACzC,EAEA,SAAW,CAAC,IAAkC,CAC5C,OAAO,KAAK,cAAc,mBAAmB,KAAO,MAGlD,OAAM,EAAQ,CAChB,GAAI,OAAO,KAAK,QAAU,SACxB,GAAI,CACF,KAAK,MAAQ,KAAK,MAAM,KAAK,KAAK,EAClC,KAAM,CACN,QAAQ,IAAI,yDAAyD,EACrE,KAAK,MAAQ,CAAC,EAGlB,IAAQ,YAAa,KACf,EAAW,KAAK,cAAc,KAAK,IAAI,EAC7C,OAAO,IAAI,MAAM,KAAK,MAAO,CAC3B,GAAG,CAAC,EAAQ,EAAmB,CAC7B,OAAO,EAAO,IAGhB,GAAG,CAAC,EAAQ,EAAc,EAAwB,CAChD,GAAI,EAAO,KAAU,EAAU,CAC7B,EAAO,GAAQ,EACf,IAAM,EAAQ,EAAS,CAAI,EAC3B,GAAI,EACF,EAAM,MAAQ,EAEhB,EAAS,IAAI,MAAM,QAAQ,CAAC,EAE9B,MAAO,GAEX,CAAC,KAGC,OAAM,CAAC,EAAgC,CACzC,IAAM,EAAS,CAAC,GAAG,KAAK,iBAAiB,YAAY,CAAC,EACtD,QAAW,KAAS,EAClB,EAAM,MAAQ,EAAO,EAAM,KAI/B,OAAS,IAAM,CACb,KAAK,MAAM,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC,GAGnD,aAAe,CAAC,IAAuB,CACrC,EAAM,eAAe,EACrB,EAAM,gBAAgB,EAEtB,KAAK,gBAAgB,EACrB,IAAM,EAAQ,KAAK,OACnB,KAAK,eAAe,EAAO,KAAK,OAAO,GAGzC,eAAiB,CAAC,EAA+B,IAA2B,CAC1E,QAAQ,IAAI,8CAA+C,CACzD,QACA,SACF,CAAC,GAGH,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EACxB,IAAQ,QAAS,KAAK,MACtB,EAAK,iBAAiB,SAAU,KAAK,YAAY,EAIjD,KAAK,iBAAiB,SAAU,KAAK,oBAAqB,EAAI,EAG9D,KAAK,wBAAwB,EAGvB,oBAAsB,CAAC,IAAiB,CAC9C,IAAM,EAAS,EAAM,OACf,EAAO,EAAO,aAAa,MAAM,EACvC,GAAI,GAAQ,UAAW,EACrB,KAAK,OAAO,GAAS,EAAe,OAIhC,eAAe,EAAS,CAC9B,IAAM,EAAY,KAAK,OACjB,EAAgB,KAAK,iBACzB,eACF,EACA,QAAW,KAAM,EAAe,CAC9B,IAAM,EAAM,EAAG,aAAa,MAAM,GAAK,EAAG,aAAa,KAAK,EAC5D,GAAI,CAAC,EAAK,SACV,GAAI,EAAU,KAAS,OAAW,CAChC,IAAM,EAAO,EAAW,OAAS,EAAG,aAAa,OAAO,EACxD,GAAI,GAAO,KACT,EAAU,GAAO,IAMjB,uBAAuB,EAAS,CACtC,IAAM,EAAY,KAAK,OAEjB,EAAgB,KAAK,iBACzB,eACF,EACA,QAAW,KAAM,EAAe,CAC9B,IAAM,EAAM,EAAG,aAAa,MAAM,GAAK,EAAG,aAAa,KAAK,EAC5D,GAAI,CAAC,EAAK,SACV,GAAI,EAAU,KAAS,OACnB,EAAW,MAAQ,EAAU,IAIvC,CAKO,IAAM,GAA6B,GAK7B,GAA2B,GAE3B,GAAY,GAAU,eAAe,EAErC,GAAW,GAAS,eAAe,EAGnC,GAAW,GAGX,GAAU,GChyBvB,IAAQ,MAAI,SAAS,EAMf,GAAW,6CAEjB,MAAM,WAAyB,CAAa,OACnC,kBAAmB,4BAEnB,gBAAiB,CACtB,gBAAiB,GACjB,eAAgB,EAClB,EAEA,QAAU,IAAM,CACd,GAAG,CAAE,KAAM,OAAQ,EAAG,eAAe,EACrC,GAAS,CAAE,KAAM,YAAa,eAAgB,KAAK,MAAO,CAAC,CAC7D,EAKQ,WACA,QAAU,EAElB,SAAW,IAAM,CACf,IAAQ,QAAO,aAAc,KAAK,MAIlC,GAFA,EAAU,YAAc,GAEpB,CAAC,KAAK,gBAAiB,OAC3B,EAAM,YAAc,qBAAqB,KAAK,kBAE9C,IAAM,EAAU,SAAS,cAAc,KAAK,eAAe,EAC3D,GAAI,CAAC,EAAS,CACZ,GAAI,KAAK,UAAY,GAAI,KAAK,WAAa,WAAW,KAAK,SAAU,GAAG,EACxE,OAGF,IAAM,EAAY,EAAQ,WACtB,EAAQ,WAAW,cAAc,OAAO,EACxC,SAAS,cAAc,SAAS,KAAK,2BAA2B,EACpE,GAAI,CAAC,GAAa,CAAC,EAAU,YAAa,OAE1C,IAAM,EAAgB,iBAAiB,CAAO,EACxC,EAAU,CACd,GAAG,IAAI,IAAY,EAAU,YAAY,MAAM,WAAW,GAAK,CAAC,CAAC,CACnE,EAEA,QAAW,KAAU,EAAS,CAC5B,IAAI,EAAQ,EAAc,iBAAiB,CAAM,EAAE,KAAK,EAClD,EAAO,GAAS,KAAK,CAAK,EAAI,QAAU,SAC9C,GAAI,IAAS,QAAS,EAAQ,EAAM,QAAQ,CAAK,EAAE,KACnD,EAAU,OAAO,GAAU,GAAK,CAAM,EAAG,CAAE,IAAK,EAAQ,QAAO,MAAK,CAAC,CAAC,IAI1E,OAAS,IAAM,CACb,IAAM,EAAW,KAAK,gBAAkB,KAAK,gBAC7C,GAAI,CAAC,EAAU,OACf,IAAM,EAAU,CAAC,GAAG,SAAS,iBAAiB,CAAQ,CAAC,GAC/C,SAAU,KAAK,MAAM,UAC7B,QAAW,KAAU,EACnB,QAAW,KAAO,OAAO,KAAK,CAAK,EACjC,EAAO,MAAM,YAAY,EAAK,EAAM,EAAI,GAK9C,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EACxB,KAAK,QAAU,EACf,KAAK,SAAS,EACd,KAAK,MAAM,UAAU,iBAAiB,SAAU,KAAK,MAAM,EAG7D,oBAAoB,EAAG,CAErB,GADA,MAAM,qBAAqB,EACvB,KAAK,WAAY,aAAa,KAAK,UAAU,EAErD,CAEO,IAAM,GACX,GAAiB,eAAe,ECtBlC,IAAQ,UAAQ,QAAQ,EAOlB,GAAY,wBAEX,MAAM,WAAsB,CAAU,OACpC,kBAAmB,wBAEnB,gBAAiB,CACtB,KAAM,aACN,OAAQ,GACR,UAAW,GAKX,QAAS,GAIT,MAAO,GAEP,OAAQ,GACR,WAAY,GACZ,KAAM,EACR,EAGA,QAIA,QAAU,KAGF,OACA,QAKA,aAAe,GACf,WAAa,GAMb,YAAY,EAAW,CAC7B,IAAI,EAAQ,EACR,EAAoB,KAAK,WAC7B,MAAO,EAAM,CACX,GACE,EAAK,WAAa,KAAK,cACtB,EAAiB,UAAY,kBAE9B,IAEF,EAAO,EAAK,YAAe,EAAoB,MAAQ,KAEzD,OAAO,EAID,MACA,cAAgB,GAIhB,WAAW,EAAS,CAC1B,GAAI,KAAK,cAAe,OAKxB,GAJA,KAAK,cAAgB,GAIjB,CAAC,SAAS,cAAc,4BAA4B,EACtD,GACE,kBACA,GAAmB,CACjB,OAAQ,KAAK,QAAU,OACvB,WAAY,KAAK,YAAc,OAC/B,KAAM,KAAK,MAAQ,MACrB,CAAC,CACH,EAII,gBAAkB,IAAY,CACpC,IAAM,EAAQ,KAAK,MAAM,MAAM,MACzB,EACJ,IAAU,QACT,IAAU,UAAY,WAAW,8BAA8B,EAAE,QAC9D,EAAW,KAAK,MAAM,aAAa,MACzC,SAAS,KAAK,UAAU,OAAO,WAAY,CAAI,EAC/C,SAAS,KAAK,UAAU,OAAO,gBAAiB,CAAQ,EAQxD,SAAS,gBAAgB,UAAU,OAAO,WAAY,CAAI,EAC1D,SAAS,gBAAgB,UAAU,OAAO,gBAAiB,CAAQ,GAG7D,YAAY,EAAS,CAC3B,GAAI,CACF,aAAa,QACX,GACA,KAAK,UAAU,CACb,MAAO,KAAK,MAAM,MAAM,MACxB,aAAc,KAAK,MAAM,aAAa,MACtC,OAAQ,KAAK,MAAM,OAAO,KAC5B,CAAC,CACH,EACA,KAAM,GAKF,SAAS,EAAS,CACxB,IAAI,EAAa,CAAC,EAClB,GAAI,CACF,EAAQ,KAAK,MAAM,aAAa,QAAQ,EAAS,GAAK,IAAI,EAC1D,KAAM,EAGR,KAAK,MAAQ,EAAK,CAChB,MAAO,CACL,MAAO,EAAM,OAAS,SACtB,aAAc,EAAM,cAAgB,GACpC,OAAQ,EAAM,QAAU,EAC1B,CACF,CAAC,EAAE,MAEH,KAAK,gBAAgB,EACrB,WAAW,8BAA8B,EAAE,iBACzC,SACA,KAAK,eACP,EACA,KAAK,MAAM,MAAM,QAAQ,IAAM,CAC7B,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,EACD,KAAK,MAAM,aAAa,QAAQ,IAAM,CACpC,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,EACD,KAAK,MAAM,OAAO,QAAQ,IAAM,KAAK,aAAa,CAAC,OAKvC,WAAU,EAAkB,CACxC,GAAI,CAAC,KAAK,UAAW,OACrB,GAAI,CACF,IAAM,EAAO,MAAO,MAAM,MAAM,KAAK,SAAS,GAAG,KAAK,EAEtD,GADA,GAAiB,CAAI,EACjB,KAAK,MAAM,OAAO,MAAO,GAAU,KAAK,MAAM,OAAO,KAAK,EAC9D,MAAO,EAAO,CACd,QAAQ,KACN,qDACA,KAAK,UACL,CACF,GAMI,cAAc,EAAgB,CACpC,OAAO,GACL,CACE,MAAO,SAGP,MAAO,CAAE,MAAO,EAAK,SAAU,EAC/B,MAAO,WACP,QAAS,CAAC,IAAiB,CACzB,IAAM,EAAmB,CAAC,EAGtB,EAAc,GAClB,GAAI,CACF,EAAc,KAAK,MAAM,KAAK,QAAU,IAAI,EAAE,aAAe,GAC7D,KAAM,EAGR,IAAM,EAAY,GAAe,SAAS,OAAS,gBACnD,EAAU,KAAK,CACb,QAAS,eACT,KAAM,UACN,OAAQ,IAAM,CACZ,IAAM,EAAM,OAAO,KAAK,GAAI,QAAQ,EACpC,GAAI,CAAC,EAAK,CACR,OAAO,MACL,qDACF,EACA,OAEF,EAAI,SAAS,KAAK,EAClB,EAAI,SAAS,MACX,GAAc,KAAK,OAAe,CAChC,MAAO,EACP,UAAW,EACb,CAAC,CACH,EACA,EAAI,SAAS,MAAM,EAEvB,CAAC,EACD,EAAU,KAAK,CACb,QAAS,gBACT,KAAM,OACN,OAAQ,IAAM,CACZ,IAAM,EAAO,SAAS,cAAc,GAAG,EACvC,EAAK,KAAO,IAAI,GAAQ,CAAS,SACjC,EAAK,SAAW,GAChB,EAAK,MAAM,EAEf,CAAC,EACD,EAAU,KAAK,IAAI,EAEnB,IAAM,EAAiB,EAAK,cAAc,OAAmB,CAAC,EAC9D,GAAI,EAAc,OAAS,EACzB,EAAU,KAAK,CACb,QAAS,WACT,KAAM,QACN,UAAW,EAAc,IAAI,CAAC,KAAY,CACxC,QAAS,EAAO,QAChB,KAAM,EAAO,KACb,QAAS,IAAM,EAAO,QAAU,EAAK,OAAO,MAC5C,OAAQ,IAAM,CACZ,KAAK,MAAM,OAAO,MAAQ,EAAO,MACjC,GAAU,EAAO,KAAK,EAE1B,EAAE,CACJ,CAAC,EAEH,EAAU,KAAK,CACb,QAAS,cACT,KAAM,MACN,UAAW,CACT,CACE,QAAS,SACT,QAAS,IAAM,KAAK,MAAM,MAAM,QAAU,SAC1C,OAAQ,IAAO,KAAK,MAAM,MAAM,MAAQ,QAC1C,EACA,CACE,QAAS,OACT,QAAS,IAAM,KAAK,MAAM,MAAM,QAAU,OAC1C,OAAQ,IAAO,KAAK,MAAM,MAAM,MAAQ,MAC1C,EACA,CACE,QAAS,QACT,QAAS,IAAM,KAAK,MAAM,MAAM,QAAU,QAC1C,OAAQ,IAAO,KAAK,MAAM,MAAM,MAAQ,OAC1C,EACA,KACA,CACE,QAAS,gBACT,QAAS,IAAM,KAAK,MAAM,aAAa,MACvC,OAAQ,IACL,KAAK,MAAM,aAAa,MACvB,CAAC,KAAK,MAAM,aAAa,KAC/B,CACF,CACF,CAAC,EACD,EAAQ,CACN,OAAQ,EAAM,OACd,UAAW,GACX,WACF,CAAC,EAEL,EACA,EAAM,aAAa,CACrB,EAOM,UAAU,CAAC,EAA8B,CAC/C,IAAM,EAAO,KAAK,cAAc,CAAQ,EACxC,GAAI,CAAC,EAAM,MAAO,CAAC,EACnB,MAAO,CAAC,GAAG,EAAK,iBAAiB,GAAG,CAAC,EAAE,IAAI,CAAC,KAAY,CACtD,KAAM,EAAO,aAAa,MAAM,GAAK,GACrC,OAAQ,EAAO,aAAe,IAAI,KAAK,EACvC,KAAO,EAAuB,QAAQ,MAAQ,MAChD,EAAE,EAGJ,iBAAiB,EAAS,CAMxB,GALA,MAAM,kBAAkB,EAKpB,KAAK,aAAa,GAAK,EAAG,CAC5B,KAAK,WAAa,GAClB,KAAK,gBACH,GACE,CAAE,MAAO,mBAAoB,EAC7B,qDACF,CACF,EACA,OAMF,GAJA,KAAK,YAAY,EACjB,KAAK,UAAU,EACV,KAAK,WAAW,EAEjB,KAAK,SAAW,OAAW,CAC7B,IAAM,EAAM,KAAK,MAAQ,aACzB,MAAM,CAAG,EACN,KAAK,CAAC,IAAa,EAAS,KAAK,CAAC,EAClC,KAAK,CAAC,IAAkB,CACvB,KAAK,OAAS,EAGd,IAAM,EAAS,GAAgB,SAAS,OAAQ,GAAa,CAAM,CAAC,EACpE,GAAI,EAAQ,CACV,GAAI,IAAW,SAAS,SAAU,CAEhC,SAAS,QAAQ,EAAS,SAAS,IAAI,EACvC,OAGF,QAAQ,aAAa,KAAM,GAAI,EAAS,SAAS,IAAI,EAEvD,KAAK,YAAY,EAClB,EACA,MAAM,CAAC,IACN,QAAQ,MACN,6CACA,EACA,CACF,CACF,GAIN,MAAM,EAAS,CAEb,GADA,MAAM,OAAO,EACT,KAAK,YAAc,KAAK,SAAW,OAAW,OAKlD,GAAI,KAAK,UAAY,OAAW,CAC9B,IAAM,EAAY,KAAK,QAAgB,SAGvC,GAAI,GAAY,KAAK,OAAS,KAAK,QAAU,KAAK,aAChD,KAAK,aAAe,KAAK,MACzB,EAAS,KAAK,KAAK,EAErB,OAGF,IAAI,EAA0B,CAAC,EAC/B,GAAI,KAAK,OACP,GAAI,CACF,EAAS,KAAK,MAAM,KAAK,MAAM,EAC/B,KAAM,CACN,QAAQ,KAAK,qDAAqD,EAMtE,IAAM,EAAS,KAAK,aAAa,GAAK,EAChC,EACJ,GAAU,KAAK,UAAY,UAAY,KAAK,UAAY,WAKpD,EACH,KAAK,cAAc,cAAc,GAA4B,OAG1D,EAAc,KAAK,WAAW,aAAa,EA2BjD,GAzBA,KAAK,aAAe,KAAK,MAEzB,KAAK,QAAU,GAAiB,CAC9B,KAAM,KAAK,OACX,QAAS,EAAS,SAAW,OAC7B,aAAc,EAAS,KAAK,OAAS,OAAY,OACjD,cAAe,EACX,CAAC,IAAiB,CAEhB,KAAK,aAAe,EACpB,KAAK,MAAQ,GAEf,OACJ,QAAS,KAAK,SAAW,CACvB,OAAS,WAAmB,MAC5B,YAAc,WAAmB,OACnC,EACA,YAAa,EAAO,YACpB,aAAc,EAAO,aACrB,YAAa,EAAY,OAAS,EAAc,OAChD,gBACF,CAAC,EAIG,CAAC,EAAQ,CACX,IAAM,EAAS,KAAK,QAAQ,cAAc,QAAQ,EAClD,GAAI,EAAQ,EAAO,OAAO,KAAK,eAAe,CAAC,EAGjD,KAAK,gBAAgB,KAAK,OAAO,EAQrC,CAEO,IAAM,GACX,GAAc,eAAe,EAO/B,SAAS,EAAkB,EAAS,CAClC,GAAI,OAAO,SAAa,IAAa,OACrC,IAAM,EAAO,WACV,uBACH,GAAI,CAAC,EAAK,OACE,4CACT,KAAK,EAAG,4BAA6B,EAAuB,CAAG,CAAC,EAChE,MAAM,CAAC,IAAM,QAAQ,KAAK,uCAAwC,CAAC,CAAC,EAEzE,GAAmB,ECjcnB,IAAQ,OAAK,SAAS,EAWf,MAAM,WAAqB,CAAU,OACnC,kBAAmB,sBAEnB,gBAAiB,CACtB,aAAc,EACd,aAAc,CAChB,QAEO,WAAY,SACZ,UAAW,QACX,WAAY,SACZ,YAAa,SAEb,iBAAkB,CACvB,QAAS,CACP,cAAe,QACf,iBAAkB,QAClB,oBAAqB,QACrB,uBAAwB,OACxB,gBAAiB,OACjB,mBAAoB,KACtB,EACA,qBAAsB,CACpB,SAAU,UACZ,EACA,2BAA4B,CAC1B,UAAW,aACX,QAAS,MACT,SAAU,WACV,QAAS,OACT,OAAQ,EAAK,WACb,MAAO,EAAK,WACZ,QAAS,EAAK,cACd,eAAgB,EAAK,YACrB,WAAY,EAAK,QACnB,EACA,qBAAsB,CACpB,IAAK,EACL,OAAQ,EACR,KAAM,EACN,MAAO,EACP,OAAQ,OACR,MAAO,OACP,WAAY,cACZ,OAAQ,WACV,EACA,0BAA2B,CACzB,UAAW,cAAc,EAAK,gBAChC,EACA,uEAAwE,CACtE,QAAS,MACX,EACA,qBAAsB,CACpB,QAAS,GACX,EACA,YAAa,CACX,cAAe,MACjB,EACA,kBAAmB,CACjB,eAAgB,EAAK,iBACrB,WAAY,EAAK,aACnB,CACF,QAEO,cAAa,CAAC,EAAqB,EAA4B,CACpE,IAAQ,YAAa,GACrB,OAAO,GAAa,YAAc,EAAM,SACpC,EAAO,IAAI,CAAC,IAAM,KAAK,MAAM,EAAI,CAAQ,EAAI,CAAQ,EACrD,QAGC,aAAY,CAAC,EAAqB,EAAmB,CAC1D,IAAQ,aAAc,GACtB,OAAO,GAAa,WAAa,EAAM,SACnC,KAAK,MAAM,EAAI,CAAS,EAAI,EAC5B,KAGF,OAAM,EAAU,CAClB,IAAM,EAAU,KAAK,cACrB,GAAI,EAAQ,MAAM,MAChB,MAAO,CAAE,KAAM,GAAM,IAAK,GAAM,OAAQ,GAAM,MAAO,EAAK,EAE5D,IAAM,EAAQ,EAAQ,MAAM,MAAM,MAAM,IAAI,IAAM,KAC5C,EAAO,CAAC,GAAS,EAAQ,MAAM,KAAK,MAAM,IAAI,IAAM,KACpD,EAAS,EAAQ,MAAM,OAAO,MAAM,IAAI,IAAM,KAC9C,EAAM,CAAC,GAAU,EAAQ,MAAM,IAAI,MAAM,IAAI,IAAM,KACzD,MAAO,CAAE,OAAM,MAAK,SAAQ,OAAM,KAGhC,OAAM,CAAC,EAAc,CACvB,IAAQ,SAAQ,SAAU,GACpB,OAAM,OAAQ,EACd,EAAU,KAAK,cACf,EAAI,EAAQ,WACZ,EAAI,EAAQ,UACZ,EAAI,EAAQ,YACZ,EAAI,EAAQ,aACZ,EAAK,EAAQ,aAA6B,YAAc,EAAI,EAC5D,EAAK,EAAQ,aAA6B,aAAe,EAAI,EASnE,GARA,OAAO,OAAO,EAAQ,MAAO,CAC3B,KAAM,GACN,MAAO,GACP,IAAK,GACL,OAAQ,GACR,MAAO,GACP,OAAQ,EACV,CAAC,EACG,CAAC,EAAO,EAAO,GACnB,GAAI,CAAC,EAAQ,EAAM,GACnB,GAAI,EAAM,EAAQ,MAAM,KAAO,EAAI,KACnC,GAAI,EAAO,EAAQ,MAAM,MAAQ,EAAI,KACrC,GAAI,GAAQ,EACV,EAAQ,MAAM,MAAQ,OAEtB,OAAQ,MAAM,MAAQ,EAAI,KAE5B,GAAI,EAAK,EAAQ,MAAM,IAAM,EAAI,KACjC,GAAI,EAAQ,EAAQ,MAAM,OAAS,EAAI,KACvC,GAAI,GAAO,EACT,EAAQ,MAAM,OAAS,OAEvB,OAAQ,MAAM,OAAS,EAAI,KAE7B,KAAK,YAAY,KAGf,OAAM,EAAiE,CACzE,IAAQ,MAAK,OAAM,QAAO,UAAW,KAAK,cAAe,MACzD,MAAO,CACL,IAAK,WAAW,CAAG,EACnB,KAAM,WAAW,CAAI,EACrB,MAAO,WAAW,CAAK,EACvB,OAAQ,WAAW,CAAM,CAC3B,KAGE,KAAI,EAAW,CACjB,OAAO,KAAK,cAAe,cAGzB,MAAK,EAAW,CAClB,OAAO,KAAK,cAAe,eAGzB,MAAK,EAAW,CAClB,OACG,KAAK,cAAe,aAA6B,aACjD,KAAK,KAAO,KAAK,UAIlB,IAAG,EAAW,CAChB,OAAO,KAAK,cAAe,aAGzB,OAAM,EAAW,CACnB,OAAO,KAAK,cAAe,gBAGzB,OAAM,EAAW,CACnB,OACG,KAAK,cAAe,aAA6B,cACjD,KAAK,IAAM,KAAK,QAIrB,cAAgB,IAAM,CACpB,KAAK,cAAe,cAClB,IAAI,MAAM,SAAU,CAClB,QAAS,GACT,SAAU,EACZ,CAAC,CACH,GAGF,eAAiB,CAAC,IAAiB,CAEjC,IAAQ,UAAW,KACnB,KAAK,OAAS,EACd,IAAM,EAAS,KAAK,eACZ,MAAK,OAAM,SAAQ,SAAU,KAAK,OAC1C,GAAU,EAAuB,CAAC,EAAI,EAAI,IAAc,CAEtD,GADC,CAAC,EAAI,CAAE,EAAI,GAAa,cAAc,EAAW,CAAC,EAAI,CAAE,CAAC,EACtD,CAAC,MAAM,CAAG,EACZ,EAAO,MAAM,IAAM,EAAM,EAAK,KAEhC,GAAI,CAAC,MAAM,CAAM,EACf,EAAO,MAAM,OAAS,EAAS,EAAK,KAEtC,GAAI,CAAC,MAAM,CAAI,EACb,EAAO,MAAM,KAAO,EAAO,EAAK,KAElC,GAAI,CAAC,MAAM,CAAK,EACd,EAAO,MAAM,MAAQ,EAAQ,EAAK,KAEpC,GAAI,EAAU,OAAS,UAErB,OADA,KAAK,cAAc,EACZ,GAEV,GAGH,OAAS,CAAC,IAAiB,CACzB,IAAM,EAAS,KAAK,eACZ,UAAW,KACnB,KAAK,OAAS,OAAO,OAAO,CAC1B,KAAM,GACN,IAAK,GACL,MAAO,GACP,OAAQ,EACV,CAAC,EACD,IAAO,EAAO,GAAU,CAAC,KAAK,MAAO,KAAK,MAAM,EAEhD,GAAU,EAAuB,CAAC,EAAI,EAAI,IAAc,CACtD,IAAI,EAAI,EAAQ,EACZ,EAAI,EAAS,EAIjB,GAHC,CAAC,EAAG,CAAC,EAAI,GAAa,cAAc,EAA2B,CAAC,EAAG,CAAC,CAAC,EACtE,EAAO,MAAM,MAAQ,EAAI,KACzB,EAAO,MAAM,OAAS,EAAI,KACtB,EAAU,OAAS,UAGrB,OAFA,KAAK,OAAS,EACd,KAAK,cAAc,EACZ,GAEV,GAGH,WAAa,CAAC,IAAiB,CAC7B,IAAM,EAAS,KAAK,eACZ,UAAW,KACb,EAAa,EAAM,OAAuB,aAAa,MAAM,EACnE,KAAK,OAAS,OAAO,OAAO,CAC1B,KAAM,GACN,MAAO,GACP,IAAK,GACL,OAAQ,EACV,CAAC,EACD,IAAM,EAAW,KAAK,GAEtB,GAAU,EAAuB,CAAC,EAAI,EAAI,IAAc,CACtD,IAAO,GAAY,GAAa,cAAc,EAAW,CACvD,GACG,CAAC,OAAQ,OAAO,EAAE,SAAS,CAAS,EAAI,EAAK,IAC3C,CAAC,QAAS,QAAQ,EAAE,SAAS,CAAS,EAAI,GAAK,EACtD,CAAC,EAED,GADA,EAAO,MAAM,GAAa,EAAW,KACjC,EAAU,OAAS,UAGrB,OAFA,KAAK,OAAS,EACd,KAAK,cAAc,EACZ,GAEV,MAGC,KAAI,EAAY,CAClB,OAAO,KAAK,cAAe,sBAAsB,KAG/C,OAAM,EAA6B,CACrC,IAAM,EAAO,KAAK,cAAe,sBAAsB,EACvD,MAAO,CACL,EAAG,EAAK,EAAI,EAAK,MAAQ,IACzB,EAAG,EAAK,EAAI,EAAK,OAAS,GAC5B,KAGE,QAAO,EAAgB,CACzB,OAAO,KAAK,cAGd,eAAiB,CAAC,IAAiB,CACjC,IAAQ,UAAW,MACX,mBAAoB,KAAK,QAAQ,MACzC,GAAI,CAAC,EACH,KAAK,QAAQ,MAAM,gBAAkB,UAEvC,GAAU,EAAuB,CAAC,EAAK,EAAK,IAA4B,CACtE,IAAQ,UAAS,WAAY,EACvB,EAAI,EAAU,EAAO,EACrB,EAAI,EAAU,EAAO,EACvB,EAAQ,EAAI,EAAI,GAAK,IACzB,GAAI,IAAM,EACR,EAAS,KAAK,MAAM,EAAG,CAAC,EAAI,IAAO,KAAK,GAG1C,GADA,EAAQ,GAAa,aAAa,EAAW,CAAK,EAC9C,IAAU,EACZ,KAAK,QAAQ,MAAM,gBAAkB,GACrC,KAAK,QAAQ,MAAM,UAAY,GAE/B,UAAK,QAAQ,MAAM,UAAY,UAAU,QAG3C,OADA,KAAK,cAAc,EACZ,EAAU,OAAS,UAC3B,GAGH,WAAa,CAAC,IAAiB,CAC7B,IAAQ,UAAW,KACb,EAAS,EAAM,OAAuB,MAAM,MAAM,GAAG,EAAE,GAC7D,EAAO,GAAS,CAAC,EAAO,GACxB,KAAK,OAAS,EACd,KAAK,YAAY,EACjB,EAAM,gBAAgB,EACtB,EAAM,eAAe,GAGvB,QAAU,IAAM,CACd,GACE,CACE,KAAM,OACN,MAAO,CAAE,IAAK,MAAO,KAAM,MAAO,UAAW,sBAAuB,CACtE,EACA,EAAM,KAAK,CACb,EACA,GAAI,CACF,KAAM,OACN,MAAO,cACP,MAAO,YACP,MAAO,CAAE,KAAM,OAAQ,MAAO,KAAM,CACtC,CAAC,EACD,GAAI,CACF,KAAM,QACN,MAAO,eACP,MAAO,YACP,MAAO,CAAE,KAAM,mBAAoB,MAAO,KAAM,CAClD,CAAC,EACD,GAAI,CACF,KAAM,MACN,MAAO,aACP,MAAO,YACP,MAAO,CAAE,IAAK,OAAQ,OAAQ,MAAO,OAAQ,WAAY,CAC3D,CAAC,EACD,GAAI,CACF,KAAM,SACN,MAAO,gBACP,MAAO,YACP,MAAO,CAAE,IAAK,mBAAoB,OAAQ,MAAO,OAAQ,WAAY,CACvE,CAAC,EACD,GACE,CACE,KAAM,SACN,MAAO,CAAE,IAAK,OAAQ,KAAM,MAAO,CACrC,EACA,EAAM,OAAO,CACf,EACA,GACE,CACE,KAAM,SACN,MAAO,CAAE,IAAK,MAAO,MAAO,GAAI,CAClC,EACA,EAAM,UAAU,CAClB,EACA,GACE,CACE,KAAM,WACN,MAAO,YACP,MAAO,CAAE,IAAK,MAAO,KAAM,EAAG,UAAW,wBAAyB,CACpE,EACA,EAAM,OAAO,EACb,EAAM,KAAK,CACb,EACA,GACE,CACE,KAAM,YACN,MAAO,aACP,MAAO,CAAE,IAAK,MAAO,KAAM,OAAQ,UAAW,qBAAsB,CACtE,EACA,EAAM,OAAO,EACb,EAAM,KAAK,CACb,EACA,GACE,CACE,KAAM,UACN,MAAO,WACP,MAAO,CAAE,IAAK,EAAG,KAAM,MAAO,UAAW,wBAAyB,CACpE,EACA,EAAM,OAAO,EACb,EAAM,KAAK,CACb,EACA,GACE,CACE,KAAM,aACN,MAAO,cACP,MAAO,CAAE,IAAK,OAAQ,KAAM,MAAO,UAAW,qBAAsB,CACtE,EACA,EAAM,OAAO,EACb,EAAM,KAAK,CACb,EACA,GAAK,CACP,EAEA,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAExB,IACE,OACA,QACA,MACA,SACA,WACA,YACA,UACA,aACA,OACA,SACA,UACE,KAAK,MAEH,EAAU,CAAE,QAAS,EAAK,EAC/B,CAAC,EAAM,EAAO,EAAK,CAAM,EAAE,QAAQ,CAAC,IAAQ,CAC3C,EAAI,iBAAiB,YAAa,KAAK,WAAY,CAAO,EAC1D,EAAI,iBAAiB,aAAc,KAAK,WAAY,CAAO,EAC5D,EACA,CAAC,EAAU,EAAW,EAAS,CAAU,EAAE,QAAQ,CAAC,IAAQ,CAC3D,EAAI,iBAAiB,QAAS,KAAK,UAAU,EAC9C,EACD,EAAO,iBAAiB,YAAa,KAAK,OAAQ,CAAO,EACzD,EAAK,iBAAiB,YAAa,KAAK,eAAgB,CAAO,EAC/D,EAAO,iBAAiB,YAAa,KAAK,eAAgB,CAAO,EACjE,EAAO,iBAAiB,aAAc,KAAK,OAAQ,CAAO,EAC1D,EAAK,iBAAiB,aAAc,KAAK,eAAgB,CAAO,EAChE,EAAO,iBAAiB,aAAc,KAAK,eAAgB,CAAO,EAGpE,MAAM,EAAG,CAGP,GAFA,MAAM,OAAO,EAET,CAAC,KAAK,cACR,OAGF,IAAQ,WAAU,YAAW,UAAS,cAAe,KAAK,OAClD,OAAM,QAAO,MAAK,UAAW,KAAK,OAE1C,EAAS,gBAAgB,SAAU,CAAI,EACvC,EAAU,gBAAgB,SAAU,CAAK,EACzC,EAAQ,gBAAgB,SAAU,CAAG,EACrC,EAAW,gBAAgB,SAAU,CAAM,EAE/C,CAEO,IAAM,GAAe,GAAa,eAAe,ECpXxD,IAAQ,OAAK,SAAO,UAAQ,SAAS,EAK/B,GAAW,CAAC,IAAiB,EAC7B,GAA0B,kCASnB,GAAmD,CAC9D,SAAU,CACR,QAAS,WACT,SAAU,mBACV,SAAU,CAAC,IAAkB,CAE3B,OADA,EAAQ,EAAM,kBAAkB,EACzB,CAAC,IAAa,OAAO,CAAG,EAAE,kBAAkB,EAAE,SAAS,CAAK,EAEvE,EACA,QAAS,CACP,QAAS,WACT,SAAU,CAAC,IAAkB,CAC3B,IAAM,EAAO,EACV,MAAM,OAAO,EACb,IAAI,CAAC,IAAQ,EAAI,KAAK,EAAE,kBAAkB,CAAC,EAC3C,OAAO,CAAC,IAAQ,IAAQ,EAAE,EAC7B,MAAO,CAAC,IACN,MAAM,QAAQ,CAAG,GACjB,EAAK,KAAK,CAAC,IAAQ,CAAC,EAAI,SAAS,CAAG,CAAC,IAAM,OAEjD,EACA,gBAAiB,CACf,QAAS,qBACT,SAAU,CAAC,IAAkB,CAC3B,IAAM,EAAO,EACV,MAAM,OAAO,EACb,IAAI,CAAC,IAAQ,EAAI,KAAK,EAAE,kBAAkB,CAAC,EAC3C,OAAO,CAAC,IAAQ,IAAQ,EAAE,EAC7B,MAAO,CAAC,IACN,MAAM,QAAQ,CAAG,GACjB,EAAK,KAAK,CAAC,IAAQ,EAAI,SAAS,CAAG,CAAC,IAAM,OAEhD,EACA,OAAQ,CACN,QAAS,IACT,SAAU,IACV,SAAU,CAAC,IAAkB,CAC3B,GAAI,MAAM,OAAO,CAAK,CAAC,EAErB,OADA,EAAQ,OAAO,CAAK,EAAE,kBAAkB,EACjC,CAAC,IAAa,OAAO,CAAG,EAAE,kBAAkB,IAAM,EAE3D,IAAM,EAAM,OAAO,CAAK,EACxB,MAAO,CAAC,IAAa,OAAO,CAAG,IAAM,EAEzC,EACA,MAAO,CACL,QAAS,WACT,SAAU,YACV,SAAU,CAAC,IAAe,CACxB,IAAM,EAAO,IAAI,KAAK,CAAK,EAC3B,MAAO,CAAC,IAAa,IAAI,KAAK,CAAG,EAAI,EAEzC,EACA,YAAa,CACX,QAAS,IACT,SAAU,IACV,SAAU,CAAC,IAAe,CACxB,GAAI,CAAC,MAAM,OAAO,CAAK,CAAC,EAAG,CACzB,IAAM,EAAM,OAAO,CAAK,EACxB,MAAO,CAAC,IAAa,OAAO,CAAG,EAAI,EAGrC,OADA,EAAQ,EAAM,kBAAkB,EACzB,CAAC,IAAa,OAAO,CAAG,EAAE,kBAAkB,EAAI,EAE3D,EACA,OAAQ,CACN,QAAS,6BACT,SAAU,sBACV,WAAY,GACZ,SAAU,IAAM,CAAC,IAAa,CAAC,CAAC,CAClC,EACA,OAAQ,CACN,QAAS,SACT,WAAY,GACZ,SAAU,IAAM,CAAC,IAAa,IAAQ,EACxC,EACA,QAAS,CACP,QAAS,UACT,WAAY,GACZ,SAAU,IAAM,CAAC,IAAa,IAAQ,EACxC,CACF,EAOM,GAAe,CACnB,YAAa,WACb,KAAM,IAAM,EACd,EAEA,SAAS,EAAa,CAAC,EAA4B,CACjD,OAAQ,EAAO,QAAQ,EAAO,gBAAiC,SAAW,GAkBrE,MAAM,WAAmB,CAA8B,OACrD,kBAAmB,yBAEnB,gBAAiB,CACtB,QAAS,CACP,QAAS,MACX,EAEA,oBAAqB,CACnB,cAAe,SACf,cAAe,MACjB,EAEA,oDAAqD,CACnD,KAAM,GACR,EAEA,wBAAyB,CACvB,KAAM,CACR,EAEA,kCAAmC,CACjC,QAAS,QACT,QAAS,IACT,KAAM,UACR,CACF,QAEO,gBAAiB,CACtB,SAAU,IACV,UAAW,WACX,OAAQ,EACV,EAEA,OAAiB,CAAC,EAClB,QAAU,GAEV,QAAU,IAAM,CACd,GAAW,CAAE,KAAM,UAAW,CAAC,EAC/B,GAAW,CAAE,KAAM,WAAY,CAAC,EAChC,GAAM,CAAE,KAAM,SAAU,KAAM,QAAS,CAAC,EACxC,GAAK,CAAE,KAAM,SAAU,CAAC,EACxB,GAAO,CAAE,KAAM,SAAU,MAAO,QAAS,EAAG,EAAM,MAAM,CAAC,CAC3D,EAEA,OAAiB,MAEb,MAAK,EAAoB,CAC3B,IAAQ,WAAU,SAAQ,aAAc,KAAK,MAC7C,MAAO,CACL,SAAU,EAAS,MACnB,OAAQ,EAAO,MACf,UAAW,EAAU,KACvB,KAGE,MAAK,CAAC,EAA2B,CACnC,OAAO,OAAO,KAAM,CAAQ,EAG9B,YAAc,IAAwB,CACpC,IAAQ,WAAU,YAAW,UAAW,KAAK,MAEvC,EAAW,EAAU,MAAM,WAAW,GAAG,EACzC,EAAM,EAAW,EAAU,MAAM,MAAM,CAAC,EAAI,EAAU,MACtD,EAAS,KAAK,QAAQ,GAC5B,EAAO,OAAS,EAAO,aAAe,GAEtC,IAAM,EACJ,EAAO,aAAe,GAClB,EAAO,SAAS,MAAS,EACzB,EAAO,SAAS,EAAO,KAAK,EAC5B,EAAQ,EAAS,MACnB,EAEJ,GAAI,IAAU,IACZ,EAAO,EACH,CAAC,IAAa,CAAC,EAAS,EAAI,EAAM,EAClC,CAAC,IAAa,EAAS,EAAI,EAAM,EAErC,OAAO,EACH,CAAC,IACC,OAAO,OAAO,CAAG,EAAE,KAAK,CAAC,IAAM,CAAC,EAAS,CAAC,CAAC,IAAM,OACnD,CAAC,IACC,OAAO,OAAO,CAAG,EAAE,KAAK,CAAC,IAAM,EAAS,CAAC,CAAC,IAAM,OAGxD,IAAM,EAAa,EAAO,aAAe,GAAQ,KAAK,EAAO,SAAW,GAClE,EAAc,GAAG,GAAc,CAAQ,KAAK,GAChD,CACF,IAAI,IAEJ,KAAK,OAAS,CACZ,cACA,MACF,EAEA,KAAK,eAAe,cAAc,IAAI,MAAM,QAAQ,CAAC,GAGvD,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EAExB,IAAQ,WAAU,YAAW,SAAQ,UAAW,KAAK,MAErD,EAAS,iBAAiB,SAAU,KAAK,WAAW,EACpD,EAAU,iBAAiB,SAAU,KAAK,WAAW,EACrD,EAAO,iBAAiB,QAAS,KAAK,WAAW,EACjD,EAAS,MAAQ,KAAK,SACtB,EAAU,MAAQ,KAAK,UACvB,EAAO,MAAQ,KAAK,OAEpB,EAAO,iBAAiB,QAAS,IAAM,CACrC,IAAQ,iBAAkB,KAC1B,KAAK,OAAO,EACZ,GAAe,cAAc,IAAI,MAAM,QAAQ,CAAC,EACjD,EAGH,MAAM,EAAG,CACP,MAAM,OAAO,EAEb,IAAQ,WAAU,YAAW,UAAW,KAAK,MAsB7C,GApBA,EAAS,QAAU,CACjB,CACE,QAAS,YACT,MAAO,GACT,EACA,GAAG,KAAK,OAAO,IAAI,CAAC,IAAU,EAAM,IAAI,CAC1C,EAEA,EAAU,QAAU,OAAO,KAAK,KAAK,OAAO,EACzC,IAAI,CAAC,IAAQ,CACZ,IAAM,EAAS,KAAK,QAAQ,GAC5B,OAAO,EAAO,WAAa,OACvB,CACE,CAAE,QAAS,EAAO,QAAS,MAAO,CAAI,EACtC,CAAE,QAAS,EAAO,SAAU,MAAO,IAAM,CAAI,CAC/C,EACA,CAAE,QAAS,EAAO,QAAS,MAAO,CAAI,EAC3C,EACA,KAAK,EAEJ,KAAK,WAAa,GACpB,EAAS,MAAQ,KAAK,SAExB,GAAI,KAAK,YAAc,GACrB,EAAU,MAAQ,KAAK,UAEzB,GAAI,KAAK,SAAW,GAClB,EAAO,MAAQ,KAAK,OAEtB,KAAK,YAAY,EAErB,CAEO,IAAM,GACX,GAAW,eAAe,EASrB,MAAM,WAAsB,CAAiC,OAC3D,kBAAmB,oBAEnB,gBAAiB,CACtB,QAAS,CACP,OAAQ,OACR,QAAS,OACT,oBAAqB,8BACrB,WAAY,QACd,EAEA,iCAAkC,CAChC,QAAS,OACT,cAAe,SACf,WAAY,UACZ,KAAM,UACR,EAEA,0BAA2B,CACzB,YAAa,OACf,EAEA,2BAA4B,CAC1B,YAAa,MACf,EAEA,wBAAyB,CACvB,YAAa,MACf,EAEA,2CAA4C,CAC1C,gBAAiB,0BACjB,aAAc,QACd,OAAQ,qBACR,WAAY,qBACZ,OAAQ,IACR,QAAS,IACT,UAAW,SACX,MAAO,qBACP,KAAM,wBACR,CACF,EAEQ,QAAkB,CAAC,KAEvB,OAAM,EAAW,CACnB,OAAO,KAAK,WAGV,OAAM,CAAC,EAAiB,CAC1B,KAAK,QAAU,EACf,KAAK,YAAY,KAGf,MAAK,EAAgB,CACvB,IAAQ,mBAAoB,KAAK,MACjC,MAAQ,CAAC,GAAG,EAAgB,QAAQ,EAAmB,IACrD,CAAC,IAAS,EAAK,KACjB,KAGE,MAAK,CAAC,EAAoB,CAC5B,IAAQ,SAAQ,WAAY,MACpB,mBAAoB,KAAK,MACjC,EAAgB,YAAc,GAC9B,QAAW,KAAS,EAClB,EAAgB,OAAO,GAAW,CAAE,SAAQ,aAAY,CAAM,CAAC,CAAC,EAIpE,OAAsB,GACtB,YAAc,GAEd,UAAY,IAAM,CAChB,IAAQ,SAAQ,WAAY,MACpB,mBAAoB,KAAK,MACjC,EAAgB,OAAO,GAAW,CAAE,SAAQ,SAAQ,CAAC,CAAC,GAGxD,QAAU,IAAM,CACd,GACE,CACE,KAAM,MACN,MAAO,uBACP,QAAS,KAAK,UACd,MAAO,OACT,EACA,EAAM,KAAK,CACb,EACA,GAAI,CAAE,KAAM,iBAAkB,CAAC,EAC/B,GACE,CAAE,KAAM,QAAS,MAAO,eAAgB,QAAS,KAAK,KAAM,EAC5D,EAAM,EAAE,CACV,CACF,EAEA,QAAU,GAEV,MAAQ,IAAM,CACZ,IAAQ,SAAQ,WAAY,MACpB,mBAAoB,KAAK,MACjC,KAAK,YAAc,GACnB,KAAK,OAAS,GACd,EAAgB,YAAc,GAC9B,EAAgB,OAAO,GAAW,CAAE,SAAQ,SAAQ,CAAC,CAAC,EACtD,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC,GAGxC,YAAc,IAAwB,CACpC,IAAQ,mBAAoB,KAAK,MACjC,GAAI,EAAgB,SAAS,SAAW,EAAG,CACzC,KAAK,MAAM,EACX,OAEF,IAAM,EAAW,CAAC,GAAG,EAAgB,QAAQ,EAAmB,IAC9D,CAAC,IAAe,EAAW,MAC7B,EACM,EAAQ,EAAQ,IAAI,CAAC,IAAW,EAAO,IAAI,EACjD,KAAK,YAAc,EAAQ,IAAI,CAAC,IAAW,EAAO,WAAW,EAAE,KAAK,IAAI,EACxE,KAAK,OAAS,CAAC,IACb,EAAM,OACJ,CAAC,IAAa,EAAM,KAAK,CAAC,IAAM,EAAE,CAAG,IAAM,EAAK,IAAM,MACxD,EACF,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC,GAGxC,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAExB,IAAQ,mBAAoB,KAAK,MACjC,EAAgB,iBAAiB,SAAU,KAAK,WAAW,EAE3D,KAAK,MAAM,EAGb,MAAM,EAAG,CACP,MAAM,OAAO,EAEjB,CAEO,IAAM,GACX,GAAc,eAAe,EChf/B,IAAQ,MAAM,EAMP,MAAM,WAAmB,CAAU,OACjC,kBAAmB,oBAEnB,iBAAkB,CACvB,QAAS,CACP,QAAS,OACT,WAAY,SACZ,QAAS,EAAW,kBAAkB,WAAW,EACjD,WAAY,EAAW,aAAa,6BAA6B,EACjE,WAAY,EAAW,qBAAqB,MAAM,EAClD,IAAK,EAAW,cAAc,KAAK,CACrC,EACA,eAAgB,CACd,QAAS,cACT,WAAY,QACd,CACF,EAEA,QAAU,EAAG,UAA4B,CAAC,EAAK,CAAC,CAClD,CAEO,IAAM,GACX,GAAW,eAAe,EAetB,GAA2C,CAC/C,OAAQ,IAAM,EAAM,KAAK,EACzB,QAAS,IAAM,EAAM,QAAQ,EAC7B,KAAM,IAAM,EAAM,KAAK,EACvB,OAAQ,IAAM,EAAM,OAAO,EAC3B,IAAK,IAAM,EAAM,IAAI,CACvB,EAEO,MAAM,WAAwB,CAAU,OACtC,kBAAmB,0BAEnB,gBAAiB,CACtB,QAAS,CACP,QAAS,cACT,WAAY,SACZ,IAAK,KACP,EACA,UAAW,CACT,MAAO,UACP,eAAgB,OAChB,QAAS,cACT,WAAY,SACZ,QAAS,MACT,QAAS,MACT,OAAQ,SACV,EACA,gBAAiB,CACf,QAAS,GACX,CACF,EAEA,MAAqB,CAAC,EAEtB,QAAU,KAEV,MAAM,EAAS,CACb,MAAM,OAAO,EACb,IAAM,EAA0B,CAAC,EACjC,QAAY,EAAK,KAAQ,OAAO,QAAQ,KAAK,KAAK,EAAG,CACnD,GAAI,CAAC,GAAO,CAAC,GAAU,GAAM,SAC7B,EAAS,KACP,GAAE,CAAE,MAAO,EAAK,OAAQ,SAAU,KAAM,CAAI,EAAG,GAAU,GAAK,CAAC,CACjE,EAEF,KAAK,gBAAgB,GAAG,CAAQ,EAEpC,CAEO,IAAM,GACX,GAAgB,eAAe,ECrI1B,SAAS,EAAY,EAAG,CAK7B,OAJ4B,UACzB,YAAY,EACZ,OAAO,CAAC,IAAM,IAAM,IAAI,EAEX,IAAI,CAAC,IAAM,CACzB,IAAQ,KAAI,OAAM,WAAY,EAC9B,MAAO,CACL,KACA,OACA,QAAS,EACN,IAAI,CAAC,EAAQ,IAAU,CACtB,IAAQ,UAAS,SAAU,EAC3B,MAAO,CACL,QACA,UACA,OACF,EACD,EACA,OAAO,CAAC,IAAM,EAAE,SAAW,EAAE,QAAU,CAAC,EACxC,OAAO,CAAC,EAAgC,IAAW,CAElD,OADA,EAAI,EAAO,OAAS,EAAO,MACpB,GACN,CAAC,CAAC,CACT,EACD,EAGI,SAAS,EAAW,EAAG,CAC5B,IAAM,EAAQ,GAAa,EAC3B,OAAO,EAAM,SAAW,EACpB,qBACA,EACG,IAAI,EAAG,KAAI,OAAM,aAAc,CAC9B,IAAM,EAAW,EAAK,IAAI,CAAC,IAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,EACjD,EAAa,OAAO,KAAK,CAAO,EACnC,IAAI,CAAC,IAAQ,IAAI,MAAQ,EAAQ,OAAO,CAAG,GAAG,QAAQ,CAAC,IAAI,EAC3D,KAAK,GAAG,EACX,MAAO,GAAG;AAAA,EAAO;AAAA,EAAa,IAC/B,EACA,KAAK;AAAA,CAAI,EAwBX,SAAS,EAAa,CAAC,EAAe,CAC3C,IAAM,EAAc,CAAC,EA+BrB,OA9BA,EAAS,MAAM,4BAA4B,IAAI,CAAC,IAAoB,CAClE,EAAW,iCAAiC,IAAI,CAAC,IAAY,CAC3D,IAAM,EAAQ,CAAC,EACM,EAAG,gBAAgB,EAC3B,QAAQ,CAAC,IAAgB,CACpC,IAAM,EAAY,EAAG,aAAa,CAAW,EAc7C,GAbA,EAAM,GAAe,CACnB,QAAS,EAAU,QACnB,QAAS,EAAU,QACnB,MAAO,EAAU,MACjB,KAAM,CAAE,EAAG,EAAU,KAAK,EAAG,EAAG,EAAU,KAAK,CAAE,CACnD,EACA,EAAU,+BAA+B,IACvC,CAAC,IAA6D,CAC5D,EAAM,GAAa,QAAU,EAAE,QAC/B,EAAM,GAAa,QAAU,EAAE,QAC/B,EAAM,GAAa,MAAQ,EAAE,MAEjC,EACI,EAAU,6BACZ,EAAU,6BAA6B,IACrC,CAAC,IAAmC,CAClC,EAAM,GAAa,KAAO,CAAE,EAAG,EAAK,EAAG,EAAG,EAAK,CAAE,EAErD,EAEH,EACD,EAAY,EAAG,YAAc,EAC9B,EACF,EACM,EAGF,SAAS,EAAiB,CAAC,EAAmC,CACnE,GAAI,IAAgB,QAAa,OAAO,KAAK,CAAW,EAAE,SAAW,EACnE,MAAO,eAGT,OAAO,OAAO,KAAK,CAAW,EAC3B,IAAI,CAAC,IAAiB,CACrB,IAAM,EAAQ,EAAY,GACpB,EAAkB,CAAC,EACzB,QAAY,EAAI,KAAS,OAAO,QAAQ,CAAK,EAAG,CAC9C,IAAM,EAAkB,CAAC,EACzB,GAAI,EAAK,QAAS,EAAM,KAAK,GAAG,EAChC,GAAI,EAAK,QAAS,EAAM,KAAK,GAAG,EAChC,IAAM,EAAW,EAAK,MAAQ,EACxB,EAAU,EAAK,KAAK,IAAM,GAAK,EAAK,KAAK,IAAM,EACrD,GAAI,EAAM,OAAS,GAAK,GAAY,EAAS,CAC3C,IAAI,EAAO,GAAG,KAAM,EAAM,KAAK,EAAE,KACjC,GAAI,EAAU,GAAQ,MAAM,EAAK,MAAM,QAAQ,CAAC,IAChD,GAAI,EACF,GAAQ,MAAM,EAAK,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAK,KAAK,EAAE,QAAQ,CAAC,IACjE,EAAM,KAAK,CAAI,GAGnB,MAAO,GAAG;AAAA,EAAiB,EAAM,KAAK;AAAA,CAAI,GAAK,WAChD,EACA,KAAK;AAAA,CAAI,EC5Hd,IAAQ,SAAS,EAMV,MAAM,WAAgB,CAAU,OAC9B,kBAAmB,iBAEnB,gBAAiB,CACtB,IAAK,GACL,KAAM,GACN,MAAO,GACP,QAAS,EACX,EAEA,QAAU,CAAC,GAAK,CAAC,QAEV,iBAAkB,CACvB,QAAS,CACP,QAAS,OACT,cAAe,MACf,IAAK,EAAW,WAAW,GAAG,EAC9B,WAAY,EAAW,aAAa,SAAS,EAC7C,eAAgB,EAAW,eAAe,YAAY,CACxD,CACF,EAEA,MAAM,EAAS,CAEb,GADA,MAAM,OAAO,EACT,KAAK,IACP,KAAK,MAAM,YAAY,iBAAkB,KAAK,GAAG,EAEjD,UAAK,MAAM,eAAe,gBAAgB,EAE5C,GAAI,KAAK,MACP,KAAK,MAAM,YAAY,mBAAoB,KAAK,KAAK,EAErD,UAAK,MAAM,eAAe,kBAAkB,EAE9C,GAAI,KAAK,QACP,KAAK,MAAM,YAAY,qBAAsB,KAAK,OAAO,EAEzD,UAAK,MAAM,eAAe,oBAAoB,EAEhD,KAAK,MAAM,SAAW,KAAK,KAAO,OAAS,GAE/C,CAEO,IAAM,GAAU,GAAQ,eAAe,EAMvC,MAAM,WAAmB,CAAU,OACjC,kBAAmB,oBAEnB,gBAAiB,CACtB,IAAK,GACL,KAAM,GACN,MAAO,GACP,QAAS,EACX,EAEA,QAAU,CAAC,GAAK,CAAC,QAEV,iBAAkB,CACvB,QAAS,CACP,QAAS,OACT,cAAe,SACf,IAAK,EAAW,cAAc,GAAG,EACjC,WAAY,EAAW,gBAAgB,SAAS,EAChD,eAAgB,EAAW,kBAAkB,YAAY,CAC3D,CACF,EAEA,MAAM,EAAS,CAEb,GADA,MAAM,OAAO,EACT,KAAK,IACP,KAAK,MAAM,YAAY,oBAAqB,KAAK,GAAG,EAEpD,UAAK,MAAM,eAAe,mBAAmB,EAE/C,GAAI,KAAK,MACP,KAAK,MAAM,YAAY,sBAAuB,KAAK,KAAK,EAExD,UAAK,MAAM,eAAe,qBAAqB,EAEjD,GAAI,KAAK,QACP,KAAK,MAAM,YAAY,wBAAyB,KAAK,OAAO,EAE5D,UAAK,MAAM,eAAe,uBAAuB,EAEnD,KAAK,MAAM,SAAW,KAAK,KAAO,OAAS,GAE/C,CAEO,IAAM,GACX,GAAW,eAAe,EAMrB,MAAM,WAAiB,CAAU,OAC/B,kBAAmB,kBAEnB,gBAAiB,CACtB,QAAS,GACT,KAAM,GACN,IAAK,EACP,EAEA,QAAU,CAAC,GAAK,CAAC,QAEV,iBAAkB,CACvB,QAAS,CACP,QAAS,OACT,oBAAqB,EAAW,gBAAgB,KAAK,EACrD,iBAAkB,EAAW,aAAa,MAAM,EAChD,IAAK,EAAW,YAAY,GAAG,CACjC,CACF,EAEA,MAAM,EAAS,CAEb,GADA,MAAM,OAAO,EACT,KAAK,QACP,KAAK,MAAM,YAAY,sBAAuB,KAAK,OAAO,EAE1D,UAAK,MAAM,eAAe,qBAAqB,EAEjD,GAAI,KAAK,KACP,KAAK,MAAM,YAAY,mBAAoB,KAAK,IAAI,EAEpD,UAAK,MAAM,eAAe,kBAAkB,EAE9C,GAAI,KAAK,IACP,KAAK,MAAM,YAAY,kBAAmB,KAAK,GAAG,EAElD,UAAK,MAAM,eAAe,iBAAiB,EAGjD,CAEO,IAAM,GAAW,GAAS,eAAe,GAMxC,SAAS,EAEJ,GAAU,IAAI,IACzB,GAAK,CAAE,MAAO,CAAE,KAAM,8BAA+B,CAAE,EAAG,GAAG,CAAK,EAEvD,GAAS,IAAI,IACxB,GAAK,CAAE,MAAO,CAAE,KAAM,8BAA+B,CAAE,EAAG,GAAG,CAAK,ECrE7D,IAAM,GAA6B,CACxC,OAAQ,EAAM,QAAQ,SAAS,EAC/B,WAAY,EAAM,QAAQ,SAAS,EACnC,KAAM,EAAM,QAAQ,SAAS,CAC/B,EAMa,GAA8B,CAEzC,eAAgB,MAChB,eAAgB,MAChB,aAAc,OACd,eAAgB,OAChB,eAAgB,OAGhB,gBAAiB,uCACjB,cAAe,OACf,gBAAiB,MACjB,oBAAqB,0BACrB,kBAAmB,OAGnB,eAAgB,OAChB,kBAAmB,MACnB,oBAAqB,MACrB,gBAAiB,gBACnB,EASO,SAAS,EAAoB,CAAC,EAAmC,CACtE,IAAQ,SAAQ,aAAY,QAAS,EAG/B,EAAa,EAAO,YAAc,EAAO,YAAY,EACrD,EAAkB,EAAO,iBAAmB,EAAW,OAAO,IAAI,EAClE,EAAS,EAAO,QAAU,EAAK,QAAQ,IAAI,EAC3C,EAAS,EAAO,QAAU,EAAK,QAAQ,GAAG,EAC1C,EAAQ,EAAO,OAAS,EAAO,QAAQ,GAAG,EAEhD,MAAO,CAEL,YAAa,EACb,iBAAkB,EAAO,SAAS,IAAI,EACtC,gBAAiB,EAAO,OAAO,IAAI,EACnC,gBAAiB,EAGjB,QAAS,EACT,aAAc,EACd,aAAc,EAAW,OAAO,IAAI,EACpC,cAAe,EAAW,OAAO,GAAG,EAGpC,UAAW,EACX,eAAgB,EAAK,QAAQ,GAAG,EAChC,kBAAmB,EAAK,QAAQ,GAAG,EAGnC,YAAa,EACb,iBAAkB,EAClB,YAAa,EACb,iBAAkB,EAGlB,eAAgB,aAAa,IAG7B,aAAc,EACd,iBAAkB,EAClB,sBAAuB,EAGvB,cAAe,EACf,gBAAiB,EACjB,kBAAmB,EACnB,mBAAoB,EAAW,OAAO,IAAI,EAC1C,oBAAqB,EACrB,sBAAuB,CACzB,EAMK,SAAS,EAAW,CAAC,EAAoC,CAC9D,MAAO,CACL,QAAS,IACJ,MACA,GAAqB,CAAM,CAChC,CACF,EAMK,SAAS,EAAe,CAAC,EAAoC,CAElE,IAAM,EADa,GAAY,CAAM,EACP,SAE9B,MAAO,CACL,QAAS,GAAgB,CAAU,CACrC,EAQK,SAAS,EAAU,CAAC,EAAsB,EAAK,aAAoB,CACxE,GAAW,EAAI,CAAK,EAOf,IAAM,GAAY,GAAY,EAAa,EACrC,GAAgB,GAAgB,EAAa,EAU7C,GAA8B,CAEzC,kBAAmB,EAAK,aACxB,kBAAmB,EAAK,aACxB,oBAAqB,EAAK,eAG1B,uBAAwB,EAAK,iBAC7B,wBAAyB,EAAK,kBAC9B,4BAA6B,EAAK,sBAGlC,YAAa,EAAK,YAClB,QAAS,EAAK,cACd,eAAgB,EAAK,cACrB,eAAgB,EAAK,OACrB,eAAgB,EAAK,SACrB,gBAAiB,EAAK,WACtB,qBAAsB,EAAK,cAC7B,EAKO,SAAS,EAAqB,CAAC,EAAoC,CAExE,MAAO,CACL,QAAS,IAFG,GAAY,CAAM,EAGlB,YACP,EACL,CACF,EAkBK,SAAS,EAA+C,CAC7D,EACA,EAC4B,CAC5B,IAAM,EAAS,CAAC,EAChB,QAAY,EAAK,KAAU,OAAO,QAAQ,CAAQ,EAAG,CACnD,IAAM,EAAU,UAAU,KAAiB,EACxC,QAAQ,WAAY,KAAK,EACzB,YAAY,IACf,EAAO,GAAkB,OAAO,MAAY,KAE9C,OAAO,EC7LT,IAAQ,OAAK,SAAO,SAAO,QAAM,WAAW,GAM7B,aAAc,EAAK,CAChC,UAAW,CACT,OAAQ,OAAO,GAAc,MAAM,EACnC,WAAY,OAAO,GAAc,UAAU,EAC3C,KAAM,OAAO,GAAc,IAAI,EAC/B,KAAM,EACR,CACF,CAAC,EAEG,GAAkB,GAEtB,SAAS,EAAc,EAAS,CAC9B,GAAI,CAAC,GAAiB,OAEtB,IAAM,EAAsB,CAC1B,OAAQ,EAAM,QAAQ,EAAU,OAAO,KAAK,EAC5C,WAAY,EAAM,QAAQ,EAAU,WAAW,KAAK,EACpD,KAAM,EAAM,QAAQ,EAAU,KAAK,KAAK,CAC1C,EAEM,EAAQ,EAAU,KAAK,MACzB,GAAgB,CAAM,EACtB,GAAY,CAAM,EAEtB,GAAW,EAAO,iBAAiB,EAO9B,SAAS,EAAe,EAAS,CACtC,GAAI,GAAiB,OACrB,GAAkB,GAElB,EAAU,OAAO,QAAQ,EAAc,EACvC,EAAU,WAAW,QAAQ,EAAc,EAC3C,EAAU,KAAK,QAAQ,EAAc,EACrC,EAAU,KAAK,QAAQ,EAAc,EAErC,GAAe,EAMV,SAAS,EAAgB,EAAS,CACvC,GAAkB,GAgBb,MAAM,WAAwB,CAA4B,OACxD,kBAAmB,0BAInB,iBAAkB,CACvB,QAAS,CACP,QAAS,QACT,WAAY,uCACZ,SAAU,OACV,WAAY,MACZ,WAAY,UACZ,MAAO,UACP,QAAS,OACT,aAAc,MACd,UAAW,gCACX,SAAU,OACZ,EACA,eAAgB,CACd,QAAS,OACT,WAAY,SACZ,IAAK,MACL,aAAc,KAChB,EACA,cAAe,CACb,KAAM,IACN,WAAY,KACd,EACA,4BAA6B,CAC3B,MAAO,OACP,OAAQ,OACR,OAAQ,iBACR,aAAc,MACd,OAAQ,UACR,QAAS,KACX,EACA,+BAAgC,CAC9B,MAAO,OACP,OAAQ,OACR,OAAQ,SACV,EACA,iBAAkB,CAChB,UAAW,OACX,QAAS,OACT,aAAc,MACd,WAAY,oBACd,EACA,wBAAyB,CACvB,OAAQ,OACR,QAAS,WACT,aAAc,MACd,OAAQ,UACR,WAAY,UACZ,SAAU,MACZ,EACA,iBAAkB,CAChB,UAAW,MACX,QAAS,OACT,IAAK,KACP,EACA,wBAAyB,CACvB,KAAM,IACN,QAAS,WACT,OAAQ,iBACR,aAAc,MACd,WAAY,UACZ,MAAO,OACP,OAAQ,UACR,WAAY,UACZ,SAAU,MACZ,EACA,8BAA+B,CAC7B,WAAY,SACd,CACF,EAEA,QAAU,IAAM,CACd,GACE,CAAE,MAAO,OAAQ,EACjB,GAAM,QAAQ,EACd,GAAM,CAAE,KAAM,QAAS,KAAM,QAAS,CAAC,CACzC,EACA,GACE,CAAE,MAAO,OAAQ,EACjB,GAAM,YAAY,EAClB,GAAM,CAAE,KAAM,QAAS,KAAM,YAAa,CAAC,CAC7C,EACA,GACE,CAAE,MAAO,OAAQ,EACjB,GAAM,MAAM,EACZ,GAAM,CAAE,KAAM,QAAS,KAAM,MAAO,CAAC,CACvC,EACA,GACE,CAAE,MAAO,OAAQ,EACjB,GAAM,WAAW,EACjB,GAAM,CAAE,KAAM,WAAY,KAAM,MAAO,CAAC,CAC1C,EACA,GACE,CACE,MAAO,UACP,KAAM,UACN,MAAO,CACL,WAAY,0BACZ,MAAO,wBACT,CACF,EACA,GAAK,UAAU,EACf,GACE,CACE,MAAO,iBACP,MAAO,CACL,WAAY,8BACZ,MAAO,gCACT,CACF,EACA,QACF,CACF,EACA,GAAI,CAAE,MAAO,SAAU,EAAG,GAAO,CAAE,KAAM,OAAQ,EAAG,OAAO,CAAC,CAC9D,EAEA,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAExB,GAAgB,EAGhB,IAAM,EAAgB,IAAM,CAC1B,KAAK,MAAM,OAAO,MAAQ,EAAU,OAAO,MAC3C,KAAK,MAAM,WAAW,MAAQ,EAAU,WAAW,MACnD,KAAK,MAAM,KAAK,MAAQ,EAAU,KAAK,MACvC,KAAK,MAAM,KAAK,QAAU,EAAU,KAAK,OAE3C,EAAc,EAGd,EAAU,OAAO,QAAQ,CAAa,EACtC,EAAU,WAAW,QAAQ,CAAa,EAC1C,EAAU,KAAK,QAAQ,CAAa,EACpC,EAAU,KAAK,QAAQ,CAAa,EAGpC,KAAK,MAAM,OAAO,iBAAiB,QAAS,IAAM,CAChD,EAAU,OAAO,MAAQ,KAAK,MAAM,OAAO,MAC5C,EACD,KAAK,MAAM,WAAW,iBAAiB,QAAS,IAAM,CACpD,EAAU,WAAW,MAAQ,KAAK,MAAM,WAAW,MACpD,EACD,KAAK,MAAM,KAAK,iBAAiB,QAAS,IAAM,CAC9C,EAAU,KAAK,MAAQ,KAAK,MAAM,KAAK,MACxC,EACD,KAAK,MAAM,KAAK,iBAAiB,SAAU,IAAM,CAC/C,EAAU,KAAK,MAAQ,KAAK,MAAM,KAAK,QACxC,EAGD,KAAK,MAAM,MAAM,iBAAiB,QAAS,IAAM,CAC/C,EAAU,OAAO,MAAQ,OAAO,GAAc,MAAM,EACpD,EAAU,WAAW,MAAQ,OAAO,GAAc,UAAU,EAC5D,EAAU,KAAK,MAAQ,OAAO,GAAc,IAAI,EAChD,EAAU,KAAK,MAAQ,GACxB,EAEL,CAEO,IAAM,GACX,GAAgB,eAAe,ECvPjC,IAAQ,QAAQ,EAET,MAAM,WAAe,CAAa,OAChC,kBAAmB,iBACnB,gBAAiB,SAEjB,gBAAiB,CACtB,OAAQ,yCACR,MAAO,GACP,SAAU,qCACV,KAAM,EACR,EAGA,MAAQ,GAGR,oBAAoB,CAAC,EAAmB,EAIxC,iBAAiB,EAAG,CAClB,KAAK,MAAQ,GACb,KAAK,OAAS,yCAGhB,QAAU,GAAI,CAAE,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAO,CAAE,CAAC,KACtD,IAAG,EAAQ,CACb,OAAO,KAAK,WAGP,0BACA,iBAEC,KAIA,YAAc,SAEf,iBAAkB,CACvB,QAAS,CACP,QAAS,eACT,SAAU,WACV,MAAO,QACP,OAAQ,QACR,UAAW,MACb,CACF,EAEA,WAAW,EAAG,CACZ,MAAM,EACN,GAAI,GAAO,qBAAuB,OAChC,GAAO,mBAAqB,GAC1B,2DACF,EAAE,MAAM,CAAC,IAAM,CACb,QAAQ,MAAM,+BAAgC,CAAC,EAChD,EACD,GAAO,gBAAkB,GACvB,0DACF,EAAE,MAAM,CAAC,IAAM,CACb,QAAQ,MAAM,8BAA+B,CAAC,EAC/C,EAIL,iBAAiB,EAAS,CAExB,GADA,MAAM,kBAAkB,EACpB,CAAC,KAAK,MACR,QAAQ,MACN,+EACF,EAII,YAAc,GACd,WAAa,GAErB,MAAM,EAAS,CAGb,GAFA,MAAM,OAAO,EAET,CAAC,KAAK,MACR,OAIF,GAAI,KAAK,KAAM,CACb,GAAI,KAAK,SAAW,KAAK,YAAa,CACpC,IAAO,EAAM,EAAK,GAAQ,KAAK,OAC5B,MAAM,GAAG,EACT,IAAI,CAAC,IAAc,OAAO,CAAC,CAAC,EAC/B,KAAK,KAAK,UAAU,CAAC,EAAK,CAAI,CAAC,EAC/B,KAAK,KAAK,QAAQ,CAAI,EACtB,KAAK,YAAc,KAAK,OAE1B,GAAI,KAAK,WAAa,KAAK,WACzB,KAAK,KAAK,SAAS,KAAK,QAAQ,EAChC,KAAK,WAAa,KAAK,SAEzB,OAMF,GAAI,KAAK,YAAa,OACtB,KAAK,YAAc,GAEnB,IAAQ,OAAQ,KAAK,MAErB,GAAO,gBAAiB,KAAK,EAAG,cAAkC,CAChE,QAAQ,IACN,0DACA,mDACF,EAGA,IAAO,EAAM,EAAK,GAAQ,KAAK,OAC5B,MAAM,GAAG,EACT,IAAI,CAAC,IAAc,OAAO,CAAC,CAAC,EAC/B,EAAS,YAAc,KAAK,MAC5B,KAAK,KAAO,IAAI,EAAS,IAAI,CAC3B,UAAW,EACX,MAAO,KAAK,SACZ,OACA,OAAQ,CAAC,EAAK,CAAI,CACpB,CAAC,EACD,KAAK,YAAc,KAAK,OACxB,KAAK,WAAa,KAAK,SACvB,KAAK,YAAc,GAEnB,KAAK,KAAK,GAAG,SAAU,IAAM,KAAK,KAAK,OAAO,CAAC,EAG/C,KAAK,KAAK,GAAG,UAAW,IAAM,CAC5B,IAAM,EAAS,KAAK,KAAK,UAAU,EAC7B,EAAc,KAAK,KAAK,QAAQ,EAChC,EAAW,GAAG,EAAO,IAAI,QAAQ,CAAC,KAAK,EAAO,IAAI,QACtD,CACF,KAAK,EAAY,QAAQ,CAAC,IAC1B,GAAI,IAAa,KAAK,OAEpB,GAAI,KAAK,UACP,KAAK,UAAU,aAAa,CAAQ,GAGzC,EACF,EACA,MAAM,CAAC,IAAiB,CAGvB,KAAK,YAAc,GACnB,QAAQ,MAAM,kCAAmC,CAAG,EACrD,EAEL,CAEO,IAAM,GAAS,GAAO,eAAe,ECtM5C,SAAS,EAAQ,CAAC,EAAkB,EAAsB,CACxD,GAAI,GAAU,KACZ,EAAS,GACJ,QAAI,OAAO,IAAW,SAC3B,EAAS,OAAO,CAAM,EAExB,OAAO,EAAO,QACZ,mBACA,CAAC,EAAkB,IAAiB,CAClC,IAAM,EAAS,GACb,GAAG,IAAW,EAAK,WAAW,GAAG,EAAI,EAAO,IAAM,KAEpD,OAAO,IAAU,OAAY,EAAW,GAAS,EAAU,OAAO,CAAK,CAAC,EAE5E,EAGK,MAAM,WAAe,CAAU,OAC7B,kBAAmB,gBAEnB,gBAAiB,CACtB,IAAK,GACL,SAAU,EACZ,EAEA,QAAkC,CAAC,EACnC,MAAQ,GACR,QAAU,KACV,QAAU,CAAC,EACX,iBAAiB,EAAS,CAExB,GADA,MAAM,kBAAkB,EACpB,KAAK,MAAQ,IACb,SAAY,CACZ,IAAM,EAAU,MAAM,MAAM,KAAK,GAAG,EACpC,KAAK,MAAQ,MAAM,EAAQ,KAAK,IAC/B,EACE,QAAI,KAAK,QAAU,GACxB,GAAI,KAAK,SACP,KAAK,MAAQ,KAAK,UAElB,UAAK,MAAQ,KAAK,aAAe,KAAO,KAAK,YAAc,GAIjE,UAAkD,IAAY,GAG9D,MAAM,EAAG,CACP,MAAM,OAAO,EAEb,GAAI,KAAK,YACP,OAAO,KAAK,UAAY,SAAW,KAAK,MAAM,KAAK,OAAO,EAAI,KAAK,QAErE,IAAM,EAAS,GAAS,KAAK,WAAY,KAAK,KAAK,EACnD,GAAI,KAAK,SAAU,CACjB,IAAM,EAAS,EACZ,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,EAAkB,IAAiB,CAC1C,GAAI,EAAK,WAAW,GAAG,GAAK,EAAO,SAAW,EAC5C,EAAO,KAAK,CAAI,EACX,KACL,IAAM,EAAY,EAAO,EAAO,OAAS,GACzC,GAAI,CAAC,EAAU,WAAW,GAAG,GAAK,CAAC,EAAU,SAAS,GAAG,EACvD,EAAO,EAAO,OAAS,IAAM;AAAA,EAAO,EAEpC,OAAO,KAAK,CAAI,EAGpB,OAAO,GACN,CAAC,CAAa,EACnB,KAAK,UAAY,EACd,IAAI,CAAC,IACJ,EAAM,WAAW,GAAG,GAAK,EAAM,SAAS,GAAG,EACvC,EACA,EAAO,EAAO,KAAK,OAAO,CAChC,EACC,KAAK,EAAE,EAEV,UAAK,UAAY,EAAO,EAAQ,KAAK,OAAO,EAE9C,KAAK,UAAU,EAEnB,CAKO,IAAM,GAAgC,GAEhC,GAAS,GAAO,eAAe,EAG/B,GAAiB,GAGjB,GAAQ,GCxCrB,IAAQ,OAAK,QAAM,WAAW,EAExB,GAAS,SACT,GAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC3B,GAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAE,EAG/C,GAAU,CAAC,EAAwB,EAAS,EAAG,EAAU,MAC7D,OAAO,CAAK,EAAE,SAAS,EAAQ,CAAO,EAClC,GAAc,CAAC,EAAc,EAAe,IAChD,IAAI,KAAK,GAAG,KAAQ,GAAQ,CAAK,KAAK,GAAQ,CAAI,GAAG,EAUhD,MAAM,WAAkB,CAAsB,OAC5C,kBAAmB,mBAEnB,gBAAiB,CACtB,QAAS,CACP,QAAS,OACX,EACA,sBAAuB,CACrB,QAAS,OACT,WAAY,UACZ,eAAgB,SAClB,EACA,kBAAmB,CACjB,cAAe,OACf,QAAS,EAAW,gBAAgB,GAAG,CACzC,EACA,4CAA6C,CAC3C,YAAa,MACb,KAAM,GACR,EACA,uCAAwC,CACtC,QAAS,OACT,oBAAqB,qCACrB,aAAc,SAChB,EACA,eAAgB,CACd,WAAY,EAAW,qBAAqB,aAAa,EACzD,UAAW,EAAW,iBAAiB,MAAM,EAC7C,eAAgB,EAAW,yBAAyB,iBAAiB,EACrE,WAAY,EAAW,qBAAqB,KAAK,CACnD,EACA,0BAA2B,CACzB,QAAS,EACT,QAAS,OACT,eAAgB,SAChB,WAAY,MACd,EACA,aAAc,CACZ,MAAO,EAAW,cAAc,SAAS,EACzC,WAAY,EAAW,mBAAmB,OAAO,EACjD,WAAY,EAAW,mBAAmB,KAAK,CACjD,EACA,cAAe,CACb,OAAQ,SACV,EACA,iBAAkB,CAChB,WAAY,EAAW,uBAAuB,MAAM,CACtD,EACA,6BAA8B,CAC5B,QAAS,GACX,EACA,sBAAuB,CACrB,MAAO,EAAW,sBAAsB,OAAO,EAC/C,WAAY,EAAW,2BAA2B,SAAS,CAC7D,EACA,mCAAoC,CAClC,aAAc,EAAW,6BAA6B,MAAM,CAC9D,EACA,qBAAsB,CACpB,oBAAqB,EAAW,6BAA6B,MAAM,EACnE,uBAAwB,EAAW,6BAA6B,MAAM,CACxE,EACA,mBAAoB,CAClB,qBAAsB,EAAW,6BAA6B,MAAM,EACpE,wBAAyB,EAAW,6BAA6B,MAAM,CACzE,CACF,QAEO,gBAAiB,SAEjB,gBAAiB,CACtB,MAAO,IACP,KAAM,IACN,UAAW,EACX,QAAS,GAAY,IAAI,KAAK,EAAE,YAAY,EAAI,IAAK,EAAG,CAAC,EACtD,YAAY,EACZ,MAAM,GAAG,EAAE,GACd,QAAS,GAAY,IAAI,KAAK,EAAE,YAAY,EAAI,GAAI,GAAI,EAAE,EACvD,YAAY,EACZ,MAAM,GAAG,EAAE,GACd,WAAY,GACZ,SAAU,GACV,MAAO,GACP,SAAU,GACV,SAAU,GACV,SAAU,GACV,KAAM,EACR,EAEA,aAAe,CAAC,EAChB,MAAQ,GAER,oBAAoB,CAAC,EAAmB,CACtC,KAAK,SAAW,EAGlB,iBAAiB,EAAG,CAClB,KAAK,MAAQ,GACb,KAAK,aAAe,CAAC,KAGnB,OAAM,EAAW,CACnB,MAAO,GAAI,KAAK,aAEd,OAAM,EAAyC,CACjD,OAAO,GAAO,IAAI,CAAC,KAAW,CAC5B,QAAS,GAAY,KAAM,EAAO,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,EAAE,GAC3D,MAAO,OAAO,CAAK,CACrB,EAAE,KAEA,MAAK,EAAa,CACpB,IAAM,EAAY,OAAO,KAAK,QAAQ,MAAM,GAAG,EAAE,EAAE,EAC7C,EAAU,OAAO,KAAK,QAAQ,MAAM,GAAG,EAAE,EAAE,EAC3C,EAAQ,CAAC,EACf,QAAS,EAAO,EAAW,GAAQ,EAAS,IAC1C,EAAM,KAAK,OAAO,CAAI,CAAC,EAEzB,OAAO,EAGT,aAAe,CAAC,EAAe,IAAmB,GAIlD,SAAS,CAAC,EAAc,EAAe,CACrC,GAAI,KAAK,QAAU,GAAS,KAAK,OAAS,EACxC,KAAK,MAAQ,EACb,KAAK,KAAO,EACZ,KAAK,aAAa,EAAM,CAAK,EAIjC,SAAW,IAAM,CACf,KAAK,UACH,OAAO,KAAK,MAAM,KAAK,KAAK,EAC5B,OAAO,KAAK,MAAM,MAAM,KAAK,CAC/B,MAGE,GAAE,EAAW,CACf,OAAO,KAAK,aAAa,IAAM,MAG7B,GAAE,CAAC,EAAoB,CACzB,KAAK,aAAa,GAAK,EACvB,KAAK,aAAa,OAAO,CAAC,KAGxB,KAAI,EAAW,CACjB,OAAO,KAAK,aAAa,IAAM,MAG7B,KAAI,CAAC,EAAoB,CAC3B,KAAK,aAAa,GAAK,EACvB,KAAK,aAAa,OAAO,CAAC,EAG5B,UAAY,CAAC,IAAiB,CAC5B,IAAM,EAAc,EAAM,OAAuB,aAC/C,OACF,EACA,KAAK,WAAW,CAAU,GAG5B,QAAU,CAAC,IAAyB,CAClC,IAAI,EAAY,GAChB,OAAQ,EAAM,UACP,QAAS,CACZ,IAAM,EAAc,EAAM,OAAuB,aAC/C,OACF,EACA,KAAK,WAAW,CAAU,EAC1B,EAAY,GACZ,KACF,KACK,MACH,cAEA,QAAQ,IAAI,CAAK,EAErB,GAAI,EACF,EAAM,eAAe,EACrB,EAAM,gBAAgB,GAI1B,GAAa,GACb,WAAa,CAAC,IAAuB,CAEnC,GADA,KAAK,GAAa,EACd,KAAK,MAAO,CACd,GAAI,CAAC,KAAK,GACR,KAAK,aAAe,CAAC,EAAY,CAAU,EACtC,QAAI,KAAK,OAAS,GAAc,KAAK,KAAO,EACjD,KAAK,aAAe,CAAC,EAChB,QAAI,KAAK,OAAS,EACvB,KAAK,KAAO,KAAK,GACZ,QAAI,KAAK,KAAO,EACrB,KAAK,GAAK,KAAK,KACV,QAAI,EAAa,KAAK,KAC3B,KAAK,KAAO,EACP,QAAI,EAAa,KAAK,GAC3B,KAAK,GAAK,EAEV,UAAK,GAAK,EAEZ,KAAK,MAAQ,GAAG,KAAK,QAAQ,KAAK,KAC7B,QAAI,KAAK,SAAU,CACxB,GAAI,KAAK,aAAa,SAAS,CAAU,EACvC,KAAK,aAAa,OAAO,KAAK,aAAa,QAAQ,CAAU,EAAG,CAAC,EAEjE,UAAK,aAAa,KAAK,CAAU,EACjC,KAAK,aAAa,KAAK,EAEzB,KAAK,MAAQ,KAAK,aAAa,KAAK,GAAG,EAClC,QAAI,KAAK,WACd,GAAI,KAAK,aAAa,SAAS,CAAU,EACvC,KAAK,MAAQ,GACb,KAAK,aAAe,CAAC,EAErB,UAAK,MAAQ,EACb,KAAK,aAAe,CAAC,CAAU,GAKrC,UAAY,IAAM,CAChB,GAAI,KAAK,MAAQ,GACf,KAAK,UAAU,KAAK,KAAM,KAAK,MAAQ,CAAC,EAExC,UAAK,UAAU,KAAK,KAAO,EAAG,CAAC,GAInC,cAAgB,IAAM,CACpB,GAAI,KAAK,MAAQ,EACf,KAAK,UAAU,KAAK,KAAM,KAAK,MAAQ,CAAC,EAExC,UAAK,UAAU,KAAK,KAAO,EAAG,EAAE,GAIpC,SAAW,CAAC,IAAuB,CACjC,GAAI,CAAC,KAAK,MACR,OAAO,KAAK,aAAa,SAAS,CAAU,EACvC,QAAI,KAAK,MACd,OAAO,KAAK,MAAQ,GAAc,KAAK,MAAQ,GAAc,KAAK,GAEpE,MAAO,IAGT,aAAe,CAAC,EAAoB,EAAU,KAAiB,CAE7D,OADA,EAAa,EAAW,MAAM,GAAG,EAAE,GAC5B,CACL,QAAS,GAAW,EACpB,QAAS,IACP,CAAC,EAAW,WAAW,GAAG,KAAK,QAAQ,GAAQ,KAAK,KAAK,IAAI,EAC/D,OAAQ,IAAM,CACZ,KAAK,SAAS,CAAU,EAE5B,GAGF,SAAW,IAAM,CACf,EAAQ,CACN,OAAQ,KAAK,MAAM,KACnB,UAAW,CACT,KAAK,aAAa,IAAI,KAAK,EAAE,YAAY,EAAG,YAAY,EACxD,GAAI,KAAK,aAAa,SAAW,EAAI,CAAC,EAAI,CAAC,IAAI,EAC/C,GAAG,KAAK,aAAa,IAAI,CAAC,IAAS,KAAK,aAAa,CAAI,CAAC,CAC5D,CACF,CAAC,GAGH,QAAU,IAAM,CACd,GACE,CAAE,KAAM,QAAS,EACjB,GACE,CACE,KAAM,WACN,QAAS,KAAK,aAChB,EACA,EAAM,YAAY,CACpB,EACA,GAAK,CAAE,MAAO,CAAE,KAAM,GAAI,CAAE,CAAC,EAC7B,GACE,CACE,KAAM,OACN,QAAS,KAAK,QAChB,EACA,EAAM,SAAS,CACjB,EACA,GAAW,CACT,KAAM,QACN,QAAS,KAAK,OACd,SAAU,KAAK,QACjB,CAAC,EACD,GAAW,CACT,KAAM,OACN,QAAS,CAAC,KAAK,IAAI,EACnB,SAAU,KAAK,QACjB,CAAC,EACD,GAAK,CAAE,MAAO,CAAE,KAAM,GAAI,CAAE,CAAC,EAC7B,GACE,CACE,KAAM,OACN,QAAS,KAAK,SAChB,EACA,EAAM,aAAa,CACrB,CACF,EACA,GAAI,CAAE,KAAM,MAAO,CAAC,EACpB,GAAI,CAAE,KAAM,MAAO,CAAC,CACtB,EAEA,QAAQ,CAAC,EAAoB,CAC3B,IAAM,EAAO,IAAI,KAAK,CAAU,EAChC,KAAK,UAAU,EAAK,YAAY,EAAG,EAAK,SAAS,EAAI,CAAC,EAGxD,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EACxB,IAAM,EAAO,IAAI,KAAK,KAAK,MAAM,MAAM,GAAG,EAAE,IAAI,GAAK,KAAK,IAAI,CAAC,EAC/D,GAAI,MAAM,KAAK,KAAK,EAClB,KAAK,MAAQ,EAAK,SAAS,EAAI,EAEjC,GAAI,MAAM,KAAK,IAAI,EACjB,KAAK,KAAO,EAAK,YAAY,EAGjC,KAAO,CAAC,EAQR,MAAM,EAAG,CACP,MAAM,OAAO,EAEb,IAAQ,OAAM,OAAM,OAAM,QAAO,OAAM,WAAU,QAAS,KAAK,MAC/D,KAAK,aAAe,KAAK,MAAQ,KAAK,MAAM,MAAM,GAAG,EAAI,CAAC,EAC1D,IAAM,EAAe,GAAY,KAAK,KAAM,KAAK,MAAO,CAAC,EACnD,EAAY,IAAI,KACpB,EAAa,QAAQ,GACjB,EAAI,EAAa,OAAO,EAAI,KAAK,WAAa,EAAK,EACzD,EACM,EAAY,KAAK,QAAU,GAAK,EAAI,KAAK,MAAQ,EACjD,EAAc,IAAI,KACtB,GACE,KAAK,MAAQ,KAAK,QAAU,GAAK,EAAI,GACrC,EACA,CACF,EAAE,QAAQ,EAAI,EAChB,EACM,EAAS,IAAI,KACjB,EAAY,QAAQ,GAChB,KAAK,UAAY,EAAI,EAAI,KAAK,OAAS,EAAY,OAAO,GAAK,EAC/D,EACN,EAEM,EAAW,GAAK,IACpB,CAAC,IACC,IAAI,KAAK,EAAU,QAAQ,EAAI,EAAM,EAAM,EAAE,SAAS,EAAE,MAAM,GAAG,EAAE,EACvE,EACA,KAAK,KAAO,CAAC,EACb,IAAM,EAAQ,IAAI,KAAK,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,GAClD,QACM,EAAM,EAAU,QAAQ,EAC5B,GAAO,EAAO,QAAQ,EACtB,GAAO,GACP,CACA,IAAM,EAAO,IAAI,KAAK,CAAG,EACnB,EAAa,EAAK,YAAY,EAAE,MAAM,GAAG,EAAE,GACjD,KAAK,KAAK,KAAK,CACb,OACA,SAAU,GACV,QAAS,EAAK,SAAS,EAAI,IAAM,KAAK,MACtC,QAAS,IAAe,EACxB,UAAW,EAAK,OAAO,EAAI,IAAM,EACjC,QAAS,CAAC,EACR,KAAK,MACL,GAAc,KAAK,MACnB,GAAc,KAAK,GAEvB,CAAC,EAGH,EAAM,MAAQ,OAAO,KAAK,KAAK,EAC/B,EAAK,MAAQ,OAAO,KAAK,IAAI,EAC7B,EAAM,SACJ,EAAK,SACL,EAAK,SACL,EAAS,SACT,EAAK,SACH,KAAK,UAAY,KAAK,SAC1B,EAAK,QAAU,KAAK,MACpB,EAAK,YAAc,GACnB,EAAK,OAAO,GAAG,EAAS,IAAI,CAAC,IAAQ,GAAK,CAAE,MAAO,KAAM,EAAG,CAAG,CAAC,CAAC,EACjE,EAAK,YAAc,GACnB,IAAI,EAAmC,MAC/B,KAAI,QAAS,KACrB,EAAK,OACH,GAAG,KAAK,KAAK,IAAI,CAAC,IAAQ,CACxB,IAAM,EAAU,CAAC,MAAM,EACvB,GAAI,EAAI,QACN,EAAQ,KAAK,UAAU,EAEzB,GAAI,EAAI,QACN,EAAQ,KAAK,OAAO,EAEtB,IAAM,EAAa,EAAI,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,GACrD,GAAI,KAAK,SAAS,CAAU,EAC1B,EAAQ,KAAK,SAAS,EAGxB,GADA,EAAQ,KAAK,EAAI,UAAY,UAAY,SAAS,EAC9C,KAAK,MAAO,CACd,GAAI,IAAO,EACT,EAAQ,KAAK,WAAW,EAE1B,GAAI,IAAS,EACX,EAAQ,KAAK,aAAa,EAG9B,IAAM,EAAU,GACd,CACE,MAAO,EAAQ,KAAK,GAAG,EACvB,MAAO,EACP,QAAS,KAAK,UACd,UAAW,KAAK,QAChB,SAAU,GACZ,EACA,EAAI,KAAK,QAAQ,CACnB,EACA,GAAI,IAAe,KAAK,GACtB,EAAe,EAEjB,OAAO,EACR,CACH,EACE,GAAqC,MAAM,EAEjD,CAEO,IAAM,GAAY,GAAU,eAAe,ECxc3C,IAAM,GAAS,MAAO,EAAW,EAAS,UAA6B,CAG5E,IAAM,EADU,IAAI,YAAY,EACX,OAAO,CAAC,EAGvB,EAAa,MAAM,OAAO,OAAO,OAAO,EAAQ,CAAI,EAM1D,OAHkB,MAAM,KAAK,IAAI,WAAW,CAAU,CAAC,EAC7B,IAAI,CAAC,IAAM,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,EAAE,GAKlE,GAAa,MAAO,IAAuC,CACtE,IAAM,EAAU,MAAM,GAAO,CAAQ,EAE/B,EAAW,MAAM,MAAM,sCAAsC,GAAS,EAC5E,GAAI,EAAS,GAAI,CACf,IAAM,EAAS,MAAM,EAAS,KAAK,EACnC,QAAQ,IAAI,sCAAuC,CAAM,EAG3D,OAAO,EAAS,SAAW,MAGrB,QAAM,aAAa,EACpB,MAAM,WAA6B,CAAU,OAC3C,kBAAmB,+BAEnB,gBAAiB,CACtB,QAAS,CACP,QAAS,cACT,cAAe,SACf,IAAK,EAAK,UACV,SAAU,UACZ,EACA,kBAAmB,CACjB,QAAS,MACX,EACA,uBAAwB,CACtB,QAAS,QACT,SAAU,WACV,OAAQ,EAAW,YAAY,MAAM,EACrC,WAAY,EAAW,YAAY,OAAO,EAC1C,aAAc,EAAW,YAAY,KAAK,EAC1C,UAAW,EAAW,YACpB,mBAAmB,EAAK,gBAC1B,CACF,EACA,uBAAwB,CACtB,OAAQ,EAAW,YAAY,MAAM,EACrC,QAAS,MACT,QAAS,eACT,MAAO,EACP,WAAY,iBACZ,WAAY,EAAK,eACjB,OAAQ,EAAW,YAAY,KAAK,EACpC,aAAc,EAAW,YAAY,KAAK,CAC5C,EACA,6BAA8B,CAC5B,SAAU,WACV,MAAO,IACP,MAAO,EAAK,iBACZ,OAAQ,EAAW,YAAY,MAAM,EACrC,WAAY,EAAW,YAAY,MAAM,EACzC,UAAW,QACb,CACF,QAEO,gBAAiB,CACtB,UAAW,EACX,WAAY,GACZ,gBAAiB,+BACnB,EAEA,kBAAoB,gCACpB,OAAS,CACP,SAAU,GACV,MAAO,GACP,QAAS,GACT,QAAS,GACT,SAAU,GACV,UAAW,EACb,EACA,kBAAoB,CAClB,SAAU,YACV,MAAO,QACP,QAAS,gBACT,QAAS,gBACT,SAAU,YACV,UAAW,uBACb,EACA,MAAQ,EACR,qBAAuB,CACrB,eACA,YACA,OACA,WACA,SACA,aACF,EAEA,QAAQ,CAAC,EAA0B,CAUjC,OATA,KAAK,OAAS,CACZ,SAAU,EAAS,OAAS,KAAK,UACjC,MAAO,EAAS,OAAS,KAAK,WAC9B,QAAS,CAAC,EAAS,MAAM,OAAO,EAChC,QAAS,CAAC,EAAS,MAAM,OAAO,EAChC,SAAU,CAAC,EAAS,MAAM,OAAO,EACjC,UAAW,CAAC,EAAS,MAAM,cAAc,CAC3C,EAEO,KAAK,OAAO,SACf,EACA,OAAO,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,IAAM,CAAC,CAAC,EAAE,OAAS,OAGtD,WAAU,EAAqB,CACnC,IAAM,EAAW,KAAK,cAAc,OAAO,GAAG,MAE9C,GAAI,CAAC,GAAY,OAAO,IAAa,SACnC,MAAO,GAGT,OAAO,MAAM,GAAW,CAAQ,EAGlC,gBAAkB,CAAC,IAAqB,CACtC,IAAQ,QAAO,eAAgB,KAAK,MAI9B,EAAS,KAAK,gBAAgB,MAAM,GAAG,EACvC,EAAoB,KAAK,kBAAkB,MAAM,GAAG,EACpD,EAAW,KAAK,SAAS,CAAQ,EACvC,GAAI,KAAK,QAAU,EACjB,KAAK,MAAQ,EACb,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC,EAExC,EAAM,MAAM,MAAQ,IAAI,EAAW,GAAK,SACxC,KAAK,MAAM,YAAY,oBAAqB,EAAO,EAAS,EAC5D,KAAK,MAAM,YAAY,sBAAuB,EAAkB,EAAS,EACzE,EAAY,YAAc,KAAK,qBAAqB,IAGtD,OAAS,CAAC,IAAiB,CACzB,IAAM,EAAS,EAAM,OAAuB,QAAQ,OAAO,EAE3D,KAAK,gBAAgB,GAAO,OAAS,EAAE,GAGzC,QAAU,IAAM,CACd,GAAS,CAAE,QAAS,KAAK,MAAO,CAAC,EACjC,GACE,CAAE,KAAM,OAAQ,EAChB,GAAK,CAAE,KAAM,OAAQ,CAAC,EACtB,GAAK,CAAE,KAAM,aAAc,CAAC,CAC9B,CACF,EAEA,MAAM,EAAG,CACP,MAAM,OAAO,EAEb,IAAM,EAAQ,KAAK,cAAc,OAAO,EACxC,KAAK,gBAAgB,GAAO,KAAK,EAErC,CAKO,IAAM,GACX,GAEW,GAAuB,GAAqB,eAAe,EAG3D,GAAsB,GC9PnC,IAAQ,SAAS,EAQV,MAAM,WAAmB,CAAU,OACjC,kBAAmB,oBACnB,gBAAiB,SAEjB,gBAAiB,CACtB,IAAK,EACL,IAAK,EACL,KAAM,OACN,KAAM,EACN,aAAc,OACd,WAAY,OACZ,YAAa,OACb,UAAW,OACX,SAAU,GACV,SAAU,GACV,OAAQ,GACR,SAAU,GACV,KAAM,EACR,EAEA,MAAyB,GAGzB,oBAAoB,CAAC,EAAmB,CACtC,KAAK,SAAW,EAGlB,iBAAiB,EAAG,CAClB,KAAK,MAAQ,SAGR,iBAAkB,CACvB,QAAS,CACP,QAAS,eACT,SAAU,WACV,MAAO,aACT,EACA,yBAA0B,CACxB,SAAU,WACV,QAAS,cACX,EACA,0CAA2C,CACzC,OAAQ,OACR,WAAY,SACZ,SAAU,QACZ,EACA,qBAAsB,CACpB,cAAe,MACjB,EACA,sBAAuB,CACrB,SAAU,WACV,KAAM,EACN,WAAY,sBACd,EACA,YAAa,CACX,UAAW,aACX,cAAe,iBACf,WAAY,mBACd,EACA,kBAAmB,CACjB,UAAW,UACb,EACA,mBAAoB,CAClB,UAAW,YACb,CACF,EAEA,QAAU,IACR,GACE,CAAE,KAAM,WAAY,EACpB,GAAK,CAAE,KAAM,OAAQ,CAAC,EACtB,GAAK,CAAE,KAAM,QAAS,CAAC,CACzB,EAEF,YAAY,CAAC,EAAwB,CACnC,IAAQ,QAAO,UAAW,KAAK,MAEzB,EAAe,KAAK,OADT,OAAO,IAAU,SAAW,EAAI,GAAS,GACf,KAAK,IAAI,EAAI,KAAK,KAC7D,EAAO,MAAM,MAAS,EAAe,KAAK,IAAO,EAAM,YAAc,KAGvE,OAAS,CAAC,IAAiB,CACzB,GAAI,KAAK,SACP,OAGF,IAAQ,SAAU,KAAK,MAEjB,EACJ,aAAiB,WACb,EAAM,MAAQ,EAAM,sBAAsB,EAAE,EAC5C,EACA,EAAQ,KAAK,IACjB,KAAK,IACH,KAAK,IACL,KAAK,MACD,EAAI,EAAM,YAAe,KAAK,IAAO,KAAK,KAAO,KAAK,KAAO,GACjE,EAAI,KAAK,IACX,EACA,KAAK,GACP,EACA,GAAI,EAAM,OAAS,QACjB,KAAK,MAAQ,EACR,QAAI,EAAM,OAAS,YACxB,KAAK,aAAa,CAAK,EAEvB,UAAK,aAAa,KAAK,OAAS,CAAC,GAIrC,UAAY,CAAC,IAAyB,CACpC,IAAI,EAAQ,KAAK,QAAU,GAAK,IAAM,OAAO,KAAK,KAAK,EACvD,GAAI,MAAM,CAAK,EACb,EAAQ,KAAK,OAAO,KAAK,IAAM,KAAK,KAAO,IAAM,KAAK,IAAI,EAAI,KAAK,KAErE,IAAI,EAAa,GACjB,OAAQ,EAAM,SACP,cACA,aACH,GAAS,KAAK,KACd,EAAa,GACb,UACG,gBACA,YACH,GAAS,KAAK,KACd,EAAa,GACb,MAGJ,GADA,KAAK,MAAQ,KAAK,IAAI,KAAK,IAAI,EAAO,KAAK,GAAG,EAAG,KAAK,GAAG,EACrD,EACF,EAAM,gBAAgB,EACtB,EAAM,eAAe,GAIzB,iBAAiB,EAAG,CAClB,MAAM,kBAAkB,EAExB,IAAQ,aAAc,KAAK,MAE3B,EAAU,SAAW,EACrB,EAAU,iBAAiB,YAAa,KAAK,OAAQ,EAAI,EACzD,EAAU,iBAAiB,aAAc,KAAK,MAAM,EACpD,EAAU,iBAAiB,OAAQ,KAAK,MAAM,EAC9C,EAAU,iBAAiB,QAAS,KAAK,MAAM,EAE/C,EAAU,iBAAiB,UAAW,KAAK,SAAS,EAG9C,cAAgB,GAExB,MAAM,EAAG,CACP,MAAM,OAAO,EAEb,IAAM,EAAS,KAAK,SAAW,KAG/B,GAFA,KAAK,MAAM,YAAY,mBAAoB,CAAM,EAE7C,KAAK,SACP,KAAK,KAAO,QAEZ,UAAK,KAAO,SAEd,KAAK,UAAY,UAAU,KAAK,gBAAgB,KAAK,MACrD,KAAK,aAAe,OAAO,KAAK,GAAG,EACnC,KAAK,aAAe,OAAO,KAAK,GAAG,EACnC,KAAK,aAAe,KAAK,QAAU,GAAK,OAAO,EAAE,EAAI,OAAO,KAAK,KAAK,EAEtE,IAAQ,QAAO,UAAW,KAAK,MAa/B,GARA,EAAM,MAAM,YACV,mBACA,KAAK,OAAS,OAAS,KAAK,SAC9B,EACA,EAAM,MAAM,YAAY,qBAAsB,KAAK,WAAW,EAC9D,EAAO,MAAM,YAAY,mBAAoB,KAAK,UAAU,EAC5D,EAAO,MAAM,YAAY,qBAAsB,KAAK,YAAY,EAE5D,KAAK,gBAAkB,KAAK,KAAM,CACpC,KAAK,cAAgB,KAAK,KAC1B,QAAS,EAAI,EAAG,EAAI,KAAK,IAAK,IAC5B,EAAM,OAAO,EAAM,KAAK,MAAM,CAAC,EAC/B,EAAO,OAAO,EAAM,KAAK,MAAM,CAAC,EAIpC,KAAK,aAAa,KAAK,KAAK,EAEhC,CAKO,IAAM,GAA+B,GAE/B,GACX,GAAW,eAAe,EAGf,GAAY,GACvB,IAAI,IAAwC,GAAW,GAAG,CAAI,EAC9D,4EACF,ECjKA,IAAQ,YAAU,OAAK,WAAW,EAE5B,GAAc,CAClB,CACE,QAAS,QACT,QAAS,IACX,EACA,CACE,QAAS,UACT,QAAS,IACX,EACA,CACE,QAAS,aACT,QAAS,IACX,EACA,CACE,QAAS,gBACT,QAAS,IACX,EACA,CACE,QAAS,OACT,QAAS,GACX,EACA,CACE,QAAS,aACT,QAAS,KACX,CACF,EAEO,SAAS,EAAU,CAAC,EAAU,GAAa,CAChD,OAAO,GAAW,CAChB,MAAO,kBACP,KAAM,UACN,MAAO,cACP,QAAS,EAAQ,IAAI,EAAG,UAAS,cAAe,CAC9C,UACA,MAAO,eAAe,GACxB,EAAE,CACJ,CAAC,EAGH,IAAM,GAAS,IAAM,GAAa,CAAE,KAAM,SAAU,CAAC,EAE9C,SAAS,EAAa,CAC3B,EACA,EACA,EACA,CACA,OAAO,GAAO,CAAE,KAAM,UAAW,cAAa,OAAM,EAAG,CAAI,EAG7D,IAAM,GAAwB,IAAM,CAClC,GAAc,eAAgB,cAAe,EAAM,UAAU,CAAC,EAC9D,GAAc,SAAU,gBAAiB,EAAM,YAAY,CAAC,EAC5D,GAAc,gBAAiB,eAAgB,EAAM,WAAW,CAAC,EACjE,GAAO,EACP,GAAc,cAAe,sBAAuB,EAAM,WAAW,CAAC,EACtE,GAAc,gBAAiB,oBAAqB,EAAM,WAAW,CAAC,EACtE,GAAO,EACP,GAAc,SAAU,SAAU,EAAM,OAAO,CAAC,EAChD,GAAc,SAAU,UAAW,EAAM,QAAQ,CAAC,CACpD,EAEM,GAAwB,IAAM,CAClC,GAAc,OAAQ,OAAQ,EAAM,SAAS,CAAC,EAC9C,GAAc,SAAU,SAAU,EAAM,WAAW,CAAC,EACpD,GAAc,YAAa,YAAa,EAAM,cAAc,CAAC,CAC/D,EAEM,GAAiB,IAAM,CAC3B,GAAW,EACX,GAAO,EACP,GAAG,GAAsB,CAC3B,EAEa,GAAkB,IAAM,CACnC,GAAW,EACX,GAAO,EACP,GAAG,GAAsB,EACzB,GAAO,EACP,GAAG,GAAsB,CAC3B,EAQO,MAAM,WAAiB,CAA0B,OAC/C,kBAAmB,uBAEnB,gBAAgC,CACrC,QAAS,CACP,QAAS,OACT,cAAe,SACf,OAAQ,MACV,EACA,yBAA0B,CACxB,QAAS,EACT,QAAS,OACT,IAAK,MACL,KAAM,WACN,SAAU,MACZ,EACA,kCAAmC,CACjC,aAAc,EAChB,CACF,QAEO,gBAAiB,SAEjB,gBAAiB,CACtB,QAAS,UACT,KAAM,GACN,SAAU,EACZ,EAEQ,cAAgB,GAChB,WAAa,GAGrB,oBAAoB,CAAC,EAAmB,CACtC,GAAI,KAAK,cACP,KAAK,MAAM,IAAI,gBAAkB,EAAW,QAAU,OAI1D,iBAAiB,EAAG,CAClB,KAAK,MAAQ,GAGP,OAAS,MAEb,MAAK,EAAW,CAClB,OAAO,KAAK,cAAgB,KAAK,MAAM,IAAI,UAAY,KAAK,UAG1D,MAAK,CAAC,EAAiB,CACzB,IAAM,EAAW,KAAK,OAEtB,GADA,KAAK,OAAS,EACV,KAAK,eACP,GAAI,KAAK,MAAM,IAAI,YAAc,EAC/B,KAAK,MAAM,IAAI,UAAY,EAI/B,GAAI,IAAa,GAAW,KAAK,UAC/B,KAAK,UAAU,aAAa,CAAO,EAIvC,YAAY,CAAC,EAAgC,CAC3C,IAAQ,OAAQ,KAAK,MACrB,MAAO,EAAI,gBAAkB,MAAQ,EAAI,gBAAkB,EACzD,EAAM,EAAI,cAEZ,OAAO,EAAI,gBAAkB,EAAO,EAAkB,UAGpD,eAAc,EAAU,CAC1B,IAAQ,OAAQ,KAAK,MACf,EAAY,OAAO,aAAa,EACtC,GAAI,IAAc,KAChB,MAAO,CAAC,EAEV,IAAM,EAAS,CAAC,EAChB,QAAS,EAAI,EAAG,EAAI,EAAU,WAAY,IAAK,CAC7C,IAAM,EAAQ,EAAU,WAAW,CAAC,EACpC,GAAI,CAAC,EAAI,SAAS,EAAM,uBAAuB,EAC7C,SAEF,IAAI,EAAwB,KAAK,aAC/B,EAAM,cACR,EACM,EAAY,KAAK,aAAa,EAAM,YAAY,EACtD,EAAO,KAAK,CAAK,EACjB,MAAO,IAAU,GAAa,IAAU,KACtC,EAAQ,EAAM,mBACd,EAAO,KAAK,CAAK,EAGrB,OAAO,KAGL,aAAY,EAAW,CACzB,IAAM,EAAY,OAAO,aAAa,EACtC,GAAI,IAAc,KAChB,MAAO,GAET,OAAO,KAAK,eAAe,OAAS,EAAU,SAAS,EAAI,GAG7D,gBAA4D,IAAM,GAI1D,oBAAsB,GAE9B,mBAAqB,CAAC,IAAiB,CAErC,GAAI,KAAK,oBACP,OAIF,IAAM,EADS,EAAM,QACE,QACrB,GAAW,OACb,EACA,GAAI,GAAU,KACZ,OAGF,KAAK,UAAU,EAAO,KAAK,GAG7B,kBAAoB,CAAC,IAAiB,CAEpC,IAAM,EADS,EAAM,QACE,QAAQ,QAAQ,EACvC,GAAI,GAAU,KACZ,OAGF,KAAK,UAAU,EAAO,QAAQ,OAAO,GAGvC,QAAU,CACR,GAAS,CACP,KAAM,UACN,KAAM,UACN,QAAS,KAAK,kBACd,SAAU,KAAK,kBACjB,CAAC,EACD,GAAI,CACF,KAAM,MACN,gBAAiB,GACjB,MAAO,CACL,KAAM,WACN,QAAS,MACX,CACF,CAAC,EACD,GAAS,CACP,KAAM,SACR,CAAC,CACH,EAEA,SAAS,CAAC,EAAkB,CAC1B,GAAI,IAAY,OACd,OAEF,IAAM,EAAO,EAAQ,MAAM,GAAG,EAE9B,QAAQ,IAAI,cAAe,EAAK,GAAI,GAAO,GAAG,EAAK,MAAM,CAAC,CAAC,EAC3D,SAAS,YAAY,EAAK,GAAI,GAAO,GAAG,EAAK,MAAM,CAAC,CAAC,EAGvD,gBAAgB,EAAG,CACjB,IAAM,EAAS,KAAK,MAAM,QAAQ,cAChC,cACF,EACA,GAAI,IAAW,KACb,OAEF,IAAI,EAAa,KAAK,eAAiC,IACrD,CAAC,IAAU,EAAM,OACnB,EACA,EAAY,CAAC,GAAG,IAAI,IAAI,CAAS,CAAC,EAClC,KAAK,oBAAsB,GAC3B,EAAO,MAAQ,EAAU,SAAW,EAAI,eAAe,EAAU,KAAO,GACxE,KAAK,oBAAsB,GAIrB,UAAU,EAAY,CAE5B,OADa,KAAK,MAAM,IAAI,aAAe,IAC/B,KAAK,EAAE,OAAS,EAI9B,YAAc,IAAM,CAClB,GAAI,KAAK,UACP,KAAK,UAAU,aAAa,KAAK,MAAM,IAAI,SAAS,EACpD,KAAK,eAAe,GAIhB,cAAc,EAAS,CAC7B,GAAI,KAAK,UACP,GAAI,KAAK,UAAY,CAAC,KAAK,WAAW,EACpC,KAAK,UAAU,YACb,CAAE,aAAc,EAAK,EACrB,4BACA,KAAK,MAAM,GACb,EAEA,UAAK,UAAU,YAAY,CAAC,CAAC,EAKnC,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAExB,IAAQ,MAAK,WAAY,KAAK,MAC9B,GAAI,EAAQ,YAAc,IAAM,EAAI,YAAc,GAChD,EAAI,UAAY,EAAQ,UACxB,EAAQ,UAAY,GAGtB,KAAK,cAAgB,GAErB,EAAQ,MAAM,QAAU,OAGxB,EAAI,iBAAiB,QAAS,KAAK,WAAW,EAG9C,KAAK,eAAe,EAEpB,SAAS,iBAAiB,kBAAmB,CAAC,IAAiB,CAC7D,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAAO,IAAI,EACjC,EAGH,MAAM,EAAS,CACb,IAAQ,WAAY,KAAK,MAIzB,GAFA,MAAM,OAAO,EAET,EAAQ,SAAS,SAAW,EAC9B,OAAQ,KAAK,aACN,UACH,EAAQ,OAAO,GAAG,GAAe,CAAC,EAClC,UACG,UACH,EAAQ,OAAO,GAAG,GAAgB,CAAC,EACnC,OAIV,CAKO,IAAM,GAA2B,GAE3B,GACX,GAAS,eAAe,EAGb,GAAW,GACtB,IAAI,IAA0C,GAAa,GAAG,CAAI,EAClE,gFACF,EC1UO,IAAQ,WAAW,EAAK,CAC7B,OAAQ,CACN,KAAM,GACN,KAAM,GACN,QAAS,EACX,CACF,CAAC,EAEG,GAA4B,CAAC,EAE1B,SAAS,EAAe,EAAgB,CAC7C,MAAO,IAAK,EAAa,EAO3B,IAAI,GAAkC,CAAC,EACnC,GAAiB,GACf,GAAe,IAAI,IAMzB,SAAS,EAAc,CAAC,EAGtB,CACA,IAAM,EAAuB,CAAC,EAE9B,GAAI,IAAY,GACd,MAAO,CAAE,MAAO,QAAS,YAAW,EAGtC,IAAM,EAAa,EAAQ,MAAM,GAAG,EAAE,IAAI,CAAC,IAAY,CACrD,GAAI,EAAQ,WAAW,GAAG,EAExB,OADA,EAAW,KAAK,EAAQ,MAAM,CAAC,CAAC,EACzB,UAET,OAAO,EAAQ,QAAQ,sBAAuB,MAAM,EACrD,EAGD,MAAO,CAAE,MADK,IAAI,OAAO,MAAQ,EAAW,KAAK,GAAG,EAAI,KAAK,EAC7C,YAAW,EAO7B,SAAS,EAAU,CAAC,EAGX,CACP,IAAM,EAAY,EAAK,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAEhD,QAAW,KAAS,GAAgB,CAClC,GAAI,EAAM,SAAU,SACpB,IAAM,EAAQ,EAAU,MAAM,EAAM,KAAK,EACzC,GAAI,EAAO,CACT,IAAM,EAAsB,CAAC,EAI7B,OAHA,EAAM,WAAW,QAAQ,CAAC,EAAM,IAAM,CACpC,EAAO,GAAQ,mBAAmB,EAAM,EAAI,EAAE,EAC/C,EACM,CAAE,QAAO,QAAO,GAK3B,IAAM,EAAW,GAAe,KAAK,CAAC,IAAM,EAAE,QAAQ,EACtD,GAAI,EACF,MAAO,CAAE,MAAO,EAAU,OAAQ,CAAC,CAAE,EAGvC,OAAO,KAOT,SAAS,EAAW,EAAS,CAC3B,IAAM,EAAO,GACT,OAAO,SAAS,KAAK,QAAQ,QAAS,EAAE,EACxC,OAAO,SAAS,SAEpB,GAAO,KAAK,MAAQ,EACpB,GAAO,KAAK,MAAQ,OAAO,SAAS,KAEpC,IAAM,EAAQ,GAAW,CAAI,EAE7B,GAAI,EAAO,CACT,GAAe,EAAM,OACrB,GAAO,QAAQ,MAAQ,EAAM,MAAM,MAAM,OAEzC,IAAM,EAAgB,IAAI,IAC1B,QAAW,KAAU,EAAM,MAAM,QAC/B,EAAc,IAAI,EAAO,MAAQ,UAAW,CAAM,EAGpD,QAAW,KAAQ,GAAc,CAC/B,IAAM,EAAW,EAAK,MAAQ,UACxB,EAAS,EAAc,IAAI,CAAQ,EACzC,GAAI,EACF,EAAK,gBAAgB,EAAO,UAAU,EAAM,MAAM,CAAC,EAEnD,OAAK,gBAAgB,GAGpB,KACL,GAAe,CAAC,EAChB,GAAO,QAAQ,MAAQ,GACvB,QAAW,KAAQ,GACjB,EAAK,gBAAgB,GAS3B,IAAI,GAAc,GAElB,SAAS,EAAe,EAAS,CAC/B,GAAI,GAAa,OACjB,GAAc,GAEd,OAAO,iBAAiB,WAAY,EAAW,EAC/C,OAAO,iBAAiB,aAAc,EAAW,EAG5C,SAAS,EAAY,CAC1B,EACA,EAAyB,CAAC,EACpB,CACN,GAAiB,EAAQ,aAAe,GAExC,GAAiB,EAAO,IAAI,CAAC,IAAQ,CACnC,IAAQ,QAAO,cAAe,GAAe,EAAI,OAAO,EACxD,MAAO,CACL,QACA,aACA,QAAS,EAAI,QACb,SAAU,EAAI,UAAY,EAC5B,EACD,EAED,GAAgB,EAChB,GAAY,EAGP,SAAS,EAAQ,CAAC,EAAoB,CAG3C,GAFA,GAAgB,EAEZ,GACF,OAAO,SAAS,KAAO,KAAO,EAAK,QAAQ,MAAO,EAAE,EAEpD,YAAO,QAAQ,UAAU,CAAC,EAAG,GAAI,IAAM,EAAK,QAAQ,MAAO,EAAE,CAAC,EAGhE,GAAY,EAOP,MAAM,WAAsB,CAAU,OACpC,kBAAmB,wBAEnB,gBAAiB,CACtB,KAAM,SACR,EAEA,QAAU,KAEV,iBAAiB,EAAS,CAIxB,GAHA,MAAM,kBAAkB,EACxB,GAAa,IAAI,IAAI,EAEjB,GAAe,OAAS,EAC1B,GAAY,EAIhB,oBAAoB,EAAS,CAC3B,MAAM,qBAAqB,EAC3B,GAAa,OAAO,IAAI,EAE5B,CAEO,IAAM,GACX,GAAc,eAAe,EClN/B,IAAQ,OAAK,QAAM,SAAO,QAAM,UAAU,EAcnC,MAAM,WAAsB,CAAa,OACvC,kBAAmB,uBACnB,gBAAiB,SAEjB,gBAAiB,CACtB,UAAW,MACX,MAAO,GACP,SAAU,GACV,KAAM,GACN,YAAa,kBACb,UAAW,GACX,SAAU,EACZ,EAEQ,SAAqB,CAAC,KAE1B,QAAO,EAAa,CACtB,OAAO,KAAK,YAGV,QAAO,CAAC,EAAsB,CAChC,GAAI,OAAO,IAAM,SACf,KAAK,SAAW,GAAc,mBAAmB,CAAC,EAElD,UAAK,SAAW,EAElB,KAAK,YAAY,QAIJ,mBAAkB,CAAC,EAA8B,CAC9D,OAAO,EACJ,MAAM,GAAG,EACT,OAAO,CAAC,IAAM,EAAE,KAAK,IAAM,EAAE,EAC7B,IAAI,CAAC,IAAM,CACV,IAAO,EAAO,GAAW,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,GAClD,EAAS,IAAa,GAAW,GACrC,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EAEhB,EAAO,EAAW,EAAM,GAAU,EAAI,GAC5C,MAAO,CAAE,QAAO,OAAM,SAAQ,EAC/B,EAGL,MAAQ,GAGR,oBAAoB,CAAC,EAAmB,EAKxC,iBAAiB,EAAG,CAClB,KAAK,MAAQ,MAGX,OAAM,EAAa,CACrB,OAAQ,KAAK,OAAS,IACnB,MAAM,GAAG,EACT,IAAI,CAAC,IAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,IAAM,IAAM,EAAE,EAG3B,QAAU,IAAM,CACd,GAAK,EACL,GAAI,CAAE,KAAM,SAAU,EAAG,GAAM,CAAE,KAAM,SAAU,OAAQ,EAAK,CAAC,CAAC,CAClE,QAEO,iBAAkB,CACvB,QAAS,CACP,QAAS,cACT,IAAK,EAAW,mBAAmB,KAAK,EACxC,WAAY,EAAW,oBAAoB,QAAQ,CACrD,EACA,8BAA+B,CAC7B,cAAe,EAAW,mBAAmB,KAAK,CACpD,EACA,cAAe,CACb,QAAS,cACT,WAAY,SACZ,IAAK,EAAW,mBAAmB,KAAK,EACxC,oBACE,EAAW,2BAA2B,cAAc,EACtD,QAAS,EAAW,uBAAuB,UAAU,EACrD,KAAM,EAAW,oBAAoB,MAAM,CAC7C,EACA,oBAAqB,CACnB,QAAS,OACT,UAAW,EAAW,qBACpB,mBAAmB,EAAW,iCAAiC,MAAM,GACvE,EACA,aAAc,EAAW,6BAA6B,KAAK,CAC7D,EAKA,sBAAuB,CACrB,MAAO,EAAW,4BAA4B,MAAM,EACpD,WAAY,EAAW,iCAAiC,MAAM,CAChE,EACA,4BAA6B,CAC3B,UAAW,EAAW,4BACpB,mBAAmB,EAAW,4BAA4B,MAAM,GAClE,CACF,EACA,YAAa,CACX,OAAQ,EAAW,sBAAsB,MAAM,EAC/C,OAAQ,EAAW,yBAAyB,cAAc,CAC5D,EACA,sBAAuB,CACrB,IAAK,EACL,oBAAqB,EAAW,2BAA2B,SAAS,CACtE,EACA,0DAA2D,CACzD,WAAY,EAAW,yBAAyB,QAAQ,CAC1D,EACA,uBAAwB,CACtB,QAAS,OACT,aAAc,EAAW,6BAA6B,KAAK,EAC3D,WAAY,EAAW,2BAA2B,MAAM,EACxD,MAAO,EAAW,qBAAqB,MAAM,EAC7C,SAAU,SACV,WAAY,EAAW,0BAA0B,SAAS,CAC5D,EACA,sBAAuB,CACrB,QAAS,EAAW,uBAAuB,UAAU,EACrD,MAAO,EAAW,4BAA4B,MAAM,EACpD,WAAY,EAAW,iCAAiC,MAAM,EAC9D,KAAM,EAAW,oBAAoB,MAAM,EAC3C,OAAQ,IACR,QAAS,MACX,EACA,mCAAoC,CAClC,MAAO,EAAW,4BAA4B,MAAM,EACpD,QAAS,EAAW,4BAA4B,IAAI,CACtD,CACF,EAKQ,WAAW,EAAG,CACpB,IAAQ,WAAY,KAAK,MACzB,EAAQ,iBAAiB,OAAO,EAAE,QAAQ,CAAC,IAAU,CACnD,IAAM,EAAQ,EAAM,cAAc,OAAO,EACzC,EAAM,UAAU,OAAO,UAAW,QAAQ,GAAS,EAAM,OAAO,CAAC,EAClE,EAGK,aAAe,GACvB,aAAe,IAAM,CACnB,IAAQ,UAAS,UAAW,KAAK,MACjC,GAAI,KAAK,SAAU,CACjB,IAAM,EAAS,CACb,GAAG,EAAQ,iBAAiB,eAAe,CAC7C,EACA,KAAK,MAAQ,EAAO,IAAI,CAAC,IAAU,EAAM,KAAK,EAAE,KAAK,GAAG,EACnD,KACL,IAAM,EAAQ,EAAQ,cACpB,eACF,EACA,GAAI,CAAC,EACH,KAAK,MAAQ,GACR,QAAI,EAAM,MACf,EAAO,aAAa,SAAU,EAAE,EAChC,KAAK,MAAQ,EAAM,MAEnB,OAAO,gBAAgB,QAAQ,EAC/B,EAAO,MAAM,EACb,EAAO,OAAO,EACd,KAAK,MAAQ,EAAO,MAGxB,KAAK,YAAY,EACjB,KAAK,aAAe,IAGtB,UAAY,CAAC,IAAyB,CACpC,IAAI,EAAa,GACjB,OAAQ,EAAM,UACP,QACH,GAAI,EAAM,kBAAkB,iBAC1B,EAAM,OAAO,MAAM,EACnB,EAAa,GAEf,UACG,MACH,GAAI,EAAE,EAAM,kBAAkB,kBACb,EAAM,OAAuB,QAC1C,OACF,EACM,MAAM,EAEd,UACG,gBACA,UACH,CACE,IAAM,EAAS,EAAM,OAAuB,QAC1C,OACF,EACA,GAAI,EAAM,kCAAkC,iBAC1C,EAAM,uBAAuB,MAAO,CAExC,CACA,EAAa,GACb,UACG,iBACA,YACH,CACE,IAAM,EAAS,EAAM,OAAuB,QAC1C,OACF,EACA,GAAI,EAAM,8BAA8B,iBACtC,EAAM,mBAAmB,MAAO,CAEpC,CACA,EAAa,GACb,MAEJ,GAAI,EACF,EAAM,eAAe,EACrB,EAAM,gBAAgB,GAI1B,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAGxB,IAAM,EAAc,KAAK,aAAa,SAAS,EAC/C,GAAI,GAAe,KAAK,SAAS,SAAW,EAC1C,KAAK,SAAW,GAAc,mBAAmB,CAAW,EAG9D,IAAQ,WAAY,KAAK,MAEzB,GAAI,KAAK,OAAS,GAChB,KAAK,KAAO,KAAK,WAMnB,GAHA,EAAQ,iBAAiB,SAAU,KAAK,YAAY,EACpD,EAAQ,iBAAiB,UAAW,KAAK,SAA0B,EAE/D,KAAK,OAAS,KAAK,SACrB,QAAQ,KACN,KACA,2DACF,EACA,KAAK,MAAQ,MAIL,kBAAiB,EAAa,CACxC,IAAM,EAAoB,CAAC,GAAG,KAAK,OAAO,EAE1C,GAAI,KAAK,OAAS,CAAC,KAAK,SAAU,CAChC,IAAO,EAAS,GAAQ,KAAK,MAAM,MAAM,GAAG,EAC5C,EAAQ,KAAK,CACX,MAAO,GACP,UACA,MACF,CAAC,EAGH,OAAO,KAGL,aAAY,EAAY,CAC1B,OAAO,QACL,KAAK,QAAU,IACZ,KAAK,OACJ,CAAC,KAAK,kBAAkB,KAAK,CAAC,IAAW,EAAO,QAAU,KAAK,KAAK,CAC1E,EAGF,MAAM,EAAG,CAGP,GAFA,MAAM,OAAO,EAET,KAAK,aAAc,CACrB,KAAK,aAAe,GACpB,OAGF,IAAQ,UAAS,UAAW,KAAK,MACjC,EAAQ,YAAc,GACtB,IAAM,EAAO,KAAK,SAAW,WAAa,SAClC,SAAQ,gBAAiB,KAmBjC,GAlBA,EAAQ,OACN,GAAG,KAAK,kBAAkB,IAAI,CAAC,IAAW,CACxC,OAAO,GACL,CAAE,SAAU,CAAE,EACd,GAAM,CACJ,OACA,KAAM,KAAK,KACX,MAAO,EAAO,MACd,QACE,EAAO,SAAS,EAAO,KAAK,GAC3B,EAAO,QAAU,IAAM,EAC1B,SAAU,EACZ,CAAC,EACD,EAAO,MAAQ,CAAE,MAAO,SAAU,EAClC,KAAK,UAAY,GAAc,EAAO,OAAO,EAAI,GAAK,EAAO,OAAO,CACtE,EACD,CACH,EACI,KAAK,OAAS,CAAC,KAAK,SACtB,EAAO,OAAS,CAAC,EACjB,EAAO,MAAQ,EAAgB,KAAK,MAAmB,GACvD,EAAO,YAAc,KAAK,YAC1B,EAAQ,OAAO,CAAM,EAEvB,KAAK,YAAY,EAErB,CAKO,IAAM,GAAqC,GAErC,GACX,GAAc,eAAe,EAGlB,GAAe,GAC1B,IAAI,IAA2C,GAAc,GAAG,CAAI,EACpE,qFACF,EC1eA,IAAQ,SAAS,EA0EV,MAAM,WAAkB,CAAa,OACnC,kBAAmB,uBAEnB,gBAAiB,CACtB,SAAU,EACV,UAAW,CACb,EAEA,MAA4B,SAE5B,QAAU,CAAC,GAAK,CAAE,KAAM,QAAS,CAAC,EAAG,GAAK,CAAE,KAAM,QAAS,KAAM,OAAQ,CAAC,CAAC,QAEpE,iBAAkB,CACvB,QAAS,CACP,QAAS,eACT,SAAU,UACZ,CACF,EAEA,aAAe,IAAM,CACnB,IAAQ,SAAQ,SAAU,KAAK,MACzB,EAAS,KAAK,aACpB,GAAI,EAAE,aAAkB,aACtB,OACK,QACL,EAAO,YAAc,KAAK,UAC1B,EAAO,aAAe,KAAK,UAE3B,EAAO,OAAS,GAChB,EAAM,OAAS,GACf,KAAK,MAAQ,QAEb,OAAO,OAAS,GAChB,EAAM,OAAS,GACf,KAAK,MAAQ,UAMjB,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EACxB,WAAW,iBAAiB,SAAU,KAAK,YAAY,EAGzD,oBAAoB,EAAS,CAC3B,MAAM,qBAAqB,EAC3B,WAAW,oBAAoB,SAAU,KAAK,YAAY,EAE9D,CAEO,IAAM,GAAY,GAAU,eAAe,EC/F3C,MAAM,WAAkB,CAAa,OACnC,kBAAmB,aAC1B,OAA8B,WAEvB,iBAAkB,CACvB,QAAS,CACP,gBAAiB,OACjB,QAAS,QACT,SAAU,WACV,OAAQ,GACR,MAAO,GACP,QAAS,GACT,MAAO,GACP,OAAQ,GACR,QAAS,KACT,WAAY,wBACd,EACA,gBAAiB,CACf,QAAS,GACX,EACA,YAAa,CACX,MAAO,GACP,OAAQ,GACR,OAAQ,EAAK,cACf,CACF,EAEA,QAAU,EAAM,OAAO,KAEnB,QAAO,EAAsC,CAC/C,IAAQ,WAAU,aAAc,iBAAiB,KAAK,MAAO,EAC7D,MAAO,CACL,MAAO,WAAW,CAAQ,GAAK,GAC/B,OAAQ,WAAW,CAAS,GAAK,EACnC,EAGF,aAAe,CAAC,IAAuB,CACrC,IAAQ,UAAW,KACnB,GAAI,CAAC,EAAQ,OACb,IAAiB,YAAX,EACW,aAAX,GAAI,EACV,EAAO,MAAM,KAAO,EAAO,WAAa,KACxC,EAAO,MAAM,IAAM,EAAO,UAAY,KACtC,EAAO,MAAM,OAAS,GACtB,EAAO,MAAM,MAAQ,GACrB,IAAQ,WAAY,KAEpB,GACE,EACA,CAAC,EAAY,EAAY,IAAiC,CAGxD,GAFA,EAAO,MAAM,MAAQ,KAAK,IAAI,EAAQ,MAAO,EAAI,CAAE,EAAI,KACvD,EAAO,MAAM,OAAS,KAAK,IAAI,EAAQ,OAAQ,EAAI,CAAE,EAAI,KACrD,EAAM,OAAS,UACjB,MAAO,IAGX,aACF,GAGF,iBAAiB,EAAS,CAGxB,GAFA,MAAM,kBAAkB,EAEpB,CAAC,KAAK,OACR,KAAK,OAAS,KAAK,cAGrB,IAAM,EAAU,CAAE,QAAS,EAAK,EAChC,KAAK,iBAAiB,YAAa,KAAK,aAAc,CAAO,EAC7D,KAAK,iBAAiB,aAAc,KAAK,aAAc,CAAO,EAElE,CAKO,IAAM,GAA6B,GAE7B,GAAY,GAAU,eAAe,EAGrC,GAAW,GC+BxB,IAAQ,OAAK,SAAO,QAAM,WAAW,EAM/B,GAAY,CAAC,IACjB,EAAI,MAAM,UAAU,EAAE,IAAI,CAAC,IAAQ,EAAI,KAAK,EAAE,QAAQ,OAAQ,GAAG,CAAC,EAE9D,GAAW,CAAC,IAChB,EAAK,IAAI,CAAC,IAAQ,EAAI,QAAQ,KAAM,KAAK,CAAC,EAAE,KAAK,GAAG,EAE/C,MAAM,WAAgB,CAAa,OACjC,kBAAmB,iBAEnB,gBAAiB,CACtB,QAAS,CACP,2BAA4B,QAC5B,wBAAyB,QACzB,uBAAwB,MACxB,6BAA8B,OAC9B,WAAY,EAAW,WAAW,MAAM,EACxC,mBAAoB,EAAW,eAAe,OAAO,EACrD,QAAS,cACT,aAAc,EAAW,iBAAiB,EAAK,SAAS,EACxD,MAAO,EAAK,aACZ,WAAY,EAAK,MACjB,QAAS,KAAK,EAAK,eAAe,EAAK,YACvC,OAAQ,QAAQ,EAAK,gBAAgB,EAAK,aAC1C,WAAY,QAAQ,EAAK,gBAAgB,EAAK,YAChD,EACA,2BAA4B,CAC1B,SAAU,WACV,WAAY,SACZ,SAAU,SACV,KAAM,WACN,SAAU,EAAW,SAAS,MAAM,EACpC,MAAO,EAAK,aACZ,aAAc,UAChB,EACA,wBAAyB,CACvB,UAAW,OACX,OAAQ,KAAK,EAAK,gBAAgB,EAAK,YACvC,QAAS,EACT,QAAS,cACT,WAAY,SACZ,UAAW,SACX,eAAgB,SAChB,OAAQ,EAAK,WACb,MAAO,EAAK,WACZ,MAAO,EAAK,oBACZ,WAAY,EAAK,iBACjB,aAAc,EAAW,qBAAqB,MAAM,EACpD,QAAS,EAAK,gBAChB,EACA,8BAA+B,CAC7B,WAAY,EAAK,iBACjB,QAAS,EAAK,qBAChB,CACF,QAEO,gBAAiB,CACtB,QAAS,GACT,WAAY,EACd,EAEA,eAAyC,IAAM,CAC7C,KAAK,OAAO,GAGd,QAAU,IAAM,CACd,GAAK,CAAE,KAAM,SAAU,EAAG,KAAK,OAAO,EACtC,GAAO,EAAM,EAAE,EAAG,CAChB,KAAM,SACN,KAAM,SACN,OAAQ,CAAC,KAAK,WACd,UAAW,UAAU,KAAK,UAC1B,QAAS,KAAK,cAChB,CAAC,CACH,CACF,CAKO,IAAM,GAAyB,GAEzB,GAAU,GAAQ,eAAe,EAGjC,GAAS,GACpB,IAAI,IAAqC,GAAQ,GAAG,CAAI,EACxD,mEACF,EAYO,MAAM,WAAoB,CAAa,OACrC,kBAAmB,sBAEnB,gBAAgC,CACrC,QAAS,CACP,gBAAiB,UACjB,eAAgB,OAChB,YAAa,OACb,QAAS,OACT,oBAAqB,OACrB,WAAY,SACZ,WAAY,EAAK,UACjB,IAAK,EAAK,UACV,aAAc,EAAW,qBAAqB,EAAK,SAAS,EAC5D,SAAU,QACZ,EACA,kBAAmB,CACjB,oBAAqB,YAAY,EAAK,WACxC,EACA,8BAA+B,CAC7B,oBAAqB,eAAe,EAAK,WAC3C,EACA,8BAA+B,CAC7B,QAAS,OACT,QAAS,MACT,WAAY,SACZ,WAAY,EAAK,QACjB,aAAc,EAAW,mBAAmB,EAAK,SAAS,EAC1D,UAAW,EAAK,aAChB,SAAU,SACV,SAAU,cACV,IAAK,EAAK,UACV,UAAW,QAAQ,EAAK,gBAAgB,EAAK,WAC7C,QAAS,EAAK,SAChB,EACA,yBAA0B,CACxB,MAAO,EAAK,UACZ,OAAQ,EAAK,UACb,WAAY,EAAK,UACjB,UAAW,SACX,QAAS,EACT,OAAQ,CACV,EACA,iBAAkB,CAChB,QAAS,iBACX,EACA,+BAAgC,CAC9B,WAAY,EAAK,WACjB,MAAO,EAAK,cACd,CACF,QAEO,gBAAiB,SAEjB,gBAAiB,CACtB,KAAM,GACN,UAAW,GACX,SAAU,GACV,YAAa,aACb,SAAU,GACV,SAAU,EACZ,EAGA,MAAQ,MAGJ,KAAI,EAAa,CACnB,OAAO,GAAU,KAAK,KAAK,EAAE,OAAO,CAAC,IAAQ,IAAQ,EAAE,KAGrD,KAAI,CAAC,EAAa,CACpB,KAAK,MAAQ,GAAS,CAAC,EAGjB,eAA0B,CAAC,KAE/B,cAAa,EAAY,CAC3B,OAAO,KAAK,kBAGV,cAAa,CAAC,EAAqB,CACrC,GAAI,OAAO,IAAM,SACf,KAAK,eAAiB,GAAY,yBAAyB,CAAC,EAE5D,UAAK,eAAiB,EAExB,KAAK,YAAY,QAIJ,yBAAwB,CAAC,EAA0B,CAChE,OAAO,GAAU,CAAO,EAAE,IAAI,CAAC,IAAS,IAAQ,GAAK,KAAO,CAAI,EAGlE,iBAAiB,EAAS,CACxB,MAAM,kBAAkB,EAExB,IAAM,EAAW,KAAK,aAAa,gBAAgB,EACnD,GAAI,GAAY,KAAK,eAAe,SAAW,EAC7C,KAAK,eAAiB,GAAY,yBAAyB,CAAQ,EAKvE,oBAAoB,CAAC,EAAyB,CAC5C,KAAK,SAAW,EAGlB,iBAAiB,EAAS,CACxB,KAAK,MAAQ,GAGf,OAAS,CAAC,IAAgB,CACxB,IAAM,EAAU,EAAI,KAAK,EACzB,GAAI,IAAY,IAAM,KAAK,KAAK,SAAS,CAAO,EAC9C,OAEF,KAAK,KAAO,CAAC,GAAG,KAAK,KAAM,CAAO,EAClC,KAAK,YAAY,EAAI,GAGvB,UAAY,CAAC,IAAoB,CAC/B,GAAI,KAAK,KAAK,SAAS,CAAO,EAC5B,KAAK,KAAO,KAAK,KAAK,OAAO,CAAC,IAAM,IAAM,CAAO,EACjD,KAAK,YAAY,EAAI,EAErB,UAAK,OAAO,CAAO,GAIvB,SAAW,CAAC,IAAyB,CACnC,IAAQ,YAAa,KAAK,MAC1B,OAAQ,EAAM,SACP,IACH,CACE,IAAM,EAAM,EAAS,MAAM,MAAM,GAAG,EAAE,GACtC,KAAK,OAAO,CAAG,CACjB,CACA,UACG,QACH,CACE,IAAM,EAAM,EAAS,MAAM,MAAM,GAAG,EAAE,GACtC,KAAK,OAAO,CAAG,CACjB,CACA,EAAM,gBAAgB,EACtB,EAAM,eAAe,EACrB,iBAMN,cAAgB,IAAM,CACpB,IAAQ,aAAc,MACd,WAAY,KAAK,MACnB,EAAgB,CAAC,GAAG,KAAK,aAAa,EACtC,EAAY,KAAK,KAAK,OAAO,CAAC,IAAQ,CAAC,EAAK,SAAS,CAAG,CAAC,EAC/D,GAAI,EAAU,OACZ,EAAK,KAAK,KAAM,GAAG,CAAS,EAE9B,IAAM,EAAwB,EAAK,IAAI,CAAC,IAAQ,CAC9C,GAAI,IAAQ,IAAM,IAAQ,KACxB,OAAO,KACF,QAAI,OAAO,IAAQ,SACxB,MAAO,CACL,QAAS,IAAM,KAAK,KAAK,SAAS,EAAI,KAAK,EAC3C,QAAS,EAAI,QACb,MAAM,EAAG,CACP,EAAU,EAAI,KAAK,EAEvB,EAEA,WAAO,CACL,QAAS,IAAM,KAAK,KAAK,SAAS,CAAG,EACrC,QAAS,EACT,MAAM,EAAG,CACP,EAAU,CAAG,EAEjB,EAEH,EAED,EAAQ,CACN,OAAQ,EACR,MAAO,OACP,WACF,CAAC,GAGH,QAAU,IAAM,CAEd,GAAO,CAAE,KAAM,SAAU,MAAO,CAAE,WAAY,QAAS,EAAG,SAAU,EAAG,CAAC,EACxE,GAAI,CACF,KAAM,eACN,MAAO,MACP,KAAM,OACN,UAAW,eACb,CAAC,EACD,GAAM,CACJ,KAAM,WACN,MAAO,UACP,UAAW,gBACX,UAAW,KAAK,QAClB,CAAC,EACD,GACE,CACE,KAAM,SACN,MAAO,UACP,UAAW,wBACX,aAAc,UACd,KAAM,UACN,QAAS,KAAK,aAChB,EACA,EAAM,YAAY,CACpB,CACF,EAEA,UAAY,CAAC,IAAiB,CAC5B,GAAI,KAAK,UAAY,CAAC,KAAK,SAAU,CACnC,IAAM,EAAO,EAAM,OAAuB,QACxC,GAAQ,OACV,EACA,KAAK,KAAO,KAAK,KAAK,OAAO,CAAC,IAAM,IAAM,EAAI,OAAO,EACrD,EAAI,OAAO,EACX,KAAK,YAAY,EAAI,EAEvB,EAAM,gBAAgB,EACtB,EAAM,eAAe,GAGvB,MAAM,EAAS,CACb,MAAM,OAAO,EAEb,IAAQ,eAAc,UAAS,YAAa,KAAK,MASjD,GAHA,EAAQ,SAAW,KAAK,SACxB,EAAS,MAAQ,GACjB,EAAS,aAAa,cAAe,KAAK,WAAW,EACjD,KAAK,UAAY,CAAC,KAAK,SACzB,EAAQ,gBAAgB,SAAU,EAAK,EACvC,EAAS,gBAAgB,SAAU,CAAC,KAAK,SAAS,EAElD,OAAQ,gBAAgB,SAAU,EAAI,EACtC,EAAS,gBAAgB,SAAU,EAAI,EAGzC,EAAa,YAAc,GAC3B,QAAW,KAAO,KAAK,KACrB,EAAa,OACX,GAAQ,CACN,QAAS,EACT,WAAY,KAAK,UAAY,CAAC,KAAK,SACnC,eAAgB,KAAK,SACvB,CAAC,CACH,EAGN,CAKO,IAAM,GAAiC,GAEjC,GACX,GAAY,eAAe,EAGhB,GAAa,GACxB,IAAI,IAAyC,GAAY,GAAG,CAAI,EAChE,gFACF,EC9gBO,IAAM,GAAU,QCgDvB,IAAQ,SAAS,EAQb,GAAiC,KACjC,GAAoD,KACpD,GAAoC,KAElC,GAAgB,eAEhB,GAAmB,EACtB,IAAI,MAAkB,CACrB,cAAe,OACf,QAAS,EAAW,mBAAmB,UAAU,EACjD,aAAc,EAAW,kBAAkB,KAAK,EAChD,WAAY,EAAW,cAAc,MAAM,EAC3C,MAAO,EAAW,iBAAiB,MAAM,EACzC,SAAU,EAAW,oBAAoB,MAAM,EAC/C,WAAY,MACZ,SAAU,EAAW,oBAAoB,OAAO,EAChD,WAAY,WACZ,UAAW,kBACX,SAAU,UACZ,GACC,IAAI,QAAoB,CACvB,OAAQ,GACV,GACC,IAAI,WAAuB,CAC1B,WAAY,QACZ,QAAS,QACT,aAAc,MACd,SAAU,OACZ,GACC,IAAI,QAAoB,CACvB,MAAO,SACT,GACC,IAAI,cAA0B,CAC7B,QAAS,KACT,SAAU,WACV,MAAO,MACP,OAAQ,MACR,WAAY,UACZ,UAAW,eACb,GACC,IAAI,mBAA+B,CAClC,IAAK,OACL,KAAM,2BACR,GACC,IAAI,mBAA+B,CAClC,OAAQ,OACR,KAAM,2BACR,GACC,IAAI,mBAA+B,CAClC,KAAM,OACN,IAAK,2BACP,GACC,IAAI,mBAA+B,CAClC,MAAO,OACP,IAAK,2BACP,CACF,EAKI,GAAwB,GAC5B,SAAS,EAAmB,EAAS,CACnC,GAAI,GAAuB,OAC3B,GAAwB,GACxB,GAAW,eAAgB,EAAgB,EAG7C,SAAS,EAAW,EAAS,CAC3B,GAAI,KAAgB,KAClB,aAAa,EAAW,EACxB,GAAc,KAEhB,GAAI,KAAiB,KACnB,GAAa,OAAO,EACpB,GAAe,KAEjB,GAAgB,KAGlB,SAAS,EAAU,CAAC,EAAiC,CACnD,GAAI,EAAS,WAAW,GAAG,EAAG,MAAO,OACrC,GAAI,EAAS,WAAW,GAAG,EAAG,MAAO,OACrC,GAAI,EAAS,WAAW,GAAG,EAAG,MAAO,OACrC,GAAI,EAAS,WAAW,GAAG,EAAG,MAAO,OACrC,MAAO,OAGT,SAAS,EAAa,CACpB,EACA,EACA,EACM,CACN,IAAM,EAAa,EAAO,sBAAsB,EAC1C,EAAU,EAAU,sBAAsB,EAC1C,EAAW,EAAW,KAAO,EAAW,MAAQ,IAChD,EAAW,EAAW,IAAM,EAAW,OAAS,IAElD,EACJ,GAAI,EAAS,WAAW,GAAG,GAAK,EAAS,WAAW,GAAG,EACrD,EACE,KAAK,IAAI,EAAG,KAAK,IAAI,EAAQ,MAAQ,EAAG,EAAW,EAAQ,IAAI,CAAC,EAAI,EAEtE,OACE,KAAK,IAAI,EAAG,KAAK,IAAI,EAAQ,OAAS,EAAG,EAAW,EAAQ,GAAG,CAAC,EAAI,EAExE,EAAU,MAAM,YAAY,uBAAwB,EAAS,IAAI,EAGnE,SAAS,EAAU,CAAC,EAAc,EAAmC,CACnE,GAAI,EACF,EAAO,EAAS,CAAI,EAEtB,IAAM,EAAK,GAAK,CAAE,MAAO,EAAc,CAAC,EAExC,OADA,EAAG,UAAY,EAAO,YAAY,CAAI,EAC/B,EAGT,SAAS,EAAW,CAClB,EACA,EACA,EACM,CACN,GAAoB,EACpB,GAAY,EACZ,GAAgB,EAEhB,IAAQ,MAAK,OAAM,SAAU,EAAO,sBAAsB,EACpD,EAAK,EAAO,EAAQ,IACpB,EAAI,OAAO,YACX,EAAI,OAAO,WACX,GAA4B,EAAM,EAAI,IAAM,IAAM,MACrD,EAAK,EAAI,IAAM,IAAM,KAElB,EAAU,GAAW,EAAM,CAAW,EAC5C,EAAQ,UAAU,IAAI,GAAW,CAAQ,CAAC,EAE1C,GAAe,GAAS,CACtB,UACA,SACA,WACA,eAAgB,SAChB,eAAgB,QAClB,CAAC,EAED,sBAAsB,IAAM,CAC1B,GAAI,IAAgB,GAClB,GAAc,EAAS,EAAQ,CAAQ,EAE1C,EAGH,SAAS,EAAiB,CAAC,EAAkC,CAC3D,QAAW,KAAQ,EAAM,aAAa,EACpC,GAAI,aAAgB,aAAe,EAAK,QAAQ,QAC9C,OAAO,EAGX,OAAO,KAGF,SAAS,EAAY,CAAC,EAA0B,CAAC,EAAS,CAC/D,GAAoB,EACpB,IACE,gBAAgB,GAChB,QAAQ,IACR,SAAU,EAAc,IACtB,EAEJ,SAAS,iBAAiB,cAAe,CAAC,IAAwB,CAChE,GAAI,GACF,QAAW,KAAQ,EAAM,aAAa,EACpC,GACE,aAAgB,aAChB,EAAK,OACL,CAAC,EAAK,QAAQ,QACd,CACA,EAAK,QAAQ,QAAU,EAAK,MAC5B,EAAK,gBAAgB,OAAO,EAC5B,OAKN,IAAM,EAAS,GAAkB,CAAK,EAEtC,GAAI,IAAW,GAAe,OAI9B,GAFA,GAAY,EAER,CAAC,EAAQ,OACb,IAAM,EAAO,EAAO,QAAQ,SAAW,KACvC,GAAI,CAAC,EAAM,OAEX,GAAc,WACZ,IAAM,GAAY,EAAQ,EAAM,CAAW,EAC3C,CACF,EACD,EAED,SAAS,iBAAiB,eAAgB,EAAW,EAErD,SAAS,iBAAiB,cAAe,EAAW,EACpD,SAAS,iBAAiB,UAAW,EAAW,EAChD,OAAO,iBAAiB,SAAU,GAAa,EAAI,ECjQrD,OAAO,OAAO,WAAY,CAAE,SAAO,UAAQ,CAAC",
|
|
74
|
-
"debugId": "
|
|
74
|
+
"mappings": "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",
|
|
75
|
+
"debugId": "8C145371B30C7CFD64756E2164756E21",
|
|
75
76
|
"names": []
|
|
76
77
|
}
|