import * as d3 from 'd3'; import { CollabTimestamp } from '../collab/primitives'; import { DiagramEntity, DiagramEntitySet } from './diagram-entity'; import { DiagramModel } from './diagram-model'; /** * Default priority value for diagram elements. * @private */ export declare const DEFAULT_PRIORITY = 0; /** * Represents an object which exists as part of a specific diagram model and has a visual representation in a diagram canvas. * @public * @see DiagramModel * @see DiagramCanvas */ export declare abstract class DiagramElement implements DiagramEntity { #private; /** * Diagram model this diagram element is part of. * @private */ readonly model: DiagramModel; /** * Identifier that uniquely identifies this element within its diagram model. Cannot be an empty string. * @public */ get id(): string; /** * Whether this diagram element is currently in the user highlight. * @private */ get highlighted(): boolean; /** * Whether this diagram element is currently in the user selection. */ get selected(): boolean; /** * Whether this diagram element has itself been explicitly removed. * * Override the `removed` getter so that it returns true if and only if: * - `selfRemoved` is true, or * - `removed` is true for any of this element's dependencies. * * For example, a DiagramConnection is removed if either of its ports are removed, * even if the connection's own `selfRemoved` field is false. * @private */ selfRemoved: boolean; /** * Collaborative timestamp for selfRemoved. * @private */ selfRemovedTimestamp: CollabTimestamp | null; constructor(model: DiagramModel, id: string); /** * Whether this diagram element has been soft removed, that is, * it has been marked as removed but the data is still in the model. * * An element can be removed because it was explicitly removed, or because one of * its dependencies was removed. For example, a DiagramConnection depends on both of its ports. * * @private */ abstract readonly removed: boolean; /** * Get the priority of this element to calculate whether it should be filtered out in the view or not. * @public */ abstract getPriority(): number; /** * Update the view of the canvas to show the current state of this element. * @public */ abstract updateInView(): void; /** * Put this element above other elements in the view. * @public */ abstract raise(): void; /** * Obtain the selection of this element. * @private */ select(): d3.Selection | undefined; } export declare class DiagramElementSet extends DiagramEntitySet { all(includeRemoved?: boolean): E[]; contains(id: string, includeRemoved?: boolean): boolean; count(predicate: (value: E, index: number, array: E[]) => unknown, includeRemoved?: boolean): number; filter(predicate: (value: E, index: number, array: E[]) => unknown, includeRemoved?: boolean): E[]; find(predicate: (value: E, index: number, array: E[]) => unknown, includeRemoved?: boolean): E | undefined; get(id: string, includeRemoved?: boolean): E | undefined; map(callback: (value: E, index: number, array: E[]) => R, includeRemoved?: boolean): R[]; remove(id: string): void; size(includeRemoved?: boolean): number; [Symbol.iterator](includeRemoved?: boolean): Iterator; }