@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.
Files changed (320) hide show
  1. package/.llm/a.llm.md +131 -0
  2. package/.llm/accordion-content.llm.md +67 -0
  3. package/.llm/accordion-item.llm.md +61 -0
  4. package/.llm/accordion-trigger.llm.md +69 -0
  5. package/.llm/accordion.llm.md +88 -0
  6. package/.llm/alert-description.llm.md +78 -0
  7. package/.llm/alert-dialog-action.llm.md +51 -0
  8. package/.llm/alert-dialog-cancel.llm.md +48 -0
  9. package/.llm/alert-dialog-content.llm.md +88 -0
  10. package/.llm/alert-dialog-description.llm.md +53 -0
  11. package/.llm/alert-dialog-footer.llm.md +41 -0
  12. package/.llm/alert-dialog-header.llm.md +39 -0
  13. package/.llm/alert-dialog-overlay.llm.md +44 -0
  14. package/.llm/alert-dialog-portal.llm.md +41 -0
  15. package/.llm/alert-dialog-title.llm.md +46 -0
  16. package/.llm/alert-dialog-trigger.llm.md +40 -0
  17. package/.llm/alert-dialog.llm.md +80 -0
  18. package/.llm/alert-title.llm.md +48 -0
  19. package/.llm/alert.llm.md +92 -0
  20. package/.llm/aspect-ratio.llm.md +41 -0
  21. package/.llm/avatar-fallback.llm.md +41 -0
  22. package/.llm/avatar-image.llm.md +48 -0
  23. package/.llm/avatar.llm.md +35 -0
  24. package/.llm/badge.llm.md +117 -0
  25. package/.llm/blockquote.llm.md +117 -0
  26. package/.llm/breadcrumb-ellipsis.llm.md +73 -0
  27. package/.llm/breadcrumb-item.llm.md +53 -0
  28. package/.llm/breadcrumb-link.llm.md +84 -0
  29. package/.llm/breadcrumb-list.llm.md +54 -0
  30. package/.llm/breadcrumb-page.llm.md +52 -0
  31. package/.llm/breadcrumb-separator.llm.md +60 -0
  32. package/.llm/breadcrumb.llm.md +110 -0
  33. package/.llm/button-group-separator.llm.md +53 -0
  34. package/.llm/button-group-text.llm.md +56 -0
  35. package/.llm/button-group.llm.md +81 -0
  36. package/.llm/button.llm.md +281 -0
  37. package/.llm/calendar-day-button.llm.md +57 -0
  38. package/.llm/calendar.llm.md +340 -0
  39. package/.llm/card-action.llm.md +64 -0
  40. package/.llm/card-content.llm.md +48 -0
  41. package/.llm/card-description.llm.md +46 -0
  42. package/.llm/card-footer.llm.md +56 -0
  43. package/.llm/card-header.llm.md +53 -0
  44. package/.llm/card-title.llm.md +43 -0
  45. package/.llm/card.llm.md +100 -0
  46. package/.llm/carousel-content.llm.md +77 -0
  47. package/.llm/carousel-item.llm.md +96 -0
  48. package/.llm/carousel-next.llm.md +95 -0
  49. package/.llm/carousel-previous.llm.md +95 -0
  50. package/.llm/carousel.llm.md +211 -0
  51. package/.llm/chart-config.llm.md +71 -0
  52. package/.llm/chart-container.llm.md +148 -0
  53. package/.llm/chart-legend-content.llm.md +85 -0
  54. package/.llm/chart-legend.llm.md +144 -0
  55. package/.llm/chart-style.llm.md +28 -0
  56. package/.llm/chart-tooltip-content.llm.md +149 -0
  57. package/.llm/chart-tooltip.llm.md +184 -0
  58. package/.llm/checkbox.llm.md +100 -0
  59. package/.llm/cn.llm.md +46 -0
  60. package/.llm/code.llm.md +103 -0
  61. package/.llm/collapsible-content.llm.md +109 -0
  62. package/.llm/collapsible-trigger.llm.md +75 -0
  63. package/.llm/collapsible.llm.md +109 -0
  64. package/.llm/combobox-option.llm.md +53 -0
  65. package/.llm/combobox.llm.md +208 -0
  66. package/.llm/command-dialog.llm.md +112 -0
  67. package/.llm/command-empty.llm.md +63 -0
  68. package/.llm/command-group.llm.md +83 -0
  69. package/.llm/command-input.llm.md +82 -0
  70. package/.llm/command-item.llm.md +97 -0
  71. package/.llm/command-list.llm.md +53 -0
  72. package/.llm/command-loading.llm.md +48 -0
  73. package/.llm/command-separator.llm.md +44 -0
  74. package/.llm/command-shortcut.llm.md +63 -0
  75. package/.llm/command.llm.md +147 -0
  76. package/.llm/container.llm.md +236 -0
  77. package/.llm/context-menu-checkbox-item.llm.md +97 -0
  78. package/.llm/context-menu-content.llm.md +91 -0
  79. package/.llm/context-menu-group.llm.md +61 -0
  80. package/.llm/context-menu-item.llm.md +94 -0
  81. package/.llm/context-menu-label.llm.md +60 -0
  82. package/.llm/context-menu-portal.llm.md +49 -0
  83. package/.llm/context-menu-radio-group.llm.md +66 -0
  84. package/.llm/context-menu-radio-item.llm.md +76 -0
  85. package/.llm/context-menu-separator.llm.md +51 -0
  86. package/.llm/context-menu-shortcut.llm.md +57 -0
  87. package/.llm/context-menu-sub-content.llm.md +90 -0
  88. package/.llm/context-menu-sub-trigger.llm.md +73 -0
  89. package/.llm/context-menu-sub.llm.md +61 -0
  90. package/.llm/context-menu-trigger.llm.md +53 -0
  91. package/.llm/context-menu.llm.md +103 -0
  92. package/.llm/date-picker.llm.md +90 -0
  93. package/.llm/dialog-close.llm.md +61 -0
  94. package/.llm/dialog-content.llm.md +128 -0
  95. package/.llm/dialog-description.llm.md +44 -0
  96. package/.llm/dialog-footer.llm.md +38 -0
  97. package/.llm/dialog-header.llm.md +40 -0
  98. package/.llm/dialog-overlay.llm.md +57 -0
  99. package/.llm/dialog-portal.llm.md +47 -0
  100. package/.llm/dialog-title.llm.md +41 -0
  101. package/.llm/dialog-trigger.llm.md +51 -0
  102. package/.llm/dialog.llm.md +113 -0
  103. package/.llm/drawer-close.llm.md +53 -0
  104. package/.llm/drawer-content.llm.md +58 -0
  105. package/.llm/drawer-description.llm.md +54 -0
  106. package/.llm/drawer-footer.llm.md +67 -0
  107. package/.llm/drawer-header.llm.md +60 -0
  108. package/.llm/drawer-overlay.llm.md +40 -0
  109. package/.llm/drawer-portal.llm.md +42 -0
  110. package/.llm/drawer-title.llm.md +51 -0
  111. package/.llm/drawer-trigger.llm.md +44 -0
  112. package/.llm/drawer.llm.md +194 -0
  113. package/.llm/dropdown-menu-checkbox-item.llm.md +111 -0
  114. package/.llm/dropdown-menu-content.llm.md +109 -0
  115. package/.llm/dropdown-menu-group.llm.md +38 -0
  116. package/.llm/dropdown-menu-item.llm.md +94 -0
  117. package/.llm/dropdown-menu-label.llm.md +66 -0
  118. package/.llm/dropdown-menu-portal.llm.md +32 -0
  119. package/.llm/dropdown-menu-radio-group.llm.md +73 -0
  120. package/.llm/dropdown-menu-radio-item.llm.md +92 -0
  121. package/.llm/dropdown-menu-separator.llm.md +55 -0
  122. package/.llm/dropdown-menu-shortcut.llm.md +74 -0
  123. package/.llm/dropdown-menu-sub-content.llm.md +80 -0
  124. package/.llm/dropdown-menu-sub-trigger.llm.md +84 -0
  125. package/.llm/dropdown-menu-sub.llm.md +74 -0
  126. package/.llm/dropdown-menu-trigger.llm.md +48 -0
  127. package/.llm/dropdown-menu.llm.md +120 -0
  128. package/.llm/empty-content.llm.md +103 -0
  129. package/.llm/empty-description.llm.md +70 -0
  130. package/.llm/empty-header.llm.md +64 -0
  131. package/.llm/empty-media.llm.md +81 -0
  132. package/.llm/empty-state.llm.md +174 -0
  133. package/.llm/empty-title.llm.md +54 -0
  134. package/.llm/empty.llm.md +158 -0
  135. package/.llm/field-content.llm.md +28 -0
  136. package/.llm/field-description.llm.md +28 -0
  137. package/.llm/field-error.llm.md +41 -0
  138. package/.llm/field-group.llm.md +84 -0
  139. package/.llm/field-label.llm.md +28 -0
  140. package/.llm/field-legend.llm.md +77 -0
  141. package/.llm/field-separator.llm.md +35 -0
  142. package/.llm/field-set.llm.md +80 -0
  143. package/.llm/field-title.llm.md +28 -0
  144. package/.llm/field.llm.md +35 -0
  145. package/.llm/h1.llm.md +108 -0
  146. package/.llm/h2.llm.md +108 -0
  147. package/.llm/h3.llm.md +106 -0
  148. package/.llm/h4.llm.md +104 -0
  149. package/.llm/h5.llm.md +105 -0
  150. package/.llm/h6.llm.md +105 -0
  151. package/.llm/hover-card-content.llm.md +167 -0
  152. package/.llm/hover-card-trigger.llm.md +65 -0
  153. package/.llm/hover-card.llm.md +121 -0
  154. package/.llm/input-group-addon.llm.md +91 -0
  155. package/.llm/input-group-button.llm.md +120 -0
  156. package/.llm/input-group-input.llm.md +145 -0
  157. package/.llm/input-group-text.llm.md +75 -0
  158. package/.llm/input-group-textarea.llm.md +157 -0
  159. package/.llm/input-group.llm.md +108 -0
  160. package/.llm/input.llm.md +319 -0
  161. package/.llm/item-actions.llm.md +77 -0
  162. package/.llm/item-content.llm.md +73 -0
  163. package/.llm/item-description.llm.md +61 -0
  164. package/.llm/item-footer.llm.md +68 -0
  165. package/.llm/item-group.llm.md +73 -0
  166. package/.llm/item-header.llm.md +66 -0
  167. package/.llm/item-media.llm.md +75 -0
  168. package/.llm/item-separator.llm.md +80 -0
  169. package/.llm/item-title.llm.md +59 -0
  170. package/.llm/item.llm.md +115 -0
  171. package/.llm/kbd-group.llm.md +71 -0
  172. package/.llm/kbd.llm.md +71 -0
  173. package/.llm/label.llm.md +145 -0
  174. package/.llm/lead.llm.md +114 -0
  175. package/.llm/menubar-checkbox-item.llm.md +66 -0
  176. package/.llm/menubar-content.llm.md +128 -0
  177. package/.llm/menubar-group.llm.md +40 -0
  178. package/.llm/menubar-item.llm.md +62 -0
  179. package/.llm/menubar-label.llm.md +40 -0
  180. package/.llm/menubar-menu.llm.md +32 -0
  181. package/.llm/menubar-portal.llm.md +38 -0
  182. package/.llm/menubar-radio-group.llm.md +39 -0
  183. package/.llm/menubar-radio-item.llm.md +59 -0
  184. package/.llm/menubar-separator.llm.md +35 -0
  185. package/.llm/menubar-shortcut.llm.md +37 -0
  186. package/.llm/menubar-sub-content.llm.md +127 -0
  187. package/.llm/menubar-sub-trigger.llm.md +51 -0
  188. package/.llm/menubar-sub.llm.md +53 -0
  189. package/.llm/menubar-trigger.llm.md +37 -0
  190. package/.llm/menubar.llm.md +115 -0
  191. package/.llm/navigation-menu-content.llm.md +116 -0
  192. package/.llm/navigation-menu-indicator.llm.md +68 -0
  193. package/.llm/navigation-menu-item.llm.md +62 -0
  194. package/.llm/navigation-menu-link.llm.md +109 -0
  195. package/.llm/navigation-menu-list.llm.md +52 -0
  196. package/.llm/navigation-menu-trigger-style.llm.md +22 -0
  197. package/.llm/navigation-menu-trigger.llm.md +57 -0
  198. package/.llm/navigation-menu-viewport.llm.md +51 -0
  199. package/.llm/navigation-menu.llm.md +184 -0
  200. package/.llm/p.llm.md +110 -0
  201. package/.llm/pagination-content.llm.md +60 -0
  202. package/.llm/pagination-ellipsis.llm.md +107 -0
  203. package/.llm/pagination-item.llm.md +59 -0
  204. package/.llm/pagination-link.llm.md +150 -0
  205. package/.llm/pagination-next.llm.md +115 -0
  206. package/.llm/pagination-previous.llm.md +115 -0
  207. package/.llm/pagination.llm.md +190 -0
  208. package/.llm/popover-anchor.llm.md +53 -0
  209. package/.llm/popover-content.llm.md +109 -0
  210. package/.llm/popover-trigger.llm.md +54 -0
  211. package/.llm/popover.llm.md +116 -0
  212. package/.llm/progress.llm.md +76 -0
  213. package/.llm/radio-group-indicator.llm.md +28 -0
  214. package/.llm/radio-group-item.llm.md +40 -0
  215. package/.llm/radio-group.llm.md +76 -0
  216. package/.llm/resizable-handle.llm.md +156 -0
  217. package/.llm/resizable-panel-group.llm.md +149 -0
  218. package/.llm/resizable-panel.llm.md +157 -0
  219. package/.llm/scroll-area-corner.llm.md +41 -0
  220. package/.llm/scroll-area-thumb.llm.md +39 -0
  221. package/.llm/scroll-area-viewport.llm.md +60 -0
  222. package/.llm/scroll-area.llm.md +125 -0
  223. package/.llm/scroll-bar.llm.md +78 -0
  224. package/.llm/sdk-items-registry.json +3022 -0
  225. package/.llm/select-content.llm.md +139 -0
  226. package/.llm/select-group.llm.md +60 -0
  227. package/.llm/select-item.llm.md +75 -0
  228. package/.llm/select-label.llm.md +62 -0
  229. package/.llm/select-scroll-down-button.llm.md +45 -0
  230. package/.llm/select-scroll-up-button.llm.md +45 -0
  231. package/.llm/select-separator.llm.md +59 -0
  232. package/.llm/select-trigger.llm.md +66 -0
  233. package/.llm/select-value.llm.md +67 -0
  234. package/.llm/select.llm.md +159 -0
  235. package/.llm/separator.llm.md +129 -0
  236. package/.llm/sheet-close.llm.md +49 -0
  237. package/.llm/sheet-content.llm.md +115 -0
  238. package/.llm/sheet-description.llm.md +62 -0
  239. package/.llm/sheet-footer.llm.md +64 -0
  240. package/.llm/sheet-header.llm.md +52 -0
  241. package/.llm/sheet-title.llm.md +53 -0
  242. package/.llm/sheet-trigger.llm.md +46 -0
  243. package/.llm/sheet.llm.md +126 -0
  244. package/.llm/sidebar-content.llm.md +63 -0
  245. package/.llm/sidebar-footer.llm.md +50 -0
  246. package/.llm/sidebar-group-action.llm.md +60 -0
  247. package/.llm/sidebar-group-content.llm.md +64 -0
  248. package/.llm/sidebar-group-label.llm.md +53 -0
  249. package/.llm/sidebar-group.llm.md +56 -0
  250. package/.llm/sidebar-header.llm.md +67 -0
  251. package/.llm/sidebar-input.llm.md +50 -0
  252. package/.llm/sidebar-inset.llm.md +52 -0
  253. package/.llm/sidebar-menu-action.llm.md +84 -0
  254. package/.llm/sidebar-menu-badge.llm.md +60 -0
  255. package/.llm/sidebar-menu-button.llm.md +103 -0
  256. package/.llm/sidebar-menu-item.llm.md +75 -0
  257. package/.llm/sidebar-menu-skeleton.llm.md +76 -0
  258. package/.llm/sidebar-menu-sub-button.llm.md +85 -0
  259. package/.llm/sidebar-menu-sub-item.llm.md +54 -0
  260. package/.llm/sidebar-menu-sub.llm.md +74 -0
  261. package/.llm/sidebar-menu.llm.md +65 -0
  262. package/.llm/sidebar-provider.llm.md +79 -0
  263. package/.llm/sidebar-rail.llm.md +34 -0
  264. package/.llm/sidebar-separator.llm.md +57 -0
  265. package/.llm/sidebar-trigger.llm.md +49 -0
  266. package/.llm/sidebar.llm.md +129 -0
  267. package/.llm/skeleton.llm.md +134 -0
  268. package/.llm/slider.llm.md +173 -0
  269. package/.llm/small.llm.md +110 -0
  270. package/.llm/span.llm.md +118 -0
  271. package/.llm/spinner.llm.md +182 -0
  272. package/.llm/stack.llm.md +28 -0
  273. package/.llm/strong.llm.md +110 -0
  274. package/.llm/switch.llm.md +76 -0
  275. package/.llm/table-body.llm.md +36 -0
  276. package/.llm/table-caption.llm.md +48 -0
  277. package/.llm/table-cell.llm.md +53 -0
  278. package/.llm/table-footer.llm.md +41 -0
  279. package/.llm/table-head.llm.md +69 -0
  280. package/.llm/table-header.llm.md +41 -0
  281. package/.llm/table-row.llm.md +42 -0
  282. package/.llm/table.llm.md +123 -0
  283. package/.llm/tabs-content.llm.md +47 -0
  284. package/.llm/tabs-list.llm.md +41 -0
  285. package/.llm/tabs-trigger.llm.md +47 -0
  286. package/.llm/tabs.llm.md +71 -0
  287. package/.llm/text-field.llm.md +327 -0
  288. package/.llm/textarea.llm.md +311 -0
  289. package/.llm/theme-preference.llm.md +25 -0
  290. package/.llm/theme-toggle.llm.md +57 -0
  291. package/.llm/theme.llm.md +14 -0
  292. package/.llm/toast.llm.md +32 -0
  293. package/.llm/toaster.llm.md +193 -0
  294. package/.llm/toggle-group-item.llm.md +59 -0
  295. package/.llm/toggle-group.llm.md +101 -0
  296. package/.llm/toggle.llm.md +40 -0
  297. package/.llm/tooltip-content.llm.md +185 -0
  298. package/.llm/tooltip-provider.llm.md +68 -0
  299. package/.llm/tooltip-trigger.llm.md +70 -0
  300. package/.llm/tooltip.llm.md +129 -0
  301. package/.llm/typography.llm.md +161 -0
  302. package/.llm/use-carousel.llm.md +55 -0
  303. package/.llm/use-command-state.llm.md +32 -0
  304. package/.llm/use-is-mobile.llm.md +73 -0
  305. package/.llm/use-sidebar.llm.md +61 -0
  306. package/dist/components/ui/scroll-area.d.ts +5 -5
  307. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  308. package/dist/components/ui/stack.d.ts.map +1 -1
  309. package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -1
  310. package/dist/components/ui/theme-toggle.d.ts +0 -3
  311. package/dist/components/ui/theme-toggle.d.ts.map +1 -1
  312. package/dist/components/ui/theme.d.ts.map +1 -1
  313. package/dist/index.js +4972 -9636
  314. package/dist/index.js.map +1 -1
  315. package/dist/tsconfig.tsbuildinfo +1 -1
  316. package/package.json +2 -2
  317. package/src/components/ui/stack.tsx +3 -1
  318. package/src/components/ui/theme-toggle.tsx +1 -3
  319. package/src/components/ui/theme.tsx +6 -1
  320. package/src/styles/globals.css +57 -85
