# @cloud-ru/ds-ai-field-request > Панель запроса ответа человека вместо AI-поля ввода: заголовок, слот контента, раскрытие и кнопки действий. Docs: /snack-v2/components/ai-field-request/ ## Установка ```sh pnpm add @cloud-ru/ds-ai-field-request ``` ## Когда использовать - Нужна панель подтверждения / опросника на месте AI-поля ввода. - Контент приходит снаружи (текст сейчас, форма или шаги опросника позже). ### Когда не нужен - Инлайн-баннер подсказки у поля — `@cloud-ru/ds-ai-field-banner` / `@cloud-ru/ds-ai-field-notice`. - Модалка или drawer с произвольным футером — `@cloud-ru/ds-modal` / `@cloud-ru/ds-drawer`. ## API ### AiFieldRequest | Prop | Type | Default | Required | Description | |------|------|---------|----------|-------------| | `appearance` | `destructive \| primary` | `primary` | no | Цвет основной кнопки: `primary` или `destructive`. По умолчанию `primary`. | | `className` | `string` | — | no | Доп. класс корня. | | `content` | `ReactNode` | — | no | Слот тела панели (текст, форма, опросник). | | `data-test-id` | `string` | `ai-field-request` | no | | | `hint` | `ReactNode` | — | no | Подпись под карточкой. Не рендерится, если не задана. | | `maxHeight` | `number` | `88` | no | Максимальная высота свёрнутого содержимого в px. По умолчанию `88`. Слот принимает любой ReactNode, поэтому предел задаётся высотой, а не числом строк. Для строкового `content` высота округляется вниз до целого числа строк, чтобы не резать глифы; для любого другого содержимого это обычный предел по высоте. | | `onOpenChange` | `((open: boolean) => void)` | — | no | Колбэк смены раскрытия. | | `open` | `boolean` | — | no | Controlled — раскрыто содержимое. Без `open` компонент uncontrolled, стартует свёрнутым. | | `primaryAction` | `AiFieldRequestPrimaryAction` | — | yes | Основная кнопка действий: подпись, клик и состояние отправки. Обязательный пропс. | | `secondaryAction` | `AiFieldRequestAction` | — | yes | Вторичная кнопка действий: подпись и клик. Обязательный пропс. | | `title` | `ReactNode` | — | yes | Заголовок панели. Максимум две строки с обрезкой. Обязательный пропс. | #### Related types - `AiFieldRequestAction` (interface) - `AiFieldRequestPrimaryAction` (interface) - `Appearance` = `destructive | primary` ## Примеры ### Default ```tsx import { AiFieldRequest, APPEARANCE } from '@cloud-ru/ds-ai-field-request'; const CONTENT = 'Виртуальная машина будет остановлена и удалена вместе с дисками. Снимки и резервные копии останутся доступны в хранилище, восстановить машину из них можно в любой момент.'; export function Default() { return ( ); } ``` ### Destructive ```tsx import { AiFieldRequest, APPEARANCE } from '@cloud-ru/ds-ai-field-request'; export function Destructive() { return ( ); } ``` ### Expanded ```tsx 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 ( ); } ``` ### Loading ```tsx import { AiFieldRequest, APPEARANCE } from '@cloud-ru/ds-ai-field-request'; export function Loading() { return ( ); } ```