UNPKG

1.87 kBTypeScriptView Raw
1import * as React from 'react';
2import { Simplify } from '@mui/types';
3import { UseButtonParameters, UseButtonRootSlotProps } from '../useButton';
4import { SlotComponentProps } from '../utils';
5import { PolymorphicProps } from '../utils/PolymorphicComponent';
6export interface ButtonActions {
7 focusVisible(): void;
8}
9export interface ButtonRootSlotPropsOverrides {
10}
11export interface ButtonOwnProps extends Omit<UseButtonParameters, 'ref'> {
12 /**
13 * A ref for imperative actions. It currently only supports `focusVisible()` action.
14 */
15 action?: React.Ref<ButtonActions>;
16 children?: React.ReactNode;
17 className?: string;
18 /**
19 * The props used for each slot inside the Button.
20 * @default {}
21 */
22 slotProps?: {
23 root?: SlotComponentProps<'button', ButtonRootSlotPropsOverrides, ButtonOwnerState>;
24 };
25 /**
26 * The components used for each slot inside the Button.
27 * Either a string to use a HTML element or a component.
28 * @default {}
29 */
30 slots?: ButtonSlots;
31}
32export interface ButtonSlots {
33 /**
34 * The component that renders the root.
35 * @default props.href || props.to ? 'a' : 'button'
36 */
37 root?: React.ElementType;
38}
39export type ButtonProps<RootComponentType extends React.ElementType = ButtonTypeMap['defaultComponent']> = PolymorphicProps<ButtonTypeMap<{}, RootComponentType>, RootComponentType>;
40export interface ButtonTypeMap<AdditionalProps = {}, RootComponentType extends React.ElementType = 'button'> {
41 props: ButtonOwnProps & AdditionalProps;
42 defaultComponent: RootComponentType;
43}
44export type ButtonOwnerState = Simplify<ButtonOwnProps & {
45 active: boolean;
46 focusVisible: boolean;
47}>;
48export type ButtonRootSlotProps = Simplify<UseButtonRootSlotProps & {
49 ownerState: ButtonOwnerState;
50 className?: string;
51 children?: React.ReactNode;
52}>;