import * as React from 'react';
import { SIZE, SHAPE, KIND } from '../button';
import type { Override } from '../helpers/overrides';
import { MODE, STATE_CHANGE_TYPE } from './constants';
import type { SyntheticEvent } from 'react';
export declare type ButtonGroupProps = {
    /** Accessible label. */
    ariaLabel?: string;
    'aria-label'?: string;
    /** Set of more than one `Button` components */
    children: Array<React.ReactNode>;
    /** Defines if the button group is disabled. */
    disabled?: boolean;
    /**
     * Use the `mode` prop to render toggleable Buttons:
     * the value `radio` will cause Buttons to behave like radio buttons,
     * the value `checkbox` will cause Buttons to behave like checkboxes.
     */
    mode?: typeof MODE[keyof typeof MODE];
    /**
     * Called with click events from children. If a child button has its
     * own click handler, the local handler will be called first, then
     * this handler will trigger.
     */
    onClick?: ClickHandler;
    overrides?: ButtonGroupOverrides;
    /**
     * Index or array of indices of the selected Button(s).
     * Primarily for use with controlled components with a `mode` prop defined.
     */
    selected?: number | Array<number>;
    /** Defines the shape of the buttons in the button group. */
    shape?: typeof SHAPE[keyof typeof SHAPE];
    /** Defines the size of the buttons in the button group. */
    size?: typeof SIZE[keyof typeof SIZE];
    /** Defines the `kind` of the buttons in the group */
    kind?: typeof KIND[keyof typeof KIND];
};
declare type ButtonGroupOverrides = {
    Root?: Override;
};
export declare type StatefulButtonGroupProps = Omit<{
    initialState?: {
        selected: number | Array<number>;
    };
    stateReducer?: StateReducer;
} & ButtonGroupProps, 'selected'>;
export declare type StatefulContainerProps = {
    children: (props: {
        onClick: ClickHandler;
        selected: number | Array<number>;
    } & Omit<ButtonGroupProps, 'children'>) => React.ReactNode;
} & Omit<StatefulButtonGroupProps, 'children'>;
export declare type State = {
    selected: Array<number>;
};
export declare type StateReducer = (stateType: typeof STATE_CHANGE_TYPE[keyof typeof STATE_CHANGE_TYPE], nextState: State, currentState: State) => State;
declare type ClickHandler = (event: SyntheticEvent<HTMLButtonElement>, index: number) => unknown;
export {};
