From 832af4aaaee20665497354fa6adc8944e12a7ee8 Mon Sep 17 00:00:00 2001 From: Kawa Date: Tue, 11 Aug 2026 13:33:27 +0200 Subject: [PATCH] Update branding with DockMV logo and assets - Replace text-based branding with logo icon in header - Update README.md with full DockMV logo image - Add favicon and logo-icon assets - Add dockmv-icon to assets directory - Update styles for logo display - Rebuild web UI distribution Co-Authored-By: Claude Haiku 4.5 --- README.md | 2 +- assets/dockmv-icon.png | Bin 0 -> 43522 bytes internal/webui/dist/assets/index-BYoxln0e.css | 1 - internal/webui/dist/assets/index-CKzWD9Xt.css | 1 + .../{index-BJYzrqMo.js => index-DJVzxyBi.js} | 2 +- internal/webui/dist/favicon.png | Bin 0 -> 15393 bytes internal/webui/dist/index.html | 7 ++++--- internal/webui/dist/logo-icon.png | Bin 0 -> 6196 bytes web/index.html | 3 ++- web/public/favicon.png | Bin 0 -> 15393 bytes web/public/logo-icon.png | Bin 0 -> 6196 bytes web/src/App.tsx | 2 +- web/src/styles.css | 2 +- 13 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 assets/dockmv-icon.png delete mode 100644 internal/webui/dist/assets/index-BYoxln0e.css create mode 100644 internal/webui/dist/assets/index-CKzWD9Xt.css rename internal/webui/dist/assets/{index-BJYzrqMo.js => index-DJVzxyBi.js} (99%) create mode 100644 internal/webui/dist/favicon.png create mode 100644 internal/webui/dist/logo-icon.png create mode 100644 web/public/favicon.png create mode 100644 web/public/logo-icon.png diff --git a/README.md b/README.md index 7efc683..11689d1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# DockMV +

DockMV

