@neynar/ui 0.1.1

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 (364) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/dist/components/ui/accordion.d.ts +229 -0
  4. package/dist/components/ui/accordion.d.ts.map +1 -0
  5. package/dist/components/ui/alert-dialog.d.ts +247 -0
  6. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  7. package/dist/components/ui/alert.d.ts +187 -0
  8. package/dist/components/ui/alert.d.ts.map +1 -0
  9. package/dist/components/ui/aspect-ratio.d.ts +94 -0
  10. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  11. package/dist/components/ui/avatar.d.ts +244 -0
  12. package/dist/components/ui/avatar.d.ts.map +1 -0
  13. package/dist/components/ui/badge.d.ts +163 -0
  14. package/dist/components/ui/badge.d.ts.map +1 -0
  15. package/dist/components/ui/breadcrumb.d.ts +281 -0
  16. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  17. package/dist/components/ui/button.d.ts +129 -0
  18. package/dist/components/ui/button.d.ts.map +1 -0
  19. package/dist/components/ui/calendar.d.ts +169 -0
  20. package/dist/components/ui/calendar.d.ts.map +1 -0
  21. package/dist/components/ui/card.d.ts +365 -0
  22. package/dist/components/ui/card.d.ts.map +1 -0
  23. package/dist/components/ui/carousel.d.ts +369 -0
  24. package/dist/components/ui/carousel.d.ts.map +1 -0
  25. package/dist/components/ui/chart.d.ts +442 -0
  26. package/dist/components/ui/chart.d.ts.map +1 -0
  27. package/dist/components/ui/checkbox.d.ts +88 -0
  28. package/dist/components/ui/checkbox.d.ts.map +1 -0
  29. package/dist/components/ui/collapsible.d.ts +182 -0
  30. package/dist/components/ui/collapsible.d.ts.map +1 -0
  31. package/dist/components/ui/combobox.d.ts +270 -0
  32. package/dist/components/ui/combobox.d.ts.map +1 -0
  33. package/dist/components/ui/command.d.ts +355 -0
  34. package/dist/components/ui/command.d.ts.map +1 -0
  35. package/dist/components/ui/container.d.ts +102 -0
  36. package/dist/components/ui/container.d.ts.map +1 -0
  37. package/dist/components/ui/context-menu.d.ts +339 -0
  38. package/dist/components/ui/context-menu.d.ts.map +1 -0
  39. package/dist/components/ui/date-picker.d.ts +145 -0
  40. package/dist/components/ui/date-picker.d.ts.map +1 -0
  41. package/dist/components/ui/dialog.d.ts +322 -0
  42. package/dist/components/ui/dialog.d.ts.map +1 -0
  43. package/dist/components/ui/drawer.d.ts +154 -0
  44. package/dist/components/ui/drawer.d.ts.map +1 -0
  45. package/dist/components/ui/dropdown-menu.d.ts +349 -0
  46. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  47. package/dist/components/ui/empty-state.d.ts +133 -0
  48. package/dist/components/ui/empty-state.d.ts.map +1 -0
  49. package/dist/components/ui/hover-card.d.ts +109 -0
  50. package/dist/components/ui/hover-card.d.ts.map +1 -0
  51. package/dist/components/ui/input.d.ts +89 -0
  52. package/dist/components/ui/input.d.ts.map +1 -0
  53. package/dist/components/ui/label.d.ts +93 -0
  54. package/dist/components/ui/label.d.ts.map +1 -0
  55. package/dist/components/ui/menubar.d.ts +306 -0
  56. package/dist/components/ui/menubar.d.ts.map +1 -0
  57. package/dist/components/ui/navigation-menu.d.ts +318 -0
  58. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  59. package/dist/components/ui/pagination.d.ts +343 -0
  60. package/dist/components/ui/pagination.d.ts.map +1 -0
  61. package/dist/components/ui/popover.d.ts +178 -0
  62. package/dist/components/ui/popover.d.ts.map +1 -0
  63. package/dist/components/ui/progress.d.ts +64 -0
  64. package/dist/components/ui/progress.d.ts.map +1 -0
  65. package/dist/components/ui/radio-group.d.ts +144 -0
  66. package/dist/components/ui/radio-group.d.ts.map +1 -0
  67. package/dist/components/ui/resizable.d.ts +164 -0
  68. package/dist/components/ui/resizable.d.ts.map +1 -0
  69. package/dist/components/ui/scroll-area.d.ts +82 -0
  70. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  71. package/dist/components/ui/select.d.ts +316 -0
  72. package/dist/components/ui/select.d.ts.map +1 -0
  73. package/dist/components/ui/separator.d.ts +80 -0
  74. package/dist/components/ui/separator.d.ts.map +1 -0
  75. package/dist/components/ui/sheet.d.ts +346 -0
  76. package/dist/components/ui/sheet.d.ts.map +1 -0
  77. package/dist/components/ui/sidebar.d.ts +1561 -0
  78. package/dist/components/ui/sidebar.d.ts.map +1 -0
  79. package/dist/components/ui/skeleton.d.ts +66 -0
  80. package/dist/components/ui/skeleton.d.ts.map +1 -0
  81. package/dist/components/ui/slider.d.ts +95 -0
  82. package/dist/components/ui/slider.d.ts.map +1 -0
  83. package/dist/components/ui/sonner.d.ts +101 -0
  84. package/dist/components/ui/sonner.d.ts.map +1 -0
  85. package/dist/components/ui/stack.d.ts +192 -0
  86. package/dist/components/ui/stack.d.ts.map +1 -0
  87. package/dist/components/ui/stories/accordion.stories.d.ts +71 -0
  88. package/dist/components/ui/stories/accordion.stories.d.ts.map +1 -0
  89. package/dist/components/ui/stories/alert-dialog.stories.d.ts +39 -0
  90. package/dist/components/ui/stories/alert-dialog.stories.d.ts.map +1 -0
  91. package/dist/components/ui/stories/alert.stories.d.ts +48 -0
  92. package/dist/components/ui/stories/alert.stories.d.ts.map +1 -0
  93. package/dist/components/ui/stories/aspect-ratio.stories.d.ts +53 -0
  94. package/dist/components/ui/stories/aspect-ratio.stories.d.ts.map +1 -0
  95. package/dist/components/ui/stories/avatar.stories.d.ts +49 -0
  96. package/dist/components/ui/stories/avatar.stories.d.ts.map +1 -0
  97. package/dist/components/ui/stories/badge.stories.d.ts +64 -0
  98. package/dist/components/ui/stories/badge.stories.d.ts.map +1 -0
  99. package/dist/components/ui/stories/breadcrumb.stories.d.ts +27 -0
  100. package/dist/components/ui/stories/breadcrumb.stories.d.ts.map +1 -0
  101. package/dist/components/ui/stories/button.stories.d.ts +92 -0
  102. package/dist/components/ui/stories/button.stories.d.ts.map +1 -0
  103. package/dist/components/ui/stories/calendar.stories.d.ts +94 -0
  104. package/dist/components/ui/stories/calendar.stories.d.ts.map +1 -0
  105. package/dist/components/ui/stories/card.stories.d.ts +29 -0
  106. package/dist/components/ui/stories/card.stories.d.ts.map +1 -0
  107. package/dist/components/ui/stories/carousel.stories.d.ts +42 -0
  108. package/dist/components/ui/stories/carousel.stories.d.ts.map +1 -0
  109. package/dist/components/ui/stories/chart.stories.d.ts +51 -0
  110. package/dist/components/ui/stories/chart.stories.d.ts.map +1 -0
  111. package/dist/components/ui/stories/checkbox.stories.d.ts +72 -0
  112. package/dist/components/ui/stories/checkbox.stories.d.ts.map +1 -0
  113. package/dist/components/ui/stories/cn.stories.d.ts +19 -0
  114. package/dist/components/ui/stories/cn.stories.d.ts.map +1 -0
  115. package/dist/components/ui/stories/collapsible.stories.d.ts +51 -0
  116. package/dist/components/ui/stories/collapsible.stories.d.ts.map +1 -0
  117. package/dist/components/ui/stories/colors.stories.d.ts +31 -0
  118. package/dist/components/ui/stories/colors.stories.d.ts.map +1 -0
  119. package/dist/components/ui/stories/combobox.stories.d.ts +89 -0
  120. package/dist/components/ui/stories/combobox.stories.d.ts.map +1 -0
  121. package/dist/components/ui/stories/command.stories.d.ts +69 -0
  122. package/dist/components/ui/stories/command.stories.d.ts.map +1 -0
  123. package/dist/components/ui/stories/container.stories.d.ts +42 -0
  124. package/dist/components/ui/stories/container.stories.d.ts.map +1 -0
  125. package/dist/components/ui/stories/context-menu.stories.d.ts +32 -0
  126. package/dist/components/ui/stories/context-menu.stories.d.ts.map +1 -0
  127. package/dist/components/ui/stories/date-picker.stories.d.ts +67 -0
  128. package/dist/components/ui/stories/date-picker.stories.d.ts.map +1 -0
  129. package/dist/components/ui/stories/dialog.stories.d.ts +48 -0
  130. package/dist/components/ui/stories/dialog.stories.d.ts.map +1 -0
  131. package/dist/components/ui/stories/drawer.stories.d.ts +33 -0
  132. package/dist/components/ui/stories/drawer.stories.d.ts.map +1 -0
  133. package/dist/components/ui/stories/dropdown-menu.stories.d.ts +31 -0
  134. package/dist/components/ui/stories/dropdown-menu.stories.d.ts.map +1 -0
  135. package/dist/components/ui/stories/empty-state.stories.d.ts +74 -0
  136. package/dist/components/ui/stories/empty-state.stories.d.ts.map +1 -0
  137. package/dist/components/ui/stories/hover-card.stories.d.ts +35 -0
  138. package/dist/components/ui/stories/hover-card.stories.d.ts.map +1 -0
  139. package/dist/components/ui/stories/input.stories.d.ts +69 -0
  140. package/dist/components/ui/stories/input.stories.d.ts.map +1 -0
  141. package/dist/components/ui/stories/label.stories.d.ts +47 -0
  142. package/dist/components/ui/stories/label.stories.d.ts.map +1 -0
  143. package/dist/components/ui/stories/menubar.stories.d.ts +39 -0
  144. package/dist/components/ui/stories/menubar.stories.d.ts.map +1 -0
  145. package/dist/components/ui/stories/navigation-menu.stories.d.ts +44 -0
  146. package/dist/components/ui/stories/navigation-menu.stories.d.ts.map +1 -0
  147. package/dist/components/ui/stories/pagination.stories.d.ts +33 -0
  148. package/dist/components/ui/stories/pagination.stories.d.ts.map +1 -0
  149. package/dist/components/ui/stories/popover.stories.d.ts +36 -0
  150. package/dist/components/ui/stories/popover.stories.d.ts.map +1 -0
  151. package/dist/components/ui/stories/progress.stories.d.ts +38 -0
  152. package/dist/components/ui/stories/progress.stories.d.ts.map +1 -0
  153. package/dist/components/ui/stories/radio-group.stories.d.ts +76 -0
  154. package/dist/components/ui/stories/radio-group.stories.d.ts.map +1 -0
  155. package/dist/components/ui/stories/resizable.stories.d.ts +49 -0
  156. package/dist/components/ui/stories/resizable.stories.d.ts.map +1 -0
  157. package/dist/components/ui/stories/scroll-area.stories.d.ts +35 -0
  158. package/dist/components/ui/stories/scroll-area.stories.d.ts.map +1 -0
  159. package/dist/components/ui/stories/select.stories.d.ts +51 -0
  160. package/dist/components/ui/stories/select.stories.d.ts.map +1 -0
  161. package/dist/components/ui/stories/separator.stories.d.ts +58 -0
  162. package/dist/components/ui/stories/separator.stories.d.ts.map +1 -0
  163. package/dist/components/ui/stories/sheet.stories.d.ts +43 -0
  164. package/dist/components/ui/stories/sheet.stories.d.ts.map +1 -0
  165. package/dist/components/ui/stories/sidebar.stories.d.ts +60 -0
  166. package/dist/components/ui/stories/sidebar.stories.d.ts.map +1 -0
  167. package/dist/components/ui/stories/skeleton.stories.d.ts +42 -0
  168. package/dist/components/ui/stories/skeleton.stories.d.ts.map +1 -0
  169. package/dist/components/ui/stories/slider.stories.d.ts +99 -0
  170. package/dist/components/ui/stories/slider.stories.d.ts.map +1 -0
  171. package/dist/components/ui/stories/sonner.stories.d.ts +9 -0
  172. package/dist/components/ui/stories/sonner.stories.d.ts.map +1 -0
  173. package/dist/components/ui/stories/stack.stories.d.ts +39 -0
  174. package/dist/components/ui/stories/stack.stories.d.ts.map +1 -0
  175. package/dist/components/ui/stories/switch.stories.d.ts +71 -0
  176. package/dist/components/ui/stories/switch.stories.d.ts.map +1 -0
  177. package/dist/components/ui/stories/table.stories.d.ts +40 -0
  178. package/dist/components/ui/stories/table.stories.d.ts.map +1 -0
  179. package/dist/components/ui/stories/tabs.stories.d.ts +62 -0
  180. package/dist/components/ui/stories/tabs.stories.d.ts.map +1 -0
  181. package/dist/components/ui/stories/text-field.stories.d.ts +78 -0
  182. package/dist/components/ui/stories/text-field.stories.d.ts.map +1 -0
  183. package/dist/components/ui/stories/textarea.stories.d.ts +57 -0
  184. package/dist/components/ui/stories/textarea.stories.d.ts.map +1 -0
  185. package/dist/components/ui/stories/theme-toggle.stories.d.ts +71 -0
  186. package/dist/components/ui/stories/theme-toggle.stories.d.ts.map +1 -0
  187. package/dist/components/ui/stories/theme.stories.d.ts +51 -0
  188. package/dist/components/ui/stories/theme.stories.d.ts.map +1 -0
  189. package/dist/components/ui/stories/toggle-group.stories.d.ts +71 -0
  190. package/dist/components/ui/stories/toggle-group.stories.d.ts.map +1 -0
  191. package/dist/components/ui/stories/toggle.stories.d.ts +78 -0
  192. package/dist/components/ui/stories/toggle.stories.d.ts.map +1 -0
  193. package/dist/components/ui/stories/tooltip.stories.d.ts +37 -0
  194. package/dist/components/ui/stories/tooltip.stories.d.ts.map +1 -0
  195. package/dist/components/ui/stories/typography.stories.d.ts +137 -0
  196. package/dist/components/ui/stories/typography.stories.d.ts.map +1 -0
  197. package/dist/components/ui/stories/use-mobile.stories.d.ts +20 -0
  198. package/dist/components/ui/stories/use-mobile.stories.d.ts.map +1 -0
  199. package/dist/components/ui/stories/use-theme.stories.d.ts +23 -0
  200. package/dist/components/ui/stories/use-theme.stories.d.ts.map +1 -0
  201. package/dist/components/ui/switch.d.ts +84 -0
  202. package/dist/components/ui/switch.d.ts.map +1 -0
  203. package/dist/components/ui/table.d.ts +321 -0
  204. package/dist/components/ui/table.d.ts.map +1 -0
  205. package/dist/components/ui/tabs.d.ts +260 -0
  206. package/dist/components/ui/tabs.d.ts.map +1 -0
  207. package/dist/components/ui/text-field.d.ts +157 -0
  208. package/dist/components/ui/text-field.d.ts.map +1 -0
  209. package/dist/components/ui/textarea.d.ts +84 -0
  210. package/dist/components/ui/textarea.d.ts.map +1 -0
  211. package/dist/components/ui/theme-toggle.d.ts +105 -0
  212. package/dist/components/ui/theme-toggle.d.ts.map +1 -0
  213. package/dist/components/ui/theme.d.ts +110 -0
  214. package/dist/components/ui/theme.d.ts.map +1 -0
  215. package/dist/components/ui/toggle-group.d.ts +133 -0
  216. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  217. package/dist/components/ui/toggle.d.ts +84 -0
  218. package/dist/components/ui/toggle.d.ts.map +1 -0
  219. package/dist/components/ui/tooltip.d.ts +202 -0
  220. package/dist/components/ui/tooltip.d.ts.map +1 -0
  221. package/dist/components/ui/typography.d.ts +287 -0
  222. package/dist/components/ui/typography.d.ts.map +1 -0
  223. package/dist/hooks/use-mobile.d.ts +74 -0
  224. package/dist/hooks/use-mobile.d.ts.map +1 -0
  225. package/dist/hooks/use-theme.d.ts +142 -0
  226. package/dist/hooks/use-theme.d.ts.map +1 -0
  227. package/dist/index.d.ts +57 -0
  228. package/dist/index.d.ts.map +1 -0
  229. package/dist/index.js +27498 -0
  230. package/dist/index.js.map +1 -0
  231. package/dist/lib/utils.d.ts +43 -0
  232. package/dist/lib/utils.d.ts.map +1 -0
  233. package/dist/tsconfig.tsbuildinfo +1 -0
  234. package/docs/llm/colors.md +273 -0
  235. package/docs/llm/components/buttons.md +68 -0
  236. package/docs/llm/components/cards.md +53 -0
  237. package/docs/llm/components/display.md +134 -0
  238. package/docs/llm/components/feedback.md +96 -0
  239. package/docs/llm/components/forms.md +90 -0
  240. package/docs/llm/components/layout.md +59 -0
  241. package/docs/llm/components/menus.md +70 -0
  242. package/docs/llm/components/navigation.md +80 -0
  243. package/docs/llm/components/overlays.md +83 -0
  244. package/docs/llm/components/tables.md +73 -0
  245. package/docs/llm/components/typography.md +199 -0
  246. package/docs/llm/components/utilities.md +114 -0
  247. package/docs/llm/guide.md +165 -0
  248. package/llms.txt +122 -0
  249. package/package.json +104 -0
  250. package/src/components/ui/accordion.tsx +285 -0
  251. package/src/components/ui/alert-dialog.tsx +387 -0
  252. package/src/components/ui/alert.tsx +243 -0
  253. package/src/components/ui/aspect-ratio.tsx +99 -0
  254. package/src/components/ui/avatar.tsx +288 -0
  255. package/src/components/ui/badge.tsx +205 -0
  256. package/src/components/ui/breadcrumb.tsx +378 -0
  257. package/src/components/ui/button.tsx +195 -0
  258. package/src/components/ui/calendar.tsx +371 -0
  259. package/src/components/ui/card.tsx +447 -0
  260. package/src/components/ui/carousel.tsx +624 -0
  261. package/src/components/ui/chart.tsx +802 -0
  262. package/src/components/ui/checkbox.tsx +113 -0
  263. package/src/components/ui/collapsible.tsx +207 -0
  264. package/src/components/ui/combobox.tsx +373 -0
  265. package/src/components/ui/command.tsx +518 -0
  266. package/src/components/ui/container.tsx +114 -0
  267. package/src/components/ui/context-menu.tsx +563 -0
  268. package/src/components/ui/date-picker.tsx +213 -0
  269. package/src/components/ui/dialog.tsx +447 -0
  270. package/src/components/ui/drawer.tsx +273 -0
  271. package/src/components/ui/dropdown-menu.tsx +578 -0
  272. package/src/components/ui/empty-state.tsx +145 -0
  273. package/src/components/ui/hover-card.tsx +144 -0
  274. package/src/components/ui/input.tsx +106 -0
  275. package/src/components/ui/label.tsx +110 -0
  276. package/src/components/ui/menubar.tsx +553 -0
  277. package/src/components/ui/navigation-menu.tsx +471 -0
  278. package/src/components/ui/pagination.tsx +456 -0
  279. package/src/components/ui/popover.tsx +216 -0
  280. package/src/components/ui/progress.tsx +88 -0
  281. package/src/components/ui/radio-group.tsx +183 -0
  282. package/src/components/ui/resizable.tsx +209 -0
  283. package/src/components/ui/scroll-area.tsx +132 -0
  284. package/src/components/ui/select.tsx +485 -0
  285. package/src/components/ui/separator.tsx +101 -0
  286. package/src/components/ui/sheet.tsx +495 -0
  287. package/src/components/ui/sidebar.tsx +2211 -0
  288. package/src/components/ui/skeleton.tsx +76 -0
  289. package/src/components/ui/slider.tsx +147 -0
  290. package/src/components/ui/sonner.tsx +120 -0
  291. package/src/components/ui/stack.tsx +180 -0
  292. package/src/components/ui/stories/accordion.stories.tsx +429 -0
  293. package/src/components/ui/stories/alert-dialog.stories.tsx +519 -0
  294. package/src/components/ui/stories/alert.stories.tsx +228 -0
  295. package/src/components/ui/stories/aspect-ratio.stories.tsx +200 -0
  296. package/src/components/ui/stories/avatar.stories.tsx +317 -0
  297. package/src/components/ui/stories/badge.stories.tsx +260 -0
  298. package/src/components/ui/stories/breadcrumb.stories.tsx +482 -0
  299. package/src/components/ui/stories/button.stories.tsx +266 -0
  300. package/src/components/ui/stories/calendar.stories.tsx +375 -0
  301. package/src/components/ui/stories/card.stories.tsx +308 -0
  302. package/src/components/ui/stories/carousel.stories.tsx +328 -0
  303. package/src/components/ui/stories/chart.stories.tsx +430 -0
  304. package/src/components/ui/stories/checkbox.stories.tsx +297 -0
  305. package/src/components/ui/stories/cn.stories.tsx +433 -0
  306. package/src/components/ui/stories/collapsible.stories.tsx +256 -0
  307. package/src/components/ui/stories/colors.stories.tsx +502 -0
  308. package/src/components/ui/stories/combobox.stories.tsx +301 -0
  309. package/src/components/ui/stories/command.stories.tsx +632 -0
  310. package/src/components/ui/stories/container.stories.tsx +250 -0
  311. package/src/components/ui/stories/context-menu.stories.tsx +446 -0
  312. package/src/components/ui/stories/date-picker.stories.tsx +378 -0
  313. package/src/components/ui/stories/dialog.stories.tsx +535 -0
  314. package/src/components/ui/stories/drawer.stories.tsx +364 -0
  315. package/src/components/ui/stories/dropdown-menu.stories.tsx +374 -0
  316. package/src/components/ui/stories/empty-state.stories.tsx +244 -0
  317. package/src/components/ui/stories/hover-card.stories.tsx +355 -0
  318. package/src/components/ui/stories/input.stories.tsx +289 -0
  319. package/src/components/ui/stories/label.stories.tsx +294 -0
  320. package/src/components/ui/stories/menubar.stories.tsx +764 -0
  321. package/src/components/ui/stories/navigation-menu.stories.tsx +539 -0
  322. package/src/components/ui/stories/pagination.stories.tsx +604 -0
  323. package/src/components/ui/stories/popover.stories.tsx +392 -0
  324. package/src/components/ui/stories/progress.stories.tsx +218 -0
  325. package/src/components/ui/stories/radio-group.stories.tsx +400 -0
  326. package/src/components/ui/stories/resizable.stories.tsx +417 -0
  327. package/src/components/ui/stories/scroll-area.stories.tsx +180 -0
  328. package/src/components/ui/stories/select.stories.tsx +389 -0
  329. package/src/components/ui/stories/separator.stories.tsx +192 -0
  330. package/src/components/ui/stories/sheet.stories.tsx +468 -0
  331. package/src/components/ui/stories/sidebar.stories.tsx +731 -0
  332. package/src/components/ui/stories/skeleton.stories.tsx +216 -0
  333. package/src/components/ui/stories/slider.stories.tsx +321 -0
  334. package/src/components/ui/stories/sonner.stories.tsx +373 -0
  335. package/src/components/ui/stories/stack.stories.tsx +222 -0
  336. package/src/components/ui/stories/switch.stories.tsx +202 -0
  337. package/src/components/ui/stories/table.stories.tsx +541 -0
  338. package/src/components/ui/stories/tabs.stories.tsx +544 -0
  339. package/src/components/ui/stories/text-field.stories.tsx +280 -0
  340. package/src/components/ui/stories/textarea.stories.tsx +245 -0
  341. package/src/components/ui/stories/theme-toggle.stories.tsx +275 -0
  342. package/src/components/ui/stories/theme.stories.tsx +412 -0
  343. package/src/components/ui/stories/toggle-group.stories.tsx +337 -0
  344. package/src/components/ui/stories/toggle.stories.tsx +325 -0
  345. package/src/components/ui/stories/tooltip.stories.tsx +444 -0
  346. package/src/components/ui/stories/typography.stories.tsx +1586 -0
  347. package/src/components/ui/stories/use-mobile.stories.tsx +420 -0
  348. package/src/components/ui/stories/use-theme.stories.tsx +531 -0
  349. package/src/components/ui/switch.tsx +106 -0
  350. package/src/components/ui/table.tsx +424 -0
  351. package/src/components/ui/tabs.tsx +316 -0
  352. package/src/components/ui/text-field.tsx +206 -0
  353. package/src/components/ui/textarea.tsx +98 -0
  354. package/src/components/ui/theme-toggle.tsx +185 -0
  355. package/src/components/ui/theme.tsx +148 -0
  356. package/src/components/ui/toggle-group.tsx +196 -0
  357. package/src/components/ui/toggle.tsx +115 -0
  358. package/src/components/ui/tooltip.tsx +253 -0
  359. package/src/components/ui/typography.tsx +468 -0
  360. package/src/hooks/use-mobile.ts +91 -0
  361. package/src/hooks/use-theme.ts +319 -0
  362. package/src/index.ts +77 -0
  363. package/src/lib/utils.ts +57 -0
  364. package/src/styles/globals.css +160 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Neynar Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,195 @@
