TitleClickable
Кликабельный заголовок раздела — нативный <a> с заголовком, опциональной иконкой слева и шевроном справа. Используется в шапках продуктовых блоков, где сам заголовок одновременно является ссылкой на раздел. Длинный текст автоматически усекается через TruncateString.
Когда использовать
- Заголовок продуктового раздела ведёт на отдельную страницу/детальный вид.
- В шапке карточки/секции, где навигация по клику на заголовок ожидаема пользователем.
- Когда нужен визуальный аффорданс перехода (шеврон) поверх обычной ссылки.
Когда не нужен:
- Inline-ссылка в тексте:
- используйте
@cloud-ru/ds-link.
- используйте
- Action-кнопка:
- используйте
@cloud-ru/ds-button.
- используйте
- Строка списка с действием:
- используйте
@cloud-ru/ds-uikit-product-info-row.
- используйте
Анатомия
Slots
before—ReactNodeслева от заголовка (Figma+ slotTitle). Принимает произвольную ноду либо один из готовых пресетов:<TitleClickableIcon icon={...} />— иконка 24×24 (FigmasimpleTitle).<TitleClickableAvatar name=... subtitle=... />—Avatar+ двухстрочный label/subtitle (FigmauserTitle).
title— строка заголовка. Рендерится черезTypography variant='title' size='m'с однострочным усечением.titleTag— семантический тег заголовка ('h2','h3','span'и т.п.) для корректной структуры документа.children— кастомное содержимое вместо стандартной парыbefore + title.showArrow— управляет видимостью шеврона справа. Иконка справа автоматически меняется наexternal linkприtarget='_blank'.
Иконка справа (auto)
chevron(default) — внутренний переход.external link— выставляется автоматически, когдаtarget='_blank'.
Deprecated
icon?: ReactNode— заменён наbefore={<TitleClickableIcon icon={...} />}. Сохранён для совместимости.avatar?: AvatarProps & { subtitle }— заменён наbefore={<TitleClickableAvatar {...} />}. Сохранён для совместимости.
Если before передан — icon/avatar игнорируются.
Width (default auto)
auto— компонент занимает по контенту, шеврон прижат к заголовку.fullWidth— растягивается на ширину контейнера, шеврон уезжает в правый край.
Target (default _self)
HTML-атрибут target нативной ссылки:
_self— открыть в текущей вкладке._blank— открыть в новой вкладке;rel='noopener noreferrer'проставляется автоматически._parent— открыть в родительском frame._top— открыть в верхнем frame.
Установка
pnpm add @cloud-ru/ds-uikit-product-title-clickable
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable'
Примеры использования
Простой заголовок
tsx
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function Basic() {
return <TitleClickable href='#' title='Production environment' />;
}С иконкой
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 (
<TitleClickable href='#' title='Production environment' before={<TitleClickableIcon icon={<PlaceholderSVG />} />} />
);
}Произвольный контент в `before`
tsx
import { Typography } from '@cloud-ru/ds-typography';
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function WithCustomBefore() {
return (
<TitleClickable
href='#'
before={
<Typography variant='label' size='s' as='span'>
Custom before
</Typography>
}
/>
);
}Full-width
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function FullWidth() {
return <TitleClickable href='#' title='Раздел занимает всю ширину контейнера' icon={<PlaceholderSVG />} fullWidth />;
}Внешняя ссылка
tsx
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function External() {
return <TitleClickable href='https://example.com' target='_blank' title='Внешняя ссылка' />;
}Без шеврона
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';
export function HiddenArrow() {
return <TitleClickable href='#' title='Без шеврона' icon={<PlaceholderSVG />} showArrow={false} />;
}С аватаром
tsx
import { TitleClickable, TitleClickableAvatar } from '@cloud-ru/ds-uikit-product-title-clickable';
export function WithAvatar() {
return (
<TitleClickable href='#' fullWidth before={<TitleClickableAvatar name='John Doe' subtitle='jdoe@example.com' />} />
);
}Props
Types
Props
TitleClickableProps| 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={<TitleClickableAvatar {...} subtitle={...} />}`. Аватар с subtitle (Figma `userTitle`). |
before | ReactNode | — | no | Слот слева от заголовка. Произвольная нода либо предзаготовленные пресеты `<TitleClickableIcon icon={...} />` / `<TitleClickableAvatar {...} />`. Соответствует 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={<TitleClickableIcon icon={...} />}`. Иконка слева от заголовка. |
innerRef | any | — | no | Ref на корневой элемент. |
showArrow | boolean | true | no | Показывать иконку-стрелку справа. Иконка автоматически меняется на `external link` при `target='_blank'`. |
title | string | — | no | Заголовок |
titleTag | ElementType | — | no | Тег заголовка для семантики (например `'h2'`, `'h3'`, `'span'`) |