@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,182 @@
1
+ # Spinner
2
+
3
+ **Type**: component
4
+
5
+ Spinner - Loading indicator with animated rotation A circular loading spinner built on the Lucide React Loader2 icon with smooth rotation animation. Provides visual feedback to users during asynchronous operations such as data fetching, form submissions, or content loading. The spinner is highly customizable through CSS classes and supports all standard SVG props for size, color, and styling.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { Spinner } from '@neynar/ui';
11
+
12
+ <Spinner
13
+ className="value"
14
+ color="value"
15
+ size={value}
16
+ strokeWidth={value}
17
+ "aria-label"="value"
18
+ role="value"
19
+ "aria-hidden"={value}
20
+ "aria-describedby"="value"
21
+ "aria-live"={value}
22
+ "aria-busy"={true}
23
+ style={value}
24
+ />
25
+ ```
26
+
27
+ ## Component Props
28
+
29
+ ### className
30
+ - **Type**: `string`
31
+ - **Required**: No
32
+ - **Description**: No description available
33
+
34
+ ### color
35
+ - **Type**: `string`
36
+ - **Required**: No
37
+ - **Description**: No description available
38
+
39
+ ### size
40
+ - **Type**: `number | string`
41
+ - **Required**: No
42
+ - **Description**: No description available
43
+
44
+ ### strokeWidth
45
+ - **Type**: `number | string`
46
+ - **Required**: No
47
+ - **Description**: No description available
48
+
49
+ ### "aria-label"
50
+ - **Type**: `string`
51
+ - **Required**: No
52
+ - **Description**: No description available
53
+
54
+ ### role
55
+ - **Type**: `string`
56
+ - **Required**: No
57
+ - **Description**: No description available
58
+
59
+ ### "aria-hidden"
60
+ - **Type**: `boolean | "false" | "true"`
61
+ - **Required**: No
62
+ - **Description**: No description available
63
+
64
+ ### "aria-describedby"
65
+ - **Type**: `string`
66
+ - **Required**: No
67
+ - **Description**: No description available
68
+
69
+ ### "aria-live"
70
+ - **Type**: `"off" | "polite" | "assertive"`
71
+ - **Required**: No
72
+ - **Description**: No description available
73
+
74
+ ### "aria-busy"
75
+ - **Type**: `boolean`
76
+ - **Required**: No
77
+ - **Description**: No description available
78
+
79
+ ### style
80
+ - **Type**: `React.CSSProperties`
81
+ - **Required**: No
82
+ - **Description**: No description available
83
+
84
+ ## Examples
85
+
86
+ ### Example 1
87
+ ```tsx
88
+ // Basic loading spinner with default size (16px)
89
+ <Spinner />
90
+ // Custom size using Tailwind size utilities
91
+ <Spinner className="size-6" />
92
+ <Spinner className="size-8" />
93
+ <Spinner className="size-12" />
94
+ // Custom color using text color classes
95
+ <Spinner className="text-primary" />
96
+ <Spinner className="text-destructive" />
97
+ <Spinner className="text-muted-foreground" />
98
+ ```
99
+ ### Example 2
100
+ ```tsx
101
+ // In loading buttons
102
+ import { Button } from "./button";
103
+ <Button disabled>
104
+ <Spinner className="mr-2 size-4" />
105
+ Loading...
106
+ </Button>
107
+ <Button variant="outline" disabled>
108
+ <Spinner className="mr-2 size-4" />
109
+ Processing
110
+ </Button>
111
+ // Icon-only loading button
112
+ <Button size="icon" disabled aria-label="Loading">
113
+ <Spinner className="size-4" />
114
+ </Button>
115
+ ```
116
+ ### Example 3
117
+ ```tsx
118
+ // Full-page loading state
119
+ <div className="flex min-h-screen items-center justify-center">
120
+ <div className="text-center space-y-4">
121
+ <Spinner className="size-12 mx-auto" />
122
+ <p className="text-muted-foreground">Loading your dashboard...</p>
123
+ </div>
124
+ </div>
125
+ // Card loading state
126
+ <div className="border rounded-lg p-8 flex flex-col items-center gap-3">
127
+ <Spinner className="size-8" />
128
+ <p className="text-sm text-muted-foreground">Fetching data...</p>
129
+ </div>
130
+ // Inline loading with text
131
+ <p className="flex items-center gap-2 text-sm">
132
+ <Spinner className="size-4" />
133
+ Syncing your data...
134
+ </p>
135
+ ```
136
+ ### Example 4
137
+ ```tsx
138
+ // Custom animation speed
139
+ // Slow rotation
140
+ <Spinner className="animate-[spin_2s_linear_infinite]" />
141
+ // Fast rotation
142
+ <Spinner className="animate-[spin_0.5s_linear_infinite]" />
143
+ // Custom size and color combination
144
+ <Spinner
145
+ className="size-6 text-blue-500"
146
+ strokeWidth={3}
147
+ />
148
+ // With background overlay
149
+ <div className="relative">
150
+ <div className="absolute inset-0 bg-background/50 backdrop-blur-sm flex items-center justify-center rounded-lg">
151
+ <Spinner className="size-8" />
152
+ </div>
153
+ <div>Your content here</div>
154
+ </div>
155
+ ```
156
+ ### Example 5
157
+ ```tsx
158
+ // Conditional rendering with loading state
159
+ function DataDisplay() {
160
+ const [isLoading, setIsLoading] = React.useState(true);
161
+ return (
162
+ <div className="space-y-4">
163
+ {isLoading ? (
164
+ <div className="flex justify-center p-8">
165
+ <Spinner className="size-6" />
166
+ </div>
167
+ ) : (
168
+ <div>Loaded content here</div>
169
+ )}
170
+ </div>
171
+ );
172
+ }
173
+ // With aria-live region for screen reader announcements
174
+ <div aria-live="polite" aria-atomic="true">
175
+ {isLoading && (
176
+ <div className="flex items-center gap-2">
177
+ <Spinner className="size-4" />
178
+ <span>Loading content, please wait...</span>
179
+ </div>
180
+ )}
181
+ </div>
182
+ ```
@@ -0,0 +1,28 @@
1
+ # Stack
2
+
3
+ **Type**: component
4
+
5
+ Stack - A flexible layout component for consistent spacing between elements Stack is a fundamental layout primitive that arranges child elements in either vertical or horizontal direction with consistent spacing. Built on flexbox principles, it provides a clean, declarative API for common layout patterns without requiring custom CSS or complex flex configurations. **Core Features:** - Consistent spacing using Tailwind's design system - Flexible direction control (vertical/horizontal) - Zero-config flexbox layouts with predictable behavior - Composable with other UI components and layout utilities - Full accessibility support with semantic HTML structure - TypeScript-first with comprehensive prop validation **Common Use Cases:** - Form layouts with consistent field spacing - Button groups and action bars - Content sections with uniform gaps - Navigation lists and menu structures - Card layouts and dashboard grids - Page sections and content hierarchy - Responsive component layouts **Design System Integration:** Stack integrates seamlessly with design systems by providing consistent spacing that aligns with Tailwind's spacing scale. This ensures visual harmony across your application and reduces the need for custom spacing utilities in most common layout scenarios.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { Stack } from '@neynar/ui';
11
+
12
+ <Stack
13
+ spacing={value}
14
+ direction={value}
15
+ />
16
+ ```
17
+
18
+ ## Component Props
19
+
20
+ ### spacing
21
+ - **Type**: `StackSpacing`
22
+ - **Required**: No
23
+ - **Description**: No description available
24
+
25
+ ### direction
26
+ - **Type**: `StackDirection`
27
+ - **Required**: No
28
+ - **Description**: No description available
@@ -0,0 +1,46 @@
1
+ # SubsectionTitle
2
+
3
+ **Type**: component
4
+
5
+ SubsectionTitle - Tertiary subsection heading component Subsection headings for further content division. Uses text-xl (20px) for subtle distinction from SectionTitle. Defaults to h3 element.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { SubsectionTitle } from '@neynar/ui';
11
+
12
+ <SubsectionTitle
13
+ as={value}
14
+ className="value"
15
+ >
16
+ {/* Your content here */}
17
+ </SubsectionTitle>
18
+ ```
19
+
20
+ ## Component Props
21
+
22
+ ### as
23
+ - **Type**: `React.ElementType`
24
+ - **Required**: No
25
+ - **Description**: HTML element to render
26
+
27
+ ### className
28
+ - **Type**: `string`
29
+ - **Required**: No
30
+ - **Description**: Additional Tailwind classes
31
+
32
+ ### children
33
+ - **Type**: `React.ReactNode`
34
+ - **Required**: No
35
+ - **Description**: Content to render
36
+
37
+ ## Examples
38
+
39
+ ```tsx
40
+ // Default usage
41
+ <SubsectionTitle>Configuration Options</SubsectionTitle>
42
+ // With custom styling
43
+ <SubsectionTitle className="text-muted-foreground">
44
+ Optional Settings
45
+ </SubsectionTitle>
46
+ ```
@@ -0,0 +1,76 @@
1
+ # Switch
2
+
3
+ **Type**: component
4
+
5
+ Switch - Binary toggle control for on/off states A versatile toggle switch component built on Radix UI Switch primitive that provides an accessible way to toggle between on/off states. Commonly used for settings, preferences, and feature toggles that have immediate effects. Built with Radix UI Switch primitive and styled with Tailwind CSS to ensure consistent visual appearance across light and dark themes. The component automatically handles state management, accessibility, keyboard navigation, and form integration.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { Switch } from '@neynar/ui';
11
+
12
+ <Switch
13
+ checked={true}
14
+ defaultChecked={true}
15
+ onCheckedChange={handleCheckedChange}
16
+ disabled={true}
17
+ required={true}
18
+ name="value"
19
+ value="value"
20
+ id="value"
21
+ asChild={true}
22
+ className="value"
23
+ />
24
+ ```
25
+
26
+ ## Component Props
27
+
28
+ ### checked
29
+ - **Type**: `boolean`
30
+ - **Required**: No
31
+ - **Description**: No description available
32
+
33
+ ### defaultChecked
34
+ - **Type**: `boolean`
35
+ - **Required**: No
36
+ - **Description**: No description available
37
+
38
+ ### onCheckedChange
39
+ - **Type**: `(checked: boolean) => void`
40
+ - **Required**: No
41
+ - **Description**: No description available
42
+
43
+ ### disabled
44
+ - **Type**: `boolean`
45
+ - **Required**: No
46
+ - **Description**: No description available
47
+
48
+ ### required
49
+ - **Type**: `boolean`
50
+ - **Required**: No
51
+ - **Description**: No description available
52
+
53
+ ### name
54
+ - **Type**: `string`
55
+ - **Required**: No
56
+ - **Description**: No description available
57
+
58
+ ### value
59
+ - **Type**: `string`
60
+ - **Required**: No
61
+ - **Description**: No description available
62
+
63
+ ### id
64
+ - **Type**: `string`
65
+ - **Required**: No
66
+ - **Description**: No description available
67
+
68
+ ### asChild
69
+ - **Type**: `boolean`
70
+ - **Required**: No
71
+ - **Description**: No description available
72
+
73
+ ### className
74
+ - **Type**: `string`
75
+ - **Required**: No
76
+ - **Description**: No description available
@@ -0,0 +1,36 @@
1
+ # TableBody
2
+
3
+ **Type**: component
4
+
5
+ TableBody - Container for table data rows Main content area of the table containing all data rows. Applies border styling where the last row has no bottom border. Contains TableRow components with TableCell elements.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { TableBody } from '@neynar/ui';
11
+
12
+ <TableBody
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </TableBody>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: No description available
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ## Examples
32
+
33
+ ```tsx
34
+ <TableBody>
35
+ <TableRow>
36
+ <TableCell>
@@ -0,0 +1,48 @@
1
+ # TableCaption
2
+
3
+ **Type**: component
4
+
5
+ TableCaption - Table caption for describing table content and context Provides a description, title, or additional context for the table. Displayed with muted styling and proper spacing. Essential for accessibility as screen readers announce the caption to provide table context.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { TableCaption } from '@neynar/ui';
11
+
12
+ <TableCaption
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </TableCaption>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: No description available
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ## Examples
32
+
33
+ ```tsx
34
+ <Table>
35
+ <TableCaption>Recent casts from your network</TableCaption>
36
+ <TableHeader>...</TableHeader>
37
+ <TableBody>...</TableBody>
38
+ </Table>
39
+ // Caption with additional context
40
+ <Table>
41
+ <TableCaption>
42
+ Channel analytics for the last 30 days.
43
+ Data updated every hour.
44
+ </TableCaption>
45
+ <TableHeader>...</TableHeader>
46
+ <TableBody>...</TableBody>
47
+ </Table>
48
+ ```
@@ -0,0 +1,53 @@
1
+ # TableCell
2
+
3
+ **Type**: component
4
+
5
+ TableCell - Table data cell component for content display Used for data cells within table rows with consistent padding and alignment. Supports custom styling, truncation, and special handling for interactive elements like checkboxes and buttons.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { TableCell } from '@neynar/ui';
11
+
12
+ <TableCell
13
+ className="value"
14
+ colSpan={0}
15
+ rowSpan={0}
16
+ headers="value"
17
+ >
18
+ {/* Your content here */}
19
+ </TableCell>
20
+ ```
21
+
22
+ ## Component Props
23
+
24
+ ### className
25
+ - **Type**: `string`
26
+ - **Required**: No
27
+ - **Description**: No description available
28
+
29
+ ### children
30
+ - **Type**: `React.ReactNode`
31
+ - **Required**: No
32
+ - **Description**: No description available
33
+
34
+ ### colSpan
35
+ - **Type**: `number`
36
+ - **Required**: No
37
+ - **Description**: No description available
38
+
39
+ ### rowSpan
40
+ - **Type**: `number`
41
+ - **Required**: No
42
+ - **Description**: No description available
43
+
44
+ ### headers
45
+ - **Type**: `string`
46
+ - **Required**: No
47
+ - **Description**: No description available
48
+
49
+ ## Examples
50
+
51
+ ```tsx
52
+ // Basic data cells
53
+ <TableCell>
@@ -0,0 +1,41 @@
1
+ # TableFooter
2
+
3
+ **Type**: component
4
+
5
+ TableFooter - Container for table footer rows Used for summary rows, totals, or additional table information. Styled with a muted background and top border to distinguish from data rows. Typically contains aggregated data or table-wide information.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { TableFooter } from '@neynar/ui';
11
+
12
+ <TableFooter
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </TableFooter>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: No description available
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ## Examples
32
+
33
+ ```tsx
34
+ <TableFooter>
35
+ <TableRow>
36
+ <TableCell>Total Users</TableCell>
37
+ <TableCell>15,767</TableCell>
38
+ <TableCell className="text-right">+9.25%</TableCell>
39
+ </TableRow>
40
+ </TableFooter>
41
+ ```
@@ -0,0 +1,69 @@
1
+ # TableHead
2
+
3
+ **Type**: component
4
+
5
+ TableHead - Table header cell component for column definitions Used for column headers with medium font weight and proper text alignment. Includes special styling for checkbox columns and interactive elements. Essential for screen reader navigation and table accessibility.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { TableHead } from '@neynar/ui';
11
+
12
+ <TableHead
13
+ className="value"
14
+ scope={value}
15
+ colSpan={0}
16
+ rowSpan={0}
17
+ "aria-sort"={value}
18
+ >
19
+ {/* Your content here */}
20
+ </TableHead>
21
+ ```
22
+
23
+ ## Component Props
24
+
25
+ ### className
26
+ - **Type**: `string`
27
+ - **Required**: No
28
+ - **Description**: No description available
29
+
30
+ ### children
31
+ - **Type**: `React.ReactNode`
32
+ - **Required**: No
33
+ - **Description**: No description available
34
+
35
+ ### scope
36
+ - **Type**: `"col" | "row" | "colgroup" | "rowgroup"`
37
+ - **Required**: No
38
+ - **Description**: No description available
39
+
40
+ ### colSpan
41
+ - **Type**: `number`
42
+ - **Required**: No
43
+ - **Description**: No description available
44
+
45
+ ### rowSpan
46
+ - **Type**: `number`
47
+ - **Required**: No
48
+ - **Description**: No description available
49
+
50
+ ### "aria-sort"
51
+ - **Type**: `"ascending" | "descending" | "none" | "other"`
52
+ - **Required**: No
53
+ - **Description**: No description available
54
+
55
+ ## Examples
56
+
57
+ ```tsx
58
+ // Text headers
59
+ <TableHead>Username</TableHead>
60
+ <TableHead className="text-right">Followers</TableHead>
61
+ // Checkbox header
62
+ <TableHead className="w-[50px]">
63
+ <Checkbox />
64
+ </TableHead>
65
+ // Sortable header
66
+ <TableHead>
67
+ <Button variant="ghost">FID ↕</Button>
68
+ </TableHead>
69
+ ```
@@ -0,0 +1,41 @@
1
+ # TableHeader
2
+
3
+ **Type**: component
4
+
5
+ TableHeader - Container for table header rows Groups header rows and applies consistent styling with bottom borders. Contains TableRow components with TableHead cells for column definitions. Essential for accessibility and proper table structure.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { TableHeader } from '@neynar/ui';
11
+
12
+ <TableHeader
13
+ className="value"
14
+ >
15
+ {/* Your content here */}
16
+ </TableHeader>
17
+ ```
18
+
19
+ ## Component Props
20
+
21
+ ### className
22
+ - **Type**: `string`
23
+ - **Required**: No
24
+ - **Description**: No description available
25
+
26
+ ### children
27
+ - **Type**: `React.ReactNode`
28
+ - **Required**: No
29
+ - **Description**: No description available
30
+
31
+ ## Examples
32
+
33
+ ```tsx
34
+ <TableHeader>
35
+ <TableRow>
36
+ <TableHead>Username</TableHead>
37
+ <TableHead>FID</TableHead>
38
+ <TableHead className="text-right">Actions</TableHead>
39
+ </TableRow>
40
+ </TableHeader>
41
+ ```
@@ -0,0 +1,42 @@
1
+ # TableRow
2
+
3
+ **Type**: component
4
+
5
+ TableRow - A table row component with interactive states Represents a single row in the table with hover effects and selection support. Supports data-state attributes for visual feedback and proper border styling. Essential building block for all table content areas.
6
+
7
+ ## JSX Usage
8
+
9
+ ```jsx
10
+ import { TableRow } from '@neynar/ui';
11
+
12
+ <TableRow
13
+ className="value"
14
+ "data-state"={value}
15
+ >
16
+ {/* Your content here */}
17
+ </TableRow>
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-state"
33
+ - **Type**: `"selected" | "unselected"`
34
+ - **Required**: No
35
+ - **Description**: No description available
36
+
37
+ ## Examples
38
+
39
+ ```tsx
40
+ // Basic row
41
+ <TableRow>
42
+ <TableCell>