@primereact/mcp 11.0.0-rc.2

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 (546) hide show
  1. package/LICENSE.md +45 -0
  2. package/README.md +94 -0
  3. package/data/llms/headless/add-ons/introduction.md +16 -0
  4. package/data/llms/headless/components/accordion/api.json +252 -0
  5. package/data/llms/headless/components/accordion.md +196 -0
  6. package/data/llms/headless/components/animateonscroll/api.json +88 -0
  7. package/data/llms/headless/components/animateonscroll.md +141 -0
  8. package/data/llms/headless/components/autocomplete/api.json +787 -0
  9. package/data/llms/headless/components/autocomplete.md +249 -0
  10. package/data/llms/headless/components/avatar/api.json +154 -0
  11. package/data/llms/headless/components/avatar.md +149 -0
  12. package/data/llms/headless/components/badge/api.json +68 -0
  13. package/data/llms/headless/components/badge.md +150 -0
  14. package/data/llms/headless/components/breadcrumb/api.json +142 -0
  15. package/data/llms/headless/components/breadcrumb.md +149 -0
  16. package/data/llms/headless/components/button/api.json +62 -0
  17. package/data/llms/headless/components/button.md +73 -0
  18. package/data/llms/headless/components/card/api.json +36 -0
  19. package/data/llms/headless/components/card.md +96 -0
  20. package/data/llms/headless/components/carousel/api.json +793 -0
  21. package/data/llms/headless/components/carousel.md +196 -0
  22. package/data/llms/headless/components/checkbox/api.json +593 -0
  23. package/data/llms/headless/components/checkbox.md +184 -0
  24. package/data/llms/headless/components/chip/api.json +107 -0
  25. package/data/llms/headless/components/chip.md +141 -0
  26. package/data/llms/headless/components/collapsible/api.json +301 -0
  27. package/data/llms/headless/components/collapsible.md +136 -0
  28. package/data/llms/headless/components/compare/api.json +533 -0
  29. package/data/llms/headless/components/compare.md +142 -0
  30. package/data/llms/headless/components/contextmenu/api.json +495 -0
  31. package/data/llms/headless/components/contextmenu.md +282 -0
  32. package/data/llms/headless/components/datatable/api.json +1680 -0
  33. package/data/llms/headless/components/datatable.md +258 -0
  34. package/data/llms/headless/components/dataview/api.json +199 -0
  35. package/data/llms/headless/components/dataview.md +147 -0
  36. package/data/llms/headless/components/datepicker/api.json +2796 -0
  37. package/data/llms/headless/components/datepicker.md +456 -0
  38. package/data/llms/headless/components/dialog/api.json +626 -0
  39. package/data/llms/headless/components/dialog.md +280 -0
  40. package/data/llms/headless/components/divider/api.json +130 -0
  41. package/data/llms/headless/components/divider.md +92 -0
  42. package/data/llms/headless/components/drawer/api.json +425 -0
  43. package/data/llms/headless/components/drawer.md +220 -0
  44. package/data/llms/headless/components/fieldset/api.json +195 -0
  45. package/data/llms/headless/components/fieldset.md +154 -0
  46. package/data/llms/headless/components/fileupload/api.json +905 -0
  47. package/data/llms/headless/components/fileupload.md +323 -0
  48. package/data/llms/headless/components/floatlabel/api.json +36 -0
  49. package/data/llms/headless/components/floatlabel.md +19 -0
  50. package/data/llms/headless/components/fluid/api.json +36 -0
  51. package/data/llms/headless/components/fluid.md +19 -0
  52. package/data/llms/headless/components/focustrap/api.json +135 -0
  53. package/data/llms/headless/components/focustrap.md +125 -0
  54. package/data/llms/headless/components/gallery/api.json +1349 -0
  55. package/data/llms/headless/components/gallery.md +355 -0
  56. package/data/llms/headless/components/iconfield/api.json +62 -0
  57. package/data/llms/headless/components/iconfield.md +19 -0
  58. package/data/llms/headless/components/iftalabel/api.json +62 -0
  59. package/data/llms/headless/components/iftalabel.md +19 -0
  60. package/data/llms/headless/components/inplace/api.json +340 -0
  61. package/data/llms/headless/components/inplace.md +153 -0
  62. package/data/llms/headless/components/inputcolor/api.json +469 -0
  63. package/data/llms/headless/components/inputcolor.md +253 -0
  64. package/data/llms/headless/components/inputgroup/api.json +62 -0
  65. package/data/llms/headless/components/inputgroup.md +19 -0
  66. package/data/llms/headless/components/inputnumber/api.json +554 -0
  67. package/data/llms/headless/components/inputnumber.md +167 -0
  68. package/data/llms/headless/components/inputotp/api.json +276 -0
  69. package/data/llms/headless/components/inputotp.md +130 -0
  70. package/data/llms/headless/components/inputpassword/api.json +180 -0
  71. package/data/llms/headless/components/inputpassword.md +117 -0
  72. package/data/llms/headless/components/inputtags/api.json +497 -0
  73. package/data/llms/headless/components/inputtags.md +298 -0
  74. package/data/llms/headless/components/inputtext/api.json +81 -0
  75. package/data/llms/headless/components/inputtext.md +109 -0
  76. package/data/llms/headless/components/knob/api.json +429 -0
  77. package/data/llms/headless/components/knob.md +151 -0
  78. package/data/llms/headless/components/label/api.json +62 -0
  79. package/data/llms/headless/components/label.md +19 -0
  80. package/data/llms/headless/components/listbox/api.json +814 -0
  81. package/data/llms/headless/components/listbox.md +194 -0
  82. package/data/llms/headless/components/menu/api.json +1247 -0
  83. package/data/llms/headless/components/menu.md +283 -0
  84. package/data/llms/headless/components/message/api.json +131 -0
  85. package/data/llms/headless/components/message.md +143 -0
  86. package/data/llms/headless/components/metergroup/api.json +266 -0
  87. package/data/llms/headless/components/metergroup.md +129 -0
  88. package/data/llms/headless/components/motion/api.json +237 -0
  89. package/data/llms/headless/components/motion.md +160 -0
  90. package/data/llms/headless/components/navigationmenu/api.json +220 -0
  91. package/data/llms/headless/components/navigationmenu.md +166 -0
  92. package/data/llms/headless/components/orderlist/api.json +196 -0
  93. package/data/llms/headless/components/orderlist.md +221 -0
  94. package/data/llms/headless/components/organizationchart/api.json +372 -0
  95. package/data/llms/headless/components/organizationchart.md +254 -0
  96. package/data/llms/headless/components/paginator/api.json +311 -0
  97. package/data/llms/headless/components/paginator.md +187 -0
  98. package/data/llms/headless/components/panel/api.json +195 -0
  99. package/data/llms/headless/components/panel.md +150 -0
  100. package/data/llms/headless/components/picklist/api.json +293 -0
  101. package/data/llms/headless/components/picklist.md +270 -0
  102. package/data/llms/headless/components/popover/api.json +405 -0
  103. package/data/llms/headless/components/popover.md +301 -0
  104. package/data/llms/headless/components/portal/api.json +56 -0
  105. package/data/llms/headless/components/portal.md +102 -0
  106. package/data/llms/headless/components/positioner/api.json +165 -0
  107. package/data/llms/headless/components/positioner.md +181 -0
  108. package/data/llms/headless/components/progressbar/api.json +87 -0
  109. package/data/llms/headless/components/progressbar.md +122 -0
  110. package/data/llms/headless/components/progressspinner/api.json +337 -0
  111. package/data/llms/headless/components/progressspinner.md +128 -0
  112. package/data/llms/headless/components/radiobutton/api.json +569 -0
  113. package/data/llms/headless/components/radiobutton.md +195 -0
  114. package/data/llms/headless/components/rating/api.json +347 -0
  115. package/data/llms/headless/components/rating.md +181 -0
  116. package/data/llms/headless/components/scrollarea/api.json +730 -0
  117. package/data/llms/headless/components/scrollarea.md +232 -0
  118. package/data/llms/headless/components/select/api.json +829 -0
  119. package/data/llms/headless/components/select.md +262 -0
  120. package/data/llms/headless/components/sidebar/api.json +433 -0
  121. package/data/llms/headless/components/sidebar.md +266 -0
  122. package/data/llms/headless/components/skeleton/api.json +68 -0
  123. package/data/llms/headless/components/skeleton.md +95 -0
  124. package/data/llms/headless/components/slider/api.json +559 -0
  125. package/data/llms/headless/components/slider.md +158 -0
  126. package/data/llms/headless/components/speeddial/api.json +459 -0
  127. package/data/llms/headless/components/speeddial.md +181 -0
  128. package/data/llms/headless/components/splitter/api.json +582 -0
  129. package/data/llms/headless/components/splitter.md +159 -0
  130. package/data/llms/headless/components/stepper/api.json +385 -0
  131. package/data/llms/headless/components/stepper.md +183 -0
  132. package/data/llms/headless/components/styleclass/api.json +134 -0
  133. package/data/llms/headless/components/styleclass.md +129 -0
  134. package/data/llms/headless/components/tabs/api.json +336 -0
  135. package/data/llms/headless/components/tabs.md +158 -0
  136. package/data/llms/headless/components/tag/api.json +62 -0
  137. package/data/llms/headless/components/tag.md +121 -0
  138. package/data/llms/headless/components/terminal/api.json +117 -0
  139. package/data/llms/headless/components/terminal.md +183 -0
  140. package/data/llms/headless/components/textarea/api.json +81 -0
  141. package/data/llms/headless/components/textarea.md +110 -0
  142. package/data/llms/headless/components/timeline/api.json +270 -0
  143. package/data/llms/headless/components/timeline.md +117 -0
  144. package/data/llms/headless/components/toast/api.json +455 -0
  145. package/data/llms/headless/components/toast.md +277 -0
  146. package/data/llms/headless/components/togglebutton/api.json +357 -0
  147. package/data/llms/headless/components/togglebutton.md +183 -0
  148. package/data/llms/headless/components/toggleswitch/api.json +326 -0
  149. package/data/llms/headless/components/toggleswitch.md +164 -0
  150. package/data/llms/headless/components/toolbar/api.json +68 -0
  151. package/data/llms/headless/components/toolbar.md +96 -0
  152. package/data/llms/headless/components/tooltip/api.json +478 -0
  153. package/data/llms/headless/components/tooltip.md +233 -0
  154. package/data/llms/headless/components/tree/api.json +1297 -0
  155. package/data/llms/headless/components/tree.md +297 -0
  156. package/data/llms/headless/components/treetable/api.json +1680 -0
  157. package/data/llms/headless/components/treetable.md +177 -0
  158. package/data/llms/headless/guides/ai/llms.md +25 -0
  159. package/data/llms/headless/guides/installation.md +126 -0
  160. package/data/llms/headless/guides/introduction.md +20 -0
  161. package/data/llms/headless/guides/misc/accessibility.md +228 -0
  162. package/data/llms/headless/llms.md +25 -0
  163. package/data/llms/headless/resources/introduction.md +15 -0
  164. package/data/llms/hooks/gettingstarted/introduction.md +34 -0
  165. package/data/llms/hooks/gettingstarted/setup.md +54 -0
  166. package/data/llms/hooks/use-attr-selector.md +25 -0
  167. package/data/llms/hooks/use-controlled-state.md +31 -0
  168. package/data/llms/hooks/use-event-listener.md +37 -0
  169. package/data/llms/hooks/use-filter.md +312 -0
  170. package/data/llms/hooks/use-hot-key.md +40 -0
  171. package/data/llms/hooks/use-id.md +24 -0
  172. package/data/llms/hooks/use-intersection-observer.md +42 -0
  173. package/data/llms/hooks/use-is-mobile.md +24 -0
  174. package/data/llms/hooks/use-key-filter.md +139 -0
  175. package/data/llms/hooks/use-local-storage.md +28 -0
  176. package/data/llms/hooks/use-mask.md +53 -0
  177. package/data/llms/hooks/use-match-media.md +28 -0
  178. package/data/llms/hooks/use-mount-effect.md +25 -0
  179. package/data/llms/hooks/use-mounted.md +36 -0
  180. package/data/llms/hooks/use-number-formatter.md +48 -0
  181. package/data/llms/hooks/use-presence.md +44 -0
  182. package/data/llms/hooks/use-previous.md +28 -0
  183. package/data/llms/hooks/use-props.md +37 -0
  184. package/data/llms/hooks/use-queue-task.md +29 -0
  185. package/data/llms/hooks/use-scrolltop.md +87 -0
  186. package/data/llms/hooks/use-sortable-list.md +226 -0
  187. package/data/llms/hooks/use-tree-filter.md +216 -0
  188. package/data/llms/hooks/use-unmount-effect.md +23 -0
  189. package/data/llms/hooks/use-update-effect.md +27 -0
  190. package/data/llms/hooks/use-view-transition.md +31 -0
  191. package/data/llms/hooks/use-visibility-change.md +30 -0
  192. package/data/llms/llms-full.txt +125291 -0
  193. package/data/llms/llms.txt +379 -0
  194. package/data/llms/manifest.json +12409 -0
  195. package/data/llms/mcp-data.json +14481 -0
  196. package/data/llms/primitive/add-ons/introduction.md +16 -0
  197. package/data/llms/primitive/components/accordion/api.json +1411 -0
  198. package/data/llms/primitive/components/accordion.md +231 -0
  199. package/data/llms/primitive/components/animateonscroll/api.json +193 -0
  200. package/data/llms/primitive/components/animateonscroll.md +91 -0
  201. package/data/llms/primitive/components/autocomplete/api.json +3167 -0
  202. package/data/llms/primitive/components/autocomplete.md +344 -0
  203. package/data/llms/primitive/components/avatar/api.json +703 -0
  204. package/data/llms/primitive/components/avatar.md +134 -0
  205. package/data/llms/primitive/components/badge/api.json +363 -0
  206. package/data/llms/primitive/components/badge.md +118 -0
  207. package/data/llms/primitive/components/breadcrumb/api.json +1162 -0
  208. package/data/llms/primitive/components/breadcrumb.md +196 -0
  209. package/data/llms/primitive/components/button/api.json +246 -0
  210. package/data/llms/primitive/components/button.md +114 -0
  211. package/data/llms/primitive/components/buttongroup/api.json +168 -0
  212. package/data/llms/primitive/components/buttongroup.md +43 -0
  213. package/data/llms/primitive/components/card/api.json +1252 -0
  214. package/data/llms/primitive/components/card.md +159 -0
  215. package/data/llms/primitive/components/carousel/api.json +1374 -0
  216. package/data/llms/primitive/components/carousel.md +220 -0
  217. package/data/llms/primitive/components/checkbox/api.json +697 -0
  218. package/data/llms/primitive/components/checkbox.md +160 -0
  219. package/data/llms/primitive/components/checkboxgroup/api.json +252 -0
  220. package/data/llms/primitive/components/checkboxgroup.md +58 -0
  221. package/data/llms/primitive/components/chip/api.json +853 -0
  222. package/data/llms/primitive/components/chip.md +135 -0
  223. package/data/llms/primitive/components/collapsible/api.json +581 -0
  224. package/data/llms/primitive/components/collapsible.md +133 -0
  225. package/data/llms/primitive/components/compare/api.json +909 -0
  226. package/data/llms/primitive/components/compare.md +156 -0
  227. package/data/llms/primitive/components/contextmenu/api.json +3454 -0
  228. package/data/llms/primitive/components/contextmenu.md +483 -0
  229. package/data/llms/primitive/components/datatable/api.json +7832 -0
  230. package/data/llms/primitive/components/datatable.md +561 -0
  231. package/data/llms/primitive/components/dataview/api.json +819 -0
  232. package/data/llms/primitive/components/dataview.md +163 -0
  233. package/data/llms/primitive/components/datepicker/api.json +9055 -0
  234. package/data/llms/primitive/components/datepicker.md +760 -0
  235. package/data/llms/primitive/components/dialog/api.json +2491 -0
  236. package/data/llms/primitive/components/dialog.md +276 -0
  237. package/data/llms/primitive/components/divider/api.json +214 -0
  238. package/data/llms/primitive/components/divider.md +96 -0
  239. package/data/llms/primitive/components/drawer/api.json +1879 -0
  240. package/data/llms/primitive/components/drawer.md +220 -0
  241. package/data/llms/primitive/components/fieldset/api.json +1116 -0
  242. package/data/llms/primitive/components/fieldset.md +183 -0
  243. package/data/llms/primitive/components/fileupload/api.json +2445 -0
  244. package/data/llms/primitive/components/fileupload.md +282 -0
  245. package/data/llms/primitive/components/floatlabel/api.json +176 -0
  246. package/data/llms/primitive/components/floatlabel.md +47 -0
  247. package/data/llms/primitive/components/focustrap/api.json +241 -0
  248. package/data/llms/primitive/components/focustrap.md +93 -0
  249. package/data/llms/primitive/components/gallery/api.json +3622 -0
  250. package/data/llms/primitive/components/gallery.md +387 -0
  251. package/data/llms/primitive/components/iconfield/api.json +322 -0
  252. package/data/llms/primitive/components/iconfield.md +53 -0
  253. package/data/llms/primitive/components/iftalabel/api.json +177 -0
  254. package/data/llms/primitive/components/iftalabel.md +47 -0
  255. package/data/llms/primitive/components/inplace/api.json +783 -0
  256. package/data/llms/primitive/components/inplace.md +141 -0
  257. package/data/llms/primitive/components/inputcolor/api.json +2211 -0
  258. package/data/llms/primitive/components/inputcolor.md +295 -0
  259. package/data/llms/primitive/components/inputnumber/api.json +469 -0
  260. package/data/llms/primitive/components/inputnumber.md +99 -0
  261. package/data/llms/primitive/components/inputotp/api.json +469 -0
  262. package/data/llms/primitive/components/inputotp.md +121 -0
  263. package/data/llms/primitive/components/inputpassword/api.json +278 -0
  264. package/data/llms/primitive/components/inputpassword.md +84 -0
  265. package/data/llms/primitive/components/inputtags/api.json +407 -0
  266. package/data/llms/primitive/components/inputtags.md +243 -0
  267. package/data/llms/primitive/components/inputtext/api.json +207 -0
  268. package/data/llms/primitive/components/inputtext.md +81 -0
  269. package/data/llms/primitive/components/knob/api.json +841 -0
  270. package/data/llms/primitive/components/knob.md +148 -0
  271. package/data/llms/primitive/components/label/api.json +177 -0
  272. package/data/llms/primitive/components/label.md +44 -0
  273. package/data/llms/primitive/components/listbox/api.json +1741 -0
  274. package/data/llms/primitive/components/listbox.md +206 -0
  275. package/data/llms/primitive/components/menu/api.json +3836 -0
  276. package/data/llms/primitive/components/menu.md +479 -0
  277. package/data/llms/primitive/components/message/api.json +863 -0
  278. package/data/llms/primitive/components/message.md +151 -0
  279. package/data/llms/primitive/components/metergroup/api.json +1222 -0
  280. package/data/llms/primitive/components/metergroup.md +209 -0
  281. package/data/llms/primitive/components/motion.md +112 -0
  282. package/data/llms/primitive/components/navigationmenu/api.json +298 -0
  283. package/data/llms/primitive/components/navigationmenu.md +184 -0
  284. package/data/llms/primitive/components/organizationchart.md +133 -0
  285. package/data/llms/primitive/components/paginator/api.json +1637 -0
  286. package/data/llms/primitive/components/paginator.md +223 -0
  287. package/data/llms/primitive/components/panel/api.json +1270 -0
  288. package/data/llms/primitive/components/panel.md +186 -0
  289. package/data/llms/primitive/components/popover/api.json +2281 -0
  290. package/data/llms/primitive/components/popover.md +277 -0
  291. package/data/llms/primitive/components/portal/api.json +176 -0
  292. package/data/llms/primitive/components/portal.md +79 -0
  293. package/data/llms/primitive/components/progressbar/api.json +857 -0
  294. package/data/llms/primitive/components/progressbar.md +153 -0
  295. package/data/llms/primitive/components/progressspinner/api.json +725 -0
  296. package/data/llms/primitive/components/progressspinner.md +133 -0
  297. package/data/llms/primitive/components/radiobutton/api.json +929 -0
  298. package/data/llms/primitive/components/radiobutton.md +201 -0
  299. package/data/llms/primitive/components/rating/api.json +878 -0
  300. package/data/llms/primitive/components/rating.md +160 -0
  301. package/data/llms/primitive/components/scrollarea/api.json +1187 -0
  302. package/data/llms/primitive/components/scrollarea.md +255 -0
  303. package/data/llms/primitive/components/select/api.json +3167 -0
  304. package/data/llms/primitive/components/select.md +351 -0
  305. package/data/llms/primitive/components/sidebar/api.json +3699 -0
  306. package/data/llms/primitive/components/sidebar.md +444 -0
  307. package/data/llms/primitive/components/skeleton/api.json +213 -0
  308. package/data/llms/primitive/components/skeleton.md +80 -0
  309. package/data/llms/primitive/components/slider/api.json +1066 -0
  310. package/data/llms/primitive/components/slider.md +161 -0
  311. package/data/llms/primitive/components/speeddial/api.json +1002 -0
  312. package/data/llms/primitive/components/speeddial.md +197 -0
  313. package/data/llms/primitive/components/splitter/api.json +901 -0
  314. package/data/llms/primitive/components/splitter.md +137 -0
  315. package/data/llms/primitive/components/stepper/api.json +2102 -0
  316. package/data/llms/primitive/components/stepper.md +253 -0
  317. package/data/llms/primitive/components/styleclass.md +399 -0
  318. package/data/llms/primitive/components/tabs/api.json +1705 -0
  319. package/data/llms/primitive/components/tabs.md +200 -0
  320. package/data/llms/primitive/components/tag/api.json +189 -0
  321. package/data/llms/primitive/components/tag.md +100 -0
  322. package/data/llms/primitive/components/terminal/api.json +1709 -0
  323. package/data/llms/primitive/components/terminal.md +227 -0
  324. package/data/llms/primitive/components/textarea/api.json +213 -0
  325. package/data/llms/primitive/components/textarea.md +83 -0
  326. package/data/llms/primitive/components/timeline/api.json +1180 -0
  327. package/data/llms/primitive/components/timeline.md +185 -0
  328. package/data/llms/primitive/components/toast/api.json +2102 -0
  329. package/data/llms/primitive/components/toast.md +291 -0
  330. package/data/llms/primitive/components/togglebutton/api.json +433 -0
  331. package/data/llms/primitive/components/togglebutton.md +161 -0
  332. package/data/llms/primitive/components/togglebuttongroup/api.json +276 -0
  333. package/data/llms/primitive/components/togglebuttongroup.md +61 -0
  334. package/data/llms/primitive/components/toggleswitch/api.json +681 -0
  335. package/data/llms/primitive/components/toggleswitch.md +149 -0
  336. package/data/llms/primitive/components/toolbar/api.json +646 -0
  337. package/data/llms/primitive/components/toolbar.md +126 -0
  338. package/data/llms/primitive/components/tooltip/api.json +1534 -0
  339. package/data/llms/primitive/components/tooltip.md +202 -0
  340. package/data/llms/primitive/components/tree/api.json +2952 -0
  341. package/data/llms/primitive/components/tree.md +292 -0
  342. package/data/llms/primitive/components/treetable.md +187 -0
  343. package/data/llms/primitive/components/visuallyhidden/api.json +186 -0
  344. package/data/llms/primitive/components/visuallyhidden.md +87 -0
  345. package/data/llms/primitive/guides/ai/llms.md +25 -0
  346. package/data/llms/primitive/guides/icons/customicons.md +47 -0
  347. package/data/llms/primitive/guides/icons/primeicons.md +112 -0
  348. package/data/llms/primitive/guides/installation.md +115 -0
  349. package/data/llms/primitive/guides/introduction.md +20 -0
  350. package/data/llms/primitive/guides/misc/accessibility.md +215 -0
  351. package/data/llms/primitive/guides/misc/passthrough.md +95 -0
  352. package/data/llms/primitive/guides/misc/rtl.md +27 -0
  353. package/data/llms/primitive/llms.md +25 -0
  354. package/data/llms/primitive/resources/introduction.md +15 -0
  355. package/data/llms/styled/add-ons/introduction.md +16 -0
  356. package/data/llms/styled/components/accordion.md +735 -0
  357. package/data/llms/styled/components/animateonscroll.md +264 -0
  358. package/data/llms/styled/components/autocomplete.md +1597 -0
  359. package/data/llms/styled/components/avatar.md +313 -0
  360. package/data/llms/styled/components/badge.md +213 -0
  361. package/data/llms/styled/components/breadcrumb.md +461 -0
  362. package/data/llms/styled/components/button/api.json +246 -0
  363. package/data/llms/styled/components/button.md +641 -0
  364. package/data/llms/styled/components/buttongroup.md +614 -0
  365. package/data/llms/styled/components/card.md +228 -0
  366. package/data/llms/styled/components/carousel.md +388 -0
  367. package/data/llms/styled/components/checkbox.md +329 -0
  368. package/data/llms/styled/components/checkboxgroup.md +619 -0
  369. package/data/llms/styled/components/chip.md +300 -0
  370. package/data/llms/styled/components/compare.md +271 -0
  371. package/data/llms/styled/components/contextmenu.md +550 -0
  372. package/data/llms/styled/components/datatable.md +8259 -0
  373. package/data/llms/styled/components/dataview.md +907 -0
  374. package/data/llms/styled/components/datepicker.md +2807 -0
  375. package/data/llms/styled/components/dialog.md +1047 -0
  376. package/data/llms/styled/components/divider.md +207 -0
  377. package/data/llms/styled/components/drawer.md +470 -0
  378. package/data/llms/styled/components/fieldset.md +334 -0
  379. package/data/llms/styled/components/fileupload.md +747 -0
  380. package/data/llms/styled/components/floatlabel/api.json +210 -0
  381. package/data/llms/styled/components/floatlabel.md +231 -0
  382. package/data/llms/styled/components/fluid/api.json +204 -0
  383. package/data/llms/styled/components/fluid.md +177 -0
  384. package/data/llms/styled/components/focustrap.md +203 -0
  385. package/data/llms/styled/components/gallery.md +553 -0
  386. package/data/llms/styled/components/iconfield/api.json +382 -0
  387. package/data/llms/styled/components/iconfield.md +385 -0
  388. package/data/llms/styled/components/iftalabel/api.json +237 -0
  389. package/data/llms/styled/components/iftalabel.md +158 -0
  390. package/data/llms/styled/components/inplace.md +312 -0
  391. package/data/llms/styled/components/inputcolor.md +674 -0
  392. package/data/llms/styled/components/inputgroup/api.json +399 -0
  393. package/data/llms/styled/components/inputgroup.md +604 -0
  394. package/data/llms/styled/components/inputmask.md +282 -0
  395. package/data/llms/styled/components/inputnumber.md +563 -0
  396. package/data/llms/styled/components/inputotp.md +335 -0
  397. package/data/llms/styled/components/inputpassword.md +630 -0
  398. package/data/llms/styled/components/inputtags.md +727 -0
  399. package/data/llms/styled/components/inputtext.md +190 -0
  400. package/data/llms/styled/components/keyfilter.md +289 -0
  401. package/data/llms/styled/components/knob.md +305 -0
  402. package/data/llms/styled/components/label/api.json +237 -0
  403. package/data/llms/styled/components/label.md +224 -0
  404. package/data/llms/styled/components/listbox.md +807 -0
  405. package/data/llms/styled/components/menu.md +1175 -0
  406. package/data/llms/styled/components/message.md +570 -0
  407. package/data/llms/styled/components/metergroup.md +449 -0
  408. package/data/llms/styled/components/navigationmenu.md +926 -0
  409. package/data/llms/styled/components/orderlist.md +519 -0
  410. package/data/llms/styled/components/organizationchart/api.json +1457 -0
  411. package/data/llms/styled/components/organizationchart.md +791 -0
  412. package/data/llms/styled/components/overlaymanager.md +519 -0
  413. package/data/llms/styled/components/paginator.md +506 -0
  414. package/data/llms/styled/components/panel.md +394 -0
  415. package/data/llms/styled/components/picklist.md +1004 -0
  416. package/data/llms/styled/components/popover.md +372 -0
  417. package/data/llms/styled/components/progressbar.md +438 -0
  418. package/data/llms/styled/components/progressspinner.md +128 -0
  419. package/data/llms/styled/components/radiobutton.md +488 -0
  420. package/data/llms/styled/components/rating/api.json +766 -0
  421. package/data/llms/styled/components/rating.md +518 -0
  422. package/data/llms/styled/components/scrollarea.md +627 -0
  423. package/data/llms/styled/components/select.md +2122 -0
  424. package/data/llms/styled/components/sidebar.md +1587 -0
  425. package/data/llms/styled/components/skeleton.md +226 -0
  426. package/data/llms/styled/components/slider.md +453 -0
  427. package/data/llms/styled/components/speeddial.md +723 -0
  428. package/data/llms/styled/components/splitter.md +536 -0
  429. package/data/llms/styled/components/stepper.md +614 -0
  430. package/data/llms/styled/components/tabs.md +543 -0
  431. package/data/llms/styled/components/tag.md +263 -0
  432. package/data/llms/styled/components/terminal.md +543 -0
  433. package/data/llms/styled/components/textarea.md +257 -0
  434. package/data/llms/styled/components/timeline.md +620 -0
  435. package/data/llms/styled/components/toast.md +1013 -0
  436. package/data/llms/styled/components/togglebutton.md +287 -0
  437. package/data/llms/styled/components/togglebuttongroup.md +328 -0
  438. package/data/llms/styled/components/toggleswitch.md +262 -0
  439. package/data/llms/styled/components/toolbar.md +187 -0
  440. package/data/llms/styled/components/tooltip.md +430 -0
  441. package/data/llms/styled/components/tree.md +1386 -0
  442. package/data/llms/styled/components/treetable.md +6842 -0
  443. package/data/llms/styled/guides/ai/llms.md +25 -0
  444. package/data/llms/styled/guides/configuration.md +151 -0
  445. package/data/llms/styled/guides/icons/customicons.md +47 -0
  446. package/data/llms/styled/guides/icons/primeicons.md +112 -0
  447. package/data/llms/styled/guides/installation/astro.md +97 -0
  448. package/data/llms/styled/guides/installation/manual.md +3 -0
  449. package/data/llms/styled/guides/installation/nextjs.md +129 -0
  450. package/data/llms/styled/guides/installation/react-router.md +88 -0
  451. package/data/llms/styled/guides/installation/tanstack.md +92 -0
  452. package/data/llms/styled/guides/installation/vite.md +91 -0
  453. package/data/llms/styled/guides/installation.md +42 -0
  454. package/data/llms/styled/guides/introduction.md +20 -0
  455. package/data/llms/styled/guides/misc/accessibility.md +211 -0
  456. package/data/llms/styled/guides/misc/animations.md +389 -0
  457. package/data/llms/styled/guides/misc/passthrough.md +95 -0
  458. package/data/llms/styled/guides/misc/rtl.md +27 -0
  459. package/data/llms/styled/guides/theming/styled.md +779 -0
  460. package/data/llms/styled/guides/theming/tailwind.md +473 -0
  461. package/data/llms/styled/guides/theming/unstyled.md +115 -0
  462. package/data/llms/styled/resources/introduction.md +15 -0
  463. package/data/llms/tailwind/add-ons/introduction.md +16 -0
  464. package/data/llms/tailwind/components/accordion.md +383 -0
  465. package/data/llms/tailwind/components/autocomplete.md +1346 -0
  466. package/data/llms/tailwind/components/avatar.md +305 -0
  467. package/data/llms/tailwind/components/badge.md +207 -0
  468. package/data/llms/tailwind/components/breadcrumb.md +387 -0
  469. package/data/llms/tailwind/components/button/api.json +246 -0
  470. package/data/llms/tailwind/components/button.md +617 -0
  471. package/data/llms/tailwind/components/buttongroup.md +599 -0
  472. package/data/llms/tailwind/components/card.md +224 -0
  473. package/data/llms/tailwind/components/carousel.md +329 -0
  474. package/data/llms/tailwind/components/checkbox.md +179 -0
  475. package/data/llms/tailwind/components/checkboxgroup.md +279 -0
  476. package/data/llms/tailwind/components/chip.md +304 -0
  477. package/data/llms/tailwind/components/compare.md +295 -0
  478. package/data/llms/tailwind/components/contextmenu.md +415 -0
  479. package/data/llms/tailwind/components/datatable.md +4062 -0
  480. package/data/llms/tailwind/components/dataview.md +864 -0
  481. package/data/llms/tailwind/components/datepicker.md +823 -0
  482. package/data/llms/tailwind/components/dialog.md +1216 -0
  483. package/data/llms/tailwind/components/divider.md +205 -0
  484. package/data/llms/tailwind/components/drawer.md +500 -0
  485. package/data/llms/tailwind/components/fieldset.md +326 -0
  486. package/data/llms/tailwind/components/fluid.md +117 -0
  487. package/data/llms/tailwind/components/iconfield.md +197 -0
  488. package/data/llms/tailwind/components/inplace.md +324 -0
  489. package/data/llms/tailwind/components/inputcolor.md +493 -0
  490. package/data/llms/tailwind/components/inputgroup.md +375 -0
  491. package/data/llms/tailwind/components/inputnumber.md +463 -0
  492. package/data/llms/tailwind/components/inputotp.md +255 -0
  493. package/data/llms/tailwind/components/inputpassword.md +543 -0
  494. package/data/llms/tailwind/components/inputtext.md +141 -0
  495. package/data/llms/tailwind/components/label.md +100 -0
  496. package/data/llms/tailwind/components/listbox.md +886 -0
  497. package/data/llms/tailwind/components/menu.md +1049 -0
  498. package/data/llms/tailwind/components/message.md +575 -0
  499. package/data/llms/tailwind/components/metergroup.md +510 -0
  500. package/data/llms/tailwind/components/navigationmenu.md +528 -0
  501. package/data/llms/tailwind/components/overlaymanager.md +567 -0
  502. package/data/llms/tailwind/components/paginator.md +306 -0
  503. package/data/llms/tailwind/components/panel.md +395 -0
  504. package/data/llms/tailwind/components/popover.md +424 -0
  505. package/data/llms/tailwind/components/progressbar.md +313 -0
  506. package/data/llms/tailwind/components/radiobutton.md +366 -0
  507. package/data/llms/tailwind/components/rating.md +300 -0
  508. package/data/llms/tailwind/components/scrollarea.md +638 -0
  509. package/data/llms/tailwind/components/select.md +1220 -0
  510. package/data/llms/tailwind/components/sidebar.md +1511 -0
  511. package/data/llms/tailwind/components/skeleton.md +236 -0
  512. package/data/llms/tailwind/components/slider.md +291 -0
  513. package/data/llms/tailwind/components/splitter.md +546 -0
  514. package/data/llms/tailwind/components/tabs.md +462 -0
  515. package/data/llms/tailwind/components/tag.md +255 -0
  516. package/data/llms/tailwind/components/textarea.md +170 -0
  517. package/data/llms/tailwind/components/timeline.md +656 -0
  518. package/data/llms/tailwind/components/toast.md +246 -0
  519. package/data/llms/tailwind/components/togglebutton.md +264 -0
  520. package/data/llms/tailwind/components/togglebuttongroup.md +262 -0
  521. package/data/llms/tailwind/components/toggleswitch.md +203 -0
  522. package/data/llms/tailwind/components/toolbar.md +192 -0
  523. package/data/llms/tailwind/components/tooltip.md +449 -0
  524. package/data/llms/tailwind/guides/ai/llms.md +25 -0
  525. package/data/llms/tailwind/guides/icons/customicons.md +47 -0
  526. package/data/llms/tailwind/guides/icons/primeicons.md +112 -0
  527. package/data/llms/tailwind/guides/installation/astro.md +165 -0
  528. package/data/llms/tailwind/guides/installation/manual.md +3 -0
  529. package/data/llms/tailwind/guides/installation/nextjs.md +169 -0
  530. package/data/llms/tailwind/guides/installation/react-router.md +157 -0
  531. package/data/llms/tailwind/guides/installation/tanstack.md +161 -0
  532. package/data/llms/tailwind/guides/installation/vite.md +160 -0
  533. package/data/llms/tailwind/guides/installation.md +42 -0
  534. package/data/llms/tailwind/guides/introduction.md +20 -0
  535. package/data/llms/tailwind/guides/misc/accessibility.md +205 -0
  536. package/data/llms/tailwind/guides/misc/passthrough.md +95 -0
  537. package/data/llms/tailwind/guides/misc/rtl.md +27 -0
  538. package/data/llms/tailwind/guides/theming/guide.md +179 -0
  539. package/data/llms/tailwind/guides/theming.md +191 -0
  540. package/data/llms/tailwind/llms.md +25 -0
  541. package/data/llms/tailwind/resources/introduction.md +15 -0
  542. package/data/manifest.json +12409 -0
  543. package/data/mcp-data.json +14481 -0
  544. package/dist/index.d.ts +9 -0
  545. package/dist/index.js +2 -0
  546. package/package.json +61 -0
