import React, { FunctionComponent, ReactNode, HTMLAttributes, MouseEventHandler } from 'react';
import { getClassName } from '../../helpers/getClassName';
import { classNames } from '../../lib/classNames';
import { usePlatform } from '../../hooks/usePlatform';
import { ANDROID, IOS, VKCOM } from '../../lib/platform';
import { Icon24Chevron, Icon24DismissSubstract, Icon24DismissDark, Icon24Cancel } from '@vkontakte/icons';
import Tappable from '../Tappable/Tappable';
import Headline from '../Typography/Headline/Headline';
import Caption from '../Typography/Caption/Caption';
import Text from '../Typography/Text/Text';
import { hasReactNode } from '../../lib/utils';
import Title from '../Typography/Title/Title';
export interface BannerProps extends HTMLAttributes {
/**
* Тип баннера.
*/
mode?: 'tint' | 'image';
size?: 's' | 'm';
/**
* Тип действия в правой части баннера.
*
* - `dismiss` – отображается иконка крестика, при клике на неё сработает свойство `onDismiss`.
* - `expand` – отображается иконка шеврона, которая подразумевает, что при клике на баннер можно куда-то перейти.
*/
asideMode?: 'dismiss' | 'expand';
/**
* Срабатывает при клике на иконку крестика при `asideMode="dismiss"`.
*/
onDismiss?: MouseEventHandler;
/**
* Содержимое, отображаемое в левой части баннера.
*/
before?: ReactNode;
/**
* Заголовок.
* При использовании этого свойства рекомендуется не указывать `text`.
*/
header?: ReactNode;
/**
* Подзаголовок.
* При использовании этого свойства рекомендуется не указывать `text`.
*/
subheader?: ReactNode;
/**
* Текст баннера.
* Это свойство следует использовать без указания `header` и `subheader`.
*/
text?: ReactNode;
/**
* При использовании `mode="image"`.
*
* - `light` – в качестве фона используется светлое изображение, цвет текста в баннере будет тёмным.
* - `dark` – в качестве фона используется тёмное изображение, цвет текста будет светлым.
*/
imageTheme?: 'light' | 'dark';
/**
* При использовании `mode="image"`.
*
* Элемент, который нужно стилизовать цветом и/или фоном. Этот элемент будет растянут на 100% ширины и высоты баннера.
*/
background?: ReactNode;
/**
* Кнопки, отображаемые в баннере.
*
* - В режиме `tint` или в `image` со светлым фоном рекомендуется использовать только `` или ``.
* - В режиме `image` с тёмным фоном – ``.
*/
actions?: ReactNode;
}
function renderHeader({ size, header }: Pick) {
switch (size) {
case 's':
return {header};
case 'm':
return {header};
}
}
function renderSubheader({ size, subheader }: Pick) {
switch (size) {
case 's':
return