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