@micheeeeel/yinyangapp 3.0.0 → 3.0.1

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.
@@ -6,6 +6,9 @@ import { type ContactProfileData } from "../data/contacts";
6
6
  * Cause attendu par mapCauseToInternalModel.
7
7
  * Les scores initiaux sont neutres (0.5 = 50 % de tension), les poids valent 1
8
8
  * par satellite tant qu'aucune valeur n'est renseignée dans les données.
9
+ * Poids d'une facette (taille de son arc) : C_f, moyenne des poids de TOUS
10
+ * ses satellites, catégories confondues, zéros inclus (`meanWeight`) — même
11
+ * règle pour une cause et pour un contact (POC-05A4).
9
12
  */
10
13
  export declare function composantesToCause(composantes: Composante[], id?: string, name?: string): Cause;
11
14
  /** La `Cause` du Yasuní, fraîchement construite à chaque appel (l'hôte peut
@@ -98,5 +98,9 @@ export declare function projectGhostStateForComponent(params: {
98
98
  sourceCuttingIndex: number;
99
99
  actionDelta: number;
100
100
  }): GhostProjectionResult | null;
101
+ /** Tension projetée de la facette : même règle que sa tension courante
102
+ * (`facetTensionFromOdds`, moyenne pondérée sur tous ses satellites), sur
103
+ * les tensions projetées de chaque satellite. */
104
+ export declare function projectedComponentTension(component: YinYangInternalModel["components"][number], projectedCuttingStatesByOddId: ReadonlyMap<string, readonly ProjectedCuttingState[]>): number;
101
105
  export declare function getOriginalComponentTension(component: YinYangInternalModel["components"][number] | undefined): number | null;
102
106
  export declare function getOriginalOddTension(component: YinYangInternalModel["components"][number] | undefined, oddId: string): number | null;
