Sumber yang diterbitkan
Muat turun ZIP sumber
CH-J Tools
Layari direktori dan fail untuk keluaran aplikasi tertentu.
CH-J / Server Manager
1704 fail
0.1.2-beta
Ditambah: · Dibina:
1
<!doctype html>2
<html lang="cs">3
<head>4
<meta charset="utf-8">5
<meta name="viewport" content="width=device-width, initial-scale=1">6
<title>CH-J Tools</title>7
<link rel="stylesheet" href="vendor/xterm/xterm.css">8
<link rel="stylesheet" href="theme.css">9
<link rel="stylesheet" href="styles.css">10
<link rel="stylesheet" href="diagnostics.css">11
</head>12
<body>13
<div class="window-titlebar" aria-hidden="true">14
<span class="window-titlebar-mark">CJ</span>15
<span class="window-titlebar-title">CH-J Tools</span>16
</div>17
<div id="vaultOverlay" class="vault-overlay" hidden>18
<form id="vaultForm" class="vault-dialog">19
<select id="vaultLanguageSelect" class="vault-language" aria-label="Jazyk" data-i18n-aria-label="settings.language" disabled></select>20
<div class="vault-mark">CJ</div>21
<span id="vaultModeText" class="eyebrow" data-i18n="vault.storage">ŠIFROVANÉ LOKÁLNÍ ÚLOŽIŠTĚ</span>22
<h1 id="vaultTitle" data-i18n="vault.unlockTitle">Odemknout Server Manager</h1>23
<p id="vaultDescription" data-i18n="vault.unlockIntro">Zadejte hlavní heslo. Heslo se neukládá na disk.</p>24
<label><span data-i18n="vault.password">Hlavní heslo</span><input id="vaultPassword" type="password" autocomplete="current-password" required></label>25
<label id="vaultConfirmLabel" hidden><span data-i18n="vault.confirmPassword">Potvrzení hesla</span><input id="vaultPasswordConfirm" type="password" autocomplete="new-password"></label>26
<p id="vaultMessage" class="form-message" aria-live="polite"></p>27
<button id="vaultSubmit" class="button primary wide" type="submit" data-i18n="vault.unlock">Odemknout</button>28
<button id="vaultDismiss" class="button wide" type="button" data-i18n="vault.cancel">Zrušit</button>29
<button id="biometricUnlockButton" class="button wide" type="button" hidden></button>30
<button id="showVaultResetButton" class="button ghost wide vault-reset-link" type="button" hidden data-i18n="vault.forgot">Zapomenuté heslo / obnovit vault</button>31
<div id="vaultResetPanel" class="vault-reset-panel" hidden>32
<strong data-i18n="vault.resetIrreversible">Obnovení nelze vrátit zpět</strong>33
<p data-i18n="vault.resetDescription">Smažou se všechny serverové profily, uložené host fingerprinty a další šifrovaná data. Instalované pluginy a nastavení aktualizací zůstanou zachované.</p>34
<label><span data-i18n="vault.resetInstruction">Pro potvrzení napište SMAZAT</span><input id="vaultResetConfirmation" maxlength="6" autocomplete="off" spellcheck="false"></label>35
<div class="reset-actions"><button id="cancelVaultResetButton" class="button" type="button" data-i18n="vault.cancel">Zrušit</button><button id="confirmVaultResetButton" class="button danger" type="button" data-i18n="vault.resetAction">Smazat data a obnovit heslo</button></div>36
</div>37
</form>38
</div>39
<div class="app-shell">40
<aside id="sidebar" class="sidebar">41
<div class="brand">42
<div class="brand-mark">CJ</div>43
<div><strong>CH-J</strong><span>Server Manager</span></div>44
</div>45
<div class="sidebar-modes" role="radiogroup" aria-label="Zobrazení menu" data-i18n-aria-label="nav.sidebarModes">46
<button type="button" class="sidebar-mode" role="radio" data-sidebar-mode="full" aria-label="Ikony a názvy" data-i18n-aria-label="nav.modeFull"><span aria-hidden="true">☰</span></button>47
<button type="button" class="sidebar-mode" role="radio" data-sidebar-mode="compact" aria-label="Jen ikony" data-i18n-aria-label="nav.modeCompact"><span aria-hidden="true">▮</span></button>48
<button type="button" class="sidebar-mode" role="radio" data-sidebar-mode="split" aria-label="Ikony ve dvou sloupcích" data-i18n-aria-label="nav.modeSplit"><span aria-hidden="true">▚</span></button>49
</div>50
<label class="navigation-edit-toggle"><input id="navigationEditToggle" type="checkbox"><span data-i18n="nav.editOrder">Upravit pořadí</span></label>51
<nav id="mainNavigation" aria-label="Hlavní navigace" data-i18n-aria-label="nav.aria">52
<button class="nav-button active" data-view="overview"><span>●</span><span class="nav-label" data-i18n="nav.overview">Přehled</span></button>53
<button class="nav-button" data-view="terminal"><span>>_</span><span class="nav-label" data-i18n="nav.terminal">Terminál</span></button>54
<button class="nav-button" data-view="profiles"><span>▤</span><span class="nav-label" data-i18n="nav.servers">Servery</span></button>55
<button class="nav-button" data-view="keychain"><span>⚿</span><span class="nav-label" data-i18n="nav.keychain">Keychain</span></button>56
<button class="nav-button" data-view="plugins"><span>◇</span><span class="nav-label" data-i18n="nav.plugins">Pluginy</span></button>57
<button class="nav-button" data-view="diagnostics"><span>⌁</span><span class="nav-label" data-i18n="nav.diagnostics">Diagnostika web serveru</span></button>58
<button id="hashToolButton" class="nav-button" type="button"><span>#</span><span class="nav-label" data-i18n="nav.hash">Hash a kontrolní součty</span></button>59
<button class="nav-button" data-view="settings"><span>⌘</span><span class="nav-label" data-i18n="nav.settings">Nastavení</span></button>60
</nav>61
<div id="openModulesNav" class="open-modules" hidden>62
<span class="open-modules-title" data-i18n="plugins.openModules">Otevřené moduly</span>63
<div id="openModulesItems" class="open-modules-items"></div>64
</div>65
<div class="sidebar-footer">66
<span class="status-dot"></span>67
<div><strong data-i18n="app.coreRunning">Core běží</strong><span id="sidebarVersion">—</span></div>68
</div>69
<div id="sidebarResizer" class="sidebar-resizer" role="separator" aria-orientation="vertical" tabindex="0" aria-valuemin="220" aria-valuemax="420" aria-label="Změnit šířku menu" data-i18n-aria-label="nav.resize"></div>70
</aside>71
<div id="sidebarTooltip" class="sidebar-tooltip" role="tooltip" hidden></div>73
<main>74
<header class="topbar">75
<button id="sidebarToggle" class="sidebar-toggle" type="button" aria-controls="sidebar" aria-expanded="true" aria-label="Skrýt menu" title="Skrýt menu"><span aria-hidden="true">☰</span></button>76
<div class="topbar-title"><span class="eyebrow" data-i18n="app.newArchitecture">NOVÁ ARCHITEKTURA</span><h1 id="viewTitle">Přehled Core</h1></div>77
<div id="terminalStrip" class="terminal-strip" hidden>78
<div id="terminalTabs" class="terminal-tabs" role="tablist" aria-label="SSH" data-i18n-aria-label="terminal.aria"></div>79
<div class="terminal-strip-tools">80
<div id="terminalLayout" class="terminal-layout" role="radiogroup" aria-label="Layout" data-i18n-aria-label="terminal.layout">81
<button type="button" role="radio" data-layout="single" data-label="terminal.single"><svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.5" y="2.5" width="13" height="11" rx="2"/></svg></button>82
<button type="button" role="radio" data-layout="split" data-label="terminal.sideBySide"><svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.5" y="2.5" width="13" height="11" rx="2"/><path d="M8 2.5v11"/></svg></button>83
<button type="button" role="radio" data-layout="stacked" data-label="terminal.stacked"><svg viewBox="0 0 16 16" aria-hidden="true"><rect x="1.5" y="2.5" width="13" height="11" rx="2"/><path d="M1.5 8h13"/></svg></button>84
</div>85
<button id="terminalSwap" class="terminal-layout-button" type="button" hidden><svg viewBox="0 0 16 16" aria-hidden="true"><path d="M2 5.5h11M10.5 3 13 5.5 10.5 8M14 10.5H3M5.5 8 3 10.5 5.5 13"/></svg></button>86
</div>87
</div>88
<div class="topbar-actions"><div class="runtime-badge"><span class="status-dot"></span><span id="runtimeText" data-i18n="app.initializing">Inicializace…</span></div><button id="lockVaultButton" class="button ghost" data-i18n="app.lock">Zamknout</button></div>89
</header>91
<section class="view active" data-view-panel="overview">92
<div class="hero">93
<div><span id="heroVersion" class="eyebrow">CORE</span><h2 data-i18n="overview.cleanTitle">Čistý základ nové aplikace</h2><p data-i18n="overview.cleanDescription">Oddělené služby, omezené IPC, plugin runtime a bezpečný aktualizační kanál.</p></div>94
<div class="hero-orbit"><span>CORE</span></div>95
</div>96
<div class="card-grid">97
<article class="card"><span class="card-icon blue">◎</span><div><small data-i18n="overview.coreApi">Core API</small><strong id="coreApiValue">—</strong><p data-i18n="overview.coreApiDescription">Stabilní aplikační kontrakt</p></div></article>98
<article class="card"><span class="card-icon green">#</span><div><small data-i18n="overview.dataSchema">Data schema</small><strong id="dataSchemaValue">—</strong><p data-i18n="overview.dataSchemaDescription">Verzované uživatelské úložiště</p></div></article>99
<article class="card"><span class="card-icon violet">◇</span><div><small data-i18n="overview.installedPlugins">Nainstalované pluginy</small><strong id="pluginCountValue">0</strong><p data-i18n="overview.noToolsNeeded">Core funguje i bez Tools</p></div></article>100
</div>101
<article class="panel roadmap-panel">102
<div><span class="eyebrow" data-i18n="overview.currentSlice">AKTUÁLNÍ ŘEZ</span><h3 data-i18n="overview.sliceTitle">Vault + profily + SSH terminál</h3><p data-i18n="overview.sliceDescription">Funkční připojení s povinnou kontrolou host klíče a odděleným SessionManagerem.</p></div>103
<div class="progress"><span></span></div>104
</article>105
</section>107
<section class="view" data-view-panel="terminal">108
<div id="terminalPanes" class="terminal-panes">109
<article id="terminalPane" class="terminal-panel" data-kind="disconnected">110
<div class="terminal-pane-heading">111
<strong>T1</strong>112
<div class="terminal-toolbar">113
<label><span class="sr-only" data-i18n="terminal.server">Server</span><select id="terminalProfileSelect"><option value="" data-i18n="terminal.selectServer">Vyberte server…</option></select></label>114
<label id="credentialLabel"><span id="credentialLabelText" class="sr-only" data-i18n="terminal.password">Heslo</span><input id="terminalCredential" type="password" autocomplete="off" placeholder="SSH heslo" data-i18n-placeholder="terminal.sshPassword"></label>115
<button id="jumpToggle" class="button jump-toggle" type="button" aria-expanded="false"><span aria-hidden="true">⇢</span><span id="jumpToggleText" class="jump-toggle-text"></span></button>116
<button id="connectButton" class="button primary" type="button" data-i18n="terminal.connect">Připojit</button>117
</div>118
<div class="terminal-session">119
<span id="terminalState" class="connection-badge disconnected" data-i18n="terminal.disconnected">Odpojeno</span>120
<span id="terminalHost" class="terminal-host" data-i18n="terminal.noProfile">Nejprve vytvořte profil serveru.</span>121
<span id="terminalLatency" class="terminal-latency" hidden></span>122
<button id="disconnectButton" class="button" type="button" disabled data-i18n="terminal.disconnect">Odpojit</button>123
</div>124
</div>125
<div id="terminal" class="terminal-screen" aria-label="SSH terminál" data-i18n-aria-label="terminal.aria"></div>126
</article>127
<div id="terminalDivider" class="terminal-divider" role="separator" tabindex="0" aria-orientation="vertical" aria-valuemin="20" aria-valuemax="80" aria-label="Resize" data-i18n-aria-label="terminal.resize" hidden></div>128
</div>129
</section>131
<section class="view" data-view-panel="keychain">132
<div class="panel keychain-panel">133
<h2>Keychain</h2>134
<p data-i18n="keychain.description"></p>135
<div class="keychain-tabs" role="tablist">136
<button type="button" role="tab" class="keychain-tab active" data-keychain-tab="openpgp" aria-selected="true">PGP</button>137
<button type="button" role="tab" class="keychain-tab" data-keychain-tab="ssh" aria-selected="false">SSH</button>138
<button type="button" role="tab" class="keychain-tab" data-keychain-tab="passwords" aria-selected="false" data-i18n="passwords.title">Hesla</button>139
</div>140
<div id="keychainKeysPane">141
<div class="keychain-toolbar">142
<button class="tool-button" type="button" data-generator-mode="openpgp" data-keychain-only="openpgp"><span aria-hidden="true">+</span><span data-i18n="keychain.new">Nový</span></button>143
<button class="tool-button" type="button" data-generator-mode="ssh" data-keychain-only="ssh"><span aria-hidden="true">+</span><span data-i18n="keychain.new">Nový</span></button>144
<button id="keychainImportOpen" class="tool-button" type="button"><span aria-hidden="true">⤓</span><span data-i18n="keychain.importShort">Importovat</span></button>145
<details class="tool-menu" id="keychainExportMenu"><summary class="tool-button"><span aria-hidden="true">⤒</span><span data-i18n="keychain.exportShort">Exportovat</span></summary><div class="tool-menu-list" id="keychainExportList"></div></details>146
<span class="toolbar-spacer"></span>147
<select id="keychainCategory" aria-label="Kategorie" data-i18n-aria-label="keychain.category"><option value="all" data-i18n="keychain.all">Všechny klíče</option><option value="post-quantum" data-i18n="keychain.pqc">Post-Quantum / Hybrid</option><option value="classic" data-i18n="keychain.classic">Klasické algoritmy</option></select>148
<input id="keychainFilter" type="search" autocomplete="off" spellcheck="false" placeholder="Filtr" data-i18n-placeholder="keychain.filter">149
</div>150
<p id="keychainMessage" class="form-message" aria-live="polite"></p>151
<div class="keychain-table-wrap">152
<table class="keychain-table">153
<thead><tr><th data-i18n="keychain.col.type">Typ</th><th data-i18n="keychain.col.name">Jméno</th><th data-i18n="keychain.col.email" data-keychain-only="openpgp">E-mail</th><th data-i18n="keychain.col.created">Vytvořeno</th><th data-i18n="keychain.col.fingerprint">Otisk</th><th data-i18n="keychain.col.validity">Platnost</th><th data-i18n="keychain.col.server" data-keychain-only="openpgp">Server</th></tr></thead>154
<tbody id="keychainRows"></tbody>155
</table>156
</div>157
<div class="keychain-footer"><span id="keychainCount"></span><label class="check-label"><span data-i18n="keychain.secretOnly">Zobrazit pouze tajné klíče</span><input id="keychainSecretOnly" type="checkbox"></label></div>158
<p class="hint" data-i18n="keychain.serverIntro" data-keychain-only="openpgp"></p>159
<div id="keychainDetail" class="keychain-detail" hidden>160
<div class="keychain-detail-head"><span id="keychainAvatar" class="keychain-avatar" aria-hidden="true"></span><div><strong id="keychainDetailName"></strong><span id="keychainDetailSub"></span></div></div>161
<div class="keychain-tabs keychain-subtabs" role="tablist">162
<button type="button" class="keychain-tab active" data-keychain-detail="key" data-i18n="keychain.tab.key">Klíč</button>163
<button type="button" class="keychain-tab" data-keychain-detail="uids" data-keychain-only="openpgp" data-i18n="keychain.tab.uids">ID uživatele</button>164
<button type="button" class="keychain-tab" data-keychain-detail="subkeys" data-keychain-only="openpgp" data-i18n="keychain.tab.subkeys">Podklíče</button>165
</div>166
<div id="keychainDetailBody"></div>167
<label id="keychainDetailPassphraseField" class="keychain-passphrase"><span data-i18n="keychain.keyPassphrase">Heslo klíče (podpis, úpravy, odvolání)</span><input id="keychainDetailPassphrase" type="password" autocomplete="off"></label>168
<div id="keychainDetailActions" class="keychain-actions"></div>169
</div>170
<details id="keySyncBar" class="keysync-bar" data-keychain-only="openpgp">171
<summary><span id="keySyncSummary">KeySync</span><span id="keySyncLast" class="hint"></span></summary>172
<div class="keysync-body">173
<div class="keysync-head"><span id="keySyncInterval" class="hint"></span><button id="keySyncRun" class="button small" type="button" data-i18n="keysync.runNow">Zkontrolovat nyní</button></div>174
<div id="keySyncJobs"></div>175
</div>176
</details>177
<dialog id="keychainImportDialog" class="profile-import-dialog" aria-labelledby="keychainImportTitle">178
<h2 id="keychainImportTitle" data-i18n="keychain.importShort">Importovat</h2>179
<form id="keychainForm" class="profile-form">180
<label><span data-i18n="keychain.importLabel"></span><input id="keychainLabel" maxlength="200" autocomplete="off"></label>181
<label><span data-i18n="keychain.passphrase"></span><input id="keychainPassphrase" type="password" autocomplete="off"></label>182
<div class="button-row"><button id="keychainImport" class="button primary" type="submit" data-i18n="keychain.import"></button><button id="keychainImportCancel" class="button" type="button" data-i18n="vault.cancel">Zrušit</button></div>183
</form>184
</dialog>185
</div>186
</div>187
<div id="keychainPasswordsPane" class="panel keychain-passwords" hidden>188
<h2 data-i18n="passwords.title">Hesla</h2>189
<p data-i18n="passwords.description">Hesla se ukládají jen do šifrovaného trezoru. Zobrazení nebo zkopírování vyžaduje ověření.</p>190
<div class="keychain-toolbar"><button class="button" type="button" data-generator-mode="password" data-i18n="keychain.openPasswordGenerator"></button></div>191
<form id="passwordForm" class="profile-form">192
<input id="passwordId" type="hidden">193
<label><span data-i18n="passwords.label">Název</span><input id="passwordLabel" maxlength="200" autocomplete="off" required></label>194
<div class="form-columns"><label><span data-i18n="passwords.username">Uživatel</span><input id="passwordUsername" maxlength="256" autocomplete="off" spellcheck="false"></label><label><span data-i18n="passwords.url">Adresa / host</span><input id="passwordUrl" maxlength="2048" autocomplete="off" spellcheck="false"></label></div>195
<label><span data-i18n="passwords.password">Heslo</span><input id="passwordValue" type="password" maxlength="4096" autocomplete="new-password"></label>196
<label><span data-i18n="passwords.note">Poznámka</span><textarea id="passwordNote" maxlength="4000" rows="2"></textarea></label>197
<div class="button-row"><button class="button primary" type="submit" data-i18n="passwords.save">Uložit heslo</button><button id="passwordNew" class="button" type="button" data-i18n="passwords.new">Nové heslo</button></div>198
</form>199
<p id="passwordMessage" class="form-message" aria-live="polite"></p>200
<div id="passwordRows"></div>201
</div>202
<dialog id="secretDialog" class="profile-import-dialog" aria-labelledby="secretTitle">203
<h2 id="secretTitle"></h2>204
<div id="secretAuth" class="profile-form" hidden>205
<label><span data-i18n="secret.vaultPassword">Heslo trezoru</span><input id="secretVaultPassword" type="password" autocomplete="off"></label>206
<div class="button-row"><button id="secretAuthConfirm" class="button primary" type="button" data-i18n="secret.confirm">Ověřit a zobrazit</button></div>207
</div>208
<textarea id="secretText" class="secret-text" readonly rows="12" spellcheck="false" hidden></textarea>209
<p id="secretMessage" class="form-message" aria-live="polite"></p>210
<div class="button-row"><button id="secretCopy" class="button" type="button" data-i18n="secret.copy" hidden>Kopírovat</button><button id="secretClose" class="button" type="button" data-i18n="secret.close">Zavřít</button></div>211
</dialog>212
</section>213
<section class="view" data-view-panel="profiles">214
<div class="section-heading"><div><span class="eyebrow" data-i18n="profiles.eyebrow">ŠIFROVANÉ PROFILY</span><h2 data-i18n="profiles.title">Správa serverů</h2></div><button id="newProfileButton" class="button" data-i18n="profiles.new">Nový server</button></div>215
<article class="panel profile-transfer-panel">216
<div class="button-row"><button id="importProfilesButton" class="button" type="button" data-i18n="transfer.import">Importovat</button><select id="profileExportFormat" aria-label="Formát exportu" data-i18n-aria-label="transfer.format"><option value="json">JSON</option><option value="csv">CSV</option></select><button id="exportProfilesButton" class="button" type="button" data-i18n="transfer.export">Exportovat</button><label class="checkbox-label"><input id="exportSelectedProfiles" type="checkbox"><span data-i18n="transfer.selectedOnly">Pouze označené servery</span></label></div>217
<p data-i18n="transfer.secrets">Přenáší se pouze název, původní adresa, uživatel a port. Bez hesel, klíčů, tokenů a jejich cest.</p>218
<p id="profileTransferMessage" class="form-message" aria-live="polite"></p>219
</article>220
<dialog id="profileImportDialog" class="profile-import-dialog" aria-labelledby="profileImportTitle">221
<h2 id="profileImportTitle" data-i18n="transfer.preview">Náhled importu</h2><p data-i18n="transfer.authRequired">Importované a aktualizované profily vyžadují nové přiřazení autentizace. Aktualizace odstraní dříve uložené heslo i cestu ke klíči.</p>222
<p id="profileImportSummary"></p><div class="profile-preview-scroll"><table><thead><tr><th data-i18n="profiles.name">Název</th><th data-i18n="profiles.host">Host / IP</th><th data-i18n="profiles.user">Uživatel</th><th data-i18n="profiles.port">Port</th><th data-i18n="transfer.duplicate">Duplicita</th></tr></thead><tbody id="profileImportRows"></tbody></table></div>223
<label><span data-i18n="transfer.duplicates">Při shodě adresy, portu a uživatele</span><select id="profileDuplicatePolicy"><option value="skip" data-i18n="transfer.skip">Přeskočit</option><option value="update" data-i18n="transfer.update">Aktualizovat</option><option value="create" data-i18n="transfer.create">Vytvořit nový profil</option></select></label>224
<p id="profileImportMessage" class="form-message" aria-live="polite"></p><div class="button-row"><button id="confirmProfileImport" type="button" class="button primary" data-i18n="transfer.confirm">Potvrdit import</button><button id="cancelProfileImport" type="button" class="button" data-i18n="vault.cancel">Zrušit</button></div>225
</dialog>226
<div class="profiles-layout">227
<article class="panel profile-list-panel">228
<div id="profileRows" class="profile-rows"></div>229
</article>230
<form id="profileForm" class="panel profile-form">231
<input id="profileId" type="hidden">232
<label><span data-i18n="profiles.name">Název</span><input id="profileLabel" maxlength="100" placeholder="Produkční server" data-i18n-placeholder="profiles.namePlaceholder" required></label>233
<div class="form-columns"><label><span data-i18n="profiles.host">Host / IP</span><input id="profileHost" placeholder="192.168.1.20" required></label><label><span data-i18n="profiles.port">Port</span><input id="profilePort" type="number" min="1" max="65535" value="22" required></label></div>234
<label><span data-i18n="profiles.user">Uživatel</span><input id="profileUsername" maxlength="128" placeholder="root" required></label>235
<label><span data-i18n="ssh.kexPolicy">Politika KEX</span><select id="profileKexPolicy"><option value="prefer-hybrid" data-i18n="ssh.kexPrefer">Upřednostnit hybridní KEX</option><option value="hybrid-only" data-i18n="ssh.kexStrict">Pouze hybridní KEX</option></select></label>236
<label><span data-i18n="profiles.auth">Ověření</span><select id="profileAuthMethod"><option value="password" data-i18n="profiles.authPassword">Heslo při připojení</option><option value="privateKey" data-i18n="profiles.authKey">Soukromý klíč</option><option value="keychain" data-i18n="profiles.authKeychain">Klíč z Keychainu</option></select></label>237
<label id="keychainKeyField" hidden><span data-i18n="profiles.keychainKey">SSH klíč z Keychainu</span><select id="profileKeychainKeyId"></select></label>238
<label><span data-i18n="terminal.jumpHost">Jump host</span><select id="profileJumpProfileId"></select></label>239
<div id="passwordStorageField" class="password-storage-field">240
<label class="check-label"><input id="profileStorePassword" type="checkbox"><span id="profileStorePasswordText" data-i18n="profiles.storePassword">Uložit heslo do šifrovaného vaultu</span></label>241
<label><span id="profileStoredPasswordText" data-i18n="profiles.storedPassword">SSH heslo</span><input id="profileStoredPassword" type="password" maxlength="1024" autocomplete="new-password" placeholder="Zadejte heslo k uložení" data-i18n-placeholder="profiles.storePasswordPlaceholder" disabled></label>242
<small data-i18n="profiles.passwordSecurity">Heslo se ukládá pouze uvnitř šifrovaného vaultu.</small>243
</div>244
<div id="privateKeyField" class="key-field" hidden><label><span data-i18n="profiles.privateKey">Soukromý klíč</span><input id="profilePrivateKeyPath" readonly placeholder="Vyberte soubor…" data-i18n-placeholder="profiles.selectFile"></label><button id="selectPrivateKeyButton" class="button" type="button" data-i18n="profiles.select">Vybrat</button></div>245
<p id="profileMessage" class="form-message" aria-live="polite"></p>246
<div class="button-row"><button class="button primary" type="submit" data-i18n="profiles.save">Uložit profil</button><button id="deleteProfileButton" class="button danger" type="button" hidden data-i18n="profiles.delete">Smazat</button></div>247
</form>248
</div>249
</section>251
<section class="view module-view" data-view-panel="module">252
<header class="module-bar">253
<div id="moduleTabs" class="module-tabs" role="tablist" aria-label="Otevřené moduly" data-i18n-aria-label="plugins.openModules"></div>254
<div class="module-bar-actions">255
<button id="moduleDetach" class="module-action" type="button" data-i18n="chrome.detach">Otevřít v okně</button>256
<button id="moduleCollapse" class="module-action" type="button" data-i18n="chrome.collapse">Sbalit</button>257
<button id="moduleClose" class="module-action" type="button" data-i18n="chrome.close">Zavřít</button>258
</div>259
</header>260
<div id="moduleHostArea" class="module-host-area"></div>261
</section>263
<section class="view" data-view-panel="plugins">264
<div class="section-heading"><div><span class="eyebrow" data-i18n="plugins.eyebrow">NÁSTROJE APLIKACE</span><h2 data-i18n="plugins.title">Správa pluginů</h2></div></div>265
<p class="plugins-description" data-i18n="plugins.description">Zvolte, které nástroje chcete používat a mít po ruce v levém menu.</p>266
<article class="panel table-panel">267
<div class="table-header installed-plugin-row"><span data-i18n="plugins.plugin">Plugin</span><span data-i18n="plugins.version">Verze</span><span data-i18n="plugins.show">Zobrazit</span><span data-i18n="plugins.inMenu">V menu</span><span></span></div>268
<div id="pluginRows" class="plugin-rows"></div>269
</article>270
<details class="plugin-catalog-disclosure">271
<summary data-i18n="plugins.more">Další pluginy a aktualizace</summary>272
<div class="plugin-catalog-toolbar"><div class="catalog-controls"><label><span data-i18n="plugins.channelFilter">Kanál katalogu</span><select id="pluginViewChannelSelect"><option value="alpha">Alpha</option><option value="beta">Beta</option><option value="stable">Stable</option><option value="all" data-i18n="channels.all">Vše</option></select></label><button id="checkPluginCatalogButton" class="button" data-i18n="plugins.checkCatalog">Načíst webový katalog</button></div><span id="pluginCatalogSource"></span></div>273
<article class="panel table-panel">274
<div class="table-header plugin-table-row"><span data-i18n="plugins.plugin">Plugin</span><span data-i18n="plugins.version">Verze</span><span data-i18n="plugins.permissions">Oprávnění</span><span></span></div>275
<div id="pluginCatalogRows" class="plugin-rows"><div class="plugin-catalog-empty" data-i18n="plugins.catalogBeforeCheck">Nejprve načtěte katalog z povoleného update serveru.</div></div>276
</article>277
</details>278
</section>280
<section class="view" data-view-panel="diagnostics" id="diagnosticsView"></section>282
<section class="view" data-view-panel="settings">283
<div class="section-heading"><div><span class="eyebrow" data-i18n="settings.eyebrow">LOKÁLNÍ KONFIGURACE</span><h2 data-i18n="settings.title">Nastavení Core</h2></div></div>284
<div class="settings-layout">285
<div id="settingsTabs" class="settings-tabs" role="tablist" aria-orientation="vertical">286
<button type="button" role="tab" data-settings-tab="general" data-i18n="settings.tab.general">Obecné</button>287
<button type="button" role="tab" data-settings-tab="updates" data-i18n="settings.tab.updates">Aktualizace</button>288
<button type="button" role="tab" data-settings-tab="servers" data-i18n="settings.tab.servers">Dostupnost serverů</button>289
<button type="button" role="tab" data-settings-tab="suggest" data-i18n="settings.tab.suggest">Našeptávač</button>290
<button type="button" role="tab" data-settings-tab="appearance" data-i18n="settings.tab.appearance">Vzhled terminálu</button>291
<button type="button" role="tab" data-settings-tab="security" data-i18n="settings.tab.security">Zabezpečení</button>292
<button type="button" role="tab" data-settings-tab="standby" data-i18n="settings.tab.standby">Standby Helper</button>293
<button type="button" role="tab" data-settings-tab="legal" data-i18n="settings.tab.legal">Právní informace</button>294
</div>295
<div class="settings-pages">296
<form id="settingsForm" class="panel settings-panel">297
<div class="settings-page" data-settings-page="general">298
<label><span data-i18n="settings.language">Jazyk</span><select id="languageSelect"></select></label>299
</div>300
<div class="settings-page" data-settings-page="updates">301
<label><span data-i18n="settings.updateChannel">Kanál aktualizací</span><select id="channelSelect"><option value="alpha">Alpha</option><option value="beta">Beta</option><option value="stable">Stable</option><option value="all" data-i18n="channels.all">Vše</option></select></label>302
<label><span data-i18n="settings.pluginChannel">Kanál pluginů</span><select id="pluginChannelSelect"><option value="alpha">Alpha</option><option value="beta">Beta</option><option value="stable">Stable</option><option value="all" data-i18n="channels.all">Vše</option></select></label>303
<label class="check-label"><input id="autoCheckInput" type="checkbox"><span data-i18n="settings.autoCheck">Automaticky kontrolovat při startu</span></label>304
<div class="field"><span data-i18n="settings.allowedServers">Povolené update servery</span><code id="baseUrlsText"></code></div>305
</div>306
<div class="settings-page" data-settings-page="servers">307
<div class="settings-group">308
<label class="check-label"><input id="monitoringEnabled" type="checkbox"><span data-i18n="availability.settingsEnabled">Automaticky kontrolovat dostupnost serverů</span></label>309
<label><span data-i18n="availability.settingsInterval">Interval kontroly</span><select id="monitoringInterval"></select></label>310
<div class="button-row"><button id="refreshAvailabilityButton" class="button" type="button" data-i18n="availability.refreshNow">Obnovit dostupnost</button></div>311
<small data-i18n="availability.meaning">Offline znamená, že SSH port není dostupný z této sítě; samotný server přitom může běžet.</small>312
</div>313
</div>314
<div class="settings-page" data-settings-page="suggest">315
<div class="settings-group">316
<label class="check-label"><input id="suggestEnabled" type="checkbox"><span data-i18n="terminal.suggest.enabled">Nabízet příkazy a cesty při psaní</span></label>317
<label class="check-label"><input id="suggestRepair" type="checkbox"><span data-i18n="terminal.suggest.repair">Navrhovat opravy cest ve stylu Windows (\ na /)</span></label>318
<label><span data-i18n="terminal.suggest.customLabel">Můj slovník, jeden příkaz na řádek</span><textarea id="suggestCustom" rows="4" spellcheck="false" autocomplete="off" autocapitalize="off"></textarea></label>319
<label><span data-i18n="terminal.suggest.hiddenLabel">Skryté návrhy, jeden příkaz na řádek</span><textarea id="suggestHidden" rows="3" spellcheck="false" autocomplete="off" autocapitalize="off"></textarea></label>320
<small data-i18n="terminal.suggest.dictionaryHint">Slovník je v šifrovaném trezoru a dostupný po odemknutí. Hesla a klíče do něj nepište.</small>321
</div>322
</div>323
<div class="settings-page" data-settings-page="appearance">324
<div class="settings-group">325
<label><span data-i18n="terminal.appearance.profile">Profil</span><select id="appearanceProfile"></select></label>326
<div class="button-row"><input id="appearanceProfileName" maxlength="40" autocomplete="off" data-i18n-placeholder="terminal.appearance.profileNamePlaceholder" placeholder="Název profilu"><button id="appearanceProfileSave" class="button" type="button" data-i18n="terminal.appearance.profileSave">Uložit jako nový profil</button><button id="appearanceProfileDelete" class="button" type="button" data-i18n="terminal.appearance.profileDelete">Smazat profil</button></div>327
<pre id="appearancePreview" class="terminal-appearance-preview" dir="ltr">root@server:~# systemctl status nginx328
Active: active (running)329
0123456789 Il1 O0 /etc/nginx/330
<span id="appearanceSwatches" class="terminal-appearance-swatches"></span></pre>331
</div>332
<details class="settings-group" open>333
<summary data-i18n="terminal.appearance.fontSection">Písmo a kurzor</summary>334
<label><span data-i18n="terminal.appearance.font">Písmo</span><select id="appearanceFont"></select></label>335
<label id="appearanceCustomRow" hidden><span data-i18n="terminal.appearance.fontName">Název písma v počítači</span><input id="appearanceCustomFont" maxlength="80" spellcheck="false" autocomplete="off"></label>336
<small id="appearanceFontWarning" hidden data-i18n="terminal.appearance.proportional">Toto písmo nemá stejnou šířku znaků, takže se tabulky a programy jako htop mohou rozhodit.</small>337
<label><span data-i18n="terminal.appearance.size">Velikost písma</span><input id="appearanceSize" type="number" min="8" max="32" step="1"></label>338
<label><span data-i18n="terminal.appearance.weight">Tloušťka</span><select id="appearanceWeight"><option value="normal" data-i18n="terminal.appearance.normal">Normální</option><option value="bold" data-i18n="terminal.appearance.bold">Tučné</option></select></label>339
<label><span data-i18n="terminal.appearance.lineHeight">Řádkování</span><input id="appearanceLineHeight" type="number" min="1" max="2" step="0.1"></label>340
<label><span data-i18n="terminal.appearance.letterSpacing">Rozestup znaků</span><input id="appearanceLetterSpacing" type="number" min="-2" max="5" step="0.5"></label>341
<label><span data-i18n="terminal.appearance.cursor">Tvar kurzoru</span><select id="appearanceCursorStyle"><option value="block" data-i18n="terminal.appearance.cursorBlock">Blok</option><option value="underline" data-i18n="terminal.appearance.cursorUnderline">Podtržítko</option><option value="bar" data-i18n="terminal.appearance.cursorBar">Svislá čára</option></select></label>342
</details>343
<details class="settings-group" open>344
<summary data-i18n="terminal.appearance.colorSection">Barvy</summary>345
<div class="terminal-appearance-colors"><label><span data-i18n="terminal.appearance.foreground">Text</span><input id="appearanceForeground" type="color"></label><label><span data-i18n="terminal.appearance.background">Pozadí</span><input id="appearanceBackground" type="color"></label><label><span data-i18n="terminal.appearance.cursorColor">Kurzor</span><input id="appearanceCursor" type="color"></label><label><span data-i18n="terminal.appearance.selection">Výběr</span><input id="appearanceSelection" type="color"></label></div>346
</details>347
<details class="settings-group">348
<summary data-i18n="terminal.appearance.ansiSection">16 barev ANSI</summary>349
<div class="terminal-appearance-colors terminal-appearance-ansi" dir="ltr"><label><span>black</span><input data-ansi="black" type="color"></label><label><span>red</span><input data-ansi="red" type="color"></label><label><span>green</span><input data-ansi="green" type="color"></label><label><span>yellow</span><input data-ansi="yellow" type="color"></label><label><span>blue</span><input data-ansi="blue" type="color"></label><label><span>magenta</span><input data-ansi="magenta" type="color"></label><label><span>cyan</span><input data-ansi="cyan" type="color"></label><label><span>white</span><input data-ansi="white" type="color"></label><label><span>brightBlack</span><input data-ansi="brightBlack" type="color"></label><label><span>brightRed</span><input data-ansi="brightRed" type="color"></label><label><span>brightGreen</span><input data-ansi="brightGreen" type="color"></label><label><span>brightYellow</span><input data-ansi="brightYellow" type="color"></label><label><span>brightBlue</span><input data-ansi="brightBlue" type="color"></label><label><span>brightMagenta</span><input data-ansi="brightMagenta" type="color"></label><label><span>brightCyan</span><input data-ansi="brightCyan" type="color"></label><label><span>brightWhite</span><input data-ansi="brightWhite" type="color"></label></div>350
</details>351
<details class="settings-group">352
<summary data-i18n="terminal.appearance.shareSection">Import a export</summary>353
<small data-i18n="terminal.appearance.shareHint">Profil se přenáší jako text JSON. Export ho sem vloží, import ho odtud načte.</small>354
<textarea id="appearanceShare" rows="6" spellcheck="false" autocomplete="off" dir="ltr"></textarea>355
<div class="button-row"><button id="appearanceExport" class="button" type="button" data-i18n="terminal.appearance.export">Exportovat aktuální vzhled</button><button id="appearanceImport" class="button" type="button" data-i18n="terminal.appearance.import">Importovat jako nový profil</button></div>356
</details>357
<div class="button-row"><button id="appearanceReset" class="button" type="button" data-i18n="terminal.appearance.reset">Obnovit výchozí vzhled CH-J</button><span id="appearanceStatus" aria-live="polite"></span></div>358
</div>359
<div class="button-row"><button class="button primary" type="submit" data-i18n="settings.save">Uložit nastavení</button><span id="settingsStatus"></span></div>360
</form>361
<div class="settings-page settings-updates" data-settings-page="updates">362
<div class="section-heading updates-heading"><div><h2 data-i18n="updates.title">Aktualizace Core</h2></div><div class="catalog-controls"><label><span data-i18n="updates.channelFilter">Kanál</span><select id="updateViewChannelSelect"><option value="alpha">Alpha</option><option value="beta">Beta</option><option value="stable">Stable</option><option value="all" data-i18n="channels.all">Vše</option></select></label><span class="alpha-badge">LAN</span></div></div>363
<article class="panel update-panel">364
<div class="update-version"><small data-i18n="updates.installed">Nainstalovaná verze</small><strong id="currentVersion">—</strong><span id="updateChannel">kanál alpha</span></div>365
<div class="update-copy"><h3 id="updateHeadline" data-i18n="updates.ready">Připraveno ke kontrole</h3><p id="updateMessage" data-i18n="updates.integrityIntro">Core ověří platformu, architekturu, velikost a SHA-512.</p><code id="updateHash" hidden></code></div>366
<div class="button-row">367
<button id="checkUpdateButton" class="button primary" data-i18n="updates.check">Zkontrolovat</button>368
<button id="downloadUpdateButton" class="button" disabled data-i18n="updates.download">Stáhnout a ověřit</button>369
<button id="installUpdateButton" class="button primary" hidden data-i18n="updates.install">Spustit instalátor</button>370
<button id="revealUpdateButton" class="button ghost" hidden data-i18n="updates.reveal">Zobrazit soubor</button>371
</div>372
</article>373
<article class="panel release-catalog-panel">374
<div class="release-catalog-header"><div><span class="eyebrow" data-i18n="updates.catalogEyebrow">KATALOG VYDÁNÍ</span><h3 data-i18n="updates.catalogTitle">Dostupná vydání</h3></div><span id="updateReleaseCount">0</span></div>375
<div id="updateReleaseRows" class="update-release-rows"><div class="update-release-empty" data-i18n="updates.catalogBeforeCheck">Po kontrole se zde zobrazí všechna kompatibilní vydání.</div></div>376
</article>377
<div class="notice"><strong data-i18n="updates.alphaSecurity">Bezpečnostní režim</strong><p data-i18n="updates.alphaDescription">SHA-512 kontroluje integritu stažení. Instalace se nespouští automaticky a zdroj je omezený na povolenou HTTPS doménu.</p></div>378
</div>379
<form id="securityForm" class="panel settings-panel security-panel settings-page" data-settings-page="security">380
<h3 data-i18n="security.title">Zabezpečení</h3>381
<p id="biometricStatus" aria-live="polite"></p>382
<p id="biometricProtection"></p>383
<div class="button-row">384
<button id="enableBiometricsButton" class="button" type="button" data-i18n="security.enable">Zapnout biometrické odemykání</button>385
<button id="disableBiometricsButton" class="button" type="button" data-i18n="security.remove">Vypnout a odstranit registraci</button>386
<button id="testBiometricsButton" class="button" type="button" data-i18n="security.test">Otestovat systémové ověření</button>387
</div>388
<label class="check-label"><input id="autoLockEnabled" type="checkbox"><span data-i18n="security.autoLock">Automaticky zamknout při nečinnosti</span></label>389
<label><span data-i18n="security.timeout">Doba nečinnosti</span><select id="autoLockMinutes"><option value="0" data-i18n="security.never">Nikdy</option><option value="1">1 min</option><option value="5">5 min</option><option value="10">10 min</option><option value="15">15 min</option><option value="30">30 min</option><option value="60">60 min</option></select></label>390
<label class="check-label"><input id="lockOnBlur" type="checkbox"><span data-i18n="security.blur">Zamknout při ztrátě zaměření aplikace</span></label>391
<label class="check-label"><input id="requireSystemAuthentication" type="checkbox"><span data-i18n="security.sensitive">Vyžadovat systémové ověření citlivých operací</span></label>392
<p data-i18n="security.scope">Ověření chrání odstranění profilu, instalaci/odstranění pluginu, spuštění instalátoru a reset odemčeného Vaultu. Příkazy vzdáleného terminálu tímto ověřením chráněny nejsou.</p>393
<p data-i18n="security.lockEffect">Zamknutí ukončí aktivní SSH relace, zavře pluginy a zastaví diagnostiku.</p>394
<label><span data-i18n="security.confirmPassword">Hlavní heslo pro změnu pravidel zamykání</span><input id="securityMasterPassword" type="password" autocomplete="current-password" required></label>395
<div class="button-row"><button class="button primary" type="submit" data-i18n="settings.save">Uložit nastavení</button><span id="securityMessage" aria-live="polite"></span></div>396
</form>397
<section id="standbyPanel" class="panel settings-panel settings-page" data-settings-page="standby" hidden>398
<h3 data-i18n="standby.title">CH-J Standby Helper</h3>399
<p data-i18n="standby.description">Malý samostatný proces bez okna. Přidá do kontextového menu systému ověření a podpis souboru OpenPGP a spouští jen malé okno aplikace, nikdy celé hlavní okno. Podpis vždy vyžaduje výběr klíče a heslo.</p>400
<label class="check-label"><input id="standbyEnabled" type="checkbox"><span data-i18n="standby.enabled">Zapnout Standby Helper</span></label>401
<fieldset id="standbyOptions" class="standby-options">402
<label class="check-label"><input id="standbyMenuVerify" type="checkbox"><span data-i18n="standby.menuVerify">Položka „Ověřit podpis“ v kontextovém menu</span></label>403
<label class="check-label"><input id="standbyMenuSign" type="checkbox"><span data-i18n="standby.menuSign">Položka „Podepsat (OpenPGP)“ v kontextovém menu</span></label>404
<label class="check-label"><input id="standbyLogin" type="checkbox"><span data-i18n="standby.login">Spouštět na pozadí po přihlášení</span></label>405
<label id="standbyMonitorRow" class="check-label" hidden><input id="standbyMonitorEnabled" type="checkbox"><span data-i18n="standby.monitorEnabled">Hlídat dostupnost uložených serverů na pozadí (i při zavřené aplikaci)</span></label>406
<fieldset id="standbyMonitorOptions" class="standby-options" hidden>407
<label><span data-i18n="standby.monitorCheck">Výchozí kontrola</span> <select id="standbyMonitorCheck"><option value="ssh" data-i18n="standby.checkSsh">SSH port serveru (obvykle 22)</option><option value="https" data-i18n="standby.checkHttps">Web HTTPS (port 443)</option><option value="custom" data-i18n="standby.checkCustom">Vlastní port</option></select></label>408
<label id="standbyMonitorPortRow"><span data-i18n="standby.monitorPort">Port</span> <input id="standbyMonitorPort" type="number" min="1" max="65535" step="1" inputmode="numeric"></label>409
<label><span data-i18n="standby.monitorInterval">Interval kontrol</span> <select id="standbyMonitorInterval"><option value="30" data-i18n="standby.interval30">30 sekund</option><option value="60" data-i18n="standby.interval60">60 sekund (doporučeno)</option><option value="300" data-i18n="standby.interval300">5 minut</option></select></label>410
<div class="standby-servers"><span data-i18n="standby.monitorServers">Sledované servery</span><div id="standbyMonitorServers"></div><p class="hint" data-i18n="standby.monitorChecksHint">Kontroly oddělené čárkou, např. ssh, web-443, smb-445, dns-53, ftp-21, rdp, 8080. Prázdné pole = výchozí kontrola.</p></div>411
<label id="standbyMonitorAddressesRow" class="check-label" hidden><input id="standbyMonitorAddresses" type="checkbox"><span data-i18n="standby.monitorAddresses">Zobrazovat adresy serverů ve widgetu</span></label>412
<p class="hint" data-i18n="standby.monitorNote">Pro helper se ukládá seznam serverů (název, adresa, port – bez uživatelů, hesel a klíčů) nešifrovaně v datové složce aplikace, přístupný jen tvému účtu; po vypnutí se smaže. Servery za jump hostem se nehlídají. Otevřený port ještě neznamená plně funkční službu. Hlídání běží, když helper běží na pozadí.</p>413
</fieldset>414
</fieldset>415
<p id="standbyStatus" aria-live="polite"></p>416
<p class="hint" id="standbyPlatformNote"></p>417
<div class="button-row"><button id="standbyRefresh" class="button" type="button" data-i18n="standby.refresh">Obnovit stav</button><span id="standbyMessage" aria-live="polite"></span></div>418
</section>419
<div class="legal-page settings-page" data-settings-page="legal">420
<p class="legal-lead" data-i18n="legal.description">CH-J Tools je poskytován pod CH-J Proprietary Software License 1.14.</p>421
<section class="legal-group"><h3 data-i18n="legal.groupLicenses">Licence</h3>422
<button class="legal-row" type="button" data-legal-document="application"><span data-i18n="legal.application">Licence aplikace</span><span class="legal-open" aria-hidden="true">›</span></button>423
<button class="legal-row" type="button" data-legal-document="notice"><span data-i18n="legal.notice">Autorské oznámení</span><span class="legal-open" aria-hidden="true">›</span></button>424
</section>425
<section class="legal-group"><h3 data-i18n="legal.groupThirdParty">Komponenty třetích stran</h3>426
<button class="legal-row" type="button" data-legal-document="thirdParty"><span data-i18n="legal.thirdParty">Licence třetích stran</span><span class="legal-open" aria-hidden="true">›</span></button>427
<button class="legal-row" type="button" data-legal-document="thirdPartyBundle"><span data-i18n="legal.thirdPartyBundle">Kompletní licenční balík</span><span class="legal-open" aria-hidden="true">›</span></button>428
</section>429
<section class="legal-group"><h3 data-i18n="legal.groupSafety">Provozní bezpečnost a zálohování</h3>430
<button class="legal-row" type="button" data-legal-document="safetyCzech"><span data-i18n="legal.safetyCzech">Bezpečnost a zálohování (CS)</span><span class="legal-open" aria-hidden="true">›</span></button>431
<button class="legal-row" type="button" data-legal-document="safetyEnglish"><span data-i18n="legal.safetyEnglish">Bezpečnost a zálohování (EN)</span><span class="legal-open" aria-hidden="true">›</span></button>432
<button class="legal-row" type="button" data-legal-document="safetyGerman"><span data-i18n="legal.safetyGerman">Bezpečnost a zálohování (DE)</span><span class="legal-open" aria-hidden="true">›</span></button>433
</section>434
<section class="legal-group"><h3 data-i18n="legal.documentation">Dokumentace</h3>435
<button class="legal-row" type="button" data-legal-document="documentation"><span data-i18n="legal.documentation">Dokumentace</span><span class="legal-open" aria-hidden="true">›</span></button>436
</section>437
</div>438
</div>439
</div>440
</section>441
</main>442
</div>443
<dialog id="updateAvailableDialog" class="update-available-dialog" aria-labelledby="updateAvailableTitle">444
<h3 id="updateAvailableTitle" data-i18n="updates.availableTitle">Je dostupná novější verze</h3>445
<p id="updateAvailableMessage"></p>446
<div class="button-row"><button id="updateAvailableLater" class="button ghost" type="button" data-i18n="updates.later">Později</button><button id="updateAvailableOpen" class="button primary" type="button" data-i18n="updates.openSettings">Otevřít aktualizace</button></div>447
</dialog>448
<script src="vendor/xterm/xterm.js"></script>449
<script src="vendor/xterm/addon-fit.js"></script>450
<script src="vendor/lucide/icons.js"></script>451
<script src="navIcons.js"></script>452
<script src="i18n.js"></script>453
<script src="diagnosticsI18n.js"></script>454
<script src="diagnostics.js"></script>455
<script src="terminalAppearance.js"></script>456
<script src="terminalSuggest.js"></script>457
<script src="app.js"></script>458
</body>459
</html>SHA-256
4d63217c2ccf58b59f7aad85dd44c39273651f284f825a8f12df357e72e9d10dCH-J Proprietary Software License 1.14 · Kod sumber disediakan di bawah CH-J Proprietary Software License 1.14. Ketersediaannya tidak mengubah terma lesen atau memberikan hak tambahan.
SHA-256 arkib
ac8fe790f4ba60fc098f8c985fc2656cfcc6cdc21fb34b30e308a2b54e62258f