Обзор
Компоненты
- Accordion
- Alert
- Alert Dialog
- Autocomplete
- Auth Surface
- Avatar
- Badge
- Browse Catalog Dialog
- Button
- Card
- Checkbox
- Checkbox Group
- Collapsible
- Combobox
- Command
- Connector Setup Dialog
- Cookie Banner
- Dialog
- Directory Card
- Directory Detail
- Directory Skeleton
- DrawerНовое
- Token Parts Input
- Empty
- Field
- Fieldset
- File Preview Modal
- File Preview Skeleton
- Form
- Frame
- Group
- Icon
- Input
- Input Group
- Kbd
- Label
- Legal Shell
- Menu
- Mermaid Diagram
- Mind Map Diagram
- Not Found Screen
- Onboarding Frame
- Popover
- PDF Thumbnail
- Personalization Landing
- Preview Card
- Pricing Page
- Progress
- Radio Group
- Ring Spinner
- Scroll Area
- Select
- Separator
- Settings Page
- Settings Skills
- Settings Connectors
- Settings Capabilities
- Settings Usage
- Settings Account
- Settings Billing
- Sheet
- Sidebar
- Skeleton
- Skill Create Dialog
- Slider
- Spinner
- Stat
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Tooltip
AI-компоненты
- Компоненты AI
- Chat Conversation
- Chat Message
- Chat Response
- Chat Suggestion
- Chat Prompt Input
- Slash Highlighted Textarea
- Chat Search Dialog
- Chat Skill Doc
- Chat Connector Detail
- Chat Attachments
- Chat File Card
- Chat Token Chip
- Chat Code Block
- Chat Image
- Chat Inline Citation
- Chat Sources
- Chat Web Search
- Chat Research
- Chat Source
- Chat Actions
- Chat Context
- Chat Loader
- Chat Compaction
- Chat Timeline
- Chat Snippet
- Chat Terminal
- Chat Stack Trace
- Chat Test Results
- Chat File Tree
- Chat Environment Variables
- Chat Audio Player
- Chat Transcription
- Chat Speech Input
- Chat Mic Selector
- Chat Voice Selector
- Chat Agent
- Chat Persona
- Chat Connection
- Chat Connector Suggestion
- Chat Queue
- Chat Checkpoint
- Chat Confirmation
- Chat Artifact
- Chat JSX Preview
- Chat Schema Display
- Chat Package Info
- Chat Commit
- Chat Plan
- Chat Open In Chat
- Chat Sandbox
- Chat Model Selector
- Chat Canvas
- Chat Node
- Chat Edge
Ресурсы
Chat Connector Detail
Модалка коннектора — два состояния (не подключён / подключён) и «Права инструментов» с политикой групп и пер-tool allow/ask/deny.
ЯЯндекс Диск (OAuth)
Файлы и папки на Яндекс Диске со входом через Яндекс (OAuth). Как у Miro: нажми «Подключить», подтверди доступ в окне Яндекса.
Права инструментов
Выберите, когда Oracul может использовать эти инструменты.
yadisk_disk_info
Get general information about the user's Yandex Disk (quota, usage).
yadisk_get_download_link
Get a direct download URL for a file on Yandex Disk.
yadisk_list
List files and folders on Yandex Disk at the given path.
yadisk_publish
Publish a file or folder on Yandex Disk and return its public link.
yadisk_upload
Upload a file to Yandex Disk.
"use client";
import { useState } from "react";
import { Button } from "@/components/ui/button";
import {
ChatConnectorDetail,
type ConnectorToolGroup,
type ConnectorToolPerm,
} from "@/components/ui/chat-connector-detail";
import { MenuItem } from "@/components/ui/menu";
const INITIAL: ConnectorToolGroup[] = [
{
id: "read",
label: "Только чтение",
tools: [
{
name: "yadisk_disk_info",
perm: "allow",
description:
"Get general information about the user's Yandex Disk (quota, usage).",
},
{
name: "yadisk_get_download_link",
perm: "allow",
description: "Get a direct download URL for a file on Yandex Disk.",
},
{
name: "yadisk_list",
perm: "allow",
description: "List files and folders on Yandex Disk at the given path.",
},
],
},
{
id: "write",
label: "Запись / удаление",
tools: [
{
name: "yadisk_publish",
perm: "approval",
description:
"Publish a file or folder on Yandex Disk and return its public link.",
},
{
name: "yadisk_upload",
perm: "approval",
description: "Upload a file to Yandex Disk.",
},
],
},
];
const Icon = (
<span className="flex size-full items-center justify-center bg-[oklch(0.62_0.19_27)] font-semibold text-white text-xs">
Я
</span>
);
export default function Particle() {
const [connected, setConnected] = useState(true);
const [groups, setGroups] = useState(INITIAL);
const setToolPerm = (
groupId: string,
toolName: string,
perm: ConnectorToolPerm,
) =>
setGroups((gs) =>
gs.map((g) =>
g.id === groupId
? {
...g,
tools: g.tools.map((t) =>
t.name === toolName ? { ...t, perm } : t,
),
}
: g,
),
);
const setGroupPolicy = (
groupId: string,
perm: ConnectorToolPerm | "custom",
) =>
setGroups((gs) =>
gs.map((g) =>
g.id === groupId && perm !== "custom"
? { ...g, tools: g.tools.map((t) => ({ ...t, perm })) }
: g,
),
);
return (
<div className="flex w-full max-w-160 flex-col gap-3">
<Button
className="self-start"
onClick={() => setConnected((v) => !v)}
size="sm"
variant="outline"
>
{connected ? "Показать «не подключён»" : "Показать «подключён»"}
</Button>
<div className="h-140 overflow-hidden rounded-xl border bg-popover shadow-lg/5">
<ChatConnectorDetail
connected={connected}
description="Файлы и папки на Яндекс Диске со входом через Яндекс (OAuth). Как у Miro: нажми «Подключить», подтверди доступ в окне Яндекса."
groups={groups}
icon={Icon}
menu={
<>
<MenuItem>Подробности</MenuItem>
<MenuItem>Обновить список инструментов</MenuItem>
<MenuItem variant="destructive">Удалить</MenuItem>
</>
}
name="Яндекс Диск (OAuth)"
onClose={() => {}}
onConnect={() => setConnected(true)}
onDisconnect={() => setConnected(false)}
onGroupPolicyChange={setGroupPolicy}
onToolPermChange={setToolPerm}
/>
</div>
</div>
);
}
Установка
pnpm dlx shadcn@latest add @oracul/chat-connector-detail
Использование
import {
ChatConnectorDetail,
type ConnectorToolGroup,
} from "@/components/ui/chat-connector-detail";
import { MenuItem } from "@/components/ui/menu";
<ChatConnectorDetail
name="Яндекс Диск (OAuth)"
icon={<img src={favicon} alt="" />}
description="Файлы и папки на Яндекс Диске…"
connected
groups={groups}
menu={
<>
<MenuItem>Подробности</MenuItem>
<MenuItem>Обновить список инструментов</MenuItem>
<MenuItem variant="destructive">Удалить</MenuItem>
</>
}
onConnect={connect}
onDisconnect={disconnect}
onClose={close}
onGroupPolicyChange={(groupId, perm) => {}}
onToolPermChange={(groupId, toolName, perm) => {}}
/>Это контент модалки коннектора (открывается по клику на @connector-токен). Не подключён → лого + «Ты ещё не подключён к X» + «Подключить». Подключён → «Отключить» + ⋮-меню + «Права инструментов»: сворачиваемые группы с политикой (Всегда разрешать / Требует подтверждения / Заблокировано / Настроенный) и пер-tool пилюлей allow/ask/deny.
API
| Prop | Тип | Описание |
|---|---|---|
name | ReactNode | Имя коннектора. |
icon | ReactNode | Бренд-иконка. |
description | ReactNode | Описание (подключённое состояние). |
connected | boolean | Переключает состояние модалки. |
groups | ConnectorToolGroup[] | Группы инструментов с правами. |
menu | ReactNode | Пункты ⋮-меню (MenuItem). |
connectLabel | ReactNode | Подпись кнопки подключения. |
onConnect / onDisconnect / onClose | () => void | Действия. |
onGroupPolicyChange | (groupId, perm) => void | Политика группы. |
onToolPermChange | (groupId, toolName, perm) => void | Право инструмента. |
На этой странице