Link

Компонент для навигации — как внутри экрана (якорь), так и во внешних ресурсах. Полиморфен: по умолчанию рендерится как <a>, но поддерживает <button> и кастомные компоненты-роутеры через as. Внутри используется TruncateString — длинные ссылки обрезаются и раскрывают полный текст в тултипе.

Демо

Preview
Link text
Prop
Type
Value
appearance
primary | neutral | invertNeutral | red | orange | yellow | green | blue | violet | pink
data-test-id
text
href
text
insideText
boolean
label
text
roleAppearance
regular | onAccent
underlined
boolean
Code
<Link appearance="primary" insideText={false} label="Link text" roleAppearance="regular" underlined={false} href="https://example.com" />

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

  • Для переходов между страницами и разделами.
  • Для ссылок внутри текста (insideText) — компонент не ломает перенос строк.
  • Для действий, которые семантически являются навигацией, но физически — кнопкой (as='button').

Когда не нужен: для кнопки-действия (сохранить, удалить) используйте @cloud-ru/ds-button с view='function', а не Link as='button'.

Анатомия

Appearance

Семантика цвета: neutral — основной текстовый линк, invertNeutral — на тёмных фонах, primary — брендовый акцент; red для деструктивных, orange/yellow — предупреждения, green — успех; blue, violet, pink — декоративные категории.

Role appearance (default regular)

Роль, в которой применяется выбранный appearance:

  • regular — линк на обычной поверхности, цвет берётся из text-токена темы.
  • onAccent — линк поверх цветных акцентных подложек (кнопка-бэйдж, баннер), цвет берётся из onAccent-токена.

Target

HTML-атрибут target: _self (дефолт, в той же вкладке), _blank (новая вкладка), _parent, _top — для iframe-сценариев.

Установка

pnpm add @cloud-ru/ds-link
import { Link } from '@cloud-ru/ds-link'

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

1. Простая ссылка

1. Простая ссылкаРендер как нативный a href target
tsx
import { Link } from '@cloud-ru/ds-link';

export function Basic() {
  return <Link label='Документация API' href='https://example.com/docs' />;
}

2. Внутри текста

2. Внутри текстаinsideText=true: строка может переноситься, TruncateString не применяется

Подробнее читайте

, а также ознакомьтесь с
условиями
.

tsx
import { Link } from '@cloud-ru/ds-link';

export function InsideText() {
  return (
    <p>
      Подробнее читайте <Link insideText label='в документации' href='https://example.com' />, а также ознакомьтесь с{' '}
      <Link insideText underlined label='условиями' href='https://example.com/terms' />.
    </p>
  );
}

3. Полиморфизм: кнопка

3. Полиморфизм: кнопкаas='button' — действие, семантически оформленное как ссылка
tsx
import { Link } from '@cloud-ru/ds-link';

export function Polymorphic() {
  return <Link as='button' type='button' label='Открыть диалог' onClick={() => alert('clicked')} />;
}

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

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

export function External() {
  return <Link label='Открыть в новой вкладке' href='https://example.com' target='_blank' />;
}

Props

Storybook

Figma