@reactodia/workspace
Version:
Reactodia Workspace -- library for visual interaction with graphs in a form of a diagram.
61 lines • 2.26 kB
TypeScript
import type * as React from 'react';
import type { LinkTypeIri } from '../data/model';
import type { Element, ElementTemplateState, Link } from './elements';
import type { SizeProvider, Vector } from './geometry';
import type { GraphStructure } from './model';
export type TypeStyleResolver = (types: ReadonlyArray<string>) => TypeStyle | undefined;
export type ElementTemplateResolver = (element: Element) => ElementTemplate | ElementTemplateComponent | undefined;
export type LinkTemplateResolver = (linkTypeId: LinkTypeIri) => LinkTemplate | undefined;
export interface TypeStyle {
readonly color?: string;
readonly icon?: string;
readonly iconMonochrome?: boolean;
}
export interface ElementTemplate {
readonly shape?: 'rect' | 'ellipse';
readonly renderElement: (props: TemplateProps) => React.ReactNode;
}
export type ElementTemplateComponent = React.ComponentType<TemplateProps>;
export interface TemplateProps {
readonly elementId: string;
readonly element: Element;
readonly isExpanded: boolean;
readonly elementState?: ElementTemplateState;
}
export interface LinkTemplate {
markerSource?: LinkMarkerStyle;
markerTarget?: LinkMarkerStyle;
spline?: 'straight' | 'smooth';
readonly renderLink: (props: LinkTemplateProps) => React.ReactNode;
}
export interface LinkMarkerStyle {
readonly d?: string;
readonly width?: number;
readonly height?: number;
readonly fill?: string;
readonly stroke?: string;
readonly strokeWidth?: string | number;
}
export interface LinkTemplateProps {
link: Link;
path: string;
getPathPosition: (offset: number) => Vector;
markerSource: string;
markerTarget: string;
route?: RoutedLink;
}
export interface LinkRouter {
route(graph: GraphStructure, sizeProvider: SizeProvider): RoutedLinks;
}
export type RoutedLinks = Map<string, RoutedLink>;
export interface RoutedLink {
readonly linkId: string;
readonly vertices: ReadonlyArray<Vector>;
readonly labelTextAnchor?: 'start' | 'middle' | 'end';
}
export interface RenameLinkProvider {
canRename(link: Link): boolean;
getLabel(link: Link): string | undefined;
setLabel(link: Link, label: string): void;
}
//# sourceMappingURL=customization.d.ts.map