import * as i0 from '@angular/core';
import { ElementRef, ChangeDetectorRef, OnChanges, OnInit, OnDestroy, InjectionToken } from '@angular/core';
import { BooleanInput } from '@angular/cdk/coercion';
import { HasElementRef, Nullable, CssClassBuilder } from '@fundamental-ngx/cdk/utils';
import { IconFont } from '@fundamental-ngx/core/icon';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';

type GlyphPosition = 'before' | 'after';
type ButtonType = '' | 'standard' | 'positive' | 'negative' | 'attention' | 'half' | 'ghost' | 'transparent' | 'emphasized' | 'menu';
declare const defaultButtonType: ButtonType;
declare class BaseButton implements HasElementRef {
    /** Whether button is in toggled state. */
    toggled: BooleanInput;
    /**
     * Native type of button element
     */
    type: Nullable<string>;
    /** Position of glyph related to text */
    glyphPosition: GlyphPosition;
    /** The icon to include in the button. See the icon page for the list of icons.
     * Setter is used to control when css class have to be rebuilded.
     * Default value is set to ''.
     */
    glyph: Nullable<string>;
    /** Glyph font family */
    glyphFont: IconFont;
    /** The type of the button. Types include:
     * 'standard' | 'positive' | 'negative' | 'attention' | 'half' | 'ghost' | 'transparent' | 'emphasized' | 'menu'.
     * Leave empty for default (Standard button).'
     * Default value is set to 'standard'
     */
    fdType: ButtonType;
    /**
     * Text rendered inside button component
     */
    label: string | undefined;
    /** Whether to apply menu mode to the button.
     * Default value is set to false
     */
    fdMenu: boolean;
    /**
     * Native disabled attribute of button element
     */
    disabled: boolean;
    /**
     * Native aria-disabled attribute of button element
     */
    ariaDisabled: boolean;
    /** adding native aria-label to the component */
    ariaLabel: i0.InputSignal<Nullable<string>>;
    /** adding native aria-description to the componenet */
    ariaDescription: i0.InputSignal<Nullable<string>>;
    /** @hidden */
    readonly elementRef: ElementRef<any>;
    /** @hidden */
    protected readonly _cdr: ChangeDetectorRef;
    /** @hidden */
    detectChanges(): void;
    /** @hidden */
    markForCheck(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseButton, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<BaseButton, never, never, { "toggled": { "alias": "toggled"; "required": false; }; "type": { "alias": "type"; "required": false; }; "glyphPosition": { "alias": "glyphPosition"; "required": false; }; "glyph": { "alias": "glyph"; "required": false; }; "glyphFont": { "alias": "glyphFont"; "required": false; }; "fdType": { "alias": "fdType"; "required": false; }; "label": { "alias": "label"; "required": false; }; "fdMenu": { "alias": "fdMenu"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaDescription": { "alias": "ariaDescription"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
    static ngAcceptInputType_toggled: unknown;
    static ngAcceptInputType_disabled: unknown;
    static ngAcceptInputType_ariaDisabled: unknown;
}

declare const badgeEnabledButtonTypes: ButtonType[];
declare class ButtonBadgeDirective implements OnChanges, HasElementRef {
    /**
     * Content, which should be shown inside the Badge.
     * It should not be longer than 4 characters.
     */
    content: string | number;
    /** @hidden */
    _buttonComponent: BaseButton;
    /** @hidden */
    elementRef: ElementRef<HTMLElement>;
    /** @hidden */
    ngOnChanges(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ButtonBadgeDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<ButtonBadgeDirective, "fd-button-badge", never, { "content": { "alias": "content"; "required": false; }; }, {}, never, never, true, never>;
}

/**
 * Button directive, used to enhance standard HTML buttons.
 *
 * ``` selector: button[fd-button], a[fd-button] ```
 *
 * ```html
 * <button fd-button label="Button Text"></button>
 * <a fd-button label="Button Text"></a>
 * ```
 */
declare class ButtonComponent extends BaseButton implements OnChanges, CssClassBuilder, OnInit, OnDestroy, HasElementRef {
    readonly elementRef: ElementRef;
    /** The property allows user to pass additional css classes. */
    class: string;
    /** @hidden */
    specialButtonType: Array<string>;
    /**
     * Calculate aria-label attribute
     * @hidden
     */
    buttonArialabel: i0.Signal<any>;
    /**
     * Calculate aria-description attribute
     * @hidden
     */
    buttonAriaDescription: i0.Signal<string | null | undefined>;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    constructor(elementRef: ElementRef, _contentDensityObserver: ContentDensityObserver);
    /** Forces the focus outline around the button, which is not default behavior in Safari. */
    clicked(event: MouseEvent): void;
    /** @hidden
     * CssClassBuilder interface implementation
     * function must return single string
     * function is responsible for order which css classes are applied
     */
    buildComponentCssClass(): string[];
    /** Function runs when component is initialized
     * function should build component css class
     * function should build css style
     */
    ngOnChanges(): void;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "button[fd-button], a[fd-button], span[fd-button]", ["fd-button"], { "class": { "alias": "class"; "required": false; }; }, {}, never, ["*", "fd-button-badge"], true, never>;
}

/**
 * @deprecated
 * Use `ButtonComponent` import instead
 */
declare class ButtonModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<ButtonModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<ButtonModule, never, [typeof ButtonComponent], [typeof ButtonComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<ButtonModule>;
}

declare const FD_BUTTON_COMPONENT: InjectionToken<BaseButton>;

export { BaseButton, ButtonBadgeDirective, ButtonComponent, ButtonModule, FD_BUTTON_COMPONENT, badgeEnabledButtonTypes, defaultButtonType };
export type { ButtonType, GlyphPosition };
