@neynar/ui 1.0.1 → 1.0.2

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.
Files changed (68) hide show
  1. package/context7.json +17 -0
  2. package/llm/components/accordion.llm.md +205 -0
  3. package/llm/components/alert-dialog.llm.md +289 -0
  4. package/llm/components/alert.llm.md +310 -0
  5. package/llm/components/aspect-ratio.llm.md +110 -0
  6. package/llm/components/avatar.llm.md +282 -0
  7. package/llm/components/badge.llm.md +185 -0
  8. package/llm/components/blockquote.llm.md +86 -0
  9. package/llm/components/breadcrumb.llm.md +245 -0
  10. package/llm/components/button-group.llm.md +248 -0
  11. package/llm/components/button.llm.md +247 -0
  12. package/llm/components/calendar.llm.md +252 -0
  13. package/llm/components/card.llm.md +356 -0
  14. package/llm/components/carousel.llm.md +281 -0
  15. package/llm/components/chart.llm.md +278 -0
  16. package/llm/components/checkbox.llm.md +234 -0
  17. package/llm/components/code.llm.md +75 -0
  18. package/llm/components/collapsible.llm.md +271 -0
  19. package/llm/components/color-mode.llm.md +196 -0
  20. package/llm/components/combobox.llm.md +346 -0
  21. package/llm/components/command.llm.md +353 -0
  22. package/llm/components/context-menu.llm.md +368 -0
  23. package/llm/components/dialog.llm.md +283 -0
  24. package/llm/components/drawer.llm.md +326 -0
  25. package/llm/components/dropdown-menu.llm.md +404 -0
  26. package/llm/components/empty.llm.md +282 -0
  27. package/llm/components/field.llm.md +303 -0
  28. package/llm/components/first-light.llm.md +129 -0
  29. package/llm/components/hover-card.llm.md +278 -0
  30. package/llm/components/input-group.llm.md +334 -0
  31. package/llm/components/input-otp.llm.md +270 -0
  32. package/llm/components/input.llm.md +197 -0
  33. package/llm/components/item.llm.md +347 -0
  34. package/llm/components/kbd.llm.md +221 -0
  35. package/llm/components/label.llm.md +219 -0
  36. package/llm/components/menubar.llm.md +378 -0
  37. package/llm/components/navigation-menu.llm.md +320 -0
  38. package/llm/components/pagination.llm.md +337 -0
  39. package/llm/components/popover.llm.md +278 -0
  40. package/llm/components/progress.llm.md +259 -0
  41. package/llm/components/radio-group.llm.md +269 -0
  42. package/llm/components/resizable.llm.md +222 -0
  43. package/llm/components/scroll-area.llm.md +290 -0
  44. package/llm/components/select.llm.md +338 -0
  45. package/llm/components/separator.llm.md +129 -0
  46. package/llm/components/sheet.llm.md +275 -0
  47. package/llm/components/sidebar.llm.md +528 -0
  48. package/llm/components/skeleton.llm.md +140 -0
  49. package/llm/components/slider.llm.md +213 -0
  50. package/llm/components/sonner.llm.md +299 -0
  51. package/llm/components/spinner.llm.md +187 -0
  52. package/llm/components/switch.llm.md +258 -0
  53. package/llm/components/table.llm.md +334 -0
  54. package/llm/components/tabs.llm.md +245 -0
  55. package/llm/components/text.llm.md +108 -0
  56. package/llm/components/textarea.llm.md +236 -0
  57. package/llm/components/title.llm.md +88 -0
  58. package/llm/components/toggle-group.llm.md +228 -0
  59. package/llm/components/toggle.llm.md +235 -0
  60. package/llm/components/tooltip.llm.md +191 -0
  61. package/llm/contributing.llm.md +273 -0
  62. package/llm/hooks.llm.md +91 -0
  63. package/llm/index.llm.md +178 -0
  64. package/llm/theming.llm.md +381 -0
  65. package/llm/utilities.llm.md +97 -0
  66. package/llms-full.txt +15995 -0
  67. package/llms.txt +182 -0
  68. 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