'use client'; import * as React from 'react'; import { classNames, hasReactNode, noop } from '@vkontakte/vkjs'; import { useFocusVisible } from '../../hooks/useFocusVisible'; import { useFocusVisibleClassName } from '../../hooks/useFocusVisibleClassName'; import { usePlatform } from '../../hooks/usePlatform'; import { callMultiple } from '../../lib/callMultiple'; import { COMMON_WARNINGS, warnOnce } from '../../lib/warnOnce'; import type { HasComponent, HasRootRef } from '../../types'; import { RootComponent } from '../RootComponent/RootComponent'; import { Tappable } from '../Tappable/Tappable'; import { Footnote } from '../Typography/Footnote/Footnote'; import styles from './TabbarItem.module.css'; export interface TabbarItemProps extends Omit, 'label'>, HasRootRef, HasComponent { /** * Выбранное состояние компонента. */ selected?: boolean; /** * Текст рядом с иконкой. */ label?: React.ReactNode; /** * Индикатор над иконкой. Принимает `` или ``. */ indicator?: React.ReactNode; } const warn = warnOnce('TabbarItem'); /** * @see https://vkui.io/components/epic#tabbar-item */ export const TabbarItem = ({ children, selected, indicator, label, href, Component = href ? 'a' : 'button', disabled, onFocus: onFocusProp, onBlur: onBlurProp, ...restProps }: TabbarItemProps): React.ReactNode => { const platform = usePlatform(); if (process.env.NODE_ENV === 'development') { const hasAccessibleName = label || restProps['aria-label'] || restProps['aria-labelledby']; if (!hasAccessibleName) { warn(COMMON_WARNINGS.a11y[Component === 'a' ? 'link-name' : 'button-name'], 'error'); } } const { focusVisible, onFocus: handleFocusVisibleOnFocus, onBlur: handleFocusVisibleOnBlur, } = useFocusVisible(); const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, }); return (
{children}
{hasReactNode(indicator) && indicator}
{label && ( {label} )}
); };