/**
 * Copyright (c) Cisco Systems, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 */
import "../spinner/Spinner";
import { LitElement, nothing, PropertyValues } from "lit";
export declare const buttonSize: readonly ["20", "24", "28", "32", "36", "40", "44", "52", "56", "72", "68", "84", "size-none", 20, 24, 28, 32, 36, 40, 44, 52, 56, 68, 72, 68, 84];
export declare const buttonTag: readonly ["button", "input", "a"];
export declare const buttonType: readonly ["button", "reset", "submit"];
export declare const buttonRoles: readonly ["button", "checkbox", "link", "menuitem", "menuitemcheckbox", "menuitemradio", "option", "radio", "switch", "tab"];
export declare const buttonVariant: readonly ["primary", "secondary", "red", "green", "ghost", "ghostInheritTextColor", "white", "darkGrey", "promotional", "tab", "available", "unavailable", "engaged", "idle", "inverted-primary", "inverted-secondary", "inverted-ghost", "dropdown", "secondary-negative", "secondary-positive", "secondary-accent"];
export declare const buttonColor: readonly ["blue", "red", "green", "orange", "yellow", "mint", "purple", "pink", "cyan", "white", "dark-gray", "duck-egg", "violet", "color-none", ""];
export declare const buttonAriaLive: readonly ["", "off", "polite", "assertive"];
export declare namespace Button {
    type Tag = (typeof buttonTag)[number];
    type Type = (typeof buttonType)[number];
    type Role = (typeof buttonRoles)[number];
    type variant = (typeof buttonVariant)[number];
    type color = (typeof buttonColor)[number];
    type ariaLive = (typeof buttonAriaLive)[number];
    type Attributes = {
        id?: string;
        disabled: boolean;
        alt?: string;
        href?: string;
        type: Type;
        ariaLabel?: string;
        ariaLabelledBy?: string;
        ariaLive?: string;
        ariaExpanded?: boolean;
        ariaHaspopup?: boolean;
        ariaPressed?: string;
        ariaCurrent?: boolean;
        tag: Tag;
        loading: boolean;
        role?: string;
        value: string;
    };
    type Size = (typeof buttonSize)[number];
    interface ButtonClickEventDetail {
        srcEvent: MouseEvent;
    }
    interface ButtonKeydownEventDetail {
        srcEvent: KeyboardEvent;
    }
    /**
     * Custom events dispatched by the Button component
     */
    interface ButtonEvents {
        /**
         * Dispatched when the button is clicked
         * @detail An object containing the original MouseEvent
         */
        "button-click": CustomEvent<ButtonClickEventDetail>;
        /**
         * Dispatched when a key is pressed while the button has focus
         * @detail An object containing the original KeyboardEvent
         */
        "button-keydown": CustomEvent<ButtonKeydownEventDetail>;
    }
    class ELEMENT extends LitElement {
        _active: boolean;
        get active(): boolean;
        set active(value: boolean);
        private _tabIndex;
        get tabIndex(): number;
        set tabIndex(newValue: number);
        ariaLabel: string;
        ariaLabelledBy: string;
        ariaLive: Button.ariaLive;
        ariaExpanded: string;
        ariaHaspopup: string;
        ariaPressed: string;
        circle: boolean;
        rounded: boolean;
        color: Button.color;
        containerLarge: boolean;
        disabled: boolean;
        href: string;
        id: string;
        value: string;
        keyboardKey: string;
        label: string;
        loading: boolean;
        outline: boolean;
        hasRemoveStyle: boolean;
        size: Button.Size;
        tag: Button.Tag;
        type: Button.Type;
        role: Button.Role;
        variant: Button.variant;
        width: string;
        maxWidth: string;
        activityType: string;
        iconActive: boolean;
        isActive: boolean;
        ariaDescribedBy?: string;
        clickFunction?: () => void;
        isPlaceholderText?: boolean;
        autofocus: boolean;
        button: HTMLButtonElement;
        protected firstUpdated(changedProperties: PropertyValues): void;
        manageAutoFocus(element?: HTMLElement): void;
        focus(): void;
        blur(): void;
        renderWidth: () => string | typeof nothing;
        renderMaxWidth: () => string | typeof nothing;
        getStyles: () => import("lit-html").TemplateResult<1> | undefined;
        handleKeyDown(event: KeyboardEvent): void;
        handleClick(event: MouseEvent): void;
        static get styles(): import("lit").CSSResult[];
        get buttonClassMap(): {
            [x: string]: boolean;
            "md-button--circle": boolean;
            "md-button--rounded": boolean;
            "md-button--none": boolean;
            "md-button--outline": boolean;
            active: boolean;
            disabled: boolean;
            isActive: boolean;
            "md-activity": boolean;
            "md-button--icon": boolean;
            "md-button--onlyicon": boolean;
            "md-button--placeholder-text": boolean;
        };
        get slottedText(): string | undefined;
        get hasIcon(): boolean;
        iconTemplate: () => import("lit-html").TemplateResult<1>;
        textTemplate: () => import("lit-html").TemplateResult<1> | typeof nothing;
        childrenTemplate(): import("lit-html").TemplateResult<1>;
        get computedAriaExpand(): "true" | "false" | undefined;
        buttonTemplate(tag: Button.Tag): import("lit-html").TemplateResult<1> | typeof nothing;
        get buttonContainerClassMap(): {
            "md-button__container": boolean;
            "md-button__container--small": boolean;
        };
        render(): import("lit-html").TemplateResult<1>;
    }
}
declare global {
    interface HTMLElementTagNameMap {
        "md-button": Button.ELEMENT;
    }
    interface HTMLElementEventMap {
        "button-click": CustomEvent<Button.ButtonClickEventDetail>;
        "button-keydown": CustomEvent<Button.ButtonKeydownEventDetail>;
    }
}
