/** Comment le thème choisit la couleur d'un nœud. */ export type Type_NodeColorRule = /** Aucune palette : la couleur vient du style ou du nœud. */ 'none' /** Colormap du premier groupe de tags actif — comportement historique d'OpenSankey. */ | 'by-tag' /** Palette indexée par le premier mot du nom — comportement de SankeyMATIC. */ | 'by-name-first-word'; /** Reprend les valeurs de l'attribut `shape_color_rule` : un thème ne peut rien demander de neuf. */ export type Type_LinkColorRule = 'flow' | 'source' | 'target' | 'gradient' | 'auto'; export interface Type_ThemePalette { /** Vide pour les thèmes sans palette (`opensankey`, `stan`). */ colors: readonly string[]; /** Rotation de la palette (le `themeoffset` de SankeyMATIC). */ offset: number; node_rule: Type_NodeColorRule; link_rule: Type_LinkColorRule; } /** Patch d'attributs, aux noms d'attributs MODERNES (clés de ALL_ATTRIBUTES_CONFIG). */ export type Type_StylePatch = { [attribute: string]: string | number | boolean; }; export interface Type_ThemeJSON { id: string; palette: Type_ThemePalette; styles: { [style_id: string]: Type_StylePatch; }; globals: { couleur_fond_sankey?: string; }; } /** Un thème appliqué à un diagramme. Objet de valeur : immuable et sans cache. */ export declare class Class_Theme { readonly id: string; readonly palette: Type_ThemePalette; readonly styles: { [style_id: string]: Type_StylePatch; }; readonly globals: { couleur_fond_sankey?: string; }; constructor(json: Type_ThemeJSON); /** * Fabrique un assignateur de couleurs de nœuds, ou `null` si le thème ne se * prononce pas sur les couleurs — auquel cas l'appelant poursuit sa cascade. * * Le picker est À ÉTAT : ses teintes dépendent de l'ordre des demandes. C'est * pourquoi il est fabriqué à la demande et non porté par le thème : c'est à * l'appelant (`Sankey.themeNodeColor`) de fixer un ordre stable, et de sauter * les nœuds qui portent une couleur explicite pour qu'ils ne consomment pas de * teinte — deux choses qu'un thème, seul, ne peut pas savoir. */ makeNodeColorPicker(): ((node_name: string) => string) | null; toJSON(): Type_ThemeJSON; } /** * Thème historique d'OpenSankey. Son patch de styles est VIDE, et c'est le point : * `applyTheme` ramène les styles de base à leur amorce `elementStyleConfigs`, et un * patch vide les y laisse. C'est bien l'amorce — non les défauts usine — qui porte * l'identité d'OpenSankey : `value_label_is_visible` vaut `false` en défaut usine, et * les valeurs de flux ne s'affichent que parce que l'amorce de `LinkStyle` le remet à * `true`. Son `node_rule: 'by-tag'` décrit le comportement existant plutôt qu'il ne * le change. * * L'introduire ne doit produire strictement aucun changement d'apparence — c'est le * test de non-régression de l'étape 1 de NOTE-THEMES.md. Le fond, lui, est déclaré : * sans quoi une bascule vers `sankeymatic` (fond blanc) puis retour ne restaurerait * pas le gris d'OpenSankey. `loadTheme` n'applique pas les globaux, donc les fichiers * existants ne sont pas touchés. */ export declare const themeOpenSankey: () => Class_Theme; export declare const DEFAULT_THEME_ID = "opensankey"; /** * Le thème `stan`. Doit rester en phase avec `_stan_theme()` de * `server/stan_smfa.py`, qui le pose sur les diagrammes importés : celui-ci ne sert * qu'à la bascule manuelle depuis l'interface. * * Pas de palette : STAN n'attribue aucune couleur automatiquement. Le noir est son * défaut, et toute couleur y est un choix de l'utilisateur, posé sur l'élément. * * La silhouette de STAN — flux à angle droit — ne vient PAS d'ici. Elle tient au * placement des nœuds et à `shape_orientation` par flux, tous deux lus dans le * fichier à l'import. Un thème ne touche pas aux coordonnées. */ export declare const themeStan: () => Class_Theme; /** * Le thème `esankey`. Posé par l'importeur .sankey (`esankeyParser`) sur les * diagrammes importés, et disponible à la bascule manuelle. * * Pas de palette : dans e!Sankey, un flux tient sa couleur de son entry * (matériau/énergie), et l'import la pose sur l'élément — `link_rule: 'flow'` * la respecte. Identité relevée sur les démos d'e!Sankey 5 : fond blanc, * process en boîte grise discrète à liseré noir avec le nom SOUS la boîte, * flèches courbes à pointe, quantité écrite sur la flèche, sans fond. */ export declare const themeEsankey: () => Class_Theme; /** Reconstruit un thème depuis le JSON d'un diagramme. Absence ⇒ `opensankey`. */ export declare const themeFromJSON: (json: unknown) => Class_Theme; /** Le nom du thème SankeyMATIC parmi les quatre palettes `node theme a|b|c|d`. */ export declare const themeSankeymaticPalette: (theme_key: string, offset: number, link_rule: Type_LinkColorRule) => Type_ThemePalette;