import type { CellRangeRef, EngineEvent, RecalcMetrics } from '@bilig/protocol';
import type { U32 } from '../runtime-state.js';
import type { CreateEngineOperationServiceArgs } from './operation-service-types.js';
type OperationEventAccess = Pick<CreateEngineOperationServiceArgs, 'state' | 'captureChangedCells' | 'captureChangedPatches'>;
interface OperationChangedEventInvalidations {
    readonly invalidatedRanges: CellRangeRef[];
    readonly invalidatedRows: EngineEvent['invalidatedRows'];
    readonly invalidatedColumns: EngineEvent['invalidatedColumns'];
}
interface EmitOperationChangedEventsArgs extends OperationChangedEventInvalidations {
    readonly changed: U32;
    readonly invalidation: EngineEvent['invalidation'];
    readonly metrics: RecalcMetrics;
    readonly explicitChangedCount: number;
    readonly hasGeneralEventListeners: boolean;
    readonly hasTrackedEventListeners: boolean;
    readonly hasWatchedCellListeners: boolean;
    readonly materializeChangedCells: boolean;
}
export declare function shouldMaterializeOperationChangedCells(args: {
    readonly changedLength: number;
    readonly hasGeneralEventListeners: boolean;
    readonly invalidation: EngineEvent['invalidation'];
    readonly invalidations: OperationChangedEventInvalidations;
}): boolean;
export declare function emitOperationChangedEvents(access: OperationEventAccess, args: EmitOperationChangedEventsArgs): void;
export {};
