@yandex/ui
Version:
Yandex UI components
130 lines (95 loc) • 4.67 kB
Markdown
# TabsMenu
<a href='https://github.yandex-team.ru/search-interfaces/frontend/tree/master/packages/lego-components/src/TabsMenu' target='_blank'><img src='https://badger.yandex-team.ru/custom/[Исходники]/[Github
][green]/badge.svg' /></a> <a href='https://search.yandex-team.ru/stsearch?text=TabsMenu.ts&facet.queue=ISL&facet.type=bug&facet.status=128' target='_blank'><img src='https://badger.yandex-team.ru/custom/[Известные проблемы]/[Startrek][blue]/badge.svg' /></a>
<!-- description:start -->
Компонент для создания горизонтального меню.
<!-- description:end -->
## Когда использовать
С помощью компонента можно создать:
- статическое меню с ссылками на другие страницы;
- меню с использованием собственного JS-кода (например, чтобы сделать пункт меню активным);
- переключатель для вкладок `TabsPanes`.
## Пример использования
Конфигурация темы на уровне проекта:
```ts
// src/lib/theme.ts
import { configureRootTheme } from '@yandex-lego/components/Theme'
import { theme } from '@yandex-lego/components/Theme/presets/default'
configureRootTheme({ theme })
```
Использование с нужным набором модификаторов:
```ts
// src/App.ts
import React, { useState } from 'react'
import { compose } from '@bem-react/core'
import {
TabsMenu as TabsMenuDesktop,
withSizeM,
withLayoutHoriz,
withViewDefault,
} from '@yandex-lego/components/TabsMenu/desktop'
const TabsMenu = compose(
withSizeM,
withViewDefault,
withLayoutHoriz,
)(TabsMenuDesktop)
const App = () => {
const [activeTab, setActiveTab] = useState('tab1')
return (
<TabsMenu
size="m"
view="default"
layout="horiz"
activeTab={activeTab}
tabs={[
{ id: 'tab1', onClick: () => setActiveTab('tab1'), content: 'Tab 1' },
{ id: 'tab2', onClick: () => setActiveTab('tab2'), content: 'Tab 2' },
]}
/>
)
}
```
Использование с полным набором модификаторов:
```ts
// src/App.ts
import React, { useState } from 'react'
import { TabsMenu } from '@yandex-lego/components/TabsMenu/desktop/bundle'
const App = () => {
const [activeTab, setActiveTab] = useState('tab1')
return (
<TabsMenu
size="m"
view="default"
layout="horiz"
activeTab={activeTab}
tabs={[
{ id: 'tab1', onClick: () => setActiveTab('tab1'), content: 'Tab 1' },
{ id: 'tab2', onClick: () => setActiveTab('tab2'), content: 'Tab 2' },
]}
/>
)
}
```
## Примеры
### Вид меню
Чтобы изменить вид меню, установите свойство `view` в значение `"default"`.
{{%story::desktop:navigation-tabsmenu-desktop--view%}}
### Стилевое оформление
Чтобы изменить стилевое оформление меню, установите свойство `theme` в значение `"normal"`.
{{%story::desktop:navigation-tabsmenu-desktop--theme%}}
### Размер меню
Чтобы задать размер горизонтального меню, установите свойство `size` в одно из следующих значений: `"m"`, `"s"`.
{{%story::desktop:navigation-tabsmenu-desktop--size%}}
### Адаптивность
Чтобы включить адаптивность, установите свойство `adaptive` и обработчик `onChange`.
> ⚠️ Данная функциональность находится в стадии доработок и может быть изменена в будущем.
{{%story::desktop:navigation-tabsmenu-desktop--adaptive%}}
## Свойства
<!-- props:start -->
| Свойство | Тип | Описание |
| ---------- | ----------------------------- | ----------------------------------------- |
| activeTab? | `string` | Идентификатор активного пункта меню |
| tabs | `ITabsMenuTabProps[]` | Массив пунктов меню |
| innerRef? | `RefObject<HTMLUListElement>` | Ссылка на корневой DOM-элемент компонента |
| className? | `string` | Дополнительный класс |
<!-- props:end -->