import React, { useMemo, AnchorHTMLAttributes, forwardRef } from 'react'; import { type TStyle, useClassnames } from '../../hooks/use-classnames'; import style from './index.module.pcss'; type TNative = AnchorHTMLAttributes; export interface IProps { /** * Позволяет задавать дополнительные классы для стилизации элемента. */ readonly className?: TStyle | string, /** * Определяет предустановленный стиль элемента навигации. */ readonly presetStyle?: 'default' | 'active', /** * Определяет, отключен ли элемент навигации */ readonly isDisabled?: boolean, /** * Задает текстовое описание, которое будет отображаться при наведении курсора на элемент навигации. */ readonly title?: TNative['title'], /** * Содержимое элемента */ readonly children?: TNative['children'], /** * Обработчик клика на элементе */ readonly onClick?: TNative['onClick'], /** * Адрес ссылки, на который будет осуществлен переход при клике */ readonly href?: TNative['href'], /** * Задает, в каком окне или фрейме должна быть загружена связанная с пунктом навигации страница, когда пользователь нажимает на этот пункт. */ readonly target?: TNative['target'], /** * Указывает, должен ли браузер загружать ресурс по ссылке, вместо того, чтобы отображать его в браузере. */ readonly download?: TNative['download'] } /** * Компонент NavItem используется для создания элементов навигационного меню. * Он может содержать иконку, текст и/или другие дочерние элементы. */ export const NavItem = forwardRef(({ className, isDisabled, presetStyle = 'default', ...props }, ref) => { const cn = useClassnames(style, className); const title = useMemo(() => { if(props.title) { return props.title; } if(typeof props.children === 'string') { return props.children; } }, [props.title, props.children]); return ( ); });