@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
|
@@ -6,50 +6,83 @@ type ChildrenOrbitManagerDeps = {
|
|
|
6
6
|
view: IYinYangView;
|
|
7
7
|
getChildControllers: () => IYinYangController[];
|
|
8
8
|
state: YinYangControllerState;
|
|
9
|
+
/** Rendu complet (menu, labels, panneaux, champ de force) : seulement
|
|
10
|
+
* quand l'état de l'orbite change (démarrage, arrêt, repos). */
|
|
9
11
|
renderOppositeChildrenForceField: (orbitData: ChildrenOrbitEntry[]) => void;
|
|
12
|
+
/** Rendu par frame pendant que l'orbite tourne : uniquement ce qui suit
|
|
13
|
+
* la position des satellites (bulles, libellés, liens du champ de force). */
|
|
14
|
+
updateOrbitFrame: (orbitData: ChildrenOrbitEntry[]) => void;
|
|
10
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Orbite des satellites, jouée par le navigateur (PERF-18). Le mouvement est
|
|
18
|
+
* décrit en tronçons à accélération constante (`rotationMotion.ts`, ici en
|
|
19
|
+
* radians et rad/ms) ; chaque satellite reçoit une animation Web Animations
|
|
20
|
+
* par tronçon sur l'enveloppe d'orbite (`viewInitializer.orbitGroup`), calée
|
|
21
|
+
* sur `document.timeline` : le contenu du satellite n'est plus re-rasterisé.
|
|
22
|
+
*
|
|
23
|
+
* Ce qui suit les satellites (bulles, libellés, champ de force) reste en JS :
|
|
24
|
+
* une boucle par image recalcule l'angle sur la même horloge et le même
|
|
25
|
+
* modèle (`evaluateMotion`), d'où la même position que celle affichée.
|
|
26
|
+
* Les positions lues ailleurs passent par `getChildTranslation`, l'attribut
|
|
27
|
+
* `transform` n'étant plus à jour pendant le mouvement.
|
|
28
|
+
*/
|
|
11
29
|
export declare class ChildrenOrbitManager {
|
|
12
30
|
private deps;
|
|
13
31
|
private readonly orbitService;
|
|
14
32
|
private cachedOrbitData;
|
|
15
|
-
/** Temps de rampe (ms) courant pour l'accélération/décélération
|
|
16
|
-
*
|
|
17
|
-
*
|
|
33
|
+
/** Temps de rampe (ms) courant pour l'accélération/décélération —
|
|
34
|
+
* mémorisé pour que setSpeed() (vitesse changée en vol) s'y réfère sans
|
|
35
|
+
* avoir à le repasser partout. */
|
|
18
36
|
private rampMs;
|
|
19
|
-
/**
|
|
20
|
-
*
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
private
|
|
37
|
+
/** Mouvement en cours (vide à l'arrêt). Angles absolus, ajoutés à l'angle
|
|
38
|
+
* de base de chaque satellite. */
|
|
39
|
+
private motion;
|
|
40
|
+
/** Mouvement en cours = arrêt "retour à la position de base" : l'orbite
|
|
41
|
+
* continue sa course pour s'arrêter exactement sur un multiple de 2π,
|
|
42
|
+
* plutôt que de couper la vitesse puis sauter à angle 0. Même principe
|
|
43
|
+
* que AnimationsMngr : `beginHomingStop` (mode "normal") décélère à taux
|
|
44
|
+
* constant, avec un tour de plus si besoin de confort ;
|
|
45
|
+
* `beginFastHomingStop` (mode "Accéléré") rejoint TOUJOURS le prochain
|
|
46
|
+
* passage par la position de base dans une durée fixe choisie par
|
|
47
|
+
* l'utilisateur — voir `fastHomingStop.ts`. */
|
|
48
|
+
private homing;
|
|
49
|
+
/** Satellites et géométrie de la dernière pose (statique ou animée). */
|
|
50
|
+
private appliedOrbitData;
|
|
51
|
+
/** Angle de la dernière pose statique. */
|
|
52
|
+
private appliedAngle;
|
|
53
|
+
/** Animations posées, par enveloppe d'orbite. */
|
|
54
|
+
private tracks;
|
|
55
|
+
/** Satellites recréés pendant le mouvement : animations à reposer. */
|
|
56
|
+
private tracksStale;
|
|
33
57
|
constructor(deps: ChildrenOrbitManagerDeps);
|
|
34
58
|
invalidateCache(): void;
|
|
35
59
|
buildOrbitData(): ChildrenOrbitEntry[];
|
|
60
|
+
/** Pose statique (orbite à l'arrêt ou au repos) et rendu complet. */
|
|
36
61
|
applyTransforms(angleOffset: number, orbitData?: ChildrenOrbitEntry[]): void;
|
|
62
|
+
/** Translation affichée du satellite (repère du parent), y compris en
|
|
63
|
+
* plein mouvement : calculée à l'instant de l'image courante. */
|
|
64
|
+
getChildTranslation(controller: IYinYangController): {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
};
|
|
68
|
+
private writeTranslations;
|
|
37
69
|
setEnabled(isEnabled: boolean, rampMs?: number): void;
|
|
38
|
-
/** Change la vitesse cible
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* donc lui aussi progressif plutôt que d'un coup. */
|
|
70
|
+
/** Change la vitesse cible : en vol, le mouvement repart de l'état
|
|
71
|
+
* courant et y converge au rythme de la rampe en cours — un changement
|
|
72
|
+
* de vitesse est donc lui aussi progressif plutôt que d'un coup. */
|
|
42
73
|
setSpeed(speed: number): void;
|
|
43
74
|
setRadiusScale(scale: number): void;
|
|
44
75
|
/**
|
|
45
76
|
* Démarre (ou modifie en vol) l'orbite. Avec `rampMs > 0`, la vitesse
|
|
46
|
-
* angulaire part de sa valeur courante (0 si à l'arrêt) et
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
77
|
+
* angulaire part de sa valeur courante (0 si à l'arrêt) et rejoint
|
|
78
|
+
* `state.children.orbitSpeed` à accélération constante — un arrêt en
|
|
79
|
+
* cours de freinage repris ici ré-accélère en douceur depuis la vitesse
|
|
80
|
+
* déjà atteinte. `rampMs` omis (0) → vitesse cible appliquée
|
|
50
81
|
* instantanément, comportement historique.
|
|
51
82
|
*/
|
|
52
83
|
start(_targetSpeed: number, rampMs?: number): void;
|
|
84
|
+
/** Fin de vie : coupe l'orbite sans rien écrire dans le DOM. */
|
|
85
|
+
destroy(): void;
|
|
53
86
|
/**
|
|
54
87
|
* Arrête l'orbite. Avec `rampMs > 0` et une orbite en cours, les satellites
|
|
55
88
|
* continuent leur course et décélèrent à taux constant pour s'arrêter
|
|
@@ -68,6 +101,24 @@ export declare class ChildrenOrbitManager {
|
|
|
68
101
|
private computeRemainingToZero;
|
|
69
102
|
private beginHomingStop;
|
|
70
103
|
private beginFastHomingStop;
|
|
104
|
+
/** Angle et vitesse à l'instant `now`, mouvement en cours ou non. */
|
|
105
|
+
private currentMotionState;
|
|
106
|
+
private play;
|
|
107
|
+
/**
|
|
108
|
+
* Image d'orbite en vol : les satellites sont déplacés par le navigateur ;
|
|
109
|
+
* ici, seulement ce qui les suit. Le temps de l'image (rAF) est celui de
|
|
110
|
+
* `document.timeline` : même angle que celui affiché.
|
|
111
|
+
*/
|
|
112
|
+
private readonly onFrame;
|
|
113
|
+
/** (Re)pose une animation par tronçon sur l'enveloppe de chaque satellite. */
|
|
114
|
+
private syncTracks;
|
|
115
|
+
private cancelTracks;
|
|
116
|
+
private cancelFrameLoop;
|
|
117
|
+
/** Repos à `angle` : pose statique écrite AVANT de retirer les
|
|
118
|
+
* animations (même tâche, aucune image entre les deux). */
|
|
119
|
+
private settle;
|
|
71
120
|
private finalizeStop;
|
|
121
|
+
/** Horloge des animations (temps de l'image courante). */
|
|
122
|
+
private now;
|
|
72
123
|
}
|
|
73
124
|
export {};
|
|
@@ -63,6 +63,8 @@ export declare class OddHighlightEffects {
|
|
|
63
63
|
* rejouerait l'onde à chaque retour sur la sélection.
|
|
64
64
|
*/
|
|
65
65
|
clear(keepOddMemory?: boolean): void;
|
|
66
|
+
/** Fin de vie : coupe la boucle et retire les couches. */
|
|
67
|
+
destroy(): void;
|
|
66
68
|
private ensureLayer;
|
|
67
69
|
private ensureLoop;
|
|
68
70
|
private stopLoop;
|
|
@@ -47,8 +47,10 @@ export declare class OddViewManager {
|
|
|
47
47
|
/** Satellite sélectionné (menu d'action ouvert) — il porte la même mise en
|
|
48
48
|
* valeur que celle d'un ODD, mais resserrée sur lui seul. */
|
|
49
49
|
private selectedChildKey;
|
|
50
|
-
/**
|
|
51
|
-
*
|
|
50
|
+
/** Satellite source d'un item de la pile — prioritaire tant qu'il dure.
|
|
51
|
+
* "soft" : aperçu au survol, sans effets de sélection. "full" : action en
|
|
52
|
+
* focus en STACK, même mise en lumière qu'un satellite sélectionné en
|
|
53
|
+
* RECHERCHE. */
|
|
52
54
|
private stackPreviewKeys;
|
|
53
55
|
/** Laquelle des deux sélections délibérées — un ODD, ou un satellite — est
|
|
54
56
|
* la plus récente. Elles peuvent coexister (le menu d'un satellite reste
|
|
@@ -96,11 +98,13 @@ export declare class OddViewManager {
|
|
|
96
98
|
* de visée + pings + onde de scan, et spikes énergisés avec leurs
|
|
97
99
|
* comètes. */
|
|
98
100
|
private syncFullHighlightEffects;
|
|
101
|
+
/** Fin de vie : coupe la boucle des effets de mise en valeur. */
|
|
102
|
+
destroy(): void;
|
|
99
103
|
/** Relu à chaque frame par OddHighlightEffects : les satellites orbitent
|
|
100
104
|
* sous les anneaux, et peuvent disparaître (satellites masqués, facette
|
|
101
105
|
* changée) sans que la mise en valeur soit repassée. */
|
|
102
106
|
private buildHighlightTargets;
|
|
103
|
-
highlightOddByStackItemId(stackItemId: string | null): void;
|
|
107
|
+
highlightOddByStackItemId(stackItemId: string | null, intensity?: OddHighlightIntensity): void;
|
|
104
108
|
cancelOddHighlight(): void;
|
|
105
109
|
showOddInfo(oddId: string): void;
|
|
106
110
|
showComposanteInfo(): void;
|
|
@@ -44,10 +44,24 @@ export declare const HALO_RING: Record<OddHighlightIntensity, {
|
|
|
44
44
|
glowOpacity: number;
|
|
45
45
|
}>;
|
|
46
46
|
/** Satellite dont le menu d'action est ouvert : blanc pur et plus large, pour
|
|
47
|
-
* ne pas se confondre avec un membre de l'ODD mis en valeur.
|
|
48
|
-
|
|
47
|
+
* ne pas se confondre avec un membre de l'ODD mis en valeur. La lueur est
|
|
48
|
+
* l'anneau ACTIVE_CHILD_GLOW (voir setChildGlowRing), pas un drop-shadow :
|
|
49
|
+
* le satellite est en orbite, le flou serait recalculé à chaque image. */
|
|
50
|
+
export declare const ACTIVE_CHILD_FILTER = "brightness(1.1)";
|
|
49
51
|
/** Survol direct d'un satellite — aperçu par-dessus tout le reste. */
|
|
50
|
-
export declare const HOVERED_CHILD_FILTER = "brightness(1.3)
|
|
52
|
+
export declare const HOVERED_CHILD_FILTER = "brightness(1.3)";
|
|
53
|
+
/** Survol d'un satellite depuis l'arbre Recherche. */
|
|
54
|
+
export declare const SEARCH_HOVERED_CHILD_FILTER = "brightness(1.5)";
|
|
55
|
+
/** Lueur d'un satellite, équivalent de `drop-shadow(0 0 ${blur}px color)`
|
|
56
|
+
* (alpha compris dans `alpha`). */
|
|
57
|
+
export type ChildGlow = {
|
|
58
|
+
color: string;
|
|
59
|
+
blur: number;
|
|
60
|
+
alpha: number;
|
|
61
|
+
};
|
|
62
|
+
export declare const ACTIVE_CHILD_GLOW: readonly ChildGlow[];
|
|
63
|
+
export declare const HOVERED_CHILD_GLOW: readonly ChildGlow[];
|
|
64
|
+
export declare const SEARCH_HOVERED_CHILD_GLOW: readonly ChildGlow[];
|
|
51
65
|
/** Aucun ODD mis en valeur et satellite ni actif ni survolé. */
|
|
52
66
|
export declare const IDLE_CHILD_FILTER = "brightness(0.85)";
|
|
53
67
|
/** Sans transition, l'extinction des non-membres se lit comme un
|
|
@@ -77,3 +91,31 @@ export declare function resolveChildFilter(params: {
|
|
|
77
91
|
isPropagationTarget: boolean;
|
|
78
92
|
highlight: ChildHighlightState;
|
|
79
93
|
}): string;
|
|
94
|
+
/** Lueur d'état du satellite (actif), dans le même ordre de priorité que
|
|
95
|
+
* resolveChildFilter : seul le satellite actif hors mise en valeur d'ODD en
|
|
96
|
+
* a une — les membres ont leur anneau coloré (HALO_RING). */
|
|
97
|
+
export declare function resolveChildGlow(params: {
|
|
98
|
+
isMember: boolean;
|
|
99
|
+
isActiveChild: boolean;
|
|
100
|
+
highlight: ChildHighlightState;
|
|
101
|
+
}): readonly ChildGlow[] | null;
|
|
102
|
+
/**
|
|
103
|
+
* Pose (ou retire, `glows` null) l'anneau de lueur d'un satellite : des
|
|
104
|
+
* cercles concentriques translucides juste au-delà de son bord (voir
|
|
105
|
+
* glowHalo.glowStrokeLayers), dans son globalGroup — ils suivent donc son
|
|
106
|
+
* orbite sans aucun travail par image, là où un drop-shadow sur le groupe
|
|
107
|
+
* était recalculé à chaque déplacement.
|
|
108
|
+
*/
|
|
109
|
+
export declare function setChildGlowRing(childController: {
|
|
110
|
+
view: {
|
|
111
|
+
viewInitializer: {
|
|
112
|
+
globalGroup: {
|
|
113
|
+
node: () => unknown;
|
|
114
|
+
};
|
|
115
|
+
positionX: number;
|
|
116
|
+
positionY: number;
|
|
117
|
+
borderOuterRadius: number;
|
|
118
|
+
borderInnerRadius: number;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
}, glows: readonly ChildGlow[] | null): void;
|
|
@@ -83,9 +83,12 @@ type SearchPanelSynchronizerDeps = {
|
|
|
83
83
|
x: number;
|
|
84
84
|
y: number;
|
|
85
85
|
} | null;
|
|
86
|
-
/**
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
/** Affiche le combo source, ou l'action ciblée si le guide vient d'un événement. */
|
|
87
|
+
showStackItemBlocksForDrag: (stackItemId: string, action: {
|
|
88
|
+
actionId: string;
|
|
89
|
+
oddId: string;
|
|
90
|
+
cuttingIndex: number;
|
|
91
|
+
}) => void;
|
|
89
92
|
/** Glisser guidé : aperçu en direct des cartes combo selon l'emplacement
|
|
90
93
|
* survolé (restaure le contenu d'origine hors glisser guidé). */
|
|
91
94
|
refreshGuidedComboPreview: () => void;
|
|
@@ -128,8 +131,8 @@ export declare class SearchPanelSynchronizer {
|
|
|
128
131
|
* Cœur partagé du glisser-déposer vers la pile — entièrement générique
|
|
129
132
|
* (ne connaît ni action ni Événement Clé), utilisé par startSearchActionDrag
|
|
130
133
|
* (hiérarchie RECHERCHE), par ChildActionMenuController (bulle satellite du
|
|
131
|
-
* diagramme) et par
|
|
132
|
-
*
|
|
134
|
+
* diagramme) et par KeyEventMenuController (bulle Événement Clé d'un
|
|
135
|
+
* satellite-facette) : chaque appelant fournit l'icône du fantôme de glisser et un
|
|
133
136
|
* `onDrop` qui sait construire l'item de pile approprié. Retourne `cleanup`
|
|
134
137
|
* comme poignée d'annulation, pour permettre à un appelant de stopper
|
|
135
138
|
* proprement un glisser en cours (ex. fermeture du menu radial en plein
|
|
@@ -8,7 +8,7 @@ type ControllerSettingsApplierDeps = {
|
|
|
8
8
|
getOrbitData: () => ChildrenOrbitEntry[];
|
|
9
9
|
updateContextLabels: (orbitData: ChildrenOrbitEntry[]) => void;
|
|
10
10
|
updateChildActionMenu: (orbitData: ChildrenOrbitEntry[]) => void;
|
|
11
|
-
|
|
11
|
+
updateKeyEventMenu: () => void;
|
|
12
12
|
applyChildrenFitScale: () => void;
|
|
13
13
|
clearForceFieldComputationState: () => void;
|
|
14
14
|
renderOppositeChildrenForceField: () => void;
|
|
@@ -35,10 +35,10 @@ export declare class ControllerSettingsApplier {
|
|
|
35
35
|
setOddLabelsCompact(compact: boolean): void;
|
|
36
36
|
setChildActionMenuItemDistance(distance: number): void;
|
|
37
37
|
setChildActionMenuItemScale(scale: number): void;
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
setKeyEventMenuDistanceOffset(offset: number): void;
|
|
39
|
+
setKeyEventMenuItemScale(scale: number): void;
|
|
40
40
|
setChildActionIconFontScale(scale: number): void;
|
|
41
|
-
|
|
41
|
+
setKeyEventIconFontScale(scale: number): void;
|
|
42
42
|
setChildLabelMaxLines(lines: number): void;
|
|
43
43
|
setOddLabelMaxLines(lines: number): void;
|
|
44
44
|
setFacetteLabelFontScale(scale: number): void;
|
|
@@ -94,9 +94,9 @@ export declare class ControllerSession {
|
|
|
94
94
|
cuttingIndex: number;
|
|
95
95
|
forceOpen: boolean;
|
|
96
96
|
} | null;
|
|
97
|
-
/**
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
/** Facette dont le satellite-facette (Idle « facettes ») a ses bulles
|
|
98
|
+
* d'Événements Clés déployées, ou null. */
|
|
99
|
+
keyEventMenuFacetteId: string | null;
|
|
100
100
|
/** Id de l'Événement Clé actuellement en aperçu (carte affichée), ou null. */
|
|
101
101
|
activeKeyEventId: string | null;
|
|
102
102
|
/** Quand vrai, le prochain appel à onShowDirectActionBlock est routé vers le panneau B. */
|
|
@@ -46,6 +46,16 @@ export type ControllerUiCallbacks = {
|
|
|
46
46
|
* or when an ODD-level interaction deselects it — componentIndex lets the listener
|
|
47
47
|
* restore its detail panel to the facette view rather than clearing it entirely. */
|
|
48
48
|
onDiagramSatelliteDeselect?: (componentIndex: number) => void;
|
|
49
|
+
/** Vrai si au moins un panneau RECHERCHE est verrouillé (multi-blocs) : seul
|
|
50
|
+
* ce cas garde l'action active quand on sélectionne un autre satellite, pour
|
|
51
|
+
* en consulter la propagation dans le panneau suivant. */
|
|
52
|
+
isAnyRecherchePanelLocked?: () => boolean;
|
|
53
|
+
/** Vrai si un panneau RECHERCHE est verrouillé sur une action : elle reste
|
|
54
|
+
* l'action source du multi-blocs, aucune autre ne se sélectionne. */
|
|
55
|
+
isActionSelectionLocked?: () => boolean;
|
|
56
|
+
/** Clic sur une action alors que la sélection est verrouillée : `retry`
|
|
57
|
+
* rejoue ce clic une fois le panneau déverrouillé. */
|
|
58
|
+
onActionSelectionBlocked?: (retry: () => void) => void;
|
|
49
59
|
/** Fired when the user clicks the current composante's border arc to hide its satellites. */
|
|
50
60
|
onDiagramComposanteDeselect?: () => void;
|
|
51
61
|
/** Vers le panneau Recherche quand la souris entre/sort d'un satellite dans le diagramme. */
|
|
@@ -9,6 +9,7 @@ type GhostState = {
|
|
|
9
9
|
projectedGhostComponentTension: number | null;
|
|
10
10
|
projectedGhostCuttingStatesByOddId: Map<string, ProjectedCuttingState[]> | null;
|
|
11
11
|
};
|
|
12
|
+
export type IdleView = "arcs" | "facettes" | "tab";
|
|
12
13
|
export declare class YinYangControllerState {
|
|
13
14
|
children: {
|
|
14
15
|
enabled: boolean;
|
|
@@ -20,6 +21,15 @@ export declare class YinYangControllerState {
|
|
|
20
21
|
orbitSpeed: number;
|
|
21
22
|
orbitRadiusScale: number;
|
|
22
23
|
};
|
|
24
|
+
/** Sous-état d'Idle (children.enabled === false) : « arcs » montre les
|
|
25
|
+
* arcs pondérés des facettes autour de l'illustration, « facettes »
|
|
26
|
+
* remplace ces arcs par un satellite par facette (son yin/yang), « tab »
|
|
27
|
+
* range ces mêmes satellites dans une grille régulière autour d'une
|
|
28
|
+
* illustration réduite, pour comparer leurs poids. Mémorisé
|
|
29
|
+
* quand une Facette s'ouvre : la refermer ramène au même sous-état. */
|
|
30
|
+
idle: {
|
|
31
|
+
view: IdleView;
|
|
32
|
+
};
|
|
23
33
|
menu: {
|
|
24
34
|
hasActiveChildAction: boolean;
|
|
25
35
|
activeChildKey: string | null;
|
|
@@ -34,17 +44,17 @@ export declare class YinYangControllerState {
|
|
|
34
44
|
iconFontScale: number;
|
|
35
45
|
/** Ajustement fin (px) de la distance des boutons d'Événement Clé,
|
|
36
46
|
* de part et d'autre de la longueur auto-calculée (voir
|
|
37
|
-
*
|
|
47
|
+
* KeyEventMenuController — offsetDistance dérivé de l'orbite des
|
|
38
48
|
* satellites, pas de contrôle dédié à cette base). */
|
|
39
|
-
|
|
49
|
+
keyEventMenuDistanceOffset: number;
|
|
40
50
|
/** Taille des boutons du menu radial des Événements Clés — contrôle dédié
|
|
41
51
|
* ("Taille boutons", groupe "Événements clés"), séparé de itemScale qui
|
|
42
52
|
* ne pilote que les boutons d'action des satellites. */
|
|
43
|
-
|
|
53
|
+
keyEventMenuItemScale: number;
|
|
44
54
|
/** Taille des icônes dans les bulles du menu radial des Événements Clés —
|
|
45
55
|
* contrôle dédié ("Taille icônes", groupe "Événements clés"), séparé de
|
|
46
56
|
* iconFontScale qui ne pilote que les icônes d'action des satellites. */
|
|
47
|
-
|
|
57
|
+
keyEventIconFontScale: number;
|
|
48
58
|
};
|
|
49
59
|
action: {
|
|
50
60
|
delta: number;
|
|
@@ -99,8 +109,8 @@ export declare class YinYangControllerState {
|
|
|
99
109
|
orbitData: ChildrenOrbitEntry[] | null;
|
|
100
110
|
revealStartedAt: number | undefined;
|
|
101
111
|
selectedLinkIndex: number | null;
|
|
102
|
-
/** Item de pile en focus — persistant, posé par le clic sur
|
|
103
|
-
*
|
|
112
|
+
/** Item de pile en focus — persistant, posé par le clic sur son libellé
|
|
113
|
+
* dans la pile. Survit à la navigation entre
|
|
104
114
|
* satellites et facettes ; effacé quand l'item quitte la pile active. */
|
|
105
115
|
focusedStackItemId: string | null;
|
|
106
116
|
/** Aperçu temporaire (survol d'un bloc du panneau ou d'un item de la
|
|
@@ -120,6 +130,7 @@ export declare class YinYangControllerState {
|
|
|
120
130
|
blockingAnimations: BlockingAnimationTracker;
|
|
121
131
|
setActiveChildKey(childKey: string | null): void;
|
|
122
132
|
setChildrenEnabled(isEnabled: boolean): void;
|
|
133
|
+
setIdleView(view: IdleView): void;
|
|
123
134
|
setChildrenPendingRefresh(isPending: boolean): void;
|
|
124
135
|
setOrbitEnabled(isEnabled: boolean): void;
|
|
125
136
|
setOrbitSpeed(speed: number): void;
|
|
@@ -167,9 +178,9 @@ export declare class YinYangControllerState {
|
|
|
167
178
|
setMenuItemDistance(distance: number): void;
|
|
168
179
|
setMenuItemScale(scale: number): void;
|
|
169
180
|
setMenuIconFontScale(scale: number): void;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
181
|
+
setKeyEventMenuDistanceOffset(offset: number): void;
|
|
182
|
+
setKeyEventMenuItemScale(scale: number): void;
|
|
183
|
+
setKeyEventIconFontScale(scale: number): void;
|
|
173
184
|
setChildLabelMaxLines(lines: number): void;
|
|
174
185
|
setOddLabelMaxLines(lines: number): void;
|
|
175
186
|
setLabelShortMaxChars(chars: number): void;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { KeyEventActionEffects } from "../../data/key-event-effects";
|
|
2
|
+
import type { EventTargetBreakdown } from "./force-field/keyEventPresentation";
|
|
1
3
|
import type { ForceFieldLinkDetail } from "./force-field/types";
|
|
2
4
|
import type { ComboResult } from "../../data/combo-engine";
|
|
3
|
-
import type { AmplifierResult
|
|
5
|
+
import type { AmplifierResult } from "../../data/amplifier-engine";
|
|
4
6
|
import type { AbsorptionBreakdown, ActiveShield } from "./force-field/shieldViewModel";
|
|
5
7
|
/**
|
|
6
8
|
* Bloc "action" de la vue cumulative (mode STACK) : "source" = action jouée
|
|
@@ -27,6 +29,7 @@ export type ActionCumulativeBlock = {
|
|
|
27
29
|
detailRows: ForceFieldLinkDetail[];
|
|
28
30
|
comboResults?: ComboResult[];
|
|
29
31
|
amplifierResults?: AmplifierResult[];
|
|
32
|
+
eventEffects?: KeyEventActionEffects;
|
|
30
33
|
stackItemId?: string;
|
|
31
34
|
color?: string;
|
|
32
35
|
/** This item's own propagation edges from the real sequential
|
|
@@ -51,6 +54,10 @@ export type ActionCumulativeBlock = {
|
|
|
51
54
|
/** Réduction appliquée par le bouclier du satellite en focus à la
|
|
52
55
|
* contribution négative de ce bloc — journal de résolution. */
|
|
53
56
|
shieldAbsorption?: AbsorptionBreakdown;
|
|
57
|
+
directionalAbsorptions?: Array<{
|
|
58
|
+
active?: ActiveShield;
|
|
59
|
+
breakdown: AbsorptionBreakdown;
|
|
60
|
+
}>;
|
|
54
61
|
};
|
|
55
62
|
/**
|
|
56
63
|
* Bloc "keyEvent" de la vue cumulative : un Événement Clé joué (kind="keyEvent"
|
|
@@ -72,7 +79,7 @@ export type KeyEventCumulativeBlock = {
|
|
|
72
79
|
id: string;
|
|
73
80
|
name: string;
|
|
74
81
|
}>;
|
|
75
|
-
breakdowns?:
|
|
82
|
+
breakdowns?: EventTargetBreakdown[];
|
|
76
83
|
};
|
|
77
84
|
/**
|
|
78
85
|
* Un bloc de la vue cumulative (mode STACK). Hissé au niveau module (au lieu
|
|
@@ -6,7 +6,7 @@ export declare const actionMap: Map<string, ActionDefinition>;
|
|
|
6
6
|
* Cibles d'un Événement Clé prêtes pour buildKeyEventCardHtml : id + nom,
|
|
7
7
|
* la carte affichant pour chacune le seul bonus ajouté par l'effet (pas de
|
|
8
8
|
* deltas du catalogue à charrier jusque-là). Les deux points d'appel (clic
|
|
9
|
-
* sur le
|
|
9
|
+
* sur le satellite-facette, cartes cumulées du panneau) passent par ici — une
|
|
10
10
|
* seule définition de la forme attendue.
|
|
11
11
|
*/
|
|
12
12
|
export declare function buildKeyEventTargets(keyEvent: KeyEventDefinition): Array<{
|
|
@@ -10,20 +10,18 @@ export type EventFieldTarget = {
|
|
|
10
10
|
* (même mécanisme que ForceFieldRenderer pour les champs de force
|
|
11
11
|
* cross-composante). */
|
|
12
12
|
targetComponentId?: string;
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
* souffle (voir getEventFieldCapsuleWidth). */
|
|
16
|
-
scoreBonus: number;
|
|
13
|
+
/** Shared eligibility strength, purely visual; zero for potential targets. */
|
|
14
|
+
intensity: number;
|
|
17
15
|
};
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*
|
|
25
|
-
*/
|
|
26
|
-
export declare function
|
|
16
|
+
/** Vrai si l'événement amplifie réellement au moins un satellite — une
|
|
17
|
+
* action ciblée cochée, jouée après lui et dans sa fenêtre (voir
|
|
18
|
+
* collectEligibleStrengths). Sert, en mode STACK, à écarter les événements
|
|
19
|
+
* cochés qui n'ont encore aucun effet. */
|
|
20
|
+
export declare function keyEventAffectsAny(keyEvent: KeyEventDefinition, activeItems: ActionStackItem[]): boolean;
|
|
21
|
+
/** Vrai si l'événement amplifie réellement au moins un satellite de
|
|
22
|
+
* `componentId` — choisit, en mode STACK, l'événement distant dont le
|
|
23
|
+
* souffle entre dans la facette courante. */
|
|
24
|
+
export declare function keyEventAffectsComponent(keyEvent: KeyEventDefinition, componentId: string, activeItems: ActionStackItem[]): boolean;
|
|
27
25
|
/**
|
|
28
26
|
* Résout les cibles du "Champ d'événement" pour l'Événement Clé actuellement
|
|
29
27
|
* actif (aperçu ou validé) : sa portée statique, résolue en index de satellite
|
|
@@ -33,6 +31,13 @@ export declare function keyEventReachesComponent(keyEvent: KeyEventDefinition, c
|
|
|
33
31
|
* maintenant — ceux dont une action ciblée est cochée dans la pile — de ceux
|
|
34
32
|
* qui ne sont qu'à portée : les premiers reçoivent le bonus de score de
|
|
35
33
|
* l'événement, les seconds 0 (souffle minimal).
|
|
34
|
+
*
|
|
35
|
+
* `stackEffects` (mode STACK, événements cochés de la pile) : la pile ne
|
|
36
|
+
* montre que des effets réels, donc seuls les satellites amplifiés reçoivent
|
|
37
|
+
* un cordon — et une facette distante seulement si elle en abrite un — et
|
|
38
|
+
* leur épaisseur suit le bonus EFFECTIF, réduit selon la position de
|
|
39
|
+
* l'action dans la fenêtre. L'aperçu (RECHERCHE ou bulle) garde la portée
|
|
40
|
+
* complète et le bonus nominal : il montre jusqu'où l'événement PEUT porter.
|
|
36
41
|
*/
|
|
37
42
|
export declare function buildEventFieldTargets(params: {
|
|
38
43
|
keyEvent: KeyEventDefinition;
|
|
@@ -44,4 +49,5 @@ export declare function buildEventFieldTargets(params: {
|
|
|
44
49
|
score: number;
|
|
45
50
|
cuttingIndex: number;
|
|
46
51
|
}>;
|
|
52
|
+
stackEffects?: boolean;
|
|
47
53
|
}): EventFieldTarget[];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ActionStackItem } from "../action-stack/ActionStackState";
|
|
2
|
+
import type { KeyEventPropagationContext } from "../../../data/key-event-propagation";
|
|
3
|
+
/** Same event matches as delta/shield resolution, with actual source applicability. */
|
|
4
|
+
export declare function keyEventPropagationContext(item: ActionStackItem | undefined, items: ActionStackItem[]): KeyEventPropagationContext | undefined;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ActionStackItem } from "../action-stack/ActionStackState";
|
|
2
|
+
import type { KeyEventDefinition } from "../../../data/key-event-types";
|
|
3
|
+
import { type EventTargetBreakdown } from "../force-field/keyEventPresentation";
|
|
4
|
+
export declare function keyEventTargetBreakdowns(event: KeyEventDefinition, items: ActionStackItem[]): EventTargetBreakdown[];
|
|
@@ -3,3 +3,19 @@ export declare function parseTranslateTransform(transform: string): {
|
|
|
3
3
|
y: number;
|
|
4
4
|
found: boolean;
|
|
5
5
|
};
|
|
6
|
+
type TransformTarget = {
|
|
7
|
+
setAttribute: (name: string, value: string) => unknown;
|
|
8
|
+
};
|
|
9
|
+
/** Translation d'orbite, sur l'enveloppe d'orbite du satellite
|
|
10
|
+
* (viewInitializer.orbitGroup) — en plein mouvement, une animation du
|
|
11
|
+
* navigateur la recouvre (ChildrenOrbitManager). */
|
|
12
|
+
export declare function setSatelliteTranslation(target: TransformTarget, x: number, y: number): void;
|
|
13
|
+
/** Respiration du weightDelta (WeightPreviewRingRenderer), sur le
|
|
14
|
+
* globalGroup du satellite : scale autour de son centre. Séparée de
|
|
15
|
+
* l'orbite, qui est posée sur l'enveloppe. `scale` 1 (ou null) la retire. */
|
|
16
|
+
export declare function setSatellitePulseScale(target: TransformTarget, pulse: {
|
|
17
|
+
scale: number;
|
|
18
|
+
cx: number;
|
|
19
|
+
cy: number;
|
|
20
|
+
} | null): void;
|
|
21
|
+
export {};
|
|
@@ -13,4 +13,6 @@ export interface VizControlsDeps {
|
|
|
13
13
|
orbitRampMs: number;
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
/** Retourne la fonction de démontage : désabonne les veilles d'inactivité
|
|
17
|
+
* (sinon elles relanceraient la rotation / l'orbite d'un diagramme détruit). */
|
|
18
|
+
export declare function mountVizControls(deps: VizControlsDeps): () => void;
|