@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
|
@@ -5,6 +5,9 @@ import { IYinYangAppFactory } from "../../interfaces/IYinYangAppFactory";
|
|
|
5
5
|
import { IAnimator } from "../../interfaces/IAnimator";
|
|
6
6
|
import { YinYangInternalModel } from "../../interfaces/IYinYangInternalModel";
|
|
7
7
|
import { ForceFieldLinkDetail } from "./force-field/types";
|
|
8
|
+
import { type IdleTabHooks } from "./children/IdleFacettesController";
|
|
9
|
+
import type { FacetModulation, FacetModulationOptions } from "./children/facetModulation";
|
|
10
|
+
import type { IdleView } from "./state/YinYangControllerState";
|
|
8
11
|
import type { DiagramNavEvent } from "./types";
|
|
9
12
|
export declare class YinYangController implements IYinYangController {
|
|
10
13
|
model: IYinYangModel;
|
|
@@ -12,6 +15,9 @@ export declare class YinYangController implements IYinYangController {
|
|
|
12
15
|
factory: IYinYangAppFactory;
|
|
13
16
|
animator: IAnimator;
|
|
14
17
|
private childControllers;
|
|
18
|
+
/** Vrai pendant la création des satellites (ChildrenBuilder) : les rendus
|
|
19
|
+
* intermédiaires du champ de force y sont ignorés, un seul suit. */
|
|
20
|
+
private forceFieldRenderSuppressed;
|
|
15
21
|
/** État de la rotation spin (voir startRotation/stopRotationAll) — non nul
|
|
16
22
|
* tant que la rotation est active, pour que les enfants recréés en cours
|
|
17
23
|
* de route (createYinYangChildren) démarrent immédiatement avec les mêmes
|
|
@@ -22,7 +28,7 @@ export declare class YinYangController implements IYinYangController {
|
|
|
22
28
|
private readonly ACTION_DRAG_THRESHOLD_PX;
|
|
23
29
|
private actionStackController;
|
|
24
30
|
private childActionMenuController;
|
|
25
|
-
private
|
|
31
|
+
private keyEventMenuController;
|
|
26
32
|
private forceFieldDetailsPanel;
|
|
27
33
|
private forceFieldRenderer;
|
|
28
34
|
/** Champ d'événement — liens cœur → satellites amplifiés par l'Événement
|
|
@@ -41,6 +47,8 @@ export declare class YinYangController implements IYinYangController {
|
|
|
41
47
|
private actionStackManager;
|
|
42
48
|
private state;
|
|
43
49
|
private childrenBuilder;
|
|
50
|
+
private idleFacettes;
|
|
51
|
+
private onIdleViewChange;
|
|
44
52
|
private componentSwitch;
|
|
45
53
|
private incomingForceField;
|
|
46
54
|
private detailsPresenter;
|
|
@@ -56,6 +64,39 @@ export declare class YinYangController implements IYinYangController {
|
|
|
56
64
|
* Constructor to initialize the controller with its model, view, and factory.
|
|
57
65
|
*/
|
|
58
66
|
constructor(model: IYinYangModel, view: IYinYangView, factory: IYinYangAppFactory);
|
|
67
|
+
/** Sous-état d'Idle affiché quand aucune Facette n'est ouverte : arcs
|
|
68
|
+
* pondérés (« arcs ») ou un satellite yin/yang par facette (« facettes »). */
|
|
69
|
+
getIdleView(): IdleView;
|
|
70
|
+
/** Crochets de l'hôte autour du sous-état Idle « tab » : `beforeEnter`
|
|
71
|
+
* (attendu avant le calcul de la grille — ex. replier des panneaux pour
|
|
72
|
+
* agrandir le conteneur du diagramme) et `afterLeave` (satellites revenus
|
|
73
|
+
* à leur place radiale — ex. rétablir ces panneaux). */
|
|
74
|
+
setIdleTabHooks(hooks: IdleTabHooks | null): void;
|
|
75
|
+
/** Rappel de l'hôte à chaque changement de sous-état Idle (ex. refléter
|
|
76
|
+
* l'état d'un bouton « Arcs »). */
|
|
77
|
+
setOnIdleViewChange(callback: ((view: IdleView) => void) | null): void;
|
|
78
|
+
/** Bascule vers un sous-état d'Idle. Hors Idle (Facette ouverte), le choix
|
|
79
|
+
* est seulement mémorisé : il s'appliquera à la fermeture de la Facette. */
|
|
80
|
+
setIdleView(view: IdleView): Promise<void>;
|
|
81
|
+
private isEventFieldInIdleFacettes;
|
|
82
|
+
/** Amène le diagramme en Idle « facettes » — en refermant la Facette
|
|
83
|
+
* ouverte s'il le faut. Résolu une fois les satellites-facettes sortis. */
|
|
84
|
+
private showIdleFacettes;
|
|
85
|
+
/** Clic sur le cœur du lobe dominant en Facette : referme la Facette et
|
|
86
|
+
* revient à la cause en Idle « facettes », quel que soit le sous-état
|
|
87
|
+
* Idle mémorisé. */
|
|
88
|
+
onFacetteCoreClicked(): void;
|
|
89
|
+
/** Clic sur l'illustration centrale : facettes ↔ tab (sans effet hors Idle
|
|
90
|
+
* et en « arcs »). */
|
|
91
|
+
toggleIdleView(): Promise<void>;
|
|
92
|
+
/** Superpose (ou retire, `null`) la lecture d'un contact à une
|
|
93
|
+
* signature d'obstacle (OBS-UI-01) — voir
|
|
94
|
+
* IdleFacettesController.setModulation. */
|
|
95
|
+
setFacetModulation(modulation: FacetModulation | null, options?: FacetModulationOptions): Promise<void>;
|
|
96
|
+
/** Vrai quand le sous-état Idle « facettes » est visé (arcs repliés). */
|
|
97
|
+
isIdleFacettesActive(): boolean;
|
|
98
|
+
/** Réaligne le sous-état Idle après une entrée/sortie d'Idle. */
|
|
99
|
+
syncIdleView(): void;
|
|
59
100
|
/**
|
|
60
101
|
* Retrieves the number of borders for the YinYang view.
|
|
61
102
|
*/
|
|
@@ -211,6 +252,8 @@ export declare class YinYangController implements IYinYangController {
|
|
|
211
252
|
private setActiveChild;
|
|
212
253
|
private clearActiveChild;
|
|
213
254
|
private animateChildren;
|
|
255
|
+
private destroyed;
|
|
256
|
+
destroy(): void;
|
|
214
257
|
private clearChildren;
|
|
215
258
|
setChildrenOrbitEnabled(isEnabled: boolean, rampMs?: number): void;
|
|
216
259
|
/** Arrête l'orbite des satellites en rejoignant leur position de base dans
|
|
@@ -307,10 +350,37 @@ export declare class YinYangController implements IYinYangController {
|
|
|
307
350
|
* Fermeture du menu radial d'un satellite et de l'action qu'il projetait
|
|
308
351
|
* (champ de force, ghosts, bloc d'action du panneau) — chemin unique partagé
|
|
309
352
|
* par la hiérarchie (deactivateChildMenuFromHierarchy) et par l'exclusivité
|
|
310
|
-
* action/événement (
|
|
353
|
+
* action/événement (toggleKeyEventMenu, previewKeyEvent). No-op si aucun
|
|
311
354
|
* satellite n'est actif.
|
|
312
355
|
*/
|
|
313
356
|
private closeChildActionMenu;
|
|
357
|
+
/**
|
|
358
|
+
* Sélection courante du diagramme — satellite, sinon ODD mis en valeur,
|
|
359
|
+
* sinon facette ; null en vue Sphère (aucune facette ouverte). Sert à
|
|
360
|
+
* mémoriser la sélection propre à un mode au moment de le quitter (voir
|
|
361
|
+
* PanelManager.rememberStackSelection).
|
|
362
|
+
*/
|
|
363
|
+
getDiagramSelection(): {
|
|
364
|
+
type: "composante";
|
|
365
|
+
componentIndex: number;
|
|
366
|
+
} | {
|
|
367
|
+
type: "odd";
|
|
368
|
+
componentIndex: number;
|
|
369
|
+
oddId: string;
|
|
370
|
+
} | {
|
|
371
|
+
type: "cutting";
|
|
372
|
+
componentIndex: number;
|
|
373
|
+
oddId: string;
|
|
374
|
+
cuttingIndex: number;
|
|
375
|
+
} | null;
|
|
376
|
+
/**
|
|
377
|
+
* Remet le diagramme à blanc sous la facette courante — satellite
|
|
378
|
+
* désélectionné (menu et action projetée compris), ODD éteint — avant d'y
|
|
379
|
+
* rejouer la sélection mémorisée d'un mode. La facette elle-même reste
|
|
380
|
+
* ouverte (vue ODD quittée) : c'est la sélection rejouée qui décide de la
|
|
381
|
+
* garder, d'en changer ou de la fermer.
|
|
382
|
+
*/
|
|
383
|
+
clearDiagramSelection(): void;
|
|
314
384
|
deactivateComposanteFromHierarchy(): void;
|
|
315
385
|
/**
|
|
316
386
|
* Fermeture de la facette courante — chemin unique partagé par l'arc de
|
|
@@ -335,7 +405,7 @@ export declare class YinYangController implements IYinYangController {
|
|
|
335
405
|
*/
|
|
336
406
|
syncForceFieldToStackMode(): void;
|
|
337
407
|
/**
|
|
338
|
-
* Recalcule le Champ d'événement pour le mode courant —
|
|
408
|
+
* Recalcule les bulles et le Champ d'événement pour le mode courant — APRÈS que
|
|
339
409
|
* l'onglet a réellement basculé (les gardes RECHERCHE/STACK, elles, tournent
|
|
340
410
|
* en phase de capture, avant le toggle de `ff-tab-active`, et liraient donc
|
|
341
411
|
* encore l'ancien mode via isStackModeActive).
|
|
@@ -364,18 +434,20 @@ export declare class YinYangController implements IYinYangController {
|
|
|
364
434
|
/** Centre automatiquement (scroll animé) le bloc "Effets cumulés" correspondant
|
|
365
435
|
* à cet item de pile, dès qu'il apparaît dans le panneau — voir
|
|
366
436
|
* ForceFieldDetailsPanel.requestScrollToStackItemBlock. */
|
|
437
|
+
private _guidedEventPreviewItem;
|
|
367
438
|
/**
|
|
368
439
|
* Glisser guidé d'un prérequis depuis RECHERCHE : la bascule vers STACK
|
|
369
440
|
* faite par le glisser (switchToTab direct, sans le clic d'onglet qui
|
|
370
441
|
* appelle syncForceFieldToStackMode) laissait le panneau sur le satellite
|
|
371
442
|
* de l'action glissée — encore absente de la pile, donc sans aucun bloc.
|
|
372
443
|
* On resynchronise les champs de la pile comme un vrai passage en STACK,
|
|
373
|
-
* puis on affiche les blocs du satellite de l'action portant le combo
|
|
444
|
+
* puis on affiche les blocs du satellite de l'action portant le combo
|
|
445
|
+
* ou l'aperçu de l'action ciblée par l'événement,
|
|
374
446
|
* sans déplacer la sélection du diagramme (le dépôt s'en charge).
|
|
375
447
|
*/
|
|
376
448
|
private showStackItemBlocksForDrag;
|
|
377
449
|
/**
|
|
378
|
-
* Sélectionne le satellite porteur d'un item de pile (diagramme + panneau)
|
|
450
|
+
* Sélectionne le satellite porteur ou la Facette d'origine d'un item de pile (diagramme + panneau)
|
|
379
451
|
* et centre son bloc — même effet qu'un clic sur le libellé de l'item
|
|
380
452
|
* (voir setOnSelectStackItemSatellite dans DiagramPanelBridge).
|
|
381
453
|
*/
|
|
@@ -399,7 +471,8 @@ export declare class YinYangController implements IYinYangController {
|
|
|
399
471
|
setOnDirectActionBlock(show: (compId: string, oddId: string, cutIdx: number, actionId: string, cardsHtml: string, attachHandlers: (container: HTMLElement) => void) => void, clear: () => void): void;
|
|
400
472
|
/** Wire from main.ts — injecte la carte descriptive d'un Événement Clé dans l'onglet Recherche. */
|
|
401
473
|
setOnShowKeyEventBlock(show: (compId: string, keyEventId: string, cardsHtml: string, attachHandlers: (container: HTMLElement) => void) => void, clear: () => void): void;
|
|
402
|
-
/** Enregistre le miroir "
|
|
474
|
+
/** Enregistre le miroir "bulles d'Événements Clés déployées sur quel
|
|
475
|
+
* satellite-facette ?" vers la hiérarchie RECHERCHE. */
|
|
403
476
|
setOnKeyEventMenuStateChange(cb: (componentIndex: number, open: boolean) => void): void;
|
|
404
477
|
/** Wire from main.ts — affiche le bloc d'action directe d'un prérequis dans le panneau B. */
|
|
405
478
|
setOnDirectActionBlockPanelB(show: (compId: string, oddId: string, cutIdx: number, actionId: string, cardsHtml: string, attachHandlers: (container: HTMLElement) => void) => void): void;
|
|
@@ -425,6 +498,19 @@ export declare class YinYangController implements IYinYangController {
|
|
|
425
498
|
setOnDiagramOddChange(cb: (componentIndex: number, oddId: string, mode: "highlight") => void): void;
|
|
426
499
|
/** Wire from main.ts to sync the search panel on composante / cutting / action clicks. */
|
|
427
500
|
setOnDiagramNavChange(cb: (event: DiagramNavEvent) => void): void;
|
|
501
|
+
/** Consulter un autre satellite garde l'action active (et son champ de
|
|
502
|
+
* force) : toujours en STACK, en RECHERCHE seulement avec un panneau
|
|
503
|
+
* verrouillé — voir openActionMenuFromChild. */
|
|
504
|
+
private keepsActiveActionOnSatelliteSwitch;
|
|
505
|
+
setIsAnyRecherchePanelLocked(cb: () => boolean): void;
|
|
506
|
+
/** Multi-blocs : un panneau RECHERCHE verrouillé sur une action la fige
|
|
507
|
+
* comme action source — les boutons d'action s'estompent et un clic
|
|
508
|
+
* dessus est refusé (voir onActionSelectionBlocked). */
|
|
509
|
+
setActionSelectionLock(isLocked: () => boolean, onBlocked: (retry: () => void) => void): void;
|
|
510
|
+
private isActionSelectionLocked;
|
|
511
|
+
/** Redessine le menu d'actions du satellite sélectionné — après un
|
|
512
|
+
* (dé)verrouillage de panneau, qui change l'estompage des boutons. */
|
|
513
|
+
refreshChildActionMenu(): void;
|
|
428
514
|
setOnDiagramSatelliteDeselect(cb: (componentIndex: number) => void): void;
|
|
429
515
|
setOnDiagramComposanteDeselect(cb: () => void): void;
|
|
430
516
|
setOnDiagramChildHover(cb: (componentIndex: number | null, oddId: string | null, cuttingIndex?: number) => void): void;
|
|
@@ -466,9 +552,9 @@ export declare class YinYangController implements IYinYangController {
|
|
|
466
552
|
setChildActionMenuItemDistance(distance: number): void;
|
|
467
553
|
setChildActionMenuItemScale(scale: number): void;
|
|
468
554
|
setChildActionIconFontScale(scale: number): void;
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
555
|
+
setKeyEventMenuDistanceOffset(offset: number): void;
|
|
556
|
+
setKeyEventMenuItemScale(scale: number): void;
|
|
557
|
+
setKeyEventIconFontScale(scale: number): void;
|
|
472
558
|
setChildLabelMaxLines(lines: number): void;
|
|
473
559
|
setLabelShortMaxChars(chars: number): void;
|
|
474
560
|
setOddLabelMaxLines(lines: number): void;
|
|
@@ -487,13 +573,22 @@ export declare class YinYangController implements IYinYangController {
|
|
|
487
573
|
private clearProjectedActionState;
|
|
488
574
|
private applyEmptyGhostProjectionState;
|
|
489
575
|
private updateChildActionMenu;
|
|
490
|
-
/**
|
|
491
|
-
*
|
|
492
|
-
|
|
576
|
+
/**
|
|
577
|
+
* STACK : une bulle par action activée de la pile dont la source est sur
|
|
578
|
+
* la facette affichée, sur son satellite source. Comme les champs de
|
|
579
|
+
* force : l'action en focus ressort, les autres s'estompent, et toutes
|
|
580
|
+
* sont pleines quand aucune n'est en focus.
|
|
581
|
+
*/
|
|
582
|
+
private buildStackDetachedBubbles;
|
|
583
|
+
/**
|
|
584
|
+
* RECHERCHE multi-blocs (panneau verrouillé) : l'action active garde ses
|
|
585
|
+
* champs de force pendant qu'on consulte un autre satellite — sa bulle
|
|
586
|
+
* reste donc visible sur la source, que le menu radial ne montre plus.
|
|
587
|
+
*/
|
|
588
|
+
private buildRechercheDetachedBubbles;
|
|
493
589
|
/** Sélectionne (ouvre) le satellite `childKey` de la facette courante,
|
|
494
590
|
* comme un clic dessus — sans toggle-close s'il est déjà actif. */
|
|
495
591
|
private selectSatelliteByKey;
|
|
496
|
-
onCoreEventNucleusClicked(): void;
|
|
497
592
|
searchNavigateToKeyEvent(keyEventId: string): void;
|
|
498
593
|
restoreKeyEventDiagramState(keyEventId: string): void;
|
|
499
594
|
searchSetKeyEventMenuOpen(componentIndex: number, open: boolean): void;
|
|
@@ -554,7 +649,7 @@ export declare class YinYangController implements IYinYangController {
|
|
|
554
649
|
/**
|
|
555
650
|
* Mode adverse (outil de debug, voir adverseMode.ts) : les actions et
|
|
556
651
|
* Événements adverses remplacent les ordinaires sur le diagramme (bulles
|
|
557
|
-
* des satellites
|
|
652
|
+
* des satellites et des satellites-facettes) et dans l'arbre RECHERCHE — qui se
|
|
558
653
|
* reconstruit seul à la bascule. La pile n'est jamais filtrée.
|
|
559
654
|
*
|
|
560
655
|
* Hors STACK, l'action ou l'Événement en aperçu de l'autre bord perdrait
|
|
@@ -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
|