CardSuggest

Карточка-подсказка с двумя размерами (m/s), управляющими типографикой и отступами.

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

  • Подсказки и onboarding-карточки в интерфейсе.
  • Компактные информационные блоки с заголовком и описанием.

Установка

pnpm add @cloud-ru/ds-uikit-product-card-predefined
import { CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined'

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

Базовый пример

Базовый примерКарточка-подсказка с заголовком и описанием (size="m").

Подсказка для пользователя

Краткое описание действия или функциональности

tsx
import { CARD_SIZE, CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined';

export function Basic() {
  return (
    <CardSuggest
      title='Подсказка для пользователя'
      content='Краткое описание действия или функциональности'
      size={CARD_SIZE.M}
    />
  );
}

Размер s

Размер ssize="s" уменьшает типографику и отступы.

Подсказка для пользователя

Краткое описание действия или функциональности

tsx
import { CARD_SIZE, CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined';

export function SizeSmall() {
  return (
    <CardSuggest
      title='Подсказка для пользователя'
      content='Краткое описание действия или функциональности'
      size={CARD_SIZE.S}
    />
  );
}

Promo badge

Promo badgeЧерез promoBadge под описанием отображается промо-бейдж.
New

Подсказка для пользователя

Краткое описание действия или функциональности

tsx
import { APPEARANCE, ROLE_APPEARANCE, SIZE } from '@cloud-ru/ds-promo-tag';
import { CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined';

export function WithPromoTag() {
  return (
    <CardSuggest
      title='Подсказка для пользователя'
      content='Краткое описание действия или функциональности'
      promoBadge={{
        label: 'New',
        appearance: APPEARANCE.Primary,
        role: ROLE_APPEARANCE.Accent,
        size: SIZE.Xs,
      }}
    />
  );
}

Обрезка текста

Обрезка текстаtruncate.title и truncate.description ограничивают число строк через TruncateString.

Очень длинный заголовок подсказки, который не помещается в две строки и обрезается через TruncateString

Очень длинное описание подсказки, которое не помещается в три строки и обрезается через TruncateString. Дополнительный текст для демонстрации обрезки.

tsx
import { CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined';

const longTitle =
  'Очень длинный заголовок подсказки, который не помещается в две строки и обрезается через TruncateString';
const longDescription =
  'Очень длинное описание подсказки, которое не помещается в три строки и обрезается через TruncateString. Дополнительный текст для демонстрации обрезки.';

export function WithTruncate() {
  return (
    <div style={{ maxWidth: 320 }}>
      <CardSuggest title={longTitle} content={longDescription} truncate={{ title: 2, content: 3 }} />
    </div>
  );
}

Неактивное состояние

Неактивное состояниеdisabled блокирует взаимодействие с карточкой.

Подсказка для пользователя

Краткое описание действия или функциональности

tsx
import { CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined';

export function Disabled() {
  return (
    <CardSuggest title='Подсказка для пользователя' content='Краткое описание действия или функциональности' disabled />
  );
}

Обработка клика

Обработка кликаonClick передаётся в корневой Card — карточка интерактивна по умолчанию.

Подсказка для пользователя

Краткое описание действия или функциональности

Кликов по карточке: 0

tsx
import { Typography } from '@cloud-ru/ds-typography';
import { CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined';
import { useState } from 'react';

export function WithOnClick() {
  const [clicks, setClicks] = useState(0);

  return (
    <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
      <CardSuggest
        title='Подсказка для пользователя'
        content='Краткое описание действия или функциональности'
        onClick={() => setClicks(c => c + 1)}
      />

      <Typography variant='body' size='m'>
        Кликов по карточке: {clicks}
      </Typography>
    </div>
  );
}

Ссылка (polymorphic)

Ссылка (polymorphic)Через as и href карточка рендерится как якорь.
tsx
import { CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined';

export function PolymorphicLink() {
  return (
    <CardSuggest
      as='a'
      href='https://cloud.ru'
      target='_blank'
      title='Подсказка-ссылка'
      content='Это якорный элемент'
    />
  );
}

Props

Types

PropsCardSuggestProps
PropTypeDefaultRequiredDescription
asElementTypenoПолиморфный элемент: `'div'`, `'a'`, `{Link}` и т.д.
classNamestringnoCSS-класс корневого элемента
contentstringyesОписание
data-test-idstringnoSupport prop для тестов
disabledbooleannoНеактивное состояние
innerRefanynoRef на реальный DOM-элемент / инстанс
promoBadgePromoTagPropsnoПромо-тег. Используйте `PromoTagProps` из `@cloud-ru/ds-promo-tag`.
size"m" | "s"mnoРазмер: управляет типографикой и отступами. `'m'` — roleTitle/m + roleBody/m, padding 16px; `'s'` — roleTitle/s + roleBody/s, padding 8px.
titlestringyesЗаголовок
truncate{ title?: number; content?: number; } | undefinednoНастройки обрезки текста

Unions

Types

CardSuggestProps

Unions

Storybook

Figma