@cloud-ru/ds-ai-field-banner

中文文档
2.1.2发布于 2026/11/12Apache-2.0TypeScriptESM + CJS近 30 天下载 2844

Инлайн-баннер для поля ввода с семантическим типом, иконкой, описанием и действием.

原始使用文档
文档目录19 节
  1. Когда использовать
  2. Когда не нужен
  3. Анатомия
  4. Variant
  5. Size (default s на desktop, m на mobile)
  6. Content
  7. Icon
  8. Action
  9. Close
  10. Bottom content
  11. Установка
  12. Примеры использования
  13. Default
  14. Variants
  15. Закрытие
  16. Mobile
  17. Bottom content
  18. Props
  19. Адаптивность

AiFieldBanner

@cloud-ru/ds-ai-field-banner — Инлайн-баннер для поля ввода с семантическим вариантом, иконкой, контентом и действием.

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

Ширину задаёт родитель (400px в макете — пример). Высота подстраивается под содержимое: при одной строке текста s — 40px, m — 48px; с нижним слотом 16px — 64px и 72px.

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

  • Подсказки и валидация у 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 (default s на desktop, m на mobile)

Размер (Figma: Mobile Off → s, Mobile On → m). Как размер выбирается на mobile — раздел «Адаптивность».

  • s — Field Banner: иконка 16, текст body/s, кнопка действия и крестик 24, промежутки 4.
  • m — Field Banner Mobile: иконка 24, текст body/m, кнопка действия и крестик 32, промежутки 8.

Content

Текст основной строки. Длинный текст переносится на две строки, дальше обрезается многоточием.

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 — обработчик клика.

Close

Крестик справа от кнопки действия (AiButtonClose: s для размера s, m для m). Показывается, когда передан onClose; убрать баннер решает потребитель. Крестик не зависит от варианта и не заменяет кнопку действия.

Bottom content

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

Установка

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

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

Default

Information с иконкой, описанием и действием

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

Все семантические варианты

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>
  );
}

Закрытие

Крестик скрывает баннер, состояние хранит родитель

import { AiFieldBanner, VARIANT } from '@cloud-ru/ds-ai-field-banner';
import { Button } from '@cloud-ru/ds-button';
import { PlaceholderSVG } from '@cloud-ru/ds-icons/interface/system';
import { useState } from 'react';

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

  if (!visible) {
    return <Button label='Показать баннер' onClick={() => setVisible(true)} />;
  }

  return (
    <AiFieldBanner
      variant={VARIANT.Information}
      content='Баннер закрывается крестиком'
      icon={<PlaceholderSVG />}
      onClose={() => setVisible(false)}
    />
  );
}

Mobile

Размер m — Field Banner Mobile

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

Дополнительный контент под основной строкой

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

AiFieldBannerProps

PropTypeDefaultDescription
actionLabelstring—Подпись кнопки действия справа. Кнопка не рендерится, если не задана.
bottomContentReactNode—Дополнительный слот под основной строкой. Не рендерится, если не задан.
classNamestring—Доп. класс корня.
contentReactNode—Текст или контент основной строки. Не рендерится, если не задан.
data-test-idstringai-field-banner
iconReactNode—Иконка слева от текста
layoutPresetsAiFieldBannerLayoutDefaults | LayoutPresets—Override mobile-дефолтов адаптива для этого инстанса (deep-merge поверх AI_FIELD_BANNER_LAYOUT_PRESETS).
Escape-hatch: обычно не нужен — DS-пресет применяется автоматически по AdaptiveProvider.
onActionClick((event: MouseEvent<HTMLButtonElement, MouseEvent>) => void)—Обработчик клика по кнопке действия.
onClose((event: MouseEvent<HTMLButtonElement, MouseEvent>) => void)—Нажатие на крестик. Крестик показывается, только если обработчик передан; убрать баннер решает потребитель.
size"m" | "s"—Размер на desktop: s — Field Banner, m — Field Banner Mobile. Высота по содержимому: при одной строке s 40, m 48.
На mobile размер задаёт пресет AI_FIELD_BANNER_LAYOUT_PRESETS (m); изменить его — через layoutPresets.
variant"agentic" | "critical" | "help" | "information" | "security" | "warning"informationСемантический вариант баннера (ось Variant в Figma). По умолчанию information.

AiFieldBannerLayoutDefaults

PropTypeDefaultDescription
size"m" | "s"—Размер на desktop: s — Field Banner, m — Field Banner Mobile. Высота по содержимому: при одной строке s 40, m 48.
На mobile размер задаёт пресет AI_FIELD_BANNER_LAYOUT_PRESETS (m); изменить его — через layoutPresets.
  • Size = "m" | "s"

  • Variant = "agentic" | "critical" | "help" | "information" | "security" | "warning"

Адаптивность

Размер баннера зависит от раскладки AdaptiveProvider. Обычный проп size задаёт размер на desktop, а на mobile действует пресет AI_FIELD_BANNER_LAYOUT_PRESETS:

Раскладкаsize без пропаsize с пропом
desktops (Field Banner)значение пропа
mobilem (Field Banner Mobile)m

Чтобы изменить размер на mobile, передайте layoutPresets={{ mobile: { size: 's' } }}. Пресет нужен потому, что макет задаёт отдельный мобильный баннер.

版本与发布记录

@cloud-ru/ds-ai-field-banner 共发布 83 个版本,首次发布于 2026/08/18;过去 12 个月发布了 83 个版本。

版本发布日期距今
2.1.2latest2026/11/12今天
2.1.12026/11/11今天
2.1.1-preview-e8fe6b56.0preview2026/11/111 天前
2.1.1-preview-c0e895ed.02026/11/111 天前
2.1.1-preview-90b10112.02026/11/111 天前
2.1.1-preview-fd7dd437.02026/11/101 天前

关于 @cloud-ru/ds-ai-field-banner 的常见问题

@cloud-ru/ds-ai-field-banner 是什么?

Инлайн-баннер для поля ввода с семантическим типом, иконкой, описанием и действием.

如何安装 @cloud-ru/ds-ai-field-banner?

在项目目录运行 npm install @cloud-ru/ds-ai-field-banner,或使用 pnpm add / yarn add / bun add。

@cloud-ru/ds-ai-field-banner 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cloud-ru/ds-ai-field-banner 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@cloud-ru/ds-ai-field-banner 可以商用吗?

@cloud-ru/ds-ai-field-banner 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cloud-ru/ds-ai-field-banner 的下载量有多少?

根据 npm 官方下载统计,@cloud-ru/ds-ai-field-banner 在 2026/10/10 – 2026/11/08 这 30 天内被下载 2,844 次,日均约 95 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cloud-ru/ds-ai-field-banner 还在维护吗?

最新版本 2.1.2 发布于 2026/11/12(今天);至今共发布 83 个版本,其中过去 12 个月发布了 83 个;首次发布于 2026/08/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。