import { ICell, IColumn, IColumnComponent, IRow, IRowManager, RowModules } from '../../../../../../types/src/table';
import { default as CoreFeature } from '../CoreFeature';
import { default as RowComponent } from './RowComponent';

export default class Row extends CoreFeature implements IRow {
    parent: IRowManager;
    data: Record<string, any>;
    type: string;
    element: HTMLElement | false;
    modules: RowModules;
    cells: ICell[];
    height: number;
    heightStyled: string;
    manualHeight: boolean;
    outerHeight: number;
    initialized: boolean;
    heightInitialized: boolean;
    position: number;
    positionWatchers: Array<(position: number) => void>;
    component: RowComponent | null;
    hoverMenuElement: HTMLElement | null;
    created: boolean;
    constructor(data: Record<string, any>, parent: IRowManager, type?: string);
    create(): void;
    createElement(): void;
    getElement(): HTMLElement;
    detachElement(): void;
    generateElement(): void;
    generateCells(): void;
    initialize(force?: boolean, inFragment?: boolean): void;
    rendered(): void;
    reinitializeHeight(): void;
    deinitialize(): void;
    deinitializeHeight(): void;
    reinitialize(): void;
    calcHeight(force?: boolean): void;
    calcMinHeight(): number;
    calcMaxHeight(): number;
    setCellHeight(): void;
    clearCellHeight(): void;
    normalizeHeight(force?: boolean): void;
    setHeight(height: number, force?: boolean): void;
    getHeight(): number;
    getWidth(): number;
    deleteCell(cell: ICell): void;
    setData(data: Record<string, any>): void;
    updateData(updatedData: Record<string, any> | string): Promise<void>;
    getData(transform?: string): Record<string, any>;
    getCell(column: string | IColumn | IColumnComponent): ICell | undefined;
    getCellIndex(findCell: ICell): number;
    findCell(subject: HTMLElement): ICell | undefined;
    getCells(): ICell[];
    nextRow(): IRow | false;
    prevRow(): IRow | false;
    moveToRow(to: any, before?: boolean): void;
    delete(): Promise<void>;
    deleteActual(blockRedraw?: boolean): void;
    detachModules(): void;
    deleteCells(): void;
    wipe(): void;
    isDisplayed(): boolean;
    getPosition(): number | false;
    setPosition(position: number): void;
    watchPosition(callback: (position: number) => void): void;
    getGroup(): any | false;
    /**
     * Object Generation
     */
    getComponent(): RowComponent;
}
