CardSuggest
Карточка-подсказка с двумя размерами (m/s), управляющими типографикой и отступами.
Когда использовать
- Подсказки и onboarding-карточки в интерфейсе.
- Компактные информационные блоки с заголовком и описанием.
Установка
pnpm add @cloud-ru/ds-uikit-product-card-predefined
import { CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined'
Примеры использования
Базовый пример
Подсказка для пользователя
Краткое описание действия или функциональности
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
Подсказка для пользователя
Краткое описание действия или функциональности
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
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,
}}
/>
);
}Обрезка текста
Очень длинный заголовок подсказки, который не помещается в две строки и обрезается через 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>
);
}Неактивное состояние
Подсказка для пользователя
Краткое описание действия или функциональности
tsx
import { CardSuggest } from '@cloud-ru/ds-uikit-product-card-predefined';
export function Disabled() {
return (
<CardSuggest title='Подсказка для пользователя' content='Краткое описание действия или функциональности' disabled />
);
}Обработка клика
Подсказка для пользователя
Краткое описание действия или функциональности
Кликов по карточке: 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)
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
Props
CardSuggestProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
as | ElementType | — | no | Полиморфный элемент: `'div'`, `'a'`, `{Link}` и т.д. |
className | string | — | no | CSS-класс корневого элемента |
content | string | — | yes | Описание |
data-test-id | string | — | no | Support prop для тестов |
disabled | boolean | — | no | Неактивное состояние |
innerRef | any | — | no | Ref на реальный DOM-элемент / инстанс |
promoBadge | PromoTagProps | — | no | Промо-тег. Используйте `PromoTagProps` из `@cloud-ru/ds-promo-tag`. |
size | "m" | "s" | m | no | Размер: управляет типографикой и отступами. `'m'` — roleTitle/m + roleBody/m, padding 16px; `'s'` — roleTitle/s + roleBody/s, padding 8px. |
title | string | — | yes | Заголовок |
truncate | { title?: number; content?: number; } | undefined | — | no | Настройки обрезки текста |