jstd-web/node_modules/diagram-js/lib/core/Canvas.d.ts

378 lines
9.8 KiB
TypeScript

import ElementRegistry from './ElementRegistry';
import EventBus from './EventBus';
import GraphicsFactory from './GraphicsFactory';
import {
ConnectionLike,
RootLike,
ShapeLike
} from '.';
import {
Dimensions,
Point,
Rect,
RectTRBL
} from '../util/Types';
export type CanvasConfig = {
container?: HTMLElement;
deferUpdate?: boolean;
width?: number;
height?: number;
};
export interface CanvasLayer {
group: SVGElement;
index: number;
visible: boolean;
}
export type CanvasLayers = {
[key: string]: CanvasLayer;
};
export type CanvasPlane = {
rootElement: ShapeLike;
layer: CanvasLayer;
};
export interface CanvasViewbox extends Rect {
scale: number;
inner: Rect;
outer: Dimensions;
}
/**
* The main drawing canvas.
*
* @class
* @constructor
*
* @emits Canvas#canvas.init
*
* @param config
* @param eventBus
* @param graphicsFactory
* @param elementRegistry
*/
export default class Canvas {
constructor(config: CanvasConfig, eventBus: EventBus, graphicsFactory: GraphicsFactory, elementRegistry: ElementRegistry);
/**
* Returns the default layer on which
* all elements are drawn.
*
* @return The SVG element of the layer.
*/
getDefaultLayer(): SVGElement;
/**
* Returns a layer that is used to draw elements
* or annotations on it.
*
* Non-existing layers retrieved through this method
* will be created. During creation, the optional index
* may be used to create layers below or above existing layers.
* A layer with a certain index is always created above all
* existing layers with the same index.
*
* @param name The name of the layer.
* @param index The index of the layer.
*
* @return {SVGElement} The SVG element of the layer.
*/
getLayer(name: string, index?: number): SVGElement;
/**
* Shows a given layer.
*
* @param layer The name of the layer.
*
* @return The SVG element of the layer.
*/
showLayer(name: string): SVGElement;
/**
* Hides a given layer.
*
* @param {string} layer The name of the layer.
*
* @return {SVGElement} The SVG element of the layer.
*/
hideLayer(name: string): SVGElement;
/**
* Returns the currently active layer. Can be null.
*
* @return The active layer of `null`.
*/
getActiveLayer(): CanvasLayer | null;
/**
* Returns the plane which contains the given element.
*
* @param element The element or its ID.
*
* @return The root of the element.
*/
findRoot(element: ShapeLike | ConnectionLike | string): RootLike | undefined;
/**
* Return a list of all root elements on the diagram.
*
* @return The list of root elements.
*/
getRootElements(): (RootLike)[];
/**
* Returns the html element that encloses the
* drawing canvas.
*
* @return The HTML element of the container.
*/
getContainer(): HTMLElement;
/**
* Adds a marker to an element (basically a css class).
*
* Fires the element.marker.update event, making it possible to
* integrate extension into the marker life-cycle, too.
*
* @example
*
* canvas.addMarker('foo', 'some-marker');
*
* const fooGfx = canvas.getGraphics('foo');
*
* fooGfx; // <g class="... some-marker"> ... </g>
*
* @param element The element or its ID.
* @param marker The marker.
*/
addMarker(element: ShapeLike | ConnectionLike | string, marker: string): void;
/**
* Remove a marker from an element.
*
* Fires the element.marker.update event, making it possible to
* integrate extension into the marker life-cycle, too.
*
* @param element The element or its ID.
* @param marker The marker.
*/
removeMarker(element: ShapeLike | ConnectionLike | string, marker: string): void;
/**
* Check whether an element has a given marker.
*
* @param element The element or its ID.
* @param marker The marker.
*/
hasMarker(element: ShapeLike | ConnectionLike | string, marker: string): boolean;
/**
* Toggles a marker on an element.
*
* Fires the element.marker.update event, making it possible to
* integrate extension into the marker life-cycle, too.
*
* @param element The element or its ID.
* @param marker The marker.
*/
toggleMarker(element: ShapeLike | ConnectionLike | string, marker: string): void;
/**
* Returns the current root element.
*
* Supports two different modes for handling root elements:
*
* 1. if no root element has been added before, an implicit root will be added
* and returned. This is used in applications that don't require explicit
* root elements.
*
* 2. when root elements have been added before calling `getRootElement`,
* root elements can be null. This is used for applications that want to manage
* root elements themselves.
*
* @return The current root element.
*/
getRootElement(): RootLike;
/**
* Adds a given root element and returns it.
*
* @param rootElement The root element to be added.
*
* @return The added root element or an implicit root element.
*/
addRootElement(rootElement?: ShapeLike): RootLike;
/**
* Removes a given root element and returns it.
*
* @param rootElement The root element or its ID.
*
* @return The removed root element.
*/
removeRootElement(rootElement: ShapeLike | string): ShapeLike | undefined;
/**
* Sets a given element as the new root element for the canvas
* and returns the new root element.
*
* @param rootElement The root element to be set.
*
* @return The set root element.
*/
setRootElement(rootElement: RootLike): RootLike;
/**
* Adds a shape to the canvas.
*
* @param shape The shape to be added.
* @param parent The shape's parent.
* @param parentIndex The index at which to add the shape to the parent's children.
*
* @return The added shape.
*/
addShape(shape: ShapeLike, parent?: ShapeLike, parentIndex?: number): ShapeLike;
/**
* Adds a connection to the canvas.
*
* @param connection The connection to be added.
* @param parent The connection's parent.
* @param parentIndex The index at which to add the connection to the parent's children.
*
* @return The added connection.
*/
addConnection(connection: ConnectionLike, parent?: ShapeLike, parentIndex?: number): ConnectionLike;
/**
* Removes a shape from the canvas.
*
* @param shape The shape or its ID.
*
* @return The removed shape.
*/
removeShape(shape: ShapeLike | string): ShapeLike;
/**
* Removes a connection from the canvas.
*
* @param connection The connection or its ID.
*
* @return The removed connection.
*/
removeConnection(connection: ConnectionLike | string): ConnectionLike;
/**
* Returns the graphical element of an element.
*
* @param element The element or its ID.
* @param secondary Whether to return the secondary graphical element.
*
* @return The graphical element.
*/
getGraphics(element: ShapeLike | ConnectionLike | string, secondary?: boolean): SVGElement;
/**
* Gets or sets the view box of the canvas, i.e. the
* area that is currently displayed.
*
* The getter may return a cached viewbox (if it is currently
* changing). To force a recomputation, pass `false` as the first argument.
*
* @example
*
* canvas.viewbox({ x: 100, y: 100, width: 500, height: 500 })
*
* // sets the visible area of the diagram to (100|100) -> (600|100)
* // and and scales it according to the diagram width
*
* const viewbox = canvas.viewbox(); // pass `false` to force recomputing the box.
*
* console.log(viewbox);
* // {
* // inner: Dimensions,
* // outer: Dimensions,
* // scale,
* // x, y,
* // width, height
* // }
*
* // if the current diagram is zoomed and scrolled, you may reset it to the
* // default zoom via this method, too:
*
* const zoomedAndScrolledViewbox = canvas.viewbox();
*
* canvas.viewbox({
* x: 0,
* y: 0,
* width: zoomedAndScrolledViewbox.outer.width,
* height: zoomedAndScrolledViewbox.outer.height
* });
*
* @param box The viewbox to be set.
*
* @return The set viewbox.
*/
viewbox(box?: Rect): CanvasViewbox;
/**
* Gets or sets the scroll of the canvas.
*
* @param delta The scroll to be set.
*/
scroll(delta: Point): Point;
/**
* Scrolls the viewbox to contain the given element.
* Optionally specify a padding to be applied to the edges.
*
* @param element The element to scroll to or its ID.
* @param padding The padding to be applied. Can also specify top, bottom, left and right.
*/
scrollToElement(element: ShapeLike | ConnectionLike | string, padding?: RectTRBL | number): void;
/**
* Gets or sets the current zoom of the canvas, optionally zooming to the
* specified position.
*
* The getter may return a cached zoom level. Call it with `false` as the first
* argument to force recomputation of the current level.
*
* @param newScale The new zoom level, either a number,
* i.e. 0.9, or `fit-viewport` to adjust the size to fit the current viewport.
* @param center The reference point { x: ..., y: ...} to zoom to.
*
* @return The set zoom level.
*/
zoom(newScale?: number | 'fit-viewport', center?: Point): number;
/**
* Returns the size of the canvas.
*
* @return The size of the canvas.
*/
getSize(): Dimensions;
/**
* Returns the absolute bounding box of an element.
*
* The absolute bounding box may be used to display overlays in the callers
* (browser) coordinate system rather than the zoomed in/out canvas coordinates.
*
* @param element The element.
*
* @return The element's absolute bounding box.
*/
getAbsoluteBBox(element: ShapeLike | ConnectionLike): Rect;
/**
* Fires an event in order other modules can react to the
* canvas resizing
*/
resized(): void;
}