UNPKG

@gravity-ui/graph

Version:

Modern graph editor component

62 lines (61 loc) 3.25 kB
import { Signal } from "@preact/signals-core"; import { Graph } from "../../../graph"; import { CoreComponent } from "../../../lib"; import { TComponentState } from "../../../lib/Component"; import { Layer, LayerContext, LayerProps } from "../../../services/Layer"; import { BlockState } from "../../../store/block/Block"; import { GroupState, TGroup, TGroupId } from "../../../store/group/Group"; import { TRect } from "../../../utils/types/shapes"; import { Group } from "./Group"; export type BlockGroupsProps<T extends TGroup = TGroup> = LayerProps & { mapBlockGroups?: (blocks: BlockState[]) => GroupState[]; groupComponent?: typeof Group<T>; draggable?: boolean; }; export type BlockGroupsContext = LayerContext & { canvas: HTMLCanvasElement; ctx: CanvasRenderingContext2D; root?: HTMLElement; ownerDocument: Document | HTMLElement; graph: Graph; }; export type BlockGroupsState = TComponentState & { groups: GroupState[]; }; export declare class BlockGroups<P extends BlockGroupsProps = BlockGroupsProps> extends Layer<P, BlockGroupsContext, BlockGroupsState> { static withBlockGrouping({ groupingFn, mapToGroups, }: { groupingFn: (blocks: BlockState[]) => Record<string, BlockState[]>; mapToGroups: (key: string, params: { blocks: BlockState[]; rect: TRect; }) => TGroup; }): typeof BlockGroups<BlockGroupsProps & { updateBlocksOnDrag?: boolean; }>; protected $groupsBlocksMap: Signal<Record<string, BlockState<import("../blocks/Block").TBlock>[]>>; protected $groupsSource: import("@preact/signals-core").ReadonlySignal<GroupState[]>; constructor(props: P); protected afterInit(): void; getParent(): CoreComponent | undefined; updateBlocks: (groupId: TGroupId, { diffX, diffY }: { diffX: number; diffY: number; }) => void; setGroups<T extends TGroup>(groups: T[]): void; updateGroups<T extends TGroup>(groups: T[]): void; protected unmountLayer(): void; protected getGroupComponent(group: GroupState): { new (props: import("./Group").TGroupProps, parent: BlockGroups): Group<TGroup>; define(config: { style?: Partial<import("./Group").TGroupStyle>; geometry?: Partial<import("./Group").TGroupGeometry>; }): typeof Group; create<Props extends import("../../../lib/CoreComponent").CoreComponentProps, Context extends import("../../../lib/CoreComponent").CoreComponentContext>(this: Constructor<CoreComponent<Props, Context>>, props?: Props, options?: { readonly key?: string; readonly ref?: ((inst: any) => void) | string; }): import("../../../lib/CoreComponent").ComponentDescriptor<Props, Context>; mount<Props extends import("../../../lib/CoreComponent").CoreComponentProps, Context extends import("../../../lib/CoreComponent").CoreComponentContext>(Component: Constructor<CoreComponent<Props, Context>>, props?: Props): CoreComponent<Props, Context>; unmount(instance: any): void; }; protected updateChildren(): import("../../../lib/CoreComponent").ComponentDescriptor<import("./Group").TGroupProps, import("../layers/graphLayer/GraphLayer").TGraphLayerContext>[]; }