@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
@@ -0,0 +1,578 @@
1
+ import * as React from "react";
2
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
3
+ import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
4
+
5
+ import { cn } from "@/lib/utils";
6
+
7
+ /**
8
+ * A versatile dropdown menu component built on Radix UI primitives
9
+ *
10
+ * Dropdown menus display a list of actions or options that a user can choose from.
11
+ * They're typically triggered by a button and appear as a floating panel with full
12
+ * keyboard navigation support, submenus, and various interactive item types.
13
+ *
14
+ * Based on the shadcn/ui dropdown-menu component with additional enhancements for
15
+ * better integration with design systems and improved accessibility.
16
+ *
17
+ * @component
18
+ * @example
19
+ * ```tsx
20
+ * // Basic dropdown menu
21
+ * <DropdownMenu>
22
+ * <DropdownMenuTrigger asChild>
23
+ * <Button variant="outline">Options</Button>
24
+ * </DropdownMenuTrigger>
25
+ * <DropdownMenuContent>
26
+ * <DropdownMenuItem>Profile</DropdownMenuItem>
27
+ * <DropdownMenuItem>Settings</DropdownMenuItem>
28
+ * <DropdownMenuSeparator />
29
+ * <DropdownMenuItem>Logout</DropdownMenuItem>
30
+ * </DropdownMenuContent>
31
+ * </DropdownMenu>
32
+ * ```
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * // Context menu with alignment and destructive actions
37
+ * <DropdownMenu>
38
+ * <DropdownMenuTrigger asChild>
39
+ * <Button variant="ghost" size="icon">
40
+ * <MoreHorizontal />
41
+ * </Button>
42
+ * </DropdownMenuTrigger>
43
+ * <DropdownMenuContent align="end">
44
+ * <DropdownMenuItem>Edit</DropdownMenuItem>
45
+ * <DropdownMenuItem>Duplicate</DropdownMenuItem>
46
+ * <DropdownMenuSeparator />
47
+ * <DropdownMenuItem variant="destructive">Delete</DropdownMenuItem>
48
+ * </DropdownMenuContent>
49
+ * </DropdownMenu>
50
+ * ```
51
+ *
52
+ * @example
53
+ * ```tsx
54
+ * // Complex menu with checkboxes, radio groups, and submenus
55
+ * <DropdownMenu>
56
+ * <DropdownMenuTrigger asChild>
57
+ * <Button>Advanced Menu</Button>
58
+ * </DropdownMenuTrigger>
59
+ * <DropdownMenuContent className="w-56">
60
+ * <DropdownMenuLabel>View Options</DropdownMenuLabel>
61
+ * <DropdownMenuSeparator />
62
+ * <DropdownMenuCheckboxItem checked={showPanel} onCheckedChange={setShowPanel}>
63
+ * Show Panel
64
+ * </DropdownMenuCheckboxItem>
65
+ * <DropdownMenuSeparator />
66
+ * <DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
67
+ * <DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
68
+ * <DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
69
+ * </DropdownMenuRadioGroup>
70
+ * <DropdownMenuSeparator />
71
+ * <DropdownMenuSub>
72
+ * <DropdownMenuSubTrigger>Share</DropdownMenuSubTrigger>
73
+ * <DropdownMenuSubContent>
74
+ * <DropdownMenuItem>Email</DropdownMenuItem>
75
+ * <DropdownMenuItem>Copy Link</DropdownMenuItem>
76
+ * </DropdownMenuSubContent>
77
+ * </DropdownMenuSub>
78
+ * </DropdownMenuContent>
79
+ * </DropdownMenu>
80
+ * ```
81
+ *
82
+ * @accessibility
83
+ * - Full keyboard navigation with arrow keys (Up/Down for navigation)
84
+ * - Enter/Space to activate items
85
+ * - Escape key closes the menu and restores focus
86
+ * - Home/End keys navigate to first/last item
87
+ * - Type-ahead search to jump to items by first letter
88
+ * - Left/Right arrow keys for submenu navigation
89
+ * - Proper ARIA roles (menu, menuitem, menuitemcheckbox, menuitemradio)
90
+ * - Focus management with focus trapping and restoration
91
+ * - Screen reader announcements for state changes
92
+ *
93
+ * @see {@link ContextMenu} - For right-click context menus
94
+ * @see {@link Popover} - For rich content overlays
95
+ * @see {@link Select} - For single selection dropdowns
96
+ * @see {@link https://ui.shadcn.com/docs/components/dropdown-menu} - shadcn/ui documentation
97
+ * @since 1.0.0
98
+ */
99
+ function DropdownMenu({
100
+ ...props
101
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
102
+ return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
103
+ }
104
+
105
+ /**
106
+ * Portal component for rendering menu content in a different DOM location
107
+ *
108
+ * Renders dropdown content outside of the normal DOM hierarchy to avoid
109
+ * z-index and overflow issues. Automatically used by DropdownMenuContent
110
+ * but can be used explicitly for submenus.
111
+ *
112
+ * @component
113
+ * @param container - Optional container element for portal rendering
114
+ * @since 1.0.0
115
+ */
116
+ function DropdownMenuPortal({
117
+ ...props
118
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
119
+ return (
120
+ <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
121
+ );
122
+ }
123
+
124
+ /**
125
+ * DropdownMenuTrigger - The element that triggers the dropdown menu
126
+ *
127
+ * @component
128
+ * @example
129
+ * ```tsx
130
+ * <DropdownMenuTrigger asChild>
131
+ * <Button>Menu</Button>
132
+ * </DropdownMenuTrigger>
133
+ * ```
134
+ * @since 1.0.0
135
+ */
136
+ function DropdownMenuTrigger({
137
+ ...props
138
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
139
+ return (
140
+ <DropdownMenuPrimitive.Trigger
141
+ data-slot="dropdown-menu-trigger"
142
+ {...props}
143
+ />
144
+ );
145
+ }
146
+
147
+ /**
148
+ * DropdownMenuContent - The content container for dropdown menu items
149
+ *
150
+ * @component
151
+ * @example
152
+ * ```tsx
153
+ * <DropdownMenuContent align="end" sideOffset={5}>
154
+ * <DropdownMenuItem>Item 1</DropdownMenuItem>
155
+ * </DropdownMenuContent>
156
+ * ```
157
+ * @since 1.0.0
158
+ */
159
+ function DropdownMenuContent({
160
+ className,
161
+ sideOffset = 4,
162
+ ...props
163
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {
164
+ return (
165
+ <DropdownMenuPrimitive.Portal>
166
+ <DropdownMenuPrimitive.Content
167
+ data-slot="dropdown-menu-content"
168
+ sideOffset={sideOffset}
169
+ className={cn(
170
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
171
+ className,
172
+ )}
173
+ {...props}
174
+ />
175
+ </DropdownMenuPrimitive.Portal>
176
+ );
177
+ }
178
+
179
+ /**
180
+ * Groups related dropdown menu items together
181
+ *
182
+ * Used to create logical groupings of menu items, typically separated by
183
+ * DropdownMenuSeparator components. Helps with semantic organization and
184
+ * keyboard navigation.
185
+ *
186
+ * @component
187
+ * @example
188
+ * ```tsx
189
+ * <DropdownMenuGroup>
190
+ * <DropdownMenuItem>Profile</DropdownMenuItem>
191
+ * <DropdownMenuItem>Settings</DropdownMenuItem>
192
+ * </DropdownMenuGroup>
193
+ * ```
194
+ * @since 1.0.0
195
+ */
196
+ function DropdownMenuGroup({
197
+ ...props
198
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
199
+ return (
200
+ <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
201
+ );
202
+ }
203
+
204
+ /**
205
+ * DropdownMenuItem - A single item in the dropdown menu
206
+ *
207
+ * @component
208
+ * @example
209
+ * ```tsx
210
+ * <DropdownMenuItem onClick={handleClick}>
211
+ * Edit
212
+ * </DropdownMenuItem>
213
+ * <DropdownMenuItem variant="destructive">
214
+ * Delete
215
+ * </DropdownMenuItem>
216
+ * ```
217
+ * @since 1.0.0
218
+ */
219
+ function DropdownMenuItem({
220
+ className,
221
+ inset,
222
+ variant = "default",
223
+ ...props
224
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
225
+ inset?: boolean;
226
+ variant?: "default" | "destructive";
227
+ }) {
228
+ return (
229
+ <DropdownMenuPrimitive.Item
230
+ data-slot="dropdown-menu-item"
231
+ data-inset={inset}
232
+ data-variant={variant}
233
+ className={cn(
234
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
235
+ className,
236
+ )}
237
+ {...props}
238
+ />
239
+ );
240
+ }
241
+
242
+ /**
243
+ * A checkable menu item with visual state indication
244
+ *
245
+ * Displays a checkbox that can be toggled on/off. The checked state is
246
+ * visually indicated with a checkmark icon. Useful for menu options that
247
+ * represent toggleable settings or features.
248
+ *
249
+ * @component
250
+ * @param checked - Whether the checkbox is checked
251
+ * @param onCheckedChange - Callback when the checked state changes
252
+ * @param disabled - Whether the item is disabled
253
+ *
254
+ * @example
255
+ * ```tsx
256
+ * const [showSidebar, setShowSidebar] = useState(true);
257
+ *
258
+ * <DropdownMenuCheckboxItem
259
+ * checked={showSidebar}
260
+ * onCheckedChange={setShowSidebar}
261
+ * >
262
+ * Show Sidebar
263
+ * </DropdownMenuCheckboxItem>
264
+ * ```
265
+ * @since 1.0.0
266
+ */
267
+ function DropdownMenuCheckboxItem({
268
+ className,
269
+ children,
270
+ checked,
271
+ ...props
272
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {
273
+ return (
274
+ <DropdownMenuPrimitive.CheckboxItem
275
+ data-slot="dropdown-menu-checkbox-item"
276
+ className={cn(
277
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
278
+ className,
279
+ )}
280
+ checked={checked}
281
+ {...props}
282
+ >
283
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
284
+ <DropdownMenuPrimitive.ItemIndicator>
285
+ <CheckIcon className="size-4" />
286
+ </DropdownMenuPrimitive.ItemIndicator>
287
+ </span>
288
+ {children}
289
+ </DropdownMenuPrimitive.CheckboxItem>
290
+ );
291
+ }
292
+
293
+ /**
294
+ * Groups radio items for single selection
295
+ *
296
+ * Creates a group where only one radio item can be selected at a time.
297
+ * Use with DropdownMenuRadioItem components to create single-choice options.
298
+ *
299
+ * @component
300
+ * @param value - Currently selected value
301
+ * @param onValueChange - Callback when selection changes
302
+ *
303
+ * @example
304
+ * ```tsx
305
+ * const [theme, setTheme] = useState("light");
306
+ *
307
+ * <DropdownMenuRadioGroup value={theme} onValueChange={setTheme}>
308
+ * <DropdownMenuRadioItem value="light">Light</DropdownMenuRadioItem>
309
+ * <DropdownMenuRadioItem value="dark">Dark</DropdownMenuRadioItem>
310
+ * <DropdownMenuRadioItem value="system">System</DropdownMenuRadioItem>
311
+ * </DropdownMenuRadioGroup>
312
+ * ```
313
+ * @since 1.0.0
314
+ */
315
+ function DropdownMenuRadioGroup({
316
+ ...props
317
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
318
+ return (
319
+ <DropdownMenuPrimitive.RadioGroup
320
+ data-slot="dropdown-menu-radio-group"
321
+ {...props}
322
+ />
323
+ );
324
+ }
325
+
326
+ /**
327
+ * A radio button menu item for single selection within a group
328
+ *
329
+ * Must be used within a DropdownMenuRadioGroup. Shows a filled circle
330
+ * indicator when selected. Only one radio item can be selected per group.
331
+ *
332
+ * @component
333
+ * @param value - The value this radio item represents
334
+ * @param disabled - Whether the item is disabled
335
+ *
336
+ * @example
337
+ * ```tsx
338
+ * <DropdownMenuRadioGroup value={selectedTheme} onValueChange={setSelectedTheme}>
339
+ * <DropdownMenuRadioItem value="light">
340
+ * Light Theme
341
+ * </DropdownMenuRadioItem>
342
+ * <DropdownMenuRadioItem value="dark">
343
+ * Dark Theme
344
+ * </DropdownMenuRadioItem>
345
+ * </DropdownMenuRadioGroup>
346
+ * ```
347
+ * @since 1.0.0
348
+ */
349
+ function DropdownMenuRadioItem({
350
+ className,
351
+ children,
352
+ ...props
353
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {
354
+ return (
355
+ <DropdownMenuPrimitive.RadioItem
356
+ data-slot="dropdown-menu-radio-item"
357
+ className={cn(
358
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
359
+ className,
360
+ )}
361
+ {...props}
362
+ >
363
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
364
+ <DropdownMenuPrimitive.ItemIndicator>
365
+ <CircleIcon className="size-2 fill-current" />
366
+ </DropdownMenuPrimitive.ItemIndicator>
367
+ </span>
368
+ {children}
369
+ </DropdownMenuPrimitive.RadioItem>
370
+ );
371
+ }
372
+
373
+ /**
374
+ * DropdownMenuLabel - A label for grouping menu items
375
+ *
376
+ * @component
377
+ * @example
378
+ * ```tsx
379
+ * <DropdownMenuLabel>Actions</DropdownMenuLabel>
380
+ * ```
381
+ * @since 1.0.0
382
+ */
383
+ function DropdownMenuLabel({
384
+ className,
385
+ inset,
386
+ ...props
387
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
388
+ inset?: boolean;
389
+ }) {
390
+ return (
391
+ <DropdownMenuPrimitive.Label
392
+ data-slot="dropdown-menu-label"
393
+ data-inset={inset}
394
+ className={cn(
395
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
396
+ className,
397
+ )}
398
+ {...props}
399
+ />
400
+ );
401
+ }
402
+
403
+ /**
404
+ * DropdownMenuSeparator - A visual separator between menu items
405
+ *
406
+ * @component
407
+ * @since 1.0.0
408
+ */
409
+ function DropdownMenuSeparator({
410
+ className,
411
+ ...props
412
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {
413
+ return (
414
+ <DropdownMenuPrimitive.Separator
415
+ data-slot="dropdown-menu-separator"
416
+ className={cn("bg-border -mx-1 my-1 h-px", className)}
417
+ {...props}
418
+ />
419
+ );
420
+ }
421
+
422
+ /**
423
+ * Displays keyboard shortcut hints in menu items
424
+ *
425
+ * Shows keyboard shortcut text aligned to the right side of menu items.
426
+ * Purely visual - does not implement the actual keyboard functionality.
427
+ * Use standard keyboard shortcut notation (⌘, ⌃, ⌥, ⇧).
428
+ *
429
+ * @component
430
+ * @example
431
+ * ```tsx
432
+ * <DropdownMenuItem>
433
+ * Save Document
434
+ * <DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
435
+ * </DropdownMenuItem>
436
+ * ```
437
+ * @since 1.0.0
438
+ */
439
+ function DropdownMenuShortcut({
440
+ className,
441
+ ...props
442
+ }: React.ComponentProps<"span">) {
443
+ return (
444
+ <span
445
+ data-slot="dropdown-menu-shortcut"
446
+ className={cn(
447
+ "text-muted-foreground ml-auto text-xs tracking-widest",
448
+ className,
449
+ )}
450
+ {...props}
451
+ />
452
+ );
453
+ }
454
+
455
+ /**
456
+ * Container for creating nested submenus
457
+ *
458
+ * Wraps a submenu trigger and content to create hierarchical menu structures.
459
+ * Use with DropdownMenuSubTrigger and DropdownMenuSubContent.
460
+ *
461
+ * @component
462
+ * @example
463
+ * ```tsx
464
+ * <DropdownMenuSub>
465
+ * <DropdownMenuSubTrigger>Share</DropdownMenuSubTrigger>
466
+ * <DropdownMenuSubContent>
467
+ * <DropdownMenuItem>Email</DropdownMenuItem>
468
+ * <DropdownMenuItem>Copy Link</DropdownMenuItem>
469
+ * </DropdownMenuSubContent>
470
+ * </DropdownMenuSub>
471
+ * ```
472
+ * @since 1.0.0
473
+ */
474
+ function DropdownMenuSub({
475
+ ...props
476
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
477
+ return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />;
478
+ }
479
+
480
+ /**
481
+ * Trigger element for opening a submenu
482
+ *
483
+ * Displays an arrow indicator and opens the associated submenu on hover or click.
484
+ * Must be used within a DropdownMenuSub component.
485
+ *
486
+ * @component
487
+ * @param inset - Whether to add left padding to align with items that have icons
488
+ *
489
+ * @example
490
+ * ```tsx
491
+ * <DropdownMenuSub>
492
+ * <DropdownMenuSubTrigger>
493
+ * <Share className="mr-2 h-4 w-4" />
494
+ * Share Options
495
+ * </DropdownMenuSubTrigger>
496
+ * <DropdownMenuSubContent>
497
+ * <DropdownMenuItem>Email</DropdownMenuItem>
498
+ * <DropdownMenuItem>Copy Link</DropdownMenuItem>
499
+ * </DropdownMenuSubContent>
500
+ * </DropdownMenuSub>
501
+ * ```
502
+ * @since 1.0.0
503
+ */
504
+ function DropdownMenuSubTrigger({
505
+ className,
506
+ inset,
507
+ children,
508
+ ...props
509
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
510
+ inset?: boolean;
511
+ }) {
512
+ return (
513
+ <DropdownMenuPrimitive.SubTrigger
514
+ data-slot="dropdown-menu-sub-trigger"
515
+ data-inset={inset}
516
+ className={cn(
517
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8",
518
+ className,
519
+ )}
520
+ {...props}
521
+ >
522
+ {children}
523
+ <ChevronRightIcon className="ml-auto size-4" />
524
+ </DropdownMenuPrimitive.SubTrigger>
525
+ );
526
+ }
527
+
528
+ /**
529
+ * Content container for submenu items
530
+ *
531
+ * Contains the items displayed when a submenu is opened. Positioned relative
532
+ * to the trigger and supports the same item types as the main menu.
533
+ *
534
+ * @component
535
+ * @example
536
+ * ```tsx
537
+ * <DropdownMenuSubContent>
538
+ * <DropdownMenuItem>Submenu Item 1</DropdownMenuItem>
539
+ * <DropdownMenuItem>Submenu Item 2</DropdownMenuItem>
540
+ * <DropdownMenuSeparator />
541
+ * <DropdownMenuItem>Submenu Item 3</DropdownMenuItem>
542
+ * </DropdownMenuSubContent>
543
+ * ```
544
+ * @since 1.0.0
545
+ */
546
+ function DropdownMenuSubContent({
547
+ className,
548
+ ...props
549
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
550
+ return (
551
+ <DropdownMenuPrimitive.SubContent
552
+ data-slot="dropdown-menu-sub-content"
553
+ className={cn(
554
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
555
+ className,
556
+ )}
557
+ {...props}
558
+ />
559
+ );
560
+ }
561
+
562
+ export {
563
+ DropdownMenu,
564
+ DropdownMenuPortal,
565
+ DropdownMenuTrigger,
566
+ DropdownMenuContent,
567
+ DropdownMenuGroup,
568
+ DropdownMenuLabel,
569
+ DropdownMenuItem,
570
+ DropdownMenuCheckboxItem,
571
+ DropdownMenuRadioGroup,
572
+ DropdownMenuRadioItem,
573
+ DropdownMenuSeparator,
574
+ DropdownMenuShortcut,
575
+ DropdownMenuSub,
576
+ DropdownMenuSubTrigger,
577
+ DropdownMenuSubContent,
578
+ };