import type { ComponentProps, ElementType, ReactNode } from 'react'; import type { ButtonProps } from '../Button'; import type { DropdownButtonProps } from '../DropdownButton'; import type { ListItemButtonProps } from '../ListItemButton'; import type { MenuItemProps } from '../MenuItem'; import type { TooltipProps } from '../Tooltip'; type NestedAction = MenuItemProps & { /** Название действия */ text: string; }; export type SingleAction = Omit & { /** * Флаг показа выпадающего списка при клике */ isNested?: false; /** * Название действия */ text: string; /** * Текст тултипа при заблокированном состоянии кнопки */ disabledReason?: string; /** * Текст тултипа при наведении на кнопку */ note?: string; /** * Если true, блокирует взаимодействие с actions */ isBlockingOperation?: boolean; /** * Компонент, используемый для корневого узла. Либо строка для использования элемента HTML, либо компонент */ component?: TMainActionComponent; } & Omit, ''>; export type MultipleAction = Omit & { /** * Флаг показа выпадающего списка при клике */ isNested: true; /** * Список действий для выпадающего списка */ actions: NestedAction[]; /** * Название действия */ text: string; /** * Если true, блокирует взаимодействие с actions */ isBlockingOperation?: boolean; /** * Текст тултипа при заблокированном состоянии кнопки */ disabledReason?: string; /** * Текст тултипа при наведении на кнопку */ note?: string; /** * Компонент, используемый для корневого узла. Либо строка для использования элемента HTML, либо компонент */ component?: TMainActionComponent; } & Omit, ''>; /** Модель основного экшена */ export type MainAction = SingleAction | MultipleAction; export type MainActionsProps = { actions: MainAction[]; /** * Если true, основные действия будут заблокированы */ isDisabled?: boolean; }; /** Модель второстепенного экшена */ export type SecondaryAction = Omit & { /** * Название действия */ text: string; tooltipPlacement?: TooltipProps['placement']; /** * Текст тултипа при наведении на элемент меню */ note?: string; /** * Компонент, используемый для корневого узла. Либо строка для использования элемента HTML, либо компонент */ component?: TSecondaryActionComponent; } & Omit, ''>; export type SecondaryActionProps = { actions: SecondaryAction[]; /** * Если true, вторичные действия будут заблокированы */ isDisabled?: boolean; /** * Класс, применяемый к кнопкам второстепенных действий */ className?: string; }; /** Модель второстепенного видимого экшена */ export type SecondaryVisibleAction = Omit & { /** Название действия */ name: string; /** Иконка */ icon: ReactNode; /** Текст тултипа в случае дизейбла кнопки */ disableReason?: string; /** * Если true, блокирует взаимодействие с actions */ isBlockingOperation?: boolean; }; export type SecondaryVisibleActionProps = { /** * Видимые второстепенные действия */ actions: SecondaryVisibleAction[]; /** * Класс, применяемый к кнопкам второстепенных видимых действий */ className?: string; }; export type ActionGroupProps = { /** * Основные действия */ main?: MainAction[]; /** * Второстепенные действия, спрятанные за троеточием */ secondary?: SecondaryAction[]; /** * Видимые второстепенные действия */ secondaryVisible?: SecondaryVisibleAction[]; /** * Название класса, применяется к корневому компоненту */ className?: string; }; export {};