import React, { MouseEventHandler } from 'react'; import { WireItem } from './Wire'; import { DataRendererItem, PureDataRenderer } from '../component/DataRenderer'; import { ClientConn, FunctionDesc, PropDesc, PropGroupDesc, ValueSubscriber } from '@ticlo/core/editor'; import { DragState } from 'rc-dock'; import * as DragManager from 'rc-dock/src/dragdrop/DragManager'; export interface Stage { getBlock(path: string): BlockItem; getNextXYW(): [number, number, number]; linkParentBlock(parentPath: string, targetBlock: BlockItem): void; unlinkParentBlock(parentPath: string, targetBlock: BlockItem): void; linkField(sourcePath: string, targetField: FieldItem): void; unlinkField(sourcePath: string, targetField: FieldItem): void; registerField(path: string, item: FieldItem): void; unregisterField(path: string, item: FieldItem): void; forceUpdate(): void; selectBlock(path: string, ctrl?: boolean): void; startDragBlock(e: DragState): [BlockItem, number, number, number][]; onDragBlockMove(e: DragState): void; onDragBlockEnd(e: DragState): void; isDraggingBlock(): boolean; getRefElement(): HTMLElement; onChildrenSizeChanged(): void; focus(): void; } export declare class FieldItem extends DataRendererItem { block: BaseBlockItem; name: string; path: string; desc: PropDesc; indent: number; subBlock?: SubBlockItem; x: number; y: number; w: number; inWire?: WireItem; outWires: Set; _bindingPath?: string; _absBinding?: string; _bindingTargetPath?: string; setBindingPath(str: string): boolean; setDesc(desc: PropDesc): void; indents: number[]; updateFieldPos(x: number, y: number, w: number, dy: number, indents?: number[]): number; forceUpdateWires(recursiv?: boolean): void; getConn(): ClientConn; getBaseConn(): ClientConn; cache: any; listener: ValueSubscriber; constructor(block: BaseBlockItem, name: string); destroy(): void; removeInWire(): void; render(): React.ReactNode; sourceChanged(source: FieldItem, partial?: boolean): void; } interface FieldViewProps { item: FieldItem; } interface BlockHeaderProps extends FieldViewProps { onDragStartT?: DragManager.DragHandler; onDragMoveT?: DragManager.DragHandler; onDragEndT?: DragManager.DragHandler; onDoubleClick?: MouseEventHandler; } export declare class BlockHeaderView extends PureDataRenderer { onDragOver: (e: DragState) => void; onDrop: (event: DragState) => void; renderImpl(): React.ReactNode; } export declare class FieldView extends PureDataRenderer { onDragStart: (e: DragState) => void; onDragOver: (e: DragState) => void; onDrop: (event: DragState) => void; onNameDoubleClick: (event: React.MouseEvent) => void; renderImpl(): React.ReactNode; } export interface XYWRenderer { renderXYW(x: number, y: number, z: number): void; renderH(h: number): void; } export declare abstract class BaseBlockItem extends DataRendererItem { stage: Stage; path: string; conn: ClientConn; x: number; y: number; w: number; xyzInvalid: boolean; name: string; desc: FunctionDesc; more: (PropDesc | PropGroupDesc)[]; propDescCache: { [key: string]: PropDesc; }; fields: string[]; fieldItems: Map; getRenderFields(): string[]; abstract get selected(): boolean; constructor(connection: ClientConn, stage: Stage, path: string); abstract forceRendererChildren(): void; abstract onFieldsChanged(): void; isValue: string; isListener: ValueSubscriber; moreListener: ValueSubscriber; pListener: ValueSubscriber; descLoaded: boolean; descListener: (funcDesc: FunctionDesc) => void; startSubscribe(): void; setDesc(desc: FunctionDesc): void; createField(name: string): FieldItem; setP(fields: string[], forceRefresh?: boolean): void; updatePropCache(): void; forceUpdateFields(): void; renderFields(): React.ReactNode[]; destroy(): void; getConn(): ClientConn; } declare class SubBlockItem extends BaseBlockItem { parentField: FieldItem; constructor(connection: ClientConn, stage: Stage, path: string, field: FieldItem); hidden: boolean; hideListener: ValueSubscriber; startSubscribe(): void; get selected(): boolean; forceUpdate(): void; forceRendererChildren(): void; onFieldsChanged(): void; updateFieldPos(x: number, y: number, w: number, dy: number, indents: number[]): number; renderFields(): React.ReactNode[]; destroy(): void; } export declare class BlockItem extends BaseBlockItem { h: number; setH(h: number): void; selected: boolean; actualFields: string[]; setP(fields: string[]): void; getHeaderCallField(): FieldItem; constructor(connection: ClientConn, stage: Stage, path: string); startSubscribe(): void; synced: boolean; syncListener: ValueSubscriber; xywListener: ValueSubscriber; viewH: number; setViewH: (h: number) => void; forceRendererChildren(): void; onFieldsChanged(): void; getRenderFields(): string[]; setSelected(val: boolean): void; setXYW(x: number, y: number, w: number, save?: boolean): void; updateFieldPosition: () => void; onAttached(): void; onDetached(): void; linkSyncParent(parent: BlockItem): void; unLinkSyncParent(): void; _syncParentPath: string; setSyncParentPath(parentPath: string): void; _syncChild: BlockItem; _syncParent: BlockItem; set syncParent(parent: BlockItem); set syncChild(child: BlockItem); destroy(): void; } export {};