cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
260 lines • 8.31 kB
TypeScript
/**
* Интерфейсы для системы визуализации CSElement
*/
import { ICSElement } from './interfaces';
/**
* Форматы визуализации
*/
export type VisualizationFormat = 'ascii' | 'svg' | 'html' | 'json' | 'mermaid' | 'dot';
/**
* Типы макетов для визуализации
*/
export type LayoutType = 'tree' | 'force' | 'circular' | 'hierarchical' | 'grid' | 'radial';
/**
* Направления для древовидного макета
*/
export type TreeDirection = 'top-bottom' | 'bottom-top' | 'left-right' | 'right-left';
/**
* Стили для узлов
*/
export interface NodeStyle {
/** Цвет фона */
backgroundColor?: string;
/** Цвет границы */
borderColor?: string;
/** Толщина границы */
borderWidth?: number;
/** Цвет текста */
textColor?: string;
/** Размер шрифта */
fontSize?: number;
/** Форма узла */
shape?: 'rectangle' | 'circle' | 'ellipse' | 'diamond' | 'hexagon';
/** Ширина узла */
width?: number;
/** Высота узла */
height?: number;
/** Отступы */
padding?: number;
/** Радиус скругления углов */
borderRadius?: number;
}
/**
* Стили для связей
*/
export interface EdgeStyle {
/** Цвет линии */
color?: string;
/** Толщина линии */
width?: number;
/** Стиль линии */
style?: 'solid' | 'dashed' | 'dotted';
/** Тип стрелки */
arrowType?: 'none' | 'arrow' | 'diamond' | 'circle';
/** Кривизна линии */
curvature?: number;
}
/**
* Опции визуализации
*/
export interface VisualizationOptions {
/** Формат вывода */
format?: VisualizationFormat;
/** Тип макета */
layout?: LayoutType;
/** Направление для древовидного макета */
direction?: TreeDirection;
/** Включить интерактивность (для HTML/SVG) */
interactive?: boolean;
/** Показывать данные элементов */
showData?: boolean;
/** Показывать ID элементов */
showIds?: boolean;
/** Показывать индексы */
showIndices?: boolean;
/** Максимальная глубина отображения */
maxDepth?: number;
/** Ширина области визуализации */
width?: number;
/** Высота области визуализации */
height?: number;
/** Стили для узлов */
nodeStyle?: NodeStyle;
/** Стили для связей */
edgeStyle?: EdgeStyle;
/** Расстояние между узлами */
nodeSpacing?: number;
/** Расстояние между уровнями */
levelSpacing?: number;
/** Заголовок диаграммы */
title?: string;
/** Включить легенду */
showLegend?: boolean;
/** Включить миниатюру навигации */
showMinimap?: boolean;
/** Анимации (для интерактивных форматов) */
animations?: boolean;
/** Фильтр элементов */
filter?: (element: ICSElement) => boolean;
/** Кастомный рендерер узлов */
customNodeRenderer?: (element: ICSElement, style: NodeStyle) => string;
/** Кастомные CSS классы */
cssClasses?: {
container?: string;
node?: string;
edge?: string;
text?: string;
};
}
/**
* Результат визуализации
*/
export interface VisualizationResult {
/** Сгенерированный контент */
content: string;
/** Формат результата */
format: VisualizationFormat;
/** Метаданные */
metadata: {
/** Количество отображенных узлов */
nodeCount: number;
/** Количество связей */
edgeCount: number;
/** Максимальная глубина */
maxDepth: number;
/** Время генерации (мс) */
generationTime: number;
/** Размеры */
dimensions?: {
width: number;
height: number;
};
};
/** Дополнительные файлы (например, CSS для HTML) */
additionalFiles?: {
[filename: string]: string;
};
}
/**
* Узел для визуализации
*/
export interface VisualizationNode {
/** ID узла */
id: string;
/** Отображаемый текст */
label: string;
/** Позиция X */
x?: number;
/** Позиция Y */
y?: number;
/** Ширина */
width?: number;
/** Высота */
height?: number;
/** Уровень в иерархии */
level: number;
/** Ссылка на элемент */
element: ICSElement;
/** Стиль узла */
style?: NodeStyle;
/** Дополнительные данные */
data?: Record<string, any>;
}
/**
* Связь для визуализации
*/
export interface VisualizationEdge {
/** ID связи */
id: string;
/** ID исходного узла */
source: string;
/** ID целевого узла */
target: string;
/** Тип связи */
type: 'parent-child' | 'owner' | 'reference';
/** Стиль связи */
style?: EdgeStyle;
/** Метка связи */
label?: string;
}
/**
* Граф для визуализации
*/
export interface VisualizationGraph {
/** Узлы */
nodes: VisualizationNode[];
/** Связи */
edges: VisualizationEdge[];
/** Метаданные графа */
metadata: {
rootId: string;
maxDepth: number;
totalNodes: number;
totalEdges: number;
};
}
/**
* Движок визуализации
*/
export interface VisualizationEngine {
/** Имя движка */
name: string;
/** Поддерживаемые форматы */
supportedFormats: VisualizationFormat[];
/** Генерация визуализации */
render(graph: VisualizationGraph, options: VisualizationOptions): Promise<VisualizationResult>;
/** Проверка поддержки формата */
supportsFormat(format: VisualizationFormat): boolean;
}
/**
* Менеджер визуализации
*/
export interface VisualizationManager {
/** Зарегистрировать движок */
registerEngine(engine: VisualizationEngine): void;
/** Получить движок для формата */
getEngine(format: VisualizationFormat): VisualizationEngine | null;
/** Получить все движки */
getEngines(): VisualizationEngine[];
/** Создать граф из элемента */
createGraph(element: ICSElement, options?: VisualizationOptions): VisualizationGraph;
/** Визуализировать элемент */
visualize(element: ICSElement, options?: VisualizationOptions): Promise<VisualizationResult>;
}
/**
* Событие визуализации
*/
export interface VisualizationEvent {
type: 'render:start' | 'render:complete' | 'render:error' | 'graph:created';
element: ICSElement;
options: VisualizationOptions;
result?: VisualizationResult;
error?: Error;
timestamp: number;
}
/**
* Предустановленные темы
*/
export interface VisualizationTheme {
name: string;
nodeStyle: NodeStyle;
edgeStyle: EdgeStyle;
backgroundColor?: string;
colors: {
primary: string;
secondary: string;
accent: string;
text: string;
border: string;
};
}
/**
* Экспортер в файл
*/
export interface FileExporter {
/** Экспорт в файл */
export(result: VisualizationResult, filename: string): Promise<void>;
/** Поддерживаемые форматы */
supportedFormats: VisualizationFormat[];
}
//# sourceMappingURL=visualization-interfaces.d.ts.map