@micheeeeel/yinyangapp 3.0.0 → 3.1.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.
- package/dist/bundle.css +1 -0
- package/dist/bundle.js +1 -2
- package/dist/types/adapters/yasuniCauseAdapter.d.ts +3 -0
- package/dist/types/adapters/yinYangAdapter.d.ts +7 -0
- package/dist/types/animations/AnimationsMngr.d.ts +69 -15
- package/dist/types/animations/FrameScheduler.d.ts +99 -0
- package/dist/types/animations/rotationMotion.d.ts +43 -0
- package/dist/types/api.d.ts +17 -2
- package/dist/types/benchmark/runner.d.ts +20 -0
- package/dist/types/benchmark/scenarios.d.ts +55 -6
- package/dist/types/components/controller/YinYangController.d.ts +104 -14
- package/dist/types/components/controller/action-stack/ActionStackController.d.ts +16 -1
- package/dist/types/components/controller/action-stack/ActionStackDragHandler.d.ts +4 -0
- package/dist/types/components/controller/action-stack/ActionStackManager.d.ts +13 -2
- package/dist/types/components/controller/action-stack/ActionStackState.d.ts +8 -5
- package/dist/types/components/controller/action-stack/StackFocusController.d.ts +8 -7
- package/dist/types/components/controller/action-stack/stackChromePalette.d.ts +20 -0
- package/dist/types/components/controller/actions/ActionProjectionService.d.ts +16 -1
- package/dist/types/components/controller/actions/ChildActionMenuController.d.ts +74 -32
- package/dist/types/components/controller/actions/KeyEventController.d.ts +78 -70
- package/dist/types/components/controller/actions/{CoreEventMenuController.d.ts → KeyEventMenuController.d.ts} +28 -33
- package/dist/types/components/controller/actions/radialItemMenu.d.ts +43 -5
- package/dist/types/components/controller/children/ChildInteractionController.d.ts +4 -0
- package/dist/types/components/controller/children/ChildrenBuilder.d.ts +3 -1
- package/dist/types/components/controller/children/ComponentSwitchCoordinator.d.ts +3 -1
- package/dist/types/components/controller/children/IdleFacettesController.d.ts +151 -0
- package/dist/types/components/controller/children/idleTabLayout.d.ts +95 -0
- package/dist/types/components/controller/children/idleTabMorph.d.ts +45 -0
- package/dist/types/components/controller/force-field/EventFieldLifecycleController.d.ts +14 -0
- package/dist/types/components/controller/force-field/EventFieldRenderer.d.ts +3 -3
- package/dist/types/components/controller/force-field/ForceFieldCanvasPainter.d.ts +99 -0
- package/dist/types/components/controller/force-field/ForceFieldComputationService.d.ts +9 -0
- package/dist/types/components/controller/force-field/ForceFieldDetailsPanel.d.ts +28 -57
- package/dist/types/components/controller/force-field/ForceFieldDetailsPresenter.d.ts +4 -1
- package/dist/types/components/controller/force-field/ForceFieldLifecycleController.d.ts +16 -1
- package/dist/types/components/controller/force-field/ForceFieldRenderer.d.ts +10 -18
- package/dist/types/components/controller/force-field/IncomingForceFieldService.d.ts +2 -2
- package/dist/types/components/controller/force-field/PropagationAnimator.d.ts +2 -0
- package/dist/types/components/controller/force-field/keyEventPresentation.d.ts +47 -0
- package/dist/types/components/controller/force-field/propagation-viz/PropagationCometPlayer.d.ts +4 -0
- package/dist/types/components/controller/force-field/propagation-viz/propagationVizLists.d.ts +4 -2
- package/dist/types/components/controller/force-field/propagation-viz/propagationVizModel.d.ts +1 -0
- package/dist/types/components/controller/force-field/shieldViewModel.d.ts +6 -2
- package/dist/types/components/controller/force-field/types.d.ts +2 -1
- package/dist/types/components/controller/labels/ChildScoresDeltaRenderer.d.ts +7 -0
- package/dist/types/components/controller/labels/ComponentTitlePresenter.d.ts +13 -0
- package/dist/types/components/controller/labels/ContextLabelsRenderer.d.ts +16 -0
- package/dist/types/components/controller/labels/WeightPreviewRingRenderer.d.ts +6 -0
- package/dist/types/components/controller/odd/ChildrenOrbitManager.d.ts +76 -25
- package/dist/types/components/controller/odd/OddHighlightEffects.d.ts +2 -0
- package/dist/types/components/controller/odd/OddViewManager.d.ts +7 -3
- package/dist/types/components/controller/odd/childHighlightStyles.d.ts +45 -3
- package/dist/types/components/controller/search/SearchPanelSynchronizer.d.ts +8 -5
- package/dist/types/components/controller/settings/ControllerSettingsApplier.d.ts +4 -4
- package/dist/types/components/controller/state/ControllerSession.d.ts +3 -3
- package/dist/types/components/controller/state/ControllerUiCallbacks.d.ts +10 -0
- package/dist/types/components/controller/state/YinYangControllerState.d.ts +20 -9
- package/dist/types/components/controller/types.d.ts +9 -2
- package/dist/types/components/controller/utils/actionCatalog.d.ts +1 -1
- package/dist/types/components/controller/utils/eventFieldTargets.d.ts +19 -13
- package/dist/types/components/controller/utils/keyEventPropagationContext.d.ts +4 -0
- package/dist/types/components/controller/utils/keyEventTargetBreakdowns.d.ts +4 -0
- package/dist/types/components/controller/utils/svgTransform.d.ts +16 -0
- package/dist/types/components/controls/VizControlsPanel.d.ts +3 -1
- package/dist/types/components/panel/PanelManager.d.ts +92 -22
- package/dist/types/components/search/GlobalSearchController.d.ts +13 -6
- package/dist/types/components/view/BorderDrawer.d.ts +40 -14
- package/dist/types/components/view/IdleTabGridDrawer.d.ts +15 -0
- package/dist/types/components/view/SpikeDrawer.d.ts +18 -0
- package/dist/types/components/view/ViewInitializer.d.ts +53 -13
- package/dist/types/components/view/YinYangDrawer.d.ts +139 -40
- package/dist/types/components/view/borderColorCycle.d.ts +76 -0
- package/dist/types/components/workspace/facetWeightRuleSetting.d.ts +10 -0
- package/dist/types/components/workspace/workspaceTemplate.d.ts +1 -1
- package/dist/types/config/animationConfig.d.ts +10 -1
- package/dist/types/data/adverse-action-planner.d.ts +3 -3
- package/dist/types/data/amplifier-engine.d.ts +6 -6
- package/dist/types/data/key-event-effects.d.ts +30 -0
- package/dist/types/data/key-event-eligibility.d.ts +24 -0
- package/dist/types/data/key-event-propagation.d.ts +13 -0
- package/dist/types/data/key-event-types.d.ts +48 -0
- package/dist/types/data/key-event-validation.d.ts +11 -0
- package/dist/types/data/stability-shield.d.ts +14 -0
- package/dist/types/data/yasuni_adverse_key_events.d.ts +1 -1
- package/dist/types/data/yasuni_cause.d.ts +7 -0
- package/dist/types/data/yasuni_key_events.d.ts +4 -60
- package/dist/types/interfaces/ICauseModel.d.ts +12 -1
- package/dist/types/interfaces/IGraphicsStrategy.d.ts +9 -2
- package/dist/types/interfaces/IPropagationGraph.d.ts +14 -0
- package/dist/types/interfaces/IViewData.d.ts +10 -0
- package/dist/types/interfaces/IYinYangController.d.ts +25 -7
- package/dist/types/interfaces/IYinYangInternalModel.d.ts +5 -0
- package/dist/types/main.d.ts +0 -1
- package/dist/types/utils/actionIconFit.d.ts +23 -0
- package/dist/types/utils/actionPropagation.d.ts +6 -4
- package/dist/types/utils/causeMetrics.d.ts +50 -0
- package/dist/types/utils/chainCardHeight.d.ts +87 -4
- package/dist/types/utils/collapseAnimation.d.ts +39 -0
- package/dist/types/utils/d3/D3GraphicsStrategy.d.ts +28 -5
- package/dist/types/utils/deltaChips.d.ts +0 -4
- package/dist/types/utils/exportControls.d.ts +8 -0
- package/dist/types/utils/facetWeightLabel.d.ts +13 -0
- package/dist/types/utils/facetteImages.d.ts +6 -0
- package/dist/types/utils/glowHalo.d.ts +74 -0
- package/dist/types/utils/hierBadge.d.ts +1 -1
- package/dist/types/utils/keyEventImages.d.ts +1 -1
- package/dist/types/utils/menuIconSize.d.ts +17 -0
- package/dist/types/utils/spreadAngles.d.ts +8 -0
- package/package.json +4 -1
- package/dist/bundle.js.LICENSE.txt +0 -1
|
@@ -11,6 +11,12 @@ export declare class ViewInitializer {
|
|
|
11
11
|
graphicContainer: IGraphicElement;
|
|
12
12
|
graphicStrategy: IGraphicsStrategy;
|
|
13
13
|
globalGroup: IGraphicElement;
|
|
14
|
+
/** Enveloppe du globalGroup d'un satellite, sous le children-group du
|
|
15
|
+
* parent : porte la seule translation d'orbite, jouée par le navigateur
|
|
16
|
+
* (ChildrenOrbitManager), sans toucher aux transforms que d'autres posent
|
|
17
|
+
* sur le globalGroup (respiration du poids). C'est le nœud à retirer pour
|
|
18
|
+
* supprimer le satellite. Pour le parent : son globalGroup. */
|
|
19
|
+
orbitGroup: IGraphicElement;
|
|
14
20
|
yinOrYangGroup: {
|
|
15
21
|
yin: IYinOrYangPattern;
|
|
16
22
|
yang: IYinOrYangPattern;
|
|
@@ -20,6 +26,11 @@ export declare class ViewInitializer {
|
|
|
20
26
|
yang: IYinOrYangPattern;
|
|
21
27
|
};
|
|
22
28
|
yinYangGroup: IGraphicElement;
|
|
29
|
+
/** Rappelé, une fois par tâche, quand ce qui suit la rotation Yin/Yang
|
|
30
|
+
* change : géométrie des lobes, libellés contre-tournés redessinés.
|
|
31
|
+
* AnimationsMngr y refait ses animations pendant une rotation. */
|
|
32
|
+
onRotationTargetsChanged: (() => void) | null;
|
|
33
|
+
private rotationTargetsChangePending;
|
|
23
34
|
childrenGroup: IGraphicElement;
|
|
24
35
|
facetteImageBackgroundGroup: IGraphicElement;
|
|
25
36
|
borderArcsGroup: IGraphicElement;
|
|
@@ -220,6 +231,8 @@ export declare class ViewInitializer {
|
|
|
220
231
|
private currentComponentIndex;
|
|
221
232
|
private animationSequence;
|
|
222
233
|
private isAnimationRunning;
|
|
234
|
+
private transitionFrameId;
|
|
235
|
+
private observedRoot;
|
|
223
236
|
private isDisplayingOddMode;
|
|
224
237
|
/**
|
|
225
238
|
* Returns whether the view is currently in ODD display mode.
|
|
@@ -285,6 +298,18 @@ export declare class ViewInitializer {
|
|
|
285
298
|
* Keeps yinYangGroup intact while refreshing symbol groups and spikes.
|
|
286
299
|
*/
|
|
287
300
|
private redrawYinYangGeometry;
|
|
301
|
+
/**
|
|
302
|
+
* Frame d'une transition de facette ou d'ODD : quand les nœuds du dernier
|
|
303
|
+
* rendu complet couvrent déjà les catégories de la frame, seuls leurs
|
|
304
|
+
* attributs sont réécrits (YinYangDrawer.updateSwitchFrame,
|
|
305
|
+
* SpikeDrawer.updateSpikePositions) ; sinon — typiquement la première
|
|
306
|
+
* frame, où les catégories entrantes rejoignent les sortantes — rendu
|
|
307
|
+
* complet. Bordures, poids de la facette et illustration idle ne dépendent
|
|
308
|
+
* pas de l'interpolation : ils attendent la dernière frame, toujours rendue
|
|
309
|
+
* en entier pour que l'état final soit exactement celui d'un rendu complet.
|
|
310
|
+
*/
|
|
311
|
+
private renderTransitionFrame;
|
|
312
|
+
private updateGeometryInPlace;
|
|
288
313
|
/**
|
|
289
314
|
* Redraws the ghost Yin/Yang geometry without touching borders or spikes.
|
|
290
315
|
*/
|
|
@@ -305,29 +330,24 @@ export declare class ViewInitializer {
|
|
|
305
330
|
*/
|
|
306
331
|
getAverageTension(): number;
|
|
307
332
|
getAverageState(): number;
|
|
308
|
-
/** Poids
|
|
309
|
-
* (même
|
|
310
|
-
*
|
|
311
|
-
* des arcs qui l'entourent). */
|
|
333
|
+
/** Poids C_f de la facette courante : moyenne des poids de tous ses
|
|
334
|
+
* satellites (`facetWeight`, même règle que `perimeterWeight`, qui fixe la
|
|
335
|
+
* taille de son arc de bordure). */
|
|
312
336
|
getFacetteWeight(): number;
|
|
313
|
-
/** Plafond du poids
|
|
314
|
-
* (même règle que le plafond par-ODD affiché sur les arcs, voir
|
|
315
|
-
* buildOddArcLabelLines dans YinYangDrawer). */
|
|
337
|
+
/** Plafond du poids de la facette courante (`facetWeightMax`). */
|
|
316
338
|
getFacetteWeightMax(): number;
|
|
317
339
|
/** getFacetteWeight pour une facette quelconque (poids de chaque arc de
|
|
318
340
|
* bordure quand "Afficher libellés" est actif). */
|
|
319
341
|
getComponentWeight(component: YinYangComponentNode | null | undefined): number;
|
|
320
|
-
/** getFacetteWeightMax pour une facette quelconque. */
|
|
321
|
-
getComponentWeightMax(component: YinYangComponentNode | null | undefined): number;
|
|
322
342
|
getCurrentComponentIndex(): number;
|
|
323
343
|
getCurrentComponentName(): string;
|
|
324
344
|
getCurrentComponentOrientation(): "yin" | "yang";
|
|
325
345
|
/**
|
|
326
346
|
* Centre courant (écran, repère de `globalGroup`) du sous-cercle yin ou
|
|
327
347
|
* yang, en tenant compte d'une éventuelle rotation Yin/Yang en cours
|
|
328
|
-
* (AnimationsMngr
|
|
329
|
-
* `yinOrYangGroup[orientation].graphElementGroup
|
|
330
|
-
*
|
|
348
|
+
* (AnimationsMngr anime, par Web Animations, un `transform` orbite+spin
|
|
349
|
+
* sur `yinOrYangGroup[orientation].graphElementGroup`, sans jamais
|
|
350
|
+
* toucher `geometry` ; le CTM reflète la valeur animée courante). Résolu via le CTM plutôt qu'en rejouant la
|
|
331
351
|
* formule d'orbite d'AnimationsMngr : le point transformé est le centre
|
|
332
352
|
* CANONIQUE du lobe, qui est aussi le pivot de sa rotation locale — une
|
|
333
353
|
* rotation autour de son propre point fixe n'a par construction aucun
|
|
@@ -410,10 +430,18 @@ export declare class ViewInitializer {
|
|
|
410
430
|
*/
|
|
411
431
|
private interpolateCategoriesRGB;
|
|
412
432
|
private startCategoryAnimation;
|
|
433
|
+
private requestTransitionFrame;
|
|
434
|
+
/** Fin de vie : coupe la transition de facette en cours, le suivi de
|
|
435
|
+
* visibilité du diagramme et le rappel de rotation. */
|
|
436
|
+
destroy(): void;
|
|
413
437
|
private startComponentAnimationLoop;
|
|
414
438
|
private getAnimationCurrentState;
|
|
415
439
|
private getComponentAnimationState;
|
|
416
440
|
private buildOddCategories;
|
|
441
|
+
/** Part d'une catégorie DANS sa facette (angle de son arc au cercle
|
|
442
|
+
* central) : somme des poids de ses satellites — chaque satellite compte
|
|
443
|
+
* une fois, comme dans Q_f. Sa pastille, elle, affiche la moyenne
|
|
444
|
+
* (`facetWeightLabel`). */
|
|
417
445
|
private getOddWeight;
|
|
418
446
|
private buildCategoriesFromComponent;
|
|
419
447
|
/**
|
|
@@ -442,7 +470,14 @@ export declare class ViewInitializer {
|
|
|
442
470
|
private buildGhostOddSpikes;
|
|
443
471
|
private buildGhostComponentSpikes;
|
|
444
472
|
private areCategoriesEqual;
|
|
445
|
-
|
|
473
|
+
/**
|
|
474
|
+
* Vide un lobe avant son rendu complet, sauf ses libellés (calque des
|
|
475
|
+
* libellés d'arc ODD, score de la facette) : leurs rendus les mettent à
|
|
476
|
+
* jour par jointure, ce qui les garde visibles d'un rendu à l'autre. Les
|
|
477
|
+
* recréer à chaque rendu les faisait repartir d'une opacité nulle — et les
|
|
478
|
+
* laissait invisibles pendant toute une transition de facette.
|
|
479
|
+
*/
|
|
480
|
+
private clearLobeGroup;
|
|
446
481
|
/**
|
|
447
482
|
* Converts hex color to RGB object.
|
|
448
483
|
* @param hex Hex color (e.g., "#FF0000")
|
|
@@ -473,6 +508,9 @@ export declare class ViewInitializer {
|
|
|
473
508
|
*/
|
|
474
509
|
private createYinOrYangGroups;
|
|
475
510
|
private updateYinOrYangGroup;
|
|
511
|
+
/** Signale (en fin de tâche, après le rendu en cours) que les cibles de
|
|
512
|
+
* la rotation ont changé — voir onRotationTargetsChanged. */
|
|
513
|
+
notifyRotationTargetsChanged(): void;
|
|
476
514
|
private applyGhostOverlapRules;
|
|
477
515
|
private buildGeometry;
|
|
478
516
|
private buildSpikes;
|
|
@@ -483,6 +521,8 @@ export declare class ViewInitializer {
|
|
|
483
521
|
private buildOddSpikes;
|
|
484
522
|
private buildComponentSpikes;
|
|
485
523
|
private buildSpike;
|
|
524
|
+
/** Tension de la facette : moyenne pondérée sur tous ses satellites,
|
|
525
|
+
* repli sur leur moyenne simple (`facetTensionFromOdds`, POC-05A4). */
|
|
486
526
|
private calculateAverageTension;
|
|
487
527
|
private getCurrentComponent;
|
|
488
528
|
handleSparkAngleUpdate(currentAngle: number, previousAngle: number | null): void;
|
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
import { ViewInitializer } from "./ViewInitializer";
|
|
2
2
|
import { IYinOrYangPattern } from "../../interfaces/IYinOrYangPattern";
|
|
3
|
+
/**
|
|
4
|
+
* Exécute `draw` en différant l'ajustement des pastilles de poids
|
|
5
|
+
* (fitWeightPill) qu'il demande : toutes les mesures d'abord, toutes les
|
|
6
|
+
* écritures ensuite. Créer les satellites un à un alternait sinon écriture
|
|
7
|
+
* du DOM et getBBox, soit une mise en page complète par satellite.
|
|
8
|
+
*/
|
|
9
|
+
export declare function batchWeightPillFits(draw: () => void): void;
|
|
10
|
+
/** Libellé qui reste droit pendant la rotation Yin/Yang (voir
|
|
11
|
+
* YinYangDrawer.getCounterRotatedLabels). */
|
|
12
|
+
export interface CounterRotatedLabel {
|
|
13
|
+
node: Element;
|
|
14
|
+
lobe: "yin" | "yang";
|
|
15
|
+
/** Pivot de la contre-rotation ; nul = origine locale du nœud. */
|
|
16
|
+
pivot: {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
} | null;
|
|
20
|
+
}
|
|
3
21
|
export declare class YinYangDrawer {
|
|
4
22
|
private ViewInitializer;
|
|
5
23
|
private yinYangGroup;
|
|
@@ -23,6 +41,9 @@ export declare class YinYangDrawer {
|
|
|
23
41
|
* ViewInitializer.ghostDeltaBadgeSizeBoost pour l'agrandissement, réglable
|
|
24
42
|
* en direct, appliqué au-delà de cette base. */
|
|
25
43
|
private readonly GHOST_DELTA_BADGE_NUCLEUS_FILL;
|
|
44
|
+
/** Arcs d'onde des ODD et leur générateur, gardés d'une frame à l'autre
|
|
45
|
+
* tant que les entrées, le calque et la géométrie ne changent pas. */
|
|
46
|
+
private categoryArcGhostWaveCache;
|
|
26
47
|
private categoryArcGhostEntries;
|
|
27
48
|
private categoryArcGhostFrameId;
|
|
28
49
|
private readonly CHILD_SCORE_BAND_FRACTION;
|
|
@@ -37,17 +58,24 @@ export declare class YinYangDrawer {
|
|
|
37
58
|
private outerSparkStartTimeMs;
|
|
38
59
|
private outerSparkPhaseMs;
|
|
39
60
|
private outerSparkRotationDurationMs;
|
|
40
|
-
|
|
61
|
+
/** Groupe tourné de l'étincelle et centre de sa rotation — lus par le
|
|
62
|
+
* timer, qui survit aux appels suivants de startOuterSparkAnimation. */
|
|
63
|
+
private outerSparkRotor;
|
|
64
|
+
private outerSparkCenter;
|
|
41
65
|
private outerSparkLastAngleRad;
|
|
42
66
|
private balanceSparkOnComplete;
|
|
43
67
|
private readonly balanceSparkInstances;
|
|
44
68
|
private balanceSparkTadpoleIdSeq;
|
|
45
69
|
private readonly balanceSparkTadpoles;
|
|
46
70
|
private balanceSparkTadpoleTimer;
|
|
71
|
+
/** Cible partagée des têtards (bas du conteneur), mesurée au plus toutes
|
|
72
|
+
* les 500 ms — voir tickBalanceSparkTadpoles. */
|
|
73
|
+
private balanceSparkTadpoleTarget;
|
|
47
74
|
/** Cruising speed (px/ms) and cutoff (as a multiple of the main circle's
|
|
48
75
|
* radius) for the lone-survivor drift — see the fragment block in
|
|
49
76
|
* startBalanceSparkAnimation's timer. */
|
|
50
77
|
private readonly BALANCE_SPARK_DRIFT_SPEED_PX_PER_MS;
|
|
78
|
+
private readonly BALANCE_SPARK_TADPOLE_MAX_AGE_MS;
|
|
51
79
|
private readonly BALANCE_SPARK_DRIFT_INITIAL_SPEED_PX_PER_MS;
|
|
52
80
|
private readonly BALANCE_SPARK_DRIFT_SPEED_EASE_MS;
|
|
53
81
|
private readonly BALANCE_SPARK_DRIFT_TURN_RATE_RAD_PER_MS;
|
|
@@ -67,6 +95,14 @@ export declare class YinYangDrawer {
|
|
|
67
95
|
private readonly BALANCE_SPARK_EMBER_PHASE_OFFSETS;
|
|
68
96
|
private activeOddId;
|
|
69
97
|
private hoverOddId;
|
|
98
|
+
private lobeNodes;
|
|
99
|
+
/** Vrai pendant updateSwitchFrame : les rendus partagés avec le rendu
|
|
100
|
+
* complet (libellés) n'y réordonnent pas leurs calques. */
|
|
101
|
+
private inSwitchFrame;
|
|
102
|
+
/** Suffixe des dégradés de fond des libellés ODD : unique par libellé, un
|
|
103
|
+
* libellé entrant ne doit pas reprendre l'id d'un autre encore en fondu
|
|
104
|
+
* de sortie (url(#id) désigne le premier du document). */
|
|
105
|
+
private oddLabelGradientSeq;
|
|
70
106
|
/** Callback déclenché quand la souris entre/sort d'un arc ODD (lien inverse
|
|
71
107
|
* vers les chips de la légende ODD du panneau de détail). */
|
|
72
108
|
private _onOddArcHoverCb;
|
|
@@ -95,13 +131,14 @@ export declare class YinYangDrawer {
|
|
|
95
131
|
*/
|
|
96
132
|
drawMainCircle(): void;
|
|
97
133
|
/**
|
|
98
|
-
* Draws and animates a short
|
|
134
|
+
* Draws and animates the perimeter spark: a short arc (the spark itself)
|
|
135
|
+
* with its glow pre-rendered as wider translucent copies of the same arc
|
|
136
|
+
* (see glowHalo), all inside a "rotor" group turned by a single transform
|
|
137
|
+
* per frame.
|
|
99
138
|
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* - changing stroke-dashoffset each frame shifts this dash around the perimeter,
|
|
104
|
-
* creating a rotating spark without moving the circle itself.
|
|
139
|
+
* It used to be a full circle with a dash shifted by stroke-dashoffset
|
|
140
|
+
* under a double feGaussianBlur filter: every frame re-blurred a filter
|
|
141
|
+
* region five times the size of the whole circle.
|
|
105
142
|
*/
|
|
106
143
|
private startOuterSparkAnimation;
|
|
107
144
|
private clearOuterSpark;
|
|
@@ -209,10 +246,10 @@ export declare class YinYangDrawer {
|
|
|
209
246
|
/** Ticks every still-drifting tadpole from every past shed batch — see
|
|
210
247
|
* balanceSparkTadpoles' own doc comment — independently of whichever
|
|
211
248
|
* spark instance(s) happen to be running right now, including none at
|
|
212
|
-
* all.
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
249
|
+
* all. Un têtard nage vers la cible partagée (bas du conteneur) et est
|
|
250
|
+
* retiré dès qu'il l'atteint : sans cela, il tournait indéfiniment autour
|
|
251
|
+
* d'elle, et le timer — avec une mesure du conteneur à chaque frame —
|
|
252
|
+
* ne s'arrêtait jamais après le premier lot lâché. */
|
|
216
253
|
private tickBalanceSparkTadpoles;
|
|
217
254
|
/**
|
|
218
255
|
* Draws a semi-circle (black half) within the main Yin Yang circle.
|
|
@@ -222,6 +259,32 @@ export declare class YinYangDrawer {
|
|
|
222
259
|
* Loops through both Yin and Yang groups and draws the respective symbols (small circles).
|
|
223
260
|
*/
|
|
224
261
|
drawYinYangSymbols(): void;
|
|
262
|
+
/**
|
|
263
|
+
* Frame d'une transition de facette ou d'ODD
|
|
264
|
+
* (ViewInitializer.startComponentAnimationLoop) : réécrit EN PLACE les
|
|
265
|
+
* attributs interpolés des nœuds posés par le dernier rendu complet —
|
|
266
|
+
* rayon et centre des lobes, masques et dégradés des arcs, zones de clic,
|
|
267
|
+
* noyau, position des libellés ODD et score de la facette. Rien n'est
|
|
268
|
+
* ajouté ni retiré, le <defs> n'est pas purgé, et les libellés ne sont
|
|
269
|
+
* remesurés (getBBox) que si leur texte change.
|
|
270
|
+
*
|
|
271
|
+
* Ce qui ne dépend pas de l'interpolation (illustration idle, poids de la
|
|
272
|
+
* facette sur l'arc de bordure, bordures) reste au rendu complet, rejoué à
|
|
273
|
+
* la dernière frame.
|
|
274
|
+
*
|
|
275
|
+
* Renvoie false si les nœuds ne correspondent plus à la géométrie (autres
|
|
276
|
+
* catégories, nœuds détachés par un rendu complet extérieur, défs
|
|
277
|
+
* disparues…) ; l'appelant refait alors un rendu complet, qui repose tout.
|
|
278
|
+
*/
|
|
279
|
+
updateSwitchFrame(): boolean;
|
|
280
|
+
private updateLobeAttributes;
|
|
281
|
+
/**
|
|
282
|
+
* Fond l'opacité d'un libellé vers `target`, sans relancer la transition
|
|
283
|
+
* si elle y va déjà. Relancée à chaque frame (transition de facette), une
|
|
284
|
+
* transition d'opacité ne progresse jamais : le libellé restait invisible
|
|
285
|
+
* tout le long de la bascule.
|
|
286
|
+
*/
|
|
287
|
+
private fadeLabelTo;
|
|
225
288
|
/**
|
|
226
289
|
* Mode idle (racine, aucune facette sélectionnée) : le cercle principal
|
|
227
290
|
* n'a aucune donnée pertinente à montrer (le yin/yang de base reste sur
|
|
@@ -304,11 +367,11 @@ export declare class YinYangDrawer {
|
|
|
304
367
|
*/
|
|
305
368
|
private renderFacetteStateLabel;
|
|
306
369
|
/**
|
|
307
|
-
* Affiche le poids d'une facette (
|
|
370
|
+
* Affiche le poids d'une facette (« 6,8 ») DANS son arc de bordure
|
|
308
371
|
* (segment de BorderDrawer), et non dans un lobe : ce poids est celui qui
|
|
309
|
-
* dimensionne l'arc, il se lit donc sur lui.
|
|
310
|
-
*
|
|
311
|
-
*
|
|
372
|
+
* dimensionne l'arc, il se lit donc sur lui. C'est C_f, la moyenne des
|
|
373
|
+
* poids de tous ses satellites (`facetWeightLabel`), sur 10 avec le
|
|
374
|
+
* suffixe.
|
|
312
375
|
*
|
|
313
376
|
* Par défaut seule la facette active porte son poids (et seulement quand
|
|
314
377
|
* ses libellés sont visibles, voir shouldShowFacetteLabels) ; avec
|
|
@@ -331,6 +394,14 @@ export declare class YinYangDrawer {
|
|
|
331
394
|
private clearGhostVisuals;
|
|
332
395
|
private getOrCreateGhostMainCircle;
|
|
333
396
|
private getAdaptiveWaveCount;
|
|
397
|
+
/**
|
|
398
|
+
* Cercles d'ondes d'un groupe ghost, avec les constantes qu'on leur a déjà
|
|
399
|
+
* écrites. Par frame, seuls `cy`, `r` et `stroke-opacity` varient : le reste
|
|
400
|
+
* (cx, fill, stroke, stroke-width) n'est réécrit que s'il change. Les nœuds
|
|
401
|
+
* sont gardés d'une frame à l'autre, et reconstruits depuis le DOM dès que
|
|
402
|
+
* l'un d'eux en est détaché (redessin complet du groupe).
|
|
403
|
+
*/
|
|
404
|
+
private ghostWaveCache;
|
|
334
405
|
private reconcileGhostWaves;
|
|
335
406
|
private updateBasePulseAnimations;
|
|
336
407
|
private updateBasePulseAnimationForType;
|
|
@@ -360,6 +431,9 @@ export declare class YinYangDrawer {
|
|
|
360
431
|
* n'existait nulle part ailleurs et dont le signe était perdu.
|
|
361
432
|
*/
|
|
362
433
|
private updateGhostDeltaBadge;
|
|
434
|
+
/** Enveloppe (repère local) des lignes du badge, avec la signature du
|
|
435
|
+
* contenu qu'elle mesure. Liée au nœud : elle disparaît avec lui. */
|
|
436
|
+
private ghostDeltaBadgeBoxes;
|
|
363
437
|
private ghostDeltaBadgeSelector;
|
|
364
438
|
/** Retire le badge d'un lobe. Nécessaire explicitement depuis que le badge
|
|
365
439
|
* ne vit plus dans le groupe du ghost : il ne disparaît plus avec lui. */
|
|
@@ -369,6 +443,22 @@ export declare class YinYangDrawer {
|
|
|
369
443
|
private getCircleNumericAttribute;
|
|
370
444
|
private lerp;
|
|
371
445
|
private shouldRenderGhost;
|
|
446
|
+
/** Ids des masques et dégradés posés dans le <defs> partagé par les arcs de
|
|
447
|
+
* catégorie de ce dessinateur. Déterministes (catégorie, lobe, calque), donc
|
|
448
|
+
* bornés ; sert à les retirer quand le satellite est détruit. */
|
|
449
|
+
private readonly ownedDefIds;
|
|
450
|
+
/** Retire du <defs> partagé ce que ce dessinateur y a posé. À appeler quand
|
|
451
|
+
* le satellite est détruit (clearChildren) : sans cela, chaque visite d'une
|
|
452
|
+
* facette laissait ses masques et dégradés dans le <defs>, qui ne
|
|
453
|
+
* redescendait jamais. */
|
|
454
|
+
releaseDefs(): void;
|
|
455
|
+
/**
|
|
456
|
+
* Fin de vie : arrête toutes les boucles du dessinateur (vagues et
|
|
457
|
+
* pulsation du ghost, étincelle du pourtour, étincelles d'équilibre et
|
|
458
|
+
* leurs têtards) et libère ses defs. N'écrit pas dans le DOM du diagramme :
|
|
459
|
+
* son conteneur est vidé par l'appelant.
|
|
460
|
+
*/
|
|
461
|
+
destroy(): void;
|
|
372
462
|
/**
|
|
373
463
|
* Draws category-specific arcs with gradient fills and masks to represent different ODDs (Sustainable Development Goals).
|
|
374
464
|
*
|
|
@@ -422,27 +512,36 @@ export declare class YinYangDrawer {
|
|
|
422
512
|
*/
|
|
423
513
|
private shouldShowFacetteLabels;
|
|
424
514
|
refreshOddArcLabelsVisibility(): void;
|
|
425
|
-
|
|
515
|
+
/**
|
|
516
|
+
* Écrit la contre-rotation des labels des deux lobes en attribut, pour une
|
|
517
|
+
* orientation donnée de chaque lobe (en degrés) — à l'arrêt, la position
|
|
518
|
+
* de base. Pendant la rotation, ce sont des animations du navigateur
|
|
519
|
+
* (AnimationsMngr) qui contre-tournent les labels, par-dessus l'attribut.
|
|
520
|
+
*/
|
|
521
|
+
refreshOddArcLabelsOrientation(lobeAngles: {
|
|
522
|
+
yin: number;
|
|
523
|
+
yang: number;
|
|
524
|
+
}): void;
|
|
525
|
+
private getLobeNode;
|
|
426
526
|
private isArcVisibleForLabel;
|
|
427
527
|
private renderOddArcLabels;
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
*
|
|
432
|
-
*
|
|
433
|
-
*
|
|
434
|
-
*
|
|
435
|
-
*
|
|
436
|
-
*
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
*
|
|
440
|
-
*
|
|
441
|
-
*
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
private
|
|
445
|
-
private getRotationAngleFromTransform;
|
|
528
|
+
/** Ce qui fixe le contenu et la taille d'un libellé d'arc ODD. */
|
|
529
|
+
private oddArcLabelKey;
|
|
530
|
+
/**
|
|
531
|
+
* Libellés qui restent droits pendant la rotation Yin/Yang, avec le pivot
|
|
532
|
+
* de leur contre-rotation. Les libellés d'arc ODD tournent autour de leur
|
|
533
|
+
* origine locale (`pivot` nul : leur groupe parent les place). Le score et
|
|
534
|
+
* le poids affichés en permanence dans le noyau du lobe dominant — sur le
|
|
535
|
+
* cercle central (renderFacetteStateLabel) comme sur un satellite
|
|
536
|
+
* (renderChildStateLabel/renderChildWeightLabel) — sont placés par des
|
|
537
|
+
* attributs x/y directs : une rotation autour de ce même point annule
|
|
538
|
+
* l'orientation héritée du spin du lobe sans déplacer le montant. Le poids
|
|
539
|
+
* de la facette n'est plus dans le lobe (voir renderFacetteWeightLabel) :
|
|
540
|
+
* il ne tourne pas, rien à compenser. AnimationsMngr anime chacun en sens
|
|
541
|
+
* inverse de son lobe ; chaque satellite a son propre YinYangDrawer.
|
|
542
|
+
*/
|
|
543
|
+
getCounterRotatedLabels(): CounterRotatedLabel[];
|
|
544
|
+
private readLabelPivot;
|
|
446
545
|
private getDisplayedArcAngles;
|
|
447
546
|
/**
|
|
448
547
|
* Ajuste la plaque sombre posée derrière un libellé d'arc à la taille
|
|
@@ -475,12 +574,9 @@ export declare class YinYangDrawer {
|
|
|
475
574
|
* (renderChildStateLabel/renderChildWeightLabel), donc le cercle central
|
|
476
575
|
* et son cortège se lisent enfin de la même façon.
|
|
477
576
|
*
|
|
478
|
-
* Le
|
|
479
|
-
*
|
|
480
|
-
*
|
|
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.
|
|
577
|
+
* Le poids d'un ODD est la moyenne des poids de ses seuls satellites
|
|
578
|
+
* (`facetWeightLabel`, « 6,8 »), sur WEIGHT_MAX avec le suffixe — même
|
|
579
|
+
* lecture que la pastille de sa facette (POC-05A4).
|
|
484
580
|
*
|
|
485
581
|
* En mode non compact, le nom court de l'ODD reste affiché au-dessus des
|
|
486
582
|
* deux métriques : c'est une information que le numéro ne portait pas.
|
|
@@ -493,6 +589,9 @@ export declare class YinYangDrawer {
|
|
|
493
589
|
private wrapTextByLines;
|
|
494
590
|
private getOrCreateInteractiveArcLayer;
|
|
495
591
|
private drawInteractiveArcZone;
|
|
592
|
+
/** Tracés d'une zone de clic d'arc ODD et de son liseré « actif » —
|
|
593
|
+
* partagés par le rendu complet et la frame de transition. */
|
|
594
|
+
private computeInteractiveArcPaths;
|
|
496
595
|
/** Callback appelé quand la souris entre/sort d'un arc ODD du diagramme —
|
|
497
596
|
* permet de surligner en retour le chip correspondant dans la légende ODD. */
|
|
498
597
|
setOnOddArcHover(cb: (oddId: string | null) => void): void;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** Instant clé du cycle (0..1) et couleurs des deux arrêts animés à cet instant. */
|
|
2
|
+
export type ColorCycleStep = {
|
|
3
|
+
at: number;
|
|
4
|
+
first: string;
|
|
5
|
+
last: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Valeurs parcourues par le premier et le dernier arrêt sur un cycle,
|
|
9
|
+
* à intervalles réguliers — les mêmes que l'ancienne animation SMIL : le
|
|
10
|
+
* premier arrêt parcourt les couleurs puis revient à la première ; le dernier
|
|
11
|
+
* suit la même boucle décalée d'un cran (il tient la première couleur sur le
|
|
12
|
+
* premier intervalle).
|
|
13
|
+
*/
|
|
14
|
+
export declare function borderColorCycleValues(colors: readonly string[]): {
|
|
15
|
+
first: string[];
|
|
16
|
+
last: string[];
|
|
17
|
+
};
|
|
18
|
+
/** Couleur à l'instant `at` (0..1) d'une suite de valeurs équiréparties,
|
|
19
|
+
* interpolée en sRGB comme le faisait SMIL. */
|
|
20
|
+
export declare function sampleAt(values: readonly string[], at: number): string;
|
|
21
|
+
/**
|
|
22
|
+
* Instants clés du cycle (réunion de ceux des deux arrêts, 0 et 1 compris)
|
|
23
|
+
* et couleurs des deux arrêts à chacun. Le dernier pas (1) a les couleurs du
|
|
24
|
+
* premier (0) : la boucle se referme sans saut.
|
|
25
|
+
*/
|
|
26
|
+
export declare function borderColorCycleSteps(colors: readonly string[]): ColorCycleStep[];
|
|
27
|
+
/**
|
|
28
|
+
* Opacités de la copie `k` (k ≥ 1) sur un cycle : invisible avant son fondu,
|
|
29
|
+
* de 0 à 1 entre les instants k − 1 et k, opaque tant qu'elle est le fond du
|
|
30
|
+
* fondu suivant, puis retirée quand la copie k + 1, opaque, la recouvre.
|
|
31
|
+
*/
|
|
32
|
+
export declare function colorCycleLayerKeyframes(times: readonly number[], k: number): Keyframe[];
|
|
33
|
+
/**
|
|
34
|
+
* Cycle de couleurs d'un segment actif. Au repos : copies en fondu posées
|
|
35
|
+
* juste sous le segment dans son groupe (le segment garde contour, clics et
|
|
36
|
+
* survol, son propre remplissage est rendu transparent) ; les halos du
|
|
37
|
+
* segment restent dessous, voir `data-fill-under` dans glowHalo.syncShapeGlow.
|
|
38
|
+
* Diagramme actif (FrameScheduler.isActive) : copies retirées, arrêts du
|
|
39
|
+
* dégradé d'origine écrits à chaque image bridée.
|
|
40
|
+
*/
|
|
41
|
+
export declare class BorderColorCycle {
|
|
42
|
+
private readonly segment;
|
|
43
|
+
private readonly durationMs;
|
|
44
|
+
readonly key: string;
|
|
45
|
+
private readonly group;
|
|
46
|
+
private readonly paths;
|
|
47
|
+
private animations;
|
|
48
|
+
private readonly times;
|
|
49
|
+
private readonly values;
|
|
50
|
+
private readonly firstStop;
|
|
51
|
+
private readonly lastStop;
|
|
52
|
+
/** Couleurs posées sur les deux arrêts du dégradé d'origine, rendues à la fin. */
|
|
53
|
+
private readonly restingColors;
|
|
54
|
+
private readonly startedAt;
|
|
55
|
+
private mainThreadFrameId;
|
|
56
|
+
private readonly unsubscribe;
|
|
57
|
+
static keyOf(colors: readonly string[], durationMs: number): string;
|
|
58
|
+
constructor(segment: SVGPathElement, gradient: SVGGradientElement, colors: readonly string[], durationMs: number);
|
|
59
|
+
/** Le segment est toujours dans le document (les copies, elles, en sont
|
|
60
|
+
* retirées quand le diagramme est actif). */
|
|
61
|
+
get isConnected(): boolean;
|
|
62
|
+
/** Recopie la forme du segment et réapplique le remplissage du mode courant
|
|
63
|
+
* (à rappeler quand l'appelant a restylé le segment). */
|
|
64
|
+
refresh(): void;
|
|
65
|
+
/** Suit le segment pendant qu'il change de largeur. */
|
|
66
|
+
setPath(d: string): void;
|
|
67
|
+
destroy(): void;
|
|
68
|
+
private syncGeometry;
|
|
69
|
+
/** Phase courante du cycle, en ms depuis son départ. */
|
|
70
|
+
private phaseMs;
|
|
71
|
+
private applyMode;
|
|
72
|
+
private startComposited;
|
|
73
|
+
private stopComposited;
|
|
74
|
+
private startMainThread;
|
|
75
|
+
private stopMainThread;
|
|
76
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type FacetWeightRule } from "../../utils/causeMetrics";
|
|
2
|
+
/** Règle des poids de facette choisie dans le debug de la page standalone
|
|
3
|
+
* (voir `FacetWeightRule`) : mémorisée dans le navigateur, appliquée au
|
|
4
|
+
* démarrage — la lib npm, elle, reste en `mean`. */
|
|
5
|
+
export declare const FACET_WEIGHT_RULE_STORAGE_KEY = "spheres.facetWeightRule";
|
|
6
|
+
/** Lit la règle mémorisée (`mean` à défaut, ou si le stockage est
|
|
7
|
+
* inaccessible), l'applique et la renvoie. */
|
|
8
|
+
export declare function loadFacetWeightRule(): FacetWeightRule;
|
|
9
|
+
/** Mémorise la règle ; renvoie `false` si le stockage est inaccessible. */
|
|
10
|
+
export declare function saveFacetWeightRule(rule: FacetWeightRule): boolean;
|