import { TableRow } from './types';
import { TableTdWidgetHelper } from './td-helper';
import { ContextMenuOption } from '../components/context-menu.component';
/** Services needed by TableTdManager (ported from Angular DI). */
export interface TableTdManagerServices {
    /** Angular DomService → designer inject('useFormSchema'): getExpressions/getComponents/getControlsInCmpWidthBinding */
    formSchemaUtils: any;
    /** Angular DesignViewModelService → inject('designViewModelUtils'): getDgViewModel(id).removeField([...]) */
    designViewModelUtils: any;
    /** Angular MessagerService → default FMessageBoxService; injectable stub for testing */
    messageBox?: {
        question: (message: string, detail: string, ok: () => void, cancel?: () => void) => void;
    };
}
export interface TableTdManagerComponent {
    id: string;
    rows: TableRow[];
}
export interface MenuItem {
    id: string;
    title: string;
    disable?: boolean;
    handle?: () => void;
}
export type MenuConfig = (MenuItem | '-')[];
/**
 * Ported from Angular `TableTdManager` (table/component/td-manager/td-manager.ts).
 * Merge/split/insert/delete logic unchanged; service mappings updated for Vue.
 */
export declare class TableTdManager {
    component: TableTdManagerComponent;
    private services;
    /** redrawTable.next replacement; payload may contain { clearPropertyPanel } */
    private redraw;
    /** refreshSchamaTree.next replacement */
    private emitCanvasChanged;
    private viewModelId;
    tableTdHelper: TableTdWidgetHelper;
    selectedColumnIndex: number;
    selectedRowIndex: number;
    targetColumn: any;
    targetRow: any;
    menuConfig: MenuConfig;
    private tableUtils;
    constructor(component: TableTdManagerComponent, services: TableTdManagerServices, 
    /** redrawTable.next replacement; payload may contain { clearPropertyPanel } */
    redraw: (payload?: any) => void, 
    /** refreshSchamaTree.next replacement */
    emitCanvasChanged: () => void, viewModelId: string);
    /** Called by design component on right-click / widget-panel icon click to set the current target cell. */
    setTarget(rowIndex: number, colIndex: number): void;
    getMenuConfig(): MenuConfig;
    private question;
    insertColumnToLeft(): void;
    insertColumnToRight(): void;
    insertRowToTop(): void;
    insertRowToBottom(): void;
    showMergeColumnToRight(): boolean;
    mergeColumnToRight(): void;
    confirmToMergeColumnToRight(rightColumn: any, targetColspan: number): void;
    showMergeRowToBottom(): boolean;
    mergeRowToBottom(): void;
    confirmToMergeRowToBottom(bottomColumn: any, targetRowspan: number): void;
    private resetTd;
    showSplitColumns(): boolean;
    splitColumns(): void;
    showSplitRows(): boolean;
    splitRows(): void;
    showRemoveColumn(): boolean;
    removeColumn(): void;
    confirmRemoveColumn(): void;
    checkIfHasEditorInColumn(): boolean;
    showRemoveRow(): boolean;
    removeRow(): void;
    checkIfHasEditorInRow(): boolean;
    confirmRemoveRow(): void;
}
export type { ContextMenuOption };
/** Maps the ported menuConfig to context menu items, preserving separators. */
export declare function menuConfigToOptions(menu: MenuConfig, onAfter: () => void): (ContextMenuOption | {
    separator: true;
})[];
