Commit Graph

65 Commits

Author SHA1 Message Date
Colin Maudry f580459bd5 Améliorations sur le style de l'ag grid #47 2026-07-11 16:58:36 +02:00
Colin Maudry 722694bec9 fix: remplacer la couleur d'accentuation Dash 4 par notre couleur primaire (#101)
Dash 4 utilise le token CSS --Dash-Fill-Interactive-Strong (violet par
défaut) pour l'état actif/focus des composants dcc (Dropdown, Input,
Tabs, DatePicker...). Surchargé au :root avec var(--primary-color).
2026-07-09 17:52:51 +02:00
Colin Maudry 07bb4a91d0 fix: masquer les boutons +/- (steppers) sur les champs montant min/max (#101)
Dash 4 ajoute des boutons +/- aux dcc.Input type="number" ; inutiles pour
des montants et prennent de la place, retirés via .dash-input-stepper
(l'input récupère l'espace grâce à son flex: 1 1 0).
2026-07-09 17:30:59 +02:00
Colin Maudry d0e80b6be5 style: accepter le rendu DCC Dash 4 et retirer le CSS en conflit (#101)
Dash 4.4 remplace complètement le react-select v1 sous-jacent de
dcc.Dropdown par un nouveau composant (classes dash-dropdown-*) : les 11
Dropdown de l'app (acheteur.py, titulaire.py, observatoire.py, dont 5
multi=True) restent fonctionnels tels quels — ouverture, recherche,
sélection simple/multiple, fermeture. Le nouveau défaut
closeOnSelect=False sur les multi-select (menu qui reste ouvert après
sélection) est accepté sans correction, conformément au plan.

Retrait de la règle CSS .Select--multi .Select-value (style.css),
devenue totalement inerte : dcc.Dropdown ne rend plus ces classes
react-select, et aucune colonne dropdown de dash_table (admin) n'est
configurée en multi-select. Les autres règles .Select-* (Select-menu-outer,
Select-placeholder) sont conservées : elles servent encore l'éditeur de
cellules dropdown de dash_table (hors périmètre de cette migration).
2026-07-09 16:49:45 +02:00
Colin Maudry 349fb17c90 feat(abonnement): sélection de formule par cartes cliquables dans mes-infos
Remplace la garde ?plan= (redirection si absent) par une sélection
interactive : deux cartes de formule (réutilisées de la page publique via
_plan_card) cliquables, un callback recopie le choix dans un champ caché
natif soumis avec le POST du formulaire. Le bouton de soumission reste
désactivé tant qu'aucune formule n'est choisie (en plus des cases à
cocher existantes).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 23:43:39 +02:00
Colin Maudry 6256adf826 Taille du point de l'org 2026-07-03 23:31:24 +02:00
Colin Maudry a38b2d5e71 Remplacement du Loading... screen 2026-07-02 12:03:50 +02:00
Colin Maudry c4aa90b0d1 feat: améliorations UX roadmap votes #94
- Votes cappés à VOTES_PER_WEEK (pas d'accumulation) pour valoriser
  les connexions régulières
- Solde de votes affiché dans la liste (input inéditable) à la place
  du bandeau Alert, avec date de prochain rechargement
- Compteur de votes par feature affiché comme input inéditable en
  fin de ligne (avant le bouton "+")
- Animation FLIP JS (roadmap_flip.js) : seules les lignes qui changent
  de position sont animées après un vote
- Renommage votes_credited_until → votes_last_credited_at (migration 0005)
- Constantes du module utilisées dans les assertions de tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 16:39:13 +02:00
Colin Maudry 78534000a0 refactor(tableau): barre d'outils compacte sur une ligne + légende d'aide
Barre d'outils repensée au-dessus du tableau :
- boutons compacts (size=sm) sur une seule rangée + ligne d'infos discrète
  en dessous (2 lignes au total sur desktop)
- libellés explicites (Sauvegarder la vue, Partager la vue, Télécharger
  (Excel)), espacement homogène, couleurs conformes à la charte
  (neutre=secondary, Réinitialiser=danger outline)
- Mode d'emploi rejeté en fin de barre via CSS order (DOM/callbacks intacts)
- .table-menu (3 autres pages) laissée intacte

Téléchargement bloqué (>65 000 lignes) : la raison s'affiche en clair dans
la ligne d'infos (fiable cross-browser) plutôt que dans une infobulle sur
bouton désactivé. Override scopé au tableau via update_table ; acheteur/
titulaire non touchés.

Mode d'emploi : légende en tête listant chaque bouton reproduit (inerte)
en face de sa fonction.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 14:33:28 +02:00
Colin Maudry 0cfafedeef feat: charte graphique des boutons (primary/secondary/danger)
Override CSS scopé aux classes .btn-* (jamais les variables --bs-* racine,
donc alertes/badges inchangés) pour remplacer les couleurs dérivées du thème
Simplex (danger mauve, secondary gris illisible). Trois rôles : la couleur
encode la fonction, le remplissage l'emphase.

- primary terracotta : action principale validante
- secondary gris ardoise : action neutre/alternative (lisible)
- danger rouge #c0392b : destructif (outline par défaut, plein en confirmation)

Audit + conformation des usages :
- compte_admin « Supprimer mon compte » : primary outline -> danger outline
- compte_abonnement « Me désabonner » : outline-primary -> outline-danger
- compte_abonnement « Je suis sûr » : outline-primary -> danger plein

Tests : ajout tests/test_boutons.py (garde de non-régression du primary).
conftest : implémente le hook pytest_setup_options (--headless=new) ; la
fixture chrome_options n'était jamais utilisée par dash.testing, d'où les
fenêtres Chrome qui s'ouvraient pendant les tests.

Specs et plan : docs/superpowers/{specs,plans}/2026-06-30-charte-boutons*.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:21:24 +02:00
Colin Maudry 98b4d13f94 Petites améliorations sur la facturation #90 2026-06-29 13:35:52 +02:00
Colin Maudry b93aca9005 feat(ux): refonte barre latérale /compte et fix CLI tokens
- Déconnexion déplacée dans la sidebar (lien discret) et retirée du dropdown navbar
- Email utilisateur connecté = lien simple vers /compte/admin (sans dropdown)
- Hover orange pâle sur les nav-links des sidebars
- fix(cli): load_dotenv() dans tokens_cli pour charger .env hors contexte app

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DRGb8NAMwaTZxUszSbaj4N
2026-06-25 02:11:28 +02:00
Colin Maudry 82999ef056 Redesign de a-propos 2026-06-25 01:19:36 +02:00
Colin Maudry 590b927e31 fix(auth): corrections runtime LinkedIn OAuth (#88)
- Workaround nonce OIDC LinkedIn (non-conformité) : capture MissingClaimError après échange de code réussi et fetch userinfo séparément
- Ajout token_endpoint_auth_method: client_secret_post (requis par LinkedIn)
- suppress_callback_exceptions=True pour corriger les erreurs Dash multi-pages
- Suppression bouton déconnexion redondant sur /compte/admin et style hover incorrect sur la navbar

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 00:38:01 +02:00
Colin Maudry ccdf476c4f fix(compte): styles nav sidebar, zone danger et bouton déconnexion (#73)
- Nav sidebar : indicateur bordure gauche rouge au lieu du pill rouge plein
- Zone danger : couleur rouge directe (#d9230f) au lieu de Bootstrap danger (violet en Simplex)
- Bouton Déconnexion : outline pour le rendre clairement stylisé

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 22:38:28 +02:00
Colin Maudry a6f60ce3c4 Cache le champ de filtrage pour la colonne 'Marché' 2026-06-24 02:56:42 +02:00
Colin Maudry ad0a220953 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>
2026-06-23 20:12:47 +02:00
Colin Maudry 45526f7c7b fix(tableaux): restaurer position:sticky sur la barre, 12px #82
Le retrait de position:sticky sur .dt-hscroll avait cassé le layout
(bouton Remettre à zéro visible au mauvais endroit, z-index perdu).
La barre redevient sticky top:0 z-index:11 — les th.dash-header restent
sans sticky ni z-index (ils ne fonctionnaient de toute façon pas en
scroll contenu).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 19:52:42 +02:00
Colin Maudry 5e64a4553d fix(tableaux): supprimer sticky headers, barre 12px #82
- Retire position:sticky/z-index sur th.dash-header (abandonnés avec
  le scroll contenu : overflow-x:hidden crée un scroll container qui
  empêche le sticky page-level, et le z-index provoquait un recouvrement
  des champs de filtre)
- Retire la règle :has() devenue inutile
- Barre de scroll réduite à 12px

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 19:46:43 +02:00
Colin Maudry 2e22fcabe9 fix(tableaux): scroll contenu dans dashContainer, plus de scrollbar page #82
Remplace le scroll de page (window.scrollTo) par dashContainer.scrollLeft :
- overflow-x:hidden sur .dash-spreadsheet-container → la table ne déborde
  plus la page → scrollbar navigateur en bas éliminée
- overflow-y:clip évite la conversion CSS visible→auto (pas de scrollbar
  vertical parasite sur le conteneur)
- metrics(), syncThumb, drag et clic utilisent tous dashContainer
- wheel handler capture les gestures trackpad horizontaux et les redirige
  vers dashContainer.scrollLeft

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 19:20:41 +02:00
Colin Maudry 9c5fc9257a fix(tableaux): thumb custom toujours visible, drag souris et tactile #82
Remplace le scrollbar natif (invisible en mode overlay sous Linux) par
un thumb div orange toujours visible. Track gris (#e0e0e0) 16px.
Drag souris + toucher + clic sur le track supportés.
Supprime la dépendance aux pseudo-éléments webkit et scrollbar-color.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 18:50:51 +02:00
Colin Maudry 0edca05df5 fix(tableaux): barre 16px toujours visible, headers décalés en dessous #82
- overflow-x:scroll force le thumb orange toujours visible (pas overlay)
- hauteur 16px pour le drag-and-drop
- :has(.dt-hscroll:not(.is-hidden)) décale les th à top:16px quand la
  barre est présente, évitant le recouvrement

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 18:26:36 +02:00
Colin Maudry 099fba58f7 fix(tableaux): option A — sync barre avec window.scrollX + style orange #82
Abandonne le wrapper overflow-x (incompatible avec position:sticky des
en-têtes). La barre contrôle désormais le scroll horizontal de la page
via window.scrollTo/scrollX, ce qui préserve le sticky des th.
Scrollbar orange 12px, styling webkit + Firefox.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 18:22:08 +02:00
Colin Maudry 96c0b0dd35 fix(tableaux): scroll horizontal via wrapper overflow-x auto #82
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 16:52:22 +02:00
Colin Maudry cb1685d055 feat(tableaux): barre de défilement horizontale miroir synchronisée #82
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 16:00:45 +02:00
Colin Maudry 4be82ac76b feat(tableaux): en-têtes de colonnes collants #82
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 15:58:49 +02:00
Colin Maudry 3e305845dd Fix réduction du nombre de colonne, ajoute de lla colonne Marché #84 2026-06-23 15:28:42 +02:00
Colin Maudry e44af8add8 Dans les résultats de recherche, le contenu de la colonne Département wrappe le texte #77 2026-06-22 17:55:53 +02:00
Colin Maudry 4d3e8ac344 feat(etapes): fiches cliquables sur les barres et vue mobile 2026-06-04 22:15:10 +02:00
Colin Maudry ab74717679 feat(etapes): suppression légende, JAL à la place de Journaux d'annonces légales 2026-06-04 22:04:31 +02:00
Colin Maudry b8db0cddf8 feat(etapes): styles du graphique étapes/seuils 2026-06-04 21:48:28 +02:00
Colin Maudry 3a73cdf4b9 P dans les announcements plus compacts 2026-05-05 15:43:08 +02:00
Colin Maudry 4715db282e Les boutons de Tableau passent à ligne si écran plus étroit 2026-04-15 17:49:25 +02:00
Colin Maudry 7b78e0a0ea Style, ordre des années #65 2026-03-21 12:09:00 +01:00
Colin Maudry 50c3947c04 Filtres sur techniques, sous-traitance, innovant #65 2026-03-19 18:36:54 +01:00
Colin Maudry 6a6be51455 refactor: replace CSS grid layout with Dash Bootstrap Components grid
Replace the custom CSS grid (`.wrapper`, `.org_*`, `.results_*` classes)
in acheteur, titulaire, and recherche pages with dbc.Row/dbc.Col.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 23:21:17 +01:00
Colin Maudry 78d528f75b Filtre par montant #65 2026-03-18 21:13:21 +01:00
Colin Maudry 2f90a754ab Style inputs, ajout donut type marché #65 2026-03-18 13:38:38 +01:00
Colin Maudry c02fb995c5 Ajout de filtres et des donuts de catégorie #65 2026-03-17 22:44:15 +01:00
Colin Maudry e754a3a217 Configuration fine des tailles de cartes #65 2026-03-17 20:33:36 +01:00
Colin Maudry c7d1a5ec73 Début de dashboard avec quelques filtres et viz #65 2026-03-13 19:22:48 +01:00
Colin Maudry af89bb0630 Plus grosses cases à cocher 2026-02-05 18:22:17 +01:00
Colin Maudry 472fbb7cbb Améliorations des textes et petits ajustements 2026-02-05 17:16:31 +01:00
Colin Maudry 15de2aaf17 Placeholder de dropdown plus visible 2026-02-02 19:51:40 +01:00
Colin Maudry f16cca036d Toutes les pages s'ouvrent dans le même onglet puisque plus de perte de filtre 2026-02-02 19:02:27 +01:00
Colin Maudry edd52d471e Suppression (pour l'instant de la carte acheteur/titulaire) 2026-01-31 19:20:41 +01:00
Colin Maudry 41a832d7be Tableau de choix des colonnes aussi sur les pages acheteur et titulaire 2026-01-31 17:38:54 +01:00
Colin Maudry 8f5d38ff78 Petites améliorations sur les boutons 2026-01-31 01:29:37 +01:00
Colin Maudry cd81aa9532 Syncro sélection de colonnes et tableau fonctionnelle 2026-01-31 01:04:49 +01:00
Colin Maudry e609bc3e32 Weight des titres 2026-01-30 21:13:29 +01:00