export type Type_CompareLeafOp = 'added' | 'removed' | 'changed'; export type Type_CompareLeaf = { op: Type_CompareLeafOp; /** Chemin de la feuille depuis la racine de la vue (['links', 'A---B', 'local', 'x']). */ path: string[]; a: unknown; b: unknown; }; /** Motif agrégé : même chemin d'attribut, l'id d'élément (2e composant) remplacé par « * ». */ export type Type_ComparePattern = { pattern: string; count: number; /** Ids d'éléments touchés (vide pour un chemin sans niveau élément). */ ids: string[]; example: Type_CompareLeaf; }; export type Type_CompareGroup = { root_key: string; /** Différences DIRECTEMENT sous la racine (scalaires : width, name…). */ direct: Type_CompareLeaf[]; /** Éléments entiers présents d'un seul côté (niveau id d'une collection). */ added_ids: string[]; removed_ids: string[]; patterns: Type_ComparePattern[]; total: number; }; export type Type_CompareResult = { groups: Type_CompareGroup[]; total: number; noise_dropped: number; tolerance_dropped: number; }; /** Feuilles modifiées / clés ajoutées / clés retirées entre deux valeurs JSON. */ export declare function diffLeaves(a: unknown, b: unknown, path?: string[]): Type_CompareLeaf[]; /** * Compare deux vues (JSON de DrawingArea) et agrège le résultat. * @param opts.ignore_noise défaut true — écarte les paires clé-absente ↔ valeur-par-défaut. * @param opts.tolerance défaut 0 — écarte les écarts numériques ≤ tolerance (px de re-sérialisation). */ export declare function compareViews(view_a: unknown, view_b: unknown, opts?: { ignore_noise?: boolean; tolerance?: number; }): Type_CompareResult; /** * Clés racines qui diffèrent PAR CONSTRUCTION entre deux vues : identité (`id`, `name`), * mécanique des vues (`view_labels`, `heredited_attr`, `heredited_source_id`, `tag_selection`, * `is_light`, `generated_from_group_id`), et enveloppe de fichier pour les blobs « fichier * entier » (`current_view`, `views` imbriquée, `version`, `format_version`). Elles noient les * vrais changements : l'UI les range dans une section « changements attendus » repliée. */ export declare const EXPECTED_ROOT_KEYS: string[]; /** Sépare les groupes en liste principale / changements attendus (cf. EXPECTED_ROOT_KEYS). */ export declare function partitionExpected(groups: Type_CompareGroup[]): { main: Type_CompareGroup[]; expected: Type_CompareGroup[]; }; /** Valeur compacte pour l'affichage (« 106.2 », « "kt" », « {…} » tronqué). */ export declare function compactValue(v: unknown, limit?: number): string;