| import { ArrayLike } from 'zrender/lib/core/types.js'; | 
| declare type DiffKeyGetter<CTX = unknown> = (this: DataDiffer<CTX>, value: unknown, index: number) => string; | 
| declare type DiffCallbackAdd = (newIndex: number) => void; | 
| declare type DiffCallbackUpdate = (newIndex: number, oldIndex: number) => void; | 
| declare type DiffCallbackRemove = (oldIndex: number) => void; | 
| declare type DiffCallbackUpdateManyToOne = (newIndex: number, oldIndex: number[]) => void; | 
| declare type DiffCallbackUpdateOneToMany = (newIndex: number[], oldIndex: number) => void; | 
| declare type DiffCallbackUpdateManyToMany = (newIndex: number[], oldIndex: number[]) => void; | 
| export declare type DataDiffMode = 'oneToOne' | 'multiple'; | 
| declare class DataDiffer<CTX = unknown> { | 
|     private _old; | 
|     private _new; | 
|     private _oldKeyGetter; | 
|     private _newKeyGetter; | 
|     private _add; | 
|     private _update; | 
|     private _updateManyToOne; | 
|     private _updateOneToMany; | 
|     private _updateManyToMany; | 
|     private _remove; | 
|     private _diffModeMultiple; | 
|     readonly context: CTX; | 
|     /** | 
|      * @param context Can be visited by this.context in callback. | 
|      */ | 
|     constructor(oldArr: ArrayLike<unknown>, newArr: ArrayLike<unknown>, oldKeyGetter?: DiffKeyGetter<CTX>, newKeyGetter?: DiffKeyGetter<CTX>, context?: CTX, diffMode?: DataDiffMode); | 
|     /** | 
|      * Callback function when add a data | 
|      */ | 
|     add(func: DiffCallbackAdd): this; | 
|     /** | 
|      * Callback function when update a data | 
|      */ | 
|     update(func: DiffCallbackUpdate): this; | 
|     /** | 
|      * Callback function when update a data and only work in `cbMode: 'byKey'`. | 
|      */ | 
|     updateManyToOne(func: DiffCallbackUpdateManyToOne): this; | 
|     /** | 
|      * Callback function when update a data and only work in `cbMode: 'byKey'`. | 
|      */ | 
|     updateOneToMany(func: DiffCallbackUpdateOneToMany): this; | 
|     /** | 
|      * Callback function when update a data and only work in `cbMode: 'byKey'`. | 
|      */ | 
|     updateManyToMany(func: DiffCallbackUpdateManyToMany): this; | 
|     /** | 
|      * Callback function when remove a data | 
|      */ | 
|     remove(func: DiffCallbackRemove): this; | 
|     execute(): void; | 
|     private _executeOneToOne; | 
|     /** | 
|      * For example, consider the case: | 
|      * oldData: [o0, o1, o2, o3, o4, o5, o6, o7], | 
|      * newData: [n0, n1, n2, n3, n4, n5, n6, n7, n8], | 
|      * Where: | 
|      *     o0, o1, n0 has key 'a' (many to one) | 
|      *     o5, n4, n5, n6 has key 'b' (one to many) | 
|      *     o2, n1 has key 'c' (one to one) | 
|      *     n2, n3 has key 'd' (add) | 
|      *     o3, o4 has key 'e' (remove) | 
|      *     o6, o7, n7, n8 has key 'f' (many to many, treated as add and remove) | 
|      * Then: | 
|      *     (The order of the following directives are not ensured.) | 
|      *     this._updateManyToOne(n0, [o0, o1]); | 
|      *     this._updateOneToMany([n4, n5, n6], o5); | 
|      *     this._update(n1, o2); | 
|      *     this._remove(o3); | 
|      *     this._remove(o4); | 
|      *     this._remove(o6); | 
|      *     this._remove(o7); | 
|      *     this._add(n2); | 
|      *     this._add(n3); | 
|      *     this._add(n7); | 
|      *     this._add(n8); | 
|      */ | 
|     private _executeMultiple; | 
|     private _performRestAdd; | 
|     private _initIndexMap; | 
| } | 
| export default DataDiffer; |