174 lines
14 KiB
HTML
174 lines
14 KiB
HTML
<!doctype html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Wallet Desk — Dashboard</title>
|
|
</head>
|
|
<body>
|
|
<header class="app-header bg-dark text-white shadow-sm">
|
|
<div class="container-fluid h-100 d-flex align-items-center gap-3 px-4">
|
|
<img class="app-logo" src="./imgs/logo.png" alt="KSP">
|
|
<div class="d-flex flex-column me-auto">
|
|
<span class="fw-semibold">Wallet Desk — <span id="headerViewTitle">Dashboard</span></span>
|
|
<small id="shellStatus" class="text-white-50 app-shell-status">Initialisation du shell…</small>
|
|
</div>
|
|
<button class="btn btn-outline-light btn-sm" type="button" data-shell-action="deselect" disabled>
|
|
<i class="fa-solid fa-xmark me-2" aria-hidden="true"></i>Deselect
|
|
</button>
|
|
<button class="btn btn-outline-light btn-sm" type="button" data-shell-action="lock" disabled>
|
|
<i class="fa-solid fa-lock me-2" aria-hidden="true"></i>Lock
|
|
</button>
|
|
</div>
|
|
</header>
|
|
<main class="app-main container-fluid p-0">
|
|
<div class="row g-0 h-100">
|
|
<aside class="col-auto app-sidebar border-end bg-body-tertiary">
|
|
<div class="app-sidebar-scroll h-100" data-simplebar>
|
|
<nav class="nav nav-pills flex-column gap-1 p-3" aria-label="Navigation Wallet Desk">
|
|
<button class="nav-link text-start active" type="button" data-view="dashboard"><i class="fa-solid fa-gauge-high me-2" aria-hidden="true"></i>Dashboard</button>
|
|
<button class="nav-link text-start" type="button" data-view="wallets"><i class="fa-solid fa-wallet me-2" aria-hidden="true"></i>Wallets</button>
|
|
<button class="nav-link text-start" type="button" data-view="create-import"><i class="fa-solid fa-circle-plus me-2" aria-hidden="true"></i>Create / Import</button>
|
|
<button class="nav-link text-start" type="button" data-view="details"><i class="fa-solid fa-id-card me-2" aria-hidden="true"></i>Details</button>
|
|
<button class="nav-link text-start" type="button" data-view="security"><i class="fa-solid fa-shield-halved me-2" aria-hidden="true"></i>Security</button>
|
|
<button class="nav-link text-start" type="button" data-view="diagnostics"><i class="fa-solid fa-stethoscope me-2" aria-hidden="true"></i>Diagnostics</button>
|
|
</nav>
|
|
</div>
|
|
</aside>
|
|
<section class="col app-content h-100" data-simplebar>
|
|
<div class="p-4">
|
|
<div class="d-flex align-items-center justify-content-between mb-4">
|
|
<div>
|
|
<h1 id="viewTitle" class="h3 mb-1">Dashboard</h1>
|
|
<p class="text-body-secondary mb-0">Inventaire `.kspwallet` root-scoped et inspection locked actifs.</p>
|
|
</div>
|
|
<span class="badge text-bg-secondary">0.2.6-pre.005</span>
|
|
</div>
|
|
<section data-view-panel="dashboard">
|
|
<div class="row g-3">
|
|
<div class="col-xl-8">
|
|
<div class="card shadow-sm">
|
|
<div class="card-header fw-semibold">Runtime</div>
|
|
<div class="card-body">
|
|
<dl class="row mb-0 app-runtime-list">
|
|
<dt class="col-sm-5">Version</dt><dd id="runtimeVersion" class="col-sm-7">—</dd>
|
|
<dt class="col-sm-5">Phase</dt><dd id="runtimeShellPhase" class="col-sm-7">—</dd>
|
|
<dt class="col-sm-5">Documents Config enregistrés</dt><dd id="runtimeConfigDocuments" class="col-sm-7">—</dd>
|
|
<dt class="col-sm-5">Profil composite</dt><dd id="runtimeCompositeProfile" class="col-sm-7">—</dd>
|
|
<dt class="col-sm-5">Profil Logging</dt><dd id="runtimeLoggingProfile" class="col-sm-7">—</dd>
|
|
<dt class="col-sm-5">Profil Wallet</dt><dd id="runtimeWalletProfile" class="col-sm-7">—</dd>
|
|
<dt class="col-sm-5">Fallback Logging</dt><dd id="runtimeLoggingFallback" class="col-sm-7">—</dd>
|
|
<dt class="col-sm-5">Racine Wallet</dt><dd id="runtimeWalletsDirectory" class="col-sm-7 text-break">—</dd>
|
|
<dt class="col-sm-5">Sous-répertoire Wallet</dt><dd id="runtimeWalletsSubdirectory" class="col-sm-7 text-break">—</dd>
|
|
<dt class="col-sm-5">Répertoire effectif</dt><dd id="runtimeEffectiveWalletsDirectory" class="col-sm-7 text-break">—</dd>
|
|
<dt class="col-sm-5">Créé au démarrage</dt><dd id="runtimeWalletDirectoryCreated" class="col-sm-7">—</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-xl-4">
|
|
<div class="card shadow-sm h-100">
|
|
<div class="card-header fw-semibold">Wallet courant</div>
|
|
<div class="card-body text-center">
|
|
<i id="currentWalletIcon" class="fa-solid fa-lock fa-2x mb-3 text-body-secondary" aria-hidden="true"></i>
|
|
<p id="currentWalletFilename" class="fw-semibold mb-2">Aucun wallet sélectionné.</p>
|
|
<dl class="row small text-start mb-0">
|
|
<dt class="col-5">État</dt><dd id="currentWalletState" class="col-7">—</dd>
|
|
<dt class="col-5">Format</dt><dd id="currentWalletFormat" class="col-7">—</dd>
|
|
<dt class="col-5">VIEW</dt><dd id="currentWalletView" class="col-7">—</dd>
|
|
<dt class="col-5">Pubkey</dt><dd id="currentWalletPubkey" class="col-7 text-break">—</dd>
|
|
<dt class="col-5">Alias</dt><dd id="currentWalletAlias" class="col-7 text-break">—</dd>
|
|
<dt class="col-5">Notes</dt><dd id="currentWalletNotes" class="col-7 text-break">—</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section data-view-panel="wallets" hidden>
|
|
<div class="card shadow-sm">
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
<div class="d-flex align-items-center gap-3">
|
|
<span class="fw-semibold">Wallets disponibles</span>
|
|
<small class="text-body-secondary"><i class="fa-solid fa-lock me-1" aria-hidden="true"></i>verrouillé · <i class="fa-solid fa-lock-open me-1" aria-hidden="true"></i>ouvert</small>
|
|
</div>
|
|
<button class="btn btn-outline-primary btn-sm" type="button" data-shell-action="refresh-wallets">
|
|
<i class="fa-solid fa-rotate me-2" aria-hidden="true"></i>Refresh
|
|
</button>
|
|
</div>
|
|
<div class="card-body">
|
|
<table id="walletInventoryTable" class="table table-striped table-hover align-middle w-100">
|
|
<thead><tr><th>État</th><th>Filename</th><th>Format</th><th>VIEW</th><th>Inspection</th></tr></thead>
|
|
<tbody id="walletInventoryBody"></tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section data-view-panel="create-import" hidden>
|
|
<div class="row g-3">
|
|
<div class="col-xl-8">
|
|
<div class="card shadow-sm">
|
|
<div class="card-header fw-semibold">Créer un wallet natif KSP</div>
|
|
<div class="card-body">
|
|
<form id="createWalletForm" autocomplete="off">
|
|
<div class="row g-3">
|
|
<div class="col-md-6">
|
|
<label class="form-label" for="createWalletFilename">Filename</label>
|
|
<input id="createWalletFilename" class="form-control" type="text" value="wallet-01.kspwallet" required spellcheck="false">
|
|
<div class="form-text">Un seul filename sous le répertoire Wallet effectif, suffixe exact .kspwallet.</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label" for="createWalletAlias">Alias interne optionnel</label>
|
|
<input id="createWalletAlias" class="form-control" type="text" autocomplete="off">
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label" for="createWalletOwnerPassword">OWNER password</label>
|
|
<input id="createWalletOwnerPassword" class="form-control" type="password" autocomplete="new-password" required>
|
|
</div>
|
|
<div class="col-md-6 d-flex align-items-end">
|
|
<div class="form-check mb-2">
|
|
<input id="createWalletEnableView" class="form-check-input" type="checkbox">
|
|
<label class="form-check-label" for="createWalletEnableView">Créer aussi une capability VIEW</label>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<label class="form-label" for="createWalletViewPassword">VIEW password</label>
|
|
<input id="createWalletViewPassword" class="form-control" type="password" autocomplete="new-password" disabled>
|
|
</div>
|
|
<div class="col-12">
|
|
<label class="form-label" for="createWalletInitialNote">Note initiale optionnelle</label>
|
|
<textarea id="createWalletInitialNote" class="form-control" rows="3" autocomplete="off"></textarea>
|
|
</div>
|
|
<div class="col-12 d-flex align-items-center gap-3">
|
|
<button id="createWalletSubmit" class="btn btn-primary" type="submit">
|
|
<i class="fa-solid fa-circle-plus me-2" aria-hidden="true"></i>Create wallet
|
|
</button>
|
|
<span id="createWalletStatus" class="text-body-secondary" role="status">Prêt.</span>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-xl-4">
|
|
<div class="alert alert-info mb-0">
|
|
<i class="fa-solid fa-shield-halved me-2" aria-hidden="true"></i>
|
|
Les passwords sont envoyés uniquement du frontend vers Rust pour l'opération courante. Ils ne sont jamais renvoyés par Rust ni journalisés.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<section data-view-panel="details" hidden><div class="app-placeholder"><i class="fa-solid fa-id-card"></i><p>Les détails protégés seront affichés uniquement après VIEW/OWNER.</p></div></section>
|
|
<section data-view-panel="security" hidden><div class="app-placeholder"><i class="fa-solid fa-shield-halved"></i><p>Les opérations OWNER seront ajoutées après le MVP identité + balance.</p></div></section>
|
|
<section data-view-panel="diagnostics" hidden><div class="app-placeholder"><i class="fa-solid fa-stethoscope"></i><p>Les diagnostics Config/Wallet/Transport seront enrichis progressivement.</p></div></section>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</main>
|
|
<footer class="app-footer bg-dark text-white-50 d-flex align-items-center px-4">
|
|
<span>KSP Wallet Desk · create + session lifecycle pre.005</span>
|
|
</footer>
|
|
<script type="module" src="./ts/main.ts"></script>
|
|
</body>
|
|
</html>
|