import { TNode, Value } from '@tempots/dom'; import { ControlSize, ButtonVariant } from '../theme'; import { ThemeColorName } from '../../tokens'; import { ExtendedColor } from '../theme/style-utils'; import { RadiusName } from '../../tokens/radius'; /** Configuration options for the {@link Button} component. */ export interface ButtonOptions { /** The HTML button type attribute. @default 'button' */ type?: Value<'submit' | 'reset' | 'button'>; /** Whether the button is disabled and non-interactive. @default false */ disabled?: Value; /** Whether to show a loading spinner and disable interaction. @default false */ loading?: Value; /** Visual style variant controlling background, text, and border colors. @default 'filled' */ variant?: Value; /** Size affecting padding, font size, and icon dimensions. @default 'md' */ size?: Value; /** Theme color for the button's color scheme. @default 'base' */ color?: Value; /** Border radius preset. @default 'sm' */ roundedness?: Value; /** Callback invoked when the button is clicked. */ onClick?: () => void; /** Whether the button takes the full width of its container. @default false */ fullWidth?: Value; /** * Whether to stop event propagation on click. * When true (default), prevents the click event from bubbling up. * Set to false if you need parent elements to receive click events (e.g., for Flyout triggers). * @default true */ stopPropagation?: boolean; } /** * Generates CSS class names for a button based on size, roundedness, loading state, and width. * * @param size - Control size for padding and text * @param roundedness - Border radius preset name * @param loading - Whether loading spinner is shown * @param fullWidth - Whether button is full-width * @returns Space-separated CSS class string */ export declare function generateButtonClasses(size: ControlSize, roundedness: RadiusName, loading: boolean, fullWidth: boolean): string; /** * Generates inline CSS custom properties for button theming based on variant, color, and disabled state. * Sets background, text, border, hover, and text-shadow values for both light and dark modes. * * @param variant - The visual style variant * @param color - The theme color * @param disabled - Whether the button is disabled (suppresses hover styles) * @returns Semicolon-separated CSS custom property declarations */ export declare function generateButtonStyles(variant: ButtonVariant, color: ExtendedColor, disabled: boolean): string; /** * An interactive button component with theme-aware styling, loading state, and accessibility support. * * When `loading` is true, the button content is replaced with a spinning icon and the button is * disabled. The button preserves its dimensions during loading to prevent layout shift. * Screen readers are notified of the loading state via `aria-busy` and `aria-label`. * * For submit buttons (`type: 'submit'`), the default browser form submission behavior is preserved. * For other button types, `preventDefault()` is called automatically. * * @param options - Configuration for appearance, behavior, and state * @param children - Content to display inside the button (text, icons, etc.) * @returns A styled button element * * @example * ```typescript * Button( * { variant: 'filled', color: 'primary', onClick: () => console.log('clicked') }, * 'Save Changes' * ) * ``` * * @example * ```typescript * // Button with loading state * const saving = prop(false) * Button( * { variant: 'filled', color: 'success', loading: saving, onClick: handleSave }, * 'Submit' * ) * ``` */ export declare function Button({ type, disabled, loading, variant, size, color, roundedness, onClick, fullWidth, stopPropagation, }: ButtonOptions, ...children: TNode[]): import("@tempots/core").Renderable;