import { PopoverAlign } from '../popover/popover.types.js'; import { CSSProperties, ReactNode } from 'react'; import { IconContent } from '../types/icon.types.js'; import { ButtonProps, ButtonStyleType, ButtonSize } from '../button/button.types.js'; import { SlotClassNames, SlotStyles, HtmlProps } from '../types/slots.types.js'; export interface SplitButtonAction { id: string; label: ReactNode; onClick: () => void; disabled?: boolean; icon?: IconContent; } export type SplitButtonSlots = 'root' | 'primaryButton' | 'triggerButton' | 'menu' | 'menuItem'; /** Text SplitButton renders of its own, for translating it. */ export interface SplitButtonLabels { /** The button opening the menu, read out by screen readers. */ moreActions?: string; } export interface SplitButtonProps extends HtmlProps { children?: ReactNode; onClick?: (event: React.MouseEvent) => Promise | void; actions: SplitButtonAction[]; /** Default `Filled`. */ styleType?: ButtonStyleType; /** A `ThemeColor` or any CSS colour, shared by both buttons (default `Primary`). */ color?: ButtonProps['color']; size?: ButtonSize; disabled?: boolean; isLoading?: boolean; /** Alignment of the actions menu relative to the trigger button (default `PopoverAlign.End`) */ align?: PopoverAlign; className?: string; style?: CSSProperties; classNames?: SlotClassNames; styles?: SlotStyles; /** Overrides the text SplitButton renders of its own. Merged per key. */ labels?: SplitButtonLabels; }