@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.
- package/LICENSE.md +45 -0
- package/README.md +94 -0
- package/data/llms/headless/add-ons/introduction.md +16 -0
- package/data/llms/headless/components/accordion/api.json +252 -0
- package/data/llms/headless/components/accordion.md +196 -0
- package/data/llms/headless/components/animateonscroll/api.json +88 -0
- package/data/llms/headless/components/animateonscroll.md +141 -0
- package/data/llms/headless/components/autocomplete/api.json +787 -0
- package/data/llms/headless/components/autocomplete.md +249 -0
- package/data/llms/headless/components/avatar/api.json +154 -0
- package/data/llms/headless/components/avatar.md +149 -0
- package/data/llms/headless/components/badge/api.json +68 -0
- package/data/llms/headless/components/badge.md +150 -0
- package/data/llms/headless/components/breadcrumb/api.json +142 -0
- package/data/llms/headless/components/breadcrumb.md +149 -0
- package/data/llms/headless/components/button/api.json +62 -0
- package/data/llms/headless/components/button.md +73 -0
- package/data/llms/headless/components/card/api.json +36 -0
- package/data/llms/headless/components/card.md +96 -0
- package/data/llms/headless/components/carousel/api.json +793 -0
- package/data/llms/headless/components/carousel.md +196 -0
- package/data/llms/headless/components/checkbox/api.json +593 -0
- package/data/llms/headless/components/checkbox.md +184 -0
- package/data/llms/headless/components/chip/api.json +107 -0
- package/data/llms/headless/components/chip.md +141 -0
- package/data/llms/headless/components/collapsible/api.json +301 -0
- package/data/llms/headless/components/collapsible.md +136 -0
- package/data/llms/headless/components/compare/api.json +533 -0
- package/data/llms/headless/components/compare.md +142 -0
- package/data/llms/headless/components/contextmenu/api.json +495 -0
- package/data/llms/headless/components/contextmenu.md +282 -0
- package/data/llms/headless/components/datatable/api.json +1680 -0
- package/data/llms/headless/components/datatable.md +258 -0
- package/data/llms/headless/components/dataview/api.json +199 -0
- package/data/llms/headless/components/dataview.md +147 -0
- package/data/llms/headless/components/datepicker/api.json +2796 -0
- package/data/llms/headless/components/datepicker.md +456 -0
- package/data/llms/headless/components/dialog/api.json +626 -0
- package/data/llms/headless/components/dialog.md +280 -0
- package/data/llms/headless/components/divider/api.json +130 -0
- package/data/llms/headless/components/divider.md +92 -0
- package/data/llms/headless/components/drawer/api.json +425 -0
- package/data/llms/headless/components/drawer.md +220 -0
- package/data/llms/headless/components/fieldset/api.json +195 -0
- package/data/llms/headless/components/fieldset.md +154 -0
- package/data/llms/headless/components/fileupload/api.json +905 -0
- package/data/llms/headless/components/fileupload.md +323 -0
- package/data/llms/headless/components/floatlabel/api.json +36 -0
- package/data/llms/headless/components/floatlabel.md +19 -0
- package/data/llms/headless/components/fluid/api.json +36 -0
- package/data/llms/headless/components/fluid.md +19 -0
- package/data/llms/headless/components/focustrap/api.json +135 -0
- package/data/llms/headless/components/focustrap.md +125 -0
- package/data/llms/headless/components/gallery/api.json +1349 -0
- package/data/llms/headless/components/gallery.md +355 -0
- package/data/llms/headless/components/iconfield/api.json +62 -0
- package/data/llms/headless/components/iconfield.md +19 -0
- package/data/llms/headless/components/iftalabel/api.json +62 -0
- package/data/llms/headless/components/iftalabel.md +19 -0
- package/data/llms/headless/components/inplace/api.json +340 -0
- package/data/llms/headless/components/inplace.md +153 -0
- package/data/llms/headless/components/inputcolor/api.json +469 -0
- package/data/llms/headless/components/inputcolor.md +253 -0
- package/data/llms/headless/components/inputgroup/api.json +62 -0
- package/data/llms/headless/components/inputgroup.md +19 -0
- package/data/llms/headless/components/inputnumber/api.json +554 -0
- package/data/llms/headless/components/inputnumber.md +167 -0
- package/data/llms/headless/components/inputotp/api.json +276 -0
- package/data/llms/headless/components/inputotp.md +130 -0
- package/data/llms/headless/components/inputpassword/api.json +180 -0
- package/data/llms/headless/components/inputpassword.md +117 -0
- package/data/llms/headless/components/inputtags/api.json +497 -0
- package/data/llms/headless/components/inputtags.md +298 -0
- package/data/llms/headless/components/inputtext/api.json +81 -0
- package/data/llms/headless/components/inputtext.md +109 -0
- package/data/llms/headless/components/knob/api.json +429 -0
- package/data/llms/headless/components/knob.md +151 -0
- package/data/llms/headless/components/label/api.json +62 -0
- package/data/llms/headless/components/label.md +19 -0
- package/data/llms/headless/components/listbox/api.json +814 -0
- package/data/llms/headless/components/listbox.md +194 -0
- package/data/llms/headless/components/menu/api.json +1247 -0
- package/data/llms/headless/components/menu.md +283 -0
- package/data/llms/headless/components/message/api.json +131 -0
- package/data/llms/headless/components/message.md +143 -0
- package/data/llms/headless/components/metergroup/api.json +266 -0
- package/data/llms/headless/components/metergroup.md +129 -0
- package/data/llms/headless/components/motion/api.json +237 -0
- package/data/llms/headless/components/motion.md +160 -0
- package/data/llms/headless/components/navigationmenu/api.json +220 -0
- package/data/llms/headless/components/navigationmenu.md +166 -0
- package/data/llms/headless/components/orderlist/api.json +196 -0
- package/data/llms/headless/components/orderlist.md +221 -0
- package/data/llms/headless/components/organizationchart/api.json +372 -0
- package/data/llms/headless/components/organizationchart.md +254 -0
- package/data/llms/headless/components/paginator/api.json +311 -0
- package/data/llms/headless/components/paginator.md +187 -0
- package/data/llms/headless/components/panel/api.json +195 -0
- package/data/llms/headless/components/panel.md +150 -0
- package/data/llms/headless/components/picklist/api.json +293 -0
- package/data/llms/headless/components/picklist.md +270 -0
- package/data/llms/headless/components/popover/api.json +405 -0
- package/data/llms/headless/components/popover.md +301 -0
- package/data/llms/headless/components/portal/api.json +56 -0
- package/data/llms/headless/components/portal.md +102 -0
- package/data/llms/headless/components/positioner/api.json +165 -0
- package/data/llms/headless/components/positioner.md +181 -0
- package/data/llms/headless/components/progressbar/api.json +87 -0
- package/data/llms/headless/components/progressbar.md +122 -0
- package/data/llms/headless/components/progressspinner/api.json +337 -0
- package/data/llms/headless/components/progressspinner.md +128 -0
- package/data/llms/headless/components/radiobutton/api.json +569 -0
- package/data/llms/headless/components/radiobutton.md +195 -0
- package/data/llms/headless/components/rating/api.json +347 -0
- package/data/llms/headless/components/rating.md +181 -0
- package/data/llms/headless/components/scrollarea/api.json +730 -0
- package/data/llms/headless/components/scrollarea.md +232 -0
- package/data/llms/headless/components/select/api.json +829 -0
- package/data/llms/headless/components/select.md +262 -0
- package/data/llms/headless/components/sidebar/api.json +433 -0
- package/data/llms/headless/components/sidebar.md +266 -0
- package/data/llms/headless/components/skeleton/api.json +68 -0
- package/data/llms/headless/components/skeleton.md +95 -0
- package/data/llms/headless/components/slider/api.json +559 -0
- package/data/llms/headless/components/slider.md +158 -0
- package/data/llms/headless/components/speeddial/api.json +459 -0
- package/data/llms/headless/components/speeddial.md +181 -0
- package/data/llms/headless/components/splitter/api.json +582 -0
- package/data/llms/headless/components/splitter.md +159 -0
- package/data/llms/headless/components/stepper/api.json +385 -0
- package/data/llms/headless/components/stepper.md +183 -0
- package/data/llms/headless/components/styleclass/api.json +134 -0
- package/data/llms/headless/components/styleclass.md +129 -0
- package/data/llms/headless/components/tabs/api.json +336 -0
- package/data/llms/headless/components/tabs.md +158 -0
- package/data/llms/headless/components/tag/api.json +62 -0
- package/data/llms/headless/components/tag.md +121 -0
- package/data/llms/headless/components/terminal/api.json +117 -0
- package/data/llms/headless/components/terminal.md +183 -0
- package/data/llms/headless/components/textarea/api.json +81 -0
- package/data/llms/headless/components/textarea.md +110 -0
- package/data/llms/headless/components/timeline/api.json +270 -0
- package/data/llms/headless/components/timeline.md +117 -0
- package/data/llms/headless/components/toast/api.json +455 -0
- package/data/llms/headless/components/toast.md +277 -0
- package/data/llms/headless/components/togglebutton/api.json +357 -0
- package/data/llms/headless/components/togglebutton.md +183 -0
- package/data/llms/headless/components/toggleswitch/api.json +326 -0
- package/data/llms/headless/components/toggleswitch.md +164 -0
- package/data/llms/headless/components/toolbar/api.json +68 -0
- package/data/llms/headless/components/toolbar.md +96 -0
- package/data/llms/headless/components/tooltip/api.json +478 -0
- package/data/llms/headless/components/tooltip.md +233 -0
- package/data/llms/headless/components/tree/api.json +1297 -0
- package/data/llms/headless/components/tree.md +297 -0
- package/data/llms/headless/components/treetable/api.json +1680 -0
- package/data/llms/headless/components/treetable.md +177 -0
- package/data/llms/headless/guides/ai/llms.md +25 -0
- package/data/llms/headless/guides/installation.md +126 -0
- package/data/llms/headless/guides/introduction.md +20 -0
- package/data/llms/headless/guides/misc/accessibility.md +228 -0
- package/data/llms/headless/llms.md +25 -0
- package/data/llms/headless/resources/introduction.md +15 -0
- package/data/llms/hooks/gettingstarted/introduction.md +34 -0
- package/data/llms/hooks/gettingstarted/setup.md +54 -0
- package/data/llms/hooks/use-attr-selector.md +25 -0
- package/data/llms/hooks/use-controlled-state.md +31 -0
- package/data/llms/hooks/use-event-listener.md +37 -0
- package/data/llms/hooks/use-filter.md +312 -0
- package/data/llms/hooks/use-hot-key.md +40 -0
- package/data/llms/hooks/use-id.md +24 -0
- package/data/llms/hooks/use-intersection-observer.md +42 -0
- package/data/llms/hooks/use-is-mobile.md +24 -0
- package/data/llms/hooks/use-key-filter.md +139 -0
- package/data/llms/hooks/use-local-storage.md +28 -0
- package/data/llms/hooks/use-mask.md +53 -0
- package/data/llms/hooks/use-match-media.md +28 -0
- package/data/llms/hooks/use-mount-effect.md +25 -0
- package/data/llms/hooks/use-mounted.md +36 -0
- package/data/llms/hooks/use-number-formatter.md +48 -0
- package/data/llms/hooks/use-presence.md +44 -0
- package/data/llms/hooks/use-previous.md +28 -0
- package/data/llms/hooks/use-props.md +37 -0
- package/data/llms/hooks/use-queue-task.md +29 -0
- package/data/llms/hooks/use-scrolltop.md +87 -0
- package/data/llms/hooks/use-sortable-list.md +226 -0
- package/data/llms/hooks/use-tree-filter.md +216 -0
- package/data/llms/hooks/use-unmount-effect.md +23 -0
- package/data/llms/hooks/use-update-effect.md +27 -0
- package/data/llms/hooks/use-view-transition.md +31 -0
- package/data/llms/hooks/use-visibility-change.md +30 -0
- package/data/llms/llms-full.txt +125291 -0
- package/data/llms/llms.txt +379 -0
- package/data/llms/manifest.json +12409 -0
- package/data/llms/mcp-data.json +14481 -0
- package/data/llms/primitive/add-ons/introduction.md +16 -0
- package/data/llms/primitive/components/accordion/api.json +1411 -0
- package/data/llms/primitive/components/accordion.md +231 -0
- package/data/llms/primitive/components/animateonscroll/api.json +193 -0
- package/data/llms/primitive/components/animateonscroll.md +91 -0
- package/data/llms/primitive/components/autocomplete/api.json +3167 -0
- package/data/llms/primitive/components/autocomplete.md +344 -0
- package/data/llms/primitive/components/avatar/api.json +703 -0
- package/data/llms/primitive/components/avatar.md +134 -0
- package/data/llms/primitive/components/badge/api.json +363 -0
- package/data/llms/primitive/components/badge.md +118 -0
- package/data/llms/primitive/components/breadcrumb/api.json +1162 -0
- package/data/llms/primitive/components/breadcrumb.md +196 -0
- package/data/llms/primitive/components/button/api.json +246 -0
- package/data/llms/primitive/components/button.md +114 -0
- package/data/llms/primitive/components/buttongroup/api.json +168 -0
- package/data/llms/primitive/components/buttongroup.md +43 -0
- package/data/llms/primitive/components/card/api.json +1252 -0
- package/data/llms/primitive/components/card.md +159 -0
- package/data/llms/primitive/components/carousel/api.json +1374 -0
- package/data/llms/primitive/components/carousel.md +220 -0
- package/data/llms/primitive/components/checkbox/api.json +697 -0
- package/data/llms/primitive/components/checkbox.md +160 -0
- package/data/llms/primitive/components/checkboxgroup/api.json +252 -0
- package/data/llms/primitive/components/checkboxgroup.md +58 -0
- package/data/llms/primitive/components/chip/api.json +853 -0
- package/data/llms/primitive/components/chip.md +135 -0
- package/data/llms/primitive/components/collapsible/api.json +581 -0
- package/data/llms/primitive/components/collapsible.md +133 -0
- package/data/llms/primitive/components/compare/api.json +909 -0
- package/data/llms/primitive/components/compare.md +156 -0
- package/data/llms/primitive/components/contextmenu/api.json +3454 -0
- package/data/llms/primitive/components/contextmenu.md +483 -0
- package/data/llms/primitive/components/datatable/api.json +7832 -0
- package/data/llms/primitive/components/datatable.md +561 -0
- package/data/llms/primitive/components/dataview/api.json +819 -0
- package/data/llms/primitive/components/dataview.md +163 -0
- package/data/llms/primitive/components/datepicker/api.json +9055 -0
- package/data/llms/primitive/components/datepicker.md +760 -0
- package/data/llms/primitive/components/dialog/api.json +2491 -0
- package/data/llms/primitive/components/dialog.md +276 -0
- package/data/llms/primitive/components/divider/api.json +214 -0
- package/data/llms/primitive/components/divider.md +96 -0
- package/data/llms/primitive/components/drawer/api.json +1879 -0
- package/data/llms/primitive/components/drawer.md +220 -0
- package/data/llms/primitive/components/fieldset/api.json +1116 -0
- package/data/llms/primitive/components/fieldset.md +183 -0
- package/data/llms/primitive/components/fileupload/api.json +2445 -0
- package/data/llms/primitive/components/fileupload.md +282 -0
- package/data/llms/primitive/components/floatlabel/api.json +176 -0
- package/data/llms/primitive/components/floatlabel.md +47 -0
- package/data/llms/primitive/components/focustrap/api.json +241 -0
- package/data/llms/primitive/components/focustrap.md +93 -0
- package/data/llms/primitive/components/gallery/api.json +3622 -0
- package/data/llms/primitive/components/gallery.md +387 -0
- package/data/llms/primitive/components/iconfield/api.json +322 -0
- package/data/llms/primitive/components/iconfield.md +53 -0
- package/data/llms/primitive/components/iftalabel/api.json +177 -0
- package/data/llms/primitive/components/iftalabel.md +47 -0
- package/data/llms/primitive/components/inplace/api.json +783 -0
- package/data/llms/primitive/components/inplace.md +141 -0
- package/data/llms/primitive/components/inputcolor/api.json +2211 -0
- package/data/llms/primitive/components/inputcolor.md +295 -0
- package/data/llms/primitive/components/inputnumber/api.json +469 -0
- package/data/llms/primitive/components/inputnumber.md +99 -0
- package/data/llms/primitive/components/inputotp/api.json +469 -0
- package/data/llms/primitive/components/inputotp.md +121 -0
- package/data/llms/primitive/components/inputpassword/api.json +278 -0
- package/data/llms/primitive/components/inputpassword.md +84 -0
- package/data/llms/primitive/components/inputtags/api.json +407 -0
- package/data/llms/primitive/components/inputtags.md +243 -0
- package/data/llms/primitive/components/inputtext/api.json +207 -0
- package/data/llms/primitive/components/inputtext.md +81 -0
- package/data/llms/primitive/components/knob/api.json +841 -0
- package/data/llms/primitive/components/knob.md +148 -0
- package/data/llms/primitive/components/label/api.json +177 -0
- package/data/llms/primitive/components/label.md +44 -0
- package/data/llms/primitive/components/listbox/api.json +1741 -0
- package/data/llms/primitive/components/listbox.md +206 -0
- package/data/llms/primitive/components/menu/api.json +3836 -0
- package/data/llms/primitive/components/menu.md +479 -0
- package/data/llms/primitive/components/message/api.json +863 -0
- package/data/llms/primitive/components/message.md +151 -0
- package/data/llms/primitive/components/metergroup/api.json +1222 -0
- package/data/llms/primitive/components/metergroup.md +209 -0
- package/data/llms/primitive/components/motion.md +112 -0
- package/data/llms/primitive/components/navigationmenu/api.json +298 -0
- package/data/llms/primitive/components/navigationmenu.md +184 -0
- package/data/llms/primitive/components/organizationchart.md +133 -0
- package/data/llms/primitive/components/paginator/api.json +1637 -0
- package/data/llms/primitive/components/paginator.md +223 -0
- package/data/llms/primitive/components/panel/api.json +1270 -0
- package/data/llms/primitive/components/panel.md +186 -0
- package/data/llms/primitive/components/popover/api.json +2281 -0
- package/data/llms/primitive/components/popover.md +277 -0
- package/data/llms/primitive/components/portal/api.json +176 -0
- package/data/llms/primitive/components/portal.md +79 -0
- package/data/llms/primitive/components/progressbar/api.json +857 -0
- package/data/llms/primitive/components/progressbar.md +153 -0
- package/data/llms/primitive/components/progressspinner/api.json +725 -0
- package/data/llms/primitive/components/progressspinner.md +133 -0
- package/data/llms/primitive/components/radiobutton/api.json +929 -0
- package/data/llms/primitive/components/radiobutton.md +201 -0
- package/data/llms/primitive/components/rating/api.json +878 -0
- package/data/llms/primitive/components/rating.md +160 -0
- package/data/llms/primitive/components/scrollarea/api.json +1187 -0
- package/data/llms/primitive/components/scrollarea.md +255 -0
- package/data/llms/primitive/components/select/api.json +3167 -0
- package/data/llms/primitive/components/select.md +351 -0
- package/data/llms/primitive/components/sidebar/api.json +3699 -0
- package/data/llms/primitive/components/sidebar.md +444 -0
- package/data/llms/primitive/components/skeleton/api.json +213 -0
- package/data/llms/primitive/components/skeleton.md +80 -0
- package/data/llms/primitive/components/slider/api.json +1066 -0
- package/data/llms/primitive/components/slider.md +161 -0
- package/data/llms/primitive/components/speeddial/api.json +1002 -0
- package/data/llms/primitive/components/speeddial.md +197 -0
- package/data/llms/primitive/components/splitter/api.json +901 -0
- package/data/llms/primitive/components/splitter.md +137 -0
- package/data/llms/primitive/components/stepper/api.json +2102 -0
- package/data/llms/primitive/components/stepper.md +253 -0
- package/data/llms/primitive/components/styleclass.md +399 -0
- package/data/llms/primitive/components/tabs/api.json +1705 -0
- package/data/llms/primitive/components/tabs.md +200 -0
- package/data/llms/primitive/components/tag/api.json +189 -0
- package/data/llms/primitive/components/tag.md +100 -0
- package/data/llms/primitive/components/terminal/api.json +1709 -0
- package/data/llms/primitive/components/terminal.md +227 -0
- package/data/llms/primitive/components/textarea/api.json +213 -0
- package/data/llms/primitive/components/textarea.md +83 -0
- package/data/llms/primitive/components/timeline/api.json +1180 -0
- package/data/llms/primitive/components/timeline.md +185 -0
- package/data/llms/primitive/components/toast/api.json +2102 -0
- package/data/llms/primitive/components/toast.md +291 -0
- package/data/llms/primitive/components/togglebutton/api.json +433 -0
- package/data/llms/primitive/components/togglebutton.md +161 -0
- package/data/llms/primitive/components/togglebuttongroup/api.json +276 -0
- package/data/llms/primitive/components/togglebuttongroup.md +61 -0
- package/data/llms/primitive/components/toggleswitch/api.json +681 -0
- package/data/llms/primitive/components/toggleswitch.md +149 -0
- package/data/llms/primitive/components/toolbar/api.json +646 -0
- package/data/llms/primitive/components/toolbar.md +126 -0
- package/data/llms/primitive/components/tooltip/api.json +1534 -0
- package/data/llms/primitive/components/tooltip.md +202 -0
- package/data/llms/primitive/components/tree/api.json +2952 -0
- package/data/llms/primitive/components/tree.md +292 -0
- package/data/llms/primitive/components/treetable.md +187 -0
- package/data/llms/primitive/components/visuallyhidden/api.json +186 -0
- package/data/llms/primitive/components/visuallyhidden.md +87 -0
- package/data/llms/primitive/guides/ai/llms.md +25 -0
- package/data/llms/primitive/guides/icons/customicons.md +47 -0
- package/data/llms/primitive/guides/icons/primeicons.md +112 -0
- package/data/llms/primitive/guides/installation.md +115 -0
- package/data/llms/primitive/guides/introduction.md +20 -0
- package/data/llms/primitive/guides/misc/accessibility.md +215 -0
- package/data/llms/primitive/guides/misc/passthrough.md +95 -0
- package/data/llms/primitive/guides/misc/rtl.md +27 -0
- package/data/llms/primitive/llms.md +25 -0
- package/data/llms/primitive/resources/introduction.md +15 -0
- package/data/llms/styled/add-ons/introduction.md +16 -0
- package/data/llms/styled/components/accordion.md +735 -0
- package/data/llms/styled/components/animateonscroll.md +264 -0
- package/data/llms/styled/components/autocomplete.md +1597 -0
- package/data/llms/styled/components/avatar.md +313 -0
- package/data/llms/styled/components/badge.md +213 -0
- package/data/llms/styled/components/breadcrumb.md +461 -0
- package/data/llms/styled/components/button/api.json +246 -0
- package/data/llms/styled/components/button.md +641 -0
- package/data/llms/styled/components/buttongroup.md +614 -0
- package/data/llms/styled/components/card.md +228 -0
- package/data/llms/styled/components/carousel.md +388 -0
- package/data/llms/styled/components/checkbox.md +329 -0
- package/data/llms/styled/components/checkboxgroup.md +619 -0
- package/data/llms/styled/components/chip.md +300 -0
- package/data/llms/styled/components/compare.md +271 -0
- package/data/llms/styled/components/contextmenu.md +550 -0
- package/data/llms/styled/components/datatable.md +8259 -0
- package/data/llms/styled/components/dataview.md +907 -0
- package/data/llms/styled/components/datepicker.md +2807 -0
- package/data/llms/styled/components/dialog.md +1047 -0
- package/data/llms/styled/components/divider.md +207 -0
- package/data/llms/styled/components/drawer.md +470 -0
- package/data/llms/styled/components/fieldset.md +334 -0
- package/data/llms/styled/components/fileupload.md +747 -0
- package/data/llms/styled/components/floatlabel/api.json +210 -0
- package/data/llms/styled/components/floatlabel.md +231 -0
- package/data/llms/styled/components/fluid/api.json +204 -0
- package/data/llms/styled/components/fluid.md +177 -0
- package/data/llms/styled/components/focustrap.md +203 -0
- package/data/llms/styled/components/gallery.md +553 -0
- package/data/llms/styled/components/iconfield/api.json +382 -0
- package/data/llms/styled/components/iconfield.md +385 -0
- package/data/llms/styled/components/iftalabel/api.json +237 -0
- package/data/llms/styled/components/iftalabel.md +158 -0
- package/data/llms/styled/components/inplace.md +312 -0
- package/data/llms/styled/components/inputcolor.md +674 -0
- package/data/llms/styled/components/inputgroup/api.json +399 -0
- package/data/llms/styled/components/inputgroup.md +604 -0
- package/data/llms/styled/components/inputmask.md +282 -0
- package/data/llms/styled/components/inputnumber.md +563 -0
- package/data/llms/styled/components/inputotp.md +335 -0
- package/data/llms/styled/components/inputpassword.md +630 -0
- package/data/llms/styled/components/inputtags.md +727 -0
- package/data/llms/styled/components/inputtext.md +190 -0
- package/data/llms/styled/components/keyfilter.md +289 -0
- package/data/llms/styled/components/knob.md +305 -0
- package/data/llms/styled/components/label/api.json +237 -0
- package/data/llms/styled/components/label.md +224 -0
- package/data/llms/styled/components/listbox.md +807 -0
- package/data/llms/styled/components/menu.md +1175 -0
- package/data/llms/styled/components/message.md +570 -0
- package/data/llms/styled/components/metergroup.md +449 -0
- package/data/llms/styled/components/navigationmenu.md +926 -0
- package/data/llms/styled/components/orderlist.md +519 -0
- package/data/llms/styled/components/organizationchart/api.json +1457 -0
- package/data/llms/styled/components/organizationchart.md +791 -0
- package/data/llms/styled/components/overlaymanager.md +519 -0
- package/data/llms/styled/components/paginator.md +506 -0
- package/data/llms/styled/components/panel.md +394 -0
- package/data/llms/styled/components/picklist.md +1004 -0
- package/data/llms/styled/components/popover.md +372 -0
- package/data/llms/styled/components/progressbar.md +438 -0
- package/data/llms/styled/components/progressspinner.md +128 -0
- package/data/llms/styled/components/radiobutton.md +488 -0
- package/data/llms/styled/components/rating/api.json +766 -0
- package/data/llms/styled/components/rating.md +518 -0
- package/data/llms/styled/components/scrollarea.md +627 -0
- package/data/llms/styled/components/select.md +2122 -0
- package/data/llms/styled/components/sidebar.md +1587 -0
- package/data/llms/styled/components/skeleton.md +226 -0
- package/data/llms/styled/components/slider.md +453 -0
- package/data/llms/styled/components/speeddial.md +723 -0
- package/data/llms/styled/components/splitter.md +536 -0
- package/data/llms/styled/components/stepper.md +614 -0
- package/data/llms/styled/components/tabs.md +543 -0
- package/data/llms/styled/components/tag.md +263 -0
- package/data/llms/styled/components/terminal.md +543 -0
- package/data/llms/styled/components/textarea.md +257 -0
- package/data/llms/styled/components/timeline.md +620 -0
- package/data/llms/styled/components/toast.md +1013 -0
- package/data/llms/styled/components/togglebutton.md +287 -0
- package/data/llms/styled/components/togglebuttongroup.md +328 -0
- package/data/llms/styled/components/toggleswitch.md +262 -0
- package/data/llms/styled/components/toolbar.md +187 -0
- package/data/llms/styled/components/tooltip.md +430 -0
- package/data/llms/styled/components/tree.md +1386 -0
- package/data/llms/styled/components/treetable.md +6842 -0
- package/data/llms/styled/guides/ai/llms.md +25 -0
- package/data/llms/styled/guides/configuration.md +151 -0
- package/data/llms/styled/guides/icons/customicons.md +47 -0
- package/data/llms/styled/guides/icons/primeicons.md +112 -0
- package/data/llms/styled/guides/installation/astro.md +97 -0
- package/data/llms/styled/guides/installation/manual.md +3 -0
- package/data/llms/styled/guides/installation/nextjs.md +129 -0
- package/data/llms/styled/guides/installation/react-router.md +88 -0
- package/data/llms/styled/guides/installation/tanstack.md +92 -0
- package/data/llms/styled/guides/installation/vite.md +91 -0
- package/data/llms/styled/guides/installation.md +42 -0
- package/data/llms/styled/guides/introduction.md +20 -0
- package/data/llms/styled/guides/misc/accessibility.md +211 -0
- package/data/llms/styled/guides/misc/animations.md +389 -0
- package/data/llms/styled/guides/misc/passthrough.md +95 -0
- package/data/llms/styled/guides/misc/rtl.md +27 -0
- package/data/llms/styled/guides/theming/styled.md +779 -0
- package/data/llms/styled/guides/theming/tailwind.md +473 -0
- package/data/llms/styled/guides/theming/unstyled.md +115 -0
- package/data/llms/styled/resources/introduction.md +15 -0
- package/data/llms/tailwind/add-ons/introduction.md +16 -0
- package/data/llms/tailwind/components/accordion.md +383 -0
- package/data/llms/tailwind/components/autocomplete.md +1346 -0
- package/data/llms/tailwind/components/avatar.md +305 -0
- package/data/llms/tailwind/components/badge.md +207 -0
- package/data/llms/tailwind/components/breadcrumb.md +387 -0
- package/data/llms/tailwind/components/button/api.json +246 -0
- package/data/llms/tailwind/components/button.md +617 -0
- package/data/llms/tailwind/components/buttongroup.md +599 -0
- package/data/llms/tailwind/components/card.md +224 -0
- package/data/llms/tailwind/components/carousel.md +329 -0
- package/data/llms/tailwind/components/checkbox.md +179 -0
- package/data/llms/tailwind/components/checkboxgroup.md +279 -0
- package/data/llms/tailwind/components/chip.md +304 -0
- package/data/llms/tailwind/components/compare.md +295 -0
- package/data/llms/tailwind/components/contextmenu.md +415 -0
- package/data/llms/tailwind/components/datatable.md +4062 -0
- package/data/llms/tailwind/components/dataview.md +864 -0
- package/data/llms/tailwind/components/datepicker.md +823 -0
- package/data/llms/tailwind/components/dialog.md +1216 -0
- package/data/llms/tailwind/components/divider.md +205 -0
- package/data/llms/tailwind/components/drawer.md +500 -0
- package/data/llms/tailwind/components/fieldset.md +326 -0
- package/data/llms/tailwind/components/fluid.md +117 -0
- package/data/llms/tailwind/components/iconfield.md +197 -0
- package/data/llms/tailwind/components/inplace.md +324 -0
- package/data/llms/tailwind/components/inputcolor.md +493 -0
- package/data/llms/tailwind/components/inputgroup.md +375 -0
- package/data/llms/tailwind/components/inputnumber.md +463 -0
- package/data/llms/tailwind/components/inputotp.md +255 -0
- package/data/llms/tailwind/components/inputpassword.md +543 -0
- package/data/llms/tailwind/components/inputtext.md +141 -0
- package/data/llms/tailwind/components/label.md +100 -0
- package/data/llms/tailwind/components/listbox.md +886 -0
- package/data/llms/tailwind/components/menu.md +1049 -0
- package/data/llms/tailwind/components/message.md +575 -0
- package/data/llms/tailwind/components/metergroup.md +510 -0
- package/data/llms/tailwind/components/navigationmenu.md +528 -0
- package/data/llms/tailwind/components/overlaymanager.md +567 -0
- package/data/llms/tailwind/components/paginator.md +306 -0
- package/data/llms/tailwind/components/panel.md +395 -0
- package/data/llms/tailwind/components/popover.md +424 -0
- package/data/llms/tailwind/components/progressbar.md +313 -0
- package/data/llms/tailwind/components/radiobutton.md +366 -0
- package/data/llms/tailwind/components/rating.md +300 -0
- package/data/llms/tailwind/components/scrollarea.md +638 -0
- package/data/llms/tailwind/components/select.md +1220 -0
- package/data/llms/tailwind/components/sidebar.md +1511 -0
- package/data/llms/tailwind/components/skeleton.md +236 -0
- package/data/llms/tailwind/components/slider.md +291 -0
- package/data/llms/tailwind/components/splitter.md +546 -0
- package/data/llms/tailwind/components/tabs.md +462 -0
- package/data/llms/tailwind/components/tag.md +255 -0
- package/data/llms/tailwind/components/textarea.md +170 -0
- package/data/llms/tailwind/components/timeline.md +656 -0
- package/data/llms/tailwind/components/toast.md +246 -0
- package/data/llms/tailwind/components/togglebutton.md +264 -0
- package/data/llms/tailwind/components/togglebuttongroup.md +262 -0
- package/data/llms/tailwind/components/toggleswitch.md +203 -0
- package/data/llms/tailwind/components/toolbar.md +192 -0
- package/data/llms/tailwind/components/tooltip.md +449 -0
- package/data/llms/tailwind/guides/ai/llms.md +25 -0
- package/data/llms/tailwind/guides/icons/customicons.md +47 -0
- package/data/llms/tailwind/guides/icons/primeicons.md +112 -0
- package/data/llms/tailwind/guides/installation/astro.md +165 -0
- package/data/llms/tailwind/guides/installation/manual.md +3 -0
- package/data/llms/tailwind/guides/installation/nextjs.md +169 -0
- package/data/llms/tailwind/guides/installation/react-router.md +157 -0
- package/data/llms/tailwind/guides/installation/tanstack.md +161 -0
- package/data/llms/tailwind/guides/installation/vite.md +160 -0
- package/data/llms/tailwind/guides/installation.md +42 -0
- package/data/llms/tailwind/guides/introduction.md +20 -0
- package/data/llms/tailwind/guides/misc/accessibility.md +205 -0
- package/data/llms/tailwind/guides/misc/passthrough.md +95 -0
- package/data/llms/tailwind/guides/misc/rtl.md +27 -0
- package/data/llms/tailwind/guides/theming/guide.md +179 -0
- package/data/llms/tailwind/guides/theming.md +191 -0
- package/data/llms/tailwind/llms.md +25 -0
- package/data/llms/tailwind/resources/introduction.md +15 -0
- package/data/manifest.json +12409 -0
- package/data/mcp-data.json +14481 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +2 -0
- package/package.json +61 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Setup
|
|
2
|
+
|
|
3
|
+
Install @primereact/hooks and start using it in any React project.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
`@primereact/hooks` is a standalone package. Install it on its own:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @primereact/hooks
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
If you already use `primereact`, the hooks are bundled, you don't need a separate install, but you can still depend on `@primereact/hooks` directly if you prefer explicit versioning.
|
|
14
|
+
|
|
15
|
+
Peer dependency: **React 18+**.
|
|
16
|
+
|
|
17
|
+
## Import
|
|
18
|
+
|
|
19
|
+
Each hook has its own sub-path entry for optimal tree-shaking:
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { useFilter } from '@primereact/hooks/use-filter';
|
|
23
|
+
import { useLocalStorage } from '@primereact/hooks/use-local-storage';
|
|
24
|
+
import { useMatchMedia } from '@primereact/hooks/use-match-media';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The root entry re-exports everything when convenience matters more than the last few bytes:
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
import { useFilter, useLocalStorage } from '@primereact/hooks';
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## TypeScript
|
|
34
|
+
|
|
35
|
+
Types ship with the package. Generic hooks infer from the data you pass in:
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
interface Customer {
|
|
39
|
+
id: number;
|
|
40
|
+
name: string;
|
|
41
|
+
country: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const { filteredData } = useFilter<Customer>({
|
|
45
|
+
data: customers,
|
|
46
|
+
field: 'name',
|
|
47
|
+
value: query
|
|
48
|
+
});
|
|
49
|
+
// filteredData is Customer[]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## SSR / Next.js
|
|
53
|
+
|
|
54
|
+
Hooks can be imported from server components without extra setup. Any file that touches the DOM is marked `'use client'` internally, so it moves to the client boundary on demand.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# useAttrSelector
|
|
2
|
+
|
|
3
|
+
Produce a stable, unique string from React.useId, handy for scoping CSS and DOM selectors.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { useAttrSelector } from '@primereact/hooks/use-attr-selector';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
const selector = useAttrSelector('panel-'); // e.g. "panel-r0"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Pass an optional prefix; the hook strips colons and other delimiters React adds to `useId()` so the result is safe to use inside attribute selectors like `[data-scope="panel-r0"]`.
|
|
16
|
+
|
|
17
|
+
## Signature
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
function useAttrSelector(prefix?: string): string;
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## When to use it
|
|
24
|
+
|
|
25
|
+
Reach for this when you need a unique string that also works as a CSS selector fragment, scoped styles, data attributes, or query targets inside a single component instance.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# useControlledState
|
|
2
|
+
|
|
3
|
+
State that works controlled or uncontrolled, following the React convention of value + onChange with a defaultValue fallback.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { useControlledState } from '@primereact/hooks/use-controlled-state';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
const [value, setValue, isControlled] = useControlledState({
|
|
13
|
+
value: props.value,
|
|
14
|
+
defaultValue: props.defaultValue,
|
|
15
|
+
onChange: props.onChange
|
|
16
|
+
});
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
When the parent passes `value`, the hook stays controlled and delegates every update through `onChange`. When `value` is `undefined`, it owns the state internally, `defaultValue` seeds the first render.
|
|
20
|
+
|
|
21
|
+
## Signature
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
function useControlledState<T, E = T>(options: { value?: T; defaultValue?: T; onChange?: (next: E) => void }): [T | undefined, (next: T | ((prev?: T) => T)) => void, boolean];
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The returned tuple is `[value, setValue, isControlled]`. `isControlled` is a boolean frozen at mount, matching how React decides controlled vs uncontrolled inputs.
|
|
28
|
+
|
|
29
|
+
## When to use it
|
|
30
|
+
|
|
31
|
+
Any reusable component that exposes both `value` / `onChange` and a `defaultValue`. This hook handles the glue so you don't branch on `value === undefined` everywhere.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# useEventListener
|
|
2
|
+
|
|
3
|
+
Attach DOM event listeners declaratively, with automatic cleanup and a bind/unbind pair for manual control.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { useEventListener } from '@primereact/hooks/use-event-listener';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
const [bind, unbind] = useEventListener({
|
|
13
|
+
target: 'document',
|
|
14
|
+
type: 'click',
|
|
15
|
+
listener: (event) => console.log(event),
|
|
16
|
+
when: true
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The listener is attached when `when` is `true` and torn down automatically on unmount. Toggle `when` to pause without unmounting.
|
|
21
|
+
|
|
22
|
+
## Options
|
|
23
|
+
|
|
24
|
+
- `target`, `'document' | 'window' | 'body' | HTMLElement | (() => HTMLElement) | Ref | string | null`. Accepts a selector string, a ref, or a function that resolves the element on demand.
|
|
25
|
+
- `type`, event name, e.g. `'click'`, `'keydown'`, or a custom event.
|
|
26
|
+
- `listener`, handler function.
|
|
27
|
+
- `options?`, standard `addEventListener` options (`capture`, `passive`, `once`).
|
|
28
|
+
- `when?`, defaults to `true`; set `false` to disable.
|
|
29
|
+
|
|
30
|
+
## Manual control
|
|
31
|
+
|
|
32
|
+
The returned `[bind, unbind]` lets you attach/detach imperatively, useful when you want to listen in response to a user action rather than a prop:
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
<button onClick={() => bind()}>Listen</button>
|
|
36
|
+
<button onClick={() => unbind()}>Stop</button>
|
|
37
|
+
```
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# useFilter
|
|
2
|
+
|
|
3
|
+
Generic filter hook for flat collections, with built-in match modes, accent-insensitive matching, locale support, and custom matcher registration.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { useFilter } from '@primereact/hooks/use-filter';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
const { filteredData, value, setValue, isFiltered } = useFilter({
|
|
13
|
+
data: products,
|
|
14
|
+
field: ['name', 'category'],
|
|
15
|
+
matchMode: 'contains'
|
|
16
|
+
});
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`useFilter` is a framework-level hook from `@primereact/hooks` that takes arbitrary data plus one or more filter rules and returns the filtered result. The same built-in matcher registry powers DataTable's filter feature, so behaviour stays consistent across any component built on top of it.
|
|
20
|
+
|
|
21
|
+
## Signature
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
function useFilter<T, TMode extends string = BuiltInMatchMode>(options: UseFilterOptions<T, TMode>): UseFilterReturn<T, TMode>;
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
A rule targets one field (or an array of fields for multi-field search) with a value and a match mode.
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
defaultRules: [
|
|
33
|
+
{ field: 'name', value: 'iphone', matchMode: 'startsWith' },
|
|
34
|
+
{ field: ['name', 'category', 'description'], value: 'blue' },
|
|
35
|
+
{ field: 'price', value: [100, 500], matchMode: 'between' }
|
|
36
|
+
];
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Composite rules carry multiple constraints tied by an AND/OR operator:
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
{
|
|
43
|
+
field: 'name',
|
|
44
|
+
operator: 'and',
|
|
45
|
+
constraints: [
|
|
46
|
+
{ value: 'A', matchMode: 'startsWith' },
|
|
47
|
+
{ value: 'Z', matchMode: 'notEquals' }
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Basic
|
|
53
|
+
|
|
54
|
+
For the common "single field/multi-field search" case you can skip the `rules` array and use the `field` / `value` / `matchMode` shorthand.
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
'use client';
|
|
58
|
+
import { ProductService, type Product } from '@/shared/services/product.service';
|
|
59
|
+
import { Search } from '@primeicons/react/search';
|
|
60
|
+
import { useFilter } from '@primereact/hooks/use-filter';
|
|
61
|
+
import { IconField } from '@primereact/ui/iconfield';
|
|
62
|
+
import { InputText } from '@primereact/ui/inputtext';
|
|
63
|
+
import { Tag } from '@primereact/ui/tag';
|
|
64
|
+
import Image from 'next/image';
|
|
65
|
+
import * as React from 'react';
|
|
66
|
+
|
|
67
|
+
const statusSeverity: Record<string, 'success' | 'warn' | 'danger'> = {
|
|
68
|
+
INSTOCK: 'success',
|
|
69
|
+
LOWSTOCK: 'warn',
|
|
70
|
+
OUTOFSTOCK: 'danger'
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default function BasicDemo() {
|
|
74
|
+
const [products, setProducts] = React.useState<Product[]>([]);
|
|
75
|
+
|
|
76
|
+
React.useEffect(() => {
|
|
77
|
+
setProducts(ProductService.getProductsData().slice(0, 12));
|
|
78
|
+
}, []);
|
|
79
|
+
|
|
80
|
+
const [search, setSearch] = React.useState('');
|
|
81
|
+
|
|
82
|
+
const { filteredData } = useFilter<Product>({
|
|
83
|
+
data: products,
|
|
84
|
+
field: ['name', 'category', 'code'],
|
|
85
|
+
value: search,
|
|
86
|
+
matchMode: 'contains'
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<div className="w-full flex flex-col gap-3">
|
|
91
|
+
<IconField.Root className="w-full sm:max-w-sm">
|
|
92
|
+
<IconField.Inset>
|
|
93
|
+
<Search />
|
|
94
|
+
</IconField.Inset>
|
|
95
|
+
<InputText
|
|
96
|
+
type="search"
|
|
97
|
+
placeholder="Search name, category, code..."
|
|
98
|
+
value={search}
|
|
99
|
+
onChange={(e: any) => setSearch(e.target.value)}
|
|
100
|
+
className="w-full"
|
|
101
|
+
/>
|
|
102
|
+
</IconField.Root>
|
|
103
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-3">
|
|
104
|
+
{filteredData.map((item) => (
|
|
105
|
+
<div key={item.id} className="p-3 border border-surface-200 dark:border-surface-700 rounded-md flex items-center gap-3">
|
|
106
|
+
<div className="relative shrink-0 w-12 h-12 rounded-md shadow overflow-hidden">
|
|
107
|
+
<Image
|
|
108
|
+
src={`https://primefaces.org/cdn/primevue/images/product/${item.image}`}
|
|
109
|
+
alt={item.name}
|
|
110
|
+
fill
|
|
111
|
+
sizes="48px"
|
|
112
|
+
className="object-cover"
|
|
113
|
+
/>
|
|
114
|
+
</div>
|
|
115
|
+
<div className="flex flex-col gap-1 flex-1 min-w-0">
|
|
116
|
+
<span className="font-medium truncate">{item.name}</span>
|
|
117
|
+
<span className="text-xs text-surface-500 dark:text-surface-400 truncate">{item.code}</span>
|
|
118
|
+
<div className="flex flex-wrap items-center gap-2 mt-1">
|
|
119
|
+
<Tag severity="secondary">{item.category}</Tag>
|
|
120
|
+
<Tag severity={statusSeverity[item.inventoryStatus] ?? 'secondary'}>{item.inventoryStatus}</Tag>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
))}
|
|
125
|
+
</div>
|
|
126
|
+
{filteredData.length === 0 && (
|
|
127
|
+
<div className="p-4 text-center text-sm text-surface-500 dark:text-surface-400">No products match the search.</div>
|
|
128
|
+
)}
|
|
129
|
+
</div>
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Advanced, multi-rule + custom matcher
|
|
135
|
+
|
|
136
|
+
Pass `matchers` to register an ad-hoc matcher for a single hook instance. The cursor API (`rule(index)`) gives a typed handle per rule.
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
'use client';
|
|
140
|
+
import { ProductService, type Product } from '@/shared/services/product.service';
|
|
141
|
+
import { ChevronDown } from '@primeicons/react/chevron-down';
|
|
142
|
+
import { Search } from '@primeicons/react/search';
|
|
143
|
+
import { useFilter, type FilterMatcher } from '@primereact/hooks/use-filter';
|
|
144
|
+
import { Button } from '@primereact/ui/button';
|
|
145
|
+
import { IconField } from '@primereact/ui/iconfield';
|
|
146
|
+
import { InputText } from '@primereact/ui/inputtext';
|
|
147
|
+
import { Select, type SelectValueChangeEvent } from '@primereact/ui/select';
|
|
148
|
+
import { Tag } from '@primereact/ui/tag';
|
|
149
|
+
import * as React from 'react';
|
|
150
|
+
|
|
151
|
+
const statusOptions = [
|
|
152
|
+
{ label: 'All statuses', value: '' },
|
|
153
|
+
{ label: 'In Stock', value: 'INSTOCK' },
|
|
154
|
+
{ label: 'Low Stock', value: 'LOWSTOCK' },
|
|
155
|
+
{ label: 'Out of Stock', value: 'OUTOFSTOCK' }
|
|
156
|
+
];
|
|
157
|
+
|
|
158
|
+
const extraMatchers: Record<string, FilterMatcher> = {
|
|
159
|
+
expensive: (value) => Number(value) >= 100
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export default function AdvancedDemo() {
|
|
163
|
+
const [products, setProducts] = React.useState<Product[]>([]);
|
|
164
|
+
|
|
165
|
+
React.useEffect(() => {
|
|
166
|
+
setProducts(ProductService.getProductsData().slice(0, 12));
|
|
167
|
+
}, []);
|
|
168
|
+
|
|
169
|
+
const { filteredData, rule, isFiltered, clearAll } = useFilter<Product, 'contains' | 'equals' | 'expensive'>({
|
|
170
|
+
data: products,
|
|
171
|
+
defaultRules: [
|
|
172
|
+
{ field: 'name', value: null, matchMode: 'contains' },
|
|
173
|
+
{ field: 'inventoryStatus', value: null, matchMode: 'equals' },
|
|
174
|
+
{ field: 'price', value: null, matchMode: 'expensive' }
|
|
175
|
+
],
|
|
176
|
+
matchers: extraMatchers
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
const nameRule = rule(0);
|
|
180
|
+
const statusRule = rule(1);
|
|
181
|
+
const priceRule = rule(2);
|
|
182
|
+
|
|
183
|
+
return (
|
|
184
|
+
<div className="w-full flex flex-col gap-3">
|
|
185
|
+
<div className="flex flex-wrap items-center gap-2">
|
|
186
|
+
<IconField.Root className="w-full sm:w-auto sm:flex-1 sm:max-w-xs">
|
|
187
|
+
<IconField.Inset>
|
|
188
|
+
<Search />
|
|
189
|
+
</IconField.Inset>
|
|
190
|
+
<InputText
|
|
191
|
+
type="search"
|
|
192
|
+
placeholder="Name contains..."
|
|
193
|
+
size="small"
|
|
194
|
+
value={(nameRule?.value as string) ?? ''}
|
|
195
|
+
onChange={(e: any) => nameRule?.setValue(e.target.value)}
|
|
196
|
+
className="w-full"
|
|
197
|
+
/>
|
|
198
|
+
</IconField.Root>
|
|
199
|
+
|
|
200
|
+
<Select.Root
|
|
201
|
+
value={(statusRule?.value as string) ?? ''}
|
|
202
|
+
onValueChange={(e: SelectValueChangeEvent) => statusRule?.setValue(e.value || null)}
|
|
203
|
+
options={statusOptions}
|
|
204
|
+
optionLabel="label"
|
|
205
|
+
optionValue="value"
|
|
206
|
+
size="small"
|
|
207
|
+
>
|
|
208
|
+
<Select.Trigger className="w-full sm:w-40">
|
|
209
|
+
<Select.Value placeholder="Status" />
|
|
210
|
+
<Select.Indicator>
|
|
211
|
+
<ChevronDown />
|
|
212
|
+
</Select.Indicator>
|
|
213
|
+
</Select.Trigger>
|
|
214
|
+
<Select.Portal>
|
|
215
|
+
<Select.Positioner>
|
|
216
|
+
<Select.Popup>
|
|
217
|
+
<Select.List />
|
|
218
|
+
</Select.Popup>
|
|
219
|
+
</Select.Positioner>
|
|
220
|
+
</Select.Portal>
|
|
221
|
+
</Select.Root>
|
|
222
|
+
|
|
223
|
+
<Button
|
|
224
|
+
variant={priceRule?.value === true ? undefined : 'outlined'}
|
|
225
|
+
severity={priceRule?.value === true ? 'primary' : 'secondary'}
|
|
226
|
+
size="small"
|
|
227
|
+
onClick={() => priceRule?.setValue(priceRule?.value === true ? null : true)}
|
|
228
|
+
>
|
|
229
|
+
≥ $100
|
|
230
|
+
</Button>
|
|
231
|
+
|
|
232
|
+
{isFiltered && (
|
|
233
|
+
<Button variant="text" size="small" onClick={clearAll}>
|
|
234
|
+
Clear
|
|
235
|
+
</Button>
|
|
236
|
+
)}
|
|
237
|
+
</div>
|
|
238
|
+
|
|
239
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-3">
|
|
240
|
+
{filteredData.map((item) => (
|
|
241
|
+
<div key={item.id} className="p-3 border border-surface-200 dark:border-surface-700 rounded-md flex flex-col gap-1">
|
|
242
|
+
<span className="font-medium">{item.name}</span>
|
|
243
|
+
<span className="text-xs text-surface-500 dark:text-surface-400">{item.code}</span>
|
|
244
|
+
<div className="flex items-center justify-between mt-2">
|
|
245
|
+
<Tag severity="secondary">{item.category}</Tag>
|
|
246
|
+
<span className="font-semibold">${item.price}</span>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
))}
|
|
250
|
+
</div>
|
|
251
|
+
{filteredData.length === 0 && (
|
|
252
|
+
<div className="p-4 text-center text-sm text-surface-500 dark:text-surface-400">No products match the filters.</div>
|
|
253
|
+
)}
|
|
254
|
+
</div>
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Global matcher registry
|
|
260
|
+
|
|
261
|
+
For matchers you want available everywhere, `registerMatcher` writes into a shared table the hook consults alongside the built-ins.
|
|
262
|
+
|
|
263
|
+
```tsx
|
|
264
|
+
import { registerMatcher } from '@primereact/hooks/use-filter';
|
|
265
|
+
|
|
266
|
+
registerMatcher('greaterThanAvg', (value, filter) => Number(value) > Number(filter));
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Local `matchers` option always wins when both are present. Call `unregisterMatcher(name)` to remove an entry (useful in tests).
|
|
270
|
+
|
|
271
|
+
## Lazy (server-side)
|
|
272
|
+
|
|
273
|
+
Set `lazy: true` to skip client-side filtering. `filteredData` is returned unchanged. Whenever the rules settle (respecting `filterDelay`), `onLazyLoad` fires with the current rule set, typically you turn that into a request and replace `data` with the server response.
|
|
274
|
+
|
|
275
|
+
```tsx
|
|
276
|
+
const [data, setData] = React.useState<Customer[]>([]);
|
|
277
|
+
const [query, setQuery] = React.useState('');
|
|
278
|
+
|
|
279
|
+
useFilter<Customer>({
|
|
280
|
+
data,
|
|
281
|
+
lazy: true,
|
|
282
|
+
field: ['name', 'country'],
|
|
283
|
+
value: query,
|
|
284
|
+
onValueChange: (v) => setQuery((v as string) ?? ''),
|
|
285
|
+
filterDelay: 300,
|
|
286
|
+
onLazyLoad: async ({ rules }) => {
|
|
287
|
+
const res = await fetch('/api/customers?' + toQuery(rules));
|
|
288
|
+
setData(await res.json());
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## Cursor API
|
|
294
|
+
|
|
295
|
+
Setters by index:
|
|
296
|
+
|
|
297
|
+
```tsx
|
|
298
|
+
const { setValue, setMatchMode, setOperator, setConstraintValue } = useFilter({ ... });
|
|
299
|
+
|
|
300
|
+
setValue(0, 'amy');
|
|
301
|
+
setConstraintValue(0, 1, 'Z');
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Or scoped by rule:
|
|
305
|
+
|
|
306
|
+
```tsx
|
|
307
|
+
const { rule } = useFilter({ ... });
|
|
308
|
+
|
|
309
|
+
rule(0)?.setValue('amy');
|
|
310
|
+
rule('name')?.addConstraint('equals');
|
|
311
|
+
rule('name')?.constraint(1)?.setValue('Z');
|
|
312
|
+
```
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# useHotKey
|
|
2
|
+
|
|
3
|
+
Bind keyboard shortcuts with modifier combinations, single key or array of keys, with enable flag for scoping.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { useHotKey } from '@primereact/hooks/use-hot-key';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
useHotKey('ctrl+k', (event) => {
|
|
13
|
+
event.preventDefault();
|
|
14
|
+
openCommandPalette();
|
|
15
|
+
});
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Modifiers are case-insensitive and accept aliases: `ctrl`/`control`, `cmd`/`meta`/`command`, `alt`/`option`, `shift`. The special strings `space` and `spacebar` resolve to the space key.
|
|
19
|
+
|
|
20
|
+
Pass an array of specs to bind multiple shortcuts to the same handler:
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
useHotKey(['ctrl+k', 'meta+k'], openCommandPalette);
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Signature
|
|
27
|
+
|
|
28
|
+
```ts
|
|
29
|
+
function useHotKey(
|
|
30
|
+
keys: string | string[],
|
|
31
|
+
handler: (event: KeyboardEvent) => void,
|
|
32
|
+
options?: {
|
|
33
|
+
target?: Document | HTMLElement | null;
|
|
34
|
+
event?: 'keydown' | 'keyup' | 'keypress';
|
|
35
|
+
when?: boolean;
|
|
36
|
+
}
|
|
37
|
+
): void;
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Defaults: listens on `document` for `keydown` while `when` is true. Pass a target element to scope shortcuts to a specific region.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# useId
|
|
2
|
+
|
|
3
|
+
Stable unique identifier with an optional explicit override.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { useId } from '@primereact/hooks/use-id';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
const id = useId(); // e.g. "pr_id_r0"
|
|
13
|
+
const fixed = useId('my-panel'); // "my-panel"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Pass a value to opt out of the generated id, useful for components that accept an optional `id` prop but need a fallback.
|
|
17
|
+
|
|
18
|
+
## Signature
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
function useId(initialValue?: string): string;
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Internally wraps `React.useId()` and strips the characters React inserts (`:`, `«`, `»`) so the result is safe to use in selectors and HTML attributes.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# useIntersectionObserver
|
|
2
|
+
|
|
3
|
+
A thin wrapper over the IntersectionObserver API with imperative observe/unobserve controls.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { useIntersectionObserver } from '@primereact/hooks/use-intersection-observer';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
const ref = React.useRef<HTMLDivElement>(null);
|
|
13
|
+
const { observe, isIntersecting } = useIntersectionObserver({
|
|
14
|
+
threshold: 0.5,
|
|
15
|
+
onIntersect: (entries) => console.log(entries)
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
if (ref.current) observe(ref.current);
|
|
20
|
+
}, [observe]);
|
|
21
|
+
|
|
22
|
+
return <div ref={ref}>{isIntersecting ? 'visible' : 'off-screen'}</div>;
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Options
|
|
26
|
+
|
|
27
|
+
Standard `IntersectionObserverInit` fields (`root`, `rootMargin`, `threshold`) plus:
|
|
28
|
+
|
|
29
|
+
- `disabled?`, skip creating the observer entirely.
|
|
30
|
+
- `onIntersect?(entries, observer)`, called on every intersection change.
|
|
31
|
+
- `fallback?()`, invoked when `IntersectionObserver` is unavailable.
|
|
32
|
+
|
|
33
|
+
## Returns
|
|
34
|
+
|
|
35
|
+
- `entries`, current entries from the last callback.
|
|
36
|
+
- `isIntersecting`, `true` if any observed element is intersecting.
|
|
37
|
+
- `observe(el)`, `unobserve(el)`, `disconnect()`, imperative controls.
|
|
38
|
+
- `observer`, the underlying `IntersectionObserver` instance (or `null` when disabled).
|
|
39
|
+
|
|
40
|
+
## When to use it
|
|
41
|
+
|
|
42
|
+
Pick this hook when you need direct control, observing multiple elements, toggling dynamically, or integrating with virtualization. For simple "is this one element visible" cases, you may prefer the lighter-weight visibility patterns built on top of it.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# useIsMobile
|
|
2
|
+
|
|
3
|
+
Boolean flag that flips when the viewport crosses a mobile breakpoint.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { useIsMobile } from '@primereact/hooks/use-is-mobile';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
const isMobile = useIsMobile(); // default breakpoint: 768px
|
|
13
|
+
const isTablet = useIsMobile(1024); // custom breakpoint
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Returns `true` when the viewport width is **below** the breakpoint. Implemented on top of `useMatchMedia`, so it updates live as the window resizes.
|
|
17
|
+
|
|
18
|
+
## Signature
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
function useIsMobile(breakpoint?: number): boolean;
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Default breakpoint is 768px. Pass any max-width you care about, the hook resolves the corresponding media query for you.
|