@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,91 @@
1
+ # ContextMenuContent
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuContent - The container for context menu items Contains all menu items, separators, labels, and sub-menus. Automatically positioned relative to the trigger point with collision detection and smooth animations. Renders in a portal by default for proper layering.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuContent } from '@neynar/ui';
11
+
12
+ <ContextMenuContent
13
+ asChild={true}
14
+ loop={true}
15
+ onCloseAutoFocus={handleCloseAutoFocus}
16
+ onEscapeKeyDown={handleEscapeKeyDown}
17
+ avoidCollisions={true}
18
+ sideOffset={0}
19
+ className="value"
20
+ >
21
+ {/* Your content here */}
22
+ </ContextMenuContent>
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
+ ### loop
33
+ - **Type**: `boolean`
34
+ - **Required**: No
35
+ - **Description**: Enable keyboard navigation looping from last to first item
36
+
37
+ ### onCloseAutoFocus
38
+ - **Type**: `(event: Event) => void`
39
+ - **Required**: No
40
+ - **Description**: Handle focus return when menu closes
41
+
42
+ ### onEscapeKeyDown
43
+ - **Type**: `(event: KeyboardEvent) => void`
44
+ - **Required**: No
45
+ - **Description**: Handle escape key presses
46
+
47
+ ### avoidCollisions
48
+ - **Type**: `boolean`
49
+ - **Required**: No
50
+ - **Description**: Prevent collisions with viewport boundaries
51
+
52
+ ### sideOffset
53
+ - **Type**: `number`
54
+ - **Required**: No
55
+ - **Description**: Distance in pixels from the cursor/trigger point
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**: Menu items, labels, separators, and sub-menus to display
66
+
67
+ ## Examples
68
+
69
+ ### Example 1
70
+ ```tsx
71
+ <ContextMenuContent className="w-56">
72
+ <ContextMenuLabel>Actions</ContextMenuLabel>
73
+ <ContextMenuSeparator />
74
+ <ContextMenuItem>Copy</ContextMenuItem>
75
+ <ContextMenuItem>Paste</ContextMenuItem>
76
+ </ContextMenuContent>
77
+ ```
78
+ ### Example 2
79
+ ```tsx
80
+ // With event handlers and positioning
81
+ <ContextMenuContent
82
+ onCloseAutoFocus={(e) => e.preventDefault()}
83
+ onEscapeKeyDown={(e) => console.log('Escape pressed')}
84
+ avoidCollisions={true}
85
+ sideOffset={4}
86
+ loop={true}
87
+ >
88
+ <ContextMenuItem>Item 1</ContextMenuItem>
89
+ <ContextMenuItem>Item 2</ContextMenuItem>
90
+ </ContextMenuContent>
91
+ ```
@@ -0,0 +1,61 @@
1
+ # ContextMenuGroup
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuGroup - Logical grouping for menu items Groups related menu items together for better organization and accessibility. Provides semantic structure without visual changes but improves screen reader navigation by grouping related actions.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuGroup } from '@neynar/ui';
11
+
12
+ <ContextMenuGroup
13
+ asChild={true}
14
+ className="value"
15
+ >
16
+ {/* Your content here */}
17
+ </ContextMenuGroup>
18
+ ```
19
+
20
+ ## Component Props
21
+
22
+ ### asChild
23
+ - **Type**: `boolean`
24
+ - **Required**: No
25
+ - **Description**: Merges props with child element instead of rendering wrapper
26
+
27
+ ### className
28
+ - **Type**: `string`
29
+ - **Required**: No
30
+ - **Description**: No description available
31
+
32
+ ### children
33
+ - **Type**: `React.ReactNode`
34
+ - **Required**: Yes
35
+ - **Description**: The menu items to group together logically
36
+
37
+ ## Examples
38
+
39
+ ### Example 1
40
+ ```tsx
41
+ <ContextMenuGroup>
42
+ <ContextMenuItem>Copy</ContextMenuItem>
43
+ <ContextMenuItem>Cut</ContextMenuItem>
44
+ <ContextMenuItem>Paste</ContextMenuItem>
45
+ </ContextMenuGroup>
46
+ ```
47
+ ### Example 2
48
+ ```tsx
49
+ // Multiple groups with separators
50
+ <ContextMenuContent>
51
+ <ContextMenuGroup>
52
+ <ContextMenuItem>Undo</ContextMenuItem>
53
+ <ContextMenuItem>Redo</ContextMenuItem>
54
+ </ContextMenuGroup>
55
+ <ContextMenuSeparator />
56
+ <ContextMenuGroup>
57
+ <ContextMenuItem>Copy</ContextMenuItem>
58
+ <ContextMenuItem>Paste</ContextMenuItem>
59
+ </ContextMenuGroup>
60
+ </ContextMenuContent>
61
+ ```
@@ -0,0 +1,94 @@
1
+ # ContextMenuItem
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuItem - An actionable item within the context menu Individual menu items that users can interact with. Supports different variants for visual hierarchy and includes automatic icon styling. Items can be clicked, selected via keyboard, and support custom styling.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuItem } from '@neynar/ui';
11
+
12
+ <ContextMenuItem
13
+ asChild={true}
14
+ disabled={true}
15
+ onSelect={handleSelect}
16
+ textValue="value"
17
+ inset={true}
18
+ variant={value}
19
+ className="value"
20
+ >
21
+ {/* Your content here */}
22
+ </ContextMenuItem>
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
+ ### disabled
33
+ - **Type**: `boolean`
34
+ - **Required**: No
35
+ - **Description**: Prevents interaction and dims the item visually
36
+
37
+ ### onSelect
38
+ - **Type**: `(event: Event) => void`
39
+ - **Required**: No
40
+ - **Description**: Callback fired when item is selected (via mouse or keyboard)
41
+
42
+ ### textValue
43
+ - **Type**: `string`
44
+ - **Required**: No
45
+ - **Description**: Custom text for typeahead navigation when content is complex
46
+
47
+ ### inset
48
+ - **Type**: `boolean`
49
+ - **Required**: No
50
+ - **Description**: Whether to indent the item for alignment with icon-based items
51
+
52
+ ### variant
53
+ - **Type**: `"default" | "destructive"`
54
+ - **Required**: No
55
+ - **Description**: Visual variant ("default" for normal actions, "destructive" for dangerous actions)
56
+
57
+ ### className
58
+ - **Type**: `string`
59
+ - **Required**: No
60
+ - **Description**: Additional CSS classes for custom styling
61
+
62
+ ### children
63
+ - **Type**: `React.ReactNode`
64
+ - **Required**: Yes
65
+ - **Description**: Content of the menu item (text, icons, shortcuts, etc.)
66
+
67
+ ## Examples
68
+
69
+ ### Example 1
70
+ ```tsx
71
+ <ContextMenuItem onSelect={() => console.log('Edit selected')}>
72
+ <Edit className="mr-2 h-4 w-4" />
73
+ Edit
74
+ <ContextMenuShortcut>⌘E</ContextMenuShortcut>
75
+ </ContextMenuItem>
76
+ ```
77
+ ### Example 2
78
+ ```tsx
79
+ <ContextMenuItem variant="destructive" onSelect={handleDelete}>
80
+ <Trash2 className="mr-2 h-4 w-4" />
81
+ Delete
82
+ </ContextMenuItem>
83
+ ```
84
+ ### Example 3
85
+ ```tsx
86
+ // With custom text value for typeahead
87
+ <ContextMenuItem
88
+ textValue="Copy to clipboard"
89
+ onSelect={handleCopy}
90
+ >
91
+ <Copy className="mr-2 h-4 w-4" />
92
+ Copy <span className="text-muted-foreground">to clipboard</span>
93
+ </ContextMenuItem>
94
+ ```
@@ -0,0 +1,60 @@
1
+ # ContextMenuLabel
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuLabel - A non-interactive label for menu sections Used to group related menu items and provide context. Labels are not focusable and serve as visual section headers within the menu. Helps organize menu content and improve accessibility.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuLabel } from '@neynar/ui';
11
+
12
+ <ContextMenuLabel
13
+ asChild={true}
14
+ inset={true}
15
+ className="value"
16
+ >
17
+ {/* Your content here */}
18
+ </ContextMenuLabel>
19
+ ```
20
+
21
+ ## Component Props
22
+
23
+ ### asChild
24
+ - **Type**: `boolean`
25
+ - **Required**: No
26
+ - **Description**: Merges props with child element instead of rendering wrapper
27
+
28
+ ### inset
29
+ - **Type**: `boolean`
30
+ - **Required**: No
31
+ - **Description**: Whether to indent the label to align with inset items
32
+
33
+ ### className
34
+ - **Type**: `string`
35
+ - **Required**: No
36
+ - **Description**: Additional CSS classes for styling
37
+
38
+ ### children
39
+ - **Type**: `React.ReactNode`
40
+ - **Required**: Yes
41
+ - **Description**: The text content of the label
42
+
43
+ ## Examples
44
+
45
+ ### Example 1
46
+ ```tsx
47
+ <ContextMenuLabel>File Actions</ContextMenuLabel>
48
+ <ContextMenuSeparator />
49
+ <ContextMenuItem>Open</ContextMenuItem>
50
+ <ContextMenuItem>Save</ContextMenuItem>
51
+ ```
52
+ ### Example 2
53
+ ```tsx
54
+ // With inset alignment for consistency
55
+ <ContextMenuContent>
56
+ <ContextMenuLabel inset>Edit Options</ContextMenuLabel>
57
+ <ContextMenuItem inset>Copy</ContextMenuItem>
58
+ <ContextMenuItem inset>Paste</ContextMenuItem>
59
+ </ContextMenuContent>
60
+ ```
@@ -0,0 +1,49 @@
1
+ # ContextMenuPortal
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuPortal - Portal container for menu content Renders menu content in a portal to ensure proper layering and positioning. Useful for controlling where menu content is rendered in the DOM tree, especially important for sub-menus and complex layouts.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuPortal } from '@neynar/ui';
11
+
12
+ <ContextMenuPortal
13
+ container={value}
14
+ >
15
+ {/* Your content here */}
16
+ </ContextMenuPortal>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### container
22
+ - **Type**: `HTMLElement`
23
+ - **Required**: No
24
+ - **Description**: Custom container element to portal content into
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: Yes
29
+ - **Description**: The menu content to render in the portal
30
+
31
+ ## Examples
32
+
33
+ ### Example 1
34
+ ```tsx
35
+ <ContextMenuPortal>
36
+ <ContextMenuSubContent>
37
+ <ContextMenuItem>Portal Item</ContextMenuItem>
38
+ </ContextMenuSubContent>
39
+ </ContextMenuPortal>
40
+ ```
41
+ ### Example 2
42
+ ```tsx
43
+ // Portal into specific container
44
+ <ContextMenuPortal container={document.getElementById('menu-container')}>
45
+ <ContextMenuContent>
46
+ <ContextMenuItem>Custom Portal Item</ContextMenuItem>
47
+ </ContextMenuContent>
48
+ </ContextMenuPortal>
49
+ ```
@@ -0,0 +1,66 @@
1
+ # ContextMenuRadioGroup
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuRadioGroup - Container for radio button items Groups radio items together to allow single selection from multiple options. Manages the selected state and ensures only one item can be selected at a time. Provides controlled state management for radio selections within menus.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuRadioGroup } from '@neynar/ui';
11
+
12
+ <ContextMenuRadioGroup
13
+ value="value"
14
+ onValueChange={handleValueChange}
15
+ className="value"
16
+ >
17
+ {/* Your content here */}
18
+ </ContextMenuRadioGroup>
19
+ ```
20
+
21
+ ## Component Props
22
+
23
+ ### value
24
+ - **Type**: `string`
25
+ - **Required**: No
26
+ - **Description**: The currently selected value that matches a RadioItem's value
27
+
28
+ ### onValueChange
29
+ - **Type**: `(value: string) => void`
30
+ - **Required**: No
31
+ - **Description**: Callback fired when selection changes, receives new value
32
+
33
+ ### className
34
+ - **Type**: `string`
35
+ - **Required**: No
36
+ - **Description**: No description available
37
+
38
+ ### children
39
+ - **Type**: `React.ReactNode`
40
+ - **Required**: Yes
41
+ - **Description**: ContextMenuRadioItem components to group together
42
+
43
+ ## Examples
44
+
45
+ ### Example 1
46
+ ```tsx
47
+ const [theme, setTheme] = useState("light")
48
+ <ContextMenuRadioGroup value={theme} onValueChange={setTheme}>
49
+ <ContextMenuRadioItem value="light">Light</ContextMenuRadioItem>
50
+ <ContextMenuRadioItem value="dark">Dark</ContextMenuRadioItem>
51
+ <ContextMenuRadioItem value="system">System</ContextMenuRadioItem>
52
+ </ContextMenuRadioGroup>
53
+ ```
54
+ ### Example 2
55
+ ```tsx
56
+ // With label and separator
57
+ <ContextMenuContent>
58
+ <ContextMenuLabel>Theme Selection</ContextMenuLabel>
59
+ <ContextMenuSeparator />
60
+ <ContextMenuRadioGroup value={currentTheme} onValueChange={handleThemeChange}>
61
+ <ContextMenuRadioItem value="light">Light Mode</ContextMenuRadioItem>
62
+ <ContextMenuRadioItem value="dark">Dark Mode</ContextMenuRadioItem>
63
+ <ContextMenuRadioItem value="auto">Auto</ContextMenuRadioItem>
64
+ </ContextMenuRadioGroup>
65
+ </ContextMenuContent>
66
+ ```
@@ -0,0 +1,76 @@
1
+ # ContextMenuRadioItem
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuRadioItem - A radio button item within a radio group Menu items that allow single selection from a group of options. Must be used within a ContextMenuRadioGroup for proper functionality. Displays a filled circle indicator when selected.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuRadioItem } from '@neynar/ui';
11
+
12
+ <ContextMenuRadioItem
13
+ value="value"
14
+ disabled={true}
15
+ onSelect={handleSelect}
16
+ textValue="value"
17
+ className="value"
18
+ >
19
+ {/* Your content here */}
20
+ </ContextMenuRadioItem>
21
+ ```
22
+
23
+ ## Component Props
24
+
25
+ ### value
26
+ - **Type**: `string`
27
+ - **Required**: Yes
28
+ - **Description**: The unique value for this radio item (required)
29
+
30
+ ### disabled
31
+ - **Type**: `boolean`
32
+ - **Required**: No
33
+ - **Description**: Whether the item is disabled and non-interactive
34
+
35
+ ### onSelect
36
+ - **Type**: `(event: Event) => void`
37
+ - **Required**: No
38
+ - **Description**: Callback fired when the item is selected (before parent's onValueChange)
39
+
40
+ ### textValue
41
+ - **Type**: `string`
42
+ - **Required**: No
43
+ - **Description**: Custom text for typeahead navigation
44
+
45
+ ### className
46
+ - **Type**: `string`
47
+ - **Required**: No
48
+ - **Description**: Additional CSS classes for styling
49
+
50
+ ### children
51
+ - **Type**: `React.ReactNode`
52
+ - **Required**: Yes
53
+ - **Description**: Content of the radio item (typically text)
54
+
55
+ ## Examples
56
+
57
+ ### Example 1
58
+ ```tsx
59
+ <ContextMenuRadioGroup value={theme} onValueChange={setTheme}>
60
+ <ContextMenuRadioItem value="light">Light Theme</ContextMenuRadioItem>
61
+ <ContextMenuRadioItem value="dark">Dark Theme</ContextMenuRadioItem>
62
+ <ContextMenuRadioItem value="system">System Theme</ContextMenuRadioItem>
63
+ </ContextMenuRadioGroup>
64
+ ```
65
+ ### Example 2
66
+ ```tsx
67
+ // With disabled state and custom text
68
+ <ContextMenuRadioGroup value={quality} onValueChange={setQuality}>
69
+ <ContextMenuRadioItem value="low">Low Quality</ContextMenuRadioItem>
70
+ <ContextMenuRadioItem value="medium">Medium Quality</ContextMenuRadioItem>
71
+ <ContextMenuRadioItem value="high">High Quality</ContextMenuRadioItem>
72
+ <ContextMenuRadioItem value="ultra" disabled>
73
+ Ultra Quality (Premium)
74
+ </ContextMenuRadioItem>
75
+ </ContextMenuRadioGroup>
76
+ ```
@@ -0,0 +1,51 @@
1
+ # ContextMenuSeparator
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuSeparator - A visual divider between menu items Creates visual separation between groups of related menu items. Typically used after labels or to separate different types of actions. Improves visual hierarchy and content organization in menus.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuSeparator } from '@neynar/ui';
11
+
12
+ <ContextMenuSeparator
13
+ asChild={true}
14
+ className="value"
15
+ />
16
+ ```
17
+
18
+ ## Component Props
19
+
20
+ ### asChild
21
+ - **Type**: `boolean`
22
+ - **Required**: No
23
+ - **Description**: Merges props with child element instead of rendering wrapper
24
+
25
+ ### className
26
+ - **Type**: `string`
27
+ - **Required**: No
28
+ - **Description**: Additional CSS classes for styling
29
+
30
+ ## Examples
31
+
32
+ ### Example 1
33
+ ```tsx
34
+ <ContextMenuItem>Copy</ContextMenuItem>
35
+ <ContextMenuItem>Paste</ContextMenuItem>
36
+ <ContextMenuSeparator />
37
+ <ContextMenuItem variant="destructive">Delete</ContextMenuItem>
38
+ ```
39
+ ### Example 2
40
+ ```tsx
41
+ // Organizing menu sections
42
+ <ContextMenuContent>
43
+ <ContextMenuLabel>Edit</ContextMenuLabel>
44
+ <ContextMenuItem>Copy</ContextMenuItem>
45
+ <ContextMenuItem>Paste</ContextMenuItem>
46
+ <ContextMenuSeparator />
47
+ <ContextMenuLabel>View</ContextMenuLabel>
48
+ <ContextMenuItem>Zoom In</ContextMenuItem>
49
+ <ContextMenuItem>Zoom Out</ContextMenuItem>
50
+ </ContextMenuContent>
51
+ ```
@@ -0,0 +1,57 @@
1
+ # ContextMenuShortcut
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuShortcut - Displays keyboard shortcuts within menu items Shows keyboard shortcuts aligned to the right side of menu items. Provides visual indication of available keyboard shortcuts for actions. Improves discoverability of keyboard navigation options.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuShortcut } from '@neynar/ui';
11
+
12
+ <ContextMenuShortcut
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </ContextMenuShortcut>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: Additional CSS classes for styling
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: Yes
29
+ - **Description**: The keyboard shortcut text to display (e.g., "⌘C", "Ctrl+V")
30
+
31
+ ## Examples
32
+
33
+ ### Example 1
34
+ ```tsx
35
+ <ContextMenuItem>
36
+ Copy
37
+ <ContextMenuShortcut>⌘C</ContextMenuShortcut>
38
+ </ContextMenuItem>
39
+ ```
40
+ ### Example 2
41
+ ```tsx
42
+ // Multiple shortcuts for different platforms
43
+ <ContextMenuItem>
44
+ Save
45
+ <ContextMenuShortcut>
46
+ {isMac ? '⌘S' : 'Ctrl+S'}
47
+ </ContextMenuShortcut>
48
+ </ContextMenuItem>
49
+ ```
50
+ ### Example 3
51
+ ```tsx
52
+ // Complex shortcuts
53
+ <ContextMenuItem>
54
+ Find and Replace
55
+ <ContextMenuShortcut>⌘⌥F</ContextMenuShortcut>
56
+ </ContextMenuItem>
57
+ ```
@@ -0,0 +1,90 @@
1
+ # ContextMenuSubContent
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuSubContent - Container for sub-menu items Contains the items within a sub-menu. Automatically positioned relative to its trigger with collision detection and smooth animations. Supports all the same features as main menu content including keyboard navigation.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuSubContent } from '@neynar/ui';
11
+
12
+ <ContextMenuSubContent
13
+ asChild={true}
14
+ loop={true}
15
+ onCloseAutoFocus={handleCloseAutoFocus}
16
+ onEscapeKeyDown={handleEscapeKeyDown}
17
+ avoidCollisions={true}
18
+ sideOffset={0}
19
+ className="value"
20
+ >
21
+ {/* Your content here */}
22
+ </ContextMenuSubContent>
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
+ ### loop
33
+ - **Type**: `boolean`
34
+ - **Required**: No
35
+ - **Description**: Enable keyboard navigation looping from last to first item
36
+
37
+ ### onCloseAutoFocus
38
+ - **Type**: `(event: Event) => void`
39
+ - **Required**: No
40
+ - **Description**: Handle focus return when sub-menu closes
41
+
42
+ ### onEscapeKeyDown
43
+ - **Type**: `(event: KeyboardEvent) => void`
44
+ - **Required**: No
45
+ - **Description**: Handle escape key presses
46
+
47
+ ### avoidCollisions
48
+ - **Type**: `boolean`
49
+ - **Required**: No
50
+ - **Description**: Prevent collisions with viewport boundaries
51
+
52
+ ### sideOffset
53
+ - **Type**: `number`
54
+ - **Required**: No
55
+ - **Description**: Distance in pixels from the trigger anchor
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**: Sub-menu items, separators, and labels
66
+
67
+ ## Examples
68
+
69
+ ### Example 1
70
+ ```tsx
71
+ <ContextMenuSubContent>
72
+ <ContextMenuItem>Option 1</ContextMenuItem>
73
+ <ContextMenuItem>Option 2</ContextMenuItem>
74
+ <ContextMenuSeparator />
75
+ <ContextMenuItem>Option 3</ContextMenuItem>
76
+ </ContextMenuSubContent>
77
+ ```
78
+ ### Example 2
79
+ ```tsx
80
+ // With portal and collision avoidance
81
+ <ContextMenuSubContent
82
+ avoidCollisions={true}
83
+ sideOffset={8}
84
+ className="min-w-[200px]"
85
+ >
86
+ <ContextMenuLabel>Sub Options</ContextMenuLabel>
87
+ <ContextMenuItem>Action A</ContextMenuItem>
88
+ <ContextMenuItem>Action B</ContextMenuItem>
89
+ </ContextMenuSubContent>
90
+ ```