v0.2.12-pre.007

This commit is contained in:
2026-08-27 14:35:18 +02:00
parent 7d0fe8ac5f
commit 2042482592
13 changed files with 764 additions and 95 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: crates/ksp-app-solprices-desk/frontend/main.html -->
<!-- version: 7 -->
<!-- version: 8 -->
<!DOCTYPE html>
<html lang="fr">
@@ -44,13 +44,16 @@
<div class="card app-shell-card mx-auto shadow-sm border-0">
<div class="card-body p-4">
<section data-view-panel="prices">
<div class="d-flex align-items-start justify-content-between gap-3 flex-wrap mb-4">
<div class="d-flex align-items-start justify-content-between gap-3 flex-wrap mb-3">
<div>
<h1 class="h3 mb-1">Prices</h1>
<p class="text-body-secondary mb-0">Inventaire provider-neutral du registry Off-chain. Rafraîchissement individuel, sélectionné ou global, sans polling ni fallback automatique.</p>
<p class="text-body-secondary mb-0">Inventaire provider-neutral SOL/USD. Les observations restent distinctes : aucune moyenne, aucun fallback automatique et aucun polling.</p>
</div>
<div class="d-flex align-items-center gap-2 flex-wrap">
<span id="selectedProviderCount" class="small text-body-secondary">0 selected</span>
<div class="d-flex align-items-center gap-2 flex-wrap app-market-toolbar">
<span id="selectedProviderCount" class="small text-body-secondary" aria-live="polite">0 selected</span>
<button id="clearSelectionButton" class="btn btn-sm btn-outline-secondary" type="button" disabled>
<i class="fa-solid fa-xmark me-1" aria-hidden="true"></i>Clear selection
</button>
<button id="refreshSelectedButton" class="btn btn-sm btn-outline-primary" type="button" disabled>
<i class="fa-solid fa-list-check me-1" aria-hidden="true"></i>Refresh selected
</button>
@@ -59,6 +62,40 @@
</button>
</div>
</div>
<div id="pricesSummary" class="row g-2 mb-3" aria-label="Résumé des providers">
<div class="col-6 col-lg">
<div class="app-market-summary-card">
<span class="app-market-summary-label">Providers</span>
<strong id="pricesSummaryProviders">0</strong>
</div>
</div>
<div class="col-6 col-lg">
<div class="app-market-summary-card">
<span class="app-market-summary-label">Ready</span>
<strong id="pricesSummaryReady">0</strong>
</div>
</div>
<div class="col-6 col-lg">
<div class="app-market-summary-card">
<span class="app-market-summary-label">Observed</span>
<strong id="pricesSummaryObserved">0</strong>
</div>
</div>
<div class="col-6 col-lg">
<div class="app-market-summary-card">
<span class="app-market-summary-label">Attention</span>
<strong id="pricesSummaryAttention">0</strong>
</div>
</div>
<div class="col-12 col-lg">
<div class="app-market-summary-card">
<span class="app-market-summary-label">Refreshing</span>
<strong id="pricesSummaryLoading">0</strong>
</div>
</div>
</div>
<div id="pricesLoading" class="app-placeholder">
<div>
<i class="fa-solid fa-spinner fa-spin text-body-secondary mb-3" aria-hidden="true"></i>
@@ -73,22 +110,24 @@
<p class="text-body-secondary mb-0">Le runtime Off-chain ne contient actuellement aucune ligne provider.</p>
</div>
</div>
<div id="pricesDiagnostic" class="alert alert-warning mb-3" hidden></div>
<div id="pricesTableContainer" class="table-responsive" hidden>
<table id="marketPriceTable" class="table table-hover align-middle mb-0">
<div id="pricesDiagnostic" class="alert alert-warning mb-3" role="status" aria-live="polite" hidden></div>
<div id="pricesTableContainer" class="table-responsive app-market-table-container" hidden>
<table id="marketPriceTable" class="table table-hover align-middle mb-0 app-market-table">
<caption class="visually-hidden">Providers SOL/USD, disponibilité, prix exacts, fraîcheur et actions de refresh.</caption>
<thead>
<tr>
<th scope="col"><span class="visually-hidden">Select</span></th>
<th scope="col" class="app-market-selection-column">
<input id="selectAllProviders" class="form-check-input" type="checkbox" aria-label="Select all providers" disabled>
</th>
<th scope="col">Provider</th>
<th scope="col">Pair</th>
<th scope="col">Semantics</th>
<th scope="col">Auth</th>
<th scope="col" class="d-none d-xl-table-cell">Semantics</th>
<th scope="col" class="d-none d-xl-table-cell">Auth</th>
<th scope="col">Availability</th>
<th scope="col">Exact price</th>
<th scope="col">Provider timestamp (ms)</th>
<th scope="col">Received at (ms)</th>
<th scope="col">Retry at (ms)</th>
<th scope="col">Action</th>
<th scope="col" class="app-market-time-column">Observation times</th>
<th scope="col" class="app-market-time-column">Retry</th>
<th scope="col" class="text-end">Action</th>
</tr>
</thead>
<tbody id="marketPriceRows"></tbody>
@@ -127,7 +166,7 @@
<dt class="col-sm-5">Fallback Logging</dt>
<dd id="runtimeLoggingFallback" class="col-sm-7"></dd>
</dl>
<div id="runtimeDiagnostic" class="alert alert-warning mt-3 mb-0" hidden></div>
<div id="runtimeDiagnostic" class="alert alert-warning mt-3 mb-0" role="status" aria-live="polite" hidden></div>
</div>
</div>
</section>