import { DialogConfig, DialogRef, DialogService } from '@fundamental-ngx/core/dialog';
import * as i0 from '@angular/core';
import { InjectionToken, DestroyRef, ElementRef } from '@angular/core';

interface MobileModeConfig {
    /** Dialog Title */
    title?: string;
    /** Approve Button Label. If empty, button will not appear */
    approveButtonText?: string;
    /** Cancel Button Label. If empty, button will not appear */
    cancelButtonText?: string;
    /** Defines if the close button should appear */
    hasCloseButton?: boolean;
    /** Passes custom configuration of the Dialog window */
    dialogConfig?: DialogConfig;
}

/**
 * Base interface for mobile mode support.
 * Supports both plain properties and signal-based (function) access patterns.
 */
interface MobileMode {
    readonly mobile: boolean | (() => boolean);
    readonly mobileConfig: MobileModeConfig | (() => MobileModeConfig);
}

declare const MOBILE_MODE_CONFIG: InjectionToken<MobileModeConfigToken>;
interface MobileModeConfigToken {
    target: MobileModeControl;
    config: MobileModeConfig;
}
declare enum MobileModeControl {
    MENU = "MENU",
    SELECT = "SELECT",
    POPOVER = "POPOVER",
    COMBOBOX = "COMBOBOX",
    MULTI_INPUT = "MULTI_INPUT",
    MULTI_COMBOBOX = "MULTI_COMBOBOX",
    SEARCH_FIELD = "SEARCH_FIELD",
    DATE_PICKER = "DATE_PICKER",
    DATETIME_PICKER = "DATETIME_PICKER"
}
declare abstract class MobileModeBase<T extends MobileMode> {
    protected _component: T;
    protected readonly target: MobileModeControl;
    /** @hidden */
    dialogRef: DialogRef;
    /** @hidden */
    readonly dialogConfig?: DialogConfig;
    /** @hidden */
    readonly mobileConfig: MobileModeConfig;
    /** @hidden */
    protected readonly _destroyRef: DestroyRef;
    /** @hidden */
    protected readonly _elementRef: ElementRef<any>;
    /** @hidden */
    protected readonly _dialogService: DialogService;
    /** @hidden */
    private readonly _mobileModes;
    /** @hidden */
    constructor(_component: T, target: MobileModeControl);
    /** @hidden */
    private _getMobileModeConfig;
    /** @hidden Merges two mobile mode configs, with config2 taking precedence. */
    private _mergeConfigs;
    static ɵfac: i0.ɵɵFactoryDeclaration<MobileModeBase<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<MobileModeBase<any>, never, never, {}, {}, never, never, true, never>;
}

export { MOBILE_MODE_CONFIG, MobileModeBase, MobileModeControl };
export type { MobileMode, MobileModeConfig, MobileModeConfigToken };