@@ -0,0 +1,1511 @@
1
+ # Sidebar
2
+
3
+ Sidebar is a layout component for building application navigation with collapsible panels, multi-variant styling, and composable menu structures.
4
+
5
+ ```tsx
6
+ 'use client';
7
+ import { Avatar, AvatarFallback } from '@/components/ui/avatar';
8
+ import { Button } from '@/components/ui/button';
9
+ import {
10
+ Sidebar,
11
+ SidebarAside,
12
+ SidebarContent,
13
+ SidebarFooter,
14
+ SidebarGroup,
15
+ SidebarGroupAction,
16
+ SidebarGroupContent,
17
+ SidebarGroupLabel,
18
+ SidebarHeader,
19
+ SidebarLayout,
20
+ SidebarMain,
21
+ SidebarMenu,
22
+ SidebarMenuAction,
23
+ SidebarMenuBadge,
24
+ SidebarMenuButton,
25
+ SidebarMenuItem,
26
+ SidebarMenuSub,
27
+ SidebarMenuSubButton,
28
+ SidebarMenuSubItem,
29
+ SidebarPanel,
30
+ SidebarRail,
31
+ SidebarSpacer,
32
+ SidebarTrigger
33
+ } from '@/components/ui/sidebar';
34
+ import {
35
+ Bell,
36
+ Calendar,
37
+ ChartBar,
38
+ ChevronDown,
39
+ CreditCard,
40
+ EllipsisV,
41
+ Folder,
42
+ Home,
43
+ Inbox,
44
+ Plus,
45
+ Search,
46
+ ShoppingCart,
47
+ Sidebar as SidebarIcon,
48
+ Star,
49
+ Users
50
+ } from '@primeicons/react';
51
+ import * as React from 'react';
52
+
53
+ type NavItem = {
54
+ icon: React.FC<any>;
55
+ label: string;
56
+ isActive?: boolean;
57
+ badge?: string;
58
+ subItems?: { label: string; isActive?: boolean }[];
59
+ };
60
+
61
+ const navGroups: { label: string; action?: boolean; items: NavItem[] }[] = [
62
+ {
63
+ label: 'Navigation',
64
+ items: [
65
+ { icon: Home, label: 'Home', isActive: true },
66
+ { icon: Inbox, label: 'Inbox', badge: '12' },
67
+ { icon: Search, label: 'Search' },
68
+ { icon: Bell, label: 'Notifications', badge: '3' }
69
+ ]
70
+ },
71
+ {
72
+ label: 'Projects',
73
+ action: true,
74
+ items: [
75
+ {
76
+ icon: ChartBar,
77
+ label: 'Analytics',
78
+ subItems: [{ label: 'Overview', isActive: true }, { label: 'Reports' }, { label: 'Real-time' }]
79
+ },
80
+ { icon: Users, label: 'Team' },
81
+ { icon: Calendar, label: 'Calendar' },
82
+ {
83
+ icon: Folder,
84
+ label: 'Documents',
85
+ subItems: [{ label: 'Shared' }, { label: 'Private' }, { label: 'Archived' }]
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ label: 'Billing',
91
+ items: [
92
+ { icon: CreditCard, label: 'Payments' },
93
+ { icon: ShoppingCart, label: 'Orders' },
94
+ { icon: Star, label: 'Subscriptions' }
95
+ ]
96
+ }
97
+ ];
98
+
99
+ export default function Preview() {
100
+ return (
101
+ <div className="border border-surface-200 dark:border-surface-700 rounded-lg overflow-hidden">
102
+ <SidebarLayout className="min-h-192 relative!">
103
+ <Sidebar id="preview" collapsible="icon">
104
+ <SidebarSpacer />
105
+ <SidebarAside>
106
+ <SidebarPanel>
107
+ <SidebarHeader>
108
+ <SidebarMenu>
109
+ <SidebarMenuItem>
110
+ <SidebarMenuButton className="p-1!">
111
+ <div className="flex size-6 shrink-0 items-center justify-center rounded-md bg-linear-to-br from-violet-500 to-indigo-600 text-white text-xs font-bold leading-none">
112
+ A
113
+ </div>
114
+ <span className="font-semibold text-sm">Acme Inc</span>
115
+ </SidebarMenuButton>
116
+ </SidebarMenuItem>
117
+ </SidebarMenu>
118
+ </SidebarHeader>
119
+
120
+ <SidebarContent>
121
+ {navGroups.map((group) => (
122
+ <SidebarGroup key={group.label}>
123
+ <SidebarGroupLabel>{group.label}</SidebarGroupLabel>
124
+ {group.action && (
125
+ <SidebarGroupAction>
126
+ <Plus />
127
+ </SidebarGroupAction>
128
+ )}
129
+ <SidebarGroupContent>
130
+ <SidebarMenu>
131
+ {group.items.map((item) => (
132
+ <SidebarMenuItem
133
+ key={item.label}
134
+ collapsible={!!item.subItems}
135
+ defaultOpen={item.subItems?.some((s) => s.isActive)}
136
+ >
137
+ <SidebarMenuButton isActive={item.isActive}>
138
+ <item.icon />
139
+ <span>{item.label}</span>
140
+ {item.subItems && <ChevronDown className="ml-auto" />}
141
+ </SidebarMenuButton>
142
+ {item.subItems ? (
143
+ <SidebarMenuSub>
144
+ {item.subItems.map((sub) => (
145
+ <SidebarMenuSubItem key={sub.label}>
146
+ <SidebarMenuSubButton isActive={sub.isActive}>
147
+ <span>{sub.label}</span>
148
+ </SidebarMenuSubButton>
149
+ </SidebarMenuSubItem>
150
+ ))}
151
+ </SidebarMenuSub>
152
+ ) : item.badge ? (
153
+ <SidebarMenuBadge>{item.badge}</SidebarMenuBadge>
154
+ ) : (
155
+ <SidebarMenuAction showOnHover>
156
+ <EllipsisV />
157
+ </SidebarMenuAction>
158
+ )}
159
+ </SidebarMenuItem>
160
+ ))}
161
+ </SidebarMenu>
162
+ </SidebarGroupContent>
163
+ </SidebarGroup>
164
+ ))}
165
+ </SidebarContent>
166
+
167
+ <SidebarFooter>
168
+ <SidebarMenu>
169
+ <SidebarMenuItem>
170
+ <SidebarMenuButton className="p-1!">
171
+ <Avatar className="size-6 shrink-0 text-xs" shape="circle">
172
+ <AvatarFallback>JD</AvatarFallback>
173
+ </Avatar>
174
+ <span>John Doe</span>
175
+ </SidebarMenuButton>
176
+ </SidebarMenuItem>
177
+ </SidebarMenu>
178
+ </SidebarFooter>
179
+ <SidebarRail />
180
+ </SidebarPanel>
181
+ </SidebarAside>
182
+ </Sidebar>
183
+
184
+ <SidebarMain>
185
+ <header className="flex h-12 items-center gap-2 border-b border-surface-200 dark:border-surface-700 px-4">
186
+ <SidebarTrigger as={Button} severity="secondary" variant="text" size="small" iconOnly>
187
+ <SidebarIcon />
188
+ </SidebarTrigger>
189
+ </header>
190
+ <div className="flex-1 p-4 flex flex-col gap-4">
191
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 h-48"></div>
192
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 flex-1"></div>
193
+ </div>
194
+ </SidebarMain>
195
+ </SidebarLayout>
196
+ </div>
197
+ );
198
+ }
199
+ ```
200
+
201
+ ## Installation
202
+
203
+ <DocTabs value="CLI">
204
+ <DocTabsList>
205
+ <DocTabsTab value="CLI">Shadcn CLI</DocTabsTab>
206
+ <DocTabsTab value="Manual">Manual</DocTabsTab>
207
+ </DocTabsList>
208
+ <DocTabsPanel value="CLI">
209
+ ```bash
210
+ npx shadcn@latest add https://primereact.dev/r/sidebar.json
211
+ ```
212
+ </DocTabsPanel>
213
+ <DocTabsPanel value="Manual">
214
+ Copy and paste the following code into your project
215
+ <DocSourceViewer name="components/ui/sidebar" />
216
+ Update the import paths to match your project setup.
217
+ </DocTabsPanel>
218
+ </DocTabs>
219
+
220
+ ## Usage
221
+
222
+ ```tsx
223
+ import {
224
+ Sidebar,
225
+ SidebarPanel,
226
+ SidebarContent,
227
+ SidebarFooter,
228
+ SidebarGroup,
229
+ SidebarGroupContent,
230
+ SidebarGroupLabel,
231
+ SidebarHeader,
232
+ SidebarMain,
233
+ SidebarLayout,
234
+ SidebarMenu,
235
+ SidebarMenuButton,
236
+ SidebarMenuItem,
237
+ SidebarAside,
238
+ SidebarSpacer,
239
+ SidebarTrigger
240
+ } from '@/components/ui/sidebar';
241
+ ```
242
+
243
+ ```tsx
244
+ <SidebarLayout>
245
+ <Sidebar id="main" collapsible="icon">
246
+ <SidebarSpacer />
247
+ <SidebarAside>
248
+ <SidebarPanel>
249
+ <SidebarHeader>...</SidebarHeader>
250
+ <SidebarContent>
251
+ <SidebarGroup>
252
+ <SidebarGroupLabel>Navigation</SidebarGroupLabel>
253
+ <SidebarGroupContent>
254
+ <SidebarMenu>
255
+ <SidebarMenuItem>
256
+ <SidebarMenuButton isActive>
257
+ <HomeIcon />
258
+ <span>Home</span>
259
+ </SidebarMenuButton>
260
+ </SidebarMenuItem>
261
+ </SidebarMenu>
262
+ </SidebarGroupContent>
263
+ </SidebarGroup>
264
+ </SidebarContent>
265
+ <SidebarFooter>...</SidebarFooter>
266
+ </SidebarPanel>
267
+ </SidebarAside>
268
+ </Sidebar>
269
+ <SidebarMain>
270
+ <SidebarTrigger />
271
+ <main>Content</main>
272
+ </SidebarMain>
273
+ </SidebarLayout>
274
+ ```
275
+
276
+ ## Examples
277
+
278
+ ### Variants
279
+
280
+ Use the `variant` and `collapsible` props to control the sidebar appearance and collapse behavior.
281
+
282
+ ```tsx
283
+ 'use client';
284
+ import { Avatar, AvatarFallback } from '@/components/ui/avatar';
285
+ import { Button } from '@/components/ui/button';
286
+ import { Checkbox } from '@/components/ui/checkbox';
287
+ import { Select, SelectList, SelectPopup, SelectPortal, SelectPositioner, SelectTrigger, SelectValue } from '@/components/ui/select';
288
+ import {
289
+ Sidebar,
290
+ SidebarAside,
291
+ SidebarBackdrop,
292
+ SidebarContent,
293
+ SidebarFooter,
294
+ SidebarGroup,
295
+ SidebarGroupContent,
296
+ SidebarGroupLabel,
297
+ SidebarHeader,
298
+ SidebarLayout,
299
+ SidebarMain,
300
+ SidebarMenu,
301
+ SidebarMenuAction,
302
+ SidebarMenuBadge,
303
+ SidebarMenuButton,
304
+ SidebarMenuItem,
305
+ SidebarMenuSub,
306
+ SidebarMenuSubButton,
307
+ SidebarMenuSubItem,
308
+ SidebarPanel,
309
+ SidebarRail,
310
+ SidebarSpacer,
311
+ SidebarTrigger
312
+ } from '@/components/ui/sidebar';
313
+ import { ToggleButton } from '@/components/ui/togglebutton';
314
+ import { ToggleButtonGroup } from '@/components/ui/togglebuttongroup';
315
+ import {
316
+ Bell,
317
+ Calendar,
318
+ ChartBar,
319
+ CreditCard,
320
+ EllipsisV,
321
+ Folder,
322
+ Home,
323
+ Inbox,
324
+ Search,
325
+ ShoppingCart,
326
+ Sidebar as SidebarIcon,
327
+ Star,
328
+ Users
329
+ } from '@primeicons/react';
330
+ import { ChevronDown } from '@primeicons/react/chevron-down';
331
+ import { SelectValueChangeEvent } from 'primereact/select';
332
+ import { ToggleButtonGroupValueChangeEvent } from 'primereact/togglebuttongroup';
333
+ import * as React from 'react';
334
+
335
+ type NavItem = {
336
+ icon: React.FC<any>;
337
+ label: string;
338
+ isActive?: boolean;
339
+ badge?: string;
340
+ subItems?: { label: string; isActive?: boolean }[];
341
+ };
342
+
343
+ const navGroups: { label: string; items: NavItem[] }[] = [
344
+ {
345
+ label: 'Navigation',
346
+ items: [
347
+ { icon: Home, label: 'Home', isActive: true },
348
+ { icon: Inbox, label: 'Inbox', badge: '12' },
349
+ { icon: Search, label: 'Search' },
350
+ { icon: Bell, label: 'Notifications', badge: '3' }
351
+ ]
352
+ },
353
+ {
354
+ label: 'Projects',
355
+ items: [
356
+ { icon: ChartBar, label: 'Analytics', subItems: [{ label: 'Overview', isActive: true }, { label: 'Reports' }, { label: 'Real-time' }] },
357
+ { icon: Users, label: 'Team' },
358
+ { icon: Calendar, label: 'Calendar' },
359
+ { icon: Folder, label: 'Documents', subItems: [{ label: 'Shared' }, { label: 'Private' }, { label: 'Archived' }] }
360
+ ]
361
+ },
362
+ {
363
+ label: 'Billing',
364
+ items: [
365
+ { icon: CreditCard, label: 'Payments' },
366
+ { icon: ShoppingCart, label: 'Orders' },
367
+ { icon: Star, label: 'Subscriptions' }
368
+ ]
369
+ }
370
+ ];
371
+
372
+ const variantOptions = [
373
+ { label: 'Sidebar', value: 'sidebar' },
374
+ { label: 'Floating', value: 'floating' },
375
+ { label: 'Inset', value: 'inset' }
376
+ ];
377
+
378
+ const collapsibleOptions = [
379
+ { label: 'Icon', value: 'icon' },
380
+ { label: 'Offcanvas', value: 'offcanvas' },
381
+ { label: 'None', value: 'none' }
382
+ ];
383
+
384
+ export default function VariantsDemo() {
385
+ const [variant, setVariant] = React.useState<'sidebar' | 'floating' | 'inset'>('sidebar');
386
+ const [collapsible, setCollapsible] = React.useState<'icon' | 'offcanvas' | 'none'>('icon');
387
+ const [side, setSide] = React.useState<'left' | 'right'>('left');
388
+ const [overlay, setOverlay] = React.useState(false);
389
+ const [openOnHover, setOpenOnHover] = React.useState(false);
390
+ const [backdrop, setBackdrop] = React.useState(false);
391
+
392
+ return (
393
+ <div>
394
+ <div className="flex flex-wrap items-center gap-4 mb-4">
395
+ <Select
396
+ value={variant}
397
+ onValueChange={(e: SelectValueChangeEvent) => setVariant(e.value as any)}
398
+ options={variantOptions}
399
+ optionLabel="label"
400
+ optionValue="value"
401
+ className="w-40"
402
+ >
403
+ <SelectTrigger>
404
+ <SelectValue placeholder="Variant" />
405
+ </SelectTrigger>
406
+ <SelectPortal>
407
+ <SelectPositioner>
408
+ <SelectPopup>
409
+ <SelectList />
410
+ </SelectPopup>
411
+ </SelectPositioner>
412
+ </SelectPortal>
413
+ </Select>
414
+ <Select
415
+ value={collapsible}
416
+ onValueChange={(e: SelectValueChangeEvent) => setCollapsible(e.value as any)}
417
+ options={collapsibleOptions}
418
+ optionLabel="label"
419
+ optionValue="value"
420
+ className="w-40"
421
+ >
422
+ <SelectTrigger>
423
+ <SelectValue placeholder="Collapsible" />
424
+ </SelectTrigger>
425
+ <SelectPortal>
426
+ <SelectPositioner>
427
+ <SelectPopup>
428
+ <SelectList />
429
+ </SelectPopup>
430
+ </SelectPositioner>
431
+ </SelectPortal>
432
+ </Select>
433
+ <ToggleButtonGroup
434
+ allowEmpty={false}
435
+ multiple={false}
436
+ value={side}
437
+ onValueChange={(e: ToggleButtonGroupValueChangeEvent) => setSide(e.value as 'left' | 'right')}
438
+ >
439
+ <ToggleButton value="left">Left</ToggleButton>
440
+ <ToggleButton value="right">Right</ToggleButton>
441
+ </ToggleButtonGroup>
442
+ <div className="flex items-center gap-2">
443
+ <Checkbox inputId="overlay-cb" checked={overlay} onCheckedChange={(e: any) => setOverlay(e.checked)} />
444
+ <label htmlFor="overlay-cb" className="text-sm font-medium cursor-pointer">
445
+ Overlay
446
+ </label>
447
+ </div>
448
+ <div className="flex items-center gap-2">
449
+ <Checkbox inputId="hover-cb" checked={openOnHover} onCheckedChange={(e: any) => setOpenOnHover(e.checked)} />
450
+ <label htmlFor="hover-cb" className="text-sm font-medium cursor-pointer">
451
+ Open on Hover
452
+ </label>
453
+ </div>
454
+ <div className="flex items-center gap-2">
455
+ <Checkbox inputId="backdrop-cb" checked={backdrop} onCheckedChange={(e: any) => setBackdrop(e.checked)} />
456
+ <label htmlFor="backdrop-cb" className="text-sm font-medium cursor-pointer">
457
+ Backdrop
458
+ </label>
459
+ </div>
460
+ </div>
461
+ <div className="border border-surface-200 dark:border-surface-700 rounded-lg overflow-hidden">
462
+ <SidebarLayout className="min-h-192 relative!">
463
+ {backdrop && <SidebarBackdrop className="absolute!" />}
464
+ {side === 'right' && <SidebarMainC />}
465
+ <SidebarNavigation variant={variant} collapsible={collapsible} side={side} overlay={overlay} openOnHover={openOnHover} />
466
+ {side === 'left' && <SidebarMainC />}
467
+ </SidebarLayout>
468
+ </div>
469
+ </div>
470
+ );
471
+ }
472
+
473
+ function SidebarMainC() {
474
+ return (
475
+ <SidebarMain>
476
+ <header className="flex h-12 items-center gap-2 border-b border-surface-200 dark:border-surface-700 px-4">
477
+ <SidebarTrigger as={Button} severity="secondary" variant="text" size="small" iconOnly>
478
+ <SidebarIcon />
479
+ </SidebarTrigger>
480
+ </header>
481
+ <div className="flex-1 p-4 flex flex-col gap-4">
482
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 h-48"></div>
483
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 flex-1"></div>
484
+ </div>
485
+ </SidebarMain>
486
+ );
487
+ }
488
+
489
+ function SidebarNavigation({
490
+ variant,
491
+ collapsible,
492
+ side,
493
+ overlay,
494
+ openOnHover
495
+ }: {
496
+ variant: 'sidebar' | 'floating' | 'inset';
497
+ collapsible: 'icon' | 'offcanvas' | 'none';
498
+ side: 'left' | 'right';
499
+ overlay: boolean;
500
+ openOnHover: boolean;
501
+ }) {
502
+ return (
503
+ <Sidebar id="variants-demo" variant={variant} collapsible={collapsible} side={side} overlay={overlay} openOnHover={openOnHover}>
504
+ <SidebarSpacer />
505
+ <SidebarAside>
506
+ <SidebarPanel>
507
+ <SidebarHeader>
508
+ <SidebarMenu>
509
+ <SidebarMenuItem>
510
+ <SidebarMenuButton className="px-1!">
511
+ <div className="flex size-6 shrink-0 items-center justify-center rounded-md bg-linear-to-br from-violet-500 to-indigo-600 text-white text-xs font-bold leading-none">
512
+ A
513
+ </div>
514
+ <span className="font-semibold text-sm">Acme Inc</span>
515
+ </SidebarMenuButton>
516
+ </SidebarMenuItem>
517
+ </SidebarMenu>
518
+ </SidebarHeader>
519
+ <SidebarContent>
520
+ {navGroups.map((group) => (
521
+ <SidebarGroup key={group.label}>
522
+ <SidebarGroupLabel>{group.label}</SidebarGroupLabel>
523
+ <SidebarGroupContent>
524
+ <SidebarMenu>
525
+ {group.items.map((item) => (
526
+ <SidebarMenuItem
527
+ key={item.label}
528
+ collapsible={!!item.subItems}
529
+ defaultOpen={item.subItems?.some((s) => s.isActive)}
530
+ >
531
+ <SidebarMenuButton isActive={item.isActive}>
532
+ <item.icon />
533
+ <span>{item.label}</span>
534
+ {item.subItems && (
535
+ <ChevronDown className="ml-auto transition-transform duration-200 [[data-open]>&]:rotate-180" />
536
+ )}
537
+ </SidebarMenuButton>
538
+ {item.badge && <SidebarMenuBadge>{item.badge}</SidebarMenuBadge>}
539
+ {item.subItems ? (
540
+ <SidebarMenuSub>
541
+ {item.subItems.map((sub) => (
542
+ <SidebarMenuSubItem key={sub.label}>
543
+ <SidebarMenuSubButton isActive={sub.isActive}>
544
+ <span>{sub.label}</span>
545
+ </SidebarMenuSubButton>
546
+ </SidebarMenuSubItem>
547
+ ))}
548
+ </SidebarMenuSub>
549
+ ) : !item.badge ? (
550
+ <SidebarMenuAction showOnHover>
551
+ <EllipsisV />
552
+ </SidebarMenuAction>
553
+ ) : null}
554
+ </SidebarMenuItem>
555
+ ))}
556
+ </SidebarMenu>
557
+ </SidebarGroupContent>
558
+ </SidebarGroup>
559
+ ))}
560
+ </SidebarContent>
561
+ <SidebarFooter>
562
+ <SidebarMenu>
563
+ <SidebarMenuItem>
564
+ <SidebarMenuButton className="p-1!">
565
+ <Avatar className="size-6 shrink-0 text-xs" shape="circle">
566
+ <AvatarFallback>JD</AvatarFallback>
567
+ </Avatar>
568
+ <span>John Doe</span>
569
+ </SidebarMenuButton>
570
+ </SidebarMenuItem>
571
+ </SidebarMenu>
572
+ </SidebarFooter>
573
+ <SidebarRail />
574
+ </SidebarPanel>
575
+ </SidebarAside>
576
+ </Sidebar>
577
+ );
578
+ }
579
+ ```
580
+
581
+ ### Responsive
582
+
583
+ Use `useIsMobile` hook to switch between desktop and mobile layouts. On mobile, the sidebar becomes offcanvas with overlay and backdrop.
584
+
585
+ ```tsx
586
+ 'use client';
587
+ import { Avatar, AvatarFallback } from '@/components/ui/avatar';
588
+ import { Button } from '@/components/ui/button';
589
+ import {
590
+ Sidebar,
591
+ SidebarAside,
592
+ SidebarBackdrop,
593
+ SidebarContent,
594
+ SidebarFooter,
595
+ SidebarGroup,
596
+ SidebarGroupContent,
597
+ SidebarGroupLabel,
598
+ SidebarHeader,
599
+ SidebarLayout,
600
+ SidebarMain,
601
+ SidebarMenu,
602
+ SidebarMenuBadge,
603
+ SidebarMenuButton,
604
+ SidebarMenuItem,
605
+ SidebarPanel,
606
+ SidebarSpacer,
607
+ SidebarTrigger
608
+ } from '@/components/ui/sidebar';
609
+ import { Bell, Cog, Home, Inbox, Search, Sidebar as SidebarIcon, Users } from '@primeicons/react';
610
+ import { useIsMobile } from '@primereact/hooks';
611
+
612
+ export default function ResponsiveDemo() {
613
+ const isMobile = useIsMobile(1024);
614
+
615
+ return (
616
+ <div className="border border-surface-200 dark:border-surface-700 rounded-lg overflow-hidden">
617
+ <SidebarLayout className="min-h-192 relative!">
618
+ {isMobile && <SidebarBackdrop className="absolute!" />}
619
+ <Sidebar id="mobile-nav" collapsible={isMobile ? 'offcanvas' : 'icon'} overlay={isMobile} defaultOpen={!isMobile} width="14rem">
620
+ <SidebarSpacer />
621
+ <SidebarAside>
622
+ <SidebarPanel>
623
+ <SidebarHeader>
624
+ <SidebarMenu>
625
+ <SidebarMenuItem>
626
+ <SidebarMenuButton className="p-1!">
627
+ <div className="flex size-6 shrink-0 items-center justify-center rounded-md bg-linear-to-br from-violet-500 to-indigo-600 text-white text-xs font-bold leading-none">
628
+ A
629
+ </div>
630
+ <span className="font-semibold text-sm">Acme Inc</span>
631
+ </SidebarMenuButton>
632
+ </SidebarMenuItem>
633
+ </SidebarMenu>
634
+ </SidebarHeader>
635
+
636
+ <SidebarContent>
637
+ <SidebarGroup>
638
+ <SidebarGroupLabel>Menu</SidebarGroupLabel>
639
+ <SidebarGroupContent>
640
+ <SidebarMenu>
641
+ <SidebarMenuItem>
642
+ <SidebarMenuButton isActive>
643
+ <Home />
644
+ <span>Home</span>
645
+ </SidebarMenuButton>
646
+ </SidebarMenuItem>
647
+ <SidebarMenuItem>
648
+ <SidebarMenuButton>
649
+ <Inbox />
650
+ <span>Inbox</span>
651
+ </SidebarMenuButton>
652
+ <SidebarMenuBadge>3</SidebarMenuBadge>
653
+ </SidebarMenuItem>
654
+ <SidebarMenuItem>
655
+ <SidebarMenuButton>
656
+ <Search />
657
+ <span>Search</span>
658
+ </SidebarMenuButton>
659
+ </SidebarMenuItem>
660
+ <SidebarMenuItem>
661
+ <SidebarMenuButton>
662
+ <Users />
663
+ <span>Team</span>
664
+ </SidebarMenuButton>
665
+ </SidebarMenuItem>
666
+ <SidebarMenuItem>
667
+ <SidebarMenuButton>
668
+ <Bell />
669
+ <span>Notifications</span>
670
+ </SidebarMenuButton>
671
+ </SidebarMenuItem>
672
+ <SidebarMenuItem>
673
+ <SidebarMenuButton>
674
+ <Cog />
675
+ <span>Settings</span>
676
+ </SidebarMenuButton>
677
+ </SidebarMenuItem>
678
+ </SidebarMenu>
679
+ </SidebarGroupContent>
680
+ </SidebarGroup>
681
+ </SidebarContent>
682
+
683
+ <SidebarFooter>
684
+ <SidebarMenu>
685
+ <SidebarMenuItem>
686
+ <SidebarMenuButton className="p-1!">
687
+ <Avatar className="size-6 shrink-0 text-xs" shape="circle">
688
+ <AvatarFallback>JD</AvatarFallback>
689
+ </Avatar>
690
+ <span>John Doe</span>
691
+ </SidebarMenuButton>
692
+ </SidebarMenuItem>
693
+ </SidebarMenu>
694
+ </SidebarFooter>
695
+ </SidebarPanel>
696
+ </SidebarAside>
697
+ </Sidebar>
698
+
699
+ <SidebarMain>
700
+ <header className="flex h-12 items-center gap-2 border-b border-surface-200 dark:border-surface-700 px-4">
701
+ <SidebarTrigger as={Button} severity="secondary" variant="text" size="small" iconOnly>
702
+ <SidebarIcon />
703
+ </SidebarTrigger>
704
+ <span className="text-sm font-medium">Dashboard</span>
705
+ <span className="ml-auto text-xs text-muted-color rounded-md bg-surface-100 dark:bg-surface-800 px-2 py-1">
706
+ {isMobile ? 'Mobile' : 'Desktop'}
707
+ </span>
708
+ </header>
709
+ <div className="flex-1 p-4 flex flex-col gap-4">
710
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 h-48"></div>
711
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 flex-1"></div>
712
+ </div>
713
+ </SidebarMain>
714
+ </SidebarLayout>
715
+ </div>
716
+ );
717
+ }
718
+ ```
719
+
720
+ ### Dual Sidebar
721
+
722
+ ```tsx
723
+ 'use client';
724
+ import { Button } from '@/components/ui/button';
725
+ import {
726
+ Sidebar,
727
+ SidebarAside,
728
+ SidebarContent,
729
+ SidebarFooter,
730
+ SidebarGroup,
731
+ SidebarGroupContent,
732
+ SidebarGroupLabel,
733
+ SidebarHeader,
734
+ SidebarLayout,
735
+ SidebarMain,
736
+ SidebarMenu,
737
+ SidebarMenuBadge,
738
+ SidebarMenuButton,
739
+ SidebarMenuItem,
740
+ SidebarMenuSub,
741
+ SidebarMenuSubButton,
742
+ SidebarMenuSubItem,
743
+ SidebarPanel,
744
+ SidebarSpacer,
745
+ SidebarTrigger
746
+ } from '@/components/ui/sidebar';
747
+ import { Bell, Calendar, ChartBar, ChevronDown, Cog, Comment, Home, Inbox, Search, Sidebar as SidebarIcon, Users } from '@primeicons/react';
748
+
749
+ export default function DualDemo() {
750
+ return (
751
+ <div className="border border-surface-200 dark:border-surface-700 rounded-lg overflow-hidden">
752
+ <SidebarLayout className="min-h-192 relative!">
753
+ {/* Left sidebar - icon collapsible */}
754
+ <Sidebar id="nav" side="left" collapsible="icon" width="14rem">
755
+ <SidebarSpacer />
756
+ <SidebarAside>
757
+ <SidebarPanel>
758
+ <SidebarHeader>
759
+ <SidebarMenu>
760
+ <SidebarMenuItem>
761
+ <SidebarMenuButton className="p-1!">
762
+ <div className="flex size-6 shrink-0 items-center justify-center rounded-md bg-linear-to-br from-violet-500 to-indigo-600 text-white text-xs font-bold leading-none">
763
+ A
764
+ </div>
765
+ <span className="font-semibold text-sm">Acme Inc</span>
766
+ </SidebarMenuButton>
767
+ </SidebarMenuItem>
768
+ </SidebarMenu>
769
+ </SidebarHeader>
770
+
771
+ <SidebarContent>
772
+ <SidebarGroup>
773
+ <SidebarGroupLabel>Navigation</SidebarGroupLabel>
774
+ <SidebarGroupContent>
775
+ <SidebarMenu>
776
+ <SidebarMenuItem>
777
+ <SidebarMenuButton isActive>
778
+ <Home />
779
+ <span>Home</span>
780
+ </SidebarMenuButton>
781
+ </SidebarMenuItem>
782
+ <SidebarMenuItem>
783
+ <SidebarMenuButton>
784
+ <Inbox />
785
+ <span>Inbox</span>
786
+ </SidebarMenuButton>
787
+ <SidebarMenuBadge>5</SidebarMenuBadge>
788
+ </SidebarMenuItem>
789
+ <SidebarMenuItem>
790
+ <SidebarMenuButton>
791
+ <Search />
792
+ <span>Search</span>
793
+ </SidebarMenuButton>
794
+ </SidebarMenuItem>
795
+ <SidebarMenuItem>
796
+ <SidebarMenuButton>
797
+ <Bell />
798
+ <span>Notifications</span>
799
+ </SidebarMenuButton>
800
+ </SidebarMenuItem>
801
+ </SidebarMenu>
802
+ </SidebarGroupContent>
803
+ </SidebarGroup>
804
+
805
+ <SidebarGroup>
806
+ <SidebarGroupLabel>Projects</SidebarGroupLabel>
807
+ <SidebarGroupContent>
808
+ <SidebarMenu>
809
+ <SidebarMenuItem collapsible defaultOpen>
810
+ <SidebarMenuButton>
811
+ <ChartBar />
812
+ <span>Analytics</span>
813
+ <ChevronDown className="ml-auto transition-transform duration-200 [[data-open]>&]:rotate-180" />
814
+ </SidebarMenuButton>
815
+ <SidebarMenuSub>
816
+ <SidebarMenuSubItem>
817
+ <SidebarMenuSubButton isActive>Overview</SidebarMenuSubButton>
818
+ </SidebarMenuSubItem>
819
+ <SidebarMenuSubItem>
820
+ <SidebarMenuSubButton>Reports</SidebarMenuSubButton>
821
+ </SidebarMenuSubItem>
822
+ </SidebarMenuSub>
823
+ </SidebarMenuItem>
824
+ <SidebarMenuItem>
825
+ <SidebarMenuButton>
826
+ <Users />
827
+ <span>Team</span>
828
+ </SidebarMenuButton>
829
+ </SidebarMenuItem>
830
+ <SidebarMenuItem>
831
+ <SidebarMenuButton>
832
+ <Calendar />
833
+ <span>Calendar</span>
834
+ </SidebarMenuButton>
835
+ </SidebarMenuItem>
836
+ </SidebarMenu>
837
+ </SidebarGroupContent>
838
+ </SidebarGroup>
839
+ </SidebarContent>
840
+
841
+ <SidebarFooter>
842
+ <SidebarMenu>
843
+ <SidebarMenuItem>
844
+ <SidebarMenuButton>
845
+ <Cog />
846
+ <span>Settings</span>
847
+ </SidebarMenuButton>
848
+ </SidebarMenuItem>
849
+ </SidebarMenu>
850
+ </SidebarFooter>
851
+ </SidebarPanel>
852
+ </SidebarAside>
853
+ </Sidebar>
854
+
855
+ {/* Main content */}
856
+ <SidebarMain>
857
+ <header className="flex h-12 items-center gap-2 border-b border-surface-200 dark:border-surface-700 px-4">
858
+ <SidebarTrigger target="nav" as={Button} severity="secondary" variant="text" size="small" iconOnly>
859
+ <SidebarIcon />
860
+ </SidebarTrigger>
861
+ <span className="text-sm font-medium flex-1">Dashboard</span>
862
+ <SidebarTrigger target="ai" as={Button} severity="secondary" variant="text" size="small" iconOnly>
863
+ <Comment />
864
+ </SidebarTrigger>
865
+ </header>
866
+ <div className="flex-1 p-4 flex flex-col gap-4">
867
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 h-48"></div>
868
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 flex-1"></div>
869
+ </div>
870
+ </SidebarMain>
871
+
872
+ {/* Right sidebar - Claude-style chat, offcanvas */}
873
+ <Sidebar id="ai" side="right" collapsible="offcanvas" width="18rem">
874
+ <SidebarSpacer />
875
+ <SidebarAside>
876
+ <SidebarPanel>
877
+ <SidebarHeader>
878
+ <div className="flex items-center gap-2 px-1">
879
+ <span className="font-semibold text-sm text-surface-500">Weekly metrics overview</span>
880
+ </div>
881
+ </SidebarHeader>
882
+
883
+ <SidebarContent>
884
+ <div className="flex flex-col gap-4 px-3 py-2">
885
+ <div className="rounded-xl bg-surface-100 dark:bg-surface-800 px-3 py-2.5 text-sm">
886
+ Show me this week&apos;s metrics
887
+ </div>
888
+
889
+ <div className="text-sm leading-relaxed">
890
+ <p>Here are your key metrics for this week:</p>
891
+ <ul className="mt-2 space-y-1.5 text-muted-color">
892
+ <li className="flex justify-between">
893
+ <span>Page views</span>
894
+ <span className="font-medium text-color">12,482</span>
895
+ </li>
896
+ <li className="flex justify-between">
897
+ <span>New users</span>
898
+ <span className="font-medium text-color">342</span>
899
+ </li>
900
+ <li className="flex justify-between">
901
+ <span>Bounce rate</span>
902
+ <span className="font-medium text-color">34%</span>
903
+ </li>
904
+ </ul>
905
+ </div>
906
+ </div>
907
+ </SidebarContent>
908
+
909
+ <SidebarFooter>
910
+ <div className="mx-1 rounded-xl border border-surface-200 dark:border-surface-700 px-3 py-2.5">
911
+ <input
912
+ type="text"
913
+ placeholder="Reply to Claude..."
914
+ className="w-full bg-transparent border-none outline-none text-sm"
915
+ />
916
+ </div>
917
+ </SidebarFooter>
918
+ </SidebarPanel>
919
+ </SidebarAside>
920
+ </Sidebar>
921
+ </SidebarLayout>
922
+ </div>
923
+ );
924
+ }
925
+ ```
926
+
927
+ ### Multi Sidebar
928
+
929
+ ```tsx
930
+ 'use client';
931
+ import {
932
+ Sidebar,
933
+ SidebarAside,
934
+ SidebarContent,
935
+ SidebarFooter,
936
+ SidebarGroup,
937
+ SidebarGroupContent,
938
+ SidebarGroupLabel,
939
+ SidebarHeader,
940
+ SidebarLayout,
941
+ SidebarMain,
942
+ SidebarMenu,
943
+ SidebarMenuBadge,
944
+ SidebarMenuButton,
945
+ SidebarMenuItem,
946
+ SidebarPanel,
947
+ SidebarSpacer
948
+ } from '@/components/ui/sidebar';
949
+ import { Code, Cog, Database, ExternalLink, Globe, Home, Key, Server } from '@primeicons/react';
950
+
951
+ export default function MultiDemo() {
952
+ return (
953
+ <div className="border border-surface-200 dark:border-surface-700 rounded-lg overflow-hidden">
954
+ <SidebarLayout className="min-h-192 relative!">
955
+ {/* Icon bar - always collapsed, opens on hover as overlay */}
956
+ <Sidebar id="iconbar" side="left" collapsible="icon" overlay openOnHover width="12rem" defaultOpen={false}>
957
+ <SidebarSpacer />
958
+ <SidebarAside>
959
+ <SidebarPanel>
960
+ <SidebarHeader>
961
+ <SidebarMenu>
962
+ <SidebarMenuItem>
963
+ <SidebarMenuButton className="p-1!">
964
+ <div className="flex size-6 shrink-0 items-center justify-center rounded-md bg-emerald-600 text-white text-xs font-bold leading-none">
965
+ A
966
+ </div>
967
+ <span className="font-semibold text-sm">Acme Inc</span>
968
+ </SidebarMenuButton>
969
+ </SidebarMenuItem>
970
+ </SidebarMenu>
971
+ </SidebarHeader>
972
+
973
+ <SidebarContent>
974
+ <SidebarGroup>
975
+ <SidebarGroupContent>
976
+ <SidebarMenu>
977
+ <SidebarMenuItem>
978
+ <SidebarMenuButton isActive>
979
+ <Home />
980
+ <span>Home</span>
981
+ </SidebarMenuButton>
982
+ </SidebarMenuItem>
983
+ <SidebarMenuItem>
984
+ <SidebarMenuButton>
985
+ <Database />
986
+ <span>Database</span>
987
+ </SidebarMenuButton>
988
+ </SidebarMenuItem>
989
+ <SidebarMenuItem>
990
+ <SidebarMenuButton>
991
+ <Key />
992
+ <span>Authentication</span>
993
+ </SidebarMenuButton>
994
+ </SidebarMenuItem>
995
+ <SidebarMenuItem>
996
+ <SidebarMenuButton>
997
+ <Server />
998
+ <span>Edge Functions</span>
999
+ </SidebarMenuButton>
1000
+ </SidebarMenuItem>
1001
+ <SidebarMenuItem>
1002
+ <SidebarMenuButton>
1003
+ <Globe />
1004
+ <span>Storage</span>
1005
+ </SidebarMenuButton>
1006
+ </SidebarMenuItem>
1007
+ <SidebarMenuItem>
1008
+ <SidebarMenuButton>
1009
+ <Code />
1010
+ <span>SQL Editor</span>
1011
+ </SidebarMenuButton>
1012
+ </SidebarMenuItem>
1013
+ </SidebarMenu>
1014
+ </SidebarGroupContent>
1015
+ </SidebarGroup>
1016
+ </SidebarContent>
1017
+
1018
+ <SidebarFooter>
1019
+ <SidebarMenu>
1020
+ <SidebarMenuItem>
1021
+ <SidebarMenuButton>
1022
+ <Cog />
1023
+ <span>Settings</span>
1024
+ </SidebarMenuButton>
1025
+ </SidebarMenuItem>
1026
+ </SidebarMenu>
1027
+ </SidebarFooter>
1028
+ </SidebarPanel>
1029
+ </SidebarAside>
1030
+ </Sidebar>
1031
+
1032
+ {/* Secondary sidebar - always open, not collapsible */}
1033
+ <Sidebar id="secondary" side="left" width="14rem">
1034
+ <SidebarSpacer />
1035
+ <SidebarAside>
1036
+ <SidebarPanel>
1037
+ <SidebarHeader>
1038
+ <div className="px-1">
1039
+ <span className="font-semibold text-sm">Settings</span>
1040
+ </div>
1041
+ </SidebarHeader>
1042
+
1043
+ <SidebarContent>
1044
+ <SidebarGroup>
1045
+ <SidebarGroupLabel>Configuration</SidebarGroupLabel>
1046
+ <SidebarGroupContent>
1047
+ <SidebarMenu>
1048
+ <SidebarMenuItem>
1049
+ <SidebarMenuButton isActive>
1050
+ <span>General</span>
1051
+ </SidebarMenuButton>
1052
+ </SidebarMenuItem>
1053
+ <SidebarMenuItem>
1054
+ <SidebarMenuButton>
1055
+ <span>Compute and Disk</span>
1056
+ </SidebarMenuButton>
1057
+ </SidebarMenuItem>
1058
+ <SidebarMenuItem>
1059
+ <SidebarMenuButton>
1060
+ <span>Infrastructure</span>
1061
+ </SidebarMenuButton>
1062
+ </SidebarMenuItem>
1063
+ <SidebarMenuItem>
1064
+ <SidebarMenuButton>
1065
+ <span>Integrations</span>
1066
+ </SidebarMenuButton>
1067
+ </SidebarMenuItem>
1068
+ <SidebarMenuItem>
1069
+ <SidebarMenuButton>
1070
+ <span>API Keys</span>
1071
+ </SidebarMenuButton>
1072
+ </SidebarMenuItem>
1073
+ <SidebarMenuItem>
1074
+ <SidebarMenuButton>
1075
+ <span>JWT Keys</span>
1076
+ </SidebarMenuButton>
1077
+ </SidebarMenuItem>
1078
+ <SidebarMenuItem>
1079
+ <SidebarMenuButton>
1080
+ <span>Log Drains</span>
1081
+ </SidebarMenuButton>
1082
+ </SidebarMenuItem>
1083
+ <SidebarMenuItem>
1084
+ <SidebarMenuButton>
1085
+ <span>Add-ons</span>
1086
+ </SidebarMenuButton>
1087
+ </SidebarMenuItem>
1088
+ </SidebarMenu>
1089
+ </SidebarGroupContent>
1090
+ </SidebarGroup>
1091
+
1092
+ <SidebarGroup>
1093
+ <SidebarGroupLabel>Integrations</SidebarGroupLabel>
1094
+ <SidebarGroupContent>
1095
+ <SidebarMenu>
1096
+ <SidebarMenuItem>
1097
+ <SidebarMenuButton>
1098
+ <span>Data API</span>
1099
+ <ExternalLink className="ml-auto" />
1100
+ </SidebarMenuButton>
1101
+ </SidebarMenuItem>
1102
+ <SidebarMenuItem>
1103
+ <SidebarMenuButton>
1104
+ <span>Vault</span>
1105
+ <SidebarMenuBadge>BETA</SidebarMenuBadge>
1106
+ </SidebarMenuButton>
1107
+ </SidebarMenuItem>
1108
+ </SidebarMenu>
1109
+ </SidebarGroupContent>
1110
+ </SidebarGroup>
1111
+
1112
+ <SidebarGroup>
1113
+ <SidebarGroupLabel>Billing</SidebarGroupLabel>
1114
+ <SidebarGroupContent>
1115
+ <SidebarMenu>
1116
+ <SidebarMenuItem>
1117
+ <SidebarMenuButton>
1118
+ <span>Subscription</span>
1119
+ <ExternalLink className="ml-auto" />
1120
+ </SidebarMenuButton>
1121
+ </SidebarMenuItem>
1122
+ <SidebarMenuItem>
1123
+ <SidebarMenuButton>
1124
+ <span>Usage</span>
1125
+ <ExternalLink className="ml-auto" />
1126
+ </SidebarMenuButton>
1127
+ </SidebarMenuItem>
1128
+ </SidebarMenu>
1129
+ </SidebarGroupContent>
1130
+ </SidebarGroup>
1131
+ </SidebarContent>
1132
+ </SidebarPanel>
1133
+ </SidebarAside>
1134
+ </Sidebar>
1135
+
1136
+ {/* Main content */}
1137
+ <SidebarMain>
1138
+ <header className="flex h-12 items-center gap-2 border-b border-surface-200 dark:border-surface-700 px-4">
1139
+ <span className="text-sm font-medium">Table Editor</span>
1140
+ <span className="text-xs text-muted-color">/ users</span>
1141
+ </header>
1142
+ <div className="flex-1 p-4 flex flex-col gap-4">
1143
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 h-48"></div>
1144
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 flex-1"></div>
1145
+ </div>
1146
+ </SidebarMain>
1147
+ </SidebarLayout>
1148
+ </div>
1149
+ );
1150
+ }
1151
+ ```
1152
+
1153
+ ### Nested Menu
1154
+
1155
+ Recursive menu structure with deeply nested sub-items using `Sidebar.MenuSub` and a recursive render function.
1156
+
1157
+ ```tsx
1158
+ 'use client';
1159
+ import { Avatar, AvatarFallback } from '@/components/ui/avatar';
1160
+ import { Button } from '@/components/ui/button';
1161
+ import {
1162
+ Sidebar,
1163
+ SidebarAside,
1164
+ SidebarContent,
1165
+ SidebarFooter,
1166
+ SidebarGroup,
1167
+ SidebarGroupContent,
1168
+ SidebarGroupLabel,
1169
+ SidebarHeader,
1170
+ SidebarLayout,
1171
+ SidebarMain,
1172
+ SidebarMenu,
1173
+ SidebarMenuButton,
1174
+ SidebarMenuItem,
1175
+ SidebarMenuSub,
1176
+ SidebarMenuSubButton,
1177
+ SidebarMenuSubItem,
1178
+ SidebarPanel,
1179
+ SidebarRail,
1180
+ SidebarSpacer,
1181
+ SidebarTrigger
1182
+ } from '@/components/ui/sidebar';
1183
+ import { ChevronDown, Folder, Globe, Image, Sidebar as SidebarIcon, Video } from '@primeicons/react';
1184
+
1185
+ type MenuItem = {
1186
+ label: string;
1187
+ icon?: React.FC<any>;
1188
+ isActive?: boolean;
1189
+ children?: MenuItem[];
1190
+ };
1191
+
1192
+ type MenuGroup = {
1193
+ label: string;
1194
+ items: MenuItem[];
1195
+ };
1196
+
1197
+ const menuGroups: MenuGroup[] = [
1198
+ {
1199
+ label: 'Files',
1200
+ items: [
1201
+ {
1202
+ label: 'Documents',
1203
+ icon: Folder,
1204
+ children: [
1205
+ {
1206
+ label: 'Work',
1207
+ children: [
1208
+ { label: 'Projects', children: [{ label: 'Q1 Report', isActive: true }, { label: 'Q2 Report' }, { label: 'Roadmap' }] },
1209
+ { label: 'Invoices' },
1210
+ { label: 'Contracts' }
1211
+ ]
1212
+ },
1213
+ {
1214
+ label: 'Personal',
1215
+ children: [{ label: 'Recipes' }, { label: 'Travel' }]
1216
+ }
1217
+ ]
1218
+ }
1219
+ ]
1220
+ },
1221
+ {
1222
+ label: 'Media',
1223
+ items: [
1224
+ {
1225
+ label: 'Photos',
1226
+ icon: Image,
1227
+ children: [{ label: '2024' }, { label: '2025' }]
1228
+ },
1229
+ {
1230
+ label: 'Videos',
1231
+ icon: Video,
1232
+ children: [{ label: 'Tutorials' }, { label: 'Recordings' }]
1233
+ }
1234
+ ]
1235
+ },
1236
+ {
1237
+ label: 'Bookmarks',
1238
+ items: [
1239
+ {
1240
+ label: 'Websites',
1241
+ icon: Globe,
1242
+ children: [{ label: 'Blog' }, { label: 'Portfolio' }, { label: 'Documentation' }]
1243
+ }
1244
+ ]
1245
+ }
1246
+ ];
1247
+
1248
+ function renderMenuItems(items: MenuItem[]) {
1249
+ return items.map((item) =>
1250
+ item.children ? (
1251
+ <SidebarMenuItem key={item.label} collapsible defaultOpen={hasActiveChild(item)}>
1252
+ <SidebarMenuButton tooltip={item.label}>
1253
+ {item.icon && <item.icon />}
1254
+ <span>{item.label}</span>
1255
+ <ChevronDown className="ml-auto transition-transform duration-200 [[data-open]>&]:rotate-180" />
1256
+ </SidebarMenuButton>
1257
+ <SidebarMenuSub>{renderMenuItems(item.children)}</SidebarMenuSub>
1258
+ </SidebarMenuItem>
1259
+ ) : (
1260
+ <SidebarMenuSubItem key={item.label}>
1261
+ <SidebarMenuSubButton isActive={item.isActive}>
1262
+ <span>{item.label}</span>
1263
+ </SidebarMenuSubButton>
1264
+ </SidebarMenuSubItem>
1265
+ )
1266
+ );
1267
+ }
1268
+
1269
+ function hasActiveChild(item: MenuItem): boolean {
1270
+ if (item.isActive) return true;
1271
+
1272
+ return item.children?.some(hasActiveChild) ?? false;
1273
+ }
1274
+
1275
+ export default function NestedDemo() {
1276
+ return (
1277
+ <div className="border border-surface-200 dark:border-surface-700 rounded-lg overflow-hidden">
1278
+ <SidebarLayout className="min-h-192 relative!">
1279
+ <Sidebar id="nested" collapsible="icon">
1280
+ <SidebarSpacer />
1281
+ <SidebarAside>
1282
+ <SidebarPanel>
1283
+ <SidebarHeader>
1284
+ <SidebarMenu>
1285
+ <SidebarMenuItem>
1286
+ <SidebarMenuButton className="p-1!">
1287
+ <div className="flex size-6 shrink-0 items-center justify-center rounded-md bg-linear-to-br from-emerald-500 to-teal-600 text-white text-xs font-bold leading-none">
1288
+ F
1289
+ </div>
1290
+ <span className="font-semibold text-sm">File Manager</span>
1291
+ </SidebarMenuButton>
1292
+ </SidebarMenuItem>
1293
+ </SidebarMenu>
1294
+ </SidebarHeader>
1295
+
1296
+ <SidebarContent>
1297
+ {menuGroups.map((group) => (
1298
+ <SidebarGroup key={group.label}>
1299
+ <SidebarGroupLabel>{group.label}</SidebarGroupLabel>
1300
+ <SidebarGroupContent>
1301
+ <SidebarMenu>{renderMenuItems(group.items)}</SidebarMenu>
1302
+ </SidebarGroupContent>
1303
+ </SidebarGroup>
1304
+ ))}
1305
+ </SidebarContent>
1306
+
1307
+ <SidebarFooter>
1308
+ <SidebarMenu>
1309
+ <SidebarMenuItem>
1310
+ <SidebarMenuButton tooltip="John Doe" className="p-1!">
1311
+ <Avatar className="size-6 shrink-0 text-xs rounded-full">
1312
+ <AvatarFallback>JD</AvatarFallback>
1313
+ </Avatar>
1314
+ <span>John Doe</span>
1315
+ </SidebarMenuButton>
1316
+ </SidebarMenuItem>
1317
+ </SidebarMenu>
1318
+ </SidebarFooter>
1319
+ <SidebarRail />
1320
+ </SidebarPanel>
1321
+ </SidebarAside>
1322
+ </Sidebar>
1323
+
1324
+ <SidebarMain>
1325
+ <header className="flex h-12 items-center gap-2 border-b border-surface-200 dark:border-surface-700 px-4">
1326
+ <SidebarTrigger as={Button} severity="secondary" variant="text" size="small" iconOnly>
1327
+ <SidebarIcon />
1328
+ </SidebarTrigger>
1329
+ <span className="text-sm font-medium">File Manager</span>
1330
+ </header>
1331
+ <div className="flex-1 p-6">
1332
+ <h1 className="text-2xl font-bold mb-4">Q1 Report</h1>
1333
+ <p className="text-muted-color">Documents &gt; Work &gt; Projects &gt; Q1 Report</p>
1334
+ </div>
1335
+ </SidebarMain>
1336
+ </SidebarLayout>
1337
+ </div>
1338
+ );
1339
+ }
1340
+ ```
1341
+
1342
+ ### Chat Application
1343
+
1344
+ ```tsx
1345
+ 'use client';
1346
+ import { Avatar, AvatarFallback } from '@/components/ui/avatar';
1347
+ import { Button } from '@/components/ui/button';
1348
+ import {
1349
+ Sidebar,
1350
+ SidebarAside,
1351
+ SidebarContent,
1352
+ SidebarFooter,
1353
+ SidebarGroup,
1354
+ SidebarGroupContent,
1355
+ SidebarGroupLabel,
1356
+ SidebarHeader,
1357
+ SidebarLayout,
1358
+ SidebarMain,
1359
+ SidebarMenu,
1360
+ SidebarMenuAction,
1361
+ SidebarMenuButton,
1362
+ SidebarMenuItem,
1363
+ SidebarPanel,
1364
+ SidebarSpacer,
1365
+ SidebarTrigger
1366
+ } from '@/components/ui/sidebar';
1367
+ import { Globe, PenToSquare, Search, Sidebar as SidebarIcon, Sparkles, Trash } from '@primeicons/react';
1368
+
1369
+ const chatHistory = [
1370
+ {
1371
+ label: 'Today',
1372
+ chats: [
1373
+ { title: 'PrimeReact Sidebar component', active: true },
1374
+ { title: 'How to use useMotion hook' },
1375
+ { title: 'Fix TypeScript generics issue' }
1376
+ ]
1377
+ },
1378
+ {
1379
+ label: 'Yesterday',
1380
+ chats: [{ title: 'Design system architecture' }, { title: 'React 19 new features overview' }, { title: 'CSS light-dark() function usage' }]
1381
+ },
1382
+ {
1383
+ label: 'Previous 7 days',
1384
+ chats: [
1385
+ { title: 'Build a dashboard layout' },
1386
+ { title: 'Tailwind v4 migration guide' },
1387
+ { title: 'Node.js API authentication' },
1388
+ { title: 'Monorepo setup with pnpm' },
1389
+ { title: 'Deploy Next.js to Vercel' }
1390
+ ]
1391
+ },
1392
+ {
1393
+ label: 'Previous 30 days',
1394
+ chats: [
1395
+ { title: 'GraphQL schema design' },
1396
+ { title: 'WebSocket real-time updates' },
1397
+ { title: 'PostgreSQL query optimization' },
1398
+ { title: 'Docker compose for dev env' }
1399
+ ]
1400
+ }
1401
+ ];
1402
+
1403
+ export default function ChatDemo() {
1404
+ return (
1405
+ <div className="border border-surface-200 dark:border-surface-700 rounded-lg overflow-hidden">
1406
+ <SidebarLayout className="min-h-192 relative!">
1407
+ <Sidebar id="chat-history" collapsible="icon" width="16rem">
1408
+ <SidebarSpacer />
1409
+ <SidebarAside>
1410
+ <SidebarPanel>
1411
+ <SidebarHeader>
1412
+ <SidebarMenu>
1413
+ <SidebarMenuItem>
1414
+ <SidebarMenuButton className="p-1!">
1415
+ <div className="flex size-6 shrink-0 items-center justify-center rounded-full bg-surface-900 dark:bg-surface-0">
1416
+ <Sparkles className="size-3 text-surface-0 dark:text-surface-900" />
1417
+ </div>
1418
+ <span className="font-semibold text-sm">ChatGPT</span>
1419
+ </SidebarMenuButton>
1420
+ </SidebarMenuItem>
1421
+ </SidebarMenu>
1422
+ <SidebarMenu>
1423
+ <SidebarMenuItem>
1424
+ <SidebarMenuButton>
1425
+ <Search />
1426
+ <span>Search</span>
1427
+ </SidebarMenuButton>
1428
+ </SidebarMenuItem>
1429
+ <SidebarMenuItem>
1430
+ <SidebarMenuButton>
1431
+ <PenToSquare />
1432
+ <span>New chat</span>
1433
+ </SidebarMenuButton>
1434
+ </SidebarMenuItem>
1435
+ <SidebarMenuItem>
1436
+ <SidebarMenuButton>
1437
+ <Globe />
1438
+ <span>Browse web</span>
1439
+ </SidebarMenuButton>
1440
+ </SidebarMenuItem>
1441
+ </SidebarMenu>
1442
+ </SidebarHeader>
1443
+
1444
+ <SidebarContent className="data-[collapsible=icon]:opacity-0 transition-opacity duration-200">
1445
+ {chatHistory.map((group) => (
1446
+ <SidebarGroup key={group.label}>
1447
+ <SidebarGroupLabel>{group.label}</SidebarGroupLabel>
1448
+ <SidebarGroupContent>
1449
+ <SidebarMenu>
1450
+ {group.chats.map((chat) => (
1451
+ <SidebarMenuItem key={chat.title}>
1452
+ <SidebarMenuButton isActive={chat.active}>
1453
+ <span>{chat.title}</span>
1454
+ </SidebarMenuButton>
1455
+ <SidebarMenuAction showOnHover>
1456
+ <Trash />
1457
+ </SidebarMenuAction>
1458
+ </SidebarMenuItem>
1459
+ ))}
1460
+ </SidebarMenu>
1461
+ </SidebarGroupContent>
1462
+ </SidebarGroup>
1463
+ ))}
1464
+ </SidebarContent>
1465
+
1466
+ <SidebarFooter>
1467
+ <SidebarMenu>
1468
+ <SidebarMenuItem>
1469
+ <SidebarMenuButton className="p-1!">
1470
+ <Avatar className="size-6 shrink-0 text-xs" shape="circle">
1471
+ <AvatarFallback>JD</AvatarFallback>
1472
+ </Avatar>
1473
+ <span>John Doe</span>
1474
+ </SidebarMenuButton>
1475
+ </SidebarMenuItem>
1476
+ </SidebarMenu>
1477
+ </SidebarFooter>
1478
+ </SidebarPanel>
1479
+ </SidebarAside>
1480
+ </Sidebar>
1481
+
1482
+ <SidebarMain>
1483
+ <header className="flex h-12 items-center gap-2 border-b border-surface-200 dark:border-surface-700 px-4">
1484
+ <SidebarTrigger as={Button} severity="secondary" variant="text" size="small" iconOnly>
1485
+ <SidebarIcon />
1486
+ </SidebarTrigger>
1487
+ </header>
1488
+ <div className="flex-1 p-4 flex flex-col gap-4">
1489
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 h-48"></div>
1490
+ <div className="rounded-lg bg-surface-100 dark:bg-surface-800 flex-1"></div>
1491
+ </div>
1492
+ </SidebarMain>
1493
+ </SidebarLayout>
1494
+ </div>
1495
+ );
1496
+ }
1497
+ ```
1498
+
1499
+ ## Related
1500
+
1501
+ ### Sub-Components
1502
+
1503
+ See [Primitive API](/docs/primitive/components/sidebar#api) for `SidebarLayout`, `SidebarRoot`, `SidebarSpacer`, `SidebarAside`, `SidebarPanel`, `SidebarHeader`, `SidebarContent`, `SidebarFooter`, `SidebarGroup`, `SidebarGroupLabel`, `SidebarGroupContent`, `SidebarMenu`, `SidebarMenuItem`, `SidebarMenuButton`, `SidebarMenuAction`, `SidebarMenuBadge`, `SidebarMenuSub`, `SidebarMenuSubItem`, `SidebarMenuSubButton`, `SidebarTrigger`, `SidebarRail`, `SidebarMain`, `SidebarBackdrop` component documentation.
1504
+
1505
+ ### Hooks
1506
+
1507
+ See [Headless API](/docs/headless/components/sidebar) for `useSidebar`, `useSidebarLayout`, `useSidebarMenuItem` hook documentation.
1508
+
1509
+ ### Accessibility
1510
+
1511
+ See [Sidebar Primitive](/docs/primitive/components/sidebar#accessibility) for WAI-ARIA compliance details and keyboard support.