${v}
diff --git a/go/dist/App.js.map b/go/dist/App.js.map
index 3386fb5f..1cb8ae2a 100644
--- a/go/dist/App.js.map
+++ b/go/dist/App.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: 'kodeWeave',\n author: {\n name: 'Michael Schwartz',\n href: 'https://michaelsboost.com/',\n src: 'imgs/author.jpg'\n },\n version: '1.2',\n url: 'https://github.com/michaelsboost/kodeWeave/',\n license: 'https://github.com/michaelsboost/kodeWeave/blob/main/LICENSE'\n}\nlet p = {\n name: \"App name\",\n version: 0.01,\n title: \"An attractive title\",\n description: \"The most attractive description ever!\",\n author: \"kodeWeave\",\n url: \"https://michaelsboost.com/\",\n meta: \"\",\n libraries: [],\n html_pre_processor: \"html\",\n css_pre_processor: \"css\",\n javascript_pre_processor: \"javascript\",\n html: ``,\n css: ``,\n javascript: ``,\n logo: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZpZXdCb3g9IjAgMCA1MTEuOTk5OTkgNTExLjk5OTk5IgogICBoZWlnaHQ9IjUxMiIKICAgd2lkdGg9IjUxMiIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnNDE5MCI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDE5NiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczQxOTQiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0Mjc2Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A0Mjc4IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZDVkOTI7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNDI4MCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmYwMDAwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMjU3LjMxMjUiCiAgICAgICB4Mj0iMC4xMzQwNDE2NSIKICAgICAgIHkxPSIyNTcuMzEyNSIKICAgICAgIHgxPSI1MTEuNzE4NzUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MjgyIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDI3NiIgLz4KICA8L2RlZnM+CiAgPGcKICAgICBpZD0iZzQyODQiPgogICAgPGNpcmNsZQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0MjgyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo3MiwgNzI7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InBhdGg0MjcwIgogICAgICAgY3g9IjI1NiIKICAgICAgIGN5PSIyNTYiCiAgICAgICByPSIyNTYiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6NzIsIDcyO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjUxLjA2MDY4LDU4LjY3ODI3MiBjIC00LjU2MDMyLDAuMDcwMzUgLTIwLjc2MDYxLDIuMDQxOTQ1IC0yOS4yOTc5MiwzLjY1NTk4NCAtMjguMzQzOTEsNS4zNTg2MiAtNjYuODgwODEsMjIuNjE5ODE0IC03My4wMzY5OSwzMi43MTkwNjEgLTEuODk3NTUsMy4xMTI5MzUgLTEuOTQ2MTYsNy4xNDcwMTMgLTEuOTQ2MTYsMTYwLjgxNzAyMyAwLDE1Mi4yNTg4IDAuMDY3MSwxNTcuNzI0NjQgMS44OTk5OCwxNjAuNzMxMjEgNS4yMDU5OSw4LjUzOTg5IDM2LjcyMDAzLDIzLjcwOTM0IDYzLjQ1MTMzLDMwLjU0MTM0IDkuNzY1NzIsMi40OTU5MyAzNC4zMzUwOSw2LjM0NDggMzguNTA3NTQsNi4wMzE2OSAyLjAwMzg4LC0wLjE1MDM2IDIuMDMyMDMsLTAuOTc0NjkgMi4yODkyMSwtNzMuMDkzMjQgMC4xNDU1OCwtNDAuODM3NTkgMC42NTY0MywtNzMuMzM0MTQgMS4xNjEwOSwtNzMuODM4OTYgMS4zNzc1MSwtMS4zNzc5NSA3LjM0NzM5LDEuODg0NzMgMTAuMzU3NTIsNS42NjIxNSAxLjQ2MjAyLDEuODM0NjggMTMuNzk3NTUsMjAuNjU1MjggMjcuNDE3NzQsNDEuODE5NDMgNTEuNDQ0NTIsNzkuOTM4NDcgNTAuNDY1MTEsNzguNDc3OTggNTMuMzA0OTQsNzkuMTkwOTQgMy4zMjQ3OCwwLjgzNDc0IDEyLjU2NzA4LC0zLjc4OTQ3IDI3LjU3NjA2LC0xMy43ODU4MyAxNC4yNDMzOCwtOS40ODY0NiAyMy44ODU1LC0xNy43ODMxIDM0LjgxOTcyLC0yOS45NjcxNyAxMS4yOTUwMiwtMTIuNTg2MTUgMTQuODMwMzksLTE3LjQxNzg1IDE0LjgzMDM5LC0yMC4yNTMwOCAwLC0xLjIyMDA5IC0xNC45NzA2LC0yNC41NDAzMyAtMzMuNDAxMzMsLTUyLjAyODQ2IC0xOC4zNzA1NywtMjcuMzk4MzcgLTM0LjEwMTA3LC01MS4xNjg3NiAtMzQuOTU4MjgsLTUyLjgyNjk2IC0wLjg1NzIzLC0xLjY1ODIgLTEuNTU2OTMsLTQuMDczMzUgLTEuNTU2OTMsLTUuMzY1MTkgMCwtMS4zMjEyMyAxMi40ODk1OSwtMjIuMjk0ODcgMjguNTQ1ODQsLTQ3Ljk0MzUyIDQ0LjQ4MzE1LC03MS4wNTg1NiA0MS45MzgzMywtNjYuMjkxNzggMzguODMwODEsLTcyLjg0MjQ3IC0yLjU1NzU1LC01LjM5MTM2IC0xNS4zNjI2MiwtMTkuNjU4MDkgLTI2LjEzMTI5LC0yOS4xMTU4NyAtMTEuNDU0NTksLTEwLjA2MDE5MSAtMzUuMDY0MTMsLTI1Ljk1MDI3NiAtMzkuOTA2MTIsLTI2Ljg1ODkzNCAtMi45NDE1NCwtMC41NTIwMSAtMy45NzUxOSwtMC4yNDY3ODggLTUuOTE3NjYsMS43NDIyMDEgLTEuMjk1NjQsMS4zMjY2NDggLTIwLjM1MDEyLDMyLjM0ODMwMyAtNDIuMzQwNDgsNjguOTM1NzIzIC0yMS45OTAzNiwzNi41ODc0IC00MS4wNjUzOSw2Ny45OTE2NyAtNDIuMzg2NjUsNjkuNzg3MDIgLTIuNjE5NTQsMy41NTkzNyAtNi43MzI4MSw2LjA5MzA2IC04LjczNDYzLDUuMzc4MzggLTAuOTk5NDcsLTAuMzU2ODMgLTEuMjY2NjUsLTE4LjE3MDM1IC0xLjI2NjY1LC04NC40NDM5NCAwLC00OS41MTMxOTYgLTAuMzc4NjQsLTg0LjIxOTIyNiAtMC45MjM2LC04NC41NTYxMzggLTAuMTE5ODQsLTAuMDc0MSAtMC41MzYwMSwtMC4xMDI0NDYgLTEuMTg3NDgsLTAuMDkyMzggeiIKICAgICAgIGlkPSJwYXRoNDI2MCIgLz4KICA8L2c+Cjwvc3ZnPgo=\",\n console: false,\n dark: true,\n module: true,\n autorun: true,\n pwa: false,\n preview: true,\n activePanel: 'html',\n columns: false,\n columnsRight: true\n};\nlet d = {\n searchLibKey: null,\n librarySuggestions: null,\n iframeSize: null,\n activePanel: 'html',\n selectedSize: 'none',\n compiledJSX: null,\n menuDialog: null,\n settings: null,\n libraries: null,\n safeRender: null,\n demos: null\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 panelIconCSS = \"h-3 w-3\";\n const previewIconCSS = \"h-3 -mt-1\";\n\n return {\n logo: ``,\n twitterfill: ``,\n twitter: ``,\n heart: `
\n \n `,\n html: ``,\n css: ``,\n javascript: ``,\n columns: ``,\n leftChev: ``,\n rightChev: ``,\n console: ``,\n play: ``,\n camera: ``,\n cog: ``,\n tidy: `
\n \n `,\n rotate: `
\n \n `,\n times: `
\n \n `,\n file: `
\n \n `,\n import: `
\n \n `,\n download: `
\n \n `,\n codepen: `
\n \n `,\n trash: `
\n \n `,\n undo: `
\n \n `,\n redo: `
\n \n `,\n cut: `
\n \n `,\n copy: `
\n \n `,\n paste: `
\n \n `,\n indent: `
\n \n `,\n outdent: `
\n \n `,\n search: `
\n \n `,\n goto: `
\n \n `,\n comment: `
\n \n `,\n fold: ``,\n unfold: ``,\n cursor: ``\n };\n})();\n\n// Reactive objects\nconst project = onChange(p, (property, oldValue, newValue) => {\n const iframe = document.getElementById('iframe');\n const doc = iframe.contentWindow.document;\n if (oldValue !== newValue) {\n localStorage.setItem('kodeWeave', JSON.stringify(project));\n App.render('#app');\n if (property.toString() === 'activePanel') {\n if (!window.editorManager) return;\n if (project.activePanel === 'html') setActiveEditor(editorManager.htmlEditor)\n if (project.activePanel === 'css') setActiveEditor(editorManager.cssEditor)\n if (project.activePanel === 'javascript') setActiveEditor(editorManager.javascriptEditor)\n }\n if (!App.initialRender) {\n let string = property.toString();\n // diff nodes\n if (string === 'css' || string === 'console') {\n let consoleCSS = `\n [data-zwj=zwjkonsole] {\n display: ${project.console ? 'flex' : 'none'};\n }\n \n ${project.css}`\n doc.getElementById('cuxjju3ew').textContent = consoleCSS;\n\n if (!window.editorManager) return;\n if (string === 'css' && editorManager.cssEditor.state.doc.toString() !== project.css) {\n dispatchChanges(editorManager.cssEditor, project.css);\n }\n }\n // render right away\n if (string === 'html') {\n if (project.autorun) renderPreview(true);\n if (!window.editorManager) return;\n if (window.editorManager.htmlEditor.state.doc.toString() !== project.html) {\n dispatchChanges(editorManager.htmlEditor, project.html);\n }\n }\n\n if (string === 'javascript') {\n if (project.autorun) renderPreview(true);\n if (!window.editorManager) return;\n if (window.editorManager.jsEditor.state.doc.toString() !== project.javascript) {\n dispatchChanges(editorManager.jsEditor, project.javascript);\n }\n }\n\n if (string === 'meta' || string === 'libraries' || string === 'html_pre_processor' || string === 'css_pre_processor' || string === 'javascript_pre_processor') {\n if (project.autorun) renderPreview(true);\n }\n if (string === \"dark\") {\n App.render('#app');\n document.documentElement.setAttribute('data-theme', project.dark ? 'dark' : 'light');\n doc.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});\nconst data = onChange(d, (property, oldValue, newValue) => {\n // Only render if the actual value has changed\n if (oldValue !== newValue) App.render('#app');\n});\nwindow.project = project;\nwindow.data = data;\n\n// Components\nfunction LeftMenubar() {\n const buttonSize = \"w-full\";\n\n return `
\n
\n \n \n \n \n \n ${icons.html}\n \n \n \n \n ${icons.css}\n \n \n \n \n ${icons.javascript}\n \n \n \n \n \n \n
\n \n \n ${icons.play}\n \n \n \n \n ${icons.console}\n \n \n \n \n ${icons.camera}\n \n \n \n \n ${icons.cog}\n \n \n `;\n}\nfunction PreviewMenu() {\n const buttonClass = 'border-0 bg-transparent text-sm';\n const selectClass = 'mx-0 my-2 w-auto rounded-md capitalize text-[.6rem]';\n const selectStyle = 'padding: 0.5rem;';\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\n const previewSize = `
\n \n Select Size \n ${Object.keys(sizeOptions).map(group => `\n \n ${Object.keys(sizeOptions[group]).map(option => `\n ${sizeOptions[group][option]} \n `).join('')}\n \n `).join('')}\n \n `;\n\n function canTidyShow() {\n if (!project.activePanel) return 'hidden'\n if (project.activePanel) {\n if (project.activePanel === 'html') {\n if (project.html_pre_processor !== 'html') {\n return 'hidden'\n }\n }\n if (project.activePanel === 'css') {\n if (project.css_pre_processor !== 'css') {\n return 'hidden'\n }\n }\n if (project.activePanel === 'javascript') {\n if (project.javascript_pre_processor !== 'javascript') {\n return 'hidden'\n }\n }\n }\n }\n\n return `
\n ${previewSize}\n\n
\n \n \n ${icons.rotate}\n \n \n \n \n ${icons.columns}\n \n \n \n \n ${project.columnsRight ? icons.leftChev : icons.rightChev}\n \n \n \n \n ${icons.tidy}\n \n \n \n \n ${icons.play}\n \n \n \n
`;\n}\nconst App = {\n initialRender: true,\n render(container) {\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 let menuDialog = `
\n \n \n \n \n \n \n \n \n \n \n \n new project \n \n \n \n \n \n \n \n import project \n \n \n \n \n \n \n \n download json \n \n \n \n \n \n \n \n download zip \n \n \n \n \n \n \n \n share to codepen \n \n \n \n \n \n \n \n empty storage \n \n \n `;\n menuDialog = `
\n \n \n \n file menu\n \n \n ${icons.times}\n \n \n \n ${menuDialog}\n \n \n \n `;\n\n let settingsHTML = `
`;\n settingsHTML = `
\n \n \n \n settings\n \n \n ${icons.times}\n \n \n \n ${settingsHTML}\n \n \n \n `;\n\n let librariesDialog = `
\n \n \n \n Search for resources (JQuery, Bootstrap, Foundation...)\n \n \n ${icons.times}\n \n \n \n \n
\n \n
\n ${data.librarySuggestions && data.searchLibKey ? data.librarySuggestions : ''}\n
\n
\n \n \n \n `;\n const buttonClass = \"grid grid-rows-1 items-center bg-transparent border-0 focus-within:shadow-none\";\n const buttonContentClass = \"flex flex-col justify-between h-full\";\n const imageContentClass = \"grid h-full items-center\";\n const textContentClass = \"capitalize text-center mt-4\";\n \n const frameworks = [\n \"javascript\",\n \"typescript\",\n \"react\",\n \"vue\",\n \"preact\",\n \"angular\",\n \"alpine\",\n \"solid\",\n \"stimulus\",\n \"mithril\",\n \"hyperapp\",\n \"aurelia\",\n \"lit\"\n ]\n \n let buttonHTML = \"\";\n for (const name of frameworks) {\n buttonHTML += `
\n \n
\n
\n
\n
\n ${name}\n
\n
\n `;\n }\n\n let demosDialog = `
\n \n \n \n Are you sure you want to start a new project?\n \n \n ${icons.times}\n \n \n \n All current data will be lost.
\n \n \n \n \n `;\n \n const html = `\n
\n
\n ${LeftMenubar()}\n
\n \n \n
\n
\n
\n \n
\n ${PreviewMenu()}\n
\n
\n
\n \n\n \n ${data.iframeSize}\n \n
\n
\n
\n \n
\n
\n
\n ${editorNav()}\n
\n
\n
\n \n
\n
\n\n ${menuDialog}\n ${settingsHTML}\n ${librariesDialog}\n ${demosDialog}\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}\nconst 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 ${times}\n \n \n \n ${content ? content : ''}\n \n \n ${CloseLabel ? CloseLabel : 'close'} \n ${onConfirm ? `${ConfirmLabel ? ConfirmLabel : 'confirm'} ` : ''}\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 editorNav() {\n const buttonClass = \"border-0 bg-transparent py-1\";\n\n return `
\n \n ${icons.indent}\n \n \n ${icons.outdent}\n \n \n ${icons.undo}\n \n \n ${icons.redo}\n \n \n ${icons.search}\n \n \n ${icons.goto}\n \n
\n\n
\n \n ${icons.comment}\n \n \n ${icons.fold}\n \n \n ${icons.unfold}\n \n \n ${icons.cut}\n \n \n ${icons.copy}\n \n \n ${icons.paste}\n \n \n ${icons.cursor}\n \n
`;\n}\nfunction emptyStorage() {\n // Clear local storage\n localStorage.removeItem('kodeWeave');\n\n // Clear session storage\n sessionStorage.clear();\n\n // Clear cookies\n document.cookie.split(\";\").forEach(function(c) {\n document.cookie = c.trim().split(\"=\")[0] + '=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/';\n });\n\n // Clear service worker caches\n if ('caches' in window) {\n caches.keys().then(function(names) {\n for (let name of names) caches.delete(name)\n });\n }\n\n // Unregister all service workers\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.getRegistrations().then(function(registrations) {\n for (let registration of registrations) registration.unregister()\n });\n }\n\n console.log('All saved data, cookies, and service worker caches have been cleared.');\n location.reload();\n}\n\n// editor functions\nconst 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};\nfunction renderLibraries() {\n return project.libraries.map((library, index) => `\n
\n \n \n ${icons.trash}\n \n \n `).join('')\n}\nfunction 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 data.librarySuggestions = suggestions.map(result => {\n return `\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}\nfunction removeScript(src) {\n const script = document.querySelector(`script[src=\"${src}\"]`);\n if (script) script.remove();\n}\nfunction removeScripts(scripts) {\n scripts.forEach(src => {\n const script = document.querySelector(`script[src=\"${src}\"]`);\n if (script) script.remove();\n });\n}\nasync function loadScript(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}\nasync function loadScripts(srcArray) {\n return Promise.all(srcArray.map(loadScript));\n}\nasync function setPreprocessor(editor, value) {\n const scriptMap = {\n html: {\n markdown: \"libraries/preprocessors/marked.min.js\",\n jade: \"libraries/preprocessors/jade.js\",\n pug: \"libraries/preprocessors/pug.js\"\n },\n css: {\n sass: \"libraries/preprocessors/sass.sync.min.js\",\n less: \"libraries/preprocessors/less.min.js\",\n stylus: \"libraries/preprocessors/stylus.min.js\"\n },\n javascript: {\n typescript: \"libraries/preprocessors/typescript.min.js\",\n babel: \"libraries/preprocessors/babel.min.js\",\n jsxtypescript: [\n \"libraries/preprocessors/typescript.min.js\",\n \"libraries/preprocessors/babel.min.js\"\n ]\n }\n };\n\n const currentPreprocessors = {\n html: project.html_pre_processor,\n css: project.css_pre_processor,\n javascript: project.javascript_pre_processor\n };\n\n try {\n const scriptSrcCondition = (value !== 'html' || value !== 'css' || value !== 'javascript');\n const scriptSrc = scriptSrcCondition ? scriptMap[editor][value] : null;\n\n // Remove the current preprocessor scripts\n if (currentPreprocessors[editor] && scriptSrcCondition) {\n const currentScriptSrc = scriptMap[editor][currentPreprocessors[editor]];\n Array.isArray(currentScriptSrc) ? removeScripts(currentScriptSrc) : removeScript(currentScriptSrc)\n\n // Load the new preprocessor scripts\n if (Array.isArray(scriptSrc)) {\n await loadScripts(scriptSrc);\n } else if (scriptSrc) {\n await loadScript(scriptSrc);\n }\n }\n\n // Set the new preprocessor\n if (editor === 'html') {\n project.html_pre_processor = value;\n // if (!window.editorManager || !window.editorManager.htmlEditor) return;\n // window.editorManager.setMode(project.html_pre_processor === 'html' ? 'html' : value, editorManager.htmlEditor);\n } else if (editor === 'css') {\n project.css_pre_processor = value;\n // if (!window.editorManager || !window.editorManager.cssEditor) return;\n // window.editorManager.setMode(project.css_pre_processor === 'css' ? 'css' : value, editorManager.cssEditor);\n } else if (editor === 'javascript') {\n project.javascript_pre_processor = value;\n if (!window.editorManager || !window.editorManager.jsEditor) return;\n window.editorManager.setMode(project.javascript_pre_processor === 'javascript' ? 'javascript' : value, editorManager.jsEditor);\n }\n } catch (error) {\n console.error('Error setting preprocessor:', error);\n }\n}\nasync function initializePreprocessors() {\n await Promise.all([\n setPreprocessor('html', project.html_pre_processor),\n setPreprocessor('css', project.css_pre_processor),\n setPreprocessor('javascript', project.javascript_pre_processor)\n ]);\n \n if (!window.editorManager) return;\n dispatchChanges(editorManager.htmlEditor, project.html);\n dispatchChanges(editorManager.cssEditor, project.css);\n dispatchChanges(editorManager.jsEditor, project.javascript);\n renderPreview(true);\n}\nasync function loadBeautifyLibraries() {\n const beautifyLibraries = [\n \"libraries/js-beautify/beautify.min.js\",\n \"libraries/js-beautify/beautify-css.min.js\",\n \"libraries/js-beautify/beautify-html.min.js\"\n ];\n await loadScripts(beautifyLibraries);\n}\nasync function removeBeautifyLibraries() {\n const beautifyLibraries = [\n \"libraries/js-beautify/beautify.min.js\",\n \"libraries/js-beautify/beautify-css.min.js\",\n \"libraries/js-beautify/beautify-html.min.js\"\n ];\n removeScripts(beautifyLibraries);\n}\nasync function tidy() {\n await loadBeautifyLibraries();\n\n let formattedCode;\n switch (project.activePanel) {\n case 'html':\n formattedCode = html_beautify(project.html, {\n indent_size: 2,\n max_preserve_newlines: 1\n });\n dispatchChanges(editorManager.htmlEditor, formattedCode);\n break;\n case 'css':\n formattedCode = css_beautify(project.css, {\n indent_size: 2,\n max_preserve_newlines: 1\n });\n project.css = formattedCode;\n dispatchChanges(editorManager.cssEditor, formattedCode);\n break;\n case 'javascript':\n formattedCode = js_beautify(project.javascript, {\n indent_size: 2,\n max_preserve_newlines: 1\n });\n project.javascript = formattedCode;\n dispatchChanges(editorManager.jsEditor, formattedCode);\n break;\n default:\n formattedCode = 'Unknown editor panel.';\n }\n\n await removeBeautifyLibraries();\n}\n\n// iframe functions\nfunction 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}\nfunction resizeCanvas(size) {\n data.selectedSize = size;\n getIFrameClientSize();\n}\nfunction 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\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 data.selectedSize = width+'x'+height;\n}\nfunction defineScale() {\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 // 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}\nlet fadeTimeout;\nfunction getIFrameClientSize() {\n if (data.selectedSize === 'none') {\n const iframe = document.getElementById('iframe');\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 } else {\n defineScale();\n }\n}\nasync function compileCode(detect) {\n try {\n if (detect === 'html') {\n switch (project.html_pre_processor) {\n case 'markdown':\n return marked.parse(project.html);\n case 'jade':\n return jade.render(project.html, { pretty: true });\n case 'pug':\n const appScript = document.getElementById('appScript');\n if (appScript.hasAttribute('type') && appScript.getAttribute('type') === 'module') {\n // import pug from 'libraries/preprocessors/pug.js';\n console.error('Cannot import pug as script is a module!');\n return false;\n }\n\n const pug = require(\"pug\");\n return pug.compile(project.html)({name: this.name });\n default:\n return project.html;\n }\n }\n\n if (detect === 'css') {\n switch (project.css_pre_processor) {\n case 'stylus':\n return stylus.render(project.css);\n case 'less':\n return new Promise((resolve, reject) => {\n less.render(project.css, (err, output) => err ? reject(err) : resolve(output.css));\n });\n case 'sass':\n return new Promise((resolve, reject) => {\n Sass.compile(project.css, result => result.status === 0 ? resolve(result.text) : reject(new Error(result.message)));\n });\n default:\n return project.css;\n }\n }\n\n if (detect === 'javascript') {\n switch (project.javascript_pre_processor) {\n case 'babel':\n if (typeof Babel === 'undefined') {\n await loadScript(\"libraries/preprocessors/babel.min.js\");\n }\n return Babel.transform(project.javascript, { presets: ['env', 'react'] }).code;\n case 'typescript':\n return ts.transpileModule(project.javascript, { compilerOptions: { module: ts.ModuleKind.CommonJS } }).outputText;\n case 'jsxtypescript':\n const result = ts.transpileModule(project.javascript, {\n compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES5, jsx: ts.JsxEmit.React }\n }).outputText;\n data.compiledJSX = Babel.transform(result, {\n presets: ['env', 'react']\n }).code;\n return data.compiledJSX;\n default:\n return project.javascript;\n }\n }\n } catch (error) {\n console.error('Error compiling code:', error);\n }\n}\n\n// save functions\nasync function handleLogoChange(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}\nfunction 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}\n\nfunction newProject(name) {\n function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n const capitalizedTitle = capitalizeFirstLetter(name);\n setPreprocessor('html', 'html');\n setPreprocessor('css', 'css');\n if (name !== \"typescript\") setPreprocessor('javascript', 'javascript');\n if (name === \"typescript\" || name === \"angular\") setPreprocessor('javascript', 'typescript');\n project.name = `${capitalizedTitle} name`;\n project.version = 0.01;\n project.title = `A Cool ${capitalizedTitle} App`;\n project.description = `A modern ${capitalizedTitle} application!`;\n project.author = \"kodeWeave\";\n project.url = \"https://michaelsboost.com/\";\n project.module = true;\n project.preview = true;\n if (name === 'angular') project.module = false;\n project.pwa = false;\n\n if (name === 'javascript') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: 0
\n
\n +\n \n
`;\n project.css = ``;\n project.javascript = `let counter = 0;\nconst counterElement = document.getElementById('counter');\nconst incrementButton = document.getElementById('incrementButton');\n\nincrementButton.addEventListener('click', function() {\n counter++;\n counterElement.textContent = counter;\n});`;\n }\n if (name === 'typescript') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: 0
\n
\n +\n \n
`;\n project.css = ``;\n project.javascript = `let counter: number = 0;\nconst counterElement: HTMLElement | null = document.getElementById('counter');\nconst incrementButton: HTMLElement | null = document.getElementById('incrementButton');\n\nif (counterElement && incrementButton) {\n incrementButton.addEventListener('click', function() {\n counter++;\n counterElement.textContent = counter.toString();\n });\n}`;\n }\n if (name === 'react') {\n project.meta = \"\";\n project.libraries = [\n \"https://unpkg.com/react@latest/umd/react.development.js\",\n \"https://unpkg.com/react-dom@latest/umd/react-dom.development.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `/** @jsxRuntime classic */\n/** @jsx React.createElement */\nconst { useState } = React;\n\nfunction App() {\n const [counter, setCounter] = useState(0);\n\n return (\n
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: {counter}
\n
setCounter(counter + 1)}\n >\n +\n \n
\n );\n}\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(
);`;\n }\n if (name === 'vue') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.global.prod.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `const App = {\n data() {\n return {\n counter: 0,\n message: '\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E'\n };\n },\n methods: {\n incrementCounter() {\n this.counter++;\n }\n },\n template: \\`\n
\n
{{ message }} \n
Counter: {{ counter }}
\n
\n +\n \n
\n \\`\n};\n\nconst app = Vue.createApp(App);\napp.mount('#root');`;\n }\n if (name === 'preact') {\n project.meta = ``;\n project.libraries = [\n \"https://unpkg.com/preact@latest/dist/preact.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `/** @jsx h */\nimport { html, render, useState, useEffect } from 'https://unpkg.com/htm@3.1.1/preact/standalone.module.js';\n\nfunction App() {\n const [counter, setCounter] = useState(0);\n\n return html\\`\n
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: \\${counter}
\n
setCounter(counter + 1)}\n >\n +\n \n
\n \\`;\n}\n\nrender(html\\`<\\${App} />\\`, document.getElementById('root'));`;\n }\n if (name === 'angularold') {\n project.meta = ``;\n project.libraries = [\n \"https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: {{counter}}
\n
\n +\n \n
`;\n project.css = ``;\n project.javascript = `angular.module('myApp', [])\n .controller('MainController', function($scope) {\n $scope.counter = 0;\n $scope.incrementCounter = function() {\n $scope.counter++;\n };\n });`;\n }\n if (name === 'angular') {\n project.meta = ``;\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.3/rxjs.umd.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/core-js/2.5.7/core.js\",\n \"https://unpkg.com/@angular/core@11.0.5/bundles/core.umd.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/zone.js/0.10.3/zone.min.js\",\n \"https://unpkg.com/@angular/common@11.0.5/bundles/common.umd.js\",\n \"https://unpkg.com/@angular/compiler@11.0.5/bundles/compiler.umd.js\",\n \"https://unpkg.com/@angular/platform-browser@11.0.5/bundles/platform-browser.umd.js\",\n \"https://unpkg.com/@angular/platform-browser-dynamic@11.0.5/bundles/platform-browser-dynamic.umd.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
Loading... `;\n project.css = ``;\n project.javascript = `const { Component, NgModule, enableProdMode } = ng.core;\nconst { BrowserModule } = ng.platformBrowser;\nconst { platformBrowserDynamic } = ng.platformBrowserDynamic;\n\nenableProdMode();\n\n@Component({\n selector: 'app-root',\n template: \\`\n
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: {{ counter }}
\n
\n +\n \n
\n \\`,\n})\nclass AppComponent {\n counter = 0;\n \n incrementCounter() {\n this.counter++;\n }\n}\n\n@NgModule({\n declarations: [AppComponent],\n imports: [BrowserModule],\n bootstrap: [AppComponent]\n})\nclass AppModule {}\n\nplatformBrowserDynamic().bootstrapModule(AppModule);`;\n }\n if (name === 'alpine') {\n project.meta = ``;\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
\n
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter:
\n
\n +\n \n
\n
`;\n project.css = ``;\n project.javascript = ``;\n }\n if (name === 'solid') {\n project.meta = ``;\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `import { createSignal } from \"https://cdn.skypack.dev/solid-js@1.2.6\";\nimport { render } from \"https://cdn.skypack.dev/solid-js@1.2.6/web\";\nimport html from \"https://cdn.skypack.dev/solid-js@1.2.6/html\";\n\nfunction Counter() {\n const [count, setCount] = createSignal(0);\n const increment = () => setCount(count() + 1);\n\n return html\\`\n
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: \\${count}
\n
\n +\n \n
\n \\`;\n}\n\nrender(Counter, document.getElementById(\"root\"));`;\n }\n if (name === 'stimulus') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3.1.0/dist/stimulus.umd.js\",\n \"https://cdn.jsdelivr.net/npm/@hotwired/stimulus-loading@1.0.0/dist/stimulus-loading.umd.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: 0
\n
counter#increment\"\n class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-700 transition\"\n >\n +\n \n
`;\n project.css = ``;\n project.javascript = `const application = Stimulus.Application.start();\n\napplication.register('counter', class extends Stimulus.Controller {\n static targets = ['output'];\n\n initialize() {\n this.counter = 0;\n }\n\n increment() {\n this.counter += 1;\n this.outputTarget.textContent = this.counter;\n }\n});`;\n }\n if (name === 'mithril') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdn.jsdelivr.net/npm/mithril@2.0.4/mithril.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `import htm from 'https://unpkg.com/htm?module'\nconst html = htm.bind(m)\n\nconst app = () => {\n let count = 0\n \n return {\n view: () => html\\`\n
\n
\uD83D\uDC4B Hello, Mithril! \uD83C\uDF0E \n
Counter: \\${count}
\n
count++}>+ \n
\\`\n }\n}\n\nm.mount(document.getElementById('root'), app)`;\n }\n if (name === 'hyperapp') {\n project.meta = ``;\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `import { app } from 'https://unpkg.com/hyperapp';\nimport html from 'https://unpkg.com/hyperlit';\n\napp({\n init: 0,\n view: count => html\\`\n
\n
\uD83D\uDC4B Hello, Hyperapp! \uD83C\uDF0E \n
Counter: \\${count}
\n
count + 1}>+ \n
\\`,\n node: document.getElementById('root')\n})`;\n }\n if (name === 'aurelia') {\n project.meta = '';\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
\n \n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: 0
\n
\n +\n \n
\n `;\n project.css = ``;\n project.javascript = `class App {\n static $view() {\n return document.querySelector('#root');\n }\n constructor() {\n this.message = '${capitalizedTitle}';\n this.counter = 0;\n }\n incrementCounter() {\n this.counter++;\n document.getElementById('counter').textContent = this.counter;\n }\n}\n\nau.start({ root: App });`;\n }\n if (name === 'lit') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `import {LitElement, html} from 'https://cdn.jsdelivr.net/gh/lit/dist@2/core/lit-core.min.js';\n \nclass MyElement extends LitElement {\n static properties = {\n counter: { type: Number }\n };\n\n constructor() {\n super();\n this.counter = 0;\n }\n\n incrementCounter() {\n this.counter++;\n }\n\n render() {\n return html\\`\n
\n \uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n Counter: \\${this.counter}
\n \n +\n \n \n \\`;\n }\n}\ncustomElements.define('my-element', MyElement);`;\n }\n\n dispatchChanges(editorManager.htmlEditor, project.html);\n dispatchChanges(editorManager.cssEditor, project.css);\n dispatchChanges(editorManager.jsEditor, project.javascript);\n if (name === 'react') setPreprocessor('javascript', 'babel');\n data.demos = false;\n renderPreview(true);\n}\nfunction importJSON(obj) {\n if (obj === null) return;\n project.obj = {};\n if (data.safeRender) data.safeRender = null;\n setPreprocessor('html', obj.html_pre_processor);\n setPreprocessor('css', obj.css_pre_processor);\n setPreprocessor('javascript', obj.javascript_pre_processor);\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.console = obj.console;\n project.dark = obj.dark;\n project.module = obj.module;\n project.autorun = obj.autorun;\n project.pwa = obj.pwa;\n project.activePanel = obj.activePanel;\n project.preview = obj.preview;\n project.columns = obj.columns;\n project.columnsRight = obj.columnsRight;\n \n project.meta = obj.meta;\n project.libraries = obj.libraries;\n project.html = obj.html;\n project.css = obj.css;\n project.javascript = obj.javascript;\n\n // Dispatch changes to editors\n if (window.editorManager) {\n dispatchChanges(editorManager.htmlEditor, project.html);\n dispatchChanges(editorManager.cssEditor, project.css);\n dispatchChanges(editorManager.jsEditor, project.javascript);\n }\n\n data.safeRender = true;\n renderPreview(true);\n}\nfunction 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}\n\nfunction 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}\nfunction fetchResources(obj) {\n try {\n const doc = new DOMParser().parseFromString(obj.html, 'text/html');\n const body = doc.body;\n\n const imageUrls = [];\n const audioUrls = [];\n const vectors = [];\n const videoUrls = [];\n\n // Extract image URLs\n body.querySelectorAll('img').forEach(img => {\n if (img.hasAttribute('src')) {\n imageUrls.push(img.getAttribute('src'));\n img.src = `imgs/${getFileNameAndType(img.getAttribute('src')).fileName}`;\n }\n });\n\n // Extract audio URLs\n body.querySelectorAll('audio').forEach(audio => {\n audio.querySelectorAll('source').forEach(source => {\n if (source.hasAttribute('src')) {\n audioUrls.push(source.getAttribute('src'));\n source.src = `audios/${getFileNameAndType(source.getAttribute('src')).fileName}`;\n }\n });\n });\n\n // Extract vectors\n body.querySelectorAll('svg').forEach(svg => {\n vectors.push(svg.outerHTML);\n });\n\n // Extract video URLs\n body.querySelectorAll('video').forEach(video => {\n video.querySelectorAll('source').forEach(source => {\n if (source.hasAttribute('src')) {\n videoUrls.push(source.getAttribute('src'));\n source.src = `vids/${getFileNameAndType(source.getAttribute('src')).fileName}`;\n }\n });\n });\n\n return {\n imageUrls,\n audioUrls,\n vectors,\n videoUrls\n };\n } catch (error) {\n console.error('Error fetching resources:', error);\n return null; // Or handle the error in an appropriate way\n }\n}\nasync function getBase64Media(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}\nasync function downloadJSON() {\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()}-kodeWeave.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}\nasync function downloadProject() {\n try {\n await loadScripts([\n \"libraries/jszip/jszip.min.js\",\n \"libraries/jszip/FileSaver.min.js\"\n ]);\n \n let { imageUrls, audioUrls, vectors, videoUrls } = fetchResources(project);\n\n // Extract srcset URLs\n const iframe = document.getElementById('iframe');\n if (!iframe) return;\n\n const idoc = iframe.contentDocument || iframe.contentWindow.document;\n const srcsetUrls = idoc.querySelectorAll('img[srcset]').forEach(img => {\n img.srcset.split(',').forEach(srcset => {\n const url = srcset.trim().split(' ')[0];\n imageUrls.push(url);\n });\n });\n\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 (!url.startsWith(\"data:\")) {\n urls.push(url);\n }\n }\n return urls;\n }\n \n // Extract background-image URLs from project CSS\n const backgroundUrls = extractBackgroundImageUrls(await compileCode('css'));\n imageUrls = imageUrls.concat(backgroundUrls); // Add to image URLs to download\n\n const zip = new JSZip();\n\n // Project file\n zip.file(`${project.name.split(' ').join('').toLowerCase()}-kodeWeave.json`, JSON.stringify(project, null, 2));\n\n function checkCSSDependencies() {\n if (project.css.trim() !== '') {\n return `\n \"postcss\": \"^8.4.6\",\n \"autoprefixer\": \"^10.4.2\",\n \"cssnano\": \"^5.0.12\"`;\n }\n return '';\n }\n \n function checkJSDependencies() {\n if (project.javascript_pre_processor === 'babel' || project.javascript_pre_processor === 'jsxtypescript') {\n return `,\n \"@babel/core\": \"^7.15.5\",\n \"@babel/preset-env\": \"^7.15.6\",\n \"@babel/preset-react\": \"^7.14.5\",\n \"rollup-plugin-babel\": \"^4.4.0\"`;\n }\n if (project.javascript_pre_processor === 'typescript' || project.javascript_pre_processor === 'jsxtypescript') {\n return `,\n \"rollup-plugin-typescript2\": \"^0.31.1\",\n \"typescript\": \"^4.4.3\"`;\n }\n return '';\n }\n \n // Nodejs Package JSON\n let nodeStr = `{\n \"name\": \"${project.name.toLowerCase().split(' ').join('')}\",\n \"version\": \"${project.version}\",\n \"type\": \"module\",\n \"scripts\": {\n ${project.css.trim() !== '' ? `\"build:css\": \"postcss src/styles.css -o dist/styles.min.css\",\n ` : ''}\"build:js\": \"rollup -c && terser dist/script.js -o dist/script.min.js\",\n \"build\": \"${project.css.trim() !== '' ? 'npm run build:css && ' : ''}npm run build:js\",\n \"serve\": \"http-server -c-1 -p 8081\"\n },\n \"devDependencies\": {\n \"rollup\": \"^2.79.1\",\n \"rollup-plugin-terser\": \"^7.0.2\",\n \"terser\": \"^5.10.0\",\n \"http-server\": \"^14.1.1\"${checkCSSDependencies()}${checkJSDependencies()}\n }\n}`;\n zip.file(\"package.json\", nodeStr);\n \n // Rollup Configuration\n let rollupPlugins = `import { terser } from 'rollup-plugin-terser';\n`;\n \n if (project.javascript_pre_processor === 'babel' || project.javascript_pre_processor === 'jsxtypescript') {\n rollupPlugins += `import babel from 'rollup-plugin-babel';\n`;\n }\n \n if (project.javascript_pre_processor === 'typescript' || project.javascript_pre_processor === 'jsxtypescript') {\n rollupPlugins += `import typescript from 'rollup-plugin-typescript2';\n`;\n }\n \n let rollupStr = `${rollupPlugins}\nexport default {\n ${project.javascript_pre_processor === 'typescript' || project.javascript_pre_processor === 'jsxtypescript' ? \"input: 'src/script.ts', // entry point for your TypeScript\" : \"input: 'src/script.js', // entry point to your Javascript\"}\n output: {\n file: 'dist/script.js',\n format: ${project.module ? \"'es'\" : \"'iife'\"}, // Immediately Invoked Function Expression, suitable for \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',\nnew CacheFirst({\ncacheName: cacheName,\nplugins: [\n// Any additional plugins can be added here\n],\n})\n);`\n zip.file(\"dist/sw.js\", swjs);\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 if (library.endsWith('.css')) {\n cssTags += `
\\n `;\n } else {\n // Assuming it's a Google font\n cssTags += `
\\n `;\n }\n });\n \n // Add index.html\n const indexHtmlContentCompiled = `\n\n \n
${project.title} \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n ${cssTags}${project.css ? '
' : ''}\n ${project.meta ? `${project.meta}\\n ` : ''}\n ${scriptTags ? scriptTags : ''}\n \n \n\n${await compileCode('html')}\n\n${project.javascript ? '' : ''}\n${(project.pwa ? swinit : '')}\n \n`;\n if (project.html_pre_processor === 'html') zip.file('src/index.html', project.html);\n if (project.html_pre_processor === 'html') zip.file('index.html', indexHtmlContentCompiled);\n if (project.html_pre_processor === 'markdown') zip.file('src/index.md', project.html);\n if (project.html_pre_processor === 'markdown') zip.file('index.html', indexHtmlContentCompiled);\n if (project.html_pre_processor === 'pug') zip.file('src/index.pug', project.html);\n if (project.html_pre_processor === 'pug') zip.file('index.html', indexHtmlContentCompiled);\n if (project.html_pre_processor === 'jade') zip.file('src/index.jade', project.html);\n if (project.html_pre_processor === 'jade') zip.file('index.html', indexHtmlContentCompiled);\n\n // Create a folder \"imgs\" and add images inside it with their correct MIME types\n if (audioUrls.length > 0) {\n const audioFolder = zip.folder('audios');\n try {\n for (const audioUrl of audioUrls) {\n const base64Audio = await getBase64Media(audioUrl);\n audioFolder.file(audioUrl.substring(audioUrl.lastIndexOf('/') + 1), base64Audio, { base64: true });\n }\n } catch (error) {\n console.error('Error adding audio to ZIP:', error);\n return;\n }\n }\n if (imageUrls.length > 0) {\n const imgFolder = zip.folder('imgs');\n try {\n // Convert each image URL to Base64 and add to ZIP folder\n for (const imageUrl of imageUrls) {\n const base64Image = await getBase64Media(imageUrl);\n imgFolder.file(imageUrl.substring(imageUrl.lastIndexOf('/') + 1), base64Image, { base64: true });\n }\n } catch (error) {\n console.error('Error adding images to ZIP:', error);\n return; // Exit method or handle error as needed\n }\n }\n if (vectors.length > 0) {\n const svgFolder = zip.folder('svgs');\n try {\n // Convert each SVG to a file inside the 'svgs' folder\n vectors.forEach((svg, index) => {\n svgFolder.file(`vector-${index + 1}.svg`, svg);\n });\n } catch (error) {\n console.error('Error adding images to ZIP:', error);\n return; // Exit method or handle error as needed\n }\n }\n if (videoUrls.length > 0) {\n const videoFolder = zip.folder('vids');\n try {\n for (const videoUrl of videoUrls) {\n const base64Video = await getBase64Media(videoUrl);\n videoFolder.file(videoUrl.substring(videoUrl.lastIndexOf('/') + 1), base64Video, { base64: true });\n }\n } catch (error) {\n console.error('Error adding videos to ZIP:', error);\n return;\n }\n }\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 imageUrls.length = audioUrls.length = videoUrls.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}\nasync function share() {\n try {\n // Compile code if necessary\n const javascriptCode = project.javascript_pre_processor === 'jsxtypescript'\n ? data.compiledJSX\n : project.javascript;\n\n let jsPreprocessor = null;\n if (project.javascript_pre_processor === 'jsxtypescript' || project.javascript_pre_processor === 'javascript') {\n jsPreprocessor = \"none\";\n } else {\n jsPreprocessor = project.javascript_pre_processor;\n }\n\n const shareProject = {\n title: project.title,\n description: project.description,\n head: project.meta,\n html: project.html,\n html_pre_processor: project.html_pre_processor === \"html\" ? \"none\" : \"\",\n css: project.css,\n css_pre_processor: project.css_pre_processor === \"css\" ? \"none\" : \"\",\n css_external: project.libraries.filter(lib => lib.endsWith('.css')).join(';'),\n css_starter: \"neither\",\n css_prefix: \"neither\",\n js_module: project.module,\n js: javascriptCode,\n js_pre_processor: jsPreprocessor,\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 // 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 } catch (error) {\n console.error('Error sharing project:', error);\n }\n}\n\nasync function screenshot() {\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}\nasync function renderPreview(forceRun = false) {\n if (!forceRun || !project.autorun || !data.safeRender) return;\n\n if (data.safeRender) {\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 const javascriptCode = await compileCode('javascript');\n const cssCode = await compileCode('css');\n const consoleCSS = `\n [data-zwj=zwjkonsole] {\n display: ${project.console ? 'flex' : 'none'};\n }`\n const iframeSrc = `\n \n
${project.title} \n
\n
\n
\n
\n ${project.meta ? project.meta : ''}\n ${cssTags}\n \n \n \n \n ${await compileCode('html')}\n ${scriptTags ? scriptTags : ''}\n ${project.css_pre_processor === 'less' ? '' : ''}\n \n`;\n\n const iframe = document.getElementById('iframe');\n if (!iframe) return;\n\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 && !App.initialRender) {\n diffNodes(idoc.documentElement, doc.documentElement);\n return false;\n } else {\n iframe.setAttribute('srcdoc', iframeSrc);\n iframe.onload = () => {\n // Initialize script within the iframe\n const idoc = iframe.contentDocument || iframe.contentWindow.document;\n const script = idoc.createElement('script');\n script.id = \"zzkiapxab\";\n script.type = project.module ? 'module' : 'text/javascript';\n script.textContent = javascriptCode;\n idoc.body.appendChild(script);\n };\n }\n }\n}\n\n// Make functions available in global space\nwindow.Modal = Modal;\nwindow.emptyStorage = emptyStorage;\nwindow.addLibrary = addLibrary;\nwindow.fetchSuggestions = fetchSuggestions;\nwindow.setPreprocessor = setPreprocessor;\nwindow.initializePreprocessors = initializePreprocessors;\nwindow.loadBeautifyLibraries = loadBeautifyLibraries\nwindow.removeBeautifyLibraries = removeBeautifyLibraries;\nwindow.tidy = tidy;\nwindow.generateId = generateId;\nwindow.resizeCanvas = resizeCanvas;\nwindow.rotateCanvas = rotateCanvas;\nwindow.defineScale = defineScale;\nwindow.getIFrameClientSize = getIFrameClientSize;\nwindow.handleLogoChange = handleLogoChange;\nwindow.newProject = newProject;\nwindow.importProject = importProject;\nwindow.downloadJSON = downloadJSON;\nwindow.downloadProject = downloadProject;\nwindow.share = share;\nwindow.screenshot = screenshot;\nwindow.renderPreview = renderPreview;\n\n// Diffing algorithm to update ui when changes occur\nfunction 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 if (window.initEditors) initEditors();\n getIFrameClientSize();\n\n if (localStorage.getItem('kodeWeave')) {\n setTimeout(function() {\n importJSON(JSON.parse(localStorage.getItem('kodeWeave')));\n }, 100);\n } else {\n data.safeRender = true;\n }\n }\n window.onresize = () => getIFrameClientSize();\n});"],
- "mappings": "gQACA,SAASA,EAASC,EAAQC,EAAUC,EAAO,CAAC,EAAG,CAC7C,SAASC,EAAYH,EAAQE,EAAM,CACjC,OAAI,OAAOF,GAAW,UAAYA,IAAW,KACpCA,EAGF,IAAI,MAAMA,EAAQ,CACvB,IAAII,EAAKC,EAAUC,EAAO,CACxB,IAAMC,EAAW,CAAC,GAAGL,EAAMG,CAAQ,EAC7BG,EAAWJ,EAAIC,CAAQ,EACvBI,EAAS,QAAQ,IAAIL,EAAKC,EAAUF,EAAYG,EAAOC,CAAQ,CAAC,EAEtE,OAAIC,IAAaF,GACfL,EAASM,EAAUC,EAAUF,CAAK,EAG7BG,CACT,EACA,IAAIL,EAAKC,EAAU,CACjB,IAAMC,EAAQF,EAAIC,CAAQ,EAC1B,OAAI,OAAOC,GAAU,UAAYA,IAAU,KAClCH,EAAYG,EAAO,CAAC,GAAGJ,EAAMG,CAAQ,CAAC,EAExCC,CACT,CACF,CAAC,CACH,CAEA,OAAOH,EAAYH,EAAQE,CAAI,CACjC,CAGA,IAAIQ,EAAM,CACR,KAAM,YACN,OAAQ,CACN,KAAM,mBACN,KAAM,6BACN,IAAK,iBACP,EACA,QAAS,MACT,IAAK,8CACL,QAAS,8DACX,EACIC,GAAI,CACN,KAAM,WACN,QAAS,IACT,MAAO,sBACP,YAAa,wCACb,OAAQ,YACR,IAAK,6BACL,KAAM,GACN,UAAW,CAAC,EACZ,mBAAoB,OACpB,kBAAmB,MACnB,yBAA0B,aAC1B,KAAM,GACN,IAAK,GACL,WAAY,GACZ,KAAM,q+IACN,QAAS,GACT,KAAM,GACN,OAAQ,GACR,QAAS,GACT,IAAK,GACL,QAAS,GACT,YAAa,OACb,QAAS,GACT,aAAc,EAChB,EACIC,GAAI,CACN,aAAc,KACd,mBAAoB,KACpB,WAAY,KACZ,YAAa,OACb,aAAc,OACd,YAAa,KACb,WAAY,KACZ,SAAU,KACV,UAAW,KACX,WAAY,KACZ,MAAO,IACT,EACMC,EAAS,UAAW,CACxB,IAAMC,EAAiB,UACjBC,EAAa,UACbC,EAAe,UACfC,EAAe,UACfC,EAAiB,YAEvB,MAAO,CACL,KAAM;AAAA,eACKJ,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YA4DzB,YAAa,eAAeA,CAAc;AAAA;AAAA,YAG1C,QAAS,eAAeA,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YA+BtC,MAAO;AAAA;AAAA,YAGP,KAAM,eAAeA,CAAc;AAAA;AAAA;AAAA,cAInC,IAAK,eAAeA,CAAc;AAAA;AAAA;AAAA,cAIlC,WAAY,eAAeA,CAAc;AAAA;AAAA;AAAA,cAIzC,QAAS,eAAeA,CAAc;AAAA;AAAA,YAGtC,SAAU,eAAeA,CAAc;AAAA;AAAA,YAGvC,UAAW,eAAeA,CAAc;AAAA;AAAA,YAGxC,QAAS,eAAeA,CAAc;AAAA;AAAA;AAAA,YAItC,KAAM,eAAeA,CAAc;AAAA;AAAA,YAGnC,OAAQ,eAAeA,CAAc;AAAA;AAAA;AAAA,YAIrC,IAAK,eAAeA,CAAc;AAAA;AAAA;AAAA,YAIlC,KAAM,eAAeI,CAAc;AAAA;AAAA,YAGnC,OAAQ,eAAeA,CAAc;AAAA;AAAA,YAGrC,MAAO,eAAeF,CAAY;AAAA;AAAA,YAGlC,KAAM;AAAA;AAAA,YAGN,OAAQ;AAAA;AAAA,YAGR,SAAU;AAAA;AAAA,YAGV,QAAS;AAAA;AAAA,YAGT,MAAO,eAAeC,CAAY;AAAA;AAAA,YAGlC,KAAM,eAAeF,CAAU;AAAA;AAAA,YAG/B,KAAM,eAAeA,CAAU;AAAA;AAAA,YAG/B,IAAK,eAAeA,CAAU;AAAA;AAAA,YAG9B,KAAM,eAAeA,CAAU;AAAA;AAAA,YAG/B,MAAO,eAAeA,CAAU;AAAA;AAAA,YAGhC,OAAQ,eAAeA,CAAU;AAAA;AAAA,YAGjC,QAAS,eAAeA,CAAU;AAAA;AAAA,YAGlC,OAAQ,eAAeA,CAAU;AAAA;AAAA,YAGjC,KAAM,eAAeA,CAAU;AAAA;AAAA,YAG/B,QAAS,eAAeA,CAAU;AAAA;AAAA,YAGlC,KAAM,eAAeD,CAAc;AAAA;AAAA,YAGnC,OAAQ,eAAeA,CAAc;AAAA;AAAA,YAGrC,OAAQ,eAAeA,CAAc;AAAA;AAAA,WAGvC,CACF,EAAG,EAGGK,EAAUpB,EAASY,GAAG,CAACN,EAAUG,EAAUY,IAAa,CAE5D,IAAMC,EADS,SAAS,eAAe,QAAQ,EAC5B,cAAc,SACjC,GAAIb,IAAaY,EAAU,CAGzB,GAFA,aAAa,QAAQ,YAAa,KAAK,UAAUD,CAAO,CAAC,EACzDG,EAAI,OAAO,MAAM,EACbjB,EAAS,SAAS,IAAM,cAAe,CACzC,GAAI,CAAC,OAAO,cAAe,OACvBc,EAAQ,cAAgB,QAAQ,gBAAgB,cAAc,UAAU,EACxEA,EAAQ,cAAgB,OAAO,gBAAgB,cAAc,SAAS,EACtEA,EAAQ,cAAgB,cAAc,gBAAgB,cAAc,gBAAgB,CAC1F,CACA,GAAI,CAACG,EAAI,cAAe,CACtB,IAAIC,EAASlB,EAAS,SAAS,EAE/B,GAAIkB,IAAW,OAASA,IAAW,UAAW,CAC5C,IAAIC,EAAa;AAAA;AAAA,mBAENL,EAAQ,QAAU,OAAS,MAAM;AAAA;AAAA;AAAA,QAG5CA,EAAQ,GAAG,GAGX,GAFAE,EAAI,eAAe,WAAW,EAAE,YAAcG,EAE1C,CAAC,OAAO,cAAe,OACvBD,IAAW,OAAS,cAAc,UAAU,MAAM,IAAI,SAAS,IAAMJ,EAAQ,KAC/E,gBAAgB,cAAc,UAAWA,EAAQ,GAAG,CAExD,CAEA,GAAII,IAAW,OAAQ,CAErB,GADIJ,EAAQ,SAASM,EAAc,EAAI,EACnC,CAAC,OAAO,cAAe,OACvB,OAAO,cAAc,WAAW,MAAM,IAAI,SAAS,IAAMN,EAAQ,MACnE,gBAAgB,cAAc,WAAYA,EAAQ,IAAI,CAE1D,CAEA,GAAII,IAAW,aAAc,CAE3B,GADIJ,EAAQ,SAASM,EAAc,EAAI,EACnC,CAAC,OAAO,cAAe,OACvB,OAAO,cAAc,SAAS,MAAM,IAAI,SAAS,IAAMN,EAAQ,YACjE,gBAAgB,cAAc,SAAUA,EAAQ,UAAU,CAE9D,EAEII,IAAW,QAAUA,IAAW,aAAeA,IAAW,sBAAwBA,IAAW,qBAAuBA,IAAW,6BAC7HJ,EAAQ,SAASM,EAAc,EAAI,EAErCF,IAAW,SACbD,EAAI,OAAO,MAAM,EACjB,SAAS,gBAAgB,aAAa,aAAcH,EAAQ,KAAO,OAAS,OAAO,EACnFE,EAAI,gBAAgB,aAAa,aAAcF,EAAQ,KAAO,OAAS,OAAO,EAC9E,SAAS,cAAc,kDAAkD,EAAE,aAAa,UAAWA,EAAQ,KAAO,oBAAsB,SAAS,EACjJ,SAAS,cAAc,wBAAwB,EAAE,aAAa,UAAWA,EAAQ,KAAO,UAAY,SAAS,EAC7G,SAAS,cAAc,0CAA0C,EAAE,aAAa,UAAWA,EAAQ,KAAO,UAAY,SAAS,EAEnI,CACF,CACF,CAAC,EACKO,EAAO3B,EAASa,GAAG,CAACP,EAAUG,EAAUY,IAAa,CAErDZ,IAAaY,GAAUE,EAAI,OAAO,MAAM,CAC9C,CAAC,EACD,OAAO,QAAUH,EACjB,OAAO,KAAOO,EAGd,SAASC,IAAc,CACrB,IAAMC,EAAa,SAEnB,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKMA,CAAU;AAAA;AAAA;AAAA;AAAA,QAIjBf,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOHe,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA,QAKjBf,EAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eASNe,CAAU;AAAA;AAAA,QAEjBf,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAYJe,CAAU,yDAAyDT,EAAQ,cAAgB,OAAS,gBAAkB,EAAE;AAAA,QAC/HA,EAAQ,cAAgB,OAAS,GAAK,uBAAuB;AAAA;AAAA;AAAA,QAG7DN,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOHe,CAAU,yDAAyDT,EAAQ,cAAgB,MAAQ,gBAAkB,EAAE;AAAA,QAC9HA,EAAQ,cAAgB,MAAQ,GAAK,uBAAuB;AAAA;AAAA;AAAA,QAG5DN,EAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOFe,CAAU,yDAAyDT,EAAQ,cAAgB,aAAe,gBAAkB,EAAE;AAAA,QACrIA,EAAQ,cAAgB,aAAe,GAAK,uBAAuB;AAAA;AAAA;AAAA,QAGnEN,EAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAYTe,CAAU,yDAAyDT,EAAQ,QAAU,gBAAkB,EAAE;AAAA;AAAA;AAAA,QAGhHN,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOHe,CAAU,0DAA0DT,EAAQ,QAAU,iBAAmB,EAAE;AAAA;AAAA,eAE3GA,EAAQ,KAAO,GAAK,GAAGA,EAAQ,QAAU,GAAK,eAAe,EAAE;AAAA;AAAA,QAEtEN,EAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAONe,CAAU;AAAA;AAAA;AAAA;AAAA,QAIjBf,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOLe,CAAU;AAAA;AAAA;AAAA;AAAA,QAIjBf,EAAM,GAAG;AAAA;AAAA;AAAA,MAIjB,CACA,SAASgB,IAAc,CACrB,IAAMC,EAAc,kCACdC,EAAc,sDACdC,EAAc,mBAEdC,EAAc,CAClB,OAAQ,CACN,UAAW,aACX,UAAW,eACX,UAAW,oBACX,UAAW,qBACX,UAAW,iCACX,UAAW,oBACX,UAAW,qBACX,YAAa,2BACb,YAAa,iBACb,YAAa,gBACb,YAAa,qBACb,YAAa,mBACf,EACA,QAAS,CACP,YAAa,+BACb,YAAa,iCACb,YAAa,0BACb,YAAa,yBACb,YAAa,qBACb,YAAa,qBACb,YAAa,oBACb,YAAa,qBACb,YAAa,qBACb,YAAa,uBACb,YAAa,qBACf,EACA,SAAU,CACR,YAAa,qBACb,YAAa,mBACb,YAAa,sBACb,WAAY,oBACZ,YAAa,4BACb,YAAa,wBACb,WAAY,qBACZ,YAAa,0BACb,YAAa,gCACf,CACF,EAEMC,EAAc;AAAA,2EACqDH,CAAW,YAAYC,CAAW;AAAA;AAAA,QAErG,OAAO,KAAKC,CAAW,EAAE,IAAIE,GAAS;AAAA,2BACnBA,CAAK;AAAA,YACpB,OAAO,KAAKF,EAAYE,CAAK,CAAC,EAAE,IAAIC,GAAU;AAAA,6BAC7BA,CAAM,KAAKH,EAAYE,CAAK,EAAEC,CAAM,CAAC;AAAA,WACvD,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,OAEd,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,YAIf,SAASC,GAAc,CAErB,GADI,CAAClB,EAAQ,aACTA,EAAQ,cACNA,EAAQ,cAAgB,QACtBA,EAAQ,qBAAuB,QAIjCA,EAAQ,cAAgB,OACtBA,EAAQ,oBAAsB,OAIhCA,EAAQ,cAAgB,cACtBA,EAAQ,2BAA6B,cACvC,MAAO,QAIf,CAEA,MAAO;AAAA,IACLe,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAOEJ,CAAW,IAAIJ,EAAK,eAAiB,OAAS,SAAW,EAAE;AAAA;AAAA;AAAA,UAGlEb,EAAM,MAAM;AAAA;AAAA;AAAA,2BAGKM,EAAQ,YAAc,GAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,iBAI7CW,CAAW;AAAA,+BACGX,EAAQ,QAAU,GAAK,2BAA2B;AAAA;AAAA;AAAA,UAGvEN,EAAM,OAAO;AAAA;AAAA;AAAA,2BAGIM,EAAQ,YAAc,GAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,iBAI7CW,CAAW,WAAWX,EAAQ,YAAc,GAAGA,EAAQ,QAAU,GAAK,iBAAiB,GAAK,EAAE;AAAA;AAAA;AAAA;AAAA,UAIrGA,EAAQ,aAAeN,EAAM,SAAWA,EAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAOhDiB,CAAW,IAAIO,EAAY,CAAC;AAAA;AAAA;AAAA,UAGnCxB,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAOHiB,CAAW,IAAIX,EAAQ,QAAU,SAAW,EAAE;AAAA;AAAA;AAAA;AAAA,UAIrDN,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA,OAKpB,CACA,IAAMS,EAAM,CACV,cAAe,GACf,OAAOgB,EAAW,CAEhB,IAAMC,EAAOb,EAAK,aACdc,EAAeC,EACbC,EAAa,SAAS,eAAe,YAAY,EACnD,SAAS,eAAe,YAAY,IACtCF,EAAgBE,EAAW,YAC3BD,EAAiBC,EAAW,cAE9B,GAAI,CAACC,EAAOC,CAAM,EAAIL,EAAK,MAAM,GAAG,EAAE,IAAI,MAAM,EAE5CM,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAQWnC,EAAI,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAQPA,EAAI,IAAI;AAAA;AAAA;AAAA,kCAGNA,EAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKbA,EAAI,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBA8EvCmC,EAAa,WAAWnB,EAAK,WAAa,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAWvCb,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA,gBAIbgC,CAAU;AAAA;AAAA;AAAA;AAAA,kGAIwE1B,EAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAUlJ,IAAI2B,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAmBN3B,EAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAoBnBA,EAAQ,KAAO,UAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAmB7BA,EAAQ,OAAS,UAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAmB/BA,EAAQ,QAAU,UAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAmBhCA,EAAQ,IAAM,UAAY,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAqB5BN,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,QAKdM,EAAQ,UAAU,IAAI,CAAC4B,EAASC,IAAU;AAAA,2DACSA,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAO7CD,CAAO;AAAA,uCACaC,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA,8CAKEA,CAAK;AAAA,YACvCnC,EAAM,KAAK;AAAA;AAAA;AAAA,KAGlB,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BA2BgBM,EAAQ,qBAAuB,OAAS,WAAa,EAAE;AAAA,mCACnDA,EAAQ,qBAAuB,WAAa,WAAa,EAAE;AAAA,8BAChEA,EAAQ,qBAAuB,MAAQ,WAAa,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAkBtDA,EAAQ,oBAAsB,MAAQ,WAAa,EAAE;AAAA,+BACpDA,EAAQ,oBAAsB,OAAS,WAAa,EAAE;AAAA,+BACtDA,EAAQ,oBAAsB,OAAS,WAAa,EAAE;AAAA,iCACpDA,EAAQ,oBAAsB,SAAW,WAAa,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qCAmBpDA,EAAQ,2BAA6B,aAAe,WAAa,EAAE;AAAA,gCACxEA,EAAQ,2BAA6B,QAAU,WAAa,EAAE;AAAA,qCACzDA,EAAQ,2BAA6B,aAAe,WAAa,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAgBzFA,EAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAkBZA,EAAQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAgBfA,EAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAgBrBA,EAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAcXA,EAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAgBdA,EAAQ,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAenBA,EAAQ,IAAI;AAAA;AAAA,OAGf2B,EAAe,WAAWpB,EAAK,SAAW,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAWvCb,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA,gBAIbiC,CAAY;AAAA;AAAA;AAAA;AAAA,kGAIsE3B,EAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAUlJ,IAAI8B,EAAkB,WAAWvB,EAAK,UAAY,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAW/Cb,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAaTa,EAAK,oBAAsBA,EAAK,aAAeA,EAAK,mBAAqB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kGAMGP,EAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAS5IW,EAAc,iFACdoB,EAAqB,uCACrBC,EAAoB,2BACpBC,EAAmB,8BAEnBC,EAAa,CACjB,aACA,aACA,QACA,MACA,SACA,UACA,SACA,QACA,WACA,UACA,WACA,UACA,KACF,EAEIC,EAAa,GACjB,QAAWC,KAAQF,EACjBC,GAAc;AAAA,8BACUC,CAAI;AAAA,wBACVA,CAAI;AAAA,qBACPzB,CAAW;AAAA;AAAA,mCAEGyB,CAAI;AAAA,0BACbL,CAAkB;AAAA,4BAChBC,CAAiB;AAAA,qEACwBI,CAAI,cAAcA,CAAI;AAAA;AAAA,4BAE/DH,CAAgB;AAAA,kBAC1BG,CAAI;AAAA;AAAA;AAAA,qBAMlB,IAAIC,EAAc,WAAW9B,EAAK,MAAQ,OAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAWvCb,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAOTyC,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kGAMoEnC,EAAQ,KAAO,kBAAoB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAU5IsC,EAAO;AAAA;AAAA;AAAA,YAGL9B,GAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gGAKuER,EAAQ,KAAO,kBAAoB,iBAAiB;AAAA,yDAC3FA,EAAQ,QAAU,WAAa,eAAeA,EAAQ,aAAe,sBAAwB,EAAE,EAAE;AAAA,kEACxFA,EAAQ,QAAU,GAAK,kCAAkCA,EAAQ,KAAO,kBAAoB,iBAAiB,EAAE,IAAIA,EAAQ,QAAU,GAAK,QAAQ;AAAA,uEAC7IA,EAAQ,KAAO,kBAAoB,iBAAiB;AAAA,oBACvGU,GAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAMFV,EAAQ,KAAK;AAAA,wCACJO,EAAK,eAAiB,OAAS,uBAAuBP,EAAQ,KAAO,kBAAoB,iBAAiB,8BAAgC,EAAE;AAAA,+BACrJO,EAAK,eAAiB,OAAS,4BAA8B;AAAA,eAC7EiB,CAAK;AAAA,gBACJC,CAAM;AAAA,yBACG,KAAK,IAAIJ,EAAgBG,EAAOF,EAAiBG,CAAM,CAAC;AAAA;AAAA;AAAA;AAAA,qBAI5DA,EAAS,CAAC;AAAA,sBACTD,EAAQ,CAAC,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uGAWmExB,EAAQ,KAAO,cAAgB,aAAa;AAAA,0BACzHO,EAAK,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,6DAKoBP,EAAQ,QAAU,GAAK,qDAAqDA,EAAQ,KAAO,kBAAoB,iBAAoB,IAAIA,EAAQ,YAAc,GAAK,QAAQ;AAAA;AAAA,wDAE/KA,EAAQ,QAAU,kCAAkCA,EAAQ,KAAO,kBAAoB,iBAAiB,GAAK,EAAE;AAAA,yCAC9HA,EAAQ,cAAgB,OAAS,GAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAQ9CA,EAAQ,cAAgB,MAAQ,GAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAQ7CA,EAAQ,cAAgB,aAAe,GAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uFASNA,EAAQ,KAAO,kBAAoB,iBAAiB;AAAA,sBACrHuC,GAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQvBb,CAAU;AAAA,UACVC,CAAY;AAAA,UACZG,CAAe;AAAA,UACfO,CAAW;AAAA,cAGXG,EAAU,SAAS,cAAcrB,CAAS,EAChD,GAAI,CAACqB,EAAS,OAId,IAAMtC,EADS,IAAI,UAAU,EACV,gBAAgBoC,EAAM,WAAW,EACpD,GAAIpC,EAAI,KAAK,UAAU,KAAK,IAAMoC,EAAK,KAAK,EAAG,OAC/C,GAAInC,EAAI,cACN,OAAAqC,EAAQ,UAAYF,EACpBhC,EAAc,EAAI,EAClBH,EAAI,cAAgB,GACb,GAIT,IAAMsC,EAAaD,EAAQ,kBACrBE,EAASxC,EAAI,KAAK,kBACxByC,EAAUF,EAAYC,CAAM,CAC9B,CACF,EACME,EAAQ,CACZ,OAAO,CACL,MAAAC,EACA,MAAAC,EAAQ,oCACR,QAAAC,EACA,WAAAC,EACA,aAAAC,EACA,OAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAAG,CAED,IAAMC,EAAS,wBACT1C,EAAc,qDAQd2B,EAAO,mBAAmBO,EAAQ,sBAAwB,EAAE;AAAA,uBAC/CA,EAAQ,YAAc,EAAE;AAAA,qBAC1BQ,CAAM,KAAKP,CAAK;AAAA,yBACZnC,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAILkC,EAAQ,YAAc,EAAE;AAAA,UAC7CE,GAAoB,EAAE;AAAA;AAAA,gBAEhBF,EAAQ,oBAAsB,EAAE;AAAA,yBACvBlC,CAAW,0BAA0BX,EAAQ,KAAO,kBAAoB,iBAAiB,uFAAuFgD,GAA0B,OAAO;AAAA,UAChOI,EAAY,kBAAkBzC,CAAW,0BAA0BsC,GAA8B,SAAS,YAAc,EAAE;AAAA;AAAA,gBAI1HK,EAAQ,SAAS,cAAc,QAAQ,EAC7CA,EAAM,KAAO,GACbA,EAAM,UAAYhB,EAElB,SAAS,KAAK,YAAYgB,CAAK,EAC3BJ,GAAU,OAAOA,GAAW,YAC9BA,EAAO,EAGT,IAAMK,EAAWD,EAAM,cAAc,eAAe,EAC9CE,EAAWF,EAAM,cAAc,2BAA2B,EAC1DG,EAAaH,EAAM,cAAc,0BAA0B,EAGjEC,EAAS,QAAU,UAAW,CACxBJ,GAAW,OAAOA,GAAY,YAChCA,EAAQ,EAEV,SAAS,KAAK,YAAYG,CAAK,CACjC,EACAE,EAAS,QAAU,UAAW,CACxBL,GAAW,OAAOA,GAAY,YAChCA,EAAQ,EAEV,SAAS,KAAK,YAAYG,CAAK,CACjC,EACAG,EAAW,QAAU,UAAW,CAC1BL,GAAa,OAAOA,GAAc,YACpCA,EAAU,EAEZ,SAAS,KAAK,YAAYE,CAAK,CACjC,CACF,CACF,EACA,SAASf,IAAY,CACnB,IAAM5B,EAAc,+BAEpB,MAAO;AAAA;AAAA;AAAA;AAAA,eAIMA,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,eAKLiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKNiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,eAKHiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,eAKHiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,eAKLiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAQHiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,eAKNiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,eAKHiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,eAKLiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,eAKFiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,eAKHiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,eAKJiB,CAAW;AAAA;AAAA;AAAA,QAGlBjB,EAAM,MAAM;AAAA;AAAA,SAGpB,CACA,SAASgE,IAAe,CAEtB,aAAa,WAAW,WAAW,EAGnC,eAAe,MAAM,EAGrB,SAAS,OAAO,MAAM,GAAG,EAAE,QAAQ,SAASC,EAAG,CAC7C,SAAS,OAASA,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EAAI,gDAC7C,CAAC,EAGG,WAAY,QACd,OAAO,KAAK,EAAE,KAAK,SAASC,EAAO,CACjC,QAASxB,KAAQwB,EAAO,OAAO,OAAOxB,CAAI,CAC5C,CAAC,EAIC,kBAAmB,WACrB,UAAU,cAAc,iBAAiB,EAAE,KAAK,SAASyB,EAAe,CACtE,QAASC,KAAgBD,EAAeC,EAAa,WAAW,CAClE,CAAC,EAGH,QAAQ,IAAI,uEAAuE,EACnF,SAAS,OAAO,CAClB,CAGA,IAAMC,GAAaC,GAAO,CACxB,GAAI,CAACA,EACH,OAAAhE,EAAQ,UAAU,KAAK,EAAE,EACzB,SAAS,eAAe,cAAc,EAAE,UAAYiE,EAAgB,EAC7D,GAGJjE,EAAQ,UAAU,SAASgE,CAAG,EAGjC,QAAQ,MAAM,2BAA2BA,CAAG,EAAE,EAF9ChE,EAAQ,UAAU,KAAKgE,CAAG,EAKxB,SAAS,eAAe,cAAc,IACxC,SAAS,eAAe,cAAc,EAAE,UAAYC,EAAgB,EAExE,EACA,SAASA,GAAkB,CACzB,OAAOjE,EAAQ,UAAU,IAAI,CAAC4B,EAASC,IAAU;AAAA,yDACMA,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAO7CD,CAAO;AAAA,qCACaC,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA,4CAKEA,CAAK;AAAA,UACvCnC,EAAM,KAAK;AAAA;AAAA;AAAA,GAGlB,EAAE,KAAK,EAAE,CACZ,CACA,SAASwE,GAAiBC,EAAK,CAC7B,MACE,0CAA0CA,CAAG,sCAC/C,EACG,KAAKC,GAAY,CAChB,GAAI,CAACA,EAAS,GACZ,MAAM,IAAI,MAAM,6BAA6B,EAE/C,OAAOA,EAAS,KAAK,CACvB,CAAC,EACA,KAAKC,GAAQ,CACZ,GAAIA,GAAQA,EAAK,SAAWA,EAAK,QAAQ,OAAS,EAAG,CACnD,IAAMC,EAAcD,EAAK,QAAQ,IAAI/E,GAAUA,CAAM,EAErDiB,EAAK,mBAAqB+D,EAAY,IAAIhF,GACjC;AAAA;AAAA;AAAA;AAAA,mDAIkCA,EAAO,MAAM,+BAA+BA,EAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAOlEA,EAAO,IAAI;AAAA,0CACXA,EAAO,OAAO;AAAA;AAAA,+CAETA,EAAO,WAAW;AAAA,uBAExD,EAAE,KAAK,EAAE,CACZ,CACF,CAAC,EACA,MAAMiF,GAAS,CACd,QAAQ,MAAM,uBAAwBA,CAAK,CAC7C,CAAC,CACL,CACA,SAASC,EAAaC,EAAK,CACzB,IAAMC,EAAS,SAAS,cAAc,eAAeD,CAAG,IAAI,EACxDC,GAAQA,EAAO,OAAO,CAC5B,CACA,SAASC,EAAcC,EAAS,CAC9BA,EAAQ,QAAQH,GAAO,CACrB,IAAMC,EAAS,SAAS,cAAc,eAAeD,CAAG,IAAI,EACxDC,GAAQA,EAAO,OAAO,CAC5B,CAAC,CACH,CACA,eAAeG,EAAWC,EAAW,CACnC,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAGtC,GADuB,SAAS,cAAc,eAAeF,CAAS,IAAI,EACtD,CAClBC,EAAQ,EACR,MACF,CAGA,IAAME,EAAgB,SAAS,cAAc,QAAQ,EACrDA,EAAc,IAAMH,EACpBG,EAAc,OAASF,EACvBE,EAAc,QAAU,IAAMD,EAAO,IAAI,MAAM,0BAA0BF,CAAS,EAAE,CAAC,EACrF,SAAS,KAAK,YAAYG,CAAa,CACzC,CAAC,CACH,CACA,eAAeC,EAAYC,EAAU,CACnC,OAAO,QAAQ,IAAIA,EAAS,IAAIN,CAAU,CAAC,CAC7C,CACA,eAAeO,EAAgBC,EAAQlG,EAAO,CAC5C,IAAMmG,EAAY,CAChB,KAAM,CACJ,SAAU,wCACV,KAAM,kCACN,IAAK,gCACP,EACA,IAAK,CACH,KAAM,2CACN,KAAM,sCACN,OAAQ,uCACV,EACA,WAAY,CACV,WAAY,4CACZ,MAAO,uCACP,cAAe,CACb,4CACA,sCACF,CACF,CACF,EAEMC,EAAuB,CAC3B,KAAMvF,EAAQ,mBACd,IAAKA,EAAQ,kBACb,WAAYA,EAAQ,wBACtB,EAEA,GAAI,CACF,IAAMwF,EAAsBrG,IAAU,QAAUA,IAAU,OAASA,IAAU,aACvEsG,EAAYD,EAAqBF,EAAUD,CAAM,EAAElG,CAAK,EAAI,KAGlE,GAAIoG,EAAqBF,CAAM,GAAKG,EAAoB,CACtD,IAAME,EAAmBJ,EAAUD,CAAM,EAAEE,EAAqBF,CAAM,CAAC,EACvE,MAAM,QAAQK,CAAgB,EAAIf,EAAce,CAAgB,EAAIlB,EAAakB,CAAgB,EAG7F,MAAM,QAAQD,CAAS,EACzB,MAAMP,EAAYO,CAAS,EAClBA,GACT,MAAMZ,EAAWY,CAAS,CAE9B,CAGA,GAAIJ,IAAW,OACbrF,EAAQ,mBAAqBb,UAGpBkG,IAAW,MACpBrF,EAAQ,kBAAoBb,UAGnBkG,IAAW,aAAc,CAElC,GADArF,EAAQ,yBAA2Bb,EAC/B,CAAC,OAAO,eAAiB,CAAC,OAAO,cAAc,SAAU,OAC7D,OAAO,cAAc,QAAQa,EAAQ,2BAA6B,aAAe,aAAeb,EAAO,cAAc,QAAQ,CAC/H,CACF,OAASoF,EAAO,CACd,QAAQ,MAAM,8BAA+BA,CAAK,CACpD,CACF,CACA,eAAeoB,IAA0B,CACvC,MAAM,QAAQ,IAAI,CAChBP,EAAgB,OAAQpF,EAAQ,kBAAkB,EAClDoF,EAAgB,MAAOpF,EAAQ,iBAAiB,EAChDoF,EAAgB,aAAcpF,EAAQ,wBAAwB,CAChE,CAAC,EAEI,OAAO,gBACZ,gBAAgB,cAAc,WAAYA,EAAQ,IAAI,EACtD,gBAAgB,cAAc,UAAWA,EAAQ,GAAG,EACpD,gBAAgB,cAAc,SAAUA,EAAQ,UAAU,EAC1DM,EAAc,EAAI,EACpB,CACA,eAAesF,GAAwB,CAMrC,MAAMV,EALoB,CACxB,wCACA,4CACA,4CACF,CACmC,CACrC,CACA,eAAeW,IAA0B,CAMvClB,EAL0B,CACxB,wCACA,4CACA,4CACF,CAC+B,CACjC,CACA,eAAemB,IAAO,CACpB,MAAMF,EAAsB,EAE5B,IAAIG,EACJ,OAAQ/F,EAAQ,YAAa,CAC3B,IAAK,OACH+F,EAAgB,cAAc/F,EAAQ,KAAM,CAC1C,YAAa,EACb,sBAAuB,CACzB,CAAC,EACD,gBAAgB,cAAc,WAAY+F,CAAa,EACvD,MACF,IAAK,MACHA,EAAgB,aAAa/F,EAAQ,IAAK,CACxC,YAAa,EACb,sBAAuB,CACzB,CAAC,EACDA,EAAQ,IAAM+F,EACd,gBAAgB,cAAc,UAAWA,CAAa,EACtD,MACF,IAAK,aACHA,EAAgB,YAAY/F,EAAQ,WAAY,CAC9C,YAAa,EACb,sBAAuB,CACzB,CAAC,EACDA,EAAQ,WAAa+F,EACrB,gBAAgB,cAAc,SAAUA,CAAa,EACrD,MACF,QACEA,EAAgB,uBACpB,CAEA,MAAMF,GAAwB,CAChC,CAGA,SAASG,IAAa,CACpB,IAAIC,EAAK,GACT,KAAO,CAAC,YAAY,KAAKA,CAAE,GACzBA,EAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAG,CAAC,EAE7C,OAAOA,CACT,CACA,SAASC,GAAa9E,EAAM,CAC1Bb,EAAK,aAAea,EACpB+E,EAAoB,CACtB,CACA,SAASC,IAAe,CACtB,IAAMC,EAAS,SAAS,eAAe,YAAY,EAAE,kBACrD,GAAIA,EAAO,MAAM,QAAU,OAAQ,MAAO,GAG1C,IAAI7E,EAAQ,SAAS6E,EAAO,MAAM,KAAK,EACnC5E,EAAS,SAAS4E,EAAO,MAAM,MAAM,EAGzC,CAAC7E,EAAOC,CAAM,EAAI,CAACA,EAAQD,CAAK,EAGhC,IAAMH,EAAgB,WAAW,YAC3BC,EAAiB,WAAW,aAC5BgF,EAAQ,KAAK,IAAIjF,EAAgBG,EAAOF,EAAiBG,CAAM,EAGrE4E,EAAO,MAAM,MAAQ,GAAG7E,CAAK,KAC7B6E,EAAO,MAAM,OAAS,GAAG5E,CAAM,KAC/B4E,EAAO,MAAM,UAAY,SAASC,CAAK,IACvCD,EAAO,MAAM,UAAY,IAAI5E,EAAS,CAAC,KACvC4E,EAAO,MAAM,WAAa,IAAI7E,EAAQ,CAAC,KACvCjB,EAAK,aAAeiB,EAAM,IAAIC,CAChC,CACA,SAAS8E,IAAc,CACrB,IAAMF,EAAS,SAAS,eAAe,YAAY,EAAE,kBACrD,GAAIA,EAAO,MAAM,QAAU,OAAQ,MAAO,GAG1C,IAAI7E,EAAQ,SAAS6E,EAAO,MAAM,KAAK,EACnC5E,EAAS,SAAS4E,EAAO,MAAM,MAAM,EAGnChF,EAAgB,WAAW,YAC3BC,EAAiB,WAAW,aAC5BgF,EAAQ,KAAK,IAAIjF,EAAgBG,EAAOF,EAAiBG,CAAM,EAGrE4E,EAAO,MAAM,MAAQ,GAAG7E,CAAK,KAC7B6E,EAAO,MAAM,OAAS,GAAG5E,CAAM,KAC/B4E,EAAO,MAAM,UAAY,SAASC,CAAK,IACvCD,EAAO,MAAM,UAAY,IAAI5E,EAAS,CAAC,KACvC4E,EAAO,MAAM,WAAa,IAAI7E,EAAQ,CAAC,IACzC,CACA,IAAIgF,EACJ,SAASL,GAAsB,CAC7B,GAAI5F,EAAK,eAAiB,OAAQ,CAChC,IAAM8F,EAAS,SAAS,eAAe,QAAQ,EAC/C9F,EAAK,WAAa,GAAG8F,EAAO,WAAW,QAAQA,EAAO,YAAY,KAClE,IAAM7D,EAAU,SAAS,eAAe,kBAAkB,EAEtDA,EAAQ,UAAU,SAAS,QAAQ,IAEjCgE,GAAa,aAAaA,CAAW,EAGzChE,EAAQ,UAAU,OAAO,SAAU,WAAW,EAC9CA,EAAQ,UAAU,IAAI,aAAa,EAGnCgE,EAAc,WAAW,IAAM,CAC7BhE,EAAQ,UAAU,OAAO,aAAa,EACtCA,EAAQ,UAAU,IAAI,WAAW,EAGjC,WAAW,IAAM,CACfA,EAAQ,UAAU,IAAI,QAAQ,CAChC,EAAG,GAAG,CACR,EAAG,GAAI,EAEX,MACE+D,GAAY,CAEhB,CACA,eAAeE,EAAYC,EAAQ,CACjC,GAAI,CACF,GAAIA,IAAW,OACb,OAAQ1G,EAAQ,mBAAoB,CAClC,IAAK,WACH,OAAO,OAAO,MAAMA,EAAQ,IAAI,EAClC,IAAK,OACH,OAAO,KAAK,OAAOA,EAAQ,KAAM,CAAE,OAAQ,EAAK,CAAC,EACnD,IAAK,MACH,IAAM2G,EAAY,SAAS,eAAe,WAAW,EACrD,OAAIA,EAAU,aAAa,MAAM,GAAKA,EAAU,aAAa,MAAM,IAAM,UAEvE,QAAQ,MAAM,0CAA0C,EACjD,IAGG,GAAQ,KAAK,EACd,QAAQ3G,EAAQ,IAAI,EAAE,CAAC,KAAM,KAAK,IAAK,CAAC,EACrD,QACE,OAAOA,EAAQ,IACnB,CAGF,GAAI0G,IAAW,MACb,OAAQ1G,EAAQ,kBAAmB,CACjC,IAAK,SACH,OAAO,OAAO,OAAOA,EAAQ,GAAG,EAClC,IAAK,OACH,OAAO,IAAI,QAAQ,CAAC+E,EAASC,IAAW,CACtC,KAAK,OAAOhF,EAAQ,IAAK,CAAC4G,EAAKC,IAAWD,EAAM5B,EAAO4B,CAAG,EAAI7B,EAAQ8B,EAAO,GAAG,CAAC,CACnF,CAAC,EACH,IAAK,OACH,OAAO,IAAI,QAAQ,CAAC9B,EAASC,IAAW,CACtC,KAAK,QAAQhF,EAAQ,IAAKV,GAAUA,EAAO,SAAW,EAAIyF,EAAQzF,EAAO,IAAI,EAAI0F,EAAO,IAAI,MAAM1F,EAAO,OAAO,CAAC,CAAC,CACpH,CAAC,EACH,QACE,OAAOU,EAAQ,GACnB,CAGF,GAAI0G,IAAW,aACb,OAAQ1G,EAAQ,yBAA0B,CACxC,IAAK,QACH,OAAI,OAAO,MAAU,KACnB,MAAM6E,EAAW,sCAAsC,EAElD,MAAM,UAAU7E,EAAQ,WAAY,CAAE,QAAS,CAAC,MAAO,OAAO,CAAE,CAAC,EAAE,KAC5E,IAAK,aACH,OAAO,GAAG,gBAAgBA,EAAQ,WAAY,CAAE,gBAAiB,CAAE,OAAQ,GAAG,WAAW,QAAS,CAAE,CAAC,EAAE,WACzG,IAAK,gBACH,IAAMV,EAAS,GAAG,gBAAgBU,EAAQ,WAAY,CACpD,gBAAiB,CAAE,OAAQ,GAAG,WAAW,SAAU,OAAQ,GAAG,aAAa,IAAK,IAAK,GAAG,QAAQ,KAAM,CACxG,CAAC,EAAE,WACH,OAAAO,EAAK,YAAc,MAAM,UAAUjB,EAAQ,CACzC,QAAS,CAAC,MAAO,OAAO,CAC1B,CAAC,EAAE,KACIiB,EAAK,YACd,QACE,OAAOP,EAAQ,UACnB,CAEJ,OAASuE,EAAO,CACd,QAAQ,MAAM,wBAAyBA,CAAK,CAC9C,CACF,CAGA,eAAeuC,GAAiBC,EAAO,CACrC,IAAMC,EAAOD,EAAM,OAAO,MAAM,CAAC,EACjC,GAAKC,EAEL,GAAI,CAEF,IAAMC,EAAe,MAAMC,GAAaF,CAAI,EAE5ChH,EAAQ,KAAOiH,CACjB,OAAS1C,EAAO,CACd,QAAQ,MAAM,oCAAqCA,CAAK,CAC1D,CACF,CACA,SAAS2C,GAAaF,EAAM,CAC1B,OAAO,IAAI,QAAQ,CAACjC,EAASC,IAAW,CACtC,IAAMmC,EAAS,IAAI,WACnBA,EAAO,cAAcH,CAAI,EACzBG,EAAO,OAAS,IAAMpC,EAAQoC,EAAO,MAAM,EAC3CA,EAAO,QAAU5C,GAASS,EAAOT,CAAK,CACxC,CAAC,CACH,CAEA,SAAS6C,GAAWhF,EAAM,CACxB,SAASiF,EAAsBjH,EAAQ,CACrC,OAAOA,EAAO,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAO,MAAM,CAAC,CACxD,CACA,IAAMkH,EAAmBD,EAAsBjF,CAAI,EACnDgD,EAAgB,OAAQ,MAAM,EAC9BA,EAAgB,MAAO,KAAK,EACxBhD,IAAS,cAAcgD,EAAgB,aAAc,YAAY,GACjEhD,IAAS,cAAgBA,IAAS,YAAWgD,EAAgB,aAAc,YAAY,EAC3FpF,EAAQ,KAAO,GAAGsH,CAAgB,QAClCtH,EAAQ,QAAU,IAClBA,EAAQ,MAAQ,UAAUsH,CAAgB,OAC1CtH,EAAQ,YAAc,YAAYsH,CAAgB,gBAClDtH,EAAQ,OAAS,YACjBA,EAAQ,IAAM,6BACdA,EAAQ,OAAS,GACjBA,EAAQ,QAAU,GACdoC,IAAS,YAAWpC,EAAQ,OAAS,IACzCA,EAAQ,IAAM,GAEVoC,IAAS,eACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,oEACA,8DACF,EACAA,EAAQ,KAAO;AAAA,yDAC+BsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,QAM9DtH,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASnBoC,IAAS,eACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,oEACA,8DACF,EACAA,EAAQ,KAAO;AAAA,yDAC+BsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,QAM9DtH,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWnBoC,IAAS,UACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,0DACA,kEACA,oEACA,8DACF,EACAA,EAAQ,KAAO,wBACfA,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iEASiCsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAgBpElF,IAAS,QACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,2EACA,oEACA,8DACF,EACAA,EAAQ,KAAO,wBACfA,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA,mCAIGsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBA0BtClF,IAAS,WACXpC,EAAQ,KAAO,8FACfA,EAAQ,UAAY,CAClB,qDACA,oEACA,8DACF,EACAA,EAAQ,KAAO,wBACfA,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6DAQ6BsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gEAehElF,IAAS,eACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,uEACA,oEACA,8DACF,EACAA,EAAQ,KAAO;AAAA,2DACiCsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUlEtH,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQjBoC,IAAS,YACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,oEACA,+DACA,6DACA,oEACA,iEACA,qEACA,qFACA,qGACA,oEACA,8DACF,EACAA,EAAQ,KAAO,kCACfA,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6DAU6BsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uDA6BhElF,IAAS,WACXpC,EAAQ,KAAO,8FACfA,EAAQ,UAAY,CAClB,oEACA,8DACF,EACAA,EAAQ,KAAO;AAAA;AAAA,2DAEiCsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUhEtH,EAAQ,IAAM,GACdA,EAAQ,WAAa,IAEnBoC,IAAS,UACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,oEACA,8DACF,EACAA,EAAQ,KAAO,wBACfA,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6DAU6BsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAWhElF,IAAS,aACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,6EACA,6FACA,oEACA,8DACF,EACAA,EAAQ,KAAO;AAAA,yDAC+BsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAShEtH,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAejBoC,IAAS,YACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,4DACA,oEACA,8DACF,EACAA,EAAQ,KAAO,wBACfA,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gDAkBnBoC,IAAS,aACXpC,EAAQ,KAAO,6DACfA,EAAQ,UAAY,CAClB,oEACA,8DACF,EACAA,EAAQ,KAAO,sBACfA,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAcnBoC,IAAS,YACXpC,EAAQ,KAAO,6EACfA,EAAQ,UAAY,CAClB,oEACA,8DACF,EACAA,EAAQ,KAAO;AAAA;AAAA,2DAEiCsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAShEtH,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKHsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAWhClF,IAAS,QACXpC,EAAQ,KAAO,GACfA,EAAQ,UAAY,CAClB,mEACF,EACAA,EAAQ,KAAO,4BACfA,EAAQ,IAAM,GACdA,EAAQ,WAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAmBDsH,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDAYtC,gBAAgB,cAAc,WAAYtH,EAAQ,IAAI,EACtD,gBAAgB,cAAc,UAAWA,EAAQ,GAAG,EACpD,gBAAgB,cAAc,SAAUA,EAAQ,UAAU,EACtDoC,IAAS,SAASgD,EAAgB,aAAc,OAAO,EAC3D7E,EAAK,MAAQ,GACbD,EAAc,EAAI,CACpB,CACA,SAASiH,GAAWtI,EAAK,CACnBA,IAAQ,OACZe,EAAQ,IAAM,CAAC,EACXO,EAAK,aAAYA,EAAK,WAAa,MACvC6E,EAAgB,OAAQnG,EAAI,kBAAkB,EAC9CmG,EAAgB,MAAOnG,EAAI,iBAAiB,EAC5CmG,EAAgB,aAAcnG,EAAI,wBAAwB,EAC1De,EAAQ,KAAOf,EAAI,KACnBe,EAAQ,QAAUf,EAAI,QACtBe,EAAQ,MAAQf,EAAI,MACpBe,EAAQ,YAAcf,EAAI,YAC1Be,EAAQ,OAASf,EAAI,OACrBe,EAAQ,IAAMf,EAAI,IAClBe,EAAQ,KAAOf,EAAI,KACnBe,EAAQ,QAAUf,EAAI,QACtBe,EAAQ,KAAOf,EAAI,KACnBe,EAAQ,OAASf,EAAI,OACrBe,EAAQ,QAAUf,EAAI,QACtBe,EAAQ,IAAMf,EAAI,IAClBe,EAAQ,YAAcf,EAAI,YAC1Be,EAAQ,QAAUf,EAAI,QACtBe,EAAQ,QAAUf,EAAI,QACtBe,EAAQ,aAAef,EAAI,aAE3Be,EAAQ,KAAOf,EAAI,KACnBe,EAAQ,UAAYf,EAAI,UACxBe,EAAQ,KAAOf,EAAI,KACnBe,EAAQ,IAAMf,EAAI,IAClBe,EAAQ,WAAaf,EAAI,WAGrB,OAAO,gBACT,gBAAgB,cAAc,WAAYe,EAAQ,IAAI,EACtD,gBAAgB,cAAc,UAAWA,EAAQ,GAAG,EACpD,gBAAgB,cAAc,SAAUA,EAAQ,UAAU,GAG5DO,EAAK,WAAa,GAClBD,EAAc,EAAI,EACpB,CACA,SAASkH,IAAgB,CACvB5E,EAAM,OAAO,CACX,MAAO,+CACP,QAAS,oEACT,QAAS,UAAY,CACnBrC,EAAK,WAAa,EACpB,EACA,UAAW,UAAW,CACpB,IAAMkH,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,KAAO,OACbA,EAAM,OAAS,QAEfA,EAAM,iBAAiB,SAAWV,GAAU,CAC1C,IAAMC,EAAOD,EAAM,OAAO,MAAM,CAAC,EAEjC,GAAI,CAACC,EAAM,CACT,QAAQ,MAAM,mBAAmB,EACjC,MACF,CAEA,IAAMG,EAAS,IAAI,WAEnBA,EAAO,OAASJ,GAAS,CACvB,GAAI,CACFQ,GAAW,KAAK,MAAMR,EAAM,OAAO,MAAM,CAAC,CAC5C,OAASxC,EAAO,CACd,QAAQ,MAAM,2BAA4BA,CAAK,CACjD,CACF,EAEA4C,EAAO,WAAWH,CAAI,EACtBS,EAAM,OAAO,CACf,CAAC,EAEDA,EAAM,MAAM,CACd,CACF,CAAC,CACH,CAEA,SAASC,EAAmB1D,EAAK,CAE/B,IAAM2D,EAAW3D,EAAI,UAAUA,EAAI,YAAY,GAAG,EAAI,CAAC,EAGjD4D,EAAgBD,EAAS,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY,EAoBtDE,EAjBY,CAChB,KAAQ,aACR,IAAO,aACP,IAAO,YACP,IAAO,YACP,IAAO,YACP,KAAQ,aACR,IAAO,gBACP,IAAO,aACP,IAAO,YACP,IAAO,YACP,IAAO,YACP,KAAQ,aACR,IAAO,WACT,EAG2BD,CAAa,GAAK,2BAE7C,MAAO,CACL,SAAAD,EACA,SAAAE,CACF,CACF,CACA,SAASC,GAAe7I,EAAK,CAC3B,GAAI,CAEF,IAAM8I,EADM,IAAI,UAAU,EAAE,gBAAgB9I,EAAI,KAAM,WAAW,EAChD,KAEX+I,EAAY,CAAC,EACbC,EAAY,CAAC,EACbC,EAAU,CAAC,EACXC,EAAY,CAAC,EAGnB,OAAAJ,EAAK,iBAAiB,KAAK,EAAE,QAAQK,GAAO,CACtCA,EAAI,aAAa,KAAK,IACxBJ,EAAU,KAAKI,EAAI,aAAa,KAAK,CAAC,EACtCA,EAAI,IAAM,QAAQV,EAAmBU,EAAI,aAAa,KAAK,CAAC,EAAE,QAAQ,GAE1E,CAAC,EAGDL,EAAK,iBAAiB,OAAO,EAAE,QAAQM,GAAS,CAC9CA,EAAM,iBAAiB,QAAQ,EAAE,QAAQC,GAAU,CAC7CA,EAAO,aAAa,KAAK,IAC3BL,EAAU,KAAKK,EAAO,aAAa,KAAK,CAAC,EACzCA,EAAO,IAAM,UAAUZ,EAAmBY,EAAO,aAAa,KAAK,CAAC,EAAE,QAAQ,GAElF,CAAC,CACH,CAAC,EAGDP,EAAK,iBAAiB,KAAK,EAAE,QAAQQ,GAAO,CAC1CL,EAAQ,KAAKK,EAAI,SAAS,CAC5B,CAAC,EAGDR,EAAK,iBAAiB,OAAO,EAAE,QAAQS,GAAS,CAC9CA,EAAM,iBAAiB,QAAQ,EAAE,QAAQF,GAAU,CAC7CA,EAAO,aAAa,KAAK,IAC3BH,EAAU,KAAKG,EAAO,aAAa,KAAK,CAAC,EACzCA,EAAO,IAAM,QAAQZ,EAAmBY,EAAO,aAAa,KAAK,CAAC,EAAE,QAAQ,GAEhF,CAAC,CACH,CAAC,EAEM,CACL,UAAAN,EACA,UAAAC,EACA,QAAAC,EACA,UAAAC,CACF,CACF,OAAS5D,EAAO,CACd,eAAQ,MAAM,4BAA6BA,CAAK,EACzC,IACT,CACF,CACA,eAAekE,EAAeC,EAAU,CAEtC,IAAMC,EAAO,MADI,MAAM,MAAMD,CAAQ,GACT,KAAK,EACjC,OAAO,IAAI,QAAQ,CAAC3D,EAASC,IAAW,CACtC,IAAMmC,EAAS,IAAI,WACnBA,EAAO,UAAY,IAAMpC,EAAQoC,EAAO,OAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAC5DA,EAAO,QAAUnC,EACjBmC,EAAO,cAAcwB,CAAI,CAC3B,CAAC,CACH,CACA,eAAeC,IAAe,CAC5B,GAAI,CACF,MAAM/D,EAAW,kCAAkC,EACnD,IAAI8D,EAAO,IAAI,KAAK,CAAC,KAAK,UAAU3I,EAAS,KAAM,CAAC,CAAC,EAAG,CAAC,KAAM,kBAAkB,CAAC,EAClF,OAAO2I,EAAM,GAAG3I,EAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,iBAAiB,CAEjF,OAASuE,EAAO,CACd,QAAQ,MAAM,SAAUA,CAAK,CAC/B,QAAE,CAEAC,EAAa,kCAAkC,CACjD,CACF,CACA,eAAeqE,IAAkB,CAC/B,GAAI,CAoBF,IAASC,EAAT,SAAoCC,EAAK,CACvC,IAAMC,EAAO,CAAC,EACRC,EAAQ,yCACVC,EACJ,MAAQA,EAAQD,EAAM,KAAKF,CAAG,KAAO,MAAM,CACzC,IAAI/E,EAAMkF,EAAM,CAAC,EAAE,QAAQ,QAAS,EAAE,EACjClF,EAAI,WAAW,OAAO,GACzBgF,EAAK,KAAKhF,CAAG,CAEjB,CACA,OAAOgF,CACT,EAWSG,EAAT,UAAgC,CAC9B,OAAInJ,EAAQ,IAAI,KAAK,IAAM,GAClB;AAAA;AAAA;AAAA,0BAKF,EACT,EAESoJ,EAAT,UAA+B,CAC7B,OAAIpJ,EAAQ,2BAA6B,SAAWA,EAAQ,2BAA6B,gBAChF;AAAA;AAAA;AAAA;AAAA,qCAMLA,EAAQ,2BAA6B,cAAgBA,EAAQ,2BAA6B,gBACrF;AAAA;AAAA,4BAIF,EACT,EAoMSqJ,EAAT,SAAmBC,EAAS,CAa1B,OAZYA,EAET,QAAQ,+CAAgD,EAAE,EAC1D,QAAQ,YAAa,GAAG,EACxB,QAAQ,YAAa,GAAG,EACxB,QAAQ,YAAa,GAAG,EACxB,QAAQ,YAAa,GAAG,EACxB,QAAQ,YAAa,GAAG,EACxB,QAAQ,YAAa,GAAG,EACxB,QAAQ,YAAa,GAAG,EACxB,QAAQ,YAAa,GAAG,EACxB,QAAQ,YAAa,IAAI,CAEhC,EAnRE,MAAMpE,EAAY,CAChB,+BACA,kCACF,CAAC,EAED,GAAI,CAAE,UAAA8C,EAAW,UAAAC,EAAW,QAAAC,EAAS,UAAAC,CAAU,EAAIL,GAAe9H,CAAO,EAGnEqG,EAAS,SAAS,eAAe,QAAQ,EAC/C,GAAI,CAACA,EAAQ,OAGb,IAAMkD,GADOlD,EAAO,iBAAmBA,EAAO,cAAc,UACpC,iBAAiB,aAAa,EAAE,QAAQ+B,GAAO,CACrEA,EAAI,OAAO,MAAM,GAAG,EAAE,QAAQoB,GAAU,CACtC,IAAMxF,EAAMwF,EAAO,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EACtCxB,EAAU,KAAKhE,CAAG,CACpB,CAAC,CACH,CAAC,EAgBKyF,EAAiBX,EAA2B,MAAMrC,EAAY,KAAK,CAAC,EAC1EuB,EAAYA,EAAU,OAAOyB,CAAc,EAE3C,IAAMC,EAAM,IAAI,MAGhBA,EAAI,KAAK,GAAG1J,EAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,kBAAmB,KAAK,UAAUA,EAAS,KAAM,CAAC,CAAC,EA6B7G,IAAI2J,EAAU;AAAA,aACL3J,EAAQ,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC;AAAA,gBAC3CA,EAAQ,OAAO;AAAA;AAAA;AAAA,MAGzBA,EAAQ,IAAI,KAAK,IAAM,GAAK;AAAA,MAC1B,EAAE;AAAA,gBACMA,EAAQ,IAAI,KAAK,IAAM,GAAK,wBAA0B,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAO1CmJ,EAAqB,CAAC,GAAGC,EAAoB,CAAC;AAAA;AAAA,GAGxEM,EAAI,KAAK,eAAgBC,CAAO,EAGhC,IAAIC,EAAgB;AAAA,GAGhB5J,EAAQ,2BAA6B,SAAWA,EAAQ,2BAA6B,mBACvF4J,GAAiB;AAAA,IAIf5J,EAAQ,2BAA6B,cAAgBA,EAAQ,2BAA6B,mBAC5F4J,GAAiB;AAAA,GAInB,IAAIC,EAAY,GAAGD,CAAa;AAAA;AAAA,IAEhC5J,EAAQ,2BAA6B,cAAgBA,EAAQ,2BAA6B,gBAAkB,6DAA+D,2DAA2D;AAAA;AAAA;AAAA,cAG5NA,EAAQ,OAAS,OAAS,QAAQ;AAAA,aACnCA,EAAQ,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA,MAGrDA,EAAQ,2BAA6B,cAAgBA,EAAQ,2BAA6B,gBAAkB,gBAAkB,EAAE;AAAA,MAChIA,EAAQ,2BAA6B,SAAWA,EAAQ,2BAA6B,gBAAkB,yCAA2C,EAAE;AAAA;AAAA;AAAA,IAkBtJ,GAdA0J,EAAI,KAAK,mBAAoBG,CAAS,EAGlC7J,EAAQ,IAAI,KAAK,IAAM,IAOzB0J,EAAI,KAAK,oBANQ;AAAA;AAAA;AAAA;AAAA;AAAA,GAMuB,EAItC1J,EAAQ,2BAA6B,SAAWA,EAAQ,2BAA6B,gBAAiB,CACxG,IAAI8J,EAAW;AAAA;AAAA;AAAA,MAGf9J,EAAQ,2BAA6B,gBAAkB,8BAAgC,EAAE;AAAA;AAAA;AAAA,GAIzF0J,EAAI,KAAK,oBAAqBI,CAAQ,CACxC,EAGI9J,EAAQ,2BAA6B,cAAgBA,EAAQ,2BAA6B,kBAc5F0J,EAAI,KAAK,gBAbM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAamB,EAGtC,IAAIK,EAAa;AAAA,gBACH,IAAI,KAAK,EAAE,YAAY,CAAC,IAAI/J,EAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAmBtD0J,EAAI,KAAK,aAAcK,CAAU,EAEjC,IAAIC,EAAY,KAAKhK,EAAQ,IAAI;AAAA;AAAA;AAAA;AAAA,EAInCA,EAAQ,WAAW,GAIjB,GAHA0J,EAAI,KAAK,YAAaM,CAAS,EAG3BhK,EAAQ,KACV,GAAI,CACF,IAAIiK,EAAa,GAEbjK,EAAQ,KAAK,WAAW,OAAO,EAEjCiK,EAAajK,EAAQ,KAGrBiK,EAAa,MAAMxB,EAAezI,EAAQ,IAAI,EAIhD,IAAIkK,EACJ,GAAIlK,EAAQ,KAAK,WAAW,gBAAgB,EAC1CkK,EAAW,cACFlK,EAAQ,KAAK,WAAW,iBAAiB,EAClDkK,EAAW,eACFlK,EAAQ,KAAK,WAAW,oBAAoB,EACrDkK,EAAW,UACN,CACL,QAAQ,MAAM,8BAA+BlK,EAAQ,IAAI,EACzD,MACF,CAEA,IAAMmK,EAAe,QAAQD,CAAQ,GACrCR,EAAI,OAAO,MAAM,EAAE,KAAKS,EAAcF,EAAW,MAAM,GAAG,EAAE,CAAC,EAAG,CAAE,OAAQ,EAAK,CAAC,EAGhF,IAAMG,EAAQ,CAAC,UAAW,UAAW,UAAW,SAAS,EACnD1K,EAAQ0K,EAAM,IAAIhJ,IAAS,CAC/B,IAAO,gBAAgBA,CAAI,OAC3B,MAASA,EACT,KAAQ,YACR,QAAW,KACb,EAAE,EACF,QAAWA,KAAQgJ,EAAO,CACxB,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQ,SAASjJ,EAAK,MAAM,GAAG,EAAE,CAAC,CAAC,EAC1CiJ,EAAO,OAAS,SAASjJ,EAAK,MAAM,GAAG,EAAE,CAAC,CAAC,EAC3C,IAAMkJ,GAAMD,EAAO,WAAW,IAAI,EAG5BjC,EAAM,IAAI,MAChBA,EAAI,IAAM6B,EACV7B,EAAI,OAAS,UAAW,CACtBkC,GAAI,UAAUlC,EAAK,EAAG,EAAGiC,EAAO,MAAOA,EAAO,MAAM,EACpD,IAAME,GAAcF,EAAO,UAAU,WAAW,EAAE,QAAQ,iCAAkC,EAAE,EAC9FX,EAAI,OAAO,MAAM,EAAE,KAAK,QAAQtI,CAAI,OAAQmJ,GAAa,CAAE,OAAQ,EAAK,CAAC,CAC3E,EAGAF,EAAO,OAAO,CAChB,CAEAX,EAAI,KAAK,qBAAsB,KAAK,UAAU,CAC5C,YAAe,UACf,iBAAoB,UACpB,QAAW,aACX,UAAa,eACb,KAAQ,QACR,KAAQ1J,EAAQ,KAChB,WAAcA,EAAQ,KACtB,YAAeA,EAAQ,YACvB,MAASN,CACX,EAAG,KAAM,CAAC,CAAC,CAEb,OAAS6E,EAAO,CACd,QAAQ,MAAM,4BAA6BA,CAAK,EAChD,MACF,CAoBF,IAAIiG,EAAcnB,EAAU,MAAM5C,EAAY,KAAK,CAAC,EAGhDzG,EAAQ,oBAAsB,OAAO0J,EAAI,KAAK,gBAAiB1J,EAAQ,GAAG,EAC1EA,EAAQ,oBAAsB,OAAO0J,EAAI,KAAK,iBAAkB1J,EAAQ,GAAG,EAC3EA,EAAQ,oBAAsB,UAAU0J,EAAI,KAAK,iBAAkB1J,EAAQ,GAAG,EAC9EA,EAAQ,oBAAsB,UAAU0J,EAAI,KAAK,iBAAkBc,CAAW,EAC9ExK,EAAQ,oBAAsB,QAAQ0J,EAAI,KAAK,iBAAkB1J,EAAQ,GAAG,EAC5EA,EAAQ,oBAAsB,QAAQ0J,EAAI,KAAK,iBAAkBrD,EAAO,gBAAgB,eAAe,WAAW,EAAE,WAAW,EAC/HrG,EAAQ,oBAAsB,QAAQ0J,EAAI,KAAK,iBAAkB1J,EAAQ,GAAG,EAC5EA,EAAQ,oBAAsB,QAAQ0J,EAAI,KAAK,iBAAkBc,CAAW,EAEhF,eAAeC,EAASC,EAAQ,CAE9B,OAAK,SAAS,cAAc,8CAA8C,GACxE,MAAM7F,EAAW,gCAAgC,EAE5C,OAAO,OAAO6F,CAAM,CAC7B,CAEA,IAAIC,EAAa,MAAMF,EAAS,MAAMhE,EAAY,YAAY,CAAC,EAC/DkE,EAAaA,EAAW,KAGpB3K,EAAQ,2BAA6B,cAAc0J,EAAI,KAAK,gBAAiB1J,EAAQ,UAAU,EAC/FA,EAAQ,2BAA6B,cAAc0J,EAAI,KAAK,iBAAkB1J,EAAQ,UAAU,EAChGA,EAAQ,2BAA6B,SAAS0J,EAAI,KAAK,gBAAiB1J,EAAQ,UAAU,EAC1FA,EAAQ,2BAA6B,SAAS0J,EAAI,KAAK,iBAAkBiB,CAAU,EACnF3K,EAAQ,2BAA6B,cAAc0J,EAAI,KAAK,gBAAiB1J,EAAQ,UAAU,EAC/FA,EAAQ,2BAA6B,cAAc0J,EAAI,KAAK,iBAAkBiB,CAAU,EACxF3K,EAAQ,2BAA6B,iBAAiB0J,EAAI,KAAK,gBAAiB1J,EAAQ,UAAU,EAClGA,EAAQ,2BAA6B,iBAAiB0J,EAAI,KAAK,iBAAkBiB,CAAU,EAG/F,IAAIC,EAAS,GACb,GAAI5K,EAAQ,IAAK,CACf4K,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAUT,IAAMC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAME7K,EAAQ,KAAK,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBnD0J,EAAI,KAAK,aAAcmB,CAAI,CACzB,CAGA,IAAIC,EAAa,GACbC,EAAU,GACd/K,EAAQ,UAAU,QAAQ4B,GAAW,CAC/BA,EAAQ,SAAS,KAAK,EACxBkJ,GAAc,gBAAgBlJ,CAAO;AAAA,MAC5BA,EAAQ,SAAS,MAAM,EAChCmJ,GAAW,gCAAgCnJ,CAAO;AAAA,YAGlDmJ,GAAW,eAAenJ,CAAO;AAAA,WAErC,CAAC,EAGD,IAAMoJ,EAA2B;AAAA,8BACPhL,EAAQ,KAAO,OAAS,OAAO;AAAA;AAAA,aAEhDA,EAAQ,KAAK;AAAA;AAAA;AAAA,wCAGcA,EAAQ,WAAW;AAAA,mCACxBA,EAAQ,MAAM;AAAA;AAAA,6CAEJA,EAAQ,KAAK;AAAA;AAAA,uDAEHA,EAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,uCAK7BA,EAAQ,GAAG;AAAA;AAAA,yCAETA,EAAQ,KAAK;AAAA,+CACPA,EAAQ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5D+K,CAAO,GAAG/K,EAAQ,IAAM,gDAAkD,EAAE;AAAA,MAC5EA,EAAQ,KAAO,GAAGA,EAAQ,IAAI;AAAA,IAAS,EAAE;AAAA,MACzC8K,GAA0B,EAAE;AAAA;AAAA;AAAA;AAAA,EAIhC,MAAMrE,EAAY,MAAM,CAAC;AAAA;AAAA,EAEzBzG,EAAQ,WAAa,0CAA2C,EAAE;AAAA,EACjEA,EAAQ,IAAM4K,EAAS,EAAG;AAAA;AAAA,SAazB,GAVI5K,EAAQ,qBAAuB,QAAQ0J,EAAI,KAAK,iBAAkB1J,EAAQ,IAAI,EAC9EA,EAAQ,qBAAuB,QAAQ0J,EAAI,KAAK,aAAcsB,CAAwB,EACtFhL,EAAQ,qBAAuB,YAAY0J,EAAI,KAAK,eAAgB1J,EAAQ,IAAI,EAChFA,EAAQ,qBAAuB,YAAY0J,EAAI,KAAK,aAAcsB,CAAwB,EAC1FhL,EAAQ,qBAAuB,OAAO0J,EAAI,KAAK,gBAAiB1J,EAAQ,IAAI,EAC5EA,EAAQ,qBAAuB,OAAO0J,EAAI,KAAK,aAAcsB,CAAwB,EACrFhL,EAAQ,qBAAuB,QAAQ0J,EAAI,KAAK,iBAAkB1J,EAAQ,IAAI,EAC9EA,EAAQ,qBAAuB,QAAQ0J,EAAI,KAAK,aAAcsB,CAAwB,EAGtF/C,EAAU,OAAS,EAAG,CACxB,IAAMgD,EAAcvB,EAAI,OAAO,QAAQ,EACvC,GAAI,CACF,QAAWwB,KAAYjD,EAAW,CAChC,IAAMkD,EAAc,MAAM1C,EAAeyC,CAAQ,EACjDD,EAAY,KAAKC,EAAS,UAAUA,EAAS,YAAY,GAAG,EAAI,CAAC,EAAGC,EAAa,CAAE,OAAQ,EAAK,CAAC,CACnG,CACF,OAAS5G,EAAO,CACd,QAAQ,MAAM,6BAA8BA,CAAK,EACjD,MACF,CACF,CACA,GAAIyD,EAAU,OAAS,EAAG,CACxB,IAAMoD,EAAY1B,EAAI,OAAO,MAAM,EACnC,GAAI,CAEF,QAAW2B,KAAYrD,EAAW,CAChC,IAAMuC,EAAc,MAAM9B,EAAe4C,CAAQ,EACjDD,EAAU,KAAKC,EAAS,UAAUA,EAAS,YAAY,GAAG,EAAI,CAAC,EAAGd,EAAa,CAAE,OAAQ,EAAK,CAAC,CACjG,CACF,OAAShG,EAAO,CACd,QAAQ,MAAM,8BAA+BA,CAAK,EAClD,MACF,CACF,CACA,GAAI2D,EAAQ,OAAS,EAAG,CACtB,IAAMoD,EAAY5B,EAAI,OAAO,MAAM,EACnC,GAAI,CAEFxB,EAAQ,QAAQ,CAACK,EAAK1G,IAAU,CAC9ByJ,EAAU,KAAK,UAAUzJ,EAAQ,CAAC,OAAQ0G,CAAG,CAC/C,CAAC,CACH,OAAShE,EAAO,CACd,QAAQ,MAAM,8BAA+BA,CAAK,EAClD,MACF,CACF,CACA,GAAI4D,EAAU,OAAS,EAAG,CACxB,IAAMoD,EAAc7B,EAAI,OAAO,MAAM,EACrC,GAAI,CACF,QAAW8B,KAAYrD,EAAW,CAChC,IAAMsD,EAAc,MAAMhD,EAAe+C,CAAQ,EACjDD,EAAY,KAAKC,EAAS,UAAUA,EAAS,YAAY,GAAG,EAAI,CAAC,EAAGC,EAAa,CAAE,OAAQ,EAAK,CAAC,CACnG,CACF,OAASlH,EAAO,CACd,QAAQ,MAAM,8BAA+BA,CAAK,EAClD,MACF,CACF,CAGA,IAAMoE,GAAO,MAAMe,EAAI,cAAc,CAAE,KAAM,MAAO,CAAC,EACrD,OAAOf,GAAM,GAAG3I,EAAQ,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,EAGpEgI,EAAU,OAASC,EAAU,OAASE,EAAU,OAAS,CAC3D,OAAS5D,EAAO,CACd,QAAQ,MAAM,SAAUA,CAAK,CAC/B,QAAE,CAOAI,EALwB,CACtB,mCACA,8BACF,CAE6B,CAC/B,CACF,CACA,eAAe+G,IAAQ,CACrB,GAAI,CAEF,IAAMC,EAAiB3L,EAAQ,2BAA6B,gBACxDO,EAAK,YACLP,EAAQ,WAER4L,EAAiB,KACjB5L,EAAQ,2BAA6B,iBAAmBA,EAAQ,2BAA6B,aAC/F4L,EAAiB,OAEjBA,EAAiB5L,EAAQ,yBAG3B,IAAM6L,EAAe,CACnB,MAAO7L,EAAQ,MACf,YAAaA,EAAQ,YACrB,KAAMA,EAAQ,KACd,KAAMA,EAAQ,KACd,mBAAoBA,EAAQ,qBAAuB,OAAS,OAAS,GACrE,IAAKA,EAAQ,IACb,kBAAmBA,EAAQ,oBAAsB,MAAQ,OAAS,GAClE,aAAcA,EAAQ,UAAU,OAAO8L,GAAOA,EAAI,SAAS,MAAM,CAAC,EAAE,KAAK,GAAG,EAC5E,YAAa,UACb,WAAY,UACZ,UAAW9L,EAAQ,OACnB,GAAI2L,EACJ,iBAAkBC,EAClB,YAAa5L,EAAQ,UAAU,OAAO8L,GAAOA,EAAI,SAAS,KAAK,CAAC,EAAE,KAAK,GAAG,EAC1E,QAAS,MACT,OAAQ,MACV,EAQMC,EAAO;AAAA;AAAA,kDALM,KAAK,UAAUF,CAAY,EAC3C,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,QAAQ,CAK+B;AAAA;AAAA,eAKxD,SAAS,KAAK,mBAAmB,YAAaE,CAAI,EAClD,SAAS,cAAc,MAAM,EAAE,OAAO,EACtC,SAAS,cAAc,MAAM,EAAE,OAAO,CACxC,OAASxH,EAAO,CACd,QAAQ,MAAM,yBAA0BA,CAAK,CAC/C,CACF,CAEA,eAAeyH,IAAa,CAC1B,IAAM3F,EAAS,SAAS,eAAe,QAAQ,EACzC4F,EAAiB5F,EAAO,iBAAmBA,EAAO,cAAc,SAEtE,GAAI,CACF,MAAMnB,EAAY,CAChB,2CACA,kCACF,CAAC,EAED,YAAY+G,EAAe,eAAe,EAAE,KAAK5B,GAAU,CACzD,IAAM6B,EAAU7B,EAAO,WAAW,IAAI,EAChC8B,EAAgBF,EAAe,qBAAqB,OAAO,EAGjE,MAAM,KAAKE,CAAa,EAAE,QAAQ3D,GAAS,CACzC,GAAM,CAAE,YAAA4D,EAAa,OAAAC,EAAQ,OAAAC,CAAO,EAAI9D,EAGxCA,EAAM,OAAS,EAGV6D,GAAQ7D,EAAM,MAAM,EACzB0D,EAAQ,UAAU1D,EAAOA,EAAM,WAAYA,EAAM,UAAWA,EAAM,YAAaA,EAAM,YAAY,EAGjGA,EAAM,OAAS8D,EACf9D,EAAM,YAAc4D,EACfC,GAAQ7D,EAAM,KAAK,CAC1B,CAAC,EAGD6B,EAAO,OAAO1B,GAAQ,CAEpB,OAAOA,EAAM,gBAAgB,CAC/B,EAAG,WAAW,CAChB,CAAC,EAAE,MAAMpE,GAAS,CAChB,QAAQ,MAAM,2BAA4BA,CAAK,CACjD,CAAC,CACH,OAASA,EAAO,CACd,QAAQ,MAAM,SAAUA,CAAK,CAC/B,QAAE,CAEAC,EAAa,6CAA6C,EAC1DA,EAAa,qCAAqC,CACpD,CACF,CACA,eAAelE,EAAciM,EAAW,GAAO,CAC7C,GAAI,GAACA,GAAY,CAACvM,EAAQ,SAAW,CAACO,EAAK,aAEvCA,EAAK,WAAY,CACnB,IAAIuK,EAAa,GACbC,EAAU,GACd/K,EAAQ,UAAU,QAAQ4B,GAAW,CAC/BA,EAAQ,SAAS,KAAK,EACxBkJ,GAAc,gBAAgBlJ,CAAO;AAAA,MAC5BA,EAAQ,SAAS,MAAM,EAChCmJ,GAAW,gCAAgCnJ,CAAO;AAAA,YAElDmJ,GAAW,eAAenJ,CAAO;AAAA,WAErC,CAAC,EAED,IAAM+J,EAAiB,MAAMlF,EAAY,YAAY,EAC/C6C,EAAU,MAAM7C,EAAY,KAAK,EACjCpG,EAAa;AAAA;AAAA,mBAEJL,EAAQ,QAAU,OAAS,MAAM;AAAA,SAE1CwM,EAAY,qBAAqBxM,EAAQ,KAAO,OAAS,OAAO;AAAA;AAAA,aAE7DA,EAAQ,KAAK;AAAA;AAAA;AAAA,wCAGcA,EAAQ,WAAW;AAAA,mCACxBA,EAAQ,MAAM;AAAA,MAC3CA,EAAQ,KAAOA,EAAQ,KAAO,EAAE;AAAA,MAChC+K,CAAO;AAAA,uCAC0B/K,EAAQ,oBAAsB,OAASA,EAAQ,oBAAsB,UAAYA,EAAQ,oBAAsB,OAAS,MAAQA,EAAQ,iBAAiB;AAAA,QACxLK,EAAaiJ,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKtB,MAAM7C,EAAY,MAAM,CAAC;AAAA,MACzBqE,GAA0B,EAAE;AAAA,MAC5B9K,EAAQ,oBAAsB,OAAS,2DAA4D,EAAE;AAAA;AAAA,SAIjGqG,EAAS,SAAS,eAAe,QAAQ,EAC/C,GAAI,CAACA,EAAQ,OAGb,IAAMnG,EADS,IAAI,UAAU,EACV,gBAAgBsM,EAAW,WAAW,EACnDC,EAAOpG,EAAO,iBAAmBA,EAAO,cAAc,SAE5D,GAAI,CAACkG,GAAY,CAACpM,EAAI,cACpB,OAAAwC,EAAU8J,EAAK,gBAAiBvM,EAAI,eAAe,EAC5C,GAEPmG,EAAO,aAAa,SAAUmG,CAAS,EACvCnG,EAAO,OAAS,IAAM,CAEpB,IAAMoG,EAAOpG,EAAO,iBAAmBA,EAAO,cAAc,SACtD3B,EAAS+H,EAAK,cAAc,QAAQ,EAC1C/H,EAAO,GAAK,YACZA,EAAO,KAAO1E,EAAQ,OAAS,SAAW,kBAC1C0E,EAAO,YAAciH,EACrBc,EAAK,KAAK,YAAY/H,CAAM,CAC9B,CAEJ,CACF,CAGA,OAAO,MAAQ9B,EACf,OAAO,aAAec,GACtB,OAAO,WAAaK,GACpB,OAAO,iBAAmBG,GAC1B,OAAO,gBAAkBkB,EACzB,OAAO,wBAA0BO,GACjC,OAAO,sBAAwBC,EAC/B,OAAO,wBAA0BC,GACjC,OAAO,KAAOC,GACd,OAAO,WAAaE,GACpB,OAAO,aAAeE,GACtB,OAAO,aAAeE,GACtB,OAAO,YAAcG,GACrB,OAAO,oBAAsBJ,EAC7B,OAAO,iBAAmBW,GAC1B,OAAO,WAAaM,GACpB,OAAO,cAAgBI,GACvB,OAAO,aAAeoB,GACtB,OAAO,gBAAkBC,GACzB,OAAO,MAAQ6C,GACf,OAAO,WAAaM,GACpB,OAAO,cAAgB1L,EAGvB,SAASqC,EAAU+J,EAASC,EAAS,CAMnC,GALI,CAACD,GAAW,CAACC,GAKbD,EAAQ,cAAgBA,EAAQ,aAAa,aAAa,GAC1DC,EAAQ,cAAgBA,EAAQ,aAAa,aAAa,EAC5D,OAIF,GAAID,EAAQ,WAAa,UAAYC,EAAQ,WAAa,SAAU,CAC/B,CAAC,KAAM,QAAS,QAAS,QAAS,SAAS,EAEnD,QAAQC,GAAQ,CACrCF,EAAQ,aAAaE,CAAI,IAAMD,EAAQ,aAAaC,CAAI,GAC1DF,EAAQ,aAAaE,EAAMD,EAAQ,aAAaC,CAAI,CAAC,CAEzD,CAAC,EAED,IAAMC,EAAYH,EAAQ,aAAa,QAAQ,EACzCI,EAAYH,EAAQ,aAAa,QAAQ,EAE/C,OAA6B,MAE/B,CAGA,GAAID,EAAQ,WAAaC,EAAQ,SAAU,CACzCD,EAAQ,YAAYC,EAAQ,UAAU,EAAI,CAAC,EAE3C,MACF,CAGA,GAAID,EAAQ,WAAa,KAAK,cAAgBC,EAAQ,WAAa,KAAK,aAAc,CACpF,IAAMI,EAAgB,MAAM,KAAKL,EAAQ,UAAU,EAC7CM,EAAgB,MAAM,KAAKL,EAAQ,UAAU,EAGnDI,EAAc,QAAQH,GAAQ,CACvBD,EAAQ,aAAaC,EAAK,IAAI,GACjCF,EAAQ,gBAAgBE,EAAK,IAAI,CAErC,CAAC,EAGDI,EAAc,QAAQJ,GAAQ,CACxBF,EAAQ,aAAaE,EAAK,IAAI,IAAMA,EAAK,OAC3CF,EAAQ,aAAaE,EAAK,KAAMA,EAAK,KAAK,CAE9C,CAAC,CACH,CAEA,IAAMK,EAAc,MAAM,KAAKP,EAAQ,UAAU,EAC3CQ,EAAc,MAAM,KAAKP,EAAQ,UAAU,EAGjDM,EAAY,QAAQ,CAACE,EAAUtL,IAAU,CACvC,IAAMuL,EAAWF,EAAYrL,CAAK,EAClC,GAAI,CAACuL,EAAU,CACbV,EAAQ,YAAYS,CAAQ,EAC5B,MACF,CAEIT,EAAQ,UAAY,SAAWA,EAAQ,UAAY,SAAWA,EAAQ,cAAgBC,EAAQ,YAChGD,EAAQ,YAAcC,EAAQ,YACrBQ,EAAS,WAAa,KAAK,WAAaA,EAAS,YAAcC,EAAS,YACjFD,EAAS,UAAYC,EAAS,WAEhCzK,EAAUwK,EAAUC,CAAQ,CAC9B,CAAC,EAGDF,EAAY,MAAMD,EAAY,MAAM,EAAE,QAAQG,GAAY,CACxDV,EAAQ,YAAYU,EAAS,UAAU,EAAI,CAAC,CAC9C,CAAC,CACH,CAGA,SAAS,iBAAiB,mBAAoB,UAAW,CACvD,OAAO,OAAS,IAAM,CACpBjN,EAAI,OAAO,MAAM,EACb,OAAO,aAAa,YAAY,EACpCgG,EAAoB,EAEhB,aAAa,QAAQ,WAAW,EAClC,WAAW,UAAW,CACpBoB,GAAW,KAAK,MAAM,aAAa,QAAQ,WAAW,CAAC,CAAC,CAC1D,EAAG,GAAG,EAENhH,EAAK,WAAa,EAEtB,EACA,OAAO,SAAW,IAAM4F,EAAoB,CAC9C,CAAC",
+ "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: 'kodeWeave',\n author: {\n name: 'Michael Schwartz',\n href: 'https://michaelsboost.com/',\n src: 'imgs/author.jpg'\n },\n version: '1.2',\n url: 'https://github.com/michaelsboost/kodeWeave/',\n license: 'https://github.com/michaelsboost/kodeWeave/blob/main/LICENSE'\n}\nlet p = {\n name: \"App name\",\n version: 0.01,\n title: \"An attractive title\",\n description: \"The most attractive description ever!\",\n author: \"kodeWeave\",\n url: \"https://michaelsboost.com/\",\n meta: \"\",\n libraries: [],\n html_pre_processor: \"html\",\n css_pre_processor: \"css\",\n javascript_pre_processor: \"javascript\",\n html: ``,\n css: ``,\n javascript: ``,\n logo: \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZpZXdCb3g9IjAgMCA1MTEuOTk5OTkgNTExLjk5OTk5IgogICBoZWlnaHQ9IjUxMiIKICAgd2lkdGg9IjUxMiIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnNDE5MCI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDE5NiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczQxOTQiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0Mjc2Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A0Mjc4IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZDVkOTI7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNDI4MCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmYwMDAwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMjU3LjMxMjUiCiAgICAgICB4Mj0iMC4xMzQwNDE2NSIKICAgICAgIHkxPSIyNTcuMzEyNSIKICAgICAgIHgxPSI1MTEuNzE4NzUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MjgyIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDI3NiIgLz4KICA8L2RlZnM+CiAgPGcKICAgICBpZD0iZzQyODQiPgogICAgPGNpcmNsZQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0MjgyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo3MiwgNzI7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InBhdGg0MjcwIgogICAgICAgY3g9IjI1NiIKICAgICAgIGN5PSIyNTYiCiAgICAgICByPSIyNTYiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6NzIsIDcyO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjUxLjA2MDY4LDU4LjY3ODI3MiBjIC00LjU2MDMyLDAuMDcwMzUgLTIwLjc2MDYxLDIuMDQxOTQ1IC0yOS4yOTc5MiwzLjY1NTk4NCAtMjguMzQzOTEsNS4zNTg2MiAtNjYuODgwODEsMjIuNjE5ODE0IC03My4wMzY5OSwzMi43MTkwNjEgLTEuODk3NTUsMy4xMTI5MzUgLTEuOTQ2MTYsNy4xNDcwMTMgLTEuOTQ2MTYsMTYwLjgxNzAyMyAwLDE1Mi4yNTg4IDAuMDY3MSwxNTcuNzI0NjQgMS44OTk5OCwxNjAuNzMxMjEgNS4yMDU5OSw4LjUzOTg5IDM2LjcyMDAzLDIzLjcwOTM0IDYzLjQ1MTMzLDMwLjU0MTM0IDkuNzY1NzIsMi40OTU5MyAzNC4zMzUwOSw2LjM0NDggMzguNTA3NTQsNi4wMzE2OSAyLjAwMzg4LC0wLjE1MDM2IDIuMDMyMDMsLTAuOTc0NjkgMi4yODkyMSwtNzMuMDkzMjQgMC4xNDU1OCwtNDAuODM3NTkgMC42NTY0MywtNzMuMzM0MTQgMS4xNjEwOSwtNzMuODM4OTYgMS4zNzc1MSwtMS4zNzc5NSA3LjM0NzM5LDEuODg0NzMgMTAuMzU3NTIsNS42NjIxNSAxLjQ2MjAyLDEuODM0NjggMTMuNzk3NTUsMjAuNjU1MjggMjcuNDE3NzQsNDEuODE5NDMgNTEuNDQ0NTIsNzkuOTM4NDcgNTAuNDY1MTEsNzguNDc3OTggNTMuMzA0OTQsNzkuMTkwOTQgMy4zMjQ3OCwwLjgzNDc0IDEyLjU2NzA4LC0zLjc4OTQ3IDI3LjU3NjA2LC0xMy43ODU4MyAxNC4yNDMzOCwtOS40ODY0NiAyMy44ODU1LC0xNy43ODMxIDM0LjgxOTcyLC0yOS45NjcxNyAxMS4yOTUwMiwtMTIuNTg2MTUgMTQuODMwMzksLTE3LjQxNzg1IDE0LjgzMDM5LC0yMC4yNTMwOCAwLC0xLjIyMDA5IC0xNC45NzA2LC0yNC41NDAzMyAtMzMuNDAxMzMsLTUyLjAyODQ2IC0xOC4zNzA1NywtMjcuMzk4MzcgLTM0LjEwMTA3LC01MS4xNjg3NiAtMzQuOTU4MjgsLTUyLjgyNjk2IC0wLjg1NzIzLC0xLjY1ODIgLTEuNTU2OTMsLTQuMDczMzUgLTEuNTU2OTMsLTUuMzY1MTkgMCwtMS4zMjEyMyAxMi40ODk1OSwtMjIuMjk0ODcgMjguNTQ1ODQsLTQ3Ljk0MzUyIDQ0LjQ4MzE1LC03MS4wNTg1NiA0MS45MzgzMywtNjYuMjkxNzggMzguODMwODEsLTcyLjg0MjQ3IC0yLjU1NzU1LC01LjM5MTM2IC0xNS4zNjI2MiwtMTkuNjU4MDkgLTI2LjEzMTI5LC0yOS4xMTU4NyAtMTEuNDU0NTksLTEwLjA2MDE5MSAtMzUuMDY0MTMsLTI1Ljk1MDI3NiAtMzkuOTA2MTIsLTI2Ljg1ODkzNCAtMi45NDE1NCwtMC41NTIwMSAtMy45NzUxOSwtMC4yNDY3ODggLTUuOTE3NjYsMS43NDIyMDEgLTEuMjk1NjQsMS4zMjY2NDggLTIwLjM1MDEyLDMyLjM0ODMwMyAtNDIuMzQwNDgsNjguOTM1NzIzIC0yMS45OTAzNiwzNi41ODc0IC00MS4wNjUzOSw2Ny45OTE2NyAtNDIuMzg2NjUsNjkuNzg3MDIgLTIuNjE5NTQsMy41NTkzNyAtNi43MzI4MSw2LjA5MzA2IC04LjczNDYzLDUuMzc4MzggLTAuOTk5NDcsLTAuMzU2ODMgLTEuMjY2NjUsLTE4LjE3MDM1IC0xLjI2NjY1LC04NC40NDM5NCAwLC00OS41MTMxOTYgLTAuMzc4NjQsLTg0LjIxOTIyNiAtMC45MjM2LC04NC41NTYxMzggLTAuMTE5ODQsLTAuMDc0MSAtMC41MzYwMSwtMC4xMDI0NDYgLTEuMTg3NDgsLTAuMDkyMzggeiIKICAgICAgIGlkPSJwYXRoNDI2MCIgLz4KICA8L2c+Cjwvc3ZnPgo=\",\n console: false,\n dark: true,\n module: true,\n autorun: true,\n pwa: false,\n preview: true,\n activePanel: 'html',\n columns: false,\n columnsRight: true\n};\nlet d = {\n searchLibKey: null,\n librarySuggestions: null,\n iframeSize: null,\n activePanel: 'html',\n selectedSize: 'none',\n compiledJSX: null,\n menuDialog: null,\n settings: null,\n libraries: null,\n safeRender: null,\n demos: null\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 panelIconCSS = \"h-3 w-3\";\n const previewIconCSS = \"h-3 -mt-1\";\n\n return {\n logo: ``,\n twitterfill: ``,\n twitter: ``,\n heart: `\n \n `,\n html: ``,\n css: ``,\n javascript: ``,\n columns: ``,\n leftChev: ``,\n rightChev: ``,\n console: ``,\n play: ``,\n camera: ``,\n cog: ``,\n tidy: `\n \n `,\n rotate: `\n \n `,\n times: `\n \n `,\n file: `\n \n `,\n import: `\n \n `,\n download: `\n \n `,\n codepen: `\n \n `,\n trash: `\n \n `,\n undo: `\n \n `,\n redo: `\n \n `,\n cut: `\n \n `,\n copy: `\n \n `,\n paste: `\n \n `,\n indent: `\n \n `,\n outdent: `\n \n `,\n search: `\n \n `,\n goto: `\n \n `,\n comment: `\n \n `,\n fold: ``,\n unfold: ``,\n cursor: ``\n };\n})();\n\n// Reactive objects\nconst project = onChange(p, (property, oldValue, newValue) => {\n const iframe = document.getElementById('iframe');\n const doc = iframe.contentWindow.document;\n if (oldValue !== newValue) {\n localStorage.setItem('kodeWeave', JSON.stringify(project));\n App.render('#app');\n if (property.toString() === 'activePanel') {\n if (!window.editorManager) return;\n if (project.activePanel === 'html') setActiveEditor(editorManager.htmlEditor)\n if (project.activePanel === 'css') setActiveEditor(editorManager.cssEditor)\n if (project.activePanel === 'javascript') setActiveEditor(editorManager.javascriptEditor)\n }\n if (!App.initialRender) {\n let string = property.toString();\n // diff nodes\n if (string === 'css' || string === 'console') {\n let consoleCSS = `\n [data-zwj=zwjkonsole] {\n display: ${project.console ? 'flex' : 'none'};\n }\n \n ${project.css}`\n doc.getElementById('cuxjju3ew').textContent = consoleCSS;\n\n if (!window.editorManager) return;\n if (string === 'css' && editorManager.cssEditor.state.doc.toString() !== project.css) {\n dispatchChanges(editorManager.cssEditor, project.css);\n }\n }\n // render right away\n if (string === 'html') {\n if (project.autorun) renderPreview(true);\n if (!window.editorManager) return;\n if (window.editorManager.htmlEditor.state.doc.toString() !== project.html) {\n dispatchChanges(editorManager.htmlEditor, project.html);\n }\n }\n\n if (string === 'javascript') {\n if (project.autorun) renderPreview(true);\n if (!window.editorManager) return;\n if (window.editorManager.jsEditor.state.doc.toString() !== project.javascript) {\n dispatchChanges(editorManager.jsEditor, project.javascript);\n }\n }\n\n if (string === 'meta' || string === 'libraries' || string === 'html_pre_processor' || string === 'css_pre_processor' || string === 'javascript_pre_processor') {\n if (project.autorun) renderPreview(true);\n }\n if (string === \"dark\") {\n App.render('#app');\n document.documentElement.setAttribute('data-theme', project.dark ? 'dark' : 'light');\n doc.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});\nconst data = onChange(d, (property, oldValue, newValue) => {\n // Only render if the actual value has changed\n if (oldValue !== newValue) App.render('#app');\n});\nwindow.project = project;\nwindow.data = data;\n\n// Components\nfunction LeftMenubar() {\n const buttonSize = \"w-full\";\n\n return `\n\n \n \n \n \n \n ${icons.html}\n \n \n \n \n ${icons.css}\n \n \n \n \n ${icons.javascript}\n \n \n \n \n \n \n\n \n \n ${icons.play}\n \n \n \n \n ${icons.console}\n \n \n \n \n ${icons.camera}\n \n \n \n \n ${icons.cog}\n \n \n `;\n}\nfunction PreviewMenu() {\n const buttonClass = 'border-0 bg-transparent text-sm';\n const selectClass = 'mx-0 my-2 w-auto rounded-md capitalize text-[.6rem]';\n const selectStyle = 'padding: 0.5rem;';\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\n const previewSize = `\n \n Select Size \n ${Object.keys(sizeOptions).map(group => `\n \n ${Object.keys(sizeOptions[group]).map(option => `\n ${sizeOptions[group][option]} \n `).join('')}\n \n `).join('')}\n \n `;\n\n function canTidyShow() {\n if (!project.activePanel) return 'hidden'\n if (project.activePanel) {\n if (project.activePanel === 'html') {\n if (project.html_pre_processor !== 'html') {\n return 'hidden'\n }\n }\n if (project.activePanel === 'css') {\n if (project.css_pre_processor !== 'css') {\n return 'hidden'\n }\n }\n if (project.activePanel === 'javascript') {\n if (project.javascript_pre_processor !== 'javascript') {\n return 'hidden'\n }\n }\n }\n }\n\n return `\n ${previewSize}\n\n
\n \n \n ${icons.rotate}\n \n \n \n \n ${icons.columns}\n \n \n \n \n ${project.columnsRight ? icons.leftChev : icons.rightChev}\n \n \n \n \n ${icons.tidy}\n \n \n \n \n ${icons.play}\n \n \n \n
`;\n}\nconst App = {\n initialRender: true,\n render(container) {\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 let menuDialog = `\n \n \n \n \n \n \n \n \n \n \n \n new project \n \n \n \n \n \n \n \n import project \n \n \n \n \n \n \n \n download json \n \n \n \n \n \n \n \n download zip \n \n \n \n \n \n \n \n share to codepen \n \n \n \n \n \n \n \n empty storage \n \n \n `;\n menuDialog = `\n \n \n \n file menu\n \n \n ${icons.times}\n \n \n \n ${menuDialog}\n \n \n \n `;\n\n let settingsHTML = ``;\n settingsHTML = `\n \n \n \n settings\n \n \n ${icons.times}\n \n \n \n ${settingsHTML}\n \n \n \n `;\n\n let librariesDialog = `\n \n \n \n Search for resources (JQuery, Bootstrap, Foundation...)\n \n \n ${icons.times}\n \n \n \n \n
\n \n
\n ${data.librarySuggestions && data.searchLibKey ? data.librarySuggestions : ''}\n
\n
\n \n \n \n `;\n const buttonClass = \"grid grid-rows-1 items-center bg-transparent border-0 focus-within:shadow-none\";\n const buttonContentClass = \"flex flex-col justify-between h-full\";\n const imageContentClass = \"grid h-full items-center\";\n const textContentClass = \"capitalize text-center mt-4\";\n \n const frameworks = [\n \"javascript\",\n \"typescript\",\n \"react\",\n \"vue\",\n \"preact\",\n \"angular\",\n \"alpine\",\n \"solid\",\n \"stimulus\",\n \"mithril\",\n \"hyperapp\",\n \"aurelia\",\n \"lit\"\n ]\n \n let buttonHTML = \"\";\n for (const name of frameworks) {\n buttonHTML += `\n \n
\n
\n
\n
\n ${name}\n
\n
\n `;\n }\n\n let demosDialog = `\n \n \n \n Are you sure you want to start a new project?\n \n \n ${icons.times}\n \n \n \n All current data will be lost.
\n \n \n \n \n `;\n \n const html = `\n \n
\n ${LeftMenubar()}\n
\n \n \n
\n
\n
\n \n
\n ${PreviewMenu()}\n
\n
\n
\n \n\n \n ${data.iframeSize}\n \n
\n
\n
\n \n
\n
\n
\n ${editorNav()}\n
\n
\n
\n \n
\n
\n\n ${menuDialog}\n ${settingsHTML}\n ${librariesDialog}\n ${demosDialog}\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}\nconst 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 ${times}\n \n \n \n ${content ? content : ''}\n \n \n ${CloseLabel ? CloseLabel : 'close'} \n ${onConfirm ? `${ConfirmLabel ? ConfirmLabel : 'confirm'} ` : ''}\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 editorNav() {\n const buttonClass = \"border-0 bg-transparent py-1\";\n\n return `\n \n ${icons.indent}\n \n \n ${icons.outdent}\n \n \n ${icons.undo}\n \n \n ${icons.redo}\n \n \n ${icons.search}\n \n \n ${icons.goto}\n \n
\n\n \n \n ${icons.comment}\n \n \n ${icons.fold}\n \n \n ${icons.unfold}\n \n \n ${icons.cut}\n \n \n ${icons.copy}\n \n \n ${icons.paste}\n \n \n ${icons.cursor}\n \n
`;\n}\nfunction emptyStorage() {\n // Clear local storage\n localStorage.removeItem('kodeWeave');\n\n // Clear session storage\n sessionStorage.clear();\n\n // Clear cookies\n document.cookie.split(\";\").forEach(function(c) {\n document.cookie = c.trim().split(\"=\")[0] + '=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/';\n });\n\n // Clear service worker caches\n if ('caches' in window) {\n caches.keys().then(function(names) {\n for (let name of names) caches.delete(name)\n });\n }\n\n // Unregister all service workers\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.getRegistrations().then(function(registrations) {\n for (let registration of registrations) registration.unregister()\n });\n }\n\n console.log('All saved data, cookies, and service worker caches have been cleared.');\n location.reload();\n}\n\n// editor functions\nconst 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};\nfunction renderLibraries() {\n return project.libraries.map((library, index) => `\n \n \n \n ${icons.trash}\n \n \n `).join('')\n}\nfunction 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 data.librarySuggestions = suggestions.map(result => {\n return `\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}\nfunction removeScript(src) {\n const script = document.querySelector(`script[src=\"${src}\"]`);\n if (script) script.remove();\n}\nfunction removeScripts(scripts) {\n scripts.forEach(src => {\n const script = document.querySelector(`script[src=\"${src}\"]`);\n if (script) script.remove();\n });\n}\nasync function loadScript(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}\nasync function loadScripts(srcArray) {\n return Promise.all(srcArray.map(loadScript));\n}\nasync function setPreprocessor(editor, value) {\n const scriptMap = {\n html: {\n markdown: \"libraries/preprocessors/marked.min.js\",\n jade: \"libraries/preprocessors/jade.js\",\n pug: \"libraries/preprocessors/pug.js\"\n },\n css: {\n sass: \"libraries/preprocessors/sass.sync.min.js\",\n less: \"libraries/preprocessors/less.min.js\",\n stylus: \"libraries/preprocessors/stylus.min.js\"\n },\n javascript: {\n typescript: \"libraries/preprocessors/typescript.min.js\",\n babel: \"libraries/preprocessors/babel.min.js\",\n jsxtypescript: [\n \"libraries/preprocessors/typescript.min.js\",\n \"libraries/preprocessors/babel.min.js\"\n ]\n }\n };\n\n const currentPreprocessors = {\n html: project.html_pre_processor,\n css: project.css_pre_processor,\n javascript: project.javascript_pre_processor\n };\n\n try {\n const scriptSrcCondition = (value !== 'html' || value !== 'css' || value !== 'javascript');\n const scriptSrc = scriptSrcCondition ? scriptMap[editor][value] : null;\n\n // Remove the current preprocessor scripts\n if (currentPreprocessors[editor] && scriptSrcCondition) {\n const currentScriptSrc = scriptMap[editor][currentPreprocessors[editor]];\n Array.isArray(currentScriptSrc) ? removeScripts(currentScriptSrc) : removeScript(currentScriptSrc)\n\n // Load the new preprocessor scripts\n if (Array.isArray(scriptSrc)) {\n await loadScripts(scriptSrc);\n } else if (scriptSrc) {\n await loadScript(scriptSrc);\n }\n }\n\n // Set the new preprocessor\n if (editor === 'html') {\n project.html_pre_processor = value;\n // if (!window.editorManager || !window.editorManager.htmlEditor) return;\n // window.editorManager.setMode(project.html_pre_processor === 'html' ? 'html' : value, editorManager.htmlEditor);\n } else if (editor === 'css') {\n project.css_pre_processor = value;\n // if (!window.editorManager || !window.editorManager.cssEditor) return;\n // window.editorManager.setMode(project.css_pre_processor === 'css' ? 'css' : value, editorManager.cssEditor);\n } else if (editor === 'javascript') {\n project.javascript_pre_processor = value;\n if (!window.editorManager || !window.editorManager.jsEditor) return;\n window.editorManager.setMode(project.javascript_pre_processor === 'javascript' ? 'javascript' : value, editorManager.jsEditor);\n }\n } catch (error) {\n console.error('Error setting preprocessor:', error);\n }\n}\nasync function initializePreprocessors() {\n await Promise.all([\n setPreprocessor('html', project.html_pre_processor),\n setPreprocessor('css', project.css_pre_processor),\n setPreprocessor('javascript', project.javascript_pre_processor)\n ]);\n \n if (!window.editorManager) return;\n dispatchChanges(editorManager.htmlEditor, project.html);\n dispatchChanges(editorManager.cssEditor, project.css);\n dispatchChanges(editorManager.jsEditor, project.javascript);\n renderPreview(true);\n}\nasync function loadBeautifyLibraries() {\n const beautifyLibraries = [\n \"libraries/js-beautify/beautify.min.js\",\n \"libraries/js-beautify/beautify-css.min.js\",\n \"libraries/js-beautify/beautify-html.min.js\"\n ];\n await loadScripts(beautifyLibraries);\n}\nasync function removeBeautifyLibraries() {\n const beautifyLibraries = [\n \"libraries/js-beautify/beautify.min.js\",\n \"libraries/js-beautify/beautify-css.min.js\",\n \"libraries/js-beautify/beautify-html.min.js\"\n ];\n removeScripts(beautifyLibraries);\n}\nasync function tidy() {\n await loadBeautifyLibraries();\n\n let formattedCode;\n switch (project.activePanel) {\n case 'html':\n formattedCode = html_beautify(project.html, {\n indent_size: 2,\n max_preserve_newlines: 1\n });\n dispatchChanges(editorManager.htmlEditor, formattedCode);\n break;\n case 'css':\n formattedCode = css_beautify(project.css, {\n indent_size: 2,\n max_preserve_newlines: 1\n });\n project.css = formattedCode;\n dispatchChanges(editorManager.cssEditor, formattedCode);\n break;\n case 'javascript':\n formattedCode = js_beautify(project.javascript, {\n indent_size: 2,\n max_preserve_newlines: 1\n });\n project.javascript = formattedCode;\n dispatchChanges(editorManager.jsEditor, formattedCode);\n break;\n default:\n formattedCode = 'Unknown editor panel.';\n }\n\n await removeBeautifyLibraries();\n}\n\n// iframe functions\nfunction 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}\nfunction resizeCanvas(size) {\n data.selectedSize = size;\n getIFrameClientSize();\n}\nfunction 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\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 data.selectedSize = width+'x'+height;\n}\nfunction defineScale() {\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 // 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}\nlet fadeTimeout;\nfunction getIFrameClientSize() {\n if (data.selectedSize === 'none') {\n const iframe = document.getElementById('iframe');\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 } else {\n defineScale();\n }\n}\nasync function compileCode(detect) {\n try {\n if (detect === 'html') {\n switch (project.html_pre_processor) {\n case 'markdown':\n return marked.parse(project.html);\n case 'jade':\n return jade.render(project.html, { pretty: true });\n case 'pug':\n const appScript = document.getElementById('appScript');\n if (appScript.hasAttribute('type') && appScript.getAttribute('type') === 'module') {\n // import pug from 'libraries/preprocessors/pug.js';\n console.error('Cannot import pug as script is a module!');\n return false;\n }\n\n const pug = require(\"pug\");\n return pug.compile(project.html)({name: this.name });\n default:\n return project.html;\n }\n }\n\n if (detect === 'css') {\n switch (project.css_pre_processor) {\n case 'stylus':\n return stylus.render(project.css);\n case 'less':\n return new Promise((resolve, reject) => {\n less.render(project.css, (err, output) => err ? reject(err) : resolve(output.css));\n });\n case 'sass':\n return new Promise((resolve, reject) => {\n Sass.compile(project.css, result => result.status === 0 ? resolve(result.text) : reject(new Error(result.message)));\n });\n default:\n return project.css;\n }\n }\n\n if (detect === 'javascript') {\n switch (project.javascript_pre_processor) {\n case 'babel':\n if (typeof Babel === 'undefined') {\n await loadScript(\"libraries/preprocessors/babel.min.js\");\n }\n return Babel.transform(project.javascript, { presets: ['env', 'react'] }).code;\n case 'typescript':\n return ts.transpileModule(project.javascript, { compilerOptions: { module: ts.ModuleKind.CommonJS } }).outputText;\n case 'jsxtypescript':\n const result = ts.transpileModule(project.javascript, {\n compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES5, jsx: ts.JsxEmit.React }\n }).outputText;\n data.compiledJSX = Babel.transform(result, {\n presets: ['env', 'react']\n }).code;\n return data.compiledJSX;\n default:\n return project.javascript;\n }\n }\n } catch (error) {\n console.error('Error compiling code:', error);\n }\n}\n\n// save functions\nasync function handleLogoChange(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}\nfunction 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}\n\nfunction newProject(name) {\n function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n const capitalizedTitle = capitalizeFirstLetter(name);\n setPreprocessor('html', 'html');\n setPreprocessor('css', 'css');\n if (name !== \"typescript\") setPreprocessor('javascript', 'javascript');\n if (name === \"typescript\" || name === \"angular\") setPreprocessor('javascript', 'typescript');\n project.name = `${capitalizedTitle} name`;\n project.version = 0.01;\n project.title = `A Cool ${capitalizedTitle} App`;\n project.description = `A modern ${capitalizedTitle} application!`;\n project.author = \"kodeWeave\";\n project.url = \"https://michaelsboost.com/\";\n project.module = true;\n project.preview = true;\n if (name === 'angular') project.module = false;\n project.pwa = false;\n\n if (name === 'javascript') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: 0
\n
\n +\n \n
`;\n project.css = ``;\n project.javascript = `let counter = 0;\nconst counterElement = document.getElementById('counter');\nconst incrementButton = document.getElementById('incrementButton');\n\nincrementButton.addEventListener('click', function() {\n counter++;\n counterElement.textContent = counter;\n});`;\n }\n if (name === 'typescript') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: 0
\n
\n +\n \n
`;\n project.css = ``;\n project.javascript = `let counter: number = 0;\nconst counterElement: HTMLElement | null = document.getElementById('counter');\nconst incrementButton: HTMLElement | null = document.getElementById('incrementButton');\n\nif (counterElement && incrementButton) {\n incrementButton.addEventListener('click', function() {\n counter++;\n counterElement.textContent = counter.toString();\n });\n}`;\n }\n if (name === 'react') {\n project.meta = \"\";\n project.libraries = [\n \"https://unpkg.com/react@latest/umd/react.development.js\",\n \"https://unpkg.com/react-dom@latest/umd/react-dom.development.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `/** @jsxRuntime classic */\n/** @jsx React.createElement */\nconst { useState } = React;\n\nfunction App() {\n const [counter, setCounter] = useState(0);\n\n return (\n \n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: {counter}
\n
setCounter(counter + 1)}\n >\n +\n \n
\n );\n}\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render( );`;\n }\n if (name === 'vue') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.global.prod.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `const App = {\n data() {\n return {\n counter: 0,\n message: '\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E'\n };\n },\n methods: {\n incrementCounter() {\n this.counter++;\n }\n },\n template: \\`\n \n
{{ message }} \n
Counter: {{ counter }}
\n
\n +\n \n
\n \\`\n};\n\nconst app = Vue.createApp(App);\napp.mount('#root');`;\n }\n if (name === 'preact') {\n project.meta = ``;\n project.libraries = [\n \"https://unpkg.com/preact@latest/dist/preact.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `/** @jsx h */\nimport { html, render, useState, useEffect } from 'https://unpkg.com/htm@3.1.1/preact/standalone.module.js';\n\nfunction App() {\n const [counter, setCounter] = useState(0);\n\n return html\\`\n \n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: \\${counter}
\n
setCounter(counter + 1)}\n >\n +\n \n
\n \\`;\n}\n\nrender(html\\`<\\${App} />\\`, document.getElementById('root'));`;\n }\n if (name === 'angularold') {\n project.meta = ``;\n project.libraries = [\n \"https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: {{counter}}
\n
\n +\n \n
`;\n project.css = ``;\n project.javascript = `angular.module('myApp', [])\n .controller('MainController', function($scope) {\n $scope.counter = 0;\n $scope.incrementCounter = function() {\n $scope.counter++;\n };\n });`;\n }\n if (name === 'angular') {\n project.meta = ``;\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.3/rxjs.umd.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/core-js/2.5.7/core.js\",\n \"https://unpkg.com/@angular/core@11.0.5/bundles/core.umd.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/zone.js/0.10.3/zone.min.js\",\n \"https://unpkg.com/@angular/common@11.0.5/bundles/common.umd.js\",\n \"https://unpkg.com/@angular/compiler@11.0.5/bundles/compiler.umd.js\",\n \"https://unpkg.com/@angular/platform-browser@11.0.5/bundles/platform-browser.umd.js\",\n \"https://unpkg.com/@angular/platform-browser-dynamic@11.0.5/bundles/platform-browser-dynamic.umd.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `Loading... `;\n project.css = ``;\n project.javascript = `const { Component, NgModule, enableProdMode } = ng.core;\nconst { BrowserModule } = ng.platformBrowser;\nconst { platformBrowserDynamic } = ng.platformBrowserDynamic;\n\nenableProdMode();\n\n@Component({\n selector: 'app-root',\n template: \\`\n \n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: {{ counter }}
\n
\n +\n \n
\n \\`,\n})\nclass AppComponent {\n counter = 0;\n \n incrementCounter() {\n this.counter++;\n }\n}\n\n@NgModule({\n declarations: [AppComponent],\n imports: [BrowserModule],\n bootstrap: [AppComponent]\n})\nclass AppModule {}\n\nplatformBrowserDynamic().bootstrapModule(AppModule);`;\n }\n if (name === 'alpine') {\n project.meta = ``;\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `\n
\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter:
\n
\n +\n \n
\n
`;\n project.css = ``;\n project.javascript = ``;\n }\n if (name === 'solid') {\n project.meta = ``;\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `import { createSignal } from \"https://cdn.skypack.dev/solid-js@1.2.6\";\nimport { render } from \"https://cdn.skypack.dev/solid-js@1.2.6/web\";\nimport html from \"https://cdn.skypack.dev/solid-js@1.2.6/html\";\n\nfunction Counter() {\n const [count, setCount] = createSignal(0);\n const increment = () => setCount(count() + 1);\n\n return html\\`\n \n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: \\${count}
\n
\n +\n \n
\n \\`;\n}\n\nrender(Counter, document.getElementById(\"root\"));`;\n }\n if (name === 'stimulus') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdn.jsdelivr.net/npm/@hotwired/stimulus@3.1.0/dist/stimulus.umd.js\",\n \"https://cdn.jsdelivr.net/npm/@hotwired/stimulus-loading@1.0.0/dist/stimulus-loading.umd.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `\n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: 0
\n
counter#increment\"\n class=\"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-700 transition\"\n >\n +\n \n
`;\n project.css = ``;\n project.javascript = `const application = Stimulus.Application.start();\n\napplication.register('counter', class extends Stimulus.Controller {\n static targets = ['output'];\n\n initialize() {\n this.counter = 0;\n }\n\n increment() {\n this.counter += 1;\n this.outputTarget.textContent = this.counter;\n }\n});`;\n }\n if (name === 'mithril') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdn.jsdelivr.net/npm/mithril@2.0.4/mithril.min.js\",\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `
`;\n project.css = ``;\n project.javascript = `import htm from 'https://unpkg.com/htm?module'\nconst html = htm.bind(m)\n\nconst app = () => {\n let count = 0\n \n return {\n view: () => html\\`\n \n
\uD83D\uDC4B Hello, Mithril! \uD83C\uDF0E \n
Counter: \\${count}
\n
count++}>+ \n
\\`\n }\n}\n\nm.mount(document.getElementById('root'), app)`;\n }\n if (name === 'hyperapp') {\n project.meta = ``;\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = ` `;\n project.css = ``;\n project.javascript = `import { app } from 'https://unpkg.com/hyperapp';\nimport html from 'https://unpkg.com/hyperlit';\n\napp({\n init: 0,\n view: count => html\\`\n \n
\uD83D\uDC4B Hello, Hyperapp! \uD83C\uDF0E \n
Counter: \\${count}
\n
count + 1}>+ \n
\\`,\n node: document.getElementById('root')\n})`;\n }\n if (name === 'aurelia') {\n project.meta = '';\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\",\n \"https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js\"\n ];\n project.html = `\n \n
\uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n
Counter: 0
\n
\n +\n \n
\n `;\n project.css = ``;\n project.javascript = `class App {\n static $view() {\n return document.querySelector('#root');\n }\n constructor() {\n this.message = '${capitalizedTitle}';\n this.counter = 0;\n }\n incrementCounter() {\n this.counter++;\n document.getElementById('counter').textContent = this.counter;\n }\n}\n\nau.start({ root: App });`;\n }\n if (name === 'lit') {\n project.meta = \"\";\n project.libraries = [\n \"https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css\"\n ];\n project.html = ` `;\n project.css = ``;\n project.javascript = `import {LitElement, html} from 'https://cdn.jsdelivr.net/gh/lit/dist@2/core/lit-core.min.js';\n \nclass MyElement extends LitElement {\n static properties = {\n counter: { type: Number }\n };\n\n constructor() {\n super();\n this.counter = 0;\n }\n\n incrementCounter() {\n this.counter++;\n }\n\n render() {\n return html\\`\n \n \uD83D\uDC4B Hello, ${capitalizedTitle}! \uD83C\uDF0E \n Counter: \\${this.counter}
\n \n +\n \n \n \\`;\n }\n}\ncustomElements.define('my-element', MyElement);`;\n }\n\n dispatchChanges(editorManager.htmlEditor, project.html);\n dispatchChanges(editorManager.cssEditor, project.css);\n dispatchChanges(editorManager.jsEditor, project.javascript);\n if (name === 'react') setPreprocessor('javascript', 'babel');\n data.demos = false;\n renderPreview(true);\n}\nfunction importJSON(obj) {\n if (obj === null) return;\n project.obj = {};\n if (data.safeRender) data.safeRender = null;\n setPreprocessor('html', obj.html_pre_processor);\n setPreprocessor('css', obj.css_pre_processor);\n setPreprocessor('javascript', obj.javascript_pre_processor);\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.console = obj.console;\n project.dark = obj.dark;\n project.module = obj.module;\n project.autorun = obj.autorun;\n project.pwa = obj.pwa;\n project.activePanel = obj.activePanel;\n project.preview = obj.preview;\n project.columns = obj.columns;\n project.columnsRight = obj.columnsRight;\n \n project.meta = obj.meta;\n project.libraries = obj.libraries;\n project.html = obj.html;\n project.css = obj.css;\n project.javascript = obj.javascript;\n\n // Dispatch changes to editors\n if (window.editorManager) {\n dispatchChanges(editorManager.htmlEditor, project.html);\n dispatchChanges(editorManager.cssEditor, project.css);\n dispatchChanges(editorManager.jsEditor, project.javascript);\n }\n\n data.safeRender = true;\n renderPreview(true);\n}\nfunction 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}\n\nfunction 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}\nfunction fetchResources(obj) {\n try {\n const doc = new DOMParser().parseFromString(obj.html, 'text/html');\n const body = doc.body;\n\n const imageUrls = [];\n const audioUrls = [];\n const vectors = [];\n const videoUrls = [];\n\n // Extract image URLs\n body.querySelectorAll('img').forEach(img => {\n if (img.hasAttribute('src')) {\n imageUrls.push(img.getAttribute('src'));\n img.src = `imgs/${getFileNameAndType(img.getAttribute('src')).fileName}`;\n }\n });\n\n // Extract audio URLs\n body.querySelectorAll('audio').forEach(audio => {\n audio.querySelectorAll('source').forEach(source => {\n if (source.hasAttribute('src')) {\n audioUrls.push(source.getAttribute('src'));\n source.src = `audios/${getFileNameAndType(source.getAttribute('src')).fileName}`;\n }\n });\n });\n\n // Extract vectors\n body.querySelectorAll('svg').forEach(svg => {\n vectors.push(svg.outerHTML);\n });\n\n // Extract video URLs\n body.querySelectorAll('video').forEach(video => {\n video.querySelectorAll('source').forEach(source => {\n if (source.hasAttribute('src')) {\n videoUrls.push(source.getAttribute('src'));\n source.src = `vids/${getFileNameAndType(source.getAttribute('src')).fileName}`;\n }\n });\n });\n\n return {\n imageUrls,\n audioUrls,\n vectors,\n videoUrls\n };\n } catch (error) {\n console.error('Error fetching resources:', error);\n return null; // Or handle the error in an appropriate way\n }\n}\nasync function getBase64Media(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}\nasync function downloadJSON() {\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()}-kodeWeave.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}\nasync function downloadProject() {\n try {\n await loadScripts([\n \"libraries/jszip/jszip.min.js\",\n \"libraries/jszip/FileSaver.min.js\"\n ]);\n \n let { imageUrls, audioUrls, vectors, videoUrls } = fetchResources(project);\n\n // Extract srcset URLs\n const iframe = document.getElementById('iframe');\n if (!iframe) return;\n\n const idoc = iframe.contentDocument || iframe.contentWindow.document;\n const srcsetUrls = idoc.querySelectorAll('img[srcset]').forEach(img => {\n img.srcset.split(',').forEach(srcset => {\n const url = srcset.trim().split(' ')[0];\n imageUrls.push(url);\n });\n });\n\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 (!url.startsWith(\"data:\")) {\n urls.push(url);\n }\n }\n return urls;\n }\n \n // Extract background-image URLs from project CSS\n const backgroundUrls = extractBackgroundImageUrls(await compileCode('css'));\n imageUrls = imageUrls.concat(backgroundUrls); // Add to image URLs to download\n\n const zip = new JSZip();\n\n // Project file\n zip.file(`${project.name.split(' ').join('').toLowerCase()}-kodeWeave.json`, JSON.stringify(project, null, 2));\n\n function checkCSSDependencies() {\n if (project.css.trim() !== '') {\n return `\n \"postcss\": \"^8.4.6\",\n \"autoprefixer\": \"^10.4.2\",\n \"cssnano\": \"^5.0.12\"`;\n }\n return '';\n }\n \n function checkJSDependencies() {\n if (project.javascript_pre_processor === 'babel' || project.javascript_pre_processor === 'jsxtypescript') {\n return `,\n \"@babel/core\": \"^7.15.5\",\n \"@babel/preset-env\": \"^7.15.6\",\n \"@babel/preset-react\": \"^7.14.5\",\n \"rollup-plugin-babel\": \"^4.4.0\"`;\n }\n if (project.javascript_pre_processor === 'typescript' || project.javascript_pre_processor === 'jsxtypescript') {\n return `,\n \"rollup-plugin-typescript2\": \"^0.31.1\",\n \"typescript\": \"^4.4.3\"`;\n }\n return '';\n }\n \n // Nodejs Package JSON\n let nodeStr = `{\n \"name\": \"${project.name.toLowerCase().split(' ').join('')}\",\n \"version\": \"${project.version}\",\n \"type\": \"module\",\n \"scripts\": {\n ${project.css.trim() !== '' ? `\"build:css\": \"postcss src/styles.css -o dist/styles.min.css\",\n ` : ''}\"build:js\": \"rollup -c && terser dist/script.js -o dist/script.min.js\",\n \"build\": \"${project.css.trim() !== '' ? 'npm run build:css && ' : ''}npm run build:js\",\n \"serve\": \"http-server -c-1 -p 8081\"\n },\n \"devDependencies\": {\n \"rollup\": \"^2.79.1\",\n \"rollup-plugin-terser\": \"^7.0.2\",\n \"terser\": \"^5.10.0\",\n \"http-server\": \"^14.1.1\"${checkCSSDependencies()}${checkJSDependencies()}\n }\n}`;\n zip.file(\"package.json\", nodeStr);\n \n // Rollup Configuration\n let rollupPlugins = `import { terser } from 'rollup-plugin-terser';\n`;\n \n if (project.javascript_pre_processor === 'babel' || project.javascript_pre_processor === 'jsxtypescript') {\n rollupPlugins += `import babel from 'rollup-plugin-babel';\n`;\n }\n \n if (project.javascript_pre_processor === 'typescript' || project.javascript_pre_processor === 'jsxtypescript') {\n rollupPlugins += `import typescript from 'rollup-plugin-typescript2';\n`;\n }\n \n let rollupStr = `${rollupPlugins}\nexport default {\n ${project.javascript_pre_processor === 'typescript' || project.javascript_pre_processor === 'jsxtypescript' ? \"input: 'src/script.ts', // entry point for your TypeScript\" : \"input: 'src/script.js', // entry point to your Javascript\"}\n output: {\n file: 'dist/script.js',\n format: ${project.module ? \"'es'\" : \"'iife'\"}, // Immediately Invoked Function Expression, suitable for \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',\nnew CacheFirst({\ncacheName: cacheName,\nplugins: [\n// Any additional plugins can be added here\n],\n})\n);`\n zip.file(\"dist/sw.js\", swjs);\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 if (library.endsWith('.css')) {\n cssTags += ` \\n `;\n } else {\n // Assuming it's a Google font\n cssTags += ` \\n `;\n }\n });\n \n // Add index.html\n const indexHtmlContentCompiled = `\n\n \n ${project.title} \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ${cssTags}${project.css ? ' ' : ''}\n ${project.meta ? `${project.meta}\\n ` : ''}\n ${scriptTags ? scriptTags : ''}\n \n \n\n${await compileCode('html')}\n\n${project.javascript ? '' : ''}\n${(project.pwa ? swinit : '')}\n \n`;\n if (project.html_pre_processor === 'html') zip.file('src/index.html', project.html);\n if (project.html_pre_processor === 'html') zip.file('index.html', indexHtmlContentCompiled);\n if (project.html_pre_processor === 'markdown') zip.file('src/index.md', project.html);\n if (project.html_pre_processor === 'markdown') zip.file('index.html', indexHtmlContentCompiled);\n if (project.html_pre_processor === 'pug') zip.file('src/index.pug', project.html);\n if (project.html_pre_processor === 'pug') zip.file('index.html', indexHtmlContentCompiled);\n if (project.html_pre_processor === 'jade') zip.file('src/index.jade', project.html);\n if (project.html_pre_processor === 'jade') zip.file('index.html', indexHtmlContentCompiled);\n\n // Create a folder \"imgs\" and add images inside it with their correct MIME types\n if (audioUrls.length > 0) {\n const audioFolder = zip.folder('audios');\n try {\n for (const audioUrl of audioUrls) {\n const base64Audio = await getBase64Media(audioUrl);\n audioFolder.file(audioUrl.substring(audioUrl.lastIndexOf('/') + 1), base64Audio, { base64: true });\n }\n } catch (error) {\n console.error('Error adding audio to ZIP:', error);\n return;\n }\n }\n if (imageUrls.length > 0) {\n const imgFolder = zip.folder('imgs');\n try {\n // Convert each image URL to Base64 and add to ZIP folder\n for (const imageUrl of imageUrls) {\n const base64Image = await getBase64Media(imageUrl);\n imgFolder.file(imageUrl.substring(imageUrl.lastIndexOf('/') + 1), base64Image, { base64: true });\n }\n } catch (error) {\n console.error('Error adding images to ZIP:', error);\n return; // Exit method or handle error as needed\n }\n }\n if (vectors.length > 0) {\n const svgFolder = zip.folder('svgs');\n try {\n // Convert each SVG to a file inside the 'svgs' folder\n vectors.forEach((svg, index) => {\n svgFolder.file(`vector-${index + 1}.svg`, svg);\n });\n } catch (error) {\n console.error('Error adding images to ZIP:', error);\n return; // Exit method or handle error as needed\n }\n }\n if (videoUrls.length > 0) {\n const videoFolder = zip.folder('vids');\n try {\n for (const videoUrl of videoUrls) {\n const base64Video = await getBase64Media(videoUrl);\n videoFolder.file(videoUrl.substring(videoUrl.lastIndexOf('/') + 1), base64Video, { base64: true });\n }\n } catch (error) {\n console.error('Error adding videos to ZIP:', error);\n return;\n }\n }\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 imageUrls.length = audioUrls.length = videoUrls.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}\nasync function share() {\n try {\n // Compile code if necessary\n const javascriptCode = project.javascript_pre_processor === 'jsxtypescript'\n ? data.compiledJSX\n : project.javascript;\n\n let jsPreprocessor = null;\n if (project.javascript_pre_processor === 'jsxtypescript' || project.javascript_pre_processor === 'javascript') {\n jsPreprocessor = \"none\";\n } else {\n jsPreprocessor = project.javascript_pre_processor;\n }\n\n const shareProject = {\n title: project.title,\n description: project.description,\n head: project.meta,\n html: project.html,\n html_pre_processor: project.html_pre_processor === \"html\" ? \"none\" : \"\",\n css: project.css,\n css_pre_processor: project.css_pre_processor === \"css\" ? \"none\" : \"\",\n css_external: project.libraries.filter(lib => lib.endsWith('.css')).join(';'),\n css_starter: \"neither\",\n css_prefix: \"neither\",\n js_module: project.module,\n js: javascriptCode,\n js_pre_processor: jsPreprocessor,\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 // 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 } catch (error) {\n console.error('Error sharing project:', error);\n }\n}\n\nasync function screenshot() {\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}\nasync function renderPreview(forceRun = false) {\n if (!forceRun || !project.autorun || !data.safeRender) return;\n\n if (data.safeRender) {\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 const javascriptCode = await compileCode('javascript');\n const cssCode = await compileCode('css');\n const consoleCSS = `\n [data-zwj=zwjkonsole] {\n display: ${project.console ? 'flex' : 'none'};\n }`\n const iframeSrc = `\n \n
${project.title} \n
\n
\n
\n
\n ${project.meta ? project.meta : ''}\n ${cssTags}\n \n \n \n \n ${await compileCode('html')}\n ${scriptTags ? scriptTags : ''}\n ${project.css_pre_processor === 'less' ? '' : ''}\n \n`;\n\n const iframe = document.getElementById('iframe');\n if (!iframe) return;\n\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 && !App.initialRender) {\n diffNodes(idoc.documentElement, doc.documentElement);\n return false;\n } else {\n iframe.setAttribute('srcdoc', iframeSrc);\n iframe.onload = () => {\n // Initialize script within the iframe\n const idoc = iframe.contentDocument || iframe.contentWindow.document;\n const script = idoc.createElement('script');\n script.id = \"zzkiapxab\";\n script.type = project.module ? 'module' : 'text/javascript';\n script.textContent = javascriptCode;\n idoc.body.appendChild(script);\n };\n }\n }\n}\n\n// Make functions available in global space\nwindow.Modal = Modal;\nwindow.emptyStorage = emptyStorage;\nwindow.addLibrary = addLibrary;\nwindow.fetchSuggestions = fetchSuggestions;\nwindow.setPreprocessor = setPreprocessor;\nwindow.initializePreprocessors = initializePreprocessors;\nwindow.loadBeautifyLibraries = loadBeautifyLibraries\nwindow.removeBeautifyLibraries = removeBeautifyLibraries;\nwindow.tidy = tidy;\nwindow.generateId = generateId;\nwindow.resizeCanvas = resizeCanvas;\nwindow.rotateCanvas = rotateCanvas;\nwindow.defineScale = defineScale;\nwindow.getIFrameClientSize = getIFrameClientSize;\nwindow.handleLogoChange = handleLogoChange;\nwindow.newProject = newProject;\nwindow.importProject = importProject;\nwindow.downloadJSON = downloadJSON;\nwindow.downloadProject = downloadProject;\nwindow.share = share;\nwindow.screenshot = screenshot;\nwindow.renderPreview = renderPreview;\n\n// Diffing algorithm to update ui when changes occur\nfunction 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 if (window.initEditors) initEditors();\n getIFrameClientSize();\n\n if (localStorage.getItem('kodeWeave')) {\n setTimeout(function() {\n importJSON(JSON.parse(localStorage.getItem('kodeWeave')));\n }, 100);\n } else {\n data.safeRender = true;\n }\n }\n window.onresize = () => getIFrameClientSize();\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", "panelIconCSS", "previewIconCSS", "project", "newValue", "doc", "App", "string", "consoleCSS", "renderPreview", "data", "LeftMenubar", "buttonSize", "PreviewMenu", "buttonClass", "selectClass", "selectStyle", "sizeOptions", "previewSize", "group", "option", "canTidyShow", "container", "size", "viewportWidth", "viewportHeight", "previewElm", "width", "height", "menuDialog", "settingsHTML", "library", "index", "librariesDialog", "buttonContentClass", "imageContentClass", "textContentClass", "frameworks", "buttonHTML", "name", "demosDialog", "html", "editorNav", "element", "currentDoc", "newDoc", "diffNodes", "Modal", "large", "title", "content", "CloseLabel", "ConfirmLabel", "onLoad", "onClose", "onConfirm", "hClass", "modal", "timesBtn", "closeBtn", "confirmBtn", "emptyStorage", "c", "names", "registrations", "registration", "addLibrary", "url", "renderLibraries", "fetchSuggestions", "key", "response", "item", "suggestions", "error", "removeScript", "src", "script", "removeScripts", "scripts", "loadScript", "scriptUrl", "resolve", "reject", "scriptElement", "loadScripts", "srcArray", "setPreprocessor", "editor", "scriptMap", "currentPreprocessors", "scriptSrcCondition", "scriptSrc", "currentScriptSrc", "initializePreprocessors", "loadBeautifyLibraries", "removeBeautifyLibraries", "tidy", "formattedCode", "generateId", "id", "resizeCanvas", "getIFrameClientSize", "rotateCanvas", "iframe", "scale", "defineScale", "fadeTimeout", "compileCode", "detect", "appScript", "err", "output", "handleLogoChange", "event", "file", "base64String", "fileToBase64", "reader", "newProject", "capitalizeFirstLetter", "capitalizedTitle", "importJSON", "importProject", "input", "getFileNameAndType", "fileName", "fileExtension", "fileType", "fetchResources", "body", "imageUrls", "audioUrls", "vectors", "videoUrls", "img", "audio", "source", "svg", "video", "getBase64Media", "mediaUrl", "blob", "downloadJSON", "downloadProject", "extractBackgroundImageUrls", "css", "urls", "regex", "match", "checkCSSDependencies", "checkJSDependencies", "minifyCSS", "cssCode", "srcsetUrls", "srcset", "backgroundUrls", "zip", "nodeStr", "rollupPlugins", "rollupStr", "babelStr", "licenseStr", "READMEStr", "base64Logo", "logoType", "logoFileName", "sizes", "canvas", "ctx", "base64Image", "minifiedCSS", "minifyJS", "jsCode", "minifiedJS", "swinit", "swjs", "scriptTags", "cssTags", "indexHtmlContentCompiled", "audioFolder", "audioUrl", "base64Audio", "imgFolder", "imageUrl", "svgFolder", "videoFolder", "videoUrl", "base64Video", "share", "javascriptCode", "jsPreprocessor", "shareProject", "lib", "form", "screenshot", "iframeDocument", "context", "videoElements", "currentTime", "paused", "volume", "forceRun", "iframeSrc", "idoc", "oldNode", "newNode", "attr", "oldSrcdoc", "newSrcdoc", "oldAttributes", "newAttributes", "oldChildren", "newChildren", "oldChild", "newChild"]
}
diff --git a/go/dist/main.css b/go/dist/main.css
new file mode 100644
index 00000000..04d9d3a0
--- /dev/null
+++ b/go/dist/main.css
@@ -0,0 +1,6 @@
+@charset "UTF-8";
+
+/*!
+ * Pico CSS ✨ v2.0.6 (https://picocss.com)
+ * Copyright 2019-2024 - Licensed under MIT
+ */:root{--pico-font-family-emoji:"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--pico-font-family-sans-serif:system-ui,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,Helvetica,Arial,"Helvetica Neue",sans-serif,var(--pico-font-family-emoji);--pico-font-family-monospace:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace,var(--pico-font-family-emoji);--pico-font-family:var(--pico-font-family-sans-serif);--pico-line-height:1.5;--pico-font-weight:400;--pico-font-size:100%;--pico-text-underline-offset:0.1rem;--pico-border-radius:0.25rem;--pico-border-width:0.0625rem;--pico-outline-width:0.125rem;--pico-transition:0.2s ease-in-out;--pico-spacing:1rem;--pico-typography-spacing-vertical:1rem;--pico-block-spacing-vertical:var(--pico-spacing);--pico-block-spacing-horizontal:var(--pico-spacing);--pico-form-element-spacing-vertical:0.75rem;--pico-form-element-spacing-horizontal:1rem;--pico-group-box-shadow:0 0 0 transparent;--pico-group-box-shadow-focus-with-button:0 0 0 var(--pico-outline-width) var(--pico-primary-focus);--pico-group-box-shadow-focus-with-input:0 0 0 0.0625rem var(--pico-form-element-border-color);--pico-modal-overlay-backdrop-filter:blur(0.375rem);--pico-nav-element-spacing-vertical:1rem;--pico-nav-element-spacing-horizontal:0.5rem;--pico-nav-link-spacing-vertical:0.5rem;--pico-nav-link-spacing-horizontal:0.5rem;--pico-nav-breadcrumb-divider:">";--pico-icon-checkbox:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");--pico-icon-minus:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23FFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='4' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14'/%3E%3C/svg%3E");--pico-icon-chevron:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%238891A4' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");--pico-icon-date:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%238891A4' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='18' height='18' x='3' y='4' rx='2' ry='2'/%3E%3Cpath d='M16 2v4M8 2v4M3 10h18'/%3E%3C/svg%3E");--pico-icon-time:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%238891A4' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 6v6l4 2'/%3E%3C/svg%3E");--pico-icon-search:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%238891A4' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.35-4.35'/%3E%3C/svg%3E");--pico-icon-close:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%238891A4' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");--pico-icon-loading:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' viewBox='0 0 24 24'%3E%3Cstyle%3E@keyframes rotate{0%25{transform:rotate(0deg)}to{transform:rotate(360deg)}}@keyframes dash{0%25{stroke-dasharray:1,100;stroke-dashoffset:0}50%25{stroke-dasharray:44.5,100;stroke-dashoffset:-17.5}to{stroke-dasharray:44.5,100;stroke-dashoffset:-62}}%3C/style%3E%3Cg style='animation:rotate 2s linear infinite;transform-origin:center center'%3E%3Ccircle cx='12' cy='12' r='10' stroke='%238891A4' stroke-width='4' style='stroke-dasharray:75,100;stroke-dashoffset:-5;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round'/%3E%3C/g%3E%3C/svg%3E")}@media (min-width:576px){:root{--pico-font-size:106.25%}}@media (min-width:768px){:root{--pico-font-size:112.5%}}@media (min-width:1024px){:root{--pico-font-size:118.75%}}@media (min-width:1280px){:root{--pico-font-size:125%}}@media (min-width:1536px){:root{--pico-font-size:131.25%}}:where(select,textarea),input:not([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]){--pico-outline-width:0.0625rem}[type=search]{--pico-border-radius:5rem}[type=checkbox],[type=radio]{--pico-border-width:0.125rem}[type=checkbox][role=switch]{--pico-border-width:0.1875rem}[role=search]{--pico-border-radius:5rem}[role=group] [role=button],[role=group] [type=button],[role=group] [type=submit],[role=group] button,[role=search] [role=button],[role=search] [type=button],[role=search] [type=submit],[role=search] button{--pico-form-element-spacing-horizontal:2rem}details summary[role=button]:after{filter:brightness(0) invert(1)}:root:not([data-theme=dark]),[data-theme=light]{--pico-background-color:#fff;--pico-color:#373c44;--pico-text-selection-color:rgba(2,154,232,.25);--pico-muted-color:#646b79;--pico-muted-border-color:#e7eaf0;--pico-primary:#0172ad;--pico-primary-background:#0172ad;--pico-primary-border:var(--pico-primary-background);--pico-primary-underline:rgba(1,114,173,.5);--pico-primary-hover:#015887;--pico-primary-hover-background:#02659a;--pico-primary-hover-border:var(--pico-primary-hover-background);--pico-primary-hover-underline:var(--pico-primary-hover);--pico-primary-focus:rgba(2,154,232,.5);--pico-primary-inverse:#fff;--pico-secondary:#5d6b89;--pico-secondary-background:#525f7a;--pico-secondary-border:var(--pico-secondary-background);--pico-secondary-underline:rgba(93,107,137,.5);--pico-secondary-hover:#48536b;--pico-secondary-hover-background:#48536b;--pico-secondary-hover-border:var(--pico-secondary-hover-background);--pico-secondary-hover-underline:var(--pico-secondary-hover);--pico-secondary-focus:rgba(93,107,137,.25);--pico-secondary-inverse:#fff;--pico-contrast:#181c25;--pico-contrast-background:#181c25;--pico-contrast-border:var(--pico-contrast-background);--pico-contrast-underline:rgba(24,28,37,.5);--pico-contrast-hover:#000;--pico-contrast-hover-background:#000;--pico-contrast-hover-border:var(--pico-contrast-hover-background);--pico-contrast-hover-underline:var(--pico-secondary-hover);--pico-contrast-focus:rgba(93,107,137,.25);--pico-contrast-inverse:#fff;--pico-box-shadow:0.0145rem 0.029rem 0.174rem rgba(129,145,181,.017),0.0335rem 0.067rem 0.402rem rgba(129,145,181,.024),0.0625rem 0.125rem 0.75rem rgba(129,145,181,.03),0.1125rem 0.225rem 1.35rem rgba(129,145,181,.036),0.2085rem 0.417rem 2.502rem rgba(129,145,181,.043),0.5rem 1rem 6rem rgba(129,145,181,.06),0 0 0 0.0625rem rgba(129,145,181,.015);--pico-h1-color:#2d3138;--pico-h2-color:#373c44;--pico-h3-color:#424751;--pico-h4-color:#4d535e;--pico-h5-color:#5c6370;--pico-h6-color:#646b79;--pico-mark-background-color:#fde7c0;--pico-mark-color:#0f1114;--pico-ins-color:#1d6a54;--pico-del-color:#883935;--pico-blockquote-border-color:var(--pico-muted-border-color);--pico-blockquote-footer-color:var(--pico-muted-color);--pico-button-box-shadow:0 0 0 transparent;--pico-button-hover-box-shadow:0 0 0 transparent;--pico-table-border-color:var(--pico-muted-border-color);--pico-table-row-stripped-background-color:rgba(111,120,135,.038);--pico-code-background-color:#f3f5f7;--pico-code-color:#646b79;--pico-code-kbd-background-color:var(--pico-color);--pico-code-kbd-color:var(--pico-background-color);--pico-form-element-background-color:#fbfcfc;--pico-form-element-selected-background-color:#dfe3eb;--pico-form-element-border-color:#cfd5e2;--pico-form-element-color:#23262c;--pico-form-element-placeholder-color:var(--pico-muted-color);--pico-form-element-active-background-color:#fff;--pico-form-element-active-border-color:var(--pico-primary-border);--pico-form-element-focus-color:var(--pico-primary-border);--pico-form-element-disabled-opacity:0.5;--pico-form-element-invalid-border-color:#b86a6b;--pico-form-element-invalid-active-border-color:#c84f48;--pico-form-element-invalid-focus-color:var(--pico-form-element-invalid-active-border-color);--pico-form-element-valid-border-color:#4c9b8a;--pico-form-element-valid-active-border-color:#279977;--pico-form-element-valid-focus-color:var(--pico-form-element-valid-active-border-color);--pico-switch-background-color:#bfc7d9;--pico-switch-checked-background-color:var(--pico-primary-background);--pico-switch-color:#fff;--pico-switch-thumb-box-shadow:0 0 0 transparent;--pico-range-border-color:#dfe3eb;--pico-range-active-border-color:#bfc7d9;--pico-range-thumb-border-color:var(--pico-background-color);--pico-range-thumb-color:var(--pico-secondary-background);--pico-range-thumb-active-color:var(--pico-primary-background);--pico-accordion-border-color:var(--pico-muted-border-color);--pico-accordion-active-summary-color:var(--pico-primary-hover);--pico-accordion-close-summary-color:var(--pico-color);--pico-accordion-open-summary-color:var(--pico-muted-color);--pico-card-background-color:var(--pico-background-color);--pico-card-border-color:var(--pico-muted-border-color);--pico-card-box-shadow:var(--pico-box-shadow);--pico-card-sectioning-background-color:#fbfcfc;--pico-loading-spinner-opacity:0.5;--pico-modal-overlay-background-color:rgba(232,234,237,.75);--pico-progress-background-color:#dfe3eb;--pico-progress-color:var(--pico-primary-background);--pico-tooltip-background-color:var(--pico-contrast-background);--pico-tooltip-color:var(--pico-contrast-inverse);--pico-icon-valid:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%234C9B8A' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");--pico-icon-invalid:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23C84F48' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 8v4M12 16h.01'/%3E%3C/svg%3E");color-scheme:light}:root:not([data-theme=dark]) input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]),[data-theme=light] input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]){--pico-form-element-focus-color:var(--pico-primary-focus)}@media only screen and (prefers-color-scheme:dark){:root:not([data-theme]){--pico-background-color:#13171f;--pico-color:#c2c7d0;--pico-text-selection-color:rgba(1,170,255,.188);--pico-muted-color:#7b8495;--pico-muted-border-color:#202632;--pico-primary:#01aaff;--pico-primary-background:#0172ad;--pico-primary-border:var(--pico-primary-background);--pico-primary-underline:rgba(1,170,255,.5);--pico-primary-hover:#79c0ff;--pico-primary-hover-background:#017fc0;--pico-primary-hover-border:var(--pico-primary-hover-background);--pico-primary-hover-underline:var(--pico-primary-hover);--pico-primary-focus:rgba(1,170,255,.375);--pico-primary-inverse:#fff;--pico-secondary:#969eaf;--pico-secondary-background:#525f7a;--pico-secondary-border:var(--pico-secondary-background);--pico-secondary-underline:rgba(150,158,175,.5);--pico-secondary-hover:#b3b9c5;--pico-secondary-hover-background:#5d6b89;--pico-secondary-hover-border:var(--pico-secondary-hover-background);--pico-secondary-hover-underline:var(--pico-secondary-hover);--pico-secondary-focus:rgba(144,158,190,.25);--pico-secondary-inverse:#fff;--pico-contrast:#dfe3eb;--pico-contrast-background:#eff1f4;--pico-contrast-border:var(--pico-contrast-background);--pico-contrast-underline:rgba(223,227,235,.5);--pico-contrast-hover:#fff;--pico-contrast-hover-background:#fff;--pico-contrast-hover-border:var(--pico-contrast-hover-background);--pico-contrast-hover-underline:var(--pico-contrast-hover);--pico-contrast-focus:rgba(207,213,226,.25);--pico-contrast-inverse:#000;--pico-box-shadow:0.0145rem 0.029rem 0.174rem rgba(7,9,12,.017),0.0335rem 0.067rem 0.402rem rgba(7,9,12,.024),0.0625rem 0.125rem 0.75rem rgba(7,9,12,.03),0.1125rem 0.225rem 1.35rem rgba(7,9,12,.036),0.2085rem 0.417rem 2.502rem rgba(7,9,12,.043),0.5rem 1rem 6rem rgba(7,9,12,.06),0 0 0 0.0625rem rgba(7,9,12,.015);--pico-h1-color:#f0f1f3;--pico-h2-color:#e0e3e7;--pico-h3-color:#c2c7d0;--pico-h4-color:#b3b9c5;--pico-h5-color:#a4acba;--pico-h6-color:#8891a4;--pico-mark-background-color:#014063;--pico-mark-color:#fff;--pico-ins-color:#62af9a;--pico-del-color:#ce7e7b;--pico-blockquote-border-color:var(--pico-muted-border-color);--pico-blockquote-footer-color:var(--pico-muted-color);--pico-button-box-shadow:0 0 0 transparent;--pico-button-hover-box-shadow:0 0 0 transparent;--pico-table-border-color:var(--pico-muted-border-color);--pico-table-row-stripped-background-color:rgba(111,120,135,.038);--pico-code-background-color:#1a1f28;--pico-code-color:#8891a4;--pico-code-kbd-background-color:var(--pico-color);--pico-code-kbd-color:var(--pico-background-color);--pico-form-element-background-color:#1c212c;--pico-form-element-selected-background-color:#2a3140;--pico-form-element-border-color:#2a3140;--pico-form-element-color:#e0e3e7;--pico-form-element-placeholder-color:#8891a4;--pico-form-element-active-background-color:#1a1f28;--pico-form-element-active-border-color:var(--pico-primary-border);--pico-form-element-focus-color:var(--pico-primary-border);--pico-form-element-disabled-opacity:0.5;--pico-form-element-invalid-border-color:#964a50;--pico-form-element-invalid-active-border-color:#b7403b;--pico-form-element-invalid-focus-color:var(--pico-form-element-invalid-active-border-color);--pico-form-element-valid-border-color:#2a7b6f;--pico-form-element-valid-active-border-color:#16896a;--pico-form-element-valid-focus-color:var(--pico-form-element-valid-active-border-color);--pico-switch-background-color:#333c4e;--pico-switch-checked-background-color:var(--pico-primary-background);--pico-switch-color:#fff;--pico-switch-thumb-box-shadow:0 0 0 transparent;--pico-range-border-color:#202632;--pico-range-active-border-color:#2a3140;--pico-range-thumb-border-color:var(--pico-background-color);--pico-range-thumb-color:var(--pico-secondary-background);--pico-range-thumb-active-color:var(--pico-primary-background);--pico-accordion-border-color:var(--pico-muted-border-color);--pico-accordion-active-summary-color:var(--pico-primary-hover);--pico-accordion-close-summary-color:var(--pico-color);--pico-accordion-open-summary-color:var(--pico-muted-color);--pico-card-background-color:#181c25;--pico-card-border-color:var(--pico-card-background-color);--pico-card-box-shadow:var(--pico-box-shadow);--pico-card-sectioning-background-color:#1a1f28;--pico-loading-spinner-opacity:0.5;--pico-modal-overlay-background-color:rgba(8,9,10,.75);--pico-progress-background-color:#202632;--pico-progress-color:var(--pico-primary-background);--pico-tooltip-background-color:var(--pico-contrast-background);--pico-tooltip-color:var(--pico-contrast-inverse);--pico-icon-valid:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232A7B6F' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");--pico-icon-invalid:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23964A50' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 8v4M12 16h.01'/%3E%3C/svg%3E");color-scheme:dark}:root:not([data-theme]) input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]){--pico-form-element-focus-color:var(--pico-primary-focus)}}[data-theme=dark]{--pico-background-color:#13171f;--pico-color:#c2c7d0;--pico-text-selection-color:rgba(1,170,255,.188);--pico-muted-color:#7b8495;--pico-muted-border-color:#202632;--pico-primary:#01aaff;--pico-primary-background:#0172ad;--pico-primary-border:var(--pico-primary-background);--pico-primary-underline:rgba(1,170,255,.5);--pico-primary-hover:#79c0ff;--pico-primary-hover-background:#017fc0;--pico-primary-hover-border:var(--pico-primary-hover-background);--pico-primary-hover-underline:var(--pico-primary-hover);--pico-primary-focus:rgba(1,170,255,.375);--pico-primary-inverse:#fff;--pico-secondary:#969eaf;--pico-secondary-background:#525f7a;--pico-secondary-border:var(--pico-secondary-background);--pico-secondary-underline:rgba(150,158,175,.5);--pico-secondary-hover:#b3b9c5;--pico-secondary-hover-background:#5d6b89;--pico-secondary-hover-border:var(--pico-secondary-hover-background);--pico-secondary-hover-underline:var(--pico-secondary-hover);--pico-secondary-focus:rgba(144,158,190,.25);--pico-secondary-inverse:#fff;--pico-contrast:#dfe3eb;--pico-contrast-background:#eff1f4;--pico-contrast-border:var(--pico-contrast-background);--pico-contrast-underline:rgba(223,227,235,.5);--pico-contrast-hover:#fff;--pico-contrast-hover-background:#fff;--pico-contrast-hover-border:var(--pico-contrast-hover-background);--pico-contrast-hover-underline:var(--pico-contrast-hover);--pico-contrast-focus:rgba(207,213,226,.25);--pico-contrast-inverse:#000;--pico-box-shadow:0.0145rem 0.029rem 0.174rem rgba(7,9,12,.017),0.0335rem 0.067rem 0.402rem rgba(7,9,12,.024),0.0625rem 0.125rem 0.75rem rgba(7,9,12,.03),0.1125rem 0.225rem 1.35rem rgba(7,9,12,.036),0.2085rem 0.417rem 2.502rem rgba(7,9,12,.043),0.5rem 1rem 6rem rgba(7,9,12,.06),0 0 0 0.0625rem rgba(7,9,12,.015);--pico-h1-color:#f0f1f3;--pico-h2-color:#e0e3e7;--pico-h3-color:#c2c7d0;--pico-h4-color:#b3b9c5;--pico-h5-color:#a4acba;--pico-h6-color:#8891a4;--pico-mark-background-color:#014063;--pico-mark-color:#fff;--pico-ins-color:#62af9a;--pico-del-color:#ce7e7b;--pico-blockquote-border-color:var(--pico-muted-border-color);--pico-blockquote-footer-color:var(--pico-muted-color);--pico-button-box-shadow:0 0 0 transparent;--pico-button-hover-box-shadow:0 0 0 transparent;--pico-table-border-color:var(--pico-muted-border-color);--pico-table-row-stripped-background-color:rgba(111,120,135,.038);--pico-code-background-color:#1a1f28;--pico-code-color:#8891a4;--pico-code-kbd-background-color:var(--pico-color);--pico-code-kbd-color:var(--pico-background-color);--pico-form-element-background-color:#1c212c;--pico-form-element-selected-background-color:#2a3140;--pico-form-element-border-color:#2a3140;--pico-form-element-color:#e0e3e7;--pico-form-element-placeholder-color:#8891a4;--pico-form-element-active-background-color:#1a1f28;--pico-form-element-active-border-color:var(--pico-primary-border);--pico-form-element-focus-color:var(--pico-primary-border);--pico-form-element-disabled-opacity:0.5;--pico-form-element-invalid-border-color:#964a50;--pico-form-element-invalid-active-border-color:#b7403b;--pico-form-element-invalid-focus-color:var(--pico-form-element-invalid-active-border-color);--pico-form-element-valid-border-color:#2a7b6f;--pico-form-element-valid-active-border-color:#16896a;--pico-form-element-valid-focus-color:var(--pico-form-element-valid-active-border-color);--pico-switch-background-color:#333c4e;--pico-switch-checked-background-color:var(--pico-primary-background);--pico-switch-color:#fff;--pico-switch-thumb-box-shadow:0 0 0 transparent;--pico-range-border-color:#202632;--pico-range-active-border-color:#2a3140;--pico-range-thumb-border-color:var(--pico-background-color);--pico-range-thumb-color:var(--pico-secondary-background);--pico-range-thumb-active-color:var(--pico-primary-background);--pico-accordion-border-color:var(--pico-muted-border-color);--pico-accordion-active-summary-color:var(--pico-primary-hover);--pico-accordion-close-summary-color:var(--pico-color);--pico-accordion-open-summary-color:var(--pico-muted-color);--pico-card-background-color:#181c25;--pico-card-border-color:var(--pico-card-background-color);--pico-card-box-shadow:var(--pico-box-shadow);--pico-card-sectioning-background-color:#1a1f28;--pico-loading-spinner-opacity:0.5;--pico-modal-overlay-background-color:rgba(8,9,10,.75);--pico-progress-background-color:#202632;--pico-progress-color:var(--pico-primary-background);--pico-tooltip-background-color:var(--pico-contrast-background);--pico-tooltip-color:var(--pico-contrast-inverse);--pico-icon-valid:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232A7B6F' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");--pico-icon-invalid:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23964A50' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 8v4M12 16h.01'/%3E%3C/svg%3E");color-scheme:dark}[data-theme=dark] input:is([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[type=file]){--pico-form-element-focus-color:var(--pico-primary-focus)}[type=checkbox],[type=radio],[type=range],progress{accent-color:var(--pico-primary)}*,:after,:before{background-repeat:no-repeat;box-sizing:border-box}:after,:before{text-decoration:inherit;vertical-align:inherit}:where(:root){-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--pico-background-color);color:var(--pico-color);font-family:var(--pico-font-family);font-size:var(--pico-font-size);font-weight:var(--pico-font-weight);line-height:var(--pico-line-height);overflow-wrap:break-word;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-rendering:optimizeLegibility;text-underline-offset:var(--pico-text-underline-offset)}body{margin:0;width:100%}main{display:block}body>footer,body>header,body>main{margin-left:auto;margin-right:auto;padding:var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal);width:100%}@media (min-width:576px){body>footer,body>header,body>main{max-width:510px;padding-left:0;padding-right:0}}@media (min-width:768px){body>footer,body>header,body>main{max-width:700px}}@media (min-width:1024px){body>footer,body>header,body>main{max-width:950px}}@media (min-width:1280px){body>footer,body>header,body>main{max-width:1200px}}@media (min-width:1536px){body>footer,body>header,body>main{max-width:1450px}}a[role=button]{display:inline-block}button{font-family:inherit;margin:0;overflow:visible;text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[role=button],[type=button],[type=file]::file-selector-button,[type=reset],[type=submit],button{--pico-background-color:var(--pico-primary-background);--pico-border-color:var(--pico-primary-border);--pico-color:var(--pico-primary-inverse);--pico-box-shadow:var(--pico-button-box-shadow,0 0 0 transparent);background-color:var(--pico-background-color);border:var(--pico-border-width) solid var(--pico-border-color);border-radius:var(--pico-border-radius);box-shadow:var(--pico-box-shadow);color:var(--pico-color);cursor:pointer;font-size:1rem;font-weight:var(--pico-font-weight);line-height:var(--pico-line-height);outline:0;padding:var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal);text-align:center;text-decoration:none;transition:background-color var(--pico-transition),border-color var(--pico-transition),color var(--pico-transition),box-shadow var(--pico-transition);-webkit-user-select:none;-moz-user-select:none;user-select:none}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}img{border-style:none;height:auto;max-width:100%}:where(iframe){border-style:none}hr{border:0;border-top:1px solid var(--pico-muted-border-color);color:inherit;height:0;margin:var(--pico-typography-spacing-vertical) 0}input,optgroup,select,textarea{font-family:inherit;font-size:1rem;letter-spacing:inherit;line-height:var(--pico-line-height);margin:0}input{overflow:visible}select{text-transform:none}legend{color:inherit;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{padding:0}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:0}:-moz-ui-invalid{box-shadow:none}::-ms-expand{display:none}[type=file],[type=range]{border-width:0;padding:0}input:not([type=checkbox],[type=radio],[type=range]){height:calc(1rem*var(--pico-line-height) + var(--pico-form-element-spacing-vertical)*2 + var(--pico-border-width)*2)}button[type=submit],input:not([type=checkbox],[type=radio]),select,textarea{width:100%}input:not([type=checkbox],[type=radio],[type=range],[type=file]),select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:var(--pico-form-element-spacing-vertical) var(--pico-form-element-spacing-horizontal)}input,select,textarea{--pico-background-color:var(--pico-form-element-background-color);--pico-border-color:var(--pico-form-element-border-color);--pico-color:var(--pico-form-element-color);--pico-box-shadow:none;background-color:var(--pico-background-color);border:var(--pico-border-width) solid var(--pico-border-color);border-radius:var(--pico-border-radius);box-shadow:var(--pico-box-shadow);color:var(--pico-color);font-weight:var(--pico-font-weight);outline:0;transition:background-color var(--pico-transition),border-color var(--pico-transition),color var(--pico-transition),box-shadow var(--pico-transition)}:where(select,textarea):not([readonly]):is(:active,:focus),input:not([type=submit],[type=button],[type=reset],[type=checkbox],[type=radio],[readonly]):is(:active,:focus){--pico-background-color:var(--pico-form-element-active-background-color)}:where(select,textarea):not([readonly]):is(:active,:focus),input:not([type=submit],[type=button],[type=reset],[role=switch],[readonly]):is(:active,:focus){--pico-border-color:var(--pico-form-element-active-border-color)}:where(select,textarea):not([readonly]):focus,input:not([type=submit],[type=button],[type=reset],[type=range],[type=file],[readonly]):focus{--pico-box-shadow:0 0 0 var(--pico-outline-width) var(--pico-form-element-focus-color)}:where(fieldset[disabled]) :is(input:not([type=submit],[type=button],[type=reset]),select,textarea),input:not([type=submit],[type=button],[type=reset])[disabled],label[aria-disabled=true],select[disabled],textarea[disabled]{opacity:var(--pico-form-element-disabled-opacity);pointer-events:none}label[aria-disabled=true] input[disabled]{opacity:1}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week],[type=range])[aria-invalid]{background-position:center right .75rem;background-repeat:no-repeat;background-size:1rem auto;padding-left:var(--pico-form-element-spacing-horizontal);padding-right:calc(var(--pico-form-element-spacing-horizontal) + 1.5rem)!important;padding-inline-end:calc(var(--pico-form-element-spacing-horizontal) + 1.5rem)!important;padding-inline-start:var(--pico-form-element-spacing-horizontal)!important}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week],[type=range])[aria-invalid=false]:not(select){background-image:var(--pico-icon-valid)}:where(input,select,textarea):not([type=checkbox],[type=radio],[type=date],[type=datetime-local],[type=month],[type=time],[type=week],[type=range])[aria-invalid=true]:not(select){background-image:var(--pico-icon-invalid)}:where(input,select,textarea)[aria-invalid=false]{--pico-border-color:var(--pico-form-element-valid-border-color)}:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus){--pico-border-color:var(--pico-form-element-valid-active-border-color)!important}:where(input,select,textarea)[aria-invalid=false]:is(:active,:focus):not([type=checkbox],[type=radio]){--pico-box-shadow:0 0 0 var(--pico-outline-width) var(--pico-form-element-valid-focus-color)!important}:where(input,select,textarea)[aria-invalid=true]{--pico-border-color:var(--pico-form-element-invalid-border-color)}:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus){--pico-border-color:var(--pico-form-element-invalid-active-border-color)!important}:where(input,select,textarea)[aria-invalid=true]:is(:active,:focus):not([type=checkbox],[type=radio]){--pico-box-shadow:0 0 0 var(--pico-outline-width) var(--pico-form-element-invalid-focus-color)!important}[dir=rtl] :where(input,select,textarea):not([type=checkbox],[type=radio]):is([aria-invalid],[aria-invalid=true],[aria-invalid=false]){background-position:center left .75rem}input::-webkit-input-placeholder,input::placeholder,select:invalid,textarea::-webkit-input-placeholder,textarea::placeholder{color:var(--pico-form-element-placeholder-color);opacity:1}input:not([type=checkbox],[type=radio]),select,textarea{margin-bottom:var(--pico-spacing)}select::-ms-expand{background-color:transparent;border:0}select:not([multiple],[size]){background-image:var(--pico-icon-chevron);background-position:center right .75rem;background-repeat:no-repeat;background-size:1rem auto;padding-left:var(--pico-form-element-spacing-horizontal);padding-right:calc(var(--pico-form-element-spacing-horizontal) + 1.5rem);padding-inline-end:calc(var(--pico-form-element-spacing-horizontal) + 1.5rem);padding-inline-start:var(--pico-form-element-spacing-horizontal)}select[multiple] option:checked{background:var(--pico-form-element-selected-background-color);color:var(--pico-form-element-color)}[dir=rtl] select:not([multiple],[size]){background-position:center left .75rem}textarea{display:block;resize:vertical}textarea[aria-invalid]{--pico-icon-height:calc(1rem*var(--pico-line-height) + var(--pico-form-element-spacing-vertical)*2 + var(--pico-border-width)*2);background-position:top right .75rem!important;background-size:1rem var(--pico-icon-height)!important}:where(input,select,textarea,fieldset)+small{color:var(--pico-muted-color);display:block;margin-bottom:var(--pico-spacing);margin-top:calc(var(--pico-spacing)*-.75);width:100%}:where(input,select,textarea,fieldset)[aria-invalid=false]+small{color:var(--pico-ins-color)}:where(input,select,textarea,fieldset)[aria-invalid=true]+small{color:var(--pico-del-color)}label>:where(input,select,textarea){margin-top:calc(var(--pico-spacing)*.25)}label:has([type=checkbox],[type=radio]){cursor:pointer;width:-moz-fit-content;width:fit-content}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-width:var(--pico-border-width);cursor:pointer;height:1.25em;margin-top:-.125em;margin-inline-end:.5em;vertical-align:middle;width:1.25em}[type=checkbox]::-ms-check,[type=radio]::-ms-check{display:none}[type=checkbox]:checked,[type=checkbox]:checked:active,[type=checkbox]:checked:focus,[type=radio]:checked,[type=radio]:checked:active,[type=radio]:checked:focus{--pico-background-color:var(--pico-primary-background);--pico-border-color:var(--pico-primary-border);background-image:var(--pico-icon-checkbox);background-position:50%;background-repeat:no-repeat;background-size:.75em auto}[type=checkbox]~label,[type=radio]~label{cursor:pointer;display:inline-block;margin-bottom:0}[type=checkbox]~label:not(:last-of-type),[type=radio]~label:not(:last-of-type){margin-inline-end:1em}[type=checkbox]:indeterminate{--pico-background-color:var(--pico-primary-background);--pico-border-color:var(--pico-primary-border);background-image:var(--pico-icon-minus);background-position:50%;background-repeat:no-repeat;background-size:.75em auto}[type=radio]{border-radius:50%}[type=radio]:checked,[type=radio]:checked:active,[type=radio]:checked:focus{--pico-background-color:var(--pico-primary-inverse);background-image:none;border-width:.35em}[type=checkbox][role=switch]{--pico-background-color:var(--pico-switch-background-color);--pico-color:var(--pico-switch-color);background-color:var(--pico-background-color);border:var(--pico-border-width) solid var(--pico-border-color);border-radius:1.25em;height:1.25em;line-height:1.25em;width:2.25em}[type=checkbox][role=switch]:not([aria-invalid]){--pico-border-color:var(--pico-switch-background-color)}[type=checkbox][role=switch]:before{aspect-ratio:1;background-color:var(--pico-color);border-radius:50%;box-shadow:var(--pico-switch-thumb-box-shadow);content:"";display:block;height:100%;transition:margin .1s ease-in-out}[type=checkbox][role=switch]:focus{--pico-background-color:var(--pico-switch-background-color);--pico-border-color:var(--pico-switch-background-color)}[type=checkbox][role=switch]:checked{--pico-background-color:var(--pico-switch-checked-background-color);--pico-border-color:var(--pico-switch-checked-background-color);background-image:none}[type=checkbox][role=switch]:checked:before{margin-inline-start:1em}[type=checkbox][role=switch][disabled]{--pico-background-color:var(--pico-border-color)}[type=checkbox][aria-invalid=false]:checked,[type=checkbox][aria-invalid=false]:checked:active,[type=checkbox][aria-invalid=false]:checked:focus,[type=checkbox][role=switch][aria-invalid=false]:checked,[type=checkbox][role=switch][aria-invalid=false]:checked:active,[type=checkbox][role=switch][aria-invalid=false]:checked:focus{--pico-background-color:var(--pico-form-element-valid-border-color)}[type=checkbox]:checked:active[aria-invalid=true],[type=checkbox]:checked:focus[aria-invalid=true],[type=checkbox]:checked[aria-invalid=true],[type=checkbox][role=switch]:checked:active[aria-invalid=true],[type=checkbox][role=switch]:checked:focus[aria-invalid=true],[type=checkbox][role=switch]:checked[aria-invalid=true]{--pico-background-color:var(--pico-form-element-invalid-border-color)}[type=checkbox][aria-invalid=false]:checked,[type=checkbox][aria-invalid=false]:checked:active,[type=checkbox][aria-invalid=false]:checked:focus,[type=checkbox][role=switch][aria-invalid=false]:checked,[type=checkbox][role=switch][aria-invalid=false]:checked:active,[type=checkbox][role=switch][aria-invalid=false]:checked:focus,[type=radio][aria-invalid=false]:checked,[type=radio][aria-invalid=false]:checked:active,[type=radio][aria-invalid=false]:checked:focus{--pico-border-color:var(--pico-form-element-valid-border-color)}[type=checkbox]:checked:active[aria-invalid=true],[type=checkbox]:checked:focus[aria-invalid=true],[type=checkbox]:checked[aria-invalid=true],[type=checkbox][role=switch]:checked:active[aria-invalid=true],[type=checkbox][role=switch]:checked:focus[aria-invalid=true],[type=checkbox][role=switch]:checked[aria-invalid=true],[type=radio]:checked:active[aria-invalid=true],[type=radio]:checked:focus[aria-invalid=true],[type=radio]:checked[aria-invalid=true]{--pico-border-color:var(--pico-form-element-invalid-border-color)}[type=color]::-webkit-color-swatch-wrapper{padding:0}[type=color]::-moz-focus-inner{padding:0}[type=color]::-webkit-color-swatch{border:0;border-radius:calc(var(--pico-border-radius)*.5)}[type=color]::-moz-color-swatch{border:0;border-radius:calc(var(--pico-border-radius)*.5)}input:not([type=checkbox],[type=radio],[type=range],[type=file]):is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]){--pico-icon-position:0.75rem;--pico-icon-width:1rem;background-image:var(--pico-icon-date);background-position:center right var(--pico-icon-position);background-repeat:no-repeat;background-size:var(--pico-icon-width) auto;padding-right:calc(var(--pico-icon-width) + var(--pico-icon-position))}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=time]{background-image:var(--pico-icon-time)}[type=date]::-webkit-calendar-picker-indicator,[type=datetime-local]::-webkit-calendar-picker-indicator,[type=month]::-webkit-calendar-picker-indicator,[type=time]::-webkit-calendar-picker-indicator,[type=week]::-webkit-calendar-picker-indicator{margin-left:var(--pico-icon-position);margin-right:calc(var(--pico-icon-width)*-1);opacity:0;width:var(--pico-icon-width)}@-moz-document url-prefix(){[type=date],[type=datetime-local],[type=month],[type=time],[type=week]{background-image:none!important;padding-right:var(--pico-form-element-spacing-horizontal)!important}}[dir=rtl] :is([type=date],[type=datetime-local],[type=month],[type=time],[type=week]){text-align:right}[type=file]{--pico-color:var(--pico-muted-color);background:0 0;border:0;border-radius:0;margin-left:calc(var(--pico-outline-width)*-1);padding:calc(var(--pico-form-element-spacing-vertical)*.5) 0;padding-left:var(--pico-outline-width)}[type=file]::file-selector-button{margin-right:calc(var(--pico-spacing)/2);padding:calc(var(--pico-form-element-spacing-vertical)*.5) var(--pico-form-element-spacing-horizontal)}[type=file]:is(:hover,:active,:focus)::file-selector-button{--pico-background-color:var(--pico-secondary-hover-background);--pico-border-color:var(--pico-secondary-hover-border)}[type=file]:focus::file-selector-button{--pico-box-shadow:var(--pico-button-hover-box-shadow,0 0 0 transparent),0 0 0 var(--pico-outline-width) var(--pico-secondary-focus)}[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;height:1.25rem;width:100%}[type=range]::-webkit-slider-runnable-track{background-color:var(--pico-range-border-color);border-radius:var(--pico-border-radius);height:.375rem;-webkit-transition:background-color var(--pico-transition),box-shadow var(--pico-transition);transition:background-color var(--pico-transition),box-shadow var(--pico-transition);width:100%}[type=range]::-moz-range-track{background-color:var(--pico-range-border-color);border-radius:var(--pico-border-radius);height:.375rem;-moz-transition:background-color var(--pico-transition),box-shadow var(--pico-transition);transition:background-color var(--pico-transition),box-shadow var(--pico-transition);width:100%}[type=range]::-ms-track{background-color:var(--pico-range-border-color);border-radius:var(--pico-border-radius);height:.375rem;-ms-transition:background-color var(--pico-transition),box-shadow var(--pico-transition);transition:background-color var(--pico-transition),box-shadow var(--pico-transition);width:100%}[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background-color:var(--pico-range-thumb-color);border:2px solid var(--pico-range-thumb-border-color);border-radius:50%;cursor:pointer;height:1.25rem;margin-top:-.4375rem;-webkit-transition:background-color var(--pico-transition),transform var(--pico-transition);transition:background-color var(--pico-transition),transform var(--pico-transition);width:1.25rem}[type=range]::-moz-range-thumb{-webkit-appearance:none;background-color:var(--pico-range-thumb-color);border:2px solid var(--pico-range-thumb-border-color);border-radius:50%;cursor:pointer;height:1.25rem;margin-top:-.4375rem;-moz-transition:background-color var(--pico-transition),transform var(--pico-transition);transition:background-color var(--pico-transition),transform var(--pico-transition);width:1.25rem}[type=range]::-ms-thumb{-webkit-appearance:none;background-color:var(--pico-range-thumb-color);border:2px solid var(--pico-range-thumb-border-color);border-radius:50%;cursor:pointer;height:1.25rem;margin-top:-.4375rem;-ms-transition:background-color var(--pico-transition),transform var(--pico-transition);transition:background-color var(--pico-transition),transform var(--pico-transition);width:1.25rem}[type=range]:active,[type=range]:focus-within{--pico-range-border-color:var(--pico-range-active-border-color);--pico-range-thumb-color:var(--pico-range-thumb-active-color)}[type=range]:active::-webkit-slider-thumb{transform:scale(1.25)}[type=range]:active::-moz-range-thumb{transform:scale(1.25)}[type=range]:active::-ms-thumb{transform:scale(1.25)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search]{background-image:var(--pico-icon-search);background-position:center left calc(var(--pico-form-element-spacing-horizontal) + .125rem);background-repeat:no-repeat;background-size:1rem auto;padding-inline-start:calc(var(--pico-form-element-spacing-horizontal) + 1.75rem)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid]{background-position:center left 1.125rem,center right .75rem;padding-inline-start:calc(var(--pico-form-element-spacing-horizontal) + 1.75rem)!important}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid=false]{background-image:var(--pico-icon-search),var(--pico-icon-valid)}input:not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid=true]{background-image:var(--pico-icon-search),var(--pico-icon-invalid)}[dir=rtl] :where(input):not([type=checkbox],[type=radio],[type=range],[type=file])[type=search]{background-position:center right 1.125rem}[dir=rtl] :where(input):not([type=checkbox],[type=radio],[type=range],[type=file])[type=search][aria-invalid]{background-position:center right 1.125rem,center left .75rem}details{display:block;margin-bottom:var(--pico-spacing)}details summary{cursor:pointer;line-height:1rem;list-style-type:none;transition:color var(--pico-transition)}details summary:not([role]){color:var(--pico-accordion-close-summary-color)}details summary::-webkit-details-marker{display:none}details summary::marker{display:none}details summary::-moz-list-bullet{list-style-type:none}details summary:after{background-image:var(--pico-icon-chevron);background-position:100%;background-repeat:no-repeat;background-size:1rem auto;content:"";display:block;float:right;height:1rem;margin-inline-start:calc(var(--pico-spacing, 1rem)*.5);transform:rotate(-90deg);transition:transform var(--pico-transition);width:1rem}details summary:focus{outline:0}details summary:focus:not([role]){color:var(--pico-accordion-active-summary-color)}details summary:focus-visible:not([role]){color:var(--pico-primary);outline:var(--pico-outline-width) solid var(--pico-primary-focus);outline-offset:calc(var(--pico-spacing, 1rem)*.5)}details summary[role=button]{text-align:left;width:100%}details summary[role=button]:after{height:calc(1rem*var(--pico-line-height, 1.5))}details[open]>summary{margin-bottom:var(--pico-spacing)}details[open]>summary:not([role]):not(:focus){color:var(--pico-accordion-open-summary-color)}details[open]>summary:after{transform:rotate(0)}[dir=rtl] details summary{text-align:right}[dir=rtl] details summary:after{background-position:0;float:left}[role=group],[role=search]{border-radius:var(--pico-border-radius);box-shadow:var(--pico-group-box-shadow,0 0 0 transparent);display:inline-flex;margin-bottom:var(--pico-spacing);position:relative;transition:box-shadow var(--pico-transition);vertical-align:middle;width:100%}[role=group] input:not([type=checkbox],[type=radio]),[role=group] select,[role=group]>*,[role=search] input:not([type=checkbox],[type=radio]),[role=search] select,[role=search]>*{flex:1 1 auto;margin-bottom:0;position:relative}[role=group] input:not([type=checkbox],[type=radio]):not(:first-child),[role=group] select:not(:first-child),[role=group]>:not(:first-child),[role=search] input:not([type=checkbox],[type=radio]):not(:first-child),[role=search] select:not(:first-child),[role=search]>:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:0}[role=group] input:not([type=checkbox],[type=radio]):not(:last-child),[role=group] select:not(:last-child),[role=group]>:not(:last-child),[role=search] input:not([type=checkbox],[type=radio]):not(:last-child),[role=search] select:not(:last-child),[role=search]>:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}[role=group] input:not([type=checkbox],[type=radio]):focus,[role=group] select:focus,[role=group]>:focus,[role=search] input:not([type=checkbox],[type=radio]):focus,[role=search] select:focus,[role=search]>:focus{z-index:2}[role=group] [role=button]:not(:first-child),[role=group] [type=button]:not(:first-child),[role=group] [type=reset]:not(:first-child),[role=group] [type=submit]:not(:first-child),[role=group] button:not(:first-child),[role=group] input:not([type=checkbox],[type=radio]):not(:first-child),[role=group] select:not(:first-child),[role=search] [role=button]:not(:first-child),[role=search] [type=button]:not(:first-child),[role=search] [type=reset]:not(:first-child),[role=search] [type=submit]:not(:first-child),[role=search] button:not(:first-child),[role=search] input:not([type=checkbox],[type=radio]):not(:first-child),[role=search] select:not(:first-child){margin-left:calc(var(--pico-border-width)*-1)}[role=group] [role=button],[role=group] [type=button],[role=group] [type=reset],[role=group] [type=submit],[role=group] button,[role=search] [role=button],[role=search] [type=button],[role=search] [type=reset],[role=search] [type=submit],[role=search] button{width:auto}@supports selector(:has(*)){[role=group]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus),[role=search]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus){--pico-group-box-shadow:var(--pico-group-box-shadow-focus-with-button)}[role=group]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus) input:not([type=checkbox],[type=radio]),[role=group]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus) select,[role=search]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus) input:not([type=checkbox],[type=radio]),[role=search]:has(button:focus,[type=submit]:focus,[type=button]:focus,[role=button]:focus) select{border-color:transparent}[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus),[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus){--pico-group-box-shadow:var(--pico-group-box-shadow-focus-with-input)}[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus) [role=button],[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus) [type=button],[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus) [type=submit],[role=group]:has(input:not([type=submit],[type=button]):focus,select:focus) button,[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus) [role=button],[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus) [type=button],[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus) [type=submit],[role=search]:has(input:not([type=submit],[type=button]):focus,select:focus) button{--pico-button-box-shadow:0 0 0 var(--pico-border-width) var(--pico-primary-border);--pico-button-hover-box-shadow:0 0 0 var(--pico-border-width) var(--pico-primary-hover-border)}[role=group] [role=button]:focus,[role=group] [type=button]:focus,[role=group] [type=reset]:focus,[role=group] [type=submit]:focus,[role=group] button:focus,[role=search] [role=button]:focus,[role=search] [type=button]:focus,[role=search] [type=reset]:focus,[role=search] [type=submit]:focus,[role=search] button:focus{box-shadow:none}}:root{--pico-scrollbar-width:0px}article{background:var(--pico-card-background-color);border-radius:var(--pico-border-radius);box-shadow:var(--pico-card-box-shadow);margin-bottom:var(--pico-block-spacing-vertical);padding:var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal)}article>footer,article>header{background-color:var(--pico-card-sectioning-background-color);margin-left:calc(var(--pico-block-spacing-horizontal)*-1);margin-right:calc(var(--pico-block-spacing-horizontal)*-1);padding:calc(var(--pico-block-spacing-vertical)*.66) var(--pico-block-spacing-horizontal)}article>header{border-bottom:var(--pico-border-width) solid var(--pico-card-border-color);border-top-left-radius:var(--pico-border-radius);border-top-right-radius:var(--pico-border-radius);margin-bottom:var(--pico-block-spacing-vertical);margin-top:calc(var(--pico-block-spacing-vertical)*-1)}article>footer{border-bottom-left-radius:var(--pico-border-radius);border-bottom-right-radius:var(--pico-border-radius);border-top:var(--pico-border-width) solid var(--pico-card-border-color);margin-bottom:calc(var(--pico-block-spacing-vertical)*-1);margin-top:var(--pico-block-spacing-vertical)}dialog{align-items:center;-webkit-backdrop-filter:var(--pico-modal-overlay-backdrop-filter);backdrop-filter:var(--pico-modal-overlay-backdrop-filter);background-color:var(--pico-modal-overlay-background-color);border:0;bottom:0;color:var(--pico-color);display:flex;height:inherit;justify-content:center;left:0;min-height:100%;min-width:100%;padding:0;position:fixed;right:0;top:0;width:inherit;z-index:999}dialog article{margin:var(--pico-spacing);max-height:calc(100vh - var(--pico-spacing)*2);overflow:auto;width:100%}@media (min-width:576px){dialog article{max-width:510px}}@media (min-width:768px){dialog article{max-width:700px}}dialog article>header>*{margin-bottom:0}dialog article>header :is(a,button)[rel=prev]{float:right;margin:0;margin-left:var(--pico-spacing);padding:0}dialog article>footer{text-align:right}dialog article>footer [role=button],dialog article>footer button{margin-bottom:0}dialog article>footer [role=button]:not(:first-of-type),dialog article>footer button:not(:first-of-type){margin-left:calc(var(--pico-spacing)*.5)}dialog article :is(a,button)[rel=prev]{background-color:transparent;background-image:var(--pico-icon-close);background-position:50%;background-repeat:no-repeat;background-size:auto 1rem;border:none;display:block;height:1rem;margin-bottom:var(--pico-spacing);margin-left:auto;margin-top:calc(var(--pico-spacing)*-1);opacity:.5;transition:opacity var(--pico-transition);width:1rem}dialog article :is(a,button)[rel=prev]:is([aria-current]:not([aria-current=false]),:hover,:active,:focus){opacity:1}dialog:not([open]),dialog[open=false]{display:none}[tabindex],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation}.cm-editor{background-color:var(--pico-background-color);height:100%}[data-theme=dark] .cm-editor,[data-theme=dark] .ͼ5,[data-theme=dark] .ͼg,[data-theme=dark] .ͼl{color:#9cdcfe}[data-theme=dark] .ͼ1.cm-focused{outline:1px dotted #212121}[data-theme=dark] .ͼ2 .cm-content{caret-color:#000}[data-theme=dark] .ͼ3 .cm-content{caret-color:#fff}.ͼ3 .cm-selectionBackground,[data-theme=dark] .ͼ2 .cm-selectionBackground{background:#3a3d41}.ͼ3.cm-focused .cm-selectionBackground,[data-theme=dark] .ͼ2.cm-focused .cm-selectionBackground{background:#264f78}.ͼo .cm-content ::-moz-selection{background:#3e4451}.ͼo .cm-content ::selection,.ͼo .cm-selectionBackground,[data-theme=dark] .ͼo.cm-focused>.cm-scroller>.cm-selectionLayer .cm-selectionBackground{background:#3e4451}.ͼ1 .cm-dropCursor,[data-theme=dark] .ͼ1 .cm-cursor{border-left:1.2px solid #000}[data-theme=dark] .ͼ3 .cm-cursor{border-left-color:#444}[data-theme=dark] .ͼ1.cm-focused .cm-cursor{display:block}[data-theme=dark] .ͼ2 .cm-activeLine{background-color:#cceeff44}[data-theme=dark] .ͼ3 .cm-activeLine{background-color:#99eeff33}[data-theme=dark] .ͼ2 .cm-specialChar{color:red}[data-theme=dark] .ͼ3 .cm-specialChar{color:#f78}[data-theme=dark] .ͼ2 .cm-gutters{background-color:transparent;border-right:1px solid #1f2937;color:#6c6c6c}[data-theme=dark] .ͼ3 .cm-gutters{background-color:#333338;color:#ccc}[data-theme=dark] .ͼ2 .cm-activeLineGutter{background:#ffffff22;color:#e2f2ff}[data-theme=dark] .ͼ1 .cm-placeholder{color:#888}[data-theme=dark] .ͼ1 .cm-trailingSpace{background-color:#ff332255}[data-theme=dark] .ͼ3 .cm-button:active{background-image:linear-gradient(#111,#333)}[data-theme=dark] .ͼ3 .cm-button{background-image:linear-gradient(#393939,#111);border:1px solid #888}[data-theme=dark] .ͼ2 .cm-textfield{background-color:#fff}[data-theme=dark] .ͼ3 .cm-textfield{background-color:inherit;border:1px solid #555}[data-theme=dark] .ͼ1 .cm-diagnostic-error{border-left:5px solid #d11}[data-theme=dark] .ͼ1 .cm-diagnostic-warning{border-left:5px solid orange}[data-theme=dark] .ͼ1 .cm-diagnostic-info{border-left:5px solid #999}[data-theme=dark] .ͼ1 .cm-diagnosticAction{background-color:#444;color:#fff}[data-theme=dark] .ͼ1 .cm-lintRange-active{background-color:#ffdd9980}[data-theme=dark] .ͼ1 .cm-lintPoint-warning:after{border-bottom-color:orange}[data-theme=dark] .ͼ1 .cm-lintPoint-info:after{border-bottom-color:#999}[data-theme=dark] .ͼ1 .cm-panel.cm-panel-lint ul [aria-selected]{background-color:#ddd}[data-theme=dark] .ͼ1 .cm-panel.cm-panel-lint ul:focus [aria-selected]{background:#bdf;background-color:Highlight;color:#fff;color:HighlightText}[data-theme=dark] .ͼ1 .emmet-tracker{-webkit-text-decoration:underline 1px green;text-decoration:underline 1px green}[data-theme=dark] .ͼ2 .cm-tooltip{background-color:#111828;border:1px solid #3e5b9f}[data-theme=dark] .ͼ2 .cm-tooltip-section:not(:first-child){border-top:1px solid #bbb}[data-theme=dark] .ͼ3 .cm-tooltip{background-color:#333338;color:#fff}[data-theme=dark] .ͼ1 .cm-tooltip-above .cm-tooltip-arrow:before{border-top:7px solid #bbb}[data-theme=dark] .ͼ1 .cm-tooltip-above .cm-tooltip-arrow:after{border-top:7px solid #f5f5f5;bottom:1px}[data-theme=dark] .ͼ1 .cm-tooltip-below .cm-tooltip-arrow:before{border-bottom:7px solid #bbb}[data-theme=dark] .ͼ1 .cm-tooltip-below .cm-tooltip-arrow:after{border-bottom:7px solid #f5f5f5;top:1px}[data-theme=dark] .ͼ3 .cm-tooltip .cm-tooltip-arrow:before{border-bottom-color:#333338;border-top-color:#333338}[data-theme=dark] .ͼ1.cm-focused .cm-matchingBracket{background-color:#328c8252}[data-theme=dark] .ͼ1.cm-focused .cm-nonmatchingBracket{background-color:#bb555544}[data-theme=dark] .ͼ1 .cm-foldPlaceholder{background-color:#eee;border:1px solid #ddd;border-radius:.2em;color:#888}[data-theme=dark] .ͼp{color:#c678dd}[data-theme=dark] .ͼq{color:#e06c75}[data-theme=dark] .ͼr{color:#61afef}[data-theme=dark] .ͼs{color:#d19a66}[data-theme=dark] .ͼt{color:#abb2bf}[data-theme=dark] .ͼu{color:#e5c07b}[data-theme=dark] .ͼv{color:#56b6c2}[data-theme=dark] .ͼw{color:#7d8799}[data-theme=dark] .ͼ11{color:#e06c75;font-weight:700}[data-theme=dark] .ͼ12{color:#d19a66}[data-theme=dark] .ͼ13{color:#98c379}[data-theme=dark] .ͼ14{color:#fff}[data-theme=dark] .ͼo{background-color:#282c34;color:#abb2bf}[data-theme=dark] .ͼo .cm-content{caret-color:#528bff}.ͼo .cm-dropCursor,[data-theme=dark] .ͼo .cm-cursor{border-left-color:#528bff}[data-theme=dark] .ͼo .cm-panels{background-color:#21252b;color:#abb2bf}[data-theme=dark] .ͼo .cm-panels.cm-panels-top{border-bottom:2px solid #000}[data-theme=dark] .ͼo .cm-panels.cm-panels-bottom{border-top:2px solid #000}[data-theme=dark] .ͼo .cm-searchMatch{background-color:#72a1ff59;outline:1px solid #457dff}[data-theme=dark] .ͼo .cm-searchMatch.cm-searchMatch-selected{background-color:#6199ff2f}[data-theme=dark] .ͼo .cm-activeLine{background-color:#6699ff0b}[data-theme=dark] .ͼo .cm-selectionMatch{background-color:#aafe661a}.ͼo.cm-focused .cm-nonmatchingBracket,[data-theme=dark] .ͼo.cm-focused .cm-matchingBracket{background-color:#bad0f847}[data-theme=dark] .ͼo .cm-gutters{background-color:#282c34;border:none;color:#7d8799}[data-theme=dark] .ͼo .cm-activeLineGutter{background-color:#2c313a}[data-theme=dark] .ͼo .cm-foldPlaceholder{background-color:transparent;border:none;color:#ddd}[data-theme=dark] .ͼo .cm-tooltip{background-color:#353a42;border:none}[data-theme=dark] .ͼo .cm-tooltip .cm-tooltip-arrow:before{border-bottom-color:transparent;border-top-color:transparent}[data-theme=dark] .ͼo .cm-tooltip .cm-tooltip-arrow:after{border-bottom-color:#353a42;border-top-color:#353a42}[data-theme=dark] .ͼ7{color:#cbcbcb}[data-theme=dark] .ͼc{color:#569cd5}.ͼ6,.ͼb,.ͼd,.ͼe,.ͼj,[data-theme=dark] .ͼf{color:#ce9178}[data-theme=dark] .ͼ6.ͼ5,[data-theme=dark] .ͼ6.ͼc{color:#9cdcfe}[data-theme=dark] .ͼh{color:#30a}[data-theme=dark] .ͼi{color:#569bd5}[data-theme=dark] .ͼk{color:#256}[data-theme=dark] .ͼm{color:#699754}[data-theme=dark] .ͼn{color:red}.cm-gutterElement{padding:0 .5rem}.cm-search.cm-panel button[type=button][aria-label=close]{color:unset;font-size:2rem;font-weight:100;margin-right:.75rem}.ͼ2 .cm-panels-bottom{border:0}.ͼ2 .cm-panels{background-color:transparent;color:unset}.cm-gotoLine.cm-panel .cm-textfield,.cm-search.cm-panel .cm-textfield,.ͼ1 .cm-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;height:auto;padding:.75rem;--pico-outline-width:0.0625rem;--pico-background-color:var(--pico-form-element-background-color);--pico-border-color:var(--pico-form-element-border-color);--pico-color:var(--pico-form-element-color);--pico-box-shadow:none}.cm-button,.cm-gotoLine.cm-panel .cm-button,.cm-gotoLine.cm-panel .cm-textfield,.cm-search.cm-panel .cm-textfield,.ͼ1 .cm-panel.cm-search button,.ͼ1 .cm-textfield{background-color:var(--pico-background-color);border:var(--pico-border-width) solid var(--pico-border-color);border-radius:var(--pico-border-radius);box-shadow:var(--pico-box-shadow);color:var(--pico-color);font-size:.75rem;font-weight:var(--pico-font-weight);outline:0;transition:background-color var(--pico-transition),border-color var(--pico-transition),color var(--pico-transition),box-shadow var(--pico-transition)}.cm-button,.cm-gotoLine.cm-panel .cm-button,.ͼ1 .cm-panel.cm-search button{background-image:none;margin:.5rem .5rem .5rem 0;--pico-background-color:var(--pico-primary-background);--pico-border-color:var(--pico-primary-border);--pico-color:var(--pico-primary-inverse);--pico-box-shadow:var(--pico-button-box-shadow,0 0 0 transparent);cursor:pointer;line-height:var(--pico-line-height);padding:.5rem .75rem;text-align:center;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cm-button:hover,.cm-gotoLine.cm-panel .cm-button:hover,.ͼ1 .cm-panel.cm-search button:hover{--pico-background-color:var(--pico-primary-hover-background);--pico-border-color:var(--pico-primary-hover-border);--pico-box-shadow:var(--pico-button-hover-box-shadow,0 0 0 transparent);--pico-color:var(--pico-primary-inverse)}.cm-button:focus,.cm-gotoLine.cm-panel .cm-button:focus,.ͼ1 .cm-panel.cm-search button:focus{--pico-box-shadow:var(--pico-button-hover-box-shadow,0 0 0 transparent),0 0 0 var(--pico-outline-width) var(--pico-primary-focus)}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{bottom:0;top:0}.bottom-0{bottom:0}.left-0{left:0}.left-16{left:4rem}.right-0{right:0}.top-0{top:0}.isolate{isolation:isolate}.m-0{margin:0}.m-auto{margin:auto}.mx-0{margin-left:0;margin-right:0}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-0{margin-bottom:0;margin-top:0}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-4{margin-bottom:1rem;margin-top:1rem}.-mt-1{margin-top:-.25rem}.-mt-2{margin-top:-.5rem}.-mt-3{margin-top:-.75rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.\!inline{display:inline!important}.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}.grid{display:grid}.inline-grid{display:inline-grid}.contents{display:contents}.list-item{display:list-item}.hidden{display:none}.h-3{height:.75rem}.h-3\/4{height:75%}.h-4{height:1rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-80{height:20rem}.h-auto{height:auto}.h-full{height:100%}.max-h-64{max-height:16rem}.w-24{width:6rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-auto{width:auto}.w-full{width:100%}.flex-none{flex:none}.flex-shrink,.shrink{flex-shrink:1}.flex-grow{flex-grow:1}.origin-center{transform-origin:center}.scale-125{--tw-scale-x:1.25;--tw-scale-y:1.25}.scale-125,.transform{transform:translate(var(--tw-translate-x),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))}.cursor-pointer{cursor:pointer}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-hidden{overflow-y:hidden}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-l-none{border-bottom-left-radius:0;border-top-left-radius:0}.rounded-r-none{border-bottom-right-radius:0;border-top-right-radius:0}.border{border-width:1px}.border-0{border-width:0}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.bg-\[\#1c212c\]{--tw-bg-opacity:1;background-color:rgb(28 33 44/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-\[15px\]{padding-bottom:15px;padding-top:15px}.pl-3{padding-left:.75rem}.pr-0{padding-right:0}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[\.6rem\]{font-size:.6rem}.text-\[\.75rem\]{font-size:.75rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-thin{font-weight:100}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.text-\[\#ffffff00\]{color:#ffffff00}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.overline{text-decoration-line:overline}.line-through{text-decoration-line:line-through}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-blue-500{--tw-shadow-color:#3b82f6;--tw-shadow:var(--tw-shadow-colored)}.outline{outline-style:solid}.blur{--tw-blur:blur(8px)}.blur,.invert{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)}.invert{--tw-invert:invert(100%)}.\!filter{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)!important}.filter{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)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-300{transition-duration:.3s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.focus-within\:shadow-none:focus-within{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.focus\:shadow-none:focus{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}@media (min-width:640px){.sm\:inline-block{display:inline-block}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:border-0{border-width:0}.sm\:border-solid{border-style:solid}}@media (min-width:1024px){.lg\:border-r{border-right-width:1px}}@media (min-width:1536px){.\32xl\:w-1\/2{width:50%}}.cm-editor{height:100%;background-color:var(--pico-background-color)}[data-theme=dark] .cm-editor,[data-theme=dark] .ͼ5,[data-theme=dark] .ͼ6.ͼ5,[data-theme=dark] .ͼ6.ͼc,[data-theme=dark] .ͼg,[data-theme=dark] .ͼl{color:#9cdcfe}[data-theme=dark] .ͼ1.cm-focused{outline:#212121 dotted 1px}[data-theme=dark] .ͼ2 .cm-content{caret-color:black}[data-theme=dark] .ͼ3 .cm-content{caret-color:white}.ͼ3 .cm-selectionBackground,[data-theme=dark] .ͼ2 .cm-selectionBackground{background:#3a3d41}.ͼ3.cm-focused .cm-selectionBackground,[data-theme=dark] .ͼ2.cm-focused .cm-selectionBackground{background:#264f78}.ͼo .cm-content ::selection,.ͼo .cm-selectionBackground,[data-theme=dark] .ͼo.cm-focused>.cm-scroller>.cm-selectionLayer .cm-selectionBackground{background:#3e4451}.ͼ1 .cm-dropCursor,[data-theme=dark] .ͼ1 .cm-cursor{border-left:1.2px solid #000}[data-theme=dark] .ͼ3 .cm-cursor{border-left-color:#444}[data-theme=dark] .ͼ1.cm-focused .cm-cursor{display:block}[data-theme=dark] .ͼ2 .cm-activeLine{background-color:#cceeff44}[data-theme=dark] .ͼ3 .cm-activeLine{background-color:#99eeff33}[data-theme=dark] .ͼ2 .cm-specialChar,[data-theme=dark] .ͼn{color:red}[data-theme=dark] .ͼ3 .cm-specialChar{color:#f78}[data-theme=dark] .ͼ2 .cm-gutters{background-color:transparent;color:#6c6c6c;border-right:1px solid #1f2937}[data-theme=dark] .ͼ3 .cm-gutters{background-color:#333338;color:#ccc}[data-theme=dark] .ͼ2 .cm-activeLineGutter{color:#e2f2ff;background:#ffffff22}[data-theme=dark] .ͼ1 .cm-placeholder{color:#888}[data-theme=dark] .ͼ1 .cm-trailingSpace{background-color:#ff332255}[data-theme=dark] .ͼ3 .cm-button:active{background-image:linear-gradient(#111,#333)}[data-theme=dark] .ͼ3 .cm-button{background-image:linear-gradient(#393939,#111);border:1px solid #888}[data-theme=dark] .ͼ2 .cm-textfield{background-color:#fff}[data-theme=dark] .ͼ3 .cm-textfield{border:1px solid #555;background-color:inherit}[data-theme=dark] .ͼ1 .cm-diagnostic-error{border-left:5px solid #d11}[data-theme=dark] .ͼ1 .cm-diagnostic-warning{border-left:5px solid orange}[data-theme=dark] .ͼ1 .cm-diagnostic-info{border-left:5px solid #999}[data-theme=dark] .ͼ1 .cm-diagnosticAction{background-color:#444;color:#fff}[data-theme=dark] .ͼ1 .cm-lintRange-active{background-color:#ffdd9980}[data-theme=dark] .ͼ1 .cm-lintPoint-warning:after{border-bottom-color:orange}[data-theme=dark] .ͼ1 .cm-lintPoint-info:after{border-bottom-color:#999}[data-theme=dark] .ͼ1 .cm-panel.cm-panel-lint ul [aria-selected]{background-color:#ddd}[data-theme=dark] .ͼ1 .cm-panel.cm-panel-lint ul:focus [aria-selected]{background:Highlight;color:HighlightText}[data-theme=dark] .ͼ1 .emmet-tracker{text-decoration:underline 1px green}[data-theme=dark] .ͼ2 .cm-tooltip{border:1px solid #3e5b9f;background-color:#111828}[data-theme=dark] .ͼ2 .cm-tooltip-section:not(:first-child){border-top:1px solid #bbb}[data-theme=dark] .ͼ3 .cm-tooltip{background-color:#333338;color:#fff}[data-theme=dark] .ͼ1 .cm-tooltip-above .cm-tooltip-arrow:before{border-top:7px solid #bbb}[data-theme=dark] .ͼ1 .cm-tooltip-above .cm-tooltip-arrow:after{border-top:7px solid #f5f5f5;bottom:1px}[data-theme=dark] .ͼ1 .cm-tooltip-below .cm-tooltip-arrow:before{border-bottom:7px solid #bbb}[data-theme=dark] .ͼ1 .cm-tooltip-below .cm-tooltip-arrow:after{border-bottom:7px solid #f5f5f5;top:1px}[data-theme=dark] .ͼ3 .cm-tooltip .cm-tooltip-arrow:before{border-top-color:#333338;border-bottom-color:#333338}[data-theme=dark] .ͼ1.cm-focused .cm-matchingBracket{background-color:#328c8252}[data-theme=dark] .ͼ1.cm-focused .cm-nonmatchingBracket{background-color:#bb555544}[data-theme=dark] .ͼ1 .cm-foldPlaceholder{background-color:#eee;border:1px solid #ddd;color:#888;border-radius:.2em}[data-theme=dark] .ͼp{color:#c678dd}[data-theme=dark] .ͼq{color:#e06c75}[data-theme=dark] .ͼr{color:#61afef}[data-theme=dark] .ͼ12,[data-theme=dark] .ͼs{color:#d19a66}[data-theme=dark] .ͼt{color:#abb2bf}[data-theme=dark] .ͼu{color:#e5c07b}[data-theme=dark] .ͼv{color:#56b6c2}[data-theme=dark] .ͼw{color:#7d8799}[data-theme=dark] .ͼ11{font-weight:700;color:#e06c75}[data-theme=dark] .ͼ13{color:#98c379}[data-theme=dark] .ͼ14{color:#fff}[data-theme=dark] .ͼo{color:#abb2bf;background-color:#282c34}[data-theme=dark] .ͼo .cm-content{caret-color:#528bff}.ͼo .cm-dropCursor,[data-theme=dark] .ͼo .cm-cursor{border-left-color:#528bff}[data-theme=dark] .ͼo .cm-panels{background-color:#21252b;color:#abb2bf}[data-theme=dark] .ͼo .cm-panels.cm-panels-top{border-bottom:2px solid #000}[data-theme=dark] .ͼo .cm-panels.cm-panels-bottom{border-top:2px solid #000}[data-theme=dark] .ͼo .cm-searchMatch{background-color:#72a1ff59;outline:#457dff solid 1px}[data-theme=dark] .ͼo .cm-searchMatch.cm-searchMatch-selected{background-color:#6199ff2f}[data-theme=dark] .ͼo .cm-activeLine{background-color:#6699ff0b}[data-theme=dark] .ͼo .cm-selectionMatch{background-color:#aafe661a}.ͼo.cm-focused .cm-nonmatchingBracket,[data-theme=dark] .ͼo.cm-focused .cm-matchingBracket{background-color:#bad0f847}[data-theme=dark] .ͼo .cm-gutters{background-color:#282c34;color:#7d8799;border:none}[data-theme=dark] .ͼo .cm-activeLineGutter{background-color:#2c313a}[data-theme=dark] .ͼo .cm-foldPlaceholder{background-color:transparent;border:none;color:#ddd}[data-theme=dark] .ͼo .cm-tooltip{border:none;background-color:#353a42}[data-theme=dark] .ͼo .cm-tooltip .cm-tooltip-arrow:before{border-top-color:transparent;border-bottom-color:transparent}[data-theme=dark] .ͼo .cm-tooltip .cm-tooltip-arrow:after{border-top-color:#353a42;border-bottom-color:#353a42}[data-theme=dark] .ͼ7{color:#cbcbcb}[data-theme=dark] .ͼc{color:#569cd5}.ͼ6,.ͼb,.ͼd,.ͼe,.ͼj,[data-theme=dark] .ͼf{color:#ce9178}[data-theme=dark] .ͼh{color:#30a}[data-theme=dark] .ͼi{color:#569bd5}[data-theme=dark] .ͼk{color:#256}[data-theme=dark] .ͼm{color:#699754}.cm-gutterElement{padding:0 .5rem}.cm-search.cm-panel button[type=button][aria-label=close]{color:unset;font-size:2rem;margin-right:.75rem;font-weight:100}.ͼ2 .cm-panels-bottom{border:0}.ͼ2 .cm-panels{background-color:transparent;color:unset}.cm-button,.cm-gotoLine.cm-panel .cm-button,.cm-gotoLine.cm-panel .cm-textfield,.cm-search.cm-panel .cm-textfield,.ͼ1 .cm-panel.cm-search button,.ͼ1 .cm-textfield{outline:0;background-color:var(--pico-background-color);box-shadow:var(--pico-box-shadow);color:var(--pico-color);font-weight:var(--pico-font-weight);font-size:.75rem;transition:background-color var(--pico-transition),border-color var(--pico-transition),color var(--pico-transition),box-shadow var(--pico-transition)}.cm-gotoLine.cm-panel .cm-textfield,.cm-search.cm-panel .cm-textfield,.ͼ1 .cm-textfield{appearance:none;padding:.75rem;height:auto;--pico-outline-width:0.0625rem;--pico-background-color:var(--pico-form-element-background-color);--pico-border-color:var(--pico-form-element-border-color);--pico-color:var(--pico-form-element-color);--pico-box-shadow:none;border:var(--pico-border-width) solid var(--pico-border-color);border-radius:var(--pico-border-radius)}.cm-button,.cm-gotoLine.cm-panel .cm-button,.ͼ1 .cm-panel.cm-search button{background-image:none;margin:.5rem .5rem .5rem 0;--pico-background-color:var(--pico-primary-background);--pico-border-color:var(--pico-primary-border);--pico-color:var(--pico-primary-inverse);--pico-box-shadow:var(--pico-button-box-shadow, 0 0 0 rgba(0, 0, 0, 0));padding:.5rem .75rem;border:var(--pico-border-width) solid var(--pico-border-color);border-radius:var(--pico-border-radius);line-height:var(--pico-line-height);text-align:center;text-decoration:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cm-button:hover,.cm-gotoLine.cm-panel .cm-button:hover,.ͼ1 .cm-panel.cm-search button:hover{--pico-background-color:var(--pico-primary-hover-background);--pico-border-color:var(--pico-primary-hover-border);--pico-box-shadow:var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0));--pico-color:var(--pico-primary-inverse)}.cm-button:focus,.cm-gotoLine.cm-panel .cm-button:focus,.ͼ1 .cm-panel.cm-search button:focus{--pico-box-shadow:var(--pico-button-hover-box-shadow, 0 0 0 rgba(0, 0, 0, 0)),0 0 0 var(--pico-outline-width) var(--pico-primary-focus)}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}
\ No newline at end of file
diff --git a/go/dist/main.js b/go/dist/main.js
new file mode 100644
index 00000000..0986b1c1
--- /dev/null
+++ b/go/dist/main.js
@@ -0,0 +1,1683 @@
+(()=>{var ne=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(s,r)=>(typeof require<"u"?require:s)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});function q(t,s,r=[]){function i(n,o){return typeof n!="object"||n===null?n:new Proxy(n,{set(l,c,m){let a=[...o,c],x=l[c],h=Reflect.set(l,c,i(m,a));return x!==m&&s(a,x,m),h},get(l,c){let m=l[c];return typeof m=="object"&&m!==null?i(m,[...o,c]):m}})}return i(t,r)}var H={name:"kodeWeave",author:{name:"Michael Schwartz",href:"https://michaelsboost.com/",src:"imgs/author.jpg"},version:"1.2",url:"https://github.com/michaelsboost/kodeWeave/",license:"https://github.com/michaelsboost/kodeWeave/blob/main/LICENSE"},ae={name:"App name",version:.01,title:"An attractive title",description:"The most attractive description ever!",author:"kodeWeave",url:"https://michaelsboost.com/",meta:"",libraries:[],html_pre_processor:"html",css_pre_processor:"css",javascript_pre_processor:"javascript",html:"",css:"",javascript:"",logo:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHZpZXdCb3g9IjAgMCA1MTEuOTk5OTkgNTExLjk5OTk5IgogICBoZWlnaHQ9IjUxMiIKICAgd2lkdGg9IjUxMiIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnNDE5MCI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDE5NiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczQxOTQiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0Mjc2Ij4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3A0Mjc4IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZDVkOTI7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNDI4MCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmYwMDAwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB5Mj0iMjU3LjMxMjUiCiAgICAgICB4Mj0iMC4xMzQwNDE2NSIKICAgICAgIHkxPSIyNTcuMzEyNSIKICAgICAgIHgxPSI1MTEuNzE4NzUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MjgyIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NDI3NiIgLz4KICA8L2RlZnM+CiAgPGcKICAgICBpZD0iZzQyODQiPgogICAgPGNpcmNsZQogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQ0MjgyKTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MTI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTo3MiwgNzI7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxIgogICAgICAgaWQ9InBhdGg0MjcwIgogICAgICAgY3g9IjI1NiIKICAgICAgIGN5PSIyNTYiCiAgICAgICByPSIyNTYiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6NzIsIDcyO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMjUxLjA2MDY4LDU4LjY3ODI3MiBjIC00LjU2MDMyLDAuMDcwMzUgLTIwLjc2MDYxLDIuMDQxOTQ1IC0yOS4yOTc5MiwzLjY1NTk4NCAtMjguMzQzOTEsNS4zNTg2MiAtNjYuODgwODEsMjIuNjE5ODE0IC03My4wMzY5OSwzMi43MTkwNjEgLTEuODk3NTUsMy4xMTI5MzUgLTEuOTQ2MTYsNy4xNDcwMTMgLTEuOTQ2MTYsMTYwLjgxNzAyMyAwLDE1Mi4yNTg4IDAuMDY3MSwxNTcuNzI0NjQgMS44OTk5OCwxNjAuNzMxMjEgNS4yMDU5OSw4LjUzOTg5IDM2LjcyMDAzLDIzLjcwOTM0IDYzLjQ1MTMzLDMwLjU0MTM0IDkuNzY1NzIsMi40OTU5MyAzNC4zMzUwOSw2LjM0NDggMzguNTA3NTQsNi4wMzE2OSAyLjAwMzg4LC0wLjE1MDM2IDIuMDMyMDMsLTAuOTc0NjkgMi4yODkyMSwtNzMuMDkzMjQgMC4xNDU1OCwtNDAuODM3NTkgMC42NTY0MywtNzMuMzM0MTQgMS4xNjEwOSwtNzMuODM4OTYgMS4zNzc1MSwtMS4zNzc5NSA3LjM0NzM5LDEuODg0NzMgMTAuMzU3NTIsNS42NjIxNSAxLjQ2MjAyLDEuODM0NjggMTMuNzk3NTUsMjAuNjU1MjggMjcuNDE3NzQsNDEuODE5NDMgNTEuNDQ0NTIsNzkuOTM4NDcgNTAuNDY1MTEsNzguNDc3OTggNTMuMzA0OTQsNzkuMTkwOTQgMy4zMjQ3OCwwLjgzNDc0IDEyLjU2NzA4LC0zLjc4OTQ3IDI3LjU3NjA2LC0xMy43ODU4MyAxNC4yNDMzOCwtOS40ODY0NiAyMy44ODU1LC0xNy43ODMxIDM0LjgxOTcyLC0yOS45NjcxNyAxMS4yOTUwMiwtMTIuNTg2MTUgMTQuODMwMzksLTE3LjQxNzg1IDE0LjgzMDM5LC0yMC4yNTMwOCAwLC0xLjIyMDA5IC0xNC45NzA2LC0yNC41NDAzMyAtMzMuNDAxMzMsLTUyLjAyODQ2IC0xOC4zNzA1NywtMjcuMzk4MzcgLTM0LjEwMTA3LC01MS4xNjg3NiAtMzQuOTU4MjgsLTUyLjgyNjk2IC0wLjg1NzIzLC0xLjY1ODIgLTEuNTU2OTMsLTQuMDczMzUgLTEuNTU2OTMsLTUuMzY1MTkgMCwtMS4zMjEyMyAxMi40ODk1OSwtMjIuMjk0ODcgMjguNTQ1ODQsLTQ3Ljk0MzUyIDQ0LjQ4MzE1LC03MS4wNTg1NiA0MS45MzgzMywtNjYuMjkxNzggMzguODMwODEsLTcyLjg0MjQ3IC0yLjU1NzU1LC01LjM5MTM2IC0xNS4zNjI2MiwtMTkuNjU4MDkgLTI2LjEzMTI5LC0yOS4xMTU4NyAtMTEuNDU0NTksLTEwLjA2MDE5MSAtMzUuMDY0MTMsLTI1Ljk1MDI3NiAtMzkuOTA2MTIsLTI2Ljg1ODkzNCAtMi45NDE1NCwtMC41NTIwMSAtMy45NzUxOSwtMC4yNDY3ODggLTUuOTE3NjYsMS43NDIyMDEgLTEuMjk1NjQsMS4zMjY2NDggLTIwLjM1MDEyLDMyLjM0ODMwMyAtNDIuMzQwNDgsNjguOTM1NzIzIC0yMS45OTAzNiwzNi41ODc0IC00MS4wNjUzOSw2Ny45OTE2NyAtNDIuMzg2NjUsNjkuNzg3MDIgLTIuNjE5NTQsMy41NTkzNyAtNi43MzI4MSw2LjA5MzA2IC04LjczNDYzLDUuMzc4MzggLTAuOTk5NDcsLTAuMzU2ODMgLTEuMjY2NjUsLTE4LjE3MDM1IC0xLjI2NjY1LC04NC40NDM5NCAwLC00OS41MTMxOTYgLTAuMzc4NjQsLTg0LjIxOTIyNiAtMC45MjM2LC04NC41NTYxMzggLTAuMTE5ODQsLTAuMDc0MSAtMC41MzYwMSwtMC4xMDI0NDYgLTEuMTg3NDgsLTAuMDkyMzggeiIKICAgICAgIGlkPSJwYXRoNDI2MCIgLz4KICA8L2c+Cjwvc3ZnPgo=",console:!1,dark:!0,module:!0,autorun:!0,pwa:!1,preview:!0,activePanel:"html",columns:!1,columnsRight:!0},le={searchLibKey:null,librarySuggestions:null,iframeSize:null,activePanel:"html",selectedSize:"none",compiledJSX:null,menuDialog:null,settings:null,libraries:null,safeRender:null,demos:null},p=function(){let t="h-4 w-4",s="h-3 w-3",r="h-4 w-4",i="h-3 w-3",n="h-3 -mt-1";return{logo:`
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,twitterfill:`
+
+ `,twitter:`
+
+ `,heart:`
+
+ `,html:`
+
+ `,css:`
+
+ `,javascript:`
+
+ `,columns:`
+
+ `,leftChev:`
+
+ `,rightChev:`
+
+ `,console:`
+
+
+ `,play:`
+
+ `,camera:`
+
+
+ `,cog:`
+
+
+ `,tidy:`
+
+ `,rotate:`
+
+ `,times:`
+
+ `,file:`
+
+ `,import:`
+
+ `,download:`
+
+ `,codepen:`
+
+ `,trash:`
+
+ `,undo:`
+
+ `,redo:`
+
+ `,cut:`
+
+ `,copy:`
+
+ `,paste:`
+
+ `,indent:`
+
+ `,outdent:`
+
+ `,search:`
+
+ `,goto:`
+
+ `,comment:`
+
+ `,fold:`
+
+ `,unfold:`
+
+ `,cursor:`
+
+ `}}(),e=q(ae,(t,s,r)=>{let n=document.getElementById("iframe").contentWindow.document;if(s!==r){if(localStorage.setItem("kodeWeave",JSON.stringify(e)),k.render("#app"),t.toString()==="activePanel"){if(!window.editorManager)return;e.activePanel==="html"&&setActiveEditor(editorManager.htmlEditor),e.activePanel==="css"&&setActiveEditor(editorManager.cssEditor),e.activePanel==="javascript"&&setActiveEditor(editorManager.javascriptEditor)}if(!k.initialRender){let o=t.toString();if(o==="css"||o==="console"){let l=`
+ [data-zwj=zwjkonsole] {
+ display: ${e.console?"flex":"none"};
+ }
+
+ ${e.css}`;if(n.getElementById("cuxjju3ew").textContent=l,!window.editorManager)return;o==="css"&&editorManager.cssEditor.state.doc.toString()!==e.css&&dispatchChanges(editorManager.cssEditor,e.css)}if(o==="html"){if(e.autorun&&C(!0),!window.editorManager)return;window.editorManager.htmlEditor.state.doc.toString()!==e.html&&dispatchChanges(editorManager.htmlEditor,e.html)}if(o==="javascript"){if(e.autorun&&C(!0),!window.editorManager)return;window.editorManager.jsEditor.state.doc.toString()!==e.javascript&&dispatchChanges(editorManager.jsEditor,e.javascript)}(o==="meta"||o==="libraries"||o==="html_pre_processor"||o==="css_pre_processor"||o==="javascript_pre_processor")&&e.autorun&&C(!0),o==="dark"&&(k.render("#app"),document.documentElement.setAttribute("data-theme",e.dark?"dark":"light"),n.documentElement.setAttribute("data-theme",e.dark?"dark":"light"),document.querySelector("meta[name=apple-mobile-web-app-status-bar-style]").setAttribute("content",e.dark?"black-translucent":"default"),document.querySelector("meta[name=theme-color]").setAttribute("content",e.dark?"#13171f":"#ffffff"),document.querySelector("meta[name=msapplication-navbutton-color]").setAttribute("content",e.dark?"#13171f":"#ffffff"))}}}),g=q(le,(t,s,r)=>{s!==r&&k.render("#app")});window.project=e;window.data=g;function ce(){let t="w-full";return`
+
+
+
+
+
+
+ ${p.html}
+
+
+
+
+ ${p.css}
+
+
+
+
+ ${p.javascript}
+
+
+
+
+
+
+
+
+
+ ${p.play}
+
+
+
+
+ ${p.console}
+
+
+
+
+ ${p.camera}
+
+
+
+
+ ${p.cog}
+
+
+ `}function pe(){let t="border-0 bg-transparent text-sm",s="mx-0 my-2 w-auto rounded-md capitalize text-[.6rem]",r="padding: 0.5rem;",i={Phones:{"320x480":"iPhone 3GS","375x667":"iPhone 6/7/8","414x736":"iPhone 6/7/8 Plus","375x812":"iPhone X/XS/11 Pro","414x896":"iPhone XR/XS Max/11/11 Pro Max","360x640":"Samsung Galaxy S5","360x740":"Samsung Galaxy S8+","1440x3200":"Samsung Galaxy S21 Ultra","1080x2340":"Google Pixel 5","1080x2400":"OnePlus 8 Pro","1440x3200":"Xiaomi Mi 11 Ultra","1644x3840":"Sony Xperia 1 III"},Tablets:{"2048x2732":'iPad Pro 12.9" (3rd/4th Gen)',"2388x1668":'iPad Pro 11" (1st/2nd/3rd Gen)',"2736x1824":"Microsoft Surface Pro 7","2800x1752":"Samsung Galaxy Tab S7+","2560x1600":"Huawei MatePad Pro","2000x1200":"Lenovo Tab P11 Pro","1920x1200":"Amazon Fire HD 10","1536x2048":"iPad Air (3rd Gen)","1620x2160":"iPad Air (4th Gen)","1620x2160":'iPad 10.2" (8th Gen)',"1668x2224":'iPad Pro 11" (2021)'},Desktops:{"3840x2160":"4K UHD (3840x2160)","2560x1440":"WQHD (2560x1440)","1920x1080":"Full HD (1920x1080)","1366x768":"Laptop (1366x768)","3440x1440":"UltraWide QHD (3440x1440)","5120x2880":"5K Retina (5120x2880)","1280x800":"MacBook (1280x800)","2560x1600":"MacBook Pro (2560x1600)","2880x1800":"MacBook Pro Retina (2880x1800)"}},n=`
+
+ Select Size
+ ${Object.keys(i).map(l=>`
+
+ ${Object.keys(i[l]).map(c=>`
+ ${i[l][c]}
+ `).join("")}
+
+ `).join("")}
+
+ `;function o(){if(!e.activePanel||e.activePanel&&(e.activePanel==="html"&&e.html_pre_processor!=="html"||e.activePanel==="css"&&e.css_pre_processor!=="css"||e.activePanel==="javascript"&&e.javascript_pre_processor!=="javascript"))return"hidden"}return`
+ ${n}
+
+
+
+
+ ${p.rotate}
+
+
+
+
+ ${p.columns}
+
+
+
+
+ ${e.columnsRight?p.leftChev:p.rightChev}
+
+
+
+
+ ${p.tidy}
+
+
+
+
+ ${p.play}
+
+
+
+
`}var k={initialRender:!0,render(t){let s=g.selectedSize,r,i,n=document.getElementById("previewElm");document.getElementById("previewElm")&&(r=n.clientWidth,i=n.clientHeight);let[o,l]=s.split("x").map(Number),c=`
+
+
+
+
+
+
+
+
+
+
+
+ new project
+
+
+
+
+
+
+
+ import project
+
+
+
+
+
+
+
+ download json
+
+
+
+
+
+
+
+ download zip
+
+
+
+
+
+
+
+ share to codepen
+
+
+
+
+
+
+
+ empty storage
+
+
+ `;c=`
+
+
+
+ file menu
+
+
+ ${p.times}
+
+
+
+ ${c}
+
+
+
+ `;let m=``;m=`
+
+
+
+ settings
+
+
+ ${p.times}
+
+
+
+ ${m}
+
+
+
+ `;let a=`
+
+
+
+ Search for resources (JQuery, Bootstrap, Foundation...)
+
+
+ ${p.times}
+
+
+
+
+
+
+
+ ${g.librarySuggestions&&g.searchLibKey?g.librarySuggestions:""}
+
+
+
+
+
+ `,x="grid grid-rows-1 items-center bg-transparent border-0 focus-within:shadow-none",h="flex flex-col justify-between h-full",y="grid h-full items-center",f="capitalize text-center mt-4",L=["javascript","typescript","react","vue","preact","angular","alpine","solid","stimulus","mithril","hyperapp","aurelia","lit"],A="";for(let v of L)A+=`
+
+
+
+
+
+ ${v}
+
+
+ `;let T=`
+
+
+
+ Are you sure you want to start a new project?
+
+
+ ${p.times}
+
+
+
+ All current data will be lost.
+
+
+
+
+ `,z=`
+
+
+ ${ce()}
+
+
+
+
+
+
+
+
+ ${pe()}
+
+
+
+
+
+
+ ${g.iframeSize}
+
+
+
+
+
+
+
+
+
+ ${c}
+ ${m}
+ ${a}
+ ${T}
+
`,S=document.querySelector(t);if(!S)return;let j=new DOMParser().parseFromString(z,"text/html");if(j.body.innerHTML.trim()===z.trim())return;if(k.initialRender)return S.innerHTML=z,C(!0),k.initialRender=!1,!1;let O=S.firstElementChild,N=j.body.firstElementChild;J(O,N)}},X={render({large:t,title:s="Are you sure you want to proceed?",content:r,CloseLabel:i,ConfirmLabel:n,onLoad:o,onClose:l,onConfirm:c}){let m="text-lg font-thin m-0",a="text-xs w-auto px-3 py-2 m-0 capitalize rounded-md",y=`
+
+
+ ${r||""}
+
+
+ ${i||"close"}
+ ${c?`${n||"confirm"} `:""}
+
+ `,f=document.createElement("dialog");f.open=!0,f.innerHTML=y,document.body.appendChild(f),o&&typeof o=="function"&&o();let L=f.querySelector("header button"),A=f.querySelector("footer button:first-child"),T=f.querySelector("footer button:last-child");L.onclick=function(){l&&typeof l=="function"&&l(),document.body.removeChild(f)},A.onclick=function(){l&&typeof l=="function"&&l(),document.body.removeChild(f)},T.onclick=function(){c&&typeof c=="function"&&c(),document.body.removeChild(f)}}};function de(){let t="border-0 bg-transparent py-1";return`
+
+ ${p.indent}
+
+
+ ${p.outdent}
+
+
+ ${p.undo}
+
+
+ ${p.redo}
+
+
+ ${p.search}
+
+
+ ${p.goto}
+
+
+
+
+
+ ${p.comment}
+
+
+ ${p.fold}
+
+
+ ${p.unfold}
+
+
+ ${p.cut}
+
+
+ ${p.copy}
+
+
+ ${p.paste}
+
+
+ ${p.cursor}
+
+
`}function ue(){localStorage.removeItem("kodeWeave"),sessionStorage.clear(),document.cookie.split(";").forEach(function(t){document.cookie=t.trim().split("=")[0]+"=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/"}),"caches"in window&&caches.keys().then(function(t){for(let s of t)caches.delete(s)}),"serviceWorker"in navigator&&navigator.serviceWorker.getRegistrations().then(function(t){for(let s of t)s.unregister()}),console.log("All saved data, cookies, and service worker caches have been cleared."),location.reload()}var me=t=>{if(!t)return e.libraries.push(""),document.getElementById("librariesBox").innerHTML=Q(),!1;e.libraries.includes(t)?console.error(`Library already exists: ${t}`):e.libraries.push(t),document.getElementById("librariesBox")&&(document.getElementById("librariesBox").innerHTML=Q())};function Q(){return e.libraries.map((t,s)=>`
+
+
+
+ ${p.trash}
+
+
+ `).join("")}function ge(t){fetch(`https://api.cdnjs.com/libraries?search=${t}&fields=filename,description,version`).then(s=>{if(!s.ok)throw new Error("Network response was not ok");return s.json()}).then(s=>{if(s&&s.results&&s.results.length>0){let r=s.results.map(i=>i);g.librarySuggestions=r.map(i=>`
+
+
+ ${i.name}
+ ${i.version}
+
+ ${i.description}
+ `).join("")}}).catch(s=>{console.error("Error fetching data:",s)})}function R(t){let s=document.querySelector(`script[src="${t}"]`);s&&s.remove()}function V(t){t.forEach(s=>{let r=document.querySelector(`script[src="${s}"]`);r&&r.remove()})}async function D(t){return new Promise((s,r)=>{if(document.querySelector(`script[src="${t}"]`)){s();return}let n=document.createElement("script");n.src=t,n.onload=s,n.onerror=()=>r(new Error(`Failed to load script: ${t}`)),document.body.appendChild(n)})}async function Z(t){return Promise.all(t.map(D))}async function w(t,s){let r={html:{markdown:"libraries/preprocessors/marked.min.js",jade:"libraries/preprocessors/jade.js",pug:"libraries/preprocessors/pug.js"},css:{sass:"libraries/preprocessors/sass.sync.min.js",less:"libraries/preprocessors/less.min.js",stylus:"libraries/preprocessors/stylus.min.js"},javascript:{typescript:"libraries/preprocessors/typescript.min.js",babel:"libraries/preprocessors/babel.min.js",jsxtypescript:["libraries/preprocessors/typescript.min.js","libraries/preprocessors/babel.min.js"]}},i={html:e.html_pre_processor,css:e.css_pre_processor,javascript:e.javascript_pre_processor};try{let n=s!=="html"||s!=="css"||s!=="javascript",o=n?r[t][s]:null;if(i[t]&&n){let l=r[t][i[t]];Array.isArray(l)?V(l):R(l),Array.isArray(o)?await Z(o):o&&await D(o)}if(t==="html")e.html_pre_processor=s;else if(t==="css")e.css_pre_processor=s;else if(t==="javascript"){if(e.javascript_pre_processor=s,!window.editorManager||!window.editorManager.jsEditor)return;window.editorManager.setMode(e.javascript_pre_processor==="javascript"?"javascript":s,editorManager.jsEditor)}}catch(n){console.error("Error setting preprocessor:",n)}}async function he(){await Promise.all([w("html",e.html_pre_processor),w("css",e.css_pre_processor),w("javascript",e.javascript_pre_processor)]),window.editorManager&&(dispatchChanges(editorManager.htmlEditor,e.html),dispatchChanges(editorManager.cssEditor,e.css),dispatchChanges(editorManager.jsEditor,e.javascript),C(!0))}async function K(){await Z(["libraries/js-beautify/beautify.min.js","libraries/js-beautify/beautify-css.min.js","libraries/js-beautify/beautify-html.min.js"])}async function ee(){V(["libraries/js-beautify/beautify.min.js","libraries/js-beautify/beautify-css.min.js","libraries/js-beautify/beautify-html.min.js"])}async function fe(){await K();let t;switch(e.activePanel){case"html":t=html_beautify(e.html,{indent_size:2,max_preserve_newlines:1}),dispatchChanges(editorManager.htmlEditor,t);break;case"css":t=css_beautify(e.css,{indent_size:2,max_preserve_newlines:1}),e.css=t,dispatchChanges(editorManager.cssEditor,t);break;case"javascript":t=js_beautify(e.javascript,{indent_size:2,max_preserve_newlines:1}),e.javascript=t,dispatchChanges(editorManager.jsEditor,t);break;default:t="Unknown editor panel."}await ee()}function be(){let t="";for(;!/^[a-zA-Z]/.test(t);)t=Math.random().toString(36).substr(2,9);return t}function ve(t){g.selectedSize=t,W()}function we(){let t=document.getElementById("previewElm").firstElementChild;if(t.style.width==="100%")return!1;let s=parseInt(t.style.width),r=parseInt(t.style.height);[s,r]=[r,s];let i=previewElm.clientWidth,n=previewElm.clientHeight,o=Math.min(i/s,n/r);t.style.width=`${s}px`,t.style.height=`${r}px`,t.style.transform=`scale(${o})`,t.style.marginTop=`-${r/2}px`,t.style.marginLeft=`-${s/2}px`,g.selectedSize=s+"x"+r}function te(){let t=document.getElementById("previewElm").firstElementChild;if(t.style.width==="100%")return!1;let s=parseInt(t.style.width),r=parseInt(t.style.height),i=previewElm.clientWidth,n=previewElm.clientHeight,o=Math.min(i/s,n/r);t.style.width=`${s}px`,t.style.height=`${r}px`,t.style.transform=`scale(${o})`,t.style.marginTop=`-${r/2}px`,t.style.marginLeft=`-${s/2}px`}var G;function W(){if(g.selectedSize==="none"){let t=document.getElementById("iframe");g.iframeSize=`${t.clientWidth}px x ${t.clientHeight}px`;let s=document.getElementById("iframeClientSize");s.classList.contains("hidden")&&(G&&clearTimeout(G),s.classList.remove("hidden","opacity-0"),s.classList.add("opacity-100"),G=setTimeout(()=>{s.classList.remove("opacity-100"),s.classList.add("opacity-0"),setTimeout(()=>{s.classList.add("hidden")},300)},2e3))}else te()}async function I(t){try{if(t==="html")switch(e.html_pre_processor){case"markdown":return marked.parse(e.html);case"jade":return jade.render(e.html,{pretty:!0});case"pug":let s=document.getElementById("appScript");return s.hasAttribute("type")&&s.getAttribute("type")==="module"?(console.error("Cannot import pug as script is a module!"),!1):ne("pug").compile(e.html)({name:this.name});default:return e.html}if(t==="css")switch(e.css_pre_processor){case"stylus":return stylus.render(e.css);case"less":return new Promise((s,r)=>{less.render(e.css,(i,n)=>i?r(i):s(n.css))});case"sass":return new Promise((s,r)=>{Sass.compile(e.css,i=>i.status===0?s(i.text):r(new Error(i.message)))});default:return e.css}if(t==="javascript")switch(e.javascript_pre_processor){case"babel":return typeof Babel>"u"&&await D("libraries/preprocessors/babel.min.js"),Babel.transform(e.javascript,{presets:["env","react"]}).code;case"typescript":return ts.transpileModule(e.javascript,{compilerOptions:{module:ts.ModuleKind.CommonJS}}).outputText;case"jsxtypescript":let s=ts.transpileModule(e.javascript,{compilerOptions:{module:ts.ModuleKind.CommonJS,target:ts.ScriptTarget.ES5,jsx:ts.JsxEmit.React}}).outputText;return g.compiledJSX=Babel.transform(s,{presets:["env","react"]}).code,g.compiledJSX;default:return e.javascript}}catch(s){console.error("Error compiling code:",s)}}async function ye(t){let s=t.target.files[0];if(s)try{let r=await xe(s);e.logo=r}catch(r){console.error("Error converting image to base64:",r)}}function xe(t){return new Promise((s,r)=>{let i=new FileReader;i.readAsDataURL(t),i.onload=()=>s(i.result),i.onerror=n=>r(n)})}function je(t){function s(i){return i.charAt(0).toUpperCase()+i.slice(1)}let r=s(t);w("html","html"),w("css","css"),t!=="typescript"&&w("javascript","javascript"),(t==="typescript"||t==="angular")&&w("javascript","typescript"),e.name=`${r} name`,e.version=.01,e.title=`A Cool ${r} App`,e.description=`A modern ${r} application!`,e.author="kodeWeave",e.url="https://michaelsboost.com/",e.module=!0,e.preview=!0,t==="angular"&&(e.module=!1),e.pwa=!1,t==="javascript"&&(e.meta="",e.libraries=["https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css","https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js"],e.html=`
+
\u{1F44B} Hello, ${r}! \u{1F30E}
+
Counter: 0
+
+ +
+
+
`,e.css="",e.javascript=`let counter = 0;
+const counterElement = document.getElementById('counter');
+const incrementButton = document.getElementById('incrementButton');
+
+incrementButton.addEventListener('click', function() {
+ counter++;
+ counterElement.textContent = counter;
+});`),t==="typescript"&&(e.meta="",e.libraries=["https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css","https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js"],e.html=`
+
\u{1F44B} Hello, ${r}! \u{1F30E}
+
Counter: 0
+
+ +
+
+
`,e.css="",e.javascript=`let counter: number = 0;
+const counterElement: HTMLElement | null = document.getElementById('counter');
+const incrementButton: HTMLElement | null = document.getElementById('incrementButton');
+
+if (counterElement && incrementButton) {
+ incrementButton.addEventListener('click', function() {
+ counter++;
+ counterElement.textContent = counter.toString();
+ });
+}`),t==="react"&&(e.meta="",e.libraries=["https://unpkg.com/react@latest/umd/react.development.js","https://unpkg.com/react-dom@latest/umd/react-dom.development.js","https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css","https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js"],e.html='
',e.css="",e.javascript=`/** @jsxRuntime classic */
+/** @jsx React.createElement */
+const { useState } = React;
+
+function App() {
+ const [counter, setCounter] = useState(0);
+
+ return (
+
+
\u{1F44B} Hello, ${r}! \u{1F30E}
+
Counter: {counter}
+
setCounter(counter + 1)}
+ >
+ +
+
+
+ );
+}
+
+const root = ReactDOM.createRoot(document.getElementById('root'));
+root.render( );`),t==="vue"&&(e.meta="",e.libraries=["https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.global.prod.min.js","https://cdnjs.cloudflare.com/ajax/libs/picocss/2.0.6/pico.min.css","https://michaelsboost.com/TailwindCSSMod/tailwind-mod.min.js"],e.html='
',e.css="",e.javascript=`const App = {
+ data() {
+ return {
+ counter: 0,
+ message: '\u{1F44B} Hello, ${r}! \u{1F30E}'
+ };
+ },
+ methods: {
+ incrementCounter() {
+ this.counter++;
+ }
+ },
+ template: \`
+
+
{{ message }}
+
Counter: {{ counter }}
+
+ +
+
+
+ \`
+};
+
+const app = Vue.createApp(App);
+app.mount('#root');`),t==="preact"&&(e.meta=' -->
-
-
+
+
@@ -41,8 +42,9 @@ kodeWeave is your on the go coding playground! Desi
-
-
+
+