diff --git a/app/dist/App.min.js b/app/dist/App.min.js index 66655ef..48602d6 100644 --- a/app/dist/App.min.js +++ b/app/dist/App.min.js @@ -2774,6 +2774,6 @@ ${json2html(project.html)} }); <\/script> -`,c=createBlobURL(r,"text/html"),i=new DOMParser().parseFromString(r,"text/html"),g=e.contentDocument||e.contentWindow.document;t?e.setAttribute("src",c):diffNodes(g.documentElement,i.documentElement)};window.detectOperatingSystem=()=>{let t=navigator.userAgent||navigator.platform,e=/Macintosh|MacIntel|MacPPC|Mac68K/.test(t),a=/Win32|Win64|Windows|WinCE/.test(t),o=/Linux/.test(t)&&!a;return e?"Mac":a?"Windows":o?"Linux":"unknown"};window.diffNodes=(t,e)=>{if(!t||!e||t?.getAttribute&&t.hasAttribute("data-ignore-diff"))return;if(t.nodeName==="IFRAME"&&e.nodeName==="IFRAME"){["id","title","class","style","sandbox"].forEach(l=>{t.getAttribute(l)!==e.getAttribute(l)&&t.setAttribute(l,e.getAttribute(l))});let r=t.getAttribute("srcdoc"),c=e.getAttribute("srcdoc");return void 0}if(t.nodeName!==e.nodeName){t.replaceWith(e.cloneNode(!0));return}if(t.nodeType===Node.ELEMENT_NODE&&e.nodeType===Node.ELEMENT_NODE){let s=Array.from(t.attributes),r=Array.from(e.attributes);if(s.forEach(c=>{e.hasAttribute(c.name)||t.removeAttribute(c.name)}),r.forEach(c=>{t.getAttribute(c.name)!==c.value&&t.setAttribute(c.name,c.value)}),t.nodeName==="INPUT"&&e.nodeName==="INPUT"){let c=t.value,l=e.value;c!==l&&(t.value=l)}}let a=Array.from(t.childNodes),o=Array.from(e.childNodes);a.forEach((s,r)=>{let c=o[r];if(!c){t.removeChild(s);return}t.tagName==="TITLE"||t.tagName==="STYLE"&&t.textContent!==e.textContent?t.textContent=e.textContent:s.nodeType===Node.TEXT_NODE&&s.nodeValue!==c.nodeValue&&(s.nodeValue=c.nodeValue),diffNodes(s,c)}),o.slice(a.length).forEach(s=>{t.appendChild(s.cloneNode(!0))})};document.addEventListener("DOMContentLoaded",function(){window.onload=()=>{applyCssQuickCommands("cssQuickCommands.json"),window.onkeydown=e=>{let a=document.activeElement;if(!["INPUT","TEXTAREA"].includes(a.tagName)&&a.getAttribute("contenteditable")!=="true"){let s=detectOperatingSystem(),r=s==="Mac"&&e.metaKey,c=s!=="Mac"&&e.ctrlKey,l=r||c,i=e.shiftKey||e.key==="Shift",g=e.key.toLowerCase()==="z",y=m=>(e.preventDefault(),m(),!1);if(data.ctrlKey=c,data.cmdKey=r,l){if(g)return y(i?redo:undo);if(e.key.toLowerCase()==="d")return y(cloneLayers);if(e.key.toLowerCase()==="x")return y(cutLayers);if(e.key.toLowerCase()==="c")return y(copyLayers);if(e.key.toLowerCase()==="v")return y(pasteLayers);if(i&&e.key.toLowerCase()==="p")return y(commandPalette);if(i&&l&&e.key.toLowerCase()==="a")return y(clearAllSelections)}if(i&&(data.shiftKey=!0),e.key==="Escape"){e.preventDefault();let m=document.querySelector("dialog[open]");return m&&m.querySelector("header > button").onclick(),!1}}if((["INPUT","TEXTAREA"].includes(a.tagName)||a.getAttribute("contenteditable")==="true")&&e.key==="Escape"){e.preventDefault();let s=document.querySelector("dialog[open]");return s&&s.querySelector("header > button").onclick(),a.blur(),!1}},window.onkeyup=e=>{e.key==="Shift"&&(data.shiftKey=!1),(e.key==="Control"||e.key==="ControlLeft"||e.key==="ControlRight")&&(data.ctrlKey=!1),(e.key==="Command"||e.key==="Meta")&&(data.cmdKey=!1)},localStorage.getItem("Polyrise")?importJSON(JSON.parse(localStorage.getItem("Polyrise"))):App.render("#app"),window.onresize=App.render("#app")}});})(); +`,c=createBlobURL(r,"text/html"),i=new DOMParser().parseFromString(r,"text/html"),g=e.contentDocument||e.contentWindow.document;t?e.setAttribute("src",c):diffNodes(g.documentElement,i.documentElement)};window.detectOperatingSystem=()=>{let t=navigator.userAgent||navigator.platform,e=/Macintosh|MacIntel|MacPPC|Mac68K/.test(t),a=/Win32|Win64|Windows|WinCE/.test(t),o=/Linux/.test(t)&&!a;return e?"Mac":a?"Windows":o?"Linux":"unknown"};window.diffNodes=(t,e)=>{if(!t||!e||t?.getAttribute&&t.hasAttribute("data-ignore-diff"))return;if(t.nodeName==="IFRAME"&&e.nodeName==="IFRAME"){["id","title","class","style","sandbox"].forEach(l=>{t.getAttribute(l)!==e.getAttribute(l)&&t.setAttribute(l,e.getAttribute(l))});let r=t.getAttribute("srcdoc"),c=e.getAttribute("srcdoc");return void 0}if(t.nodeName!==e.nodeName){t.replaceWith(e.cloneNode(!0));return}if(t.nodeType===Node.ELEMENT_NODE&&e.nodeType===Node.ELEMENT_NODE){let s=Array.from(t.attributes),r=Array.from(e.attributes);if(s.forEach(c=>{e.hasAttribute(c.name)||t.removeAttribute(c.name)}),r.forEach(c=>{t.getAttribute(c.name)!==c.value&&t.setAttribute(c.name,c.value)}),t.nodeName==="INPUT"&&e.nodeName==="INPUT"){let c=t.value,l=e.value;c!==l&&(t.value=l)}}let a=Array.from(t.childNodes),o=Array.from(e.childNodes);a.forEach((s,r)=>{let c=o[r];if(!c){t.removeChild(s);return}t.tagName==="TITLE"||t.tagName==="STYLE"&&t.textContent!==e.textContent?t.textContent=e.textContent:s.nodeType===Node.TEXT_NODE&&s.nodeValue!==c.nodeValue&&(s.nodeValue=c.nodeValue),diffNodes(s,c)}),o.slice(a.length).forEach(s=>{t.appendChild(s.cloneNode(!0))})};document.addEventListener("DOMContentLoaded",function(){window.onload=()=>{applyCssQuickCommands("cssQuickCommands.json"),window.onkeydown=e=>{let a=document.activeElement;if(!["INPUT","TEXTAREA"].includes(a.tagName)&&a.getAttribute("contenteditable")!=="true"){let s=detectOperatingSystem(),r=s==="Mac"&&e.metaKey,c=s!=="Mac"&&e.ctrlKey,l=r||c,i=e.shiftKey||e.key==="Shift",g=e.key.toLowerCase()==="z",y=m=>(e.preventDefault(),m(),!1);if(data.ctrlKey=c,data.cmdKey=r,l){if(g)return y(i?redo:undo);if(e.key.toLowerCase()==="d")return y(cloneLayers);if(e.key.toLowerCase()==="x")return y(cutLayers);if(e.key.toLowerCase()==="c")return y(copyLayers);if(e.key.toLowerCase()==="v")return y(pasteLayers);if(i&&e.key.toLowerCase()==="p")return y(commandPalette);if(i&&l&&e.key.toLowerCase()==="a")return y(clearAllSelections)}if(i&&(data.shiftKey=!0),e.key==="Escape"){e.preventDefault();let m=document.querySelector("dialog[open]");return m&&m.querySelector("header > button").onclick(),!1}}if((["INPUT","TEXTAREA"].includes(a.tagName)||a.getAttribute("contenteditable")==="true")&&e.key==="Escape"){e.preventDefault();let s=document.querySelector("dialog[open]");return s&&s.querySelector("header > button").onclick(),a.blur(),!1}},window.onkeyup=e=>{e.key==="Shift"&&(data.shiftKey=!1),(e.key==="Control"||e.key==="ControlLeft"||e.key==="ControlRight")&&(data.ctrlKey=!1),(e.key==="Command"||e.key==="Meta")&&(data.cmdKey=!1)},localStorage.getItem("Polyrise")?importJSON(JSON.parse(localStorage.getItem("Polyrise"))):App.render("#app"),window.onresize=()=>{App.render("#app"),getIframeClientSize()}}});})(); /*! Pickr 1.8.2 MIT | https://github.com/Simonwep/pickr */ //# sourceMappingURL=App.min.js.map diff --git a/app/dist/App.min.js.map b/app/dist/App.min.js.map index b4a29e9..38c1b7f 100644 --- a/app/dist/App.min.js.map +++ b/app/dist/App.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../libraries/pickr/pickr.min.js", "../src/App.js"], - "sourcesContent": ["/*! Pickr 1.8.2 MIT | https://github.com/Simonwep/pickr */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Pickr=e():t.Pickr=e()}(self,(function(){return(()=>{\"use strict\";var t={d:(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})}},e={};t.d(e,{default:()=>L});var o={};function n(t,e,o,n,i={}){e instanceof HTMLCollection||e instanceof NodeList?e=Array.from(e):Array.isArray(e)||(e=[e]),Array.isArray(o)||(o=[o]);for(const s of e)for(const e of o)s[t](e,n,{capture:!1,...i});return Array.prototype.slice.call(arguments,1)}t.r(o),t.d(o,{adjustableInputNumbers:()=>p,createElementFromString:()=>r,createFromTemplate:()=>a,eventPath:()=>l,off:()=>s,on:()=>i,resolveElement:()=>c});const i=n.bind(null,\"addEventListener\"),s=n.bind(null,\"removeEventListener\");function r(t){const e=document.createElement(\"div\");return e.innerHTML=t.trim(),e.firstElementChild}function a(t){const e=(t,e)=>{const o=t.getAttribute(e);return t.removeAttribute(e),o},o=(t,n={})=>{const i=e(t,\":obj\"),s=e(t,\":ref\"),r=i?n[i]={}:n;s&&(n[s]=t);for(const n of Array.from(t.children)){const t=e(n,\":arr\"),i=o(n,t?{}:r);t&&(r[t]||(r[t]=[])).push(Object.keys(i).length?i:n)}return n};return o(r(t))}function l(t){let e=t.path||t.composedPath&&t.composedPath();if(e)return e;let o=t.target.parentElement;for(e=[t.target,o];o=o.parentElement;)e.push(o);return e.push(document,window),e}function c(t){return t instanceof Element?t:\"string\"==typeof t?t.split(/>>/g).reduce(((t,e,o,n)=>(t=t.querySelector(e),ot)){function o(o){const n=[.001,.01,.1][Number(o.shiftKey||2*o.ctrlKey)]*(o.deltaY<0?1:-1);let i=0,s=t.selectionStart;t.value=t.value.replace(/[\\d.]+/g,((t,o)=>o<=s&&o+t.length>=s?(s=o,e(Number(t),n,i)):(i++,t))),t.focus(),t.setSelectionRange(s,s),o.preventDefault(),t.dispatchEvent(new Event(\"input\"))}i(t,\"focus\",(()=>i(window,\"wheel\",o,{passive:!1}))),i(t,\"blur\",(()=>s(window,\"wheel\",o)))}const{min:u,max:h,floor:d,round:m}=Math;function f(t,e,o){e/=100,o/=100;const n=d(t=t/360*6),i=t-n,s=o*(1-e),r=o*(1-i*e),a=o*(1-(1-i)*e),l=n%6;return[255*[o,r,s,s,a,o][l],255*[a,o,o,r,s,s][l],255*[s,s,a,o,o,r][l]]}function v(t,e,o){const n=(2-(e/=100))*(o/=100)/2;return 0!==n&&(e=1===n?0:n<.5?e*o/(2*n):e*o/(2-2*n)),[t,100*e,100*n]}function b(t,e,o){const n=u(t/=255,e/=255,o/=255),i=h(t,e,o),s=i-n;let r,a;if(0===s)r=a=0;else{a=s/i;const n=((i-t)/6+s/2)/s,l=((i-e)/6+s/2)/s,c=((i-o)/6+s/2)/s;t===i?r=c-l:e===i?r=1/3+n-c:o===i&&(r=2/3+l-n),r<0?r+=1:r>1&&(r-=1)}return[360*r,100*a,100*i]}function y(t,e,o,n){e/=100,o/=100;return[...b(255*(1-u(1,(t/=100)*(1-(n/=100))+n)),255*(1-u(1,e*(1-n)+n)),255*(1-u(1,o*(1-n)+n)))]}function g(t,e,o){e/=100;const n=2*(e*=(o/=100)<.5?o:1-o)/(o+e)*100,i=100*(o+e);return[t,isNaN(n)?0:n,i]}function _(t){return b(...t.match(/.{2}/g).map((t=>parseInt(t,16))))}function w(t){t=t.match(/^[a-zA-Z]+$/)?function(t){if(\"black\"===t.toLowerCase())return\"#000\";const e=document.createElement(\"canvas\").getContext(\"2d\");return e.fillStyle=t,\"#000\"===e.fillStyle?null:e.fillStyle}(t):t;const e={cmyk:/^cmyk[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)/i,rgba:/^((rgba)|rgb)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hsla:/^((hsla)|hsl)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hsva:/^((hsva)|hsv)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hexa:/^#?(([\\dA-Fa-f]{3,4})|([\\dA-Fa-f]{6})|([\\dA-Fa-f]{8}))$/i},o=t=>t.map((t=>/^(|\\d+)\\.\\d+|\\d+$/.test(t)?Number(t):void 0));let n;t:for(const i in e){if(!(n=e[i].exec(t)))continue;const s=t=>!!n[2]==(\"number\"==typeof t);switch(i){case\"cmyk\":{const[,t,e,s,r]=o(n);if(t>100||e>100||s>100||r>100)break t;return{values:y(t,e,s,r),type:i}}case\"rgba\":{const[,,,t,e,r,a]=o(n);if(t>255||e>255||r>255||a<0||a>1||!s(a))break t;return{values:[...b(t,e,r),a],a,type:i}}case\"hexa\":{let[,t]=n;4!==t.length&&3!==t.length||(t=t.split(\"\").map((t=>t+t)).join(\"\"));const e=t.substring(0,6);let o=t.substring(6);return o=o?parseInt(o,16)/255:void 0,{values:[..._(e),o],a:o,type:i}}case\"hsla\":{const[,,,t,e,r,a]=o(n);if(t>360||e>100||r>100||a<0||a>1||!s(a))break t;return{values:[...g(t,e,r),a],a,type:i}}case\"hsva\":{const[,,,t,e,r,a]=o(n);if(t>360||e>100||r>100||a<0||a>1||!s(a))break t;return{values:[t,e,r,a],a,type:i}}}}return{values:null,type:null}}function A(t=0,e=0,o=0,n=1){const i=(t,e)=>(o=-1)=>e(~o?t.map((t=>Number(t.toFixed(o)))):t),s={h:t,s:e,v:o,a:n,toHSVA(){const t=[s.h,s.s,s.v,s.a];return t.toString=i(t,(t=>`hsva(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toHSLA(){const t=[...v(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`hsla(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toRGBA(){const t=[...f(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`rgba(${t[0]}, ${t[1]}, ${t[2]}, ${s.a})`)),t},toCMYK(){const t=function(t,e,o){const n=f(t,e,o),i=n[0]/255,s=n[1]/255,r=n[2]/255,a=u(1-i,1-s,1-r);return[100*(1===a?0:(1-i-a)/(1-a)),100*(1===a?0:(1-s-a)/(1-a)),100*(1===a?0:(1-r-a)/(1-a)),100*a]}(s.h,s.s,s.v);return t.toString=i(t,(t=>`cmyk(${t[0]}%, ${t[1]}%, ${t[2]}%, ${t[3]}%)`)),t},toHEXA(){const t=function(t,e,o){return f(t,e,o).map((t=>m(t).toString(16).padStart(2,\"0\")))}(s.h,s.s,s.v),e=s.a>=1?\"\":Number((255*s.a).toFixed(0)).toString(16).toUpperCase().padStart(2,\"0\");return e&&t.push(e),t.toString=()=>`#${t.join(\"\").toUpperCase()}`,t},clone:()=>A(s.h,s.s,s.v,s.a)};return s}const C=t=>Math.max(Math.min(t,1),0);function $(t){const e={options:Object.assign({lock:null,onchange:()=>0,onstop:()=>0},t),_keyboard(t){const{options:o}=e,{type:n,key:i}=t;if(document.activeElement===o.wrapper){const{lock:o}=e.options,s=\"ArrowUp\"===i,r=\"ArrowRight\"===i,a=\"ArrowDown\"===i,l=\"ArrowLeft\"===i;if(\"keydown\"===n&&(s||r||a||l)){let n=0,i=0;\"v\"===o?n=s||r?1:-1:\"h\"===o?n=s||r?-1:1:(i=s?-1:a?1:0,n=l?-1:r?1:0),e.update(C(e.cache.x+.01*n),C(e.cache.y+.01*i)),t.preventDefault()}else i.startsWith(\"Arrow\")&&(e.options.onstop(),t.preventDefault())}},_tapstart(t){i(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),i(document,[\"mousemove\",\"touchmove\"],e._tapmove),t.cancelable&&t.preventDefault(),e._tapmove(t)},_tapmove(t){const{options:o,cache:n}=e,{lock:i,element:s,wrapper:r}=o,a=r.getBoundingClientRect();let l=0,c=0;if(t){const e=t&&t.touches&&t.touches[0];l=t?(e||t).clientX:0,c=t?(e||t).clientY:0,la.left+a.width&&(l=a.left+a.width),ca.top+a.height&&(c=a.top+a.height),l-=a.left,c-=a.top}else n&&(l=n.x*a.width,c=n.y*a.height);\"h\"!==i&&(s.style.left=`calc(${l/a.width*100}% - ${s.offsetWidth/2}px)`),\"v\"!==i&&(s.style.top=`calc(${c/a.height*100}% - ${s.offsetHeight/2}px)`),e.cache={x:l/a.width,y:c/a.height};const p=C(l/a.width),u=C(c/a.height);switch(i){case\"v\":return o.onchange(p);case\"h\":return o.onchange(u);default:return o.onchange(p,u)}},_tapstop(){e.options.onstop(),s(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),s(document,[\"mousemove\",\"touchmove\"],e._tapmove)},trigger(){e._tapmove()},update(t=0,o=0){const{left:n,top:i,width:s,height:r}=e.options.wrapper.getBoundingClientRect();\"h\"===e.options.lock&&(o=t),e._tapmove({clientX:n+s*t,clientY:i+r*o})},destroy(){const{options:t,_tapstart:o,_keyboard:n}=e;s(document,[\"keydown\",\"keyup\"],n),s([t.wrapper,t.element],\"mousedown\",o),s([t.wrapper,t.element],\"touchstart\",o,{passive:!1})}},{options:o,_tapstart:n,_keyboard:r}=e;return i([o.wrapper,o.element],\"mousedown\",n),i([o.wrapper,o.element],\"touchstart\",n,{passive:!1}),i(document,[\"keydown\",\"keyup\"],r),e}function k(t={}){t=Object.assign({onchange:()=>0,className:\"\",elements:[]},t);const e=i(t.elements,\"click\",(e=>{t.elements.forEach((o=>o.classList[e.target===o?\"add\":\"remove\"](t.className))),t.onchange(e),e.stopPropagation()}));return{destroy:()=>s(...e)}}const S={variantFlipOrder:{start:\"sme\",middle:\"mse\",end:\"ems\"},positionFlipOrder:{top:\"tbrl\",right:\"rltb\",bottom:\"btrl\",left:\"lrbt\"},position:\"bottom\",margin:8},O=(t,e,o)=>{const{container:n,margin:i,position:s,variantFlipOrder:r,positionFlipOrder:a}={container:document.documentElement.getBoundingClientRect(),...S,...o},{left:l,top:c}=e.style;e.style.left=\"0\",e.style.top=\"0\";const p=t.getBoundingClientRect(),u=e.getBoundingClientRect(),h={t:p.top-u.height-i,b:p.bottom+i,r:p.right+i,l:p.left-u.width-i},d={vs:p.left,vm:p.left+p.width/2+-u.width/2,ve:p.left+p.width-u.width,hs:p.top,hm:p.bottom-p.height/2-u.height/2,he:p.bottom-u.height},[m,f=\"middle\"]=s.split(\"-\"),v=a[m],b=r[f],{top:y,left:g,bottom:_,right:w}=n;for(const t of v){const o=\"t\"===t||\"b\"===t,n=h[t],[i,s]=o?[\"top\",\"left\"]:[\"left\",\"top\"],[r,a]=o?[u.height,u.width]:[u.width,u.height],[l,c]=o?[_,w]:[w,_],[p,m]=o?[y,g]:[g,y];if(!(nl))for(const r of b){const l=d[(o?\"v\":\"h\")+r];if(!(lc))return e.style[s]=l-u[s]+\"px\",e.style[i]=n-u[i]+\"px\",t+r}}return e.style.left=l,e.style.top=c,null};function E(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}class L{constructor(t){E(this,\"_initializingActive\",!0),E(this,\"_recalc\",!0),E(this,\"_nanopop\",null),E(this,\"_root\",null),E(this,\"_color\",A()),E(this,\"_lastColor\",A()),E(this,\"_swatchColors\",[]),E(this,\"_setupAnimationFrame\",null),E(this,\"_eventListener\",{init:[],save:[],hide:[],show:[],clear:[],change:[],changestop:[],cancel:[],swatchselect:[]}),this.options=t=Object.assign({...L.DEFAULT_OPTIONS},t);const{swatches:e,components:o,theme:n,sliders:i,lockOpacity:s,padding:r}=t;[\"nano\",\"monolith\"].includes(n)&&!i&&(t.sliders=\"h\"),o.interaction||(o.interaction={});const{preview:a,opacity:l,hue:c,palette:p}=o;o.opacity=!s&&l,o.palette=p||a||l||c,this._preBuild(),this._buildComponents(),this._bindEvents(),this._finalBuild(),e&&e.length&&e.forEach((t=>this.addSwatch(t)));const{button:u,app:h}=this._root;this._nanopop=((t,e,o)=>{const n=\"object\"!=typeof t||t instanceof HTMLElement?{reference:t,popper:e,...o}:t;return{update(t=n){const{reference:e,popper:o}=Object.assign(n,t);if(!o||!e)throw new Error(\"Popper- or reference-element missing.\");return O(e,o,n)}}})(u,h,{margin:r}),u.setAttribute(\"role\",\"button\"),u.setAttribute(\"aria-label\",this._t(\"btn:toggle\"));const d=this;this._setupAnimationFrame=requestAnimationFrame((function e(){if(!h.offsetWidth)return requestAnimationFrame(e);d.setColor(t.default),d._rePositioningPicker(),t.defaultRepresentation&&(d._representation=t.defaultRepresentation,d.setColorRepresentation(d._representation)),t.showAlways&&d.show(),d._initializingActive=!1,d._emit(\"init\")}))}_preBuild(){const{options:t}=this;for(const e of[\"el\",\"container\"])t[e]=c(t[e]);this._root=(t=>{const{components:e,useAsButton:o,inline:n,appClass:i,theme:s,lockOpacity:r}=t.options,l=t=>t?\"\":'style=\"display:none\" hidden',c=e=>t._t(e),p=a(`\\n
\\n\\n ${o?\"\":''}\\n\\n
\\n
\\n
\\n \\n
\\n
\\n\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n\\n
\\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n
\\n
\\n
\\n `),u=p.interaction;return u.options.find((t=>!t.hidden&&!t.classList.add(\"active\"))),u.type=()=>u.options.find((t=>t.classList.contains(\"active\"))),p})(this),t.useAsButton&&(this._root.button=t.el),t.container.appendChild(this._root.root)}_finalBuild(){const t=this.options,e=this._root;if(t.container.removeChild(e.root),t.inline){const o=t.el.parentElement;t.el.nextSibling?o.insertBefore(e.app,t.el.nextSibling):o.appendChild(e.app)}else t.container.appendChild(e.app);t.useAsButton?t.inline&&t.el.remove():t.el.parentNode.replaceChild(e.root,t.el),t.disabled&&this.disable(),t.comparison||(e.button.style.transition=\"none\",t.useAsButton||(e.preview.lastColor.style.transition=\"none\")),this.hide()}_buildComponents(){const t=this,e=this.options.components,o=(t.options.sliders||\"v\").repeat(2),[n,i]=o.match(/^[vh]+$/g)?o:[],s=()=>this._color||(this._color=this._lastColor.clone()),r={palette:$({element:t._root.palette.picker,wrapper:t._root.palette.palette,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o,n){if(!e.palette)return;const i=s(),{_root:r,options:a}=t,{lastColor:l,currentColor:c}=r.preview;t._recalc&&(i.s=100*o,i.v=100-100*n,i.v<0&&(i.v=0),t._updateOutput(\"slider\"));const p=i.toRGBA().toString(0);this.element.style.background=p,this.wrapper.style.background=`\\n linear-gradient(to top, rgba(0, 0, 0, ${i.a}), transparent),\\n linear-gradient(to left, hsla(${i.h}, 100%, 50%, ${i.a}), rgba(255, 255, 255, ${i.a}))\\n `,a.comparison?a.useAsButton||t._lastColor||l.style.setProperty(\"--pcr-color\",p):(r.button.style.setProperty(\"--pcr-color\",p),r.button.classList.remove(\"clear\"));const u=i.toHEXA().toString();for(const{el:e,color:o}of t._swatchColors)e.classList[u===o.toHEXA().toString()?\"add\":\"remove\"](\"pcr-active\");c.style.setProperty(\"--pcr-color\",p)}}),hue:$({lock:\"v\"===i?\"h\":\"v\",element:t._root.hue.picker,wrapper:t._root.hue.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.hue||!e.palette)return;const n=s();t._recalc&&(n.h=360*o),this.element.style.backgroundColor=`hsl(${n.h}, 100%, 50%)`,r.palette.trigger()}}),opacity:$({lock:\"v\"===n?\"h\":\"v\",element:t._root.opacity.picker,wrapper:t._root.opacity.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.opacity||!e.palette)return;const n=s();t._recalc&&(n.a=Math.round(100*o)/100),this.element.style.background=`rgba(0, 0, 0, ${n.a})`,r.palette.trigger()}}),selectable:k({elements:t._root.interaction.options,className:\"active\",onchange(e){t._representation=e.target.getAttribute(\"data-type\").toUpperCase(),t._recalc&&t._updateOutput(\"swatch\")}})};this._components=r}_bindEvents(){const{_root:t,options:e}=this,o=[i(t.interaction.clear,\"click\",(()=>this._clearColor())),i([t.interaction.cancel,t.preview.lastColor],\"click\",(()=>{this.setHSVA(...(this._lastColor||this._color).toHSVA(),!0),this._emit(\"cancel\")})),i(t.interaction.save,\"click\",(()=>{!this.applyColor()&&!e.showAlways&&this.hide()})),i(t.interaction.result,[\"keyup\",\"input\"],(t=>{this.setColor(t.target.value,!0)&&!this._initializingActive&&(this._emit(\"change\",this._color,\"input\",this),this._emit(\"changestop\",\"input\",this)),t.stopImmediatePropagation()})),i(t.interaction.result,[\"focus\",\"blur\"],(t=>{this._recalc=\"blur\"===t.type,this._recalc&&this._updateOutput(null)})),i([t.palette.palette,t.palette.picker,t.hue.slider,t.hue.picker,t.opacity.slider,t.opacity.picker],[\"mousedown\",\"touchstart\"],(()=>this._recalc=!0),{passive:!0})];if(!e.showAlways){const n=e.closeWithKey;o.push(i(t.button,\"click\",(()=>this.isOpen()?this.hide():this.show())),i(document,\"keyup\",(t=>this.isOpen()&&(t.key===n||t.code===n)&&this.hide())),i(document,[\"touchstart\",\"mousedown\"],(e=>{this.isOpen()&&!l(e).some((e=>e===t.app||e===t.button))&&this.hide()}),{capture:!0}))}if(e.adjustableNumbers){const e={rgba:[255,255,255,1],hsva:[360,100,100,1],hsla:[360,100,100,1],cmyk:[100,100,100,100]};p(t.interaction.result,((t,o,n)=>{const i=e[this.getColorRepresentation().toLowerCase()];if(i){const e=i[n],s=t+(e>=100?1e3*o:o);return s<=0?0:Number((s{n.isOpen()&&(e.closeOnScroll&&n.hide(),null===t?(t=setTimeout((()=>t=null),100),requestAnimationFrame((function e(){n._rePositioningPicker(),null!==t&&requestAnimationFrame(e)}))):(clearTimeout(t),t=setTimeout((()=>t=null),100)))}),{capture:!0}))}this._eventBindings=o}_rePositioningPicker(){const{options:t}=this;if(!t.inline){if(!this._nanopop.update({container:document.body.getBoundingClientRect(),position:t.position})){const t=this._root.app,e=t.getBoundingClientRect();t.style.top=(window.innerHeight-e.height)/2+\"px\",t.style.left=(window.innerWidth-e.width)/2+\"px\"}}}_updateOutput(t){const{_root:e,_color:o,options:n}=this;if(e.interaction.type()){const t=`to${e.interaction.type().getAttribute(\"data-type\")}`;e.interaction.result.value=\"function\"==typeof o[t]?o[t]().toString(n.outputPrecision):\"\"}!this._initializingActive&&this._recalc&&this._emit(\"change\",o,t,this)}_clearColor(t=!1){const{_root:e,options:o}=this;o.useAsButton||e.button.style.setProperty(\"--pcr-color\",\"rgba(0, 0, 0, 0.15)\"),e.button.classList.add(\"clear\"),o.showAlways||this.hide(),this._lastColor=null,this._initializingActive||t||(this._emit(\"save\",null),this._emit(\"clear\"))}_parseLocalColor(t){const{values:e,type:o,a:n}=w(t),{lockOpacity:i}=this.options,s=void 0!==n&&1!==n;return e&&3===e.length&&(e[3]=void 0),{values:!e||i&&s?null:e,type:o}}_t(t){return this.options.i18n[t]||L.I18N_DEFAULTS[t]}_emit(t,...e){this._eventListener[t].forEach((t=>t(...e,this)))}on(t,e){return this._eventListener[t].push(e),this}off(t,e){const o=this._eventListener[t]||[],n=o.indexOf(e);return~n&&o.splice(n,1),this}addSwatch(t){const{values:e}=this._parseLocalColor(t);if(e){const{_swatchColors:t,_root:o}=this,n=A(...e),s=r(`'\n },\n {\n type: \"list\",\n code: '
  • list item
'\n },\n {\n type: \"progress\",\n code: ''\n },\n {\n type: \"form\",\n code: `
\n \n \n \n
\n \n
\n `\n },\n {\n type: \"datalist\",\n code: `\n \n \n \n `\n },\n {\n type: \"textarea\",\n code: ``\n },\n {\n type: \"select\",\n code: ``\n },\n {\n type: \"audio\",\n code: `
\n \n
\n Audio courtesy of \n w3schools.com\n
\n
`\n },\n {\n type: \"video\",\n code: `
\n \n
\n Video courtesy of \n Big Buck Bunny\n .\n
\n
`\n },\n {\n type: \"YouTube Video\",\n code: ``\n },\n {\n type: \"image\",\n code: `
\n \n \"${app.name}\"\n \n
\n Image courtesy of \n Pixabay.com\n .\n
\n
\n`\n },\n {\n type: \"vector\",\n code: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n\n`\n },\n {\n type: \"iframe\",\n code: ``\n },\n {\n type: \"dialog\",\n code: `\n
\n
\n \n

Confirm your action!

\n
\n

\n Cras sit amet maximus risus. Pellentesque sodales odio sit amet augue finibus\n pellentesque. Nullam finibus risus non semper euismod.\n

\n
\n \n \n
\n
\n
`\n },\n {\n type: \"details\",\n code: `
\n Accordion\n

\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque urna diam,\n tincidunt nec porta sed, auctor id velit. Etiam venenatis nisl ut orci consequat, vitae\n tempus quam commodo. Nulla non mauris ipsum. Aliquam eu posuere orci. Nulla convallis\n lectus rutrum quam hendrerit, in facilisis elit sollicitudin. Mauris pulvinar pulvinar\n mi, dictum tristique elit auctor quis. Maecenas ac ipsum ultrices, porta turpis sit\n amet, congue turpis.\n

\n
`\n },\n {\n type: \"canvas\",\n code: `Your browser does not support the canvas element.`\n },\n {\n type: \"meter\",\n code: '60%'\n },\n {\n type: \"style\",\n code: ''\n },\n {\n type: \"script\",\n code: ''\n },\n {\n type: \"hr\",\n code: '
'\n } \n ]\n }\n};\nconst icons = (function() {\n const SidebarIconCSS = \"h-4 w-4\";\n const navIconCSS = \"h-3 w-3\";\n const modalIconCSS = \"h-4 w-4\";\n const previewIconCSS = \"h-3\";\n\n return {\n logo: `\n \n `,\n twitter: `\n \n `,\n heart: `\n \n `,\n plus: `\n \n `,\n layers: `\n \n `,\n swatch: `\n \n `,\n sun: `\n \n `,\n moon: `\n \n `,\n play: `\n \n `,\n camera: `\n \n \n `,\n cog: `\n \n \n `,\n rotate: `\n \n `,\n times: `\n \n `,\n search: `\n \n `,\n file: `\n \n `,\n import: `\n \n `,\n upload: `\n \n `,\n download: `\n \n `,\n codepen: `\n \n `,\n arrowDown: `\n \n `,\n eye: `\n \n `,\n eyeSlash: `\n \n \n `,\n commandKey: `\n \n`,\n plusFill: `\n \n `,\n shift: ``,\n move: ``,\n undo: ``,\n redo: ``,\n trash: ``,\n clone: ``,\n cut: ``,\n copy: ``,\n group: ``,\n paste: ``,\n bold: ``,\n italic: ``,\n underline: ``,\n strike: ``,\n subscript: ``,\n superscript: ``,\n heading: ``,\n paragraph: ``,\n quote: ``,\n link: ``,\n listBullet: ``,\n listNumbers: ``,\n icons: ``\n };\n})();\n\n// Reactive objects\nwindow.project = createProxy(p, (property, oldValue, newValue) => {\n if (oldValue !== newValue) {\n localStorage.setItem('Polyrise', JSON.stringify(project));\n \n // Split the property path into components\n const propertyParts = property.split('.');\n\n if (!App.initialRender) {\n // List of properties that should not trigger App.render\n const noRenderProps = ['lang', 'title', 'description', 'author', 'url', 'meta'];\n\n // Skip renderPreview if property is state.selected\n if (propertyParts.includes('state') && ['selected', 'collapsed'].some(part => propertyParts.includes(part))) {\n App.render('#app');\n return; // Exit the function early\n }\n\n // Check if the change is within project.html and is a text property\n if (propertyParts[0] === 'html' && propertyParts.includes('text')) {\n // Only text property changed, so only render preview\n renderPreview();\n } else if (noRenderProps.includes(propertyParts[0])) {\n // If the changed property is in noRenderProps, only render the preview\n renderPreview();\n } else {\n if (propertyParts[0] === 'activePanel') {\n // Handle full render or specific actions\n App.render('#app');\n getIframeClientSize();\n } else {\n // Handle full render or specific actions\n App.render('#app');\n // Diff nodes for other changes\n const diff = ['lang', 'libraries', 'html', 'css', 'title', 'description', 'author', 'url', 'meta', 'previewDark'];\n if (diff.includes(propertyParts[0])) {\n renderPreview();\n }\n \n if (propertyParts[0] === \"dark\") {\n document.documentElement.setAttribute('data-theme', project.dark ? 'dark' : 'light');\n document.querySelector('meta[name=apple-mobile-web-app-status-bar-style]').setAttribute('content', project.dark ? 'black-translucent' : 'default');\n document.querySelector('meta[name=theme-color]').setAttribute('content', project.dark ? '#13171f' : '#ffffff');\n document.querySelector('meta[name=msapplication-navbutton-color]').setAttribute('content', project.dark ? '#13171f' : '#ffffff');\n }\n }\n }\n }\n }\n});\n\nwindow.data = createProxy(d, (property, oldValue, newValue) => {\n // Only render if the actual value has changed\n if (oldValue !== newValue) {\n const string = property.toString();\n if (string === \"stylesTarget\") {\n if (data.stylesTarget) {\n if (data.shiftKey) {\n data.selectedLayerIds = [];\n selectLayersByStyleRef(data.stylesTarget, project.html);\n }\n }\n }\n if (string === 'selectedSize') {\n data.iframeWidth = data.selectedSize !== 'none' ? data.selectedSize.split('x')[0] : getIframeClientSize();\n data.iframeHeight = data.selectedSize !== 'none' ? data.selectedSize.split('x')[1] : getIframeClientSize();\n }\n App.render('#app');\n }\n});\n\n// Components\nfunction LeftMenubar() {\n const buttonSize = \"w-full\";\n\n return `
    \n
  • \n \n ${icons.logo}\n \n
  • \n
  • \n \n ${icons.twitter}\n \n
  • \n
  • \n \n ${icons.heart}\n \n
  • \n
  • \n \n
  • \n
\n
    \n
  • \n \n ${icons.layers}\n \n
  • \n
  • \n \n ${icons.swatch}\n \n
  • \n
\n
    \n
  • \n \n ${project.previewDark ? icons.sun : icons.moon}\n \n
  • \n
  • \n \n ${icons.play}\n \n
  • \n
  • \n \n ${icons.camera}\n \n
  • \n
  • \n \n ${icons.cog}\n \n
  • \n
`;\n}\nfunction Menu() {\n let menuDialog = `
    \n
  • \n
    \n
    \n \n \"logo\"\n\n \n
    \n About ${app.name}\n
    \n
    \n Version ${app.version}\n
    \n \n Open Source License\n \n
    \n
    \n
  • \n
  • \n
    \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
`;\n menuDialog = `\n
\n
\n

\n file menu\n

\n \n
\n
\n ${menuDialog}\n
\n
\n \n
\n
\n
`;\n return menuDialog;\n}\nfunction Settings() {\n let frameworks = data.frameworks;\n\n // Get the keys, sort them alphabetically, and reduce them back into an object\n let sortedFrameworks = Object.keys(frameworks)\n .sort()\n .reduce((acc, key) => {\n acc[key] = frameworks[key];\n return acc;\n }, {});\n\n let settingsHTML = `
    \n
  • \n
    \n \n \n
    \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n \n empty history\n \n \n
  • \n
  • \n
    \n
  • \n
  • \n \n\n \n\n
    \n ${project.libraries.map((library, index) => `\n \n `).join('')}\n
    \n \n
  • \n
  • \n
    \n
  • \n
  • \n
    \n Project name:\n
    \n \n
  • \n
  • \n
    \n
  • \n
  • \n
    \n Project version:\n
    \n
    \n \n \n \n
    \n
  • \n
  • \n
    \n
  • \n
  • \n
    \n Project title:\n
    \n \n
  • \n
  • \n
    \n
  • \n
  • \n
    \n Project description:\n
    \n \n
  • \n
  • \n
    \n
  • \n
  • \n
    \n Project author:\n
    \n \n
  • \n
  • \n
    \n
  • \n
  • \n
    \n Project url:\n
    \n \n
  • \n
  • \n
    \n
  • \n
  • \n
    \n HTML before closing head tag:\n
    \n \n
  • \n
`;\n settingsHTML = `\n
\n
\n

\n settings\n

\n \n
\n
\n ${settingsHTML}\n
\n
\n \n
\n
\n
`;\n return settingsHTML;\n}\nwindow.librariesDialog = () => {\n let libraries = `
\n \n \n
\n
`;\n\n Modal.render({\n title: \"Search for resources (JQuery, Bootstrap, Foundation...)\",\n content: libraries,\n onLoad() {\n document.getElementById('searchInput').focus();\n }\n });\n}\nwindow.attributesModal = () => {\n const globalAttributes = [\n \"accesskey\", \"autocapitalize\", \"autofocus\", \"class\", \"contenteditable\", \n \"dir\", \"exportparts\", \"hidden\", \"id\", \"inert\", \"inputmode\", \"is\", \n \"itemid\", \"itemprop\", \"itemref\", \"itemscope\", \"itemtype\", \"lang\", \n \"nonce\", \"part\", \"popover\", \"role\", \"slot\", \"spellcheck\", \"tabindex\", \n \"translate\"\n ];\n const eventAttributes = [\n \"onabort\", \"onautocomplete\", \"onautocompleteerror\", \"onblur\", \"oncancel\", \n \"oncanplay\", \"oncanplaythrough\", \"onchange\", \"onclick\", \"onclose\", \n \"oncontextmenu\", \"oncuechange\", \"ondblclick\", \"ondrag\", \"ondragend\", \n \"ondragenter\", \"ondragleave\", \"ondragover\", \"ondragstart\", \"ondrop\", \n \"ondurationchange\", \"onemptied\", \"onended\", \"onerror\", \"onfocus\", \n \"oninput\", \"oninvalid\", \"onkeydown\", \"onkeypress\", \"onkeyup\", \"onload\", \n \"onloadeddata\", \"onloadedmetadata\", \"onloadstart\", \"onmousedown\", \n \"onmouseenter\", \"onmouseleave\", \"onmousemove\", \"onmouseout\", \n \"onmouseover\", \"onmouseup\", \"onmousewheel\", \"onpause\", \"onplay\", \n \"onplaying\", \"onprogress\", \"onratechange\", \"onreset\", \"onresize\", \n \"onscroll\", \"onseeked\", \"onseeking\", \"onselect\", \"onshow\", \"onsort\", \n \"onstalled\", \"onsubmit\", \"onsuspend\", \"ontimeupdate\", \"ontoggle\", \n \"onvolumechange\", \"onwaiting\"\n ];\n\n // Initialize `common` first\n const commonEventGroup = [\n \"onclick\", \"ondblclick\", \"onmousedown\", \"onmouseup\", \"onmouseover\", \"onmouseout\", \"onmouseenter\", \"onmouseleave\", \"oncontextmenu\"\n ];\n const dragDropEventGroup = [\n \"ondragstart\", \"ondragend\", \"ondrop\", \"ondragenter\", \"ondragleave\",\n \"ondragover\", ...commonEventGroup\n ];\n\n const eventGroups = {\n common: commonEventGroup,\n formControls: [\n \"onchange\", \"oninput\", \"onfocus\", \"onblur\"\n ],\n buttonControls: [\n \"onchange\", \"oninput\", \"onfocus\", \"onblur\", ...commonEventGroup\n ],\n dragDrop: [\n ...dragDropEventGroup\n ],\n detailControls: [\n \"ontoggle\"\n ],\n dialogControls: [\n \"onclose\", \"oncancel\", ...dragDropEventGroup\n ],\n media: [\n \"onabort\", \"oncanplay\", \"oncanplaythrough\", \"ondurationchange\", \"onemptied\",\n \"onended\", \"onerror\", \"onloadeddata\", \"onloadedmetadata\", \"onloadstart\",\n \"onpause\", \"onplay\", \"onplaying\", \"onprogress\", \"onratechange\", \"onseeked\",\n \"onseeking\", \"onstalled\", \"onsuspend\", \"ontimeupdate\", \"onvolumechange\",\n \"onwaiting\"\n ],\n body: [\n \"onafterprint\", \"onbeforeprint\", \"onbeforeunload\", \"onhashchange\",\n \"onlanguagechange\", \"onmessage\", \"onmessageerror\", \"onoffline\", \"ononline\",\n \"onpopstate\", \"onrejectionhandled\", \"onstorage\", \"onunhandledrejection\",\n \"onunload\"\n ],\n loadError: [\n \"onload\", \"onerror\"\n ]\n };\n\n const tagEventGroups = [\n { tags: ['form', 'input', 'select', 'textarea'], events: ['formControls'] },\n { tags: ['canvas', 'map', 'meter', 'svg', 'path', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'text', 'use', 'symbol', 'linearGradient', 'radialGradient', 'stop', 'clipPath', 'mask', 'filter', 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence'], events: ['common'] },\n { tags: ['a', 'button'], events: ['buttonControls'] },\n { tags: ['details'], events: ['detailControls'] },\n { tags: ['dialog'], events: ['dialogControls'] },\n { tags: ['audio', 'video'], events: ['media'] },\n { tags: ['html'], events: ['common', 'body'] },\n { tags: ['script', 'img'], events: ['loadError'] },\n { tags: ['div', 'section', 'article', 'aside', 'header', 'footer', 'nav', 'main', 'figure', 'figcaption'], events: ['dragDrop'] },\n { tags: ['table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'col', 'colgroup', 'caption'], events: ['common'] },\n { tags: ['fieldset', 'label', 'legend'], events: ['common'] },\n { tags: ['iframe', 'embed', 'object', 'param'], events: ['common'] },\n { tags: ['output', 'del', 'ins', 'marquee', 'meter', 'time', 'data'], events: ['common'] }\n ];\n\n function combineEventGroups(groups) {\n return Array.from(new Set(groups.flatMap(group => eventGroups[group])));\n }\n\n function generateEventMappings() {\n const elementEventMappings = {};\n\n tagEventGroups.forEach(group => {\n const combinedEvents = combineEventGroups(group.events);\n group.tags.forEach(tag => {\n elementEventMappings[tag] = combinedEvents;\n });\n });\n\n return elementEventMappings;\n }\n\n const elementEventMappings = generateEventMappings();\n \n const specificAttributes = {\n input: [\"accept\", \"alt\", \"autocomplete\", \"checked\", \"dirname\", \"disabled\", \"form\", \"formaction\", \"formenctype\", \"formmethod\", \"formnovalidate\", \"formtarget\", \"height\", \"list\", \"max\", \"maxlength\", \"min\", \"minlength\", \"multiple\", \"name\", \"pattern\", \"placeholder\", \"readonly\", \"required\", \"size\", \"src\", \"step\", \"type\", \"value\", \"width\"],\n select: [\"autofocus\", \"disabled\", \"form\", \"multiple\", \"name\", \"required\", \"size\"],\n option: [\"disabled\", \"label\", \"selected\", \"value\"],\n optgroup: [\"disabled\", \"label\"],\n textarea: [\"autocapitalize\", \"autocomplete\", \"cols\", \"dirname\", \"disabled\", \"form\", \"maxlength\", \"minlength\", \"name\", \"placeholder\", \"readonly\", \"required\", \"rows\", \"wrap\"],\n img: [\"alt\", \"crossorigin\", \"decoding\", \"height\", \"importance\", \"intrinsicsize\", \"ismap\", \"loading\", \"referrerpolicy\", \"sizes\", \"src\", \"srcset\", \"usemap\", \"width\"],\n a: [\"download\", \"href\", \"hreflang\", \"ping\", \"referrerpolicy\", \"rel\", \"target\", \"type\"],\n button: [\"autofocus\", \"disabled\", \"form\", \"formaction\", \"formenctype\", \"formmethod\", \"formnovalidate\", \"formtarget\", \"name\", \"type\", \"value\"],\n fieldset: [\"disabled\", \"form\", \"name\"],\n label: [\"for\"],\n iframe: [\"allow\", \"allowfullscreen\", \"allowpaymentrequest\", \"height\", \"loading\", \"name\", \"referrerpolicy\", \"sandbox\", \"src\", \"srcdoc\", \"width\"],\n audio: [\"autoplay\", \"controls\", \"crossorigin\", \"loop\", \"muted\", \"preload\", \"src\"],\n video: [\"autoplay\", \"controls\", \"crossorigin\", \"height\", \"loop\", \"muted\", \"playsinline\", \"poster\", \"preload\", \"src\", \"width\"],\n source: [\"media\", \"sizes\", \"src\", \"srcset\", \"type\"],\n track: [\"default\", \"kind\", \"label\", \"src\", \"srclang\"],\n form: [\"accept-charset\", \"action\", \"autocomplete\", \"enctype\", \"method\", \"name\", \"novalidate\", \"target\"],\n meta: [\"charset\", \"content\", \"http-equiv\", \"name\"],\n link: [\"as\", \"crossorigin\", \"href\", \"hreflang\", \"media\", \"referrerpolicy\", \"rel\", \"sizes\", \"type\"],\n script: [\"async\", \"crossorigin\", \"defer\", \"integrity\", \"nomodule\", \"referrerpolicy\", \"src\", \"type\"],\n style: [\"media\", \"scoped\", \"type\"],\n ol: [\"reversed\", \"start\", \"type\"],\n li: [\"value\"],\n table: [\"border\"],\n th: [\"colspan\", \"headers\", \"rowspan\", \"scope\"],\n tr: [\"align\", \"bgcolor\", \"valign\"],\n td: [\"abbr\", \"align\", \"axis\", \"bgcolor\", \"colspan\", \"headers\", \"height\", \"rowspan\", \"scope\", \"valign\", \"width\"],\n progress: [\"max\", \"value\"],\n meter: [\"high\", \"low\", \"max\", \"min\", \"optimum\", \"value\"],\n object: [\"data\", \"form\", \"height\", \"name\", \"type\", \"usemap\", \"width\"],\n embed: [\"height\", \"src\", \"type\", \"width\"],\n param: [\"name\", \"value\"],\n area: [\"alt\", \"coords\", \"download\", \"href\", \"hreflang\", \"ping\", \"referrerpolicy\", \"rel\", \"shape\", \"target\"],\n col: [\"span\", \"width\"],\n colgroup: [\"span\"],\n map: [\"name\"],\n track: [\"default\", \"kind\", \"label\", \"src\", \"srclang\"],\n canvas: [\"height\", \"width\"],\n data: [\"value\"],\n time: [\"datetime\"],\n output: [\"for\", \"form\", \"name\"],\n del: [\"cite\", \"datetime\"],\n ins: [\"cite\", \"datetime\"],\n details: [\"open\"],\n dialog: [\"open\"],\n marquee: [\"behavior\", \"bgcolor\", \"direction\", \"height\", \"hspace\", \"loop\", \"scrollamount\", \"scrolldelay\", \"truespeed\", \"vspace\", \"width\"],\n meter: [\"high\", \"low\", \"max\", \"min\", \"optimum\", \"value\"],\n\n svg: [\"width\", \"height\", \"viewBox\", \"preserveAspectRatio\", \"xmlns\"],\n path: [\"d\", \"pathLength\"],\n rect: [\"x\", \"y\", \"width\", \"height\", \"rx\", \"ry\"],\n circle: [\"cx\", \"cy\", \"r\"],\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\n line: [\"x1\", \"y1\", \"x2\", \"y2\"],\n polyline: [\"points\"],\n polygon: [\"points\"],\n text: [\"x\", \"y\", \"dx\", \"dy\", \"rotate\", \"textLength\", \"lengthAdjust\"],\n use: [\"href\", \"x\", \"y\", \"width\", \"height\"],\n symbol: [\"viewBox\", \"preserveAspectRatio\"],\n linearGradient: [\"x1\", \"y1\", \"x2\", \"y2\", \"gradientUnits\", \"gradientTransform\", \"spreadMethod\"],\n radialGradient: [\"cx\", \"cy\", \"r\", \"fx\", \"fy\", \"fr\", \"gradientUnits\", \"gradientTransform\", \"spreadMethod\"],\n stop: [\"offset\", \"stop-color\", \"stop-opacity\"],\n clipPath: [\"clipPathUnits\"],\n mask: [\"maskUnits\", \"maskContentUnits\", \"x\", \"y\", \"width\", \"height\"],\n filter: [\"x\", \"y\", \"width\", \"height\", \"filterUnits\", \"primitiveUnits\"],\n feBlend: [\"in\", \"in2\", \"mode\"],\n feColorMatrix: [\"in\", \"type\", \"values\"],\n feComponentTransfer: [\"in\"],\n feComposite: [\"in\", \"in2\", \"operator\", \"k1\", \"k2\", \"k3\", \"k4\"],\n feConvolveMatrix: [\"in\", \"order\", \"kernelMatrix\", \"divisor\", \"bias\", \"targetX\", \"targetY\", \"edgeMode\", \"preserveAlpha\"],\n feDiffuseLighting: [\"in\", \"surfaceScale\", \"diffuseConstant\", \"kernelUnitLength\"],\n feDisplacementMap: [\"in\", \"in2\", \"scale\", \"xChannelSelector\", \"yChannelSelector\"],\n feDistantLight: [\"azimuth\", \"elevation\"],\n feFlood: [\"flood-color\", \"flood-opacity\"],\n feFuncA: [\"type\", \"tableValues\", \"slope\", \"intercept\", \"amplitude\", \"exponent\", \"offset\"],\n feFuncB: [\"type\", \"tableValues\", \"slope\", \"intercept\", \"amplitude\", \"exponent\", \"offset\"],\n feFuncG: [\"type\", \"tableValues\", \"slope\", \"intercept\", \"amplitude\", \"exponent\", \"offset\"],\n feFuncR: [\"type\", \"tableValues\", \"slope\", \"intercept\", \"amplitude\", \"exponent\", \"offset\"],\n feGaussianBlur: [\"in\", \"stdDeviation\", \"edgeMode\"],\n feImage: [\"href\", \"preserveAspectRatio\", \"x\", \"y\", \"width\", \"height\", \"result\"],\n feMergeNode: [\"in\"], // Used within feMerge, no additional attributes\n feMorphology: [\"in\", \"operator\", \"radius\"],\n feOffset: [\"in\", \"dx\", \"dy\"],\n fePointLight: [\"x\", \"y\", \"z\"],\n feSpecularLighting: [\"in\", \"surfaceScale\", \"specularConstant\", \"specularExponent\", \"kernelUnitLength\"],\n feSpotLight: [\"x\", \"y\", \"z\", \"pointsAtX\", \"pointsAtY\", \"pointsAtZ\", \"specularExponent\", \"limitingConeAngle\"],\n feTile: [\"in\"],\n feTurbulence: [\"baseFrequency\", \"numOctaves\", \"seed\", \"stitchTiles\", \"type\"],\n };\n\n // Helper to find common tags\n function areCommonLayerTags(layers) {\n if (layers.length === 0) return [];\n \n // Extract the tag from each layer\n const firstTag = layers[0].tag;\n const allSame = layers.every(layer => layer.tag === firstTag);\n \n // If all tags are the same, return the full layers array; otherwise, return an empty array\n return allSame ? true : false;\n }\n \n // Retrieve and aggregate attributes for selected layers\n const selectedLayers = data.selectedLayerIds.map(id => findLayerById(id, project.html).layer).filter(layer => layer);\n const detectCommonLayerTags = areCommonLayerTags(selectedLayers);\n\n function renderAttributeButtons(attributes) {\n return attributes\n .filter(attr => !data.searchTerm || attr.includes(data.searchTerm))\n .map(attr => `\n `\n ).join('');\n };\n\n let attributesModal = \"\";\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n\n let specificAttributesForTag = specificAttributes[layer.tag] ? specificAttributes[layer.tag] : null;\n // if (data.selectedLayerIds.length > 0) specificAttributesForTag = [];\n\n let attrBtns = null;\n if (data.boxElements.includes(layer.tag) || data.textElements.includes(layer.tag)) {\n const detectTag = ['a', 'button', 'form', 'input', 'select', 'textarea'];\n if ((detectTag.includes(layer.tag))) {\n attrBtns = renderAttributeButtons(elementEventMappings[layer.tag]);\n } else {\n attrBtns = renderAttributeButtons(elementEventMappings['div']);\n }\n } else if (data.breakElements.includes(layer.tag)) {\n attrBtns = null\n } else {\n attrBtns = renderAttributeButtons(elementEventMappings[layer.tag] || eventAttributes);\n }\n\n attributesModal = `\n
\n ${specificAttributesForTag && detectCommonLayerTags ? `\n
\n \n Specific Attributes for <${layer.tag}>\n \n \n ${renderAttributeButtons(specificAttributesForTag)}\n \n
\n\n
` : ''}\n\n
\n \n Global Attributes\n \n \n ${renderAttributeButtons(globalAttributes)}\n \n
\n\n
\n\n
\n \n Event Attributes for <${layer.tag}>\n \n \n ${attrBtns}\n \n
\n\n
\n\n button').onclick();\n }\n \"\n />\n
`;\n });\n\n Modal.render({\n title: \"Add An Attribute\",\n content: attributesModal,\n onLoad() {\n document.getElementById('hyfb8mxg0').focus();\n },\n onClose() {\n \n },\n onConfirm() {\n addAttribute(document.getElementById('hyfb8mxg0').value.trim());\n }\n });\n}\nfunction LayerTree() {\n // Function to render each layer recursively\n function renderLayer(layer) {\n const { id, name, children, state } = layer;\n const hasChildren = children && children.length > 0;\n const isVisible = state.visible;\n if (data.shiftKey && data.cmdKey && layer.style === data.stylesTarget) {\n layer.state.selected = true;\n }\n\n // HTML structure for each layer\n const listItem = `\n
  • \n \n \n \n \n \n \n \n ${hasChildren ? `
      ` + children.map(child => renderLayer(child)).join('') + '
    ' : ''}\n
  • \n `;\n\n return listItem;\n }\n\n return project.html.map(layer => renderLayer(layer)).join('');\n}\nfunction Inspector() {\n let iframe = document.getElementById('iframe');\n if (!iframe) return;\n if (data.editorNavState) return;\n\n // Helper to find common layer tags & attributes\n function findCommonLayerTags(layers) {\n if (layers.length === 0) return [];\n const firstTag = layers[0].tag;\n return layers.every(layer => layer.tag === firstTag) ? layers : [];\n }\n function findCommonAttributes(layers) {\n if (layers.length === 0) return {};\n const attributeCounts = {};\n\n layers.forEach(layer => {\n Object.keys(layer.props || {}).forEach(prop => {\n attributeCounts[prop] = (attributeCounts[prop] || 0) + 1;\n });\n });\n\n return Object.fromEntries(\n Object.entries(attributeCounts)\n .filter(([key, count]) => count === layers.length)\n .map(([key]) => [key, layers[0].props[key]])\n );\n }\n\n // Constants and helper functions\n let buttonItemClass = 'bg-transparent border-0 text-[.6rem] p-0 m-0 h-full capitalize text-left';\n const buttonAddItemClass = 'bg-transparent border-0 p-0 text-right';\n const RenameOrDeleteButtonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full capitalize text-center p-2 border';\n const selectClass = 'm-0 w-auto rounded-md capitalize text-[.6rem]';\n const selectStyle = 'padding: .5rem; background-image: none;';\n const inputClass = 'w-auto rounded-md normal-case text-[.6rem]';\n const inputStyle = 'height: auto; margin: 0; padding: .4rem;';\n const textareaClass = 'w-auto rounded-md normal-case text-[.6rem] resize-vertical';\n const textareaStyle = 'height: 5rem; margin: 0; padding: .4rem;';\n const mediaClass = 'cursor-pointer w-full my-2';\n\n const languages = {\n 'en': 'English', // English\n 'es': 'Espa\u00F1ol', // Spanish\n 'zh': '\u4E2D\u6587', // Chinese\n 'hi': '\u0939\u093F\u0928\u094D\u0926\u0940', // Hindi\n 'ar': '\u0627\u0644\u0639\u0631\u0628\u064A\u0629', // Arabic\n 'fr': 'Fran\u00E7ais', // French\n 'ru': '\u0420\u0443\u0441\u0441\u043A\u0438\u0439', // Russian\n 'pt': 'Portugu\u00EAs', // Portuguese\n 'de': 'Deutsch', // German\n 'ja': '\u65E5\u672C\u8A9E', // Japanese\n 'ko': '\uD55C\uAD6D\uC5B4', // Korean\n 'it': 'Italiano', // Italian\n 'tr': 'T\u00FCrk\u00E7e', // Turkish\n 'vi': 'Ti\u1EBFng Vi\u1EC7t', // Vietnamese\n 'pl': 'Polski' // Polish\n };\n const sizeOptions = {\n Phones: {\n '320x480': 'iPhone 3GS',\n '375x667': 'iPhone 6/7/8',\n '414x736': 'iPhone 6/7/8 Plus',\n '375x812': 'iPhone X/XS/11 Pro',\n '414x896': 'iPhone XR/XS Max/11/11 Pro Max',\n '360x640': 'Samsung Galaxy S5',\n '360x740': 'Samsung Galaxy S8+',\n '1440x3200': 'Samsung Galaxy S21 Ultra',\n '1080x2340': 'Google Pixel 5',\n '1080x2400': 'OnePlus 8 Pro',\n '1440x3200': 'Xiaomi Mi 11 Ultra',\n '1644x3840': 'Sony Xperia 1 III'\n },\n Tablets: {\n '2048x2732': 'iPad Pro 12.9\" (3rd/4th Gen)',\n '2388x1668': 'iPad Pro 11\" (1st/2nd/3rd Gen)',\n '2736x1824': 'Microsoft Surface Pro 7',\n '2800x1752': 'Samsung Galaxy Tab S7+',\n '2560x1600': 'Huawei MatePad Pro',\n '2000x1200': 'Lenovo Tab P11 Pro',\n '1920x1200': 'Amazon Fire HD 10',\n '1536x2048': 'iPad Air (3rd Gen)',\n '1620x2160': 'iPad Air (4th Gen)',\n '1620x2160': 'iPad 10.2\" (8th Gen)',\n '1668x2224': 'iPad Pro 11\" (2021)'\n },\n Desktops: {\n '3840x2160': '4K UHD (3840x2160)',\n '2560x1440': 'WQHD (2560x1440)',\n '1920x1080': 'Full HD (1920x1080)',\n '1366x768': 'Laptop (1366x768)',\n '3440x1440': 'UltraWide QHD (3440x1440)',\n '5120x2880': '5K Retina (5120x2880)',\n '1280x800': 'MacBook (1280x800)',\n '2560x1600': 'MacBook Pro (2560x1600)',\n '2880x1800': 'MacBook Pro Retina (2880x1800)'\n }\n };\n const booleanAttributes = [\n \"autofocus\", \"autoplay\", \"checked\", \"controls\", \"default\", \"defer\", \"disabled\", \n \"formnovalidate\", \"hidden\", \"loop\", \"multiple\", \"muted\", \"novalidate\", \"open\", \n \"contenteditable\", \"readonly\", \"required\", \"reversed\", \"scoped\", \"seamless\", \"selected\"\n ];\n const inputTypes = [\n \"button\", \"checkbox\", \"color\", \"date\", \"datetime-local\", \"email\", \"file\", \"hidden\",\n \"image\", \"month\", \"number\", \"password\", \"radio\", \"range\", \"reset\", \"search\", \"submit\",\n \"tel\", \"text\", \"time\", \"url\", \"week\"\n ];\n const numberAttributes = [\"max\", \"maxlength\", \"min\", \"minlength\", \"multiple\", \"range\", \"size\", \"step\"];\n const stringAttributes = [\"accept\", \"acceptCharset\", \"accesskey\", \"action\", \"align\", \"alt\", \"autocomplete\", \"form\", \"list\", \"pattern\", \"placeholder\", \"src\", \"tabindex\", \"title\", \"type\", \"usemap\", \"value\"];\n const selectedLayers = data.selectedLayerIds.map(id => findLayerById(id, project.html).layer).filter(layer => layer);\n const commonLayerTag = findCommonLayerTags(selectedLayers);\n const commonAttributes = findCommonAttributes(selectedLayers);\n const cssFixedValueProperties = data.cssFixedValueProperties;\n const cssRangedValueProperties = data.cssRangedValueProperties;\n const boxElements = data.boxElements;\n const textElements = data.textElements;\n const breakElements = data.breakElements;\n\n // Simplify rendering functions\n function renderBooleanAttribute(name, value) {\n return `\n \n \n `;\n }\n function renderInput(name, type, value, min, max, step) {\n return `\n \n \n `;\n }\n function renderTextarea(name, value) {\n return `\n \n \n `;\n }\n \n // Functions to generate HTML sections\n const generatePreviewSize = () => {\n if (data.selectedSize === \"none\") getIframeClientSize();\n \n let html = `\n
    \n \n
    \n\n
    \n width\n \n height\n \n rotate\n \n
    \n\n
    \n language\n \n
    \n `\n return html;\n };\n\n const processStyles = (stylesObject, selectorPrefix, key, detect = null) => {\n let styles = '';\n\n // Regular expression to detect color values\n const colorRegex = /^(#[0-9a-f]{3,6}|rgb?(.+)|hsl?(.+)|hsv?(.+))$/i;\n \n // List of properties that should use a textarea\n const complexProperties = [\n 'background', 'background-image', 'box-shadow', 'text-shadow',\n 'border', 'border-radius', 'border-image', 'filter', 'transform'\n ];\n\n Object.keys(stylesObject).forEach(prop => {\n let value = stylesObject[prop];\n let selector = `${selectorPrefix}['${prop}']`;\n\n // Check if the property has fixed values\n const predefinedValues = cssFixedValueProperties[prop];\n if (predefinedValues) {\n let options = predefinedValues.map(val => \n ``\n ).join('');\n\n styles += `\n \n `;\n } else if (cssRangedValueProperties[prop]) {\n const { min, max, step } = cssRangedValueProperties[prop];\n \n // Ensure valueParts and remainingParts are arrays, even if value is null or doesn't match\n const valueParts = value ? value.match(/-?\\d*\\.?\\d+([a-z%]+|)/g) || [] : [];\n const remainingParts = value ? value.split(/-?\\d*\\.?\\d+[a-z%]*/g).filter(Boolean) || [] : [];\n\n styles += `\n \n
    `;\n \n valueParts.forEach((part, index) => {\n const numericValue = parseFloat(part);\n const unitMatch = part.match(/[a-zA-Z%]+/);\n const unit = unitMatch ? unitMatch[0] : '';\n\n // Check if the current part contains `var()`\n const gridColsClass = part.includes('var(') ? 'grid-cols-1' : 'grid-cols-2';\n \n // Define valid units based on property\n let validUnits;\n switch (prop) {\n case 'scale':\n case 'rotate':\n case 'translate':\n case 'perspective':\n case 'skew':\n validUnits = ['', 'deg', 'rad']; // Example units for transform properties\n break;\n case 'animation-duration':\n case 'transition-duration':\n validUnits = ['', 'ms', 's']; // Example units for duration properties\n break;\n default:\n validUnits = ['', 'px', '%', 'rem', 'em', 'vh', 'lvh', 'svh', 'dvh', 'vw', 'lvw', 'svw', 'dvw', 'ex', 'ch', 'vmin', 'vmax', 'cm', 'mm', 'in', 'pt', 'pc']; // Default units\n break;\n }\n\n // Add a grid class per input field\n styles += `
    `;\n \n const selectElement = ``;\n \n const rangeElement = ` 0 ? ` + ' ' + '${remainingParts.join(' ')}'` : ''};\"\n onfocus=\"saveState();\" onblur=\"saveState();\">`;\n \n styles += `\n 0 ? ` + ' ' + '${remainingParts.join(' ')}'` : ''};\"\n onfocus=\"saveState();\" onblur=\"saveState();\">\n ${prop === 'opacity' || prop === 'z-index' ? rangeElement : selectElement}\n
    `;\n });\n \n // Add a backup text input for cases where units aren't defined\n if (remainingParts.length > 0 || valueParts.length === 0) {\n styles += `\n \n `;\n }\n \n styles += `
    `;\n } else if (complexProperties.includes(prop)) {\n // Use a textarea for complex multi-line properties\n styles += `\n \n `;\n } else {\n // Check if the property is a color property\n const isColorProperty = colorRegex.test(value) || value === null;\n const fallbackColor = isColorProperty && value === null ? '#000000' : value;\n\n styles += `\n \n `;\n }\n });\n\n return styles;\n };\n\n const generateRootVariablesSection = () => {\n let styles = '';\n \n // Regular expression to detect color values\n const colorRegex = /^(#[0-9a-f]{3,6}|rgb?(.+)|hsl?(.+)|hsv?(.+))$/i;\n\n // Iterate over each root variable\n Object.keys(project.css.rootVariables).forEach(key => {\n const value = project.css.rootVariables[key];\n const selector = `project.css.rootVariables['${key}']`;\n\n // Determine input type based on value\n const isColor = colorRegex.test(value);\n const isNumeric = !isNaN(parseFloat(value)) && isFinite(value);\n\n let inputType = 'text';\n let inputStyle = 'height: auto; margin: 0; padding: .4rem;';\n\n if (isNumeric) inputType = 'number';\n\n // Use processStyles function to generate styles for root variables\n styles += `\n \n \n `;\n });\n\n return `\n
    \n
    \n \n \n
    \n
    \n ${styles}\n
    \n
    \n `;\n };\n\n const generateStylesSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let targets = null;\n let styles = '';\n let activeStyle = null;\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n });\n }\n \n let obj = null;\n if (data.breakpointKey) {\n obj = project.css.breakpoints[`${data.breakpointKey}px`];\n } else {\n obj = project.css.styles;\n }\n\n // Render targets within style\n let dropdown = ``;\n\n let buttonClass = '';\n Object.keys(obj).forEach(key => {\n if (data.stylesTarget && data.stylesTarget === key) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n activeStyle = key;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full capitalize text-left';\n activeStyle = null;\n }\n\n styles += ``;\n });\n\n return `
    \n
    \n \n \n
    \n
    \n ${data.stylesTarget ? `
    \n ${dropdown}\n
    ` : ''}\n
    \n ${styles}\n
    \n ${data.stylesTarget ? `
    \n \n \n
    ` : ''}\n ${data.stylesTarget ? `
    \n \n \n
    ` : ''}\n
    \n
    `;\n };\n\n const generatePseudosSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let styles = '';\n let selector = '';\n let activeStyle = null;\n let buttonClass = '';\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n if (!data.stylesTarget) {\n data.stylesTarget = layer.style;\n }\n });\n }\n\n // Target specific pseudo style\n if (data.stylesTarget && data.stylesPropTarget === \"pseudos\") {\n if (project.css.styles[data.stylesTarget].pseudos) {\n Object.keys(project.css.styles[data.stylesTarget].pseudos).forEach(index => {\n selector = project.css.styles[data.stylesTarget].pseudos[index].selector;\n if (data.pseudosSelector === selector) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n activeStyle = true;\n data.pseudosSelectorIndex = index;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full text-left';\n activeStyle = null;\n }\n styles += ``;\n });\n }\n }\n\n return `
    \n
    \n \n \n
    \n
    \n ${data.stylesTarget ? `
    \n ${styles}\n
    ` : ''}\n ${data.pseudosSelector && data.stylesTarget ? `\n
    \n \n \n
    \n ` : ''}\n ${data.pseudosSelector && data.stylesTarget ? `\n
    \n \n
    \n ` : ''}\n
    \n
    `;\n };\n\n const generateStylePropertiesSection = () => {\n let styles = '';\n let styleKey = null;\n\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n styleKey = layer.style;\n });\n }\n\n let obj = project.css.styles;\n const detectStylesPropTarget = ['base', 'pseudos'];\n if (detectStylesPropTarget.includes(data.stylesPropTarget)) {\n Object.keys(obj).forEach(key => {\n if (styleKey === key || data.stylesTarget == key) {\n if (data.stylesPropTarget === 'pseudos') {\n const index = data.pseudosSelectorIndex;\n if (data.pseudosSelector) {\n if (obj[key].pseudos[index].styles) {\n styles += processStyles(obj[key].pseudos[index].styles, `project.css.styles['${key}'].pseudos['${index}'].styles`, key);\n }\n }\n } else {\n if (obj[key][data.stylesPropTarget]) {\n styles += processStyles(obj[key][data.stylesPropTarget], `project.css.styles['${key}']['${data.stylesPropTarget}']`, key);\n }\n }\n }\n });\n }\n\n let stylesObj = 'project.css.styles[data.stylesTarget][data.stylesPropTarget]';\n if (data.stylesPropTarget === \"pseudos\") {\n stylesObj = 'project.css.styles[data.stylesTarget][data.stylesPropTarget][data.pseudosSelectorIndex].styles';\n }\n\n return `
    \n
    \n \n \n
    \n
    \n ${styles}\n
    \n
    `;\n };\n\n const generateBreakpointsSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let styles = '';\n let activeStyle = null;\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n if (!data.stylesTarget) {\n data.stylesTarget = layer.style;\n }\n });\n }\n\n let buttonClass = '';\n if (data.stylesTarget && project.css.breakpoints) {\n Object.keys(project.css.breakpoints).forEach(key => {\n if (data.breakpointKey === key.split('px').join('')) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n activeStyle = key;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full capitalize text-center';\n activeStyle = null;\n }\n styles += ``;\n });\n }\n\n return `
    \n
    \n \n \n
    \n
    \n ${data.stylesTarget && project.css.breakpoints ? `
    \n ${styles}\n
    ` : ''}\n ${data.breakpointKey && data.stylesTarget && project.css.breakpoints ? `
    \n \n \n
    ` : ''}\n ${data.breakpointKey && data.stylesTarget && project.css.breakpoints ? `
    \n \n
    ` : ''}\n
    \n
    `;\n };\n\n const generateBreakpointStylesSection = () => {\n if (!data.breakpointKey) return;\n let styles = '';\n let styleKey = null;\n\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n styleKey = layer.style;\n });\n }\n\n let obj = project.css.breakpoints[`${data.breakpointKey}px`];\n\n const detectStylesPropTarget = ['base', 'pseudos'];\n if (detectStylesPropTarget.includes(data.stylesPropTarget)) {\n Object.keys(obj).forEach(key => {\n if (styleKey === key || data.stylesTarget == key) {\n if (data.stylesPropTarget === 'pseudos') {\n const index = data.pseudosSelectorIndex;\n if (data.pseudosSelector) {\n if (obj[key].pseudos[index].styles) {\n styles += processStyles(obj[key].pseudos[index].styles, `project.css.breakpoints['${data.breakpointKey}px']['${key}'].pseudos['${index}'].styles`, key, 'breakpoints');\n }\n }\n } else {\n if (obj[key][data.stylesPropTarget]) {\n styles += processStyles(obj[key][data.stylesPropTarget], `project.css.breakpoints['${data.breakpointKey}px']['${key}']['${data.stylesPropTarget}']`, key, 'breakpoints');\n }\n }\n }\n });\n }\n\n return `
    \n
    \n \n \n
    \n
    \n ${styles}\n
    \n
    `;\n };\n\n const generateAnimationsSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let styles = '';\n let activeStyle = null;\n let buttonClass = '';\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n if (!data.stylesTarget) {\n data.stylesTarget = layer.style;\n }\n });\n }\n\n if (data.stylesTarget && project.css.animations) {\n Object.keys(project.css.animations).forEach(key => {\n if (data.animationTarget === key) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n buttonClass = buttonClass.split('capitalize').join('normal-case');\n activeStyle = key;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full normal-case text-center';\n activeStyle = null;\n }\n styles += ``;\n });\n }\n\n return `
    \n
    \n \n \n
    \n
    \n ${data.stylesTarget && project.css.animations ? `
    \n ${styles}\n
    ` : ''}\n ${data.animationTarget && project.css.animations ? `
    \n \n \n
    ` : ''}\n ${data.animationTarget && project.css.animations ? `
    \n \n
    ` : ''}\n
    \n
    `;\n };\n\n const generateAnimationPropertySection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let content = '';\n let keyframes = '';\n let activeStyle = null;\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n if (!data.stylesTarget) {\n data.stylesTarget = layer.style;\n }\n });\n }\n\n // Generate keyframes buttons\n if (data.animationTarget && project.css.animations && project.css.animations[data.animationTarget].keyframes) {\n Object.keys(project.css.animations[data.animationTarget].keyframes).forEach(key => {\n let buttonClass = '';\n if (data.animationKeyframe === key) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n isActive = true;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full capitalize text-center';\n isActive = null;\n }\n \n keyframes += ``;\n });\n }\n\n // Generate the styles for the active keyframe\n if (data.animationKeyframe && data.animationTarget && project.css.animations && project.css.animations[data.animationTarget].keyframes) {\n const activeKeyframe = project.css.animations[data.animationTarget].keyframes[data.animationKeyframe];\n content += processStyles(activeKeyframe, `project.css.animations['${data.animationTarget}'].keyframes['${data.animationKeyframe}']`, data.animationKeyframe, 'animations');\n }\n\n return `
    \n
    \n \n \n
    \n
    \n ${data.animationTarget && project.css.animations ? `
    \n ${keyframes}\n
    ` : ''}\n ${data.animationKeyframe && project.css.animations && project.css.animations[data.animationTarget].keyframes ? `
    \n ${content}\n
    ` : ''}\n ${data.animationKeyframe && project.css.animations && project.css.animations[data.animationTarget].keyframes ? `
    \n \n \n \n \n
    ` : ''}\n
    \n
    `;\n };\n\n const generateAttributesSection = () => {\n if (selectedLayers.length === 0) return '';\n \n // Display common attributes\n let attributes = \"\",\n attributeTag = \"\",\n svgImage = \"\";\n if (commonLayerTag || selectedLayers.length === 1) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n attributeTag = \"\";\n const layer = commonLayerTag[layerKey];\n const tag = layer.tag;\n \n // block name\n attributeTag += `\n Block Name\n \n `;\n \n // style reference\n attributeTag += `\n Style Ref\n \n `;\n \n // Determine block type and render the appropriate options\n let options = \"\";\n if (boxElements.includes(tag)) {\n options = boxElements.map(element => \n ``\n ).join('');\n } else if (textElements.includes(tag)) {\n options = textElements.map(element => \n ``\n ).join('');\n } else if (breakElements.includes(tag)) {\n options = breakElements.map(element => \n ``\n ).join('');\n } else {\n options = ``;\n }\n \n if (options) {\n attributeTag += `\n tag\n `;\n }\n \n if (tag === \"svg\" && selectedLayers.length === 1) {\n const elm = document.createElement(\"template\");\n elm.innerHTML = json2html(layer);\n const element = elm.content.firstElementChild;\n \n if (element) {\n if (element.hasAttribute(\"style\")) element.removeAttribute('style');\n element.removeAttribute(\"width\");\n element.removeAttribute(\"height\");\n element.setAttribute(\"class\", mediaClass);\n element.setAttribute(\"onclick\", `updateSvgMedia('${layer.id}', 'svg')`);\n \n svgImage += `\n \n
    \n ${element.outerHTML}\n
    \n `;\n }\n \n elm.remove();\n }\n });\n }\n \n if (Object.keys(commonAttributes).length > 0 || selectedLayers.length === 1) {\n svgImage ? attributes = svgImage + \"\" : attributes = \"\";\n const layer = selectedLayers[0];\n const tag = layer.tag;\n\n if (tag === \"audio\") {\n attributes += `\n Replace Audio\n
    \n \n \n \n \n \n \n \n \n
    \n `;\n }\n \n if (layer.props) {\n // Generate the attributes section dynamically based on layer\n Object.keys(commonAttributes).forEach(propKey => {\n let name = propKey;\n const value = commonAttributes[propKey];\n \n const textAreaAttributes = [\"on\", '@', \"x-\", \":\"];\n const lowerPropKey = propKey.toLowerCase();\n \n // Handle different types of attributes\n if (booleanAttributes.includes(name)) {\n attributes += renderBooleanAttribute(propKey, commonAttributes[propKey]);\n } else if (lowerPropKey === \"style\" || lowerPropKey === \"class\") {\n attributes += renderTextarea(propKey, commonAttributes[propKey]);\n } else if (textAreaAttributes.some(attr => lowerPropKey.startsWith(attr))) {\n attributes += renderTextarea(propKey, commonAttributes[propKey]);\n } else if (tag === \"input\") {\n if (name === \"required\") {\n attributes += renderBooleanAttribute(propKey, commonAttributes[propKey]);\n }\n \n let nodeType = \"text\";\n for (let numAttr of numberAttributes) {\n if (name === numAttr) {\n nodeType = \"number\";\n }\n }\n for (let string of stringAttributes) {\n if (name === string) {\n nodeType = \"text\";\n }\n }\n if (name === \"value\") {\n for (let inputType of inputTypes) {\n if (layer.props.type) {\n if (layer.props.type === inputType) {\n nodeType = layer.props.type.toLowerCase();\n }\n if (layer.props.type === \"range\") {\n nodeType = \"number\";\n }\n }\n }\n }\n if (name === \"type\") {\n let options = '';\n for (let string of inputTypes) {\n options += ``;\n }\n \n attributes += `\n \n \n `;\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else if (tag === \"button\") {\n if (name === \"type\") {\n attributes += `\n \n \n `;\n } else if (name === \"role\") {\n attributes += renderBooleanAttribute(propKey, commonAttributes[propKey]);\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else if (tag === \"a\") {\n if (name === \"target\") {\n attributes += `\n \n \n `;\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else if (tag === \"img\") {\n let numTypes = [\"width\", \"height\"];\n if (numTypes.includes(name)) {\n let type = \"text\";\n for (let numType of numTypes) {\n if (name === numType) {\n type = \"number\";\n }\n }\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n } else if (name === \"src\") {\n attributes += `\n \n
    \n \n \n
    \n `;\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else if (tag === \"svg\") {\n let numTypes = [\"stroke-width\"];\n let type = \"text\";\n for (let numType of numTypes) {\n if (name === numType) {\n type = \"number\";\n }\n }\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n } else if (tag === \"form\") {\n if (name === \"method\") {\n attributes += `\n \n \n `;\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n });\n }\n }\n\n if (Object.keys(commonAttributes).length > 0 || selectedLayers.length >= 0) {\n const layer = selectedLayers[0];\n const tag = layer.tag;\n\n if (\"text\" in layer || layer.text) {\n if (tag === \"style\" || tag === \"script\") {\n attributes += `\n text\n \n `;\n } else {\n attributes += `\n text\n \n `;\n }\n }\n }\n \n if (selectedLayers.length > 0) {\n return `
    \n
    \n \n \n
    \n
    \n ${attributeTag + attributes}\n
    \n
    `;\n }\n }\n\n // Combine all sections\n const inspectorHtml = `\n
    \n ${generatePreviewSize()}\n ${generateRootVariablesSection()}\n ${generateStylesSection()}\n ${data.stylesTarget && data.stylesPropTarget === \"pseudos\" ? generatePseudosSection() : ''}\n ${data.stylesTarget ? generateStylePropertiesSection() : ''}\n ${data.stylesTarget ? generateBreakpointsSection() : ''}\n ${data.breakpointKey ? generateBreakpointStylesSection() : ''}\n ${data.stylesTarget ? generateAnimationsSection() : ''}\n ${data.animationTarget ? generateAnimationPropertySection() : ''}\n ${generateAttributesSection()}\n
    \n `;\n\n return inspectorHtml;\n}\nfunction editorNav() {\n const buttonClass = \"border-0 bg-transparent py-1\";\n\n return `\n \n \n \n `;\n}\nwindow.Modal = {\n render({\n large,\n title = \"Are you sure you want to proceed?\",\n content,\n CloseLabel,\n ConfirmLabel,\n onLoad,\n onClose,\n onConfirm\n }) {\n // if (!options) return false;\n const hClass = \"text-lg font-thin m-0\";\n const buttonClass = \"text-xs w-auto px-3 py-2 m-0 capitalize rounded-md\";\n const svgClass = \"w-3\";\n const times = `\n \n `;\n\n const html = `
    \n
    \n

    ${title}

    \n \n
    \n
    \n ${content ? content : ''}\n
    \n
    \n \n ${onConfirm ? `` : ''}\n
    \n
    `;\n\n const modal = document.createElement('dialog');\n modal.open = true;\n modal.innerHTML = html;\n\n document.body.appendChild(modal);\n if (onLoad && typeof onLoad === 'function') {\n onLoad();\n }\n\n const timesBtn = modal.querySelector('header button');\n const closeBtn = modal.querySelector('footer button:first-child');\n const confirmBtn = modal.querySelector('footer button:last-child');\n\n // Confirm handler function\n timesBtn.onclick = function() {\n if (onClose && typeof onClose === 'function') {\n onClose();\n }\n document.body.removeChild(modal);\n }\n closeBtn.onclick = function() {\n if (onClose && typeof onClose === 'function') {\n onClose();\n }\n document.body.removeChild(modal);\n }\n confirmBtn.onclick = function() {\n if (onConfirm && typeof onConfirm === 'function') {\n onConfirm();\n }\n document.body.removeChild(modal);\n }\n }\n}\nwindow.Blocks = () => {\n const btnClass = `bg-transparent p-4 text-xs cursor-pointer capitalize`;\n\n let blockItem = '', componentItem = '';\n\n data.blocks.items.forEach((block, index) => {\n blockItem += `\n `;\n });\n\n project.components.forEach((component, index) => {\n componentItem += `\n
    \n \n\n \n
    `;\n });\n\n let modalContent = `\n \n
    \n
    \n
    \n \n ${data.blocks.name}\n \n \n ${blockItem}\n\n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n Components\n \n \n ${componentItem}\n\n \n \n
    \n
    \n
    `;\n\n // Render the modal\n Modal.render({\n title: `Add A Block`,\n content: modalContent\n });\n}\nwindow.App = {\n initialRender: true,\n render(container) {\n if (data.doNotRender) return;\n const buttonClass = \"border-0 bg-transparent py-1\";\n // Calculate zoom transform based on viewport size and iframe size\n const size = data.selectedSize;\n let viewportWidth, viewportHeight;\n const previewElm = document.getElementById('previewElm');\n if (document.getElementById('previewElm')) {\n viewportWidth = previewElm.clientWidth;\n viewportHeight = previewElm.clientHeight;\n }\n let [width, height] = size.split('x').map(Number);\n \n const html = `\n
    \n
    \n ${LeftMenubar()}\n
    \n \n \n
    \n
    \n
    \n
      \n ${LayerTree()}\n
    \n
    \n
    \n
    \n 0 ? '' : 'disabled=\"true\"'}>\n ${icons.undo}\n \n \n ctrl\n \n \n ${icons.shift}\n \n
    \n
    \n ${editorNav()}\n
    \n
    \n \n \n ${icons.redo}\n \n
    \n
    \n
    \n
    \n
    \n
      \n ${Inspector()}\n
    \n
    \n
    \n
    \n 0 ? '' : 'disabled=\"true\"'}>\n ${icons.undo}\n \n
    \n
    \n \n ctrl\n \n \n ${icons.shift}\n \n \n ${icons.redo}\n \n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    \n
    \n \n\n \n ${data.iframeSize}\n \n
    \n
    \n
    \n
    \n
    \n 0 ? '' : 'disabled=\"true\"'}>\n ${icons.undo}\n \n
    \n \n
    \n ${editorNav()}\n
    \n\n \n ${icons.redo}\n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n\n ${Menu()}\n ${Settings()}\n `;\n \n const element = document.querySelector(container);\n if (!element) return;\n\n // Create a new temporary element to compare\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n if (doc.body.innerHTML.trim() === html.trim()) return;\n if (App.initialRender) {\n element.innerHTML = html;\n renderPreview(true);\n App.initialRender = false;\n return false;\n }\n\n const oldPickers = document.querySelectorAll('.pcr-app');\n if (oldPickers) oldPickers.forEach(picker => picker.remove());\n\n // Compare and update only the changed parts\n const currentDoc = element.firstElementChild;\n const newDoc = doc.body.firstElementChild;\n diffNodes(currentDoc, newDoc);\n\n // Select all elements with the data-color-picker attribute\n const pickers = document.querySelectorAll('[data-iscolor]');\n\n if (pickers) {\n pickers.forEach((picker, index) => {\n // Extract the initial color value from the data-iscolor attribute\n const initialColor = picker.getAttribute('data-iscolor');\n \n const pickr = Pickr.create({\n el: picker,\n theme: 'nano', // or 'monolith', or 'nano'\n default: initialColor,\n inline: true,\n components: {\n // Main components\n preview: true,\n opacity: true,\n hue: true,\n \n // Input / output Options\n interaction: {\n input: true\n }\n }\n });\n\n // Set the initial color\n pickr.setColor(initialColor);\n \n // Update color display and state on color change\n pickr.on('show', () => {\n data.doNotRender = true;\n })\n .on('change', color => {\n const colorString = color.toHEXA().toString();\n \n // Get the oninput attribute value\n const onInputCode = pickers[index].getAttribute('oninput');\n \n if (onInputCode) {\n // Replace 'this.value' with the actual color string\n const updatedCode = onInputCode.replace(/this.value/g, `\"${colorString}\"`);\n \n // Create a new function using the Function constructor and execute it\n const func = new Function(updatedCode);\n func(); // Execute the dynamically created function\n }\n \n // Apply color\n pickr.applyColor();\n })\n .on('hide', () => {\n data.doNotRender = null;\n pickr.applyColor();\n App.render('#app');\n })\n });\n }\n }\n}\n\n// Inspector functions\nwindow.modifyRootVariable = id => {\n let modalContent = `
    \n
    \n
    \n
    Name:
    \n \n
    \n
    \n
    Value:
    \n button:last-child').onclick();\n }\n \">\n \n
    \n
    \n
    \n \n
    \n
    `;\n\n Modal.render({\n title: `Are you sure you want to rename the \"${id.substring(2)}\" root variable?`,\n content: modalContent,\n onLoad() {\n document.getElementById('m7t85jokv').focus();\n document.getElementById('m7t85jokv').select();\n },\n onConfirm() {\n let newValue = document.getElementById('hbo1luvti').value;\n let name = document.getElementById('m7t85jokv').value;\n // Convert the first character to lowercase\n name = name.charAt(0).toLowerCase() + name.slice(1);\n\n if (name) {\n if (!name.startsWith('--')) {\n name = '--' + name;\n }\n // Convert the first character after '--' to lowercase\n let newName = name.substring(0, 2) + name.charAt(2).toLowerCase() + name.slice(3);\n \n if (project.css.rootVariables[newName]) {\n // Update existsing value\n project.css.rootVariables[newName] = newValue;\n App.render('#app');\n } else {\n saveState();\n\n // Clone the style object\n project.css.rootVariables[newName] = JSON.parse(JSON.stringify(project.css.rootVariables[`${id}`]));\n \n // Update the variable with the new value\n project.css.rootVariables[newName] = newValue; // Assign the new value to the variable\n\n // Now delete the old style object\n delete project.css.rootVariables[`${id}`];\n localStorage.setItem('Polyrise', JSON.stringify(project));\n\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to rename variable`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.addStyle = () => {\n let modalContent = `\n button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add A Style`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n document.getElementById('vvrh9nxwk').select();\n },\n onConfirm() {\n let value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n // Convert the first character to lowercase\n value = value.charAt(0).toLowerCase() + value.slice(1);\n \n let obj = project.css.styles;\n if (data.breakpointKey && data.stylesTarget) {\n obj = project.css.breakpoints[`${data.breakpointKey}px`];\n }\n\n if (obj[`${value}`]) {\n Modal.render({\n title: `Unable to add style!`,\n content: \"Style already exists!\"\n });\n } else {\n obj[value] = {\n \"base\": {},\n \"pseudos\": []\n };\n }\n } else {\n Modal.render({\n title: `Unable to add style`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.duplicateStyle = () => {\n let modalContent = `\n button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Name your style`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n document.getElementById('vvrh9nxwk').select();\n },\n onConfirm() {\n let value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n // Convert the first character to lowercase\n value = value.charAt(0).toLowerCase() + value.slice(1);\n \n let obj = project.css.styles;\n if (data.breakpointKey && data.stylesTarget) {\n obj = project.css.breakpoints[`${data.breakpointKey}px`];\n }\n\n if (obj[`${value}`]) {\n Modal.render({\n title: `Unable to add style!`,\n content: \"Style already exists!\"\n });\n } else {\n obj[value] = obj[data.stylesTarget];\n }\n } else {\n Modal.render({\n title: `Unable to add style`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.addStylePropModal = (id, obj) => {\n // Define default values for each property type\n const defaultValues = data.defaultValues;\n\n // Sort and categorize properties\n const rootVariables = Object.keys(project.css.rootVariables).sort();\n const fixedValueProperties = Object.keys(data.cssFixedValueProperties).sort();\n const rangedValueProperties = Object.keys(data.cssRangedValueProperties).sort();\n\n // Generate options grouped by category\n const rootVariableOptions = rootVariables.map(prop => `\n \n `).join('');\n\n const fixedValuePropertyOptions = fixedValueProperties.map(prop => `\n \n `).join('');\n\n const rangedValuePropertyOptions = rangedValueProperties.map(prop => `\n \n `).join('');\n\n const modalContent = `\n
    \n \n \n
    \n
    \n \n \n
    \n
    \n button:last-child').onclick();\n }\n \"/>\n
    \n ${data.canUseQuickCommands ? `
    \n You can also apply styles using tailwind classes as quick commands!\n
    ` : ''}`;\n\n Modal.render({\n title: `Add New Style to \"${id}\"`,\n content: modalContent,\n onLoad() {\n document.getElementById('ool1zyibs').focus();\n const propertyTypeSelect = document.getElementById('property-type');\n const unitSelect = document.getElementById('property-unit');\n const unitSection = document.getElementById('unit-section');\n\n function updatePropertyDetails(selectedType) {\n unitSelect.innerHTML = '';\n\n if (data.cssRangedValueProperties[selectedType]) {\n unitSection.style.display = noUnitProperties.includes(selectedType) ? 'none' : 'block';\n\n if (selectedType.startsWith('animation')) {\n unitOptions.animation.forEach(unit => {\n unitSelect.innerHTML += ``;\n });\n } else if (transformUnits.includes(selectedType)) {\n unitOptions.transform.forEach(unit => {\n unitSelect.innerHTML += ``;\n });\n } else {\n unitOptions.default.forEach(unit => {\n unitSelect.innerHTML += ``;\n });\n }\n } else if (data.cssFixedValueProperties[selectedType]) {\n unitSection.style.display = 'none';\n } else {\n unitSection.style.display = 'none';\n }\n }\n\n propertyTypeSelect.onchange = function() {\n const selectedType = this.value;\n updatePropertyDetails(selectedType);\n document.getElementById('ool1zyibs').value = selectedType;\n };\n },\n onConfirm() {\n let propertyTypeInput = document.getElementById('ool1zyibs').value.trim();\n const unit = document.getElementById('property-unit') ? document.getElementById('property-unit').value : '';\n const noUnit = ['opacity', 'z-index'];\n const cssQuickCommands = data.cssQuickCommands;\n \n // Normalize the input\n const properties = propertyTypeInput.split(',').map(prop => prop.trim());\n \n properties.forEach(propertyString => {\n let [propertyType, userDefinedValue] = propertyString.split('=').map(str => str.trim());\n propertyType = propertyType.toLowerCase();\n \n // Check if propertyType is a Tailwind quick command\n if (Object.keys(cssQuickCommands).includes(propertyType)) {\n const quickCommand = cssQuickCommands[propertyType];\n const quickCommandProperties = quickCommand.split(';').filter(Boolean);\n \n quickCommandProperties.forEach(propertyString => {\n let [quickPropertyType, quickUserDefinedValue] = propertyString.split(':').map(str => str.trim());\n quickPropertyType = quickPropertyType.toLowerCase();\n obj[quickPropertyType] = quickUserDefinedValue;\n });\n } else {\n // Handle custom properties\n let finalValue;\n \n if (userDefinedValue) {\n // Use the user-defined value\n finalValue = userDefinedValue + (unit && !noUnit.includes(propertyType) ? unit : '');\n } else {\n // Use the default value if no value was provided\n const defaultValue = defaultValues[propertyType] || defaultValues['default'];\n finalValue = unit ? `${defaultValue}${unit}` : defaultValue;\n }\n \n // Apply the final value to the property\n if (noUnit.includes(propertyType)) {\n obj[propertyType] = userDefinedValue || \"1\";\n } else {\n obj[propertyType] = finalValue;\n }\n }\n });\n \n saveState();\n } \n });\n}\nwindow.renameStyleTarget = target => {\n let modalContent = `
    \n button:last-child').onclick();\n }\n \">\n
    `;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${target}\" style?`,\n content: modalContent,\n onLoad() {\n document.getElementById('lnjvy3iz2').focus();\n },\n onConfirm() {\n let value = document.getElementById('lnjvy3iz2').value;\n if (value) {\n // Convert the first character to lowercase\n value = value.charAt(0).toLowerCase() + value.slice(1);\n \n if (project.css.styles[value]) {\n Modal.render({\n title: `Unable to add style!`,\n content: \"Style already exists!\"\n });\n } else if (project.css.styles[`${target}`]) {\n // Remove the storage of the styles target before changing\n data.stylesTarget = null;\n\n // Clone the style object\n project.css.styles[value] = JSON.parse(JSON.stringify(project.css.styles[target]));\n \n // Now delete the old style object\n delete project.css.styles[target];\n\n // Target the new style\n data.stylesTarget = value;\n\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to rename style`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteStyleTarget = target => {\n let modalContent = `
    You will still be able to undo.
    `;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${target}\" style?`,\n content: modalContent,\n onConfirm() {\n if (data.stylesTarget) {\n clearStyles(project.html, data.stylesTarget);\n delete project.css.styles[data.stylesTarget];\n data.stylesTarget = null;\n saveState();\n }\n }\n });\n}\nwindow.addBreakpoint = () => {\n let modalContent = `\n \n button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add A Breakpoint`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n },\n onConfirm() {\n const value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n if (project.css.breakpoints[`${value}px`]) {\n Modal.render({\n title: `Unable to add breakpoint!`,\n content: \"Breakpoint already exists!\"\n });\n } else {\n project.css.breakpoints[`${value}px`] = {};\n project.css.breakpoints[`${value}px`][`${data.stylesTarget}`] = {\n \"base\": {},\n \"pseudos\": []\n };\n }\n } else {\n Modal.render({\n title: `Unable to add breakpoint`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.renameBreakpointKey = size => {\n let modalContent = `
    \n button:last-child').onclick();\n }\n \">\n
    `;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${size}\" style?`,\n content: modalContent,\n onLoad() {\n document.getElementById('mow5ep6l7').focus();\n },\n onConfirm() {\n const value = document.getElementById('mow5ep6l7').value;\n if (value) {\n if (project.css.breakpoints[`${value}px`]) {\n Modal.render({\n title: `Unable to rename breakpoint key!`,\n content: \"Key already exists!\"\n });\n } else {\n // Remove the storage of the styles target before changing\n data.breakpointKey = null;\n\n // Clone the style object\n project.css.breakpoints[`${value}px`] = JSON.parse(JSON.stringify(project.css.breakpoints[size]));\n \n // Now delete the old style object\n delete project.css.breakpoints[size];\n }\n } else {\n Modal.render({\n title: `Unable to rename breakpoint key`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteBreakpointKey = size => {\n let modalContent = `
    You will still be able to undo.
    `;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${size}\" style?`,\n content: modalContent,\n onConfirm() {\n if (size in project.css.breakpoints) {\n data.breakpointKey = null;\n delete project.css.breakpoints[size];\n saveState();\n }\n }\n });\n}\nwindow.addAnimation = () => {\n let modalContent = `\n button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add An Animation`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n },\n onConfirm() {\n let value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n // Convert the first character to lowercase\n value = value.charAt(0).toLowerCase() + value.slice(1);\n if (project.css.animations[`${value}`]) {\n Modal.render({\n title: `Unable to add animation!`,\n content: \"Animation already exists!\"\n });\n } else {\n project.css.animations[value] = {\n \"keyframes\": {}\n };\n project.css.animations[value].keyframes = {\n \"0%\": {},\n \"100%\": {}\n };\n }\n } else {\n Modal.render({\n title: `Unable to add animation`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.renameAnimation = name => {\n let modalContent = `
    \n button:last-child').onclick();\n }\n \">\n
    `;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${name}\" animation?`,\n content: modalContent,\n onLoad() {\n document.getElementById('mow5ep6l7').focus();\n },\n onConfirm() {\n const value = document.getElementById('mow5ep6l7').value;\n if (value) {\n if (project.css.animations[value]) {\n Modal.render({\n title: `Unable to rename animation!`,\n content: \"Animation name already exists!\"\n });\n } else {\n // Remove the storage of the styles target before changing\n data.animationTarget = null;\n\n // Clone the style object\n project.css.animations[value] = JSON.parse(JSON.stringify(project.css.animations[name]));\n \n // Now delete the old style object\n delete project.css.animations[name];\n\n // Make the new name the target\n data.animationTarget = value;\n }\n } else {\n Modal.render({\n title: `Unable to rename animation`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteAnimation = name => {\n let modalContent = `
    You will still be able to undo.
    `;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${name}\" animation?`,\n content: modalContent,\n onConfirm() {\n if (data.animationKeyframe) data.animationKeyframe = null;\n // Remove the storage of the styles target before changing\n data.animationTarget = null;\n data.animationTarget = null;\n delete project.css.animations[name];\n App.render(\"#app\");\n }\n });\n}\nwindow.addKeyFrame = () => {\n if (!data.animationTarget) return;\n let modalContent = `\n button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add An Animation`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n },\n onConfirm() {\n const value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n if (project.css.animations[data.animationTarget].keyframes[`${value}`]) {\n Modal.render({\n title: `Unable to add keyframe!`,\n content: \"Keyframe already exists!\"\n });\n } else {\n project.css.animations[data.animationTarget].keyframes[`${value}`] = {};\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to add keyframe`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.renameKeyFrame = name => {\n let modalContent = `
    \n button:last-child').onclick();\n }\n \">\n
    `;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${name}\" keyframe?`,\n content: modalContent,\n onLoad() {\n document.getElementById('mow5ep6l7').focus();\n },\n onConfirm() {\n const value = document.getElementById('mow5ep6l7').value;\n if (value) {\n if (project.css.animations[data.animationTarget].keyframes[value]) {\n Modal.render({\n title: `Unable to rename keyframe!`,\n content: \"Animation keyframe already exists!\"\n });\n } else {\n // Remove the storage of the styles target before changing\n data.animationKeyframe = null;\n\n // Clone the style object\n project.css.animations[data.animationTarget].keyframes[value] = JSON.parse(JSON.stringify(project.css.animations[data.animationTarget].keyframes[name]));\n \n // Now delete the old style object\n delete project.css.animations[data.animationTarget].keyframes[name];\n\n // Make the new name the target\n data.animationKeyframe = value;\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to rename keyframe key`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteKeyFrame = name => {\n let modalContent = `
    You will still be able to undo.
    `;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${name}\" keyframe?`,\n content: modalContent,\n onConfirm() {\n if (data.animationKeyframe) data.animationKeyframe = null;\n // Remove the storage of the styles target before changing\n data.animationKeyframe = null;\n delete project.css.animations[data.animationTarget].keyframes[name];\n saveState();\n App.render(\"#app\");\n }\n });\n}\nwindow.addToKeyframe = () => {\n if (!data.animationTarget || !data.animationKeyframe) return;\n let modalContent = `\n button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add keyframe property`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n },\n onConfirm() {\n const value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n if (project.css.animations[data.animationTarget].keyframes[`${value}`]) {\n Modal.render({\n title: `Unable to add keyframe!`,\n content: \"Keyframe already exists!\"\n });\n } else {\n project.css.animations[data.animationTarget].keyframes[value] = {};\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to add keyframe`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteStyleProp = (id, prop, e, detect = null) => {\n let obj = null;\n if (detect) {\n if (detect === \"breakpoints\") {\n obj = project.css.breakpoints[`${data.breakpointKey}px`][id][data.stylesPropTarget];\n }\n if (detect === \"animations\") {\n obj = project.css.animations[data.animationTarget].keyframes[data.animationKeyframe]\n }\n } else {\n obj = project.css.styles[id][data.stylesPropTarget];\n }\n // Delete the property\n if (prop in obj) delete obj[`${prop}`];\n saveState();\n\n // Remove the modal\n e.closest('dialog[open]').remove();\n}\nwindow.clearStyles = (layers, query, callback) => {\n // first delete the style object\n if (project.css.styles[query]) {\n delete project.css[query];\n }\n\n // Track whether we found and cleared the styles in any layer\n let found = false;\n\n // then let's remove the style from layers\n for (const layer of layers) {\n if (layer.style === query) {\n layer.style = \"\";\n found = true;\n };\n // Recurse through child layers\n if (layer.children && layer.children.length > 0) {\n clearStyles(layer.children, query, () => {\n found = true;\n });\n }\n // If we processed any layers, renderPreview and invoke the callback\n if (found) {\n if (typeof callback === 'function') {\n callback();\n }\n }\n }\n}\nwindow.styleModal = (id, prop, currentValue, detect = null) => {\n const cssFixedValueProperties = data.cssFixedValueProperties;\n\n let detected = null;\n if (detect) detected = detect;\n\n // Initialize the modal content based on the property type\n let modalContent = '';\n\n if (cssFixedValueProperties[prop]) {\n // Handle fixed values\n const options = cssFixedValueProperties[prop].map(val => `\n \n `).join('');\n\n modalContent = `\n
    \n \n \n
    `;\n } else {\n // Handle other types of properties (e.g., text) with a single input\n modalContent = `\n
    \n \n button:last-child').onclick();\n }\n \"/>\n
    `;\n }\n\n // Add a delete option\n modalContent += `\n
    \n \n
    `;\n\n // Render the modal\n Modal.render({\n title: `Modify \"${prop}\" Style`,\n content: modalContent,\n onLoad() {\n if (document.getElementById('new-value')) {\n const element = document.getElementById('new-value');\n element.focus();\n if (element.tagName.toLowerCase() === 'input') {\n element.select();\n }\n }\n },\n onConfirm() {\n saveState();\n\n // Get the new value from the modal\n const newValue = document.getElementById('new-value').value;\n\n let obj = null;\n if (detect) {\n if (detect === \"breakpoints\") {\n if (project.css.breakpoints[`${data.breakpointKey}px`][id][data.stylesPropTarget]) {\n obj = project.css.breakpoints[`${data.breakpointKey}px`][id][data.stylesPropTarget];\n }\n }\n if (detect === \"animations\") {\n if (project.css.animations[data.animationTarget].keyframes[data.animationKeyframe]) {\n obj = project.css.animations[data.animationTarget].keyframes[data.animationKeyframe];\n }\n }\n } else {\n if (data.stylesPropTarget) {\n obj = project.css.styles[id][data.stylesPropTarget];\n }\n }\n\n // Update or delete the style\n if (newValue === '') {\n // Delete the property if empty\n delete obj[prop];\n } else {\n // Update the property with the new value\n obj[prop] = `${newValue}`;\n }\n\n saveState();\n }\n });\n}\nwindow.addPseudo = selector => {\n // Ensure the selector exists and initialize pseudos if not already present\n if (!project.css.styles[selector]) return;\n if (!project.css.styles[selector].pseudos) {\n project.css.styles[selector].pseudos = [];\n }\n\n // Define available pseudo-classes and pseudo-elements\n const pseudos = [\n 'none',\n ':active',\n ':after',\n ':before',\n ':first-child',\n ':focus',\n ':focus-visible',\n ':focus-within',\n ':hover',\n ':last-child',\n ':nth-child',\n ':target',\n ':visited',\n '::-webkit-scrollbar',\n '::-webkit-scrollbar-thumb',\n '::-webkit-scrollbar-track',\n '::before',\n '::after'\n ];\n\n let pseudoOptions = pseudos.map(pseudo => `\n \n `).join('');\n\n let modalContent = `\n
    \n \n \n button:last-child').onclick();\n }\n \">\n
    \n `;\n\n // Render the modal\n Modal.render({\n title: `Add A Pseudo-Class/Element`,\n content: modalContent,\n onLoad() {\n document.getElementById('pseudo-input').focus();\n },\n onConfirm() {\n const pseudoSelector = document.getElementById('pseudo-selector').value.trim();\n const pseudoStyles = document.getElementById('pseudo-input').value.trim();\n\n if (pseudoStyles) {\n // Convert pseudoStyles into an object\n const styles = pseudoStyles.split(';').reduce((acc, rule) => {\n const [property, value] = rule.split(':').map(s => s.trim());\n if (property && value) acc[property] = value;\n return acc;\n }, {});\n\n const existingPseudo = project.css.styles[selector].pseudos.find(pseudo => pseudo.selector === pseudoStyles);\n\n if (existingPseudo) {\n // Merge new styles with existing styles if pseudo already exists\n existingPseudo.styles = {\n ...existingPseudo.styles,\n ...styles\n };\n } else {\n // Add a new pseudo object\n let obj = {\n \"selector\": pseudoStyles,\n \"styles\": styles\n };\n project.css.styles[selector].pseudos.push(obj);\n }\n\n saveState();\n } else {\n Modal.render({\n title: `Unable to add pseudo`,\n content: \"Please select a pseudo and enter valid CSS properties and values.\"\n });\n }\n }\n });\n}\nwindow.renamePseudo = oldName => {\n // Define available pseudo-classes and pseudo-elements\n const pseudos = [\n 'none',\n ':active',\n ':after',\n ':before',\n ':first-child',\n ':focus',\n ':focus-visible',\n ':focus-within',\n ':hover',\n ':last-child',\n ':nth-child',\n ':target',\n ':visited',\n '::-webkit-scrollbar',\n '::-webkit-scrollbar-thumb',\n '::-webkit-scrollbar-track',\n '::before',\n '::after'\n ];\n\n let pseudoOptions = pseudos.map(pseudo => `\n \n `).join('');\n\n let modalContent = `\n
    \n \n \n button:last-child').onclick();\n }\n \">\n
    \n `;\n\n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${oldName}\" pseudo-class/element?`,\n content: modalContent,\n onLoad() {\n document.getElementById('pseudo-name-input').focus();\n },\n onConfirm() {\n const newName = document.getElementById('pseudo-name-input').value.trim();\n if (newName) {\n const style = project.css.styles[data.stylesTarget];\n if (!style || !style.pseudos) return;\n\n const existingPseudo = style.pseudos.find(pseudo => pseudo.selector === newName);\n if (existingPseudo) {\n Modal.render({\n title: `Unable to rename pseudo!`,\n content: \"Pseudo with the new name already exists!\"\n });\n return;\n }\n\n const pseudoIndex = style.pseudos.findIndex(pseudo => pseudo.selector === oldName);\n if (pseudoIndex === -1) {\n Modal.render({\n title: `Pseudo not found!`,\n content: `No pseudo with the name \"${oldName}\" found!`\n });\n return;\n }\n\n // Rename the pseudo\n style.pseudos[pseudoIndex].selector = newName;\n\n App.render(\"#app\");\n saveState();\n } else {\n Modal.render({\n title: `Unable to rename pseudo`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deletePseudo = () => {\n const name = data.pseudosSelector;\n const pseudoIndex = data.pseudosSelectorIndex;\n let modalContent = `
    You will still be able to undo.
    `;\n\n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${name}\" pseudo-class/element?`,\n content: modalContent,\n onConfirm() {\n const style = project.css.styles[data.stylesTarget];\n if (!style || !style.pseudos) return;\n\n data.pseudosSelector = null;\n data.pseudosSelectorIndex = 0;\n style.pseudos.splice(pseudoIndex, 1);\n saveState();\n }\n });\n}\nwindow.fetchCssQuickCommands = async url => {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n data.canUseQuickCommands = true;\n const obj = await response.json();\n return obj;\n } catch (error) {\n console.error('Error fetching CSS quick commands:', error);\n }\n}\nwindow.applyCssQuickCommands = async url => {\n const cssQuickCommands = await fetchCssQuickCommands(url);\n\n if (cssQuickCommands) {\n // Assuming `data` is a global object where `cssQuickCommands` should be applied\n data.cssQuickCommands = cssQuickCommands;\n }\n}\n// Helper function to add an attribute to the element\nwindow.addAttribute = attr => {\n if (!attr) return;\n const incrementPattern = /{n}/g; // Pattern to detect increment placeholder\n\n // Split the attributes into individual attributes\n const attrs = attr.toLowerCase().split(',').map(q => q.trim().toLowerCase());\n\n // Get the current increment values for each attribute\n const incrementValues = {};\n\n saveState();\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n // Initialize layer.props if it's undefined\n if (!layer.props) layer.props = {};\n\n // Iterate over each attribute\n attrs.forEach(attribute => {\n let [key, value] = attribute.split('=').map(s => s.trim());\n if (key === 'id') value = generateId();\n\n if (incrementPattern.test(value)) {\n // Handle incrementing values\n let baseValue = value.replace(incrementPattern, '');\n let increment = incrementValues[key] || 1;\n value = baseValue + increment;\n incrementValues[key] = increment + 1;\n }\n\n if (!(key in layer.props)) {\n layer.props[key] = value !== undefined ? value : \"\";\n } else if (value !== undefined) {\n // If the attribute already exists, update its value\n layer.props[key] = value;\n }\n });\n }\n });\n saveState();\n}\n\n// editor functions\nwindow.html2json = input => {\n function elementToJson(element) {\n const boxElements = data.boxElements;\n const textElements = data.textElements;\n const noTextElements = [\n \"br\",\n \"hr\",\n \"input\",\n \"progress\",\n \"optgroup\",\n \"input\",\n \"link\",\n \"img\",\n \"svg\",\n \"path\",\n \"polygon\",\n \"rect\",\n \"circle\",\n \"ellipse\",\n \"g\",\n \"defs\",\n \"clipPath\"\n ];\n const tagName = element.tagName.toLowerCase();\n const obj = {\n tag: element.tagName.toLowerCase(),\n id: generateId(),\n style: \"\",\n state: {\n \"collapsed\": false,\n \"visible\": true,\n \"selected\": false\n }\n };\n\n obj.name = tagName;\n if (boxElements.includes(tagName)) {\n obj.type = \"box\";\n obj.text = \"\";\n } else if (textElements.includes(tagName)) {\n obj.type = \"text\";\n obj.text = \"\";\n } else {\n obj.type = tagName;\n if (!noTextElements.includes(tagName)) {\n obj.text = \"\";\n }\n }\n \n // Add props only if not empty\n if (element.hasAttributes()) {\n const props = {};\n Array.from(element.attributes).forEach(attr => {\n props[`${attr.name.toLowerCase()}`] = `${attr.value}`;\n });\n obj.props = props;\n }\n \n if (element.childNodes.length > 0) {\n obj.children = [];\n element.childNodes.forEach(child => {\n if (child.nodeType === Node.ELEMENT_NODE) {\n obj.children.push(elementToJson(child));\n } else if (child.nodeType === Node.TEXT_NODE && child.nodeValue.trim()) {\n obj.text = child.nodeValue.trim();\n }\n });\n }\n return obj;\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, 'text/html');\n\n // Process both head and body elements\n const headJson = Array.from(doc.head.children).map(child => elementToJson(child));\n const bodyJson = Array.from(doc.body.children).map(child => elementToJson(child));\n\n // Combine the head and body JSON structures into one array\n return [...headJson, ...bodyJson];\n}\nwindow.json2html = input => {\n function jsonToElement(json) {\n const renderElement = element => {\n let html = '';\n\n // Skip elements that are not visible\n if (element.state && !element.state.visible) return html;\n \n if (!element.tag) {\n html += element.text || '';\n return html;\n }\n \n html += `<${element.tag}`;\n\n if (element.props) {\n for (let [key, value] of Object.entries(element.props)) {\n html += ` ${key}=\"${value}\"`;\n }\n }\n \n html += '>';\n \n if (element.text) {\n if (element.tag === 'style' || element.tag === 'script') {\n html += element.text;\n } else {\n html += escapeHtml(element.text);\n }\n }\n \n if (element.children) {\n for (const childElement of element.children) {\n html += renderElement(childElement);\n }\n }\n \n html += ``;\n return html;\n }\n \n let html = '';\n\n // If the input is an object, wrap it in an array\n if (!Array.isArray(json)) {\n json = [json];\n }\n\n if (Array.isArray(json)) {\n json.forEach(element => {\n html += renderElement(element);\n });\n }\n return html;\n }\n function escapeHtml(text) {\n const map = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, function(m) { return map[m]; });\n }\n function beautifyHtml(json) {\n const html = jsonToElement(json);\n let tab = ' ';\n let result = '';\n let indent = '';\n \n html.split(/>\\s*\\r\\n';\n \n if (element.match(/^]*[^\\/]$/) && !element.startsWith(\" {\n if (typeof css !== 'string') {\n throw new Error(\"Input must be a CSS string\");\n }\n\n const json = {\n rootVariables: {},\n styles: {},\n animations: {},\n breakpoints: {}\n };\n\n css = minifyCSS(css)\n\n // Handle @import statements\n const importRegex = /@import\\s+url\\(['\"]([^'\"]+)['\"]\\);/g;\n let importMatch;\n\n while ((importMatch = importRegex.exec(css)) !== null) {\n const importUrl = importMatch[1].trim();\n if (project.libraries && !project.libraries.includes(importUrl)) {\n project.libraries.push(importUrl);\n }\n }\n\n // Remove @import statements from CSS\n css = css.replace(importRegex, '');\n\n const keyframesRegex = /@keyframes\\s+([^{\\s]+)\\s*\\{([^}]*(\\{[^}]*\\})[^}]*)\\}/g;\n const mediaQueryRegex = /@media\\s*([^{]+)\\s*\\{([\\s\\S]*?\\{[\\s\\S]*?\\})\\s*}/g;\n const selectorRegex = /([^{]+?)\\s*(\\{([^}]+)\\})/g;\n\n // Decode URL-encoded characters\n function decodeURIComponentSafe(str) {\n try {\n return decodeURIComponent(str);\n } catch {\n return str;\n }\n }\n\n function processSelector(selector, properties, target) {\n selector = selector.trim();\n if (selector.startsWith('@keyframes')) return;\n\n if (selector === \":root\") {\n properties.split(';').forEach(prop => {\n const [varName, varValue] = prop.split(\":\").map(part => part.trim());\n if (varName && varValue) {\n json.rootVariables[varName] = decodeURIComponentSafe(varValue);\n }\n });\n return;\n }\n\n const pseudoMatch = selector.match(/^(.*?)(::?[a-zA-Z0-9-]+)$/);\n let baseSelector = selector;\n let pseudo = null;\n\n if (pseudoMatch) {\n baseSelector = pseudoMatch[1].trim();\n pseudo = pseudoMatch[2];\n }\n\n if (!target[baseSelector]) {\n target[baseSelector] = {};\n }\n\n let currentTarget = target[baseSelector];\n if (pseudo) {\n currentTarget['pseudos'] = currentTarget['pseudos'] || [];\n const pseudoObj = {\n selector: pseudo,\n styles: {}\n };\n currentTarget['pseudos'].push(pseudoObj);\n currentTarget = pseudoObj.styles;\n } else {\n currentTarget['base'] = currentTarget['base'] || {};\n currentTarget = currentTarget['base'];\n }\n\n // Use regex to handle property-value pairs\n const propertyRegex = /([a-zA-Z-]+)\\s*:\\s*(.*?)(?=;|$)/g;\n let match;\n while ((match = propertyRegex.exec(properties)) !== null) {\n const property = match[1].trim();\n const value = match[2].trim();\n\n // Special handling for url(...) values\n const urlRegex = /^url\\(['\"]?(.*?)['\"]?\\)$/i;\n const urlMatch = value.match(urlRegex);\n\n if (urlMatch) {\n const urlContent = urlMatch[1].trim(); // Extract URL content and trim\n currentTarget[property] = `url(\"${decodeURIComponentSafe(urlContent)}\")`;\n } else {\n currentTarget[property] = decodeURIComponentSafe(value);\n }\n }\n }\n\n function processRules(cssRules, target) {\n let match;\n while ((match = selectorRegex.exec(cssRules)) !== null) {\n const selector = match[1].trim();\n const properties = match[3].trim();\n processSelector(selector, properties, target);\n }\n }\n\n function processKeyframes(keyframesName, keyframesRules) {\n const keyframes = {};\n\n keyframesRules.split('}').forEach(segment => {\n segment = segment.trim();\n if (!segment) return;\n\n const [keyframeName, propertiesPart] = segment.split('{').map(part => part.trim());\n if (keyframeName && (keyframeName.includes('to') || keyframeName.includes('from') || keyframeName.includes('%'))) {\n propertiesPart.split(';').forEach(prop => {\n const [property, value] = prop.split(':').map(p => p.trim());\n if (property && value) {\n keyframes[keyframeName] = keyframes[keyframeName] || {};\n keyframes[keyframeName][property] = decodeURIComponentSafe(value);\n }\n });\n }\n });\n\n json.animations[keyframesName] = { keyframes };\n }\n\n // Process keyframes\n let keyframesMatch;\n while ((keyframesMatch = keyframesRegex.exec(css)) !== null) {\n const keyframesName = keyframesMatch[1].trim();\n const keyframesRules = keyframesMatch[2].trim();\n processKeyframes(keyframesName, keyframesRules);\n }\n\n // Process media queries\n let mediaMatch;\n while ((mediaMatch = mediaQueryRegex.exec(css)) !== null) {\n const mediaCondition = mediaMatch[1].trim().split(\")\")[0].split(\":\")[1].trim();\n const mediaRules = mediaMatch[2].trim();\n const mediaTarget = {};\n\n processRules(mediaRules, mediaTarget);\n\n json.breakpoints[mediaCondition] = mediaTarget;\n }\n\n // Remove media queries from CSS\n const cssWithoutMedia = css.replace(mediaQueryRegex, '');\n\n // Process remaining CSS rules\n processRules(cssWithoutMedia, json.styles);\n\n // Remove keyframes from CSS\n css = css.replace(keyframesRegex, '');\n\n // Remove any empty selectors or unnecessary properties\n Object.keys(json.styles).forEach(selector => {\n if (Object.keys(json.styles[selector]).length === 0) {\n delete json.styles[selector];\n }\n });\n\n return json;\n};\n\nwindow.json2css = styles => {\n let css = '';\n let symbol = \"\";\n let semicolon = \";\";\n let openBrace = \"{\";\n let closeBrace = \"}\";\n\n // Function to check if a value contains CSS variables\n function containCssVar(value) {\n return /var\\(--/.test(value);\n }\n\n // Function to process styles recursively\n function processStyles(selector, style, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let innerCss = '';\n\n const variables = style.variables || {};\n const baseStyles = style.base || {};\n const pseudos = style.pseudos || [];\n const children = style.children || {}; // Account for children\n\n // Add the base selector\n innerCss += `${indent}${selector} ${openBrace}\\n`;\n\n // Variables\n for (const [variable, value] of Object.entries(variables)) {\n innerCss += `${indent} ${symbol}${variable}: ${value}${semicolon}\\n`;\n }\n\n // Base styles\n for (let [property, value] of Object.entries(baseStyles)) {\n if (containCssVar(value)) {\n // Replace CSS variables with CSS variables, handling mixed content\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `var(--${varName})`;\n });\n }\n innerCss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n\n innerCss += `${indent}${closeBrace}\\n`;\n\n // Pseudo-classes/styles\n pseudos.forEach(({ selector: pseudoSelector, styles: pseudoStyles }) => {\n innerCss += `${indent}${selector}${pseudoSelector} ${openBrace}\\n`;\n for (let [property, value] of Object.entries(pseudoStyles)) {\n if (containCssVar(value)) {\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `var(--${varName})`;\n });\n }\n innerCss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n innerCss += `${indent}${closeBrace}\\n`;\n });\n\n // Recursively process children\n for (const [childSelector, childStyle] of Object.entries(children)) {\n innerCss += processStyles(`${selector} ${childSelector}`, childStyle, indentLevel + 1);\n }\n\n return innerCss;\n }\n\n // Function to process animations\n function processAnimations(animations, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let animationCss = '';\n\n for (const [animationName, animation] of Object.entries(animations)) {\n animationCss += `${indent}@keyframes ${animationName} ${openBrace}\\n`;\n\n for (const [keyframe, styles] of Object.entries(animation.keyframes)) {\n animationCss += `${indent} ${keyframe} ${openBrace}\\n`;\n for (let [property, value] of Object.entries(styles)) {\n if (containCssVar(value)) {\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `var(--${varName})`;\n });\n }\n animationCss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n animationCss += `${indent} ${closeBrace}\\n`;\n }\n\n animationCss += `${indent}${closeBrace}\\n`;\n }\n\n return animationCss;\n }\n\n // Function to process breakpoints\n function processBreakpoints(breakpoints, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let breakpointCss = '';\n\n for (const [breakpoint, styles] of Object.entries(breakpoints)) {\n breakpointCss += `${indent}@media (min-width: ${breakpoint}) ${openBrace}\\n`;\n for (const [selector, style] of Object.entries(styles)) {\n breakpointCss += processStyles(selector, style, indentLevel + 1);\n }\n breakpointCss += `${indent}${closeBrace}\\n`;\n }\n\n return breakpointCss;\n }\n\n // Define :root variables\n if (styles.rootVariables && Object.keys(styles.rootVariables).length) {\n css += \":root {\\n\";\n for (const [variable, value] of Object.entries(styles.rootVariables)) {\n css += ` ${variable}: ${value}${semicolon}\\n`;\n }\n css += \"}\\n\\n\";\n }\n\n // Define styles for each class\n for (const [classId, style] of Object.entries(styles.styles)) {\n if (!style || (!Object.keys(style.variables || {}).length &&\n !Object.keys(style.base || {}).length &&\n !Object.keys(style.pseudos || {}).length &&\n !Object.keys(style.children || {}).length)) {\n continue; // Skip empty styles\n }\n\n const selector = classId;\n css += processStyles(selector, style);\n }\n\n // Process animations\n if (Object.keys(styles.animations || {}).length) {\n css += processAnimations(styles.animations);\n }\n\n // Process breakpoints (media queries)\n if (Object.keys(styles.breakpoints || {}).length) {\n css += processBreakpoints(styles.breakpoints);\n }\n\n return css;\n}\nwindow.json2preprocessor = styles => {\n let css = '';\n let symbol = \"\";\n let semicolon = \";\";\n let openBrace = \"{\";\n let closeBrace = \"}\";\n\n // set proper symbols\n if (data.preprocessors.includes(project.convertTo)) {\n if (project.convertTo === \"sass\" || project.convertTo === \"scss\") symbol = \"$\";\n if (project.convertTo === \"sass\") {\n semicolon = \"\";\n openBrace = \"\";\n closeBrace = \"\";\n }\n if (project.convertTo === \"less\") symbol = \"@\";\n }\n\n // Function to check if a value contains CSS variables\n function containcssVar(value) {\n return /var\\(--/.test(value);\n }\n\n // Function to process styles recursively\n function processStyles(selector, style, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let innercss = '';\n\n const variables = style.variables || {};\n const baseStyles = style.base || {};\n const pseudos = style.pseudos || [];\n const children = style.children || {}; // Account for children\n\n innercss += `${indent}${selector} ${openBrace}\\n`;\n\n // Variables (convert CSS variables to css variables)\n for (const [variable, value] of Object.entries(variables)) {\n innercss += `${indent} ${symbol}${variable}: ${value}${semicolon}\\n`;\n }\n\n // Base styles\n for (let [property, value] of Object.entries(baseStyles)) {\n if (property.startsWith('--')) {\n property = property.split('--').join(symbol);\n }\n\n // Check if value contains a CSS variable\n if (containcssVar(value)) {\n // Replace CSS variables with css variables, handling mixed content\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n if (!property.startsWith('--')) {\n return `${symbol}${varName}`;\n } else {\n return `${symbol}${varName}`;\n }\n });\n }\n innercss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n\n // Pseudo-classes/styles\n pseudos.forEach(({ selector: pseudoSelector, styles: pseudoStyles }) => {\n innercss += `${indent} &${pseudoSelector} ${openBrace}\\n`;\n for (let [property, value] of Object.entries(pseudoStyles)) {\n // Check if value contains a CSS variable\n if (containcssVar(value)) {\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `${symbol}${varName}`;\n });\n }\n innercss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n innercss += `${indent} ${closeBrace}\\n`;\n });\n\n // Recursively process children\n if (children) {\n for (const [childSelector, childStyle] of Object.entries(children)) {\n innercss += processStyles(`${selector} ${childSelector}`, childStyle, indentLevel + 1);\n }\n }\n\n innercss += `${indent}${closeBrace}\\n`;\n\n return innercss;\n }\n\n // Function to process animations\n function processAnimations(animations, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let animationCSS = '';\n\n for (const [animationName, animation] of Object.entries(animations)) {\n animationCSS += `${indent}@keyframes ${animationName} ${openBrace}\\n`;\n\n for (const [keyframe, styles] of Object.entries(animation.keyframes)) {\n animationCSS += `${indent} ${keyframe} ${openBrace}\\n`;\n for (let [property, value] of Object.entries(styles)) {\n // Replace CSS variables with preprocessor variables if needed\n if (containcssVar(value)) {\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `${symbol}${varName}`;\n });\n }\n animationCSS += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n animationCSS += `${indent} ${closeBrace}\\n`;\n }\n\n animationCSS += `${indent}${closeBrace}\\n`;\n }\n\n return animationCSS;\n }\n\n // Function to process breakpoints\n function processBreakpoints(breakpoints, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let breakpointCSS = '';\n\n for (const [breakpoint, styles] of Object.entries(breakpoints)) {\n breakpointCSS += `${indent}@media (max-width: ${breakpoint}) ${openBrace}\\n`;\n for (const [selector, style] of Object.entries(styles.base || {})) {\n breakpointCSS += processStyles(selector, style, indentLevel + 1);\n }\n breakpointCSS += `${indent}${closeBrace}\\n`;\n }\n\n return breakpointCSS;\n }\n\n // Define :root variables (css supports variables using $)\n let rootVariables = [];\n if (styles.rootVariables && Object.keys(styles.rootVariables).length) {\n for (const [variable, value] of Object.entries(styles.rootVariables)) {\n rootVariables.push(variable);\n css += `${symbol}${variable.split('--').join('')}: ${value}${semicolon}\\n`;\n }\n css += '\\n';\n }\n\n // Define styles for each class\n for (const [classId, style] of Object.entries(styles.styles)) {\n if (!style || (!Object.keys(style.variables || {}).length &&\n !Object.keys(style.base || {}).length &&\n !Object.keys(style.pseudos || {}).length &&\n !Object.keys(style.children || {}).length)) {\n continue; // Skip empty styles\n }\n\n const selector = classId;\n css += processStyles(selector, style);\n }\n\n // Process animations\n if (Object.keys(styles.animations || {}).length) {\n css += processAnimations(styles.animations);\n }\n\n // Process breakpoints (media queries)\n if (Object.keys(styles.breakpoints || {}).length) {\n css += processBreakpoints(styles.breakpoints);\n }\n\n return css;\n}\nwindow.mergeCSSJSON = (existingJSON, newJSON) => {\n if (typeof existingJSON === 'string') {\n throw new Error(\"Input's must be JSON\");\n }\n\n // Merge root variables\n Object.assign(existingJSON.rootVariables, newJSON.rootVariables);\n\n // Merge styles\n Object.keys(newJSON.styles).forEach(selector => {\n if (!existingJSON.styles[selector]) {\n existingJSON.styles[selector] = newJSON.styles[selector];\n } else {\n if (newJSON.styles[selector].base) {\n existingJSON.styles[selector].base = {\n ...existingJSON.styles[selector].base,\n ...newJSON.styles[selector].base\n };\n }\n if (newJSON.styles[selector].pseudos) {\n existingJSON.styles[selector].pseudos = [\n ...(existingJSON.styles[selector].pseudos || []),\n ...newJSON.styles[selector].pseudos\n ];\n }\n }\n });\n\n // Merge animations\n Object.keys(newJSON.animations).forEach(animationName => {\n if (!existingJSON.animations[animationName]) {\n existingJSON.animations[animationName] = newJSON.animations[animationName];\n } else {\n existingJSON.animations[animationName].keyframes = {\n ...existingJSON.animations[animationName].keyframes,\n ...newJSON.animations[animationName].keyframes\n };\n existingJSON.animations[animationName].properties = {\n ...existingJSON.animations[animationName].properties,\n ...newJSON.animations[animationName].properties\n };\n }\n });\n\n // Merge breakpoints\n Object.keys(newJSON.breakpoints).forEach(breakpoint => {\n if (!existingJSON.breakpoints[breakpoint]) {\n existingJSON.breakpoints[breakpoint] = newJSON.breakpoints[breakpoint];\n } else {\n Object.keys(newJSON.breakpoints[breakpoint]).forEach(selector => {\n if (!existingJSON.breakpoints[breakpoint][selector]) {\n existingJSON.breakpoints[breakpoint][selector] = newJSON.breakpoints[breakpoint][selector];\n } else {\n existingJSON.breakpoints[breakpoint][selector].base = {\n ...existingJSON.breakpoints[breakpoint][selector].base,\n ...newJSON.breakpoints[breakpoint][selector].base\n };\n }\n });\n }\n });\n\n return existingJSON;\n}\nwindow.fetchCssFile = async url => {\n const response = await fetch(url);\n return response.text();\n}\nwindow.generateCssQuickCommands = async url => {\n const css = await fetchCssFile(url);\n\n // Create a new CSSStyleSheet object\n const stylesheet = new CSSStyleSheet();\n await stylesheet.replace(css); // Replace with the CSS content\n\n const cssQuickCommands = {};\n\n // Iterate over all rules in the stylesheet\n for (const rule of stylesheet.cssRules) {\n // Skip pseudo-classes and animations\n if (rule.type === CSSRule.STYLE_RULE &&\n !rule.selectorText.includes(':') &&\n !rule.selectorText.includes('@keyframes')) {\n\n const className = rule.selectorText.replace('.', '');\n if (className) {\n const declarations = Array.from(rule.style)\n .filter(prop => !prop.startsWith('animation') && !prop.startsWith('transition'))\n .map(prop => `${prop}: ${rule.style[prop]};`)\n .join(' ');\n cssQuickCommands[className] = declarations;\n }\n }\n }\n\n return cssQuickCommands;\n}\nwindow.saveState = () => {\n // Save the current state to history\n const currentState = {\n rootVariables: project.css.rootVariables,\n styles: project.css,\n html: project.html,\n selectedLayerIds: data.selectedLayerIds\n };\n\n // Store the state as a stringified object\n const stateString = JSON.stringify(currentState);\n\n // Check if the last saved state is different from the current state\n if (data.history.length === 0 || data.history[data.historyIndex] !== stateString) {\n data.history = data.history.slice(0, data.historyIndex + 1); // Trim any redo history\n data.history.push(stateString); // Save the new state\n data.historyIndex++;\n localStorage.setItem('Polyrise', JSON.stringify(project));\n }\n}\nwindow.undo = () => {\n if (data.historyIndex > 0) {\n data.editorNavState = true;\n data.historyIndex--;\n const previousState = JSON.parse(data.history[data.historyIndex]);\n // Restore the previous state\n project.css.rootVariables = previousState.rootVariables;\n project.css = previousState.styles;\n project.html = previousState.html;\n data.selectedLayerIds = previousState.selectedLayerIds;\n data.editorNavState = null;\n }\n}\nwindow.redo = () => {\n if (data.historyIndex < data.history.length - 1) {\n data.editorNavState = true;\n data.historyIndex++;\n const nextState = JSON.parse(data.history[data.historyIndex]);\n // Restore the next state\n project.css.rootVariables = nextState.rootVariables;\n project.css = previousState.styles;\n project.html = nextState.html;\n data.selectedLayerIds = nextState.selectedLayerIds;\n data.editorNavState = null;\n }\n}\nwindow.customCode = () => {\n Modal.render({\n title: \"Paste Custom Code\",\n content: `\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n `,\n onLoad() {\n document.getElementById('op95hyy3l').focus();\n document.getElementById('op95hyy3l').select();\n },\n onConfirm() {\n const selection = document.getElementById('bvk1c6j4o').value;\n let code = document.getElementById('op95hyy3l').value;\n if (selection === 'html') {\n addBlock(code);\n } else {\n code = minifyCSS(code);\n const newJSON = css2json(code);\n mergeCSSJSON(project.css, newJSON);\n document.querySelector('dialog[open]').querySelector('header > button').onclick();\n }\n }\n });\n}\nwindow.addLibrary = url => {\n if (!url) {\n project.libraries.push('');\n document.getElementById('librariesBox').innerHTML = renderLibraries();\n return false;\n }\n\n if (!project.libraries.includes(url)) {\n project.libraries.push(url);\n } else {\n console.error(`Library already exists: ${url}`);\n }\n\n if (document.getElementById('librariesBox')) {\n document.getElementById('librariesBox').innerHTML = renderLibraries();\n }\n};\nwindow.renderLibraries = () => {\n return project.libraries.map((library, index) => `\n \n `).join('')\n}\nwindow.fetchSuggestions = key => {\n fetch(\n `https://api.cdnjs.com/libraries?search=${key}&fields=filename,description,version`\n )\n .then(response => {\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n return response.json();\n })\n .then(item => {\n if (item && item.results && item.results.length > 0) {\n const suggestions = item.results.map(result => result);\n\n document.getElementById('pruz9lb2p').innerHTML = suggestions.map(result => {\n return `\n
    button').onclick();\n \">\n
    \n ${result.name}\n ${result.version}\n
    \n
    ${result.description}

    \n
    `;\n }).join('');\n }\n })\n .catch(error => {\n console.error(\"Error fetching data:\", error);\n });\n}\nwindow.removeScript = src => {\n const script = document.querySelector(`script[src=\"${src}\"]`);\n if (script) script.remove();\n}\nwindow.removeScripts = scripts => {\n scripts.forEach(src => {\n const script = document.querySelector(`script[src=\"${src}\"]`);\n if (script) script.remove();\n });\n}\nwindow.loadScript = async scriptUrl => {\n return new Promise((resolve, reject) => {\n // Check if the script is already loaded\n const existingScript = document.querySelector(`script[src=\"${scriptUrl}\"]`);\n if (existingScript) {\n resolve(); // If the script is already present, resolve immediately\n return;\n }\n\n // Create a new script element if not present\n const scriptElement = document.createElement('script');\n scriptElement.src = scriptUrl;\n scriptElement.onload = resolve; // Resolve when the script is successfully loaded\n scriptElement.onerror = () => reject(new Error(`Failed to load script: ${scriptUrl}`)); // Reject on error\n document.body.appendChild(scriptElement); // Append the script to the body\n });\n}\nwindow.loadScripts = async srcArray => {\n return Promise.all(srcArray.map(loadScript));\n}\n\n// layers functions\nwindow.executeQuery = (queriesString, replaceSelection = true) => {\n if (!queriesString) {\n clearAllSelections();\n return;\n }\n\n const queries = queriesString.split(',').map(q => q.trim());\n\n function handleSpecialCommand(command) {\n switch (command) {\n case 'f':\n foldAllLayers(true); // Collapse all layers\n break;\n case 'u':\n foldAllLayers(false); // Uncollapse all layers\n break;\n case 'h':\n hideAllLayers(true); // Hide all layers\n break;\n case 's':\n hideAllLayers(false); // Show all layers\n break;\n case 'e':\n emptyChildren(); // Empty all children from selections\n break;\n case 'cas':\n project.css = {\n \"rootVariables\": {},\n \"styles\": {},\n \"animations\": {},\n \"breakpoints\": {}\n };\n break;\n default:\n console.warn('Unknown command:', command);\n }\n }\n\n function matchesPseudoClass(layer, pseudoClass, index, total) {\n switch (pseudoClass) {\n case 'first-child': return index === 0;\n case 'last-child': return index === total - 1;\n case 'nth-child': return (index + 1) === parseInt(pseudoClass.split('(')[1], 10);\n case 'nth-last-child': return (total - index) === parseInt(pseudoClass.split('(')[1], 10);\n case 'only-child': return total === 1;\n case 'empty': return !(layer.children && layer.children.length > 0);\n case 'first-of-type': return layer.tagOccurrences.index === 0;\n case 'last-of-type': return layer.tagOccurrences.reverseIndex === 0;\n case 'nth-of-type': return layer.tagOccurrences.index === parseInt(pseudoClass.split('(')[1], 10) - 1;\n case 'nth-last-of-type': return layer.tagOccurrences.reverseIndex === parseInt(pseudoClass.split('(')[1], 10) - 1;\n case 'only-of-type': return layer.tagOccurrences.total === 1;\n default: return false;\n }\n }\n\n function selectLayersRecursive(layers, query, callback) {\n let activeCalls = 0; // Track active recursive calls\n \n function processLayers(layers) {\n activeCalls++; // Increment the active call count\n \n layers.forEach((layer, index) => {\n let match = false;\n \n // Extract selector and pseudo-class\n const [selector, pseudoClassPart] = query.split(':');\n const pseudoClass = pseudoClassPart || null;\n \n // Parse selector\n let [tag, classNames, attribute, value] = [null, [], null, null];\n const attributeMatch = /\\[([^\\]]+)\\]/.exec(selector);\n if (attributeMatch) {\n [attribute, value] = attributeMatch[1].split('=');\n }\n const classMatches = /\\.([^.\\[]+)/g;\n let matchResult;\n while ((matchResult = classMatches.exec(selector)) !== null) {\n classNames.push(matchResult[1]);\n }\n tag = selector.split(/[\\.\\[]/)[0];\n \n // Check tag match\n if (tag && layer.tag !== tag) match = false;\n else match = true;\n \n // Check class match\n if (classNames.length > 0) {\n if (!layer.props || !layer.props.class) match = false;\n else {\n const layerClasses = layer.props.class.split(' ');\n match = classNames.every(className => layerClasses.includes(className));\n }\n }\n \n // Check attribute match\n if (attribute) {\n if (value) {\n // Ensure attribute is matched specifically, not just any property\n if (layer.props && layer.props[attribute] !== value) match = false;\n } else {\n // Ensure attribute is matched specifically, not just any property\n if (!layer.props || !layer.props.hasOwnProperty(attribute)) match = false;\n }\n }\n \n // Check pseudo-class match\n if (match && pseudoClass) {\n const total = layers.length;\n if (!matchesPseudoClass(layer, pseudoClass, index, total)) match = false;\n }\n \n // Apply selection\n if (match) {\n layer.state.selected = true;\n if (!data.selectedLayerIds.includes(layer.id)) {\n data.selectedLayerIds.push(layer.id);\n }\n }\n \n // Recursively apply to children\n if (layer.children && layer.children.length > 0) {\n processLayers(layer.children);\n }\n });\n \n activeCalls--; // Decrement the active call count\n \n // If this was the last active call, invoke the callback\n if (activeCalls === 0 && callback && typeof callback === 'function') {\n callback();\n }\n }\n \n // Start processing layers\n processLayers(layers);\n }\n\n function targetChildrenOfSelections(query, callback) {\n if (data.selectedLayerIds.length > 0) {\n // Find the layers by IDs and target their children\n const selectedLayers = data.selectedLayerIds.map(id => findLayerById(id, project.html));\n if (selectedLayers.length > 0) {\n // Collect children of selected layers\n const children = selectedLayers.flatMap(group => group.layer.children || []);\n // Select layers from children\n selectLayersRecursive(children, query);\n }\n\n // Invoke the callback if provided\n if (typeof callback === 'function') {\n callback();\n }\n }\n }\n\n function processQuery(query) {\n // Find the index of the '=' symbol\n const equalsIndex = query.indexOf('=');\n \n // If '=' is found, convert the portion before it to lowercase\n if (equalsIndex !== -1) {\n const prefix = query.slice(0, equalsIndex).toLowerCase();\n query = prefix + query.slice(equalsIndex);\n }\n \n if (query.startsWith('t=')) {\n if (replaceSelection) clearAllSelections();\n selectLayersRecursive(project.html, query.slice(2));\n } else if (query.startsWith('r=')) {\n clearAllSelections();\n selectLayersRecursive(project.html, query.slice(2), () => {\n deleteLayers();\n });\n } else if (query.startsWith('e=')) {\n clearAllSelections();\n selectLayersRecursive(project.html, query.slice(2), () => {\n emptyChildren();\n });\n } else if (query.startsWith('c=')) {\n if (data.selectedLayerIds.length > 0) {\n if (data.replaceCurrentSelection) {\n let currentIDs = [...data.selectedLayerIds];\n targetChildrenOfSelections(query.slice(2), () => {\n currentIDs.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n layer.state.selected = false;\n });\n });\n } else {\n targetChildrenOfSelections(query.slice(2));\n }\n } else {\n console.error('no layers selected');\n }\n } else if (query.startsWith('mv=')) {\n if (data.selectedLayerIds.length > 0) {\n if (replaceSelection) clearAllSelections();\n cutLayers(() => {\n selectLayersRecursive(project.html, query.slice(3), () => {\n pasteLayers();\n });\n });\n }\n } else if (query.startsWith('rs=')) {\n if (data.selectedLayerIds.length > 0) {\n if (replaceSelection) clearAllSelections();\n clearStyles(project.html, query.slice(3), () => {\n saveState(); // Callback after clearStyles completes\n });\n }\n } else {\n handleSpecialCommand(query);\n }\n }\n\n queries.forEach(processQuery);\n}\nwindow.toggleCollapse = layerId => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n let targetLayer = null;\n let parentLayer = null;\n\n // Function to recursively find the target layer and its parent\n function findLayerAndParent(layer, parent = null) {\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = parent;\n return true; // Found the layer\n }\n\n if (layer.children) {\n for (let i = 0; i < layer.children.length; i++) {\n if (findLayerAndParent(layer.children[i], layer)) {\n return true; // Found the layer in children\n }\n }\n }\n\n return false; // Layer not found\n }\n\n // Function to collapse or uncollapse all siblings to match the target layer's state\n function applyCollapseStateToSiblings(layers, collapseState) {\n layers.forEach(layer => {\n if (layer !== targetLayer) {\n layer.state.collapsed = collapseState;\n }\n });\n }\n\n // Check top-level layers directly\n for (let i = 0; i < project.html.length; i++) {\n let layer = project.html[i];\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = null; // No parent for top-level layers\n break;\n } else {\n findLayerAndParent(layer);\n }\n }\n\n if (targetLayer) {\n // Toggle the target layer's collapse state\n const newCollapseState = !targetLayer.state.collapsed;\n targetLayer.state.collapsed = newCollapseState;\n\n if (data.shiftKey) {\n if (parentLayer) {\n // Apply to siblings within the same parent layer\n applyCollapseStateToSiblings(parentLayer.children, newCollapseState);\n } else {\n // Apply to all top-level layers\n applyCollapseStateToSiblings(project.html, newCollapseState);\n }\n }\n\n // Render the application (if needed)\n App.render(\"#app\");\n }\n}\nwindow.foldAllLayers = (state = false) => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n function collapseLayer(layer) {\n layer.state.collapsed = state;\n if (layer.children) layer.children.forEach(child => collapseLayer(child));\n }\n\n project.html.forEach(layer => collapseLayer(layer));\n}\nwindow.hideAllLayers = (state = false) => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n function hideLayer(layer) {\n layer.state.visible = !state;\n if (layer.children) layer.children.forEach(child => hideLayer(child));\n }\n\n project.html.forEach(layer => hideLayer(layer));\n}\nwindow.toggleVisible = layerId => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n let targetLayer = null;\n let parentLayer = null;\n\n // Function to recursively find the target layer and its parent\n function findLayerAndParent(layer, parent = null) {\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = parent;\n return true; // Found the layer\n }\n\n if (layer.children) {\n for (let i = 0; i < layer.children.length; i++) {\n if (findLayerAndParent(layer.children[i], layer)) {\n return true; // Found the layer in children\n }\n }\n }\n\n return false; // Layer not found\n }\n\n // Function to set visibility for all siblings to match the target layer's state\n function applyVisibilityToSiblings(layers, visibilityState) {\n layers.forEach(layer => {\n if (layer !== targetLayer) {\n layer.state.visible = visibilityState;\n }\n });\n }\n\n // Check top-level layers directly\n for (let i = 0; i < project.html.length; i++) {\n let layer = project.html[i];\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = null; // No parent for top-level layers\n break;\n } else {\n findLayerAndParent(layer);\n }\n }\n\n if (targetLayer) {\n // Toggle the target layer's visibility state\n const newVisibilityState = !targetLayer.state.visible;\n targetLayer.state.visible = newVisibilityState;\n\n // Apply the new visibility state to all siblings\n if (data.shiftKey) {\n if (parentLayer) {\n // Apply to siblings within the same parent layer\n applyVisibilityToSiblings(parentLayer.children, newVisibilityState);\n } else {\n // Apply to all top-level layers\n applyVisibilityToSiblings(project.html, newVisibilityState);\n }\n }\n }\n}\nwindow.selectedBlock = layerId => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n let targetLayer = null;\n let parentLayer = null;\n\n // Function to find the layer and its parent\n function findLayerAndParent(layer, parent = null) {\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = parent;\n return true; // Found the layer\n }\n\n if (layer.children) {\n for (let i = 0; i < layer.children.length; i++) {\n if (findLayerAndParent(layer.children[i], layer)) {\n return true; // Found the layer in children\n }\n }\n }\n\n return false; // Layer not found\n }\n\n // Apply selection state to all siblings\n function applySelectionToSiblings(layers, selectionState) {\n layers.forEach(layer => {\n if (layer !== targetLayer) {\n const childIndex = data.selectedLayerIds.indexOf(layer.id);\n if (selectionState) {\n if (childIndex === -1) {\n data.selectedLayerIds.push(layer.id);\n layer.state.selected = true;\n }\n } else {\n if (childIndex > -1) {\n data.selectedLayerIds.splice(childIndex, 1);\n layer.state.selected = false;\n }\n }\n }\n });\n }\n\n // Check top-level layers directly\n for (let i = 0; i < project.html.length; i++) {\n let layer = project.html[i];\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = null; // No parent for top-level layers\n break;\n } else {\n findLayerAndParent(layer);\n }\n }\n\n if (targetLayer) {\n const isSelected = data.selectedLayerIds.includes(layerId);\n const newSelectionState = !isSelected;\n\n // If replaceCurrentSelection is true and shiftKey is not pressed, clear all selections\n if (data.cmdKey && !data.shiftKey) {\n data.selectedLayerIds.forEach(id => {\n const layer = findLayerById(id);\n if (layer) {\n layer.state.selected = false;\n }\n });\n data.selectedLayerIds = []; // Clear all selections\n }\n\n // Toggle selection state of the target layer\n if (newSelectionState) {\n data.selectedLayerIds.push(layerId);\n const lastSelectedLayerId = data.selectedLayerIds[data.selectedLayerIds.length - 1];\n const layer = findLayerById(lastSelectedLayerId);\n data.stylesTarget = layer.style;\n data.breakpointKey = null;\n } else {\n const index = data.selectedLayerIds.indexOf(layerId);\n if (index > -1) {\n data.selectedLayerIds.splice(index, 1);\n }\n }\n targetLayer.state.selected = newSelectionState;\n\n // Apply selection state to siblings\n if (data.shiftKey) {\n if (parentLayer) {\n // Apply to siblings within the same parent layer\n applySelectionToSiblings(parentLayer.children, newSelectionState);\n } else {\n // Apply to all top-level layers\n applySelectionToSiblings(project.html, newSelectionState);\n }\n }\n }\n\n function findLayerById(id) {\n let foundLayer = null;\n for (let i = 0; i < project.html.length; i++) {\n function searchLayer(layer) {\n if (layer.id === id) {\n foundLayer = layer;\n return true;\n }\n if (layer.children) {\n for (let j = 0; j < layer.children.length; j++) {\n if (searchLayer(layer.children[j])) {\n return true;\n }\n }\n }\n return false;\n }\n searchLayer(project.html[i]);\n if (foundLayer) break;\n }\n return foundLayer;\n }\n}\nwindow.collectSelectedIDs = layers => {\n layers.forEach(layer => {\n if (layer.state.selected) {\n data.selectedLayerIds.push(layer.id);\n }\n if (layer.children && layer.children.length > 0) {\n collectSelectedIDs(layer.children);\n }\n });\n}\nwindow.clearAllSelections = () => {\n data.selectedLayerIds = [];\n data.stylesTarget = null;\n clearSelection(project.html);\n}\nwindow.clearSelection = layers => {\n layers.forEach(layer => {\n layer.state.selected = false;\n if (layer.children) clearSelection(layer.children);\n });\n}\nwindow.clearSelectionExcept = (excludeId, layers) => {\n layers.forEach(layer => {\n if (layer.id !== excludeId) {\n layer.state.selected = false;\n } else {\n layer.state.selected = true;\n }\n if (layer.children) clearSelectionExcept(excludeId, layer.children);\n });\n}\nwindow.findLayerById = (id, layers, parent = null) => {\n for (const layer of layers) {\n if (layer.id === id) return { layer, parent };\n if (layer.children) {\n const found = findLayerById(id, layer.children, layer);\n if (found) return found;\n }\n }\n return null;\n}\nwindow.canAcceptChildren = layer => {\n const elementsThatDontAcceptChildren = [\n 'audio',\n 'datalist',\n 'iframe',\n 'img',\n 'input',\n 'meter',\n 'option',\n 'progress',\n 'select',\n 'textarea',\n 'video'\n ]; \n \n return !elementsThatDontAcceptChildren.includes(layer.tag);\n}\nwindow.addBlock = html => {\n saveState(); // Save state before making changes\n\n // Function to assign an ID to each new block\n const assignIds = (blocks, callback) => {\n blocks.forEach(block => {\n block.id = generateId(); // Assign a new ID\n if (block.children) {\n assignIds(block.children); // Recursively assign IDs to children if they exist\n }\n });\n\n if (callback && typeof callback === 'function') {\n callback(); // Call the callback function after all IDs have been assigned\n }\n };\n\n // Process the input HTML or object\n const newBlocks = html2json(html);\n\n if (data.selectedLayerIds.length > 0) {\n data.selectedLayerIds.forEach(id => {\n const result = findLayerById(id, project.html);\n if (result) {\n const { layer, parent } = result;\n\n // Set the selected state to false and remove the ID from selectedLayerIds\n layer.selected = false;\n data.selectedLayerIds = data.selectedLayerIds.filter(layerId => layerId !== id);\n\n if (canAcceptChildren(layer)) {\n if (data.blockWrap) {\n // Ensure the new block can hold children\n const parentBlock = newBlocks[0];\n if (canAcceptChildren(parentBlock)) {\n // Ensure `parentBlock.children` is initialized\n parentBlock.children = parentBlock.children || [];\n parentBlock.children.push(layer); // Make the selected layer a child of the new block\n\n // Assign IDs to the new parent block and its children\n assignIds(newBlocks, () => {\n // Push the new parent block to the original parent's children\n if (parent && parent.children) {\n parent.children = parent.children.map(child =>\n child.id === layer.id ? parentBlock : child\n );\n } else {\n project.html = project.html.map(child =>\n child.id === layer.id ? parentBlock : child\n );\n }\n });\n }\n } else {\n // Ensure `layer.children` is initialized\n layer.children = layer.children || [];\n\n // Assign IDs and then push new blocks\n assignIds(newBlocks, () => {\n newBlocks.forEach(newBlock => {\n layer.children.push(newBlock); // Push new block after ID assignment\n });\n });\n }\n }\n }\n });\n } else {\n // If user has no layers selected, add to the root layer structure\n assignIds(newBlocks, () => {\n newBlocks.forEach(newBlock => project.html.push(newBlock)); // Push new block after ID assignment\n });\n }\n\n clearAllSelections();\n saveState(); // Save state after making changes\n document.querySelector('dialog[open]').querySelector('header > button').onclick();\n};\n\nwindow.selectLayersByStyleRef = (style, layers) => {\n for (const layer of layers) {\n // Deselect all layers\n layer.state.selected = false;\n\n // Check if the current layer matches the style reference\n if (layer.style === style) {\n data.selectedLayerIds.push(layer.id);\n layer.state.selected = true;\n // Continue searching in children even if the parent is selected\n }\n\n // Recursively check children if they exist\n if (layer.children && layer.children.length > 0) {\n selectLayersByStyleRef(style, layer.children);\n }\n }\n};\nwindow.deleteLayers = () => {\n saveState(); // Save state before making changes\n data.editorNavState = true;\n data.selectedLayerIds.forEach(id => {\n removeLayerById(id, project.html);\n });\n data.selectedLayerIds = []; // Clear selection after deletion\n data.editorNavState = null;\n saveState(); // Save state after making changes\n}\nwindow.removeLayerById = (id, layers) => {\n for (const layer of layers) {\n if (layer.id === id) {\n const index = layers.findIndex(l => l.id === id);\n layers.splice(index, 1); // Remove layer from the main layers array\n return;\n }\n\n if (layer.children) {\n const index = layer.children.findIndex(child => child.id === id);\n if (index !== -1) {\n layer.children.splice(index, 1); // Remove from children\n return;\n } else {\n removeLayerById(id, layer.children); // Recursively remove from nested layers\n }\n }\n }\n}\nwindow.cloneLayers = () => {\n let modalContent = `
    \n button:last-child').onclick();\n }\n \"\n />\n
    `;\n\n Modal.render({\n title: `How many times do you want to clone this block?`,\n content: modalContent,\n onLoad() {\n document.getElementById('b40h7qc6d').focus();\n document.getElementById('b40h7qc6d').select();\n },\n onConfirm() {\n saveState(); // Save state before making changes\n\n const cloneCount = parseInt(data.increment, 10);\n \n if (isNaN(cloneCount) || cloneCount <= 0) {\n console.error('Invalid clone count:', cloneCount);\n return;\n }\n\n data.selectedLayerIds.forEach(id => {\n const { layer, parent } = findLayerById(id, project.html);\n \n if (layer) {\n for (let i = 0; i < cloneCount; i++) {\n const clonedLayer = cloneLayerObject(layer);\n \n if (parent && Array.isArray(parent.children)) {\n const index = parent.children.findIndex(child => child.id === layer.id);\n if (index !== -1) {\n parent.children.splice(index + 1, 0, clonedLayer);\n } else {\n console.error(\"Selected layer not found in parent's children:\", layer);\n }\n } else if (!parent) {\n const index = project.html.findIndex(rootLayer => rootLayer.id === layer.id);\n if (index !== -1) {\n project.html.splice(index + 1, 0, clonedLayer);\n } else {\n console.error('Selected layer not found in root layer structure:', layer);\n }\n }\n }\n } else {\n console.error('Layer not found for ID:', id);\n }\n });\n \n clearAllSelections(); // Clear selection after cloning\n saveState(); // Save state after making changes\n }\n });\n}\n\nwindow.cloneLayerObject = layer => {\n const clonedLayer = JSON.parse(JSON.stringify(layer)); // Deep clone\n clonedLayer.id = generateId(); // Assign a new ID\n\n if (clonedLayer.children) {\n clonedLayer.children = clonedLayer.children.map(child => cloneLayerObject(child)); // Clone children recursively\n }\n return clonedLayer;\n}\nwindow.cutLayers = callback => {\n saveState(); // Save state before making changes\n data.editorNavState = true;\n copyLayers();\n data.selectedLayerIds.forEach(id => {\n removeLayerById(id, project.html);\n });\n data.selectedLayerIds = []; // Clear selection after deletion\n saveState(); // Save state after making changes\n data.editorNavState = null;\n\n // Call the callback function if provided\n if (callback && typeof callback === 'function') {\n callback();\n }\n}\nwindow.copyLayers = () => {\n data.clipboard = data.selectedLayerIds.map(id => {\n const { layer } = findLayerById(id, project.html);\n return cloneLayerObject(layer); // Clone layer without deleting\n });\n}\nwindow.pasteLayers = () => {\n saveState(); // Save state before making changes\n if (data.clipboard.length > 0) {\n const pastedLayers = data.clipboard.map(layer => {\n return cloneLayerObject(layer); // Clone layer with new IDs\n });\n\n if (data.selectedLayerIds.length > 0) {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer && canAcceptChildren(layer)) {\n layer.children = layer.children || [];\n layer.children.push(...pastedLayers);\n }\n });\n } else {\n project.html.push(...pastedLayers); // Paste to root if no layer selected\n }\n\n data.clipboard = []; // Clear clipboard after pasting\n clearAllSelections(); // Clear selection after pasting\n saveState(); // Save state after making changes\n }\n}\nwindow.removeAttributeFromLayers = property => {\n saveState();\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n // Delete the key from the props object\n if (layer) delete layer.props[property];\n });\n saveState();\n}\nwindow.removeProp = key => {\n Modal.render({\n title: `Are you sure you want to delete the ${key} attribute?`,\n content: `\n
    You will still be able to undo.
    \n `,\n onConfirm() {\n removeAttributeFromLayers(key);\n }\n });\n}\nwindow.emptyChildren = () => {\n saveState(); // Save state before making changes\n if (data.selectedLayerIds.length > 0) {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer.children) layer.children = [];\n if (layer.text) {\n layer.text = '';\n }\n });\n }\n saveState(); // Save state after making changes\n}\nwindow.updateElement = (key, propKey, value, initIncrement = false) => {\n const incrementPattern = /{n}/g; // Pattern to detect increment placeholder\n \n saveState();\n data.selectedLayerIds.forEach((id, index) => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n if (key !== 'props') {\n if (key === 'text') {\n if (!value) {\n layer.text = \"\";\n } else {\n if (initIncrement && incrementPattern.test(value)) {\n // If initIncrement is true, increment the {n} pattern\n layer.text = value.replace(incrementPattern, index + 1);\n } else {\n layer.text = value; // Otherwise, just use the given value\n }\n }\n } else {\n // General case for non-text keys\n layer[`${key}`] = value;\n }\n } else {\n // Handling props (e.g., attributes)\n if (initIncrement && incrementPattern.test(value)) {\n // If initIncrement is true, increment the {n} pattern in props\n layer.props[`${propKey}`] = value.replace(incrementPattern, index + 1);\n } else {\n layer.props[`${propKey}`] = value; // Otherwise, just use the given value\n }\n }\n }\n });\n saveState();\n};\nwindow.updateImageMedia = (id, type) => {\n let target = findLayerById(id, project.html).layer.props['src'];\n let modalContent = `
    \n \n
    \n \n \n \n
    \n Api courtesy of \n Openverse.\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n You can grab your own high-res image by searching Pixabay.com or Pexels.com.\n
    \n
    `;\n \n Modal.render({\n title: \"Are you sure you want to replace the image source?\",\n content: modalContent,\n onLoad() {\n const searchField = document.getElementById('search-input');\n searchField.focus();\n \n const handleSearch = async () => {\n if (searchField.value) {\n const results = await searchOpenverseImage(searchField.value);\n displayResults(results);\n } else {\n document.getElementById('search-results').innerHTML = '';\n return false;\n }\n };\n \n searchField.oninput = handleSearch;\n document.getElementById('search-btn').onclick = handleSearch;\n\n function displayResults(results) {\n const resultsContainer = document.getElementById('search-results');\n resultsContainer.innerHTML = results.map(result => `\n \"${result.title}\"\n `).join('');\n }\n },\n onConfirm() {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n if (layer.tag === \"img\") {\n saveState();\n layer.props[`src`] = document.getElementById('p8gnvn4o7').src;\n saveState();\n }\n }\n });\n }\n });\n}\nwindow.searchOpenverseImage = async query => {\n const url = `https://api.openverse.org/v1/images?q=${encodeURIComponent(query)}`;\n const response = await fetch(url);\n if (response.ok) {\n const data = await response.json();\n return data.results;\n } else {\n console.error(\"API request failed:\", response.status);\n return [];\n }\n}\nwindow.updateAudioMedia = (id, type) => {\n let target = findLayerById(id, project.html).layer;\n if (target.tag !== 'audio' || type !== 'audio') return;\n let uniqueId = generateId();\n if (!target.props) target.props = {};\n if (target.props.id) target.props.id = uniqueId;\n if (!target.props.id) target.props['id'] = uniqueId;\n \n const audioHTML = json2html([target]);\n let modalContent = `\n \n
    \n \n
    \n \n
    \n Api courtesy of \n Openverse.\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n You can also grab your own audio files from freesound.org.\n
    \n
    `;\n \n Modal.render({\n title: \"Are you sure you want to replace the audio element?\",\n content: modalContent,\n onLoad() {\n const searchInput = document.getElementById('search-input');\n const searchBtn = document.getElementById('search-btn');\n const resultsContainer = document.getElementById('search-results');\n searchInput.focus();\n \n const handleSearch = async () => {\n if (searchInput.value) {\n const results = await searchOpenverseAudio(searchInput.value);\n displayResults(results);\n } else {\n resultsContainer.innerHTML = '';\n return false;\n }\n };\n \n searchInput.oninput = handleSearch;\n searchBtn.onclick = handleSearch;\n\n function displayResults(results) {\n if (results.length === 0) {\n resultsContainer.innerHTML = `

    No results found.

    `;\n } else {\n resultsContainer.innerHTML = results.map(result => `\n
    \n
    ${result.title}
    \n
    \n \n
    \n Artist is \n ${result.creator}.\n
    \n
    \n
    \n `).join('');\n \n // Reinitialize audio elements to ensure they work properly\n const audios = resultsContainer.querySelectorAll('audio');\n audios.forEach(audio => {\n const src = audio.querySelector('source').getAttribute('src');\n audio.load(); // Ensure the audio element is fully loaded\n audio.src = src; // Re-set the src to trigger playback readiness\n });\n }\n }\n },\n onConfirm() {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n source = document.getElementById(uniqueId).outerHTML;\n let obj = html2json(source)[0];\n \n saveState();\n // Update properties directly instead of reassigning the whole object\n Object.keys(obj).forEach(key => {\n if (key === \"id\") return;\n layer[key] = obj[key];\n });\n findLayerById(id, project.html).layer.state.selected = null;\n findLayerById(id, project.html).layer.state.selected = true;\n saveState();\n }\n });\n }\n });\n}\nwindow.searchOpenverseAudio = async query => {\n const url = `https://api.openverse.org/v1/audio?q=${encodeURIComponent(query)}`;\n const response = await fetch(url);\n if (response.ok) {\n const data = await response.json();\n return data.results;\n } else {\n console.error(\"API request failed:\", response.status);\n return [];\n }\n}\nwindow.updateMediaSource = async (event, type, element) => {\n const file = event.target.files[0];\n if (!file) return; // If no file selected, return\n\n try {\n // Check if the file is an SVG\n if (type === \"svg\") {\n // Read the file content as text (SVG markup)\n const svgCode = await file.text();\n \n // Update target with SVG code\n document.getElementById('vl61t8366').querySelector('svg').outerHTML = svgCode;\n document.getElementById('vl61t8366').querySelector('svg').setAttribute('id', 'p8gnvn4o7');\n } else {\n // Handle non-SVG and non-image files (e.g., convert to base64)\n const base64String = await fileToBase64(file);\n element.setAttribute('src', base64String);\n }\n } catch (error) {\n console.error('Error reading file:', error);\n }\n}\nwindow.checkApiConnection = async () => {\n try {\n const response = await fetch('https://api.iconify.design/collections');\n if (response.ok) {\n return true;\n }\n } catch (error) {\n console.error(\"API connection failed:\", error);\n }\n return false;\n}\nwindow.fetchIconifySvg = async icon => {\n const hosts = [\n `https://api.iconify.design/${icon}.svg`,\n `https://api.simplesvg.com/${icon}.svg`,\n `https://api.unisvg.com/${icon}.svg`\n ];\n\n for (const url of hosts) {\n try {\n const response = await fetch(url, { timeout: 750 });\n if (response.ok) {\n return await response.text();\n } else if (response.status === 404) {\n console.warn(`Icon not found at ${url}`);\n continue;\n }\n } catch (error) {\n console.warn(`Failed to fetch from ${url}:`, error);\n }\n }\n\n throw new Error(\"Icon not found or all hosts are unreachable.\");\n}\nwindow.searchIcons = async query => {\n const searchUrl = `https://api.iconify.design/search?query=${encodeURIComponent(query)}`;\n try {\n const response = await fetch(searchUrl);\n if (response.ok) {\n const data = await response.json();\n return data.icons || [];\n } else {\n console.error(\"Failed to fetch icon search results.\");\n }\n } catch (error) {\n console.error(\"Error during icon search:\", error);\n }\n return [];\n}\nwindow.updateSvgMedia = async (id, type) => {\n let title = \"Replace the SVG\";\n const target = findLayerById(id, project.html).layer;\n let display = \"\";\n const elm = document.createElement(\"template\");\n elm.innerHTML = json2html(target);\n const element = elm.content.firstElementChild;\n if (element) {\n display = ``;\n }\n elm.remove();\n\n let modalContent = `\n
    \n
    \n ${display}\n
    \n Checking connection...\n
    \n
    \n \n \n
    \n
    `;\n\n Modal.render({\n title: title,\n content: modalContent,\n onLoad: async function() {\n const apiConnection = await checkApiConnection();\n const descriptionElement = document.getElementById('modal-description');\n const searchElement = document.getElementById('iconSearch');\n const iconResults = document.getElementById('iconResults');\n\n if (navigator.onLine && apiConnection) {\n descriptionElement.innerHTML = `Api courtesy of \n Iconify.\n `;\n searchElement.classList.remove('hidden');\n searchElement.focus();\n iconResults.classList.remove('hidden');\n } else {\n descriptionElement.textContent = 'Upload your SVG:';\n }\n },\n onConfirm: function() {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer && layer.tag === \"svg\") {\n const selectedSvg = document.getElementById('vl61t8366').querySelector('svg');\n if (selectedSvg) {\n let obj = html2json(selectedSvg.outerHTML)[0];\n saveState();\n Object.keys(obj).forEach(key => {\n if (key === \"id\") return;\n layer[key] = obj[key];\n });\n findLayerById(id, project.html).layer.state.selected = null;\n findLayerById(id, project.html).layer.state.selected = true;\n saveState();\n }\n }\n });\n }\n });\n}\nwindow.handleIconSearch = async event => {\n const query = event.target.value;\n const iconResultsElement = document.getElementById('iconResults');\n if (query.length > 2) {\n const icons = await searchIcons(query);\n \n iconResultsElement.innerHTML = ''; // Clear previous results\n\n for (const icon of icons) {\n try {\n const iconUrl = `https://api.iconify.design/${icon}.svg`;\n getFile(iconUrl, (error, svgContent) => {\n if (error) {\n console.error(\"Failed to fetch SVG:\", error);\n } else {\n const iconDiv = document.createElement('div');\n iconDiv.innerHTML = svgContent;\n iconDiv.onclick = () => {\n const selectedSvgElement = document.querySelector(\"#vl61t8366 label svg\");\n if (selectedSvgElement) {\n selectedSvgElement.outerHTML = svgContent; // Replace the outerHTML with the selected SVG\n iconDiv.closest('article').scrollTop = 0;\n }\n };\n iconResultsElement.appendChild(iconDiv);\n }\n });\n } catch (error) {\n console.warn(`Failed to fetch SVG for icon: ${icon}`, error);\n }\n }\n } else {\n const iconResultsElement = document.getElementById('iconResults');\n iconResultsElement.innerHTML = '';\n }\n}\nwindow.selectIcon = svgContent => {\n iconContainer.innerHTML = svgContent;\n}\nwindow.copyToClipboard = text => {\n navigator.clipboard.writeText(text).then(function() {\n }).catch(function(error) {\n console.error('Failed to copy text: ', error);\n });\n}\nwindow.collectComponents = layers => {\n const existingNames = new Set(project.components.map(comp => comp.name));\n\n layers.forEach(layer => {\n if (layer.isComponent) {\n // Check if the layer name already exists\n if (!existingNames.has(layer.name)) {\n const clone = { ...layer };\n let uniqueId = generateId();\n clone.id = uniqueId;\n\n project.components.push({\n id: uniqueId,\n name: layer.name,\n code: clone\n });\n\n // Add the new name to the set\n existingNames.add(layer.name);\n }\n }\n });\n}\nwindow.addComponent = () => {\n if (data.selectedLayerIds.length === 0) return;\n \n saveState(); // Save state before making changes\n\n data.selectedLayerIds.forEach(id => {\n const result = findLayerById(id, project.html);\n\n if (result) {\n const { layer } = result;\n const clone = { ...layer };\n clone.id = generateId();\n\n const newHtml = json2html(clone);\n\n // Check for duplicate name or HTML\n const isDuplicate = project.components.some(comp =>\n comp.name === clone.name || comp.code === newHtml\n );\n\n if (!isDuplicate) {\n project.components.push({\n name: clone.name,\n code: newHtml\n });\n } else {\n console.warn(`Component with name \"${clone.name}\" or identical HTML already exists.`);\n }\n } else {\n console.error('Layer not found for ID:', id);\n }\n });\n\n saveState(); // Save state after making changes\n}\nwindow.deleteComponent = index => {\n if (index >= 0 && index < project.components.length) {\n project.components.splice(index, 1);\n saveState(); // Save state after making changes\n } else {\n console.error('Invalid index:', index);\n }\n}\nwindow.commandPalette = () => {\n let buttonClass = `text-xs w-auto px-3 py-2 m-0 capitalize rounded-md bg-transparent border ${project.dark ? 'border-gray-600' : 'border-gray-400'}`;\n let commands = {\n \"fold all\": \"f\",\n \"unfold all\": \"u\",\n \"hide all\": \"h\",\n \"show all\": \"s\",\n \"empty children\": \"e\",\n \"clear all styles\": \"cas\"\n };\n\n // Generate buttons HTML from the commands object\n let buttonsHtml = Object.keys(commands).map(command => {\n return ``;\n }).join(''); // Join the array into a single string\n\n const guide = `
    \n - Enter a Query:
    \n Input a query in the format t=tagname, t=.classname, t=[attribute=value], or t=[id]. You can also use pseudo-classes with the t= prefix like t=.classname:first-child.

    \n\n - Multiple Queries:
    \n Separate multiple queries with a comma (e.g., t=li, t=.name).

    \n\n - Pseudo-Classes:
    \n You can use pseudo-classes to refine your selection. Supported pseudo-classes include:
    \n
      \n
    • :first-child - Selects the first child element.
    • \n
    • :last-child - Selects the last child element.
    • \n
    • :nth-child(n) - Selects the nth child element.
    • \n
    • :nth-last-child(n) - Selects the nth last child element.
    • \n
    • :only-child - Selects elements that are the only child.
    • \n
    • :empty - Selects elements without children.
    • \n
    • :first-of-type - Selects the first element of its type.
    • \n
    • :last-of-type - Selects the last element of its type.
    • \n
    • :nth-of-type(n) - Selects the nth element of its type.
    • \n
    • :nth-last-of-type(n) - Selects the nth last element of its type.
    • \n
    • :only-of-type - Selects elements of its type that are the only one.
    • \n

    \n\n - Targeting Selections:
    \n Use the t= prefix to specify the type of selection:
    \n
      \n
    • t=tagname - Targets elements with the specified tag.
    • \n
    • t=.classname - Targets elements with the specified class.
    • \n
    • t=[attribute] - Targets elements with the specified attribute (without defining its value).
    • \n
    • t=[attribute=value] - Targets elements with the specified attribute and value.
    • \n
    • t=.classname:pseudo-class - Targets elements with the specified class and pseudo-class.
    • \n

    \n\n - Operation Prefixes:
    \n Use the following prefixes to perform operations on the targeted elements:
    \n
      \n
    • r= - Remove targeted elements. For example, r=tagname will remove all elements matching the specified tag.
    • \n
    • e= - Empty all children from the targeted elements. For example, e=.name will empty the children of all elements with the class name.
    • \n
    • c= - Apply operations to the children of the targeted elements. For example, c=tagname will select the children of currently selected elements that match the specified tag.
    • \n
    • mv= - Move targeted elements. For example, mv=tagname will cut the currently selected elements and paste them as elements matching the specified tag.
    • \n
    • rs= - Remove styles from the project as well as targeted elements. For example, rs=styleName will clear the specified style from all elements that currently have it applied.
    • \n

    \n\n - Special Commands:
    \n Use special commands to quickly fold, unfold, hide, show all layers, or empty all children from selections. The supported commands are:
    \n
      \n
    • f - Collapse all layers.
    • \n
    • u - Uncollapse all layers.
    • \n
    • h - Hide all layers.
    • \n
    • s - Show all layers.
    • \n
    • cas - Clear all styles.
    • \n
    • e - Empty all children from selections.
    • \n
    \n If no query is provided and you click \"Confirm\", all current selections will be cleared automatically. (You can also do this using the shortcut Shift+Ctrl+A on Windows or Shift+Cmd+A on Mac)

    \n\n - Replace Current Selection:
    \n Toggle the switch to decide whether to replace the current selection or add to it.
    \n You can also hold the Ctrl key on Windows (Cmd key on Mac) to do this as well to target replacing current selection.

    \n\n - Execute:
    \n Press Enter to run the command or query.

    \n\n - Close:
    \n The palette will close automatically after executing a command.
    \n You can also open it using the shortcut Ctrl+Shift+P on Windows or Cmd+Shift+P on Mac.
    \n You can also use the Esc key to close every opened dialog.\n
    `;\n\n // Check if data.commandPalette is true\n if (!data.commandPalette) {\n data.commandPalette = true;\n\n // Modal rendering code\n Modal.render({\n title: \"Command Palette...\",\n content: `\n
    \n button').onclick();\n }\n \"\n />\n
    \n \n \n
    \n
    \n
    \n \n Commands\n \n \n ${buttonsHtml}\n \n
    \n
    \n
    \n \n How to use the Command Palette:\n \n ${guide}\n
    \n
    `,\n onLoad() {\n document.getElementById('olphbh94a').focus();\n },\n onClose() {\n data.commandPalette = null;\n },\n onConfirm() {\n const query = document.getElementById('olphbh94a').value.trim();\n executeQuery(query, data.replaceCurrentSelection);\n data.commandPalette = null;\n }\n });\n }\n}\nwindow.updateVersionPart = (part, value) => {\n const versionParts = project.version.split('.');\n if (part === 'major') {\n versionParts[0] = value;\n } else if (part === 'minor') {\n versionParts[1] = value;\n } else if (part === 'patch') {\n versionParts[2] = value;\n }\n project.version = versionParts.join('.');\n}\nwindow.createLayerMap = (layers, map = new Map()) => {\n layers.forEach(layer => {\n // Add the layer to the map\n map.set(layer.id, layer);\n\n // If the layer has children, recursively add them to the map\n if (layer.children && layer.children.length > 0) {\n createLayerMap(layer.children, map);\n }\n });\n\n return map;\n}\n\n// iframe functions\nwindow.resizeCanvas = size => data.selectedSize = size;\nwindow.rotateCanvas = () => {\n const iframe = document.getElementById('previewElm').firstElementChild;\n if (iframe.style.width === '100%') return false;\n\n // Extract current width and height\n let width = parseInt(iframe.style.width);\n let height = parseInt(iframe.style.height);\n\n // Swap width and height\n [width, height] = [height, width];\n data.selectedSize = width+'x'+height;\n}\nwindow.getIframeClientSize = () => {\n const iframe = document.getElementById('iframe');\n if (iframe && iframe.offsetWidth && iframe.offsetHeight) {\n data.iframeWidth = iframe.offsetWidth.toString();\n data.iframeHeight = iframe.offsetHeight.toString();\n }\n}\n\n// save functions\nwindow.handleLogoChange = async event => {\n const file = event.target.files[0];\n if (!file) return; // If no file selected, return\n\n try {\n // Convert file to base64 string\n const base64String = await fileToBase64(file);\n // Update project.logo with base64String\n project.logo = base64String;\n } catch (error) {\n console.error('Error converting image to base64:', error);\n }\n}\nwindow.fileToBase64 = file => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n });\n}\nwindow.importJSON = (obj, callback = null) => {\n if (obj === null) return;\n App.initialRender = true;\n data.selectedLayerIds = [];\n project.name = obj.name;\n project.version = obj.version;\n project.title = obj.title;\n project.description = obj.description;\n project.author = obj.author;\n project.url = obj.url;\n project.logo = obj.logo;\n project.dark = obj.dark;\n project['previewDark'] = ('previewDark' in obj && typeof obj.previewDark === 'boolean') \n ? obj.previewDark \n : true;\n project.pwa = obj.pwa;\n project.activePanel = obj.activePanel;\n \n project.meta = obj.meta;\n project.libraries = obj.libraries;\n project.css = obj.css;\n project.html = obj.html;\n if (obj.components) {\n project['components'] = obj.components;\n collectComponents(project.html);\n }\n data.layerMap = createLayerMap(project.html);\n App.initialRender = null;\n collectSelectedIDs(project.html);\n App.render('#app');\n renderPreview(true);\n\n // Call the callback function if provided\n if (typeof callback === 'function') {\n callback();\n }\n}\nwindow.newProject = () => {\n const obj = {\n name: \"App name\",\n version: \"0.0.1\",\n title: \"An attractive title\",\n description: \"The most attractive description ever!\",\n author: \"Polyrise\",\n url: \"https://michaelsboost.com/\",\n meta: \"\",\n libraries: [],\n css: {\n \"rootVariables\": {},\n \"styles\": {},\n \"animations\": {},\n \"breakpoints\": {}\n },\n components: [],\n html: [],\n logo: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iNTEyIgogICBoZWlnaHQ9IjUxMiIKICAgdmlld0JveD0iMCAwIDEzNS40NjY2NiAxMzUuNDY2NjciCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnMKICAgICBpZD0iZGVmczEiIC8+PGcKICAgICBpZD0iZzI0Ij48cGF0aAogICAgICAgaWQ9InBhdGgyMiIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOiMxMzNhZDQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjk2LjE3NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICBkPSJNIDkuNTgyODc3NSw2Ny43MzMzMzIgViAxMzUuMjAwNTMgTCAyNS4zODc1OTcsMTI2LjAzMTA3IFYgMTA2Ljk2MDQgNjcuNzMzMzMyIFogbSA4NS45Njg5MTE1LDAgLTU3Ljc2OTA4MywzMi4yOTcyNTggdiAxOC44MTA3MyBMIDEyNS44ODIyNCw2Ny43MzMzMzIgWiIgLz48cGF0aAogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2ZpbGw6IzA0YTJmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIgogICAgICAgaWQ9InBhdGgyMyIKICAgICAgIGQ9Im0gNDkuNTY4NTI3LDM1LjgxOTU1MyAtMTYuOTcwNDc4LDkuNzk3OTEgMCwtMTkuNTk1ODIgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMjE3MjY1MiwwLDAsMi4xNDcwMjkzLC0zNC40OTUyNjksLTkuMjYyMTYyKSIgLz48cGF0aAogICAgICAgaWQ9InBhdGgyNCIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOiM4NjAwZWY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjk2LjE3NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICBkPSJNIDkuNTgyODc3NSwwLjI2NjEzMzYyIFYgNjcuNzMzMzMyIEggMjUuMzg3NTk3IFYgNDIuODU2ODE1IDI4LjMyNjk1MyBsIDcwLjMyNTkzOSwzOS4zMTU5NDYgLTAuMTYxNzQ3LDAuMDkwNDMgaCAzMC4zMzA0NTEgbCAwLjAwMiwtMC4wMDEgeiIgLz48L2c+PC9zdmc+Cg==\",\n lang: \"en\",\n dark: true,\n previewDark: true,\n pwa: false,\n activePanel: 'layers'\n }\n\n let modalContent = `\n
    \n
    All current data will be lost.
    \n
    \u2728 Click the image to start with a template! \uD83D\uDE80
    \n
    \n \n
    \n
    `;\n\n Modal.render({\n title: \"Are you sure you want to start a new project?\",\n content: modalContent,\n onLoad() {\n // Set up the event listener once the modal is loaded\n document.getElementById('starter-project').onclick = () => {\n fetch('json/bootstrap-landing-page-demo.json')\n .then(response => response.json())\n .then(data => {\n importJSON(data, () => {\n if (document.querySelector('dialog[open]')) {\n document.querySelector('dialog[open]').querySelector('header > button:last-child').onclick();\n }\n if (document.querySelector('dialog[open]')) {\n document.querySelector('dialog[open]').querySelector('header > button:last-child').onclick();\n }\n });\n })\n .catch(error => {\n console.error('Error loading the starter project:', error);\n });\n };\n },\n onConfirm() {\n importJSON(obj);\n data.menuDialog = null;\n }\n });\n};\n\nwindow.emptyStorage = () => {\n Modal.render({\n title: \"Are you sure you want to empty storage?\",\n content: '
    All current data will be lost.
    ',\n onConfirm() {\n // Clear local storage\n localStorage.removeItem('Polyrise');\n \n // Clear session storage specific to Polyrise (if you use a specific key)\n sessionStorage.removeItem('Polyrise');\n \n // Clear cookies specific to Polyrise\n document.cookie.split(\";\").forEach(function(c) {\n if (c.trim().startsWith('Polyrise')) {\n document.cookie = c.trim().split(\"=\")[0] + \n '=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/';\n }\n });\n \n // Clear service worker caches specific to Polyrise\n if ('caches' in window) {\n caches.keys().then(function(names) {\n names.forEach(function(name) {\n if (name === 'Polyrise-cache') {\n caches.delete(name);\n }\n });\n });\n }\n \n // Unregister service workers specific to Polyrise\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.getRegistrations().then(function(registrations) {\n registrations.forEach(function(registration) {\n if (registration.scope.includes('Polyrise')) {\n registration.unregister();\n }\n });\n });\n }\n \n location.reload();\n }\n });\n}\nwindow.clearAllStorage = () => {\n // Clear local storage\n localStorage.clear();\n\n // Clear session storage\n sessionStorage.clear();\n\n // Clear all cookies\n document.cookie.split(\";\").forEach(function(cookie) {\n const cookieName = cookie.split(\"=\")[0].trim();\n document.cookie = cookieName + '=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/';\n });\n\n // Clear all service workers\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.getRegistrations().then(function(registrations) {\n registrations.forEach(function(registration) {\n registration.unregister();\n });\n });\n }\n\n // Clear all caches\n if ('caches' in window) {\n caches.keys().then(function(names) {\n names.forEach(function(name) {\n caches.delete(name);\n });\n });\n }\n\n // Reload the page\n location.reload();\n}\nwindow.importProject = () => {\n Modal.render({\n title: \"Are you sure you want to load a new project?\",\n content: `
    All current data will be lost.
    `,\n onClose: function () {\n data.menuDialog = true;\n },\n onConfirm: function() {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.json';\n\n input.addEventListener('change', (event) => {\n const file = event.target.files[0];\n \n if (!file) {\n console.error('No file selected.');\n return;\n }\n \n const reader = new FileReader();\n \n reader.onload = event => {\n try {\n importJSON(JSON.parse(event.target.result));\n } catch (error) {\n console.error('Error parsing JSON file:', error);\n }\n };\n \n reader.readAsText(file);\n input.remove();\n });\n \n input.click();\n }\n });\n}\nwindow.getFileNameAndType = url => {\n // Extract the file name with extension from the URL\n const fileName = url.substring(url.lastIndexOf('/') + 1);\n \n // Extract the file extension\n const fileExtension = fileName.split('.').pop().toLowerCase();\n \n // Map file extensions to MIME types\n const mimeTypes = {\n 'jpeg': 'image/jpeg',\n 'jpg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'bmp': 'image/bmp',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml',\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'ogg': 'audio/ogg',\n 'mp4': 'video/mp4',\n 'webm': 'video/webm',\n 'ogv': 'video/ogg'\n };\n \n // Get the MIME type based on the file extension\n const fileType = mimeTypes[fileExtension] || 'application/octet-stream';\n \n return {\n fileName,\n fileType\n };\n}\nwindow.fetchResources = obj => {\n try {\n const doc = new DOMParser().parseFromString(json2html(obj.html), 'text/html');\n const body = doc.body;\n\n const imageResources = [];\n const audioResources = [];\n const vectorResources = [];\n const videoResources = [];\n\n let fileCounter = 1;\n\n // Helper function to check if a string is Base64\n function isBase64(str) {\n return str.startsWith('data:') && str.includes('base64,');\n }\n\n // Helper function to extract file type from Base64 string\n function getBase64FileType(str) {\n const mimeMatch = str.match(/^data:(.*);base64,/);\n if (mimeMatch) {\n const mimeType = mimeMatch[1];\n return mimeTypeToExtension(mimeType);\n }\n return 'unknown';\n }\n\n // Helper function to map MIME types to file extensions\n function mimeTypeToExtension(mimeType) {\n const typeMap = {\n // Images\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/gif': 'gif',\n 'image/svg+xml': 'svg',\n 'image/webp': 'webp',\n 'image/tiff': 'tiff',\n 'image/bmp': 'bmp',\n 'image/x-icon': 'ico',\n\n // Audio\n 'audio/mpeg': 'mp3',\n 'audio/wav': 'wav',\n 'audio/ogg': 'ogg',\n 'audio/aac': 'aac',\n 'audio/webm': 'webm',\n 'audio/flac': 'flac',\n\n // Video\n 'video/mp4': 'mp4',\n 'video/webm': 'webm',\n 'video/ogg': 'ogv',\n 'video/avi': 'avi',\n 'video/mpeg': 'mpg',\n 'video/quicktime': 'mov',\n 'video/x-msvideo': 'avi',\n 'video/x-matroska': 'mkv',\n\n // Fallback for unknown types\n 'unknown': 'bin'\n };\n return typeMap[mimeType] || 'bin';\n }\n\n // Helper function to extract file name from URL\n function getFileName(url) {\n return url.substring(url.lastIndexOf('/') + 1);\n }\n\n // Generate a file name for Base64 resources\n function getBase64FileName() {\n return `file-${fileCounter++}`;\n }\n\n // Function to extract and process background images from CSS\n function extractBackgroundImageUrls(css) {\n const urls = [];\n const regex = /background-image\\s*:\\s*url\\(([^)]+)\\)/g;\n let match;\n while ((match = regex.exec(css)) !== null) {\n let url = match[1].replace(/['\"]/g, \"\"); // Remove quotes around URLs\n if (isBase64(url)) {\n const fileType = getBase64FileType(url);\n const fileName = `${getBase64FileName()}.${fileType}`;\n imageResources.push({ url: url, fileName: fileName });\n css = css.replace(url, `../imgs/${fileName}`);\n } else {\n const fileName = getFileName(url);\n imageResources.push({ url: url, fileName: fileName });\n css = css.replace(url, `../imgs/${fileName}`);\n }\n urls.push(url);\n }\n return css;\n }\n\n // Extract image URLs and filenames\n body.querySelectorAll('img').forEach(img => {\n if (img.hasAttribute('src')) {\n const src = img.getAttribute('src');\n\n if (isBase64(src)) {\n const fileType = getBase64FileType(src);\n const fileName = `${getBase64FileName()}.${fileType}`;\n imageResources.push({ url: src, fileName: fileName });\n img.src = `imgs/${fileName}`;\n } else {\n const fileName = getFileName(src);\n imageResources.push({ url: src, fileName: fileName });\n img.src = `imgs/${getFileNameAndType(src).fileName}`;\n }\n }\n\n if (img.hasAttribute('srcset')) {\n img.srcset.split(',').forEach(srcset => {\n const url = srcset.trim().split(' ')[0];\n if (isBase64(url)) {\n const fileType = getBase64FileType(src);\n const fileName = `${getBase64FileName()}.${fileType}`;\n imageResources.push({ url: url, fileName: fileName });\n img.src = `imgs/${fileName}`;\n } else {\n const fileName = getFileName(url);\n imageResources.push({ url: url, fileName: fileName });\n img.src = `imgs/${getFileNameAndType(img.getAttribute('src')).fileName}`;\n }\n });\n }\n });\n\n // Extract audio URLs and filenames\n body.querySelectorAll('audio').forEach(audio => {\n audio.querySelectorAll('source').forEach(source => {\n if (source.hasAttribute('src')) {\n const src = source.getAttribute('src');\n\n if (isBase64(src)) {\n const fileType = getBase64FileType(src);\n const fileName = `${getBase64FileName()}.${fileType}`;\n audioResources.push({ url: src, fileName: fileName });\n source.src = `audios/${fileName}`;\n } else {\n const fileName = getFileName(src);\n audioResources.push({ url: src, fileName: fileName });\n source.src = `audios/${getFileNameAndType(src).fileName}`;\n }\n }\n });\n });\n\n // Extract vectors\n body.querySelectorAll('svg').forEach(svg => {\n vectorResources.push({ content: svg.outerHTML, fileName: `vector-${vectorResources.length + 1}.svg` });\n });\n\n // Extract video URLs and filenames\n body.querySelectorAll('video').forEach(video => {\n video.querySelectorAll('source').forEach(source => {\n if (source.hasAttribute('src')) {\n const src = source.getAttribute('src');\n\n if (isBase64(src)) {\n const fileType = getBase64FileType(src);\n const fileName = `${getBase64FileName()}.${fileType}`;\n videoResources.push({ url: src, fileName: fileName });\n source.src = `vids/${fileName}`;\n } else {\n const fileName = getFileName(src);\n videoResources.push({ url: src, fileName: fileName });\n source.src = `vids/${getFileNameAndType(src).fileName}`;\n }\n }\n });\n });\n\n // Process CSS background images\n const css = json2css(obj.css) || '';\n const updatedCss = extractBackgroundImageUrls(css);\n const stylesObj = updatedCss;\n body.querySelectorAll('style').forEach(style => style.remove());\n\n return {\n html: doc.body.innerHTML,\n stylesObj,\n imageResources,\n audioResources,\n vectorResources,\n videoResources\n };\n } catch (error) {\n console.error('Error fetching resources:', error);\n return null; // Or handle the error in an appropriate way\n }\n}\nwindow.getBase64Media = async mediaUrl => {\n const response = await fetch(mediaUrl);\n const blob = await response.blob();\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result.split(',')[1]);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\nwindow.renderStyles = styles => {\n let css = '';\n\n // Define :root variables\n css += `:root {\\n`;\n for (const [variable, value] of Object.entries(styles.rootVariables || {})) {\n css += ` --${variable}: ${value};\\n`;\n }\n css += '}\\n';\n\n // Define styles for each class\n for (const [classId, style] of Object.entries(styles.styles)) {\n if (!style || (!Object.keys(style.variables || {}).length && \n !Object.keys(style.base || {}).length && \n !Object.keys(style.pseudos || {}).length && \n !Object.keys(style.animations || {}).length && \n !Object.keys(style.breakpoints || {}).length)) {\n continue; // Skip empty styles\n }\n const variables = style.variables || {};\n const baseStyles = style.base || {};\n const pseudos = style.pseudos || [];\n const animations = style.animations || {};\n const breakpoints = style.breakpoints || {};\n\n if (classId === \"html\" || classId === \"body\") {\n css += `${classId} {\\n`;\n } else {\n css += `.${classId} {\\n`;\n }\n \n for (const [variable, value] of Object.entries(variables)) {\n css += ` --${variable}: ${value};\\n`;\n }\n for (const [property, value] of Object.entries(baseStyles)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += '}\\n';\n\n for (const { selector, styles: pseudoStyles } of pseudos) {\n css += `.${classId}${selector} {\\n`;\n for (const [property, value] of Object.entries(pseudoStyles)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += '}\\n';\n }\n\n for (const [animationName, animation] of Object.entries(animations)) {\n css += `@keyframes ${animationName} {\\n`;\n for (const [key, frameStyles] of Object.entries(animation.keyframes)) {\n css += ` ${key} {\\n`;\n for (const [property, value] of Object.entries(frameStyles)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += ' }\\n';\n }\n css += '}\\n';\n\n css += `.${classId} {\\n`;\n for (const [property, value] of Object.entries(animation.properties)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += '}\\n';\n }\n\n for (const [breakpoint, breakpointStyles] of Object.entries(breakpoints)) {\n css += `@media (max-width: ${breakpoint}) {\\n`;\n css += ` .${classId} {\\n`;\n for (const [variable, value] of Object.entries(breakpointStyles.variables || {})) {\n css += ` --${variable}: ${value};\\n`;\n }\n for (const [property, value] of Object.entries(breakpointStyles.base || {})) {\n css += ` ${property}: ${value};\\n`;\n }\n css += ' }\\n';\n\n for (const { selector, styles: pseudoStyles } of breakpointStyles.pseudos || []) {\n css += ` .${classId}${selector} {\\n`;\n for (const [property, value] of Object.entries(pseudoStyles)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += ' }\\n';\n }\n\n css += '}\\n';\n }\n }\n\n return css;\n}\nwindow.downloadJSON = async () => {\n try {\n await loadScript(\"libraries/jszip/FileSaver.min.js\");\n let blob = new Blob([JSON.stringify(project, null, 2)], {type: \"application/json\"});\n saveAs(blob, `${project.name.split(' ').join('').toLowerCase()}-Polyrise.json`);\n\n } catch (error) {\n console.error('Error:', error);\n } finally {\n // Clean up scripts after use\n removeScript(\"libraries/jszip/FileSaver.min.js\");\n }\n}\nwindow.downloadQuickCommands = () => {\n const colorMappings = {\n 'black': '#000000',\n 'white': '#ffffff',\n 'gray-50': '#f9fafb',\n 'gray-100': '#f3f4f6',\n 'gray-200': '#e5e7eb',\n 'gray-300': '#d1d5db',\n 'gray-400': '#9ca3af',\n 'gray-500': '#6b7280',\n 'gray-600': '#4b5563',\n 'gray-700': '#374151',\n 'gray-800': '#1f2937',\n 'gray-900': '#111827',\n 'red-50': '#fef2f2',\n 'red-100': '#fee2e2',\n 'red-200': '#fecaca',\n 'red-300': '#fca5a5',\n 'red-400': '#f87171',\n 'red-500': '#ef4444',\n 'red-600': '#dc2626',\n 'red-700': '#b91c1c',\n 'red-800': '#991b1b',\n 'red-900': '#7f1d1d',\n 'yellow-50': '#fefce8',\n 'yellow-100': '#fef9c3',\n 'yellow-200': '#fef08a',\n 'yellow-300': '#fde047',\n 'yellow-400': '#facc15',\n 'yellow-500': '#eab308',\n 'yellow-600': '#ca8a04',\n 'yellow-700': '#a16207',\n 'yellow-800': '#854d0e',\n 'yellow-900': '#713f12',\n 'green-50': '#f0fdf4',\n 'green-100': '#dcfce7',\n 'green-200': '#bbf7d0',\n 'green-300': '#86efac',\n 'green-400': '#4ade80',\n 'green-500': '#22c55e',\n 'green-600': '#16a34a',\n 'green-700': '#15803d',\n 'green-800': '#166534',\n 'green-900': '#14532d',\n 'blue-50': '#eff6ff',\n 'blue-100': '#dbeafe',\n 'blue-200': '#bfdbfe',\n 'blue-300': '#93c5fd',\n 'blue-400': '#60a5fa',\n 'blue-500': '#3b82f6',\n 'blue-600': '#2563eb',\n 'blue-700': '#1d4ed8',\n 'blue-800': '#1e40af',\n 'blue-900': '#1e3a8a',\n 'indigo-50': '#eef2ff',\n 'indigo-100': '#e0e7ff',\n 'indigo-200': '#c7d2fe',\n 'indigo-300': '#a5b4fc',\n 'indigo-400': '#818cf8',\n 'indigo-500': '#6366f1',\n 'indigo-600': '#4f46e5',\n 'indigo-700': '#4338ca',\n 'indigo-800': '#3730a3',\n 'indigo-900': '#312e81',\n 'purple-50': '#f5f3ff',\n 'purple-100': '#ede9fe',\n 'purple-200': '#ddd6fe',\n 'purple-300': '#c4b5fd',\n 'purple-400': '#a78bfa',\n 'purple-500': '#8b5cf6',\n 'purple-600': '#7c3aed',\n 'purple-700': '#6d28d9',\n 'purple-800': '#5b21b6',\n 'purple-900': '#4c1d95',\n 'pink-50': '#fdf2f8',\n 'pink-100': '#fce7f3',\n 'pink-200': '#fbcfe8',\n 'pink-300': '#f9a8d4',\n 'pink-400': '#f472b6',\n 'pink-500': '#ec4899',\n 'pink-600': '#db2777',\n 'pink-700': '#be185d',\n 'pink-800': '#9d174d',\n 'pink-900': '#831843'\n }; \n\n function updateBorderColors(data) {\n const updatedData = {};\n for (const [key, value] of Object.entries(data)) {\n if (key.startsWith('border-') && !key.includes('-opacity')) {\n const colorKey = key.split('-').slice(1).join('-');\n const color = colorMappings[colorKey] || 'transparent';\n updatedData[key] = `--tw-border-opacity: 1; border-top-color: ${color}; border-right-color: ${color}; border-bottom-color: ${color}; border-left-color: ${color};`;\n } else {\n updatedData[key] = value;\n }\n }\n return updatedData;\n }\n \n\n window.saveAsJson = async (data, filename) => {\n try {\n await loadScript(\"libraries/jszip/FileSaver.min.js\");\n const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });\n saveAs(blob, filename);\n \n } catch (error) {\n console.error('Error:', error);\n } finally {\n // Clean up scripts after use\n removeScript(\"libraries/jszip/FileSaver.min.js\");\n }\n }\n\n // Generate the CSS quick commands and save to a JSON file\n generateCssQuickCommands('libraries/tailwind/tailwind-mod.min.css').then(cssQuickCommands => {\n const updatedData = updateBorderColors(cssQuickCommands);\n saveAsJson(updatedData, 'cssQuickCommands.json');\n });\n}\nwindow.getFile = async (url, callback = null) => {\n try {\n const response = await fetch(url);\n if (!response.ok) throw new Error(\"Network response was not ok\");\n const fileContent = await response.text();\n if (callback && typeof callback === 'function') {\n callback(null, fileContent); // Call the callback with the file content\n } else {\n return fileContent; // Return the file content\n }\n } catch (error) {\n console.warn(\"Request error:\", error);\n if (callback && typeof callback === 'function') {\n callback(error, null); // Call the callback with the error\n } else {\n throw error; // Re-throw to handle in caller\n }\n }\n}\nwindow.minifyCSS = source => {\n // Convert the source to a string if it isn't one\n source = String(source);\n // Remove comments\n let minified = source.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n // Remove whitespace and newlines\n minified = minified.replace(/\\s{2,}/g, ' ').replace(/\\n/g, '');\n // Remove spaces around selectors, properties, and values\n minified = minified.replace(/\\s*([{}:;])\\s*/g, '$1');\n // Remove the last semicolon before the closing brace\n minified = minified.replace(/;}/g, '}');\n return minified;\n}\nwindow.downloadProject = async () => {\n try {\n await loadScripts([\n \"libraries/jszip/jszip.min.js\",\n \"libraries/jszip/FileSaver.min.js\"\n ]);\n\n // Extract srcset URLs\n const iframe = document.getElementById('iframe');\n if (!iframe) return;\n const idoc = iframe.contentDocument || iframe.contentWindow.document;\n const { html, stylesObj, imageResources, audioResources, vectorResources, videoResources } = fetchResources(project);\n\n const zip = new JSZip();\n\n // Project file\n zip.file(`${project.name.split(' ').join('').toLowerCase()}-Polyrise.json`, JSON.stringify(project, null, 2));\n\n // kodeWeave project file\n const kodeWeaveProject = {\n name: project.name,\n version: project.version,\n title: project.title,\n description: project.description,\n author: project.author,\n url: project.url,\n meta: project.meta,\n libraries: project.libraries,\n html_pre_processor: \"html\",\n css_pre_processor: \"css\",\n javascript_pre_processor: \"javascript\",\n html: json2html(project.html),\n css: json2css(project.css),\n javascript: '',\n logo: project.logo,\n console: false,\n dark: project.dark,\n module: true,\n autorun: true,\n pwa: project.pwa,\n preview: true,\n activePanel: 'html',\n columns: false,\n columnsRight: true\n };\n zip.file(`${project.name.split(' ').join('').toLowerCase()}-kodeWeave.json`, JSON.stringify(kodeWeaveProject, null, 2));\n\n let licenseStr = `The MIT License (MIT)\nCopyright (c) ${new Date().getFullYear()} ${project.author}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.`;\n zip.file(\"LICENSE.md\", licenseStr);\n\n let READMEStr = `# ${project.name}\n\n**Description:**\n${project.description}\n\n**Built With ${app.name}!**\nThis site was made with [${app.name}](https://michaelsboost.com/${app.name.toString().split(' ').join('-')}/).\n\n**${app.name} Description:**\n${app.summary} ${app.description}\n\n**Website:**\n[${app.name}](https://michaelsboost.com/${app.name.toString().split(' ').join('-')}/)`;\n zip.file(\"README.md\", READMEStr);\n\n let cssContent = '';\n let cssBuildItems = [];\n let cssBuildItemsString = '';\n let TailwindNoReset = null;\n const promises = project.libraries.map(async library => {\n if (!library.endsWith(['.css', '.js'])) return false;\n const data = await getFile(library);\n const parts = library.split(\"/\");\n const name = parts[parts.length - 1];\n\n // Check if the library is one of the Tailwind files to ignore\n if (name === \"tailwind-mod-noreset.min.js\") {\n TailwindNoReset = true;\n }\n \n // Assuming libraries have .css extensions for simplicity\n if (name.endsWith('.css')) {\n cssContent += data + '\\n';\n cssBuildItems.push(name);\n cssBuildItemsString += `libraries/${name} `;\n zip.folder('libraries').file(name, data);\n }\n \n // Assuming libraries have .js extensions for simplicity\n if (name.endsWith('.js')) {\n zip.folder('libraries').file(name, data);\n }\n });\n await Promise.all(promises);\n\n // Checks css for html\n let cssBuild = '';\n let css4html = '';\n let twFound = '';\n let tailwindDirectives = '';\n let tailwindStyles = '';\n let cssImport = '';\n \n // Find out if user is using tailwind\n if (idoc.getElementById('vyhibnq91')) {\n twFound = true;\n tailwindDirectives = `\n ${!TailwindNoReset ? `@tailwind base;` : ''}\n@tailwind components;\n@tailwind utilities;\n`\n\n if (twFound) {\n cssBuildItems.map(async library => {\n cssImport += `@import '../libraries/${library}';\n`;\n });\n cssImport += tailwindDirectives;\n } else {\n cssImport = cssContent;\n }\n tailwindStyles = idoc.getElementById('vyhibnq91').textContent;\n }\n\n // Extract and join the content of all \n ${scriptTags ? scriptTags : ''}\n \n \n\n${json2html(project.html)}\n \n \n`;\nconst newHtmlBlobURL = createBlobURL(iframeSrc, 'text/html');\n\n // Create a new temporary iframe to compare\n const parser = new DOMParser();\n const doc = parser.parseFromString(iframeSrc, 'text/html');\n const idoc = iframe.contentDocument || iframe.contentWindow.document;\n\n if (forceRun) {\n iframe.setAttribute('src', newHtmlBlobURL);\n } else {\n diffNodes(idoc.documentElement, doc.documentElement);\n }\n}\nwindow.detectOperatingSystem = () => {\n const userAgent = navigator.userAgent || navigator.platform;\n\n // Check for Mac OS\n const isMac = /Macintosh|MacIntel|MacPPC|Mac68K/.test(userAgent);\n\n // Check for Windows\n const isWindows = /Win32|Win64|Windows|WinCE/.test(userAgent);\n\n // Check for Linux\n const isLinux = /Linux/.test(userAgent) && !isWindows;\n\n if (isMac) {\n return 'Mac';\n } else if (isWindows) {\n return 'Windows';\n } else if (isLinux) {\n return 'Linux';\n } else {\n return 'unknown';\n }\n}\n\n// Diffing algorithm to update ui when changes occur\nwindow.diffNodes = (oldNode, newNode) => {\n if (!oldNode || !newNode) {\n return;\n }\n\n // Skip nodes that are marked with `data-ignore-diff`\n if (oldNode?.getAttribute && oldNode.hasAttribute('data-ignore-diff')) {\n return;\n }\n\n // Check if nodes are iframe elements\n if (oldNode.nodeName === 'IFRAME' && newNode.nodeName === 'IFRAME') {\n const acceptableIframeAttributes = ['id', 'title', 'class', 'style', 'sandbox'];\n // Compare acceptable attributes only\n acceptableIframeAttributes.forEach(attr => {\n if (oldNode.getAttribute(attr) !== newNode.getAttribute(attr)) {\n oldNode.setAttribute(attr, newNode.getAttribute(attr));\n }\n });\n\n const oldSrcdoc = oldNode.getAttribute('srcdoc');\n const newSrcdoc = newNode.getAttribute('srcdoc');\n // Ignore srcdoc attribute if it hasn't changed\n if (oldSrcdoc === newSrcdoc) return;\n return;\n }\n\n // If nodes are different types, replace the old node\n if (oldNode.nodeName !== newNode.nodeName) {\n oldNode.replaceWith(newNode.cloneNode(true));\n return;\n }\n\n // Diff the attributes of the nodes\n if (oldNode.nodeType === Node.ELEMENT_NODE && newNode.nodeType === Node.ELEMENT_NODE) {\n const oldAttributes = Array.from(oldNode.attributes);\n const newAttributes = Array.from(newNode.attributes);\n\n // Remove old attributes not present in the new node\n oldAttributes.forEach(attr => {\n if (!newNode.hasAttribute(attr.name)) {\n oldNode.removeAttribute(attr.name);\n }\n });\n\n // Add or update attributes from the new node\n newAttributes.forEach(attr => {\n if (oldNode.getAttribute(attr.name) !== attr.value) {\n oldNode.setAttribute(attr.name, attr.value);\n }\n });\n\n // Handle specific case for input elements\n if (oldNode.nodeName === 'INPUT' && newNode.nodeName === 'INPUT') {\n const oldValue = oldNode.value;\n const newValue = newNode.value;\n if (oldValue !== newValue) {\n oldNode.value = newValue;\n }\n }\n }\n\n const oldChildren = Array.from(oldNode.childNodes);\n const newChildren = Array.from(newNode.childNodes);\n\n // Update or remove existing child nodes\n oldChildren.forEach((oldChild, index) => {\n const newChild = newChildren[index];\n if (!newChild) {\n oldNode.removeChild(oldChild);\n return;\n }\n // Special handling for elements\n if (oldNode.tagName === 'TITLE' || oldNode.tagName === 'STYLE' && oldNode.textContent !== newNode.textContent) {\n oldNode.textContent = newNode.textContent;\n } else if (oldChild.nodeType === Node.TEXT_NODE && oldChild.nodeValue !== newChild.nodeValue) {\n oldChild.nodeValue = newChild.nodeValue;\n }\n diffNodes(oldChild, newChild);\n });\n\n // Add new child nodes\n newChildren.slice(oldChildren.length).forEach(newChild => {\n oldNode.appendChild(newChild.cloneNode(true));\n });\n}\n\n// Once dom has loaded init functions\ndocument.addEventListener('DOMContentLoaded', function() {\n window.onload = () => {\n // URL to the JSON file\n const jsonFileUrl = 'cssQuickCommands.json';\n\n // Apply the CSS quick commands\n applyCssQuickCommands(jsonFileUrl);\n\n // Set the state to true when the Command/Shift key is down\n window.onkeydown = e => {\n const activeElement = document.activeElement;\n \n // Check if the active element is not an input, textarea, or contenteditable\n const isNonEditable = !['INPUT', 'TEXTAREA'].includes(activeElement.tagName) &&\n activeElement.getAttribute('contenteditable') !== 'true';\n \n if (isNonEditable) {\n const os = detectOperatingSystem();\n const isCmdPressed = os === 'Mac' && e.metaKey;\n const isCtrlPressed = os !== 'Mac' && e.ctrlKey;\n const isModifierPressed = isCmdPressed || isCtrlPressed;\n const isShiftPressed = e.shiftKey || e.key === \"Shift\";\n const isZKeyPressed = e.key.toLowerCase() === 'z';\n \n // Handle shortcut actions\n const handleShortcut = action => {\n e.preventDefault();\n action();\n return false;\n };\n\n // Update key states\n data.ctrlKey = isCtrlPressed;\n data.cmdKey = isCmdPressed;\n \n if (isModifierPressed) {\n if (isZKeyPressed) {\n if (isShiftPressed) {\n return handleShortcut(redo);\n }\n return handleShortcut(undo);\n }\n \n if (e.key.toLowerCase() === 'd') return handleShortcut(cloneLayers);\n if (e.key.toLowerCase() === 'x') return handleShortcut(cutLayers);\n if (e.key.toLowerCase() === 'c') return handleShortcut(copyLayers);\n if (e.key.toLowerCase() === 'v') return handleShortcut(pasteLayers);\n if (isShiftPressed && e.key.toLowerCase() === 'p') return handleShortcut(commandPalette);\n if (isShiftPressed && isModifierPressed && e.key.toLowerCase() === 'a') return handleShortcut(clearAllSelections);\n }\n \n // Update shift key state\n if (isShiftPressed) data.shiftKey = true;\n \n // Handle Escape key to close dialogs\n if (e.key === 'Escape') {\n e.preventDefault();\n const dialog = document.querySelector('dialog[open]');\n if (dialog) dialog.querySelector('header > button').onclick();\n return false;\n }\n }\n \n // Handle Escape key in editable elements\n if (['INPUT', 'TEXTAREA'].includes(activeElement.tagName) ||\n activeElement.getAttribute('contenteditable') === 'true') {\n if (e.key === 'Escape') {\n e.preventDefault();\n const dialog = document.querySelector('dialog[open]');\n if (dialog) dialog.querySelector('header > button').onclick();\n activeElement.blur();\n return false;\n }\n }\n };\n\n // Set the state to false when the Command/Shift key is up\n window.onkeyup = e => {\n e.key === \"Shift\" && (data.shiftKey = false);\n if (e.key === \"Control\" || e.key === \"ControlLeft\" || e.key === \"ControlRight\") data.ctrlKey = false;\n if (e.key === \"Command\" || e.key === \"Meta\") data.cmdKey = false;\n }\n\n if (localStorage.getItem('Polyrise')) {\n importJSON(JSON.parse(localStorage.getItem('Polyrise')));\n } else {\n App.render('#app');\n }\n window.onresize = App.render('#app');\n };\n});"], - "mappings": "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AC,EACnB,UAAW,EACX,gBAAiB,GACjB,WAAY,CACV,YAAa,CACX,UAAW,CACT,8DACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,6EACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,0EACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,mEACF,EACA,KAAM,EACR,EACA,IAAO,CACL,UAAW,CACT,2DACA,yDACF,EACA,KAAM,EACR,EACA,iBAAkB,CAChB,UAAW,CACT,yEACA,uEACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,oEACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,+EACA,mFACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,uEACA,mFACA,gFACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,4EACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,uCACF,EACA,KAAM,EACR,EACA,SAAY,CACV,UAAW,CACT,+DACA,6DACF,EACA,KAAM,EACR,EACA,GAAM,CACJ,UAAW,CACT,+BACF,EACA,KAAM,EACR,EACA,QAAW,CACT,UAAW,CACT,qEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,4EACF,EACA,KAAM,EACR,EACA,WAAc,CACZ,UAAW,CACT,iFACA,8EACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,6EACA,2EACF,EACA,KAAM,EACR,EACA,OAAU,CACR,UAAW,CACT,mEACF,EACA,KAAM,EACR,EACA,gBAAiB,CACf,UAAW,CACT,2EACF,EACA,KAAM,EACR,EACA,KAAQ,CACN,UAAW,CACT,2CACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,6EACA,0EACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,oEACF,EACA,KAAM,EACR,EACA,MAAS,CACP,UAAW,CACT,6EACA,kEACF,EACA,KAAM,EACR,EACA,QAAW,CACT,UAAW,CACT,iEACF,EACA,KAAM,EACR,EACA,oBAAqB,CACnB,UAAW,CACT,2FACA,yFACF,EACA,KAAM,EACR,EACA,OAAU,CACR,UAAW,CACT,wEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,6DACF,EACA,KAAM,EACR,EACA,YAAe,CACb,UAAW,CACT,mFACA,gFACF,EACA,KAAM,EACR,EACA,gBAAiB,CACf,UAAW,CACT,0EACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,uEACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,0DACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,oEACA,sEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,uDACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,gEACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,gEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,qEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,qEACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,4EACA,0EACF,EACA,KAAM,EACR,EACA,eAAgB,CACd,UAAW,CACT,wEACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,0EACF,EACA,KAAM,EACR,EACA,SAAY,CACV,UAAW,CACT,6EACA,4FACF,EACA,KAAM,EACR,EACA,OAAU,CACR,UAAW,CACT,4EACA,0EACF,EACA,KAAM,EACR,EACA,SAAY,CACV,UAAW,CACT,yEACF,EACA,KAAM,EACR,EACA,eAAgB,CACd,UAAW,CACT,sEACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,mEACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,+EACF,EACA,KAAM,EACR,EACA,MAAS,CACP,UAAW,CACT,wEACA,sEACA,2EACF,EACA,KAAM,EACR,EACA,MAAS,CACP,UAAW,CACT,iEACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,sEACF,EACA,KAAM,EACR,CACF,EACA,cAAe,CACb,UAAa,OACb,kBAAmB,KACnB,qBAAsB,KACtB,eAAgB,OAChB,WAAc,UACd,mBAAoB,UACpB,eAAgB,MAChB,OAAU,OACV,KAAQ,OACR,MAAS,UACT,eAAgB,OAChB,eAAgB,OAChB,QAAW,OACX,QAAW,GACX,KAAQ,WACR,YAAa,IACb,cAAe,IACf,YAAa,OACb,mBAAoB,OACpB,eAAgB,SAChB,cAAe,MACf,cAAe,OACf,WAAY,OACZ,OAAU,OACV,KAAQ,OACR,iBAAkB,SAClB,cAAe,SACf,OAAU,MACV,aAAc,OACd,YAAa,OACb,YAAa,OACb,aAAc,MACd,YAAa,MACb,aAAc,UACd,kBAAmB,SACnB,QAAW,IACX,MAAS,IACT,SAAY,UACZ,QAAW,MACX,YAAe,OACf,MAAS,OACT,OAAU,OACV,MAAS,IACT,KAAQ,OACR,aAAc,OACd,kBAAmB,OACnB,cAAe,MACf,iBAAkB,OAClB,IAAO,OACP,UAAa,OACb,WAAc,gBACd,mBAAoB,KACpB,sBAAuB,OACvB,UAAa,MACb,WAAc,UACd,cAAe,SACf,MAAS,OACT,UAAW,IAGX,SAAY,SACZ,QAAW,QACX,SAAY,UACZ,WAAc,UACd,MAAS,OACT,MAAS,OACT,cAAe,SACf,iBAAkB,MAClB,kBAAmB,aACnB,cAAe,UACf,gBAAiB,UACjB,YAAa,SACb,wBAAyB,SACzB,kBAAmB,aACnB,oBAAqB,SACrB,kBAAmB,OACnB,eAAgB,OAChB,eAAgB,SAChB,kBAAmB,WACnB,eAAgB,MAChB,OAAU,OACV,UAAa,MACb,cAAe,OACf,kBAAmB,OACnB,sBAAuB,UACvB,eAAgB,OAChB,aAAc,OACd,uBAAwB,OACxB,wBAAyB,QACzB,iBAAkB,OAClB,eAAgB,SAChB,iBAAkB,WAClB,aAAc,SACd,eAAgB,gBAChB,aAAc,OACd,eAAgB,SAChB,WAAc,OACd,sBAAuB,UACvB,aAAc,cACd,cAAe,UACf,cAAe,OACf,aAAc,OACd,YAAa,IACb,cAAe,IACf,aAAc,SACd,eAAgB,SAChB,cAAe,SACf,QAAW,OACX,kBAAmB,OACnB,UAAa,OACb,aAAc,OACd,YAAa,YACb,iBAAkB,SAClB,aAAc,UACd,kBAAmB,OACnB,sBAAuB,OACvB,mBAAoB,OACpB,oBAAqB,OACrB,oBAAqB,OACrB,iBAAkB,OAClB,OAAU,OACV,kBAAmB,OACnB,mBAAoB,QACpB,gBAAiB,OACjB,eAAgB,OAChB,kBAAmB,OACnB,cAAe,OACf,YAAa,QACf,EACA,wBAAyB,CACvB,SAAY,CAAC,SAAU,WAAY,WAAY,QAAS,SAAU,UAAW,UAAW,SAAU,eAAgB,OAAO,EACzH,QAAW,CAAC,QAAS,SAAU,eAAgB,OAAQ,OAAQ,cAAe,cAAe,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC5J,SAAY,CAAC,UAAW,SAAU,OAAQ,SAAU,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EACnH,WAAc,CAAC,UAAW,SAAU,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvG,MAAS,CAAC,OAAQ,QAAS,OAAQ,eAAgB,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EACxH,MAAS,CAAC,OAAQ,OAAQ,QAAS,OAAQ,eAAgB,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EAChI,cAAe,CAAC,SAAU,SAAU,MAAO,WAAY,WAAY,eAAgB,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC1I,iBAAkB,CAAC,MAAO,cAAe,SAAU,iBAAkB,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC5H,kBAAmB,CAAC,aAAc,WAAY,SAAU,gBAAiB,eAAgB,eAAgB,QAAS,MAAO,OAAQ,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EACjM,cAAe,CAAC,UAAW,aAAc,WAAY,SAAU,WAAY,iBAAkB,gBAAiB,QAAS,MAAO,aAAc,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC/M,gBAAiB,CAAC,UAAW,aAAc,WAAY,SAAU,gBAAiB,eAAgB,eAAgB,QAAS,MAAO,WAAY,iBAAkB,gBAAiB,UAAW,UAAW,SAAU,eAAgB,OAAO,EACxO,YAAa,CAAC,SAAU,OAAQ,eAAgB,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvG,wBAAyB,CAAC,SAAU,QAAS,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC7G,kBAAmB,CAAC,aAAc,cAAe,cAAe,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC/H,oBAAqB,CAAC,SAAU,WAAY,WAAY,YAAa,QAAS,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC9I,kBAAmB,CAAC,OAAQ,QAAS,UAAW,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvG,eAAgB,CAAC,OAAQ,SAAU,SAAU,SAAU,QAAS,SAAU,SAAU,QAAS,QAAS,SAAU,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvK,eAAgB,CAAC,OAAQ,SAAU,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EACnG,kBAAmB,CAAC,WAAY,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EACnG,eAAgB,CAAC,MAAO,SAAU,cAAe,YAAa,eAAgB,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EACnJ,OAAU,CAAC,OAAQ,UAAW,OAAQ,eAAgB,OAAQ,UAAW,WAAY,OAAQ,OAAQ,YAAa,OAAQ,gBAAiB,QAAS,OAAQ,OAAQ,UAAW,cAAe,OAAQ,WAAY,aAAc,aAAc,aAAc,WAAY,WAAY,WAAY,WAAY,YAAa,YAAa,YAAa,YAAa,YAAa,YAAa,cAAe,cAAe,UAAW,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EACte,UAAa,CAAC,MAAO,MAAO,UAAW,UAAW,SAAU,eAAgB,OAAO,EACnF,cAAe,CAAC,OAAQ,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvF,kBAAmB,CAAC,OAAQ,SAAU,SAAU,UAAW,uBAAwB,cAAe,cAAe,cAAe,cAAe,cAAe,cAAe,cAAe,WAAY,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC3Q,sBAAuB,CAAC,SAAU,UAAW,UAAW,UAAW,SAAU,eAAgB,OAAO,EACpG,eAAgB,CAAC,OAAQ,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EACzF,aAAc,CAAC,SAAU,MAAO,UAAW,OAAQ,QAAS,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC5H,uBAAwB,CAAC,OAAQ,YAAa,WAAY,eAAgB,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC1I,wBAAyB,CAAC,QAAS,SAAU,SAAU,SAAU,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EAChI,iBAAkB,CAAC,OAAQ,aAAc,YAAa,YAAa,aAAc,iBAAkB,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC1J,eAAgB,CAAC,SAAU,QAAS,gBAAiB,UAAW,mBAAoB,YAAa,UAAW,UAAW,SAAU,eAAgB,OAAO,EACxJ,iBAAkB,CAAC,WAAY,MAAO,QAAS,WAAY,cAAe,SAAU,MAAO,SAAU,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC5J,aAAc,CAAC,SAAU,YAAa,WAAY,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvH,eAAgB,CAAC,gBAAiB,cAAe,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,eAAgB,OAAO,EACrJ,aAAc,CAAC,OAAQ,UAAW,aAAc,WAAY,SAAU,WAAY,iBAAkB,gBAAiB,QAAS,MAAO,aAAc,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EACtN,eAAgB,CAAC,SAAU,QAAS,SAAU,MAAO,UAAW,WAAY,iBAAkB,gBAAiB,UAAW,UAAW,SAAU,eAAgB,OAAO,EACtK,WAAc,CAAC,OAAQ,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EACtF,sBAAuB,CAAC,UAAW,SAAU,UAAW,UAAW,SAAU,eAAgB,OAAO,EACpG,aAAc,CAAC,cAAe,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EACnG,cAAe,CAAC,OAAQ,UAAW,cAAe,UAAW,UAAW,SAAU,eAAgB,OAAO,EACzG,cAAe,CAAC,OAAQ,MAAO,UAAW,UAAW,SAAU,eAAgB,OAAO,EACtF,aAAc,CAAC,OAAQ,OAAQ,cAAe,cAAe,cAAe,UAAW,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC9I,YAAa,CAAC,UAAW,UAAW,SAAU,eAAgB,OAAO,EACrE,cAAe,CAAC,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvE,aAAc,CAAC,SAAU,SAAU,UAAW,UAAW,UAAW,SAAU,eAAgB,OAAO,EACrG,eAAgB,CAAC,SAAU,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EAChG,cAAe,CAAC,SAAU,OAAQ,SAAU,UAAU,UAAW,UAAW,SAAU,eAAgB,QAAS,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC5K,QAAW,CAAC,OAAQ,SAAU,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC7F,kBAAmB,CAAC,OAAQ,cAAe,YAAa,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC/G,UAAa,CAAC,OAAQ,UAAW,UAAW,UAAW,SAAU,eAAgB,OAAO,EACxF,aAAc,CAAC,OAAQ,QAAS,SAAU,SAAU,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvH,YAAa,CAAC,YAAa,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC3F,iBAAkB,CAAC,SAAU,WAAY,SAAU,UAAW,SAAU,UAAW,cAAe,aAAc,aAAc,aAAc,aAAc,YAAa,MAAO,aAAc,QAAS,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC1Q,aAAc,CAAC,OAAQ,UAAW,QAAS,OAAQ,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EACxH,kBAAmB,CAAC,OAAQ,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC3F,sBAAuB,CAAC,OAAQ,UAAW,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC1G,mBAAoB,CAAC,OAAQ,SAAU,QAAS,OAAQ,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EACxH,oBAAqB,CAAC,OAAQ,SAAU,QAAS,OAAQ,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EACzH,oBAAqB,CAAC,OAAQ,QAAS,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC9F,iBAAkB,CAAC,OAAQ,OAAQ,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC1F,OAAU,CAAC,OAAQ,OAAQ,aAAc,WAAY,QAAS,SAAU,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC/H,kBAAmB,CAAC,OAAQ,SAAU,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC7F,mBAAoB,CAAC,QAAS,UAAW,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC5G,gBAAiB,CAAC,OAAQ,WAAY,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC7F,eAAgB,CAAC,OAAQ,OAAQ,QAAS,WAAY,YAAa,QAAS,SAAU,WAAY,aAAc,eAAgB,UAAW,UAAW,SAAU,eAAgB,OAAO,EACvL,kBAAmB,CAAC,OAAQ,cAAe,UAAW,UAAW,SAAU,eAAgB,OAAO,EAClG,cAAe,CAAC,OAAQ,OAAQ,OAAQ,UAAW,MAAO,UAAW,UAAW,SAAU,eAAgB,OAAO,EACjH,YAAa,CAAC,SAAU,aAAc,UAAW,UAAW,SAAU,eAAgB,OAAO,EAC7F,eAAgB,CAAC,gBAAiB,cAAe,cAAe,cAAe,cAAe,UAAW,UAAW,SAAU,eAAgB,OAAO,CACvJ,EACA,yBAA0B,CACxB,QAAW,CAAE,IAAK,EAAG,IAAK,EAAG,KAAM,GAAK,EACxC,UAAW,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,EACpD,cAAe,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,EAAI,EAClD,YAAa,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,EAAI,EAChD,cAAe,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,EAAI,EAClD,MAAS,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,EAClD,QAAW,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAC5C,eAAgB,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EACjD,eAAgB,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EACjD,YAAa,CAAE,IAAK,EAAG,IAAK,EAAG,KAAM,GAAK,EAC1C,mBAAoB,CAAE,IAAK,EAAG,IAAK,EAAG,KAAM,GAAK,EACjD,iBAAkB,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,EAAI,EAC7D,eAAgB,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,EAAI,EAC3D,eAAgB,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,GAAK,EACpD,eAAgB,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EACjD,OAAU,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,EACnD,QAAW,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAC5C,MAAS,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAC1C,OAAU,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAC3C,YAAa,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAC9C,aAAc,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAC/C,YAAa,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAC9C,aAAc,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAC/C,IAAO,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,EAChD,MAAS,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,EAClD,OAAU,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,EACnD,KAAQ,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,EACjD,OAAU,CAAE,IAAK,KAAM,IAAK,IAAK,KAAM,CAAE,EACzC,MAAS,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,EAAI,EACpD,UAAa,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,EACtD,YAAe,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,CAAE,EAChD,KAAQ,CAAE,IAAK,KAAM,IAAK,IAAK,KAAM,CAAE,EACvC,qBAAsB,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,EAAI,EACzD,kBAAmB,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,EAAI,EACtD,sBAAuB,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,EAAI,EAC1D,mBAAoB,CAAE,IAAK,EAAG,IAAK,IAAU,KAAM,EAAI,EACvD,iBAAkB,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,EAAI,EAC7D,cAAe,CAAE,IAAK,KAAW,IAAK,IAAU,KAAM,CAAE,CAC1D,EACA,YAAa,CACX,UACA,QACA,MACA,aACA,SACA,SACA,SACA,SACA,QACA,KACA,OACA,MACA,KACA,UACA,UACA,WACA,IACF,EACA,aAAc,CACZ,IACA,OACA,UACA,IACA,MACA,MACA,aACA,SACA,OACA,OACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,MACA,QACA,SACA,OACA,SACA,IACA,OACA,QACA,OACA,SACA,SACA,UACA,MACA,MACA,OACA,IACA,KACF,EACA,cAAe,CACb,KACA,KACA,KACF,EACA,OAAQ,CACN,QAAS,GACT,KAAM,WACN,MAAO,CACL,CACE,KAAM,MACN,KAAM,aACR,EACA,CACE,KAAM,OACN,KAAM,aACR,EACA,CACE,KAAM,OACN,KAAM,2DACR,EACA,CACE,KAAM,SACN,KAAM,uBACR,EACA,CACE,KAAM,OACN,KAAM,6BACR,EACA,CACE,KAAM,WACN,KAAM,mCACR,EACA,CACE,KAAM,OACN,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAyBR,EACA,CACE,KAAM,WACN,KAAM;AAAA;AAAA;AAAA;AAAA,gBAKR,EACA,CACE,KAAM,WACN,KAAM,0DACR,EACA,CACE,KAAM,SACN,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAUR,EACA,CACE,KAAM,QACN,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAUR,EACA,CACE,KAAM,QACN,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAYR,EACA,CACE,KAAM,gBACN,KAAM,oUACR,EACA,CACE,KAAM,QACN,KAAM;AAAA;AAAA,6FAE+EH,EAAI,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAS/F,EACA,CACE,KAAM,SACN,KAAM;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,OAsCR,EACA,CACE,KAAM,SACN,KAAM;AAAA;AAAA,kBAGR,EACA,CACE,KAAM,SACN,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAoBR,EACA,CACE,KAAM,UACN,KAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAWR,EACA,CACE,KAAM,SACN,KAAM,oEACR,EACA,CACE,KAAM,QACN,KAAM,gCACR,EACA,CACE,KAAM,QACN,KAAM,iCACR,EACA,CACE,KAAM,SACN,KAAM,kCACR,EACA,CACE,KAAM,KACN,KAAM,OACR,CACF,CACF,CACF,EACMI,EAAS,UAAW,CACxB,IAAMC,EAAiB,UACjBC,EAAa,UACbC,EAAe,UAGrB,MAAO,CACL,KAAM;AAAA,eACKF,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWzB,QAAS,eAAeA,CAAc;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,YA+BtC,MAAO;AAAA;AAAA,YAGP,KAAM,eAAeA,CAAc;AAAA;AAAA,YAGnC,OAAQ,eAAeA,CAAc;AAAA;AAAA,YAGrC,OAAQ,eAAeA,CAAc;AAAA;AAAA,YAGrC,IAAK,eAAeA,CAAc;AAAA;AAAA,YAGlC,KAAM,eAAeA,CAAc;AAAA;AAAA,YAGnC,KAAM,eAAeA,CAAc;AAAA;AAAA,YAGnC,OAAQ,eAAeA,CAAc;AAAA;AAAA;AAAA,YAIrC,IAAK,eAAeA,CAAc;AAAA;AAAA;AAAA,YAIlC,OAAQ;AAAA;AAAA,YAGR,MAAO,eAAeE,CAAY;AAAA;AAAA,YAGlC,OAAQ,eAAeA,CAAY;AAAA;AAAA,YAGnC,KAAM;AAAA;AAAA,YAGN,OAAQ;AAAA;AAAA,YAGR,OAAQ,eAAeA,CAAY;AAAA;AAAA,YAGnC,SAAU;AAAA;AAAA,YAGV,QAAS;AAAA;AAAA,YAGT,UAAW,eAAeD,CAAU;AAAA;AAAA;AAAA;AAAA,YAKpC,IAAK,eAAeA,CAAU;AAAA;AAAA;AAAA;AAAA,YAK9B,SAAU;AAAA,kBACIA,CAAU;AAAA;AAAA;AAAA;AAAA,YAKxB,WAAY,eAAeA,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA,QAMrC,SAAU;AAAA;AAAA,YAGV,MAAO,eAAeA,CAAU,0aAChC,KAAM,eAAeA,CAAU,o2BAC/B,KAAM,eAAeA,CAAU,2hBAC/B,KAAM,eAAeA,CAAU,giBAC/B,MAAO,eAAeA,CAAU,6cAChC,MAAO,eAAeA,CAAU,2aAChC,IAAK,eAAeA,CAAU,0wBAC9B,KAAM,eAAeA,CAAU,qaAC/B,MAAO,eAAeA,CAAU,6yBAChC,MAAO,eAAeA,CAAU,ojBAChC,KAAM,eAAeA,CAAU,2hBAC/B,OAAQ,eAAeA,CAAU,uZACjC,UAAW,eAAeA,CAAU,wjBACpC,OAAQ,eAAeA,CAAU,mkCACjC,UAAW,eAAeA,CAAU,wwBACpC,YAAa,eAAeA,CAAU,qwBACtC,QAAS,eAAeA,CAAU,ulBAClC,UAAW,eAAeA,CAAU,wZACpC,MAAO,eAAeA,CAAU,8jBAChC,KAAM,eAAeA,CAAU,w9BAC/B,WAAY,eAAeA,CAAU,grBACrC,YAAa,eAAeA,CAAU,+5BACtC,MAAO,eAAeA,CAAU,skCAClC,CACF,EAAG,EAGH,OAAO,QAAUf,GAAYU,GAAG,CAACO,EAAUT,EAAUU,IAAa,CAChE,GAAIV,IAAaU,EAAU,CACzB,aAAa,QAAQ,WAAY,KAAK,UAAU,OAAO,CAAC,EAGxD,IAAMC,EAAgBF,EAAS,MAAM,GAAG,EAExC,GAAI,CAAC,IAAI,cAAe,CAEtB,IAAMG,EAAgB,CAAC,OAAQ,QAAS,cAAe,SAAU,MAAO,MAAM,EAG9E,GAAID,EAAc,SAAS,OAAO,GAAK,CAAC,WAAY,WAAW,EAAE,KAAKE,GAAQF,EAAc,SAASE,CAAI,CAAC,EAAG,CAC3G,IAAI,OAAO,MAAM,EACjB,MACF,CAGIF,EAAc,CAAC,IAAM,QAAUA,EAAc,SAAS,MAAM,GAGrDC,EAAc,SAASD,EAAc,CAAC,CAAC,EADhD,cAAc,EAKVA,EAAc,CAAC,IAAM,eAEvB,IAAI,OAAO,MAAM,EACjB,oBAAoB,IAGpB,IAAI,OAAO,MAAM,EAEJ,CAAC,OAAQ,YAAa,OAAQ,MAAO,QAAS,cAAe,SAAU,MAAO,OAAQ,aAAa,EACvG,SAASA,EAAc,CAAC,CAAC,GAChC,cAAc,EAGZA,EAAc,CAAC,IAAM,SACvB,SAAS,gBAAgB,aAAa,aAAc,QAAQ,KAAO,OAAS,OAAO,EACnF,SAAS,cAAc,kDAAkD,EAAE,aAAa,UAAW,QAAQ,KAAO,oBAAsB,SAAS,EACjJ,SAAS,cAAc,wBAAwB,EAAE,aAAa,UAAW,QAAQ,KAAO,UAAY,SAAS,EAC7G,SAAS,cAAc,0CAA0C,EAAE,aAAa,UAAW,QAAQ,KAAO,UAAY,SAAS,GAIvI,CACF,CACF,CAAC,EAED,OAAO,KAAOnB,GAAYY,GAAG,CAACK,EAAUT,EAAUU,IAAa,CAE7D,GAAIV,IAAaU,EAAU,CACzB,IAAMI,EAASL,EAAS,SAAS,EAC7BK,IAAW,gBACT,KAAK,cACH,KAAK,WACP,KAAK,iBAAmB,CAAC,EACzB,uBAAuB,KAAK,aAAc,QAAQ,IAAI,GAIxDA,IAAW,iBACb,KAAK,YAAc,KAAK,eAAiB,OAAS,KAAK,aAAa,MAAM,GAAG,EAAE,CAAC,EAAI,oBAAoB,EACxG,KAAK,aAAe,KAAK,eAAiB,OAAS,KAAK,aAAa,MAAM,GAAG,EAAE,CAAC,EAAI,oBAAoB,GAE3G,IAAI,OAAO,MAAM,CACnB,CACF,CAAC,EAGD,SAASC,IAAc,CACrB,IAAMC,EAAa,SAEnB,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKMA,CAAU;AAAA;AAAA;AAAA;AAAA,QAIjBX,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOHW,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA,QAKjBX,EAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASNW,CAAU;AAAA;AAAA,QAEjBX,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUXA,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASHW,CAAU,yDAAyD,QAAQ,cAAgB,SAAW,gBAAkB,EAAE;AAAA;AAAA;AAAA,QAGjIX,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOLW,CAAU,yDAAyD,QAAQ,cAAgB,YAAc,gBAAkB,EAAE;AAAA;AAAA;AAAA,QAGpIX,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASLW,CAAU;AAAA;AAAA;AAAA;AAAA,QAIjB,QAAQ,YAAcX,EAAM,IAAMA,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOrCW,CAAU;AAAA;AAAA;AAAA;AAAA,QAIjBX,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOHW,CAAU;AAAA;AAAA;AAAA;AAAA,QAIjBX,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOLW,CAAU;AAAA;AAAA;AAAA;AAAA,QAIjBX,EAAM,GAAG;AAAA;AAAA;AAAA,MAIjB,CACA,SAASY,IAAO,CACd,IAAIC,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQWjB,EAAI,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQPA,EAAI,IAAI;AAAA;AAAA;AAAA,gCAGNA,EAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKbA,EAAI,OAAO;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBA8EvC,OAAAiB,EAAa,WAAW,KAAK,WAAa,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAWvCb,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA,cAIba,CAAU;AAAA;AAAA;AAAA;AAAA,gGAIwE,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBASzIA,CACX,CACA,SAASC,IAAW,CAClB,IAAIC,EAAa,KAAK,WAGlBC,EAAmB,OAAO,KAAKD,CAAU,EAC1C,KAAK,EACL,OAAO,CAACE,EAAKC,KACZD,EAAIC,CAAG,EAAIH,EAAWG,CAAG,EAClBD,GACN,CAAC,CAAC,EAEHE,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAmBF,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAoBnB,QAAQ,KAAO,iBAAmB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAmBpC,QAAQ,IAAM,iBAAmB,EAAE;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,YAoCnCnB,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAkBI,KAAK,gBAA+B,GAAb,UAAe;AAAA,UACxD,OAAO,KAAKgB,CAAgB,EAAE,IAAII,GAAa,CAE/C,IAAIC,EAAOD,EAAU,YAAY,EACjC,OAAAC,EAAOA,EAAK,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,EAC3C,kBAAkBA,CAAI,KAAKA,IAAS,KAAK,gBAAkB,WAAa,EAAE,IAAIA,CAAI,WAC3F,CAAC,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,UAIT,QAAQ,UAAU,IAAI,CAACC,EAASC,IAAU;AAAA,6DACSA,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAO7CD,CAAO;AAAA,yCACaC,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA,gDAKEA,CAAK;AAAA,cACvCvB,EAAM,KAAK;AAAA;AAAA;AAAA,OAGlB,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAwBA,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAmBV,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAU7B,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAU7B,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAiB/B,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAgBrB,QAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAcX,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAgBd,QAAQ,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAenB,QAAQ,IAAI;AAAA;AAAA,SAGnB,OAAAmB,EAAe,WAAW,KAAK,SAAW,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAW3CnB,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA,UAIbmB,CAAY;AAAA;AAAA;AAAA;AAAA,4FAIsE,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aASvIA,CACT,CACA,OAAO,gBAAkB,IAAM,CAY7B,MAAM,OAAO,CACX,MAAO,0DACP,QAbc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAcd,QAAS,CACP,SAAS,eAAe,aAAa,EAAE,MAAM,CAC/C,CACF,CAAC,CACH,EACA,OAAO,gBAAkB,IAAM,CAC7B,IAAMK,EAAmB,CACvB,YAAa,iBAAkB,YAAa,QAAS,kBACrD,MAAO,cAAe,SAAU,KAAM,QAAS,YAAa,KAC5D,SAAU,WAAY,UAAW,YAAa,WAAY,OAC1D,QAAS,OAAQ,UAAW,OAAQ,OAAQ,aAAc,WAC1D,WACF,EACMC,EAAkB,CACtB,UAAW,iBAAkB,sBAAuB,SAAU,WAC9D,YAAa,mBAAoB,WAAY,UAAW,UACxD,gBAAiB,cAAe,aAAc,SAAU,YACxD,cAAe,cAAe,aAAc,cAAe,SAC3D,mBAAoB,YAAa,UAAW,UAAW,UACvD,UAAW,YAAa,YAAa,aAAc,UAAW,SAC9D,eAAgB,mBAAoB,cAAe,cACnD,eAAgB,eAAgB,cAAe,aAC/C,cAAe,YAAa,eAAgB,UAAW,SACvD,YAAa,aAAc,eAAgB,UAAW,WACtD,WAAY,WAAY,YAAa,WAAY,SAAU,SAC3D,YAAa,WAAY,YAAa,eAAgB,WACtD,iBAAkB,WACpB,EAGMC,EAAmB,CACvB,UAAW,aAAc,cAAe,YAAa,cAAe,aAAc,eAAgB,eAAgB,eACpH,EACMC,EAAqB,CACzB,cAAe,YAAa,SAAU,cAAe,cACrD,aAAc,GAAGD,CACnB,EAEME,EAAc,CAClB,OAAQF,EACR,aAAc,CACZ,WAAY,UAAW,UAAW,QACpC,EACA,eAAgB,CACd,WAAY,UAAW,UAAW,SAAU,GAAGA,CACjD,EACA,SAAU,CACR,GAAGC,CACL,EACA,eAAgB,CACd,UACF,EACA,eAAgB,CACd,UAAW,WAAY,GAAGA,CAC5B,EACA,MAAO,CACL,UAAW,YAAa,mBAAoB,mBAAoB,YAChE,UAAW,UAAW,eAAgB,mBAAoB,cAC1D,UAAW,SAAU,YAAa,aAAc,eAAgB,WAChE,YAAa,YAAa,YAAa,eAAgB,iBACvD,WACF,EACA,KAAM,CACJ,eAAgB,gBAAiB,iBAAkB,eACnD,mBAAoB,YAAa,iBAAkB,YAAa,WAChE,aAAc,qBAAsB,YAAa,uBACjD,UACF,EACA,UAAW,CACT,SAAU,SACZ,CACF,EAEME,EAAiB,CACrB,CAAE,KAAM,CAAC,OAAQ,QAAS,SAAU,UAAU,EAAG,OAAQ,CAAC,cAAc,CAAE,EAC1E,CAAE,KAAM,CAAC,SAAU,MAAO,QAAS,MAAO,OAAQ,OAAQ,SAAU,UAAW,OAAQ,WAAY,UAAW,OAAQ,MAAO,SAAU,iBAAkB,iBAAkB,OAAQ,WAAY,OAAQ,SAAU,UAAW,gBAAiB,sBAAuB,cAAe,mBAAoB,oBAAqB,oBAAqB,iBAAkB,UAAW,UAAW,UAAW,UAAW,UAAW,iBAAkB,UAAW,cAAe,eAAgB,WAAY,eAAgB,qBAAsB,cAAe,SAAU,cAAc,EAAG,OAAQ,CAAC,QAAQ,CAAE,EACrkB,CAAE,KAAM,CAAC,IAAK,QAAQ,EAAG,OAAQ,CAAC,gBAAgB,CAAE,EACpD,CAAE,KAAM,CAAC,SAAS,EAAG,OAAQ,CAAC,gBAAgB,CAAE,EAChD,CAAE,KAAM,CAAC,QAAQ,EAAG,OAAQ,CAAC,gBAAgB,CAAE,EAC/C,CAAE,KAAM,CAAC,QAAS,OAAO,EAAG,OAAQ,CAAC,OAAO,CAAE,EAC9C,CAAE,KAAM,CAAC,MAAM,EAAG,OAAQ,CAAC,SAAU,MAAM,CAAE,EAC7C,CAAE,KAAM,CAAC,SAAU,KAAK,EAAG,OAAQ,CAAC,WAAW,CAAE,EACjD,CAAE,KAAM,CAAC,MAAO,UAAW,UAAW,QAAS,SAAU,SAAU,MAAO,OAAQ,SAAU,YAAY,EAAG,OAAQ,CAAC,UAAU,CAAE,EAChI,CAAE,KAAM,CAAC,QAAS,QAAS,QAAS,QAAS,KAAM,KAAM,KAAM,MAAO,WAAY,SAAS,EAAG,OAAQ,CAAC,QAAQ,CAAE,EACjH,CAAE,KAAM,CAAC,WAAY,QAAS,QAAQ,EAAG,OAAQ,CAAC,QAAQ,CAAE,EAC5D,CAAE,KAAM,CAAC,SAAU,QAAS,SAAU,OAAO,EAAG,OAAQ,CAAC,QAAQ,CAAE,EACnE,CAAE,KAAM,CAAC,SAAU,MAAO,MAAO,UAAW,QAAS,OAAQ,MAAM,EAAG,OAAQ,CAAC,QAAQ,CAAE,CAC3F,EAEA,SAASC,EAAmBC,EAAQ,CAClC,OAAO,MAAM,KAAK,IAAI,IAAIA,EAAO,QAAQC,GAASJ,EAAYI,CAAK,CAAC,CAAC,CAAC,CACxE,CAEA,SAASC,GAAwB,CAC/B,IAAMC,EAAuB,CAAC,EAE9B,OAAAL,EAAe,QAAQG,GAAS,CAC9B,IAAMG,EAAiBL,EAAmBE,EAAM,MAAM,EACtDA,EAAM,KAAK,QAAQI,GAAO,CACxBF,EAAqBE,CAAG,EAAID,CAC9B,CAAC,CACH,CAAC,EAEMD,CACT,CAEA,IAAMA,EAAuBD,EAAsB,EAE7CI,EAAqB,CACzB,MAAO,CAAC,SAAU,MAAO,eAAgB,UAAW,UAAW,WAAY,OAAQ,aAAc,cAAe,aAAc,iBAAkB,aAAc,SAAU,OAAQ,MAAO,YAAa,MAAO,YAAa,WAAY,OAAQ,UAAW,cAAe,WAAY,WAAY,OAAQ,MAAO,OAAQ,OAAQ,QAAS,OAAO,EAC7U,OAAQ,CAAC,YAAa,WAAY,OAAQ,WAAY,OAAQ,WAAY,MAAM,EAChF,OAAQ,CAAC,WAAY,QAAS,WAAY,OAAO,EACjD,SAAU,CAAC,WAAY,OAAO,EAC9B,SAAU,CAAC,iBAAkB,eAAgB,OAAQ,UAAW,WAAY,OAAQ,YAAa,YAAa,OAAQ,cAAe,WAAY,WAAY,OAAQ,MAAM,EAC3K,IAAK,CAAC,MAAO,cAAe,WAAY,SAAU,aAAc,gBAAiB,QAAS,UAAW,iBAAkB,QAAS,MAAO,SAAU,SAAU,OAAO,EAClK,EAAG,CAAC,WAAY,OAAQ,WAAY,OAAQ,iBAAkB,MAAO,SAAU,MAAM,EACrF,OAAQ,CAAC,YAAa,WAAY,OAAQ,aAAc,cAAe,aAAc,iBAAkB,aAAc,OAAQ,OAAQ,OAAO,EAC5I,SAAU,CAAC,WAAY,OAAQ,MAAM,EACrC,MAAO,CAAC,KAAK,EACb,OAAQ,CAAC,QAAS,kBAAmB,sBAAuB,SAAU,UAAW,OAAQ,iBAAkB,UAAW,MAAO,SAAU,OAAO,EAC9I,MAAO,CAAC,WAAY,WAAY,cAAe,OAAQ,QAAS,UAAW,KAAK,EAChF,MAAO,CAAC,WAAY,WAAY,cAAe,SAAU,OAAQ,QAAS,cAAe,SAAU,UAAW,MAAO,OAAO,EAC5H,OAAQ,CAAC,QAAS,QAAS,MAAO,SAAU,MAAM,EAClD,MAAO,CAAC,UAAW,OAAQ,QAAS,MAAO,SAAS,EACpD,KAAM,CAAC,iBAAkB,SAAU,eAAgB,UAAW,SAAU,OAAQ,aAAc,QAAQ,EACtG,KAAM,CAAC,UAAW,UAAW,aAAc,MAAM,EACjD,KAAM,CAAC,KAAM,cAAe,OAAQ,WAAY,QAAS,iBAAkB,MAAO,QAAS,MAAM,EACjG,OAAQ,CAAC,QAAS,cAAe,QAAS,YAAa,WAAY,iBAAkB,MAAO,MAAM,EAClG,MAAO,CAAC,QAAS,SAAU,MAAM,EACjC,GAAI,CAAC,WAAY,QAAS,MAAM,EAChC,GAAI,CAAC,OAAO,EACZ,MAAO,CAAC,QAAQ,EAChB,GAAI,CAAC,UAAW,UAAW,UAAW,OAAO,EAC7C,GAAI,CAAC,QAAS,UAAW,QAAQ,EACjC,GAAI,CAAC,OAAQ,QAAS,OAAQ,UAAW,UAAW,UAAW,SAAU,UAAW,QAAS,SAAU,OAAO,EAC9G,SAAU,CAAC,MAAO,OAAO,EACzB,MAAO,CAAC,OAAQ,MAAO,MAAO,MAAO,UAAW,OAAO,EACvD,OAAQ,CAAC,OAAQ,OAAQ,SAAU,OAAQ,OAAQ,SAAU,OAAO,EACpE,MAAO,CAAC,SAAU,MAAO,OAAQ,OAAO,EACxC,MAAO,CAAC,OAAQ,OAAO,EACvB,KAAM,CAAC,MAAO,SAAU,WAAY,OAAQ,WAAY,OAAQ,iBAAkB,MAAO,QAAS,QAAQ,EAC1G,IAAK,CAAC,OAAQ,OAAO,EACrB,SAAU,CAAC,MAAM,EACjB,IAAK,CAAC,MAAM,EACZ,MAAO,CAAC,UAAW,OAAQ,QAAS,MAAO,SAAS,EACpD,OAAQ,CAAC,SAAU,OAAO,EAC1B,KAAM,CAAC,OAAO,EACd,KAAM,CAAC,UAAU,EACjB,OAAQ,CAAC,MAAO,OAAQ,MAAM,EAC9B,IAAK,CAAC,OAAQ,UAAU,EACxB,IAAK,CAAC,OAAQ,UAAU,EACxB,QAAS,CAAC,MAAM,EAChB,OAAQ,CAAC,MAAM,EACf,QAAS,CAAC,WAAY,UAAW,YAAa,SAAU,SAAU,OAAQ,eAAgB,cAAe,YAAa,SAAU,OAAO,EACvI,MAAO,CAAC,OAAQ,MAAO,MAAO,MAAO,UAAW,OAAO,EAEvD,IAAK,CAAC,QAAS,SAAU,UAAW,sBAAuB,OAAO,EAClE,KAAM,CAAC,IAAK,YAAY,EACxB,KAAM,CAAC,IAAK,IAAK,QAAS,SAAU,KAAM,IAAI,EAC9C,OAAQ,CAAC,KAAM,KAAM,GAAG,EACxB,QAAS,CAAC,KAAM,KAAM,KAAM,IAAI,EAChC,KAAM,CAAC,KAAM,KAAM,KAAM,IAAI,EAC7B,SAAU,CAAC,QAAQ,EACnB,QAAS,CAAC,QAAQ,EAClB,KAAM,CAAC,IAAK,IAAK,KAAM,KAAM,SAAU,aAAc,cAAc,EACnE,IAAK,CAAC,OAAQ,IAAK,IAAK,QAAS,QAAQ,EACzC,OAAQ,CAAC,UAAW,qBAAqB,EACzC,eAAgB,CAAC,KAAM,KAAM,KAAM,KAAM,gBAAiB,oBAAqB,cAAc,EAC7F,eAAgB,CAAC,KAAM,KAAM,IAAK,KAAM,KAAM,KAAM,gBAAiB,oBAAqB,cAAc,EACxG,KAAM,CAAC,SAAU,aAAc,cAAc,EAC7C,SAAU,CAAC,eAAe,EAC1B,KAAM,CAAC,YAAa,mBAAoB,IAAK,IAAK,QAAS,QAAQ,EACnE,OAAQ,CAAC,IAAK,IAAK,QAAS,SAAU,cAAe,gBAAgB,EACrE,QAAS,CAAC,KAAM,MAAO,MAAM,EAC7B,cAAe,CAAC,KAAM,OAAQ,QAAQ,EACtC,oBAAqB,CAAC,IAAI,EAC1B,YAAa,CAAC,KAAM,MAAO,WAAY,KAAM,KAAM,KAAM,IAAI,EAC7D,iBAAkB,CAAC,KAAM,QAAS,eAAgB,UAAW,OAAQ,UAAW,UAAW,WAAY,eAAe,EACtH,kBAAmB,CAAC,KAAM,eAAgB,kBAAmB,kBAAkB,EAC/E,kBAAmB,CAAC,KAAM,MAAO,QAAS,mBAAoB,kBAAkB,EAChF,eAAgB,CAAC,UAAW,WAAW,EACvC,QAAS,CAAC,cAAe,eAAe,EACxC,QAAS,CAAC,OAAQ,cAAe,QAAS,YAAa,YAAa,WAAY,QAAQ,EACxF,QAAS,CAAC,OAAQ,cAAe,QAAS,YAAa,YAAa,WAAY,QAAQ,EACxF,QAAS,CAAC,OAAQ,cAAe,QAAS,YAAa,YAAa,WAAY,QAAQ,EACxF,QAAS,CAAC,OAAQ,cAAe,QAAS,YAAa,YAAa,WAAY,QAAQ,EACxF,eAAgB,CAAC,KAAM,eAAgB,UAAU,EACjD,QAAS,CAAC,OAAQ,sBAAuB,IAAK,IAAK,QAAS,SAAU,QAAQ,EAC9E,YAAa,CAAC,IAAI,EAClB,aAAc,CAAC,KAAM,WAAY,QAAQ,EACzC,SAAU,CAAC,KAAM,KAAM,IAAI,EAC3B,aAAc,CAAC,IAAK,IAAK,GAAG,EAC5B,mBAAoB,CAAC,KAAM,eAAgB,mBAAoB,mBAAoB,kBAAkB,EACrG,YAAa,CAAC,IAAK,IAAK,IAAK,YAAa,YAAa,YAAa,mBAAoB,mBAAmB,EAC3G,OAAQ,CAAC,IAAI,EACb,aAAc,CAAC,gBAAiB,aAAc,OAAQ,cAAe,MAAM,CAC7E,EAGA,SAASC,EAAmBC,EAAQ,CAClC,GAAIA,EAAO,SAAW,EAAG,MAAO,CAAC,EAGjC,IAAMC,EAAWD,EAAO,CAAC,EAAE,IAI3B,MAAO,EAHSA,EAAO,MAAME,GAASA,EAAM,MAAQD,CAAQ,CAI9D,CAGA,IAAME,EAAiB,KAAK,iBAAiB,IAAI5C,GAAM,cAAcA,EAAI,QAAQ,IAAI,EAAE,KAAK,EAAE,OAAO2C,GAASA,CAAK,EAC7GE,EAAwBL,EAAmBI,CAAc,EAE/D,SAASE,EAAuBC,EAAY,CAC1C,OAAOA,EACJ,OAAOC,GAAQ,CAAC,KAAK,YAAcA,EAAK,SAAS,KAAK,UAAU,CAAC,EACjE,IAAIA,GAAQ;AAAA;AAAA;AAAA,YAGP,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAO7BA,CAAI;AAAA;AAAA;AAAA,mCAGJA,CAAI;AAAA;AAAA,YAE3BA,CAAI;AAAA,kBAEV,EAAE,KAAK,EAAE,CACb,CAEA,IAAIC,EAAkB,GACtB,KAAK,iBAAiB,QAAQjD,GAAM,CAClC,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAE5CkD,EAA2BX,EAAmBI,EAAM,GAAG,EAAIJ,EAAmBI,EAAM,GAAG,EAAI,KAG3FQ,EAAW,KACX,KAAK,YAAY,SAASR,EAAM,GAAG,GAAK,KAAK,aAAa,SAASA,EAAM,GAAG,EAC5D,CAAC,IAAK,SAAU,OAAQ,QAAS,SAAU,UAAU,EACxD,SAASA,EAAM,GAAG,EAC/BQ,EAAWL,EAAuBV,EAAqBO,EAAM,GAAG,CAAC,EAEjEQ,EAAWL,EAAuBV,EAAqB,GAAM,EAEtD,KAAK,cAAc,SAASO,EAAM,GAAG,EAC9CQ,EAAW,KAEXA,EAAWL,EAAuBV,EAAqBO,EAAM,GAAG,GAAKhB,CAAe,EAGtFsB,EAAkB;AAAA;AAAA,UAEZC,GAA4BL,EAAwB;AAAA;AAAA;AAAA,cAGhD,KAAK,yBAA2B,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAMbF,EAAM,GAAG;AAAA;AAAA;AAAA,gBAGrCG,EAAuBI,CAAwB,CAAC;AAAA;AAAA;AAAA;AAAA,eAI/C,EAAE;AAAA;AAAA;AAAA,qCAGkBA,GAA4BL,EAAwB,GAAK,MAAM;AAAA,YACxF,KAAK,0BAA4B,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAS1CC,EAAuBpB,CAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQ1C,KAAK,yBAA2B,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAMhBiB,EAAM,GAAG;AAAA;AAAA;AAAA,cAGlCQ,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAoBpB,CAAC,EAED,MAAM,OAAO,CACX,MAAO,mBACP,QAASF,EACT,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,SAAU,CAEV,EACA,WAAY,CACV,aAAa,SAAS,eAAe,WAAW,EAAE,MAAM,KAAK,CAAC,CAChE,CACF,CAAC,CACH,EACA,SAASG,IAAY,CAEnB,SAASC,EAAYV,EAAO,CAC1B,GAAM,CAAE,GAAA3C,EAAI,KAAAuB,EAAM,SAAA+B,EAAU,MAAAC,CAAM,EAAIZ,EAChCa,EAAcF,GAAYA,EAAS,OAAS,EAC5CG,EAAYF,EAAM,QACxB,OAAI,KAAK,UAAY,KAAK,QAAUZ,EAAM,QAAU,KAAK,eACvDA,EAAM,MAAM,SAAW,IAIN;AAAA;AAAA,4EAEqDY,EAAM,SAAW,0BAA4B,EAAE,iBAAiBvD,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA,sCAKxGwD,EAAc,GAAK,QAAQ,yFAAyFD,EAAM,UAAY,iBAAmB,cAAc;AAAA,yCACpKvD,CAAE;AAAA,gBAC3BwD,EAActD,EAAM,UAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCAMVF,CAAE;AAAA,gBAC1ByD,EAAYvD,EAAM,IAAMA,EAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAQhBF,CAAE;AAAA;AAAA,cAE1BuB,CAAI;AAAA;AAAA;AAAA,UAGRiC,EAAc,8BAA8BD,EAAM,UAAY,SAAW,EAAE,KAAOD,EAAS,IAAII,GAASL,EAAYK,CAAK,CAAC,EAAE,KAAK,EAAE,EAAI,QAAU,EAAE;AAAA;AAAA,KAK3J,CAEA,OAAO,QAAQ,KAAK,IAAIf,GAASU,EAAYV,CAAK,CAAC,EAAE,KAAK,EAAE,CAC9D,CACA,SAASgB,IAAY,CAGnB,GADI,CADS,SAAS,eAAe,QAAQ,GAEzC,KAAK,eAAgB,OAGzB,SAASC,EAAoBnB,EAAQ,CACnC,GAAIA,EAAO,SAAW,EAAG,MAAO,CAAC,EACjC,IAAMC,EAAWD,EAAO,CAAC,EAAE,IAC3B,OAAOA,EAAO,MAAME,GAASA,EAAM,MAAQD,CAAQ,EAAID,EAAS,CAAC,CACnE,CACA,SAASoB,EAAqBpB,EAAQ,CACpC,GAAIA,EAAO,SAAW,EAAG,MAAO,CAAC,EACjC,IAAMqB,EAAkB,CAAC,EAEzB,OAAArB,EAAO,QAAQE,GAAS,CACtB,OAAO,KAAKA,EAAM,OAAS,CAAC,CAAC,EAAE,QAAQjD,GAAQ,CAC7CoE,EAAgBpE,CAAI,GAAKoE,EAAgBpE,CAAI,GAAK,GAAK,CACzD,CAAC,CACH,CAAC,EAEM,OAAO,YACZ,OAAO,QAAQoE,CAAe,EAC3B,OAAO,CAAC,CAAC1C,EAAK2C,CAAK,IAAMA,IAAUtB,EAAO,MAAM,EAChD,IAAI,CAAC,CAACrB,CAAG,IAAM,CAACA,EAAKqB,EAAO,CAAC,EAAE,MAAMrB,CAAG,CAAC,CAAC,CAC/C,CACF,CAGA,IAAI4C,EAAkB,2EAChBC,EAAqB,yCACrBC,EAA4B,+EAC5BC,EAAc,gDACdC,EAAc,0CACdC,EAAa,6CACbC,EAAa,2CACbC,EAAgB,6DAChBC,EAAgB,2CAChBC,EAAa,6BAEbC,EAAY,CAChB,GAAM,UACN,GAAM,aACN,GAAM,eACN,GAAM,uCACN,GAAM,6CACN,GAAM,cACN,GAAM,6CACN,GAAM,eACN,GAAM,UACN,GAAM,qBACN,GAAM,qBACN,GAAM,WACN,GAAM,eACN,GAAM,uBACN,GAAM,QACR,EACMC,EAAc,CAClB,OAAQ,CACN,UAAW,aACX,UAAW,eACX,UAAW,oBACX,UAAW,qBACX,UAAW,iCACX,UAAW,oBACX,UAAW,qBACX,YAAa,2BACb,YAAa,iBACb,YAAa,gBACb,YAAa,qBACb,YAAa,mBACf,EACA,QAAS,CACP,YAAa,+BACb,YAAa,iCACb,YAAa,0BACb,YAAa,yBACb,YAAa,qBACb,YAAa,qBACb,YAAa,oBACb,YAAa,qBACb,YAAa,qBACb,YAAa,uBACb,YAAa,qBACf,EACA,SAAU,CACR,YAAa,qBACb,YAAa,mBACb,YAAa,sBACb,WAAY,oBACZ,YAAa,4BACb,YAAa,wBACb,WAAY,qBACZ,YAAa,0BACb,YAAa,gCACf,CACF,EACMC,EAAoB,CACxB,YAAa,WAAY,UAAW,WAAY,UAAW,QAAS,WACpE,iBAAkB,SAAU,OAAQ,WAAY,QAAS,aAAc,OACvE,kBAAmB,WAAY,WAAY,WAAY,SAAU,WAAY,UAC/E,EACMC,EAAa,CACjB,SAAU,WAAY,QAAS,OAAQ,iBAAkB,QAAS,OAAQ,SAC1E,QAAS,QAAS,SAAU,WAAY,QAAS,QAAS,QAAS,SAAU,SAC7E,MAAO,OAAQ,OAAQ,MAAO,MAChC,EACMC,EAAmB,CAAC,MAAO,YAAa,MAAO,YAAa,WAAY,QAAS,OAAQ,MAAM,EAC/FC,EAAmB,CAAC,SAAU,gBAAiB,YAAa,SAAU,QAAS,MAAO,eAAgB,OAAQ,OAAQ,UAAW,cAAe,MAAO,WAAY,QAAS,OAAQ,SAAU,OAAO,EACrMnC,EAAiB,KAAK,iBAAiB,IAAI5C,GAAM,cAAcA,EAAI,QAAQ,IAAI,EAAE,KAAK,EAAE,OAAO2C,GAASA,CAAK,EAC7GqC,EAAiBpB,EAAoBhB,CAAc,EACnDqC,EAAmBpB,EAAqBjB,CAAc,EACtDsC,EAA0B,KAAK,wBAC/BC,EAA2B,KAAK,yBAChCC,EAAc,KAAK,YACnBC,GAAe,KAAK,aACpBC,GAAgB,KAAK,cAG3B,SAASC,GAAuBhE,EAAM3B,EAAO,CAC3C,MAAO;AAAA,uBACYoE,CAAe,gDAAgDzC,CAAI,OAAOA,CAAI;AAAA,uBAC9EyC,CAAe,+DAA+DzC,CAAI,OAAO3B,EAAQ,MAAQ,IAAI;AAAA,KAElI,CACA,SAAS4F,EAAYjE,EAAMkE,EAAM7F,EAAO8F,EAAKC,EAAKC,EAAM,CACtD,MAAO;AAAA,uBACY5B,CAAe,gDAAgDzC,CAAI,OAAOA,CAAI;AAAA;AAAA,iBAEpF8C,CAAU;AAAA,iBACVC,CAAU;AAAA,gBACXmB,CAAI;AAAA;AAAA,iBAEH7F,CAAK,KAAK8F,EAAM,QAAQA,CAAG,IAAM,EAAE,IAAIC,EAAM,QAAQA,CAAG,IAAM,EAAE,IAAIC,EAAO,SAASA,CAAI,IAAM,EAAE;AAAA,2CACtErE,CAAI;AAAA;AAAA;AAAA;AAAA,KAK7C,CACA,SAASsE,EAAetE,EAAM3B,EAAO,CACnC,MAAO;AAAA,uBACYoE,CAAe,gDAAgDzC,CAAI,OAAOA,CAAI;AAAA;AAAA,iBAEpFgD,CAAa;AAAA,iBACbC,CAAa;AAAA;AAAA,2CAEajD,CAAI;AAAA;AAAA,gCAEf3B,CAAK;AAAA,KAEnC,CAGA,IAAMkG,EAAsB,KACtB,KAAK,eAAiB,QAAQ,oBAAoB,EAE3C;AAAA;AAAA;AAAA,+EAGgE3B,CAAW;AAAA,iCACzD,KAAK,eAAiB,OAAS,WAAa,EAAE;AAAA,YACnE,OAAO,KAAKQ,CAAW,EAAE,IAAIzC,GAAS;AAAA,+BACnBA,CAAK;AAAA,gBACpB,OAAO,KAAKyC,EAAYzC,CAAK,CAAC,EAAE,IAAI6D,GAAU;AAAA,iCAC7BA,CAAM,KAAK,KAAK,eAAiBA,EAAS,WAAa,EAAE,IAAIpB,EAAYzC,CAAK,EAAE6D,CAAM,CAAC;AAAA,eACzG,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,WAEd,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAcJ,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAchB,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAMuB,KAAK,eAAiB,OAAS,SAAW,EAAE;AAAA;AAAA;AAAA;AAAA,qEAIhC,KAAK,eAAiB,OAAS,SAAW,EAAE;AAAA;AAAA;AAAA,YAGrG7F,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6DAMqCiE,CAAW;AAAA,UAC9D,OAAO,KAAKO,CAAS,EAAE,IAAIsB,GAAQ;AAAA,2BAClBA,CAAI,KAAKtB,EAAUsB,CAAI,CAAC;AAAA,SAC1C,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA,KAOXC,EAAgB,CAACC,EAAcC,EAAgB/E,EAAKgF,EAAS,OAAS,CAC1E,IAAIC,EAAS,GAGPC,EAAa,iDAGbC,EAAoB,CACtB,aAAc,mBAAoB,aAAc,cAChD,SAAU,gBAAiB,eAAgB,SAAU,WACzD,EAEA,cAAO,KAAKL,CAAY,EAAE,QAAQxG,GAAQ,CACtC,IAAIE,EAAQsG,EAAaxG,CAAI,EACzB8G,EAAW,GAAGL,CAAc,KAAKzG,CAAI,KAGnC+G,EAAmBvB,EAAwBxF,CAAI,EACrD,GAAI+G,EAAkB,CAClB,IAAIC,EAAUD,EAAiB,IAAIE,GAC/B,kBAAkBA,CAAG,KAAKA,IAAQ/G,EAAQ,WAAa,EAAE,IAAI+G,CAAG,WACpE,EAAE,KAAK,EAAE,EAETN,GAAU;AAAA;AAAA,6BAEOrC,EAAgB,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA,sCAGnC5C,CAAG,OAAO1B,CAAI,OAAOE,CAAK,IAAIwG,EAAS,MAAMA,CAAM,IAAM,EAAE;AAAA;AAAA,sBAE3E1G,CAAI;AAAA;AAAA,iCAEOyE,CAAW,YAAYC,CAAW,eAAeoC,CAAQ;AAAA,sBACpEE,CAAO;AAAA,0BAErB,SAAWvB,EAAyBzF,CAAI,EAAG,CACzC,GAAM,CAAE,IAAAgG,EAAK,IAAAC,EAAK,KAAAC,EAAK,EAAIT,EAAyBzF,CAAI,EAGlDkH,GAAahH,EAAQA,EAAM,MAAM,wBAAwB,GAAK,CAAC,EAAI,CAAC,EACpEiH,GAAiBjH,EAAQA,EAAM,MAAM,qBAAqB,EAAE,OAAO,OAAO,GAAK,CAAC,EAAI,CAAC,EAE3FyG,GAAU;AAAA;AAAA,2BAEOrC,EAAgB,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA,oCAGnC5C,CAAG,OAAO1B,CAAI,OAAOE,CAAK,IAAIwG,EAAS,MAAMA,CAAM,IAAM,EAAE;AAAA;AAAA,oBAE3E1G,CAAI;AAAA;AAAA,gEAIdkH,GAAW,QAAQ,CAAClG,GAAMe,KAAU,CAChC,IAAMqF,GAAe,WAAWpG,EAAI,EAC9BqG,GAAYrG,GAAK,MAAM,YAAY,EACnCsG,GAAOD,GAAYA,GAAU,CAAC,EAAI,GAGlCE,GAAgBvG,GAAK,SAAS,MAAM,EAAI,cAAgB,cAG1DwG,GACJ,OAAQxH,EAAM,CACV,IAAK,QACL,IAAK,SACL,IAAK,YACL,IAAK,cACL,IAAK,OACDwH,GAAa,CAAC,GAAI,MAAO,KAAK,EAC9B,MACJ,IAAK,qBACL,IAAK,sBACDA,GAAa,CAAC,GAAI,KAAM,GAAG,EAC3B,MACJ,QACIA,GAAa,CAAC,GAAI,KAAM,IAAK,MAAO,KAAM,KAAM,MAAO,MAAO,MAAO,KAAM,MAAO,MAAO,MAAO,KAAM,KAAM,OAAQ,OAAQ,KAAM,KAAM,KAAM,KAAM,IAAI,EACxJ,KACR,CAGAb,GAAU,oBAAoBY,EAAa,WAE3C,IAAME,GAAgB,kBAAkBhD,CAAW,YAAYC,CAAW;AAAA,uCACjD+B,CAAc,KAAKzG,CAAI;AAAA,+BAC/B+B,EAAK,QAAQqF,EAAY;AAAA,oBACpCN,CAAQ,0BAA0BK,GAAe,OAAS,EAAI,aAAaA,GAAe,KAAK,GAAG,CAAC,IAAM,EAAE;AAAA;AAAA,sBAEzGK,GAAW,IAAIE,IACf,kBAAkBA,EAAU,KAAKA,KAAeJ,GAAO,WAAa,EAAE,IAAII,EAAU,WACxF,EAAE,KAAK,EAAE,CAAC,YAERC,GAAe,iBAAiBhD,CAAU,YAAYC,CAAU;AAAA,sCAC9CoB,CAAG,UAAUC,CAAG,WAAWC,EAAI,YAAYkB,EAAY;AAAA,gDAC7CX,CAAc,KAAKzG,CAAI;AAAA,+BACxC+B,EAAK,qBAAqBuF,EAAI;AAAA,oBACzCR,CAAQ,0BAA0BK,GAAe,OAAS,EAAI,aAAaA,GAAe,KAAK,GAAG,CAAC,IAAM,EAAE;AAAA,iEAGjHR,GAAU;AAAA,kCACUhC,CAAU,YAAYC,CAAU;AAAA,2CACvBoB,CAAG,UAAUC,CAAG,WAAWC,EAAI,YAAYkB,EAAY;AAAA,oDAC9CX,CAAc,KAAKzG,CAAI;AAAA,mCACxC+B,EAAK,qBAAqBuF,EAAI;AAAA,wBACzCR,CAAQ,0BAA0BK,GAAe,OAAS,EAAI,aAAaA,GAAe,KAAK,GAAG,CAAC,IAAM,EAAE;AAAA;AAAA,oBAE/GnH,IAAS,WAAaA,IAAS,UAAY2H,GAAeF,EAAa;AAAA,uBAEjF,CAAC,GAGGN,GAAe,OAAS,GAAKD,GAAW,SAAW,KACnDP,GAAU;AAAA,kCACUhC,CAAU,YAAYC,CAAU;AAAA,2CACvB1E,CAAK;AAAA,iCACf4G,CAAQ;AAAA,iBAI/BH,GAAU,QACZ,SAAWE,EAAkB,SAAS7G,CAAI,EAEtC2G,GAAU;AAAA;AAAA,6BAEOrC,EAAgB,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA,sCAGnC5C,CAAG,OAAO1B,CAAI,OAAOE,CAAK,IAAIwG,EAAS,MAAMA,CAAM,IAAM,EAAE;AAAA;AAAA,sBAE3E1G,CAAI;AAAA;AAAA,mCAES6E,CAAa,YAAYC,CAAa;AAAA,+BAC1CgC,CAAQ,8DAA8D5G,CAAK,kBAC3F,CAEH,IAAM0H,EAAkBhB,EAAW,KAAK1G,CAAK,GAAKA,IAAU,KACtD2H,EAAgBD,GAAmB1H,IAAU,KAAO,UAAYA,EAEtEyG,GAAU;AAAA;AAAA,2BAEKrC,EAAgB,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA,kCAGrC5C,CAAG,OAAO1B,CAAI,OAAOE,CAAK,IAAIwG,EAAS,MAAMA,CAAM,IAAM,EAAE;AAAA;AAAA,sBAEvE1G,CAAI;AAAA;AAAA;AAAA,2BAGC2E,CAAU;AAAA,2BACVC,CAAU;AAAA;AAAA,2BAEViD,CAAa;AAAA,oBACpBD,EAAkB,iBAAiB1H,CAAK,IAAM,EAAE;AAAA,6BACvC4G,CAAQ;AAAA;AAAA;AAAA,mBAI7B,CACJ,CAAC,EAEMH,CACT,EAEMmB,EAA+B,IAAM,CACzC,IAAInB,EAAS,GAGPC,EAAa,iDAGnB,cAAO,KAAK,QAAQ,IAAI,aAAa,EAAE,QAAQlF,GAAO,CACpD,IAAMxB,EAAQ,QAAQ,IAAI,cAAcwB,CAAG,EACrCoF,EAAW,8BAA8BpF,CAAG,KAG5CqG,EAAUnB,EAAW,KAAK1G,CAAK,EAC/B8H,EAAY,CAAC,MAAM,WAAW9H,CAAK,CAAC,GAAK,SAASA,CAAK,EAEzD+H,EAAY,OACZrD,EAAa,2CAEboD,IAAWC,EAAY,UAG3BtB,GAAU;AAAA;AAAA,mBAEGrC,EAAgB,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,yCAEtB5C,CAAG;AAAA,YAChCA,CAAG;AAAA;AAAA;AAAA,mBAGIiD,CAAU;AAAA,mBACVC,CAAU;AAAA,kBACXqD,CAAS;AAAA,mBACR/H,CAAK;AAAA,YACZ6H,EAAU,iBAAiB7H,CAAK,IAAM,EAAE;AAAA,qBAC/B4G,CAAQ;AAAA;AAAA;AAAA;AAAA,OAKzB,CAAC,EAEM;AAAA,6DACkD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,2BAEtFxC,CAAe;AAAA;AAAA;AAAA;AAAA,qBAIrBC,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+DAWwB,KAAK,kBAAoB,SAAW,EAAE;AAAA,YACzFoC,CAAM;AAAA;AAAA;AAAA,KAIhB,EAEMuB,EAAwB,IAAM,CAC7B5C,IAAgB,KAAK,aAAe,MACzC,IAAI6C,EAAU,KACVxB,EAAS,GACTyB,EAAc,KACd9C,GACF,OAAO,KAAKA,CAAc,EAAE,QAAQ+C,GAAY,CAC9C,IAAMpF,EAAQqC,EAAe+C,CAAQ,CACvC,CAAC,EAGH,IAAItI,EAAM,KACN,KAAK,cACPA,EAAM,QAAQ,IAAI,YAAY,GAAG,KAAK,aAAa,IAAI,EAEvDA,EAAM,QAAQ,IAAI,OAIpB,IAAIuI,EAAW;AAAA,eACJ7D,CAAW;AAAA,eACXC,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKG,KAAK,mBAAqB,OAAS,WAAa,EAAE;AAAA,gCAC/C,KAAK,mBAAqB,UAAY,WAAa,EAAE;AAAA,eAG7E6D,EAAc,GAClB,cAAO,KAAKxI,CAAG,EAAE,QAAQ2B,GAAO,CAC1B,KAAK,cAAgB,KAAK,eAAiBA,GAC7C6G,EAAcjE,EAAgB,MAAM,yBAAyB,EAAE,KAAK,EAAE,EACtE8D,EAAc1G,IAEd6G,EAAc,kEACdH,EAAc,MAGhBzB,GAAU;AAAA,0CAC0BjF,CAAG;AAAA,oCACTA,CAAG;AAAA,iBACtB6G,EAAY,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB,KAAKH,EAAc,GAAK,uBAAuB;AAAA,qEACtG1G,CAAG,WACpE,CAAC,EAEM,wDAAwD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,uBAEhG4C,CAAe;AAAA;AAAA;AAAA;AAAA,iBAIrBC,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sEAQmC,KAAK,gBAAkB,SAAW,EAAE;AAAA,QAClG,KAAK,aAAe;AAAA,UAClB+D,CAAQ;AAAA,cACF,EAAE;AAAA;AAAA,UAER3B,CAAM;AAAA;AAAA,QAER,KAAK,aAAe;AAAA;AAAA,mCAEO,KAAK,YAAY;AAAA,6BACvB,KAAK,YAAY;AAAA,mBAC3BnC,CAAyB,eAAe,QAAQ,KAAO,kCAAoC,iCAAiC;AAAA,wCACvG,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA,mCAItB,KAAK,YAAY;AAAA,6BACvB,KAAK,YAAY;AAAA,mBAC3BA,CAAyB,eAAe,QAAQ,KAAO,8BAAgC,6BAA6B;AAAA,wCAC/F,KAAK,YAAY;AAAA;AAAA;AAAA,cAGzC,EAAE;AAAA,QACV,KAAK,aAAe;AAAA;AAAA,sCAEU,KAAK,YAAY;AAAA,gCACvB,KAAK,YAAY;AAAA,mBAC9BA,CAAyB,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAMzE,KAAK,YAAY;AAAA,gCACvB,KAAK,YAAY;AAAA,mBAC9BA,CAAyB,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAS/F,EAAE;AAAA;AAAA,SAGhB,EAEMgE,EAAyB,IAAM,CAC9BlD,IAAgB,KAAK,aAAe,MACzC,IAAIqB,EAAS,GACTG,EAAW,GACXsB,EAAc,KACdG,EAAc,GAClB,OAAIjD,GACF,OAAO,KAAKA,CAAc,EAAE,QAAQ+C,GAAY,CAC9C,IAAMpF,EAAQqC,EAAe+C,CAAQ,EAChC,KAAK,eACR,KAAK,aAAepF,EAAM,MAE9B,CAAC,EAIC,KAAK,cAAgB,KAAK,mBAAqB,WAC7C,QAAQ,IAAI,OAAO,KAAK,YAAY,EAAE,SACxC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,YAAY,EAAE,OAAO,EAAE,QAAQlB,GAAS,CAC1E+E,EAAW,QAAQ,IAAI,OAAO,KAAK,YAAY,EAAE,QAAQ/E,CAAK,EAAE,SAC5D,KAAK,kBAAoB+E,GAC3ByB,EAAcjE,EAAgB,MAAM,yBAAyB,EAAE,KAAK,EAAE,EACtE8D,EAAc,GACd,KAAK,qBAAuBrG,IAE5BwG,EAAc,uDACdH,EAAc,MAEhBzB,GAAU;AAAA,qBACC4B,EAAY,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB,KAAKH,EAAc,GAAK,uBAAuB;AAAA,iEAC9GtB,CAAQ,WACjE,CAAC,EAIE,wDAAwD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,uBAEhGxC,CAAe;AAAA;AAAA;AAAA,uBAGfC,CAAkB,+CAA+C,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sEAMnC,KAAK,sBAAwB,SAAW,EAAE;AAAA,QACxG,KAAK,aAAe;AAAA,UAClBoC,CAAM;AAAA,cACA,EAAE;AAAA,QACV,KAAK,iBAAmB,KAAK,aAAe;AAAA;AAAA;AAAA,4CAGR,KAAK,aAAa;AAAA,sCACxB,KAAK,aAAa;AAAA,qBACnCnC,CAAyB,eAAe,QAAQ,KAAO,kCAAoC,iCAAiC;AAAA,qCAC5G,KAAK,eAAe;AAAA;AAAA;AAAA;AAAA,4CAIb,KAAK,aAAa;AAAA,sCACxB,KAAK,aAAa;AAAA,qBACnCA,CAAyB,eAAe,QAAQ,KAAO,8BAAgC,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA,QAK/H,EAAE;AAAA,QACJ,KAAK,iBAAmB,KAAK,aAAe;AAAA;AAAA;AAAA,wCAGZ,KAAK,YAAY;AAAA,kCACvB,KAAK,YAAY;AAAA,qBAC9BA,CAAyB,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMvG,EAAE;AAAA;AAAA,SAGV,EAEMiE,EAAiC,IAAM,CAC3C,IAAI9B,EAAS,GACT+B,EAAW,KAEXpD,GACF,OAAO,KAAKA,CAAc,EAAE,QAAQ+C,GAAY,CAE9CK,EADcpD,EAAe+C,CAAQ,EACpB,KACnB,CAAC,EAGH,IAAItI,EAAM,QAAQ,IAAI,OACS,CAAC,OAAQ,SAAS,EACtB,SAAS,KAAK,gBAAgB,GACvD,OAAO,KAAKA,CAAG,EAAE,QAAQ2B,GAAO,CAC9B,GAAIgH,IAAahH,GAAO,KAAK,cAAgBA,EAC3C,GAAI,KAAK,mBAAqB,UAAW,CACvC,IAAMK,EAAQ,KAAK,qBACf,KAAK,iBACHhC,EAAI2B,CAAG,EAAE,QAAQK,CAAK,EAAE,SAC1B4E,GAAUJ,EAAcxG,EAAI2B,CAAG,EAAE,QAAQK,CAAK,EAAE,OAAQ,uBAAuBL,CAAG,eAAeK,CAAK,YAAaL,CAAG,EAG5H,MACM3B,EAAI2B,CAAG,EAAE,KAAK,gBAAgB,IAChCiF,GAAUJ,EAAcxG,EAAI2B,CAAG,EAAE,KAAK,gBAAgB,EAAG,uBAAuBA,CAAG,OAAO,KAAK,gBAAgB,KAAMA,CAAG,EAIhI,CAAC,EAGH,IAAIiH,EAAY,+DAChB,OAAI,KAAK,mBAAqB,YAC5BA,EAAY,kGAGP,wDAAwD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,yBAE9FrE,CAAe;AAAA;AAAA;AAAA;AAAA,mBAIrBC,CAAkB;AAAA;AAAA,wCAEG,KAAK,YAAY,MAAMoE,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wEAMA,KAAK,oBAAsB,SAAW,EAAE;AAAA,UACtGhC,CAAM;AAAA;AAAA,WAGd,EAEMiC,EAA6B,IAAM,CAClCtD,IAAgB,KAAK,aAAe,MACzC,IAAIqB,EAAS,GACTyB,EAAc,KACd9C,GACF,OAAO,KAAKA,CAAc,EAAE,QAAQ+C,GAAY,CAC9C,IAAMpF,EAAQqC,EAAe+C,CAAQ,EAChC,KAAK,eACR,KAAK,aAAepF,EAAM,MAE9B,CAAC,EAGH,IAAIsF,EAAc,GAClB,OAAI,KAAK,cAAgB,QAAQ,IAAI,aACnC,OAAO,KAAK,QAAQ,IAAI,WAAW,EAAE,QAAQ7G,GAAO,CAC9C,KAAK,gBAAkBA,EAAI,MAAM,IAAI,EAAE,KAAK,EAAE,GAChD6G,EAAcjE,EAAgB,MAAM,yBAAyB,EAAE,KAAK,EAAE,EACtE8D,EAAc1G,IAEd6G,EAAc,oEACdH,EAAc,MAEhBzB,GAAU;AAAA,qDACmCjF,CAAG;AAAA,+CACTA,CAAG;AAAA,mBAC/B6G,EAAY,MAAM,WAAW,EAAE,KAAK,aAAa,CAAC,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB,KAAKH,EAAc,GAAK,uBAAuB;AAAA;AAAA;AAAA,cAGzK1G,EAAI,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC,WAChC,CAAC,EAGI,wDAAwD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,uBAEhG4C,CAAe;AAAA;AAAA;AAAA;AAAA,iBAIrBC,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sEAQmC,KAAK,qBAAuB,SAAW,EAAE;AAAA,QACvG,KAAK,cAAgB,QAAQ,IAAI,YAAc;AAAA,UAC7CoC,CAAM;AAAA,cACA,EAAE;AAAA,QACV,KAAK,eAAiB,KAAK,cAAgB,QAAQ,IAAI,YAAc;AAAA;AAAA,qDAExB,KAAK,aAAa;AAAA,+CACxB,KAAK,aAAa;AAAA,mBAC9CnC,CAAyB,eAAe,QAAQ,KAAO,kCAAoC,iCAAiC;AAAA,0CACrG,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA,qDAIP,KAAK,aAAa;AAAA,+CACxB,KAAK,aAAa;AAAA,mBAC9CA,CAAyB,eAAe,QAAQ,KAAO,8BAAgC,6BAA6B;AAAA,0CAC7F,KAAK,aAAa;AAAA;AAAA;AAAA,cAG5C,EAAE;AAAA,QACV,KAAK,eAAiB,KAAK,cAAgB,QAAQ,IAAI,YAAc;AAAA;AAAA,sCAEvC,KAAK,YAAY;AAAA,gCACvB,KAAK,YAAY;AAAA,mBAC9BA,CAAyB,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,cAK/F,EAAE;AAAA;AAAA,SAGhB,EAEMqE,EAAkC,IAAM,CAC5C,GAAI,CAAC,KAAK,cAAe,OACzB,IAAIlC,EAAS,GACT+B,EAAW,KAEXpD,GACF,OAAO,KAAKA,CAAc,EAAE,QAAQ+C,GAAY,CAE9CK,EADcpD,EAAe+C,CAAQ,EACpB,KACnB,CAAC,EAGH,IAAItI,EAAM,QAAQ,IAAI,YAAY,GAAG,KAAK,aAAa,IAAI,EAG3D,MAD+B,CAAC,OAAQ,SAAS,EACtB,SAAS,KAAK,gBAAgB,GACvD,OAAO,KAAKA,CAAG,EAAE,QAAQ2B,GAAO,CAC9B,GAAIgH,IAAahH,GAAO,KAAK,cAAgBA,EAC3C,GAAI,KAAK,mBAAqB,UAAW,CACvC,IAAMK,EAAQ,KAAK,qBACf,KAAK,iBACHhC,EAAI2B,CAAG,EAAE,QAAQK,CAAK,EAAE,SAC1B4E,GAAUJ,EAAcxG,EAAI2B,CAAG,EAAE,QAAQK,CAAK,EAAE,OAAQ,4BAA4B,KAAK,aAAa,SAASL,CAAG,eAAeK,CAAK,YAAaL,EAAK,aAAa,EAG3K,MACM3B,EAAI2B,CAAG,EAAE,KAAK,gBAAgB,IAChCiF,GAAUJ,EAAcxG,EAAI2B,CAAG,EAAE,KAAK,gBAAgB,EAAG,4BAA4B,KAAK,aAAa,SAASA,CAAG,OAAO,KAAK,gBAAgB,KAAMA,EAAK,aAAa,EAI/K,CAAC,EAGI,wDAAwD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,yBAE9F4C,CAAe;AAAA;AAAA;AAAA,yBAGfC,CAAkB,uDAAuDmE,CAAQ,+BAA+B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wEAMnF,KAAK,8BAAgC,SAAW,EAAE;AAAA,UAChH/B,CAAM;AAAA;AAAA,WAGd,EAEMmC,EAA4B,IAAM,CACjCxD,IAAgB,KAAK,aAAe,MACzC,IAAIqB,EAAS,GACTyB,EAAc,KACdG,EAAc,GAClB,OAAIjD,GACF,OAAO,KAAKA,CAAc,EAAE,QAAQ+C,GAAY,CAC9C,IAAMpF,EAAQqC,EAAe+C,CAAQ,EAChC,KAAK,eACR,KAAK,aAAepF,EAAM,MAE9B,CAAC,EAGC,KAAK,cAAgB,QAAQ,IAAI,YACnC,OAAO,KAAK,QAAQ,IAAI,UAAU,EAAE,QAAQvB,GAAO,CAC7C,KAAK,kBAAoBA,GAC3B6G,EAAcjE,EAAgB,MAAM,yBAAyB,EAAE,KAAK,EAAE,EACtEiE,EAAcA,EAAY,MAAM,YAAY,EAAE,KAAK,aAAa,EAChEH,EAAc1G,IAEd6G,EAAc,qEACdH,EAAc,MAEhBzB,GAAU;AAAA,oDACkCjF,CAAG;AAAA,8CACTA,CAAG;AAAA,mBAC9B6G,EAAY,MAAM,WAAW,EAAE,KAAK,aAAa,CAAC,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB,KAAKH,EAAc,GAAK,uBAAuB;AAAA;AAAA;AAAA,cAGzK1G,CAAG,WACX,CAAC,EAGI,wDAAwD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,uBAEhG4C,CAAe;AAAA;AAAA;AAAA;AAAA,iBAIrBC,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sEAQmC,KAAK,oBAAsB,SAAW,EAAE;AAAA,QACtG,KAAK,cAAgB,QAAQ,IAAI,WAAa;AAAA,UAC5CoC,CAAM;AAAA,cACA,EAAE;AAAA,QACV,KAAK,iBAAmB,QAAQ,IAAI,WAAa;AAAA;AAAA,6CAEZ,KAAK,eAAe;AAAA,uCAC1B,KAAK,eAAe;AAAA,mBACxCnC,CAAyB,eAAe,QAAQ,KAAO,kCAAoC,iCAAiC;AAAA,sCACzG,KAAK,eAAe;AAAA;AAAA;AAAA;AAAA,6CAIb,KAAK,eAAe;AAAA,uCAC1B,KAAK,eAAe;AAAA,mBACxCA,CAAyB,eAAe,QAAQ,KAAO,8BAAgC,6BAA6B;AAAA,sCACjG,KAAK,eAAe;AAAA;AAAA;AAAA,cAG1C,EAAE;AAAA,QACV,KAAK,iBAAmB,QAAQ,IAAI,WAAa;AAAA;AAAA,sCAEnB,KAAK,eAAe;AAAA,gCAC1B,KAAK,eAAe;AAAA,mBACjCA,CAAyB,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,cAK/F,EAAE;AAAA;AAAA,SAGhB,EAEMuE,EAAmC,IAAM,CACxCzD,IAAgB,KAAK,aAAe,MACzC,IAAI0D,EAAU,GACVC,EAAY,GACZb,EAAc,KAkClB,GAjCI9C,GACF,OAAO,KAAKA,CAAc,EAAE,QAAQ+C,GAAY,CAC9C,IAAMpF,EAAQqC,EAAe+C,CAAQ,EAChC,KAAK,eACR,KAAK,aAAepF,EAAM,MAE9B,CAAC,EAIC,KAAK,iBAAmB,QAAQ,IAAI,YAAc,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,WACjG,OAAO,KAAK,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,SAAS,EAAE,QAAQvB,GAAO,CACjF,IAAI6G,EAAc,GACd,KAAK,oBAAsB7G,GAC7B6G,EAAcjE,EAAgB,MAAM,yBAAyB,EAAE,KAAK,EAAE,EACtE,SAAW,KAEXiE,EAAc,oEACd,SAAW,MAGbU,GAAa;AAAA,mDAC8BvH,CAAG;AAAA,6CACTA,CAAG;AAAA,mBAC7B6G,EAAY,MAAM,WAAW,EAAE,KAAK,aAAa,CAAC,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB,KAAK,SAAW,GAAK,uBAAuB;AAAA;AAAA;AAAA,wCAG5I7G,CAAG;AAAA,cAC7BA,CAAG,WACX,CAAC,EAIC,KAAK,mBAAqB,KAAK,iBAAmB,QAAQ,IAAI,YAAc,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAW,CACtI,IAAMwH,EAAiB,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAU,KAAK,iBAAiB,EACpGF,GAAWzC,EAAc2C,EAAgB,2BAA2B,KAAK,eAAe,iBAAiB,KAAK,iBAAiB,KAAM,KAAK,kBAAmB,YAAY,CAC3K,CAEA,MAAO,wDAAwD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,uBAEhG5E,CAAe;AAAA;AAAA;AAAA;AAAA,iBAIrBC,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sEAQmC,KAAK,oBAAsB,SAAW,EAAE;AAAA,QACtG,KAAK,iBAAmB,QAAQ,IAAI,WAAa;AAAA,UAC/C0E,CAAS;AAAA,cACH,EAAE;AAAA,QACV,KAAK,mBAAqB,QAAQ,IAAI,YAAc,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAY;AAAA,UAC3GD,CAAO;AAAA,cACD,EAAE;AAAA,QACV,KAAK,mBAAqB,QAAQ,IAAI,YAAc,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAY;AAAA;AAAA,oCAEjF,KAAK,iBAAiB;AAAA,8BAC5B,KAAK,iBAAiB;AAAA,mBACjCxE,CAAyB,eAAe,QAAQ,KAAO,kCAAoC,iCAAiC;AAAA,qCAC1G,KAAK,iBAAiB;AAAA;AAAA;AAAA;AAAA,oCAIvB,KAAK,iBAAiB;AAAA,8BAC5B,KAAK,iBAAiB;AAAA,mBACjCA,CAAyB,eAAe,QAAQ,KAAO,8BAAgC,6BAA6B;AAAA,qCAClG,KAAK,iBAAiB;AAAA;AAAA;AAAA;AAAA,oCAIvB,KAAK,iBAAiB;AAAA,8BAC5B,KAAK,iBAAiB;AAAA,mBACjCA,CAAyB,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,wCAEvE,KAAK,eAAe;AAAA,YAChDhE,EAAM,IAAI;AAAA;AAAA;AAAA,uCAGiB,KAAK,iBAAiB;AAAA,iCAC5B,KAAK,iBAAiB;AAAA,mBACpCgE,CAAyB,eAAe,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,cAK/F,EAAE;AAAA;AAAA,SAGhB,EAEM2E,EAA4B,IAAM,CACtC,GAAIjG,EAAe,SAAW,EAAG,MAAO,GAGxC,IAAIG,EAAa,GACb+F,EAAe,GACfC,EAAW,GAsEf,IArEI/D,GAAkBpC,EAAe,SAAW,IAC9C,OAAO,KAAKoC,CAAc,EAAE,QAAQ+C,GAAY,CAC9Ce,EAAe,GACf,IAAMnG,EAAQqC,EAAe+C,CAAQ,EAC/BzF,EAAMK,EAAM,IAGlBmG,GAAgB;AAAA,yBACC9E,CAAe;AAAA,0BACdK,CAAU,YAAYC,CAAU,wBAAwB3B,EAAM,IAAI;AAAA,UAIpFmG,GAAgB;AAAA,yBACC9E,CAAe;AAAA,0BACdK,CAAU,YAAYC,CAAU,wBAAwB3B,EAAM,MAAQA,EAAM,MAAQ,EAAE;AAAA,UAIxG,IAAI+D,EAAU,GAyBd,GAxBItB,EAAY,SAAS9C,CAAG,EAC1BoE,EAAUtB,EAAY,IAAI4D,GACxB,kBAAkBA,CAAO,KAAKA,IAAY1G,EAAM,WAAa,EAAE,IAAI0G,CAAO,WAC5E,EAAE,KAAK,EAAE,EACA3D,GAAa,SAAS/C,CAAG,EAClCoE,EAAUrB,GAAa,IAAI2D,GACzB,kBAAkBA,CAAO,KAAKA,IAAY1G,EAAM,WAAa,EAAE,IAAI0G,CAAO,WAC5E,EAAE,KAAK,EAAE,EACC1D,GAAc,SAAShD,CAAG,EACpCoE,EAAUpB,GAAc,IAAI0D,GAC1B,kBAAkBA,CAAO,KAAKA,IAAY1G,EAAM,WAAa,EAAE,IAAI0G,CAAO,WAC5E,EAAE,KAAK,EAAE,EAETtC,EAAU,kBAAkBpE,CAAG,qBAAqBA,CAAG,YAGrDoE,IACFoC,GAAgB;AAAA,2BACC9E,CAAe;AAAA,6BACbG,CAAW,YAAYC,CAAW;AAAA,gBAC/CsC,CAAO;AAAA,wBAIXpE,IAAQ,OAASM,EAAe,SAAW,EAAG,CAChD,IAAMqG,EAAM,SAAS,cAAc,UAAU,EAC7CA,EAAI,UAAY,UAAUtG,CAAK,EAC/B,IAAMqG,EAAUC,EAAI,QAAQ,kBAExBD,IACEA,EAAQ,aAAa,OAAO,GAAGA,EAAQ,gBAAgB,OAAO,EAClEA,EAAQ,gBAAgB,OAAO,EAC/BA,EAAQ,gBAAgB,QAAQ,EAChCA,EAAQ,aAAa,QAASvE,CAAU,EACxCuE,EAAQ,aAAa,UAAW,mBAAmBrG,EAAM,EAAE,WAAW,EAEtEoG,GAAY;AAAA,+BACO/E,CAAe;AAAA;AAAA,kBAE5BgF,EAAQ,SAAS;AAAA;AAAA,eAKzBC,EAAI,OAAO,CACb,CACF,CAAC,EAGC,OAAO,KAAKhE,CAAgB,EAAE,OAAS,GAAKrC,EAAe,SAAW,EAAG,CAC3EmG,EAAWhG,EAAagG,EAAW,GAAKhG,EAAa,GACrD,IAAMJ,EAAQC,EAAe,CAAC,EACxBN,EAAMK,EAAM,IAEdL,IAAQ,UACVS,GAAc;AAAA,yBACGiB,EAAgB,MAAM,gBAAgB,EAAE,KAAK,gBAAgB,CAAC;AAAA;AAAA,oLAE6FrB,EAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAYlLA,EAAM,OAER,OAAO,KAAKsC,CAAgB,EAAE,QAAQiE,GAAW,CAC/C,IAAI3H,EAAO2H,EACLtJ,EAAQqF,EAAiBiE,CAAO,EAEhCC,EAAqB,CAAC,KAAM,IAAK,KAAM,GAAG,EAC1CC,EAAeF,EAAQ,YAAY,EAGzC,GAAItE,EAAkB,SAASrD,CAAI,EACjCwB,GAAcwC,GAAuB2D,EAASjE,EAAiBiE,CAAO,CAAC,UAC9DE,IAAiB,SAAWA,IAAiB,QACtDrG,GAAc8C,EAAeqD,EAASjE,EAAiBiE,CAAO,CAAC,UACtDC,EAAmB,KAAKnG,GAAQoG,EAAa,WAAWpG,CAAI,CAAC,EACtED,GAAc8C,EAAeqD,EAASjE,EAAiBiE,CAAO,CAAC,UACtD5G,IAAQ,QAAS,CACtBf,IAAS,aACXwB,GAAcwC,GAAuB2D,EAASjE,EAAiBiE,CAAO,CAAC,GAGzE,IAAIG,EAAW,OACf,QAASC,KAAWxE,EACdvD,IAAS+H,IACXD,EAAW,UAGf,QAAS1I,KAAUoE,EACbxD,IAASZ,IACX0I,EAAW,QAGf,GAAI9H,IAAS,QACX,QAASoG,KAAa9C,EAChBlC,EAAM,MAAM,OACVA,EAAM,MAAM,OAASgF,IACvB0B,EAAW1G,EAAM,MAAM,KAAK,YAAY,GAEtCA,EAAM,MAAM,OAAS,UACvB0G,EAAW,WAKnB,GAAI9H,IAAS,OAAQ,CACnB,IAAImF,EAAU,GACd,QAAS/F,KAAUkE,EACjB6B,GAAW,kBAAkBrC,CAAU,YAAY1D,CAAM,KAAMf,IAAUe,EAAS,WAAa,EAAG,IAAIA,CAAM,YAG9GoC,GAAc;AAAA,iCACKiB,CAAe,gDAAgDkF,CAAO,OAAOA,CAAO;AAAA,iCACpF/E,CAAW,YAAYC,CAAW,uCAAuC8E,CAAO;AAAA,oBAC7FxC,CAAO;AAAA;AAAA,eAGf,MACE3D,GAAcyC,EAAY0D,EAAS,OAAQjE,EAAiBiE,CAAO,CAAC,CAExE,SAAW5G,IAAQ,SACbf,IAAS,OACXwB,GAAc;AAAA,iCACKiB,CAAe,gDAAgDkF,CAAO,OAAOA,CAAO;AAAA,iCACpF/E,CAAW,YAAYC,CAAW,uCAAuC8E,CAAO;AAAA,mCAC9E7E,CAAU,oBAAoBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA,mCAC9D8C,CAAU,mBAAmBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA,mCAC7D8C,CAAU,oBAAoBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA;AAAA,gBAG1EA,IAAS,OAClBwB,GAAcwC,GAAuB2D,EAASjE,EAAiBiE,CAAO,CAAC,EAEvEnG,GAAcyC,EAAY0D,EAAS,OAAQjE,EAAiBiE,CAAO,CAAC,UAE7D5G,IAAQ,IACbf,IAAS,SACXwB,GAAc;AAAA,iCACKiB,CAAe,gDAAgDkF,CAAO,OAAOA,CAAO;AAAA,iCACpF/E,CAAW,YAAYC,CAAW,uCAAuC8E,CAAO;AAAA,mCAC9E7E,CAAU,oBAAoBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA,mCAC9D8C,CAAU,mBAAmBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA,mCAC7D8C,CAAU,qBAAqBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA,mCAC/D8C,CAAU,kBAAkBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA;AAAA,gBAIjFwB,GAAcyC,EAAY0D,EAAS,OAAQjE,EAAiBiE,CAAO,CAAC,UAE7D5G,IAAQ,MAAO,CACxB,IAAIiH,EAAW,CAAC,QAAS,QAAQ,EACjC,GAAIA,EAAS,SAAShI,CAAI,EAAG,CAC3B,IAAIkE,EAAO,OACX,QAAS+D,KAAWD,EACdhI,IAASiI,IACX/D,EAAO,UAGX1C,GAAcyC,EAAY0D,EAAS,OAAQjE,EAAiBiE,CAAO,CAAC,CACtE,MAAW3H,IAAS,MAClBwB,GAAc;AAAA,iCACKiB,CAAe,gDAAgDkF,CAAO,OAAOA,CAAO;AAAA;AAAA,gCAErFzE,CAAU,UAAU7E,CAAK,gCAAgC+C,EAAM,EAAE;AAAA,kCAC/D0B,CAAU,YAAYC,CAAU,wBAAwB1E,CAAK,sCAAsCsJ,CAAO;AAAA;AAAA,gBAI9HnG,GAAcyC,EAAY0D,EAAS,OAAQjE,EAAiBiE,CAAO,CAAC,CAExE,SAAW5G,IAAQ,MAAO,CACxB,IAAIiH,EAAW,CAAC,cAAc,EAC1B9D,EAAO,OACX,QAAS+D,KAAWD,EACdhI,IAASiI,IACX/D,EAAO,UAGX1C,GAAcyC,EAAY0D,EAAS,OAAQjE,EAAiBiE,CAAO,CAAC,CACtE,MAAW5G,IAAQ,QACbf,IAAS,SACXwB,GAAc;AAAA,iCACKiB,CAAe,gDAAgDkF,CAAO,OAAOA,CAAO;AAAA,iCACpF/E,CAAW,YAAYC,CAAW,uCAAuC8E,CAAO;AAAA,mCAC9E7E,CAAU,iBAAiBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA,mCAC3D8C,CAAU,kBAAkBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA,mCAC5D8C,CAAU,iBAAiBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA,mCAC3D8C,CAAU,oBAAoBzE,IAAU2B,EAAO,WAAa,EAAE;AAAA;AAAA,gBAOrFwB,GAAcyC,EAAY0D,EAAS,OAAQjE,EAAiBiE,CAAO,CAAC,CAExE,CAAC,CAEL,CAEA,GAAI,OAAO,KAAKjE,CAAgB,EAAE,OAAS,GAAKrC,EAAe,QAAU,EAAG,CAC1E,IAAMD,EAAQC,EAAe,CAAC,EACxBN,EAAMK,EAAM,KAEd,SAAUA,GAASA,EAAM,QACvBL,IAAQ,SAAWA,IAAQ,SAC7BS,GAAc;AAAA,2BACGiB,CAAe;AAAA;AAAA,uBAEnBO,CAAa;AAAA,uBACbC,CAAa;AAAA;AAAA;AAAA,sCAGE7B,EAAM,IAAI;AAAA,YAGtCI,GAAc;AAAA,2BACGiB,CAAe;AAAA;AAAA,uBAEnBO,CAAa;AAAA,uBACbC,CAAa;AAAA;AAAA;AAAA;AAAA,sCAIE7B,EAAM,IAAI;AAAA,YAI5C,CAEA,GAAIC,EAAe,OAAS,EAC1B,MAAO,wDAAwD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,2BAE9FoB,CAAe;AAAA;AAAA;AAAA,2BAGfC,CAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0EAM6B,KAAK,eAAiB,SAAW,EAAE;AAAA,YACjG6E,EAAe/F,CAAU;AAAA;AAAA,aAInC,EAkBA,MAfsB;AAAA;AAAA,QAEhB+C,EAAoB,CAAC;AAAA,QACrB0B,EAA6B,CAAC;AAAA,QAC9BI,EAAsB,CAAC;AAAA,QACvB,KAAK,cAAgB,KAAK,mBAAqB,UAAYM,EAAuB,EAAI,EAAE;AAAA,QACxF,KAAK,aAAeC,EAA+B,EAAI,EAAE;AAAA,QACzD,KAAK,aAAeG,EAA2B,EAAI,EAAE;AAAA,QACrD,KAAK,cAAgBC,EAAgC,EAAI,EAAE;AAAA,QAC3D,KAAK,aAAeC,EAA0B,EAAI,EAAE;AAAA,QACpD,KAAK,gBAAkBC,EAAiC,EAAI,EAAE;AAAA,QAC9DI,EAA0B,CAAC;AAAA;AAAA,GAKnC,CACA,SAASY,IAAY,CACnB,IAAMxB,EAAc,+BAEpB,MAAO;AAAA;AAAA;AAAA,eAGMA,CAAW;AAAA;AAAA;AAAA;AAAA,QAIlB/H,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,eAKJ+H,CAAW;AAAA;AAAA;AAAA;AAAA,QAIlB/H,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,eAKJ+H,CAAW;AAAA;AAAA;AAAA;AAAA,QAIlB/H,EAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,eAKF+H,CAAW;AAAA;AAAA;AAAA;AAAA,QAIlB/H,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,eAKH+H,CAAW;AAAA;AAAA;AAAA;AAAA,QAIlB/H,EAAM,KAAK;AAAA,cAEnB,CACA,OAAO,MAAQ,CACb,OAAO,CACL,MAAAwJ,EACA,MAAAC,EAAQ,oCACR,QAAAjB,EACA,WAAAkB,EACA,aAAAC,EACA,OAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAAG,CAED,IAAMC,EAAS,wBACThC,EAAc,qDAQdiC,EAAO,mBAAmBR,EAAQ,sBAAwB,EAAE;AAAA,uBAC/CA,EAAQ,YAAc,EAAE;AAAA,qBAC1BO,CAAM,KAAKN,CAAK;AAAA,yBACZ1B,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAILyB,EAAQ,YAAc,EAAE;AAAA,UAC7ChB,GAAoB,EAAE;AAAA;AAAA,gBAEhBgB,EAAQ,oBAAsB,EAAE;AAAA,yBACvBzB,CAAW,0BAA0B,QAAQ,KAAO,kBAAoB,iBAAiB,wFAAwF2B,GAA0B,OAAO;AAAA,UACjOI,EAAY,kBAAkB/B,CAAW,0BAA0B4B,GAA8B,SAAS,YAAc,EAAE;AAAA;AAAA,gBAI1HM,EAAQ,SAAS,cAAc,QAAQ,EAC7CA,EAAM,KAAO,GACbA,EAAM,UAAYD,EAElB,SAAS,KAAK,YAAYC,CAAK,EAC3BL,GAAU,OAAOA,GAAW,YAC9BA,EAAO,EAGT,IAAMM,EAAWD,EAAM,cAAc,eAAe,EAC9CE,EAAWF,EAAM,cAAc,2BAA2B,EAC1DG,EAAaH,EAAM,cAAc,0BAA0B,EAGjEC,EAAS,QAAU,UAAW,CACxBL,GAAW,OAAOA,GAAY,YAChCA,EAAQ,EAEV,SAAS,KAAK,YAAYI,CAAK,CACjC,EACAE,EAAS,QAAU,UAAW,CACxBN,GAAW,OAAOA,GAAY,YAChCA,EAAQ,EAEV,SAAS,KAAK,YAAYI,CAAK,CACjC,EACAG,EAAW,QAAU,UAAW,CAC1BN,GAAa,OAAOA,GAAc,YACpCA,EAAU,EAEZ,SAAS,KAAK,YAAYG,CAAK,CACjC,CACF,CACF,EACA,OAAO,OAAS,IAAM,CACpB,IAAMI,EAAW,uDAEbC,EAAY,GAAIC,EAAgB,GAEpC,KAAK,OAAO,MAAM,QAAQ,CAACC,EAAOjJ,IAAU,CAC1C+I,GAAa;AAAA;AAAA,iBAEAD,CAAQ,+CAA+C,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA,8CAE9E9I,CAAK;AAAA;AAAA,UAEzCiJ,EAAM,IAAI;AAAA,gBAElB,CAAC,EAED,QAAQ,WAAW,QAAQ,CAACC,EAAWlJ,IAAU,CAC/CgJ,GAAiB;AAAA,sFACiE,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA,iDAIzFhJ,CAAK;AAAA;AAAA,YAE1CkJ,EAAU,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAMYlJ,CAAK;AAAA;AAAA,YAE/BvB,EAAM,KAAK;AAAA;AAAA,aAGrB,CAAC,EAED,IAAI0K,EAAe;AAAA,8DACyC,KAAK,UAAY,8CAAgD,8BAA8B;AAAA,0DACnG,KAAK,UAAY,kBAAoB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDAS/C,KAAK,OAAO,QAAU,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,cAKrE,KAAK,OAAO,IAAI;AAAA;AAAA;AAAA,cAGhBJ,CAAS;AAAA;AAAA;AAAA,uBAGAD,CAAQ,IAAI,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDAarC,KAAK,kBAAoB,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQ1EE,CAAa;AAAA;AAAA;AAAA,qBAGJF,CAAQ,IAAI,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA,cAIvErK,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,cAQtB,MAAM,OAAO,CACX,MAAO,cACP,QAAS0K,CACX,CAAC,CACH,EACA,OAAO,IAAM,CACX,cAAe,GACf,OAAOC,EAAW,CAChB,GAAI,KAAK,YAAa,OACtB,IAAM5C,EAAc,+BAEd6C,EAAO,KAAK,aACdC,EAAeC,EACbC,EAAa,SAAS,eAAe,YAAY,EACnD,SAAS,eAAe,YAAY,IACtCF,EAAgBE,EAAW,YAC3BD,EAAiBC,EAAW,cAE9B,GAAI,CAACC,EAAOC,CAAM,EAAIL,EAAK,MAAM,GAAG,EAAE,IAAI,MAAM,EAE1CZ,EAAO;AAAA;AAAA;AAAA,YAGLtJ,GAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,kGAKyE,QAAQ,YAAc,kCAAkC,QAAQ,KAAO,kBAAoB,iBAAiB,GAAK,QAAQ;AAAA,yDAClK,QAAQ,cAAgB,SAAW,GAAK,QAAQ;AAAA;AAAA,kBAEvFwC,GAAU,CAAC;AAAA;AAAA,mFAEsD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAMxG6E,CAAW;AAAA;AAAA;AAAA,wBAGlB,KAAK,aAAe,EAAI,GAAK,iBAAiB;AAAA,wBAC9C/H,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKH+H,CAAW,IAAI,KAAK,OAAS,gBAAkB,EAAE;AAAA,+BACjD,KAAK,OAAS,GAAK,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAOlCA,CAAW,IAAI,KAAK,SAAW,gBAAkB,EAAE;AAAA,+BACnD,KAAK,SAAW,GAAK,eAAe;AAAA;AAAA,wBAE3C/H,EAAM,KAAK;AAAA;AAAA;AAAA,+FAG4D,KAAK,iBAAiB,SAAW,EAAI,SAAW,EAAE;AAAA,sBAC3HuJ,GAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAMFxB,CAAW,IAAI,KAAK,OAAS,gBAAkB,EAAE;AAAA,+BACjD,KAAK,OAAS,GAAK,eAAe;AAAA;AAAA,wBAEzC/H,EAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKT+H,CAAW;AAAA;AAAA;AAAA,wBAGlB,KAAK,aAAe,KAAK,QAAQ,OAAS,EAAI,GAAK,iBAAiB;AAAA,wBACpE/H,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAMuB,QAAQ,cAAgB,YAAc,GAAK,QAAQ;AAAA;AAAA,kBAE1FyD,GAAU,CAAC;AAAA;AAAA,mFAEsD,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAMxGsE,CAAW;AAAA;AAAA;AAAA,wBAGlB,KAAK,aAAe,EAAI,GAAK,iBAAiB;AAAA,wBAC9C/H,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAOH+H,CAAW,IAAI,KAAK,OAAS,gBAAkB,EAAE;AAAA,+BACjD,KAAK,OAAS,GAAK,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAOlCA,CAAW,IAAI,KAAK,SAAW,gBAAkB,EAAE;AAAA,+BACnD,KAAK,SAAW,GAAK,eAAe;AAAA;AAAA,wBAE3C/H,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKJ+H,CAAW;AAAA;AAAA;AAAA,wBAGlB,KAAK,aAAe,KAAK,QAAQ,OAAS,EAAI,GAAK,iBAAiB;AAAA,wBACpE/H,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kGASgE,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCAO9G,KAAK,eAAiB,OAAS,uBAAuB,QAAQ,KAAO,kBAAoB,iBAAiB,8BAAgC,EAAE;AAAA,+BACrJ,KAAK,eAAiB,OAAS,4BAA8B;AAAA,eAC7EgL,CAAK;AAAA,gBACJC,CAAM;AAAA,yBACG,KAAK,IAAIJ,EAAgBG,EAAOF,EAAiBG,CAAM,CAAC;AAAA;AAAA;AAAA;AAAA,qBAI5DA,EAAS,CAAC;AAAA,sBACTD,EAAQ,CAAC,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uGAWmE,QAAQ,KAAO,cAAgB,aAAa;AAAA,0BACzH,KAAK,UAAU;AAAA;AAAA;AAAA;AAAA,qGAI4D,QAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAMxHjD,CAAW;AAAA;AAAA;AAAA,0BAGlB,KAAK,aAAe,EAAI,GAAK,iBAAiB;AAAA,0BAC9C/H,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA,uFAImD,KAAK,iBAAiB,SAAW,EAAI,SAAW,EAAE;AAAA,wBACjHuJ,GAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAMJxB,CAAW;AAAA;AAAA;AAAA,wBAGlB,KAAK,aAAe,KAAK,QAAQ,OAAS,EAAI,GAAK,iBAAiB;AAAA,wBACpE/H,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qCASG,QAAQ,cAAgB,SAAW,WAAa,EAAE;AAAA;AAAA,gBAEvEyD,GAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,UAKjB7C,GAAK,CAAC;AAAA,UACNE,GAAS,CAAC;AAAA,cAGVgI,EAAU,SAAS,cAAc6B,CAAS,EAChD,GAAI,CAAC7B,EAAS,OAId,IAAMoC,EADS,IAAI,UAAU,EACV,gBAAgBlB,EAAM,WAAW,EACpD,GAAIkB,EAAI,KAAK,UAAU,KAAK,IAAMlB,EAAK,KAAK,EAAG,OAC/C,GAAI,IAAI,cACN,OAAAlB,EAAQ,UAAYkB,EACpB,cAAc,EAAI,EAClB,IAAI,cAAgB,GACb,GAGT,IAAMmB,EAAa,SAAS,iBAAiB,UAAU,EACnDA,GAAYA,EAAW,QAAQC,GAAUA,EAAO,OAAO,CAAC,EAG5D,IAAMC,EAAavC,EAAQ,kBACrBwC,EAASJ,EAAI,KAAK,kBACxB,UAAUG,EAAYC,CAAM,EAG5B,IAAMC,EAAU,SAAS,iBAAiB,gBAAgB,EAEtDA,GACFA,EAAQ,QAAQ,CAACH,EAAQ7J,IAAU,CAEjC,IAAMiK,EAAeJ,EAAO,aAAa,cAAc,EAEjDK,EAAQ,MAAM,OAAO,CACzB,GAAIL,EACJ,MAAO,OACP,QAASI,EACT,OAAQ,GACR,WAAY,CAEV,QAAS,GACT,QAAS,GACT,IAAK,GAGL,YAAa,CACX,MAAO,EACT,CACF,CACF,CAAC,EAGDC,EAAM,SAASD,CAAY,EAG3BC,EAAM,GAAG,OAAQ,IAAM,CACrB,KAAK,YAAc,EACrB,CAAC,EACA,GAAG,SAAUC,GAAS,CACrB,IAAMC,EAAcD,EAAM,OAAO,EAAE,SAAS,EAGtCE,EAAcL,EAAQhK,CAAK,EAAE,aAAa,SAAS,EAEzD,GAAIqK,EAAa,CAEf,IAAMC,EAAcD,EAAY,QAAQ,cAAe,IAAID,CAAW,GAAG,EAG5D,IAAI,SAASE,CAAW,EAChC,CACP,CAGAJ,EAAM,WAAW,CACnB,CAAC,EACA,GAAG,OAAQ,IAAM,CAChB,KAAK,YAAc,KACnBA,EAAM,WAAW,EACjB,IAAI,OAAO,MAAM,CACnB,CAAC,CACH,CAAC,CAEL,CACF,EAGA,OAAO,mBAAqB3L,GAAM,CAChC,IAAI4K,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAOA5K,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAaF,QAAQ,IAAI,cAAcA,CAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gDAwBFA,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAShD,MAAM,OAAO,CACX,MAAO,wCAAwCA,EAAG,UAAU,CAAC,CAAC,mBAC9D,QAAS4K,EACT,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,EAC3C,SAAS,eAAe,WAAW,EAAE,OAAO,CAC9C,EACA,WAAY,CACV,IAAIrK,EAAW,SAAS,eAAe,WAAW,EAAE,MAChDgB,EAAO,SAAS,eAAe,WAAW,EAAE,MAIhD,GAFAA,EAAOA,EAAK,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,EAE9CA,EAAM,CACHA,EAAK,WAAW,IAAI,IACvBA,EAAO,KAAOA,GAGhB,IAAIyK,EAAUzK,EAAK,UAAU,EAAG,CAAC,EAAIA,EAAK,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAK,MAAM,CAAC,EAE5E,QAAQ,IAAI,cAAcyK,CAAO,GAEnC,QAAQ,IAAI,cAAcA,CAAO,EAAIzL,EACrC,IAAI,OAAO,MAAM,IAEjB,UAAU,EAGV,QAAQ,IAAI,cAAcyL,CAAO,EAAI,KAAK,MAAM,KAAK,UAAU,QAAQ,IAAI,cAAc,GAAGhM,CAAE,EAAE,CAAC,CAAC,EAGlG,QAAQ,IAAI,cAAcgM,CAAO,EAAIzL,EAGrC,OAAO,QAAQ,IAAI,cAAc,GAAGP,CAAE,EAAE,EACxC,aAAa,QAAQ,WAAY,KAAK,UAAU,OAAO,CAAC,EAExD,UAAU,EAEd,MACE,MAAM,OAAO,CACX,MAAO,4BACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,SAAW,IAAM,CACtB,IAAI4K,EAAe;AAAA;AAAA;AAAA;AAAA,gBAIL,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU1B,MAAM,OAAO,CACX,MAAO,cACP,QAASA,EACT,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,EAC3C,SAAS,eAAe,WAAW,EAAE,OAAO,CAC9C,EACA,WAAY,CACV,IAAIhL,EAAQ,SAAS,eAAe,WAAW,EAAE,MACjD,GAAIA,EAAO,CAETA,EAAQA,EAAM,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,EAErD,IAAIH,EAAM,QAAQ,IAAI,OAClB,KAAK,eAAiB,KAAK,eAC7BA,EAAM,QAAQ,IAAI,YAAY,GAAG,KAAK,aAAa,IAAI,GAGrDA,EAAI,GAAGG,CAAK,EAAE,EAChB,MAAM,OAAO,CACX,MAAO,uBACP,QAAS,uBACX,CAAC,EAEDH,EAAIG,CAAK,EAAI,CACX,KAAQ,CAAC,EACT,QAAW,CAAC,CACd,CAEJ,MACE,MAAM,OAAO,CACX,MAAO,sBACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,eAAiB,IAAM,CAC5B,IAAIgL,EAAe;AAAA;AAAA;AAAA;AAAA,gBAIL,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAU1B,MAAM,OAAO,CACX,MAAO,kBACP,QAASA,EACT,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,EAC3C,SAAS,eAAe,WAAW,EAAE,OAAO,CAC9C,EACA,WAAY,CACV,IAAIhL,EAAQ,SAAS,eAAe,WAAW,EAAE,MACjD,GAAIA,EAAO,CAETA,EAAQA,EAAM,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,EAErD,IAAIH,EAAM,QAAQ,IAAI,OAClB,KAAK,eAAiB,KAAK,eAC7BA,EAAM,QAAQ,IAAI,YAAY,GAAG,KAAK,aAAa,IAAI,GAGrDA,EAAI,GAAGG,CAAK,EAAE,EAChB,MAAM,OAAO,CACX,MAAO,uBACP,QAAS,uBACX,CAAC,EAEDH,EAAIG,CAAK,EAAIH,EAAI,KAAK,YAAY,CAEtC,MACE,MAAM,OAAO,CACX,MAAO,sBACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,kBAAoB,CAACO,EAAIP,IAAQ,CAEtC,IAAMwM,EAAgB,KAAK,cAGrBC,EAAgB,OAAO,KAAK,QAAQ,IAAI,aAAa,EAAE,KAAK,EAC5DC,EAAuB,OAAO,KAAK,KAAK,uBAAuB,EAAE,KAAK,EACtEC,EAAwB,OAAO,KAAK,KAAK,wBAAwB,EAAE,KAAK,EAGxEC,EAAsBH,EAAc,IAAIxM,GAAQ;AAAA,qBACnCA,CAAI,KAAKA,CAAI;AAAA,GAC/B,EAAE,KAAK,EAAE,EAEJ4M,EAA4BH,EAAqB,IAAIzM,GAAQ;AAAA,qBAChDA,CAAI,KAAKA,CAAI;AAAA,GAC/B,EAAE,KAAK,EAAE,EAEJ6M,EAA6BH,EAAsB,IAAI1M,GAAQ;AAAA,qBAClDA,CAAI,KAAKA,CAAI;AAAA,GAC/B,EAAE,KAAK,EAAE,EAEJkL,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMXyB,CAAmB;AAAA;AAAA;AAAA,YAGnBC,CAAyB;AAAA;AAAA;AAAA,YAGzBC,CAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBhC,KAAK,oBAAsB;AAAA;AAAA,YAEnB,EAAE,GAEd,MAAM,OAAO,CACX,MAAO,qBAAqBvM,CAAE,IAC9B,QAAS4K,EACT,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,EAC3C,IAAM4B,EAAqB,SAAS,eAAe,eAAe,EAC5DC,EAAa,SAAS,eAAe,eAAe,EACpDC,EAAc,SAAS,eAAe,cAAc,EAE1D,SAASC,EAAsBC,EAAc,CAC3CH,EAAW,UAAY,GAEnB,KAAK,yBAAyBG,CAAY,GAC5CF,EAAY,MAAM,QAAU,iBAAiB,SAASE,CAAY,EAAI,OAAS,QAE3EA,EAAa,WAAW,WAAW,EACrC,YAAY,UAAU,QAAQ5F,GAAQ,CACpCyF,EAAW,WAAa,kBAAkBzF,CAAI,KAAKA,CAAI,WACzD,CAAC,EACQ,eAAe,SAAS4F,CAAY,EAC7C,YAAY,UAAU,QAAQ5F,GAAQ,CACpCyF,EAAW,WAAa,kBAAkBzF,CAAI,KAAKA,CAAI,WACzD,CAAC,EAED,YAAY,QAAQ,QAAQA,GAAQ,CAClCyF,EAAW,WAAa,kBAAkBzF,CAAI,KAAKA,CAAI,WACzD,CAAC,IAEM,KAAK,wBAAwB4F,CAAY,EAClDF,EAAY,MAAM,QAAU,OAIhC,CAEAF,EAAmB,SAAW,UAAW,CACvC,IAAMI,EAAe,KAAK,MAC1BD,EAAsBC,CAAY,EAClC,SAAS,eAAe,WAAW,EAAE,MAAQA,CAC/C,CACF,EACA,WAAY,CACV,IAAIC,EAAoB,SAAS,eAAe,WAAW,EAAE,MAAM,KAAK,EAClE7F,EAAO,SAAS,eAAe,eAAe,EAAI,SAAS,eAAe,eAAe,EAAE,MAAQ,GACnG8F,EAAS,CAAC,UAAW,SAAS,EAC9BC,EAAmB,KAAK,iBAGXF,EAAkB,MAAM,GAAG,EAAE,IAAInN,GAAQA,EAAK,KAAK,CAAC,EAE5D,QAAQsN,GAAkB,CACnC,GAAI,CAACC,EAAcC,CAAgB,EAAIF,EAAe,MAAM,GAAG,EAAE,IAAIG,GAAOA,EAAI,KAAK,CAAC,EAItF,GAHAF,EAAeA,EAAa,YAAY,EAGpC,OAAO,KAAKF,CAAgB,EAAE,SAASE,CAAY,EAChCF,EAAiBE,CAAY,EACN,MAAM,GAAG,EAAE,OAAO,OAAO,EAE9C,QAAQD,GAAkB,CAC/C,GAAI,CAACI,EAAmBC,CAAqB,EAAIL,EAAe,MAAM,GAAG,EAAE,IAAIG,GAAOA,EAAI,KAAK,CAAC,EAChGC,EAAoBA,EAAkB,YAAY,EAClD3N,EAAI2N,CAAiB,EAAIC,CAC3B,CAAC,MACI,CAEL,IAAIC,EAEJ,GAAIJ,EAEFI,EAAaJ,GAAoBlG,GAAQ,CAAC8F,EAAO,SAASG,CAAY,EAAIjG,EAAO,QAC5E,CAEL,IAAMuG,EAAetB,EAAcgB,CAAY,GAAKhB,EAAc,QAClEqB,EAAatG,EAAO,GAAGuG,CAAY,GAAGvG,CAAI,GAAKuG,CACjD,CAGIT,EAAO,SAASG,CAAY,EAC9BxN,EAAIwN,CAAY,EAAIC,GAAoB,IAExCzN,EAAIwN,CAAY,EAAIK,CAExB,CACF,CAAC,EAED,UAAU,CACZ,CACF,CAAC,CACH,EACA,OAAO,kBAAoBhO,GAAU,CAUnC,MAAM,OAAO,CACX,MAAO,wCAAwCA,CAAM,WACrD,QAXiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYjB,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,WAAY,CACV,IAAIM,EAAQ,SAAS,eAAe,WAAW,EAAE,MAC7CA,GAEFA,EAAQA,EAAM,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,EAEjD,QAAQ,IAAI,OAAOA,CAAK,EAC1B,MAAM,OAAO,CACX,MAAO,uBACP,QAAS,uBACX,CAAC,EACQ,QAAQ,IAAI,OAAO,GAAGN,CAAM,EAAE,IAEvC,KAAK,aAAe,KAGpB,QAAQ,IAAI,OAAOM,CAAK,EAAI,KAAK,MAAM,KAAK,UAAU,QAAQ,IAAI,OAAON,CAAM,CAAC,CAAC,EAGjF,OAAO,QAAQ,IAAI,OAAOA,CAAM,EAGhC,KAAK,aAAeM,EAEpB,UAAU,IAGZ,MAAM,OAAO,CACX,MAAO,yBACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,kBAAoBN,GAAU,CAInC,MAAM,OAAO,CACX,MAAO,wCAAwCA,CAAM,WACrD,QALiB,qEAMjB,WAAY,CACN,KAAK,eACP,YAAY,QAAQ,KAAM,KAAK,YAAY,EAC3C,OAAO,QAAQ,IAAI,OAAO,KAAK,YAAY,EAC3C,KAAK,aAAe,KACpB,UAAU,EAEd,CACF,CAAC,CACH,EACA,OAAO,cAAgB,IAAM,CAyB3B,MAAM,OAAO,CACX,MAAO,mBACP,QA1BiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA2BjB,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,WAAY,CACV,IAAMM,EAAQ,SAAS,eAAe,WAAW,EAAE,MAC/CA,EACE,QAAQ,IAAI,YAAY,GAAGA,CAAK,IAAI,EACtC,MAAM,OAAO,CACX,MAAO,4BACP,QAAS,4BACX,CAAC,GAED,QAAQ,IAAI,YAAY,GAAGA,CAAK,IAAI,EAAI,CAAC,EACzC,QAAQ,IAAI,YAAY,GAAGA,CAAK,IAAI,EAAE,GAAG,KAAK,YAAY,EAAE,EAAI,CAC9D,KAAQ,CAAC,EACT,QAAW,CAAC,CACd,GAGF,MAAM,OAAO,CACX,MAAO,2BACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,oBAAsBkL,GAAQ,CAUnC,MAAM,OAAO,CACX,MAAO,wCAAwCA,CAAI,WACnD,QAXiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYjB,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,WAAY,CACV,IAAMlL,EAAQ,SAAS,eAAe,WAAW,EAAE,MAC/CA,EACE,QAAQ,IAAI,YAAY,GAAGA,CAAK,IAAI,EACtC,MAAM,OAAO,CACX,MAAO,mCACP,QAAS,qBACX,CAAC,GAGD,KAAK,cAAgB,KAGrB,QAAQ,IAAI,YAAY,GAAGA,CAAK,IAAI,EAAI,KAAK,MAAM,KAAK,UAAU,QAAQ,IAAI,YAAYkL,CAAI,CAAC,CAAC,EAGhG,OAAO,QAAQ,IAAI,YAAYA,CAAI,GAGrC,MAAM,OAAO,CACX,MAAO,kCACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,oBAAsBA,GAAQ,CAInC,MAAM,OAAO,CACX,MAAO,wCAAwCA,CAAI,WACnD,QALiB,qEAMjB,WAAY,CACNA,KAAQ,QAAQ,IAAI,cACtB,KAAK,cAAgB,KACrB,OAAO,QAAQ,IAAI,YAAYA,CAAI,EACnC,UAAU,EAEd,CACF,CAAC,CACH,EACA,OAAO,aAAe,IAAM,CAc1B,MAAM,OAAO,CACX,MAAO,mBACP,QAfiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBjB,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,WAAY,CACV,IAAIlL,EAAQ,SAAS,eAAe,WAAW,EAAE,MAC7CA,GAEFA,EAAQA,EAAM,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,EACjD,QAAQ,IAAI,WAAW,GAAGA,CAAK,EAAE,EACnC,MAAM,OAAO,CACX,MAAO,2BACP,QAAS,2BACX,CAAC,GAED,QAAQ,IAAI,WAAWA,CAAK,EAAI,CAC9B,UAAa,CAAC,CAChB,EACA,QAAQ,IAAI,WAAWA,CAAK,EAAE,UAAY,CACxC,KAAM,CAAC,EACP,OAAQ,CAAC,CACX,IAGF,MAAM,OAAO,CACX,MAAO,0BACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,gBAAkB2B,GAAQ,CAU/B,MAAM,OAAO,CACX,MAAO,wCAAwCA,CAAI,eACnD,QAXiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYjB,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,WAAY,CACV,IAAM3B,EAAQ,SAAS,eAAe,WAAW,EAAE,MAC/CA,EACE,QAAQ,IAAI,WAAWA,CAAK,EAC9B,MAAM,OAAO,CACX,MAAO,8BACP,QAAS,gCACX,CAAC,GAGD,KAAK,gBAAkB,KAGvB,QAAQ,IAAI,WAAWA,CAAK,EAAI,KAAK,MAAM,KAAK,UAAU,QAAQ,IAAI,WAAW2B,CAAI,CAAC,CAAC,EAGvF,OAAO,QAAQ,IAAI,WAAWA,CAAI,EAGlC,KAAK,gBAAkB3B,GAGzB,MAAM,OAAO,CACX,MAAO,6BACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,gBAAkB2B,GAAQ,CAI/B,MAAM,OAAO,CACX,MAAO,wCAAwCA,CAAI,eACnD,QALiB,qEAMjB,WAAY,CACN,KAAK,oBAAmB,KAAK,kBAAoB,MAErD,KAAK,gBAAkB,KACvB,KAAK,gBAAkB,KACvB,OAAO,QAAQ,IAAI,WAAWA,CAAI,EAClC,IAAI,OAAO,MAAM,CACnB,CACF,CAAC,CACH,EACA,OAAO,YAAc,IAAM,CACzB,GAAI,CAAC,KAAK,gBAAiB,OAc3B,MAAM,OAAO,CACX,MAAO,mBACP,QAfiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBjB,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,WAAY,CACV,IAAM3B,EAAQ,SAAS,eAAe,WAAW,EAAE,MAC/CA,EACE,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAU,GAAGA,CAAK,EAAE,EACnE,MAAM,OAAO,CACX,MAAO,0BACP,QAAS,0BACX,CAAC,GAED,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAU,GAAGA,CAAK,EAAE,EAAI,CAAC,EACtE,UAAU,GAGZ,MAAM,OAAO,CACX,MAAO,yBACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,eAAiB2B,GAAQ,CAU9B,MAAM,OAAO,CACX,MAAO,wCAAwCA,CAAI,cACnD,QAXiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYjB,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,WAAY,CACV,IAAM3B,EAAQ,SAAS,eAAe,WAAW,EAAE,MAC/CA,EACE,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAUA,CAAK,EAC9D,MAAM,OAAO,CACX,MAAO,6BACP,QAAS,oCACX,CAAC,GAGD,KAAK,kBAAoB,KAGzB,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAUA,CAAK,EAAI,KAAK,MAAM,KAAK,UAAU,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAU2B,CAAI,CAAC,CAAC,EAGvJ,OAAO,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAUA,CAAI,EAGlE,KAAK,kBAAoB3B,EACzB,UAAU,GAGZ,MAAM,OAAO,CACX,MAAO,gCACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,eAAiB2B,GAAQ,CAI9B,MAAM,OAAO,CACX,MAAO,wCAAwCA,CAAI,cACnD,QALiB,qEAMjB,WAAY,CACN,KAAK,oBAAmB,KAAK,kBAAoB,MAErD,KAAK,kBAAoB,KACzB,OAAO,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAUA,CAAI,EAClE,UAAU,EACV,IAAI,OAAO,MAAM,CACnB,CACF,CAAC,CACH,EACA,OAAO,cAAgB,IAAM,CAC3B,GAAI,CAAC,KAAK,iBAAmB,CAAC,KAAK,kBAAmB,OActD,MAAM,OAAO,CACX,MAAO,wBACP,QAfiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBjB,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,WAAY,CACV,IAAM3B,EAAQ,SAAS,eAAe,WAAW,EAAE,MAC/CA,EACE,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAU,GAAGA,CAAK,EAAE,EACnE,MAAM,OAAO,CACX,MAAO,0BACP,QAAS,0BACX,CAAC,GAED,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAUA,CAAK,EAAI,CAAC,EACjE,UAAU,GAGZ,MAAM,OAAO,CACX,MAAO,yBACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,gBAAkB,CAACI,EAAIN,EAAM8N,EAAGpH,EAAS,OAAS,CACvD,IAAI3G,EAAM,KACN2G,GACEA,IAAW,gBACb3G,EAAM,QAAQ,IAAI,YAAY,GAAG,KAAK,aAAa,IAAI,EAAEO,CAAE,EAAE,KAAK,gBAAgB,GAEhFoG,IAAW,eACb3G,EAAM,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAU,KAAK,iBAAiB,IAGrFA,EAAM,QAAQ,IAAI,OAAOO,CAAE,EAAE,KAAK,gBAAgB,EAGhDN,KAAQD,GAAK,OAAOA,EAAI,GAAGC,CAAI,EAAE,EACrC,UAAU,EAGV8N,EAAE,QAAQ,cAAc,EAAE,OAAO,CACnC,EACA,OAAO,YAAc,CAAC/K,EAAQgL,EAAOlO,IAAa,CAE5C,QAAQ,IAAI,OAAOkO,CAAK,GAC1B,OAAO,QAAQ,IAAIA,CAAK,EAI1B,IAAIC,EAAQ,GAGZ,QAAW/K,KAASF,EACdE,EAAM,QAAU8K,IAClB9K,EAAM,MAAQ,GACd+K,EAAQ,IAGN/K,EAAM,UAAYA,EAAM,SAAS,OAAS,GAC5C,YAAYA,EAAM,SAAU8K,EAAO,IAAM,CACvCC,EAAQ,EACV,CAAC,EAGCA,GACE,OAAOnO,GAAa,YACtBA,EAAS,CAIjB,EACA,OAAO,WAAa,CAACS,EAAIN,EAAMiO,EAAcvH,EAAS,OAAS,CAC7D,IAAMlB,EAA0B,KAAK,wBAEjC0I,EAAW,KACXxH,IAAQwH,EAAWxH,GAGvB,IAAIwE,EAAe,GAEnB,GAAI1F,EAAwBxF,CAAI,EAAG,CAEjC,IAAMgH,EAAUxB,EAAwBxF,CAAI,EAAE,IAAIiH,GAAO;AAAA,uBACtCA,CAAG,KAAKA,IAAQgH,EAAe,WAAa,EAAE,IAAIhH,CAAG;AAAA,KACvE,EAAE,KAAK,EAAE,EAEViE,EAAe;AAAA;AAAA,mDAEgC+C,CAAY;AAAA;AAAA,YAEnDjH,CAAO;AAAA;AAAA,aAGjB,MAEEkE,EAAe;AAAA;AAAA,mDAEgC+C,CAAY;AAAA;AAAA;AAAA;AAAA;AAAA,mBAK5CA,CAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAW7B/C,GAAgB;AAAA;AAAA;AAAA,oCAGkB5K,CAAE,OAAON,CAAI,UAAUkO,EAAW,MAAMA,CAAQ,IAAM,EAAG;AAAA,YAI3F,MAAM,OAAO,CACX,MAAO,WAAWlO,CAAI,UACtB,QAASkL,EACT,QAAS,CACP,GAAI,SAAS,eAAe,WAAW,EAAG,CACxC,IAAM5B,EAAU,SAAS,eAAe,WAAW,EACnDA,EAAQ,MAAM,EACVA,EAAQ,QAAQ,YAAY,IAAM,SACpCA,EAAQ,OAAO,CAEnB,CACF,EACA,WAAY,CACV,UAAU,EAGV,IAAMzI,EAAW,SAAS,eAAe,WAAW,EAAE,MAElDd,EAAM,KACN2G,GACEA,IAAW,eACT,QAAQ,IAAI,YAAY,GAAG,KAAK,aAAa,IAAI,EAAEpG,CAAE,EAAE,KAAK,gBAAgB,IAC9EP,EAAM,QAAQ,IAAI,YAAY,GAAG,KAAK,aAAa,IAAI,EAAEO,CAAE,EAAE,KAAK,gBAAgB,GAGlFoG,IAAW,cACT,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAU,KAAK,iBAAiB,IAC/E3G,EAAM,QAAQ,IAAI,WAAW,KAAK,eAAe,EAAE,UAAU,KAAK,iBAAiB,IAInF,KAAK,mBACPA,EAAM,QAAQ,IAAI,OAAOO,CAAE,EAAE,KAAK,gBAAgB,GAKlDO,IAAa,GAEf,OAAOd,EAAIC,CAAI,EAGfD,EAAIC,CAAI,EAAI,GAAGa,CAAQ,GAGzB,UAAU,CACZ,CACF,CAAC,CACH,EACA,OAAO,UAAYiG,GAAY,CAE7B,GAAI,CAAC,QAAQ,IAAI,OAAOA,CAAQ,EAAG,OAC9B,QAAQ,IAAI,OAAOA,CAAQ,EAAE,UAChC,QAAQ,IAAI,OAAOA,CAAQ,EAAE,QAAU,CAAC,GA6B1C,IAAIoE,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAzBH,CACd,OACA,UACA,SACA,UACA,eACA,SACA,iBACA,gBACA,SACA,cACA,aACA,UACA,WACA,sBACA,4BACA,4BACA,WACA,SACF,EAE4B,IAAIiD,GAAU;AAAA,qBACvBA,IAAW,OAAS,GAAKA,CAAM,KAAKA,CAAM;AAAA,GAC5D,EAAE,KAAK,EAAE,CAYW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBrB,MAAM,OAAO,CACX,MAAO,6BACP,QAASjD,EACT,QAAS,CACP,SAAS,eAAe,cAAc,EAAE,MAAM,CAChD,EACA,WAAY,CACV,IAAMkD,EAAiB,SAAS,eAAe,iBAAiB,EAAE,MAAM,KAAK,EACvEC,EAAe,SAAS,eAAe,cAAc,EAAE,MAAM,KAAK,EAExE,GAAIA,EAAc,CAEhB,IAAM1H,EAAS0H,EAAa,MAAM,GAAG,EAAE,OAAO,CAAC5M,EAAK6M,IAAS,CAC3D,GAAM,CAAC1N,EAAUV,CAAK,EAAIoO,EAAK,MAAM,GAAG,EAAE,IAAIC,GAAKA,EAAE,KAAK,CAAC,EAC3D,OAAI3N,GAAYV,IAAOuB,EAAIb,CAAQ,EAAIV,GAChCuB,CACT,EAAG,CAAC,CAAC,EAEC+M,EAAiB,QAAQ,IAAI,OAAO1H,CAAQ,EAAE,QAAQ,KAAKqH,GAAUA,EAAO,WAAaE,CAAY,EAE3G,GAAIG,EAEFA,EAAe,OAAS,CACtB,GAAGA,EAAe,OAClB,GAAG7H,CACL,MACK,CAEL,IAAI5G,EAAM,CACR,SAAYsO,EACZ,OAAU1H,CACZ,EACA,QAAQ,IAAI,OAAOG,CAAQ,EAAE,QAAQ,KAAK/G,CAAG,CAC/C,CAEA,UAAU,CACZ,MACE,MAAM,OAAO,CACX,MAAO,uBACP,QAAS,mEACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,aAAe0O,GAAW,CA2B/B,IAAIvD,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAzBH,CACd,OACA,UACA,SACA,UACA,eACA,SACA,iBACA,gBACA,SACA,cACA,aACA,UACA,WACA,sBACA,4BACA,4BACA,WACA,SACF,EAE4B,IAAIiD,GAAU;AAAA,qBACvBA,IAAW,OAAS,GAAKA,CAAM,KAAKA,CAAM;AAAA,GAC5D,EAAE,KAAK,EAAE,CAYW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBrB,MAAM,OAAO,CACX,MAAO,wCAAwCM,CAAO,0BACtD,QAASvD,EACT,QAAS,CACP,SAAS,eAAe,mBAAmB,EAAE,MAAM,CACrD,EACA,WAAY,CACV,IAAMoB,EAAU,SAAS,eAAe,mBAAmB,EAAE,MAAM,KAAK,EACxE,GAAIA,EAAS,CACX,IAAMoC,EAAQ,QAAQ,IAAI,OAAO,KAAK,YAAY,EAClD,GAAI,CAACA,GAAS,CAACA,EAAM,QAAS,OAG9B,GADuBA,EAAM,QAAQ,KAAKP,GAAUA,EAAO,WAAa7B,CAAO,EAC3D,CAClB,MAAM,OAAO,CACX,MAAO,2BACP,QAAS,0CACX,CAAC,EACD,MACF,CAEA,IAAMqC,EAAcD,EAAM,QAAQ,UAAUP,GAAUA,EAAO,WAAaM,CAAO,EACjF,GAAIE,IAAgB,GAAI,CACtB,MAAM,OAAO,CACX,MAAO,oBACP,QAAS,4BAA4BF,CAAO,UAC9C,CAAC,EACD,MACF,CAGAC,EAAM,QAAQC,CAAW,EAAE,SAAWrC,EAEtC,IAAI,OAAO,MAAM,EACjB,UAAU,CACZ,MACE,MAAM,OAAO,CACX,MAAO,0BACP,QAAS,oBACX,CAAC,CAEL,CACF,CAAC,CACH,EACA,OAAO,aAAe,IAAM,CAC1B,IAAMzK,EAAO,KAAK,gBACZ8M,EAAc,KAAK,qBAIzB,MAAM,OAAO,CACX,MAAO,wCAAwC9M,CAAI,0BACnD,QALiB,qEAMjB,WAAY,CACV,IAAM6M,EAAQ,QAAQ,IAAI,OAAO,KAAK,YAAY,EAC9C,CAACA,GAAS,CAACA,EAAM,UAErB,KAAK,gBAAkB,KACvB,KAAK,qBAAuB,EAC5BA,EAAM,QAAQ,OAAOC,EAAa,CAAC,EACnC,UAAU,EACZ,CACF,CAAC,CACH,EACA,OAAO,sBAAwB,MAAMC,GAAO,CAC1C,GAAI,CACF,IAAMC,EAAW,MAAM,MAAMD,CAAG,EAChC,GAAI,CAACC,EAAS,GACZ,MAAM,IAAI,MAAM,6BAA6B,EAE/C,YAAK,oBAAsB,GACf,MAAMA,EAAS,KAAK,CAElC,OAASC,EAAO,CACd,QAAQ,MAAM,qCAAsCA,CAAK,CAC3D,CACF,EACA,OAAO,sBAAwB,MAAMF,GAAO,CAC1C,IAAMvB,EAAmB,MAAM,sBAAsBuB,CAAG,EAEpDvB,IAEF,KAAK,iBAAmBA,EAE5B,EAEA,OAAO,aAAe/J,GAAQ,CAC5B,GAAI,CAACA,EAAM,OACX,IAAMyL,EAAmB,OAGnBC,EAAQ1L,EAAK,YAAY,EAAE,MAAM,GAAG,EAAE,IAAI2L,GAAKA,EAAE,KAAK,EAAE,YAAY,CAAC,EAGrEC,EAAkB,CAAC,EAEzB,UAAU,EACV,KAAK,iBAAiB,QAAQ5O,GAAM,CAClC,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAC5C2C,IAEGA,EAAM,QAAOA,EAAM,MAAQ,CAAC,GAGjC+L,EAAM,QAAQG,GAAa,CACzB,GAAI,CAACzN,EAAKxB,CAAK,EAAIiP,EAAU,MAAM,GAAG,EAAE,IAAIZ,GAAKA,EAAE,KAAK,CAAC,EAGzD,GAFI7M,IAAQ,OAAMxB,EAAQ,WAAW,GAEjC6O,EAAiB,KAAK7O,CAAK,EAAG,CAEhC,IAAIkP,EAAYlP,EAAM,QAAQ6O,EAAkB,EAAE,EAC9CM,EAAYH,EAAgBxN,CAAG,GAAK,EACxCxB,EAAQkP,EAAYC,EACpBH,EAAgBxN,CAAG,EAAI2N,EAAY,CACrC,CAEM3N,KAAOuB,EAAM,MAER/C,IAAU,SAEnB+C,EAAM,MAAMvB,CAAG,EAAIxB,GAHnB+C,EAAM,MAAMvB,CAAG,EAAIxB,IAAU,OAAYA,EAAQ,EAKrD,CAAC,EAEL,CAAC,EACD,UAAU,CACZ,EAGA,OAAO,UAAYoP,GAAS,CAC1B,SAASC,EAAcjG,EAAS,CAC9B,IAAM5D,EAAc,KAAK,YACnBC,EAAe,KAAK,aACpB6J,EAAiB,CACrB,KACA,KACA,QACA,WACA,WACA,QACA,OACA,MACA,MACA,OACA,UACA,OACA,SACA,UACA,IACA,OACA,UACF,EACMC,EAAUnG,EAAQ,QAAQ,YAAY,EACtCvJ,EAAM,CACV,IAAKuJ,EAAQ,QAAQ,YAAY,EACjC,GAAI,WAAW,EACf,MAAO,GACP,MAAO,CACL,UAAa,GACb,QAAW,GACX,SAAY,EACd,CACF,EAiBA,GAfAvJ,EAAI,KAAO0P,EACP/J,EAAY,SAAS+J,CAAO,GAC9B1P,EAAI,KAAO,MACXA,EAAI,KAAO,IACF4F,EAAa,SAAS8J,CAAO,GACtC1P,EAAI,KAAO,OACXA,EAAI,KAAO,KAEXA,EAAI,KAAO0P,EACND,EAAe,SAASC,CAAO,IAClC1P,EAAI,KAAO,KAKXuJ,EAAQ,cAAc,EAAG,CAC3B,IAAMoG,EAAQ,CAAC,EACf,MAAM,KAAKpG,EAAQ,UAAU,EAAE,QAAQhG,GAAQ,CAC7CoM,EAAM,GAAGpM,EAAK,KAAK,YAAY,CAAC,EAAE,EAAI,GAAGA,EAAK,KAAK,EACrD,CAAC,EACDvD,EAAI,MAAQ2P,CACd,CAEA,OAAIpG,EAAQ,WAAW,OAAS,IAC9BvJ,EAAI,SAAW,CAAC,EAChBuJ,EAAQ,WAAW,QAAQtF,GAAS,CAC9BA,EAAM,WAAa,KAAK,aAC1BjE,EAAI,SAAS,KAAKwP,EAAcvL,CAAK,CAAC,EAC7BA,EAAM,WAAa,KAAK,WAAaA,EAAM,UAAU,KAAK,IACnEjE,EAAI,KAAOiE,EAAM,UAAU,KAAK,EAEpC,CAAC,GAEIjE,CACT,CAGA,IAAM2L,EADS,IAAI,UAAU,EACV,gBAAgB4D,EAAO,WAAW,EAG/CK,EAAW,MAAM,KAAKjE,EAAI,KAAK,QAAQ,EAAE,IAAI1H,GAASuL,EAAcvL,CAAK,CAAC,EAC1E4L,EAAW,MAAM,KAAKlE,EAAI,KAAK,QAAQ,EAAE,IAAI1H,GAASuL,EAAcvL,CAAK,CAAC,EAGhF,MAAO,CAAC,GAAG2L,EAAU,GAAGC,CAAQ,CAClC,EACA,OAAO,UAAYN,GAAS,CAC1B,SAASO,EAAcC,EAAM,CAC3B,IAAMC,EAAgBzG,GAAW,CAC/B,IAAIkB,EAAO,GAGX,GAAIlB,EAAQ,OAAS,CAACA,EAAQ,MAAM,QAAS,OAAOkB,EAEpD,GAAI,CAAClB,EAAQ,IACX,OAAAkB,GAAQlB,EAAQ,MAAQ,GACjBkB,EAKT,GAFAA,GAAQ,IAAIlB,EAAQ,GAAG,GAEnBA,EAAQ,MACV,OAAS,CAAC5H,EAAKxB,CAAK,IAAK,OAAO,QAAQoJ,EAAQ,KAAK,EACnDkB,GAAQ,IAAI9I,CAAG,KAAKxB,CAAK,IAc7B,GAVAsK,GAAQ,IAEJlB,EAAQ,OACNA,EAAQ,MAAQ,SAAWA,EAAQ,MAAQ,SAC7CkB,GAAQlB,EAAQ,KAEhBkB,GAAQwF,EAAW1G,EAAQ,IAAI,GAI/BA,EAAQ,SACV,QAAW2G,KAAgB3G,EAAQ,SACjCkB,GAAQuF,EAAcE,CAAY,EAItC,OAAAzF,GAAQ,KAAKlB,EAAQ,GAAG,IACjBkB,CACT,EAEIA,EAAO,GAGX,OAAK,MAAM,QAAQsF,CAAI,IACrBA,EAAO,CAACA,CAAI,GAGV,MAAM,QAAQA,CAAI,GACpBA,EAAK,QAAQxG,GAAW,CACtBkB,GAAQuF,EAAczG,CAAO,CAC/B,CAAC,EAEIkB,CACT,CACA,SAASwF,EAAWE,EAAM,CACxB,IAAMC,EAAM,CACV,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,QACP,EACA,OAAOD,EAAK,QAAQ,WAAY,SAASE,EAAG,CAAE,OAAOD,EAAIC,CAAC,CAAG,CAAC,CAChE,CACA,SAASC,EAAaP,EAAM,CAC1B,IAAMtF,EAAOqF,EAAcC,CAAI,EAC3BQ,EAAM,KACNC,EAAS,GACTC,EAAS,GAEb,OAAAhG,EAAK,MAAM,OAAO,EAAE,QAAQ,SAASlB,EAAS,CACxCA,EAAQ,MAAM,OAAO,IACvBkH,EAASA,EAAO,UAAUF,EAAI,MAAM,GAGtCC,GAAUC,EAAS,IAAMlH,EAAQ,KAAK,EAAI;AAAA,EAEtCA,EAAQ,MAAM,kBAAkB,GAAK,CAACA,EAAQ,WAAW,QAAQ,IACnEkH,GAAUF,EAEd,CAAC,EAGMC,EAAO,UAAU,EAAGA,EAAO,OAAS,CAAC,EAAE,KAAK,CACrD,CAEA,OAAOF,EAAaf,CAAK,CAC3B,EACA,OAAO,SAAWmB,GAAO,CACvB,GAAI,OAAOA,GAAQ,SACjB,MAAM,IAAI,MAAM,4BAA4B,EAG9C,IAAMX,EAAO,CACX,cAAe,CAAC,EAChB,OAAQ,CAAC,EACT,WAAY,CAAC,EACb,YAAa,CAAC,CAChB,EAEAW,EAAM,UAAUA,CAAG,EAGnB,IAAMC,EAAc,sCAChBC,EAEJ,MAAQA,EAAcD,EAAY,KAAKD,CAAG,KAAO,MAAM,CACrD,IAAMG,EAAYD,EAAY,CAAC,EAAE,KAAK,EAClC,QAAQ,WAAa,CAAC,QAAQ,UAAU,SAASC,CAAS,GAC5D,QAAQ,UAAU,KAAKA,CAAS,CAEpC,CAGAH,EAAMA,EAAI,QAAQC,EAAa,EAAE,EAEjC,IAAMG,EAAiB,wDACjBC,EAAkB,mDAClBC,EAAgB,4BAGtB,SAASC,EAAuBvD,EAAK,CACnC,GAAI,CACF,OAAO,mBAAmBA,CAAG,CAC/B,MAAQ,CACN,OAAOA,CACT,CACF,CAEA,SAASwD,EAAgBnK,EAAUoK,EAAYtR,EAAQ,CAErD,GADAkH,EAAWA,EAAS,KAAK,EACrBA,EAAS,WAAW,YAAY,EAAG,OAEvC,GAAIA,IAAa,QAAS,CACxBoK,EAAW,MAAM,GAAG,EAAE,QAAQlR,GAAQ,CACpC,GAAM,CAACmR,EAASC,EAAQ,EAAIpR,EAAK,MAAM,GAAG,EAAE,IAAIgB,IAAQA,GAAK,KAAK,CAAC,EAC/DmQ,GAAWC,KACbtB,EAAK,cAAcqB,CAAO,EAAIH,EAAuBI,EAAQ,EAEjE,CAAC,EACD,MACF,CAEA,IAAMC,EAAcvK,EAAS,MAAM,2BAA2B,EAC1DwK,EAAexK,EACfqH,EAAS,KAETkD,IACFC,EAAeD,EAAY,CAAC,EAAE,KAAK,EACnClD,EAASkD,EAAY,CAAC,GAGnBzR,EAAO0R,CAAY,IACtB1R,EAAO0R,CAAY,EAAI,CAAC,GAG1B,IAAIC,EAAgB3R,EAAO0R,CAAY,EACvC,GAAInD,EAAQ,CACVoD,EAAc,QAAaA,EAAc,SAAc,CAAC,EACxD,IAAMC,EAAY,CAChB,SAAUrD,EACV,OAAQ,CAAC,CACX,EACAoD,EAAc,QAAW,KAAKC,CAAS,EACvCD,EAAgBC,EAAU,MAC5B,MACED,EAAc,KAAUA,EAAc,MAAW,CAAC,EAClDA,EAAgBA,EAAc,KAIhC,IAAME,EAAgB,mCAClBC,EACJ,MAAQA,EAAQD,EAAc,KAAKP,CAAU,KAAO,MAAM,CACxD,IAAMtQ,EAAW8Q,EAAM,CAAC,EAAE,KAAK,EACzBxR,EAAQwR,EAAM,CAAC,EAAE,KAAK,EAGtBC,GAAW,4BACXC,GAAW1R,EAAM,MAAMyR,EAAQ,EAErC,GAAIC,GAAU,CACZ,IAAMC,GAAaD,GAAS,CAAC,EAAE,KAAK,EACpCL,EAAc3Q,CAAQ,EAAI,QAAQoQ,EAAuBa,EAAU,CAAC,IACtE,MACEN,EAAc3Q,CAAQ,EAAIoQ,EAAuB9Q,CAAK,CAE1D,CACF,CAEA,SAAS4R,EAAaC,EAAUnS,EAAQ,CACtC,IAAI8R,EACJ,MAAQA,EAAQX,EAAc,KAAKgB,CAAQ,KAAO,MAAM,CACtD,IAAMjL,EAAW4K,EAAM,CAAC,EAAE,KAAK,EACzBR,EAAaQ,EAAM,CAAC,EAAE,KAAK,EACjCT,EAAgBnK,EAAUoK,EAAYtR,CAAM,CAC9C,CACF,CAEA,SAASoS,EAAiBC,EAAeC,EAAgB,CACvD,IAAMjJ,EAAY,CAAC,EAEnBiJ,EAAe,MAAM,GAAG,EAAE,QAAQC,GAAW,CAE3C,GADAA,EAAUA,EAAQ,KAAK,EACnB,CAACA,EAAS,OAEd,GAAM,CAACC,EAAcC,CAAc,EAAIF,EAAQ,MAAM,GAAG,EAAE,IAAInR,GAAQA,EAAK,KAAK,CAAC,EAC7EoR,IAAiBA,EAAa,SAAS,IAAI,GAAKA,EAAa,SAAS,MAAM,GAAKA,EAAa,SAAS,GAAG,IAC5GC,EAAe,MAAM,GAAG,EAAE,QAAQrS,GAAQ,CACxC,GAAM,CAACY,EAAUV,CAAK,EAAIF,EAAK,MAAM,GAAG,EAAE,IAAIK,GAAKA,EAAE,KAAK,CAAC,EACvDO,GAAYV,IACd+I,EAAUmJ,CAAY,EAAInJ,EAAUmJ,CAAY,GAAK,CAAC,EACtDnJ,EAAUmJ,CAAY,EAAExR,CAAQ,EAAIoQ,EAAuB9Q,CAAK,EAEpE,CAAC,CAEL,CAAC,EAED4P,EAAK,WAAWmC,CAAa,EAAI,CAAE,UAAAhJ,CAAU,CAC/C,CAGA,IAAIqJ,EACJ,MAAQA,EAAiBzB,EAAe,KAAKJ,CAAG,KAAO,MAAM,CAC3D,IAAMwB,EAAgBK,EAAe,CAAC,EAAE,KAAK,EACvCJ,EAAiBI,EAAe,CAAC,EAAE,KAAK,EAC9CN,EAAiBC,EAAeC,CAAc,CAChD,CAGA,IAAIK,EACJ,MAAQA,EAAazB,EAAgB,KAAKL,CAAG,KAAO,MAAM,CACxD,IAAM+B,EAAiBD,EAAW,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EACvEE,EAAaF,EAAW,CAAC,EAAE,KAAK,EAChCG,EAAc,CAAC,EAErBZ,EAAaW,EAAYC,CAAW,EAEpC5C,EAAK,YAAY0C,CAAc,EAAIE,CACrC,CAGA,IAAMC,EAAkBlC,EAAI,QAAQK,EAAiB,EAAE,EAGvD,OAAAgB,EAAaa,EAAiB7C,EAAK,MAAM,EAGzCW,EAAMA,EAAI,QAAQI,EAAgB,EAAE,EAGpC,OAAO,KAAKf,EAAK,MAAM,EAAE,QAAQhJ,GAAY,CACvC,OAAO,KAAKgJ,EAAK,OAAOhJ,CAAQ,CAAC,EAAE,SAAW,GAChD,OAAOgJ,EAAK,OAAOhJ,CAAQ,CAE/B,CAAC,EAEMgJ,CACT,EAEA,OAAO,SAAWnJ,GAAU,CAC1B,IAAI8J,EAAM,GACNmC,EAAS,GACTC,EAAY,IACZC,EAAY,IACZC,EAAa,IAGjB,SAASC,EAAc9S,EAAO,CAC5B,MAAO,UAAU,KAAKA,CAAK,CAC7B,CAGA,SAASqG,EAAcO,EAAU4H,EAAOuE,EAAc,EAAG,CACvD,IAAIzC,EAAS,KAAK,OAAOyC,CAAW,EAChCC,EAAW,GAETC,EAAYzE,EAAM,WAAa,CAAC,EAChC0E,EAAa1E,EAAM,MAAQ,CAAC,EAC5B2E,EAAU3E,EAAM,SAAW,CAAC,EAC5B9K,EAAW8K,EAAM,UAAY,CAAC,EAGpCwE,GAAY,GAAG1C,CAAM,GAAG1J,CAAQ,IAAIgM,CAAS;AAAA,EAG7C,OAAW,CAACQ,EAAUpT,CAAK,IAAK,OAAO,QAAQiT,CAAS,EACtDD,GAAY,GAAG1C,CAAM,KAAKoC,CAAM,GAAGU,CAAQ,KAAKpT,CAAK,GAAG2S,CAAS;AAAA,EAInE,OAAS,CAACjS,EAAUV,CAAK,IAAK,OAAO,QAAQkT,CAAU,EACjDJ,EAAc9S,CAAK,IAErBA,EAAQA,EAAM,QAAQ,6BAA8B,CAACwR,EAAOP,IACnD,SAASA,CAAO,GACxB,GAEH+B,GAAY,GAAG1C,CAAM,KAAK5P,CAAQ,KAAKV,CAAK,GAAG2S,CAAS;AAAA,EAG1DK,GAAY,GAAG1C,CAAM,GAAGuC,CAAU;AAAA,EAGlCM,EAAQ,QAAQ,CAAC,CAAE,SAAUjF,EAAgB,OAAQC,CAAa,IAAM,CACtE6E,GAAY,GAAG1C,CAAM,GAAG1J,CAAQ,GAAGsH,CAAc,IAAI0E,CAAS;AAAA,EAC9D,OAAS,CAAClS,EAAUV,CAAK,IAAK,OAAO,QAAQmO,CAAY,EACnD2E,EAAc9S,CAAK,IACrBA,EAAQA,EAAM,QAAQ,6BAA8B,CAACwR,EAAOP,IACnD,SAASA,CAAO,GACxB,GAEH+B,GAAY,GAAG1C,CAAM,KAAK5P,CAAQ,KAAKV,CAAK,GAAG2S,CAAS;AAAA,EAE1DK,GAAY,GAAG1C,CAAM,GAAGuC,CAAU;AAAA,CACpC,CAAC,EAGD,OAAW,CAACQ,EAAeC,CAAU,IAAK,OAAO,QAAQ5P,CAAQ,EAC/DsP,GAAY3M,EAAc,GAAGO,CAAQ,IAAIyM,CAAa,GAAIC,EAAYP,EAAc,CAAC,EAGvF,OAAOC,CACT,CAGA,SAASO,EAAkBC,EAAYT,EAAc,EAAG,CACtD,IAAIzC,EAAS,KAAK,OAAOyC,CAAW,EAChCU,EAAe,GAEnB,OAAW,CAACC,EAAeC,CAAS,IAAK,OAAO,QAAQH,CAAU,EAAG,CACnEC,GAAgB,GAAGnD,CAAM,cAAcoD,CAAa,IAAId,CAAS;AAAA,EAEjE,OAAW,CAACgB,EAAUnN,CAAM,IAAK,OAAO,QAAQkN,EAAU,SAAS,EAAG,CACpEF,GAAgB,GAAGnD,CAAM,KAAKsD,CAAQ,IAAIhB,CAAS;AAAA,EACnD,OAAS,CAAClS,EAAUV,CAAK,IAAK,OAAO,QAAQyG,CAAM,EAC7CqM,EAAc9S,CAAK,IACrBA,EAAQA,EAAM,QAAQ,6BAA8B,CAACwR,EAAOP,IACnD,SAASA,CAAO,GACxB,GAEHwC,GAAgB,GAAGnD,CAAM,OAAO5P,CAAQ,KAAKV,CAAK,GAAG2S,CAAS;AAAA,EAEhEc,GAAgB,GAAGnD,CAAM,KAAKuC,CAAU;AAAA,CAC1C,CAEAY,GAAgB,GAAGnD,CAAM,GAAGuC,CAAU;AAAA,CACxC,CAEA,OAAOY,CACT,CAGA,SAASI,EAAmBC,EAAaf,EAAc,EAAG,CACxD,IAAIzC,EAAS,KAAK,OAAOyC,CAAW,EAChCgB,EAAgB,GAEpB,OAAW,CAACC,EAAYvN,CAAM,IAAK,OAAO,QAAQqN,CAAW,EAAG,CAC9DC,GAAiB,GAAGzD,CAAM,sBAAsB0D,CAAU,KAAKpB,CAAS;AAAA,EACxE,OAAW,CAAChM,EAAU4H,CAAK,IAAK,OAAO,QAAQ/H,CAAM,EACnDsN,GAAiB1N,EAAcO,EAAU4H,EAAOuE,EAAc,CAAC,EAEjEgB,GAAiB,GAAGzD,CAAM,GAAGuC,CAAU;AAAA,CACzC,CAEA,OAAOkB,CACT,CAGA,GAAItN,EAAO,eAAiB,OAAO,KAAKA,EAAO,aAAa,EAAE,OAAQ,CACpE8J,GAAO;AAAA,EACP,OAAW,CAAC6C,EAAUpT,CAAK,IAAK,OAAO,QAAQyG,EAAO,aAAa,EACjE8J,GAAO,KAAK6C,CAAQ,KAAKpT,CAAK,GAAG2S,CAAS;AAAA,EAE5CpC,GAAO;AAAA;AAAA,CACT,CAGA,OAAW,CAAC0D,EAASzF,CAAK,IAAK,OAAO,QAAQ/H,EAAO,MAAM,EAAG,CAC5D,GAAI,CAAC+H,GAAU,CAAC,OAAO,KAAKA,EAAM,WAAa,CAAC,CAAC,EAAE,QAC/C,CAAC,OAAO,KAAKA,EAAM,MAAQ,CAAC,CAAC,EAAE,QAC/B,CAAC,OAAO,KAAKA,EAAM,SAAW,CAAC,CAAC,EAAE,QAClC,CAAC,OAAO,KAAKA,EAAM,UAAY,CAAC,CAAC,EAAE,OACrC,SAIF+B,GAAOlK,EADU4N,EACczF,CAAK,CACtC,CAGA,OAAI,OAAO,KAAK/H,EAAO,YAAc,CAAC,CAAC,EAAE,SACvC8J,GAAOgD,EAAkB9M,EAAO,UAAU,GAIxC,OAAO,KAAKA,EAAO,aAAe,CAAC,CAAC,EAAE,SACxC8J,GAAOsD,EAAmBpN,EAAO,WAAW,GAGvC8J,CACT,EACA,OAAO,kBAAoB9J,GAAU,CACnC,IAAI8J,EAAM,GACNmC,EAAS,GACTC,EAAY,IACZC,EAAY,IACZC,EAAa,IAGb,KAAK,cAAc,SAAS,QAAQ,SAAS,KAC3C,QAAQ,YAAc,QAAU,QAAQ,YAAc,UAAQH,EAAS,KACvE,QAAQ,YAAc,SACxBC,EAAY,GACZC,EAAY,GACZC,EAAa,IAEX,QAAQ,YAAc,SAAQH,EAAS,MAI7C,SAASwB,EAAclU,EAAO,CAC5B,MAAO,UAAU,KAAKA,CAAK,CAC7B,CAGA,SAASqG,EAAcO,EAAU4H,EAAOuE,EAAc,EAAG,CACvD,IAAIzC,EAAS,KAAK,OAAOyC,CAAW,EAChCoB,EAAW,GAETlB,EAAYzE,EAAM,WAAa,CAAC,EAChC0E,EAAa1E,EAAM,MAAQ,CAAC,EAC5B2E,EAAU3E,EAAM,SAAW,CAAC,EAC5B9K,EAAW8K,EAAM,UAAY,CAAC,EAEpC2F,GAAY,GAAG7D,CAAM,GAAG1J,CAAQ,IAAIgM,CAAS;AAAA,EAG7C,OAAW,CAACQ,EAAUpT,CAAK,IAAK,OAAO,QAAQiT,CAAS,EACtDkB,GAAY,GAAG7D,CAAM,KAAKoC,CAAM,GAAGU,CAAQ,KAAKpT,CAAK,GAAG2S,CAAS;AAAA,EAInE,OAAS,CAACjS,EAAUV,CAAK,IAAK,OAAO,QAAQkT,CAAU,EACjDxS,EAAS,WAAW,IAAI,IAC1BA,EAAWA,EAAS,MAAM,IAAI,EAAE,KAAKgS,CAAM,GAIzCwB,EAAclU,CAAK,IAErBA,EAAQA,EAAM,QAAQ,6BAA8B,CAACwR,EAAOP,IACrDvQ,EAAS,WAAW,IAAI,EAGpB,GAAGgS,CAAM,GAAGzB,CAAO,GAFnB,GAAGyB,CAAM,GAAGzB,CAAO,EAI7B,GAEHkD,GAAY,GAAG7D,CAAM,KAAK5P,CAAQ,KAAKV,CAAK,GAAG2S,CAAS;AAAA,EAmB1D,GAfAQ,EAAQ,QAAQ,CAAC,CAAE,SAAUjF,EAAgB,OAAQC,CAAa,IAAM,CACtEgG,GAAY,GAAG7D,CAAM,MAAMpC,CAAc,IAAI0E,CAAS;AAAA,EACtD,OAAS,CAAClS,EAAUV,CAAK,IAAK,OAAO,QAAQmO,CAAY,EAEnD+F,EAAclU,CAAK,IACrBA,EAAQA,EAAM,QAAQ,6BAA8B,CAACwR,EAAOP,KACnD,GAAGyB,CAAM,GAAGzB,EAAO,EAC3B,GAEHkD,GAAY,GAAG7D,CAAM,OAAO5P,CAAQ,KAAKV,CAAK,GAAG2S,CAAS;AAAA,EAE5DwB,GAAY,GAAG7D,CAAM,KAAKuC,CAAU;AAAA,CACtC,CAAC,EAGGnP,EACF,OAAW,CAAC2P,EAAeC,CAAU,IAAK,OAAO,QAAQ5P,CAAQ,EAC/DyQ,GAAY9N,EAAc,GAAGO,CAAQ,IAAIyM,CAAa,GAAIC,EAAYP,EAAc,CAAC,EAIzF,OAAAoB,GAAY,GAAG7D,CAAM,GAAGuC,CAAU;AAAA,EAE3BsB,CACT,CAGA,SAASZ,EAAkBC,EAAYT,EAAc,EAAG,CACtD,IAAIzC,EAAS,KAAK,OAAOyC,CAAW,EAChCqB,EAAe,GAEnB,OAAW,CAACV,EAAeC,CAAS,IAAK,OAAO,QAAQH,CAAU,EAAG,CACnEY,GAAgB,GAAG9D,CAAM,cAAcoD,CAAa,IAAId,CAAS;AAAA,EAEjE,OAAW,CAACgB,EAAUnN,CAAM,IAAK,OAAO,QAAQkN,EAAU,SAAS,EAAG,CACpES,GAAgB,GAAG9D,CAAM,KAAKsD,CAAQ,IAAIhB,CAAS;AAAA,EACnD,OAAS,CAAClS,EAAUV,CAAK,IAAK,OAAO,QAAQyG,CAAM,EAE7CyN,EAAclU,CAAK,IACrBA,EAAQA,EAAM,QAAQ,6BAA8B,CAACwR,EAAOP,IACnD,GAAGyB,CAAM,GAAGzB,CAAO,EAC3B,GAEHmD,GAAgB,GAAG9D,CAAM,OAAO5P,CAAQ,KAAKV,CAAK,GAAG2S,CAAS;AAAA,EAEhEyB,GAAgB,GAAG9D,CAAM,KAAKuC,CAAU;AAAA,CAC1C,CAEAuB,GAAgB,GAAG9D,CAAM,GAAGuC,CAAU;AAAA,CACxC,CAEA,OAAOuB,CACT,CAGA,SAASP,EAAmBC,EAAaf,EAAc,EAAG,CACxD,IAAIzC,EAAS,KAAK,OAAOyC,CAAW,EAChCsB,EAAgB,GAEpB,OAAW,CAACL,EAAYvN,CAAM,IAAK,OAAO,QAAQqN,CAAW,EAAG,CAC9DO,GAAiB,GAAG/D,CAAM,sBAAsB0D,CAAU,KAAKpB,CAAS;AAAA,EACxE,OAAW,CAAChM,EAAU4H,CAAK,IAAK,OAAO,QAAQ/H,EAAO,MAAQ,CAAC,CAAC,EAC9D4N,GAAiBhO,EAAcO,EAAU4H,EAAOuE,EAAc,CAAC,EAEjEsB,GAAiB,GAAG/D,CAAM,GAAGuC,CAAU;AAAA,CACzC,CAEA,OAAOwB,CACT,CAGA,IAAI/H,EAAgB,CAAC,EACrB,GAAI7F,EAAO,eAAiB,OAAO,KAAKA,EAAO,aAAa,EAAE,OAAQ,CACpE,OAAW,CAAC2M,EAAUpT,CAAK,IAAK,OAAO,QAAQyG,EAAO,aAAa,EACjE6F,EAAc,KAAK8G,CAAQ,EAC3B7C,GAAO,GAAGmC,CAAM,GAAGU,EAAS,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC,KAAKpT,CAAK,GAAG2S,CAAS;AAAA,EAExEpC,GAAO;AAAA,CACT,CAGA,OAAW,CAAC0D,EAASzF,CAAK,IAAK,OAAO,QAAQ/H,EAAO,MAAM,EAAG,CAC5D,GAAI,CAAC+H,GAAU,CAAC,OAAO,KAAKA,EAAM,WAAa,CAAC,CAAC,EAAE,QAC/C,CAAC,OAAO,KAAKA,EAAM,MAAQ,CAAC,CAAC,EAAE,QAC/B,CAAC,OAAO,KAAKA,EAAM,SAAW,CAAC,CAAC,EAAE,QAClC,CAAC,OAAO,KAAKA,EAAM,UAAY,CAAC,CAAC,EAAE,OACrC,SAIF+B,GAAOlK,EADU4N,EACczF,CAAK,CACtC,CAGA,OAAI,OAAO,KAAK/H,EAAO,YAAc,CAAC,CAAC,EAAE,SACvC8J,GAAOgD,EAAkB9M,EAAO,UAAU,GAIxC,OAAO,KAAKA,EAAO,aAAe,CAAC,CAAC,EAAE,SACxC8J,GAAOsD,EAAmBpN,EAAO,WAAW,GAGvC8J,CACT,EACA,OAAO,aAAe,CAAC+D,EAAcC,IAAY,CAC/C,GAAI,OAAOD,GAAiB,SAC1B,MAAM,IAAI,MAAM,sBAAsB,EAIxC,cAAO,OAAOA,EAAa,cAAeC,EAAQ,aAAa,EAG/D,OAAO,KAAKA,EAAQ,MAAM,EAAE,QAAQ3N,GAAY,CACzC0N,EAAa,OAAO1N,CAAQ,GAG3B2N,EAAQ,OAAO3N,CAAQ,EAAE,OAC3B0N,EAAa,OAAO1N,CAAQ,EAAE,KAAO,CACnC,GAAG0N,EAAa,OAAO1N,CAAQ,EAAE,KACjC,GAAG2N,EAAQ,OAAO3N,CAAQ,EAAE,IAC9B,GAEE2N,EAAQ,OAAO3N,CAAQ,EAAE,UAC3B0N,EAAa,OAAO1N,CAAQ,EAAE,QAAU,CACtC,GAAI0N,EAAa,OAAO1N,CAAQ,EAAE,SAAW,CAAC,EAC9C,GAAG2N,EAAQ,OAAO3N,CAAQ,EAAE,OAC9B,IAZF0N,EAAa,OAAO1N,CAAQ,EAAI2N,EAAQ,OAAO3N,CAAQ,CAe3D,CAAC,EAGD,OAAO,KAAK2N,EAAQ,UAAU,EAAE,QAAQb,GAAiB,CAClDY,EAAa,WAAWZ,CAAa,GAGxCY,EAAa,WAAWZ,CAAa,EAAE,UAAY,CACjD,GAAGY,EAAa,WAAWZ,CAAa,EAAE,UAC1C,GAAGa,EAAQ,WAAWb,CAAa,EAAE,SACvC,EACAY,EAAa,WAAWZ,CAAa,EAAE,WAAa,CAClD,GAAGY,EAAa,WAAWZ,CAAa,EAAE,WAC1C,GAAGa,EAAQ,WAAWb,CAAa,EAAE,UACvC,GATAY,EAAa,WAAWZ,CAAa,EAAIa,EAAQ,WAAWb,CAAa,CAW7E,CAAC,EAGD,OAAO,KAAKa,EAAQ,WAAW,EAAE,QAAQP,GAAc,CAChDM,EAAa,YAAYN,CAAU,EAGtC,OAAO,KAAKO,EAAQ,YAAYP,CAAU,CAAC,EAAE,QAAQpN,GAAY,CAC1D0N,EAAa,YAAYN,CAAU,EAAEpN,CAAQ,EAGhD0N,EAAa,YAAYN,CAAU,EAAEpN,CAAQ,EAAE,KAAO,CACpD,GAAG0N,EAAa,YAAYN,CAAU,EAAEpN,CAAQ,EAAE,KAClD,GAAG2N,EAAQ,YAAYP,CAAU,EAAEpN,CAAQ,EAAE,IAC/C,EALA0N,EAAa,YAAYN,CAAU,EAAEpN,CAAQ,EAAI2N,EAAQ,YAAYP,CAAU,EAAEpN,CAAQ,CAO7F,CAAC,EAXD0N,EAAa,YAAYN,CAAU,EAAIO,EAAQ,YAAYP,CAAU,CAazE,CAAC,EAEMM,CACT,EACA,OAAO,aAAe,MAAM5F,IACT,MAAM,MAAMA,CAAG,GAChB,KAAK,EAEvB,OAAO,yBAA2B,MAAMA,GAAO,CAC7C,IAAM6B,EAAM,MAAM,aAAa7B,CAAG,EAG5B8F,EAAa,IAAI,cACvB,MAAMA,EAAW,QAAQjE,CAAG,EAE5B,IAAMpD,EAAmB,CAAC,EAG1B,QAAWiB,KAAQoG,EAAW,SAE5B,GAAIpG,EAAK,OAAS,QAAQ,YACtB,CAACA,EAAK,aAAa,SAAS,GAAG,GAC/B,CAACA,EAAK,aAAa,SAAS,YAAY,EAAG,CAE7C,IAAMqG,EAAYrG,EAAK,aAAa,QAAQ,IAAK,EAAE,EACnD,GAAIqG,EAAW,CACb,IAAMC,EAAe,MAAM,KAAKtG,EAAK,KAAK,EACvC,OAAOtO,GAAQ,CAACA,EAAK,WAAW,WAAW,GAAK,CAACA,EAAK,WAAW,YAAY,CAAC,EAC9E,IAAIA,GAAQ,GAAGA,CAAI,KAAKsO,EAAK,MAAMtO,CAAI,CAAC,GAAG,EAC3C,KAAK,GAAG,EACXqN,EAAiBsH,CAAS,EAAIC,CAChC,CACF,CAGF,OAAOvH,CACT,EACA,OAAO,UAAY,IAAM,CAEvB,IAAMwH,EAAe,CACnB,cAAe,QAAQ,IAAI,cAC3B,OAAQ,QAAQ,IAChB,KAAM,QAAQ,KACd,iBAAkB,KAAK,gBACzB,EAGMC,EAAc,KAAK,UAAUD,CAAY,GAG3C,KAAK,QAAQ,SAAW,GAAK,KAAK,QAAQ,KAAK,YAAY,IAAMC,KACnE,KAAK,QAAU,KAAK,QAAQ,MAAM,EAAG,KAAK,aAAe,CAAC,EAC1D,KAAK,QAAQ,KAAKA,CAAW,EAC7B,KAAK,eACL,aAAa,QAAQ,WAAY,KAAK,UAAU,OAAO,CAAC,EAE5D,EACA,OAAO,KAAO,IAAM,CAClB,GAAI,KAAK,aAAe,EAAG,CACzB,KAAK,eAAiB,GACtB,KAAK,eACL,IAAMC,EAAgB,KAAK,MAAM,KAAK,QAAQ,KAAK,YAAY,CAAC,EAEhE,QAAQ,IAAI,cAAgBA,EAAc,cAC1C,QAAQ,IAAMA,EAAc,OAC5B,QAAQ,KAAOA,EAAc,KAC7B,KAAK,iBAAmBA,EAAc,iBACtC,KAAK,eAAiB,IACxB,CACF,EACA,OAAO,KAAO,IAAM,CAClB,GAAI,KAAK,aAAe,KAAK,QAAQ,OAAS,EAAG,CAC/C,KAAK,eAAiB,GACtB,KAAK,eACL,IAAMC,EAAY,KAAK,MAAM,KAAK,QAAQ,KAAK,YAAY,CAAC,EAE5D,QAAQ,IAAI,cAAgBA,EAAU,cACtC,QAAQ,IAAM,cAAc,OAC5B,QAAQ,KAAOA,EAAU,KACzB,KAAK,iBAAmBA,EAAU,iBAClC,KAAK,eAAiB,IACxB,CACF,EACA,OAAO,WAAa,IAAM,CACxB,MAAM,OAAO,CACX,MAAO,oBACP,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaT,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,EAC3C,SAAS,eAAe,WAAW,EAAE,OAAO,CAC9C,EACA,WAAY,CACV,IAAMC,EAAY,SAAS,eAAe,WAAW,EAAE,MACnDC,EAAO,SAAS,eAAe,WAAW,EAAE,MAChD,GAAID,IAAc,OAChB,SAASC,CAAI,MACR,CACLA,EAAO,UAAUA,CAAI,EACrB,IAAMT,EAAU,SAASS,CAAI,EAC7B,aAAa,QAAQ,IAAKT,CAAO,EACjC,SAAS,cAAc,cAAc,EAAE,cAAc,iBAAiB,EAAE,QAAQ,CAClF,CACF,CACF,CAAC,CACH,EACA,OAAO,WAAa7F,GAAO,CACzB,GAAI,CAACA,EACH,eAAQ,UAAU,KAAK,EAAE,EACzB,SAAS,eAAe,cAAc,EAAE,UAAY,gBAAgB,EAC7D,GAGJ,QAAQ,UAAU,SAASA,CAAG,EAGjC,QAAQ,MAAM,2BAA2BA,CAAG,EAAE,EAF9C,QAAQ,UAAU,KAAKA,CAAG,EAKxB,SAAS,eAAe,cAAc,IACxC,SAAS,eAAe,cAAc,EAAE,UAAY,gBAAgB,EAExE,EACA,OAAO,gBAAkB,IAChB,QAAQ,UAAU,IAAI,CAAC9M,EAASC,IAAU;AAAA,yDACMA,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAO7CD,CAAO;AAAA,qCACaC,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA,4CAKEA,CAAK;AAAA,UACvCvB,EAAM,KAAK;AAAA;AAAA;AAAA,GAGlB,EAAE,KAAK,EAAE,EAEZ,OAAO,iBAAmBkB,GAAO,CAC/B,MACE,0CAA0CA,CAAG,sCAC/C,EACG,KAAKmN,GAAY,CAChB,GAAI,CAACA,EAAS,GACZ,MAAM,IAAI,MAAM,6BAA6B,EAE/C,OAAOA,EAAS,KAAK,CACvB,CAAC,EACA,KAAKsG,GAAQ,CACZ,GAAIA,GAAQA,EAAK,SAAWA,EAAK,QAAQ,OAAS,EAAG,CACnD,IAAMC,EAAcD,EAAK,QAAQ,IAAI5E,GAAUA,CAAM,EAErD,SAAS,eAAe,WAAW,EAAE,UAAY6E,EAAY,IAAI7E,GACxD;AAAA;AAAA;AAAA;AAAA,mDAIkCA,EAAO,MAAM,+BAA+BA,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CASlEA,EAAO,IAAI;AAAA,0CACXA,EAAO,OAAO;AAAA;AAAA,+CAETA,EAAO,WAAW;AAAA,uBAExD,EAAE,KAAK,EAAE,CACZ,CACF,CAAC,EACA,MAAMzB,GAAS,CACd,QAAQ,MAAM,uBAAwBA,CAAK,CAC7C,CAAC,CACL,EACA,OAAO,aAAeuG,GAAO,CAC3B,IAAMC,EAAS,SAAS,cAAc,eAAeD,CAAG,IAAI,EACxDC,GAAQA,EAAO,OAAO,CAC5B,EACA,OAAO,cAAgBC,GAAW,CAChCA,EAAQ,QAAQF,GAAO,CACrB,IAAMC,EAAS,SAAS,cAAc,eAAeD,CAAG,IAAI,EACxDC,GAAQA,EAAO,OAAO,CAC5B,CAAC,CACH,EACA,OAAO,WAAa,MAAME,GACjB,IAAI,QAAQ,CAACC,EAASC,IAAW,CAGtC,GADuB,SAAS,cAAc,eAAeF,CAAS,IAAI,EACtD,CAClBC,EAAQ,EACR,MACF,CAGA,IAAME,EAAgB,SAAS,cAAc,QAAQ,EACrDA,EAAc,IAAMH,EACpBG,EAAc,OAASF,EACvBE,EAAc,QAAU,IAAMD,EAAO,IAAI,MAAM,0BAA0BF,CAAS,EAAE,CAAC,EACrF,SAAS,KAAK,YAAYG,CAAa,CACzC,CAAC,EAEH,OAAO,YAAc,MAAMC,GAClB,QAAQ,IAAIA,EAAS,IAAI,UAAU,CAAC,EAI7C,OAAO,aAAe,CAACC,EAAeC,EAAmB,KAAS,CAChE,GAAI,CAACD,EAAe,CAClB,mBAAmB,EACnB,MACF,CAEA,IAAME,EAAUF,EAAc,MAAM,GAAG,EAAE,IAAI5G,GAAKA,EAAE,KAAK,CAAC,EAE1D,SAAS+G,EAAqBC,EAAS,CACrC,OAAQA,EAAS,CACf,IAAK,IACH,cAAc,EAAI,EAClB,MACF,IAAK,IACH,cAAc,EAAK,EACnB,MACF,IAAK,IACH,cAAc,EAAI,EAClB,MACF,IAAK,IACH,cAAc,EAAK,EACnB,MACF,IAAK,IACH,cAAc,EACd,MACF,IAAK,MACH,QAAQ,IAAM,CACZ,cAAiB,CAAC,EAClB,OAAU,CAAC,EACX,WAAc,CAAC,EACf,YAAe,CAAC,CAClB,EACA,MACA,QACA,QAAQ,KAAK,mBAAoBA,CAAO,CAC5C,CACF,CAEA,SAASC,EAAmBjT,EAAOkT,EAAapU,EAAOqU,EAAO,CAC5D,OAAQD,EAAa,CACnB,IAAK,cAAe,OAAOpU,IAAU,EACrC,IAAK,aAAc,OAAOA,IAAUqU,EAAQ,EAC5C,IAAK,YAAa,OAAQrU,EAAQ,IAAO,SAASoU,EAAY,MAAM,GAAG,EAAE,CAAC,EAAG,EAAE,EAC/E,IAAK,iBAAkB,OAAQC,EAAQrU,IAAW,SAASoU,EAAY,MAAM,GAAG,EAAE,CAAC,EAAG,EAAE,EACxF,IAAK,aAAc,OAAOC,IAAU,EACpC,IAAK,QAAS,MAAO,EAAEnT,EAAM,UAAYA,EAAM,SAAS,OAAS,GACjE,IAAK,gBAAiB,OAAOA,EAAM,eAAe,QAAU,EAC5D,IAAK,eAAgB,OAAOA,EAAM,eAAe,eAAiB,EAClE,IAAK,cAAe,OAAOA,EAAM,eAAe,QAAU,SAASkT,EAAY,MAAM,GAAG,EAAE,CAAC,EAAG,EAAE,EAAI,EACpG,IAAK,mBAAoB,OAAOlT,EAAM,eAAe,eAAiB,SAASkT,EAAY,MAAM,GAAG,EAAE,CAAC,EAAG,EAAE,EAAI,EAChH,IAAK,eAAgB,OAAOlT,EAAM,eAAe,QAAU,EAC3D,QAAS,MAAO,EAClB,CACF,CAEA,SAASoT,EAAsBtT,EAAQgL,EAAOlO,EAAU,CACtD,IAAIyW,EAAc,EAElB,SAASC,EAAcxT,EAAQ,CAC7BuT,IAEAvT,EAAO,QAAQ,CAACE,EAAOlB,IAAU,CAC/B,IAAI2P,EAAQ,GAGN,CAAC5K,EAAU0P,CAAe,EAAIzI,EAAM,MAAM,GAAG,EAC7CoI,EAAcK,GAAmB,KAGnC,CAAC5T,EAAK6T,EAAYtH,EAAWjP,CAAK,EAAI,CAAC,KAAM,CAAC,EAAG,KAAM,IAAI,EACzDwW,EAAiB,eAAe,KAAK5P,CAAQ,EAC/C4P,IACF,CAACvH,EAAWjP,CAAK,EAAIwW,EAAe,CAAC,EAAE,MAAM,GAAG,GAElD,IAAMC,GAAe,eACjBC,GACJ,MAAQA,GAAcD,GAAa,KAAK7P,CAAQ,KAAO,MACrD2P,EAAW,KAAKG,GAAY,CAAC,CAAC,EAShC,GAPAhU,EAAMkE,EAAS,MAAM,QAAQ,EAAE,CAAC,EAG5BlE,GAAOK,EAAM,MAAQL,EAAK8O,EAAQ,GACjCA,EAAQ,GAGT+E,EAAW,OAAS,EACtB,GAAI,CAACxT,EAAM,OAAS,CAACA,EAAM,MAAM,MAAOyO,EAAQ,OAC3C,CACH,IAAMmF,GAAe5T,EAAM,MAAM,MAAM,MAAM,GAAG,EAChDyO,EAAQ+E,EAAW,MAAM9B,GAAakC,GAAa,SAASlC,CAAS,CAAC,CACxE,CAeF,GAXIxF,IACEjP,EAEE+C,EAAM,OAASA,EAAM,MAAMkM,CAAS,IAAMjP,IAAOwR,EAAQ,KAGzD,CAACzO,EAAM,OAAS,CAACA,EAAM,MAAM,eAAekM,CAAS,KAAGuC,EAAQ,KAKpEA,GAASyE,EAAa,CACxB,IAAMC,GAAQrT,EAAO,OAChBmT,EAAmBjT,EAAOkT,EAAapU,EAAOqU,EAAK,IAAG1E,EAAQ,GACrE,CAGIA,IACFzO,EAAM,MAAM,SAAW,GAClB,KAAK,iBAAiB,SAASA,EAAM,EAAE,GAC1C,KAAK,iBAAiB,KAAKA,EAAM,EAAE,GAKnCA,EAAM,UAAYA,EAAM,SAAS,OAAS,GAC5CsT,EAActT,EAAM,QAAQ,CAEhC,CAAC,EAEDqT,IAGIA,IAAgB,GAAKzW,GAAY,OAAOA,GAAa,YACvDA,EAAS,CAEb,CAGA0W,EAAcxT,CAAM,CACtB,CAEA,SAAS+T,EAA2B/I,EAAOlO,EAAU,CACnD,GAAI,KAAK,iBAAiB,OAAS,EAAG,CAEpC,IAAMqD,EAAiB,KAAK,iBAAiB,IAAI5C,GAAM,cAAcA,EAAI,QAAQ,IAAI,CAAC,EACtF,GAAI4C,EAAe,OAAS,EAAG,CAE7B,IAAMU,EAAWV,EAAe,QAAQV,GAASA,EAAM,MAAM,UAAY,CAAC,CAAC,EAE3E6T,EAAsBzS,EAAUmK,CAAK,CACvC,CAGI,OAAOlO,GAAa,YACtBA,EAAS,CAEb,CACF,CAEA,SAASkX,EAAahJ,EAAO,CAE3B,IAAMiJ,EAAcjJ,EAAM,QAAQ,GAAG,EAQrC,GALIiJ,IAAgB,KAElBjJ,EADeA,EAAM,MAAM,EAAGiJ,CAAW,EAAE,YAAY,EACtCjJ,EAAM,MAAMiJ,CAAW,GAGtCjJ,EAAM,WAAW,IAAI,EACnB+H,GAAkB,mBAAmB,EACzCO,EAAsB,QAAQ,KAAMtI,EAAM,MAAM,CAAC,CAAC,UACzCA,EAAM,WAAW,IAAI,EAC9B,mBAAmB,EACnBsI,EAAsB,QAAQ,KAAMtI,EAAM,MAAM,CAAC,EAAG,IAAM,CACxD,aAAa,CACf,CAAC,UACQA,EAAM,WAAW,IAAI,EAC9B,mBAAmB,EACnBsI,EAAsB,QAAQ,KAAMtI,EAAM,MAAM,CAAC,EAAG,IAAM,CACxD,cAAc,CAChB,CAAC,UACQA,EAAM,WAAW,IAAI,EAC9B,GAAI,KAAK,iBAAiB,OAAS,EACjC,GAAI,KAAK,wBAAyB,CAChC,IAAIkJ,EAAa,CAAC,GAAG,KAAK,gBAAgB,EAC1CH,EAA2B/I,EAAM,MAAM,CAAC,EAAG,IAAM,CAC/CkJ,EAAW,QAAQ3W,GAAM,CACvB,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAChD2C,EAAM,MAAM,SAAW,EACzB,CAAC,CACH,CAAC,CACH,MACE6T,EAA2B/I,EAAM,MAAM,CAAC,CAAC,OAG3C,QAAQ,MAAM,oBAAoB,OAE3BA,EAAM,WAAW,KAAK,EAC3B,KAAK,iBAAiB,OAAS,IAC7B+H,GAAkB,mBAAmB,EACzC,UAAU,IAAM,CACdO,EAAsB,QAAQ,KAAMtI,EAAM,MAAM,CAAC,EAAG,IAAM,CACxD,YAAY,CACd,CAAC,CACH,CAAC,GAEMA,EAAM,WAAW,KAAK,EAC3B,KAAK,iBAAiB,OAAS,IAC7B+H,GAAkB,mBAAmB,EACzC,YAAY,QAAQ,KAAM/H,EAAM,MAAM,CAAC,EAAG,IAAM,CAC9C,UAAU,CACZ,CAAC,GAGHiI,EAAqBjI,CAAK,CAE9B,CAEAgI,EAAQ,QAAQgB,CAAY,CAC9B,EACA,OAAO,eAAiBG,GAAW,CAC7B,QAAQ,cAAgB,WAAU,QAAQ,YAAc,UAC5D,IAAIC,EAAc,KACdC,EAAc,KAGlB,SAASC,EAAmBpU,EAAOqU,EAAS,KAAM,CAChD,GAAIrU,EAAM,KAAOiU,EACf,OAAAC,EAAclU,EACdmU,EAAcE,EACP,GAGT,GAAIrU,EAAM,UACR,QAASsU,EAAI,EAAGA,EAAItU,EAAM,SAAS,OAAQsU,IACzC,GAAIF,EAAmBpU,EAAM,SAASsU,CAAC,EAAGtU,CAAK,EAC7C,MAAO,GAKb,MAAO,EACT,CAGA,SAASuU,EAA6BzU,EAAQ0U,EAAe,CAC3D1U,EAAO,QAAQE,GAAS,CAClBA,IAAUkU,IACZlU,EAAM,MAAM,UAAYwU,EAE5B,CAAC,CACH,CAGA,QAASF,EAAI,EAAGA,EAAI,QAAQ,KAAK,OAAQA,IAAK,CAC5C,IAAItU,EAAQ,QAAQ,KAAKsU,CAAC,EAC1B,GAAItU,EAAM,KAAOiU,EAAS,CACxBC,EAAclU,EACdmU,EAAc,KACd,KACF,MACEC,EAAmBpU,CAAK,CAE5B,CAEA,GAAIkU,EAAa,CAEf,IAAMO,EAAmB,CAACP,EAAY,MAAM,UAC5CA,EAAY,MAAM,UAAYO,EAE1B,KAAK,UAGLF,EAFEJ,EAE2BA,EAAY,SAGZ,QAAQ,KAHcM,CAAgB,EAQvE,IAAI,OAAO,MAAM,CACnB,CACF,EACA,OAAO,cAAgB,CAAC7T,EAAQ,KAAU,CACpC,QAAQ,cAAgB,WAAU,QAAQ,YAAc,UAC5D,SAAS8T,EAAc1U,EAAO,CAC5BA,EAAM,MAAM,UAAYY,EACpBZ,EAAM,UAAUA,EAAM,SAAS,QAAQe,GAAS2T,EAAc3T,CAAK,CAAC,CAC1E,CAEA,QAAQ,KAAK,QAAQf,GAAS0U,EAAc1U,CAAK,CAAC,CACpD,EACA,OAAO,cAAgB,CAACY,EAAQ,KAAU,CACpC,QAAQ,cAAgB,WAAU,QAAQ,YAAc,UAC5D,SAAS+T,EAAU3U,EAAO,CACxBA,EAAM,MAAM,QAAU,CAACY,EACnBZ,EAAM,UAAUA,EAAM,SAAS,QAAQe,GAAS4T,EAAU5T,CAAK,CAAC,CACtE,CAEA,QAAQ,KAAK,QAAQf,GAAS2U,EAAU3U,CAAK,CAAC,CAChD,EACA,OAAO,cAAgBiU,GAAW,CAC5B,QAAQ,cAAgB,WAAU,QAAQ,YAAc,UAC5D,IAAIC,EAAc,KACdC,EAAc,KAGlB,SAASC,EAAmBpU,EAAOqU,EAAS,KAAM,CAChD,GAAIrU,EAAM,KAAOiU,EACf,OAAAC,EAAclU,EACdmU,EAAcE,EACP,GAGT,GAAIrU,EAAM,UACR,QAASsU,EAAI,EAAGA,EAAItU,EAAM,SAAS,OAAQsU,IACzC,GAAIF,EAAmBpU,EAAM,SAASsU,CAAC,EAAGtU,CAAK,EAC7C,MAAO,GAKb,MAAO,EACT,CAGA,SAAS4U,EAA0B9U,EAAQ+U,EAAiB,CAC1D/U,EAAO,QAAQE,GAAS,CAClBA,IAAUkU,IACZlU,EAAM,MAAM,QAAU6U,EAE1B,CAAC,CACH,CAGA,QAASP,EAAI,EAAGA,EAAI,QAAQ,KAAK,OAAQA,IAAK,CAC5C,IAAItU,EAAQ,QAAQ,KAAKsU,CAAC,EAC1B,GAAItU,EAAM,KAAOiU,EAAS,CACxBC,EAAclU,EACdmU,EAAc,KACd,KACF,MACEC,EAAmBpU,CAAK,CAE5B,CAEA,GAAIkU,EAAa,CAEf,IAAMY,EAAqB,CAACZ,EAAY,MAAM,QAC9CA,EAAY,MAAM,QAAUY,EAGxB,KAAK,UAGLF,EAFET,EAEwBA,EAAY,SAGZ,QAAQ,KAHcW,CAAkB,CAMxE,CACF,EACA,OAAO,cAAgBb,GAAW,CAC5B,QAAQ,cAAgB,WAAU,QAAQ,YAAc,UAC5D,IAAIC,EAAc,KACdC,EAAc,KAGlB,SAASC,EAAmBpU,EAAOqU,EAAS,KAAM,CAChD,GAAIrU,EAAM,KAAOiU,EACf,OAAAC,EAAclU,EACdmU,EAAcE,EACP,GAGT,GAAIrU,EAAM,UACR,QAAS,EAAI,EAAG,EAAIA,EAAM,SAAS,OAAQ,IACzC,GAAIoU,EAAmBpU,EAAM,SAAS,CAAC,EAAGA,CAAK,EAC7C,MAAO,GAKb,MAAO,EACT,CAGA,SAAS+U,EAAyBjV,EAAQkV,EAAgB,CACxDlV,EAAO,QAAQE,GAAS,CACtB,GAAIA,IAAUkU,EAAa,CACzB,IAAMe,EAAa,KAAK,iBAAiB,QAAQjV,EAAM,EAAE,EACrDgV,EACEC,IAAe,KACjB,KAAK,iBAAiB,KAAKjV,EAAM,EAAE,EACnCA,EAAM,MAAM,SAAW,IAGrBiV,EAAa,KACf,KAAK,iBAAiB,OAAOA,EAAY,CAAC,EAC1CjV,EAAM,MAAM,SAAW,GAG7B,CACF,CAAC,CACH,CAGA,QAASsU,EAAI,EAAGA,EAAI,QAAQ,KAAK,OAAQA,IAAK,CAC5C,IAAItU,EAAQ,QAAQ,KAAKsU,CAAC,EAC1B,GAAItU,EAAM,KAAOiU,EAAS,CACxBC,EAAclU,EACdmU,EAAc,KACd,KACF,MACEC,EAAmBpU,CAAK,CAE5B,CAEA,GAAIkU,EAAa,CAEf,IAAMgB,EAAoB,CADP,KAAK,iBAAiB,SAASjB,CAAO,EAezD,GAXI,KAAK,QAAU,CAAC,KAAK,WACvB,KAAK,iBAAiB,QAAQ5W,GAAM,CAClC,IAAM2C,EAAQmV,EAAc9X,CAAE,EAC1B2C,IACFA,EAAM,MAAM,SAAW,GAE3B,CAAC,EACD,KAAK,iBAAmB,CAAC,GAIvBkV,EAAmB,CACrB,KAAK,iBAAiB,KAAKjB,CAAO,EAClC,IAAMmB,EAAsB,KAAK,iBAAiB,KAAK,iBAAiB,OAAS,CAAC,EAC5EpV,EAAQmV,EAAcC,CAAmB,EAC/C,KAAK,aAAepV,EAAM,MAC1B,KAAK,cAAgB,IACvB,KAAO,CACL,IAAMlB,EAAQ,KAAK,iBAAiB,QAAQmV,CAAO,EAC/CnV,EAAQ,IACV,KAAK,iBAAiB,OAAOA,EAAO,CAAC,CAEzC,CACAoV,EAAY,MAAM,SAAWgB,EAGzB,KAAK,UAGLH,EAFEZ,EAEuBA,EAAY,SAGZ,QAAQ,KAHce,CAAiB,CAMtE,CAEA,SAASC,EAAc9X,EAAI,CACzB,IAAIgY,EAAa,KACjB,QAAS,EAAI,EAAG,EAAI,QAAQ,KAAK,OAAQ,IAAK,CAC5C,IAASC,EAAT,SAAqBtV,EAAO,CAC1B,GAAIA,EAAM,KAAO3C,EACf,OAAAgY,EAAarV,EACN,GAET,GAAIA,EAAM,UACR,QAASuV,EAAI,EAAGA,EAAIvV,EAAM,SAAS,OAAQuV,IACzC,GAAID,EAAYtV,EAAM,SAASuV,CAAC,CAAC,EAC/B,MAAO,GAIb,MAAO,EACT,EAEA,GADAD,EAAY,QAAQ,KAAK,CAAC,CAAC,EACvBD,EAAY,KAClB,CACA,OAAOA,CACT,CACF,EACA,OAAO,mBAAqBvV,GAAU,CACpCA,EAAO,QAAQE,GAAS,CAClBA,EAAM,MAAM,UACd,KAAK,iBAAiB,KAAKA,EAAM,EAAE,EAEjCA,EAAM,UAAYA,EAAM,SAAS,OAAS,GAC5C,mBAAmBA,EAAM,QAAQ,CAErC,CAAC,CACH,EACA,OAAO,mBAAqB,IAAM,CAChC,KAAK,iBAAmB,CAAC,EACzB,KAAK,aAAe,KACpB,eAAe,QAAQ,IAAI,CAC7B,EACA,OAAO,eAAiBF,GAAU,CAChCA,EAAO,QAAQE,GAAS,CACtBA,EAAM,MAAM,SAAW,GACnBA,EAAM,UAAU,eAAeA,EAAM,QAAQ,CACnD,CAAC,CACH,EACA,OAAO,qBAAuB,CAACwV,EAAW1V,IAAW,CACnDA,EAAO,QAAQE,GAAS,CAClBA,EAAM,KAAOwV,EACfxV,EAAM,MAAM,SAAW,GAEvBA,EAAM,MAAM,SAAW,GAErBA,EAAM,UAAU,qBAAqBwV,EAAWxV,EAAM,QAAQ,CACpE,CAAC,CACH,EACA,OAAO,cAAgB,CAAC3C,EAAIyC,EAAQuU,EAAS,OAAS,CACpD,QAAWrU,KAASF,EAAQ,CAC1B,GAAIE,EAAM,KAAO3C,EAAI,MAAO,CAAE,MAAA2C,EAAO,OAAAqU,CAAO,EAC5C,GAAIrU,EAAM,SAAU,CAClB,IAAM+K,EAAQ,cAAc1N,EAAI2C,EAAM,SAAUA,CAAK,EACrD,GAAI+K,EAAO,OAAOA,CACpB,CACF,CACA,OAAO,IACT,EACA,OAAO,kBAAoB/K,GAelB,CAdgC,CACrC,QACA,WACA,SACA,MACA,QACA,QACA,SACA,WACA,SACA,WACA,OACF,EAEuC,SAASA,EAAM,GAAG,EAE3D,OAAO,SAAWuH,GAAQ,CACxB,UAAU,EAGV,IAAMkO,EAAY,CAACC,EAAQ9Y,IAAa,CACtC8Y,EAAO,QAAQ3N,GAAS,CACtBA,EAAM,GAAK,WAAW,EAClBA,EAAM,UACR0N,EAAU1N,EAAM,QAAQ,CAE5B,CAAC,EAEGnL,GAAY,OAAOA,GAAa,YAClCA,EAAS,CAEb,EAGM+Y,EAAY,UAAUpO,CAAI,EAE5B,KAAK,iBAAiB,OAAS,EACjC,KAAK,iBAAiB,QAAQlK,GAAM,CAClC,IAAMiQ,EAAS,cAAcjQ,EAAI,QAAQ,IAAI,EAC7C,GAAIiQ,EAAQ,CACV,GAAM,CAAE,MAAAtN,EAAO,OAAAqU,CAAO,EAAI/G,EAM1B,GAHAtN,EAAM,SAAW,GACjB,KAAK,iBAAmB,KAAK,iBAAiB,OAAOiU,GAAWA,IAAY5W,CAAE,EAE1E,kBAAkB2C,CAAK,EACzB,GAAI,KAAK,UAAW,CAElB,IAAM4V,EAAcD,EAAU,CAAC,EAC3B,kBAAkBC,CAAW,IAE/BA,EAAY,SAAWA,EAAY,UAAY,CAAC,EAChDA,EAAY,SAAS,KAAK5V,CAAK,EAG/ByV,EAAUE,EAAW,IAAM,CAErBtB,GAAUA,EAAO,SACnBA,EAAO,SAAWA,EAAO,SAAS,IAAItT,GACpCA,EAAM,KAAOf,EAAM,GAAK4V,EAAc7U,CACxC,EAEA,QAAQ,KAAO,QAAQ,KAAK,IAAIA,GAC9BA,EAAM,KAAOf,EAAM,GAAK4V,EAAc7U,CACxC,CAEJ,CAAC,EAEL,MAEEf,EAAM,SAAWA,EAAM,UAAY,CAAC,EAGpCyV,EAAUE,EAAW,IAAM,CACzBA,EAAU,QAAQE,GAAY,CAC5B7V,EAAM,SAAS,KAAK6V,CAAQ,CAC9B,CAAC,CACH,CAAC,CAGP,CACF,CAAC,EAGDJ,EAAUE,EAAW,IAAM,CACzBA,EAAU,QAAQE,GAAY,QAAQ,KAAK,KAAKA,CAAQ,CAAC,CAC3D,CAAC,EAGH,mBAAmB,EACnB,UAAU,EACV,SAAS,cAAc,cAAc,EAAE,cAAc,iBAAiB,EAAE,QAAQ,CAClF,EAEA,OAAO,uBAAyB,CAACpK,EAAO3L,IAAW,CACjD,QAAWE,KAASF,EAElBE,EAAM,MAAM,SAAW,GAGnBA,EAAM,QAAUyL,IAClB,KAAK,iBAAiB,KAAKzL,EAAM,EAAE,EACnCA,EAAM,MAAM,SAAW,IAKrBA,EAAM,UAAYA,EAAM,SAAS,OAAS,GAC5C,uBAAuByL,EAAOzL,EAAM,QAAQ,CAGlD,EACA,OAAO,aAAe,IAAM,CAC1B,UAAU,EACV,KAAK,eAAiB,GACtB,KAAK,iBAAiB,QAAQ3C,GAAM,CAClC,gBAAgBA,EAAI,QAAQ,IAAI,CAClC,CAAC,EACD,KAAK,iBAAmB,CAAC,EACzB,KAAK,eAAiB,KACtB,UAAU,CACZ,EACA,OAAO,gBAAkB,CAACA,EAAIyC,IAAW,CACvC,QAAWE,KAASF,EAAQ,CAC1B,GAAIE,EAAM,KAAO3C,EAAI,CACnB,IAAMyB,EAAQgB,EAAO,UAAUgW,GAAKA,EAAE,KAAOzY,CAAE,EAC/CyC,EAAO,OAAOhB,EAAO,CAAC,EACtB,MACF,CAEA,GAAIkB,EAAM,SAAU,CAClB,IAAMlB,EAAQkB,EAAM,SAAS,UAAUe,GAASA,EAAM,KAAO1D,CAAE,EAC/D,GAAIyB,IAAU,GAAI,CAChBkB,EAAM,SAAS,OAAOlB,EAAO,CAAC,EAC9B,MACF,MACE,gBAAgBzB,EAAI2C,EAAM,QAAQ,CAEtC,CACF,CACF,EACA,OAAO,YAAc,IAAM,CACzB,IAAIiI,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMN,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAW3B,MAAM,OAAO,CACX,MAAO,kDACP,QAASA,EACT,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,EAC3C,SAAS,eAAe,WAAW,EAAE,OAAO,CAC9C,EACA,WAAY,CACV,UAAU,EAEV,IAAM8N,EAAa,SAAS,KAAK,UAAW,EAAE,EAE9C,GAAI,MAAMA,CAAU,GAAKA,GAAc,EAAG,CACxC,QAAQ,MAAM,uBAAwBA,CAAU,EAChD,MACF,CAEA,KAAK,iBAAiB,QAAQ1Y,GAAM,CAClC,GAAM,CAAE,MAAA2C,EAAO,OAAAqU,CAAO,EAAI,cAAchX,EAAI,QAAQ,IAAI,EAExD,GAAI2C,EACF,QAASsU,EAAI,EAAGA,EAAIyB,EAAYzB,IAAK,CACnC,IAAM0B,EAAc,iBAAiBhW,CAAK,EAE1C,GAAIqU,GAAU,MAAM,QAAQA,EAAO,QAAQ,EAAG,CAC5C,IAAMvV,EAAQuV,EAAO,SAAS,UAAUtT,GAASA,EAAM,KAAOf,EAAM,EAAE,EAClElB,IAAU,GACZuV,EAAO,SAAS,OAAOvV,EAAQ,EAAG,EAAGkX,CAAW,EAEhD,QAAQ,MAAM,iDAAkDhW,CAAK,CAEzE,SAAW,CAACqU,EAAQ,CAClB,IAAMvV,EAAQ,QAAQ,KAAK,UAAUmX,GAAaA,EAAU,KAAOjW,EAAM,EAAE,EACvElB,IAAU,GACZ,QAAQ,KAAK,OAAOA,EAAQ,EAAG,EAAGkX,CAAW,EAE7C,QAAQ,MAAM,oDAAqDhW,CAAK,CAE5E,CACF,MAEA,QAAQ,MAAM,0BAA2B3C,CAAE,CAE/C,CAAC,EAED,mBAAmB,EACnB,UAAU,CACZ,CACF,CAAC,CACH,EAEA,OAAO,iBAAmB2C,GAAS,CACjC,IAAMgW,EAAc,KAAK,MAAM,KAAK,UAAUhW,CAAK,CAAC,EACpD,OAAAgW,EAAY,GAAK,WAAW,EAExBA,EAAY,WACdA,EAAY,SAAWA,EAAY,SAAS,IAAIjV,GAAS,iBAAiBA,CAAK,CAAC,GAE3EiV,CACT,EACA,OAAO,UAAYpZ,GAAY,CAC7B,UAAU,EACV,KAAK,eAAiB,GACtB,WAAW,EACX,KAAK,iBAAiB,QAAQS,GAAM,CAClC,gBAAgBA,EAAI,QAAQ,IAAI,CAClC,CAAC,EACD,KAAK,iBAAmB,CAAC,EACzB,UAAU,EACV,KAAK,eAAiB,KAGlBT,GAAY,OAAOA,GAAa,YAClCA,EAAS,CAEb,EACA,OAAO,WAAa,IAAM,CACxB,KAAK,UAAY,KAAK,iBAAiB,IAAIS,GAAM,CAC/C,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAChD,OAAO,iBAAiB2C,CAAK,CAC/B,CAAC,CACH,EACA,OAAO,YAAc,IAAM,CAEzB,GADA,UAAU,EACN,KAAK,UAAU,OAAS,EAAG,CAC7B,IAAMkW,EAAe,KAAK,UAAU,IAAIlW,GAC/B,iBAAiBA,CAAK,CAC9B,EAEG,KAAK,iBAAiB,OAAS,EACjC,KAAK,iBAAiB,QAAQ3C,GAAM,CAClC,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAC5C2C,GAAS,kBAAkBA,CAAK,IAClCA,EAAM,SAAWA,EAAM,UAAY,CAAC,EACpCA,EAAM,SAAS,KAAK,GAAGkW,CAAY,EAEvC,CAAC,EAED,QAAQ,KAAK,KAAK,GAAGA,CAAY,EAGnC,KAAK,UAAY,CAAC,EAClB,mBAAmB,EACnB,UAAU,CACZ,CACF,EACA,OAAO,0BAA4BvY,GAAY,CAC7C,UAAU,EACV,KAAK,iBAAiB,QAAQN,GAAM,CAClC,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAE5C2C,GAAO,OAAOA,EAAM,MAAMrC,CAAQ,CACxC,CAAC,EACD,UAAU,CACZ,EACA,OAAO,WAAac,GAAO,CACzB,MAAM,OAAO,CACX,MAAO,uCAAuCA,CAAG,cACjD,QAAS;AAAA;AAAA,MAGT,WAAY,CACV,0BAA0BA,CAAG,CAC/B,CACF,CAAC,CACH,EACA,OAAO,cAAgB,IAAM,CAC3B,UAAU,EACN,KAAK,iBAAiB,OAAS,GACjC,KAAK,iBAAiB,QAAQpB,GAAM,CAClC,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAC5C2C,EAAM,WAAUA,EAAM,SAAW,CAAC,GAClCA,EAAM,OACRA,EAAM,KAAO,GAEjB,CAAC,EAEH,UAAU,CACZ,EACA,OAAO,cAAgB,CAACvB,EAAK8H,EAAStJ,EAAOkZ,EAAgB,KAAU,CACrE,IAAMrK,EAAmB,OAEzB,UAAU,EACV,KAAK,iBAAiB,QAAQ,CAACzO,EAAIyB,IAAU,CAC3C,GAAM,CAAE,MAAAkB,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAC5C2C,IACEvB,IAAQ,QACNA,IAAQ,OACLxB,EAGCkZ,GAAiBrK,EAAiB,KAAK7O,CAAK,EAE9C+C,EAAM,KAAO/C,EAAM,QAAQ6O,EAAkBhN,EAAQ,CAAC,EAEtDkB,EAAM,KAAO/C,EANf+C,EAAM,KAAO,GAWfA,EAAM,GAAGvB,CAAG,EAAE,EAAIxB,EAIhBkZ,GAAiBrK,EAAiB,KAAK7O,CAAK,EAE9C+C,EAAM,MAAM,GAAGuG,CAAO,EAAE,EAAItJ,EAAM,QAAQ6O,EAAkBhN,EAAQ,CAAC,EAErEkB,EAAM,MAAM,GAAGuG,CAAO,EAAE,EAAItJ,EAIpC,CAAC,EACD,UAAU,CACZ,EACA,OAAO,iBAAmB,CAACI,EAAIyF,IAAS,CACtC,IAAInG,EAAS,cAAcU,EAAI,QAAQ,IAAI,EAAE,MAAM,MAAM,IACrD4K,EAAe;AAAA,wGACmFnF,CAAI;AAAA;AAAA;AAAA;AAAA,4DAIhDnG,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAoBxDY,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASpB,MAAM,OAAO,CACX,MAAO,qDACP,QAAS0K,EACT,QAAS,CACP,IAAMmO,EAAc,SAAS,eAAe,cAAc,EAC1DA,EAAY,MAAM,EAElB,IAAMC,EAAe,SAAY,CAC/B,GAAID,EAAY,MAAO,CACrB,IAAME,EAAU,MAAM,qBAAqBF,EAAY,KAAK,EAC5DG,EAAeD,CAAO,CACxB,KACE,iBAAS,eAAe,gBAAgB,EAAE,UAAY,GAC/C,EAEX,EAEAF,EAAY,QAAUC,EACtB,SAAS,eAAe,YAAY,EAAE,QAAUA,EAEhD,SAASE,EAAeD,EAAS,CAC/B,IAAME,EAAmB,SAAS,eAAe,gBAAgB,EACjEA,EAAiB,UAAYF,EAAQ,IAAIhJ,GAAU;AAAA;AAAA,mBAExCA,EAAO,SAAS;AAAA,mBAChBA,EAAO,KAAK;AAAA;AAAA;AAAA;AAAA,4DAI6BA,EAAO,GAAG;AAAA;AAAA;AAAA,SAG7D,EAAE,KAAK,EAAE,CACZ,CACF,EACA,WAAY,CACV,KAAK,iBAAiB,QAAQjQ,GAAM,CAClC,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAC5C2C,GACEA,EAAM,MAAQ,QAChB,UAAU,EACVA,EAAM,MAAM,IAAS,SAAS,eAAe,WAAW,EAAE,IAC1D,UAAU,EAGhB,CAAC,CACH,CACF,CAAC,CACH,EACA,OAAO,qBAAuB,MAAM8K,GAAS,CAC3C,IAAMa,EAAM,yCAAyC,mBAAmBb,CAAK,CAAC,GACxEc,EAAW,MAAM,MAAMD,CAAG,EAChC,OAAIC,EAAS,IACI,MAAMA,EAAS,KAAK,GACrB,SAEZ,QAAQ,MAAM,sBAAuBA,EAAS,MAAM,EAC7C,CAAC,EAEd,EACA,OAAO,iBAAmB,CAACvO,EAAIyF,IAAS,CACtC,IAAInG,EAAS,cAAcU,EAAI,QAAQ,IAAI,EAAE,MAC7C,GAAIV,EAAO,MAAQ,SAAWmG,IAAS,QAAS,OAChD,IAAI2T,EAAW,WAAW,EACrB9Z,EAAO,QAAOA,EAAO,MAAQ,CAAC,GAC/BA,EAAO,MAAM,KAAIA,EAAO,MAAM,GAAK8Z,GAClC9Z,EAAO,MAAM,KAAIA,EAAO,MAAM,GAAQ8Z,GAE3C,IAAMC,EAAY,UAAU,CAAC/Z,CAAM,CAAC,EAChCsL,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wGAOmFnF,CAAI,+BAA+B2T,CAAQ;AAAA;AAAA;AAAA,UAGzIC,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASPnZ,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAoBdA,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASpB,MAAM,OAAO,CACX,MAAO,sDACP,QAAS0K,EACT,QAAS,CACP,IAAM0O,EAAc,SAAS,eAAe,cAAc,EACpDC,EAAY,SAAS,eAAe,YAAY,EAChDJ,EAAmB,SAAS,eAAe,gBAAgB,EACjEG,EAAY,MAAM,EAElB,IAAMN,EAAe,SAAY,CAC/B,GAAIM,EAAY,MAAO,CACrB,IAAML,EAAU,MAAM,qBAAqBK,EAAY,KAAK,EAC5DJ,EAAeD,CAAO,CACxB,KACE,QAAAE,EAAiB,UAAY,GACtB,EAEX,EAEAG,EAAY,QAAUN,EACtBO,EAAU,QAAUP,EAEpB,SAASE,EAAeD,EAAS,CAC3BA,EAAQ,SAAW,EACrBE,EAAiB,UAAY,4BAE7BA,EAAiB,UAAYF,EAAQ,IAAIhJ,GAAU;AAAA;AAAA,4CAEjBA,EAAO,KAAK;AAAA;AAAA;AAAA;AAAA,mCAIrBA,EAAO,GAAG,WAAWA,EAAO,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+DAMTmJ,CAAQ;AAAA,qCAClCnJ,EAAO,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAalBA,EAAO,mBAAmB,qBAAqBA,EAAO,OAAO;AAAA;AAAA;AAAA;AAAA,WAI/E,EAAE,KAAK,EAAE,EAGKkJ,EAAiB,iBAAiB,OAAO,EACjD,QAAQK,GAAS,CACtB,IAAMzE,EAAMyE,EAAM,cAAc,QAAQ,EAAE,aAAa,KAAK,EAC5DA,EAAM,KAAK,EACXA,EAAM,IAAMzE,CACd,CAAC,EAEL,CACF,EACA,WAAY,CACV,KAAK,iBAAiB,QAAQ/U,GAAM,CAClC,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAChD,GAAI2C,EAAO,CACT,OAAS,SAAS,eAAeyW,CAAQ,EAAE,UAC3C,IAAI3Z,EAAM,UAAU,MAAM,EAAE,CAAC,EAE7B,UAAU,EAEV,OAAO,KAAKA,CAAG,EAAE,QAAQ2B,GAAO,CAC1BA,IAAQ,OACZuB,EAAMvB,CAAG,EAAI3B,EAAI2B,CAAG,EACtB,CAAC,EACD,cAAcpB,EAAI,QAAQ,IAAI,EAAE,MAAM,MAAM,SAAW,KACvD,cAAcA,EAAI,QAAQ,IAAI,EAAE,MAAM,MAAM,SAAW,GACvD,UAAU,CACZ,CACF,CAAC,CACH,CACF,CAAC,CACH,EACA,OAAO,qBAAuB,MAAMyN,GAAS,CAC3C,IAAMa,EAAM,wCAAwC,mBAAmBb,CAAK,CAAC,GACvEc,EAAW,MAAM,MAAMD,CAAG,EAChC,OAAIC,EAAS,IACE,MAAMA,EAAS,KAAK,GACrB,SAEZ,QAAQ,MAAM,sBAAuBA,EAAS,MAAM,EAC7C,CAAC,EAEZ,EACA,OAAO,kBAAoB,MAAOkL,EAAOhU,EAAMuD,IAAY,CACzD,IAAM0Q,EAAOD,EAAM,OAAO,MAAM,CAAC,EACjC,GAAKC,EAEL,GAAI,CAEF,GAAIjU,IAAS,MAAO,CAElB,IAAMkU,EAAU,MAAMD,EAAK,KAAK,EAGhC,SAAS,eAAe,WAAW,EAAE,cAAc,KAAK,EAAE,UAAYC,EACtE,SAAS,eAAe,WAAW,EAAE,cAAc,KAAK,EAAE,aAAa,KAAM,WAAW,CAC1F,KAAO,CAEL,IAAMC,EAAe,MAAM,aAAaF,CAAI,EAC5C1Q,EAAQ,aAAa,MAAO4Q,CAAY,CAC1C,CACF,OAASpL,EAAO,CACd,QAAQ,MAAM,sBAAuBA,CAAK,CAC5C,CACF,EACA,OAAO,mBAAqB,SAAY,CACtC,GAAI,CAEF,IADiB,MAAM,MAAM,wCAAwC,GACxD,GACX,MAAO,EAEX,OAASA,EAAO,CACd,QAAQ,MAAM,yBAA0BA,CAAK,CAC/C,CACA,MAAO,EACT,EACA,OAAO,gBAAkB,MAAMqL,GAAQ,CACrC,IAAMC,EAAQ,CACZ,8BAA8BD,CAAI,OAClC,6BAA6BA,CAAI,OACjC,0BAA0BA,CAAI,MAChC,EAEA,QAAWvL,KAAOwL,EAChB,GAAI,CACF,IAAMvL,EAAW,MAAM,MAAMD,EAAK,CAAE,QAAS,GAAI,CAAC,EAClD,GAAIC,EAAS,GACX,OAAO,MAAMA,EAAS,KAAK,EACtB,GAAIA,EAAS,SAAW,IAAK,CAClC,QAAQ,KAAK,qBAAqBD,CAAG,EAAE,EACvC,QACF,CACF,OAASE,EAAO,CACd,QAAQ,KAAK,wBAAwBF,CAAG,IAAKE,CAAK,CACpD,CAGF,MAAM,IAAI,MAAM,8CAA8C,CAChE,EACA,OAAO,YAAc,MAAMf,GAAS,CAClC,IAAMsM,EAAY,2CAA2C,mBAAmBtM,CAAK,CAAC,GACtF,GAAI,CACF,IAAMc,EAAW,MAAM,MAAMwL,CAAS,EACtC,GAAIxL,EAAS,GAEX,OADa,MAAMA,EAAS,KAAK,GACrB,OAAS,CAAC,EAEtB,QAAQ,MAAM,sCAAsC,CAExD,OAASC,EAAO,CACd,QAAQ,MAAM,4BAA6BA,CAAK,CAClD,CACA,MAAO,CAAC,CACV,EACA,OAAO,eAAiB,MAAOxO,EAAIyF,IAAS,CAC1C,IAAIkE,EAAQ,kBACNrK,EAAS,cAAcU,EAAI,QAAQ,IAAI,EAAE,MAC3Cga,EAAU,GACR/Q,EAAM,SAAS,cAAc,UAAU,EAC7CA,EAAI,UAAY,UAAU3J,CAAM,EAChC,IAAM0J,EAAUC,EAAI,QAAQ,kBACxBD,IACFgR,EAAU,0BAA0BhR,EAAQ,SAAS,YAEvDC,EAAI,OAAO,EAEX,IAAI2B,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASXoP,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,wHAKuGvU,CAAI;AAAA;AAAA;AAAA,YAK1H,MAAM,OAAO,CACX,MAAOkE,EACP,QAASiB,EACT,OAAQ,gBAAiB,CACvB,IAAMqP,EAAgB,MAAM,mBAAmB,EACzCC,EAAqB,SAAS,eAAe,mBAAmB,EAChEC,EAAgB,SAAS,eAAe,YAAY,EACpDC,EAAc,SAAS,eAAe,aAAa,EAErD,UAAU,QAAUH,GACtBC,EAAmB,UAAY;AAAA;AAAA,iBAG/BC,EAAc,UAAU,OAAO,QAAQ,EACvCA,EAAc,MAAM,EACpBC,EAAY,UAAU,OAAO,QAAQ,GAErCF,EAAmB,YAAc,kBAErC,EACA,UAAW,UAAW,CACpB,KAAK,iBAAiB,QAAQla,GAAM,CAClC,GAAM,CAAE,MAAA2C,CAAM,EAAI,cAAc3C,EAAI,QAAQ,IAAI,EAChD,GAAI2C,GAASA,EAAM,MAAQ,MAAO,CAChC,IAAM0X,EAAc,SAAS,eAAe,WAAW,EAAE,cAAc,KAAK,EAC5E,GAAIA,EAAa,CACf,IAAI5a,EAAM,UAAU4a,EAAY,SAAS,EAAE,CAAC,EAC5C,UAAU,EACV,OAAO,KAAK5a,CAAG,EAAE,QAAQ2B,GAAO,CAC1BA,IAAQ,OACZuB,EAAMvB,CAAG,EAAI3B,EAAI2B,CAAG,EACtB,CAAC,EACD,cAAcpB,EAAI,QAAQ,IAAI,EAAE,MAAM,MAAM,SAAW,KACvD,cAAcA,EAAI,QAAQ,IAAI,EAAE,MAAM,MAAM,SAAW,GACvD,UAAU,CACZ,CACF,CACF,CAAC,CACH,CACF,CAAC,CACH,EACA,OAAO,iBAAmB,MAAMyZ,GAAS,CACvC,IAAMhM,EAAQgM,EAAM,OAAO,MACrBa,EAAqB,SAAS,eAAe,aAAa,EAChE,GAAI7M,EAAM,OAAS,EAAG,CACpB,IAAMvN,EAAQ,MAAM,YAAYuN,CAAK,EAErC6M,EAAmB,UAAY,GAE/B,QAAWT,KAAQ3Z,EACjB,GAAI,CACF,IAAMqa,EAAU,8BAA8BV,CAAI,OAClD,QAAQU,EAAS,CAAC/L,EAAOgM,IAAe,CACtC,GAAIhM,EACF,QAAQ,MAAM,uBAAwBA,CAAK,MACtC,CACL,IAAMiM,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,UAAYD,EACpBC,EAAQ,QAAU,IAAM,CACtB,IAAMC,EAAqB,SAAS,cAAc,sBAAsB,EACpEA,IACFA,EAAmB,UAAYF,EAC/BC,EAAQ,QAAQ,SAAS,EAAE,UAAY,EAE3C,EACAH,EAAmB,YAAYG,CAAO,CACxC,CACF,CAAC,CACH,OAASjM,EAAO,CACd,QAAQ,KAAK,iCAAiCqL,CAAI,GAAIrL,CAAK,CAC7D,CAEJ,KAAO,CACL,IAAM8L,EAAqB,SAAS,eAAe,aAAa,EAChEA,EAAmB,UAAY,EACjC,CACF,EACA,OAAO,WAAaE,GAAc,CAChC,cAAc,UAAYA,CAC5B,EACA,OAAO,gBAAkB5K,GAAQ,CAC/B,UAAU,UAAU,UAAUA,CAAI,EAAE,KAAK,UAAW,CACpD,CAAC,EAAE,MAAM,SAASpB,EAAO,CACvB,QAAQ,MAAM,wBAAyBA,CAAK,CAC9C,CAAC,CACH,EACA,OAAO,kBAAoB/L,GAAU,CACnC,IAAMkY,EAAgB,IAAI,IAAI,QAAQ,WAAW,IAAIC,GAAQA,EAAK,IAAI,CAAC,EAEvEnY,EAAO,QAAQE,GAAS,CACtB,GAAIA,EAAM,aAEJ,CAACgY,EAAc,IAAIhY,EAAM,IAAI,EAAG,CAClC,IAAMkY,EAAQ,CAAE,GAAGlY,CAAM,EACrByW,EAAW,WAAW,EAC1ByB,EAAM,GAAKzB,EAEX,QAAQ,WAAW,KAAK,CACtB,GAAIA,EACJ,KAAMzW,EAAM,KACZ,KAAMkY,CACR,CAAC,EAGDF,EAAc,IAAIhY,EAAM,IAAI,CAC9B,CAEJ,CAAC,CACH,EACA,OAAO,aAAe,IAAM,CACtB,KAAK,iBAAiB,SAAW,IAErC,UAAU,EAEV,KAAK,iBAAiB,QAAQ3C,GAAM,CAClC,IAAMiQ,EAAS,cAAcjQ,EAAI,QAAQ,IAAI,EAE7C,GAAIiQ,EAAQ,CACV,GAAM,CAAE,MAAAtN,CAAM,EAAIsN,EACZ4K,EAAQ,CAAE,GAAGlY,CAAM,EACzBkY,EAAM,GAAK,WAAW,EAEtB,IAAMC,EAAU,UAAUD,CAAK,EAGX,QAAQ,WAAW,KAAKD,GAC1CA,EAAK,OAASC,EAAM,MAAQD,EAAK,OAASE,CAC5C,EAQE,QAAQ,KAAK,wBAAwBD,EAAM,IAAI,qCAAqC,EALpF,QAAQ,WAAW,KAAK,CACtB,KAAMA,EAAM,KACZ,KAAMC,CACR,CAAC,CAIL,MACE,QAAQ,MAAM,0BAA2B9a,CAAE,CAE/C,CAAC,EAED,UAAU,EACZ,EACA,OAAO,gBAAkByB,GAAS,CAC5BA,GAAS,GAAKA,EAAQ,QAAQ,WAAW,QAC3C,QAAQ,WAAW,OAAOA,EAAO,CAAC,EAClC,UAAU,GAEV,QAAQ,MAAM,iBAAkBA,CAAK,CAEzC,EACA,OAAO,eAAiB,IAAM,CAC5B,IAAIwG,EAAc,4EAA4E,QAAQ,KAAO,kBAAoB,iBAAiB,GAC9I8S,EAAW,CACb,WAAY,IACZ,aAAc,IACd,WAAY,IACZ,WAAY,IACZ,iBAAkB,IAClB,mBAAoB,KACtB,EAGIC,EAAc,OAAO,KAAKD,CAAQ,EAAE,IAAIpF,GACnC;AAAA,WACA1N,CAAW;AAAA;AAAA;AAAA;AAAA,oBAIF8S,EAASpF,CAAO,CAAC;AAAA;AAAA;AAAA;AAAA,IAIjCA,CAAO;AAAA,UAER,EAAE,KAAK,EAAE,EAEJsF,EAAQ;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;AAAA;AAAA,QAqET,KAAK,iBACR,KAAK,eAAiB,GAGtB,MAAM,OAAO,CACX,MAAO,qBACP,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAqBC,KAAK,wBAA0B,UAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAMT,KAAK,aAAe,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQrED,CAAW;AAAA;AAAA;AAAA;AAAA,gCAIO,KAAK,oBAAsB,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAO1DC,CAAK;AAAA;AAAA,cAGX,QAAS,CACP,SAAS,eAAe,WAAW,EAAE,MAAM,CAC7C,EACA,SAAU,CACR,KAAK,eAAiB,IACxB,EACA,WAAY,CACV,IAAMxN,EAAQ,SAAS,eAAe,WAAW,EAAE,MAAM,KAAK,EAC9D,aAAaA,EAAO,KAAK,uBAAuB,EAChD,KAAK,eAAiB,IACxB,CACF,CAAC,EAEL,EACA,OAAO,kBAAoB,CAAC/M,EAAMd,IAAU,CAC1C,IAAMsb,EAAe,QAAQ,QAAQ,MAAM,GAAG,EAC1Cxa,IAAS,QACXwa,EAAa,CAAC,EAAItb,EACTc,IAAS,QAClBwa,EAAa,CAAC,EAAItb,EACTc,IAAS,UAClBwa,EAAa,CAAC,EAAItb,GAEpB,QAAQ,QAAUsb,EAAa,KAAK,GAAG,CACzC,EACA,OAAO,eAAiB,CAACzY,EAAQoN,EAAM,IAAI,OACzCpN,EAAO,QAAQE,GAAS,CAEtBkN,EAAI,IAAIlN,EAAM,GAAIA,CAAK,EAGnBA,EAAM,UAAYA,EAAM,SAAS,OAAS,GAC5C,eAAeA,EAAM,SAAUkN,CAAG,CAEtC,CAAC,EAEMA,GAIT,OAAO,aAAe/E,GAAQ,KAAK,aAAeA,EAClD,OAAO,aAAe,IAAM,CAC1B,IAAMqQ,EAAS,SAAS,eAAe,YAAY,EAAE,kBACrD,GAAIA,EAAO,MAAM,QAAU,OAAQ,MAAO,GAG1C,IAAIjQ,EAAQ,SAASiQ,EAAO,MAAM,KAAK,EACnChQ,EAAS,SAASgQ,EAAO,MAAM,MAAM,EAGzC,CAACjQ,EAAOC,CAAM,EAAI,CAACA,EAAQD,CAAK,EAChC,KAAK,aAAeA,EAAM,IAAIC,CAChC,EACA,OAAO,oBAAsB,IAAM,CACjC,IAAMgQ,EAAS,SAAS,eAAe,QAAQ,EAC3CA,GAAUA,EAAO,aAAeA,EAAO,eACzC,KAAK,YAAcA,EAAO,YAAY,SAAS,EAC/C,KAAK,aAAeA,EAAO,aAAa,SAAS,EAErD,EAGA,OAAO,iBAAmB,MAAM1B,GAAS,CACvC,IAAMC,EAAOD,EAAM,OAAO,MAAM,CAAC,EACjC,GAAKC,EAEL,GAAI,CAEF,IAAME,EAAe,MAAM,aAAaF,CAAI,EAE5C,QAAQ,KAAOE,CACjB,OAASpL,EAAO,CACd,QAAQ,MAAM,oCAAqCA,CAAK,CAC1D,CACF,EACA,OAAO,aAAekL,GACb,IAAI,QAAQ,CAACvE,EAASC,IAAW,CACtC,IAAMgG,EAAS,IAAI,WACnBA,EAAO,cAAc1B,CAAI,EACzB0B,EAAO,OAAS,IAAMjG,EAAQiG,EAAO,MAAM,EAC3CA,EAAO,QAAU5M,GAAS4G,EAAO5G,CAAK,CACxC,CAAC,EAEH,OAAO,WAAa,CAAC/O,EAAKF,EAAW,OAAS,CACxCE,IAAQ,OACZ,IAAI,cAAgB,GACpB,KAAK,iBAAmB,CAAC,EACzB,QAAQ,KAAOA,EAAI,KACnB,QAAQ,QAAUA,EAAI,QACtB,QAAQ,MAAQA,EAAI,MACpB,QAAQ,YAAcA,EAAI,YAC1B,QAAQ,OAASA,EAAI,OACrB,QAAQ,IAAMA,EAAI,IAClB,QAAQ,KAAOA,EAAI,KACnB,QAAQ,KAAOA,EAAI,KACnB,QAAQ,YAAkB,gBAAiBA,GAAO,OAAOA,EAAI,aAAgB,UACzEA,EAAI,YACJ,GACJ,QAAQ,IAAMA,EAAI,IAClB,QAAQ,YAAcA,EAAI,YAE1B,QAAQ,KAAOA,EAAI,KACnB,QAAQ,UAAYA,EAAI,UACxB,QAAQ,IAAMA,EAAI,IAClB,QAAQ,KAAOA,EAAI,KACfA,EAAI,aACN,QAAQ,WAAgBA,EAAI,WAC5B,kBAAkB,QAAQ,IAAI,GAEhC,KAAK,SAAW,eAAe,QAAQ,IAAI,EAC3C,IAAI,cAAgB,KACpB,mBAAmB,QAAQ,IAAI,EAC/B,IAAI,OAAO,MAAM,EACjB,cAAc,EAAI,EAGd,OAAOF,GAAa,YACtBA,EAAS,EAEb,EACA,OAAO,WAAa,IAAM,CACxB,IAAME,EAAM,CACV,KAAM,WACN,QAAS,QACT,MAAO,sBACP,YAAa,wCACb,OAAQ,WACR,IAAK,6BACL,KAAM,GACN,UAAW,CAAC,EACZ,IAAK,CACH,cAAiB,CAAC,EAClB,OAAU,CAAC,EACX,WAAc,CAAC,EACf,YAAe,CAAC,CAClB,EACA,WAAY,CAAC,EACb,KAAM,CAAC,EACP,KAAM,irDACN,KAAM,KACN,KAAM,GACN,YAAa,GACb,IAAK,GACL,YAAa,QACf,EAWA,MAAM,OAAO,CACX,MAAO,gDACP,QAXiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAYjB,QAAS,CAEP,SAAS,eAAe,iBAAiB,EAAE,QAAU,IAAM,CACzD,MAAM,uCAAuC,EAC1C,KAAK8O,GAAYA,EAAS,KAAK,CAAC,EAChC,KAAK8M,GAAQ,CACZ,WAAWA,EAAM,IAAM,CACjB,SAAS,cAAc,cAAc,GACvC,SAAS,cAAc,cAAc,EAAE,cAAc,4BAA4B,EAAE,QAAQ,EAEzF,SAAS,cAAc,cAAc,GACvC,SAAS,cAAc,cAAc,EAAE,cAAc,4BAA4B,EAAE,QAAQ,CAE/F,CAAC,CACH,CAAC,EACA,MAAM7M,GAAS,CACd,QAAQ,MAAM,qCAAsCA,CAAK,CAC3D,CAAC,CACL,CACF,EACA,WAAY,CACV,WAAW/O,CAAG,EACd,KAAK,WAAa,IACpB,CACF,CAAC,CACH,EAEA,OAAO,aAAe,IAAM,CAC1B,MAAM,OAAO,CACX,MAAO,0CACP,QAAS,oEACT,WAAY,CAEV,aAAa,WAAW,UAAU,EAGlC,eAAe,WAAW,UAAU,EAGpC,SAAS,OAAO,MAAM,GAAG,EAAE,QAAQ,SAAS6b,EAAG,CACzCA,EAAE,KAAK,EAAE,WAAW,UAAU,IAChC,SAAS,OAASA,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EACrB,iDAEtB,CAAC,EAGG,WAAY,QACd,OAAO,KAAK,EAAE,KAAK,SAASC,EAAO,CACjCA,EAAM,QAAQ,SAASha,EAAM,CACvBA,IAAS,kBACX,OAAO,OAAOA,CAAI,CAEtB,CAAC,CACH,CAAC,EAIC,kBAAmB,WACrB,UAAU,cAAc,iBAAiB,EAAE,KAAK,SAASia,EAAe,CACtEA,EAAc,QAAQ,SAASC,EAAc,CACvCA,EAAa,MAAM,SAAS,UAAU,GACxCA,EAAa,WAAW,CAE5B,CAAC,CACH,CAAC,EAGH,SAAS,OAAO,CAClB,CACF,CAAC,CACH,EACA,OAAO,gBAAkB,IAAM,CAE7B,aAAa,MAAM,EAGnB,eAAe,MAAM,EAGrB,SAAS,OAAO,MAAM,GAAG,EAAE,QAAQ,SAASC,EAAQ,CAClD,IAAMC,EAAaD,EAAO,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAC7C,SAAS,OAASC,EAAa,gDACjC,CAAC,EAGG,kBAAmB,WACrB,UAAU,cAAc,iBAAiB,EAAE,KAAK,SAASH,EAAe,CACtEA,EAAc,QAAQ,SAASC,EAAc,CAC3CA,EAAa,WAAW,CAC1B,CAAC,CACH,CAAC,EAIC,WAAY,QACd,OAAO,KAAK,EAAE,KAAK,SAASF,EAAO,CACjCA,EAAM,QAAQ,SAASha,EAAM,CAC3B,OAAO,OAAOA,CAAI,CACpB,CAAC,CACH,CAAC,EAIH,SAAS,OAAO,CAClB,EACA,OAAO,cAAgB,IAAM,CAC3B,MAAM,OAAO,CACX,MAAO,+CACP,QAAS,oEACT,QAAS,UAAY,CACnB,KAAK,WAAa,EACpB,EACA,UAAW,UAAW,CACpB,IAAMyN,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,KAAO,OACbA,EAAM,OAAS,QAEfA,EAAM,iBAAiB,SAAWyK,GAAU,CAC1C,IAAMC,EAAOD,EAAM,OAAO,MAAM,CAAC,EAEjC,GAAI,CAACC,EAAM,CACT,QAAQ,MAAM,mBAAmB,EACjC,MACF,CAEA,IAAM0B,EAAS,IAAI,WAEnBA,EAAO,OAAS3B,GAAS,CACvB,GAAI,CACF,WAAW,KAAK,MAAMA,EAAM,OAAO,MAAM,CAAC,CAC5C,OAASjL,EAAO,CACd,QAAQ,MAAM,2BAA4BA,CAAK,CACjD,CACF,EAEA4M,EAAO,WAAW1B,CAAI,EACtB1K,EAAM,OAAO,CACf,CAAC,EAEDA,EAAM,MAAM,CACd,CACF,CAAC,CACH,EACA,OAAO,mBAAqBV,GAAO,CAEjC,IAAMsN,EAAWtN,EAAI,UAAUA,EAAI,YAAY,GAAG,EAAI,CAAC,EAGjDuN,EAAgBD,EAAS,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY,EAoBtDE,EAjBY,CAChB,KAAQ,aACR,IAAO,aACP,IAAO,YACP,IAAO,YACP,IAAO,YACP,KAAQ,aACR,IAAO,gBACP,IAAO,aACP,IAAO,YACP,IAAO,YACP,IAAO,YACP,KAAQ,aACR,IAAO,WACT,EAG2BD,CAAa,GAAK,2BAE7C,MAAO,CACL,SAAAD,EACA,SAAAE,CACF,CACF,EACA,OAAO,eAAiBrc,GAAO,CAC7B,GAAI,CAYF,IAASsc,EAAT,SAAkB5O,EAAK,CACrB,OAAOA,EAAI,WAAW,OAAO,GAAKA,EAAI,SAAS,SAAS,CAC1D,EAGS6O,EAAT,SAA2B7O,EAAK,CAC9B,IAAM8O,EAAY9O,EAAI,MAAM,oBAAoB,EAChD,GAAI8O,EAAW,CACb,IAAMC,EAAWD,EAAU,CAAC,EAC5B,OAAOE,EAAoBD,CAAQ,CACrC,CACA,MAAO,SACT,EAGSC,EAAT,SAA6BD,EAAU,CAiCrC,MAhCgB,CAEd,aAAc,MACd,YAAa,MACb,YAAa,MACb,gBAAiB,MACjB,aAAc,OACd,aAAc,OACd,YAAa,MACb,eAAgB,MAGhB,aAAc,MACd,YAAa,MACb,YAAa,MACb,YAAa,MACb,aAAc,OACd,aAAc,OAGd,YAAa,MACb,aAAc,OACd,YAAa,MACb,YAAa,MACb,aAAc,MACd,kBAAmB,MACnB,kBAAmB,MACnB,mBAAoB,MAGpB,QAAW,KACb,EACeA,CAAQ,GAAK,KAC9B,EAGSE,EAAT,SAAqB9N,EAAK,CACxB,OAAOA,EAAI,UAAUA,EAAI,YAAY,GAAG,EAAI,CAAC,CAC/C,EAGS+N,EAAT,UAA6B,CAC3B,MAAO,QAAQC,GAAa,EAC9B,EAGSC,EAAT,SAAoCpM,EAAK,CACvC,IAAMqM,EAAO,CAAC,EACRC,EAAQ,yCACVrL,EACJ,MAAQA,EAAQqL,EAAM,KAAKtM,CAAG,KAAO,MAAM,CACzC,IAAI7B,EAAM8C,EAAM,CAAC,EAAE,QAAQ,QAAS,EAAE,EACtC,GAAI2K,EAASzN,CAAG,EAAG,CACjB,IAAMwN,EAAWE,EAAkB1N,CAAG,EAChCsN,EAAW,GAAGS,EAAkB,CAAC,IAAIP,CAAQ,GACnDY,EAAe,KAAK,CAAE,IAAKpO,EAAK,SAAUsN,CAAS,CAAC,EACpDzL,EAAMA,EAAI,QAAQ7B,EAAK,WAAWsN,CAAQ,EAAE,CAC9C,KAAO,CACL,IAAMA,EAAWQ,EAAY9N,CAAG,EAChCoO,EAAe,KAAK,CAAE,IAAKpO,EAAK,SAAUsN,CAAS,CAAC,EACpDzL,EAAMA,EAAI,QAAQ7B,EAAK,WAAWsN,CAAQ,EAAE,CAC9C,CACAY,EAAK,KAAKlO,CAAG,CACf,CACA,OAAO6B,CACT,EA5FM/E,EAAM,IAAI,UAAU,EAAE,gBAAgB,UAAU3L,EAAI,IAAI,EAAG,WAAW,EACtEkd,EAAOvR,EAAI,KAEXsR,EAAiB,CAAC,EAClBE,EAAiB,CAAC,EAClBC,EAAkB,CAAC,EACnBC,EAAiB,CAAC,EAEpBR,EAAc,EAuFlBK,EAAK,iBAAiB,KAAK,EAAE,QAAQI,GAAO,CAC1C,GAAIA,EAAI,aAAa,KAAK,EAAG,CAC3B,IAAMhI,EAAMgI,EAAI,aAAa,KAAK,EAElC,GAAIhB,EAAShH,CAAG,EAAG,CACjB,IAAM+G,EAAWE,EAAkBjH,CAAG,EAChC6G,EAAW,GAAGS,EAAkB,CAAC,IAAIP,CAAQ,GACnDY,EAAe,KAAK,CAAE,IAAK3H,EAAK,SAAU6G,CAAS,CAAC,EACpDmB,EAAI,IAAM,QAAQnB,CAAQ,EAC5B,KAAO,CACL,IAAMA,EAAWQ,EAAYrH,CAAG,EAChC2H,EAAe,KAAK,CAAE,IAAK3H,EAAK,SAAU6G,CAAS,CAAC,EACpDmB,EAAI,IAAM,QAAQ,mBAAmBhI,CAAG,EAAE,QAAQ,EACpD,CACF,CAEIgI,EAAI,aAAa,QAAQ,GAC3BA,EAAI,OAAO,MAAM,GAAG,EAAE,QAAQC,GAAU,CACtC,IAAM1O,EAAM0O,EAAO,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EACtC,GAAIjB,EAASzN,CAAG,EAAG,CACjB,IAAMwN,EAAWE,EAAkB,GAAG,EAChCJ,EAAW,GAAGS,EAAkB,CAAC,IAAIP,CAAQ,GACnDY,EAAe,KAAK,CAAE,IAAKpO,EAAK,SAAUsN,CAAS,CAAC,EACpDmB,EAAI,IAAM,QAAQnB,CAAQ,EAC5B,KAAO,CACL,IAAMA,EAAWQ,EAAY9N,CAAG,EAChCoO,EAAe,KAAK,CAAE,IAAKpO,EAAK,SAAUsN,CAAS,CAAC,EACpDmB,EAAI,IAAM,QAAQ,mBAAmBA,EAAI,aAAa,KAAK,CAAC,EAAE,QAAQ,EACxE,CACF,CAAC,CAEL,CAAC,EAGDJ,EAAK,iBAAiB,OAAO,EAAE,QAAQnD,GAAS,CAC9CA,EAAM,iBAAiB,QAAQ,EAAE,QAAQyD,GAAU,CACjD,GAAIA,EAAO,aAAa,KAAK,EAAG,CAC9B,IAAMlI,EAAMkI,EAAO,aAAa,KAAK,EAErC,GAAIlB,EAAShH,CAAG,EAAG,CACjB,IAAM+G,EAAWE,EAAkBjH,CAAG,EAChC6G,EAAW,GAAGS,EAAkB,CAAC,IAAIP,CAAQ,GACnDc,EAAe,KAAK,CAAE,IAAK7H,EAAK,SAAU6G,CAAS,CAAC,EACpDqB,EAAO,IAAM,UAAUrB,CAAQ,EACjC,KAAO,CACL,IAAMA,EAAWQ,EAAYrH,CAAG,EAChC6H,EAAe,KAAK,CAAE,IAAK7H,EAAK,SAAU6G,CAAS,CAAC,EACpDqB,EAAO,IAAM,UAAU,mBAAmBlI,CAAG,EAAE,QAAQ,EACzD,CACF,CACF,CAAC,CACH,CAAC,EAGD4H,EAAK,iBAAiB,KAAK,EAAE,QAAQO,GAAO,CAC1CL,EAAgB,KAAK,CAAE,QAASK,EAAI,UAAW,SAAU,UAAUL,EAAgB,OAAS,CAAC,MAAO,CAAC,CACvG,CAAC,EAGDF,EAAK,iBAAiB,OAAO,EAAE,QAAQQ,GAAS,CAC9CA,EAAM,iBAAiB,QAAQ,EAAE,QAAQF,GAAU,CACjD,GAAIA,EAAO,aAAa,KAAK,EAAG,CAC9B,IAAMlI,EAAMkI,EAAO,aAAa,KAAK,EAErC,GAAIlB,EAAShH,CAAG,EAAG,CACjB,IAAM+G,EAAWE,EAAkBjH,CAAG,EAChC6G,EAAW,GAAGS,EAAkB,CAAC,IAAIP,CAAQ,GACnDgB,EAAe,KAAK,CAAE,IAAK/H,EAAK,SAAU6G,CAAS,CAAC,EACpDqB,EAAO,IAAM,QAAQrB,CAAQ,EAC/B,KAAO,CACL,IAAMA,EAAWQ,EAAYrH,CAAG,EAChC+H,EAAe,KAAK,CAAE,IAAK/H,EAAK,SAAU6G,CAAS,CAAC,EACpDqB,EAAO,IAAM,QAAQ,mBAAmBlI,CAAG,EAAE,QAAQ,EACvD,CACF,CACF,CAAC,CACH,CAAC,EAGD,IAAM5E,EAAM,SAAS1Q,EAAI,GAAG,GAAK,GAE3B4I,EADakU,EAA2BpM,CAAG,EAEjD,OAAAwM,EAAK,iBAAiB,OAAO,EAAE,QAAQvO,GAASA,EAAM,OAAO,CAAC,EAEvD,CACL,KAAMhD,EAAI,KAAK,UACf,UAAA/C,EACA,eAAAqU,EACA,eAAAE,EACA,gBAAAC,EACA,eAAAC,CACF,CACF,OAAStO,EAAO,CACd,eAAQ,MAAM,4BAA6BA,CAAK,EACzC,IACT,CACF,EACA,OAAO,eAAiB,MAAM4O,GAAY,CAExC,IAAMC,EAAO,MADI,MAAM,MAAMD,CAAQ,GACT,KAAK,EACjC,OAAO,IAAI,QAAQ,CAACjI,EAASC,IAAW,CACtC,IAAMgG,EAAS,IAAI,WACnBA,EAAO,UAAY,IAAMjG,EAAQiG,EAAO,OAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAC5DA,EAAO,QAAUhG,EACjBgG,EAAO,cAAciC,CAAI,CAC3B,CAAC,CACH,EACA,OAAO,aAAehX,GAAU,CAC9B,IAAI8J,EAAM,GAGVA,GAAO;AAAA,EACP,OAAW,CAAC6C,EAAUpT,CAAK,IAAK,OAAO,QAAQyG,EAAO,eAAiB,CAAC,CAAC,EACvE8J,GAAO,OAAO6C,CAAQ,KAAKpT,CAAK;AAAA,EAElCuQ,GAAO;AAAA,EAGP,OAAW,CAAC0D,EAASzF,CAAK,IAAK,OAAO,QAAQ/H,EAAO,MAAM,EAAG,CAC5D,GAAI,CAAC+H,GAAU,CAAC,OAAO,KAAKA,EAAM,WAAa,CAAC,CAAC,EAAE,QACrC,CAAC,OAAO,KAAKA,EAAM,MAAQ,CAAC,CAAC,EAAE,QAC/B,CAAC,OAAO,KAAKA,EAAM,SAAW,CAAC,CAAC,EAAE,QAClC,CAAC,OAAO,KAAKA,EAAM,YAAc,CAAC,CAAC,EAAE,QACrC,CAAC,OAAO,KAAKA,EAAM,aAAe,CAAC,CAAC,EAAE,OAClD,SAEF,IAAMyE,EAAYzE,EAAM,WAAa,CAAC,EAChC0E,EAAa1E,EAAM,MAAQ,CAAC,EAC5B2E,EAAU3E,EAAM,SAAW,CAAC,EAC5BgF,EAAahF,EAAM,YAAc,CAAC,EAClCsF,EAActF,EAAM,aAAe,CAAC,EAEtCyF,IAAY,QAAUA,IAAY,OACpC1D,GAAO,GAAG0D,CAAO;AAAA,EAEjB1D,GAAO,IAAI0D,CAAO;AAAA,EAGpB,OAAW,CAACb,EAAUpT,CAAK,IAAK,OAAO,QAAQiT,CAAS,EACtD1C,GAAO,OAAO6C,CAAQ,KAAKpT,CAAK;AAAA,EAElC,OAAW,CAACU,EAAUV,CAAK,IAAK,OAAO,QAAQkT,CAAU,EACvD3C,GAAO,KAAK7P,CAAQ,KAAKV,CAAK;AAAA,EAEhCuQ,GAAO;AAAA,EAEP,OAAW,CAAE,SAAA3J,EAAU,OAAQuH,CAAa,IAAKgF,EAAS,CACxD5C,GAAO,IAAI0D,CAAO,GAAGrN,CAAQ;AAAA,EAC7B,OAAW,CAAClG,EAAUV,CAAK,IAAK,OAAO,QAAQmO,CAAY,EACzDoC,GAAO,KAAK7P,CAAQ,KAAKV,CAAK;AAAA,EAEhCuQ,GAAO;AAAA,CACT,CAEA,OAAW,CAACmD,EAAeC,CAAS,IAAK,OAAO,QAAQH,CAAU,EAAG,CACnEjD,GAAO,cAAcmD,CAAa;AAAA,EAClC,OAAW,CAAClS,EAAKkc,CAAW,IAAK,OAAO,QAAQ/J,EAAU,SAAS,EAAG,CACpEpD,GAAO,KAAK/O,CAAG;AAAA,EACf,OAAW,CAACd,EAAUV,CAAK,IAAK,OAAO,QAAQ0d,CAAW,EACxDnN,GAAO,OAAO7P,CAAQ,KAAKV,CAAK;AAAA,EAElCuQ,GAAO;AAAA,CACT,CACAA,GAAO;AAAA,EAEPA,GAAO,IAAI0D,CAAO;AAAA,EAClB,OAAW,CAACvT,EAAUV,CAAK,IAAK,OAAO,QAAQ2T,EAAU,UAAU,EACjEpD,GAAO,KAAK7P,CAAQ,KAAKV,CAAK;AAAA,EAEhCuQ,GAAO;AAAA,CACT,CAEA,OAAW,CAACyD,EAAY2J,CAAgB,IAAK,OAAO,QAAQ7J,CAAW,EAAG,CACxEvD,GAAO,sBAAsByD,CAAU;AAAA,EACvCzD,GAAO,MAAM0D,CAAO;AAAA,EACpB,OAAW,CAACb,EAAUpT,CAAK,IAAK,OAAO,QAAQ2d,EAAiB,WAAa,CAAC,CAAC,EAC7EpN,GAAO,SAAS6C,CAAQ,KAAKpT,CAAK;AAAA,EAEpC,OAAW,CAACU,EAAUV,CAAK,IAAK,OAAO,QAAQ2d,EAAiB,MAAQ,CAAC,CAAC,EACxEpN,GAAO,OAAO7P,CAAQ,KAAKV,CAAK;AAAA,EAElCuQ,GAAO;AAAA,EAEP,OAAW,CAAE,SAAA3J,EAAU,OAAQuH,CAAa,IAAKwP,EAAiB,SAAW,CAAC,EAAG,CAC/EpN,GAAO,MAAM0D,CAAO,GAAGrN,CAAQ;AAAA,EAC/B,OAAW,CAAClG,EAAUV,CAAK,IAAK,OAAO,QAAQmO,CAAY,EACzDoC,GAAO,OAAO7P,CAAQ,KAAKV,CAAK;AAAA,EAElCuQ,GAAO;AAAA,CACT,CAEAA,GAAO;AAAA,CACT,CACF,CAEA,OAAOA,CACT,EACA,OAAO,aAAe,SAAY,CAChC,GAAI,CACF,MAAM,WAAW,kCAAkC,EACnD,IAAIkN,EAAO,IAAI,KAAK,CAAC,KAAK,UAAU,QAAS,KAAM,CAAC,CAAC,EAAG,CAAC,KAAM,kBAAkB,CAAC,EAClF,OAAOA,EAAM,GAAG,QAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,gBAAgB,CAEhF,OAAS7O,EAAO,CACd,QAAQ,MAAM,SAAUA,CAAK,CAC/B,QAAE,CAEA,aAAa,kCAAkC,CACjD,CACF,EACA,OAAO,sBAAwB,IAAM,CACnC,IAAMgP,EAAgB,CACpB,MAAS,UACT,MAAS,UACT,UAAW,UACX,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,SAAU,UACV,UAAW,UACX,UAAW,UACX,UAAW,UACX,UAAW,UACX,UAAW,UACX,UAAW,UACX,UAAW,UACX,UAAW,UACX,UAAW,UACX,YAAa,UACb,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,WAAY,UACZ,YAAa,UACb,YAAa,UACb,YAAa,UACb,YAAa,UACb,YAAa,UACb,YAAa,UACb,YAAa,UACb,YAAa,UACb,YAAa,UACb,UAAW,UACX,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,YAAa,UACb,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,YAAa,UACb,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,aAAc,UACd,UAAW,UACX,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,UACZ,WAAY,SACd,EAEA,SAASC,EAAmBpC,EAAM,CAChC,IAAMqC,EAAc,CAAC,EACrB,OAAW,CAACtc,EAAKxB,CAAK,IAAK,OAAO,QAAQyb,CAAI,EAC5C,GAAIja,EAAI,WAAW,SAAS,GAAK,CAACA,EAAI,SAAS,UAAU,EAAG,CAC1D,IAAMuc,EAAWvc,EAAI,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,EAC3CwK,EAAQ4R,EAAcG,CAAQ,GAAK,cACzCD,EAAYtc,CAAG,EAAI,6CAA6CwK,CAAK,yBAAyBA,CAAK,0BAA0BA,CAAK,wBAAwBA,CAAK,GACjK,MACE8R,EAAYtc,CAAG,EAAIxB,EAGvB,OAAO8d,CACT,CAGA,OAAO,WAAa,MAAOrC,EAAMuC,IAAa,CAC5C,GAAI,CACF,MAAM,WAAW,kCAAkC,EACnD,IAAMP,EAAO,IAAI,KAAK,CAAC,KAAK,UAAUhC,EAAM,KAAM,CAAC,CAAC,EAAG,CAAE,KAAM,kBAAmB,CAAC,EACnF,OAAOgC,EAAMO,CAAQ,CAEvB,OAASpP,EAAO,CACd,QAAQ,MAAM,SAAUA,CAAK,CAC/B,QAAE,CAEA,aAAa,kCAAkC,CACjD,CACF,EAGA,yBAAyB,yCAAyC,EAAE,KAAKzB,GAAoB,CAC3F,IAAM2Q,EAAcD,EAAmB1Q,CAAgB,EACvD,WAAW2Q,EAAa,uBAAuB,CACjD,CAAC,CACH,EACA,OAAO,QAAU,MAAOpP,EAAK/O,EAAW,OAAS,CAC/C,GAAI,CACF,IAAMgP,EAAW,MAAM,MAAMD,CAAG,EAChC,GAAI,CAACC,EAAS,GAAI,MAAM,IAAI,MAAM,6BAA6B,EAC/D,IAAMsP,EAAc,MAAMtP,EAAS,KAAK,EACxC,GAAIhP,GAAY,OAAOA,GAAa,WAClCA,EAAS,KAAMse,CAAW,MAE1B,QAAOA,CAEX,OAASrP,EAAO,CAEd,GADA,QAAQ,KAAK,iBAAkBA,CAAK,EAChCjP,GAAY,OAAOA,GAAa,WAClCA,EAASiP,EAAO,IAAI,MAEpB,OAAMA,CAEV,CACF,EACA,OAAO,UAAYyO,GAAU,CAE3BA,EAAS,OAAOA,CAAM,EAEtB,IAAIa,EAAWb,EAAO,QAAQ,oBAAqB,EAAE,EAErD,OAAAa,EAAWA,EAAS,QAAQ,UAAW,GAAG,EAAE,QAAQ,MAAO,EAAE,EAE7DA,EAAWA,EAAS,QAAQ,kBAAmB,IAAI,EAEnDA,EAAWA,EAAS,QAAQ,MAAO,GAAG,EAC/BA,CACT,EACA,OAAO,gBAAkB,SAAY,CACnC,GAAI,CACF,MAAM,YAAY,CAChB,+BACA,kCACF,CAAC,EAGD,IAAM3C,EAAS,SAAS,eAAe,QAAQ,EAC/C,GAAI,CAACA,EAAQ,OACb,IAAM4C,EAAO5C,EAAO,iBAAmBA,EAAO,cAAc,SACtD,CAAE,KAAAjR,EAAM,UAAA7B,EAAW,eAAAqU,EAAgB,eAAAE,EAAgB,gBAAAC,EAAiB,eAAAC,CAAe,EAAI,eAAe,OAAO,EAE7GkB,EAAM,IAAI,MAGhBA,EAAI,KAAK,GAAG,QAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,iBAAkB,KAAK,UAAU,QAAS,KAAM,CAAC,CAAC,EAG5G,IAAMC,EAAmB,CACvB,KAAM,QAAQ,KACd,QAAS,QAAQ,QACjB,MAAO,QAAQ,MACf,YAAa,QAAQ,YACrB,OAAQ,QAAQ,OAChB,IAAK,QAAQ,IACb,KAAM,QAAQ,KACd,UAAW,QAAQ,UACnB,mBAAoB,OACpB,kBAAmB,MACnB,yBAA0B,aAC1B,KAAM,UAAU,QAAQ,IAAI,EAC5B,IAAK,SAAS,QAAQ,GAAG,EACzB,WAAY,GACZ,KAAM,QAAQ,KACd,QAAS,GACT,KAAM,QAAQ,KACd,OAAQ,GACR,QAAS,GACT,IAAK,QAAQ,IACb,QAAS,GACT,YAAa,OACb,QAAS,GACT,aAAc,EAChB,EACAD,EAAI,KAAK,GAAG,QAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,kBAAmB,KAAK,UAAUC,EAAkB,KAAM,CAAC,CAAC,EAEtH,IAAIC,EAAa;AAAA,gBACL,IAAI,KAAK,EAAE,YAAY,CAAC,IAAI,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAmBtDF,EAAI,KAAK,aAAcE,CAAU,EAEjC,IAAIC,EAAY,KAAK,QAAQ,IAAI;AAAA;AAAA;AAAA,EAGnC,QAAQ,WAAW;AAAA;AAAA,eAENre,EAAI,IAAI;AAAA,2BACIA,EAAI,IAAI,+BAA+BA,EAAI,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA,IAEtGA,EAAI,IAAI;AAAA,EACVA,EAAI,OAAO,IAAIA,EAAI,WAAW;AAAA;AAAA;AAAA,GAG7BA,EAAI,IAAI,+BAA+BA,EAAI,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC,KAC9Eke,EAAI,KAAK,YAAaG,CAAS,EAE/B,IAAIC,EAAa,GACbC,EAAgB,CAAC,EACjBC,EAAsB,GACtBC,EAAkB,KAChBC,EAAW,QAAQ,UAAU,IAAI,MAAMhd,GAAW,CACtD,GAAI,CAACA,EAAQ,SAAS,CAAC,OAAQ,KAAK,CAAC,EAAG,MAAO,GAC/C,IAAM6Z,EAAO,MAAM,QAAQ7Z,CAAO,EAC5Bid,EAAQjd,EAAQ,MAAM,GAAG,EACzBD,EAAOkd,EAAMA,EAAM,OAAS,CAAC,EAG/Bld,IAAS,gCACXgd,EAAkB,IAIhBhd,EAAK,SAAS,MAAM,IACtB6c,GAAc/C,EAAO;AAAA,EACrBgD,EAAc,KAAK9c,CAAI,EACvB+c,GAAuB,aAAa/c,CAAI,IACxCyc,EAAI,OAAO,WAAW,EAAE,KAAKzc,EAAM8Z,CAAI,GAIrC9Z,EAAK,SAAS,KAAK,GACrByc,EAAI,OAAO,WAAW,EAAE,KAAKzc,EAAM8Z,CAAI,CAE3C,CAAC,EACD,MAAM,QAAQ,IAAImD,CAAQ,EAG1B,IAAIE,EAAW,GACXC,EAAW,GACXC,EAAU,GACVC,EAAqB,GACrBC,EAAiB,GACjBC,EAAY,GAGZhB,EAAK,eAAe,WAAW,IACjCa,EAAU,GACVC,EAAqB;AAAA,IACtBN,EAAsC,GAApB,iBAAsB;AAAA;AAAA;AAAA,EAKnCK,GACFP,EAAc,IAAI,MAAM7c,GAAW,CACjCud,GAAa,yBAAyBvd,CAAO;AAAA,CAE/C,CAAC,EACDud,GAAaF,GAEbE,EAAYX,EAEdU,EAAiBf,EAAK,eAAe,WAAW,EAAE,aAIpD,IAAMiB,EAAiB,MAAM,KAAKjB,EAAK,KAAK,iBAAiB,OAAO,CAAC,EACpE,IAAI3P,GAASA,EAAM,WAAW,EAC9B,KAAK;AAAA,CAAI,EACN+B,EAAM9H,EAAY2W,EAClBF,IAAgB3O,GAAO2O,GACvBV,GACFO,EAAW;AAAA,MAEXD,EAAW,4DACXV,EAAI,KAAK,iBAAkBe,EAAY5O,CAAG,EAC1C6N,EAAI,KAAK,kBAAmB,UAAUI,EAAaU,EAAiB3O,CAAG,CAAC,IAExEwO,EAAW;AAAA,MAEXD,EAAW,4DACXV,EAAI,KAAK,iBAAkB7N,CAAG,EAC9B6N,EAAI,KAAK,kBAAmB,UAAU7N,CAAG,CAAC,GAIxCyO,GAWFZ,EAAI,KAAK,qBAVQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUwB,EAI3C,IAAIiB,GAAgB;AAAA;AAAA;AAAA,8BAGML,EAAU;AAAA,6BACT,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ7BZ,EAAI,KAAK,qBAAsBiB,EAAa,EAG5C,IAAIC,GAAU;AAAA,aACL,QAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC;AAAA;AAAA,gBAE3C,QAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAWEN,EAAU;AAAA,6BACZ,EAAE;AAAA;AAAA,GAM7B,GAHAZ,EAAI,KAAK,eAAgBkB,EAAO,EAG5B,QAAQ,KACV,GAAI,CACF,IAAIC,EAAa,GAEb,QAAQ,KAAK,WAAW,OAAO,EAEjCA,EAAa,QAAQ,KAGrBA,EAAa,MAAM,eAAe,QAAQ,IAAI,EAIhD,IAAIC,EACJ,GAAI,QAAQ,KAAK,WAAW,gBAAgB,EAC1CA,EAAW,cACF,QAAQ,KAAK,WAAW,iBAAiB,EAClDA,EAAW,eACF,QAAQ,KAAK,WAAW,oBAAoB,EACrDA,EAAW,UACN,CACL,QAAQ,MAAM,8BAA+B,QAAQ,IAAI,EACzD,MACF,CAEA,IAAMC,EAAe,QAAQD,CAAQ,GACrCpB,EAAI,OAAO,MAAM,EAAE,KAAKqB,EAAcF,EAAW,MAAM,GAAG,EAAE,CAAC,EAAG,CAAE,OAAQ,EAAK,CAAC,EAGhF,IAAMG,EAAQ,CAAC,UAAW,UAAW,UAAW,SAAS,EACnDpf,EAAQof,EAAM,IAAIxU,IAAS,CAC/B,IAAO,eAAeA,CAAI,OAC1B,MAASA,EACT,KAAQ,YACR,QAAW,KACb,EAAE,EAGIyU,EAAsBzU,GACnB,IAAI,QAAQ,CAACqK,EAASC,IAAW,CACtC,IAAMoK,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQ,SAAS1U,EAAK,MAAM,GAAG,EAAE,CAAC,CAAC,EAC1C0U,EAAO,OAAS,SAAS1U,EAAK,MAAM,GAAG,EAAE,CAAC,CAAC,EAC3C,IAAM2U,EAAMD,EAAO,WAAW,IAAI,EAE5BzC,EAAM,IAAI,MAChBA,EAAI,IAAMoC,EACVpC,EAAI,OAAS,UAAW,CACtB0C,EAAI,UAAU1C,EAAK,EAAG,EAAGyC,EAAO,MAAOA,EAAO,MAAM,EACpD,IAAME,EAAcF,EAAO,UAAU,WAAW,EAAE,QAAQ,2BAA4B,EAAE,EACxFxB,EAAI,OAAO,MAAM,EAAE,KAAK,QAAQlT,CAAI,OAAQ4U,EAAa,CAAE,OAAQ,EAAK,CAAC,EACzEvK,EAAQ,CACV,EACA4H,EAAI,QAAU3H,EAGdoK,EAAO,OAAO,CAChB,CAAC,EAIH,MAAM,QAAQ,IAAIF,EAAM,IAAIC,CAAkB,CAAC,EAE/CvB,EAAI,KAAK,gBAAiB,KAAK,UAAU,CACvC,YAAe,UACf,iBAAoB,UACpB,QAAW,aACX,UAAa,eACb,KAAQ,QACR,KAAQ,QAAQ,KAChB,WAAc,QAAQ,KACtB,YAAe,QAAQ,YACvB,MAAS9d,CACX,EAAG,KAAM,CAAC,CAAC,CAEb,OAASsO,EAAO,CACd,QAAQ,MAAM,4BAA6BA,CAAK,EAChD,MACF,CAIF,IAAImR,GAAS,GACb,GAAI,QAAQ,IAAK,CACfA,GAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAUT,IAAMC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAME,QAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBnD5B,EAAI,KAAK,QAAS4B,CAAI,CACpB,CAGA,GAAIhD,EAAe,OAAS,EAAG,CAC7B,IAAMiD,EAAc7B,EAAI,OAAO,QAAQ,EACvC,GAAI,CACF,OAAW,CAAE,IAAA1P,EAAK,SAAAsN,CAAS,IAAKgB,EAAgB,CAC9C,IAAMkD,EAAc,MAAM,eAAexR,CAAG,EAC5CuR,EAAY,KAAKjE,EAAUkE,EAAa,CAAE,OAAQ,EAAK,CAAC,CAC1D,CACF,OAAStR,EAAO,CACd,QAAQ,MAAM,6BAA8BA,CAAK,EACjD,MACF,CACF,CAGA,GAAIkO,EAAe,OAAS,EAC1B,GAAI,CACF,OAAW,CAAE,IAAApO,EAAK,SAAAsN,CAAS,IAAKc,EAAgB,CAC9C,IAAMgD,EAAc,MAAM,eAAepR,CAAG,EAC5C0P,EAAI,OAAO,MAAM,EAAE,KAAKpC,EAAU8D,EAAa,CAAE,OAAQ,EAAK,CAAC,CACjE,CACF,OAASlR,EAAO,CACd,QAAQ,MAAM,8BAA+BA,CAAK,EAClD,MACF,CAIF,GAAIqO,EAAgB,OAAS,EAAG,CAC9B,IAAMkD,EAAY/B,EAAI,OAAO,MAAM,EACnC,GAAI,CACF,OAAW,CAAE,QAAAtV,EAAS,SAAAkT,CAAS,IAAKiB,EAClCkD,EAAU,KAAKnE,EAAUlT,CAAO,CAEpC,OAAS8F,EAAO,CACd,QAAQ,MAAM,4BAA6BA,CAAK,EAChD,MACF,CACF,CAGA,GAAIsO,EAAe,OAAS,EAAG,CAC7B,IAAMkD,EAAchC,EAAI,OAAO,MAAM,EACrC,GAAI,CACF,OAAW,CAAE,IAAA1P,EAAK,SAAAsN,CAAS,IAAKkB,EAAgB,CAC9C,IAAMmD,EAAc,MAAM,eAAe3R,CAAG,EAC5C0R,EAAY,KAAKpE,EAAUqE,EAAa,CAAE,OAAQ,EAAK,CAAC,CAC1D,CACF,OAASzR,EAAO,CACd,QAAQ,MAAM,8BAA+BA,CAAK,EAClD,MACF,CACF,CAGA,IAAI0R,EAAa,GACbC,EAAU,GACd,QAAQ,UAAU,QAAQ3e,GAAW,CAC/BA,EAAQ,SAAS,KAAK,EACxB0e,GAAc,gBAAgB1e,CAAO;AAAA,MAGrC2e,GAAW,eAAe3e,CAAO;AAAA,KAErC,CAAC,EAGD,IAAM4e,EAAkB;AAAA,8BACE,QAAQ,KAAO,OAAS,OAAO;AAAA;AAAA,aAEhD,QAAQ,KAAK;AAAA;AAAA;AAAA,wCAGc,QAAQ,WAAW;AAAA,mCACxB,QAAQ,MAAM;AAAA;AAAA,6CAEJ,QAAQ,KAAK;AAAA;AAAA,uDAEH,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,uCAK7B,QAAQ,GAAG;AAAA;AAAA,yCAET,QAAQ,KAAK;AAAA,+CACP,QAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5DD,CAAO,GAAGxB,CAAQ,GAAG,QAAQ,KAAO,GAAG,QAAQ,IAAI;AAAA,IAAS,EAAE,GAAGuB,GAA0B,EAAE;AAAA;AAAA;AAAA;AAAA,EAIjG,UAAU,QAAQ,IAAI,EAAE,QAAQ,kCAAmC,EAAE,CAAC;AAAA;AAAA;AAAA,SAIpElC,EAAI,KAAK,YAAaoC,CAAe,EACrC,IAAMC,EAA2B;AAAA,8BACP,QAAQ,KAAO,OAAS,OAAO;AAAA;AAAA,aAEhD,QAAQ,KAAK;AAAA;AAAA;AAAA,wCAGc,QAAQ,WAAW;AAAA,mCACxB,QAAQ,MAAM;AAAA;AAAA,6CAEJ,QAAQ,KAAK;AAAA;AAAA,uDAEH,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,uCAK7B,QAAQ,GAAG;AAAA;AAAA,yCAET,QAAQ,KAAK;AAAA,+CACP,QAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5DF,CAAO,GAAGxB,CAAQ,GAAG,QAAQ,KAAO,GAAG,QAAQ,IAAI;AAAA,IAAS,EAAE,GAAGuB,GAA0B,EAAE;AAAA;AAAA;AAAA;AAAA,EAIjGhW,CAAI;AAAA;AAAA,EAEH,QAAQ,IAAMyV,GAAS,EAAG;AAAA;AAAA;AAAA,SAIzB3B,EAAI,KAAK,aAAcqC,CAAwB,EAG/C,IAAMhD,EAAO,MAAMW,EAAI,cAAc,CAAE,KAAM,MAAO,CAAC,EACrD,OAAOX,EAAM,GAAG,QAAQ,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,EAGpEX,EAAe,OAASE,EAAe,OAASC,EAAgB,OAASC,EAAe,OAAS,CACnG,OAAStO,EAAO,CACd,QAAQ,MAAM,SAAUA,CAAK,CAC/B,QAAE,CAEA,IAAM8R,EAAkB,CACtB,mCACA,8BACF,EAEA,cAAcA,CAAe,CAC/B,CACF,EACA,OAAO,MAAQ,SAAY,CACzB,GAAI,CACF,GAAI,UAAU,OAAQ,CACpB,IAAMC,EAAe,CACnB,MAAO,QAAQ,MACf,YAAa,QAAQ,YACrB,KAAM,QAAQ,KACd,KAAM,gCAAgCzgB,EAAI,IAAI,KAAKA,EAAI,OAAO;AAAA;AAAA,EAEpE,UAAU,QAAQ,IAAI,CAAC,GACjB,mBAAoB,OACpB,IAAK,8BAA8BA,EAAI,IAAI,KAAKA,EAAI,OAAO;AAAA;AAAA,EAEjE,SAAS,QAAQ,GAAG,CAAC,GACf,kBAAmB,OACnB,aAAc,QAAQ,UAAU,OAAO0gB,GAAOA,EAAI,SAAS,MAAM,CAAC,EAAE,KAAK,GAAG,EAC5E,YAAa,UACb,WAAY,UACZ,YAAa,QAAQ,UAAU,OAAOA,GAAOA,EAAI,SAAS,KAAK,CAAC,EAAE,KAAK,GAAG,EAC1E,QAAS,MACT,OAAQ,MACV,EAQMC,EAAO;AAAA;AAAA,oDALM,KAAK,UAAUF,CAAY,EAC3C,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,QAAQ,CAK+B;AAAA;AAAA,iBAKxD,SAAS,KAAK,mBAAmB,YAAaE,CAAI,EAClD,SAAS,cAAc,MAAM,EAAE,OAAO,EACtC,SAAS,cAAc,MAAM,EAAE,OAAO,CACxC,MACE,MAAM,OAAO,CACX,MAAO,mBACP,QAAS,4DACX,CAAC,CAEL,OAASjS,EAAO,CACd,QAAQ,MAAM,yBAA0BA,CAAK,CAC/C,CACF,EACA,OAAO,WAAa,SAAY,CAC9B,IAAM2M,EAAS,SAAS,eAAe,QAAQ,EACzCuF,EAAiBvF,EAAO,iBAAmBA,EAAO,cAAc,SAEtE,GAAI,CACF,MAAM,YAAY,CAChB,2CACA,kCACF,CAAC,EAED,YAAYuF,EAAe,eAAe,EAAE,KAAKlB,GAAU,CACzD,IAAMmB,EAAUnB,EAAO,WAAW,IAAI,EAChCoB,EAAgBF,EAAe,qBAAqB,OAAO,EAGjE,MAAM,KAAKE,CAAa,EAAE,QAAQzD,GAAS,CACzC,GAAM,CAAE,YAAA0D,EAAa,OAAAC,EAAQ,OAAAC,CAAO,EAAI5D,EAGxCA,EAAM,OAAS,EAGV2D,GAAQ3D,EAAM,MAAM,EACzBwD,EAAQ,UAAUxD,EAAOA,EAAM,WAAYA,EAAM,UAAWA,EAAM,YAAaA,EAAM,YAAY,EAGjGA,EAAM,OAAS4D,EACf5D,EAAM,YAAc0D,EACfC,GAAQ3D,EAAM,KAAK,CAC1B,CAAC,EAGDqC,EAAO,OAAOnC,GAAQ,CAEpB,OAAOA,EAAM,gBAAgB,CAC/B,EAAG,WAAW,CAChB,CAAC,EAAE,MAAM7O,GAAS,CAChB,QAAQ,MAAM,2BAA4BA,CAAK,CACjD,CAAC,CACH,OAASA,EAAO,CACd,QAAQ,MAAM,SAAUA,CAAK,CAC/B,QAAE,CAEA,aAAa,6CAA6C,EAC1D,aAAa,qCAAqC,CACpD,CACF,EACA,OAAO,cAAgB,CAAC9F,EAASjD,IAAS,CACxC,IAAM4X,EAAO,IAAI,KAAK,CAAC3U,CAAO,EAAG,CAAE,KAAAjD,CAAK,CAAC,EACzC,OAAO,IAAI,gBAAgB4X,CAAI,CACjC,EACA,OAAO,cAAgB,CAAC2D,EAAW,KAAU,CAC3C,IAAM7F,EAAS,SAAS,eAAe,QAAQ,EAC/C,GAAI,CAACA,EAAQ,OAEb,IAAI+E,EAAa,GACbC,EAAU,GACd,QAAQ,UAAU,QAAQ3e,GAAW,CAC/BA,EAAQ,SAAS,KAAK,EACxB0e,GAAc,gBAAgB1e,CAAO;AAAA,MAC5BA,EAAQ,SAAS,MAAM,EAChC2e,GAAW,gCAAgC3e,CAAO;AAAA,YAElD2e,GAAW,eAAe3e,CAAO;AAAA,WAErC,CAAC,EAED,IAAI2O,EAAM,SAAS,QAAQ,GAAG,EAExB8Q,EAAY,eAAe,QAAQ,IAAI,iBAAiB,QAAQ,YAAc,OAAS,OAAO;AAAA;AAAA,aAEzF,QAAQ,KAAK;AAAA;AAAA;AAAA,wCAGc,QAAQ,WAAW;AAAA,mCACxB,QAAQ,MAAM;AAAA,MAC3C,QAAQ,KAAO,QAAQ,KAAO,EAAE;AAAA,MAChCd,CAAO;AAAA,aACAhQ,CAAG;AAAA,MACV+P,GAA0B,EAAE;AAAA;AAAA;AAAA;AAAA,EAIhC,UAAU,QAAQ,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAqBnBgB,EAAiB,cAAcD,EAAW,WAAW,EAInD7V,EADS,IAAI,UAAU,EACV,gBAAgB6V,EAAW,WAAW,EACnDlD,EAAO5C,EAAO,iBAAmBA,EAAO,cAAc,SAExD6F,EACF7F,EAAO,aAAa,MAAO+F,CAAc,EAEzC,UAAUnD,EAAK,gBAAiB3S,EAAI,eAAe,CAEvD,EACA,OAAO,sBAAwB,IAAM,CACnC,IAAM+V,EAAY,UAAU,WAAa,UAAU,SAG7CC,EAAQ,mCAAmC,KAAKD,CAAS,EAGzDE,EAAY,4BAA4B,KAAKF,CAAS,EAGtDG,EAAU,QAAQ,KAAKH,CAAS,GAAK,CAACE,EAE5C,OAAID,EACK,MACEC,EACF,UACEC,EACF,QAEA,SAEX,EAGA,OAAO,UAAY,CAACC,EAASC,IAAY,CAMvC,GALI,CAACD,GAAW,CAACC,GAKbD,GAAS,cAAgBA,EAAQ,aAAa,kBAAkB,EAClE,OAIF,GAAIA,EAAQ,WAAa,UAAYC,EAAQ,WAAa,SAAU,CAC/B,CAAC,KAAM,QAAS,QAAS,QAAS,SAAS,EAEnD,QAAQxe,GAAQ,CACrCue,EAAQ,aAAave,CAAI,IAAMwe,EAAQ,aAAaxe,CAAI,GAC1Due,EAAQ,aAAave,EAAMwe,EAAQ,aAAaxe,CAAI,CAAC,CAEzD,CAAC,EAED,IAAMye,EAAYF,EAAQ,aAAa,QAAQ,EACzCG,EAAYF,EAAQ,aAAa,QAAQ,EAE/C,OAA6B,MAE/B,CAGA,GAAID,EAAQ,WAAaC,EAAQ,SAAU,CACzCD,EAAQ,YAAYC,EAAQ,UAAU,EAAI,CAAC,EAC3C,MACF,CAGA,GAAID,EAAQ,WAAa,KAAK,cAAgBC,EAAQ,WAAa,KAAK,aAAc,CACpF,IAAMG,EAAgB,MAAM,KAAKJ,EAAQ,UAAU,EAC7CK,EAAgB,MAAM,KAAKJ,EAAQ,UAAU,EAiBnD,GAdAG,EAAc,QAAQ3e,GAAQ,CACvBwe,EAAQ,aAAaxe,EAAK,IAAI,GACjCue,EAAQ,gBAAgBve,EAAK,IAAI,CAErC,CAAC,EAGD4e,EAAc,QAAQ5e,GAAQ,CACxBue,EAAQ,aAAave,EAAK,IAAI,IAAMA,EAAK,OAC3Cue,EAAQ,aAAave,EAAK,KAAMA,EAAK,KAAK,CAE9C,CAAC,EAGGue,EAAQ,WAAa,SAAWC,EAAQ,WAAa,QAAS,CAChE,IAAM3hB,EAAW0hB,EAAQ,MACnBhhB,EAAWihB,EAAQ,MACrB3hB,IAAaU,IACfghB,EAAQ,MAAQhhB,EAEpB,CACF,CAEA,IAAMshB,EAAc,MAAM,KAAKN,EAAQ,UAAU,EAC3CO,EAAc,MAAM,KAAKN,EAAQ,UAAU,EAGjDK,EAAY,QAAQ,CAACE,EAAUtgB,IAAU,CACvC,IAAMugB,EAAWF,EAAYrgB,CAAK,EAClC,GAAI,CAACugB,EAAU,CACbT,EAAQ,YAAYQ,CAAQ,EAC5B,MACF,CAEIR,EAAQ,UAAY,SAAWA,EAAQ,UAAY,SAAWA,EAAQ,cAAgBC,EAAQ,YAChGD,EAAQ,YAAcC,EAAQ,YACrBO,EAAS,WAAa,KAAK,WAAaA,EAAS,YAAcC,EAAS,YACjFD,EAAS,UAAYC,EAAS,WAEhC,UAAUD,EAAUC,CAAQ,CAC9B,CAAC,EAGDF,EAAY,MAAMD,EAAY,MAAM,EAAE,QAAQG,GAAY,CACxDT,EAAQ,YAAYS,EAAS,UAAU,EAAI,CAAC,CAC9C,CAAC,CACH,EAGA,SAAS,iBAAiB,mBAAoB,UAAW,CACvD,OAAO,OAAS,IAAM,CAKpB,sBAHoB,uBAGa,EAGjC,OAAO,UAAY,GAAK,CACtB,IAAMC,EAAgB,SAAS,cAM/B,GAHsB,CAAC,CAAC,QAAS,UAAU,EAAE,SAASA,EAAc,OAAO,GACrDA,EAAc,aAAa,iBAAiB,IAAM,OAErD,CACjB,IAAMC,EAAK,sBAAsB,EAC3BC,EAAeD,IAAO,OAAS,EAAE,QACjCE,EAAgBF,IAAO,OAAS,EAAE,QAClCG,EAAoBF,GAAgBC,EACpCE,EAAiB,EAAE,UAAY,EAAE,MAAQ,QACzCC,EAAgB,EAAE,IAAI,YAAY,IAAM,IAGxCC,EAAiBC,IACrB,EAAE,eAAe,EACjBA,EAAO,EACA,IAOT,GAHA,KAAK,QAAUL,EACf,KAAK,OAASD,EAEVE,EAAmB,CACrB,GAAIE,EACF,OACSC,EADLF,EACoB,KAEF,IAFM,EAK9B,GAAI,EAAE,IAAI,YAAY,IAAM,IAAK,OAAOE,EAAe,WAAW,EAClE,GAAI,EAAE,IAAI,YAAY,IAAM,IAAK,OAAOA,EAAe,SAAS,EAChE,GAAI,EAAE,IAAI,YAAY,IAAM,IAAK,OAAOA,EAAe,UAAU,EACjE,GAAI,EAAE,IAAI,YAAY,IAAM,IAAK,OAAOA,EAAe,WAAW,EAClE,GAAIF,GAAkB,EAAE,IAAI,YAAY,IAAM,IAAK,OAAOE,EAAe,cAAc,EACvF,GAAIF,GAAkBD,GAAqB,EAAE,IAAI,YAAY,IAAM,IAAK,OAAOG,EAAe,kBAAkB,CAClH,CAMA,GAHIF,IAAgB,KAAK,SAAW,IAGhC,EAAE,MAAQ,SAAU,CACtB,EAAE,eAAe,EACjB,IAAMI,EAAS,SAAS,cAAc,cAAc,EACpD,OAAIA,GAAQA,EAAO,cAAc,iBAAiB,EAAE,QAAQ,EACrD,EACT,CACF,CAGA,IAAI,CAAC,QAAS,UAAU,EAAE,SAAST,EAAc,OAAO,GACpDA,EAAc,aAAa,iBAAiB,IAAM,SAChD,EAAE,MAAQ,SAAU,CACtB,EAAE,eAAe,EACjB,IAAMS,EAAS,SAAS,cAAc,cAAc,EACpD,OAAIA,GAAQA,EAAO,cAAc,iBAAiB,EAAE,QAAQ,EAC5DT,EAAc,KAAK,EACZ,EACT,CAEJ,EAGA,OAAO,QAAU,GAAK,CACpB,EAAE,MAAQ,UAAY,KAAK,SAAW,KAClC,EAAE,MAAQ,WAAa,EAAE,MAAQ,eAAiB,EAAE,MAAQ,kBAAgB,KAAK,QAAU,KAC3F,EAAE,MAAQ,WAAa,EAAE,MAAQ,UAAQ,KAAK,OAAS,GAC7D,EAEI,aAAa,QAAQ,UAAU,EACjC,WAAW,KAAK,MAAM,aAAa,QAAQ,UAAU,CAAC,CAAC,EAEvD,IAAI,OAAO,MAAM,EAEnB,OAAO,SAAW,IAAI,OAAO,MAAM,CACrC,CACF,CAAC", + "sourcesContent": ["/*! Pickr 1.8.2 MIT | https://github.com/Simonwep/pickr */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Pickr=e():t.Pickr=e()}(self,(function(){return(()=>{\"use strict\";var t={d:(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})}},e={};t.d(e,{default:()=>L});var o={};function n(t,e,o,n,i={}){e instanceof HTMLCollection||e instanceof NodeList?e=Array.from(e):Array.isArray(e)||(e=[e]),Array.isArray(o)||(o=[o]);for(const s of e)for(const e of o)s[t](e,n,{capture:!1,...i});return Array.prototype.slice.call(arguments,1)}t.r(o),t.d(o,{adjustableInputNumbers:()=>p,createElementFromString:()=>r,createFromTemplate:()=>a,eventPath:()=>l,off:()=>s,on:()=>i,resolveElement:()=>c});const i=n.bind(null,\"addEventListener\"),s=n.bind(null,\"removeEventListener\");function r(t){const e=document.createElement(\"div\");return e.innerHTML=t.trim(),e.firstElementChild}function a(t){const e=(t,e)=>{const o=t.getAttribute(e);return t.removeAttribute(e),o},o=(t,n={})=>{const i=e(t,\":obj\"),s=e(t,\":ref\"),r=i?n[i]={}:n;s&&(n[s]=t);for(const n of Array.from(t.children)){const t=e(n,\":arr\"),i=o(n,t?{}:r);t&&(r[t]||(r[t]=[])).push(Object.keys(i).length?i:n)}return n};return o(r(t))}function l(t){let e=t.path||t.composedPath&&t.composedPath();if(e)return e;let o=t.target.parentElement;for(e=[t.target,o];o=o.parentElement;)e.push(o);return e.push(document,window),e}function c(t){return t instanceof Element?t:\"string\"==typeof t?t.split(/>>/g).reduce(((t,e,o,n)=>(t=t.querySelector(e),o<n.length-1?t.shadowRoot:t)),document):null}function p(t,e=(t=>t)){function o(o){const n=[.001,.01,.1][Number(o.shiftKey||2*o.ctrlKey)]*(o.deltaY<0?1:-1);let i=0,s=t.selectionStart;t.value=t.value.replace(/[\\d.]+/g,((t,o)=>o<=s&&o+t.length>=s?(s=o,e(Number(t),n,i)):(i++,t))),t.focus(),t.setSelectionRange(s,s),o.preventDefault(),t.dispatchEvent(new Event(\"input\"))}i(t,\"focus\",(()=>i(window,\"wheel\",o,{passive:!1}))),i(t,\"blur\",(()=>s(window,\"wheel\",o)))}const{min:u,max:h,floor:d,round:m}=Math;function f(t,e,o){e/=100,o/=100;const n=d(t=t/360*6),i=t-n,s=o*(1-e),r=o*(1-i*e),a=o*(1-(1-i)*e),l=n%6;return[255*[o,r,s,s,a,o][l],255*[a,o,o,r,s,s][l],255*[s,s,a,o,o,r][l]]}function v(t,e,o){const n=(2-(e/=100))*(o/=100)/2;return 0!==n&&(e=1===n?0:n<.5?e*o/(2*n):e*o/(2-2*n)),[t,100*e,100*n]}function b(t,e,o){const n=u(t/=255,e/=255,o/=255),i=h(t,e,o),s=i-n;let r,a;if(0===s)r=a=0;else{a=s/i;const n=((i-t)/6+s/2)/s,l=((i-e)/6+s/2)/s,c=((i-o)/6+s/2)/s;t===i?r=c-l:e===i?r=1/3+n-c:o===i&&(r=2/3+l-n),r<0?r+=1:r>1&&(r-=1)}return[360*r,100*a,100*i]}function y(t,e,o,n){e/=100,o/=100;return[...b(255*(1-u(1,(t/=100)*(1-(n/=100))+n)),255*(1-u(1,e*(1-n)+n)),255*(1-u(1,o*(1-n)+n)))]}function g(t,e,o){e/=100;const n=2*(e*=(o/=100)<.5?o:1-o)/(o+e)*100,i=100*(o+e);return[t,isNaN(n)?0:n,i]}function _(t){return b(...t.match(/.{2}/g).map((t=>parseInt(t,16))))}function w(t){t=t.match(/^[a-zA-Z]+$/)?function(t){if(\"black\"===t.toLowerCase())return\"#000\";const e=document.createElement(\"canvas\").getContext(\"2d\");return e.fillStyle=t,\"#000\"===e.fillStyle?null:e.fillStyle}(t):t;const e={cmyk:/^cmyk[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)/i,rgba:/^((rgba)|rgb)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hsla:/^((hsla)|hsl)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hsva:/^((hsva)|hsv)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]+([\\d.]+)[\\D]*?([\\d.]+|$)/i,hexa:/^#?(([\\dA-Fa-f]{3,4})|([\\dA-Fa-f]{6})|([\\dA-Fa-f]{8}))$/i},o=t=>t.map((t=>/^(|\\d+)\\.\\d+|\\d+$/.test(t)?Number(t):void 0));let n;t:for(const i in e){if(!(n=e[i].exec(t)))continue;const s=t=>!!n[2]==(\"number\"==typeof t);switch(i){case\"cmyk\":{const[,t,e,s,r]=o(n);if(t>100||e>100||s>100||r>100)break t;return{values:y(t,e,s,r),type:i}}case\"rgba\":{const[,,,t,e,r,a]=o(n);if(t>255||e>255||r>255||a<0||a>1||!s(a))break t;return{values:[...b(t,e,r),a],a,type:i}}case\"hexa\":{let[,t]=n;4!==t.length&&3!==t.length||(t=t.split(\"\").map((t=>t+t)).join(\"\"));const e=t.substring(0,6);let o=t.substring(6);return o=o?parseInt(o,16)/255:void 0,{values:[..._(e),o],a:o,type:i}}case\"hsla\":{const[,,,t,e,r,a]=o(n);if(t>360||e>100||r>100||a<0||a>1||!s(a))break t;return{values:[...g(t,e,r),a],a,type:i}}case\"hsva\":{const[,,,t,e,r,a]=o(n);if(t>360||e>100||r>100||a<0||a>1||!s(a))break t;return{values:[t,e,r,a],a,type:i}}}}return{values:null,type:null}}function A(t=0,e=0,o=0,n=1){const i=(t,e)=>(o=-1)=>e(~o?t.map((t=>Number(t.toFixed(o)))):t),s={h:t,s:e,v:o,a:n,toHSVA(){const t=[s.h,s.s,s.v,s.a];return t.toString=i(t,(t=>`hsva(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toHSLA(){const t=[...v(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`hsla(${t[0]}, ${t[1]}%, ${t[2]}%, ${s.a})`)),t},toRGBA(){const t=[...f(s.h,s.s,s.v),s.a];return t.toString=i(t,(t=>`rgba(${t[0]}, ${t[1]}, ${t[2]}, ${s.a})`)),t},toCMYK(){const t=function(t,e,o){const n=f(t,e,o),i=n[0]/255,s=n[1]/255,r=n[2]/255,a=u(1-i,1-s,1-r);return[100*(1===a?0:(1-i-a)/(1-a)),100*(1===a?0:(1-s-a)/(1-a)),100*(1===a?0:(1-r-a)/(1-a)),100*a]}(s.h,s.s,s.v);return t.toString=i(t,(t=>`cmyk(${t[0]}%, ${t[1]}%, ${t[2]}%, ${t[3]}%)`)),t},toHEXA(){const t=function(t,e,o){return f(t,e,o).map((t=>m(t).toString(16).padStart(2,\"0\")))}(s.h,s.s,s.v),e=s.a>=1?\"\":Number((255*s.a).toFixed(0)).toString(16).toUpperCase().padStart(2,\"0\");return e&&t.push(e),t.toString=()=>`#${t.join(\"\").toUpperCase()}`,t},clone:()=>A(s.h,s.s,s.v,s.a)};return s}const C=t=>Math.max(Math.min(t,1),0);function $(t){const e={options:Object.assign({lock:null,onchange:()=>0,onstop:()=>0},t),_keyboard(t){const{options:o}=e,{type:n,key:i}=t;if(document.activeElement===o.wrapper){const{lock:o}=e.options,s=\"ArrowUp\"===i,r=\"ArrowRight\"===i,a=\"ArrowDown\"===i,l=\"ArrowLeft\"===i;if(\"keydown\"===n&&(s||r||a||l)){let n=0,i=0;\"v\"===o?n=s||r?1:-1:\"h\"===o?n=s||r?-1:1:(i=s?-1:a?1:0,n=l?-1:r?1:0),e.update(C(e.cache.x+.01*n),C(e.cache.y+.01*i)),t.preventDefault()}else i.startsWith(\"Arrow\")&&(e.options.onstop(),t.preventDefault())}},_tapstart(t){i(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),i(document,[\"mousemove\",\"touchmove\"],e._tapmove),t.cancelable&&t.preventDefault(),e._tapmove(t)},_tapmove(t){const{options:o,cache:n}=e,{lock:i,element:s,wrapper:r}=o,a=r.getBoundingClientRect();let l=0,c=0;if(t){const e=t&&t.touches&&t.touches[0];l=t?(e||t).clientX:0,c=t?(e||t).clientY:0,l<a.left?l=a.left:l>a.left+a.width&&(l=a.left+a.width),c<a.top?c=a.top:c>a.top+a.height&&(c=a.top+a.height),l-=a.left,c-=a.top}else n&&(l=n.x*a.width,c=n.y*a.height);\"h\"!==i&&(s.style.left=`calc(${l/a.width*100}% - ${s.offsetWidth/2}px)`),\"v\"!==i&&(s.style.top=`calc(${c/a.height*100}% - ${s.offsetHeight/2}px)`),e.cache={x:l/a.width,y:c/a.height};const p=C(l/a.width),u=C(c/a.height);switch(i){case\"v\":return o.onchange(p);case\"h\":return o.onchange(u);default:return o.onchange(p,u)}},_tapstop(){e.options.onstop(),s(document,[\"mouseup\",\"touchend\",\"touchcancel\"],e._tapstop),s(document,[\"mousemove\",\"touchmove\"],e._tapmove)},trigger(){e._tapmove()},update(t=0,o=0){const{left:n,top:i,width:s,height:r}=e.options.wrapper.getBoundingClientRect();\"h\"===e.options.lock&&(o=t),e._tapmove({clientX:n+s*t,clientY:i+r*o})},destroy(){const{options:t,_tapstart:o,_keyboard:n}=e;s(document,[\"keydown\",\"keyup\"],n),s([t.wrapper,t.element],\"mousedown\",o),s([t.wrapper,t.element],\"touchstart\",o,{passive:!1})}},{options:o,_tapstart:n,_keyboard:r}=e;return i([o.wrapper,o.element],\"mousedown\",n),i([o.wrapper,o.element],\"touchstart\",n,{passive:!1}),i(document,[\"keydown\",\"keyup\"],r),e}function k(t={}){t=Object.assign({onchange:()=>0,className:\"\",elements:[]},t);const e=i(t.elements,\"click\",(e=>{t.elements.forEach((o=>o.classList[e.target===o?\"add\":\"remove\"](t.className))),t.onchange(e),e.stopPropagation()}));return{destroy:()=>s(...e)}}const S={variantFlipOrder:{start:\"sme\",middle:\"mse\",end:\"ems\"},positionFlipOrder:{top:\"tbrl\",right:\"rltb\",bottom:\"btrl\",left:\"lrbt\"},position:\"bottom\",margin:8},O=(t,e,o)=>{const{container:n,margin:i,position:s,variantFlipOrder:r,positionFlipOrder:a}={container:document.documentElement.getBoundingClientRect(),...S,...o},{left:l,top:c}=e.style;e.style.left=\"0\",e.style.top=\"0\";const p=t.getBoundingClientRect(),u=e.getBoundingClientRect(),h={t:p.top-u.height-i,b:p.bottom+i,r:p.right+i,l:p.left-u.width-i},d={vs:p.left,vm:p.left+p.width/2+-u.width/2,ve:p.left+p.width-u.width,hs:p.top,hm:p.bottom-p.height/2-u.height/2,he:p.bottom-u.height},[m,f=\"middle\"]=s.split(\"-\"),v=a[m],b=r[f],{top:y,left:g,bottom:_,right:w}=n;for(const t of v){const o=\"t\"===t||\"b\"===t,n=h[t],[i,s]=o?[\"top\",\"left\"]:[\"left\",\"top\"],[r,a]=o?[u.height,u.width]:[u.width,u.height],[l,c]=o?[_,w]:[w,_],[p,m]=o?[y,g]:[g,y];if(!(n<p||n+r>l))for(const r of b){const l=d[(o?\"v\":\"h\")+r];if(!(l<m||l+a>c))return e.style[s]=l-u[s]+\"px\",e.style[i]=n-u[i]+\"px\",t+r}}return e.style.left=l,e.style.top=c,null};function E(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}class L{constructor(t){E(this,\"_initializingActive\",!0),E(this,\"_recalc\",!0),E(this,\"_nanopop\",null),E(this,\"_root\",null),E(this,\"_color\",A()),E(this,\"_lastColor\",A()),E(this,\"_swatchColors\",[]),E(this,\"_setupAnimationFrame\",null),E(this,\"_eventListener\",{init:[],save:[],hide:[],show:[],clear:[],change:[],changestop:[],cancel:[],swatchselect:[]}),this.options=t=Object.assign({...L.DEFAULT_OPTIONS},t);const{swatches:e,components:o,theme:n,sliders:i,lockOpacity:s,padding:r}=t;[\"nano\",\"monolith\"].includes(n)&&!i&&(t.sliders=\"h\"),o.interaction||(o.interaction={});const{preview:a,opacity:l,hue:c,palette:p}=o;o.opacity=!s&&l,o.palette=p||a||l||c,this._preBuild(),this._buildComponents(),this._bindEvents(),this._finalBuild(),e&&e.length&&e.forEach((t=>this.addSwatch(t)));const{button:u,app:h}=this._root;this._nanopop=((t,e,o)=>{const n=\"object\"!=typeof t||t instanceof HTMLElement?{reference:t,popper:e,...o}:t;return{update(t=n){const{reference:e,popper:o}=Object.assign(n,t);if(!o||!e)throw new Error(\"Popper- or reference-element missing.\");return O(e,o,n)}}})(u,h,{margin:r}),u.setAttribute(\"role\",\"button\"),u.setAttribute(\"aria-label\",this._t(\"btn:toggle\"));const d=this;this._setupAnimationFrame=requestAnimationFrame((function e(){if(!h.offsetWidth)return requestAnimationFrame(e);d.setColor(t.default),d._rePositioningPicker(),t.defaultRepresentation&&(d._representation=t.defaultRepresentation,d.setColorRepresentation(d._representation)),t.showAlways&&d.show(),d._initializingActive=!1,d._emit(\"init\")}))}_preBuild(){const{options:t}=this;for(const e of[\"el\",\"container\"])t[e]=c(t[e]);this._root=(t=>{const{components:e,useAsButton:o,inline:n,appClass:i,theme:s,lockOpacity:r}=t.options,l=t=>t?\"\":'style=\"display:none\" hidden',c=e=>t._t(e),p=a(`\\n <div :ref=\"root\" class=\"pickr\">\\n\\n ${o?\"\":'<button type=\"button\" :ref=\"button\" class=\"pcr-button\"></button>'}\\n\\n <div :ref=\"app\" class=\"pcr-app ${i||\"\"}\" data-theme=\"${s}\" ${n?'style=\"position: unset\"':\"\"} aria-label=\"${c(\"ui:dialog\")}\" role=\"window\">\\n <div class=\"pcr-selection\" ${l(e.palette)}>\\n <div :obj=\"preview\" class=\"pcr-color-preview\" ${l(e.preview)}>\\n <button type=\"button\" :ref=\"lastColor\" class=\"pcr-last-color\" aria-label=\"${c(\"btn:last-color\")}\"></button>\\n <div :ref=\"currentColor\" class=\"pcr-current-color\"></div>\\n </div>\\n\\n <div :obj=\"palette\" class=\"pcr-color-palette\">\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"palette\" class=\"pcr-palette\" tabindex=\"0\" aria-label=\"${c(\"aria:palette\")}\" role=\"listbox\"></div>\\n </div>\\n\\n <div :obj=\"hue\" class=\"pcr-color-chooser\" ${l(e.hue)}>\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"slider\" class=\"pcr-hue pcr-slider\" tabindex=\"0\" aria-label=\"${c(\"aria:hue\")}\" role=\"slider\"></div>\\n </div>\\n\\n <div :obj=\"opacity\" class=\"pcr-color-opacity\" ${l(e.opacity)}>\\n <div :ref=\"picker\" class=\"pcr-picker\"></div>\\n <div :ref=\"slider\" class=\"pcr-opacity pcr-slider\" tabindex=\"0\" aria-label=\"${c(\"aria:opacity\")}\" role=\"slider\"></div>\\n </div>\\n </div>\\n\\n <div class=\"pcr-swatches ${e.palette?\"\":\"pcr-last\"}\" :ref=\"swatches\"></div>\\n\\n <div :obj=\"interaction\" class=\"pcr-interaction\" ${l(Object.keys(e.interaction).length)}>\\n <input :ref=\"result\" class=\"pcr-result\" type=\"text\" spellcheck=\"false\" ${l(e.interaction.input)} aria-label=\"${c(\"aria:input\")}\">\\n\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HEXA\" value=\"${r?\"HEX\":\"HEXA\"}\" type=\"button\" ${l(e.interaction.hex)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"RGBA\" value=\"${r?\"RGB\":\"RGBA\"}\" type=\"button\" ${l(e.interaction.rgba)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSLA\" value=\"${r?\"HSL\":\"HSLA\"}\" type=\"button\" ${l(e.interaction.hsla)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSVA\" value=\"${r?\"HSV\":\"HSVA\"}\" type=\"button\" ${l(e.interaction.hsva)}>\\n <input :arr=\"options\" class=\"pcr-type\" data-type=\"CMYK\" value=\"CMYK\" type=\"button\" ${l(e.interaction.cmyk)}>\\n\\n <input :ref=\"save\" class=\"pcr-save\" value=\"${c(\"btn:save\")}\" type=\"button\" ${l(e.interaction.save)} aria-label=\"${c(\"aria:btn:save\")}\">\\n <input :ref=\"cancel\" class=\"pcr-cancel\" value=\"${c(\"btn:cancel\")}\" type=\"button\" ${l(e.interaction.cancel)} aria-label=\"${c(\"aria:btn:cancel\")}\">\\n <input :ref=\"clear\" class=\"pcr-clear\" value=\"${c(\"btn:clear\")}\" type=\"button\" ${l(e.interaction.clear)} aria-label=\"${c(\"aria:btn:clear\")}\">\\n </div>\\n </div>\\n </div>\\n `),u=p.interaction;return u.options.find((t=>!t.hidden&&!t.classList.add(\"active\"))),u.type=()=>u.options.find((t=>t.classList.contains(\"active\"))),p})(this),t.useAsButton&&(this._root.button=t.el),t.container.appendChild(this._root.root)}_finalBuild(){const t=this.options,e=this._root;if(t.container.removeChild(e.root),t.inline){const o=t.el.parentElement;t.el.nextSibling?o.insertBefore(e.app,t.el.nextSibling):o.appendChild(e.app)}else t.container.appendChild(e.app);t.useAsButton?t.inline&&t.el.remove():t.el.parentNode.replaceChild(e.root,t.el),t.disabled&&this.disable(),t.comparison||(e.button.style.transition=\"none\",t.useAsButton||(e.preview.lastColor.style.transition=\"none\")),this.hide()}_buildComponents(){const t=this,e=this.options.components,o=(t.options.sliders||\"v\").repeat(2),[n,i]=o.match(/^[vh]+$/g)?o:[],s=()=>this._color||(this._color=this._lastColor.clone()),r={palette:$({element:t._root.palette.picker,wrapper:t._root.palette.palette,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o,n){if(!e.palette)return;const i=s(),{_root:r,options:a}=t,{lastColor:l,currentColor:c}=r.preview;t._recalc&&(i.s=100*o,i.v=100-100*n,i.v<0&&(i.v=0),t._updateOutput(\"slider\"));const p=i.toRGBA().toString(0);this.element.style.background=p,this.wrapper.style.background=`\\n linear-gradient(to top, rgba(0, 0, 0, ${i.a}), transparent),\\n linear-gradient(to left, hsla(${i.h}, 100%, 50%, ${i.a}), rgba(255, 255, 255, ${i.a}))\\n `,a.comparison?a.useAsButton||t._lastColor||l.style.setProperty(\"--pcr-color\",p):(r.button.style.setProperty(\"--pcr-color\",p),r.button.classList.remove(\"clear\"));const u=i.toHEXA().toString();for(const{el:e,color:o}of t._swatchColors)e.classList[u===o.toHEXA().toString()?\"add\":\"remove\"](\"pcr-active\");c.style.setProperty(\"--pcr-color\",p)}}),hue:$({lock:\"v\"===i?\"h\":\"v\",element:t._root.hue.picker,wrapper:t._root.hue.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.hue||!e.palette)return;const n=s();t._recalc&&(n.h=360*o),this.element.style.backgroundColor=`hsl(${n.h}, 100%, 50%)`,r.palette.trigger()}}),opacity:$({lock:\"v\"===n?\"h\":\"v\",element:t._root.opacity.picker,wrapper:t._root.opacity.slider,onstop:()=>t._emit(\"changestop\",\"slider\",t),onchange(o){if(!e.opacity||!e.palette)return;const n=s();t._recalc&&(n.a=Math.round(100*o)/100),this.element.style.background=`rgba(0, 0, 0, ${n.a})`,r.palette.trigger()}}),selectable:k({elements:t._root.interaction.options,className:\"active\",onchange(e){t._representation=e.target.getAttribute(\"data-type\").toUpperCase(),t._recalc&&t._updateOutput(\"swatch\")}})};this._components=r}_bindEvents(){const{_root:t,options:e}=this,o=[i(t.interaction.clear,\"click\",(()=>this._clearColor())),i([t.interaction.cancel,t.preview.lastColor],\"click\",(()=>{this.setHSVA(...(this._lastColor||this._color).toHSVA(),!0),this._emit(\"cancel\")})),i(t.interaction.save,\"click\",(()=>{!this.applyColor()&&!e.showAlways&&this.hide()})),i(t.interaction.result,[\"keyup\",\"input\"],(t=>{this.setColor(t.target.value,!0)&&!this._initializingActive&&(this._emit(\"change\",this._color,\"input\",this),this._emit(\"changestop\",\"input\",this)),t.stopImmediatePropagation()})),i(t.interaction.result,[\"focus\",\"blur\"],(t=>{this._recalc=\"blur\"===t.type,this._recalc&&this._updateOutput(null)})),i([t.palette.palette,t.palette.picker,t.hue.slider,t.hue.picker,t.opacity.slider,t.opacity.picker],[\"mousedown\",\"touchstart\"],(()=>this._recalc=!0),{passive:!0})];if(!e.showAlways){const n=e.closeWithKey;o.push(i(t.button,\"click\",(()=>this.isOpen()?this.hide():this.show())),i(document,\"keyup\",(t=>this.isOpen()&&(t.key===n||t.code===n)&&this.hide())),i(document,[\"touchstart\",\"mousedown\"],(e=>{this.isOpen()&&!l(e).some((e=>e===t.app||e===t.button))&&this.hide()}),{capture:!0}))}if(e.adjustableNumbers){const e={rgba:[255,255,255,1],hsva:[360,100,100,1],hsla:[360,100,100,1],cmyk:[100,100,100,100]};p(t.interaction.result,((t,o,n)=>{const i=e[this.getColorRepresentation().toLowerCase()];if(i){const e=i[n],s=t+(e>=100?1e3*o:o);return s<=0?0:Number((s<e?s:e).toPrecision(3))}return t}))}if(e.autoReposition&&!e.inline){let t=null;const n=this;o.push(i(window,[\"scroll\",\"resize\"],(()=>{n.isOpen()&&(e.closeOnScroll&&n.hide(),null===t?(t=setTimeout((()=>t=null),100),requestAnimationFrame((function e(){n._rePositioningPicker(),null!==t&&requestAnimationFrame(e)}))):(clearTimeout(t),t=setTimeout((()=>t=null),100)))}),{capture:!0}))}this._eventBindings=o}_rePositioningPicker(){const{options:t}=this;if(!t.inline){if(!this._nanopop.update({container:document.body.getBoundingClientRect(),position:t.position})){const t=this._root.app,e=t.getBoundingClientRect();t.style.top=(window.innerHeight-e.height)/2+\"px\",t.style.left=(window.innerWidth-e.width)/2+\"px\"}}}_updateOutput(t){const{_root:e,_color:o,options:n}=this;if(e.interaction.type()){const t=`to${e.interaction.type().getAttribute(\"data-type\")}`;e.interaction.result.value=\"function\"==typeof o[t]?o[t]().toString(n.outputPrecision):\"\"}!this._initializingActive&&this._recalc&&this._emit(\"change\",o,t,this)}_clearColor(t=!1){const{_root:e,options:o}=this;o.useAsButton||e.button.style.setProperty(\"--pcr-color\",\"rgba(0, 0, 0, 0.15)\"),e.button.classList.add(\"clear\"),o.showAlways||this.hide(),this._lastColor=null,this._initializingActive||t||(this._emit(\"save\",null),this._emit(\"clear\"))}_parseLocalColor(t){const{values:e,type:o,a:n}=w(t),{lockOpacity:i}=this.options,s=void 0!==n&&1!==n;return e&&3===e.length&&(e[3]=void 0),{values:!e||i&&s?null:e,type:o}}_t(t){return this.options.i18n[t]||L.I18N_DEFAULTS[t]}_emit(t,...e){this._eventListener[t].forEach((t=>t(...e,this)))}on(t,e){return this._eventListener[t].push(e),this}off(t,e){const o=this._eventListener[t]||[],n=o.indexOf(e);return~n&&o.splice(n,1),this}addSwatch(t){const{values:e}=this._parseLocalColor(t);if(e){const{_swatchColors:t,_root:o}=this,n=A(...e),s=r(`<button type=\"button\" style=\"--pcr-color: ${n.toRGBA().toString(0)}\" aria-label=\"${this._t(\"btn:swatch\")}\"/>`);return o.swatches.appendChild(s),t.push({el:s,color:n}),this._eventBindings.push(i(s,\"click\",(()=>{this.setHSVA(...n.toHSVA(),!0),this._emit(\"swatchselect\",n),this._emit(\"change\",n,\"swatch\",this)}))),!0}return!1}removeSwatch(t){const e=this._swatchColors[t];if(e){const{el:o}=e;return this._root.swatches.removeChild(o),this._swatchColors.splice(t,1),!0}return!1}applyColor(t=!1){const{preview:e,button:o}=this._root,n=this._color.toRGBA().toString(0);return e.lastColor.style.setProperty(\"--pcr-color\",n),this.options.useAsButton||o.style.setProperty(\"--pcr-color\",n),o.classList.remove(\"clear\"),this._lastColor=this._color.clone(),this._initializingActive||t||this._emit(\"save\",this._color),this}destroy(){cancelAnimationFrame(this._setupAnimationFrame),this._eventBindings.forEach((t=>s(...t))),Object.keys(this._components).forEach((t=>this._components[t].destroy()))}destroyAndRemove(){this.destroy();const{root:t,app:e}=this._root;t.parentElement&&t.parentElement.removeChild(t),e.parentElement.removeChild(e),Object.keys(this).forEach((t=>this[t]=null))}hide(){return!!this.isOpen()&&(this._root.app.classList.remove(\"visible\"),this._emit(\"hide\"),!0)}show(){return!this.options.disabled&&!this.isOpen()&&(this._root.app.classList.add(\"visible\"),this._rePositioningPicker(),this._emit(\"show\",this._color),this)}isOpen(){return this._root.app.classList.contains(\"visible\")}setHSVA(t=360,e=0,o=0,n=1,i=!1){const s=this._recalc;if(this._recalc=!1,t<0||t>360||e<0||e>100||o<0||o>100||n<0||n>1)return!1;this._color=A(t,e,o,n);const{hue:r,opacity:a,palette:l}=this._components;return r.update(t/360),a.update(n),l.update(e/100,1-o/100),i||this.applyColor(),s&&this._updateOutput(),this._recalc=s,!0}setColor(t,e=!1){if(null===t)return this._clearColor(e),!0;const{values:o,type:n}=this._parseLocalColor(t);if(o){const t=n.toUpperCase(),{options:i}=this._root.interaction,s=i.find((e=>e.getAttribute(\"data-type\")===t));if(s&&!s.hidden)for(const t of i)t.classList[t===s?\"add\":\"remove\"](\"active\");return!!this.setHSVA(...o,e)&&this.setColorRepresentation(t)}return!1}setColorRepresentation(t){return t=t.toUpperCase(),!!this._root.interaction.options.find((e=>e.getAttribute(\"data-type\").startsWith(t)&&!e.click()))}getColorRepresentation(){return this._representation}getColor(){return this._color}getSelectedColor(){return this._lastColor}getRoot(){return this._root}disable(){return this.hide(),this.options.disabled=!0,this._root.button.classList.add(\"disabled\"),this}enable(){return this.options.disabled=!1,this._root.button.classList.remove(\"disabled\"),this}}return E(L,\"utils\",o),E(L,\"version\",\"1.8.2\"),E(L,\"I18N_DEFAULTS\",{\"ui:dialog\":\"color picker dialog\",\"btn:toggle\":\"toggle color picker dialog\",\"btn:swatch\":\"color swatch\",\"btn:last-color\":\"use previous color\",\"btn:save\":\"Save\",\"btn:cancel\":\"Cancel\",\"btn:clear\":\"Clear\",\"aria:btn:save\":\"save and close\",\"aria:btn:cancel\":\"cancel and close\",\"aria:btn:clear\":\"clear and close\",\"aria:input\":\"color input field\",\"aria:palette\":\"color selection area\",\"aria:hue\":\"hue selection slider\",\"aria:opacity\":\"selection slider\"}),E(L,\"DEFAULT_OPTIONS\",{appClass:null,theme:\"classic\",useAsButton:!1,padding:8,disabled:!1,comparison:!0,closeOnScroll:!1,outputPrecision:0,lockOpacity:!1,autoReposition:!0,container:\"body\",components:{interaction:{}},i18n:{},swatches:null,inline:!1,sliders:null,default:\"#42445a\",defaultRepresentation:null,position:\"bottom-middle\",adjustableNumbers:!0,showAlways:!1,closeWithKey:\"Escape\"}),E(L,\"create\",(t=>new L(t))),e=e.default})()}));\n//# sourceMappingURL=pickr.min.js.map", "// Function for reactive state management\nfunction createProxy(target, callback, path = '') {\n if (typeof target !== 'object' || target === null) {\n return target;\n }\n\n return new Proxy(target, {\n get(obj, prop) {\n const fullPath = path ? `${path}.${String(prop)}` : String(prop);\n const value = obj[prop];\n return createProxy(value, callback, fullPath);\n },\n\n set(obj, prop, value) {\n const fullPath = path ? `${path}.${String(prop)}` : String(prop);\n const oldValue = obj[prop];\n\n // Handle object comparison\n if (typeof value === 'object' && value !== null) {\n if (JSON.stringify(oldValue) !== JSON.stringify(value)) {\n obj[prop] = createProxy(value, callback, fullPath);\n callback(fullPath, oldValue, value);\n }\n } else {\n // Handle primitive value comparison\n if (oldValue !== value) {\n obj[prop] = value;\n callback(fullPath, oldValue, value);\n }\n }\n\n return true;\n },\n\n deleteProperty(obj, prop) {\n const fullPath = path ? `${path}.${String(prop)}` : String(prop);\n const oldValue = obj[prop];\n delete obj[prop];\n callback(fullPath, oldValue, undefined);\n return true;\n }\n });\n}\n\n// Keep project and data in the global scope\nlet app = {\n name: 'Polyrise',\n summary: \"Free Mobile Website Builder!\",\n description: \"Design with Freedom, Build with Power. Free for personal and commercial use.\",\n author: {\n name: 'Michael Schwartz',\n href: 'https://michaelsboost.com/',\n src: 'imgs/author.jpg'\n },\n version: '1.0.4',\n url: 'https://github.com/michaelsboost/Polyrise/',\n license: 'https://github.com/michaelsboost/Polyrise/blob/gh-pages/LICENSE'\n}\nlet p = {\n name: \"App name\",\n version: \"0.0.1\",\n title: \"An attractive title\",\n description: \"The most attractive description ever!\",\n author: \"Polyrise\",\n url: \"https://michaelsboost.com/\",\n meta: \"\",\n libraries: [],\n css: {\n \"rootVariables\": {},\n \"styles\": {},\n \"animations\": {},\n \"breakpoints\": {}\n },\n components: [],\n html: [],\n logo: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iNTEyIgogICBoZWlnaHQ9IjUxMiIKICAgdmlld0JveD0iMCAwIDEzNS40NjY2NiAxMzUuNDY2NjciCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnMKICAgICBpZD0iZGVmczEiIC8+PGcKICAgICBpZD0iZzI0Ij48cGF0aAogICAgICAgaWQ9InBhdGgyMiIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOiMxMzNhZDQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjk2LjE3NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICBkPSJNIDkuNTgyODc3NSw2Ny43MzMzMzIgViAxMzUuMjAwNTMgTCAyNS4zODc1OTcsMTI2LjAzMTA3IFYgMTA2Ljk2MDQgNjcuNzMzMzMyIFogbSA4NS45Njg5MTE1LDAgLTU3Ljc2OTA4MywzMi4yOTcyNTggdiAxOC44MTA3MyBMIDEyNS44ODIyNCw2Ny43MzMzMzIgWiIgLz48cGF0aAogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2ZpbGw6IzA0YTJmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIgogICAgICAgaWQ9InBhdGgyMyIKICAgICAgIGQ9Im0gNDkuNTY4NTI3LDM1LjgxOTU1MyAtMTYuOTcwNDc4LDkuNzk3OTEgMCwtMTkuNTk1ODIgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMjE3MjY1MiwwLDAsMi4xNDcwMjkzLC0zNC40OTUyNjksLTkuMjYyMTYyKSIgLz48cGF0aAogICAgICAgaWQ9InBhdGgyNCIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOiM4NjAwZWY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjk2LjE3NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICBkPSJNIDkuNTgyODc3NSwwLjI2NjEzMzYyIFYgNjcuNzMzMzMyIEggMjUuMzg3NTk3IFYgNDIuODU2ODE1IDI4LjMyNjk1MyBsIDcwLjMyNTkzOSwzOS4zMTU5NDYgLTAuMTYxNzQ3LDAuMDkwNDMgaCAzMC4zMzA0NTEgbCAwLjAwMiwtMC4wMDEgeiIgLz48L2c+PC9zdmc+Cg==\",\n lang: \"en\",\n dark: true,\n previewDark: true,\n pwa: false,\n activePanel: 'layers'\n};\nwindow.generateId = () => {\n let id = '';\n while (!/^[a-zA-Z]/.test(id)) {\n id = Math.random().toString(36).substr(2, 9);\n }\n return id;\n}\nlet d = {\n doNotRender: null,\n shiftKey: null,\n cmdKey: null,\n iframeSize: null,\n commandPalette: false,\n selectedSize: 'none',\n selectedLayerIds: [],\n replaceCurrentSelection: null,\n settings: null,\n searchLibKey: null,\n idMap: null,\n clipboard: null,\n history: [],\n historyIndex: -1,\n componentsVisible: true,\n canvasCollapsed: null,\n rootVarsCollapsed: null,\n stylesCollapsed: null,\n stylePropsCollapsed: null,\n stylePseudosCollapsed: null,\n pseudosSelectorIndex: 0,\n breakpointKey: null,\n pseudosSelector: null,\n propsCollapsed: null,\n stylesPropTarget: \"base\",\n stylesTarget: null,\n animationTarget: null,\n animationKeyframe: null,\n canUseQuickCommands: null,\n cssQuickCommands: {},\n increment: 1,\n chosenFramework: '',\n frameworks: {\n 'alpine.js': {\n libraries: [\n \"https://cdn.jsdelivr.net/npm/alpinejs@3.14.1/dist/cdn.min.js\"\n ],\n meta: ''\n },\n 'algolia.js': {\n libraries: [\n \"https://cdn.jsdelivr.net/npm/algoliasearch@4.17.0/dist/algoliasearch.umd.js\"\n ],\n meta: ''\n },\n 'animate.css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css\"\n ],\n meta: ''\n },\n 'anime js': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js\"\n ],\n meta: ''\n },\n 'aos': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/aos/2.3.4/aos.js\"\n ],\n meta: ''\n },\n 'apex charts js': {\n libraries: [\n \"https://cdn.jsdelivr.net/npm/apexcharts@3.40.0/dist/apexcharts.min.css\",\n \"https://cdn.jsdelivr.net/npm/apexcharts@3.40.0/dist/apexcharts.min.js\"\n ],\n meta: ''\n },\n 'barba.js': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/barba.js/2.9.7/barba.min.js\"\n ],\n meta: ''\n },\n 'bootstrap 5': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js\"\n ],\n meta: ''\n },\n 'bulm css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css\",\n \"https://cdn.jsdelivr.net/npm/bulma-extensions@6.2.7/css/bulma-extensions.min.css\",\n \"https://cdn.jsdelivr.net/npm/bulma-extensions@6.2.7/js/bulma-extensions.min.js\"\n ],\n meta: ''\n },\n 'chakra-ui': {\n libraries: [\n \"https://cdn.jsdelivr.net/npm/@chakra-ui/react@2.0.0/dist/chakra-ui.min.css\"\n ],\n meta: ''\n },\n 'chart js': {\n libraries: [\n \"https://cdn.jsdelivr.net/npm/chart.js\"\n ],\n meta: ''\n },\n 'chartist': {\n libraries: [\n \"https://cdn.jsdelivr.net/chartist.js/latest/chartist.min.css\",\n \"https://cdn.jsdelivr.net/chartist.js/latest/chartist.min.js\"\n ],\n meta: ''\n },\n 'd3': {\n libraries: [\n \"https://d3js.org/d3.v7.min.js\"\n ],\n meta: ''\n },\n 'echarts': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/echarts/5.3.3/echarts.min.js\"\n ],\n meta: ''\n },\n 'file-saver': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js\"\n ],\n meta: ''\n },\n 'foundation': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/foundation/6.6.3/css/foundation.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/foundation/6.6.3/js/foundation.min.js\"\n ],\n meta: ''\n },\n 'fullpage.js': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/4.0.11/fullpage.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/4.0.11/fullpage.min.js\"\n ],\n meta: ''\n },\n 'granim': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/granim/2.0.0/granim.min.js\"\n ],\n meta: ''\n },\n 'google charts': {\n libraries: [\n \"https://cdn.jsdelivr.net/npm/google-charts@2.0.0/dist/googleCharts.min.js\"\n ],\n meta: ''\n },\n 'gsap': {\n libraries: [\n \"https://unpkg.com/gsap@3/dist/gsap.min.js\"\n ],\n meta: ''\n },\n 'half moon': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/Halfmoon/1.0.4/css/halfmoon.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/Halfmoon/1.0.4/js/halfmoon.min.js\"\n ],\n meta: ''\n },\n 'hint css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/hint.css/3.0.0/hint.min.css\"\n ],\n meta: ''\n },\n 'jszip': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js\"\n ],\n meta: ''\n },\n 'leaflet': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js\"\n ],\n meta: ''\n },\n 'locomotive-scroll': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/locomotive-scroll/4.1.4/locomotive-scroll.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/locomotive-scroll/4.1.4/locomotive-scroll.min.js\"\n ],\n meta: ''\n },\n 'lodash': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js\"\n ],\n meta: ''\n },\n 'masonry js': {\n libraries: [\n \"https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js\"\n ],\n meta: ''\n },\n 'materialize': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js\"\n ],\n meta: ''\n },\n 'milligram css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/milligram/1.4.1/milligram.min.css\"\n ],\n meta: ''\n },\n 'moment js': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js\"\n ],\n meta: ''\n },\n 'pattern css': {\n libraries: [\n \"https://unpkg.com/pattern.css@1.0.0/dist/pattern.min.css\"\n ],\n meta: ''\n },\n 'pico.css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod-noreset.min.js\"\n ],\n meta: ''\n },\n 'primer css': {\n libraries: [\n \"https://unpkg.com/@primer/css@^20.2.4/dist/primer.css\"\n ],\n meta: ''\n },\n 'popper js': {\n libraries: [\n \"https://unpkg.com/@popperjs/core@2.11.7/dist/umd/popper.min.js\"\n ],\n meta: ''\n },\n 'pure.css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/pure/2.0.6/pure-min.css\"\n ],\n meta: ''\n },\n 'raisin css': {\n libraries: [\n \"https://cdn.jsdelivr.net/gh/tretapey/raisincss@1.1.1/raisin.min.css\"\n ],\n meta: ''\n },\n 'raphael js': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/raphael/2.3.0/raphael.min.js\"\n ],\n meta: ''\n },\n 'semantic ui': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.2/semantic.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.2/semantic.min.js\"\n ],\n meta: ''\n },\n 'skeleton css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css\"\n ],\n meta: ''\n },\n 'spectre.css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/spectre.css/0.5.9/spectre.min.css\"\n ],\n meta: ''\n },\n 'stimulus': {\n libraries: [\n \"https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3.1.0/dist/stimulus.umd.js\",\n \"https://cdn.jsdelivr.net/npm/@hotwired/stimulus-loading@1.0.0/dist/stimulus-loading.umd.js\"\n ],\n meta: ''\n },\n 'swiper': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/Swiper/9.1.2/swiper-bundle.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/Swiper/9.1.2/swiper-bundle.min.js\"\n ],\n meta: ''\n },\n 'tachyons': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/tachyons/4.12.0/tachyons.min.css\"\n ],\n meta: ''\n },\n 'tailwind css': {\n libraries: [\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod-noreset.min.js\"\n ],\n meta: ''\n },\n 'three.js': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/three.js/r148/three.min.js\"\n ],\n meta: ''\n },\n 'tippy js': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/tippy.js/6.3.7/tippy-bundle.umd.min.js\"\n ],\n meta: ''\n },\n 'uikit': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/uikit/3.17.2/css/uikit.min.css\",\n \"https://cdnjs.cloudflare.com/ajax/libs/uikit/3.17.2/js/uikit.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/uikit/3.17.2/js/uikit-icons.min.js\"\n ],\n meta: ''\n },\n 'vivus': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/vivus/0.4.6/vivus.min.js\"\n ],\n meta: ''\n },\n 'water.css': {\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/water.css/2.1.1/water.min.css\"\n ],\n meta: ''\n }\n },\n defaultValues: {\n \"animation\": \"none\",\n \"animation-delay\": \"0s\",\n \"animation-duration\": \"0s\",\n \"aspect-ratio\": \"auto\",\n \"background\": \"#000000\",\n \"background-color\": \"#000000\",\n \"border-width\": \"0px\",\n \"bottom\": \"auto\",\n \"clip\": \"auto\",\n \"color\": \"#000000\",\n \"column-count\": \"auto\",\n \"column-width\": \"auto\",\n \"columns\": \"auto\",\n \"default\": \"\", // A generic default value for other cases\n \"flex\": \"0 1 auto\",\n \"flex-grow\": \"0\",\n \"flex-shrink\": \"1\",\n \"font-size\": \"16px\",\n \"font-size-adjust\": \"none\",\n \"font-stretch\": \"normal\",\n \"font-weight\": \"400\",\n \"grid-column\": \"auto\",\n \"grid-row\": \"auto\",\n \"height\": \"auto\",\n \"left\": \"auto\",\n \"letter-spacing\": \"normal\",\n \"line-height\": \"normal\",\n \"margin\": \"0px\",\n \"max-height\": \"none\",\n \"max-lines\": \"none\",\n \"max-width\": \"none\",\n \"min-height\": \"0px\",\n \"min-width\": \"0px\",\n \"object-fit\": \"contain\",\n \"object-position\": \"center\",\n \"opacity\": \"1\",\n \"order\": \"0\",\n \"overflow\": \"visible\",\n \"padding\": \"0px\",\n \"perspective\": \"none\",\n \"right\": \"auto\",\n \"rotate\": \"0deg\",\n \"scale\": \"1\",\n \"skew\": \"0deg\",\n \"text-align\": \"left\",\n \"text-decoration\": \"none\",\n \"text-indent\": \"0px\",\n \"text-transform\": \"none\",\n \"top\": \"auto\",\n \"transform\": \"none\",\n \"transition\": \"all 0.3s ease\",\n \"transition-delay\": \"0s\",\n \"transition-duration\": \"0.3s\",\n \"translate\": \"0px\",\n \"visibility\": \"visible\",\n \"white-space\": \"normal\",\n \"width\": \"auto\",\n \"z-index\": \"1\",\n \n // Fixed value properties\n \"position\": \"static\",\n \"display\": \"block\",\n \"overflow\": \"visible\",\n \"visibility\": \"visible\",\n \"float\": \"none\",\n \"clear\": \"none\",\n \"white-space\": \"normal\",\n \"flex-direction\": \"row\",\n \"justify-content\": \"flex-start\",\n \"align-items\": \"stretch\",\n \"align-content\": \"stretch\",\n \"flex-wrap\": \"nowrap\",\n \"background-attachment\": \"scroll\",\n \"background-clip\": \"border-box\",\n \"background-repeat\": \"repeat\",\n \"background-size\": \"auto\",\n \"border-style\": \"none\",\n \"border-width\": \"medium\",\n \"border-collapse\": \"separate\",\n \"caption-side\": \"top\",\n \"cursor\": \"auto\",\n \"direction\": \"ltr\",\n \"empty-cells\": \"show\",\n \"list-style-type\": \"disc\",\n \"list-style-position\": \"outside\",\n \"table-layout\": \"auto\",\n \"text-align\": \"left\",\n \"text-decoration-line\": \"none\",\n \"text-decoration-style\": \"solid\",\n \"text-transform\": \"none\",\n \"unicode-bidi\": \"normal\",\n \"vertical-align\": \"baseline\",\n \"word-break\": \"normal\",\n \"writing-mode\": \"horizontal-tb\",\n \"align-self\": \"auto\",\n \"align-tracks\": \"normal\",\n \"appearance\": \"auto\",\n \"backface-visibility\": \"visible\",\n \"box-sizing\": \"content-box\",\n \"column-fill\": \"balance\",\n \"column-span\": \"none\",\n \"flex-basis\": \"auto\",\n \"flex-grow\": \"0\",\n \"flex-shrink\": \"1\",\n \"font-style\": \"normal\",\n \"font-variant\": \"normal\",\n \"font-weight\": \"normal\",\n \"hyphens\": \"none\",\n \"image-rendering\": \"auto\",\n \"isolation\": \"auto\",\n \"line-break\": \"auto\",\n \"mask-type\": \"luminance\",\n \"mix-blend-mode\": \"normal\",\n \"object-fit\": \"contain\",\n \"overflow-anchor\": \"auto\",\n \"overscroll-behavior\": \"auto\",\n \"page-break-after\": \"auto\",\n \"page-break-before\": \"auto\",\n \"page-break-inside\": \"auto\",\n \"pointer-events\": \"auto\",\n \"resize\": \"none\",\n \"scroll-behavior\": \"auto\",\n \"text-orientation\": \"mixed\",\n \"text-overflow\": \"clip\",\n \"touch-action\": \"auto\",\n \"transform-style\": \"flat\",\n \"user-select\": \"auto\",\n \"word-wrap\": \"normal\",\n }, \n cssFixedValueProperties: {\n \"position\": [\"static\", \"relative\", \"absolute\", \"fixed\", \"sticky\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"display\": [\"block\", \"inline\", \"inline-block\", \"flex\", \"grid\", \"inline-flex\", \"inline-grid\", \"none\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"overflow\": [\"visible\", \"hidden\", \"clip\", \"scroll\", \"auto\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"visibility\": [\"visible\", \"hidden\", \"collapse\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"float\": [\"left\", \"right\", \"none\", \"inline-start\", \"inline-end\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"clear\": [\"none\", \"left\", \"right\", \"both\", \"inline-start\", \"inline-end\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"white-space\": [\"normal\", \"nowrap\", \"pre\", \"pre-wrap\", \"pre-line\", \"break-spaces\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"flex-direction\": [\"row\", \"row-reverse\", \"column\", \"column-reverse\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"justify-content\": [\"flex-start\", \"flex-end\", \"center\", \"space-between\", \"space-around\", \"space-evenly\", \"start\", \"end\", \"left\", \"right\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"align-items\": [\"stretch\", \"flex-start\", \"flex-end\", \"center\", \"baseline\", \"first baseline\", \"last baseline\", \"start\", \"end\", \"self-start\", \"self-end\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"align-content\": [\"stretch\", \"flex-start\", \"flex-end\", \"center\", \"space-between\", \"space-around\", \"space-evenly\", \"start\", \"end\", \"baseline\", \"first baseline\", \"last baseline\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"flex-wrap\": [\"nowrap\", \"wrap\", \"wrap-reverse\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"background-attachment\": [\"scroll\", \"fixed\", \"local\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"background-clip\": [\"border-box\", \"padding-box\", \"content-box\", \"text\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"background-repeat\": [\"repeat\", \"repeat-x\", \"repeat-y\", \"no-repeat\", \"space\", \"round\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"background-size\": [\"auto\", \"cover\", \"contain\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"border-style\": [\"none\", \"hidden\", \"dotted\", \"dashed\", \"solid\", \"double\", \"groove\", \"ridge\", \"inset\", \"outset\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"border-width\": [\"thin\", \"medium\", \"thick\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"border-collapse\": [\"collapse\", \"separate\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"caption-side\": [\"top\", \"bottom\", \"block-start\", \"block-end\", \"inline-start\", \"inline-end\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"cursor\": [\"auto\", \"default\", \"none\", \"context-menu\", \"help\", \"pointer\", \"progress\", \"wait\", \"cell\", \"crosshair\", \"text\", \"vertical-text\", \"alias\", \"copy\", \"move\", \"no-drop\", \"not-allowed\", \"grab\", \"grabbing\", \"all-scroll\", \"col-resize\", \"row-resize\", \"n-resize\", \"e-resize\", \"s-resize\", \"w-resize\", \"ne-resize\", \"nw-resize\", \"se-resize\", \"sw-resize\", \"ew-resize\", \"ns-resize\", \"nesw-resize\", \"nwse-resize\", \"zoom-in\", \"zoom-out\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"direction\": [\"ltr\", \"rtl\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"empty-cells\": [\"show\", \"hide\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"list-style-type\": [\"disc\", \"circle\", \"square\", \"decimal\", \"decimal-leading-zero\", \"lower-roman\", \"upper-roman\", \"lower-greek\", \"lower-alpha\", \"lower-latin\", \"upper-alpha\", \"upper-latin\", \"armenian\", \"georgian\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"list-style-position\": [\"inside\", \"outside\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"table-layout\": [\"auto\", \"fixed\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"text-align\": [\"center\", \"end\", \"justify\", \"left\", \"right\", \"start\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"text-decoration-line\": [\"none\", \"underline\", \"overline\", \"line-through\", \"blink\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"text-decoration-style\": [\"solid\", \"double\", \"dotted\", \"dashed\", \"wavy\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"text-transform\": [\"none\", \"capitalize\", \"uppercase\", \"lowercase\", \"full-width\", \"full-size-kana\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"unicode-bidi\": [\"normal\", \"embed\", \"bidi-override\", \"isolate\", \"isolate-override\", \"plaintext\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"vertical-align\": [\"baseline\", \"sub\", \"super\", \"text-top\", \"text-bottom\", \"middle\", \"top\", \"bottom\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"word-break\": [\"normal\", \"break-all\", \"keep-all\", \"break-word\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"writing-mode\": [\"horizontal-tb\", \"vertical-rl\", \"vertical-lr\", \"sideways-rl\", \"sideways-lr\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"align-self\": [\"auto\", \"stretch\", \"flex-start\", \"flex-end\", \"center\", \"baseline\", \"first baseline\", \"last baseline\", \"start\", \"end\", \"self-start\", \"self-end\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"align-tracks\": [\"normal\", \"start\", \"center\", \"end\", \"stretch\", \"baseline\", \"first baseline\", \"last baseline\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"appearance\": [\"none\", \"auto\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"backface-visibility\": [\"visible\", \"hidden\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"box-sizing\": [\"content-box\", \"border-box\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"column-fill\": [\"auto\", \"balance\", \"balance-all\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"column-span\": [\"none\", \"all\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"flex-basis\": [\"auto\", \"fill\", \"max-content\", \"min-content\", \"fit-content\", \"content\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"flex-grow\": [\"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"flex-shrink\": [\"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"font-style\": [\"normal\", \"italic\", \"oblique\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"font-variant\": [\"normal\", \"small-caps\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"font-weight\": [\"normal\", \"bold\", \"bolder\", \"lighter\",\"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\", \"100\", \"200\", \"300\", \"400\", \"500\", \"600\", \"700\", \"800\", \"900\"],\n \"hyphens\": [\"none\", \"manual\", \"auto\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"image-rendering\": [\"auto\", \"crisp-edges\", \"pixelated\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"isolation\": [\"auto\", \"isolate\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"line-break\": [\"auto\", \"loose\", \"normal\", \"strict\", \"anywhere\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"mask-type\": [\"luminance\", \"alpha\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"mix-blend-mode\": [\"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"color-dodge\", \"color-burn\", \"hard-light\", \"soft-light\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"object-fit\": [\"fill\", \"contain\", \"cover\", \"none\", \"scale-down\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"overflow-anchor\": [\"auto\", \"none\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"overscroll-behavior\": [\"auto\", \"contain\", \"none\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"page-break-after\": [\"auto\", \"always\", \"avoid\", \"left\", \"right\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"page-break-before\": [\"auto\", \"always\", \"avoid\", \"left\", \"right\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"page-break-inside\": [\"auto\", \"avoid\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"pointer-events\": [\"auto\", \"none\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"resize\": [\"none\", \"both\", \"horizontal\", \"vertical\", \"block\", \"inline\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"scroll-behavior\": [\"auto\", \"smooth\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"text-orientation\": [\"mixed\", \"upright\", \"sideways\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"text-overflow\": [\"clip\", \"ellipsis\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"touch-action\": [\"auto\", \"none\", \"pan-x\", \"pan-left\", \"pan-right\", \"pan-y\", \"pan-up\", \"pan-down\", \"pinch-zoom\", \"manipulation\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"transform-style\": [\"flat\", \"preserve-3d\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"user-select\": [\"auto\", \"text\", \"none\", \"contain\", \"all\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"word-wrap\": [\"normal\", \"break-word\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"],\n \"writing-mode\": [\"horizontal-tb\", \"vertical-rl\", \"vertical-lr\", \"sideways-rl\", \"sideways-lr\", \"inherit\", \"initial\", \"revert\", \"revert-layer\", \"unset\"]\n },\n cssRangedValueProperties: {\n \"opacity\": { min: 0, max: 1, step: 0.01 },\n \"z-index\": { min: -Infinity, max: Infinity, step: 1 },\n \"line-height\": { min: 0, max: Infinity, step: 0.1 },\n \"flex-grow\": { min: 0, max: Infinity, step: 0.1 },\n \"flex-shrink\": { min: 0, max: Infinity, step: 0.1 },\n \"order\": { min: -Infinity, max: Infinity, step: 1 },\n \"columns\": { min: 1, max: Infinity, step: 1 },\n \"column-count\": { min: 1, max: Infinity, step: 1 },\n \"column-width\": { min: 0, max: Infinity, step: 1 },\n \"font-size\": { min: 0, max: 1, step: 0.01 },\n \"font-size-adjust\": { min: 0, max: 1, step: 0.01 },\n \"letter-spacing\": { min: -Infinity, max: Infinity, step: 0.1 },\n \"word-spacing\": { min: -Infinity, max: Infinity, step: 0.1 },\n \"aspect-ratio\": { min: 0, max: Infinity, step: 0.01 },\n \"border-width\": { min: 0, max: Infinity, step: 1 },\n \"margin\": { min: -Infinity, max: Infinity, step: 1 },\n \"padding\": { min: 0, max: Infinity, step: 1 },\n \"width\": { min: 0, max: Infinity, step: 1 },\n \"height\": { min: 0, max: Infinity, step: 1 },\n \"max-width\": { min: 0, max: Infinity, step: 1 },\n \"max-height\": { min: 0, max: Infinity, step: 1 },\n \"min-width\": { min: 0, max: Infinity, step: 1 },\n \"min-height\": { min: 0, max: Infinity, step: 1 },\n \"top\": { min: -Infinity, max: Infinity, step: 1 },\n \"right\": { min: -Infinity, max: Infinity, step: 1 },\n \"bottom\": { min: -Infinity, max: Infinity, step: 1 },\n \"left\": { min: -Infinity, max: Infinity, step: 1 },\n \"rotate\": { min: -360, max: 360, step: 1 },\n \"scale\": { min: -Infinity, max: Infinity, step: 0.1 },\n \"translate\": { min: -Infinity, max: Infinity, step: 1 },\n \"perspective\": { min: 0, max: Infinity, step: 1 },\n \"skew\": { min: -360, max: 360, step: 1 },\n \"animation-duration\": { min: 0, max: Infinity, step: 0.1 },\n \"animation-delay\": { min: 0, max: Infinity, step: 0.1 },\n \"transition-duration\": { min: 0, max: Infinity, step: 0.1 },\n \"transition-delay\": { min: 0, max: Infinity, step: 0.1 },\n \"letter-spacing\": { min: -Infinity, max: Infinity, step: 0.1 },\n \"text-indent\": { min: -Infinity, max: Infinity, step: 1 }\n },\n boxElements: [\n 'article',\n 'aside',\n 'div',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'hgroup',\n 'label',\n 'li',\n 'main',\n 'nav',\n 'ol',\n 'picture',\n 'section',\n 'template',\n 'ul'\n ],\n textElements: [\n 'a',\n 'abbr',\n 'address',\n 'b',\n 'bdi',\n 'bdo',\n 'blockquote',\n 'button',\n 'cite',\n 'code',\n 'del',\n 'em',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'i',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'mark',\n 'output',\n 'p',\n 'samp',\n 'small',\n 'span',\n 'strike',\n 'strong',\n 'summary',\n 'sub',\n 'sup',\n 'time',\n 'u',\n 'var'\n ],\n breakElements: [\n 'br',\n 'hr',\n 'wbr'\n ],\n blocks: {\n visible: true,\n name: \"Elements\",\n items: [\n {\n type: \"box\",\n code: '<div></div>'\n },\n {\n type: \"text\",\n code: '<p>text</p>'\n },\n {\n type: \"link\",\n code: '<a href=\"https://michaelsboost.com/Polyrise\">Polyrise</a>'\n },\n {\n type: \"button\",\n code: '<button>text</button>'\n },\n {\n type: \"list\",\n code: '<ul><li>list item</li></ul>'\n },\n {\n type: \"progress\",\n code: '<progress value=\"25\" max=\"100\" />'\n },\n {\n type: \"form\",\n code: `<form>\n <input\n type=\"text\"\n name=\"firstname\"\n placeholder=\"First name\"\n aria-label=\"First name\"\n required\n />\n <input\n type=\"email\"\n name=\"email\"\n placeholder=\"Email address\"\n aria-label=\"Email address\"\n autocomplete=\"email\"\n required\n />\n <button type=\"submit\">Subscribe</button>\n <fieldset>\n <label for=\"terms\">\n <input type=\"checkbox\" role=\"switch\" id=\"terms\" name=\"terms\" />\n <span>I agree to the </span>\n <a href=\"#\">Privacy Policy</a>\n </label>\n </fieldset>\n </form>`\n },\n {\n type: \"datalist\",\n code: `<input list=\"eus29efzy\" type=\"search\" placeholder=\"Search...\" />\n <datalist id=\"eus29efzy\">\n <option value=\"Hello\"></option>\n <option value=\"World\"></option>\n </list>`\n },\n {\n type: \"textarea\",\n code: `<textarea placeholder=\"Text here\">Hello world</textarea>`\n },\n {\n type: \"select\",\n code: `<select>\n <optgroup label=\"English\">\n <option value=\"Hello\" selected>Hello</option>\n <option value=\"World\">World</option>\n </optgroup>\n <optgroup label=\"Espa\u00F1ol\">\n <option value=\"Hola\">Hola</option>\n <option value=\"Mundo\">Mundo</option>\n </optgroup>\n </select>`\n },\n {\n type: \"audio\",\n code: `<figure>\n <audio controls>\n <source src=\"https://www.w3schools.com/html/horse.mp3\" type=\"audio/mpeg\">\n Your browser does not support the audio element.\n </audio>\n <figcaption>\n <span>Audio courtesy of </span>\n <a href=\"https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_audio_all\" target=\"_blank\">w3schools.com</a>\n </figcaption>\n </figure>`\n },\n {\n type: \"video\",\n code: `<figure>\n <video controls>\n <source src=\"https://www.w3schools.com/html/mov_bbb.mp4\" type=\"video/mp4\">\n <source src=\"https://www.w3schools.com/html/mov_bbb.ogg\" type=\"video/ogg\">\n Your browser does not support the video tag.\n </video>\n <figcaption>\n <span>Video courtesy of </span>\n <a href=\"https://www.bigbuckbunny.org/\" target=\"_blank\">Big Buck Bunny</a>\n <span>.</span>\n </figcaption>\n </figure>`\n },\n {\n type: \"YouTube Video\",\n code: `<iframe width=\"576\" height=\"360\" src=\"https://www.youtube.com/embed/5rebMQj4Yiw\" title=\"Introducing my Character Party App\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>`\n },\n {\n type: \"image\",\n code: `<figure>\n <picture>\n <img src=\"https://cdn.pixabay.com/photo/2015/10/16/19/18/balloon-991680_1280.jpg\" alt=\"${app.name}\">\n </picture>\n <figcaption>\n <span>Image courtesy of </span>\n <a href=\"https://pixabay.com/photos/balloon-heart-love-red-romantic-991680/\" target=\"_blank\">Pixabay.com</a>\n <span>.</span>\n </figcaption>\n</figure>\n`\n },\n {\n type: \"vector\",\n code: `<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"isolation:isolate\" viewBox=\"0 0 1080 1080\" preserveAspectRatio=\"xMidYMin\">\n <rect width=\"1080\" height=\"1080\" style=\"fill:rgb(248,255,247)\">\n </rect>\n <line x1=\"159.75\" y1=\"926\" x2=\"920.25\" y2=\"926\" stroke-width=\"18\" stroke=\"rgb(220,223,220)\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"3\">\n </line>\n <g>\n <g>\n <path d=\" M 544.801 430.75 Q 544.801 504.551 544.801 580.75 Q 544.801 656.948 544.801 743.75\" fill=\"none\" stroke-width=\"50\" stroke=\"rgb(253,222,189)\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"3\">\n </path>\n <g>\n <path d=\" M 401.518 559.186 C 386.621 532.744 379.123 501.761 381.611 469.256 C 388.303 381.839 464.707 316.3 552.124 322.992 C 639.542 329.683 705.081 406.088 698.389 493.505 C 695.901 526.01 683.774 555.49 665.026 579.357 L 401.518 559.186 Z \" fill=\"rgb(255,146,108)\">\n </path>\n <path d=\" M 401.518 559.186 C 426.684 603.855 472.963 635.566 527.876 639.77 C 582.788 643.973 633.355 619.675 665.026 579.357 L 401.518 559.186 Z \" fill=\"rgb(0,72,99)\">\n </path>\n</g>\n<g>\n<line x1=\"553.901\" y1=\"760.75\" x2=\"553.901\" y2=\"908.75\" stroke-width=\"38\" stroke=\"rgb(0,72,99)\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"3\">\n</line>\n<line x1=\"553.901\" y1=\"618.75\" x2=\"553.901\" y2=\"760.75\" stroke-width=\"38\" stroke=\"rgb(0,72,99)\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"3\">\n</line>\n</g>\n<g>\n<line x1=\"500\" y1=\"760.75\" x2=\"500\" y2=\"908.75\" stroke-width=\"38\" stroke=\"rgb(0,72,99)\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"3\">\n</line>\n<line x1=\"500\" y1=\"618.75\" x2=\"500\" y2=\"760.75\" stroke-width=\"38\" stroke=\"rgb(0,72,99)\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"3\">\n</line>\n</g>\n<path d=\" M 544.801 430.75 Q 544.801 504.551 544.801 580.75 Q 544.801 656.948 544.801 743.75\" fill=\"none\" stroke-width=\"50\" stroke=\"rgb(253,222,189)\" stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-miterlimit=\"3\">\n</path>\n</g>\n<path d=\" M 496.638 228.982 C 499.271 194.588 529.332 168.802 563.726 171.435 C 598.12 174.068 623.906 204.129 621.273 238.523 C 618.64 272.917 588.579 298.703 554.185 296.07 C 519.791 293.438 494.005 263.376 496.638 228.982 Z \" fill=\"rgb(253,222,189)\">\n</path>\n</g>\n<g style=\"mix-blend-mode:soft-light;\">\n <rect x=\"0\" y=\"0\" width=\"1080\" height=\"1080\" transform=\"matrix(1,0,0,1,0,0)\" fill=\"rgb(243,255,241)\">\n </rect>\n</g>\n</svg>`\n },\n {\n type: \"iframe\",\n code: `<iframe src=\"https://michaelsboost.com/\">\n Your browser does not support the iframe tag.\n </iframe>`\n },\n {\n type: \"dialog\",\n code: `<dialog open>\n <article>\n <header>\n <button aria-label=\"Close\" rel=\"prev\" onclick=\"this.closest('dialog').removeAttribute('open');\"></button>\n <h3>Confirm your action!</h3>\n </header>\n <p>\n Cras sit amet maximus risus. Pellentesque sodales odio sit amet augue finibus\n pellentesque. Nullam finibus risus non semper euismod.\n </p>\n <footer>\n <button role=\"button\" class=\"secondary\" onclick=\"this.closest('dialog').removeAttribute('open');\">\n Cancel\n </button>\n <button autofocus onclick=\"this.closest('dialog').removeAttribute('open');\">\n Confirm\n </button>\n </footer>\n </article>\n</dialog>`\n },\n {\n type: \"details\",\n code: `<details>\n <summary>Accordion</summary>\n <p>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque urna diam,\n tincidunt nec porta sed, auctor id velit. Etiam venenatis nisl ut orci consequat, vitae\n tempus quam commodo. Nulla non mauris ipsum. Aliquam eu posuere orci. Nulla convallis\n lectus rutrum quam hendrerit, in facilisis elit sollicitudin. Mauris pulvinar pulvinar\n mi, dictum tristique elit auctor quis. Maecenas ac ipsum ultrices, porta turpis sit\n amet, congue turpis.\n </p>\n</details>`\n },\n {\n type: \"canvas\",\n code: `<canvas>Your browser does not support the canvas element.</canvas>`\n },\n {\n type: \"meter\",\n code: '<meter value=\"0.6\">60%</meter>'\n },\n {\n type: \"style\",\n code: '<style type=\"text/css\"></style>'\n },\n {\n type: \"script\",\n code: '<script type=\"module\"></script>'\n },\n {\n type: \"hr\",\n code: '<hr/>'\n } \n ]\n }\n};\nconst icons = (function() {\n const SidebarIconCSS = \"h-4 w-4\";\n const navIconCSS = \"h-3 w-3\";\n const modalIconCSS = \"h-4 w-4\";\n const previewIconCSS = \"h-3\";\n\n return {\n logo: `<svg\n class=\"${SidebarIconCSS}\" \n width=\"512\"\n height=\"512\"\n viewBox=\"0 0 135.46666 135.46667\"\n xml:space=\"preserve\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:svg=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\">\n <path\n d=\"M 9.5828775,0.26613362 V 135.20053 L 25.387597,126.03107 V 28.326953 l 70.325939,39.315946 -57.93083,32.387691 v 18.81073 L 125.88224,67.733332 Z M 37.783223,46.606974 V 88.679857 L 75.411417,67.643416 Z\" />\n </svg>`,\n twitter: `<svg class=\"${SidebarIconCSS}\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <defs\n id=\"defs2\"><clipPath\n clipPathUnits=\"userSpaceOnUse\"\n id=\"clipPath7\"><path\n style=\"display:none;fill:#2a34ff;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n d=\"M 2.7194315,3.6106111 H 8.5920036 L 21.280954,20.389389 h -5.727371 z\"\n id=\"path7\" /><path\n id=\"lpe_path-effect7\"\n style=\"fill:#2a34ff;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n class=\"powerclip\"\n d=\"M -2.8448815,-3.9722732 H 26.113213 V 27.972273 H -2.8448815 Z M 2.7194315,3.6106111 15.553583,20.389389 h 5.727371 L 8.5920036,3.6106111 Z\" /></clipPath><clipPath\n clipPathUnits=\"userSpaceOnUse\"\n id=\"clipPath11\"><rect\n style=\"fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n id=\"rect11\"\n width=\"21.586601\"\n height=\"18.278778\"\n x=\"1.2021173\"\n y=\"2.8606112\" /></clipPath></defs><g\n style=\"fill:none;stroke:currentColor;stroke-width:1.5\"\n id=\"g2\"\n transform=\"translate(-0.04613684)\"><g\n id=\"g8\"\n clip-path=\"url(#clipPath11)\"><path\n d=\"M 2.7194315,3.6106111 H 8.5920036 L 21.280954,20.389389 h -5.727371 z\"\n id=\"path2-8\" /><path\n d=\"M 20.541589,1.5132639 19.650846,2.5619375 18.760104,3.6106111 17.869362,4.6592848 16.978619,5.7079584 16.087877,6.756632 15.197135,7.8053056 14.306392,8.8539793 13.41565,9.9026529 12.524908,10.951326 11.634165,12 10.743423,13.048674 9.852681,14.097347 8.961938,15.146021 8.071196,16.194695 7.1804539,17.243368 6.2897116,18.292042 5.3989693,19.340715 4.5082269,20.389389 3.6174846,21.438063 2.7267423,22.486736\"\n id=\"path4\"\n clip-path=\"url(#clipPath7)\" /></g></g>\n </svg>`,\n heart: `<svg class=\"w-3\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path d=\"M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z\" />\n </svg>`,\n plus: `<svg class=\"${SidebarIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" />\n </svg>`,\n layers: `<svg class=\"${SidebarIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.429 9.75 2.25 12l4.179 2.25m0-4.5 5.571 3 5.571-3m-11.142 0L2.25 7.5 12 2.25l9.75 5.25-4.179 2.25m0 0L21.75 12l-4.179 2.25m0 0 4.179 2.25L12 21.75 2.25 16.5l4.179-2.25m11.142 0-5.571 3-5.571-3\" />\n </svg>`,\n swatch: `<svg class=\"${SidebarIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.098 19.902a3.75 3.75 0 0 0 5.304 0l6.401-6.402M6.75 21A3.75 3.75 0 0 1 3 17.25V4.125C3 3.504 3.504 3 4.125 3h5.25c.621 0 1.125.504 1.125 1.125v4.072M6.75 21a3.75 3.75 0 0 0 3.75-3.75V8.197M6.75 21h13.125c.621 0 1.125-.504 1.125-1.125v-5.25c0-.621-.504-1.125-1.125-1.125h-4.072M10.5 8.197l2.88-2.88c.438-.439 1.15-.439 1.59 0l3.712 3.713c.44.44.44 1.152 0 1.59l-2.879 2.88M6.75 17.25h.008v.008H6.75v-.008Z\" />\n </svg>`,\n sun: `<svg class=\"${SidebarIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z\" />\n </svg>`,\n moon: `<svg class=\"${SidebarIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z\" />\n </svg>`,\n play: `<svg class=\"${SidebarIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5.25 5.653c0-.856.917-1.398 1.667-.986l11.54 6.347a1.125 1.125 0 0 1 0 1.972l-11.54 6.347a1.125 1.125 0 0 1-1.667-.986V5.653Z\" />\n </svg>`,\n camera: `<svg class=\"${SidebarIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.827 6.175A2.31 2.31 0 0 1 5.186 7.23c-.38.054-.757.112-1.134.175C2.999 7.58 2.25 8.507 2.25 9.574V18a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9.574c0-1.067-.75-1.994-1.802-2.169a47.865 47.865 0 0 0-1.134-.175 2.31 2.31 0 0 1-1.64-1.055l-.822-1.316a2.192 2.192 0 0 0-1.736-1.039 48.774 48.774 0 0 0-5.232 0 2.192 2.192 0 0 0-1.736 1.039l-.821 1.316Z\" />\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 12.75a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0ZM18.75 10.5h.008v.008h-.008V10.5Z\" />\n </svg>`,\n cog: `<svg class=\"${SidebarIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z\" />\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" />\n </svg>`,\n rotate: `<svg class=\"${previewIconCSS}\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path d=\"M463.5 224H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5z\" />\n </svg>`,\n times: `<svg class=\"${modalIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\n </svg>`,\n search: `<svg class=\"${modalIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\" />\n </svg>`,\n file: `<svg class=\"h-3 -mt-1\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\">\n <path d=\"M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128z\" />\n </svg>`,\n import: `<svg class=\"h-3 -mt-1 transform origin-center scale-125\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path d=\"M128 64c0-35.3 28.7-64 64-64H352V128c0 17.7 14.3 32 32 32H512V448c0 35.3-28.7 64-64 64H192c-35.3 0-64-28.7-64-64V336H302.1l-39 39c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l80-80c9.4-9.4 9.4-24.6 0-33.9l-80-80c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l39 39H128V64zm0 224v48H24c-13.3 0-24-10.7-24-24s10.7-24 24-24H128zM512 128H384V0L512 128z\" />\n </svg>`,\n upload: `<svg class=\"${modalIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5\" />\n </svg>`,\n download: `<svg class=\"h-3 -mt-1 transform origin-center scale-125\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path d=\"M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32V274.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7V32zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V416c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352H64zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48z\" />\n </svg>`,\n codepen: `<svg class=\"h-3 -mt-1 transform origin-center scale-125\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path d=\"M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z\" />\n </svg>`,\n arrowDown: `<svg class=\"${navIconCSS}\" viewBox='0 0 576 512' style='color: unset;'>\n <path \n fill='currentColor' \n d='M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z'/>\n </svg>`,\n eye: `<svg class=\"${navIconCSS}\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path \n fill=\"currentColor\" \n d=\"M572.52,241.4c-1.5-1.8-38.5-46-93.94-90.67C417.8,111.16,358.8,85.33,288,85.33S158.2,111.16,97.42,150.72C41.98,195.4,4.98,239.6,3.48,241.4A32,32,0,0,0,0,256a32,32,0,0,0,3.48,14.6c1.5,1.8,38.5,46,93.94,90.67C158.2,400.84,217.2,426.67,288,426.67s129.8-25.83,190.58-65.4c55.44-44.67,92.44-88.87,93.94-90.67A32,32,0,0,0,576,256,32,32,0,0,0,572.52,241.4ZM288,384a128,128,0,1,1,128-128A128,128,0,0,1,288,384Zm0-192a64,64,0,1,0,64,64A64,64,0,0,0,288,192Z\"/>\n </svg>`,\n eyeSlash: `\n <svg class=\"${navIconCSS}\" viewBox=\"0 0 640 512\" style=\"color: unset;\">\n <path \n fill=\"currentColor\" \n d=\"M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z\"/>\n </svg>`,\n commandKey: `<svg class=\"${navIconCSS}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.7 -0.596 432.75714 370.21021\">\n <path\n fill=\"currentColor\"\n stroke-width=\"1.82857\"\n d=\"M 90.010716,-37.596 C 39.849447,-37.596 -0.7,2.9560437 -0.7,52.854 c 0,50.16127 40.812759,90.97356 90.710716,90.57858 h 42.392864 v 70.83214 H 90.010716 C 39.849447,214.26472 -0.7,254.68463 -0.7,304.58258 c 0,50.29293 40.549447,90.57857 90.710716,90.57857 49.897964,0 90.450004,-40.28564 90.450004,-90.57857 v -42.26429 h 70.56786 v 42.26429 c 0,50.29293 40.41681,90.57857 90.44642,90.57857 50.16127,0 90.58215,-40.28564 90.58215,-90.57857 0,-49.89795 -40.42088,-90.31786 -90.58215,-90.31786 H 299.08215 V 143.43258 H 341.475 c 50.16127,0 90.58215,-40.41731 90.58215,-90.57858 0,-49.8979563 -40.42088,-90.45 -90.58215,-90.45 -50.02961,0 -90.70974,40.5520437 -90.44642,90.45 V 95.511146 H 180.46072 V 52.854 c 0,-49.8979563 -40.55204,-90.45 -90.450004,-90.45 z m 0.13214,48.053572 c 23.303254,0 42.260724,18.961043 42.260724,42.264285 V 95.378996 H 90.142856 c -23.69819,0 -42.657141,-18.95892 -42.657141,-42.657139 0,-23.303242 18.958951,-42.264285 42.657141,-42.264285 z m 251.203574,0 c 23.69822,0 42.65715,18.961043 42.65715,42.264285 0,23.698219 -18.95893,42.657139 -42.65715,42.657139 H 299.08215 V 52.721857 c 0,-23.303242 18.96105,-42.264285 42.26428,-42.264285 z M 180.46072,143.56472 h 70.7 v 70.7 h -70.7 z M 90.142856,262.31829 h 42.260724 v 42.26429 c 0,23.6982 -18.95747,42.65714 -42.260724,42.65714 -23.69819,0 -42.657141,-18.95894 -42.657141,-42.65714 0,-23.30325 18.958951,-42.26429 42.657141,-42.26429 z m 208.939294,0 h 42.26428 c 23.69822,0 42.65715,18.96104 42.65715,42.26429 0,23.6982 -18.95893,42.65714 -42.65715,42.65714 -23.30323,0 -42.26428,-18.95894 -42.26428,-42.65714 z\" />\n</svg>`,\n plusFill: `<svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>`,\n shift: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"up-long\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M318 177.5c3.8-8.8 2-19-4.6-26l-136-144C172.9 2.7 166.6 0 160 0s-12.9 2.7-17.4 7.5l-136 144c-6.6 7-8.4 17.2-4.6 26S14.4 192 24 192h88l0 288c0 17.7 14.3 32 32 32h32c17.7 0 32-14.3 32-32l0-288h88c9.6 0 18.2-5.7 22-14.5z\"></path></svg>`,\n move: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"arrows-up-down-left-right\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M278.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l9.4-9.4V224H109.3l9.4-9.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-64 64c-12.5 12.5-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4H224V402.7l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-9.4 9.4V288H402.7l-9.4 9.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l64-64c12.5-12.5 12.5-32.8 0-45.3l-64-64c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l9.4 9.4H288V109.3l9.4 9.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-64-64z\"></path></svg>`,\n undo: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"arrow-rotate-left\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M125.7 160H176c17.7 0 32 14.3 32 32s-14.3 32-32 32H48c-17.7 0-32-14.3-32-32V64c0-17.7 14.3-32 32-32s32 14.3 32 32v51.2L97.6 97.6c87.5-87.5 229.3-87.5 316.8 0s87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3s-163.8-62.5-226.3 0L125.7 160z\"></path></svg>`,\n redo: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"arrow-rotate-right\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H464c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0s-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3s163.8-62.5 226.3 0L386.3 160z\"></path></svg>`,\n trash: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"trash\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M135.2 17.7L128 32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H320l-7.2-14.3C307.4 6.8 296.3 0 284.2 0H163.8c-12.1 0-23.2 6.8-28.6 17.7zM416 128H32L53.2 467c1.6 25.3 22.6 45 47.9 45H346.9c25.3 0 46.3-19.7 47.9-45L416 128z\"></path></svg>`,\n clone: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"clone\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M0 448c0 35.3 28.7 64 64 64H288c35.3 0 64-28.7 64-64V384H224c-53 0-96-43-96-96V160H64c-35.3 0-64 28.7-64 64V448zm224-96H448c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H224c-35.3 0-64 28.7-64 64V288c0 35.3 28.7 64 64 64z\"></path></svg>`,\n cut: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"scissors\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M256 192l-39.5-39.5c4.9-12.6 7.5-26.2 7.5-40.5C224 50.1 173.9 0 112 0S0 50.1 0 112s50.1 112 112 112c14.3 0 27.9-2.7 40.5-7.5L192 256l-39.5 39.5c-12.6-4.9-26.2-7.5-40.5-7.5C50.1 288 0 338.1 0 400s50.1 112 112 112s112-50.1 112-112c0-14.3-2.7-27.9-7.5-40.5L499.2 76.8c7.1-7.1 7.1-18.5 0-25.6c-28.3-28.3-74.1-28.3-102.4 0L256 192zm22.6 150.6L396.8 460.8c28.3 28.3 74.1 28.3 102.4 0c7.1-7.1 7.1-18.5 0-25.6L342.6 278.6l-64 64zM160 112c0 26.5-21.5 48-48 48s-48-21.5-48-48s21.5-48 48-48s48 21.5 48 48zM112 448c-26.5 0-48-21.5-48-48s21.5-48 48-48s48 21.5 48 48s-21.5 48-48 48z\"></path></svg>`,\n copy: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"copy\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M224 0c-35.3 0-64 28.7-64 64V288c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H224zM64 160c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H288c35.3 0 64-28.7 64-64V384H288v64H64V224h64V160H64z\"></path></svg>`,\n group: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"hand-pointer\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M128 40c0-22.1 17.9-40 40-40s40 17.9 40 40V188.2c8.5-7.6 19.7-12.2 32-12.2c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c25.3 0 46 19.5 47.9 44.3c8.5-7.7 19.8-12.3 32.1-12.3c26.5 0 48 21.5 48 48v32 64c0 70.7-57.3 128-128 128l-16 0H240l-.1 0h-5.2c-5 0-9.9-.3-14.7-1c-55.3-5.6-106.2-34-140-79L8 336c-13.3-17.7-9.7-42.7 8-56s42.7-9.7 56 8l56 74.7V40zM240 304c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304zm48-16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304c0-8.8-7.2-16-16-16zm80 16c0-8.8-7.2-16-16-16s-16 7.2-16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16V304z\"></path></svg>`,\n paste: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"paste\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M160 0c-23.7 0-44.4 12.9-55.4 32H48C21.5 32 0 53.5 0 80V400c0 26.5 21.5 48 48 48H192V176c0-44.2 35.8-80 80-80h48V80c0-26.5-21.5-48-48-48H215.4C204.4 12.9 183.7 0 160 0zM272 128c-26.5 0-48 21.5-48 48V448v16c0 26.5 21.5 48 48 48H464c26.5 0 48-21.5 48-48V256H416c-17.7 0-32-14.3-32-32V128H320 272zM160 40a24 24 0 1 1 0 48 24 24 0 1 1 0-48zm256 88v96h96l-96-96z\"></path></svg>`,\n bold: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"bold\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M0 64C0 46.3 14.3 32 32 32H80 96 224c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128H96 80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V256 96H32C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64H112V224H224zM112 288V416H256c35.3 0 64-28.7 64-64s-28.7-64-64-64H224 112z\"></path></svg>`,\n italic: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"italic\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M128 64c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H293.3L160 416h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H90.7L224 96H160c-17.7 0-32-14.3-32-32z\"></path></svg>`,\n underline: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"underline\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M16 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H128V224c0 53 43 96 96 96s96-43 96-96V96H304c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H384V224c0 88.4-71.6 160-160 160s-160-71.6-160-160V96H48C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32z\"></path></svg>`,\n strike: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"strikethrough\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H270.1c-.1 0-.3-.1-.4-.1l-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3l0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6l0 0 .2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1H335.1c7 5.6 11.4 11.2 13.9 17.2z\"></path></svg>`,\n subscript: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"subscript\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H47.3l89.6 128L47.3 384H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H304.7L215.1 256l89.6-128H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H288c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64H32zM480 320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 361.5 404.3 368 416 368v80c-17.7 0-32 14.3-32 32s14.3 32 32 32h32 32c17.7 0 32-14.3 32-32s-14.3-32-32-32V320z\"></path></svg>`,\n superscript: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"superscript\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M480 32c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 73.5 404.3 80 416 80v80c-17.7 0-32 14.3-32 32s14.3 32 32 32h32 32c17.7 0 32-14.3 32-32s-14.3-32-32-32V32zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H47.3l89.6 128L47.3 384H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H304.7L215.1 256l89.6-128H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H288c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64H32z\"></path></svg>`,\n heading: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"heading\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M0 64C0 46.3 14.3 32 32 32H80h48c17.7 0 32 14.3 32 32s-14.3 32-32 32H112V208H336V96H320c-17.7 0-32-14.3-32-32s14.3-32 32-32h48 48c17.7 0 32 14.3 32 32s-14.3 32-32 32H400V240 416h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H368 320c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112V416h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V240 96H32C14.3 96 0 81.7 0 64z\"></path></svg>`,\n paragraph: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"paragraph\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M192 32h64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H384l0 352c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-352H288V448c0 17.7-14.3 32-32 32s-32-14.3-32-32V352H192c-88.4 0-160-71.6-160-160s71.6-160 160-160z\"></path></svg>`,\n quote: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"quote-left\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M0 216C0 149.7 53.7 96 120 96h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V320 288 216zm256 0c0-66.3 53.7-120 120-120h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-30.9 0-56 25.1-56 56v8h64c35.3 0 64 28.7 64 64v64c0 35.3-28.7 64-64 64H320c-35.3 0-64-28.7-64-64V320 288 216z\"></path></svg>`,\n link: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"link\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z\"></path></svg>`,\n listBullet: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"list-ul\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M64 144c26.5 0 48-21.5 48-48s-21.5-48-48-48S16 69.5 16 96s21.5 48 48 48zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zM64 464c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm48-208c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48z\"></path></svg>`,\n listNumbers: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"list-ol\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M24 56c0-13.3 10.7-24 24-24H80c13.3 0 24 10.7 24 24V176h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H40c-13.3 0-24-10.7-24-24s10.7-24 24-24H56V80H48C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432H120c13.3 0 24 10.7 24 24s-10.7 24-24 24H32c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32z\"></path></svg>`,\n icons: `<svg class=\"${navIconCSS}\" aria-hidden=\"true\" focusable=\"false\" data-prefix=\"fas\" data-icon=\"icons\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\" data-fa-i2svg=\"\"><path fill=\"currentColor\" d=\"M532.3 7.3C539.7 13.3 544 22.4 544 32V176c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48V71L384 90.2V208c0 26.5-28.7 48-64 48s-64-21.5-64-48s28.7-48 64-48V64c0-15.3 10.8-28.4 25.7-31.4l160-32c9.4-1.9 19.1 .6 26.6 6.6zM106.7 304l11.8-17.8c5.9-8.9 15.9-14.2 26.6-14.2h61.7c10.7 0 20.7 5.3 26.6 14.2L245.3 304H272c26.5 0 48 21.5 48 48V464c0 26.5-21.5 48-48 48H80c-26.5 0-48-21.5-48-48V352c0-26.5 21.5-48 48-48h26.7zM224 408c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM510.7 278.3L472.3 368H528c6.7 0 12.6 4.1 15 10.4s.6 13.3-4.4 17.7l-128 112c-5.6 4.9-13.9 5.3-19.9 .9s-8.2-12.4-5.3-19.2L423.7 400H368c-6.7 0-12.6-4.1-15-10.4s-.6-13.3 4.4-17.7l128-112c5.6-4.9 13.9-5.3 19.9-.9s8.2 12.4 5.3 19.2zm-339-59.2c-6.5 6.5-17 6.5-23 0L51.9 119.2c-28-29-26.5-76.9 5-103.9c27-23.5 68.4-19 93.4 6.5l10 10.5 9.5-10.5c25-25.5 65.9-30 93.9-6.5c31 27 32.5 74.9 4.5 103.9l-96.4 99.9z\"></path></svg>`\n };\n})();\n\n// Reactive objects\nwindow.project = createProxy(p, (property, oldValue, newValue) => {\n if (oldValue !== newValue) {\n localStorage.setItem('Polyrise', JSON.stringify(project));\n \n // Split the property path into components\n const propertyParts = property.split('.');\n\n if (!App.initialRender) {\n // List of properties that should not trigger App.render\n const noRenderProps = ['lang', 'title', 'description', 'author', 'url', 'meta'];\n\n // Skip renderPreview if property is state.selected\n if (propertyParts.includes('state') && ['selected', 'collapsed'].some(part => propertyParts.includes(part))) {\n App.render('#app');\n return; // Exit the function early\n }\n\n // Check if the change is within project.html and is a text property\n if (propertyParts[0] === 'html' && propertyParts.includes('text')) {\n // Only text property changed, so only render preview\n renderPreview();\n } else if (noRenderProps.includes(propertyParts[0])) {\n // If the changed property is in noRenderProps, only render the preview\n renderPreview();\n } else {\n if (propertyParts[0] === 'activePanel') {\n // Handle full render or specific actions\n App.render('#app');\n getIframeClientSize();\n } else {\n // Handle full render or specific actions\n App.render('#app');\n // Diff nodes for other changes\n const diff = ['lang', 'libraries', 'html', 'css', 'title', 'description', 'author', 'url', 'meta', 'previewDark'];\n if (diff.includes(propertyParts[0])) {\n renderPreview();\n }\n \n if (propertyParts[0] === \"dark\") {\n document.documentElement.setAttribute('data-theme', project.dark ? 'dark' : 'light');\n document.querySelector('meta[name=apple-mobile-web-app-status-bar-style]').setAttribute('content', project.dark ? 'black-translucent' : 'default');\n document.querySelector('meta[name=theme-color]').setAttribute('content', project.dark ? '#13171f' : '#ffffff');\n document.querySelector('meta[name=msapplication-navbutton-color]').setAttribute('content', project.dark ? '#13171f' : '#ffffff');\n }\n }\n }\n }\n }\n});\n\nwindow.data = createProxy(d, (property, oldValue, newValue) => {\n // Only render if the actual value has changed\n if (oldValue !== newValue) {\n const string = property.toString();\n if (string === \"stylesTarget\") {\n if (data.stylesTarget) {\n if (data.shiftKey) {\n data.selectedLayerIds = [];\n selectLayersByStyleRef(data.stylesTarget, project.html);\n }\n }\n }\n if (string === 'selectedSize') {\n data.iframeWidth = data.selectedSize !== 'none' ? data.selectedSize.split('x')[0] : getIframeClientSize();\n data.iframeHeight = data.selectedSize !== 'none' ? data.selectedSize.split('x')[1] : getIframeClientSize();\n }\n App.render('#app');\n }\n});\n\n// Components\nfunction LeftMenubar() {\n const buttonSize = \"w-full\";\n\n return `<ul class=\"p-0 m-0\">\n <li class=\"list-none m-0\">\n <button\n aria-label=\"toggle menu\"\n name=\"toggle menu\"\n class=\"${buttonSize} text-sm border-0 px-0 py-3 rounded-md bg-transparent\"\n style=\"color: unset;\"\n onclick=\"data.menuDialog = true\"\n >\n ${icons.logo}\n </button>\n </li>\n <li class=\"list-none m-0\">\n <a\n aria-label=\"developer's twitter page\"\n name=\"developer's twitter page\"\n class=\"${buttonSize} text-sm border-0 px-4 py-3 rounded-md bg-transparent\"\n style=\"color: unset;\"\n role=\"button\"\n href=\"https://twitter.com/michaelsboost\"\n >\n ${icons.twitter}\n </a>\n </li>\n <li class=\"list-none m-0\">\n <a\n href=\"https://michaelsboost.com/donate/\"\n aria-label=\"Donation helps developer maintence\"\n target=\"_blank\"\n role=\"button\"\n class=\"${buttonSize} text-sm border-0 px-4 py-3 rounded-md bg-transparent text-red-400\"\n >\n ${icons.heart}\n </a>\n </li>\n <li class=\"list-none m-0\">\n <button \n aria-label=\"add blocks\" \n name=\"add blocks\" \n class=\"w-11 text-sm border-0 px-0 py-3 mb-2\"\n onclick=\"Blocks()\"\n >\n ${icons.plus}\n </button>\n </li>\n</ul>\n<ul class=\"p-0 m-0\">\n <li class=\"list-none m-0\">\n <button\n aria-label=\"toggle layers\"\n name=\"toggle layers\"\n class=\"${buttonSize} text-sm border-0 px-0 py-3 rounded-md bg-transparent ${project.activePanel === 'layers' ? 'text-blue-500' : ''}\"\n onclick=\"project.activePanel = project.activePanel === 'layers' ? null : 'layers'\"\n >\n ${icons.layers}\n </button>\n </li>\n <li class=\"list-none m-0\">\n <button\n aria-label=\"toggle inspector\"\n name=\"toggle inspector\"\n class=\"${buttonSize} text-sm border-0 px-0 py-3 rounded-md bg-transparent ${project.activePanel === 'inspector' ? 'text-blue-500' : ''} lg:hidden\"\n onclick=\"project.activePanel = project.activePanel === 'inspector' ? null : 'inspector'\"\n >\n ${icons.swatch}\n </button>\n </li>\n</ul>\n<ul class=\"p-0 m-0\">\n <li class=\"list-none m-0\">\n <button\n aria-label=\"toggle theme\"\n name=\"toggle theme\"\n class=\"${buttonSize} text-sm border-0 px-0 py-3 rounded-md bg-transparent\"\n style=\"color: unset;\"\n onclick=\"project.previewDark = !project.previewDark;\"\n >\n ${project.previewDark ? icons.sun : icons.moon}\n </button>\n </li>\n <li class=\"list-none m-0\">\n <button\n aria-label=\"render preview\"\n name=\"render preview\"\n class=\"${buttonSize} text-sm border-0 px-0 py-3 rounded-md bg-transparent\"\n style=\"color: unset;\"\n onclick=\"renderPreview(true)\"\n >\n ${icons.play}\n </button>\n </li>\n <li class=\"list-none m-0\">\n <button\n aria-label=\"full page screenshot\"\n name=\"full page screenshot\"\n class=\"${buttonSize} text-sm border-0 px-0 py-3 rounded-md bg-transparent\"\n style=\"color: unset;\"\n onclick=\"screenshot()\"\n >\n ${icons.camera}\n </button>\n </li>\n <li class=\"list-none m-0\">\n <button\n aria-label=\"settings button\"\n name=\"settings\"\n class=\"${buttonSize} text-sm border-0 px-4 py-3 rounded-md bg-transparent -mt-1\"\n style=\"color: unset;\"\n onclick=\"data.settings = !data.settings;\"\n >\n ${icons.cog}\n </button>\n </li>\n</ul>`;\n}\nfunction Menu() {\n let menuDialog = `<ul class=\"py-4 px-0\">\n <li class=\"list-none\">\n <div class=\"items-center text-center\">\n <div>\n <a \n aria-label=\"project homepage\"\n name=\"project homepage\"\n target=\"_blank\" \n href=\"${app.url}\">\n <img \n alt=\"logo\"\n class=\"my-4 w-24 m-auto\"\n src=\"imgs/logo.svg\"\n loading=\"lazy\" />\n </a>\n <div class=\"text-2xl\">\n About ${app.name}\n </div>\n <div class=\"my-2 text-xs\">\n Version ${app.version}\n </div>\n <a \n target=\"_blank\" \n class=\"text-sm underline mb-2 text-blue-500\" \n href=\"${app.license}\">\n Open Source License\n </a>\n </div>\n </div>\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"p-0 list-none -mt-2\">\n <button \n class=\"w-full flex gap-2 text-sm capitalize border-0 p-2 rounded-md bg-transparent\" \n style=\"color: unset;\" \n onclick=\"newProject();\">\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z\" />\n </svg>\n <span>new project</span>\n </button>\n </li>\n <li class=\"p-0 list-none\">\n <button \n class=\"w-full flex gap-2 text-sm capitalize border-0 p-2 rounded-md bg-transparent\" \n style=\"color: unset;\" \n onclick=\"data.menuDialog = null; importProject()\">\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m6.75 12-3-3m0 0-3 3m3-3v6m-1.5-15H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z\" />\n </svg>\n <span>import project</span>\n </button>\n </li>\n <li class=\"p-0 list-none\">\n <button \n class=\"w-full flex gap-2 text-sm capitalize border-0 p-2 rounded-md bg-transparent\" \n style=\"color: unset;\" \n onclick=\"data.menuDialog = null; downloadJSON()\">\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 8.25H7.5a2.25 2.25 0 0 0-2.25 2.25v9a2.25 2.25 0 0 0 2.25 2.25h9a2.25 2.25 0 0 0 2.25-2.25v-9a2.25 2.25 0 0 0-2.25-2.25H15M9 12l3 3m0 0 3-3m-3 3V2.25\" />\n </svg>\n <span>download json</span>\n </button>\n </li>\n <li class=\"p-0 list-none\">\n <button \n class=\"w-full flex gap-2 text-sm capitalize border-0 p-2 rounded-md bg-transparent\" \n style=\"color: unset;\" \n onclick=\"data.menuDialog = null; downloadProject()\">\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3\" />\n </svg>\n <span>download zip</span>\n </button>\n </li>\n <li class=\"p-0 list-none\">\n <button \n class=\"w-full flex gap-2 text-sm capitalize border-0 p-2 rounded-md bg-transparent\" \n style=\"color: unset;\" \n onclick=\"data.menuDialog = null; share()\">\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M7.217 10.907a2.25 2.25 0 1 0 0 2.186m0-2.186c.18.324.283.696.283 1.093s-.103.77-.283 1.093m0-2.186 9.566-5.314m-9.566 7.5 9.566 5.314m0 0a2.25 2.25 0 1 0 3.935 2.186 2.25 2.25 0 0 0-3.935-2.186Zm0-12.814a2.25 2.25 0 1 0 3.933-2.185 2.25 2.25 0 0 0-3.933 2.185Z\" />\n </svg>\n <span>share to codepen</span>\n </button>\n </li>\n <li class=\"p-0 list-none\">\n <button \n aria-label=\"Empty storage saved from Polyrise\"\n name=\"Empty storage saved from Polyrise\"\n class=\"w-full flex gap-2 text-sm capitalize border-0 p-2 rounded-md bg-transparent\" \n style=\"color: unset;\" \n onclick=\"emptyStorage()\">\n <svg class=\"h-5 w-5\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\">\n <path d=\"M566.6 54.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192-34.7-34.7c-4.2-4.2-10-6.6-16-6.6c-12.5 0-22.6 10.1-22.6 22.6l0 29.1L364.3 320l29.1 0c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16l-34.7-34.7 192-192zM341.1 353.4L222.6 234.9c-42.7-3.7-85.2 11.7-115.8 42.3l-8 8C76.5 307.5 64 337.7 64 369.2c0 6.8 7.1 11.2 13.2 8.2l51.1-25.5c5-2.5 9.5 4.1 5.4 7.9L7.3 473.4C2.7 477.6 0 483.6 0 489.9C0 502.1 9.9 512 22.1 512l173.3 0c38.8 0 75.9-15.4 103.4-42.8c30.6-30.6 45.9-73.1 42.3-115.8z\"/>\n </svg>\n <span>empty storage</span>\n </button>\n </li>\n </ul>`;\n menuDialog = `<dialog ${data.menuDialog ? 'open' : ''}>\n <article class=\"rounded-md\">\n <header class=\"flex justify-between items-center\">\n <h1 class=\"text-lg font-thin m-0 capitalize\">\n file menu\n </h1>\n <button \n class=\"text-xs w-auto px-3 py-2 m-0 capitalize rounded-md bg-transparent border-0\" \n style=\"color: unset;\" \n aria-label=\"Close\"\n onclick=\"data.menuDialog = null\">\n ${icons.times}\n </button>\n </header>\n <main class=\"font-thin\">\n ${menuDialog}\n </main>\n <footer>\n <button \n class=\"text-xs w-auto px-3 py-2 m-0 capitalize rounded-md bg-transparent border ${project.dark ? 'border-gray-600' : 'border-gray-200'}\" \n style=\"color: unset;\" \n aria-label=\"Close\" \n onclick=\"data.menuDialog = null\">\n close\n </button>\n </footer>\n </article>\n </dialog>`;\n return menuDialog;\n}\nfunction Settings() {\n let frameworks = data.frameworks;\n\n // Get the keys, sort them alphabetically, and reduce them back into an object\n let sortedFrameworks = Object.keys(frameworks)\n .sort()\n .reduce((acc, key) => {\n acc[key] = frameworks[key];\n return acc;\n }, {});\n\n let settingsHTML = `<ul class=\"px-0\">\n <li class=\"list-none\">\n <div class=\"mb-2\">\n <input \n id=\"pjqgd1wka\"\n type=\"file\" \n name=\"project logo\" \n class=\"hidden\"\n onchange=\"handleLogoChange(event)\"\n />\n <label \n for=\"pjqgd1wka\"\n class=\"mb-2 flex justify-between items-center cursor-pointer\">\n <span>Project logo:</span>\n\n <img \n id=\"projectLogo\"\n class=\"w-8\"\n alt=\"Project Logo\"\n src=\"${project.logo}\"\n loading=\"lazy\">\n </label>\n </div>\n </li>\n <li class=\"list-none\">\n <nav class=\"flex justify-between mt-5 items-center\">\n <label \n for=\"o14tigo4m\"\n class=\"mb-2 flex justify-between items-center cursor-pointer\">\n <span>Dark:</span>\n </label>\n\n <input \n id=\"o14tigo4m\"\n class=\"m-0\"\n type=\"checkbox\" \n role=\"switch\"\n name=\"toggle css reset\"\n onchange=\"project.dark = this.checked;\"\n ${project.dark ? 'checked=\"true\"' : ''}\n />\n </nav>\n </li>\n <li class=\"list-none\">\n <nav class=\"flex justify-between mt-5 items-center\">\n <label \n for=\"osbpm2k0q\"\n class=\"mb-2 flex justify-between items-center cursor-pointer\">\n <span>PWA:</span>\n </label>\n\n <input \n id=\"osbpm2k0q\"\n class=\"m-0\"\n type=\"checkbox\" \n role=\"switch\"\n name=\"export project as a pwa\"\n onchange=\"project.pwa = this.checked\"\n ${project.pwa ? 'checked=\"true\"' : ''}\n />\n </nav>\n </li>\n <li class=\"list-none\">\n <button\n aria-label=\"empty history\"\n name=\"empty history\"\n class=\"capitalize py-2 w-full items-center rounded-md\"\n onclick=\"\n data.history = [];\n data.historyIndex = -1;\n this.closest('dialog[open]').querySelector('header button').onclick();\n \">\n <span class=\"text-[.75rem]\">\n empty history\n </span>\n </button>\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"list-none\">\n <nav class=\"flex justifu-between -mt-3 items-center\">\n <label \n for=\"wl7i1adq7\"\n class=\"m-0 flex justify-between items-center cursor-pointer\">\n <span>Libraries:</span>\n </label>\n\n <button\n aria-label=\"search libraries\"\n name=\"search libraries\"\n class=\"bg-transparent border-0 focus-within:shadow-none\"\n style=\"color: unset;\"\n onclick=\"librariesDialog();\">\n ${icons.search}\n </button>\n </nav>\n\n <select onchange=\"\n if (this.value) {\n data.chosenFramework = this.value.toLowerCase();\n let framework = data.frameworks[\\`\\${data.chosenFramework}\\`];\n if (!project.libraries.includes(framework.libraries)) {\n for (item of framework.libraries) {\n project.libraries.push(item);\n }\n }\n if (framework.meta) project.meta += framework.meta;\n } else {\n data.chosenFramework = '';\n }\n \">\n <option value=\"\" ${!data.chosenFramework ? 'selected' : ''}>-- Popular Libraries/Frameworks --</option>\n ${Object.keys(sortedFrameworks).map(framework => {\n // Lowercase except first character is uppercase\n let name = framework.toLowerCase();\n name = name.charAt(0).toUpperCase() + name.slice(1);\n return `<option value=\"${name}\" ${name === data.chosenFramework ? 'selected' : ''}>${name}</option>`\n }).join('')}\n </select>\n\n <div id=\"librariesBox\">\n ${project.libraries.map((library, index) => `\n <nav class=\"flex justify-between py-2\" data-index=\"${index}\">\n <input \n type=\"text\" \n placeholder=\"https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.15.2/Sortable.min.js\" \n data=\"library\" \n class=\"w-full pl-3 pr-0 rounded-md rounded-r-none focus:shadow-none\"\n style=\"margin-bottom: 0;\"\n value=\"${library}\" \n oninput=\"project.libraries[${index}] = this.value; renderPreview(true);\" />\n <button \n aria-label=\"delete library\"\n name=\"delete library\"\n class=\"px-3 py-[15px] h-full border-0 rounded-md rounded-l-none\"\n onclick=\"project.libraries.splice(${index}, 1); renderPreview(true);\">\n ${icons.trash}\n </button>\n </nav>\n `).join('')}\n </div>\n <button \n aria-label=\"add another library or framework\" \n name=\"add another library or framework\" \n onclick=\"project.libraries.push('')\" \n class=\"capitalize py-2 w-full items-center rounded-md\">\n <span class=\"text-[.75rem]\">\n Add another\n </span>\n </button>\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"list-none\">\n <div class=\"mb-2\">\n Project name:\n </div>\n <input \n type=\"text\" \n name=\"project name\"\n placeholder=\"Project name\" \n class=\"p-2 rounded-md w-full\" \n value=\"${project.name}\"\n oninput=\"project.name = this.value;\"\n />\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"list-none\">\n <div class=\"mb-2\">\n Project version:\n </div>\n <section class=\"flex justify-between gap-4\">\n <input \n type=\"number\" \n min=\"0\"\n step=\"1\"\n name=\"project-major-version\"\n placeholder=\"Major\"\n class=\"p-2 rounded-md w-full\" \n value=\"${project.version.split('.')[0]}\"\n oninput=\"updateVersionPart('major', this.value);\"\n />\n <input \n type=\"number\" \n min=\"0\"\n step=\"1\"\n name=\"project-minor-version\"\n placeholder=\"Minor\" \n class=\"p-2 rounded-md w-full\" \n value=\"${project.version.split('.')[1]}\"\n oninput=\"updateVersionPart('minor', this.value);\"\n />\n <input \n type=\"number\" \n min=\"0\"\n step=\"1\"\n name=\"project-patch-version\"\n placeholder=\"Patch\" \n class=\"p-2 rounded-md w-full\" \n value=\"${project.version.split('.')[2]}\"\n oninput=\"updateVersionPart('patch', this.value);\"\n />\n </section>\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"list-none\">\n <div class=\"mb-2\">\n Project title:\n </div>\n <input \n type=\"text\" \n name=\"project title\"\n placeholder=\"Project title\"\n class=\"p-2 rounded-md w-full\" \n value=\"${project.title}\"\n oninput=\"project.title = this.value;\"\n />\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"list-none\">\n <div class=\"mb-2\">\n Project description:\n </div>\n <textarea \n name=\"project description\"\n placeholder=\"Project description\" \n class=\"p-2 rounded-md w-full resize-vertical h-56\"\n oninput=\"project.description = this.value;\"\n >${project.description}</textarea>\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"list-none\">\n <div class=\"mb-2\">\n Project author:\n </div>\n <input \n type=\"text\" \n name=\"project author\"\n placeholder=\"Project author\" \n class=\"p-2 rounded-md w-full\" \n value=\"${project.author}\"\n oninput=\"project.author = this.value;\"\n />\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"list-none\">\n <div class=\"mb-2\">\n Project url:\n </div>\n <input \n type=\"text\" \n name=\"project url\"\n placeholder=\"Project url\" \n class=\"p-2 rounded-md w-full\" \n value=\"${project.url}\"\n oninput=\"project.url = this.value;\"\n />\n </li>\n <li class=\"p-0 list-none\">\n <hr />\n </li>\n <li class=\"list-none\">\n <div class=\"my-2\">\n HTML before closing head tag:\n </div>\n <textarea \n placeholder=\"HTML before closing </head> tag\" \n class=\"p-2 rounded-md w-full resize-vertical h-56\"\n oninput=\"project.meta = this.value;\"\n >${project.meta}</textarea>\n </li>\n </ul>`;\n settingsHTML = `<dialog ${data.settings ? 'open' : ''}>\n <article class=\"rounded-md\">\n <header class=\"flex justify-between items-center\">\n <h1 class=\"text-lg font-thin m-0 capitalize\">\n settings\n </h1>\n <button \n class=\"text-xs w-auto px-3 py-2 m-0 capitalize rounded-md bg-transparent border-0\" \n style=\"color: unset;\" \n aria-label=\"Close\"\n onclick=\"data.settings = null; data.chosenFramework = '';\">\n ${icons.times}\n </button>\n </header>\n <main class=\"font-thin\">\n ${settingsHTML}\n </main>\n <footer>\n <button \n class=\"text-xs w-auto px-3 py-2 m-0 capitalize rounded-md bg-transparent border ${project.dark ? 'border-gray-600' : 'border-gray-200'}\" \n style=\"color: unset;\" \n aria-label=\"Close\" \n onclick=\"data.settings = null; data.chosenFramework = '';\">\n close\n </button>\n </footer>\n </article>\n </dialog>`;\n return settingsHTML;\n}\nwindow.librariesDialog = () => {\n let libraries = `<div class=\"p-4\">\n <input \n id=\"searchInput\" \n type=\"search\" \n placeholder=\"Search for resources (JQuery, Bootstrap, Foundation...)\" \n class=\"w-full p-3 rounded-full bg-[#1c212c]\" \n oninput=\"this.value ? data.searchLibKey = this.value : data.searchLibKey = null; data.searchLibKey ? fetchSuggestions(data.searchLibKey) : ''\" />\n \n <div id=\"pruz9lb2p\" class=\"relative px-4 capitalize h-auto max-h-64 overflow-auto\"></div>\n </div>`;\n\n Modal.render({\n title: \"Search for resources (JQuery, Bootstrap, Foundation...)\",\n content: libraries,\n onLoad() {\n document.getElementById('searchInput').focus();\n }\n });\n}\nwindow.attributesModal = () => {\n const globalAttributes = [\n \"accesskey\", \"autocapitalize\", \"autofocus\", \"class\", \"contenteditable\", \n \"dir\", \"exportparts\", \"hidden\", \"id\", \"inert\", \"inputmode\", \"is\", \n \"itemid\", \"itemprop\", \"itemref\", \"itemscope\", \"itemtype\", \"lang\", \n \"nonce\", \"part\", \"popover\", \"role\", \"slot\", \"spellcheck\", \"tabindex\", \n \"translate\"\n ];\n const eventAttributes = [\n \"onabort\", \"onautocomplete\", \"onautocompleteerror\", \"onblur\", \"oncancel\", \n \"oncanplay\", \"oncanplaythrough\", \"onchange\", \"onclick\", \"onclose\", \n \"oncontextmenu\", \"oncuechange\", \"ondblclick\", \"ondrag\", \"ondragend\", \n \"ondragenter\", \"ondragleave\", \"ondragover\", \"ondragstart\", \"ondrop\", \n \"ondurationchange\", \"onemptied\", \"onended\", \"onerror\", \"onfocus\", \n \"oninput\", \"oninvalid\", \"onkeydown\", \"onkeypress\", \"onkeyup\", \"onload\", \n \"onloadeddata\", \"onloadedmetadata\", \"onloadstart\", \"onmousedown\", \n \"onmouseenter\", \"onmouseleave\", \"onmousemove\", \"onmouseout\", \n \"onmouseover\", \"onmouseup\", \"onmousewheel\", \"onpause\", \"onplay\", \n \"onplaying\", \"onprogress\", \"onratechange\", \"onreset\", \"onresize\", \n \"onscroll\", \"onseeked\", \"onseeking\", \"onselect\", \"onshow\", \"onsort\", \n \"onstalled\", \"onsubmit\", \"onsuspend\", \"ontimeupdate\", \"ontoggle\", \n \"onvolumechange\", \"onwaiting\"\n ];\n\n // Initialize `common` first\n const commonEventGroup = [\n \"onclick\", \"ondblclick\", \"onmousedown\", \"onmouseup\", \"onmouseover\", \"onmouseout\", \"onmouseenter\", \"onmouseleave\", \"oncontextmenu\"\n ];\n const dragDropEventGroup = [\n \"ondragstart\", \"ondragend\", \"ondrop\", \"ondragenter\", \"ondragleave\",\n \"ondragover\", ...commonEventGroup\n ];\n\n const eventGroups = {\n common: commonEventGroup,\n formControls: [\n \"onchange\", \"oninput\", \"onfocus\", \"onblur\"\n ],\n buttonControls: [\n \"onchange\", \"oninput\", \"onfocus\", \"onblur\", ...commonEventGroup\n ],\n dragDrop: [\n ...dragDropEventGroup\n ],\n detailControls: [\n \"ontoggle\"\n ],\n dialogControls: [\n \"onclose\", \"oncancel\", ...dragDropEventGroup\n ],\n media: [\n \"onabort\", \"oncanplay\", \"oncanplaythrough\", \"ondurationchange\", \"onemptied\",\n \"onended\", \"onerror\", \"onloadeddata\", \"onloadedmetadata\", \"onloadstart\",\n \"onpause\", \"onplay\", \"onplaying\", \"onprogress\", \"onratechange\", \"onseeked\",\n \"onseeking\", \"onstalled\", \"onsuspend\", \"ontimeupdate\", \"onvolumechange\",\n \"onwaiting\"\n ],\n body: [\n \"onafterprint\", \"onbeforeprint\", \"onbeforeunload\", \"onhashchange\",\n \"onlanguagechange\", \"onmessage\", \"onmessageerror\", \"onoffline\", \"ononline\",\n \"onpopstate\", \"onrejectionhandled\", \"onstorage\", \"onunhandledrejection\",\n \"onunload\"\n ],\n loadError: [\n \"onload\", \"onerror\"\n ]\n };\n\n const tagEventGroups = [\n { tags: ['form', 'input', 'select', 'textarea'], events: ['formControls'] },\n { tags: ['canvas', 'map', 'meter', 'svg', 'path', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'text', 'use', 'symbol', 'linearGradient', 'radialGradient', 'stop', 'clipPath', 'mask', 'filter', 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence'], events: ['common'] },\n { tags: ['a', 'button'], events: ['buttonControls'] },\n { tags: ['details'], events: ['detailControls'] },\n { tags: ['dialog'], events: ['dialogControls'] },\n { tags: ['audio', 'video'], events: ['media'] },\n { tags: ['html'], events: ['common', 'body'] },\n { tags: ['script', 'img'], events: ['loadError'] },\n { tags: ['div', 'section', 'article', 'aside', 'header', 'footer', 'nav', 'main', 'figure', 'figcaption'], events: ['dragDrop'] },\n { tags: ['table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'col', 'colgroup', 'caption'], events: ['common'] },\n { tags: ['fieldset', 'label', 'legend'], events: ['common'] },\n { tags: ['iframe', 'embed', 'object', 'param'], events: ['common'] },\n { tags: ['output', 'del', 'ins', 'marquee', 'meter', 'time', 'data'], events: ['common'] }\n ];\n\n function combineEventGroups(groups) {\n return Array.from(new Set(groups.flatMap(group => eventGroups[group])));\n }\n\n function generateEventMappings() {\n const elementEventMappings = {};\n\n tagEventGroups.forEach(group => {\n const combinedEvents = combineEventGroups(group.events);\n group.tags.forEach(tag => {\n elementEventMappings[tag] = combinedEvents;\n });\n });\n\n return elementEventMappings;\n }\n\n const elementEventMappings = generateEventMappings();\n \n const specificAttributes = {\n input: [\"accept\", \"alt\", \"autocomplete\", \"checked\", \"dirname\", \"disabled\", \"form\", \"formaction\", \"formenctype\", \"formmethod\", \"formnovalidate\", \"formtarget\", \"height\", \"list\", \"max\", \"maxlength\", \"min\", \"minlength\", \"multiple\", \"name\", \"pattern\", \"placeholder\", \"readonly\", \"required\", \"size\", \"src\", \"step\", \"type\", \"value\", \"width\"],\n select: [\"autofocus\", \"disabled\", \"form\", \"multiple\", \"name\", \"required\", \"size\"],\n option: [\"disabled\", \"label\", \"selected\", \"value\"],\n optgroup: [\"disabled\", \"label\"],\n textarea: [\"autocapitalize\", \"autocomplete\", \"cols\", \"dirname\", \"disabled\", \"form\", \"maxlength\", \"minlength\", \"name\", \"placeholder\", \"readonly\", \"required\", \"rows\", \"wrap\"],\n img: [\"alt\", \"crossorigin\", \"decoding\", \"height\", \"importance\", \"intrinsicsize\", \"ismap\", \"loading\", \"referrerpolicy\", \"sizes\", \"src\", \"srcset\", \"usemap\", \"width\"],\n a: [\"download\", \"href\", \"hreflang\", \"ping\", \"referrerpolicy\", \"rel\", \"target\", \"type\"],\n button: [\"autofocus\", \"disabled\", \"form\", \"formaction\", \"formenctype\", \"formmethod\", \"formnovalidate\", \"formtarget\", \"name\", \"type\", \"value\"],\n fieldset: [\"disabled\", \"form\", \"name\"],\n label: [\"for\"],\n iframe: [\"allow\", \"allowfullscreen\", \"allowpaymentrequest\", \"height\", \"loading\", \"name\", \"referrerpolicy\", \"sandbox\", \"src\", \"srcdoc\", \"width\"],\n audio: [\"autoplay\", \"controls\", \"crossorigin\", \"loop\", \"muted\", \"preload\", \"src\"],\n video: [\"autoplay\", \"controls\", \"crossorigin\", \"height\", \"loop\", \"muted\", \"playsinline\", \"poster\", \"preload\", \"src\", \"width\"],\n source: [\"media\", \"sizes\", \"src\", \"srcset\", \"type\"],\n track: [\"default\", \"kind\", \"label\", \"src\", \"srclang\"],\n form: [\"accept-charset\", \"action\", \"autocomplete\", \"enctype\", \"method\", \"name\", \"novalidate\", \"target\"],\n meta: [\"charset\", \"content\", \"http-equiv\", \"name\"],\n link: [\"as\", \"crossorigin\", \"href\", \"hreflang\", \"media\", \"referrerpolicy\", \"rel\", \"sizes\", \"type\"],\n script: [\"async\", \"crossorigin\", \"defer\", \"integrity\", \"nomodule\", \"referrerpolicy\", \"src\", \"type\"],\n style: [\"media\", \"scoped\", \"type\"],\n ol: [\"reversed\", \"start\", \"type\"],\n li: [\"value\"],\n table: [\"border\"],\n th: [\"colspan\", \"headers\", \"rowspan\", \"scope\"],\n tr: [\"align\", \"bgcolor\", \"valign\"],\n td: [\"abbr\", \"align\", \"axis\", \"bgcolor\", \"colspan\", \"headers\", \"height\", \"rowspan\", \"scope\", \"valign\", \"width\"],\n progress: [\"max\", \"value\"],\n meter: [\"high\", \"low\", \"max\", \"min\", \"optimum\", \"value\"],\n object: [\"data\", \"form\", \"height\", \"name\", \"type\", \"usemap\", \"width\"],\n embed: [\"height\", \"src\", \"type\", \"width\"],\n param: [\"name\", \"value\"],\n area: [\"alt\", \"coords\", \"download\", \"href\", \"hreflang\", \"ping\", \"referrerpolicy\", \"rel\", \"shape\", \"target\"],\n col: [\"span\", \"width\"],\n colgroup: [\"span\"],\n map: [\"name\"],\n track: [\"default\", \"kind\", \"label\", \"src\", \"srclang\"],\n canvas: [\"height\", \"width\"],\n data: [\"value\"],\n time: [\"datetime\"],\n output: [\"for\", \"form\", \"name\"],\n del: [\"cite\", \"datetime\"],\n ins: [\"cite\", \"datetime\"],\n details: [\"open\"],\n dialog: [\"open\"],\n marquee: [\"behavior\", \"bgcolor\", \"direction\", \"height\", \"hspace\", \"loop\", \"scrollamount\", \"scrolldelay\", \"truespeed\", \"vspace\", \"width\"],\n meter: [\"high\", \"low\", \"max\", \"min\", \"optimum\", \"value\"],\n\n svg: [\"width\", \"height\", \"viewBox\", \"preserveAspectRatio\", \"xmlns\"],\n path: [\"d\", \"pathLength\"],\n rect: [\"x\", \"y\", \"width\", \"height\", \"rx\", \"ry\"],\n circle: [\"cx\", \"cy\", \"r\"],\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\n line: [\"x1\", \"y1\", \"x2\", \"y2\"],\n polyline: [\"points\"],\n polygon: [\"points\"],\n text: [\"x\", \"y\", \"dx\", \"dy\", \"rotate\", \"textLength\", \"lengthAdjust\"],\n use: [\"href\", \"x\", \"y\", \"width\", \"height\"],\n symbol: [\"viewBox\", \"preserveAspectRatio\"],\n linearGradient: [\"x1\", \"y1\", \"x2\", \"y2\", \"gradientUnits\", \"gradientTransform\", \"spreadMethod\"],\n radialGradient: [\"cx\", \"cy\", \"r\", \"fx\", \"fy\", \"fr\", \"gradientUnits\", \"gradientTransform\", \"spreadMethod\"],\n stop: [\"offset\", \"stop-color\", \"stop-opacity\"],\n clipPath: [\"clipPathUnits\"],\n mask: [\"maskUnits\", \"maskContentUnits\", \"x\", \"y\", \"width\", \"height\"],\n filter: [\"x\", \"y\", \"width\", \"height\", \"filterUnits\", \"primitiveUnits\"],\n feBlend: [\"in\", \"in2\", \"mode\"],\n feColorMatrix: [\"in\", \"type\", \"values\"],\n feComponentTransfer: [\"in\"],\n feComposite: [\"in\", \"in2\", \"operator\", \"k1\", \"k2\", \"k3\", \"k4\"],\n feConvolveMatrix: [\"in\", \"order\", \"kernelMatrix\", \"divisor\", \"bias\", \"targetX\", \"targetY\", \"edgeMode\", \"preserveAlpha\"],\n feDiffuseLighting: [\"in\", \"surfaceScale\", \"diffuseConstant\", \"kernelUnitLength\"],\n feDisplacementMap: [\"in\", \"in2\", \"scale\", \"xChannelSelector\", \"yChannelSelector\"],\n feDistantLight: [\"azimuth\", \"elevation\"],\n feFlood: [\"flood-color\", \"flood-opacity\"],\n feFuncA: [\"type\", \"tableValues\", \"slope\", \"intercept\", \"amplitude\", \"exponent\", \"offset\"],\n feFuncB: [\"type\", \"tableValues\", \"slope\", \"intercept\", \"amplitude\", \"exponent\", \"offset\"],\n feFuncG: [\"type\", \"tableValues\", \"slope\", \"intercept\", \"amplitude\", \"exponent\", \"offset\"],\n feFuncR: [\"type\", \"tableValues\", \"slope\", \"intercept\", \"amplitude\", \"exponent\", \"offset\"],\n feGaussianBlur: [\"in\", \"stdDeviation\", \"edgeMode\"],\n feImage: [\"href\", \"preserveAspectRatio\", \"x\", \"y\", \"width\", \"height\", \"result\"],\n feMergeNode: [\"in\"], // Used within feMerge, no additional attributes\n feMorphology: [\"in\", \"operator\", \"radius\"],\n feOffset: [\"in\", \"dx\", \"dy\"],\n fePointLight: [\"x\", \"y\", \"z\"],\n feSpecularLighting: [\"in\", \"surfaceScale\", \"specularConstant\", \"specularExponent\", \"kernelUnitLength\"],\n feSpotLight: [\"x\", \"y\", \"z\", \"pointsAtX\", \"pointsAtY\", \"pointsAtZ\", \"specularExponent\", \"limitingConeAngle\"],\n feTile: [\"in\"],\n feTurbulence: [\"baseFrequency\", \"numOctaves\", \"seed\", \"stitchTiles\", \"type\"],\n };\n\n // Helper to find common tags\n function areCommonLayerTags(layers) {\n if (layers.length === 0) return [];\n \n // Extract the tag from each layer\n const firstTag = layers[0].tag;\n const allSame = layers.every(layer => layer.tag === firstTag);\n \n // If all tags are the same, return the full layers array; otherwise, return an empty array\n return allSame ? true : false;\n }\n \n // Retrieve and aggregate attributes for selected layers\n const selectedLayers = data.selectedLayerIds.map(id => findLayerById(id, project.html).layer).filter(layer => layer);\n const detectCommonLayerTags = areCommonLayerTags(selectedLayers);\n\n function renderAttributeButtons(attributes) {\n return attributes\n .filter(attr => !data.searchTerm || attr.includes(data.searchTerm))\n .map(attr => `\n <button \n class=\"text-xs w-auto px-3 py-2 m-0 capitalize rounded-md bg-transparent border \n ${project.dark ? 'border-gray-600' : 'border-gray-300'}\"\n style=\"color: unset;\"\n onclick=\"\n const textfield = document.getElementById('hyfb8mxg0');\n const val = textfield.value.trim();\n\n if (!val) {\n textfield.value = '${attr}';\n return;\n }\n textfield.value += ',${attr}';\n \">\n ${attr}\n </button>`\n ).join('');\n };\n\n let attributesModal = \"\";\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n\n let specificAttributesForTag = specificAttributes[layer.tag] ? specificAttributes[layer.tag] : null;\n // if (data.selectedLayerIds.length > 0) specificAttributesForTag = [];\n\n let attrBtns = null;\n if (data.boxElements.includes(layer.tag) || data.textElements.includes(layer.tag)) {\n const detectTag = ['a', 'button', 'form', 'input', 'select', 'textarea'];\n if ((detectTag.includes(layer.tag))) {\n attrBtns = renderAttributeButtons(elementEventMappings[layer.tag]);\n } else {\n attrBtns = renderAttributeButtons(elementEventMappings['div']);\n }\n } else if (data.breakElements.includes(layer.tag)) {\n attrBtns = null\n } else {\n attrBtns = renderAttributeButtons(elementEventMappings[layer.tag] || eventAttributes);\n }\n\n attributesModal = `\n <div class=\"flex flex-col gap-4\">\n ${specificAttributesForTag && detectCommonLayerTags ? `\n <details \n class=\"flex items-center mt-4 mb-0\" \n ${data.specificAttributesForTag ? 'open' : ''}\n ontoggle=\"\n const detailsElement = this;\n data.specificAttributesForTag = detailsElement.hasAttribute('open');\n \">\n <summary>\n Specific Attributes for <${layer.tag}>\n </summary>\n <code class=\"grid grid-cols-2 gap-2 mb-0 bg-transparent\">\n ${renderAttributeButtons(specificAttributesForTag)}\n </code>\n </details>\n\n <hr/>` : ''}\n\n <details \n class=\"flex items-center ${specificAttributesForTag && detectCommonLayerTags ? '' : 'mt-4'} mb-0\" \n ${data.globalAttributesCollapsed ? 'open' : ''}\n ontoggle=\"\n const detailsElement = this;\n data.globalAttributesCollapsed = detailsElement.hasAttribute('open');\n \">\n <summary>\n Global Attributes\n </summary>\n <code class=\"grid grid-cols-2 gap-2 mb-0 bg-transparent\">\n ${renderAttributeButtons(globalAttributes)}\n </code>\n </details>\n\n <hr/>\n\n <details \n class=\"flex items-center mb-0\" \n ${data.eventAttributesCollapsed ? 'open' : ''}\n ontoggle=\"\n const detailsElement = this;\n data.eventAttributesCollapsed = detailsElement.hasAttribute('open');\n \">\n <summary>\n Event Attributes for <${layer.tag}>\n </summary>\n <code class=\"grid grid-cols-2 gap-2 mb-0 bg-transparent\">\n ${attrBtns}\n </code>\n </details>\n\n <hr/>\n\n <input \n id=\"hyfb8mxg0\"\n type=\"text\" \n placeholder=\"Enter custom attribute...\" \n class=\"rounded-full border p-2 flex-grow\"\n style=\"margin: 0;\"\n onkeydown=\"\n if (event.key === 'Enter' && this.value.trim()) {\n addAttribute(this.value);\n document.querySelector('dialog[open]').querySelector('header > button').onclick();\n }\n \"\n />\n </div>`;\n });\n\n Modal.render({\n title: \"Add An Attribute\",\n content: attributesModal,\n onLoad() {\n document.getElementById('hyfb8mxg0').focus();\n },\n onClose() {\n \n },\n onConfirm() {\n addAttribute(document.getElementById('hyfb8mxg0').value.trim());\n }\n });\n}\nfunction LayerTree() {\n // Function to render each layer recursively\n function renderLayer(layer) {\n const { id, name, children, state } = layer;\n const hasChildren = children && children.length > 0;\n const isVisible = state.visible;\n if (data.shiftKey && data.cmdKey && layer.style === data.stylesTarget) {\n layer.state.selected = true;\n }\n\n // HTML structure for each layer\n const listItem = `\n <li class=\"list-none select-none\">\n <code class=\"p-0 flex justify-between whitespace-nowrap min-w-min ${state.selected ? 'bg-[#0172ad] text-white' : ''}\" data-layer=\"${id}\">\n <span>\n <button \n aria-label=\"toggle layer children\"\n name=\"toggle layer children\"\n class=\"bg-transparent ${hasChildren ? '' : 'hidden'} border-0 p-2 text-xs transform transition-transform\" style=\"color: unset; transform: ${state.collapsed ? 'rotate(-90deg)' : 'rotate(0deg)'};\"\n onclick=\"toggleCollapse('${id}')\">\n ${hasChildren ? icons.arrowDown : ''}\n </button>\n <button \n aria-label=\"toggle layer visibility\"\n name=\"toggle layer visibility\"\n class=\"bg-transparent border-0 p-2 text-xs\" style=\"color: unset;\"\n onclick=\"toggleVisible('${id}')\">\n ${isVisible ? icons.eye : icons.eyeSlash}\n </button>\n </span>\n <button \n aria-label=\"toggle selected layer\"\n name=\"toggle selected layer\"\n class=\"bg-transparent border-0 p-2 text-xs w-full text-right capitalize\" \n style=\"color: unset;\"\n onclick=\"selectedBlock('${id}')\"\n >\n ${name}\n </button>\n </code>\n ${hasChildren ? `<ul class=\"mt-1 mb-1 -ml-4 ${state.collapsed ? 'hidden' : ''}\">` + children.map(child => renderLayer(child)).join('') + '</ul>' : ''}\n </li>\n `;\n\n return listItem;\n }\n\n return project.html.map(layer => renderLayer(layer)).join('');\n}\nfunction Inspector() {\n let iframe = document.getElementById('iframe');\n if (!iframe) return;\n if (data.editorNavState) return;\n\n // Helper to find common layer tags & attributes\n function findCommonLayerTags(layers) {\n if (layers.length === 0) return [];\n const firstTag = layers[0].tag;\n return layers.every(layer => layer.tag === firstTag) ? layers : [];\n }\n function findCommonAttributes(layers) {\n if (layers.length === 0) return {};\n const attributeCounts = {};\n\n layers.forEach(layer => {\n Object.keys(layer.props || {}).forEach(prop => {\n attributeCounts[prop] = (attributeCounts[prop] || 0) + 1;\n });\n });\n\n return Object.fromEntries(\n Object.entries(attributeCounts)\n .filter(([key, count]) => count === layers.length)\n .map(([key]) => [key, layers[0].props[key]])\n );\n }\n\n // Constants and helper functions\n let buttonItemClass = 'bg-transparent border-0 text-[.6rem] p-0 m-0 h-full capitalize text-left';\n const buttonAddItemClass = 'bg-transparent border-0 p-0 text-right';\n const RenameOrDeleteButtonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full capitalize text-center p-2 border';\n const selectClass = 'm-0 w-auto rounded-md capitalize text-[.6rem]';\n const selectStyle = 'padding: .5rem; background-image: none;';\n const inputClass = 'w-auto rounded-md normal-case text-[.6rem]';\n const inputStyle = 'height: auto; margin: 0; padding: .4rem;';\n const textareaClass = 'w-auto rounded-md normal-case text-[.6rem] resize-vertical';\n const textareaStyle = 'height: 5rem; margin: 0; padding: .4rem;';\n const mediaClass = 'cursor-pointer w-full my-2';\n\n const languages = {\n 'en': 'English', // English\n 'es': 'Espa\u00F1ol', // Spanish\n 'zh': '\u4E2D\u6587', // Chinese\n 'hi': '\u0939\u093F\u0928\u094D\u0926\u0940', // Hindi\n 'ar': '\u0627\u0644\u0639\u0631\u0628\u064A\u0629', // Arabic\n 'fr': 'Fran\u00E7ais', // French\n 'ru': '\u0420\u0443\u0441\u0441\u043A\u0438\u0439', // Russian\n 'pt': 'Portugu\u00EAs', // Portuguese\n 'de': 'Deutsch', // German\n 'ja': '\u65E5\u672C\u8A9E', // Japanese\n 'ko': '\uD55C\uAD6D\uC5B4', // Korean\n 'it': 'Italiano', // Italian\n 'tr': 'T\u00FCrk\u00E7e', // Turkish\n 'vi': 'Ti\u1EBFng Vi\u1EC7t', // Vietnamese\n 'pl': 'Polski' // Polish\n };\n const sizeOptions = {\n Phones: {\n '320x480': 'iPhone 3GS',\n '375x667': 'iPhone 6/7/8',\n '414x736': 'iPhone 6/7/8 Plus',\n '375x812': 'iPhone X/XS/11 Pro',\n '414x896': 'iPhone XR/XS Max/11/11 Pro Max',\n '360x640': 'Samsung Galaxy S5',\n '360x740': 'Samsung Galaxy S8+',\n '1440x3200': 'Samsung Galaxy S21 Ultra',\n '1080x2340': 'Google Pixel 5',\n '1080x2400': 'OnePlus 8 Pro',\n '1440x3200': 'Xiaomi Mi 11 Ultra',\n '1644x3840': 'Sony Xperia 1 III'\n },\n Tablets: {\n '2048x2732': 'iPad Pro 12.9\" (3rd/4th Gen)',\n '2388x1668': 'iPad Pro 11\" (1st/2nd/3rd Gen)',\n '2736x1824': 'Microsoft Surface Pro 7',\n '2800x1752': 'Samsung Galaxy Tab S7+',\n '2560x1600': 'Huawei MatePad Pro',\n '2000x1200': 'Lenovo Tab P11 Pro',\n '1920x1200': 'Amazon Fire HD 10',\n '1536x2048': 'iPad Air (3rd Gen)',\n '1620x2160': 'iPad Air (4th Gen)',\n '1620x2160': 'iPad 10.2\" (8th Gen)',\n '1668x2224': 'iPad Pro 11\" (2021)'\n },\n Desktops: {\n '3840x2160': '4K UHD (3840x2160)',\n '2560x1440': 'WQHD (2560x1440)',\n '1920x1080': 'Full HD (1920x1080)',\n '1366x768': 'Laptop (1366x768)',\n '3440x1440': 'UltraWide QHD (3440x1440)',\n '5120x2880': '5K Retina (5120x2880)',\n '1280x800': 'MacBook (1280x800)',\n '2560x1600': 'MacBook Pro (2560x1600)',\n '2880x1800': 'MacBook Pro Retina (2880x1800)'\n }\n };\n const booleanAttributes = [\n \"autofocus\", \"autoplay\", \"checked\", \"controls\", \"default\", \"defer\", \"disabled\", \n \"formnovalidate\", \"hidden\", \"loop\", \"multiple\", \"muted\", \"novalidate\", \"open\", \n \"contenteditable\", \"readonly\", \"required\", \"reversed\", \"scoped\", \"seamless\", \"selected\"\n ];\n const inputTypes = [\n \"button\", \"checkbox\", \"color\", \"date\", \"datetime-local\", \"email\", \"file\", \"hidden\",\n \"image\", \"month\", \"number\", \"password\", \"radio\", \"range\", \"reset\", \"search\", \"submit\",\n \"tel\", \"text\", \"time\", \"url\", \"week\"\n ];\n const numberAttributes = [\"max\", \"maxlength\", \"min\", \"minlength\", \"multiple\", \"range\", \"size\", \"step\"];\n const stringAttributes = [\"accept\", \"acceptCharset\", \"accesskey\", \"action\", \"align\", \"alt\", \"autocomplete\", \"form\", \"list\", \"pattern\", \"placeholder\", \"src\", \"tabindex\", \"title\", \"type\", \"usemap\", \"value\"];\n const selectedLayers = data.selectedLayerIds.map(id => findLayerById(id, project.html).layer).filter(layer => layer);\n const commonLayerTag = findCommonLayerTags(selectedLayers);\n const commonAttributes = findCommonAttributes(selectedLayers);\n const cssFixedValueProperties = data.cssFixedValueProperties;\n const cssRangedValueProperties = data.cssRangedValueProperties;\n const boxElements = data.boxElements;\n const textElements = data.textElements;\n const breakElements = data.breakElements;\n\n // Simplify rendering functions\n function renderBooleanAttribute(name, value) {\n return `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${name}')\">${name}</button>\n <button class=\"${buttonItemClass} p-1 text-right\" style=\"color: unset;\" onclick=\"removeProp('${name}')\">${value ? 'Yes' : 'No'}</button>\n `;\n }\n function renderInput(name, type, value, min, max, step) {\n return `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${name}')\">${name}</button>\n <input \n class=\"${inputClass}\" \n style=\"${inputStyle}\" \n type=\"${type}\" \n placeholder=\"Use {n} for incremental text\" \n value=\"${value}\" ${min ? `min=\"${min}\"` : ''} ${max ? `max=\"${max}\"` : ''} ${step ? `step=\"${step}\"` : ''} \n oninput=\"updateElement('props', '${name}', this.value, true)\" \n onfocus=\"saveState()\" \n onblur=\"saveState()\"\n />\n `;\n }\n function renderTextarea(name, value) {\n return `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${name}')\">${name}</button>\n <textarea \n class=\"${textareaClass}\" \n style=\"${textareaStyle}\" \n placeholder=\"Use {n} for incremental text\" \n oninput=\"updateElement('props', '${name}', this.value, true)\" \n onfocus=\"saveState()\" \n onblur=\"saveState()\"/>${value}</textarea>\n `;\n }\n \n // Functions to generate HTML sections\n const generatePreviewSize = () => {\n if (data.selectedSize === \"none\") getIframeClientSize();\n \n let html = `\n <div class=\"grid grid-cols-1 gap-1 items-center pt-2 capitalize\">\n <label for=\"selectedSize\" aria-label=\"resize canvas\" class=\"m-auto\">\n <select id=\"selectedSize\" onchange=\"resizeCanvas(this.value)\" class=\"${selectClass}\" style=\"padding: .5rem; background-image: none;\">\n <option value=\"none\" ${data.selectedSize === \"none\" ? 'selected' : ''}>Select Size</option>\n ${Object.keys(sizeOptions).map(group => `\n <optgroup label=\"${group}\">\n ${Object.keys(sizeOptions[group]).map(option => `\n <option value=\"${option}\" ${data.selectedSize === option ? 'selected' : ''}>${sizeOptions[group][option]}</option>\n `).join('')}\n </optgroup>\n `).join('')}\n </select>\n </label>\n </div>\n\n <div class=\"grid grid-cols-2 gap-1 items-center pt-2 capitalize text-center\">\n <span class=\"text-[.6rem] capitalize text-left\">width</span>\n <input \n id=\"iframeWidth\"\n class=\"w-auto rounded-md normal-case text-[.6rem]\" \n style=\"height: auto; margin: 0; padding: .4rem;\" \n type=\"number\" \n min=\"0\" \n step=\"1\" \n value=\"${data.iframeWidth}\"\n oninput=\"\n if (this.value && document.getElementById('iframeHeight').value) {\n resizeCanvas(this.value + 'x' + document.getElementById('iframeHeight').value);\n }\n \">\n <span class=\"text-[.6rem] capitalize text-left\">height</span>\n <input \n id=\"iframeHeight\"\n class=\"w-auto rounded-md normal-case text-[.6rem]\" \n style=\"height: auto; margin: 0; padding: .4rem;\" \n type=\"number\" \n min=\"0\" \n step=\"1\" \n value=\"${data.iframeHeight}\"\n oninput=\"\n if (document.getElementById('iframeWidth').value && this.value) {\n resizeCanvas(document.getElementById('iframeWidth').value + 'x' + this.value);\n }\n \">\n <span class=\"text-[.6rem] capitalize text-left ${data.selectedSize === 'none' ? 'hidden' : ''}\">rotate</span>\n <button \n aria-label=\"rotate canvas\"\n name=\"rotate canvas\" \n class=\"bg-transparent border-0 p-0 px-2 text-center mr-1 ${data.selectedSize === 'none' ? 'hidden' : ''}\"\n style=\"color: unset;\"\n onclick=\"rotateCanvas()\">\n ${icons.rotate}\n </button>\n </div>\n\n <div class=\"grid grid-cols-2 gap-1 items-center pt-2 capitalize\">\n <span class=\"text-[.6rem] h-full capitalize\">language</span>\n <select onchange=\"project.lang = this.value;\" class=\"${selectClass}\" style=\"padding: .5rem; background-image: none;\">\n ${Object.keys(languages).map(lang => `\n <option value=\"${lang}\">${languages[lang]}</option>\n `).join('')}\n </select>\n </div>\n `\n return html;\n };\n\n const processStyles = (stylesObject, selectorPrefix, key, detect = null) => {\n let styles = '';\n\n // Regular expression to detect color values\n const colorRegex = /^(#[0-9a-f]{3,6}|rgb?(.+)|hsl?(.+)|hsv?(.+))$/i;\n \n // List of properties that should use a textarea\n const complexProperties = [\n 'background', 'background-image', 'box-shadow', 'text-shadow',\n 'border', 'border-radius', 'border-image', 'filter', 'transform'\n ];\n\n Object.keys(stylesObject).forEach(prop => {\n let value = stylesObject[prop];\n let selector = `${selectorPrefix}['${prop}']`;\n\n // Check if the property has fixed values\n const predefinedValues = cssFixedValueProperties[prop];\n if (predefinedValues) {\n let options = predefinedValues.map(val => \n `<option value=\"${val}\" ${val === value ? 'selected' : ''}>${val}</option>`\n ).join('');\n\n styles += `\n <button \n class=\"${buttonItemClass.split('capitalize').join('')}\" \n style=\"color: unset;\" \n onclick=\"\n styleModal('${key}', '${prop}', '${value}'${detect ? `, '${detect}'` : ''});\n \">\n ${prop}\n </button>\n <select class=\"${selectClass}\" style=\"${selectStyle}\" onchange=\"${selector} = this.value; saveState();\">\n ${options}\n </select>`;\n } else if (cssRangedValueProperties[prop]) {\n const { min, max, step } = cssRangedValueProperties[prop];\n \n // Ensure valueParts and remainingParts are arrays, even if value is null or doesn't match\n const valueParts = value ? value.match(/-?\\d*\\.?\\d+([a-z%]+|)/g) || [] : [];\n const remainingParts = value ? value.split(/-?\\d*\\.?\\d+[a-z%]*/g).filter(Boolean) || [] : [];\n\n styles += `\n <button \n class=\"${buttonItemClass.split('capitalize').join('')}\" \n style=\"color: unset;\" \n onclick=\"\n styleModal('${key}', '${prop}', '${value}'${detect ? `, '${detect}'` : ''});\n \">\n ${prop}\n </button>\n <div class=\"grid gap-1 items-center capitalize\">`;\n \n valueParts.forEach((part, index) => {\n const numericValue = parseFloat(part);\n const unitMatch = part.match(/[a-zA-Z%]+/);\n const unit = unitMatch ? unitMatch[0] : '';\n\n // Check if the current part contains `var()`\n const gridColsClass = part.includes('var(') ? 'grid-cols-1' : 'grid-cols-2';\n \n // Define valid units based on property\n let validUnits;\n switch (prop) {\n case 'scale':\n case 'rotate':\n case 'translate':\n case 'perspective':\n case 'skew':\n validUnits = ['', 'deg', 'rad']; // Example units for transform properties\n break;\n case 'animation-duration':\n case 'transition-duration':\n validUnits = ['', 'ms', 's']; // Example units for duration properties\n break;\n default:\n validUnits = ['', 'px', '%', 'rem', 'em', 'vh', 'lvh', 'svh', 'dvh', 'vw', 'lvw', 'svw', 'dvw', 'ex', 'ch', 'vmin', 'vmax', 'cm', 'mm', 'in', 'pt', 'pc']; // Default units\n break;\n }\n\n // Add a grid class per input field\n styles += `<div class=\"grid ${gridColsClass} gap-1\">`;\n \n const selectElement = `<select class=\"${selectClass}\" style=\"${selectStyle}\" onchange=\"\n const valueParts = ${selectorPrefix}['${prop}'].split(' ');\n valueParts[${index}] = '${numericValue}' + this.value;\n ${selector} = valueParts.join(' ')${remainingParts.length > 0 ? ` + ' ' + '${remainingParts.join(' ')}'` : ''};\n saveState();\n \">${validUnits.map(unitOption => \n `<option value=\"${unitOption}\" ${unitOption === unit ? 'selected' : ''}>${unitOption}</option>`\n ).join('')}</select>`;\n \n const rangeElement = `<input class=\"${inputClass}\" style=\"${inputStyle}\" \n type=\"range\" min=\"${min}\" max=\"${max}\" step=\"${step}\" value=\"${numericValue}\"\n oninput=\"const valueParts = ${selectorPrefix}['${prop}'].split(' ');\n valueParts[${index}] = this.value + '${unit}';\n ${selector} = valueParts.join(' ')${remainingParts.length > 0 ? ` + ' ' + '${remainingParts.join(' ')}'` : ''};\"\n onfocus=\"saveState();\" onblur=\"saveState();\">`;\n \n styles += `\n <input class=\"${inputClass}\" style=\"${inputStyle}\" \n type=\"number\" min=\"${min}\" max=\"${max}\" step=\"${step}\" value=\"${numericValue}\"\n oninput=\"const valueParts = ${selectorPrefix}['${prop}'].split(' ');\n valueParts[${index}] = this.value + '${unit}';\n ${selector} = valueParts.join(' ')${remainingParts.length > 0 ? ` + ' ' + '${remainingParts.join(' ')}'` : ''};\"\n onfocus=\"saveState();\" onblur=\"saveState();\">\n ${prop === 'opacity' || prop === 'z-index' ? rangeElement : selectElement}\n </div>`;\n });\n \n // Add a backup text input for cases where units aren't defined\n if (remainingParts.length > 0 || valueParts.length === 0) {\n styles += `\n <input class=\"${inputClass}\" style=\"${inputStyle}\" \n type=\"text\" value=\"${value}\" \n oninput=\"${selector} = this.value;\" onfocus=\"saveState()\" onblur=\"saveState()\">\n `;\n }\n \n styles += `</div>`;\n } else if (complexProperties.includes(prop)) {\n // Use a textarea for complex multi-line properties\n styles += `\n <button \n class=\"${buttonItemClass.split('capitalize').join('')}\" \n style=\"color: unset;\" \n onclick=\"\n styleModal('${key}', '${prop}', '${value}'${detect ? `, '${detect}'` : ''});\n \">\n ${prop}\n </button>\n <textarea class=\"${textareaClass}\" style=\"${textareaStyle}\"\n oninput=\"${selector} = this.value;\" onfocus=\"saveState()\" onblur=\"saveState()\">${value}</textarea>`;\n } else {\n // Check if the property is a color property\n const isColorProperty = colorRegex.test(value) || value === null;\n const fallbackColor = isColorProperty && value === null ? '#000000' : value;\n\n styles += `\n <button \n class=\"${buttonItemClass.split('capitalize').join('')}\" \n style=\"color: unset;\" \n onclick=\"\n styleModal('${key}', '${prop}', '${value}'${detect ? `, '${detect}'` : ''});\n \">\n ${prop}\n </button>\n <input \n class=\"${inputClass}\" \n style=\"${inputStyle}\" \n type=\"text\" \n value=\"${fallbackColor}\" \n ${isColorProperty ? `data-iscolor=\"${value}\"` : ''}\n oninput=\"${selector} = this.value;\" \n onfocus=\"saveState()\" \n onblur=\"saveState()\"\n />`;\n }\n });\n\n return styles;\n };\n\n const generateRootVariablesSection = () => {\n let styles = '';\n \n // Regular expression to detect color values\n const colorRegex = /^(#[0-9a-f]{3,6}|rgb?(.+)|hsl?(.+)|hsv?(.+))$/i;\n\n // Iterate over each root variable\n Object.keys(project.css.rootVariables).forEach(key => {\n const value = project.css.rootVariables[key];\n const selector = `project.css.rootVariables['${key}']`;\n\n // Determine input type based on value\n const isColor = colorRegex.test(value);\n const isNumeric = !isNaN(parseFloat(value)) && isFinite(value);\n\n let inputType = 'text';\n let inputStyle = 'height: auto; margin: 0; padding: .4rem;';\n\n if (isNumeric) inputType = 'number';\n\n // Use processStyles function to generate styles for root variables\n styles += `\n <button \n class=\"${buttonItemClass.split('capitalize').join('')}\" \n style=\"color: unset;\" \n onclick=\"modifyRootVariable('${key}')\">\n ${key}\n </button>\n <input \n class=\"${inputClass}\"\n style=\"${inputStyle}\" \n type=\"${inputType}\" \n value=\"${value}\"\n ${isColor ? `data-iscolor=\"${value}\"` : ''}\n oninput=\"${selector} = this.value;\" \n onfocus=\"saveState()\" \n onblur=\"saveState()\"\n />\n `;\n });\n\n return `\n <div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.rootVarsCollapsed = !data.rootVarsCollapsed\">\n root css variables\n </button>\n <button \n class=\"${buttonAddItemClass}\" \n style=\"color: unset;\" \n onclick=\"\n const id = '--' + generateId();\n project.css.rootVariables[id] = '';\n \">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 ${data.rootVarsCollapsed ? 'hidden' : ''}\">\n ${styles}\n </div>\n </div>\n `;\n };\n\n const generateStylesSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let targets = null;\n let styles = '';\n let activeStyle = null;\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n });\n }\n \n let obj = null;\n if (data.breakpointKey) {\n obj = project.css.breakpoints[`${data.breakpointKey}px`];\n } else {\n obj = project.css.styles;\n }\n\n // Render targets within style\n let dropdown = `<select \n class=\"${selectClass}\" \n style=\"${selectStyle}\"\n onchange=\"\n data.stylesPropTarget = this.value;\n \"\n >\n <option value=\"base\" ${data.stylesPropTarget === 'base' ? 'selected' : ''}>base</option>\n <option value=\"pseudos\" ${data.stylesPropTarget === 'pseudos' ? 'selected' : ''}>pseudos</option>\n </select>`;\n\n let buttonClass = '';\n Object.keys(obj).forEach(key => {\n if (data.stylesTarget && data.stylesTarget === key) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n activeStyle = key;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full capitalize text-left';\n activeStyle = null;\n }\n\n styles += `<button \n aria-label=\"set style target to ${key}\"\n name=\"set style target to ${key}\"\n class=\"${buttonClass.split('capitalize').join('')} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\" ${activeStyle ? '' : 'style=\"color: unset;\"'}\n onclick=\"data.stylesTarget = this.textContent.toString();\">${key}</button>`;\n });\n\n return `<div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.stylesCollapsed = !data.stylesCollapsed;\">\n styles\n </button>\n <button \n class=\"${buttonAddItemClass}\" \n style=\"color: unset;\"\n onclick=\"addStyle();\">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-1 gap-1 items-center py-2 capitalize ${data.stylesCollapsed ? 'hidden' : ''}\">\n ${data.stylesTarget ? `<div class=\"grid grid-cols-1 gap-1 items-center py-2\">\n ${dropdown}\n </div>` : ''}\n <div class=\"grid grid-cols-2 gap-1 items-center py-2\">\n ${styles}\n </div>\n ${data.stylesTarget ? `<div class=\"grid grid-cols-2 gap-1 items-center pb-2 capitalize\">\n <button \n aria-label=\"rename the ${data.stylesTarget} style\"\n name=\"rename the ${data.stylesTarget} style\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-green-600 border-green-800\" : \"text-green-700 border-green-400\"}\"\n onclick=\"renameStyleTarget('${data.stylesTarget}');\">\n rename\n </button>\n <button \n aria-label=\"delete the ${data.stylesTarget} style\"\n name=\"delete the ${data.stylesTarget} style\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-red-600 border-red-800\" : \"text-red-600 border-red-400\"}\"\n onclick=\"deleteStyleTarget('${data.stylesTarget}');\">\n delete\n </button>\n </div>` : ''}\n ${data.stylesTarget ? `<div class=\"grid grid-cols-2 gap-1 items-center capitalize\">\n <button \n aria-label=\"duplicate the ${data.stylesTarget} style\"\n name=\"duplicate the ${data.stylesTarget} style\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\"\n style=\"color: unset;\"\n onclick=\"duplicateStyle();\">\n duplicate\n </button>\n <button \n aria-label=\"de-select the ${data.stylesTarget} style\"\n name=\"de-select the ${data.stylesTarget} style\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\"\n style=\"color: unset;\"\n onclick=\"\n data.stylesTarget = null;\n data.breakpointKey = null;\n clearAllSelections();\n \">\n de-select\n </button>\n </div>` : ''}\n </div>\n </div>`;\n };\n\n const generatePseudosSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let styles = '';\n let selector = '';\n let activeStyle = null;\n let buttonClass = '';\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n if (!data.stylesTarget) {\n data.stylesTarget = layer.style;\n }\n });\n }\n\n // Target specific pseudo style\n if (data.stylesTarget && data.stylesPropTarget === \"pseudos\") {\n if (project.css.styles[data.stylesTarget].pseudos) {\n Object.keys(project.css.styles[data.stylesTarget].pseudos).forEach(index => {\n selector = project.css.styles[data.stylesTarget].pseudos[index].selector;\n if (data.pseudosSelector === selector) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n activeStyle = true;\n data.pseudosSelectorIndex = index;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full text-left';\n activeStyle = null;\n }\n styles += `<button \n class=\"${buttonClass.split('capitalize').join('')} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\" ${activeStyle ? '' : 'style=\"color: unset;\"'}\n onclick=\"data.pseudosSelector = this.textContent;\">${selector}</button>`;\n });\n }\n }\n\n return `<div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.stylePseudosCollapsed = !data.stylePseudosCollapsed;\">\n pseudos\n </button>\n <button class=\"${buttonAddItemClass}\" style=\"color: unset;\" onclick=\"addPseudo('${data.stylesTarget}')\">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-1 gap-1 items-center py-2 capitalize ${data.stylePseudosCollapsed ? 'hidden' : ''}\">\n ${data.stylesTarget ? `<div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n ${styles}\n </div>` : ''}\n ${data.pseudosSelector && data.stylesTarget ? `\n <div class=\"grid grid-cols-2 gap-1 items-center pb-2 capitalize\">\n <button \n aria-label=\"Rename pseudo for ${data.breakpointKey}px\"\n name=\"rename pseudo for ${data.breakpointKey}px\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-green-600 border-green-800\" : \"text-green-700 border-green-400\"}\"\n onclick=\"renamePseudo('${data.pseudosSelector}');\">\n Rename\n </button>\n <button \n aria-label=\"Delete pseudo for ${data.breakpointKey}px\"\n name=\"delete pseudo for ${data.breakpointKey}px\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-red-600 border-red-800\" : \"text-red-600 border-red-400\"}\"\n onclick=\"deletePseudo();\">\n Delete\n </button>\n </div>\n ` : ''}\n ${data.pseudosSelector && data.stylesTarget ? `\n <div class=\"grid grid-cols-1 gap-1 items-center capitalize\">\n <button \n aria-label=\"De-select the ${data.stylesTarget} style\"\n name=\"de-select the ${data.stylesTarget} style\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\"\n style=\"color: unset;\"\n onclick=\"data.pseudosSelector = null;\">\n De-select\n </button>\n </div>\n ` : ''}\n </div>\n </div>`;\n };\n\n const generateStylePropertiesSection = () => {\n let styles = '';\n let styleKey = null;\n\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n styleKey = layer.style;\n });\n }\n\n let obj = project.css.styles;\n const detectStylesPropTarget = ['base', 'pseudos'];\n if (detectStylesPropTarget.includes(data.stylesPropTarget)) {\n Object.keys(obj).forEach(key => {\n if (styleKey === key || data.stylesTarget == key) {\n if (data.stylesPropTarget === 'pseudos') {\n const index = data.pseudosSelectorIndex;\n if (data.pseudosSelector) {\n if (obj[key].pseudos[index].styles) {\n styles += processStyles(obj[key].pseudos[index].styles, `project.css.styles['${key}'].pseudos['${index}'].styles`, key);\n }\n }\n } else {\n if (obj[key][data.stylesPropTarget]) {\n styles += processStyles(obj[key][data.stylesPropTarget], `project.css.styles['${key}']['${data.stylesPropTarget}']`, key);\n }\n }\n }\n });\n }\n\n let stylesObj = 'project.css.styles[data.stylesTarget][data.stylesPropTarget]';\n if (data.stylesPropTarget === \"pseudos\") {\n stylesObj = 'project.css.styles[data.stylesTarget][data.stylesPropTarget][data.pseudosSelectorIndex].styles';\n }\n\n return `<div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.stylePropsCollapsed = !data.stylePropsCollapsed;\">\n style properties\n </button>\n <button \n class=\"${buttonAddItemClass}\" \n style=\"color: unset;\" \n onclick=\"addStylePropModal('${data.stylesTarget}', ${stylesObj});\">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize ${data.stylePropsCollapsed ? 'hidden' : ''}\">\n ${styles}\n </div>\n </div>`;\n };\n\n const generateBreakpointsSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let styles = '';\n let activeStyle = null;\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n if (!data.stylesTarget) {\n data.stylesTarget = layer.style;\n }\n });\n }\n\n let buttonClass = '';\n if (data.stylesTarget && project.css.breakpoints) {\n Object.keys(project.css.breakpoints).forEach(key => {\n if (data.breakpointKey === key.split('px').join('')) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n activeStyle = key;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full capitalize text-center';\n activeStyle = null;\n }\n styles += `<button \n aria-label=\"target breakpoint styles for ${key}\"\n name=\"target breakpoint styles for ${key}\"\n class=\"${buttonClass.split('text-left').join('text-center')} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\" ${activeStyle ? '' : 'style=\"color: unset;\"'}\n onclick=\"\n data.breakpointKey = this.textContent;\n \">${key.split('px').join('')}</button>`;\n });\n }\n\n return `<div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.breakpointsCollapsed = !data.breakpointsCollapsed;\">\n breakpoints\n </button>\n <button \n class=\"${buttonAddItemClass}\" \n style=\"color: unset;\"\n onclick=\"addBreakpoint();\">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-1 gap-1 items-center py-2 capitalize ${data.breakpointsCollapsed ? 'hidden' : ''}\">\n ${data.stylesTarget && project.css.breakpoints ? `<div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n ${styles}\n </div>` : ''}\n ${data.breakpointKey && data.stylesTarget && project.css.breakpoints ? `<div class=\"grid grid-cols-2 gap-1 items-center pb-2 capitalize\">\n <button \n aria-label=\"rename breakpoint styles for ${data.breakpointKey}px\"\n name=\"rename breakpoint styles for ${data.breakpointKey}px\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-green-600 border-green-800\" : \"text-green-700 border-green-400\"}\"\n onclick=\"renameBreakpointKey('${data.breakpointKey}px');\">\n rename\n </button>\n <button \n aria-label=\"delete breakpoint styles for ${data.breakpointKey}px\"\n name=\"delete breakpoint styles for ${data.breakpointKey}px\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-red-600 border-red-800\" : \"text-red-600 border-red-400\"}\"\n onclick=\"deleteBreakpointKey('${data.breakpointKey}px');\">\n delete\n </button>\n </div>` : ''}\n ${data.breakpointKey && data.stylesTarget && project.css.breakpoints ? `<div class=\"grid grid-cols-1 gap-1 items-center capitalize\">\n <button \n aria-label=\"de-select the ${data.stylesTarget} style\"\n name=\"de-select the ${data.stylesTarget} style\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\"\n style=\"color: unset;\"\n onclick=\"data.breakpointKey = null;\">\n de-select\n </button>\n </div>` : ''}\n </div>\n </div>`;\n };\n\n const generateBreakpointStylesSection = () => {\n if (!data.breakpointKey) return;\n let styles = '';\n let styleKey = null;\n\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n styleKey = layer.style;\n });\n }\n\n let obj = project.css.breakpoints[`${data.breakpointKey}px`];\n\n const detectStylesPropTarget = ['base', 'pseudos'];\n if (detectStylesPropTarget.includes(data.stylesPropTarget)) {\n Object.keys(obj).forEach(key => {\n if (styleKey === key || data.stylesTarget == key) {\n if (data.stylesPropTarget === 'pseudos') {\n const index = data.pseudosSelectorIndex;\n if (data.pseudosSelector) {\n if (obj[key].pseudos[index].styles) {\n styles += processStyles(obj[key].pseudos[index].styles, `project.css.breakpoints['${data.breakpointKey}px']['${key}'].pseudos['${index}'].styles`, key, 'breakpoints');\n }\n }\n } else {\n if (obj[key][data.stylesPropTarget]) {\n styles += processStyles(obj[key][data.stylesPropTarget], `project.css.breakpoints['${data.breakpointKey}px']['${key}']['${data.stylesPropTarget}']`, key, 'breakpoints');\n }\n }\n }\n });\n }\n\n return `<div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.breakpointStylePropsCollapsed = !data.breakpointStylePropsCollapsed;\">\n breakpoint styles\n </button>\n <button class=\"${buttonAddItemClass}\" style=\"color: unset;\" onclick=\"addStylePropModal('${styleKey}', project.css.breakpoints['${data.breakpointKey}px'][data.stylesTarget][data.stylesPropTarget]);\">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize ${data.breakpointStylePropsCollapsed ? 'hidden' : ''}\">\n ${styles}\n </div>\n </div>`;\n };\n\n const generateAnimationsSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let styles = '';\n let activeStyle = null;\n let buttonClass = '';\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n if (!data.stylesTarget) {\n data.stylesTarget = layer.style;\n }\n });\n }\n\n if (data.stylesTarget && project.css.animations) {\n Object.keys(project.css.animations).forEach(key => {\n if (data.animationTarget === key) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n buttonClass = buttonClass.split('capitalize').join('normal-case');\n activeStyle = key;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full normal-case text-center';\n activeStyle = null;\n }\n styles += `<button \n aria-label=\"target animation styles for ${key}\"\n name=\"target animation styles for ${key}\"\n class=\"${buttonClass.split('text-left').join('text-center')} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\" ${activeStyle ? '' : 'style=\"color: unset;\"'}\n onclick=\"\n data.animationTarget = this.textContent;\n \">${key}</button>`;\n });\n }\n\n return `<div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.animationsCollapsed = !data.animationsCollapsed;\">\n animations\n </button>\n <button \n class=\"${buttonAddItemClass}\" \n style=\"color: unset;\"\n onclick=\"addAnimation();\">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-1 gap-1 items-center py-2 capitalize ${data.animationsCollapsed ? 'hidden' : ''}\">\n ${data.stylesTarget && project.css.animations ? `<div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n ${styles}\n </div>` : ''}\n ${data.animationTarget && project.css.animations ? `<div class=\"grid grid-cols-2 gap-1 items-center pb-2 capitalize\">\n <button \n aria-label=\"rename animation for ${data.animationTarget}\"\n name=\"rename animation for ${data.animationTarget}\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-green-600 border-green-800\" : \"text-green-700 border-green-400\"}\"\n onclick=\"renameAnimation('${data.animationTarget}');\">\n rename\n </button>\n <button \n aria-label=\"delete animation for ${data.animationTarget}\"\n name=\"delete animation for ${data.animationTarget}\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-red-600 border-red-800\" : \"text-red-600 border-red-400\"}\"\n onclick=\"deleteAnimation('${data.animationTarget}');\">\n delete\n </button>\n </div>` : ''}\n ${data.animationTarget && project.css.animations ? `<div class=\"grid grid-cols-1 gap-1 items-center capitalize\">\n <button \n aria-label=\"de-select the ${data.animationTarget} animation\"\n name=\"de-select the ${data.animationTarget} animation\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\"\n style=\"color: unset;\"\n onclick=\"data.animationTarget = null;\">\n de-select\n </button>\n </div>` : ''}\n </div>\n </div>`;\n };\n\n const generateAnimationPropertySection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let content = '';\n let keyframes = '';\n let activeStyle = null;\n if (commonLayerTag) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n const layer = commonLayerTag[layerKey];\n if (!data.stylesTarget) {\n data.stylesTarget = layer.style;\n }\n });\n }\n\n // Generate keyframes buttons\n if (data.animationTarget && project.css.animations && project.css.animations[data.animationTarget].keyframes) {\n Object.keys(project.css.animations[data.animationTarget].keyframes).forEach(key => {\n let buttonClass = '';\n if (data.animationKeyframe === key) {\n buttonClass = buttonItemClass.split('bg-transparent border-0').join('');\n isActive = true;\n } else {\n buttonClass = 'bg-transparent text-[.6rem] p-0 m-0 h-full capitalize text-center';\n isActive = null;\n }\n \n keyframes += `<button \n aria-label=\"target keyframe styles for ${key}\"\n name=\"target keyframe styles for ${key}\"\n class=\"${buttonClass.split('text-left').join('text-center')} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\" ${isActive ? '' : 'style=\"color: unset;\"'}\n onclick=\"\n data.animationKeyframe = null;\n data.animationKeyframe = '${key}';\n \">${key}</button>`;\n });\n }\n\n // Generate the styles for the active keyframe\n if (data.animationKeyframe && data.animationTarget && project.css.animations && project.css.animations[data.animationTarget].keyframes) {\n const activeKeyframe = project.css.animations[data.animationTarget].keyframes[data.animationKeyframe];\n content += processStyles(activeKeyframe, `project.css.animations['${data.animationTarget}'].keyframes['${data.animationKeyframe}']`, data.animationKeyframe, 'animations');\n }\n\n return `<div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.animationsCollapsed = !data.animationsCollapsed;\">\n animation keyframes\n </button>\n <button \n class=\"${buttonAddItemClass}\" \n style=\"color: unset;\"\n onclick=\"addKeyFrame();\">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-1 gap-1 items-center py-2 capitalize ${data.animationsCollapsed ? 'hidden' : ''}\">\n ${data.animationTarget && project.css.animations ? `<div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n ${keyframes}\n </div>` : ''}\n ${data.animationKeyframe && project.css.animations && project.css.animations[data.animationTarget].keyframes ? `<div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n ${content}\n </div>` : ''}\n ${data.animationKeyframe && project.css.animations && project.css.animations[data.animationTarget].keyframes ? `<div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button \n aria-label=\"rename the \"${data.animationKeyframe}\" keyframe\"\n name=\"rename the \"${data.animationKeyframe}\" keyframe\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-green-600 border-green-800\" : \"text-green-700 border-green-400\"}\"\n onclick=\"renameKeyFrame('${data.animationKeyframe}');\">\n rename\n </button>\n <button \n aria-label=\"delete the \"${data.animationKeyframe}\" keyframe\"\n name=\"delete the \"${data.animationKeyframe}\" keyframe\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"text-red-600 border-red-800\" : \"text-red-600 border-red-400\"}\"\n onclick=\"deleteKeyFrame('${data.animationKeyframe}');\">\n delete\n </button>\n <button \n aria-label=\"add to the \"${data.animationKeyframe}\" keyframe\"\n name=\"add to the \"${data.animationKeyframe}\" keyframe\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"border-blue-500\" : \"border-blue-400\"}\"\n style=\"color: unset;\"\n onclick=\"addStylePropModal('${data.animationTarget}', project.css.animations[data.animationTarget].keyframes[data.animationKeyframe]);\">\n ${icons.plus}\n </button>\n <button \n aria-label=\"de-select the \"${data.animationKeyframe}\" keyframe\"\n name=\"de-select the \"${data.animationKeyframe}\" keyframe\"\n class=\"${RenameOrDeleteButtonClass} p-2 border ${project.dark ? \"border-gray-700\" : \"border-gray-300\"}\"\n style=\"color: unset;\"\n onclick=\"data.animationKeyframe = null;\">\n de-select\n </button>\n </div>` : ''}\n </div>\n </div>`;\n };\n\n const generateAttributesSection = () => {\n if (selectedLayers.length === 0) return '';\n \n // Display common attributes\n let attributes = \"\",\n attributeTag = \"\",\n svgImage = \"\";\n if (commonLayerTag || selectedLayers.length === 1) {\n Object.keys(commonLayerTag).forEach(layerKey => {\n attributeTag = \"\";\n const layer = commonLayerTag[layerKey];\n const tag = layer.tag;\n \n // block name\n attributeTag += `\n <span class=\"${buttonItemClass}\">Block Name</span>\n <input class=\"${inputClass}\" style=\"${inputStyle}\" type=\"text\" value=\"${layer.name}\" oninput=\"updateElement('name', null, this.value)\" onfocus=\"saveState()\" onblur=\"saveState()\"/>\n `;\n \n // style reference\n attributeTag += `\n <span class=\"${buttonItemClass}\">Style Ref</span>\n <input class=\"${inputClass}\" style=\"${inputStyle}\" type=\"text\" value=\"${layer.style ? layer.style : ''}\" onfocus=\"saveState()\" onblur=\"updateElement('style', null, this.value); saveState();\"/>\n `;\n \n // Determine block type and render the appropriate options\n let options = \"\";\n if (boxElements.includes(tag)) {\n options = boxElements.map(element => \n `<option value=\"${element}\" ${element === tag ? 'selected' : ''}>${element}</option>`\n ).join('');\n } else if (textElements.includes(tag)) {\n options = textElements.map(element => \n `<option value=\"${element}\" ${element === tag ? 'selected' : ''}>${element}</option>`\n ).join('');\n } else if (breakElements.includes(tag)) {\n options = breakElements.map(element => \n `<option value=\"${element}\" ${element === tag ? 'selected' : ''}>${element}</option>`\n ).join('');\n } else {\n options = `<option value=\"${tag}\" selected=\"true\">${tag}</option>`;\n }\n \n if (options) {\n attributeTag += `\n <span class=\"${buttonItemClass}\">tag</span>\n <select class=\"${selectClass}\" style=\"${selectStyle}\" onchange=\"saveState(); updateElement('tag', null, this.value); saveState();\">\n ${options}\n </select>`;\n }\n \n if (tag === \"svg\" && selectedLayers.length === 1) {\n const elm = document.createElement(\"template\");\n elm.innerHTML = json2html(layer);\n const element = elm.content.firstElementChild;\n \n if (element) {\n if (element.hasAttribute(\"style\")) element.removeAttribute('style');\n element.removeAttribute(\"width\");\n element.removeAttribute(\"height\");\n element.setAttribute(\"class\", mediaClass);\n element.setAttribute(\"onclick\", `updateSvgMedia('${layer.id}', 'svg')`);\n \n svgImage += `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\">svg</button>\n <div class=\"grid grid-cols-1 place-items-center\">\n ${element.outerHTML}\n </div>\n `;\n }\n \n elm.remove();\n }\n });\n }\n \n if (Object.keys(commonAttributes).length > 0 || selectedLayers.length === 1) {\n svgImage ? attributes = svgImage + \"\" : attributes = \"\";\n const layer = selectedLayers[0];\n const tag = layer.tag;\n\n if (tag === \"audio\") {\n attributes += `\n <span class=\"${buttonItemClass.split('cursor-pointer').join('cursor-default')}\" style=\"color: unset;\">Replace Audio</span>\n <div class=\"grid grid-cols-1\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" preserveAspectRatio=\"xMidYMin\" class=\"cursor-pointer w-full my-2 rounded-md\" onclick=\"updateAudioMedia('${layer.id}', 'audio')\">\n <rect width=\"256\" height=\"256\" fill=\"rgb(248,255,247)\"/>\n <g transform=\"translate(128, 128) scale(0.5) translate(-128, -128)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"#13171f\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5\"/>\n </svg>\n </g>\n </svg>\n </div>\n `;\n }\n \n if (layer.props) {\n // Generate the attributes section dynamically based on layer\n Object.keys(commonAttributes).forEach(propKey => {\n let name = propKey;\n const value = commonAttributes[propKey];\n \n const textAreaAttributes = [\"on\", '@', \"x-\", \":\"];\n const lowerPropKey = propKey.toLowerCase();\n \n // Handle different types of attributes\n if (booleanAttributes.includes(name)) {\n attributes += renderBooleanAttribute(propKey, commonAttributes[propKey]);\n } else if (lowerPropKey === \"style\" || lowerPropKey === \"class\") {\n attributes += renderTextarea(propKey, commonAttributes[propKey]);\n } else if (textAreaAttributes.some(attr => lowerPropKey.startsWith(attr))) {\n attributes += renderTextarea(propKey, commonAttributes[propKey]);\n } else if (tag === \"input\") {\n if (name === \"required\") {\n attributes += renderBooleanAttribute(propKey, commonAttributes[propKey]);\n }\n \n let nodeType = \"text\";\n for (let numAttr of numberAttributes) {\n if (name === numAttr) {\n nodeType = \"number\";\n }\n }\n for (let string of stringAttributes) {\n if (name === string) {\n nodeType = \"text\";\n }\n }\n if (name === \"value\") {\n for (let inputType of inputTypes) {\n if (layer.props.type) {\n if (layer.props.type === inputType) {\n nodeType = layer.props.type.toLowerCase();\n }\n if (layer.props.type === \"range\") {\n nodeType = \"number\";\n }\n }\n }\n }\n if (name === \"type\") {\n let options = '';\n for (let string of inputTypes) {\n options += `<option class=\"${inputClass}\" value=\"${string}\" ${(value === string ? \"selected\" : \"\")}>${string}</option>`;\n }\n \n attributes += `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${propKey}')\">${propKey}</button>\n <select class=\"${selectClass}\" style=\"${selectStyle}\" onchange=\"updateElement('props', '${propKey}', this.value); saveState();\">\n ${options}\n </select>\n `;\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else if (tag === \"button\") {\n if (name === \"type\") {\n attributes += `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${propKey}')\">${propKey}</button>\n <select class=\"${selectClass}\" style=\"${selectStyle}\" onchange=\"updateElement('props', '${propKey}', this.value); saveState();\">\n <option class=\"${inputClass}\" value=\"submit\" ${value === name ? 'selected' : ''}>submit</option>\n <option class=\"${inputClass}\" value=\"reset\" ${value === name ? 'selected' : ''}>reset</option>\n <option class=\"${inputClass}\" value=\"button\" ${value === name ? 'selected' : ''}>button</option>\n </select>\n `;\n } else if (name === \"role\") {\n attributes += renderBooleanAttribute(propKey, commonAttributes[propKey]);\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else if (tag === \"a\") {\n if (name === \"target\") {\n attributes += `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${propKey}')\">${propKey}</button>\n <select class=\"${selectClass}\" style=\"${selectStyle}\" onchange=\"updateElement('props', '${propKey}', this.value); saveState();\">\n <option class=\"${inputClass}\" value=\"_blank\" ${value === name ? 'selected' : ''}>_blank</option>\n <option class=\"${inputClass}\" value=\"_self\" ${value === name ? 'selected' : ''}>_self</option>\n <option class=\"${inputClass}\" value=\"_parent\" ${value === name ? 'selected' : ''}>_parent</option>\n <option class=\"${inputClass}\" value=\"_top\" ${value === name ? 'selected' : ''}>_top</option>\n </select>\n `;\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else if (tag === \"img\") {\n let numTypes = [\"width\", \"height\"];\n if (numTypes.includes(name)) {\n let type = \"text\";\n for (let numType of numTypes) {\n if (name === numType) {\n type = \"number\";\n }\n }\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n } else if (name === \"src\") {\n attributes += `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${propKey}')\">${propKey}</button>\n <div class=\"grid grid-cols-1\">\n <img class=\"${mediaClass}\" src=\"${value}\" onclick=\"updateImageMedia('${layer.id}', 'img')\">\n <input class=\"${inputClass}\" style=\"${inputStyle}\" type=\"text\" value=\"${value}\" oninput=\"updateElement('props', '${propKey}', this.value)\" onfocus=\"saveState()\" onblur=\"saveState()\"/>\n </div>\n `;\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else if (tag === \"svg\") {\n let numTypes = [\"stroke-width\"];\n let type = \"text\";\n for (let numType of numTypes) {\n if (name === numType) {\n type = \"number\";\n }\n }\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n } else if (tag === \"form\") {\n if (name === \"method\") {\n attributes += `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${propKey}')\">${propKey}</button>\n <select class=\"${selectClass}\" style=\"${selectStyle}\" onchange=\"updateElement('props', '${propKey}', this.value); saveState();\">\n <option class=\"${inputClass}\" value=\"GET\" ${value === name ? 'selected' : ''}>GET</option>\n <option class=\"${inputClass}\" value=\"POST\" ${value === name ? 'selected' : ''}>POST</option>\n <option class=\"${inputClass}\" value=\"PUT\" ${value === name ? 'selected' : ''}>PUT</option>\n <option class=\"${inputClass}\" value=\"DELETE\" ${value === name ? 'selected' : ''}>DELETE</option>\n </select>\n `;\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n } else {\n attributes += renderInput(propKey, 'text', commonAttributes[propKey]);\n }\n });\n }\n }\n\n if (Object.keys(commonAttributes).length > 0 || selectedLayers.length >= 0) {\n const layer = selectedLayers[0];\n const tag = layer.tag;\n\n if (\"text\" in layer || layer.text) {\n if (tag === \"style\" || tag === \"script\") {\n attributes += `\n <span class=\"${buttonItemClass}\">text</span>\n <textarea \n class=\"${textareaClass}\" \n style=\"${textareaStyle}\" \n oninput=\"updateElement('text', null, this.value)\" \n onfocus=\"saveState()\" \n onblur=\"saveState()\"/>${layer.text}</textarea>\n `;\n } else {\n attributes += `\n <span class=\"${buttonItemClass}\">text</span>\n <textarea \n class=\"${textareaClass}\" \n style=\"${textareaStyle}\" \n placeholder=\"Use {n} for incremental text\" \n oninput=\"updateElement('text', null, this.value, true)\" \n onfocus=\"saveState()\" \n onblur=\"saveState()\"/>${layer.text}</textarea>\n `;\n }\n }\n }\n \n if (selectedLayers.length > 0) {\n return `<div class=\"border-0 border-b border-solid pb-2 mb-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize\">\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"data.propsCollapsed = !data.propsCollapsed;\">\n attributes\n </button>\n <button class=\"${buttonAddItemClass}\" style=\"color: unset;\" onclick=\"attributesModal();\">\n <svg class=\"w-3\" viewBox=\"0 0 576 512\" style=\"color: unset;\">\n <path fill=\"currentColor\" d=\"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z\"></path>\n </svg>\n </button>\n </div>\n <div class=\"grid grid-cols-2 gap-1 items-center py-2 capitalize ${data.propsCollapsed ? 'hidden' : ''}\">\n ${attributeTag + attributes}\n </div>\n </div>`;\n }\n }\n\n // Combine all sections\n const inspectorHtml = `\n <div>\n ${generatePreviewSize()}\n ${generateRootVariablesSection()}\n ${generateStylesSection()}\n ${data.stylesTarget && data.stylesPropTarget === \"pseudos\" ? generatePseudosSection() : ''}\n ${data.stylesTarget ? generateStylePropertiesSection() : ''}\n ${data.stylesTarget ? generateBreakpointsSection() : ''}\n ${data.breakpointKey ? generateBreakpointStylesSection() : ''}\n ${data.stylesTarget ? generateAnimationsSection() : ''}\n ${data.animationTarget ? generateAnimationPropertySection() : ''}\n ${generateAttributesSection()}\n </div>\n `;\n\n return inspectorHtml;\n}\nfunction editorNav() {\n const buttonClass = \"border-0 bg-transparent py-1\";\n\n return `<button \n aria-label=\"delete layer\"\n name=\"delete layer\" \n class=\"${buttonClass}\"\n style=\"color: unset;\"\n onclick=\"deleteLayers()\"\n >\n ${icons.trash}\n </button>\n <button \n aria-label=\"clone layer\"\n name=\"clone layer\" \n class=\"${buttonClass}\"\n style=\"color: unset;\"\n onclick=\"cloneLayers()\"\n >\n ${icons.clone}\n </button>\n <button \n aria-label=\"cut layer\"\n name=\"cut layer\" \n class=\"${buttonClass}\"\n style=\"color: unset;\"\n onclick=\"cutLayers()\"\n >\n ${icons.cut}\n </button>\n <button \n aria-label=\"copy layer\"\n name=\"copy layer\" \n class=\"${buttonClass}\"\n style=\"color: unset;\"\n onclick=\"copyLayers()\"\n >\n ${icons.copy}\n </button>\n <button \n aria-label=\"paste layer\"\n name=\"paste layer\" \n class=\"${buttonClass}\"\n style=\"color: unset;\"\n onclick=\"pasteLayers()\"\n >\n ${icons.paste}\n </button>`;\n}\nwindow.Modal = {\n render({\n large,\n title = \"Are you sure you want to proceed?\",\n content,\n CloseLabel,\n ConfirmLabel,\n onLoad,\n onClose,\n onConfirm\n }) {\n // if (!options) return false;\n const hClass = \"text-lg font-thin m-0\";\n const buttonClass = \"text-xs w-auto px-3 py-2 m-0 capitalize rounded-md\";\n const svgClass = \"w-3\";\n const times = `<svg class=\"${svgClass}\" viewBox=\"0 0 384 512\">\n <path \n fill=\"currentColor\" \n d=\"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"/>\n </svg>`;\n\n const html = `<article class=\"${large ? 'flex flex-col h-3/4' : ''} rounded-md\">\n <header class=\"${large ? 'flex-none' : ''} flex justify-between items-center\">\n <h1 class=\"${hClass}\">${title}</h1>\n <button class=\"${buttonClass} bg-transparent border-0\" style=\"color: unset;\" aria-label=\"Close\">\n ${times}\n </button>\n </header>\n <main class=\"font-thin ${large ? 'flex-grow' : ''}\">\n ${content ? content : ''}\n </main>\n <footer ${large ? 'class=\"flex-none\"' : ''}>\n <button class=\"${buttonClass} bg-transparent border ${project.dark ? 'border-gray-600' : 'border-gray-200'}\" style=\"color: unset;\" aria-label=\"Close\" onclick=\"this.closest('dialog').remove()\">${CloseLabel ? CloseLabel : 'close'}</button>\n ${onConfirm ? `<button class=\"${buttonClass}\" aria-label=\"Confirm\">${ConfirmLabel ? ConfirmLabel : 'confirm'}</button>` : ''}\n </footer>\n </article>`;\n\n const modal = document.createElement('dialog');\n modal.open = true;\n modal.innerHTML = html;\n\n document.body.appendChild(modal);\n if (onLoad && typeof onLoad === 'function') {\n onLoad();\n }\n\n const timesBtn = modal.querySelector('header button');\n const closeBtn = modal.querySelector('footer button:first-child');\n const confirmBtn = modal.querySelector('footer button:last-child');\n\n // Confirm handler function\n timesBtn.onclick = function() {\n if (onClose && typeof onClose === 'function') {\n onClose();\n }\n document.body.removeChild(modal);\n }\n closeBtn.onclick = function() {\n if (onClose && typeof onClose === 'function') {\n onClose();\n }\n document.body.removeChild(modal);\n }\n confirmBtn.onclick = function() {\n if (onConfirm && typeof onConfirm === 'function') {\n onConfirm();\n }\n document.body.removeChild(modal);\n }\n }\n}\nwindow.Blocks = () => {\n const btnClass = `bg-transparent p-4 text-xs cursor-pointer capitalize`;\n\n let blockItem = '', componentItem = '';\n\n data.blocks.items.forEach((block, index) => {\n blockItem += `\n <button \n class=\"${btnClass} border border-solid text-center rounded-md ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\"\n style=\"color: unset;\"\n onclick=\"addBlock(data.blocks.items[${index}].code);\"\n >\n ${block.type}\n </button>`;\n });\n\n project.components.forEach((component, index) => {\n componentItem += `\n <div class=\"flex justify-between w-full h-full border border-solid rounded-md ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <button \n class=\"bg-transparent border-0 text-xs capitalize m-0 py-4 px-2\"\n style=\"color: unset;\"\n onclick=\"addBlock(project.components[${index}].code);\"\n >\n ${component.name}\n </button>\n\n <button \n class=\"bg-transparent border-0 text-xs capitalize m-0 py-4 px-2\"\n style=\"color: unset;\"\n onclick=\"deleteComponent('${index}');\"\n >\n ${icons.trash}\n </button>\n </div>`;\n });\n\n let modalContent = `<nav class=\"select-none items-center\" style=\"padding: var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal); margin: var(--pico-spacing);\">\n <label for='j44mb4rqj' class=\"font-thin cursor-pointer\">${data.blockWrap ? \"Blocks will be parent's of selected layers.\" : \"Blocks are added as children\"}</label>\n <input id='j44mb4rqj' type=\"checkbox\" role=\"switch\" ${data.blockWrap ? 'checked=\"true\" ' : ''}onchange=\"\n data.blockWrap = !data.blockWrap;\n let result = data.blockWrap ? \\`Blocks will be parent's of selected layers.\\` : \\`Blocks are added as children\\`;\n this.previousElementSibling.textContent = result;\n \">\n </nav>\n \n <section class=\"select-none font-thin\" style=\"padding: var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal); margin: var(--pico-spacing);\">\n <div class=\"p-0 m-0\">\n <details class=\"flex items-center mb-0\" ${data.blocks.visible ? 'open' : ''} ontoggle=\"\n const detailsElement = this;\n data.blocks.visible = detailsElement.hasAttribute('open');\n \">\n <summary>\n ${data.blocks.name}\n </summary>\n <code class=\"grid grid-cols-2 gap-2 mb-0 bg-transparent\">\n ${blockItem}\n\n <button \n class=\"${btnClass} ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\"\n style=\"color: unset;\"\n onclick=\"customCode()\"\n >\n Custom\n </button>\n </code>\n </details>\n </div>\n </section>\n \n <section class=\"select-none font-thin\" style=\"padding: var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal); margin: var(--pico-spacing);\">\n <div class=\"p-0 m-0\">\n <details class=\"flex items-center mb-0\" ${data.componentsVisible ? 'open' : ''} ontoggle=\"\n const detailsElement = this;\n data.blocks.visible = detailsElement.hasAttribute('open');\n \">\n <summary>\n Components\n </summary>\n <code class=\"grid grid-cols-2 gap-2 mb-0 bg-transparent\">\n ${componentItem}\n\n <button \n class=\"${btnClass} ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\"\n style=\"color: unset;\"\n onclick=\"addComponent()\"\n >\n ${icons.plus}\n </button>\n </code>\n </details>\n </div>\n </section>`;\n\n // Render the modal\n Modal.render({\n title: `Add A Block`,\n content: modalContent\n });\n}\nwindow.App = {\n initialRender: true,\n render(container) {\n if (data.doNotRender) return;\n const buttonClass = \"border-0 bg-transparent py-1\";\n // Calculate zoom transform based on viewport size and iframe size\n const size = data.selectedSize;\n let viewportWidth, viewportHeight;\n const previewElm = document.getElementById('previewElm');\n if (document.getElementById('previewElm')) {\n viewportWidth = previewElm.clientWidth;\n viewportHeight = previewElm.clientHeight;\n }\n let [width, height] = size.split('x').map(Number);\n \n const html = `\n <div>\n <div class=\"absolute inset-y-0 left-0 flex flex-col text-center justify-between px-2 py-4 overflow-auto\">\n ${LeftMenubar()}\n </div>\n \n <!-- flexbox for panels and preview -->\n <div class=\"flex flex-col flex-col-reverse md:flex-row absolute inset-y-0 right-0 left-16 bottom-0 overflow-hidden\">\n <div class=\"flex-[2] md:flex-[1] relative w-full md:w-96 h-full text-sm overflow-auto ${project.activePanel ? `border-0 border-l border-solid ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}` : 'hidden'}\">\n <div class=\"absolute inset-0 flex flex-col ${project.activePanel === 'layers' ? '' : 'hidden'}\">\n <ul class=\"flex-grow p-2 m-0 overflow-auto\">\n ${LayerTree()}\n </ul>\n <div class=\"flex-none border-0 border-y md:border-b-0 border-solid ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"flex justify-between\">\n <div class=\"flex justify-between\">\n <button\n aria-label=\"undo\"\n name=\"undo\"\n class=\"${buttonClass} md:hidden\"\n style=\"color: unset;\"\n onclick=\"undo()\"\n ${data.historyIndex > 0 ? '' : 'disabled=\"true\"'}>\n ${icons.undo}\n </button>\n <button\n aria-label=\"toggle ctrl key\"\n name=\"toggle ctrl key\"\n class=\"${buttonClass} ${data.cmdKey ? 'text-blue-500' : ''}\" \n style=\"${data.cmdKey ? '' : 'color: unset;'}\"\n onclick=\"data.cmdKey = !data.cmdKey;\">\n <span class=\"text-[.75rem]\">ctrl</span>\n </button>\n <button\n aria-label=\"toggle shift key\"\n name=\"toggle shift key\"\n class=\"${buttonClass} ${data.shiftKey ? 'text-blue-500' : ''}\"\n style=\"${data.shiftKey ? '' : 'color: unset;'}\"\n onclick=\"data.shiftKey = !data.shiftKey;\">\n ${icons.shift}\n </button>\n </div>\n <div class=\"md:hidden flex justify-between whitespace-nowrap overflow-auto ${data.selectedLayerIds.length === 0 ? 'hidden' : ''}\">\n ${editorNav()}\n </div>\n <div class=\"flex justify-between\">\n <button \n aria-label=\"open command palette\"\n name=\"open command palette\"\n class=\"${buttonClass} ${data.cmdKey ? 'text-blue-500' : ''}\" \n style=\"${data.cmdKey ? '' : 'color: unset;'}\"\n onclick=\"commandPalette();\">\n ${icons.commandKey}\n </button>\n <button\n aria-label=\"redo\"\n name=\"redo\"\n class=\"${buttonClass} md:hidden\"\n style=\"color: unset;\"\n onclick=\"redo()\"\n ${data.historyIndex < data.history.length - 1 ? '' : 'disabled=\"true\"'}>\n ${icons.redo}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"absolute inset-0 flex flex-col ${project.activePanel === 'inspector' ? '' : 'hidden'}\">\n <ul class=\"flex-grow p-2 m-0 overflow-auto\">\n ${Inspector()}\n </ul>\n <div class=\"flex-none border-0 border-y md:border-b-0 border-solid ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"flex justify-between\">\n <div>\n <button\n aria-label=\"undo\"\n name=\"undo\"\n class=\"${buttonClass} md:hidden\"\n style=\"color: unset;\"\n onclick=\"undo()\"\n ${data.historyIndex > 0 ? '' : 'disabled=\"true\"'}>\n ${icons.undo}\n </button>\n </div>\n <div>\n <button\n aria-label=\"toggle ctrl key\"\n name=\"toggle ctrl key\"\n class=\"${buttonClass} ${data.cmdKey ? 'text-blue-500' : ''}\" \n style=\"${data.cmdKey ? '' : 'color: unset;'}\"\n onclick=\"data.cmdKey = !data.cmdKey;\">\n <span class=\"text-[.75rem]\">ctrl</span>\n </button>\n <button\n aria-label=\"toggle shift key\"\n name=\"toggle shift key\"\n class=\"${buttonClass} ${data.shiftKey ? 'text-blue-500' : ''}\"\n style=\"${data.shiftKey ? '' : 'color: unset;'}\"\n onclick=\"data.shiftKey = !data.shiftKey;\">\n ${icons.shift}\n </button>\n <button\n aria-label=\"redo\"\n name=\"redo\"\n class=\"${buttonClass} md:hidden\"\n style=\"color: unset;\"\n onclick=\"redo()\"\n ${data.historyIndex < data.history.length - 1 ? '' : 'disabled=\"true\"'}>\n ${icons.redo}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex-[2] w-full overflow-hidden flex\">\n <div class=\"relative w-full h-full border-0 border-x border-solid overflow-auto p-4 ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"absolute inset-0 flex flex-col\">\n <div class=\"flex-grow overflow-hidden h-full\">\n <div id=\"previewElm\" class=\"relative grid grid-cols-1 align-center items-center w-full h-full\">\n <iframe\n id=\"iframe\"\n title=\"iframe title\"\n class=\"bg-white ${data.selectedSize !== 'none' ? `border border-solid ${project.dark ? \"border-gray-800\" : \"border-gray-200\"} shadow-2xl shadow-blue-500` : ''}\"\n style=\"${data.selectedSize === 'none' ? 'width: 100%; height: 100%' : `\n width: ${width}px;\n height: ${height}px;\n transform: scale(${Math.min(viewportWidth / width, viewportHeight / height)});\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -${height / 2}px;\n margin-left: -${width / 2}px;`}\"\n allow=\"accelerometer *; bluetooth *; camera *; encrypted-media *; display-capture *; geolocation *; gyroscope *; microphone *; midi *; clipboard-read *; clipboard-write *; serial *; xr-spatial-tracking *\"\n allowfullscreen=\"true\"\n allowpaymentrequest=\"true\"\n allowtransparency=\"true\"\n sandbox=\"allow-downloads allow-forms allow-modals allow-pointer-lock allow-popups-to-escape-sandbox allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation\"\n loading=\"lazy\"\n ></iframe>\n\n <span \n id=\"iframeClientSize\" \n class=\"hidden opacity-0 transition-opacity duration-300 absolute top-0 right-0 ${project.dark ? 'bg-gray-800' : 'bg-gray-200'} p-1 text-xs\">\n ${data.iframeSize}\n </span>\n </div>\n </div>\n <div class=\"hidden md:block flex-none border-0 border-y md:border-b-0 border-solid ${project.dark ? \"border-gray-800\" : \"border-gray-200\"}\">\n <div class=\"flex justify-between\">\n <div>\n <button\n aria-label=\"undo\"\n name=\"undo\"\n class=\"${buttonClass}\"\n style=\"color: unset;\"\n onclick=\"undo()\"\n ${data.historyIndex > 0 ? '' : 'disabled=\"true\"'}>\n ${icons.undo}\n </button>\n </div>\n \n <div class=\"flex justify-between whitespace-nowrap overflow-auto ${data.selectedLayerIds.length === 0 ? 'hidden' : ''}\">\n ${editorNav()}\n </div>\n\n <button\n aria-label=\"redo\"\n name=\"redo\"\n class=\"${buttonClass}\"\n style=\"color: unset;\"\n onclick=\"redo()\"\n ${data.historyIndex < data.history.length - 1 ? '' : 'disabled=\"true\"'}>\n ${icons.redo}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <div\n class=\"flex-[1] hidden ${project.activePanel === 'layers' ? 'lg:block' : ''} w-full md:w-96 h-full p-2 text-sm overflow-auto\">\n <div class=\"h-full\">\n ${Inspector()}\n </div>\n </div>\n </div>\n\n ${Menu()}\n ${Settings()}\n </div>`;\n \n const element = document.querySelector(container);\n if (!element) return;\n\n // Create a new temporary element to compare\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n if (doc.body.innerHTML.trim() === html.trim()) return;\n if (App.initialRender) {\n element.innerHTML = html;\n renderPreview(true);\n App.initialRender = false;\n return false;\n }\n\n const oldPickers = document.querySelectorAll('.pcr-app');\n if (oldPickers) oldPickers.forEach(picker => picker.remove());\n\n // Compare and update only the changed parts\n const currentDoc = element.firstElementChild;\n const newDoc = doc.body.firstElementChild;\n diffNodes(currentDoc, newDoc);\n\n // Select all elements with the data-color-picker attribute\n const pickers = document.querySelectorAll('[data-iscolor]');\n\n if (pickers) {\n pickers.forEach((picker, index) => {\n // Extract the initial color value from the data-iscolor attribute\n const initialColor = picker.getAttribute('data-iscolor');\n \n const pickr = Pickr.create({\n el: picker,\n theme: 'nano', // or 'monolith', or 'nano'\n default: initialColor,\n inline: true,\n components: {\n // Main components\n preview: true,\n opacity: true,\n hue: true,\n \n // Input / output Options\n interaction: {\n input: true\n }\n }\n });\n\n // Set the initial color\n pickr.setColor(initialColor);\n \n // Update color display and state on color change\n pickr.on('show', () => {\n data.doNotRender = true;\n })\n .on('change', color => {\n const colorString = color.toHEXA().toString();\n \n // Get the oninput attribute value\n const onInputCode = pickers[index].getAttribute('oninput');\n \n if (onInputCode) {\n // Replace 'this.value' with the actual color string\n const updatedCode = onInputCode.replace(/this.value/g, `\"${colorString}\"`);\n \n // Create a new function using the Function constructor and execute it\n const func = new Function(updatedCode);\n func(); // Execute the dynamically created function\n }\n \n // Apply color\n pickr.applyColor();\n })\n .on('hide', () => {\n data.doNotRender = null;\n pickr.applyColor();\n App.render('#app');\n })\n });\n }\n }\n}\n\n// Inspector functions\nwindow.modifyRootVariable = id => {\n let modalContent = `<div class=\"p-4grid grid-cols-1 gap-4\">\n <div class=\"grid grid-cols-2 gap-4\">\n <div>\n <div class=\"mb-2 text-left\">Name: </div>\n <input \n id=\"m7t85jokv\" \n type=\"text\" \n value=\"${id}\" \n placeholder=\"-- added automatically\" \n onkeydown=\"\n if (event.key === 'Enter') {\n document.getElementById('hbo1luvti').focus();\n }\n \">\n </div>\n <div>\n <div class=\"mb-2 text-right\">Value: </div>\n <input \n id=\"hbo1luvti\" \n type=\"text\" \n value=\"${project.css.rootVariables[id]}\" \n placeholder=\"variable value\" \n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n <select \n id=\"c15au9cn8\" \n onchange=\"\n document.getElementById('hbo1luvti').setAttribute('type', this.value);\n \"\n >\n <option value=\"text\">text</option>\n <option value=\"number\">number</option>\n <option value=\"color\">color</option>\n </select>\n </div>\n </div>\n <div class=\"text-center\">\n <button \n class=\"w-full border-red-400 text-red-400 rounded-md py-2 mt-4 bg-transparent font-thin\" \n onclick=\"\n saveState();\n delete project.css.rootVariables['${id}']; \n saveState();\n document.querySelector('dialog[open]').querySelector('header > button:last-child').onclick();\n \">\n Delete Variable\n </button>\n </div>\n </div>`;\n\n Modal.render({\n title: `Are you sure you want to rename the \"${id.substring(2)}\" root variable?`,\n content: modalContent,\n onLoad() {\n document.getElementById('m7t85jokv').focus();\n document.getElementById('m7t85jokv').select();\n },\n onConfirm() {\n let newValue = document.getElementById('hbo1luvti').value;\n let name = document.getElementById('m7t85jokv').value;\n // Convert the first character to lowercase\n name = name.charAt(0).toLowerCase() + name.slice(1);\n\n if (name) {\n if (!name.startsWith('--')) {\n name = '--' + name;\n }\n // Convert the first character after '--' to lowercase\n let newName = name.substring(0, 2) + name.charAt(2).toLowerCase() + name.slice(3);\n \n if (project.css.rootVariables[newName]) {\n // Update existsing value\n project.css.rootVariables[newName] = newValue;\n App.render('#app');\n } else {\n saveState();\n\n // Clone the style object\n project.css.rootVariables[newName] = JSON.parse(JSON.stringify(project.css.rootVariables[`${id}`]));\n \n // Update the variable with the new value\n project.css.rootVariables[newName] = newValue; // Assign the new value to the variable\n\n // Now delete the old style object\n delete project.css.rootVariables[`${id}`];\n localStorage.setItem('Polyrise', JSON.stringify(project));\n\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to rename variable`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.addStyle = () => {\n let modalContent = `\n <input \n id=\"vvrh9nxwk\" \n type=\"text\" \n value=\".${generateId()}\"\n placeholder=\"Style name/target...\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add A Style`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n document.getElementById('vvrh9nxwk').select();\n },\n onConfirm() {\n let value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n // Convert the first character to lowercase\n value = value.charAt(0).toLowerCase() + value.slice(1);\n \n let obj = project.css.styles;\n if (data.breakpointKey && data.stylesTarget) {\n obj = project.css.breakpoints[`${data.breakpointKey}px`];\n }\n\n if (obj[`${value}`]) {\n Modal.render({\n title: `Unable to add style!`,\n content: \"Style already exists!\"\n });\n } else {\n obj[value] = {\n \"base\": {},\n \"pseudos\": []\n };\n }\n } else {\n Modal.render({\n title: `Unable to add style`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.duplicateStyle = () => {\n let modalContent = `\n <input \n id=\"vvrh9nxwk\" \n type=\"text\" \n value=\".${generateId()}\"\n placeholder=\"Style name/target...\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Name your style`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n document.getElementById('vvrh9nxwk').select();\n },\n onConfirm() {\n let value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n // Convert the first character to lowercase\n value = value.charAt(0).toLowerCase() + value.slice(1);\n \n let obj = project.css.styles;\n if (data.breakpointKey && data.stylesTarget) {\n obj = project.css.breakpoints[`${data.breakpointKey}px`];\n }\n\n if (obj[`${value}`]) {\n Modal.render({\n title: `Unable to add style!`,\n content: \"Style already exists!\"\n });\n } else {\n obj[value] = obj[data.stylesTarget];\n }\n } else {\n Modal.render({\n title: `Unable to add style`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.addStylePropModal = (id, obj) => {\n // Define default values for each property type\n const defaultValues = data.defaultValues;\n\n // Sort and categorize properties\n const rootVariables = Object.keys(project.css.rootVariables).sort();\n const fixedValueProperties = Object.keys(data.cssFixedValueProperties).sort();\n const rangedValueProperties = Object.keys(data.cssRangedValueProperties).sort();\n\n // Generate options grouped by category\n const rootVariableOptions = rootVariables.map(prop => `\n <option value=\"${prop}\">${prop}</option>\n `).join('');\n\n const fixedValuePropertyOptions = fixedValueProperties.map(prop => `\n <option value=\"${prop}\">${prop}</option>\n `).join('');\n\n const rangedValuePropertyOptions = rangedValueProperties.map(prop => `\n <option value=\"${prop}\">${prop}</option>\n `).join('');\n\n const modalContent = `\n <div class=\"p-4\">\n <label class=\"block mb-2\">Select Property Type:</label>\n <select id=\"property-type\" class=\"w-full rounded-md capitalize text-[.6rem]\">\n <option value=\"\">-- Select a property --</option>\n <optgroup label=\"Root Variables\">\n ${rootVariableOptions}\n </optgroup>\n <optgroup label=\"Fixed Value Properties\">\n ${fixedValuePropertyOptions}\n </optgroup>\n <optgroup label=\"Ranged Value Properties\">\n ${rangedValuePropertyOptions}\n </optgroup>\n </select>\n <div id=\"property-details-section\" class=\"mt-4\">\n <div id=\"unit-section\" style=\"display: none;\">\n <label class=\"block mb-2 mt-4\">Select Unit:</label>\n <select id=\"property-unit\" class=\"w-full rounded-md capitalize text-[.6rem]\">\n <!-- Options will be dynamically updated -->\n </select>\n </div>\n </div>\n <input id=\"ool1zyibs\" type=\"text\" placeholder=\"Type css property here...\" onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \"/>\n </div>\n ${data.canUseQuickCommands ? `<div class=\"text-center text-[.6rem]\">\n You can also apply styles using <a href=\"https://tailwindcss.com/\" target=\"_blank\">tailwind</a> classes as quick commands!\n </div>` : ''}`;\n\n Modal.render({\n title: `Add New Style to \"${id}\"`,\n content: modalContent,\n onLoad() {\n document.getElementById('ool1zyibs').focus();\n const propertyTypeSelect = document.getElementById('property-type');\n const unitSelect = document.getElementById('property-unit');\n const unitSection = document.getElementById('unit-section');\n\n function updatePropertyDetails(selectedType) {\n unitSelect.innerHTML = '';\n\n if (data.cssRangedValueProperties[selectedType]) {\n unitSection.style.display = noUnitProperties.includes(selectedType) ? 'none' : 'block';\n\n if (selectedType.startsWith('animation')) {\n unitOptions.animation.forEach(unit => {\n unitSelect.innerHTML += `<option value=\"${unit}\">${unit}</option>`;\n });\n } else if (transformUnits.includes(selectedType)) {\n unitOptions.transform.forEach(unit => {\n unitSelect.innerHTML += `<option value=\"${unit}\">${unit}</option>`;\n });\n } else {\n unitOptions.default.forEach(unit => {\n unitSelect.innerHTML += `<option value=\"${unit}\">${unit}</option>`;\n });\n }\n } else if (data.cssFixedValueProperties[selectedType]) {\n unitSection.style.display = 'none';\n } else {\n unitSection.style.display = 'none';\n }\n }\n\n propertyTypeSelect.onchange = function() {\n const selectedType = this.value;\n updatePropertyDetails(selectedType);\n document.getElementById('ool1zyibs').value = selectedType;\n };\n },\n onConfirm() {\n let propertyTypeInput = document.getElementById('ool1zyibs').value.trim();\n const unit = document.getElementById('property-unit') ? document.getElementById('property-unit').value : '';\n const noUnit = ['opacity', 'z-index'];\n const cssQuickCommands = data.cssQuickCommands;\n \n // Normalize the input\n const properties = propertyTypeInput.split(',').map(prop => prop.trim());\n \n properties.forEach(propertyString => {\n let [propertyType, userDefinedValue] = propertyString.split('=').map(str => str.trim());\n propertyType = propertyType.toLowerCase();\n \n // Check if propertyType is a Tailwind quick command\n if (Object.keys(cssQuickCommands).includes(propertyType)) {\n const quickCommand = cssQuickCommands[propertyType];\n const quickCommandProperties = quickCommand.split(';').filter(Boolean);\n \n quickCommandProperties.forEach(propertyString => {\n let [quickPropertyType, quickUserDefinedValue] = propertyString.split(':').map(str => str.trim());\n quickPropertyType = quickPropertyType.toLowerCase();\n obj[quickPropertyType] = quickUserDefinedValue;\n });\n } else {\n // Handle custom properties\n let finalValue;\n \n if (userDefinedValue) {\n // Use the user-defined value\n finalValue = userDefinedValue + (unit && !noUnit.includes(propertyType) ? unit : '');\n } else {\n // Use the default value if no value was provided\n const defaultValue = defaultValues[propertyType] || defaultValues['default'];\n finalValue = unit ? `${defaultValue}${unit}` : defaultValue;\n }\n \n // Apply the final value to the property\n if (noUnit.includes(propertyType)) {\n obj[propertyType] = userDefinedValue || \"1\";\n } else {\n obj[propertyType] = finalValue;\n }\n }\n });\n \n saveState();\n } \n });\n}\nwindow.renameStyleTarget = target => {\n let modalContent = `<div class=\"p-4 text-center\">\n <input id=\"lnjvy3iz2\" type=\"text\" placeholder=\"Style name/target...\" onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n </div>`;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${target}\" style?`,\n content: modalContent,\n onLoad() {\n document.getElementById('lnjvy3iz2').focus();\n },\n onConfirm() {\n let value = document.getElementById('lnjvy3iz2').value;\n if (value) {\n // Convert the first character to lowercase\n value = value.charAt(0).toLowerCase() + value.slice(1);\n \n if (project.css.styles[value]) {\n Modal.render({\n title: `Unable to add style!`,\n content: \"Style already exists!\"\n });\n } else if (project.css.styles[`${target}`]) {\n // Remove the storage of the styles target before changing\n data.stylesTarget = null;\n\n // Clone the style object\n project.css.styles[value] = JSON.parse(JSON.stringify(project.css.styles[target]));\n \n // Now delete the old style object\n delete project.css.styles[target];\n\n // Target the new style\n data.stylesTarget = value;\n\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to rename style`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteStyleTarget = target => {\n let modalContent = `<div class=\"p-4 text-center\">You will still be able to undo.</div>`;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${target}\" style?`,\n content: modalContent,\n onConfirm() {\n if (data.stylesTarget) {\n clearStyles(project.html, data.stylesTarget);\n delete project.css.styles[data.stylesTarget];\n data.stylesTarget = null;\n saveState();\n }\n }\n });\n}\nwindow.addBreakpoint = () => {\n let modalContent = `\n <select \n id=\"j6xqh4air\" \n onchange=\"document.getElementById('vvrh9nxwk').value = this.value;\"\n >\n <option value=\"\">none</option>\n <option value=\"640\">sm (640px)</option>\n <option value=\"768\">md (768px)</option>\n <option value=\"1024\">lg (1024px)</option>\n <option value=\"1280\">xl (1280px)</option>\n <option value=\"1536\">2xl (1536px)</option>\n </select>\n <input \n id=\"vvrh9nxwk\" \n type=\"number\" \n placeholder=\"Breakpoint size here\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('header > button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add A Breakpoint`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n },\n onConfirm() {\n const value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n if (project.css.breakpoints[`${value}px`]) {\n Modal.render({\n title: `Unable to add breakpoint!`,\n content: \"Breakpoint already exists!\"\n });\n } else {\n project.css.breakpoints[`${value}px`] = {};\n project.css.breakpoints[`${value}px`][`${data.stylesTarget}`] = {\n \"base\": {},\n \"pseudos\": []\n };\n }\n } else {\n Modal.render({\n title: `Unable to add breakpoint`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.renameBreakpointKey = size => {\n let modalContent = `<div class=\"p-4 text-center\">\n <input id=\"mow5ep6l7\" type=\"number\" placeholder=\"Style name/target...\" onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n </div>`;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${size}\" style?`,\n content: modalContent,\n onLoad() {\n document.getElementById('mow5ep6l7').focus();\n },\n onConfirm() {\n const value = document.getElementById('mow5ep6l7').value;\n if (value) {\n if (project.css.breakpoints[`${value}px`]) {\n Modal.render({\n title: `Unable to rename breakpoint key!`,\n content: \"Key already exists!\"\n });\n } else {\n // Remove the storage of the styles target before changing\n data.breakpointKey = null;\n\n // Clone the style object\n project.css.breakpoints[`${value}px`] = JSON.parse(JSON.stringify(project.css.breakpoints[size]));\n \n // Now delete the old style object\n delete project.css.breakpoints[size];\n }\n } else {\n Modal.render({\n title: `Unable to rename breakpoint key`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteBreakpointKey = size => {\n let modalContent = `<div class=\"p-4 text-center\">You will still be able to undo.</div>`;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${size}\" style?`,\n content: modalContent,\n onConfirm() {\n if (size in project.css.breakpoints) {\n data.breakpointKey = null;\n delete project.css.breakpoints[size];\n saveState();\n }\n }\n });\n}\nwindow.addAnimation = () => {\n let modalContent = `\n <input \n id=\"vvrh9nxwk\" \n type=\"text\" \n placeholder=\"Animation name here....\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add An Animation`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n },\n onConfirm() {\n let value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n // Convert the first character to lowercase\n value = value.charAt(0).toLowerCase() + value.slice(1);\n if (project.css.animations[`${value}`]) {\n Modal.render({\n title: `Unable to add animation!`,\n content: \"Animation already exists!\"\n });\n } else {\n project.css.animations[value] = {\n \"keyframes\": {}\n };\n project.css.animations[value].keyframes = {\n \"0%\": {},\n \"100%\": {}\n };\n }\n } else {\n Modal.render({\n title: `Unable to add animation`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.renameAnimation = name => {\n let modalContent = `<div class=\"p-4 text-center\">\n <input id=\"mow5ep6l7\" type=\"text\" placeholder=\"Animation name here...\" onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n </div>`;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${name}\" animation?`,\n content: modalContent,\n onLoad() {\n document.getElementById('mow5ep6l7').focus();\n },\n onConfirm() {\n const value = document.getElementById('mow5ep6l7').value;\n if (value) {\n if (project.css.animations[value]) {\n Modal.render({\n title: `Unable to rename animation!`,\n content: \"Animation name already exists!\"\n });\n } else {\n // Remove the storage of the styles target before changing\n data.animationTarget = null;\n\n // Clone the style object\n project.css.animations[value] = JSON.parse(JSON.stringify(project.css.animations[name]));\n \n // Now delete the old style object\n delete project.css.animations[name];\n\n // Make the new name the target\n data.animationTarget = value;\n }\n } else {\n Modal.render({\n title: `Unable to rename animation`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteAnimation = name => {\n let modalContent = `<div class=\"p-4 text-center\">You will still be able to undo.</div>`;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${name}\" animation?`,\n content: modalContent,\n onConfirm() {\n if (data.animationKeyframe) data.animationKeyframe = null;\n // Remove the storage of the styles target before changing\n data.animationTarget = null;\n data.animationTarget = null;\n delete project.css.animations[name];\n App.render(\"#app\");\n }\n });\n}\nwindow.addKeyFrame = () => {\n if (!data.animationTarget) return;\n let modalContent = `\n <input \n id=\"vvrh9nxwk\" \n type=\"text\" \n placeholder=\"From, To, 0%, 50%, 100%, etc:\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add An Animation`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n },\n onConfirm() {\n const value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n if (project.css.animations[data.animationTarget].keyframes[`${value}`]) {\n Modal.render({\n title: `Unable to add keyframe!`,\n content: \"Keyframe already exists!\"\n });\n } else {\n project.css.animations[data.animationTarget].keyframes[`${value}`] = {};\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to add keyframe`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.renameKeyFrame = name => {\n let modalContent = `<div class=\"p-4 text-center\">\n <input id=\"mow5ep6l7\" type=\"text\" placeholder=\"From, To, 0%, 50%, 100%, etc:\" onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n </div>`;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${name}\" keyframe?`,\n content: modalContent,\n onLoad() {\n document.getElementById('mow5ep6l7').focus();\n },\n onConfirm() {\n const value = document.getElementById('mow5ep6l7').value;\n if (value) {\n if (project.css.animations[data.animationTarget].keyframes[value]) {\n Modal.render({\n title: `Unable to rename keyframe!`,\n content: \"Animation keyframe already exists!\"\n });\n } else {\n // Remove the storage of the styles target before changing\n data.animationKeyframe = null;\n\n // Clone the style object\n project.css.animations[data.animationTarget].keyframes[value] = JSON.parse(JSON.stringify(project.css.animations[data.animationTarget].keyframes[name]));\n \n // Now delete the old style object\n delete project.css.animations[data.animationTarget].keyframes[name];\n\n // Make the new name the target\n data.animationKeyframe = value;\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to rename keyframe key`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteKeyFrame = name => {\n let modalContent = `<div class=\"p-4 text-center\">You will still be able to undo.</div>`;\n \n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${name}\" keyframe?`,\n content: modalContent,\n onConfirm() {\n if (data.animationKeyframe) data.animationKeyframe = null;\n // Remove the storage of the styles target before changing\n data.animationKeyframe = null;\n delete project.css.animations[data.animationTarget].keyframes[name];\n saveState();\n App.render(\"#app\");\n }\n });\n}\nwindow.addToKeyframe = () => {\n if (!data.animationTarget || !data.animationKeyframe) return;\n let modalContent = `\n <input \n id=\"vvrh9nxwk\" \n type=\"text\" \n placeholder=\"From, To, 0%, 50%, 100%, etc:\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n `;\n \n // Render the modal\n Modal.render({\n title: `Add keyframe property`,\n content: modalContent,\n onLoad() {\n document.getElementById('vvrh9nxwk').focus();\n },\n onConfirm() {\n const value = document.getElementById('vvrh9nxwk').value;\n if (value) {\n if (project.css.animations[data.animationTarget].keyframes[`${value}`]) {\n Modal.render({\n title: `Unable to add keyframe!`,\n content: \"Keyframe already exists!\"\n });\n } else {\n project.css.animations[data.animationTarget].keyframes[value] = {};\n saveState();\n }\n } else {\n Modal.render({\n title: `Unable to add keyframe`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deleteStyleProp = (id, prop, e, detect = null) => {\n let obj = null;\n if (detect) {\n if (detect === \"breakpoints\") {\n obj = project.css.breakpoints[`${data.breakpointKey}px`][id][data.stylesPropTarget];\n }\n if (detect === \"animations\") {\n obj = project.css.animations[data.animationTarget].keyframes[data.animationKeyframe]\n }\n } else {\n obj = project.css.styles[id][data.stylesPropTarget];\n }\n // Delete the property\n if (prop in obj) delete obj[`${prop}`];\n saveState();\n\n // Remove the modal\n e.closest('dialog[open]').remove();\n}\nwindow.clearStyles = (layers, query, callback) => {\n // first delete the style object\n if (project.css.styles[query]) {\n delete project.css[query];\n }\n\n // Track whether we found and cleared the styles in any layer\n let found = false;\n\n // then let's remove the style from layers\n for (const layer of layers) {\n if (layer.style === query) {\n layer.style = \"\";\n found = true;\n };\n // Recurse through child layers\n if (layer.children && layer.children.length > 0) {\n clearStyles(layer.children, query, () => {\n found = true;\n });\n }\n // If we processed any layers, renderPreview and invoke the callback\n if (found) {\n if (typeof callback === 'function') {\n callback();\n }\n }\n }\n}\nwindow.styleModal = (id, prop, currentValue, detect = null) => {\n const cssFixedValueProperties = data.cssFixedValueProperties;\n\n let detected = null;\n if (detect) detected = detect;\n\n // Initialize the modal content based on the property type\n let modalContent = '';\n\n if (cssFixedValueProperties[prop]) {\n // Handle fixed values\n const options = cssFixedValueProperties[prop].map(val => `\n <option value=\"${val}\" ${val === currentValue ? 'selected' : ''}>${val}</option>\n `).join('');\n\n modalContent = `\n <div class=\"p-4\">\n <label class=\"block mb-2\">Current Value: ${currentValue}</label>\n <select class=\"w-full rounded-md text-[.6rem]\" id=\"new-value\">\n ${options}\n </select>\n </div>`;\n } else {\n // Handle other types of properties (e.g., text) with a single input\n modalContent = `\n <div class=\"p-4\">\n <label class=\"block mb-2\">Current Value: ${currentValue}</label>\n <input \n id=\"new-value\"\n class=\"w-full rounded-md text-[.6rem]\" \n type=\"text\" \n value=\"${currentValue}\" \n placeholder=\"Enter new value\" \n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \"/>\n </div>`;\n }\n\n // Add a delete option\n modalContent += `\n <div class=\"p-4 text-center\">\n <button class=\"w-full border-red-400 text-red-400 rounded-md py-2 mt-4 bg-transparent font-thin\" \n onclick=\"deleteStyleProp('${id}', '${prop}', this${detected ? `, '${detected}'` : '' })\">Delete Property</button>\n </div>`;\n\n // Render the modal\n Modal.render({\n title: `Modify \"${prop}\" Style`,\n content: modalContent,\n onLoad() {\n if (document.getElementById('new-value')) {\n const element = document.getElementById('new-value');\n element.focus();\n if (element.tagName.toLowerCase() === 'input') {\n element.select();\n }\n }\n },\n onConfirm() {\n saveState();\n\n // Get the new value from the modal\n const newValue = document.getElementById('new-value').value;\n\n let obj = null;\n if (detect) {\n if (detect === \"breakpoints\") {\n if (project.css.breakpoints[`${data.breakpointKey}px`][id][data.stylesPropTarget]) {\n obj = project.css.breakpoints[`${data.breakpointKey}px`][id][data.stylesPropTarget];\n }\n }\n if (detect === \"animations\") {\n if (project.css.animations[data.animationTarget].keyframes[data.animationKeyframe]) {\n obj = project.css.animations[data.animationTarget].keyframes[data.animationKeyframe];\n }\n }\n } else {\n if (data.stylesPropTarget) {\n obj = project.css.styles[id][data.stylesPropTarget];\n }\n }\n\n // Update or delete the style\n if (newValue === '') {\n // Delete the property if empty\n delete obj[prop];\n } else {\n // Update the property with the new value\n obj[prop] = `${newValue}`;\n }\n\n saveState();\n }\n });\n}\nwindow.addPseudo = selector => {\n // Ensure the selector exists and initialize pseudos if not already present\n if (!project.css.styles[selector]) return;\n if (!project.css.styles[selector].pseudos) {\n project.css.styles[selector].pseudos = [];\n }\n\n // Define available pseudo-classes and pseudo-elements\n const pseudos = [\n 'none',\n ':active',\n ':after',\n ':before',\n ':first-child',\n ':focus',\n ':focus-visible',\n ':focus-within',\n ':hover',\n ':last-child',\n ':nth-child',\n ':target',\n ':visited',\n '::-webkit-scrollbar',\n '::-webkit-scrollbar-thumb',\n '::-webkit-scrollbar-track',\n '::before',\n '::after'\n ];\n\n let pseudoOptions = pseudos.map(pseudo => `\n <option value=\"${pseudo === 'none' ? '' : pseudo}\">${pseudo}</option>\n `).join('');\n\n let modalContent = `\n <div class=\"p-4\">\n <label class=\"block mb-2\">Select Pseudo-Class/Element:</label>\n <select \n id=\"pseudo-selector\" \n class=\"w-full rounded-md capitalize text-[.6rem]\" \n onchange=\"\n document.getElementById('pseudo-input').value = this.value;\n \">\n <option value=\"\">-- Select a pseudo --</option>\n ${pseudoOptions}\n </select>\n <input \n id=\"pseudo-input\" \n type=\"text\" \n placeholder=\"Enter CSS property and value here (e.g., display:none):\"\n class=\"w-full rounded-md text-[.6rem] mt-4\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n </div>\n `;\n\n // Render the modal\n Modal.render({\n title: `Add A Pseudo-Class/Element`,\n content: modalContent,\n onLoad() {\n document.getElementById('pseudo-input').focus();\n },\n onConfirm() {\n const pseudoSelector = document.getElementById('pseudo-selector').value.trim();\n const pseudoStyles = document.getElementById('pseudo-input').value.trim();\n\n if (pseudoStyles) {\n // Convert pseudoStyles into an object\n const styles = pseudoStyles.split(';').reduce((acc, rule) => {\n const [property, value] = rule.split(':').map(s => s.trim());\n if (property && value) acc[property] = value;\n return acc;\n }, {});\n\n const existingPseudo = project.css.styles[selector].pseudos.find(pseudo => pseudo.selector === pseudoStyles);\n\n if (existingPseudo) {\n // Merge new styles with existing styles if pseudo already exists\n existingPseudo.styles = {\n ...existingPseudo.styles,\n ...styles\n };\n } else {\n // Add a new pseudo object\n let obj = {\n \"selector\": pseudoStyles,\n \"styles\": styles\n };\n project.css.styles[selector].pseudos.push(obj);\n }\n\n saveState();\n } else {\n Modal.render({\n title: `Unable to add pseudo`,\n content: \"Please select a pseudo and enter valid CSS properties and values.\"\n });\n }\n }\n });\n}\nwindow.renamePseudo = oldName => {\n // Define available pseudo-classes and pseudo-elements\n const pseudos = [\n 'none',\n ':active',\n ':after',\n ':before',\n ':first-child',\n ':focus',\n ':focus-visible',\n ':focus-within',\n ':hover',\n ':last-child',\n ':nth-child',\n ':target',\n ':visited',\n '::-webkit-scrollbar',\n '::-webkit-scrollbar-thumb',\n '::-webkit-scrollbar-track',\n '::before',\n '::after'\n ];\n\n let pseudoOptions = pseudos.map(pseudo => `\n <option value=\"${pseudo === 'none' ? '' : pseudo}\">${pseudo}</option>\n `).join('');\n\n let modalContent = `\n <div class=\"p-4\">\n <label class=\"block mb-2\">Select Pseudo-Class/Element to Rename:</label>\n <select \n id=\"pseudo-selector\" \n class=\"w-full rounded-md capitalize text-[.6rem]\" \n onchange=\"\n document.getElementById('pseudo-name-input').value = this.value;\n \">\n <option value=\"\">-- Select a pseudo --</option>\n ${pseudoOptions}\n </select>\n <input \n id=\"pseudo-name-input\" \n type=\"text\" \n placeholder=\"Enter new name here...\"\n class=\"w-full rounded-md text-[.6rem] mt-4\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \">\n </div>\n `;\n\n // Render the modal\n Modal.render({\n title: `Are you sure you want to rename the \"${oldName}\" pseudo-class/element?`,\n content: modalContent,\n onLoad() {\n document.getElementById('pseudo-name-input').focus();\n },\n onConfirm() {\n const newName = document.getElementById('pseudo-name-input').value.trim();\n if (newName) {\n const style = project.css.styles[data.stylesTarget];\n if (!style || !style.pseudos) return;\n\n const existingPseudo = style.pseudos.find(pseudo => pseudo.selector === newName);\n if (existingPseudo) {\n Modal.render({\n title: `Unable to rename pseudo!`,\n content: \"Pseudo with the new name already exists!\"\n });\n return;\n }\n\n const pseudoIndex = style.pseudos.findIndex(pseudo => pseudo.selector === oldName);\n if (pseudoIndex === -1) {\n Modal.render({\n title: `Pseudo not found!`,\n content: `No pseudo with the name \"${oldName}\" found!`\n });\n return;\n }\n\n // Rename the pseudo\n style.pseudos[pseudoIndex].selector = newName;\n\n App.render(\"#app\");\n saveState();\n } else {\n Modal.render({\n title: `Unable to rename pseudo`,\n content: \"No value detected!\"\n });\n }\n }\n });\n}\nwindow.deletePseudo = () => {\n const name = data.pseudosSelector;\n const pseudoIndex = data.pseudosSelectorIndex;\n let modalContent = `<div class=\"p-4 text-center\">You will still be able to undo.</div>`;\n\n // Render the modal\n Modal.render({\n title: `Are you sure you want to delete the \"${name}\" pseudo-class/element?`,\n content: modalContent,\n onConfirm() {\n const style = project.css.styles[data.stylesTarget];\n if (!style || !style.pseudos) return;\n\n data.pseudosSelector = null;\n data.pseudosSelectorIndex = 0;\n style.pseudos.splice(pseudoIndex, 1);\n saveState();\n }\n });\n}\nwindow.fetchCssQuickCommands = async url => {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n data.canUseQuickCommands = true;\n const obj = await response.json();\n return obj;\n } catch (error) {\n console.error('Error fetching CSS quick commands:', error);\n }\n}\nwindow.applyCssQuickCommands = async url => {\n const cssQuickCommands = await fetchCssQuickCommands(url);\n\n if (cssQuickCommands) {\n // Assuming `data` is a global object where `cssQuickCommands` should be applied\n data.cssQuickCommands = cssQuickCommands;\n }\n}\n// Helper function to add an attribute to the element\nwindow.addAttribute = attr => {\n if (!attr) return;\n const incrementPattern = /{n}/g; // Pattern to detect increment placeholder\n\n // Split the attributes into individual attributes\n const attrs = attr.toLowerCase().split(',').map(q => q.trim().toLowerCase());\n\n // Get the current increment values for each attribute\n const incrementValues = {};\n\n saveState();\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n // Initialize layer.props if it's undefined\n if (!layer.props) layer.props = {};\n\n // Iterate over each attribute\n attrs.forEach(attribute => {\n let [key, value] = attribute.split('=').map(s => s.trim());\n if (key === 'id') value = generateId();\n\n if (incrementPattern.test(value)) {\n // Handle incrementing values\n let baseValue = value.replace(incrementPattern, '');\n let increment = incrementValues[key] || 1;\n value = baseValue + increment;\n incrementValues[key] = increment + 1;\n }\n\n if (!(key in layer.props)) {\n layer.props[key] = value !== undefined ? value : \"\";\n } else if (value !== undefined) {\n // If the attribute already exists, update its value\n layer.props[key] = value;\n }\n });\n }\n });\n saveState();\n}\n\n// editor functions\nwindow.html2json = input => {\n function elementToJson(element) {\n const boxElements = data.boxElements;\n const textElements = data.textElements;\n const noTextElements = [\n \"br\",\n \"hr\",\n \"input\",\n \"progress\",\n \"optgroup\",\n \"input\",\n \"link\",\n \"img\",\n \"svg\",\n \"path\",\n \"polygon\",\n \"rect\",\n \"circle\",\n \"ellipse\",\n \"g\",\n \"defs\",\n \"clipPath\"\n ];\n const tagName = element.tagName.toLowerCase();\n const obj = {\n tag: element.tagName.toLowerCase(),\n id: generateId(),\n style: \"\",\n state: {\n \"collapsed\": false,\n \"visible\": true,\n \"selected\": false\n }\n };\n\n obj.name = tagName;\n if (boxElements.includes(tagName)) {\n obj.type = \"box\";\n obj.text = \"\";\n } else if (textElements.includes(tagName)) {\n obj.type = \"text\";\n obj.text = \"\";\n } else {\n obj.type = tagName;\n if (!noTextElements.includes(tagName)) {\n obj.text = \"\";\n }\n }\n \n // Add props only if not empty\n if (element.hasAttributes()) {\n const props = {};\n Array.from(element.attributes).forEach(attr => {\n props[`${attr.name.toLowerCase()}`] = `${attr.value}`;\n });\n obj.props = props;\n }\n \n if (element.childNodes.length > 0) {\n obj.children = [];\n element.childNodes.forEach(child => {\n if (child.nodeType === Node.ELEMENT_NODE) {\n obj.children.push(elementToJson(child));\n } else if (child.nodeType === Node.TEXT_NODE && child.nodeValue.trim()) {\n obj.text = child.nodeValue.trim();\n }\n });\n }\n return obj;\n }\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, 'text/html');\n\n // Process both head and body elements\n const headJson = Array.from(doc.head.children).map(child => elementToJson(child));\n const bodyJson = Array.from(doc.body.children).map(child => elementToJson(child));\n\n // Combine the head and body JSON structures into one array\n return [...headJson, ...bodyJson];\n}\nwindow.json2html = input => {\n function jsonToElement(json) {\n const renderElement = element => {\n let html = '';\n\n // Skip elements that are not visible\n if (element.state && !element.state.visible) return html;\n \n if (!element.tag) {\n html += element.text || '';\n return html;\n }\n \n html += `<${element.tag}`;\n\n if (element.props) {\n for (let [key, value] of Object.entries(element.props)) {\n html += ` ${key}=\"${value}\"`;\n }\n }\n \n html += '>';\n \n if (element.text) {\n if (element.tag === 'style' || element.tag === 'script') {\n html += element.text;\n } else {\n html += escapeHtml(element.text);\n }\n }\n \n if (element.children) {\n for (const childElement of element.children) {\n html += renderElement(childElement);\n }\n }\n \n html += `</${element.tag}>`;\n return html;\n }\n \n let html = '';\n\n // If the input is an object, wrap it in an array\n if (!Array.isArray(json)) {\n json = [json];\n }\n\n if (Array.isArray(json)) {\n json.forEach(element => {\n html += renderElement(element);\n });\n }\n return html;\n }\n function escapeHtml(text) {\n const map = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, function(m) { return map[m]; });\n }\n function beautifyHtml(json) {\n const html = jsonToElement(json);\n let tab = ' ';\n let result = '';\n let indent = '';\n \n html.split(/>\\s*</).forEach(function(element) {\n if (element.match(/^\\/\\w/)) {\n indent = indent.substring(tab.length);\n }\n \n result += indent + '<' + element.trim() + '>\\r\\n';\n \n if (element.match(/^<?\\w[^>]*[^\\/]$/) && !element.startsWith(\"<input\")) {\n indent += tab;\n }\n });\n \n // Remove leading tab and newline, and trim trailing newline and whitespace\n return result.substring(1, result.length - 3).trim();\n }\n\n return beautifyHtml(input);\n}\nwindow.css2json = css => {\n if (typeof css !== 'string') {\n throw new Error(\"Input must be a CSS string\");\n }\n\n const json = {\n rootVariables: {},\n styles: {},\n animations: {},\n breakpoints: {}\n };\n\n css = minifyCSS(css)\n\n // Handle @import statements\n const importRegex = /@import\\s+url\\(['\"]([^'\"]+)['\"]\\);/g;\n let importMatch;\n\n while ((importMatch = importRegex.exec(css)) !== null) {\n const importUrl = importMatch[1].trim();\n if (project.libraries && !project.libraries.includes(importUrl)) {\n project.libraries.push(importUrl);\n }\n }\n\n // Remove @import statements from CSS\n css = css.replace(importRegex, '');\n\n const keyframesRegex = /@keyframes\\s+([^{\\s]+)\\s*\\{([^}]*(\\{[^}]*\\})[^}]*)\\}/g;\n const mediaQueryRegex = /@media\\s*([^{]+)\\s*\\{([\\s\\S]*?\\{[\\s\\S]*?\\})\\s*}/g;\n const selectorRegex = /([^{]+?)\\s*(\\{([^}]+)\\})/g;\n\n // Decode URL-encoded characters\n function decodeURIComponentSafe(str) {\n try {\n return decodeURIComponent(str);\n } catch {\n return str;\n }\n }\n\n function processSelector(selector, properties, target) {\n selector = selector.trim();\n if (selector.startsWith('@keyframes')) return;\n\n if (selector === \":root\") {\n properties.split(';').forEach(prop => {\n const [varName, varValue] = prop.split(\":\").map(part => part.trim());\n if (varName && varValue) {\n json.rootVariables[varName] = decodeURIComponentSafe(varValue);\n }\n });\n return;\n }\n\n const pseudoMatch = selector.match(/^(.*?)(::?[a-zA-Z0-9-]+)$/);\n let baseSelector = selector;\n let pseudo = null;\n\n if (pseudoMatch) {\n baseSelector = pseudoMatch[1].trim();\n pseudo = pseudoMatch[2];\n }\n\n if (!target[baseSelector]) {\n target[baseSelector] = {};\n }\n\n let currentTarget = target[baseSelector];\n if (pseudo) {\n currentTarget['pseudos'] = currentTarget['pseudos'] || [];\n const pseudoObj = {\n selector: pseudo,\n styles: {}\n };\n currentTarget['pseudos'].push(pseudoObj);\n currentTarget = pseudoObj.styles;\n } else {\n currentTarget['base'] = currentTarget['base'] || {};\n currentTarget = currentTarget['base'];\n }\n\n // Use regex to handle property-value pairs\n const propertyRegex = /([a-zA-Z-]+)\\s*:\\s*(.*?)(?=;|$)/g;\n let match;\n while ((match = propertyRegex.exec(properties)) !== null) {\n const property = match[1].trim();\n const value = match[2].trim();\n\n // Special handling for url(...) values\n const urlRegex = /^url\\(['\"]?(.*?)['\"]?\\)$/i;\n const urlMatch = value.match(urlRegex);\n\n if (urlMatch) {\n const urlContent = urlMatch[1].trim(); // Extract URL content and trim\n currentTarget[property] = `url(\"${decodeURIComponentSafe(urlContent)}\")`;\n } else {\n currentTarget[property] = decodeURIComponentSafe(value);\n }\n }\n }\n\n function processRules(cssRules, target) {\n let match;\n while ((match = selectorRegex.exec(cssRules)) !== null) {\n const selector = match[1].trim();\n const properties = match[3].trim();\n processSelector(selector, properties, target);\n }\n }\n\n function processKeyframes(keyframesName, keyframesRules) {\n const keyframes = {};\n\n keyframesRules.split('}').forEach(segment => {\n segment = segment.trim();\n if (!segment) return;\n\n const [keyframeName, propertiesPart] = segment.split('{').map(part => part.trim());\n if (keyframeName && (keyframeName.includes('to') || keyframeName.includes('from') || keyframeName.includes('%'))) {\n propertiesPart.split(';').forEach(prop => {\n const [property, value] = prop.split(':').map(p => p.trim());\n if (property && value) {\n keyframes[keyframeName] = keyframes[keyframeName] || {};\n keyframes[keyframeName][property] = decodeURIComponentSafe(value);\n }\n });\n }\n });\n\n json.animations[keyframesName] = { keyframes };\n }\n\n // Process keyframes\n let keyframesMatch;\n while ((keyframesMatch = keyframesRegex.exec(css)) !== null) {\n const keyframesName = keyframesMatch[1].trim();\n const keyframesRules = keyframesMatch[2].trim();\n processKeyframes(keyframesName, keyframesRules);\n }\n\n // Process media queries\n let mediaMatch;\n while ((mediaMatch = mediaQueryRegex.exec(css)) !== null) {\n const mediaCondition = mediaMatch[1].trim().split(\")\")[0].split(\":\")[1].trim();\n const mediaRules = mediaMatch[2].trim();\n const mediaTarget = {};\n\n processRules(mediaRules, mediaTarget);\n\n json.breakpoints[mediaCondition] = mediaTarget;\n }\n\n // Remove media queries from CSS\n const cssWithoutMedia = css.replace(mediaQueryRegex, '');\n\n // Process remaining CSS rules\n processRules(cssWithoutMedia, json.styles);\n\n // Remove keyframes from CSS\n css = css.replace(keyframesRegex, '');\n\n // Remove any empty selectors or unnecessary properties\n Object.keys(json.styles).forEach(selector => {\n if (Object.keys(json.styles[selector]).length === 0) {\n delete json.styles[selector];\n }\n });\n\n return json;\n};\n\nwindow.json2css = styles => {\n let css = '';\n let symbol = \"\";\n let semicolon = \";\";\n let openBrace = \"{\";\n let closeBrace = \"}\";\n\n // Function to check if a value contains CSS variables\n function containCssVar(value) {\n return /var\\(--/.test(value);\n }\n\n // Function to process styles recursively\n function processStyles(selector, style, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let innerCss = '';\n\n const variables = style.variables || {};\n const baseStyles = style.base || {};\n const pseudos = style.pseudos || [];\n const children = style.children || {}; // Account for children\n\n // Add the base selector\n innerCss += `${indent}${selector} ${openBrace}\\n`;\n\n // Variables\n for (const [variable, value] of Object.entries(variables)) {\n innerCss += `${indent} ${symbol}${variable}: ${value}${semicolon}\\n`;\n }\n\n // Base styles\n for (let [property, value] of Object.entries(baseStyles)) {\n if (containCssVar(value)) {\n // Replace CSS variables with CSS variables, handling mixed content\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `var(--${varName})`;\n });\n }\n innerCss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n\n innerCss += `${indent}${closeBrace}\\n`;\n\n // Pseudo-classes/styles\n pseudos.forEach(({ selector: pseudoSelector, styles: pseudoStyles }) => {\n innerCss += `${indent}${selector}${pseudoSelector} ${openBrace}\\n`;\n for (let [property, value] of Object.entries(pseudoStyles)) {\n if (containCssVar(value)) {\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `var(--${varName})`;\n });\n }\n innerCss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n innerCss += `${indent}${closeBrace}\\n`;\n });\n\n // Recursively process children\n for (const [childSelector, childStyle] of Object.entries(children)) {\n innerCss += processStyles(`${selector} ${childSelector}`, childStyle, indentLevel + 1);\n }\n\n return innerCss;\n }\n\n // Function to process animations\n function processAnimations(animations, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let animationCss = '';\n\n for (const [animationName, animation] of Object.entries(animations)) {\n animationCss += `${indent}@keyframes ${animationName} ${openBrace}\\n`;\n\n for (const [keyframe, styles] of Object.entries(animation.keyframes)) {\n animationCss += `${indent} ${keyframe} ${openBrace}\\n`;\n for (let [property, value] of Object.entries(styles)) {\n if (containCssVar(value)) {\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `var(--${varName})`;\n });\n }\n animationCss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n animationCss += `${indent} ${closeBrace}\\n`;\n }\n\n animationCss += `${indent}${closeBrace}\\n`;\n }\n\n return animationCss;\n }\n\n // Function to process breakpoints\n function processBreakpoints(breakpoints, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let breakpointCss = '';\n\n for (const [breakpoint, styles] of Object.entries(breakpoints)) {\n breakpointCss += `${indent}@media (min-width: ${breakpoint}) ${openBrace}\\n`;\n for (const [selector, style] of Object.entries(styles)) {\n breakpointCss += processStyles(selector, style, indentLevel + 1);\n }\n breakpointCss += `${indent}${closeBrace}\\n`;\n }\n\n return breakpointCss;\n }\n\n // Define :root variables\n if (styles.rootVariables && Object.keys(styles.rootVariables).length) {\n css += \":root {\\n\";\n for (const [variable, value] of Object.entries(styles.rootVariables)) {\n css += ` ${variable}: ${value}${semicolon}\\n`;\n }\n css += \"}\\n\\n\";\n }\n\n // Define styles for each class\n for (const [classId, style] of Object.entries(styles.styles)) {\n if (!style || (!Object.keys(style.variables || {}).length &&\n !Object.keys(style.base || {}).length &&\n !Object.keys(style.pseudos || {}).length &&\n !Object.keys(style.children || {}).length)) {\n continue; // Skip empty styles\n }\n\n const selector = classId;\n css += processStyles(selector, style);\n }\n\n // Process animations\n if (Object.keys(styles.animations || {}).length) {\n css += processAnimations(styles.animations);\n }\n\n // Process breakpoints (media queries)\n if (Object.keys(styles.breakpoints || {}).length) {\n css += processBreakpoints(styles.breakpoints);\n }\n\n return css;\n}\nwindow.json2preprocessor = styles => {\n let css = '';\n let symbol = \"\";\n let semicolon = \";\";\n let openBrace = \"{\";\n let closeBrace = \"}\";\n\n // set proper symbols\n if (data.preprocessors.includes(project.convertTo)) {\n if (project.convertTo === \"sass\" || project.convertTo === \"scss\") symbol = \"$\";\n if (project.convertTo === \"sass\") {\n semicolon = \"\";\n openBrace = \"\";\n closeBrace = \"\";\n }\n if (project.convertTo === \"less\") symbol = \"@\";\n }\n\n // Function to check if a value contains CSS variables\n function containcssVar(value) {\n return /var\\(--/.test(value);\n }\n\n // Function to process styles recursively\n function processStyles(selector, style, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let innercss = '';\n\n const variables = style.variables || {};\n const baseStyles = style.base || {};\n const pseudos = style.pseudos || [];\n const children = style.children || {}; // Account for children\n\n innercss += `${indent}${selector} ${openBrace}\\n`;\n\n // Variables (convert CSS variables to css variables)\n for (const [variable, value] of Object.entries(variables)) {\n innercss += `${indent} ${symbol}${variable}: ${value}${semicolon}\\n`;\n }\n\n // Base styles\n for (let [property, value] of Object.entries(baseStyles)) {\n if (property.startsWith('--')) {\n property = property.split('--').join(symbol);\n }\n\n // Check if value contains a CSS variable\n if (containcssVar(value)) {\n // Replace CSS variables with css variables, handling mixed content\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n if (!property.startsWith('--')) {\n return `${symbol}${varName}`;\n } else {\n return `${symbol}${varName}`;\n }\n });\n }\n innercss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n\n // Pseudo-classes/styles\n pseudos.forEach(({ selector: pseudoSelector, styles: pseudoStyles }) => {\n innercss += `${indent} &${pseudoSelector} ${openBrace}\\n`;\n for (let [property, value] of Object.entries(pseudoStyles)) {\n // Check if value contains a CSS variable\n if (containcssVar(value)) {\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `${symbol}${varName}`;\n });\n }\n innercss += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n innercss += `${indent} ${closeBrace}\\n`;\n });\n\n // Recursively process children\n if (children) {\n for (const [childSelector, childStyle] of Object.entries(children)) {\n innercss += processStyles(`${selector} ${childSelector}`, childStyle, indentLevel + 1);\n }\n }\n\n innercss += `${indent}${closeBrace}\\n`;\n\n return innercss;\n }\n\n // Function to process animations\n function processAnimations(animations, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let animationCSS = '';\n\n for (const [animationName, animation] of Object.entries(animations)) {\n animationCSS += `${indent}@keyframes ${animationName} ${openBrace}\\n`;\n\n for (const [keyframe, styles] of Object.entries(animation.keyframes)) {\n animationCSS += `${indent} ${keyframe} ${openBrace}\\n`;\n for (let [property, value] of Object.entries(styles)) {\n // Replace CSS variables with preprocessor variables if needed\n if (containcssVar(value)) {\n value = value.replace(/var\\(--([a-zA-Z0-9-_]+)\\)/g, (match, varName) => {\n return `${symbol}${varName}`;\n });\n }\n animationCSS += `${indent} ${property}: ${value}${semicolon}\\n`;\n }\n animationCSS += `${indent} ${closeBrace}\\n`;\n }\n\n animationCSS += `${indent}${closeBrace}\\n`;\n }\n\n return animationCSS;\n }\n\n // Function to process breakpoints\n function processBreakpoints(breakpoints, indentLevel = 0) {\n let indent = ' '.repeat(indentLevel);\n let breakpointCSS = '';\n\n for (const [breakpoint, styles] of Object.entries(breakpoints)) {\n breakpointCSS += `${indent}@media (max-width: ${breakpoint}) ${openBrace}\\n`;\n for (const [selector, style] of Object.entries(styles.base || {})) {\n breakpointCSS += processStyles(selector, style, indentLevel + 1);\n }\n breakpointCSS += `${indent}${closeBrace}\\n`;\n }\n\n return breakpointCSS;\n }\n\n // Define :root variables (css supports variables using $)\n let rootVariables = [];\n if (styles.rootVariables && Object.keys(styles.rootVariables).length) {\n for (const [variable, value] of Object.entries(styles.rootVariables)) {\n rootVariables.push(variable);\n css += `${symbol}${variable.split('--').join('')}: ${value}${semicolon}\\n`;\n }\n css += '\\n';\n }\n\n // Define styles for each class\n for (const [classId, style] of Object.entries(styles.styles)) {\n if (!style || (!Object.keys(style.variables || {}).length &&\n !Object.keys(style.base || {}).length &&\n !Object.keys(style.pseudos || {}).length &&\n !Object.keys(style.children || {}).length)) {\n continue; // Skip empty styles\n }\n\n const selector = classId;\n css += processStyles(selector, style);\n }\n\n // Process animations\n if (Object.keys(styles.animations || {}).length) {\n css += processAnimations(styles.animations);\n }\n\n // Process breakpoints (media queries)\n if (Object.keys(styles.breakpoints || {}).length) {\n css += processBreakpoints(styles.breakpoints);\n }\n\n return css;\n}\nwindow.mergeCSSJSON = (existingJSON, newJSON) => {\n if (typeof existingJSON === 'string') {\n throw new Error(\"Input's must be JSON\");\n }\n\n // Merge root variables\n Object.assign(existingJSON.rootVariables, newJSON.rootVariables);\n\n // Merge styles\n Object.keys(newJSON.styles).forEach(selector => {\n if (!existingJSON.styles[selector]) {\n existingJSON.styles[selector] = newJSON.styles[selector];\n } else {\n if (newJSON.styles[selector].base) {\n existingJSON.styles[selector].base = {\n ...existingJSON.styles[selector].base,\n ...newJSON.styles[selector].base\n };\n }\n if (newJSON.styles[selector].pseudos) {\n existingJSON.styles[selector].pseudos = [\n ...(existingJSON.styles[selector].pseudos || []),\n ...newJSON.styles[selector].pseudos\n ];\n }\n }\n });\n\n // Merge animations\n Object.keys(newJSON.animations).forEach(animationName => {\n if (!existingJSON.animations[animationName]) {\n existingJSON.animations[animationName] = newJSON.animations[animationName];\n } else {\n existingJSON.animations[animationName].keyframes = {\n ...existingJSON.animations[animationName].keyframes,\n ...newJSON.animations[animationName].keyframes\n };\n existingJSON.animations[animationName].properties = {\n ...existingJSON.animations[animationName].properties,\n ...newJSON.animations[animationName].properties\n };\n }\n });\n\n // Merge breakpoints\n Object.keys(newJSON.breakpoints).forEach(breakpoint => {\n if (!existingJSON.breakpoints[breakpoint]) {\n existingJSON.breakpoints[breakpoint] = newJSON.breakpoints[breakpoint];\n } else {\n Object.keys(newJSON.breakpoints[breakpoint]).forEach(selector => {\n if (!existingJSON.breakpoints[breakpoint][selector]) {\n existingJSON.breakpoints[breakpoint][selector] = newJSON.breakpoints[breakpoint][selector];\n } else {\n existingJSON.breakpoints[breakpoint][selector].base = {\n ...existingJSON.breakpoints[breakpoint][selector].base,\n ...newJSON.breakpoints[breakpoint][selector].base\n };\n }\n });\n }\n });\n\n return existingJSON;\n}\nwindow.fetchCssFile = async url => {\n const response = await fetch(url);\n return response.text();\n}\nwindow.generateCssQuickCommands = async url => {\n const css = await fetchCssFile(url);\n\n // Create a new CSSStyleSheet object\n const stylesheet = new CSSStyleSheet();\n await stylesheet.replace(css); // Replace with the CSS content\n\n const cssQuickCommands = {};\n\n // Iterate over all rules in the stylesheet\n for (const rule of stylesheet.cssRules) {\n // Skip pseudo-classes and animations\n if (rule.type === CSSRule.STYLE_RULE &&\n !rule.selectorText.includes(':') &&\n !rule.selectorText.includes('@keyframes')) {\n\n const className = rule.selectorText.replace('.', '');\n if (className) {\n const declarations = Array.from(rule.style)\n .filter(prop => !prop.startsWith('animation') && !prop.startsWith('transition'))\n .map(prop => `${prop}: ${rule.style[prop]};`)\n .join(' ');\n cssQuickCommands[className] = declarations;\n }\n }\n }\n\n return cssQuickCommands;\n}\nwindow.saveState = () => {\n // Save the current state to history\n const currentState = {\n rootVariables: project.css.rootVariables,\n styles: project.css,\n html: project.html,\n selectedLayerIds: data.selectedLayerIds\n };\n\n // Store the state as a stringified object\n const stateString = JSON.stringify(currentState);\n\n // Check if the last saved state is different from the current state\n if (data.history.length === 0 || data.history[data.historyIndex] !== stateString) {\n data.history = data.history.slice(0, data.historyIndex + 1); // Trim any redo history\n data.history.push(stateString); // Save the new state\n data.historyIndex++;\n localStorage.setItem('Polyrise', JSON.stringify(project));\n }\n}\nwindow.undo = () => {\n if (data.historyIndex > 0) {\n data.editorNavState = true;\n data.historyIndex--;\n const previousState = JSON.parse(data.history[data.historyIndex]);\n // Restore the previous state\n project.css.rootVariables = previousState.rootVariables;\n project.css = previousState.styles;\n project.html = previousState.html;\n data.selectedLayerIds = previousState.selectedLayerIds;\n data.editorNavState = null;\n }\n}\nwindow.redo = () => {\n if (data.historyIndex < data.history.length - 1) {\n data.editorNavState = true;\n data.historyIndex++;\n const nextState = JSON.parse(data.history[data.historyIndex]);\n // Restore the next state\n project.css.rootVariables = nextState.rootVariables;\n project.css = previousState.styles;\n project.html = nextState.html;\n data.selectedLayerIds = nextState.selectedLayerIds;\n data.editorNavState = null;\n }\n}\nwindow.customCode = () => {\n Modal.render({\n title: \"Paste Custom Code\",\n content: `\n <div class=\"p-4 text-center\">\n <div class=\"p-4 text-center\">\n <select id=\"bvk1c6j4o\" class=\"uppercase\">\n <option value=\"html\">html</option>\n <option value=\"css\">css</option>\n </select>\n </div>\n <div class=\"p-4 text-center\">\n <textarea id=\"op95hyy3l\" class=\"w-full h-[250px] resize-y\" placeholder=\"Paste code here...\"></textarea>\n </div>\n </div>\n `,\n onLoad() {\n document.getElementById('op95hyy3l').focus();\n document.getElementById('op95hyy3l').select();\n },\n onConfirm() {\n const selection = document.getElementById('bvk1c6j4o').value;\n let code = document.getElementById('op95hyy3l').value;\n if (selection === 'html') {\n addBlock(code);\n } else {\n code = minifyCSS(code);\n const newJSON = css2json(code);\n mergeCSSJSON(project.css, newJSON);\n document.querySelector('dialog[open]').querySelector('header > button').onclick();\n }\n }\n });\n}\nwindow.addLibrary = url => {\n if (!url) {\n project.libraries.push('');\n document.getElementById('librariesBox').innerHTML = renderLibraries();\n return false;\n }\n\n if (!project.libraries.includes(url)) {\n project.libraries.push(url);\n } else {\n console.error(`Library already exists: ${url}`);\n }\n\n if (document.getElementById('librariesBox')) {\n document.getElementById('librariesBox').innerHTML = renderLibraries();\n }\n};\nwindow.renderLibraries = () => {\n return project.libraries.map((library, index) => `\n <nav class=\"flex justify-between py-2\" data-index=\"${index}\">\n <input \n type=\"text\" \n placeholder=\"https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.15.2/Sortable.min.js\" \n data=\"library\" \n class=\"w-full pl-3 pr-0 rounded-md rounded-r-none focus:shadow-none\"\n style=\"margin-bottom: 0;\"\n value=\"${library}\" \n oninput=\"project.libraries[${index}] = this.value\" />\n <button \n aria-label=\"delete library\"\n name=\"delete library\"\n class=\"px-3 py-[15px] h-full border-0 rounded-md rounded-l-none\"\n onclick=\"project.libraries.splice(${index}, 1);\">\n ${icons.trash}\n </button>\n </nav>\n `).join('')\n}\nwindow.fetchSuggestions = key => {\n fetch(\n `https://api.cdnjs.com/libraries?search=${key}&fields=filename,description,version`\n )\n .then(response => {\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n return response.json();\n })\n .then(item => {\n if (item && item.results && item.results.length > 0) {\n const suggestions = item.results.map(result => result);\n\n document.getElementById('pruz9lb2p').innerHTML = suggestions.map(result => {\n return `\n <section \n class=\"cursor-pointer\"\n onclick=\"\n if (!project.libraries.includes('${result.latest}')) project.libraries.push('${result.latest}'); \n data.searchLibKey = null;\n data.librarySuggestions = null;\n searchInput.value = null;\n renderPreview(true);\n const dialog = this.closest('dialog');\n if (dialog) dialog.querySelector('header > button').onclick();\n \">\n <div class=\"flex justify-between mb-2 font-bold text-1xl\">\n <span class=\"font-bold\">${result.name}</span>\n <span class=\"font-bold\">${result.version}</span>\n </div>\n <div class=\"text-sm font-thin\">${result.description}<br><hr></div>\n </section>`;\n }).join('');\n }\n })\n .catch(error => {\n console.error(\"Error fetching data:\", error);\n });\n}\nwindow.removeScript = src => {\n const script = document.querySelector(`script[src=\"${src}\"]`);\n if (script) script.remove();\n}\nwindow.removeScripts = scripts => {\n scripts.forEach(src => {\n const script = document.querySelector(`script[src=\"${src}\"]`);\n if (script) script.remove();\n });\n}\nwindow.loadScript = async scriptUrl => {\n return new Promise((resolve, reject) => {\n // Check if the script is already loaded\n const existingScript = document.querySelector(`script[src=\"${scriptUrl}\"]`);\n if (existingScript) {\n resolve(); // If the script is already present, resolve immediately\n return;\n }\n\n // Create a new script element if not present\n const scriptElement = document.createElement('script');\n scriptElement.src = scriptUrl;\n scriptElement.onload = resolve; // Resolve when the script is successfully loaded\n scriptElement.onerror = () => reject(new Error(`Failed to load script: ${scriptUrl}`)); // Reject on error\n document.body.appendChild(scriptElement); // Append the script to the body\n });\n}\nwindow.loadScripts = async srcArray => {\n return Promise.all(srcArray.map(loadScript));\n}\n\n// layers functions\nwindow.executeQuery = (queriesString, replaceSelection = true) => {\n if (!queriesString) {\n clearAllSelections();\n return;\n }\n\n const queries = queriesString.split(',').map(q => q.trim());\n\n function handleSpecialCommand(command) {\n switch (command) {\n case 'f':\n foldAllLayers(true); // Collapse all layers\n break;\n case 'u':\n foldAllLayers(false); // Uncollapse all layers\n break;\n case 'h':\n hideAllLayers(true); // Hide all layers\n break;\n case 's':\n hideAllLayers(false); // Show all layers\n break;\n case 'e':\n emptyChildren(); // Empty all children from selections\n break;\n case 'cas':\n project.css = {\n \"rootVariables\": {},\n \"styles\": {},\n \"animations\": {},\n \"breakpoints\": {}\n };\n break;\n default:\n console.warn('Unknown command:', command);\n }\n }\n\n function matchesPseudoClass(layer, pseudoClass, index, total) {\n switch (pseudoClass) {\n case 'first-child': return index === 0;\n case 'last-child': return index === total - 1;\n case 'nth-child': return (index + 1) === parseInt(pseudoClass.split('(')[1], 10);\n case 'nth-last-child': return (total - index) === parseInt(pseudoClass.split('(')[1], 10);\n case 'only-child': return total === 1;\n case 'empty': return !(layer.children && layer.children.length > 0);\n case 'first-of-type': return layer.tagOccurrences.index === 0;\n case 'last-of-type': return layer.tagOccurrences.reverseIndex === 0;\n case 'nth-of-type': return layer.tagOccurrences.index === parseInt(pseudoClass.split('(')[1], 10) - 1;\n case 'nth-last-of-type': return layer.tagOccurrences.reverseIndex === parseInt(pseudoClass.split('(')[1], 10) - 1;\n case 'only-of-type': return layer.tagOccurrences.total === 1;\n default: return false;\n }\n }\n\n function selectLayersRecursive(layers, query, callback) {\n let activeCalls = 0; // Track active recursive calls\n \n function processLayers(layers) {\n activeCalls++; // Increment the active call count\n \n layers.forEach((layer, index) => {\n let match = false;\n \n // Extract selector and pseudo-class\n const [selector, pseudoClassPart] = query.split(':');\n const pseudoClass = pseudoClassPart || null;\n \n // Parse selector\n let [tag, classNames, attribute, value] = [null, [], null, null];\n const attributeMatch = /\\[([^\\]]+)\\]/.exec(selector);\n if (attributeMatch) {\n [attribute, value] = attributeMatch[1].split('=');\n }\n const classMatches = /\\.([^.\\[]+)/g;\n let matchResult;\n while ((matchResult = classMatches.exec(selector)) !== null) {\n classNames.push(matchResult[1]);\n }\n tag = selector.split(/[\\.\\[]/)[0];\n \n // Check tag match\n if (tag && layer.tag !== tag) match = false;\n else match = true;\n \n // Check class match\n if (classNames.length > 0) {\n if (!layer.props || !layer.props.class) match = false;\n else {\n const layerClasses = layer.props.class.split(' ');\n match = classNames.every(className => layerClasses.includes(className));\n }\n }\n \n // Check attribute match\n if (attribute) {\n if (value) {\n // Ensure attribute is matched specifically, not just any property\n if (layer.props && layer.props[attribute] !== value) match = false;\n } else {\n // Ensure attribute is matched specifically, not just any property\n if (!layer.props || !layer.props.hasOwnProperty(attribute)) match = false;\n }\n }\n \n // Check pseudo-class match\n if (match && pseudoClass) {\n const total = layers.length;\n if (!matchesPseudoClass(layer, pseudoClass, index, total)) match = false;\n }\n \n // Apply selection\n if (match) {\n layer.state.selected = true;\n if (!data.selectedLayerIds.includes(layer.id)) {\n data.selectedLayerIds.push(layer.id);\n }\n }\n \n // Recursively apply to children\n if (layer.children && layer.children.length > 0) {\n processLayers(layer.children);\n }\n });\n \n activeCalls--; // Decrement the active call count\n \n // If this was the last active call, invoke the callback\n if (activeCalls === 0 && callback && typeof callback === 'function') {\n callback();\n }\n }\n \n // Start processing layers\n processLayers(layers);\n }\n\n function targetChildrenOfSelections(query, callback) {\n if (data.selectedLayerIds.length > 0) {\n // Find the layers by IDs and target their children\n const selectedLayers = data.selectedLayerIds.map(id => findLayerById(id, project.html));\n if (selectedLayers.length > 0) {\n // Collect children of selected layers\n const children = selectedLayers.flatMap(group => group.layer.children || []);\n // Select layers from children\n selectLayersRecursive(children, query);\n }\n\n // Invoke the callback if provided\n if (typeof callback === 'function') {\n callback();\n }\n }\n }\n\n function processQuery(query) {\n // Find the index of the '=' symbol\n const equalsIndex = query.indexOf('=');\n \n // If '=' is found, convert the portion before it to lowercase\n if (equalsIndex !== -1) {\n const prefix = query.slice(0, equalsIndex).toLowerCase();\n query = prefix + query.slice(equalsIndex);\n }\n \n if (query.startsWith('t=')) {\n if (replaceSelection) clearAllSelections();\n selectLayersRecursive(project.html, query.slice(2));\n } else if (query.startsWith('r=')) {\n clearAllSelections();\n selectLayersRecursive(project.html, query.slice(2), () => {\n deleteLayers();\n });\n } else if (query.startsWith('e=')) {\n clearAllSelections();\n selectLayersRecursive(project.html, query.slice(2), () => {\n emptyChildren();\n });\n } else if (query.startsWith('c=')) {\n if (data.selectedLayerIds.length > 0) {\n if (data.replaceCurrentSelection) {\n let currentIDs = [...data.selectedLayerIds];\n targetChildrenOfSelections(query.slice(2), () => {\n currentIDs.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n layer.state.selected = false;\n });\n });\n } else {\n targetChildrenOfSelections(query.slice(2));\n }\n } else {\n console.error('no layers selected');\n }\n } else if (query.startsWith('mv=')) {\n if (data.selectedLayerIds.length > 0) {\n if (replaceSelection) clearAllSelections();\n cutLayers(() => {\n selectLayersRecursive(project.html, query.slice(3), () => {\n pasteLayers();\n });\n });\n }\n } else if (query.startsWith('rs=')) {\n if (data.selectedLayerIds.length > 0) {\n if (replaceSelection) clearAllSelections();\n clearStyles(project.html, query.slice(3), () => {\n saveState(); // Callback after clearStyles completes\n });\n }\n } else {\n handleSpecialCommand(query);\n }\n }\n\n queries.forEach(processQuery);\n}\nwindow.toggleCollapse = layerId => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n let targetLayer = null;\n let parentLayer = null;\n\n // Function to recursively find the target layer and its parent\n function findLayerAndParent(layer, parent = null) {\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = parent;\n return true; // Found the layer\n }\n\n if (layer.children) {\n for (let i = 0; i < layer.children.length; i++) {\n if (findLayerAndParent(layer.children[i], layer)) {\n return true; // Found the layer in children\n }\n }\n }\n\n return false; // Layer not found\n }\n\n // Function to collapse or uncollapse all siblings to match the target layer's state\n function applyCollapseStateToSiblings(layers, collapseState) {\n layers.forEach(layer => {\n if (layer !== targetLayer) {\n layer.state.collapsed = collapseState;\n }\n });\n }\n\n // Check top-level layers directly\n for (let i = 0; i < project.html.length; i++) {\n let layer = project.html[i];\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = null; // No parent for top-level layers\n break;\n } else {\n findLayerAndParent(layer);\n }\n }\n\n if (targetLayer) {\n // Toggle the target layer's collapse state\n const newCollapseState = !targetLayer.state.collapsed;\n targetLayer.state.collapsed = newCollapseState;\n\n if (data.shiftKey) {\n if (parentLayer) {\n // Apply to siblings within the same parent layer\n applyCollapseStateToSiblings(parentLayer.children, newCollapseState);\n } else {\n // Apply to all top-level layers\n applyCollapseStateToSiblings(project.html, newCollapseState);\n }\n }\n\n // Render the application (if needed)\n App.render(\"#app\");\n }\n}\nwindow.foldAllLayers = (state = false) => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n function collapseLayer(layer) {\n layer.state.collapsed = state;\n if (layer.children) layer.children.forEach(child => collapseLayer(child));\n }\n\n project.html.forEach(layer => collapseLayer(layer));\n}\nwindow.hideAllLayers = (state = false) => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n function hideLayer(layer) {\n layer.state.visible = !state;\n if (layer.children) layer.children.forEach(child => hideLayer(child));\n }\n\n project.html.forEach(layer => hideLayer(layer));\n}\nwindow.toggleVisible = layerId => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n let targetLayer = null;\n let parentLayer = null;\n\n // Function to recursively find the target layer and its parent\n function findLayerAndParent(layer, parent = null) {\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = parent;\n return true; // Found the layer\n }\n\n if (layer.children) {\n for (let i = 0; i < layer.children.length; i++) {\n if (findLayerAndParent(layer.children[i], layer)) {\n return true; // Found the layer in children\n }\n }\n }\n\n return false; // Layer not found\n }\n\n // Function to set visibility for all siblings to match the target layer's state\n function applyVisibilityToSiblings(layers, visibilityState) {\n layers.forEach(layer => {\n if (layer !== targetLayer) {\n layer.state.visible = visibilityState;\n }\n });\n }\n\n // Check top-level layers directly\n for (let i = 0; i < project.html.length; i++) {\n let layer = project.html[i];\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = null; // No parent for top-level layers\n break;\n } else {\n findLayerAndParent(layer);\n }\n }\n\n if (targetLayer) {\n // Toggle the target layer's visibility state\n const newVisibilityState = !targetLayer.state.visible;\n targetLayer.state.visible = newVisibilityState;\n\n // Apply the new visibility state to all siblings\n if (data.shiftKey) {\n if (parentLayer) {\n // Apply to siblings within the same parent layer\n applyVisibilityToSiblings(parentLayer.children, newVisibilityState);\n } else {\n // Apply to all top-level layers\n applyVisibilityToSiblings(project.html, newVisibilityState);\n }\n }\n }\n}\nwindow.selectedBlock = layerId => {\n if (project.activePanel !== 'layers') project.activePanel = 'layers';\n let targetLayer = null;\n let parentLayer = null;\n\n // Function to find the layer and its parent\n function findLayerAndParent(layer, parent = null) {\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = parent;\n return true; // Found the layer\n }\n\n if (layer.children) {\n for (let i = 0; i < layer.children.length; i++) {\n if (findLayerAndParent(layer.children[i], layer)) {\n return true; // Found the layer in children\n }\n }\n }\n\n return false; // Layer not found\n }\n\n // Apply selection state to all siblings\n function applySelectionToSiblings(layers, selectionState) {\n layers.forEach(layer => {\n if (layer !== targetLayer) {\n const childIndex = data.selectedLayerIds.indexOf(layer.id);\n if (selectionState) {\n if (childIndex === -1) {\n data.selectedLayerIds.push(layer.id);\n layer.state.selected = true;\n }\n } else {\n if (childIndex > -1) {\n data.selectedLayerIds.splice(childIndex, 1);\n layer.state.selected = false;\n }\n }\n }\n });\n }\n\n // Check top-level layers directly\n for (let i = 0; i < project.html.length; i++) {\n let layer = project.html[i];\n if (layer.id === layerId) {\n targetLayer = layer;\n parentLayer = null; // No parent for top-level layers\n break;\n } else {\n findLayerAndParent(layer);\n }\n }\n\n if (targetLayer) {\n const isSelected = data.selectedLayerIds.includes(layerId);\n const newSelectionState = !isSelected;\n\n // If replaceCurrentSelection is true and shiftKey is not pressed, clear all selections\n if (data.cmdKey && !data.shiftKey) {\n data.selectedLayerIds.forEach(id => {\n const layer = findLayerById(id);\n if (layer) {\n layer.state.selected = false;\n }\n });\n data.selectedLayerIds = []; // Clear all selections\n }\n\n // Toggle selection state of the target layer\n if (newSelectionState) {\n data.selectedLayerIds.push(layerId);\n const lastSelectedLayerId = data.selectedLayerIds[data.selectedLayerIds.length - 1];\n const layer = findLayerById(lastSelectedLayerId);\n data.stylesTarget = layer.style;\n data.breakpointKey = null;\n } else {\n const index = data.selectedLayerIds.indexOf(layerId);\n if (index > -1) {\n data.selectedLayerIds.splice(index, 1);\n }\n }\n targetLayer.state.selected = newSelectionState;\n\n // Apply selection state to siblings\n if (data.shiftKey) {\n if (parentLayer) {\n // Apply to siblings within the same parent layer\n applySelectionToSiblings(parentLayer.children, newSelectionState);\n } else {\n // Apply to all top-level layers\n applySelectionToSiblings(project.html, newSelectionState);\n }\n }\n }\n\n function findLayerById(id) {\n let foundLayer = null;\n for (let i = 0; i < project.html.length; i++) {\n function searchLayer(layer) {\n if (layer.id === id) {\n foundLayer = layer;\n return true;\n }\n if (layer.children) {\n for (let j = 0; j < layer.children.length; j++) {\n if (searchLayer(layer.children[j])) {\n return true;\n }\n }\n }\n return false;\n }\n searchLayer(project.html[i]);\n if (foundLayer) break;\n }\n return foundLayer;\n }\n}\nwindow.collectSelectedIDs = layers => {\n layers.forEach(layer => {\n if (layer.state.selected) {\n data.selectedLayerIds.push(layer.id);\n }\n if (layer.children && layer.children.length > 0) {\n collectSelectedIDs(layer.children);\n }\n });\n}\nwindow.clearAllSelections = () => {\n data.selectedLayerIds = [];\n data.stylesTarget = null;\n clearSelection(project.html);\n}\nwindow.clearSelection = layers => {\n layers.forEach(layer => {\n layer.state.selected = false;\n if (layer.children) clearSelection(layer.children);\n });\n}\nwindow.clearSelectionExcept = (excludeId, layers) => {\n layers.forEach(layer => {\n if (layer.id !== excludeId) {\n layer.state.selected = false;\n } else {\n layer.state.selected = true;\n }\n if (layer.children) clearSelectionExcept(excludeId, layer.children);\n });\n}\nwindow.findLayerById = (id, layers, parent = null) => {\n for (const layer of layers) {\n if (layer.id === id) return { layer, parent };\n if (layer.children) {\n const found = findLayerById(id, layer.children, layer);\n if (found) return found;\n }\n }\n return null;\n}\nwindow.canAcceptChildren = layer => {\n const elementsThatDontAcceptChildren = [\n 'audio',\n 'datalist',\n 'iframe',\n 'img',\n 'input',\n 'meter',\n 'option',\n 'progress',\n 'select',\n 'textarea',\n 'video'\n ]; \n \n return !elementsThatDontAcceptChildren.includes(layer.tag);\n}\nwindow.addBlock = html => {\n saveState(); // Save state before making changes\n\n // Function to assign an ID to each new block\n const assignIds = (blocks, callback) => {\n blocks.forEach(block => {\n block.id = generateId(); // Assign a new ID\n if (block.children) {\n assignIds(block.children); // Recursively assign IDs to children if they exist\n }\n });\n\n if (callback && typeof callback === 'function') {\n callback(); // Call the callback function after all IDs have been assigned\n }\n };\n\n // Process the input HTML or object\n const newBlocks = html2json(html);\n\n if (data.selectedLayerIds.length > 0) {\n data.selectedLayerIds.forEach(id => {\n const result = findLayerById(id, project.html);\n if (result) {\n const { layer, parent } = result;\n\n // Set the selected state to false and remove the ID from selectedLayerIds\n layer.selected = false;\n data.selectedLayerIds = data.selectedLayerIds.filter(layerId => layerId !== id);\n\n if (canAcceptChildren(layer)) {\n if (data.blockWrap) {\n // Ensure the new block can hold children\n const parentBlock = newBlocks[0];\n if (canAcceptChildren(parentBlock)) {\n // Ensure `parentBlock.children` is initialized\n parentBlock.children = parentBlock.children || [];\n parentBlock.children.push(layer); // Make the selected layer a child of the new block\n\n // Assign IDs to the new parent block and its children\n assignIds(newBlocks, () => {\n // Push the new parent block to the original parent's children\n if (parent && parent.children) {\n parent.children = parent.children.map(child =>\n child.id === layer.id ? parentBlock : child\n );\n } else {\n project.html = project.html.map(child =>\n child.id === layer.id ? parentBlock : child\n );\n }\n });\n }\n } else {\n // Ensure `layer.children` is initialized\n layer.children = layer.children || [];\n\n // Assign IDs and then push new blocks\n assignIds(newBlocks, () => {\n newBlocks.forEach(newBlock => {\n layer.children.push(newBlock); // Push new block after ID assignment\n });\n });\n }\n }\n }\n });\n } else {\n // If user has no layers selected, add to the root layer structure\n assignIds(newBlocks, () => {\n newBlocks.forEach(newBlock => project.html.push(newBlock)); // Push new block after ID assignment\n });\n }\n\n clearAllSelections();\n saveState(); // Save state after making changes\n document.querySelector('dialog[open]').querySelector('header > button').onclick();\n};\n\nwindow.selectLayersByStyleRef = (style, layers) => {\n for (const layer of layers) {\n // Deselect all layers\n layer.state.selected = false;\n\n // Check if the current layer matches the style reference\n if (layer.style === style) {\n data.selectedLayerIds.push(layer.id);\n layer.state.selected = true;\n // Continue searching in children even if the parent is selected\n }\n\n // Recursively check children if they exist\n if (layer.children && layer.children.length > 0) {\n selectLayersByStyleRef(style, layer.children);\n }\n }\n};\nwindow.deleteLayers = () => {\n saveState(); // Save state before making changes\n data.editorNavState = true;\n data.selectedLayerIds.forEach(id => {\n removeLayerById(id, project.html);\n });\n data.selectedLayerIds = []; // Clear selection after deletion\n data.editorNavState = null;\n saveState(); // Save state after making changes\n}\nwindow.removeLayerById = (id, layers) => {\n for (const layer of layers) {\n if (layer.id === id) {\n const index = layers.findIndex(l => l.id === id);\n layers.splice(index, 1); // Remove layer from the main layers array\n return;\n }\n\n if (layer.children) {\n const index = layer.children.findIndex(child => child.id === id);\n if (index !== -1) {\n layer.children.splice(index, 1); // Remove from children\n return;\n } else {\n removeLayerById(id, layer.children); // Recursively remove from nested layers\n }\n }\n }\n}\nwindow.cloneLayers = () => {\n let modalContent = `<div>\n <input \n id=\"b40h7qc6d\"\n type=\"number\" \n min=\"1\" \n step=\"1\" \n value=\"${data.increment}\"\n oninput=\"data.increment = this.value;\"\n focus=\"true\"\n onkeydown=\"\n if (event.key === 'Enter') {\n document.querySelector('dialog[open]').querySelector('footer > button:last-child').onclick();\n }\n \"\n />\n </div>`;\n\n Modal.render({\n title: `How many times do you want to clone this block?`,\n content: modalContent,\n onLoad() {\n document.getElementById('b40h7qc6d').focus();\n document.getElementById('b40h7qc6d').select();\n },\n onConfirm() {\n saveState(); // Save state before making changes\n\n const cloneCount = parseInt(data.increment, 10);\n \n if (isNaN(cloneCount) || cloneCount <= 0) {\n console.error('Invalid clone count:', cloneCount);\n return;\n }\n\n data.selectedLayerIds.forEach(id => {\n const { layer, parent } = findLayerById(id, project.html);\n \n if (layer) {\n for (let i = 0; i < cloneCount; i++) {\n const clonedLayer = cloneLayerObject(layer);\n \n if (parent && Array.isArray(parent.children)) {\n const index = parent.children.findIndex(child => child.id === layer.id);\n if (index !== -1) {\n parent.children.splice(index + 1, 0, clonedLayer);\n } else {\n console.error(\"Selected layer not found in parent's children:\", layer);\n }\n } else if (!parent) {\n const index = project.html.findIndex(rootLayer => rootLayer.id === layer.id);\n if (index !== -1) {\n project.html.splice(index + 1, 0, clonedLayer);\n } else {\n console.error('Selected layer not found in root layer structure:', layer);\n }\n }\n }\n } else {\n console.error('Layer not found for ID:', id);\n }\n });\n \n clearAllSelections(); // Clear selection after cloning\n saveState(); // Save state after making changes\n }\n });\n}\n\nwindow.cloneLayerObject = layer => {\n const clonedLayer = JSON.parse(JSON.stringify(layer)); // Deep clone\n clonedLayer.id = generateId(); // Assign a new ID\n\n if (clonedLayer.children) {\n clonedLayer.children = clonedLayer.children.map(child => cloneLayerObject(child)); // Clone children recursively\n }\n return clonedLayer;\n}\nwindow.cutLayers = callback => {\n saveState(); // Save state before making changes\n data.editorNavState = true;\n copyLayers();\n data.selectedLayerIds.forEach(id => {\n removeLayerById(id, project.html);\n });\n data.selectedLayerIds = []; // Clear selection after deletion\n saveState(); // Save state after making changes\n data.editorNavState = null;\n\n // Call the callback function if provided\n if (callback && typeof callback === 'function') {\n callback();\n }\n}\nwindow.copyLayers = () => {\n data.clipboard = data.selectedLayerIds.map(id => {\n const { layer } = findLayerById(id, project.html);\n return cloneLayerObject(layer); // Clone layer without deleting\n });\n}\nwindow.pasteLayers = () => {\n saveState(); // Save state before making changes\n if (data.clipboard.length > 0) {\n const pastedLayers = data.clipboard.map(layer => {\n return cloneLayerObject(layer); // Clone layer with new IDs\n });\n\n if (data.selectedLayerIds.length > 0) {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer && canAcceptChildren(layer)) {\n layer.children = layer.children || [];\n layer.children.push(...pastedLayers);\n }\n });\n } else {\n project.html.push(...pastedLayers); // Paste to root if no layer selected\n }\n\n data.clipboard = []; // Clear clipboard after pasting\n clearAllSelections(); // Clear selection after pasting\n saveState(); // Save state after making changes\n }\n}\nwindow.removeAttributeFromLayers = property => {\n saveState();\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n // Delete the key from the props object\n if (layer) delete layer.props[property];\n });\n saveState();\n}\nwindow.removeProp = key => {\n Modal.render({\n title: `Are you sure you want to delete the ${key} attribute?`,\n content: `\n <div class=\"p-4 text-center\">You will still be able to undo.</div>\n `,\n onConfirm() {\n removeAttributeFromLayers(key);\n }\n });\n}\nwindow.emptyChildren = () => {\n saveState(); // Save state before making changes\n if (data.selectedLayerIds.length > 0) {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer.children) layer.children = [];\n if (layer.text) {\n layer.text = '';\n }\n });\n }\n saveState(); // Save state after making changes\n}\nwindow.updateElement = (key, propKey, value, initIncrement = false) => {\n const incrementPattern = /{n}/g; // Pattern to detect increment placeholder\n \n saveState();\n data.selectedLayerIds.forEach((id, index) => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n if (key !== 'props') {\n if (key === 'text') {\n if (!value) {\n layer.text = \"\";\n } else {\n if (initIncrement && incrementPattern.test(value)) {\n // If initIncrement is true, increment the {n} pattern\n layer.text = value.replace(incrementPattern, index + 1);\n } else {\n layer.text = value; // Otherwise, just use the given value\n }\n }\n } else {\n // General case for non-text keys\n layer[`${key}`] = value;\n }\n } else {\n // Handling props (e.g., attributes)\n if (initIncrement && incrementPattern.test(value)) {\n // If initIncrement is true, increment the {n} pattern in props\n layer.props[`${propKey}`] = value.replace(incrementPattern, index + 1);\n } else {\n layer.props[`${propKey}`] = value; // Otherwise, just use the given value\n }\n }\n }\n });\n saveState();\n};\nwindow.updateImageMedia = (id, type) => {\n let target = findLayerById(id, project.html).layer.props['src'];\n let modalContent = `<div class=\"p-4 text-center grid grid-cols-1 gap-4 place-items-center\">\n <input id=\"ixkq65jma\" class=\"hidden\" type=\"file\" name=\"image\" onchange=\"updateMediaSource(event, '${type}', document.getElementById('p8gnvn4o7'))\">\n <figure>\n <picture>\n <label for=\"ixkq65jma\" class=\"cursor-pointer\">\n <img id=\"p8gnvn4o7\" class=\"cursor-pointer\" src=\"${target}\" alt=\"Your image\" loading=\"lazy\">\n </label>\n </picture>\n <figcaption>\n <span>Api courtesy of \n <a href=\"https://openverse.org/\" target=\"_blank\">Openverse</a>.\n </figcaption>\n </figure>\n <fieldset role=\"group\" class=\"mb-0 w-full place-items-center\">\n <input \n id=\"search-input\" \n type=\"text\" \n placeholder=\"Search for images...\" \n class=\"p-2 w-full\" \n onkeydown=\"\n if (event.key === 'Enter') {\n document.getElementById('search-btn').click();\n }\n \"/>\n <button id=\"search-btn\">\n ${icons.search}\n </button>\n </fieldset>\n <div id=\"search-results\" class=\"mt-4 grid grid-cols-3 gap-2\"></div>\n <div class=\"font-thin text-xs\">\n You can grab your own high-res image by searching <a href=\"https://pixabay.com/\" target=\"_blank\">Pixabay.com</a> or <a href=\"https://pexels.com/\" target=\"_blank\">Pexels.com</a>.\n </div>\n </div>`;\n \n Modal.render({\n title: \"Are you sure you want to replace the image source?\",\n content: modalContent,\n onLoad() {\n const searchField = document.getElementById('search-input');\n searchField.focus();\n \n const handleSearch = async () => {\n if (searchField.value) {\n const results = await searchOpenverseImage(searchField.value);\n displayResults(results);\n } else {\n document.getElementById('search-results').innerHTML = '';\n return false;\n }\n };\n \n searchField.oninput = handleSearch;\n document.getElementById('search-btn').onclick = handleSearch;\n\n function displayResults(results) {\n const resultsContainer = document.getElementById('search-results');\n resultsContainer.innerHTML = results.map(result => `\n <img \n src=\"${result.thumbnail}\" \n alt=\"${result.title}\" \n loading=\"lazy\"\n class=\"cursor-pointer w-full\" \n onclick=\"\n document.getElementById('p8gnvn4o7').src = '${result.url}';\n this.closest('article').scrollTop = 0;\n \"/>\n `).join('');\n }\n },\n onConfirm() {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n if (layer.tag === \"img\") {\n saveState();\n layer.props[`src`] = document.getElementById('p8gnvn4o7').src;\n saveState();\n }\n }\n });\n }\n });\n}\nwindow.searchOpenverseImage = async query => {\n const url = `https://api.openverse.org/v1/images?q=${encodeURIComponent(query)}`;\n const response = await fetch(url);\n if (response.ok) {\n const data = await response.json();\n return data.results;\n } else {\n console.error(\"API request failed:\", response.status);\n return [];\n }\n}\nwindow.updateAudioMedia = (id, type) => {\n let target = findLayerById(id, project.html).layer;\n if (target.tag !== 'audio' || type !== 'audio') return;\n let uniqueId = generateId();\n if (!target.props) target.props = {};\n if (target.props.id) target.props.id = uniqueId;\n if (!target.props.id) target.props['id'] = uniqueId;\n \n const audioHTML = json2html([target]);\n let modalContent = `<style>\n #xdbmkeqha audio {\n width: 100%;\n }\n </style>\n \n <div class=\"p-4 grid grid-cols-1 gap-4 items-center\">\n <input id=\"ixkq65jma\" class=\"hidden\" type=\"file\" name=\"audio\" onchange=\"updateMediaSource(event, '${type}', document.getElementById('${uniqueId}'))\">\n <figure class=\"text-center\">\n <nav id=\"xdbmkeqha\" class=\"items-center\">\n ${audioHTML}\n\n <button \n class=\"ml-4 font-thin text-xs bg-transparent border-0\"\n style=\"color: unset;\"\n onclick=\"\n document.getElementById('ixkq65jma').click();\n \"\n >\n ${icons.upload}\n </button>\n </nav>\n <figcaption>\n <span>Api courtesy of \n <a href=\"https://openverse.org/\" target=\"_blank\">Openverse</a>.\n </figcaption>\n </figure>\n <fieldset role=\"group\" class=\"mb-0 w-full items-center\">\n <input \n id=\"search-input\" \n type=\"text\" \n placeholder=\"Search for audios...\" \n class=\"p-2 w-full\" \n onkeydown=\"\n if (event.key === 'Enter') {\n document.getElementById('search-btn').click();\n }\n \"/>\n <button id=\"search-btn\">\n ${icons.search}\n </button>\n </fieldset>\n <div id=\"search-results\" class=\"mt-4 grid grid-cols-1 gap-2\"></div>\n <div class=\"font-thin text-xs text-center\">\n You can also grab your own audio files from <a href=\"https://freesound.org/\" target=\"_blank\">freesound.org</a>.\n </div>\n </div>`;\n \n Modal.render({\n title: \"Are you sure you want to replace the audio element?\",\n content: modalContent,\n onLoad() {\n const searchInput = document.getElementById('search-input');\n const searchBtn = document.getElementById('search-btn');\n const resultsContainer = document.getElementById('search-results');\n searchInput.focus();\n \n const handleSearch = async () => {\n if (searchInput.value) {\n const results = await searchOpenverseAudio(searchInput.value);\n displayResults(results);\n } else {\n resultsContainer.innerHTML = '';\n return false;\n }\n };\n \n searchInput.oninput = handleSearch;\n searchBtn.onclick = handleSearch;\n\n function displayResults(results) {\n if (results.length === 0) {\n resultsContainer.innerHTML = `<p>No results found.</p>`;\n } else {\n resultsContainer.innerHTML = results.map(result => `\n <div>\n <div class=\"font-thin mb-2\">${result.title}</div>\n <figure>\n <nav class=\"text-center place-items-center\">\n <audio controls class=\"w-full\" preload=\"true\">\n <source src=\"${result.url}\" type=\"${result.mime_type}\">\n Your browser does not support the audio element.\n </audio>\n <button \n class=\"ml-4 font-thin text-xs\" \n onclick=\"\n const audio = document.getElementById('${uniqueId}');\n audio.src = '${result.url}';\n const sources = audio.querySelectorAll('source');\n sources.forEach(source => {\n source.src = this.previousElementSibling.src;\n });\n this.closest('article').scrollTop = 0;\n \"\n >\n Select\n </button>\n </nav>\n <figcaption class=\"font-thin text-sm\">\n <span>Artist is \n <a href=\"${result.foreign_landing_url}\" target=\"_blank\">${result.creator}</a>.\n </figcaption>\n </figure>\n </div>\n `).join('');\n \n // Reinitialize audio elements to ensure they work properly\n const audios = resultsContainer.querySelectorAll('audio');\n audios.forEach(audio => {\n const src = audio.querySelector('source').getAttribute('src');\n audio.load(); // Ensure the audio element is fully loaded\n audio.src = src; // Re-set the src to trigger playback readiness\n });\n }\n }\n },\n onConfirm() {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n source = document.getElementById(uniqueId).outerHTML;\n let obj = html2json(source)[0];\n \n saveState();\n // Update properties directly instead of reassigning the whole object\n Object.keys(obj).forEach(key => {\n if (key === \"id\") return;\n layer[key] = obj[key];\n });\n findLayerById(id, project.html).layer.state.selected = null;\n findLayerById(id, project.html).layer.state.selected = true;\n saveState();\n }\n });\n }\n });\n}\nwindow.searchOpenverseAudio = async query => {\n const url = `https://api.openverse.org/v1/audio?q=${encodeURIComponent(query)}`;\n const response = await fetch(url);\n if (response.ok) {\n const data = await response.json();\n return data.results;\n } else {\n console.error(\"API request failed:\", response.status);\n return [];\n }\n}\nwindow.updateMediaSource = async (event, type, element) => {\n const file = event.target.files[0];\n if (!file) return; // If no file selected, return\n\n try {\n // Check if the file is an SVG\n if (type === \"svg\") {\n // Read the file content as text (SVG markup)\n const svgCode = await file.text();\n \n // Update target with SVG code\n document.getElementById('vl61t8366').querySelector('svg').outerHTML = svgCode;\n document.getElementById('vl61t8366').querySelector('svg').setAttribute('id', 'p8gnvn4o7');\n } else {\n // Handle non-SVG and non-image files (e.g., convert to base64)\n const base64String = await fileToBase64(file);\n element.setAttribute('src', base64String);\n }\n } catch (error) {\n console.error('Error reading file:', error);\n }\n}\nwindow.checkApiConnection = async () => {\n try {\n const response = await fetch('https://api.iconify.design/collections');\n if (response.ok) {\n return true;\n }\n } catch (error) {\n console.error(\"API connection failed:\", error);\n }\n return false;\n}\nwindow.fetchIconifySvg = async icon => {\n const hosts = [\n `https://api.iconify.design/${icon}.svg`,\n `https://api.simplesvg.com/${icon}.svg`,\n `https://api.unisvg.com/${icon}.svg`\n ];\n\n for (const url of hosts) {\n try {\n const response = await fetch(url, { timeout: 750 });\n if (response.ok) {\n return await response.text();\n } else if (response.status === 404) {\n console.warn(`Icon not found at ${url}`);\n continue;\n }\n } catch (error) {\n console.warn(`Failed to fetch from ${url}:`, error);\n }\n }\n\n throw new Error(\"Icon not found or all hosts are unreachable.\");\n}\nwindow.searchIcons = async query => {\n const searchUrl = `https://api.iconify.design/search?query=${encodeURIComponent(query)}`;\n try {\n const response = await fetch(searchUrl);\n if (response.ok) {\n const data = await response.json();\n return data.icons || [];\n } else {\n console.error(\"Failed to fetch icon search results.\");\n }\n } catch (error) {\n console.error(\"Error during icon search:\", error);\n }\n return [];\n}\nwindow.updateSvgMedia = async (id, type) => {\n let title = \"Replace the SVG\";\n const target = findLayerById(id, project.html).layer;\n let display = \"\";\n const elm = document.createElement(\"template\");\n elm.innerHTML = json2html(target);\n const element = elm.content.firstElementChild;\n if (element) {\n display = `<label for=\"ixkq65jma\">${element.outerHTML}</label>`;\n }\n elm.remove();\n\n let modalContent = `<style>\n #vl61t8366 svg {\n cursor: pointer;\n width: 100%;\n height: 100%;\n }\n </style>\n <div id=\"vl61t8366\" class=\"p-4 text-center grid grid-cols-1 gap-4 place-items-center\">\n <figure>\n ${display}\n <figcaption>\n <span id=\"modal-description\">Checking connection...</span>\n </figcaption>\n </figure>\n <input id=\"ixkq65jma\" type=\"file\" name=\"image\" accept=\".svg\" class=\"hidden\" onchange=\"updateMediaSource(event, '${type}', document.getElementById('vl61t8366'))\">\n <input type=\"search\" id=\"iconSearch\" placeholder=\"Search for an icon\" class=\"w-full p-2 border rounded-full mt-4 hidden\" oninput=\"handleIconSearch(event)\">\n <div id=\"iconResults\" class=\"grid grid-cols-4 gap-4 mt-4 w-full hidden\"></div>\n </div>`;\n\n Modal.render({\n title: title,\n content: modalContent,\n onLoad: async function() {\n const apiConnection = await checkApiConnection();\n const descriptionElement = document.getElementById('modal-description');\n const searchElement = document.getElementById('iconSearch');\n const iconResults = document.getElementById('iconResults');\n\n if (navigator.onLine && apiConnection) {\n descriptionElement.innerHTML = `<span>Api courtesy of \n <a href=\"https://iconify.design/\" target=\"_blank\">Iconify</a>.\n </span>`;\n searchElement.classList.remove('hidden');\n searchElement.focus();\n iconResults.classList.remove('hidden');\n } else {\n descriptionElement.textContent = 'Upload your SVG:';\n }\n },\n onConfirm: function() {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer && layer.tag === \"svg\") {\n const selectedSvg = document.getElementById('vl61t8366').querySelector('svg');\n if (selectedSvg) {\n let obj = html2json(selectedSvg.outerHTML)[0];\n saveState();\n Object.keys(obj).forEach(key => {\n if (key === \"id\") return;\n layer[key] = obj[key];\n });\n findLayerById(id, project.html).layer.state.selected = null;\n findLayerById(id, project.html).layer.state.selected = true;\n saveState();\n }\n }\n });\n }\n });\n}\nwindow.handleIconSearch = async event => {\n const query = event.target.value;\n const iconResultsElement = document.getElementById('iconResults');\n if (query.length > 2) {\n const icons = await searchIcons(query);\n \n iconResultsElement.innerHTML = ''; // Clear previous results\n\n for (const icon of icons) {\n try {\n const iconUrl = `https://api.iconify.design/${icon}.svg`;\n getFile(iconUrl, (error, svgContent) => {\n if (error) {\n console.error(\"Failed to fetch SVG:\", error);\n } else {\n const iconDiv = document.createElement('div');\n iconDiv.innerHTML = svgContent;\n iconDiv.onclick = () => {\n const selectedSvgElement = document.querySelector(\"#vl61t8366 label svg\");\n if (selectedSvgElement) {\n selectedSvgElement.outerHTML = svgContent; // Replace the outerHTML with the selected SVG\n iconDiv.closest('article').scrollTop = 0;\n }\n };\n iconResultsElement.appendChild(iconDiv);\n }\n });\n } catch (error) {\n console.warn(`Failed to fetch SVG for icon: ${icon}`, error);\n }\n }\n } else {\n const iconResultsElement = document.getElementById('iconResults');\n iconResultsElement.innerHTML = '';\n }\n}\nwindow.selectIcon = svgContent => {\n iconContainer.innerHTML = svgContent;\n}\nwindow.copyToClipboard = text => {\n navigator.clipboard.writeText(text).then(function() {\n }).catch(function(error) {\n console.error('Failed to copy text: ', error);\n });\n}\nwindow.collectComponents = layers => {\n const existingNames = new Set(project.components.map(comp => comp.name));\n\n layers.forEach(layer => {\n if (layer.isComponent) {\n // Check if the layer name already exists\n if (!existingNames.has(layer.name)) {\n const clone = { ...layer };\n let uniqueId = generateId();\n clone.id = uniqueId;\n\n project.components.push({\n id: uniqueId,\n name: layer.name,\n code: clone\n });\n\n // Add the new name to the set\n existingNames.add(layer.name);\n }\n }\n });\n}\nwindow.addComponent = () => {\n if (data.selectedLayerIds.length === 0) return;\n \n saveState(); // Save state before making changes\n\n data.selectedLayerIds.forEach(id => {\n const result = findLayerById(id, project.html);\n\n if (result) {\n const { layer } = result;\n const clone = { ...layer };\n clone.id = generateId();\n\n const newHtml = json2html(clone);\n\n // Check for duplicate name or HTML\n const isDuplicate = project.components.some(comp =>\n comp.name === clone.name || comp.code === newHtml\n );\n\n if (!isDuplicate) {\n project.components.push({\n name: clone.name,\n code: newHtml\n });\n } else {\n console.warn(`Component with name \"${clone.name}\" or identical HTML already exists.`);\n }\n } else {\n console.error('Layer not found for ID:', id);\n }\n });\n\n saveState(); // Save state after making changes\n}\nwindow.deleteComponent = index => {\n if (index >= 0 && index < project.components.length) {\n project.components.splice(index, 1);\n saveState(); // Save state after making changes\n } else {\n console.error('Invalid index:', index);\n }\n}\nwindow.commandPalette = () => {\n let buttonClass = `text-xs w-auto px-3 py-2 m-0 capitalize rounded-md bg-transparent border ${project.dark ? 'border-gray-600' : 'border-gray-400'}`;\n let commands = {\n \"fold all\": \"f\",\n \"unfold all\": \"u\",\n \"hide all\": \"h\",\n \"show all\": \"s\",\n \"empty children\": \"e\",\n \"clear all styles\": \"cas\"\n };\n\n // Generate buttons HTML from the commands object\n let buttonsHtml = Object.keys(commands).map(command => {\n return `<button \n class=\"${buttonClass}\"\n style=\"color: unset;\"\n onclick=\"\n const emuqfdoxq = document.getElementById('emuqfdoxq').checked;\n executeQuery('${commands[command]}', emuqfdoxq);\n document.querySelector('dialog[open]').querySelector('header > button').onclick();\n \"\n>\n ${command}\n</button>`;\n }).join(''); // Join the array into a single string\n\n const guide = `<div class=\"font-thin text-xs\">\n - <strong class=\"text-sm\">Enter a Query</strong>: <br/>\n Input a query in the format <code>t=tagname</code>, <code>t=.classname</code>, <code>t=[attribute=value]</code>, or <code>t=[id]</code>. You can also use pseudo-classes with the <code>t=</code> prefix like <code>t=.classname:first-child</code>.<br/><br/>\n\n - <strong class=\"text-sm\">Multiple Queries</strong>: <br/>\n Separate multiple queries with a comma (e.g., <code>t=li, t=.name</code>).<br/><br/>\n\n - <strong class=\"text-sm\">Pseudo-Classes</strong>: <br/>\n You can use pseudo-classes to refine your selection. Supported pseudo-classes include:<br/>\n <ul class=\"mt-4\">\n <li><code>:first-child</code> - Selects the first child element.</li>\n <li><code>:last-child</code> - Selects the last child element.</li>\n <li><code>:nth-child(n)</code> - Selects the nth child element.</li>\n <li><code>:nth-last-child(n)</code> - Selects the nth last child element.</li>\n <li><code>:only-child</code> - Selects elements that are the only child.</li>\n <li><code>:empty</code> - Selects elements without children.</li>\n <li><code>:first-of-type</code> - Selects the first element of its type.</li>\n <li><code>:last-of-type</code> - Selects the last element of its type.</li>\n <li><code>:nth-of-type(n)</code> - Selects the nth element of its type.</li>\n <li><code>:nth-last-of-type(n)</code> - Selects the nth last element of its type.</li>\n <li><code>:only-of-type</code> - Selects elements of its type that are the only one.</li>\n </ul><br/>\n\n - <strong class=\"text-sm\">Targeting Selections</strong>: <br/>\n Use the <code>t=</code> prefix to specify the type of selection:<br/>\n <ul class=\"mt-4\">\n <li><code>t=tagname</code> - Targets elements with the specified tag.</li>\n <li><code>t=.classname</code> - Targets elements with the specified class.</li>\n <li><code>t=[attribute]</code> - Targets elements with the specified attribute (without defining its value).</li>\n <li><code>t=[attribute=value]</code> - Targets elements with the specified attribute and value.</li>\n <li><code>t=.classname:pseudo-class</code> - Targets elements with the specified class and pseudo-class.</li>\n </ul><br/>\n\n - <strong class=\"text-sm\">Operation Prefixes</strong>: <br/>\n Use the following prefixes to perform operations on the targeted elements:<br/>\n <ul class=\"mt-4\">\n <li><code>r=</code> - Remove targeted elements. For example, <code>r=tagname</code> will remove all elements matching the specified tag.</li>\n <li><code>e=</code> - Empty all children from the targeted elements. For example, <code>e=.name</code> will empty the children of all elements with the class <code>name</code>.</li>\n <li><code>c=</code> - Apply operations to the children of the targeted elements. For example, <code>c=tagname</code> will select the children of currently selected elements that match the specified tag.</li>\n <li><code>mv=</code> - Move targeted elements. For example, <code>mv=tagname</code> will cut the currently selected elements and paste them as elements matching the specified tag.</li>\n <li><code>rs=</code> - Remove styles from the project as well as targeted elements. For example, <code>rs=styleName</code> will clear the specified style from all elements that currently have it applied.</li>\n </ul><br/>\n\n - <strong class=\"text-sm\">Special Commands</strong>: <br/>\n Use special commands to quickly fold, unfold, hide, show all layers, or empty all children from selections. The supported commands are:<br/>\n <ul class=\"mt-4\">\n <li><code>f</code> - Collapse all layers.</li>\n <li><code>u</code> - Uncollapse all layers.</li>\n <li><code>h</code> - Hide all layers.</li>\n <li><code>s</code> - Show all layers.</li>\n <li><code>cas</code> - Clear all styles.</li>\n <li><code>e</code> - Empty all children from selections.</li>\n </ul>\n If no query is provided and you click \"Confirm\", all current selections will be cleared automatically. (You can also do this using the shortcut <code>Shift+Ctrl+A</code> on Windows or <code>Shift+Cmd+A</code> on Mac)<br/><br/>\n\n - <strong class=\"text-sm\">Replace Current Selection</strong>: <br/>\n Toggle the switch to decide whether to replace the current selection or add to it.<br/>\n You can also hold the <code>Ctrl</code> key on Windows (<code>Cmd</code> key on Mac) to do this as well to target replacing current selection.<br/><br/>\n\n - <strong class=\"text-sm\">Execute</strong>: <br/>\n Press Enter to run the command or query.<br/><br/>\n\n - <strong class=\"text-sm\">Close</strong>: <br/>\n The palette will close automatically after executing a command.<br/>\n You can also open it using the shortcut <code>Ctrl+Shift+P</code> on Windows or <code>Cmd+Shift+P</code> on Mac.<br/>\n You can also use the <code>Esc</code> key to close every opened dialog.\n</div>`;\n\n // Check if data.commandPalette is true\n if (!data.commandPalette) {\n data.commandPalette = true;\n\n // Modal rendering code\n Modal.render({\n title: \"Command Palette...\",\n content: `\n <div class=\"p-4 grid grid-cols-1 gap-4\">\n <input\n id=\"olphbh94a\"\n type=\"text\"\n placeholder=\"Enter a query (e.g., tag=li:first-child, class=name)...\"\n class=\"rounded-full border p-2 flex-grow\"\n style=\"margin: 0;\"\n onkeydown=\"\n if (event.key === 'Enter') {\n executeQuery(this.value.trim(), data.replaceCurrentSelection);\n document.querySelector('dialog[open]').querySelector('header > button').onclick();\n }\n \"\n />\n <div class=\"flex items-center\">\n <input \n type=\"checkbox\" \n role=\"switch\" \n id=\"emuqfdoxq\" \n class=\"mr-2\" \n ${data.replaceCurrentSelection ? 'checked' : ''} \n onchange=\"data.replaceCurrentSelection = !data.replaceCurrentSelection;\"\n />\n <label for=\"emuqfdoxq\" class=\"select-none\">Replace current selection</label>\n </div>\n <hr/>\n <details class=\"flex items-center mb-0\" ${data.commandsOpen ? 'open' : ''} ontoggle=\"\n const detailsElement = this;\n data.commandsOpen = detailsElement.hasAttribute('open');\n \">\n <summary>\n Commands\n </summary>\n <code class=\"grid grid-cols-2 gap-2 mb-0 bg-transparent\">\n ${buttonsHtml}\n </code>\n </details>\n <hr/>\n <details class=\"mb-0\" ${data.commandPaletteGuide ? 'open' : ''} ontoggle=\"\n const detailsElement = this;\n data.commandPaletteGuide = detailsElement.hasAttribute('open');\n \">\n <summary>\n How to use the Command Palette:\n </summary>\n ${guide}\n </details>\n </div>`,\n onLoad() {\n document.getElementById('olphbh94a').focus();\n },\n onClose() {\n data.commandPalette = null;\n },\n onConfirm() {\n const query = document.getElementById('olphbh94a').value.trim();\n executeQuery(query, data.replaceCurrentSelection);\n data.commandPalette = null;\n }\n });\n }\n}\nwindow.updateVersionPart = (part, value) => {\n const versionParts = project.version.split('.');\n if (part === 'major') {\n versionParts[0] = value;\n } else if (part === 'minor') {\n versionParts[1] = value;\n } else if (part === 'patch') {\n versionParts[2] = value;\n }\n project.version = versionParts.join('.');\n}\nwindow.createLayerMap = (layers, map = new Map()) => {\n layers.forEach(layer => {\n // Add the layer to the map\n map.set(layer.id, layer);\n\n // If the layer has children, recursively add them to the map\n if (layer.children && layer.children.length > 0) {\n createLayerMap(layer.children, map);\n }\n });\n\n return map;\n}\n\n// iframe functions\nwindow.resizeCanvas = size => data.selectedSize = size;\nwindow.rotateCanvas = () => {\n const iframe = document.getElementById('previewElm').firstElementChild;\n if (iframe.style.width === '100%') return false;\n\n // Extract current width and height\n let width = parseInt(iframe.style.width);\n let height = parseInt(iframe.style.height);\n\n // Swap width and height\n [width, height] = [height, width];\n data.selectedSize = width+'x'+height;\n}\nwindow.getIframeClientSize = () => {\n const iframe = document.getElementById('iframe');\n if (iframe && iframe.offsetWidth && iframe.offsetHeight) {\n data.iframeWidth = iframe.offsetWidth.toString();\n data.iframeHeight = iframe.offsetHeight.toString();\n }\n}\n\n// save functions\nwindow.handleLogoChange = async event => {\n const file = event.target.files[0];\n if (!file) return; // If no file selected, return\n\n try {\n // Convert file to base64 string\n const base64String = await fileToBase64(file);\n // Update project.logo with base64String\n project.logo = base64String;\n } catch (error) {\n console.error('Error converting image to base64:', error);\n }\n}\nwindow.fileToBase64 = file => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n });\n}\nwindow.importJSON = (obj, callback = null) => {\n if (obj === null) return;\n App.initialRender = true;\n data.selectedLayerIds = [];\n project.name = obj.name;\n project.version = obj.version;\n project.title = obj.title;\n project.description = obj.description;\n project.author = obj.author;\n project.url = obj.url;\n project.logo = obj.logo;\n project.dark = obj.dark;\n project['previewDark'] = ('previewDark' in obj && typeof obj.previewDark === 'boolean') \n ? obj.previewDark \n : true;\n project.pwa = obj.pwa;\n project.activePanel = obj.activePanel;\n \n project.meta = obj.meta;\n project.libraries = obj.libraries;\n project.css = obj.css;\n project.html = obj.html;\n if (obj.components) {\n project['components'] = obj.components;\n collectComponents(project.html);\n }\n data.layerMap = createLayerMap(project.html);\n App.initialRender = null;\n collectSelectedIDs(project.html);\n App.render('#app');\n renderPreview(true);\n\n // Call the callback function if provided\n if (typeof callback === 'function') {\n callback();\n }\n}\nwindow.newProject = () => {\n const obj = {\n name: \"App name\",\n version: \"0.0.1\",\n title: \"An attractive title\",\n description: \"The most attractive description ever!\",\n author: \"Polyrise\",\n url: \"https://michaelsboost.com/\",\n meta: \"\",\n libraries: [],\n css: {\n \"rootVariables\": {},\n \"styles\": {},\n \"animations\": {},\n \"breakpoints\": {}\n },\n components: [],\n html: [],\n logo: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iNTEyIgogICBoZWlnaHQ9IjUxMiIKICAgdmlld0JveD0iMCAwIDEzNS40NjY2NiAxMzUuNDY2NjciCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnMKICAgICBpZD0iZGVmczEiIC8+PGcKICAgICBpZD0iZzI0Ij48cGF0aAogICAgICAgaWQ9InBhdGgyMiIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOiMxMzNhZDQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjk2LjE3NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICBkPSJNIDkuNTgyODc3NSw2Ny43MzMzMzIgViAxMzUuMjAwNTMgTCAyNS4zODc1OTcsMTI2LjAzMTA3IFYgMTA2Ljk2MDQgNjcuNzMzMzMyIFogbSA4NS45Njg5MTE1LDAgLTU3Ljc2OTA4MywzMi4yOTcyNTggdiAxOC44MTA3MyBMIDEyNS44ODIyNCw2Ny43MzMzMzIgWiIgLz48cGF0aAogICAgICAgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2ZpbGw6IzA0YTJmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIgogICAgICAgaWQ9InBhdGgyMyIKICAgICAgIGQ9Im0gNDkuNTY4NTI3LDM1LjgxOTU1MyAtMTYuOTcwNDc4LDkuNzk3OTEgMCwtMTkuNTk1ODIgeiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDIuMjE3MjY1MiwwLDAsMi4xNDcwMjkzLC0zNC40OTUyNjksLTkuMjYyMTYyKSIgLz48cGF0aAogICAgICAgaWQ9InBhdGgyNCIKICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtmaWxsOiM4NjAwZWY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjk2LjE3NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICBkPSJNIDkuNTgyODc3NSwwLjI2NjEzMzYyIFYgNjcuNzMzMzMyIEggMjUuMzg3NTk3IFYgNDIuODU2ODE1IDI4LjMyNjk1MyBsIDcwLjMyNTkzOSwzOS4zMTU5NDYgLTAuMTYxNzQ3LDAuMDkwNDMgaCAzMC4zMzA0NTEgbCAwLjAwMiwtMC4wMDEgeiIgLz48L2c+PC9zdmc+Cg==\",\n lang: \"en\",\n dark: true,\n previewDark: true,\n pwa: false,\n activePanel: 'layers'\n }\n\n let modalContent = `\n <div class=\"p-4\">\n <div class=\"p-4 text-center\">All current data will be lost.</div>\n <div class=\"mb-4 text-center\">\u2728 Click the image to start with a template! \uD83D\uDE80</div>\n <div class=\"grid grid-cols-1 gap-4 place-items-center\">\n <img class=\"cursor-pointer rounded-md shadow-2xl\" id=\"starter-project\" src=\"imgs/demo.png\" width=\"593\" height=\"335\" loading=\"lazy\">\n </div>\n </div>`;\n\n Modal.render({\n title: \"Are you sure you want to start a new project?\",\n content: modalContent,\n onLoad() {\n // Set up the event listener once the modal is loaded\n document.getElementById('starter-project').onclick = () => {\n fetch('json/bootstrap-landing-page-demo.json')\n .then(response => response.json())\n .then(data => {\n importJSON(data, () => {\n if (document.querySelector('dialog[open]')) {\n document.querySelector('dialog[open]').querySelector('header > button:last-child').onclick();\n }\n if (document.querySelector('dialog[open]')) {\n document.querySelector('dialog[open]').querySelector('header > button:last-child').onclick();\n }\n });\n })\n .catch(error => {\n console.error('Error loading the starter project:', error);\n });\n };\n },\n onConfirm() {\n importJSON(obj);\n data.menuDialog = null;\n }\n });\n};\n\nwindow.emptyStorage = () => {\n Modal.render({\n title: \"Are you sure you want to empty storage?\",\n content: '<div class=\"p-4 text-center\">All current data will be lost.</div>',\n onConfirm() {\n // Clear local storage\n localStorage.removeItem('Polyrise');\n \n // Clear session storage specific to Polyrise (if you use a specific key)\n sessionStorage.removeItem('Polyrise');\n \n // Clear cookies specific to Polyrise\n document.cookie.split(\";\").forEach(function(c) {\n if (c.trim().startsWith('Polyrise')) {\n document.cookie = c.trim().split(\"=\")[0] + \n '=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/';\n }\n });\n \n // Clear service worker caches specific to Polyrise\n if ('caches' in window) {\n caches.keys().then(function(names) {\n names.forEach(function(name) {\n if (name === 'Polyrise-cache') {\n caches.delete(name);\n }\n });\n });\n }\n \n // Unregister service workers specific to Polyrise\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.getRegistrations().then(function(registrations) {\n registrations.forEach(function(registration) {\n if (registration.scope.includes('Polyrise')) {\n registration.unregister();\n }\n });\n });\n }\n \n location.reload();\n }\n });\n}\nwindow.clearAllStorage = () => {\n // Clear local storage\n localStorage.clear();\n\n // Clear session storage\n sessionStorage.clear();\n\n // Clear all cookies\n document.cookie.split(\";\").forEach(function(cookie) {\n const cookieName = cookie.split(\"=\")[0].trim();\n document.cookie = cookieName + '=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/';\n });\n\n // Clear all service workers\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.getRegistrations().then(function(registrations) {\n registrations.forEach(function(registration) {\n registration.unregister();\n });\n });\n }\n\n // Clear all caches\n if ('caches' in window) {\n caches.keys().then(function(names) {\n names.forEach(function(name) {\n caches.delete(name);\n });\n });\n }\n\n // Reload the page\n location.reload();\n}\nwindow.importProject = () => {\n Modal.render({\n title: \"Are you sure you want to load a new project?\",\n content: `<div class=\"p-4 text-center\">All current data will be lost.</div>`,\n onClose: function () {\n data.menuDialog = true;\n },\n onConfirm: function() {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.json';\n\n input.addEventListener('change', (event) => {\n const file = event.target.files[0];\n \n if (!file) {\n console.error('No file selected.');\n return;\n }\n \n const reader = new FileReader();\n \n reader.onload = event => {\n try {\n importJSON(JSON.parse(event.target.result));\n } catch (error) {\n console.error('Error parsing JSON file:', error);\n }\n };\n \n reader.readAsText(file);\n input.remove();\n });\n \n input.click();\n }\n });\n}\nwindow.getFileNameAndType = url => {\n // Extract the file name with extension from the URL\n const fileName = url.substring(url.lastIndexOf('/') + 1);\n \n // Extract the file extension\n const fileExtension = fileName.split('.').pop().toLowerCase();\n \n // Map file extensions to MIME types\n const mimeTypes = {\n 'jpeg': 'image/jpeg',\n 'jpg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'bmp': 'image/bmp',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml',\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'ogg': 'audio/ogg',\n 'mp4': 'video/mp4',\n 'webm': 'video/webm',\n 'ogv': 'video/ogg'\n };\n \n // Get the MIME type based on the file extension\n const fileType = mimeTypes[fileExtension] || 'application/octet-stream';\n \n return {\n fileName,\n fileType\n };\n}\nwindow.fetchResources = obj => {\n try {\n const doc = new DOMParser().parseFromString(json2html(obj.html), 'text/html');\n const body = doc.body;\n\n const imageResources = [];\n const audioResources = [];\n const vectorResources = [];\n const videoResources = [];\n\n let fileCounter = 1;\n\n // Helper function to check if a string is Base64\n function isBase64(str) {\n return str.startsWith('data:') && str.includes('base64,');\n }\n\n // Helper function to extract file type from Base64 string\n function getBase64FileType(str) {\n const mimeMatch = str.match(/^data:(.*);base64,/);\n if (mimeMatch) {\n const mimeType = mimeMatch[1];\n return mimeTypeToExtension(mimeType);\n }\n return 'unknown';\n }\n\n // Helper function to map MIME types to file extensions\n function mimeTypeToExtension(mimeType) {\n const typeMap = {\n // Images\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/gif': 'gif',\n 'image/svg+xml': 'svg',\n 'image/webp': 'webp',\n 'image/tiff': 'tiff',\n 'image/bmp': 'bmp',\n 'image/x-icon': 'ico',\n\n // Audio\n 'audio/mpeg': 'mp3',\n 'audio/wav': 'wav',\n 'audio/ogg': 'ogg',\n 'audio/aac': 'aac',\n 'audio/webm': 'webm',\n 'audio/flac': 'flac',\n\n // Video\n 'video/mp4': 'mp4',\n 'video/webm': 'webm',\n 'video/ogg': 'ogv',\n 'video/avi': 'avi',\n 'video/mpeg': 'mpg',\n 'video/quicktime': 'mov',\n 'video/x-msvideo': 'avi',\n 'video/x-matroska': 'mkv',\n\n // Fallback for unknown types\n 'unknown': 'bin'\n };\n return typeMap[mimeType] || 'bin';\n }\n\n // Helper function to extract file name from URL\n function getFileName(url) {\n return url.substring(url.lastIndexOf('/') + 1);\n }\n\n // Generate a file name for Base64 resources\n function getBase64FileName() {\n return `file-${fileCounter++}`;\n }\n\n // Function to extract and process background images from CSS\n function extractBackgroundImageUrls(css) {\n const urls = [];\n const regex = /background-image\\s*:\\s*url\\(([^)]+)\\)/g;\n let match;\n while ((match = regex.exec(css)) !== null) {\n let url = match[1].replace(/['\"]/g, \"\"); // Remove quotes around URLs\n if (isBase64(url)) {\n const fileType = getBase64FileType(url);\n const fileName = `${getBase64FileName()}.${fileType}`;\n imageResources.push({ url: url, fileName: fileName });\n css = css.replace(url, `../imgs/${fileName}`);\n } else {\n const fileName = getFileName(url);\n imageResources.push({ url: url, fileName: fileName });\n css = css.replace(url, `../imgs/${fileName}`);\n }\n urls.push(url);\n }\n return css;\n }\n\n // Extract image URLs and filenames\n body.querySelectorAll('img').forEach(img => {\n if (img.hasAttribute('src')) {\n const src = img.getAttribute('src');\n\n if (isBase64(src)) {\n const fileType = getBase64FileType(src);\n const fileName = `${getBase64FileName()}.${fileType}`;\n imageResources.push({ url: src, fileName: fileName });\n img.src = `imgs/${fileName}`;\n } else {\n const fileName = getFileName(src);\n imageResources.push({ url: src, fileName: fileName });\n img.src = `imgs/${getFileNameAndType(src).fileName}`;\n }\n }\n\n if (img.hasAttribute('srcset')) {\n img.srcset.split(',').forEach(srcset => {\n const url = srcset.trim().split(' ')[0];\n if (isBase64(url)) {\n const fileType = getBase64FileType(src);\n const fileName = `${getBase64FileName()}.${fileType}`;\n imageResources.push({ url: url, fileName: fileName });\n img.src = `imgs/${fileName}`;\n } else {\n const fileName = getFileName(url);\n imageResources.push({ url: url, fileName: fileName });\n img.src = `imgs/${getFileNameAndType(img.getAttribute('src')).fileName}`;\n }\n });\n }\n });\n\n // Extract audio URLs and filenames\n body.querySelectorAll('audio').forEach(audio => {\n audio.querySelectorAll('source').forEach(source => {\n if (source.hasAttribute('src')) {\n const src = source.getAttribute('src');\n\n if (isBase64(src)) {\n const fileType = getBase64FileType(src);\n const fileName = `${getBase64FileName()}.${fileType}`;\n audioResources.push({ url: src, fileName: fileName });\n source.src = `audios/${fileName}`;\n } else {\n const fileName = getFileName(src);\n audioResources.push({ url: src, fileName: fileName });\n source.src = `audios/${getFileNameAndType(src).fileName}`;\n }\n }\n });\n });\n\n // Extract vectors\n body.querySelectorAll('svg').forEach(svg => {\n vectorResources.push({ content: svg.outerHTML, fileName: `vector-${vectorResources.length + 1}.svg` });\n });\n\n // Extract video URLs and filenames\n body.querySelectorAll('video').forEach(video => {\n video.querySelectorAll('source').forEach(source => {\n if (source.hasAttribute('src')) {\n const src = source.getAttribute('src');\n\n if (isBase64(src)) {\n const fileType = getBase64FileType(src);\n const fileName = `${getBase64FileName()}.${fileType}`;\n videoResources.push({ url: src, fileName: fileName });\n source.src = `vids/${fileName}`;\n } else {\n const fileName = getFileName(src);\n videoResources.push({ url: src, fileName: fileName });\n source.src = `vids/${getFileNameAndType(src).fileName}`;\n }\n }\n });\n });\n\n // Process CSS background images\n const css = json2css(obj.css) || '';\n const updatedCss = extractBackgroundImageUrls(css);\n const stylesObj = updatedCss;\n body.querySelectorAll('style').forEach(style => style.remove());\n\n return {\n html: doc.body.innerHTML,\n stylesObj,\n imageResources,\n audioResources,\n vectorResources,\n videoResources\n };\n } catch (error) {\n console.error('Error fetching resources:', error);\n return null; // Or handle the error in an appropriate way\n }\n}\nwindow.getBase64Media = async mediaUrl => {\n const response = await fetch(mediaUrl);\n const blob = await response.blob();\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result.split(',')[1]);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\nwindow.renderStyles = styles => {\n let css = '';\n\n // Define :root variables\n css += `:root {\\n`;\n for (const [variable, value] of Object.entries(styles.rootVariables || {})) {\n css += ` --${variable}: ${value};\\n`;\n }\n css += '}\\n';\n\n // Define styles for each class\n for (const [classId, style] of Object.entries(styles.styles)) {\n if (!style || (!Object.keys(style.variables || {}).length && \n !Object.keys(style.base || {}).length && \n !Object.keys(style.pseudos || {}).length && \n !Object.keys(style.animations || {}).length && \n !Object.keys(style.breakpoints || {}).length)) {\n continue; // Skip empty styles\n }\n const variables = style.variables || {};\n const baseStyles = style.base || {};\n const pseudos = style.pseudos || [];\n const animations = style.animations || {};\n const breakpoints = style.breakpoints || {};\n\n if (classId === \"html\" || classId === \"body\") {\n css += `${classId} {\\n`;\n } else {\n css += `.${classId} {\\n`;\n }\n \n for (const [variable, value] of Object.entries(variables)) {\n css += ` --${variable}: ${value};\\n`;\n }\n for (const [property, value] of Object.entries(baseStyles)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += '}\\n';\n\n for (const { selector, styles: pseudoStyles } of pseudos) {\n css += `.${classId}${selector} {\\n`;\n for (const [property, value] of Object.entries(pseudoStyles)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += '}\\n';\n }\n\n for (const [animationName, animation] of Object.entries(animations)) {\n css += `@keyframes ${animationName} {\\n`;\n for (const [key, frameStyles] of Object.entries(animation.keyframes)) {\n css += ` ${key} {\\n`;\n for (const [property, value] of Object.entries(frameStyles)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += ' }\\n';\n }\n css += '}\\n';\n\n css += `.${classId} {\\n`;\n for (const [property, value] of Object.entries(animation.properties)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += '}\\n';\n }\n\n for (const [breakpoint, breakpointStyles] of Object.entries(breakpoints)) {\n css += `@media (max-width: ${breakpoint}) {\\n`;\n css += ` .${classId} {\\n`;\n for (const [variable, value] of Object.entries(breakpointStyles.variables || {})) {\n css += ` --${variable}: ${value};\\n`;\n }\n for (const [property, value] of Object.entries(breakpointStyles.base || {})) {\n css += ` ${property}: ${value};\\n`;\n }\n css += ' }\\n';\n\n for (const { selector, styles: pseudoStyles } of breakpointStyles.pseudos || []) {\n css += ` .${classId}${selector} {\\n`;\n for (const [property, value] of Object.entries(pseudoStyles)) {\n css += ` ${property}: ${value};\\n`;\n }\n css += ' }\\n';\n }\n\n css += '}\\n';\n }\n }\n\n return css;\n}\nwindow.downloadJSON = async () => {\n try {\n await loadScript(\"libraries/jszip/FileSaver.min.js\");\n let blob = new Blob([JSON.stringify(project, null, 2)], {type: \"application/json\"});\n saveAs(blob, `${project.name.split(' ').join('').toLowerCase()}-Polyrise.json`);\n\n } catch (error) {\n console.error('Error:', error);\n } finally {\n // Clean up scripts after use\n removeScript(\"libraries/jszip/FileSaver.min.js\");\n }\n}\nwindow.downloadQuickCommands = () => {\n const colorMappings = {\n 'black': '#000000',\n 'white': '#ffffff',\n 'gray-50': '#f9fafb',\n 'gray-100': '#f3f4f6',\n 'gray-200': '#e5e7eb',\n 'gray-300': '#d1d5db',\n 'gray-400': '#9ca3af',\n 'gray-500': '#6b7280',\n 'gray-600': '#4b5563',\n 'gray-700': '#374151',\n 'gray-800': '#1f2937',\n 'gray-900': '#111827',\n 'red-50': '#fef2f2',\n 'red-100': '#fee2e2',\n 'red-200': '#fecaca',\n 'red-300': '#fca5a5',\n 'red-400': '#f87171',\n 'red-500': '#ef4444',\n 'red-600': '#dc2626',\n 'red-700': '#b91c1c',\n 'red-800': '#991b1b',\n 'red-900': '#7f1d1d',\n 'yellow-50': '#fefce8',\n 'yellow-100': '#fef9c3',\n 'yellow-200': '#fef08a',\n 'yellow-300': '#fde047',\n 'yellow-400': '#facc15',\n 'yellow-500': '#eab308',\n 'yellow-600': '#ca8a04',\n 'yellow-700': '#a16207',\n 'yellow-800': '#854d0e',\n 'yellow-900': '#713f12',\n 'green-50': '#f0fdf4',\n 'green-100': '#dcfce7',\n 'green-200': '#bbf7d0',\n 'green-300': '#86efac',\n 'green-400': '#4ade80',\n 'green-500': '#22c55e',\n 'green-600': '#16a34a',\n 'green-700': '#15803d',\n 'green-800': '#166534',\n 'green-900': '#14532d',\n 'blue-50': '#eff6ff',\n 'blue-100': '#dbeafe',\n 'blue-200': '#bfdbfe',\n 'blue-300': '#93c5fd',\n 'blue-400': '#60a5fa',\n 'blue-500': '#3b82f6',\n 'blue-600': '#2563eb',\n 'blue-700': '#1d4ed8',\n 'blue-800': '#1e40af',\n 'blue-900': '#1e3a8a',\n 'indigo-50': '#eef2ff',\n 'indigo-100': '#e0e7ff',\n 'indigo-200': '#c7d2fe',\n 'indigo-300': '#a5b4fc',\n 'indigo-400': '#818cf8',\n 'indigo-500': '#6366f1',\n 'indigo-600': '#4f46e5',\n 'indigo-700': '#4338ca',\n 'indigo-800': '#3730a3',\n 'indigo-900': '#312e81',\n 'purple-50': '#f5f3ff',\n 'purple-100': '#ede9fe',\n 'purple-200': '#ddd6fe',\n 'purple-300': '#c4b5fd',\n 'purple-400': '#a78bfa',\n 'purple-500': '#8b5cf6',\n 'purple-600': '#7c3aed',\n 'purple-700': '#6d28d9',\n 'purple-800': '#5b21b6',\n 'purple-900': '#4c1d95',\n 'pink-50': '#fdf2f8',\n 'pink-100': '#fce7f3',\n 'pink-200': '#fbcfe8',\n 'pink-300': '#f9a8d4',\n 'pink-400': '#f472b6',\n 'pink-500': '#ec4899',\n 'pink-600': '#db2777',\n 'pink-700': '#be185d',\n 'pink-800': '#9d174d',\n 'pink-900': '#831843'\n }; \n\n function updateBorderColors(data) {\n const updatedData = {};\n for (const [key, value] of Object.entries(data)) {\n if (key.startsWith('border-') && !key.includes('-opacity')) {\n const colorKey = key.split('-').slice(1).join('-');\n const color = colorMappings[colorKey] || 'transparent';\n updatedData[key] = `--tw-border-opacity: 1; border-top-color: ${color}; border-right-color: ${color}; border-bottom-color: ${color}; border-left-color: ${color};`;\n } else {\n updatedData[key] = value;\n }\n }\n return updatedData;\n }\n \n\n window.saveAsJson = async (data, filename) => {\n try {\n await loadScript(\"libraries/jszip/FileSaver.min.js\");\n const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });\n saveAs(blob, filename);\n \n } catch (error) {\n console.error('Error:', error);\n } finally {\n // Clean up scripts after use\n removeScript(\"libraries/jszip/FileSaver.min.js\");\n }\n }\n\n // Generate the CSS quick commands and save to a JSON file\n generateCssQuickCommands('libraries/tailwind/tailwind-mod.min.css').then(cssQuickCommands => {\n const updatedData = updateBorderColors(cssQuickCommands);\n saveAsJson(updatedData, 'cssQuickCommands.json');\n });\n}\nwindow.getFile = async (url, callback = null) => {\n try {\n const response = await fetch(url);\n if (!response.ok) throw new Error(\"Network response was not ok\");\n const fileContent = await response.text();\n if (callback && typeof callback === 'function') {\n callback(null, fileContent); // Call the callback with the file content\n } else {\n return fileContent; // Return the file content\n }\n } catch (error) {\n console.warn(\"Request error:\", error);\n if (callback && typeof callback === 'function') {\n callback(error, null); // Call the callback with the error\n } else {\n throw error; // Re-throw to handle in caller\n }\n }\n}\nwindow.minifyCSS = source => {\n // Convert the source to a string if it isn't one\n source = String(source);\n // Remove comments\n let minified = source.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n // Remove whitespace and newlines\n minified = minified.replace(/\\s{2,}/g, ' ').replace(/\\n/g, '');\n // Remove spaces around selectors, properties, and values\n minified = minified.replace(/\\s*([{}:;])\\s*/g, '$1');\n // Remove the last semicolon before the closing brace\n minified = minified.replace(/;}/g, '}');\n return minified;\n}\nwindow.downloadProject = async () => {\n try {\n await loadScripts([\n \"libraries/jszip/jszip.min.js\",\n \"libraries/jszip/FileSaver.min.js\"\n ]);\n\n // Extract srcset URLs\n const iframe = document.getElementById('iframe');\n if (!iframe) return;\n const idoc = iframe.contentDocument || iframe.contentWindow.document;\n const { html, stylesObj, imageResources, audioResources, vectorResources, videoResources } = fetchResources(project);\n\n const zip = new JSZip();\n\n // Project file\n zip.file(`${project.name.split(' ').join('').toLowerCase()}-Polyrise.json`, JSON.stringify(project, null, 2));\n\n // kodeWeave project file\n const kodeWeaveProject = {\n name: project.name,\n version: project.version,\n title: project.title,\n description: project.description,\n author: project.author,\n url: project.url,\n meta: project.meta,\n libraries: project.libraries,\n html_pre_processor: \"html\",\n css_pre_processor: \"css\",\n javascript_pre_processor: \"javascript\",\n html: json2html(project.html),\n css: json2css(project.css),\n javascript: '',\n logo: project.logo,\n console: false,\n dark: project.dark,\n module: true,\n autorun: true,\n pwa: project.pwa,\n preview: true,\n activePanel: 'html',\n columns: false,\n columnsRight: true\n };\n zip.file(`${project.name.split(' ').join('').toLowerCase()}-kodeWeave.json`, JSON.stringify(kodeWeaveProject, null, 2));\n\n let licenseStr = `The MIT License (MIT)\nCopyright (c) ${new Date().getFullYear()} ${project.author}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.`;\n zip.file(\"LICENSE.md\", licenseStr);\n\n let READMEStr = `# ${project.name}\n\n**Description:**\n${project.description}\n\n**Built With ${app.name}!**\nThis site was made with [${app.name}](https://michaelsboost.com/${app.name.toString().split(' ').join('-')}/).\n\n**${app.name} Description:**\n${app.summary} ${app.description}\n\n**Website:**\n[${app.name}](https://michaelsboost.com/${app.name.toString().split(' ').join('-')}/)`;\n zip.file(\"README.md\", READMEStr);\n\n let cssContent = '';\n let cssBuildItems = [];\n let cssBuildItemsString = '';\n let TailwindNoReset = null;\n const promises = project.libraries.map(async library => {\n if (!library.endsWith(['.css', '.js'])) return false;\n const data = await getFile(library);\n const parts = library.split(\"/\");\n const name = parts[parts.length - 1];\n\n // Check if the library is one of the Tailwind files to ignore\n if (name === \"tailwind-mod-noreset.min.js\") {\n TailwindNoReset = true;\n }\n \n // Assuming libraries have .css extensions for simplicity\n if (name.endsWith('.css')) {\n cssContent += data + '\\n';\n cssBuildItems.push(name);\n cssBuildItemsString += `libraries/${name} `;\n zip.folder('libraries').file(name, data);\n }\n \n // Assuming libraries have .js extensions for simplicity\n if (name.endsWith('.js')) {\n zip.folder('libraries').file(name, data);\n }\n });\n await Promise.all(promises);\n\n // Checks css for html\n let cssBuild = '';\n let css4html = '';\n let twFound = '';\n let tailwindDirectives = '';\n let tailwindStyles = '';\n let cssImport = '';\n \n // Find out if user is using tailwind\n if (idoc.getElementById('vyhibnq91')) {\n twFound = true;\n tailwindDirectives = `\n ${!TailwindNoReset ? `@tailwind base;` : ''}\n@tailwind components;\n@tailwind utilities;\n`\n\n if (twFound) {\n cssBuildItems.map(async library => {\n cssImport += `@import '../libraries/${library}';\n`;\n });\n cssImport += tailwindDirectives;\n } else {\n cssImport = cssContent;\n }\n tailwindStyles = idoc.getElementById('vyhibnq91').textContent;\n }\n\n // Extract and join the content of all <style> tags into a single string\n const combinedStyles = Array.from(idoc.body.querySelectorAll('style'))\n .map(style => style.textContent)\n .join('\\n');\n let css = stylesObj + combinedStyles;\n if (tailwindStyles) css += tailwindStyles;\n if (cssContent) {\n css4html = `<link rel=\"stylesheet\" href=\"dist/bundle.css\">\n `;\n cssBuild = `\"build:css\": \"postcss src/bundle.css -o dist/bundle.css\",`;\n zip.file(\"src/bundle.css\", cssImport + css);\n zip.file('dist/bundle.css', minifyCSS(cssContent + tailwindStyles + css));\n } else {\n css4html = `<link rel=\"stylesheet\" href=\"dist/bundle.css\">\n `;\n cssBuild = `\"build:css\": \"postcss src/bundle.css -o dist/bundle.css\",`;\n zip.file(\"src/bundle.css\", css);\n zip.file('dist/bundle.css', minifyCSS(css));\n }\n\n // Tailwind config\n if (twFound) {\n let configCode = `module.exports = {\n content: [\n './**/*.html',\n './src/**/*.js',\n ],\n theme: {\n extend: {},\n },\n plugins: [],\n};`\n zip.file(\"tailwind.config.js\", configCode);\n }\n\n // PostCSS config\n let postcssConfig = `module.exports = {\n plugins: [\n require('postcss-import'),\n require('autoprefixer'),${twFound ? `\n require('tailwindcss'),` : ''}\n require('cssnano')({\n preset: ['default', {\n discardComments: { removeAll: true }, // Remove all comments\n }],\n }),\n ],\n};`;\n zip.file(\"postcss.config.cjs\", postcssConfig);\n\n // Package JSON\n let npmJSON = `{\n \"name\": \"${project.name.split(' ').join('').toLowerCase()}\",\n \"private\": true,\n \"version\": \"${project.version}\",\n \"type\": \"module\",\n \"scripts\": {\n \"build:css\": \"postcss src/bundle.css -o dist/bundle.css\",\n \"build\": \"npm run build:css\",\n \"serve\": \"http-server -c-1 -p 8081\"\n },\n \"dependencies\": {\n \"autoprefixer\": \"^10.4.19\",\n \"cssnano\": \"^7.0.2\",\n \"postcss\": \"^8.4.38\",\n \"postcss-import\": \"^16.1.0\"${twFound ? `,\n \"tailwindcss\": \"^3.4.4\"` : ''}\n }\n}`;\n zip.file(\"package.json\", npmJSON);\n\n // Always include the original logo\n if (project.logo) {\n try {\n let base64Logo = '';\n \n if (project.logo.startsWith('data:')) {\n // If logo is already a data URL, extract base64 part\n base64Logo = project.logo; // Get the base64 part\n } else {\n // Otherwise fetch and convert to base64\n base64Logo = await getBase64Media(project.logo);\n }\n \n // Determine file extension based on MIME type\n let logoType;\n if (project.logo.startsWith('data:image/png')) {\n logoType = 'png';\n } else if (project.logo.startsWith('data:image/jpeg')) {\n logoType = 'jpeg';\n } else if (project.logo.startsWith('data:image/svg+xml')) {\n logoType = 'svg';\n } else {\n console.error('Unsupported logo MIME type:', project.logo);\n return; // Exit or handle error appropriately\n }\n \n const logoFileName = `logo.${logoType}`;\n zip.folder('imgs').file(logoFileName, base64Logo.split(\",\")[1], { base64: true });\n \n // Add icons to manifest.json based on image sizes\n const sizes = ['192x192', '256x256', '384x384', '512x512'];\n const icons = sizes.map(size => ({\n \"src\": `./imgs/logo-${size}.png`,\n \"sizes\": size,\n \"type\": \"image/png\",\n \"purpose\": \"any\"\n }));\n\n // Helper function to create resized images\n const createResizedImage = (size) => {\n return new Promise((resolve, reject) => {\n const canvas = document.createElement('canvas');\n canvas.width = parseInt(size.split('x')[0]);\n canvas.height = parseInt(size.split('x')[1]);\n const ctx = canvas.getContext('2d');\n \n const img = new Image();\n img.src = base64Logo;\n img.onload = function() {\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n const base64Image = canvas.toDataURL('image/png').replace(/^data:image\\/png;base64,/, '');\n zip.folder('imgs').file(`logo-${size}.png`, base64Image, { base64: true });\n resolve();\n };\n img.onerror = reject;\n \n // Clean up canvas element\n canvas.remove();\n });\n };\n \n // Create all resized images\n await Promise.all(sizes.map(createResizedImage));\n \n zip.file(`manifest.json`, JSON.stringify({\n \"theme_color\": \"#13171f\",\n \"background_color\": \"#13171f\",\n \"display\": \"standalone\",\n \"start_url\": \"./index.html\",\n \"lang\": \"en-US\",\n \"name\": project.name,\n \"short_name\": project.name,\n \"description\": project.description,\n \"icons\": icons\n }, null, 2));\n \n } catch (error) {\n console.error('Error adding logo to ZIP:', error);\n return; // Exit method or handle error as needed\n }\n }\n\n // if pwa is enabled\n let swinit = '';\n if (project.pwa) {\n swinit = `\n <script src=\"https://storage.googleapis.com/workbox-cdn/releases/6.4.1/workbox-sw.js\"></script>\n <script>\n // service worker for progressive web app\n if ('serviceWorker' in navigator) {\n window.addEventListener('load', () => {\n navigator.serviceWorker.register('./sw.js')\n })\n }\n </script>`;\n const swjs = `// Service worker code\nimportScripts('https://storage.googleapis.com/workbox-cdn/releases/6.4.1/workbox-sw.js');\n\nconst { registerRoute } = workbox.routing;\nconst { CacheFirst } = workbox.strategies;\n\nconst cacheName = '${project.name.split(' ').join('')}-cache';\n\nworkbox.routing.registerRoute(\n ({ request }) => request.destination === 'script' ||\n request.destination === 'style' ||\n request.destination === 'document' ||\n request.destination === 'image' ||\n request.destination === 'font' ||\n request.destination === 'audio' ||\n request.destination === 'video',\n new CacheFirst({\n cacheName: cacheName,\n plugins: [\n // Any additional plugins can be added here\n ],\n })\n);`\n zip.file(\"sw.js\", swjs);\n }\n\n // Save audio files to ZIP\n if (audioResources.length > 0) {\n const audioFolder = zip.folder('audios');\n try {\n for (const { url, fileName } of audioResources) {\n const base64Audio = await getBase64Media(url);\n audioFolder.file(fileName, base64Audio, { base64: true });\n }\n } catch (error) {\n console.error('Error adding audio to ZIP:', error);\n return;\n }\n }\n\n // Save image files to ZIP\n if (imageResources.length > 0) {\n try {\n for (const { url, fileName } of imageResources) {\n const base64Image = await getBase64Media(url);\n zip.folder('imgs').file(fileName, base64Image, { base64: true });\n }\n } catch (error) {\n console.error('Error adding images to ZIP:', error);\n return;\n }\n }\n\n // Save SVG files to ZIP\n if (vectorResources.length > 0) {\n const svgFolder = zip.folder('svgs');\n try {\n for (const { content, fileName } of vectorResources) {\n svgFolder.file(fileName, content);\n }\n } catch (error) {\n console.error('Error adding SVGs to ZIP:', error);\n return;\n }\n }\n\n // Save video files to ZIP\n if (videoResources.length > 0) {\n const videoFolder = zip.folder('vids');\n try {\n for (const { url, fileName } of videoResources) {\n const base64Video = await getBase64Media(url);\n videoFolder.file(fileName, base64Video, { base64: true });\n }\n } catch (error) {\n console.error('Error adding videos to ZIP:', error);\n return;\n }\n }\n\n // Iterate over each library\n let scriptTags = '';\n let cssTags = '';\n project.libraries.forEach(library => {\n if (library.endsWith('.js')) {\n scriptTags += `<script src=\"${library}\"></script>\\n `;\n } else {\n // Assuming it's a Google font\n cssTags += `<link href=\"${library}\" rel=\"stylesheet\">\\n `;\n }\n });\n \n // Add index.html\n const testHtmlContent = `<!DOCTYPE html>\n<html lang=\"en\" data-theme=\"${project.dark ? 'dark' : 'light'}\">\n <head>\n <title>${project.title}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ${cssTags}${css4html}${project.meta ? `${project.meta}\\n ` : ''}${scriptTags ? scriptTags : ''}\n \n \n \n${json2html(project.html).replace(/]*>[\\s\\S]*?<\\/style>/gi, '')}\n\n \n`;\n zip.file('test.html', testHtmlContent);\n const indexHtmlContentCompiled = `\n\n \n ${project.title}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ${cssTags}${css4html}${project.meta ? `${project.meta}\\n ` : ''}${scriptTags ? scriptTags : ''}\n \n \n \n${html}\n\n${(project.pwa ? swinit : '')}\n\n \n`;\n zip.file('index.html', indexHtmlContentCompiled);\n\n // Generate the ZIP file\n const blob = await zip.generateAsync({ type: 'blob' });\n saveAs(blob, `${project.name.toLowerCase().split(' ').join('')}.zip`);\n \n // Clear all arrays after saving\n imageResources.length = audioResources.length = vectorResources.length = videoResources.length = 0;\n } catch (error) {\n console.error('Error:', error);\n } finally {\n // Clean up scripts after use\n const scriptsToRemove = [\n 'libraries/jszip/FileSaver.min.js',\n 'libraries/jszip/jszip.min.js'\n ];\n\n removeScripts(scriptsToRemove);\n }\n}\nwindow.share = async () => {\n try {\n if (navigator.onLine) {\n const shareProject = {\n title: project.title,\n description: project.description,\n head: project.meta,\n html: `\n \n${json2html(project.html)}`,\n html_pre_processor: \"none\",\n css: `/* This site was made with ${app.name}: ${app.summary} */\n\n${json2css(project.css)}`,\n css_pre_processor: \"none\",\n css_external: project.libraries.filter(lib => lib.endsWith('.css')).join(';'),\n css_starter: \"neither\",\n css_prefix: \"neither\",\n js_external: project.libraries.filter(lib => lib.endsWith('.js')).join(';'),\n editors: '111',\n layout: 'left'\n };\n\n // Stringify the JSON object and escape quotes\n const JSONstring = JSON.stringify(shareProject)\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\n // Create form element\n const form = `\n
    \n \n \n
    `;\n\n // Append form to the document body and submit\n document.body.insertAdjacentHTML('beforeend', form);\n document.querySelector('form').submit();\n document.querySelector('form').remove();\n } else {\n Modal.render({\n title: \"Unable to share!\",\n content: `
    No internet connection!
    `\n });\n }\n } catch (error) {\n console.error('Error sharing project:', error);\n }\n}\nwindow.screenshot = async () => {\n const iframe = document.getElementById('iframe');\n const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;\n\n try {\n await loadScripts([\n \"libraries/html2canvas/html2canvas.min.js\",\n \"libraries/jszip/FileSaver.min.js\"\n ]);\n \n html2canvas(iframeDocument.documentElement).then(canvas => {\n const context = canvas.getContext('2d');\n const videoElements = iframeDocument.getElementsByTagName('video');\n\n // Draw video elements\n Array.from(videoElements).forEach(video => {\n const { currentTime, paused, volume } = video;\n\n // Set volume to 0 for the screenshot process\n video.volume = 0;\n\n // Draw the video frame\n if (!paused) video.pause();\n context.drawImage(video, video.offsetLeft, video.offsetTop, video.clientWidth, video.clientHeight);\n\n // Restore the original volume and playback state\n video.volume = volume;\n video.currentTime = currentTime;\n if (!paused) video.play();\n });\n\n // Convert canvas to Blob\n canvas.toBlob(blob => {\n // Save the Blob using FileSaver.js\n saveAs(blob, 'screenshot.png');\n }, 'image/png');\n }).catch(error => {\n console.error('Error taking screenshot:', error);\n });\n } catch (error) {\n console.error('Error:', error);\n } finally {\n // Clean up scripts after use\n removeScript(\"../libraries/html2canvas/html2canvas.min.js\");\n removeScript(\"../libraries/jszip/FileSaver.min.js\");\n }\n}\nwindow.createBlobURL = (content, type) => {\n const blob = new Blob([content], { type });\n return URL.createObjectURL(blob);\n}\nwindow.renderPreview = (forceRun = false) => {\n const iframe = document.getElementById('iframe');\n if (!iframe) return;\n\n let scriptTags = '';\n let cssTags = '';\n project.libraries.forEach(library => {\n if (library.endsWith('.js')) {\n scriptTags += `\\n `;\n } else if (library.endsWith('.css')) {\n cssTags += `\\n `;\n } else {\n cssTags += `\\n `;\n }\n });\n\n let css = json2css(project.css);\n\n const iframeSrc = `\n \n ${project.title}\n \n \n \n \n ${project.meta ? project.meta : ''}\n ${cssTags}\n \n ${scriptTags ? scriptTags : ''}\n \n \n\n${json2html(project.html)}\n \n \n`;\nconst newHtmlBlobURL = createBlobURL(iframeSrc, 'text/html');\n\n // Create a new temporary iframe to compare\n const parser = new DOMParser();\n const doc = parser.parseFromString(iframeSrc, 'text/html');\n const idoc = iframe.contentDocument || iframe.contentWindow.document;\n\n if (forceRun) {\n iframe.setAttribute('src', newHtmlBlobURL);\n } else {\n diffNodes(idoc.documentElement, doc.documentElement);\n }\n}\nwindow.detectOperatingSystem = () => {\n const userAgent = navigator.userAgent || navigator.platform;\n\n // Check for Mac OS\n const isMac = /Macintosh|MacIntel|MacPPC|Mac68K/.test(userAgent);\n\n // Check for Windows\n const isWindows = /Win32|Win64|Windows|WinCE/.test(userAgent);\n\n // Check for Linux\n const isLinux = /Linux/.test(userAgent) && !isWindows;\n\n if (isMac) {\n return 'Mac';\n } else if (isWindows) {\n return 'Windows';\n } else if (isLinux) {\n return 'Linux';\n } else {\n return 'unknown';\n }\n}\n\n// Diffing algorithm to update ui when changes occur\nwindow.diffNodes = (oldNode, newNode) => {\n if (!oldNode || !newNode) {\n return;\n }\n\n // Skip nodes that are marked with `data-ignore-diff`\n if (oldNode?.getAttribute && oldNode.hasAttribute('data-ignore-diff')) {\n return;\n }\n\n // Check if nodes are iframe elements\n if (oldNode.nodeName === 'IFRAME' && newNode.nodeName === 'IFRAME') {\n const acceptableIframeAttributes = ['id', 'title', 'class', 'style', 'sandbox'];\n // Compare acceptable attributes only\n acceptableIframeAttributes.forEach(attr => {\n if (oldNode.getAttribute(attr) !== newNode.getAttribute(attr)) {\n oldNode.setAttribute(attr, newNode.getAttribute(attr));\n }\n });\n\n const oldSrcdoc = oldNode.getAttribute('srcdoc');\n const newSrcdoc = newNode.getAttribute('srcdoc');\n // Ignore srcdoc attribute if it hasn't changed\n if (oldSrcdoc === newSrcdoc) return;\n return;\n }\n\n // If nodes are different types, replace the old node\n if (oldNode.nodeName !== newNode.nodeName) {\n oldNode.replaceWith(newNode.cloneNode(true));\n return;\n }\n\n // Diff the attributes of the nodes\n if (oldNode.nodeType === Node.ELEMENT_NODE && newNode.nodeType === Node.ELEMENT_NODE) {\n const oldAttributes = Array.from(oldNode.attributes);\n const newAttributes = Array.from(newNode.attributes);\n\n // Remove old attributes not present in the new node\n oldAttributes.forEach(attr => {\n if (!newNode.hasAttribute(attr.name)) {\n oldNode.removeAttribute(attr.name);\n }\n });\n\n // Add or update attributes from the new node\n newAttributes.forEach(attr => {\n if (oldNode.getAttribute(attr.name) !== attr.value) {\n oldNode.setAttribute(attr.name, attr.value);\n }\n });\n\n // Handle specific case for input elements\n if (oldNode.nodeName === 'INPUT' && newNode.nodeName === 'INPUT') {\n const oldValue = oldNode.value;\n const newValue = newNode.value;\n if (oldValue !== newValue) {\n oldNode.value = newValue;\n }\n }\n }\n\n const oldChildren = Array.from(oldNode.childNodes);\n const newChildren = Array.from(newNode.childNodes);\n\n // Update or remove existing child nodes\n oldChildren.forEach((oldChild, index) => {\n const newChild = newChildren[index];\n if (!newChild) {\n oldNode.removeChild(oldChild);\n return;\n }\n // Special handling for elements\n if (oldNode.tagName === 'TITLE' || oldNode.tagName === 'STYLE' && oldNode.textContent !== newNode.textContent) {\n oldNode.textContent = newNode.textContent;\n } else if (oldChild.nodeType === Node.TEXT_NODE && oldChild.nodeValue !== newChild.nodeValue) {\n oldChild.nodeValue = newChild.nodeValue;\n }\n diffNodes(oldChild, newChild);\n });\n\n // Add new child nodes\n newChildren.slice(oldChildren.length).forEach(newChild => {\n oldNode.appendChild(newChild.cloneNode(true));\n });\n}\n\n// Once dom has loaded init functions\ndocument.addEventListener('DOMContentLoaded', function() {\n window.onload = () => {\n // URL to the JSON file\n const jsonFileUrl = 'cssQuickCommands.json';\n\n // Apply the CSS quick commands\n applyCssQuickCommands(jsonFileUrl);\n\n // Set the state to true when the Command/Shift key is down\n window.onkeydown = e => {\n const activeElement = document.activeElement;\n \n // Check if the active element is not an input, textarea, or contenteditable\n const isNonEditable = !['INPUT', 'TEXTAREA'].includes(activeElement.tagName) &&\n activeElement.getAttribute('contenteditable') !== 'true';\n \n if (isNonEditable) {\n const os = detectOperatingSystem();\n const isCmdPressed = os === 'Mac' && e.metaKey;\n const isCtrlPressed = os !== 'Mac' && e.ctrlKey;\n const isModifierPressed = isCmdPressed || isCtrlPressed;\n const isShiftPressed = e.shiftKey || e.key === \"Shift\";\n const isZKeyPressed = e.key.toLowerCase() === 'z';\n \n // Handle shortcut actions\n const handleShortcut = action => {\n e.preventDefault();\n action();\n return false;\n };\n\n // Update key states\n data.ctrlKey = isCtrlPressed;\n data.cmdKey = isCmdPressed;\n \n if (isModifierPressed) {\n if (isZKeyPressed) {\n if (isShiftPressed) {\n return handleShortcut(redo);\n }\n return handleShortcut(undo);\n }\n \n if (e.key.toLowerCase() === 'd') return handleShortcut(cloneLayers);\n if (e.key.toLowerCase() === 'x') return handleShortcut(cutLayers);\n if (e.key.toLowerCase() === 'c') return handleShortcut(copyLayers);\n if (e.key.toLowerCase() === 'v') return handleShortcut(pasteLayers);\n if (isShiftPressed && e.key.toLowerCase() === 'p') return handleShortcut(commandPalette);\n if (isShiftPressed && isModifierPressed && e.key.toLowerCase() === 'a') return handleShortcut(clearAllSelections);\n }\n \n // Update shift key state\n if (isShiftPressed) data.shiftKey = true;\n \n // Handle Escape key to close dialogs\n if (e.key === 'Escape') {\n e.preventDefault();\n const dialog = document.querySelector('dialog[open]');\n if (dialog) dialog.querySelector('header > button').onclick();\n return false;\n }\n }\n \n // Handle Escape key in editable elements\n if (['INPUT', 'TEXTAREA'].includes(activeElement.tagName) ||\n activeElement.getAttribute('contenteditable') === 'true') {\n if (e.key === 'Escape') {\n e.preventDefault();\n const dialog = document.querySelector('dialog[open]');\n if (dialog) dialog.querySelector('header > button').onclick();\n activeElement.blur();\n return false;\n }\n }\n };\n\n // Set the state to false when the Command/Shift key is up\n window.onkeyup = e => {\n e.key === \"Shift\" && (data.shiftKey = false);\n if (e.key === \"Control\" || e.key === \"ControlLeft\" || e.key === \"ControlRight\") data.ctrlKey = false;\n if (e.key === \"Command\" || e.key === \"Meta\") data.cmdKey = false;\n }\n\n if (localStorage.getItem('Polyrise')) {\n importJSON(JSON.parse(localStorage.getItem('Polyrise')));\n } else {\n App.render('#app');\n }\n window.onresize = () => {\n App.render('#app');\n getIframeClientSize();\n }\n };\n});"], + "mappings": "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AC,EACnB,UAAW,EACX,gBAAiB,GACjB,WAAY,CACV,YAAa,CACX,UAAW,CACT,8DACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,6EACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,0EACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,mEACF,EACA,KAAM,EACR,EACA,IAAO,CACL,UAAW,CACT,2DACA,yDACF,EACA,KAAM,EACR,EACA,iBAAkB,CAChB,UAAW,CACT,yEACA,uEACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,oEACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,+EACA,mFACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,uEACA,mFACA,gFACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,4EACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,uCACF,EACA,KAAM,EACR,EACA,SAAY,CACV,UAAW,CACT,+DACA,6DACF,EACA,KAAM,EACR,EACA,GAAM,CACJ,UAAW,CACT,+BACF,EACA,KAAM,EACR,EACA,QAAW,CACT,UAAW,CACT,qEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,4EACF,EACA,KAAM,EACR,EACA,WAAc,CACZ,UAAW,CACT,iFACA,8EACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,6EACA,2EACF,EACA,KAAM,EACR,EACA,OAAU,CACR,UAAW,CACT,mEACF,EACA,KAAM,EACR,EACA,gBAAiB,CACf,UAAW,CACT,2EACF,EACA,KAAM,EACR,EACA,KAAQ,CACN,UAAW,CACT,2CACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,6EACA,0EACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,oEACF,EACA,KAAM,EACR,EACA,MAAS,CACP,UAAW,CACT,6EACA,kEACF,EACA,KAAM,EACR,EACA,QAAW,CACT,UAAW,CACT,iEACF,EACA,KAAM,EACR,EACA,oBAAqB,CACnB,UAAW,CACT,2FACA,yFACF,EACA,KAAM,EACR,EACA,OAAU,CACR,UAAW,CACT,wEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,6DACF,EACA,KAAM,EACR,EACA,YAAe,CACb,UAAW,CACT,mFACA,gFACF,EACA,KAAM,EACR,EACA,gBAAiB,CACf,UAAW,CACT,0EACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,uEACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,0DACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,oEACA,sEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,uDACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,gEACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,gEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,qEACF,EACA,KAAM,EACR,EACA,aAAc,CACZ,UAAW,CACT,qEACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,4EACA,0EACF,EACA,KAAM,EACR,EACA,eAAgB,CACd,UAAW,CACT,wEACF,EACA,KAAM,EACR,EACA,cAAe,CACb,UAAW,CACT,0EACF,EACA,KAAM,EACR,EACA,SAAY,CACV,UAAW,CACT,6EACA,4FACF,EACA,KAAM,EACR,EACA,OAAU,CACR,UAAW,CACT,4EACA,0EACF,EACA,KAAM,EACR,EACA,SAAY,CACV,UAAW,CACT,yEACF,EACA,KAAM,EACR,EACA,eAAgB,CACd,UAAW,CACT,sEACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,mEACF,EACA,KAAM,EACR,EACA,WAAY,CACV,UAAW,CACT,+EACF,EACA,KAAM,EACR,EACA,MAAS,CACP,UAAW,CACT,wEACA,sEACA,2EACF,EACA,KAAM,EACR,EACA,MAAS,CACP,UAAW,CACT,iEACF,EACA,KAAM,EACR,EACA,YAAa,CACX,UAAW,CACT,sEACF,EACA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", "names": ["e", "o", "n", "t", "L", "i", "s", "p", "r", "a", "l", "c", "u", "h", "d", "m", "f", "v", "b", "y", "g", "_", "w", "A", "C", "$", "k", "S", "O", "E", "createProxy", "target", "callback", "path", "obj", "prop", "fullPath", "value", "oldValue", "app", "p", "id", "d", "icons", "SidebarIconCSS", "navIconCSS", "modalIconCSS", "property", "newValue", "propertyParts", "noRenderProps", "part", "string", "LeftMenubar", "buttonSize", "Menu", "menuDialog", "Settings", "frameworks", "sortedFrameworks", "acc", "key", "settingsHTML", "framework", "name", "library", "index", "globalAttributes", "eventAttributes", "commonEventGroup", "dragDropEventGroup", "eventGroups", "tagEventGroups", "combineEventGroups", "groups", "group", "generateEventMappings", "elementEventMappings", "combinedEvents", "tag", "specificAttributes", "areCommonLayerTags", "layers", "firstTag", "layer", "selectedLayers", "detectCommonLayerTags", "renderAttributeButtons", "attributes", "attr", "attributesModal", "specificAttributesForTag", "attrBtns", "LayerTree", "renderLayer", "children", "state", "hasChildren", "isVisible", "child", "Inspector", "findCommonLayerTags", "findCommonAttributes", "attributeCounts", "count", "buttonItemClass", "buttonAddItemClass", "RenameOrDeleteButtonClass", "selectClass", "selectStyle", "inputClass", "inputStyle", "textareaClass", "textareaStyle", "mediaClass", "languages", "sizeOptions", "booleanAttributes", "inputTypes", "numberAttributes", "stringAttributes", "commonLayerTag", "commonAttributes", "cssFixedValueProperties", "cssRangedValueProperties", "boxElements", "textElements", "breakElements", "renderBooleanAttribute", "renderInput", "type", "min", "max", "step", "renderTextarea", "generatePreviewSize", "option", "lang", "processStyles", "stylesObject", "selectorPrefix", "detect", "styles", "colorRegex", "complexProperties", "selector", "predefinedValues", "options", "val", "valueParts", "remainingParts", "numericValue", "unitMatch", "unit", "gridColsClass", "validUnits", "selectElement", "unitOption", "rangeElement", "isColorProperty", "fallbackColor", "generateRootVariablesSection", "isColor", "isNumeric", "inputType", "generateStylesSection", "targets", "activeStyle", "layerKey", "dropdown", "buttonClass", "generatePseudosSection", "generateStylePropertiesSection", "styleKey", "stylesObj", "generateBreakpointsSection", "generateBreakpointStylesSection", "generateAnimationsSection", "generateAnimationPropertySection", "content", "keyframes", "activeKeyframe", "generateAttributesSection", "attributeTag", "svgImage", "element", "elm", "propKey", "textAreaAttributes", "lowerPropKey", "nodeType", "numAttr", "numTypes", "numType", "editorNav", "large", "title", "CloseLabel", "ConfirmLabel", "onLoad", "onClose", "onConfirm", "hClass", "html", "modal", "timesBtn", "closeBtn", "confirmBtn", "btnClass", "blockItem", "componentItem", "block", "component", "modalContent", "container", "size", "viewportWidth", "viewportHeight", "previewElm", "width", "height", "doc", "oldPickers", "picker", "currentDoc", "newDoc", "pickers", "initialColor", "pickr", "color", "colorString", "onInputCode", "updatedCode", "newName", "defaultValues", "rootVariables", "fixedValueProperties", "rangedValueProperties", "rootVariableOptions", "fixedValuePropertyOptions", "rangedValuePropertyOptions", "propertyTypeSelect", "unitSelect", "unitSection", "updatePropertyDetails", "selectedType", "propertyTypeInput", "noUnit", "cssQuickCommands", "propertyString", "propertyType", "userDefinedValue", "str", "quickPropertyType", "quickUserDefinedValue", "finalValue", "defaultValue", "e", "query", "found", "currentValue", "detected", "pseudo", "pseudoSelector", "pseudoStyles", "rule", "s", "existingPseudo", "oldName", "style", "pseudoIndex", "url", "response", "error", "incrementPattern", "attrs", "q", "incrementValues", "attribute", "baseValue", "increment", "input", "elementToJson", "noTextElements", "tagName", "props", "headJson", "bodyJson", "jsonToElement", "json", "renderElement", "escapeHtml", "childElement", "text", "map", "m", "beautifyHtml", "tab", "result", "indent", "css", "importRegex", "importMatch", "importUrl", "keyframesRegex", "mediaQueryRegex", "selectorRegex", "decodeURIComponentSafe", "processSelector", "properties", "varName", "varValue", "pseudoMatch", "baseSelector", "currentTarget", "pseudoObj", "propertyRegex", "match", "urlRegex", "urlMatch", "urlContent", "processRules", "cssRules", "processKeyframes", "keyframesName", "keyframesRules", "segment", "keyframeName", "propertiesPart", "keyframesMatch", "mediaMatch", "mediaCondition", "mediaRules", "mediaTarget", "cssWithoutMedia", "symbol", "semicolon", "openBrace", "closeBrace", "containCssVar", "indentLevel", "innerCss", "variables", "baseStyles", "pseudos", "variable", "childSelector", "childStyle", "processAnimations", "animations", "animationCss", "animationName", "animation", "keyframe", "processBreakpoints", "breakpoints", "breakpointCss", "breakpoint", "classId", "containcssVar", "innercss", "animationCSS", "breakpointCSS", "existingJSON", "newJSON", "stylesheet", "className", "declarations", "currentState", "stateString", "previousState", "nextState", "selection", "code", "item", "suggestions", "src", "script", "scripts", "scriptUrl", "resolve", "reject", "scriptElement", "srcArray", "queriesString", "replaceSelection", "queries", "handleSpecialCommand", "command", "matchesPseudoClass", "pseudoClass", "total", "selectLayersRecursive", "activeCalls", "processLayers", "pseudoClassPart", "classNames", "attributeMatch", "classMatches", "matchResult", "layerClasses", "targetChildrenOfSelections", "processQuery", "equalsIndex", "currentIDs", "layerId", "targetLayer", "parentLayer", "findLayerAndParent", "parent", "i", "applyCollapseStateToSiblings", "collapseState", "newCollapseState", "collapseLayer", "hideLayer", "applyVisibilityToSiblings", "visibilityState", "newVisibilityState", "applySelectionToSiblings", "selectionState", "childIndex", "newSelectionState", "findLayerById", "lastSelectedLayerId", "foundLayer", "searchLayer", "j", "excludeId", "assignIds", "blocks", "newBlocks", "parentBlock", "newBlock", "l", "cloneCount", "clonedLayer", "rootLayer", "pastedLayers", "initIncrement", "searchField", "handleSearch", "results", "displayResults", "resultsContainer", "uniqueId", "audioHTML", "searchInput", "searchBtn", "audio", "event", "file", "svgCode", "base64String", "icon", "hosts", "searchUrl", "display", "apiConnection", "descriptionElement", "searchElement", "iconResults", "selectedSvg", "iconResultsElement", "iconUrl", "svgContent", "iconDiv", "selectedSvgElement", "existingNames", "comp", "clone", "newHtml", "commands", "buttonsHtml", "guide", "versionParts", "iframe", "reader", "data", "c", "names", "registrations", "registration", "cookie", "cookieName", "fileName", "fileExtension", "fileType", "isBase64", "getBase64FileType", "mimeMatch", "mimeType", "mimeTypeToExtension", "getFileName", "getBase64FileName", "fileCounter", "extractBackgroundImageUrls", "urls", "regex", "imageResources", "body", "audioResources", "vectorResources", "videoResources", "img", "srcset", "source", "svg", "video", "mediaUrl", "blob", "frameStyles", "breakpointStyles", "colorMappings", "updateBorderColors", "updatedData", "colorKey", "filename", "fileContent", "minified", "idoc", "zip", "kodeWeaveProject", "licenseStr", "READMEStr", "cssContent", "cssBuildItems", "cssBuildItemsString", "TailwindNoReset", "promises", "parts", "cssBuild", "css4html", "twFound", "tailwindDirectives", "tailwindStyles", "cssImport", "combinedStyles", "postcssConfig", "npmJSON", "base64Logo", "logoType", "logoFileName", "sizes", "createResizedImage", "canvas", "ctx", "base64Image", "swinit", "swjs", "audioFolder", "base64Audio", "svgFolder", "videoFolder", "base64Video", "scriptTags", "cssTags", "testHtmlContent", "indexHtmlContentCompiled", "scriptsToRemove", "shareProject", "lib", "form", "iframeDocument", "context", "videoElements", "currentTime", "paused", "volume", "forceRun", "iframeSrc", "newHtmlBlobURL", "userAgent", "isMac", "isWindows", "isLinux", "oldNode", "newNode", "oldSrcdoc", "newSrcdoc", "oldAttributes", "newAttributes", "oldChildren", "newChildren", "oldChild", "newChild", "activeElement", "os", "isCmdPressed", "isCtrlPressed", "isModifierPressed", "isShiftPressed", "isZKeyPressed", "handleShortcut", "action", "dialog"] } diff --git a/app/src/App.js b/app/src/App.js index 029f72d..e664e2e 100644 --- a/app/src/App.js +++ b/app/src/App.js @@ -9340,6 +9340,9 @@ document.addEventListener('DOMContentLoaded', function() { } else { App.render('#app'); } - window.onresize = App.render('#app'); + window.onresize = () => { + App.render('#app'); + getIframeClientSize(); + } }; }); \ No newline at end of file