import { StepType } from '@reactour/tour'; import type { Class_ApplicationData } from './ApplicationData'; /** * Contrôle du tour, injecté par un composant monté SOUS le `TourProvider` (cf. `TourBridge` dans * App.tsx) : `setCurrentStep` n'est accessible que via le hook `useTour`, donc hors de portée du * modèle. Le modèle passe par ce slot pour faire avancer le tour quand il détecte un geste. */ export type Type_TourControl = { goToStep: (index: number) => void; }; export declare class Class_GuidedTour { private _app_data; /** Contrôle du tour (React). Null tant que le TourProvider n'a pas monté son pont. */ private _control; /** Scrutateur du geste en cours. Toujours arrêté par l'`actionAfter` de l'étape qui l'a posé. */ private _watch_timer; /** Diagramme vide au lancement : seul ce cas propose les gestes et crée un flux de repli. */ private _started_empty; /** Nœuds créés par le TOUR (flux de repli) — les seuls que le nettoyage retirera. */ private _fallback_node_ids; /** Tiroir de configuration déjà ouvert au lancement : si non, le tour le referme à la fin. */ private _drawer_was_open; /** Pop-up de config déjà épinglée au lancement : si non, le tour retire son épingle à la fin. */ private _config_was_pinned; constructor(app_data: Class_ApplicationData); set control(_: Type_TourControl | null); /** * Point d'entrée unique du tour (écran d'accueil, menu Aide). * * Le scénario ne prend tout son sens que sur un diagramme vierge : l'utilisateur doit pouvoir * tracer SON premier flux. Si un diagramme est en cours, on demande donc la permission de le * supprimer — jamais sans, c'est son travail. S'il refuse, le tour se déroule quand même, mais * en mode descriptif sur le diagramme conservé (cf. `_started_empty`) : refuser d'effacer ne * doit pas priver de la visite. * * `openTour` est fourni par l'appelant car ouvrir le tour passe par `useTour`, hors de portée * du modèle. */ start(openTour: () => void): void; /** * Scrute `predicate` jusqu'à ce qu'il soit vrai, puis exécute `on_fulfilled` une seule fois. * * La scrutation est préférée à un écouteur sur le modèle : un flux peut naître de trois gestes * différents (glisser depuis le fond, glisser depuis un nœud existant, menu contextuel) et une * valeur peut être saisie depuis l'inspecteur comme depuis le tableur. Scruter l'état final * couvre tous ces chemins sans instrumenter chaque site d'appel, et ne vit que le temps de * l'étape. */ private _watch; private _stopWatch; private _goToStep; private get _sankey(); /** Le flux sur lequel portent les étapes « valeur » et « inspecteur » (le premier venu). */ private _firstLink; private _hasLink; private _hasLinkValue; /** * Ouvre le panneau de configuration. Appelé dès la première étape : ses cibles doivent être dans * le DOM avant que leur étape ne devienne active (cf. buildSteps). */ private _openConfigDrawer; /** Passe la souris en mode édition pour que le geste « tracer un flux » soit possible. */ private _setEditionMode; /** * Crée le flux de repli (deux nœuds + un flux valué) quand l'utilisateur passe l'étape « tracer » * sans tracer : les étapes suivantes ont besoin d'un support concret. N'agit que sur un diagramme * vide, et mémorise ce qui a été créé pour pouvoir le retirer à la fin. */ private _createFallbackFlow; /** Retire le flux de repli. Supprimer ses nœuds emporte le flux qui les relie. */ private _removeFallbackFlow; /** * Sélectionne le flux et ouvre le panneau. #1243 : on ne force plus de type ni d'élément — * l'inspecteur dérive sa cible de la sélection, il suffit donc de sélectionner. * * `requested_tab_id` sert à l'étape « valeur » : le champ de valeur du flux n'est dans le DOM * que si l'onglet Valeur est actif, or l'inspecteur ouvre sur Forme (son premier onglet). Sans * cette demande, l'étape viserait un élément absent. */ private _inspectFirstLink; /** * Appelé par le `beforeClose` du TourProvider : couvre AUSSI bien la dernière étape que l'abandon * en cours de route (croix, ESC, clic sur le masque), puisque le tour se démonte dans tous ces cas. */ finish(): void; /** * Construit le scénario. Appelé à CHAQUE lancement (cf. Class_ApplicationData.setSteps) : c'est * là qu'on fige le mode (diagramme vide ou non) et l'état initial du tiroir de config. */ buildSteps(): StepType[]; }