@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,75 @@
1
+ # InputGroupText
2
+
3
+ **Type**: component
4
+
5
+ InputGroupText - Static text or label content within an InputGroupAddon A span element for displaying non-interactive text, labels, prefixes, suffixes, or icons within an input group addon. Styled with muted foreground colors and optimized spacing. Commonly used for currency symbols, units of measurement, URL protocols, or descriptive labels.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { InputGroupText } from '@neynar/ui';
11
+
12
+ <InputGroupText
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </InputGroupText>
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
+ ### Example 1
34
+ ```tsx
35
+ // Currency symbol prefix
36
+ <InputGroup>
37
+ <InputGroupAddon align="inline-start">
38
+ <DollarSign className="size-4" />
39
+ </InputGroupAddon>
40
+ <InputGroupInput type="number" placeholder="0.00" />
41
+ <InputGroupAddon align="inline-end">
42
+ <InputGroupText>USD</InputGroupText>
43
+ </InputGroupAddon>
44
+ </InputGroup>
45
+ ```
46
+ ### Example 2
47
+ ```tsx
48
+ // URL protocol prefix
49
+ <InputGroup>
50
+ <InputGroupAddon align="inline-start">
51
+ <InputGroupText>https://</InputGroupText>
52
+ </InputGroupAddon>
53
+ <InputGroupInput placeholder="example.com" />
54
+ </InputGroup>
55
+ ```
56
+ ### Example 3
57
+ ```tsx
58
+ // Label for textarea
59
+ <InputGroup>
60
+ <InputGroupAddon align="block-start">
61
+ <InputGroupText>Message</InputGroupText>
62
+ </InputGroupAddon>
63
+ <InputGroupTextarea placeholder="Type your message..." />
64
+ </InputGroup>
65
+ ```
66
+ ### Example 4
67
+ ```tsx
68
+ // Character counter
69
+ <InputGroup>
70
+ <InputGroupTextarea placeholder="Comment..." />
71
+ <InputGroupAddon align="block-end">
72
+ <InputGroupText className="text-xs">250 characters</InputGroupText>
73
+ </InputGroupAddon>
74
+ </InputGroup>
75
+ ```
@@ -0,0 +1,157 @@
1
+ # InputGroupTextarea
2
+
3
+ **Type**: component
4
+
5
+ InputGroupTextarea - Multi-line textarea element within an InputGroup A styled textarea component designed to work with InputGroup, especially with block-aligned addons (top/bottom positioning). Removes default borders and shadows as the parent InputGroup handles visual states. Resizing is disabled by default to maintain consistent layout with the container. Automatically flexes to fill available space.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { InputGroupTextarea } from '@neynar/ui';
11
+
12
+ <InputGroupTextarea
13
+ className="value"
14
+ placeholder="value"
15
+ rows={0}
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
+ maxLength={0}
26
+ />
27
+ ```
28
+
29
+ ## Component Props
30
+
31
+ ### className
32
+ - **Type**: `string`
33
+ - **Required**: No
34
+ - **Description**: No description available
35
+
36
+ ### placeholder
37
+ - **Type**: `string`
38
+ - **Required**: No
39
+ - **Description**: No description available
40
+
41
+ ### rows
42
+ - **Type**: `number`
43
+ - **Required**: No
44
+ - **Description**: No description available
45
+
46
+ ### value
47
+ - **Type**: `string`
48
+ - **Required**: No
49
+ - **Description**: No description available
50
+
51
+ ### defaultValue
52
+ - **Type**: `string`
53
+ - **Required**: No
54
+ - **Description**: No description available
55
+
56
+ ### onChange
57
+ - **Type**: `React.ChangeEventHandler<HTMLTextAreaElement>`
58
+ - **Required**: No
59
+ - **Description**: No description available
60
+
61
+ ### disabled
62
+ - **Type**: `boolean`
63
+ - **Required**: No
64
+ - **Description**: No description available
65
+
66
+ ### readOnly
67
+ - **Type**: `boolean`
68
+ - **Required**: No
69
+ - **Description**: No description available
70
+
71
+ ### "aria-invalid"
72
+ - **Type**: `boolean | "true" | "false"`
73
+ - **Required**: No
74
+ - **Description**: No description available
75
+
76
+ ### name
77
+ - **Type**: `string`
78
+ - **Required**: No
79
+ - **Description**: No description available
80
+
81
+ ### id
82
+ - **Type**: `string`
83
+ - **Required**: No
84
+ - **Description**: No description available
85
+
86
+ ### required
87
+ - **Type**: `boolean`
88
+ - **Required**: No
89
+ - **Description**: No description available
90
+
91
+ ### maxLength
92
+ - **Type**: `number`
93
+ - **Required**: No
94
+ - **Description**: No description available
95
+
96
+ ## Examples
97
+
98
+ ### Example 1
99
+ ```tsx
100
+ // Basic textarea with label addon
101
+ <InputGroup>
102
+ <InputGroupAddon align="block-start">
103
+ <InputGroupText>Message</InputGroupText>
104
+ </InputGroupAddon>
105
+ <InputGroupTextarea placeholder="Type your message here..." />
106
+ </InputGroup>
107
+ ```
108
+ ### Example 2
109
+ ```tsx
110
+ // Textarea with submit button below
111
+ <InputGroup>
112
+ <InputGroupTextarea placeholder="Write your comment..." rows={4} />
113
+ <InputGroupAddon align="block-end">
114
+ <InputGroupButton size="sm">
115
+ <Send className="size-4" />
116
+ Post
117
+ </InputGroupButton>
118
+ </InputGroupAddon>
119
+ </InputGroup>
120
+ ```
121
+ ### Example 3
122
+ ```tsx
123
+ // Complete comment form with top and bottom addons
124
+ <InputGroup>
125
+ <InputGroupAddon align="block-start">
126
+ <InputGroupText>Your Comment</InputGroupText>
127
+ <InputGroupButton size="icon-xs">
128
+ <X className="size-4" />
129
+ </InputGroupButton>
130
+ </InputGroupAddon>
131
+ <InputGroupTextarea placeholder="Add a comment..." rows={3} />
132
+ <InputGroupAddon align="block-end">
133
+ <InputGroupButton size="sm" variant="default">
134
+ Post Comment
135
+ </InputGroupButton>
136
+ </InputGroupAddon>
137
+ </InputGroup>
138
+ ```
139
+ ### Example 4
140
+ ```tsx
141
+ // Textarea with character counter
142
+ const [message, setMessage] = useState("");
143
+ <InputGroup>
144
+ <InputGroupTextarea
145
+ placeholder="Compose your message..."
146
+ value={message}
147
+ onChange={(e) => setMessage(e.target.value)}
148
+ rows={5}
149
+ />
150
+ <InputGroupAddon align="block-end">
151
+ <InputGroupText className="text-xs">
152
+ {message.length} characters
153
+ </InputGroupText>
154
+ <InputGroupButton size="sm">Send</InputGroupButton>
155
+ </InputGroupAddon>
156
+ </InputGroup>
157
+ ```
@@ -0,0 +1,108 @@
1
+ # InputGroup
2
+
3
+ **Type**: component
4
+
5
+ InputGroup - Container for inputs with integrated addons, buttons, and text A flexible container component that combines text inputs or textareas with decorative or functional elements like icons, buttons, labels, and keyboard shortcuts. Supports both inline (left/right) and block (top/bottom) addon positioning for diverse layout needs. Provides unified focus states, error handling, and disabled states across all child elements.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { InputGroup } from '@neynar/ui';
11
+
12
+ <InputGroup
13
+ className="value"
14
+ "data-disabled"={value}
15
+ >
16
+ {/* Your content here */}
17
+ </InputGroup>
18
+ ```
19
+
20
+ ## Component Props
21
+
22
+ ### className
23
+ - **Type**: `string`
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
+ ### "data-disabled"
33
+ - **Type**: `"true" | "false"`
34
+ - **Required**: No
35
+ - **Description**: No description available
36
+
37
+ ## Examples
38
+
39
+ ### Example 1
40
+ ```tsx
41
+ // Search input with icon and keyboard shortcut
42
+ <InputGroup>
43
+ <InputGroupAddon align="inline-start">
44
+ <Search className="size-4" />
45
+ </InputGroupAddon>
46
+ <InputGroupInput placeholder="Search..." />
47
+ <InputGroupAddon align="inline-end">
48
+ <Kbd>⌘K</Kbd>
49
+ </InputGroupAddon>
50
+ </InputGroup>
51
+ ```
52
+ ### Example 2
53
+ ```tsx
54
+ // Email subscription form with submit button
55
+ <InputGroup>
56
+ <InputGroupAddon align="inline-start">
57
+ <Mail className="size-4" />
58
+ </InputGroupAddon>
59
+ <InputGroupInput type="email" placeholder="Enter your email" />
60
+ <InputGroupAddon align="inline-end">
61
+ <InputGroupButton size="sm">Subscribe</InputGroupButton>
62
+ </InputGroupAddon>
63
+ </InputGroup>
64
+ ```
65
+ ### Example 3
66
+ ```tsx
67
+ // Price input with currency indicators
68
+ <InputGroup>
69
+ <InputGroupAddon align="inline-start">
70
+ <DollarSign className="size-4" />
71
+ </InputGroupAddon>
72
+ <InputGroupInput type="number" placeholder="0.00" />
73
+ <InputGroupAddon align="inline-end">
74
+ <InputGroupText>USD</InputGroupText>
75
+ </InputGroupAddon>
76
+ </InputGroup>
77
+ ```
78
+ ### Example 4
79
+ ```tsx
80
+ // Comment textarea with block addons
81
+ <InputGroup>
82
+ <InputGroupAddon align="block-start">
83
+ <InputGroupText>Your Comment</InputGroupText>
84
+ </InputGroupAddon>
85
+ <InputGroupTextarea placeholder="Write your comment..." rows={4} />
86
+ <InputGroupAddon align="block-end">
87
+ <InputGroupButton size="sm">
88
+ <Send className="size-4" />
89
+ Post
90
+ </InputGroupButton>
91
+ </InputGroupAddon>
92
+ </InputGroup>
93
+ ```
94
+ ### Example 5
95
+ ```tsx
96
+ // Error state with aria-invalid
97
+ <InputGroup>
98
+ <InputGroupAddon align="inline-start">
99
+ <Mail className="size-4" />
100
+ </InputGroupAddon>
101
+ <InputGroupInput
102
+ type="email"
103
+ placeholder="Email"
104
+ aria-invalid="true"
105
+ defaultValue="invalid-email"
106
+ />
107
+ </InputGroup>
108
+ ```
@@ -0,0 +1,319 @@
1
+ # Input
2
+
3
+ **Type**: component
4
+
5
+ Input - Versatile form input component for text, email, password, and other input types A flexible and accessible input component built on native HTML input elements with enhanced styling and form integration capabilities. Supports all HTML input types including text, email, password, number, file, date, and more. Features consistent design tokens, error states, focus management, and seamless integration with form libraries like React Hook Form.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { Input } from '@neynar/ui';
11
+
12
+ <Input
13
+ type={value}
14
+ placeholder="value"
15
+ value={value}
16
+ defaultValue={value}
17
+ disabled={true}
18
+ required={true}
19
+ readOnly={true}
20
+ id="value"
21
+ name="value"
22
+ autoComplete="value"
23
+ autoFocus={true}
24
+ maxLength={0}
25
+ minLength={0}
26
+ pattern="value"
27
+ min={value}
28
+ max={value}
29
+ step={value}
30
+ onChange={handleChange}
31
+ onFocus={handleFocus}
32
+ onBlur={handleBlur}
33
+ onKeyDown={handleKeyDown}
34
+ onKeyUp={handleKeyUp}
35
+ "aria-invalid"={value}
36
+ "aria-describedby"="value"
37
+ "aria-labelledby"="value"
38
+ "aria-label"="value"
39
+ "aria-required"={value}
40
+ className="value"
41
+ />
42
+ ```
43
+
44
+ ## Component Props
45
+
46
+ ### type
47
+ - **Type**: `React.HTMLInputTypeAttribute`
48
+ - **Required**: No
49
+ - **Description**: No description available
50
+
51
+ ### placeholder
52
+ - **Type**: `string`
53
+ - **Required**: No
54
+ - **Description**: No description available
55
+
56
+ ### value
57
+ - **Type**: `string | ReadonlyArray<string> | number`
58
+ - **Required**: No
59
+ - **Description**: No description available
60
+
61
+ ### defaultValue
62
+ - **Type**: `string | ReadonlyArray<string> | number`
63
+ - **Required**: No
64
+ - **Description**: No description available
65
+
66
+ ### disabled
67
+ - **Type**: `boolean`
68
+ - **Required**: No
69
+ - **Description**: No description available
70
+
71
+ ### required
72
+ - **Type**: `boolean`
73
+ - **Required**: No
74
+ - **Description**: No description available
75
+
76
+ ### readOnly
77
+ - **Type**: `boolean`
78
+ - **Required**: No
79
+ - **Description**: No description available
80
+
81
+ ### id
82
+ - **Type**: `string`
83
+ - **Required**: No
84
+ - **Description**: No description available
85
+
86
+ ### name
87
+ - **Type**: `string`
88
+ - **Required**: No
89
+ - **Description**: No description available
90
+
91
+ ### autoComplete
92
+ - **Type**: `string`
93
+ - **Required**: No
94
+ - **Description**: No description available
95
+
96
+ ### autoFocus
97
+ - **Type**: `boolean`
98
+ - **Required**: No
99
+ - **Description**: No description available
100
+
101
+ ### maxLength
102
+ - **Type**: `number`
103
+ - **Required**: No
104
+ - **Description**: No description available
105
+
106
+ ### minLength
107
+ - **Type**: `number`
108
+ - **Required**: No
109
+ - **Description**: No description available
110
+
111
+ ### pattern
112
+ - **Type**: `string`
113
+ - **Required**: No
114
+ - **Description**: No description available
115
+
116
+ ### min
117
+ - **Type**: `string | number`
118
+ - **Required**: No
119
+ - **Description**: No description available
120
+
121
+ ### max
122
+ - **Type**: `string | number`
123
+ - **Required**: No
124
+ - **Description**: No description available
125
+
126
+ ### step
127
+ - **Type**: `string | number`
128
+ - **Required**: No
129
+ - **Description**: No description available
130
+
131
+ ### onChange
132
+ - **Type**: `(event: React.ChangeEvent<HTMLInputElement>) => void`
133
+ - **Required**: No
134
+ - **Description**: No description available
135
+
136
+ ### onFocus
137
+ - **Type**: `(event: React.FocusEvent<HTMLInputElement>) => void`
138
+ - **Required**: No
139
+ - **Description**: No description available
140
+
141
+ ### onBlur
142
+ - **Type**: `(event: React.FocusEvent<HTMLInputElement>) => void`
143
+ - **Required**: No
144
+ - **Description**: No description available
145
+
146
+ ### onKeyDown
147
+ - **Type**: `(event: React.KeyboardEvent<HTMLInputElement>) => void`
148
+ - **Required**: No
149
+ - **Description**: No description available
150
+
151
+ ### onKeyUp
152
+ - **Type**: `(event: React.KeyboardEvent<HTMLInputElement>) => void`
153
+ - **Required**: No
154
+ - **Description**: No description available
155
+
156
+ ### "aria-invalid"
157
+ - **Type**: `boolean | "false" | "true" | "grammar" | "spelling"`
158
+ - **Required**: No
159
+ - **Description**: No description available
160
+
161
+ ### "aria-describedby"
162
+ - **Type**: `string`
163
+ - **Required**: No
164
+ - **Description**: No description available
165
+
166
+ ### "aria-labelledby"
167
+ - **Type**: `string`
168
+ - **Required**: No
169
+ - **Description**: No description available
170
+
171
+ ### "aria-label"
172
+ - **Type**: `string`
173
+ - **Required**: No
174
+ - **Description**: No description available
175
+
176
+ ### "aria-required"
177
+ - **Type**: `boolean | "false" | "true"`
178
+ - **Required**: No
179
+ - **Description**: No description available
180
+
181
+ ### className
182
+ - **Type**: `string`
183
+ - **Required**: No
184
+ - **Description**: No description available
185
+
186
+ ## Examples
187
+
188
+ ### Example 1
189
+ ```tsx
190
+ // Basic text input
191
+ <Input type="text" placeholder="Enter your name" />
192
+ ```
193
+ ### Example 2
194
+ ```tsx
195
+ // Email input with validation
196
+ <Input
197
+ type="email"
198
+ placeholder="your
199
+ ### Example 3
200
+ ```tsx
201
+ // Password input with toggle visibility
202
+ <div className="relative">
203
+ <Input
204
+ type="password"
205
+ placeholder="Enter password"
206
+ autoComplete="current-password"
207
+ />
208
+ <Button
209
+ type="button"
210
+ variant="ghost"
211
+ size="sm"
212
+ className="absolute right-0 top-0 h-full px-3"
213
+ >
214
+ <Eye className="h-4 w-4" />
215
+ </Button>
216
+ </div>
217
+ ```
218
+ ### Example 4
219
+ ```tsx
220
+ // Number input with min/max constraints
221
+ <Input
222
+ type="number"
223
+ placeholder="Age"
224
+ min={0}
225
+ max={120}
226
+ step={1}
227
+ />
228
+ ```
229
+ ### Example 5
230
+ ```tsx
231
+ // File input with proper labeling
232
+ <div className="grid w-full max-w-sm items-center gap-1.5">
233
+ <Label htmlFor="picture">Profile Picture</Label>
234
+ <Input
235
+ id="picture"
236
+ type="file"
237
+ accept="image/*"
238
+ aria-describedby="file-help"
239
+ />
240
+ <p id="file-help" className="text-sm text-muted-foreground">
241
+ Upload a PNG, JPG or GIF (max 5MB)
242
+ </p>
243
+ </div>
244
+ ```
245
+ ### Example 6
246
+ ```tsx
247
+ // Search input with icon
248
+ <div className="relative">
249
+ <Search className="absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 transform text-muted-foreground" />
250
+ <Input
251
+ type="search"
252
+ placeholder="Search..."
253
+ className="pl-8"
254
+ />
255
+ </div>
256
+ ```
257
+ ### Example 7
258
+ ```tsx
259
+ // Input with error state
260
+ <div className="space-y-2">
261
+ <Label htmlFor="email">Email</Label>
262
+ <Input
263
+ id="email"
264
+ type="email"
265
+ aria-invalid={true}
266
+ aria-describedby="email-error"
267
+ />
268
+ <p id="email-error" className="text-sm text-destructive">
269
+ Please enter a valid email address
270
+ </p>
271
+ </div>
272
+ ```
273
+ ### Example 8
274
+ ```tsx
275
+ // Form integration with React Hook Form
276
+ const { register, formState: { errors } } = useForm();
277
+ <div className="space-y-2">
278
+ <Label htmlFor="username">Username</Label>
279
+ <Input
280
+ id="username"
281
+ {...register("username", { required: "Username is required" })}
282
+ aria-invalid={!!errors.username}
283
+ aria-describedby={errors.username ? "username-error" : undefined}
284
+ />
285
+ {errors.username && (
286
+ <p id="username-error" className="text-sm text-destructive">
287
+ {errors.username.message}
288
+ </p>
289
+ )}
290
+ </div>
291
+ ```
292
+ ### Example 9
293
+ ```tsx
294
+ // Input with button (subscription form)
295
+ <div className="flex w-full max-w-sm items-center space-x-2">
296
+ <Input
297
+ type="email"
298
+ placeholder="Enter your email"
299
+ aria-label="Email for newsletter"
300
+ />
301
+ <Button type="submit">Subscribe</Button>
302
+ </div>
303
+ ```
304
+ ### Example 10
305
+ ```tsx
306
+ // Disabled input with explanation
307
+ <div className="space-y-2">
308
+ <Label htmlFor="readonly-field">System Generated ID</Label>
309
+ <Input
310
+ id="readonly-field"
311
+ value="SYS-12345"
312
+ disabled
313
+ aria-describedby="readonly-help"
314
+ />
315
+ <p id="readonly-help" className="text-sm text-muted-foreground">
316
+ This value is automatically generated and cannot be edited
317
+ </p>
318
+ </div>
319
+ ```