import type { DatabaseBlockModel } from '../database-model.js';
import type { Column, InsertToPosition } from '../types.js';
import type { FilterGroup } from './ast.js';
export type TableViewColumn = {
    id: string;
    width: number;
    hide?: boolean;
};
export type KanbanViewColumn = {
    id: string;
    hide?: boolean;
};
export type GroupBy = {
    type: 'groupBy';
    columnId: string;
    name: string;
};
export type DatabaseModeMap = {
    table: {
        columns: TableViewColumn[];
        filter: FilterGroup;
    };
    kanban: {
        columns: KanbanViewColumn[];
        filter: FilterGroup;
        groupBy?: GroupBy;
    };
};
export type DatabaseViewDataMap = {
    [K in keyof DatabaseModeMap]: DatabaseModeMap[K] & {
        id: string;
        name: string;
        mode: K;
    };
};
type ViewOperation<Data> = {
    init(model: DatabaseBlockModel, id: string, name: string): Data;
    addColumn(model: DatabaseBlockModel, view: Data, newColumn: Column, position: InsertToPosition): void;
    deleteColumn(model: DatabaseBlockModel, view: Data, id: string): void;
};
export declare const defaultGroupBy: (columnId: string, type: string, data: NonNullable<unknown>) => GroupBy | undefined;
export declare const ViewOperationMap: {
    [K in keyof DatabaseViewDataMap]: ViewOperation<DatabaseViewDataMap[K]>;
};
export {};
//# sourceMappingURL=view-manager.d.ts.map