@synertech/ui 0.41.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -160,6 +160,12 @@ import { cn } from "@synertech/ui";
160
160
  - `BulletChart` - Réalisé, objectif et plages qualitatives sur une seule ligne
161
161
  - `ChartFacets` - Petits multiples : un même graphique répété, à échelle partagée
162
162
  - `ChartScaleLegend` - La légende d'une rampe de couleur
163
+ - `WaterfallChart` - Comment on passe de A à B : chaque contribution, positive ou négative
164
+ - `FunnelChart` - Des étapes ordonnées et leur déperdition (rampe ordinale)
165
+ - `DumbbellChart` - Avant → après par élément, ou une plage min–max
166
+ - `BoxPlot` - Médiane, quartiles, moustaches et valeurs aberrantes
167
+ - `CandlestickChart` - Ouverture, haut, bas, clôture (couleurs de statut)
168
+ - `GanttChart` - Des tâches dans le temps, avec dépendances et jalons
163
169
 
164
170
  ### Feedback & Overlays
165
171
 
@@ -628,6 +634,25 @@ const data = [
628
634
  bubble={{ key: "clients", range: [4, 18] }}
629
635
  trendLine
630
636
  />
637
+
638
+ // Histogramme — `bins` lit x.key comme une mesure, la range et la compte
639
+ <BarChart
640
+ data={sessions} // [{ duration: 42 }, { duration: 118 }, ...]
641
+ x={{ key: "duration", label: "Durée (s)" }}
642
+ series={[{ key: "sessions", label: "Sessions" }]} // nomme le COMPTE
643
+ bins={12} // ou true (auto), ou [0, 15, 30, 60, 120]
644
+ />
645
+
646
+ // Barres + ligne — une série typée, un seul axe
647
+ <BarChart
648
+ data={monthly}
649
+ x={{ key: "month" }}
650
+ series={[
651
+ { key: "commandes", label: "Commandes" },
652
+ { key: "retours", label: "Retours", type: "line" },
653
+ ]}
654
+ curve="monotone"
655
+ />
631
656
  ```
632
657
 
633
658
  ```tsx
@@ -654,6 +679,59 @@ const data = [
654
679
  normalize="row" // "row" (par défaut) | "shared" → ramène l'axe des valeurs
655
680
  />
656
681
 
682
+ // Cascade — chaque pas flotte entre le cumul avant et après lui
683
+ <WaterfallChart
684
+ data={budget} // [{ poste, montant, jalon? }, ...]
685
+ x={{ key: "poste" }}
686
+ value="montant"
687
+ total="jalon" // ligne de contrôle dessinée depuis zéro
688
+ start={0} // cumul d'ouverture
689
+ />
690
+
691
+ // Tunnel — étapes ORDONNÉES, donc rampe ordinale (jamais les créneaux)
692
+ <FunnelChart
693
+ data={stages} // [{ etape, utilisateurs }, ...]
694
+ x={{ key: "etape" }}
695
+ value="utilisateurs"
696
+ align="center" // "center" (silhouette) | "left" (comparaison)
697
+ showConversion // le ratio d'un pas au suivant : le constat
698
+ />
699
+
700
+ // Haltère — avant → après, ou une plage. L'écart EST la marque
701
+ <DumbbellChart
702
+ data={satisfaction}
703
+ x={{ key: "service" }}
704
+ series={[{ key: "avant", label: "2025" }, { key: "apres", label: "2026" }]}
705
+ sort="gap" // les plus gros mouvements en tête
706
+ />
707
+
708
+ // Boîte à moustaches — `values` (observations) ou `quantiles` (résumé)
709
+ <BoxPlot
710
+ data={teams} // [{ equipe, durees: [12, 14, ...] }, ...]
711
+ x={{ key: "equipe" }}
712
+ values="durees" // moustaches de Tukey + aberrations calculées
713
+ showMean // le losange : l'écart moyenne/médiane = la queue
714
+ />
715
+
716
+ // Chandeliers — couleurs de statut + corps creux/plein, jamais la teinte seule
717
+ <CandlestickChart
718
+ data={sessions}
719
+ x={{ key: "jour" }}
720
+ open="ouverture" high="haut" low="bas" close="cloture"
721
+ />
722
+
723
+ // Planning — dates, dépendances, jalons. Ce n'est pas un `Calendar`
724
+ <GanttChart
725
+ data={project}
726
+ x={{ key: "tache" }}
727
+ start="debut" end="fin"
728
+ id="id" dependencies="depend" // les flèches : ce qui bloque quoi
729
+ progress="avancement" // 0 à 1
730
+ milestone="jalon"
731
+ group="lot" // un créneau de palette par lot
732
+ today="2026-04-14"
733
+ />
734
+
657
735
  // Petits multiples — le domaine est calculé sur l'ensemble et imposé à chaque panneau
658
736
  <ChartFacets data={rows} by="region" values={["revenue"]} columns={3}>
659
737
  {({ data, domain, label }) => (
@@ -691,6 +769,23 @@ const data = [
691
769
  - **La rampe divergente dit un sens, pas un jugement.** « Au-dessus » n'est pas
692
770
  « bon » : un délai qui glisse est au-dessus. Le jugement appartient aux
693
771
  couleurs de statut, toujours accompagnées d'un libellé.
772
+ - **Un `BarChart` combiné garde un seul axe.** Une série `type: "line"` partage
773
+ l'échelle des barres. Deux axes laissent deux mesures étrangères se croiser
774
+ là où le cadrage les place, ce qui se lit comme une corrélation inventée.
775
+ - **Un histogramme ne se trie pas.** `sort`, `stack` et `diverging` sont ignorés
776
+ avec `bins` : les seaux ont un ordre, et le réordonner détruit la forme.
777
+ - **Un tunnel encode une longueur, pas une surface.** Le trapèze classique
778
+ demande de comparer deux surfaces, ce que l'œil ne sait pas faire.
779
+ - **Un `BoxPlot` nourri d'un résumé ne dessine aucune valeur aberrante.** Les
780
+ bornes de Tukey ont besoin des observations ; le composant préfère ne rien
781
+ affirmer plutôt qu'inventer.
782
+ - **`DumbbellChart` et `BoxPlot` ne s'ancrent pas à zéro.** Ils se lisent à un
783
+ écart et à un étalement, pas à la longueur d'une marque depuis une base.
784
+ - **`CandlestickChart` porte le sens deux fois** : couleur de statut ET corps
785
+ creux (hausse) contre plein (baisse). Vert contre rouge est la pire paire
786
+ sous déficience de vision des couleurs.
787
+ - **`GanttChart` n'est pas un `Calendar`.** Le calendrier sélectionne une date
788
+ et la renvoie ; le planning se lit. Une ligne sans largeur est un jalon.
694
789
 
695
790
  ### Cartes KPI
696
791