Wherry/LoFlum - Standalone.html
loki5512344 e895fe3237 Gui
2026-07-04 13:38:39 +03:00

179 lines
No EOL
78 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Bundled Page</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #17140F; display: flex; align-items: center; justify-content: center; min-height: 100vh; font-family: -apple-system, BlinkMacSystemFont, sans-serif; }
#__bundler_loading { position: fixed; bottom: 20px; right: 20px; font: 13px/1.4 -apple-system, BlinkMacSystemFont, sans-serif; color: #666; background: #fff; padding: 8px 14px; border-radius: 8px; box-shadow: 0 1px 4px rgba(0,0,0,0.12); z-index: 10000; }
#__bundler_thumbnail { position: fixed; inset: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background: #17140F; z-index: 9999; }
#__bundler_thumbnail svg { width: 100%; height: 100%; object-fit: contain; }
#__bundler_placeholder { color: #999; font-size: 14px; }
</style>
<noscript>
<style>#__bundler_loading { display: none; }</style>
<div style="position:fixed;bottom:12px;left:12px;font:13px/1.4 -apple-system,BlinkMacSystemFont,sans-serif;color:#999;background:rgba(255,255,255,0.9);padding:6px 12px;border-radius:6px;box-shadow:0 1px 4px rgba(0,0,0,0.08);z-index:10000;">
This page requires JavaScript to display.
</div>
</noscript>
</head>
<body>
<div id="__bundler_thumbnail">
<svg viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg">
<rect width="120" height="120" fill="#17140F"></rect>
<path d="M30 40 h20 l6 8 h34 v42 h-60 z" fill="#C1673C"></path>
</svg>
</div>
<div id="__bundler_loading">Unpacking...</div>
<script>
document.addEventListener('DOMContentLoaded', async function() {
const loading = document.getElementById('__bundler_loading');
function setStatus(msg) { if (loading) loading.textContent = msg; }
// Error sink persists across replaceWith since it's on window, not the DOM.
window.addEventListener('error', function(e) {
var p = document.body || document.documentElement;
var d = document.getElementById('__bundler_err') || p.appendChild(document.createElement('div'));
d.id = '__bundler_err';
d.style.cssText = 'position:fixed;bottom:12px;left:12px;right:12px;font:12px/1.4 ui-monospace,monospace;background:#2a1215;color:#ff8a80;padding:10px 14px;border-radius:8px;border:1px solid #5c2b2e;z-index:99999;white-space:pre-wrap;max-height:40vh;overflow:auto';
d.textContent = (d.textContent ? d.textContent + String.fromCharCode(10) : '') +
'[bundle] ' + (e.message || e.type) +
(e.filename ? ' (' + e.filename.slice(0, 60) + ':' + e.lineno + ')' : '');
}, true);
try {
const manifestEl = document.querySelector('script[type="__bundler/manifest"]');
const templateEl = document.querySelector('script[type="__bundler/template"]');
if (!manifestEl || !templateEl) {
setStatus('Error: missing bundle data');
console.error('[bundler] Missing script tags — manifestEl:', !!manifestEl, 'templateEl:', !!templateEl);
return;
}
const manifest = JSON.parse(manifestEl.textContent);
let template = JSON.parse(templateEl.textContent);
const uuids = Object.keys(manifest);
setStatus('Unpacking ' + uuids.length + ' assets...');
const blobUrls = {};
await Promise.all(uuids.map(async (uuid) => {
const entry = manifest[uuid];
try {
const binaryStr = atob(entry.data);
const bytes = new Uint8Array(binaryStr.length);
for (let i = 0; i < binaryStr.length; i++) bytes[i] = binaryStr.charCodeAt(i);
let finalBytes = bytes;
if (entry.compressed) {
if (typeof DecompressionStream !== 'undefined') {
const ds = new DecompressionStream('gzip');
const writer = ds.writable.getWriter();
const reader = ds.readable.getReader();
writer.write(bytes);
writer.close();
const chunks = [];
let totalLen = 0;
while (true) {
const { done, value } = await reader.read();
if (done) break;
chunks.push(value);
totalLen += value.length;
}
finalBytes = new Uint8Array(totalLen);
let offset = 0;
for (const chunk of chunks) { finalBytes.set(chunk, offset); offset += chunk.length; }
} else {
console.warn('DecompressionStream not available, asset ' + uuid + ' may not render');
}
}
blobUrls[uuid] = URL.createObjectURL(new Blob([finalBytes], { type: entry.mime }));
} catch (err) {
console.error('Failed to decode asset ' + uuid + ':', err);
blobUrls[uuid] = URL.createObjectURL(new Blob([], { type: entry.mime }));
}
}));
const extResEl = document.querySelector('script[type="__bundler/ext_resources"]');
const extResources = extResEl ? JSON.parse(extResEl.textContent) : [];
const resourceMap = {};
for (const entry of extResources) {
if (blobUrls[entry.uuid]) resourceMap[entry.id] = blobUrls[entry.uuid];
}
setStatus('Rendering...');
for (const uuid of uuids) template = template.split(uuid).join(blobUrls[uuid]);
// Strip integrity + crossorigin — blob URLs from a file:// document inherit
// a null origin, so crossorigin forces a CORS fetch that SRI then rejects.
// The manifest bytes are ours; SRI protects against CDN compromise, not this.
template = template.replace(/\s+integrity="[^"]*"/gi, '').replace(/\s+crossorigin="[^"]*"/gi, '');
const resourceScript = '<script>window.__resources = ' +
JSON.stringify(resourceMap).split('</' + 'script>').join('<\\/' + 'script>') +
';</' + 'script>';
// Inject after <head> so the DOCTYPE stays first; prepending the script
// would push the parser into quirks mode. DOMParser always emits a <head>
// (synthesizing one if the source HTML omitted it) but may carry
// attributes through, so match the full opening tag. slice() rather than
// replace() keeps us clear of $-pattern substitution in resourceScript.
const headOpen = template.match(/<head[^>]*>/i);
if (headOpen) {
const i = headOpen.index + headOpen[0].length;
template = template.slice(0, i) + resourceScript + template.slice(i);
}
// Parse the template and swap the root element. Scripts inserted via
// DOMParser/replaceWith are inert per spec — re-create each with
// createElement so they execute, awaiting onload for src scripts to
// preserve ordering (React before ReactDOM before Babel before text/babel).
const doc = new DOMParser().parseFromString(template, 'text/html');
document.documentElement.replaceWith(doc.documentElement);
const dead = Array.from(document.scripts);
for (const old of dead) {
const s = document.createElement('script');
for (const a of old.attributes) s.setAttribute(a.name, a.value);
s.textContent = old.textContent;
// text/babel scripts with a src: fetch and inline. transformScriptTags
// does XHR against the src, but blob:null/ from a file:// origin is
// silently dropped. Inlining makes it a plain inline babel script,
// which transformScriptTags handles unconditionally.
if ((s.type === 'text/babel' || s.type === 'text/jsx') && s.src) {
const r = await fetch(s.src);
s.textContent = await r.text();
s.removeAttribute('src');
}
const p = s.src ? new Promise(function(r) { s.onload = s.onerror = r; }) : null;
old.replaceWith(s);
if (p) await p;
}
// Babel standalone auto-transforms type=text/babel on DOMContentLoaded,
// which fired before we swapped the document. Trigger manually if present.
if (window.Babel && typeof window.Babel.transformScriptTags === 'function') {
window.Babel.transformScriptTags();
}
} catch (err) {
setStatus('Error unpacking: ' + err.message);
console.error('Bundle unpack error:', err);
}
});
</script>
<script type="__bundler/manifest">
{"8f878b98-87b3-4745-9dee-c77a19efa0cd":{"mime":"application/javascript","compressed":true,"data":"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"},"7320b5d2-f6f2-47b6-aaa0-942ef1603b09":{"mime":"text/javascript","compressed":true,"data":"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"}}
</script>
<script type="__bundler/ext_resources">
[]
</script>
<script type="__bundler/template">
"<!DOCTYPE html>\n<html><head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<script src=\"7320b5d2-f6f2-47b6-aaa0-942ef1603b09\"><\u002Fscript>\n\n<\u002Fhead>\n<body>\n<x-dc>\n<helmet>\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n <script src=\"8f878b98-87b3-4745-9dee-c77a19efa0cd\"><\u002Fscript>\n <style>\n @keyframes lf-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n ::-webkit-scrollbar { width: 10px; height: 10px; }\n ::-webkit-scrollbar-thumb { background: #33302a; border-radius: 6px; border: 2px solid #201d19; }\n ::-webkit-scrollbar-track { background: transparent; }\n <\u002Fstyle>\n<\u002Fhelmet>\n\n<div style=\"width:100%;min-height:100vh;background:radial-gradient(ellipse at 30% 0%, #241f18 0%, #16130f 55%, #100e0b 100%);display:flex;align-items:center;justify-content:center;padding:48px;box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,'SF Pro Text','Segoe UI',Roboto,sans-serif;\">\n\n <div style=\"width:1360px;height:820px;border-radius:12px;overflow:hidden;background:#201D19;box-shadow:0 50px 100px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.05);display:flex;flex-direction:column;position:relative;\">\n\n <!-- Titlebar -->\n <div style=\"height:36px;min-height:36px;background:#191611;border-bottom:1px solid #2E2A24;display:flex;align-items:center;padding:0 14px;position:relative;\">\n <div style=\"display:flex;align-items:center;gap:8px;\">\n <div style=\"width:12px;height:12px;border-radius:50%;background:#EC6A5E;\"><\u002Fdiv>\n <div style=\"width:12px;height:12px;border-radius:50%;background:#F5BD4F;\"><\u002Fdiv>\n <div style=\"width:12px;height:12px;border-radius:50%;background:#61C454;\"><\u002Fdiv>\n <\u002Fdiv>\n <div style=\"position:absolute;left:50%;transform:translateX(-50%);color:#A69C8E;font-size:12.5px;letter-spacing:0.2px;\">{{ windowTitle }}<\u002Fdiv>\n <\u002Fdiv>\n\n <!-- Toolbar -->\n <div style=\"height:48px;min-height:48px;background:#191611;border-bottom:1px solid #2E2A24;display:flex;align-items:center;padding:0 12px;gap:6px;\">\n <div style=\"display:flex;align-items:center;gap:6px;margin-right:4px;\">\n <iconify-icon icon=\"solar:folder-bold\" style=\"font-size:17px;color:#C1673C;\"><\u002Ficonify-icon>\n <span style=\"color:#EDE8E0;font-size:14px;font-weight:600;letter-spacing:0.2px;\">LoFlum<\u002Fspan>\n <\u002Fdiv>\n <div style=\"width:1px;height:20px;background:#2E2A24;\"><\u002Fdiv>\n\n <button onclick=\"{{ openConnectDialog }}\" style=\"display:flex;align-items:center;gap:6px;height:30px;padding:0 12px;border-radius:6px;border:none;background:#8B4A2C;color:#EDE8E0;font-size:12.5px;font-weight:500;cursor:pointer;\" style-hover=\"background:#a05a37;\">\n <iconify-icon icon=\"solar:add-circle-linear\" style=\"font-size:15px;\"><\u002Ficonify-icon>\n New Connection\n <\u002Fbutton>\n\n <div style=\"width:1px;height:20px;background:#2E2A24;\"><\u002Fdiv>\n\n <button style=\"display:flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-radius:6px;border:none;background:transparent;color:{{ uploadColor }};font-size:12.5px;cursor:pointer;\" style-hover=\"background:#262019;\">\n <iconify-icon icon=\"solar:upload-linear\" style=\"font-size:15px;\"><\u002Ficonify-icon>\n Upload\n <\u002Fbutton>\n <button style=\"display:flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-radius:6px;border:none;background:transparent;color:{{ downloadColor }};font-size:12.5px;cursor:pointer;\" style-hover=\"background:#262019;\">\n <iconify-icon icon=\"solar:download-linear\" style=\"font-size:15px;\"><\u002Ficonify-icon>\n Download\n <\u002Fbutton>\n\n <div style=\"width:1px;height:20px;background:#2E2A24;\"><\u002Fdiv>\n\n <button onclick=\"{{ toggleQueue }}\" style=\"display:flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-radius:6px;border:none;background:{{ queueBtnBg }};color:{{ queueBtnColor }};font-size:12.5px;cursor:pointer;\" style-hover=\"background:#262019;\">\n <iconify-icon icon=\"solar:clock-circle-linear\" style=\"font-size:15px;\"><\u002Ficonify-icon>\n Queue\n <sc-if value=\"{{ queueCount }}\" hint-placeholder-val=\"{{ true }}\">\n <span style=\"background:#C1673C;color:#191611;font-size:10.5px;font-weight:700;padding:1px 6px;border-radius:8px;\">{{ queueCount }}<\u002Fspan>\n <\u002Fsc-if>\n <\u002Fbutton>\n\n <div style=\"width:1px;height:20px;background:#2E2A24;\"><\u002Fdiv>\n\n <button style=\"display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:none;background:transparent;color:{{ connectedIconColor }};cursor:pointer;\" style-hover=\"background:#262019;\" title=\"Refresh\">\n <iconify-icon icon=\"solar:refresh-linear\" style=\"font-size:16px;\"><\u002Ficonify-icon>\n <\u002Fbutton>\n <button onclick=\"{{ openMkdirDialog }}\" style=\"display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:none;background:transparent;color:{{ connectedIconColor }};cursor:pointer;\" style-hover=\"background:#262019;\" title=\"New Folder\">\n <iconify-icon icon=\"solar:folder-with-files-linear\" style=\"font-size:16px;\"><\u002Ficonify-icon>\n <\u002Fbutton>\n <button onclick=\"{{ openDeleteDialog }}\" style=\"display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:none;background:transparent;color:{{ connectedIconColor }};cursor:pointer;\" style-hover=\"background:#3a241d;\" title=\"Delete\">\n <iconify-icon icon=\"solar:trash-bin-minimalistic-linear\" style=\"font-size:16px;\"><\u002Ficonify-icon>\n <\u002Fbutton>\n <button onclick=\"{{ openRenameDialog }}\" style=\"display:flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:6px;border:none;background:transparent;color:{{ connectedIconColor }};cursor:pointer;\" style-hover=\"background:#262019;\" title=\"Rename\">\n <iconify-icon icon=\"solar:pen-linear\" style=\"font-size:16px;\"><\u002Ficonify-icon>\n <\u002Fbutton>\n\n <div style=\"flex:1;\"><\u002Fdiv>\n\n <button onclick=\"{{ toggleHistory }}\" style=\"display:flex;align-items:center;gap:6px;height:30px;padding:0 10px;border-radius:6px;border:none;background:{{ historyBtnBg }};color:{{ historyBtnColor }};font-size:12.5px;cursor:pointer;position:relative;\" style-hover=\"background:#262019;\">\n <iconify-icon icon=\"solar:history-linear\" style=\"font-size:15px;\"><\u002Ficonify-icon>\n History\n <\u002Fbutton>\n <\u002Fdiv>\n\n <!-- History popup -->\n <sc-if value=\"{{ historyOpen }}\" hint-placeholder-val=\"{{ false }}\">\n <div style=\"position:absolute;top:88px;right:12px;width:270px;background:#201d19;border:1px solid #2E2A24;border-radius:8px;box-shadow:0 20px 40px rgba(0,0,0,0.5);padding:10px;z-index:50;\">\n <div style=\"color:#A69C8E;font-size:11px;font-weight:600;letter-spacing:0.3px;padding:2px 4px 8px;\">RECENT CONNECTIONS<\u002Fdiv>\n <sc-for list=\"{{ historyItems }}\" as=\"h\" hint-placeholder-count=\"3\">\n <div style=\"display:flex;align-items:center;justify-content:space-between;padding:7px 8px;border-radius:5px;cursor:pointer;\" style-hover=\"background:#262019;\">\n <div style=\"display:flex;align-items:center;gap:8px;\">\n <iconify-icon icon=\"solar:server-square-linear\" style=\"font-size:14px;color:#A69C8E;\"><\u002Ficonify-icon>\n <span style=\"color:#EDE8E0;font-size:12px;\">{{ h.label }}<\u002Fspan>\n <\u002Fdiv>\n <span style=\"color:#6E655A;font-size:10.5px;\">{{ h.time }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fsc-for>\n <\u002Fdiv>\n <\u002Fsc-if>\n\n <!-- Tab bar -->\n <div style=\"height:36px;min-height:36px;background:#17140F;border-bottom:1px solid #2E2A24;display:flex;align-items:center;padding:6px 10px;gap:6px;\">\n <sc-if value=\"{{ connected }}\" hint-placeholder-val=\"{{ true }}\">\n <div style=\"display:flex;align-items:center;gap:8px;height:24px;padding:0 10px;border-radius:6px;background:#241D14;color:#EDE8E0;font-size:12px;\">\n <div style=\"width:6px;height:6px;border-radius:50%;background:#7A9471;\"><\u002Fdiv>\n {{ tabLabel }}\n <span onclick=\"{{ disconnect }}\" style=\"color:#6E655A;cursor:pointer;font-size:13px;line-height:1;\" style-hover=\"color:#EDE8E0;\">×<\u002Fspan>\n <\u002Fdiv>\n <\u002Fsc-if>\n <button onclick=\"{{ openConnectDialog }}\" style=\"display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:6px;border:none;background:transparent;color:#6E655A;font-size:15px;cursor:pointer;\" style-hover=\"background:#241D14;color:#EDE8E0;\">+<\u002Fbutton>\n <\u002Fdiv>\n\n <!-- Body -->\n <div style=\"flex:1;display:flex;overflow:hidden;min-height:0;\">\n\n <!-- Sidebar -->\n <div style=\"width:200px;min-width:200px;background:#191611;border-right:1px solid #2E2A24;overflow-y:auto;padding:10px 0;\">\n\n <div style=\"color:#6E655A;font-size:10.5px;font-weight:700;letter-spacing:0.5px;padding:2px 14px 6px;\">LOCAL<\u002Fdiv>\n <sc-for list=\"{{ localBookmarks }}\" as=\"b\" hint-placeholder-count=\"4\">\n <div onclick=\"{{ b.onClick }}\" style=\"display:flex;align-items:center;gap:8px;height:28px;margin:0 8px;padding:0 8px;border-radius:5px;cursor:pointer;background:{{ b.bg }};\" style-hover=\"background:#262019;\">\n <iconify-icon icon=\"{{ b.icon }}\" style=\"font-size:14px;color:{{ b.color }};\"><\u002Ficonify-icon>\n <span style=\"font-size:12.5px;color:{{ b.textColor }};\">{{ b.label }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fsc-for>\n\n <div style=\"height:1px;background:#28241E;margin:10px 14px;\"><\u002Fdiv>\n <div style=\"color:#6E655A;font-size:10.5px;font-weight:700;letter-spacing:0.5px;padding:2px 14px 6px;\">DRIVES<\u002Fdiv>\n <sc-for list=\"{{ drives }}\" as=\"d\" hint-placeholder-count=\"2\">\n <div style=\"display:flex;align-items:center;gap:8px;height:28px;margin:0 8px;padding:0 8px;border-radius:5px;cursor:pointer;\" style-hover=\"background:#262019;\">\n <iconify-icon icon=\"{{ d.icon }}\" style=\"font-size:14px;color:#A69C8E;\"><\u002Ficonify-icon>\n <span style=\"font-size:12.5px;color:#EDE8E0;\">{{ d.label }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fsc-for>\n\n <div style=\"height:1px;background:#28241E;margin:10px 14px;\"><\u002Fdiv>\n <div style=\"color:#6E655A;font-size:10.5px;font-weight:700;letter-spacing:0.5px;padding:2px 14px 6px;\">BOOKMARKS<\u002Fdiv>\n <div style=\"padding:4px 14px;\">\n <div style=\"color:#6E655A;font-size:11px;\">No bookmarks yet<\u002Fdiv>\n <div style=\"color:#6E655A;font-size:10px;margin-top:2px;\">Use ★ in file list<\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n\n <!-- Local + Remote panes -->\n <div style=\"flex:1;display:flex;min-width:0;\">\n\n <!-- LOCAL -->\n <div style=\"flex:1;display:flex;flex-direction:column;border-right:1px solid #2E2A24;min-width:0;\">\n <div style=\"height:30px;min-height:30px;background:#17140F;border-bottom:1px solid #2E2A24;display:flex;align-items:center;padding:0 12px;justify-content:space-between;\">\n <span style=\"color:#A69C8E;font-size:10.5px;font-weight:700;letter-spacing:0.5px;\">LOCAL<\u002Fspan>\n <span style=\"color:#6E655A;font-size:11px;font-family:ui-monospace,'SF Mono','Cascadia Code',monospace;\">{{ localPath }}<\u002Fspan>\n <\u002Fdiv>\n <div style=\"flex:1;overflow-y:auto;padding:4px 0;\">\n <div style=\"display:flex;align-items:center;height:24px;padding:0 12px;color:#6E655A;font-size:10.5px;font-weight:600;gap:0;\">\n <span style=\"flex:1;\">Name<\u002Fspan>\n <span style=\"width:80px;text-align:right;\">Size<\u002Fspan>\n <span style=\"width:110px;text-align:right;\">Modified<\u002Fspan>\n <\u002Fdiv>\n <sc-for list=\"{{ localFiles }}\" as=\"f\" hint-placeholder-count=\"8\">\n <div style=\"display:flex;align-items:center;height:28px;padding:0 12px;border-radius:5px;margin:0 4px;cursor:default;background:{{ f.bg }};\" style-hover=\"background:#262019;\">\n <div style=\"flex:1;display:flex;align-items:center;gap:8px;min-width:0;\">\n <iconify-icon icon=\"{{ f.icon }}\" style=\"font-size:15px;color:{{ f.iconColor }};flex-shrink:0;\"><\u002Ficonify-icon>\n <span style=\"font-size:12.5px;color:#EDE8E0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\">{{ f.name }}<\u002Fspan>\n <\u002Fdiv>\n <span style=\"width:80px;text-align:right;font-size:11px;color:#A69C8E;font-family:ui-monospace,'SF Mono','Cascadia Code',monospace;\">{{ f.size }}<\u002Fspan>\n <span style=\"width:110px;text-align:right;font-size:11px;color:#6E655A;font-family:ui-monospace,'SF Mono','Cascadia Code',monospace;\">{{ f.modified }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fsc-for>\n <\u002Fdiv>\n <\u002Fdiv>\n\n <!-- REMOTE -->\n <div style=\"flex:1;display:flex;flex-direction:column;min-width:0;\">\n <sc-if value=\"{{ connected }}\" hint-placeholder-val=\"{{ true }}\">\n <div style=\"height:30px;min-height:30px;background:#17140F;border-bottom:1px solid #2E2A24;display:flex;align-items:center;padding:0 12px;justify-content:space-between;\">\n <span style=\"color:#A69C8E;font-size:10.5px;font-weight:700;letter-spacing:0.5px;\">REMOTE · {{ remoteHost }}<\u002Fspan>\n <span style=\"color:#6E655A;font-size:11px;font-family:ui-monospace,'SF Mono','Cascadia Code',monospace;\">{{ remotePath }}<\u002Fspan>\n <\u002Fdiv>\n <div style=\"flex:1;overflow-y:auto;padding:4px 0;\">\n <div style=\"display:flex;align-items:center;height:24px;padding:0 12px;color:#6E655A;font-size:10.5px;font-weight:600;\">\n <span style=\"flex:1;\">Name<\u002Fspan>\n <span style=\"width:80px;text-align:right;\">Size<\u002Fspan>\n <span style=\"width:110px;text-align:right;\">Modified<\u002Fspan>\n <\u002Fdiv>\n <sc-for list=\"{{ remoteFiles }}\" as=\"f\" hint-placeholder-count=\"8\">\n <div style=\"display:flex;align-items:center;height:28px;padding:0 12px;border-radius:5px;margin:0 4px;cursor:default;background:{{ f.bg }};\" style-hover=\"background:#262019;\">\n <div style=\"flex:1;display:flex;align-items:center;gap:8px;min-width:0;\">\n <iconify-icon icon=\"{{ f.icon }}\" style=\"font-size:15px;color:{{ f.iconColor }};flex-shrink:0;\"><\u002Ficonify-icon>\n <span style=\"font-size:12.5px;color:#EDE8E0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\">{{ f.name }}<\u002Fspan>\n <\u002Fdiv>\n <span style=\"width:80px;text-align:right;font-size:11px;color:#A69C8E;font-family:ui-monospace,'SF Mono','Cascadia Code',monospace;\">{{ f.size }}<\u002Fspan>\n <span style=\"width:110px;text-align:right;font-size:11px;color:#6E655A;font-family:ui-monospace,'SF Mono','Cascadia Code',monospace;\">{{ f.modified }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fsc-for>\n <\u002Fdiv>\n <\u002Fsc-if>\n <sc-if value=\"{{ notConnected }}\" hint-placeholder-val=\"{{ false }}\">\n <div style=\"height:30px;min-height:30px;background:#17140F;border-bottom:1px solid #2E2A24;display:flex;align-items:center;padding:0 12px;\">\n <span style=\"color:#A69C8E;font-size:10.5px;font-weight:700;letter-spacing:0.5px;\">REMOTE<\u002Fspan>\n <\u002Fdiv>\n <div style=\"flex:1;display:flex;align-items:center;justify-content:center;\">\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:14px;\">\n <div style=\"width:56px;height:56px;border-radius:50%;background:#241D14;display:flex;align-items:center;justify-content:center;\">\n <iconify-icon icon=\"solar:server-square-linear\" style=\"font-size:26px;color:#6E655A;\"><\u002Ficonify-icon>\n <\u002Fdiv>\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:4px;\">\n <span style=\"color:#A69C8E;font-size:13.5px;font-weight:600;\">Remote<\u002Fspan>\n <span style=\"color:#6E655A;font-size:12px;\">Connect to a server to browse files<\u002Fspan>\n <\u002Fdiv>\n <button onclick=\"{{ openConnectDialog }}\" style=\"display:flex;align-items:center;gap:7px;margin-top:6px;height:34px;padding:0 16px;border-radius:7px;border:none;background:#C1673C;color:#1a1611;font-size:12.5px;font-weight:600;cursor:pointer;\" style-hover=\"background:#d07a4e;\">\n <iconify-icon icon=\"solar:add-circle-bold\" style=\"font-size:15px;\"><\u002Ficonify-icon>\n New Connection\n <\u002Fbutton>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fsc-if>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n\n <!-- Queue panel -->\n <div style=\"min-height:34px;background:#161310;border-top:1px solid #2E2A24;display:flex;flex-direction:column;overflow:hidden;height:{{ queueHeight }};\">\n <div onclick=\"{{ toggleQueue }}\" style=\"height:34px;min-height:34px;display:flex;align-items:center;padding:0 12px;gap:8px;cursor:pointer;\">\n <iconify-icon icon=\"{{ queueChevron }}\" style=\"font-size:13px;color:#6E655A;\"><\u002Ficonify-icon>\n <span style=\"color:#A69C8E;font-size:11.5px;font-weight:600;\">Transfer Queue<\u002Fspan>\n <span style=\"color:#6E655A;font-size:11px;\">{{ queueSummary }}<\u002Fspan>\n <\u002Fdiv>\n <sc-if value=\"{{ queueExpanded }}\" hint-placeholder-val=\"{{ true }}\">\n <div style=\"flex:1;overflow-y:auto;padding:2px 12px 10px;display:flex;flex-direction:column;gap:6px;\">\n <sc-for list=\"{{ queueTasks }}\" as=\"t\" hint-placeholder-count=\"4\">\n <div style=\"display:flex;align-items:center;gap:10px;height:34px;\">\n <iconify-icon icon=\"{{ t.dirIcon }}\" style=\"font-size:15px;color:{{ t.dirColor }};flex-shrink:0;\"><\u002Ficonify-icon>\n <span style=\"width:170px;font-size:12px;color:#EDE8E0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0;\">{{ t.name }}<\u002Fspan>\n <div style=\"flex:1;height:6px;border-radius:3px;background:#28241E;overflow:hidden;\">\n <div style=\"height:100%;border-radius:3px;background:{{ t.barColor }};width:{{ t.progressWidth }};\"><\u002Fdiv>\n <\u002Fdiv>\n <span style=\"width:38px;text-align:right;font-size:11px;color:#A69C8E;font-family:ui-monospace,monospace;\">{{ t.progressLabel }}<\u002Fspan>\n <span style=\"width:80px;text-align:right;font-size:10.5px;color:#6E655A;\">{{ t.statusLabel }}<\u002Fspan>\n <button style=\"width:22px;height:22px;border-radius:5px;border:none;background:transparent;color:#6E655A;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;\" style-hover=\"background:#262019;color:#EDE8E0;\">\n <iconify-icon icon=\"{{ t.actionIcon }}\" style=\"font-size:13px;\"><\u002Ficonify-icon>\n <\u002Fbutton>\n <\u002Fdiv>\n <\u002Fsc-for>\n <\u002Fdiv>\n <\u002Fsc-if>\n <\u002Fdiv>\n\n <!-- Status bar -->\n <div style=\"height:26px;min-height:26px;background:#17140F;border-top:1px solid #2E2A24;display:flex;align-items:center;padding:0 12px;justify-content:space-between;\">\n <span style=\"color:#6E655A;font-size:11px;\">{{ statusMessage }}<\u002Fspan>\n <div style=\"display:flex;align-items:center;gap:10px;\">\n <sc-if value=\"{{ connected }}\" hint-placeholder-val=\"{{ true }}\">\n <span style=\"display:flex;align-items:center;gap:5px;color:#7A9471;font-size:11px;\">\n <iconify-icon icon=\"solar:lock-password-bold\" style=\"font-size:12px;\"><\u002Ficonify-icon>\n SFTP\n <\u002Fspan>\n <\u002Fsc-if>\n <span style=\"color:#6E655A;font-size:11px;\">{{ connectedCountLabel }}<\u002Fspan>\n <\u002Fdiv>\n <\u002Fdiv>\n\n <!-- ============ Dialog overlays ============ -->\n\n <sc-if value=\"{{ showConnect }}\" hint-placeholder-val=\"{{ false }}\">\n <div style=\"position:absolute;inset:0;background:rgba(10,8,6,0.55);display:flex;align-items:center;justify-content:center;z-index:100;\">\n <div style=\"width:380px;background:#191611;border:1px solid #2E2A24;border-radius:10px;box-shadow:0 30px 60px rgba(0,0,0,0.5);padding:22px;\">\n <div style=\"color:#EDE8E0;font-size:15px;font-weight:600;margin-bottom:16px;\">New Connection<\u002Fdiv>\n\n <div style=\"display:flex;gap:6px;margin-bottom:14px;\">\n <sc-for list=\"{{ protocols }}\" as=\"p\" hint-placeholder-count=\"3\">\n <button onclick=\"{{ p.onClick }}\" style=\"flex:1;height:28px;border-radius:6px;border:none;font-size:11.5px;font-weight:600;cursor:pointer;background:{{ p.bg }};color:{{ p.color }};\">{{ p.label }}<\u002Fbutton>\n <\u002Fsc-for>\n <\u002Fdiv>\n\n <div style=\"display:flex;flex-direction:column;gap:10px;\">\n <div style=\"display:flex;flex-direction:column;gap:4px;\">\n <label style=\"color:#A69C8E;font-size:11px;\">Host<\u002Flabel>\n <input value=\"{{ connectHost }}\" oninput=\"{{ setConnectHost }}\" placeholder=\"ftp.example.com\" style=\"height:30px;background:#201d19;border:1px solid #2E2A24;border-radius:6px;padding:0 10px;color:#EDE8E0;font-size:12.5px;outline:none;\">\n <\u002Fdiv>\n <div style=\"display:flex;gap:10px;\">\n <div style=\"flex:1;display:flex;flex-direction:column;gap:4px;\">\n <label style=\"color:#A69C8E;font-size:11px;\">Username<\u002Flabel>\n <input value=\"{{ connectUser }}\" oninput=\"{{ setConnectUser }}\" placeholder=\"user\" style=\"height:30px;background:#201d19;border:1px solid #2E2A24;border-radius:6px;padding:0 10px;color:#EDE8E0;font-size:12.5px;outline:none;\">\n <\u002Fdiv>\n <div style=\"width:80px;display:flex;flex-direction:column;gap:4px;\">\n <label style=\"color:#A69C8E;font-size:11px;\">Port<\u002Flabel>\n <input value=\"{{ connectPort }}\" oninput=\"{{ setConnectPort }}\" style=\"height:30px;background:#201d19;border:1px solid #2E2A24;border-radius:6px;padding:0 10px;color:#EDE8E0;font-size:12.5px;outline:none;\">\n <\u002Fdiv>\n <\u002Fdiv>\n <div style=\"display:flex;flex-direction:column;gap:4px;\">\n <label style=\"color:#A69C8E;font-size:11px;\">Password<\u002Flabel>\n <input type=\"password\" value=\"{{ connectPass }}\" oninput=\"{{ setConnectPass }}\" placeholder=\"••••••••\" style=\"height:30px;background:#201d19;border:1px solid #2E2A24;border-radius:6px;padding:0 10px;color:#EDE8E0;font-size:12.5px;outline:none;\">\n <\u002Fdiv>\n <\u002Fdiv>\n\n <div style=\"display:flex;justify-content:flex-end;gap:8px;margin-top:20px;\">\n <button onclick=\"{{ closeDialog }}\" style=\"height:30px;padding:0 14px;border-radius:6px;border:none;background:transparent;color:#A69C8E;font-size:12.5px;cursor:pointer;\" style-hover=\"background:#262019;\">Cancel<\u002Fbutton>\n <button onclick=\"{{ submitConnect }}\" style=\"height:30px;padding:0 16px;border-radius:6px;border:none;background:#C1673C;color:#1a1611;font-size:12.5px;font-weight:600;cursor:pointer;\" style-hover=\"background:#d07a4e;\">Connect<\u002Fbutton>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fsc-if>\n\n <sc-if value=\"{{ showMkdir }}\" hint-placeholder-val=\"{{ false }}\">\n <div style=\"position:absolute;inset:0;background:rgba(10,8,6,0.55);display:flex;align-items:center;justify-content:center;z-index:100;\">\n <div style=\"width:280px;background:#191611;border:1px solid #2E2A24;border-radius:10px;box-shadow:0 30px 60px rgba(0,0,0,0.5);padding:20px;\">\n <div style=\"color:#EDE8E0;font-size:14.5px;font-weight:600;margin-bottom:12px;\">New Folder<\u002Fdiv>\n <input value=\"{{ mkdirName }}\" oninput=\"{{ setMkdirName }}\" placeholder=\"Untitled Folder\" style=\"width:100%;box-sizing:border-box;height:30px;background:#201d19;border:1px solid #2E2A24;border-radius:6px;padding:0 10px;color:#EDE8E0;font-size:12.5px;outline:none;\">\n <div style=\"display:flex;justify-content:flex-end;gap:8px;margin-top:16px;\">\n <button onclick=\"{{ closeDialog }}\" style=\"height:30px;padding:0 14px;border-radius:6px;border:none;background:transparent;color:#A69C8E;font-size:12.5px;cursor:pointer;\" style-hover=\"background:#262019;\">Cancel<\u002Fbutton>\n <button onclick=\"{{ closeDialog }}\" style=\"height:30px;padding:0 16px;border-radius:6px;border:none;background:#C1673C;color:#1a1611;font-size:12.5px;font-weight:600;cursor:pointer;\" style-hover=\"background:#d07a4e;\">Create<\u002Fbutton>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fsc-if>\n\n <sc-if value=\"{{ showDelete }}\" hint-placeholder-val=\"{{ false }}\">\n <div style=\"position:absolute;inset:0;background:rgba(10,8,6,0.55);display:flex;align-items:center;justify-content:center;z-index:100;\">\n <div style=\"width:300px;background:#191611;border:1px solid #2E2A24;border-radius:10px;box-shadow:0 30px 60px rgba(0,0,0,0.5);padding:20px;\">\n <div style=\"display:flex;align-items:flex-start;gap:10px;margin-bottom:6px;\">\n <iconify-icon icon=\"solar:danger-triangle-bold\" style=\"font-size:20px;color:#B3523E;flex-shrink:0;margin-top:1px;\"><\u002Ficonify-icon>\n <div>\n <div style=\"color:#EDE8E0;font-size:14px;font-weight:600;\">Delete \"{{ deleteTarget }}\"?<\u002Fdiv>\n <div style=\"color:#A69C8E;font-size:11.5px;margin-top:4px;\">This action cannot be undone.<\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n <div style=\"display:flex;justify-content:flex-end;gap:8px;margin-top:16px;\">\n <button onclick=\"{{ closeDialog }}\" style=\"height:30px;padding:0 14px;border-radius:6px;border:none;background:transparent;color:#A69C8E;font-size:12.5px;cursor:pointer;\" style-hover=\"background:#262019;\">Cancel<\u002Fbutton>\n <button onclick=\"{{ closeDialog }}\" style=\"height:30px;padding:0 16px;border-radius:6px;border:none;background:#B3523E;color:#1a1611;font-size:12.5px;font-weight:600;cursor:pointer;\" style-hover=\"background:#c56c53;\">Delete<\u002Fbutton>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fsc-if>\n\n <sc-if value=\"{{ showRename }}\" hint-placeholder-val=\"{{ false }}\">\n <div style=\"position:absolute;inset:0;background:rgba(10,8,6,0.55);display:flex;align-items:center;justify-content:center;z-index:100;\">\n <div style=\"width:300px;background:#191611;border:1px solid #2E2A24;border-radius:10px;box-shadow:0 30px 60px rgba(0,0,0,0.5);padding:20px;\">\n <div style=\"color:#EDE8E0;font-size:14.5px;font-weight:600;margin-bottom:12px;\">Rename<\u002Fdiv>\n <input value=\"{{ renameValue }}\" oninput=\"{{ setRenameValue }}\" style=\"width:100%;box-sizing:border-box;height:30px;background:#201d19;border:1px solid #2E2A24;border-radius:6px;padding:0 10px;color:#EDE8E0;font-size:12.5px;outline:none;\">\n <div style=\"display:flex;justify-content:flex-end;gap:8px;margin-top:16px;\">\n <button onclick=\"{{ closeDialog }}\" style=\"height:30px;padding:0 14px;border-radius:6px;border:none;background:transparent;color:#A69C8E;font-size:12.5px;cursor:pointer;\" style-hover=\"background:#262019;\">Cancel<\u002Fbutton>\n <button onclick=\"{{ closeDialog }}\" style=\"height:30px;padding:0 16px;border-radius:6px;border:none;background:#C1673C;color:#1a1611;font-size:12.5px;font-weight:600;cursor:pointer;\" style-hover=\"background:#d07a4e;\">Save<\u002Fbutton>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fdiv>\n <\u002Fsc-if>\n\n <\u002Fdiv>\n<\u002Fdiv>\n\n<\u002Fx-dc>\n<script type=\"text/x-dc\" data-dc-script=\"\">\nconst ICONS = {\n dir: { icon: 'solar:folder-bold', color: '#D9A441' },\n pdf: { icon: 'solar:file-text-bold', color: '#B3523E' },\n xlsx: { icon: 'solar:document-bold', color: '#7A9471' },\n png: { icon: 'solar:gallery-bold', color: '#C1673C' },\n jpg: { icon: 'solar:gallery-bold', color: '#C1673C' },\n zip: { icon: 'solar:archive-down-minimlistic-bold', color: '#A69C8E' },\n txt: { icon: 'solar:document-text-bold', color: '#A69C8E' },\n py: { icon: 'solar:code-bold', color: '#7A9471' },\n yaml: { icon: 'solar:code-bold', color: '#D9A441' },\n php: { icon: 'solar:code-bold', color: '#8B4A2C' },\n css: { icon: 'solar:code-bold', color: '#C1673C' },\n log: { icon: 'solar:document-text-bold', color: '#6E655A' },\n htaccess: { icon: 'solar:shield-keyhole-bold', color: '#A69C8E' },\n default: { icon: 'solar:file-bold', color: '#A69C8E' },\n};\n\nfunction iconFor(name, kind) {\n if (kind === 'dir') return ICONS.dir;\n const ext = name.includes('.') ? name.split('.').pop().toLowerCase() : (name.startsWith('.') ? name.slice(1) : '');\n return ICONS[ext] || ICONS.default;\n}\n\nfunction buildFiles(rows, selectedIdx) {\n return rows.map((r, i) => {\n const meta = iconFor(r.name, r.kind);\n return {\n name: r.name,\n size: r.kind === 'dir' ? '—' : r.size,\n modified: r.modified,\n icon: meta.icon,\n iconColor: meta.color,\n bg: i === selectedIdx ? '#2A2018' : 'transparent',\n };\n });\n}\n\nclass Component extends DCLogic {\n state = {\n connected: true,\n activeDialog: null,\n queueExpanded: true,\n historyOpen: false,\n localSelected: 2,\n remoteSelected: 1,\n connectHost: '',\n connectUser: 'deploy',\n connectPort: '22',\n connectPass: '',\n connectProtocol: 'SFTP',\n mkdirName: '',\n renameValue: 'index.php',\n deleteTarget: 'app.log',\n };\n\n renderVals() {\n const s = this.state;\n\n const localRows = [\n { name: 'Documents', kind: 'dir', modified: 'Jun 28' },\n { name: 'Downloads', kind: 'dir', modified: 'Jul 2' },\n { name: 'Projects', kind: 'dir', modified: 'Jul 3' },\n { name: 'Pictures', kind: 'dir', modified: 'Jun 12' },\n { name: 'invoice.xlsx', kind: 'file', size: '48 KB', modified: 'Jul 1' },\n { name: 'report.pdf', kind: 'file', size: '1.2 MB', modified: 'Jun 30' },\n { name: 'site-backup.zip', kind: 'file', size: '84.3 MB', modified: 'Jun 29' },\n { name: 'deploy.py', kind: 'file', size: '3 KB', modified: 'Jun 27' },\n { name: 'screenshot.png', kind: 'file', size: '620 KB', modified: 'Jun 25' },\n { name: 'notes.txt', kind: 'file', size: '1 KB', modified: 'Jun 20' },\n ];\n\n const remoteRows = [\n { name: 'public_html', kind: 'dir', modified: 'Jul 2' },\n { name: 'logs', kind: 'dir', modified: 'Jul 3' },\n { name: 'backups', kind: 'dir', modified: 'Jun 30' },\n { name: 'config.yaml', kind: 'file', size: '2 KB', modified: 'Jun 30' },\n { name: '.htaccess', kind: 'file', size: '1 KB', modified: 'Jun 18' },\n { name: 'index.php', kind: 'file', size: '4 KB', modified: 'Jul 3' },\n { name: 'style.css', kind: 'file', size: '18 KB', modified: 'Jun 22' },\n { name: 'app.log', kind: 'file', size: '9.4 MB', modified: 'Jul 3' },\n ];\n\n const localBookmarksBase = [\n { label: 'Home', icon: 'solar:home-2-bold', path: '~' },\n { label: 'Desktop', icon: 'solar:monitor-bold', path: '~/Desktop' },\n { label: 'Documents', icon: 'solar:document-bold', path: '~/Documents' },\n { label: 'Downloads', icon: 'solar:download-square-bold', path: '~/Downloads' },\n ];\n const localBookmarks = localBookmarksBase.map((b, i) => ({\n ...b,\n color: i === 0 ? '#C1673C' : '#A69C8E',\n textColor: i === 0 ? '#EDE8E0' : '#EDE8E0',\n bg: i === 0 ? '#2A2018' : 'transparent',\n onClick: () => {},\n }));\n\n const drives = [\n { label: '/ (root)', icon: 'solar:ssd-square-linear' },\n { label: 'backup-drive', icon: 'solar:database-linear' },\n ];\n\n const queueTasksRaw = [\n { name: 'site-backup.zip', dir: 'up', progress: 68, status: 'active', speed: '4.2 MB/s' },\n { name: 'photo-final.png', dir: 'down', progress: 100, status: 'done', speed: '' },\n { name: 'invoice-batch.pdf', dir: 'up', progress: 0, status: 'queued', speed: '' },\n { name: 'video-export.mp4', dir: 'down', progress: 34, status: 'paused', speed: '' },\n ];\n const queueTasks = queueTasksRaw.map(t => ({\n name: t.name,\n dirIcon: t.dir === 'up' ? 'solar:upload-linear' : 'solar:download-linear',\n dirColor: t.dir === 'up' ? '#C1673C' : '#7A9471',\n progressWidth: t.progress + '%',\n progressLabel: t.progress + '%',\n barColor: t.status === 'done' ? '#7A9471' : (t.status === 'paused' ? '#6E655A' : '#C1673C'),\n statusLabel: t.status === 'active' ? t.speed : (t.status === 'done' ? 'Complete' : (t.status === 'paused' ? 'Paused' : 'Queued')),\n actionIcon: t.status === 'done' ? 'solar:check-circle-bold' : (t.status === 'paused' ? 'solar:play-circle-linear' : 'solar:pause-circle-linear'),\n }));\n\n const historyItems = [\n { label: 'deploy@prod.example.com', time: '2h ago' },\n { label: 'admin@staging.internal', time: 'Yesterday' },\n { label: 'ftpuser@files.example.net', time: 'Jun 28' },\n ];\n\n const protocols = ['SFTP', 'FTP', 'FTPS'].map(p => ({\n label: p,\n bg: s.connectProtocol === p ? '#8B4A2C' : '#201d19',\n color: s.connectProtocol === p ? '#EDE8E0' : '#A69C8E',\n onClick: () => this.setState({ connectProtocol: p }),\n }));\n\n const connectedIconColor = s.connected ? '#A69C8E' : '#4a453d';\n\n return {\n windowTitle: s.connected ? `deploy@${s.connectHost || 'prod.example.com'} — LoFlum` : 'LoFlum',\n connected: s.connected,\n notConnected: !s.connected,\n tabLabel: `deploy@${s.connectHost || 'prod.example.com'}`,\n localPath: '~/Projects',\n remoteHost: s.connectHost || 'prod.example.com',\n remotePath: '/public_html',\n\n localFiles: buildFiles(localRows, s.localSelected),\n remoteFiles: buildFiles(remoteRows, s.remoteSelected),\n localBookmarks,\n drives,\n queueTasks,\n historyItems,\n protocols,\n\n queueCount: queueTasksRaw.filter(t => t.status !== 'done').length,\n queueExpanded: s.queueExpanded,\n queueHeight: s.queueExpanded ? '190px' : '34px',\n queueChevron: s.queueExpanded ? 'solar:alt-arrow-down-linear' : 'solar:alt-arrow-up-linear',\n queueSummary: `${queueTasksRaw.length} transfers · 1 active`,\n queueBtnBg: s.queueExpanded ? '#241D14' : 'transparent',\n queueBtnColor: s.queueExpanded ? '#C1673C' : '#EDE8E0',\n\n historyOpen: s.historyOpen,\n historyBtnBg: s.historyOpen ? '#241D14' : 'transparent',\n historyBtnColor: s.historyOpen ? '#C1673C' : '#EDE8E0',\n\n uploadColor: connectedIconColor,\n downloadColor: connectedIconColor,\n connectedIconColor,\n\n statusMessage: s.connected ? `Connected to ${s.connectHost || 'prod.example.com'}` : 'Not connected',\n connectedCountLabel: s.connected ? '1 connection' : '0 connections',\n\n showConnect: s.activeDialog === 'connect',\n showMkdir: s.activeDialog === 'mkdir',\n showDelete: s.activeDialog === 'delete',\n showRename: s.activeDialog === 'rename',\n\n connectHost: s.connectHost,\n connectUser: s.connectUser,\n connectPort: s.connectPort,\n connectPass: s.connectPass,\n setConnectHost: e => this.setState({ connectHost: e.target.value }),\n setConnectUser: e => this.setState({ connectUser: e.target.value }),\n setConnectPort: e => this.setState({ connectPort: e.target.value }),\n setConnectPass: e => this.setState({ connectPass: e.target.value }),\n\n mkdirName: s.mkdirName,\n setMkdirName: e => this.setState({ mkdirName: e.target.value }),\n renameValue: s.renameValue,\n setRenameValue: e => this.setState({ renameValue: e.target.value }),\n deleteTarget: s.deleteTarget,\n\n openConnectDialog: () => this.setState({ activeDialog: 'connect' }),\n openMkdirDialog: () => this.setState({ activeDialog: 'mkdir' }),\n openDeleteDialog: () => this.setState({ activeDialog: 'delete' }),\n openRenameDialog: () => this.setState({ activeDialog: 'rename' }),\n closeDialog: () => this.setState({ activeDialog: null }),\n submitConnect: () => this.setState({ activeDialog: null, connected: true }),\n disconnect: () => this.setState({ connected: false }),\n toggleQueue: () => this.setState({ queueExpanded: !s.queueExpanded }),\n toggleHistory: () => this.setState({ historyOpen: !s.historyOpen }),\n };\n }\n}\n<\u002Fscript>\n\n\n<\u002Fbody><\u002Fhtml>"
</script>
</body>
</html>