# @cloud-ru/ds-uikit-product-title-clickable
> Кликабельный заголовок-ссылка раздела с иконкой, шевроном и опциональным аватар-блоком — для шапок продуктовых разделов.
Docs: /snack-v2/components/uikit-product-title-clickable/
## Установка
```sh
pnpm add @cloud-ru/ds-uikit-product-title-clickable
```
## Когда использовать
- Заголовок продуктового раздела ведёт на отдельную страницу/детальный вид.
- В шапке карточки/секции, где навигация по клику на заголовок ожидаема пользователем.
- Когда нужен визуальный аффорданс перехода (шеврон) поверх обычной ссылки.
Когда **не** нужен:
- Inline-ссылка в тексте:
- используйте [`@cloud-ru/ds-link`](/components/link).
- Action-кнопка:
- используйте [`@cloud-ru/ds-button`](/components/button/button).
- Строка списка с действием:
- используйте [`@cloud-ru/ds-uikit-product-info-row`](/components/uikit-product-info-row).
## API
### TitleClickable
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `as` | `ElementType` | — | no | Полиморфный тег корня — `'a'` по умолчанию, либо компонент-роутер (`Link` из react-router-dom). |
| `avatar` | `({ 'data-test-id'?: string; } & AriaAttributes & { name: string; src?: string; appearance?: Appearance \| undefined; size?: Size \| undefined; ... 5 more ...; innerRef?: Ref<...> \| undefined; } & HTMLAttributes<...> & { ...; }) \| undefined` | — | no | @deprecated Используй `before={}`. Аватар с subtitle (Figma `userTitle`). |
| `before` | `ReactNode` | — | no | Слот слева от заголовка. Произвольная нода либо предзаготовленные пресеты `` / ``. Соответствует Figma-слоту `+ slotTitle` (`simpleTitle` / `userTitle`). |
| `children` | `ReactNode` | — | no | Кастомное содержимое вместо title/before |
| `className` | `string` | — | no | CSS-класс |
| `data-test-id` | `string` | — | no | |
| `fullWidth` | `boolean` | — | no | Занимает ли всю ширину |
| `icon` | `ReactNode` | — | no | @deprecated Используй `before={}`. Иконка слева от заголовка. |
| `innerRef` | `any` | — | no | Ref на корневой элемент. |
| `showArrow` | `boolean` | `true` | no | Показывать иконку-стрелку справа. Иконка автоматически меняется на `external link` при `target='_blank'`. |
| `title` | `string` | — | no | Заголовок |
| `titleTag` | `ElementType` | — | no | Тег заголовка для семантики (например `'h2'`, `'h3'`, `'span'`) |
#### Related types
- `Appearance` = `blue | green | neutral | orange | pink | primary | red | violet | yellow`
- `AvatarProps` (interface)
- `PolymorphicRef` (alias)
- `Shape` = `rounded | squared`
- `Size` = `s | xs`
- `StatusAppearance` = `blue | green | loading | neutral | orange | pink | primary | red | violet | yellow`
### TitleClickableAvatar
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `appearance` | `blue \| green \| neutral \| orange \| pink \| red \| violet \| yellow` | — | no | Внешний вид (цвет) |
| `badge` | `ReactNode` | — | no | Произвольный нод в слот значка (правый-нижний угол). Перекрывает `status`. |
| `children` | `string \| number \| boolean \| ReactElement> \| Iterable \| ReactPortal \| null \| undefined` | — | no | |
| `className` | `string` | — | no | CSS-класс |
| `data-test-id` | `string` | — | no | |
| `innerRef` | `Ref` | — | no | Ref на корневой DOM-элемент. Используем явный проп, чтобы не зависеть от `forwardRef` и не тащить type-assertions на экспорт. |
| `name` | `string` | — | yes | Имя пользователя для генерации аббревиатуры |
| `shape` | `rounded \| squared` | — | no | Форма: круглая или квадратная |
| `showTwoSymbols` | `boolean` | — | no | Отображение двух заглавных символов имени вместо одного |
| `size` | `3xl \| 6xl \| 9xl \| l \| m \| s \| xs` | — | no | Размер |
| `src` | `string` | — | no | URL изображения аватара |
| `status` | `blue \| green \| neutral \| orange \| pink \| red \| violet \| yellow` | — | no | Appearance дефолтного `StatusIndicator` в правом-нижнем углу. Размер индикатора подбирается из `size` аватара автоматически. Полностью настроить значок можно через слот `badge`, который перекрывает `status`. |
| `subtitle` | `string` | — | yes | Подпись под именем (e-mail, роль и т.п.). |
#### Related types
- `Appearance` = `blue | green | neutral | orange | pink | primary | red | violet | yellow`
- `Shape` = `rounded | squared`
- `Size` = `s | xs`
- `StatusAppearance` = `blue | green | loading | neutral | orange | pink | primary | red | violet | yellow`
### TitleClickableContent
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `avatar` | `({ 'data-test-id'?: string; } & AriaAttributes & { name: string; src?: string; appearance?: Appearance \| undefined; size?: Size \| undefined; ... 5 more ...; innerRef?: Ref<...> \| undefined; } & HTMLAttributes<...> & { ...; }) \| undefined` | — | no | @deprecated Используй `before={}`. Аватар с subtitle (Figma `userTitle`). |
| `before` | `ReactNode` | — | no | Слот слева от заголовка. Произвольная нода либо предзаготовленные пресеты `` / ``. Соответствует Figma-слоту `+ slotTitle` (`simpleTitle` / `userTitle`). |
| `children` | `ReactNode` | — | no | Кастомное содержимое вместо title/before |
| `fullWidth` | `boolean` | — | no | Занимает ли всю ширину |
| `icon` | `ReactNode` | — | no | @deprecated Используй `before={}`. Иконка слева от заголовка. |
| `title` | `string` | — | no | Заголовок |
| `titleTag` | `ElementType` | — | no | Тег заголовка для семантики (например `'h2'`, `'h3'`, `'span'`) |
### TitleClickableIcon
| Prop | Type | Default | Required | Description |
|------|------|---------|----------|-------------|
| `className` | `string` | — | no | |
| `icon` | `ReactNode` | — | yes | Иконка (24×24). |
## Примеры
### Basic
```tsx
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function Basic() {
return ;
}
```
### External
```tsx
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function External() {
return ;
}
```
### FullWidth
```tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function FullWidth() {
return } fullWidth />;
}
```
### HiddenArrow
```tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function HiddenArrow() {
return } showArrow={false} />;
}
```
### WithAvatar
```tsx
import { TitleClickable, TitleClickableAvatar } from '@cloud-ru/ds-uikit-product-title-clickable';
export function WithAvatar() {
return (
} />
);
}
```
### WithCustomBefore
```tsx
import { Typography } from '@cloud-ru/ds-typography';
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function WithCustomBefore() {
return (
Custom before
}
/>
);
}
```
### WithIcon
```tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { TitleClickable, TitleClickableIcon } from '@cloud-ru/ds-uikit-product-title-clickable';
export function WithIcon() {
return (
} />} />
);
}
```