@micheeeeel/yinyangapp 2.0.5 → 2.1.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.
package/README.md CHANGED
@@ -35,6 +35,8 @@ import {
35
35
  createYinYangSvgs, // idem, en lot
36
36
  mountYinYang, // diagramme vivant dans un conteneur de l'hôte → { controller, destroy }
37
37
  mapCauseToInternalModel,
38
+ createRandomCause, // Cause aléatoire (2–7 composantes, ODD distincts) — graine optionnelle
39
+ getYasuniCause, // le Yasuní complet (7 composantes, 20 ODD) au format Cause
38
40
  type Cause, type YinYangSvgConfig, type YinYangMountConfig,
39
41
  } from "@micheeeeel/yinyangapp";
40
42
  ```
@@ -88,6 +90,19 @@ new mapboxgl.Marker({ element: film }).setLngLat([lng, lat]).addTo(map);
88
90
 
89
91
  - `highlightActiveSegment: false` : bordure neutre unique (pas de mise en avant du
90
92
  segment de la composante courante), film un peu plus léger.
93
+ - `stripSpikes` (défaut `true`) : les pointes (une `<line>` + un dégradé par découpe
94
+ d'ODD, dans chaque calque) sont retirées — invisibles à la taille d'un marker et
95
+ lourdes (Yasuní : 492 → 254 Ko, dégradés 484 → 25). Le film ne garde que
96
+ l'essentiel : lobes yin/yang avec leurs arcs d'ODD, yeux, anneau des facettes.
97
+ `stripSpikes: false` pour les conserver.
98
+ - `yinYangRotationMs` (défaut : pas de rotation) : rotation des lobes yin/yang cuite
99
+ en CSS pur — même cinématique que la rotation de la lib (orbite des deux lobes
100
+ autour du centre, rotation propre de chacun, demi-disque entraîné), continue et
101
+ uniforme, sans rampe ni retour à la position de base. Durée d'un tour en ms,
102
+ surchargeable sans recuire par la variable CSS `--yy-yinyang-rotation` sur le
103
+ `<svg>` (ex. `film.style.setProperty("--yy-yinyang-rotation", "12s")`), comme
104
+ `--yy-rotation` pour l'étincelle. Coût : un groupe orbital animé + un groupe de
105
+ rotation propre par lobe et par calque (film Yasuní ≈ +3 %).
91
106
  - Cuire **une fois par lieu** (≈ 50 ms à `transitionFrames: 0`, ≈ 150 ms à 4) et
92
107
  cloner : `film.cloneNode(true)`.
93
108
  - Sur une page qui anime en continu (carte), préférer **`createYinYangFilmSvgAsync`**
@@ -104,6 +119,22 @@ const film = await createYinYangFilmSvgAsync({ data, size: 100, transitionFrames
104
119
  - Survol / sélection : remplacer le film par `mountYinYang` (diagramme vivant),
105
120
  puis revenir au film.
106
121
 
122
+ ### Données : Yasuní complet ou Cause aléatoire
123
+
124
+ ```ts
125
+ import { createRandomCause, getYasuniCause } from "@micheeeeel/yinyangapp";
126
+
127
+ const yasuni = getYasuniCause(); // identique à la page standalone
128
+ const pin = createRandomCause({ seed: mission.id, id: mission.id }); // stable par graine
129
+ ```
130
+
131
+ `createRandomCause` tire 2 à 7 composantes (orientations alternées), 1 à 3 ODD
132
+ par composante — **distincts dans toute la Cause**, donc couleurs officielles
133
+ jamais répétées — et 1 à 4 facettes par ODD (score ∈ [0.15, 0.85], poids 1–3).
134
+ Toutes les plages sont surchargeables (`components`, `oddsPerComponent`,
135
+ `cuttingsPerOdd`, `score`, `weight`). Même `seed` ⇒ même Cause ; sans graine,
136
+ `Math.random`. Ne touche pas au DOM (utilisable en SSR).
137
+
107
138
  Guide d'intégration détaillé (React + Mapbox, cache, survol) : [docs/integration-yvy-frontend.md](docs/integration-yvy-frontend.md).
108
139
 
109
140
  ## Développement