import { Type_JSON } from './Utils'; export type Type_UnitJSON = { id: string; name: string; coefficient: number; display_name?: string; }; export type Type_UnitTypeJSON = { id: string; name: string; default_unit: string; units: Type_UnitJSON[]; display_scale?: number; }; /** Une unité : symbole canonique + coefficient vers l'unité de base de sa * grandeur (base = quantité × coefficient ⇒ coefficient 1 pour la base). */ export declare class Class_Unit { id: string; /** Symbole CANONIQUE (t, kt, GWh, €…). Sert à la correspondance et reste la * référence ; ce n'est pas forcément ce qui est écrit sur le diagramme. */ name: string; coefficient: number; /** Libellé d'AFFICHAGE, quand le diagramme nomme cette unité autrement que * par son symbole canonique — « tonnes » pour `t`, « MWh élec » pour `MWh`. * C'est le pendant lisible de la table d'alias : `canonicalUnitSymbol` * reconnaît le synonyme à la lecture, `display_name` le restitue à l'écran. * Sans lui, migrer un fichier qui disait « tonnes » l'affichait « t », ce qui * fait d'un alias une conversion à sens unique. * undefined = afficher le symbole canonique. */ display_name?: string; constructor(id: string, name: string, coefficient?: number, display_name?: string); /** Ce qui est écrit sur le diagramme. TOUJOURS passer par là côté rendu — * `name` est la référence, pas l'affichage. */ get label(): string; toJSON(): Type_UnitJSON; static fromJSON(json_object: Type_JSON): Class_Unit; } /** Une grandeur (Masse, Énergie…) : ses unités + son unité d'affichage par * défaut. L'unité de base est celle de coefficient 1. */ export declare class Class_UnitType { id: string; name: string; units: Class_Unit[]; /** Id de l'unité d'affichage par défaut (les flux sans surcharge l'héritent). */ default_unit_id: string; /** OS#1286 (fusion) — échelle d'affichage PROPRE à la grandeur (façon * e!Sankey : chaque unitType a son ratio quantité/pixels) : quantité en unité * de BASE affichée sur 100 px pour les bandes « de type unité ». undefined = * échelle globale du dessin (drawing_area.scale). Permet d'équilibrer * visuellement des grandeurs différentes (kWh vs t vs €) sur un même flux. */ display_scale?: number; constructor(id: string, name: string, units?: Class_Unit[], default_unit_id?: string, display_scale?: number); get default_unit(): Class_Unit | undefined; /** Unité de base (coefficient 1) — celle dans laquelle data_value est stocké. */ get base_unit(): Class_Unit | undefined; addUnit(name: string, coefficient?: number, id?: string): Class_Unit; removeUnit(id: string): void; private _makeUnitId; toJSON(): Type_UnitTypeJSON; static fromJSON(json_object: Type_JSON): Class_UnitType; } /** Résolution d'une référence d'unité posée sur un label (`value_label_unit` * en mode `unit_model`) : id d'unité, ou id de grandeur (→ son unité par * défaut), ou '' (→ unité par défaut de la première grandeur). */ export type Type_ResolvedUnit = { unit: Class_Unit; unit_type: Class_UnitType; }; /** Le registre d'unités du diagramme (porté par Class_Sankey). */ export declare class Class_UnitsRegistry { unit_types: Class_UnitType[]; constructor(unit_types?: Class_UnitType[]); get is_empty(): boolean; addUnitType(name: string, id?: string): Class_UnitType; removeUnitType(id: string): void; getUnitType(id: string): Class_UnitType | undefined; private _makeTypeId; /** * Résout une référence d'affichage (cf. Type_ResolvedUnit) : * - id d'UNITÉ → cette unité ; * - id de GRANDEUR → son unité d'affichage par défaut ; * - '' / inconnue → undefined (aucune unité : pas de conversion ni de * suffixe — c'est l'état « — aucune — » du sélecteur). */ resolve(ref: string | undefined | null): Type_ResolvedUnit | undefined; /** * OS#1286 — migration des anciennes « unités personnalisées » (texte libre). * Cherche une unité du registre correspondant au texte : symbole exact * d'abord, puis normalisé (casse/accents/pluriel) + table d'alias * (« tonne » → t). Le coefficient doit ÉGALER l'ancien `unit_factor` : le * mode texte libre divisait la valeur par ce facteur, une correspondance * avec un autre coefficient changerait l'affichage. */ findLegacyUnit(text: string, factor?: number): Type_ResolvedUnit | undefined; /** * OS#1286 — unité de repli pour un texte libre sans correspondance : ajoutée * (ou réutilisée) dans la grandeur « Unités du fichier », avec * coefficient = ancien unit_factor (affichage strictement identique). */ getOrCreateLegacyUnit(text: string, factor?: number): Type_ResolvedUnit; copyFrom(other: Class_UnitsRegistry): void; /** * OS#1286 — importe d'un autre registre UNIQUEMENT ce qui manque ici : grandeurs absentes * (copiées telles quelles) et, dans les grandeurs communes, unités d'identifiant inconnu. * * Sert au transfert de mise en page (`updateFrom`) : les attributs copiés sur les éléments et * les styles portent des RÉFÉRENCES d'unité (`value_label_unit` = identifiant du registre de * la SOURCE). Sans les unités correspondantes, ces références ne résolvent plus chez la cible * et l'affichage retombe sur l'identifiant brut. Cas typique : une mise en page 1.1.5 dont * l'unité en texte libre a été migrée à son chargement dans la grandeur « Unités du fichier ». * * Strictement ADDITIF : jamais d'écrasement d'une unité existante (coefficient, libellé * d'affichage), ni de l'unité par défaut ou de l'échelle d'une grandeur existante — le * vocabulaire de la cible fait foi, on ne comble que les trous. Donc idempotent. * * @returns nombre d'unités ajoutées (grandeurs neuves comprises). */ mergeMissingFrom(other: Class_UnitsRegistry): number; toJSON(): Type_UnitTypeJSON[]; fromJSON(json_list: unknown): void; /** Ramène le registre au catalogue par défaut (nouveau diagramme / reset). */ resetToDefault(): void; /** True si le registre est identique au catalogue par défaut — dans ce cas * la clé `units` n'est PAS sérialisée (fichiers inchangés, additivité). */ equalsDefaultCatalog(): boolean; } /** Grandeur de repli des unités migrées depuis le texte libre des anciens * fichiers (« Unité personnalisée ») quand aucune correspondance n'existe. * L'utilisateur peut ensuite les reclasser dans l'éditeur. */ export declare const FILE_UNITS_TYPE_ID = "unit_type_file"; export declare const FILE_UNITS_TYPE_NAME = "Unit\u00E9s du fichier"; /** * OS#1286 — normalisation d'un texte d'unité pour la correspondance : * minuscules, sans accents, sans pluriel final, espaces réduits ; puis table * d'alias des noms longs usuels vers le symbole canonique (« tonne » → t). */ export declare const canonicalUnitSymbol: (text: string) => string; /** * Catalogue par défaut d'un nouveau diagramme : grandeurs usuelles, éditables * et supprimables. L'unité de base (coefficient 1) est aussi le défaut. */ export declare const defaultUnitsCatalog: () => Type_UnitTypeJSON[];