import * as d3 from '../d3Modules'; import { Class_NodeBase } from './NodeBase'; export declare class NodeEventsHandler { private _node; private _shift_lock_axis; private _shift_acc_dx; private _shift_acc_dy; private _alt_clone_pending; private _alt_clone_active; private _alt_clone_start_pos; private _smart_guides; constructor(node: Class_NodeBase); /** os#1340 — vrai pendant un alt-glisser = cloner (les copies suivent le geste, * l'original ne bouge pas : ses effets de bord de drag doivent être neutralisés). */ get is_alt_clone_dragging(): boolean; /** * ✅ Détermine quel type d'élément a été cliqué */ getClickedLabelType(element: Element): 'shape' | 'name_label' | 'value_label' | 'icon' | null; /** * ✅ Logique commune pour sélectionner l'élément et ouvrir le bon onglet */ private selectElementAndOpenTab; /** * ✅ Simple clic : sélectionne l'élément + ouvre l'onglet approprié */ handleSimpleLMBClick(event: React.MouseEvent): void; /** * Clic sur un élément : ouvre SA présentation, jamais le panneau de * configuration. * * Le panneau de configuration est l'outil de l'AUTEUR : il s'ouvre quand * l'auteur le demande, par son bouton. Cliquer un nœud, c'est vouloir voir ce * nœud — ce que voit le lecteur — et c'est aussi ce qui rend le composeur * honnête : l'auteur emprunte exactement le chemin de son lecteur, au lieu * d'un bouton « Aperçu » qui simulait ce chemin. * * La SÉLECTION, elle, est inchangée : le panneau de configuration, quand il * est ouvert, continue d'en dériver sa cible. */ private openPresentationOnClick; /** Sélectionne un cadre (groupe) + met à jour les menus. */ private selectFrameTarget; /** * ✅ Add or remove node from selection (version améliorée) */ private addOrRemoveNodeFromSelection; /** * Define event when mouse drag element starts */ handleMouseDragStart(_event: d3.D3DragEvent): void; /** * Define event when mouse drag element */ handleMouseDrag(event: d3.D3DragEvent): void; /** * os#671 — déplacement avec smart guides : positions dérivées de la position * de DÉPART + delta cumulé (position brute, insensible aux corrections déjà * appliquées — le snap reste « doux » et s'échappe en continuant le geste), * puis correction d'alignement fournie par le contrôleur de guides. Alt * enfoncé débraye le magnétisme (les guides quasi exacts restent affichés). * Sans contrôleur (option désactivée), déplacement continu historique. */ private moveWithSmartGuides; /** * Define event when mouse drag element ends */ handleMouseDragEnd(event: d3.D3DragEvent): void; /** * Define when left mouse click is maintained */ handleMaintainedClick(event: React.MouseEvent): void; /** * Handle right mouse button click */ handleSimpleRMBClick(event: React.MouseEvent): void; getMousePosition(): { x: number; y: number; }; private tooltipMouseX; private tooltipMouseY; /** * Define event when mouse moves over element */ handleMouseOver(event: React.MouseEvent): void; handleMouseMove(): void; handleMouseOut(): void; private moveMagneticNode; }