import { TranslatedText } from '../coreUtils/i18n';
import type { LinkTypeIri } from '../data/model';
import type { CanvasApi } from './canvasApi';
import type { Element, ElementTemplateState, Link, LinkTemplateState, LinkTypeVisibility } from './elements';
import { SizeProvider } from './geometry';
import { Command } from './history';
import type { DiagramModel, GraphStructure } from './model';
/**
 * Command to restore element positions and link geometry (vertices) on a canvas.
 *
 * **Example**:
 * ```ts
 * const capturedGeometry = RestoreGeometry.capture(model);
 * // ... (move elements, change link vertices) ...
 * restoreGeometry = capturedGeometry.filterOutUnchanged();
 * if (restoreGeometry.hasChanges()) {
 *     model.history.registerToUndo(restoreGeometry);
 * }
 * ```
 *
 * @category Commands
 */
export declare class RestoreGeometry implements Command {
    private elementState;
    private linkState;
    private static _title;
    private constructor();
    /**
     * Creates {@link RestoreGeometry} command with captured geometry for all diagram content.
     */
    static capture(graph: GraphStructure): RestoreGeometry;
    /**
     * Creates {@link RestoreGeometry} command with captured geometry for the specified
     * subset of a diagram content.
     */
    static capturePartial(elements: ReadonlyArray<Element>, links: ReadonlyArray<Link>): RestoreGeometry;
    get title(): TranslatedText;
    /**
     * Returns `true` if command contains any captured geometry state to restore,
     * otherwise `false`.
     */
    hasChanges(): boolean;
    /**
     * Creates a derived {@link RestoreGeometry} command by removing any geometry state
     * which is equal to the current diagram content geometry state.
     *
     * This is useful to avoid adding a command without actual changes to the command history
     * and to reduce the amount of memory to store captured geometry withing the command.
     */
    filterOutUnchanged(): RestoreGeometry;
    invoke(): RestoreGeometry;
}
/**
 * Command to restore single link geometry (vertices) on a canvas.
 *
 * **Example**:
 * ```ts
 * const restoreLink = restoreCapturedLinkGeometry(link);
 * new LinkVertex(link, 0).remove();
 * model.history.registerToUndo(restoreLink);
 * ```
 *
 * @category Commands
 */
export declare function restoreCapturedLinkGeometry(link: Link): Command;
/**
 * Command to set {@link Element.elementState element template state}.
 *
 * @category Commands
 */
export declare function setElementState(element: Element, state: ElementTemplateState | undefined): Command;
/**
 * Command to toggle element expanded or collapsed.
 *
 * @category Commands
 */
export declare function setElementExpanded(element: Element, expanded: boolean): Command;
/**
 * Command to set link template state.
 *
 * @category Commands
 */
export declare function setLinkState(link: Link, state: LinkTemplateState | undefined): Command;
/**
 * Command to change link type visibility.
 *
 * @category Commands
 */
export declare function changeLinkTypeVisibility(model: DiagramModel, linkTypeId: LinkTypeIri, visibility: LinkTypeVisibility): Command;
/**
 * Command to restore canvas viewport position and scale.
 *
 * **Example**:
 * ```ts
 * const restoreScale = restoreViewport(canvas);
 * canvas.zoomToFit();
 * model.registerToUndo(restoreScale);
 * ```
 *
 * @category Commands
 */
export declare function restoreViewport(canvas: CanvasApi): Command;
/**
 * Command to move specified `elements` at the distance around `target` element,
 * trying to minimize overlapping elements.
 *
 * @category Commands
 */
export declare function placeElementsAroundTarget(params: {
    /**
     * Elements to place around the target element.
     */
    elements: ReadonlyArray<Element>;
    /**
     * Target element around which to place elements.
     */
    target: Element;
    /**
     * Diagram model to get graph structure for optimal placement.
     */
    graph: GraphStructure;
    /**
     * Size provider for the elements.
     */
    sizeProvider: SizeProvider;
    /**
     * Preferred distance from the target to place elements.
     *
     * @default 300
     */
    distance?: number;
}): Command;
//# sourceMappingURL=commands.d.ts.map