import { CustomElement } from "../../internal/custom-element.js"; import { BooleanAttributeDirective } from "../../internal/utils/boolean-attribute-directive.js"; import { SlotContentObserver } from "../../internal/controllers/slot-content-observer.js"; import { TooltipPlacement, TooltipVariant } from "../tooltip/tooltip.js"; import { TooltipController } from "../tooltip/tooltip.controller.js"; import { PropertyValues, TemplateResult } from "lit"; import { OdxIconName } from "@odx/icons"; declare const ButtonDirective: BooleanAttributeDirective<"data-odx-button">; type ButtonSize = (typeof ButtonSize)[keyof typeof ButtonSize]; declare const ButtonSize: { readonly SM: "sm"; readonly MD: "md"; readonly LG: "lg"; }; /** * @summary Used for components with button functionality. * * @slot - The button's label. * @slot prefix - Prefix slot typically used for icons. Replaced by a loading spinner while `loading` is `true` if no `suffix` content is present. * @slot suffix - Suffix slot typically used for icons. Replaced by a loading spinner while `loading` is `true` when populated. * @slot badge - Optional badge rendered as an overlay next to the label. Position is controlled by the `badgePlacement` property. * * @csspart icon - The icon element rendered when the `icon` property is set. * * @remarks * * The HTML structure of button elements generally looks like this: * * ```html *
* * * *
* *
* * * *
* ``` */ declare class ButtonBase extends CustomElement { #private; static readonly styles: import("lit").CSSResult[]; protected readonly slots: SlotContentObserver; protected readonly tooltip: TooltipController; protected loadingSlot?: 'prefix' | 'suffix'; /** * Indicates whether the element is disabled. * If `true` it cannot be interacted with nor be focused. */ disabled: boolean; hint?: string | null; hintLoading?: string | null; hintPlacement?: TooltipPlacement | null; /** Visual variant of the hint tooltip. Defaults to `neutral`. */ hintVariant?: TooltipVariant | null; /** * Name of the icon to render next to the label. When no slotted content is present, * the icon takes the place of the label entirely. */ icon?: OdxIconName | null; /** * When `true`, replaces the prefix or suffix slot content with a loading spinner * and prevents click activation. The button reports `aria-busy="true"` while loading. */ loading: boolean; /** Size of the button. Affects height, padding, and typography. */ size: ButtonSize; get currentIcon(): OdxIconName | null | undefined; get currentHint(): string | null | undefined; constructor(); click(): void; connectedCallback(): void; protected willUpdate(props: PropertyValues): void; protected updated(props: PropertyValues): void; protected render(): TemplateResult; protected renderContent(): TemplateResult; protected renderLabel(label?: TemplateResult | string): TemplateResult | string; protected renderSlot(name?: 'prefix' | 'suffix'): TemplateResult; } export { ButtonBase, ButtonDirective, ButtonSize };