@micheeeeel/yinyangapp 3.0.1 → 3.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/dist/bundle.css +1 -0
- package/dist/bundle.js +1 -2
- package/dist/types/adapters/yasuniCauseAdapter.d.ts +13 -2
- 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 +31 -3
- 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 +109 -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 +12 -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 +19 -22
- package/dist/types/components/controller/children/ComponentSwitchCoordinator.d.ts +3 -1
- package/dist/types/components/controller/children/IdleFacettesController.d.ts +205 -0
- package/dist/types/components/controller/children/facetModulation.d.ts +49 -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/children/signatureLook.d.ts +10 -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 +33 -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/ObstacleDemoControl.d.ts +3 -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 +45 -7
- package/dist/types/components/view/YinYangDrawer.d.ts +132 -30
- 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/activeDiagram.d.ts +6 -2
- 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/contacts/demoObstacle.d.ts +3 -0
- package/dist/types/data/contacts/index.d.ts +3 -0
- package/dist/types/data/contacts/obstacleSignature.d.ts +56 -0
- 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 +16 -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 +19 -3
- package/dist/types/interfaces/IYinYangController.d.ts +35 -7
- package/dist/types/interfaces/IYinYangInternalModel.d.ts +7 -0
- package/dist/types/main.d.ts +1 -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 +29 -11
- 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 +6 -4
- 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 +17 -0
- package/package.json +4 -1
- package/dist/bundle.js.LICENSE.txt +0 -1
|
@@ -1,3 +1,80 @@
|
|
|
1
|
+
export type DetailDensity = "full" | "reduced" | "compact";
|
|
2
|
+
export interface DetailDensityInput {
|
|
3
|
+
/** Hauteur visible du conteneur (clientHeight). */
|
|
4
|
+
available: number;
|
|
5
|
+
/** Hauteur de la description dépliée (0 si aucune). */
|
|
6
|
+
descFullH: number;
|
|
7
|
+
/** Hauteur de la description repliée (= descFullH si l'utilisateur l'a dépliée). */
|
|
8
|
+
descFoldedH: number;
|
|
9
|
+
/** Habillage d'un bloc hors carte (marges, en-têtes du bloc). */
|
|
10
|
+
chrome: number;
|
|
11
|
+
/** Nombre de blocs de cartes affichés. */
|
|
12
|
+
blockCount: number;
|
|
13
|
+
/** Hauteur occupée par le reste du contenu (ni description ni bloc). */
|
|
14
|
+
other?: number;
|
|
15
|
+
/** Palier précédent, pour l'hystérésis. */
|
|
16
|
+
previous?: DetailDensity | null;
|
|
17
|
+
}
|
|
18
|
+
export interface DetailDensityResult {
|
|
19
|
+
density: DetailDensity;
|
|
20
|
+
/** null = hauteur de carte par défaut (pas de variable posée). */
|
|
21
|
+
cardHeight: number | null;
|
|
22
|
+
foldDesc: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Choisit la densité d'une colonne de détail d'après la hauteur réellement
|
|
26
|
+
* libre — pas d'après le nombre de panneaux ouverts :
|
|
27
|
+
* - full : description entière et cartes au format nominal (352px) ;
|
|
28
|
+
* - reduced : description repliée sur une ligne, cartes réduites
|
|
29
|
+
* (≥ REDUCED_MIN_CARD_HEIGHT), haut de l'illustration visible ;
|
|
30
|
+
* - compact : description repliée, cartes au plus court, haut de
|
|
31
|
+
* l'illustration visible.
|
|
32
|
+
* Au-delà de deux blocs, on vise deux blocs visibles et le scroll prend le
|
|
33
|
+
* relais (même règle que l'ancien comportement multi-blocs).
|
|
34
|
+
*/
|
|
35
|
+
export declare function computeDetailDensity(input: DetailDensityInput): DetailDensityResult;
|
|
36
|
+
export interface StackCardHeightInput {
|
|
37
|
+
/** Hauteur utile du conteneur (clientHeight moins ses paddings). */
|
|
38
|
+
available: number;
|
|
39
|
+
/** Habillage (en-tête, description, marges) de chaque bloc déplié, dans
|
|
40
|
+
* l'ordre d'affichage. */
|
|
41
|
+
expandedChromes: number[];
|
|
42
|
+
/** Hauteur de tout le reste : blocs repliés, bandeau Σ. */
|
|
43
|
+
other: number;
|
|
44
|
+
previous?: DetailDensity | null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* STACK : hauteur des cartes pour que les blocs dépliés remplissent la place
|
|
48
|
+
* libre. Jusqu'à deux blocs dépliés, tout le panneau (blocs repliés et
|
|
49
|
+
* bandeau Σ compris) doit tenir ; au-delà, on vise les deux premiers blocs
|
|
50
|
+
* et le scroll prend le relais. La carte ne dépasse jamais le format nominal
|
|
51
|
+
* (image entière) : au-delà, il ne resterait que du vide autour de l'image.
|
|
52
|
+
*/
|
|
53
|
+
export declare function computeStackCardHeight(input: StackCardHeightInput): {
|
|
54
|
+
density: DetailDensity;
|
|
55
|
+
cardHeight: number | null;
|
|
56
|
+
};
|
|
57
|
+
export interface ChainCardHeightOptions {
|
|
58
|
+
blockSelector?: string;
|
|
59
|
+
/**
|
|
60
|
+
* RECHERCHE : ajuste les cartes à la hauteur libre du conteneur même avec un
|
|
61
|
+
* seul bloc (description comprise) et pose data-density. Sans cette option
|
|
62
|
+
* (STACK), seul le cas « 2 blocs ou plus » réduit les cartes.
|
|
63
|
+
*/
|
|
64
|
+
fitToContainer?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* STACK : ajuste les cartes à la place libre en tenant compte des blocs
|
|
67
|
+
* repliés et du bandeau Σ (voir computeStackCardHeight), et pose
|
|
68
|
+
* data-density.
|
|
69
|
+
*/
|
|
70
|
+
fitBlocks?: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Synchro immédiate d'un conteneur surveillé (watchChainCardHeight), avec ses
|
|
74
|
+
* options : à appeler au sein d'une bascule animée, pour que la hauteur
|
|
75
|
+
* finale mesurée tienne compte des cartes recalées. Sans effet sinon.
|
|
76
|
+
*/
|
|
77
|
+
export declare function resyncChainCardHeightNow(container: HTMLElement): void;
|
|
1
78
|
/**
|
|
2
79
|
* Un seul bloc affiché : les cartes gardent leur hauteur par défaut, calée sur
|
|
3
80
|
* le format des illustrations pour qu'elles s'affichent entières (cf.
|
|
@@ -6,7 +83,9 @@
|
|
|
6
83
|
* tiennent dans la hauteur visible du conteneur sans scroll — au-delà, le
|
|
7
84
|
* scroll prend le relais. L'image reste alors visible en entier mais plus
|
|
8
85
|
* petite, avec une bande vide en haut et en bas (object-fit: contain, cf.
|
|
9
|
-
* action-image.css) : c'est la hauteur qui cède, jamais le cadrage
|
|
86
|
+
* action-image.css) : c'est la hauteur qui cède, jamais le cadrage — sauf
|
|
87
|
+
* avec `fitToContainer`, où la carte réduite garde le haut de l'image.
|
|
88
|
+
* Avec `fitToContainer` (RECHERCHE), voir computeDetailDensity.
|
|
10
89
|
*
|
|
11
90
|
* La variable CSS est posée à la fois sur le conteneur ET directement sur
|
|
12
91
|
* chaque `.ff-chain-card` : quand un bloc est ajouté après coup (RECHERCHE,
|
|
@@ -15,13 +94,17 @@
|
|
|
15
94
|
* `height` déjà calculé des cartes existantes — le poser directement sur
|
|
16
95
|
* chaque carte contourne ce cas.
|
|
17
96
|
*/
|
|
18
|
-
export declare function syncChainCardHeight(container: HTMLElement,
|
|
97
|
+
export declare function syncChainCardHeight(container: HTMLElement, options?: ChainCardHeightOptions): void;
|
|
19
98
|
/**
|
|
20
99
|
* Recalcule immédiatement puis surveille le conteneur pour garder la hauteur
|
|
21
100
|
* des cartes synchronisée : redimensionnement du panneau (ResizeObserver) et
|
|
22
101
|
* ajout/retrait de blocs (MutationObserver — un bloc peut être ajouté/retiré
|
|
23
102
|
* sans que la taille du conteneur lui-même ne change, ex. panneau RECHERCHE
|
|
24
|
-
* où le bloc secondaire propagé apparaît/disparaît).
|
|
103
|
+
* où le bloc secondaire propagé apparaît/disparaît). Avec `fitToContainer`,
|
|
104
|
+
* le sous-arbre est aussi observé : une description remplacée ou des cartes
|
|
105
|
+
* re-rendues changent la place disponible. Seules les insertions/retraits de
|
|
106
|
+
* nœuds sont observés (pas les attributs) : les classes et styles posés par
|
|
107
|
+
* la synchro elle-même ne la redéclenchent donc pas. Idempotent : un seul
|
|
25
108
|
* couple d'observers est installé par conteneur.
|
|
26
109
|
*/
|
|
27
|
-
export declare function watchChainCardHeight(container: HTMLElement,
|
|
110
|
+
export declare function watchChainCardHeight(container: HTMLElement, options?: ChainCardHeightOptions): void;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Animation commune des replis/déploiements : la bascule d'état reste
|
|
3
|
+
* synchrone (classe, attribut `hidden`…), seule la hauteur de l'élément est
|
|
4
|
+
* interpolée de l'ancienne valeur à la nouvelle (mesure avant/après, Web
|
|
5
|
+
* Animations). L'état logique est donc à jour dès le clic — un re-rendu ou
|
|
6
|
+
* une mesure lit la valeur finale, jamais une valeur différée.
|
|
7
|
+
*
|
|
8
|
+
* Au repli, le contenu masqué par la bascule (display:none, hidden, line-clamp)
|
|
9
|
+
* disparaîtrait d'un coup et l'élément se refermerait sur du vide : `hold`
|
|
10
|
+
* le garde visible le temps de l'animation et rend la fonction qui le relâche.
|
|
11
|
+
*
|
|
12
|
+
* Pendant l'animation, l'élément porte `data-collapse-anim` ; à la fin il
|
|
13
|
+
* émet COLLAPSE_ANIM_END (bulle), ce qui permet aux calculs de mise en page
|
|
14
|
+
* (chainCardHeight) d'ignorer les hauteurs intermédiaires et de se recaler.
|
|
15
|
+
*
|
|
16
|
+
* Les zones défilantes qui ne débordaient pas avant la bascule (panneau
|
|
17
|
+
* parent, liste interne) gardent leur barre de défilement masquée pendant
|
|
18
|
+
* l'animation : une hauteur intermédiaire peut les faire déborder un instant.
|
|
19
|
+
*/
|
|
20
|
+
export declare const COLLAPSE_ANIM_DURATION_MS = 240;
|
|
21
|
+
export declare const COLLAPSE_ANIM_END = "collapseanimend";
|
|
22
|
+
export declare const COLLAPSE_ANIM_ATTR = "data-collapse-anim";
|
|
23
|
+
export interface HeightAnimationOptions {
|
|
24
|
+
/** Repli : garde visible le contenu sortant, rend la fonction qui le relâche. */
|
|
25
|
+
hold?: () => (() => void) | void;
|
|
26
|
+
/** Élément dont l'opacité suit le mouvement (contenu entrant / sortant). */
|
|
27
|
+
fade?: HTMLElement | null;
|
|
28
|
+
duration?: number;
|
|
29
|
+
}
|
|
30
|
+
export declare function prefersReducedMotion(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Applique `mutate` (la bascule d'état) et anime la hauteur de `el` de sa
|
|
33
|
+
* valeur courante — éventuellement en cours d'animation, un double clic
|
|
34
|
+
* repart donc d'où il en est — à sa nouvelle valeur.
|
|
35
|
+
*/
|
|
36
|
+
export declare function animateHeightChange(el: HTMLElement, mutate: () => void, options?: HeightAnimationOptions): void;
|
|
37
|
+
/** Apparition d'un contenu révélé autrement que par la hauteur (ex. carte qui
|
|
38
|
+
* s'élargit) : fondu seul. */
|
|
39
|
+
export declare function fadeIn(el: HTMLElement | null | undefined): void;
|
|
@@ -10,6 +10,8 @@ export declare class D3GraphicsStrategy implements IGraphicsStrategy {
|
|
|
10
10
|
private arcMaskCache;
|
|
11
11
|
private underlyingGradientCache;
|
|
12
12
|
private maskIdCurrentCacheKey;
|
|
13
|
+
private gradientIdCurrentCacheKey;
|
|
14
|
+
private liveDefNodes;
|
|
13
15
|
/**
|
|
14
16
|
* Initializes the SVG element and appends it to the given selector.
|
|
15
17
|
* Also creates a 'defs' section for reusable graphical elements like gradients.
|
|
@@ -26,6 +28,8 @@ export declare class D3GraphicsStrategy implements IGraphicsStrategy {
|
|
|
26
28
|
drawCircle(parent: D3Element, cx: number, cy: number, radius: number, fill: string, opacity?: number): D3Element;
|
|
27
29
|
private escapeAttributeValue;
|
|
28
30
|
private getDefById;
|
|
31
|
+
private getLiveDefById;
|
|
32
|
+
removeDefsByIds(ids: Iterable<string>): void;
|
|
29
33
|
private defExists;
|
|
30
34
|
private getCacheKey;
|
|
31
35
|
/**
|
|
@@ -56,13 +60,26 @@ export declare class D3GraphicsStrategy implements IGraphicsStrategy {
|
|
|
56
60
|
*/
|
|
57
61
|
createYinOrYangArcMask(maskId: string, cx: number, cy: number, innerRadius: number, outerRadius: number, startAngle: number, endAngle: number, type: "yin" | "yang", blendOpacity?: number): string;
|
|
58
62
|
/**
|
|
59
|
-
*
|
|
63
|
+
* Géométrie d'un masque d'arc (createYinOrYangArcMask) : deux bandes en
|
|
64
|
+
* dégradé aux bords de l'arc (fondu des extrémités) et l'arc plein. Partagée
|
|
65
|
+
* par la création et la mise à jour en place (updateYinOrYangArcMask), pour
|
|
66
|
+
* qu'une frame de transition écrive exactement les attributs qu'un rendu
|
|
67
|
+
* complet aurait posés.
|
|
60
68
|
*/
|
|
61
|
-
|
|
69
|
+
private computeArcMaskShape;
|
|
70
|
+
/**
|
|
71
|
+
* Met à jour EN PLACE un masque posé par createYinOrYangArcMask (mêmes
|
|
72
|
+
* paramètres) : attributs des deux bandes, de l'arc et opacité de fondu,
|
|
73
|
+
* sans rien retirer ni ajouter au <defs>. Sert aux frames de transition de
|
|
74
|
+
* facette (YinYangDrawer.updateSwitchFrame). Renvoie false si le masque
|
|
75
|
+
* n'existe pas ou n'a pas la structure attendue : l'appelant repasse alors
|
|
76
|
+
* par un rendu complet.
|
|
77
|
+
*/
|
|
78
|
+
updateYinOrYangArcMask(maskId: string, cx: number, cy: number, innerRadius: number, outerRadius: number, startAngle: number, endAngle: number, type: "yin" | "yang", blendOpacity?: number): boolean;
|
|
62
79
|
/**
|
|
63
|
-
*
|
|
80
|
+
* Creates a mask for the border with a radial gradient to simulate fading edges.
|
|
64
81
|
*/
|
|
65
|
-
|
|
82
|
+
createBorderMask(id: string, centerX: number, centerY: number, innerRadius: number, outerRadius: number): void;
|
|
66
83
|
/**
|
|
67
84
|
* Draws a line with a gradient stroke.
|
|
68
85
|
*/
|
|
@@ -71,8 +88,14 @@ export declare class D3GraphicsStrategy implements IGraphicsStrategy {
|
|
|
71
88
|
* Creates a radial gradient for an underlying circle.
|
|
72
89
|
*/
|
|
73
90
|
createUnderlyingCircleGradient(id: string, color: string, spread?: number, intensity?: number): string;
|
|
91
|
+
/**
|
|
92
|
+
* Repeint en place un dégradé posé par createUnderlyingCircleGradient
|
|
93
|
+
* (mêmes étalement et intensité) : seule la couleur de ses arrêts change.
|
|
94
|
+
* Renvoie false s'il n'existe plus (l'appelant repasse par un rendu complet).
|
|
95
|
+
*/
|
|
96
|
+
updateUnderlyingCircleGradientColor(id: string, color: string, spread?: number, intensity?: number): boolean;
|
|
74
97
|
/**
|
|
75
98
|
* Creates an underlying circle with a gradient and applies an arc mask.
|
|
76
99
|
*/
|
|
77
|
-
createUnderlyingCircleWithArcMask(maskId: string | undefined, gradientId: string, parent: D3Element, cx: number, cy: number, radius: number):
|
|
100
|
+
createUnderlyingCircleWithArcMask(maskId: string | undefined, gradientId: string, parent: D3Element, cx: number, cy: number, radius: number): D3Element;
|
|
78
101
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { KeyEventEffect } from "../data/yasuni_key_events";
|
|
2
1
|
/** Ce dont une chip a besoin — sous-ensemble d'ActionDefinition. */
|
|
3
2
|
export interface ChipDeltas {
|
|
4
3
|
baseDelta: number;
|
|
@@ -10,6 +9,3 @@ export declare function formatDelta(value: number): string;
|
|
|
10
9
|
export declare function formatSignedDelta(value: number): string;
|
|
11
10
|
/** Deltas du catalogue, sur une ligne Action. */
|
|
12
11
|
export declare function buildActionChipsHtml(action: ChipDeltas): string;
|
|
13
|
-
/** Bonus d'un Événement Clé — points ajoutés aux actions amplifiées. Sert
|
|
14
|
-
* aussi au malus d'une action adverse (mêmes champs, signe négatif). */
|
|
15
|
-
export declare function buildKeyEventChipsHtml(effect: KeyEventEffect): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Utilitaire pour exporter et copier les contrôles du panneau debug */
|
|
2
|
+
export interface ExportOptions {
|
|
3
|
+
selectedIds?: Set<string>;
|
|
4
|
+
showPreview?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function generateControlsCode(snapshot: Record<string, unknown>, selectedIds?: Set<string>): string;
|
|
7
|
+
export declare function copyToClipboard(text: string): Promise<boolean>;
|
|
8
|
+
export declare function showToast(message: string, duration?: number): void;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
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) :
|
|
4
|
-
* de tous ses satellites
|
|
5
|
-
* virgule, avec une virgule décimale — « 7,2
|
|
6
|
-
*
|
|
3
|
+
* pour une cause comme pour un contact. Règle `mean` (défaut, POC-05A4) :
|
|
4
|
+
* moyenne des poids de tous ses satellites, arrondie à un chiffre après la
|
|
5
|
+
* virgule, avec une virgule décimale — « 7,2 », sur 10. Règle `sum`
|
|
6
|
+
* (ancienne, voir `FacetWeightRule`) : somme entière — « 61 », sur
|
|
7
|
+
* « satellites × 10 ». `max` ne s'affiche qu'avec le suffixe
|
|
8
|
+
* (`facetteLabelSuffixVisible`).
|
|
7
9
|
*/
|
|
8
10
|
export declare function facetWeightLabel(weights: readonly number[]): {
|
|
9
11
|
value: string;
|
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export declare function hasFacetteImage(composanteId: string): boolean;
|
|
2
|
+
/**
|
|
3
|
+
* Les originaux (1254×1254, ~6 Mo décodés) ne sont jamais affichés tels quels :
|
|
4
|
+
* on sert une miniature de 512 px et sa variante « voilée » pré-rendue (voir
|
|
5
|
+
* scripts/generate-facette-thumbs.py).
|
|
6
|
+
*/
|
|
2
7
|
export declare function getFacetteImageUrl(composanteId: string): string;
|
|
8
|
+
export declare function getFacetteVeiledImageUrl(composanteId: string): string;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export type GlowStrokeLayer = {
|
|
2
|
+
/** Débord du trait de halo au-delà du bord de la forme, en px. */
|
|
3
|
+
spread: number;
|
|
4
|
+
/** Opacité propre de ce trait (les traits se superposent). */
|
|
5
|
+
opacity: number;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Traits superposés équivalant à `drop-shadow(0 0 ${blur}px couleur)` d'alpha
|
|
9
|
+
* `alpha` : à peindre du plus large au plus étroit, chacun de largeur
|
|
10
|
+
* `largeurDeBase + 2 × spread`, même couleur, `stroke-opacity` = `opacity`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function glowStrokeLayers(blur: number, alpha?: number): GlowStrokeLayer[];
|
|
13
|
+
/** Débord total (px) du halo de `glowStrokeLayers(blur)`. */
|
|
14
|
+
export declare function glowStrokeReach(blur: number): number;
|
|
15
|
+
/**
|
|
16
|
+
* Crée (ou recâble) dans `group` les traits d'un halo de chemin. `tag` est
|
|
17
|
+
* l'élément copié (`path`, `line`…) ; la géométrie est posée ensuite par
|
|
18
|
+
* l'appelant sur chaque trait (`d`, `x1`…), via `forEachStroke`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function ensureGlowStrokes(group: SVGGElement, tag: "path" | "line" | "circle", layerCount?: number): SVGElement[];
|
|
21
|
+
/**
|
|
22
|
+
* Habille les traits d'un halo : couleur, largeurs et opacités équivalant à
|
|
23
|
+
* un `drop-shadow(0 0 ${blur}px color)` posé sur une forme dont le trait fait
|
|
24
|
+
* `baseWidth` (0 pour une forme seulement remplie).
|
|
25
|
+
*/
|
|
26
|
+
export declare function styleGlowStrokes(strokes: readonly SVGElement[], options: {
|
|
27
|
+
color: string;
|
|
28
|
+
blur: number;
|
|
29
|
+
alpha?: number;
|
|
30
|
+
baseWidth?: number;
|
|
31
|
+
}): void;
|
|
32
|
+
export type SoftEdgeLayer = {
|
|
33
|
+
/** Décalage du bord de la couche (px) : > 0 vers l'extérieur. */
|
|
34
|
+
offset: number;
|
|
35
|
+
opacity: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Couches superposées équivalant à une forme pleine d'alpha `alpha` floutée
|
|
39
|
+
* par `filter: blur(${sigma}px)` (σ = l'argument de blur()) : à peindre dans
|
|
40
|
+
* l'ordre, chacune agrandie de `offset` (ou réduite si négatif), même
|
|
41
|
+
* couleur, `fill-opacity` = `opacity`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function softEdgeLayers(sigma: number, alpha?: number): SoftEdgeLayer[];
|
|
44
|
+
/** Rayon du disque de halo d'un cercle de rayon `radius`. */
|
|
45
|
+
export declare function circleGlowRadius(radius: number, blur: number): number;
|
|
46
|
+
/**
|
|
47
|
+
* `fill` d'un disque de rayon `circleGlowRadius(radius, blur)` centré sur un
|
|
48
|
+
* cercle de rayon `radius`, équivalant à `drop-shadow(0 0 ${blur}px color)`
|
|
49
|
+
* de ce cercle. Le dégradé (objectBoundingBox) est partagé par tous les
|
|
50
|
+
* cercles de même couleur et de même rapport rayon / flou, et recréé s'il a
|
|
51
|
+
* été purgé des defs.
|
|
52
|
+
*/
|
|
53
|
+
export declare function circleGlowFill(svg: SVGSVGElement, color: string, radius: number, blur: number): string;
|
|
54
|
+
/** Une lueur : équivalent de `drop-shadow(0 0 ${blur}px color)` d'alpha `alpha`. */
|
|
55
|
+
export type GlowSpec = {
|
|
56
|
+
color: string;
|
|
57
|
+
blur: number;
|
|
58
|
+
alpha?: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Pose (ou retire, `glows` null) un halo d'une forme : un `<g>` inséré
|
|
62
|
+
* avant elle (donc peint dessous), qui contient des copies de sa géométrie
|
|
63
|
+
* en traits de lueur (voir styleGlowStrokes). Plusieurs lueurs s'empilent,
|
|
64
|
+
* la plus large d'abord. `baseWidth` : largeur du trait de la forme. `slot`
|
|
65
|
+
* distingue plusieurs halos indépendants sur la même forme. Renvoie le
|
|
66
|
+
* groupe du halo (null s'il est retiré).
|
|
67
|
+
*/
|
|
68
|
+
export declare function syncShapeGlow(shape: SVGElement, glows: readonly GlowSpec[] | null, baseWidth?: number, slot?: string): SVGGElement | null;
|
|
69
|
+
/** Recopie la géométrie d'une forme sur ses halos, s'il y en a — à appeler
|
|
70
|
+
* quand la forme est modifiée en place. */
|
|
71
|
+
export declare function syncShapeGlowGeometry(shape: SVGElement): void;
|
|
72
|
+
/** Pose un attribut de géométrie sur les halos d'une forme (quand la forme
|
|
73
|
+
* elle-même le reçoit plus tard, p. ex. dans un attrTween d3). */
|
|
74
|
+
export declare function setShapeGlowAttribute(shape: Element, name: string, value: string): void;
|
|
@@ -22,7 +22,7 @@ export declare function buildOddDotHtml(oddColor: string): string;
|
|
|
22
22
|
* couvert). `isKeyEvent` ajoute le médaillon (plaque + anneau doré +
|
|
23
23
|
* Yin/Yang en filigrane, voir `.ke-medallion` dans details-panel.css) qui
|
|
24
24
|
* distingue un Événement d'une Action à la silhouette seule. */
|
|
25
|
-
export declare function buildItemIconHtml(iconUrl: string, isKeyEvent?: boolean): string;
|
|
25
|
+
export declare function buildItemIconHtml(iconUrl: string, isKeyEvent?: boolean, lazy?: boolean): string;
|
|
26
26
|
/** Pastille d'état (score /100) affichée après le nom, dans le champ
|
|
27
27
|
* "élément sélectionné" tout en haut du panneau — uniquement quand cet
|
|
28
28
|
* élément est un satellite. Pas de delta : jugé trop chargé visuellement à
|
|
@@ -6,7 +6,7 @@ export type KeyEventImageSize = "thumb" | "full";
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function getKeyEventImageUrl(keyEventId: string, size: KeyEventImageSize): string;
|
|
8
8
|
/**
|
|
9
|
-
* Icône vectorielle courte (bulle du menu radial du
|
|
9
|
+
* Icône vectorielle courte (bulle du menu radial du satellite-facette, badge
|
|
10
10
|
* de carte), même convention de nommage.
|
|
11
11
|
*/
|
|
12
12
|
export declare function getKeyEventIconUrl(keyEventId: string): string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Utilitaire centralisé pour calculer la taille des icônes dans les menus radiaux
|
|
2
|
+
* (actions et événements clés). Assure l'harmonie visuelle entre les deux. */
|
|
3
|
+
/** Ratio de taille de l'icône quand elle est active (en focus/sélectionnée) */
|
|
4
|
+
export declare const ACTIVE_ICON_SIZE_RATIO = 1.85;
|
|
5
|
+
/** Ratio de taille de l'icône quand elle est inactive */
|
|
6
|
+
export declare const INACTIVE_ICON_SIZE_RATIO = 1.65;
|
|
7
|
+
/**
|
|
8
|
+
* Calcule la taille d'une icône dans un menu radial (bulle).
|
|
9
|
+
* Harmonise le dimensionnement entre les actions et les événements clés.
|
|
10
|
+
*
|
|
11
|
+
* @param bubbleRadius - Rayon de la bulle contenant l'icône
|
|
12
|
+
* @param isActive - L'icône est-elle en focus/active?
|
|
13
|
+
* @param iconFontScale - Facteur d'échelle du debug pour l'icône (slider utilisateur)
|
|
14
|
+
* @param applyFitScale - Appliquer le plafonnement fitScale (pour ne pas dépasser du cercle)?
|
|
15
|
+
* @returns Taille de l'icône en pixels
|
|
16
|
+
*/
|
|
17
|
+
export declare function calculateMenuIconSize(bubbleRadius: number, isActive: boolean, iconFontScale?: number, applyFitScale?: boolean): number;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Écarte des angles (radians) placés sur un cercle de rayon `distance` pour
|
|
3
|
+
* que des disques de rayons `radii` centrés dessus ne se chevauchent pas,
|
|
4
|
+
* en déplaçant le moins possible chaque angle de sa position d'origine :
|
|
5
|
+
* chaque paire voisine trop serrée est écartée symétriquement, sur quelques
|
|
6
|
+
* passes. Renvoie les angles dans l'ordre d'entrée.
|
|
7
|
+
*/
|
|
8
|
+
export declare function spreadAngles(angles: number[], radii: number[], distance: number, gap: number): number[];
|
|
9
|
+
/**
|
|
10
|
+
* Facteur (0, 1] à appliquer aux rayons `radii` pour que leurs disques
|
|
11
|
+
* tiennent, sans se chevaucher, sur le cercle de rayon `distance` (écart
|
|
12
|
+
* `gap` entre voisins, dans l'ordre des `angles`) — la condition sous
|
|
13
|
+
* laquelle `spreadAngles` peut les écarter. 1 quand tout tient déjà : un
|
|
14
|
+
* anneau n'est resserré que s'il est plein, et alors d'un bloc (les tailles
|
|
15
|
+
* relatives sont gardées).
|
|
16
|
+
*/
|
|
17
|
+
export declare function ringFitScale(angles: number[], radii: number[], distance: number, gap: number): number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@micheeeeel/yinyangapp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.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",
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
"analyze": "ANALYZE=true webpack --mode production && tsc -p tsconfig.types.json",
|
|
15
15
|
"benchmark:compare": "node benchmarks/compare.js",
|
|
16
16
|
"catalogue:matrix": "npx tsx scripts/catalogue-matrix.ts",
|
|
17
|
+
"events:balance": "node scripts/key-event-balance.cjs",
|
|
18
|
+
"events:adverse-balance": "node scripts/adverse-event-balance.cjs",
|
|
17
19
|
"propagation:cycles-audit": "npx tsx scripts/propagation-cycles-audit.ts"
|
|
18
20
|
},
|
|
19
21
|
"author": "Thomas MICHEL",
|
|
@@ -47,6 +49,7 @@
|
|
|
47
49
|
"files": [
|
|
48
50
|
"dist/bundle.js",
|
|
49
51
|
"dist/bundle.js.LICENSE.txt",
|
|
52
|
+
"dist/bundle.css",
|
|
50
53
|
"dist/types",
|
|
51
54
|
"README.md",
|
|
52
55
|
"LICENSE"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|