UNPKG

@gravity-ui/graph

Version:

Modern graph editor component

125 lines (124 loc) 4.16 kB
import type { Signal } from "@preact/signals-core"; import { TAnchor } from "../../components/canvas/anchors"; import { Block, TBlock } from "../../components/canvas/blocks/Block"; import { ESelectionStrategy, ISelectionBucket } from "../../services/selection/types"; import { AnchorState } from "../anchor/Anchor"; import { BlockListStore } from "./BlocksList"; export type TBlockId = string | number; export declare const IS_BLOCK_TYPE: "Block"; export declare class BlockState<T extends TBlock = TBlock> { readonly store: BlockListStore; private readonly blockSelectionBucket; static fromTBlock(store: BlockListStore, block: TBlock): BlockState<TBlock>; protected $rawState: Signal<T>; /** * Block state signal * * @returns {ReadonlySignal<T>} Block state */ $state: import("@preact/signals-core").ReadonlySignal<T & { selected: boolean; }>; /** * Block id */ get id(): TBlockId; /** * Block x position */ get x(): number; /** * Block y position */ get y(): number; /** * Block width */ get width(): number; /** * Block height */ get height(): number; /** * Block selected */ get selected(): boolean; /** * Computed signal that reactively determines if this block is selected * by checking if its ID exists in the selection bucket */ readonly $selected: import("@preact/signals-core").ReadonlySignal<boolean>; readonly $anchorStates: Signal<AnchorState[]>; /** * Block geometry signal * * Pay attention!! x and y are rounded to integer * * @returns {ReadonlySignal<{x: number, y: number, width: number, height: number}>} Block geometry */ readonly $geometry: import("@preact/signals-core").ReadonlySignal<{ x: number; y: number; width: number; height: number; }>; /** * Block anchor indexes signal * * @returns {ReadonlySignal<Map<string, number>>} Block anchor indexes */ $anchorIndexs: import("@preact/signals-core").ReadonlySignal<Map<string, number>>; /** * Block anchors signal * * @returns {ReadonlySignal<TAnchor[]>} Block anchors */ $anchors: import("@preact/signals-core").ReadonlySignal<TAnchor[]>; /** * Block selected anchors signal * * @returns {TAnchor[]} Block selected anchors */ $selectedAnchors: import("@preact/signals-core").ReadonlySignal<AnchorState[]>; private blockView; constructor(store: BlockListStore, block: T, blockSelectionBucket: ISelectionBucket<string | number>); onAnchorSelected(anchorId: AnchorState["id"], selected: boolean): void; setSelection(selected: boolean, strategy?: ESelectionStrategy): void; getSelectedAnchor(): AnchorState; getAnchorState(id: AnchorState["id"]): AnchorState; updateXY(x: number, y: number, forceUpdate?: boolean): void; setViewComponent(blockComponent: Block): void; getViewComponent(): Block<TBlock<{}>, import("../../components/canvas/blocks/Block").TBlockProps>; getConnections(): import("../..").ConnectionState<{ id?: import("../..").TConnectionId; sourceBlockId?: TBlockId; targetBlockId?: TBlockId; sourceAnchorId?: string; targetAnchorId?: string; sourcePortId?: import("../connection/port/Port").TPortId; targetPortId?: import("../connection/port/Port").TPortId; label?: string; styles?: Partial<import("../../graphConfig").TConnectionColors> & { dashes?: number[]; }; dashed?: boolean; selected?: boolean; }>[]; clearAnchorsSelection(): void; setName(newName: string): void; updateAnchors(anchors: TAnchor[]): void; /** * Updates block state * * @param block {Partial<TBlock>} Block to update * @returns void */ updateBlock(block: Partial<TBlock>): void; getAnchorById(anchorId: string): AnchorState; /** * Converts the block state to a TBlock * * @returns {TBlock} TBlock */ asTBlock(): TBlock; }