/**
 * Enhanced Row Manager with Visual Delete Marking
 * - 삭제 시 행을 숨기지 않고 "삭제 표시"만 함
 * - 실제 삭제는 커밋 시에만 수행
 * - ID 안정성 보장 및 변경 추적 완벽 지원
 */
export type RowId = string | number;
export interface RowState {
    isDeleted: boolean;
    isCreated: boolean;
    isModified: boolean;
    deletedAt?: Date;
    createdAt?: Date;
    modifiedAt?: Date;
}
export interface ManagedRow<T> {
    id: RowId;
    data: T;
    state: RowState;
    originalData?: T;
}
export interface RowManagerOptions<T> {
    data: T[];
    getRowId?: (row: T, index: number) => RowId;
}
export declare class RowManager<T extends {} = any> {
    private rows;
    private rowMap;
    private getRowId?;
    private sortedIndices?;
    private filteredIndices?;
    private isDirty;
    constructor(options: RowManagerOptions<T>);
    private initializeFromData;
    private invalidateCache;
    /**
     * 🎯 모든 데이터 반환 (삭제 표시된 것도 포함) - 기존 API 호환
     * 삭제 표시된 행도 그리드에 계속 보여야 함!
     */
    getData(): T[];
    /**
     * 전체 데이터 길이 - 기존 API 호환
     */
    getLength(): number;
    /**
     * Row ID로 관리 객체 가져오기 (UI 스타일링용)
     */
    getManagedRow(rowId: RowId): ManagedRow<T> | undefined;
    /**
     * Row ID로 데이터 가져오기 - 기존 API 호환
     */
    getRowById(rowId: RowId): T | undefined;
    /**
     * 인덱스로 데이터 가져오기 - 기존 API 호환
     */
    getRowByIndex(index: number): T | undefined;
    /**
     * Row ID로 인덱스 가져오기 - 기존 API 호환
     */
    getIndexByRowId(rowId: RowId): number | undefined;
    /**
     * 인덱스로 Row ID 가져오기 - 기존 API 호환
     */
    getRowIdByIndex(index: number): RowId | undefined;
    /**
     * 행 데이터 업데이트 - 기존 API 호환
     */
    updateRow(rowId: RowId, changes: Partial<T>): boolean;
    addRow(row: T): RowId;
    addRowAtPosition(row: T, position: number): RowId;
    deleteRow(rowId: RowId): boolean;
    /**
     * 🎯 여러 행 삭제 표시
     */
    deleteRows(rowIds: RowId[]): number;
    /**
     * 삭제 표시 제거 (삭제 취소)
     */
    restoreRow(rowId: RowId): boolean;
    /**
     * 정렬 - 기존 API 호환
     */
    sort(compareFn: (a: T, b: T) => number): number[];
    /**
     * 필터링 - 기존 API 호환
     */
    filter(predicate: (row: T, index: number) => boolean): number[];
    /**
     * 화면 표시 인덱스로 행 데이터 가져오기 - 기존 API 호환
     */
    getRowByDisplayIndex(displayIndex: number): T | undefined;
    /**
     * 화면 표시 인덱스로 Row ID 가져오기 - 기존 API 호환
     */
    getRowIdByDisplayIndex(displayIndex: number): RowId | undefined;
    /**
     * 화면에 표시되는 데이터 길이 - 기존 API 호환
     */
    getDisplayLength(): number;
    /**
     * 변경 추적 정보 가져오기 - 새로운 기능
     */
    getChanges(): {
        created: T[];
        modified: Array<{
            original: T;
            current: T;
            changedFields: string[];
        }>;
        deleted: T[];
    };
    private getChangedFields;
    /**
     * 🎯 변경사항 커밋 - 삭제 표시된 항목들을 실제로 제거
     */
    commitChanges(): void;
    /**
     * 모든 변경사항 되돌리기
     */
    resetChanges(): void;
    /**
     * 상태 확인 메서드들
     */
    isRowCreated(rowId: RowId): boolean;
    isRowModified(rowId: RowId): boolean;
    isRowDeleted(rowId: RowId): boolean;
    getModifiedFields(rowId: RowId): string[];
    /**
     * 변경사항 요약
     */
    getChangesSummary(): {
        created: number;
        modified: number;
        deleted: number;
    };
    /**
     * 변경사항 존재 여부
     */
    hasChanges(): boolean;
    /**
     * 현재 상태 정보 (디버깅용) - 기존 API 호환
     */
    getStats(): {
        dataLength: number;
        total: number;
        deleted: number;
        created: number;
        modified: number;
        sortedLength: number;
        filteredLength: number;
        displayLength: number;
        isDirty: boolean;
        memoryUsage: {
            rows: number;
            rowMap: number;
        };
    };
    /**
     * 모든 Row ID 반환 - 기존 API 호환
     */
    getAllRowIds(): RowId[];
    getDisplayRowIds(): RowId[];
    /**
     * 데이터 완전 교체 - 기존 API 호환
     */
    setData(newData: T[]): void;
    /**
     * Row ID로 행 데이터 가져오기 (별칭) - 기존 API 호환
     */
    getRowByRowId(rowId: RowId): T | undefined;
    /**
     * 행 데이터로 Row ID 가져오기 - 기존 API 호환
     */
    getRowIdByData(row: T): RowId | undefined;
    /**
     * 데이터 업데이트 (외부에서 새로운 데이터 설정) - 기존 API 호환
     */
    updateData(newData: T[], newGetRowId?: (row: T, index: number) => RowId): void;
}
//# sourceMappingURL=row-manager.d.ts.map