@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,301 @@
|
|
|
1
|
+
# usePopover
|
|
2
|
+
|
|
3
|
+
Hook that manages popover open state, outside click dismissal, escape key handling, and focus management.
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
'use client';
|
|
7
|
+
import { Check } from '@primeicons/react/check';
|
|
8
|
+
import { Times } from '@primeicons/react/times';
|
|
9
|
+
import { usePopover } from '@primereact/headless/popover';
|
|
10
|
+
import { usePortal } from '@primereact/headless/portal';
|
|
11
|
+
import { usePositioner } from '@primereact/headless/positioner';
|
|
12
|
+
import * as React from 'react';
|
|
13
|
+
import { createPortal } from 'react-dom';
|
|
14
|
+
|
|
15
|
+
const arrowPositionStyles: Record<string, React.CSSProperties> = {
|
|
16
|
+
top: { bottom: '-0.25rem', left: 'var(--px-placer-arrow-x)', transform: 'translateX(-50%) rotate(225deg)' },
|
|
17
|
+
bottom: { top: '-0.25rem', left: 'var(--px-placer-arrow-x)', transform: 'translateX(-50%) rotate(45deg)' },
|
|
18
|
+
left: { right: '-0.25rem', top: 'var(--px-placer-arrow-y)', transform: 'translateY(-50%) rotate(315deg)' },
|
|
19
|
+
right: { left: '-0.25rem', top: 'var(--px-placer-arrow-y)', transform: 'translateY(-50%) rotate(135deg)' }
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const team = [
|
|
23
|
+
{ initials: 'AK', name: 'Alex Kim' },
|
|
24
|
+
{ initials: 'MR', name: 'Maya Ross' },
|
|
25
|
+
{ initials: 'SL', name: 'Sam Lee' }
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
export default function BasicDemo() {
|
|
29
|
+
const { triggerProps, popupProps, positionerProps, arrowProps, closeProps, state } = usePopover();
|
|
30
|
+
const portal = usePortal();
|
|
31
|
+
const [copied, setCopied] = React.useState(false);
|
|
32
|
+
|
|
33
|
+
const positioner = usePositioner({
|
|
34
|
+
anchor: state.anchorElement,
|
|
35
|
+
content: state.positionerElement,
|
|
36
|
+
arrow: state.arrowElement,
|
|
37
|
+
side: 'bottom',
|
|
38
|
+
sideOffset: 12,
|
|
39
|
+
flip: true,
|
|
40
|
+
shift: true
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const side = positioner.state.actualSide ?? 'bottom';
|
|
44
|
+
|
|
45
|
+
const handleCopy = () => {
|
|
46
|
+
navigator.clipboard.writeText('https://acme.io/project/design-system');
|
|
47
|
+
setCopied(true);
|
|
48
|
+
setTimeout(() => setCopied(false), 2000);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<div className="flex justify-center min-h-48">
|
|
53
|
+
<button
|
|
54
|
+
{...triggerProps}
|
|
55
|
+
className="inline-flex items-center justify-center h-8 px-3 text-sm font-medium text-surface-700 dark:text-surface-0 bg-transparent border border-surface-200 dark:border-surface-700 rounded-lg cursor-pointer select-none transition-colors hover:bg-surface-50 dark:hover:bg-surface-800 focus-visible:outline-1 focus-visible:outline-primary focus-visible:outline-offset-2"
|
|
56
|
+
>
|
|
57
|
+
Share
|
|
58
|
+
</button>
|
|
59
|
+
{portal.state.mounted &&
|
|
60
|
+
state.open &&
|
|
61
|
+
createPortal(
|
|
62
|
+
<div {...positionerProps}>
|
|
63
|
+
<div
|
|
64
|
+
{...popupProps}
|
|
65
|
+
className="bg-surface-0 dark:bg-surface-900 rounded-xl shadow-lg border border-surface-200 dark:border-surface-700 w-80 outline-none relative"
|
|
66
|
+
>
|
|
67
|
+
<div
|
|
68
|
+
{...arrowProps}
|
|
69
|
+
className="absolute w-2 h-2 bg-surface-0 dark:bg-surface-900 border-l border-t border-surface-200 dark:border-surface-700"
|
|
70
|
+
style={arrowPositionStyles[side]}
|
|
71
|
+
/>
|
|
72
|
+
<div className="flex items-center justify-between px-4 pt-4 pb-2">
|
|
73
|
+
<h3 className="text-sm font-semibold text-surface-900 dark:text-surface-0 m-0">Share Project</h3>
|
|
74
|
+
<button
|
|
75
|
+
{...closeProps}
|
|
76
|
+
className="flex items-center justify-center w-7 h-7 rounded-md bg-transparent border-none text-surface-500 dark:text-surface-400 cursor-pointer transition-colors hover:bg-surface-100 dark:hover:bg-surface-800 focus-visible:outline-1 focus-visible:outline-primary focus-visible:-outline-offset-1"
|
|
77
|
+
>
|
|
78
|
+
<Times className="w-3.5 h-3.5" />
|
|
79
|
+
</button>
|
|
80
|
+
</div>
|
|
81
|
+
<div className="px-4 pb-3">
|
|
82
|
+
<div className="flex gap-2">
|
|
83
|
+
<input
|
|
84
|
+
ref={(el) => {
|
|
85
|
+
if (el) {
|
|
86
|
+
el.focus({ preventScroll: true });
|
|
87
|
+
el.select();
|
|
88
|
+
}
|
|
89
|
+
}}
|
|
90
|
+
type="text"
|
|
91
|
+
readOnly
|
|
92
|
+
value="https://acme.io/project/design-system"
|
|
93
|
+
className="flex-1 min-w-0 px-3 py-1.5 text-sm bg-transparent text-surface-700 dark:text-surface-0 border border-surface-200 dark:border-surface-700 rounded-md outline-none focus:border-primary focus:ring-1 focus:ring-primary"
|
|
94
|
+
/>
|
|
95
|
+
<button
|
|
96
|
+
onClick={handleCopy}
|
|
97
|
+
className="inline-flex items-center justify-center gap-1.5 min-w-24 px-3 py-1.5 text-sm font-medium rounded-md border-none cursor-pointer select-none transition-colors bg-primary text-primary-contrast hover:bg-primary-emphasis focus-visible:outline-1 focus-visible:outline-primary focus-visible:outline-offset-2"
|
|
98
|
+
>
|
|
99
|
+
{copied ? (
|
|
100
|
+
<>
|
|
101
|
+
<Check className="w-3.5 h-3.5" /> Copied!
|
|
102
|
+
</>
|
|
103
|
+
) : (
|
|
104
|
+
'Copy'
|
|
105
|
+
)}
|
|
106
|
+
</button>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
<div className="px-4 pb-3">
|
|
110
|
+
<p className="text-xs font-medium text-surface-500 dark:text-surface-400 mt-0 mb-2">Team Members</p>
|
|
111
|
+
<div className="flex items-center gap-2">
|
|
112
|
+
{team.map((member) => (
|
|
113
|
+
<div
|
|
114
|
+
key={member.initials}
|
|
115
|
+
title={member.name}
|
|
116
|
+
className="w-8 h-8 rounded-full bg-primary/15 text-primary text-xs font-semibold flex items-center justify-center"
|
|
117
|
+
>
|
|
118
|
+
{member.initials}
|
|
119
|
+
</div>
|
|
120
|
+
))}
|
|
121
|
+
<button className="w-8 h-8 rounded-full border border-dashed border-surface-300 dark:border-surface-600 bg-transparent text-surface-400 dark:text-surface-500 text-xs cursor-pointer flex items-center justify-center hover:border-primary hover:text-primary transition-colors">
|
|
122
|
+
+
|
|
123
|
+
</button>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
<div className="px-4 pb-4">
|
|
127
|
+
<p className="text-xs text-surface-400 dark:text-surface-500 m-0">Anyone with the link can view this project.</p>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
</div>,
|
|
131
|
+
document.body
|
|
132
|
+
)}
|
|
133
|
+
</div>
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Usage
|
|
139
|
+
|
|
140
|
+
```tsx
|
|
141
|
+
import { usePopover } from '@primereact/headless/popover';
|
|
142
|
+
import { usePortal } from '@primereact/headless/portal';
|
|
143
|
+
import { usePositioner } from '@primereact/headless/positioner';
|
|
144
|
+
import { createPortal } from 'react-dom';
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
const { triggerProps, popupProps, positionerProps, arrowProps, closeProps, state } = usePopover();
|
|
149
|
+
const portal = usePortal();
|
|
150
|
+
|
|
151
|
+
usePositioner({
|
|
152
|
+
anchor: state.anchorElement,
|
|
153
|
+
content: state.positionerElement,
|
|
154
|
+
arrow: state.arrowElement,
|
|
155
|
+
side: 'bottom',
|
|
156
|
+
flip: true,
|
|
157
|
+
shift: true
|
|
158
|
+
});
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`usePopover` manages open/close state, outside click dismissal, escape key handling, and optional focus trapping. Use [usePositioner](/docs/headless/components/positioner) for anchor-relative positioning and [usePortal](/docs/headless/components/portal) with `createPortal` for body portaling. See [Primitive](/docs/primitive/components/popover) for a component-based API.
|
|
162
|
+
|
|
163
|
+
## Features
|
|
164
|
+
|
|
165
|
+
- **Open/close lifecycle**, controlled or uncontrolled state with outside-click dismissal and escape-key handling
|
|
166
|
+
- **Focus management**, optional focus trap plus `autoFocus` control over initial focus when the popup mounts
|
|
167
|
+
- **Anchor refs**, exposes `state.anchorElement`, `state.positionerElement`, and `state.arrowElement` for wiring into `usePositioner`
|
|
168
|
+
- **Arrow support**, `arrowProps` pairs with the positioner's CSS custom properties for per-side arrow placement
|
|
169
|
+
- **Portal-friendly**, `state.open` drives conditional rendering of portaled content without managing mount state yourself
|
|
170
|
+
- **Imperative controls**, `setOpen(open, event)` for programmatic toggling tied to a source event
|
|
171
|
+
|
|
172
|
+
## Working with callbacks
|
|
173
|
+
|
|
174
|
+
### Controlled open state
|
|
175
|
+
|
|
176
|
+
Pass `open` and `onOpenChange` to drive visibility from external state.
|
|
177
|
+
|
|
178
|
+
```tsx
|
|
179
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
|
180
|
+
|
|
181
|
+
const popover = usePopover({
|
|
182
|
+
open: isOpen,
|
|
183
|
+
onOpenChange: (e) => setIsOpen(e.open)
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
<>
|
|
187
|
+
<button {...triggerProps}></button>;
|
|
188
|
+
{
|
|
189
|
+
portal.state.mounted &&
|
|
190
|
+
state.open &&
|
|
191
|
+
createPortal(
|
|
192
|
+
<div {...positionerProps}>
|
|
193
|
+
<div {...popupProps}>
|
|
194
|
+
<div {...arrowProps} />
|
|
195
|
+
<button {...closeProps}></button>
|
|
196
|
+
</div>
|
|
197
|
+
</div>,
|
|
198
|
+
document.body
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Composing with usePositioner
|
|
202
|
+
|
|
203
|
+
`usePopover` manages state and element refs but not positioning. Feed the element refs from `state` into `usePositioner` to place the popup relative to the trigger.
|
|
204
|
+
|
|
205
|
+
```tsx
|
|
206
|
+
const { triggerProps, popupProps, positionerProps, state } = usePopover();
|
|
207
|
+
|
|
208
|
+
usePositioner({
|
|
209
|
+
anchor: state.anchorElement,
|
|
210
|
+
content: state.positionerElement,
|
|
211
|
+
side: 'bottom',
|
|
212
|
+
flip: true,
|
|
213
|
+
shift: true
|
|
214
|
+
});
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Rendering into a portal
|
|
218
|
+
|
|
219
|
+
Gate the portal content on both `portal.state.mounted` and `state.open` so the popup renders only on the client and only when visible.
|
|
220
|
+
|
|
221
|
+
```tsx
|
|
222
|
+
const portal = usePortal();
|
|
223
|
+
|
|
224
|
+
{
|
|
225
|
+
portal.state.mounted &&
|
|
226
|
+
state.open &&
|
|
227
|
+
createPortal(
|
|
228
|
+
<div {...positionerProps}>
|
|
229
|
+
<div {...popupProps}>...</div>
|
|
230
|
+
</div>,
|
|
231
|
+
document.body
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Arrow positioning
|
|
237
|
+
|
|
238
|
+
Spread `arrowProps` on an arrow element and pass `state.arrowElement` to the positioner. The positioner writes `--placer-arrow-x` and `--placer-arrow-y` for you to consume in CSS.
|
|
239
|
+
|
|
240
|
+
```tsx
|
|
241
|
+
<div {...popupProps}>
|
|
242
|
+
<div {...arrowProps} />
|
|
243
|
+
</div>
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
```css
|
|
247
|
+
[data-scope='popover'][data-part='arrow'] {
|
|
248
|
+
position: absolute;
|
|
249
|
+
width: 0.5rem;
|
|
250
|
+
height: 0.5rem;
|
|
251
|
+
border-left: 1px solid var(--p-content-border-color);
|
|
252
|
+
border-top: 1px solid var(--p-content-border-color);
|
|
253
|
+
}
|
|
254
|
+
[data-part='arrow'][data-side='bottom'] {
|
|
255
|
+
top: -0.25rem;
|
|
256
|
+
left: var(--px-placer-arrow-x);
|
|
257
|
+
transform: translateX(-50%) rotate(45deg);
|
|
258
|
+
}
|
|
259
|
+
[data-part='arrow'][data-side='top'] {
|
|
260
|
+
bottom: -0.25rem;
|
|
261
|
+
left: var(--px-placer-arrow-x);
|
|
262
|
+
transform: translateX(-50%) rotate(225deg);
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Modal-like focus trap
|
|
267
|
+
|
|
268
|
+
Enable `trapped` for popovers that should behave like a mini-dialog, keeping keyboard focus inside until dismissed.
|
|
269
|
+
|
|
270
|
+
```tsx
|
|
271
|
+
const popover = usePopover({ trapped: true });
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## Styling with data attributes
|
|
275
|
+
|
|
276
|
+
The hook exposes state through `data-*` attributes on each part. Use them as CSS selectors, no className juggling.
|
|
277
|
+
|
|
278
|
+
| Scope | Part | States |
|
|
279
|
+
| --------- | --------- | -------------------------- |
|
|
280
|
+
| `popover` | `trigger` | `data-positioner-open` |
|
|
281
|
+
| `popover` | `popup` | `data-open`, `data-closed` |
|
|
282
|
+
| `popover` | `arrow` | `data-side` |
|
|
283
|
+
|
|
284
|
+
```css
|
|
285
|
+
[data-scope='popover'][data-part='trigger'][data-positioner-open] {
|
|
286
|
+
background-color: light-dark(var(--p-surface-100), var(--p-surface-700));
|
|
287
|
+
}
|
|
288
|
+
[data-scope='popover'][data-part='popup'][data-open] {
|
|
289
|
+
opacity: 1;
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## API
|
|
294
|
+
|
|
295
|
+
### usePopover
|
|
296
|
+
|
|
297
|
+
<DocTable name="usePopover" category="api" />
|
|
298
|
+
|
|
299
|
+
## Accessibility
|
|
300
|
+
|
|
301
|
+
Escape dismisses the popover, focus moves into the content when opened, and Tab cycles focusable children. See [Primitive](/docs/primitive/components/popover#accessibility) for full WAI-ARIA compliance details.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "usePortal",
|
|
4
|
+
"source": "apps/showcase/assets/apidoc/useportal.json",
|
|
5
|
+
"data": {
|
|
6
|
+
"description": "The usePortal hook provides functionality to render content into a DOM node outside the component hierarchy.",
|
|
7
|
+
"interfaces": {
|
|
8
|
+
"UsePortalProps": {
|
|
9
|
+
"description": "Defines valid properties in usePortal.",
|
|
10
|
+
"relatedProp": "",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "onMounted",
|
|
14
|
+
"type": "() => void",
|
|
15
|
+
"default": "",
|
|
16
|
+
"description": "Callback function to invoke when the portal is mounted."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "onUnmounted",
|
|
20
|
+
"type": "() => void",
|
|
21
|
+
"default": "",
|
|
22
|
+
"description": "Callback function to invoke when the portal is unmounted."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"methods": []
|
|
26
|
+
},
|
|
27
|
+
"UsePortalState": {
|
|
28
|
+
"description": "Defines valid state in usePortal.",
|
|
29
|
+
"relatedProp": "",
|
|
30
|
+
"props": [
|
|
31
|
+
{
|
|
32
|
+
"name": "mounted",
|
|
33
|
+
"type": "boolean",
|
|
34
|
+
"default": "",
|
|
35
|
+
"description": "Current mount of the portal."
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"methods": []
|
|
39
|
+
},
|
|
40
|
+
"UsePortalExposes": {
|
|
41
|
+
"description": "Defines the methods and properties exposed by usePortal.",
|
|
42
|
+
"relatedProp": "",
|
|
43
|
+
"props": [],
|
|
44
|
+
"methods": []
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"types": {
|
|
48
|
+
"UsePortalInstance": {
|
|
49
|
+
"description": "Instance of usePortal headless.",
|
|
50
|
+
"values": "HeadlessInstance<UsePortalProps, UsePortalState, UsePortalExposes>"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"variables": {}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
]
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# usePortal
|
|
2
|
+
|
|
3
|
+
Hook that tracks client-side mount state for SSR-safe portal rendering.
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
'use client';
|
|
7
|
+
import { usePortal } from '@primereact/headless/portal';
|
|
8
|
+
import * as React from 'react';
|
|
9
|
+
import { createPortal } from 'react-dom';
|
|
10
|
+
|
|
11
|
+
export default function BasicDemo() {
|
|
12
|
+
const portal = usePortal();
|
|
13
|
+
const [container, setContainer] = React.useState<HTMLElement | null>(null);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div className="flex flex-col gap-4">
|
|
17
|
+
<div className="border border-surface-200 rounded-lg p-4 text-sm text-surface-600">
|
|
18
|
+
<p className="font-semibold text-surface-900 mb-2">Portal Target</p>
|
|
19
|
+
<div ref={setContainer} className="border border-dashed border-surface-300 rounded p-3 min-h-10" />
|
|
20
|
+
</div>
|
|
21
|
+
{portal.state.mounted &&
|
|
22
|
+
container &&
|
|
23
|
+
createPortal(
|
|
24
|
+
<p className="text-sm text-primary-600 m-0">This content is rendered inside the target container via a portal.</p>,
|
|
25
|
+
container
|
|
26
|
+
)}
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { usePortal } from '@primereact/headless/portal';
|
|
36
|
+
import { createPortal } from 'react-dom';
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
const portal = usePortal();
|
|
41
|
+
|
|
42
|
+
{
|
|
43
|
+
portal.state.mounted && createPortal(<div></div>, document.body);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`usePortal` provides SSR-safe mount detection so portaled content renders only on the client. See [Primitive](/docs/primitive/components/portal) for a component-based API.
|
|
48
|
+
|
|
49
|
+
## Features
|
|
50
|
+
|
|
51
|
+
- **SSR-safe mount flag**, `state.mounted` stays `false` during server rendering and flips to `true` after client mount
|
|
52
|
+
- **Lifecycle callbacks**, `onMounted` and `onUnmounted` fire on the corresponding mount boundaries
|
|
53
|
+
- **Portal target agnostic**, pair the flag with any DOM node you want to render into
|
|
54
|
+
|
|
55
|
+
## Working with callbacks
|
|
56
|
+
|
|
57
|
+
### Guard `createPortal`
|
|
58
|
+
|
|
59
|
+
Use `state.mounted` to skip portal rendering on the server, which avoids hydration mismatches.
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
const portal = usePortal();
|
|
63
|
+
|
|
64
|
+
{
|
|
65
|
+
portal.state.mounted && createPortal(<div>Portaled content</div>, document.body);
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### React to mount/unmount
|
|
70
|
+
|
|
71
|
+
Pass `onMounted` and `onUnmounted` when you need to run a side effect tied to the portal's lifecycle, locking scroll, syncing analytics, or closing neighbouring UI.
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
const portal = usePortal({
|
|
75
|
+
onMounted: () => lockScroll(),
|
|
76
|
+
onUnmounted: () => unlockScroll()
|
|
77
|
+
});
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Portal into a custom container
|
|
81
|
+
|
|
82
|
+
Combine `state.mounted` with a ref to a custom container for portaling into a specific element rather than `document.body`.
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
const portal = usePortal();
|
|
86
|
+
const [container, setContainer] = React.useState<HTMLElement | null>(null);
|
|
87
|
+
|
|
88
|
+
<div ref={setContainer} />;
|
|
89
|
+
{
|
|
90
|
+
portal.state.mounted && container && createPortal(<div>Content</div>, container);
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## API
|
|
95
|
+
|
|
96
|
+
### usePortal
|
|
97
|
+
|
|
98
|
+
<DocTable name="usePortal" category="api" />
|
|
99
|
+
|
|
100
|
+
## Accessibility
|
|
101
|
+
|
|
102
|
+
No direct keyboard behavior, focus management follows the portaled content. See [Primitive](/docs/primitive/components/portal#accessibility) for full WAI-ARIA compliance details.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "usePositioner",
|
|
4
|
+
"source": "apps/showcase/assets/apidoc/usepositioner.json",
|
|
5
|
+
"data": {
|
|
6
|
+
"description": "The usePositioner manages the state and functionality of a positioner component.",
|
|
7
|
+
"interfaces": {
|
|
8
|
+
"UsePositionerProps": {
|
|
9
|
+
"description": "Defines valid properties in usePositioner.",
|
|
10
|
+
"relatedProp": "",
|
|
11
|
+
"props": [
|
|
12
|
+
{
|
|
13
|
+
"name": "side",
|
|
14
|
+
"type": "SideType",
|
|
15
|
+
"default": "",
|
|
16
|
+
"description": "The side of the positioner."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "align",
|
|
20
|
+
"type": "AlignType",
|
|
21
|
+
"default": "",
|
|
22
|
+
"description": "The align of the positioner."
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "sideOffset",
|
|
26
|
+
"type": "number",
|
|
27
|
+
"default": "",
|
|
28
|
+
"description": "The side offset of the positioner."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "alignOffset",
|
|
32
|
+
"type": "number",
|
|
33
|
+
"default": "",
|
|
34
|
+
"description": "The align offset of the positioner."
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "flip",
|
|
38
|
+
"type": "boolean",
|
|
39
|
+
"default": "",
|
|
40
|
+
"description": "Whether to flip the positioner."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "shift",
|
|
44
|
+
"type": "boolean",
|
|
45
|
+
"default": "",
|
|
46
|
+
"description": "Whether to shift the positioner."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "hideWhenDetached",
|
|
50
|
+
"type": "boolean",
|
|
51
|
+
"default": "",
|
|
52
|
+
"description": "Whether to hide the positioner when detached."
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "strategy",
|
|
56
|
+
"type": "\"fixed\" | \"absolute\"",
|
|
57
|
+
"default": "'fixed'",
|
|
58
|
+
"description": "The positioning strategy."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "boundary",
|
|
62
|
+
"type": "HTMLElement",
|
|
63
|
+
"default": "",
|
|
64
|
+
"description": "The boundary element that constrains the positioner placement.\nUsed in JS fallback mode only; CSS Anchor mode uses the containing block."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "anchor",
|
|
68
|
+
"type": "HTMLElement",
|
|
69
|
+
"default": "",
|
|
70
|
+
"description": "The anchor element."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "content",
|
|
74
|
+
"type": "HTMLDivElement",
|
|
75
|
+
"default": "",
|
|
76
|
+
"description": "The content element."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "arrow",
|
|
80
|
+
"type": "HTMLDivElement",
|
|
81
|
+
"default": "",
|
|
82
|
+
"description": "The arrow element."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "autoZIndex",
|
|
86
|
+
"type": "boolean",
|
|
87
|
+
"default": "true",
|
|
88
|
+
"description": "Whether to automatically manage layering."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "baseZIndex",
|
|
92
|
+
"type": "number",
|
|
93
|
+
"default": "0",
|
|
94
|
+
"description": "Base zIndex value to use in layering."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "onPlacementChange",
|
|
98
|
+
"type": "(placement: { side: SideType; align: AlignType }) => void",
|
|
99
|
+
"default": "",
|
|
100
|
+
"description": "Callback invoked when the actual placement changes due to flip or shift."
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"methods": []
|
|
104
|
+
},
|
|
105
|
+
"UsePositionerState": {
|
|
106
|
+
"description": "Defines valid state in usePositioner.",
|
|
107
|
+
"relatedProp": "",
|
|
108
|
+
"props": [
|
|
109
|
+
{
|
|
110
|
+
"name": "actualSide",
|
|
111
|
+
"type": "SideType",
|
|
112
|
+
"default": "",
|
|
113
|
+
"description": "Actual side after placement."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "actualAlign",
|
|
117
|
+
"type": "AlignType",
|
|
118
|
+
"default": "",
|
|
119
|
+
"description": "Actual align after placement."
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"methods": []
|
|
123
|
+
},
|
|
124
|
+
"UsePositionerExposes": {
|
|
125
|
+
"description": "Defines the methods and properties exposed by usePositioner.",
|
|
126
|
+
"relatedProp": "",
|
|
127
|
+
"props": [
|
|
128
|
+
{
|
|
129
|
+
"name": "state",
|
|
130
|
+
"type": "UsePositionerState",
|
|
131
|
+
"default": "",
|
|
132
|
+
"description": "The state of the usePositioner."
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"name": "getTransformOrigin",
|
|
136
|
+
"type": "() => string",
|
|
137
|
+
"default": "",
|
|
138
|
+
"description": "Computes the transform origin."
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"name": "computePosition",
|
|
142
|
+
"type": "() => CSSProperties",
|
|
143
|
+
"default": "",
|
|
144
|
+
"description": "Computes the position."
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"name": "updatePlacement",
|
|
148
|
+
"type": "() => void",
|
|
149
|
+
"default": "",
|
|
150
|
+
"description": "Updates the placement."
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
"methods": []
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"types": {
|
|
157
|
+
"UsePositionerInstance": {
|
|
158
|
+
"description": "Instance of usePositioner headless.",
|
|
159
|
+
"values": "HeadlessInstance<UsePositionerProps, UsePositionerState, UsePositionerExposes>"
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"variables": {}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
]
|