@@ -0,0 +1,157 @@
1
+ # ResizablePanel
2
+
3
+ **Type**: component
4
+
5
+ Individual resizable panel within a panel group with size constraints and callbacks ResizablePanel represents a single resizable section within a ResizablePanelGroup. Supports flexible sizing constraints, collapse/expand behavior, and programmatic control through imperative API. Each panel automatically handles content overflow and maintains accessibility during resize operations with proper focus and scroll management.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ResizablePanel } from '@neynar/ui';
11
+
12
+ <ResizablePanel
13
+ id="value"
14
+ order={0}
15
+ defaultSize={0}
16
+ minSize={0}
17
+ maxSize={0}
18
+ collapsible={true}
19
+ collapsedSize={0}
20
+ onCollapse={handleCollapse}
21
+ onExpand={handleExpand}
22
+ onResize={handleResize}
23
+ tagName={value}
24
+ className="value"
25
+ style={value}
26
+ >
27
+ {/* Your content here */}
28
+ </ResizablePanel>
29
+ ```
30
+
31
+ ## Component Props
32
+
33
+ ### id
34
+ - **Type**: `string`
35
+ - **Required**: No
36
+ - **Description**: Unique identifier for programmatic control and conditional rendering
37
+
38
+ ### order
39
+ - **Type**: `number`
40
+ - **Required**: No
41
+ - **Description**: Display order within group, important when panels are conditionally rendered
42
+
43
+ ### defaultSize
44
+ - **Type**: `number`
45
+ - **Required**: No
46
+ - **Description**: Initial size as percentage (0-100) when panel first mounts
47
+
48
+ ### minSize
49
+ - **Type**: `number`
50
+ - **Required**: No
51
+ - **Description**: Minimum size constraint as percentage (0-100)
52
+
53
+ ### maxSize
54
+ - **Type**: `number`
55
+ - **Required**: No
56
+ - **Description**: Maximum size constraint as percentage (0-100)
57
+
58
+ ### collapsible
59
+ - **Type**: `boolean`
60
+ - **Required**: No
61
+ - **Description**: Whether panel can collapse beyond minSize to collapsedSize
62
+
63
+ ### collapsedSize
64
+ - **Type**: `number`
65
+ - **Required**: No
66
+ - **Description**: Size when fully collapsed, must be between 0 and minSize
67
+
68
+ ### onCollapse
69
+ - **Type**: `() => void`
70
+ - **Required**: No
71
+ - **Description**: Callback fired when panel collapses to minimum size
72
+
73
+ ### onExpand
74
+ - **Type**: `() => void`
75
+ - **Required**: No
76
+ - **Description**: Callback fired when panel expands from collapsed state
77
+
78
+ ### onResize
79
+ - **Type**: `(size: number, prevSize: number | undefined) => void`
80
+ - **Required**: No
81
+ - **Description**: Callback fired during resize with current and previous sizes
82
+
83
+ ### tagName
84
+ - **Type**: `keyof React.JSX.IntrinsicElements`
85
+ - **Required**: No
86
+ - **Description**: No description available
87
+
88
+ ### className
89
+ - **Type**: `string`
90
+ - **Required**: No
91
+ - **Description**: Additional CSS classes for custom styling
92
+
93
+ ### style
94
+ - **Type**: `React.CSSProperties`
95
+ - **Required**: No
96
+ - **Description**: No description available
97
+
98
+ ### children
99
+ - **Type**: `React.ReactNode`
100
+ - **Required**: No
101
+ - **Description**: Panel content elements
102
+
103
+ ## Examples
104
+
105
+ ### Example 1
106
+ ```tsx
107
+ // Basic panel with default size
108
+ <ResizablePanel defaultSize={50}>
109
+ <div className="p-4">Panel content</div>
110
+ </ResizablePanel>
111
+ ```
112
+ ### Example 2
113
+ ```tsx
114
+ // Panel with size constraints and callbacks
115
+ <ResizablePanel
116
+ id="sidebar"
117
+ defaultSize={30}
118
+ minSize={20}
119
+ maxSize={60}
120
+ collapsible
121
+ onCollapse={() => console.log('Sidebar collapsed')}
122
+ onExpand={() => console.log('Sidebar expanded')}
123
+ onResize={(size, prevSize) => console.log(`Resized from ${prevSize}% to ${size}%`)}
124
+ >
125
+ <aside className="p-4">Collapsible sidebar content</aside>
126
+ </ResizablePanel>
127
+ ```
128
+ ### Example 3
129
+ ```tsx
130
+ // Panel with conditional rendering support
131
+ <ResizablePanel
132
+ id="dynamic-panel"
133
+ order={1}
134
+ defaultSize={40}
135
+ collapsible
136
+ collapsedSize={5}
137
+ >
138
+ {isExpanded ? <FullContent /> : <CollapsedView />}
139
+ </ResizablePanel>
140
+ ```
141
+ ### Example 4
142
+ ```tsx
143
+ // Panel with imperative control via ref
144
+ function PanelWithControl() {
145
+ const panelRef = useRef<ImperativePanelHandle>(null);
146
+ return (
147
+ <>
148
+ <button onClick={() => panelRef.current?.collapse()}>
149
+ Collapse Panel
150
+ </button>
151
+ <ResizablePanel ref={panelRef} defaultSize={50} collapsible>
152
+ <div>Controlled panel content</div>
153
+ </ResizablePanel>
154
+ </>
155
+ );
156
+ }
157
+ ```
@@ -0,0 +1,41 @@
1
+ # ScrollAreaCorner
2
+
3
+ **Type**: component
4
+
5
+ ScrollAreaCorner - The corner element where horizontal and vertical scrollbars meet Appears when both horizontal and vertical scrollbars are present. Usually handled automatically by the ScrollArea component but can be customized for specific layout requirements.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ScrollAreaCorner } from '@neynar/ui';
11
+
12
+ <ScrollAreaCorner
13
+ asChild={true}
14
+ className="value"
15
+ />
16
+ ```
17
+
18
+ ## Component Props
19
+
20
+ ### asChild
21
+ - **Type**: `boolean`
22
+ - **Required**: No
23
+ - **Description**: No description available
24
+
25
+ ### className
26
+ - **Type**: `string`
27
+ - **Required**: No
28
+ - **Description**: No description available
29
+
30
+ ## Examples
31
+
32
+ ```tsx
33
+ // Custom corner styling
34
+ <ScrollArea className="h-64 w-64">
35
+ <div className="w-96 h-96 p-4">
36
+ Content that overflows both axes
37
+ </div>
38
+ <ScrollBar orientation="horizontal" />
39
+ <ScrollAreaCorner className="bg-gray-100" />
40
+ </ScrollArea>
41
+ ```
@@ -0,0 +1,39 @@
1
+ # ScrollAreaThumb
2
+
3
+ **Type**: component
4
+
5
+ ScrollAreaThumb - The draggable thumb element within the scrollbar Represents the current scroll position and can be dragged to scroll content. Usually styled automatically as part of the ScrollBar component, but can be customized for specific design requirements.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ScrollAreaThumb } from '@neynar/ui';
11
+
12
+ <ScrollAreaThumb
13
+ asChild={true}
14
+ className="value"
15
+ />
16
+ ```
17
+
18
+ ## Component Props
19
+
20
+ ### asChild
21
+ - **Type**: `boolean`
22
+ - **Required**: No
23
+ - **Description**: No description available
24
+
25
+ ### className
26
+ - **Type**: `string`
27
+ - **Required**: No
28
+ - **Description**: No description available
29
+
30
+ ## Examples
31
+
32
+ ```tsx
33
+ // Custom scrollbar with styled thumb
34
+ const CustomScrollbar = ({ orientation = "vertical" }) => (
35
+ <ScrollAreaPrimitive.ScrollAreaScrollbar orientation={orientation}>
36
+ <ScrollAreaThumb className="bg-blue-500 hover:bg-blue-600 active:bg-blue-700" />
37
+ </ScrollAreaPrimitive.ScrollAreaScrollbar>
38
+ );
39
+ ```
@@ -0,0 +1,60 @@
1
+ # ScrollAreaViewport
2
+
3
+ **Type**: component
4
+
5
+ ScrollAreaViewport - The viewport area of the scroll area Contains the scrollable content and handles the actual scrolling behavior. This is the element that receives focus and handles keyboard navigation. Use refs on this component for programmatic scrolling control.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ScrollAreaViewport } from '@neynar/ui';
11
+
12
+ <ScrollAreaViewport
13
+ asChild={true}
14
+ className="value"
15
+ >
16
+ {/* Your content here */}
17
+ </ScrollAreaViewport>
18
+ ```
19
+
20
+ ## Component Props
21
+
22
+ ### asChild
23
+ - **Type**: `boolean`
24
+ - **Required**: No
25
+ - **Description**: No description available
26
+
27
+ ### className
28
+ - **Type**: `string`
29
+ - **Required**: No
30
+ - **Description**: No description available
31
+
32
+ ### children
33
+ - **Type**: `React.ReactNode`
34
+ - **Required**: No
35
+ - **Description**: No description available
36
+
37
+ ## Examples
38
+
39
+ ```tsx
40
+ // Accessing viewport for programmatic scrolling
41
+ const ScrollWithButton = () => {
42
+ const viewportRef = useRef<HTMLDivElement>(null);
43
+ const scrollToBottom = () => {
44
+ const viewport = viewportRef.current;
45
+ if (viewport) {
46
+ viewport.scrollTop = viewport.scrollHeight;
47
+ }
48
+ };
49
+ return (
50
+ <ScrollArea className="h-64 w-96">
51
+ <ScrollAreaViewport ref={viewportRef}>
52
+ <div className="p-4">
53
+ // Content here
54
+ <button onClick={scrollToBottom}>Scroll to bottom</button>
55
+ </div>
56
+ </ScrollAreaViewport>
57
+ </ScrollArea>
58
+ );
59
+ };
60
+ ```
@@ -0,0 +1,125 @@
1
+ # ScrollArea
2
+
3
+ **Type**: component
4
+
5
+ ScrollArea - Custom scrollable area with cross-browser styling Augments native scroll functionality for custom, cross-browser styling with enhanced scrolling experience. Built on Radix UI's ScrollArea primitive for accessibility and keyboard navigation support. Provides consistent scrollbar appearance across different browsers while maintaining native scroll behavior and performance. The component automatically handles vertical scrolling and can be extended with horizontal scrolling using the ScrollBar component. Supports programmatic control via refs and maintains all native scrolling behaviors including touch gestures.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ScrollArea } from '@neynar/ui';
11
+
12
+ <ScrollArea
13
+ className="value"
14
+ type={value}
15
+ scrollHideDelay={0}
16
+ dir={value}
17
+ nonce="value"
18
+ asChild={true}
19
+ >
20
+ {/* Your content here */}
21
+ </ScrollArea>
22
+ ```
23
+
24
+ ## Component Props
25
+
26
+ ### className
27
+ - **Type**: `string`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ### children
32
+ - **Type**: `React.ReactNode`
33
+ - **Required**: No
34
+ - **Description**: No description available
35
+
36
+ ### type
37
+ - **Type**: `"auto" | "always" | "scroll" | "hover"`
38
+ - **Required**: No
39
+ - **Description**: No description available
40
+
41
+ ### scrollHideDelay
42
+ - **Type**: `number`
43
+ - **Required**: No
44
+ - **Description**: No description available
45
+
46
+ ### dir
47
+ - **Type**: `"ltr" | "rtl"`
48
+ - **Required**: No
49
+ - **Description**: No description available
50
+
51
+ ### nonce
52
+ - **Type**: `string`
53
+ - **Required**: No
54
+ - **Description**: No description available
55
+
56
+ ### asChild
57
+ - **Type**: `boolean`
58
+ - **Required**: No
59
+ - **Description**: No description available
60
+
61
+ ## Examples
62
+
63
+ ### Example 1
64
+ ```tsx
65
+ // Basic vertical scrollable area
66
+ <ScrollArea className="h-72 w-48 rounded-md border">
67
+ <div className="p-4">
68
+ {items.map((item) => (
69
+ <div key={item.id} className="mb-4">
70
+ {item.content}
71
+ </div>
72
+ ))}
73
+ </div>
74
+ </ScrollArea>
75
+ ```
76
+ ### Example 2
77
+ ```tsx
78
+ // Horizontal scrolling with custom scrollbar
79
+ <ScrollArea className="w-full whitespace-nowrap rounded-md border">
80
+ <div className="flex gap-4 p-4">
81
+ {cards.map((card) => (
82
+ <div key={card.id} className="w-64 flex-none">
83
+ {card.content}
84
+ </div>
85
+ ))}
86
+ </div>
87
+ <ScrollBar orientation="horizontal" />
88
+ </ScrollArea>
89
+ ```
90
+ ### Example 3
91
+ ```tsx
92
+ // Both scrollbars for large content with always-visible scrollbars
93
+ <ScrollArea className="h-96 w-80 rounded-md border" type="always">
94
+ <div className="w-[600px] p-4">
95
+ <div className="space-y-4">
96
+ {largeDataSet.map((item) => (
97
+ <div key={item.id} className="min-w-max">
98
+ {item.wideContent}
99
+ </div>
100
+ ))}
101
+ </div>
102
+ </div>
103
+ <ScrollBar orientation="horizontal" />
104
+ </ScrollArea>
105
+ ```
106
+ ### Example 4
107
+ ```tsx
108
+ // Programmatic scrolling with ref
109
+ function ProgrammaticScroll() {
110
+ const viewportRef = useRef<HTMLDivElement>(null);
111
+ const scrollToTop = () => {
112
+ viewportRef.current?.scrollTo({ top: 0, behavior: 'smooth' });
113
+ };
114
+ return (
115
+ <ScrollArea className="h-72 w-96">
116
+ <ScrollAreaViewport ref={viewportRef}>
117
+ <div className="p-4">
118
+ // Long content here
119
+ <button onClick={scrollToTop}>Scroll to top</button>
120
+ </div>
121
+ </ScrollAreaViewport>
122
+ </ScrollArea>
123
+ );
124
+ }
125
+ ```
@@ -0,0 +1,78 @@
1
+ # ScrollBar
2
+
3
+ **Type**: component
4
+
5
+ ScrollBar - Custom styled scrollbar for ScrollArea Companion component to ScrollArea that renders styled scrollbars with support for both vertical and horizontal orientations. The vertical scrollbar is automatically included in ScrollArea, but horizontal scrollbars must be explicitly added when needed. The scrollbar automatically shows/hides based on content overflow and user interaction. Supports touch interactions and provides visual feedback during scroll operations.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ScrollBar } from '@neynar/ui';
11
+
12
+ <ScrollBar
13
+ orientation={value}
14
+ forceMount={value}
15
+ asChild={true}
16
+ className="value"
17
+ />
18
+ ```
19
+
20
+ ## Component Props
21
+
22
+ ### orientation
23
+ - **Type**: `"vertical" | "horizontal"`
24
+ - **Required**: No
25
+ - **Description**: No description available
26
+
27
+ ### forceMount
28
+ - **Type**: `true`
29
+ - **Required**: No
30
+ - **Description**: No description available
31
+
32
+ ### asChild
33
+ - **Type**: `boolean`
34
+ - **Required**: No
35
+ - **Description**: No description available
36
+
37
+ ### className
38
+ - **Type**: `string`
39
+ - **Required**: No
40
+ - **Description**: No description available
41
+
42
+ ## Examples
43
+
44
+ ### Example 1
45
+ ```tsx
46
+ // Explicit horizontal scrollbar for wide content
47
+ <ScrollArea className="w-full max-w-md">
48
+ <div className="flex gap-4 p-4 min-w-max">
49
+ {items.map((item) => (
50
+ <div key={item.id} className="w-48 flex-none">
51
+ {item.content}
52
+ </div>
53
+ ))}
54
+ </div>
55
+ <ScrollBar orientation="horizontal" />
56
+ </ScrollArea>
57
+ ```
58
+ ### Example 2
59
+ ```tsx
60
+ // Both scrollbars with custom styling
61
+ <ScrollArea className="h-64 w-64 border">
62
+ <div className="w-96 h-96 p-4">
63
+ Large content that overflows both axes
64
+ </div>
65
+ <ScrollBar orientation="vertical" className="bg-slate-100" />
66
+ <ScrollBar orientation="horizontal" className="bg-slate-100" />
67
+ </ScrollArea>
68
+ ```
69
+ ### Example 3
70
+ ```tsx
71
+ // Force-mounted scrollbar that always shows
72
+ <ScrollArea className="h-48 w-full">
73
+ <div className="p-4">
74
+ Content that may or may not overflow
75
+ </div>
76
+ <ScrollBar orientation="horizontal" forceMount />
77
+ </ScrollArea>
78
+ ```