@neynar/ui 0.2.1 → 0.3.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 (547) hide show
  1. package/{llm-docs → .llm}/a.llm.md +2 -16
  2. package/{llm-docs → .llm}/badge.llm.md +16 -21
  3. package/{llm-docs → .llm}/blockquote.llm.md +1 -6
  4. package/.llm/button-group-separator.llm.md +53 -0
  5. package/.llm/button-group-text.llm.md +56 -0
  6. package/.llm/button-group.llm.md +81 -0
  7. package/{llm-docs → .llm}/button.llm.md +1 -1
  8. package/{llm-docs → .llm}/code.llm.md +1 -6
  9. package/.llm/empty-content.llm.md +103 -0
  10. package/.llm/empty-description.llm.md +70 -0
  11. package/.llm/empty-header.llm.md +64 -0
  12. package/.llm/empty-media.llm.md +81 -0
  13. package/.llm/empty-title.llm.md +54 -0
  14. package/.llm/empty.llm.md +158 -0
  15. package/.llm/field-content.llm.md +28 -0
  16. package/.llm/field-description.llm.md +28 -0
  17. package/.llm/field-error.llm.md +41 -0
  18. package/.llm/field-group.llm.md +84 -0
  19. package/.llm/field-label.llm.md +28 -0
  20. package/.llm/field-legend.llm.md +77 -0
  21. package/.llm/field-separator.llm.md +35 -0
  22. package/.llm/field-set.llm.md +80 -0
  23. package/.llm/field-title.llm.md +28 -0
  24. package/.llm/field.llm.md +35 -0
  25. package/{llm-docs → .llm}/h1.llm.md +2 -7
  26. package/{llm-docs → .llm}/h2.llm.md +2 -7
  27. package/{llm-docs → .llm}/h3.llm.md +2 -7
  28. package/{llm-docs → .llm}/h4.llm.md +2 -7
  29. package/{llm-docs → .llm}/h5.llm.md +2 -7
  30. package/{llm-docs → .llm}/h6.llm.md +1 -6
  31. package/.llm/input-group-addon.llm.md +91 -0
  32. package/.llm/input-group-button.llm.md +120 -0
  33. package/.llm/input-group-input.llm.md +145 -0
  34. package/.llm/input-group-text.llm.md +75 -0
  35. package/.llm/input-group-textarea.llm.md +157 -0
  36. package/.llm/input-group.llm.md +108 -0
  37. package/.llm/item-actions.llm.md +77 -0
  38. package/.llm/item-content.llm.md +73 -0
  39. package/.llm/item-description.llm.md +61 -0
  40. package/.llm/item-footer.llm.md +68 -0
  41. package/.llm/item-group.llm.md +73 -0
  42. package/.llm/item-header.llm.md +66 -0
  43. package/.llm/item-media.llm.md +75 -0
  44. package/.llm/item-separator.llm.md +80 -0
  45. package/.llm/item-title.llm.md +59 -0
  46. package/.llm/item.llm.md +115 -0
  47. package/.llm/kbd-group.llm.md +71 -0
  48. package/.llm/kbd.llm.md +71 -0
  49. package/{llm-docs → .llm}/lead.llm.md +1 -6
  50. package/{llm-docs → .llm}/p.llm.md +1 -6
  51. package/{llm-docs → .llm}/sdk-items-registry.json +390 -6
  52. package/{llm-docs → .llm}/small.llm.md +1 -6
  53. package/{llm-docs → .llm}/span.llm.md +2 -16
  54. package/.llm/spinner.llm.md +182 -0
  55. package/{llm-docs → .llm}/strong.llm.md +1 -6
  56. package/{llm-docs → .llm}/typography.llm.md +2 -16
  57. package/dist/components/ui/button-group.d.ts +448 -0
  58. package/dist/components/ui/button-group.d.ts.map +1 -0
  59. package/dist/components/ui/button.d.ts +1 -1
  60. package/dist/components/ui/button.d.ts.map +1 -1
  61. package/dist/components/ui/empty-state.d.ts +1 -0
  62. package/dist/components/ui/empty-state.d.ts.map +1 -1
  63. package/dist/components/ui/empty.d.ts +630 -0
  64. package/dist/components/ui/empty.d.ts.map +1 -0
  65. package/dist/components/ui/field.d.ts +238 -0
  66. package/dist/components/ui/field.d.ts.map +1 -0
  67. package/dist/components/ui/input-group.d.ts +636 -0
  68. package/dist/components/ui/input-group.d.ts.map +1 -0
  69. package/dist/components/ui/item.d.ts +766 -0
  70. package/dist/components/ui/item.d.ts.map +1 -0
  71. package/dist/components/ui/kbd.d.ts +149 -0
  72. package/dist/components/ui/kbd.d.ts.map +1 -0
  73. package/dist/components/ui/scroll-area.d.ts +5 -5
  74. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  75. package/dist/components/ui/spinner.d.ts +194 -0
  76. package/dist/components/ui/spinner.d.ts.map +1 -0
  77. package/dist/components/ui/stack.d.ts.map +1 -1
  78. package/dist/components/ui/stories/accordion.stories.d.ts +0 -1
  79. package/dist/components/ui/stories/accordion.stories.d.ts.map +1 -1
  80. package/dist/components/ui/stories/alert-dialog.stories.d.ts +0 -1
  81. package/dist/components/ui/stories/alert-dialog.stories.d.ts.map +1 -1
  82. package/dist/components/ui/stories/alert.stories.d.ts +0 -1
  83. package/dist/components/ui/stories/alert.stories.d.ts.map +1 -1
  84. package/dist/components/ui/stories/aspect-ratio.stories.d.ts +0 -1
  85. package/dist/components/ui/stories/aspect-ratio.stories.d.ts.map +1 -1
  86. package/dist/components/ui/stories/avatar.stories.d.ts +0 -1
  87. package/dist/components/ui/stories/avatar.stories.d.ts.map +1 -1
  88. package/dist/components/ui/stories/badge.stories.d.ts +0 -1
  89. package/dist/components/ui/stories/badge.stories.d.ts.map +1 -1
  90. package/dist/components/ui/stories/breadcrumb.stories.d.ts +0 -1
  91. package/dist/components/ui/stories/breadcrumb.stories.d.ts.map +1 -1
  92. package/dist/components/ui/stories/button-group.stories.d.ts +48 -0
  93. package/dist/components/ui/stories/button-group.stories.d.ts.map +1 -0
  94. package/dist/components/ui/stories/button.stories.d.ts +0 -1
  95. package/dist/components/ui/stories/button.stories.d.ts.map +1 -1
  96. package/dist/components/ui/stories/calendar.stories.d.ts +0 -1
  97. package/dist/components/ui/stories/calendar.stories.d.ts.map +1 -1
  98. package/dist/components/ui/stories/card.stories.d.ts +0 -1
  99. package/dist/components/ui/stories/card.stories.d.ts.map +1 -1
  100. package/dist/components/ui/stories/carousel.stories.d.ts +0 -1
  101. package/dist/components/ui/stories/carousel.stories.d.ts.map +1 -1
  102. package/dist/components/ui/stories/chart.stories.d.ts +0 -1
  103. package/dist/components/ui/stories/chart.stories.d.ts.map +1 -1
  104. package/dist/components/ui/stories/checkbox.stories.d.ts +0 -1
  105. package/dist/components/ui/stories/checkbox.stories.d.ts.map +1 -1
  106. package/dist/components/ui/stories/cn.stories.d.ts.map +1 -1
  107. package/dist/components/ui/stories/collapsible.stories.d.ts +0 -1
  108. package/dist/components/ui/stories/collapsible.stories.d.ts.map +1 -1
  109. package/dist/components/ui/stories/colors.stories.d.ts +0 -1
  110. package/dist/components/ui/stories/colors.stories.d.ts.map +1 -1
  111. package/dist/components/ui/stories/combobox.stories.d.ts +0 -1
  112. package/dist/components/ui/stories/combobox.stories.d.ts.map +1 -1
  113. package/dist/components/ui/stories/command.stories.d.ts +0 -1
  114. package/dist/components/ui/stories/command.stories.d.ts.map +1 -1
  115. package/dist/components/ui/stories/container.stories.d.ts +0 -1
  116. package/dist/components/ui/stories/container.stories.d.ts.map +1 -1
  117. package/dist/components/ui/stories/context-menu.stories.d.ts +0 -1
  118. package/dist/components/ui/stories/context-menu.stories.d.ts.map +1 -1
  119. package/dist/components/ui/stories/date-picker.stories.d.ts +0 -1
  120. package/dist/components/ui/stories/date-picker.stories.d.ts.map +1 -1
  121. package/dist/components/ui/stories/dialog.stories.d.ts +0 -1
  122. package/dist/components/ui/stories/dialog.stories.d.ts.map +1 -1
  123. package/dist/components/ui/stories/drawer.stories.d.ts +0 -1
  124. package/dist/components/ui/stories/drawer.stories.d.ts.map +1 -1
  125. package/dist/components/ui/stories/dropdown-menu.stories.d.ts +0 -1
  126. package/dist/components/ui/stories/dropdown-menu.stories.d.ts.map +1 -1
  127. package/dist/components/ui/stories/empty-state.stories.d.ts +0 -1
  128. package/dist/components/ui/stories/empty-state.stories.d.ts.map +1 -1
  129. package/dist/components/ui/stories/empty.stories.d.ts +38 -0
  130. package/dist/components/ui/stories/empty.stories.d.ts.map +1 -0
  131. package/dist/components/ui/stories/field.stories.d.ts +48 -0
  132. package/dist/components/ui/stories/field.stories.d.ts.map +1 -0
  133. package/dist/components/ui/stories/hover-card.stories.d.ts +0 -1
  134. package/dist/components/ui/stories/hover-card.stories.d.ts.map +1 -1
  135. package/dist/components/ui/stories/input-group.stories.d.ts +37 -0
  136. package/dist/components/ui/stories/input-group.stories.d.ts.map +1 -0
  137. package/dist/components/ui/stories/input.stories.d.ts +0 -1
  138. package/dist/components/ui/stories/input.stories.d.ts.map +1 -1
  139. package/dist/components/ui/stories/item.stories.d.ts +61 -0
  140. package/dist/components/ui/stories/item.stories.d.ts.map +1 -0
  141. package/dist/components/ui/stories/kbd.stories.d.ts +37 -0
  142. package/dist/components/ui/stories/kbd.stories.d.ts.map +1 -0
  143. package/dist/components/ui/stories/label.stories.d.ts +0 -1
  144. package/dist/components/ui/stories/label.stories.d.ts.map +1 -1
  145. package/dist/components/ui/stories/menubar.stories.d.ts +0 -1
  146. package/dist/components/ui/stories/menubar.stories.d.ts.map +1 -1
  147. package/dist/components/ui/stories/navigation-menu.stories.d.ts +0 -1
  148. package/dist/components/ui/stories/navigation-menu.stories.d.ts.map +1 -1
  149. package/dist/components/ui/stories/pagination.stories.d.ts +0 -1
  150. package/dist/components/ui/stories/pagination.stories.d.ts.map +1 -1
  151. package/dist/components/ui/stories/popover.stories.d.ts +0 -1
  152. package/dist/components/ui/stories/popover.stories.d.ts.map +1 -1
  153. package/dist/components/ui/stories/progress.stories.d.ts +0 -1
  154. package/dist/components/ui/stories/progress.stories.d.ts.map +1 -1
  155. package/dist/components/ui/stories/radio-group.stories.d.ts +0 -1
  156. package/dist/components/ui/stories/radio-group.stories.d.ts.map +1 -1
  157. package/dist/components/ui/stories/resizable.stories.d.ts +0 -1
  158. package/dist/components/ui/stories/resizable.stories.d.ts.map +1 -1
  159. package/dist/components/ui/stories/scroll-area.stories.d.ts +1 -2
  160. package/dist/components/ui/stories/scroll-area.stories.d.ts.map +1 -1
  161. package/dist/components/ui/stories/select.stories.d.ts +0 -1
  162. package/dist/components/ui/stories/select.stories.d.ts.map +1 -1
  163. package/dist/components/ui/stories/separator.stories.d.ts +0 -1
  164. package/dist/components/ui/stories/separator.stories.d.ts.map +1 -1
  165. package/dist/components/ui/stories/sheet.stories.d.ts +0 -1
  166. package/dist/components/ui/stories/sheet.stories.d.ts.map +1 -1
  167. package/dist/components/ui/stories/sidebar.stories.d.ts +0 -1
  168. package/dist/components/ui/stories/sidebar.stories.d.ts.map +1 -1
  169. package/dist/components/ui/stories/skeleton.stories.d.ts +0 -1
  170. package/dist/components/ui/stories/skeleton.stories.d.ts.map +1 -1
  171. package/dist/components/ui/stories/slider.stories.d.ts +0 -1
  172. package/dist/components/ui/stories/slider.stories.d.ts.map +1 -1
  173. package/dist/components/ui/stories/sonner.stories.d.ts.map +1 -1
  174. package/dist/components/ui/stories/spinner.stories.d.ts +37 -0
  175. package/dist/components/ui/stories/spinner.stories.d.ts.map +1 -0
  176. package/dist/components/ui/stories/stack.stories.d.ts +0 -1
  177. package/dist/components/ui/stories/stack.stories.d.ts.map +1 -1
  178. package/dist/components/ui/stories/switch.stories.d.ts +0 -1
  179. package/dist/components/ui/stories/switch.stories.d.ts.map +1 -1
  180. package/dist/components/ui/stories/table.stories.d.ts +0 -1
  181. package/dist/components/ui/stories/table.stories.d.ts.map +1 -1
  182. package/dist/components/ui/stories/tabs.stories.d.ts +0 -1
  183. package/dist/components/ui/stories/tabs.stories.d.ts.map +1 -1
  184. package/dist/components/ui/stories/text-field.stories.d.ts +0 -1
  185. package/dist/components/ui/stories/text-field.stories.d.ts.map +1 -1
  186. package/dist/components/ui/stories/textarea.stories.d.ts +0 -1
  187. package/dist/components/ui/stories/textarea.stories.d.ts.map +1 -1
  188. package/dist/components/ui/stories/theme-toggle.stories.d.ts +0 -1
  189. package/dist/components/ui/stories/theme-toggle.stories.d.ts.map +1 -1
  190. package/dist/components/ui/stories/theme.stories.d.ts +0 -1
  191. package/dist/components/ui/stories/theme.stories.d.ts.map +1 -1
  192. package/dist/components/ui/stories/toggle-group.stories.d.ts +0 -1
  193. package/dist/components/ui/stories/toggle-group.stories.d.ts.map +1 -1
  194. package/dist/components/ui/stories/toggle.stories.d.ts +0 -1
  195. package/dist/components/ui/stories/toggle.stories.d.ts.map +1 -1
  196. package/dist/components/ui/stories/tooltip.stories.d.ts +0 -1
  197. package/dist/components/ui/stories/tooltip.stories.d.ts.map +1 -1
  198. package/dist/components/ui/stories/typography.stories.d.ts +0 -1
  199. package/dist/components/ui/stories/typography.stories.d.ts.map +1 -1
  200. package/dist/components/ui/stories/use-mobile.stories.d.ts.map +1 -1
  201. package/dist/components/ui/stories/use-theme.stories.d.ts.map +1 -1
  202. package/dist/components/ui/theme-toggle.d.ts +0 -3
  203. package/dist/components/ui/theme-toggle.d.ts.map +1 -1
  204. package/dist/components/ui/theme.d.ts.map +1 -1
  205. package/dist/components/ui/typography.d.ts +12 -11
  206. package/dist/components/ui/typography.d.ts.map +1 -1
  207. package/dist/index.d.ts +7 -0
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +4973 -2353
  210. package/dist/index.js.map +1 -1
  211. package/dist/tsconfig.tsbuildinfo +1 -1
  212. package/docs/llm/components/display.md +125 -0
  213. package/docs/llm/components/feedback.md +0 -14
  214. package/docs/llm/components/forms.md +94 -0
  215. package/docs/llm/components/layout.md +169 -0
  216. package/llms.txt +18 -12
  217. package/package.json +7 -6
  218. package/src/components/ui/button-group.tsx +525 -0
  219. package/src/components/ui/button.tsx +9 -12
  220. package/src/components/ui/empty-state.tsx +1 -0
  221. package/src/components/ui/empty.tsx +793 -0
  222. package/src/components/ui/field.tsx +494 -0
  223. package/src/components/ui/input-group.tsx +801 -0
  224. package/src/components/ui/item.tsx +955 -0
  225. package/src/components/ui/kbd.tsx +175 -0
  226. package/src/components/ui/skeleton.tsx +1 -1
  227. package/src/components/ui/spinner.tsx +211 -0
  228. package/src/components/ui/stack.tsx +3 -1
  229. package/src/components/ui/stories/accordion.stories.tsx +0 -1
  230. package/src/components/ui/stories/alert-dialog.stories.tsx +0 -1
  231. package/src/components/ui/stories/alert.stories.tsx +0 -1
  232. package/src/components/ui/stories/aspect-ratio.stories.tsx +0 -1
  233. package/src/components/ui/stories/avatar.stories.tsx +0 -1
  234. package/src/components/ui/stories/badge.stories.tsx +0 -1
  235. package/src/components/ui/stories/breadcrumb.stories.tsx +0 -1
  236. package/src/components/ui/stories/button-group.stories.tsx +300 -0
  237. package/src/components/ui/stories/button.stories.tsx +0 -1
  238. package/src/components/ui/stories/calendar.stories.tsx +0 -1
  239. package/src/components/ui/stories/card.stories.tsx +0 -1
  240. package/src/components/ui/stories/carousel.stories.tsx +0 -1
  241. package/src/components/ui/stories/chart.stories.tsx +0 -1
  242. package/src/components/ui/stories/checkbox.stories.tsx +0 -1
  243. package/src/components/ui/stories/cn.stories.tsx +0 -1
  244. package/src/components/ui/stories/collapsible.stories.tsx +0 -1
  245. package/src/components/ui/stories/colors.stories.tsx +0 -1
  246. package/src/components/ui/stories/combobox.stories.tsx +0 -1
  247. package/src/components/ui/stories/command.stories.tsx +0 -1
  248. package/src/components/ui/stories/container.stories.tsx +0 -1
  249. package/src/components/ui/stories/context-menu.stories.tsx +0 -1
  250. package/src/components/ui/stories/date-picker.stories.tsx +0 -1
  251. package/src/components/ui/stories/dialog.stories.tsx +0 -1
  252. package/src/components/ui/stories/drawer.stories.tsx +0 -1
  253. package/src/components/ui/stories/dropdown-menu.stories.tsx +0 -1
  254. package/src/components/ui/stories/empty-state.stories.tsx +0 -1
  255. package/src/components/ui/stories/empty.stories.tsx +293 -0
  256. package/src/components/ui/stories/field.stories.tsx +470 -0
  257. package/src/components/ui/stories/hover-card.stories.tsx +0 -1
  258. package/src/components/ui/stories/input-group.stories.tsx +444 -0
  259. package/src/components/ui/stories/input.stories.tsx +0 -1
  260. package/src/components/ui/stories/item.stories.tsx +601 -0
  261. package/src/components/ui/stories/kbd.stories.tsx +462 -0
  262. package/src/components/ui/stories/label.stories.tsx +0 -1
  263. package/src/components/ui/stories/menubar.stories.tsx +0 -1
  264. package/src/components/ui/stories/navigation-menu.stories.tsx +0 -1
  265. package/src/components/ui/stories/pagination.stories.tsx +0 -1
  266. package/src/components/ui/stories/popover.stories.tsx +0 -1
  267. package/src/components/ui/stories/progress.stories.tsx +0 -1
  268. package/src/components/ui/stories/radio-group.stories.tsx +0 -1
  269. package/src/components/ui/stories/resizable.stories.tsx +0 -1
  270. package/src/components/ui/stories/scroll-area.stories.tsx +0 -1
  271. package/src/components/ui/stories/select.stories.tsx +0 -1
  272. package/src/components/ui/stories/separator.stories.tsx +0 -1
  273. package/src/components/ui/stories/sheet.stories.tsx +0 -1
  274. package/src/components/ui/stories/sidebar.stories.tsx +0 -1
  275. package/src/components/ui/stories/skeleton.stories.tsx +0 -1
  276. package/src/components/ui/stories/slider.stories.tsx +0 -1
  277. package/src/components/ui/stories/sonner.stories.tsx +0 -1
  278. package/src/components/ui/stories/spinner.stories.tsx +356 -0
  279. package/src/components/ui/stories/stack.stories.tsx +0 -1
  280. package/src/components/ui/stories/switch.stories.tsx +0 -1
  281. package/src/components/ui/stories/table.stories.tsx +0 -1
  282. package/src/components/ui/stories/tabs.stories.tsx +0 -1
  283. package/src/components/ui/stories/text-field.stories.tsx +0 -1
  284. package/src/components/ui/stories/textarea.stories.tsx +0 -1
  285. package/src/components/ui/stories/theme-toggle.stories.tsx +0 -1
  286. package/src/components/ui/stories/theme.stories.tsx +0 -1
  287. package/src/components/ui/stories/toggle-group.stories.tsx +0 -1
  288. package/src/components/ui/stories/toggle.stories.tsx +0 -1
  289. package/src/components/ui/stories/tooltip.stories.tsx +0 -1
  290. package/src/components/ui/stories/typography.stories.tsx +5 -2
  291. package/src/components/ui/stories/use-mobile.stories.tsx +0 -1
  292. package/src/components/ui/stories/use-theme.stories.tsx +0 -1
  293. package/src/components/ui/tabs.tsx +1 -1
  294. package/src/components/ui/theme-toggle.tsx +1 -3
  295. package/src/components/ui/theme.tsx +6 -1
  296. package/src/components/ui/typography.tsx +29 -129
  297. package/src/index.ts +7 -0
  298. package/src/styles/globals.css +82 -94
  299. /package/{llm-docs → .llm}/accordion-content.llm.md +0 -0
  300. /package/{llm-docs → .llm}/accordion-item.llm.md +0 -0
  301. /package/{llm-docs → .llm}/accordion-trigger.llm.md +0 -0
  302. /package/{llm-docs → .llm}/accordion.llm.md +0 -0
  303. /package/{llm-docs → .llm}/alert-description.llm.md +0 -0
  304. /package/{llm-docs → .llm}/alert-dialog-action.llm.md +0 -0
  305. /package/{llm-docs → .llm}/alert-dialog-cancel.llm.md +0 -0
  306. /package/{llm-docs → .llm}/alert-dialog-content.llm.md +0 -0
  307. /package/{llm-docs → .llm}/alert-dialog-description.llm.md +0 -0
  308. /package/{llm-docs → .llm}/alert-dialog-footer.llm.md +0 -0
  309. /package/{llm-docs → .llm}/alert-dialog-header.llm.md +0 -0
  310. /package/{llm-docs → .llm}/alert-dialog-overlay.llm.md +0 -0
  311. /package/{llm-docs → .llm}/alert-dialog-portal.llm.md +0 -0
  312. /package/{llm-docs → .llm}/alert-dialog-title.llm.md +0 -0
  313. /package/{llm-docs → .llm}/alert-dialog-trigger.llm.md +0 -0
  314. /package/{llm-docs → .llm}/alert-dialog.llm.md +0 -0
  315. /package/{llm-docs → .llm}/alert-title.llm.md +0 -0
  316. /package/{llm-docs → .llm}/alert.llm.md +0 -0
  317. /package/{llm-docs → .llm}/aspect-ratio.llm.md +0 -0
  318. /package/{llm-docs → .llm}/avatar-fallback.llm.md +0 -0
  319. /package/{llm-docs → .llm}/avatar-image.llm.md +0 -0
  320. /package/{llm-docs → .llm}/avatar.llm.md +0 -0
  321. /package/{llm-docs → .llm}/breadcrumb-ellipsis.llm.md +0 -0
  322. /package/{llm-docs → .llm}/breadcrumb-item.llm.md +0 -0
  323. /package/{llm-docs → .llm}/breadcrumb-link.llm.md +0 -0
  324. /package/{llm-docs → .llm}/breadcrumb-list.llm.md +0 -0
  325. /package/{llm-docs → .llm}/breadcrumb-page.llm.md +0 -0
  326. /package/{llm-docs → .llm}/breadcrumb-separator.llm.md +0 -0
  327. /package/{llm-docs → .llm}/breadcrumb.llm.md +0 -0
  328. /package/{llm-docs → .llm}/calendar-day-button.llm.md +0 -0
  329. /package/{llm-docs → .llm}/calendar.llm.md +0 -0
  330. /package/{llm-docs → .llm}/card-action.llm.md +0 -0
  331. /package/{llm-docs → .llm}/card-content.llm.md +0 -0
  332. /package/{llm-docs → .llm}/card-description.llm.md +0 -0
  333. /package/{llm-docs → .llm}/card-footer.llm.md +0 -0
  334. /package/{llm-docs → .llm}/card-header.llm.md +0 -0
  335. /package/{llm-docs → .llm}/card-title.llm.md +0 -0
  336. /package/{llm-docs → .llm}/card.llm.md +0 -0
  337. /package/{llm-docs → .llm}/carousel-content.llm.md +0 -0
  338. /package/{llm-docs → .llm}/carousel-item.llm.md +0 -0
  339. /package/{llm-docs → .llm}/carousel-next.llm.md +0 -0
  340. /package/{llm-docs → .llm}/carousel-previous.llm.md +0 -0
  341. /package/{llm-docs → .llm}/carousel.llm.md +0 -0
  342. /package/{llm-docs → .llm}/chart-config.llm.md +0 -0
  343. /package/{llm-docs → .llm}/chart-container.llm.md +0 -0
  344. /package/{llm-docs → .llm}/chart-legend-content.llm.md +0 -0
  345. /package/{llm-docs → .llm}/chart-legend.llm.md +0 -0
  346. /package/{llm-docs → .llm}/chart-style.llm.md +0 -0
  347. /package/{llm-docs → .llm}/chart-tooltip-content.llm.md +0 -0
  348. /package/{llm-docs → .llm}/chart-tooltip.llm.md +0 -0
  349. /package/{llm-docs → .llm}/checkbox.llm.md +0 -0
  350. /package/{llm-docs → .llm}/cn.llm.md +0 -0
  351. /package/{llm-docs → .llm}/collapsible-content.llm.md +0 -0
  352. /package/{llm-docs → .llm}/collapsible-trigger.llm.md +0 -0
  353. /package/{llm-docs → .llm}/collapsible.llm.md +0 -0
  354. /package/{llm-docs → .llm}/combobox-option.llm.md +0 -0
  355. /package/{llm-docs → .llm}/combobox.llm.md +0 -0
  356. /package/{llm-docs → .llm}/command-dialog.llm.md +0 -0
  357. /package/{llm-docs → .llm}/command-empty.llm.md +0 -0
  358. /package/{llm-docs → .llm}/command-group.llm.md +0 -0
  359. /package/{llm-docs → .llm}/command-input.llm.md +0 -0
  360. /package/{llm-docs → .llm}/command-item.llm.md +0 -0
  361. /package/{llm-docs → .llm}/command-list.llm.md +0 -0
  362. /package/{llm-docs → .llm}/command-loading.llm.md +0 -0
  363. /package/{llm-docs → .llm}/command-separator.llm.md +0 -0
  364. /package/{llm-docs → .llm}/command-shortcut.llm.md +0 -0
  365. /package/{llm-docs → .llm}/command.llm.md +0 -0
  366. /package/{llm-docs → .llm}/container.llm.md +0 -0
  367. /package/{llm-docs → .llm}/context-menu-checkbox-item.llm.md +0 -0
  368. /package/{llm-docs → .llm}/context-menu-content.llm.md +0 -0
  369. /package/{llm-docs → .llm}/context-menu-group.llm.md +0 -0
  370. /package/{llm-docs → .llm}/context-menu-item.llm.md +0 -0
  371. /package/{llm-docs → .llm}/context-menu-label.llm.md +0 -0
  372. /package/{llm-docs → .llm}/context-menu-portal.llm.md +0 -0
  373. /package/{llm-docs → .llm}/context-menu-radio-group.llm.md +0 -0
  374. /package/{llm-docs → .llm}/context-menu-radio-item.llm.md +0 -0
  375. /package/{llm-docs → .llm}/context-menu-separator.llm.md +0 -0
  376. /package/{llm-docs → .llm}/context-menu-shortcut.llm.md +0 -0
  377. /package/{llm-docs → .llm}/context-menu-sub-content.llm.md +0 -0
  378. /package/{llm-docs → .llm}/context-menu-sub-trigger.llm.md +0 -0
  379. /package/{llm-docs → .llm}/context-menu-sub.llm.md +0 -0
  380. /package/{llm-docs → .llm}/context-menu-trigger.llm.md +0 -0
  381. /package/{llm-docs → .llm}/context-menu.llm.md +0 -0
  382. /package/{llm-docs → .llm}/date-picker.llm.md +0 -0
  383. /package/{llm-docs → .llm}/dialog-close.llm.md +0 -0
  384. /package/{llm-docs → .llm}/dialog-content.llm.md +0 -0
  385. /package/{llm-docs → .llm}/dialog-description.llm.md +0 -0
  386. /package/{llm-docs → .llm}/dialog-footer.llm.md +0 -0
  387. /package/{llm-docs → .llm}/dialog-header.llm.md +0 -0
  388. /package/{llm-docs → .llm}/dialog-overlay.llm.md +0 -0
  389. /package/{llm-docs → .llm}/dialog-portal.llm.md +0 -0
  390. /package/{llm-docs → .llm}/dialog-title.llm.md +0 -0
  391. /package/{llm-docs → .llm}/dialog-trigger.llm.md +0 -0
  392. /package/{llm-docs → .llm}/dialog.llm.md +0 -0
  393. /package/{llm-docs → .llm}/drawer-close.llm.md +0 -0
  394. /package/{llm-docs → .llm}/drawer-content.llm.md +0 -0
  395. /package/{llm-docs → .llm}/drawer-description.llm.md +0 -0
  396. /package/{llm-docs → .llm}/drawer-footer.llm.md +0 -0
  397. /package/{llm-docs → .llm}/drawer-header.llm.md +0 -0
  398. /package/{llm-docs → .llm}/drawer-overlay.llm.md +0 -0
  399. /package/{llm-docs → .llm}/drawer-portal.llm.md +0 -0
  400. /package/{llm-docs → .llm}/drawer-title.llm.md +0 -0
  401. /package/{llm-docs → .llm}/drawer-trigger.llm.md +0 -0
  402. /package/{llm-docs → .llm}/drawer.llm.md +0 -0
  403. /package/{llm-docs → .llm}/dropdown-menu-checkbox-item.llm.md +0 -0
  404. /package/{llm-docs → .llm}/dropdown-menu-content.llm.md +0 -0
  405. /package/{llm-docs → .llm}/dropdown-menu-group.llm.md +0 -0
  406. /package/{llm-docs → .llm}/dropdown-menu-item.llm.md +0 -0
  407. /package/{llm-docs → .llm}/dropdown-menu-label.llm.md +0 -0
  408. /package/{llm-docs → .llm}/dropdown-menu-portal.llm.md +0 -0
  409. /package/{llm-docs → .llm}/dropdown-menu-radio-group.llm.md +0 -0
  410. /package/{llm-docs → .llm}/dropdown-menu-radio-item.llm.md +0 -0
  411. /package/{llm-docs → .llm}/dropdown-menu-separator.llm.md +0 -0
  412. /package/{llm-docs → .llm}/dropdown-menu-shortcut.llm.md +0 -0
  413. /package/{llm-docs → .llm}/dropdown-menu-sub-content.llm.md +0 -0
  414. /package/{llm-docs → .llm}/dropdown-menu-sub-trigger.llm.md +0 -0
  415. /package/{llm-docs → .llm}/dropdown-menu-sub.llm.md +0 -0
  416. /package/{llm-docs → .llm}/dropdown-menu-trigger.llm.md +0 -0
  417. /package/{llm-docs → .llm}/dropdown-menu.llm.md +0 -0
  418. /package/{llm-docs → .llm}/empty-state.llm.md +0 -0
  419. /package/{llm-docs → .llm}/hover-card-content.llm.md +0 -0
  420. /package/{llm-docs → .llm}/hover-card-trigger.llm.md +0 -0
  421. /package/{llm-docs → .llm}/hover-card.llm.md +0 -0
  422. /package/{llm-docs → .llm}/input.llm.md +0 -0
  423. /package/{llm-docs → .llm}/label.llm.md +0 -0
  424. /package/{llm-docs → .llm}/menubar-checkbox-item.llm.md +0 -0
  425. /package/{llm-docs → .llm}/menubar-content.llm.md +0 -0
  426. /package/{llm-docs → .llm}/menubar-group.llm.md +0 -0
  427. /package/{llm-docs → .llm}/menubar-item.llm.md +0 -0
  428. /package/{llm-docs → .llm}/menubar-label.llm.md +0 -0
  429. /package/{llm-docs → .llm}/menubar-menu.llm.md +0 -0
  430. /package/{llm-docs → .llm}/menubar-portal.llm.md +0 -0
  431. /package/{llm-docs → .llm}/menubar-radio-group.llm.md +0 -0
  432. /package/{llm-docs → .llm}/menubar-radio-item.llm.md +0 -0
  433. /package/{llm-docs → .llm}/menubar-separator.llm.md +0 -0
  434. /package/{llm-docs → .llm}/menubar-shortcut.llm.md +0 -0
  435. /package/{llm-docs → .llm}/menubar-sub-content.llm.md +0 -0
  436. /package/{llm-docs → .llm}/menubar-sub-trigger.llm.md +0 -0
  437. /package/{llm-docs → .llm}/menubar-sub.llm.md +0 -0
  438. /package/{llm-docs → .llm}/menubar-trigger.llm.md +0 -0
  439. /package/{llm-docs → .llm}/menubar.llm.md +0 -0
  440. /package/{llm-docs → .llm}/navigation-menu-content.llm.md +0 -0
  441. /package/{llm-docs → .llm}/navigation-menu-indicator.llm.md +0 -0
  442. /package/{llm-docs → .llm}/navigation-menu-item.llm.md +0 -0
  443. /package/{llm-docs → .llm}/navigation-menu-link.llm.md +0 -0
  444. /package/{llm-docs → .llm}/navigation-menu-list.llm.md +0 -0
  445. /package/{llm-docs → .llm}/navigation-menu-trigger-style.llm.md +0 -0
  446. /package/{llm-docs → .llm}/navigation-menu-trigger.llm.md +0 -0
  447. /package/{llm-docs → .llm}/navigation-menu-viewport.llm.md +0 -0
  448. /package/{llm-docs → .llm}/navigation-menu.llm.md +0 -0
  449. /package/{llm-docs → .llm}/pagination-content.llm.md +0 -0
  450. /package/{llm-docs → .llm}/pagination-ellipsis.llm.md +0 -0
  451. /package/{llm-docs → .llm}/pagination-item.llm.md +0 -0
  452. /package/{llm-docs → .llm}/pagination-link.llm.md +0 -0
  453. /package/{llm-docs → .llm}/pagination-next.llm.md +0 -0
  454. /package/{llm-docs → .llm}/pagination-previous.llm.md +0 -0
  455. /package/{llm-docs → .llm}/pagination.llm.md +0 -0
  456. /package/{llm-docs → .llm}/popover-anchor.llm.md +0 -0
  457. /package/{llm-docs → .llm}/popover-content.llm.md +0 -0
  458. /package/{llm-docs → .llm}/popover-trigger.llm.md +0 -0
  459. /package/{llm-docs → .llm}/popover.llm.md +0 -0
  460. /package/{llm-docs → .llm}/progress.llm.md +0 -0
  461. /package/{llm-docs → .llm}/radio-group-indicator.llm.md +0 -0
  462. /package/{llm-docs → .llm}/radio-group-item.llm.md +0 -0
  463. /package/{llm-docs → .llm}/radio-group.llm.md +0 -0
  464. /package/{llm-docs → .llm}/resizable-handle.llm.md +0 -0
  465. /package/{llm-docs → .llm}/resizable-panel-group.llm.md +0 -0
  466. /package/{llm-docs → .llm}/resizable-panel.llm.md +0 -0
  467. /package/{llm-docs → .llm}/scroll-area-corner.llm.md +0 -0
  468. /package/{llm-docs → .llm}/scroll-area-thumb.llm.md +0 -0
  469. /package/{llm-docs → .llm}/scroll-area-viewport.llm.md +0 -0
  470. /package/{llm-docs → .llm}/scroll-area.llm.md +0 -0
  471. /package/{llm-docs → .llm}/scroll-bar.llm.md +0 -0
  472. /package/{llm-docs → .llm}/select-content.llm.md +0 -0
  473. /package/{llm-docs → .llm}/select-group.llm.md +0 -0
  474. /package/{llm-docs → .llm}/select-item.llm.md +0 -0
  475. /package/{llm-docs → .llm}/select-label.llm.md +0 -0
  476. /package/{llm-docs → .llm}/select-scroll-down-button.llm.md +0 -0
  477. /package/{llm-docs → .llm}/select-scroll-up-button.llm.md +0 -0
  478. /package/{llm-docs → .llm}/select-separator.llm.md +0 -0
  479. /package/{llm-docs → .llm}/select-trigger.llm.md +0 -0
  480. /package/{llm-docs → .llm}/select-value.llm.md +0 -0
  481. /package/{llm-docs → .llm}/select.llm.md +0 -0
  482. /package/{llm-docs → .llm}/separator.llm.md +0 -0
  483. /package/{llm-docs → .llm}/sheet-close.llm.md +0 -0
  484. /package/{llm-docs → .llm}/sheet-content.llm.md +0 -0
  485. /package/{llm-docs → .llm}/sheet-description.llm.md +0 -0
  486. /package/{llm-docs → .llm}/sheet-footer.llm.md +0 -0
  487. /package/{llm-docs → .llm}/sheet-header.llm.md +0 -0
  488. /package/{llm-docs → .llm}/sheet-title.llm.md +0 -0
  489. /package/{llm-docs → .llm}/sheet-trigger.llm.md +0 -0
  490. /package/{llm-docs → .llm}/sheet.llm.md +0 -0
  491. /package/{llm-docs → .llm}/sidebar-content.llm.md +0 -0
  492. /package/{llm-docs → .llm}/sidebar-footer.llm.md +0 -0
  493. /package/{llm-docs → .llm}/sidebar-group-action.llm.md +0 -0
  494. /package/{llm-docs → .llm}/sidebar-group-content.llm.md +0 -0
  495. /package/{llm-docs → .llm}/sidebar-group-label.llm.md +0 -0
  496. /package/{llm-docs → .llm}/sidebar-group.llm.md +0 -0
  497. /package/{llm-docs → .llm}/sidebar-header.llm.md +0 -0
  498. /package/{llm-docs → .llm}/sidebar-input.llm.md +0 -0
  499. /package/{llm-docs → .llm}/sidebar-inset.llm.md +0 -0
  500. /package/{llm-docs → .llm}/sidebar-menu-action.llm.md +0 -0
  501. /package/{llm-docs → .llm}/sidebar-menu-badge.llm.md +0 -0
  502. /package/{llm-docs → .llm}/sidebar-menu-button.llm.md +0 -0
  503. /package/{llm-docs → .llm}/sidebar-menu-item.llm.md +0 -0
  504. /package/{llm-docs → .llm}/sidebar-menu-skeleton.llm.md +0 -0
  505. /package/{llm-docs → .llm}/sidebar-menu-sub-button.llm.md +0 -0
  506. /package/{llm-docs → .llm}/sidebar-menu-sub-item.llm.md +0 -0
  507. /package/{llm-docs → .llm}/sidebar-menu-sub.llm.md +0 -0
  508. /package/{llm-docs → .llm}/sidebar-menu.llm.md +0 -0
  509. /package/{llm-docs → .llm}/sidebar-provider.llm.md +0 -0
  510. /package/{llm-docs → .llm}/sidebar-rail.llm.md +0 -0
  511. /package/{llm-docs → .llm}/sidebar-separator.llm.md +0 -0
  512. /package/{llm-docs → .llm}/sidebar-trigger.llm.md +0 -0
  513. /package/{llm-docs → .llm}/sidebar.llm.md +0 -0
  514. /package/{llm-docs → .llm}/skeleton.llm.md +0 -0
  515. /package/{llm-docs → .llm}/slider.llm.md +0 -0
  516. /package/{llm-docs → .llm}/stack.llm.md +0 -0
  517. /package/{llm-docs → .llm}/switch.llm.md +0 -0
  518. /package/{llm-docs → .llm}/table-body.llm.md +0 -0
  519. /package/{llm-docs → .llm}/table-caption.llm.md +0 -0
  520. /package/{llm-docs → .llm}/table-cell.llm.md +0 -0
  521. /package/{llm-docs → .llm}/table-footer.llm.md +0 -0
  522. /package/{llm-docs → .llm}/table-head.llm.md +0 -0
  523. /package/{llm-docs → .llm}/table-header.llm.md +0 -0
  524. /package/{llm-docs → .llm}/table-row.llm.md +0 -0
  525. /package/{llm-docs → .llm}/table.llm.md +0 -0
  526. /package/{llm-docs → .llm}/tabs-content.llm.md +0 -0
  527. /package/{llm-docs → .llm}/tabs-list.llm.md +0 -0
  528. /package/{llm-docs → .llm}/tabs-trigger.llm.md +0 -0
  529. /package/{llm-docs → .llm}/tabs.llm.md +0 -0
  530. /package/{llm-docs → .llm}/text-field.llm.md +0 -0
  531. /package/{llm-docs → .llm}/textarea.llm.md +0 -0
  532. /package/{llm-docs → .llm}/theme-preference.llm.md +0 -0
  533. /package/{llm-docs → .llm}/theme-toggle.llm.md +0 -0
  534. /package/{llm-docs → .llm}/theme.llm.md +0 -0
  535. /package/{llm-docs → .llm}/toast.llm.md +0 -0
  536. /package/{llm-docs → .llm}/toaster.llm.md +0 -0
  537. /package/{llm-docs → .llm}/toggle-group-item.llm.md +0 -0
  538. /package/{llm-docs → .llm}/toggle-group.llm.md +0 -0
  539. /package/{llm-docs → .llm}/toggle.llm.md +0 -0
  540. /package/{llm-docs → .llm}/tooltip-content.llm.md +0 -0
  541. /package/{llm-docs → .llm}/tooltip-provider.llm.md +0 -0
  542. /package/{llm-docs → .llm}/tooltip-trigger.llm.md +0 -0
  543. /package/{llm-docs → .llm}/tooltip.llm.md +0 -0
  544. /package/{llm-docs → .llm}/use-carousel.llm.md +0 -0
  545. /package/{llm-docs → .llm}/use-command-state.llm.md +0 -0
  546. /package/{llm-docs → .llm}/use-is-mobile.llm.md +0 -0
  547. /package/{llm-docs → .llm}/use-sidebar.llm.md +0 -0
