import { ChainsCollection, ITwoStrandedChainItem } from "../../../../domain/entities/monomer-chains/ChainsCollection";
import { BaseMonomer, Vec2 } from "../../../../domain/entities";
import { BaseSequenceItemRenderer } from "./BaseSequenceItemRenderer";
import { Chain } from "../../../../domain/entities/monomer-chains/Chain";
import { SubChainNode } from "../../../../domain/entities/monomer-chains/types";
import { RestoreSequenceCaretPositionOperation } from "../../../editor/operations/modes";
import { Command } from "../../../../domain/entities/Command";
import { SequenceViewModel } from "./SequenceViewModel/SequenceViewModel";
import { SequenceViewModelChain } from "./SequenceViewModel/SequenceViewModelChain";
export declare type SequencePointer = number;
export declare type NumberOfSymbolsInRow = number;
export declare type SequenceLastCaretPosition = number;
declare type BaseNodeSelection = {
    nodeIndexOverall: number;
    isNucleosideConnectedAndSelectedWithPhosphate?: boolean;
    hasR1Connection?: boolean;
};
export declare type NodeSelection = BaseNodeSelection & {
    node: SubChainNode;
    twoStrandedNode?: ITwoStrandedChainItem;
};
export declare type TwoStrandedNodeSelection = BaseNodeSelection & {
    node: ITwoStrandedChainItem;
};
export declare type TwoStrandedNodesSelection = TwoStrandedNodeSelection[][];
export declare type NodesSelection = NodeSelection[][];
export declare class SequenceRenderer {
    static caretPosition: SequencePointer;
    static lastUserDefinedCaretPosition: SequenceLastCaretPosition;
    static chainsCollection: ChainsCollection;
    static lastChainStartPosition: Vec2;
    private static newSequenceButtons;
    static sequenceViewModel: SequenceViewModel;
    static show(chainsCollection: ChainsCollection, chainBeforeNewEmptyChainIndex?: number): void;
    private static setCaretToLastNodeInChain;
    static removeNewSequenceButtons(): void;
    private static addNewEmptyChainIfNeeded;
    private static showNodes;
    static getNextChainPosition(currentChainStartPosition?: Vec2, previousChainLength?: number): Vec2;
    private static showBonds;
    static setCaretPosition(caretPosition: SequencePointer): void;
    static forEachNode(forEachCallback: (params: {
        chainIndex: number;
        chain: SequenceViewModelChain;
        nodeIndex: number;
        nodeIndexOverall: number;
        twoStrandedNode: ITwoStrandedChainItem;
    }) => void): void;
    static setCaretPositionBySequenceItemRenderer(sequenceItemRenderer: BaseSequenceItemRenderer): void;
    static setCaretPositionByMonomer(monomer: BaseMonomer): void;
    static setCaretPositionNextToMonomer(monomer: BaseMonomer): void;
    static setCaretPositionByNode(nodeToCompare: ITwoStrandedChainItem): void;
    static getMonomersByCaretPositionRange(startCaretPosition: SequencePointer, endCaretPosition: any): BaseMonomer[];
    static resetLastUserDefinedCaretPosition(): void;
    private static get nodesGroupedByRows();
    private static getNodeIndexInRowByGlobalIndex;
    private static get currentChainRow();
    private static get previousRowOfNodes();
    private static get nextRowOfNodes();
    static moveCaretUp(): void;
    static moveCaretDown(): void;
    static moveCaretForward(): RestoreSequenceCaretPositionOperation;
    static moveCaretBack(): RestoreSequenceCaretPositionOperation;
    static get currentChainIndex(): number;
    static get lastNodeCaretPosition(): SequencePointer | undefined;
    static getNodeByPointer(sequencePointer?: SequencePointer): ITwoStrandedChainItem | undefined;
    static get currentEdittingNode(): ITwoStrandedChainItem | undefined;
    static get previousFromCurrentEdittingMonomer(): ITwoStrandedChainItem | undefined;
    static get currentChain(): Chain;
    static get previousChain(): SequenceViewModelChain;
    static get nextChain(): Chain;
    static getLastNonEmptyNode(chain: Chain): SubChainNode;
    static getLastNode(chain: Chain): SubChainNode;
    static get nextNode(): ITwoStrandedChainItem | undefined;
    static get previousNode(): ITwoStrandedChainItem | undefined;
    static get nextNodeInSameChain(): ITwoStrandedChainItem | undefined;
    static get previousNodeInSameChain(): ITwoStrandedChainItem | undefined;
    private static get nextCaretPosition();
    static get previousCaretPosition(): number | undefined;
    static get lastChain(): Chain;
    static get lastChainLength(): number;
    static startNewSequence(indexOfRowBefore?: number): void;
    static getPreviousNodeInSameChain(nodeToCompare: ITwoStrandedChainItem): ITwoStrandedChainItem | undefined;
    static getNextNodeInSameChain(nodeToCompare: ITwoStrandedChainItem): ITwoStrandedChainItem | undefined;
    static getPreviousNode(nodeToCompare: ITwoStrandedChainItem): ITwoStrandedChainItem | undefined;
    static getNextNode(nodeToCompare: ITwoStrandedChainItem): ITwoStrandedChainItem | undefined;
    static shiftArrowSelectionInEditMode(event: any): void;
    private static getShiftArrowChanges;
    static unselectEmptyAndBackboneSequenceNodes(): Command;
    static get selections(): TwoStrandedNodesSelection;
    static getRenderedStructuresBbox(): {
        left: any;
        right: any;
        top: any;
        bottom: any;
        width: number;
        height: number;
    };
    static getRendererByMonomer(monomer: BaseMonomer): any;
    static showNewSequenceButton(indexOfRowBefore: number): void;
    static isEmptyCanvas(): boolean;
    static get isCaretAtChainEnd(): boolean;
    static clear(): void;
}
export declare function sequenceReplacer(key: string, value: unknown): unknown;
export {};
