import { type AriaAttributes, type FC, type HTMLAttributes, type MouseEvent, type ReactElement, type ReactNode, type Ref } from 'react';
import { type SkeletonProps } from '@alfalab/core-components-skeleton';
import { type TagProps } from '@alfalab/core-components-tag';
import { type TypographyType } from '@alfalab/core-components-types';
export type SelectedId = string | number;
export type TitleProps = Omit, 'onClick' | 'onKeyDown' | 'className' | 'disabled' | 'id' | 'role' | 'tabIndex' | 'aria-selected'> & AriaAttributes;
export interface TabsProps extends Omit, 'onChange' | 'children' | 'className'>, AriaAttributes {
/**
* Дополнительный класс
*/
className?: string;
/**
* Дополнительный класс контейнера
*/
containerClassName?: string;
/**
* Дополнительный класс для контейнера кнопок прокрутки
*/
scrollControlsContainerClassName?: string;
/**
* Дополнительный класс для кнопок прокрутки
*/
scrollControlsButtonClassName?: string;
/**
* Id активного таба
*/
selectedId?: SelectedId;
/**
* Рендерить неактивные табы
*/
keepMounted?: boolean;
/**
* Внешний вид заголовков табов
*/
view?: 'primary' | 'secondary';
/**
* Стиль текста. Имеет приоритет над size. Работает только в primary табах.
*/
textStyle?: Extract;
/**
* Высота заголовков табов
*/
size?: 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl';
/**
* Мобильный вид
*/
mobile?: boolean;
/**
* Рендерить заголовки табов в контейнере со скроллом
*/
scrollable?: boolean;
/**
* Список табов, для контроля переноса вкладок в PickerButton
*/
collapsedTabsIds?: string[];
/**
* При скроле табы будут уходить в край экрана
*/
fullWidthScroll?: boolean;
/**
* Компоненты табов
*/
children: Array>;
/**
* Компонент заголовков табов
*/
TabList: FC;
/**
* Обработчик переключения табов
*/
onChange?: (event: MouseEvent, payload: {
selectedId: SelectedId;
}) => void;
/**
* Идентификатор для систем автоматизированного тестирования
*/
dataTestId?: string;
/**
* Контрольная точка, с нее начинается desktop версия
* @default 1024
*/
breakpoint?: number;
/**
* Версия, которая будет использоваться при серверном рендеринге
*/
client?: 'desktop' | 'mobile';
/**
* Значение по-умолчанию для хука useMatchMedia
* @deprecated Используйте client
*/
defaultMatchMediaValue?: boolean | (() => boolean);
/**
* Форма тега (для view secondary только)
*/
tagShape?: TagProps['shape'];
/**
* Стиль тега (для view secondary только)
*/
tagView?: TagProps['view'];
/**
* Дополнительные инлайн стили для враппера
*/
style?: React.CSSProperties;
/**
* Показать скелетон
*/
showSkeleton?: boolean;
/**
* Доп. пропсы для скелетона
*/
skeletonProps?: Omit;
/**
* Доп. пропсы для заголовка таба
*/
titleProps?: TitleProps;
}
export interface TabProps extends AriaAttributes {
/**
* Id таба
*/
id: SelectedId;
/**
* Заголовок таба
*/
title: NonNullable;
/**
* Дополнительный класс для контейнера содержимого таба
*/
className?: string;
/**
* Дополнительный класс для кнопки таба
*/
toggleClassName?: string;
/**
* Блокирует таб
*/
disabled?: boolean;
/**
* Управление видимостью таба
*/
hidden?: boolean;
/**
* Рендерить таб, если он неактивен
*/
keepMounted?: boolean;
/**
* Контент таба
*/
children?: ReactNode;
/**
* Слот справа
*/
rightAddons?: ReactNode;
/**
* Идентификатор для систем автоматизированного тестирования
*/
dataTestId?: string;
/**
* Реф для кнопки переключения таба
*/
toggleRef?: Ref;
/**
* Доп. пропсы для заголовка таба
*/
titleProps?: TitleProps;
}
export interface TabListTitle extends AriaAttributes {
title: NonNullable;
id: SelectedId;
disabled?: boolean;
rightAddons?: ReactNode;
hidden?: boolean;
toggleClassName?: string;
selected?: boolean;
collapsed?: boolean;
dataTestId?: string;
toggleRef?: Ref;
titleProps?: TitleProps;
}
export interface TabListProps extends Pick {
/**
* Заголовки табов
*/
titles?: TabListTitle[];
/**
* Контрольная точка, с нее начинается desktop версия
* @default 1024
*/
breakpoint?: number;
/**
* Версия, которая будет использоваться при серверном рендеринге
*/
client?: 'desktop' | 'mobile';
/**
* Дополнительные инлайн стили для заголовка
*/
inlineStyle?: React.CSSProperties;
}
export interface SecondaryTabListProps extends TabListProps {
tagSize?: TagProps['size'];
TagComponent?: FC>;
}
export type UseTabsProps = TabListProps;
export type Styles = {
styles?: {
[key: string]: string;
};
};
export type PlatformProps = {
platform: 'desktop' | 'mobile';
};