@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,100 @@
1
+ # Card
2
+
3
+ **Type**: component
4
+
5
+ Card - A flexible container component for grouping related content Cards are surfaces that display content and actions on a single topic. They should be easy to scan for relevant and actionable information. Cards support composition through multiple sub-components and can be customized with various layouts and styling patterns. Based on the shadcn/ui Card component, this implementation provides: - Flexible composition through sub-components - Semantic HTML structure for accessibility - Consistent spacing and visual hierarchy - Support for interactive elements and actions
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { Card } from '@neynar/ui';
11
+
12
+ <Card
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </Card>
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
+ // Basic card with header and content
36
+ <Card>
37
+ <CardHeader>
38
+ <CardTitle>Card Title</CardTitle>
39
+ <CardDescription>Card description goes here</CardDescription>
40
+ </CardHeader>
41
+ <CardContent>
42
+ <p>Card content goes here</p>
43
+ </CardContent>
44
+ </Card>
45
+ ```
46
+ ### Example 2
47
+ ```tsx
48
+ // Card with action button in header
49
+ <Card>
50
+ <CardHeader>
51
+ <CardTitle>Settings</CardTitle>
52
+ <CardAction>
53
+ <Button variant="ghost" size="icon">
54
+ <Settings />
55
+ </Button>
56
+ </CardAction>
57
+ </CardHeader>
58
+ <CardContent>
59
+ <p>Manage your settings</p>
60
+ </CardContent>
61
+ <CardFooter>
62
+ <Button>Save Changes</Button>
63
+ </CardFooter>
64
+ </Card>
65
+ ```
66
+ ### Example 3
67
+ ```tsx
68
+ // Minimal card with only content
69
+ <Card>
70
+ <CardContent>
71
+ <p>Simple card content without header or footer</p>
72
+ </CardContent>
73
+ </Card>
74
+ ```
75
+ ### Example 4
76
+ ```tsx
77
+ // Product card with custom styling
78
+ <Card className="w-80 hover:shadow-lg transition-shadow">
79
+ <CardHeader>
80
+ <div className="aspect-video bg-muted rounded-lg mb-4" />
81
+ <CardTitle>Product Name</CardTitle>
82
+ <CardDescription>Product description</CardDescription>
83
+ <CardAction>
84
+ <Badge variant="secondary">New</Badge>
85
+ </CardAction>
86
+ </CardHeader>
87
+ <CardContent>
88
+ <div className="flex items-center justify-between">
89
+ <span className="text-2xl font-bold">$299</span>
90
+ <span className="text-sm text-muted-foreground line-through">$399</span>
91
+ </div>
92
+ </CardContent>
93
+ <CardFooter className="gap-2">
94
+ <Button className="flex-1">Add to Cart</Button>
95
+ <Button size="icon" variant="outline">
96
+ <Heart className="size-4" />
97
+ </Button>
98
+ </CardFooter>
99
+ </Card>
100
+ ```
@@ -0,0 +1,77 @@
1
+ # CarouselContent
2
+
3
+ **Type**: component
4
+
5
+ Container component for carousel items that handles the scrolling viewport Wraps all carousel items and manages the scrollable area. This component must be a direct child of Carousel and handles orientation-specific layouts, overflow behavior, and slide spacing. The outer div provides overflow clipping while the inner div contains the flex layout for slides.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { CarouselContent } from '@neynar/ui';
11
+
12
+ <CarouselContent
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </CarouselContent>
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
+ // Basic usage
36
+ <CarouselContent>
37
+ <CarouselItem>Slide 1</CarouselItem>
38
+ <CarouselItem>Slide 2</CarouselItem>
39
+ <CarouselItem>Slide 3</CarouselItem>
40
+ </CarouselContent>
41
+ ```
42
+ ### Example 2
43
+ ```tsx
44
+ // Multi-item carousel with responsive spacing
45
+ <CarouselContent className="-ml-2 md:-ml-4">
46
+ <CarouselItem className="pl-2 md:pl-4 md:basis-1/2 lg:basis-1/3">
47
+ <Card>Product 1</Card>
48
+ </CarouselItem>
49
+ <CarouselItem className="pl-2 md:pl-4 md:basis-1/2 lg:basis-1/3">
50
+ <Card>Product 2</Card>
51
+ </CarouselItem>
52
+ </CarouselContent>
53
+ ```
54
+ ### Example 3
55
+ ```tsx
56
+ // Vertical orientation with custom height
57
+ <CarouselContent className="-mt-4 h-[300px]">
58
+ <CarouselItem className="pt-4 basis-1/2">
59
+ <div className="h-full bg-muted rounded-lg">Slide 1</div>
60
+ </CarouselItem>
61
+ <CarouselItem className="pt-4 basis-1/2">
62
+ <div className="h-full bg-muted rounded-lg">Slide 2</div>
63
+ </CarouselItem>
64
+ </CarouselContent>
65
+ ```
66
+ ### Example 4
67
+ ```tsx
68
+ // Custom slide spacing with CSS variables
69
+ <CarouselContent
70
+ className="-ml-4"
71
+ style={{ '--slide-spacing': '1rem' } as React.CSSProperties}
72
+ >
73
+ <CarouselItem className="pl-4">
74
+ Content with custom spacing
75
+ </CarouselItem>
76
+ </CarouselContent>
77
+ ```
@@ -0,0 +1,96 @@
1
+ # CarouselItem
2
+
3
+ **Type**: component
4
+
5
+ Individual slide/item component within the carousel Represents a single slide in the carousel that can contain any content. Automatically handles sizing, spacing, and orientation-specific layouts based on the parent carousel configuration. Each slide is a flex item with configurable basis for responsive layouts.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { CarouselItem } from '@neynar/ui';
11
+
12
+ <CarouselItem
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </CarouselItem>
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
+ // Basic slide with content
36
+ <CarouselItem>
37
+ <div className="p-6 bg-muted rounded-lg">
38
+ <h3 className="text-lg font-semibold">Slide Title</h3>
39
+ <p className="text-muted-foreground">Slide description</p>
40
+ </div>
41
+ </CarouselItem>
42
+ ```
43
+ ### Example 2
44
+ ```tsx
45
+ // Card-based slide with structured content
46
+ <CarouselItem>
47
+ <Card className="h-full">
48
+ <CardHeader>
49
+ <CardTitle>Product Name</CardTitle>
50
+ <CardDescription>Product category</CardDescription>
51
+ </CardHeader>
52
+ <CardContent>
53
+ <img src="product.jpg" alt="Product" className="w-full aspect-square object-cover" />
54
+ <p className="mt-2 text-2xl font-bold">$99.99</p>
55
+ </CardContent>
56
+ <CardFooter>
57
+ <Button className="w-full">Add to Cart</Button>
58
+ </CardFooter>
59
+ </Card>
60
+ </CarouselItem>
61
+ ```
62
+ ### Example 3
63
+ ```tsx
64
+ // Responsive multi-item carousel
65
+ <CarouselItem className="pl-4 basis-full sm:basis-1/2 lg:basis-1/3">
66
+ <div className="aspect-square bg-gradient-to-br from-blue-400 to-purple-600 rounded-lg p-6 text-white">
67
+ <h4 className="font-semibold">Feature {index + 1}</h4>
68
+ <p className="text-sm opacity-90">Description text</p>
69
+ </div>
70
+ </CarouselItem>
71
+ ```
72
+ ### Example 4
73
+ ```tsx
74
+ // Auto-sized slides for variable content
75
+ <CarouselItem className="basis-auto">
76
+ <Badge variant="secondary" className="text-nowrap px-4 py-2">
77
+ {tag.label}
78
+ </Badge>
79
+ </CarouselItem>
80
+ ```
81
+ ### Example 5
82
+ ```tsx
83
+ // Image gallery slide with aspect ratio
84
+ <CarouselItem className="basis-4/5">
85
+ <div className="relative aspect-video bg-muted rounded-lg overflow-hidden">
86
+ <img
87
+ src={image.src}
88
+ alt={image.alt}
89
+ className="object-cover w-full h-full"
90
+ />
91
+ <div className="absolute inset-0 bg-black/20 flex items-end p-4">
92
+ <h5 className="text-white font-medium">{image.title}</h5>
93
+ </div>
94
+ </div>
95
+ </CarouselItem>
96
+ ```
@@ -0,0 +1,95 @@
1
+ # CarouselNext
2
+
3
+ **Type**: component
4
+
5
+ Navigation button to go to the next carousel slide Renders a next navigation button that automatically handles disabled states when at the end of the carousel (unless loop is enabled). Supports both horizontal and vertical orientations with appropriate positioning and icon rotation. Integrates with the carousel context to provide seamless navigation.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { CarouselNext } from '@neynar/ui';
11
+
12
+ <CarouselNext
13
+ className="value"
14
+ variant={value}
15
+ size={value}
16
+ />
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: No description available
25
+
26
+ ### variant
27
+ - **Type**: `| "default"
28
+ | "destructive"
29
+ | "outline"
30
+ | "secondary"
31
+ | "ghost"
32
+ | "link"`
33
+ - **Required**: No
34
+ - **Description**: No description available
35
+
36
+ ### size
37
+ - **Type**: `"default" | "sm" | "lg" | "icon"`
38
+ - **Required**: No
39
+ - **Description**: No description available
40
+
41
+ ## Examples
42
+
43
+ ### Example 1
44
+ ```tsx
45
+ // Basic usage with default styling
46
+ <Carousel>
47
+ <CarouselContent>
48
+ <CarouselItem>Slide 1</CarouselItem>
49
+ <CarouselItem>Slide 2</CarouselItem>
50
+ </CarouselContent>
51
+ <CarouselPrevious />
52
+ <CarouselNext />
53
+ </Carousel>
54
+ ```
55
+ ### Example 2
56
+ ```tsx
57
+ // Custom positioned button
58
+ <CarouselNext
59
+ className="-right-8 bg-background shadow-md hover:shadow-lg"
60
+ variant="ghost"
61
+ size="sm"
62
+ />
63
+ ```
64
+ ### Example 3
65
+ ```tsx
66
+ // Vertical carousel with rotated icons
67
+ <Carousel orientation="vertical" className="h-[400px]">
68
+ <CarouselContent>...</CarouselContent>
69
+ <CarouselPrevious className="-top-8" />
70
+ <CarouselNext className="-bottom-8" />
71
+ </Carousel>
72
+ ```
73
+ ### Example 4
74
+ ```tsx
75
+ // Inside carousel bounds positioning
76
+ <div className="relative">
77
+ <Carousel>
78
+ <CarouselContent>...</CarouselContent>
79
+ <CarouselPrevious className="absolute left-4 top-1/2 -translate-y-1/2 z-10" />
80
+ <CarouselNext className="absolute right-4 top-1/2 -translate-y-1/2 z-10" />
81
+ </Carousel>
82
+ </div>
83
+ ```
84
+ ### Example 5
85
+ ```tsx
86
+ // Custom button content and accessibility
87
+ <CarouselNext
88
+ variant="secondary"
89
+ className="w-auto px-4"
90
+ aria-label="Go to next product"
91
+ >
92
+ Next
93
+ <ArrowRight className="w-4 h-4 ml-2" />
94
+ </CarouselNext>
95
+ ```
@@ -0,0 +1,95 @@
1
+ # CarouselPrevious
2
+
3
+ **Type**: component
4
+
5
+ Navigation button to go to the previous carousel slide Renders a previous navigation button that automatically handles disabled states when at the beginning of the carousel (unless loop is enabled). Supports both horizontal and vertical orientations with appropriate positioning and icon rotation. Integrates with the carousel context to provide seamless navigation.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { CarouselPrevious } from '@neynar/ui';
11
+
12
+ <CarouselPrevious
13
+ className="value"
14
+ variant={value}
15
+ size={value}
16
+ />
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: No description available
25
+
26
+ ### variant
27
+ - **Type**: `| "default"
28
+ | "destructive"
29
+ | "outline"
30
+ | "secondary"
31
+ | "ghost"
32
+ | "link"`
33
+ - **Required**: No
34
+ - **Description**: No description available
35
+
36
+ ### size
37
+ - **Type**: `"default" | "sm" | "lg" | "icon"`
38
+ - **Required**: No
39
+ - **Description**: No description available
40
+
41
+ ## Examples
42
+
43
+ ### Example 1
44
+ ```tsx
45
+ // Basic usage with default styling
46
+ <Carousel>
47
+ <CarouselContent>
48
+ <CarouselItem>Slide 1</CarouselItem>
49
+ <CarouselItem>Slide 2</CarouselItem>
50
+ </CarouselContent>
51
+ <CarouselPrevious />
52
+ <CarouselNext />
53
+ </Carousel>
54
+ ```
55
+ ### Example 2
56
+ ```tsx
57
+ // Custom positioned button
58
+ <CarouselPrevious
59
+ className="-left-8 bg-background shadow-md hover:shadow-lg"
60
+ variant="ghost"
61
+ size="sm"
62
+ />
63
+ ```
64
+ ### Example 3
65
+ ```tsx
66
+ // Vertical carousel with rotated icons
67
+ <Carousel orientation="vertical" className="h-[400px]">
68
+ <CarouselContent>...</CarouselContent>
69
+ <CarouselPrevious className="-top-8" />
70
+ <CarouselNext className="-bottom-8" />
71
+ </Carousel>
72
+ ```
73
+ ### Example 4
74
+ ```tsx
75
+ // Inside carousel bounds positioning
76
+ <div className="relative">
77
+ <Carousel>
78
+ <CarouselContent>...</CarouselContent>
79
+ <CarouselPrevious className="absolute left-4 top-1/2 -translate-y-1/2 z-10" />
80
+ <CarouselNext className="absolute right-4 top-1/2 -translate-y-1/2 z-10" />
81
+ </Carousel>
82
+ </div>
83
+ ```
84
+ ### Example 5
85
+ ```tsx
86
+ // Custom button content and accessibility
87
+ <CarouselPrevious
88
+ variant="secondary"
89
+ className="w-auto px-4"
90
+ aria-label="Go to previous product"
91
+ >
92
+ <ArrowLeft className="w-4 h-4 mr-2" />
93
+ Previous
94
+ </CarouselPrevious>
95
+ ```
@@ -0,0 +1,211 @@
1
+ # Carousel
2
+
3
+ **Type**: component
4
+
5
+ A responsive carousel/slider component for content presentation The Carousel component provides a touch-friendly, keyboard-accessible way to browse through multiple items. Built on Embla Carousel, it supports various configurations including autoplay, loop, drag scrolling, infinite scroll, momentum scrolling, and both horizontal and vertical orientations. Features include responsive breakpoints, plugin system, smooth animations, focus management, RTL support, and extensive customization options.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { Carousel } from '@neynar/ui';
11
+
12
+ <Carousel
13
+ opts={value}
14
+ plugins={value}
15
+ orientation={value}
16
+ setApi={() => {}}
17
+ className="value"
18
+ >
19
+ {/* Your content here */}
20
+ </Carousel>
21
+ ```
22
+
23
+ ## Component Props
24
+
25
+ ### opts
26
+ - **Type**: `CarouselOptions`
27
+ - **Required**: No
28
+ - **Description**: No description available
29
+
30
+ ### plugins
31
+ - **Type**: `CarouselPlugin`
32
+ - **Required**: No
33
+ - **Description**: No description available
34
+
35
+ ### orientation
36
+ - **Type**: `"horizontal" | "vertical"`
37
+ - **Required**: No
38
+ - **Description**: No description available
39
+
40
+ ### setApi
41
+ - **Type**: `(api: CarouselApi) => void`
42
+ - **Required**: No
43
+ - **Description**: No description available
44
+
45
+ ### className
46
+ - **Type**: `string`
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 image carousel
60
+ <Carousel className="w-full max-w-xs">
61
+ <CarouselContent>
62
+ {images.map((src, index) => (
63
+ <CarouselItem key={index}>
64
+ <img src={src} alt={`Slide ${index + 1}`} className="w-full" />
65
+ </CarouselItem>
66
+ ))}
67
+ </CarouselContent>
68
+ <CarouselPrevious />
69
+ <CarouselNext />
70
+ </Carousel>
71
+ ```
72
+ ### Example 2
73
+ ```tsx
74
+ // Multi-item responsive carousel with custom spacing
75
+ <Carousel
76
+ opts={{
77
+ align: "start",
78
+ loop: true,
79
+ slidesToScroll: "auto",
80
+ breakpoints: {
81
+ "(min-width: 768px)": { slidesToScroll: 2 }
82
+ }
83
+ }}
84
+ className="w-full"
85
+ >
86
+ <CarouselContent className="-ml-2 md:-ml-4">
87
+ {products.map((product, index) => (
88
+ <CarouselItem key={index} className="pl-2 md:pl-4 md:basis-1/2 lg:basis-1/3">
89
+ <Card>
90
+ <CardContent className="p-4">
91
+ <h3>{product.name}</h3>
92
+ <p>{product.price}</p>
93
+ </CardContent>
94
+ </Card>
95
+ </CarouselItem>
96
+ ))}
97
+ </CarouselContent>
98
+ <CarouselPrevious />
99
+ <CarouselNext />
100
+ </Carousel>
101
+ ```
102
+ ### Example 3
103
+ ```tsx
104
+ // Vertical carousel with autoplay plugin
105
+ import Autoplay from "embla-carousel-autoplay";
106
+ <Carousel
107
+ orientation="vertical"
108
+ opts={{ loop: true, align: "center" }}
109
+ plugins={[Autoplay({ delay: 3000, stopOnInteraction: true, stopOnMouseEnter: true })]}
110
+ className="h-[400px]"
111
+ >
112
+ <CarouselContent className="h-full">
113
+ {testimonials.map((testimonial, index) => (
114
+ <CarouselItem key={index} className="basis-1/2">
115
+ <div className="p-6">
116
+ <blockquote>{testimonial.quote}</blockquote>
117
+ <cite>{testimonial.author}</cite>
118
+ </div>
119
+ </CarouselItem>
120
+ ))}
121
+ </CarouselContent>
122
+ </Carousel>
123
+ ```
124
+ ### Example 4
125
+ ```tsx
126
+ // Controlled carousel with custom indicators and API access
127
+ import { useState, useEffect } from "react";
128
+ function ControlledCarousel() {
129
+ const [api, setApi] = useState<CarouselApi>();
130
+ const [current, setCurrent] = useState(0);
131
+ const [count, setCount] = useState(0);
132
+ useEffect(() => {
133
+ if (!api) return;
134
+ setCount(api.scrollSnapList().length);
135
+ setCurrent(api.selectedScrollSnap() + 1);
136
+ api.on('select', () => {
137
+ setCurrent(api.selectedScrollSnap() + 1);
138
+ });
139
+ }, [api]);
140
+ return (
141
+ <div className="space-y-4">
142
+ <Carousel setApi={setApi} opts={{ loop: true }}>
143
+ <CarouselContent>
144
+ {slides.map((slide, index) => (
145
+ <CarouselItem key={index}>{slide.content}</CarouselItem>
146
+ ))}
147
+ </CarouselContent>
148
+ <CarouselPrevious />
149
+ <CarouselNext />
150
+ </Carousel>
151
+ // Custom indicators
152
+ <div className="flex justify-center gap-2">
153
+ {Array.from({ length: count }).map((_, i) => (
154
+ <button
155
+ key={i}
156
+ className={cn(
157
+ "w-2 h-2 rounded-full transition-colors",
158
+ current === i + 1 ? "bg-primary" : "bg-muted"
159
+ )}
160
+ onClick={() => api?.scrollTo(i)}
161
+ />
162
+ ))}
163
+ </div>
164
+ <div className="text-center text-sm text-muted-foreground">
165
+ Slide {current} of {count}
166
+ </div>
167
+ </div>
168
+ );
169
+ }
170
+ ```
171
+ ### Example 5
172
+ ```tsx
173
+ // Momentum scrolling carousel with drag-free mode
174
+ <Carousel
175
+ opts={{
176
+ dragFree: true,
177
+ containScroll: false,
178
+ skipSnaps: true
179
+ }}
180
+ className="w-full"
181
+ >
182
+ <CarouselContent>
183
+ {items.map((item, index) => (
184
+ <CarouselItem key={index} className="basis-auto">
185
+ <div className="w-32 h-32 bg-muted rounded-lg" />
186
+ </CarouselItem>
187
+ ))}
188
+ </CarouselContent>
189
+ </Carousel>
190
+ ```
191
+ ### Example 6
192
+ ```tsx
193
+ // Breakpoint-responsive carousel that disables on larger screens
194
+ <Carousel
195
+ opts={{
196
+ active: true,
197
+ breakpoints: {
198
+ "(min-width: 768px)": { active: false }
199
+ }
200
+ }}
201
+ className="md:hidden"
202
+ >
203
+ <CarouselContent>
204
+ {mobileItems.map((item, index) => (
205
+ <CarouselItem key={index}>{item}</CarouselItem>
206
+ ))}
207
+ </CarouselContent>
208
+ <CarouselPrevious />
209
+ <CarouselNext />
210
+ </Carousel>
211
+ ```