1
+ # @neynar/ui
2
+
3
+ A comprehensive, production-ready React component library built on **Radix UI** primitives and **Tailwind CSS v4**. Features 52 accessible components plus advanced hooks for building modern web applications with confidence.
4
+
5
+ ## 🎯 Key Highlights
6
+
7
+ - **Over 50 Components, Hooks and Utilities** - Complete UI ecosystem for any application type
8
+ - **Accessibility-First** - WCAG 2.1 AA compliant with comprehensive keyboard navigation
9
+ - **TypeScript Native** - Full type safety with intelligent IntelliSense support
10
+ - **Advanced Theming** - OKLCH color space with system-aware custom themes
11
+ - **Framework Agnostic** - Seamless integration with Next.js, Vite, Remix, and more
12
+ - **Zero-Config Dark Mode** - Intelligent theme system with SSR-safe persistence
13
+ - **shadcn/ui Enhanced** - Extends shadcn/ui patterns with advanced features
14
+ - **Tree Shakeable** - Optimized bundle sizes with granular imports
15
+
16
+ ## 🚀 Quick Installation
17
+
18
+ ```bash
19
+ npm install @neynar/ui
20
+ # or
21
+ yarn add @neynar/ui
22
+ # or
23
+ pnpm add @neynar/ui
24
+ ```
25
+
26
+ ## ⚡ Get Started in 30 Seconds
27
+
28
+ ```tsx
29
+ import { Button, Card, CardHeader, CardTitle, CardContent } from "@neynar/ui";
30
+ import "@neynar/ui/styles";
31
+
32
+ function App() {
33
+ return (
34
+ <Card className="max-w-md">
35
+ <CardHeader>
36
+ <CardTitle>@neynar/ui is Ready</CardTitle>
37
+ </CardHeader>
38
+ <CardContent className="space-y-4">
39
+ <Button>Primary Action</Button>
40
+ <Button variant="outline">Secondary Action</Button>
41
+ </CardContent>
42
+ </Card>
43
+ );
44
+ }
45
+ ```
46
+
47
+ ## 🎨 Component Categories
48
+
49
+ | Category | Components | Description |
50
+ |----------|------------|-------------|
51
+ | 📝 **Forms & Input** | Button, Input, Textarea, TextField, Select, Combobox, Checkbox, Switch, RadioGroup, DatePicker, Calendar, Label, Slider | Essential form building blocks with validation support |
52
+ | 📱 **Layout & Structure** | Container, Stack, Card, Separator, AspectRatio, Accordion, Collapsible, Resizable, ScrollArea | Flexible components for responsive layouts |
53
+ | 🧭 **Navigation & Menus** | NavigationMenu, Tabs, Breadcrumb, Pagination, Sidebar, DropdownMenu, ContextMenu, Menubar, Command | Comprehensive navigation solutions |
54
+ | 💬 **Overlays & Dialogs** | Dialog, AlertDialog, Popover, Tooltip, Sheet, HoverCard, Drawer | Modal interactions with advanced positioning |
55
+ | ✍️ **Typography** | Typography (with H1-H6, P, A, Code, Label variants) | Consistent text styling with semantic HTML |
56
+ | 📊 **Data Display** | Table, Badge, Avatar, Alert, Progress, Skeleton, EmptyState, Chart, Carousel, Sonner | Rich components for presenting information |
57
+ | 🔧 **Interactive Controls** | Toggle, ToggleGroup, ThemeToggle | Advanced interaction components |
58
+ | 🪝 **Hooks** | useTheme, useIsMobile | React hooks for common functionality |
59
+ | 🛠️ **Utilities** | cn, Theme | Helper utilities and setup components |
60
+
61
+ ## 🌙 Theming
62
+
63
+ Zero-config light/dark mode with FOUC prevention:
64
+
65
+ ```tsx
66
+ // 1. Add Theme component early in your app (required for FOUC prevention)
67
+ import { Theme } from "@neynar/ui";
68
+
69
+ // Next.js App Router
70
+ export default function RootLayout({ children }) {
71
+ return (
72
+ <html lang="en" suppressHydrationWarning>
73
+ <head>
74
+ <Theme /> {/* Prevents flash of wrong theme */}
75
+ </head>
76
+ <body>{children}</body>
77
+ </html>
78
+ );
79
+ }
80
+
81
+ // Vite/React
82
+ function App() {
83
+ return (
84
+ <>
85
+ <Theme /> {/* Place at the top */}
86
+ <div className="app">
87
+ {/* Your app content */}
88
+ </div>
89
+ </>
90
+ );
91
+ }
92
+
93
+ // 2. Add ThemeToggle anywhere for user control (optional)
94
+ import { ThemeToggle } from "@neynar/ui";
95
+
96
+ function Header() {
97
+ return (
98
+ <header>
99
+ <h1>My App</h1>
100
+ <ThemeToggle />
101
+ </header>
102
+ );
103
+ }
104
+ ```
105
+
106
+ **How it works:**
107
+
108
+ - **Theme component** - Injects a tiny script that runs before first paint
109
+ - **No FOUC** - Theme applied instantly on page load
110
+ - **Auto-detects** system preference (light/dark)
111
+ - **Persists** selection in cookies (SSR-safe)
112
+ - **Synchronized** - Multiple ThemeToggle instances stay in sync via events
113
+ - **Framework agnostic** - Works with Next.js, Vite, Remix, etc.
114
+
115
+ **[→ Complete Theming Guide](./docs/theming.md)** - Learn how to customize colors, create brand themes, and advanced theming patterns.
116
+
117
+ ## 🔧 Framework Integration
118
+
119
+ @neynar/ui works seamlessly with all modern React frameworks:
120
+
121
+ - **[Next.js Integration →](./docs/integrations/nextjs.md)** - App Router, Pages Router, SSR, SSG, and custom Link components
122
+ - **[Vite + React Integration →](./docs/integrations/vite.md)** - SPA, React Router, and development setup
123
+
124
+ ## 📈 Performance & Bundle Optimization
125
+
126
+ ### Tree Shaking
127
+
128
+ Import only what you need for optimal bundle sizes:
129
+
130
+ ```tsx
131
+ // ✅ Good - Import specific components
132
+ import { Button, Card, CardHeader, CardTitle, CardContent } from "@neynar/ui";
133
+
134
+ // ❌ Avoid - Imports entire library
135
+ import * as UI from "@neynar/ui";
136
+ ```
137
+
138
+ ## 📚 Documentation
139
+
140
+ ### 📖 Available Documentation
141
+
142
+ - **[Component Reference](./docs/components.md)** - Complete component catalog with usage examples
143
+ - **[Troubleshooting Guide](./docs/troubleshooting.md)** - Common issues and solutions
144
+
145
+ ### 🤖 AI & Development Resources
146
+
147
+ - **[LLM Documentation](./docs/llm/)** - LLM-optimized component usage and templates
148
+
149
+ ## 🛡️ Quality Assurance
150
+
151
+ ### Accessibility Standards
152
+
153
+ - **WCAG 2.1 AA Compliance** - All components meet accessibility standards
154
+ - **Keyboard Navigation** - Full keyboard support across all interactive elements
155
+ - **Screen Reader Support** - Comprehensive ARIA implementation
156
+ - **Focus Management** - Intelligent focus trapping and restoration
157
+ - **Color Contrast** - Meets contrast requirements in all themes
158
+
159
+ ## 🤝 Contributing & Support
160
+
161
+ ### Community Resources
162
+
163
+ - **[Storybook Documentation](https://neynar-ui.vercel.app)** - Interactive component explorer
164
+
165
+ ### Contributing Guidelines
166
+
167
+ - **[Contributing Guide](./CONTRIBUTING.md)** - Complete guide for adding new components
168
+ - **[LLM Prompts](./docs/llm-prompts/)** - Copy-paste prompts for creating shadcn-based and custom components
169
+
170
+ This library extends shadcn/ui patterns with Neynar-specific enhancements. When contributing:
171
+
172
+ - Follow our component categorization system (Buttons, Forms, Display, etc.)
173
+ - Include comprehensive TypeScript definitions and TSDoc documentation
174
+ - Create Storybook stories with proper category organization
175
+ - Update all documentation files (AI docs, component docs, exports)
176
+ - Ensure accessibility-first implementations with full keyboard support
177
+ - Pass all automated tests including accessibility compliance checks
178
+
179
+ ## 📄 License
180
+
181
+ MIT License - see the [LICENSE](./LICENSE) file for complete details.
182
+
183
+ ### Acknowledgments
184
+
185
+ This library is built on top of excellent open-source projects:
186
+
187
+ - **[shadcn/ui](https://ui.shadcn.com)** - Component patterns and design system foundation (MIT)
188
+ - **[Radix UI](https://www.radix-ui.com)** - Accessible component primitives (MIT)
189
+ - **[Tailwind CSS](https://tailwindcss.com)** - Utility-first CSS framework (MIT)
190
+ - **[Lucide Icons](https://lucide.dev)** - Beautiful open-source icons (ISC)
191
+ - **[class-variance-authority](https://cva.style)** - Component variant management (Apache-2.0)
192
+
193
+ ---
194
+
195
+ **Built with ❤️ by the Neynar team**
@@ -0,0 +1,229 @@
1
+ import * as React from "react";
2
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
3
+ /**
4
+ * Accordion - Collapsible content panels for organizing information
5
+ *
6
+ * A vertically stacked set of interactive headings that each reveal a section of content.
7
+ * Built on Radix UI Accordion primitives with optimized animations and accessibility.
8
+ * Supports both single and multiple expanded items simultaneously based on the type prop.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // Basic single accordion (only one item can be open)
13
+ * <Accordion type="single" collapsible>
14
+ * <AccordionItem value="item-1">
15
+ * <AccordionTrigger>Is it accessible?</AccordionTrigger>
16
+ * <AccordionContent>
17
+ * Yes. It adheres to the WAI-ARIA design pattern.
18
+ * </AccordionContent>
19
+ * </AccordionItem>
20
+ * </Accordion>
21
+ * ```
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * // Multiple accordion (multiple items can be open)
26
+ * <Accordion type="multiple">
27
+ * <AccordionItem value="item-1">
28
+ * <AccordionTrigger>Section 1</AccordionTrigger>
29
+ * <AccordionContent>Content for section 1</AccordionContent>
30
+ * </AccordionItem>
31
+ * <AccordionItem value="item-2">
32
+ * <AccordionTrigger>Section 2</AccordionTrigger>
33
+ * <AccordionContent>Content for section 2</AccordionContent>
34
+ * </AccordionItem>
35
+ * </Accordion>
36
+ * ```
37
+ *
38
+ * @example
39
+ * ```tsx
40
+ * // FAQ-style accordion with default open state
41
+ * <Accordion type="single" collapsible defaultValue="faq-1">
42
+ * <AccordionItem value="faq-1">
43
+ * <AccordionTrigger>How do I get started?</AccordionTrigger>
44
+ * <AccordionContent>
45
+ * Follow our quick start guide to set up your first project.
46
+ * </AccordionContent>
47
+ * </AccordionItem>
48
+ * </Accordion>
49
+ * ```
50
+ *
51
+ * @param type - "single" allows one item open, "multiple" allows multiple items open
52
+ * @param collapsible - When type="single", allows closing the open item (optional)
53
+ * @param defaultValue - Initial value(s) for open items
54
+ * @param value - Controlled value(s) for open items
55
+ * @param onValueChange - Callback when accordion state changes
56
+ * @param className - Additional CSS classes for styling
57
+ * @param orientation - "horizontal" or "vertical" (default: "vertical")
58
+ * @param dir - Text direction "ltr" or "rtl" for internationalization
59
+ * @param disabled - Disables all accordion interactions
60
+ *
61
+ * @accessibility
62
+ * - Full keyboard navigation support (Arrow keys, Space, Enter, Home, End)
63
+ * - ARIA expanded/collapsed states automatically managed
64
+ * - Screen reader announcements for state changes
65
+ * - Focus management with visible focus indicators
66
+ * - Properly labeled regions with aria-labelledby
67
+ * - Meets WCAG 2.1 AA standards for interactive elements
68
+ *
69
+ * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/accordion/} WAI-ARIA Accordion Pattern
70
+ * @see {@link https://ui.shadcn.com/docs/components/accordion} shadcn/ui Accordion Documentation
71
+ * @see {@link AccordionItem} Individual accordion panel container
72
+ * @see {@link AccordionTrigger} Clickable header to expand/collapse content
73
+ * @see {@link AccordionContent} Collapsible content area with smooth animations
74
+ * @since 1.0.0
75
+ */
76
+ declare function Accordion({ ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
77
+ /**
78
+ * AccordionItem - Individual collapsible panel within an accordion
79
+ *
80
+ * A container component that wraps a single accordion section consisting of a trigger
81
+ * and collapsible content. Each item requires a unique value prop for identification
82
+ * and state management. Provides consistent spacing and border styling.
83
+ *
84
+ * @example
85
+ * ```tsx
86
+ * <AccordionItem value="settings">
87
+ * <AccordionTrigger>Account Settings</AccordionTrigger>
88
+ * <AccordionContent>
89
+ * <p>Manage your account preferences and security settings.</p>
90
+ * </AccordionContent>
91
+ * </AccordionItem>
92
+ * ```
93
+ *
94
+ * @example
95
+ * ```tsx
96
+ * // With custom styling
97
+ * <AccordionItem value="custom" className="border-l-4 border-blue-500">
98
+ * <AccordionTrigger>Custom Styled Item</AccordionTrigger>
99
+ * <AccordionContent>Content with custom left border</AccordionContent>
100
+ * </AccordionItem>
101
+ * ```
102
+ *
103
+ * @param value - Unique identifier for this accordion item (required)
104
+ * @param className - Additional CSS classes for custom styling
105
+ * @param disabled - Disables this specific accordion item
106
+ * @param children - Should contain AccordionTrigger and AccordionContent
107
+ *
108
+ * @accessibility
109
+ * - Manages expanded/collapsed state via ARIA attributes
110
+ * - Associates trigger with content using aria-controls and aria-labelledby
111
+ * - Provides proper focus management between items
112
+ * - Supports keyboard navigation within the accordion group
113
+ *
114
+ * @see {@link AccordionTrigger} The clickable header for this item
115
+ * @see {@link AccordionContent} The collapsible content for this item
116
+ */
117
+ declare function AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
118
+ /**
119
+ * AccordionTrigger - Clickable header that toggles accordion content visibility
120
+ *
121
+ * An interactive button element that users click or activate via keyboard to expand
122
+ * or collapse the associated accordion content. Features a rotating chevron icon
123
+ * for visual state indication and supports both text and custom content.
124
+ *
125
+ * @example
126
+ * ```tsx
127
+ * // Simple text trigger
128
+ * <AccordionTrigger>
129
+ * Click to expand this section
130
+ * </AccordionTrigger>
131
+ * ```
132
+ *
133
+ * @example
134
+ * ```tsx
135
+ * // With icon and custom styling
136
+ * <AccordionTrigger className="text-lg font-semibold">
137
+ * <User className="mr-2 h-4 w-4" />
138
+ * User Profile Settings
139
+ * </AccordionTrigger>
140
+ * ```
141
+ *
142
+ * @example
143
+ * ```tsx
144
+ * // With complex content
145
+ * <AccordionTrigger>
146
+ * <div className="flex items-center justify-between w-full">
147
+ * <span>Section Title</span>
148
+ * <Badge variant="secondary">5 items</Badge>
149
+ * </div>
150
+ * </AccordionTrigger>
151
+ * ```
152
+ *
153
+ * @param className - Additional CSS classes for custom styling
154
+ * @param children - Content to display in the trigger (text, icons, or components)
155
+ * @param disabled - Disables the trigger interaction
156
+ * @param asChild - Renders the trigger as its child element when true
157
+ *
158
+ * @accessibility
159
+ * - Keyboard activated with Space, Enter, or Arrow keys
160
+ * - aria-expanded automatically indicates current expanded/collapsed state
161
+ * - Focus visible ring for keyboard navigation with proper contrast
162
+ * - Chevron icon rotation provides visual state feedback
163
+ * - Screen reader support with proper labeling and state announcements
164
+ * - Meets WCAG 2.1 AA interactive element requirements
165
+ *
166
+ * @see {@link AccordionContent} The content area controlled by this trigger
167
+ */
168
+ declare function AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
169
+ /**
170
+ * AccordionContent - Collapsible content area of an accordion item
171
+ *
172
+ * The expandable content section that is revealed or hidden when the associated
173
+ * AccordionTrigger is activated. Features smooth height-based animations using
174
+ * Tailwind CSS keyframes and supports any React content including complex layouts.
175
+ *
176
+ * @example
177
+ * ```tsx
178
+ * // Simple text content
179
+ * <AccordionContent>
180
+ * <p>This content is revealed when the accordion is expanded.</p>
181
+ * <p>It can contain any React components or HTML elements.</p>
182
+ * </AccordionContent>
183
+ * ```
184
+ *
185
+ * @example
186
+ * ```tsx
187
+ * // Rich content with components
188
+ * <AccordionContent>
189
+ * <div className="space-y-4">
190
+ * <Alert>
191
+ * <InfoIcon className="h-4 w-4" />
192
+ * <AlertTitle>Important Note</AlertTitle>
193
+ * <AlertDescription>This is highlighted information.</AlertDescription>
194
+ * </Alert>
195
+ * <Button variant="outline">Take Action</Button>
196
+ * </div>
197
+ * </AccordionContent>
198
+ * ```
199
+ *
200
+ * @example
201
+ * ```tsx
202
+ * // Content with custom padding
203
+ * <AccordionContent className="pt-6 pb-6">
204
+ * Content with extra vertical padding for better spacing.
205
+ * </AccordionContent>
206
+ * ```
207
+ *
208
+ * @param className - Additional CSS classes for custom styling (applied to inner div)
209
+ * @param children - Any React content to display when expanded
210
+ * @param forceMount - Forces content to remain mounted when collapsed (for animations)
211
+ *
212
+ * @accessibility
213
+ * - Hidden content is not focusable or accessible when collapsed
214
+ * - Smooth height animations enhance user experience without motion issues
215
+ * - Properly associated with trigger via ARIA attributes (aria-controls, aria-labelledby)
216
+ * - Content respects prefers-reduced-motion user preference
217
+ * - Focus moves naturally to content when expanded via keyboard
218
+ *
219
+ * @animation
220
+ * - Uses data-[state=open]:animate-accordion-down for expand animation
221
+ * - Uses data-[state=closed]:animate-accordion-up for collapse animation
222
+ * - Animations respect user's motion preferences
223
+ * - Smooth height transitions using Radix UI's --radix-accordion-content-height variable
224
+ *
225
+ * @see {@link AccordionTrigger} The trigger that controls this content's visibility
226
+ */
227
+ declare function AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
228
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
229
+ //# sourceMappingURL=accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/components/ui/accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAKhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,iBAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,2CAEtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,2CAQtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAgBzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAUzD;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}