Conversation
- Add `build` script as alias for `tsc` for standard workflow conventions - Upstream remote `geo2france/api-dashboard` configured for future PR Made-with: Cursor
…k mode - Crée src/theme/ avec tokens/base.ts (sans couleurs, règle antd v6 #53719) - Palettes geo2france (#95c11f, #0f4496) et neutral (#1677ff) - 4 ThemeConfig complets : geo2france.light/dark + neutral.light/dark - ThemeProvider : sélection preset par string, résolution auto/light/dark, couche de rétrocompatibilité pour les ThemeConfig bruts (deprecation warning + deep merge) - ThemeContext exposant themeName, mode, resolvedMode, setMode - hooks usePreferredColorScheme (media query live) + useThemeMode (localStorage) - ThemeToggle : cycle auto → light → dark avec icônes Ant Design - DashboardApp : ConfigProvider remplacé par ThemeProvider, prop themeMode ajoutée, deep import antd/es/layout/layout corrigé, default_theme marqué @deprecated - src/index.ts : tous les exports publics du système de thème ajoutés Made-with: Cursor
- Sider: #ccc → colorBorderSecondary + fix fuite mémoire resize listener - Footer: #fff/#ccc/gradient → colorBgContainer/colorBorder/transparent - Control: #fff/#ccc → colorBgContainer/colorBorder - Page: #fff sticky header → colorBgContainer - Pie: #000/#333 echarts labels → colorTextBase/colorText - ChartComparison: #d4d4d4 fallback → colorBorderSecondary - Map: line-color #fff → colorBgContainer - MapLegend: BUG rgba(256..) → colorBgElevated + tokens border/padding - cardStyles: nouveau hook useCardStyles() dérivé des tokens (rétrocompat cardStyles conservé) - usechartexports: background export #fff → token.colorBgContainer - DataPreview: remplace deep import antd/es/table par import public Made-with: Cursor
…vider (phase 3) - preview.ts → preview.tsx : support JSX pour le decorator global - globalTypes : toolbar "Thème" (geo2france / neutral) + toolbar "Mode" (light ☀️ / dark 🌙) - withTheme decorator : enveloppe chaque story dans ConfigProvider avec le preset actif - Fond adapté au mode via useEffect sur document.body + wrapper div - manager.ts : branding Géo2France conservé intact Made-with: Cursor
Crée src/utils/zIndex.ts avec les constantes Z_INDEX (SIDER, MAP_GESTURE, CONTROL, FOOTER, FOOTER_BUTTON, MODAL). Remplace tous les z-index inline dans Sider, Footer, Control et Page par ces constantes. Corrige également le gradient rgba(0,0,0,0.1) du scroll indicator dans Footer en utilisant token.colorFill pour une adaptation dark mode correcte. Made-with: Cursor
…, a11y error mode
- Tests unitaires ThemeProvider : résolution theme par nom (geo2france/neutral),
résolution mode (auto/light/dark via OS ou prop), couche de rétrocompatibilité
(ThemeConfig direct → console.warn + merge), 31 tests passent en tout
- Snapshots : KeyFigure + FlipCard en geo2france-light et neutral-dark (5 snapshots)
- Fixture Jest : polyfill TextEncoder/TextDecoder pour react-router-dom v7 (jest.setup.js)
- Chromatic CI : .github/workflows/chromatic.yml — diff visuel sur toutes les PR
- a11y mode 'error' (bloquant CI) dans preview.tsx :
- Règle color-contrast désactivée globalement (couleur primaire G2F #95c11f,
FIXME documenté : fix/a11y-geo2france-contrast)
- Stories ECharts exemptées en 'todo' (canvas non accessible, FIXME documenté :
fix/a11y-echarts)
- Statistics stories exemptées en 'todo' (indicateurs de tendance colorés)
Made-with: Cursor
- Introduction.mdx : section Personnalisation complétée (config theme/themeMode, liens vers Theming et Dark Mode) - stories-docs/Theming.mdx : nouvelle page (presets, tokens, override partiel, branding, règle Ant Design v6) - stories-docs/DarkMode.mdx : nouvelle page (activation, ThemeToggle, useThemeContext, bonnes pratiques) - Fix: suppression de l'import React inutilisé dans ThemeProvider.test.tsx (TS6133) Made-with: Cursor
Made-with: Cursor
Installs @fontsource/inter and imports weights 400/500/600 in both manager.ts (Storybook UI shell) and preview.tsx (story canvas) so that fontBase:'Inter' is actually applied. Made-with: Cursor
Ajoute le bouton de bascule de thème (auto/light/dark) dans le footer du DashboardSider, visible même en mode collapsed (icône seule). Made-with: Cursor
Introduce createBrandTheme() factory and BrandTokens/BrandShorthand contracts
that let consumers define custom branding in their own repo without modifying
the lib. ThemeProvider now accepts a `brand` prop (3 forms: Bundle, Tokens,
Shorthand) with automatic dark mode derivation and logo integration via
useBrandLogo(). The legacy theme={ThemeConfig} path remains functional with
an enriched deprecation warning pointing to the new API.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the theme unit test typings minimal after the Brand Theming API integration to reduce noise and avoid unused type imports. Co-authored-by: Cursor <cursoragent@cursor.com>
Convert Markdown pipe tables to explicit HTML tables in theming and dark mode docs so token and mode reference tables display reliably in Storybook docs rendering. Co-authored-by: Cursor <cursoragent@cursor.com>
Document how to self-host and use a custom font without Google Fonts, including @font-face declaration and createBrandTheme typography config with Inter fallback stack.
Clarifie l’API de personnalisation en remplaçant `brand` par `visualIdentity`, avec migration des exports, hooks, tests et documentation pour aligner le vocabulaire produit.
Ajoute une page dédiée à l’identité visuelle pour compléter la migration `brand` vers `visualIdentity` dans la documentation Storybook.
Harmonise l’orthographe et les accords dans la documentation Storybook afin d’améliorer la lisibilité et éviter les coquilles dans les exemples. Co-authored-by: Cursor <cursoragent@cursor.com>
Data provider
Quand l'intégrateur force themeMode="light"/"dark", ce mode devient autoritaire (ignore localStorage) et le bouton ThemeToggle est masqué : l'utilisateur final ne peut plus contredire l'intention de l'intégrateur. - context.ts : ajout de `isModeLocked` à ThemeContextValue - ThemeProvider.tsx : `isModeLocked = modeProp !== 'auto'`, mode forcé prioritaire sur localStorage - DashboardApp.tsx : JSDoc de `themeMode` précise le masquage auto - +6 tests (suite thème 59/59 OK) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Sider.tsx : support du thème sombre (theme dynamique selon resolvedMode), bouton replier/déplier redessiné avec tooltip et attributs ARIA (aria-expanded/aria-controls), focus-visible visible, lien logo accessible, mention « Développé par » repensée, repli auto sur mobile, respect de prefers-reduced-motion - ThemeToggle.tsx : props `block` et `showLabel` pour l'intégration dans la colonne du footer de la sidebar - base.ts : token Tooltip.paddingXS=12 pour des infobulles cohérentes Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Composant PartnerLogo : lien sécurisé (target _blank + rel noopener) seulement si une URL est fournie, sinon image seule ; hauteur uniforme (48px, objectFit contain), images lazy/non draggables - Indicateur de scroll : dégradé + flou animés (apparition, bob au survol), respect de prefers-reduced-motion, couleurs basées sur les tokens - Slider : défilement par page (slidesToScroll = slidesToShow), garde-fous Math.max(1, …), autoplay ralenti à 6s - Aucun partenaire : zone logos masquée sans casser le footer - Variante sans slider : logos en flex centrés et repliables Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- flèches de navigation externes (pilule [← | →]) pilotées via ref - support de prefers-reduced-motion (coupe autoplay + glissement animé) - hauteur de logo surchargeable par partenaire (Partner.height) - seuils responsives centralisés (BREAKPOINTS) pour Slider et contrôles - centrage vertical des logos + espace réservé aux dots Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ajoute un columnGap/rowGap basé sur les tokens du thème au Form inline afin d'espacer automatiquement chaque contrôle (Année, Territoire, …). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Introduit une couche de contraste (`contrast.ts`) et un hook `useBrandForeground` qui utilise `colorPrimary` en avant-plan uniquement là où elle atteint le seuil WCAG (3:1 UI / 4.5:1 texte), avec repli sur `colorText` sinon — résolu au runtime contre la vraie surface, par mode. Appliqué dans Footer (icône scroll), Sider (focus ring + item sélectionné), LoadingContainer (icône empty) et via `AccessibleBrandButtons` dans le ThemeProvider (hover des boutons `default`). La surface de `VisualIdentityColors` est réduite à `colorPrimary` + `colorLink` : AntD dérive les tokens restants automatiquement. Un `console.warn` est émis à la création si la primaire échoue le contraste WCAG sur la surface de référence du mode concerné. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Supprime la couche de rétrocompatibilité qui acceptait un ThemeConfig Ant Design brut (avec console.warn de dépréciation) ainsi que le garde-fou de mutuelle-exclusion theme/visualIdentity. L'API se réduit à `theme: ThemeName` + `visualIdentity`. visualIdentity reste prioritaire. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Retire la constante exportée `default_theme` (plus consommée nulle part, non ré-exportée depuis le barrel racine) et restreint la prop `theme` de DashboardConfig à `ThemeName`. Nettoie l'import `ThemeConfig` devenu inutile. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Retire la constante `cardStyles` (styles figés, @deprecated) et son export. Tous les composants consomment déjà `useCardStyles()`, dérivé des tokens du thème actif (compatible light/dark). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- ThemeProvider.test : supprime le describe de rétrocompatibilité (3 tests console.warn) ; conserve le test de robustesse null -> geo2france. - ThemeProvider.visualIdentity.test : réécrit le test de mutuelle-exclusion en « visualIdentity prioritaire sur un preset theme » (sans console.error). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- CHANGELOG : remplace la section Deprecated par Removed (ThemeConfig brut, default_theme, cardStyles) et corrige l'exemple de migration. - JOURNAL : objectif final recentré sur le fork (sans PR upstream ni npm), ajoute la Phase 7 « Nettoyage des béquilles » et met à jour le tableau d'état. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Prestation UI/UX L. Collignon (resolve confict)
jbdesbas
marked this pull request as ready for review
July 15, 2026 14:59
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#189 ajout de la propriété
sortBydans le composant<Dataset>pour filter depuis le provider.#190 amélioration du composant
Map#196 Nouveau système de theming