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

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

Панель запроса ответа человека вместо AI-поля ввода: заголовок, слот контента, раскрытие и кнопки действий.

原始使用文档
文档目录17 节
  1. Когда использовать
  2. Когда не нужен
  3. Анатомия
  4. Title
  5. Actions
  6. Appearance (default primary )
  7. Content slot
  8. Hint
  9. Loading
  10. Height
  11. Установка
  12. Примеры использования
  13. Default
  14. Destructive
  15. Expanded
  16. Loading
  17. Props

AiFieldRequest

@cloud-ru/ds-ai-field-request — Панель запроса ответа человека вместо AI-поля ввода: заголовок, слот контента, раскрытие и кнопки действий.

AiFieldRequest — обезличенная панель вместо AI-поля ввода, когда системе нужен ответ человека: заголовок, слот контента, раскрытие длинного текста и две кнопки действий.

Компонент не решает, когда появиться, не хранит ответ и не отправляет его — только показывает содержимое и сообщает о нажатии. Анимация замены поля ввода и Escape остаются на стороне чата.

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

  • Нужна панель подтверждения / опросника на месте AI-поля ввода.
  • Контент приходит снаружи (текст сейчас, форма или шаги опросника позже).

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

  • Инлайн-баннер подсказки у поля — @cloud-ru/ds-ai-field-banner / @cloud-ru/ds-ai-field-notice.
  • Модалка или drawer с произвольным футером — @cloud-ru/ds-modal / @cloud-ru/ds-drawer.

Анатомия

Title

title — вопрос к человеку. Заголовок строится по формуле «действие + тип объекта» и заканчивается знаком вопроса: «Удалить виртуальную машину?», «Добавить правило в группу безопасности?», «Остановить кластер?». Так человек с первой строки понимает, что именно подтверждает; подробности живут в content. Максимум две строки, дальше обрезка по последнему целому слову.

Actions

primaryAction и secondaryAction — объекты кнопок: label (подпись) и onClick (клик). У primaryAction есть ещё loading — состояние отправки. Оба пропса обязательны, подписи задаёт потребитель.

Appearance (default primary)

Цвет основной кнопки:

  • primary — зелёная filled-кнопка.
  • destructive — красная filled-кнопка (для удаления).

Вторичная кнопка всегда outline neutral. Подписи обеих кнопок задаёт потребитель.

Content slot

content — тело панели, любой ReactNode: сейчас текст, позже форма или шаги опросника. Поэтому предел свёрнутого состояния задаётся высотой maxHeight (по умолчанию 88 px), а не числом строк. Строка обрезается через TruncateString: число строк вычисляется из maxHeight с округлением вниз до целых строк, чтобы не резать глифы. Любое другое содержимое ограничивается по maxHeight как есть. Кнопка «Показать» появляется автоматически, если контент не влезает; «Скрыть» в раскрытом виде видна всегда. Подписи кнопки раскрытия — «Показать» / «Скрыть».

Hint

hint — подпись под карточкой. Не рендерится, если не задана.

Loading

primaryAction.loading — индикатор на основной кнопке, вторичная кнопка недоступна, повторный клик по основной отсекается; раскрытие описания остаётся доступным.

Height

Корень не выше родителя (max-height: 100%). Заголовок и футер с кнопками остаются на месте; в раскрытом виде скроллится только слот контента.

Установка

pnpm add @cloud-ru/ds-ai-field-request
import { AiFieldRequest } from '@cloud-ru/ds-ai-field-request';

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

Default

Свёрнутое состояние: длинный текст обрезан по maxHeight, кнопка «Показать» появилась сама

import { AiFieldRequest, APPEARANCE } from '@cloud-ru/ds-ai-field-request';

const CONTENT =
  'Виртуальная машина будет остановлена и удалена вместе с дисками. Снимки и резервные копии останутся доступны в хранилище, восстановить машину из них можно в любой момент.';

export function Default() {
  return (
    <AiFieldRequest
      title='Удалить виртуальную машину?'
      content={CONTENT}
      hint='Подсказка под панелью'
      appearance={APPEARANCE.Primary}
      primaryAction={{ label: 'Подтвердить' }}
      secondaryAction={{ label: 'Отмена' }}
    />
  );
}

Destructive

appearance="destructive" — красная основная кнопка

