import { FrameData, DataCaptureMode, DataCaptureContext, DataCaptureModeJSON, CameraSettings } from '@scandit/web-datacapture-core';
import { LabelCaptureFeedback } from './api/LabelCaptureFeedback.js';
import { LabelCaptureSettings } from './api/LabelCaptureSettings.js';
import { nativeHandle } from '@scandit/web-datacapture-core/build/js/private/nativeHandle.js';
import { LabelCaptureSession } from './api/LabelCaptureSession.js';

interface LabelCaptureListener {
    didStartObservingLabelCapture?(labelCapture: LabelCapture): void;
    didStopObservingLabelCapture?(labelCapture: LabelCapture): void;
    didUpdateSession?(labelCapture: LabelCapture, session: LabelCaptureSession, frameData: FrameData): void;
}

declare class LabelCapture implements DataCaptureMode {
    private skipSerialization;
    private [nativeHandle];
    context: DataCaptureContext | null;
    private listeners;
    private _receiptScanningHandler;
    private workerListener;
    private _isEnabled;
    private _feedback;
    private constructor();
    toJSONObject(): DataCaptureModeJSON;
    static createRecommendedCameraSettings(): CameraSettings;
    static forContext(context: DataCaptureContext, settings: LabelCaptureSettings): Promise<LabelCapture>;
    get feedback(): LabelCaptureFeedback;
    set feedback(feedback: LabelCaptureFeedback);
    isEnabled(): boolean;
    setEnabled(enabled: boolean): Promise<void>;
    applySettings(settings: LabelCaptureSettings): Promise<void>;
    addListener(listener: LabelCaptureListener): void;
    removeListener(listener: LabelCaptureListener): void;
    private onWorkerMessage;
    private didStartObservingLabelCapture;
    private didStopObservingLabelCapture;
    private didUpdateSession;
    protected emitFeedback(): void;
}

export { LabelCapture as L, type LabelCaptureListener as a };
