144 lines
9.4 KiB
HTML
144 lines
9.4 KiB
HTML
<!-- file: crates/ksp-app-config-desk/frontend/main.html -->
|
|
<!-- version: 4 -->
|
|
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
|
<link rel="icon" href="imgs/logo.png">
|
|
<link rel="stylesheet" href="sass/main.scss">
|
|
<title>Config Desk — Vue d'ensemble</title>
|
|
</head>
|
|
|
|
<body>
|
|
<header class="app-header">
|
|
<nav class="navbar h-100 py-0 bg-light text-dark">
|
|
<div class="container-fluid px-4 flex-nowrap">
|
|
<div class="navbar-brand d-flex align-items-center me-4 flex-nowrap">
|
|
<img alt="KSP" src="imgs/logo.png" class="app-logo">
|
|
<span class="ps-2 fs-4 fw-semibold text-primary text-nowrap">Config Desk</span>
|
|
<span class="mx-2 fs-5 text-body-secondary" aria-hidden="true">—</span>
|
|
<span id="headerViewTitle" class="fs-5 text-body text-nowrap">Vue d'ensemble</span>
|
|
</div>
|
|
<div class="app-nav nav nav-pills flex-nowrap gap-1 ms-auto" aria-label="Navigation Config Desk">
|
|
<button class="nav-link app-nav-button active" type="button" data-view="overview">Vue d'ensemble</button>
|
|
<button class="nav-link app-nav-button" type="button" data-view="documents">Documents</button>
|
|
<button class="nav-link app-nav-button" type="button" data-view="profiles">Profils</button>
|
|
<button class="nav-link app-nav-button" type="button" data-view="environment">Environnement / .env</button>
|
|
<button class="nav-link app-nav-button" type="button" data-view="logging">Logging</button>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
</header>
|
|
|
|
<main class="app-main">
|
|
<div class="app-scrollable" data-simplebar>
|
|
<div class="container-fluid px-4 py-4">
|
|
<div class="card app-shell-card mx-auto shadow-sm border-0">
|
|
<div class="card-body p-4">
|
|
<h1 id="viewTitle" class="h3 mb-2">Vue d'ensemble</h1>
|
|
<p id="viewDescription" class="text-body-secondary mb-4">État sûr du bootstrap Config Desk et du runtime Logging actuellement actif.</p>
|
|
|
|
<section id="overviewPanel" aria-label="Vue d'ensemble">
|
|
<dl class="row mb-4 app-overview-list">
|
|
<dt class="col-sm-5">Version application</dt>
|
|
<dd id="overviewVersion" class="col-sm-7 text-sm-end">—</dd>
|
|
<dt class="col-sm-5">Descripteurs Config enregistrés</dt>
|
|
<dd id="overviewDocuments" class="col-sm-7 text-sm-end">—</dd>
|
|
<dt class="col-sm-5">Profil Logging actif</dt>
|
|
<dd id="overviewLoggingProfile" class="col-sm-7 text-sm-end">—</dd>
|
|
<dt class="col-sm-5">Génération Logging</dt>
|
|
<dd id="overviewLoggingGeneration" class="col-sm-7 text-sm-end">—</dd>
|
|
<dt class="col-sm-5 mb-0">Fallback Logging actif</dt>
|
|
<dd id="overviewLoggingFallback" class="col-sm-7 text-sm-end mb-0">—</dd>
|
|
</dl>
|
|
</section>
|
|
|
|
|
|
<section id="documentsPanel" hidden aria-label="Documents Config">
|
|
<div class="d-flex flex-wrap gap-2 align-items-center justify-content-between mb-3">
|
|
<div>
|
|
<h2 class="h5 mb-1">Documents enregistrés</h2>
|
|
<p class="text-body-secondary small mb-0">Le registre, la validation et la persistence restent exclusivement sous contrôle de ksp-config-lib.</p>
|
|
</div>
|
|
<button id="refreshDocuments" class="btn btn-outline-primary btn-sm" type="button">
|
|
<i class="fa-solid fa-rotate me-1" aria-hidden="true"></i>
|
|
Rafraîchir
|
|
</button>
|
|
</div>
|
|
|
|
<div class="table-responsive mb-4">
|
|
<table id="configDocumentsTable" class="table table-striped table-hover align-middle w-100">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">file_id</th>
|
|
<th scope="col">Fichier</th>
|
|
<th scope="col">Schema</th>
|
|
<th scope="col">État</th>
|
|
<th scope="col">Étape</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody></tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<section id="documentDetailPanel" hidden class="border rounded p-3 mb-4 bg-body-tertiary" aria-label="Détail du document Config">
|
|
<div class="d-flex flex-wrap gap-2 justify-content-between align-items-start mb-3">
|
|
<div>
|
|
<h2 class="h5 mb-1">Détail du document</h2>
|
|
<span id="documentDetailStatus" class="badge text-bg-secondary">—</span>
|
|
</div>
|
|
<div class="d-flex gap-2">
|
|
<button id="reloadDocumentSource" class="btn btn-outline-secondary btn-sm" type="button">Recharger</button>
|
|
<button id="saveDocumentSource" class="btn btn-primary btn-sm" type="button">Valider et sauvegarder</button>
|
|
</div>
|
|
</div>
|
|
<dl class="row small mb-3 app-document-metadata">
|
|
<dt class="col-lg-3">file_id</dt>
|
|
<dd id="documentDetailFileId" class="col-lg-9">—</dd>
|
|
<dt class="col-lg-3">Fichier mappé</dt>
|
|
<dd id="documentDetailFilename" class="col-lg-9">—</dd>
|
|
<dt class="col-lg-3">Schema</dt>
|
|
<dd id="documentDetailSchema" class="col-lg-9">—</dd>
|
|
<dt class="col-lg-3">Path résolu</dt>
|
|
<dd id="documentDetailPath" class="col-lg-9">—</dd>
|
|
<dt class="col-lg-3">Étape diagnostic</dt>
|
|
<dd id="documentDetailStage" class="col-lg-9">—</dd>
|
|
<dt class="col-lg-3 mb-0">Diagnostic</dt>
|
|
<dd id="documentDetailDiagnostic" class="col-lg-9 mb-0">—</dd>
|
|
</dl>
|
|
<label class="form-label fw-semibold" for="documentSourceEditor">Source brut Config</label>
|
|
<textarea id="documentSourceEditor" class="form-control app-document-source" rows="18" spellcheck="false" autocomplete="off"></textarea>
|
|
<div class="form-text">La sauvegarde est refusée tant que le candidat échoue au parsing JSON, au schema ou aux invariants sémantiques backend.</div>
|
|
</section>
|
|
|
|
<div id="documentsStatus" class="alert alert-primary mb-0" role="status" aria-live="polite">Chargement de l'inventaire Config...</div>
|
|
</section>
|
|
|
|
<section id="placeholderPanel" hidden aria-live="polite">
|
|
<div class="alert alert-secondary mb-4" role="status">
|
|
Cette route du shell est prête ; son contenu fonctionnel sera ajouté dans la prerelease prévue par le plan 0.1.4.
|
|
</div>
|
|
</section>
|
|
|
|
<div class="alert alert-primary mb-0" role="status">
|
|
<i class="fa-solid fa-desktop me-2" aria-hidden="true"></i>
|
|
<span id="shellStatus" class="app-shell-status">Initialisation du frontend...</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<footer class="app-footer bg-dark text-light">
|
|
<div class="container h-100 d-flex align-items-center justify-content-center">
|
|
<small>© 2026 SASEDEV</small>
|
|
</div>
|
|
</footer>
|
|
<script type="module" src="ts/main.ts" defer></script>
|
|
</body>
|
|
|
|
</html>
|