import { t as SparkScanSession } from "./SparkScanSession-C5xa7P_3.js";
import { n as SparkScanSettingsJSON, t as SparkScanSettings } from "./SparkScanSettings-diHbVL5F.js";
import { DataCaptureContext, DataCaptureMode, DataCaptureModeJSON, FrameData } from "@scandit/web-datacapture-core";
import { Serializable } from "@scandit/web-datacapture-core/build/js/private/Serializable";

//#region src/main/spark/SparkScan.d.ts
interface SparkScanListener {
  didScan?: (sparkScan: SparkScan, session: SparkScanSession, frameData: FrameData) => void;
  didUpdateSession?: (sparkScan: SparkScan, session: SparkScanSession) => void;
}
type SparkScanJSON = DataCaptureModeJSON<SparkScanSettingsJSON>;
interface SparkScanDelegate {
  onSwitchedToSmartScanSelection(): void;
  onSwitchedAwayFromSmartScanSelection(): void;
}
declare class SparkScan implements DataCaptureMode, Serializable<SparkScanJSON> {
  private readonly type;
  private _synchronousFrameFlow;
  private _isEnabled;
  private _isSuppressed;
  private settings;
  private _context;
  private readonly listeners;
  private delegate?;
  /**
   * Internal hook for the SparkScanView to observe runtime applySettings calls. Mirrors the
   * iOS SDCSparkScanModeViewListener / Android SparkScanModeViewListener pattern. Registered
   * by the view when it attaches; cleared on detach. Fired once with current settings on
   * registration (initial sync) and again on each subsequent applySettings call.
   */
  private __modeViewListener;
  private allowedRemainingWorkerMessages;
  private readonly workerMessageListener;
  get context(): DataCaptureContext | null;
  static forSettings(settings: SparkScanSettings): SparkScan;
  isEnabled(): boolean;
  setEnabled(enabled: boolean): Promise<void>;
  applySettings(settings: SparkScanSettings): Promise<void>;
  addListener(listener: SparkScanListener): void;
  removeListener(listener: SparkScanListener): void;
  toJSONObject(): SparkScanJSON;
  private workerCommand;
  private sendClearFrameDataRequest;
  private onDidScan;
  private onDidUpdateSession;
  private onWorkerMessage;
  private notifyContext;
}
//#endregion
export { SparkScanDelegate as n, SparkScanListener as r, SparkScan as t };