import { type PropertyValues, type TemplateResult } from 'lit';
import { UiElement } from '../../UiElement.js';
import type { BeginPressConfig, EndPressConfig } from '../../../controllers/ActionController.js';
import type UiRipple from '../../ripple/internals/ripple.js';
import '../../ripple/ui-ripple.js';
import '../../focus-ring/ui-focus-ring.js';
export type ButtonType = 'submit' | 'reset' | 'button';
export type MdButtonShape = 'round' | 'square';
export type MdButtonSize = 'xs' | 's' | 'm' | 'l' | 'xl';
/**
 * A material design button with M3 Expressive features - CSS-native implementation.
 *
 * @slot icon - A slot for the icon element
 * @slot - The default slot for the label
 * @attribute {string} form - The form associated with this element when the element is outside the form.
 * @fires {ToggleEvent} toggle - Fired when the `toggle` property is true and the button is clicked,
 *                               changing its selection state.
 *                               The event's `newState` and `oldState` properties (string values: 'selected' or
 *                               'unselected') detail this selection change.
 */
export default class BaseButton extends UiElement {
    #private;
    static readonly formAssociated = true;
    /**
     * The form associated with this element
     * @attribute
     */
    get form(): HTMLFormElement | null | string;
    get validity(): ValidityState;
    get validationMessage(): string;
    get willValidate(): boolean;
    /**
     * The name of the button, submitted as a pair with the button's value as part of the form data.
     * @attribute
     */
    accessor name: string | undefined;
    get value(): string | undefined;
    /**
     * Defines the value associated with the button's name when it's submitted with the form data.
     * @attribute
     */
    set value(value: string | undefined);
    /**
     * Whether to render the icon at the inline end of the label rather than the inline start.
     * @attribute
     */
    accessor trailingIcon: boolean;
    /**
     * The default behavior of the button.
     * @attribute
     */
    accessor type: ButtonType;
    /**
     * When set, the button is a toggle button.
     * @attribute
     */
    accessor toggle: boolean;
    /**
     * Indicates that the button is currently selected.
     * @attribute
     */
    accessor selected: boolean;
    /**
     * The shape of the button.
     * @attribute
     */
    accessor shape: MdButtonShape;
    /**
     * The size of the button.
     * @attribute
     */
    accessor size: MdButtonSize;
    get disabled(): boolean;
    /**
     * When set, the button is in a disabled state.
     * @attribute
     */
    set disabled(value: boolean);
    protected accessor ripple: UiRipple | null;
    /**
     * Turns a `<ui-button>` element into a popover control button; takes the ID
     * of the popover element to control as its value.
     * @attribute
     */
    accessor popoverTarget: string | undefined;
    /**
     * Specifies the action to be performed on a popover element being controlled
     * by a control <ui-button>. Possible values are:
     *
     * - `hide` - The button will hide a shown popover. If you try to hide an already hidden popover,
     *   no action will be taken.
     * - `show` - The button will show a hidden popover. If you try to show an already showing popover,
     *   no action will be taken.
     * - `toggle` - The button will toggle a popover between showing and hidden. If the popover is hidden,
     *   it will be shown; if the popover is showing, it will be hidden. If popoverTargetAction is omitted,
     *   "toggle" is the default action that will be performed by the control button.
     */
    accessor popoverTargetAction: string | undefined;
    /**
     * When true, the focus ring effect will be constrained to the inside of the button's bounds.
     * @attribute
     */
    accessor inwardFocus: boolean | undefined;
    constructor();
    connectedCallback(): void;
    protected update(changedProperties: PropertyValues<this>): void;
    protected updated(cp: PropertyValues<this>): void;
    protected updatePressedState(): void;
    checkValidity(): boolean;
    reportValidity(): boolean;
    protected firstUpdated(): void;
    beginPress(options: BeginPressConfig): void;
    endPress(config: EndPressConfig): void;
    handleClick(e: MouseEvent): void;
    protected setupPopoverTarget(): void;
    /**
     * When the button has a popover target, this method toggles the popover
     * visibility by finding the element in the shadow roots and calling its
     * `togglePopover` method.
     */
    protected handlePopoverAction(): void;
    protected handleSubmit(): void;
    protected handleReset(): void;
    handlePointerEnter(e: PointerEvent): void;
    handlePointerLeave(e: PointerEvent): void;
    protected render(): TemplateResult;
    protected renderIcon(): TemplateResult;
    protected renderFocusRing(): TemplateResult;
    protected renderRipple(): TemplateResult;
}
//# sourceMappingURL=base.d.ts.map