import { default as React, ReactNode } from 'react'; import { BaseColor, BorderColor, ElementDensity, ElementElevation, ElementFocusEffect, ElementFont, ElementHoverEffect, ElementOutline, ElementPlacement, ElementPressedEffect, ElementSelectedEffect, ElementShape, ElementSize, ElementTouchEffect, SemanticColor } from '../../utils'; /** * Props for the ButtonBase component. * * @category Base components */ export interface ButtonBaseProps extends Omit, 'color' | 'size'> { /** Outline thickness when outlined. Default: 1 */ border?: ElementOutline; /** Border color when outlined. */ borderColor?: BorderColor; /** Custom content. Overrides label, icons, and layout. */ children?: ReactNode; /** Semantic color theme. Default: primary */ color?: SemanticColor; /** Initial selected state for uncontrolled toggle buttons. */ defaultSelected?: boolean; /** Visual density of the button. */ density?: ElementDensity; /** Disables the button. */ disabled?: boolean; /** Required root class name. */ elementClass: string; /** Enables elevated style. */ elevated?: boolean; /** Explicit elevation level. */ elevation?: ElementElevation; /** Icon rendered at the end of the button. */ endIcon?: React.ReactElement; /** Enables filled style. */ filled?: boolean; /** Disables elevation and elevation effects. */ flat?: boolean; /** Focus visual effects. */ focusEffects?: ElementFocusEffect[]; /** Font token for label and content. */ font?: ElementFont; /** Expands button to full width. */ fullWidth?: boolean; /** Hover visual effects. */ hoverEffects?: ElementHoverEffect[]; /** Icon rendered at the start of the button. */ icon?: React.ReactElement; /** DOM id. Auto-generated if not provided. */ id?: string; /** Text label for the button. */ label?: string; /** Custom leading content. */ leading?: ReactNode; /** Imperative link trigger element. */ link?: React.ReactElement; /** Shows loading spinner and disables interaction. */ loading?: boolean; /** DOM name attribute. */ name?: string; /** Blur event handler. */ onBlur?: React.FocusEventHandler; /** Change event handler (toggle buttons). */ onChange?: React.ChangeEventHandler; /** Click event handler. */ onClick?: React.MouseEventHandler; /** Change handler for file upload input. */ onUploadChange?: React.ChangeEventHandler; /** Enables outlined style. */ outlined?: boolean; /** Pressed visual effects. */ pressedEffects?: ElementPressedEffect[]; /** Controlled selected state for toggle buttons. */ selected?: boolean; /** Semantic color override when selected. */ selectedColor?: SemanticColor; /** Visual effects applied when selected. */ selectedEffects?: ElementSelectedEffect[]; /** Icon displayed when selected. */ selectedIcon?: React.ReactElement; /** Shape override when selected. */ selectedShape?: ElementShape; /** Text color override when selected. */ selectedTextColor?: BaseColor; /** Shape of the button. */ shape?: ElementShape; /** Predefined button size. Default: medium */ size?: ElementSize; /** Text color override. */ textColor?: BaseColor; /** Tooltip text and accessibility label fallback. */ title?: string; /** Enables toggle button behavior. */ toggle?: boolean; /** Enables tonal style. */ tonal?: boolean; /** Tooltip alignment relative to the button. */ tooltipAlign?: ElementPlacement; /** Touch and click visual effects. */ touchEffects?: ElementTouchEffect[]; /** Custom trailing content. */ trailing?: ReactNode; /** Native button type. Default: button */ type?: 'submit' | 'reset' | 'button'; /** Enables file upload trigger behavior. */ upload?: boolean; /** Accepted MIME types for file upload. */ uploadAccept?: string; /** Enables multi-file upload. */ uploadMultiple?: boolean; } /** * Low-level base component for all button variants. * * Supports Material Design 3 styles, toggle behavior, loading state, * file upload trigger, icons, and semantic colors. * * @param props - Component properties. * @function * * @example * } /> * * @example * * * @category Base components */ export declare const ButtonBase: React.ForwardRefExoticComponent>;