@@ -305,20 +305,16 @@ export declare class ViewInitializer {
305
305
  */
306
306
  getAverageTension(): number;
307
307
  getAverageState(): number;
308
- /** Poids agrégé de la facette courante : somme des poids de tous ses ODD
309
- * (même formule que getOddWeight, celle qui fixe la taille de chaque
310
- * arc — le chiffre affiché au centre du cercle explique donc la somme
311
- * des arcs qui l'entourent). */
308
+ /** Poids C_f de la facette courante : moyenne des poids de tous ses
309
+ * satellites (`meanWeight`, même règle que `perimeterWeight`, qui fixe la
310
+ * taille de son arc de bordure). */
312
311
  getFacetteWeight(): number;
313
- /** Plafond du poids agrégé : WEIGHT_MAX par satellite, tous ODD confondus
314
- * (même règle que le plafond par-ODD affiché sur les arcs, voir
315
- * buildOddArcLabelLines dans YinYangDrawer). */
312
+ /** Plafond du poids C_f : WEIGHT_MAX, quel que soit le nombre de
313
+ * satellites. */
316
314
  getFacetteWeightMax(): number;
317
315
  /** getFacetteWeight pour une facette quelconque (poids de chaque arc de
318
316
  * bordure quand "Afficher libellés" est actif). */
319
317
  getComponentWeight(component: YinYangComponentNode | null | undefined): number;
320
- /** getFacetteWeightMax pour une facette quelconque. */
321
- getComponentWeightMax(component: YinYangComponentNode | null | undefined): number;
322
318
  getCurrentComponentIndex(): number;
323
319
  getCurrentComponentName(): string;
324
320
  getCurrentComponentOrientation(): "yin" | "yang";
@@ -414,6 +410,10 @@ export declare class ViewInitializer {
414
410
  private getAnimationCurrentState;
415
411
  private getComponentAnimationState;
416
412
  private buildOddCategories;
413
+ /** Part d'une catégorie DANS sa facette (angle de son arc au cercle
414
+ * central) : somme des poids de ses satellites — chaque satellite compte
415
+ * une fois, comme dans Q_f. Sa pastille, elle, affiche la moyenne
416
+ * (`facetWeightLabel`). */
417
417
  private getOddWeight;
418
418
  private buildCategoriesFromComponent;
419
419
  /**
@@ -483,6 +483,8 @@ export declare class ViewInitializer {
483
483
  private buildOddSpikes;
484
484
  private buildComponentSpikes;
485
485
  private buildSpike;
486
+ /** Tension de la facette : moyenne pondérée sur tous ses satellites,
487
+ * repli sur leur moyenne simple (`facetTensionFromOdds`, POC-05A4). */
486
488
  private calculateAverageTension;
487
489
  private getCurrentComponent;
488
490
  handleSparkAngleUpdate(currentAngle: number, previousAngle: number | null): void;
@@ -304,11 +304,11 @@ export declare class YinYangDrawer {
304
304
  */
305
305
  private renderFacetteStateLabel;
306
306
  /**
307
- * Affiche le poids d'une facette ("18/40") DANS son arc de bordure
307
+ * Affiche le poids d'une facette (« 6,8 ») DANS son arc de bordure
308
308
  * (segment de BorderDrawer), et non dans un lobe : ce poids est celui qui
309
- * dimensionne l'arc, il se lit donc sur lui. Le poids et son plafond sont
310
- * la somme des poids de tous les ODD de la facette (voir
311
- * ViewInitializer.getComponentWeight/getComponentWeightMax).
309
+ * dimensionne l'arc, il se lit donc sur lui. C'est C_f, la moyenne des
310
+ * poids de tous ses satellites (`facetWeightLabel`), sur 10 avec le
311
+ * suffixe.
312
312
  *
313
313
  * Par défaut seule la facette active porte son poids (et seulement quand
314
314
  * ses libellés sont visibles, voir shouldShowFacetteLabels) ; avec
@@ -475,12 +475,9 @@ export declare class YinYangDrawer {
475
475
  * (renderChildStateLabel/renderChildWeightLabel), donc le cercle central
476
476
  * et son cortège se lisent enfin de la même façon.
477
477
  *
478
- * Le maximum du poids n'est PAS WEIGHT_MAX : un ODD pèse la somme des
479
- * poids de ses satellites (même formule que ViewInitializer.getOddWeight,
480
- * celle qui fixe l'angle de l'arc — le chiffre affiché explique donc la
481
- * taille de l'arc sous lui), et son plafond est WEIGHT_MAX × nombre de
482
- * satellites. Il est affiché tel quel plutôt que ramené à une échelle /10
483
- * qui n'existe qu'au niveau satellite.
478
+ * Le poids d'un ODD est la moyenne des poids de ses seuls satellites
479
+ * (`facetWeightLabel`, « 6,8 »), sur WEIGHT_MAX avec le suffixe — même
480
+ * lecture que la pastille de sa facette (POC-05A4).
484
481
  *
485
482
  * En mode non compact, le nom court de l'ODD reste affiché au-dessus des
486
483
  * deux métriques : c'est une information que le numéro ne portait pas.
@@ -23,7 +23,9 @@ export interface CauseComponent {
23
23
  description?: string;
24
24
  orientation: YinYangOrientation;
25
25
  odds: CauseOdd[];
26
- /** Somme brute des poids de tous les satellites de la facette. */
26
+ /** Poids de la facette (taille relative de son arc) : C_f, moyenne des
27
+ * poids de TOUS ses satellites, zéros inclus, de 0 à 10 — même règle pour
28
+ * une cause et pour un contact (`meanWeight`, POC-05A4). */
27
29
  perimeterWeight: number;
28
30
  }
29
31
  export interface Cause {
@@ -5,9 +5,40 @@ export declare function clampScore(value: number): number;
5
5
  * Canonical domain metric in [0, 1]. Weighted by each satellite's `weight`
6
6
  * when provided, so a heavier satellite pulls the tension further toward
7
7
  * its own score; falls back to a simple average otherwise.
8
+ *
9
+ * ⚠️ FACETTES D'UN CONTACT : cette règle est reproduite à l'identique par
10
+ * yvy-backend (`src/contacts/contact-facets.ts`), qui fait autorité pour le
11
+ * jeu. Deux implémentations à maintenir identiques : toute évolution met à
12
+ * jour les deux, ainsi que le fichier de cas commun
13
+ * `src/data/contacts/contact-facets.reference.json` (POC-05A2).
8
14
  */
9
15
  export declare function tensionFromCuttings(cuttingScores: number[], cuttingWeights?: number[]): number;
10
16
  export declare const oddTensionFromCuttings: typeof tensionFromCuttings;
17
+ /** Satellites d'une catégorie (ODD) d'une facette : tensions et poids. */
18
+ interface FacetOddCuttings {
19
+ cuttingScores: readonly number[];
20
+ cuttingWeights: readonly number[];
21
+ }
22
+ /**
23
+ * Tension d'une FACETTE (cause ou contact, POC-05A4) : `tensionFromCuttings`
24
+ * sur TOUS ses satellites, catégories confondues — moyenne pondérée par les
25
+ * poids, ou moyenne simple de la facette si tous ses poids sont nuls (pas de
26
+ * repli par catégorie). Q_f = (1 − T) × 100. `cuttingTensions` remplace les
27
+ * tensions de la catégorie d'indice donné (projection d'une action) ; une catégorie dont
28
+ * les poids ne sont pas alignés sur les scores compte ses satellites à 1.
29
+ * Facette sans satellite : 0,5.
30
+ */
31
+ export declare function facetTensionFromOdds(odds: readonly FacetOddCuttings[], cuttingTensions?: (oddIndex: number) => readonly number[] | undefined): number;
32
+ /**
33
+ * POIDS C_f d'une facette — ou d'une catégorie, pour sa pastille — (causes
34
+ * et contacts, POC-05A4) : moyenne arithmétique des poids (bornés à 0) de
35
+ * TOUS ses satellites, zéros inclus, de 0 à 10, indépendante de leur nombre.
36
+ * Fixe la taille des arcs de facette et la valeur des pastilles. Facettes
37
+ * d'un contact : reproduite à l'identique par yvy-backend
38
+ * (`contactFacetWeights`), cas communs dans
39
+ * `src/data/contacts/contact-facets.reference.json`.
40
+ */
41
+ export declare function meanWeight(weights: readonly number[]): number;
11
42
  export declare function stateFromTension(tension: number): number;
12
43
  /** Bornes du poids d'un satellite (importance dans sa facette). Un satellite
13
44
  * vaut 1 par défaut ; les actions le font varier par pas entiers, mais ne
@@ -24,3 +55,4 @@ export declare function clampWeight(value: number): number;
24
55
  * signe — ex: +1 sur un satellite déjà à WEIGHT_MAX ne change rien.
25
56
  */
26
57
  export declare function effectiveWeightDelta(currentWeight: number, delta: number): number;
58
+ export {};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Libellé de la pastille de poids d'une facette ou d'une catégorie (ODD),
3
+ * pour une cause comme pour un contact (POC-05A4) : C_f, moyenne des poids
4
+ * de tous ses satellites (`meanWeight`), arrondie à un chiffre après la
5
+ * virgule, avec une virgule décimale — « 7,2 ». `max` (WEIGHT_MAX, 10) ne
6
+ * s'affiche qu'avec le suffixe (`facetteLabelSuffixVisible`).
7
+ */
8
+ export declare function facetWeightLabel(weights: readonly number[]): {
9
+ value: string;
10
+ max: number;
11
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micheeeeel/yinyangapp",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "A program to visualize human activity balance to reach Sustainable Development Objectives",
5
5
  "main": "dist/bundle.js",
6
6
  "types": "dist/types/main.d.ts",