AiToolSimple
Компактный инструмент AI-стриминга (Гига-помощник): иконка типа, имя и chevron в заголовке; в раскрытом состоянии — текстовое описание и контент (обычно бейджи ресурсов). В отличие от AiTool — без статус-точки, длительности и фона-карточки.
Когда использовать
- Готовый компактный вызов инструмента в Гига-помощнике.
- Пошаговый таймлайн: несколько
AiToolSimpleподряд сconnector.
Когда не нужен
- Полный инструмент со статусом и блоками запроса/ответа (VibeOps):
- используйте AiTool.
- Обычный контент-блок без семантики инструмента:
- используйте
@cloud-ru/ds-cardили типографику@cloud-ru/ds-typography.
- используйте
Анатомия
- Stepper — иконка типа (
icon) или, в состоянииloading, пульсирующийAiToolStatus; опциональная линия-коннектор (connector). - Header — имя (
name) и chevron-кнопка раскрытия (рендерится только когда естьdescriptionилиchildren). - Контент раскрытия — текстовое описание (
description) иchildren(обычно рядAiToolBadge, выкладывается с переносом).
State (default pending)
В состоянии loading тип инструмента ещё неизвестен, поэтому слева вместо иконки показывается пульсирующая точка AiToolStatus, а заголовок подсвечивается основным цветом текста. В остальных состояниях (pending / success / error) слева — иконка типа (icon). Раскрытие — controlled (opened + onToggle) либо uncontrolled (defaultOpened).
Установка
pnpm add @cloud-ru/ds-ai-tool
import { AiToolSimple } from '@cloud-ru/ds-ai-tool'
Примеры использования
Компактный инструмент с бейджами
search_documents
status_for_users
Запрашивает статусы пользователей и агрегирует результат.
users-serviceaudit-log
tsx
import { AI_TOOL_BADGE_TYPE, AI_TOOL_ICON_TYPE, AI_TOOL_STATUS_STATE, AiToolBadge, AiToolSimple } from '@cloud-ru/ds-ai-tool';
export function ToolSimpleBadges() {
return (
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
<AiToolSimple
name='search_documents'
icon={AI_TOOL_ICON_TYPE.Search}
connector
description='Ищет документы по запросу пользователя.'
>
<AiToolBadge badgeType={AI_TOOL_BADGE_TYPE.CloudRu} label='docs-service' />
<AiToolBadge badgeType={AI_TOOL_BADGE_TYPE.Other} label='search-index' />
</AiToolSimple>
<AiToolSimple
name='status_for_users'
icon={AI_TOOL_ICON_TYPE.Act}
state={AI_TOOL_STATUS_STATE.Loading}
defaultOpened
description='Запрашивает статусы пользователей и агрегирует результат.'
>
<AiToolBadge badgeType={AI_TOOL_BADGE_TYPE.CloudRu} label='users-service' />
<AiToolBadge badgeType={AI_TOOL_BADGE_TYPE.Other} label='audit-log' />
</AiToolSimple>
</div>
);
}Props
Types
Props
AiToolSimpleProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
children | ReactNode | — | no | Контент раскрытия под описанием — например, ряд `AiToolBadge` с задействованными ресурсами. Выкладывается в строку с переносом. |
className | string | — | no | Доп. класс корня. |
connector | boolean | false | no | Линия-коннектор к следующему инструменту в таймлайне. Линия выходит на 8px ниже корня — рассчитана на вертикальный список с `gap: 8px`. |
data-test-id | string | ai-tool-simple | no | |
defaultOpened | boolean | false | no | Начальное раскрытое состояние (uncontrolled). |
description | ReactNode | — | no | Текстовое описание под заголовком в раскрытом состоянии. |
icon | "act" | "read" | "reasoning" | "search" | "security" | "wait" | — | yes | Тип инструмента — глиф `AiToolIcon` слева от заголовка. |
name | ReactNode | — | yes | Имя инструмента — строка заголовка; в свёрнутом состоянии обрезается ellipsis. |
onToggle | ((opened: boolean) => void) | — | no | Переключение раскрытия. Получает новое значение `opened`. |
opened | boolean | — | no | Раскрытое состояние (controlled). Для uncontrolled-режима — `defaultOpened`. |
state | "error" | "loading" | "pending" | "success" | pending | no | Состояние выполнения. В `loading` тип инструмента ещё неизвестен, поэтому вместо иконки показывается пульсирующая точка `AiToolStatus`, а заголовок подсвечивается основным цветом текста. В остальных состояниях слева рендерится иконка типа (`icon`). |