Обзор
Компоненты
- 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
Ресурсы
Directory Card
Карточка каталога персонализации — иконка, имя, издатель, число установок, описание и действие.
job-search-ru
Oracul•1.2kПолный цикл поиска работы: анализ рынка, резюме, отклики, собеседования и переговоры по офферу.
summarize-pdf
Вы•86Саммари PDF, извлечение таблиц и перевод краткого содержания.
import { IconPlus, IconSettings } from "@tabler/icons-react";
import { Button } from "@/components/ui/button";
import { DirectoryCard } from "@/components/ui/directory-card";
export default function Particle() {
return (
<div className="grid w-full max-w-2xl grid-cols-1 gap-4 p-4 sm:grid-cols-2">
<DirectoryCard
action={
<Button aria-label="Открыть в личных" size="icon-sm" variant="ghost">
<IconSettings />
</Button>
}
description="Полный цикл поиска работы: анализ рынка, резюме, отклики, собеседования и переговоры по офферу."
installs={1240}
name="job-search-ru"
publisher="Oracul"
/>
<DirectoryCard
action={
<Button aria-label="Добавить навык" size="icon-sm" variant="ghost">
<IconPlus />
</Button>
}
description="Саммари PDF, извлечение таблиц и перевод краткого содержания."
installs={86}
name="summarize-pdf"
publisher="Вы"
/>
</div>
);
}
Коннекторы с рангом популярности
Передайте rank — карточка покажет бейдж «Самый популярный» (#1) или «#N популярный».
Mi
MiroСамый популярный
Miro•18.7kДоски, фреймы и стикеры прямо из чата.
No
Notion#2 популярный
Notion•15.2kСтраницы, базы данных и заметки.
import { IconPlus } from "@tabler/icons-react";
import { Button } from "@/components/ui/button";
import { DirectoryCard } from "@/components/ui/directory-card";
// Brand monogram tile — the app passes a real favicon; the demo uses initials.
function Brand({ children }: { children: string }) {
return (
<span className="font-semibold text-foreground text-xs">{children}</span>
);
}
/** Connector catalog cards — brand icon, install count and popularity rank. */
export default function Particle() {
return (
<div className="grid w-full max-w-2xl grid-cols-1 gap-4 p-4 sm:grid-cols-2">
<DirectoryCard
action={
<Button aria-label="Добавить Miro" size="icon-sm" variant="ghost">
<IconPlus />
</Button>
}
description="Доски, фреймы и стикеры прямо из чата."
icon={<Brand>Mi</Brand>}
installs={18700}
name="Miro"
publisher="Miro"
rank={1}
/>
<DirectoryCard
action={
<Button aria-label="Добавить Notion" size="icon-sm" variant="ghost">
<IconPlus />
</Button>
}
description="Страницы, базы данных и заметки."
icon={<Brand>No</Brand>}
installs={15200}
name="Notion"
publisher="Notion"
rank={2}
/>
</div>
);
}
Установка
pnpm dlx shadcn@latest add @oracul/directory-card
Использование
import { DirectoryCard } from "@/components/ui/directory-card";
import { Button } from "@/components/ui/button";
import { IconSettings } from "@tabler/icons-react";
<DirectoryCard
name="job-search-ru"
publisher="Oracul"
installs={1240}
description="Полный цикл поиска работы."
onOpen={() => {}}
action={
<Button aria-label="Открыть" size="icon-sm" variant="ghost">
<IconSettings />
</Button>
}
/>API
Презентационный (plain-props): данные + onOpen + узел action (приложение вешает установку / открытие). Число установок форматируется внутри.
| Prop | Тип | Описание |
|---|---|---|
name | ReactNode | Имя элемента каталога. |
icon | ReactNode | Бренд-иконка слева (для коннекторов; у навыков опускается). |
publisher | ReactNode | Издатель/источник. |
installs | number | Число установок (рендерится со значком загрузки). |
description | ReactNode | Описание (2 строки, line-clamp-2). |
action | ReactNode | Действие в правом верхнем углу (обычно ghost icon Button). |
onOpen | () => void | Клик по карточке. |
На этой странице