UNPKG

@eclipse-glsp/client

Version:

A sprotty-based client for GLSP

197 lines 8.94 kB
/******************************************************************************** * Copyright (c) 2019-2024 EclipseSource and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. * * This Source Code may also be made available under the following Secondary * Licenses when the conditions for such availability set forth in the Eclipse * Public License v. 2.0 are satisfied: GNU General Public License, version 2 * with the GNU Classpath Exception which is available at * https://www.gnu.org/software/classpath/license.html. * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ import { Action, ElementAndBounds, ElementMove, GModelElement, IActionDispatcher, IActionHandler, ICommand, Writable } from '@eclipse-glsp/sprotty'; import { SelectionService } from '../../base/selection-service'; import { BoundsAwareModelElement } from '../../utils/gmodel-util'; import { IMovementRestrictor } from '../change-bounds/movement-restrictor'; /** * Used to specify the desired resize dimension for a {@link ResizeElementsCommand}. */ export declare enum ResizeDimension { Width = 0, Height = 1, Width_And_Height = 2 } /** * A function that computes a single number from a set of given numbers * i.e. it reduces the given numbers to one single number. * Mainly used by the {@link ResizeElementsCommand} to reduce the given dimensions to a target dimension value. */ export type ReduceFunction = (...values: number[]) => number; export declare namespace ReduceFunction { /** * Returns the minimal value of the given numbers. * @param values Numbers to be evaluated. * @returns The reduced number. */ function min(...values: number[]): number; /** * Returns the maximal value of the given numbers. * @param values Numbers to be evaluated. * @returns The reduced number. */ function max(...values: number[]): number; /** * Computes the average of the given numbers. * @param values Numbers to be evaluated. */ function avg(...values: number[]): number; /** * Returns the last value of the given numbers. * @param values Numbers to be evaluated. * @returns The reduced number. */ function first(...values: number[]): number; /** * Returns the minimal value of the given numbers. * @param values Numbers to be evaluated. * @returns The reduced number. */ function last(...values: number[]): number; /** * Returns the reduce function that corresponds to the given {@link ReduceFunctionType}. * @param type The reduce function kind. * @returns The corresponding reduce function. */ function get(type: ReduceFunctionType): ReduceFunction; } /** Union type of all {@link ReduceFunction} keys. */ export type ReduceFunctionType = Exclude<keyof typeof ReduceFunction, 'get'>; export interface ResizeElementsAction extends Action { kind: typeof ResizeElementsAction.KIND; /** * IDs of the elements that should be resized. If no IDs are given, the selected elements will be resized. */ elementIds: string[]; /** * Resize dimension. The default is {@link ResizeDimension.Width}. */ dimension: ResizeDimension; /** * Type of the {@link ReduceFunction} that should be used to reduce the dimension to a target dimension value */ reduceFunction: ReduceFunctionType; } export declare namespace ResizeElementsAction { const KIND = "resizeElementAction"; function is(object: any): object is ResizeElementsAction; function create(options: { elementIds?: string[]; dimension?: ResizeDimension; reduceFunction: ReduceFunctionType; }): ResizeElementsAction; } export declare abstract class LayoutElementsActionHandler implements IActionHandler { protected actionDispatcher: IActionDispatcher; protected selectionService: SelectionService; protected movementRestrictor?: IMovementRestrictor; abstract handle(action: Action): void | Action | ICommand; getSelectedElements(selection: { elementIds: string[]; }): BoundsAwareModelElement[]; protected abstract isActionElement(element: GModelElement): element is BoundsAwareModelElement; dispatchAction(action: Action): void; dispatchActions(actions: Action[]): void; } export declare class ResizeElementsActionHandler extends LayoutElementsActionHandler { handle(action: ResizeElementsAction): void; resizeWidth(elements: BoundsAwareModelElement[], reduceFn: ReduceFunction): void; resizeHeight(elements: BoundsAwareModelElement[], reduceFn: ReduceFunction): void; resizeWidthAndHeight(elements: BoundsAwareModelElement[], reduceFn: ReduceFunction): void; dispatchResizeActions(elements: BoundsAwareModelElement[], change: (element: BoundsAwareModelElement, bounds: Writable<ElementAndBounds>) => void): void; createElementAndBounds(element: BoundsAwareModelElement, change: (_element: BoundsAwareModelElement, _bounds: Writable<ElementAndBounds>) => void): Writable<ElementAndBounds> | undefined; protected isActionElement(element: GModelElement): element is BoundsAwareModelElement; } export declare enum Alignment { Left = 0, Center = 1, Right = 2, Top = 3, Middle = 4, Bottom = 5 } /** * A function that retrieves a specific (sub)-selection of elements from a given set of elements. * Mainly used by the {@link AlignElementsActionHandler}. */ export type SelectFunction = (elements: BoundsAwareModelElement[]) => BoundsAwareModelElement[]; export declare namespace SelectFunction { /** * Select all elements from the given set of elements. * @param elements The set of elements. * @returns All elements. */ function all(elements: BoundsAwareModelElement[]): BoundsAwareModelElement[]; /** * Select the first element from a given set of elements. * @param elements The elements. * @returns An array containing the first element of the given elements. */ function first(elements: BoundsAwareModelElement[]): BoundsAwareModelElement[]; /** * Select the last element from a given set of elements. * @param elements The elements. * @returns An array containing the last element of the given elements. */ function last(elements: BoundsAwareModelElement[]): BoundsAwareModelElement[]; /** * Returns the select function that corresponds to the given {@link SelectFunctionType}. * @param type The select function type. * @returns The corresponding select function. */ function get(kind: SelectFunctionType): SelectFunction; } /** Union type of all {@link SelectFunction} keys. */ export type SelectFunctionType = Exclude<keyof typeof SelectFunction, 'get'>; export interface AlignElementsAction extends Action { kind: typeof AlignElementsAction.KIND; /** * IDs of the elements that should be aligned. If no IDs are given, the selected elements will be aligned. */ elementIds: string[]; /** * Alignment direction. The default is {@link Alignment.Left} */ alignment: Alignment; /** * Function to selected elements that are considered during alignment calculation. * The default value is {@link Select.all}. */ selectFunction: SelectFunctionType; } export declare namespace AlignElementsAction { const KIND = "alignElements"; function is(object: any): object is AlignElementsAction; function create(options?: { elementIds?: string[]; alignment?: Alignment; selectionFunction?: SelectFunctionType; }): AlignElementsAction; } export declare class AlignElementsActionHandler extends LayoutElementsActionHandler { handle(action: AlignElementsAction): void; alignLeft(elements: BoundsAwareModelElement[]): void; alignCenter(elements: BoundsAwareModelElement[]): void; alignRight(elements: BoundsAwareModelElement[]): void; alignTop(elements: BoundsAwareModelElement[]): void; alignMiddle(elements: BoundsAwareModelElement[]): void; alignBottom(elements: BoundsAwareModelElement[]): void; dispatchAlignActions(elements: BoundsAwareModelElement[], change: (element: BoundsAwareModelElement, move: Writable<ElementMove>) => void): void; createElementMove(element: BoundsAwareModelElement, change: (_element: BoundsAwareModelElement, _move: Writable<ElementMove>) => void): Writable<ElementMove> | undefined; createElementAndBounds(element: BoundsAwareModelElement, move: ElementMove): ElementAndBounds; protected isActionElement(element: GModelElement): element is BoundsAwareModelElement; } //# sourceMappingURL=layout-elements-action.d.ts.map