CardServiceInfo
Карточка сервиса с описанием: иконка + заголовок + описание + promo tag + кнопка «Избранное». Подробный вариант рядом с CardServiceLight.
Когда использовать
- Подробный режим списка сервисов (заголовок + описание).
- Когда
CardServiceLightслишком компактен и нужно показатьdescription.
Установка
pnpm add @cloud-ru/ds-uikit-product-card-predefined
import { CardServiceInfo } from '@cloud-ru/ds-uikit-product-card-predefined'
Примеры использования
Базовый пример
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { CardServiceInfo } from '@cloud-ru/ds-uikit-product-card-predefined';
export function Basic() {
return (
<CardServiceInfo
title='Мой сервис'
description='Краткое описание сервиса для подробного режима карточки.'
icon={<PlaceholderSVG size={24} />}
/>
);
}Promo tag
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { CardServiceInfo } from '@cloud-ru/ds-uikit-product-card-predefined';
export function WithPromoTag() {
return (
<CardServiceInfo
title='Мой сервис'
description='Краткое описание сервиса для подробного режима карточки.'
icon={<PlaceholderSVG size={24} />}
promoTag={{
variant: 'preview',
}}
/>
);
}Кнопка «Избранное» (always)
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { CardServiceInfo, VISIBILITY_STRATEGY } from '@cloud-ru/ds-uikit-product-card-predefined';
import { useState } from 'react';
export function WithFavorite() {
const [isFavorite, setIsFavorite] = useState(false);
return (
<CardServiceInfo
title='Мой сервис'
description='Краткое описание сервиса для подробного режима карточки.'
icon={<PlaceholderSVG size={24} />}
actionsVisibility={VISIBILITY_STRATEGY.always}
favorite={{
enabled: true,
checked: isFavorite,
onChange: setIsFavorite,
}}
/>
);
}Кнопка «Избранное» (hover)
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { CardServiceInfo, VISIBILITY_STRATEGY } from '@cloud-ru/ds-uikit-product-card-predefined';
export function WithFavoriteHover() {
return (
<CardServiceInfo
title='Мой сервис'
description='Краткое описание сервиса для подробного режима карточки.'
icon={<PlaceholderSVG size={24} />}
actionsVisibility={VISIBILITY_STRATEGY.hover}
favorite={{
enabled: true,
}}
/>
);
}Неактивное состояние
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { CardServiceInfo } from '@cloud-ru/ds-uikit-product-card-predefined';
export function Disabled() {
return (
<CardServiceInfo
title='Мой сервис'
description='Краткое описание сервиса для подробного режима карточки.'
icon={<PlaceholderSVG size={24} />}
disabled
/>
);
}Обработка клика
Кликов по карточке: 0
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { Typography } from '@cloud-ru/ds-typography';
import { CardServiceInfo } 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 }}>
<CardServiceInfo
title='Мой сервис'
description='Краткое описание сервиса для подробного режима карточки.'
icon={<PlaceholderSVG size={24} />}
onClick={() => setClicks(c => c + 1)}
/>
<Typography variant='body' size='m'>
Кликов по карточке: {clicks}
</Typography>
</div>
);
}Ссылка (polymorphic)
tsx
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { CardServiceInfo } from '@cloud-ru/ds-uikit-product-card-predefined';
export function PolymorphicLink() {
return (
<CardServiceInfo
as='a'
href='https://cloud.ru'
target='_blank'
title='Ссылка-сервис'
description='Карточка рендерится как якорь через as и href.'
icon={<PlaceholderSVG size={24} />}
/>
);
}Props
Types
Props
CardServiceInfoProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
actionsVisibility | "always" | "hover" | 'hover' | no | Формат отображения дополнительных действий: всегда или при наведении и фокусе |
as | ElementType | — | no | Полиморфный элемент: `'button'`, `'a'`, `{Link}` и т.д. |
className | string | — | no | CSS-класс корневого элемента |
data-test-id | string | — | no | Support prop для тестов |
description | string | — | yes | Описание сервиса |
disabled | boolean | — | no | Неактивное состояние |
expandable | { value: boolean; onClick(): void; } | — | no | Настройки кнопки раскрытия |
favorite | FavoriteProps | — | no | Настройки кнопки «Избранное». Keyboard: ArrowRight на карточке → Favorite → expand; ArrowLeft — в обратном порядке. |
icon | ReactElement<any, string | JSXElementConstructor<any>> | — | no | Иконка сервиса |
innerRef | any | — | no | Ref на реальный DOM-элемент / инстанс |
promoTag | CardPromoTagProps | — | no | Настройки promo tag. При отсутствии не отображается |
title | string | — | yes | Заголовок карточки |