@neynar/ui 0.3.0 → 0.3.1
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/.llm/a.llm.md +131 -0
- package/.llm/accordion-content.llm.md +67 -0
- package/.llm/accordion-item.llm.md +61 -0
- package/.llm/accordion-trigger.llm.md +69 -0
- package/.llm/accordion.llm.md +88 -0
- package/.llm/alert-description.llm.md +78 -0
- package/.llm/alert-dialog-action.llm.md +51 -0
- package/.llm/alert-dialog-cancel.llm.md +48 -0
- package/.llm/alert-dialog-content.llm.md +88 -0
- package/.llm/alert-dialog-description.llm.md +53 -0
- package/.llm/alert-dialog-footer.llm.md +41 -0
- package/.llm/alert-dialog-header.llm.md +39 -0
- package/.llm/alert-dialog-overlay.llm.md +44 -0
- package/.llm/alert-dialog-portal.llm.md +41 -0
- package/.llm/alert-dialog-title.llm.md +46 -0
- package/.llm/alert-dialog-trigger.llm.md +40 -0
- package/.llm/alert-dialog.llm.md +80 -0
- package/.llm/alert-title.llm.md +48 -0
- package/.llm/alert.llm.md +92 -0
- package/.llm/aspect-ratio.llm.md +41 -0
- package/.llm/avatar-fallback.llm.md +41 -0
- package/.llm/avatar-image.llm.md +48 -0
- package/.llm/avatar.llm.md +35 -0
- package/.llm/badge.llm.md +117 -0
- package/.llm/blockquote.llm.md +117 -0
- package/.llm/breadcrumb-ellipsis.llm.md +73 -0
- package/.llm/breadcrumb-item.llm.md +53 -0
- package/.llm/breadcrumb-link.llm.md +84 -0
- package/.llm/breadcrumb-list.llm.md +54 -0
- package/.llm/breadcrumb-page.llm.md +52 -0
- package/.llm/breadcrumb-separator.llm.md +60 -0
- package/.llm/breadcrumb.llm.md +110 -0
- package/.llm/button-group-separator.llm.md +53 -0
- package/.llm/button-group-text.llm.md +56 -0
- package/.llm/button-group.llm.md +81 -0
- package/.llm/button.llm.md +281 -0
- package/.llm/calendar-day-button.llm.md +57 -0
- package/.llm/calendar.llm.md +340 -0
- package/.llm/card-action.llm.md +64 -0
- package/.llm/card-content.llm.md +48 -0
- package/.llm/card-description.llm.md +46 -0
- package/.llm/card-footer.llm.md +56 -0
- package/.llm/card-header.llm.md +53 -0
- package/.llm/card-title.llm.md +43 -0
- package/.llm/card.llm.md +100 -0
- package/.llm/carousel-content.llm.md +77 -0
- package/.llm/carousel-item.llm.md +96 -0
- package/.llm/carousel-next.llm.md +95 -0
- package/.llm/carousel-previous.llm.md +95 -0
- package/.llm/carousel.llm.md +211 -0
- package/.llm/chart-config.llm.md +71 -0
- package/.llm/chart-container.llm.md +148 -0
- package/.llm/chart-legend-content.llm.md +85 -0
- package/.llm/chart-legend.llm.md +144 -0
- package/.llm/chart-style.llm.md +28 -0
- package/.llm/chart-tooltip-content.llm.md +149 -0
- package/.llm/chart-tooltip.llm.md +184 -0
- package/.llm/checkbox.llm.md +100 -0
- package/.llm/cn.llm.md +46 -0
- package/.llm/code.llm.md +103 -0
- package/.llm/collapsible-content.llm.md +109 -0
- package/.llm/collapsible-trigger.llm.md +75 -0
- package/.llm/collapsible.llm.md +109 -0
- package/.llm/combobox-option.llm.md +53 -0
- package/.llm/combobox.llm.md +208 -0
- package/.llm/command-dialog.llm.md +112 -0
- package/.llm/command-empty.llm.md +63 -0
- package/.llm/command-group.llm.md +83 -0
- package/.llm/command-input.llm.md +82 -0
- package/.llm/command-item.llm.md +97 -0
- package/.llm/command-list.llm.md +53 -0
- package/.llm/command-loading.llm.md +48 -0
- package/.llm/command-separator.llm.md +44 -0
- package/.llm/command-shortcut.llm.md +63 -0
- package/.llm/command.llm.md +147 -0
- package/.llm/container.llm.md +236 -0
- package/.llm/context-menu-checkbox-item.llm.md +97 -0
- package/.llm/context-menu-content.llm.md +91 -0
- package/.llm/context-menu-group.llm.md +61 -0
- package/.llm/context-menu-item.llm.md +94 -0
- package/.llm/context-menu-label.llm.md +60 -0
- package/.llm/context-menu-portal.llm.md +49 -0
- package/.llm/context-menu-radio-group.llm.md +66 -0
- package/.llm/context-menu-radio-item.llm.md +76 -0
- package/.llm/context-menu-separator.llm.md +51 -0
- package/.llm/context-menu-shortcut.llm.md +57 -0
- package/.llm/context-menu-sub-content.llm.md +90 -0
- package/.llm/context-menu-sub-trigger.llm.md +73 -0
- package/.llm/context-menu-sub.llm.md +61 -0
- package/.llm/context-menu-trigger.llm.md +53 -0
- package/.llm/context-menu.llm.md +103 -0
- package/.llm/date-picker.llm.md +90 -0
- package/.llm/dialog-close.llm.md +61 -0
- package/.llm/dialog-content.llm.md +128 -0
- package/.llm/dialog-description.llm.md +44 -0
- package/.llm/dialog-footer.llm.md +38 -0
- package/.llm/dialog-header.llm.md +40 -0
- package/.llm/dialog-overlay.llm.md +57 -0
- package/.llm/dialog-portal.llm.md +47 -0
- package/.llm/dialog-title.llm.md +41 -0
- package/.llm/dialog-trigger.llm.md +51 -0
- package/.llm/dialog.llm.md +113 -0
- package/.llm/drawer-close.llm.md +53 -0
- package/.llm/drawer-content.llm.md +58 -0
- package/.llm/drawer-description.llm.md +54 -0
- package/.llm/drawer-footer.llm.md +67 -0
- package/.llm/drawer-header.llm.md +60 -0
- package/.llm/drawer-overlay.llm.md +40 -0
- package/.llm/drawer-portal.llm.md +42 -0
- package/.llm/drawer-title.llm.md +51 -0
- package/.llm/drawer-trigger.llm.md +44 -0
- package/.llm/drawer.llm.md +194 -0
- package/.llm/dropdown-menu-checkbox-item.llm.md +111 -0
- package/.llm/dropdown-menu-content.llm.md +109 -0
- package/.llm/dropdown-menu-group.llm.md +38 -0
- package/.llm/dropdown-menu-item.llm.md +94 -0
- package/.llm/dropdown-menu-label.llm.md +66 -0
- package/.llm/dropdown-menu-portal.llm.md +32 -0
- package/.llm/dropdown-menu-radio-group.llm.md +73 -0
- package/.llm/dropdown-menu-radio-item.llm.md +92 -0
- package/.llm/dropdown-menu-separator.llm.md +55 -0
- package/.llm/dropdown-menu-shortcut.llm.md +74 -0
- package/.llm/dropdown-menu-sub-content.llm.md +80 -0
- package/.llm/dropdown-menu-sub-trigger.llm.md +84 -0
- package/.llm/dropdown-menu-sub.llm.md +74 -0
- package/.llm/dropdown-menu-trigger.llm.md +48 -0
- package/.llm/dropdown-menu.llm.md +120 -0
- package/.llm/empty-content.llm.md +103 -0
- package/.llm/empty-description.llm.md +70 -0
- package/.llm/empty-header.llm.md +64 -0
- package/.llm/empty-media.llm.md +81 -0
- package/.llm/empty-state.llm.md +174 -0
- package/.llm/empty-title.llm.md +54 -0
- package/.llm/empty.llm.md +158 -0
- package/.llm/field-content.llm.md +28 -0
- package/.llm/field-description.llm.md +28 -0
- package/.llm/field-error.llm.md +41 -0
- package/.llm/field-group.llm.md +84 -0
- package/.llm/field-label.llm.md +28 -0
- package/.llm/field-legend.llm.md +77 -0
- package/.llm/field-separator.llm.md +35 -0
- package/.llm/field-set.llm.md +80 -0
- package/.llm/field-title.llm.md +28 -0
- package/.llm/field.llm.md +35 -0
- package/.llm/h1.llm.md +108 -0
- package/.llm/h2.llm.md +108 -0
- package/.llm/h3.llm.md +106 -0
- package/.llm/h4.llm.md +104 -0
- package/.llm/h5.llm.md +105 -0
- package/.llm/h6.llm.md +105 -0
- package/.llm/hover-card-content.llm.md +167 -0
- package/.llm/hover-card-trigger.llm.md +65 -0
- package/.llm/hover-card.llm.md +121 -0
- package/.llm/input-group-addon.llm.md +91 -0
- package/.llm/input-group-button.llm.md +120 -0
- package/.llm/input-group-input.llm.md +145 -0
- package/.llm/input-group-text.llm.md +75 -0
- package/.llm/input-group-textarea.llm.md +157 -0
- package/.llm/input-group.llm.md +108 -0
- package/.llm/input.llm.md +319 -0
- package/.llm/item-actions.llm.md +77 -0
- package/.llm/item-content.llm.md +73 -0
- package/.llm/item-description.llm.md +61 -0
- package/.llm/item-footer.llm.md +68 -0
- package/.llm/item-group.llm.md +73 -0
- package/.llm/item-header.llm.md +66 -0
- package/.llm/item-media.llm.md +75 -0
- package/.llm/item-separator.llm.md +80 -0
- package/.llm/item-title.llm.md +59 -0
- package/.llm/item.llm.md +115 -0
- package/.llm/kbd-group.llm.md +71 -0
- package/.llm/kbd.llm.md +71 -0
- package/.llm/label.llm.md +145 -0
- package/.llm/lead.llm.md +114 -0
- package/.llm/menubar-checkbox-item.llm.md +66 -0
- package/.llm/menubar-content.llm.md +128 -0
- package/.llm/menubar-group.llm.md +40 -0
- package/.llm/menubar-item.llm.md +62 -0
- package/.llm/menubar-label.llm.md +40 -0
- package/.llm/menubar-menu.llm.md +32 -0
- package/.llm/menubar-portal.llm.md +38 -0
- package/.llm/menubar-radio-group.llm.md +39 -0
- package/.llm/menubar-radio-item.llm.md +59 -0
- package/.llm/menubar-separator.llm.md +35 -0
- package/.llm/menubar-shortcut.llm.md +37 -0
- package/.llm/menubar-sub-content.llm.md +127 -0
- package/.llm/menubar-sub-trigger.llm.md +51 -0
- package/.llm/menubar-sub.llm.md +53 -0
- package/.llm/menubar-trigger.llm.md +37 -0
- package/.llm/menubar.llm.md +115 -0
- package/.llm/navigation-menu-content.llm.md +116 -0
- package/.llm/navigation-menu-indicator.llm.md +68 -0
- package/.llm/navigation-menu-item.llm.md +62 -0
- package/.llm/navigation-menu-link.llm.md +109 -0
- package/.llm/navigation-menu-list.llm.md +52 -0
- package/.llm/navigation-menu-trigger-style.llm.md +22 -0
- package/.llm/navigation-menu-trigger.llm.md +57 -0
- package/.llm/navigation-menu-viewport.llm.md +51 -0
- package/.llm/navigation-menu.llm.md +184 -0
- package/.llm/p.llm.md +110 -0
- package/.llm/pagination-content.llm.md +60 -0
- package/.llm/pagination-ellipsis.llm.md +107 -0
- package/.llm/pagination-item.llm.md +59 -0
- package/.llm/pagination-link.llm.md +150 -0
- package/.llm/pagination-next.llm.md +115 -0
- package/.llm/pagination-previous.llm.md +115 -0
- package/.llm/pagination.llm.md +190 -0
- package/.llm/popover-anchor.llm.md +53 -0
- package/.llm/popover-content.llm.md +109 -0
- package/.llm/popover-trigger.llm.md +54 -0
- package/.llm/popover.llm.md +116 -0
- package/.llm/progress.llm.md +76 -0
- package/.llm/radio-group-indicator.llm.md +28 -0
- package/.llm/radio-group-item.llm.md +40 -0
- package/.llm/radio-group.llm.md +76 -0
- package/.llm/resizable-handle.llm.md +156 -0
- package/.llm/resizable-panel-group.llm.md +149 -0
- package/.llm/resizable-panel.llm.md +157 -0
- package/.llm/scroll-area-corner.llm.md +41 -0
- package/.llm/scroll-area-thumb.llm.md +39 -0
- package/.llm/scroll-area-viewport.llm.md +60 -0
- package/.llm/scroll-area.llm.md +125 -0
- package/.llm/scroll-bar.llm.md +78 -0
- package/.llm/sdk-items-registry.json +3022 -0
- package/.llm/select-content.llm.md +139 -0
- package/.llm/select-group.llm.md +60 -0
- package/.llm/select-item.llm.md +75 -0
- package/.llm/select-label.llm.md +62 -0
- package/.llm/select-scroll-down-button.llm.md +45 -0
- package/.llm/select-scroll-up-button.llm.md +45 -0
- package/.llm/select-separator.llm.md +59 -0
- package/.llm/select-trigger.llm.md +66 -0
- package/.llm/select-value.llm.md +67 -0
- package/.llm/select.llm.md +159 -0
- package/.llm/separator.llm.md +129 -0
- package/.llm/sheet-close.llm.md +49 -0
- package/.llm/sheet-content.llm.md +115 -0
- package/.llm/sheet-description.llm.md +62 -0
- package/.llm/sheet-footer.llm.md +64 -0
- package/.llm/sheet-header.llm.md +52 -0
- package/.llm/sheet-title.llm.md +53 -0
- package/.llm/sheet-trigger.llm.md +46 -0
- package/.llm/sheet.llm.md +126 -0
- package/.llm/sidebar-content.llm.md +63 -0
- package/.llm/sidebar-footer.llm.md +50 -0
- package/.llm/sidebar-group-action.llm.md +60 -0
- package/.llm/sidebar-group-content.llm.md +64 -0
- package/.llm/sidebar-group-label.llm.md +53 -0
- package/.llm/sidebar-group.llm.md +56 -0
- package/.llm/sidebar-header.llm.md +67 -0
- package/.llm/sidebar-input.llm.md +50 -0
- package/.llm/sidebar-inset.llm.md +52 -0
- package/.llm/sidebar-menu-action.llm.md +84 -0
- package/.llm/sidebar-menu-badge.llm.md +60 -0
- package/.llm/sidebar-menu-button.llm.md +103 -0
- package/.llm/sidebar-menu-item.llm.md +75 -0
- package/.llm/sidebar-menu-skeleton.llm.md +76 -0
- package/.llm/sidebar-menu-sub-button.llm.md +85 -0
- package/.llm/sidebar-menu-sub-item.llm.md +54 -0
- package/.llm/sidebar-menu-sub.llm.md +74 -0
- package/.llm/sidebar-menu.llm.md +65 -0
- package/.llm/sidebar-provider.llm.md +79 -0
- package/.llm/sidebar-rail.llm.md +34 -0
- package/.llm/sidebar-separator.llm.md +57 -0
- package/.llm/sidebar-trigger.llm.md +49 -0
- package/.llm/sidebar.llm.md +129 -0
- package/.llm/skeleton.llm.md +134 -0
- package/.llm/slider.llm.md +173 -0
- package/.llm/small.llm.md +110 -0
- package/.llm/span.llm.md +118 -0
- package/.llm/spinner.llm.md +182 -0
- package/.llm/stack.llm.md +28 -0
- package/.llm/strong.llm.md +110 -0
- package/.llm/switch.llm.md +76 -0
- package/.llm/table-body.llm.md +36 -0
- package/.llm/table-caption.llm.md +48 -0
- package/.llm/table-cell.llm.md +53 -0
- package/.llm/table-footer.llm.md +41 -0
- package/.llm/table-head.llm.md +69 -0
- package/.llm/table-header.llm.md +41 -0
- package/.llm/table-row.llm.md +42 -0
- package/.llm/table.llm.md +123 -0
- package/.llm/tabs-content.llm.md +47 -0
- package/.llm/tabs-list.llm.md +41 -0
- package/.llm/tabs-trigger.llm.md +47 -0
- package/.llm/tabs.llm.md +71 -0
- package/.llm/text-field.llm.md +327 -0
- package/.llm/textarea.llm.md +311 -0
- package/.llm/theme-preference.llm.md +25 -0
- package/.llm/theme-toggle.llm.md +57 -0
- package/.llm/theme.llm.md +14 -0
- package/.llm/toast.llm.md +32 -0
- package/.llm/toaster.llm.md +193 -0
- package/.llm/toggle-group-item.llm.md +59 -0
- package/.llm/toggle-group.llm.md +101 -0
- package/.llm/toggle.llm.md +40 -0
- package/.llm/tooltip-content.llm.md +185 -0
- package/.llm/tooltip-provider.llm.md +68 -0
- package/.llm/tooltip-trigger.llm.md +70 -0
- package/.llm/tooltip.llm.md +129 -0
- package/.llm/typography.llm.md +161 -0
- package/.llm/use-carousel.llm.md +55 -0
- package/.llm/use-command-state.llm.md +32 -0
- package/.llm/use-is-mobile.llm.md +73 -0
- package/.llm/use-sidebar.llm.md +61 -0
- package/dist/components/ui/scroll-area.d.ts +5 -5
- package/dist/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/components/ui/stack.d.ts.map +1 -1
- package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -1
- package/dist/components/ui/theme-toggle.d.ts +0 -3
- package/dist/components/ui/theme-toggle.d.ts.map +1 -1
- package/dist/components/ui/theme.d.ts.map +1 -1
- package/dist/index.js +4972 -9636
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/components/ui/stack.tsx +3 -1
- package/src/components/ui/theme-toggle.tsx +1 -3
- package/src/components/ui/theme.tsx +6 -1
- package/src/styles/globals.css +57 -85
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Select
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Select - A dropdown selection component built on Radix UI primitives Provides a dropdown menu for selecting a single option from a list of choices. Features comprehensive keyboard navigation, grouping capabilities, accessibility compliance, and flexible styling options. Perfect for forms, filters, and configuration interfaces. Built on Radix UI Select.Root with enhanced styling.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { Select } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<Select
|
|
13
|
+
defaultValue="value"
|
|
14
|
+
value="value"
|
|
15
|
+
onValueChange={handleValueChange}
|
|
16
|
+
defaultOpen={true}
|
|
17
|
+
open={true}
|
|
18
|
+
onOpenChange={handleOpenChange}
|
|
19
|
+
dir={value}
|
|
20
|
+
name="value"
|
|
21
|
+
disabled={true}
|
|
22
|
+
required={true}
|
|
23
|
+
/>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Component Props
|
|
27
|
+
|
|
28
|
+
### defaultValue
|
|
29
|
+
- **Type**: `string`
|
|
30
|
+
- **Required**: No
|
|
31
|
+
- **Description**: No description available
|
|
32
|
+
|
|
33
|
+
### value
|
|
34
|
+
- **Type**: `string`
|
|
35
|
+
- **Required**: No
|
|
36
|
+
- **Description**: No description available
|
|
37
|
+
|
|
38
|
+
### onValueChange
|
|
39
|
+
- **Type**: `(value: string) => void`
|
|
40
|
+
- **Required**: No
|
|
41
|
+
- **Description**: No description available
|
|
42
|
+
|
|
43
|
+
### defaultOpen
|
|
44
|
+
- **Type**: `boolean`
|
|
45
|
+
- **Required**: No
|
|
46
|
+
- **Description**: No description available
|
|
47
|
+
|
|
48
|
+
### open
|
|
49
|
+
- **Type**: `boolean`
|
|
50
|
+
- **Required**: No
|
|
51
|
+
- **Description**: No description available
|
|
52
|
+
|
|
53
|
+
### onOpenChange
|
|
54
|
+
- **Type**: `(open: boolean) => void`
|
|
55
|
+
- **Required**: No
|
|
56
|
+
- **Description**: No description available
|
|
57
|
+
|
|
58
|
+
### dir
|
|
59
|
+
- **Type**: `"ltr" | "rtl"`
|
|
60
|
+
- **Required**: No
|
|
61
|
+
- **Description**: No description available
|
|
62
|
+
|
|
63
|
+
### name
|
|
64
|
+
- **Type**: `string`
|
|
65
|
+
- **Required**: No
|
|
66
|
+
- **Description**: No description available
|
|
67
|
+
|
|
68
|
+
### disabled
|
|
69
|
+
- **Type**: `boolean`
|
|
70
|
+
- **Required**: No
|
|
71
|
+
- **Description**: No description available
|
|
72
|
+
|
|
73
|
+
### required
|
|
74
|
+
- **Type**: `boolean`
|
|
75
|
+
- **Required**: No
|
|
76
|
+
- **Description**: No description available
|
|
77
|
+
|
|
78
|
+
## Examples
|
|
79
|
+
|
|
80
|
+
### Example 1
|
|
81
|
+
```tsx
|
|
82
|
+
// Basic uncontrolled select
|
|
83
|
+
<Select defaultValue="apple">
|
|
84
|
+
<SelectTrigger className="w-[180px]">
|
|
85
|
+
<SelectValue placeholder="Select a fruit" />
|
|
86
|
+
</SelectTrigger>
|
|
87
|
+
<SelectContent>
|
|
88
|
+
<SelectItem value="apple">Apple</SelectItem>
|
|
89
|
+
<SelectItem value="banana">Banana</SelectItem>
|
|
90
|
+
<SelectItem value="orange">Orange</SelectItem>
|
|
91
|
+
</SelectContent>
|
|
92
|
+
</Select>
|
|
93
|
+
```
|
|
94
|
+
### Example 2
|
|
95
|
+
```tsx
|
|
96
|
+
// Controlled select with state management
|
|
97
|
+
const [value, setValue] = useState("");
|
|
98
|
+
<Select value={value} onValueChange={setValue}>
|
|
99
|
+
<SelectTrigger>
|
|
100
|
+
<SelectValue placeholder="Choose an option" />
|
|
101
|
+
</SelectTrigger>
|
|
102
|
+
<SelectContent>
|
|
103
|
+
<SelectItem value="option1">Option 1</SelectItem>
|
|
104
|
+
<SelectItem value="option2">Option 2</SelectItem>
|
|
105
|
+
</SelectContent>
|
|
106
|
+
</Select>
|
|
107
|
+
```
|
|
108
|
+
### Example 3
|
|
109
|
+
```tsx
|
|
110
|
+
// Grouped options with separators and labels
|
|
111
|
+
<Select>
|
|
112
|
+
<SelectTrigger>
|
|
113
|
+
<SelectValue placeholder="Select a timezone" />
|
|
114
|
+
</SelectTrigger>
|
|
115
|
+
<SelectContent>
|
|
116
|
+
<SelectGroup>
|
|
117
|
+
<SelectLabel>North America</SelectLabel>
|
|
118
|
+
<SelectItem value="est">Eastern Time (EST)</SelectItem>
|
|
119
|
+
<SelectItem value="cst">Central Time (CST)</SelectItem>
|
|
120
|
+
<SelectItem value="pst">Pacific Time (PST)</SelectItem>
|
|
121
|
+
</SelectGroup>
|
|
122
|
+
<SelectSeparator />
|
|
123
|
+
<SelectGroup>
|
|
124
|
+
<SelectLabel>Europe</SelectLabel>
|
|
125
|
+
<SelectItem value="gmt">Greenwich Mean Time (GMT)</SelectItem>
|
|
126
|
+
<SelectItem value="cet">Central European Time (CET)</SelectItem>
|
|
127
|
+
</SelectGroup>
|
|
128
|
+
</SelectContent>
|
|
129
|
+
</Select>
|
|
130
|
+
```
|
|
131
|
+
### Example 4
|
|
132
|
+
```tsx
|
|
133
|
+
// Form integration with validation and required state
|
|
134
|
+
<form>
|
|
135
|
+
<Select name="userRole" required defaultValue="">
|
|
136
|
+
<SelectTrigger id="role" aria-describedby="role-error">
|
|
137
|
+
<SelectValue placeholder="Choose your role" />
|
|
138
|
+
</SelectTrigger>
|
|
139
|
+
<SelectContent>
|
|
140
|
+
<SelectItem value="admin">Administrator</SelectItem>
|
|
141
|
+
<SelectItem value="user">User</SelectItem>
|
|
142
|
+
<SelectItem value="guest">Guest</SelectItem>
|
|
143
|
+
</SelectContent>
|
|
144
|
+
</Select>
|
|
145
|
+
</form>
|
|
146
|
+
```
|
|
147
|
+
### Example 5
|
|
148
|
+
```tsx
|
|
149
|
+
// Disabled states and interactions
|
|
150
|
+
<Select disabled>
|
|
151
|
+
<SelectTrigger>
|
|
152
|
+
<SelectValue placeholder="Disabled select" />
|
|
153
|
+
</SelectTrigger>
|
|
154
|
+
<SelectContent>
|
|
155
|
+
<SelectItem value="1">Option 1</SelectItem>
|
|
156
|
+
<SelectItem value="2" disabled>Option 2 (disabled)</SelectItem>
|
|
157
|
+
</SelectContent>
|
|
158
|
+
</Select>
|
|
159
|
+
```
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Separator
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
Separator component for visually and semantically dividing content sections A flexible, accessible separator component built on Radix UI primitives that creates visual or semantic divisions between content sections. Supports both horizontal and vertical orientations with full accessibility features including decorative and semantic separator modes for optimal screen reader compatibility. Built on Radix UI Separator primitive which automatically handles: - WAI-ARIA separator role compliance - Proper orientation data attributes - Screen reader visibility control via decorative prop - Keyboard navigation support for interactive separators - Semantic HTML structure with proper ARIA attributes
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { Separator } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<Separator
|
|
13
|
+
className="value"
|
|
14
|
+
orientation={value}
|
|
15
|
+
decorative={true}
|
|
16
|
+
asChild={true}
|
|
17
|
+
"aria-label"="value"
|
|
18
|
+
"aria-labelledby"="value"
|
|
19
|
+
"aria-valuenow"={0}
|
|
20
|
+
"aria-valuemin"={0}
|
|
21
|
+
"aria-valuemax"={0}
|
|
22
|
+
"aria-valuetext"="value"
|
|
23
|
+
/>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Component Props
|
|
27
|
+
|
|
28
|
+
### className
|
|
29
|
+
- **Type**: `string`
|
|
30
|
+
- **Required**: No
|
|
31
|
+
- **Description**: No description available
|
|
32
|
+
|
|
33
|
+
### orientation
|
|
34
|
+
- **Type**: `"horizontal" | "vertical"`
|
|
35
|
+
- **Required**: No
|
|
36
|
+
- **Description**: No description available
|
|
37
|
+
|
|
38
|
+
### decorative
|
|
39
|
+
- **Type**: `boolean`
|
|
40
|
+
- **Required**: No
|
|
41
|
+
- **Description**: No description available
|
|
42
|
+
|
|
43
|
+
### asChild
|
|
44
|
+
- **Type**: `boolean`
|
|
45
|
+
- **Required**: No
|
|
46
|
+
- **Description**: No description available
|
|
47
|
+
|
|
48
|
+
### "aria-label"
|
|
49
|
+
- **Type**: `string`
|
|
50
|
+
- **Required**: No
|
|
51
|
+
- **Description**: No description available
|
|
52
|
+
|
|
53
|
+
### "aria-labelledby"
|
|
54
|
+
- **Type**: `string`
|
|
55
|
+
- **Required**: No
|
|
56
|
+
- **Description**: No description available
|
|
57
|
+
|
|
58
|
+
### "aria-valuenow"
|
|
59
|
+
- **Type**: `number`
|
|
60
|
+
- **Required**: No
|
|
61
|
+
- **Description**: No description available
|
|
62
|
+
|
|
63
|
+
### "aria-valuemin"
|
|
64
|
+
- **Type**: `number`
|
|
65
|
+
- **Required**: No
|
|
66
|
+
- **Description**: No description available
|
|
67
|
+
|
|
68
|
+
### "aria-valuemax"
|
|
69
|
+
- **Type**: `number`
|
|
70
|
+
- **Required**: No
|
|
71
|
+
- **Description**: No description available
|
|
72
|
+
|
|
73
|
+
### "aria-valuetext"
|
|
74
|
+
- **Type**: `string`
|
|
75
|
+
- **Required**: No
|
|
76
|
+
- **Description**: No description available
|
|
77
|
+
|
|
78
|
+
## Examples
|
|
79
|
+
|
|
80
|
+
### Example 1
|
|
81
|
+
```tsx
|
|
82
|
+
// Basic horizontal separator - decorative divider
|
|
83
|
+
<div className="space-y-4">
|
|
84
|
+
<p>Content above</p>
|
|
85
|
+
<Separator />
|
|
86
|
+
<p>Content below</p>
|
|
87
|
+
</div>
|
|
88
|
+
```
|
|
89
|
+
### Example 2
|
|
90
|
+
```tsx
|
|
91
|
+
// Vertical separator in toolbar layouts
|
|
92
|
+
<div className="flex items-center space-x-2">
|
|
93
|
+
<button>Bold</button>
|
|
94
|
+
<button>Italic</button>
|
|
95
|
+
<Separator orientation="vertical" className="h-4" />
|
|
96
|
+
<button>Underline</button>
|
|
97
|
+
<button>Strike</button>
|
|
98
|
+
</div>
|
|
99
|
+
```
|
|
100
|
+
### Example 3
|
|
101
|
+
```tsx
|
|
102
|
+
// Semantic separator with screen reader support
|
|
103
|
+
<nav className="flex items-center space-x-2">
|
|
104
|
+
<a href="/dashboard">Dashboard</a>
|
|
105
|
+
<Separator
|
|
106
|
+
orientation="vertical"
|
|
107
|
+
decorative={false}
|
|
108
|
+
aria-label="Navigation separator"
|
|
109
|
+
className="h-4"
|
|
110
|
+
/>
|
|
111
|
+
<a href="/settings">Settings</a>
|
|
112
|
+
</nav>
|
|
113
|
+
```
|
|
114
|
+
### Example 4
|
|
115
|
+
```tsx
|
|
116
|
+
// Custom styled separator with gradient
|
|
117
|
+
<Separator className="my-8 h-px bg-gradient-to-r from-transparent via-border to-transparent" />
|
|
118
|
+
```
|
|
119
|
+
### Example 5
|
|
120
|
+
```tsx
|
|
121
|
+
// Polymorphic separator using semantic HTML
|
|
122
|
+
<article>
|
|
123
|
+
<section>First section content</section>
|
|
124
|
+
<Separator asChild decorative={false} aria-label="Section divider">
|
|
125
|
+
<hr className="my-6" />
|
|
126
|
+
</Separator>
|
|
127
|
+
<section>Second section content</section>
|
|
128
|
+
</article>
|
|
129
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# SheetClose
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
SheetClose - Button that closes the sheet A button that closes the sheet when clicked. Can be placed anywhere within the sheet content. Use the `asChild` prop to render as a different element while maintaining the close functionality. Multiple close buttons can be used throughout the sheet content.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { SheetClose } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<SheetClose
|
|
13
|
+
asChild={true}
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</SheetClose>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### asChild
|
|
22
|
+
- **Type**: `boolean`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: When true, merges props with child element instead of rendering a button
|
|
25
|
+
|
|
26
|
+
### children
|
|
27
|
+
- **Type**: `React.ReactNode`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: Child element to render as the close button. Required when asChild is true
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
// In footer with styled button
|
|
35
|
+
<SheetFooter>
|
|
36
|
+
<SheetClose asChild>
|
|
37
|
+
<Button variant="outline">Cancel</Button>
|
|
38
|
+
</SheetClose>
|
|
39
|
+
<Button type="submit">Save</Button>
|
|
40
|
+
</SheetFooter>
|
|
41
|
+
// As simple text button
|
|
42
|
+
<SheetClose>Close</SheetClose>
|
|
43
|
+
// Custom close button in content
|
|
44
|
+
<SheetClose asChild>
|
|
45
|
+
<Button variant="ghost" size="sm" className="ml-auto">
|
|
46
|
+
<XIcon className="h-4 w-4" />
|
|
47
|
+
</Button>
|
|
48
|
+
</SheetClose>
|
|
49
|
+
```
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# SheetContent
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
SheetContent - Main container for sheet content The primary content area of the sheet that slides in from the specified side. Includes automatic overlay, portal rendering, and close button. Contains smooth slide animations with responsive sizing and proper focus management. Features automatic positioning based on the side prop: - Right/Left: Full height, responsive width (3/4 on mobile, max 384px on desktop) - Top/Bottom: Full width, auto height based on content
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { SheetContent } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<SheetContent
|
|
13
|
+
asChild={true}
|
|
14
|
+
forceMount={true}
|
|
15
|
+
onCloseAutoFocus={handleCloseAutoFocus}
|
|
16
|
+
onOpenAutoFocus={handleOpenAutoFocus}
|
|
17
|
+
onEscapeKeyDown={handleEscapeKeyDown}
|
|
18
|
+
onPointerDownOutside={handlePointerDownOutside}
|
|
19
|
+
onInteractOutside={handleInteractOutside}
|
|
20
|
+
side={value}
|
|
21
|
+
className="value"
|
|
22
|
+
>
|
|
23
|
+
{/* Your content here */}
|
|
24
|
+
</SheetContent>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Component Props
|
|
28
|
+
|
|
29
|
+
### asChild
|
|
30
|
+
- **Type**: `boolean`
|
|
31
|
+
- **Required**: No
|
|
32
|
+
- **Description**: When true, merges props with child element instead of rendering a div
|
|
33
|
+
|
|
34
|
+
### forceMount
|
|
35
|
+
- **Type**: `boolean`
|
|
36
|
+
- **Required**: No
|
|
37
|
+
- **Description**: Forces mounting when true. Useful for controlling animations with external state
|
|
38
|
+
|
|
39
|
+
### onCloseAutoFocus
|
|
40
|
+
- **Type**: `(event: Event) => void`
|
|
41
|
+
- **Required**: No
|
|
42
|
+
- **Description**: Event handler called when focus moves to the trigger after closing
|
|
43
|
+
|
|
44
|
+
### onOpenAutoFocus
|
|
45
|
+
- **Type**: `(event: Event) => void`
|
|
46
|
+
- **Required**: No
|
|
47
|
+
- **Description**: Event handler called when focus moves into the component after opening
|
|
48
|
+
|
|
49
|
+
### onEscapeKeyDown
|
|
50
|
+
- **Type**: `(event: KeyboardEvent) => void`
|
|
51
|
+
- **Required**: No
|
|
52
|
+
- **Description**: Event handler called when the escape key is down. Can prevent default to disable escape key closing
|
|
53
|
+
|
|
54
|
+
### onPointerDownOutside
|
|
55
|
+
- **Type**: `(
|
|
56
|
+
event: CustomEvent<{ originalEvent: PointerEvent }>,
|
|
57
|
+
) => void`
|
|
58
|
+
- **Required**: No
|
|
59
|
+
- **Description**: Event handler called when a pointer down event happens outside the component bounds
|
|
60
|
+
|
|
61
|
+
### onInteractOutside
|
|
62
|
+
- **Type**: `(
|
|
63
|
+
event: CustomEvent<{ originalEvent: PointerEvent | FocusEvent }>,
|
|
64
|
+
) => void`
|
|
65
|
+
- **Required**: No
|
|
66
|
+
- **Description**: Event handler called when an interaction happens outside the component bounds
|
|
67
|
+
|
|
68
|
+
### side
|
|
69
|
+
- **Type**: `"top" | "right" | "bottom" | "left"`
|
|
70
|
+
- **Required**: No
|
|
71
|
+
- **Description**: Which side of the screen the sheet slides in from
|
|
72
|
+
|
|
73
|
+
### className
|
|
74
|
+
- **Type**: `string`
|
|
75
|
+
- **Required**: No
|
|
76
|
+
- **Description**: Additional CSS classes for styling customization
|
|
77
|
+
|
|
78
|
+
### children
|
|
79
|
+
- **Type**: `React.ReactNode`
|
|
80
|
+
- **Required**: No
|
|
81
|
+
- **Description**: Content to display inside the sheet
|
|
82
|
+
|
|
83
|
+
## Examples
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
// Default right-side sheet
|
|
87
|
+
<SheetContent>
|
|
88
|
+
<SheetHeader>
|
|
89
|
+
<SheetTitle>Settings</SheetTitle>
|
|
90
|
+
</SheetHeader>
|
|
91
|
+
<div className="py-4">
|
|
92
|
+
Settings content here
|
|
93
|
+
</div>
|
|
94
|
+
</SheetContent>
|
|
95
|
+
// Left-side navigation sheet
|
|
96
|
+
<SheetContent side="left">
|
|
97
|
+
<nav>
|
|
98
|
+
<Button variant="ghost">Dashboard</Button>
|
|
99
|
+
<Button variant="ghost">Profile</Button>
|
|
100
|
+
</nav>
|
|
101
|
+
</SheetContent>
|
|
102
|
+
// Top sheet with custom height
|
|
103
|
+
<SheetContent side="top" className="h-[300px]">
|
|
104
|
+
<SheetHeader>
|
|
105
|
+
<SheetTitle>Notifications</SheetTitle>
|
|
106
|
+
</SheetHeader>
|
|
107
|
+
</SheetContent>
|
|
108
|
+
// Bottom sheet for mobile actions
|
|
109
|
+
<SheetContent side="bottom" className="h-[400px]">
|
|
110
|
+
<div className="grid grid-cols-2 gap-4">
|
|
111
|
+
<Button>Action 1</Button>
|
|
112
|
+
<Button>Action 2</Button>
|
|
113
|
+
</div>
|
|
114
|
+
</SheetContent>
|
|
115
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# SheetDescription
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
SheetDescription - Description text for the sheet Provides additional context about the sheet's purpose or instructions. Appears below the title with muted styling. Should be used within SheetHeader. While optional, it's recommended for better accessibility and user understanding.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { SheetDescription } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<SheetDescription
|
|
13
|
+
asChild={true}
|
|
14
|
+
className="value"
|
|
15
|
+
>
|
|
16
|
+
{/* Your content here */}
|
|
17
|
+
</SheetDescription>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### asChild
|
|
23
|
+
- **Type**: `boolean`
|
|
24
|
+
- **Required**: No
|
|
25
|
+
- **Description**: When true, merges props with child element instead of rendering a p element
|
|
26
|
+
|
|
27
|
+
### className
|
|
28
|
+
- **Type**: `string`
|
|
29
|
+
- **Required**: No
|
|
30
|
+
- **Description**: Additional CSS classes for styling customization
|
|
31
|
+
|
|
32
|
+
### children
|
|
33
|
+
- **Type**: `React.ReactNode`
|
|
34
|
+
- **Required**: No
|
|
35
|
+
- **Description**: Description text content
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
// Standard usage with instructional text
|
|
41
|
+
<SheetHeader>
|
|
42
|
+
<SheetTitle>Edit Profile</SheetTitle>
|
|
43
|
+
<SheetDescription>
|
|
44
|
+
Make changes to your profile here. Click save when you're done.
|
|
45
|
+
</SheetDescription>
|
|
46
|
+
</SheetHeader>
|
|
47
|
+
// Warning or important information
|
|
48
|
+
<SheetDescription className="text-orange-600">
|
|
49
|
+
This action cannot be undone.
|
|
50
|
+
</SheetDescription>
|
|
51
|
+
// Custom styled description
|
|
52
|
+
<SheetDescription asChild>
|
|
53
|
+
<p className="text-sm text-gray-600 italic">
|
|
54
|
+
Changes will be saved automatically.
|
|
55
|
+
</p>
|
|
56
|
+
</SheetDescription>
|
|
57
|
+
// Contextual help description
|
|
58
|
+
<SheetDescription>
|
|
59
|
+
Use this form to update your notification preferences.
|
|
60
|
+
Changes take effect immediately.
|
|
61
|
+
</SheetDescription>
|
|
62
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# SheetFooter
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
SheetFooter - Footer section for sheet actions A container for action buttons positioned at the bottom of the sheet content. Uses `mt-auto` to stick to the bottom and provides consistent spacing for buttons. Ideal for primary and secondary actions like Save/Cancel button pairs.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { SheetFooter } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<SheetFooter
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</SheetFooter>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: Additional CSS classes for styling customization
|
|
25
|
+
|
|
26
|
+
### children
|
|
27
|
+
- **Type**: `React.ReactNode`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: Footer content (typically action buttons)
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
// Standard save/cancel footer
|
|
35
|
+
<SheetFooter>
|
|
36
|
+
<SheetClose asChild>
|
|
37
|
+
<Button variant="outline">Cancel</Button>
|
|
38
|
+
</SheetClose>
|
|
39
|
+
<Button type="submit">Save Changes</Button>
|
|
40
|
+
</SheetFooter>
|
|
41
|
+
// Single action footer
|
|
42
|
+
<SheetFooter>
|
|
43
|
+
<SheetClose asChild>
|
|
44
|
+
<Button className="w-full">Done</Button>
|
|
45
|
+
</SheetClose>
|
|
46
|
+
</SheetFooter>
|
|
47
|
+
// Custom layout with multiple action groups
|
|
48
|
+
<SheetFooter className="flex-row justify-between">
|
|
49
|
+
<Button variant="ghost">Reset</Button>
|
|
50
|
+
<div className="flex gap-2">
|
|
51
|
+
<SheetClose asChild>
|
|
52
|
+
<Button variant="outline">Cancel</Button>
|
|
53
|
+
</SheetClose>
|
|
54
|
+
<Button>Save</Button>
|
|
55
|
+
</div>
|
|
56
|
+
</SheetFooter>
|
|
57
|
+
// Footer with destructive action
|
|
58
|
+
<SheetFooter>
|
|
59
|
+
<Button variant="destructive">Delete Account</Button>
|
|
60
|
+
<SheetClose asChild>
|
|
61
|
+
<Button variant="outline">Keep Account</Button>
|
|
62
|
+
</SheetClose>
|
|
63
|
+
</SheetFooter>
|
|
64
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# SheetHeader
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
SheetHeader - Header section for sheet content A container for the sheet's title and description, positioned at the top of the sheet content. Provides consistent spacing and layout for sheet headers. Should contain SheetTitle and optionally SheetDescription for proper accessibility and semantic structure.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { SheetHeader } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<SheetHeader
|
|
13
|
+
className="value"
|
|
14
|
+
>
|
|
15
|
+
{/* Your content here */}
|
|
16
|
+
</SheetHeader>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Component Props
|
|
20
|
+
|
|
21
|
+
### className
|
|
22
|
+
- **Type**: `string`
|
|
23
|
+
- **Required**: No
|
|
24
|
+
- **Description**: Additional CSS classes for styling customization
|
|
25
|
+
|
|
26
|
+
### children
|
|
27
|
+
- **Type**: `React.ReactNode`
|
|
28
|
+
- **Required**: No
|
|
29
|
+
- **Description**: Header content (typically SheetTitle and SheetDescription)
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
// Complete header with title and description
|
|
35
|
+
<SheetHeader>
|
|
36
|
+
<SheetTitle>Edit Profile</SheetTitle>
|
|
37
|
+
<SheetDescription>
|
|
38
|
+
Make changes to your profile information.
|
|
39
|
+
</SheetDescription>
|
|
40
|
+
</SheetHeader>
|
|
41
|
+
// Header with title only
|
|
42
|
+
<SheetHeader>
|
|
43
|
+
<SheetTitle>Quick Actions</SheetTitle>
|
|
44
|
+
</SheetHeader>
|
|
45
|
+
// With custom styling and border
|
|
46
|
+
<SheetHeader className="border-b pb-4 mb-4">
|
|
47
|
+
<SheetTitle>Advanced Settings</SheetTitle>
|
|
48
|
+
<SheetDescription>
|
|
49
|
+
Configure advanced options for your account.
|
|
50
|
+
</SheetDescription>
|
|
51
|
+
</SheetHeader>
|
|
52
|
+
```
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# SheetTitle
|
|
2
|
+
|
|
3
|
+
**Type**: component
|
|
4
|
+
|
|
5
|
+
SheetTitle - Title element for the sheet The main heading for the sheet content. Provides proper semantic heading and accessibility labeling for screen readers. Should be used within SheetHeader. This component is required for proper accessibility - every sheet must have a title.
|
|
6
|
+
|
|
7
|
+
## JSX Usage
|
|
8
|
+
|
|
9
|
+
```jsx
|
|
10
|
+
import { SheetTitle } from '@neynar/ui';
|
|
11
|
+
|
|
12
|
+
<SheetTitle
|
|
13
|
+
asChild={true}
|
|
14
|
+
className="value"
|
|
15
|
+
>
|
|
16
|
+
{/* Your content here */}
|
|
17
|
+
</SheetTitle>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Component Props
|
|
21
|
+
|
|
22
|
+
### asChild
|
|
23
|
+
- **Type**: `boolean`
|
|
24
|
+
- **Required**: No
|
|
25
|
+
- **Description**: When true, merges props with child element instead of rendering an h2
|
|
26
|
+
|
|
27
|
+
### className
|
|
28
|
+
- **Type**: `string`
|
|
29
|
+
- **Required**: No
|
|
30
|
+
- **Description**: Additional CSS classes for styling customization
|
|
31
|
+
|
|
32
|
+
### children
|
|
33
|
+
- **Type**: `React.ReactNode`
|
|
34
|
+
- **Required**: No
|
|
35
|
+
- **Description**: Title text content
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
// Standard usage in header
|
|
41
|
+
<SheetHeader>
|
|
42
|
+
<SheetTitle>Edit Profile</SheetTitle>
|
|
43
|
+
<SheetDescription>Update your profile information.</SheetDescription>
|
|
44
|
+
</SheetHeader>
|
|
45
|
+
// With custom styling
|
|
46
|
+
<SheetTitle className="text-lg text-blue-600">Settings</SheetTitle>
|
|
47
|
+
// As a custom heading level
|
|
48
|
+
<SheetTitle asChild>
|
|
49
|
+
<h1 className="text-2xl font-bold">Important Notice</h1>
|
|
50
|
+
</SheetTitle>
|
|
51
|
+
// Dynamic title content
|
|
52
|
+
<SheetTitle>Edit {selectedUser?.name || 'User'}</SheetTitle>
|
|
53
|
+
```
|