@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,53 @@
1
+ # CommandList
2
+
3
+ **Type**: component
4
+
5
+ CommandList - Scrollable container for command items Contains and manages the list of command items with automatic scrolling, overflow handling, and dynamic height calculation. Provides the scrollable viewport for command items and groups with proper keyboard navigation. Uses CSS custom property `--cmdk-list-height` for smooth height transitions when items are filtered. Supports scroll padding for better item visibility.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { CommandList } from '@neynar/ui';
11
+
12
+ <CommandList
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </CommandList>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: Additional CSS classes
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ## Examples
32
+
33
+ ### Example 1
34
+ ```tsx
35
+ <CommandList>
36
+ <CommandEmpty>No results found</CommandEmpty>
37
+ <CommandGroup heading="Actions">
38
+ <CommandItem>New File</CommandItem>
39
+ <CommandItem>Open File</CommandItem>
40
+ </CommandGroup>
41
+ </CommandList>
42
+ ```
43
+ ### Example 2
44
+ ```tsx
45
+ // With custom height and scroll behavior
46
+ <CommandList className="max-h-[400px] scroll-py-2">
47
+ {items.map((item) => (
48
+ <CommandItem key={item.id} value={item.id}>
49
+ {item.name}
50
+ </CommandItem>
51
+ ))}
52
+ </CommandList>
53
+ ```
@@ -0,0 +1,48 @@
1
+ # CommandLoading
2
+
3
+ **Type**: component
4
+
5
+ CommandLoading - Loading state indicator for command menu Displays a loading message while command items are being fetched asynchronously. Should be conditionally rendered based on loading state. Shares the same styling and behavior as CommandEmpty but indicates active loading rather than empty state.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { CommandLoading } from '@neynar/ui';
11
+
12
+ <CommandLoading
13
+ ...props={value}
14
+ />
15
+ ```
16
+
17
+ ## Component Props
18
+
19
+ ### ...props
20
+ - **Type**: `unknown`
21
+ - **Required**: Yes
22
+ - **Description**: No description available
23
+
24
+ ## Examples
25
+
26
+ ### Example 1
27
+ ```tsx
28
+ const [loading, setLoading] = useState(false);
29
+ const [items, setItems] = useState([]);
30
+ <CommandList>
31
+ {loading && <CommandLoading>Fetching commands...</CommandLoading>}
32
+ {items.map(item => (
33
+ <CommandItem key={item.id} value={item.id}>
34
+ {item.name}
35
+ </CommandItem>
36
+ ))}
37
+ </CommandList>
38
+ ```
39
+ ### Example 2
40
+ ```tsx
41
+ // With custom loading indicator
42
+ <CommandLoading>
43
+ <div className="flex items-center justify-center py-6">
44
+ <Spinner className="mr-2 h-4 w-4" />
45
+ <span>Loading commands...</span>
46
+ </div>
47
+ </CommandLoading>
48
+ ```
@@ -0,0 +1,44 @@
1
+ # CommandSeparator
2
+
3
+ **Type**: component
4
+
5
+ CommandSeparator - Visual separator between command groups Provides visual separation between different sections of commands. Purely decorative element that improves visual organization and hierarchy. Automatically hides when adjacent groups are filtered out. The separator will only render when it has visible content before and after it, unless `alwaysRender` is true.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { CommandSeparator } from '@neynar/ui';
11
+
12
+ <CommandSeparator
13
+ alwaysRender={true}
14
+ className="value"
15
+ />
16
+ ```
17
+
18
+ ## Component Props
19
+
20
+ ### alwaysRender
21
+ - **Type**: `boolean`
22
+ - **Required**: No
23
+ - **Description**: Whether to always show separator regardless of context
24
+
25
+ ### className
26
+ - **Type**: `string`
27
+ - **Required**: No
28
+ - **Description**: Additional CSS classes
29
+
30
+ ## Examples
31
+
32
+ ### Example 1
33
+ ```tsx
34
+ <CommandGroup heading="Recent">...</CommandGroup>
35
+ <CommandSeparator />
36
+ <CommandGroup heading="Actions">...</CommandGroup>
37
+ ```
38
+ ### Example 2
39
+ ```tsx
40
+ // Separator that always renders
41
+ <CommandGroup heading="Primary">...</CommandGroup>
42
+ <CommandSeparator alwaysRender />
43
+ <CommandGroup heading="Secondary">...</CommandGroup>
44
+ ```
@@ -0,0 +1,63 @@
1
+ # CommandShortcut
2
+
3
+ **Type**: component
4
+
5
+ CommandShortcut - Displays keyboard shortcut for command items Shows the keyboard shortcut associated with a command item, typically displayed on the right side with proper spacing. Supports platform-specific shortcuts and complex key combinations with consistent formatting. The component uses monospace-style formatting with appropriate opacity and spacing to clearly indicate keyboard shortcuts without overwhelming the item content.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { CommandShortcut } from '@neynar/ui';
11
+
12
+ <CommandShortcut
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </CommandShortcut>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: Additional CSS classes
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ## Examples
32
+
33
+ ### Example 1
34
+ ```tsx
35
+ <CommandItem>
36
+ Save File
37
+ <CommandShortcut>⌘S</CommandShortcut>
38
+ </CommandItem>
39
+ ```
40
+ ### Example 2
41
+ ```tsx
42
+ // Multi-key shortcuts
43
+ <CommandItem>
44
+ Redo
45
+ <CommandShortcut>⇧⌘Z</CommandShortcut>
46
+ </CommandItem>
47
+ ```
48
+ ### Example 3
49
+ ```tsx
50
+ // Platform-specific shortcuts
51
+ <CommandItem>
52
+ Copy
53
+ <CommandShortcut>{isMac ? '⌘C' : 'Ctrl+C'}</CommandShortcut>
54
+ </CommandItem>
55
+ ```
56
+ ### Example 4
57
+ ```tsx
58
+ // Complex shortcuts with modifiers
59
+ <CommandItem>
60
+ Open Command Palette
61
+ <CommandShortcut>⌘⇧P</CommandShortcut>
62
+ </CommandItem>
63
+ ```
@@ -0,0 +1,147 @@
1
+ # Command
2
+
3
+ **Type**: component
4
+
5
+ Command - A fast, composable command menu for search and navigation Built on the cmdk primitive, this component provides a powerful command palette interface with search, filtering, and keyboard navigation. Perfect for creating search interfaces, command palettes, and action menus with full accessibility support. Features advanced filtering with fuzzy search, keyboard shortcuts, nested navigation, asynchronous loading states, and comprehensive accessibility patterns.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { Command } from '@neynar/ui';
11
+
12
+ <Command
13
+ label="value"
14
+ shouldFilter={true}
15
+ filter={[]}
16
+ value="value"
17
+ onValueChange={handleValueChange}
18
+ loop={true}
19
+ disablePointerSelection={true}
20
+ vimBindings={true}
21
+ className="value"
22
+ >
23
+ {/* Your content here */}
24
+ </Command>
25
+ ```
26
+
27
+ ## Component Props
28
+
29
+ ### label
30
+ - **Type**: `string`
31
+ - **Required**: No
32
+ - **Description**: Accessibility label for screen readers and assistive technology
33
+
34
+ ### shouldFilter
35
+ - **Type**: `boolean`
36
+ - **Required**: No
37
+ - **Description**: Controls automatic filtering and sorting
38
+
39
+ ### filter
40
+ - **Type**: `(value: string, search: string, keywords?: string[]) => number`
41
+ - **Required**: No
42
+ - **Description**: Custom filter function for ranking items based on search
43
+
44
+ ### value
45
+ - **Type**: `string`
46
+ - **Required**: No
47
+ - **Description**: Currently selected item value for controlled usage
48
+
49
+ ### onValueChange
50
+ - **Type**: `(value: string) => void`
51
+ - **Required**: No
52
+ - **Description**: Callback fired when selected item changes
53
+
54
+ ### loop
55
+ - **Type**: `boolean`
56
+ - **Required**: No
57
+ - **Description**: Enables circular navigation through items
58
+
59
+ ### disablePointerSelection
60
+ - **Type**: `boolean`
61
+ - **Required**: No
62
+ - **Description**: Prevents mouse selection behavior
63
+
64
+ ### vimBindings
65
+ - **Type**: `boolean`
66
+ - **Required**: No
67
+ - **Description**: Enables Vim-style navigation keybindings
68
+
69
+ ### className
70
+ - **Type**: `string`
71
+ - **Required**: No
72
+ - **Description**: Additional CSS classes
73
+
74
+ ### children
75
+ - **Type**: `React.ReactNode`
76
+ - **Required**: No
77
+ - **Description**: No description available
78
+
79
+ ## Examples
80
+
81
+ ### Example 1
82
+ ```tsx
83
+ // Basic command menu
84
+ <Command label="Main Menu">
85
+ <CommandInput placeholder="Type a command or search..." />
86
+ <CommandList>
87
+ <CommandEmpty>No results found.</CommandEmpty>
88
+ <CommandGroup heading="Suggestions">
89
+ <CommandItem>Calendar</CommandItem>
90
+ <CommandItem>Search Emoji</CommandItem>
91
+ <CommandItem>Calculator</CommandItem>
92
+ </CommandGroup>
93
+ </CommandList>
94
+ </Command>
95
+ ```
96
+ ### Example 2
97
+ ```tsx
98
+ // Controlled command menu with custom filtering
99
+ const [value, setValue] = useState('');
100
+ const [search, setSearch] = useState('');
101
+ <Command
102
+ value={value}
103
+ onValueChange={setValue}
104
+ filter={(value, search, keywords) => {
105
+ const extended = value + ' ' + (keywords?.join(' ') || '');
106
+ return extended.toLowerCase().includes(search.toLowerCase()) ? 1 : 0;
107
+ }}
108
+ loop
109
+ >
110
+ <CommandInput
111
+ value={search}
112
+ onValueChange={setSearch}
113
+ placeholder="Search..."
114
+ />
115
+ <CommandList>
116
+ <CommandItem value="apple" keywords={['fruit', 'red']}>
117
+ Apple
118
+ </CommandItem>
119
+ </CommandList>
120
+ </Command>
121
+ ```
122
+ ### Example 3
123
+ ```tsx
124
+ // Command dialog with keyboard shortcut
125
+ const [open, setOpen] = useState(false);
126
+ useEffect(() => {
127
+ const down = (e: KeyboardEvent) => {
128
+ if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
129
+ e.preventDefault();
130
+ setOpen((open) => !open);
131
+ }
132
+ };
133
+ document.addEventListener("keydown", down);
134
+ return () => document.removeEventListener("keydown", down);
135
+ }, []);
136
+ <CommandDialog open={open} onOpenChange={setOpen}>
137
+ <CommandInput placeholder="Type a command..." />
138
+ <CommandList>
139
+ <CommandGroup heading="Actions">
140
+ <CommandItem onSelect={() => console.log("New file")}>
141
+ New File
142
+ <CommandShortcut>⌘N</CommandShortcut>
143
+ </CommandItem>
144
+ </CommandGroup>
145
+ </CommandList>
146
+ </CommandDialog>
147
+ ```
@@ -0,0 +1,236 @@
1
+ # Container
2
+
3
+ **Type**: component
4
+
5
+ Container - A responsive layout wrapper with flexible width constraints and consistent padding A fundamental layout component built with class-variance-authority (CVA) that provides consistent horizontal centering, responsive padding, and flexible max-width constraints. Designed to be the primary content wrapper for pages, sections, and layout regions throughout the application. The component automatically applies responsive horizontal padding (px-4 on mobile, px-6 on small screens, px-8 on large screens) and centers content using mx-auto. Five size variants accommodate different content types from optimal reading widths to full-width layouts. Built following shadcn/ui and Tailwind UI patterns for maximum compatibility and consistency with modern React applications and design systems.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { Container } from '@neynar/ui';
11
+
12
+ <Container
13
+ size={value}
14
+ className="value"
15
+ id="value"
16
+ role="value"
17
+ "aria-label"="value"
18
+ "aria-labelledby"="value"
19
+ "aria-describedby"="value"
20
+ "aria-live"={value}
21
+ tabIndex={0}
22
+ onClick={handleClick}
23
+ onFocus={handleFocus}
24
+ onBlur={handleBlur}
25
+ onKeyDown={handleKeyDown}
26
+ onMouseEnter={handleMouseEnter}
27
+ onMouseLeave={handleMouseLeave}
28
+ >
29
+ {/* Your content here */}
30
+ </Container>
31
+ ```
32
+
33
+ ## Component Props
34
+
35
+ ### size
36
+ - **Type**: `"sm" | "md" | "lg" | "xl" | "full"`
37
+ - **Required**: No
38
+ - **Description**: No description available
39
+
40
+ ### children
41
+ - **Type**: `React.ReactNode`
42
+ - **Required**: No
43
+ - **Description**: No description available
44
+
45
+ ### className
46
+ - **Type**: `string`
47
+ - **Required**: No
48
+ - **Description**: No description available
49
+
50
+ ### id
51
+ - **Type**: `string`
52
+ - **Required**: No
53
+ - **Description**: No description available
54
+
55
+ ### role
56
+ - **Type**: `string`
57
+ - **Required**: No
58
+ - **Description**: No description available
59
+
60
+ ### "aria-label"
61
+ - **Type**: `string`
62
+ - **Required**: No
63
+ - **Description**: No description available
64
+
65
+ ### "aria-labelledby"
66
+ - **Type**: `string`
67
+ - **Required**: No
68
+ - **Description**: No description available
69
+
70
+ ### "aria-describedby"
71
+ - **Type**: `string`
72
+ - **Required**: No
73
+ - **Description**: No description available
74
+
75
+ ### "aria-live"
76
+ - **Type**: `"off" | "polite" | "assertive"`
77
+ - **Required**: No
78
+ - **Description**: No description available
79
+
80
+ ### tabIndex
81
+ - **Type**: `number`
82
+ - **Required**: No
83
+ - **Description**: No description available
84
+
85
+ ### onClick
86
+ - **Type**: `React.MouseEventHandler<HTMLDivElement>`
87
+ - **Required**: No
88
+ - **Description**: No description available
89
+
90
+ ### onFocus
91
+ - **Type**: `React.FocusEventHandler<HTMLDivElement>`
92
+ - **Required**: No
93
+ - **Description**: No description available
94
+
95
+ ### onBlur
96
+ - **Type**: `React.FocusEventHandler<HTMLDivElement>`
97
+ - **Required**: No
98
+ - **Description**: No description available
99
+
100
+ ### onKeyDown
101
+ - **Type**: `React.KeyboardEventHandler<HTMLDivElement>`
102
+ - **Required**: No
103
+ - **Description**: No description available
104
+
105
+ ### onMouseEnter
106
+ - **Type**: `React.MouseEventHandler<HTMLDivElement>`
107
+ - **Required**: No
108
+ - **Description**: No description available
109
+
110
+ ### onMouseLeave
111
+ - **Type**: `React.MouseEventHandler<HTMLDivElement>`
112
+ - **Required**: No
113
+ - **Description**: No description available
114
+
115
+ ## Examples
116
+
117
+ ### Example 1
118
+ ```tsx
119
+ // Basic usage with default large size (80rem max-width)
120
+ <Container>
121
+ <h1>Dashboard Overview</h1>
122
+ <p>Main application content with balanced width constraints</p>
123
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
124
+ <Card>Dashboard Widget</Card>
125
+ <Card>Analytics Panel</Card>
126
+ <Card>Recent Activity</Card>
127
+ </div>
128
+ </Container>
129
+ ```
130
+ ### Example 2
131
+ ```tsx
132
+ // Reading-optimized container for articles and blog posts
133
+ <Container size="sm">
134
+ <article className="prose prose-lg max-w-none">
135
+ <h1>The Future of Web Development</h1>
136
+ <p>
137
+ Long-form content with line lengths optimized for readability
138
+ and comfortable reading experience across all device sizes.
139
+ </p>
140
+ <p>
141
+ The small container (48rem) provides the ideal measure for
142
+ typography-focused content and sustained reading.
143
+ </p>
144
+ </article>
145
+ </Container>
146
+ ```
147
+ ### Example 3
148
+ ```tsx
149
+ // Medium container for forms and structured layouts
150
+ <Container size="md">
151
+ <div className="space-y-8">
152
+ <div className="text-center">
153
+ <h2>Account Settings</h2>
154
+ <p>Manage your account preferences and profile information</p>
155
+ </div>
156
+ <form className="space-y-6">
157
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
158
+ <Input label="First Name" />
159
+ <Input label="Last Name" />
160
+ </div>
161
+ <Input label="Email Address" type="email" />
162
+ <Button type="submit" className="w-full">Update Profile</Button>
163
+ </form>
164
+ </div>
165
+ </Container>
166
+ ```
167
+ ### Example 4
168
+ ```tsx
169
+ // Full-width container for complex layouts and hero sections
170
+ <Container size="full">
171
+ <div className="bg-gradient-to-r from-blue-600 to-purple-600 text-white py-20">
172
+ <div className="text-center space-y-6">
173
+ <h1 className="text-4xl md:text-6xl font-bold">
174
+ Welcome to Our Platform
175
+ </h1>
176
+ <p className="text-xl md:text-2xl opacity-90 max-w-3xl mx-auto">
177
+ Edge-to-edge hero section with full viewport width
178
+ </p>
179
+ <Button size="lg" variant="secondary">
180
+ Get Started
181
+ </Button>
182
+ </div>
183
+ </div>
184
+ </Container>
185
+ ```
186
+ ### Example 5
187
+ ```tsx
188
+ // Extra-large container for data-heavy interfaces
189
+ <Container size="xl" className="py-8">
190
+ <div className="space-y-6">
191
+ <div className="flex justify-between items-center">
192
+ <h1 className="text-3xl font-bold">Analytics Dashboard</h1>
193
+ <Button variant="outline">Export Data</Button>
194
+ </div>
195
+ // Wide data table that needs maximum available width
196
+ <DataTable
197
+ columns={analyticsColumns}
198
+ data={analyticsData}
199
+ className="min-w-[1200px]"
200
+ />
201
+ <div className="grid grid-cols-1 lg:grid-cols-4 gap-6">
202
+ <MetricCard />
203
+ <MetricCard />
204
+ <MetricCard />
205
+ <MetricCard />
206
+ </div>
207
+ </div>
208
+ </Container>
209
+ ```
210
+ ### Example 6
211
+ ```tsx
212
+ // Advanced usage with custom styling and ARIA landmarks
213
+ <Container
214
+ size="lg"
215
+ className="min-h-screen py-12 bg-gray-50 dark:bg-gray-900"
216
+ role="main"
217
+ aria-label="Application content"
218
+ >
219
+ <div className="space-y-10">
220
+ <header className="text-center space-y-4">
221
+ <Badge variant="secondary">New Feature</Badge>
222
+ <h1 className="text-4xl font-bold tracking-tight">
223
+ Product Announcement
224
+ </h1>
225
+ <p className="text-lg text-muted-foreground max-w-2xl mx-auto">
226
+ Discover the latest improvements to our platform
227
+ </p>
228
+ </header>
229
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
230
+ <FeatureCard />
231
+ <FeatureCard />
232
+ <FeatureCard />
233
+ </div>
234
+ </div>
235
+ </Container>
236
+ ```
@@ -0,0 +1,97 @@
1
+ # ContextMenuCheckboxItem
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuCheckboxItem - A menu item with checkbox functionality Menu items that can be toggled on/off, useful for binary settings or options. Displays a check mark when selected and supports controlled state management with indeterminate state for partially selected collections.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuCheckboxItem } from '@neynar/ui';
11
+
12
+ <ContextMenuCheckboxItem
13
+ asChild={true}
14
+ checked={value}
15
+ onCheckedChange={handleCheckedChange}
16
+ disabled={true}
17
+ onSelect={handleSelect}
18
+ textValue="value"
19
+ className="value"
20
+ >
21
+ {/* Your content here */}
22
+ </ContextMenuCheckboxItem>
23
+ ```
24
+
25
+ ## Component Props
26
+
27
+ ### asChild
28
+ - **Type**: `boolean`
29
+ - **Required**: No
30
+ - **Description**: Merges props with child element instead of rendering wrapper
31
+
32
+ ### checked
33
+ - **Type**: `boolean | "indeterminate"`
34
+ - **Required**: No
35
+ - **Description**: The checked state (true, false, or "indeterminate")
36
+
37
+ ### onCheckedChange
38
+ - **Type**: `(checked: boolean) => void`
39
+ - **Required**: No
40
+ - **Description**: Callback fired when the checked state changes
41
+
42
+ ### disabled
43
+ - **Type**: `boolean`
44
+ - **Required**: No
45
+ - **Description**: Whether the item is disabled and non-interactive
46
+
47
+ ### onSelect
48
+ - **Type**: `(event: Event) => void`
49
+ - **Required**: No
50
+ - **Description**: Callback fired when the item is selected (before onCheckedChange)
51
+
52
+ ### textValue
53
+ - **Type**: `string`
54
+ - **Required**: No
55
+ - **Description**: Custom text for typeahead navigation
56
+
57
+ ### className
58
+ - **Type**: `string`
59
+ - **Required**: No
60
+ - **Description**: Additional CSS classes for styling
61
+
62
+ ### children
63
+ - **Type**: `React.ReactNode`
64
+ - **Required**: Yes
65
+ - **Description**: Content of the checkbox item (typically text)
66
+
67
+ ## Examples
68
+
69
+ ### Example 1
70
+ ```tsx
71
+ const [showGrid, setShowGrid] = useState(true)
72
+ <ContextMenuCheckboxItem
73
+ checked={showGrid}
74
+ onCheckedChange={setShowGrid}
75
+ >
76
+ Show Grid
77
+ </ContextMenuCheckboxItem>
78
+ ```
79
+ ### Example 2
80
+ ```tsx
81
+ // With indeterminate state
82
+ const [selectedItems, setSelectedItems] = useState(['item1'])
83
+ const allItems = ['item1', 'item2', 'item3']
84
+ const checkedState = selectedItems.length === 0
85
+ ? false
86
+ : selectedItems.length === allItems.length
87
+ ? true
88
+ : "indeterminate"
89
+ <ContextMenuCheckboxItem
90
+ checked={checkedState}
91
+ onCheckedChange={(checked) =>
92
+ setSelectedItems(checked ? allItems : [])
93
+ }
94
+ >
95
+ Select All
96
+ </ContextMenuCheckboxItem>
97
+ ```