@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,1004 @@
1
+ # PickList
2
+
3
+ PickList is used to transfer items between two lists with drag-drop and button controls.
4
+
5
+ ```tsx
6
+ 'use client';
7
+ import { AngleDoubleDown } from '@primeicons/react/angle-double-down';
8
+ import { AngleDoubleLeft } from '@primeicons/react/angle-double-left';
9
+ import { AngleDoubleRight } from '@primeicons/react/angle-double-right';
10
+ import { AngleDoubleUp } from '@primeicons/react/angle-double-up';
11
+ import { AngleDown } from '@primeicons/react/angle-down';
12
+ import { AngleLeft } from '@primeicons/react/angle-left';
13
+ import { AngleRight } from '@primeicons/react/angle-right';
14
+ import { AngleUp } from '@primeicons/react/angle-up';
15
+ import { usePickList, type UsePickListValueChangeEvent, type UsePickListSelectionChangeEvent } from '@primereact/headless/picklist';
16
+ import { Avatar } from '@primereact/ui/avatar';
17
+ import { Button } from '@primereact/ui/button';
18
+ import { Label } from '@primereact/ui/label';
19
+ import { Listbox } from '@primereact/ui/listbox';
20
+ import { cn } from '@primeuix/utils';
21
+ import { useState } from 'react';
22
+
23
+ type Member = {
24
+ name: string;
25
+ role: string;
26
+ avatar: string;
27
+ };
28
+
29
+ const members: Member[] = [
30
+ { name: 'Amy Elsner', role: 'Designer', avatar: 'https://primefaces.org/cdn/primevue/images/avatar/amyelsner.png' },
31
+ { name: 'Asiya Javayant', role: 'Engineer', avatar: 'https://primefaces.org/cdn/primevue/images/avatar/asiyajavayant.png' },
32
+ { name: 'Onyama Limba', role: 'Product Manager', avatar: 'https://primefaces.org/cdn/primevue/images/avatar/onyamalimba.png' },
33
+ { name: 'Anna Fali', role: 'Engineer', avatar: 'https://primefaces.org/cdn/primevue/images/avatar/annafali.png' },
34
+ { name: 'Bernardo Dominic', role: 'Designer', avatar: 'https://primefaces.org/cdn/primevue/images/avatar/bernardodominic.png' },
35
+ { name: 'Elwin Sharvill', role: 'Engineer', avatar: 'https://primefaces.org/cdn/primevue/images/avatar/elwinsharvill.png' },
36
+ { name: 'Ioni Bowcher', role: 'QA', avatar: 'https://primefaces.org/cdn/primevue/images/avatar/ionibowcher.png' },
37
+ { name: 'Stephen Shaw', role: 'Engineer', avatar: 'https://primefaces.org/cdn/primevue/images/avatar/stephenshaw.png' }
38
+ ];
39
+
40
+ const optionClassName = cn('group cursor-grab select-none', 'data-dragging:cursor-grabbing data-dragging:opacity-90', 'data-dropping:opacity-100');
41
+
42
+ const renderItem = (member: Member) => (
43
+ <div className="flex items-center gap-3 w-full min-w-0">
44
+ <Avatar.Root shape="circle" size="normal">
45
+ <Avatar.Image src={member.avatar} alt={member.name} />
46
+ <Avatar.Fallback>
47
+ {member.name
48
+ .split(' ')
49
+ .map((n) => n[0])
50
+ .join('')}
51
+ </Avatar.Fallback>
52
+ </Avatar.Root>
53
+ <div className="flex flex-col min-w-0">
54
+ <span className="text-sm font-medium truncate">{member.name}</span>
55
+ <span className="text-xs text-muted-color group-data-selected:text-inherit truncate">{member.role}</span>
56
+ </div>
57
+ </div>
58
+ );
59
+
60
+ export default function Preview() {
61
+ const [source, setSource] = useState(members);
62
+ const [target, setTarget] = useState<Member[]>([]);
63
+ const [selection, setSelection] = useState<Member[]>([]);
64
+
65
+ const pickList = usePickList({
66
+ source,
67
+ target,
68
+ selection,
69
+ draggable: true,
70
+ onValueChange: (e: UsePickListValueChangeEvent) => {
71
+ setSource(e.source as Member[]);
72
+ setTarget(e.target as Member[]);
73
+ },
74
+ onSelectionChange: (e: UsePickListSelectionChangeEvent) => setSelection(e.value as Member[])
75
+ });
76
+
77
+ return (
78
+ <div className="flex justify-center">
79
+ <div className="flex flex-col md:flex-row gap-3 items-stretch w-full max-w-3xl">
80
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
81
+ <Button {...pickList.sourceFirstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
82
+ <AngleDoubleUp />
83
+ </Button>
84
+ <Button {...pickList.sourcePrevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
85
+ <AngleUp />
86
+ </Button>
87
+ <Button {...pickList.sourceNextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
88
+ <AngleDown />
89
+ </Button>
90
+ <Button {...pickList.sourceLastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
91
+ <AngleDoubleDown />
92
+ </Button>
93
+ </div>
94
+
95
+ <div className="flex-1 min-w-0 flex flex-col gap-1.5">
96
+ <Label>Available Members</Label>
97
+ <Listbox.Root
98
+ value={selection}
99
+ onValueChange={(e) => setSelection((e.value as Member[]) ?? [])}
100
+ options={pickList.state.source as Member[]}
101
+ optionLabel="name"
102
+ multiple
103
+ >
104
+ <Listbox.List {...pickList.sourceListProps} className="h-72" style={{ touchAction: 'none' }}>
105
+ {(pickList.state.source as Member[]).map((item, index) => {
106
+ const optionProps = pickList.getOptionProps(item, index, 'source');
107
+
108
+ return (
109
+ <Listbox.Option key={item.name} uKey={item.name} index={index} {...optionProps} className={optionClassName}>
110
+ {renderItem(item)}
111
+ </Listbox.Option>
112
+ );
113
+ })}
114
+ </Listbox.List>
115
+ </Listbox.Root>
116
+ </div>
117
+
118
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
119
+ <Button
120
+ {...pickList.moveToTargetProps}
121
+ severity="secondary"
122
+ size="small"
123
+ iconOnly
124
+ aria-label="Move to target"
125
+ className="rotate-90 md:rotate-0"
126
+ >
127
+ <AngleRight />
128
+ </Button>
129
+ <Button
130
+ {...pickList.moveAllToTargetProps}
131
+ severity="secondary"
132
+ size="small"
133
+ iconOnly
134
+ aria-label="Move all to target"
135
+ className="rotate-90 md:rotate-0"
136
+ >
137
+ <AngleDoubleRight />
138
+ </Button>
139
+ <Button
140
+ {...pickList.moveToSourceProps}
141
+ severity="secondary"
142
+ size="small"
143
+ iconOnly
144
+ aria-label="Move to source"
145
+ className="rotate-90 md:rotate-0"
146
+ >
147
+ <AngleLeft />
148
+ </Button>
149
+ <Button
150
+ {...pickList.moveAllToSourceProps}
151
+ severity="secondary"
152
+ size="small"
153
+ iconOnly
154
+ aria-label="Move all to source"
155
+ className="rotate-90 md:rotate-0"
156
+ >
157
+ <AngleDoubleLeft />
158
+ </Button>
159
+ </div>
160
+
161
+ <div className="flex-1 min-w-0 flex flex-col gap-1.5">
162
+ <Label>Team Members</Label>
163
+ <Listbox.Root
164
+ value={selection}
165
+ onValueChange={(e) => setSelection((e.value as Member[]) ?? [])}
166
+ options={pickList.state.target as Member[]}
167
+ optionLabel="name"
168
+ multiple
169
+ >
170
+ <Listbox.List {...pickList.targetListProps} className="h-72" style={{ touchAction: 'none' }}>
171
+ {(pickList.state.target as Member[]).map((item, index) => {
172
+ const optionProps = pickList.getOptionProps(item, index, 'target');
173
+
174
+ return (
175
+ <Listbox.Option key={item.name} uKey={item.name} index={index} {...optionProps} className={optionClassName}>
176
+ {renderItem(item)}
177
+ </Listbox.Option>
178
+ );
179
+ })}
180
+ </Listbox.List>
181
+ </Listbox.Root>
182
+ </div>
183
+
184
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
185
+ <Button {...pickList.targetFirstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
186
+ <AngleDoubleUp />
187
+ </Button>
188
+ <Button {...pickList.targetPrevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
189
+ <AngleUp />
190
+ </Button>
191
+ <Button {...pickList.targetNextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
192
+ <AngleDown />
193
+ </Button>
194
+ <Button {...pickList.targetLastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
195
+ <AngleDoubleDown />
196
+ </Button>
197
+ </div>
198
+ </div>
199
+ </div>
200
+ );
201
+ }
202
+ ```
203
+
204
+ ## Usage
205
+
206
+ PickList is a headless hook that manages two lists with transfer, reorder, and optional drag-and-drop between them. It works with **Listbox** for built-in selection and keyboard navigation.
207
+
208
+ ```tsx
209
+ import { usePickList } from '@primereact/headless/picklist';
210
+ ```
211
+
212
+ ```tsx
213
+ const pickList = usePickList({
214
+ source,
215
+ target,
216
+ selection,
217
+ draggable: true,
218
+ onValueChange: (e) => {
219
+ setSource(e.source);
220
+ setTarget(e.target);
221
+ },
222
+ onSelectionChange: (e) => setSelection(e.value)
223
+ });
224
+ ```
225
+
226
+ ## Examples
227
+
228
+ ### Basic
229
+
230
+ Transfer items between two lists using the arrow buttons. Select items and click the transfer buttons to move them.
231
+
232
+ ```tsx
233
+ 'use client';
234
+ import { AngleDoubleDown } from '@primeicons/react/angle-double-down';
235
+ import { AngleDoubleLeft } from '@primeicons/react/angle-double-left';
236
+ import { AngleDoubleRight } from '@primeicons/react/angle-double-right';
237
+ import { AngleDoubleUp } from '@primeicons/react/angle-double-up';
238
+ import { AngleDown } from '@primeicons/react/angle-down';
239
+ import { AngleLeft } from '@primeicons/react/angle-left';
240
+ import { AngleRight } from '@primeicons/react/angle-right';
241
+ import { AngleUp } from '@primeicons/react/angle-up';
242
+ import { usePickList, type UsePickListValueChangeEvent, type UsePickListSelectionChangeEvent } from '@primereact/headless/picklist';
243
+ import { Button } from '@primereact/ui/button';
244
+ import { Label } from '@primereact/ui/label';
245
+ import { Listbox } from '@primereact/ui/listbox';
246
+ import { cn } from '@primeuix/utils';
247
+ import { useState } from 'react';
248
+
249
+ const people = [
250
+ { name: 'Amy Elsner' },
251
+ { name: 'Asiya Javayant' },
252
+ { name: 'Onyama Limba' },
253
+ { name: 'Anna Fali' },
254
+ { name: 'Bernardo Dominic' },
255
+ { name: 'Elwin Sharvill' },
256
+ { name: 'Ioni Bowcher' },
257
+ { name: 'Stephen Shaw' },
258
+ { name: 'Ivan Magalhaes' },
259
+ { name: 'Xuxue Feng' }
260
+ ];
261
+
262
+ type Person = (typeof people)[0];
263
+
264
+ const optionClassName = cn('cursor-grab select-none', 'data-dragging:cursor-grabbing data-dragging:opacity-90', 'data-dropping:opacity-100');
265
+
266
+ export default function BasicDemo() {
267
+ const [source, setSource] = useState(people);
268
+ const [target, setTarget] = useState<Person[]>([]);
269
+ const [selection, setSelection] = useState<Person[]>([]);
270
+
271
+ const pickList = usePickList({
272
+ source,
273
+ target,
274
+ selection,
275
+ onValueChange: (e: UsePickListValueChangeEvent) => {
276
+ setSource(e.source as Person[]);
277
+ setTarget(e.target as Person[]);
278
+ },
279
+ onSelectionChange: (e: UsePickListSelectionChangeEvent) => setSelection(e.value as Person[])
280
+ });
281
+
282
+ return (
283
+ <div className="flex justify-center">
284
+ <div className="flex flex-col md:flex-row gap-3 items-center w-full max-w-2xl">
285
+ <div className="flex flex-row md:flex-col gap-1">
286
+ <Button {...pickList.sourceFirstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
287
+ <AngleDoubleUp />
288
+ </Button>
289
+ <Button {...pickList.sourcePrevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
290
+ <AngleUp />
291
+ </Button>
292
+ <Button {...pickList.sourceNextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
293
+ <AngleDown />
294
+ </Button>
295
+ <Button {...pickList.sourceLastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
296
+ <AngleDoubleDown />
297
+ </Button>
298
+ </div>
299
+ <div className="flex-1 min-w-0 w-full md:w-auto flex flex-col gap-1.5">
300
+ <Label>Available Members</Label>
301
+ <Listbox.Root
302
+ value={selection}
303
+ onValueChange={(e) => setSelection((e.value as Person[]) ?? [])}
304
+ options={pickList.state.source as Person[]}
305
+ optionLabel="name"
306
+ multiple
307
+ >
308
+ <Listbox.List {...pickList.sourceListProps} className="h-60" style={{ touchAction: 'none' }}>
309
+ {(pickList.state.source as Person[]).map((item, index) => {
310
+ const optionProps = pickList.getOptionProps(item, index, 'source');
311
+
312
+ return (
313
+ <Listbox.Option key={item.name} uKey={item.name} index={index} {...optionProps} className={optionClassName}>
314
+ {item.name}
315
+ </Listbox.Option>
316
+ );
317
+ })}
318
+ </Listbox.List>
319
+ </Listbox.Root>
320
+ </div>
321
+
322
+ <div className="flex flex-row md:flex-col gap-1">
323
+ <Button
324
+ {...pickList.moveToTargetProps}
325
+ severity="secondary"
326
+ size="small"
327
+ iconOnly
328
+ aria-label="Move to target"
329
+ className="rotate-90 md:rotate-0"
330
+ >
331
+ <AngleRight />
332
+ </Button>
333
+ <Button
334
+ {...pickList.moveAllToTargetProps}
335
+ severity="secondary"
336
+ size="small"
337
+ iconOnly
338
+ aria-label="Move all to target"
339
+ className="rotate-90 md:rotate-0"
340
+ >
341
+ <AngleDoubleRight />
342
+ </Button>
343
+ <Button
344
+ {...pickList.moveToSourceProps}
345
+ severity="secondary"
346
+ size="small"
347
+ iconOnly
348
+ aria-label="Move to source"
349
+ className="rotate-90 md:rotate-0"
350
+ >
351
+ <AngleLeft />
352
+ </Button>
353
+ <Button
354
+ {...pickList.moveAllToSourceProps}
355
+ severity="secondary"
356
+ size="small"
357
+ iconOnly
358
+ aria-label="Move all to source"
359
+ className="rotate-90 md:rotate-0"
360
+ >
361
+ <AngleDoubleLeft />
362
+ </Button>
363
+ </div>
364
+
365
+ <div className="flex-1 min-w-0 w-full md:w-auto flex flex-col gap-1.5">
366
+ <Label>Team Members</Label>
367
+ <Listbox.Root
368
+ value={selection}
369
+ onValueChange={(e) => setSelection((e.value as Person[]) ?? [])}
370
+ options={pickList.state.target as Person[]}
371
+ optionLabel="name"
372
+ multiple
373
+ >
374
+ <Listbox.List {...pickList.targetListProps} className="h-60" style={{ touchAction: 'none' }}>
375
+ {(pickList.state.target as Person[]).map((item, index) => {
376
+ const optionProps = pickList.getOptionProps(item, index, 'target');
377
+
378
+ return (
379
+ <Listbox.Option key={item.name} uKey={item.name} index={index} {...optionProps} className={optionClassName}>
380
+ {item.name}
381
+ </Listbox.Option>
382
+ );
383
+ })}
384
+ </Listbox.List>
385
+ </Listbox.Root>
386
+ </div>
387
+ <div className="flex flex-row md:flex-col gap-1">
388
+ <Button {...pickList.targetFirstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
389
+ <AngleDoubleUp />
390
+ </Button>
391
+ <Button {...pickList.targetPrevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
392
+ <AngleUp />
393
+ </Button>
394
+ <Button {...pickList.targetNextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
395
+ <AngleDown />
396
+ </Button>
397
+ <Button {...pickList.targetLastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
398
+ <AngleDoubleDown />
399
+ </Button>
400
+ </div>
401
+ </div>
402
+ </div>
403
+ );
404
+ }
405
+ ```
406
+
407
+ ### Drag Drop
408
+
409
+ Enable drag-and-drop by setting `draggable: true`. Items can be dragged within a list to reorder, or dragged across lists to transfer.
410
+
411
+ ```tsx
412
+ 'use client';
413
+ import { AngleDoubleDown } from '@primeicons/react/angle-double-down';
414
+ import { AngleDoubleLeft } from '@primeicons/react/angle-double-left';
415
+ import { AngleDoubleRight } from '@primeicons/react/angle-double-right';
416
+ import { AngleDoubleUp } from '@primeicons/react/angle-double-up';
417
+ import { AngleDown } from '@primeicons/react/angle-down';
418
+ import { AngleLeft } from '@primeicons/react/angle-left';
419
+ import { AngleRight } from '@primeicons/react/angle-right';
420
+ import { AngleUp } from '@primeicons/react/angle-up';
421
+ import { usePickList, type UsePickListValueChangeEvent, type UsePickListSelectionChangeEvent } from '@primereact/headless/picklist';
422
+ import { Button } from '@primereact/ui/button';
423
+ import { Label } from '@primereact/ui/label';
424
+ import { Listbox } from '@primereact/ui/listbox';
425
+ import { cn } from '@primeuix/utils';
426
+ import { useState } from 'react';
427
+
428
+ const people = [
429
+ { name: 'Amy Elsner' },
430
+ { name: 'Asiya Javayant' },
431
+ { name: 'Onyama Limba' },
432
+ { name: 'Anna Fali' },
433
+ { name: 'Bernardo Dominic' },
434
+ { name: 'Elwin Sharvill' },
435
+ { name: 'Ioni Bowcher' },
436
+ { name: 'Stephen Shaw' },
437
+ { name: 'Ivan Magalhaes' },
438
+ { name: 'Xuxue Feng' }
439
+ ];
440
+
441
+ type Person = (typeof people)[0];
442
+
443
+ const optionClassName = cn('cursor-grab select-none', 'data-dragging:cursor-grabbing data-dragging:opacity-90', 'data-dropping:opacity-100');
444
+
445
+ export default function DragDropDemo() {
446
+ const [source, setSource] = useState(people);
447
+ const [target, setTarget] = useState<Person[]>([]);
448
+ const [selection, setSelection] = useState<Person[]>([]);
449
+
450
+ const pickList = usePickList({
451
+ source,
452
+ target,
453
+ selection,
454
+ draggable: true,
455
+ onValueChange: (e: UsePickListValueChangeEvent) => {
456
+ setSource(e.source as Person[]);
457
+ setTarget(e.target as Person[]);
458
+ },
459
+ onSelectionChange: (e: UsePickListSelectionChangeEvent) => setSelection(e.value as Person[])
460
+ });
461
+
462
+ return (
463
+ <div className="flex justify-center">
464
+ <div className="flex flex-col md:flex-row gap-3 items-stretch w-full max-w-2xl">
465
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
466
+ <Button {...pickList.sourceFirstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
467
+ <AngleDoubleUp />
468
+ </Button>
469
+ <Button {...pickList.sourcePrevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
470
+ <AngleUp />
471
+ </Button>
472
+ <Button {...pickList.sourceNextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
473
+ <AngleDown />
474
+ </Button>
475
+ <Button {...pickList.sourceLastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
476
+ <AngleDoubleDown />
477
+ </Button>
478
+ </div>
479
+
480
+ <div className="flex-1 min-w-0 flex flex-col gap-1.5">
481
+ <Label>Available Members</Label>
482
+ <Listbox.Root
483
+ value={selection}
484
+ onValueChange={(e) => setSelection((e.value as Person[]) ?? [])}
485
+ options={pickList.state.source as Person[]}
486
+ optionLabel="name"
487
+ multiple
488
+ >
489
+ <Listbox.List {...pickList.sourceListProps} className="h-60" style={{ touchAction: 'none' }}>
490
+ {(pickList.state.source as Person[]).map((item, index) => {
491
+ const optionProps = pickList.getOptionProps(item, index, 'source');
492
+
493
+ return (
494
+ <Listbox.Option key={item.name} uKey={item.name} index={index} {...optionProps} className={optionClassName}>
495
+ {item.name}
496
+ </Listbox.Option>
497
+ );
498
+ })}
499
+ </Listbox.List>
500
+ </Listbox.Root>
501
+ </div>
502
+
503
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
504
+ <Button
505
+ {...pickList.moveToTargetProps}
506
+ severity="secondary"
507
+ size="small"
508
+ iconOnly
509
+ aria-label="Move to target"
510
+ className="rotate-90 md:rotate-0"
511
+ >
512
+ <AngleRight />
513
+ </Button>
514
+ <Button
515
+ {...pickList.moveAllToTargetProps}
516
+ severity="secondary"
517
+ size="small"
518
+ iconOnly
519
+ aria-label="Move all to target"
520
+ className="rotate-90 md:rotate-0"
521
+ >
522
+ <AngleDoubleRight />
523
+ </Button>
524
+ <Button
525
+ {...pickList.moveToSourceProps}
526
+ severity="secondary"
527
+ size="small"
528
+ iconOnly
529
+ aria-label="Move to source"
530
+ className="rotate-90 md:rotate-0"
531
+ >
532
+ <AngleLeft />
533
+ </Button>
534
+ <Button
535
+ {...pickList.moveAllToSourceProps}
536
+ severity="secondary"
537
+ size="small"
538
+ iconOnly
539
+ aria-label="Move all to source"
540
+ className="rotate-90 md:rotate-0"
541
+ >
542
+ <AngleDoubleLeft />
543
+ </Button>
544
+ </div>
545
+
546
+ <div className="flex-1 min-w-0 flex flex-col gap-1.5">
547
+ <Label>Team Members</Label>
548
+ <Listbox.Root
549
+ value={selection}
550
+ onValueChange={(e) => setSelection((e.value as Person[]) ?? [])}
551
+ options={pickList.state.target as Person[]}
552
+ optionLabel="name"
553
+ multiple
554
+ >
555
+ <Listbox.List {...pickList.targetListProps} className="h-60" style={{ touchAction: 'none' }}>
556
+ {(pickList.state.target as Person[]).map((item, index) => {
557
+ const optionProps = pickList.getOptionProps(item, index, 'target');
558
+
559
+ return (
560
+ <Listbox.Option key={item.name} uKey={item.name} index={index} {...optionProps} className={optionClassName}>
561
+ {item.name}
562
+ </Listbox.Option>
563
+ );
564
+ })}
565
+ </Listbox.List>
566
+ </Listbox.Root>
567
+ </div>
568
+
569
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
570
+ <Button {...pickList.targetFirstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
571
+ <AngleDoubleUp />
572
+ </Button>
573
+ <Button {...pickList.targetPrevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
574
+ <AngleUp />
575
+ </Button>
576
+ <Button {...pickList.targetNextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
577
+ <AngleDown />
578
+ </Button>
579
+ <Button {...pickList.targetLastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
580
+ <AngleDoubleDown />
581
+ </Button>
582
+ </div>
583
+ </div>
584
+ </div>
585
+ );
586
+ }
587
+ ```
588
+
589
+ ### Placeholder
590
+
591
+ Set `placeholder: 'clone'` to leave a visual copy of the dragged item in place. Use the `data-sortable-placeholder` attribute to style it with CSS.
592
+
593
+ ```tsx
594
+ 'use client';
595
+ import { AngleDoubleDown } from '@primeicons/react/angle-double-down';
596
+ import { AngleDoubleLeft } from '@primeicons/react/angle-double-left';
597
+ import { AngleDoubleRight } from '@primeicons/react/angle-double-right';
598
+ import { AngleDoubleUp } from '@primeicons/react/angle-double-up';
599
+ import { AngleDown } from '@primeicons/react/angle-down';
600
+ import { AngleLeft } from '@primeicons/react/angle-left';
601
+ import { AngleRight } from '@primeicons/react/angle-right';
602
+ import { AngleUp } from '@primeicons/react/angle-up';
603
+ import { usePickList, type UsePickListValueChangeEvent, type UsePickListSelectionChangeEvent } from '@primereact/headless/picklist';
604
+ import { Button } from '@primereact/ui/button';
605
+ import { Label } from '@primereact/ui/label';
606
+ import { Listbox } from '@primereact/ui/listbox';
607
+ import { cn } from '@primeuix/utils';
608
+ import { useState } from 'react';
609
+
610
+ const people = [
611
+ { name: 'Amy Elsner' },
612
+ { name: 'Asiya Javayant' },
613
+ { name: 'Onyama Limba' },
614
+ { name: 'Anna Fali' },
615
+ { name: 'Bernardo Dominic' },
616
+ { name: 'Elwin Sharvill' },
617
+ { name: 'Ioni Bowcher' },
618
+ { name: 'Stephen Shaw' },
619
+ { name: 'Ivan Magalhaes' },
620
+ { name: 'Xuxue Feng' }
621
+ ];
622
+
623
+ type Person = (typeof people)[0];
624
+
625
+ const optionClassName = cn(
626
+ 'cursor-grab select-none',
627
+ 'data-dragging:cursor-grabbing data-dragging:opacity-90',
628
+ 'data-dropping:opacity-100',
629
+ 'data-[sortable-placeholder]:opacity-50'
630
+ );
631
+
632
+ export default function PlaceholderDemo() {
633
+ const [source, setSource] = useState(people);
634
+ const [target, setTarget] = useState<Person[]>([]);
635
+ const [selection, setSelection] = useState<Person[]>([]);
636
+
637
+ const pickList = usePickList({
638
+ source,
639
+ target,
640
+ selection,
641
+ draggable: true,
642
+ placeholder: 'clone',
643
+ onValueChange: (e: UsePickListValueChangeEvent) => {
644
+ setSource(e.source as Person[]);
645
+ setTarget(e.target as Person[]);
646
+ },
647
+ onSelectionChange: (e: UsePickListSelectionChangeEvent) => setSelection(e.value as Person[])
648
+ });
649
+
650
+ return (
651
+ <div className="flex justify-center">
652
+ <div className="flex flex-col md:flex-row gap-3 items-stretch w-full max-w-2xl">
653
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
654
+ <Button {...pickList.sourceFirstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
655
+ <AngleDoubleUp />
656
+ </Button>
657
+ <Button {...pickList.sourcePrevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
658
+ <AngleUp />
659
+ </Button>
660
+ <Button {...pickList.sourceNextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
661
+ <AngleDown />
662
+ </Button>
663
+ <Button {...pickList.sourceLastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
664
+ <AngleDoubleDown />
665
+ </Button>
666
+ </div>
667
+
668
+ <div className="flex-1 min-w-0 flex flex-col gap-1.5">
669
+ <Label>Available Members</Label>
670
+ <Listbox.Root
671
+ value={selection}
672
+ onValueChange={(e) => setSelection((e.value as Person[]) ?? [])}
673
+ options={pickList.state.source as Person[]}
674
+ optionLabel="name"
675
+ multiple
676
+ >
677
+ <Listbox.List {...pickList.sourceListProps} className="h-60" style={{ touchAction: 'none' }}>
678
+ {(pickList.state.source as Person[]).map((item, index) => {
679
+ const optionProps = pickList.getOptionProps(item, index, 'source');
680
+
681
+ return (
682
+ <Listbox.Option key={item.name} uKey={item.name} index={index} {...optionProps} className={optionClassName}>
683
+ {item.name}
684
+ </Listbox.Option>
685
+ );
686
+ })}
687
+ </Listbox.List>
688
+ </Listbox.Root>
689
+ </div>
690
+
691
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
692
+ <Button
693
+ {...pickList.moveToTargetProps}
694
+ severity="secondary"
695
+ size="small"
696
+ iconOnly
697
+ aria-label="Move to target"
698
+ className="rotate-90 md:rotate-0"
699
+ >
700
+ <AngleRight />
701
+ </Button>
702
+ <Button
703
+ {...pickList.moveAllToTargetProps}
704
+ severity="secondary"
705
+ size="small"
706
+ iconOnly
707
+ aria-label="Move all to target"
708
+ className="rotate-90 md:rotate-0"
709
+ >
710
+ <AngleDoubleRight />
711
+ </Button>
712
+ <Button
713
+ {...pickList.moveToSourceProps}
714
+ severity="secondary"
715
+ size="small"
716
+ iconOnly
717
+ aria-label="Move to source"
718
+ className="rotate-90 md:rotate-0"
719
+ >
720
+ <AngleLeft />
721
+ </Button>
722
+ <Button
723
+ {...pickList.moveAllToSourceProps}
724
+ severity="secondary"
725
+ size="small"
726
+ iconOnly
727
+ aria-label="Move all to source"
728
+ className="rotate-90 md:rotate-0"
729
+ >
730
+ <AngleDoubleLeft />
731
+ </Button>
732
+ </div>
733
+
734
+ <div className="flex-1 min-w-0 flex flex-col gap-1.5">
735
+ <Label>Team Members</Label>
736
+ <Listbox.Root
737
+ value={selection}
738
+ onValueChange={(e) => setSelection((e.value as Person[]) ?? [])}
739
+ options={pickList.state.target as Person[]}
740
+ optionLabel="name"
741
+ multiple
742
+ >
743
+ <Listbox.List {...pickList.targetListProps} className="h-60" style={{ touchAction: 'none' }}>
744
+ {(pickList.state.target as Person[]).map((item, index) => {
745
+ const optionProps = pickList.getOptionProps(item, index, 'target');
746
+
747
+ return (
748
+ <Listbox.Option key={item.name} uKey={item.name} index={index} {...optionProps} className={optionClassName}>
749
+ {item.name}
750
+ </Listbox.Option>
751
+ );
752
+ })}
753
+ </Listbox.List>
754
+ </Listbox.Root>
755
+ </div>
756
+
757
+ <div className="flex flex-row md:flex-col gap-1 self-center md:self-stretch md:pt-7">
758
+ <Button {...pickList.targetFirstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
759
+ <AngleDoubleUp />
760
+ </Button>
761
+ <Button {...pickList.targetPrevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
762
+ <AngleUp />
763
+ </Button>
764
+ <Button {...pickList.targetNextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
765
+ <AngleDown />
766
+ </Button>
767
+ <Button {...pickList.targetLastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
768
+ <AngleDoubleDown />
769
+ </Button>
770
+ </div>
771
+ </div>
772
+ </div>
773
+ );
774
+ }
775
+ ```
776
+
777
+ ### Checkbox
778
+
779
+ Combine with Checkbox and a select-all header for batch selection alongside drag-and-drop.
780
+
781
+ ```tsx
782
+ 'use client';
783
+ import { Check, Minus } from '@primeicons/react';
784
+ import { AngleDoubleDown } from '@primeicons/react/angle-double-down';
785
+ import { AngleDoubleLeft } from '@primeicons/react/angle-double-left';
786
+ import { AngleDoubleRight } from '@primeicons/react/angle-double-right';
787
+ import { AngleDoubleUp } from '@primeicons/react/angle-double-up';
788
+ import { AngleDown } from '@primeicons/react/angle-down';
789
+ import { AngleLeft } from '@primeicons/react/angle-left';
790
+ import { AngleRight } from '@primeicons/react/angle-right';
791
+ import { AngleUp } from '@primeicons/react/angle-up';
792
+ import { usePickList, type UsePickListValueChangeEvent, type UsePickListSelectionChangeEvent } from '@primereact/headless/picklist';
793
+ import { Button } from '@primereact/ui/button';
794
+ import { Checkbox, type CheckboxRootChangeEvent } from '@primereact/ui/checkbox';
795
+ import { Label } from '@primereact/ui/label';
796
+ import { Listbox, type ListboxListInstance } from '@primereact/ui/listbox';
797
+ import { cn } from '@primeuix/utils';
798
+ import { useState } from 'react';
799
+
800
+ const people = [
801
+ { name: 'Amy Elsner' },
802
+ { name: 'Asiya Javayant' },
803
+ { name: 'Onyama Limba' },
804
+ { name: 'Anna Fali' },
805
+ { name: 'Bernardo Dominic' },
806
+ { name: 'Elwin Sharvill' },
807
+ { name: 'Ioni Bowcher' },
808
+ { name: 'Stephen Shaw' },
809
+ { name: 'Ivan Magalhaes' },
810
+ { name: 'Xuxue Feng' }
811
+ ];
812
+
813
+ type Person = (typeof people)[0];
814
+
815
+ const optionClassName = cn('cursor-grab select-none', 'data-dragging:cursor-grabbing data-dragging:opacity-90', 'data-dropping:opacity-100');
816
+
817
+ function ListPanel({
818
+ items,
819
+ pickList,
820
+ side,
821
+ selection,
822
+ setSelection
823
+ }: {
824
+ items: Person[];
825
+ pickList: ReturnType<typeof usePickList>;
826
+ side: 'source' | 'target';
827
+ selection: Person[];
828
+ setSelection: (v: Person[]) => void;
829
+ }) {
830
+ const isAllSelected = items.length > 0 && items.every((item) => selection.includes(item));
831
+ const indeterminate = items.some((item) => selection.includes(item)) && !isAllSelected;
832
+ const listProps = side === 'source' ? pickList.sourceListProps : pickList.targetListProps;
833
+ const firstProps = side === 'source' ? pickList.sourceFirstProps : pickList.targetFirstProps;
834
+ const prevProps = side === 'source' ? pickList.sourcePrevProps : pickList.targetPrevProps;
835
+ const nextProps = side === 'source' ? pickList.sourceNextProps : pickList.targetNextProps;
836
+ const lastProps = side === 'source' ? pickList.sourceLastProps : pickList.targetLastProps;
837
+ const label = side === 'source' ? 'Available Members' : 'Team Members';
838
+
839
+ return (
840
+ <div className={cn('flex-1 min-w-0 w-full md:w-auto flex gap-2 items-center', side === 'target' && 'flex-row-reverse')}>
841
+ <div className="flex flex-col gap-1">
842
+ <Button {...firstProps} severity="secondary" size="small" iconOnly aria-label="Move to first">
843
+ <AngleDoubleUp />
844
+ </Button>
845
+ <Button {...prevProps} severity="secondary" size="small" iconOnly aria-label="Move up">
846
+ <AngleUp />
847
+ </Button>
848
+ <Button {...nextProps} severity="secondary" size="small" iconOnly aria-label="Move down">
849
+ <AngleDown />
850
+ </Button>
851
+ <Button {...lastProps} severity="secondary" size="small" iconOnly aria-label="Move to last">
852
+ <AngleDoubleDown />
853
+ </Button>
854
+ </div>
855
+ <div className="flex-1 min-w-0 flex flex-col gap-1.5">
856
+ <Label>{label}</Label>
857
+ <Listbox.Root
858
+ value={selection}
859
+ onValueChange={(e) => setSelection((e.value as Person[]) ?? [])}
860
+ options={items}
861
+ optionLabel="name"
862
+ multiple
863
+ >
864
+ <Listbox.Header>
865
+ <Checkbox.Root
866
+ aria-label={`Select all ${side}`}
867
+ indeterminate={indeterminate}
868
+ checked={isAllSelected}
869
+ onCheckedChange={(e: CheckboxRootChangeEvent) =>
870
+ setSelection(
871
+ e.checked
872
+ ? [...selection.filter((s) => !items.includes(s)), ...items]
873
+ : selection.filter((s) => !items.includes(s))
874
+ )
875
+ }
876
+ >
877
+ <Checkbox.Box>
878
+ <Checkbox.Indicator match="checked">
879
+ <Check />
880
+ </Checkbox.Indicator>
881
+ <Checkbox.Indicator match="indeterminate">
882
+ <Minus />
883
+ </Checkbox.Indicator>
884
+ </Checkbox.Box>
885
+ </Checkbox.Root>
886
+ </Listbox.Header>
887
+ <Listbox.List {...listProps} className="h-60" style={{ touchAction: 'none' }}>
888
+ {(instance: ListboxListInstance) => {
889
+ const { listbox } = instance;
890
+
891
+ return items.map((item, index) => {
892
+ const selected = listbox?.isSelected(item);
893
+ const optionProps = pickList.getOptionProps(item, index, side);
894
+
895
+ return (
896
+ <Listbox.Option
897
+ key={item.name}
898
+ uKey={item.name}
899
+ index={index}
900
+ {...optionProps}
901
+ className={cn(optionClassName, 'gap-2')}
902
+ >
903
+ <Checkbox.Root defaultChecked={!!selected} tabIndex={-1} readOnly>
904
+ <Checkbox.Box>
905
+ <Checkbox.Indicator match="checked">
906
+ <Check />
907
+ </Checkbox.Indicator>
908
+ </Checkbox.Box>
909
+ </Checkbox.Root>
910
+ {item.name}
911
+ </Listbox.Option>
912
+ );
913
+ });
914
+ }}
915
+ </Listbox.List>
916
+ </Listbox.Root>
917
+ </div>
918
+ </div>
919
+ );
920
+ }
921
+
922
+ export default function CheckboxDemo() {
923
+ const [source, setSource] = useState(people);
924
+ const [target, setTarget] = useState<Person[]>([]);
925
+ const [selection, setSelection] = useState<Person[]>([]);
926
+
927
+ const pickList = usePickList({
928
+ source,
929
+ target,
930
+ selection,
931
+ draggable: true,
932
+ onValueChange: (e: UsePickListValueChangeEvent) => {
933
+ setSource(e.source as Person[]);
934
+ setTarget(e.target as Person[]);
935
+ },
936
+ onSelectionChange: (e: UsePickListSelectionChangeEvent) => setSelection(e.value as Person[])
937
+ });
938
+
939
+ return (
940
+ <div className="flex justify-center">
941
+ <div className="flex flex-col md:flex-row gap-3 items-center w-full max-w-2xl">
942
+ <ListPanel
943
+ items={pickList.state.source as Person[]}
944
+ pickList={pickList}
945
+ side="source"
946
+ selection={selection}
947
+ setSelection={setSelection}
948
+ />
949
+
950
+ <div className="flex flex-row md:flex-col gap-1">
951
+ <Button
952
+ {...pickList.moveToTargetProps}
953
+ severity="secondary"
954
+ size="small"
955
+ iconOnly
956
+ aria-label="Move to target"
957
+ className="rotate-90 md:rotate-0"
958
+ >
959
+ <AngleRight />
960
+ </Button>
961
+ <Button
962
+ {...pickList.moveAllToTargetProps}
963
+ severity="secondary"
964
+ size="small"
965
+ iconOnly
966
+ aria-label="Move all to target"
967
+ className="rotate-90 md:rotate-0"
968
+ >
969
+ <AngleDoubleRight />
970
+ </Button>
971
+ <Button
972
+ {...pickList.moveToSourceProps}
973
+ severity="secondary"
974
+ size="small"
975
+ iconOnly
976
+ aria-label="Move to source"
977
+ className="rotate-90 md:rotate-0"
978
+ >
979
+ <AngleLeft />
980
+ </Button>
981
+ <Button
982
+ {...pickList.moveAllToSourceProps}
983
+ severity="secondary"
984
+ size="small"
985
+ iconOnly
986
+ aria-label="Move all to source"
987
+ className="rotate-90 md:rotate-0"
988
+ >
989
+ <AngleDoubleLeft />
990
+ </Button>
991
+ </div>
992
+
993
+ <ListPanel
994
+ items={pickList.state.target as Person[]}
995
+ pickList={pickList}
996
+ side="target"
997
+ selection={selection}
998
+ setSelection={setSelection}
999
+ />
1000
+ </div>
1001
+ </div>
1002
+ );
1003
+ }
1004
+ ```