@neynar/ui 0.3.0 → 0.4.0

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 (320) hide show
  1. package/.llm/accordion-content.llm.md +67 -0
  2. package/.llm/accordion-item.llm.md +61 -0
  3. package/.llm/accordion-trigger.llm.md +69 -0
  4. package/.llm/accordion.llm.md +88 -0
  5. package/.llm/alert-description.llm.md +78 -0
  6. package/.llm/alert-dialog-action.llm.md +51 -0
  7. package/.llm/alert-dialog-cancel.llm.md +48 -0
  8. package/.llm/alert-dialog-content.llm.md +88 -0
  9. package/.llm/alert-dialog-description.llm.md +53 -0
  10. package/.llm/alert-dialog-footer.llm.md +41 -0
  11. package/.llm/alert-dialog-header.llm.md +39 -0
  12. package/.llm/alert-dialog-overlay.llm.md +44 -0
  13. package/.llm/alert-dialog-portal.llm.md +41 -0
  14. package/.llm/alert-dialog-title.llm.md +46 -0
  15. package/.llm/alert-dialog-trigger.llm.md +40 -0
  16. package/.llm/alert-dialog.llm.md +80 -0
  17. package/.llm/alert-title.llm.md +48 -0
  18. package/.llm/alert.llm.md +92 -0
  19. package/.llm/aspect-ratio.llm.md +41 -0
  20. package/.llm/avatar-fallback.llm.md +41 -0
  21. package/.llm/avatar-image.llm.md +48 -0
  22. package/.llm/avatar.llm.md +35 -0
  23. package/.llm/badge.llm.md +117 -0
  24. package/.llm/blockquote.llm.md +55 -0
  25. package/.llm/body-text-large.llm.md +49 -0
  26. package/.llm/body-text-small.llm.md +49 -0
  27. package/.llm/body-text.llm.md +52 -0
  28. package/.llm/breadcrumb-ellipsis.llm.md +73 -0
  29. package/.llm/breadcrumb-item.llm.md +53 -0
  30. package/.llm/breadcrumb-link.llm.md +84 -0
  31. package/.llm/breadcrumb-list.llm.md +54 -0
  32. package/.llm/breadcrumb-page.llm.md +52 -0
  33. package/.llm/breadcrumb-separator.llm.md +60 -0
  34. package/.llm/breadcrumb.llm.md +110 -0
  35. package/.llm/button-group-separator.llm.md +53 -0
  36. package/.llm/button-group-text.llm.md +56 -0
  37. package/.llm/button-group.llm.md +81 -0
  38. package/.llm/button.llm.md +281 -0
  39. package/.llm/calendar-day-button.llm.md +57 -0
  40. package/.llm/calendar.llm.md +340 -0
  41. package/.llm/caption.llm.md +48 -0
  42. package/.llm/card-action.llm.md +64 -0
  43. package/.llm/card-content.llm.md +48 -0
  44. package/.llm/card-description.llm.md +46 -0
  45. package/.llm/card-footer.llm.md +56 -0
  46. package/.llm/card-header.llm.md +53 -0
  47. package/.llm/card-title.llm.md +43 -0
  48. package/.llm/card.llm.md +100 -0
  49. package/.llm/carousel-content.llm.md +77 -0
  50. package/.llm/carousel-item.llm.md +96 -0
  51. package/.llm/carousel-next.llm.md +95 -0
  52. package/.llm/carousel-previous.llm.md +95 -0
  53. package/.llm/carousel.llm.md +211 -0
  54. package/.llm/chart-config.llm.md +71 -0
  55. package/.llm/chart-container.llm.md +148 -0
  56. package/.llm/chart-legend-content.llm.md +85 -0
  57. package/.llm/chart-legend.llm.md +144 -0
  58. package/.llm/chart-style.llm.md +28 -0
  59. package/.llm/chart-tooltip-content.llm.md +149 -0
  60. package/.llm/chart-tooltip.llm.md +184 -0
  61. package/.llm/checkbox.llm.md +100 -0
  62. package/.llm/cn.llm.md +46 -0
  63. package/.llm/code.llm.md +45 -0
  64. package/.llm/collapsible-content.llm.md +109 -0
  65. package/.llm/collapsible-trigger.llm.md +75 -0
  66. package/.llm/collapsible.llm.md +109 -0
  67. package/.llm/combobox-option.llm.md +53 -0
  68. package/.llm/combobox.llm.md +208 -0
  69. package/.llm/command-dialog.llm.md +112 -0
  70. package/.llm/command-empty.llm.md +63 -0
  71. package/.llm/command-group.llm.md +83 -0
  72. package/.llm/command-input.llm.md +82 -0
  73. package/.llm/command-item.llm.md +97 -0
  74. package/.llm/command-list.llm.md +53 -0
  75. package/.llm/command-loading.llm.md +48 -0
  76. package/.llm/command-separator.llm.md +44 -0
  77. package/.llm/command-shortcut.llm.md +63 -0
  78. package/.llm/command.llm.md +147 -0
  79. package/.llm/container.llm.md +236 -0
  80. package/.llm/context-menu-checkbox-item.llm.md +97 -0
  81. package/.llm/context-menu-content.llm.md +91 -0
  82. package/.llm/context-menu-group.llm.md +61 -0
  83. package/.llm/context-menu-item.llm.md +94 -0
  84. package/.llm/context-menu-label.llm.md +60 -0
  85. package/.llm/context-menu-portal.llm.md +49 -0
  86. package/.llm/context-menu-radio-group.llm.md +66 -0
  87. package/.llm/context-menu-radio-item.llm.md +76 -0
  88. package/.llm/context-menu-separator.llm.md +51 -0
  89. package/.llm/context-menu-shortcut.llm.md +57 -0
  90. package/.llm/context-menu-sub-content.llm.md +90 -0
  91. package/.llm/context-menu-sub-trigger.llm.md +73 -0
  92. package/.llm/context-menu-sub.llm.md +61 -0
  93. package/.llm/context-menu-trigger.llm.md +53 -0
  94. package/.llm/context-menu.llm.md +103 -0
  95. package/.llm/date-picker.llm.md +90 -0
  96. package/.llm/dialog-close.llm.md +61 -0
  97. package/.llm/dialog-content.llm.md +128 -0
  98. package/.llm/dialog-description.llm.md +44 -0
  99. package/.llm/dialog-footer.llm.md +38 -0
  100. package/.llm/dialog-header.llm.md +40 -0
  101. package/.llm/dialog-overlay.llm.md +57 -0
  102. package/.llm/dialog-portal.llm.md +47 -0
  103. package/.llm/dialog-title.llm.md +41 -0
  104. package/.llm/dialog-trigger.llm.md +51 -0
  105. package/.llm/dialog.llm.md +113 -0
  106. package/.llm/drawer-close.llm.md +53 -0
  107. package/.llm/drawer-content.llm.md +58 -0
  108. package/.llm/drawer-description.llm.md +54 -0
  109. package/.llm/drawer-footer.llm.md +67 -0
  110. package/.llm/drawer-header.llm.md +60 -0
  111. package/.llm/drawer-overlay.llm.md +40 -0
  112. package/.llm/drawer-portal.llm.md +42 -0
  113. package/.llm/drawer-title.llm.md +51 -0
  114. package/.llm/drawer-trigger.llm.md +44 -0
  115. package/.llm/drawer.llm.md +194 -0
  116. package/.llm/dropdown-menu-checkbox-item.llm.md +111 -0
  117. package/.llm/dropdown-menu-content.llm.md +109 -0
  118. package/.llm/dropdown-menu-group.llm.md +38 -0
  119. package/.llm/dropdown-menu-item.llm.md +94 -0
  120. package/.llm/dropdown-menu-label.llm.md +66 -0
  121. package/.llm/dropdown-menu-portal.llm.md +32 -0
  122. package/.llm/dropdown-menu-radio-group.llm.md +73 -0
  123. package/.llm/dropdown-menu-radio-item.llm.md +92 -0
  124. package/.llm/dropdown-menu-separator.llm.md +55 -0
  125. package/.llm/dropdown-menu-shortcut.llm.md +74 -0
  126. package/.llm/dropdown-menu-sub-content.llm.md +80 -0
  127. package/.llm/dropdown-menu-sub-trigger.llm.md +84 -0
  128. package/.llm/dropdown-menu-sub.llm.md +74 -0
  129. package/.llm/dropdown-menu-trigger.llm.md +48 -0
  130. package/.llm/dropdown-menu.llm.md +120 -0
  131. package/.llm/empty-content.llm.md +103 -0
  132. package/.llm/empty-description.llm.md +70 -0
  133. package/.llm/empty-header.llm.md +64 -0
  134. package/.llm/empty-media.llm.md +81 -0
  135. package/.llm/empty-state.llm.md +174 -0
  136. package/.llm/empty-title.llm.md +54 -0
  137. package/.llm/empty.llm.md +158 -0
  138. package/.llm/field-content.llm.md +28 -0
  139. package/.llm/field-description.llm.md +28 -0
  140. package/.llm/field-error.llm.md +41 -0
  141. package/.llm/field-group.llm.md +84 -0
  142. package/.llm/field-label.llm.md +28 -0
  143. package/.llm/field-legend.llm.md +77 -0
  144. package/.llm/field-separator.llm.md +35 -0
  145. package/.llm/field-set.llm.md +80 -0
  146. package/.llm/field-title.llm.md +28 -0
  147. package/.llm/field.llm.md +35 -0
  148. package/.llm/hover-card-content.llm.md +167 -0
  149. package/.llm/hover-card-trigger.llm.md +65 -0
  150. package/.llm/hover-card.llm.md +121 -0
  151. package/.llm/input-group-addon.llm.md +91 -0
  152. package/.llm/input-group-button.llm.md +120 -0
  153. package/.llm/input-group-input.llm.md +145 -0
  154. package/.llm/input-group-text.llm.md +75 -0
  155. package/.llm/input-group-textarea.llm.md +157 -0
  156. package/.llm/input-group.llm.md +108 -0
  157. package/.llm/input.llm.md +319 -0
  158. package/.llm/item-actions.llm.md +77 -0
  159. package/.llm/item-content.llm.md +73 -0
  160. package/.llm/item-description.llm.md +61 -0
  161. package/.llm/item-footer.llm.md +68 -0
  162. package/.llm/item-group.llm.md +73 -0
  163. package/.llm/item-header.llm.md +66 -0
  164. package/.llm/item-media.llm.md +75 -0
  165. package/.llm/item-separator.llm.md +80 -0
  166. package/.llm/item-title.llm.md +59 -0
  167. package/.llm/item.llm.md +115 -0
  168. package/.llm/kbd-group.llm.md +71 -0
  169. package/.llm/kbd.llm.md +71 -0
  170. package/.llm/label.llm.md +145 -0
  171. package/.llm/menubar-checkbox-item.llm.md +66 -0
  172. package/.llm/menubar-content.llm.md +128 -0
  173. package/.llm/menubar-group.llm.md +40 -0
  174. package/.llm/menubar-item.llm.md +62 -0
  175. package/.llm/menubar-label.llm.md +40 -0
  176. package/.llm/menubar-menu.llm.md +32 -0
  177. package/.llm/menubar-portal.llm.md +38 -0
  178. package/.llm/menubar-radio-group.llm.md +39 -0
  179. package/.llm/menubar-radio-item.llm.md +59 -0
  180. package/.llm/menubar-separator.llm.md +35 -0
  181. package/.llm/menubar-shortcut.llm.md +37 -0
  182. package/.llm/menubar-sub-content.llm.md +127 -0
  183. package/.llm/menubar-sub-trigger.llm.md +51 -0
  184. package/.llm/menubar-sub.llm.md +53 -0
  185. package/.llm/menubar-trigger.llm.md +37 -0
  186. package/.llm/menubar.llm.md +115 -0
  187. package/.llm/navigation-menu-content.llm.md +116 -0
  188. package/.llm/navigation-menu-indicator.llm.md +68 -0
  189. package/.llm/navigation-menu-item.llm.md +62 -0
  190. package/.llm/navigation-menu-link.llm.md +109 -0
  191. package/.llm/navigation-menu-list.llm.md +52 -0
  192. package/.llm/navigation-menu-trigger-style.llm.md +22 -0
  193. package/.llm/navigation-menu-trigger.llm.md +57 -0
  194. package/.llm/navigation-menu-viewport.llm.md +51 -0
  195. package/.llm/navigation-menu.llm.md +184 -0
  196. package/.llm/overline.llm.md +51 -0
  197. package/.llm/page-title.llm.md +52 -0
  198. package/.llm/pagination-content.llm.md +60 -0
  199. package/.llm/pagination-ellipsis.llm.md +107 -0
  200. package/.llm/pagination-item.llm.md +59 -0
  201. package/.llm/pagination-link.llm.md +150 -0
  202. package/.llm/pagination-next.llm.md +115 -0
  203. package/.llm/pagination-previous.llm.md +115 -0
  204. package/.llm/pagination.llm.md +190 -0
  205. package/.llm/popover-anchor.llm.md +53 -0
  206. package/.llm/popover-content.llm.md +109 -0
  207. package/.llm/popover-trigger.llm.md +54 -0
  208. package/.llm/popover.llm.md +116 -0
  209. package/.llm/progress.llm.md +76 -0
  210. package/.llm/radio-group-indicator.llm.md +28 -0
  211. package/.llm/radio-group-item.llm.md +40 -0
  212. package/.llm/radio-group.llm.md +76 -0
  213. package/.llm/resizable-handle.llm.md +156 -0
  214. package/.llm/resizable-panel-group.llm.md +149 -0
  215. package/.llm/resizable-panel.llm.md +157 -0
  216. package/.llm/scroll-area-corner.llm.md +41 -0
  217. package/.llm/scroll-area-thumb.llm.md +39 -0
  218. package/.llm/scroll-area-viewport.llm.md +60 -0
  219. package/.llm/scroll-area.llm.md +125 -0
  220. package/.llm/scroll-bar.llm.md +78 -0
  221. package/.llm/sdk-items-registry.json +2984 -0
  222. package/.llm/section-title.llm.md +48 -0
  223. package/.llm/select-content.llm.md +139 -0
  224. package/.llm/select-group.llm.md +60 -0
  225. package/.llm/select-item.llm.md +75 -0
  226. package/.llm/select-label.llm.md +62 -0
  227. package/.llm/select-scroll-down-button.llm.md +45 -0
  228. package/.llm/select-scroll-up-button.llm.md +45 -0
  229. package/.llm/select-separator.llm.md +59 -0
  230. package/.llm/select-trigger.llm.md +66 -0
  231. package/.llm/select-value.llm.md +67 -0
  232. package/.llm/select.llm.md +159 -0
  233. package/.llm/separator.llm.md +129 -0
  234. package/.llm/sheet-close.llm.md +49 -0
  235. package/.llm/sheet-content.llm.md +115 -0
  236. package/.llm/sheet-description.llm.md +62 -0
  237. package/.llm/sheet-footer.llm.md +64 -0
  238. package/.llm/sheet-header.llm.md +52 -0
  239. package/.llm/sheet-title.llm.md +53 -0
  240. package/.llm/sheet-trigger.llm.md +46 -0
  241. package/.llm/sheet.llm.md +126 -0
  242. package/.llm/sidebar-content.llm.md +63 -0
  243. package/.llm/sidebar-footer.llm.md +50 -0
  244. package/.llm/sidebar-group-action.llm.md +60 -0
  245. package/.llm/sidebar-group-content.llm.md +64 -0
  246. package/.llm/sidebar-group-label.llm.md +53 -0
  247. package/.llm/sidebar-group.llm.md +56 -0
  248. package/.llm/sidebar-header.llm.md +67 -0
  249. package/.llm/sidebar-input.llm.md +50 -0
  250. package/.llm/sidebar-inset.llm.md +52 -0
  251. package/.llm/sidebar-menu-action.llm.md +84 -0
  252. package/.llm/sidebar-menu-badge.llm.md +60 -0
  253. package/.llm/sidebar-menu-button.llm.md +103 -0
  254. package/.llm/sidebar-menu-item.llm.md +75 -0
  255. package/.llm/sidebar-menu-skeleton.llm.md +76 -0
  256. package/.llm/sidebar-menu-sub-button.llm.md +85 -0
  257. package/.llm/sidebar-menu-sub-item.llm.md +54 -0
  258. package/.llm/sidebar-menu-sub.llm.md +74 -0
  259. package/.llm/sidebar-menu.llm.md +65 -0
  260. package/.llm/sidebar-provider.llm.md +79 -0
  261. package/.llm/sidebar-rail.llm.md +34 -0
  262. package/.llm/sidebar-separator.llm.md +57 -0
  263. package/.llm/sidebar-trigger.llm.md +49 -0
  264. package/.llm/sidebar.llm.md +129 -0
  265. package/.llm/skeleton.llm.md +134 -0
  266. package/.llm/slider.llm.md +173 -0
  267. package/.llm/spinner.llm.md +182 -0
  268. package/.llm/stack.llm.md +28 -0
  269. package/.llm/subsection-title.llm.md +46 -0
  270. package/.llm/switch.llm.md +76 -0
  271. package/.llm/table-body.llm.md +36 -0
  272. package/.llm/table-caption.llm.md +48 -0
  273. package/.llm/table-cell.llm.md +53 -0
  274. package/.llm/table-footer.llm.md +41 -0
  275. package/.llm/table-head.llm.md +69 -0
  276. package/.llm/table-header.llm.md +41 -0
  277. package/.llm/table-row.llm.md +42 -0
  278. package/.llm/table.llm.md +123 -0
  279. package/.llm/tabs-content.llm.md +47 -0
  280. package/.llm/tabs-list.llm.md +41 -0
  281. package/.llm/tabs-trigger.llm.md +47 -0
  282. package/.llm/tabs.llm.md +71 -0
  283. package/.llm/text-field.llm.md +327 -0
  284. package/.llm/textarea.llm.md +311 -0
  285. package/.llm/theme-preference.llm.md +25 -0
  286. package/.llm/theme-toggle.llm.md +57 -0
  287. package/.llm/theme.llm.md +14 -0
  288. package/.llm/toaster.llm.md +193 -0
  289. package/.llm/toggle-group-item.llm.md +59 -0
  290. package/.llm/toggle-group.llm.md +101 -0
  291. package/.llm/toggle.llm.md +40 -0
  292. package/.llm/tooltip-content.llm.md +185 -0
  293. package/.llm/tooltip-provider.llm.md +68 -0
  294. package/.llm/tooltip-trigger.llm.md +70 -0
  295. package/.llm/tooltip.llm.md +129 -0
  296. package/.llm/use-carousel.llm.md +55 -0
  297. package/.llm/use-command-state.llm.md +32 -0
  298. package/.llm/use-is-mobile.llm.md +73 -0
  299. package/.llm/use-sidebar.llm.md +61 -0
  300. package/dist/components/ui/scroll-area.d.ts +5 -5
  301. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  302. package/dist/components/ui/stack.d.ts.map +1 -1
  303. package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -1
  304. package/dist/components/ui/stories/typography.stories.d.ts +8 -108
  305. package/dist/components/ui/stories/typography.stories.d.ts.map +1 -1
  306. package/dist/components/ui/theme-toggle.d.ts +0 -3
  307. package/dist/components/ui/theme-toggle.d.ts.map +1 -1
  308. package/dist/components/ui/theme.d.ts.map +1 -1
  309. package/dist/components/ui/typography.d.ts +211 -474
  310. package/dist/components/ui/typography.d.ts.map +1 -1
  311. package/dist/index.js +5160 -9875
  312. package/dist/index.js.map +1 -1
  313. package/dist/tsconfig.tsbuildinfo +1 -1
  314. package/package.json +2 -2
  315. package/src/components/ui/stack.tsx +3 -1
  316. package/src/components/ui/stories/typography.stories.tsx +261 -1512
  317. package/src/components/ui/theme-toggle.tsx +1 -3
  318. package/src/components/ui/theme.tsx +6 -1
  319. package/src/components/ui/typography.tsx +416 -1136
  320. package/src/styles/globals.css +57 -106
@@ -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
+ ```