import { Ref } from 'vue'; export type SavePointValueProvider = { getCurrentValue: () => T; setCurrentValue: (value: T) => void; compare?: (savedValue: T, currentValue: T) => boolean; }; export type SavePointHandlerRegisterOption = { field: Ref; } & SavePointValueProvider; export interface ChildSavePoint { set(): void; rollback(): void; isModified(): boolean; } export interface SavePoint { registerField(option: SavePointHandlerRegisterOption): SavePointHandler; unregisterField(field: Ref): void; addChild(child: ChildSavePoint): void; removeChild(child: ChildSavePoint): void; set(): void; setNextTick(): Promise; rollback(): void; isModified(): boolean; } export declare class SavePointImpl implements SavePoint { private fields; private children?; registerField(option: SavePointHandlerRegisterOption): SavePointHandler; unregisterField(field: Ref): void; addChild(child: ChildSavePoint): void; removeChild(child: ChildSavePoint): void; set(): void; setNextTick(): Promise; rollback(): void; isModified(): boolean; } export declare const provideSavePoint: () => SavePoint; export declare const useSavePoint: () => SavePoint | undefined; export declare const cancelProvidedSavePoint: () => void; export interface SavePointHandler { saveValue(): void; getSavedValue(): T | undefined; rollbackValue(): void; isModified(currentValue: T): boolean; isFieldModified(): boolean; }