CardBanner

Промо-баннер с заголовком, описанием, CTA-ссылкой и изображением. Поддерживает опциональную кнопку закрытия.

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

  • Промо-блоки на главной или в каталоге сервисов.
  • Баннер с иллюстрацией и одним основным действием.

Установка

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

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

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

Базовый примерИллюстрация 96×96 справа от текстового блока.

Заголовок карточки

Краткое описание сервиса или предложения для пользователя

Подробнее
Иллюстрация сервиса
tsx
import { CardBanner } from '@cloud-ru/ds-uikit-product-card-predefined';

import illustrationSrc from '../assets/card-banner-illustration.jpg?url';

export function Basic() {
  return (
    <CardBanner
      title='Заголовок карточки'
      content='Краткое описание сервиса или предложения для пользователя'
      actionLabel='Подробнее'
      image={{ src: illustrationSrc, alt: 'Иллюстрация сервиса' }}
    />
  );
}

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

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

Заголовок карточки

Клик по карточке обрабатывается через onClick

Подробнее
Иллюстрация сервиса

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

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

import illustrationSrc from '../assets/card-banner-illustration.jpg?url';

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

  return (
    <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>
      <CardBanner
        title='Заголовок карточки'
        content='Клик по карточке обрабатывается через onClick'
        actionLabel='Подробнее'
        image={{ src: illustrationSrc, alt: 'Иллюстрация сервиса' }}
        onClick={() => setClicks(c => c + 1)}
      />

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

Закрываемый баннер

Закрываемый баннерПри передаче onClose в углу появляется кнопка закрытия; клик по ней не всплывает на карточку.

Заголовок карточки

Кнопка закрытия появляется при передаче onClose

Подробнее
Иллюстрация сервиса
tsx
import { Typography } from '@cloud-ru/ds-typography';
import { CardBanner } from '@cloud-ru/ds-uikit-product-card-predefined';
import { useState } from 'react';

import illustrationSrc from '../assets/card-banner-illustration.jpg?url';

export function WithClose() {
  const [visible, setVisible] = useState(true);

  if (!visible) {
    return (
      <Typography variant='body' size='m'>
        Баннер закрыт
      </Typography>
    );
  }

  return (
    <CardBanner
      title='Заголовок карточки'
      content='Кнопка закрытия появляется при передаче onClose'
      actionLabel='Подробнее'
      image={{ src: illustrationSrc, alt: 'Иллюстрация сервиса' }}
      onClose={() => setVisible(false)}
    />
  );
}

Ссылка (polymorphic)

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

import illustrationSrc from '../assets/card-banner-illustration.jpg?url';

export function PolymorphicLink() {
  return (
    <CardBanner
      as='a'
      href='https://cloud.ru'
      target='_blank'
      title='Перейти на сайт'
      content='Откроется в новой вкладке'
      actionLabel='Подробнее'
      image={{ src: illustrationSrc, alt: 'Иллюстрация сервиса' }}
    />
  );
}

Props

Types

PropsCardBannerProps
PropTypeDefaultRequiredDescription
actionLabelstringyesТекст кнопки действия
asElementTypenoПолиморфный элемент: `'div'`, `'a'`, `{Link}` и т.д.
classNamestringnoCSS-класс корневого элемента
contentstringyesОписание
data-test-idstringnoSupport prop для тестов
disabledbooleannoНеактивное состояние
image{ src: string; alt: string; }yesИзображение
innerRefanynoRef на реальный DOM-элемент / инстанс
onCloseMouseEventHandler<HTMLElement>noКолбэк закрытия. При наличии отображается кнопка «Закрыть»
titlestringyesЗаголовок карточки

Types

CardBannerProps

Storybook

Figma