@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
|
@@ -9,6 +9,8 @@ import { StackFocusController } from "../action-stack/StackFocusController";
|
|
|
9
9
|
import { ComponentTitlePresenter } from "../labels/ComponentTitlePresenter";
|
|
10
10
|
import type { ControllerUiCallbacks } from "../state/ControllerUiCallbacks";
|
|
11
11
|
import { ChildrenOrbitManager } from "../odd/ChildrenOrbitManager";
|
|
12
|
+
/** Écart (px, repère du motif) entre deux satellites voisins d'un anneau. */
|
|
13
|
+
export declare const SATELLITE_RING_GAP_PX = 6;
|
|
12
14
|
export type ChildrenBuilderDeps = {
|
|
13
15
|
animateChildren: (show: boolean) => Promise<void>;
|
|
14
16
|
applyChildrenOrbitTransforms: (angleOffset: number, orbitData?: ChildrenOrbitEntry[]) => void;
|
|
@@ -29,6 +31,8 @@ export type ChildrenBuilderDeps = {
|
|
|
29
31
|
getCurrentComponentOrUndefined: () => YinYangInternalModel["components"][number] | undefined;
|
|
30
32
|
getKey: () => string;
|
|
31
33
|
renderOppositeChildrenForceField: (orbitData?: ChildrenOrbitEntry[], angleOffset?: number) => void;
|
|
34
|
+
/** Exécute `run` sans rendu du champ de force (les appels sont ignorés). */
|
|
35
|
+
suppressForceFieldRender: (run: () => void) => void;
|
|
32
36
|
getRotationState: () => {
|
|
33
37
|
clockWise: boolean;
|
|
34
38
|
durationMs: number;
|
|
@@ -56,28 +60,21 @@ export declare class ChildrenBuilder {
|
|
|
56
60
|
* baseline radius, independent of any satellite's own weight-scaled
|
|
57
61
|
* radius — mirrors ChildActionMenuController's action cluster geometry. */
|
|
58
62
|
private getChildActionClusterReach;
|
|
59
|
-
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
|
|
66
|
-
/** Ratio de taille
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
|
|
74
|
-
/** The container-fit shrink ratio only depends on borderOuterRadius/
|
|
75
|
-
* smallCircleRadius/distanceFromChild, which are fixed for the whole
|
|
76
|
-
* session once this top-level view is first initialized (they don't get
|
|
77
|
-
* recomputed on facette switch) — so this is computed once (on the worst
|
|
78
|
-
* case weight ratio across every facette) and cached. That's what keeps
|
|
79
|
-
* the whole diagram's size from visibly changing every time the user
|
|
80
|
-
* switches facette. */
|
|
63
|
+
/** Ratio de taille d'un satellite (rayon relatif à la taille de base,
|
|
64
|
+
* ViewInitializer.smallCircleRadius) : sur son poids ABSOLU, le même pour
|
|
65
|
+
* la cause et pour la sphère d'un personnage — un satellite de poids 7 a
|
|
66
|
+
* la même taille dans tous les diagrammes, quels que soient ses voisins.
|
|
67
|
+
* `(poids + 1) / (référence + 1)` : 1 au poids de référence (5), 1/6 au
|
|
68
|
+
* poids nul (un satellite vide reste visible), 11/6 au poids maximal. */
|
|
69
|
+
static weightToSizeRatio(weight: number): number;
|
|
70
|
+
/** Ratio de taille du satellite le plus lourd possible (poids maximal). */
|
|
71
|
+
static readonly MAX_SIZE_RATIO: number;
|
|
72
|
+
/** Réduction d'ensemble qui fait tenir l'anneau de satellites dans le
|
|
73
|
+
* conteneur. Elle ne dépend que de la géométrie du motif (rayon, taille
|
|
74
|
+
* de base, orbite), pas des données : elle réserve la place du satellite
|
|
75
|
+
* le plus lourd possible, si bien que le cercle central occupe la même
|
|
76
|
+
* part du conteneur dans tous les diagrammes, et qu'aucune évolution des
|
|
77
|
+
* poids en cours de partie ne fait déborder l'anneau. Calculée une fois. */
|
|
81
78
|
private cachedGlobalFitShrinkRatio?;
|
|
82
79
|
private computeGlobalFitShrinkRatio;
|
|
83
80
|
applyChildrenFitScale(): void;
|
|
@@ -32,10 +32,12 @@ export type ComponentSwitchCoordinatorDeps = {
|
|
|
32
32
|
cuttingIndex: number;
|
|
33
33
|
}>;
|
|
34
34
|
clearActiveChild: () => void;
|
|
35
|
-
clearChildren: () => void;
|
|
36
35
|
createYinYangChildren: () => void;
|
|
37
36
|
detailsPresenter: ForceFieldDetailsPresenter;
|
|
38
37
|
disableOuterSpark: () => void;
|
|
38
|
+
/** Réaligne le sous-état Idle (arcs / facettes) : ce chemin quitte Idle
|
|
39
|
+
* sans passer par setChildrenEnabled(). */
|
|
40
|
+
syncIdleView: () => void;
|
|
39
41
|
eventFieldLifecycleController: EventFieldLifecycleController;
|
|
40
42
|
eventFieldRenderer: EventFieldRenderer;
|
|
41
43
|
focusChildByOddCutting: (oddId: string, cuttingIndex: number, forceOpen?: boolean) => void;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { IYinYangView } from "../../../interfaces/IYinYangView";
|
|
2
|
+
import { IYinYangController } from "../../../interfaces/IYinYangController";
|
|
3
|
+
import { IYinYangAppFactory } from "../../../interfaces/IYinYangAppFactory";
|
|
4
|
+
import { YinYangInternalModel } from "../../../interfaces/IYinYangInternalModel";
|
|
5
|
+
import { IdleView, YinYangControllerState } from "../state/YinYangControllerState";
|
|
6
|
+
import { FacetModulation, FacetModulationOptions } from "./facetModulation";
|
|
7
|
+
/** Crochets de l'hôte autour du sous-état « tab » — voir
|
|
8
|
+
* `IYinYangController.setIdleTabHooks`. */
|
|
9
|
+
export type IdleTabHooks = {
|
|
10
|
+
/** Avant le calcul de la grille (l'hôte peut agrandir le conteneur du
|
|
11
|
+
* diagramme) ; la grille attend sa résolution. */
|
|
12
|
+
beforeEnter?: () => Promise<void> | void;
|
|
13
|
+
/** Une fois les satellites revenus à leur place radiale. */
|
|
14
|
+
afterLeave?: () => Promise<void> | void;
|
|
15
|
+
};
|
|
16
|
+
export type IdleFacettesControllerDeps = {
|
|
17
|
+
view: IYinYangView;
|
|
18
|
+
state: YinYangControllerState;
|
|
19
|
+
factory: IYinYangAppFactory;
|
|
20
|
+
getKey: () => string;
|
|
21
|
+
getInternalModel: () => YinYangInternalModel;
|
|
22
|
+
setChildrenHiddenState: (children: IYinYangController[], hidden: boolean) => void;
|
|
23
|
+
animateChildren: (children: IYinYangController[], show: boolean) => Promise<void>;
|
|
24
|
+
applyChildrenFitScale: () => void;
|
|
25
|
+
/** Double-clic sur un satellite-facette : ouvre cette Facette, comme son arc. */
|
|
26
|
+
openFacette: (componentIndex: number, componentId: string) => void;
|
|
27
|
+
/** Clic sur un satellite-facette : déploie/replie ses Événements Clés. */
|
|
28
|
+
onSatelliteClick: (componentId: string) => void;
|
|
29
|
+
/** En Idle « tab » : sélectionne la facette pour le titre (sans déployer les bulles). */
|
|
30
|
+
selectKeyEventFacetteForTab: (componentId: string) => void;
|
|
31
|
+
/** Double-clic, juste avant d'ouvrir la Facette : annule l'effet de bord
|
|
32
|
+
* du premier clic sur l'aperçu en cours. */
|
|
33
|
+
onSatelliteDoubleClick: () => void;
|
|
34
|
+
/** Satellites-facettes sortis (fin d'animation) : les bulles et le souffle
|
|
35
|
+
* peuvent s'y accrocher. */
|
|
36
|
+
onSatellitesShown: () => void;
|
|
37
|
+
/** Satellites-facettes rentrés : leurs bulles rentrent avec eux. */
|
|
38
|
+
onSatellitesHidden: () => void;
|
|
39
|
+
onIdleViewChange?: (view: IdleView) => void;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Sous-états Idle « facettes » et « tab » : les arcs de bordure rentrent
|
|
43
|
+
* sous l'illustration, et chaque facette en ressort sous la forme d'un
|
|
44
|
+
* satellite montrant son propre yin/yang, dimensionné selon son poids.
|
|
45
|
+
* - « facettes » : à l'angle du milieu de son arc ;
|
|
46
|
+
* - « tab » : dans une grille régulière (voir idleTabLayout), l'illustration
|
|
47
|
+
* réduite au centre, l'image de la facette en fond de sa case et les
|
|
48
|
+
* facettes d'une même notion parente regroupées (IdleTabGridDrawer).
|
|
49
|
+
*
|
|
50
|
+
* Les satellites sortent toujours à leur place radiale ; « tab » les y
|
|
51
|
+
* reprend pour les faire glisser jusqu'à leur case (idleTabMorph), et
|
|
52
|
+
* inversement — la grille n'est qu'une transformation posée sur eux.
|
|
53
|
+
*
|
|
54
|
+
* Les satellites-facettes vivent à part des satellites de cutting d'une
|
|
55
|
+
* Facette (childControllers) : ni champ de force, ni menu d'action, ni
|
|
56
|
+
* orbite ne les concernent. Les transitions sont sérialisées — chaque étape
|
|
57
|
+
* relit l'état voulu au moment de s'exécuter, de sorte que des bascules
|
|
58
|
+
* rapprochées convergent vers le dernier état demandé sans se chevaucher.
|
|
59
|
+
*/
|
|
60
|
+
export declare class IdleFacettesController {
|
|
61
|
+
private deps;
|
|
62
|
+
private satellites;
|
|
63
|
+
private satelliteByComponentId;
|
|
64
|
+
/** Disposition des satellites-facettes actuellement sortis (null : aucun). */
|
|
65
|
+
private shownLayout;
|
|
66
|
+
/** Grille en place (sous-état « tab ») et échelle du motif à rétablir en
|
|
67
|
+
* revenant à la disposition radiale. */
|
|
68
|
+
private tab;
|
|
69
|
+
/** Groupe enveloppe de chaque satellite-facette (porte la grille). */
|
|
70
|
+
private wrappers;
|
|
71
|
+
/** Position et facteur d'échelle posés par la grille, par satellite. */
|
|
72
|
+
private tabPlacement;
|
|
73
|
+
private readonly tabGrid;
|
|
74
|
+
private tabHooks;
|
|
75
|
+
/** Vrai une fois les satellites-facettes arrivés à leur place (fin de
|
|
76
|
+
* l'animation de sortie) : les bulles n'ont de point d'ancrage qu'alors. */
|
|
77
|
+
private settled;
|
|
78
|
+
private queue;
|
|
79
|
+
private escapeListener;
|
|
80
|
+
/** Modulation de la signature par un contact (OBS-UI-01), voir
|
|
81
|
+
* setModulation ; null : chaque satellite montre son propre modèle. */
|
|
82
|
+
private modulation;
|
|
83
|
+
private modulationOptions;
|
|
84
|
+
/** Géométrie radiale de l'anneau, calculée à la sortie sur les poids du
|
|
85
|
+
* MODÈLE (O_f d'une signature) : la modulation change les tailles,
|
|
86
|
+
* jamais les places ni l'échelle. */
|
|
87
|
+
private ring;
|
|
88
|
+
/** Par satellite : clé de son affichage, son diamètre au poids du modèle
|
|
89
|
+
* et son diamètre réel (modulé). */
|
|
90
|
+
private displays;
|
|
91
|
+
/** Fantôme de signature de chaque satellite modulé (dans son enveloppe). */
|
|
92
|
+
private ghosts;
|
|
93
|
+
/** Détruit : les transitions encore en file n'ont plus rien à faire (sans
|
|
94
|
+
* quoi un diagramme démonté puis remonté dans le même conteneur — double
|
|
95
|
+
* montage d'un hôte React en développement — y recevait les satellites
|
|
96
|
+
* du premier, sortis après coup). */
|
|
97
|
+
private destroyed;
|
|
98
|
+
constructor(deps: IdleFacettesControllerDeps);
|
|
99
|
+
setTabHooks(hooks: IdleTabHooks | null): void;
|
|
100
|
+
getView(): IdleView;
|
|
101
|
+
/** Vrai dès qu'un sous-état à satellites-facettes (« facettes » ou
|
|
102
|
+
* « tab ») est l'état visé en Idle (arcs repliés ou en train de l'être). */
|
|
103
|
+
isActive(): boolean;
|
|
104
|
+
setView(requested: IdleView): Promise<void>;
|
|
105
|
+
/** Centre et rayon du satellite-facette d'une facette, une fois sorti. */
|
|
106
|
+
getSatelliteAnchor(componentId: string): {
|
|
107
|
+
center: {
|
|
108
|
+
x: number;
|
|
109
|
+
y: number;
|
|
110
|
+
};
|
|
111
|
+
radius: number;
|
|
112
|
+
} | null;
|
|
113
|
+
toggleView(): Promise<void>;
|
|
114
|
+
/** Aligne l'affichage sur l'état voulu (Idle + sous-état). À appeler à
|
|
115
|
+
* chaque entrée/sortie d'Idle. */
|
|
116
|
+
sync(): Promise<void>;
|
|
117
|
+
private isIdle;
|
|
118
|
+
/** Vrai pour une Cause sans score (signature d'obstacle). */
|
|
119
|
+
private isScorelessModel;
|
|
120
|
+
/**
|
|
121
|
+
* Superpose à la signature la lecture d'un contact (OBS-UI-01) — ou la
|
|
122
|
+
* retire (`null`). Chaque satellite-facette concerné prend le diamètre de
|
|
123
|
+
* W_f et la chance Q_f, à partir de sa taille courante (animation de
|
|
124
|
+
* `durationMs`) ; un fantôme garde le diamètre du poids du modèle (O_f).
|
|
125
|
+
* Les places et l'échelle restent celles du modèle : revenir à la
|
|
126
|
+
* signature puis réappliquer le même contact redonne exactement le même
|
|
127
|
+
* dessin. Appliquée en file avec les bascules de sous-état ; hors
|
|
128
|
+
* « facettes »/« tab », elle est mémorisée pour la prochaine sortie.
|
|
129
|
+
*/
|
|
130
|
+
setModulation(modulation: FacetModulation | null, options?: FacetModulationOptions): Promise<void>;
|
|
131
|
+
private applyModulation;
|
|
132
|
+
private displayOf;
|
|
133
|
+
private wantedLayout;
|
|
134
|
+
private applyDesiredState;
|
|
135
|
+
/** Arcs repliés sous l'illustration, puis satellites jaillissant du centre
|
|
136
|
+
* jusqu'à leur place radiale. */
|
|
137
|
+
private show;
|
|
138
|
+
/** Satellites rentrant au centre, puis arcs ressortant jusqu'au bord. */
|
|
139
|
+
private hide;
|
|
140
|
+
/** Les satellites glissent de leur place radiale à leur case ; dans le même
|
|
141
|
+
* mouvement, l'illustration rapetisse, l'anneau d'images s'efface (chaque
|
|
142
|
+
* case porte la sienne) et la grille apparaît. */
|
|
143
|
+
private morphToTab;
|
|
144
|
+
/** Mouvement inverse : chaque satellite regagne sa place radiale. */
|
|
145
|
+
private morphToRadial;
|
|
146
|
+
private morph;
|
|
147
|
+
private patternCenter;
|
|
148
|
+
/** Place radiale d'un satellite, dans le repère du motif. */
|
|
149
|
+
private radialPlace;
|
|
150
|
+
/** Satellites à leur place : les bulles peuvent s'y accrocher. */
|
|
151
|
+
private settle;
|
|
152
|
+
/** Satellites en mouvement : leurs bulles rentrent. */
|
|
153
|
+
private unsettle;
|
|
154
|
+
/** Mise en page de la grille, dans le repère du SVG : sur toute la place
|
|
155
|
+
* que le conteneur du diagramme offre autour de l'illustration (le SVG
|
|
156
|
+
* déborde visiblement), au moins sur le carré du SVG. */
|
|
157
|
+
private computeTabLayout;
|
|
158
|
+
/** Plus grand rectangle centré sur l'illustration qui tienne dans le
|
|
159
|
+
* conteneur du SVG, padding exclu, en unités du SVG (le conteneur peut
|
|
160
|
+
* être mis à l'échelle par l'hôte : on ramène ses dimensions à celles du
|
|
161
|
+
* SVG). */
|
|
162
|
+
private tabArea;
|
|
163
|
+
private fadeImageRing;
|
|
164
|
+
/** Ratio de taille de chaque satellite-facette : sur le poids de sa
|
|
165
|
+
* facette (C_f), ramené à l'échelle d'un satellite [0, WEIGHT_MAX] — tel
|
|
166
|
+
* quel en règle `mean`, divisé par le nombre de satellites en règle `sum`
|
|
167
|
+
* — pour la même règle de taille que les satellites d'une Facette. */
|
|
168
|
+
private computeSizeRatios;
|
|
169
|
+
private createSatellites;
|
|
170
|
+
/** Angles et resserrement de l'anneau, sur les poids du modèle. */
|
|
171
|
+
private computeRing;
|
|
172
|
+
/** Crée le satellite-facette d'une composante, à sa place dans l'anneau,
|
|
173
|
+
* selon son affichage (ordinaire, signature, modulé). */
|
|
174
|
+
private createSatellite;
|
|
175
|
+
/**
|
|
176
|
+
* Remplace un satellite-facette par celui de son nouvel affichage, SUR
|
|
177
|
+
* PLACE : même enveloppe de grille, même centre. Le nouveau part de la
|
|
178
|
+
* taille de l'ancien et gagne la sienne (O_f → W_f, ou retour) pendant
|
|
179
|
+
* que l'ancien s'efface ; sans durée, d'un coup.
|
|
180
|
+
*/
|
|
181
|
+
private replaceSatellite;
|
|
182
|
+
/** Fantôme de signature d'un satellite modulé plus petit que son poids
|
|
183
|
+
* de modèle : contour au diamètre de O_f, dans son enveloppe (il suit la
|
|
184
|
+
* grille). Retiré sinon. */
|
|
185
|
+
private refreshGhost;
|
|
186
|
+
/** Glisse un groupe enveloppe entre le satellite et le groupe des enfants
|
|
187
|
+
* du motif : il porte la transformation de la grille, sans interférer
|
|
188
|
+
* avec celles que d'autres posent sur le satellite lui-même. */
|
|
189
|
+
private wrap;
|
|
190
|
+
private attachClickHandler;
|
|
191
|
+
/** Double-clic. Le sous-état « facettes » reste mémorisé : refermer la
|
|
192
|
+
* Facette y ramène.
|
|
193
|
+
* On replie d'abord les satellites-facettes et on redéploie les arcs (la
|
|
194
|
+
* Facette met en valeur l'arc actif), puis on ouvre la Facette. */
|
|
195
|
+
private openFacette;
|
|
196
|
+
/** Détache les satellites-facettes courants (pour les faire rentrer puis
|
|
197
|
+
* les détruire) et prévient que leurs bulles doivent rentrer avec eux. */
|
|
198
|
+
private takeSatellites;
|
|
199
|
+
/** Fin de vie : satellites-facettes détruits sur place (sans animation de
|
|
200
|
+
* rentrée), grille retirée, écouteur Échap détaché. */
|
|
201
|
+
destroy(): void;
|
|
202
|
+
private destroySatellites;
|
|
203
|
+
private attachEscapeListener;
|
|
204
|
+
private detachEscapeListener;
|
|
205
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { YinYangComponentNode } from "../../../interfaces/IYinYangInternalModel";
|
|
2
|
+
/**
|
|
3
|
+
* MODULATION d'une signature par un contact (OBS-UI-01) : pour chaque
|
|
4
|
+
* facette (id de composante), le poids W_f que la signature prend face à ce
|
|
5
|
+
* contact (0–10) et la qualité Q_f du contact (0–100), sa chance de
|
|
6
|
+
* réussir cette facette. L'hôte fournit les valeurs : la lib ne fait que
|
|
7
|
+
* les montrer (diamètre sur W_f, pourcentage Q_f, fantôme sur le poids du
|
|
8
|
+
* modèle, O_f).
|
|
9
|
+
*/
|
|
10
|
+
export type FacetModulation = {
|
|
11
|
+
weights: Record<string, number>;
|
|
12
|
+
scores: Record<string, number>;
|
|
13
|
+
};
|
|
14
|
+
export type FacetModulationOptions = {
|
|
15
|
+
/** Durée de l'animation des diamètres (ms) ; 0 : immédiat (défaut). */
|
|
16
|
+
durationMs?: number;
|
|
17
|
+
/** Vague entre satellite et fantôme ; à couper en mouvement réduit.
|
|
18
|
+
* Défaut : false. */
|
|
19
|
+
ghostWaves?: boolean;
|
|
20
|
+
};
|
|
21
|
+
/** Ce qu'un satellite-facette montre. */
|
|
22
|
+
export type FacetDisplay =
|
|
23
|
+
/** Ses propres score et poids (diagramme ordinaire). */
|
|
24
|
+
{
|
|
25
|
+
kind: "ordinary";
|
|
26
|
+
}
|
|
27
|
+
/** Poids seul, sans score (signature d'obstacle). */
|
|
28
|
+
| {
|
|
29
|
+
kind: "signature";
|
|
30
|
+
}
|
|
31
|
+
/** Poids modulé W_f et qualité Q_f d'un contact. */
|
|
32
|
+
| {
|
|
33
|
+
kind: "modulated";
|
|
34
|
+
weight: number;
|
|
35
|
+
quality: number;
|
|
36
|
+
};
|
|
37
|
+
/** Poids d'une facette du modèle (O_f pour une signature, C_f sinon). */
|
|
38
|
+
export declare function componentWeight(component: YinYangComponentNode): number;
|
|
39
|
+
/**
|
|
40
|
+
* Affichage d'une facette. Une facette sans exigence (poids nul) d'une
|
|
41
|
+
* signature reste sans score même modulée : W_f y est nul, elle n'entre
|
|
42
|
+
* dans aucun tirage — lui montrer une chance serait faux.
|
|
43
|
+
*/
|
|
44
|
+
export declare function resolveFacetDisplay(component: YinYangComponentNode, scoreless: boolean, modulation: FacetModulation | null): FacetDisplay;
|
|
45
|
+
/** Clé d'égalité d'un affichage (un satellite inchangé n'est pas refait). */
|
|
46
|
+
export declare function facetDisplayKey(display: FacetDisplay): string;
|
|
47
|
+
/** La facette portant la qualité Q_f d'un contact : tous ses satellites
|
|
48
|
+
* à la même tension, si bien que sa qualité (moyenne pondérée) vaut Q_f. */
|
|
49
|
+
export declare function withQuality(component: YinYangComponentNode, quality: number): YinYangComponentNode;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export type IdleTabFacet = {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
orientation: "yin" | "yang";
|
|
5
|
+
notion?: {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
/** Ratio de taille du satellite (même calcul qu'en Idle « facettes »). */
|
|
10
|
+
sizeRatio: number;
|
|
11
|
+
};
|
|
12
|
+
export type IdleTabRect = {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
};
|
|
18
|
+
export type IdleTabCell = IdleTabRect & {
|
|
19
|
+
facetId: string;
|
|
20
|
+
label: string;
|
|
21
|
+
orientation: "yin" | "yang";
|
|
22
|
+
/** Centre du satellite. */
|
|
23
|
+
satelliteCenter: {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
};
|
|
27
|
+
/** Diamètre du satellite (minEdge, en pixels). */
|
|
28
|
+
satelliteDiameter: number;
|
|
29
|
+
/** Ligne de base du libellé de la facette. */
|
|
30
|
+
labelAnchor: {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
};
|
|
34
|
+
/** La pastille de notion du groupe se pose sur le bord bas (sinon haut) :
|
|
35
|
+
* le libellé de la facette s'écarte alors vers l'intérieur. */
|
|
36
|
+
legendBottom: boolean;
|
|
37
|
+
/** La case borde-t-elle son groupe en haut / en bas (coins arrondis,
|
|
38
|
+
* libellé de la notion posé sur ce bord) ? */
|
|
39
|
+
groupEdges: {
|
|
40
|
+
top: boolean;
|
|
41
|
+
bottom: boolean;
|
|
42
|
+
};
|
|
43
|
+
/** Notion parente du groupe de la case, si elle en a une. */
|
|
44
|
+
notion?: {
|
|
45
|
+
id: string;
|
|
46
|
+
name: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export type IdleTabGroup = IdleTabRect & {
|
|
50
|
+
facetIds: string[];
|
|
51
|
+
/** Notion parente : son libellé se pose sur la bordure du groupe. */
|
|
52
|
+
notion?: {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
};
|
|
56
|
+
/** Bordure qui porte le libellé de la notion (côté extérieur). */
|
|
57
|
+
legendSide: "top" | "bottom";
|
|
58
|
+
};
|
|
59
|
+
export type IdleTabLayout = {
|
|
60
|
+
columns: number;
|
|
61
|
+
rows: number;
|
|
62
|
+
cells: IdleTabCell[];
|
|
63
|
+
groups: IdleTabGroup[];
|
|
64
|
+
center: {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
};
|
|
68
|
+
/** Rayon de l'illustration centrale réduite. */
|
|
69
|
+
centerRadius: number;
|
|
70
|
+
/** Taille de police des libellés de facette (px). */
|
|
71
|
+
labelFontSize: number;
|
|
72
|
+
};
|
|
73
|
+
export type IdleTabLayoutOptions = {
|
|
74
|
+
/** Coin haut-gauche de l'espace disponible (défaut : 0, 0). */
|
|
75
|
+
x?: number;
|
|
76
|
+
y?: number;
|
|
77
|
+
width: number;
|
|
78
|
+
height: number;
|
|
79
|
+
/** Marge autour de la grille. */
|
|
80
|
+
padding?: number;
|
|
81
|
+
/** Écart entre deux groupes voisins. */
|
|
82
|
+
gutter?: number;
|
|
83
|
+
};
|
|
84
|
+
type Unit = {
|
|
85
|
+
facets: IdleTabFacet[];
|
|
86
|
+
notion?: {
|
|
87
|
+
id: string;
|
|
88
|
+
name: string;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
/** Facettes d'une même notion regroupées (ordre de première apparition),
|
|
92
|
+
* yin avant yang au sein d'un groupe. */
|
|
93
|
+
export declare function buildIdleTabUnits(facets: readonly IdleTabFacet[]): Unit[];
|
|
94
|
+
export declare function computeIdleTabLayout(facets: readonly IdleTabFacet[], options: IdleTabLayoutOptions): IdleTabLayout;
|
|
95
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Centre et diamètre d'un satellite. */
|
|
2
|
+
export type MorphPoint = {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
d: number;
|
|
6
|
+
};
|
|
7
|
+
export type MorphItem = {
|
|
8
|
+
/** Groupe enveloppe du satellite, qui porte la transformation. */
|
|
9
|
+
wrapper: SVGGElement;
|
|
10
|
+
/** Place radiale du satellite dans le repère du motif (avant réduction). */
|
|
11
|
+
base: MorphPoint;
|
|
12
|
+
/** Départ et arrivée, en pixels du SVG. */
|
|
13
|
+
from: MorphPoint;
|
|
14
|
+
to: MorphPoint;
|
|
15
|
+
};
|
|
16
|
+
type Center = {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
};
|
|
20
|
+
/** Place à l'écran (pixels du SVG) d'un point du motif réduit à `scale`. */
|
|
21
|
+
export declare function toScreen(point: MorphPoint, scale: number, center: Center): MorphPoint;
|
|
22
|
+
/** Transformation de l'enveloppe qui amène le satellite de sa place
|
|
23
|
+
* radiale `base` à `screen`, le motif étant réduit à `scale`. */
|
|
24
|
+
export declare function wrapperTransform(base: MorphPoint, screen: MorphPoint, scale: number, center: Center): {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
k: number;
|
|
28
|
+
transform: string;
|
|
29
|
+
};
|
|
30
|
+
/** Point entre `from` (t = 0) et `to` (t = 1), sur une trajectoire polaire
|
|
31
|
+
* autour de `center`. */
|
|
32
|
+
export declare function polarLerp(from: MorphPoint, to: MorphPoint, t: number, center: Center): MorphPoint;
|
|
33
|
+
/** Joue la bascule : échelle du motif de `fromScale` à `toScale` (posée par
|
|
34
|
+
* `applyScale`), chaque satellite de `from` à `to`. */
|
|
35
|
+
export declare function morphSatellites(options: {
|
|
36
|
+
/** Nœud qui porte la transition (le globalGroup du motif). */
|
|
37
|
+
node: SVGGElement;
|
|
38
|
+
center: Center;
|
|
39
|
+
fromScale: number;
|
|
40
|
+
toScale: number;
|
|
41
|
+
items: readonly MorphItem[];
|
|
42
|
+
durationMs: number;
|
|
43
|
+
applyScale: (scale: number) => void;
|
|
44
|
+
}): Promise<void>;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IYinYangController } from "../../../interfaces/IYinYangController";
|
|
2
|
+
/**
|
|
3
|
+
* Apparence d'un satellite-facette SANS SCORE (signature d'obstacle,
|
|
4
|
+
* OBS-UI-01) : un disque neutre, liseré de la couleur de sa catégorie, et
|
|
5
|
+
* sa pastille de poids — ni lobes yin/yang ni pourcentage, puisqu'un
|
|
6
|
+
* obstacle n'a pas de qualité. Le marquage `data-scoreless` tait le reste
|
|
7
|
+
* (styles/signature.css) ; le disque est posé dans le cœur, qui porte
|
|
8
|
+
* aussi l'animation de sortie du satellite.
|
|
9
|
+
*/
|
|
10
|
+
export declare function applyScorelessLook(satellite: IYinYangController): void;
|
|
@@ -28,6 +28,18 @@ type EventFieldLifecycleControllerDeps = {
|
|
|
28
28
|
center: Point | null;
|
|
29
29
|
radius: number;
|
|
30
30
|
};
|
|
31
|
+
/** Vrai en Idle « facettes » : le souffle relie alors le satellite-facette
|
|
32
|
+
* d'origine aux autres satellites-facettes atteints — pas de satellite de
|
|
33
|
+
* cutting à viser, et getComponentBorderTargetPoint résout chaque facette
|
|
34
|
+
* vers son satellite-facette. */
|
|
35
|
+
isIdleFacettesField: () => boolean;
|
|
36
|
+
/** Vrai pendant l'animation de changement de facette (clic sur un arc,
|
|
37
|
+
* navigation RECHERCHE ou pile) — voir refreshTargets. */
|
|
38
|
+
isComponentSwitching: () => boolean;
|
|
39
|
+
/** Vrai quand le champ est piloté par les événements cochés de la pile
|
|
40
|
+
* (mode STACK, aucun aperçu) : seuls les satellites réellement amplifiés
|
|
41
|
+
* sont alors visés (voir buildEventFieldTargets, stackEffects). */
|
|
42
|
+
isStackDrivenField: () => boolean;
|
|
31
43
|
};
|
|
32
44
|
/**
|
|
33
45
|
* Cycle de vie du "Champ d'événement" (souffle cœur → satellites de
|
|
@@ -99,6 +111,8 @@ export declare class EventFieldLifecycleController {
|
|
|
99
111
|
* frame par startEventFieldAnimation (orbite + pulsation). */
|
|
100
112
|
private updateEventFieldVisual;
|
|
101
113
|
private startEventFieldAnimation;
|
|
114
|
+
/** Fin de vie : coupe la boucle du champ d'événement. */
|
|
115
|
+
destroy(): void;
|
|
102
116
|
private stopEventFieldAnimation;
|
|
103
117
|
}
|
|
104
118
|
export {};
|
|
@@ -7,8 +7,8 @@ export type Point = {
|
|
|
7
7
|
* ce renderer ne fait que dessiner. */
|
|
8
8
|
export type EventFieldRenderSegment = {
|
|
9
9
|
end: Point;
|
|
10
|
-
/**
|
|
11
|
-
|
|
10
|
+
/** Intensité positionnelle commune aux cinq signatures — épaisseur du souffle. */
|
|
11
|
+
intensity: number;
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
14
|
* Chorégraphie du "Champ d'événement" : un souffle annulaire. Le cœur du
|
|
@@ -34,7 +34,7 @@ export declare class EventFieldRenderer {
|
|
|
34
34
|
private coreHalo;
|
|
35
35
|
/** setTimeout id du fondu de sortie en cours, ou null — voir hide(). */
|
|
36
36
|
private _hideTimeoutId;
|
|
37
|
-
/**
|
|
37
|
+
/** Id frameScheduler de la rétraction géométrique en cours — voir retractGeometry(). */
|
|
38
38
|
private _retractFrameId;
|
|
39
39
|
hasActiveGroup(): boolean;
|
|
40
40
|
ensureElements(params: {
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
type Point = {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
};
|
|
5
|
+
export type StopData = Array<{
|
|
6
|
+
color: string;
|
|
7
|
+
opacity: number;
|
|
8
|
+
}>;
|
|
9
|
+
/** Un faisceau, tel que peint sur une image (repère du globalGroup). */
|
|
10
|
+
export type ForceFieldStroke = {
|
|
11
|
+
start: Point;
|
|
12
|
+
end: Point;
|
|
13
|
+
/** Extrémités des dégradés (énergie, comète, cœur). */
|
|
14
|
+
tail: Point;
|
|
15
|
+
head: Point;
|
|
16
|
+
/** Atténuation du faisceau (emphase de l'action en focus), 0..1. */
|
|
17
|
+
emphasis: number;
|
|
18
|
+
glow: {
|
|
19
|
+
color: string;
|
|
20
|
+
alpha: number;
|
|
21
|
+
baseWidth: number;
|
|
22
|
+
};
|
|
23
|
+
/** Cône d'aura : trapèze sur l'axe start → end, demi-largeurs aux deux bouts. */
|
|
24
|
+
cone: {
|
|
25
|
+
sourceHalf: number;
|
|
26
|
+
targetHalf: number;
|
|
27
|
+
fill: string;
|
|
28
|
+
opacity: number;
|
|
29
|
+
};
|
|
30
|
+
energy: {
|
|
31
|
+
stops: StopData;
|
|
32
|
+
width: number;
|
|
33
|
+
opacity: number;
|
|
34
|
+
dashOffset: number;
|
|
35
|
+
};
|
|
36
|
+
flow: {
|
|
37
|
+
width: number;
|
|
38
|
+
opacity: number;
|
|
39
|
+
dashOffset: number;
|
|
40
|
+
};
|
|
41
|
+
core: {
|
|
42
|
+
stops: StopData;
|
|
43
|
+
width: number;
|
|
44
|
+
opacity: number;
|
|
45
|
+
};
|
|
46
|
+
port: {
|
|
47
|
+
r: number;
|
|
48
|
+
width: number;
|
|
49
|
+
color: string;
|
|
50
|
+
opacity: number;
|
|
51
|
+
};
|
|
52
|
+
headAura: {
|
|
53
|
+
r: number;
|
|
54
|
+
fill: string;
|
|
55
|
+
opacity: number;
|
|
56
|
+
};
|
|
57
|
+
headCore: {
|
|
58
|
+
r: number;
|
|
59
|
+
opacity: number;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
export declare const COMET_PERIOD: number;
|
|
63
|
+
export declare class ForceFieldCanvasPainter {
|
|
64
|
+
readonly globalGroup: SVGGElement;
|
|
65
|
+
private readonly host;
|
|
66
|
+
private readonly canvas;
|
|
67
|
+
private readonly ctx;
|
|
68
|
+
private readonly resizeObserver;
|
|
69
|
+
/** Coin haut-gauche de la zone peinte, en unités du globalGroup. */
|
|
70
|
+
private originX;
|
|
71
|
+
private originY;
|
|
72
|
+
/** Pixels du canvas par unité du globalGroup. */
|
|
73
|
+
private pxPerUnit;
|
|
74
|
+
/** Repère pour lequel la zone a été calée ; null = à recaler. */
|
|
75
|
+
private laidOutKey;
|
|
76
|
+
private readonly glowLayersByAlpha;
|
|
77
|
+
constructor(globalGroup: SVGGElement);
|
|
78
|
+
/** Repasse au-dessus des autres enfants du globalGroup. */
|
|
79
|
+
raise(): void;
|
|
80
|
+
/** Opacité de toute la couche, avec une transition CSS éventuelle. */
|
|
81
|
+
setOpacity(value: string, transition?: string): void;
|
|
82
|
+
remove(): void;
|
|
83
|
+
paint(strokes: readonly ForceFieldStroke[]): void;
|
|
84
|
+
private paintStroke;
|
|
85
|
+
/**
|
|
86
|
+
* Empreinte du repère de la zone peinte : transforms du globalGroup et de
|
|
87
|
+
* ses ancêtres jusqu'au <svg>, viewBox, densité d'écran. Quelques
|
|
88
|
+
* getAttribute par image, sans layout forcé ; la taille du <svg> est
|
|
89
|
+
* suivie à part (ResizeObserver).
|
|
90
|
+
*/
|
|
91
|
+
private layoutKey;
|
|
92
|
+
private ensureLayout;
|
|
93
|
+
/** Cale la zone peinte sur le <svg> visible. Faux si pas encore mesurable. */
|
|
94
|
+
private layout;
|
|
95
|
+
private glowLayers;
|
|
96
|
+
private line;
|
|
97
|
+
private gradient;
|
|
98
|
+
}
|
|
99
|
+
export {};
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import type { ActionStackItem } from "../action-stack/ActionStackState";
|
|
1
2
|
import { YinYangInternalModel } from "../../../interfaces/IYinYangInternalModel";
|
|
2
3
|
import type { CompiledPropagationGraph } from "../../../interfaces/IPropagationGraph";
|
|
3
4
|
import { ChildrenOrbitEntry } from "../utils/childrenOrbit";
|
|
4
5
|
import { ForceFieldLink, ForceFieldLinkDetail } from "./types";
|
|
5
6
|
export declare class ForceFieldComputationService {
|
|
7
|
+
private readonly getEventContextItems;
|
|
8
|
+
constructor(getEventContextItems?: () => ActionStackItem[]);
|
|
9
|
+
eventContextCacheKey(): string;
|
|
10
|
+
private resolveDetails;
|
|
6
11
|
build(params: {
|
|
7
12
|
orbitData: ChildrenOrbitEntry[];
|
|
8
13
|
sourceChildIndex: number;
|
|
@@ -15,6 +20,8 @@ export declare class ForceFieldComputationService {
|
|
|
15
20
|
allComponents: YinYangInternalModel["components"] | undefined;
|
|
16
21
|
actionDelta: number;
|
|
17
22
|
propagationGraph: CompiledPropagationGraph;
|
|
23
|
+
eventContextItems?: ActionStackItem[];
|
|
24
|
+
actionItem?: ActionStackItem;
|
|
18
25
|
}): {
|
|
19
26
|
links: ForceFieldLink[];
|
|
20
27
|
allLinkDetails: ForceFieldLinkDetail[];
|
|
@@ -31,6 +38,8 @@ export declare class ForceFieldComputationService {
|
|
|
31
38
|
allComponents: YinYangInternalModel["components"] | undefined;
|
|
32
39
|
actionDelta: number;
|
|
33
40
|
propagationGraph: CompiledPropagationGraph;
|
|
41
|
+
eventContextItems?: ActionStackItem[];
|
|
42
|
+
actionItem?: ActionStackItem;
|
|
34
43
|
}): {
|
|
35
44
|
links: ForceFieldLink[];
|
|
36
45
|
allLinkDetails: ForceFieldLinkDetail[];
|