import { Type_ThemeJSON } from '../types/Theme'; import { Type_UnitTypeJSON } from '../types/Units'; type EsLocal = { [k: string]: string | number | boolean | Array<{ x: number; y: number; }>; }; interface EsNode { id: string; name: string; svg_parent_group: string; x: number; y: number; u: number; v: number; style: string; local: EsLocal; tags: Record; dimensions: Record; inputLinksId: string[]; outputLinksId: string[]; links_order: string[]; input_value: number; output_value: number; /** Nœud-image (mappé vers icon_is_image/icon_image_src au chargement). */ is_image?: boolean; image_src?: string; /** OS#1292 — Donnée de stock du process (compartiments ``). Clés lues * telles quelles au niveau nœud par le loader générique. La REPRÉSENTATION * visible est le LIBELLÉ de stock (stock_label_*, posé dans local), pas la * forme stock (qui encode un niveau, absent du format e!Sankey). La * représentation en flux « From/To Stock » façon e!Sankey = OS#1303. */ has_stock?: boolean; stock_values?: { stock_variation: number; }; } interface EsFlow { id: string; is_visible: boolean; svg_parent_group: string; idSource: string; idTarget: string; style: string; local: EsLocal; displaying_order: number; tooltip_text: string; source_side_locked: boolean; target_side_locked: boolean; value: { id: string; data_value: number; tags: { [grp: string]: string[]; }; }; } interface EsFluxTag { name: string; selected: boolean; color: string; } interface EsFluxTagGroup { name: string; banner: string; use_colors: boolean; carries_values?: boolean; tags: { [id: string]: EsFluxTag; }; } type EsContainerJSON = { [k: string]: string | number | boolean; }; export interface EsParsedDiagram { version: string; nodes: { [id: string]: EsNode; }; links: { [id: string]: EsFlow; }; user_scale: number; couleur_fond_sankey: string; style_node: { default: EsLocal; }; style_link: { default: EsLocal; }; grid_visible: boolean; fluxTags: { [id: string]: EsFluxTagGroup; }; theme: Type_ThemeJSON; /** Zones de texte / images / rectangles importés (clé `labels` du JSON). */ labels: { [id: string]: EsContainerJSON; }; /** * Légende affichée si le fichier en contient une (mask_legend: false). * `legend_police` (OS#1296, optionnel) : taille de police du CONTENU de la * légende e!Sankey (``), reprise telle quelle par * `LegendPersistence.fromJSON` (clé `legend_police` — seul réglage de police * que porte la légende OpenSankey, partagé entre entrées et titres de * groupe). La police du TITRE du cadre e!Sankey (``, le mot * "Legend" en en-tête) n'a pas d'équivalent : le cadre généré n'a pas de * titre visible (frame.name_label_is_visible = false, cf. * LegendGenerator.regenerateLegend) — non reprise. */ legend?: { mask_legend: boolean; legend_dx: number; legend_dy: number; legend_police?: number; legend_entry_template?: string; }; /** OS#1286 — registre d'unités reconstruit depuis les unitTypes e!Sankey. */ units?: Type_UnitTypeJSON[]; /** * os#1305 — « Scale to lower flow threshold » e!Sankey * (`scaleToLowerFlowTreashold` + `lowerFlowTreashold`, unitType de référence * ou miroir ``) : épaisseur visible MINIMALE des flux fins, en px — * même sémantique que le `minimum_flux` de la drawing area (clamp de rendu, * cf. flowThickness.fluxFloor), d'où la recopie directe sans conversion * d'échelle. Clé racine `minimum_flux` du JSON 0.9, lue par le fromJSON * générique. Absent quand le fichier n'active pas le réglage. */ minimum_flux?: number; /** * Ordre Z global des éléments importés (nœuds + flux + zones), du 1ER PLAN * vers le FOND (convention `_list_g_element_id`), reconstruit depuis les * `@zorder` e!Sankey (plus grand = par-dessus). C'est lui qui restitue les * fonds de process DERRIÈRE les flux (démo « Erdgas Krankenhaus »). Lu par * le fromJSON générique (clé `order_g_elements`). Absent si le fichier ne * porte aucun zorder. */ order_g_elements?: string[]; /** * os#1306 — posé à `true` quand le fichier N'ACTIVE PAS `net@hideZeroFlows` * (défaut e!Sankey : les flux à quantité nulle restent tracés en trait fin). * Clé racine du drawing_area (option globale « flux nuls visibles »), lue par * le fromJSON générique. Absent quand hideZeroFlows=true : le défaut * OpenSankey (`show_zero_links=false` + porte `is_not_zero`) masque déjà * dynamiquement les flux nuls ET les nœuds dont tous les flux sont nuls * (= hideZeroFlowProcesses). Détail du choix : cf. le bloc os#1306 dans * parseEsankeyXml. */ show_zero_links?: boolean; } export declare const ESANKEY_ENTRIES_TAGG_ID = "esankey_entries"; export declare const esAngleToTextAngle: (deg: number) => number; export declare const netFormatDecimalCount: (fmt: string) => number | null; export declare const esankeyLabelTemplate: (arrow: { labelFormat: string; showValue: boolean; showUnit: boolean; showEntryname: boolean; }) => string; /** * Parse le contenu de `esankey.xml` et renvoie la structure JSON (version 0.9) * prête pour fromJSON. */ export declare const parseEsankeyXml: (xmlText: string, /** Images du ZIP en data URI, indexées par chemin (`Images/tmpXX.tmp`). */ images?: { [path: string]: string; }) => EsParsedDiagram; /** * Dézippe un fichier `.sankey` (e!Sankey) et parse son `esankey.xml`, en * extrayant les images embarquées (icônes, décors) en data URIs. * La signature XML-DSig embarquée n'est pas vérifiée (lecture seule). */ export declare const loadEsankeyFile: (data: ArrayBuffer) => Promise; export {};