@micheeeeel/yinyangapp 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.css +1 -0
- package/dist/bundle.js +1 -2
- package/dist/types/adapters/yasuniCauseAdapter.d.ts +1 -1
- package/dist/types/adapters/yinYangAdapter.d.ts +7 -0
- package/dist/types/animations/AnimationsMngr.d.ts +69 -15
- package/dist/types/animations/FrameScheduler.d.ts +99 -0
- package/dist/types/animations/rotationMotion.d.ts +43 -0
- package/dist/types/api.d.ts +17 -2
- package/dist/types/benchmark/runner.d.ts +20 -0
- package/dist/types/benchmark/scenarios.d.ts +55 -6
- package/dist/types/components/controller/YinYangController.d.ts +104 -14
- package/dist/types/components/controller/action-stack/ActionStackController.d.ts +16 -1
- package/dist/types/components/controller/action-stack/ActionStackDragHandler.d.ts +4 -0
- package/dist/types/components/controller/action-stack/ActionStackManager.d.ts +13 -2
- package/dist/types/components/controller/action-stack/ActionStackState.d.ts +8 -5
- package/dist/types/components/controller/action-stack/StackFocusController.d.ts +8 -7
- package/dist/types/components/controller/action-stack/stackChromePalette.d.ts +20 -0
- package/dist/types/components/controller/actions/ActionProjectionService.d.ts +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 +3 -1
- package/dist/types/components/controller/children/ComponentSwitchCoordinator.d.ts +3 -1
- package/dist/types/components/controller/children/IdleFacettesController.d.ts +151 -0
- package/dist/types/components/controller/children/idleTabLayout.d.ts +95 -0
- package/dist/types/components/controller/children/idleTabMorph.d.ts +45 -0
- package/dist/types/components/controller/force-field/EventFieldLifecycleController.d.ts +14 -0
- package/dist/types/components/controller/force-field/EventFieldRenderer.d.ts +3 -3
- package/dist/types/components/controller/force-field/ForceFieldCanvasPainter.d.ts +99 -0
- package/dist/types/components/controller/force-field/ForceFieldComputationService.d.ts +9 -0
- package/dist/types/components/controller/force-field/ForceFieldDetailsPanel.d.ts +28 -57
- package/dist/types/components/controller/force-field/ForceFieldDetailsPresenter.d.ts +4 -1
- package/dist/types/components/controller/force-field/ForceFieldLifecycleController.d.ts +16 -1
- package/dist/types/components/controller/force-field/ForceFieldRenderer.d.ts +10 -18
- package/dist/types/components/controller/force-field/IncomingForceFieldService.d.ts +2 -2
- package/dist/types/components/controller/force-field/PropagationAnimator.d.ts +2 -0
- package/dist/types/components/controller/force-field/keyEventPresentation.d.ts +47 -0
- package/dist/types/components/controller/force-field/propagation-viz/PropagationCometPlayer.d.ts +4 -0
- package/dist/types/components/controller/force-field/propagation-viz/propagationVizLists.d.ts +4 -2
- package/dist/types/components/controller/force-field/propagation-viz/propagationVizModel.d.ts +1 -0
- package/dist/types/components/controller/force-field/shieldViewModel.d.ts +6 -2
- package/dist/types/components/controller/force-field/types.d.ts +2 -1
- package/dist/types/components/controller/labels/ChildScoresDeltaRenderer.d.ts +7 -0
- package/dist/types/components/controller/labels/ComponentTitlePresenter.d.ts +13 -0
- package/dist/types/components/controller/labels/ContextLabelsRenderer.d.ts +16 -0
- package/dist/types/components/controller/labels/WeightPreviewRingRenderer.d.ts +6 -0
- package/dist/types/components/controller/odd/ChildrenOrbitManager.d.ts +76 -25
- package/dist/types/components/controller/odd/OddHighlightEffects.d.ts +2 -0
- package/dist/types/components/controller/odd/OddViewManager.d.ts +7 -3
- package/dist/types/components/controller/odd/childHighlightStyles.d.ts +45 -3
- package/dist/types/components/controller/search/SearchPanelSynchronizer.d.ts +8 -5
- package/dist/types/components/controller/settings/ControllerSettingsApplier.d.ts +4 -4
- package/dist/types/components/controller/state/ControllerSession.d.ts +3 -3
- package/dist/types/components/controller/state/ControllerUiCallbacks.d.ts +10 -0
- package/dist/types/components/controller/state/YinYangControllerState.d.ts +20 -9
- package/dist/types/components/controller/types.d.ts +9 -2
- package/dist/types/components/controller/utils/actionCatalog.d.ts +1 -1
- package/dist/types/components/controller/utils/eventFieldTargets.d.ts +19 -13
- package/dist/types/components/controller/utils/keyEventPropagationContext.d.ts +4 -0
- package/dist/types/components/controller/utils/keyEventTargetBreakdowns.d.ts +4 -0
- package/dist/types/components/controller/utils/svgTransform.d.ts +16 -0
- package/dist/types/components/controls/VizControlsPanel.d.ts +3 -1
- package/dist/types/components/panel/PanelManager.d.ts +92 -22
- package/dist/types/components/search/GlobalSearchController.d.ts +13 -6
- package/dist/types/components/view/BorderDrawer.d.ts +40 -14
- package/dist/types/components/view/IdleTabGridDrawer.d.ts +15 -0
- package/dist/types/components/view/SpikeDrawer.d.ts +18 -0
- package/dist/types/components/view/ViewInitializer.d.ts +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/adverse-action-planner.d.ts +3 -3
- package/dist/types/data/amplifier-engine.d.ts +6 -6
- package/dist/types/data/key-event-effects.d.ts +30 -0
- package/dist/types/data/key-event-eligibility.d.ts +24 -0
- package/dist/types/data/key-event-propagation.d.ts +13 -0
- package/dist/types/data/key-event-types.d.ts +48 -0
- package/dist/types/data/key-event-validation.d.ts +11 -0
- package/dist/types/data/stability-shield.d.ts +14 -0
- package/dist/types/data/yasuni_adverse_key_events.d.ts +1 -1
- package/dist/types/data/yasuni_cause.d.ts +7 -0
- package/dist/types/data/yasuni_key_events.d.ts +4 -60
- package/dist/types/interfaces/ICauseModel.d.ts +10 -1
- package/dist/types/interfaces/IGraphicsStrategy.d.ts +9 -2
- package/dist/types/interfaces/IPropagationGraph.d.ts +14 -0
- package/dist/types/interfaces/IViewData.d.ts +10 -0
- package/dist/types/interfaces/IYinYangController.d.ts +25 -7
- package/dist/types/interfaces/IYinYangInternalModel.d.ts +5 -0
- package/dist/types/main.d.ts +0 -1
- package/dist/types/utils/actionIconFit.d.ts +23 -0
- package/dist/types/utils/actionPropagation.d.ts +6 -4
- package/dist/types/utils/causeMetrics.d.ts +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 +8 -0
- package/package.json +4 -1
- package/dist/bundle.js.LICENSE.txt +0 -1
|
@@ -75,6 +75,8 @@ export declare class ActionStackController {
|
|
|
75
75
|
* ActionStackState.addItem, sans muter la pile. null hors zone de dépôt.
|
|
76
76
|
*/
|
|
77
77
|
getPriorIdsIfInsertedAtPreview(anchorItemId: string, insertedActionId: string): string[] | null;
|
|
78
|
+
/** Projection d'une insertion externe, sans mutation de la pile ni de l'historique. */
|
|
79
|
+
getItemsIfInsertedAtPreview(inserted: ActionStackItem): ActionStackItem[] | null;
|
|
78
80
|
/** Fin du glisser (dépôt ou abandon). Les barres restent affichées ; un
|
|
79
81
|
* dépôt consomme le guide, un abandon le garde pour un nouvel essai. */
|
|
80
82
|
endPrereqDragGuide(dropped: boolean): void;
|
|
@@ -100,6 +102,15 @@ export declare class ActionStackController {
|
|
|
100
102
|
*/
|
|
101
103
|
private _hitboxEmphasisStyle;
|
|
102
104
|
private _applyHitboxEmphasisStyles;
|
|
105
|
+
/** Couleur du libellé d'un item — éclairci pour l'item en focus. */
|
|
106
|
+
private _stackLabelFill;
|
|
107
|
+
/**
|
|
108
|
+
* Marques propres à l'item en focus, indépendantes du cadre : liseré plein
|
|
109
|
+
* à sa couleur sur le bord gauche (pendant du border-left du bloc
|
|
110
|
+
* .ff-block--focused dans le panneau) et libellé éclairci en gras. Elles
|
|
111
|
+
* restent visibles quand le survol lié prend la main sur le cadre.
|
|
112
|
+
*/
|
|
113
|
+
private _applyFocusMarks;
|
|
103
114
|
/**
|
|
104
115
|
* Affiche temporairement le highlight combo (cercles de fenêtre) pendant ~1.8 s.
|
|
105
116
|
* Sans effet si un highlight permanent est déjà actif.
|
|
@@ -142,7 +153,7 @@ export declare class ActionStackController {
|
|
|
142
153
|
* ActionStackState.addItemAtSlot. Même remise à zéro de l'aperçu de
|
|
143
154
|
* glisser qu'addItem, pour la même raison (rendu synchrone dans
|
|
144
155
|
* state.addItemAtSlot). */
|
|
145
|
-
addItemAtSlot(item: Omit<ActionStackItem, "id" | "validatedAt" | "slotIndex">, slotIndex: number): ActionStackItem;
|
|
156
|
+
addItemAtSlot(item: Omit<ActionStackItem, "id" | "validatedAt" | "slotIndex">, slotIndex: number): ActionStackItem | null;
|
|
146
157
|
syncActiveAction(sourceChildKey: string | null, actionId: string | null): void;
|
|
147
158
|
setExternalDragActive(active: boolean): void;
|
|
148
159
|
clearDropPreview(): void;
|
|
@@ -195,5 +206,9 @@ export declare class ActionStackController {
|
|
|
195
206
|
copyRangeToClipboard(): void;
|
|
196
207
|
/** Pastes the clipboard at the top of the currently active stack. */
|
|
197
208
|
pasteClipboard(): void;
|
|
209
|
+
/** Fin de vie : observer déconnecté, minuterie du flash et écouteur
|
|
210
|
+
* clavier retirés. */
|
|
211
|
+
destroy(): void;
|
|
212
|
+
private keydownHandler;
|
|
198
213
|
private ensureKeyboardListeners;
|
|
199
214
|
}
|
|
@@ -83,6 +83,10 @@ export declare class ActionStackDragHandler {
|
|
|
83
83
|
compactLength: number;
|
|
84
84
|
}): void;
|
|
85
85
|
clearDropPreview(): void;
|
|
86
|
+
/** Zone de dépôt relue à l'instant : un glisser venu du diagramme ou de
|
|
87
|
+
* RECHERCHE bascule en mode STACK, dont le panneau entre alors en glissant
|
|
88
|
+
* depuis la gauche — la géométrie du dernier rendu serait périmée. */
|
|
89
|
+
private liveDropZone;
|
|
86
90
|
updateDropPreview(clientX: number, clientY: number, _localY: number): boolean;
|
|
87
91
|
isDropZoneHit(clientX: number, clientY: number): boolean;
|
|
88
92
|
getInsertionPreviewIndex(): number | null;
|
|
@@ -41,7 +41,7 @@ type ActionStackManagerDeps = {
|
|
|
41
41
|
prepareForComponentSwitch: (targetComponentId: string) => void;
|
|
42
42
|
animateChildrenHide: () => void;
|
|
43
43
|
recomputeIncomingForceFieldForItems: (items: ActionStackItem[], sourceComponentId: string, currentComponentId: string) => boolean;
|
|
44
|
-
buildProjectionActionsFromStackItems: (items: ActionStackItem[]) => SequentialActionProjectionInput[];
|
|
44
|
+
buildProjectionActionsFromStackItems: (items: ActionStackItem[], eventContextItems?: ActionStackItem[]) => SequentialActionProjectionInput[];
|
|
45
45
|
buildForceFieldSourceIndicesFromStackItems: (items: ActionStackItem[]) => number[];
|
|
46
46
|
clearProjectedActionState: (options?: {
|
|
47
47
|
deselect?: boolean;
|
|
@@ -119,7 +119,18 @@ export declare class ActionStackManager {
|
|
|
119
119
|
* ODD, métadonnées de son cutting. Null si le satellite est inconnu. */
|
|
120
120
|
private buildActionStackItem;
|
|
121
121
|
activateActionFromChild(childController: IYinYangController, actionId?: string, label?: string, clearStack?: boolean): void;
|
|
122
|
-
|
|
122
|
+
private panelsRefreshFrameId;
|
|
123
|
+
/** Rend, à la frame suivante, les panneaux dépendants de l'action active :
|
|
124
|
+
* détails du ghost, deltas des satellites, puis le menu radial en dernier
|
|
125
|
+
* (il rebranche ses closures de clic sur l'activeActionId posé par
|
|
126
|
+
* l'activation, voir refreshChildActionMenu). Plusieurs activations dans la
|
|
127
|
+
* même frame se fondent en un seul rendu. Si l'action n'est plus active à
|
|
128
|
+
* l'échéance (désactivée, ou remplacée), le flux qui l'a remplacée a rendu
|
|
129
|
+
* son propre état : rien à faire. */
|
|
130
|
+
/** Fin de vie : annule le rendu différé des panneaux. */
|
|
131
|
+
destroy(): void;
|
|
132
|
+
private schedulePanelsRefresh;
|
|
133
|
+
applyProjectedGhostFromStackItems(items: ActionStackItem[], eventContextItems?: ActionStackItem[]): void;
|
|
123
134
|
onStackItemVisibilityToggle(activeItems: ActionStackItem[]): void;
|
|
124
135
|
private updateProjectedGhostTensions;
|
|
125
136
|
private applyEmptyGhostProjectionState;
|
|
@@ -2,8 +2,7 @@ export type ActionStackItem = {
|
|
|
2
2
|
id: string;
|
|
3
3
|
/**
|
|
4
4
|
* Nature de l'item — "action" (par défaut) pour une action satellite
|
|
5
|
-
* classique, "keyEvent" pour un Événement Clé joué depuis le
|
|
6
|
-
* central d'une facette. Un keyEvent n'a pas de satellite cible (les
|
|
5
|
+
* classique, "keyEvent" pour un Événement Clé joué depuis le satellite-facette. Un keyEvent n'a pas de satellite cible (les
|
|
7
6
|
* champs source* ci-dessous sont des sentinels dans ce cas) ni de delta
|
|
8
7
|
* propre (effectiveDelta reste 0) — son seul effet est d'amplifier les
|
|
9
8
|
* actions listées dans sa définition, si elles sont jouées après lui
|
|
@@ -31,6 +30,7 @@ export type ActionStackItem = {
|
|
|
31
30
|
comboResults?: import("../../../data/combo-engine").ComboResult[];
|
|
32
31
|
/** Index du slot occupé dans la pile (0 = en bas, croissant vers le haut). */
|
|
33
32
|
slotIndex: number;
|
|
33
|
+
unrecognized?: boolean;
|
|
34
34
|
};
|
|
35
35
|
/** Champs persistants d'un item copié — sans id/validatedAt/slotIndex, qui sont
|
|
36
36
|
* réattribués à l'insertion (dans la même pile ou une autre, via un bookmark). */
|
|
@@ -61,6 +61,7 @@ export type ActionStackSnapshot = StackState & {
|
|
|
61
61
|
export declare class ActionStackState {
|
|
62
62
|
private readonly onActiveItemsChange;
|
|
63
63
|
private readonly onClear?;
|
|
64
|
+
private readonly isKnownItem?;
|
|
64
65
|
readonly ACTION_STACK_MAX_ITEMS = 30;
|
|
65
66
|
readonly HISTORY_LIMIT = 120;
|
|
66
67
|
readonly CONFIG_BOOKMARKS_MAX = 4;
|
|
@@ -76,7 +77,7 @@ export declare class ActionStackState {
|
|
|
76
77
|
stackClipboard: StackClipboardEntry[] | null;
|
|
77
78
|
configBookmarks: ConfigBookmark[];
|
|
78
79
|
activeBookmarkIndex: number;
|
|
79
|
-
constructor(onActiveItemsChange: (activeItems: ActionStackItem[]) => void, onClear?: (() => void) | undefined);
|
|
80
|
+
constructor(onActiveItemsChange: (activeItems: ActionStackItem[]) => void, onClear?: (() => void) | undefined, isKnownItem?: ((item: ActionStackItem) => boolean) | undefined);
|
|
80
81
|
canUndo(): boolean;
|
|
81
82
|
canRedo(): boolean;
|
|
82
83
|
getItemById(id: string): ActionStackItem | undefined;
|
|
@@ -106,7 +107,7 @@ export declare class ActionStackState {
|
|
|
106
107
|
* @param compactLength Current number of visible slots (from render context).
|
|
107
108
|
* Null when called without a specific insertion index.
|
|
108
109
|
*/
|
|
109
|
-
addItem(item: Omit<ActionStackItem, "id" | "validatedAt" | "slotIndex">, insertAtVisibleIndex: number | null, compactLength: number | null): ActionStackItem;
|
|
110
|
+
addItem(item: Omit<ActionStackItem, "id" | "validatedAt" | "slotIndex">, insertAtVisibleIndex: number | null, compactLength: number | null): ActionStackItem | null;
|
|
110
111
|
/**
|
|
111
112
|
* Insère à un slot ABSOLU (0 = bas de pile), en décalant d'un cran tout
|
|
112
113
|
* item situé à ce slot ou au-dessus — inconditionnellement, même si le
|
|
@@ -115,8 +116,10 @@ export declare class ActionStackState {
|
|
|
115
116
|
* insertion. addItem, lui, n'a pas cette garantie (il ne décale qu'en
|
|
116
117
|
* présence d'un occupant, et raisonne en index visible).
|
|
117
118
|
*/
|
|
118
|
-
addItemAtSlot(item: Omit<ActionStackItem, "id" | "validatedAt" | "slotIndex">, slotIndex: number): ActionStackItem;
|
|
119
|
+
addItemAtSlot(item: Omit<ActionStackItem, "id" | "validatedAt" | "slotIndex">, slotIndex: number): ActionStackItem | null;
|
|
119
120
|
private pushItemAtSlot;
|
|
121
|
+
/** Unicité par carte sur toute la STAC, y compris les items décochés. */
|
|
122
|
+
private hasKeyEvent;
|
|
120
123
|
removeItem(itemId: string): void;
|
|
121
124
|
clearAll(): void;
|
|
122
125
|
deselectAllItems(): void;
|
|
@@ -45,9 +45,11 @@ export declare class StackFocusController {
|
|
|
45
45
|
setStackItemEmphasisPreview(stackItemId: string | null): void;
|
|
46
46
|
/**
|
|
47
47
|
* Point d'accroche unique de la mise en valeur du satellite source de
|
|
48
|
-
* l'action portant l'emphase (aperçu ?? focus)
|
|
49
|
-
*
|
|
50
|
-
*
|
|
48
|
+
* l'action portant l'emphase (aperçu ?? focus) : pour l'action en focus,
|
|
49
|
+
* la même mise en lumière que le satellite sélectionné en RECHERCHE
|
|
50
|
+
* (anneaux de visée, pings, onde de scan) ; pour un simple aperçu au
|
|
51
|
+
* survol, le glow doux. Segment de bordure si la source est dans une
|
|
52
|
+
* autre facette.
|
|
51
53
|
* `clearIfNone` : sans emphase, efface la mise en valeur (sorties de
|
|
52
54
|
* survol, défocus) ; false pour les simples re-applications (satellites
|
|
53
55
|
* recréés, fin d'un survol de satellite) afin de ne pas écraser d'autres
|
|
@@ -89,10 +91,9 @@ export declare class StackFocusController {
|
|
|
89
91
|
sourceIndex: number;
|
|
90
92
|
} | null;
|
|
91
93
|
/**
|
|
92
|
-
* Point de départ « bulle » du champ de force de l'action en focus :
|
|
93
|
-
* bulle
|
|
94
|
-
*
|
|
95
|
-
* aucune bulle n'est visible (le champ démarre alors au satellite).
|
|
94
|
+
* Point de départ « bulle » du champ de force de l'action en focus : sa
|
|
95
|
+
* bulle détachée, posée sur le satellite source. null si aucune bulle
|
|
96
|
+
* n'est visible (le champ démarre alors au satellite).
|
|
96
97
|
*/
|
|
97
98
|
resolveFocusBubbleStub(): {
|
|
98
99
|
sourceChildIndex: number;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Habillage ambre de la pile (mode STACK) — pendant SVG des variables
|
|
3
|
+
* --stack-* de layout.css. Ne couvre que le décor (bordures, en-tête,
|
|
4
|
+
* boutons, frise temporelle) : les couleurs porteuses d'état (configurations
|
|
5
|
+
* A/B/C/D, placeholder de dépôt, phases, items actifs) restent les leurs.
|
|
6
|
+
*/
|
|
7
|
+
export declare const STACK_CHROME: {
|
|
8
|
+
readonly line: "#3a2f1e";
|
|
9
|
+
readonly headerText: "#e8c07a";
|
|
10
|
+
readonly buttonStroke: "#6a5028";
|
|
11
|
+
readonly buttonIcon: "#e8c07a";
|
|
12
|
+
readonly ghostSlotDots: "rgba(130, 98, 48, 0.55)";
|
|
13
|
+
readonly ghostSlotNumber: "rgba(120, 90, 45, 0.50)";
|
|
14
|
+
readonly timelineBandFill: "rgba(232, 168, 64, 0.06)";
|
|
15
|
+
readonly timelineBandStroke: "rgba(232, 168, 64, 0.18)";
|
|
16
|
+
readonly timelineAxis: "rgba(232, 168, 64, 0.50)";
|
|
17
|
+
readonly timelineArrow: "rgba(232, 168, 64, 0.65)";
|
|
18
|
+
readonly timelineTickOccupied: "rgba(240, 195, 110, 0.75)";
|
|
19
|
+
readonly timelineTick: "rgba(232, 168, 64, 0.40)";
|
|
20
|
+
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { KeyEventPropagationContext } from "../../../data/key-event-propagation";
|
|
1
2
|
import { YinYangInternalModel } from "../../../interfaces/IYinYangInternalModel";
|
|
2
3
|
import { type PropagatedActionEdge, type PropagationTruncation } from "../../../utils/actionPropagation";
|
|
4
|
+
import { type StabilityProtection, type ProtectedSign, type DirectionalShield } from "../../../data/stability-shield";
|
|
3
5
|
import { ForceFieldLink } from "../force-field/types";
|
|
4
6
|
export type ProjectedCuttingState = {
|
|
5
7
|
cuttingId: number;
|
|
@@ -15,6 +17,7 @@ export type GhostProjectionResult = {
|
|
|
15
17
|
projectedGhostCuttingStatesByOddId: Map<string, ProjectedCuttingState[]>;
|
|
16
18
|
};
|
|
17
19
|
export type SequentialActionProjectionInput = {
|
|
20
|
+
eventPropagation?: KeyEventPropagationContext;
|
|
18
21
|
sourceOddId: string;
|
|
19
22
|
sourceCuttingIndex: number;
|
|
20
23
|
/** Bouclier de stabilité (points d'état) que cette action crée sur son
|
|
@@ -23,6 +26,7 @@ export type SequentialActionProjectionInput = {
|
|
|
23
26
|
* résolutions suivantes de la séquence, jamais consommé ; le plus fort
|
|
24
27
|
* remplace le précédent sur un même satellite. */
|
|
25
28
|
shield?: number;
|
|
29
|
+
protectedSign?: ProtectedSign;
|
|
26
30
|
};
|
|
27
31
|
export type EmptyGhostProjectionState = {
|
|
28
32
|
projectedGhostTensionByOddId: null;
|
|
@@ -45,6 +49,7 @@ export type ShieldAbsorption = {
|
|
|
45
49
|
shield: number;
|
|
46
50
|
aggregated: number;
|
|
47
51
|
applied: number;
|
|
52
|
+
protectedSign?: ProtectedSign;
|
|
48
53
|
};
|
|
49
54
|
/**
|
|
50
55
|
* Bouclier de stabilité sur UNE résolution : pour chaque satellite protégé,
|
|
@@ -53,11 +58,16 @@ export type ShieldAbsorption = {
|
|
|
53
58
|
* total une seule fois — jamais chaque contribution séparément, jamais
|
|
54
59
|
* au-delà de 0. Mute `projectedStates` et rend les réductions appliquées.
|
|
55
60
|
*/
|
|
56
|
-
export
|
|
61
|
+
export type SignedResolutionContributions = Record<string, Record<number, {
|
|
62
|
+
positive: number;
|
|
63
|
+
negative: number;
|
|
64
|
+
}>>;
|
|
65
|
+
export declare function applyStabilityShieldsToResolution(startStates: Record<string, Record<number, number>>, projectedStates: Record<string, Record<number, number>>, activeShields: Map<string, Map<number, StabilityProtection>>, contributions?: SignedResolutionContributions): ShieldAbsorption[];
|
|
57
66
|
export type ActionSequenceStepInfo = {
|
|
58
67
|
actionIndex: number;
|
|
59
68
|
action: SequentialActionProjectionInput;
|
|
60
69
|
effectiveDelta: number;
|
|
70
|
+
createdProtection?: DirectionalShield;
|
|
61
71
|
/** Boucliers ayant réduit une contribution négative de cette étape — vide
|
|
62
72
|
* si aucun satellite protégé n'a été touché négativement. */
|
|
63
73
|
shieldAbsorptions: ShieldAbsorption[];
|
|
@@ -97,6 +107,7 @@ export declare function projectGhostStateForComponent(params: {
|
|
|
97
107
|
sourceOddId: string | undefined;
|
|
98
108
|
sourceCuttingIndex: number;
|
|
99
109
|
actionDelta: number;
|
|
110
|
+
eventPropagation?: KeyEventPropagationContext;
|
|
100
111
|
}): GhostProjectionResult | null;
|
|
101
112
|
/** Tension projetée de la facette : même règle que sa tension courante
|
|
102
113
|
* (`facetTensionFromOdds`, moyenne pondérée sur tous ses satellites), sur
|
|
@@ -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;
|