feat(chart): support y-min/y-max pour l'échelle radiale du type radar#408
Merged
Conversation
Sans borne, l'échelle radiale de Chart.js (scales.r) s'auto-ajuste au min/max des données : le minimum se retrouve au centre du radar, ce qui est trompeur (demande de maturity-model#9, jusqu'ici contourné par un hack applicatif fouillant l'instance Chart.js interne). - baseline déclarative : y-min/y-max relayés vers l'API upstream scale-min/scale-max de <radar-chart> (suggestedMin/Max) — survit aux recréations du chart par le watcher Vue $props - affinage post-montage via resolveChartInstance (même rAF-poll que les overlays) : bornes dures scales.r.min/max + ticks.stepSize 1 quand les deux bornes sont entières avec une amplitude de 1 à 10 (anneaux entiers) - logique pure et testée dans utils/chart-radial-scale.ts - docs (specs dsfr-data-chart) + skill builder-ia mis à jour - comportement inchangé sans y-min/y-max et pour les autres types Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Contexte
Demande issue maturity-model#9 :
y-min/y-maxexistent pour line/scatter (axe y Chart.js) mais sont ignorés par le typeradar, qui utilise l'échelle radialescales.r. Sans borne, celle-ci s'auto-ajuste au min/max des données : le minimum des données se retrouve au centre du radar, ce qui est trompeur (un score 2,1/4 semble nul). L'app maturity-model contournait via un hack JS fouillant l'instance Chart.js interne du web component.Implémentation
Mécanisme en deux étages (
type="radar"+y-minet/ouy-max) :<radar-chart>upstream (@gouvfr/dsfr-chart) expose des propsscale-min/scale-maxmappées sursuggestedMin/suggestedMaxdescales.r.dsfr-data-chartrelaiey-min/y-maxvers ces attributs dans_getTypeSpecificAttributes(). Avantage : survit aux recréations du chart par le watcher Vue$props(chaquecreateChart()repart avec les bornes).resolveChartInstance()(mécanisme existant des overlays dsfr-data-chart : lignes de référence (verticale/horizontale) avec libellé #341/epic(core): dsfr-data-chart — cibles / objectifs futurs (targets) sur les courbes #377) et le même pipeline rAF-poll dansupdated(), on pose les bornes duresscales.r.min/maxetticks.stepSize: 1quand les deux bornes sont entières avec une amplitude de 1 à 10 (anneaux de grille entiers), puischart.update('none'). Dégradation gracieuse : si l'instance est introuvable, la baseline déclarative reste appliquée.La logique est pure et isolée dans
packages/core/src/utils/chart-radial-scale.ts(computeRadialScaleBounds,applyRadialScaleBounds), sur le modèle dechart-reference-lines.ts.Comportement strictement inchangé sans
y-min/y-maxet pour les autres types.Fichiers
packages/core/src/utils/chart-radial-scale.ts(nouveau) — logique purepackages/core/src/components/dsfr-data-chart.ts— relais scale-min/scale-max + pipeline rAF post-montagespecs/components/dsfr-data-chart.html— doc attributs + exemple radar bornéapps/builder-ia/src/skills.ts— tables d'attributs et guide des types mis à jour.changeset/radar-y-min-max.md— changesetminorTests
tests/utils/chart-radial-scale.test.ts(nouveau) : bornes posées, stepSize (entiers/amplitude), valeurs non entières, borne unique, idempotence (pas d'update()inutile), instance pas prêtetests/dsfr-data-chart.test.ts: radar avec/sans bornes, borne unique, non-radar inchangé, planification/annulation du rAF-pollnpm run test:run)npm run lint: 0 erreur (3 warnings préexistants sur main),npm run typechecketnpm run buildOK🤖 Generated with Claude Code