@neynar/ui 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/context7.json +17 -0
- package/llm/components/accordion.llm.md +205 -0
- package/llm/components/alert-dialog.llm.md +289 -0
- package/llm/components/alert.llm.md +310 -0
- package/llm/components/aspect-ratio.llm.md +110 -0
- package/llm/components/avatar.llm.md +282 -0
- package/llm/components/badge.llm.md +185 -0
- package/llm/components/blockquote.llm.md +86 -0
- package/llm/components/breadcrumb.llm.md +245 -0
- package/llm/components/button-group.llm.md +248 -0
- package/llm/components/button.llm.md +247 -0
- package/llm/components/calendar.llm.md +252 -0
- package/llm/components/card.llm.md +356 -0
- package/llm/components/carousel.llm.md +281 -0
- package/llm/components/chart.llm.md +278 -0
- package/llm/components/checkbox.llm.md +234 -0
- package/llm/components/code.llm.md +75 -0
- package/llm/components/collapsible.llm.md +271 -0
- package/llm/components/color-mode.llm.md +196 -0
- package/llm/components/combobox.llm.md +346 -0
- package/llm/components/command.llm.md +353 -0
- package/llm/components/context-menu.llm.md +368 -0
- package/llm/components/dialog.llm.md +283 -0
- package/llm/components/drawer.llm.md +326 -0
- package/llm/components/dropdown-menu.llm.md +404 -0
- package/llm/components/empty.llm.md +282 -0
- package/llm/components/field.llm.md +303 -0
- package/llm/components/first-light.llm.md +129 -0
- package/llm/components/hover-card.llm.md +278 -0
- package/llm/components/input-group.llm.md +334 -0
- package/llm/components/input-otp.llm.md +270 -0
- package/llm/components/input.llm.md +197 -0
- package/llm/components/item.llm.md +347 -0
- package/llm/components/kbd.llm.md +221 -0
- package/llm/components/label.llm.md +219 -0
- package/llm/components/menubar.llm.md +378 -0
- package/llm/components/navigation-menu.llm.md +320 -0
- package/llm/components/pagination.llm.md +337 -0
- package/llm/components/popover.llm.md +278 -0
- package/llm/components/progress.llm.md +259 -0
- package/llm/components/radio-group.llm.md +269 -0
- package/llm/components/resizable.llm.md +222 -0
- package/llm/components/scroll-area.llm.md +290 -0
- package/llm/components/select.llm.md +338 -0
- package/llm/components/separator.llm.md +129 -0
- package/llm/components/sheet.llm.md +275 -0
- package/llm/components/sidebar.llm.md +528 -0
- package/llm/components/skeleton.llm.md +140 -0
- package/llm/components/slider.llm.md +213 -0
- package/llm/components/sonner.llm.md +299 -0
- package/llm/components/spinner.llm.md +187 -0
- package/llm/components/switch.llm.md +258 -0
- package/llm/components/table.llm.md +334 -0
- package/llm/components/tabs.llm.md +245 -0
- package/llm/components/text.llm.md +108 -0
- package/llm/components/textarea.llm.md +236 -0
- package/llm/components/title.llm.md +88 -0
- package/llm/components/toggle-group.llm.md +228 -0
- package/llm/components/toggle.llm.md +235 -0
- package/llm/components/tooltip.llm.md +191 -0
- package/llm/contributing.llm.md +273 -0
- package/llm/hooks.llm.md +91 -0
- package/llm/index.llm.md +178 -0
- package/llm/theming.llm.md +381 -0
- package/llm/utilities.llm.md +97 -0
- package/llms-full.txt +15995 -0
- package/llms.txt +182 -0
- package/package.json +5 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# Sheet
|
|
2
|
+
|
|
3
|
+
Slide-in panels that overlay the page from any edge, ideal for mobile navigation, filters, and contextual content.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
Sheet,
|
|
10
|
+
SheetTrigger,
|
|
11
|
+
SheetContent,
|
|
12
|
+
SheetHeader,
|
|
13
|
+
SheetFooter,
|
|
14
|
+
SheetTitle,
|
|
15
|
+
SheetDescription,
|
|
16
|
+
SheetClose,
|
|
17
|
+
} from "@neynar/ui/sheet"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Anatomy
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
<Sheet>
|
|
24
|
+
<SheetTrigger />
|
|
25
|
+
<SheetContent>
|
|
26
|
+
<SheetHeader>
|
|
27
|
+
<SheetTitle />
|
|
28
|
+
<SheetDescription />
|
|
29
|
+
</SheetHeader>
|
|
30
|
+
{/* Content */}
|
|
31
|
+
<SheetFooter>
|
|
32
|
+
<SheetClose />
|
|
33
|
+
</SheetFooter>
|
|
34
|
+
</SheetContent>
|
|
35
|
+
</Sheet>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Components
|
|
39
|
+
|
|
40
|
+
| Component | Description |
|
|
41
|
+
|-----------|-------------|
|
|
42
|
+
| Sheet | Root container, manages open/closed state |
|
|
43
|
+
| SheetTrigger | Button that opens the sheet |
|
|
44
|
+
| SheetContent | Main panel with automatic portal, overlay, and animations |
|
|
45
|
+
| SheetHeader | Header section for title and description |
|
|
46
|
+
| SheetFooter | Footer section for action buttons (auto-sticks to bottom) |
|
|
47
|
+
| SheetTitle | Accessible title (linked to sheet for screen readers) |
|
|
48
|
+
| SheetDescription | Accessible description (provides context) |
|
|
49
|
+
| SheetClose | Button that closes the sheet |
|
|
50
|
+
|
|
51
|
+
## Props
|
|
52
|
+
|
|
53
|
+
### Sheet
|
|
54
|
+
|
|
55
|
+
| Prop | Type | Default | Description |
|
|
56
|
+
|------|------|---------|-------------|
|
|
57
|
+
| open | boolean | - | Controlled open state |
|
|
58
|
+
| defaultOpen | boolean | - | Uncontrolled default open state |
|
|
59
|
+
| onOpenChange | (open: boolean) => void | - | Callback when open state changes |
|
|
60
|
+
| modal | boolean | true | Whether to block interaction with page content |
|
|
61
|
+
|
|
62
|
+
### SheetContent
|
|
63
|
+
|
|
64
|
+
Automatically renders in a portal with overlay backdrop.
|
|
65
|
+
|
|
66
|
+
| Prop | Type | Default | Description |
|
|
67
|
+
|------|------|---------|-------------|
|
|
68
|
+
| side | "top" \| "right" \| "bottom" \| "left" | "right" | Which edge the sheet slides in from |
|
|
69
|
+
| showCloseButton | boolean | true | Show close button (X) in top-right corner |
|
|
70
|
+
| className | string | - | Additional CSS classes |
|
|
71
|
+
| initialFocus | HTMLElement \| (() => HTMLElement) | - | Element to focus when sheet opens |
|
|
72
|
+
| finalFocus | HTMLElement \| (() => HTMLElement) | - | Element to focus when sheet closes |
|
|
73
|
+
|
|
74
|
+
### SheetTrigger / SheetClose
|
|
75
|
+
|
|
76
|
+
Both support the `render` prop pattern:
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
<SheetTrigger render={<Button variant="outline" />}>
|
|
80
|
+
Open Sheet
|
|
81
|
+
</SheetTrigger>
|
|
82
|
+
|
|
83
|
+
<SheetClose render={<Button variant="ghost" />}>
|
|
84
|
+
Close
|
|
85
|
+
</SheetClose>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
| Prop | Type | Default | Description |
|
|
89
|
+
|------|------|---------|-------------|
|
|
90
|
+
| render | React.ReactElement | - | Custom element to render as trigger/close |
|
|
91
|
+
| className | string | - | Additional CSS classes |
|
|
92
|
+
|
|
93
|
+
### SheetHeader / SheetFooter
|
|
94
|
+
|
|
95
|
+
Both are simple `<div>` wrappers with consistent spacing.
|
|
96
|
+
|
|
97
|
+
| Prop | Type | Default | Description |
|
|
98
|
+
|------|------|---------|-------------|
|
|
99
|
+
| className | string | - | Additional CSS classes |
|
|
100
|
+
|
|
101
|
+
## Data Attributes
|
|
102
|
+
|
|
103
|
+
Available for styling via CSS:
|
|
104
|
+
|
|
105
|
+
| Attribute | When Present | Applied To |
|
|
106
|
+
|-----------|--------------|------------|
|
|
107
|
+
| data-open | Sheet is open | SheetContent, SheetOverlay |
|
|
108
|
+
| data-closed | Sheet is closed | SheetContent, SheetOverlay |
|
|
109
|
+
| data-starting-style | During open animation start | SheetContent, SheetOverlay |
|
|
110
|
+
| data-ending-style | During close animation end | SheetContent, SheetOverlay |
|
|
111
|
+
| data-side | Always (value: top/right/bottom/left) | SheetContent |
|
|
112
|
+
|
|
113
|
+
## Examples
|
|
114
|
+
|
|
115
|
+
### Basic Usage
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
<Sheet>
|
|
119
|
+
<SheetTrigger render={<Button variant="outline" />}>
|
|
120
|
+
Open Settings
|
|
121
|
+
</SheetTrigger>
|
|
122
|
+
<SheetContent>
|
|
123
|
+
<SheetHeader>
|
|
124
|
+
<SheetTitle>Settings</SheetTitle>
|
|
125
|
+
<SheetDescription>
|
|
126
|
+
Manage your account settings and preferences
|
|
127
|
+
</SheetDescription>
|
|
128
|
+
</SheetHeader>
|
|
129
|
+
<div className="py-6">
|
|
130
|
+
{/* Settings content */}
|
|
131
|
+
</div>
|
|
132
|
+
</SheetContent>
|
|
133
|
+
</Sheet>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Mobile Navigation (Left Side)
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
<Sheet>
|
|
140
|
+
<SheetTrigger render={<Button variant="ghost" size="icon" />}>
|
|
141
|
+
<MenuIcon />
|
|
142
|
+
</SheetTrigger>
|
|
143
|
+
<SheetContent side="left" className="p-0">
|
|
144
|
+
<SheetHeader className="border-b p-6">
|
|
145
|
+
<SheetTitle>Neynar Dashboard</SheetTitle>
|
|
146
|
+
<SheetDescription>
|
|
147
|
+
Navigate your Farcaster analytics
|
|
148
|
+
</SheetDescription>
|
|
149
|
+
</SheetHeader>
|
|
150
|
+
<nav className="flex-1 space-y-1 p-4">
|
|
151
|
+
{/* Navigation items */}
|
|
152
|
+
</nav>
|
|
153
|
+
</SheetContent>
|
|
154
|
+
</Sheet>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Filter Panel with Footer Actions
|
|
158
|
+
|
|
159
|
+
```tsx
|
|
160
|
+
<Sheet>
|
|
161
|
+
<SheetTrigger render={<Button variant="outline" />}>
|
|
162
|
+
<FilterIcon data-icon="inline-start" />
|
|
163
|
+
Filters
|
|
164
|
+
</SheetTrigger>
|
|
165
|
+
<SheetContent side="right">
|
|
166
|
+
<SheetHeader>
|
|
167
|
+
<SheetTitle>Filter Users</SheetTitle>
|
|
168
|
+
<SheetDescription>
|
|
169
|
+
Refine your user list with advanced filters
|
|
170
|
+
</SheetDescription>
|
|
171
|
+
</SheetHeader>
|
|
172
|
+
|
|
173
|
+
<div className="space-y-6 p-4">
|
|
174
|
+
<div className="space-y-2">
|
|
175
|
+
<Label htmlFor="search">Search</Label>
|
|
176
|
+
<Input id="search" placeholder="Search by username" />
|
|
177
|
+
</div>
|
|
178
|
+
{/* More filters */}
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
<SheetFooter>
|
|
182
|
+
<SheetClose render={<Button variant="outline" />}>
|
|
183
|
+
Cancel
|
|
184
|
+
</SheetClose>
|
|
185
|
+
<Button>Apply Filters</Button>
|
|
186
|
+
</SheetFooter>
|
|
187
|
+
</SheetContent>
|
|
188
|
+
</Sheet>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Controlled State
|
|
192
|
+
|
|
193
|
+
```tsx
|
|
194
|
+
function ProfileEditor() {
|
|
195
|
+
const [open, setOpen] = useState(false)
|
|
196
|
+
|
|
197
|
+
const handleSave = async () => {
|
|
198
|
+
await saveProfile()
|
|
199
|
+
setOpen(false) // Close after saving
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return (
|
|
203
|
+
<Sheet open={open} onOpenChange={setOpen}>
|
|
204
|
+
<SheetTrigger render={<Button />}>
|
|
205
|
+
Edit Profile
|
|
206
|
+
</SheetTrigger>
|
|
207
|
+
<SheetContent>
|
|
208
|
+
<SheetHeader>
|
|
209
|
+
<SheetTitle>Edit Profile</SheetTitle>
|
|
210
|
+
<SheetDescription>
|
|
211
|
+
Make changes to your profile
|
|
212
|
+
</SheetDescription>
|
|
213
|
+
</SheetHeader>
|
|
214
|
+
<form onSubmit={handleSave}>
|
|
215
|
+
{/* Form fields */}
|
|
216
|
+
</form>
|
|
217
|
+
<SheetFooter>
|
|
218
|
+
<Button onClick={handleSave}>Save</Button>
|
|
219
|
+
</SheetFooter>
|
|
220
|
+
</SheetContent>
|
|
221
|
+
</Sheet>
|
|
222
|
+
)
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Without Close Button (Forced Choice)
|
|
227
|
+
|
|
228
|
+
```tsx
|
|
229
|
+
<Sheet>
|
|
230
|
+
<SheetTrigger render={<Button variant="destructive" />}>
|
|
231
|
+
Delete Account
|
|
232
|
+
</SheetTrigger>
|
|
233
|
+
<SheetContent showCloseButton={false}>
|
|
234
|
+
<SheetHeader>
|
|
235
|
+
<SheetTitle>Confirm Action</SheetTitle>
|
|
236
|
+
<SheetDescription>
|
|
237
|
+
This action requires confirmation
|
|
238
|
+
</SheetDescription>
|
|
239
|
+
</SheetHeader>
|
|
240
|
+
<div className="py-6">
|
|
241
|
+
<p className="text-sm">
|
|
242
|
+
Are you sure? This cannot be undone.
|
|
243
|
+
</p>
|
|
244
|
+
</div>
|
|
245
|
+
<SheetFooter>
|
|
246
|
+
<SheetClose render={<Button variant="outline" />}>
|
|
247
|
+
Cancel
|
|
248
|
+
</SheetClose>
|
|
249
|
+
<SheetClose render={<Button variant="destructive" />}>
|
|
250
|
+
Confirm Delete
|
|
251
|
+
</SheetClose>
|
|
252
|
+
</SheetFooter>
|
|
253
|
+
</SheetContent>
|
|
254
|
+
</Sheet>
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Keyboard
|
|
258
|
+
|
|
259
|
+
| Key | Action |
|
|
260
|
+
|-----|--------|
|
|
261
|
+
| Escape | Close sheet (unless `modal={false}`) |
|
|
262
|
+
| Tab | Navigate through focusable elements |
|
|
263
|
+
|
|
264
|
+
## Accessibility
|
|
265
|
+
|
|
266
|
+
- **Focus Management**: Focus moves to sheet content when opened, returns to trigger when closed
|
|
267
|
+
- **ARIA**: Title and description are automatically linked via `aria-labelledby` and `aria-describedby`
|
|
268
|
+
- **Keyboard**: Full keyboard navigation support with Escape to close
|
|
269
|
+
- **Screen Readers**: Announced as dialog/modal with proper labeling
|
|
270
|
+
|
|
271
|
+
## Related
|
|
272
|
+
|
|
273
|
+
- [Dialog](./dialog.llm.md) - For centered modal dialogs
|
|
274
|
+
- [Drawer](./drawer.llm.md) - Similar to Sheet but with dismissible overlay behavior
|
|
275
|
+
- [Popover](./popover.llm.md) - For smaller contextual overlays anchored to elements
|