import { AbstractView, AbstractViewInterface } from "../AbstractView";
import { StructureViewerPublicInterface, ViewerActionManagerInterface } from "../../../RcsbFvStructure/StructureViewerInterface";
import { RcsbFvStateInterface } from "../../../RcsbFvState/RcsbFvStateInterface";
import { RcsbFv } from "@rcsb/rcsb-saguaro/lib/RcsbFv/RcsbFv";
import { RcsbFvBoardConfigInterface, RcsbFvRowConfigInterface } from "@rcsb/rcsb-saguaro/lib/RcsbFv/RcsbFvConfig/RcsbFvConfigInterface";
import { RcsbFvTrackDataElementInterface } from "@rcsb/rcsb-saguaro/lib/RcsbDataManager/RcsbDataManager";
import { ReactNode } from "react";
export type CustomViewStateInterface<R, L> = Omit<Omit<CustomViewInterface<R, L>, "modelChangeCallback">, "structureViewer">;
export interface CustomViewInterface<R, L> {
    blockConfig: FeatureBlockInterface<R, L> | Array<FeatureBlockInterface<R, L>>;
    blockSelectorElement?: (blockSelector: BlockSelectorManager) => ReactNode;
    modelChangeCallback?: () => CustomViewStateInterface<R, L>;
    blockChangeCallback?: (plugin: StructureViewerPublicInterface<R, L>, pfvList: Array<RcsbFv>, stateManager: RcsbFvStateInterface) => void;
}
export interface FeatureBlockInterface<R, L> {
    blockId: string;
    blockTitle?: string;
    blockShortName?: string;
    featureViewConfig: Array<FeatureViewInterface<R, L>> | FeatureViewInterface<R, L>;
}
export interface FeatureViewInterface<R, L> {
    boardId?: string;
    boardConfig: RcsbFvBoardConfigInterface;
    rowConfig: Array<RcsbFvRowConfigInterface>;
    sequenceSelectionChangeCallback: (plugin: StructureViewerPublicInterface<R, L>, stateManager: RcsbFvStateInterface, sequenceRegion: Array<RcsbFvTrackDataElementInterface>) => void;
    sequenceElementClickCallback: (plugin: StructureViewerPublicInterface<R, L>, stateManager: RcsbFvStateInterface, d?: RcsbFvTrackDataElementInterface) => void;
    sequenceHoverCallback: (plugin: StructureViewerPublicInterface<R, L>, stateManager: RcsbFvStateInterface, hoverRegion: Array<RcsbFvTrackDataElementInterface>) => void;
    structureSelectionCallback: (plugin: StructureViewerPublicInterface<R, L>, pfv: RcsbFv, stateManager: RcsbFvStateInterface) => void;
    structureHoverCallback: (plugin: StructureViewerPublicInterface<R, L>, pfv: RcsbFv, stateManager: RcsbFvStateInterface) => void;
}
export declare class BlockSelectorManager {
    private blockId;
    private previousBlockId;
    private readonly blockChangeCallback;
    constructor(f: () => void);
    setActiveBlock(blockId: string): void;
    getActiveBlock(): string;
    getPreviousBlock(): string;
}
export declare class CustomView<R, L> extends AbstractView<CustomViewInterface<R, L> & {
    structureViewer: ViewerActionManagerInterface<R, L>;
}, CustomViewStateInterface<R, L>> {
    private blockViewSelector;
    private boardMap;
    private blockMap;
    private rcsbFvMap;
    private firstModelLoad;
    private innerSelectionFlag;
    private updateContext;
    readonly state: CustomViewStateInterface<R, L>;
    constructor(props: CustomViewInterface<R, L> & {
        structureViewer: ViewerActionManagerInterface<R, L>;
    } & AbstractViewInterface);
    componentDidMount(): void;
    componentWillUnmount(): void;
    componentDidUpdate(prevProps: Readonly<CustomViewInterface<R, L> & AbstractViewInterface>, prevState: Readonly<CustomViewStateInterface<R, L>>, snapshot?: any): void;
    private mapBlocks;
    private blockChange;
    private unmountBlockFv;
    private buildBlockFv;
    structureSelectionCallback(): void;
    structureHoverCallback(): void;
    representationChangeCallback(): void;
    additionalContent(): ReactNode;
    modelChangeCallback(): void;
    setState<K extends keyof CustomViewStateInterface<R, L>>(state: ((prevState: Readonly<CustomViewStateInterface<R, L>>, props: Readonly<CustomViewInterface<R, L> & AbstractViewInterface>) => (Pick<CustomViewStateInterface<R, L>, K> | CustomViewStateInterface<R, L> | null)) | Pick<CustomViewStateInterface<R, L>, K> | CustomViewStateInterface<R, L> | null, callback?: () => void): void;
    updateDimensions(): void;
}
