@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,1346 @@
1
+ # AutoComplete
2
+
3
+ AutoComplete is an input component that provides real-time suggestions when being typed.
4
+
5
+ ```tsx
6
+ 'use client';
7
+ import {
8
+ AutoComplete,
9
+ AutoCompleteEmpty,
10
+ AutoCompleteInput,
11
+ AutoCompleteList,
12
+ AutoCompleteOption,
13
+ AutoCompletePopup,
14
+ AutoCompletePortal,
15
+ AutoCompletePositioner
16
+ } from '@/components/ui/autocomplete';
17
+ import { Label } from '@/components/ui/label';
18
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
19
+ import * as React from 'react';
20
+
21
+ export default function Preview() {
22
+ const [filtered, setFiltered] = React.useState<string[]>([]);
23
+
24
+ const search = (event: AutoCompleteCompleteEvent) => {
25
+ const query = event.query.toLowerCase();
26
+
27
+ setFiltered(query ? options.filter((item) => item.toLowerCase().includes(query)) : [...options]);
28
+ };
29
+
30
+ return (
31
+ <div className="flex justify-center">
32
+ <div className="flex flex-col">
33
+ <Label>Search tutorials</Label>
34
+ <AutoComplete options={filtered} onComplete={search} className="w-full md:w-72 mt-2">
35
+ <AutoCompleteInput placeholder="Search..." className="w-full" />
36
+ <AutoCompletePortal>
37
+ <AutoCompletePositioner>
38
+ <AutoCompletePopup>
39
+ <AutoCompleteList>
40
+ {filtered.map((item, index) => (
41
+ <AutoCompleteOption key={item} index={index} uKey={item}>
42
+ {item}
43
+ </AutoCompleteOption>
44
+ ))}
45
+ <AutoCompleteEmpty className="text-sm">No results found</AutoCompleteEmpty>
46
+ </AutoCompleteList>
47
+ </AutoCompletePopup>
48
+ </AutoCompletePositioner>
49
+ </AutoCompletePortal>
50
+ </AutoComplete>
51
+ <small className="text-surface-500 mt-1.5 opacity-75">
52
+ Type <em className="underline">react</em> to see suggestions
53
+ </small>
54
+ </div>
55
+ </div>
56
+ );
57
+ }
58
+
59
+ const options: string[] = [
60
+ 'responsive design fundamentals',
61
+ 'redux toolkit crash course',
62
+ 'real-time chat app tutorial',
63
+ 'reading json files in node',
64
+ 'react hooks tutorial',
65
+ 'react server components explained',
66
+ 'react vs vue 2024',
67
+ 'react native crash course',
68
+ 'react 19 new features',
69
+ 'react context api best practices',
70
+ 'react testing library guide',
71
+ 'react router v7 tutorial',
72
+ 'react performance optimization',
73
+ 'react suspense and lazy loading',
74
+ 'react state management comparison',
75
+ 'react form validation',
76
+ 'react design patterns',
77
+ 'react authentication tutorial',
78
+ 'react with typescript beginner',
79
+ 'react animation libraries',
80
+ 'react deploy to production'
81
+ ];
82
+ ```
83
+
84
+ ## Installation
85
+
86
+ <DocTabs value="CLI">
87
+ <DocTabsList>
88
+ <DocTabsTab value="CLI">Shadcn CLI</DocTabsTab>
89
+ <DocTabsTab value="Manual">Manual</DocTabsTab>
90
+ </DocTabsList>
91
+ <DocTabsPanel value="CLI">
92
+ ```bash
93
+ npx shadcn@latest add https://primereact.dev/r/autocomplete.json
94
+ ```
95
+ </DocTabsPanel>
96
+ <DocTabsPanel value="Manual">
97
+ Copy and paste the following code into your project
98
+ <DocSourceViewer name="components/ui/autocomplete" />
99
+ Update the import paths to match your project setup.
100
+ </DocTabsPanel>
101
+ </DocTabs>
102
+
103
+ ## Usage
104
+
105
+ ```tsx
106
+ import { AutoComplete, AutoCompleteInput, AutoCompleteList, AutoCompleteOption, AutoCompletePopup, AutoCompletePortal, AutoCompletePositioner } from '@/components/ui/autocomplete';
107
+ ```
108
+
109
+ ```tsx
110
+ <AutoComplete options={items} optionLabel="label" onComplete={search}>
111
+ <AutoCompleteInput placeholder="Search..." />
112
+ <AutoCompletePortal>
113
+ <AutoCompletePositioner>
114
+ <AutoCompletePopup>
115
+ <AutoCompleteList>
116
+ {items.map((item, index) => (
117
+ <AutoCompleteOption key={index} index={index}>
118
+ {item.label}
119
+ </AutoCompleteOption>
120
+ ))}
121
+ </AutoCompleteList>
122
+ </AutoCompletePopup>
123
+ </AutoCompletePositioner>
124
+ </AutoCompletePortal>
125
+ </AutoComplete>
126
+ ```
127
+
128
+ ## Examples
129
+
130
+ ### Basic
131
+
132
+ An input that filters and suggests options as the user types.
133
+
134
+ ```tsx
135
+ 'use client';
136
+ import {
137
+ AutoComplete,
138
+ AutoCompleteEmpty,
139
+ AutoCompleteInput,
140
+ AutoCompleteList,
141
+ AutoCompleteOption,
142
+ AutoCompletePopup,
143
+ AutoCompletePortal,
144
+ AutoCompletePositioner
145
+ } from '@/components/ui/autocomplete';
146
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
147
+ import * as React from 'react';
148
+
149
+ interface Command {
150
+ label: string;
151
+ shortcut: string;
152
+ }
153
+
154
+ const commands: Command[] = [
155
+ { label: 'New File', shortcut: '⌘N' },
156
+ { label: 'Open File', shortcut: '⌘O' },
157
+ { label: 'Save', shortcut: '⌘S' },
158
+ { label: 'Save As', shortcut: '⇧⌘S' },
159
+ { label: 'Find', shortcut: '⌘F' },
160
+ { label: 'Replace', shortcut: '⌘H' },
161
+ { label: 'Go to Line', shortcut: '⌘G' },
162
+ { label: 'Toggle Sidebar', shortcut: '⌘B' },
163
+ { label: 'Split Editor', shortcut: '⌘\\' },
164
+ { label: 'Close Tab', shortcut: '⌘W' }
165
+ ];
166
+
167
+ export default function BasicDemo() {
168
+ const [filteredCommands, setFilteredCommands] = React.useState<Command[]>([]);
169
+
170
+ const search = (event: AutoCompleteCompleteEvent) => {
171
+ const query = event.query.toLowerCase();
172
+
173
+ setFilteredCommands(query ? commands.filter((cmd) => cmd.label.toLowerCase().includes(query)) : [...commands]);
174
+ };
175
+
176
+ return (
177
+ <div className="flex justify-center">
178
+ <AutoComplete options={filteredCommands} optionLabel="label" onComplete={search} className="w-full md:w-56">
179
+ <AutoCompleteInput placeholder="Type a command..." className="w-full" />
180
+
181
+ <AutoCompletePortal>
182
+ <AutoCompletePositioner>
183
+ <AutoCompletePopup>
184
+ <AutoCompleteList>
185
+ {filteredCommands.map((cmd, index) => (
186
+ <AutoCompleteOption key={cmd.label} index={index} uKey={cmd.label}>
187
+ <div className="flex items-center justify-between w-full">
188
+ <span>{cmd.label}</span>
189
+ <kbd className="inline-flex items-center justify-center min-w-8 px-1.5 py-0.5 text-xs font-medium rounded bg-surface-100 dark:bg-surface-700 text-surface-600 dark:text-surface-300 border border-surface-200 dark:border-surface-600">
190
+ {cmd.shortcut}
191
+ </kbd>
192
+ </div>
193
+ </AutoCompleteOption>
194
+ ))}
195
+ <AutoCompleteEmpty className="text-sm">No commands found</AutoCompleteEmpty>
196
+ </AutoCompleteList>
197
+ </AutoCompletePopup>
198
+ </AutoCompletePositioner>
199
+ </AutoCompletePortal>
200
+ </AutoComplete>
201
+ </div>
202
+ );
203
+ }
204
+ ```
205
+
206
+ ### Trigger
207
+
208
+ Use `AutoComplete.Trigger` inside the root to display a trigger toggle button that opens the suggestion list.
209
+
210
+ ```tsx
211
+ 'use client';
212
+ import {
213
+ AutoComplete,
214
+ AutoCompleteInput,
215
+ AutoCompleteList,
216
+ AutoCompletePopup,
217
+ AutoCompletePortal,
218
+ AutoCompletePositioner,
219
+ AutoCompleteTrigger
220
+ } from '@/components/ui/autocomplete';
221
+ import { InputGroup, InputGroupAddon } from '@/components/ui/inputgroup';
222
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
223
+ import * as React from 'react';
224
+
225
+ export default function TriggerDemo() {
226
+ const [items, setItems] = React.useState<string[] | number[]>([...Array(10).keys()]);
227
+
228
+ const search = (event: AutoCompleteCompleteEvent) => {
229
+ setItems(event.query ? [...Array(10).keys()].map((item) => event.query + '-' + item) : [...Array(10).keys()]);
230
+ };
231
+
232
+ return (
233
+ <div className="flex justify-center">
234
+ <AutoComplete options={items} onComplete={search}>
235
+ <InputGroup>
236
+ <AutoCompleteInput />
237
+ <InputGroupAddon>
238
+ <AutoCompleteTrigger />
239
+ </InputGroupAddon>
240
+ </InputGroup>
241
+
242
+ <AutoCompletePortal>
243
+ <AutoCompletePositioner>
244
+ <AutoCompletePopup>
245
+ <AutoCompleteList />
246
+ </AutoCompletePopup>
247
+ </AutoCompletePositioner>
248
+ </AutoCompletePortal>
249
+ </AutoComplete>
250
+ </div>
251
+ );
252
+ }
253
+ ```
254
+
255
+ ### Chips
256
+
257
+ Use `AutoComplete.Input` with `AutoComplete.Value` inside `AutoComplete.Trigger` to compose a chip-based tag input. Selected items are displayed as removable chips inside the value area while the input remains editable for searching.
258
+
259
+ ```tsx
260
+ 'use client';
261
+ import {
262
+ AutoComplete,
263
+ AutoCompleteEmpty,
264
+ AutoCompleteList,
265
+ AutoCompletePopup,
266
+ AutoCompletePortal,
267
+ AutoCompletePositioner
268
+ } from '@/components/ui/autocomplete';
269
+ import { Chip, ChipLabel, ChipRemove } from '@/components/ui/chip';
270
+ import { Times } from '@primeicons/react';
271
+ import {
272
+ AutoComplete as PRAutoComplete,
273
+ AutoCompleteValue,
274
+ type AutoCompleteCompleteEvent,
275
+ type AutoCompleteInputValueChangeEvent,
276
+ type AutoCompleteRootInstance,
277
+ type AutoCompleteValueChangeEvent
278
+ } from '@primereact/ui/autocomplete';
279
+ import type { ChipRootRemoveEvent } from 'primereact/chip';
280
+ import * as React from 'react';
281
+
282
+ const allTags = [
283
+ 'JavaScript',
284
+ 'TypeScript',
285
+ 'React',
286
+ 'Vue',
287
+ 'Angular',
288
+ 'Svelte',
289
+ 'Next.js',
290
+ 'Nuxt',
291
+ 'Node.js',
292
+ 'Deno',
293
+ 'Python',
294
+ 'Go',
295
+ 'Rust',
296
+ 'Java',
297
+ 'GraphQL',
298
+ 'REST',
299
+ 'Docker',
300
+ 'Kubernetes'
301
+ ];
302
+
303
+ export default function ChipDemo() {
304
+ const [items, setItems] = React.useState<string[]>([]);
305
+ const [selectedTags, setSelectedTags] = React.useState<string[]>(['React', 'TypeScript']);
306
+ const [inputValue, setInputValue] = React.useState('');
307
+ const justSelectedRef = React.useRef(false);
308
+ const autoCompleteRef = React.useRef<AutoCompleteRootInstance>(null);
309
+
310
+ React.useEffect(() => {
311
+ setItems(allTags.filter((tag) => !selectedTags.includes(tag)));
312
+ }, [selectedTags]);
313
+
314
+ const search = (event: AutoCompleteCompleteEvent) => {
315
+ const query = (event.query || '').toLowerCase();
316
+
317
+ setItems(allTags.filter((tag) => tag.toLowerCase().includes(query) && !selectedTags.includes(tag)));
318
+ };
319
+
320
+ const onValueChange = (event: AutoCompleteValueChangeEvent) => {
321
+ const value = event.value as string;
322
+
323
+ if (value) {
324
+ setSelectedTags((prev) => (prev.includes(value) ? prev : [...prev, value]));
325
+ justSelectedRef.current = true;
326
+ }
327
+ };
328
+
329
+ const onInputValueChange = (event: AutoCompleteInputValueChangeEvent) => {
330
+ if (justSelectedRef.current) {
331
+ justSelectedRef.current = false;
332
+ setInputValue('');
333
+
334
+ return;
335
+ }
336
+
337
+ setInputValue(event.query);
338
+ };
339
+
340
+ const removeTag = (e: ChipRootRemoveEvent, tag: string) => {
341
+ e.originalEvent.stopPropagation();
342
+ const currentIndex = selectedTags.indexOf(tag);
343
+ const next = selectedTags.filter((t) => t !== tag);
344
+
345
+ setSelectedTags(next);
346
+
347
+ requestAnimationFrame(() => {
348
+ if (currentIndex > 0) {
349
+ const rootElement = autoCompleteRef.current?.elementRef.current;
350
+ const removeButtons = rootElement?.querySelectorAll<HTMLElement>('[data-scope="chip"][data-part="remove"]');
351
+
352
+ removeButtons?.[currentIndex - 1]?.focus();
353
+ } else {
354
+ autoCompleteRef.current?.focus();
355
+ }
356
+ });
357
+ };
358
+
359
+ const onInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
360
+ if (e.code === 'Backspace' && !inputValue && selectedTags.length > 0) {
361
+ setSelectedTags((prev) => prev.slice(0, -1));
362
+ }
363
+ };
364
+
365
+ return (
366
+ <div className="flex justify-center">
367
+ <AutoComplete
368
+ ref={autoCompleteRef}
369
+ options={items}
370
+ onComplete={search}
371
+ value={null}
372
+ inputValue={inputValue}
373
+ onValueChange={onValueChange}
374
+ onInputValueChange={onInputValueChange}
375
+ className="w-full rounded-md border border-surface-300 dark:border-surface-700 bg-surface-0 dark:bg-surface-950 shadow-[0_1px_2px_0_rgba(18,18,23,0.05)] focus-within:border-primary! transition-colors duration-200 p-1"
376
+ >
377
+ <PRAutoComplete.Trigger as="div" className="flex flex-wrap gap-1 items-center">
378
+ <AutoCompleteValue placeholder="Add a tag...">
379
+ <div className="flex flex-wrap gap-1 items-center">
380
+ {selectedTags?.map((tag) => (
381
+ <Chip key={tag} className="py-0.5" onRemove={(e: ChipRootRemoveEvent) => removeTag(e, tag)}>
382
+ <ChipLabel className="text-xs">{tag}</ChipLabel>
383
+ <ChipRemove>
384
+ <Times className="text-[0.5rem]!" />
385
+ </ChipRemove>
386
+ </Chip>
387
+ ))}
388
+
389
+ <PRAutoComplete.Input
390
+ placeholder="Search..."
391
+ className="text-sm px-2 py-0.5 outline-none border-none bg-transparent flex-1 min-w-20 text-surface-700 dark:text-surface-0 placeholder:text-surface-500 dark:placeholder:text-surface-400"
392
+ onKeyDown={onInputKeyDown}
393
+ />
394
+ </div>
395
+ </AutoCompleteValue>
396
+ </PRAutoComplete.Trigger>
397
+
398
+ <AutoCompletePortal>
399
+ <AutoCompletePositioner>
400
+ <AutoCompletePopup>
401
+ <AutoCompleteList />
402
+ <AutoCompleteEmpty className="text-sm">No commands found</AutoCompleteEmpty>
403
+ </AutoCompletePopup>
404
+ </AutoCompletePositioner>
405
+ </AutoCompletePortal>
406
+ </AutoComplete>
407
+ </div>
408
+ );
409
+ }
410
+ ```
411
+
412
+ ### Clear
413
+
414
+ Use `AutoComplete.Clear` inside the root to display a clear button that resets the input value.
415
+
416
+ ```tsx
417
+ 'use client';
418
+ import {
419
+ AutoComplete,
420
+ AutoCompleteClear,
421
+ AutoCompleteEmpty,
422
+ AutoCompleteInput,
423
+ AutoCompleteList,
424
+ AutoCompleteOption,
425
+ AutoCompletePopup,
426
+ AutoCompletePortal,
427
+ AutoCompletePositioner
428
+ } from '@/components/ui/autocomplete';
429
+ import { IconField, IconFieldInset } from '@/components/ui/iconfield';
430
+ import { Tag } from '@/components/ui/tag';
431
+ import { Times } from '@primeicons/react';
432
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
433
+ import * as React from 'react';
434
+
435
+ const productCategories = [
436
+ { label: 'Electronics', value: 'electronics', count: 1247 },
437
+ { label: 'Clothing', value: 'clothing', count: 856 },
438
+ { label: 'Garden', value: 'home', count: 634 },
439
+ { label: 'Sports', value: 'sports', count: 421 },
440
+ { label: 'Books', value: 'books', count: 2103 },
441
+ { label: 'Toys', value: 'toys', count: 312 }
442
+ ];
443
+
444
+ export default function ClearIconDemo() {
445
+ const [filteredCategories, setFilteredCategories] = React.useState<typeof productCategories>([]);
446
+
447
+ const search = (event: AutoCompleteCompleteEvent) => {
448
+ const query = event.query.toLowerCase();
449
+
450
+ setFilteredCategories(query ? productCategories.filter((cat) => cat.label.toLowerCase().includes(query)) : [...productCategories]);
451
+ };
452
+
453
+ return (
454
+ <div className="flex justify-center">
455
+ <AutoComplete options={filteredCategories} optionLabel="label" onComplete={search} className="w-full md:w-56">
456
+ <IconField className="w-full">
457
+ <AutoCompleteInput placeholder="Search categories..." />
458
+ <IconFieldInset>
459
+ <AutoCompleteClear>
460
+ <Times />
461
+ </AutoCompleteClear>
462
+ </IconFieldInset>
463
+ </IconField>
464
+
465
+ <AutoCompletePortal>
466
+ <AutoCompletePositioner>
467
+ <AutoCompletePopup>
468
+ <AutoCompleteList>
469
+ {filteredCategories.map((cat, index) => (
470
+ <AutoCompleteOption key={cat.value} index={index} uKey={cat.value}>
471
+ <div className="flex items-center justify-between w-full">
472
+ <span>{cat.label}</span>
473
+ <Tag severity="secondary" rounded>
474
+ {cat.count}
475
+ </Tag>
476
+ </div>
477
+ </AutoCompleteOption>
478
+ ))}
479
+ <AutoCompleteEmpty className="text-sm">No categories found</AutoCompleteEmpty>
480
+ </AutoCompleteList>
481
+ </AutoCompletePopup>
482
+ </AutoCompletePositioner>
483
+ </AutoCompletePortal>
484
+ </AutoComplete>
485
+ </div>
486
+ );
487
+ }
488
+ ```
489
+
490
+ ### Custom Option
491
+
492
+ Customize option content using a render function inside `AutoComplete.Option` that receives the option instance including the `selected` state.
493
+
494
+ ```tsx
495
+ 'use client';
496
+ import {
497
+ AutoComplete,
498
+ AutoCompleteEmpty,
499
+ AutoCompleteInput,
500
+ AutoCompleteList,
501
+ AutoCompleteOption,
502
+ AutoCompletePopup,
503
+ AutoCompletePortal,
504
+ AutoCompletePositioner
505
+ } from '@/components/ui/autocomplete';
506
+ import type { AutoCompleteCompleteEvent, AutoCompleteOptionInstance } from 'primereact/autocomplete';
507
+ import { Avatar, AvatarFallback } from '@/components/ui/avatar';
508
+ import * as React from 'react';
509
+
510
+ interface TeamMember {
511
+ id: number;
512
+ name: string;
513
+ role: string;
514
+ avatar: string;
515
+ status: 'online' | 'away' | 'offline';
516
+ statusClass: string;
517
+ }
518
+
519
+ const teamMembers: TeamMember[] = [
520
+ { id: 1, name: 'Sarah Chen', role: 'Engineering Lead', avatar: 'SC', status: 'online', statusClass: 'bg-green-400' },
521
+ { id: 2, name: 'Alex Rivera', role: 'Senior Developer', avatar: 'AR', status: 'online', statusClass: 'bg-green-400' },
522
+ { id: 3, name: 'Jordan Kim', role: 'UX Designer', avatar: 'JK', status: 'away', statusClass: 'bg-amber-400' },
523
+ { id: 4, name: 'Taylor Morgan', role: 'Product Manager', avatar: 'TM', status: 'offline', statusClass: 'bg-zinc-400' },
524
+ { id: 5, name: 'Morgan Lee', role: 'DevOps Engineer', avatar: 'ML', status: 'online', statusClass: 'bg-green-400' },
525
+ { id: 6, name: 'Casey Jones', role: 'QA Engineer', avatar: 'CJ', status: 'away', statusClass: 'bg-amber-400' }
526
+ ];
527
+
528
+ export default function OptionDemo() {
529
+ const [filteredMembers, setFilteredMembers] = React.useState<TeamMember[]>([]);
530
+
531
+ const search = (event: AutoCompleteCompleteEvent) => {
532
+ const query = event.query.toLowerCase();
533
+
534
+ setFilteredMembers(
535
+ query ? teamMembers.filter((m) => m.name.toLowerCase().includes(query) || m.role.toLowerCase().includes(query)) : [...teamMembers]
536
+ );
537
+ };
538
+
539
+ return (
540
+ <div className="flex justify-center">
541
+ <AutoComplete options={filteredMembers} optionLabel="name" onComplete={search} className="w-full md:w-56">
542
+ <AutoCompleteInput placeholder="Search team members..." className="w-full" />
543
+
544
+ <AutoCompletePortal>
545
+ <AutoCompletePositioner>
546
+ <AutoCompletePopup>
547
+ <AutoCompleteList>
548
+ {filteredMembers.map((member, index) => (
549
+ <AutoCompleteOption key={member.id} index={index} uKey={String(member.id)}>
550
+ {(instance: AutoCompleteOptionInstance) => {
551
+ const { selected } = instance;
552
+
553
+ return (
554
+ <div className="flex items-center gap-3 py-1">
555
+ <div className="relative">
556
+ <Avatar shape="circle" className="w-8 h-8">
557
+ <AvatarFallback>{member.avatar}</AvatarFallback>
558
+ </Avatar>
559
+ <span
560
+ className={`absolute -bottom-0.5 -right-0.5 w-3 h-3 rounded-full border-2 ${selected ? 'border-primary-emphasis' : 'border-surface-0 dark:border-surface-900'} ${member.statusClass}`}
561
+ />
562
+ </div>
563
+ <div className="flex flex-col">
564
+ <span
565
+ className={`font-medium ${selected ? 'text-primary-contrast' : 'text-surface-900 dark:text-surface-0'}`}
566
+ >
567
+ {member.name}
568
+ </span>
569
+ <span
570
+ className={`text-xs ${selected ? 'text-primary-contrast/70' : 'text-surface-500 dark:text-surface-400'}`}
571
+ >
572
+ {member.role}
573
+ </span>
574
+ </div>
575
+ </div>
576
+ );
577
+ }}
578
+ </AutoCompleteOption>
579
+ ))}
580
+ <AutoCompleteEmpty className="text-sm">No members found</AutoCompleteEmpty>
581
+ </AutoCompleteList>
582
+ </AutoCompletePopup>
583
+ </AutoCompletePositioner>
584
+ </AutoCompletePortal>
585
+ </AutoComplete>
586
+ </div>
587
+ );
588
+ }
589
+ ```
590
+
591
+ ### Force Selection
592
+
593
+ Use the `forceSelection` property to validate manual input against the suggestions list. If no match is found, the input value is cleared to ensure the value is always from the suggestion list.
594
+
595
+ ```tsx
596
+ 'use client';
597
+ import { CountryService } from '@/shared/services/country.service';
598
+ import {
599
+ AutoComplete,
600
+ AutoCompleteEmpty,
601
+ AutoCompleteInput,
602
+ AutoCompleteList,
603
+ AutoCompletePopup,
604
+ AutoCompletePortal,
605
+ AutoCompletePositioner
606
+ } from '@/components/ui/autocomplete';
607
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
608
+ import * as React from 'react';
609
+
610
+ interface Country {
611
+ name: string;
612
+ code: string;
613
+ }
614
+
615
+ export default function ForceSelectionDemo() {
616
+ const [countries, setCountries] = React.useState<Country[]>([]);
617
+ const [filteredCountries, setFilteredCountries] = React.useState<Country[]>([]);
618
+
619
+ React.useEffect(() => {
620
+ CountryService.getCountries().then((data) => setCountries(data));
621
+ }, []);
622
+
623
+ const search = (event: AutoCompleteCompleteEvent) => {
624
+ if (!event.query.trim().length) {
625
+ setFilteredCountries(countries);
626
+ } else {
627
+ setFilteredCountries(
628
+ countries.filter((country) => {
629
+ return country.name.toLowerCase().startsWith(event.query.toLowerCase());
630
+ })
631
+ );
632
+ }
633
+ };
634
+
635
+ return (
636
+ <div className="flex justify-center">
637
+ <AutoComplete
638
+ options={filteredCountries}
639
+ optionKey="code"
640
+ optionLabel="name"
641
+ forceSelection
642
+ onComplete={search}
643
+ className="w-full md:w-56"
644
+ >
645
+ <AutoCompleteInput className="w-full" />
646
+
647
+ <AutoCompletePortal>
648
+ <AutoCompletePositioner>
649
+ <AutoCompletePopup>
650
+ <AutoCompleteList />
651
+ <AutoCompleteEmpty className="text-sm">No countries found</AutoCompleteEmpty>
652
+ </AutoCompletePopup>
653
+ </AutoCompletePositioner>
654
+ </AutoCompletePortal>
655
+ </AutoComplete>
656
+ </div>
657
+ );
658
+ }
659
+ ```
660
+
661
+ ### Group
662
+
663
+ #### Simple
664
+
665
+ Options can be grouped using the `optionGroupLabel` and `optionGroupChildren` properties.
666
+
667
+ ```tsx
668
+ 'use client';
669
+ import {
670
+ AutoComplete,
671
+ AutoCompleteEmpty,
672
+ AutoCompleteInput,
673
+ AutoCompleteList,
674
+ AutoCompletePopup,
675
+ AutoCompletePortal,
676
+ AutoCompletePositioner
677
+ } from '@/components/ui/autocomplete';
678
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
679
+ import * as React from 'react';
680
+
681
+ interface Technology {
682
+ label: string;
683
+ value: string;
684
+ }
685
+
686
+ interface TechCategory {
687
+ label: string;
688
+ code: string;
689
+ items: Technology[];
690
+ }
691
+
692
+ const techStack: TechCategory[] = [
693
+ {
694
+ label: 'Frontend',
695
+ code: 'FE',
696
+ items: [
697
+ { label: 'React', value: 'react' },
698
+ { label: 'Vue', value: 'vue' },
699
+ { label: 'Angular', value: 'angular' },
700
+ { label: 'Svelte', value: 'svelte' }
701
+ ]
702
+ },
703
+ {
704
+ label: 'Backend',
705
+ code: 'BE',
706
+ items: [
707
+ { label: 'Node.js', value: 'nodejs' },
708
+ { label: 'Python', value: 'python' },
709
+ { label: 'Java', value: 'java' },
710
+ { label: 'Go', value: 'go' }
711
+ ]
712
+ },
713
+ {
714
+ label: 'Database',
715
+ code: 'DB',
716
+ items: [
717
+ { label: 'PostgreSQL', value: 'postgresql' },
718
+ { label: 'MongoDB', value: 'mongodb' },
719
+ { label: 'Redis', value: 'redis' },
720
+ { label: 'MySQL', value: 'mysql' }
721
+ ]
722
+ }
723
+ ];
724
+
725
+ const filterItems = (items: Technology[], query: string): Technology[] => {
726
+ if (!query) return items;
727
+
728
+ const normalizedQuery = query.toLowerCase();
729
+
730
+ return items.filter((item) => item.label.toLowerCase().includes(normalizedQuery));
731
+ };
732
+
733
+ export default function GroupDemo() {
734
+ const [filteredTech, setFilteredTech] = React.useState<TechCategory[]>([]);
735
+
736
+ const search = (event: AutoCompleteCompleteEvent) => {
737
+ const query = event.query;
738
+ const _filteredTech: TechCategory[] = [];
739
+
740
+ for (const category of techStack) {
741
+ const filteredItems = filterItems(category.items, query);
742
+
743
+ if (filteredItems.length) {
744
+ _filteredTech.push({ ...category, items: filteredItems });
745
+ }
746
+ }
747
+
748
+ setFilteredTech(_filteredTech);
749
+ };
750
+
751
+ return (
752
+ <div className="flex justify-center">
753
+ <AutoComplete
754
+ options={filteredTech}
755
+ optionLabel="label"
756
+ optionGroupLabel="label"
757
+ optionGroupChildren="items"
758
+ onComplete={search}
759
+ className="w-full md:w-56"
760
+ >
761
+ <AutoCompleteInput placeholder="Search technologies..." className="w-full" />
762
+
763
+ <AutoCompletePortal>
764
+ <AutoCompletePositioner>
765
+ <AutoCompletePopup>
766
+ <AutoCompleteList />
767
+ <AutoCompleteEmpty className="text-sm">No option found</AutoCompleteEmpty>
768
+ </AutoCompletePopup>
769
+ </AutoCompletePositioner>
770
+ </AutoCompletePortal>
771
+ </AutoComplete>
772
+ </div>
773
+ );
774
+ }
775
+ ```
776
+
777
+ #### Custom
778
+
779
+ Customize group headers with custom rendering by accessing the list instance inside `AutoComplete.List`.
780
+
781
+ ```tsx
782
+ 'use client';
783
+ import {
784
+ AutoComplete,
785
+ AutoCompleteEmpty,
786
+ AutoCompleteInput,
787
+ AutoCompleteList,
788
+ AutoCompleteOption,
789
+ AutoCompletePopup,
790
+ AutoCompletePortal,
791
+ AutoCompletePositioner
792
+ } from '@/components/ui/autocomplete';
793
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
794
+ import type { ListboxListInstance } from 'primereact/listbox';
795
+ import * as React from 'react';
796
+
797
+ interface City {
798
+ label: string;
799
+ value: string;
800
+ }
801
+
802
+ interface CityGroup {
803
+ label: string;
804
+ code: string;
805
+ items: City[];
806
+ }
807
+
808
+ const groupedCities: CityGroup[] = [
809
+ {
810
+ label: 'Germany',
811
+ code: 'DE',
812
+ items: [
813
+ { label: 'Berlin', value: 'Berlin' },
814
+ { label: 'Frankfurt', value: 'Frankfurt' },
815
+ { label: 'Hamburg', value: 'Hamburg' }
816
+ ]
817
+ },
818
+ {
819
+ label: 'USA',
820
+ code: 'US',
821
+ items: [
822
+ { label: 'Chicago', value: 'Chicago' },
823
+ { label: 'Los Angeles', value: 'Los Angeles' },
824
+ { label: 'New York', value: 'New York' }
825
+ ]
826
+ },
827
+ {
828
+ label: 'Japan',
829
+ code: 'JP',
830
+ items: [
831
+ { label: 'Kyoto', value: 'Kyoto' },
832
+ { label: 'Osaka', value: 'Osaka' },
833
+ { label: 'Tokyo', value: 'Tokyo' }
834
+ ]
835
+ }
836
+ ];
837
+
838
+ const countryFlags: Record<string, string> = {
839
+ DE: '\uD83C\uDDE9\uD83C\uDDEA',
840
+ US: '\uD83C\uDDFA\uD83C\uDDF8',
841
+ JP: '\uD83C\uDDEF\uD83C\uDDF5'
842
+ };
843
+
844
+ export default function CustomGroupDemo() {
845
+ const [filteredCities, setFilteredCities] = React.useState<CityGroup[]>([]);
846
+
847
+ const search = (event: AutoCompleteCompleteEvent) => {
848
+ const query = event.query.toLowerCase();
849
+ const filtered: CityGroup[] = [];
850
+
851
+ for (const group of groupedCities) {
852
+ const filteredItems = query ? group.items.filter((item) => item.label.toLowerCase().includes(query)) : group.items;
853
+
854
+ if (filteredItems.length) {
855
+ filtered.push({ ...group, items: filteredItems });
856
+ }
857
+ }
858
+
859
+ setFilteredCities(filtered);
860
+ };
861
+
862
+ return (
863
+ <div className="flex justify-center">
864
+ <AutoComplete
865
+ options={filteredCities}
866
+ optionLabel="label"
867
+ optionGroupLabel="label"
868
+ optionGroupChildren="items"
869
+ onComplete={search}
870
+ className="w-full md:w-56"
871
+ >
872
+ <AutoCompleteInput placeholder="Search a city..." className="w-full" />
873
+
874
+ <AutoCompletePortal>
875
+ <AutoCompletePositioner>
876
+ <AutoCompletePopup>
877
+ <AutoCompleteList className="p-0">
878
+ {(instance: ListboxListInstance) => {
879
+ const { listbox, options } = instance;
880
+
881
+ return (options as unknown[])?.map((option: unknown, index: number) => {
882
+ const isGroup = listbox?.isOptionGroup(option);
883
+
884
+ if (isGroup) {
885
+ const optionGroup = (option as Record<string, unknown>).optionGroup as Record<string, string>;
886
+ const code = optionGroup?.code;
887
+
888
+ return (
889
+ <AutoCompleteOption
890
+ key={index}
891
+ index={index}
892
+ group
893
+ className="flex items-center gap-2 sticky top-0 z-1 bg-surface-0 dark:bg-surface-900 border-b border-surface"
894
+ >
895
+ <span>{countryFlags[code]}</span>
896
+ <span>{optionGroup?.label}</span>
897
+ </AutoCompleteOption>
898
+ );
899
+ }
900
+
901
+ const label = listbox?.getOptionLabel(option);
902
+
903
+ return (
904
+ <AutoCompleteOption key={index} index={index}>
905
+ {label}
906
+ </AutoCompleteOption>
907
+ );
908
+ });
909
+ }}
910
+ </AutoCompleteList>
911
+ <AutoCompleteEmpty className="text-sm">No cities found</AutoCompleteEmpty>
912
+ </AutoCompletePopup>
913
+ </AutoCompletePositioner>
914
+ </AutoCompletePortal>
915
+ </AutoComplete>
916
+ </div>
917
+ );
918
+ }
919
+ ```
920
+
921
+ ### Arrow
922
+
923
+ Use `AutoComplete.Arrow` inside the popup to display an arrow pointing to the trigger element. Set `sideOffset` on `AutoComplete.Positioner` for spacing.
924
+
925
+ ```tsx
926
+ 'use client';
927
+ import {
928
+ AutoComplete,
929
+ AutoCompleteArrow,
930
+ AutoCompleteInput,
931
+ AutoCompleteList,
932
+ AutoCompletePopup,
933
+ AutoCompletePortal,
934
+ AutoCompletePositioner
935
+ } from '@/components/ui/autocomplete';
936
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
937
+ import * as React from 'react';
938
+
939
+ export default function ArrowDemo() {
940
+ const [items, setItems] = React.useState<string[]>([]);
941
+
942
+ const search = (event: AutoCompleteCompleteEvent) => {
943
+ setItems([...Array(10).keys()].map((item) => event.query + '-' + item));
944
+ };
945
+
946
+ return (
947
+ <div className="flex justify-center">
948
+ <AutoComplete options={items} onComplete={search} className="w-full md:w-56">
949
+ <AutoCompleteInput placeholder="Search" className="w-full" />
950
+
951
+ <AutoCompletePortal>
952
+ <AutoCompletePositioner sideOffset={12}>
953
+ <AutoCompletePopup>
954
+ <AutoCompleteArrow />
955
+ <AutoCompleteList />
956
+ </AutoCompletePopup>
957
+ </AutoCompletePositioner>
958
+ </AutoCompletePortal>
959
+ </AutoComplete>
960
+ </div>
961
+ );
962
+ }
963
+ ```
964
+
965
+ ### Fluid
966
+
967
+ Use the `fluid` property to make the autocomplete take up the full width of its container.
968
+
969
+ ```tsx
970
+ 'use client';
971
+ import {
972
+ AutoComplete,
973
+ AutoCompleteInput,
974
+ AutoCompleteList,
975
+ AutoCompletePopup,
976
+ AutoCompletePortal,
977
+ AutoCompletePositioner
978
+ } from '@/components/ui/autocomplete';
979
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
980
+ import * as React from 'react';
981
+
982
+ export default function FluidDemo() {
983
+ const [items, setItems] = React.useState<string[]>([]);
984
+
985
+ const search = (event: AutoCompleteCompleteEvent) => {
986
+ setItems([...Array(10).keys()].map((item) => event.query + '-' + item));
987
+ };
988
+
989
+ return (
990
+ <div>
991
+ <AutoComplete options={items} onComplete={search} fluid>
992
+ <AutoCompleteInput />
993
+
994
+ <AutoCompletePortal>
995
+ <AutoCompletePositioner>
996
+ <AutoCompletePopup>
997
+ <AutoCompleteList />
998
+ </AutoCompletePopup>
999
+ </AutoCompletePositioner>
1000
+ </AutoCompletePortal>
1001
+ </AutoComplete>
1002
+ </div>
1003
+ );
1004
+ }
1005
+ ```
1006
+
1007
+ ### Loading
1008
+
1009
+ Compose a loading indicator alongside the autocomplete input using `InputGroup` to display an async loading state.
1010
+
1011
+ ```tsx
1012
+ 'use client';
1013
+ import { Spinner } from '@primeicons/react';
1014
+ import {
1015
+ AutoComplete,
1016
+ AutoCompleteInput,
1017
+ AutoCompleteList,
1018
+ AutoCompletePopup,
1019
+ AutoCompletePortal,
1020
+ AutoCompletePositioner
1021
+ } from '@/components/ui/autocomplete';
1022
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
1023
+ import { InputGroup, InputGroupAddon } from '@/components/ui/inputgroup';
1024
+ import * as React from 'react';
1025
+
1026
+ export default function LoadingDemo() {
1027
+ const [items, setItems] = React.useState<string[]>([]);
1028
+
1029
+ const search = (event: AutoCompleteCompleteEvent) => {
1030
+ setItems([...Array(10).keys()].map((item) => event.query + '-' + item));
1031
+ };
1032
+
1033
+ return (
1034
+ <div className="flex justify-center">
1035
+ <AutoComplete options={items} onComplete={search} className="w-full md:w-56">
1036
+ <InputGroup>
1037
+ <AutoCompleteInput className="w-full" />
1038
+ <InputGroupAddon>
1039
+ <Spinner className="animate-spin" />
1040
+ </InputGroupAddon>
1041
+ </InputGroup>
1042
+
1043
+ <AutoCompletePortal>
1044
+ <AutoCompletePositioner>
1045
+ <AutoCompletePopup>
1046
+ <AutoCompleteList />
1047
+ </AutoCompletePopup>
1048
+ </AutoCompletePositioner>
1049
+ </AutoCompletePortal>
1050
+ </AutoComplete>
1051
+ </div>
1052
+ );
1053
+ }
1054
+ ```
1055
+
1056
+ ### Sizes
1057
+
1058
+ Use the `size` property to change the size of an autocomplete.
1059
+
1060
+ ```tsx
1061
+ 'use client';
1062
+ import {
1063
+ AutoComplete,
1064
+ AutoCompleteInput,
1065
+ AutoCompleteList,
1066
+ AutoCompletePopup,
1067
+ AutoCompletePortal,
1068
+ AutoCompletePositioner
1069
+ } from '@/components/ui/autocomplete';
1070
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
1071
+ import * as React from 'react';
1072
+
1073
+ export default function SizesDemo() {
1074
+ const [items, setItems] = React.useState<string[]>([]);
1075
+
1076
+ const search = (event: AutoCompleteCompleteEvent) => {
1077
+ setItems([...Array(10).keys()].map((item) => event.query + '-' + item));
1078
+ };
1079
+
1080
+ return (
1081
+ <div className="flex flex-col items-center gap-4">
1082
+ <AutoComplete options={items} onComplete={search}>
1083
+ <AutoCompleteInput size="small" placeholder="Small" />
1084
+
1085
+ <AutoCompletePortal>
1086
+ <AutoCompletePositioner>
1087
+ <AutoCompletePopup>
1088
+ <AutoCompleteList />
1089
+ </AutoCompletePopup>
1090
+ </AutoCompletePositioner>
1091
+ </AutoCompletePortal>
1092
+ </AutoComplete>
1093
+
1094
+ <AutoComplete options={items} onComplete={search}>
1095
+ <AutoCompleteInput placeholder="Normal" />
1096
+
1097
+ <AutoCompletePortal>
1098
+ <AutoCompletePositioner>
1099
+ <AutoCompletePopup>
1100
+ <AutoCompleteList />
1101
+ </AutoCompletePopup>
1102
+ </AutoCompletePositioner>
1103
+ </AutoCompletePortal>
1104
+ </AutoComplete>
1105
+
1106
+ <AutoComplete options={items} onComplete={search}>
1107
+ <AutoCompleteInput size="large" placeholder="Large" />
1108
+
1109
+ <AutoCompletePortal>
1110
+ <AutoCompletePositioner>
1111
+ <AutoCompletePopup>
1112
+ <AutoCompleteList />
1113
+ </AutoCompletePopup>
1114
+ </AutoCompletePositioner>
1115
+ </AutoCompletePortal>
1116
+ </AutoComplete>
1117
+ </div>
1118
+ );
1119
+ }
1120
+ ```
1121
+
1122
+ ### Filled
1123
+
1124
+ Specify the `variant="filled"` property to display the component with a higher visual emphasis than the default outlined style.
1125
+
1126
+ ```tsx
1127
+ 'use client';
1128
+ import {
1129
+ AutoComplete,
1130
+ AutoCompleteInput,
1131
+ AutoCompleteList,
1132
+ AutoCompletePopup,
1133
+ AutoCompletePortal,
1134
+ AutoCompletePositioner
1135
+ } from '@/components/ui/autocomplete';
1136
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
1137
+ import * as React from 'react';
1138
+
1139
+ export default function FilledDemo() {
1140
+ const [items, setItems] = React.useState<string[]>([]);
1141
+
1142
+ const search = (event: AutoCompleteCompleteEvent) => {
1143
+ setItems([...Array(10).keys()].map((item) => event.query + '-' + item));
1144
+ };
1145
+
1146
+ return (
1147
+ <div className="flex justify-center">
1148
+ <AutoComplete options={items} onComplete={search} className="w-full md:w-56">
1149
+ <AutoCompleteInput className="w-full" variant="filled" />
1150
+
1151
+ <AutoCompletePortal>
1152
+ <AutoCompletePositioner>
1153
+ <AutoCompletePopup>
1154
+ <AutoCompleteList />
1155
+ </AutoCompletePopup>
1156
+ </AutoCompletePositioner>
1157
+ </AutoCompletePortal>
1158
+ </AutoComplete>
1159
+ </div>
1160
+ );
1161
+ }
1162
+ ```
1163
+
1164
+ ### Disabled
1165
+
1166
+ Use the `disabled` property to disable an autocomplete.
1167
+
1168
+ ```tsx
1169
+ import {
1170
+ AutoComplete,
1171
+ AutoCompleteInput,
1172
+ AutoCompleteList,
1173
+ AutoCompletePopup,
1174
+ AutoCompletePortal,
1175
+ AutoCompletePositioner
1176
+ } from '@/components/ui/autocomplete';
1177
+
1178
+ export default function DisabledDemo() {
1179
+ return (
1180
+ <div className="flex justify-center">
1181
+ <AutoComplete options={[]} disabled className="w-full md:w-56">
1182
+ <AutoCompleteInput className="w-full" />
1183
+
1184
+ <AutoCompletePortal>
1185
+ <AutoCompletePositioner>
1186
+ <AutoCompletePopup>
1187
+ <AutoCompleteList />
1188
+ </AutoCompletePopup>
1189
+ </AutoCompletePositioner>
1190
+ </AutoCompletePortal>
1191
+ </AutoComplete>
1192
+ </div>
1193
+ );
1194
+ }
1195
+ ```
1196
+
1197
+ ### Invalid
1198
+
1199
+ Specify the `invalid` property to display the component with a red border for validation errors.
1200
+
1201
+ ```tsx
1202
+ 'use client';
1203
+ import {
1204
+ AutoComplete,
1205
+ AutoCompleteInput,
1206
+ AutoCompleteList,
1207
+ AutoCompletePopup,
1208
+ AutoCompletePortal,
1209
+ AutoCompletePositioner
1210
+ } from '@/components/ui/autocomplete';
1211
+ import type { AutoCompleteCompleteEvent, AutoCompleteValueChangeEvent } from 'primereact/autocomplete';
1212
+ import * as React from 'react';
1213
+
1214
+ export default function InvalidDemo() {
1215
+ const [items, setItems] = React.useState<string[]>([]);
1216
+ const [value, setValue] = React.useState<string | null>(null);
1217
+ const [value2, setValue2] = React.useState<string | null>(null);
1218
+
1219
+ const search = (event: AutoCompleteCompleteEvent) => {
1220
+ setItems([...Array(10).keys()].map((item) => event.query + '-' + item));
1221
+ };
1222
+
1223
+ return (
1224
+ <div className="flex flex-wrap justify-center gap-4">
1225
+ <AutoComplete
1226
+ options={items}
1227
+ onComplete={search}
1228
+ onValueChange={(e: AutoCompleteValueChangeEvent) => setValue(e.value as string)}
1229
+ className="w-full md:w-56"
1230
+ invalid={!value}
1231
+ >
1232
+ <AutoCompleteInput placeholder="Search" className="w-full" />
1233
+
1234
+ <AutoCompletePortal>
1235
+ <AutoCompletePositioner>
1236
+ <AutoCompletePopup>
1237
+ <AutoCompleteList />
1238
+ </AutoCompletePopup>
1239
+ </AutoCompletePositioner>
1240
+ </AutoCompletePortal>
1241
+ </AutoComplete>
1242
+
1243
+ <AutoComplete
1244
+ options={items}
1245
+ onComplete={search}
1246
+ onValueChange={(e: AutoCompleteValueChangeEvent) => setValue2(e.value as string)}
1247
+ className="w-full md:w-56"
1248
+ invalid={!value2}
1249
+ >
1250
+ <AutoCompleteInput variant="filled" placeholder="Search" className="w-full" />
1251
+
1252
+ <AutoCompletePortal>
1253
+ <AutoCompletePositioner>
1254
+ <AutoCompletePopup>
1255
+ <AutoCompleteList />
1256
+ </AutoCompletePopup>
1257
+ </AutoCompletePositioner>
1258
+ </AutoCompletePortal>
1259
+ </AutoComplete>
1260
+ </div>
1261
+ );
1262
+ }
1263
+ ```
1264
+
1265
+ ### Focus Behavior
1266
+
1267
+ Customize keyboard and mouse focus behavior with `autoOptionFocus`, `selectOnFocus`, and `focusOnHover` props.
1268
+
1269
+ ```tsx
1270
+ 'use client';
1271
+ import {
1272
+ AutoComplete,
1273
+ AutoCompleteEmpty,
1274
+ AutoCompleteInput,
1275
+ AutoCompleteList,
1276
+ AutoCompletePopup,
1277
+ AutoCompletePortal,
1278
+ AutoCompletePositioner
1279
+ } from '@/components/ui/autocomplete';
1280
+ import { Button } from '@/components/ui/button';
1281
+ import type { AutoCompleteCompleteEvent } from 'primereact/autocomplete';
1282
+ import * as React from 'react';
1283
+
1284
+ export default function FocusBehaviorDemo() {
1285
+ const [items, setItems] = React.useState<string[]>([]);
1286
+ const [autoOptionFocus, setAutoOptionFocus] = React.useState(true);
1287
+ const [selectOnFocus, setSelectOnFocus] = React.useState(false);
1288
+ const [focusOnHover, setFocusOnHover] = React.useState(true);
1289
+
1290
+ const search = (event: AutoCompleteCompleteEvent) => {
1291
+ setItems([...Array(10).keys()].map((item) => event.query + '-' + item));
1292
+ };
1293
+
1294
+ return (
1295
+ <div className="space-y-4">
1296
+ <div className="flex flex-wrap gap-2 justify-center">
1297
+ <Button size="small" severity={autoOptionFocus ? undefined : 'secondary'} onClick={() => setAutoOptionFocus((prev) => !prev)}>
1298
+ autoOptionFocus: {String(autoOptionFocus)}
1299
+ </Button>
1300
+ <Button size="small" severity={selectOnFocus ? undefined : 'secondary'} onClick={() => setSelectOnFocus((prev) => !prev)}>
1301
+ selectOnFocus: {String(selectOnFocus)}
1302
+ </Button>
1303
+ <Button size="small" severity={focusOnHover ? undefined : 'secondary'} onClick={() => setFocusOnHover((prev) => !prev)}>
1304
+ focusOnHover: {String(focusOnHover)}
1305
+ </Button>
1306
+ </div>
1307
+
1308
+ <div className="flex justify-center">
1309
+ <AutoComplete
1310
+ options={items}
1311
+ onComplete={search}
1312
+ autoOptionFocus={autoOptionFocus}
1313
+ selectOnFocus={selectOnFocus}
1314
+ focusOnHover={focusOnHover}
1315
+ className="w-full md:w-56"
1316
+ >
1317
+ <AutoCompleteInput placeholder="Search a city..." className="w-full" />
1318
+
1319
+ <AutoCompletePortal>
1320
+ <AutoCompletePositioner>
1321
+ <AutoCompletePopup>
1322
+ <AutoCompleteList />
1323
+ <AutoCompleteEmpty className="text-sm">No cities found</AutoCompleteEmpty>
1324
+ </AutoCompletePopup>
1325
+ </AutoCompletePositioner>
1326
+ </AutoCompletePortal>
1327
+ </AutoComplete>
1328
+ </div>
1329
+ </div>
1330
+ );
1331
+ }
1332
+ ```
1333
+
1334
+ ## Related
1335
+
1336
+ ### Sub-Components
1337
+
1338
+ See [Primitive API](/docs/primitive/components/autocomplete#api) for `AutoCompleteRoot`, `AutoCompleteInput`, `AutoCompleteTrigger`, `AutoCompleteList`, `AutoCompleteOption`, and other component documentation.
1339
+
1340
+ ### Hooks
1341
+
1342
+ See [Headless API](/docs/headless/components/autocomplete#api) for `useAutoComplete` hook documentation.
1343
+
1344
+ ### Accessibility
1345
+
1346
+ See [AutoComplete Primitive](/docs/primitive/components/autocomplete#accessibility) for WAI-ARIA compliance details and keyboard support.