@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,167 @@
1
+ # HoverCardContent
2
+
3
+ **Type**: component
4
+
5
+ HoverCardContent - Floating content container with intelligent positioning and animations The content area that appears when the trigger is hovered. Features built-in animations, intelligent positioning to avoid viewport boundaries, and customizable alignment options. Automatically portaled to prevent z-index and overflow issues, with smooth fade and scale transitions that respect user motion preferences. The content supports rich layouts including text, images, buttons, and complex components. Positioning is automatically calculated based on available space, with collision detection to ensure the content remains visible within the viewport.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { HoverCardContent } from '@neynar/ui';
11
+
12
+ <HoverCardContent
13
+ side={value}
14
+ sideOffset={0}
15
+ align={value}
16
+ alignOffset={0}
17
+ avoidCollisions={true}
18
+ collisionBoundary={value}
19
+ collisionPadding={value}
20
+ sticky={value}
21
+ hideWhenDetached={true}
22
+ forceMount={value}
23
+ asChild={true}
24
+ className="value"
25
+ >
26
+ {/* Your content here */}
27
+ </HoverCardContent>
28
+ ```
29
+
30
+ ## Component Props
31
+
32
+ ### side
33
+ - **Type**: `"top" | "right" | "bottom" | "left"`
34
+ - **Required**: No
35
+ - **Description**: No description available
36
+
37
+ ### sideOffset
38
+ - **Type**: `number`
39
+ - **Required**: No
40
+ - **Description**: No description available
41
+
42
+ ### align
43
+ - **Type**: `"start" | "center" | "end"`
44
+ - **Required**: No
45
+ - **Description**: No description available
46
+
47
+ ### alignOffset
48
+ - **Type**: `number`
49
+ - **Required**: No
50
+ - **Description**: No description available
51
+
52
+ ### avoidCollisions
53
+ - **Type**: `boolean`
54
+ - **Required**: No
55
+ - **Description**: No description available
56
+
57
+ ### collisionBoundary
58
+ - **Type**: `Element | null | Array<Element | null>`
59
+ - **Required**: No
60
+ - **Description**: No description available
61
+
62
+ ### collisionPadding
63
+ - **Type**: `| number
64
+ | Partial<Record<"top" | "right" | "bottom" | "left", number>>`
65
+ - **Required**: No
66
+ - **Description**: No description available
67
+
68
+ ### sticky
69
+ - **Type**: `"partial" | "always"`
70
+ - **Required**: No
71
+ - **Description**: No description available
72
+
73
+ ### hideWhenDetached
74
+ - **Type**: `boolean`
75
+ - **Required**: No
76
+ - **Description**: No description available
77
+
78
+ ### forceMount
79
+ - **Type**: `true`
80
+ - **Required**: No
81
+ - **Description**: No description available
82
+
83
+ ### asChild
84
+ - **Type**: `boolean`
85
+ - **Required**: No
86
+ - **Description**: No description available
87
+
88
+ ### className
89
+ - **Type**: `string`
90
+ - **Required**: No
91
+ - **Description**: No description available
92
+
93
+ ### children
94
+ - **Type**: `React.ReactNode`
95
+ - **Required**: No
96
+ - **Description**: No description available
97
+
98
+ ## Examples
99
+
100
+ ### Example 1
101
+ ```tsx
102
+ // Simple text content
103
+ <HoverCardContent>
104
+ <p>This is a simple hover card with text content.</p>
105
+ </HoverCardContent>
106
+ ```
107
+ ### Example 2
108
+ ```tsx
109
+ // Positioned above the trigger with custom alignment
110
+ <HoverCardContent side="top" align="start" sideOffset={8}>
111
+ <div className="text-sm">
112
+ Content appears above the trigger, aligned to the start edge
113
+ </div>
114
+ </HoverCardContent>
115
+ ```
116
+ ### Example 3
117
+ ```tsx
118
+ // Rich content with custom width and complex layout
119
+ <HoverCardContent className="w-80">
120
+ <div className="space-y-3">
121
+ <div className="flex items-center gap-3">
122
+ <Avatar className="h-12 w-12">
123
+ <AvatarImage src="/avatar.jpg" />
124
+ <AvatarFallback>JD</AvatarFallback>
125
+ </Avatar>
126
+ <div>
127
+ <h4 className="font-semibold">John Doe</h4>
128
+ <p className="text-sm text-muted-foreground">Software Engineer</p>
129
+ </div>
130
+ </div>
131
+ <Separator />
132
+ <div className="grid grid-cols-2 gap-4 text-sm">
133
+ <div>
134
+ <p className="font-medium">Repositories</p>
135
+ <p className="text-muted-foreground">42</p>
136
+ </div>
137
+ <div>
138
+ <p className="font-medium">Followers</p>
139
+ <p className="text-muted-foreground">1.2k</p>
140
+ </div>
141
+ </div>
142
+ </div>
143
+ </HoverCardContent>
144
+ ```
145
+ ### Example 4
146
+ ```tsx
147
+ // Interactive content with buttons
148
+ <HoverCardContent>
149
+ <div className="space-y-3">
150
+ <h4 className="font-semibold">Quick Actions</h4>
151
+ <div className="flex flex-col gap-2">
152
+ <Button size="sm" variant="ghost" className="justify-start">
153
+ <EditIcon className="mr-2 h-4 w-4" />
154
+ Edit Details
155
+ </Button>
156
+ <Button size="sm" variant="ghost" className="justify-start">
157
+ <ShareIcon className="mr-2 h-4 w-4" />
158
+ Share Profile
159
+ </Button>
160
+ <Button size="sm" variant="ghost" className="justify-start">
161
+ <SettingsIcon className="mr-2 h-4 w-4" />
162
+ Settings
163
+ </Button>
164
+ </div>
165
+ </div>
166
+ </HoverCardContent>
167
+ ```
@@ -0,0 +1,65 @@
1
+ # HoverCardTrigger
2
+
3
+ **Type**: component
4
+
5
+ HoverCardTrigger - Interactive element that activates the hover card on mouse hover The trigger component that users hover over to reveal the hover card content. Can wrap any element or render as its child using the asChild prop. Automatically manages hover detection and integrates with the parent HoverCard's timing configuration. When using asChild, the trigger merges its props with the immediate child element, allowing for seamless integration with buttons, links, or any other interactive elements.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { HoverCardTrigger } from '@neynar/ui';
11
+
12
+ <HoverCardTrigger
13
+ asChild={true}
14
+ className="value"
15
+ >
16
+ {/* Your content here */}
17
+ </HoverCardTrigger>
18
+ ```
19
+
20
+ ## Component Props
21
+
22
+ ### asChild
23
+ - **Type**: `boolean`
24
+ - **Required**: No
25
+ - **Description**: No description available
26
+
27
+ ### children
28
+ - **Type**: `React.ReactNode`
29
+ - **Required**: No
30
+ - **Description**: No description available
31
+
32
+ ### className
33
+ - **Type**: `string`
34
+ - **Required**: No
35
+ - **Description**: No description available
36
+
37
+ ## Examples
38
+
39
+ ### Example 1
40
+ ```tsx
41
+ // Basic trigger with text
42
+ <HoverCardTrigger>
43
+ <span className="text-blue-600 cursor-pointer">Hover for details</span>
44
+ </HoverCardTrigger>
45
+ ```
46
+ ### Example 2
47
+ ```tsx
48
+ // Using asChild with a button
49
+ <HoverCardTrigger asChild>
50
+ <Button variant="outline">User Profile</Button>
51
+ </HoverCardTrigger>
52
+ ```
53
+ ### Example 3
54
+ ```tsx
55
+ // With a link element
56
+ <HoverCardTrigger asChild>
57
+ <a href="/profile/john" className="font-medium hover:underline">
58
+ ### Example 4
59
+ ```tsx
60
+ // Complex trigger with icon
61
+ <HoverCardTrigger className="inline-flex items-center gap-2">
62
+ <UserIcon className="h-4 w-4" />
63
+ <span>View Profile</span>
64
+ </HoverCardTrigger>
65
+ ```
@@ -0,0 +1,121 @@
1
+ # HoverCard
2
+
3
+ **Type**: component
4
+
5
+ HoverCard - Preview content that appears on hover for rich contextual information A floating card component that reveals rich content when users hover over a trigger element. Designed specifically for sighted users to preview content available behind links without requiring navigation. Built on Radix UI primitives with smooth animations and intelligent positioning to avoid viewport boundaries. Perfect for user profiles, repository information, link previews, tooltips with complex content, and any contextual details that enhance the user experience without interrupting their current workflow.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { HoverCard } from '@neynar/ui';
11
+
12
+ <HoverCard
13
+ defaultOpen={true}
14
+ open={true}
15
+ onValueChange={handleValueChange}
16
+ openDelay={0}
17
+ closeDelay={0}
18
+ >
19
+ {/* Your content here */}
20
+ </HoverCard>
21
+ ```
22
+
23
+ ## Component Props
24
+
25
+ ### defaultOpen
26
+ - **Type**: `boolean`
27
+ - **Required**: No
28
+ - **Description**: No description available
29
+
30
+ ### open
31
+ - **Type**: `boolean`
32
+ - **Required**: No
33
+ - **Description**: No description available
34
+
35
+ ### onValueChange
36
+ - **Type**: `(open: boolean) => void`
37
+ - **Required**: No
38
+ - **Description**: No description available
39
+
40
+ ### openDelay
41
+ - **Type**: `number`
42
+ - **Required**: No
43
+ - **Description**: No description available
44
+
45
+ ### closeDelay
46
+ - **Type**: `number`
47
+ - **Required**: No
48
+ - **Description**: No description available
49
+
50
+ ### children
51
+ - **Type**: `React.ReactNode`
52
+ - **Required**: No
53
+ - **Description**: No description available
54
+
55
+ ## Examples
56
+
57
+ ### Example 1
58
+ ```tsx
59
+ // Basic user profile hover card
60
+ <HoverCard>
61
+ <HoverCardTrigger asChild>
62
+ <Button variant="link">
63
+ ### Example 2
64
+ ```tsx
65
+ // With custom positioning and delays
66
+ <HoverCard openDelay={500} closeDelay={200}>
67
+ <HoverCardTrigger asChild>
68
+ <Button>Hover me</Button>
69
+ </HoverCardTrigger>
70
+ <HoverCardContent side="top" align="start">
71
+ Content appears above with custom alignment
72
+ </HoverCardContent>
73
+ </HoverCard>
74
+ ```
75
+ ### Example 3
76
+ ```tsx
77
+ // Interactive hover card with buttons
78
+ <HoverCard>
79
+ <HoverCardTrigger asChild>
80
+ <Button variant="ghost">Quick Actions</Button>
81
+ </HoverCardTrigger>
82
+ <HoverCardContent>
83
+ <div className="space-y-2">
84
+ <h4 className="font-semibold">Available Actions</h4>
85
+ <div className="flex flex-col gap-1">
86
+ <Button size="sm" variant="ghost">Edit Profile</Button>
87
+ <Button size="sm" variant="ghost">View Analytics</Button>
88
+ <Button size="sm" variant="ghost">Manage Settings</Button>
89
+ </div>
90
+ </div>
91
+ </HoverCardContent>
92
+ </HoverCard>
93
+ ```
94
+ ### Example 4
95
+ ```tsx
96
+ // Link preview with rich content
97
+ <HoverCard openDelay={300}>
98
+ <HoverCardTrigger asChild>
99
+ <a href="/article/123" className="text-blue-600 hover:underline">
100
+ Advanced React Patterns
101
+ </a>
102
+ </HoverCardTrigger>
103
+ <HoverCardContent className="w-96">
104
+ <div className="space-y-3">
105
+ <img src="/article-thumbnail.jpg" className="rounded w-full h-32 object-cover" />
106
+ <div>
107
+ <h4 className="font-semibold">Advanced React Patterns</h4>
108
+ <p className="text-sm text-muted-foreground">
109
+ Learn modern React patterns including render props, compound components,
110
+ and advanced hook compositions for scalable applications.
111
+ </p>
112
+ <div className="flex items-center gap-2 mt-2 text-xs text-muted-foreground">
113
+ <span>12 min read</span>
114
+ <span>•</span>
115
+ <span>Published Mar 15, 2024</span>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ </HoverCardContent>
120
+ </HoverCard>
121
+ ```
@@ -0,0 +1,91 @@
1
+ # InputGroupAddon
2
+
3
+ **Type**: component
4
+
5
+ InputGroupAddon - Container for icons, buttons, text, or labels within an InputGroup A flexible addon container that can be positioned at any edge of the input (left, right, top, or bottom). Automatically adjusts layout and spacing based on alignment. Clicking the addon area focuses the associated input for improved usability. Supports icons, static text, buttons, keyboard shortcuts (Kbd), and custom content.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { InputGroupAddon } from '@neynar/ui';
11
+
12
+ <InputGroupAddon
13
+ align={value}
14
+ className="value"
15
+ >
16
+ {/* Your content here */}
17
+ </InputGroupAddon>
18
+ ```
19
+
20
+ ## Component Props
21
+
22
+ ### align
23
+ - **Type**: `"inline-start" | "inline-end" | "block-start" | "block-end"`
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
+ // Icon addon on the left (inline-start)
42
+ <InputGroup>
43
+ <InputGroupAddon align="inline-start">
44
+ <Search className="size-4" />
45
+ </InputGroupAddon>
46
+ <InputGroupInput placeholder="Search..." />
47
+ </InputGroup>
48
+ ```
49
+ ### Example 2
50
+ ```tsx
51
+ // Text suffix on the right (inline-end)
52
+ <InputGroup>
53
+ <InputGroupInput placeholder="Enter amount" />
54
+ <InputGroupAddon align="inline-end">
55
+ <InputGroupText>USD</InputGroupText>
56
+ </InputGroupAddon>
57
+ </InputGroup>
58
+ ```
59
+ ### Example 3
60
+ ```tsx
61
+ // Button addon for action
62
+ <InputGroup>
63
+ <InputGroupInput placeholder="Enter coupon code" />
64
+ <InputGroupAddon align="inline-end">
65
+ <InputGroupButton size="sm">Apply</InputGroupButton>
66
+ </InputGroupAddon>
67
+ </InputGroup>
68
+ ```
69
+ ### Example 4
70
+ ```tsx
71
+ // Keyboard shortcut indicator
72
+ <InputGroup>
73
+ <InputGroupInput placeholder="Quick search" />
74
+ <InputGroupAddon align="inline-end">
75
+ <Kbd>⌘K</Kbd>
76
+ </InputGroupAddon>
77
+ </InputGroup>
78
+ ```
79
+ ### Example 5
80
+ ```tsx
81
+ // Block addon with multiple elements (top position)
82
+ <InputGroup>
83
+ <InputGroupAddon align="block-start">
84
+ <InputGroupText>Message</InputGroupText>
85
+ <InputGroupButton size="icon-xs">
86
+ <X className="size-4" />
87
+ </InputGroupButton>
88
+ </InputGroupAddon>
89
+ <InputGroupTextarea placeholder="Type your message..." />
90
+ </InputGroup>
91
+ ```
@@ -0,0 +1,120 @@
1
+ # InputGroupButton
2
+
3
+ **Type**: component
4
+
5
+ InputGroupButton - Action button within an InputGroupAddon A specialized button component optimized for use within input group addons. Styled with reduced shadows and compact sizing to integrate seamlessly with the input group container. Supports text buttons, icon buttons, and combination buttons with various size options. Uses ghost variant by default for subtle integration with the input group.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { InputGroupButton } from '@neynar/ui';
11
+
12
+ <InputGroupButton
13
+ size={value}
14
+ variant={value}
15
+ type={value}
16
+ className="value"
17
+ onClick={handleClick}
18
+ disabled={true}
19
+ >
20
+ {/* Your content here */}
21
+ </InputGroupButton>
22
+ ```
23
+
24
+ ## Component Props
25
+
26
+ ### size
27
+ - **Type**: `"xs" | "sm" | "icon-xs" | "icon-sm"`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ### variant
32
+ - **Type**: `"default" | "destructive" | "outline" | "secondary" | "ghost" | "link"`
33
+ - **Required**: No
34
+ - **Description**: No description available
35
+
36
+ ### type
37
+ - **Type**: `"button" | "submit" | "reset"`
38
+ - **Required**: No
39
+ - **Description**: No description available
40
+
41
+ ### className
42
+ - **Type**: `string`
43
+ - **Required**: No
44
+ - **Description**: No description available
45
+
46
+ ### children
47
+ - **Type**: `React.ReactNode`
48
+ - **Required**: No
49
+ - **Description**: No description available
50
+
51
+ ### onClick
52
+ - **Type**: `React.MouseEventHandler<HTMLButtonElement>`
53
+ - **Required**: No
54
+ - **Description**: No description available
55
+
56
+ ### disabled
57
+ - **Type**: `boolean`
58
+ - **Required**: No
59
+ - **Description**: No description available
60
+
61
+ ## Examples
62
+
63
+ ### Example 1
64
+ ```tsx
65
+ // Text button for action
66
+ <InputGroup>
67
+ <InputGroupInput placeholder="Enter coupon code" />
68
+ <InputGroupAddon align="inline-end">
69
+ <InputGroupButton size="sm">Apply</InputGroupButton>
70
+ </InputGroupAddon>
71
+ </InputGroup>
72
+ ```
73
+ ### Example 2
74
+ ```tsx
75
+ // Icon-only button for compact actions
76
+ <InputGroup>
77
+ <InputGroupInput readOnly value="API Key: sk_live_123..." />
78
+ <InputGroupAddon align="inline-end">
79
+ <InputGroupButton size="icon-xs">
80
+ <Copy className="size-4" />
81
+ </InputGroupButton>
82
+ </InputGroupAddon>
83
+ </InputGroup>
84
+ ```
85
+ ### Example 3
86
+ ```tsx
87
+ // Button with icon and text
88
+ <InputGroup>
89
+ <InputGroupInput type="email" placeholder="Enter email" />
90
+ <InputGroupAddon align="inline-end">
91
+ <InputGroupButton size="sm">
92
+ <Send className="size-4" />
93
+ Subscribe
94
+ </InputGroupButton>
95
+ </InputGroupAddon>
96
+ </InputGroup>
97
+ ```
98
+ ### Example 4
99
+ ```tsx
100
+ // Submit button in block addon
101
+ <InputGroup>
102
+ <InputGroupTextarea placeholder="Write your message..." />
103
+ <InputGroupAddon align="block-end">
104
+ <InputGroupButton size="sm" variant="default" type="submit">
105
+ Post Comment
106
+ </InputGroupButton>
107
+ </InputGroupAddon>
108
+ </InputGroup>
109
+ ```
110
+ ### Example 5
111
+ ```tsx
112
+ // Multiple buttons with different variants
113
+ <InputGroup>
114
+ <InputGroupTextarea placeholder="Compose..." />
115
+ <InputGroupAddon align="block-end">
116
+ <InputGroupButton size="sm" variant="outline">Cancel</InputGroupButton>
117
+ <InputGroupButton size="sm" variant="default">Send</InputGroupButton>
118
+ </InputGroupAddon>
119
+ </InputGroup>
120
+ ```
@@ -0,0 +1,145 @@
1
+ # InputGroupInput
2
+
3
+ **Type**: component
4
+
5
+ InputGroupInput - Text input element within an InputGroup A styled input component designed to work seamlessly within an InputGroup container. Inherits all standard HTML input props and removes default borders, shadows, and focus rings since the parent InputGroup handles visual states. Automatically flexes to fill available space between addons.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { InputGroupInput } from '@neynar/ui';
11
+
12
+ <InputGroupInput
13
+ className="value"
14
+ placeholder="value"
15
+ type={value}
16
+ value={value}
17
+ defaultValue={value}
18
+ onChange={handleChange}
19
+ disabled={true}
20
+ readOnly={true}
21
+ "aria-invalid"={value}
22
+ name="value"
23
+ id="value"
24
+ required={true}
25
+ />
26
+ ```
27
+
28
+ ## Component Props
29
+
30
+ ### className
31
+ - **Type**: `string`
32
+ - **Required**: No
33
+ - **Description**: No description available
34
+
35
+ ### placeholder
36
+ - **Type**: `string`
37
+ - **Required**: No
38
+ - **Description**: No description available
39
+
40
+ ### type
41
+ - **Type**: `React.HTMLInputTypeAttribute`
42
+ - **Required**: No
43
+ - **Description**: No description available
44
+
45
+ ### value
46
+ - **Type**: `string | number`
47
+ - **Required**: No
48
+ - **Description**: No description available
49
+
50
+ ### defaultValue
51
+ - **Type**: `string | number`
52
+ - **Required**: No
53
+ - **Description**: No description available
54
+
55
+ ### onChange
56
+ - **Type**: `React.ChangeEventHandler<HTMLInputElement>`
57
+ - **Required**: No
58
+ - **Description**: No description available
59
+
60
+ ### disabled
61
+ - **Type**: `boolean`
62
+ - **Required**: No
63
+ - **Description**: No description available
64
+
65
+ ### readOnly
66
+ - **Type**: `boolean`
67
+ - **Required**: No
68
+ - **Description**: No description available
69
+
70
+ ### "aria-invalid"
71
+ - **Type**: `boolean | "true" | "false"`
72
+ - **Required**: No
73
+ - **Description**: No description available
74
+
75
+ ### name
76
+ - **Type**: `string`
77
+ - **Required**: No
78
+ - **Description**: No description available
79
+
80
+ ### id
81
+ - **Type**: `string`
82
+ - **Required**: No
83
+ - **Description**: No description available
84
+
85
+ ### required
86
+ - **Type**: `boolean`
87
+ - **Required**: No
88
+ - **Description**: No description available
89
+
90
+ ## Examples
91
+
92
+ ### Example 1
93
+ ```tsx
94
+ // Basic text input with icon
95
+ <InputGroup>
96
+ <InputGroupAddon align="inline-start">
97
+ <Search className="size-4" />
98
+ </InputGroupAddon>
99
+ <InputGroupInput placeholder="Search..." />
100
+ </InputGroup>
101
+ ```
102
+ ### Example 2
103
+ ```tsx
104
+ // Email input with validation
105
+ <InputGroup>
106
+ <InputGroupAddon align="inline-start">
107
+ <Mail className="size-4" />
108
+ </InputGroupAddon>
109
+ <InputGroupInput
110
+ type="email"
111
+ placeholder="you
112
+ ### Example 3
113
+ ```tsx
114
+ // Controlled number input
115
+ const [amount, setAmount] = useState("");
116
+ <InputGroup>
117
+ <InputGroupAddon align="inline-start">
118
+ <DollarSign className="size-4" />
119
+ </InputGroupAddon>
120
+ <InputGroupInput
121
+ type="number"
122
+ placeholder="0.00"
123
+ value={amount}
124
+ onChange={(e) => setAmount(e.target.value)}
125
+ />
126
+ <InputGroupAddon align="inline-end">
127
+ <InputGroupText>USD</InputGroupText>
128
+ </InputGroupAddon>
129
+ </InputGroup>
130
+ ```
131
+ ### Example 4
132
+ ```tsx
133
+ // Read-only input for displaying values
134
+ <InputGroup>
135
+ <InputGroupInput
136
+ readOnly
137
+ value="API Key: sk_live_123456789"
138
+ />
139
+ <InputGroupAddon align="inline-end">
140
+ <InputGroupButton size="icon-xs">
141
+ <Copy className="size-4" />
142
+ </InputGroupButton>
143
+ </InputGroupAddon>
144
+ </InputGroup>
145
+ ```