import { Color, DataCaptureContext } from '@scandit/web-datacapture-core';
import { ScanditHTMLElement } from '@scandit/web-datacapture-core/build/js/private/utils/index.js';
import { SparkScanScanningMode } from './spark/SparkScanScanningMode.js';
import { SparkScan } from './spark/SparkScan.js';
import { SparkScanFeedbackDelegate } from './spark/SparkScanFeedbackDelegate.js';
import { SparkScanViewSettings } from './spark/ui/SparkScanViewSettings.js';
import { sparkScanViewTag } from './spark/ui/constants/tags.js';
import { SparkScanViewState } from './spark/ui/SparkScanViewState.js';

interface SparkScanViewUiListener {
    didChangeScanningMode?(scanningMode: SparkScanScanningMode): void;
    didChangeViewState?(state: SparkScanViewState): void;
    didTapBarcodeFindButton?(view: SparkScanView): void;
    didTapLabelCaptureButton?(view: SparkScanView): void;
}

declare class SparkScanView extends ScanditHTMLElement {
    targetModeButtonVisible: boolean;
    scanningBehaviorButtonVisible: boolean;
    torchControlVisible: boolean;
    zoomSwitchControlVisible: boolean;
    previewSizeControlVisible: boolean;
    barcodeFindButtonVisible: boolean;
    labelCaptureButtonVisible: boolean;
    cameraSwitchButtonVisible: boolean;
    previewCloseControlVisible: boolean;
    triggerButtonVisible: boolean;
    triggerButtonCollapsedColor?: Color;
    triggerButtonExpandedColor?: Color;
    triggerButtonAnimationColor?: Color;
    triggerButtonTintColor?: Color;
    toolbarBackgroundColor?: Color;
    toolbarIconActiveTintColor?: Color;
    toolbarIconInactiveTintColor?: Color;
    feedbackDelegate: SparkScanFeedbackDelegate;
    /**
     * @deprecated The torch button has been moved to the mini preview. Use `torchControlVisible` instead.
     */
    torchButtonVisible: boolean;
    /**
     * @deprecated This property is deprecated as the trigger button can now be placed anywhere on the screen.
     */
    handModeButtonVisible: boolean;
    /**
     * @deprecated The trigger button no longer displays text.
     */
    startCapturingText?: string;
    /**
     * @deprecated
     */
    scanningCapturingText?: string;
    /**
     * @deprecated The trigger button no longer displays text.
     */
    resumeCapturingText?: string;
    /**
     * @deprecated The trigger button no longer displays text.
     */
    stopCapturingText?: string;
    /**
     * @deprecated Use `triggerButtonCollapsedColor` and `triggerButtonExpandedColor` instead.
     */
    captureButtonBackgroundColor?: Color;
    /**
     * @deprecated This property is not relevant anymore.
     */
    captureButtonActiveBackgroundColor?: Color;
    /**
     * @deprecated Use `triggerButtonTintColor` instead.
     */
    captureButtonTintColor?: Color;
    private resizeObserver;
    private onResizeHandler;
    private presenter;
    private settings;
    private miniPreview;
    private triggerButton;
    private visualFeedback;
    private miniPreviewTimeout;
    private orientationObserver;
    private miniPreviewPointerUpListener;
    private miniPreviewPointerMoveListener;
    private miniPreviewButtonTapListener;
    private miniPreviewDragListener;
    private miniPreviewDragEndListener;
    private triggerButtonPointerDownListener;
    private triggerButtonTapListener;
    private triggerButtonLongPressStartListener;
    private triggerButtonLongPressEndListener;
    private triggerButtonDragListener;
    private toolbarButtonTapListener;
    private clickOutsideListener;
    private visibilityChangeListener;
    private orientationChangeListener;
    private holdingToScan;
    private get _targetModeEnabledMessage();
    private get _targetModeDisabledMessage();
    private get _continuousModeEnabledMessage();
    private get _continuousModeDisabledMessage();
    private get _scanPausedMessage();
    private get _torchEnabledMessage();
    private get _torchDisabledMessage();
    private get _zoomedInMessage();
    private get _zoomedOutMessage();
    static forElement(element: Element, context: DataCaptureContext, sparkScan: SparkScan, sparkScanViewSettings?: SparkScanViewSettings): SparkScanView;
    private static create;
    private static createStyleElement;
    prepareScanning(): Promise<void>;
    startScanning(): Promise<void>;
    pauseScanning(): Promise<void>;
    stopScanning(): Promise<void>;
    showToast(message: string): void;
    setListener(listener: SparkScanViewUiListener | null): void;
    setTriggerButtonImage(image?: HTMLImageElement | SVGElement): void;
    private setWidthAndHeightCssStyleProperties;
    private onResize;
    private mount;
    private unmount;
    private connectedCallback;
    private disconnectedCallback;
    private setTorchAvailable;
    private setZoomAvailable;
    private switchToIdleState;
    private switchToActiveState;
    private switchToInactiveState;
    private switchToErrorState;
    private onMiniPreviewPointerUp;
    private onMiniPreviewPointerMove;
    private onMiniPreviewButtonTap;
    private onMiniPreviewDrag;
    private onMiniPreviewDragEnd;
    private onTriggerButtonPointerDown;
    private onTriggerButtonTap;
    private onTriggerButtonLongPressStart;
    private onTriggerButtonLongPressEnd;
    private onTriggerButtonDrag;
    private onToolbarButtonTap;
    private onClickOutside;
    private onVisibilityChange;
    private onTargetModeButtonTap;
    private onScanningBehaviorButtonTap;
    private onBarcodeFindButtonTap;
    private onLabelCaptureButtonTap;
    private onCameraSwitchButtonTap;
    private onTorchButtonTap;
    private onMiniPreviewTimeoutFinished;
    private onOrientationChange;
    private targetModeButtonTapped;
    private scanningBehaviorButtonTapped;
    private torchButtonTapped;
    private cameraSwitchButtonTapped;
    private getDefaultCssVariableValue;
    private setTriggerButtonPressedColor;
}
declare global {
    interface HTMLElementTagNameMap {
        [sparkScanViewTag]: SparkScanView;
    }
}

export { type SparkScanViewUiListener as S, SparkScanView as a };
