AiFieldBanner

AiFieldBanner — компактный баннер под полем ввода из набора AI Components. Показывает подсказку, предупреждение или контекст действия с опциональной иконкой, кнопкой справа и дополнительным слотом снизу.

Мастер-ширина баннера — 400px. Размеры по Figma: s — 400×72, m — 400×84.

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

  • Подсказки и валидация у AI-полей (information, help, warning, critical).
  • Контекст безопасности или агентного сценария (security, agentic).
  • Дополнительный контент под основной строкой — ссылка, чип, короткий список (bottomContent).

Когда не нужен

  • Полноразмерный inline-alert в контенте страницы — используйте @cloud-ru/ds-alert.
  • Системный баннер по верхней кромке — используйте AlertTop из @cloud-ru/ds-alert.

Анатомия

Variant

Семантика фона (проп variant): information, security, help, agentic, warning, critical. Иконка не подставляется автоматически — передайте icon явно.

Size

Размер (Figma: Mobile Off → s, Mobile On → m).

  • s — 400×72, компактная типографика и иконка.
  • m — 400×84, увеличенные иконка, текст и кнопка действия.

Content

Основной текст основной строки. Поддерживает перенос на несколько строк (overflow-wrap). Слот скрыт, если не задан.

Icon

Опциональный ReactNode слева от контента. Без icon иконка не рендерится.

import { AiFieldBanner } from '@cloud-ru/ds-ai-field-banner'
import { PlaceholderSVG } from '@cloud-ru/ds-icons'

<AiFieldBanner icon={<PlaceholderSVG />} content='…' />

Action

Текстовая кнопка справа рендерится через AlertButton из @cloud-ru/ds-alert и использует его state layer (:hover, :focus-visible, :active). Рендерится только при actionLabel. onActionClick — обработчик клика.

Bottom content

bottomContent под основной строкой — произвольный контент. Слот скрыт, если не задан.

Установка

pnpm add @cloud-ru/ds-ai-field-banner
import { AiFieldBanner, SIZE, VARIANT } from '@cloud-ru/ds-ai-field-banner'

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

Default

DefaultInformation с иконкой, описанием и действием
Description
tsx
import { AiFieldBanner, VARIANT } from '@cloud-ru/ds-ai-field-banner';
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';

export function Default() {
  return (
    <AiFieldBanner
      variant={VARIANT.Information}
      content='Description'
      actionLabel='Label text'
      icon={<PlaceholderSVG />}
      onActionClick={() => undefined}
    />
  );
}

Variants

VariantsВсе семантические варианты
Description
Description
Description
Description
Description
Description
tsx
import { AiFieldBanner, VARIANT_ORDER } from '@cloud-ru/ds-ai-field-banner';
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';

const variants = VARIANT_ORDER;

export function Variants() {
  return (
    <div style={{ display: 'flex', flexDirection: 'column', gap: 12, maxWidth: 400 }}>
      {variants.map(variant => (
        <AiFieldBanner
          key={variant}
          variant={variant}
          content='Description'
          actionLabel='Label text'
          icon={<PlaceholderSVG />}
        />
      ))}
    </div>
  );
}

Mobile

MobileРазмер `m` (400×84)
Description
tsx
import { AiFieldBanner, SIZE, VARIANT } from '@cloud-ru/ds-ai-field-banner';
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';

export function Mobile() {
  return (
    <AiFieldBanner
      size={SIZE.M}
      variant={VARIANT.Agentic}
      content='Description'
      actionLabel='Label text'
      icon={<PlaceholderSVG />}
    />
  );
}

Bottom content

Bottom contentДополнительный контент под основной строкой
Description
Additional content
tsx
import { AiFieldBanner, VARIANT } from '@cloud-ru/ds-ai-field-banner';
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';

export function WithBottomContent() {
  return (
    <AiFieldBanner
      variant={VARIANT.Information}
      content='Description'
      bottomContent='Additional content'
      actionLabel='Label text'
      icon={<PlaceholderSVG />}
      onActionClick={() => undefined}
    />
  );
}

Props

Types

PropsAiFieldBannerProps
PropTypeDefaultRequiredDescription
actionLabelstring—noПодпись кнопки действия справа. Кнопка не рендерится, если не задана.
bottomContentReactNode—noДополнительный слот под основной строкой. Не рендерится, если не задан.
classNamestring—noДоп. класс корня.
contentReactNode—noТекст или контент основной строки. Не рендерится, если не задан.
data-test-idstringai-field-bannerno
iconReactNode—noИконка слева от текста
onActionClick((event: MouseEvent<HTMLButtonElement, MouseEvent>) => void)—noОбработчик клика по кнопке действия.
size"m" | "s"snoРазмер: без `bottomContent` — `s` 400×48, `m` 400×60; с ним — `s` 400×72, `m` 400×84.
variant"agentic" | "critical" | "help" | "information" | "security" | "warning"informationnoСемантический вариант баннера (ось `Variant` в Figma). По умолчанию `information`.

Unions

Types

AiFieldBannerProps

Unions

Storybook

Figma