@micheeeeel/yinyangapp 1.0.6 → 2.0.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/README.md +105 -0
- package/dist/bundle.js +2 -1
- package/dist/bundle.js.LICENSE.txt +1 -0
- package/dist/types/adapters/yinYangAdapter.d.ts +10 -0
- package/dist/types/animations/AnimationsMngr.d.ts +7 -19
- package/dist/types/api-film.d.ts +22 -0
- package/dist/types/api.d.ts +48 -0
- package/dist/types/benchmark/runner.d.ts +5 -0
- package/dist/types/benchmark/scenarios.d.ts +118 -0
- package/dist/types/components/action-image/ActionImageModal.d.ts +42 -0
- package/dist/types/components/controller/YinYangController.d.ts +946 -18
- package/dist/types/components/controller/action-stack/ActionStackController.d.ts +149 -0
- package/dist/types/components/controller/action-stack/ActionStackDragHandler.d.ts +111 -0
- package/dist/types/components/controller/action-stack/ActionStackManager.d.ts +118 -0
- package/dist/types/components/controller/action-stack/ActionStackState.d.ts +169 -0
- package/dist/types/components/controller/actions/ActionProjectionService.d.ts +73 -0
- package/dist/types/components/controller/actions/ChildActionMenuController.d.ts +83 -0
- package/dist/types/components/controller/actions/CoreEventMenuController.d.ts +90 -0
- package/dist/types/components/controller/actions/radialItemMenu.d.ts +117 -0
- package/dist/types/components/controller/children/ChildInteractionController.d.ts +38 -0
- package/dist/types/components/controller/children/ChildrenOrbitService.d.ts +14 -0
- package/dist/types/components/controller/force-field/EventFieldLifecycleController.d.ts +104 -0
- package/dist/types/components/controller/force-field/EventFieldRenderer.d.ts +86 -0
- package/dist/types/components/controller/force-field/ForceFieldComputationService.d.ts +50 -0
- package/dist/types/components/controller/force-field/ForceFieldDetailsPanel.d.ts +639 -0
- package/dist/types/components/controller/force-field/ForceFieldLifecycleController.d.ts +53 -0
- package/dist/types/components/controller/force-field/ForceFieldRenderer.d.ts +67 -0
- package/dist/types/components/controller/force-field/types.d.ts +42 -0
- package/dist/types/components/controller/labels/ChildScoresDeltaRenderer.d.ts +33 -0
- package/dist/types/components/controller/labels/ContextLabelsRenderer.d.ts +155 -0
- package/dist/types/components/controller/labels/WeightPreviewRingRenderer.d.ts +61 -0
- package/dist/types/components/controller/odd/ChildrenOrbitManager.d.ts +25 -0
- package/dist/types/components/controller/odd/OddViewManager.d.ts +44 -0
- package/dist/types/components/controller/search/SearchPanelSynchronizer.d.ts +125 -0
- package/dist/types/components/controller/settings/ControllerSettingsApplier.d.ts +50 -0
- package/dist/types/components/controller/state/BlockingAnimationTracker.d.ts +17 -0
- package/dist/types/components/controller/state/YinYangControllerState.d.ts +176 -0
- package/dist/types/components/controller/utils/actionStackMath.d.ts +13 -0
- package/dist/types/components/controller/utils/actionStackReorder.d.ts +7 -0
- package/dist/types/components/controller/utils/childrenOrbit.d.ts +18 -0
- package/dist/types/components/controller/utils/cuttingLabels.d.ts +9 -0
- package/dist/types/components/controller/utils/eventFieldStyle.d.ts +13 -0
- package/dist/types/components/controller/utils/eventFieldTargets.d.ts +47 -0
- package/dist/types/components/controller/utils/forceFieldMetadata.d.ts +4 -0
- package/dist/types/components/controller/utils/forceFieldPresentation.d.ts +9 -0
- package/dist/types/components/controller/utils/forceFieldStyle.d.ts +10 -0
- package/dist/types/components/controller/utils/labelGeometry.d.ts +5 -0
- package/dist/types/components/controller/utils/oddCutting.d.ts +2 -0
- package/dist/types/components/controller/utils/svgCoordinates.d.ts +9 -0
- package/dist/types/components/controller/utils/svgTransform.d.ts +5 -0
- package/dist/types/components/controller/utils/textLayout.d.ts +2 -0
- package/dist/types/components/controls/VizControlsPanel.d.ts +14 -0
- package/dist/types/components/factory/YinYangAppFactory.d.ts +4 -6
- package/dist/types/components/model/YinYangModel.d.ts +4 -30
- package/dist/types/components/panel/DiagramPanelBridge.d.ts +34 -0
- package/dist/types/components/panel/PanelManager.d.ts +150 -0
- package/dist/types/components/search/GlobalSearchController.d.ts +396 -0
- package/dist/types/components/stack-nav/StackNavOverlay.d.ts +82 -0
- package/dist/types/components/view/BorderDrawer.d.ts +203 -13
- package/dist/types/components/view/SpikeDrawer.d.ts +37 -31
- package/dist/types/components/view/ViewInitializer.d.ts +438 -2
- package/dist/types/components/view/YinYangDrawer.d.ts +414 -11
- package/dist/types/config/animationConfig.d.ts +37 -0
- package/dist/types/config/deltaColors.d.ts +64 -0
- package/dist/types/config/labelStyleConfig.d.ts +50 -0
- package/dist/types/data/OddCategoryColors.d.ts +12 -2
- package/dist/types/data/adverse-action-planner.d.ts +51 -0
- package/dist/types/data/adverse-action-planner.test.d.ts +1 -0
- package/dist/types/data/amplifier-engine.d.ts +107 -0
- package/dist/types/data/amplifier-engine.test.d.ts +1 -0
- package/dist/types/data/combo-engine.d.ts +94 -0
- package/dist/types/data/combo-engine.test.d.ts +1 -0
- package/dist/types/data/odd_generic_descriptions.d.ts +4 -0
- package/dist/types/data/odd_labels.d.ts +5 -0
- package/dist/types/data/yasuni_actions.d.ts +47 -0
- package/dist/types/data/yasuni_adverse_actions.d.ts +2 -0
- package/dist/types/data/yasuni_adverse_key_events.d.ts +2 -0
- package/dist/types/data/yasuni_cause.d.ts +33 -0
- package/dist/types/data/yasuni_graph.d.ts +22 -0
- package/dist/types/data/yasuni_key_events.d.ts +61 -0
- package/dist/types/data/yasuni_propagation_layers.d.ts +3 -0
- package/dist/types/interfaces/IActions.d.ts +1 -0
- package/dist/types/interfaces/ICauseGraph.d.ts +9 -0
- package/dist/types/interfaces/ICauseModel.d.ts +33 -0
- package/dist/types/interfaces/IGraphicsStrategy.d.ts +9 -5
- package/dist/types/interfaces/IPropagationLayers.d.ts +27 -0
- package/dist/types/interfaces/IViewData.d.ts +12 -0
- package/dist/types/interfaces/IYinYangAppFactory.d.ts +3 -3
- package/dist/types/interfaces/IYinYangController.d.ts +301 -6
- package/dist/types/interfaces/IYinYangGeometry.d.ts +43 -0
- package/dist/types/interfaces/IYinYangInternalModel.d.ts +34 -0
- package/dist/types/interfaces/IYinYangModel.d.ts +3 -11
- package/dist/types/main.d.ts +9 -0
- package/dist/types/utils/actionImages.d.ts +14 -0
- package/dist/types/utils/actionPropagation.d.ts +74 -0
- package/dist/types/utils/appMode.d.ts +5 -0
- package/dist/types/utils/causeGraph.d.ts +6 -0
- package/dist/types/utils/causeMetrics.d.ts +26 -0
- package/dist/types/utils/chainCardHeight.d.ts +27 -0
- package/dist/types/utils/d3/D3Element.d.ts +2 -2
- package/dist/types/utils/d3/D3GraphicsStrategy.d.ts +21 -4
- package/dist/types/utils/deltaChips.d.ts +15 -0
- package/dist/types/utils/deltaLabels.d.ts +54 -0
- package/dist/types/utils/facetteImages.d.ts +1 -0
- package/dist/types/utils/geometryUtils.d.ts +0 -1
- package/dist/types/utils/hierBadge.d.ts +44 -0
- package/dist/types/utils/idleSphereImage.d.ts +8 -0
- package/dist/types/utils/keyEventImages.d.ts +41 -0
- package/dist/types/utils/oddLegend.d.ts +30 -0
- package/dist/types/utils/positionalEfficiency.d.ts +16 -0
- package/dist/types/utils/yinYangWatermark.d.ts +29 -0
- package/package.json +27 -12
- package/dist/index.html +0 -1
- package/dist/types/data/coupe_rase_Orangs-outans/data_Kalimantan.d.ts +0 -3
- package/dist/types/data/coupe_rase_Orangs-outans/data_PT_Mayawana_Persada.d.ts +0 -3
- package/dist/types/data/data_institu_bancaire.d.ts +0 -3
- package/dist/types/interfaces/IOddItem.d.ts +0 -6
- package/dist/types/script.d.ts +0 -13
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
export interface SearchEntry {
|
|
2
|
+
componentId: string;
|
|
3
|
+
componentIndex: number;
|
|
4
|
+
componentName: string;
|
|
5
|
+
oddId: string;
|
|
6
|
+
oddName: string;
|
|
7
|
+
cuttingId: number;
|
|
8
|
+
cuttingIndex: number;
|
|
9
|
+
cuttingName: string;
|
|
10
|
+
actionId: string;
|
|
11
|
+
actionName: string;
|
|
12
|
+
}
|
|
13
|
+
export type SearchNavTarget = {
|
|
14
|
+
type: "composante";
|
|
15
|
+
componentIndex: number;
|
|
16
|
+
} | {
|
|
17
|
+
type: "odd";
|
|
18
|
+
componentIndex: number;
|
|
19
|
+
oddId: string;
|
|
20
|
+
} | {
|
|
21
|
+
type: "cutting";
|
|
22
|
+
componentIndex: number;
|
|
23
|
+
oddId: string;
|
|
24
|
+
cuttingIndex: number;
|
|
25
|
+
} | {
|
|
26
|
+
type: "action";
|
|
27
|
+
componentIndex: number;
|
|
28
|
+
oddId: string;
|
|
29
|
+
cuttingIndex: number;
|
|
30
|
+
actionId: string;
|
|
31
|
+
} | {
|
|
32
|
+
type: "keyEvent";
|
|
33
|
+
componentIndex: number;
|
|
34
|
+
keyEventId: string;
|
|
35
|
+
};
|
|
36
|
+
export interface GlobalSearchControllerOptions {
|
|
37
|
+
/** Appelé quand l'utilisateur clique sur un label ou une action */
|
|
38
|
+
onNavigate: (target: SearchNavTarget) => void;
|
|
39
|
+
/** Nombre max de résultats affichés en mode arbre filtré (défaut : 500) */
|
|
40
|
+
maxResults?: number;
|
|
41
|
+
/** Mode contexte : affiche uniquement le chemin ciblé, sans barre de recherche. */
|
|
42
|
+
contextMode?: boolean;
|
|
43
|
+
/** Affiche la description dans le panneau de détail même pour les cibles de type "action". */
|
|
44
|
+
alwaysShowDesc?: boolean;
|
|
45
|
+
/** Appelé quand un élément sélectionné est re-cliqué (désélection/repli) ou que la composante
|
|
46
|
+
* parente est repliée alors qu'un cutting/action était actif. Permet de synchroniser le
|
|
47
|
+
* diagramme (fermer le menu d'action du satellite). */
|
|
48
|
+
onDeselect?: (target: SearchNavTarget) => void;
|
|
49
|
+
/** Appelé au dépli/repli du groupe "Événements Clés" d'une facette. Le groupe
|
|
50
|
+
* n'est pas une cible de navigation (pas de data-nav-key, rien à
|
|
51
|
+
* sélectionner) mais il a bien un pendant dans le diagramme : le menu radial
|
|
52
|
+
* des Événements Clés, déployé depuis le cœur du yin/yang. */
|
|
53
|
+
onKeyEventGroupToggle?: (componentIndex: number, open: boolean) => void;
|
|
54
|
+
}
|
|
55
|
+
export declare class GlobalSearchController {
|
|
56
|
+
private readonly index;
|
|
57
|
+
private readonly actionMap;
|
|
58
|
+
private readonly options;
|
|
59
|
+
private inputEl;
|
|
60
|
+
private listEl;
|
|
61
|
+
private clearBtn;
|
|
62
|
+
private activeIndex;
|
|
63
|
+
private currentResults;
|
|
64
|
+
/** Référence directe à l'item actuellement surligné (évite O(n) querySelectorAll). */
|
|
65
|
+
private _activeItemEl;
|
|
66
|
+
/** Timer de debounce pour l'input de recherche. */
|
|
67
|
+
private _inputDebounceTimer;
|
|
68
|
+
/** Vrai quand le rendu courant est un arbre filtré (query non vide). */
|
|
69
|
+
private _filteredTreeMode;
|
|
70
|
+
/** Cache hex + rgb par oddId — calculé une seule fois au démarrage. */
|
|
71
|
+
private readonly oddRgbCache;
|
|
72
|
+
/** Index composante id → index pour décodage O(1) des data-nav-key. */
|
|
73
|
+
private readonly compIdToIndex;
|
|
74
|
+
/** Vrai si le panneau est en mode contexte (chemin unique, pas de barre de recherche). */
|
|
75
|
+
private readonly _contextMode;
|
|
76
|
+
private _onHover?;
|
|
77
|
+
private _onTitleUpdate?;
|
|
78
|
+
private onActionDragStart?;
|
|
79
|
+
private onKeyEventDragStart?;
|
|
80
|
+
private openComposanteId;
|
|
81
|
+
private openOddKey;
|
|
82
|
+
private openCuttingKey;
|
|
83
|
+
/** Facette dont le groupe "Événements Clés" est déplié (un seul à la fois). */
|
|
84
|
+
private openEvtGroupId;
|
|
85
|
+
/** Événement Clé dont les Actions cibles sont surlignées (survol prioritaire sur sélection). */
|
|
86
|
+
private _amplifierKeyEventId;
|
|
87
|
+
private expandedDescId;
|
|
88
|
+
private selectedNavKey;
|
|
89
|
+
/** Bloc d'impact d'action directe injecté inline sous un cutting dans l'arbre. */
|
|
90
|
+
private _currentImpactBlock;
|
|
91
|
+
/** Vrai quand le panneau est verrouillé : toute navigation utilisateur est bloquée. */
|
|
92
|
+
private _navigationLocked;
|
|
93
|
+
/** Vrai quand l'utilisateur a manuellement épinglé le bloc d'impact (via le bouton lock). */
|
|
94
|
+
private _impactBlockLocked;
|
|
95
|
+
/** Vrai quand le bloc a été masqué suite à une navigation vers un élément hors action (non locké). */
|
|
96
|
+
private _impactBlockHidden;
|
|
97
|
+
/** Carte descriptive d'un Événement Clé, injectée dans le panneau de détail
|
|
98
|
+
* (droite) — parallèle à _currentImpactBlock mais volontairement séparée :
|
|
99
|
+
* un Événement Clé n'a pas (encore) d'entrée dans l'arbre Recherche, donc
|
|
100
|
+
* pas de repli "arbre inline", pas d'épinglage, pas de oddId/cutIdx. */
|
|
101
|
+
private _currentKeyEventBlock;
|
|
102
|
+
/** Bloc d'action propagée injecté inline sous un cutting cible dans l'arbre. */
|
|
103
|
+
private _currentPropagationBlock;
|
|
104
|
+
/** Panneau de détail (droite de l'onglet Recherche) — reçoit descriptions + blocs. */
|
|
105
|
+
private _detailPanelEl;
|
|
106
|
+
/** Nom/description de la sphère, affichés dans le placeholder tant qu'aucune
|
|
107
|
+
* facette n'est active (voir _syncPlaceholder). Non renseignés = placeholder par défaut. */
|
|
108
|
+
private _sphereName;
|
|
109
|
+
private _sphereDescription;
|
|
110
|
+
/** Enregistre les infos de la sphère à afficher dans le panneau de détail quand rien n'est sélectionné. */
|
|
111
|
+
setSphereInfo(name: string, description: string): void;
|
|
112
|
+
/** Container persistant pour l'arbre browse — construit une seule fois, jamais reconstruit. */
|
|
113
|
+
private _browseContainer;
|
|
114
|
+
private _compWrappers;
|
|
115
|
+
private _compToggles;
|
|
116
|
+
private _oddWrappers;
|
|
117
|
+
private _oddToggles;
|
|
118
|
+
private _cutWrappers;
|
|
119
|
+
private _cutToggles;
|
|
120
|
+
private _evtGroupWrappers;
|
|
121
|
+
private _evtGroupToggles;
|
|
122
|
+
private _navRows;
|
|
123
|
+
private _descWrappers;
|
|
124
|
+
private _descBtns;
|
|
125
|
+
constructor(options: GlobalSearchControllerOptions);
|
|
126
|
+
mount(containerOrId: string | HTMLElement): void;
|
|
127
|
+
/**
|
|
128
|
+
* Événements Clés correspondant à la requête, groupés par facette.
|
|
129
|
+
*
|
|
130
|
+
* Match sur `name` et `shortDescription` **uniquement**, jamais via les
|
|
131
|
+
* actions ciblées : faire remonter un événement parce qu'une action fille
|
|
132
|
+
* matche afficherait deux fois la même action dans les résultats — une fois
|
|
133
|
+
* sous son Satellite, une fois sous l'événement.
|
|
134
|
+
*/
|
|
135
|
+
private searchKeyEvents;
|
|
136
|
+
private search;
|
|
137
|
+
private handleInput;
|
|
138
|
+
private handleKeyDown;
|
|
139
|
+
/**
|
|
140
|
+
* Version debounceée de handleInput(), utilisée par le listener "input".
|
|
141
|
+
* Les appels programmatiques (clear, Escape, setQuery) appellent handleInput() directement.
|
|
142
|
+
*/
|
|
143
|
+
private debouncedHandleInput;
|
|
144
|
+
/**
|
|
145
|
+
* Configure les écouteurs délégués sur listEl (clic, pointerdown, survol).
|
|
146
|
+
* Monté une seule fois dans mount() — couvre l'arbre ET la liste plate,
|
|
147
|
+
* éliminant les N listeners inline recréés à chaque renderTree().
|
|
148
|
+
*/
|
|
149
|
+
private setupDelegatedListeners;
|
|
150
|
+
/** Décode un data-nav-key en SearchNavTarget. O(1) grâce à compIdToIndex. */
|
|
151
|
+
private _decodeNavKey;
|
|
152
|
+
private _clearNodeCaches;
|
|
153
|
+
/** Relit le DOM fraîchement construit et peuple les Maps de références. Appelé une fois à la fin de chaque rendu. */
|
|
154
|
+
private _rebuildNodeCaches;
|
|
155
|
+
private renderTree;
|
|
156
|
+
/**
|
|
157
|
+
* Ajoute le groupe "Événements Clés" en fin de liste des enfants d'une
|
|
158
|
+
* Facette : un séparateur libellé, puis une ligne par Événement Clé.
|
|
159
|
+
*
|
|
160
|
+
* Le séparateur est une étiquette, pas un niveau de hiérarchie — il n'a ni
|
|
161
|
+
* data-nav-key ni sélection, et ses enfants gardent l'indentation des
|
|
162
|
+
* Satellites. C'est ce qui préserve l'invariant "une Action est toujours
|
|
163
|
+
* rangée sous un Satellite".
|
|
164
|
+
*
|
|
165
|
+
* Une ligne Événement Clé est une **feuille** : elle ne se déplie pas. La
|
|
166
|
+
* liste de ses Actions cibles est déjà portée par sa carte dans le panneau
|
|
167
|
+
* de détail — la répéter dans l'arbre serait un doublon. Le lien vers ces
|
|
168
|
+
* actions s'exprime ici par le projecteur ambre (voir _setAmplifierHighlight),
|
|
169
|
+
* qui les désigne là où elles vivent vraiment, sous leur Satellite.
|
|
170
|
+
*
|
|
171
|
+
* `alwaysOpen` force l'ouverture du groupe (arbre filtré, tout déplié).
|
|
172
|
+
*/
|
|
173
|
+
private appendKeyEventGroup;
|
|
174
|
+
private renderFilteredTree;
|
|
175
|
+
private renderContextEmptyState;
|
|
176
|
+
/**
|
|
177
|
+
* Rend le chemin unique composante → ODD → cutting dans le panneau Éclairage.
|
|
178
|
+
* Quand actionId est fourni (bloc d'action directe), les actions du cutting sont affichées.
|
|
179
|
+
* Quand actionId est absent (bloc propagé), les actions sont omises — le bloc injecté
|
|
180
|
+
* suffit ; le div [data-cut-wrapper] reste présent comme ancre d'injection.
|
|
181
|
+
*/
|
|
182
|
+
private renderContextPath;
|
|
183
|
+
/** Retourne `true` quand l'appel a replié la facette courante (fermeture),
|
|
184
|
+
* `false` quand il en a ouvert une autre. Une fermeture est traitée par
|
|
185
|
+
* l'appelant comme un retour en mode Sphère — diagramme et descriptif
|
|
186
|
+
* (voir resetToSphereView). */
|
|
187
|
+
private toggleComposante;
|
|
188
|
+
private toggleOdd;
|
|
189
|
+
private setComposanteOpen;
|
|
190
|
+
private setOddOpen;
|
|
191
|
+
private toggleCutting;
|
|
192
|
+
private setCuttingOpen;
|
|
193
|
+
/**
|
|
194
|
+
* Groupe "Événements Clés" d'une facette — un seul déplié à la fois.
|
|
195
|
+
*
|
|
196
|
+
* Synchronise le diagramme comme le fait le dépli d'un Satellite pour ses
|
|
197
|
+
* boutons d'Action : ouvrir le groupe déploie le menu radial des Événements
|
|
198
|
+
* Clés de la facette, le refermer le rétracte. Seul le dépli venu d'un clic
|
|
199
|
+
* utilisateur émet — applyTreeSync ouvre le groupe en écrivant directement
|
|
200
|
+
* openEvtGroupId (diagramme → arbre), sans repasser par ici, donc pas de
|
|
201
|
+
* boucle de rebond.
|
|
202
|
+
*/
|
|
203
|
+
private toggleEvtGroup;
|
|
204
|
+
/**
|
|
205
|
+
* Diagramme → arbre : reflète l'état réel du menu radial des Événements Clés.
|
|
206
|
+
* Le diagramme referme ces bulles de lui-même dans plusieurs cas (ouverture
|
|
207
|
+
* du menu d'un Satellite, fermeture ou changement de facette) ; sans ce
|
|
208
|
+
* miroir, le groupe resterait déplié au-dessus d'un diagramme vide et il
|
|
209
|
+
* aurait fallu deux clics pour le rouvrir (le premier ne faisant que
|
|
210
|
+
* rattraper le décalage). DOM seul — n'émet jamais vers le diagramme.
|
|
211
|
+
*/
|
|
212
|
+
syncKeyEventGroupOpen(componentIndex: number, open: boolean): void;
|
|
213
|
+
private setEvtGroupOpen;
|
|
214
|
+
/**
|
|
215
|
+
* Surligne les lignes Action ciblées par un Événement Clé. Contextuel et non
|
|
216
|
+
* permanent : dans une facette, jusqu'aux deux tiers des Actions sont ciblées
|
|
217
|
+
* par au moins un événement — un liseré permanent noierait la teinte ODD sans
|
|
218
|
+
* jamais dire *par quel* événement.
|
|
219
|
+
*
|
|
220
|
+
* Ne déplie aucun Satellite : l'arbre n'ouvre qu'un cutting à la fois, et une
|
|
221
|
+
* action ciblée vit souvent sous plusieurs. Les lignes déjà visibles se
|
|
222
|
+
* marquent, les autres le seront au dépli de leur Satellite.
|
|
223
|
+
*/
|
|
224
|
+
private _setAmplifierHighlight;
|
|
225
|
+
/** (Ré)applique le surlignage au DOM courant — aussi après reconstruction. */
|
|
226
|
+
private _applyAmplifierHighlight;
|
|
227
|
+
/** Événement Clé sélectionné, s'il y en a un — source par défaut du projecteur. */
|
|
228
|
+
private _selectedKeyEventId;
|
|
229
|
+
private toggleDesc;
|
|
230
|
+
private setDescVisible;
|
|
231
|
+
private restoreExpandedDesc;
|
|
232
|
+
private highlightMatch;
|
|
233
|
+
private syncClearBtn;
|
|
234
|
+
private updateActiveItem;
|
|
235
|
+
private navKeyFromTarget;
|
|
236
|
+
private setSelectedNavKey;
|
|
237
|
+
private restoreSelectedRow;
|
|
238
|
+
private _syncImpactBlockVisibility;
|
|
239
|
+
private emitNav;
|
|
240
|
+
/** Lie le panneau de détail à droite de l'arbre de recherche. */
|
|
241
|
+
setDetailPanel(el: HTMLElement): void;
|
|
242
|
+
/** Callback vers le diagramme quand un chip de la légende ODD est
|
|
243
|
+
* déplié/replié par un clic direct dans le panneau (sens panneau →
|
|
244
|
+
* diagramme — voir syncDiagramOdd pour le sens inverse). */
|
|
245
|
+
private _onOddLegendActiveChangeCb;
|
|
246
|
+
setOnOddLegendActiveChange(cb: (componentIndex: number, oddId: string, isOpen: boolean) => void): void;
|
|
247
|
+
/** Ouvre/ferme la description de cet ODD sous le descriptif actuellement
|
|
248
|
+
* affiché (sphère/facette/satellite), comme un clic direct sur son chip
|
|
249
|
+
* de légende. Retourne `null` si aucun chip pour cet ODD n'est visible
|
|
250
|
+
* dans le contexte courant (no-op), sinon le nouvel état (ouvert/fermé). */
|
|
251
|
+
toggleOddLegendChipById(oddId: string): boolean | null;
|
|
252
|
+
/** Lien visuel bidirectionnel chip légende ODD ↔ arc du diagramme (sens
|
|
253
|
+
* "chip → diagramme") — voir highlightOddLegendChip pour le retour. */
|
|
254
|
+
private _attachOddLegendHover;
|
|
255
|
+
/** Surligne (ou éteint si `oddId` est `null`) le chip de la légende ODD
|
|
256
|
+
* correspondant à l'arc actuellement survolé dans le diagramme. */
|
|
257
|
+
highlightOddLegendChip(oddId: string | null): void;
|
|
258
|
+
/** Masque le placeholder si du contenu est présent ; sinon l'affiche, avec le
|
|
259
|
+
* bloc Sphère si aucune facette n'est active (voir setSphereInfo). */
|
|
260
|
+
private _syncPlaceholder;
|
|
261
|
+
/** Efface la description/les blocs affichés et revient au placeholder (bloc Sphère
|
|
262
|
+
* si renseigné). Utilisé quand une facette est désactivée depuis le diagramme/la hiérarchie. */
|
|
263
|
+
clearDetailDesc(): void;
|
|
264
|
+
/**
|
|
265
|
+
* `desc` accepte soit une chaîne simple (composante/cutting — un seul champ
|
|
266
|
+
* `description`, affiché tel quel, jamais de bouton déplier), soit une paire
|
|
267
|
+
* `{short, full}` (action/keyEvent, qui ont les deux champs) : `short` reste
|
|
268
|
+
* toujours visible, `full` est repliée par défaut et se substitue à `short`
|
|
269
|
+
* au clic sur le bouton dédié (les deux ne s'empilent jamais — `description`
|
|
270
|
+
* est un paragraphe autonome, pas la suite de `shortDescription`).
|
|
271
|
+
*/
|
|
272
|
+
private _buildDetailDescSection;
|
|
273
|
+
/** Affiche la description d'un élément (composante/ODD/cutting/action) dans le panneau de détail. */
|
|
274
|
+
private _showDetailDesc;
|
|
275
|
+
/**
|
|
276
|
+
* Affiche un bloc secondaire (prérequis d'action ou propagation) dans le panneau de détail.
|
|
277
|
+
* Appelé depuis main.ts en remplacement de panelB.showCuttingActionBlock / panelB.showPropagationBlock.
|
|
278
|
+
*/
|
|
279
|
+
showSecondaryBlock(label: string, html: string, key: string, attachHandlers: (container: HTMLElement) => void): void;
|
|
280
|
+
/** Retire le bloc secondaire du panneau de détail. */
|
|
281
|
+
clearSecondaryBlock(): void;
|
|
282
|
+
/** Met à jour le handler de navigation après construction (pour les slots créés avant la liste de slots). */
|
|
283
|
+
setOnNavigate(handler: (target: SearchNavTarget) => void): void;
|
|
284
|
+
/** Enregistre le callback de désélection (re-clic sur un élément sélectionné ou repli de composante). */
|
|
285
|
+
setOnDeselect(handler: (target: SearchNavTarget) => void): void;
|
|
286
|
+
/** Enregistre le callback de dépli/repli du groupe "Événements Clés". */
|
|
287
|
+
setOnKeyEventGroupToggle(handler: (componentIndex: number, open: boolean) => void): void;
|
|
288
|
+
/** Enregistre le callback de survol de l'arbre. */
|
|
289
|
+
setOnHover(handler: (target: SearchNavTarget | null) => void): void;
|
|
290
|
+
/** Enregistre le callback de mise à jour du titre du panneau (badge + nom de l'élément). */
|
|
291
|
+
setOnTitleUpdate(handler: (badge: {
|
|
292
|
+
label: string;
|
|
293
|
+
cssClass: string;
|
|
294
|
+
} | undefined, title: string | undefined, oddColor?: string, stateValue?: number, weightValue?: number, iconUrl?: string) => void): void;
|
|
295
|
+
/** Retourne la cible de navigation actuellement sélectionnée dans l'arbre. */
|
|
296
|
+
getSelectedTarget(): SearchNavTarget | null;
|
|
297
|
+
private _externalHoverNavKey;
|
|
298
|
+
/**
|
|
299
|
+
* Signale visuellement une ligne de l'arbre depuis l'extérieur (ex. survol dans le diagramme).
|
|
300
|
+
* Utilise la classe gs-row-hover-ext, distincte de la sélection (gs-row-selected).
|
|
301
|
+
* Passer null efface le highlight.
|
|
302
|
+
*/
|
|
303
|
+
setExternalHoverNavKey(navKey: string | null): void;
|
|
304
|
+
setOnActionDragStart(cb: (componentIndex: number, oddId: string, cuttingIndex: number, actionId: string, label: string, event: PointerEvent, el: Element) => void): void;
|
|
305
|
+
setOnKeyEventDragStart(cb: (componentIndex: number, keyEventId: string, label: string, event: PointerEvent, el: Element) => void): void;
|
|
306
|
+
setQuery(query: string): void;
|
|
307
|
+
/**
|
|
308
|
+
* Cœur partagé de la synchronisation arbre→diagramme.
|
|
309
|
+
* Ouvre les nœuds nécessaires, sélectionne la ligne et scrolle jusqu'à elle.
|
|
310
|
+
* No-op en mode arbre filtré (query active).
|
|
311
|
+
*/
|
|
312
|
+
private applyTreeSync;
|
|
313
|
+
/** Active ou désactive le mode "action sélectionnée" : bloque les mises à jour d'arbre/sélection pour les cibles non-action. */
|
|
314
|
+
/** Appelé depuis main.ts quand l'utilisateur clique un arc ODD dans le diagramme. */
|
|
315
|
+
syncDiagramOdd(componentIndex: number, oddId: string): void;
|
|
316
|
+
/** Navigue l'arbre jusqu'à la cible. Met aussi à jour l'entête du panneau de détail
|
|
317
|
+
* quand alwaysShowDesc est actif (panneaux contextuels) et qu'aucun bloc primaire
|
|
318
|
+
* n'est déjà affiché — évite d'écraser l'entête d'un bloc d'action directe en cours. */
|
|
319
|
+
syncTreeOnly(target: SearchNavTarget): void;
|
|
320
|
+
/** Navigation vers une action depuis la stack — résout le componentIndex à partir du componentId. */
|
|
321
|
+
locateStackItem(componentId: string, oddId: string, cuttingIndex: number, actionId: string): void;
|
|
322
|
+
/** Appelé depuis main.ts pour les clics composante / cutting / action dans le diagramme. */
|
|
323
|
+
syncDiagramNav(target: SearchNavTarget): void;
|
|
324
|
+
/**
|
|
325
|
+
* Called when the active satellite is deselected in the diagram — toggle-to-close,
|
|
326
|
+
* or an ODD-level interaction taking over. Collapses the open cutting row and
|
|
327
|
+
* restores the detail panel to the (still current) facette's description, so the
|
|
328
|
+
* hierarchy mirrors the diagram closing its action menu and falling back to the
|
|
329
|
+
* facette view rather than being left showing the stale satellite card.
|
|
330
|
+
*/
|
|
331
|
+
clearDiagramNavSelection(componentIndex: number): void;
|
|
332
|
+
/**
|
|
333
|
+
* Retour en mode Sphère : appelé dès qu'une facette est fermée, que ce soit
|
|
334
|
+
* depuis le diagramme (clic sur l'arc de bordure de la facette courante) ou
|
|
335
|
+
* depuis la hiérarchie (repli / désélection de la ligne facette). Replie
|
|
336
|
+
* l'arbre jusqu'à la racine, efface la sélection ET tous les blocs affichés
|
|
337
|
+
* (action directe, Événement Clé, propagation) pour que le panneau retombe
|
|
338
|
+
* sur le descriptif Sphère — un bloc d'action laissé en place bloquerait le
|
|
339
|
+
* placeholder (voir _syncPlaceholder).
|
|
340
|
+
*/
|
|
341
|
+
resetToSphereView(): void;
|
|
342
|
+
/**
|
|
343
|
+
* Injecte le HTML des cartes d'impact directement sous la ligne action dans l'arbre,
|
|
344
|
+
* comme élément frère suivant le <li class="gs-tree-action"> de l'action sélectionnée.
|
|
345
|
+
* Ré-utilisé après chaque renderTree pour que le bloc survive aux reconstructions DOM.
|
|
346
|
+
*/
|
|
347
|
+
private _markActionBeacon;
|
|
348
|
+
private _clearActionBeacon;
|
|
349
|
+
/** Verrouille ou déverrouille le panneau : bloque la navigation utilisateur et le bloc d'impact. */
|
|
350
|
+
setLocked(locked: boolean): void;
|
|
351
|
+
private _injectImpactBlockIfActive;
|
|
352
|
+
/** Anime la fermeture d'un bloc puis appelle onDone une seule fois. */
|
|
353
|
+
private _animateBlockOut;
|
|
354
|
+
/**
|
|
355
|
+
* Affiche les cartes d'impact d'une action directe sous la ligne action correspondante
|
|
356
|
+
* dans l'arbre Recherche, en ouvrant le nœud si nécessaire.
|
|
357
|
+
* Sélectionne également la ligne action dans l'arbre (surbrillance).
|
|
358
|
+
* Si un ancien bloc est présent, le ferme d'abord avant d'ouvrir le nouveau.
|
|
359
|
+
*/
|
|
360
|
+
showCuttingActionBlock(compId: string, oddId: string, cutIdx: number, actionId: string, cardsHtml: string, attachHandlers: (container: HTMLElement) => void): void;
|
|
361
|
+
/**
|
|
362
|
+
* Affiche la carte descriptive d'un Événement Clé dans le panneau de
|
|
363
|
+
* détail (droite) — parallèle à showCuttingActionBlock, sans la logique
|
|
364
|
+
* d'arbre (pas d'entrée d'arbre pour un Événement Clé pour l'instant) ni
|
|
365
|
+
* d'épinglage. Ferme d'abord tout bloc existant (exclusivité du panneau).
|
|
366
|
+
*/
|
|
367
|
+
showKeyEventBlock(compId: string, keyEventId: string, cardsHtml: string, attachHandlers: (container: HTMLElement) => void): void;
|
|
368
|
+
/** Retire la carte d'Événement Clé du panneau de détail et efface la mémoire. */
|
|
369
|
+
clearKeyEventBlock(): void;
|
|
370
|
+
private _injectKeyEventBlockIfActive;
|
|
371
|
+
/**
|
|
372
|
+
* Retire le bloc d'impact d'action directe de l'arbre Recherche et efface la mémoire.
|
|
373
|
+
*/
|
|
374
|
+
clearCuttingActionBlock(): void;
|
|
375
|
+
/**
|
|
376
|
+
* Injecte le HTML d'analyse d'action propagée directement sous l'élément cutting
|
|
377
|
+
* dans l'arbre, après le wrapper de description et avant la liste d'actions.
|
|
378
|
+
* Ré-utilisé après chaque renderTree pour que le bloc survive aux reconstructions DOM.
|
|
379
|
+
*/
|
|
380
|
+
private _injectPropagationBlockIfActive;
|
|
381
|
+
/**
|
|
382
|
+
* Affiche le bloc d'analyse d'action propagée sous le cutting cible correspondant
|
|
383
|
+
* dans l'arbre Recherche, en ouvrant le nœud si nécessaire.
|
|
384
|
+
* Si un ancien bloc est présent, le ferme d'abord avant d'ouvrir le nouveau.
|
|
385
|
+
*/
|
|
386
|
+
showPropagationBlock(compId: string, oddId: string, cutIdx: number, html: string, attachHandlers: (container: HTMLElement) => void, sourceDesc?: {
|
|
387
|
+
breadcrumb: string;
|
|
388
|
+
title: string;
|
|
389
|
+
description: string;
|
|
390
|
+
}): void;
|
|
391
|
+
/** Retire immédiatement (sans animation) les blocs primaire et secondaire du panneau de détail.
|
|
392
|
+
* Utilisé lors de la navigation historique pour garantir un état propre avant de réafficher
|
|
393
|
+
* le contenu de la cible restaurée. */
|
|
394
|
+
clearDetailBlocks(): void;
|
|
395
|
+
clearPropagationBlock(): void;
|
|
396
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type Composante } from "../../data/yasuni_cause";
|
|
2
|
+
import { type SearchNavTarget } from "../search/GlobalSearchController";
|
|
3
|
+
export declare class StackNavOverlay {
|
|
4
|
+
private readonly containerEl;
|
|
5
|
+
private readonly chipEl;
|
|
6
|
+
private readonly chipLabelEl;
|
|
7
|
+
private readonly chipDotEl;
|
|
8
|
+
private readonly chipStateEl;
|
|
9
|
+
private readonly dropdownEl;
|
|
10
|
+
private readonly composantes;
|
|
11
|
+
private readonly onNavigate;
|
|
12
|
+
private readonly onDeselect?;
|
|
13
|
+
private _onHover?;
|
|
14
|
+
private isOpen;
|
|
15
|
+
private openCompId;
|
|
16
|
+
private selectedNavKey;
|
|
17
|
+
private selectedCompId;
|
|
18
|
+
private readonly _compToggles;
|
|
19
|
+
private readonly _compWrappers;
|
|
20
|
+
private readonly _compRows;
|
|
21
|
+
private readonly _cuttingRows;
|
|
22
|
+
private _outsideClickHandler;
|
|
23
|
+
private _keyHandler;
|
|
24
|
+
constructor(opts: {
|
|
25
|
+
containerEl: HTMLElement;
|
|
26
|
+
composantes: Composante[];
|
|
27
|
+
onNavigate: (target: SearchNavTarget) => void;
|
|
28
|
+
/** Appelé quand un cutting ou une Facette déjà sélectionné(e) est re-cliqué(e) (désélection). */
|
|
29
|
+
onDeselect?: (kind: "cutting" | "composante") => void;
|
|
30
|
+
});
|
|
31
|
+
private _buildTree;
|
|
32
|
+
private _selectCutting;
|
|
33
|
+
private _toggleComp;
|
|
34
|
+
private _updateChip;
|
|
35
|
+
private _positionDropdown;
|
|
36
|
+
setOnHover(handler: (target: SearchNavTarget | null) => void): void;
|
|
37
|
+
open(): void;
|
|
38
|
+
close(): void;
|
|
39
|
+
/** Déplie la composante donnée dans l'arbre, en repliant l'ancienne — commun
|
|
40
|
+
* à toute navigation qui doit révéler son contexte (satellite, Facette, ODD). */
|
|
41
|
+
private _expandComposante;
|
|
42
|
+
/** Replie la composante actuellement dépliée, s'il y en a une — utilisé pour
|
|
43
|
+
* l'état Sphère (rien de sélectionné), qui remet l'arbre à plat. */
|
|
44
|
+
private _collapseAll;
|
|
45
|
+
/** Surligne la ligne Facette donnée (niveau Facette actif, aucun satellite
|
|
46
|
+
* sélectionné) — pendant de gs-row-selected sur les lignes satellite. */
|
|
47
|
+
private _highlightComposanteRow;
|
|
48
|
+
/** Efface le highlight de satellite dans l'arbre — commun à toute navigation
|
|
49
|
+
* vers un niveau non-Satellite (Facette, ODD, Sphère). */
|
|
50
|
+
private _clearSatelliteHighlight;
|
|
51
|
+
/**
|
|
52
|
+
* Called externally whenever the active satellite changes (diagram click,
|
|
53
|
+
* RECHERCHE navigation, component switch, etc.) to keep the chip in sync.
|
|
54
|
+
*/
|
|
55
|
+
syncToActiveChild(info: {
|
|
56
|
+
label: string;
|
|
57
|
+
oddColor: string;
|
|
58
|
+
compId: string;
|
|
59
|
+
oddId: string;
|
|
60
|
+
cutIdx: number;
|
|
61
|
+
stateValue?: number;
|
|
62
|
+
weightValue?: number;
|
|
63
|
+
} | null): void;
|
|
64
|
+
/**
|
|
65
|
+
* Called when the active hierarchy level becomes a Facette (Composante) with no
|
|
66
|
+
* specific Satellite selected: clic sur une ligne Facette du dropdown, entrée
|
|
67
|
+
* d'historique "composante" rejouée par back/forward, ou clic direct sur l'arc de
|
|
68
|
+
* bordure dans le diagramme en mode STACK. Affiche le nom de la Facette dans le
|
|
69
|
+
* chip en style neutre (pas de couleur ODD), déplie sa ligne dans l'arbre et la
|
|
70
|
+
* surligne.
|
|
71
|
+
*/
|
|
72
|
+
syncToActiveComposante(name: string | null): void;
|
|
73
|
+
/** Même rôle que syncToActiveComposante, pour un clic sur un arc ODD du diagramme —
|
|
74
|
+
* déplie la composante parente pour révéler son contexte, sans surligner de ligne
|
|
75
|
+
* Facette (l'ODD n'a pas sa propre ligne dans cet arbre). */
|
|
76
|
+
syncToActiveOdd(name: string | null): void;
|
|
77
|
+
/** Même rôle que syncToActiveComposante, pour l'état "rien de sélectionné"
|
|
78
|
+
* (intro Sphère) — miroir du header RECHERCHE dans ce même état ; remet
|
|
79
|
+
* l'arbre à plat (aucune composante dépliée). */
|
|
80
|
+
syncToSphere(name: string | null): void;
|
|
81
|
+
destroy(): void;
|
|
82
|
+
}
|