import type { Class_DrawingArea } from './DrawingArea'; export declare class Class_ViewportChrome { private _d3_scrollbar_h; private _d3_scrollbar_v; private _d3_viewport_border; private _d3_viewport_clip_rect; private readonly _scrollbar_size; private readonly _arrow_size; private readonly _gutter; private readonly _step_px; private _repeat_delay; private _repeat_timer; /** * Crée les éléments SVG du chrome : pistes + pouces + flèches des deux scrollbars, le cadre de * viewport, puis le clipPath du contenu. Posés directement sur la racine SVG pour rester en * coordonnées écran (le clipPath dans un de la racine, référencé par #g_clip non transformé). */ init(da: Class_DrawingArea): void; /** La racine SVG a été retirée : les sélections pendantes ne valent plus rien. */ reset(): void; /** Arrête la répétition au maintien (relâchement, sortie, ou démontage). */ private _clearRepeat; /** * Ajoute un bouton-flèche (fond + triangle) à un groupe de scrollbar. La forme est constante * (seule sa POSITION varie selon la longueur de barre, posée dans updateScrollbars) ; le triangle * pointe vers l'extérieur de la piste (◄ ► en horizontal, ▲ ▼ en vertical). */ private _appendArrow; /** * Câble une flèche : `action` est exécutée une fois au press, puis en boucle après un court délai * tant que le bouton reste enfoncé. stopPropagation empêche le mousedown de démarrer un pan d3-zoom * (le behavior est branché sur la racine SVG, ancêtre du bouton). */ private _bindArrow; private _initScrollbars; /** * Repositionne/redimensionne les scrollbars d'après la caméra courante, pose la réserve de * gouttière (#292) et — effet de bord assumé, historique — (re)pose `extent` / `translateExtent` * sur le zoom listener. Les scrollbars restent visibles tant que le contenu déborde de la fenêtre. */ updateScrollbars(da: Class_DrawingArea): void; private _initBorder; /** * Géométrie du cadre de viewport, en PIXELS-ÉCRAN (repère de la racine SVG, hors zoom). * Mode libre : la fenêtre utile (x=fm, y=navH+fm, w/h = window_fitting). Mode papier : le * rectangle de PAGE projeté via la caméra (suit zoom/pan). Retourne `null` quand il n'y a pas * de cadre à tracer (DA non éditable, ou racine SVG absente) — le cadre et le clip s'y adaptent. * Source unique partagée par updateBorder (trace le cadre) et updateClip (découpe le contenu) : * les deux restent ainsi rigoureusement alignés. */ private _computeFrameRect; /** * Position and size the viewport border rect on the SVG root (outside g_drawing). * Mode libre : encadre la zone visible (fenêtre). Mode papier : encadre la PAGE. * Appelé à l'init, à chaque drawBackground(), et — en mode papier — à chaque zoom/pan * (eventZoom), car le fond n'y est pas redessiné. */ updateBorder(da: Class_DrawingArea): void; /** * Crée le (dans un de la racine SVG) dont le découpe le contenu de * g_drawing au cadre. Il est référencé par le groupe #g_clip qui enveloppe g_drawing (créé dans * DrawingArea._initDraw), non transformé → le rect s'interprète bien en coordonnées écran * (clipPathUnits=userSpaceOnUse par défaut). L'id, unique par instance de DA, vient de la DA. */ private _initClip; /** * Met le du clipPath à la géométrie du cadre (mêmes valeurs, mêmes moments que * updateBorder). Hors cadre (DA non éditable, ex. diagramme publié / embarqué), le clip est * NEUTRALISÉ via un rect immense : le diagramme publié ne doit jamais être rogné à la fenêtre. */ updateClip(da: Class_DrawingArea): void; }