@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,73 @@
1
+ # ContextMenuSubTrigger
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuSubTrigger - Trigger element for opening sub-menus Menu item that opens a sub-menu on hover or focus. Automatically includes a chevron icon to indicate the presence of a sub-menu. Supports the same interaction patterns as regular menu items with additional sub-menu behavior.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuSubTrigger } from '@neynar/ui';
11
+
12
+ <ContextMenuSubTrigger
13
+ asChild={true}
14
+ disabled={true}
15
+ textValue="value"
16
+ inset={true}
17
+ className="value"
18
+ >
19
+ {/* Your content here */}
20
+ </ContextMenuSubTrigger>
21
+ ```
22
+
23
+ ## Component Props
24
+
25
+ ### asChild
26
+ - **Type**: `boolean`
27
+ - **Required**: No
28
+ - **Description**: Merges props with child element instead of rendering wrapper
29
+
30
+ ### disabled
31
+ - **Type**: `boolean`
32
+ - **Required**: No
33
+ - **Description**: Prevents interaction and sub-menu opening
34
+
35
+ ### textValue
36
+ - **Type**: `string`
37
+ - **Required**: No
38
+ - **Description**: Custom text for typeahead navigation
39
+
40
+ ### inset
41
+ - **Type**: `boolean`
42
+ - **Required**: No
43
+ - **Description**: Whether to indent the trigger for proper visual alignment
44
+
45
+ ### className
46
+ - **Type**: `string`
47
+ - **Required**: No
48
+ - **Description**: No description available
49
+
50
+ ### children
51
+ - **Type**: `React.ReactNode`
52
+ - **Required**: Yes
53
+ - **Description**: Content of the trigger (text, icons, etc.)
54
+
55
+ ## Examples
56
+
57
+ ### Example 1
58
+ ```tsx
59
+ <ContextMenuSubTrigger>
60
+ <Share className="mr-2 h-4 w-4" />
61
+ Share Options
62
+ </ContextMenuSubTrigger>
63
+ ```
64
+ ### Example 2
65
+ ```tsx
66
+ // With inset alignment for icon consistency
67
+ <ContextMenuContent>
68
+ <ContextMenuItem inset>Regular Item</ContextMenuItem>
69
+ <ContextMenuSubTrigger inset>
70
+ More Actions
71
+ </ContextMenuSubTrigger>
72
+ </ContextMenuContent>
73
+ ```
@@ -0,0 +1,61 @@
1
+ # ContextMenuSub
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuSub - Container for sub-menu functionality Wraps a sub-menu trigger and its content to create nested menu structures. Enables hierarchical organization of menu items with proper state management for opening and closing sub-menus.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuSub } from '@neynar/ui';
11
+
12
+ <ContextMenuSub
13
+ open={true}
14
+ onOpenChange={handleOpenChange}
15
+ >
16
+ {/* Your content here */}
17
+ </ContextMenuSub>
18
+ ```
19
+
20
+ ## Component Props
21
+
22
+ ### open
23
+ - **Type**: `boolean`
24
+ - **Required**: No
25
+ - **Description**: Controlled open state of the sub-menu
26
+
27
+ ### onOpenChange
28
+ - **Type**: `(open: boolean) => void`
29
+ - **Required**: No
30
+ - **Description**: Callback fired when sub-menu open state changes
31
+
32
+ ### children
33
+ - **Type**: `React.ReactNode`
34
+ - **Required**: Yes
35
+ - **Description**: Sub-menu trigger and content components
36
+
37
+ ## Examples
38
+
39
+ ### Example 1
40
+ ```tsx
41
+ <ContextMenuSub>
42
+ <ContextMenuSubTrigger>Share</ContextMenuSubTrigger>
43
+ <ContextMenuSubContent>
44
+ <ContextMenuItem>Email</ContextMenuItem>
45
+ <ContextMenuItem>Copy Link</ContextMenuItem>
46
+ </ContextMenuSubContent>
47
+ </ContextMenuSub>
48
+ ```
49
+ ### Example 2
50
+ ```tsx
51
+ // Controlled sub-menu
52
+ const [subOpen, setSubOpen] = useState(false)
53
+ <ContextMenuSub open={subOpen} onOpenChange={setSubOpen}>
54
+ <ContextMenuSubTrigger>More Actions</ContextMenuSubTrigger>
55
+ <ContextMenuSubContent>
56
+ <ContextMenuItem onClick={() => setSubOpen(false)}>
57
+ Archive
58
+ </ContextMenuItem>
59
+ </ContextMenuSubContent>
60
+ </ContextMenuSub>
61
+ ```
@@ -0,0 +1,53 @@
1
+ # ContextMenuTrigger
2
+
3
+ **Type**: component
4
+
5
+ ContextMenuTrigger - The element that triggers the context menu Wraps any element to make it respond to right-click or long-press events. The trigger element should provide visual feedback about its interactive nature. Uses the `asChild` pattern to merge props with child elements for composition.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenuTrigger } from '@neynar/ui';
11
+
12
+ <ContextMenuTrigger
13
+ asChild={true}
14
+ disabled={true}
15
+ >
16
+ {/* Your content here */}
17
+ </ContextMenuTrigger>
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
+ ### disabled
28
+ - **Type**: `boolean`
29
+ - **Required**: No
30
+ - **Description**: Prevents context menu from opening when trigger is activated
31
+
32
+ ### children
33
+ - **Type**: `React.ReactNode`
34
+ - **Required**: Yes
35
+ - **Description**: The element that should respond to right-click events
36
+
37
+ ## Examples
38
+
39
+ ### Example 1
40
+ ```tsx
41
+ <ContextMenuTrigger>
42
+ <Button variant="outline">Right-click me</Button>
43
+ </ContextMenuTrigger>
44
+ ```
45
+ ### Example 2
46
+ ```tsx
47
+ // With asChild for direct prop merging
48
+ <ContextMenuTrigger asChild>
49
+ <div className="p-4 border rounded cursor-pointer">
50
+ Right-click target area
51
+ </div>
52
+ </ContextMenuTrigger>
53
+ ```
@@ -0,0 +1,103 @@
1
+ # ContextMenu
2
+
3
+ **Type**: component
4
+
5
+ ContextMenu - A contextual menu that appears on right-click or long-press Context menus provide contextual actions for specific elements or areas. Built on Radix UI primitives, they appear when users right-click (or long-press on touch devices) and offer actions relevant to the clicked item or region.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { ContextMenu } from '@neynar/ui';
11
+
12
+ <ContextMenu
13
+ dir={value}
14
+ onOpenChange={handleOpenChange}
15
+ modal={true}
16
+ >
17
+ {/* Your content here */}
18
+ </ContextMenu>
19
+ ```
20
+
21
+ ## Component Props
22
+
23
+ ### dir
24
+ - **Type**: `"ltr" | "rtl"`
25
+ - **Required**: No
26
+ - **Description**: No description available
27
+
28
+ ### onOpenChange
29
+ - **Type**: `(open: boolean) => void`
30
+ - **Required**: No
31
+ - **Description**: No description available
32
+
33
+ ### modal
34
+ - **Type**: `boolean`
35
+ - **Required**: No
36
+ - **Description**: No description available
37
+
38
+ ### children
39
+ - **Type**: `React.ReactNode`
40
+ - **Required**: No
41
+ - **Description**: No description available
42
+
43
+ ## Examples
44
+
45
+ ### Example 1
46
+ ```tsx
47
+ // Basic context menu with items
48
+ <ContextMenu>
49
+ <ContextMenuTrigger>
50
+ <div className="border rounded p-4">
51
+ Right-click here
52
+ </div>
53
+ </ContextMenuTrigger>
54
+ <ContextMenuContent>
55
+ <ContextMenuItem>Copy</ContextMenuItem>
56
+ <ContextMenuItem>Paste</ContextMenuItem>
57
+ <ContextMenuSeparator />
58
+ <ContextMenuItem variant="destructive">Delete</ContextMenuItem>
59
+ </ContextMenuContent>
60
+ </ContextMenu>
61
+ ```
62
+ ### Example 2
63
+ ```tsx
64
+ // With sub-menus and shortcuts
65
+ <ContextMenu>
66
+ <ContextMenuTrigger>Right-click me</ContextMenuTrigger>
67
+ <ContextMenuContent>
68
+ <ContextMenuItem>
69
+ Edit <ContextMenuShortcut>⌘E</ContextMenuShortcut>
70
+ </ContextMenuItem>
71
+ <ContextMenuSub>
72
+ <ContextMenuSubTrigger>Share</ContextMenuSubTrigger>
73
+ <ContextMenuSubContent>
74
+ <ContextMenuItem>Email</ContextMenuItem>
75
+ <ContextMenuItem>Copy Link</ContextMenuItem>
76
+ </ContextMenuSubContent>
77
+ </ContextMenuSub>
78
+ </ContextMenuContent>
79
+ </ContextMenu>
80
+ ```
81
+ ### Example 3
82
+ ```tsx
83
+ // With checkboxes and radio groups
84
+ <ContextMenu>
85
+ <ContextMenuTrigger>Settings Menu</ContextMenuTrigger>
86
+ <ContextMenuContent>
87
+ <ContextMenuLabel>Preferences</ContextMenuLabel>
88
+ <ContextMenuSeparator />
89
+ <ContextMenuCheckboxItem checked={showToolbar} onCheckedChange={setShowToolbar}>
90
+ Show Toolbar
91
+ </ContextMenuCheckboxItem>
92
+ <ContextMenuCheckboxItem checked={showSidebar} onCheckedChange={setShowSidebar}>
93
+ Show Sidebar
94
+ </ContextMenuCheckboxItem>
95
+ <ContextMenuSeparator />
96
+ <ContextMenuRadioGroup value={theme} onValueChange={setTheme}>
97
+ <ContextMenuRadioItem value="light">Light Theme</ContextMenuRadioItem>
98
+ <ContextMenuRadioItem value="dark">Dark Theme</ContextMenuRadioItem>
99
+ <ContextMenuRadioItem value="system">System Theme</ContextMenuRadioItem>
100
+ </ContextMenuRadioGroup>
101
+ </ContextMenuContent>
102
+ </ContextMenu>
103
+ ```
@@ -0,0 +1,90 @@
1
+ # DatePicker
2
+
3
+ **Type**: component
4
+
5
+ DatePicker - A comprehensive date selection component with popover calendar interface A polished date selection component that combines an accessible trigger button with a full-featured calendar popover. Built on Radix UI Popover and Calendar primitives with shadcn/ui styling, providing intuitive date selection with proper accessibility, keyboard navigation, automatic positioning, and internationalization support. The component handles both controlled and uncontrolled usage patterns, integrates seamlessly with forms and validation systems, and provides consistent date formatting using date-fns. The popover automatically positions itself to stay within viewport bounds and includes smooth animations for a polished user experience.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { DatePicker } from '@neynar/ui';
11
+
12
+ <DatePicker
13
+ date={value}
14
+ onDateChange={handleDateChange}
15
+ placeholder="value"
16
+ disabled={true}
17
+ className="value"
18
+ />
19
+ ```
20
+
21
+ ## Component Props
22
+
23
+ ### date
24
+ - **Type**: `Date`
25
+ - **Required**: No
26
+ - **Description**: No description available
27
+
28
+ ### onDateChange
29
+ - **Type**: `(date: Date | undefined) => void`
30
+ - **Required**: No
31
+ - **Description**: No description available
32
+
33
+ ### placeholder
34
+ - **Type**: `string`
35
+ - **Required**: No
36
+ - **Description**: No description available
37
+
38
+ ### disabled
39
+ - **Type**: `boolean`
40
+ - **Required**: No
41
+ - **Description**: No description available
42
+
43
+ ### className
44
+ - **Type**: `string`
45
+ - **Required**: No
46
+ - **Description**: No description available
47
+
48
+ ## Examples
49
+
50
+ ### Example 1
51
+ ```tsx
52
+ // Basic controlled date picker
53
+ const [date, setDate] = useState<Date>();
54
+ <DatePicker
55
+ date={date}
56
+ onDateChange={setDate}
57
+ placeholder="Select date"
58
+ />
59
+ ```
60
+ ### Example 2
61
+ ```tsx
62
+ // Date picker for forms with validation
63
+ const [birthDate, setBirthDate] = useState<Date>();
64
+ <DatePicker
65
+ date={birthDate}
66
+ onDateChange={setBirthDate}
67
+ placeholder="Select birth date"
68
+ className="w-[280px]"
69
+ disabled={isSubmitting}
70
+ />
71
+ ```
72
+ ### Example 3
73
+ ```tsx
74
+ // Date range start/end picker
75
+ <div className="flex gap-2 items-center">
76
+ <DatePicker
77
+ date={startDate}
78
+ onDateChange={setStartDate}
79
+ placeholder="Start date"
80
+ className="w-[180px]"
81
+ />
82
+ <span>to</span>
83
+ <DatePicker
84
+ date={endDate}
85
+ onDateChange={setEndDate}
86
+ placeholder="End date"
87
+ className="w-[180px]"
88
+ />
89
+ </div>
90
+ ```
@@ -0,0 +1,61 @@
1
+ # DialogClose
2
+
3
+ **Type**: component
4
+
5
+ DialogClose - A close button that dismisses the dialog Can be placed anywhere within DialogContent to provide a close action. Typically used for custom close buttons in addition to the default X button. Automatically closes the dialog when activated and returns focus to the trigger.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { DialogClose } from '@neynar/ui';
11
+
12
+ <DialogClose
13
+ asChild={true}
14
+ className="value"
15
+ >
16
+ {/* Your content here */}
17
+ </DialogClose>
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
+ ### Example 1
40
+ ```tsx
41
+ <DialogClose asChild>
42
+ <Button variant="outline">Cancel</Button>
43
+ </DialogClose>
44
+ ```
45
+ ### Example 2
46
+ ```tsx
47
+ // Direct button without asChild
48
+ <DialogClose className="close-button">
49
+ Close Dialog
50
+ </DialogClose>
51
+ ```
52
+ ### Example 3
53
+ ```tsx
54
+ // In footer with multiple actions
55
+ <DialogFooter>
56
+ <DialogClose asChild>
57
+ <Button variant="outline">Cancel</Button>
58
+ </DialogClose>
59
+ <Button type="submit">Save</Button>
60
+ </DialogFooter>
61
+ ```
@@ -0,0 +1,128 @@
1
+ # DialogContent
2
+
3
+ **Type**: component
4
+
5
+ DialogContent - The main content container for the dialog The primary container for dialog content that automatically includes the overlay and portal. Provides the visual dialog box with animations, positioning, and focus management. Includes a close button (X) by default which can be hidden using the showCloseButton prop.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { DialogContent } from '@neynar/ui';
11
+
12
+ <DialogContent
13
+ asChild={true}
14
+ forceMount={true}
15
+ onOpenAutoFocus={handleOpenAutoFocus}
16
+ onCloseAutoFocus={handleCloseAutoFocus}
17
+ onEscapeKeyDown={handleEscapeKeyDown}
18
+ onPointerDownOutside={handlePointerDownOutside}
19
+ onInteractOutside={handleInteractOutside}
20
+ showCloseButton={true}
21
+ className="value"
22
+ >
23
+ {/* Your content here */}
24
+ </DialogContent>
25
+ ```
26
+
27
+ ## Component Props
28
+
29
+ ### asChild
30
+ - **Type**: `boolean`
31
+ - **Required**: No
32
+ - **Description**: No description available
33
+
34
+ ### forceMount
35
+ - **Type**: `boolean`
36
+ - **Required**: No
37
+ - **Description**: No description available
38
+
39
+ ### onOpenAutoFocus
40
+ - **Type**: `(event: Event) => void`
41
+ - **Required**: No
42
+ - **Description**: No description available
43
+
44
+ ### onCloseAutoFocus
45
+ - **Type**: `(event: Event) => void`
46
+ - **Required**: No
47
+ - **Description**: No description available
48
+
49
+ ### onEscapeKeyDown
50
+ - **Type**: `(event: KeyboardEvent) => void`
51
+ - **Required**: No
52
+ - **Description**: No description available
53
+
54
+ ### onPointerDownOutside
55
+ - **Type**: `(event: PointerEvent) => void`
56
+ - **Required**: No
57
+ - **Description**: No description available
58
+
59
+ ### onInteractOutside
60
+ - **Type**: `(
61
+ event: React.FocusEvent | MouseEvent | TouchEvent,
62
+ ) => void`
63
+ - **Required**: No
64
+ - **Description**: No description available
65
+
66
+ ### showCloseButton
67
+ - **Type**: `boolean`
68
+ - **Required**: No
69
+ - **Description**: Whether to show the X close button in top-right corner (default: true)
70
+
71
+ ### className
72
+ - **Type**: `string`
73
+ - **Required**: No
74
+ - **Description**: Additional CSS classes to apply to the content container
75
+
76
+ ### children
77
+ - **Type**: `React.ReactNode`
78
+ - **Required**: No
79
+ - **Description**: Dialog content including header, body, and footer elements
80
+
81
+ ## Examples
82
+
83
+ ### Example 1
84
+ ```tsx
85
+ // Standard content with header and footer
86
+ <DialogContent>
87
+ <DialogHeader>
88
+ <DialogTitle>Dialog Title</DialogTitle>
89
+ <DialogDescription>
90
+ Detailed description of the dialog's purpose
91
+ </DialogDescription>
92
+ </DialogHeader>
93
+ <div className="py-4">
94
+ Main dialog content goes here
95
+ </div>
96
+ <DialogFooter>
97
+ <Button variant="outline">Cancel</Button>
98
+ <Button>Confirm</Button>
99
+ </DialogFooter>
100
+ </DialogContent>
101
+ ```
102
+ ### Example 2
103
+ ```tsx
104
+ // Custom sizing and scrollable content
105
+ <DialogContent className="sm:max-w-[425px] max-h-[80vh] overflow-y-auto">
106
+ <DialogHeader>
107
+ <DialogTitle>Long Content</DialogTitle>
108
+ </DialogHeader>
109
+ <div className="space-y-4">
110
+ // Long scrollable content
111
+ </div>
112
+ </DialogContent>
113
+ ```
114
+ ### Example 3
115
+ ```tsx
116
+ // Without default close button
117
+ <DialogContent showCloseButton={false}>
118
+ <DialogHeader>
119
+ <DialogTitle>Custom Close</DialogTitle>
120
+ </DialogHeader>
121
+ <div>Content without X button</div>
122
+ <DialogFooter>
123
+ <DialogClose asChild>
124
+ <Button>Close</Button>
125
+ </DialogClose>
126
+ </DialogFooter>
127
+ </DialogContent>
128
+ ```
@@ -0,0 +1,44 @@
1
+ # DialogDescription
2
+
3
+ **Type**: component
4
+
5
+ DialogDescription - Supplementary description for the dialog Provides additional context or instructions for the dialog content. Helps users understand what action they're about to take.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { DialogDescription } from '@neynar/ui';
11
+
12
+ <DialogDescription
13
+ asChild={true}
14
+ className="value"
15
+ >
16
+ {/* Your content here */}
17
+ </DialogDescription>
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
+ <DialogDescription>
41
+ This action cannot be undone. This will permanently delete your
42
+ account and remove your data from our servers.
43
+ </DialogDescription>
44
+ ```
@@ -0,0 +1,38 @@
1
+ # DialogFooter
2
+
3
+ **Type**: component
4
+
5
+ DialogFooter - Container for dialog action buttons Typically contains action buttons like Save, Cancel, or Submit. Automatically handles responsive layout with proper button alignment.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { DialogFooter } from '@neynar/ui';
11
+
12
+ <DialogFooter
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </DialogFooter>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: No description available
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ## Examples
32
+
33
+ ```tsx
34
+ <DialogFooter>
35
+ <Button variant="outline">Cancel</Button>
36
+ <Button type="submit">Save changes</Button>
37
+ </DialogFooter>
38
+ ```
@@ -0,0 +1,40 @@
1
+ # DialogHeader
2
+
3
+ **Type**: component
4
+
5
+ DialogHeader - Container for dialog title and description Groups the dialog's title and description at the top of the dialog content. Provides consistent spacing and alignment for header elements.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { DialogHeader } from '@neynar/ui';
11
+
12
+ <DialogHeader
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </DialogHeader>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: No description available
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ## Examples
32
+
33
+ ```tsx
34
+ <DialogHeader>
35
+ <DialogTitle>Edit profile</DialogTitle>
36
+ <DialogDescription>
37
+ Make changes to your profile here. Click save when you're done.
38
+ </DialogDescription>
39
+ </DialogHeader>
40
+ ```