import * as i0 from '@angular/core';
import { ElementRef, AfterViewInit, EventEmitter, TemplateRef, ChangeDetectorRef, AfterContentInit, OnDestroy, QueryList, ComponentRef, ViewContainerRef } from '@angular/core';
import { KeyboardSupportItemInterface, Nullable, KeyboardSupportService, FocusEscapeDirection, DynamicComponentService } from '@fundamental-ngx/cdk/utils';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { ButtonType } from '@fundamental-ngx/core/button';
import { IconFont } from '@fundamental-ngx/core/icon';
import { Subject } from 'rxjs';
import { PopoverComponent } from '@fundamental-ngx/core/popover';
import { Placement } from '@fundamental-ngx/core/shared';

interface ActionSheetClickEvent {
    shouldClose: boolean;
}
/**
 * A component used to enforce a certain layout for the action sheet.
 * ```html
 * <fd-action-sheet>
 *     <fd-action-sheet-control>Control Element</fd-action-sheet-control>
 *     <fd-action-sheet-body>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *     </fd-action-sheet-body>
 * </fd-action-sheet>
 * ```
 */
declare class ActionSheetItemComponent implements KeyboardSupportItemInterface {
    private readonly _elementRef;
    /** Sets text of button. */
    label: string;
    /** Sets icon of action item. */
    glyph: string;
    /** Glyph font family */
    glyphFont: IconFont;
    /** Indicate state of the button.*/
    negative: boolean;
    /** Indicate if it's closing button */
    isCloseButton: boolean;
    /** Whether or not the action sheet item is disabled. */
    disabled: boolean;
    /** @hidden */
    buttonComponent: ElementRef;
    /** @hidden */
    readonly keyDown: i0.OutputEmitterRef<KeyboardEvent>;
    /** The button type for styling (e.g., 'transparent', 'emphasized'). */
    readonly fdType: i0.InputSignal<ButtonType>;
    /** Whether the button is in toggled state. */
    readonly toggled: i0.InputSignal<boolean | null | undefined>;
    /** @hidden */
    readonly clicked: Subject<ActionSheetClickEvent>;
    /** @hidden */
    readonly focused: Subject<ActionSheetItemComponent>;
    /** @hidden */
    readonly _tabIndex$: i0.WritableSignal<number | null>;
    /** @hidden */
    constructor(_elementRef: ElementRef);
    /** @hidden */
    keydownHandler(event: KeyboardEvent): void;
    /** @hidden */
    focusHandler(): void;
    /** Handler for mouse events */
    onClick(): void;
    /** @hidden Support for KeyboardSupportItemInterface */
    click(): void;
    /** @hidden */
    focus(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ActionSheetItemComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ActionSheetItemComponent, "[fd-action-sheet-item]", never, { "label": { "alias": "label"; "required": false; }; "glyph": { "alias": "glyph"; "required": false; }; "glyphFont": { "alias": "glyphFont"; "required": false; }; "negative": { "alias": "negative"; "required": false; }; "isCloseButton": { "alias": "isCloseButton"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "fdType": { "alias": "fdType"; "required": false; "isSignal": true; }; "toggled": { "alias": "toggled"; "required": false; "isSignal": true; }; }, { "keyDown": "keyDown"; }, never, ["*"], true, never>;
}

/**
 * A component used to enforce a certain layout for the action sheet.
 * ```html
 * <fd-action-sheet>
 *     <fd-action-sheet-control>Control Element</fd-action-sheet-control>
 *     <fd-action-sheet-body>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *     </fd-action-sheet-body>
 * </fd-action-sheet>
 * ```
 */
declare class ActionSheetBodyComponent implements AfterViewInit {
    private readonly _keyboardSupportService;
    readonly _contentDensityObserver: ContentDensityObserver;
    /** Id of the Action Sheet Body. */
    actionSheetBodyId: string;
    /** Display in mobile view. */
    mobile: boolean;
    /** Aria-label for Action Sheet Body. */
    ariaLabel: Nullable<string>;
    /** Aria-Labelledby for element describing Action Sheet Body. */
    ariaLabelledby: Nullable<string>;
    /** @hidden */
    actionSheetElementRef: ElementRef<HTMLUListElement>;
    /** @hidden */
    private readonly _items;
    /** @hidden */
    private _refresh$;
    /** @hidden */
    private readonly _destroyRef;
    /** @hidden */
    constructor(_keyboardSupportService: KeyboardSupportService<ActionSheetItemComponent>, _contentDensityObserver: ContentDensityObserver);
    /** Handler for mouse events */
    onClick(event: MouseEvent): void;
    /** @hidden */
    keyDownHandler(event: KeyboardEvent): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    private _setupInteractionListeners;
    static ɵfac: i0.ɵɵFactoryDeclaration<ActionSheetBodyComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ActionSheetBodyComponent, "fd-action-sheet-body", never, { "actionSheetBodyId": { "alias": "actionSheetBodyId"; "required": false; }; "mobile": { "alias": "mobile"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; }; }, {}, ["_items"], ["[fd-action-sheet-item]"], true, never>;
}

/**
 * A component used to enforce a certain layout for the action sheet.
 * ```html
 * <fd-action-sheet>
 *     <fd-action-sheet-control>Control Element</fd-action-sheet-control>
 *     <fd-action-sheet-body>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *          <fd-action-sheet-item>Action Sheet Body</fd-action-sheet-item>
 *     </fd-action-sheet-body>
 * </fd-action-sheet>
 * ```
 */
declare class ActionSheetControlComponent {
    /** Emitted event when control button is clicked */
    clicked: EventEmitter<void>;
    /** saves element that is focused before dialog opened */
    private _focusedElementBeforeDialogOpened;
    /** Handler for mouse events */
    onClick(): void;
    /** @hidden */
    _focus(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ActionSheetControlComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ActionSheetControlComponent, "fd-action-sheet-control", never, {}, { "clicked": "clicked"; }, never, ["*"], true, never>;
}

type OpenChangeHandle = (isOpen: boolean) => void;
declare class ActionSheetMobileComponent {
    private readonly _changeDetectionRef;
    /** Whenever links should be visible */
    open: boolean;
    /** @hidden */
    childContent: {
        actionSheetBodyTemplate: TemplateRef<any>;
        isOpenChangeHandle: OpenChangeHandle;
    } | null;
    /** @hidden */
    get _isOpenChangeHandle(): OpenChangeHandle | undefined;
    /** @hidden */
    constructor(_changeDetectionRef: ChangeDetectorRef);
    /** @hidden */
    toggleOpenState(isOpen: boolean): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ActionSheetMobileComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ActionSheetMobileComponent, "fd-action-sheet-mobile", never, {}, {}, never, never, true, never>;
}

declare class ActionSheetComponent implements AfterContentInit, AfterViewInit, OnDestroy {
    private readonly _keyboardSupportService;
    private readonly _changeDetectionRef;
    private readonly _viewContainerRef;
    private _dynamicComponentService;
    /** Whether should be displayed in mobile mode */
    mobile: boolean;
    /** The position of the popover body. Set to 'bottom' by default. */
    placement: Placement;
    /** Whether the popover body has an arrow. Set to false by default. */
    noArrow: boolean;
    /** Whenever links should be visible */
    isOpen: boolean;
    /** Whether internal keyboard support should be enabled. It's enabled by default */
    keyboardSupport: boolean;
    /**
     * To allow user to determine what event he wants to trigger the messages to show
     * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).
     */
    triggers: string[];
    /** Value for the control title in mobile mode */
    controlTitle: Nullable<string>;
    /**
     * Value for the control title heading level
     * A number between 1 and 6
     * Default is set to 2
     */
    controlTitleHeading: 1 | 2 | 3 | 4 | 5 | 6;
    /** Event thrown, when focus escapes the list */
    focusEscapeList: EventEmitter<FocusEscapeDirection>;
    /** Event thrown, when the action sheet is opened or closed */
    readonly isOpenChange: EventEmitter<boolean>;
    /** @hidden */
    actionSheetBody: ActionSheetBodyComponent;
    /** @hidden */
    actionSheetControl: ActionSheetControlComponent;
    /** @hidden */
    actionSheetItems: QueryList<ActionSheetItemComponent>;
    /** @hidden */
    actionSheetBodyTemplate: TemplateRef<any>;
    /** @hidden */
    popoverComponent: PopoverComponent;
    /** @hidden */
    actionSheetMobileDynamic: ComponentRef<ActionSheetMobileComponent>;
    /** @hidden */
    private readonly _destroyRef;
    /** @hidden */
    private readonly _onRefresh$;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    constructor(_keyboardSupportService: KeyboardSupportService<ActionSheetItemComponent>, _changeDetectionRef: ChangeDetectorRef, _viewContainerRef: ViewContainerRef, _dynamicComponentService: DynamicComponentService);
    /** @hidden */
    ngAfterContentInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** Method that opens action sheet */
    open(): void;
    /** Method that closes action sheet */
    close(): void;
    /** @hidden */
    isOpenChangeHandle(isOpen: boolean): void;
    /** @hidden */
    private _initializeChildrenState;
    /** @hidden */
    private _actionControlHandle;
    /** @hidden */
    private _listenOnItemsChange;
    /** @hidden */
    private _listenOnItemsClick;
    /** @hidden Set fake focus on element with passed index */
    private _setItemActive;
    /** @hidden */
    private _setUpMobileMode;
    static ɵfac: i0.ɵɵFactoryDeclaration<ActionSheetComponent, [null, null, null, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ActionSheetComponent, "fd-action-sheet", never, { "mobile": { "alias": "mobile"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "noArrow": { "alias": "noArrow"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "keyboardSupport": { "alias": "keyboardSupport"; "required": false; }; "triggers": { "alias": "triggers"; "required": false; }; "controlTitle": { "alias": "controlTitle"; "required": false; }; "controlTitleHeading": { "alias": "controlTitleHeading"; "required": false; }; }, { "focusEscapeList": "focusEscapeList"; "isOpenChange": "isOpenChange"; }, ["actionSheetBody", "actionSheetControl", "actionSheetItems"], ["fd-action-sheet-body", "fd-action-sheet-control"], true, never>;
}

/**
 * @deprecated
 * Use direct imports of components.
 */
declare class ActionSheetModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<ActionSheetModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<ActionSheetModule, never, [typeof ActionSheetComponent, typeof ActionSheetControlComponent, typeof ActionSheetItemComponent, typeof ActionSheetBodyComponent], [typeof ActionSheetComponent, typeof ActionSheetControlComponent, typeof ActionSheetItemComponent, typeof ActionSheetBodyComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<ActionSheetModule>;
}

export { ActionSheetBodyComponent, ActionSheetComponent, ActionSheetControlComponent, ActionSheetItemComponent, ActionSheetMobileComponent, ActionSheetModule };
export type { ActionSheetClickEvent };
