- 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
- 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
Sheet
Выезжающая панель, открывающаяся со стороны экрана, на основе компонента dialog.
import { Button } from "@/components/ui/button";
import { Field, FieldLabel } from "@/components/ui/field";
import { Form } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import {
Sheet,
SheetClose,
SheetDescription,
SheetFooter,
SheetHeader,
SheetPanel,
SheetPopup,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet";
export default function Particle() {
return (
<Sheet>
<SheetTrigger render={<Button variant="outline" />}>
Открыть панель
</SheetTrigger>
<SheetPopup>
<SheetHeader>
<SheetTitle>Редактировать профиль</SheetTitle>
<SheetDescription>
Внесите изменения в профиль. Нажмите «Сохранить», когда закончите.
</SheetDescription>
</SheetHeader>
<Form className="contents">
<SheetPanel className="grid gap-4">
<Field>
<FieldLabel>Имя</FieldLabel>
<Input defaultValue="Маргарита Уэлш" type="text" />
</Field>
<Field>
<FieldLabel>Имя пользователя</FieldLabel>
<Input defaultValue="@maggie.welsh" type="text" />
</Field>
</SheetPanel>
<SheetFooter>
<SheetClose render={<Button variant="ghost" />}>Отмена</SheetClose>
<Button type="submit">Сохранить</Button>
</SheetFooter>
</Form>
</SheetPopup>
</Sheet>
);
}
Установка
pnpm dlx shadcn@latest add @oracul/sheet
Использование
import {
Sheet,
SheetContent,
SheetDescription,
SheetFooter,
SheetHeader,
SheetPanel,
SheetPopup,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet"<Sheet>
<SheetTrigger>Open</SheetTrigger>
<SheetPopup>
<SheetHeader>
<SheetTitle>Are you absolutely sure?</SheetTitle>
<SheetDescription>
This action cannot be undone. This will permanently delete your account
and remove your data from our servers.
</SheetDescription>
</SheetHeader>
<SheetPanel>Content</SheetPanel>
<SheetFooter>
<SheetClose>Close</SheetClose>
</SheetFooter>
</SheetPopup>
</Sheet>API
Sheet
Корневой компонент. Псевдоним для Dialog.Root из Base UI.
SheetTrigger
Кнопка-триггер, открывающая панель. Псевдоним для Dialog.Trigger из Base UI.
SheetPopup
Контейнер всплывающего окна, отображающий содержимое панели. Также экспортируется как SheetContent.
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
side | "right" | "left" | "top" | "bottom" | "right" | Управляет тем, с какой стороны экрана открывается панель |
variant | "default" | "inset" | "default" | Управляет стилем панели. inset добавляет отступы вокруг панели на десктопных экранах |
showCloseButton | boolean | true | Если true, отображает кнопку закрытия в правом верхнем углу |
closeProps | Dialog.Close.Props | - | Свойства, передаваемые внутренней кнопке закрытия; удобно для переопределения aria-label |
portalProps | Dialog.Portal.Props | - | Свойства, передаваемые внутреннему порталу (keepMounted, container и т. д.); см. API портала Dialog в Base UI |
Пример:
// Right side sheet (default)
<SheetPopup side="right">
...
</SheetPopup>
// Left side sheet
<SheetPopup side="left">
...
</SheetPopup>
// Top sheet
<SheetPopup side="top">
...
</SheetPopup>
// Bottom sheet
<SheetPopup side="bottom">
...
</SheetPopup>
// Sheet with inset variant
<SheetPopup side="right" variant="inset">
...
</SheetPopup>SheetHeader
Контейнер для заголовка и описания панели. Поддерживает свойство render для полиморфной композиции (например, render={<Link href="/" />}).
SheetFooter
Секция футера для кнопок действий. Поддерживает свойство render для полиморфной композиции.
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
variant | "default" | "bare" | "default" | Управляет стилизацией футера. default включает границу и фон, bare убирает их |
SheetTitle
Компонент заголовка. Псевдоним для Dialog.Title из Base UI.
SheetDescription
Компонент описания. Псевдоним для Dialog.Description из Base UI.
SheetPanel
Прокручиваемый контейнер содержимого. Автоматически оборачивает содержимое в компонент ScrollArea. Поддерживает свойство render для полиморфной композиции.
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
scrollFade | boolean | true | Если true, показывает эффект затухания у краёв прокрутки |
Пример:
<SheetPanel>
{/* Long content that will scroll if it exceeds the sheet height */}
<div>...</div>
</SheetPanel>SheetClose
Компонент кнопки закрытия. Псевдоним для Dialog.Close из Base UI.
SheetPortal
Компонент портала для рендеринга вне иерархии DOM. Псевдоним для Dialog.Portal из Base UI.
SheetBackdrop
Компонент фона/подложки. Также экспортируется как SheetOverlay. Псевдоним для Dialog.Backdrop из Base UI.
Примеры
Панель с отступами (inset)
import { Button } from "@/components/ui/button";
import { Field, FieldLabel } from "@/components/ui/field";
import { Form } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import {
Sheet,
SheetClose,
SheetDescription,
SheetFooter,
SheetHeader,
SheetPanel,
SheetPopup,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet";
export default function Particle() {
return (
<Sheet>
<SheetTrigger render={<Button variant="outline" />}>
Открыть панель
</SheetTrigger>
<SheetPopup variant="inset">
<SheetHeader>
<SheetTitle>Редактировать профиль</SheetTitle>
<SheetDescription>
Внесите изменения в профиль. Нажмите «Сохранить», когда закончите.
</SheetDescription>
</SheetHeader>
<Form className="contents">
<SheetPanel className="grid gap-4">
<Field>
<FieldLabel>Имя</FieldLabel>
<Input defaultValue="Маргарита Уэлш" type="text" />
</Field>
<Field>
<FieldLabel>Имя пользователя</FieldLabel>
<Input defaultValue="@maggie.welsh" type="text" />
</Field>
</SheetPanel>
<SheetFooter>
<SheetClose render={<Button variant="ghost" />}>Отмена</SheetClose>
<Button type="submit">Сохранить</Button>
</SheetFooter>
</Form>
</SheetPopup>
</Sheet>
);
}
Боковые панели
import { Button } from "@/components/ui/button";
import {
Sheet,
SheetDescription,
SheetHeader,
SheetPanel,
SheetPopup,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet";
export default function Particle() {
return (
<div className="flex flex-wrap gap-2">
<Sheet>
<SheetTrigger render={<Button variant="outline" />}>
Открыть справа
</SheetTrigger>
<SheetPopup showCloseButton={false}>
<SheetHeader>
<SheetTitle>Справа</SheetTitle>
<SheetDescription>Правая сторона экрана.</SheetDescription>
</SheetHeader>
<SheetPanel>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</SheetPanel>
</SheetPopup>
</Sheet>
<Sheet>
<SheetTrigger render={<Button variant="outline" />}>
Открыть слева
</SheetTrigger>
<SheetPopup showCloseButton={false} side="left">
<SheetHeader>
<SheetTitle>Слева</SheetTitle>
<SheetDescription>Левая сторона экрана.</SheetDescription>
</SheetHeader>
<SheetPanel>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</SheetPanel>
</SheetPopup>
</Sheet>
<Sheet>
<SheetTrigger render={<Button variant="outline" />}>
Открыть сверху
</SheetTrigger>
<SheetPopup showCloseButton={false} side="top">
<SheetHeader>
<SheetTitle>Сверху</SheetTitle>
<SheetDescription>Верхняя часть экрана.</SheetDescription>
</SheetHeader>
<SheetPanel>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</SheetPanel>
</SheetPopup>
</Sheet>
<Sheet>
<SheetTrigger render={<Button variant="outline" />}>
Открыть снизу
</SheetTrigger>
<SheetPopup showCloseButton={false} side="bottom">
<SheetHeader>
<SheetTitle>Снизу</SheetTitle>
<SheetDescription>Нижняя часть экрана.</SheetDescription>
</SheetHeader>
<SheetPanel>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</SheetPanel>
</SheetPopup>
</Sheet>
</div>
);
}