import { AiFieldRequest, APPEARANCE } from '@cloud-ru/ds-ai-field-request';

export function Destructive() {
  return (
    <AiFieldRequest
      title='Удалить виртуальную машину?'
      content='Диски будут удалены вместе с машиной. Операция необратима.'
      hint='Подсказка под панелью'
      appearance={APPEARANCE.Destructive}
      primaryAction={{ label: 'Удалить' }}
      secondaryAction={{ label: 'Отмена' }}
    />
  );
}

Expanded

Раскрытое состояние: содержимое целиком, кнопка «Скрыть»

import { AiFieldRequest, APPEARANCE } from '@cloud-ru/ds-ai-field-request';
import { useState } from 'react';

const CONTENT =
  'Виртуальная машина будет остановлена и удалена вместе с дисками. Снимки и резервные копии останутся доступны в хранилище, восстановить машину из них можно в любой момент. Сетевые интерфейсы и публичные адреса освободятся сразу после удаления.';

export function Expanded() {
  const [open, setOpen] = useState(true);

  return (
    <AiFieldRequest
      title='Удалить виртуальную машину?'
      content={CONTENT}
      hint='Подсказка под панелью'
      appearance={APPEARANCE.Primary}
      open={open}
      onOpenChange={setOpen}
      primaryAction={{ label: 'Подтвердить' }}
      secondaryAction={{ label: 'Отмена' }}
    />
  );
}

Loading

primaryAction.loading — индикатор на основной кнопке, вторичная кнопка недоступна

import { AiFieldRequest, APPEARANCE } from '@cloud-ru/ds-ai-field-request';

export function Loading() {
  return (
    <AiFieldRequest
      title='Удалить виртуальную машину?'
      content='Диски будут удалены вместе с машиной.'
      hint='Подсказка под панелью'
      appearance={APPEARANCE.Primary}
      primaryAction={{ label: 'Подтвердить', loading: true }}
      secondaryAction={{ label: 'Отмена' }}
    />
  );
}

Props

AiFieldRequestProps

PropTypeDefaultDescription
appearance"destructive" | "primary"primaryЦвет основной кнопки: primary или destructive. По умолчанию primary.
classNamestring—Доп. класс корня.
contentReactNode—Слот тела панели (текст, форма, опросник).
data-test-idstringai-field-request
hintReactNode—Подпись под карточкой. Не рендерится, если не задана.
maxHeightnumber88Максимальная высота свёрнутого содержимого в px. По умолчанию 88.
Слот принимает любой ReactNode, поэтому предел задаётся высотой, а не числом строк.
Для строкового content высота округляется вниз до целого числа строк, чтобы не резать глифы;
для любого другого содержимого это обычный предел по высоте.
onOpenChange((open: boolean) => void)—Колбэк смены раскрытия.
openboolean—Controlled — раскрыто содержимое. Без open компонент uncontrolled, стартует свёрнутым.
primaryActionAiFieldRequestAction | AiFieldRequestPrimaryAction—Основная кнопка действий: подпись, клик и состояние отправки. Обязательный пропс.
secondaryActionAiFieldRequestAction—Вторичная кнопка действий: подпись и клик. Обязательный пропс.
titleReactNode—Заголовок панели. Максимум две строки с обрезкой. Обязательный пропс.

AiFieldRequestAction

PropTypeDefaultDescription
labelstring—Подпись кнопки.
onClick((event: MouseEvent<HTMLButtonElement>) => void) | undefined—Клик по кнопке.

AiFieldRequestPrimaryAction

PropTypeDefaultDescription
labelstring—Подпись кнопки.
loadingboolean | undefined—Состояние отправки: индикатор на основной кнопке, вторичная кнопка недоступна.
Раскрытие содержимого остаётся доступным.
onClick((event: MouseEvent<HTMLButtonElement>) => void) | undefined—Клик по кнопке.
  • Appearance = "destructive" | "primary"

版本与发布记录

@cloud-ru/ds-ai-field-request 共发布 58 个版本,首次发布于 2026/09/10;过去 12 个月发布了 58 个版本。

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

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

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

Панель запроса ответа человека вместо AI-поля ввода: заголовок, слот контента, раскрытие и кнопки действий.

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

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

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

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

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

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

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

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

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

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

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

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