/** * MUI ButtonGroup Component * * Pure UI component for button groups (non-form). * Use ButtonGroupField for form integration. * * Features: * - Single or multiple selection * - Grouped (gap=0) or separated layout * - Horizontal/vertical orientation * - Custom styling and colors * - Controlled and uncontrolled modes * * Modes: * - Controlled: Use value + onChange * - Uncontrolled: Use defaultValue (optional) + onChange (optional) */ import React from 'react'; import { type SpacingValue, type ButtonVariant, type ColorPalette, type ComponentSize, type Orientation } from '@galaxy-dev/metadsl-core'; type ValueType = string | number; export interface ButtonGroupOption { value: ValueType; label: React.ReactNode; disabled?: boolean; icon?: React.ReactNode; } /** Base props shared by both single and multiple selection modes */ interface BaseButtonGroupProps { /** Options to display */ options: ButtonGroupOption[]; /** Orientation */ orientation?: Orientation; /** Button variant */ variant?: ButtonVariant; /** Button color */ color?: ColorPalette; /** Button size */ size?: ComponentSize; /** Gap between buttons (0 for grouped, semantic/px/number for separated) */ gap?: SpacingValue; /** Minimum button width */ minWidth?: number | string; /** Maximum button width */ maxWidth?: number | string; /** Disabled state */ disabled?: boolean; /** Read-only mode */ readOnly?: boolean; /** Full width */ fullWidth?: boolean; /** Custom className */ className?: string; /** Custom style */ style?: React.CSSProperties; /** ARIA label for the button group */ 'aria-label'?: string; } /** Single selection mode props */ export interface SingleButtonGroupProps extends BaseButtonGroupProps { /** Single selection mode */ multiple?: false; /** Current value (controlled mode) */ value?: ValueType; /** Default value (uncontrolled mode) */ defaultValue?: ValueType; /** Change handler - receives single value */ onChange?: (value: ValueType) => void; /** Exclusive mode: when true, clicking selected option does not deselect it */ exclusive?: boolean; } /** Multiple selection mode props */ export interface MultipleButtonGroupProps extends BaseButtonGroupProps { /** Multiple selection mode */ multiple: true; /** Current value (controlled mode) */ value?: ValueType[]; /** Default value (uncontrolled mode) */ defaultValue?: ValueType[]; /** Change handler - receives array of values */ onChange?: (value: ValueType[]) => void; /** Exclusive mode is not applicable in multiple selection */ exclusive?: never; } export type ButtonGroupProps = SingleButtonGroupProps | MultipleButtonGroupProps; export declare function ButtonGroup(props: ButtonGroupProps): import("react/jsx-runtime").JSX.Element; export declare namespace ButtonGroup { var displayName: string; var handlesOwnDisabled: boolean; } export {}; //# sourceMappingURL=ButtonGroup.d.ts.map