@@ -0,0 +1,955 @@
1
+ import * as React from "react"
2
+ import { Slot } from "@radix-ui/react-slot"
3
+ import { cva, type VariantProps } from "class-variance-authority"
4
+
5
+ import { cn } from "@/lib/utils"
6
+ import { Separator } from "@/components/ui/separator"
7
+
8
+ /**
9
+ * Props for ItemGroup component (Documentation only - NOT used in component implementation)
10
+ *
11
+ * Container component for grouping multiple Item components together with consistent
12
+ * spacing and optional separators. Automatically adds ARIA list semantics.
13
+ */
14
+ type ItemGroupDocsProps = {
15
+ /** Additional CSS classes to apply to the group container */
16
+ className?: string
17
+ /** Item components to be grouped together */
18
+ children?: React.ReactNode
19
+ } & React.HTMLAttributes<HTMLDivElement>
20
+
21
+ /**
22
+ * ItemGroup - Container for grouping multiple Item components
23
+ *
24
+ * Provides a semantic list container for organizing related items with consistent
25
+ * spacing and layout. Automatically applies role="list" for proper ARIA semantics.
26
+ * Use with ItemSeparator to visually separate items within the group.
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * <ItemGroup>
31
+ * <Item>
32
+ * <ItemContent>
33
+ * <ItemTitle>First Item</ItemTitle>
34
+ * </ItemContent>
35
+ * </Item>
36
+ * <ItemSeparator />
37
+ * <Item>
38
+ * <ItemContent>
39
+ * <ItemTitle>Second Item</ItemTitle>
40
+ * </ItemContent>
41
+ * </Item>
42
+ * </ItemGroup>
43
+ * ```
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * // Notification list with grouped items
48
+ * <ItemGroup>
49
+ * <Item variant="muted">
50
+ * <ItemMedia variant="icon">
51
+ * <Bell />
52
+ * </ItemMedia>
53
+ * <ItemContent>
54
+ * <ItemTitle>New notification</ItemTitle>
55
+ * <ItemDescription>You have a new message</ItemDescription>
56
+ * </ItemContent>
57
+ * </Item>
58
+ * <ItemSeparator />
59
+ * <Item>
60
+ * <ItemMedia variant="icon">
61
+ * <Clock />
62
+ * </ItemMedia>
63
+ * <ItemContent>
64
+ * <ItemTitle>Reminder</ItemTitle>
65
+ * <ItemDescription>Meeting in 30 minutes</ItemDescription>
66
+ * </ItemContent>
67
+ * </Item>
68
+ * </ItemGroup>
69
+ * ```
70
+ *
71
+ * @accessibility
72
+ * - Automatically applies role="list" for screen readers
73
+ * - Provides semantic structure for grouped content
74
+ * - Works with keyboard navigation when items are interactive
75
+ *
76
+ * @see {@link Item} Individual item component
77
+ * @see {@link ItemSeparator} Separator between items
78
+ * @since 1.0.0
79
+ */
80
+ function ItemGroup({ className, ...props }: React.ComponentProps<"div">) {
81
+ return (
82
+ <div
83
+ role="list"
84
+ data-slot="item-group"
85
+ className={cn("group/item-group flex flex-col", className)}
86
+ {...props}
87
+ />
88
+ )
89
+ }
90
+
91
+ /**
92
+ * Props for ItemSeparator component (Documentation only - NOT used in component implementation)
93
+ *
94
+ * Horizontal separator for visually dividing items within an ItemGroup. Built on the
95
+ * Separator primitive with optimized spacing for item layouts.
96
+ */
97
+ type ItemSeparatorDocsProps = {
98
+ /** Additional CSS classes to apply to the separator */
99
+ className?: string
100
+ /** Orientation of the separator @default "horizontal" */
101
+ orientation?: "horizontal" | "vertical"
102
+ /** Whether the separator is purely decorative @default true */
103
+ decorative?: boolean
104
+ } & React.ComponentPropsWithoutRef<typeof Separator>
105
+
106
+ /**
107
+ * ItemSeparator - Horizontal divider for separating items
108
+ *
109
+ * Provides a visual separator between items in an ItemGroup. Built on the Separator
110
+ * component with optimized spacing (my-0) to work seamlessly with item layouts.
111
+ * Always renders horizontally for consistent item list styling.
112
+ *
113
+ * @example
114
+ * ```tsx
115
+ * <ItemGroup>
116
+ * <Item>
117
+ * <ItemContent>
118
+ * <ItemTitle>First Item</ItemTitle>
119
+ * </ItemContent>
120
+ * </Item>
121
+ * <ItemSeparator />
122
+ * <Item>
123
+ * <ItemContent>
124
+ * <ItemTitle>Second Item</ItemTitle>
125
+ * </ItemContent>
126
+ * </Item>
127
+ * </ItemGroup>
128
+ * ```
129
+ *
130
+ * @example
131
+ * ```tsx
132
+ * // File list with separators
133
+ * <ItemGroup>
134
+ * <Item asChild>
135
+ * <a href="#">
136
+ * <ItemMedia variant="icon">
137
+ * <FileText />
138
+ * </ItemMedia>
139
+ * <ItemContent>
140
+ * <ItemTitle>Document.pdf</ItemTitle>
141
+ * </ItemContent>
142
+ * </a>
143
+ * </Item>
144
+ * <ItemSeparator />
145
+ * <Item asChild>
146
+ * <a href="#">
147
+ * <ItemMedia variant="icon">
148
+ * <FileText />
149
+ * </ItemMedia>
150
+ * <ItemContent>
151
+ * <ItemTitle>Report.docx</ItemTitle>
152
+ * </ItemContent>
153
+ * </a>
154
+ * </Item>
155
+ * </ItemGroup>
156
+ * ```
157
+ *
158
+ * @accessibility
159
+ * - Automatically marked as decorative (role="separator")
160
+ * - Does not interfere with keyboard navigation
161
+ * - Provides clear visual boundaries between interactive items
162
+ *
163
+ * @see {@link ItemGroup} Container for grouped items
164
+ * @see {@link Separator} Base separator component
165
+ * @since 1.0.0
166
+ */
167
+ function ItemSeparator({
168
+ className,
169
+ ...props
170
+ }: React.ComponentProps<typeof Separator>) {
171
+ return (
172
+ <Separator
173
+ data-slot="item-separator"
174
+ orientation="horizontal"
175
+ className={cn("my-0", className)}
176
+ {...props}
177
+ />
178
+ )
179
+ }
180
+
181
+ /**
182
+ * Item variant styles using class-variance-authority
183
+ *
184
+ * @variant default - Transparent background for clean, minimal appearance
185
+ * @variant outline - Border styling for emphasized boundaries
186
+ * @variant muted - Subtle background for visual emphasis or grouping
187
+ */
188
+ const itemVariants = cva(
189
+ "group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
190
+ {
191
+ variants: {
192
+ variant: {
193
+ default: "bg-transparent",
194
+ outline: "border-border",
195
+ muted: "bg-muted/50",
196
+ },
197
+ size: {
198
+ default: "p-4 gap-4 ",
199
+ sm: "py-3 px-4 gap-2.5",
200
+ },
201
+ },
202
+ defaultVariants: {
203
+ variant: "default",
204
+ size: "default",
205
+ },
206
+ }
207
+ )
208
+
209
+ /**
210
+ * Props for Item component (Documentation only - NOT used in component implementation)
211
+ *
212
+ * Flexible container for displaying content with media, titles, descriptions, and actions.
213
+ * Supports composition patterns via the asChild prop and multiple visual variants.
214
+ */
215
+ type ItemDocsProps = {
216
+ /** Visual style variant
217
+ * - "default": Transparent background for minimal appearance
218
+ * - "outline": Visible border for emphasis
219
+ * - "muted": Subtle background for visual grouping
220
+ * @default "default"
221
+ */
222
+ variant?: "default" | "outline" | "muted"
223
+ /** Size variant controlling padding and gap spacing
224
+ * - "default": Standard padding (p-4) with 4-unit gap
225
+ * - "sm": Compact padding (py-3 px-4) with 2.5-unit gap
226
+ * @default "default"
227
+ */
228
+ size?: "default" | "sm"
229
+ /**
230
+ * Render the Item as a child element instead of a div.
231
+ * Uses Radix UI Slot to merge props with the child element.
232
+ * Perfect for rendering items as links or buttons.
233
+ * @default false
234
+ */
235
+ asChild?: boolean
236
+ /** Additional CSS classes to apply */
237
+ className?: string
238
+ /** Content to display within the item */
239
+ children?: React.ReactNode
240
+ } & React.HTMLAttributes<HTMLDivElement>
241
+
242
+ /**
243
+ * Item - Flexible container for displaying structured content
244
+ *
245
+ * A composable component for creating rich list items, cards, and data displays.
246
+ * Built with a slot-based architecture allowing flexible combinations of media,
247
+ * content, actions, headers, and footers. Supports rendering as any HTML element
248
+ * via the asChild prop for semantic flexibility (e.g., links, buttons).
249
+ *
250
+ * @example
251
+ * ```tsx
252
+ * // Basic item with icon and content
253
+ * <Item>
254
+ * <ItemMedia variant="icon">
255
+ * <FileText />
256
+ * </ItemMedia>
257
+ * <ItemContent>
258
+ * <ItemTitle>Document.pdf</ItemTitle>
259
+ * <ItemDescription>Last modified today</ItemDescription>
260
+ * </ItemContent>
261
+ * </Item>
262
+ * ```
263
+ *
264
+ * @example
265
+ * ```tsx
266
+ * // Item as a clickable link with asChild
267
+ * <Item asChild>
268
+ * <a href="/dashboard">
269
+ * <ItemMedia variant="icon">
270
+ * <Home />
271
+ * </ItemMedia>
272
+ * <ItemContent>
273
+ * <ItemTitle>Dashboard</ItemTitle>
274
+ * <ItemDescription>View your account overview</ItemDescription>
275
+ * </ItemContent>
276
+ * <ItemActions>
277
+ * <ChevronRight />
278
+ * </ItemActions>
279
+ * </a>
280
+ * </Item>
281
+ * ```
282
+ *
283
+ * @example
284
+ * ```tsx
285
+ * // Rich item with header, footer, and actions
286
+ * <Item variant="outline">
287
+ * <ItemMedia variant="image">
288
+ * <img src="/avatar.jpg" alt="User" />
289
+ * </ItemMedia>
290
+ * <ItemContent>
291
+ * <ItemHeader>
292
+ * <ItemTitle>John Doe</ItemTitle>
293
+ * <Badge>Pro</Badge>
294
+ * </ItemHeader>
295
+ * <ItemDescription>Product Manager</ItemDescription>
296
+ * <ItemFooter>
297
+ * <span className="text-xs">Last active 5m ago</span>
298
+ * </ItemFooter>
299
+ * </ItemContent>
300
+ * <ItemActions>
301
+ * <Button size="sm">Message</Button>
302
+ * </ItemActions>
303
+ * </Item>
304
+ * ```
305
+ *
306
+ * @example
307
+ * ```tsx
308
+ * // Small size variant for compact layouts
309
+ * <Item size="sm">
310
+ * <ItemContent>
311
+ * <ItemTitle>Settings</ItemTitle>
312
+ * </ItemContent>
313
+ * <ItemActions>
314
+ * <ChevronRight className="size-4" />
315
+ * </ItemActions>
316
+ * </Item>
317
+ * ```
318
+ *
319
+ * @accessibility
320
+ * - Supports keyboard navigation when interactive (via asChild with <a> or <button>)
321
+ * - Focus visible ring appears on keyboard focus
322
+ * - Proper semantic HTML when used with asChild prop
323
+ * - Works with screen readers via proper content structure
324
+ *
325
+ * @see {@link ItemGroup} Container for grouping multiple items
326
+ * @see {@link ItemMedia} Media slot for icons or images
327
+ * @see {@link ItemContent} Main content container
328
+ * @see {@link ItemTitle} Title text component
329
+ * @see {@link ItemDescription} Description text component
330
+ * @see {@link ItemActions} Actions slot for buttons or icons
331
+ * @see {@link ItemHeader} Header layout for title and metadata
332
+ * @see {@link ItemFooter} Footer layout for additional info
333
+ * @since 1.0.0
334
+ */
335
+ function Item({
336
+ className,
337
+ variant = "default",
338
+ size = "default",
339
+ asChild = false,
340
+ ...props
341
+ }: React.ComponentProps<"div"> &
342
+ VariantProps<typeof itemVariants> & { asChild?: boolean }) {
343
+ const Comp = asChild ? Slot : "div"
344
+ return (
345
+ <Comp
346
+ data-slot="item"
347
+ data-variant={variant}
348
+ data-size={size}
349
+ className={cn(itemVariants({ variant, size, className }))}
350
+ {...props}
351
+ />
352
+ )
353
+ }
354
+
355
+ /**
356
+ * ItemMedia variant styles using class-variance-authority
357
+ *
358
+ * @variant default - Transparent media container for raw content
359
+ * @variant icon - Bordered container (8x8) with muted background, perfect for SVG icons
360
+ * @variant image - Square container (10x10) with rounded corners for images or avatars
361
+ */
362
+ const itemMediaVariants = cva(
363
+ "flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5",
364
+ {
365
+ variants: {
366
+ variant: {
367
+ default: "bg-transparent",
368
+ icon: "size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4",
369
+ image:
370
+ "size-10 rounded-sm overflow-hidden [&_img]:size-full [&_img]:object-cover",
371
+ },
372
+ },
373
+ defaultVariants: {
374
+ variant: "default",
375
+ },
376
+ }
377
+ )
378
+
379
+ /**
380
+ * Props for ItemMedia component (Documentation only - NOT used in component implementation)
381
+ *
382
+ * Media container for displaying icons, images, or avatars at the start of an item.
383
+ * Automatically aligns to the top when ItemDescription is present.
384
+ */
385
+ type ItemMediaDocsProps = {
386
+ /** Visual style variant for the media container
387
+ * - "default": Transparent container for custom content
388
+ * - "icon": 32px square with border and muted background (auto-sizes SVGs to 16px)
389
+ * - "image": 40px square with rounded corners and image cover styling
390
+ * @default "default"
391
+ */
392
+ variant?: "default" | "icon" | "image"
393
+ /** Additional CSS classes to apply */
394
+ className?: string
395
+ /** Media content (icon, image, or custom element) */
396
+ children?: React.ReactNode
397
+ } & React.HTMLAttributes<HTMLDivElement>
398
+
399
+ /**
400
+ * ItemMedia - Media container for icons, images, or avatars
401
+ *
402
+ * Flexible media slot that appears at the start of an item. Supports three display
403
+ * modes: transparent (default), bordered icon container, or image container with
404
+ * object-fit styling. Automatically adjusts alignment when descriptions are present.
405
+ *
406
+ * @example
407
+ * ```tsx
408
+ * // Icon variant with automatic sizing
409
+ * <Item>
410
+ * <ItemMedia variant="icon">
411
+ * <FileText />
412
+ * </ItemMedia>
413
+ * <ItemContent>
414
+ * <ItemTitle>Document</ItemTitle>
415
+ * </ItemContent>
416
+ * </Item>
417
+ * ```
418
+ *
419
+ * @example
420
+ * ```tsx
421
+ * // Image variant for avatars or thumbnails
422
+ * <Item>
423
+ * <ItemMedia variant="image">
424
+ * <img src="/avatar.jpg" alt="User avatar" />
425
+ * </ItemMedia>
426
+ * <ItemContent>
427
+ * <ItemTitle>John Doe</ItemTitle>
428
+ * <ItemDescription>Product Manager</ItemDescription>
429
+ * </ItemContent>
430
+ * </Item>
431
+ * ```
432
+ *
433
+ * @example
434
+ * ```tsx
435
+ * // Default variant for custom content
436
+ * <Item>
437
+ * <ItemMedia>
438
+ * <div className="size-12 rounded-full bg-gradient-to-br from-purple-400 to-pink-400" />
439
+ * </ItemMedia>
440
+ * <ItemContent>
441
+ * <ItemTitle>Custom Media</ItemTitle>
442
+ * </ItemContent>
443
+ * </Item>
444
+ * ```
445
+ *
446
+ * @accessibility
447
+ * - SVG icons automatically marked as non-interactive (pointer-events-none)
448
+ * - Images should include proper alt text for screen readers
449
+ * - Container aligns to content start for better readability with multi-line text
450
+ *
451
+ * @see {@link Item} Parent container component
452
+ * @see {@link ItemContent} Content container that pairs with media
453
+ * @since 1.0.0
454
+ */
455
+ function ItemMedia({
456
+ className,
457
+ variant = "default",
458
+ ...props
459
+ }: React.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>) {
460
+ return (
461
+ <div
462
+ data-slot="item-media"
463
+ data-variant={variant}
464
+ className={cn(itemMediaVariants({ variant, className }))}
465
+ {...props}
466
+ />
467
+ )
468
+ }
469
+
470
+ /**
471
+ * Props for ItemContent component (Documentation only - NOT used in component implementation)
472
+ *
473
+ * Main content container for item text and metadata. Grows to fill available space
474
+ * and provides consistent vertical spacing between child elements.
475
+ */
476
+ type ItemContentDocsProps = {
477
+ /** Additional CSS classes to apply */
478
+ className?: string
479
+ /** Title, description, header, and footer components */
480
+ children?: React.ReactNode
481
+ } & React.HTMLAttributes<HTMLDivElement>
482
+
483
+ /**
484
+ * ItemContent - Main content container for item text
485
+ *
486
+ * Flexible container that holds ItemTitle, ItemDescription, ItemHeader, and ItemFooter.
487
+ * Automatically grows to fill available space (flex-1) and provides consistent gap
488
+ * spacing (gap-1) between children. Multiple ItemContent containers can be used, with
489
+ * subsequent ones not growing (flex-none).
490
+ *
491
+ * @example
492
+ * ```tsx
493
+ * <Item>
494
+ * <ItemContent>
495
+ * <ItemTitle>Document Name</ItemTitle>
496
+ * <ItemDescription>Additional details</ItemDescription>
497
+ * </ItemContent>
498
+ * </Item>
499
+ * ```
500
+ *
501
+ * @example
502
+ * ```tsx
503
+ * // Content with header and footer
504
+ * <Item>
505
+ * <ItemMedia variant="icon">
506
+ * <FileText />
507
+ * </ItemMedia>
508
+ * <ItemContent>
509
+ * <ItemHeader>
510
+ * <ItemTitle>Meeting Notes</ItemTitle>
511
+ * <Badge>New</Badge>
512
+ * </ItemHeader>
513
+ * <ItemDescription>Notes from the team sync</ItemDescription>
514
+ * <ItemFooter>
515
+ * <span className="text-xs">Updated 5m ago</span>
516
+ * </ItemFooter>
517
+ * </ItemContent>
518
+ * </Item>
519
+ * ```
520
+ *
521
+ * @example
522
+ * ```tsx
523
+ * // Multiple content containers
524
+ * <Item>
525
+ * <ItemContent>
526
+ * <ItemTitle>Primary Content</ItemTitle>
527
+ * <ItemDescription>Main information</ItemDescription>
528
+ * </ItemContent>
529
+ * <ItemContent>
530
+ * <span className="text-xs text-muted-foreground">Metadata</span>
531
+ * </ItemContent>
532
+ * </Item>
533
+ * ```
534
+ *
535
+ * @see {@link Item} Parent container
536
+ * @see {@link ItemTitle} Title component
537
+ * @see {@link ItemDescription} Description component
538
+ * @see {@link ItemHeader} Header layout
539
+ * @see {@link ItemFooter} Footer layout
540
+ * @since 1.0.0
541
+ */
542
+ function ItemContent({ className, ...props }: React.ComponentProps<"div">) {
543
+ return (
544
+ <div
545
+ data-slot="item-content"
546
+ className={cn(
547
+ "flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none",
548
+ className
549
+ )}
550
+ {...props}
551
+ />
552
+ )
553
+ }
554
+
555
+ /**
556
+ * Props for ItemTitle component (Documentation only - NOT used in component implementation)
557
+ *
558
+ * Title text for an item. Medium font weight with snug line height for readability.
559
+ */
560
+ type ItemTitleDocsProps = {
561
+ /** Additional CSS classes to apply */
562
+ className?: string
563
+ /** Title text content */
564
+ children?: React.ReactNode
565
+ } & React.HTMLAttributes<HTMLDivElement>
566
+
567
+ /**
568
+ * ItemTitle - Title text for an item
569
+ *
570
+ * Displays the primary title or heading text for an item. Uses medium font weight
571
+ * and tight line spacing for a prominent yet compact appearance. Inline-flex layout
572
+ * allows badges or icons to be positioned next to the title.
573
+ *
574
+ * @example
575
+ * ```tsx
576
+ * <ItemContent>
577
+ * <ItemTitle>Document.pdf</ItemTitle>
578
+ * <ItemDescription>Last modified today</ItemDescription>
579
+ * </ItemContent>
580
+ * ```
581
+ *
582
+ * @example
583
+ * ```tsx
584
+ * // Title with inline badge
585
+ * <ItemContent>
586
+ * <ItemTitle>
587
+ * Premium Feature
588
+ * <Badge variant="secondary">Pro</Badge>
589
+ * </ItemTitle>
590
+ * </ItemContent>
591
+ * ```
592
+ *
593
+ * @example
594
+ * ```tsx
595
+ * // Title with icon
596
+ * <ItemContent>
597
+ * <ItemTitle>
598
+ * <Lock className="size-3" />
599
+ * Private Document
600
+ * </ItemTitle>
601
+ * </ItemContent>
602
+ * ```
603
+ *
604
+ * @see {@link ItemContent} Parent container
605
+ * @see {@link ItemDescription} Paired description component
606
+ * @since 1.0.0
607
+ */
608
+ function ItemTitle({ className, ...props }: React.ComponentProps<"div">) {
609
+ return (
610
+ <div
611
+ data-slot="item-title"
612
+ className={cn(
613
+ "flex w-fit items-center gap-2 text-sm leading-snug font-medium",
614
+ className
615
+ )}
616
+ {...props}
617
+ />
618
+ )
619
+ }
620
+
621
+ /**
622
+ * Props for ItemDescription component (Documentation only - NOT used in component implementation)
623
+ *
624
+ * Secondary descriptive text for an item. Muted color with 2-line clamping and
625
+ * balanced text wrapping for optimal readability.
626
+ */
627
+ type ItemDescriptionDocsProps = {
628
+ /** Additional CSS classes to apply */
629
+ className?: string
630
+ /** Description text content (supports links) */
631
+ children?: React.ReactNode
632
+ } & React.HTMLAttributes<HTMLParagraphElement>
633
+
634
+ /**
635
+ * ItemDescription - Secondary descriptive text
636
+ *
637
+ * Displays supplementary information below the item title. Automatically limits
638
+ * to 2 lines with text-balance for optimal wrapping. Includes special styling for
639
+ * inline links with hover states. Text color is muted for visual hierarchy.
640
+ *
641
+ * @example
642
+ * ```tsx
643
+ * <ItemContent>
644
+ * <ItemTitle>Project Documentation</ItemTitle>
645
+ * <ItemDescription>
646
+ * Complete guide to project setup and configuration
647
+ * </ItemDescription>
648
+ * </ItemContent>
649
+ * ```
650
+ *
651
+ * @example
652
+ * ```tsx
653
+ * // Description with link
654
+ * <ItemContent>
655
+ * <ItemTitle>Update Available</ItemTitle>
656
+ * <ItemDescription>
657
+ * A new version is available. <a href="#">Learn more</a>
658
+ * </ItemDescription>
659
+ * </ItemContent>
660
+ * ```
661
+ *
662
+ * @example
663
+ * ```tsx
664
+ * // Description with metadata
665
+ * <ItemContent>
666
+ * <ItemTitle>Team Meeting</ItemTitle>
667
+ * <ItemDescription>
668
+ * Discuss Q4 planning and resource allocation
669
+ * </ItemDescription>
670
+ * </ItemContent>
671
+ * ```
672
+ *
673
+ * @accessibility
674
+ * - Links within description are keyboard accessible
675
+ * - Hover and focus states provide clear interaction feedback
676
+ * - Text clamping ensures consistent layout without content overflow
677
+ *
678
+ * @see {@link ItemContent} Parent container
679
+ * @see {@link ItemTitle} Paired title component
680
+ * @since 1.0.0
681
+ */
682
+ function ItemDescription({ className, ...props }: React.ComponentProps<"p">) {
683
+ return (
684
+ <p
685
+ data-slot="item-description"
686
+ className={cn(
687
+ "text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance",
688
+ "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
689
+ className
690
+ )}
691
+ {...props}
692
+ />
693
+ )
694
+ }
695
+
696
+ /**
697
+ * Props for ItemActions component (Documentation only - NOT used in component implementation)
698
+ *
699
+ * Container for action buttons, icons, or interactive elements positioned at the
700
+ * end of an item. Provides consistent spacing between multiple actions.
701
+ */
702
+ type ItemActionsDocsProps = {
703
+ /** Additional CSS classes to apply */
704
+ className?: string
705
+ /** Button, icon, or interactive components */
706
+ children?: React.ReactNode
707
+ } & React.HTMLAttributes<HTMLDivElement>
708
+
709
+ /**
710
+ * ItemActions - Container for action buttons and icons
711
+ *
712
+ * Positioned at the end of an item for displaying interactive elements like buttons,
713
+ * icons, or dropdown triggers. Flexbox layout with consistent gap spacing ensures
714
+ * proper alignment of multiple actions.
715
+ *
716
+ * @example
717
+ * ```tsx
718
+ * <Item>
719
+ * <ItemContent>
720
+ * <ItemTitle>Document</ItemTitle>
721
+ * </ItemContent>
722
+ * <ItemActions>
723
+ * <Button variant="ghost" size="icon">
724
+ * <MoreVertical />
725
+ * </Button>
726
+ * </ItemActions>
727
+ * </Item>
728
+ * ```
729
+ *
730
+ * @example
731
+ * ```tsx
732
+ * // Multiple action buttons
733
+ * <Item>
734
+ * <ItemContent>
735
+ * <ItemTitle>Task Item</ItemTitle>
736
+ * </ItemContent>
737
+ * <ItemActions>
738
+ * <Button variant="ghost" size="icon">
739
+ * <Star />
740
+ * </Button>
741
+ * <Button variant="ghost" size="icon">
742
+ * <CheckCircle2 />
743
+ * </Button>
744
+ * <Button variant="ghost" size="icon">
745
+ * <MoreVertical />
746
+ * </Button>
747
+ * </ItemActions>
748
+ * </Item>
749
+ * ```
750
+ *
751
+ * @example
752
+ * ```tsx
753
+ * // Text button with chevron
754
+ * <Item>
755
+ * <ItemContent>
756
+ * <ItemTitle>Settings</ItemTitle>
757
+ * </ItemContent>
758
+ * <ItemActions>
759
+ * <ChevronRight className="size-4 text-muted-foreground" />
760
+ * </ItemActions>
761
+ * </Item>
762
+ * ```
763
+ *
764
+ * @accessibility
765
+ * - Buttons should have proper aria-labels when using icon-only buttons
766
+ * - Maintains keyboard navigation order
767
+ * - Focus visible states on interactive elements
768
+ *
769
+ * @see {@link Item} Parent container
770
+ * @see {@link ItemContent} Content container that pairs with actions
771
+ * @since 1.0.0
772
+ */
773
+ function ItemActions({ className, ...props }: React.ComponentProps<"div">) {
774
+ return (
775
+ <div
776
+ data-slot="item-actions"
777
+ className={cn("flex items-center gap-2", className)}
778
+ {...props}
779
+ />
780
+ )
781
+ }
782
+
783
+ /**
784
+ * Props for ItemHeader component (Documentation only - NOT used in component implementation)
785
+ *
786
+ * Layout container for positioning title and metadata side-by-side at full width
787
+ * within an ItemContent. Typically contains ItemTitle and badges or status indicators.
788
+ */
789
+ type ItemHeaderDocsProps = {
790
+ /** Additional CSS classes to apply */
791
+ className?: string
792
+ /** Title and metadata components */
793
+ children?: React.ReactNode
794
+ } & React.HTMLAttributes<HTMLDivElement>
795
+
796
+ /**
797
+ * ItemHeader - Layout container for title and metadata
798
+ *
799
+ * Creates a horizontal layout spanning the full width of ItemContent, positioning
800
+ * content at the start and end (justify-between). Perfect for pairing ItemTitle with
801
+ * badges, timestamps, or other metadata that should appear on the same line.
802
+ *
803
+ * @example
804
+ * ```tsx
805
+ * <ItemContent>
806
+ * <ItemHeader>
807
+ * <ItemTitle>Meeting Notes</ItemTitle>
808
+ * <Badge variant="secondary">New</Badge>
809
+ * </ItemHeader>
810
+ * <ItemDescription>Notes from team sync</ItemDescription>
811
+ * </ItemContent>
812
+ * ```
813
+ *
814
+ * @example
815
+ * ```tsx
816
+ * // Header with timestamp
817
+ * <ItemContent>
818
+ * <ItemHeader>
819
+ * <ItemTitle>System Update</ItemTitle>
820
+ * <span className="text-xs text-muted-foreground">2h ago</span>
821
+ * </ItemHeader>
822
+ * </ItemContent>
823
+ * ```
824
+ *
825
+ * @example
826
+ * ```tsx
827
+ * // Header with multiple badges
828
+ * <ItemContent>
829
+ * <ItemHeader>
830
+ * <ItemTitle>Premium Feature</ItemTitle>
831
+ * <div className="flex gap-1">
832
+ * <Badge>Pro</Badge>
833
+ * <Badge variant="secondary">Beta</Badge>
834
+ * </div>
835
+ * </ItemHeader>
836
+ * <ItemDescription>Advanced analytics and reporting</ItemDescription>
837
+ * </ItemContent>
838
+ * ```
839
+ *
840
+ * @see {@link ItemContent} Parent container
841
+ * @see {@link ItemTitle} Title component typically used within header
842
+ * @see {@link ItemFooter} Footer layout for bottom metadata
843
+ * @since 1.0.0
844
+ */
845
+ function ItemHeader({ className, ...props }: React.ComponentProps<"div">) {
846
+ return (
847
+ <div
848
+ data-slot="item-header"
849
+ className={cn(
850
+ "flex basis-full items-center justify-between gap-2",
851
+ className
852
+ )}
853
+ {...props}
854
+ />
855
+ )
856
+ }
857
+
858
+ /**
859
+ * Props for ItemFooter component (Documentation only - NOT used in component implementation)
860
+ *
861
+ * Layout container for positioning metadata and secondary information at the bottom
862
+ * of an ItemContent. Spans full width with space-between layout.
863
+ */
864
+ type ItemFooterDocsProps = {
865
+ /** Additional CSS classes to apply */
866
+ className?: string
867
+ /** Metadata, timestamps, or secondary information */
868
+ children?: React.ReactNode
869
+ } & React.HTMLAttributes<HTMLDivElement>
870
+
871
+ /**
872
+ * ItemFooter - Layout container for bottom metadata
873
+ *
874
+ * Creates a horizontal layout at the bottom of ItemContent, spanning full width with
875
+ * space-between distribution. Use for timestamps, file sizes, counts, or other
876
+ * supplementary information that should appear below the main content.
877
+ *
878
+ * @example
879
+ * ```tsx
880
+ * <ItemContent>
881
+ * <ItemTitle>Document.pdf</ItemTitle>
882
+ * <ItemDescription>Project documentation</ItemDescription>
883
+ * <ItemFooter>
884
+ * <span className="text-xs text-muted-foreground">2.4 MB</span>
885
+ * <span className="text-xs text-muted-foreground">Modified today</span>
886
+ * </ItemFooter>
887
+ * </ItemContent>
888
+ * ```
889
+ *
890
+ * @example
891
+ * ```tsx
892
+ * // Footer with single metadata
893
+ * <ItemContent>
894
+ * <ItemTitle>Team Meeting</ItemTitle>
895
+ * <ItemDescription>Discuss Q4 planning</ItemDescription>
896
+ * <ItemFooter>
897
+ * <span className="text-xs text-muted-foreground">
898
+ * Updated 5 minutes ago
899
+ * </span>
900
+ * </ItemFooter>
901
+ * </ItemContent>
902
+ * ```
903
+ *
904
+ * @example
905
+ * ```tsx
906
+ * // Footer with multiple metadata items
907
+ * <ItemContent>
908
+ * <ItemTitle>Project Report</ItemTitle>
909
+ * <ItemDescription>Q4 Financial Analysis</ItemDescription>
910
+ * <ItemFooter>
911
+ * <span className="text-xs text-muted-foreground">5.8 MB</span>
912
+ * <span className="text-xs text-muted-foreground">Shared with 12</span>
913
+ * </ItemFooter>
914
+ * </ItemContent>
915
+ * ```
916
+ *
917
+ * @see {@link ItemContent} Parent container
918
+ * @see {@link ItemHeader} Header layout for top metadata
919
+ * @since 1.0.0
920
+ */
921
+ function ItemFooter({ className, ...props }: React.ComponentProps<"div">) {
922
+ return (
923
+ <div
924
+ data-slot="item-footer"
925
+ className={cn(
926
+ "flex basis-full items-center justify-between gap-2",
927
+ className
928
+ )}
929
+ {...props}
930
+ />
931
+ )
932
+ }
933
+
934
+ export {
935
+ Item,
936
+ ItemMedia,
937
+ ItemContent,
938
+ ItemActions,
939
+ ItemGroup,
940
+ ItemSeparator,
941
+ ItemTitle,
942
+ ItemDescription,
943
+ ItemHeader,
944
+ ItemFooter,
945
+ type ItemDocsProps,
946
+ type ItemMediaDocsProps,
947
+ type ItemContentDocsProps,
948
+ type ItemActionsDocsProps,
949
+ type ItemGroupDocsProps,
950
+ type ItemSeparatorDocsProps,
951
+ type ItemTitleDocsProps,
952
+ type ItemDescriptionDocsProps,
953
+ type ItemHeaderDocsProps,
954
+ type ItemFooterDocsProps,
955
+ }