diff --git a/dist/App.min.js b/dist/App.min.js index 2de5d3c..e573cee 100644 --- a/dist/App.min.js +++ b/dist/App.min.js @@ -2666,5 +2666,5 @@ ${a||""} }); <\/script> -`,i=new DOMParser().parseFromString(r,"text/html"),n=e.contentDocument||e.contentWindow.document;t?e.setAttribute("srcdoc",r):diffNodes(n.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.hasAttribute&&t.hasAttribute("data-ignore")||e.hasAttribute&&e.hasAttribute("data-ignore"))return;if(t.nodeName==="IFRAME"&&e.nodeName==="IFRAME"){["id","title","class","style","sandbox"].forEach(i=>{t.getAttribute(i)!==e.getAttribute(i)&&t.setAttribute(i,e.getAttribute(i))});let r=t.getAttribute("srcdoc"),l=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);s.forEach(l=>{e.hasAttribute(l.name)||t.removeAttribute(l.name)}),r.forEach(l=>{t.getAttribute(l.name)!==l.value&&t.setAttribute(l.name,l.value)})}let a=Array.from(t.childNodes),o=Array.from(e.childNodes);a.forEach((s,r)=>{let l=o[r];if(!l){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!==l.nodeValue&&(s.nodeValue=l.nodeValue),diffNodes(s,l)}),o.slice(a.length).forEach(s=>{t.appendChild(s.cloneNode(!0))})};document.addEventListener("DOMContentLoaded",function(){window.onload=()=>{App.render("#app"),getIFrameClientSize(),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,l=s!=="Mac"&&e.ctrlKey,i=r||l,n=e.shiftKey||e.key==="Shift",d=e.key.toLowerCase()==="z",p=c=>(e.preventDefault(),c(),!1);if(data.ctrlKey=l,data.cmdKey=r,i){if(d)return p(n?redo:undo);if(e.key.toLowerCase()==="d")return p(cloneLayers);if(e.key.toLowerCase()==="x")return p(cutLayers);if(e.key.toLowerCase()==="c")return p(copyLayers);if(e.key.toLowerCase()==="v")return p(pasteLayers);if(n&&e.key.toLowerCase()==="p")return p(commandPalette);if(n&&i&&e.key.toLowerCase()==="a")return p(clearAllSelections)}if(n&&(data.shiftKey=!0),e.key==="Escape"){e.preventDefault();let c=document.querySelector("dialog[open]");return c&&c.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"))),window.onresize=()=>getIFrameClientSize()}});})(); +`,i=new DOMParser().parseFromString(r,"text/html"),n=e.contentDocument||e.contentWindow.document;t?e.setAttribute("srcdoc",r):diffNodes(n.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.hasAttribute&&t.hasAttribute("data-ignore")||e.hasAttribute&&e.hasAttribute("data-ignore"))return;if(t.nodeName==="IFRAME"&&e.nodeName==="IFRAME"){["id","title","class","style","sandbox"].forEach(i=>{t.getAttribute(i)!==e.getAttribute(i)&&t.setAttribute(i,e.getAttribute(i))});let r=t.getAttribute("srcdoc"),l=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);s.forEach(l=>{e.hasAttribute(l.name)||t.removeAttribute(l.name)}),r.forEach(l=>{t.getAttribute(l.name)!==l.value&&t.setAttribute(l.name,l.value)})}let a=Array.from(t.childNodes),o=Array.from(e.childNodes);a.forEach((s,r)=>{let l=o[r];if(!l){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!==l.nodeValue&&(s.nodeValue=l.nodeValue),diffNodes(s,l)}),o.slice(a.length).forEach(s=>{t.appendChild(s.cloneNode(!0))})};document.addEventListener("DOMContentLoaded",function(){window.onload=()=>{App.render("#app"),getIFrameClientSize(),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,l=s!=="Mac"&&e.ctrlKey,i=r||l,n=e.shiftKey||e.key==="Shift",d=e.key.toLowerCase()==="z",p=c=>(e.preventDefault(),c(),!1);if(data.ctrlKey=l,data.cmdKey=r,i){if(d)return p(n?redo:undo);if(e.key.toLowerCase()==="d")return p(cloneLayers);if(e.key.toLowerCase()==="x")return p(cutLayers);if(e.key.toLowerCase()==="c")return p(copyLayers);if(e.key.toLowerCase()==="v")return p(pasteLayers);if(n&&e.key.toLowerCase()==="p")return p(commandPalette);if(n&&i&&e.key.toLowerCase()==="a")return p(clearAllSelections)}if(n&&(data.shiftKey=!0),e.key==="Escape"){e.preventDefault();let c=document.querySelector("dialog[open]");return c&&c.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"))),window.onresize=()=>getIFrameClientSize()}});})(); //# sourceMappingURL=App.min.js.map diff --git a/dist/App.min.js.map b/dist/App.min.js.map index 12caefa..4dd94ea 100644 --- a/dist/App.min.js.map +++ b/dist/App.min.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/App.js"], - "sourcesContent": ["// Function for reactive state management\nfunction onChange(target, callback, path = []) {\n function createProxy(target, path) {\n if (typeof target !== 'object' || target === null) {\n return target;\n }\n\n return new Proxy(target, {\n set(obj, property, value) {\n const fullPath = [...path, property];\n const oldValue = obj[property];\n const result = Reflect.set(obj, property, createProxy(value, fullPath));\n\n if (oldValue !== value) {\n callback(fullPath, oldValue, value);\n }\n\n return result;\n },\n get(obj, property) {\n const value = obj[property];\n if (typeof value === 'object' && value !== null) {\n return createProxy(value, [...path, property]);\n }\n return value;\n }\n });\n }\n\n return createProxy(target, path);\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.2',\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};\nlet d = {\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 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: '
'\n },\n {\n type: \"text\",\n code: '

text

'\n },\n {\n type: \"link\",\n code: 'Polyrise'\n },\n {\n type: \"button\",\n code: ''\n },\n {\n type: \"list\",\n code: ''\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: \"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 = onChange(p, (property, oldValue, newValue) => {\n if (oldValue !== newValue) {\n localStorage.setItem('Polyrise', JSON.stringify(project));\n App.render('#app');\n let string = property.toString();\n if (string === 'activePanel') getIFrameClientSize();\n if (!App.initialRender) {\n // diff nodes\n const diff = ['lang', 'libraries', 'html', 'styles', 'title', 'description', 'author', 'url', 'meta', 'previewDark'];\n if (diff.includes(string)) renderPreview();\n\n if (string === \"dark\") {\n App.render('#app');\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});\nwindow.data = onChange(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 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 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 ${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 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
    \n \n \n
    \n\n
    \n language\n \n
    \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}|rgba?(.+)|hsla?(.+))$/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 // Determine the appropriate grid column class based on the presence of value parts\n const gridColsClass = valueParts.length > 0 ? 'grid-cols-2' : 'grid-cols-1';\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 // 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', 'vw']; // Default units\n break;\n }\n \n const selectElement = ``;\n \n const rangeElement = ` 0 ? ` + ' ' + '${remainingParts.join(' ')}'` : ''};\n renderPreview();\"\n onfocus=\"saveState();\" onblur=\"saveState();\">`;\n \n styles += `\n 0 ? ` + ' ' + '${remainingParts.join(' ')}'` : ''};\n renderPreview();\"\n onfocus=\"saveState();\" onblur=\"saveState();\">\n ${prop === 'opacity' || prop === 'z-index' ? rangeElement : selectElement}`;\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 inputType = isColorProperty ? 'color' : 'text';\n const fallbackColor = isColorProperty && value === null ? '#000000' : value;\n\n // Update the style if the input type is color\n const updatedInputStyle = inputType === 'color' \n ? `${inputStyle} height: 2rem; margin: 0; padding: .25rem; overflow: hidden;` \n : inputStyle;\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}|rgba?(.+)|hsla?(.+))$/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 hasAlpha = value.includes('rgba') || value.includes('hsla');\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) {\n inputType = 'number';\n } else if (isColor && !hasAlpha) {\n inputType = 'color';\n inputStyle = 'height: 2rem; margin: 0; padding: .25rem; overflow: hidden;';\n }\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 const generatePseudosSection = () => {\n if (!commonLayerTag) data.stylesTarget = null;\n let styles = '';\n let selector = '';\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 // 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 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 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 if (\"text\" in layer || layer.text) {\n if (tag === \"textarea\" || tag === \"style\" || tag === \"script\") {\n attributes += `\n text\n \n `;\n } else {\n // attributes += `\n // text\n // \n // `;\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}\nfunction 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 html = `
    \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 return html;\n}\nwindow.App = {\n initialRender: true,\n render(container) {\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 ${Blocks()}\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 // Compare and update only the changed parts\n const currentDoc = element.firstElementChild;\n const newDoc = doc.body.firstElementChild;\n diffNodes(currentDoc, newDoc);\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 Modal.render({\n title: `Unable to rename variable!`,\n content: \"Variable name already exists!\"\n });\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 App.render(\"#app\");\n renderPreview();\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.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 const 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 if (propertyTypeInput) {\n // Check if the input matches a quick command\n if (cssQuickCommands[propertyTypeInput]) {\n const quickCommand = cssQuickCommands[propertyTypeInput];\n const properties = quickCommand.split(';').filter(Boolean);\n\n properties.forEach(propertyString => {\n let [propertyType, userDefinedValue] = propertyString.split(':').map(str => str.trim());\n propertyType = propertyType.toLowerCase();\n obj[propertyType] = userDefinedValue;\n });\n\n } else {\n // Split the input to separate properties and handle each individually\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.charAt(0).toLowerCase() + propertyType.slice(1);\n\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 App.render(\"#app\");\n renderPreview();\n saveState();\n } else {\n Modal.render({\n title: \"Unable to add property!\",\n content: \"Please enter a valid CSS property or quick command.\"\n });\n }\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 // re-render the ui\n App.render('#app');\n renderPreview();\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 renderPreview();\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\n // Re-render the app and preview\n App.render(\"#app\");\n renderPreview();\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 App.render(\"#app\");\n renderPreview();\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-selector').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 (pseudoSelector && 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 === pseudoSelector);\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\": pseudoSelector,\n \"styles\": styles\n };\n project.css.styles[selector].pseudos.push(obj);\n }\n\n App.render(\"#app\");\n renderPreview();\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 renderPreview();\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 // Split the attributess into individual attributes\n const attrs = attr.toLowerCase().split(',').map(q => q.trim().toLowerCase());\n\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 and add it if it doesn't exist\n saveState();\n attrs.forEach(attribute => {\n let [key, value] = attribute.split('=').map(s => s.trim());\n if (key === 'id') value = generateId();\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 saveState();\n }\n });\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 const json = Array.from(doc.body.children).map(child => elementToJson(child));\n return json;\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 html += escapeHtml(element.text);\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 const json = {\n rootVariables: {},\n styles: {},\n animations: {},\n breakpoints: {}\n };\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 // Function to remove comments from CSS\n function removeComments(css) {\n return css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '').replace(/\\/\\/[^\\n]*/g, '');\n }\n\n css = removeComments(css);\n\n const selectorRegex = /([^{@]+)\\{([^}]+)\\}/g;\n const mediaQueryRegex = /@media\\s*([^{]+)\\s*\\{([\\s\\S]*?\\{[\\s\\S]*?\\})\\s*}/g;\n const keyframesRegex = /@keyframes\\s+([^{\\s]+)\\s*\\{([^}]*\\{[^}]*\\}[^}]*)\\}/g;\n\n function processSelector(selector, properties, target) {\n selector = selector.trim();\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] = 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 properties.split(';').forEach(prop => {\n const [property, value] = prop.split(\":\").map(part => part.trim());\n if (property && value) {\n currentTarget[property] = 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[2].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] = value;\n }\n });\n }\n });\n\n json.animations[keyframesName] = { keyframes };\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 // 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 // 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}\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: function() {\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 renderPreview();\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 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 renderPreview();\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 renderPreview();\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 renderPreview(); // Ensure the preview is updated\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.replaceCurrentSelection || 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 if (data.selectedLayerIds.length > 0) {\n // If user has multiple layers selected\n data.selectedLayerIds.forEach(id => {\n const result = findLayerById(id, project.html);\n if (result) {\n const { layer } = result;\n\n if (canAcceptChildren(layer)) {\n // Ensure `layer.children` is initialized\n layer.children = layer.children || [];\n\n // Assign IDs and then push new blocks\n const newBlocks = html2json(html); // Convert HTML to JSON\n assignIds(newBlocks, () => {\n newBlocks.forEach(newBlock => {\n layer.children.push(newBlock); // Push new block after ID assignment\n });\n });\n }\n }\n });\n } else {\n // If user has no layers selected, add to the root layer structure\n const newBlocks = html2json(html); // Convert HTML to JSON\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 renderPreview();\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 renderPreview();\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 renderPreview();\n return;\n } else {\n removeLayerById(id, layer.children); // Recursively remove from nested layers\n }\n }\n }\n}\nwindow.cloneLayers = () => {\n saveState(); // Save state before making changes\n data.selectedLayerIds.forEach(id => {\n const { layer, parent } = findLayerById(id, project.html);\n\n if (layer) {\n const clonedLayer = cloneLayerObject(layer);\n\n if (parent && Array.isArray(parent.children)) {\n // Find the original layer index by comparing the IDs instead of the objects\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 // Find index in the root layer structure\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 } 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 renderPreview();\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 renderPreview();\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 renderPreview();\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 renderPreview();\n}\nwindow.updateElement = (key, propKey, value) => {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n if (key !== 'props') {\n if (key === 'text' && !value) {\n layer.text = \"\";\n } else {\n layer[`${key}`] = value;\n }\n } else {\n layer.props[`${propKey}`] = value;\n }\n }\n });\n renderPreview();\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 renderPreview();\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 renderPreview();\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 renderPreview();\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 selections\": \"\"\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
    • 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}\n\n// iframe functions\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}\nwindow.resizeCanvas = size => {\n data.selectedSize = size;\n getIFrameClientSize();\n}\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 getIFrameClientSize();\n}\nlet fadeTimeout;\nwindow.getIFrameClientSize = () => {\n // resize canvas\n const iframe = document.getElementById('iframe');\n if (iframe.style.width !== '100%') {\n // Extract current width and height\n let width = parseInt(iframe.style.width);\n let height = parseInt(iframe.style.height);\n \n // Calculate the new transform scale\n const viewportWidth = previewElm.clientWidth;\n const viewportHeight = previewElm.clientHeight;\n const scale = Math.min(viewportWidth / width, viewportHeight / height);\n \n // Apply the new styles\n iframe.style.width = `${width}px`;\n iframe.style.height = `${height}px`;\n iframe.style.transform = `scale(${scale})`;\n iframe.style.marginTop = `-${height / 2}px`;\n iframe.style.marginLeft = `-${width / 2}px`;\n }\n\n data.iframeSize = `${iframe.clientWidth}px x ${iframe.clientHeight}px`;\n const element = document.getElementById('iframeClientSize');\n\n if (element.classList.contains('hidden')) {\n // Clear existing timeout to prevent multiple calls\n if (fadeTimeout) clearTimeout(fadeTimeout);\n\n // Remove hidden and add opacity-100 to show the element\n element.classList.remove('hidden', 'opacity-0');\n element.classList.add('opacity-100');\n\n // Set a timeout to handle fade-out\n fadeTimeout = setTimeout(() => {\n element.classList.remove('opacity-100');\n element.classList.add('opacity-0');\n\n // Add hidden class after fade-out\n setTimeout(() => {\n element.classList.add('hidden');\n }, 300); // Match the duration of the opacity transition\n }, 2000); // Show duration\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 => {\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.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 App.initialRender = null;\n collectSelectedIDs(project.html);\n App.render('#app');\n renderPreview(true);\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 frameworks = {\n 'none': {\n libraries: [],\n meta: ''\n },\n 'alpine.js': {\n source: 'imgs/frameworks/alpine.svg',\n libraries: [],\n meta: ''\n },\n 'bootstrap 5': {\n source: 'imgs/frameworks/bootstrap-5.svg',\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 'bulma': {\n source: 'imgs/frameworks/bulma.svg',\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css\"\n ],\n meta: ''\n },\n 'foundation': {\n source: 'imgs/frameworks/foundation.svg',\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 'materialize': {\n source: 'imgs/frameworks/materialize.svg',\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 'pico.css': {\n source: 'imgs/frameworks/pico-css.svg',\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 'poly ui': {\n source: 'imgs/frameworks/polyui.svg',\n libraries: [\n \"https://treehouse-code-samples.s3.amazonaws.com/poly/css/polyui.css\"\n ],\n meta: ''\n },\n 'semantic': {\n source: 'imgs/frameworks/semantic-ui.svg',\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 'tailwind': {\n source: 'imgs/frameworks/tailwind.svg',\n libraries: [\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ],\n meta: ''\n },\n 'uikit': {\n source: 'imgs/frameworks/uikit.svg',\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 };\n\n let modalContent = `\n \n
    \n
    All current data will be lost.
    \n
    Please select a framework to start your new project.
    \n
    \n
    \n \n \n
    \n ${Object.keys(frameworks).map(framework => {\n if (framework === 'none') return;\n const id = generateId();\n \n // Capitalize the first letter and make the rest lowercase\n const formattedFrameworkName = framework.charAt(0).toUpperCase() + framework.slice(1).toLowerCase();\n \n return `\n
    \n \n \n
    \n `;\n }).join('')}\n
    \n
    `;\n\n Modal.render({\n title: \"Are you sure you want to start a new project?\",\n content: modalContent,\n onConfirm() {\n const selectedFramework = document.querySelector('input[name=\"framework\"]:checked');\n \n if (selectedFramework) {\n string = selectedFramework.value;\n if (string) {\n // Code to handle the initialization with the selected framework\n obj.libraries = frameworks[`${string}`].libraries;\n obj.meta = frameworks[`${string}`].meta;\n importJSON(obj);\n data.menuDialog = null;\n App.render('#app');\n }\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.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\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 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 let css = stylesObj;\n if (tailwindStyles) css += tailwindStyles;\n if (cssContent) {\n css4html = `\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 = `\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 \n `;\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 += `\\n `;\n } else {\n // Assuming it's a Google font\n cssTags += `\\n `;\n }\n });\n \n // Add index.html\n const testHtmlContent = `\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 ${css4html}${project.meta ? `${project.meta}\\n ` : ''}\n \n \n \n${json2html(project.html)}\n${scriptTags ? scriptTags : ''}\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 ${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.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 \n \n\n${json2html(project.html)}\n${scriptTags ? scriptTags : ''}\n \n \n`;\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('srcdoc', iframeSrc);\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 // Check for data-ignore attribute\n if (oldNode.hasAttribute && oldNode.hasAttribute('data-ignore') || \n newNode.hasAttribute && newNode.hasAttribute('data-ignore')) {\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 // console.log('Different node names:', oldNode, newNode);\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\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 App.render('#app');\n getIFrameClientSize();\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 }\n window.onresize = () => getIFrameClientSize();\n };\n});"], - "mappings": "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", + "sourcesContent": ["// Function for reactive state management\nfunction onChange(target, callback, path = []) {\n function createProxy(target, path) {\n if (typeof target !== 'object' || target === null) {\n return target;\n }\n\n return new Proxy(target, {\n set(obj, property, value) {\n const fullPath = [...path, property];\n const oldValue = obj[property];\n const result = Reflect.set(obj, property, createProxy(value, fullPath));\n\n if (oldValue !== value) {\n callback(fullPath, oldValue, value);\n }\n\n return result;\n },\n get(obj, property) {\n const value = obj[property];\n if (typeof value === 'object' && value !== null) {\n return createProxy(value, [...path, property]);\n }\n return value;\n }\n });\n }\n\n return createProxy(target, path);\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.2',\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};\nlet d = {\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 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: \"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 = onChange(p, (property, oldValue, newValue) => {\n if (oldValue !== newValue) {\n localStorage.setItem('Polyrise', JSON.stringify(project));\n App.render('#app');\n let string = property.toString();\n if (string === 'activePanel') getIFrameClientSize();\n if (!App.initialRender) {\n // diff nodes\n const diff = ['lang', 'libraries', 'html', 'styles', 'title', 'description', 'author', 'url', 'meta', 'previewDark'];\n if (diff.includes(string)) renderPreview();\n\n if (string === \"dark\") {\n App.render('#app');\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});\nwindow.data = onChange(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 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=\"project.activePanel = project.activePanel === 'blocks' ? null : '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 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 <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\">\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\">\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 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 class=\"${inputClass}\" style=\"${inputStyle}\" type=\"${type}\" value=\"${value}\" ${min ? `min=\"${min}\"` : ''} ${max ? `max=\"${max}\"` : ''} ${step ? `step=\"${step}\"` : ''} oninput=\"updateElement('props', '${name}', this.value)\" onfocus=\"saveState()\" onblur=\"saveState()\"/>\n `;\n }\n function renderTextarea(name, value) {\n return `\n <button class=\"${buttonItemClass}\" style=\"color: unset;\" onclick=\"removeProp('${name}')\">${name}</button>\n <textarea class=\"${textareaClass}\" style=\"${textareaStyle}\" oninput=\"updateElement('props', '${name}', this.value)\" onfocus=\"saveState()\" onblur=\"saveState()\"/>${value}</textarea>\n `;\n }\n \n // Functions to generate HTML sections\n const generatePreviewSize = () => `\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 <button \n aria-label=\"rotate canvas\"\n name=\"rotate canvas\" \n class=\"bg-transparent border-0 p-0 text-center w-full 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\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}|rgba?(.+)|hsla?(.+))$/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; renderPreview(); 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 // Determine the appropriate grid column class based on the presence of value parts\n const gridColsClass = valueParts.length > 0 ? 'grid-cols-2' : 'grid-cols-1';\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 ${gridColsClass} 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 // 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', 'vw']; // Default units\n break;\n }\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 renderPreview();\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 renderPreview();\"\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 renderPreview();\"\n onfocus=\"saveState();\" onblur=\"saveState();\">\n ${prop === 'opacity' || prop === 'z-index' ? rangeElement : selectElement}`;\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; renderPreview(); 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; renderPreview(); saveState();\">${value}</textarea>`;\n } else {\n // Check if the property is a color property\n const isColorProperty = colorRegex.test(value) || value === null;\n const inputType = isColorProperty ? 'color' : 'text';\n const fallbackColor = isColorProperty && value === null ? '#000000' : value;\n\n // Update the style if the input type is color\n const updatedInputStyle = inputType === 'color' \n ? `${inputStyle} height: 2rem; margin: 0; padding: .25rem; overflow: hidden;` \n : inputStyle;\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 class=\"${inputClass}\" style=\"${updatedInputStyle}\" type=\"${inputType}\" value=\"${fallbackColor}\" \n oninput=\"${selector} = this.value; renderPreview(); saveState();\">`;\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}|rgba?(.+)|hsla?(.+))$/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 hasAlpha = value.includes('rgba') || value.includes('hsla');\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) {\n inputType = 'number';\n } else if (isColor && !hasAlpha) {\n inputType = 'color';\n inputStyle = 'height: 2rem; margin: 0; padding: .25rem; overflow: hidden;';\n }\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 oninput=\"${selector} = this.value; renderPreview();\" \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 App.render('#app');\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-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=\"\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 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('${styleKey}', ${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 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 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 if (\"text\" in layer || layer.text) {\n if (tag === \"textarea\" || tag === \"style\" || tag === \"script\") {\n attributes += `\n <span class=\"${buttonItemClass}\">text</span>\n <textarea class=\"${textareaClass}\" style=\"${textareaStyle}\" oninput=\"updateElement('text', null, this.value)\" onfocus=\"saveState()\" onblur=\"saveState()\"/>${layer.text}</textarea>\n `;\n } else {\n // attributes += `\n // <span class=\"${buttonItemClass}\">text</span>\n // <input class=\"${inputClass}\" style=\"${inputStyle}\" type=\"text\" value=\"${layer.text}\" oninput=\"updateElement('text', null, this.value)\" onfocus=\"saveState()\" onblur=\"saveState()\"/>\n // `;\n attributes += `\n <span class=\"${buttonItemClass}\">text</span>\n <textarea class=\"${textareaClass}\" style=\"${textareaStyle}\" oninput=\"updateElement('text', null, this.value)\" onfocus=\"saveState()\" 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}\nfunction 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 html = `<article class=\"select-none font-thin\">\n <section 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 </section>\n </article>\n \n <article class=\"select-none font-thin\">\n <section 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 </section>\n </article>`;\n \n return html;\n}\nwindow.App = {\n initialRender: true,\n render(container) {\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 px-2 py-4 overflow-auto capitalize ${project.activePanel === 'blocks' ? '' : 'hidden'}\">\n ${Blocks()}\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=\"${project.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 // Compare and update only the changed parts\n const currentDoc = element.firstElementChild;\n const newDoc = doc.body.firstElementChild;\n diffNodes(currentDoc, newDoc);\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 localStorage.setItem('Polyrise', JSON.stringify(project));\n saveState();\n App.render('#app');\n renderPreview();\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 Modal.render({\n title: `Unable to rename variable!`,\n content: \"Variable name already exists!\"\n });\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 App.render(\"#app\");\n renderPreview();\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.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 const 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 if (propertyTypeInput) {\n // Check if the input matches a quick command\n if (cssQuickCommands[propertyTypeInput]) {\n const quickCommand = cssQuickCommands[propertyTypeInput];\n const properties = quickCommand.split(';').filter(Boolean);\n\n properties.forEach(propertyString => {\n let [propertyType, userDefinedValue] = propertyString.split(':').map(str => str.trim());\n propertyType = propertyType.toLowerCase();\n obj[propertyType] = userDefinedValue;\n });\n\n } else {\n // Split the input to separate properties and handle each individually\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.charAt(0).toLowerCase() + propertyType.slice(1);\n\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 App.render(\"#app\");\n renderPreview();\n saveState();\n } else {\n Modal.render({\n title: \"Unable to add property!\",\n content: \"Please enter a valid CSS property or quick command.\"\n });\n }\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 // re-render the ui\n App.render('#app');\n renderPreview();\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 renderPreview();\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\n // Re-render the app and preview\n App.render(\"#app\");\n renderPreview();\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 App.render(\"#app\");\n renderPreview();\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-selector').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 (pseudoSelector && 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 === pseudoSelector);\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\": pseudoSelector,\n \"styles\": styles\n };\n project.css.styles[selector].pseudos.push(obj);\n }\n\n App.render(\"#app\");\n renderPreview();\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 renderPreview();\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 // Split the attributess into individual attributes\n const attrs = attr.toLowerCase().split(',').map(q => q.trim().toLowerCase());\n\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 and add it if it doesn't exist\n saveState();\n attrs.forEach(attribute => {\n let [key, value] = attribute.split('=').map(s => s.trim());\n if (key === 'id') value = generateId();\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 saveState();\n }\n });\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 const json = Array.from(doc.body.children).map(child => elementToJson(child));\n return json;\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 html += escapeHtml(element.text);\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 const json = {\n rootVariables: {},\n styles: {},\n animations: {},\n breakpoints: {}\n };\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 // Function to remove comments from CSS\n function removeComments(css) {\n return css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '').replace(/\\/\\/[^\\n]*/g, '');\n }\n\n css = removeComments(css);\n\n const selectorRegex = /([^{@]+)\\{([^}]+)\\}/g;\n const mediaQueryRegex = /@media\\s*([^{]+)\\s*\\{([\\s\\S]*?\\{[\\s\\S]*?\\})\\s*}/g;\n const keyframesRegex = /@keyframes\\s+([^{\\s]+)\\s*\\{([^}]*\\{[^}]*\\}[^}]*)\\}/g;\n\n function processSelector(selector, properties, target) {\n selector = selector.trim();\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] = 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 properties.split(';').forEach(prop => {\n const [property, value] = prop.split(\":\").map(part => part.trim());\n if (property && value) {\n currentTarget[property] = 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[2].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] = value;\n }\n });\n }\n });\n\n json.animations[keyframesName] = { keyframes };\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 // 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 // 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}\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: function() {\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 renderPreview();\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 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 renderPreview();\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 renderPreview();\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 renderPreview(); // Ensure the preview is updated\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.replaceCurrentSelection || 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 if (data.selectedLayerIds.length > 0) {\n // If user has multiple layers selected\n data.selectedLayerIds.forEach(id => {\n const result = findLayerById(id, project.html);\n if (result) {\n const { layer } = result;\n\n if (canAcceptChildren(layer)) {\n // Ensure `layer.children` is initialized\n layer.children = layer.children || [];\n\n // Assign IDs and then push new blocks\n const newBlocks = html2json(html); // Convert HTML to JSON\n assignIds(newBlocks, () => {\n newBlocks.forEach(newBlock => {\n layer.children.push(newBlock); // Push new block after ID assignment\n });\n });\n }\n }\n });\n } else {\n // If user has no layers selected, add to the root layer structure\n const newBlocks = html2json(html); // Convert HTML to JSON\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 renderPreview();\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 renderPreview();\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 renderPreview();\n return;\n } else {\n removeLayerById(id, layer.children); // Recursively remove from nested layers\n }\n }\n }\n}\nwindow.cloneLayers = () => {\n saveState(); // Save state before making changes\n data.selectedLayerIds.forEach(id => {\n const { layer, parent } = findLayerById(id, project.html);\n\n if (layer) {\n const clonedLayer = cloneLayerObject(layer);\n\n if (parent && Array.isArray(parent.children)) {\n // Find the original layer index by comparing the IDs instead of the objects\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 // Find index in the root layer structure\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 } 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 renderPreview();\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 renderPreview();\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 renderPreview();\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 renderPreview();\n}\nwindow.updateElement = (key, propKey, value) => {\n data.selectedLayerIds.forEach(id => {\n const { layer } = findLayerById(id, project.html);\n if (layer) {\n if (key !== 'props') {\n if (key === 'text' && !value) {\n layer.text = \"\";\n } else {\n layer[`${key}`] = value;\n }\n } else {\n layer.props[`${propKey}`] = value;\n }\n }\n });\n renderPreview();\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 renderPreview();\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 renderPreview();\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 renderPreview();\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 selections\": \"\"\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>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}\n\n// iframe functions\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}\nwindow.resizeCanvas = size => {\n data.selectedSize = size;\n getIFrameClientSize();\n}\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 getIFrameClientSize();\n}\nlet fadeTimeout;\nwindow.getIFrameClientSize = () => {\n // resize canvas\n const iframe = document.getElementById('iframe');\n if (iframe.style.width !== '100%') {\n // Extract current width and height\n let width = parseInt(iframe.style.width);\n let height = parseInt(iframe.style.height);\n \n // Calculate the new transform scale\n const viewportWidth = previewElm.clientWidth;\n const viewportHeight = previewElm.clientHeight;\n const scale = Math.min(viewportWidth / width, viewportHeight / height);\n \n // Apply the new styles\n iframe.style.width = `${width}px`;\n iframe.style.height = `${height}px`;\n iframe.style.transform = `scale(${scale})`;\n iframe.style.marginTop = `-${height / 2}px`;\n iframe.style.marginLeft = `-${width / 2}px`;\n }\n\n data.iframeSize = `${iframe.clientWidth}px x ${iframe.clientHeight}px`;\n const element = document.getElementById('iframeClientSize');\n\n if (element.classList.contains('hidden')) {\n // Clear existing timeout to prevent multiple calls\n if (fadeTimeout) clearTimeout(fadeTimeout);\n\n // Remove hidden and add opacity-100 to show the element\n element.classList.remove('hidden', 'opacity-0');\n element.classList.add('opacity-100');\n\n // Set a timeout to handle fade-out\n fadeTimeout = setTimeout(() => {\n element.classList.remove('opacity-100');\n element.classList.add('opacity-0');\n\n // Add hidden class after fade-out\n setTimeout(() => {\n element.classList.add('hidden');\n }, 300); // Match the duration of the opacity transition\n }, 2000); // Show duration\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 => {\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.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 App.initialRender = null;\n collectSelectedIDs(project.html);\n App.render('#app');\n renderPreview(true);\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 frameworks = {\n 'none': {\n libraries: [],\n meta: ''\n },\n 'alpine.js': {\n source: 'imgs/frameworks/alpine.svg',\n libraries: [],\n meta: '<script src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.14.1/dist/cdn.min.js\" defer></script>'\n },\n 'bootstrap 5': {\n source: 'imgs/frameworks/bootstrap-5.svg',\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 'bulma': {\n source: 'imgs/frameworks/bulma.svg',\n libraries: [\n \"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css\"\n ],\n meta: ''\n },\n 'foundation': {\n source: 'imgs/frameworks/foundation.svg',\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 'materialize': {\n source: 'imgs/frameworks/materialize.svg',\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 'pico.css': {\n source: 'imgs/frameworks/pico-css.svg',\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 'poly ui': {\n source: 'imgs/frameworks/polyui.svg',\n libraries: [\n \"https://treehouse-code-samples.s3.amazonaws.com/poly/css/polyui.css\"\n ],\n meta: ''\n },\n 'semantic': {\n source: 'imgs/frameworks/semantic-ui.svg',\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 'tailwind': {\n source: 'imgs/frameworks/tailwind.svg',\n libraries: [\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ],\n meta: ''\n },\n 'uikit': {\n source: 'imgs/frameworks/uikit.svg',\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 };\n\n let modalContent = `\n <style>\n .framework-image {\n filter: grayscale(100%) brightness(0.5);\n transition: filter 0.3s ease-in-out;\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n input[name=\"framework\"]:checked + label .framework-image {\n filter: grayscale(0%) brightness(1);\n }\n .image-container {\n aspect-ratio: 1 / 1; /* Ensures the container is always square */\n width: 100%;\n height: 100%;\n max-width: 256px;\n display: flex;\n align-items: center;\n overflow: visible; /* Allow the shadow to extend outside */\n position: relative; /* Ensures positioning context for the shadow */\n padding: 1rem; /* Adds padding to make space for the shadow */\n }\n .framework-name {\n filter: grayscale(100%) brightness(0.5);\n transition: color 0.3s ease-in-out; /* Smooth transition for color change */\n }\n input[name=\"framework\"]:checked + label .framework-name {\n filter: grayscale(0%) brightness(1);\n color: #3b82f6; /* Tailwind's blue-500 color */\n }\n input[name=\"framework\"][value=\"none\"]:checked + label .framework-name {\n color: #ef4444; /* Tailwind's red-500 color to match the SVG */\n }\n </style>\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\">Please select a framework to start your new project.</div>\n <div class=\"grid grid-cols-4 gap-4 place-items-center\">\n <div class=\"text-center\">\n <input type=\"radio\" checked=\"true\" name=\"framework\" id=\"dnwk5f059\" value=\"none\" class=\"hidden peer\" />\n <label for=\"dnwk5f059\" class=\"cursor-pointer grid grid-rows-1 items-center bg-transparent border-0 focus-within:shadow-none\">\n <div class=\"flex flex-col justify-between h-full\">\n <div class=\"image-container\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"w-full h-full text-red-400 framework-image\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M12 4c-4.419 0-8 3.582-8 8s3.581 8 8 8s8-3.582 8-8s-3.581-8-8-8m3.707 10.293a.999.999 0 1 1-1.414 1.414L12 13.414l-2.293 2.293a.997.997 0 0 1-1.414 0a1 1 0 0 1 0-1.414L10.586 12L8.293 9.707a.999.999 0 1 1 1.414-1.414L12 10.586l2.293-2.293a.999.999 0 1 1 1.414 1.414L13.414 12z\"/>\n </svg>\n </div>\n <div class=\"capitalize text-center mt-2 framework-name\">none</div>\n </div>\n </label>\n </div>\n ${Object.keys(frameworks).map(framework => {\n if (framework === 'none') return;\n const id = generateId();\n \n // Capitalize the first letter and make the rest lowercase\n const formattedFrameworkName = framework.charAt(0).toUpperCase() + framework.slice(1).toLowerCase();\n \n return `\n <div class=\"text-center\">\n <input type=\"radio\" name=\"framework\" id=\"${id}\" value=\"${framework}\" class=\"hidden peer\" />\n <label for=\"${id}\" class=\"cursor-pointer grid grid-rows-1 items-center bg-transparent border-0 focus-within:shadow-none\">\n <div class=\"flex flex-col justify-between h-full\">\n <div class=\"image-container\">\n <img src=\"${frameworks[framework].source}\" alt=\"${formattedFrameworkName}\" \n class=\"framework-image\" loading=\"lazy\" />\n </div>\n <div class=\"text-center mt-2 framework-name\">${formattedFrameworkName}</div>\n </div>\n </label>\n </div>\n `;\n }).join('')}\n </div>\n </div>`;\n\n Modal.render({\n title: \"Are you sure you want to start a new project?\",\n content: modalContent,\n onConfirm() {\n const selectedFramework = document.querySelector('input[name=\"framework\"]:checked');\n \n if (selectedFramework) {\n string = selectedFramework.value;\n if (string) {\n // Code to handle the initialization with the selected framework\n obj.libraries = frameworks[`${string}`].libraries;\n obj.meta = frameworks[`${string}`].meta;\n importJSON(obj);\n data.menuDialog = null;\n App.render('#app');\n }\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.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\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 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 let css = stylesObj;\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 ${css4html}${project.meta ? `${project.meta}\\n ` : ''}\n \n \n \n${json2html(project.html)}\n${scriptTags ? scriptTags : ''}\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 ${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.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 \n \n\n${json2html(project.html)}\n${scriptTags ? scriptTags : ''}\n \n \n`;\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('srcdoc', iframeSrc);\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 // Check for data-ignore attribute\n if (oldNode.hasAttribute && oldNode.hasAttribute('data-ignore') || \n newNode.hasAttribute && newNode.hasAttribute('data-ignore')) {\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 // console.log('Different node names:', oldNode, newNode);\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\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 App.render('#app');\n getIFrameClientSize();\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 }\n window.onresize = () => getIFrameClientSize();\n };\n});"], + "mappings": "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", "names": ["onChange", "target", "callback", "path", "createProxy", "obj", "property", "value", "fullPath", "oldValue", "result", "app", "p", "d", "icons", "SidebarIconCSS", "navIconCSS", "modalIconCSS", "newValue", "string", "LeftMenubar", "buttonSize", "Menu", "menuDialog", "Settings", "settingsHTML", "library", "index", "globalAttributes", "eventAttributes", "commonEventGroup", "dragDropEventGroup", "eventGroups", "tagEventGroups", "combineEventGroups", "groups", "group", "generateEventMappings", "elementEventMappings", "combinedEvents", "tag", "specificAttributes", "areCommonLayerTags", "layers", "firstTag", "layer", "selectedLayers", "id", "detectCommonLayerTags", "renderAttributeButtons", "attributes", "attr", "attributesModal", "specificAttributesForTag", "attrBtns", "LayerTree", "renderLayer", "name", "children", "state", "hasChildren", "isVisible", "child", "Inspector", "findCommonLayerTags", "findCommonAttributes", "attributeCounts", "prop", "key", "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", "gridColsClass", "part", "numericValue", "unitMatch", "unit", "validUnits", "selectElement", "unitOption", "rangeElement", "isColorProperty", "inputType", "fallbackColor", "updatedInputStyle", "generateRootVariablesSection", "isColor", "hasAlpha", "isNumeric", "generateStylesSection", "targets", "activeStyle", "layerKey", "dropdown", "buttonClass", "generatePseudosSection", "generateStylePropertiesSection", "styleKey", "stylesObj", "generateBreakpointsSection", "generateBreakpointStylesSection", "generateAnimationsSection", "generateAnimationPropertySection", "content", "keyframes", "activeKeyframe", "generateAttributesSection", "attributeTag", "svgImage", "element", "elm", "propKey", "lowerPropKey", "nodeType", "numAttr", "numTypes", "numType", "editorNav", "large", "title", "CloseLabel", "ConfirmLabel", "onLoad", "onClose", "onConfirm", "hClass", "html", "modal", "timesBtn", "closeBtn", "confirmBtn", "Blocks", "btnClass", "blockItem", "componentItem", "block", "component", "container", "size", "viewportWidth", "viewportHeight", "previewElm", "width", "height", "doc", "currentDoc", "newDoc", "modalContent", "newName", "defaultValues", "rootVariables", "fixedValueProperties", "rangedValueProperties", "rootVariableOptions", "fixedValuePropertyOptions", "rangedValuePropertyOptions", "propertyTypeSelect", "unitSelect", "unitSection", "updatePropertyDetails", "selectedType", "propertyTypeInput", "noUnit", "cssQuickCommands", "propertyString", "propertyType", "userDefinedValue", "str", "finalValue", "defaultValue", "e", "query", "found", "currentValue", "detected", "pseudo", "pseudoSelector", "pseudoStyles", "acc", "rule", "s", "existingPseudo", "oldName", "style", "pseudoIndex", "url", "response", "error", "attrs", "q", "attribute", "input", "elementToJson", "noTextElements", "tagName", "props", "jsonToElement", "json", "renderElement", "escapeHtml", "childElement", "text", "map", "m", "beautifyHtml", "tab", "indent", "css", "importRegex", "importMatch", "importUrl", "removeComments", "selectorRegex", "mediaQueryRegex", "keyframesRegex", "processSelector", "properties", "varName", "varValue", "pseudoMatch", "baseSelector", "currentTarget", "pseudoObj", "processRules", "cssRules", "match", "processKeyframes", "keyframesName", "keyframesRules", "segment", "keyframeName", "propertiesPart", "mediaMatch", "mediaCondition", "mediaRules", "mediaTarget", "cssWithoutMedia", "keyframesMatch", "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", "applyCollapseStateToSiblings", "collapseState", "i", "newCollapseState", "collapseLayer", "hideLayer", "applyVisibilityToSiblings", "visibilityState", "newVisibilityState", "applySelectionToSiblings", "selectionState", "childIndex", "newSelectionState", "findLayerById", "lastSelectedLayerId", "foundLayer", "searchLayer", "j", "excludeId", "assignIds", "blocks", "newBlocks", "newBlock", "l", "clonedLayer", "rootLayer", "pastedLayers", "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", "fadeTimeout", "scale", "reader", "frameworks", "framework", "formattedFrameworkName", "selectedFramework", "c", "names", "registrations", "registration", "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", "data", "updatedData", "colorKey", "color", "filename", "fileContent", "minified", "idoc", "zip", "kodeWeaveProject", "licenseStr", "READMEStr", "cssContent", "cssBuildItems", "cssBuildItemsString", "TailwindNoReset", "promises", "parts", "cssBuild", "css4html", "twFound", "tailwindDirectives", "tailwindStyles", "cssImport", "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", "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/src/App-backup.js b/src/App-backup.js index 1472aba..ef41470 100644 --- a/src/App-backup.js +++ b/src/App-backup.js @@ -8673,7 +8673,7 @@ document.addEventListener('DOMContentLoaded', function() { App.render('#app'); getIFrameClientSize(); // URL to the JSON file - const jsonFileUrl = '../cssQuickCommands.json'; + const jsonFileUrl = 'cssQuickCommands.json'; // Apply the CSS quick commands applyCssQuickCommands(jsonFileUrl); diff --git a/src/App.js b/src/App.js index 1472aba..ef41470 100644 --- a/src/App.js +++ b/src/App.js @@ -8673,7 +8673,7 @@ document.addEventListener('DOMContentLoaded', function() { App.render('#app'); getIFrameClientSize(); // URL to the JSON file - const jsonFileUrl = '../cssQuickCommands.json'; + const jsonFileUrl = 'cssQuickCommands.json'; // Apply the CSS quick commands applyCssQuickCommands(jsonFileUrl); diff --git a/src/cssQuickCommands.json b/src/cssQuickCommands.json new file mode 100644 index 0000000..66832fd --- /dev/null +++ b/src/cssQuickCommands.json @@ -0,0 +1,3366 @@ +{ + "container": "width: 100%;", + "sr-only": "position: absolute; width: 1px; height: 1px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: -1px; margin-right: -1px; margin-bottom: -1px; margin-left: -1px; overflow-x: hidden; overflow-y: hidden; clip: rect(0px, 0px, 0px, 0px); white-space-collapse: collapse; text-wrap: nowrap; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px;", + "not-sr-only": "position: static; width: auto; height: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: visible; overflow-y: visible; clip: auto; white-space-collapse: collapse; text-wrap: wrap;", + "pointer-events-none": "pointer-events: none;", + "pointer-events-auto": "pointer-events: auto;", + "visible": "visibility: visible;", + "invisible": "visibility: hidden;", + "static": "position: static;", + "fixed": "position: fixed;", + "absolute": "position: absolute;", + "relative": "position: relative;", + "sticky": "position: sticky;", + "inset-0": "top: 0px; right: 0px; bottom: 0px; left: 0px;", + "inset-1": "top: 0.25rem; right: 0.25rem; bottom: 0.25rem; left: 0.25rem;", + "inset-2": "top: 0.5rem; right: 0.5rem; bottom: 0.5rem; left: 0.5rem;", + "inset-3": "top: 0.75rem; right: 0.75rem; bottom: 0.75rem; left: 0.75rem;", + "inset-4": "top: 1rem; right: 1rem; bottom: 1rem; left: 1rem;", + "inset-5": "top: 1.25rem; right: 1.25rem; bottom: 1.25rem; left: 1.25rem;", + "inset-6": "top: 1.5rem; right: 1.5rem; bottom: 1.5rem; left: 1.5rem;", + "inset-7": "top: 1.75rem; right: 1.75rem; bottom: 1.75rem; left: 1.75rem;", + "inset-8": "top: 2rem; right: 2rem; bottom: 2rem; left: 2rem;", + "inset-9": "top: 2.25rem; right: 2.25rem; bottom: 2.25rem; left: 2.25rem;", + "inset-10": "top: 2.5rem; right: 2.5rem; bottom: 2.5rem; left: 2.5rem;", + "inset-11": "top: 2.75rem; right: 2.75rem; bottom: 2.75rem; left: 2.75rem;", + "inset-12": "top: 3rem; right: 3rem; bottom: 3rem; left: 3rem;", + "inset-14": "top: 3.5rem; right: 3.5rem; bottom: 3.5rem; left: 3.5rem;", + "inset-16": "top: 4rem; right: 4rem; bottom: 4rem; left: 4rem;", + "inset-20": "top: 5rem; right: 5rem; bottom: 5rem; left: 5rem;", + "inset-24": "top: 6rem; right: 6rem; bottom: 6rem; left: 6rem;", + "inset-28": "top: 7rem; right: 7rem; bottom: 7rem; left: 7rem;", + "inset-32": "top: 8rem; right: 8rem; bottom: 8rem; left: 8rem;", + "inset-36": "top: 9rem; right: 9rem; bottom: 9rem; left: 9rem;", + "inset-40": "top: 10rem; right: 10rem; bottom: 10rem; left: 10rem;", + "inset-44": "top: 11rem; right: 11rem; bottom: 11rem; left: 11rem;", + "inset-48": "top: 12rem; right: 12rem; bottom: 12rem; left: 12rem;", + "inset-52": "top: 13rem; right: 13rem; bottom: 13rem; left: 13rem;", + "inset-56": "top: 14rem; right: 14rem; bottom: 14rem; left: 14rem;", + "inset-60": "top: 15rem; right: 15rem; bottom: 15rem; left: 15rem;", + "inset-64": "top: 16rem; right: 16rem; bottom: 16rem; left: 16rem;", + "inset-72": "top: 18rem; right: 18rem; bottom: 18rem; left: 18rem;", + "inset-80": "top: 20rem; right: 20rem; bottom: 20rem; left: 20rem;", + "inset-96": "top: 24rem; right: 24rem; bottom: 24rem; left: 24rem;", + "inset-auto": "top: auto; right: auto; bottom: auto; left: auto;", + "inset-px": "top: 1px; right: 1px; bottom: 1px; left: 1px;", + "inset-0\\.5": "top: 0.125rem; right: 0.125rem; bottom: 0.125rem; left: 0.125rem;", + "inset-1\\.5": "top: 0.375rem; right: 0.375rem; bottom: 0.375rem; left: 0.375rem;", + "inset-2\\.5": "top: 0.625rem; right: 0.625rem; bottom: 0.625rem; left: 0.625rem;", + "inset-3\\.5": "top: 0.875rem; right: 0.875rem; bottom: 0.875rem; left: 0.875rem;", + "-inset-0": "top: 0px; right: 0px; bottom: 0px; left: 0px;", + "-inset-1": "top: -0.25rem; right: -0.25rem; bottom: -0.25rem; left: -0.25rem;", + "-inset-2": "top: -0.5rem; right: -0.5rem; bottom: -0.5rem; left: -0.5rem;", + "-inset-3": "top: -0.75rem; right: -0.75rem; bottom: -0.75rem; left: -0.75rem;", + "-inset-4": "top: -1rem; right: -1rem; bottom: -1rem; left: -1rem;", + "-inset-5": "top: -1.25rem; right: -1.25rem; bottom: -1.25rem; left: -1.25rem;", + "-inset-6": "top: -1.5rem; right: -1.5rem; bottom: -1.5rem; left: -1.5rem;", + "-inset-7": "top: -1.75rem; right: -1.75rem; bottom: -1.75rem; left: -1.75rem;", + "-inset-8": "top: -2rem; right: -2rem; bottom: -2rem; left: -2rem;", + "-inset-9": "top: -2.25rem; right: -2.25rem; bottom: -2.25rem; left: -2.25rem;", + "-inset-10": "top: -2.5rem; right: -2.5rem; bottom: -2.5rem; left: -2.5rem;", + "-inset-11": "top: -2.75rem; right: -2.75rem; bottom: -2.75rem; left: -2.75rem;", + "-inset-12": "top: -3rem; right: -3rem; bottom: -3rem; left: -3rem;", + "-inset-14": "top: -3.5rem; right: -3.5rem; bottom: -3.5rem; left: -3.5rem;", + "-inset-16": "top: -4rem; right: -4rem; bottom: -4rem; left: -4rem;", + "-inset-20": "top: -5rem; right: -5rem; bottom: -5rem; left: -5rem;", + "-inset-24": "top: -6rem; right: -6rem; bottom: -6rem; left: -6rem;", + "-inset-28": "top: -7rem; right: -7rem; bottom: -7rem; left: -7rem;", + "-inset-32": "top: -8rem; right: -8rem; bottom: -8rem; left: -8rem;", + "-inset-36": "top: -9rem; right: -9rem; bottom: -9rem; left: -9rem;", + "-inset-40": "top: -10rem; right: -10rem; bottom: -10rem; left: -10rem;", + "-inset-44": "top: -11rem; right: -11rem; bottom: -11rem; left: -11rem;", + "-inset-48": "top: -12rem; right: -12rem; bottom: -12rem; left: -12rem;", + "-inset-52": "top: -13rem; right: -13rem; bottom: -13rem; left: -13rem;", + "-inset-56": "top: -14rem; right: -14rem; bottom: -14rem; left: -14rem;", + "-inset-60": "top: -15rem; right: -15rem; bottom: -15rem; left: -15rem;", + "-inset-64": "top: -16rem; right: -16rem; bottom: -16rem; left: -16rem;", + "-inset-72": "top: -18rem; right: -18rem; bottom: -18rem; left: -18rem;", + "-inset-80": "top: -20rem; right: -20rem; bottom: -20rem; left: -20rem;", + "-inset-96": "top: -24rem; right: -24rem; bottom: -24rem; left: -24rem;", + "-inset-px": "top: -1px; right: -1px; bottom: -1px; left: -1px;", + "-inset-0\\.5": "top: -0.125rem; right: -0.125rem; bottom: -0.125rem; left: -0.125rem;", + "-inset-1\\.5": "top: -0.375rem; right: -0.375rem; bottom: -0.375rem; left: -0.375rem;", + "-inset-2\\.5": "top: -0.625rem; right: -0.625rem; bottom: -0.625rem; left: -0.625rem;", + "-inset-3\\.5": "top: -0.875rem; right: -0.875rem; bottom: -0.875rem; left: -0.875rem;", + "inset-1\\/2": "top: 50%; right: 50%; bottom: 50%; left: 50%;", + "inset-1\\/3": "top: 33.3333%; right: 33.3333%; bottom: 33.3333%; left: 33.3333%;", + "inset-2\\/3": "top: 66.6667%; right: 66.6667%; bottom: 66.6667%; left: 66.6667%;", + "inset-1\\/4": "top: 25%; right: 25%; bottom: 25%; left: 25%;", + "inset-2\\/4": "top: 50%; right: 50%; bottom: 50%; left: 50%;", + "inset-3\\/4": "top: 75%; right: 75%; bottom: 75%; left: 75%;", + "inset-full": "top: 100%; right: 100%; bottom: 100%; left: 100%;", + "-inset-1\\/2": "top: -50%; right: -50%; bottom: -50%; left: -50%;", + "-inset-1\\/3": "top: -33.3333%; right: -33.3333%; bottom: -33.3333%; left: -33.3333%;", + "-inset-2\\/3": "top: -66.6667%; right: -66.6667%; bottom: -66.6667%; left: -66.6667%;", + "-inset-1\\/4": "top: -25%; right: -25%; bottom: -25%; left: -25%;", + "-inset-2\\/4": "top: -50%; right: -50%; bottom: -50%; left: -50%;", + "-inset-3\\/4": "top: -75%; right: -75%; bottom: -75%; left: -75%;", + "-inset-full": "top: -100%; right: -100%; bottom: -100%; left: -100%;", + "inset-x-0": "left: 0px; right: 0px;", + "inset-x-1": "left: 0.25rem; right: 0.25rem;", + "inset-x-2": "left: 0.5rem; right: 0.5rem;", + "inset-x-3": "left: 0.75rem; right: 0.75rem;", + "inset-x-4": "left: 1rem; right: 1rem;", + "inset-x-5": "left: 1.25rem; right: 1.25rem;", + "inset-x-6": "left: 1.5rem; right: 1.5rem;", + "inset-x-7": "left: 1.75rem; right: 1.75rem;", + "inset-x-8": "left: 2rem; right: 2rem;", + "inset-x-9": "left: 2.25rem; right: 2.25rem;", + "inset-x-10": "left: 2.5rem; right: 2.5rem;", + "inset-x-11": "left: 2.75rem; right: 2.75rem;", + "inset-x-12": "left: 3rem; right: 3rem;", + "inset-x-14": "left: 3.5rem; right: 3.5rem;", + "inset-x-16": "left: 4rem; right: 4rem;", + "inset-x-20": "left: 5rem; right: 5rem;", + "inset-x-24": "left: 6rem; right: 6rem;", + "inset-x-28": "left: 7rem; right: 7rem;", + "inset-x-32": "left: 8rem; right: 8rem;", + "inset-x-36": "left: 9rem; right: 9rem;", + "inset-x-40": "left: 10rem; right: 10rem;", + "inset-x-44": "left: 11rem; right: 11rem;", + "inset-x-48": "left: 12rem; right: 12rem;", + "inset-x-52": "left: 13rem; right: 13rem;", + "inset-x-56": "left: 14rem; right: 14rem;", + "inset-x-60": "left: 15rem; right: 15rem;", + "inset-x-64": "left: 16rem; right: 16rem;", + "inset-x-72": "left: 18rem; right: 18rem;", + "inset-x-80": "left: 20rem; right: 20rem;", + "inset-x-96": "left: 24rem; right: 24rem;", + "inset-x-auto": "left: auto; right: auto;", + "inset-x-px": "left: 1px; right: 1px;", + "inset-x-0\\.5": "left: 0.125rem; right: 0.125rem;", + "inset-x-1\\.5": "left: 0.375rem; right: 0.375rem;", + "inset-x-2\\.5": "left: 0.625rem; right: 0.625rem;", + "inset-x-3\\.5": "left: 0.875rem; right: 0.875rem;", + "-inset-x-0": "left: 0px; right: 0px;", + "-inset-x-1": "left: -0.25rem; right: -0.25rem;", + "-inset-x-2": "left: -0.5rem; right: -0.5rem;", + "-inset-x-3": "left: -0.75rem; right: -0.75rem;", + "-inset-x-4": "left: -1rem; right: -1rem;", + "-inset-x-5": "left: -1.25rem; right: -1.25rem;", + "-inset-x-6": "left: -1.5rem; right: -1.5rem;", + "-inset-x-7": "left: -1.75rem; right: -1.75rem;", + "-inset-x-8": "left: -2rem; right: -2rem;", + "-inset-x-9": "left: -2.25rem; right: -2.25rem;", + "-inset-x-10": "left: -2.5rem; right: -2.5rem;", + "-inset-x-11": "left: -2.75rem; right: -2.75rem;", + "-inset-x-12": "left: -3rem; right: -3rem;", + "-inset-x-14": "left: -3.5rem; right: -3.5rem;", + "-inset-x-16": "left: -4rem; right: -4rem;", + "-inset-x-20": "left: -5rem; right: -5rem;", + "-inset-x-24": "left: -6rem; right: -6rem;", + "-inset-x-28": "left: -7rem; right: -7rem;", + "-inset-x-32": "left: -8rem; right: -8rem;", + "-inset-x-36": "left: -9rem; right: -9rem;", + "-inset-x-40": "left: -10rem; right: -10rem;", + "-inset-x-44": "left: -11rem; right: -11rem;", + "-inset-x-48": "left: -12rem; right: -12rem;", + "-inset-x-52": "left: -13rem; right: -13rem;", + "-inset-x-56": "left: -14rem; right: -14rem;", + "-inset-x-60": "left: -15rem; right: -15rem;", + "-inset-x-64": "left: -16rem; right: -16rem;", + "-inset-x-72": "left: -18rem; right: -18rem;", + "-inset-x-80": "left: -20rem; right: -20rem;", + "-inset-x-96": "left: -24rem; right: -24rem;", + "-inset-x-px": "left: -1px; right: -1px;", + "-inset-x-0\\.5": "left: -0.125rem; right: -0.125rem;", + "-inset-x-1\\.5": "left: -0.375rem; right: -0.375rem;", + "-inset-x-2\\.5": "left: -0.625rem; right: -0.625rem;", + "-inset-x-3\\.5": "left: -0.875rem; right: -0.875rem;", + "inset-x-1\\/2": "left: 50%; right: 50%;", + "inset-x-1\\/3": "left: 33.3333%; right: 33.3333%;", + "inset-x-2\\/3": "left: 66.6667%; right: 66.6667%;", + "inset-x-1\\/4": "left: 25%; right: 25%;", + "inset-x-2\\/4": "left: 50%; right: 50%;", + "inset-x-3\\/4": "left: 75%; right: 75%;", + "inset-x-full": "left: 100%; right: 100%;", + "-inset-x-1\\/2": "left: -50%; right: -50%;", + "-inset-x-1\\/3": "left: -33.3333%; right: -33.3333%;", + "-inset-x-2\\/3": "left: -66.6667%; right: -66.6667%;", + "-inset-x-1\\/4": "left: -25%; right: -25%;", + "-inset-x-2\\/4": "left: -50%; right: -50%;", + "-inset-x-3\\/4": "left: -75%; right: -75%;", + "-inset-x-full": "left: -100%; right: -100%;", + "inset-y-0": "top: 0px; bottom: 0px;", + "inset-y-1": "top: 0.25rem; bottom: 0.25rem;", + "inset-y-2": "top: 0.5rem; bottom: 0.5rem;", + "inset-y-3": "top: 0.75rem; bottom: 0.75rem;", + "inset-y-4": "top: 1rem; bottom: 1rem;", + "inset-y-5": "top: 1.25rem; bottom: 1.25rem;", + "inset-y-6": "top: 1.5rem; bottom: 1.5rem;", + "inset-y-7": "top: 1.75rem; bottom: 1.75rem;", + "inset-y-8": "top: 2rem; bottom: 2rem;", + "inset-y-9": "top: 2.25rem; bottom: 2.25rem;", + "inset-y-10": "top: 2.5rem; bottom: 2.5rem;", + "inset-y-11": "top: 2.75rem; bottom: 2.75rem;", + "inset-y-12": "top: 3rem; bottom: 3rem;", + "inset-y-14": "top: 3.5rem; bottom: 3.5rem;", + "inset-y-16": "top: 4rem; bottom: 4rem;", + "inset-y-20": "top: 5rem; bottom: 5rem;", + "inset-y-24": "top: 6rem; bottom: 6rem;", + "inset-y-28": "top: 7rem; bottom: 7rem;", + "inset-y-32": "top: 8rem; bottom: 8rem;", + "inset-y-36": "top: 9rem; bottom: 9rem;", + "inset-y-40": "top: 10rem; bottom: 10rem;", + "inset-y-44": "top: 11rem; bottom: 11rem;", + "inset-y-48": "top: 12rem; bottom: 12rem;", + "inset-y-52": "top: 13rem; bottom: 13rem;", + "inset-y-56": "top: 14rem; bottom: 14rem;", + "inset-y-60": "top: 15rem; bottom: 15rem;", + "inset-y-64": "top: 16rem; bottom: 16rem;", + "inset-y-72": "top: 18rem; bottom: 18rem;", + "inset-y-80": "top: 20rem; bottom: 20rem;", + "inset-y-96": "top: 24rem; bottom: 24rem;", + "inset-y-auto": "top: auto; bottom: auto;", + "inset-y-px": "top: 1px; bottom: 1px;", + "inset-y-0\\.5": "top: 0.125rem; bottom: 0.125rem;", + "inset-y-1\\.5": "top: 0.375rem; bottom: 0.375rem;", + "inset-y-2\\.5": "top: 0.625rem; bottom: 0.625rem;", + "inset-y-3\\.5": "top: 0.875rem; bottom: 0.875rem;", + "-inset-y-0": "top: 0px; bottom: 0px;", + "-inset-y-1": "top: -0.25rem; bottom: -0.25rem;", + "-inset-y-2": "top: -0.5rem; bottom: -0.5rem;", + "-inset-y-3": "top: -0.75rem; bottom: -0.75rem;", + "-inset-y-4": "top: -1rem; bottom: -1rem;", + "-inset-y-5": "top: -1.25rem; bottom: -1.25rem;", + "-inset-y-6": "top: -1.5rem; bottom: -1.5rem;", + "-inset-y-7": "top: -1.75rem; bottom: -1.75rem;", + "-inset-y-8": "top: -2rem; bottom: -2rem;", + "-inset-y-9": "top: -2.25rem; bottom: -2.25rem;", + "-inset-y-10": "top: -2.5rem; bottom: -2.5rem;", + "-inset-y-11": "top: -2.75rem; bottom: -2.75rem;", + "-inset-y-12": "top: -3rem; bottom: -3rem;", + "-inset-y-14": "top: -3.5rem; bottom: -3.5rem;", + "-inset-y-16": "top: -4rem; bottom: -4rem;", + "-inset-y-20": "top: -5rem; bottom: -5rem;", + "-inset-y-24": "top: -6rem; bottom: -6rem;", + "-inset-y-28": "top: -7rem; bottom: -7rem;", + "-inset-y-32": "top: -8rem; bottom: -8rem;", + "-inset-y-36": "top: -9rem; bottom: -9rem;", + "-inset-y-40": "top: -10rem; bottom: -10rem;", + "-inset-y-44": "top: -11rem; bottom: -11rem;", + "-inset-y-48": "top: -12rem; bottom: -12rem;", + "-inset-y-52": "top: -13rem; bottom: -13rem;", + "-inset-y-56": "top: -14rem; bottom: -14rem;", + "-inset-y-60": "top: -15rem; bottom: -15rem;", + "-inset-y-64": "top: -16rem; bottom: -16rem;", + "-inset-y-72": "top: -18rem; bottom: -18rem;", + "-inset-y-80": "top: -20rem; bottom: -20rem;", + "-inset-y-96": "top: -24rem; bottom: -24rem;", + "-inset-y-px": "top: -1px; bottom: -1px;", + "-inset-y-0\\.5": "top: -0.125rem; bottom: -0.125rem;", + "-inset-y-1\\.5": "top: -0.375rem; bottom: -0.375rem;", + "-inset-y-2\\.5": "top: -0.625rem; bottom: -0.625rem;", + "-inset-y-3\\.5": "top: -0.875rem; bottom: -0.875rem;", + "inset-y-1\\/2": "top: 50%; bottom: 50%;", + "inset-y-1\\/3": "top: 33.3333%; bottom: 33.3333%;", + "inset-y-2\\/3": "top: 66.6667%; bottom: 66.6667%;", + "inset-y-1\\/4": "top: 25%; bottom: 25%;", + "inset-y-2\\/4": "top: 50%; bottom: 50%;", + "inset-y-3\\/4": "top: 75%; bottom: 75%;", + "inset-y-full": "top: 100%; bottom: 100%;", + "-inset-y-1\\/2": "top: -50%; bottom: -50%;", + "-inset-y-1\\/3": "top: -33.3333%; bottom: -33.3333%;", + "-inset-y-2\\/3": "top: -66.6667%; bottom: -66.6667%;", + "-inset-y-1\\/4": "top: -25%; bottom: -25%;", + "-inset-y-2\\/4": "top: -50%; bottom: -50%;", + "-inset-y-3\\/4": "top: -75%; bottom: -75%;", + "-inset-y-full": "top: -100%; bottom: -100%;", + "top-0": "top: 0px;", + "top-1": "top: 0.25rem;", + "top-2": "top: 0.5rem;", + "top-3": "top: 0.75rem;", + "top-4": "top: 1rem;", + "top-5": "top: 1.25rem;", + "top-6": "top: 1.5rem;", + "top-7": "top: 1.75rem;", + "top-8": "top: 2rem;", + "top-9": "top: 2.25rem;", + "top-10": "top: 2.5rem;", + "top-11": "top: 2.75rem;", + "top-12": "top: 3rem;", + "top-14": "top: 3.5rem;", + "top-16": "top: 4rem;", + "top-20": "top: 5rem;", + "top-24": "top: 6rem;", + "top-28": "top: 7rem;", + "top-32": "top: 8rem;", + "top-36": "top: 9rem;", + "top-40": "top: 10rem;", + "top-44": "top: 11rem;", + "top-48": "top: 12rem;", + "top-52": "top: 13rem;", + "top-56": "top: 14rem;", + "top-60": "top: 15rem;", + "top-64": "top: 16rem;", + "top-72": "top: 18rem;", + "top-80": "top: 20rem;", + "top-96": "top: 24rem;", + "top-auto": "top: auto;", + "top-px": "top: 1px;", + "top-0\\.5": "top: 0.125rem;", + "top-1\\.5": "top: 0.375rem;", + "top-2\\.5": "top: 0.625rem;", + "top-3\\.5": "top: 0.875rem;", + "-top-0": "top: 0px;", + "-top-1": "top: -0.25rem;", + "-top-2": "top: -0.5rem;", + "-top-3": "top: -0.75rem;", + "-top-4": "top: -1rem;", + "-top-5": "top: -1.25rem;", + "-top-6": "top: -1.5rem;", + "-top-7": "top: -1.75rem;", + "-top-8": "top: -2rem;", + "-top-9": "top: -2.25rem;", + "-top-10": "top: -2.5rem;", + "-top-11": "top: -2.75rem;", + "-top-12": "top: -3rem;", + "-top-14": "top: -3.5rem;", + "-top-16": "top: -4rem;", + "-top-20": "top: -5rem;", + "-top-24": "top: -6rem;", + "-top-28": "top: -7rem;", + "-top-32": "top: -8rem;", + "-top-36": "top: -9rem;", + "-top-40": "top: -10rem;", + "-top-44": "top: -11rem;", + "-top-48": "top: -12rem;", + "-top-52": "top: -13rem;", + "-top-56": "top: -14rem;", + "-top-60": "top: -15rem;", + "-top-64": "top: -16rem;", + "-top-72": "top: -18rem;", + "-top-80": "top: -20rem;", + "-top-96": "top: -24rem;", + "-top-px": "top: -1px;", + "-top-0\\.5": "top: -0.125rem;", + "-top-1\\.5": "top: -0.375rem;", + "-top-2\\.5": "top: -0.625rem;", + "-top-3\\.5": "top: -0.875rem;", + "top-1\\/2": "top: 50%;", + "top-1\\/3": "top: 33.3333%;", + "top-2\\/3": "top: 66.6667%;", + "top-1\\/4": "top: 25%;", + "top-2\\/4": "top: 50%;", + "top-3\\/4": "top: 75%;", + "top-full": "top: 100%;", + "-top-1\\/2": "top: -50%;", + "-top-1\\/3": "top: -33.3333%;", + "-top-2\\/3": "top: -66.6667%;", + "-top-1\\/4": "top: -25%;", + "-top-2\\/4": "top: -50%;", + "-top-3\\/4": "top: -75%;", + "-top-full": "top: -100%;", + "right-0": "right: 0px;", + "right-1": "right: 0.25rem;", + "right-2": "right: 0.5rem;", + "right-3": "right: 0.75rem;", + "right-4": "right: 1rem;", + "right-5": "right: 1.25rem;", + "right-6": "right: 1.5rem;", + "right-7": "right: 1.75rem;", + "right-8": "right: 2rem;", + "right-9": "right: 2.25rem;", + "right-10": "right: 2.5rem;", + "right-11": "right: 2.75rem;", + "right-12": "right: 3rem;", + "right-14": "right: 3.5rem;", + "right-16": "right: 4rem;", + "right-20": "right: 5rem;", + "right-24": "right: 6rem;", + "right-28": "right: 7rem;", + "right-32": "right: 8rem;", + "right-36": "right: 9rem;", + "right-40": "right: 10rem;", + "right-44": "right: 11rem;", + "right-48": "right: 12rem;", + "right-52": "right: 13rem;", + "right-56": "right: 14rem;", + "right-60": "right: 15rem;", + "right-64": "right: 16rem;", + "right-72": "right: 18rem;", + "right-80": "right: 20rem;", + "right-96": "right: 24rem;", + "right-auto": "right: auto;", + "right-px": "right: 1px;", + "right-0\\.5": "right: 0.125rem;", + "right-1\\.5": "right: 0.375rem;", + "right-2\\.5": "right: 0.625rem;", + "right-3\\.5": "right: 0.875rem;", + "-right-0": "right: 0px;", + "-right-1": "right: -0.25rem;", + "-right-2": "right: -0.5rem;", + "-right-3": "right: -0.75rem;", + "-right-4": "right: -1rem;", + "-right-5": "right: -1.25rem;", + "-right-6": "right: -1.5rem;", + "-right-7": "right: -1.75rem;", + "-right-8": "right: -2rem;", + "-right-9": "right: -2.25rem;", + "-right-10": "right: -2.5rem;", + "-right-11": "right: -2.75rem;", + "-right-12": "right: -3rem;", + "-right-14": "right: -3.5rem;", + "-right-16": "right: -4rem;", + "-right-20": "right: -5rem;", + "-right-24": "right: -6rem;", + "-right-28": "right: -7rem;", + "-right-32": "right: -8rem;", + "-right-36": "right: -9rem;", + "-right-40": "right: -10rem;", + "-right-44": "right: -11rem;", + "-right-48": "right: -12rem;", + "-right-52": "right: -13rem;", + "-right-56": "right: -14rem;", + "-right-60": "right: -15rem;", + "-right-64": "right: -16rem;", + "-right-72": "right: -18rem;", + "-right-80": "right: -20rem;", + "-right-96": "right: -24rem;", + "-right-px": "right: -1px;", + "-right-0\\.5": "right: -0.125rem;", + "-right-1\\.5": "right: -0.375rem;", + "-right-2\\.5": "right: -0.625rem;", + "-right-3\\.5": "right: -0.875rem;", + "right-1\\/2": "right: 50%;", + "right-1\\/3": "right: 33.3333%;", + "right-2\\/3": "right: 66.6667%;", + "right-1\\/4": "right: 25%;", + "right-2\\/4": "right: 50%;", + "right-3\\/4": "right: 75%;", + "right-full": "right: 100%;", + "-right-1\\/2": "right: -50%;", + "-right-1\\/3": "right: -33.3333%;", + "-right-2\\/3": "right: -66.6667%;", + "-right-1\\/4": "right: -25%;", + "-right-2\\/4": "right: -50%;", + "-right-3\\/4": "right: -75%;", + "-right-full": "right: -100%;", + "bottom-0": "bottom: 0px;", + "bottom-1": "bottom: 0.25rem;", + "bottom-2": "bottom: 0.5rem;", + "bottom-3": "bottom: 0.75rem;", + "bottom-4": "bottom: 1rem;", + "bottom-5": "bottom: 1.25rem;", + "bottom-6": "bottom: 1.5rem;", + "bottom-7": "bottom: 1.75rem;", + "bottom-8": "bottom: 2rem;", + "bottom-9": "bottom: 2.25rem;", + "bottom-10": "bottom: 2.5rem;", + "bottom-11": "bottom: 2.75rem;", + "bottom-12": "bottom: 3rem;", + "bottom-14": "bottom: 3.5rem;", + "bottom-16": "bottom: 4rem;", + "bottom-20": "bottom: 5rem;", + "bottom-24": "bottom: 6rem;", + "bottom-28": "bottom: 7rem;", + "bottom-32": "bottom: 8rem;", + "bottom-36": "bottom: 9rem;", + "bottom-40": "bottom: 10rem;", + "bottom-44": "bottom: 11rem;", + "bottom-48": "bottom: 12rem;", + "bottom-52": "bottom: 13rem;", + "bottom-56": "bottom: 14rem;", + "bottom-60": "bottom: 15rem;", + "bottom-64": "bottom: 16rem;", + "bottom-72": "bottom: 18rem;", + "bottom-80": "bottom: 20rem;", + "bottom-96": "bottom: 24rem;", + "bottom-auto": "bottom: auto;", + "bottom-px": "bottom: 1px;", + "bottom-0\\.5": "bottom: 0.125rem;", + "bottom-1\\.5": "bottom: 0.375rem;", + "bottom-2\\.5": "bottom: 0.625rem;", + "bottom-3\\.5": "bottom: 0.875rem;", + "-bottom-0": "bottom: 0px;", + "-bottom-1": "bottom: -0.25rem;", + "-bottom-2": "bottom: -0.5rem;", + "-bottom-3": "bottom: -0.75rem;", + "-bottom-4": "bottom: -1rem;", + "-bottom-5": "bottom: -1.25rem;", + "-bottom-6": "bottom: -1.5rem;", + "-bottom-7": "bottom: -1.75rem;", + "-bottom-8": "bottom: -2rem;", + "-bottom-9": "bottom: -2.25rem;", + "-bottom-10": "bottom: -2.5rem;", + "-bottom-11": "bottom: -2.75rem;", + "-bottom-12": "bottom: -3rem;", + "-bottom-14": "bottom: -3.5rem;", + "-bottom-16": "bottom: -4rem;", + "-bottom-20": "bottom: -5rem;", + "-bottom-24": "bottom: -6rem;", + "-bottom-28": "bottom: -7rem;", + "-bottom-32": "bottom: -8rem;", + "-bottom-36": "bottom: -9rem;", + "-bottom-40": "bottom: -10rem;", + "-bottom-44": "bottom: -11rem;", + "-bottom-48": "bottom: -12rem;", + "-bottom-52": "bottom: -13rem;", + "-bottom-56": "bottom: -14rem;", + "-bottom-60": "bottom: -15rem;", + "-bottom-64": "bottom: -16rem;", + "-bottom-72": "bottom: -18rem;", + "-bottom-80": "bottom: -20rem;", + "-bottom-96": "bottom: -24rem;", + "-bottom-px": "bottom: -1px;", + "-bottom-0\\.5": "bottom: -0.125rem;", + "-bottom-1\\.5": "bottom: -0.375rem;", + "-bottom-2\\.5": "bottom: -0.625rem;", + "-bottom-3\\.5": "bottom: -0.875rem;", + "bottom-1\\/2": "bottom: 50%;", + "bottom-1\\/3": "bottom: 33.3333%;", + "bottom-2\\/3": "bottom: 66.6667%;", + "bottom-1\\/4": "bottom: 25%;", + "bottom-2\\/4": "bottom: 50%;", + "bottom-3\\/4": "bottom: 75%;", + "bottom-full": "bottom: 100%;", + "-bottom-1\\/2": "bottom: -50%;", + "-bottom-1\\/3": "bottom: -33.3333%;", + "-bottom-2\\/3": "bottom: -66.6667%;", + "-bottom-1\\/4": "bottom: -25%;", + "-bottom-2\\/4": "bottom: -50%;", + "-bottom-3\\/4": "bottom: -75%;", + "-bottom-full": "bottom: -100%;", + "left-0": "left: 0px;", + "left-1": "left: 0.25rem;", + "left-2": "left: 0.5rem;", + "left-3": "left: 0.75rem;", + "left-4": "left: 1rem;", + "left-5": "left: 1.25rem;", + "left-6": "left: 1.5rem;", + "left-7": "left: 1.75rem;", + "left-8": "left: 2rem;", + "left-9": "left: 2.25rem;", + "left-10": "left: 2.5rem;", + "left-11": "left: 2.75rem;", + "left-12": "left: 3rem;", + "left-14": "left: 3.5rem;", + "left-16": "left: 4rem;", + "left-20": "left: 5rem;", + "left-24": "left: 6rem;", + "left-28": "left: 7rem;", + "left-32": "left: 8rem;", + "left-36": "left: 9rem;", + "left-40": "left: 10rem;", + "left-44": "left: 11rem;", + "left-48": "left: 12rem;", + "left-52": "left: 13rem;", + "left-56": "left: 14rem;", + "left-60": "left: 15rem;", + "left-64": "left: 16rem;", + "left-72": "left: 18rem;", + "left-80": "left: 20rem;", + "left-96": "left: 24rem;", + "left-auto": "left: auto;", + "left-px": "left: 1px;", + "left-0\\.5": "left: 0.125rem;", + "left-1\\.5": "left: 0.375rem;", + "left-2\\.5": "left: 0.625rem;", + "left-3\\.5": "left: 0.875rem;", + "-left-0": "left: 0px;", + "-left-1": "left: -0.25rem;", + "-left-2": "left: -0.5rem;", + "-left-3": "left: -0.75rem;", + "-left-4": "left: -1rem;", + "-left-5": "left: -1.25rem;", + "-left-6": "left: -1.5rem;", + "-left-7": "left: -1.75rem;", + "-left-8": "left: -2rem;", + "-left-9": "left: -2.25rem;", + "-left-10": "left: -2.5rem;", + "-left-11": "left: -2.75rem;", + "-left-12": "left: -3rem;", + "-left-14": "left: -3.5rem;", + "-left-16": "left: -4rem;", + "-left-20": "left: -5rem;", + "-left-24": "left: -6rem;", + "-left-28": "left: -7rem;", + "-left-32": "left: -8rem;", + "-left-36": "left: -9rem;", + "-left-40": "left: -10rem;", + "-left-44": "left: -11rem;", + "-left-48": "left: -12rem;", + "-left-52": "left: -13rem;", + "-left-56": "left: -14rem;", + "-left-60": "left: -15rem;", + "-left-64": "left: -16rem;", + "-left-72": "left: -18rem;", + "-left-80": "left: -20rem;", + "-left-96": "left: -24rem;", + "-left-px": "left: -1px;", + "-left-0\\.5": "left: -0.125rem;", + "-left-1\\.5": "left: -0.375rem;", + "-left-2\\.5": "left: -0.625rem;", + "-left-3\\.5": "left: -0.875rem;", + "left-1\\/2": "left: 50%;", + "left-1\\/3": "left: 33.3333%;", + "left-2\\/3": "left: 66.6667%;", + "left-1\\/4": "left: 25%;", + "left-2\\/4": "left: 50%;", + "left-3\\/4": "left: 75%;", + "left-full": "left: 100%;", + "-left-1\\/2": "left: -50%;", + "-left-1\\/3": "left: -33.3333%;", + "-left-2\\/3": "left: -66.6667%;", + "-left-1\\/4": "left: -25%;", + "-left-2\\/4": "left: -50%;", + "-left-3\\/4": "left: -75%;", + "-left-full": "left: -100%;", + "isolate": "isolation: isolate;", + "isolation-auto": "isolation: auto;", + "z-0": "z-index: 0;", + "z-10": "z-index: 10;", + "z-20": "z-index: 20;", + "z-30": "z-index: 30;", + "z-40": "z-index: 40;", + "z-50": "z-index: 50;", + "z-auto": "z-index: auto;", + "order-1": "order: 1;", + "order-2": "order: 2;", + "order-3": "order: 3;", + "order-4": "order: 4;", + "order-5": "order: 5;", + "order-6": "order: 6;", + "order-7": "order: 7;", + "order-8": "order: 8;", + "order-9": "order: 9;", + "order-10": "order: 10;", + "order-11": "order: 11;", + "order-12": "order: 12;", + "order-first": "order: -9999;", + "order-last": "order: 9999;", + "order-none": "order: 0;", + "col-auto": "grid-column-start: auto; grid-column-end: auto;", + "col-span-1": "grid-column-start: span 1; grid-column-end: span 1;", + "col-span-2": "grid-column-start: span 2; grid-column-end: span 2;", + "col-span-3": "grid-column-start: span 3; grid-column-end: span 3;", + "col-span-4": "grid-column-start: span 4; grid-column-end: span 4;", + "col-span-5": "grid-column-start: span 5; grid-column-end: span 5;", + "col-span-6": "grid-column-start: span 6; grid-column-end: span 6;", + "col-span-7": "grid-column-start: span 7; grid-column-end: span 7;", + "col-span-8": "grid-column-start: span 8; grid-column-end: span 8;", + "col-span-9": "grid-column-start: span 9; grid-column-end: span 9;", + "col-span-10": "grid-column-start: span 10; grid-column-end: span 10;", + "col-span-11": "grid-column-start: span 11; grid-column-end: span 11;", + "col-span-12": "grid-column-start: span 12; grid-column-end: span 12;", + "col-span-full": "grid-column-start: 1; grid-column-end: -1;", + "col-start-1": "grid-column-start: 1;", + "col-start-2": "grid-column-start: 2;", + "col-start-3": "grid-column-start: 3;", + "col-start-4": "grid-column-start: 4;", + "col-start-5": "grid-column-start: 5;", + "col-start-6": "grid-column-start: 6;", + "col-start-7": "grid-column-start: 7;", + "col-start-8": "grid-column-start: 8;", + "col-start-9": "grid-column-start: 9;", + "col-start-10": "grid-column-start: 10;", + "col-start-11": "grid-column-start: 11;", + "col-start-12": "grid-column-start: 12;", + "col-start-13": "grid-column-start: 13;", + "col-start-auto": "grid-column-start: auto;", + "col-end-1": "grid-column-end: 1;", + "col-end-2": "grid-column-end: 2;", + "col-end-3": "grid-column-end: 3;", + "col-end-4": "grid-column-end: 4;", + "col-end-5": "grid-column-end: 5;", + "col-end-6": "grid-column-end: 6;", + "col-end-7": "grid-column-end: 7;", + "col-end-8": "grid-column-end: 8;", + "col-end-9": "grid-column-end: 9;", + "col-end-10": "grid-column-end: 10;", + "col-end-11": "grid-column-end: 11;", + "col-end-12": "grid-column-end: 12;", + "col-end-13": "grid-column-end: 13;", + "col-end-auto": "grid-column-end: auto;", + "row-auto": "grid-row-start: auto; grid-row-end: auto;", + "row-span-1": "grid-row-start: span 1; grid-row-end: span 1;", + "row-span-2": "grid-row-start: span 2; grid-row-end: span 2;", + "row-span-3": "grid-row-start: span 3; grid-row-end: span 3;", + "row-span-4": "grid-row-start: span 4; grid-row-end: span 4;", + "row-span-5": "grid-row-start: span 5; grid-row-end: span 5;", + "row-span-6": "grid-row-start: span 6; grid-row-end: span 6;", + "row-span-full": "grid-row-start: 1; grid-row-end: -1;", + "row-start-1": "grid-row-start: 1;", + "row-start-2": "grid-row-start: 2;", + "row-start-3": "grid-row-start: 3;", + "row-start-4": "grid-row-start: 4;", + "row-start-5": "grid-row-start: 5;", + "row-start-6": "grid-row-start: 6;", + "row-start-7": "grid-row-start: 7;", + "row-start-auto": "grid-row-start: auto;", + "row-end-1": "grid-row-end: 1;", + "row-end-2": "grid-row-end: 2;", + "row-end-3": "grid-row-end: 3;", + "row-end-4": "grid-row-end: 4;", + "row-end-5": "grid-row-end: 5;", + "row-end-6": "grid-row-end: 6;", + "row-end-7": "grid-row-end: 7;", + "row-end-auto": "grid-row-end: auto;", + "float-right": "float: right;", + "float-left": "float: left;", + "float-none": "float: none;", + "clear-left": "clear: left;", + "clear-right": "clear: right;", + "clear-both": "clear: both;", + "clear-none": "clear: none;", + "m-0": "margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;", + "m-1": "margin-top: 0.25rem; margin-right: 0.25rem; margin-bottom: 0.25rem; margin-left: 0.25rem;", + "m-2": "margin-top: 0.5rem; margin-right: 0.5rem; margin-bottom: 0.5rem; margin-left: 0.5rem;", + "m-3": "margin-top: 0.75rem; margin-right: 0.75rem; margin-bottom: 0.75rem; margin-left: 0.75rem;", + "m-4": "margin-top: 1rem; margin-right: 1rem; margin-bottom: 1rem; margin-left: 1rem;", + "m-5": "margin-top: 1.25rem; margin-right: 1.25rem; margin-bottom: 1.25rem; margin-left: 1.25rem;", + "m-6": "margin-top: 1.5rem; margin-right: 1.5rem; margin-bottom: 1.5rem; margin-left: 1.5rem;", + "m-7": "margin-top: 1.75rem; margin-right: 1.75rem; margin-bottom: 1.75rem; margin-left: 1.75rem;", + "m-8": "margin-top: 2rem; margin-right: 2rem; margin-bottom: 2rem; margin-left: 2rem;", + "m-9": "margin-top: 2.25rem; margin-right: 2.25rem; margin-bottom: 2.25rem; margin-left: 2.25rem;", + "m-10": "margin-top: 2.5rem; margin-right: 2.5rem; margin-bottom: 2.5rem; margin-left: 2.5rem;", + "m-11": "margin-top: 2.75rem; margin-right: 2.75rem; margin-bottom: 2.75rem; margin-left: 2.75rem;", + "m-12": "margin-top: 3rem; margin-right: 3rem; margin-bottom: 3rem; margin-left: 3rem;", + "m-14": "margin-top: 3.5rem; margin-right: 3.5rem; margin-bottom: 3.5rem; margin-left: 3.5rem;", + "m-16": "margin-top: 4rem; margin-right: 4rem; margin-bottom: 4rem; margin-left: 4rem;", + "m-20": "margin-top: 5rem; margin-right: 5rem; margin-bottom: 5rem; margin-left: 5rem;", + "m-24": "margin-top: 6rem; margin-right: 6rem; margin-bottom: 6rem; margin-left: 6rem;", + "m-28": "margin-top: 7rem; margin-right: 7rem; margin-bottom: 7rem; margin-left: 7rem;", + "m-32": "margin-top: 8rem; margin-right: 8rem; margin-bottom: 8rem; margin-left: 8rem;", + "m-36": "margin-top: 9rem; margin-right: 9rem; margin-bottom: 9rem; margin-left: 9rem;", + "m-40": "margin-top: 10rem; margin-right: 10rem; margin-bottom: 10rem; margin-left: 10rem;", + "m-44": "margin-top: 11rem; margin-right: 11rem; margin-bottom: 11rem; margin-left: 11rem;", + "m-48": "margin-top: 12rem; margin-right: 12rem; margin-bottom: 12rem; margin-left: 12rem;", + "m-52": "margin-top: 13rem; margin-right: 13rem; margin-bottom: 13rem; margin-left: 13rem;", + "m-56": "margin-top: 14rem; margin-right: 14rem; margin-bottom: 14rem; margin-left: 14rem;", + "m-60": "margin-top: 15rem; margin-right: 15rem; margin-bottom: 15rem; margin-left: 15rem;", + "m-64": "margin-top: 16rem; margin-right: 16rem; margin-bottom: 16rem; margin-left: 16rem;", + "m-72": "margin-top: 18rem; margin-right: 18rem; margin-bottom: 18rem; margin-left: 18rem;", + "m-80": "margin-top: 20rem; margin-right: 20rem; margin-bottom: 20rem; margin-left: 20rem;", + "m-96": "margin-top: 24rem; margin-right: 24rem; margin-bottom: 24rem; margin-left: 24rem;", + "m-auto": "margin-top: auto; margin-right: auto; margin-bottom: auto; margin-left: auto;", + "m-px": "margin-top: 1px; margin-right: 1px; margin-bottom: 1px; margin-left: 1px;", + "m-0\\.5": "margin-top: 0.125rem; margin-right: 0.125rem; margin-bottom: 0.125rem; margin-left: 0.125rem;", + "m-1\\.5": "margin-top: 0.375rem; margin-right: 0.375rem; margin-bottom: 0.375rem; margin-left: 0.375rem;", + "m-2\\.5": "margin-top: 0.625rem; margin-right: 0.625rem; margin-bottom: 0.625rem; margin-left: 0.625rem;", + "m-3\\.5": "margin-top: 0.875rem; margin-right: 0.875rem; margin-bottom: 0.875rem; margin-left: 0.875rem;", + "-m-0": "margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;", + "-m-1": "margin-top: -0.25rem; margin-right: -0.25rem; margin-bottom: -0.25rem; margin-left: -0.25rem;", + "-m-2": "margin-top: -0.5rem; margin-right: -0.5rem; margin-bottom: -0.5rem; margin-left: -0.5rem;", + "-m-3": "margin-top: -0.75rem; margin-right: -0.75rem; margin-bottom: -0.75rem; margin-left: -0.75rem;", + "-m-4": "margin-top: -1rem; margin-right: -1rem; margin-bottom: -1rem; margin-left: -1rem;", + "-m-5": "margin-top: -1.25rem; margin-right: -1.25rem; margin-bottom: -1.25rem; margin-left: -1.25rem;", + "-m-6": "margin-top: -1.5rem; margin-right: -1.5rem; margin-bottom: -1.5rem; margin-left: -1.5rem;", + "-m-7": "margin-top: -1.75rem; margin-right: -1.75rem; margin-bottom: -1.75rem; margin-left: -1.75rem;", + "-m-8": "margin-top: -2rem; margin-right: -2rem; margin-bottom: -2rem; margin-left: -2rem;", + "-m-9": "margin-top: -2.25rem; margin-right: -2.25rem; margin-bottom: -2.25rem; margin-left: -2.25rem;", + "-m-10": "margin-top: -2.5rem; margin-right: -2.5rem; margin-bottom: -2.5rem; margin-left: -2.5rem;", + "-m-11": "margin-top: -2.75rem; margin-right: -2.75rem; margin-bottom: -2.75rem; margin-left: -2.75rem;", + "-m-12": "margin-top: -3rem; margin-right: -3rem; margin-bottom: -3rem; margin-left: -3rem;", + "-m-14": "margin-top: -3.5rem; margin-right: -3.5rem; margin-bottom: -3.5rem; margin-left: -3.5rem;", + "-m-16": "margin-top: -4rem; margin-right: -4rem; margin-bottom: -4rem; margin-left: -4rem;", + "-m-20": "margin-top: -5rem; margin-right: -5rem; margin-bottom: -5rem; margin-left: -5rem;", + "-m-24": "margin-top: -6rem; margin-right: -6rem; margin-bottom: -6rem; margin-left: -6rem;", + "-m-28": "margin-top: -7rem; margin-right: -7rem; margin-bottom: -7rem; margin-left: -7rem;", + "-m-32": "margin-top: -8rem; margin-right: -8rem; margin-bottom: -8rem; margin-left: -8rem;", + "-m-36": "margin-top: -9rem; margin-right: -9rem; margin-bottom: -9rem; margin-left: -9rem;", + "-m-40": "margin-top: -10rem; margin-right: -10rem; margin-bottom: -10rem; margin-left: -10rem;", + "-m-44": "margin-top: -11rem; margin-right: -11rem; margin-bottom: -11rem; margin-left: -11rem;", + "-m-48": "margin-top: -12rem; margin-right: -12rem; margin-bottom: -12rem; margin-left: -12rem;", + "-m-52": "margin-top: -13rem; margin-right: -13rem; margin-bottom: -13rem; margin-left: -13rem;", + "-m-56": "margin-top: -14rem; margin-right: -14rem; margin-bottom: -14rem; margin-left: -14rem;", + "-m-60": "margin-top: -15rem; margin-right: -15rem; margin-bottom: -15rem; margin-left: -15rem;", + "-m-64": "margin-top: -16rem; margin-right: -16rem; margin-bottom: -16rem; margin-left: -16rem;", + "-m-72": "margin-top: -18rem; margin-right: -18rem; margin-bottom: -18rem; margin-left: -18rem;", + "-m-80": "margin-top: -20rem; margin-right: -20rem; margin-bottom: -20rem; margin-left: -20rem;", + "-m-96": "margin-top: -24rem; margin-right: -24rem; margin-bottom: -24rem; margin-left: -24rem;", + "-m-px": "margin-top: -1px; margin-right: -1px; margin-bottom: -1px; margin-left: -1px;", + "-m-0\\.5": "margin-top: -0.125rem; margin-right: -0.125rem; margin-bottom: -0.125rem; margin-left: -0.125rem;", + "-m-1\\.5": "margin-top: -0.375rem; margin-right: -0.375rem; margin-bottom: -0.375rem; margin-left: -0.375rem;", + "-m-2\\.5": "margin-top: -0.625rem; margin-right: -0.625rem; margin-bottom: -0.625rem; margin-left: -0.625rem;", + "-m-3\\.5": "margin-top: -0.875rem; margin-right: -0.875rem; margin-bottom: -0.875rem; margin-left: -0.875rem;", + "mx-0": "margin-left: 0px; margin-right: 0px;", + "mx-1": "margin-left: 0.25rem; margin-right: 0.25rem;", + "mx-2": "margin-left: 0.5rem; margin-right: 0.5rem;", + "mx-3": "margin-left: 0.75rem; margin-right: 0.75rem;", + "mx-4": "margin-left: 1rem; margin-right: 1rem;", + "mx-5": "margin-left: 1.25rem; margin-right: 1.25rem;", + "mx-6": "margin-left: 1.5rem; margin-right: 1.5rem;", + "mx-7": "margin-left: 1.75rem; margin-right: 1.75rem;", + "mx-8": "margin-left: 2rem; margin-right: 2rem;", + "mx-9": "margin-left: 2.25rem; margin-right: 2.25rem;", + "mx-10": "margin-left: 2.5rem; margin-right: 2.5rem;", + "mx-11": "margin-left: 2.75rem; margin-right: 2.75rem;", + "mx-12": "margin-left: 3rem; margin-right: 3rem;", + "mx-14": "margin-left: 3.5rem; margin-right: 3.5rem;", + "mx-16": "margin-left: 4rem; margin-right: 4rem;", + "mx-20": "margin-left: 5rem; margin-right: 5rem;", + "mx-24": "margin-left: 6rem; margin-right: 6rem;", + "mx-28": "margin-left: 7rem; margin-right: 7rem;", + "mx-32": "margin-left: 8rem; margin-right: 8rem;", + "mx-36": "margin-left: 9rem; margin-right: 9rem;", + "mx-40": "margin-left: 10rem; margin-right: 10rem;", + "mx-44": "margin-left: 11rem; margin-right: 11rem;", + "mx-48": "margin-left: 12rem; margin-right: 12rem;", + "mx-52": "margin-left: 13rem; margin-right: 13rem;", + "mx-56": "margin-left: 14rem; margin-right: 14rem;", + "mx-60": "margin-left: 15rem; margin-right: 15rem;", + "mx-64": "margin-left: 16rem; margin-right: 16rem;", + "mx-72": "margin-left: 18rem; margin-right: 18rem;", + "mx-80": "margin-left: 20rem; margin-right: 20rem;", + "mx-96": "margin-left: 24rem; margin-right: 24rem;", + "mx-auto": "margin-left: auto; margin-right: auto;", + "mx-px": "margin-left: 1px; margin-right: 1px;", + "mx-0\\.5": "margin-left: 0.125rem; margin-right: 0.125rem;", + "mx-1\\.5": "margin-left: 0.375rem; margin-right: 0.375rem;", + "mx-2\\.5": "margin-left: 0.625rem; margin-right: 0.625rem;", + "mx-3\\.5": "margin-left: 0.875rem; margin-right: 0.875rem;", + "-mx-0": "margin-left: 0px; margin-right: 0px;", + "-mx-1": "margin-left: -0.25rem; margin-right: -0.25rem;", + "-mx-2": "margin-left: -0.5rem; margin-right: -0.5rem;", + "-mx-3": "margin-left: -0.75rem; margin-right: -0.75rem;", + "-mx-4": "margin-left: -1rem; margin-right: -1rem;", + "-mx-5": "margin-left: -1.25rem; margin-right: -1.25rem;", + "-mx-6": "margin-left: -1.5rem; margin-right: -1.5rem;", + "-mx-7": "margin-left: -1.75rem; margin-right: -1.75rem;", + "-mx-8": "margin-left: -2rem; margin-right: -2rem;", + "-mx-9": "margin-left: -2.25rem; margin-right: -2.25rem;", + "-mx-10": "margin-left: -2.5rem; margin-right: -2.5rem;", + "-mx-11": "margin-left: -2.75rem; margin-right: -2.75rem;", + "-mx-12": "margin-left: -3rem; margin-right: -3rem;", + "-mx-14": "margin-left: -3.5rem; margin-right: -3.5rem;", + "-mx-16": "margin-left: -4rem; margin-right: -4rem;", + "-mx-20": "margin-left: -5rem; margin-right: -5rem;", + "-mx-24": "margin-left: -6rem; margin-right: -6rem;", + "-mx-28": "margin-left: -7rem; margin-right: -7rem;", + "-mx-32": "margin-left: -8rem; margin-right: -8rem;", + "-mx-36": "margin-left: -9rem; margin-right: -9rem;", + "-mx-40": "margin-left: -10rem; margin-right: -10rem;", + "-mx-44": "margin-left: -11rem; margin-right: -11rem;", + "-mx-48": "margin-left: -12rem; margin-right: -12rem;", + "-mx-52": "margin-left: -13rem; margin-right: -13rem;", + "-mx-56": "margin-left: -14rem; margin-right: -14rem;", + "-mx-60": "margin-left: -15rem; margin-right: -15rem;", + "-mx-64": "margin-left: -16rem; margin-right: -16rem;", + "-mx-72": "margin-left: -18rem; margin-right: -18rem;", + "-mx-80": "margin-left: -20rem; margin-right: -20rem;", + "-mx-96": "margin-left: -24rem; margin-right: -24rem;", + "-mx-px": "margin-left: -1px; margin-right: -1px;", + "-mx-0\\.5": "margin-left: -0.125rem; margin-right: -0.125rem;", + "-mx-1\\.5": "margin-left: -0.375rem; margin-right: -0.375rem;", + "-mx-2\\.5": "margin-left: -0.625rem; margin-right: -0.625rem;", + "-mx-3\\.5": "margin-left: -0.875rem; margin-right: -0.875rem;", + "my-0": "margin-top: 0px; margin-bottom: 0px;", + "my-1": "margin-top: 0.25rem; margin-bottom: 0.25rem;", + "my-2": "margin-top: 0.5rem; margin-bottom: 0.5rem;", + "my-3": "margin-top: 0.75rem; margin-bottom: 0.75rem;", + "my-4": "margin-top: 1rem; margin-bottom: 1rem;", + "my-5": "margin-top: 1.25rem; margin-bottom: 1.25rem;", + "my-6": "margin-top: 1.5rem; margin-bottom: 1.5rem;", + "my-7": "margin-top: 1.75rem; margin-bottom: 1.75rem;", + "my-8": "margin-top: 2rem; margin-bottom: 2rem;", + "my-9": "margin-top: 2.25rem; margin-bottom: 2.25rem;", + "my-10": "margin-top: 2.5rem; margin-bottom: 2.5rem;", + "my-11": "margin-top: 2.75rem; margin-bottom: 2.75rem;", + "my-12": "margin-top: 3rem; margin-bottom: 3rem;", + "my-14": "margin-top: 3.5rem; margin-bottom: 3.5rem;", + "my-16": "margin-top: 4rem; margin-bottom: 4rem;", + "my-20": "margin-top: 5rem; margin-bottom: 5rem;", + "my-24": "margin-top: 6rem; margin-bottom: 6rem;", + "my-28": "margin-top: 7rem; margin-bottom: 7rem;", + "my-32": "margin-top: 8rem; margin-bottom: 8rem;", + "my-36": "margin-top: 9rem; margin-bottom: 9rem;", + "my-40": "margin-top: 10rem; margin-bottom: 10rem;", + "my-44": "margin-top: 11rem; margin-bottom: 11rem;", + "my-48": "margin-top: 12rem; margin-bottom: 12rem;", + "my-52": "margin-top: 13rem; margin-bottom: 13rem;", + "my-56": "margin-top: 14rem; margin-bottom: 14rem;", + "my-60": "margin-top: 15rem; margin-bottom: 15rem;", + "my-64": "margin-top: 16rem; margin-bottom: 16rem;", + "my-72": "margin-top: 18rem; margin-bottom: 18rem;", + "my-80": "margin-top: 20rem; margin-bottom: 20rem;", + "my-96": "margin-top: 24rem; margin-bottom: 24rem;", + "my-auto": "margin-top: auto; margin-bottom: auto;", + "my-px": "margin-top: 1px; margin-bottom: 1px;", + "my-0\\.5": "margin-top: 0.125rem; margin-bottom: 0.125rem;", + "my-1\\.5": "margin-top: 0.375rem; margin-bottom: 0.375rem;", + "my-2\\.5": "margin-top: 0.625rem; margin-bottom: 0.625rem;", + "my-3\\.5": "margin-top: 0.875rem; margin-bottom: 0.875rem;", + "-my-0": "margin-top: 0px; margin-bottom: 0px;", + "-my-1": "margin-top: -0.25rem; margin-bottom: -0.25rem;", + "-my-2": "margin-top: -0.5rem; margin-bottom: -0.5rem;", + "-my-3": "margin-top: -0.75rem; margin-bottom: -0.75rem;", + "-my-4": "margin-top: -1rem; margin-bottom: -1rem;", + "-my-5": "margin-top: -1.25rem; margin-bottom: -1.25rem;", + "-my-6": "margin-top: -1.5rem; margin-bottom: -1.5rem;", + "-my-7": "margin-top: -1.75rem; margin-bottom: -1.75rem;", + "-my-8": "margin-top: -2rem; margin-bottom: -2rem;", + "-my-9": "margin-top: -2.25rem; margin-bottom: -2.25rem;", + "-my-10": "margin-top: -2.5rem; margin-bottom: -2.5rem;", + "-my-11": "margin-top: -2.75rem; margin-bottom: -2.75rem;", + "-my-12": "margin-top: -3rem; margin-bottom: -3rem;", + "-my-14": "margin-top: -3.5rem; margin-bottom: -3.5rem;", + "-my-16": "margin-top: -4rem; margin-bottom: -4rem;", + "-my-20": "margin-top: -5rem; margin-bottom: -5rem;", + "-my-24": "margin-top: -6rem; margin-bottom: -6rem;", + "-my-28": "margin-top: -7rem; margin-bottom: -7rem;", + "-my-32": "margin-top: -8rem; margin-bottom: -8rem;", + "-my-36": "margin-top: -9rem; margin-bottom: -9rem;", + "-my-40": "margin-top: -10rem; margin-bottom: -10rem;", + "-my-44": "margin-top: -11rem; margin-bottom: -11rem;", + "-my-48": "margin-top: -12rem; margin-bottom: -12rem;", + "-my-52": "margin-top: -13rem; margin-bottom: -13rem;", + "-my-56": "margin-top: -14rem; margin-bottom: -14rem;", + "-my-60": "margin-top: -15rem; margin-bottom: -15rem;", + "-my-64": "margin-top: -16rem; margin-bottom: -16rem;", + "-my-72": "margin-top: -18rem; margin-bottom: -18rem;", + "-my-80": "margin-top: -20rem; margin-bottom: -20rem;", + "-my-96": "margin-top: -24rem; margin-bottom: -24rem;", + "-my-px": "margin-top: -1px; margin-bottom: -1px;", + "-my-0\\.5": "margin-top: -0.125rem; margin-bottom: -0.125rem;", + "-my-1\\.5": "margin-top: -0.375rem; margin-bottom: -0.375rem;", + "-my-2\\.5": "margin-top: -0.625rem; margin-bottom: -0.625rem;", + "-my-3\\.5": "margin-top: -0.875rem; margin-bottom: -0.875rem;", + "mt-0": "margin-top: 0px;", + "mt-1": "margin-top: 0.25rem;", + "mt-2": "margin-top: 0.5rem;", + "mt-3": "margin-top: 0.75rem;", + "mt-4": "margin-top: 1rem;", + "mt-5": "margin-top: 1.25rem;", + "mt-6": "margin-top: 1.5rem;", + "mt-7": "margin-top: 1.75rem;", + "mt-8": "margin-top: 2rem;", + "mt-9": "margin-top: 2.25rem;", + "mt-10": "margin-top: 2.5rem;", + "mt-11": "margin-top: 2.75rem;", + "mt-12": "margin-top: 3rem;", + "mt-14": "margin-top: 3.5rem;", + "mt-16": "margin-top: 4rem;", + "mt-20": "margin-top: 5rem;", + "mt-24": "margin-top: 6rem;", + "mt-28": "margin-top: 7rem;", + "mt-32": "margin-top: 8rem;", + "mt-36": "margin-top: 9rem;", + "mt-40": "margin-top: 10rem;", + "mt-44": "margin-top: 11rem;", + "mt-48": "margin-top: 12rem;", + "mt-52": "margin-top: 13rem;", + "mt-56": "margin-top: 14rem;", + "mt-60": "margin-top: 15rem;", + "mt-64": "margin-top: 16rem;", + "mt-72": "margin-top: 18rem;", + "mt-80": "margin-top: 20rem;", + "mt-96": "margin-top: 24rem;", + "mt-auto": "margin-top: auto;", + "mt-px": "margin-top: 1px;", + "mt-0\\.5": "margin-top: 0.125rem;", + "mt-1\\.5": "margin-top: 0.375rem;", + "mt-2\\.5": "margin-top: 0.625rem;", + "mt-3\\.5": "margin-top: 0.875rem;", + "-mt-0": "margin-top: 0px;", + "-mt-1": "margin-top: -0.25rem;", + "-mt-2": "margin-top: -0.5rem;", + "-mt-3": "margin-top: -0.75rem;", + "-mt-4": "margin-top: -1rem;", + "-mt-5": "margin-top: -1.25rem;", + "-mt-6": "margin-top: -1.5rem;", + "-mt-7": "margin-top: -1.75rem;", + "-mt-8": "margin-top: -2rem;", + "-mt-9": "margin-top: -2.25rem;", + "-mt-10": "margin-top: -2.5rem;", + "-mt-11": "margin-top: -2.75rem;", + "-mt-12": "margin-top: -3rem;", + "-mt-14": "margin-top: -3.5rem;", + "-mt-16": "margin-top: -4rem;", + "-mt-20": "margin-top: -5rem;", + "-mt-24": "margin-top: -6rem;", + "-mt-28": "margin-top: -7rem;", + "-mt-32": "margin-top: -8rem;", + "-mt-36": "margin-top: -9rem;", + "-mt-40": "margin-top: -10rem;", + "-mt-44": "margin-top: -11rem;", + "-mt-48": "margin-top: -12rem;", + "-mt-52": "margin-top: -13rem;", + "-mt-56": "margin-top: -14rem;", + "-mt-60": "margin-top: -15rem;", + "-mt-64": "margin-top: -16rem;", + "-mt-72": "margin-top: -18rem;", + "-mt-80": "margin-top: -20rem;", + "-mt-96": "margin-top: -24rem;", + "-mt-px": "margin-top: -1px;", + "-mt-0\\.5": "margin-top: -0.125rem;", + "-mt-1\\.5": "margin-top: -0.375rem;", + "-mt-2\\.5": "margin-top: -0.625rem;", + "-mt-3\\.5": "margin-top: -0.875rem;", + "mr-0": "margin-right: 0px;", + "mr-1": "margin-right: 0.25rem;", + "mr-2": "margin-right: 0.5rem;", + "mr-3": "margin-right: 0.75rem;", + "mr-4": "margin-right: 1rem;", + "mr-5": "margin-right: 1.25rem;", + "mr-6": "margin-right: 1.5rem;", + "mr-7": "margin-right: 1.75rem;", + "mr-8": "margin-right: 2rem;", + "mr-9": "margin-right: 2.25rem;", + "mr-10": "margin-right: 2.5rem;", + "mr-11": "margin-right: 2.75rem;", + "mr-12": "margin-right: 3rem;", + "mr-14": "margin-right: 3.5rem;", + "mr-16": "margin-right: 4rem;", + "mr-20": "margin-right: 5rem;", + "mr-24": "margin-right: 6rem;", + "mr-28": "margin-right: 7rem;", + "mr-32": "margin-right: 8rem;", + "mr-36": "margin-right: 9rem;", + "mr-40": "margin-right: 10rem;", + "mr-44": "margin-right: 11rem;", + "mr-48": "margin-right: 12rem;", + "mr-52": "margin-right: 13rem;", + "mr-56": "margin-right: 14rem;", + "mr-60": "margin-right: 15rem;", + "mr-64": "margin-right: 16rem;", + "mr-72": "margin-right: 18rem;", + "mr-80": "margin-right: 20rem;", + "mr-96": "margin-right: 24rem;", + "mr-auto": "margin-right: auto;", + "mr-px": "margin-right: 1px;", + "mr-0\\.5": "margin-right: 0.125rem;", + "mr-1\\.5": "margin-right: 0.375rem;", + "mr-2\\.5": "margin-right: 0.625rem;", + "mr-3\\.5": "margin-right: 0.875rem;", + "-mr-0": "margin-right: 0px;", + "-mr-1": "margin-right: -0.25rem;", + "-mr-2": "margin-right: -0.5rem;", + "-mr-3": "margin-right: -0.75rem;", + "-mr-4": "margin-right: -1rem;", + "-mr-5": "margin-right: -1.25rem;", + "-mr-6": "margin-right: -1.5rem;", + "-mr-7": "margin-right: -1.75rem;", + "-mr-8": "margin-right: -2rem;", + "-mr-9": "margin-right: -2.25rem;", + "-mr-10": "margin-right: -2.5rem;", + "-mr-11": "margin-right: -2.75rem;", + "-mr-12": "margin-right: -3rem;", + "-mr-14": "margin-right: -3.5rem;", + "-mr-16": "margin-right: -4rem;", + "-mr-20": "margin-right: -5rem;", + "-mr-24": "margin-right: -6rem;", + "-mr-28": "margin-right: -7rem;", + "-mr-32": "margin-right: -8rem;", + "-mr-36": "margin-right: -9rem;", + "-mr-40": "margin-right: -10rem;", + "-mr-44": "margin-right: -11rem;", + "-mr-48": "margin-right: -12rem;", + "-mr-52": "margin-right: -13rem;", + "-mr-56": "margin-right: -14rem;", + "-mr-60": "margin-right: -15rem;", + "-mr-64": "margin-right: -16rem;", + "-mr-72": "margin-right: -18rem;", + "-mr-80": "margin-right: -20rem;", + "-mr-96": "margin-right: -24rem;", + "-mr-px": "margin-right: -1px;", + "-mr-0\\.5": "margin-right: -0.125rem;", + "-mr-1\\.5": "margin-right: -0.375rem;", + "-mr-2\\.5": "margin-right: -0.625rem;", + "-mr-3\\.5": "margin-right: -0.875rem;", + "mb-0": "margin-bottom: 0px;", + "mb-1": "margin-bottom: 0.25rem;", + "mb-2": "margin-bottom: 0.5rem;", + "mb-3": "margin-bottom: 0.75rem;", + "mb-4": "margin-bottom: 1rem;", + "mb-5": "margin-bottom: 1.25rem;", + "mb-6": "margin-bottom: 1.5rem;", + "mb-7": "margin-bottom: 1.75rem;", + "mb-8": "margin-bottom: 2rem;", + "mb-9": "margin-bottom: 2.25rem;", + "mb-10": "margin-bottom: 2.5rem;", + "mb-11": "margin-bottom: 2.75rem;", + "mb-12": "margin-bottom: 3rem;", + "mb-14": "margin-bottom: 3.5rem;", + "mb-16": "margin-bottom: 4rem;", + "mb-20": "margin-bottom: 5rem;", + "mb-24": "margin-bottom: 6rem;", + "mb-28": "margin-bottom: 7rem;", + "mb-32": "margin-bottom: 8rem;", + "mb-36": "margin-bottom: 9rem;", + "mb-40": "margin-bottom: 10rem;", + "mb-44": "margin-bottom: 11rem;", + "mb-48": "margin-bottom: 12rem;", + "mb-52": "margin-bottom: 13rem;", + "mb-56": "margin-bottom: 14rem;", + "mb-60": "margin-bottom: 15rem;", + "mb-64": "margin-bottom: 16rem;", + "mb-72": "margin-bottom: 18rem;", + "mb-80": "margin-bottom: 20rem;", + "mb-96": "margin-bottom: 24rem;", + "mb-auto": "margin-bottom: auto;", + "mb-px": "margin-bottom: 1px;", + "mb-0\\.5": "margin-bottom: 0.125rem;", + "mb-1\\.5": "margin-bottom: 0.375rem;", + "mb-2\\.5": "margin-bottom: 0.625rem;", + "mb-3\\.5": "margin-bottom: 0.875rem;", + "-mb-0": "margin-bottom: 0px;", + "-mb-1": "margin-bottom: -0.25rem;", + "-mb-2": "margin-bottom: -0.5rem;", + "-mb-3": "margin-bottom: -0.75rem;", + "-mb-4": "margin-bottom: -1rem;", + "-mb-5": "margin-bottom: -1.25rem;", + "-mb-6": "margin-bottom: -1.5rem;", + "-mb-7": "margin-bottom: -1.75rem;", + "-mb-8": "margin-bottom: -2rem;", + "-mb-9": "margin-bottom: -2.25rem;", + "-mb-10": "margin-bottom: -2.5rem;", + "-mb-11": "margin-bottom: -2.75rem;", + "-mb-12": "margin-bottom: -3rem;", + "-mb-14": "margin-bottom: -3.5rem;", + "-mb-16": "margin-bottom: -4rem;", + "-mb-20": "margin-bottom: -5rem;", + "-mb-24": "margin-bottom: -6rem;", + "-mb-28": "margin-bottom: -7rem;", + "-mb-32": "margin-bottom: -8rem;", + "-mb-36": "margin-bottom: -9rem;", + "-mb-40": "margin-bottom: -10rem;", + "-mb-44": "margin-bottom: -11rem;", + "-mb-48": "margin-bottom: -12rem;", + "-mb-52": "margin-bottom: -13rem;", + "-mb-56": "margin-bottom: -14rem;", + "-mb-60": "margin-bottom: -15rem;", + "-mb-64": "margin-bottom: -16rem;", + "-mb-72": "margin-bottom: -18rem;", + "-mb-80": "margin-bottom: -20rem;", + "-mb-96": "margin-bottom: -24rem;", + "-mb-px": "margin-bottom: -1px;", + "-mb-0\\.5": "margin-bottom: -0.125rem;", + "-mb-1\\.5": "margin-bottom: -0.375rem;", + "-mb-2\\.5": "margin-bottom: -0.625rem;", + "-mb-3\\.5": "margin-bottom: -0.875rem;", + "ml-0": "margin-left: 0px;", + "ml-1": "margin-left: 0.25rem;", + "ml-2": "margin-left: 0.5rem;", + "ml-3": "margin-left: 0.75rem;", + "ml-4": "margin-left: 1rem;", + "ml-5": "margin-left: 1.25rem;", + "ml-6": "margin-left: 1.5rem;", + "ml-7": "margin-left: 1.75rem;", + "ml-8": "margin-left: 2rem;", + "ml-9": "margin-left: 2.25rem;", + "ml-10": "margin-left: 2.5rem;", + "ml-11": "margin-left: 2.75rem;", + "ml-12": "margin-left: 3rem;", + "ml-14": "margin-left: 3.5rem;", + "ml-16": "margin-left: 4rem;", + "ml-20": "margin-left: 5rem;", + "ml-24": "margin-left: 6rem;", + "ml-28": "margin-left: 7rem;", + "ml-32": "margin-left: 8rem;", + "ml-36": "margin-left: 9rem;", + "ml-40": "margin-left: 10rem;", + "ml-44": "margin-left: 11rem;", + "ml-48": "margin-left: 12rem;", + "ml-52": "margin-left: 13rem;", + "ml-56": "margin-left: 14rem;", + "ml-60": "margin-left: 15rem;", + "ml-64": "margin-left: 16rem;", + "ml-72": "margin-left: 18rem;", + "ml-80": "margin-left: 20rem;", + "ml-96": "margin-left: 24rem;", + "ml-auto": "margin-left: auto;", + "ml-px": "margin-left: 1px;", + "ml-0\\.5": "margin-left: 0.125rem;", + "ml-1\\.5": "margin-left: 0.375rem;", + "ml-2\\.5": "margin-left: 0.625rem;", + "ml-3\\.5": "margin-left: 0.875rem;", + "-ml-0": "margin-left: 0px;", + "-ml-1": "margin-left: -0.25rem;", + "-ml-2": "margin-left: -0.5rem;", + "-ml-3": "margin-left: -0.75rem;", + "-ml-4": "margin-left: -1rem;", + "-ml-5": "margin-left: -1.25rem;", + "-ml-6": "margin-left: -1.5rem;", + "-ml-7": "margin-left: -1.75rem;", + "-ml-8": "margin-left: -2rem;", + "-ml-9": "margin-left: -2.25rem;", + "-ml-10": "margin-left: -2.5rem;", + "-ml-11": "margin-left: -2.75rem;", + "-ml-12": "margin-left: -3rem;", + "-ml-14": "margin-left: -3.5rem;", + "-ml-16": "margin-left: -4rem;", + "-ml-20": "margin-left: -5rem;", + "-ml-24": "margin-left: -6rem;", + "-ml-28": "margin-left: -7rem;", + "-ml-32": "margin-left: -8rem;", + "-ml-36": "margin-left: -9rem;", + "-ml-40": "margin-left: -10rem;", + "-ml-44": "margin-left: -11rem;", + "-ml-48": "margin-left: -12rem;", + "-ml-52": "margin-left: -13rem;", + "-ml-56": "margin-left: -14rem;", + "-ml-60": "margin-left: -15rem;", + "-ml-64": "margin-left: -16rem;", + "-ml-72": "margin-left: -18rem;", + "-ml-80": "margin-left: -20rem;", + "-ml-96": "margin-left: -24rem;", + "-ml-px": "margin-left: -1px;", + "-ml-0\\.5": "margin-left: -0.125rem;", + "-ml-1\\.5": "margin-left: -0.375rem;", + "-ml-2\\.5": "margin-left: -0.625rem;", + "-ml-3\\.5": "margin-left: -0.875rem;", + "box-border": "box-sizing: border-box;", + "box-content": "box-sizing: content-box;", + "block": "display: block;", + "inline-block": "display: inline-block;", + "inline": "display: inline;", + "flex": "display: flex;", + "inline-flex": "display: inline-flex;", + "table": "display: table;", + "inline-table": "display: inline-table;", + "table-caption": "display: table-caption;", + "table-cell": "display: table-cell;", + "table-column": "display: table-column;", + "table-column-group": "display: table-column-group;", + "table-footer-group": "display: table-footer-group;", + "table-header-group": "display: table-header-group;", + "table-row-group": "display: table-row-group;", + "table-row": "display: table-row;", + "flow-root": "display: flow-root;", + "grid": "display: grid;", + "inline-grid": "display: inline-grid;", + "contents": "display: contents;", + "list-item": "display: list-item;", + "hidden": "display: none;", + "h-0": "height: 0px;", + "h-1": "height: 0.25rem;", + "h-2": "height: 0.5rem;", + "h-3": "height: 0.75rem;", + "h-4": "height: 1rem;", + "h-5": "height: 1.25rem;", + "h-6": "height: 1.5rem;", + "h-7": "height: 1.75rem;", + "h-8": "height: 2rem;", + "h-9": "height: 2.25rem;", + "h-10": "height: 2.5rem;", + "h-11": "height: 2.75rem;", + "h-12": "height: 3rem;", + "h-14": "height: 3.5rem;", + "h-16": "height: 4rem;", + "h-20": "height: 5rem;", + "h-24": "height: 6rem;", + "h-28": "height: 7rem;", + "h-32": "height: 8rem;", + "h-36": "height: 9rem;", + "h-40": "height: 10rem;", + "h-44": "height: 11rem;", + "h-48": "height: 12rem;", + "h-52": "height: 13rem;", + "h-56": "height: 14rem;", + "h-60": "height: 15rem;", + "h-64": "height: 16rem;", + "h-72": "height: 18rem;", + "h-80": "height: 20rem;", + "h-96": "height: 24rem;", + "h-auto": "height: auto;", + "h-px": "height: 1px;", + "h-0\\.5": "height: 0.125rem;", + "h-1\\.5": "height: 0.375rem;", + "h-2\\.5": "height: 0.625rem;", + "h-3\\.5": "height: 0.875rem;", + "h-1\\/2": "height: 50%;", + "h-1\\/3": "height: 33.3333%;", + "h-2\\/3": "height: 66.6667%;", + "h-1\\/4": "height: 25%;", + "h-2\\/4": "height: 50%;", + "h-3\\/4": "height: 75%;", + "h-1\\/5": "height: 20%;", + "h-2\\/5": "height: 40%;", + "h-3\\/5": "height: 60%;", + "h-4\\/5": "height: 80%;", + "h-1\\/6": "height: 16.6667%;", + "h-2\\/6": "height: 33.3333%;", + "h-3\\/6": "height: 50%;", + "h-4\\/6": "height: 66.6667%;", + "h-5\\/6": "height: 83.3333%;", + "h-full": "height: 100%;", + "h-screen": "height: 100vh;", + "max-h-0": "max-height: 0px;", + "max-h-1": "max-height: 0.25rem;", + "max-h-2": "max-height: 0.5rem;", + "max-h-3": "max-height: 0.75rem;", + "max-h-4": "max-height: 1rem;", + "max-h-5": "max-height: 1.25rem;", + "max-h-6": "max-height: 1.5rem;", + "max-h-7": "max-height: 1.75rem;", + "max-h-8": "max-height: 2rem;", + "max-h-9": "max-height: 2.25rem;", + "max-h-10": "max-height: 2.5rem;", + "max-h-11": "max-height: 2.75rem;", + "max-h-12": "max-height: 3rem;", + "max-h-14": "max-height: 3.5rem;", + "max-h-16": "max-height: 4rem;", + "max-h-20": "max-height: 5rem;", + "max-h-24": "max-height: 6rem;", + "max-h-28": "max-height: 7rem;", + "max-h-32": "max-height: 8rem;", + "max-h-36": "max-height: 9rem;", + "max-h-40": "max-height: 10rem;", + "max-h-44": "max-height: 11rem;", + "max-h-48": "max-height: 12rem;", + "max-h-52": "max-height: 13rem;", + "max-h-56": "max-height: 14rem;", + "max-h-60": "max-height: 15rem;", + "max-h-64": "max-height: 16rem;", + "max-h-72": "max-height: 18rem;", + "max-h-80": "max-height: 20rem;", + "max-h-96": "max-height: 24rem;", + "max-h-px": "max-height: 1px;", + "max-h-0\\.5": "max-height: 0.125rem;", + "max-h-1\\.5": "max-height: 0.375rem;", + "max-h-2\\.5": "max-height: 0.625rem;", + "max-h-3\\.5": "max-height: 0.875rem;", + "max-h-full": "max-height: 100%;", + "max-h-screen": "max-height: 100vh;", + "min-h-0": "min-height: 0px;", + "min-h-full": "min-height: 100%;", + "min-h-screen": "min-height: 100vh;", + "w-0": "width: 0px;", + "w-1": "width: 0.25rem;", + "w-2": "width: 0.5rem;", + "w-3": "width: 0.75rem;", + "w-4": "width: 1rem;", + "w-5": "width: 1.25rem;", + "w-6": "width: 1.5rem;", + "w-7": "width: 1.75rem;", + "w-8": "width: 2rem;", + "w-9": "width: 2.25rem;", + "w-10": "width: 2.5rem;", + "w-11": "width: 2.75rem;", + "w-12": "width: 3rem;", + "w-14": "width: 3.5rem;", + "w-16": "width: 4rem;", + "w-20": "width: 5rem;", + "w-24": "width: 6rem;", + "w-28": "width: 7rem;", + "w-32": "width: 8rem;", + "w-36": "width: 9rem;", + "w-40": "width: 10rem;", + "w-44": "width: 11rem;", + "w-48": "width: 12rem;", + "w-52": "width: 13rem;", + "w-56": "width: 14rem;", + "w-60": "width: 15rem;", + "w-64": "width: 16rem;", + "w-72": "width: 18rem;", + "w-80": "width: 20rem;", + "w-96": "width: 24rem;", + "w-auto": "width: auto;", + "w-px": "width: 1px;", + "w-0\\.5": "width: 0.125rem;", + "w-1\\.5": "width: 0.375rem;", + "w-2\\.5": "width: 0.625rem;", + "w-3\\.5": "width: 0.875rem;", + "w-1\\/2": "width: 50%;", + "w-1\\/3": "width: 33.3333%;", + "w-2\\/3": "width: 66.6667%;", + "w-1\\/4": "width: 25%;", + "w-2\\/4": "width: 50%;", + "w-3\\/4": "width: 75%;", + "w-1\\/5": "width: 20%;", + "w-2\\/5": "width: 40%;", + "w-3\\/5": "width: 60%;", + "w-4\\/5": "width: 80%;", + "w-1\\/6": "width: 16.6667%;", + "w-2\\/6": "width: 33.3333%;", + "w-3\\/6": "width: 50%;", + "w-4\\/6": "width: 66.6667%;", + "w-5\\/6": "width: 83.3333%;", + "w-1\\/12": "width: 8.33333%;", + "w-2\\/12": "width: 16.6667%;", + "w-3\\/12": "width: 25%;", + "w-4\\/12": "width: 33.3333%;", + "w-5\\/12": "width: 41.6667%;", + "w-6\\/12": "width: 50%;", + "w-7\\/12": "width: 58.3333%;", + "w-8\\/12": "width: 66.6667%;", + "w-9\\/12": "width: 75%;", + "w-10\\/12": "width: 83.3333%;", + "w-11\\/12": "width: 91.6667%;", + "w-full": "width: 100%;", + "w-screen": "width: 100vw;", + "w-min": "width: min-content;", + "w-max": "width: max-content;", + "min-w-0": "min-width: 0px;", + "min-w-full": "min-width: 100%;", + "min-w-min": "min-width: min-content;", + "min-w-max": "min-width: max-content;", + "max-w-0": "max-width: 0px;", + "max-w-none": "max-width: none;", + "max-w-xs": "max-width: 20rem;", + "max-w-sm": "max-width: 24rem;", + "max-w-md": "max-width: 28rem;", + "max-w-lg": "max-width: 32rem;", + "max-w-xl": "max-width: 36rem;", + "max-w-2xl": "max-width: 42rem;", + "max-w-3xl": "max-width: 48rem;", + "max-w-4xl": "max-width: 56rem;", + "max-w-5xl": "max-width: 64rem;", + "max-w-6xl": "max-width: 72rem;", + "max-w-7xl": "max-width: 80rem;", + "max-w-full": "max-width: 100%;", + "max-w-min": "max-width: min-content;", + "max-w-max": "max-width: max-content;", + "max-w-prose": "max-width: 65ch;", + "max-w-screen-sm": "max-width: 640px;", + "max-w-screen-md": "max-width: 768px;", + "max-w-screen-lg": "max-width: 1024px;", + "max-w-screen-xl": "max-width: 1280px;", + "max-w-screen-2xl": "max-width: 1536px;", + "flex-1": "flex-grow: 1; flex-shrink: 1; flex-basis: 0%;", + "flex-auto": "flex-grow: 1; flex-shrink: 1; flex-basis: auto;", + "flex-initial": "flex-grow: 0; flex-shrink: 1; flex-basis: auto;", + "flex-none": "flex-grow: 0; flex-shrink: 0; flex-basis: auto;", + "flex-shrink-0": "flex-shrink: 0;", + "flex-shrink": "flex-shrink: 1;", + "flex-grow-0": "flex-grow: 0;", + "flex-grow": "flex-grow: 1;", + "table-auto": "table-layout: auto;", + "table-fixed": "table-layout: fixed;", + "border-collapse": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-separate": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "origin-center": "transform-origin: center center;", + "origin-top": "transform-origin: center top;", + "origin-top-right": "transform-origin: right top;", + "origin-right": "transform-origin: right center;", + "origin-bottom-right": "transform-origin: right bottom;", + "origin-bottom": "transform-origin: center bottom;", + "origin-bottom-left": "transform-origin: left bottom;", + "origin-left": "transform-origin: left center;", + "origin-top-left": "transform-origin: left top;", + "transform": "--tw-translate-x: undefined; --tw-translate-y: undefined; --tw-rotate: undefined; --tw-skew-x: undefined; --tw-skew-y: undefined; --tw-scale-x: undefined; --tw-scale-y: undefined; transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));", + "transform-gpu": "--tw-translate-x: undefined; --tw-translate-y: undefined; --tw-rotate: undefined; --tw-skew-x: undefined; --tw-skew-y: undefined; --tw-scale-x: undefined; --tw-scale-y: undefined; transform: translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));", + "transform-none": "transform: none;", + "translate-x-0": "--tw-translate-x: undefined;", + "translate-x-1": "--tw-translate-x: undefined;", + "translate-x-2": "--tw-translate-x: undefined;", + "translate-x-3": "--tw-translate-x: undefined;", + "translate-x-4": "--tw-translate-x: undefined;", + "translate-x-5": "--tw-translate-x: undefined;", + "translate-x-6": "--tw-translate-x: undefined;", + "translate-x-7": "--tw-translate-x: undefined;", + "translate-x-8": "--tw-translate-x: undefined;", + "translate-x-9": "--tw-translate-x: undefined;", + "translate-x-10": "--tw-translate-x: undefined;", + "translate-x-11": "--tw-translate-x: undefined;", + "translate-x-12": "--tw-translate-x: undefined;", + "translate-x-14": "--tw-translate-x: undefined;", + "translate-x-16": "--tw-translate-x: undefined;", + "translate-x-20": "--tw-translate-x: undefined;", + "translate-x-24": "--tw-translate-x: undefined;", + "translate-x-28": "--tw-translate-x: undefined;", + "translate-x-32": "--tw-translate-x: undefined;", + "translate-x-36": "--tw-translate-x: undefined;", + "translate-x-40": "--tw-translate-x: undefined;", + "translate-x-44": "--tw-translate-x: undefined;", + "translate-x-48": "--tw-translate-x: undefined;", + "translate-x-52": "--tw-translate-x: undefined;", + "translate-x-56": "--tw-translate-x: undefined;", + "translate-x-60": "--tw-translate-x: undefined;", + "translate-x-64": "--tw-translate-x: undefined;", + "translate-x-72": "--tw-translate-x: undefined;", + "translate-x-80": "--tw-translate-x: undefined;", + "translate-x-96": "--tw-translate-x: undefined;", + "translate-x-px": "--tw-translate-x: undefined;", + "translate-x-0\\.5": "--tw-translate-x: undefined;", + "translate-x-1\\.5": "--tw-translate-x: undefined;", + "translate-x-2\\.5": "--tw-translate-x: undefined;", + "translate-x-3\\.5": "--tw-translate-x: undefined;", + "-translate-x-0": "--tw-translate-x: undefined;", + "-translate-x-1": "--tw-translate-x: undefined;", + "-translate-x-2": "--tw-translate-x: undefined;", + "-translate-x-3": "--tw-translate-x: undefined;", + "-translate-x-4": "--tw-translate-x: undefined;", + "-translate-x-5": "--tw-translate-x: undefined;", + "-translate-x-6": "--tw-translate-x: undefined;", + "-translate-x-7": "--tw-translate-x: undefined;", + "-translate-x-8": "--tw-translate-x: undefined;", + "-translate-x-9": "--tw-translate-x: undefined;", + "-translate-x-10": "--tw-translate-x: undefined;", + "-translate-x-11": "--tw-translate-x: undefined;", + "-translate-x-12": "--tw-translate-x: undefined;", + "-translate-x-14": "--tw-translate-x: undefined;", + "-translate-x-16": "--tw-translate-x: undefined;", + "-translate-x-20": "--tw-translate-x: undefined;", + "-translate-x-24": "--tw-translate-x: undefined;", + "-translate-x-28": "--tw-translate-x: undefined;", + "-translate-x-32": "--tw-translate-x: undefined;", + "-translate-x-36": "--tw-translate-x: undefined;", + "-translate-x-40": "--tw-translate-x: undefined;", + "-translate-x-44": "--tw-translate-x: undefined;", + "-translate-x-48": "--tw-translate-x: undefined;", + "-translate-x-52": "--tw-translate-x: undefined;", + "-translate-x-56": "--tw-translate-x: undefined;", + "-translate-x-60": "--tw-translate-x: undefined;", + "-translate-x-64": "--tw-translate-x: undefined;", + "-translate-x-72": "--tw-translate-x: undefined;", + "-translate-x-80": "--tw-translate-x: undefined;", + "-translate-x-96": "--tw-translate-x: undefined;", + "-translate-x-px": "--tw-translate-x: undefined;", + "-translate-x-0\\.5": "--tw-translate-x: undefined;", + "-translate-x-1\\.5": "--tw-translate-x: undefined;", + "-translate-x-2\\.5": "--tw-translate-x: undefined;", + "-translate-x-3\\.5": "--tw-translate-x: undefined;", + "translate-x-1\\/2": "--tw-translate-x: undefined;", + "translate-x-1\\/3": "--tw-translate-x: undefined;", + "translate-x-2\\/3": "--tw-translate-x: undefined;", + "translate-x-1\\/4": "--tw-translate-x: undefined;", + "translate-x-2\\/4": "--tw-translate-x: undefined;", + "translate-x-3\\/4": "--tw-translate-x: undefined;", + "translate-x-full": "--tw-translate-x: undefined;", + "-translate-x-1\\/2": "--tw-translate-x: undefined;", + "-translate-x-1\\/3": "--tw-translate-x: undefined;", + "-translate-x-2\\/3": "--tw-translate-x: undefined;", + "-translate-x-1\\/4": "--tw-translate-x: undefined;", + "-translate-x-2\\/4": "--tw-translate-x: undefined;", + "-translate-x-3\\/4": "--tw-translate-x: undefined;", + "-translate-x-full": "--tw-translate-x: undefined;", + "translate-y-0": "--tw-translate-y: undefined;", + "translate-y-1": "--tw-translate-y: undefined;", + "translate-y-2": "--tw-translate-y: undefined;", + "translate-y-3": "--tw-translate-y: undefined;", + "translate-y-4": "--tw-translate-y: undefined;", + "translate-y-5": "--tw-translate-y: undefined;", + "translate-y-6": "--tw-translate-y: undefined;", + "translate-y-7": "--tw-translate-y: undefined;", + "translate-y-8": "--tw-translate-y: undefined;", + "translate-y-9": "--tw-translate-y: undefined;", + "translate-y-10": "--tw-translate-y: undefined;", + "translate-y-11": "--tw-translate-y: undefined;", + "translate-y-12": "--tw-translate-y: undefined;", + "translate-y-14": "--tw-translate-y: undefined;", + "translate-y-16": "--tw-translate-y: undefined;", + "translate-y-20": "--tw-translate-y: undefined;", + "translate-y-24": "--tw-translate-y: undefined;", + "translate-y-28": "--tw-translate-y: undefined;", + "translate-y-32": "--tw-translate-y: undefined;", + "translate-y-36": "--tw-translate-y: undefined;", + "translate-y-40": "--tw-translate-y: undefined;", + "translate-y-44": "--tw-translate-y: undefined;", + "translate-y-48": "--tw-translate-y: undefined;", + "translate-y-52": "--tw-translate-y: undefined;", + "translate-y-56": "--tw-translate-y: undefined;", + "translate-y-60": "--tw-translate-y: undefined;", + "translate-y-64": "--tw-translate-y: undefined;", + "translate-y-72": "--tw-translate-y: undefined;", + "translate-y-80": "--tw-translate-y: undefined;", + "translate-y-96": "--tw-translate-y: undefined;", + "translate-y-px": "--tw-translate-y: undefined;", + "translate-y-0\\.5": "--tw-translate-y: undefined;", + "translate-y-1\\.5": "--tw-translate-y: undefined;", + "translate-y-2\\.5": "--tw-translate-y: undefined;", + "translate-y-3\\.5": "--tw-translate-y: undefined;", + "-translate-y-0": "--tw-translate-y: undefined;", + "-translate-y-1": "--tw-translate-y: undefined;", + "-translate-y-2": "--tw-translate-y: undefined;", + "-translate-y-3": "--tw-translate-y: undefined;", + "-translate-y-4": "--tw-translate-y: undefined;", + "-translate-y-5": "--tw-translate-y: undefined;", + "-translate-y-6": "--tw-translate-y: undefined;", + "-translate-y-7": "--tw-translate-y: undefined;", + "-translate-y-8": "--tw-translate-y: undefined;", + "-translate-y-9": "--tw-translate-y: undefined;", + "-translate-y-10": "--tw-translate-y: undefined;", + "-translate-y-11": "--tw-translate-y: undefined;", + "-translate-y-12": "--tw-translate-y: undefined;", + "-translate-y-14": "--tw-translate-y: undefined;", + "-translate-y-16": "--tw-translate-y: undefined;", + "-translate-y-20": "--tw-translate-y: undefined;", + "-translate-y-24": "--tw-translate-y: undefined;", + "-translate-y-28": "--tw-translate-y: undefined;", + "-translate-y-32": "--tw-translate-y: undefined;", + "-translate-y-36": "--tw-translate-y: undefined;", + "-translate-y-40": "--tw-translate-y: undefined;", + "-translate-y-44": "--tw-translate-y: undefined;", + "-translate-y-48": "--tw-translate-y: undefined;", + "-translate-y-52": "--tw-translate-y: undefined;", + "-translate-y-56": "--tw-translate-y: undefined;", + "-translate-y-60": "--tw-translate-y: undefined;", + "-translate-y-64": "--tw-translate-y: undefined;", + "-translate-y-72": "--tw-translate-y: undefined;", + "-translate-y-80": "--tw-translate-y: undefined;", + "-translate-y-96": "--tw-translate-y: undefined;", + "-translate-y-px": "--tw-translate-y: undefined;", + "-translate-y-0\\.5": "--tw-translate-y: undefined;", + "-translate-y-1\\.5": "--tw-translate-y: undefined;", + "-translate-y-2\\.5": "--tw-translate-y: undefined;", + "-translate-y-3\\.5": "--tw-translate-y: undefined;", + "translate-y-1\\/2": "--tw-translate-y: undefined;", + "translate-y-1\\/3": "--tw-translate-y: undefined;", + "translate-y-2\\/3": "--tw-translate-y: undefined;", + "translate-y-1\\/4": "--tw-translate-y: undefined;", + "translate-y-2\\/4": "--tw-translate-y: undefined;", + "translate-y-3\\/4": "--tw-translate-y: undefined;", + "translate-y-full": "--tw-translate-y: undefined;", + "-translate-y-1\\/2": "--tw-translate-y: undefined;", + "-translate-y-1\\/3": "--tw-translate-y: undefined;", + "-translate-y-2\\/3": "--tw-translate-y: undefined;", + "-translate-y-1\\/4": "--tw-translate-y: undefined;", + "-translate-y-2\\/4": "--tw-translate-y: undefined;", + "-translate-y-3\\/4": "--tw-translate-y: undefined;", + "-translate-y-full": "--tw-translate-y: undefined;", + "rotate-0": "--tw-rotate: undefined;", + "rotate-1": "--tw-rotate: undefined;", + "rotate-2": "--tw-rotate: undefined;", + "rotate-3": "--tw-rotate: undefined;", + "rotate-6": "--tw-rotate: undefined;", + "rotate-12": "--tw-rotate: undefined;", + "rotate-45": "--tw-rotate: undefined;", + "rotate-90": "--tw-rotate: undefined;", + "rotate-180": "--tw-rotate: undefined;", + "-rotate-180": "--tw-rotate: undefined;", + "-rotate-90": "--tw-rotate: undefined;", + "-rotate-45": "--tw-rotate: undefined;", + "-rotate-12": "--tw-rotate: undefined;", + "-rotate-6": "--tw-rotate: undefined;", + "-rotate-3": "--tw-rotate: undefined;", + "-rotate-2": "--tw-rotate: undefined;", + "-rotate-1": "--tw-rotate: undefined;", + "skew-x-0": "--tw-skew-x: undefined;", + "skew-x-1": "--tw-skew-x: undefined;", + "skew-x-2": "--tw-skew-x: undefined;", + "skew-x-3": "--tw-skew-x: undefined;", + "skew-x-6": "--tw-skew-x: undefined;", + "skew-x-12": "--tw-skew-x: undefined;", + "-skew-x-12": "--tw-skew-x: undefined;", + "-skew-x-6": "--tw-skew-x: undefined;", + "-skew-x-3": "--tw-skew-x: undefined;", + "-skew-x-2": "--tw-skew-x: undefined;", + "-skew-x-1": "--tw-skew-x: undefined;", + "skew-y-0": "--tw-skew-y: undefined;", + "skew-y-1": "--tw-skew-y: undefined;", + "skew-y-2": "--tw-skew-y: undefined;", + "skew-y-3": "--tw-skew-y: undefined;", + "skew-y-6": "--tw-skew-y: undefined;", + "skew-y-12": "--tw-skew-y: undefined;", + "-skew-y-12": "--tw-skew-y: undefined;", + "-skew-y-6": "--tw-skew-y: undefined;", + "-skew-y-3": "--tw-skew-y: undefined;", + "-skew-y-2": "--tw-skew-y: undefined;", + "-skew-y-1": "--tw-skew-y: undefined;", + "scale-0": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-50": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-75": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-90": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-95": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-100": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-105": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-110": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-125": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-150": "--tw-scale-x: undefined; --tw-scale-y: undefined;", + "scale-x-0": "--tw-scale-x: undefined;", + "scale-x-50": "--tw-scale-x: undefined;", + "scale-x-75": "--tw-scale-x: undefined;", + "scale-x-90": "--tw-scale-x: undefined;", + "scale-x-95": "--tw-scale-x: undefined;", + "scale-x-100": "--tw-scale-x: undefined;", + "scale-x-105": "--tw-scale-x: undefined;", + "scale-x-110": "--tw-scale-x: undefined;", + "scale-x-125": "--tw-scale-x: undefined;", + "scale-x-150": "--tw-scale-x: undefined;", + "scale-y-0": "--tw-scale-y: undefined;", + "scale-y-50": "--tw-scale-y: undefined;", + "scale-y-75": "--tw-scale-y: undefined;", + "scale-y-90": "--tw-scale-y: undefined;", + "scale-y-95": "--tw-scale-y: undefined;", + "scale-y-100": "--tw-scale-y: undefined;", + "scale-y-105": "--tw-scale-y: undefined;", + "scale-y-110": "--tw-scale-y: undefined;", + "scale-y-125": "--tw-scale-y: undefined;", + "scale-y-150": "--tw-scale-y: undefined;", + "animate-none": "", + "animate-spin": "", + "animate-ping": "", + "animate-pulse": "", + "animate-bounce": "", + "cursor-auto": "cursor: auto;", + "cursor-default": "cursor: default;", + "cursor-pointer": "cursor: pointer;", + "cursor-wait": "cursor: wait;", + "cursor-text": "cursor: text;", + "cursor-move": "cursor: move;", + "cursor-help": "cursor: help;", + "cursor-not-allowed": "cursor: not-allowed;", + "select-none": "user-select: none;", + "select-text": "user-select: text;", + "select-all": "user-select: all;", + "select-auto": "user-select: auto;", + "resize-none": "resize: none;", + "resize-y": "resize: vertical;", + "resize-x": "resize: horizontal;", + "resize": "resize: both;", + "list-inside": "list-style-position: inside;", + "list-outside": "list-style-position: outside;", + "list-none": "list-style-type: none;", + "list-disc": "list-style-type: disc;", + "list-decimal": "list-style-type: decimal;", + "appearance-none": "appearance: none;", + "auto-cols-auto": "grid-auto-columns: auto;", + "auto-cols-min": "grid-auto-columns: min-content;", + "auto-cols-max": "grid-auto-columns: max-content;", + "auto-cols-fr": "grid-auto-columns: minmax(0px, 1fr);", + "grid-flow-row": "grid-auto-flow: row;", + "grid-flow-col": "grid-auto-flow: column;", + "grid-flow-row-dense": "grid-auto-flow: dense;", + "grid-flow-col-dense": "grid-auto-flow: column dense;", + "auto-rows-auto": "grid-auto-rows: auto;", + "auto-rows-min": "grid-auto-rows: min-content;", + "auto-rows-max": "grid-auto-rows: max-content;", + "auto-rows-fr": "grid-auto-rows: minmax(0px, 1fr);", + "grid-cols-1": "grid-template-columns: repeat(1, minmax(0px, 1fr));", + "grid-cols-2": "grid-template-columns: repeat(2, minmax(0px, 1fr));", + "grid-cols-3": "grid-template-columns: repeat(3, minmax(0px, 1fr));", + "grid-cols-4": "grid-template-columns: repeat(4, minmax(0px, 1fr));", + "grid-cols-5": "grid-template-columns: repeat(5, minmax(0px, 1fr));", + "grid-cols-6": "grid-template-columns: repeat(6, minmax(0px, 1fr));", + "grid-cols-7": "grid-template-columns: repeat(7, minmax(0px, 1fr));", + "grid-cols-8": "grid-template-columns: repeat(8, minmax(0px, 1fr));", + "grid-cols-9": "grid-template-columns: repeat(9, minmax(0px, 1fr));", + "grid-cols-10": "grid-template-columns: repeat(10, minmax(0px, 1fr));", + "grid-cols-11": "grid-template-columns: repeat(11, minmax(0px, 1fr));", + "grid-cols-12": "grid-template-columns: repeat(12, minmax(0px, 1fr));", + "grid-cols-none": "grid-template-columns: none;", + "grid-rows-1": "grid-template-rows: repeat(1, minmax(0px, 1fr));", + "grid-rows-2": "grid-template-rows: repeat(2, minmax(0px, 1fr));", + "grid-rows-3": "grid-template-rows: repeat(3, minmax(0px, 1fr));", + "grid-rows-4": "grid-template-rows: repeat(4, minmax(0px, 1fr));", + "grid-rows-5": "grid-template-rows: repeat(5, minmax(0px, 1fr));", + "grid-rows-6": "grid-template-rows: repeat(6, minmax(0px, 1fr));", + "grid-rows-none": "grid-template-rows: none;", + "flex-row": "flex-direction: row;", + "flex-row-reverse": "flex-direction: row-reverse;", + "flex-col": "flex-direction: column;", + "flex-col-reverse": "flex-direction: column-reverse;", + "flex-wrap": "flex-wrap: wrap;", + "flex-wrap-reverse": "flex-wrap: wrap-reverse;", + "flex-nowrap": "flex-wrap: nowrap;", + "place-content-center": "align-content: center; justify-content: center;", + "place-content-start": "align-content: start; justify-content: start;", + "place-content-end": "align-content: end; justify-content: end;", + "place-content-between": "align-content: space-between; justify-content: space-between;", + "place-content-around": "align-content: space-around; justify-content: space-around;", + "place-content-evenly": "align-content: space-evenly; justify-content: space-evenly;", + "place-content-stretch": "align-content: stretch; justify-content: stretch;", + "place-items-start": "align-items: start; justify-items: start;", + "place-items-end": "align-items: end; justify-items: end;", + "place-items-center": "align-items: center; justify-items: center;", + "place-items-stretch": "align-items: stretch; justify-items: stretch;", + "content-center": "align-content: center;", + "content-start": "align-content: flex-start;", + "content-end": "align-content: flex-end;", + "content-between": "align-content: space-between;", + "content-around": "align-content: space-around;", + "content-evenly": "align-content: space-evenly;", + "items-start": "align-items: flex-start;", + "items-end": "align-items: flex-end;", + "items-center": "align-items: center;", + "items-baseline": "align-items: baseline;", + "items-stretch": "align-items: stretch;", + "justify-start": "justify-content: flex-start;", + "justify-end": "justify-content: flex-end;", + "justify-center": "justify-content: center;", + "justify-between": "justify-content: space-between;", + "justify-around": "justify-content: space-around;", + "justify-evenly": "justify-content: space-evenly;", + "justify-items-start": "justify-items: start;", + "justify-items-end": "justify-items: end;", + "justify-items-center": "justify-items: center;", + "justify-items-stretch": "justify-items: stretch;", + "gap-0": "row-gap: 0px; column-gap: 0px;", + "gap-1": "row-gap: 0.25rem; column-gap: 0.25rem;", + "gap-2": "row-gap: 0.5rem; column-gap: 0.5rem;", + "gap-3": "row-gap: 0.75rem; column-gap: 0.75rem;", + "gap-4": "row-gap: 1rem; column-gap: 1rem;", + "gap-5": "row-gap: 1.25rem; column-gap: 1.25rem;", + "gap-6": "row-gap: 1.5rem; column-gap: 1.5rem;", + "gap-7": "row-gap: 1.75rem; column-gap: 1.75rem;", + "gap-8": "row-gap: 2rem; column-gap: 2rem;", + "gap-9": "row-gap: 2.25rem; column-gap: 2.25rem;", + "gap-10": "row-gap: 2.5rem; column-gap: 2.5rem;", + "gap-11": "row-gap: 2.75rem; column-gap: 2.75rem;", + "gap-12": "row-gap: 3rem; column-gap: 3rem;", + "gap-14": "row-gap: 3.5rem; column-gap: 3.5rem;", + "gap-16": "row-gap: 4rem; column-gap: 4rem;", + "gap-20": "row-gap: 5rem; column-gap: 5rem;", + "gap-24": "row-gap: 6rem; column-gap: 6rem;", + "gap-28": "row-gap: 7rem; column-gap: 7rem;", + "gap-32": "row-gap: 8rem; column-gap: 8rem;", + "gap-36": "row-gap: 9rem; column-gap: 9rem;", + "gap-40": "row-gap: 10rem; column-gap: 10rem;", + "gap-44": "row-gap: 11rem; column-gap: 11rem;", + "gap-48": "row-gap: 12rem; column-gap: 12rem;", + "gap-52": "row-gap: 13rem; column-gap: 13rem;", + "gap-56": "row-gap: 14rem; column-gap: 14rem;", + "gap-60": "row-gap: 15rem; column-gap: 15rem;", + "gap-64": "row-gap: 16rem; column-gap: 16rem;", + "gap-72": "row-gap: 18rem; column-gap: 18rem;", + "gap-80": "row-gap: 20rem; column-gap: 20rem;", + "gap-96": "row-gap: 24rem; column-gap: 24rem;", + "gap-px": "row-gap: 1px; column-gap: 1px;", + "gap-0\\.5": "row-gap: 0.125rem; column-gap: 0.125rem;", + "gap-1\\.5": "row-gap: 0.375rem; column-gap: 0.375rem;", + "gap-2\\.5": "row-gap: 0.625rem; column-gap: 0.625rem;", + "gap-3\\.5": "row-gap: 0.875rem; column-gap: 0.875rem;", + "gap-x-0": "column-gap: 0px;", + "gap-x-1": "column-gap: 0.25rem;", + "gap-x-2": "column-gap: 0.5rem;", + "gap-x-3": "column-gap: 0.75rem;", + "gap-x-4": "column-gap: 1rem;", + "gap-x-5": "column-gap: 1.25rem;", + "gap-x-6": "column-gap: 1.5rem;", + "gap-x-7": "column-gap: 1.75rem;", + "gap-x-8": "column-gap: 2rem;", + "gap-x-9": "column-gap: 2.25rem;", + "gap-x-10": "column-gap: 2.5rem;", + "gap-x-11": "column-gap: 2.75rem;", + "gap-x-12": "column-gap: 3rem;", + "gap-x-14": "column-gap: 3.5rem;", + "gap-x-16": "column-gap: 4rem;", + "gap-x-20": "column-gap: 5rem;", + "gap-x-24": "column-gap: 6rem;", + "gap-x-28": "column-gap: 7rem;", + "gap-x-32": "column-gap: 8rem;", + "gap-x-36": "column-gap: 9rem;", + "gap-x-40": "column-gap: 10rem;", + "gap-x-44": "column-gap: 11rem;", + "gap-x-48": "column-gap: 12rem;", + "gap-x-52": "column-gap: 13rem;", + "gap-x-56": "column-gap: 14rem;", + "gap-x-60": "column-gap: 15rem;", + "gap-x-64": "column-gap: 16rem;", + "gap-x-72": "column-gap: 18rem;", + "gap-x-80": "column-gap: 20rem;", + "gap-x-96": "column-gap: 24rem;", + "gap-x-px": "column-gap: 1px;", + "gap-x-0\\.5": "column-gap: 0.125rem;", + "gap-x-1\\.5": "column-gap: 0.375rem;", + "gap-x-2\\.5": "column-gap: 0.625rem;", + "gap-x-3\\.5": "column-gap: 0.875rem;", + "gap-y-0": "row-gap: 0px;", + "gap-y-1": "row-gap: 0.25rem;", + "gap-y-2": "row-gap: 0.5rem;", + "gap-y-3": "row-gap: 0.75rem;", + "gap-y-4": "row-gap: 1rem;", + "gap-y-5": "row-gap: 1.25rem;", + "gap-y-6": "row-gap: 1.5rem;", + "gap-y-7": "row-gap: 1.75rem;", + "gap-y-8": "row-gap: 2rem;", + "gap-y-9": "row-gap: 2.25rem;", + "gap-y-10": "row-gap: 2.5rem;", + "gap-y-11": "row-gap: 2.75rem;", + "gap-y-12": "row-gap: 3rem;", + "gap-y-14": "row-gap: 3.5rem;", + "gap-y-16": "row-gap: 4rem;", + "gap-y-20": "row-gap: 5rem;", + "gap-y-24": "row-gap: 6rem;", + "gap-y-28": "row-gap: 7rem;", + "gap-y-32": "row-gap: 8rem;", + "gap-y-36": "row-gap: 9rem;", + "gap-y-40": "row-gap: 10rem;", + "gap-y-44": "row-gap: 11rem;", + "gap-y-48": "row-gap: 12rem;", + "gap-y-52": "row-gap: 13rem;", + "gap-y-56": "row-gap: 14rem;", + "gap-y-60": "row-gap: 15rem;", + "gap-y-64": "row-gap: 16rem;", + "gap-y-72": "row-gap: 18rem;", + "gap-y-80": "row-gap: 20rem;", + "gap-y-96": "row-gap: 24rem;", + "gap-y-px": "row-gap: 1px;", + "gap-y-0\\.5": "row-gap: 0.125rem;", + "gap-y-1\\.5": "row-gap: 0.375rem;", + "gap-y-2\\.5": "row-gap: 0.625rem;", + "gap-y-3\\.5": "row-gap: 0.875rem;", + "place-self-auto": "align-self: auto; justify-self: auto;", + "place-self-start": "align-self: start; justify-self: start;", + "place-self-end": "align-self: end; justify-self: end;", + "place-self-center": "align-self: center; justify-self: center;", + "place-self-stretch": "align-self: stretch; justify-self: stretch;", + "self-auto": "align-self: auto;", + "self-start": "align-self: flex-start;", + "self-end": "align-self: flex-end;", + "self-center": "align-self: center;", + "self-stretch": "align-self: stretch;", + "self-baseline": "align-self: baseline;", + "justify-self-auto": "justify-self: auto;", + "justify-self-start": "justify-self: start;", + "justify-self-end": "justify-self: end;", + "justify-self-center": "justify-self: center;", + "justify-self-stretch": "justify-self: stretch;", + "overflow-auto": "overflow-x: auto; overflow-y: auto;", + "overflow-hidden": "overflow-x: hidden; overflow-y: hidden;", + "overflow-visible": "overflow-x: visible; overflow-y: visible;", + "overflow-scroll": "overflow-x: scroll; overflow-y: scroll;", + "overflow-x-auto": "overflow-x: auto;", + "overflow-y-auto": "overflow-y: auto;", + "overflow-x-hidden": "overflow-x: hidden;", + "overflow-y-hidden": "overflow-y: hidden;", + "overflow-x-visible": "overflow-x: visible;", + "overflow-y-visible": "overflow-y: visible;", + "overflow-x-scroll": "overflow-x: scroll;", + "overflow-y-scroll": "overflow-y: scroll;", + "overscroll-auto": "overscroll-behavior-x: auto; overscroll-behavior-y: auto;", + "overscroll-contain": "overscroll-behavior-x: contain; overscroll-behavior-y: contain;", + "overscroll-none": "overscroll-behavior-x: none; overscroll-behavior-y: none;", + "overscroll-y-auto": "overscroll-behavior-y: auto;", + "overscroll-y-contain": "overscroll-behavior-y: contain;", + "overscroll-y-none": "overscroll-behavior-y: none;", + "overscroll-x-auto": "overscroll-behavior-x: auto;", + "overscroll-x-contain": "overscroll-behavior-x: contain;", + "overscroll-x-none": "overscroll-behavior-x: none;", + "truncate": "overflow-x: hidden; overflow-y: hidden; text-overflow: ellipsis; white-space-collapse: collapse; text-wrap: nowrap;", + "overflow-ellipsis": "text-overflow: ellipsis;", + "overflow-clip": "text-overflow: clip;", + "whitespace-normal": "white-space-collapse: collapse; text-wrap: wrap;", + "whitespace-nowrap": "white-space-collapse: collapse; text-wrap: nowrap;", + "whitespace-pre": "white-space-collapse: preserve; text-wrap: nowrap;", + "whitespace-pre-line": "white-space-collapse: preserve-breaks; text-wrap: wrap;", + "whitespace-pre-wrap": "white-space-collapse: preserve; text-wrap: wrap;", + "break-normal": "overflow-wrap: normal; word-break: normal;", + "break-words": "overflow-wrap: break-word;", + "break-all": "word-break: break-all;", + "rounded-none": "border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;", + "rounded-sm": "border-top-left-radius: 0.125rem; border-top-right-radius: 0.125rem; border-bottom-right-radius: 0.125rem; border-bottom-left-radius: 0.125rem;", + "rounded": "border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem;", + "rounded-md": "border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; border-bottom-right-radius: 0.375rem; border-bottom-left-radius: 0.375rem;", + "rounded-lg": "border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; border-bottom-left-radius: 0.5rem;", + "rounded-xl": "border-top-left-radius: 0.75rem; border-top-right-radius: 0.75rem; border-bottom-right-radius: 0.75rem; border-bottom-left-radius: 0.75rem;", + "rounded-2xl": "border-top-left-radius: 1rem; border-top-right-radius: 1rem; border-bottom-right-radius: 1rem; border-bottom-left-radius: 1rem;", + "rounded-3xl": "border-top-left-radius: 1.5rem; border-top-right-radius: 1.5rem; border-bottom-right-radius: 1.5rem; border-bottom-left-radius: 1.5rem;", + "rounded-full": "border-top-left-radius: 9999px; border-top-right-radius: 9999px; border-bottom-right-radius: 9999px; border-bottom-left-radius: 9999px;", + "rounded-t-none": "border-top-left-radius: 0px; border-top-right-radius: 0px;", + "rounded-t-sm": "border-top-left-radius: 0.125rem; border-top-right-radius: 0.125rem;", + "rounded-t": "border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem;", + "rounded-t-md": "border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem;", + "rounded-t-lg": "border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem;", + "rounded-t-xl": "border-top-left-radius: 0.75rem; border-top-right-radius: 0.75rem;", + "rounded-t-2xl": "border-top-left-radius: 1rem; border-top-right-radius: 1rem;", + "rounded-t-3xl": "border-top-left-radius: 1.5rem; border-top-right-radius: 1.5rem;", + "rounded-t-full": "border-top-left-radius: 9999px; border-top-right-radius: 9999px;", + "rounded-r-none": "border-top-right-radius: 0px; border-bottom-right-radius: 0px;", + "rounded-r-sm": "border-top-right-radius: 0.125rem; border-bottom-right-radius: 0.125rem;", + "rounded-r": "border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem;", + "rounded-r-md": "border-top-right-radius: 0.375rem; border-bottom-right-radius: 0.375rem;", + "rounded-r-lg": "border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem;", + "rounded-r-xl": "border-top-right-radius: 0.75rem; border-bottom-right-radius: 0.75rem;", + "rounded-r-2xl": "border-top-right-radius: 1rem; border-bottom-right-radius: 1rem;", + "rounded-r-3xl": "border-top-right-radius: 1.5rem; border-bottom-right-radius: 1.5rem;", + "rounded-r-full": "border-top-right-radius: 9999px; border-bottom-right-radius: 9999px;", + "rounded-b-none": "border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;", + "rounded-b-sm": "border-bottom-right-radius: 0.125rem; border-bottom-left-radius: 0.125rem;", + "rounded-b": "border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem;", + "rounded-b-md": "border-bottom-right-radius: 0.375rem; border-bottom-left-radius: 0.375rem;", + "rounded-b-lg": "border-bottom-right-radius: 0.5rem; border-bottom-left-radius: 0.5rem;", + "rounded-b-xl": "border-bottom-right-radius: 0.75rem; border-bottom-left-radius: 0.75rem;", + "rounded-b-2xl": "border-bottom-right-radius: 1rem; border-bottom-left-radius: 1rem;", + "rounded-b-3xl": "border-bottom-right-radius: 1.5rem; border-bottom-left-radius: 1.5rem;", + "rounded-b-full": "border-bottom-right-radius: 9999px; border-bottom-left-radius: 9999px;", + "rounded-l-none": "border-top-left-radius: 0px; border-bottom-left-radius: 0px;", + "rounded-l-sm": "border-top-left-radius: 0.125rem; border-bottom-left-radius: 0.125rem;", + "rounded-l": "border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem;", + "rounded-l-md": "border-top-left-radius: 0.375rem; border-bottom-left-radius: 0.375rem;", + "rounded-l-lg": "border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem;", + "rounded-l-xl": "border-top-left-radius: 0.75rem; border-bottom-left-radius: 0.75rem;", + "rounded-l-2xl": "border-top-left-radius: 1rem; border-bottom-left-radius: 1rem;", + "rounded-l-3xl": "border-top-left-radius: 1.5rem; border-bottom-left-radius: 1.5rem;", + "rounded-l-full": "border-top-left-radius: 9999px; border-bottom-left-radius: 9999px;", + "rounded-tl-none": "border-top-left-radius: 0px;", + "rounded-tl-sm": "border-top-left-radius: 0.125rem;", + "rounded-tl": "border-top-left-radius: 0.25rem;", + "rounded-tl-md": "border-top-left-radius: 0.375rem;", + "rounded-tl-lg": "border-top-left-radius: 0.5rem;", + "rounded-tl-xl": "border-top-left-radius: 0.75rem;", + "rounded-tl-2xl": "border-top-left-radius: 1rem;", + "rounded-tl-3xl": "border-top-left-radius: 1.5rem;", + "rounded-tl-full": "border-top-left-radius: 9999px;", + "rounded-tr-none": "border-top-right-radius: 0px;", + "rounded-tr-sm": "border-top-right-radius: 0.125rem;", + "rounded-tr": "border-top-right-radius: 0.25rem;", + "rounded-tr-md": "border-top-right-radius: 0.375rem;", + "rounded-tr-lg": "border-top-right-radius: 0.5rem;", + "rounded-tr-xl": "border-top-right-radius: 0.75rem;", + "rounded-tr-2xl": "border-top-right-radius: 1rem;", + "rounded-tr-3xl": "border-top-right-radius: 1.5rem;", + "rounded-tr-full": "border-top-right-radius: 9999px;", + "rounded-br-none": "border-bottom-right-radius: 0px;", + "rounded-br-sm": "border-bottom-right-radius: 0.125rem;", + "rounded-br": "border-bottom-right-radius: 0.25rem;", + "rounded-br-md": "border-bottom-right-radius: 0.375rem;", + "rounded-br-lg": "border-bottom-right-radius: 0.5rem;", + "rounded-br-xl": "border-bottom-right-radius: 0.75rem;", + "rounded-br-2xl": "border-bottom-right-radius: 1rem;", + "rounded-br-3xl": "border-bottom-right-radius: 1.5rem;", + "rounded-br-full": "border-bottom-right-radius: 9999px;", + "rounded-bl-none": "border-bottom-left-radius: 0px;", + "rounded-bl-sm": "border-bottom-left-radius: 0.125rem;", + "rounded-bl": "border-bottom-left-radius: 0.25rem;", + "rounded-bl-md": "border-bottom-left-radius: 0.375rem;", + "rounded-bl-lg": "border-bottom-left-radius: 0.5rem;", + "rounded-bl-xl": "border-bottom-left-radius: 0.75rem;", + "rounded-bl-2xl": "border-bottom-left-radius: 1rem;", + "rounded-bl-3xl": "border-bottom-left-radius: 1.5rem;", + "rounded-bl-full": "border-bottom-left-radius: 9999px;", + "border-0": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-2": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-4": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-8": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border": "border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;", + "border-t-0": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-t-2": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-t-4": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-t-8": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-t": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-r-0": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-r-2": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-r-4": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-r-8": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-r": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-b-0": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-b-2": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-b-4": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-b-8": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-b": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-l-0": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-l-2": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-l-4": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-l-8": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-l": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-solid": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-dashed": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-dotted": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-double": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-none": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-transparent": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-current": "--tw-border-opacity: 1; border-top-color: transparent; border-right-color: transparent; border-bottom-color: transparent; border-left-color: transparent;", + "border-black": "--tw-border-opacity: 1; border-top-color: #000000; border-right-color: #000000; border-bottom-color: #000000; border-left-color: #000000;", + "border-white": "--tw-border-opacity: 1; border-top-color: #ffffff; border-right-color: #ffffff; border-bottom-color: #ffffff; border-left-color: #ffffff;", + "border-gray-50": "--tw-border-opacity: 1; border-top-color: #f9fafb; border-right-color: #f9fafb; border-bottom-color: #f9fafb; border-left-color: #f9fafb;", + "border-gray-100": "--tw-border-opacity: 1; border-top-color: #f3f4f6; border-right-color: #f3f4f6; border-bottom-color: #f3f4f6; border-left-color: #f3f4f6;", + "border-gray-200": "--tw-border-opacity: 1; border-top-color: #e5e7eb; border-right-color: #e5e7eb; border-bottom-color: #e5e7eb; border-left-color: #e5e7eb;", + "border-gray-300": "--tw-border-opacity: 1; border-top-color: #d1d5db; border-right-color: #d1d5db; border-bottom-color: #d1d5db; border-left-color: #d1d5db;", + "border-gray-400": "--tw-border-opacity: 1; border-top-color: #9ca3af; border-right-color: #9ca3af; border-bottom-color: #9ca3af; border-left-color: #9ca3af;", + "border-gray-500": "--tw-border-opacity: 1; border-top-color: #6b7280; border-right-color: #6b7280; border-bottom-color: #6b7280; border-left-color: #6b7280;", + "border-gray-600": "--tw-border-opacity: 1; border-top-color: #4b5563; border-right-color: #4b5563; border-bottom-color: #4b5563; border-left-color: #4b5563;", + "border-gray-700": "--tw-border-opacity: 1; border-top-color: #374151; border-right-color: #374151; border-bottom-color: #374151; border-left-color: #374151;", + "border-gray-800": "--tw-border-opacity: 1; border-top-color: #1f2937; border-right-color: #1f2937; border-bottom-color: #1f2937; border-left-color: #1f2937;", + "border-gray-900": "--tw-border-opacity: 1; border-top-color: #111827; border-right-color: #111827; border-bottom-color: #111827; border-left-color: #111827;", + "border-red-50": "--tw-border-opacity: 1; border-top-color: #fef2f2; border-right-color: #fef2f2; border-bottom-color: #fef2f2; border-left-color: #fef2f2;", + "border-red-100": "--tw-border-opacity: 1; border-top-color: #fee2e2; border-right-color: #fee2e2; border-bottom-color: #fee2e2; border-left-color: #fee2e2;", + "border-red-200": "--tw-border-opacity: 1; border-top-color: #fecaca; border-right-color: #fecaca; border-bottom-color: #fecaca; border-left-color: #fecaca;", + "border-red-300": "--tw-border-opacity: 1; border-top-color: #fca5a5; border-right-color: #fca5a5; border-bottom-color: #fca5a5; border-left-color: #fca5a5;", + "border-red-400": "--tw-border-opacity: 1; border-top-color: #f87171; border-right-color: #f87171; border-bottom-color: #f87171; border-left-color: #f87171;", + "border-red-500": "--tw-border-opacity: 1; border-top-color: #ef4444; border-right-color: #ef4444; border-bottom-color: #ef4444; border-left-color: #ef4444;", + "border-red-600": "--tw-border-opacity: 1; border-top-color: #dc2626; border-right-color: #dc2626; border-bottom-color: #dc2626; border-left-color: #dc2626;", + "border-red-700": "--tw-border-opacity: 1; border-top-color: #b91c1c; border-right-color: #b91c1c; border-bottom-color: #b91c1c; border-left-color: #b91c1c;", + "border-red-800": "--tw-border-opacity: 1; border-top-color: #991b1b; border-right-color: #991b1b; border-bottom-color: #991b1b; border-left-color: #991b1b;", + "border-red-900": "--tw-border-opacity: 1; border-top-color: #7f1d1d; border-right-color: #7f1d1d; border-bottom-color: #7f1d1d; border-left-color: #7f1d1d;", + "border-yellow-50": "--tw-border-opacity: 1; border-top-color: #fefce8; border-right-color: #fefce8; border-bottom-color: #fefce8; border-left-color: #fefce8;", + "border-yellow-100": "--tw-border-opacity: 1; border-top-color: #fef9c3; border-right-color: #fef9c3; border-bottom-color: #fef9c3; border-left-color: #fef9c3;", + "border-yellow-200": "--tw-border-opacity: 1; border-top-color: #fef08a; border-right-color: #fef08a; border-bottom-color: #fef08a; border-left-color: #fef08a;", + "border-yellow-300": "--tw-border-opacity: 1; border-top-color: #fde047; border-right-color: #fde047; border-bottom-color: #fde047; border-left-color: #fde047;", + "border-yellow-400": "--tw-border-opacity: 1; border-top-color: #facc15; border-right-color: #facc15; border-bottom-color: #facc15; border-left-color: #facc15;", + "border-yellow-500": "--tw-border-opacity: 1; border-top-color: #eab308; border-right-color: #eab308; border-bottom-color: #eab308; border-left-color: #eab308;", + "border-yellow-600": "--tw-border-opacity: 1; border-top-color: #ca8a04; border-right-color: #ca8a04; border-bottom-color: #ca8a04; border-left-color: #ca8a04;", + "border-yellow-700": "--tw-border-opacity: 1; border-top-color: #a16207; border-right-color: #a16207; border-bottom-color: #a16207; border-left-color: #a16207;", + "border-yellow-800": "--tw-border-opacity: 1; border-top-color: #854d0e; border-right-color: #854d0e; border-bottom-color: #854d0e; border-left-color: #854d0e;", + "border-yellow-900": "--tw-border-opacity: 1; border-top-color: #713f12; border-right-color: #713f12; border-bottom-color: #713f12; border-left-color: #713f12;", + "border-green-50": "--tw-border-opacity: 1; border-top-color: #f0fdf4; border-right-color: #f0fdf4; border-bottom-color: #f0fdf4; border-left-color: #f0fdf4;", + "border-green-100": "--tw-border-opacity: 1; border-top-color: #dcfce7; border-right-color: #dcfce7; border-bottom-color: #dcfce7; border-left-color: #dcfce7;", + "border-green-200": "--tw-border-opacity: 1; border-top-color: #bbf7d0; border-right-color: #bbf7d0; border-bottom-color: #bbf7d0; border-left-color: #bbf7d0;", + "border-green-300": "--tw-border-opacity: 1; border-top-color: #86efac; border-right-color: #86efac; border-bottom-color: #86efac; border-left-color: #86efac;", + "border-green-400": "--tw-border-opacity: 1; border-top-color: #4ade80; border-right-color: #4ade80; border-bottom-color: #4ade80; border-left-color: #4ade80;", + "border-green-500": "--tw-border-opacity: 1; border-top-color: #22c55e; border-right-color: #22c55e; border-bottom-color: #22c55e; border-left-color: #22c55e;", + "border-green-600": "--tw-border-opacity: 1; border-top-color: #16a34a; border-right-color: #16a34a; border-bottom-color: #16a34a; border-left-color: #16a34a;", + "border-green-700": "--tw-border-opacity: 1; border-top-color: #15803d; border-right-color: #15803d; border-bottom-color: #15803d; border-left-color: #15803d;", + "border-green-800": "--tw-border-opacity: 1; border-top-color: #166534; border-right-color: #166534; border-bottom-color: #166534; border-left-color: #166534;", + "border-green-900": "--tw-border-opacity: 1; border-top-color: #14532d; border-right-color: #14532d; border-bottom-color: #14532d; border-left-color: #14532d;", + "border-blue-50": "--tw-border-opacity: 1; border-top-color: #eff6ff; border-right-color: #eff6ff; border-bottom-color: #eff6ff; border-left-color: #eff6ff;", + "border-blue-100": "--tw-border-opacity: 1; border-top-color: #dbeafe; border-right-color: #dbeafe; border-bottom-color: #dbeafe; border-left-color: #dbeafe;", + "border-blue-200": "--tw-border-opacity: 1; border-top-color: #bfdbfe; border-right-color: #bfdbfe; border-bottom-color: #bfdbfe; border-left-color: #bfdbfe;", + "border-blue-300": "--tw-border-opacity: 1; border-top-color: #93c5fd; border-right-color: #93c5fd; border-bottom-color: #93c5fd; border-left-color: #93c5fd;", + "border-blue-400": "--tw-border-opacity: 1; border-top-color: #60a5fa; border-right-color: #60a5fa; border-bottom-color: #60a5fa; border-left-color: #60a5fa;", + "border-blue-500": "--tw-border-opacity: 1; border-top-color: #3b82f6; border-right-color: #3b82f6; border-bottom-color: #3b82f6; border-left-color: #3b82f6;", + "border-blue-600": "--tw-border-opacity: 1; border-top-color: #2563eb; border-right-color: #2563eb; border-bottom-color: #2563eb; border-left-color: #2563eb;", + "border-blue-700": "--tw-border-opacity: 1; border-top-color: #1d4ed8; border-right-color: #1d4ed8; border-bottom-color: #1d4ed8; border-left-color: #1d4ed8;", + "border-blue-800": "--tw-border-opacity: 1; border-top-color: #1e40af; border-right-color: #1e40af; border-bottom-color: #1e40af; border-left-color: #1e40af;", + "border-blue-900": "--tw-border-opacity: 1; border-top-color: #1e3a8a; border-right-color: #1e3a8a; border-bottom-color: #1e3a8a; border-left-color: #1e3a8a;", + "border-indigo-50": "--tw-border-opacity: 1; border-top-color: #eef2ff; border-right-color: #eef2ff; border-bottom-color: #eef2ff; border-left-color: #eef2ff;", + "border-indigo-100": "--tw-border-opacity: 1; border-top-color: #e0e7ff; border-right-color: #e0e7ff; border-bottom-color: #e0e7ff; border-left-color: #e0e7ff;", + "border-indigo-200": "--tw-border-opacity: 1; border-top-color: #c7d2fe; border-right-color: #c7d2fe; border-bottom-color: #c7d2fe; border-left-color: #c7d2fe;", + "border-indigo-300": "--tw-border-opacity: 1; border-top-color: #a5b4fc; border-right-color: #a5b4fc; border-bottom-color: #a5b4fc; border-left-color: #a5b4fc;", + "border-indigo-400": "--tw-border-opacity: 1; border-top-color: #818cf8; border-right-color: #818cf8; border-bottom-color: #818cf8; border-left-color: #818cf8;", + "border-indigo-500": "--tw-border-opacity: 1; border-top-color: #6366f1; border-right-color: #6366f1; border-bottom-color: #6366f1; border-left-color: #6366f1;", + "border-indigo-600": "--tw-border-opacity: 1; border-top-color: #4f46e5; border-right-color: #4f46e5; border-bottom-color: #4f46e5; border-left-color: #4f46e5;", + "border-indigo-700": "--tw-border-opacity: 1; border-top-color: #4338ca; border-right-color: #4338ca; border-bottom-color: #4338ca; border-left-color: #4338ca;", + "border-indigo-800": "--tw-border-opacity: 1; border-top-color: #3730a3; border-right-color: #3730a3; border-bottom-color: #3730a3; border-left-color: #3730a3;", + "border-indigo-900": "--tw-border-opacity: 1; border-top-color: #312e81; border-right-color: #312e81; border-bottom-color: #312e81; border-left-color: #312e81;", + "border-purple-50": "--tw-border-opacity: 1; border-top-color: #f5f3ff; border-right-color: #f5f3ff; border-bottom-color: #f5f3ff; border-left-color: #f5f3ff;", + "border-purple-100": "--tw-border-opacity: 1; border-top-color: #ede9fe; border-right-color: #ede9fe; border-bottom-color: #ede9fe; border-left-color: #ede9fe;", + "border-purple-200": "--tw-border-opacity: 1; border-top-color: #ddd6fe; border-right-color: #ddd6fe; border-bottom-color: #ddd6fe; border-left-color: #ddd6fe;", + "border-purple-300": "--tw-border-opacity: 1; border-top-color: #c4b5fd; border-right-color: #c4b5fd; border-bottom-color: #c4b5fd; border-left-color: #c4b5fd;", + "border-purple-400": "--tw-border-opacity: 1; border-top-color: #a78bfa; border-right-color: #a78bfa; border-bottom-color: #a78bfa; border-left-color: #a78bfa;", + "border-purple-500": "--tw-border-opacity: 1; border-top-color: #8b5cf6; border-right-color: #8b5cf6; border-bottom-color: #8b5cf6; border-left-color: #8b5cf6;", + "border-purple-600": "--tw-border-opacity: 1; border-top-color: #7c3aed; border-right-color: #7c3aed; border-bottom-color: #7c3aed; border-left-color: #7c3aed;", + "border-purple-700": "--tw-border-opacity: 1; border-top-color: #6d28d9; border-right-color: #6d28d9; border-bottom-color: #6d28d9; border-left-color: #6d28d9;", + "border-purple-800": "--tw-border-opacity: 1; border-top-color: #5b21b6; border-right-color: #5b21b6; border-bottom-color: #5b21b6; border-left-color: #5b21b6;", + "border-purple-900": "--tw-border-opacity: 1; border-top-color: #4c1d95; border-right-color: #4c1d95; border-bottom-color: #4c1d95; border-left-color: #4c1d95;", + "border-pink-50": "--tw-border-opacity: 1; border-top-color: #fdf2f8; border-right-color: #fdf2f8; border-bottom-color: #fdf2f8; border-left-color: #fdf2f8;", + "border-pink-100": "--tw-border-opacity: 1; border-top-color: #fce7f3; border-right-color: #fce7f3; border-bottom-color: #fce7f3; border-left-color: #fce7f3;", + "border-pink-200": "--tw-border-opacity: 1; border-top-color: #fbcfe8; border-right-color: #fbcfe8; border-bottom-color: #fbcfe8; border-left-color: #fbcfe8;", + "border-pink-300": "--tw-border-opacity: 1; border-top-color: #f9a8d4; border-right-color: #f9a8d4; border-bottom-color: #f9a8d4; border-left-color: #f9a8d4;", + "border-pink-400": "--tw-border-opacity: 1; border-top-color: #f472b6; border-right-color: #f472b6; border-bottom-color: #f472b6; border-left-color: #f472b6;", + "border-pink-500": "--tw-border-opacity: 1; border-top-color: #ec4899; border-right-color: #ec4899; border-bottom-color: #ec4899; border-left-color: #ec4899;", + "border-pink-600": "--tw-border-opacity: 1; border-top-color: #db2777; border-right-color: #db2777; border-bottom-color: #db2777; border-left-color: #db2777;", + "border-pink-700": "--tw-border-opacity: 1; border-top-color: #be185d; border-right-color: #be185d; border-bottom-color: #be185d; border-left-color: #be185d;", + "border-pink-800": "--tw-border-opacity: 1; border-top-color: #9d174d; border-right-color: #9d174d; border-bottom-color: #9d174d; border-left-color: #9d174d;", + "border-pink-900": "--tw-border-opacity: 1; border-top-color: #831843; border-right-color: #831843; border-bottom-color: #831843; border-left-color: #831843;", + "border-opacity-0": "--tw-border-opacity: undefined;", + "border-opacity-5": "--tw-border-opacity: undefined;", + "border-opacity-10": "--tw-border-opacity: undefined;", + "border-opacity-20": "--tw-border-opacity: undefined;", + "border-opacity-25": "--tw-border-opacity: undefined;", + "border-opacity-30": "--tw-border-opacity: undefined;", + "border-opacity-40": "--tw-border-opacity: undefined;", + "border-opacity-50": "--tw-border-opacity: undefined;", + "border-opacity-60": "--tw-border-opacity: undefined;", + "border-opacity-70": "--tw-border-opacity: undefined;", + "border-opacity-75": "--tw-border-opacity: undefined;", + "border-opacity-80": "--tw-border-opacity: undefined;", + "border-opacity-90": "--tw-border-opacity: undefined;", + "border-opacity-95": "--tw-border-opacity: undefined;", + "border-opacity-100": "--tw-border-opacity: undefined;", + "bg-transparent": "background-color: transparent;", + "bg-current": "background-color: currentcolor;", + "bg-black": "--tw-bg-opacity: undefined; background-color: rgba(0,0,0,var(--tw-bg-opacity));", + "bg-white": "--tw-bg-opacity: undefined; background-color: rgba(255,255,255,var(--tw-bg-opacity));", + "bg-gray-50": "--tw-bg-opacity: undefined; background-color: rgba(249,250,251,var(--tw-bg-opacity));", + "bg-gray-100": "--tw-bg-opacity: undefined; background-color: rgba(243,244,246,var(--tw-bg-opacity));", + "bg-gray-200": "--tw-bg-opacity: undefined; background-color: rgba(229,231,235,var(--tw-bg-opacity));", + "bg-gray-300": "--tw-bg-opacity: undefined; background-color: rgba(209,213,219,var(--tw-bg-opacity));", + "bg-gray-400": "--tw-bg-opacity: undefined; background-color: rgba(156,163,175,var(--tw-bg-opacity));", + "bg-gray-500": "--tw-bg-opacity: undefined; background-color: rgba(107,114,128,var(--tw-bg-opacity));", + "bg-gray-600": "--tw-bg-opacity: undefined; background-color: rgba(75,85,99,var(--tw-bg-opacity));", + "bg-gray-700": "--tw-bg-opacity: undefined; background-color: rgba(55,65,81,var(--tw-bg-opacity));", + "bg-gray-800": "--tw-bg-opacity: undefined; background-color: rgba(31,41,55,var(--tw-bg-opacity));", + "bg-gray-900": "--tw-bg-opacity: undefined; background-color: rgba(17,24,39,var(--tw-bg-opacity));", + "bg-red-50": "--tw-bg-opacity: undefined; background-color: rgba(254,242,242,var(--tw-bg-opacity));", + "bg-red-100": "--tw-bg-opacity: undefined; background-color: rgba(254,226,226,var(--tw-bg-opacity));", + "bg-red-200": "--tw-bg-opacity: undefined; background-color: rgba(254,202,202,var(--tw-bg-opacity));", + "bg-red-300": "--tw-bg-opacity: undefined; background-color: rgba(252,165,165,var(--tw-bg-opacity));", + "bg-red-400": "--tw-bg-opacity: undefined; background-color: rgba(248,113,113,var(--tw-bg-opacity));", + "bg-red-500": "--tw-bg-opacity: undefined; background-color: rgba(239,68,68,var(--tw-bg-opacity));", + "bg-red-600": "--tw-bg-opacity: undefined; background-color: rgba(220,38,38,var(--tw-bg-opacity));", + "bg-red-700": "--tw-bg-opacity: undefined; background-color: rgba(185,28,28,var(--tw-bg-opacity));", + "bg-red-800": "--tw-bg-opacity: undefined; background-color: rgba(153,27,27,var(--tw-bg-opacity));", + "bg-red-900": "--tw-bg-opacity: undefined; background-color: rgba(127,29,29,var(--tw-bg-opacity));", + "bg-yellow-50": "--tw-bg-opacity: undefined; background-color: rgba(255,251,235,var(--tw-bg-opacity));", + "bg-yellow-100": "--tw-bg-opacity: undefined; background-color: rgba(254,243,199,var(--tw-bg-opacity));", + "bg-yellow-200": "--tw-bg-opacity: undefined; background-color: rgba(253,230,138,var(--tw-bg-opacity));", + "bg-yellow-300": "--tw-bg-opacity: undefined; background-color: rgba(252,211,77,var(--tw-bg-opacity));", + "bg-yellow-400": "--tw-bg-opacity: undefined; background-color: rgba(251,191,36,var(--tw-bg-opacity));", + "bg-yellow-500": "--tw-bg-opacity: undefined; background-color: rgba(245,158,11,var(--tw-bg-opacity));", + "bg-yellow-600": "--tw-bg-opacity: undefined; background-color: rgba(217,119,6,var(--tw-bg-opacity));", + "bg-yellow-700": "--tw-bg-opacity: undefined; background-color: rgba(180,83,9,var(--tw-bg-opacity));", + "bg-yellow-800": "--tw-bg-opacity: undefined; background-color: rgba(146,64,14,var(--tw-bg-opacity));", + "bg-yellow-900": "--tw-bg-opacity: undefined; background-color: rgba(120,53,15,var(--tw-bg-opacity));", + "bg-green-50": "--tw-bg-opacity: undefined; background-color: rgba(236,253,245,var(--tw-bg-opacity));", + "bg-green-100": "--tw-bg-opacity: undefined; background-color: rgba(209,250,229,var(--tw-bg-opacity));", + "bg-green-200": "--tw-bg-opacity: undefined; background-color: rgba(167,243,208,var(--tw-bg-opacity));", + "bg-green-300": "--tw-bg-opacity: undefined; background-color: rgba(110,231,183,var(--tw-bg-opacity));", + "bg-green-400": "--tw-bg-opacity: undefined; background-color: rgba(52,211,153,var(--tw-bg-opacity));", + "bg-green-500": "--tw-bg-opacity: undefined; background-color: rgba(16,185,129,var(--tw-bg-opacity));", + "bg-green-600": "--tw-bg-opacity: undefined; background-color: rgba(5,150,105,var(--tw-bg-opacity));", + "bg-green-700": "--tw-bg-opacity: undefined; background-color: rgba(4,120,87,var(--tw-bg-opacity));", + "bg-green-800": "--tw-bg-opacity: undefined; background-color: rgba(6,95,70,var(--tw-bg-opacity));", + "bg-green-900": "--tw-bg-opacity: undefined; background-color: rgba(6,78,59,var(--tw-bg-opacity));", + "bg-blue-50": "--tw-bg-opacity: undefined; background-color: rgba(239,246,255,var(--tw-bg-opacity));", + "bg-blue-100": "--tw-bg-opacity: undefined; background-color: rgba(219,234,254,var(--tw-bg-opacity));", + "bg-blue-200": "--tw-bg-opacity: undefined; background-color: rgba(191,219,254,var(--tw-bg-opacity));", + "bg-blue-300": "--tw-bg-opacity: undefined; background-color: rgba(147,197,253,var(--tw-bg-opacity));", + "bg-blue-400": "--tw-bg-opacity: undefined; background-color: rgba(96,165,250,var(--tw-bg-opacity));", + "bg-blue-500": "--tw-bg-opacity: undefined; background-color: rgba(59,130,246,var(--tw-bg-opacity));", + "bg-blue-600": "--tw-bg-opacity: undefined; background-color: rgba(37,99,235,var(--tw-bg-opacity));", + "bg-blue-700": "--tw-bg-opacity: undefined; background-color: rgba(29,78,216,var(--tw-bg-opacity));", + "bg-blue-800": "--tw-bg-opacity: undefined; background-color: rgba(30,64,175,var(--tw-bg-opacity));", + "bg-blue-900": "--tw-bg-opacity: undefined; background-color: rgba(30,58,138,var(--tw-bg-opacity));", + "bg-indigo-50": "--tw-bg-opacity: undefined; background-color: rgba(238,242,255,var(--tw-bg-opacity));", + "bg-indigo-100": "--tw-bg-opacity: undefined; background-color: rgba(224,231,255,var(--tw-bg-opacity));", + "bg-indigo-200": "--tw-bg-opacity: undefined; background-color: rgba(199,210,254,var(--tw-bg-opacity));", + "bg-indigo-300": "--tw-bg-opacity: undefined; background-color: rgba(165,180,252,var(--tw-bg-opacity));", + "bg-indigo-400": "--tw-bg-opacity: undefined; background-color: rgba(129,140,248,var(--tw-bg-opacity));", + "bg-indigo-500": "--tw-bg-opacity: undefined; background-color: rgba(99,102,241,var(--tw-bg-opacity));", + "bg-indigo-600": "--tw-bg-opacity: undefined; background-color: rgba(79,70,229,var(--tw-bg-opacity));", + "bg-indigo-700": "--tw-bg-opacity: undefined; background-color: rgba(67,56,202,var(--tw-bg-opacity));", + "bg-indigo-800": "--tw-bg-opacity: undefined; background-color: rgba(55,48,163,var(--tw-bg-opacity));", + "bg-indigo-900": "--tw-bg-opacity: undefined; background-color: rgba(49,46,129,var(--tw-bg-opacity));", + "bg-purple-50": "--tw-bg-opacity: undefined; background-color: rgba(245,243,255,var(--tw-bg-opacity));", + "bg-purple-100": "--tw-bg-opacity: undefined; background-color: rgba(237,233,254,var(--tw-bg-opacity));", + "bg-purple-200": "--tw-bg-opacity: undefined; background-color: rgba(221,214,254,var(--tw-bg-opacity));", + "bg-purple-300": "--tw-bg-opacity: undefined; background-color: rgba(196,181,253,var(--tw-bg-opacity));", + "bg-purple-400": "--tw-bg-opacity: undefined; background-color: rgba(167,139,250,var(--tw-bg-opacity));", + "bg-purple-500": "--tw-bg-opacity: undefined; background-color: rgba(139,92,246,var(--tw-bg-opacity));", + "bg-purple-600": "--tw-bg-opacity: undefined; background-color: rgba(124,58,237,var(--tw-bg-opacity));", + "bg-purple-700": "--tw-bg-opacity: undefined; background-color: rgba(109,40,217,var(--tw-bg-opacity));", + "bg-purple-800": "--tw-bg-opacity: undefined; background-color: rgba(91,33,182,var(--tw-bg-opacity));", + "bg-purple-900": "--tw-bg-opacity: undefined; background-color: rgba(76,29,149,var(--tw-bg-opacity));", + "bg-pink-50": "--tw-bg-opacity: undefined; background-color: rgba(253,242,248,var(--tw-bg-opacity));", + "bg-pink-100": "--tw-bg-opacity: undefined; background-color: rgba(252,231,243,var(--tw-bg-opacity));", + "bg-pink-200": "--tw-bg-opacity: undefined; background-color: rgba(251,207,232,var(--tw-bg-opacity));", + "bg-pink-300": "--tw-bg-opacity: undefined; background-color: rgba(249,168,212,var(--tw-bg-opacity));", + "bg-pink-400": "--tw-bg-opacity: undefined; background-color: rgba(244,114,182,var(--tw-bg-opacity));", + "bg-pink-500": "--tw-bg-opacity: undefined; background-color: rgba(236,72,153,var(--tw-bg-opacity));", + "bg-pink-600": "--tw-bg-opacity: undefined; background-color: rgba(219,39,119,var(--tw-bg-opacity));", + "bg-pink-700": "--tw-bg-opacity: undefined; background-color: rgba(190,24,93,var(--tw-bg-opacity));", + "bg-pink-800": "--tw-bg-opacity: undefined; background-color: rgba(157,23,77,var(--tw-bg-opacity));", + "bg-pink-900": "--tw-bg-opacity: undefined; background-color: rgba(131,24,67,var(--tw-bg-opacity));", + "bg-opacity-0": "--tw-bg-opacity: undefined;", + "bg-opacity-5": "--tw-bg-opacity: undefined;", + "bg-opacity-10": "--tw-bg-opacity: undefined;", + "bg-opacity-20": "--tw-bg-opacity: undefined;", + "bg-opacity-25": "--tw-bg-opacity: undefined;", + "bg-opacity-30": "--tw-bg-opacity: undefined;", + "bg-opacity-40": "--tw-bg-opacity: undefined;", + "bg-opacity-50": "--tw-bg-opacity: undefined;", + "bg-opacity-60": "--tw-bg-opacity: undefined;", + "bg-opacity-70": "--tw-bg-opacity: undefined;", + "bg-opacity-75": "--tw-bg-opacity: undefined;", + "bg-opacity-80": "--tw-bg-opacity: undefined;", + "bg-opacity-90": "--tw-bg-opacity: undefined;", + "bg-opacity-95": "--tw-bg-opacity: undefined;", + "bg-opacity-100": "--tw-bg-opacity: undefined;", + "bg-none": "background-image: none;", + "bg-gradient-to-t": "background-image: linear-gradient(to top,var(--tw-gradient-stops));", + "bg-gradient-to-tr": "background-image: linear-gradient(to top right,var(--tw-gradient-stops));", + "bg-gradient-to-r": "background-image: linear-gradient(to right,var(--tw-gradient-stops));", + "bg-gradient-to-br": "background-image: linear-gradient(to bottom right,var(--tw-gradient-stops));", + "bg-gradient-to-b": "background-image: linear-gradient(to bottom,var(--tw-gradient-stops));", + "bg-gradient-to-bl": "background-image: linear-gradient(to bottom left,var(--tw-gradient-stops));", + "bg-gradient-to-l": "background-image: linear-gradient(to left,var(--tw-gradient-stops));", + "bg-gradient-to-tl": "background-image: linear-gradient(to top left,var(--tw-gradient-stops));", + "from-transparent": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-current": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-black": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-white": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-50": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-100": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-200": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-300": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-400": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-500": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-600": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-700": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-800": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-gray-900": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-50": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-100": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-200": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-300": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-400": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-500": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-600": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-700": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-800": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-red-900": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-50": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-100": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-200": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-300": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-400": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-500": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-600": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-700": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-800": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-yellow-900": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-50": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-100": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-200": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-300": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-400": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-500": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-600": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-700": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-800": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-green-900": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-50": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-100": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-200": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-300": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-400": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-500": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-600": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-700": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-800": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-blue-900": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-50": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-100": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-200": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-300": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-400": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-500": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-600": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-700": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-800": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-indigo-900": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-50": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-100": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-200": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-300": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-400": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-500": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-600": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-700": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-800": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-purple-900": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-50": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-100": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-200": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-300": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-400": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-500": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-600": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-700": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-800": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "from-pink-900": "--tw-gradient-from: undefined; --tw-gradient-stops: undefined;", + "via-transparent": "--tw-gradient-stops: undefined;", + "via-current": "--tw-gradient-stops: undefined;", + "via-black": "--tw-gradient-stops: undefined;", + "via-white": "--tw-gradient-stops: undefined;", + "via-gray-50": "--tw-gradient-stops: undefined;", + "via-gray-100": "--tw-gradient-stops: undefined;", + "via-gray-200": "--tw-gradient-stops: undefined;", + "via-gray-300": "--tw-gradient-stops: undefined;", + "via-gray-400": "--tw-gradient-stops: undefined;", + "via-gray-500": "--tw-gradient-stops: undefined;", + "via-gray-600": "--tw-gradient-stops: undefined;", + "via-gray-700": "--tw-gradient-stops: undefined;", + "via-gray-800": "--tw-gradient-stops: undefined;", + "via-gray-900": "--tw-gradient-stops: undefined;", + "via-red-50": "--tw-gradient-stops: undefined;", + "via-red-100": "--tw-gradient-stops: undefined;", + "via-red-200": "--tw-gradient-stops: undefined;", + "via-red-300": "--tw-gradient-stops: undefined;", + "via-red-400": "--tw-gradient-stops: undefined;", + "via-red-500": "--tw-gradient-stops: undefined;", + "via-red-600": "--tw-gradient-stops: undefined;", + "via-red-700": "--tw-gradient-stops: undefined;", + "via-red-800": "--tw-gradient-stops: undefined;", + "via-red-900": "--tw-gradient-stops: undefined;", + "via-yellow-50": "--tw-gradient-stops: undefined;", + "via-yellow-100": "--tw-gradient-stops: undefined;", + "via-yellow-200": "--tw-gradient-stops: undefined;", + "via-yellow-300": "--tw-gradient-stops: undefined;", + "via-yellow-400": "--tw-gradient-stops: undefined;", + "via-yellow-500": "--tw-gradient-stops: undefined;", + "via-yellow-600": "--tw-gradient-stops: undefined;", + "via-yellow-700": "--tw-gradient-stops: undefined;", + "via-yellow-800": "--tw-gradient-stops: undefined;", + "via-yellow-900": "--tw-gradient-stops: undefined;", + "via-green-50": "--tw-gradient-stops: undefined;", + "via-green-100": "--tw-gradient-stops: undefined;", + "via-green-200": "--tw-gradient-stops: undefined;", + "via-green-300": "--tw-gradient-stops: undefined;", + "via-green-400": "--tw-gradient-stops: undefined;", + "via-green-500": "--tw-gradient-stops: undefined;", + "via-green-600": "--tw-gradient-stops: undefined;", + "via-green-700": "--tw-gradient-stops: undefined;", + "via-green-800": "--tw-gradient-stops: undefined;", + "via-green-900": "--tw-gradient-stops: undefined;", + "via-blue-50": "--tw-gradient-stops: undefined;", + "via-blue-100": "--tw-gradient-stops: undefined;", + "via-blue-200": "--tw-gradient-stops: undefined;", + "via-blue-300": "--tw-gradient-stops: undefined;", + "via-blue-400": "--tw-gradient-stops: undefined;", + "via-blue-500": "--tw-gradient-stops: undefined;", + "via-blue-600": "--tw-gradient-stops: undefined;", + "via-blue-700": "--tw-gradient-stops: undefined;", + "via-blue-800": "--tw-gradient-stops: undefined;", + "via-blue-900": "--tw-gradient-stops: undefined;", + "via-indigo-50": "--tw-gradient-stops: undefined;", + "via-indigo-100": "--tw-gradient-stops: undefined;", + "via-indigo-200": "--tw-gradient-stops: undefined;", + "via-indigo-300": "--tw-gradient-stops: undefined;", + "via-indigo-400": "--tw-gradient-stops: undefined;", + "via-indigo-500": "--tw-gradient-stops: undefined;", + "via-indigo-600": "--tw-gradient-stops: undefined;", + "via-indigo-700": "--tw-gradient-stops: undefined;", + "via-indigo-800": "--tw-gradient-stops: undefined;", + "via-indigo-900": "--tw-gradient-stops: undefined;", + "via-purple-50": "--tw-gradient-stops: undefined;", + "via-purple-100": "--tw-gradient-stops: undefined;", + "via-purple-200": "--tw-gradient-stops: undefined;", + "via-purple-300": "--tw-gradient-stops: undefined;", + "via-purple-400": "--tw-gradient-stops: undefined;", + "via-purple-500": "--tw-gradient-stops: undefined;", + "via-purple-600": "--tw-gradient-stops: undefined;", + "via-purple-700": "--tw-gradient-stops: undefined;", + "via-purple-800": "--tw-gradient-stops: undefined;", + "via-purple-900": "--tw-gradient-stops: undefined;", + "via-pink-50": "--tw-gradient-stops: undefined;", + "via-pink-100": "--tw-gradient-stops: undefined;", + "via-pink-200": "--tw-gradient-stops: undefined;", + "via-pink-300": "--tw-gradient-stops: undefined;", + "via-pink-400": "--tw-gradient-stops: undefined;", + "via-pink-500": "--tw-gradient-stops: undefined;", + "via-pink-600": "--tw-gradient-stops: undefined;", + "via-pink-700": "--tw-gradient-stops: undefined;", + "via-pink-800": "--tw-gradient-stops: undefined;", + "via-pink-900": "--tw-gradient-stops: undefined;", + "to-transparent": "--tw-gradient-to: undefined;", + "to-current": "--tw-gradient-to: undefined;", + "to-black": "--tw-gradient-to: undefined;", + "to-white": "--tw-gradient-to: undefined;", + "to-gray-50": "--tw-gradient-to: undefined;", + "to-gray-100": "--tw-gradient-to: undefined;", + "to-gray-200": "--tw-gradient-to: undefined;", + "to-gray-300": "--tw-gradient-to: undefined;", + "to-gray-400": "--tw-gradient-to: undefined;", + "to-gray-500": "--tw-gradient-to: undefined;", + "to-gray-600": "--tw-gradient-to: undefined;", + "to-gray-700": "--tw-gradient-to: undefined;", + "to-gray-800": "--tw-gradient-to: undefined;", + "to-gray-900": "--tw-gradient-to: undefined;", + "to-red-50": "--tw-gradient-to: undefined;", + "to-red-100": "--tw-gradient-to: undefined;", + "to-red-200": "--tw-gradient-to: undefined;", + "to-red-300": "--tw-gradient-to: undefined;", + "to-red-400": "--tw-gradient-to: undefined;", + "to-red-500": "--tw-gradient-to: undefined;", + "to-red-600": "--tw-gradient-to: undefined;", + "to-red-700": "--tw-gradient-to: undefined;", + "to-red-800": "--tw-gradient-to: undefined;", + "to-red-900": "--tw-gradient-to: undefined;", + "to-yellow-50": "--tw-gradient-to: undefined;", + "to-yellow-100": "--tw-gradient-to: undefined;", + "to-yellow-200": "--tw-gradient-to: undefined;", + "to-yellow-300": "--tw-gradient-to: undefined;", + "to-yellow-400": "--tw-gradient-to: undefined;", + "to-yellow-500": "--tw-gradient-to: undefined;", + "to-yellow-600": "--tw-gradient-to: undefined;", + "to-yellow-700": "--tw-gradient-to: undefined;", + "to-yellow-800": "--tw-gradient-to: undefined;", + "to-yellow-900": "--tw-gradient-to: undefined;", + "to-green-50": "--tw-gradient-to: undefined;", + "to-green-100": "--tw-gradient-to: undefined;", + "to-green-200": "--tw-gradient-to: undefined;", + "to-green-300": "--tw-gradient-to: undefined;", + "to-green-400": "--tw-gradient-to: undefined;", + "to-green-500": "--tw-gradient-to: undefined;", + "to-green-600": "--tw-gradient-to: undefined;", + "to-green-700": "--tw-gradient-to: undefined;", + "to-green-800": "--tw-gradient-to: undefined;", + "to-green-900": "--tw-gradient-to: undefined;", + "to-blue-50": "--tw-gradient-to: undefined;", + "to-blue-100": "--tw-gradient-to: undefined;", + "to-blue-200": "--tw-gradient-to: undefined;", + "to-blue-300": "--tw-gradient-to: undefined;", + "to-blue-400": "--tw-gradient-to: undefined;", + "to-blue-500": "--tw-gradient-to: undefined;", + "to-blue-600": "--tw-gradient-to: undefined;", + "to-blue-700": "--tw-gradient-to: undefined;", + "to-blue-800": "--tw-gradient-to: undefined;", + "to-blue-900": "--tw-gradient-to: undefined;", + "to-indigo-50": "--tw-gradient-to: undefined;", + "to-indigo-100": "--tw-gradient-to: undefined;", + "to-indigo-200": "--tw-gradient-to: undefined;", + "to-indigo-300": "--tw-gradient-to: undefined;", + "to-indigo-400": "--tw-gradient-to: undefined;", + "to-indigo-500": "--tw-gradient-to: undefined;", + "to-indigo-600": "--tw-gradient-to: undefined;", + "to-indigo-700": "--tw-gradient-to: undefined;", + "to-indigo-800": "--tw-gradient-to: undefined;", + "to-indigo-900": "--tw-gradient-to: undefined;", + "to-purple-50": "--tw-gradient-to: undefined;", + "to-purple-100": "--tw-gradient-to: undefined;", + "to-purple-200": "--tw-gradient-to: undefined;", + "to-purple-300": "--tw-gradient-to: undefined;", + "to-purple-400": "--tw-gradient-to: undefined;", + "to-purple-500": "--tw-gradient-to: undefined;", + "to-purple-600": "--tw-gradient-to: undefined;", + "to-purple-700": "--tw-gradient-to: undefined;", + "to-purple-800": "--tw-gradient-to: undefined;", + "to-purple-900": "--tw-gradient-to: undefined;", + "to-pink-50": "--tw-gradient-to: undefined;", + "to-pink-100": "--tw-gradient-to: undefined;", + "to-pink-200": "--tw-gradient-to: undefined;", + "to-pink-300": "--tw-gradient-to: undefined;", + "to-pink-400": "--tw-gradient-to: undefined;", + "to-pink-500": "--tw-gradient-to: undefined;", + "to-pink-600": "--tw-gradient-to: undefined;", + "to-pink-700": "--tw-gradient-to: undefined;", + "to-pink-800": "--tw-gradient-to: undefined;", + "to-pink-900": "--tw-gradient-to: undefined;", + "decoration-slice": "-webkit-box-decoration-break: slice;", + "decoration-clone": "-webkit-box-decoration-break: clone;", + "bg-auto": "background-size: auto;", + "bg-cover": "background-size: cover;", + "bg-contain": "background-size: contain;", + "bg-fixed": "background-attachment: fixed;", + "bg-local": "background-attachment: local;", + "bg-scroll": "background-attachment: scroll;", + "bg-clip-border": "background-clip: border-box;", + "bg-clip-padding": "background-clip: padding-box;", + "bg-clip-content": "background-clip: content-box;", + "bg-clip-text": "background-clip: text;", + "bg-bottom": "background-position-x: center; background-position-y: bottom;", + "bg-center": "background-position-x: center; background-position-y: center;", + "bg-left": "background-position-x: left; background-position-y: center;", + "bg-left-bottom": "background-position-x: left; background-position-y: bottom;", + "bg-left-top": "background-position-x: left; background-position-y: top;", + "bg-right": "background-position-x: right; background-position-y: center;", + "bg-right-bottom": "background-position-x: right; background-position-y: bottom;", + "bg-right-top": "background-position-x: right; background-position-y: top;", + "bg-top": "background-position-x: center; background-position-y: top;", + "bg-repeat": "background-repeat: repeat;", + "bg-no-repeat": "background-repeat: no-repeat;", + "bg-repeat-x": "background-repeat: repeat-x;", + "bg-repeat-y": "background-repeat: repeat-y;", + "bg-repeat-round": "background-repeat: round;", + "bg-repeat-space": "background-repeat: space;", + "bg-origin-border": "background-origin: border-box;", + "bg-origin-padding": "background-origin: padding-box;", + "bg-origin-content": "background-origin: content-box;", + "fill-current": "fill: currentcolor;", + "stroke-current": "stroke: currentcolor;", + "stroke-0": "stroke-width: 0;", + "stroke-1": "stroke-width: 1;", + "stroke-2": "stroke-width: 2;", + "object-contain": "object-fit: contain;", + "object-cover": "object-fit: cover;", + "object-fill": "object-fit: fill;", + "object-none": "object-fit: none;", + "object-scale-down": "object-fit: scale-down;", + "object-bottom": "object-position: center bottom;", + "object-center": "object-position: center center;", + "object-left": "object-position: left center;", + "object-left-bottom": "object-position: left bottom;", + "object-left-top": "object-position: left top;", + "object-right": "object-position: right center;", + "object-right-bottom": "object-position: right bottom;", + "object-right-top": "object-position: right top;", + "object-top": "object-position: center top;", + "p-0": "padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;", + "p-1": "padding-top: 0.25rem; padding-right: 0.25rem; padding-bottom: 0.25rem; padding-left: 0.25rem;", + "p-2": "padding-top: 0.5rem; padding-right: 0.5rem; padding-bottom: 0.5rem; padding-left: 0.5rem;", + "p-3": "padding-top: 0.75rem; padding-right: 0.75rem; padding-bottom: 0.75rem; padding-left: 0.75rem;", + "p-4": "padding-top: 1rem; padding-right: 1rem; padding-bottom: 1rem; padding-left: 1rem;", + "p-5": "padding-top: 1.25rem; padding-right: 1.25rem; padding-bottom: 1.25rem; padding-left: 1.25rem;", + "p-6": "padding-top: 1.5rem; padding-right: 1.5rem; padding-bottom: 1.5rem; padding-left: 1.5rem;", + "p-7": "padding-top: 1.75rem; padding-right: 1.75rem; padding-bottom: 1.75rem; padding-left: 1.75rem;", + "p-8": "padding-top: 2rem; padding-right: 2rem; padding-bottom: 2rem; padding-left: 2rem;", + "p-9": "padding-top: 2.25rem; padding-right: 2.25rem; padding-bottom: 2.25rem; padding-left: 2.25rem;", + "p-10": "padding-top: 2.5rem; padding-right: 2.5rem; padding-bottom: 2.5rem; padding-left: 2.5rem;", + "p-11": "padding-top: 2.75rem; padding-right: 2.75rem; padding-bottom: 2.75rem; padding-left: 2.75rem;", + "p-12": "padding-top: 3rem; padding-right: 3rem; padding-bottom: 3rem; padding-left: 3rem;", + "p-14": "padding-top: 3.5rem; padding-right: 3.5rem; padding-bottom: 3.5rem; padding-left: 3.5rem;", + "p-16": "padding-top: 4rem; padding-right: 4rem; padding-bottom: 4rem; padding-left: 4rem;", + "p-20": "padding-top: 5rem; padding-right: 5rem; padding-bottom: 5rem; padding-left: 5rem;", + "p-24": "padding-top: 6rem; padding-right: 6rem; padding-bottom: 6rem; padding-left: 6rem;", + "p-28": "padding-top: 7rem; padding-right: 7rem; padding-bottom: 7rem; padding-left: 7rem;", + "p-32": "padding-top: 8rem; padding-right: 8rem; padding-bottom: 8rem; padding-left: 8rem;", + "p-36": "padding-top: 9rem; padding-right: 9rem; padding-bottom: 9rem; padding-left: 9rem;", + "p-40": "padding-top: 10rem; padding-right: 10rem; padding-bottom: 10rem; padding-left: 10rem;", + "p-44": "padding-top: 11rem; padding-right: 11rem; padding-bottom: 11rem; padding-left: 11rem;", + "p-48": "padding-top: 12rem; padding-right: 12rem; padding-bottom: 12rem; padding-left: 12rem;", + "p-52": "padding-top: 13rem; padding-right: 13rem; padding-bottom: 13rem; padding-left: 13rem;", + "p-56": "padding-top: 14rem; padding-right: 14rem; padding-bottom: 14rem; padding-left: 14rem;", + "p-60": "padding-top: 15rem; padding-right: 15rem; padding-bottom: 15rem; padding-left: 15rem;", + "p-64": "padding-top: 16rem; padding-right: 16rem; padding-bottom: 16rem; padding-left: 16rem;", + "p-72": "padding-top: 18rem; padding-right: 18rem; padding-bottom: 18rem; padding-left: 18rem;", + "p-80": "padding-top: 20rem; padding-right: 20rem; padding-bottom: 20rem; padding-left: 20rem;", + "p-96": "padding-top: 24rem; padding-right: 24rem; padding-bottom: 24rem; padding-left: 24rem;", + "p-px": "padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px;", + "p-0\\.5": "padding-top: 0.125rem; padding-right: 0.125rem; padding-bottom: 0.125rem; padding-left: 0.125rem;", + "p-1\\.5": "padding-top: 0.375rem; padding-right: 0.375rem; padding-bottom: 0.375rem; padding-left: 0.375rem;", + "p-2\\.5": "padding-top: 0.625rem; padding-right: 0.625rem; padding-bottom: 0.625rem; padding-left: 0.625rem;", + "p-3\\.5": "padding-top: 0.875rem; padding-right: 0.875rem; padding-bottom: 0.875rem; padding-left: 0.875rem;", + "px-0": "padding-left: 0px; padding-right: 0px;", + "px-1": "padding-left: 0.25rem; padding-right: 0.25rem;", + "px-2": "padding-left: 0.5rem; padding-right: 0.5rem;", + "px-3": "padding-left: 0.75rem; padding-right: 0.75rem;", + "px-4": "padding-left: 1rem; padding-right: 1rem;", + "px-5": "padding-left: 1.25rem; padding-right: 1.25rem;", + "px-6": "padding-left: 1.5rem; padding-right: 1.5rem;", + "px-7": "padding-left: 1.75rem; padding-right: 1.75rem;", + "px-8": "padding-left: 2rem; padding-right: 2rem;", + "px-9": "padding-left: 2.25rem; padding-right: 2.25rem;", + "px-10": "padding-left: 2.5rem; padding-right: 2.5rem;", + "px-11": "padding-left: 2.75rem; padding-right: 2.75rem;", + "px-12": "padding-left: 3rem; padding-right: 3rem;", + "px-14": "padding-left: 3.5rem; padding-right: 3.5rem;", + "px-16": "padding-left: 4rem; padding-right: 4rem;", + "px-20": "padding-left: 5rem; padding-right: 5rem;", + "px-24": "padding-left: 6rem; padding-right: 6rem;", + "px-28": "padding-left: 7rem; padding-right: 7rem;", + "px-32": "padding-left: 8rem; padding-right: 8rem;", + "px-36": "padding-left: 9rem; padding-right: 9rem;", + "px-40": "padding-left: 10rem; padding-right: 10rem;", + "px-44": "padding-left: 11rem; padding-right: 11rem;", + "px-48": "padding-left: 12rem; padding-right: 12rem;", + "px-52": "padding-left: 13rem; padding-right: 13rem;", + "px-56": "padding-left: 14rem; padding-right: 14rem;", + "px-60": "padding-left: 15rem; padding-right: 15rem;", + "px-64": "padding-left: 16rem; padding-right: 16rem;", + "px-72": "padding-left: 18rem; padding-right: 18rem;", + "px-80": "padding-left: 20rem; padding-right: 20rem;", + "px-96": "padding-left: 24rem; padding-right: 24rem;", + "px-px": "padding-left: 1px; padding-right: 1px;", + "px-0\\.5": "padding-left: 0.125rem; padding-right: 0.125rem;", + "px-1\\.5": "padding-left: 0.375rem; padding-right: 0.375rem;", + "px-2\\.5": "padding-left: 0.625rem; padding-right: 0.625rem;", + "px-3\\.5": "padding-left: 0.875rem; padding-right: 0.875rem;", + "py-0": "padding-top: 0px; padding-bottom: 0px;", + "py-1": "padding-top: 0.25rem; padding-bottom: 0.25rem;", + "py-2": "padding-top: 0.5rem; padding-bottom: 0.5rem;", + "py-3": "padding-top: 0.75rem; padding-bottom: 0.75rem;", + "py-4": "padding-top: 1rem; padding-bottom: 1rem;", + "py-5": "padding-top: 1.25rem; padding-bottom: 1.25rem;", + "py-6": "padding-top: 1.5rem; padding-bottom: 1.5rem;", + "py-7": "padding-top: 1.75rem; padding-bottom: 1.75rem;", + "py-8": "padding-top: 2rem; padding-bottom: 2rem;", + "py-9": "padding-top: 2.25rem; padding-bottom: 2.25rem;", + "py-10": "padding-top: 2.5rem; padding-bottom: 2.5rem;", + "py-11": "padding-top: 2.75rem; padding-bottom: 2.75rem;", + "py-12": "padding-top: 3rem; padding-bottom: 3rem;", + "py-14": "padding-top: 3.5rem; padding-bottom: 3.5rem;", + "py-16": "padding-top: 4rem; padding-bottom: 4rem;", + "py-20": "padding-top: 5rem; padding-bottom: 5rem;", + "py-24": "padding-top: 6rem; padding-bottom: 6rem;", + "py-28": "padding-top: 7rem; padding-bottom: 7rem;", + "py-32": "padding-top: 8rem; padding-bottom: 8rem;", + "py-36": "padding-top: 9rem; padding-bottom: 9rem;", + "py-40": "padding-top: 10rem; padding-bottom: 10rem;", + "py-44": "padding-top: 11rem; padding-bottom: 11rem;", + "py-48": "padding-top: 12rem; padding-bottom: 12rem;", + "py-52": "padding-top: 13rem; padding-bottom: 13rem;", + "py-56": "padding-top: 14rem; padding-bottom: 14rem;", + "py-60": "padding-top: 15rem; padding-bottom: 15rem;", + "py-64": "padding-top: 16rem; padding-bottom: 16rem;", + "py-72": "padding-top: 18rem; padding-bottom: 18rem;", + "py-80": "padding-top: 20rem; padding-bottom: 20rem;", + "py-96": "padding-top: 24rem; padding-bottom: 24rem;", + "py-px": "padding-top: 1px; padding-bottom: 1px;", + "py-0\\.5": "padding-top: 0.125rem; padding-bottom: 0.125rem;", + "py-1\\.5": "padding-top: 0.375rem; padding-bottom: 0.375rem;", + "py-2\\.5": "padding-top: 0.625rem; padding-bottom: 0.625rem;", + "py-3\\.5": "padding-top: 0.875rem; padding-bottom: 0.875rem;", + "pt-0": "padding-top: 0px;", + "pt-1": "padding-top: 0.25rem;", + "pt-2": "padding-top: 0.5rem;", + "pt-3": "padding-top: 0.75rem;", + "pt-4": "padding-top: 1rem;", + "pt-5": "padding-top: 1.25rem;", + "pt-6": "padding-top: 1.5rem;", + "pt-7": "padding-top: 1.75rem;", + "pt-8": "padding-top: 2rem;", + "pt-9": "padding-top: 2.25rem;", + "pt-10": "padding-top: 2.5rem;", + "pt-11": "padding-top: 2.75rem;", + "pt-12": "padding-top: 3rem;", + "pt-14": "padding-top: 3.5rem;", + "pt-16": "padding-top: 4rem;", + "pt-20": "padding-top: 5rem;", + "pt-24": "padding-top: 6rem;", + "pt-28": "padding-top: 7rem;", + "pt-32": "padding-top: 8rem;", + "pt-36": "padding-top: 9rem;", + "pt-40": "padding-top: 10rem;", + "pt-44": "padding-top: 11rem;", + "pt-48": "padding-top: 12rem;", + "pt-52": "padding-top: 13rem;", + "pt-56": "padding-top: 14rem;", + "pt-60": "padding-top: 15rem;", + "pt-64": "padding-top: 16rem;", + "pt-72": "padding-top: 18rem;", + "pt-80": "padding-top: 20rem;", + "pt-96": "padding-top: 24rem;", + "pt-px": "padding-top: 1px;", + "pt-0\\.5": "padding-top: 0.125rem;", + "pt-1\\.5": "padding-top: 0.375rem;", + "pt-2\\.5": "padding-top: 0.625rem;", + "pt-3\\.5": "padding-top: 0.875rem;", + "pr-0": "padding-right: 0px;", + "pr-1": "padding-right: 0.25rem;", + "pr-2": "padding-right: 0.5rem;", + "pr-3": "padding-right: 0.75rem;", + "pr-4": "padding-right: 1rem;", + "pr-5": "padding-right: 1.25rem;", + "pr-6": "padding-right: 1.5rem;", + "pr-7": "padding-right: 1.75rem;", + "pr-8": "padding-right: 2rem;", + "pr-9": "padding-right: 2.25rem;", + "pr-10": "padding-right: 2.5rem;", + "pr-11": "padding-right: 2.75rem;", + "pr-12": "padding-right: 3rem;", + "pr-14": "padding-right: 3.5rem;", + "pr-16": "padding-right: 4rem;", + "pr-20": "padding-right: 5rem;", + "pr-24": "padding-right: 6rem;", + "pr-28": "padding-right: 7rem;", + "pr-32": "padding-right: 8rem;", + "pr-36": "padding-right: 9rem;", + "pr-40": "padding-right: 10rem;", + "pr-44": "padding-right: 11rem;", + "pr-48": "padding-right: 12rem;", + "pr-52": "padding-right: 13rem;", + "pr-56": "padding-right: 14rem;", + "pr-60": "padding-right: 15rem;", + "pr-64": "padding-right: 16rem;", + "pr-72": "padding-right: 18rem;", + "pr-80": "padding-right: 20rem;", + "pr-96": "padding-right: 24rem;", + "pr-px": "padding-right: 1px;", + "pr-0\\.5": "padding-right: 0.125rem;", + "pr-1\\.5": "padding-right: 0.375rem;", + "pr-2\\.5": "padding-right: 0.625rem;", + "pr-3\\.5": "padding-right: 0.875rem;", + "pb-0": "padding-bottom: 0px;", + "pb-1": "padding-bottom: 0.25rem;", + "pb-2": "padding-bottom: 0.5rem;", + "pb-3": "padding-bottom: 0.75rem;", + "pb-4": "padding-bottom: 1rem;", + "pb-5": "padding-bottom: 1.25rem;", + "pb-6": "padding-bottom: 1.5rem;", + "pb-7": "padding-bottom: 1.75rem;", + "pb-8": "padding-bottom: 2rem;", + "pb-9": "padding-bottom: 2.25rem;", + "pb-10": "padding-bottom: 2.5rem;", + "pb-11": "padding-bottom: 2.75rem;", + "pb-12": "padding-bottom: 3rem;", + "pb-14": "padding-bottom: 3.5rem;", + "pb-16": "padding-bottom: 4rem;", + "pb-20": "padding-bottom: 5rem;", + "pb-24": "padding-bottom: 6rem;", + "pb-28": "padding-bottom: 7rem;", + "pb-32": "padding-bottom: 8rem;", + "pb-36": "padding-bottom: 9rem;", + "pb-40": "padding-bottom: 10rem;", + "pb-44": "padding-bottom: 11rem;", + "pb-48": "padding-bottom: 12rem;", + "pb-52": "padding-bottom: 13rem;", + "pb-56": "padding-bottom: 14rem;", + "pb-60": "padding-bottom: 15rem;", + "pb-64": "padding-bottom: 16rem;", + "pb-72": "padding-bottom: 18rem;", + "pb-80": "padding-bottom: 20rem;", + "pb-96": "padding-bottom: 24rem;", + "pb-px": "padding-bottom: 1px;", + "pb-0\\.5": "padding-bottom: 0.125rem;", + "pb-1\\.5": "padding-bottom: 0.375rem;", + "pb-2\\.5": "padding-bottom: 0.625rem;", + "pb-3\\.5": "padding-bottom: 0.875rem;", + "pl-0": "padding-left: 0px;", + "pl-1": "padding-left: 0.25rem;", + "pl-2": "padding-left: 0.5rem;", + "pl-3": "padding-left: 0.75rem;", + "pl-4": "padding-left: 1rem;", + "pl-5": "padding-left: 1.25rem;", + "pl-6": "padding-left: 1.5rem;", + "pl-7": "padding-left: 1.75rem;", + "pl-8": "padding-left: 2rem;", + "pl-9": "padding-left: 2.25rem;", + "pl-10": "padding-left: 2.5rem;", + "pl-11": "padding-left: 2.75rem;", + "pl-12": "padding-left: 3rem;", + "pl-14": "padding-left: 3.5rem;", + "pl-16": "padding-left: 4rem;", + "pl-20": "padding-left: 5rem;", + "pl-24": "padding-left: 6rem;", + "pl-28": "padding-left: 7rem;", + "pl-32": "padding-left: 8rem;", + "pl-36": "padding-left: 9rem;", + "pl-40": "padding-left: 10rem;", + "pl-44": "padding-left: 11rem;", + "pl-48": "padding-left: 12rem;", + "pl-52": "padding-left: 13rem;", + "pl-56": "padding-left: 14rem;", + "pl-60": "padding-left: 15rem;", + "pl-64": "padding-left: 16rem;", + "pl-72": "padding-left: 18rem;", + "pl-80": "padding-left: 20rem;", + "pl-96": "padding-left: 24rem;", + "pl-px": "padding-left: 1px;", + "pl-0\\.5": "padding-left: 0.125rem;", + "pl-1\\.5": "padding-left: 0.375rem;", + "pl-2\\.5": "padding-left: 0.625rem;", + "pl-3\\.5": "padding-left: 0.875rem;", + "text-left": "text-align: left;", + "text-center": "text-align: center;", + "text-right": "text-align: right;", + "text-justify": "text-align: justify;", + "align-baseline": "vertical-align: baseline;", + "align-top": "vertical-align: top;", + "align-middle": "vertical-align: middle;", + "align-bottom": "vertical-align: bottom;", + "align-text-top": "vertical-align: text-top;", + "align-text-bottom": "vertical-align: text-bottom;", + "font-sans": "font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";", + "font-serif": "font-family: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;", + "font-mono": "font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;", + "text-xs": "font-size: 0.75rem; line-height: 1rem;", + "text-sm": "font-size: 0.875rem; line-height: 1.25rem;", + "text-base": "font-size: 1rem; line-height: 1.5rem;", + "text-lg": "font-size: 1.125rem; line-height: 1.75rem;", + "text-xl": "font-size: 1.25rem; line-height: 1.75rem;", + "text-2xl": "font-size: 1.5rem; line-height: 2rem;", + "text-3xl": "font-size: 1.875rem; line-height: 2.25rem;", + "text-4xl": "font-size: 2.25rem; line-height: 2.5rem;", + "text-5xl": "font-size: 3rem; line-height: 1;", + "text-6xl": "font-size: 3.75rem; line-height: 1;", + "text-7xl": "font-size: 4.5rem; line-height: 1;", + "text-8xl": "font-size: 6rem; line-height: 1;", + "text-9xl": "font-size: 8rem; line-height: 1;", + "font-thin": "font-weight: 100;", + "font-extralight": "font-weight: 200;", + "font-light": "font-weight: 300;", + "font-normal": "font-weight: 400;", + "font-medium": "font-weight: 500;", + "font-semibold": "font-weight: 600;", + "font-bold": "font-weight: 700;", + "font-extrabold": "font-weight: 800;", + "font-black": "font-weight: 900;", + "uppercase": "text-transform: uppercase;", + "lowercase": "text-transform: lowercase;", + "capitalize": "text-transform: capitalize;", + "normal-case": "text-transform: none;", + "italic": "font-style: italic;", + "not-italic": "font-style: normal;", + "diagonal-fractions, .lining-nums, .oldstyle-nums, .ordinal, .proportional-nums, .slashed-zero, .stacked-fractions, .tabular-nums": "--tw-ordinal: undefined; --tw-slashed-zero: undefined; --tw-numeric-figure: undefined; --tw-numeric-spacing: undefined; --tw-numeric-fraction: undefined; font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);", + "normal-nums": "font-variant-numeric: normal;", + "ordinal": "--tw-ordinal: undefined;", + "slashed-zero": "--tw-slashed-zero: undefined;", + "lining-nums": "--tw-numeric-figure: undefined;", + "oldstyle-nums": "--tw-numeric-figure: undefined;", + "proportional-nums": "--tw-numeric-spacing: undefined;", + "tabular-nums": "--tw-numeric-spacing: undefined;", + "diagonal-fractions": "--tw-numeric-fraction: undefined;", + "stacked-fractions": "--tw-numeric-fraction: undefined;", + "leading-3": "line-height: 0.75rem;", + "leading-4": "line-height: 1rem;", + "leading-5": "line-height: 1.25rem;", + "leading-6": "line-height: 1.5rem;", + "leading-7": "line-height: 1.75rem;", + "leading-8": "line-height: 2rem;", + "leading-9": "line-height: 2.25rem;", + "leading-10": "line-height: 2.5rem;", + "leading-none": "line-height: 1;", + "leading-tight": "line-height: 1.25;", + "leading-snug": "line-height: 1.375;", + "leading-normal": "line-height: 1.5;", + "leading-relaxed": "line-height: 1.625;", + "leading-loose": "line-height: 2;", + "tracking-tighter": "letter-spacing: -0.05em;", + "tracking-tight": "letter-spacing: -0.025em;", + "tracking-normal": "letter-spacing: 0px;", + "tracking-wide": "letter-spacing: 0.025em;", + "tracking-wider": "letter-spacing: 0.05em;", + "tracking-widest": "letter-spacing: 0.1em;", + "text-transparent": "color: transparent;", + "text-current": "color: currentcolor;", + "text-black": "--tw-text-opacity: undefined; color: rgba(0,0,0,var(--tw-text-opacity));", + "text-white": "--tw-text-opacity: undefined; color: rgba(255,255,255,var(--tw-text-opacity));", + "text-gray-50": "--tw-text-opacity: undefined; color: rgba(249,250,251,var(--tw-text-opacity));", + "text-gray-100": "--tw-text-opacity: undefined; color: rgba(243,244,246,var(--tw-text-opacity));", + "text-gray-200": "--tw-text-opacity: undefined; color: rgba(229,231,235,var(--tw-text-opacity));", + "text-gray-300": "--tw-text-opacity: undefined; color: rgba(209,213,219,var(--tw-text-opacity));", + "text-gray-400": "--tw-text-opacity: undefined; color: rgba(156,163,175,var(--tw-text-opacity));", + "text-gray-500": "--tw-text-opacity: undefined; color: rgba(107,114,128,var(--tw-text-opacity));", + "text-gray-600": "--tw-text-opacity: undefined; color: rgba(75,85,99,var(--tw-text-opacity));", + "text-gray-700": "--tw-text-opacity: undefined; color: rgba(55,65,81,var(--tw-text-opacity));", + "text-gray-800": "--tw-text-opacity: undefined; color: rgba(31,41,55,var(--tw-text-opacity));", + "text-gray-900": "--tw-text-opacity: undefined; color: rgba(17,24,39,var(--tw-text-opacity));", + "text-red-50": "--tw-text-opacity: undefined; color: rgba(254,242,242,var(--tw-text-opacity));", + "text-red-100": "--tw-text-opacity: undefined; color: rgba(254,226,226,var(--tw-text-opacity));", + "text-red-200": "--tw-text-opacity: undefined; color: rgba(254,202,202,var(--tw-text-opacity));", + "text-red-300": "--tw-text-opacity: undefined; color: rgba(252,165,165,var(--tw-text-opacity));", + "text-red-400": "--tw-text-opacity: undefined; color: rgba(248,113,113,var(--tw-text-opacity));", + "text-red-500": "--tw-text-opacity: undefined; color: rgba(239,68,68,var(--tw-text-opacity));", + "text-red-600": "--tw-text-opacity: undefined; color: rgba(220,38,38,var(--tw-text-opacity));", + "text-red-700": "--tw-text-opacity: undefined; color: rgba(185,28,28,var(--tw-text-opacity));", + "text-red-800": "--tw-text-opacity: undefined; color: rgba(153,27,27,var(--tw-text-opacity));", + "text-red-900": "--tw-text-opacity: undefined; color: rgba(127,29,29,var(--tw-text-opacity));", + "text-yellow-50": "--tw-text-opacity: undefined; color: rgba(255,251,235,var(--tw-text-opacity));", + "text-yellow-100": "--tw-text-opacity: undefined; color: rgba(254,243,199,var(--tw-text-opacity));", + "text-yellow-200": "--tw-text-opacity: undefined; color: rgba(253,230,138,var(--tw-text-opacity));", + "text-yellow-300": "--tw-text-opacity: undefined; color: rgba(252,211,77,var(--tw-text-opacity));", + "text-yellow-400": "--tw-text-opacity: undefined; color: rgba(251,191,36,var(--tw-text-opacity));", + "text-yellow-500": "--tw-text-opacity: undefined; color: rgba(245,158,11,var(--tw-text-opacity));", + "text-yellow-600": "--tw-text-opacity: undefined; color: rgba(217,119,6,var(--tw-text-opacity));", + "text-yellow-700": "--tw-text-opacity: undefined; color: rgba(180,83,9,var(--tw-text-opacity));", + "text-yellow-800": "--tw-text-opacity: undefined; color: rgba(146,64,14,var(--tw-text-opacity));", + "text-yellow-900": "--tw-text-opacity: undefined; color: rgba(120,53,15,var(--tw-text-opacity));", + "text-green-50": "--tw-text-opacity: undefined; color: rgba(236,253,245,var(--tw-text-opacity));", + "text-green-100": "--tw-text-opacity: undefined; color: rgba(209,250,229,var(--tw-text-opacity));", + "text-green-200": "--tw-text-opacity: undefined; color: rgba(167,243,208,var(--tw-text-opacity));", + "text-green-300": "--tw-text-opacity: undefined; color: rgba(110,231,183,var(--tw-text-opacity));", + "text-green-400": "--tw-text-opacity: undefined; color: rgba(52,211,153,var(--tw-text-opacity));", + "text-green-500": "--tw-text-opacity: undefined; color: rgba(16,185,129,var(--tw-text-opacity));", + "text-green-600": "--tw-text-opacity: undefined; color: rgba(5,150,105,var(--tw-text-opacity));", + "text-green-700": "--tw-text-opacity: undefined; color: rgba(4,120,87,var(--tw-text-opacity));", + "text-green-800": "--tw-text-opacity: undefined; color: rgba(6,95,70,var(--tw-text-opacity));", + "text-green-900": "--tw-text-opacity: undefined; color: rgba(6,78,59,var(--tw-text-opacity));", + "text-blue-50": "--tw-text-opacity: undefined; color: rgba(239,246,255,var(--tw-text-opacity));", + "text-blue-100": "--tw-text-opacity: undefined; color: rgba(219,234,254,var(--tw-text-opacity));", + "text-blue-200": "--tw-text-opacity: undefined; color: rgba(191,219,254,var(--tw-text-opacity));", + "text-blue-300": "--tw-text-opacity: undefined; color: rgba(147,197,253,var(--tw-text-opacity));", + "text-blue-400": "--tw-text-opacity: undefined; color: rgba(96,165,250,var(--tw-text-opacity));", + "text-blue-500": "--tw-text-opacity: undefined; color: rgba(59,130,246,var(--tw-text-opacity));", + "text-blue-600": "--tw-text-opacity: undefined; color: rgba(37,99,235,var(--tw-text-opacity));", + "text-blue-700": "--tw-text-opacity: undefined; color: rgba(29,78,216,var(--tw-text-opacity));", + "text-blue-800": "--tw-text-opacity: undefined; color: rgba(30,64,175,var(--tw-text-opacity));", + "text-blue-900": "--tw-text-opacity: undefined; color: rgba(30,58,138,var(--tw-text-opacity));", + "text-indigo-50": "--tw-text-opacity: undefined; color: rgba(238,242,255,var(--tw-text-opacity));", + "text-indigo-100": "--tw-text-opacity: undefined; color: rgba(224,231,255,var(--tw-text-opacity));", + "text-indigo-200": "--tw-text-opacity: undefined; color: rgba(199,210,254,var(--tw-text-opacity));", + "text-indigo-300": "--tw-text-opacity: undefined; color: rgba(165,180,252,var(--tw-text-opacity));", + "text-indigo-400": "--tw-text-opacity: undefined; color: rgba(129,140,248,var(--tw-text-opacity));", + "text-indigo-500": "--tw-text-opacity: undefined; color: rgba(99,102,241,var(--tw-text-opacity));", + "text-indigo-600": "--tw-text-opacity: undefined; color: rgba(79,70,229,var(--tw-text-opacity));", + "text-indigo-700": "--tw-text-opacity: undefined; color: rgba(67,56,202,var(--tw-text-opacity));", + "text-indigo-800": "--tw-text-opacity: undefined; color: rgba(55,48,163,var(--tw-text-opacity));", + "text-indigo-900": "--tw-text-opacity: undefined; color: rgba(49,46,129,var(--tw-text-opacity));", + "text-purple-50": "--tw-text-opacity: undefined; color: rgba(245,243,255,var(--tw-text-opacity));", + "text-purple-100": "--tw-text-opacity: undefined; color: rgba(237,233,254,var(--tw-text-opacity));", + "text-purple-200": "--tw-text-opacity: undefined; color: rgba(221,214,254,var(--tw-text-opacity));", + "text-purple-300": "--tw-text-opacity: undefined; color: rgba(196,181,253,var(--tw-text-opacity));", + "text-purple-400": "--tw-text-opacity: undefined; color: rgba(167,139,250,var(--tw-text-opacity));", + "text-purple-500": "--tw-text-opacity: undefined; color: rgba(139,92,246,var(--tw-text-opacity));", + "text-purple-600": "--tw-text-opacity: undefined; color: rgba(124,58,237,var(--tw-text-opacity));", + "text-purple-700": "--tw-text-opacity: undefined; color: rgba(109,40,217,var(--tw-text-opacity));", + "text-purple-800": "--tw-text-opacity: undefined; color: rgba(91,33,182,var(--tw-text-opacity));", + "text-purple-900": "--tw-text-opacity: undefined; color: rgba(76,29,149,var(--tw-text-opacity));", + "text-pink-50": "--tw-text-opacity: undefined; color: rgba(253,242,248,var(--tw-text-opacity));", + "text-pink-100": "--tw-text-opacity: undefined; color: rgba(252,231,243,var(--tw-text-opacity));", + "text-pink-200": "--tw-text-opacity: undefined; color: rgba(251,207,232,var(--tw-text-opacity));", + "text-pink-300": "--tw-text-opacity: undefined; color: rgba(249,168,212,var(--tw-text-opacity));", + "text-pink-400": "--tw-text-opacity: undefined; color: rgba(244,114,182,var(--tw-text-opacity));", + "text-pink-500": "--tw-text-opacity: undefined; color: rgba(236,72,153,var(--tw-text-opacity));", + "text-pink-600": "--tw-text-opacity: undefined; color: rgba(219,39,119,var(--tw-text-opacity));", + "text-pink-700": "--tw-text-opacity: undefined; color: rgba(190,24,93,var(--tw-text-opacity));", + "text-pink-800": "--tw-text-opacity: undefined; color: rgba(157,23,77,var(--tw-text-opacity));", + "text-pink-900": "--tw-text-opacity: undefined; color: rgba(131,24,67,var(--tw-text-opacity));", + "text-opacity-0": "--tw-text-opacity: undefined;", + "text-opacity-5": "--tw-text-opacity: undefined;", + "text-opacity-10": "--tw-text-opacity: undefined;", + "text-opacity-20": "--tw-text-opacity: undefined;", + "text-opacity-25": "--tw-text-opacity: undefined;", + "text-opacity-30": "--tw-text-opacity: undefined;", + "text-opacity-40": "--tw-text-opacity: undefined;", + "text-opacity-50": "--tw-text-opacity: undefined;", + "text-opacity-60": "--tw-text-opacity: undefined;", + "text-opacity-70": "--tw-text-opacity: undefined;", + "text-opacity-75": "--tw-text-opacity: undefined;", + "text-opacity-80": "--tw-text-opacity: undefined;", + "text-opacity-90": "--tw-text-opacity: undefined;", + "text-opacity-95": "--tw-text-opacity: undefined;", + "text-opacity-100": "--tw-text-opacity: undefined;", + "underline": "text-decoration-line: underline; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;", + "line-through": "text-decoration-line: line-through; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;", + "no-underline": "text-decoration-line: none; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;", + "antialiased": "-webkit-font-smoothing: antialiased;", + "subpixel-antialiased": "-webkit-font-smoothing: auto;", + "opacity-0": "opacity: 0;", + "opacity-5": "opacity: 0.05;", + "opacity-10": "opacity: 0.1;", + "opacity-20": "opacity: 0.2;", + "opacity-25": "opacity: 0.25;", + "opacity-30": "opacity: 0.3;", + "opacity-40": "opacity: 0.4;", + "opacity-50": "opacity: 0.5;", + "opacity-60": "opacity: 0.6;", + "opacity-70": "opacity: 0.7;", + "opacity-75": "opacity: 0.75;", + "opacity-80": "opacity: 0.8;", + "opacity-90": "opacity: 0.9;", + "opacity-95": "opacity: 0.95;", + "opacity-100": "opacity: 1;", + "bg-blend-normal": "background-blend-mode: normal;", + "bg-blend-multiply": "background-blend-mode: multiply;", + "bg-blend-screen": "background-blend-mode: screen;", + "bg-blend-overlay": "background-blend-mode: overlay;", + "bg-blend-darken": "background-blend-mode: darken;", + "bg-blend-lighten": "background-blend-mode: lighten;", + "bg-blend-color-dodge": "background-blend-mode: color-dodge;", + "bg-blend-color-burn": "background-blend-mode: color-burn;", + "bg-blend-hard-light": "background-blend-mode: hard-light;", + "bg-blend-soft-light": "background-blend-mode: soft-light;", + "bg-blend-difference": "background-blend-mode: difference;", + "bg-blend-exclusion": "background-blend-mode: exclusion;", + "bg-blend-hue": "background-blend-mode: hue;", + "bg-blend-saturation": "background-blend-mode: saturation;", + "bg-blend-color": "background-blend-mode: color;", + "bg-blend-luminosity": "background-blend-mode: luminosity;", + "mix-blend-normal": "mix-blend-mode: normal;", + "mix-blend-multiply": "mix-blend-mode: multiply;", + "mix-blend-screen": "mix-blend-mode: screen;", + "mix-blend-overlay": "mix-blend-mode: overlay;", + "mix-blend-darken": "mix-blend-mode: darken;", + "mix-blend-lighten": "mix-blend-mode: lighten;", + "mix-blend-color-dodge": "mix-blend-mode: color-dodge;", + "mix-blend-color-burn": "mix-blend-mode: color-burn;", + "mix-blend-hard-light": "mix-blend-mode: hard-light;", + "mix-blend-soft-light": "mix-blend-mode: soft-light;", + "mix-blend-difference": "mix-blend-mode: difference;", + "mix-blend-exclusion": "mix-blend-mode: exclusion;", + "mix-blend-hue": "mix-blend-mode: hue;", + "mix-blend-saturation": "mix-blend-mode: saturation;", + "mix-blend-color": "mix-blend-mode: color;", + "mix-blend-luminosity": "mix-blend-mode: luminosity;", + "shadow-sm": "--tw-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);", + "shadow": "--tw-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);", + "shadow-md": "--tw-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);", + "shadow-lg": "--tw-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);", + "shadow-xl": "--tw-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);", + "shadow-2xl": "--tw-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);", + "shadow-inner": "--tw-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);", + "shadow-none": "--tw-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);", + "outline-none": "outline-color: transparent; outline-style: solid; outline-width: 2px; outline-offset: 2px;", + "outline-white": "outline-color: white; outline-style: dotted; outline-width: 2px; outline-offset: 2px;", + "outline-black": "outline-color: black; outline-style: dotted; outline-width: 2px; outline-offset: 2px;", + "ring-0": "--tw-ring-offset-shadow: undefined; --tw-ring-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);", + "ring-1": "--tw-ring-offset-shadow: undefined; --tw-ring-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);", + "ring-2": "--tw-ring-offset-shadow: undefined; --tw-ring-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);", + "ring-4": "--tw-ring-offset-shadow: undefined; --tw-ring-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);", + "ring-8": "--tw-ring-offset-shadow: undefined; --tw-ring-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);", + "ring": "--tw-ring-offset-shadow: undefined; --tw-ring-shadow: undefined; box-shadow: var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);", + "ring-inset": "--tw-ring-inset: undefined;", + "ring-transparent": "--tw-ring-color: undefined;", + "ring-current": "--tw-ring-color: undefined;", + "ring-black": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-white": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-50": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-100": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-200": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-300": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-400": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-500": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-600": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-700": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-800": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-gray-900": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-50": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-100": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-200": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-300": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-400": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-500": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-600": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-700": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-800": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-red-900": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-50": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-100": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-200": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-300": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-400": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-500": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-600": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-700": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-800": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-yellow-900": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-50": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-100": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-200": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-300": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-400": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-500": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-600": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-700": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-800": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-green-900": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-50": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-100": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-200": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-300": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-400": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-500": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-600": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-700": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-800": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-blue-900": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-50": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-100": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-200": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-300": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-400": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-500": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-600": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-700": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-800": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-indigo-900": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-50": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-100": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-200": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-300": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-400": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-500": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-600": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-700": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-800": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-purple-900": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-50": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-100": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-200": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-300": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-400": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-500": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-600": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-700": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-800": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-pink-900": "--tw-ring-opacity: undefined; --tw-ring-color: undefined;", + "ring-opacity-0": "--tw-ring-opacity: undefined;", + "ring-opacity-5": "--tw-ring-opacity: undefined;", + "ring-opacity-10": "--tw-ring-opacity: undefined;", + "ring-opacity-20": "--tw-ring-opacity: undefined;", + "ring-opacity-25": "--tw-ring-opacity: undefined;", + "ring-opacity-30": "--tw-ring-opacity: undefined;", + "ring-opacity-40": "--tw-ring-opacity: undefined;", + "ring-opacity-50": "--tw-ring-opacity: undefined;", + "ring-opacity-60": "--tw-ring-opacity: undefined;", + "ring-opacity-70": "--tw-ring-opacity: undefined;", + "ring-opacity-75": "--tw-ring-opacity: undefined;", + "ring-opacity-80": "--tw-ring-opacity: undefined;", + "ring-opacity-90": "--tw-ring-opacity: undefined;", + "ring-opacity-95": "--tw-ring-opacity: undefined;", + "ring-opacity-100": "--tw-ring-opacity: undefined;", + "ring-offset-0": "--tw-ring-offset-width: undefined;", + "ring-offset-1": "--tw-ring-offset-width: undefined;", + "ring-offset-2": "--tw-ring-offset-width: undefined;", + "ring-offset-4": "--tw-ring-offset-width: undefined;", + "ring-offset-8": "--tw-ring-offset-width: undefined;", + "ring-offset-transparent": "--tw-ring-offset-color: undefined;", + "ring-offset-current": "--tw-ring-offset-color: undefined;", + "ring-offset-black": "--tw-ring-offset-color: undefined;", + "ring-offset-white": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-50": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-100": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-200": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-300": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-400": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-500": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-600": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-700": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-800": "--tw-ring-offset-color: undefined;", + "ring-offset-gray-900": "--tw-ring-offset-color: undefined;", + "ring-offset-red-50": "--tw-ring-offset-color: undefined;", + "ring-offset-red-100": "--tw-ring-offset-color: undefined;", + "ring-offset-red-200": "--tw-ring-offset-color: undefined;", + "ring-offset-red-300": "--tw-ring-offset-color: undefined;", + "ring-offset-red-400": "--tw-ring-offset-color: undefined;", + "ring-offset-red-500": "--tw-ring-offset-color: undefined;", + "ring-offset-red-600": "--tw-ring-offset-color: undefined;", + "ring-offset-red-700": "--tw-ring-offset-color: undefined;", + "ring-offset-red-800": "--tw-ring-offset-color: undefined;", + "ring-offset-red-900": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-50": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-100": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-200": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-300": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-400": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-500": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-600": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-700": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-800": "--tw-ring-offset-color: undefined;", + "ring-offset-yellow-900": "--tw-ring-offset-color: undefined;", + "ring-offset-green-50": "--tw-ring-offset-color: undefined;", + "ring-offset-green-100": "--tw-ring-offset-color: undefined;", + "ring-offset-green-200": "--tw-ring-offset-color: undefined;", + "ring-offset-green-300": "--tw-ring-offset-color: undefined;", + "ring-offset-green-400": "--tw-ring-offset-color: undefined;", + "ring-offset-green-500": "--tw-ring-offset-color: undefined;", + "ring-offset-green-600": "--tw-ring-offset-color: undefined;", + "ring-offset-green-700": "--tw-ring-offset-color: undefined;", + "ring-offset-green-800": "--tw-ring-offset-color: undefined;", + "ring-offset-green-900": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-50": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-100": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-200": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-300": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-400": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-500": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-600": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-700": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-800": "--tw-ring-offset-color: undefined;", + "ring-offset-blue-900": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-50": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-100": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-200": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-300": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-400": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-500": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-600": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-700": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-800": "--tw-ring-offset-color: undefined;", + "ring-offset-indigo-900": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-50": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-100": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-200": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-300": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-400": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-500": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-600": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-700": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-800": "--tw-ring-offset-color: undefined;", + "ring-offset-purple-900": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-50": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-100": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-200": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-300": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-400": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-500": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-600": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-700": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-800": "--tw-ring-offset-color: undefined;", + "ring-offset-pink-900": "--tw-ring-offset-color: undefined;", + "filter": "--tw-blur: undefined; --tw-brightness: undefined; --tw-contrast: undefined; --tw-grayscale: undefined; --tw-hue-rotate: undefined; --tw-invert: undefined; --tw-saturate: undefined; --tw-sepia: undefined; --tw-drop-shadow: undefined; filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);", + "filter-none": "filter: none;", + "blur-0": "--tw-blur: undefined;", + "blur-none": "--tw-blur: undefined;", + "blur-sm": "--tw-blur: undefined;", + "blur": "--tw-blur: undefined;", + "blur-md": "--tw-blur: undefined;", + "blur-lg": "--tw-blur: undefined;", + "blur-xl": "--tw-blur: undefined;", + "blur-2xl": "--tw-blur: undefined;", + "blur-3xl": "--tw-blur: undefined;", + "brightness-0": "--tw-brightness: undefined;", + "brightness-50": "--tw-brightness: undefined;", + "brightness-75": "--tw-brightness: undefined;", + "brightness-90": "--tw-brightness: undefined;", + "brightness-95": "--tw-brightness: undefined;", + "brightness-100": "--tw-brightness: undefined;", + "brightness-105": "--tw-brightness: undefined;", + "brightness-110": "--tw-brightness: undefined;", + "brightness-125": "--tw-brightness: undefined;", + "brightness-150": "--tw-brightness: undefined;", + "brightness-200": "--tw-brightness: undefined;", + "contrast-0": "--tw-contrast: undefined;", + "contrast-50": "--tw-contrast: undefined;", + "contrast-75": "--tw-contrast: undefined;", + "contrast-100": "--tw-contrast: undefined;", + "contrast-125": "--tw-contrast: undefined;", + "contrast-150": "--tw-contrast: undefined;", + "contrast-200": "--tw-contrast: undefined;", + "drop-shadow-sm": "--tw-drop-shadow: undefined;", + "drop-shadow": "--tw-drop-shadow: undefined;", + "drop-shadow-md": "--tw-drop-shadow: undefined;", + "drop-shadow-lg": "--tw-drop-shadow: undefined;", + "drop-shadow-xl": "--tw-drop-shadow: undefined;", + "drop-shadow-2xl": "--tw-drop-shadow: undefined;", + "drop-shadow-none": "--tw-drop-shadow: undefined;", + "grayscale-0": "--tw-grayscale: undefined;", + "grayscale": "--tw-grayscale: undefined;", + "hue-rotate-0": "--tw-hue-rotate: undefined;", + "hue-rotate-15": "--tw-hue-rotate: undefined;", + "hue-rotate-30": "--tw-hue-rotate: undefined;", + "hue-rotate-60": "--tw-hue-rotate: undefined;", + "hue-rotate-90": "--tw-hue-rotate: undefined;", + "hue-rotate-180": "--tw-hue-rotate: undefined;", + "-hue-rotate-180": "--tw-hue-rotate: undefined;", + "-hue-rotate-90": "--tw-hue-rotate: undefined;", + "-hue-rotate-60": "--tw-hue-rotate: undefined;", + "-hue-rotate-30": "--tw-hue-rotate: undefined;", + "-hue-rotate-15": "--tw-hue-rotate: undefined;", + "invert-0": "--tw-invert: undefined;", + "invert": "--tw-invert: undefined;", + "saturate-0": "--tw-saturate: undefined;", + "saturate-50": "--tw-saturate: undefined;", + "saturate-100": "--tw-saturate: undefined;", + "saturate-150": "--tw-saturate: undefined;", + "saturate-200": "--tw-saturate: undefined;", + "sepia-0": "--tw-sepia: undefined;", + "sepia": "--tw-sepia: undefined;", + "backdrop-filter": "--tw-backdrop-blur: undefined; --tw-backdrop-brightness: undefined; --tw-backdrop-contrast: undefined; --tw-backdrop-grayscale: undefined; --tw-backdrop-hue-rotate: undefined; --tw-backdrop-invert: undefined; --tw-backdrop-opacity: undefined; --tw-backdrop-saturate: undefined; --tw-backdrop-sepia: undefined; backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);", + "backdrop-filter-none": "backdrop-filter: none;", + "backdrop-blur-0": "--tw-backdrop-blur: undefined;", + "backdrop-blur-none": "--tw-backdrop-blur: undefined;", + "backdrop-blur-sm": "--tw-backdrop-blur: undefined;", + "backdrop-blur": "--tw-backdrop-blur: undefined;", + "backdrop-blur-md": "--tw-backdrop-blur: undefined;", + "backdrop-blur-lg": "--tw-backdrop-blur: undefined;", + "backdrop-blur-xl": "--tw-backdrop-blur: undefined;", + "backdrop-blur-2xl": "--tw-backdrop-blur: undefined;", + "backdrop-blur-3xl": "--tw-backdrop-blur: undefined;", + "backdrop-brightness-0": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-50": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-75": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-90": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-95": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-100": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-105": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-110": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-125": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-150": "--tw-backdrop-brightness: undefined;", + "backdrop-brightness-200": "--tw-backdrop-brightness: undefined;", + "backdrop-contrast-0": "--tw-backdrop-contrast: undefined;", + "backdrop-contrast-50": "--tw-backdrop-contrast: undefined;", + "backdrop-contrast-75": "--tw-backdrop-contrast: undefined;", + "backdrop-contrast-100": "--tw-backdrop-contrast: undefined;", + "backdrop-contrast-125": "--tw-backdrop-contrast: undefined;", + "backdrop-contrast-150": "--tw-backdrop-contrast: undefined;", + "backdrop-contrast-200": "--tw-backdrop-contrast: undefined;", + "backdrop-grayscale-0": "--tw-backdrop-grayscale: undefined;", + "backdrop-grayscale": "--tw-backdrop-grayscale: undefined;", + "backdrop-hue-rotate-0": "--tw-backdrop-hue-rotate: undefined;", + "backdrop-hue-rotate-15": "--tw-backdrop-hue-rotate: undefined;", + "backdrop-hue-rotate-30": "--tw-backdrop-hue-rotate: undefined;", + "backdrop-hue-rotate-60": "--tw-backdrop-hue-rotate: undefined;", + "backdrop-hue-rotate-90": "--tw-backdrop-hue-rotate: undefined;", + "backdrop-hue-rotate-180": "--tw-backdrop-hue-rotate: undefined;", + "-backdrop-hue-rotate-180": "--tw-backdrop-hue-rotate: undefined;", + "-backdrop-hue-rotate-90": "--tw-backdrop-hue-rotate: undefined;", + "-backdrop-hue-rotate-60": "--tw-backdrop-hue-rotate: undefined;", + "-backdrop-hue-rotate-30": "--tw-backdrop-hue-rotate: undefined;", + "-backdrop-hue-rotate-15": "--tw-backdrop-hue-rotate: undefined;", + "backdrop-invert-0": "--tw-backdrop-invert: undefined;", + "backdrop-invert": "--tw-backdrop-invert: undefined;", + "backdrop-opacity-0": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-5": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-10": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-20": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-25": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-30": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-40": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-50": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-60": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-70": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-75": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-80": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-90": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-95": "--tw-backdrop-opacity: undefined;", + "backdrop-opacity-100": "--tw-backdrop-opacity: undefined;", + "backdrop-saturate-0": "--tw-backdrop-saturate: undefined;", + "backdrop-saturate-50": "--tw-backdrop-saturate: undefined;", + "backdrop-saturate-100": "--tw-backdrop-saturate: undefined;", + "backdrop-saturate-150": "--tw-backdrop-saturate: undefined;", + "backdrop-saturate-200": "--tw-backdrop-saturate: undefined;", + "backdrop-sepia-0": "--tw-backdrop-sepia: undefined;", + "backdrop-sepia": "--tw-backdrop-sepia: undefined;", + "transition-none": "", + "transition-all": "", + "transition": "", + "transition-colors": "", + "transition-opacity": "", + "transition-shadow": "", + "transition-transform": "", + "delay-75": "", + "delay-100": "", + "delay-150": "", + "delay-200": "", + "delay-300": "", + "delay-500": "", + "delay-700": "", + "delay-1000": "", + "duration-75": "", + "duration-100": "", + "duration-150": "", + "duration-200": "", + "duration-300": "", + "duration-500": "", + "duration-700": "", + "duration-1000": "", + "ease-linear": "", + "ease-in": "", + "ease-out": "", + "ease-in-out": "" +} \ No newline at end of file