Move Docker containers — and their data — from one host to another, from a web UI, in a few clicks. diff --git a/assets/dockmv-icon.png b/assets/dockmv-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d42172bbd0b2a78f4150be8c64e4c2a6dfc0d568 GIT binary patch literal 43522 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 H`|bY&gEzA0 literal 0 HcmV?d00001 diff --git a/internal/webui/dist/assets/index-BYoxln0e.css b/internal/webui/dist/assets/index-BYoxln0e.css deleted file mode 100644 index f70245f..0000000 --- a/internal/webui/dist/assets/index-BYoxln0e.css +++ /dev/null @@ -1 +0,0 @@ -:root{--bg: #0e1116;--bg-raised: #161b22;--bg-sunken: #0a0d12;--bg-hover: #1c232d;--border: #262d38;--border-strong: #38414f;--text: #dfe6ef;--text-dim: #8b97a8;--text-faint: #5d6878;--accent: #4c9aff;--accent-dim: #1b3a63;--ok: #3fb950;--warn: #d29922;--err: #f85149;--run: #58a6ff;--mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Mono", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--radius: 6px;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:16px;padding:0 16px;height:48px;flex:0 0 auto;background:var(--bg-raised);border-bottom:1px solid var(--border)}.brand{font-family:var(--mono);font-weight:600;letter-spacing:-.3px;display:flex;align-items:center;gap:8px}.brand .dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}.tabs{display:flex;gap:2px;margin-left:8px}.tab{background:none;border:0;padding:6px 12px;border-radius:var(--radius);color:var(--text-dim);cursor:pointer}.tab:hover{background:var(--bg-hover);color:var(--text)}.tab.active{background:var(--accent-dim);color:#cfe3ff}.tab .count{font-family:var(--mono);font-size:11px;margin-left:6px;color:var(--text-faint)}.topbar-right{margin-left:auto;display:flex;align-items:center;gap:12px}.hostinfo{font-family:var(--mono);font-size:11px;color:var(--text-dim)}.hostinfo b{color:var(--text);font-weight:600}.body{flex:1;display:flex;min-height:0}.main{flex:1;min-width:0;overflow:auto}.sidebar{width:340px;flex:0 0 340px;overflow:auto;background:var(--bg-raised);border-left:1px solid var(--border)}@media(max-width:1100px){.body{flex-direction:column;overflow:auto}.main{overflow:visible;flex:0 0 auto}.sidebar{width:auto;flex:0 0 auto;overflow:visible;border-left:0;border-top:1px solid var(--border)}}.section{padding:14px 16px;border-bottom:1px solid var(--border)}.section h3{margin:0 0 10px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint);font-weight:600}.row{display:flex;align-items:center;gap:8px}.row.wrap{flex-wrap:wrap}.spacer{flex:1}.stack{display:flex;flex-direction:column;gap:8px}.muted{color:var(--text-dim)}.faint{color:var(--text-faint)}.mono{font-family:var(--mono)}.small{font-size:11px}.nowrap{white-space:nowrap}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn{background:var(--bg-hover);border:1px solid var(--border-strong);border-radius:var(--radius);padding:6px 12px;cursor:pointer;color:var(--text);white-space:nowrap}.btn:hover:not(:disabled){background:#232c38;border-color:#4a5566}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:#1f6feb;border-color:#2f7ef5;color:#fff;font-weight:500}.btn.primary:hover:not(:disabled){background:#2b7bf3}.btn.danger{border-color:#6b2a28;color:#ff8a80}.btn.danger:hover:not(:disabled){background:#351c1b}.btn.tiny{padding:2px 7px;font-size:11px}.btn.ghost{background:none;border-color:transparent;color:var(--text-dim)}.btn.ghost:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}input[type=text],input[type=number],input[type=password],select,textarea{background:var(--bg-sunken);border:1px solid var(--border-strong);border-radius:var(--radius);padding:5px 8px;width:100%}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-dim);border-color:var(--accent)}textarea{font-family:var(--mono);font-size:11px;resize:vertical}label.field{display:block}label.field>span{display:block;font-size:11px;color:var(--text-dim);margin-bottom:3px}.check{display:flex;align-items:center;gap:7px;cursor:pointer;-webkit-user-select:none;user-select:none}.check input{accent-color:var(--accent);width:14px;height:14px;margin:0;cursor:pointer}.check.disabled{opacity:.45;cursor:not-allowed}.badge{font-family:var(--mono);font-size:10px;padding:1px 5px;border-radius:3px;border:1px solid var(--border-strong);color:var(--text-dim);white-space:nowrap}.badge.vol{border-color:#2d4a6b;color:#83b8f0}.badge.bind{border-color:#5c4520;color:#e0b556}.badge.anon{border-color:#46375e;color:#b294e0}.badge.tmpfs{border-color:#33404d;color:#9aa7b6}.badge.net{border-color:#2b5040;color:#6cc79b}.badge.port{border-color:#3a3f52;color:#a5aec9}.state{display:inline-flex;align-items:center;gap:5px;font-size:11px}.state .dot{width:7px;height:7px;border-radius:50%;background:var(--text-faint);flex:0 0 auto}.state.running .dot{background:var(--ok)}.state.exited .dot,.state.dead .dot{background:var(--text-faint)}.state.paused .dot,.state.restarting .dot{background:var(--warn)}.state.succeeded .dot{background:var(--ok)}.state.failed .dot{background:var(--err)}.state.canceled .dot{background:var(--warn)}.state.pending .dot,.state.skipped .dot{background:var(--text-faint)}.state.running .dot{animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.notice{padding:8px 10px;border-radius:var(--radius);font-size:12px;border:1px solid var(--border-strong);background:var(--bg-sunken)}.notice.warn{border-color:#5c4520;background:#221a0c;color:#f0cd82}.notice.err{border-color:#6b2a28;background:#2a1413;color:#ffb3ad}.notice.ok{border-color:#23543a;background:#0f2318;color:#97e0ac}.toolbar{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 16px;background:var(--bg);border-bottom:1px solid var(--border)}.toolbar .search{width:220px}.group-head{display:flex;align-items:center;gap:8px;padding:8px 16px 4px;color:var(--text-faint);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.group-head .line{flex:1;height:1px;background:var(--border)}.clist{display:flex;flex-direction:column}.crow{display:grid;grid-template-columns:26px 22px minmax(180px,1.4fr) minmax(140px,1.2fr) minmax(200px,2fr) auto;align-items:center;gap:10px;padding:7px 16px;border-bottom:1px solid var(--border);cursor:default}.crow:hover{background:var(--bg-hover)}.crow.selected{background:#11213a}.crow.selected:hover{background:#16294a}.crow .name{font-weight:500}.crow .sub{font-size:11px;color:var(--text-faint)}.crow .image{font-family:var(--mono);font-size:11px;color:var(--text-dim)}.crow .tags{display:flex;gap:4px;flex-wrap:wrap}.expander{background:none;border:0;color:var(--text-faint);cursor:pointer;padding:2px;line-height:1;border-radius:3px}.expander:hover{color:var(--text);background:var(--bg-hover)}.detail{padding:12px 16px 16px 52px;background:var(--bg-sunken);border-bottom:1px solid var(--border);display:grid;gap:14px}.detail .grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}.mount-table{width:100%;border-collapse:collapse;font-size:12px}.mount-table th{text-align:left;font-weight:500;color:var(--text-faint);font-size:11px;padding:4px 8px 4px 0;border-bottom:1px solid var(--border)}.mount-table td{padding:5px 8px 5px 0;border-bottom:1px solid var(--border);vertical-align:middle}.mount-table tr:last-child td{border-bottom:0}.mount-table select{width:auto;min-width:110px}.mount-table input[type=text]{min-width:150px}.joblist{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.jobcard{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-raised);padding:10px 12px;cursor:pointer}.jobcard:hover{border-color:var(--border-strong)}.jobcard.active{border-color:var(--accent)}.progress{height:4px;background:var(--bg-sunken);border-radius:2px;overflow:hidden}.progress>div{height:100%;background:var(--accent);transition:width .25s ease}.progress.done>div{background:var(--ok)}.progress.failed>div{background:var(--err)}.steps{display:flex;flex-direction:column;gap:3px;margin-top:6px}.step{display:grid;grid-template-columns:14px 1fr 130px 90px;align-items:center;gap:8px;font-size:11px}.step .label{color:var(--text-dim)}.step.failed .label{color:#ff9b95}.log{font-family:var(--mono);font-size:11px;line-height:1.55;background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;max-height:340px;overflow:auto;white-space:pre-wrap;word-break:break-word}.log .l-warn{color:var(--warn)}.log .l-error{color:var(--err)}.log .l-cmd{color:#7ee0b8}.log .l-info{color:var(--text-dim)}.log .ts{color:var(--text-faint)}.modal-backdrop{position:fixed;inset:0;background:#03060ab8;display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}.modal{background:var(--bg-raised);border:1px solid var(--border-strong);border-radius:10px;width:min(760px,100%);max-height:100%;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 18px 50px #0000008c}.modal header{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;font-weight:600}.modal .content{padding:16px;overflow:auto}.modal footer{padding:12px 16px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end}.cmdblock{font-family:var(--mono);font-size:11px;background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;overflow-x:auto;white-space:pre;margin:0}.empty{padding:48px 16px;text-align:center;color:var(--text-faint)}.kv{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;font-size:12px}.kv dt{color:var(--text-faint)}.kv dd{margin:0;font-family:var(--mono);font-size:11px}.fingerprint{font-family:var(--mono);font-size:12px;word-break:break-all;background:var(--bg-sunken);border:1px solid var(--border-strong);border-radius:var(--radius);padding:8px 10px} diff --git a/internal/webui/dist/assets/index-CKzWD9Xt.css b/internal/webui/dist/assets/index-CKzWD9Xt.css new file mode 100644 index 0000000..705d376 --- /dev/null +++ b/internal/webui/dist/assets/index-CKzWD9Xt.css @@ -0,0 +1 @@ +:root{--bg: #0e1116;--bg-raised: #161b22;--bg-sunken: #0a0d12;--bg-hover: #1c232d;--border: #262d38;--border-strong: #38414f;--text: #dfe6ef;--text-dim: #8b97a8;--text-faint: #5d6878;--accent: #4c9aff;--accent-dim: #1b3a63;--ok: #3fb950;--warn: #d29922;--err: #f85149;--run: #58a6ff;--mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Mono", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--radius: 6px;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:16px;padding:0 16px;height:48px;flex:0 0 auto;background:var(--bg-raised);border-bottom:1px solid var(--border)}.brand{font-family:var(--mono);font-weight:600;letter-spacing:-.3px;display:flex;align-items:center;gap:8px}.brand-logo{height:22px;width:auto;display:block}.tabs{display:flex;gap:2px;margin-left:8px}.tab{background:none;border:0;padding:6px 12px;border-radius:var(--radius);color:var(--text-dim);cursor:pointer}.tab:hover{background:var(--bg-hover);color:var(--text)}.tab.active{background:var(--accent-dim);color:#cfe3ff}.tab .count{font-family:var(--mono);font-size:11px;margin-left:6px;color:var(--text-faint)}.topbar-right{margin-left:auto;display:flex;align-items:center;gap:12px}.hostinfo{font-family:var(--mono);font-size:11px;color:var(--text-dim)}.hostinfo b{color:var(--text);font-weight:600}.body{flex:1;display:flex;min-height:0}.main{flex:1;min-width:0;overflow:auto}.sidebar{width:340px;flex:0 0 340px;overflow:auto;background:var(--bg-raised);border-left:1px solid var(--border)}@media(max-width:1100px){.body{flex-direction:column;overflow:auto}.main{overflow:visible;flex:0 0 auto}.sidebar{width:auto;flex:0 0 auto;overflow:visible;border-left:0;border-top:1px solid var(--border)}}.section{padding:14px 16px;border-bottom:1px solid var(--border)}.section h3{margin:0 0 10px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint);font-weight:600}.row{display:flex;align-items:center;gap:8px}.row.wrap{flex-wrap:wrap}.spacer{flex:1}.stack{display:flex;flex-direction:column;gap:8px}.muted{color:var(--text-dim)}.faint{color:var(--text-faint)}.mono{font-family:var(--mono)}.small{font-size:11px}.nowrap{white-space:nowrap}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn{background:var(--bg-hover);border:1px solid var(--border-strong);border-radius:var(--radius);padding:6px 12px;cursor:pointer;color:var(--text);white-space:nowrap}.btn:hover:not(:disabled){background:#232c38;border-color:#4a5566}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:#1f6feb;border-color:#2f7ef5;color:#fff;font-weight:500}.btn.primary:hover:not(:disabled){background:#2b7bf3}.btn.danger{border-color:#6b2a28;color:#ff8a80}.btn.danger:hover:not(:disabled){background:#351c1b}.btn.tiny{padding:2px 7px;font-size:11px}.btn.ghost{background:none;border-color:transparent;color:var(--text-dim)}.btn.ghost:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}input[type=text],input[type=number],input[type=password],select,textarea{background:var(--bg-sunken);border:1px solid var(--border-strong);border-radius:var(--radius);padding:5px 8px;width:100%}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent-dim);border-color:var(--accent)}textarea{font-family:var(--mono);font-size:11px;resize:vertical}label.field{display:block}label.field>span{display:block;font-size:11px;color:var(--text-dim);margin-bottom:3px}.check{display:flex;align-items:center;gap:7px;cursor:pointer;-webkit-user-select:none;user-select:none}.check input{accent-color:var(--accent);width:14px;height:14px;margin:0;cursor:pointer}.check.disabled{opacity:.45;cursor:not-allowed}.badge{font-family:var(--mono);font-size:10px;padding:1px 5px;border-radius:3px;border:1px solid var(--border-strong);color:var(--text-dim);white-space:nowrap}.badge.vol{border-color:#2d4a6b;color:#83b8f0}.badge.bind{border-color:#5c4520;color:#e0b556}.badge.anon{border-color:#46375e;color:#b294e0}.badge.tmpfs{border-color:#33404d;color:#9aa7b6}.badge.net{border-color:#2b5040;color:#6cc79b}.badge.port{border-color:#3a3f52;color:#a5aec9}.state{display:inline-flex;align-items:center;gap:5px;font-size:11px}.state .dot{width:7px;height:7px;border-radius:50%;background:var(--text-faint);flex:0 0 auto}.state.running .dot{background:var(--ok)}.state.exited .dot,.state.dead .dot{background:var(--text-faint)}.state.paused .dot,.state.restarting .dot{background:var(--warn)}.state.succeeded .dot{background:var(--ok)}.state.failed .dot{background:var(--err)}.state.canceled .dot{background:var(--warn)}.state.pending .dot,.state.skipped .dot{background:var(--text-faint)}.state.running .dot{animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.notice{padding:8px 10px;border-radius:var(--radius);font-size:12px;border:1px solid var(--border-strong);background:var(--bg-sunken)}.notice.warn{border-color:#5c4520;background:#221a0c;color:#f0cd82}.notice.err{border-color:#6b2a28;background:#2a1413;color:#ffb3ad}.notice.ok{border-color:#23543a;background:#0f2318;color:#97e0ac}.toolbar{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 16px;background:var(--bg);border-bottom:1px solid var(--border)}.toolbar .search{width:220px}.group-head{display:flex;align-items:center;gap:8px;padding:8px 16px 4px;color:var(--text-faint);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.group-head .line{flex:1;height:1px;background:var(--border)}.clist{display:flex;flex-direction:column}.crow{display:grid;grid-template-columns:26px 22px minmax(180px,1.4fr) minmax(140px,1.2fr) minmax(200px,2fr) auto;align-items:center;gap:10px;padding:7px 16px;border-bottom:1px solid var(--border);cursor:default}.crow:hover{background:var(--bg-hover)}.crow.selected{background:#11213a}.crow.selected:hover{background:#16294a}.crow .name{font-weight:500}.crow .sub{font-size:11px;color:var(--text-faint)}.crow .image{font-family:var(--mono);font-size:11px;color:var(--text-dim)}.crow .tags{display:flex;gap:4px;flex-wrap:wrap}.expander{background:none;border:0;color:var(--text-faint);cursor:pointer;padding:2px;line-height:1;border-radius:3px}.expander:hover{color:var(--text);background:var(--bg-hover)}.detail{padding:12px 16px 16px 52px;background:var(--bg-sunken);border-bottom:1px solid var(--border);display:grid;gap:14px}.detail .grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}.mount-table{width:100%;border-collapse:collapse;font-size:12px}.mount-table th{text-align:left;font-weight:500;color:var(--text-faint);font-size:11px;padding:4px 8px 4px 0;border-bottom:1px solid var(--border)}.mount-table td{padding:5px 8px 5px 0;border-bottom:1px solid var(--border);vertical-align:middle}.mount-table tr:last-child td{border-bottom:0}.mount-table select{width:auto;min-width:110px}.mount-table input[type=text]{min-width:150px}.joblist{padding:12px 16px;display:flex;flex-direction:column;gap:8px}.jobcard{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-raised);padding:10px 12px;cursor:pointer}.jobcard:hover{border-color:var(--border-strong)}.jobcard.active{border-color:var(--accent)}.progress{height:4px;background:var(--bg-sunken);border-radius:2px;overflow:hidden}.progress>div{height:100%;background:var(--accent);transition:width .25s ease}.progress.done>div{background:var(--ok)}.progress.failed>div{background:var(--err)}.steps{display:flex;flex-direction:column;gap:3px;margin-top:6px}.step{display:grid;grid-template-columns:14px 1fr 130px 90px;align-items:center;gap:8px;font-size:11px}.step .label{color:var(--text-dim)}.step.failed .label{color:#ff9b95}.log{font-family:var(--mono);font-size:11px;line-height:1.55;background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;max-height:340px;overflow:auto;white-space:pre-wrap;word-break:break-word}.log .l-warn{color:var(--warn)}.log .l-error{color:var(--err)}.log .l-cmd{color:#7ee0b8}.log .l-info{color:var(--text-dim)}.log .ts{color:var(--text-faint)}.modal-backdrop{position:fixed;inset:0;background:#03060ab8;display:flex;align-items:center;justify-content:center;padding:24px;z-index:50}.modal{background:var(--bg-raised);border:1px solid var(--border-strong);border-radius:10px;width:min(760px,100%);max-height:100%;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 18px 50px #0000008c}.modal header{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;font-weight:600}.modal .content{padding:16px;overflow:auto}.modal footer{padding:12px 16px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end}.cmdblock{font-family:var(--mono);font-size:11px;background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;overflow-x:auto;white-space:pre;margin:0}.empty{padding:48px 16px;text-align:center;color:var(--text-faint)}.kv{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;font-size:12px}.kv dt{color:var(--text-faint)}.kv dd{margin:0;font-family:var(--mono);font-size:11px}.fingerprint{font-family:var(--mono);font-size:12px;word-break:break-all;background:var(--bg-sunken);border:1px solid var(--border-strong);border-radius:var(--radius);padding:8px 10px} diff --git a/internal/webui/dist/assets/index-BJYzrqMo.js b/internal/webui/dist/assets/index-DJVzxyBi.js similarity index 99% rename from internal/webui/dist/assets/index-BJYzrqMo.js rename to internal/webui/dist/assets/index-DJVzxyBi.js index 00cb632..e3cedba 100644 --- a/internal/webui/dist/assets/index-BJYzrqMo.js +++ b/internal/webui/dist/assets/index-DJVzxyBi.js @@ -8,4 +8,4 @@ Error generating stack: `+a.message+` `+a.stack}}var Iu=Object.prototype.hasOwnProperty,Pu=h.unstable_scheduleCallback,li=h.unstable_cancelCallback,Gr=h.unstable_shouldYield,Xr=h.unstable_requestPaint,ot=h.unstable_now,Qr=h.unstable_getCurrentPriorityLevel,Af=h.unstable_ImmediatePriority,Nf=h.unstable_UserBlockingPriority,Un=h.unstable_NormalPriority,Zr=h.unstable_LowPriority,_f=h.unstable_IdlePriority,Lr=h.log,Vr=h.unstable_setDisableYieldValue,Ra=null,dt=null;function ne(l){if(typeof Lr=="function"&&Vr(l),dt&&typeof dt.setStrictMode=="function")try{dt.setStrictMode(Ra,l)}catch{}}var rt=Math.clz32?Math.clz32:wr,Kr=Math.log,Jr=Math.LN2;function wr(l){return l>>>=0,l===0?32:31-(Kr(l)/Jr|0)|0}var Cn=256,Hn=262144,Rn=4194304;function De(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function qn(l,t,e){var a=l.pendingLanes;if(a===0)return 0;var n=0,u=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var f=a&134217727;return f!==0?(a=f&~u,a!==0?n=De(a):(i&=f,i!==0?n=De(i):e||(e=f&~l,e!==0&&(n=De(e))))):(f=a&~u,f!==0?n=De(f):i!==0?n=De(i):e||(e=a&~l,e!==0&&(n=De(e)))),n===0?0:t!==0&&t!==n&&(t&u)===0&&(u=n&-n,e=t&-t,u>=e||u===32&&(e&4194048)!==0)?t:n}function qa(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function kr(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Of(){var l=Rn;return Rn<<=1,(Rn&62914560)===0&&(Rn=4194304),l}function ti(l){for(var t=[],e=0;31>e;e++)t.push(l);return t}function Ba(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function $r(l,t,e,a,n,u){var i=l.pendingLanes;l.pendingLanes=e,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=e,l.entangledLanes&=e,l.errorRecoveryDisabledLanes&=e,l.shellSuspendCounter=0;var f=l.entanglements,o=l.expirationTimes,v=l.hiddenUpdates;for(e=i&~e;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var th=/[\n"\\]/g;function jt(l){return l.replace(th,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function ci(l,t,e,a,n,u,i,f){l.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.type=i:l.removeAttribute("type"),t!=null?i==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+pt(t)):l.value!==""+pt(t)&&(l.value=""+pt(t)):i!=="submit"&&i!=="reset"||l.removeAttribute("value"),t!=null?fi(l,i,pt(t)):e!=null?fi(l,i,pt(e)):a!=null&&l.removeAttribute("value"),n==null&&u!=null&&(l.defaultChecked=!!u),n!=null&&(l.checked=n&&typeof n!="function"&&typeof n!="symbol"),f!=null&&typeof f!="function"&&typeof f!="symbol"&&typeof f!="boolean"?l.name=""+pt(f):l.removeAttribute("name")}function Zf(l,t,e,a,n,u,i,f){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(l.type=u),t!=null||e!=null){if(!(u!=="submit"&&u!=="reset"||t!=null)){ii(l);return}e=e!=null?""+pt(e):"",t=t!=null?""+pt(t):e,f||t===l.value||(l.value=t),l.defaultValue=t}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,l.checked=f?l.checked:!!a,l.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(l.name=i),ii(l)}function fi(l,t,e){t==="number"&&Gn(l.ownerDocument)===l||l.defaultValue===""+e||(l.defaultValue=""+e)}function la(l,t,e,a){if(l=l.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),hi=!1;if(Qt)try{var Qa={};Object.defineProperty(Qa,"passive",{get:function(){hi=!0}}),window.addEventListener("test",Qa,Qa),window.removeEventListener("test",Qa,Qa)}catch{hi=!1}var ie=null,mi=null,Qn=null;function $f(){if(Qn)return Qn;var l,t=mi,e=t.length,a,n="value"in ie?ie.value:ie.textContent,u=n.length;for(l=0;l=Va),ts=" ",es=!1;function as(l,t){switch(l){case"keyup":return Oh.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ns(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var na=!1;function Dh(l,t){switch(l){case"compositionend":return ns(t);case"keypress":return t.which!==32?null:(es=!0,ts);case"textInput":return l=t.data,l===ts&&es?null:l;default:return null}}function Uh(l,t){if(na)return l==="compositionend"||!Si&&as(l,t)?(l=$f(),Qn=mi=ie=null,na=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:e,offset:t-l};l=a}l:{for(;e;){if(e.nextSibling){e=e.nextSibling;break l}e=e.parentNode}e=void 0}e=rs(e)}}function ms(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?ms(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function ys(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=Gn(l.document);t instanceof l.HTMLIFrameElement;){try{var e=typeof t.contentWindow.location.href=="string"}catch{e=!1}if(e)l=t.contentWindow;else break;t=Gn(l.document)}return t}function xi(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var Xh=Qt&&"documentMode"in document&&11>=document.documentMode,ua=null,zi=null,ka=null,Ti=!1;function vs(l,t,e){var a=e.window===e?e.document:e.nodeType===9?e:e.ownerDocument;Ti||ua==null||ua!==Gn(a)||(a=ua,"selectionStart"in a&&xi(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),ka&&wa(ka,a)||(ka=a,a=Hu(zi,"onSelect"),0>=i,n-=i,Rt=1<<32-rt(t)+n|e<I?(al=X,X=null):al=X.sibling;var sl=b(m,X,y[I],z);if(sl===null){X===null&&(X=al);break}l&&X&&sl.alternate===null&&t(m,X),r=u(sl,r,I),fl===null?Z=sl:fl.sibling=sl,fl=sl,X=al}if(I===y.length)return e(m,X),ul&&Lt(m,I),Z;if(X===null){for(;II?(al=X,X=null):al=X.sibling;var _e=b(m,X,sl.value,z);if(_e===null){X===null&&(X=al);break}l&&X&&_e.alternate===null&&t(m,X),r=u(_e,r,I),fl===null?Z=_e:fl.sibling=_e,fl=_e,X=al}if(sl.done)return e(m,X),ul&&Lt(m,I),Z;if(X===null){for(;!sl.done;I++,sl=y.next())sl=T(m,sl.value,z),sl!==null&&(r=u(sl,r,I),fl===null?Z=sl:fl.sibling=sl,fl=sl);return ul&&Lt(m,I),Z}for(X=a(X);!sl.done;I++,sl=y.next())sl=S(X,m,I,sl.value,z),sl!==null&&(l&&sl.alternate!==null&&X.delete(sl.key===null?I:sl.key),r=u(sl,r,I),fl===null?Z=sl:fl.sibling=sl,fl=sl);return l&&X.forEach(function(iy){return t(m,iy)}),ul&&Lt(m,I),Z}function pl(m,r,y,z){if(typeof y=="object"&&y!==null&&y.type===il&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case dl:l:{for(var Z=y.key;r!==null;){if(r.key===Z){if(Z=y.type,Z===il){if(r.tag===7){e(m,r.sibling),z=n(r,y.props.children),z.return=m,m=z;break l}}else if(r.elementType===Z||typeof Z=="object"&&Z!==null&&Z.$$typeof===Q&&Ze(Z)===r.type){e(m,r.sibling),z=n(r,y.props),ln(z,y),z.return=m,m=z;break l}e(m,r);break}else t(m,r);r=r.sibling}y.type===il?(z=Be(y.props.children,m.mode,z,y.key),z.return=m,m=z):(z=Fn(y.type,y.key,y.props,null,m.mode,z),ln(z,y),z.return=m,m=z)}return i(m);case yl:l:{for(Z=y.key;r!==null;){if(r.key===Z)if(r.tag===4&&r.stateNode.containerInfo===y.containerInfo&&r.stateNode.implementation===y.implementation){e(m,r.sibling),z=n(r,y.children||[]),z.return=m,m=z;break l}else{e(m,r);break}else t(m,r);r=r.sibling}z=Di(y,m.mode,z),z.return=m,m=z}return i(m);case Q:return y=Ze(y),pl(m,r,y,z)}if(Ll(y))return G(m,r,y,z);if(hl(y)){if(Z=hl(y),typeof Z!="function")throw Error(s(150));return y=Z.call(y),L(m,r,y,z)}if(typeof y.then=="function")return pl(m,r,nu(y),z);if(y.$$typeof===rl)return pl(m,r,lu(m,y),z);uu(m,y)}return typeof y=="string"&&y!==""||typeof y=="number"||typeof y=="bigint"?(y=""+y,r!==null&&r.tag===6?(e(m,r.sibling),z=n(r,y),z.return=m,m=z):(e(m,r),z=Mi(y,m.mode,z),z.return=m,m=z),i(m)):e(m,r)}return function(m,r,y,z){try{Pa=0;var Z=pl(m,r,y,z);return va=null,Z}catch(X){if(X===ya||X===eu)throw X;var fl=mt(29,X,null,m.mode);return fl.lanes=z,fl.return=m,fl}}}var Ve=Gs(!0),Xs=Gs(!1),de=!1;function Li(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Vi(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function re(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function he(l,t,e){var a=l.updateQueue;if(a===null)return null;if(a=a.shared,(ol&2)!==0){var n=a.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),a.pending=t,t=Wn(l),zs(l,null,e),t}return $n(l,a,t,e),Wn(l)}function tn(l,t,e){if(t=t.updateQueue,t!==null&&(t=t.shared,(e&4194048)!==0)){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Df(l,e)}}function Ki(l,t){var e=l.updateQueue,a=l.alternate;if(a!==null&&(a=a.updateQueue,e===a)){var n=null,u=null;if(e=e.firstBaseUpdate,e!==null){do{var i={lane:e.lane,tag:e.tag,payload:e.payload,callback:null,next:null};u===null?n=u=i:u=u.next=i,e=e.next}while(e!==null);u===null?n=u=t:u=u.next=t}else n=u=t;e={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:u,shared:a.shared,callbacks:a.callbacks},l.updateQueue=e;return}l=e.lastBaseUpdate,l===null?e.firstBaseUpdate=t:l.next=t,e.lastBaseUpdate=t}var Ji=!1;function en(){if(Ji){var l=ma;if(l!==null)throw l}}function an(l,t,e,a){Ji=!1;var n=l.updateQueue;de=!1;var u=n.firstBaseUpdate,i=n.lastBaseUpdate,f=n.shared.pending;if(f!==null){n.shared.pending=null;var o=f,v=o.next;o.next=null,i===null?u=v:i.next=v,i=o;var j=l.alternate;j!==null&&(j=j.updateQueue,f=j.lastBaseUpdate,f!==i&&(f===null?j.firstBaseUpdate=v:f.next=v,j.lastBaseUpdate=o))}if(u!==null){var T=n.baseState;i=0,j=v=o=null,f=u;do{var b=f.lane&-536870913,S=b!==f.lane;if(S?(el&b)===b:(a&b)===b){b!==0&&b===ha&&(Ji=!0),j!==null&&(j=j.next={lane:0,tag:f.tag,payload:f.payload,callback:null,next:null});l:{var G=l,L=f;b=t;var pl=e;switch(L.tag){case 1:if(G=L.payload,typeof G=="function"){T=G.call(pl,T,b);break l}T=G;break l;case 3:G.flags=G.flags&-65537|128;case 0:if(G=L.payload,b=typeof G=="function"?G.call(pl,T,b):G,b==null)break l;T=A({},T,b);break l;case 2:de=!0}}b=f.callback,b!==null&&(l.flags|=64,S&&(l.flags|=8192),S=n.callbacks,S===null?n.callbacks=[b]:S.push(b))}else S={lane:b,tag:f.tag,payload:f.payload,callback:f.callback,next:null},j===null?(v=j=S,o=T):j=j.next=S,i|=b;if(f=f.next,f===null){if(f=n.shared.pending,f===null)break;S=f,f=S.next,S.next=null,n.lastBaseUpdate=S,n.shared.pending=null}}while(!0);j===null&&(o=T),n.baseState=o,n.firstBaseUpdate=v,n.lastBaseUpdate=j,u===null&&(n.shared.lanes=0),be|=i,l.lanes=i,l.memoizedState=T}}function Qs(l,t){if(typeof l!="function")throw Error(s(191,l));l.call(t)}function Zs(l,t){var e=l.callbacks;if(e!==null)for(l.callbacks=null,l=0;lu?u:8;var i=p.T,f={};p.T=f,dc(l,!1,t,e);try{var o=n(),v=p.S;if(v!==null&&v(f,o),o!==null&&typeof o=="object"&&typeof o.then=="function"){var j=$h(o,a);cn(l,t,j,St(l))}else cn(l,t,a,St(l))}catch(T){cn(l,t,{then:function(){},status:"rejected",reason:T},St())}finally{C.p=u,i!==null&&f.types!==null&&(i.types=f.types),p.T=i}}function tm(){}function sc(l,t,e,a){if(l.tag!==5)throw Error(s(476));var n=jo(l).queue;po(l,n,t,M,e===null?tm:function(){return xo(l),e(a)})}function jo(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:M,baseState:M,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wt,lastRenderedState:M},next:null};var e={};return t.next={memoizedState:e,baseState:e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:wt,lastRenderedState:e},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function xo(l){var t=jo(l);t.next===null&&(t=l.alternate.memoizedState),cn(l,t.next.queue,{},St())}function oc(){return kl(Tn)}function zo(){return Hl().memoizedState}function To(){return Hl().memoizedState}function em(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var e=St();l=re(e);var a=he(t,l,e);a!==null&&(ft(a,t,e),tn(a,t,e)),t={cache:Gi()},l.payload=t;return}t=t.return}}function am(l,t,e){var a=St();e={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},yu(l)?Ao(t,e):(e=_i(l,t,e,a),e!==null&&(ft(e,l,a),No(e,t,a)))}function Eo(l,t,e){var a=St();cn(l,t,e,a)}function cn(l,t,e,a){var n={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null};if(yu(l))Ao(t,n);else{var u=l.alternate;if(l.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var i=t.lastRenderedState,f=u(i,e);if(n.hasEagerState=!0,n.eagerState=f,ht(f,i))return $n(l,t,n,0),jl===null&&kn(),!1}catch{}if(e=_i(l,t,n,a),e!==null)return ft(e,l,a),No(e,t,a),!0}return!1}function dc(l,t,e,a){if(a={lane:2,revertLane:Lc(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},yu(l)){if(t)throw Error(s(479))}else t=_i(l,e,a,2),t!==null&&ft(t,l,2)}function yu(l){var t=l.alternate;return l===F||t!==null&&t===F}function Ao(l,t){ba=fu=!0;var e=l.pending;e===null?t.next=t:(t.next=e.next,e.next=t),l.pending=t}function No(l,t,e){if((e&4194048)!==0){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Df(l,e)}}var fn={readContext:kl,use:du,useCallback:Ol,useContext:Ol,useEffect:Ol,useImperativeHandle:Ol,useLayoutEffect:Ol,useInsertionEffect:Ol,useMemo:Ol,useReducer:Ol,useRef:Ol,useState:Ol,useDebugValue:Ol,useDeferredValue:Ol,useTransition:Ol,useSyncExternalStore:Ol,useId:Ol,useHostTransitionStatus:Ol,useFormState:Ol,useActionState:Ol,useOptimistic:Ol,useMemoCache:Ol,useCacheRefresh:Ol};fn.useEffectEvent=Ol;var _o={readContext:kl,use:du,useCallback:function(l,t){return tt().memoizedState=[l,t===void 0?null:t],l},useContext:kl,useEffect:oo,useImperativeHandle:function(l,t,e){e=e!=null?e.concat([l]):null,hu(4194308,4,yo.bind(null,t,l),e)},useLayoutEffect:function(l,t){return hu(4194308,4,l,t)},useInsertionEffect:function(l,t){hu(4,2,l,t)},useMemo:function(l,t){var e=tt();t=t===void 0?null:t;var a=l();if(Ke){ne(!0);try{l()}finally{ne(!1)}}return e.memoizedState=[a,t],a},useReducer:function(l,t,e){var a=tt();if(e!==void 0){var n=e(t);if(Ke){ne(!0);try{e(t)}finally{ne(!1)}}}else n=t;return a.memoizedState=a.baseState=n,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:n},a.queue=l,l=l.dispatch=am.bind(null,F,l),[a.memoizedState,l]},useRef:function(l){var t=tt();return l={current:l},t.memoizedState=l},useState:function(l){l=nc(l);var t=l.queue,e=Eo.bind(null,F,t);return t.dispatch=e,[l.memoizedState,e]},useDebugValue:cc,useDeferredValue:function(l,t){var e=tt();return fc(e,l,t)},useTransition:function(){var l=nc(!1);return l=po.bind(null,F,l.queue,!0,!1),tt().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,e){var a=F,n=tt();if(ul){if(e===void 0)throw Error(s(407));e=e()}else{if(e=t(),jl===null)throw Error(s(349));(el&127)!==0||ks(a,t,e)}n.memoizedState=e;var u={value:e,getSnapshot:t};return n.queue=u,oo(Ws.bind(null,a,u,l),[l]),a.flags|=2048,pa(9,{destroy:void 0},$s.bind(null,a,u,e,t),null),e},useId:function(){var l=tt(),t=jl.identifierPrefix;if(ul){var e=qt,a=Rt;e=(a&~(1<<32-rt(a)-1)).toString(32)+e,t="_"+t+"R_"+e,e=su++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?i.createElement("select",{is:a.is}):i.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?i.createElement(n,{is:a.is}):i.createElement(n)}}u[Jl]=t,u[et]=a;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)u.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=u;l:switch(Wl(u,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break l;case"img":a=!0;break l;default:a=!1}a&&$t(t)}}return Tl(t),Ec(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,e),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==a&&$t(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(s(166));if(l=P.current,da(t)){if(l=t.stateNode,e=t.memoizedProps,a=null,n=wl,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}l[Jl]=t,l=!!(l.nodeValue===e||a!==null&&a.suppressHydrationWarning===!0||wd(l.nodeValue,e)),l||se(t,!0)}else l=Ru(l).createTextNode(a),l[Jl]=t,t.stateNode=l}return Tl(t),null;case 31:if(e=t.memoizedState,l===null||l.memoizedState!==null){if(a=da(t),e!==null){if(l===null){if(!a)throw Error(s(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(s(557));l[Jl]=t}else Ye(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Tl(t),l=!1}else e=Ri(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),l=!0;if(!l)return t.flags&256?(vt(t),t):(vt(t),null);if((t.flags&128)!==0)throw Error(s(558))}return Tl(t),null;case 13:if(a=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(n=da(t),a!==null&&a.dehydrated!==null){if(l===null){if(!n)throw Error(s(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(s(317));n[Jl]=t}else Ye(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Tl(t),n=!1}else n=Ri(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(vt(t),t):(vt(t),null)}return vt(t),(t.flags&128)!==0?(t.lanes=e,t):(e=a!==null,l=l!==null&&l.memoizedState!==null,e&&(a=t.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)),e!==l&&e&&(t.child.flags|=8192),pu(t,t.updateQueue),Tl(t),null);case 4:return Ul(),l===null&&wc(t.stateNode.containerInfo),Tl(t),null;case 10:return Kt(t.type),Tl(t),null;case 19:if(x(Cl),a=t.memoizedState,a===null)return Tl(t),null;if(n=(t.flags&128)!==0,u=a.rendering,u===null)if(n)on(a,!1);else{if(Ml!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(u=cu(l),u!==null){for(t.flags|=128,on(a,!1),l=u.updateQueue,t.updateQueue=l,pu(t,l),t.subtreeFlags=0,l=e,e=t.child;e!==null;)Ts(e,l),e=e.sibling;return R(Cl,Cl.current&1|2),ul&&Lt(t,a.treeForkCount),t.child}l=l.sibling}a.tail!==null&&ot()>Eu&&(t.flags|=128,n=!0,on(a,!1),t.lanes=4194304)}else{if(!n)if(l=cu(u),l!==null){if(t.flags|=128,n=!0,l=l.updateQueue,t.updateQueue=l,pu(t,l),on(a,!0),a.tail===null&&a.tailMode==="hidden"&&!u.alternate&&!ul)return Tl(t),null}else 2*ot()-a.renderingStartTime>Eu&&e!==536870912&&(t.flags|=128,n=!0,on(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(l=a.last,l!==null?l.sibling=u:t.child=u,a.last=u)}return a.tail!==null?(l=a.tail,a.rendering=l,a.tail=l.sibling,a.renderingStartTime=ot(),l.sibling=null,e=Cl.current,R(Cl,n?e&1|2:e&1),ul&&Lt(t,a.treeForkCount),l):(Tl(t),null);case 22:case 23:return vt(t),ki(),a=t.memoizedState!==null,l!==null?l.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(e&536870912)!==0&&(t.flags&128)===0&&(Tl(t),t.subtreeFlags&6&&(t.flags|=8192)):Tl(t),e=t.updateQueue,e!==null&&pu(t,e.retryQueue),e=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(e=l.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==e&&(t.flags|=2048),l!==null&&x(Qe),null;case 24:return e=null,l!==null&&(e=l.memoizedState.cache),t.memoizedState.cache!==e&&(t.flags|=2048),Kt(Rl),Tl(t),null;case 25:return null;case 30:return null}throw Error(s(156,t.tag))}function fm(l,t){switch(Ci(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Kt(Rl),Ul(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return Dn(t),null;case 31:if(t.memoizedState!==null){if(vt(t),t.alternate===null)throw Error(s(340));Ye()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(vt(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(s(340));Ye()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return x(Cl),null;case 4:return Ul(),null;case 10:return Kt(t.type),null;case 22:case 23:return vt(t),ki(),l!==null&&x(Qe),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Kt(Rl),null;case 25:return null;default:return null}}function Io(l,t){switch(Ci(t),t.tag){case 3:Kt(Rl),Ul();break;case 26:case 27:case 5:Dn(t);break;case 4:Ul();break;case 31:t.memoizedState!==null&&vt(t);break;case 13:vt(t);break;case 19:x(Cl);break;case 10:Kt(t.type);break;case 22:case 23:vt(t),ki(),l!==null&&x(Qe);break;case 24:Kt(Rl)}}function dn(l,t){try{var e=t.updateQueue,a=e!==null?e.lastEffect:null;if(a!==null){var n=a.next;e=n;do{if((e.tag&l)===l){a=void 0;var u=e.create,i=e.inst;a=u(),i.destroy=a}e=e.next}while(e!==n)}}catch(f){gl(t,t.return,f)}}function ve(l,t,e){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var u=n.next;a=u;do{if((a.tag&l)===l){var i=a.inst,f=i.destroy;if(f!==void 0){i.destroy=void 0,n=t;var o=e,v=f;try{v()}catch(j){gl(n,o,j)}}}a=a.next}while(a!==u)}}catch(j){gl(t,t.return,j)}}function Po(l){var t=l.updateQueue;if(t!==null){var e=l.stateNode;try{Zs(t,e)}catch(a){gl(l,l.return,a)}}}function ld(l,t,e){e.props=Je(l.type,l.memoizedProps),e.state=l.memoizedState;try{e.componentWillUnmount()}catch(a){gl(l,t,a)}}function rn(l,t){try{var e=l.ref;if(e!==null){switch(l.tag){case 26:case 27:case 5:var a=l.stateNode;break;case 30:a=l.stateNode;break;default:a=l.stateNode}typeof e=="function"?l.refCleanup=e(a):e.current=a}}catch(n){gl(l,t,n)}}function Bt(l,t){var e=l.ref,a=l.refCleanup;if(e!==null)if(typeof a=="function")try{a()}catch(n){gl(l,t,n)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof e=="function")try{e(null)}catch(n){gl(l,t,n)}else e.current=null}function td(l){var t=l.type,e=l.memoizedProps,a=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":e.autoFocus&&a.focus();break l;case"img":e.src?a.src=e.src:e.srcSet&&(a.srcset=e.srcSet)}}catch(n){gl(l,l.return,n)}}function Ac(l,t,e){try{var a=l.stateNode;Mm(a,l.type,e,t),a[et]=t}catch(n){gl(l,l.return,n)}}function ed(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&ze(l.type)||l.tag===4}function Nc(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||ed(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&ze(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function _c(l,t,e){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e).insertBefore(l,t):(t=e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,t.appendChild(l),e=e._reactRootContainer,e!=null||t.onclick!==null||(t.onclick=Xt));else if(a!==4&&(a===27&&ze(l.type)&&(e=l.stateNode,t=null),l=l.child,l!==null))for(_c(l,t,e),l=l.sibling;l!==null;)_c(l,t,e),l=l.sibling}function ju(l,t,e){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?e.insertBefore(l,t):e.appendChild(l);else if(a!==4&&(a===27&&ze(l.type)&&(e=l.stateNode),l=l.child,l!==null))for(ju(l,t,e),l=l.sibling;l!==null;)ju(l,t,e),l=l.sibling}function ad(l){var t=l.stateNode,e=l.memoizedProps;try{for(var a=l.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);Wl(t,a,e),t[Jl]=l,t[et]=e}catch(u){gl(l,l.return,u)}}var Wt=!1,Yl=!1,Oc=!1,nd=typeof WeakSet=="function"?WeakSet:Set,Kl=null;function sm(l,t){if(l=l.containerInfo,Wc=Zu,l=ys(l),xi(l)){if("selectionStart"in l)var e={start:l.selectionStart,end:l.selectionEnd};else l:{e=(e=l.ownerDocument)&&e.defaultView||window;var a=e.getSelection&&e.getSelection();if(a&&a.rangeCount!==0){e=a.anchorNode;var n=a.anchorOffset,u=a.focusNode;a=a.focusOffset;try{e.nodeType,u.nodeType}catch{e=null;break l}var i=0,f=-1,o=-1,v=0,j=0,T=l,b=null;t:for(;;){for(var S;T!==e||n!==0&&T.nodeType!==3||(f=i+n),T!==u||a!==0&&T.nodeType!==3||(o=i+a),T.nodeType===3&&(i+=T.nodeValue.length),(S=T.firstChild)!==null;)b=T,T=S;for(;;){if(T===l)break t;if(b===e&&++v===n&&(f=i),b===u&&++j===a&&(o=i),(S=T.nextSibling)!==null)break;T=b,b=T.parentNode}T=S}e=f===-1||o===-1?null:{start:f,end:o}}else e=null}e=e||{start:0,end:0}}else e=null;for(Fc={focusedElem:l,selectionRange:e},Zu=!1,Kl=t;Kl!==null;)if(t=Kl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,Kl=l;else for(;Kl!==null;){switch(t=Kl,u=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(e=0;e title"))),Wl(u,a,e),u[Jl]=l,Vl(u),a=u;break l;case"link":var i=or("link","href",n).get(a+(e.href||""));if(i){for(var f=0;fpl&&(i=pl,pl=L,L=i);var m=hs(f,L),r=hs(f,pl);if(m&&r&&(S.rangeCount!==1||S.anchorNode!==m.node||S.anchorOffset!==m.offset||S.focusNode!==r.node||S.focusOffset!==r.offset)){var y=T.createRange();y.setStart(m.node,m.offset),S.removeAllRanges(),L>pl?(S.addRange(y),S.extend(r.node,r.offset)):(y.setEnd(r.node,r.offset),S.addRange(y))}}}}for(T=[],S=f;S=S.parentNode;)S.nodeType===1&&T.push({element:S,left:S.scrollLeft,top:S.scrollTop});for(typeof f.focus=="function"&&f.focus(),f=0;fe?32:e,p.T=null,e=qc,qc=null;var u=pe,i=te;if(Ql=0,Ea=pe=null,te=0,(ol&6)!==0)throw Error(s(331));var f=ol;if(ol|=4,yd(u.current),rd(u,u.current,i,e),ol=f,bn(0,!1),dt&&typeof dt.onPostCommitFiberRoot=="function")try{dt.onPostCommitFiberRoot(Ra,u)}catch{}return!0}finally{C.p=n,p.T=a,Cd(l,t)}}function Rd(l,t,e){t=zt(e,t),t=yc(l.stateNode,t,2),l=he(l,t,2),l!==null&&(Ba(l,2),Yt(l))}function gl(l,t,e){if(l.tag===3)Rd(l,l,e);else for(;t!==null;){if(t.tag===3){Rd(t,l,e);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Se===null||!Se.has(a))){l=zt(e,l),e=qo(2),a=he(t,e,2),a!==null&&(Bo(e,a,t,l),Ba(a,2),Yt(a));break}}t=t.return}}function Xc(l,t,e){var a=l.pingCache;if(a===null){a=l.pingCache=new rm;var n=new Set;a.set(t,n)}else n=a.get(t),n===void 0&&(n=new Set,a.set(t,n));n.has(e)||(Uc=!0,n.add(e),l=gm.bind(null,l,t,e),t.then(l,l))}function gm(l,t,e){var a=l.pingCache;a!==null&&a.delete(t),l.pingedLanes|=l.suspendedLanes&e,l.warmLanes&=~e,jl===l&&(el&e)===e&&(Ml===4||Ml===3&&(el&62914560)===el&&300>ot()-Tu?(ol&2)===0&&Aa(l,0):Cc|=e,Ta===el&&(Ta=0)),Yt(l)}function qd(l,t){t===0&&(t=Of()),l=qe(l,t),l!==null&&(Ba(l,t),Yt(l))}function bm(l){var t=l.memoizedState,e=0;t!==null&&(e=t.retryLane),qd(l,e)}function Sm(l,t){var e=0;switch(l.tag){case 31:case 13:var a=l.stateNode,n=l.memoizedState;n!==null&&(e=n.retryLane);break;case 19:a=l.stateNode;break;case 22:a=l.stateNode._retryCache;break;default:throw Error(s(314))}a!==null&&a.delete(t),qd(l,e)}function pm(l,t){return Pu(l,t)}var Du=null,_a=null,Qc=!1,Uu=!1,Zc=!1,xe=0;function Yt(l){l!==_a&&l.next===null&&(_a===null?Du=_a=l:_a=_a.next=l),Uu=!0,Qc||(Qc=!0,xm())}function bn(l,t){if(!Zc&&Uu){Zc=!0;do for(var e=!1,a=Du;a!==null;){if(l!==0){var n=a.pendingLanes;if(n===0)var u=0;else{var i=a.suspendedLanes,f=a.pingedLanes;u=(1<<31-rt(42|l)+1)-1,u&=n&~(i&~f),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(e=!0,Xd(a,u))}else u=el,u=qn(a,a===jl?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||qa(a,u)||(e=!0,Xd(a,u));a=a.next}while(e);Zc=!1}}function jm(){Bd()}function Bd(){Uu=Qc=!1;var l=0;xe!==0&&Um()&&(l=xe);for(var t=ot(),e=null,a=Du;a!==null;){var n=a.next,u=Yd(a,t);u===0?(a.next=null,e===null?Du=n:e.next=n,n===null&&(_a=e)):(e=a,(l!==0||(u&3)!==0)&&(Uu=!0)),a=n}Ql!==0&&Ql!==5||bn(l),xe!==0&&(xe=0)}function Yd(l,t){for(var e=l.suspendedLanes,a=l.pingedLanes,n=l.expirationTimes,u=l.pendingLanes&-62914561;0f)break;var j=o.transferSize,T=o.initiatorType;j&&kd(T)&&(o=o.responseEnd,i+=j*(o"u"?null:document;function ir(l,t,e){var a=Oa;if(a&&typeof t=="string"&&t){var n=jt(t);n='link[rel="'+l+'"][href="'+n+'"]',typeof e=="string"&&(n+='[crossorigin="'+e+'"]'),ur.has(n)||(ur.add(n),l={rel:l,crossOrigin:e,href:t},a.querySelector(n)===null&&(t=a.createElement("link"),Wl(t,"link",l),Vl(t),a.head.appendChild(t)))}}function Qm(l){ee.D(l),ir("dns-prefetch",l,null)}function Zm(l,t){ee.C(l,t),ir("preconnect",l,t)}function Lm(l,t,e){ee.L(l,t,e);var a=Oa;if(a&&l&&t){var n='link[rel="preload"][as="'+jt(t)+'"]';t==="image"&&e&&e.imageSrcSet?(n+='[imagesrcset="'+jt(e.imageSrcSet)+'"]',typeof e.imageSizes=="string"&&(n+='[imagesizes="'+jt(e.imageSizes)+'"]')):n+='[href="'+jt(l)+'"]';var u=n;switch(t){case"style":u=Ma(l);break;case"script":u=Da(l)}Ot.has(u)||(l=A({rel:"preload",href:t==="image"&&e&&e.imageSrcSet?void 0:l,as:t},e),Ot.set(u,l),a.querySelector(n)!==null||t==="style"&&a.querySelector(xn(u))||t==="script"&&a.querySelector(zn(u))||(t=a.createElement("link"),Wl(t,"link",l),Vl(t),a.head.appendChild(t)))}}function Vm(l,t){ee.m(l,t);var e=Oa;if(e&&l){var a=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+jt(a)+'"][href="'+jt(l)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Da(l)}if(!Ot.has(u)&&(l=A({rel:"modulepreload",href:l},t),Ot.set(u,l),e.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(e.querySelector(zn(u)))return}a=e.createElement("link"),Wl(a,"link",l),Vl(a),e.head.appendChild(a)}}}function Km(l,t,e){ee.S(l,t,e);var a=Oa;if(a&&l){var n=Ie(a).hoistableStyles,u=Ma(l);t=t||"default";var i=n.get(u);if(!i){var f={loading:0,preload:null};if(i=a.querySelector(xn(u)))f.loading=5;else{l=A({rel:"stylesheet",href:l,"data-precedence":t},e),(e=Ot.get(u))&&nf(l,e);var o=i=a.createElement("link");Vl(o),Wl(o,"link",l),o._p=new Promise(function(v,j){o.onload=v,o.onerror=j}),o.addEventListener("load",function(){f.loading|=1}),o.addEventListener("error",function(){f.loading|=2}),f.loading|=4,Bu(i,t,a)}i={type:"stylesheet",instance:i,count:1,state:f},n.set(u,i)}}}function Jm(l,t){ee.X(l,t);var e=Oa;if(e&&l){var a=Ie(e).hoistableScripts,n=Da(l),u=a.get(n);u||(u=e.querySelector(zn(n)),u||(l=A({src:l,async:!0},t),(t=Ot.get(n))&&uf(l,t),u=e.createElement("script"),Vl(u),Wl(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function wm(l,t){ee.M(l,t);var e=Oa;if(e&&l){var a=Ie(e).hoistableScripts,n=Da(l),u=a.get(n);u||(u=e.querySelector(zn(n)),u||(l=A({src:l,async:!0,type:"module"},t),(t=Ot.get(n))&&uf(l,t),u=e.createElement("script"),Vl(u),Wl(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function cr(l,t,e,a){var n=(n=P.current)?qu(n):null;if(!n)throw Error(s(446));switch(l){case"meta":case"title":return null;case"style":return typeof e.precedence=="string"&&typeof e.href=="string"?(t=Ma(e.href),e=Ie(n).hoistableStyles,a=e.get(t),a||(a={type:"style",instance:null,count:0,state:null},e.set(t,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(e.rel==="stylesheet"&&typeof e.href=="string"&&typeof e.precedence=="string"){l=Ma(e.href);var u=Ie(n).hoistableStyles,i=u.get(l);if(i||(n=n.ownerDocument||n,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(l,i),(u=n.querySelector(xn(l)))&&!u._p&&(i.instance=u,i.state.loading=5),Ot.has(l)||(e={rel:"preload",as:"style",href:e.href,crossOrigin:e.crossOrigin,integrity:e.integrity,media:e.media,hrefLang:e.hrefLang,referrerPolicy:e.referrerPolicy},Ot.set(l,e),u||km(n,l,e,i.state))),t&&a===null)throw Error(s(528,""));return i}if(t&&a!==null)throw Error(s(529,""));return null;case"script":return t=e.async,e=e.src,typeof e=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Da(e),e=Ie(n).hoistableScripts,a=e.get(t),a||(a={type:"script",instance:null,count:0,state:null},e.set(t,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(s(444,l))}}function Ma(l){return'href="'+jt(l)+'"'}function xn(l){return'link[rel="stylesheet"]['+l+"]"}function fr(l){return A({},l,{"data-precedence":l.precedence,precedence:null})}function km(l,t,e,a){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?a.loading=1:(t=l.createElement("link"),a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2}),Wl(t,"link",e),Vl(t),l.head.appendChild(t))}function Da(l){return'[src="'+jt(l)+'"]'}function zn(l){return"script[async]"+l}function sr(l,t,e){if(t.count++,t.instance===null)switch(t.type){case"style":var a=l.querySelector('style[data-href~="'+jt(e.href)+'"]');if(a)return t.instance=a,Vl(a),a;var n=A({},e,{"data-href":e.href,"data-precedence":e.precedence,href:null,precedence:null});return a=(l.ownerDocument||l).createElement("style"),Vl(a),Wl(a,"style",n),Bu(a,e.precedence,l),t.instance=a;case"stylesheet":n=Ma(e.href);var u=l.querySelector(xn(n));if(u)return t.state.loading|=4,t.instance=u,Vl(u),u;a=fr(e),(n=Ot.get(n))&&nf(a,n),u=(l.ownerDocument||l).createElement("link"),Vl(u);var i=u;return i._p=new Promise(function(f,o){i.onload=f,i.onerror=o}),Wl(u,"link",a),t.state.loading|=4,Bu(u,e.precedence,l),t.instance=u;case"script":return u=Da(e.src),(n=l.querySelector(zn(u)))?(t.instance=n,Vl(n),n):(a=e,(n=Ot.get(u))&&(a=A({},e),uf(a,n)),l=l.ownerDocument||l,n=l.createElement("script"),Vl(n),Wl(n,"link",a),l.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(s(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,Bu(a,e.precedence,l));return t.instance}function Bu(l,t,e){for(var a=e.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,i=0;i title"):null)}function $m(l,t,e){if(e===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;return t.rel==="stylesheet"?(l=t.disabled,typeof t.precedence=="string"&&l==null):!0;case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function rr(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function Wm(l,t,e,a){if(e.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(e.state.loading&4)===0){if(e.instance===null){var n=Ma(a.href),u=t.querySelector(xn(n));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Gu.bind(l),t.then(l,l)),e.state.loading|=4,e.instance=u,Vl(u);return}u=t.ownerDocument||t,a=fr(a),(n=Ot.get(n))&&nf(a,n),u=u.createElement("link"),Vl(u);var i=u;i._p=new Promise(function(f,o){i.onload=f,i.onerror=o}),Wl(u,"link",a),e.instance=u}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(e,t),(t=e.state.preload)&&(e.state.loading&3)===0&&(l.count++,e=Gu.bind(l),t.addEventListener("load",e),t.addEventListener("error",e))}}var cf=0;function Fm(l,t){return l.stylesheets&&l.count===0&&Qu(l,l.stylesheets),0cf?50:800)+t);return l.unsuspend=e,function(){l.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function Gu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Qu(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var Xu=null;function Qu(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,Xu=new Map,t.forEach(Im,l),Xu=null,Gu.call(l))}function Im(l,t){if(!(t.state.loading&4)){var e=Xu.get(l);if(e)var a=e.get(null);else{e=new Map,Xu.set(l,e);for(var n=l.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(h)}catch(N){console.error(N)}}return h(),vf.exports=my(),vf.exports}var vy=yy();function gy(){const h=new URLSearchParams(location.search).get("token");if(h){sessionStorage.setItem("dm.token",h);const N=location.pathname+location.hash;return history.replaceState(null,"",N),h}return sessionStorage.getItem("dm.token")??""}const Ca=gy();class pf extends Error{status;body;constructor(N,O,s={}){super(O),this.status=N,this.body=s}get needsTrust(){return this.body.needsTrust===!0}}async function Mt(h,N){const O={...N?.headers};Ca&&(O["X-Auth-Token"]=Ca),N?.body&&(O["Content-Type"]="application/json");const s=await fetch(h,{...N,headers:O});if(s.status===204)return;const _=await s.text();let H={};if(_)try{H=JSON.parse(_)}catch{if(!s.ok)throw new pf(s.status,_.slice(0,400))}if(!s.ok){const E=typeof H.error=="string"?H.error:`request failed (${s.status})`;throw new pf(s.status,E,H)}return H}const Oe=(h,N)=>Mt(h,{method:"POST",body:N===void 0?void 0:JSON.stringify(N)}),Gl={health:()=>Mt("/api/health"),source:()=>Mt("/api/source"),volumeSizes:()=>Mt("/api/source/sizes"),connections:()=>Mt("/api/connections"),saveConnection:h=>Oe("/api/connections",h),deleteConnection:h=>Mt(`/api/connections/${h}`,{method:"DELETE"}),probe:h=>Oe(`/api/connections/${h}/probe`),trust:(h,N)=>Oe(`/api/connections/${h}/trust`,{fingerprint:N}),testConnection:h=>Oe(`/api/connections/${h}/test`),targetInventory:h=>Mt(`/api/connections/${h}/inventory`),preview:h=>Oe("/api/plan/preview",h),migrateSSH:(h,N)=>Oe("/api/migrate/ssh",{connectionId:h,plan:N}),buildPackage:(h,N)=>Oe("/api/migrate/package",{plan:h,format:N}),jobs:()=>Mt("/api/jobs"),job:h=>Mt(`/api/jobs/${h}`),cancelJob:h=>Oe(`/api/jobs/${h}/cancel`),deleteJob:h=>Mt(`/api/jobs/${h}`,{method:"DELETE"}),packages:()=>Mt("/api/packages"),deletePackage:h=>Mt(`/api/packages/${encodeURIComponent(h)}`,{method:"DELETE"}),downloadUrl:h=>`/api/packages/${encodeURIComponent(h)}/download`+(Ca?`?token=${encodeURIComponent(Ca)}`:""),jobEvents:h=>new EventSource(`/api/jobs/${h}/events`+(Ca?`?token=${encodeURIComponent(Ca)}`:""))};function ae(h){if(h==null||h<0)return"–";if(h===0)return"0 B";const N=["B","KiB","MiB","GiB","TiB","PiB"];let O=h,s=0;for(;O>=1024&&sN(H.target.checked)}),c.jsx("span",{children:O})]})}function Fl({label:h,children:N}){return c.jsxs("label",{className:"field",children:[c.jsx("span",{children:h}),N]})}function zf({title:h,onClose:N,children:O,footer:s,wide:_}){return K.useEffect(()=>{const H=E=>{E.key==="Escape"&&N()};return window.addEventListener("keydown",H),()=>window.removeEventListener("keydown",H)},[N]),c.jsx("div",{className:"modal-backdrop",onMouseDown:H=>H.target===H.currentTarget&&N(),children:c.jsxs("div",{className:"modal",style:_?{width:"min(1000px, 100%)"}:void 0,children:[c.jsxs("header",{children:[h,c.jsx("span",{className:"spacer"}),c.jsx("button",{className:"btn ghost tiny",onClick:N,children:"close"})]}),c.jsx("div",{className:"content",children:O}),s&&c.jsx("footer",{children:s})]})})}function Dt({kind:h,children:N}){return c.jsx("div",{className:`notice ${h==="info"?"":h}`,children:N})}function jf({done:h,total:N,state:O}){const s=N>0?Math.min(100,h/N*100):O==="succeeded"?100:0,_=O==="succeeded"?"done":O==="failed"?"failed":"";return c.jsx("div",{className:`progress ${_}`,children:c.jsx("div",{style:{width:`${s}%`}})})}function Br(h,N){return h.kind==="tmpfs"?0:h.sizeBytes>=0?h.sizeBytes:h.name&&N[h.name]!==void 0?N[h.name]:-1}function by({source:h,sel:N,setSel:O,targetInv:s,loading:_,sizes:H}){const[E,k]=K.useState(""),[D,g]=K.useState(new Set),[J,A]=K.useState(!1),B=h?.inventory.containers??[],dl=K.useMemo(()=>new Set((s?.containers??[]).map(U=>U.name)),[s]),yl=K.useMemo(()=>{const U=E.trim().toLowerCase();return B.filter(Q=>J&&Q.state!=="running"?!1:U?Q.name.toLowerCase().includes(U)||Q.image.toLowerCase().includes(U)||(Q.composeProject??"").toLowerCase().includes(U)||(Q.mounts??[]).some(q=>q.destination.toLowerCase().includes(U)||(q.name??"").toLowerCase().includes(U)):!0)},[B,E,J]),il=K.useMemo(()=>{const U=new Map;for(const Q of yl){const q=Q.composeProject||"",$=U.get(q);$?$.push(Q):U.set(q,[Q])}return[...U.entries()].sort((Q,q)=>Q[0]===""?1:q[0]===""?-1:Q[0].localeCompare(q[0]))},[yl]);function Xl(U,Q){O(q=>({...q,[U]:{...q[U],...Q}}))}function El(U,Q){O(q=>{const $={...q};for(const cl of U)$[cl]&&($[cl]={...$[cl],include:Q});return $})}function Al(U){O(Q=>{const q={...Q};for(const $ of B){const cl=q[$.id];cl?.include&&(q[$.id]=U(cl,$))}return q})}function rl(U,Q){Al((q,$)=>{const cl={...q.mounts};for(const hl of $.mounts??[])hl.kind!=="tmpfs"&&Q.includes(hl.kind)&&(cl[hl.destination]={...cl[hl.destination],action:U});return{...q,mounts:cl}})}const xl=yl.map(U=>U.id),Dl=yl.filter(U=>N[U.id]?.include).length,_l=Object.values(N).some(U=>U.include);return c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"toolbar",children:[c.jsx("input",{className:"search",type:"text",placeholder:"filter by name, image, mount…",value:E,onChange:U=>k(U.target.value)}),c.jsx("button",{className:"btn tiny",onClick:()=>El(xl,!0),children:"select all"}),c.jsx("button",{className:"btn tiny",onClick:()=>El(xl,!1),children:"clear"}),c.jsx("button",{className:"btn tiny",onClick:()=>El(yl.filter(U=>U.state==="running").map(U=>U.id),!0),children:"select running"}),c.jsx(st,{checked:J,onChange:A,label:c.jsx("span",{className:"small muted",children:"running only"})}),c.jsx("span",{className:"spacer"}),c.jsxs("span",{className:"small faint nowrap",children:["apply to ",Dl?`${Dl} selected`:"selection",":"]}),c.jsx("button",{className:"btn tiny",disabled:!_l,onClick:()=>rl("copy",["volume","anonymous","bind"]),children:"copy all data"}),c.jsx("button",{className:"btn tiny",disabled:!_l,onClick:()=>rl("skip",["bind"]),children:"skip binds"}),c.jsx("button",{className:"btn tiny",disabled:!_l,onClick:()=>rl("structure",["volume","anonymous","bind"]),children:"structure only"}),c.jsxs("select",{className:"btn tiny",style:{width:"auto"},disabled:!_l,value:"",onChange:U=>{const Q=U.target.value;if(Q){if(Q==="start"&&Al(q=>({...q,startAfter:!0})),Q==="nostart"&&Al(q=>({...q,startAfter:!1})),Q==="live"&&Al(q=>({...q,stopSourceDuringCopy:!1})),Q==="quiesce"&&Al(q=>({...q,stopSourceDuringCopy:!0})),Q==="keepsource"&&Al(q=>({...q,stopSourceAfter:!1})),Q==="stopsource"&&Al(q=>({...q,stopSourceAfter:!0})),Q.startsWith("img:")){const q=Q.slice(4);Al($=>({...$,migrateImage:q!=="skip",imageMode:q}))}U.target.value=""}},children:[c.jsx("option",{value:"",children:"more…"}),c.jsx("option",{value:"start",children:"start after migration"}),c.jsx("option",{value:"nostart",children:"leave stopped on target"}),c.jsx("option",{value:"quiesce",children:"stop source while copying"}),c.jsx("option",{value:"live",children:"copy while running (hot)"}),c.jsx("option",{value:"stopsource",children:"stop source after migration"}),c.jsx("option",{value:"keepsource",children:"leave source running"}),c.jsx("option",{value:"img:auto",children:"image: auto"}),c.jsx("option",{value:"img:pull",children:"image: pull on target"}),c.jsx("option",{value:"img:stream",children:"image: transfer layers"}),c.jsx("option",{value:"img:skip",children:"image: already on target"})]})]}),_&&B.length===0&&c.jsx("div",{className:"empty",children:"reading the source daemon…"}),!_&&B.length===0&&c.jsx("div",{className:"empty",children:"no containers on this host"}),!_&&B.length>0&&yl.length===0&&c.jsx("div",{className:"empty",children:"nothing matches the filter"}),c.jsx("div",{className:"clist",children:il.map(([U,Q])=>c.jsxs("div",{children:[il.length>1&&c.jsxs("div",{className:"group-head",children:[c.jsx(st,{checked:Q.every(q=>N[q.id]?.include),onChange:q=>El(Q.map($=>$.id),q),label:U?`compose: ${U}`:"standalone"}),c.jsx("span",{className:"line"}),c.jsx("span",{children:Q.length})]}),Q.map(q=>c.jsx(Sy,{c:q,s:N[q.id],onChange:$=>Xl(q.id,$),expanded:D.has(q.id),toggleExpanded:()=>g($=>{const cl=new Set($);return cl.has(q.id)?cl.delete(q.id):cl.add(q.id),cl}),conflicts:dl.has(N[q.id]?.nameOverride||q.name),sizes:H},q.id))]},U||"__none"))})]})}function Sy({c:h,s:N,onChange:O,expanded:s,toggleExpanded:_,conflicts:H,sizes:E}){if(!N)return null;const D=(h.mounts??[]).filter(A=>A.kind!=="tmpfs"),g=D.filter(A=>(N.mounts[A.destination]?.action??"copy")==="copy"),J=g.reduce((A,B)=>{const dl=Br(B,E);return A+(dl>0?dl:0)},0);return c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:`crow${N.include?" selected":""}`,children:[c.jsx(st,{checked:N.include,onChange:A=>O({include:A}),label:""}),c.jsx("button",{className:"expander",onClick:_,title:"per-item options",children:s?"▾":"▸"}),c.jsxs("div",{style:{minWidth:0},children:[c.jsx("div",{className:"name truncate",title:h.name,children:h.name}),c.jsxs("div",{className:"sub row",style:{gap:6},children:[c.jsx(Mn,{state:h.state}),h.composeService&&c.jsxs("span",{className:"faint",children:["· ",h.composeService]}),H&&c.jsx("span",{className:"badge",style:{borderColor:"#5c4520",color:"#e0b556"},children:"on target"})]})]}),c.jsx("div",{className:"image truncate",title:h.image,children:h.image}),c.jsxs("div",{className:"tags",children:[D.map(A=>c.jsx("span",{className:`badge ${A.kind==="bind"?"bind":A.kind==="anonymous"?"anon":"vol"}`,title:`${A.kind} → ${A.destination}${A.readOnly?" (read-only)":""}`,style:{opacity:(N.mounts[A.destination]?.action??"copy")==="skip"?.35:1},children:A.kind==="bind"?(A.source??"").split("/").pop()||"/":A.kind==="anonymous"?"anon":A.name},A.destination)),(h.endpoints??[]).filter(A=>!["bridge","host","none"].includes(A.network)).map(A=>c.jsx("span",{className:"badge net",title:`network ${A.network}`,children:A.network},A.network)),(h.ports??[]).slice(0,3).map((A,B)=>c.jsxs("span",{className:"badge port",children:[A.hostPort,":",A.containerPort.split("/")[0]]},B)),(h.ports??[]).length>3&&c.jsxs("span",{className:"badge port",children:["+",(h.ports??[]).length-3]})]}),c.jsxs("div",{className:"small faint nowrap",style:{textAlign:"right"},children:[g.length>0?`${g.length} to copy`:"no data",J>0&&c.jsxs(c.Fragment,{children:[" · ",ae(J)]})]})]}),s&&c.jsx(py,{c:h,s:N,onChange:O,sizes:E})]})}function py({c:h,s:N,onChange:O,sizes:s}){const _=h.mounts??[];function H(E,k){O({mounts:{...N.mounts,[E]:{...N.mounts[E],...k}}})}return c.jsxs("div",{className:"detail",children:[(h.warnings??[]).map((E,k)=>c.jsx("div",{className:"notice warn",children:E},k)),c.jsxs("div",{className:"grid2",children:[c.jsx(Fl,{label:"name on target",children:c.jsx("input",{type:"text",placeholder:h.name,value:N.nameOverride??"",onChange:E=>O({nameOverride:E.target.value})})}),c.jsx(Fl,{label:"image",children:c.jsxs("select",{value:N.migrateImage?N.imageMode:"skip",onChange:E=>{const k=E.target.value;O({migrateImage:k!=="skip",imageMode:k})},children:[c.jsx("option",{value:"auto",children:"auto — reuse, pull, or transfer"}),c.jsx("option",{value:"pull",children:"pull on the target"}),c.jsx("option",{value:"stream",children:"transfer the layers"}),c.jsx("option",{value:"skip",children:"already on the target"})]})}),c.jsxs("div",{className:"stack",style:{gap:6},children:[c.jsx(st,{checked:N.migrateNetworks,onChange:E=>O({migrateNetworks:E}),label:"recreate networks and reattach"}),c.jsx(st,{checked:N.keepStaticIps,onChange:E=>O({keepStaticIps:E}),disabled:!N.migrateNetworks,label:"keep static IP addresses",title:"Only works when the target networks use the same subnets"}),c.jsx(st,{checked:N.migratePorts,onChange:E=>O({migratePorts:E}),label:"publish the same host ports"})]}),c.jsxs("div",{className:"stack",style:{gap:6},children:[c.jsx(st,{checked:N.startAfter,onChange:E=>O({startAfter:E}),label:"start on the target"}),c.jsx(st,{checked:N.stopSourceDuringCopy,onChange:E=>O({stopSourceDuringCopy:E}),label:"stop the source while copying",title:"Recommended: databases and other writers produce inconsistent copies while running"}),c.jsx(st,{checked:N.stopSourceAfter,onChange:E=>O({stopSourceAfter:E}),label:"leave the source stopped afterwards"})]})]}),_.length===0?c.jsx("div",{className:"small faint",children:"this container has no mounts"}):c.jsxs("table",{className:"mount-table",children:[c.jsx("thead",{children:c.jsxs("tr",{children:[c.jsx("th",{style:{width:74},children:"kind"}),c.jsx("th",{children:"in the container"}),c.jsx("th",{children:"on the source"}),c.jsx("th",{style:{width:130},children:"action"}),c.jsx("th",{children:"on the target"}),c.jsx("th",{style:{width:70,textAlign:"right"},children:"size"})]})}),c.jsx("tbody",{children:_.map(E=>{const k=N.mounts[E.destination]??{action:"copy"},D=E.kind==="tmpfs";return c.jsxs("tr",{children:[c.jsx("td",{children:c.jsx("span",{className:`badge ${E.kind==="bind"?"bind":E.kind==="anonymous"?"anon":E.kind==="tmpfs"?"tmpfs":"vol"}`,children:E.kind})}),c.jsxs("td",{className:"mono truncate",title:E.destination,children:[E.destination,E.readOnly&&c.jsx("span",{className:"faint",children:" :ro"})]}),c.jsx("td",{className:"mono truncate faint",title:E.source||E.name,children:E.kind==="bind"?E.source:E.kind==="anonymous"?"(generated)":E.name}),c.jsx("td",{children:c.jsxs("select",{value:k.action,disabled:D,onChange:g=>H(E.destination,{action:g.target.value}),children:[c.jsx("option",{value:"copy",children:"copy data"}),c.jsx("option",{value:"structure",children:"create empty"}),c.jsx("option",{value:"skip",children:"do not mount"})]})}),c.jsxs("td",{children:[E.kind==="bind"&&k.action!=="skip"&&c.jsx("input",{type:"text",placeholder:E.source,value:k.targetSource??"",onChange:g=>H(E.destination,{targetSource:g.target.value})}),E.kind==="volume"&&k.action!=="skip"&&c.jsx("input",{type:"text",placeholder:E.name,value:k.targetName??"",onChange:g=>H(E.destination,{targetName:g.target.value})}),E.kind==="anonymous"&&c.jsx("span",{className:"small faint",children:"a fresh volume is created"}),D&&c.jsx("span",{className:"small faint",children:"in memory, nothing to copy"})]}),c.jsx("td",{className:"small faint nowrap",style:{textAlign:"right"},children:D?"–":ae(Br(E,s))})]},E.destination)})})]})]})}function jy({source:h,plan:N,includedCount:O,options:s,setOptions:_,connections:H,activeConn:E,setActiveConn:k,reloadConnections:D,targetInv:g,connectTarget:J,onJobStarted:A,onError:B}){const[dl,yl]=K.useState(null),[il,Xl]=K.useState(null),[El,Al]=K.useState(null),[rl,xl]=K.useState(""),[Dl,_l]=K.useState(""),[U,Q]=K.useState("tar"),q=H.find(M=>M.id===E),$=g?.preflight,cl=!!$?.serverVersion;async function hl(M,V){xl(M);try{await V()}catch(nl){nl instanceof pf&&nl.needsTrust?await Zl():B(nl instanceof Error?nl.message:String(nl))}finally{xl("")}}const Pl=K.useCallback(()=>{E&&hl("test",()=>J(E))},[E]);K.useEffect(()=>{Pl()},[Pl]);async function Zl(){if(E)try{Xl(await Gl.probe(E))}catch(M){B(M instanceof Error?M.message:String(M))}}async function Ll(){!E||!il||await hl("trust",async()=>{await Gl.trust(E,il.fingerprint),Xl(null),await J(E)})}const p=O>0&&cl&&!rl,C=O>0&&!rl;return c.jsxs(c.Fragment,{children:[c.jsxs("div",{className:"section",children:[c.jsx("h3",{children:"target host"}),c.jsxs("div",{className:"stack",children:[c.jsxs("div",{className:"row",children:[c.jsxs("select",{value:E,onChange:M=>k(M.target.value),children:[c.jsx("option",{value:"",children:"— no target selected —"}),H.map(M=>c.jsxs("option",{value:M.id,children:[M.name," (",M.user,"@",M.host,")"]},M.id))]}),c.jsx("button",{className:"btn tiny",onClick:()=>yl({port:22,auth:"password",saveSecrets:!1,sudo:!1}),children:"new"})]}),q&&c.jsxs("div",{className:"row wrap",style:{gap:6},children:[c.jsx("button",{className:"btn tiny",disabled:!!rl,onClick:Pl,children:rl==="test"?"connecting…":"connect"}),c.jsx("button",{className:"btn tiny",onClick:()=>yl(q),children:"edit"}),c.jsx("button",{className:"btn tiny",onClick:Zl,children:"host key"}),c.jsx("button",{className:"btn tiny danger",onClick:()=>{confirm(`Delete connection "${q.name}"?`)&&hl("del",async()=>{await Gl.deleteConnection(q.id),D()})},children:"delete"})]}),q&&!g&&c.jsx("div",{className:"small faint",children:"not connected yet"}),$&&c.jsxs(c.Fragment,{children:[($.problems??[]).map((M,V)=>c.jsx(Dt,{kind:"warn",children:M},V)),cl&&c.jsxs("dl",{className:"kv",children:[c.jsx("dt",{children:"host"}),c.jsx("dd",{children:g?.host||q?.host}),c.jsx("dt",{children:"docker"}),c.jsxs("dd",{children:[$.serverVersion," · ",$.os,"/",$.arch]}),c.jsx("dt",{children:"free space"}),c.jsxs("dd",{children:[ae($.diskFreeBytes)," on ",$.dockerRoot]}),c.jsx("dt",{children:"existing"}),c.jsxs("dd",{children:[(g?.containers??[]).length," containers ·"," ",(g?.volumes??[]).length," volumes"]}),c.jsx("dt",{children:"gzip"}),c.jsx("dd",{children:$.hasGzip?"yes":"missing"})]})]})]})]}),c.jsxs("div",{className:"section",children:[c.jsx("h3",{children:"options"}),c.jsxs("div",{className:"stack",children:[c.jsx(Fl,{label:"if the name already exists on the target",children:c.jsxs("select",{value:s.conflict,onChange:M=>_(V=>({...V,conflict:M.target.value})),children:[c.jsx("option",{value:"fail",children:"stop with an error"}),c.jsx("option",{value:"skip",children:"skip that container"}),c.jsx("option",{value:"rename",children:"create it under a new name"}),c.jsx("option",{value:"replace",children:"remove the target's container first"})]})}),s.conflict==="rename"&&c.jsx(Fl,{label:"suffix",children:c.jsx("input",{type:"text",value:s.renameSuffix??"",onChange:M=>_(V=>({...V,renameSuffix:M.target.value}))})}),s.conflict==="replace"&&c.jsx(Dt,{kind:"warn",children:"Existing containers and volumes with the same name are deleted on the target before the copy."}),c.jsx(st,{checked:s.compress,onChange:M=>_(V=>({...V,compress:M})),label:"compress transfers (gzip)"}),c.jsx(st,{checked:s.verifyAfter,onChange:M=>_(V=>({...V,verifyAfter:M})),label:"verify each container after migrating"}),c.jsx(st,{checked:s.dryRun,onChange:M=>_(V=>({...V,dryRun:M})),label:"dry run — show every command, change nothing"}),c.jsx(Fl,{label:`containers at a time: ${s.parallelism}`,children:c.jsx("input",{type:"range",min:1,max:6,value:s.parallelism,onChange:M=>_(V=>({...V,parallelism:Number(M.target.value)})),style:{width:"100%"}})})]})]}),c.jsxs("div",{className:"section",children:[c.jsx("h3",{children:"migrate over ssh"}),c.jsxs("div",{className:"stack",children:[c.jsx("button",{className:"btn primary",disabled:!p,onClick:()=>hl("ssh",async()=>{const M=await Gl.migrateSSH(E,N);A(M)}),children:rl==="ssh"?"starting…":`migrate ${O} container${O===1?"":"s"} to target`}),c.jsx("button",{className:"btn",disabled:O===0||!!rl,onClick:()=>hl("preview",async()=>{Al(await Gl.preview(N))}),children:"preview the commands"}),O===0&&c.jsx("div",{className:"small faint",children:"select at least one container"}),O>0&&!cl&&c.jsx("div",{className:"small faint",children:"connect to a target first"})]})]}),c.jsxs("div",{className:"section",children:[c.jsx("h3",{children:"migration package"}),c.jsxs("div",{className:"stack",children:[c.jsxs("div",{className:"small muted",children:["Builds a self-contained folder with the data, the images and an ",c.jsx("span",{className:"mono",children:"install.sh"})," to run on the target. No network between the hosts required."]}),c.jsx(Fl,{label:"package name",children:c.jsx("input",{type:"text",placeholder:"auto (timestamped)",value:Dl,onChange:M=>_l(M.target.value)})}),c.jsx(Fl,{label:"format",children:c.jsxs("select",{value:U,onChange:M=>Q(M.target.value),children:[c.jsx("option",{value:"tar",children:"single .tar file (downloadable)"}),c.jsx("option",{value:"dir",children:"directory on this host"})]})}),c.jsx("button",{className:"btn",disabled:!C,onClick:()=>hl("pkg",async()=>{const M=await Gl.buildPackage({...N,packageName:Dl},U);A(M)}),children:rl==="pkg"?"starting…":"build package"})]})]}),h?.inventory.warnings?.length?c.jsxs("div",{className:"section",children:[c.jsx("h3",{children:"source warnings"}),c.jsx("div",{className:"stack",children:h.inventory.warnings.map((M,V)=>c.jsx(Dt,{kind:"warn",children:M},V))})]}):null,dl&&c.jsx(xy,{initial:dl,onClose:()=>yl(null),onSaved:M=>{yl(null),D(),k(M.id)},onError:B}),il&&c.jsx(zf,{title:"SSH host key",onClose:()=>Xl(null),footer:c.jsxs(c.Fragment,{children:[c.jsx("button",{className:"btn",onClick:()=>Xl(null),children:"cancel"}),c.jsx("button",{className:"btn primary",onClick:Ll,children:il.changed?"replace the stored key and trust":"trust this host"})]}),children:c.jsxs("div",{className:"stack",children:[il.changed&&c.jsxs(Dt,{kind:"err",children:["The key presented by this host is ",c.jsx("b",{children:"different"})," from the one recorded earlier. This happens after a reinstall — but it is also what a machine-in-the-middle looks like. Only continue if you know why it changed."]}),il.trusted&&!il.changed&&c.jsx(Dt,{kind:"ok",children:"This host key is already trusted."}),c.jsxs("div",{className:"small muted",children:["Compare this with the output of ",c.jsxs("span",{className:"mono",children:["ssh-keyscan -t ",il.keyType," ",il.host]})," ","run on the target itself, or with ",c.jsx("span",{className:"mono",children:"ssh-keygen -lf /etc/ssh/ssh_host_*_key.pub"}),"."]}),c.jsxs("div",{className:"fingerprint",children:[il.keyType,c.jsx("br",{}),il.fingerprint]})]})}),El&&c.jsx(zy,{data:El,onClose:()=>Al(null)})]})}function xy({initial:h,onClose:N,onSaved:O,onError:s}){const[_,H]=K.useState(h),[E,k]=K.useState(!1);function D(g,J){H(A=>({...A,[g]:J}))}return c.jsx(zf,{title:h.id?`Edit ${h.name}`:"New target host",onClose:N,footer:c.jsxs(c.Fragment,{children:[c.jsx("button",{className:"btn",onClick:N,children:"cancel"}),c.jsx("button",{className:"btn primary",disabled:E||!_.host||!_.user,onClick:async()=>{k(!0);try{O(await Gl.saveConnection(_))}catch(g){s(g instanceof Error?g.message:String(g))}finally{k(!1)}},children:E?"saving…":"save"})]}),children:c.jsxs("div",{className:"stack",style:{gap:12},children:[c.jsxs("div",{className:"row",style:{gap:12},children:[c.jsx(Fl,{label:"label",children:c.jsx("input",{type:"text",value:_.name??"",onChange:g=>D("name",g.target.value)})}),c.jsx(Fl,{label:"host",children:c.jsx("input",{type:"text",value:_.host??"",onChange:g=>D("host",g.target.value)})}),c.jsx("div",{style:{width:90},children:c.jsx(Fl,{label:"port",children:c.jsx("input",{type:"number",value:_.port??22,onChange:g=>D("port",Number(g.target.value))})})})]}),c.jsxs("div",{className:"row",style:{gap:12},children:[c.jsx(Fl,{label:"user",children:c.jsx("input",{type:"text",value:_.user??"",onChange:g=>D("user",g.target.value)})}),c.jsx(Fl,{label:"authentication",children:c.jsxs("select",{value:_.auth??"password",onChange:g=>D("auth",g.target.value),children:[c.jsx("option",{value:"password",children:"password"}),c.jsx("option",{value:"key",children:"private key"}),c.jsx("option",{value:"agent",children:"ssh agent"})]})})]}),_.auth==="password"&&c.jsx(Fl,{label:"password",children:c.jsx("input",{type:"password",value:_.password??"",onChange:g=>D("password",g.target.value)})}),_.auth==="key"&&c.jsxs(c.Fragment,{children:[c.jsx(Fl,{label:"private key path on this machine (leave empty to paste the key below)",children:c.jsx("input",{type:"text",placeholder:"/root/.ssh/id_ed25519",value:_.privateKeyPath??"",onChange:g=>D("privateKeyPath",g.target.value)})}),c.jsx(Fl,{label:"or paste the private key",children:c.jsx("textarea",{rows:5,value:_.privateKey??"",onChange:g=>D("privateKey",g.target.value),placeholder:"-----BEGIN OPENSSH PRIVATE KEY-----"})}),c.jsx(Fl,{label:"passphrase (if the key is encrypted)",children:c.jsx("input",{type:"password",value:_.passphrase??"",onChange:g=>D("passphrase",g.target.value)})})]}),_.auth==="agent"&&c.jsxs("div",{className:"small muted",children:["Uses the agent at ",c.jsx("span",{className:"mono",children:"$SSH_AUTH_SOCK"})," of the process running docker-migrate."]}),c.jsx(st,{checked:_.sudo??!1,onChange:g=>D("sudo",g),label:"run docker through sudo -n on the target",title:"Needed when the login user is not in the docker group. sudo must not ask for a password."}),c.jsx(Fl,{label:"docker command on the target (optional)",children:c.jsx("input",{type:"text",placeholder:"docker",value:_.dockerCmd??"",onChange:g=>D("dockerCmd",g.target.value)})}),c.jsx(st,{checked:_.saveSecrets??!1,onChange:g=>D("saveSecrets",g),label:"remember the password / key on disk"}),_.saveSecrets?c.jsx(Dt,{kind:"warn",children:"Credentials are stored in plain text in the connections file, readable only by this user. Leave this off to keep them in memory for this session only."}):c.jsx("div",{className:"small faint",children:"Credentials stay in memory and are lost when docker-migrate restarts."})]})})}function zy({data:h,onClose:N}){const O=h.items.reduce((s,_)=>s+_.totalBytes,0);return c.jsx(zf,{title:"What this migration will run",wide:!0,onClose:N,footer:c.jsx("button",{className:"btn",onClick:N,children:"close"}),children:c.jsxs("div",{className:"stack",style:{gap:16},children:[c.jsxs("div",{className:"small muted",children:[h.items.length," container(s)",O>0&&c.jsxs(c.Fragment,{children:[" · about ",ae(O)," of known volume data"]}),". These are the commands that run on the target; data is streamed into ",c.jsx("span",{className:"mono",children:"docker cp"})," rather than written to a file."]}),(h.networkCommands??[]).length>0&&c.jsxs("div",{children:[c.jsx("h3",{style:{margin:"0 0 6px",fontSize:12},children:"shared networks"}),c.jsx("pre",{className:"cmdblock",children:(h.networkCommands??[]).join(` `)})]}),h.items.map(s=>c.jsxs("div",{children:[c.jsxs("h3",{style:{margin:"0 0 6px",fontSize:12},children:[s.name,s.targetName!==s.name&&c.jsxs("span",{className:"faint",children:[" → ",s.targetName]})]}),(s.warnings??[]).map((_,H)=>c.jsx(Dt,{kind:"warn",children:_},`w${H}`)),(s.notes??[]).map((_,H)=>c.jsxs("div",{className:"small faint",children:["· ",_]},`n${H}`)),c.jsx("pre",{className:"cmdblock",children:(s.commands??[]).join(` -`)})]},s.containerId))]})})}function Ty({jobs:h,activeJob:N,setActiveJob:O,reload:s,reloadPackages:_}){const H=N||h[0]?.id||"";return h.length===0?c.jsx("div",{className:"empty",children:"no migrations yet — select containers and start one"}):c.jsxs("div",{style:{display:"flex",minHeight:0,height:"100%"},children:[c.jsx("div",{className:"joblist",style:{width:320,flex:"0 0 320px",overflow:"auto"},children:h.map(E=>c.jsxs("div",{className:`jobcard${E.id===H?" active":""}`,onClick:()=>O(E.id),children:[c.jsxs("div",{className:"row",children:[c.jsx(Mn,{state:E.state}),c.jsx("span",{className:"spacer"}),c.jsx("span",{className:"small faint",children:E.kind==="ssh"?"ssh":"package"})]}),c.jsx("div",{className:"truncate",style:{marginTop:2},children:E.title}),c.jsxs("div",{className:"small faint",children:[new Date(E.createdAt).toLocaleTimeString()," · ",qr(E.startedAt,E.endedAt),E.dryRun&&" · dry run"]}),c.jsx("div",{style:{marginTop:6},children:c.jsx(jf,{done:E.bytesDone,total:E.bytesTotal,state:E.state})})]},E.id))}),c.jsx("div",{style:{flex:1,minWidth:0,overflow:"auto",borderLeft:"1px solid var(--border)"},children:H&&c.jsx(Ey,{id:H,reload:s,reloadPackages:_})})]})}function Ey({id:h,reload:N,reloadPackages:O}){const[s,_]=K.useState(null),[H,E]=K.useState(!0),k=K.useRef(null),D=K.useRef(!0);K.useEffect(()=>{_(null);let A=!1;Gl.job(h).then(dl=>!A&&_(dl)).catch(()=>{});const B=Gl.jobEvents(h);return B.onmessage=dl=>{try{_(JSON.parse(dl.data))}catch{}},B.addEventListener("done",()=>{B.close(),N(),O()}),B.onerror=()=>B.close(),()=>{A=!0,B.close()}},[h,N,O]);const g=K.useMemo(()=>(s?.log??[]).filter(A=>H||A.level!=="cmd"),[s,H]);if(K.useEffect(()=>{const A=k.current;A&&D.current&&(A.scrollTop=A.scrollHeight)},[g]),!s)return c.jsx("div",{className:"empty",children:"loading…"});const J=s.state==="running"||s.state==="pending";return c.jsxs("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:14},children:[c.jsxs("div",{className:"row",children:[c.jsx(Mn,{state:s.state}),c.jsx("b",{children:s.title}),s.dryRun&&c.jsx("span",{className:"badge",children:"dry run"}),c.jsx("span",{className:"spacer"}),c.jsxs("span",{className:"small faint",children:[ae(s.bytesDone),s.bytesTotal>0&&c.jsxs(c.Fragment,{children:[" of ",ae(s.bytesTotal)]})," · ",qr(s.startedAt,s.endedAt)]}),J?c.jsx("button",{className:"btn tiny danger",onClick:()=>Gl.cancelJob(s.id).then(N),children:"cancel"}):c.jsx("button",{className:"btn tiny ghost",onClick:()=>Gl.deleteJob(s.id).then(N),children:"remove"})]}),c.jsx(jf,{done:s.bytesDone,total:s.bytesTotal,state:s.state}),s.error&&c.jsx(Dt,{kind:"err",children:s.error}),s.state==="succeeded"&&s.artifact&&c.jsxs(Dt,{kind:"ok",children:["Package ready at ",c.jsx("span",{className:"mono",children:s.artifact})," (",ae(s.artifactBytes??0),")."," ","Open the Packages tab to download it."]}),s.items.map(A=>c.jsxs("div",{style:{border:"1px solid var(--border)",borderRadius:6,padding:"8px 10px"},children:[c.jsxs("div",{className:"row",children:[c.jsx(Mn,{state:A.state}),c.jsx("b",{children:A.name}),c.jsx("span",{className:"spacer"}),c.jsxs("span",{className:"small faint",children:[A.steps.filter(B=>B.state==="succeeded").length,"/",A.steps.length," steps"]})]}),A.error&&c.jsx("div",{className:"small",style:{color:"var(--err)"},children:A.error}),(A.warnings??[]).map((B,dl)=>c.jsxs("div",{className:"small",style:{color:"var(--warn)"},children:["! ",B]},dl)),c.jsx("div",{className:"steps",children:A.steps.map(B=>c.jsxs("div",{className:`step ${B.state}`,children:[c.jsx(Mn,{state:B.state,label:""}),c.jsx("span",{className:"label truncate",title:B.error||B.label,children:B.label}),c.jsx("span",{children:B.bytesTotal>0||B.bytesDone>0?c.jsx(jf,{done:B.bytesDone,total:B.bytesTotal,state:B.state}):null}),c.jsx("span",{className:"faint nowrap",style:{textAlign:"right"},children:B.bytesDone>0?ae(B.bytesDone):B.state==="skipped"?"skipped":""})]},B.id))})]},A.id)),c.jsxs("div",{className:"row",children:[c.jsx("h3",{style:{margin:0,fontSize:12},children:"log"}),c.jsx("span",{className:"spacer"}),c.jsxs("label",{className:"check small",children:[c.jsx("input",{type:"checkbox",checked:H,onChange:A=>E(A.target.checked)}),c.jsx("span",{children:"show commands"})]})]}),c.jsxs("div",{className:"log",ref:k,onScroll:A=>{const B=A.currentTarget;D.current=B.scrollHeight-B.scrollTop-B.clientHeight<24},children:[g.map(A=>c.jsxs("div",{className:`l-${A.level}`,children:[c.jsxs("span",{className:"ts",children:[new Date(A.at).toLocaleTimeString()," "]}),A.message]},A.seq)),g.length===0&&c.jsx("span",{className:"faint",children:"nothing logged yet"})]})]})}function Ay({packages:h,reload:N}){return h.length===0?c.jsx("div",{className:"empty",children:"no packages built yet"}):c.jsxs("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:12},children:[c.jsxs(Dt,{kind:"info",children:["Copy a package to the target host, then run ",c.jsx("span",{className:"mono",children:"./install.sh --dry-run"})," to review it and"," ",c.jsx("span",{className:"mono",children:"./install.sh"})," to restore. The target needs only bash, gzip and docker."]}),c.jsxs("table",{className:"mount-table",children:[c.jsx("thead",{children:c.jsxs("tr",{children:[c.jsx("th",{children:"name"}),c.jsx("th",{style:{width:110},children:"kind"}),c.jsx("th",{style:{width:110,textAlign:"right"},children:"size"}),c.jsx("th",{style:{width:170},children:"built"}),c.jsx("th",{style:{width:190}})]})}),c.jsx("tbody",{children:h.map(O=>c.jsxs("tr",{children:[c.jsx("td",{className:"mono truncate",title:O.path,children:O.name}),c.jsx("td",{children:c.jsx("span",{className:"badge",children:O.isDir?"directory":"tar"})}),c.jsx("td",{className:"nowrap",style:{textAlign:"right"},children:ae(O.bytes)}),c.jsx("td",{className:"small faint",children:new Date(O.createdAt).toLocaleString()}),c.jsx("td",{children:c.jsxs("div",{className:"row",style:{justifyContent:"flex-end",gap:6},children:[O.isDir?c.jsx("span",{className:"small faint",title:O.path,children:"copy it from disk"}):c.jsx("a",{className:"btn tiny",href:Gl.downloadUrl(O.name),download:!0,children:"download"}),c.jsx("button",{className:"btn tiny danger",onClick:()=>{confirm(`Delete package "${O.name}"? This cannot be undone.`)&&Gl.deletePackage(O.name).then(N)},children:"delete"})]})})]},O.name))})]})]})}function Ny(){const[h,N]=K.useState(null),[O,s]=K.useState(null),[_,H]=K.useState({}),[E,k]=K.useState({conflict:"fail",renameSuffix:"-migrated",compress:!0,compressLevel:1,dryRun:!1,parallelism:1,verifyAfter:!0}),[D,g]=K.useState({}),[J,A]=K.useState([]),[B,dl]=K.useState(""),[yl,il]=K.useState(null),[Xl,El]=K.useState([]),[Al,rl]=K.useState([]),[xl,Dl]=K.useState("containers"),[_l,U]=K.useState(""),[Q,q]=K.useState(""),[$,cl]=K.useState(!0),hl=K.useCallback(async()=>{cl(!0);try{const d=await Gl.source();s(d),H(x=>{const R={};for(const Y of d.inventory.containers)R[Y.id]=x[Y.id]??d.defaults[Y.id];return R}),q(""),Gl.volumeSizes().then(x=>g(x.volumes??{})).catch(()=>{})}catch(d){q(d instanceof Error?d.message:String(d))}finally{cl(!1)}},[]),Pl=K.useCallback(async()=>{try{const d=await Gl.connections();A(d),dl(x=>x&&d.some(R=>R.id===x)?x:d[0]?.id??"")}catch(d){q(d instanceof Error?d.message:String(d))}},[]),Zl=K.useCallback(async()=>{try{El(await Gl.jobs())}catch{}},[]),Ll=K.useCallback(async()=>{try{rl(await Gl.packages())}catch{}},[]);K.useEffect(()=>{Gl.health().then(N).catch(()=>{}),hl(),Pl(),Zl(),Ll()},[hl,Pl,Zl,Ll]),K.useEffect(()=>{const d=setInterval(Zl,4e3);return()=>clearInterval(d)},[Zl]);const p=K.useCallback(async d=>{if(il(null),!d)return;const x=await Gl.targetInventory(d);il(x),q("")},[]),C=K.useMemo(()=>Object.values(_).filter(d=>d.include),[_]),M=K.useMemo(()=>({items:Object.values(_),options:E}),[_,E]),V=Xl.filter(d=>d.state==="running"||d.state==="pending").length,nl=K.useCallback(d=>{El(x=>[d,...x]),U(d.id),Dl("jobs")},[]);return c.jsxs("div",{className:"app",children:[c.jsxs("header",{className:"topbar",children:[c.jsxs("div",{className:"brand",children:[c.jsx("span",{className:"dot"}),"docker-migrate"]}),c.jsxs("nav",{className:"tabs",children:[c.jsxs("button",{className:`tab${xl==="containers"?" active":""}`,onClick:()=>Dl("containers"),children:["Containers",c.jsxs("span",{className:"count",children:[C.length,"/",O?.inventory.containers.length??0]})]}),c.jsxs("button",{className:`tab${xl==="jobs"?" active":""}`,onClick:()=>Dl("jobs"),children:["Jobs",V>0&&c.jsxs("span",{className:"count",children:[V," running"]})]}),c.jsxs("button",{className:`tab${xl==="packages"?" active":""}`,onClick:()=>Dl("packages"),children:["Packages",Al.length>0&&c.jsx("span",{className:"count",children:Al.length})]})]}),c.jsxs("div",{className:"topbar-right",children:[h&&c.jsxs("span",{className:"hostinfo",children:["source ",c.jsx("b",{children:O?.inventory.host||h.dockerHost}),h.dockerVersion&&c.jsxs(c.Fragment,{children:[" · docker ",h.dockerVersion]})]}),c.jsx("button",{className:"btn tiny",onClick:hl,disabled:$,children:$?"loading…":"refresh"})]})]}),Q&&c.jsx("div",{style:{padding:"10px 16px"},children:c.jsxs(Dt,{kind:"err",children:[Q,c.jsx("button",{className:"btn tiny ghost",style:{marginLeft:8},onClick:()=>q(""),children:"dismiss"})]})}),h&&!h.ok&&c.jsx("div",{style:{padding:"10px 16px"},children:c.jsxs(Dt,{kind:"err",children:["Cannot reach the source Docker daemon at ",c.jsx("span",{className:"mono",children:h.dockerHost}),h.dockerError&&c.jsxs(c.Fragment,{children:[" — ",h.dockerError]})]})}),c.jsxs("div",{className:"body",children:[c.jsxs("main",{className:"main",children:[xl==="containers"&&c.jsx(by,{source:O,sel:_,setSel:H,targetInv:yl,loading:$,sizes:D}),xl==="jobs"&&c.jsx(Ty,{jobs:Xl,activeJob:_l,setActiveJob:U,reload:Zl,reloadPackages:Ll}),xl==="packages"&&c.jsx(Ay,{packages:Al,reload:Ll})]}),xl==="containers"&&c.jsx("aside",{className:"sidebar",children:c.jsx(jy,{source:O,plan:M,includedCount:C.length,options:E,setOptions:k,connections:J,activeConn:B,setActiveConn:dl,reloadConnections:Pl,targetInv:yl,connectTarget:p,onJobStarted:nl,onError:q})})]})]})}vy.createRoot(document.getElementById("root")).render(c.jsx(K.StrictMode,{children:c.jsx(Ny,{})})); +`)})]},s.containerId))]})})}function Ty({jobs:h,activeJob:N,setActiveJob:O,reload:s,reloadPackages:_}){const H=N||h[0]?.id||"";return h.length===0?c.jsx("div",{className:"empty",children:"no migrations yet — select containers and start one"}):c.jsxs("div",{style:{display:"flex",minHeight:0,height:"100%"},children:[c.jsx("div",{className:"joblist",style:{width:320,flex:"0 0 320px",overflow:"auto"},children:h.map(E=>c.jsxs("div",{className:`jobcard${E.id===H?" active":""}`,onClick:()=>O(E.id),children:[c.jsxs("div",{className:"row",children:[c.jsx(Mn,{state:E.state}),c.jsx("span",{className:"spacer"}),c.jsx("span",{className:"small faint",children:E.kind==="ssh"?"ssh":"package"})]}),c.jsx("div",{className:"truncate",style:{marginTop:2},children:E.title}),c.jsxs("div",{className:"small faint",children:[new Date(E.createdAt).toLocaleTimeString()," · ",qr(E.startedAt,E.endedAt),E.dryRun&&" · dry run"]}),c.jsx("div",{style:{marginTop:6},children:c.jsx(jf,{done:E.bytesDone,total:E.bytesTotal,state:E.state})})]},E.id))}),c.jsx("div",{style:{flex:1,minWidth:0,overflow:"auto",borderLeft:"1px solid var(--border)"},children:H&&c.jsx(Ey,{id:H,reload:s,reloadPackages:_})})]})}function Ey({id:h,reload:N,reloadPackages:O}){const[s,_]=K.useState(null),[H,E]=K.useState(!0),k=K.useRef(null),D=K.useRef(!0);K.useEffect(()=>{_(null);let A=!1;Gl.job(h).then(dl=>!A&&_(dl)).catch(()=>{});const B=Gl.jobEvents(h);return B.onmessage=dl=>{try{_(JSON.parse(dl.data))}catch{}},B.addEventListener("done",()=>{B.close(),N(),O()}),B.onerror=()=>B.close(),()=>{A=!0,B.close()}},[h,N,O]);const g=K.useMemo(()=>(s?.log??[]).filter(A=>H||A.level!=="cmd"),[s,H]);if(K.useEffect(()=>{const A=k.current;A&&D.current&&(A.scrollTop=A.scrollHeight)},[g]),!s)return c.jsx("div",{className:"empty",children:"loading…"});const J=s.state==="running"||s.state==="pending";return c.jsxs("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:14},children:[c.jsxs("div",{className:"row",children:[c.jsx(Mn,{state:s.state}),c.jsx("b",{children:s.title}),s.dryRun&&c.jsx("span",{className:"badge",children:"dry run"}),c.jsx("span",{className:"spacer"}),c.jsxs("span",{className:"small faint",children:[ae(s.bytesDone),s.bytesTotal>0&&c.jsxs(c.Fragment,{children:[" of ",ae(s.bytesTotal)]})," · ",qr(s.startedAt,s.endedAt)]}),J?c.jsx("button",{className:"btn tiny danger",onClick:()=>Gl.cancelJob(s.id).then(N),children:"cancel"}):c.jsx("button",{className:"btn tiny ghost",onClick:()=>Gl.deleteJob(s.id).then(N),children:"remove"})]}),c.jsx(jf,{done:s.bytesDone,total:s.bytesTotal,state:s.state}),s.error&&c.jsx(Dt,{kind:"err",children:s.error}),s.state==="succeeded"&&s.artifact&&c.jsxs(Dt,{kind:"ok",children:["Package ready at ",c.jsx("span",{className:"mono",children:s.artifact})," (",ae(s.artifactBytes??0),")."," ","Open the Packages tab to download it."]}),s.items.map(A=>c.jsxs("div",{style:{border:"1px solid var(--border)",borderRadius:6,padding:"8px 10px"},children:[c.jsxs("div",{className:"row",children:[c.jsx(Mn,{state:A.state}),c.jsx("b",{children:A.name}),c.jsx("span",{className:"spacer"}),c.jsxs("span",{className:"small faint",children:[A.steps.filter(B=>B.state==="succeeded").length,"/",A.steps.length," steps"]})]}),A.error&&c.jsx("div",{className:"small",style:{color:"var(--err)"},children:A.error}),(A.warnings??[]).map((B,dl)=>c.jsxs("div",{className:"small",style:{color:"var(--warn)"},children:["! ",B]},dl)),c.jsx("div",{className:"steps",children:A.steps.map(B=>c.jsxs("div",{className:`step ${B.state}`,children:[c.jsx(Mn,{state:B.state,label:""}),c.jsx("span",{className:"label truncate",title:B.error||B.label,children:B.label}),c.jsx("span",{children:B.bytesTotal>0||B.bytesDone>0?c.jsx(jf,{done:B.bytesDone,total:B.bytesTotal,state:B.state}):null}),c.jsx("span",{className:"faint nowrap",style:{textAlign:"right"},children:B.bytesDone>0?ae(B.bytesDone):B.state==="skipped"?"skipped":""})]},B.id))})]},A.id)),c.jsxs("div",{className:"row",children:[c.jsx("h3",{style:{margin:0,fontSize:12},children:"log"}),c.jsx("span",{className:"spacer"}),c.jsxs("label",{className:"check small",children:[c.jsx("input",{type:"checkbox",checked:H,onChange:A=>E(A.target.checked)}),c.jsx("span",{children:"show commands"})]})]}),c.jsxs("div",{className:"log",ref:k,onScroll:A=>{const B=A.currentTarget;D.current=B.scrollHeight-B.scrollTop-B.clientHeight<24},children:[g.map(A=>c.jsxs("div",{className:`l-${A.level}`,children:[c.jsxs("span",{className:"ts",children:[new Date(A.at).toLocaleTimeString()," "]}),A.message]},A.seq)),g.length===0&&c.jsx("span",{className:"faint",children:"nothing logged yet"})]})]})}function Ay({packages:h,reload:N}){return h.length===0?c.jsx("div",{className:"empty",children:"no packages built yet"}):c.jsxs("div",{style:{padding:16,display:"flex",flexDirection:"column",gap:12},children:[c.jsxs(Dt,{kind:"info",children:["Copy a package to the target host, then run ",c.jsx("span",{className:"mono",children:"./install.sh --dry-run"})," to review it and"," ",c.jsx("span",{className:"mono",children:"./install.sh"})," to restore. The target needs only bash, gzip and docker."]}),c.jsxs("table",{className:"mount-table",children:[c.jsx("thead",{children:c.jsxs("tr",{children:[c.jsx("th",{children:"name"}),c.jsx("th",{style:{width:110},children:"kind"}),c.jsx("th",{style:{width:110,textAlign:"right"},children:"size"}),c.jsx("th",{style:{width:170},children:"built"}),c.jsx("th",{style:{width:190}})]})}),c.jsx("tbody",{children:h.map(O=>c.jsxs("tr",{children:[c.jsx("td",{className:"mono truncate",title:O.path,children:O.name}),c.jsx("td",{children:c.jsx("span",{className:"badge",children:O.isDir?"directory":"tar"})}),c.jsx("td",{className:"nowrap",style:{textAlign:"right"},children:ae(O.bytes)}),c.jsx("td",{className:"small faint",children:new Date(O.createdAt).toLocaleString()}),c.jsx("td",{children:c.jsxs("div",{className:"row",style:{justifyContent:"flex-end",gap:6},children:[O.isDir?c.jsx("span",{className:"small faint",title:O.path,children:"copy it from disk"}):c.jsx("a",{className:"btn tiny",href:Gl.downloadUrl(O.name),download:!0,children:"download"}),c.jsx("button",{className:"btn tiny danger",onClick:()=>{confirm(`Delete package "${O.name}"? This cannot be undone.`)&&Gl.deletePackage(O.name).then(N)},children:"delete"})]})})]},O.name))})]})]})}function Ny(){const[h,N]=K.useState(null),[O,s]=K.useState(null),[_,H]=K.useState({}),[E,k]=K.useState({conflict:"fail",renameSuffix:"-migrated",compress:!0,compressLevel:1,dryRun:!1,parallelism:1,verifyAfter:!0}),[D,g]=K.useState({}),[J,A]=K.useState([]),[B,dl]=K.useState(""),[yl,il]=K.useState(null),[Xl,El]=K.useState([]),[Al,rl]=K.useState([]),[xl,Dl]=K.useState("containers"),[_l,U]=K.useState(""),[Q,q]=K.useState(""),[$,cl]=K.useState(!0),hl=K.useCallback(async()=>{cl(!0);try{const d=await Gl.source();s(d),H(x=>{const R={};for(const Y of d.inventory.containers)R[Y.id]=x[Y.id]??d.defaults[Y.id];return R}),q(""),Gl.volumeSizes().then(x=>g(x.volumes??{})).catch(()=>{})}catch(d){q(d instanceof Error?d.message:String(d))}finally{cl(!1)}},[]),Pl=K.useCallback(async()=>{try{const d=await Gl.connections();A(d),dl(x=>x&&d.some(R=>R.id===x)?x:d[0]?.id??"")}catch(d){q(d instanceof Error?d.message:String(d))}},[]),Zl=K.useCallback(async()=>{try{El(await Gl.jobs())}catch{}},[]),Ll=K.useCallback(async()=>{try{rl(await Gl.packages())}catch{}},[]);K.useEffect(()=>{Gl.health().then(N).catch(()=>{}),hl(),Pl(),Zl(),Ll()},[hl,Pl,Zl,Ll]),K.useEffect(()=>{const d=setInterval(Zl,4e3);return()=>clearInterval(d)},[Zl]);const p=K.useCallback(async d=>{if(il(null),!d)return;const x=await Gl.targetInventory(d);il(x),q("")},[]),C=K.useMemo(()=>Object.values(_).filter(d=>d.include),[_]),M=K.useMemo(()=>({items:Object.values(_),options:E}),[_,E]),V=Xl.filter(d=>d.state==="running"||d.state==="pending").length,nl=K.useCallback(d=>{El(x=>[d,...x]),U(d.id),Dl("jobs")},[]);return c.jsxs("div",{className:"app",children:[c.jsxs("header",{className:"topbar",children:[c.jsxs("div",{className:"brand",children:[c.jsx("img",{src:"/logo-icon.png",alt:"",className:"brand-logo"}),"DockMV"]}),c.jsxs("nav",{className:"tabs",children:[c.jsxs("button",{className:`tab${xl==="containers"?" active":""}`,onClick:()=>Dl("containers"),children:["Containers",c.jsxs("span",{className:"count",children:[C.length,"/",O?.inventory.containers.length??0]})]}),c.jsxs("button",{className:`tab${xl==="jobs"?" active":""}`,onClick:()=>Dl("jobs"),children:["Jobs",V>0&&c.jsxs("span",{className:"count",children:[V," running"]})]}),c.jsxs("button",{className:`tab${xl==="packages"?" active":""}`,onClick:()=>Dl("packages"),children:["Packages",Al.length>0&&c.jsx("span",{className:"count",children:Al.length})]})]}),c.jsxs("div",{className:"topbar-right",children:[h&&c.jsxs("span",{className:"hostinfo",children:["source ",c.jsx("b",{children:O?.inventory.host||h.dockerHost}),h.dockerVersion&&c.jsxs(c.Fragment,{children:[" · docker ",h.dockerVersion]})]}),c.jsx("button",{className:"btn tiny",onClick:hl,disabled:$,children:$?"loading…":"refresh"})]})]}),Q&&c.jsx("div",{style:{padding:"10px 16px"},children:c.jsxs(Dt,{kind:"err",children:[Q,c.jsx("button",{className:"btn tiny ghost",style:{marginLeft:8},onClick:()=>q(""),children:"dismiss"})]})}),h&&!h.ok&&c.jsx("div",{style:{padding:"10px 16px"},children:c.jsxs(Dt,{kind:"err",children:["Cannot reach the source Docker daemon at ",c.jsx("span",{className:"mono",children:h.dockerHost}),h.dockerError&&c.jsxs(c.Fragment,{children:[" — ",h.dockerError]})]})}),c.jsxs("div",{className:"body",children:[c.jsxs("main",{className:"main",children:[xl==="containers"&&c.jsx(by,{source:O,sel:_,setSel:H,targetInv:yl,loading:$,sizes:D}),xl==="jobs"&&c.jsx(Ty,{jobs:Xl,activeJob:_l,setActiveJob:U,reload:Zl,reloadPackages:Ll}),xl==="packages"&&c.jsx(Ay,{packages:Al,reload:Ll})]}),xl==="containers"&&c.jsx("aside",{className:"sidebar",children:c.jsx(jy,{source:O,plan:M,includedCount:C.length,options:E,setOptions:k,connections:J,activeConn:B,setActiveConn:dl,reloadConnections:Pl,targetInv:yl,connectTarget:p,onJobStarted:nl,onError:q})})]})]})}vy.createRoot(document.getElementById("root")).render(c.jsx(K.StrictMode,{children:c.jsx(Ny,{})})); diff --git a/internal/webui/dist/favicon.png b/internal/webui/dist/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..58d66ee10bd402e19020d18df38b0f296ee9462f GIT binary patch literal 15393 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 literal 0 HcmV?d00001 diff --git a/internal/webui/dist/index.html b/internal/webui/dist/index.html index c7bd1ef..ac26f30 100644 --- a/internal/webui/dist/index.html +++ b/internal/webui/dist/index.html @@ -4,9 +4,10 @@ - docker-migrate - - + + DockMV + +
diff --git a/internal/webui/dist/logo-icon.png b/internal/webui/dist/logo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9d5fe0b1af71b6a8db2202d7c7c151dc279d4712 GIT binary patch literal 6196 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 - docker-migrate + + DockMV
diff --git a/web/public/favicon.png b/web/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..58d66ee10bd402e19020d18df38b0f296ee9462f GIT binary patch literal 15393 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 literal 0 HcmV?d00001 diff --git a/web/public/logo-icon.png b/web/public/logo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9d5fe0b1af71b6a8db2202d7c7c151dc279d4712 GIT binary patch literal 6196 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
-
docker-migrate
+
DockMV