TitleClickable

Кликабельный заголовок раздела — нативный <a> с заголовком, опциональной иконкой слева и шевроном справа. Используется в шапках продуктовых блоков, где сам заголовок одновременно является ссылкой на раздел. Длинный текст автоматически усекается через TruncateString.

Когда использовать

  • Заголовок продуктового раздела ведёт на отдельную страницу/детальный вид.
  • В шапке карточки/секции, где навигация по клику на заголовок ожидаема пользователем.
  • Когда нужен визуальный аффорданс перехода (шеврон) поверх обычной ссылки.

Когда не нужен:

Анатомия

Slots

  • beforeReactNode слева от заголовка (Figma + slotTitle). Принимает произвольную ноду либо один из готовых пресетов:
    • <TitleClickableIcon icon={...} /> — иконка 24×24 (Figma simpleTitle).
    • <TitleClickableAvatar name=... subtitle=... />Avatar + двухстрочный label/subtitle (Figma userTitle).
  • 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'

Примеры использования

Простой заголовок

Простой заголовокМинимальный набор: href + title

Production environment

tsx
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';

export function Basic() {
  return <TitleClickable href='#' title='Production environment' />;
}

С иконкой

С иконкойПресет `<TitleClickableIcon>` в слоте `before` — обёртка 24×24 для иконки из @cloud-ru/ds-icons
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`

Произвольный контент в `before`Слот `before` принимает любую React-ноду — версия, бейдж, статус и т.п.
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

Full-widthfullWidth: шеврон уезжает в правый край контейнера
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 />;
}

Внешняя ссылка

Внешняя ссылкаtarget='_blank' → rel='noopener noreferrer' автоматически
tsx
import { TitleClickable } from '@cloud-ru/ds-uikit-product-title-clickable';

export function External() {
  return <TitleClickable href='https://example.com' target='_blank' title='Внешняя ссылка' />;
}

Без шеврона

Без шевронаshowArrow={false}: компактный режим без визуального аффорданса
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} />;
}

С аватаром

С аватаромПресет `<TitleClickableAvatar>` в слоте `before` — Figma `userTitle`
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

PropsTitleClickableProps
PropTypeDefaultRequiredDescription
asElementTypenoПолиморфный тег корня — `'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<...> & { ...; }) | undefinedno@deprecated Используй `before={<TitleClickableAvatar {...} subtitle={...} />}`. Аватар с subtitle (Figma `userTitle`).
beforeReactNodenoСлот слева от заголовка. Произвольная нода либо предзаготовленные пресеты `<TitleClickableIcon icon={...} />` / `<TitleClickableAvatar {...} />`. Соответствует Figma-слоту `+ slotTitle` (`simpleTitle` / `userTitle`).
childrenReactNodenoКастомное содержимое вместо title/before
classNamestringnoCSS-класс
data-test-idstringno
fullWidthbooleannoЗанимает ли всю ширину
iconReactNodeno@deprecated Используй `before={<TitleClickableIcon icon={...} />}`. Иконка слева от заголовка.
innerRefanynoRef на корневой элемент.
showArrowbooleantruenoПоказывать иконку-стрелку справа. Иконка автоматически меняется на `external link` при `target='_blank'`.
titlestringnoЗаголовок
titleTagElementTypenoТег заголовка для семантики (например `'h2'`, `'h3'`, `'span'`)

Types

TitleClickableProps

Storybook

Figma