import { ElementModel, ElementTypeIri, LinkTypeIri, PropertyTypeIri, LinkModel, ElementIri } from './model'; import { LinkDirection } from '../diagram/elements'; import { CancellationToken } from '../viewUtils/async'; export interface MetadataApi { /** * Can user create element and link from this element? */ canDropOnCanvas(source: ElementModel, ct: CancellationToken): Promise; /** * Can we create link between two elements? Maybe it's unnesesary. */ canDropOnElement(source: ElementModel, target: ElementModel, ct: CancellationToken): Promise; /** * Links of which types can we create between elements? */ possibleLinkTypes(source: ElementModel, target: ElementModel, ct: CancellationToken): Promise; /** * If new element is created by dragging link from existing element, this should return available element types. */ typesOfElementsDraggedFrom(source: ElementModel, ct: CancellationToken): Promise; /** * List properties for type meant to be edited in-place. */ propertiesForType(type: ElementTypeIri, ct: CancellationToken): Promise; filterConstructibleTypes( types: ReadonlySet, ct: CancellationToken ): Promise>; canDeleteElement(element: ElementModel, ct: CancellationToken): Promise; canEditElement(element: ElementModel, ct: CancellationToken): Promise; canLinkElement(element: ElementModel, ct: CancellationToken): Promise; canDeleteLink(link: LinkModel, source: ElementModel, target: ElementModel, ct: CancellationToken): Promise; canEditLink(link: LinkModel, source: ElementModel, target: ElementModel, ct: CancellationToken): Promise; generateNewElement(types: ReadonlyArray, ct: CancellationToken): Promise; } export interface DirectedLinkType { readonly linkTypeIri: LinkTypeIri; readonly direction: LinkDirection; }