feat(tableaux): scroll horizontal ergonomique + barre custom (#82)

- Barre de défilement JS orange (12px) injectée en haut de chaque
  .marches_table, collée avec position:sticky, masquée si le tableau
  tient dans le viewport
- Scroll contenu dans .dash-spreadsheet-container (overflow-x:hidden)
  → plus de scrollbar navigateur en bas de page
- Drag souris + tactile, clic sur le track, molette/trackpad
- Recalcul automatique au resize et aux re-renders Dash (MutationObserver)
- Test Selenium de non-régression (overflow-x:hidden sur le conteneur)

Sticky headers abandonnés (incompatibles avec scroll contenu).
Portée : 4 pages via la classe partagée .marches_table.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Colin Maudry
2026-06-23 20:12:47 +02:00
5 changed files with 712 additions and 0 deletions
+45
View File
@@ -359,6 +359,20 @@ table.cell-table th {
right: 200px;
}
/* ===== Tableaux : en-têtes collants + scroll horizontal (#82) ===== */
/* Contenir le scroll horizontal dans le conteneur Dash (élimine la scrollbar native en bas de page) */
/* overflow-y:clip évite la conversion CSS visible→auto qui ajouterait une scrollbar verticale */
.marches_table .dash-spreadsheet-container {
overflow-x: hidden !important;
overflow-y: clip !important;
}
/* L'inner reste visible pour que le tableau se déploie librement en largeur */
.marches_table .dash-spreadsheet-inner {
overflow: visible !important;
}
.marches_table .cell-table tr:nth-child(even) td {
background-color: rgb(255 240 240 / 40%);
}
@@ -372,6 +386,37 @@ td[data-dash-column="marche"] a {
text-decoration: none;
}
/* Barre de défilement horizontale, collée en haut du tableau */
.marches_table .dt-hscroll {
position: sticky;
top: 0;
z-index: 11;
height: 12px;
background-color: #e0e0e0;
overflow: hidden;
cursor: pointer;
}
.marches_table .dt-hscroll.is-hidden {
display: none;
}
/* Thumb custom — toujours visible, draggable */
.marches_table .dt-hscroll-thumb {
position: absolute;
top: 2px;
height: calc(100% - 4px);
min-width: 40px;
background-color: orange;
border-radius: 8px;
cursor: grab;
user-select: none;
}
.marches_table .dt-hscroll-thumb:active {
cursor: grabbing;
}
/* Column Visibility Menu */
.column-actions {
margin-right: 8px;