import { Brush, DataCaptureOverlay, DataCaptureView, Viewfinder } from '@scandit/web-datacapture-core';
import { LabelFieldState } from './djinni-types/sdcLabelData.js';
import { Serializable } from '@scandit/web-datacapture-core/build/js/private/Serializable';
import { nativeHandle } from '@scandit/web-datacapture-core/build/js/private/nativeHandle.js';
import { CapturedLabel } from './api/CapturedLabel.js';
import { LabelField } from './api/LabelField.js';
import { N as NativeProxyHandle } from './NativeProxy-BpXwaSl-.js';
import { L as LabelCapture } from './LabelCapture-DrHOFOh1.js';
import { LabelCaptureOverlayJSON } from './api/LabelCaptureOverlayJSON.js';

/**
 * Interface to customize the visual appearance of highlighted labels and their fields.
 * When label capture identifies a new field, or when the LabelField.state property changes,
 * brushForField() is called to determine the brush of the field.
 */
interface LabelCaptureBasicOverlayListener {
    /**
     * Called for each field to determine its brush whenever the field's state changes.
     * In case the field is tracked over multiple frames and its state does not change,
     * the same brush is used. The field brush can be changed by explicit calls to
     * LabelCaptureBasicOverlay.setBrushForField().
     */
    brushForField?(overlay: LabelCaptureBasicOverlay, field: LabelField, label: CapturedLabel): Brush | null;
    /**
     * Called for each label to determine its brush whenever one of the label's fields
     * changes its state/data. In case the field is tracked over multiple frames and none
     * of the fields changes its state, the same brush is used. The label brush can be
     * changed by explicit calls to LabelCaptureBasicOverlay.setBrushForLabel().
     */
    brushForLabel?(overlay: LabelCaptureBasicOverlay, label: CapturedLabel): Brush | null;
    /**
     * Called every time a captured label is tapped.
     */
    onLabelTapped?(overlay: LabelCaptureBasicOverlay, label: CapturedLabel): void;
}

declare class LabelCaptureBasicOverlay implements DataCaptureOverlay, Serializable<LabelCaptureOverlayJSON> {
    [nativeHandle]: NativeProxyHandle;
    private listeners;
    private onWorkerMessageHandler;
    private proxiedViewFinder;
    static withLabelCapture(labelCapture: LabelCapture): Promise<LabelCaptureBasicOverlay>;
    static withLabelCaptureForView(labelCapture: LabelCapture, view: DataCaptureView): Promise<LabelCaptureBasicOverlay>;
    private constructor();
    toJSONObject(): LabelCaptureOverlayJSON;
    getListener(): Promise<LabelCaptureBasicOverlayListener | null>;
    setListener(labelCaptureBasicOverlayListener?: LabelCaptureBasicOverlayListener): Promise<void>;
    getDefaultFieldBrush(fieldState: LabelFieldState): Promise<Brush>;
    setDefaultFieldBrush(brush: Brush, fieldState: LabelFieldState): Promise<void>;
    getDefaultLabelBrush(): Promise<Brush>;
    setDefaultLabelBrush(brush: Brush): Promise<void>;
    setBrushForField(brush: Brush, field: LabelField, label: CapturedLabel): Promise<void>;
    setBrushForLabel(brush: Brush, label: CapturedLabel): Promise<void>;
    getShouldShowScanAreaGuides(): Promise<boolean>;
    setShouldShowScanAreaGuides(value: boolean): Promise<void>;
    getViewfinder(): Promise<Viewfinder | null>;
    setViewfinder(viewFinder: Viewfinder): Promise<void>;
    private onWorkerMessage;
}

export { LabelCaptureBasicOverlay as L, type LabelCaptureBasicOverlayListener as a };
