@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
|
@@ -3,16 +3,31 @@ import { IYinYangView } from "../../../interfaces/IYinYangView";
|
|
|
3
3
|
import { type ActionDefinition } from "../../../data/yasuni_actions";
|
|
4
4
|
import { ChildrenOrbitEntry } from "../utils/childrenOrbit";
|
|
5
5
|
import { type Point } from "./radialItemMenu";
|
|
6
|
+
/** Mise en scène d'une bulle détachée : "focus" = l'action regardée (style
|
|
7
|
+
* ambre, faisceau pulsé) ; "plain" = pleine, style ordinaire (aucune action
|
|
8
|
+
* en focus) ; "dimmed" = translucide (une autre action est en focus). */
|
|
9
|
+
export type DetachedBubbleEmphasis = "focus" | "plain" | "dimmed";
|
|
10
|
+
export type DetachedBubble = {
|
|
11
|
+
/** Identité stable de la bulle (id de l'item de pile, par exemple) : une
|
|
12
|
+
* bulle qui ne change que d'emphase est restylée, pas rejouée. */
|
|
13
|
+
key: string;
|
|
14
|
+
/** Satellite source porteur de la bulle. */
|
|
15
|
+
sourceChildKey: string;
|
|
16
|
+
action: ActionDefinition;
|
|
17
|
+
/** Actions du menu RECHERCHE de la source dans le mode de l'action : la
|
|
18
|
+
* bulle reprend sa place (son angle) dans cet éventail, pour apparaître
|
|
19
|
+
* exactement où l'utilisateur l'a trouvée. */
|
|
20
|
+
menuActions: ActionDefinition[];
|
|
21
|
+
emphasis: DetachedBubbleEmphasis;
|
|
22
|
+
};
|
|
6
23
|
type DetachedBubbleContext = {
|
|
7
24
|
orbitData: ChildrenOrbitEntry[];
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
action: ActionDefinition | null;
|
|
25
|
+
/** Bulles à afficher — [] les replie toutes. */
|
|
26
|
+
bubbles: DetachedBubble[];
|
|
11
27
|
childActionMenuItemDistance: number;
|
|
12
28
|
childActionMenuItemScale: number;
|
|
13
29
|
childActionIconFontScale: number;
|
|
14
|
-
|
|
15
|
-
onClick: (sourceChildKey: string, actionId: string) => void;
|
|
30
|
+
onClick: (bubble: DetachedBubble) => void;
|
|
16
31
|
};
|
|
17
32
|
type ChildActionMenuContext = {
|
|
18
33
|
orbitData: ChildrenOrbitEntry[];
|
|
@@ -23,10 +38,10 @@ type ChildActionMenuContext = {
|
|
|
23
38
|
childActionIconFontScale: number;
|
|
24
39
|
/** Actions filtrées pour le cutting actif (depuis yasuniCause + actionMap). */
|
|
25
40
|
actionsForActiveChild: ActionDefinition[];
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
|
|
41
|
+
/** RECHERCHE multi-blocs : un panneau verrouillé fige l'action source.
|
|
42
|
+
* Les autres bulles s'estompent, et tout clic passe par ce refus, qui
|
|
43
|
+
* peut rejouer le clic (`retry`) une fois déverrouillé. null sinon. */
|
|
44
|
+
onBlockedActionClick: ((retry: () => void) => void) | null;
|
|
30
45
|
};
|
|
31
46
|
export declare class ChildActionMenuController {
|
|
32
47
|
private readonly view;
|
|
@@ -34,6 +49,9 @@ export declare class ChildActionMenuController {
|
|
|
34
49
|
private readonly refreshActionStackVisual;
|
|
35
50
|
/** Aperçu — clic sur une action : affiche sa carte, ne joue rien. */
|
|
36
51
|
private readonly activateActionFromChild;
|
|
52
|
+
/** Re-clic sur l'action déjà active : la désélectionne et replie ses
|
|
53
|
+
* champs de force, comme un re-clic dans la hiérarchie RECHERCHE. */
|
|
54
|
+
private readonly deactivateActionFromChild;
|
|
37
55
|
/** Validation — dépôt d'une bulle glissée sur la pile : l'y ajoute. */
|
|
38
56
|
private readonly validateActionSelection;
|
|
39
57
|
/** Glisser une bulle vers une position précise de la pile — cœur partagé
|
|
@@ -46,7 +64,7 @@ export declare class ChildActionMenuController {
|
|
|
46
64
|
/** Groupe séparé pour les traits satellite → bulle, repositionné à chaque
|
|
47
65
|
* update() juste devant children-group (voir ensureLineLayer) pour
|
|
48
66
|
* qu'ils s'affichent derrière les satellites plutôt que par-dessus —
|
|
49
|
-
* même technique que
|
|
67
|
+
* même technique que KeyEventMenuController.coreEventLineLayer. */
|
|
50
68
|
private childActionLineLayer;
|
|
51
69
|
private lastChildActionMenuSourceCenter;
|
|
52
70
|
/** Poignée d'annulation du glisser-déposer en cours (voir startActionDrag),
|
|
@@ -59,21 +77,28 @@ export declare class ChildActionMenuController {
|
|
|
59
77
|
* le contexte courant) et rejoué au survol : rallumer une impulsion ne
|
|
60
78
|
* doit pas relancer la chorégraphie d'ouverture. */
|
|
61
79
|
private linkStyleGetter;
|
|
62
|
-
/**
|
|
63
|
-
*
|
|
64
|
-
private
|
|
80
|
+
/** Réglages de la dernière passe de rendu, pour retailler les icônes
|
|
81
|
+
* affichées quand une mesure abaisse le facteur admissible. */
|
|
82
|
+
private iconScaleSetting;
|
|
83
|
+
private iconActiveActionId;
|
|
65
84
|
private detachedGroup;
|
|
66
85
|
private detachedLineLayer;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
86
|
+
/** Bulles détachées affichées, par uniqueKey de position — relu pour faire
|
|
87
|
+
* rentrer une bulle sortante dans SON satellite source. */
|
|
88
|
+
private detachedMeta;
|
|
89
|
+
private detachedPositions;
|
|
90
|
+
/** Dernière mise en page rendue, relue par followOrbit. null : rien à
|
|
91
|
+
* suivre (menu fermé, ou bulles détachées repliées). */
|
|
92
|
+
private menuLayout;
|
|
93
|
+
private detachedContext;
|
|
94
|
+
/** Centre de la bulle détachée de clé `bubbleKey`, ou null si absente. */
|
|
95
|
+
getDetachedCenter(bubbleKey: string): Point | null;
|
|
74
96
|
constructor(view: IYinYangView, getChildRenderedCenter: (childController: IYinYangController) => Point | null, refreshActionStackVisual: () => void,
|
|
75
97
|
/** Aperçu — clic sur une action : affiche sa carte, ne joue rien. */
|
|
76
98
|
activateActionFromChild: (childController: IYinYangController, actionId: string, label?: string) => void,
|
|
99
|
+
/** Re-clic sur l'action déjà active : la désélectionne et replie ses
|
|
100
|
+
* champs de force, comme un re-clic dans la hiérarchie RECHERCHE. */
|
|
101
|
+
deactivateActionFromChild: (childController: IYinYangController, actionId: string) => void,
|
|
77
102
|
/** Validation — dépôt d'une bulle glissée sur la pile : l'y ajoute. */
|
|
78
103
|
validateActionSelection: (childController: IYinYangController, actionId: string, label: string, insertAtVisibleIndex?: number | null, entryOrigin?: Point) => void,
|
|
79
104
|
/** Glisser une bulle vers une position précise de la pile — cœur partagé
|
|
@@ -87,8 +112,8 @@ export declare class ChildActionMenuController {
|
|
|
87
112
|
setOnActionHover(cb: (actionId: string | null, activeChildKey: string) => void): void;
|
|
88
113
|
/**
|
|
89
114
|
* Applique un highlight de survol sur le cercle d'action identifié, ou le retire si null.
|
|
90
|
-
*
|
|
91
|
-
*
|
|
115
|
+
* Halo blanc à la place de la lueur de la bulle (voir setRadialItemHaloHighlight) :
|
|
116
|
+
* pas de filtre, la bulle suit l'orbite de son satellite.
|
|
92
117
|
*/
|
|
93
118
|
highlightActionById(actionId: string | null): void;
|
|
94
119
|
/** Restyle les seuls liens (impulsion allumée/éteinte), sans toucher à leur
|
|
@@ -96,8 +121,8 @@ export declare class ChildActionMenuController {
|
|
|
96
121
|
private setHoveredAction;
|
|
97
122
|
retractAndDispose(): void;
|
|
98
123
|
clearImmediately(): void;
|
|
99
|
-
/** Retire
|
|
100
|
-
* délai (fin d'une transition de facette). */
|
|
124
|
+
/** Retire les bulles détachées et leurs faisceaux, tout de suite (0) ou
|
|
125
|
+
* après un délai (fin d'une transition de facette). */
|
|
101
126
|
private disposeDetached;
|
|
102
127
|
/**
|
|
103
128
|
* Starts the fold-out animation on the visible action buttons, then removes
|
|
@@ -106,19 +131,36 @@ export declare class ChildActionMenuController {
|
|
|
106
131
|
* that follows is a no-op and won't cancel the in-flight transition.
|
|
107
132
|
*/
|
|
108
133
|
animateClose(): void;
|
|
109
|
-
/** Replie
|
|
134
|
+
/** Replie les bulles détachées (chorégraphie de fermeture), groupes
|
|
135
|
+
* conservés. */
|
|
110
136
|
private closeDetached;
|
|
111
137
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
138
|
+
* Bulles détachées : la seule bulle d'une action (pas ses sœurs), posée sur
|
|
139
|
+
* son satellite source avec son faisceau, hors de tout menu radial.
|
|
140
|
+
* - STACK : une par action activée de la pile — celle en focus en style
|
|
141
|
+
* « regardée », les autres translucides comme leurs champs de force,
|
|
142
|
+
* toutes pleines sans focus. Le champ de l'action en focus démarre à sa
|
|
143
|
+
* bulle.
|
|
144
|
+
* - RECHERCHE multi-blocs : celle de l'action source du panneau
|
|
145
|
+
* verrouillé, quand on consulte un autre satellite.
|
|
146
|
+
* Chaque bulle garde la place qu'elle occupe dans le menu RECHERCHE de
|
|
147
|
+
* sa source (voir DetachedBubble.menuActions) : deux actions d'un même
|
|
148
|
+
* satellite ne s'y chevauchent donc pas.
|
|
119
149
|
* Cluster indépendant du menu radial : update() n'en sait rien.
|
|
120
150
|
*/
|
|
121
151
|
updateDetached(context: DetachedBubbleContext): void;
|
|
152
|
+
/**
|
|
153
|
+
* Frame d'orbite : recale le menu radial et les bulles détachées déjà
|
|
154
|
+
* affichés sur la position courante de leur satellite, avec la mise en
|
|
155
|
+
* page de leur dernier rendu. Ni data join, ni transition, ni listeners :
|
|
156
|
+
* leur contenu ne change que par update() / updateDetached().
|
|
157
|
+
*/
|
|
158
|
+
followOrbit(orbitData: ChildrenOrbitEntry[]): void;
|
|
159
|
+
private computeDetachedLayout;
|
|
160
|
+
/** Retaille les icônes déjà affichées (menu et bulle détachée) sans
|
|
161
|
+
* repasser par update() : un simple satellite sélectionné, sans action
|
|
162
|
+
* active, ne déclencherait pas de rendu via le réglage du debug. */
|
|
163
|
+
private refitActionIcons;
|
|
122
164
|
private ensureDetachedGroups;
|
|
123
165
|
update(context: ChildActionMenuContext): void;
|
|
124
166
|
private ensureChildActionMenuGroup;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { IYinYangView } from "../../../interfaces/IYinYangView";
|
|
2
2
|
import { YinYangInternalModel } from "../../../interfaces/IYinYangInternalModel";
|
|
3
3
|
import { type KeyEventDefinition } from "../../../data/yasuni_key_events";
|
|
4
|
-
import {
|
|
5
|
-
import { CoreEventMenuController } from "./CoreEventMenuController";
|
|
4
|
+
import { KeyEventMenuController } from "./KeyEventMenuController";
|
|
6
5
|
import { ActionStackController } from "../action-stack/ActionStackController";
|
|
7
6
|
import { ForceFieldDetailsPanel } from "../force-field/ForceFieldDetailsPanel";
|
|
8
7
|
import { EventFieldRenderer } from "../force-field/EventFieldRenderer";
|
|
@@ -15,10 +14,8 @@ import { ActionStackManager } from "../action-stack/ActionStackManager";
|
|
|
15
14
|
export type KeyEventControllerDeps = {
|
|
16
15
|
actionStackController: ActionStackController;
|
|
17
16
|
actionStackManager: ActionStackManager;
|
|
18
|
-
animateChildrenHide: () => void;
|
|
19
|
-
buildChildrenOrbitData: () => ChildrenOrbitEntry[];
|
|
20
17
|
closeChildActionMenu: () => void;
|
|
21
|
-
|
|
18
|
+
keyEventMenuController: KeyEventMenuController;
|
|
22
19
|
eventFieldLifecycleController: EventFieldLifecycleController;
|
|
23
20
|
eventFieldRenderer: EventFieldRenderer;
|
|
24
21
|
forceFieldDetailsPanel: ForceFieldDetailsPanel;
|
|
@@ -27,52 +24,93 @@ export type KeyEventControllerDeps = {
|
|
|
27
24
|
y: number;
|
|
28
25
|
} | null;
|
|
29
26
|
getCurrentComponentOrUndefined: () => YinYangInternalModel["components"][number] | undefined;
|
|
27
|
+
/** Satellite-facette d'une facette en sous-état Idle « facettes » : centre
|
|
28
|
+
* rendu et rayon, ou null s'il n'est pas (encore) affiché. */
|
|
29
|
+
getFacetteSatelliteAnchor: (componentId: string) => {
|
|
30
|
+
center: {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
};
|
|
34
|
+
radius: number;
|
|
35
|
+
} | null;
|
|
36
|
+
/** Vrai quand le sous-état Idle « facettes » est affiché. */
|
|
37
|
+
isIdleFacettesActive: () => boolean;
|
|
38
|
+
/** Amène le diagramme en Idle « facettes » (referme la Facette ouverte,
|
|
39
|
+
* bascule le sous-état) ; résolu une fois les satellites-facettes sortis. */
|
|
40
|
+
showIdleFacettes: () => Promise<void>;
|
|
30
41
|
navigateToPrereqAction: (actionId: string) => void;
|
|
31
|
-
prepareForComponentSwitch: (targetComponentId: string) => void;
|
|
32
42
|
session: ControllerSession;
|
|
33
43
|
state: YinYangControllerState;
|
|
34
44
|
titlePresenter: ComponentTitlePresenter;
|
|
35
45
|
ui: ControllerUiCallbacks;
|
|
36
46
|
view: IYinYangView;
|
|
37
47
|
};
|
|
38
|
-
/** Événements Clés : menu radial
|
|
39
|
-
* d'événement et ajout à la pile. */
|
|
48
|
+
/** Événements Clés : menu radial des satellites-facettes, aperçu de carte,
|
|
49
|
+
* champ d'événement et ajout à la pile. */
|
|
40
50
|
export declare class KeyEventController {
|
|
41
51
|
private deps;
|
|
52
|
+
/** Aperçu effacé par le dernier clic sur un satellite-facette, avec
|
|
53
|
+
* l'instant de l'effacement — voir restorePreviewClearedByDoubleClick. */
|
|
54
|
+
private previewClearedBySwitch;
|
|
42
55
|
constructor(deps: KeyEventControllerDeps);
|
|
56
|
+
/** Facette dont les bulles d'Événements Clés sont déployées, ou null. */
|
|
57
|
+
getKeyEventMenuFacetteId(): string | null;
|
|
58
|
+
private notifyKeyEventMenuState;
|
|
59
|
+
/**
|
|
60
|
+
* Clic sur un satellite-facette (Idle « facettes ») : déploie ses bulles
|
|
61
|
+
* d'Événements Clés, ou les replie si elles l'étaient déjà — même règle
|
|
62
|
+
* que le clic sur un satellite de cutting pour ses boutons d'action. Un
|
|
63
|
+
* seul menu à la fois : ouvrir celui d'une facette replie celui d'une
|
|
64
|
+
* autre.
|
|
65
|
+
*/
|
|
66
|
+
toggleKeyEventMenu(componentId: string): void;
|
|
43
67
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* menu radial des Événements Clés de la facette active.
|
|
68
|
+
* Double-clic sur un satellite-facette (entrée dans sa Facette) : son
|
|
69
|
+
* premier clic a déjà basculé (ou replié) les bulles, effaçant au passage
|
|
70
|
+
* l'aperçu en cours — celui-là même dont le souffle doit se poursuivre
|
|
71
|
+
* dans la Facette. On le rétablit s'il vient d'être effacé.
|
|
49
72
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
73
|
+
restorePreviewClearedByDoubleClick(): void;
|
|
74
|
+
/** Replie les bulles du satellite-facette ouvert — et l'aperçu qu'elles
|
|
75
|
+
* portaient. No-op si aucun menu n'est déployé. */
|
|
76
|
+
closeKeyEventMenu(): void;
|
|
77
|
+
/** Les satellites-facettes sont sortis : un Événement Clé encore en aperçu
|
|
78
|
+
* (revenu d'une Facette) retrouve ses bulles sur le satellite-facette
|
|
79
|
+
* d'origine, sa bulle allumée, et son souffle en part. */
|
|
80
|
+
onIdleFacettesShown(): void;
|
|
81
|
+
/** Les satellites-facettes rentrent (bascule vers les arcs ou ouverture
|
|
82
|
+
* d'une Facette) : leurs bulles rentrent avec eux. L'aperçu, lui, reste
|
|
83
|
+
* en place jusqu'au choix d'une autre action ou d'un autre événement —
|
|
84
|
+
* invisible en Idle « arcs », il retrouve son souffle dans une Facette
|
|
85
|
+
* concernée ou au retour des satellites-facettes. */
|
|
86
|
+
onIdleFacettesHidden(): void;
|
|
53
87
|
/**
|
|
54
88
|
* Fermeture du Champ d'événement : l'Événement Clé en aperçu et les bulles
|
|
55
|
-
* du
|
|
89
|
+
* du satellite-facette — chemin unique partagé par la fermeture de facette
|
|
56
90
|
* (closeCurrentComposante) et par l'exclusivité action/événement
|
|
57
91
|
* (openActionMenuFromChild). No-op si rien n'est ouvert.
|
|
58
92
|
*
|
|
59
93
|
* hide() d'abord pour la rétraction immédiate du souffle (le geste
|
|
60
94
|
* d'ouverture joué à l'envers — cf. prepareForComponentSwitch),
|
|
61
|
-
*
|
|
95
|
+
* updateKeyEventMenu() ensuite pour replier les bulles et laisser
|
|
62
96
|
* refreshTargets constater qu'il n'y a plus rien à dessiner. La carte du
|
|
63
97
|
* panneau RECHERCHE part avec : elle décrit l'Événement Clé qu'on vient de
|
|
64
98
|
* retirer du diagramme, et rien ne garantit qu'un autre bloc prenne sa
|
|
65
99
|
* place (ouvrir un satellite n'affiche qu'un descriptif, pas un bloc).
|
|
66
100
|
*/
|
|
67
101
|
closeKeyEventField(): void;
|
|
68
|
-
|
|
102
|
+
updateKeyEventMenu(): void;
|
|
69
103
|
/**
|
|
70
104
|
* Événements Clés qui pilotent le Champ d'événement en ce moment — source
|
|
71
105
|
* unique de vérité pour EventFieldLifecycleController (cibles) comme pour
|
|
72
106
|
* getEventFieldSource (point d'émission).
|
|
73
107
|
*
|
|
108
|
+
* Rien en Idle « arcs ». En Idle « facettes », le souffle relie le
|
|
109
|
+
* satellite-facette d'origine aux AUTRES satellites-facettes atteints ; en
|
|
110
|
+
* Facette, il part du cœur vers les satellites de cutting.
|
|
111
|
+
*
|
|
74
112
|
* Deux régimes, mêmes règles de priorité que le champ de force d'action :
|
|
75
|
-
* un APERÇU (clic sur une bulle
|
|
113
|
+
* un APERÇU (clic sur une bulle d'un satellite-facette ou sur l'entrée de l'arbre
|
|
76
114
|
* RECHERCHE) prend toujours la main — c'est le geste que l'utilisateur
|
|
77
115
|
* vient de faire, quel que soit l'onglet ; sinon, en mode STACK, ce sont
|
|
78
116
|
* les Événements Clés COCHÉS de la pile qui décident, exactement comme les
|
|
@@ -87,25 +125,10 @@ export declare class KeyEventController {
|
|
|
87
125
|
* l'arc de sa facette d'origine).
|
|
88
126
|
*/
|
|
89
127
|
getEventFieldKeyEvents(): KeyEventDefinition[];
|
|
90
|
-
/**
|
|
91
|
-
*
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* yin sur une facette Yin. Ce n'est PAS le centre géométrique du symbole :
|
|
95
|
-
* les deux lobes ont des rayons qui varient avec le score, donc le cœur se
|
|
96
|
-
* déplace le long de l'axe vertical au fil de la partie, d'où la
|
|
97
|
-
* relecture de la géométrie à chaque frame. Injecté dans
|
|
98
|
-
* EventFieldLifecycleController (getEventFieldSource), rappelé à chaque
|
|
99
|
-
* frame de son animation.
|
|
100
|
-
*
|
|
101
|
-
* `geometry.yin/yang.centerY` est la position CANONIQUE (pré-rotation) :
|
|
102
|
-
* pendant une rotation Yin/Yang (AnimationsMngr), le cœur visible se
|
|
103
|
-
* déplace via un `transform` écrit à même `graphElementGroup` à chaque
|
|
104
|
-
* frame, sans jamais toucher `geometry`. On lit donc la position réelle
|
|
105
|
-
* via getLiveLobeCoreCenter plutôt que la géométrie statique, pour que les
|
|
106
|
-
* anneaux du champ d'événement suivent le cœur qui tourne au lieu de
|
|
107
|
-
* naître à une origine figée.
|
|
108
|
-
*/
|
|
128
|
+
/** Événements Clés cochés de la pile, dans l'ordre de la pile, réduits à
|
|
129
|
+
* ceux qui ont une bulle dans le mode courant. */
|
|
130
|
+
private getCheckedStackKeyEvents;
|
|
131
|
+
/** Origin satellite while visible; its facet arc carries the field after navigation. */
|
|
109
132
|
getEventFieldSource(): {
|
|
110
133
|
center: {
|
|
111
134
|
x: number;
|
|
@@ -113,18 +136,6 @@ export declare class KeyEventController {
|
|
|
113
136
|
} | null;
|
|
114
137
|
radius: number;
|
|
115
138
|
};
|
|
116
|
-
/**
|
|
117
|
-
* Résout un point porté par `lobeGroup` (coordonnées locales, ici le
|
|
118
|
-
* centre canonique du cœur) dans le repère de globalGroup — celui où
|
|
119
|
-
* EventFieldRenderer dessine (voir EventFieldLifecycleController,
|
|
120
|
-
* getGlobalGroupNode). Passe par les CTM SVG plutôt que de reparser
|
|
121
|
-
* l'attribut `transform` (comme getChildRenderedCenter le fait pour une
|
|
122
|
-
* simple translation) : le transform posé sur graphElementGroup pendant
|
|
123
|
-
* une rotation combine rotate ET translate, et cette composition suit
|
|
124
|
-
* fidèlement AnimationsMngr sans dépendre de sa formule exacte — un
|
|
125
|
-
* changement futur de celle-ci n'a pas besoin d'être répercuté ici.
|
|
126
|
-
*/
|
|
127
|
-
private getLiveLobeCoreCenter;
|
|
128
139
|
/**
|
|
129
140
|
* Rejoue l'aperçu d'un Événement Clé depuis une navigation Recherche
|
|
130
141
|
* (historique précédent/suivant) — pendant minimal de searchNavigateToAction,
|
|
@@ -139,41 +150,35 @@ export declare class KeyEventController {
|
|
|
139
150
|
*
|
|
140
151
|
* Volontairement plus étroit que previewKeyEvent : ni carte redessinée, ni
|
|
141
152
|
* notification de navigation (donc pas d'entrée d'historique en double) —
|
|
142
|
-
* le panneau montre déjà cet événement, c'est le diagramme qui le rattrape
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
* Si la facette courante n'est plus celle de l'événement (l'utilisateur a
|
|
147
|
-
* navigué ailleurs pendant le mode STACK), on revient d'abord sur sa facette
|
|
148
|
-
* d'origine — mêmes gestes que searchSetKeyEventMenuOpen : l'aperçu survit
|
|
149
|
-
* au switch (prepareForComponentSwitch le garde vivant, destination =
|
|
150
|
-
* origine) et le menu cœur se redéploie à l'arrivée avec sa bulle active.
|
|
153
|
+
* le panneau montre déjà cet événement, c'est le diagramme qui le rattrape :
|
|
154
|
+
* bascule en Idle « facettes » (une Facette ouverte se referme), bulles du
|
|
155
|
+
* satellite-facette d'origine déployées, celle de l'événement allumée.
|
|
151
156
|
*/
|
|
152
157
|
restoreKeyEventDiagramState(keyEventId: string): void;
|
|
153
158
|
/**
|
|
154
159
|
* Dépli/repli du groupe "Événements Clés" depuis la hiérarchie RECHERCHE —
|
|
155
|
-
* pendant exact du clic sur
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
160
|
+
* pendant exact du clic sur un satellite-facette, pour que l'arbre et le
|
|
161
|
+
* diagramme montrent le même menu déployé : ouvrir le groupe bascule en
|
|
162
|
+
* Idle « facettes » (une Facette ouverte se referme) et déploie les bulles
|
|
163
|
+
* de ce satellite-facette, le refermer les rétracte.
|
|
159
164
|
*
|
|
160
165
|
* Le repli passe par closeKeyEventField plutôt que par le toggle : il doit
|
|
161
166
|
* aussi emporter l'Événement Clé en aperçu (et sa carte), sinon une bulle
|
|
162
167
|
* validée resterait allumée sous un groupe replié.
|
|
163
168
|
*/
|
|
164
169
|
searchSetKeyEventMenuOpen(componentIndex: number, open: boolean): void;
|
|
165
|
-
/** Ouverture idempotente
|
|
166
|
-
*
|
|
167
|
-
|
|
170
|
+
/** Ouverture idempotente des bulles d'un satellite-facette — no-op si
|
|
171
|
+
* elles sont déjà déployées (le toggle les refermerait). */
|
|
172
|
+
openKeyEventMenu(componentId: string): void;
|
|
168
173
|
/** Seul point de mutation de activeKeyEventId — resynchronise la ligne
|
|
169
174
|
* Événement Clé du titre (voir getCurrentSatelliteTitle) à chaque
|
|
170
175
|
* changement, exactement comme setActiveChildKey le fait pour le
|
|
171
176
|
* satellite. */
|
|
172
177
|
setActiveKeyEventId(keyEventId: string | null): void;
|
|
173
178
|
/**
|
|
174
|
-
* Clic sur une bulle
|
|
175
|
-
* item de pile — celui en focus s'il s'agit de cet événement, sinon le
|
|
176
|
-
* plus récent ; rien s'il n'est pas dans la pile. Ailleurs : aperçu.
|
|
179
|
+
* Clic sur une bulle d'un satellite-facette. En STACK : clic sur le libellé de son
|
|
180
|
+
* item coché de pile — celui en focus s'il s'agit de cet événement, sinon le
|
|
181
|
+
* plus récent ; rien s'il n'est pas coché dans la pile. Ailleurs : aperçu.
|
|
177
182
|
*/
|
|
178
183
|
onKeyEventBubbleClick(keyEvent: KeyEventDefinition): void;
|
|
179
184
|
/** Aperçu — 1er clic sur un Événement Clé : affiche sa carte descriptive
|
|
@@ -189,4 +194,7 @@ export declare class KeyEventController {
|
|
|
189
194
|
x: number;
|
|
190
195
|
y: number;
|
|
191
196
|
}): void;
|
|
197
|
+
/** En Idle « tab » : sélectionne une facette pour le titre dynamique, sans
|
|
198
|
+
* ouvrir/fermer les bulles d'événements. Rafraîchit le titre. */
|
|
199
|
+
selectKeyEventFacetteForTab(componentId: string): void;
|
|
192
200
|
}
|
|
@@ -1,41 +1,36 @@
|
|
|
1
1
|
import { IYinYangView } from "../../../interfaces/IYinYangView";
|
|
2
2
|
import { type KeyEventDefinition } from "../../../data/yasuni_key_events";
|
|
3
3
|
import { type Point } from "./radialItemMenu";
|
|
4
|
-
type
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
type KeyEventMenuContext = {
|
|
5
|
+
/** Satellite-facette (Idle « facettes ») qui porte le menu, ou null pour
|
|
6
|
+
* le refermer : centre rendu et rayon du satellite. */
|
|
7
|
+
anchor: {
|
|
8
|
+
center: Point;
|
|
9
|
+
radius: number;
|
|
10
|
+
} | null;
|
|
11
|
+
/** Centre du cercle global : l'éventail s'ouvre vers l'extérieur, sur
|
|
12
|
+
* l'axe centre → satellite, comme les boutons d'action d'un satellite. */
|
|
13
|
+
parentCenter: Point;
|
|
14
|
+
keyEvents: KeyEventDefinition[];
|
|
8
15
|
/** Id de l'événement actuellement en aperçu (carte affichée), ou null. */
|
|
9
16
|
activeKeyEventId: string | null;
|
|
10
|
-
/**
|
|
11
|
-
* (state.menu.itemDistance
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/** Taille des bulles — contrôle dédié "Taille boutons" du groupe
|
|
19
|
-
* "Événements clés" (state.menu.coreEventMenuItemScale) : les Événements
|
|
20
|
-
* Clés se dimensionnent indépendamment des boutons d'action des
|
|
21
|
-
* satellites. */
|
|
22
|
-
coreEventMenuItemScale: number;
|
|
23
|
-
coreEventIconFontScale: number;
|
|
24
|
-
/** Ajustement fin (px) de la distance des boutons, de part et d'autre de
|
|
25
|
-
* la longueur auto-calculée — contrôle "Distance boutons" du groupe
|
|
26
|
-
* "Événements clés", voir state.menu.coreEventMenuDistanceOffset. */
|
|
27
|
-
coreEventMenuDistanceOffset: number;
|
|
17
|
+
/** Distance satellite → bulles : même base que les boutons d'action
|
|
18
|
+
* (smallCircleRadius × state.menu.itemDistance, voir
|
|
19
|
+
* ChildActionMenuController), ajustée par keyEventMenuDistanceOffset. */
|
|
20
|
+
offsetDistance: number;
|
|
21
|
+
/** Rayon des bulles — contrôle dédié "Taille boutons" du groupe
|
|
22
|
+
* "Événements clés" (state.menu.keyEventMenuItemScale). */
|
|
23
|
+
itemRadius: number;
|
|
24
|
+
keyEventIconFontScale: number;
|
|
28
25
|
};
|
|
29
26
|
/**
|
|
30
|
-
* Menu radial des Événements Clés
|
|
31
|
-
*
|
|
32
|
-
* sémantique
|
|
33
|
-
* chorégraphie D3 en éventail factorisée dans
|
|
34
|
-
* aperçu, glisser vers la pile = validation)
|
|
35
|
-
* le centre fixe de la facette plutôt que sur un satellite, et déployé à
|
|
36
|
-
* angle égal sur 360° plutôt que sur un axe source.
|
|
27
|
+
* Menu radial des Événements Clés d'une facette, déployé autour de son
|
|
28
|
+
* satellite-facette (sous-état Idle « facettes ») — même langage visuel et
|
|
29
|
+
* même sémantique que ChildActionMenuController autour d'un satellite de
|
|
30
|
+
* cutting (bulles + icône, chorégraphie D3 en éventail factorisée dans
|
|
31
|
+
* radialItemMenu.ts ; clic = aperçu, glisser vers la pile = validation).
|
|
37
32
|
*/
|
|
38
|
-
export declare class
|
|
33
|
+
export declare class KeyEventMenuController {
|
|
39
34
|
private readonly view;
|
|
40
35
|
/** Clic sur une bulle — aperçu, ou focus de son item de pile en STACK
|
|
41
36
|
* (voir KeyEventController.onKeyEventBubbleClick). */
|
|
@@ -48,11 +43,11 @@ export declare class CoreEventMenuController {
|
|
|
48
43
|
* SearchPanelSynchronizer.startActionDrag, entièrement générique).
|
|
49
44
|
* Retourne une poignée d'annulation, conservée dans activeDragCancel. */
|
|
50
45
|
private readonly startKeyEventDrag;
|
|
51
|
-
private
|
|
46
|
+
private keyEventMenuGroup;
|
|
52
47
|
/** Groupe séparé pour les traits centre → bulle, abaissé au fond du
|
|
53
48
|
* z-order (voir ensureLineLayer) pour qu'ils s'affichent derrière le
|
|
54
49
|
* disque central et les satellites plutôt que par-dessus. */
|
|
55
|
-
private
|
|
50
|
+
private keyEventLineLayer;
|
|
56
51
|
/** Poignée d'annulation du glisser-déposer en cours (voir startKeyEventDrag),
|
|
57
52
|
* ou null si aucun glisser n'est en cours — même rôle que
|
|
58
53
|
* ChildActionMenuController.activeDragCancel. */
|
|
@@ -80,7 +75,7 @@ export declare class CoreEventMenuController {
|
|
|
80
75
|
private _onHoverCb?;
|
|
81
76
|
setOnHover(cb: (keyEventId: string | null) => void): void;
|
|
82
77
|
clearImmediately(): void;
|
|
83
|
-
update(context:
|
|
78
|
+
update(context: KeyEventMenuContext): void;
|
|
84
79
|
/** Restyle les seuls liens (impulsion allumée/éteinte) sans toucher à leur
|
|
85
80
|
* géométrie : le survol ne doit rien réanimer. */
|
|
86
81
|
private setHoveredKeyEvent;
|
|
@@ -20,6 +20,19 @@ export type RadialMenuItemPosition<T> = {
|
|
|
20
20
|
* cercle central — pas d'axe source à respecter, maximise l'écart
|
|
21
21
|
* angulaire entre bulles).
|
|
22
22
|
*/
|
|
23
|
+
/** Lueur d'une bulle : équivalent de `drop-shadow(0 0 ${blur}px ${color})`. */
|
|
24
|
+
export type RadialItemGlow = {
|
|
25
|
+
color: string;
|
|
26
|
+
blur: number;
|
|
27
|
+
} | null;
|
|
28
|
+
/**
|
|
29
|
+
* Habille le halo pré-rendu d'une bulle (cercle `${dataRole}-halo`, créé
|
|
30
|
+
* sous la plaque) : un disque à dégradé radial au lieu d'un drop-shadow sur
|
|
31
|
+
* la plaque. `null` l'éteint.
|
|
32
|
+
*/
|
|
33
|
+
export declare function styleRadialItemHalo(group: d3.Selection<SVGGElement, unknown, null, undefined>, dataRole: string, radius: number, glow: RadialItemGlow): void;
|
|
34
|
+
/** Allume / éteint le halo de survol d'une bulle, sans perdre sa lueur propre. */
|
|
35
|
+
export declare function setRadialItemHaloHighlight(group: d3.Selection<SVGGElement, unknown, null, undefined>, dataRole: string, highlighted: boolean): void;
|
|
23
36
|
export declare function computeFanPositions<T extends {
|
|
24
37
|
id: string;
|
|
25
38
|
}>(items: T[], opts: {
|
|
@@ -31,6 +44,14 @@ export declare function computeFanPositions<T extends {
|
|
|
31
44
|
itemRadius: number;
|
|
32
45
|
keyPrefix: string;
|
|
33
46
|
}): RadialMenuItemPosition<T>[];
|
|
47
|
+
/**
|
|
48
|
+
* Recale des bulles DÉJÀ rendues sur de nouvelles positions (frame d'orbite) :
|
|
49
|
+
* ni data join, ni transition, ni listeners. Une bulle encore en ouverture
|
|
50
|
+
* n'est pas touchée directement — sa transition relit la cible mise à jour
|
|
51
|
+
* ici (liveItemTransformTween). Les bulles absentes de `positions` (en
|
|
52
|
+
* sortie) restent à leur chorégraphie.
|
|
53
|
+
*/
|
|
54
|
+
export declare function followRadialItems<T>(groupNode: SVGGElement, dataRole: string, positions: RadialMenuItemPosition<T>[]): void;
|
|
34
55
|
/**
|
|
35
56
|
* Referme et retire toutes les bulles d'un menu radial (repli en
|
|
36
57
|
* éventail), utilisé à la fois quand update() ne reçoit plus de
|
|
@@ -48,8 +69,10 @@ export declare function renderRadialItemsChoreography<T>(params: {
|
|
|
48
69
|
groupNode: SVGGElement;
|
|
49
70
|
dataRole: string;
|
|
50
71
|
positions: RadialMenuItemPosition<T>[];
|
|
51
|
-
|
|
52
|
-
|
|
72
|
+
/** Un point unique, ou un point par bulle (bulles détachées : chacune naît
|
|
73
|
+
* de son propre satellite source et y retourne). */
|
|
74
|
+
exitAnimationCenter: Point | ((d: RadialMenuItemPosition<T>) => Point);
|
|
75
|
+
enterCenter: Point | ((d: RadialMenuItemPosition<T>) => Point);
|
|
53
76
|
getIconUrl: (id: string) => string;
|
|
54
77
|
/** Décor optionnel inséré entre la plaque (cercle) et le pictogramme, sur
|
|
55
78
|
* la seule sélection enter() — c'est par là que le menu des Événements
|
|
@@ -86,7 +109,7 @@ export declare function styleRadialItemLinks<T extends {
|
|
|
86
109
|
}>(groupNode: SVGGElement | null, dataRole: string, getStyle: (d: RadialMenuItemPosition<T>) => RadialItemLinkStyle): void;
|
|
87
110
|
/**
|
|
88
111
|
* Chorégraphie D3 des liens parent → item, rendus dans un groupe SÉPARÉ de
|
|
89
|
-
* celui des bulles (voir
|
|
112
|
+
* celui des bulles (voir KeyEventMenuController : ce groupe est glissé plus
|
|
90
113
|
* tôt dans le z-order pour passer derrière les satellites et le disque
|
|
91
114
|
* central, alors que les bulles restent devant dans leur propre groupe).
|
|
92
115
|
* Anime directement x2/y2 des lignes : un lien entrant grandit depuis le bord
|
|
@@ -101,8 +124,23 @@ export declare function renderRadialItemLinks<T extends {
|
|
|
101
124
|
groupNode: SVGGElement;
|
|
102
125
|
dataRole: string;
|
|
103
126
|
positions: RadialMenuItemPosition<T>[];
|
|
104
|
-
|
|
127
|
+
/** Centre du parent — un seul, ou un par bulle (bulles détachées). */
|
|
128
|
+
center: Point | ((d: RadialMenuItemPosition<T>) => Point);
|
|
105
129
|
/** Rayon du disque parent : le faisceau démarre à son bord. 0 = au centre. */
|
|
106
|
-
startRadius?: number;
|
|
130
|
+
startRadius?: number | ((d: RadialMenuItemPosition<T>) => number);
|
|
107
131
|
getStyle?: (d: RadialMenuItemPosition<T>) => RadialItemLinkStyle;
|
|
108
132
|
}): void;
|
|
133
|
+
/**
|
|
134
|
+
* Pendant de followRadialItems pour les faisceaux : origine, extrémité et
|
|
135
|
+
* dégradé recalés sur les nouvelles positions, sans data join ni transition.
|
|
136
|
+
* Un faisceau encore en ouverture garde sa transition, qui relit la cible.
|
|
137
|
+
*/
|
|
138
|
+
export declare function followRadialItemLinks<T extends {
|
|
139
|
+
id: string;
|
|
140
|
+
}>(params: {
|
|
141
|
+
groupNode: SVGGElement;
|
|
142
|
+
dataRole: string;
|
|
143
|
+
positions: RadialMenuItemPosition<T>[];
|
|
144
|
+
center: Point | ((d: RadialMenuItemPosition<T>) => Point);
|
|
145
|
+
startRadius?: number | ((d: RadialMenuItemPosition<T>) => number);
|
|
146
|
+
}): void;
|
|
@@ -32,6 +32,9 @@ export declare class ChildInteractionController {
|
|
|
32
32
|
setChildrenHiddenState(childControllers: IYinYangController[], hidden: boolean): void;
|
|
33
33
|
attachChildToggleHandler(childController: IYinYangController, childOddMap: Map<string, ChildOddMeta>): void;
|
|
34
34
|
attachChildHoverHandler(childController: IYinYangController, childOddMap: Map<string, ChildOddMeta>): void;
|
|
35
|
+
private backgroundClickContainer;
|
|
36
|
+
/** Un seul écouteur par conteneur : le SVG racine survit aux recréations de
|
|
37
|
+
* satellites, et cette méthode est rappelée à chacune. */
|
|
35
38
|
attachBackgroundClickHandler(): void;
|
|
36
39
|
enterOddView(oddId: string): void;
|
|
37
40
|
exitOddView(): void;
|
|
@@ -41,6 +44,7 @@ export declare class ChildInteractionController {
|
|
|
41
44
|
private applyChildActiveStyle;
|
|
42
45
|
/** Filtre courant d'un satellite : la mise en valeur d'un ODD prime sur le
|
|
43
46
|
* style "actif", qui prime lui-même sur l'état neutre. */
|
|
47
|
+
private resolveGlowFor;
|
|
44
48
|
private resolveFilterFor;
|
|
45
49
|
private getChildOffset;
|
|
46
50
|
}
|