import { Logger } from './logger';
import { Buffer } from './buffer';
import { Reactive } from './reactive';
import { Viewport } from './viewport';
import { WorkflowGetter, AdapterMethodResult, IAdapter, ItemAdapter, ItemsPredicate, AdapterPrependOptions, AdapterAppendOptions, AdapterRemoveOptions, AdapterClipOptions, AdapterInsertOptions, AdapterReplaceOptions, AdapterUpdateOptions, AdapterFixOptions, ScrollerWorkflow, IDatasourceOptional, IPackages, IBufferInfo, State, ProcessSubject } from '../interfaces/index';
type InitializationParams<Item> = {
  buffer: Buffer<Item>;
  state: State;
  viewport: Viewport;
  logger: Logger;
  adapterRun$?: Reactive<ProcessSubject>;
  getWorkflow?: WorkflowGetter<Item>;
};
export declare class Adapter<Item = unknown> implements IAdapter<Item> {
  private externalContext;
  private logger;
  private getWorkflow;
  private reloadCounter;
  private source;
  private box;
  private demand;
  private disposed;
  setFirstOrLastVisible: (_: {
    first?: boolean;
    last?: boolean;
    workflow?: ScrollerWorkflow;
  }) => void;
  get workflow(): ScrollerWorkflow<Item>;
  get reloadCount(): number;
  get reloadId(): string;
  id: number;
  mock: boolean;
  augmented: boolean;
  version: string;
  init: boolean;
  init$: Reactive<boolean>;
  packageInfo: IPackages;
  itemsCount: number;
  bufferInfo: IBufferInfo;
  isLoading: boolean;
  isLoading$: Reactive<boolean>;
  loopPending: boolean;
  loopPending$: Reactive<boolean>;
  firstVisible: ItemAdapter<Item>;
  firstVisible$: Reactive<ItemAdapter<Item>>;
  lastVisible: ItemAdapter<Item>;
  lastVisible$: Reactive<ItemAdapter<Item>>;
  bof: boolean;
  bof$: Reactive<boolean>;
  eof: boolean;
  eof$: Reactive<boolean>;
  paused: boolean;
  paused$: Reactive<boolean>;
  private relax$;
  private relaxRun;
  private getPromisifiedMethod;
  private getWorkflowRunnerMethod;
  constructor(context: IAdapter<Item> | null, getWorkflow: WorkflowGetter<Item>, logger: Logger);
  initialize({ buffer, state, viewport, logger, adapterRun$, getWorkflow }: InitializationParams<Item>): void;
  dispose(): void;
  resetContext(): void;
  reset(options?: IDatasourceOptional): any;
  reload(options?: number | string): any;
  append(_options: AdapterAppendOptions<Item> | unknown, eof?: boolean): any;
  prepend(_options: AdapterPrependOptions<Item> | unknown, bof?: boolean): any;
  check(): any;
  remove(options: AdapterRemoveOptions<Item> | ItemsPredicate<Item>): any;
  clip(options?: AdapterClipOptions): any;
  insert(options: AdapterInsertOptions<Item>): any;
  replace(options: AdapterReplaceOptions<Item>): any;
  update(options: AdapterUpdateOptions<Item>): any;
  pause(): any;
  resume(): any;
  fix(options: AdapterFixOptions<Item>): any;
  relaxUnchained(callback: (() => void) | undefined, reloadId: string): Promise<AdapterMethodResult>;
  relax(callback?: () => void): Promise<AdapterMethodResult>;
  showLog(): void;
}
export {};
