UNPKG

@reactodia/workspace

Version:

Reactodia Workspace -- library for visual interaction with graphs in a form of a diagram.

87 lines 3.36 kB
import type { ReadonlyHashMap } from '@reactodia/hashmap'; import { ElementIri, ElementModel, LinkKey, LinkModel, LinkTypeIri } from '../data/model'; import { TemplateState, SerializedTemplateState } from '../data/schema'; import { Element, Link, LinkTypeVisibility } from '../diagram/elements'; import { Vector } from '../diagram/geometry'; export interface SerializedDiagram { '@context': any; '@type': 'Diagram'; layoutData: SerializedLayout; linkTypeOptions?: ReadonlyArray<SerializedLinkOptions>; } export interface SerializedLinkOptions { '@type': 'LinkTypeOptions'; property: LinkTypeIri; visible: boolean; showLabel?: boolean; } export interface SerializedLayout { '@type': 'Layout'; elements: ReadonlyArray<SerializedElement>; links: ReadonlyArray<SerializedLink>; } type SerializedState<T> = T extends { toJSON(): infer S; } ? Exclude<S, undefined> : never; type JsonableElement = Element & { toJSON(): SerializedElement; }; export interface SerializableElementCell<T extends JsonableElement = JsonableElement> { new (...args: any[]): T; readonly fromJSONType: SerializedState<T>['@type']; fromJSON(state: SerializedState<T>, options: ElementFromJsonOptions): T | undefined; } export interface ElementFromJsonOptions { readonly getInitialData: (iri: ElementIri) => ElementModel | undefined; readonly mapTemplateState: (from: TemplateState) => TemplateState; } export interface SerializedElement { '@type': string; '@id': string; position: Vector; elementState?: SerializedTemplateState; } type JsonableLink = Link & { toJSON(): SerializedLink; }; export interface SerializableLinkCell<T extends JsonableLink = JsonableLink> { new (...args: any[]): T; readonly fromJSONType: SerializedState<T>['@type']; fromJSON(state: SerializedState<T>, options: LinkFromJsonOptions): T | undefined; } export interface LinkFromJsonOptions { readonly source: Element; readonly target: Element; readonly getInitialData: (key: LinkKey) => LinkModel | undefined; readonly mapTemplateState: (from: TemplateState) => TemplateState; } export interface SerializedLink { '@type': string; '@id': string; source: { '@id': string; }; target: { '@id': string; }; vertices?: ReadonlyArray<Vector>; linkState?: SerializedTemplateState; } export declare function emptyDiagram(): SerializedDiagram; export interface DeserializedDiagram { elements: ReadonlyArray<Element>; links: ReadonlyArray<Link>; linkTypeVisibility: ReadonlyMap<LinkTypeIri, LinkTypeVisibility>; } export declare function serializeDiagram(diagram: DeserializedDiagram): SerializedDiagram; export interface DeserializeDiagramOptions { readonly elementCellTypes: readonly SerializableElementCell[]; readonly linkCellTypes: readonly SerializableLinkCell[]; readonly preloadedElements?: ReadonlyMap<ElementIri, ElementModel>; readonly preloadedLinks?: ReadonlyHashMap<LinkKey, LinkModel>; readonly markLinksAsLayoutOnly?: boolean; } export declare function deserializeDiagram(diagram: SerializedDiagram, options: DeserializeDiagramOptions): DeserializedDiagram; export declare function markLayoutOnly(linkState: TemplateState, value: boolean): TemplateState; export {}; //# sourceMappingURL=serializedDiagram.d.ts.map