Skip to content

feat(builder-carto): réintégrer <app-header> commun (nav inter-apps) - #481

Merged
bmatge merged 1 commit into
mainfrom
feat/builder-carto-app-header
Aug 19, 2026
Merged

feat(builder-carto): réintégrer <app-header> commun (nav inter-apps)#481
bmatge merged 1 commit into
mainfrom
feat/builder-carto-app-header

Conversation

@bmatge

@bmatge bmatge commented Aug 19, 2026

Copy link
Copy Markdown
Owner

Contexte

La refonte carte plein écran (PR #472) avait volontairement retiré l'app-header partagé au profit d'une topbar carto minimaliste — on perdait la navigation vers les autres apps du monorepo (Sources, Builder, Dashboard, Playground…), ce qui isolait le builder-carto du reste de l'écosystème.

Approche (option B validée en session)

Superposer les deux barres :

  • Header commun (<app-header>) en haut avec la nav DSFR + les liens outils (Guide, Specs, Favoris, Mon espace)
  • Topbar carto simplifiée en dessous avec les actions carto-spécifiques (Exécuter / Obtenir le code)

Les liens redondants sont retirés de la topbar carto :

  • Logo « République Française » → présent dans <app-header>
  • Lien « Guide » → présent dans <app-header>
  • Bouton « Favoris » → doublon avec le lien Favoris du header + toujours accessible via la modale d'export (bouton btn-export-favorite)

Layout

Passage de position: absolute; height: 100dvh (plein-viewport) à body { display: flex; flex-direction: column } avec le workspace en flex: 1.

Une CSS variable --carto-header-h est mesurée au runtime via ResizeObserver sur <app-header> (le fr-header varie selon breakpoint : mobile menu stack, tagline sur 2 lignes desktop…). Cette variable est consommée par :

  • state.map.height : calc(100dvh - var(--carto-header-h, 96px) - 56px [- 208px])

Les offsets internes du workspace (canvas top:56px, panels top:72px) restent inchangés puisqu'ils sont relatifs au workspace, pas au body.

Fichiers touchés

  • apps/builder-carto/index.html — ajout du <script app-ui.esm.js> + <app-header> + simplification de la topbar carto
  • apps/builder-carto/src/main.tsobserveHeaderHeight() (ResizeObserver → var CSS), retrait du binding btn-favorite, ajustement du calc state.map.height
  • apps/builder-carto/src/styles/carto.css — body en flex column, workspace en flex:1, var --carto-header-h

Aucun changeset : rien dans packages/core/src ou packages/shared.

Test plan

  • Chrome desktop : header commun visible, topbar carto en dessous, carte occupe le reste de la hauteur sans scroll
  • Nav vers Sources / Builder / Dashboard depuis le menu commun
  • Redimensionnement fenêtre : --carto-header-h s'actualise, la carte se réajuste
  • Encarts territoriaux (DROM) : bande basse toujours de 208px
  • Sauvegarde en favori via la modale « Obtenir le code » (bouton reste fonctionnel)
  • Mobile : header menu-modal fonctionnel (à vérifier sur breakpoint <768px)

Refs

🤖 Generated with Claude Code

La refonte carte plein écran (#472) avait retiré l'app-header partagé
au profit d'une topbar carto minimaliste. On perdait ainsi la
navigation vers les autres apps (Sources, Builder, Dashboard...).

Solution : superposer les deux barres, header commun en haut avec
la nav DSFR + les liens outils, topbar carto simplifiée en dessous
avec les actions carto-spécifiques (Exécuter / Obtenir le code).
Les liens redondants (logo RF, Guide, bouton Favoris) sont retirés
de la topbar carto — le bouton « Sauvegarder en favori » reste
accessible depuis la modale d'export.

Le layout passe de position:absolute plein-viewport à flex column,
avec une CSS variable --carto-header-h mesurée au runtime via
ResizeObserver (le fr-header varie selon breakpoint). state.map.height
inclut désormais cette variable dans son calc().

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bmatge
bmatge merged commit 022458e into main Aug 19, 2026
8 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant