@primereact/headless 11.0.0-alpha.9 → 11.0.0-rc.1
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 +35 -0
- package/accordion/index.d.ts +3 -0
- package/accordion/index.mjs +1 -1
- package/accordion/index.mjs.map +1 -1
- package/accordion/useAccordion.d.ts +7 -6
- package/accordion/useAccordion.props.d.ts +2 -2
- package/accordion/useAccordionPanel.d.ts +46 -0
- package/accordion/useAccordionPanel.props.d.ts +2 -0
- package/animateonscroll/index.d.ts +1 -0
- package/animateonscroll/index.mjs +1 -1
- package/animateonscroll/index.mjs.map +1 -1
- package/animateonscroll/useAnimateOnScroll.d.ts +6 -1
- package/animateonscroll/useAnimateOnScroll.props.d.ts +2 -2
- package/autocomplete/index.d.ts +3 -0
- package/autocomplete/index.mjs +2 -0
- package/autocomplete/index.mjs.map +1 -0
- package/autocomplete/useAutoComplete.d.ts +198 -0
- package/autocomplete/useAutoComplete.props.d.ts +2 -0
- package/avatar/index.d.ts +1 -0
- package/avatar/index.mjs +1 -1
- package/avatar/index.mjs.map +1 -1
- package/avatar/useAvatar.d.ts +5 -1
- package/avatar/useAvatar.props.d.ts +2 -2
- package/avatargroup/index.d.ts +3 -0
- package/avatargroup/index.mjs +2 -0
- package/avatargroup/index.mjs.map +1 -0
- package/avatargroup/useAvatarGroup.d.ts +6 -0
- package/avatargroup/useAvatarGroup.props.d.ts +2 -0
- package/badge/index.d.ts +1 -0
- package/badge/index.mjs +1 -1
- package/badge/index.mjs.map +1 -1
- package/badge/useBadge.d.ts +7 -1
- package/badge/useBadge.props.d.ts +2 -2
- package/breadcrumb/index.d.ts +1 -0
- package/breadcrumb/index.mjs +1 -1
- package/breadcrumb/index.mjs.map +1 -1
- package/breadcrumb/useBreadcrumb.d.ts +18 -2
- package/breadcrumb/useBreadcrumb.props.d.ts +2 -2
- package/button/index.d.ts +1 -0
- package/button/index.mjs +1 -1
- package/button/index.mjs.map +1 -1
- package/button/useButton.d.ts +6 -1
- package/button/useButton.props.d.ts +2 -2
- package/card/index.d.ts +1 -0
- package/card/index.mjs +1 -1
- package/card/index.mjs.map +1 -1
- package/card/useCard.d.ts +6 -1
- package/card/useCard.props.d.ts +2 -2
- package/carousel/index.d.ts +1 -0
- package/carousel/index.mjs +1 -1
- package/carousel/index.mjs.map +1 -1
- package/carousel/useCarousel.d.ts +101 -5
- package/carousel/useCarousel.props.d.ts +2 -2
- package/checkbox/index.d.ts +1 -0
- package/checkbox/index.mjs +1 -1
- package/checkbox/index.mjs.map +1 -1
- package/checkbox/useCheckbox.d.ts +44 -3
- package/checkbox/useCheckbox.props.d.ts +2 -2
- package/checkboxgroup/index.d.ts +3 -0
- package/checkboxgroup/index.mjs +2 -0
- package/checkboxgroup/index.mjs.map +1 -0
- package/checkboxgroup/useCheckboxGroup.d.ts +11 -0
- package/checkboxgroup/useCheckboxGroup.props.d.ts +2 -0
- package/chip/index.d.ts +1 -0
- package/chip/index.mjs +1 -1
- package/chip/index.mjs.map +1 -1
- package/chip/useChip.d.ts +9 -3
- package/chip/useChip.props.d.ts +2 -2
- package/collapsible/index.d.ts +3 -0
- package/collapsible/index.mjs +2 -0
- package/collapsible/index.mjs.map +1 -0
- package/collapsible/useCollapsible.d.ts +33 -0
- package/collapsible/useCollapsible.props.d.ts +2 -0
- package/compare/index.d.ts +3 -0
- package/compare/index.mjs +2 -0
- package/compare/index.mjs.map +1 -0
- package/compare/useCompare.d.ts +2 -0
- package/compare/useCompare.props.d.ts +2 -0
- package/contextmenu/index.d.ts +1 -0
- package/contextmenu/index.mjs +1 -1
- package/contextmenu/index.mjs.map +1 -1
- package/contextmenu/submenu/index.d.ts +2 -0
- package/contextmenu/submenu/index.mjs +2 -0
- package/contextmenu/submenu/index.mjs.map +1 -0
- package/contextmenu/submenu/useContextMenuSubmenu.d.ts +121 -0
- package/contextmenu/submenu/useContextMenuSubmenu.props.d.ts +2 -0
- package/contextmenu/useContextMenu.d.ts +413 -1
- package/contextmenu/useContextMenu.props.d.ts +2 -2
- package/datatable/features/index.d.ts +28 -0
- package/datatable/features/index.mjs +11 -0
- package/datatable/features/index.mjs.map +1 -0
- package/datatable/features/useDataTableColumnReorder.d.ts +52 -0
- package/datatable/features/useDataTableColumnResize.d.ts +20 -0
- package/datatable/features/useDataTableEditing.d.ts +69 -0
- package/datatable/features/useDataTableExpansion.d.ts +32 -0
- package/datatable/features/useDataTableExport.d.ts +43 -0
- package/datatable/features/useDataTableFilter.d.ts +95 -0
- package/datatable/features/useDataTableGrouping.d.ts +11 -0
- package/datatable/features/useDataTableKeyboard.d.ts +23 -0
- package/datatable/features/useDataTablePagination.d.ts +32 -0
- package/datatable/features/useDataTableRowReorder.d.ts +42 -0
- package/datatable/features/useDataTableSelection.d.ts +28 -0
- package/datatable/features/useDataTableSort.d.ts +51 -0
- package/datatable/features/useDataTableTree.d.ts +31 -0
- package/datatable/index.d.ts +7 -0
- package/datatable/index.mjs +11 -0
- package/datatable/index.mjs.map +1 -0
- package/datatable/useDataTable.d.ts +237 -0
- package/datatable/useDataTable.props.d.ts +2 -0
- package/datatable/useDataTableRow.d.ts +30 -0
- package/datatable/useDataTableRow.props.d.ts +2 -0
- package/datatable/utils/compareValues.d.ts +20 -0
- package/datatable/utils/index.d.ts +1 -0
- package/datatable/utils/index.mjs +2 -0
- package/datatable/utils/index.mjs.map +1 -0
- package/dataview/index.d.ts +1 -0
- package/dataview/index.mjs +1 -1
- package/dataview/index.mjs.map +1 -1
- package/dataview/useDataView.d.ts +25 -1
- package/dataview/useDataView.props.d.ts +2 -2
- package/datepicker/index.d.ts +1 -0
- package/datepicker/index.mjs +1 -1
- package/datepicker/index.mjs.map +1 -1
- package/datepicker/useDatePicker.d.ts +2 -114
- package/datepicker/useDatePicker.props.d.ts +2 -2
- package/dialog/index.d.ts +1 -0
- package/dialog/index.mjs +1 -1
- package/dialog/index.mjs.map +1 -1
- package/dialog/useDialog.d.ts +274 -24
- package/dialog/useDialog.props.d.ts +2 -2
- package/divider/index.d.ts +1 -0
- package/divider/index.mjs +1 -1
- package/divider/index.mjs.map +1 -1
- package/divider/useDivider.d.ts +14 -1
- package/divider/useDivider.props.d.ts +2 -2
- package/dnd/index.d.ts +11 -0
- package/dnd/index.mjs +2 -0
- package/dnd/index.mjs.map +1 -0
- package/dnd/useDnd.d.ts +45 -0
- package/dnd/useDnd.props.d.ts +2 -0
- package/dnd/useDraggable.d.ts +14 -0
- package/dnd/useDraggable.props.d.ts +2 -0
- package/dnd/useDroppable.d.ts +11 -0
- package/dnd/useDroppable.props.d.ts +2 -0
- package/dnd/useSortable.d.ts +11 -0
- package/dnd/useSortable.props.d.ts +2 -0
- package/dnd/useSortableContainer.d.ts +24 -0
- package/dnd/useSortableContainer.props.d.ts +2 -0
- package/drawer/index.d.ts +1 -0
- package/drawer/index.mjs +1 -1
- package/drawer/index.mjs.map +1 -1
- package/drawer/useDrawer.d.ts +78 -16
- package/drawer/useDrawer.props.d.ts +2 -2
- package/fieldset/index.d.ts +1 -0
- package/fieldset/index.mjs +1 -1
- package/fieldset/index.mjs.map +1 -1
- package/fieldset/useFieldset.d.ts +80 -1
- package/fieldset/useFieldset.props.d.ts +2 -2
- package/fileupload/index.d.ts +1 -0
- package/fileupload/index.mjs +1 -1
- package/fileupload/index.mjs.map +1 -1
- package/fileupload/useFileUpload.d.ts +73 -4
- package/fileupload/useFileUpload.props.d.ts +2 -2
- package/floatlabel/index.d.ts +3 -0
- package/floatlabel/index.mjs +2 -0
- package/floatlabel/index.mjs.map +1 -0
- package/floatlabel/useFloatLabel.d.ts +6 -0
- package/floatlabel/useFloatLabel.props.d.ts +2 -0
- package/fluid/index.d.ts +1 -0
- package/fluid/index.mjs +1 -1
- package/fluid/index.mjs.map +1 -1
- package/fluid/useFluid.d.ts +6 -1
- package/fluid/useFluid.props.d.ts +2 -2
- package/focustrap/index.d.ts +1 -0
- package/focustrap/index.mjs +1 -1
- package/focustrap/index.mjs.map +1 -1
- package/focustrap/useFocusTrap.d.ts +16 -3
- package/focustrap/useFocusTrap.props.d.ts +2 -2
- package/gallery/index.d.ts +1 -0
- package/gallery/index.mjs +1 -1
- package/gallery/index.mjs.map +1 -1
- package/gallery/item/index.mjs +1 -1
- package/gallery/item/index.mjs.map +1 -1
- package/gallery/item/useGalleryItem.d.ts +17 -7
- package/gallery/item/useGalleryItem.props.d.ts +2 -2
- package/gallery/useGallery.d.ts +147 -6
- package/gallery/useGallery.props.d.ts +2 -2
- package/iconfield/index.d.ts +1 -0
- package/iconfield/index.mjs +1 -1
- package/iconfield/index.mjs.map +1 -1
- package/iconfield/useIconField.d.ts +6 -1
- package/iconfield/useIconField.props.d.ts +2 -2
- package/iftalabel/index.d.ts +3 -0
- package/iftalabel/index.mjs +2 -0
- package/iftalabel/index.mjs.map +1 -0
- package/iftalabel/useIftaLabel.d.ts +6 -0
- package/iftalabel/useIftaLabel.props.d.ts +2 -0
- package/inplace/index.d.ts +1 -0
- package/inplace/index.mjs +1 -1
- package/inplace/index.mjs.map +1 -1
- package/inplace/useInplace.d.ts +21 -2
- package/inplace/useInplace.props.d.ts +2 -2
- package/{colorpicker → inputcolor}/colorManager.d.ts +3 -2
- package/inputcolor/index.d.ts +4 -0
- package/inputcolor/index.mjs +2 -0
- package/inputcolor/index.mjs.map +1 -0
- package/inputcolor/useInputColor.d.ts +119 -0
- package/inputcolor/useInputColor.props.d.ts +2 -0
- package/inputgroup/index.d.ts +1 -0
- package/inputgroup/index.mjs +1 -1
- package/inputgroup/index.mjs.map +1 -1
- package/inputgroup/useInputGroup.d.ts +6 -1
- package/inputgroup/useInputGroup.props.d.ts +2 -2
- package/inputnumber/index.d.ts +1 -0
- package/inputnumber/index.mjs +1 -1
- package/inputnumber/index.mjs.map +1 -1
- package/inputnumber/useInputNumber.d.ts +55 -17
- package/inputnumber/useInputNumber.props.d.ts +2 -2
- package/inputotp/index.d.ts +1 -0
- package/inputotp/index.mjs +1 -1
- package/inputotp/index.mjs.map +1 -1
- package/inputotp/useInputOtp.d.ts +25 -6
- package/inputotp/useInputOtp.props.d.ts +2 -2
- package/inputpassword/index.d.ts +3 -0
- package/inputpassword/index.mjs +2 -0
- package/inputpassword/index.mjs.map +1 -0
- package/inputpassword/useInputPassword.d.ts +15 -0
- package/inputpassword/useInputPassword.props.d.ts +2 -0
- package/inputtags/index.d.ts +1 -0
- package/inputtags/index.mjs +1 -1
- package/inputtags/index.mjs.map +1 -1
- package/inputtags/useInputTags.d.ts +42 -12
- package/inputtags/useInputTags.props.d.ts +2 -2
- package/inputtext/index.d.ts +1 -0
- package/inputtext/index.mjs +1 -1
- package/inputtext/index.mjs.map +1 -1
- package/inputtext/useInputText.d.ts +8 -1
- package/inputtext/useInputText.props.d.ts +2 -2
- package/knob/index.d.ts +1 -0
- package/knob/index.mjs +1 -1
- package/knob/index.mjs.map +1 -1
- package/knob/useKnob.d.ts +51 -10
- package/knob/useKnob.props.d.ts +2 -2
- package/label/index.d.ts +1 -0
- package/label/index.mjs +1 -1
- package/label/index.mjs.map +1 -1
- package/label/useLabel.d.ts +6 -1
- package/label/useLabel.props.d.ts +2 -2
- package/listbox/index.d.ts +3 -0
- package/listbox/index.mjs +1 -1
- package/listbox/index.mjs.map +1 -1
- package/listbox/useListbox.d.ts +56 -18
- package/listbox/useListbox.props.d.ts +2 -2
- package/listbox/useListboxOption.d.ts +21 -0
- package/listbox/useListboxOption.props.d.ts +2 -0
- package/menu/checkboxitem/index.d.ts +2 -0
- package/menu/checkboxitem/index.mjs +2 -0
- package/menu/checkboxitem/index.mjs.map +1 -0
- package/menu/checkboxitem/useMenuCheckboxItem.d.ts +112 -0
- package/menu/checkboxitem/useMenuCheckboxItem.props.d.ts +2 -0
- package/menu/index.d.ts +1 -0
- package/menu/index.mjs +1 -1
- package/menu/index.mjs.map +1 -1
- package/menu/radioitem/index.d.ts +2 -0
- package/menu/radioitem/index.mjs +2 -0
- package/menu/radioitem/index.mjs.map +1 -0
- package/menu/radioitem/useMenuRadioItem.d.ts +106 -0
- package/menu/radioitem/useMenuRadioItem.props.d.ts +2 -0
- package/menu/submenu/index.d.ts +2 -0
- package/menu/submenu/index.mjs +2 -0
- package/menu/submenu/index.mjs.map +1 -0
- package/menu/submenu/useMenuSubmenu.d.ts +97 -0
- package/menu/submenu/useMenuSubmenu.props.d.ts +2 -0
- package/menu/useMenu.d.ts +215 -22
- package/menu/useMenu.props.d.ts +2 -2
- package/message/index.d.ts +1 -0
- package/message/index.mjs +1 -1
- package/message/index.mjs.map +1 -1
- package/message/useMessage.d.ts +13 -1
- package/message/useMessage.props.d.ts +2 -2
- package/metergroup/index.d.ts +1 -0
- package/metergroup/index.mjs +1 -1
- package/metergroup/index.mjs.map +1 -1
- package/metergroup/useMeterGroup.d.ts +36 -5
- package/metergroup/useMeterGroup.props.d.ts +2 -2
- package/navigationmenu/index.d.ts +3 -0
- package/navigationmenu/index.mjs +2 -0
- package/navigationmenu/index.mjs.map +1 -0
- package/navigationmenu/useNavigationMenu.d.ts +30 -0
- package/navigationmenu/useNavigationMenu.props.d.ts +2 -0
- package/orderlist/index.d.ts +3 -0
- package/orderlist/index.mjs +2 -0
- package/orderlist/index.mjs.map +1 -0
- package/orderlist/useOrderList.d.ts +73 -0
- package/orderlist/useOrderList.props.d.ts +2 -0
- package/organizationchart/index.d.ts +3 -0
- package/organizationchart/index.mjs +2 -0
- package/organizationchart/index.mjs.map +1 -0
- package/organizationchart/useOrganizationChart.d.ts +69 -0
- package/organizationchart/useOrganizationChart.props.d.ts +2 -0
- package/overlaybadge/index.d.ts +3 -0
- package/overlaybadge/index.mjs +2 -0
- package/overlaybadge/index.mjs.map +1 -0
- package/overlaybadge/useOverlayBadge.d.ts +1 -0
- package/overlaybadge/useOverlayBadge.props.d.ts +2 -0
- package/package.json +12 -15
- package/paginator/index.d.ts +1 -0
- package/paginator/index.mjs +1 -1
- package/paginator/index.mjs.map +1 -1
- package/paginator/usePaginator.d.ts +47 -1
- package/paginator/usePaginator.props.d.ts +2 -2
- package/panel/index.d.ts +1 -0
- package/panel/index.mjs +1 -1
- package/panel/index.mjs.map +1 -1
- package/panel/usePanel.d.ts +76 -8
- package/panel/usePanel.props.d.ts +2 -2
- package/picklist/index.d.ts +3 -0
- package/picklist/index.mjs +2 -0
- package/picklist/index.mjs.map +1 -0
- package/picklist/usePickList.d.ts +153 -0
- package/picklist/usePickList.props.d.ts +2 -0
- package/popover/index.d.ts +1 -0
- package/popover/index.mjs +1 -7
- package/popover/index.mjs.map +1 -1
- package/popover/usePopover.d.ts +65 -12
- package/popover/usePopover.props.d.ts +2 -2
- package/portal/index.d.ts +1 -0
- package/portal/index.mjs +1 -1
- package/portal/index.mjs.map +1 -1
- package/portal/usePortal.d.ts +4 -2
- package/portal/usePortal.props.d.ts +2 -2
- package/positioner/index.d.ts +3 -0
- package/positioner/index.mjs +2 -0
- package/positioner/index.mjs.map +1 -0
- package/positioner/usePositioner.anchor.d.ts +7 -0
- package/positioner/usePositioner.d.ts +11 -0
- package/positioner/usePositioner.fallback.d.ts +13 -0
- package/positioner/usePositioner.props.d.ts +2 -0
- package/positioner/usePositioner.utils.d.ts +21 -0
- package/progressbar/index.d.ts +1 -0
- package/progressbar/index.mjs +1 -1
- package/progressbar/index.mjs.map +1 -1
- package/progressbar/useProgressBar.d.ts +13 -1
- package/progressbar/useProgressBar.props.d.ts +2 -2
- package/progressspinner/index.d.ts +1 -0
- package/progressspinner/index.mjs +1 -1
- package/progressspinner/index.mjs.map +1 -1
- package/progressspinner/useProgressSpinner.d.ts +50 -1
- package/progressspinner/useProgressSpinner.props.d.ts +2 -2
- package/radiobutton/index.d.ts +1 -0
- package/radiobutton/index.mjs +1 -1
- package/radiobutton/index.mjs.map +1 -1
- package/radiobutton/useRadioButton.d.ts +41 -3
- package/radiobutton/useRadioButton.props.d.ts +2 -2
- package/radiobuttongroup/index.d.ts +3 -0
- package/radiobuttongroup/index.mjs +2 -0
- package/radiobuttongroup/index.mjs.map +1 -0
- package/radiobuttongroup/useRadioButtonGroup.d.ts +11 -0
- package/radiobuttongroup/useRadioButtonGroup.props.d.ts +2 -0
- package/rating/index.d.ts +3 -0
- package/rating/index.mjs +1 -1
- package/rating/index.mjs.map +1 -1
- package/rating/useRating.d.ts +46 -12
- package/rating/useRating.props.d.ts +2 -2
- package/rating/useRatingOption.d.ts +69 -0
- package/rating/useRatingOption.props.d.ts +2 -0
- package/scrollarea/index.d.ts +1 -0
- package/scrollarea/index.mjs +1 -1
- package/scrollarea/index.mjs.map +1 -1
- package/scrollarea/useScrollArea.d.ts +120 -15
- package/scrollarea/useScrollArea.props.d.ts +2 -2
- package/select/index.d.ts +3 -0
- package/select/index.mjs +2 -0
- package/select/index.mjs.map +1 -0
- package/select/useSelect.d.ts +190 -0
- package/select/useSelect.props.d.ts +2 -0
- package/select/useSelect.test.d.ts +1 -0
- package/sidebar/index.d.ts +7 -0
- package/sidebar/index.mjs +2 -0
- package/sidebar/index.mjs.map +1 -0
- package/sidebar/useSidebar.d.ts +117 -0
- package/sidebar/useSidebar.props.d.ts +2 -0
- package/sidebar/useSidebarLayout.d.ts +24 -0
- package/sidebar/useSidebarLayout.props.d.ts +2 -0
- package/sidebar/useSidebarMenuItem.d.ts +11 -0
- package/sidebar/useSidebarMenuItem.props.d.ts +2 -0
- package/skeleton/index.d.ts +1 -0
- package/skeleton/index.mjs +1 -1
- package/skeleton/index.mjs.map +1 -1
- package/skeleton/useSkeleton.d.ts +7 -1
- package/skeleton/useSkeleton.props.d.ts +2 -2
- package/slider/index.d.ts +1 -0
- package/slider/index.mjs +1 -1
- package/slider/index.mjs.map +1 -1
- package/slider/useSlider.d.ts +81 -48
- package/slider/useSlider.props.d.ts +2 -2
- package/speeddial/index.d.ts +1 -0
- package/speeddial/index.mjs +1 -1
- package/speeddial/index.mjs.map +1 -1
- package/speeddial/useSpeedDial.d.ts +89 -32
- package/speeddial/useSpeedDial.props.d.ts +2 -2
- package/splitter/index.d.ts +1 -0
- package/splitter/index.mjs +1 -1
- package/splitter/index.mjs.map +1 -1
- package/splitter/useSplitter.d.ts +57 -14
- package/splitter/useSplitter.props.d.ts +2 -2
- package/stepper/index.d.ts +1 -0
- package/stepper/index.mjs +1 -1
- package/stepper/index.mjs.map +1 -1
- package/stepper/useStepper.d.ts +47 -2
- package/stepper/useStepper.props.d.ts +2 -2
- package/styleclass/index.d.ts +1 -0
- package/styleclass/index.mjs +1 -1
- package/styleclass/index.mjs.map +1 -1
- package/styleclass/useStyleClass.d.ts +5 -1
- package/styleclass/useStyleClass.props.d.ts +2 -2
- package/tabs/index.d.ts +1 -0
- package/tabs/index.mjs +1 -1
- package/tabs/index.mjs.map +1 -1
- package/tabs/useTabs.d.ts +42 -3
- package/tabs/useTabs.props.d.ts +2 -2
- package/tag/index.d.ts +1 -0
- package/tag/index.mjs +1 -1
- package/tag/index.mjs.map +1 -1
- package/tag/useTag.d.ts +6 -1
- package/tag/useTag.props.d.ts +2 -2
- package/terminal/index.d.ts +1 -0
- package/terminal/index.mjs +1 -1
- package/terminal/index.mjs.map +1 -1
- package/terminal/useTerminal.d.ts +23 -2
- package/terminal/useTerminal.props.d.ts +2 -2
- package/textarea/index.d.ts +1 -0
- package/textarea/index.mjs +1 -1
- package/textarea/index.mjs.map +1 -1
- package/textarea/useTextarea.d.ts +9 -2
- package/textarea/useTextarea.props.d.ts +2 -2
- package/timeline/index.d.ts +1 -0
- package/timeline/index.mjs +1 -1
- package/timeline/index.mjs.map +1 -1
- package/timeline/useTimeline.d.ts +41 -1
- package/timeline/useTimeline.props.d.ts +2 -2
- package/toast/index.d.ts +1 -1
- package/toast/index.mjs +1 -1
- package/toast/index.mjs.map +1 -1
- package/toast/useToast.d.ts +85 -23
- package/toast/useToast.props.d.ts +2 -2
- package/toaster/ToastManager.d.ts +14 -0
- package/toaster/index.d.ts +4 -0
- package/toaster/index.mjs +2 -0
- package/toaster/index.mjs.map +1 -0
- package/toaster/useToaster.d.ts +50 -0
- package/toaster/useToaster.props.d.ts +2 -0
- package/togglebutton/index.d.ts +1 -0
- package/togglebutton/index.mjs +1 -1
- package/togglebutton/index.mjs.map +1 -1
- package/togglebutton/useToggleButton.d.ts +5 -3
- package/togglebutton/useToggleButton.props.d.ts +2 -2
- package/togglebuttongroup/index.d.ts +3 -0
- package/togglebuttongroup/index.mjs +2 -0
- package/togglebuttongroup/index.mjs.map +1 -0
- package/togglebuttongroup/useToggleButtonGroup.d.ts +17 -0
- package/togglebuttongroup/useToggleButtonGroup.props.d.ts +2 -0
- package/toggleswitch/index.d.ts +3 -0
- package/toggleswitch/index.mjs +2 -0
- package/toggleswitch/index.mjs.map +1 -0
- package/toggleswitch/useToggleSwitch.d.ts +48 -0
- package/toggleswitch/useToggleSwitch.props.d.ts +2 -0
- package/toolbar/index.d.ts +1 -0
- package/toolbar/index.mjs +1 -1
- package/toolbar/index.mjs.map +1 -1
- package/toolbar/useToolbar.d.ts +7 -1
- package/toolbar/useToolbar.props.d.ts +2 -2
- package/tooltip/index.d.ts +1 -0
- package/tooltip/index.mjs +1 -1
- package/tooltip/index.mjs.map +1 -1
- package/tooltip/useTooltip.d.ts +43 -24
- package/tooltip/useTooltip.props.d.ts +2 -2
- package/tooltipmanager/index.d.ts +2 -0
- package/tooltipmanager/index.mjs +2 -0
- package/tooltipmanager/index.mjs.map +1 -0
- package/tooltipmanager/useTooltipManager.d.ts +12 -0
- package/tooltipmanager/useTooltipManager.props.d.ts +2 -0
- package/tooltipmanager/useTooltipManager.test.d.ts +0 -0
- package/tree/TreeDragDropService.d.ts +13 -5
- package/tree/index.d.ts +7 -0
- package/tree/index.mjs +1 -1
- package/tree/index.mjs.map +1 -1
- package/tree/useTree.d.ts +96 -16
- package/tree/useTree.props.d.ts +2 -2
- package/tree/useTreeDragDrop.d.ts +24 -0
- package/tree/useTreeFlatten.d.ts +13 -0
- package/tree/useTreeKeyboard.d.ts +18 -0
- package/tree/useTreeNode.d.ts +45 -0
- package/tree/useTreeNode.props.d.ts +2 -0
- package/tree/useTreeSelection.d.ts +31 -0
- package/utils/itemKey.d.ts +10 -0
- package/LICENSE +0 -21
- package/colorpicker/index.d.ts +0 -3
- package/colorpicker/index.mjs +0 -2
- package/colorpicker/index.mjs.map +0 -1
- package/colorpicker/input/index.d.ts +0 -2
- package/colorpicker/input/index.mjs +0 -2
- package/colorpicker/input/index.mjs.map +0 -1
- package/colorpicker/input/useColorPickerInput.d.ts +0 -11
- package/colorpicker/input/useColorPickerInput.props.d.ts +0 -2
- package/colorpicker/slider/index.d.ts +0 -2
- package/colorpicker/slider/index.mjs +0 -2
- package/colorpicker/slider/index.mjs.map +0 -1
- package/colorpicker/slider/useColorPickerSlider.d.ts +0 -13
- package/colorpicker/slider/useColorPickerSlider.props.d.ts +0 -2
- package/colorpicker/useColorPicker.d.ts +0 -26
- package/colorpicker/useColorPicker.props.d.ts +0 -2
- package/commandmenu/index.d.ts +0 -2
- package/commandmenu/index.mjs +0 -2
- package/commandmenu/index.mjs.map +0 -1
- package/commandmenu/useCommandMenu.d.ts +0 -11
- package/commandmenu/useCommandMenu.props.d.ts +0 -2
- package/confirmdialog/index.d.ts +0 -2
- package/confirmdialog/index.mjs +0 -2
- package/confirmdialog/index.mjs.map +0 -1
- package/confirmdialog/useConfirmDialog.d.ts +0 -1
- package/confirmdialog/useConfirmDialog.props.d.ts +0 -2
- package/confirmpopup/index.d.ts +0 -2
- package/confirmpopup/index.mjs +0 -2
- package/confirmpopup/index.mjs.map +0 -1
- package/confirmpopup/useConfirmPopup.d.ts +0 -25
- package/confirmpopup/useConfirmPopup.props.d.ts +0 -2
- package/imagecompare/index.d.ts +0 -2
- package/imagecompare/index.mjs +0 -2
- package/imagecompare/index.mjs.map +0 -1
- package/imagecompare/useImageCompare.d.ts +0 -8
- package/imagecompare/useImageCompare.props.d.ts +0 -2
- package/menu/sub/index.d.ts +0 -2
- package/menu/sub/index.mjs +0 -2
- package/menu/sub/index.mjs.map +0 -1
- package/menu/sub/useMenuSub.d.ts +0 -19
- package/menu/sub/useMenuSub.props.d.ts +0 -2
- package/orgchart/index.d.ts +0 -2
- package/orgchart/index.mjs +0 -2
- package/orgchart/index.mjs.map +0 -1
- package/orgchart/useOrgChart.d.ts +0 -20
- package/orgchart/useOrgChart.props.d.ts +0 -2
- package/overlay/index.d.ts +0 -2
- package/overlay/index.mjs +0 -2
- package/overlay/index.mjs.map +0 -1
- package/overlay/useOverlay.d.ts +0 -16
- package/overlay/useOverlay.props.d.ts +0 -2
- package/password/index.d.ts +0 -2
- package/password/index.mjs +0 -2
- package/password/index.mjs.map +0 -1
- package/password/usePassword.d.ts +0 -35
- package/password/usePassword.props.d.ts +0 -2
- package/placer/index.d.ts +0 -2
- package/placer/index.mjs +0 -2
- package/placer/index.mjs.map +0 -1
- package/placer/usePlacer.d.ts +0 -12
- package/placer/usePlacer.props.d.ts +0 -2
- package/switch/index.d.ts +0 -2
- package/switch/index.mjs +0 -2
- package/switch/index.mjs.map +0 -1
- package/switch/useSwitch.d.ts +0 -7
- package/switch/useSwitch.props.d.ts +0 -2
- package/toast/item/index.css +0 -2
- package/toast/item/index.css.map +0 -1
- package/toast/item/index.d.ts +0 -2
- package/toast/item/index.mjs +0 -2
- package/toast/item/index.mjs.map +0 -1
- package/toast/item/useToastItem.d.ts +0 -25
- package/toast/item/useToastItem.props.d.ts +0 -2
- package/toast/toastStore.d.ts +0 -40
- package/tooltip/group/index.d.ts +0 -2
- package/tooltip/group/index.mjs +0 -2
- package/tooltip/group/index.mjs.map +0 -1
- package/tooltip/group/useTooltipGroup.d.ts +0 -9
- package/tooltip/group/useTooltipGroup.props.d.ts +0 -2
- /package/{colorpicker/input/useColorPickerInput.test.d.ts → autocomplete/useAutoComplete.test.d.ts} +0 -0
- /package/{colorpicker/slider/useColorPickerSlider.test.d.ts → checkboxgroup/useCheckboxGroup.test.d.ts} +0 -0
- /package/{colorpicker/useColorPicker.test.d.ts → collapsible/useCollapsible.test.d.ts} +0 -0
- /package/{commandmenu/useCommandMenu.test.d.ts → compare/useCompare.test.d.ts} +0 -0
- /package/{confirmdialog/useConfirmDialog.test.d.ts → floatlabel/useFloatLabel.test.d.ts} +0 -0
- /package/{confirmpopup/useConfirmPopup.test.d.ts → iftalabel/useIftaLabel.test.d.ts} +0 -0
- /package/{imagecompare/useImageCompare.test.d.ts → inputcolor/useInputColor.test.d.ts} +0 -0
- /package/{orgchart/useOrgChart.test.d.ts → inputpassword/useInputPassword.test.d.ts} +0 -0
- /package/{overlay/useOverlay.test.d.ts → navigationmenu/useNavigationMenu.test.d.ts} +0 -0
- /package/{password/usePassword.test.d.ts → organizationchart/useOrganizationChart.test.d.ts} +0 -0
- /package/{placer/usePlacer.test.d.ts → overlaybadge/useOverlayBadge.test.d.ts} +0 -0
- /package/{progressspinner/useProgressSpinner.test.d.ts → positioner/usePositioner.test.d.ts} +0 -0
- /package/{rating/useRating.test.d.ts → radiobuttongroup/useRadioButtonGroup.test.d.ts} +0 -0
- /package/{switch/useSwitch.test.d.ts → toaster/useToaster.test.d.ts} +0 -0
- /package/{toast/item/useToastItem.test.d.ts → togglebuttongroup/useToggleButtonGroup.test.d.ts} +0 -0
- /package/{tooltip/group/useTooltipGroup.test.d.ts → toggleswitch/useToggleSwitch.test.d.ts} +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { UseListboxOptionElementProps } from '@primereact/types/headless/listbox';
|
|
2
|
+
export declare const useListboxOption: (inProps?: unknown) => import("@primereact/types/core").HeadlessInstance<import("@primereact/types/headless/listbox").UseListboxOptionProps, unknown, {
|
|
3
|
+
state: {
|
|
4
|
+
selected: boolean;
|
|
5
|
+
focused: boolean;
|
|
6
|
+
disabled: boolean;
|
|
7
|
+
group: boolean;
|
|
8
|
+
};
|
|
9
|
+
optionProps: UseListboxOptionElementProps;
|
|
10
|
+
groupProps: {
|
|
11
|
+
role: "presentation";
|
|
12
|
+
'data-scope': string;
|
|
13
|
+
'data-part': string;
|
|
14
|
+
};
|
|
15
|
+
optionIndicatorProps: {
|
|
16
|
+
[x: string]: string | true;
|
|
17
|
+
'aria-hidden': true;
|
|
18
|
+
'data-scope': string;
|
|
19
|
+
'data-part': string;
|
|
20
|
+
};
|
|
21
|
+
}>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var C=Object.defineProperty,k=Object.defineProperties;var b=Object.getOwnPropertyDescriptors;var l=Object.getOwnPropertySymbols;var x=Object.prototype.hasOwnProperty,I=Object.prototype.propertyIsEnumerable;var h=(e,n,t)=>n in e?C(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,c=(e,n)=>{for(var t in n||(n={}))x.call(n,t)&&h(e,t,n[t]);if(l)for(var t of l(n))I.call(n,t)&&h(e,t,n[t]);return e},a=(e,n)=>k(e,b(n));import{withHeadless as g}from"@primereact/core/headless";import{useCheckbox as M}from"@primereact/headless/checkbox";import*as f from"react";var m={checked:void 0,defaultChecked:void 0,indeterminate:!1,trueValue:!0,falseValue:!1,inputId:void 0,name:void 0,value:void 0,disabled:void 0,closeOnSelect:!1,onSelect:void 0,onCheckedChange:void 0};var P=g({name:"useMenuCheckboxItem",defaultProps:m,setup({props:e}){var s;let n=M(a(c({},e),{onCheckedChange:e.onCheckedChange?d=>e.onCheckedChange(d):void 0})),t=!!n.state.checked,o=!!e.disabled,i=(s=e.closeOnSelect)!=null?s:!1,r=f.useCallback(d=>{var u;o||(n.onChange({target:{checked:!t}}),(u=e.onSelect)==null||u.call(e,d))},[n,t,o,e.onSelect]);return a(c({},n),{state:a(c({},n.state),{checked:t}),closeOnSelect:i,onSelect:r})}});export{m as defaultProps,P as useMenuCheckboxItem};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/menu/checkboxitem/useMenuCheckboxItem.ts","../../../src/menu/checkboxitem/useMenuCheckboxItem.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useCheckbox } from '@primereact/headless/checkbox';\nimport type { UseMenuCheckboxItemCheckedChangeEvent, UseMenuItemSelectEvent } from '@primereact/types/headless/menu';\nimport * as React from 'react';\nimport { defaultProps } from './useMenuCheckboxItem.props';\n\nexport const useMenuCheckboxItem = withHeadless({\n name: 'useMenuCheckboxItem',\n defaultProps,\n setup({ props }) {\n // Delegate native checkbox behavior to useCheckbox; the menu adapter\n // only adds the `closeOnSelect` resolution and the composite onSelect\n // that toggles the value when the parent menu activates the item.\n const checkbox = useCheckbox({\n ...props,\n onCheckedChange: props.onCheckedChange ? (event: UseMenuCheckboxItemCheckedChangeEvent) => props.onCheckedChange!(event) : undefined\n });\n\n const checked = !!checkbox.state.checked;\n const isDisabled = !!props.disabled;\n // Default closeOnSelect to false — toggling a checkbox should keep the\n // menu open. Consumers opt back in by passing `closeOnSelect={true}`.\n const closeOnSelect = props.closeOnSelect ?? false;\n\n const onSelect = React.useCallback(\n (event: UseMenuItemSelectEvent) => {\n if (isDisabled) return;\n\n checkbox.onChange({ target: { checked: !checked } } as unknown as React.ChangeEvent<HTMLInputElement>);\n props.onSelect?.(event);\n },\n [checkbox, checked, isDisabled, props.onSelect]\n );\n\n return {\n ...checkbox,\n state: {\n ...checkbox.state,\n checked\n },\n closeOnSelect,\n onSelect\n };\n }\n});\n","import type { UseMenuCheckboxItemProps } from '@primereact/types/headless/menu';\n\nexport const defaultProps: UseMenuCheckboxItemProps = {\n checked: undefined,\n defaultChecked: undefined,\n // Match useCheckbox's own defaults — passing `undefined` here would\n // override its `trueValue: true / falseValue: false / indeterminate:\n // false` and break the `checkedState === trueValue` comparison so\n // `state.checked` would always resolve to false.\n indeterminate: false,\n trueValue: true,\n falseValue: false,\n inputId: undefined,\n name: undefined,\n value: undefined,\n disabled: undefined,\n closeOnSelect: false,\n onSelect: undefined,\n onCheckedChange: undefined\n};\n"],"mappings":"6aAAA,OAAS,gBAAAA,MAAoB,4BAC7B,OAAS,eAAAC,MAAmB,gCAE5B,UAAYC,MAAW,QCDhB,IAAMC,EAAyC,CAClD,QAAS,OACT,eAAgB,OAKhB,cAAe,GACf,UAAW,GACX,WAAY,GACZ,QAAS,OACT,KAAM,OACN,MAAO,OACP,SAAU,OACV,cAAe,GACf,SAAU,OACV,gBAAiB,MACrB,EDbO,IAAMC,EAAsBC,EAAa,CAC5C,KAAM,sBACN,aAAAC,EACA,MAAM,CAAE,MAAAC,CAAM,EAAG,CATrB,IAAAC,EAaQ,IAAMC,EAAWC,EAAYC,EAAAC,EAAA,GACtBL,GADsB,CAEzB,gBAAiBA,EAAM,gBAAmBM,GAAiDN,EAAM,gBAAiBM,CAAK,EAAI,MAC/H,EAAC,EAEKC,EAAU,CAAC,CAACL,EAAS,MAAM,QAC3BM,EAAa,CAAC,CAACR,EAAM,SAGrBS,GAAgBR,EAAAD,EAAM,gBAAN,KAAAC,EAAuB,GAEvCS,EAAiB,cAClBJ,GAAkC,CAzB/C,IAAAL,EA0BoBO,IAEJN,EAAS,SAAS,CAAE,OAAQ,CAAE,QAAS,CAACK,CAAQ,CAAE,CAAmD,GACrGN,EAAAD,EAAM,WAAN,MAAAC,EAAA,KAAAD,EAAiBM,GACrB,EACA,CAACJ,EAAUK,EAASC,EAAYR,EAAM,QAAQ,CAClD,EAEA,OAAOI,EAAAC,EAAA,GACAH,GADA,CAEH,MAAOE,EAAAC,EAAA,GACAH,EAAS,OADT,CAEH,QAAAK,CACJ,GACA,cAAAE,EACA,SAAAC,CACJ,EACJ,CACJ,CAAC","names":["withHeadless","useCheckbox","React","defaultProps","useMenuCheckboxItem","withHeadless","defaultProps","props","_a","checkbox","useCheckbox","__spreadProps","__spreadValues","event","checked","isDisabled","closeOnSelect","onSelect"]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { UseMenuItemSelectEvent } from '@primereact/types/headless/menu';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export declare const useMenuCheckboxItem: (inProps?: unknown) => import("@primereact/types/core").HeadlessInstance<import("@primereact/types/headless/menu").UseMenuCheckboxItemProps, unknown, {
|
|
4
|
+
state: {
|
|
5
|
+
checked: boolean;
|
|
6
|
+
indeterminate: boolean | undefined;
|
|
7
|
+
};
|
|
8
|
+
closeOnSelect: boolean;
|
|
9
|
+
onSelect: (event: UseMenuItemSelectEvent) => void;
|
|
10
|
+
ref: React.Ref<unknown>;
|
|
11
|
+
elementRef: React.RefObject<HTMLElement | undefined>;
|
|
12
|
+
id?: string | undefined;
|
|
13
|
+
name?: string | undefined;
|
|
14
|
+
type?: import("@primereact/types/core").Types | undefined;
|
|
15
|
+
scope?: string | undefined;
|
|
16
|
+
part?: string | undefined;
|
|
17
|
+
inProps?: import("@primereact/types").SafeRecord<import("@primereact/headless/checkbox").UseCheckboxProps> | undefined;
|
|
18
|
+
$attrSelector?: string | undefined;
|
|
19
|
+
$primereact: import("@primereact/types/core").Contexts;
|
|
20
|
+
props: import("@primereact/types").SafeRecord<import("@primereact/headless/checkbox").UseCheckboxProps>;
|
|
21
|
+
attrs: Omit<import("@primereact/types").SafeRecord<import("@primereact/headless/checkbox").UseCheckboxProps>, keyof import("@primereact/headless/checkbox").UseCheckboxProps> & Record<PropertyKey, unknown>;
|
|
22
|
+
$computedSetup: {
|
|
23
|
+
state: {
|
|
24
|
+
checked: boolean;
|
|
25
|
+
indeterminate: boolean | undefined;
|
|
26
|
+
};
|
|
27
|
+
rootProps: {
|
|
28
|
+
'data-indeterminate'?: string | undefined;
|
|
29
|
+
'data-invalid'?: string | undefined;
|
|
30
|
+
'data-disabled'?: string | undefined;
|
|
31
|
+
'data-scope': string;
|
|
32
|
+
'data-part': string;
|
|
33
|
+
};
|
|
34
|
+
inputProps: {
|
|
35
|
+
'data-scope': string;
|
|
36
|
+
'data-part': string;
|
|
37
|
+
id: string | undefined;
|
|
38
|
+
type: "checkbox";
|
|
39
|
+
value: unknown;
|
|
40
|
+
name: string | undefined;
|
|
41
|
+
checked: boolean;
|
|
42
|
+
tabIndex: number | undefined;
|
|
43
|
+
disabled: boolean | undefined;
|
|
44
|
+
readOnly: boolean | undefined;
|
|
45
|
+
required: boolean | undefined;
|
|
46
|
+
'aria-labelledby': string | undefined;
|
|
47
|
+
'aria-label': string | undefined;
|
|
48
|
+
'aria-invalid': true | undefined;
|
|
49
|
+
'aria-checked': "mixed" | undefined;
|
|
50
|
+
onFocus: ((event: React.FocusEvent<HTMLInputElement>) => void) | undefined;
|
|
51
|
+
onBlur: ((event: React.FocusEvent<HTMLInputElement>) => void) | undefined;
|
|
52
|
+
onChange: ((event: React.ChangeEvent<HTMLInputElement>) => void) | undefined;
|
|
53
|
+
};
|
|
54
|
+
boxProps: {
|
|
55
|
+
'data-indeterminate'?: string | undefined;
|
|
56
|
+
'data-invalid'?: string | undefined;
|
|
57
|
+
'data-disabled'?: string | undefined;
|
|
58
|
+
'data-scope': string;
|
|
59
|
+
'data-part': string;
|
|
60
|
+
};
|
|
61
|
+
indicatorProps: {
|
|
62
|
+
'data-invalid'?: string | undefined;
|
|
63
|
+
'data-disabled'?: string | undefined;
|
|
64
|
+
'data-indeterminate'?: string | undefined;
|
|
65
|
+
'data-scope': string;
|
|
66
|
+
'data-part': string;
|
|
67
|
+
};
|
|
68
|
+
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
69
|
+
};
|
|
70
|
+
rootProps: {
|
|
71
|
+
'data-indeterminate'?: string | undefined;
|
|
72
|
+
'data-invalid'?: string | undefined;
|
|
73
|
+
'data-disabled'?: string | undefined;
|
|
74
|
+
'data-scope': string;
|
|
75
|
+
'data-part': string;
|
|
76
|
+
};
|
|
77
|
+
inputProps: {
|
|
78
|
+
'data-scope': string;
|
|
79
|
+
'data-part': string;
|
|
80
|
+
id: string | undefined;
|
|
81
|
+
type: "checkbox";
|
|
82
|
+
value: unknown;
|
|
83
|
+
name: string | undefined;
|
|
84
|
+
checked: boolean;
|
|
85
|
+
tabIndex: number | undefined;
|
|
86
|
+
disabled: boolean | undefined;
|
|
87
|
+
readOnly: boolean | undefined;
|
|
88
|
+
required: boolean | undefined;
|
|
89
|
+
'aria-labelledby': string | undefined;
|
|
90
|
+
'aria-label': string | undefined;
|
|
91
|
+
'aria-invalid': true | undefined;
|
|
92
|
+
'aria-checked': "mixed" | undefined;
|
|
93
|
+
onFocus: ((event: React.FocusEvent<HTMLInputElement>) => void) | undefined;
|
|
94
|
+
onBlur: ((event: React.FocusEvent<HTMLInputElement>) => void) | undefined;
|
|
95
|
+
onChange: ((event: React.ChangeEvent<HTMLInputElement>) => void) | undefined;
|
|
96
|
+
};
|
|
97
|
+
boxProps: {
|
|
98
|
+
'data-indeterminate'?: string | undefined;
|
|
99
|
+
'data-invalid'?: string | undefined;
|
|
100
|
+
'data-disabled'?: string | undefined;
|
|
101
|
+
'data-scope': string;
|
|
102
|
+
'data-part': string;
|
|
103
|
+
};
|
|
104
|
+
indicatorProps: {
|
|
105
|
+
'data-invalid'?: string | undefined;
|
|
106
|
+
'data-disabled'?: string | undefined;
|
|
107
|
+
'data-indeterminate'?: string | undefined;
|
|
108
|
+
'data-scope': string;
|
|
109
|
+
'data-part': string;
|
|
110
|
+
};
|
|
111
|
+
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
112
|
+
}>;
|
package/menu/index.d.ts
CHANGED
package/menu/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{withHeadless as N}from"@primereact/core/headless";import{findSingle as Q,focus as A,isPrintableCharacter as ee}from"@primeuix/utils";import*as u from"react";var F={open:void 0,defaultOpen:void 0,composite:!1,appendTo:"body",baseZIndex:0,autoZIndex:!0,tabIndex:0,onOpenChange:void 0};var ae=N({name:"useMenu",defaultProps:F,setup({props:r}){var C;let[L,h]=u.useState(r.open!==void 0?r.open:(C=r.defaultOpen)!=null?C:!1),[S,M]=u.useState(!1),[d,a]=u.useState(r.composite?[]:""),[K,R]=u.useState(null),v=u.useRef(!1),O=u.useRef(null),I=u.useRef(null),f=u.useRef(null),p=u.useRef(new Map),P={opened:L,focused:S,focusedOptionId:d,contextMenuTarget:K},H=u.useCallback((e,t)=>{p.current.set(e,t)},[]),_=u.useCallback(e=>{p.current.delete(e)},[]),w=e=>{r.onOpenChange&&r.onOpenChange({value:e})};u.useEffect(()=>{r.open!==void 0&&h(r.open)},[r.open]);let j=e=>{h(e),w(e)},g=u.useCallback(()=>{let e=[];return p.current.forEach((t,n)=>{if(t.getAttribute("data-p-disabled")==="true")return;let s=t,l=!0;for(;s&&s!==f.current;){let c=s.closest('[data-pc-name="menulist"]');if(!c||c===f.current)break;let i=c.previousElementSibling;if(i&&i.getAttribute("aria-expanded")==="false"){l=!1;break}s=c.parentElement}l&&e.push({id:n,element:t})}),e},[]),y=u.useCallback(()=>{let e=g();if(e.length===0)return[];let t=Math.min(...e.map(c=>c.id.split("_").length));if(d.length===0)return e.filter(i=>i.id.split("_").length===t);let o=d[d.length-1].split("_"),s=o.length;return e.filter(c=>{let i=c.id.split("_");if(i.length!==s)return!1;if(s===t)return i.length===t;let b=o.slice(0,-1).join("_"),x=i.slice(0,-1).join("_");return b===x})},[r.composite,d,g]),m=e=>{v.current=!0,r.composite?a(t=>{let n=Array.isArray(t)?t:[];if(n.length===0)return[e];if(n.includes(e)){let o=e.length,s=n.findIndex(l=>l.length===o);return s!==-1?[...n.slice(0,s),e]:n}else if(n[n.length-1].length===e.length)return[...n.slice(0,-1),e];return[...n,e]}):a(e)},E=()=>r.composite&&Array.isArray(d)?d[d.length-1]||"":typeof d=="string"?d:"",B=e=>{var l,c;let t=r.composite?y():g();if(t.length===0)return;let n=E(),o=n?t.findIndex(i=>i.id===n)+1:0,s=e.toLowerCase();for(let i=o;i<t.length;i++){let b=t[i];if((((l=b.element.textContent)==null?void 0:l.trim().toLowerCase())||"").startsWith(s)){r.composite?m(b.id):a(b.id);return}}for(let i=0;i<o;i++){let b=t[i];if((((c=b.element.textContent)==null?void 0:c.trim().toLowerCase())||"").startsWith(s)){r.composite?m(b.id):a(b.id);return}}},U=e=>{e.preventDefault();let t=r.composite?y():g();if(t.length===0)return;let n=E();if(!n){r.composite?m(t[0].id):a(t[0].id);return}let o=t.findIndex(l=>l.id===n),s=o<t.length-1?o+1:0;r.composite?m(t[s].id):a(t[s].id)},W=e=>{if(e.preventDefault(),e.altKey&&I.current){D();return}let t=r.composite?y():g();if(t.length===0)return;let n=E();if(!n){r.composite?m(t[t.length-1].id):a(t[t.length-1].id);return}let o=t.findIndex(l=>l.id===n),s=o>0?o-1:t.length-1;r.composite?m(t[s].id):a(t[s].id)},X=e=>{if(!r.composite)return;e.preventDefault();let t=E();if(!t)return;let n=p.current.get(t);if(!n)return;let o=n.getAttribute("aria-expanded");if(o!==null){if(o==="false"){let s=new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window});n.dispatchEvent(s)}setTimeout(()=>{let l=g().filter(c=>c.id.startsWith(t+"_")&&c.id.split("_").length===t.split("_").length+1);l.length>0&&a(c=>[...Array.isArray(c)?c:[],l[0].id])},10)}},Y=e=>{if(!(!r.composite||(e.preventDefault(),!E()||!Array.isArray(d)))&&d.length>1){let n=d[d.length-2],o=p.current.get(n);if(o&&o.getAttribute("aria-expanded")==="true"){let s=new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window});o.dispatchEvent(s)}}},Z=e=>{e.preventDefault();let t=r.composite?y():g();t.length!==0&&(r.composite?m(t[0].id):a(t[0].id))},V=e=>{e.preventDefault();let t=r.composite?y():g();t.length!==0&&(r.composite?m(t[t.length-1].id):a(t[t.length-1].id))},$=e=>{if(r.composite&&T(),f!=null&&f.current){let t=E(),n=Q(f==null?void 0:f.current,`[id="${t}"]`);if(n){let o=new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window});n.dispatchEvent(o)}}e.preventDefault()},T=()=>{k(),setTimeout(()=>{I.current&&A(I.current.elementRef.current)},10)},q=e=>{let t=e.metaKey||e.ctrlKey;switch(e.key){case"ArrowDown":U(e);break;case"ArrowUp":W(e);break;case"ArrowRight":r.composite&&X(e);break;case"ArrowLeft":r.composite&&Y(e);break;case"Home":Z(e);break;case"End":V(e);break;case"Enter":case" ":$(e);break;case"PageDown":case"PageUp":case"Backspace":case"ShiftLeft":case"ShiftRight":break;case"Escape":T();break;default:!t&&ee(e.key)&&B(e.key);break}},z=()=>{if(M(!0),E()===""&&!v.current){let t=r.composite?y():g();t.length>0&&(r.composite?m(t[0].id):a(t[0].id))}v.current=!1},G=()=>{M(!1),r.composite?k():a("")},k=()=>{r.composite?(p.current.forEach(e=>{if(e.getAttribute("aria-expanded")==="true"){let n=new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window});e.dispatchEvent(n)}}),a([])):a("")},J=e=>{if(!r.composite||!Array.isArray(d))return;let t=e.split("_").length-1;p.current.forEach((n,o)=>{let s=o.split("_").length-1;if(n.getAttribute("aria-expanded")==="true"&&s>=t){let c=new MouseEvent("mousedown",{bubbles:!0,cancelable:!0,view:window});n.dispatchEvent(c)}}),a(n=>(Array.isArray(n)?n:[]).filter(s=>s.split("_").length-1<t))},D=()=>{h(!1),w(!1),r.composite?a([]):a(""),setTimeout(()=>{I.current&&A(I.current.elementRef.current)},10)};return{state:P,portalRef:O,triggerRef:I,listRef:f,registerItem:H,unregisterItem:_,changeVisibleState:j,changeFocusedOptionId:m,hideSubmenusAfterLevel:J,onListKeyDown:q,onListFocus:z,onListBlur:G,onOverlayEnter:()=>{f.current&&A(f.current)},onTriggerClick:e=>{if(e&&e.type==="contextmenu"){e.preventDefault(),e.stopPropagation();let t={pageX:e.pageX,pageY:e.pageY};L?(w(!1),h(!1),setTimeout(()=>{R(t),w(!0),h(!0)},0)):(R(t),h(!0),w(!0))}else R(null),h(!0),w(!0)},onItemClick:e=>{e.preventDefault(),D()}}}});export{F as defaultProps,ae as useMenu};
|
|
1
|
+
var Et=Object.defineProperty,Mt=Object.defineProperties;var yt=Object.getOwnPropertyDescriptors;var Se=Object.getOwnPropertySymbols;var Rt=Object.prototype.hasOwnProperty,It=Object.prototype.propertyIsEnumerable;var Fe=(o,p,E)=>p in o?Et(o,p,{enumerable:!0,configurable:!0,writable:!0,value:E}):o[p]=E,b=(o,p)=>{for(var E in p||(p={}))Rt.call(p,E)&&Fe(o,E,p[E]);if(Se)for(var E of Se(p))It.call(p,E)&&Fe(o,E,p[E]);return o},K=(o,p)=>Mt(o,yt(p));import{withHeadless as Lt}from"@primereact/core/headless";import{usePopover as Tt}from"@primereact/headless/popover";import{focus as X,isPrintableCharacter as At,toElement as x}from"@primeuix/utils";import*as d from"react";var Ke={open:void 0,defaultOpen:void 0,composite:!0,appendTo:"body",baseZIndex:0,autoZIndex:!0,tabIndex:0,openDelay:100,closeDelay:0,openOnHover:!1,onOpenChange:void 0,context:void 0,navigationmenu:void 0,navigationmenuMenuId:void 0};var z=(o,p)=>{let E=o.compareDocumentPosition(p);return E&Node.DOCUMENT_POSITION_FOLLOWING?-1:E&Node.DOCUMENT_POSITION_PRECEDING?1:0},Ct=Lt({name:"useMenu",defaultProps:Ke,setup({props:o,id:p}){var Re,Ie;let E=!!(o.navigationmenu&&o.navigationmenuMenuId),Ne=E?o.navigationmenu.isMenuOpen(o.navigationmenuMenuId):o.open,Z=o.onOpenChange,_e=E?e=>{Z==null||Z(e),o.navigationmenu.onMenuOpenChange(o.navigationmenuMenuId,!!e.value)}:Z,qe=Tt({open:Ne,defaultOpen:o.defaultOpen,onOpenChange:_e}),c=(Ie=(Re=o.context)==null?void 0:Re.popover)!=null?Ie:qe,[Ue,ae]=d.useState(!1),[m,g]=d.useState(o.composite?[]:""),[D,ce]=d.useState(void 0),ie=d.useRef(!1),ue=d.useRef(!0),N=d.useRef(new Map),P=d.useRef(new Map),T=(e,t)=>{let n=e.current.get(t);n!==void 0&&(window.clearTimeout(n),e.current.delete(t))},B=(e,t,n,r)=>{let s=t==="open"?N:P;if(T(t==="open"?P:N,e),T(s,e),n<=0){r();return}let l=window.setTimeout(()=>{s.current.delete(e),r()},n);s.current.set(e,l)};d.useEffect(()=>{let e=N.current,t=P.current;return()=>{e.forEach(n=>window.clearTimeout(n)),t.forEach(n=>window.clearTimeout(n)),e.clear(),t.clear()}},[]);let h=d.useRef(new Map),y=d.useRef(new Map),S=d.useRef(new Map),J=d.useRef(new Map),le=d.useRef(new Map),M=d.useRef(null),$e=d.useCallback(e=>{M.current=x(e)},[]),A={open:!!c.state.open,focused:Ue,focusedOptionId:m,anchorElement:c.state.anchorElement,positionerElement:c.state.positionerElement,popupElement:c.state.popupElement,arrowElement:c.state.arrowElement},W=d.useCallback(e=>`${p}_item_${e}`,[p]),Y=d.useCallback(e=>e?`${p}_list_${e}`:`${p}_list`,[p]),O=d.useCallback(e=>{let t=0,n=e.parentElement;for(;n&&(n.getAttribute("role")==="menu"&&t++,n!==M.current);)n=n.parentElement;if(n!==M.current){let r=e.closest('[role="menu"]');if(r){for(let[s,a]of S.current.entries())if(a.current===r){let l=h.current.get(s);if(l)return O(l)+1}}}return Math.max(0,t-1)},[]),de=d.useCallback(e=>{let t=e.closest('[role="menu"]');if(!t)return[];let n=[];return h.current.forEach((r,s)=>{r.closest('[role="menu"]')===t&&!r.hasAttribute("data-disabled")&&n.push({id:s,element:r})}),n.sort((r,s)=>z(r.element,s.element)),n},[]),ee=d.useCallback(()=>{if(!M.current)return[];let e=[];return h.current.forEach((t,n)=>{t.closest('[role="menu"]')===M.current&&!t.hasAttribute("data-disabled")&&e.push({id:n,element:t})}),e.sort((t,n)=>z(t.element,n.element)),e},[]),fe=d.useCallback(e=>{var r;let t=(r=S.current.get(e))==null?void 0:r.current;if(!t){let s=h.current.get(e);if(!s)return[];let a=s.closest('[data-scope="menu"][data-part="submenu"]')||s.parentElement;if(!a)return[];if(t=a.querySelector('[role="menu"]'),!t)return[]}let n=[];return h.current.forEach((s,a)=>{s.closest('[role="menu"]')===t&&!s.hasAttribute("data-disabled")&&n.push({id:a,element:s})}),n.sort((s,a)=>z(s.element,a.element)),n},[]),te=d.useCallback(e=>{if(!e)return;let t=O(e)+1;e.setAttribute("aria-level",String(t));let n=e.closest('[role="menu"]');if(n){let r=[];h.current.forEach(a=>{a.closest('[role="menu"]')===n&&r.push(a)}),r.sort(z);let s=String(r.length);r.forEach((a,l)=>{a.setAttribute("aria-posinset",String(l+1)),a.setAttribute("aria-setsize",s)})}},[O]),me=d.useRef(te);me.current=te;let ge=d.useCallback(e=>(J.current.has(e)||J.current.set(e,t=>{x(t)?(h.current.set(e,x(t)),me.current(x(t))):(h.current.delete(e),J.current.delete(e))}),J.current.get(e)),[]),ne=e=>{var t;e||y.current.forEach(n=>{n.close()}),(t=c.setOpen)==null||t.call(c,e)},G=d.useCallback(e=>m?Array.isArray(m)?m.includes(e):m===e:!1,[m]),_=d.useCallback(()=>{let e=[];return h.current.forEach((t,n)=>{if(t.hasAttribute("data-disabled"))return;let s=t,a=!0;for(;s&&s!==M.current;){let l=s.closest('[data-part="list"]');if(!l||l===M.current)break;let i=l.previousElementSibling;if(i&&i.getAttribute("aria-expanded")==="false"){a=!1;break}s=l.parentElement}a&&e.push({id:n,element:t})}),e.sort((t,n)=>z(t.element,n.element)),e},[]),q=d.useCallback(()=>{let e=H();if(!e)return ee();let t=h.current.get(e);return t?de(t):ee()},[m,de,ee]),I=e=>{ie.current=e},v=e=>{I(!0),o.composite?g(t=>{let n=Array.isArray(t)?t:[];if(n.length===0)return[e];let r=h.current.get(e);if(!r)return[e];let s=O(r),a=n.findIndex(i=>{let u=h.current.get(i);return u&&O(u)===s});return a!==-1?[...n.slice(0,a),e]:[...n.filter(i=>{let u=h.current.get(i);return u&&O(u)<s}),e]}):g(e)},H=()=>o.composite&&Array.isArray(m)?m[m.length-1]||"":typeof m=="string"?m:"",je=e=>{var a,l;let t=o.composite?q():_();if(t.length===0)return;let n=H(),r=n?t.findIndex(i=>i.id===n)+1:0,s=e.toLowerCase();for(let i=r;i<t.length;i++){let u=t[i];if((((a=u.element.textContent)==null?void 0:a.trim().toLowerCase())||"").startsWith(s)){o.composite?v(u.id):g(u.id);return}}for(let i=0;i<r;i++){let u=t[i];if((((l=u.element.textContent)==null?void 0:l.trim().toLowerCase())||"").startsWith(s)){o.composite?v(u.id):g(u.id);return}}},be=()=>{if(!o.composite||!Array.isArray(m))return;let e=m[m.length-1];if(!e)return;let t=y.current.get(e);if(t){let n=h.current.get(e);n&&n.getAttribute("aria-expanded")==="true"&&t.close()}},Q=()=>{o.composite?(y.current.forEach(e=>{e.close()}),g([])):g("")},re=e=>{if(!o.composite||!Array.isArray(m))return;let t=h.current.get(e);if(!t)return;let n=O(t);y.current.forEach((r,s)=>{let a=h.current.get(s);if(!a)return;O(a)>=n&&a.getAttribute("aria-expanded")==="true"&&r.close()}),g(r=>(Array.isArray(r)?r:[]).filter(a=>{let l=h.current.get(a);return l&&O(l)<n}))},Be=e=>{e.preventDefault();let t=o.composite?q():_();if(t.length===0)return;let n=H();if(!n){o.composite?v(t[0].id):g(t[0].id);return}let r=t.findIndex(a=>a.id===n),s=r<t.length-1?r+1:0;o.composite?(be(),v(t[s].id)):g(t[s].id)},We=e=>{if(e.preventDefault(),e.altKey){Ee();return}let t=o.composite?q():_();if(t.length===0)return;let n=H();if(!n){o.composite?v(t[t.length-1].id):g(t[t.length-1].id);return}let r=t.findIndex(a=>a.id===n),s=r>0?r-1:t.length-1;o.composite?(be(),v(t[s].id)):g(t[s].id)},Ge=e=>{var s;if(!o.composite&&!o.navigationmenu)return;e.preventDefault();let t=H(),n=t?h.current.get(t):null,r=(s=n==null?void 0:n.getAttribute("aria-expanded"))!=null?s:null;if(t&&r!==null){if(r==="false"){let i=y.current.get(t);i&&i.open()}let a=0,l=()=>{let i=fe(t);if(i.length>0){o.composite?g(u=>[...Array.isArray(u)?u:[],i[0].id]):g(i[0].id);return}a++<5&&requestAnimationFrame(l)};requestAnimationFrame(l);return}o.navigationmenu&&o.navigationmenuMenuId&&o.navigationmenu.focusSibling(o.navigationmenuMenuId,"next")},Ve=e=>{var t,n;if(!(!o.composite&&!o.navigationmenu)){if(e.preventDefault(),o.composite&&Array.isArray(m)&&m.length>1){let r=m[m.length-2];(t=y.current.get(r))==null||t.close(),g(s=>(Array.isArray(s)?s:[]).slice(0,-1));return}if(o.navigationmenu&&o.navigationmenuMenuId&&!o.composite){let r=H(),s=r?h.current.get(r):null,a=s==null?void 0:s.closest('[role="menu"]');if(!!a&&a!==M.current){let i;S.current.forEach((u,R)=>{u.current===a&&(i=R)}),i&&((n=y.current.get(i))==null||n.close(),g(i));return}}o.navigationmenu&&o.navigationmenuMenuId&&o.navigationmenu.focusSibling(o.navigationmenuMenuId,"previous")}},ze=e=>{e.preventDefault();let t=o.composite?q():_();t.length!==0&&(o.composite?v(t[0].id):g(t[0].id))},Ze=e=>{e.preventDefault();let t=o.composite?q():_();t.length!==0&&(o.composite?v(t[t.length-1].id):g(t[t.length-1].id))},Je=e=>{let t=H();if(!t)return;let n=y.current.get(t);if(n){n.toggle(),e.preventDefault();return}if(M.current){if(!h.current.get(t))return;let a=le.current.get(t);(!a||a(e))&&V(e,!1,!!c.state.open)}e.preventDefault()},Qe=()=>{Q(),requestAnimationFrame(()=>{c.state.anchorElement&&X(c.state.anchorElement)})},Xe=()=>{I(!1),A.open&&ne(!1)},pe=e=>{let t=e.metaKey||e.ctrlKey;switch(e.key){case"ArrowDown":Be(e);break;case"ArrowUp":We(e);break;case"ArrowRight":(o.composite||o.navigationmenu)&&Ge(e);break;case"ArrowLeft":(o.composite||o.navigationmenu)&&Ve(e);break;case"Home":ze(e);break;case"End":Ze(e);break;case"Enter":case" ":Je(e);break;case"Escape":Qe();break;case"Tab":Xe();break;case"PageDown":case"PageUp":case"Backspace":case"ShiftLeft":case"ShiftRight":break;default:!t&&At(e.key)&&je(e.key);break}},he=()=>{var t,n,r;if(ae(!0),H()===""&&ue.current){let s=o.composite?q():_(),a=[],l=s;for(;l.length>0;){let i=l.find(R=>{var k,f;return(f=(k=y.current.get(R.id))==null?void 0:k.isOpen)==null?void 0:f.call(k)});if(!i)break;a.push(i.id);let u=fe(i.id);if(u.length===0)break;l=u}if(a.length>0&&l.length>0){let i=l[0].id;o.composite?g([...a,i]):g(i),I(!1);return}if(ie.current){I(!1);return}if(s.length>0)if(o.navigationmenu){let i=(r=(n=(t=o.navigationmenu).consumePendingFocus)==null?void 0:n.call(t))!=null?r:null;if(i){let u=i==="last"?s[s.length-1]:s[0];g(u.id)}}else o.composite?v(s[0].id):g(s[0].id)}I(!1)},ve=()=>{ae(!1),o.composite?c.state.open&&Q():g("")},Ee=()=>{var e;y.current.forEach(t=>{t.close()}),(e=c.setOpen)==null||e.call(c,!1),o.composite?g([]):g(""),requestAnimationFrame(()=>{c.state.anchorElement&&X(c.state.anchorElement)})},Me=(e=!0)=>{ue.current=e,requestAnimationFrame(()=>{requestAnimationFrame(()=>{x(M.current)&&X(x(M.current))})})},ye=()=>{var e;T(N,"trigger"),T(P,"trigger"),I(!0),(e=c.setOpen)==null||e.call(c,!(c!=null&&c.state.open))},Ye=()=>{var t;if(!o.openOnHover)return;let e=(t=o.openDelay)!=null?t:100;B("trigger","open",e,()=>{var n;c.state.open||(I(!0),(n=c.setOpen)==null||n.call(c,!0))})},et=()=>{var n,r,s;if(!o.openOnHover)return;let e=Math.max((n=o.closeDelay)!=null?n:0,150);B("trigger","close",e,()=>{var a;c.state.open&&((a=c.setOpen)==null||a.call(c,!1))});let t=(s=(r=c.state.positionerElement)!=null?r:c.state.popupElement)!=null?s:null;if(t){let a=()=>{T(P,"trigger"),t.removeEventListener("mouseenter",a),t.removeEventListener("pointerenter",a),l!==null&&window.clearTimeout(l)};t.addEventListener("mouseenter",a),t.addEventListener("pointerenter",a);let l=window.setTimeout(()=>{t.removeEventListener("mouseenter",a),t.removeEventListener("pointerenter",a)},e+50)}},V=(e,t=!1,n=!1)=>{if(e.preventDefault(),o.composite&&!n){let r=Array.isArray(m)&&m.length>0?m[0]:null;Q(),r&&g([r])}else n&&Ee();M.current&&t&&!n&&(M.current.blur(),ne(!1))},tt=d.useCallback(e=>{let{value:t,disabled:n,type:r="item",checked:s,inPortal:a,closeOnSelect:l=!0,onSelect:i}=e,u=W(t),R=G(u),k=r==="checkbox"?"menuitemcheckbox":r==="radio"?"menuitemradio":"menuitem",f=L=>{if(n)return!1;let U=!1,$={originalEvent:L,value:t,preventDefault:()=>{U=!0},get defaultPrevented(){return U}};return i==null||i($),!U&&l};return le.current.set(u,f),K(b(b(b({ref:ge(u),id:u,role:k,tabIndex:-1,"aria-disabled":n||void 0,"aria-checked":r!=="item"?s:void 0,"data-scope":"menu","data-part":"item","data-value":t},R&&{"data-focused":""}),r!=="item"&&(s?{"data-checked":""}:{"data-unchecked":""})),n&&{"data-disabled":""}),{onMouseDown:L=>{if(n)return;if(!f(L)){I(!0),v(u);return}if(o.composite&&!a&&L.detail>0){V(L,!1,a);return}I(!0);let $=h.current.get(u);L.detail===0&&$&&$.click(),a?(o.composite&&L.detail>0||!o.composite)&&V(L,!1,a):setTimeout(()=>{V(L,!0,a)},0)},onMouseMove:()=>{!n&&A.focused&&v(u)},onMouseEnter:o.composite?()=>{!n&&A.focused&&(re(u),v(u))}:void 0})},[m,o.composite,A.focused,A.open,G,O,W]),nt=d.useCallback(e=>{var Le,Te,Ae,Oe;let{value:t,disabled:n,sub:r}=e,s=r==null?void 0:r.state.open,a=(Le=r==null?void 0:r.openDelay)!=null?Le:100,l=(Te=r==null?void 0:r.closeDelay)!=null?Te:0,i=(Ae=r==null?void 0:r.openOnHover)!=null?Ae:!0,u=r?{open:r.open,close:r.close,toggle:r.toggle,isOpen:()=>!!r.state.open}:void 0,R=r==null?void 0:r.listRef,k=(Oe=r==null?void 0:r.subtriggerProps)==null?void 0:Oe.ref,f=W(t),L=G(f),U=ge(f),$=C=>{U(C),k==null||k(C),C?(u&&y.current.set(f,u),R&&S.current.set(f,R)):(y.current.delete(f),S.current.delete(f))};return u&&y.current.set(f,u),R&&S.current.set(f,R),K(b(b(b({ref:$,id:f,role:"menuitem",tabIndex:-1,"aria-expanded":s,"aria-disabled":n||void 0,"data-scope":"menu","data-part":"subtrigger","data-value":t},L&&{"data-focused":""}),n&&{"data-disabled":""}),s&&{"data-open":""}),{onMouseDown:C=>{C.preventDefault(),T(N,f),T(P,f),!n&&C.detail>0&&(v(f),u==null||u.toggle()),!n&&x(M.current)&&X(x(M.current))},onMouseMove:()=>{I(!0),!n&&A.focused&&v(f)},onMouseEnter:()=>{i&&o.composite&&!n&&A.focused&&(s?v(f):(re(f),v(f),u&&B(f,"open",a,()=>{r!=null&&r.state.open||u.open()})))},onMouseLeave:C=>{var ke,we,He,xe,Pe;if(i&&(T(N,f),o.composite&&s&&u)){let F=(we=(ke=S.current.get(f))==null?void 0:ke.current)!=null?we:null,vt=(He=F==null?void 0:F.closest('[data-part="popup"]'))!=null?He:null,oe=(xe=F==null?void 0:F.closest('[data-part="positioner"]'))!=null?xe:null,w=(Pe=oe!=null?oe:vt)!=null?Pe:F,se=x(C.relatedTarget);if(se&&w&&(w===se||w.contains(se)))return;let Ce=Math.max(l,150);if(B(f,"close",Ce,()=>{u.close()}),w){let j=()=>{T(P,f),w.removeEventListener("mouseenter",j),w.removeEventListener("pointerenter",j),De!==null&&window.clearTimeout(De)};w.addEventListener("mouseenter",j),w.addEventListener("pointerenter",j);let De=window.setTimeout(()=>{w.removeEventListener("mouseenter",j),w.removeEventListener("pointerenter",j)},Ce+50)}}}})},[m,o.composite,A.focused,A.open,G,W]),rt=d.useCallback(e=>{let{type:t,checked:n,submenuOpen:r,match:s}=e,a=t==="checkbox"?"checkbox":t==="radio"?"radio":r!==void 0?"submenu":null,l=t==="checkbox"||t==="radio"?n!=null?n:!1:r!==void 0?r:!1;return{matchVisible:s?l===(s==="open"||s==="checked"):!0,[a==="submenu"?l?"data-open":"data-closed":l?"data-checked":"data-unchecked"]:"","data-scope":"menu","data-part":"indicator"}},[]),ot={"data-scope":"menu","data-part":"indicator"},st={"data-scope":"menu","data-part":"indicator"},at={"data-scope":"menu","data-part":"indicator"},ct=d.useCallback((e={})=>{var i,u;let{value:t,sub:n}=e,r=!!n,s=(i=n==null?void 0:n.listProps)==null?void 0:i.ref,a=Y(t),l=H()||void 0;return b(K(b(K(b(b({},!r&&{ref:$e}),r&&s&&{ref:s}),{id:a,role:"menu","aria-activedescendant":r?void 0:l,tabIndex:r?-1:(u=o.tabIndex)!=null?u:0,"data-scope":"menu","data-part":"list"}),r&&o.composite&&{"data-composite":""}),{onKeyDown:pe}),r?{}:{onFocus:he,onBlur:ve})},[m,o.tabIndex,Y]),it=b(K(b(b(K(b({},c.triggerProps),{"aria-haspopup":"true","aria-expanded":!!c.state.open,"data-scope":"menu","data-part":"trigger"}),c.state.open&&{"data-open":""}),c.state.open&&{"data-expanded":""}),{onClick:ye}),o.openOnHover&&{onPointerEnter:Ye,onPointerLeave:et}),ut=b(b({},c.arrowProps),D&&{"data-instant":D}),lt=()=>{o.openOnHover&&T(P,"trigger")},dt=()=>{var t;if(!o.openOnHover)return;let e=Math.max((t=o.closeDelay)!=null?t:0,150);B("trigger","close",e,()=>{var n;c.state.open&&((n=c.setOpen)==null||n.call(c,!1))})},ft=b(b(b(b({},c.popupProps),D&&{"data-instant":""}),D&&{"data-instant-type":D}),o.openOnHover&&{onPointerEnter:lt,onPointerLeave:dt}),mt=b({},c.positionerProps),gt={role:"none","data-scope":"menu","data-part":"label"},bt={role:"separator","data-scope":"menu","data-part":"separator"},pt={role:"group","data-scope":"menu","data-part":"radiogroup"},ht={id:p,"data-scope":"menu","data-part":"root"};return d.useEffect(()=>{c.state.rendered&&Me()},[c.state.rendered]),d.useEffect(()=>{c.state.open||y.current.forEach(e=>{e.close()})},[c.state.open]),d.useEffect(()=>!o.navigationmenu||!o.navigationmenuMenuId?void 0:o.navigationmenu.registerInstantSignal(o.navigationmenuMenuId,()=>{ce("switch")}),[o.navigationmenu,o.navigationmenuMenuId]),d.useEffect(()=>{if(D===void 0)return;let e=window.setTimeout(()=>ce(void 0),50);return()=>window.clearTimeout(e)},[D,c.state.open]),{state:A,popover:c,rootProps:ht,triggerProps:it,arrowProps:ut,popupProps:ft,positionerProps:mt,labelProps:gt,separatorProps:bt,radioGroupProps:pt,getItemProps:tt,getSubTriggerProps:nt,getListProps:ct,getIndicatorProps:rt,checkboxItemIndicatorProps:ot,radioItemIndicatorProps:st,submenuIndicatorProps:at,updateItemAria:te,isFocused:G,getItemId:W,getListId:Y,changeVisibleState:ne,markMouseInteraction:I,changeFocusedOptionId:v,hideSubmenusAfterLevel:re,hideAllSubmenus:Q,onListKeyDown:pe,onListFocus:he,onListBlur:ve,onOverlayEnter:Me,onTriggerClick:ye,onItemClick:V}}});export{Ke as defaultProps,Ct as useMenu};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/menu/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/menu/useMenu.ts","../../src/menu/useMenu.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { findSingle, focus, isPrintableCharacter } from '@primeuix/utils';\nimport * as React from 'react';\nimport { defaultProps } from './useMenu.props';\n\nexport const useMenu = withHeadless({\n name: 'useMenu',\n defaultProps,\n setup({ props }) {\n const [openState, setOpenState] = React.useState<boolean>(props.open !== undefined ? props.open : (props.defaultOpen ?? false));\n const [focusedState, setFocusedState] = React.useState<boolean>(false);\n const [focusedOptionId, setFocusedOptionId] = React.useState<string | string[]>(props.composite ? [] : '');\n const [contextMenuTarget, setContextMenuTarget] = React.useState<{ pageX: number; pageY: number } | null>(null);\n const isMouseInteractionRef = React.useRef(false);\n\n const portalRef = React.useRef<{ containerRef: { current: { elementRef: React.RefObject<HTMLDivElement> } } } | null>(null);\n const triggerRef = React.useRef<{ elementRef: React.RefObject<HTMLButtonElement> } | null>(null);\n const listRef = React.useRef<HTMLUListElement | null>(null);\n const itemRefsById = React.useRef<Map<string, HTMLElement>>(new Map());\n\n const state = {\n opened: openState,\n focused: focusedState,\n focusedOptionId,\n contextMenuTarget\n };\n\n const registerItem = React.useCallback((id: string, ref: HTMLElement) => {\n itemRefsById.current.set(id, ref);\n }, []);\n\n const unregisterItem = React.useCallback((id: string) => {\n itemRefsById.current.delete(id);\n }, []);\n\n const updateOpenState = (value: boolean) => {\n if (props.onOpenChange) {\n props.onOpenChange({ value });\n }\n };\n\n React.useEffect(() => {\n if (props.open !== undefined) {\n setOpenState(props.open);\n }\n }, [props.open]);\n\n const changeVisibleState = (isVisible: boolean) => {\n setOpenState(isVisible);\n updateOpenState(isVisible);\n };\n\n const getFocusableItems = React.useCallback(() => {\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((element, id) => {\n const isDisabled = element.getAttribute('data-p-disabled') === 'true';\n\n if (isDisabled) return;\n\n let currentElement: HTMLElement | null = element;\n let isVisible = true;\n\n while (currentElement && currentElement !== listRef.current) {\n const parentList = currentElement.closest('[data-pc-name=\"menulist\"]') as HTMLElement | null;\n\n if (!parentList || parentList === listRef.current) break;\n\n const trigger = parentList.previousElementSibling as HTMLElement | null;\n\n if (trigger && trigger.getAttribute('aria-expanded') === 'false') {\n isVisible = false;\n break;\n }\n\n currentElement = parentList.parentElement;\n }\n\n if (!isVisible) return;\n\n items.push({ id, element });\n });\n\n return items;\n }, []);\n\n const getFocusableItemsAtCurrentLevel = React.useCallback(() => {\n const allFocusableItems = getFocusableItems();\n\n if (allFocusableItems.length === 0) return [];\n\n // Determine the root level depth by examining all items\n // Find the minimum underscore count among all items to determine root level depth\n const minDepth = Math.min(...allFocusableItems.map((item) => item.id.split('_').length));\n\n if (focusedOptionId.length === 0) {\n // No focus yet, return root level items\n const rootItems = allFocusableItems.filter((item) => {\n return item.id.split('_').length === minDepth;\n });\n\n return rootItems;\n }\n\n // Get the current focused item ID\n const currentFocusedId = focusedOptionId[focusedOptionId.length - 1];\n const currentIdParts = currentFocusedId.split('_');\n const currentDepth = currentIdParts.length;\n\n // Filter items that are at the same level and belong to the same parent\n const levelItems = allFocusableItems.filter((item) => {\n const itemParts = item.id.split('_');\n\n // Must have same depth\n if (itemParts.length !== currentDepth) return false;\n\n // For root level\n if (currentDepth === minDepth) {\n return itemParts.length === minDepth;\n }\n\n // For nested levels, check if they share the same parent path\n // Example: menu_0_1_2 and menu_0_1_3 share parent menu_0_1\n const currentParentPath = currentIdParts.slice(0, -1).join('_');\n const itemParentPath = itemParts.slice(0, -1).join('_');\n\n return currentParentPath === itemParentPath;\n });\n\n return levelItems;\n }, [props.composite, focusedOptionId, getFocusableItems]);\n\n const changeFocusedOptionId = (id: string) => {\n // Mark as mouse interaction to prevent auto-focus in onListFocus\n isMouseInteractionRef.current = true;\n\n if (props.composite) {\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n if (prevArray.length === 0) {\n return [id];\n } else {\n if (prevArray.includes(id)) {\n const len = id.length;\n\n const findIndex = prevArray.findIndex((val) => val.length === len);\n\n if (findIndex !== -1) {\n return [...prevArray.slice(0, findIndex), id];\n }\n\n return prevArray;\n } else if (prevArray[prevArray.length - 1].length === id.length) {\n return [...prevArray.slice(0, -1), id];\n }\n\n return [...prevArray, id];\n }\n });\n } else {\n setFocusedOptionId(id);\n }\n };\n\n const getCurrentFocusedId = () => {\n if (props.composite && Array.isArray(focusedOptionId)) {\n return focusedOptionId[focusedOptionId.length - 1] || '';\n }\n\n return typeof focusedOptionId === 'string' ? focusedOptionId : '';\n };\n\n const searchItems = (char: string) => {\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n const startIndex = currentFocusedId ? focusableItems.findIndex((item) => item.id === currentFocusedId) + 1 : 0;\n const searchChar = char.toLowerCase();\n\n for (let i = startIndex; i < focusableItems.length; i++) {\n const item = focusableItems[i];\n const itemText = item.element.textContent?.trim().toLowerCase() || '';\n\n if (itemText.startsWith(searchChar)) {\n if (props.composite) {\n changeFocusedOptionId(item.id);\n } else {\n setFocusedOptionId(item.id);\n }\n\n return;\n }\n }\n\n for (let i = 0; i < startIndex; i++) {\n const item = focusableItems[i];\n const itemText = item.element.textContent?.trim().toLowerCase() || '';\n\n if (itemText.startsWith(searchChar)) {\n if (props.composite) {\n changeFocusedOptionId(item.id);\n } else {\n setFocusedOptionId(item.id);\n }\n\n return;\n }\n }\n };\n\n const onArrowDown = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) {\n if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n\n return;\n }\n\n const currentIndex = focusableItems.findIndex((item) => item.id === currentFocusedId);\n const nextIndex = currentIndex < focusableItems.length - 1 ? currentIndex + 1 : 0;\n\n if (props.composite) {\n changeFocusedOptionId(focusableItems[nextIndex].id);\n } else {\n setFocusedOptionId(focusableItems[nextIndex].id);\n }\n };\n\n const onArrowUp = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n if (event.altKey && triggerRef.current) {\n hide();\n\n return;\n }\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) {\n if (props.composite) {\n changeFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n } else {\n setFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n }\n\n return;\n }\n\n const currentIndex = focusableItems.findIndex((item) => item.id === currentFocusedId);\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : focusableItems.length - 1;\n\n if (props.composite) {\n changeFocusedOptionId(focusableItems[prevIndex].id);\n } else {\n setFocusedOptionId(focusableItems[prevIndex].id);\n }\n };\n\n const onArrowRight = (event: React.KeyboardEvent) => {\n if (!props.composite) return;\n\n event.preventDefault();\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) return;\n\n // Find the focused element\n const focusedElement = itemRefsById.current.get(currentFocusedId);\n\n if (!focusedElement) return;\n\n const ariaExpanded = focusedElement.getAttribute('aria-expanded');\n\n if (ariaExpanded !== null) {\n if (ariaExpanded === 'false') {\n // Open the submenu by simulating mousedown\n const mouseDownEvent = new MouseEvent('mousedown', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n\n focusedElement.dispatchEvent(mouseDownEvent);\n }\n\n setTimeout(() => {\n const focusableItems = getFocusableItems();\n\n const submenuItems = focusableItems.filter((item) => {\n return item.id.startsWith(currentFocusedId + '_') && item.id.split('_').length === currentFocusedId.split('_').length + 1;\n });\n\n // Focus the first item in the submenu\n if (submenuItems.length > 0) {\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n return [...prevArray, submenuItems[0].id];\n });\n }\n }, 10);\n }\n };\n\n const onArrowLeft = (event: React.KeyboardEvent) => {\n if (!props.composite) return;\n\n event.preventDefault();\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId || !Array.isArray(focusedOptionId)) return;\n\n if (focusedOptionId.length > 1) {\n const parentTriggerId = focusedOptionId[focusedOptionId.length - 2];\n const parentTrigger = itemRefsById.current.get(parentTriggerId);\n\n if (parentTrigger && parentTrigger.getAttribute('aria-expanded') === 'true') {\n // Close the submenu by simulating mousedown\n const mouseDownEvent = new MouseEvent('mousedown', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n\n parentTrigger.dispatchEvent(mouseDownEvent);\n }\n }\n };\n\n const onHome = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n };\n\n const onEnd = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n if (props.composite) {\n changeFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n } else {\n setFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n }\n };\n\n const onEnterKey = (event: React.KeyboardEvent) => {\n if (props.composite) {\n onEscapeKey();\n }\n\n if (listRef?.current) {\n const currentFocusedId = getCurrentFocusedId();\n const element = findSingle(listRef?.current, `[id=\"${currentFocusedId}\"]`) as HTMLElement;\n\n if (element) {\n const mouseDownEvent = new MouseEvent('mousedown', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n\n element.dispatchEvent(mouseDownEvent);\n }\n }\n\n event.preventDefault();\n };\n\n const onEscapeKey = () => {\n hideAllSubmenus();\n\n setTimeout(() => {\n if (triggerRef.current) {\n focus(triggerRef.current.elementRef.current!);\n }\n }, 10);\n };\n\n const onListKeyDown = (event: React.KeyboardEvent) => {\n const metaKey = event.metaKey || event.ctrlKey;\n\n switch (event.key) {\n case 'ArrowDown':\n onArrowDown(event);\n\n break;\n\n case 'ArrowUp':\n onArrowUp(event);\n\n break;\n\n case 'ArrowRight':\n if (props.composite) {\n onArrowRight(event);\n }\n\n break;\n\n case 'ArrowLeft':\n if (props.composite) {\n onArrowLeft(event);\n }\n\n break;\n\n case 'Home':\n onHome(event);\n\n break;\n\n case 'End':\n onEnd(event);\n\n break;\n\n case 'Enter':\n case ' ':\n onEnterKey(event);\n\n break;\n\n case 'PageDown':\n case 'PageUp':\n case 'Backspace':\n case 'ShiftLeft':\n case 'ShiftRight':\n break;\n\n case 'Escape':\n onEscapeKey();\n\n break;\n\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n searchItems(event.key);\n }\n\n break;\n }\n };\n\n const onListFocus = () => {\n setFocusedState(true);\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (currentFocusedId === '' && !isMouseInteractionRef.current) {\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length > 0) {\n if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n }\n }\n\n isMouseInteractionRef.current = false;\n };\n\n const onListBlur = () => {\n setFocusedState(false);\n\n if (props.composite) {\n hideAllSubmenus();\n } else {\n // For non-composite mode, reset focus on blur\n setFocusedOptionId('');\n }\n };\n\n const hideAllSubmenus = () => {\n if (props.composite) {\n itemRefsById.current.forEach((element) => {\n const ariaExpanded = element.getAttribute('aria-expanded');\n\n if (ariaExpanded === 'true') {\n const mouseDownEvent = new MouseEvent('mousedown', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n\n element.dispatchEvent(mouseDownEvent);\n }\n });\n\n setFocusedOptionId([]);\n } else {\n setFocusedOptionId('');\n }\n };\n\n const hideSubmenusAfterLevel = (targetItemId: string) => {\n if (!props.composite || !Array.isArray(focusedOptionId)) return;\n\n const targetLevel = targetItemId.split('_').length - 1;\n\n itemRefsById.current.forEach((element, elementId) => {\n const elementLevel = elementId.split('_').length - 1;\n const ariaExpanded = element.getAttribute('aria-expanded');\n\n if (ariaExpanded === 'true' && elementLevel >= targetLevel) {\n const mouseDownEvent = new MouseEvent('mousedown', {\n bubbles: true,\n cancelable: true,\n view: window\n });\n\n element.dispatchEvent(mouseDownEvent);\n }\n });\n\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n return prevArray.filter((id) => {\n const idLevel = id.split('_').length - 1;\n\n return idLevel < targetLevel;\n });\n });\n };\n\n const hide = () => {\n setOpenState(false);\n updateOpenState(false);\n\n if (props.composite) {\n setFocusedOptionId([]);\n } else {\n setFocusedOptionId('');\n }\n\n setTimeout(() => {\n if (triggerRef.current) {\n focus(triggerRef.current.elementRef.current!);\n }\n }, 10);\n };\n\n const onOverlayEnter = () => {\n if (listRef.current) {\n focus(listRef.current);\n }\n };\n\n const onTriggerClick = (event?: React.MouseEvent) => {\n if (event && event.type === 'contextmenu') {\n event.preventDefault();\n event.stopPropagation();\n\n const newTarget = { pageX: event.pageX, pageY: event.pageY };\n\n if (openState) {\n updateOpenState(false);\n setOpenState(false);\n\n setTimeout(() => {\n setContextMenuTarget(newTarget);\n updateOpenState(true);\n setOpenState(true);\n }, 0);\n } else {\n setContextMenuTarget(newTarget);\n\n setOpenState(true);\n updateOpenState(true);\n }\n } else {\n setContextMenuTarget(null);\n\n setOpenState(true);\n updateOpenState(true);\n }\n };\n\n const onItemClick = (event: React.MouseEvent) => {\n event.preventDefault();\n hide();\n };\n\n return {\n state,\n //refs\n portalRef,\n triggerRef,\n listRef,\n //methods\n registerItem,\n unregisterItem,\n changeVisibleState,\n changeFocusedOptionId,\n hideSubmenusAfterLevel,\n onListKeyDown,\n onListFocus,\n onListBlur,\n onOverlayEnter,\n onTriggerClick,\n onItemClick\n };\n }\n});\n","import type { useMenuProps } from '@primereact/types/shared/menu';\n\nexport const defaultProps: useMenuProps = {\n open: undefined,\n defaultOpen: undefined,\n composite: false,\n appendTo: 'body',\n baseZIndex: 0,\n autoZIndex: true,\n tabIndex: 0,\n onOpenChange: undefined\n};\n"],"mappings":"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","names":["withHeadless","findSingle","focus","isPrintableCharacter","React","defaultProps","useMenu","withHeadless","defaultProps","props","_a","openState","setOpenState","focusedState","setFocusedState","focusedOptionId","setFocusedOptionId","contextMenuTarget","setContextMenuTarget","isMouseInteractionRef","portalRef","triggerRef","listRef","itemRefsById","state","registerItem","id","ref","unregisterItem","updateOpenState","value","changeVisibleState","isVisible","getFocusableItems","items","element","currentElement","parentList","trigger","getFocusableItemsAtCurrentLevel","allFocusableItems","minDepth","item","currentIdParts","currentDepth","itemParts","currentParentPath","itemParentPath","changeFocusedOptionId","prev","prevArray","len","findIndex","val","getCurrentFocusedId","searchItems","char","_b","focusableItems","currentFocusedId","startIndex","searchChar","onArrowDown","event","currentIndex","nextIndex","onArrowUp","hide","prevIndex","onArrowRight","focusedElement","ariaExpanded","mouseDownEvent","submenuItems","onArrowLeft","parentTriggerId","parentTrigger","onHome","onEnd","onEnterKey","onEscapeKey","findSingle","hideAllSubmenus","focus","onListKeyDown","metaKey","isPrintableCharacter","onListFocus","onListBlur","hideSubmenusAfterLevel","targetItemId","targetLevel","elementId","elementLevel","newTarget"]}
|
|
1
|
+
{"version":3,"sources":["../../src/menu/useMenu.ts","../../src/menu/useMenu.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { usePopover } from '@primereact/headless/popover';\nimport { focus, isPrintableCharacter, toElement } from '@primeuix/utils';\nimport * as React from 'react';\nimport { defaultProps } from './useMenu.props';\n\nconst compareDOMPosition = (a: HTMLElement, b: HTMLElement): number => {\n const position = a.compareDocumentPosition(b);\n\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n\n return 0;\n};\n\nexport const useMenu = withHeadless({\n name: 'useMenu',\n defaultProps,\n setup({ props, id }) {\n // NavigationMenu drives open state externally: when this Menu is registered\n // with a NavigationMenu, the NavigationMenu tracks which menu is open, and it expects\n // open-change notifications back. Derive the popover's open inputs\n // from the navigationmenu context so MenuRoot doesn't need to splice these.\n const navigationmenuManaged = !!(props.navigationmenu && props.navigationmenuMenuId);\n const effectiveOpen = navigationmenuManaged ? props.navigationmenu!.isMenuOpen(props.navigationmenuMenuId!) : props.open;\n const userOnOpenChange = props.onOpenChange;\n const effectiveOnOpenChange = navigationmenuManaged\n ? (event: { value?: boolean }) => {\n userOnOpenChange?.(event as Parameters<NonNullable<typeof userOnOpenChange>>[0]);\n props.navigationmenu!.onMenuOpenChange(props.navigationmenuMenuId!, !!event.value);\n }\n : userOnOpenChange;\n\n const ownPopover = usePopover({\n open: effectiveOpen,\n defaultOpen: props.defaultOpen,\n onOpenChange: effectiveOnOpenChange\n });\n\n // When nested under a Menu.Submenu, reuse the parent submenu's popover so\n // open state, anchor, and positioner stay in sync with the SubTrigger.\n const popover = props.context?.popover ?? ownPopover;\n\n const [focusedState, setFocusedState] = React.useState<boolean>(false);\n const [focusedOptionId, setFocusedOptionId] = React.useState<string | string[]>(props.composite ? [] : '');\n // Mirrors tooltip's `instantType` — set to 'switch' when the parent\n // navigationmenu signals a sibling traversal involving this menu so styles\n // can drop the enter/leave transition. Reset back to undefined a tick\n // later so subsequent normal opens/closes animate again.\n const [instantType, setInstantType] = React.useState<'switch' | undefined>(undefined);\n const isMouseInteractionRef = React.useRef(false);\n const isAutoFocused = React.useRef(true);\n\n // Hover-open timers for Menu.Trigger and per-subtrigger hover handlers.\n // Keyed by an arbitrary token (e.g. 'trigger', or an item id) so each\n // hover source can schedule independently without clobbering others.\n const hoverOpenTimersRef = React.useRef<Map<string, number>>(new Map());\n const hoverCloseTimersRef = React.useRef<Map<string, number>>(new Map());\n\n const clearHoverTimer = (mapRef: React.MutableRefObject<Map<string, number>>, key: string) => {\n const handle = mapRef.current.get(key);\n\n if (handle !== undefined) {\n window.clearTimeout(handle);\n mapRef.current.delete(key);\n }\n };\n\n const scheduleHover = (key: string, kind: 'open' | 'close', delay: number, action: () => void) => {\n const sameKindMap = kind === 'open' ? hoverOpenTimersRef : hoverCloseTimersRef;\n const otherKindMap = kind === 'open' ? hoverCloseTimersRef : hoverOpenTimersRef;\n\n // Cancel any pending opposite action for this key — the latest\n // intent wins (e.g. re-entering the trigger before the close timer\n // fires should keep it open).\n clearHoverTimer(otherKindMap, key);\n clearHoverTimer(sameKindMap, key);\n\n if (delay <= 0) {\n action();\n\n return;\n }\n\n const handle = window.setTimeout(() => {\n sameKindMap.current.delete(key);\n action();\n }, delay);\n\n sameKindMap.current.set(key, handle);\n };\n\n React.useEffect(() => {\n const open = hoverOpenTimersRef.current;\n const close = hoverCloseTimersRef.current;\n\n return () => {\n open.forEach((h) => window.clearTimeout(h));\n close.forEach((h) => window.clearTimeout(h));\n open.clear();\n close.clear();\n };\n }, []);\n\n const itemRefsById = React.useRef<Map<string, HTMLElement>>(new Map());\n const submenuRegistry = React.useRef<Map<string, { close: () => void; open: () => void; toggle: () => void; isOpen: () => boolean }>>(new Map());\n const submenuListRefs = React.useRef<Map<string, React.RefObject<HTMLElement | null>>>(new Map());\n const itemRefCallbacks = React.useRef<Map<string, (element: HTMLElement | null) => void>>(new Map());\n // Per-item activation hook used so keyboard (Enter/Space) activations route\n // through the same onSelect/closeOnSelect plumbing as mouse activation.\n // Returns true when the menu should close as part of activation.\n const itemSelectFireHandlers = React.useRef<Map<string, (event: React.SyntheticEvent) => boolean>>(new Map());\n\n const listRef = React.useRef<HTMLDivElement | null>(null);\n const setListRef = React.useCallback((node: HTMLDivElement | null) => {\n listRef.current = toElement(node) as HTMLDivElement;\n }, []);\n\n const state = {\n open: !!popover.state.open,\n focused: focusedState,\n focusedOptionId,\n anchorElement: popover.state.anchorElement,\n positionerElement: popover.state.positionerElement,\n popupElement: popover.state.popupElement,\n arrowElement: popover.state.arrowElement\n };\n\n const getItemId = React.useCallback(\n (value: string) => {\n return `${id}_item_${value}`;\n },\n [id]\n );\n\n const getListId = React.useCallback(\n (value?: string) => {\n return value ? `${id}_list_${value}` : `${id}_list`;\n },\n [id]\n );\n\n const getItemLevel = React.useCallback((element: HTMLElement): number => {\n let level = 0;\n let current = element.parentElement;\n\n while (current) {\n if (current.getAttribute('role') === 'menu') {\n level++;\n }\n\n if (current === listRef.current) break;\n\n current = current.parentElement;\n }\n\n if (current !== listRef.current) {\n const parentList = element.closest('[role=\"menu\"]');\n\n if (parentList) {\n for (const [triggerId, listRefObj] of submenuListRefs.current.entries()) {\n if (listRefObj.current === parentList) {\n const triggerEl = itemRefsById.current.get(triggerId);\n\n if (triggerEl) {\n return getItemLevel(triggerEl) + 1;\n }\n }\n }\n }\n }\n\n return Math.max(0, level - 1);\n }, []);\n\n const getSiblingItems = React.useCallback((element: HTMLElement): Array<{ id: string; element: HTMLElement }> => {\n const parentList = element.closest('[role=\"menu\"]');\n\n if (!parentList) return [];\n\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((itemEl, itemId) => {\n if (itemEl.closest('[role=\"menu\"]') === parentList && !itemEl.hasAttribute('data-disabled')) {\n items.push({ id: itemId, element: itemEl });\n }\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const getRootLevelItems = React.useCallback((): Array<{ id: string; element: HTMLElement }> => {\n if (!listRef.current) return [];\n\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((itemEl, itemId) => {\n if (itemEl.closest('[role=\"menu\"]') === listRef.current && !itemEl.hasAttribute('data-disabled')) {\n items.push({ id: itemId, element: itemEl });\n }\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const getSubmenuItems = React.useCallback((triggerId: string): Array<{ id: string; element: HTMLElement }> => {\n let submenuList: HTMLElement | null | undefined = submenuListRefs.current.get(triggerId)?.current;\n\n if (!submenuList) {\n const triggerElement = itemRefsById.current.get(triggerId);\n\n if (!triggerElement) return [];\n\n const subWrapper = triggerElement.closest('[data-scope=\"menu\"][data-part=\"submenu\"]') || triggerElement.parentElement;\n\n if (!subWrapper) return [];\n\n submenuList = subWrapper.querySelector('[role=\"menu\"]') as HTMLElement | null;\n\n if (!submenuList) return [];\n }\n\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((itemEl, itemId) => {\n if (itemEl.closest('[role=\"menu\"]') === submenuList && !itemEl.hasAttribute('data-disabled')) {\n items.push({ id: itemId, element: itemEl });\n }\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const updateItemAria = React.useCallback(\n (element: HTMLElement) => {\n if (!element) return;\n\n const level = getItemLevel(element) + 1;\n\n element.setAttribute('aria-level', String(level));\n\n const parentList = element.closest('[role=\"menu\"]');\n\n if (parentList) {\n const siblings: HTMLElement[] = [];\n\n itemRefsById.current.forEach((itemEl) => {\n if (itemEl.closest('[role=\"menu\"]') === parentList) {\n siblings.push(itemEl);\n }\n });\n\n siblings.sort(compareDOMPosition);\n\n const size = String(siblings.length);\n\n siblings.forEach((sibling, i) => {\n sibling.setAttribute('aria-posinset', String(i + 1));\n sibling.setAttribute('aria-setsize', size);\n });\n }\n },\n [getItemLevel]\n );\n\n const updateItemAriaRef = React.useRef(updateItemAria);\n\n updateItemAriaRef.current = updateItemAria;\n\n const getOrCreateItemRef = React.useCallback((itemId: string) => {\n if (!itemRefCallbacks.current.has(itemId)) {\n itemRefCallbacks.current.set(itemId, (element: HTMLElement | null) => {\n if (toElement(element)) {\n itemRefsById.current.set(itemId, toElement(element)!);\n updateItemAriaRef.current(toElement(element)!);\n } else {\n itemRefsById.current.delete(itemId);\n itemRefCallbacks.current.delete(itemId);\n }\n });\n }\n\n return itemRefCallbacks.current.get(itemId)!;\n }, []);\n\n const changeVisibleState = (isVisible: boolean) => {\n // When closing, kick off submenu close in the same sync block as\n // the outer popover update so React batches both state changes\n // into a single render and useMotion fires both leave animations\n // on the same frame. Without this the outer popup starts closing\n // a frame ahead of any open submenus.\n if (!isVisible) {\n submenuRegistry.current.forEach((methods) => {\n methods.close();\n });\n }\n\n popover.setOpen?.(isVisible);\n };\n\n const isFocused = React.useCallback(\n (itemId: string): boolean => {\n if (!focusedOptionId) return false;\n\n if (Array.isArray(focusedOptionId)) return focusedOptionId.includes(itemId);\n\n return focusedOptionId === itemId;\n },\n [focusedOptionId]\n );\n\n const getFocusableItems = React.useCallback(() => {\n const items: Array<{ id: string; element: HTMLElement }> = [];\n\n itemRefsById.current.forEach((element, itemId) => {\n const isDisabled = element.hasAttribute('data-disabled');\n\n if (isDisabled) return;\n\n let currentElement: HTMLElement | null = element;\n let isVisible = true;\n\n while (currentElement && currentElement !== listRef.current) {\n const parentList = currentElement.closest('[data-part=\"list\"]') as HTMLElement | null;\n\n if (!parentList || parentList === listRef.current) break;\n\n const trigger = parentList.previousElementSibling as HTMLElement | null;\n\n if (trigger && trigger.getAttribute('aria-expanded') === 'false') {\n isVisible = false;\n break;\n }\n\n currentElement = parentList.parentElement;\n }\n\n if (!isVisible) return;\n\n items.push({ id: itemId, element });\n });\n\n items.sort((a, b) => compareDOMPosition(a.element, b.element));\n\n return items;\n }, []);\n\n const getFocusableItemsAtCurrentLevel = React.useCallback(() => {\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) {\n return getRootLevelItems();\n }\n\n const focusedElement = itemRefsById.current.get(currentFocusedId);\n\n if (!focusedElement) return getRootLevelItems();\n\n return getSiblingItems(focusedElement);\n }, [focusedOptionId, getSiblingItems, getRootLevelItems]);\n\n const markMouseInteraction = (newValue: boolean) => {\n isMouseInteractionRef.current = newValue;\n };\n\n const changeFocusedOptionId = (newId: string) => {\n markMouseInteraction(true);\n\n if (props.composite) {\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n if (prevArray.length === 0) {\n return [newId];\n }\n\n const element = itemRefsById.current.get(newId);\n\n if (!element) return [newId];\n\n const idLevel = getItemLevel(element);\n\n const sameDepthIndex = prevArray.findIndex((prevId) => {\n const prevEl = itemRefsById.current.get(prevId);\n\n return prevEl && getItemLevel(prevEl) === idLevel;\n });\n\n if (sameDepthIndex !== -1) {\n return [...prevArray.slice(0, sameDepthIndex), newId];\n }\n\n const shallowerEntries = prevArray.filter((prevId) => {\n const prevEl = itemRefsById.current.get(prevId);\n\n return prevEl && getItemLevel(prevEl) < idLevel;\n });\n\n return [...shallowerEntries, newId];\n });\n } else {\n setFocusedOptionId(newId);\n }\n };\n\n const getCurrentFocusedId = () => {\n if (props.composite && Array.isArray(focusedOptionId)) {\n return focusedOptionId[focusedOptionId.length - 1] || '';\n }\n\n return typeof focusedOptionId === 'string' ? focusedOptionId : '';\n };\n\n const searchItems = (char: string) => {\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n const startIndex = currentFocusedId ? focusableItems.findIndex((item) => item.id === currentFocusedId) + 1 : 0;\n const searchChar = char.toLowerCase();\n\n for (let i = startIndex; i < focusableItems.length; i++) {\n const item = focusableItems[i];\n const itemText = item.element.textContent?.trim().toLowerCase() || '';\n\n if (itemText.startsWith(searchChar)) {\n if (props.composite) {\n changeFocusedOptionId(item.id);\n } else {\n setFocusedOptionId(item.id);\n }\n\n return;\n }\n }\n\n for (let i = 0; i < startIndex; i++) {\n const item = focusableItems[i];\n const itemText = item.element.textContent?.trim().toLowerCase() || '';\n\n if (itemText.startsWith(searchChar)) {\n if (props.composite) {\n changeFocusedOptionId(item.id);\n } else {\n setFocusedOptionId(item.id);\n }\n\n return;\n }\n }\n };\n\n const closeSubmenuOfCurrentFocus = () => {\n if (!props.composite || !Array.isArray(focusedOptionId)) return;\n\n const currentFocusedId = focusedOptionId[focusedOptionId.length - 1];\n\n if (!currentFocusedId) return;\n\n const submenuMethods = submenuRegistry.current.get(currentFocusedId);\n\n if (submenuMethods) {\n const element = itemRefsById.current.get(currentFocusedId);\n\n if (element && element.getAttribute('aria-expanded') === 'true') {\n submenuMethods.close();\n }\n }\n };\n\n const hideAllSubmenus = () => {\n if (props.composite) {\n submenuRegistry.current.forEach((methods) => {\n methods.close();\n });\n\n setFocusedOptionId([]);\n } else {\n setFocusedOptionId('');\n }\n };\n\n const hideSubmenusAfterLevel = (targetItemId: string) => {\n if (!props.composite || !Array.isArray(focusedOptionId)) return;\n\n const targetElement = itemRefsById.current.get(targetItemId);\n\n if (!targetElement) return;\n\n const targetLevel = getItemLevel(targetElement);\n\n submenuRegistry.current.forEach((methods, triggerId) => {\n const triggerEl = itemRefsById.current.get(triggerId);\n\n if (!triggerEl) return;\n\n const triggerLevel = getItemLevel(triggerEl);\n\n if (triggerLevel >= targetLevel) {\n if (triggerEl.getAttribute('aria-expanded') === 'true') {\n methods.close();\n }\n }\n });\n\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n return prevArray.filter((prevId) => {\n const el = itemRefsById.current.get(prevId);\n\n return el && getItemLevel(el) < targetLevel;\n });\n });\n };\n\n const onArrowDown = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) {\n if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n\n return;\n }\n\n const currentIndex = focusableItems.findIndex((item) => item.id === currentFocusedId);\n const nextIndex = currentIndex < focusableItems.length - 1 ? currentIndex + 1 : 0;\n\n if (props.composite) {\n closeSubmenuOfCurrentFocus();\n changeFocusedOptionId(focusableItems[nextIndex].id);\n } else {\n setFocusedOptionId(focusableItems[nextIndex].id);\n }\n };\n\n const onArrowUp = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n if (event.altKey) {\n hide();\n\n return;\n }\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) {\n if (props.composite) {\n changeFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n } else {\n setFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n }\n\n return;\n }\n\n const currentIndex = focusableItems.findIndex((item) => item.id === currentFocusedId);\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : focusableItems.length - 1;\n\n if (props.composite) {\n closeSubmenuOfCurrentFocus();\n changeFocusedOptionId(focusableItems[prevIndex].id);\n } else {\n setFocusedOptionId(focusableItems[prevIndex].id);\n }\n };\n\n const onArrowRight = (event: React.KeyboardEvent) => {\n if (!props.composite && !props.navigationmenu) return;\n\n event.preventDefault();\n\n const currentFocusedId = getCurrentFocusedId();\n const focusedElement = currentFocusedId ? itemRefsById.current.get(currentFocusedId) : null;\n const ariaExpanded = focusedElement?.getAttribute('aria-expanded') ?? null;\n\n // Focused element is a submenu trigger — open the submenu and\n // move focus into it (composite/navigationmenu share this behavior).\n if (currentFocusedId && ariaExpanded !== null) {\n if (ariaExpanded === 'false') {\n const submenuMethods = submenuRegistry.current.get(currentFocusedId);\n\n if (submenuMethods) {\n submenuMethods.open();\n }\n }\n\n // Submenu items mount via portal after open() — poll across a\n // few animation frames so we focus the first item as soon as\n // it's registered, instead of guessing a fixed delay.\n let attempts = 0;\n\n const focusFirstSubmenuItem = () => {\n const submenuItems = getSubmenuItems(currentFocusedId);\n\n if (submenuItems.length > 0) {\n if (props.composite) {\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n return [...prevArray, submenuItems[0].id];\n });\n } else {\n setFocusedOptionId(submenuItems[0].id);\n }\n\n return;\n }\n\n if (attempts++ < 5) {\n requestAnimationFrame(focusFirstSubmenuItem);\n }\n };\n\n requestAnimationFrame(focusFirstSubmenuItem);\n\n return;\n }\n\n // Either no item focused, or a non-subtrigger item is focused.\n // In a NavigationMenu this should jump to the next sibling trigger\n // regardless of focus state.\n if (props.navigationmenu && props.navigationmenuMenuId) {\n props.navigationmenu.focusSibling(props.navigationmenuMenuId, 'next');\n }\n };\n\n const onArrowLeft = (event: React.KeyboardEvent) => {\n if (!props.composite && !props.navigationmenu) return;\n\n event.preventDefault();\n\n // Composite: when focus is inside a nested submenu, pop the stack\n // to close that submenu and return focus to its trigger.\n if (props.composite && Array.isArray(focusedOptionId) && focusedOptionId.length > 1) {\n const parentTriggerId = focusedOptionId[focusedOptionId.length - 2];\n\n submenuRegistry.current.get(parentTriggerId)?.close();\n\n setFocusedOptionId((prev) => {\n const prevArray = Array.isArray(prev) ? prev : [];\n\n return prevArray.slice(0, -1);\n });\n\n return;\n }\n\n // Non-composite navigationmenu: walk DOM to detect the nested submenu\n // case (legacy path; default navigationmenus run with composite=true).\n if (props.navigationmenu && props.navigationmenuMenuId && !props.composite) {\n const currentFocusedId = getCurrentFocusedId();\n const focusedElement = currentFocusedId ? itemRefsById.current.get(currentFocusedId) : null;\n const closestList = focusedElement?.closest('[role=\"menu\"]') as HTMLElement | null;\n const isInNestedSubmenu = !!closestList && closestList !== listRef.current;\n\n if (isInNestedSubmenu) {\n let parentTriggerId: string | undefined;\n\n submenuListRefs.current.forEach((ref, triggerId) => {\n if (ref.current === closestList) parentTriggerId = triggerId;\n });\n\n if (parentTriggerId) {\n submenuRegistry.current.get(parentTriggerId)?.close();\n setFocusedOptionId(parentTriggerId);\n }\n\n return;\n }\n }\n\n // Top of an open menu inside a navigationmenu — jump to the previous\n // sibling trigger (mirrors onArrowRight's focusSibling 'next').\n if (props.navigationmenu && props.navigationmenuMenuId) {\n props.navigationmenu.focusSibling(props.navigationmenuMenuId, 'previous');\n }\n };\n\n const onHome = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n };\n\n const onEnd = (event: React.KeyboardEvent) => {\n event.preventDefault();\n\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n if (focusableItems.length === 0) return;\n\n if (props.composite) {\n changeFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n } else {\n setFocusedOptionId(focusableItems[focusableItems.length - 1].id);\n }\n };\n\n const onEnterKey = (event: React.KeyboardEvent) => {\n const currentFocusedId = getCurrentFocusedId();\n\n if (!currentFocusedId) return;\n\n const submenuEntry = submenuRegistry.current.get(currentFocusedId);\n\n if (submenuEntry) {\n submenuEntry.toggle();\n event.preventDefault();\n\n return;\n }\n\n const list = listRef.current;\n\n if (list) {\n const element = itemRefsById.current.get(currentFocusedId);\n\n if (!element) return;\n\n // Run the item's onSelect/closeOnSelect plumbing first; only\n // close the menu when the handler reports it should.\n const fire = itemSelectFireHandlers.current.get(currentFocusedId);\n const shouldClose = fire ? fire(event) : true;\n\n if (shouldClose) {\n onItemClick(event, false, !!popover.state.open);\n }\n }\n\n event.preventDefault();\n };\n\n const onEscapeKey = () => {\n hideAllSubmenus();\n\n requestAnimationFrame(() => {\n if (popover.state.anchorElement) {\n focus(popover.state.anchorElement);\n }\n });\n };\n\n const onTabKey = () => {\n markMouseInteraction(false);\n\n if (state.open) {\n changeVisibleState(false);\n }\n };\n\n const onListKeyDown = (event: React.KeyboardEvent) => {\n const metaKey = event.metaKey || event.ctrlKey;\n\n switch (event.key) {\n case 'ArrowDown':\n onArrowDown(event);\n\n break;\n\n case 'ArrowUp':\n onArrowUp(event);\n\n break;\n\n case 'ArrowRight':\n if (props.composite || props.navigationmenu) {\n onArrowRight(event);\n }\n\n break;\n\n case 'ArrowLeft':\n if (props.composite || props.navigationmenu) {\n onArrowLeft(event);\n }\n\n break;\n\n case 'Home':\n onHome(event);\n\n break;\n\n case 'End':\n onEnd(event);\n\n break;\n\n case 'Enter':\n case ' ':\n onEnterKey(event);\n\n break;\n\n case 'Escape':\n onEscapeKey();\n\n break;\n\n case 'Tab':\n onTabKey();\n\n break;\n\n case 'PageDown':\n case 'PageUp':\n case 'Backspace':\n case 'ShiftLeft':\n case 'ShiftRight':\n break;\n\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n searchItems(event.key);\n }\n\n break;\n }\n };\n\n const onListFocus = () => {\n setFocusedState(true);\n\n const currentFocusedId = getCurrentFocusedId();\n\n if (currentFocusedId === '' && isAutoFocused.current) {\n const focusableItems = props.composite ? getFocusableItemsAtCurrentLevel() : getFocusableItems();\n\n // Walk into any defaultOpen submenu chain so cascade-style menus\n // highlight the active path even when opened via mouse — the\n // explicit defaultOpen signals user intent to surface that path.\n const path: string[] = [];\n let currentLevel: Array<{ id: string; element: HTMLElement }> = focusableItems;\n\n while (currentLevel.length > 0) {\n const openTrigger = currentLevel.find((item) => submenuRegistry.current.get(item.id)?.isOpen?.());\n\n if (!openTrigger) break;\n\n path.push(openTrigger.id);\n\n const subItems = getSubmenuItems(openTrigger.id);\n\n if (subItems.length === 0) break;\n\n currentLevel = subItems;\n }\n\n if (path.length > 0 && currentLevel.length > 0) {\n const leafId = currentLevel[0].id;\n\n if (props.composite) {\n setFocusedOptionId([...path, leafId]);\n } else {\n setFocusedOptionId(leafId);\n }\n\n markMouseInteraction(false);\n\n return;\n }\n\n if (isMouseInteractionRef.current) {\n markMouseInteraction(false);\n\n return;\n }\n\n if (focusableItems.length > 0) {\n // NavigationMenu context: only auto-focus an item when the navigationmenu\n // explicitly queued a target via setPendingFocus (i.e. the\n // trigger was activated with ArrowDown/ArrowUp/Enter/Space).\n // Mouse-opened menus get no highlighted item — keeping the\n // first item highlighted on hover/click would also trap\n // ArrowRight in onArrowRight's subtrigger branch instead of\n // routing to navigationmenu.focusSibling.\n if (props.navigationmenu) {\n const pending = props.navigationmenu.consumePendingFocus?.() ?? null;\n\n if (pending) {\n const target = pending === 'last' ? focusableItems[focusableItems.length - 1] : focusableItems[0];\n\n setFocusedOptionId(target.id);\n }\n } else if (props.composite) {\n changeFocusedOptionId(focusableItems[0].id);\n } else {\n setFocusedOptionId(focusableItems[0].id);\n }\n }\n }\n\n markMouseInteraction(false);\n };\n\n const onListBlur = () => {\n setFocusedState(false);\n\n // Inline menus (no Trigger / Portal) never set popover.state.open,\n // so blurring the list shouldn't close their submenus — that would\n // collapse a `defaultOpen` MenuSubmenu the moment the user clicks any\n // sibling item or outside the list. Only auto-close when the root\n // is acting as a real popup.\n if (props.composite) {\n if (popover.state.open) {\n hideAllSubmenus();\n }\n } else {\n setFocusedOptionId('');\n }\n };\n\n const hide = () => {\n // Close any open submenus in the same sync block so their leave\n // animations start on the same frame as the outer popup's.\n submenuRegistry.current.forEach((methods) => {\n methods.close();\n });\n\n popover.setOpen?.(false);\n\n if (props.composite) {\n setFocusedOptionId([]);\n } else {\n setFocusedOptionId('');\n }\n\n requestAnimationFrame(() => {\n if (popover.state.anchorElement) {\n focus(popover.state.anchorElement);\n }\n });\n };\n\n const onOverlayEnter = (autoFocus = true) => {\n isAutoFocused.current = autoFocus;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (toElement(listRef.current)) {\n focus(toElement(listRef.current)!);\n }\n });\n });\n };\n\n const onTriggerClick = () => {\n // A click cancels any pending hover-open/hover-close timers so\n // explicit user intent always wins over delayed hover timing.\n clearHoverTimer(hoverOpenTimersRef, 'trigger');\n clearHoverTimer(hoverCloseTimersRef, 'trigger');\n\n markMouseInteraction(true);\n popover.setOpen?.(!popover?.state.open);\n };\n\n const onTriggerPointerEnter = () => {\n if (!props.openOnHover) return;\n\n const delay = props.openDelay ?? 100;\n\n scheduleHover('trigger', 'open', delay, () => {\n if (!popover.state.open) {\n markMouseInteraction(true);\n popover.setOpen?.(true);\n }\n });\n };\n\n const onTriggerPointerLeave = () => {\n if (!props.openOnHover) return;\n\n // Wait at least 150ms so the pointer has time to cross the gap\n // (sideOffset, browser layout) between the trigger and the\n // popup; the popup tree's own pointerenter cancels this timer\n // when the pointer arrives.\n const effectiveCloseDelay = Math.max(props.closeDelay ?? 0, 150);\n\n scheduleHover('trigger', 'close', effectiveCloseDelay, () => {\n if (popover.state.open) {\n popover.setOpen?.(false);\n }\n });\n\n // Cancel the pending close as soon as the pointer enters the\n // popup tree (positioner / popup / list). Done imperatively\n // because the popup is rendered in a portal and may share or\n // diverge from React's event tree.\n const popupRoot = (popover.state.positionerElement as HTMLElement | null) ?? (popover.state.popupElement as HTMLElement | null) ?? null;\n\n if (popupRoot) {\n const cancelClose = () => {\n clearHoverTimer(hoverCloseTimersRef, 'trigger');\n popupRoot.removeEventListener('mouseenter', cancelClose);\n popupRoot.removeEventListener('pointerenter', cancelClose);\n\n if (cleanupHandle !== null) {\n window.clearTimeout(cleanupHandle);\n }\n };\n\n popupRoot.addEventListener('mouseenter', cancelClose);\n popupRoot.addEventListener('pointerenter', cancelClose);\n\n const cleanupHandle: number = window.setTimeout(() => {\n popupRoot.removeEventListener('mouseenter', cancelClose);\n popupRoot.removeEventListener('pointerenter', cancelClose);\n }, effectiveCloseDelay + 50);\n }\n };\n\n const onItemClick = (event: React.MouseEvent | React.KeyboardEvent, isBlur = false, isPortal = false) => {\n event.preventDefault();\n\n if (props.composite && !isPortal) {\n const rootFocusId = Array.isArray(focusedOptionId) && focusedOptionId.length > 0 ? focusedOptionId[0] : null;\n\n hideAllSubmenus();\n\n if (rootFocusId) {\n setFocusedOptionId([rootFocusId]);\n }\n } else if (isPortal) {\n hide();\n }\n\n if (listRef.current && isBlur && !isPortal) {\n listRef.current.blur();\n changeVisibleState(false);\n }\n };\n\n const getItemProps = React.useCallback(\n (input: {\n value: string;\n disabled?: boolean;\n type?: 'item' | 'checkbox' | 'radio';\n checked?: boolean;\n inPortal?: boolean;\n closeOnSelect?: boolean;\n onSelect?: (event: { originalEvent: React.SyntheticEvent; value: string; preventDefault: () => void; readonly defaultPrevented: boolean }) => void;\n }) => {\n const { value, disabled, type = 'item', checked, inPortal, closeOnSelect = true, onSelect } = input;\n const itemId = getItemId(value);\n const focused = isFocused(itemId);\n const role = type === 'checkbox' ? ('menuitemcheckbox' as const) : type === 'radio' ? ('menuitemradio' as const) : ('menuitem' as const);\n\n // Run user `onSelect` and report whether the menu should close.\n // Shared between mouse and keyboard activation so behavior matches.\n const fireSelect = (originalEvent: React.SyntheticEvent): boolean => {\n if (disabled) return false;\n\n let prevented = false;\n const selectEvent = {\n originalEvent,\n value,\n preventDefault: () => {\n prevented = true;\n },\n get defaultPrevented() {\n return prevented;\n }\n };\n\n onSelect?.(selectEvent);\n\n return !prevented && closeOnSelect;\n };\n\n itemSelectFireHandlers.current.set(itemId, fireSelect);\n\n return {\n ref: getOrCreateItemRef(itemId),\n id: itemId,\n role,\n tabIndex: -1 as const,\n 'aria-disabled': disabled || undefined,\n 'aria-checked': type !== 'item' ? checked : undefined,\n 'data-scope': 'menu' as const,\n 'data-part': 'item' as const,\n 'data-value': value,\n ...(focused && { 'data-focused': '' as const }),\n ...(type !== 'item' && (checked ? { 'data-checked': '' as const } : { 'data-unchecked': '' as const })),\n ...(disabled && { 'data-disabled': '' as const }),\n onMouseDown: (event: React.MouseEvent) => {\n if (disabled) return;\n\n const shouldClose = fireSelect(event);\n\n if (!shouldClose) {\n // Keep menu open; still manage focus on the activated item.\n markMouseInteraction(true);\n changeFocusedOptionId(itemId);\n\n return;\n }\n\n if (props.composite && !inPortal && event.detail > 0) {\n onItemClick(event, false, inPortal);\n\n return;\n }\n\n markMouseInteraction(true);\n\n const itemElement = itemRefsById.current.get(itemId);\n\n if (event.detail === 0 && itemElement) {\n itemElement.click();\n }\n\n if (inPortal) {\n if ((props.composite && event.detail > 0) || !props.composite) {\n onItemClick(event, false, inPortal);\n }\n } else {\n setTimeout(() => {\n onItemClick(event, true, inPortal);\n }, 0);\n }\n },\n onMouseMove: () => {\n if (!disabled && state.focused) {\n changeFocusedOptionId(itemId);\n }\n },\n onMouseEnter: props.composite\n ? () => {\n if (!disabled && state.focused) {\n hideSubmenusAfterLevel(itemId);\n changeFocusedOptionId(itemId);\n }\n }\n : undefined\n };\n },\n [focusedOptionId, props.composite, state.focused, state.open, isFocused, getItemLevel, getItemId]\n );\n\n const getSubTriggerProps = React.useCallback(\n (input: {\n value: string;\n disabled?: boolean;\n inPortal?: boolean;\n sub?: {\n state: { open: boolean };\n open: () => void;\n close: () => void;\n toggle: () => void;\n listRef: React.RefObject<HTMLElement | null>;\n subtriggerProps?: { ref: (node: HTMLElement | null) => void };\n openDelay?: number;\n closeDelay?: number;\n openOnHover?: boolean;\n };\n }) => {\n const { value, disabled, sub } = input;\n const submenuOpen = sub?.state.open;\n const subOpenDelay = sub?.openDelay ?? 100;\n const subCloseDelay = sub?.closeDelay ?? 0;\n const subOpenOnHover = sub?.openOnHover ?? true;\n const submenuMethods = sub ? { open: sub.open, close: sub.close, toggle: sub.toggle, isOpen: () => !!sub.state.open } : undefined;\n const submenuListRef = sub?.listRef;\n const subAnchorRef = sub?.subtriggerProps?.ref;\n const itemId = getItemId(value);\n const focused = isFocused(itemId);\n\n const itemRef = getOrCreateItemRef(itemId);\n\n // The ref callback is recreated on every render. React commits\n // the new ref by calling the old ref with null (cleanup) then\n // the new ref with the node (mount). If we only re-registered\n // submenuMethods at render time, the cleanup-null call would\n // silently wipe the registry between renders, leaving keyboard\n // activation (Enter/Space on a subtrigger) without a target —\n // it would fall through onEnterKey to onItemClick and close\n // the menu. Doing the set inside the mount branch keeps the\n // registry populated with the current render's fresh closures\n // and the unmount branch handles real teardown.\n const subTriggerRef = (node: HTMLElement | null) => {\n itemRef(node);\n subAnchorRef?.(node);\n\n if (node) {\n if (submenuMethods) submenuRegistry.current.set(itemId, submenuMethods);\n\n if (submenuListRef) submenuListRefs.current.set(itemId, submenuListRef);\n } else {\n submenuRegistry.current.delete(itemId);\n submenuListRefs.current.delete(itemId);\n }\n };\n\n // Also seed the registry at render time so the very first\n // commit (before any ref attaches) still has an entry — useful\n // for code paths that read the registry synchronously after\n // mount (e.g. Enter immediately after open).\n if (submenuMethods) {\n submenuRegistry.current.set(itemId, submenuMethods);\n }\n\n if (submenuListRef) {\n submenuListRefs.current.set(itemId, submenuListRef);\n }\n\n return {\n ref: subTriggerRef,\n id: itemId,\n role: 'menuitem' as const,\n tabIndex: -1 as const,\n 'aria-expanded': submenuOpen,\n 'aria-disabled': disabled || undefined,\n 'data-scope': 'menu' as const,\n 'data-part': 'subtrigger' as const,\n 'data-value': value,\n ...(focused && { 'data-focused': '' as const }),\n ...(disabled && { 'data-disabled': '' as const }),\n ...(submenuOpen && { 'data-open': '' as const }),\n onMouseDown: (event: React.MouseEvent) => {\n event.preventDefault();\n\n // Click is the user's explicit intent — drop any\n // pending hover-open / hover-close so the click takes\n // effect immediately without a delayed override.\n clearHoverTimer(hoverOpenTimersRef, itemId);\n clearHoverTimer(hoverCloseTimersRef, itemId);\n\n if (!disabled && event.detail > 0) {\n changeFocusedOptionId(itemId);\n submenuMethods?.toggle();\n }\n\n if (!disabled && toElement(listRef.current)) {\n focus(toElement(listRef.current)!);\n }\n },\n onMouseMove: () => {\n markMouseInteraction(true);\n\n if (!disabled && state.focused) {\n changeFocusedOptionId(itemId);\n }\n },\n onMouseEnter: () => {\n if (!subOpenOnHover) return;\n\n if (props.composite && !disabled && state.focused) {\n if (submenuOpen) {\n changeFocusedOptionId(itemId);\n } else {\n hideSubmenusAfterLevel(itemId);\n changeFocusedOptionId(itemId);\n\n if (submenuMethods) {\n scheduleHover(itemId, 'open', subOpenDelay, () => {\n if (!sub?.state.open) {\n submenuMethods.open();\n }\n });\n }\n }\n }\n },\n onMouseLeave: (event: React.MouseEvent) => {\n if (!subOpenOnHover) {\n return;\n }\n\n // Cancel a pending open if the pointer leaves before\n // the open delay fires.\n clearHoverTimer(hoverOpenTimersRef, itemId);\n\n if (props.composite && submenuOpen && submenuMethods) {\n const submenuList = submenuListRefs.current.get(itemId)?.current ?? null;\n const submenuPopup = (submenuList?.closest('[data-part=\"popup\"]') as HTMLElement | null) ?? null;\n const submenuPositioner = (submenuList?.closest('[data-part=\"positioner\"]') as HTMLElement | null) ?? null;\n const submenuRoot = submenuPositioner ?? submenuPopup ?? submenuList;\n const relatedTarget = toElement(event.relatedTarget) as HTMLElement;\n\n // Pointer is already inside the submenu portal —\n // no close needed.\n if (relatedTarget && submenuRoot && (submenuRoot === relatedTarget || submenuRoot.contains(relatedTarget))) {\n return;\n }\n\n // Wait at least 150ms so the pointer has time to\n // cross the gap between the subtrigger and the\n // submenu popup.\n const effectiveCloseDelay = Math.max(subCloseDelay, 150);\n\n scheduleHover(itemId, 'close', effectiveCloseDelay, () => {\n submenuMethods.close();\n });\n\n // Cancel the pending close as soon as the pointer\n // actually arrives over the submenu's popup tree.\n // The submenu lives in a separate useMenu instance\n // with its own timer maps, so the parent must\n // attach this listener imperatively rather than\n // relying on the inner menu's onMouseEnter.\n if (submenuRoot) {\n const cancelClose = () => {\n clearHoverTimer(hoverCloseTimersRef, itemId);\n submenuRoot.removeEventListener('mouseenter', cancelClose);\n submenuRoot.removeEventListener('pointerenter', cancelClose);\n\n if (cleanupHandle !== null) {\n window.clearTimeout(cleanupHandle);\n }\n };\n\n submenuRoot.addEventListener('mouseenter', cancelClose);\n submenuRoot.addEventListener('pointerenter', cancelClose);\n\n // If the pointer never arrives, drop the\n // listener once the close timer has already\n // fired.\n const cleanupHandle: number = window.setTimeout(() => {\n submenuRoot.removeEventListener('mouseenter', cancelClose);\n submenuRoot.removeEventListener('pointerenter', cancelClose);\n }, effectiveCloseDelay + 50);\n }\n }\n }\n };\n },\n [focusedOptionId, props.composite, state.focused, state.open, isFocused, getItemId]\n );\n\n const getIndicatorProps = React.useCallback((input: { type?: 'item' | 'checkbox' | 'radio'; checked?: boolean; submenuOpen?: boolean; match?: 'open' | 'closed' | 'checked' | 'unchecked' }) => {\n const { type, checked, submenuOpen, match } = input;\n\n const indicatorType = type === 'checkbox' ? 'checkbox' : type === 'radio' ? 'radio' : submenuOpen !== undefined ? 'submenu' : null;\n\n const active = type === 'checkbox' || type === 'radio' ? (checked ?? false) : submenuOpen !== undefined ? submenuOpen : false;\n\n const matchVisible = match ? active === (match === 'open' || match === 'checked') : true;\n\n const dataAttrKey = indicatorType === 'submenu' ? (active ? 'data-open' : 'data-closed') : active ? 'data-checked' : 'data-unchecked';\n\n return {\n matchVisible,\n [dataAttrKey]: '',\n 'data-scope': 'menu' as const,\n 'data-part': 'indicator' as const\n };\n }, []);\n\n const checkboxItemIndicatorProps = {\n 'data-scope': 'menu' as const,\n 'data-part': 'indicator' as const\n };\n\n const radioItemIndicatorProps = {\n 'data-scope': 'menu' as const,\n 'data-part': 'indicator' as const\n };\n\n const submenuIndicatorProps = {\n 'data-scope': 'menu' as const,\n 'data-part': 'indicator' as const\n };\n\n const getListProps = React.useCallback(\n (input: { value?: string; sub?: { state: { open: boolean }; listProps?: { ref: (node: HTMLDivElement | null) => void } } } = {}) => {\n const { value, sub } = input;\n const isSubmenu = !!sub;\n const subListRef = sub?.listProps?.ref;\n const listId = getListId(value);\n const activeDescendant = getCurrentFocusedId() || undefined;\n\n return {\n ...(!isSubmenu && { ref: setListRef }),\n ...(isSubmenu && subListRef && { ref: subListRef }),\n id: listId,\n role: 'menu' as const,\n 'aria-activedescendant': !isSubmenu ? activeDescendant : undefined,\n tabIndex: isSubmenu ? -1 : (props.tabIndex ?? 0),\n 'data-scope': 'menu' as const,\n 'data-part': 'list' as const,\n ...(isSubmenu && props.composite && { 'data-composite': '' }),\n onKeyDown: onListKeyDown,\n ...(isSubmenu ? {} : { onFocus: onListFocus, onBlur: onListBlur })\n };\n },\n [focusedOptionId, props.tabIndex, getListId]\n );\n\n const triggerProps = {\n ...popover.triggerProps,\n 'aria-haspopup': 'true' as const,\n 'aria-expanded': !!popover.state.open,\n 'data-scope': 'menu' as const,\n 'data-part': 'trigger' as const,\n ...(popover.state.open && { 'data-open': '' as const }),\n ...(popover.state.open && { 'data-expanded': '' as const }),\n onClick: onTriggerClick,\n ...(props.openOnHover && {\n onPointerEnter: onTriggerPointerEnter,\n onPointerLeave: onTriggerPointerLeave\n })\n };\n\n const arrowProps = {\n ...popover.arrowProps,\n ...(instantType && { 'data-instant': instantType })\n };\n\n // Popup-level hover handlers complete the trigger ⇄ popup hand-off\n // when openOnHover is enabled: entering the popup cancels the close\n // scheduled by trigger pointerleave; leaving the popup re-schedules\n // the close (the trigger's own pointerenter cancels it again if the\n // user tracks back to the trigger).\n const onPopupPointerEnter = () => {\n if (!props.openOnHover) return;\n\n clearHoverTimer(hoverCloseTimersRef, 'trigger');\n };\n\n const onPopupPointerLeave = () => {\n if (!props.openOnHover) return;\n\n const effectiveCloseDelay = Math.max(props.closeDelay ?? 0, 150);\n\n scheduleHover('trigger', 'close', effectiveCloseDelay, () => {\n if (popover.state.open) {\n popover.setOpen?.(false);\n }\n });\n };\n\n const popupProps = {\n ...popover.popupProps,\n ...(instantType && { 'data-instant': '' as const }),\n ...(instantType && { 'data-instant-type': instantType }),\n ...(props.openOnHover && {\n onPointerEnter: onPopupPointerEnter,\n onPointerLeave: onPopupPointerLeave\n })\n };\n\n const positionerProps = {\n ...popover.positionerProps\n };\n\n const labelProps = {\n role: 'none' as const,\n 'data-scope': 'menu' as const,\n 'data-part': 'label' as const\n };\n\n const separatorProps = {\n role: 'separator' as const,\n 'data-scope': 'menu' as const,\n 'data-part': 'separator' as const\n };\n\n const radioGroupProps = {\n role: 'group' as const,\n 'data-scope': 'menu' as const,\n 'data-part': 'radiogroup' as const\n };\n\n const rootProps = {\n id,\n 'data-scope': 'menu' as const,\n 'data-part': 'root' as const\n };\n\n React.useEffect(() => {\n if (popover.state.rendered) {\n onOverlayEnter();\n }\n }, [popover.state.rendered]);\n\n // Close every nested submenu when the outer menu closes so submenu\n // popups (which live in their own portals and have independent open\n // state) don't outlive the parent popup. Without this the parent's\n // leave animation runs while submenus stay visible — the user sees the\n // root close first and submenus dangling. With it everything tears\n // down in sync.\n React.useEffect(() => {\n if (!popover.state.open) {\n submenuRegistry.current.forEach((methods) => {\n methods.close();\n });\n }\n }, [popover.state.open]);\n\n // Subscribe to the parent navigationmenu's sibling-switch signal so this\n // menu can flag its own popup as instant (no animation) when it is\n // the menu being closed or opened mid-traversal. Reset to undefined\n // shortly after so the next normal open/close animates again.\n React.useEffect(() => {\n if (!props.navigationmenu || !props.navigationmenuMenuId) return;\n\n const unregister = props.navigationmenu.registerInstantSignal(props.navigationmenuMenuId, () => {\n setInstantType('switch');\n });\n\n return unregister;\n }, [props.navigationmenu, props.navigationmenuMenuId]);\n\n // Clear the instant flag once the popup state has settled into the\n // post-switch configuration. Watching popover.state.open means we\n // reset right after the (instant) leave/enter completes.\n React.useEffect(() => {\n if (instantType === undefined) return;\n\n const handle = window.setTimeout(() => setInstantType(undefined), 50);\n\n return () => window.clearTimeout(handle);\n }, [instantType, popover.state.open]);\n\n return {\n state,\n popover,\n // prop getters\n rootProps,\n triggerProps,\n arrowProps,\n popupProps,\n positionerProps,\n labelProps,\n separatorProps,\n radioGroupProps,\n getItemProps,\n getSubTriggerProps,\n getListProps,\n getIndicatorProps,\n checkboxItemIndicatorProps,\n radioItemIndicatorProps,\n submenuIndicatorProps,\n updateItemAria,\n // methods\n isFocused,\n getItemId,\n getListId,\n changeVisibleState,\n markMouseInteraction,\n changeFocusedOptionId,\n hideSubmenusAfterLevel,\n hideAllSubmenus,\n onListKeyDown,\n onListFocus,\n onListBlur,\n onOverlayEnter,\n onTriggerClick,\n onItemClick\n };\n }\n});\n","import type { UseMenuProps } from '@primereact/types/headless/menu';\n\nexport const defaultProps: UseMenuProps = {\n open: undefined,\n defaultOpen: undefined,\n composite: true,\n appendTo: 'body',\n baseZIndex: 0,\n autoZIndex: true,\n tabIndex: 0,\n openDelay: 100,\n closeDelay: 0,\n openOnHover: false,\n onOpenChange: undefined,\n context: undefined,\n navigationmenu: undefined,\n navigationmenuMenuId: undefined\n};\n"],"mappings":"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","names":["withHeadless","usePopover","focus","isPrintableCharacter","toElement","React","defaultProps","compareDOMPosition","a","b","position","useMenu","withHeadless","defaultProps","props","id","_a","_b","navigationmenuManaged","effectiveOpen","userOnOpenChange","effectiveOnOpenChange","event","ownPopover","usePopover","popover","focusedState","setFocusedState","focusedOptionId","setFocusedOptionId","instantType","setInstantType","isMouseInteractionRef","isAutoFocused","hoverOpenTimersRef","hoverCloseTimersRef","clearHoverTimer","mapRef","key","handle","scheduleHover","kind","delay","action","sameKindMap","open","close","h","itemRefsById","submenuRegistry","submenuListRefs","itemRefCallbacks","itemSelectFireHandlers","listRef","setListRef","node","toElement","state","getItemId","value","getListId","getItemLevel","element","level","current","parentList","triggerId","listRefObj","triggerEl","getSiblingItems","items","itemEl","itemId","getRootLevelItems","getSubmenuItems","submenuList","triggerElement","subWrapper","updateItemAria","siblings","size","sibling","i","updateItemAriaRef","getOrCreateItemRef","changeVisibleState","isVisible","methods","isFocused","getFocusableItems","currentElement","trigger","getFocusableItemsAtCurrentLevel","currentFocusedId","getCurrentFocusedId","focusedElement","markMouseInteraction","newValue","changeFocusedOptionId","newId","prev","prevArray","idLevel","sameDepthIndex","prevId","prevEl","searchItems","char","focusableItems","startIndex","item","searchChar","closeSubmenuOfCurrentFocus","submenuMethods","hideAllSubmenus","hideSubmenusAfterLevel","targetItemId","targetElement","targetLevel","el","onArrowDown","currentIndex","nextIndex","onArrowUp","hide","prevIndex","onArrowRight","ariaExpanded","attempts","focusFirstSubmenuItem","submenuItems","onArrowLeft","parentTriggerId","closestList","ref","onHome","onEnd","onEnterKey","submenuEntry","fire","onItemClick","onEscapeKey","focus","onTabKey","onListKeyDown","metaKey","isPrintableCharacter","onListFocus","_c","path","currentLevel","openTrigger","subItems","leafId","pending","target","onListBlur","onOverlayEnter","autoFocus","onTriggerClick","onTriggerPointerEnter","onTriggerPointerLeave","effectiveCloseDelay","popupRoot","cancelClose","cleanupHandle","isBlur","isPortal","rootFocusId","getItemProps","input","disabled","type","checked","inPortal","closeOnSelect","onSelect","focused","role","fireSelect","originalEvent","prevented","selectEvent","__spreadProps","__spreadValues","itemElement","getSubTriggerProps","_d","sub","submenuOpen","subOpenDelay","subCloseDelay","subOpenOnHover","submenuListRef","subAnchorRef","itemRef","subTriggerRef","_e","submenuPopup","submenuPositioner","submenuRoot","relatedTarget","getIndicatorProps","match","indicatorType","active","checkboxItemIndicatorProps","radioItemIndicatorProps","submenuIndicatorProps","getListProps","isSubmenu","subListRef","listId","activeDescendant","triggerProps","arrowProps","onPopupPointerEnter","onPopupPointerLeave","popupProps","positionerProps","labelProps","separatorProps","radioGroupProps","rootProps"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var r=Object.defineProperty,M=Object.defineProperties;var S=Object.getOwnPropertyDescriptors;var s=Object.getOwnPropertySymbols;var E=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable;var C=(e,n,t)=>n in e?r(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,d=(e,n)=>{for(var t in n||(n={}))E.call(n,t)&&C(e,t,n[t]);if(s)for(var t of s(n))U.call(n,t)&&C(e,t,n[t]);return e},u=(e,n)=>M(e,S(n));import{withHeadless as b}from"@primereact/core/headless";import{useRadioButton as x}from"@primereact/headless/radiobutton";import{equals as k}from"@primeuix/utils";import*as g from"react";var v={checked:void 0,defaultChecked:void 0,inputId:void 0,name:void 0,value:void 0,disabled:void 0,closeOnSelect:!1,group:null,onSelect:void 0,onCheckedChange:void 0};var B=b({name:"useMenuRadioItem",defaultProps:v,setup({props:e}){var o,h,f;let n=(o=e.group)!=null?o:null,t=n?u(d({},e),{checked:k(n.value,e.value),defaultChecked:k(n.defaultValue,e.value),name:(h=e.name)!=null?h:n.name,disabled:e.disabled,value:e.value,onCheckedChange:l=>{var a;n.updateChange(u(d({},l),{value:e.value})),(a=e.onCheckedChange)==null||a.call(e,u(d({},l),{value:e.value}))}}):u(d({},e),{value:e.value,onCheckedChange:l=>{var a;return(a=e.onCheckedChange)==null?void 0:a.call(e,u(d({},l),{value:e.value}))}}),c=x(t),i=!!c.state.checked,m=!!e.disabled,I=(f=e.closeOnSelect)!=null?f:!1,R=g.useCallback(l=>{var a;m||(i||c.onChange({target:{checked:!0}}),(a=e.onSelect)==null||a.call(e,l))},[c,i,m,e.onSelect]);return u(d({},c),{state:u(d({},c.state),{checked:i}),closeOnSelect:I,onSelect:R})}});export{v as defaultProps,B as useMenuRadioItem};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/menu/radioitem/useMenuRadioItem.ts","../../../src/menu/radioitem/useMenuRadioItem.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useRadioButton } from '@primereact/headless/radiobutton';\nimport type { UseMenuItemSelectEvent, UseMenuRadioItemCheckedChangeEvent } from '@primereact/types/headless/menu';\nimport { equals } from '@primeuix/utils';\nimport * as React from 'react';\nimport { defaultProps } from './useMenuRadioItem.props';\n\nexport const useMenuRadioItem = withHeadless({\n name: 'useMenuRadioItem',\n defaultProps,\n setup({ props }) {\n const group = props.group ?? null;\n\n // When attached to a parent radio-item group the checked state is\n // derived from the group's value and writes are forwarded back via\n // `group.updateChange`. Otherwise the underlying useRadioButton runs\n // fully controlled by the consumer's own props.\n const radioInput = group\n ? {\n ...props,\n checked: equals(group.value, props.value),\n defaultChecked: equals(group.defaultValue, props.value),\n name: props.name ?? group.name,\n disabled: props.disabled,\n value: props.value,\n onCheckedChange: (event: UseMenuRadioItemCheckedChangeEvent) => {\n group.updateChange({ ...event, value: props.value });\n props.onCheckedChange?.({ ...event, value: props.value });\n }\n }\n : {\n ...props,\n value: props.value,\n onCheckedChange: (event: UseMenuRadioItemCheckedChangeEvent) => props.onCheckedChange?.({ ...event, value: props.value })\n };\n\n const radio = useRadioButton(radioInput);\n\n const checked = !!radio.state.checked;\n const isDisabled = !!props.disabled;\n // Default closeOnSelect to false — selecting a radio-item should keep\n // the menu open. Consumers opt back in via `closeOnSelect={true}`.\n const closeOnSelect = props.closeOnSelect ?? false;\n\n const onSelect = React.useCallback(\n (event: UseMenuItemSelectEvent) => {\n if (isDisabled) return;\n\n // Re-selecting the active radio is a no-op so we don't fire\n // the useRadioButton toggle that would clear the value.\n if (!checked) {\n radio.onChange({ target: { checked: true } } as unknown as React.ChangeEvent<HTMLInputElement>);\n }\n\n props.onSelect?.(event);\n },\n [radio, checked, isDisabled, props.onSelect]\n );\n\n return {\n ...radio,\n state: {\n ...radio.state,\n checked\n },\n closeOnSelect,\n onSelect\n };\n }\n});\n","import type { UseMenuRadioItemProps } from '@primereact/types/headless/menu';\n\nexport const defaultProps: UseMenuRadioItemProps = {\n checked: undefined,\n defaultChecked: undefined,\n inputId: undefined,\n name: undefined,\n value: undefined,\n disabled: undefined,\n closeOnSelect: false,\n group: null,\n onSelect: undefined,\n onCheckedChange: undefined\n};\n"],"mappings":"6aAAA,OAAS,gBAAAA,MAAoB,4BAC7B,OAAS,kBAAAC,MAAsB,mCAE/B,OAAS,UAAAC,MAAc,kBACvB,UAAYC,MAAW,QCFhB,IAAMC,EAAsC,CAC/C,QAAS,OACT,eAAgB,OAChB,QAAS,OACT,KAAM,OACN,MAAO,OACP,SAAU,OACV,cAAe,GACf,MAAO,KACP,SAAU,OACV,gBAAiB,MACrB,EDNO,IAAMC,EAAmBC,EAAa,CACzC,KAAM,mBACN,aAAAC,EACA,MAAM,CAAE,MAAAC,CAAM,EAAG,CAVrB,IAAAC,EAAAC,EAAAC,EAWQ,IAAMC,GAAQH,EAAAD,EAAM,QAAN,KAAAC,EAAe,KAMvBI,EAAaD,EACbE,EAAAC,EAAA,GACOP,GADP,CAEI,QAASQ,EAAOJ,EAAM,MAAOJ,EAAM,KAAK,EACxC,eAAgBQ,EAAOJ,EAAM,aAAcJ,EAAM,KAAK,EACtD,MAAME,EAAAF,EAAM,OAAN,KAAAE,EAAcE,EAAM,KAC1B,SAAUJ,EAAM,SAChB,MAAOA,EAAM,MACb,gBAAkBS,GAA8C,CAzBlF,IAAAR,EA0BsBG,EAAM,aAAaE,EAAAC,EAAA,GAAKE,GAAL,CAAY,MAAOT,EAAM,KAAM,EAAC,GACnDC,EAAAD,EAAM,kBAAN,MAAAC,EAAA,KAAAD,EAAwBM,EAAAC,EAAA,GAAKE,GAAL,CAAY,MAAOT,EAAM,KAAM,GAC3D,CACJ,GACAM,EAAAC,EAAA,GACOP,GADP,CAEI,MAAOA,EAAM,MACb,gBAAkBS,GAA2C,CAjC/E,IAAAR,EAiCkF,OAAAA,EAAAD,EAAM,kBAAN,YAAAC,EAAA,KAAAD,EAAwBM,EAAAC,EAAA,GAAKE,GAAL,CAAY,MAAOT,EAAM,KAAM,IAC3H,GAEAU,EAAQC,EAAeN,CAAU,EAEjCO,EAAU,CAAC,CAACF,EAAM,MAAM,QACxBG,EAAa,CAAC,CAACb,EAAM,SAGrBc,GAAgBX,EAAAH,EAAM,gBAAN,KAAAG,EAAuB,GAEvCY,EAAiB,cAClBN,GAAkC,CA7C/C,IAAAR,EA8CoBY,IAICD,GACDF,EAAM,SAAS,CAAE,OAAQ,CAAE,QAAS,EAAK,CAAE,CAAmD,GAGlGT,EAAAD,EAAM,WAAN,MAAAC,EAAA,KAAAD,EAAiBS,GACrB,EACA,CAACC,EAAOE,EAASC,EAAYb,EAAM,QAAQ,CAC/C,EAEA,OAAOM,EAAAC,EAAA,GACAG,GADA,CAEH,MAAOJ,EAAAC,EAAA,GACAG,EAAM,OADN,CAEH,QAAAE,CACJ,GACA,cAAAE,EACA,SAAAC,CACJ,EACJ,CACJ,CAAC","names":["withHeadless","useRadioButton","equals","React","defaultProps","useMenuRadioItem","withHeadless","defaultProps","props","_a","_b","_c","group","radioInput","__spreadProps","__spreadValues","equals","event","radio","useRadioButton","checked","isDisabled","closeOnSelect","onSelect"]}
|