@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,11 @@
|
|
|
1
|
+
var He=Object.defineProperty,Ae=Object.defineProperties;var ze=Object.getOwnPropertyDescriptors;var De=Object.getOwnPropertySymbols;var je=Object.prototype.hasOwnProperty,_e=Object.prototype.propertyIsEnumerable;var ke=(e,t,r)=>t in e?He(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,N=(e,t)=>{for(var r in t||(t={}))je.call(t,r)&&ke(e,r,t[r]);if(De)for(var r of De(t))_e.call(t,r)&&ke(e,r,t[r]);return e},W=(e,t)=>Ae(e,ze(t));import*as j from"react";var We=Object.freeze({});function $e(e){let{reorderableColumns:t=!1}=e,r=j.useRef(-1),i=j.useRef(null),c=j.useRef(-1),l=j.useRef(0),a=j.useRef(null),n=j.useRef(null),f=j.useRef(null),M=j.useRef(new Map),E=j.useRef(-1),d=j.useRef(null),g=j.useCallback((y,v)=>(M.current.set(y,v),()=>{M.current.delete(y),E.current===y&&(E.current=-1,d.current=null)}),[]),h=j.useCallback((y,v)=>{var x,I;let F=E.current,k=d.current;F===y&&k===v||(F!==-1&&F!==y&&((x=M.current.get(F))==null||x(null)),(I=M.current.get(y))==null||I({side:v}),E.current=y,d.current=v)},[]),S=j.useCallback(()=>{var v;let y=E.current;y!==-1&&((v=M.current.get(y))==null||v(null),E.current=-1,d.current=null)},[]),s=j.useCallback((y,v)=>{t&&(r.current=v,i.current=y.currentTarget,y.dataTransfer.effectAllowed="move",y.dataTransfer.setData("text/plain",String(v)))},[t]),b=j.useCallback((y,v)=>{if(!t||r.current===-1||r.current===v)return;y.preventDefault(),y.dataTransfer.dropEffect="move";let k=y.currentTarget.getBoundingClientRect(),x=y.clientX>k.left+k.width/2?"end":"start";l.current=x==="end"?1:-1,c.current=v,h(v,x);let I=a.current,H=n.current,X=f.current;if(I&&H&&X){let $=X.getBoundingClientRect(),Z=I.offsetHeight,q=I.offsetWidth,P=k.left-$.left,w=x==="end"?P+k.width-Math.ceil(q/2):P-Math.ceil(q/2);I.style.top=k.top-$.top-Z+1+"px",I.style.left=w+"px",H.style.top=k.top-$.top+k.height+"px",H.style.left=w+"px",I.style.display="block",H.style.display="block"}},[t,h]),m=j.useCallback((y,v)=>{!t||r.current===-1||(y.preventDefault(),c.current=v)},[t]),D=j.useCallback(()=>{a.current&&(a.current.style.display="none"),n.current&&(n.current.style.display="none")},[]),L=j.useCallback(y=>{},[t]),U=j.useCallback((y,v)=>{var H;if(!t||r.current===-1)return;y.preventDefault();let F=r.current,k=v,x=l.current,I=F!==k;I&&(k-F===1&&x===-1||k-F===-1&&x===1)&&(I=!1),I&&(k<F&&x===1&&k++,k>F&&x===-1&&k--,(H=e.onColumnReorder)==null||H.call(e,{originalEvent:y.nativeEvent,dragIndex:F,dropIndex:k})),D(),S(),r.current=-1,c.current=-1,l.current=0,i.current=null},[t,e.onColumnReorder,S,D]),T=j.useCallback(y=>{t&&(D(),S(),r.current=-1,c.current=-1,l.current=0,i.current=null)},[t,S,D]),p=j.useCallback(()=>({"data-scope":"datatable","data-part":"column-reorder",style:{cursor:"grab",userSelect:"none"}}),[]),C=j.useCallback(()=>({"data-scope":"datatable","data-part":"column-reorder-indicator-up",ref:y=>{a.current=y}}),[]),o=j.useCallback(()=>({"data-scope":"datatable","data-part":"column-reorder-indicator-down",ref:y=>{n.current=y}}),[]),R=j.useCallback(y=>{f.current=y},[]),u=j.useMemo(()=>({onDragStart:s,onDragOver:b,onDragEnter:m,onDragLeave:L,onDrop:U,onDragEnd:T,registerDropTarget:g,getColumnReorderHandleProps:p,getColumnReorderIndicatorUpProps:C,getColumnReorderIndicatorDownProps:o}),[s,b,m,L,U,T,g,p,C,o]);return{state:We,exposes:u,registerRoot:R}}import*as J from"react";var Ge=Object.freeze({}),ce=15;function Ve(e){let{resizableColumns:t=!1,columnResizeMode:r="fit"}=e,i=J.useRef(null),c=J.useRef(null),l=J.useCallback(s=>{c.current=s},[]),a=J.useRef(null),n=J.useCallback((s,b)=>{if(typeof document=="undefined")return;if(!a.current){let L=document.createElement("style");L.setAttribute("data-primereact-datatable-resize",""),document.head.appendChild(L),a.current=L}let m=s.getAttribute("data-resize-id");m||(m=`dt-resize-${Math.random().toString(36).slice(2,9)}`,s.setAttribute("data-resize-id",m));let D=b.map((L,U)=>{let T=U+1,p=`table[data-resize-id="${m}"]`;return`
|
|
2
|
+
${p} > thead > tr > th:nth-child(${T}),
|
|
3
|
+
${p} > tbody > tr > td:nth-child(${T}),
|
|
4
|
+
${p} > tfoot > tr > td:nth-child(${T}) {
|
|
5
|
+
width: ${L}px !important;
|
|
6
|
+
max-width: ${L}px !important;
|
|
7
|
+
}
|
|
8
|
+
`}).join(`
|
|
9
|
+
`);a.current.innerHTML=D},[]);J.useEffect(()=>()=>{var s;(s=a.current)==null||s.remove(),a.current=null},[]);let f=J.useRef(r);f.current=r;let M=J.useRef(e.onColumnResizeEnd);M.current=e.onColumnResizeEnd;let E=J.useCallback(()=>{let s=i.current;s&&(s.resizer.removeEventListener("pointermove",s.onMove),s.resizer.removeEventListener("pointerup",s.onEnd),s.resizer.removeEventListener("pointercancel",s.onEnd),s.resizer.hasPointerCapture(s.pointerId)&&s.resizer.releasePointerCapture(s.pointerId),c.current&&(c.current.style.display="none",c.current.style.willChange=""),document.body.style.removeProperty("cursor"),document.body.style.removeProperty("user-select"),i.current=null)},[]),d=J.useCallback((s,b,m)=>{let D=s.headerCells.map((L,U)=>{var T;return(T=b[U])!=null?T:L.offsetWidth});if(m!==void 0)s.table.style.width=`${m}px`,s.table.style.minWidth=`${m}px`;else{let L=s.initialTableWidth,U=D.reduce((p,C)=>p+C,0),T=L-U;if(Math.abs(T)>.01){let p=D.findIndex((C,o)=>b[o]===void 0);p>=0&&(D[p]+=T)}}n(s.table,D)},[n]),g=J.useCallback((s,b,m)=>{var y,v,F;if(!t||s.pointerType==="mouse"&&s.button!==0)return;let D=m.closest("table");if(!D)return;let L=(y=D.closest('[data-part="table-container"]'))!=null?y:D.parentElement;if(!L)return;let U=s.currentTarget,T=Array.from(D.querySelectorAll("thead th")),p=(v=T[b+1])!=null?v:null,C=L.getBoundingClientRect(),o=c.current;if(o){let k=s.clientX-C.left+L.scrollLeft;o.style.top="0px",o.style.left="0px",o.style.height=`${L.clientHeight}px`,o.style.transform=`translateX(${k}px)`,o.style.willChange="transform",o.style.display="block"}let R=k=>{let x=i.current;if(!x||k.pointerId!==x.pointerId)return;let I=c.current;if(!I)return;let H=k.clientX-x.containerLeft+x.tableContainer.scrollLeft;I.style.transform=`translateX(${H}px)`},u=k=>{var $,Z;let x=i.current;if(!x||k.pointerId!==x.pointerId)return;let I=k.clientX-x.startClientX,H=f.current,X=x.initialWidth+I;if(X>=ce){if(H==="fit"&&x.nextHeaderCell){let q=x.initialNextWidth-ce,P=Math.min(I,q),w=x.initialWidth+P,O=x.initialNextWidth-P;w>=ce&&O>=ce&&(d(x,{[x.columnIndex]:w,[x.columnIndex+1]:O}),($=M.current)==null||$.call(M,{originalEvent:k,columnIndex:x.columnIndex,delta:P}))}else if(H==="expand"){let q=x.initialTableWidth+I;d(x,{[x.columnIndex]:X},q),(Z=M.current)==null||Z.call(M,{originalEvent:k,columnIndex:x.columnIndex,delta:I})}}E()};i.current={columnIndex:b,pointerId:s.pointerId,startClientX:s.clientX,containerLeft:C.left,initialScrollLeft:L.scrollLeft,resizer:U,headerCell:m,nextHeaderCell:p,headerCells:T,table:D,tableContainer:L,initialWidth:m.offsetWidth,initialNextWidth:(F=p==null?void 0:p.offsetWidth)!=null?F:0,initialTableWidth:f.current==="fit"?L.clientWidth:D.offsetWidth,onMove:R,onEnd:u},U.setPointerCapture(s.pointerId),U.addEventListener("pointermove",R),U.addEventListener("pointerup",u),U.addEventListener("pointercancel",u),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[t,d,E]);J.useEffect(()=>()=>E(),[E]);let h=J.useCallback(s=>({"data-scope":"datatable","data-part":"column-resizer",style:{touchAction:"none"},onPointerDown:m=>{let D=m.target.closest("th");if(D){let L=s!=null?s:D.cellIndex;g(m,L,D)}}}),[g]),S=J.useMemo(()=>({onResizeStart:g,registerIndicator:l,getColumnResizerProps:h}),[g,l,h]);return{state:Ge,exposes:S}}import*as G from"react";var ye=Object.freeze({});function Be(e){var C;let{editMode:t}=e,r=e.editingKeys!==void 0,[i,c]=G.useState(()=>{var o,R;return(R=(o=e.editingKeys)!=null?o:e.defaultEditingKeys)!=null?R:ye}),l=r?(C=e.editingKeys)!=null?C:ye:i;G.useEffect(()=>{var o;r&&c((o=e.editingKeys)!=null?o:ye)},[r,e.editingKeys]);let[a,n]=G.useState(null),f=G.useRef({}),M=G.useCallback(o=>l[String(o)]===!0,[l]),E=G.useCallback((o,R,u,y)=>{var k,x;if(t!=="row")return;let v=String(R),F=W(N({},l),{[v]:!0});u&&(f.current[v]=N({},u)),r||c(F),(k=e.onEditingKeysChange)==null||k.call(e,{originalEvent:o,value:F}),(x=e.onRowEditInit)==null||x.call(e,{originalEvent:o,data:u!=null?u:{},index:y!=null?y:-1})},[t,l,r,e.onEditingKeysChange,e.onRowEditInit]),d=G.useCallback((o,R,u,y,v)=>{var x,I;if(t!=="row")return;let F=String(R),k=N({},l);delete k[F],delete f.current[F],r||c(k),(x=e.onEditingKeysChange)==null||x.call(e,{originalEvent:o,value:k}),(I=e.onRowEditSave)==null||I.call(e,{originalEvent:o,data:u!=null?u:{},newData:y,index:v!=null?v:-1})},[t,l,r,e.onEditingKeysChange,e.onRowEditSave]),g=G.useCallback((o,R,u,y)=>{var x,I,H;if(t!=="row")return;let v=String(R),F=N({},l);delete F[v];let k=f.current[v];delete f.current[v],r||c(F),(x=e.onEditingKeysChange)==null||x.call(e,{originalEvent:o,value:F}),(H=e.onRowEditCancel)==null||H.call(e,{originalEvent:o,data:(I=k!=null?k:u)!=null?I:{},index:y!=null?y:-1})},[t,l,r,e.onEditingKeysChange,e.onRowEditCancel]),h=G.useCallback((o,R,u)=>t!=="cell"||!a||a.field!==R?!1:u!==void 0&&a.rowKey!==void 0?String(a.rowKey)===String(u):a.rowIndex===o,[t,a]),S=G.useCallback((o,R,u,y)=>{var v;t==="cell"&&(n({rowIndex:R,field:u,rowKey:y}),(v=e.onCellEditInit)==null||v.call(e,{originalEvent:o,field:u,rowIndex:R}))},[t,e.onCellEditInit]),s=G.useCallback(o=>{var y;if(t!=="cell")return!1;let R=!1,u=W(N({},o),{preventDefault:()=>{R=!0}});return(y=e.onCellEditComplete)==null||y.call(e,u),R||n(null),!R},[t,e.onCellEditComplete]),b=G.useCallback((o,R,u)=>{var y;t==="cell"&&((y=e.onCellEditCancel)==null||y.call(e,{originalEvent:o,rowData:{},newRowData:{},field:u,value:void 0,newValue:void 0,rowIndex:R,type:"escape",preventDefault:()=>{}}),n(null))},[t,e.onCellEditCancel]),m=G.useCallback(o=>N(N({"data-scope":"datatable","data-part":"cell-editor","data-row-index":String(o.rowIndex),"data-field":o.field},o.rowKey!==void 0?{"data-row-key":String(o.rowKey)}:void 0),o.isEditing?{"data-editing":""}:void 0),[]),D=G.useCallback(()=>({"data-scope":"datatable","data-part":"row-editor-init",type:"button","aria-label":"Edit row"}),[]),L=G.useCallback(()=>({"data-scope":"datatable","data-part":"row-editor-save",type:"button","aria-label":"Save row"}),[]),U=G.useCallback(()=>({"data-scope":"datatable","data-part":"row-editor-cancel",type:"button","aria-label":"Cancel edit"}),[]),T=G.useMemo(()=>({isEditing:M,startRowEdit:E,saveRowEdit:d,cancelRowEdit:g,startCellEdit:S,completeCellEdit:s,cancelCellEdit:b,isCellEditing:h,getCellEditorRootProps:m,getRowEditorInitProps:D,getRowEditorSaveProps:L,getRowEditorCancelProps:U}),[M,E,d,g,S,s,b,h,m,D,L,U]);return{state:G.useMemo(()=>({editingKeys:l,editingCell:a}),[l,a]),exposes:T}}import*as re from"react";var we=Object.freeze({});function Xe(e){var E;let t=e.expandedKeys!==void 0,[r,i]=re.useState(()=>{var d,g;return(g=(d=e.expandedKeys)!=null?d:e.defaultExpandedKeys)!=null?g:{}}),c=t?(E=e.expandedKeys)!=null?E:we:r;re.useEffect(()=>{var d;t&&i((d=e.expandedKeys)!=null?d:we)},[t,e.expandedKeys]);let l=re.useCallback(d=>c[String(d)]===!0,[c]),a=re.useCallback((d,g)=>{var s;let h=String(g),S=N({},c);S[h]?delete S[h]:S[h]=!0,t||i(S),(s=e.onExpandedChange)==null||s.call(e,{originalEvent:d,value:S})},[c,t,e.onExpandedChange]),n=re.useCallback((d,g)=>{var L,U;let h=d!==void 0?l(d):!1,S=(g==null?void 0:g._treeLevel)!==void 0,s=(L=g==null?void 0:g._treeLevel)!=null?L:0,b=(U=g==null?void 0:g._treeHasChildren)!=null?U:!1,m=T=>{d!==void 0&&a(T,d)};if(S&&!b)return{isSpacer:!0,spacerProps:{"data-scope":"datatable","data-part":"row-toggle-spacer","data-tree-level":s,style:{display:"inline-block",marginInlineStart:`calc(var(--p-datatable-indent, 1rem) * ${s})`,width:"var(--p-datatable-toggle-size, 2rem)",flexShrink:0}}};let D={"data-scope":"datatable","data-part":"row-toggle",type:"button","aria-expanded":h,"aria-label":h?"Collapse row":"Expand row",onClick:m};return S&&(D["data-tree-level"]=s,D.style={marginInlineStart:`calc(var(--p-datatable-indent, 1rem) * ${s})`,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0}),{isSpacer:!1,rootProps:D,isExpanded:h}},[l,a]),f=re.useMemo(()=>({isExpanded:l,toggleExpansion:a,getRowToggleProps:n}),[l,a,n]);return{state:re.useMemo(()=>({expandedKeys:c}),[c]),exposes:f}}import{resolveFieldData as Ye}from"@primeuix/utils";import*as ie from"react";var qe=Object.freeze({});function Je(e){let t=ie.useCallback(i=>{var b,m,D,L;if(typeof document=="undefined")return;let c=(b=e.data)!=null?b:[],l=(m=i==null?void 0:i.separator)!=null?m:",",a=(D=i==null?void 0:i.fileName)!=null?D:"download",n=c;if(i!=null&&i.selectionOnly&&e.selectedKeys&&e.dataKey&&(n=c.filter(U=>{let T=String(U[e.dataKey]);return e.selectedKeys[T]})),n.length===0)return;let f=(L=i==null?void 0:i.fields)!=null?L:Object.keys(n[0]);if(i!=null&&i.exportFunction){i.exportFunction({data:n,fields:f});return}let M=i==null?void 0:i.headers,E=[],d=f.map(U=>{var p;let T=(p=M==null?void 0:M[U])!=null?p:U;return`"${String(T).replace(/"/g,'""')}"`});E.push(d.join(l));for(let U of n){let T=f.map(p=>{let C=Ye(U,p),o=C!=null?String(C):"";return o.length>0&&/^[=+\-@\t\r]/.test(o)&&(o=` ${o}`),`"${o.replace(/"/g,'""')}"`});E.push(T.join(l))}let g=E.join(`
|
|
10
|
+
`);if(typeof document=="undefined"||typeof URL=="undefined"||typeof Blob=="undefined")return;let h=new Blob([g],{type:"text/csv;charset=utf-8;"}),S=URL.createObjectURL(h),s=document.createElement("a");s.setAttribute("href",S),s.setAttribute("download",`${a}.csv`),s.style.display="none",document.body.appendChild(s);try{s.click()}finally{s.parentNode===document.body&&document.body.removeChild(s),URL.revokeObjectURL(S)}},[e.data,e.dataKey,e.selectedKeys]),r=ie.useMemo(()=>({exportCSV:t}),[t]);return{state:qe,exposes:r}}import{useFilter as Qe}from"@primereact/hooks/use-filter";import*as _ from"react";var Ze={Contains:"contains",NotContains:"notContains",StartsWith:"startsWith",EndsWith:"endsWith",Equals:"equals",NotEquals:"notEquals",In:"in",Between:"between",Lt:"lt",Lte:"lte",Gt:"gt",Gte:"gte",DateIs:"dateIs",DateIsNot:"dateIsNot",DateBefore:"dateBefore",DateAfter:"dateAfter",Custom:"custom"},et={And:"and",Or:"or"},xe=Object.freeze({});function tt(e){var X,$,Z,q;let{data:t=[],lazy:r=!1,globalFilterFields:i=[]}=e,c=e.filters!==void 0,[l,a]=_.useState((X=e.defaultFilters)!=null?X:xe),n=c?($=e.filters)!=null?$:xe:l;_.useEffect(()=>{c&&e.filters&&a(e.filters)},[c,e.filters]);let f=(Z=e.globalFilter)!=null?Z:null,M=(q=e.filterDelay)!=null?q:0,[E,d]=_.useState(n),[g,h]=_.useState(f);_.useEffect(()=>{if(M<=0){d(n),h(f);return}let P=setTimeout(()=>{d(n),h(f)},M);return()=>clearTimeout(P)},[n,f,M]);let S=M>0?E:n,s=M>0?g:f,b=_.useCallback((P,w)=>{var O;c||a(w),(O=e.onFilter)==null||O.call(e,{originalEvent:P,filters:w})},[c,e.onFilter]),m=_.useCallback((P,w,O)=>{let K=W(N({},n),{[w]:O});b(P,K)},[n,b]),D=_.useCallback((P,w)=>{var A,z,Y,V;let O=n[w],K=N({},n);if(O&&typeof O=="object"&&O!==null&&"constraints"in O){let te=O;K[w]={operator:(A=te.operator)!=null?A:"and",constraints:[{value:null,matchMode:(V=(Y=(z=te.constraints)==null?void 0:z[0])==null?void 0:Y.matchMode)!=null?V:"contains"}]}}else O&&typeof O=="object"&&O!==null&&"matchMode"in O?K[w]={value:null,matchMode:O.matchMode}:delete K[w];b(P,K)},[n,b]),L=_.useCallback(P=>{b(P,{})},[b]),U=_.useCallback((P,w,O="contains")=>{var z,Y;let K=n[w],A=N({},n);if(K&&typeof K=="object"&&K!==null&&"constraints"in K){let V=K,te=[...(z=V.constraints)!=null?z:[],{value:null,matchMode:O}];A[w]=W(N({},V),{constraints:te})}else{let V=K&&typeof K=="object"&&"value"in K?K.value:null,te=K&&typeof K=="object"&&"matchMode"in K&&(Y=K.matchMode)!=null?Y:"contains";A[w]={operator:"and",constraints:[{value:V,matchMode:te},{value:null,matchMode:O}]}}b(P,A)},[n,b]),T=_.useCallback((P,w,O)=>{var V;let K=n[w];if(!K||typeof K!="object"||!("constraints"in K))return;let A=K,z=((V=A.constraints)!=null?V:[]).filter((te,se)=>se!==O);if(z.length===0)return;let Y=W(N({},n),{[w]:W(N({},A),{constraints:z})});b(P,Y)},[n,b]),p=_.useCallback((P,w,O)=>{var z;let K=n[w],A=N({},n);if(K&&typeof K=="object"&&K!==null&&"constraints"in K)A[w]=W(N({},K),{operator:O});else{let Y=K&&typeof K=="object"&&"value"in K?K.value:null,V=K&&typeof K=="object"&&"matchMode"in K&&(z=K.matchMode)!=null?z:"contains";A[w]={operator:O,constraints:[{value:Y,matchMode:V}]}}b(P,A)},[n,b]),C=_.useCallback((P,w,O,K,A)=>{var se;let z=n[w];if(!z||typeof z!="object"||!("constraints"in z))return;let Y=z,V=[...(se=Y.constraints)!=null?se:[]];O>=0&&O<V.length&&(V[O]={value:K,matchMode:A!=null?A:V[O].matchMode});let te=W(N({},n),{[w]:W(N({},Y),{constraints:V})});b(P,te)},[n,b]),o=_.useCallback((P,w,O,K)=>{var te;let A=n[w];if(!A||typeof A!="object"||!("constraints"in A))return;let z=A,Y=[...(te=z.constraints)!=null?te:[]];O>=0&&O<Y.length&&(Y[O]=W(N({},Y[O]),{matchMode:K}));let V=W(N({},n),{[w]:W(N({},z),{constraints:Y})});b(P,V)},[n,b]),R=_.useCallback(P=>{var O;let w=n[P];return w?typeof w=="object"&&w!==null&&"constraints"in w?((O=w.constraints)!=null?O:[]).some(A=>A.value!==null&&A.value!==void 0&&A.value!==""):typeof w=="object"&&w!==null&&"value"in w?w.value!==null&&w.value!==void 0&&w.value!=="":w!=null&&w!=="":!1},[n]),u=_.useCallback(()=>f?!0:Object.keys(n).some(P=>R(P)),[n,f,R]),y=_.useCallback(P=>{let w=n[P];return w?typeof w=="object"&&w!==null?w:{value:w,matchMode:"contains"}:{value:null,matchMode:"contains"}},[n]),v=_.useMemo(()=>{var w,O;let P=[];for(let K of Object.keys(S)){if(K==="global")continue;let A=S[K];if(A){if(typeof A=="object"&&A!==null){let z=A;if(z.constraints&&z.constraints.length>0){P.push({field:K,operator:(w=z.operator)!=null?w:"and",constraints:z.constraints.map(Y=>{var V;return{value:Y.value,matchMode:(V=Y.matchMode)!=null?V:"contains"}})});continue}if("value"in z||"matchMode"in z){P.push({field:K,value:z.value,matchMode:(O=z.matchMode)!=null?O:"contains"});continue}}P.push({field:K,value:A,matchMode:"contains"})}}return s&&i.length>0&&P.push({field:i,value:s,matchMode:"contains"}),P},[S,s,i]),k=Qe({data:t,rules:v,lazy:r}).filteredData,x=_.useMemo(()=>({filters:n,globalFilter:f}),[n,f]),I=_.useCallback((P,w="row")=>N({"data-scope":"datatable","data-part":"filter","data-display":w},R(P)?{"data-active":""}:void 0),[R]),H=_.useMemo(()=>({setFieldFilter:m,clearFieldFilter:D,clearAllFilters:L,addConstraint:U,removeConstraint:T,setOperator:p,setConstraintValue:C,setConstraintMatchMode:o,hasFilterValue:R,isFiltered:u,getFieldFilterMeta:y,getFilterRootProps:I}),[m,D,L,U,T,p,C,o,R,u,y,I]);return{filteredData:k,state:x,exposes:H}}import{resolveFieldData as nt}from"@primeuix/utils";import*as ue from"react";function rt(e){let{data:t,groupField:r}=e,i=ue.useMemo(()=>{if(!r)return;let a=new Map;if(t.length===0)return a;let n=[],f,M=0;for(let E=0;E<t.length;E++){let d=nt(t[E],r);E===0?(f=d,M=0):d!==f&&(n.push({start:M,end:E-1,value:f}),f=d,M=E)}n.push({start:M,end:t.length-1,value:f});for(let E=0;E<n.length;E++){let d=n[E],g=d.end-d.start+1;for(let h=d.start;h<=d.end;h++)a.set(h,{isGroupStart:h===d.start,isGroupEnd:h===d.end,groupValue:d.value,groupCount:g,groupIndex:E})}return a},[t,r]),c=ue.useMemo(()=>({}),[]);return{state:ue.useMemo(()=>({groupMetaMap:i}),[i]),exposes:c}}import*as ne from"react";function at(e){var U,T,p,C,o;let{data:t,lazy:r,paginator:i}=e,c=e.page!==void 0,l=e.rows!==void 0,[a,n]=ne.useState((U=e.defaultPage)!=null?U:0),[f,M]=ne.useState((T=e.defaultRows)!=null?T:10),E=c?(p=e.page)!=null?p:0:a,d=l?(C=e.rows)!=null?C:10:f,g=r?(o=e.totalRecords)!=null?o:0:t.length,h=Math.max(1,Math.ceil(g/d)),S=E*d;ne.useEffect(()=>{!c&&E>=h&&h>0&&n(h-1)},[h,E,c]);let s=ne.useMemo(()=>!i||r?t:t.slice(S,S+d),[t,i,r,S,d]),b=ne.useCallback((R,u)=>{var v;if(u<0||u>=h)return;c||n(u);let y=u*d;(v=e.onPageChange)==null||v.call(e,{originalEvent:R,page:u,rows:d,first:y,pageCount:h})},[h,d,c,e.onPageChange]),m=ne.useCallback((R,u)=>{var v;if(u<=0)return;l||M(u),c||n(0);let y=Math.max(1,Math.ceil(g/u));(v=e.onPageChange)==null||v.call(e,{originalEvent:R,page:0,rows:u,first:0,pageCount:y})},[g,l,c,e.onPageChange]),D=ne.useMemo(()=>({page:E,rows:d,first:S,pageCount:h,totalRecords:g,onPageChange:b,onRowsChange:m}),[E,d,S,h,g,b,m]),L=ne.useMemo(()=>({page:E,rows:d,first:S,pageCount:h,totalRecords:g}),[E,d,S,h,g]);return{paginatedData:s,state:L,exposes:D}}import*as Q from"react";var lt=Object.freeze({}),pe="data-dragpoint-top",he="data-dragpoint-bottom";function de(e){e&&(e.removeAttribute(pe),e.removeAttribute(he))}function ot(e){let{reorderableRows:t=!1}=e,r=Q.useRef(-1),i=Q.useRef(-1),c=Q.useRef(null),l=Q.useCallback((S,s)=>{t&&(r.current=s,S.dataTransfer.effectAllowed="move",S.dataTransfer.setData("text/plain",String(s)))},[t]),a=Q.useCallback((S,s)=>{if(!t||r.current===-1||r.current===s)return;S.preventDefault(),S.dataTransfer.dropEffect="move";let b=S.currentTarget,m=b.getBoundingClientRect(),D=m.top+m.height/2;c.current&&c.current!==b&&de(c.current),S.clientY<D?(b.setAttribute(pe,""),b.removeAttribute(he),i.current=s):(b.setAttribute(he,""),b.removeAttribute(pe),i.current=s+1),c.current=b},[t]),n=Q.useCallback(S=>{if(!t)return;let s=S.currentTarget;de(s),c.current===s&&(c.current=null)},[t]),f=Q.useCallback(S=>{var D,L;if(!t||r.current===-1)return;S.preventDefault();let s=(D=e.data)!=null?D:[],b=r.current,m=i.current;if(m>b&&(m-=1),m!==b&&m>=0&&m<=s.length){let U=[...s],[T]=U.splice(b,1);U.splice(m,0,T),(L=e.onRowReorder)==null||L.call(e,{originalEvent:S.nativeEvent,dragIndex:b,dropIndex:m,value:U})}de(c.current),c.current=null,r.current=-1,i.current=-1},[t,e.data,e.onRowReorder]),M=Q.useCallback(()=>{t&&(de(c.current),c.current=null,r.current=-1,i.current=-1)},[t]),E=Q.useCallback(S=>{let s=S.currentTarget.closest("tr");s&&s.setAttribute("data-drag-source","true")},[]),d=Q.useCallback(S=>{let s=S.currentTarget.closest("tr");s&&s.removeAttribute("data-drag-source")},[]),g=Q.useCallback(()=>({"data-scope":"datatable","data-part":"row-reorder",style:{cursor:"grab",userSelect:"none",touchAction:"none"},onPointerDown:E,onPointerUp:d}),[E,d]),h=Q.useMemo(()=>({onDragStart:l,onDragOver:a,onDragEnter:a,onDragLeave:n,onDrop:f,onDragEnd:M,getRowReorderHandleProps:g}),[l,a,n,f,M,g]);return{state:lt,exposes:h}}import*as B from"react";var Ee=Object.freeze({});function Fe(e){let t=[];if(e.children)for(let r of e.children)t.push(r.key),t.push(...Fe(r));return t}function fe(e,t){for(let r of e){if(r.key===t)return r;if(r.children){let i=fe(r.children,t);if(i)return i}}return null}function st(e,t){let r=[];function i(c,l){for(let a of c){if(a.key===t)return r.push(...l),!0;if(a.children&&i(a.children,[...l,a.key]))return!0}return!1}return i(e,[]),r}function Ke(e,t){return!e.children||e.children.length===0?!0:e.children.every(r=>t[r.key]===!0&&Ke(r,t))}function Le(e,t){return e.children?e.children.some(r=>t[r.key]===!0||Le(r,t)):!1}function ct(e,t,r){let i=st(e,t);for(let c=i.length-1;c>=0;c--){let l=i[c],a=fe(e,l);a&&Ke(a,r)?r[l]=!0:delete r[l]}}function it(e){var T;let{data:t}=e,r=B.useRef(null),i=e.selectedKeys!==void 0,[c,l]=B.useState(()=>{var p,C;return(C=(p=e.selectedKeys)!=null?p:e.defaultSelectedKeys)!=null?C:Ee}),a=i?(T=e.selectedKeys)!=null?T:Ee:c;B.useEffect(()=>{var p;i&&l((p=e.selectedKeys)!=null?p:Ee)},[i,e.selectedKeys]);let n=B.useCallback((p,C)=>e.dataKey&&p?String(p[e.dataKey]):C,[e.dataKey]),f=B.useCallback(p=>a[String(p)]===!0,[a]),M=e.treeMode?e.rawTreeData:void 0,E=B.useMemo(()=>{let p=new Map;for(let C=0;C<t.length;C++)p.set(String(n(t[C],C)),C);return p},[t,n]),d=B.useCallback((p,C,o)=>{var v,F,k;let R=String(C),u,y=!0;if(o==="radio")u={[R]:!0};else if(o==="single")u=a[R]?{}:{[R]:!0};else if(p.shiftKey===!0&&!M&&r.current!==null&&r.current!==R){let I=r.current,H=(v=E.get(I))!=null?v:-1,X=(F=E.get(R))!=null?F:-1;if(H>=0&&X>=0){let $=Math.min(H,X),Z=Math.max(H,X);u=N({},a);for(let q=$;q<=Z;q++){let P=String(n(t[q],q));u[P]=!0}}else u=W(N({},a),{[R]:!0});y=!1}else{u=N({},a);let I=!u[R];if(I?u[R]=!0:delete u[R],M){let H=fe(M,R);if(H){let X=Fe(H);for(let $ of X)I?u[$]=!0:delete u[$]}ct(M,R,u)}}y&&o!=="radio"&&(r.current=R),i||l(u),(k=e.onSelectionChange)==null||k.call(e,{originalEvent:p,value:u,type:o==="radio"?"radio":o==="single"?"row":"checkbox"})},[t,n,a,i,e.onSelectionChange,M,E]),g=B.useCallback(p=>{let C=[];for(let o of p)C.push(o.key),o.children&&C.push(...g(o.children));return C},[]),h=B.useMemo(()=>{if(M){let C=g(M);if(C.length===0)return{all:!1,some:!1};let o=C.reduce((R,u)=>a[u]===!0?R+1:R,0);return{all:o===C.length,some:o>0&&o<C.length}}if(t.length===0)return{all:!1,some:!1};let p=0;for(let C=0;C<t.length;C++){let o=String(n(t[C],C));a[o]===!0&&p++}return{all:p===t.length,some:p>0&&p<t.length}},[t,M,a,n,g]),S=B.useCallback(()=>h.all,[h]),s=B.useCallback(()=>h.some,[h]),b=B.useCallback(p=>{var o;let C;if(S())C={};else if(C={},M){let R=g(M);for(let u of R)C[u]=!0}else t.forEach((R,u)=>{let y=String(n(R,u));C[y]=!0});i||l(C),(o=e.onSelectionChange)==null||o.call(e,{originalEvent:p,value:C,type:"all"})},[t,M,S,i,n,g,e.onSelectionChange]),m=B.useCallback((p,C)=>{var x;let{selectionMode:o,metaKeySelection:R}=e;if(!o)return;let u=String(C),y=p.metaKey||p.ctrlKey,v=p.shiftKey,F,k=!0;if(o==="single")F=a[u]?{}:{[u]:!0};else if(R)if(v&&r.current!==null&&r.current!==u){let I=r.current,H=-1,X=-1;for(let $=0;$<t.length;$++){let Z=String(n(t[$],$));if(Z===I&&(H=$),Z===u&&(X=$),H>=0&&X>=0)break}if(H>=0&&X>=0){let $=Math.min(H,X),Z=Math.max(H,X);F=y?N({},a):{};for(let q=$;q<=Z;q++){let P=String(n(t[q],q));F[P]=!0}}else F=W(N({},a),{[u]:!0});k=!1}else y?(F=N({},a),F[u]?delete F[u]:F[u]=!0):F={[u]:!0};else F=N({},a),F[u]?delete F[u]:F[u]=!0;k&&(r.current=u),i||l(F),(x=e.onSelectionChange)==null||x.call(e,{originalEvent:p,value:F,type:"row"})},[t,n,a,i,e.selectionMode,e.metaKeySelection,e.onSelectionChange]),D=B.useCallback(p=>{if(!M)return!1;let C=fe(M,String(p));return!C||!C.children||C.children.length===0?!1:!a[String(p)]&&Le(C,a)},[M,a]),L=B.useMemo(()=>({isSelected:f,isPartiallySelected:D,toggleSelection:d,toggleAll:b,isAllSelected:S,isSomeSelected:s,onRowClick:m}),[f,D,d,b,S,s,m]),U=B.useMemo(()=>({selectedKeys:a}),[a]);return{getRowKey:n,state:U,exposes:L}}import*as ee from"react";import{localeComparator as ut,resolveFieldData as be,sort as Me}from"@primeuix/utils";var Te=ut(),ge=(e,t,r,i=1)=>Me(e,t,r,Te,i),Ce=(e,t,r,i=1)=>!t||r===0?e:[...e].sort((c,l)=>Me(be(c,t),be(l,t),r,Te,i)),Se=(e,t,r=1)=>!t||t.length===0?e:[...e].sort((i,c)=>{for(let l of t){let a=Me(be(i,l.field),be(c,l.field),l.order,Te,r);if(a!==0)return a}return 0});function dt(e){var C;let{data:t,lazy:r}=e,i=e.sortField!==void 0,c=e.multiSortMeta!==void 0,[l,a]=ee.useState(e.defaultSortField),[n,f]=ee.useState(e.defaultSortOrder),[M,E]=ee.useState(e.defaultMultiSortMeta),d=i?e.sortField:l,g=i?e.sortOrder:n,h=c?e.multiSortMeta:M,S=ee.useCallback(o=>h&&h.length>0?h.some(R=>R.field===o):d===o&&g!==0,[d,g,h]),s=ee.useCallback(o=>{var R;if(h&&h.length>0){let u=h.find(y=>y.field===o);return(R=u==null?void 0:u.order)!=null?R:0}return d===o&&g!=null?g:0},[d,g,h]),b=ee.useCallback(o=>h&&h.length>0?h.findIndex(R=>R.field===o):-1,[h]),m=ee.useCallback((o,R,u)=>{var F,k;let y=s(R),v;if(y===0?v=1:y===1?v=-1:v=e.removableSort?0:1,u){let x=[...h!=null?h:[]],I=x.findIndex(H=>H.field===R);v===0?I!==-1&&x.splice(I,1):I!==-1?x[I]={field:R,order:v}:x.push({field:R,order:v}),c||E(x),(F=e.onSortChange)==null||F.call(e,{originalEvent:o,field:R,order:v,multiSortMeta:x})}else i||(a(v===0?void 0:R),f(v)),c||E(void 0),(k=e.onSortChange)==null||k.call(e,{originalEvent:o,field:R,order:v,multiSortMeta:void 0})},[s,e.removableSort,e.onSortChange,i,c,h]),D=(C=e.nullSortOrder)!=null?C:1,L=ee.useMemo(()=>r?t:h&&h.length>0?Se(t,h,D):d&&g!=null&&g!==0?Ce(t,d,g,D):t,[t,r,d,g,h,D]),U=ee.useCallback(o=>{let R=S(o),u=s(o),y=R?u===1?"ascending":"descending":"",v=k=>{if(!o)return;let x=k.metaKey||k.ctrlKey;m(k,o,x)},F=k=>{(k.key==="Enter"||k.key===" ")&&(k.preventDefault(),v(k))};return W(N({"data-scope":"datatable","data-part":"sort"},R?{"data-sorted":"","data-sort-order":u===1?"asc":"desc"}:{"data-unsorted":""}),{role:"button",tabIndex:0,"aria-label":`Sort by ${o}${y?` ${y}`:""}`,"aria-sort":R?u===1?"ascending":"descending":"none",onClick:v,onKeyDown:F})},[S,s,m]),T=ee.useMemo(()=>({onSort:m,isSorted:S,getSortOrder:s,getSortIndex:b,getSortProps:U}),[m,S,s,b,U]),p=ee.useMemo(()=>({sortField:d,sortOrder:g,multiSortMeta:h}),[d,g,h]);return{sortedData:L,state:p,exposes:T}}import{BUILT_IN_MATCHERS as ft,getGlobalMatchers as bt}from"@primereact/hooks/use-filter";import{resolveFieldData as le}from"@primeuix/utils";import*as oe from"react";function Pe(e,t,r,i){var l;let c=(l=ft[e])!=null?l:bt()[e];return c?c(t,r,i):!0}var Re=100;function Ie(e,t,r,i=0){return i>=Re?e:[...e].sort((l,a)=>{let n=l.data?le(l.data,t):void 0,f=a.data?le(a.data,t):void 0;return ge(n,f,r)}).map(l=>{var a;return(a=l.children)!=null&&a.length?W(N({},l),{children:Ie(l.children,t,r,i+1)}):l})}function Oe(e,t,r=0){return r>=Re?e:[...e].sort((c,l)=>{for(let a of t){let n=c.data?le(c.data,a.field):void 0,f=l.data?le(l.data,a.field):void 0,M=ge(n,f,a.order);if(M!==0)return M}return 0}).map(c=>{var l;return(l=c.children)!=null&&l.length?W(N({},c),{children:Oe(c.children,t,r+1)}):c})}function me(e,t,r="contains"){return Pe(r,e,t)}function gt(e,t,r,i){var l,a;if(r&&i.length>0&&!i.some(f=>Pe("contains",le(e,f),r)))return!1;let c=Object.keys(t).filter(n=>n!=="global");for(let n of c){let f=t[n];if(!f)continue;if(typeof f=="object"&&f!==null&&"constraints"in f){let E=f,d=(l=E.operator)!=null?l:"and",g=(a=E.constraints)!=null?a:[];if(g.length>0){let h=le(e,n);if(d==="and"){if(!g.every(s=>me(h,s.value,s.matchMode)))return!1}else if(!g.some(s=>me(h,s.value,s.matchMode)))return!1}continue}if(typeof f=="object"&&f!==null&&"value"in f){let E=f,d=le(e,n);if(!me(d,E.value,E.matchMode))return!1;continue}let M=le(e,n);if(!me(M,f))return!1}return!0}function ve(e,t,r,i,c=0){var a,n;if(c>=Re)return[];let l=[];for(let f of e){let M=(a=f.data)!=null?a:{};if(gt(M,t,r,i))l.push(f);else if((n=f.children)!=null&&n.length){let d=ve(f.children,t,r,i,c+1);d.length>0&&l.push(W(N({},f),{children:d}))}}return l}function Ue(e,t){var i;if(t)return!0;let r=Object.keys(e).filter(c=>c!=="global");for(let c of r){let l=e[c];if(l){if(typeof l=="object"&&l!==null&&"constraints"in l){if(((i=l.constraints)!=null?i:[]).some(f=>f.value!==null&&f.value!==void 0&&f.value!==""))return!0;continue}if(typeof l=="object"&&l!==null&&"value"in l){let a=l.value;if(a!=null&&a!=="")return!0;continue}if(l!=null&&l!=="")return!0}}return!1}function Ne(e,t,r,i){var a,n,f;if(r>=Re)return[];let c=[],l=e.length;for(let M=0;M<e.length;M++){let E=e[M],d=!!((a=E.children)!=null&&a.length),g=d||E.leaf===!1,h=E.leaf===!0||!d&&E.leaf!==!1;c.push(W(N({},(n=E.data)!=null?n:{}),{key:E.key,data:(f=E.data)!=null?f:{},children:E.children,_treeLevel:r,_treeHasChildren:g,_treeLeaf:h,_treeParentKey:i,_treePosInSet:M+1,_treeSetSize:l})),d&&t[E.key]&&c.push(...Ne(E.children,t,r+1,E.key))}return c}function mt(e){let{data:t,treeMode:r,expandedKeys:i,sortField:c,sortOrder:l,multiSortMeta:a,filters:n={},globalFilter:f=null,globalFilterFields:M=[],paginator:E=!1,page:d=0,rows:g=10}=e,h=oe.useMemo(()=>{if(!r)return t;let m=t;if(Ue(n,f)&&(m=ve(m,n,f,M)),a&&a.length>0?m=Oe(m,a):c&&l!=null&&l!==0&&(m=Ie(m,c,l)),E){let D=d*g;m=m.slice(D,D+g)}return Ne(m,i,0,null)},[t,r,i,c,l,a,n,f,M,E,d,g]),S=oe.useMemo(()=>{if(!r)return t.length;let m=t;return Ue(n,f)&&(m=ve(m,n,f,M)),m.length},[t,r,n,f,M]),s=oe.useMemo(()=>({}),[]),b=oe.useMemo(()=>({}),[]);return{flattenedData:h,totalRootNodes:S,state:s,exposes:b}}import*as ae from"react";function Rt(e){let{data:t,treeMode:r,selectionMode:i,expandedKeys:c={},onToggleExpansion:l,onToggleSelection:a,getRowKey:n}=e,f=i==="single"?"single":"checkbox",[M,E]=ae.useState(-1),d=ae.useCallback(b=>M===-1?b===0?0:-1:b===M?0:-1,[M]),g=ae.useCallback((b,m)=>{if(!b)return;let D=b.querySelector(`tr[data-scope="datatable"][data-part="row"][data-index="${m}"]`);if(D){E(m),D.focus();return}E(m)},[]),h=ae.useCallback((b,m)=>{let D=b.target;if(D!==b.currentTarget){let T=D.tagName;if(T==="INPUT"||T==="SELECT"||T==="TEXTAREA"||D.isContentEditable||D.closest("[data-editing]"))return}let L=t.length,U=!0;switch(b.key){case"ArrowDown":{let T=Math.min(m+1,L-1);if(T!==m){let p=b.currentTarget.closest("tbody");if(g(p,T),b.shiftKey&&a){let C=t[T],o=n==null?void 0:n(C,T);o!==void 0&&a(b,o,f)}}break}case"ArrowUp":{let T=Math.max(m-1,0);if(T!==m){let p=b.currentTarget.closest("tbody");if(g(p,T),b.shiftKey&&a){let C=t[T],o=n==null?void 0:n(C,T);o!==void 0&&a(b,o,f)}}break}case"ArrowRight":{if(!r){U=!1;break}let T=t[m],p=n==null?void 0:n(T,m),C=T==null?void 0:T._treeHasChildren,o=p!==void 0&&c[String(p)];if(C&&!o&&p!==void 0)l==null||l(b,p);else if(o){let R=b.currentTarget.closest("tbody");g(R,Math.min(m+1,L-1))}break}case"ArrowLeft":{if(!r){U=!1;break}let T=t[m],p=n==null?void 0:n(T,m),C=T==null?void 0:T._treeHasChildren,o=p!==void 0&&c[String(p)];if(C&&o&&p!==void 0)l==null||l(b,p);else{let R=T==null?void 0:T._treeParentKey;if(R!==null){let u=t.findIndex((y,v)=>String(n==null?void 0:n(y,v))===String(R));if(u>=0){let y=b.currentTarget.closest("tbody");g(y,u)}}}break}case"Home":{let T=b.currentTarget.closest("tbody");g(T,0);break}case"End":{let T=b.currentTarget.closest("tbody");g(T,L-1);break}case"Enter":case" ":{let T=b.target;if(T.tagName==="INPUT"||T.tagName==="SELECT"||T.tagName==="TEXTAREA"||T.tagName==="BUTTON"||T.tagName==="A"||T.isContentEditable){U=!1;break}if(a){let p=t[m],C=n==null?void 0:n(p,m);C!==void 0&&a(b,C,f)}break}default:U=!1}U&&b.preventDefault()},[t,r,c,g,l,a,n,f]),S=ae.useMemo(()=>({focusedRowIndex:M}),[M]),s=ae.useMemo(()=>({getRowTabIndex:d,onRowKeyDown:h,focusRow:g}),[d,h,g]);return{state:S,exposes:s}}export{Ze as FilterMatchMode,et as FilterOperator,$e as useDataTableColumnReorder,Ve as useDataTableColumnResize,Be as useDataTableEditing,Xe as useDataTableExpansion,Je as useDataTableExport,tt as useDataTableFilter,rt as useDataTableGrouping,Rt as useDataTableKeyboard,at as useDataTablePagination,ot as useDataTableRowReorder,it as useDataTableSelection,dt as useDataTableSort,mt as useDataTableTree};
|
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/datatable/features/useDataTableColumnReorder.ts","../../../src/datatable/features/useDataTableColumnResize.ts","../../../src/datatable/features/useDataTableEditing.ts","../../../src/datatable/features/useDataTableExpansion.ts","../../../src/datatable/features/useDataTableExport.ts","../../../src/datatable/features/useDataTableFilter.ts","../../../src/datatable/features/useDataTableGrouping.ts","../../../src/datatable/features/useDataTablePagination.ts","../../../src/datatable/features/useDataTableRowReorder.ts","../../../src/datatable/features/useDataTableSelection.ts","../../../src/datatable/features/useDataTableSort.ts","../../../src/datatable/utils/compareValues.ts","../../../src/datatable/features/useDataTableTree.ts","../../../src/datatable/features/useDataTableKeyboard.ts"],"sourcesContent":["import * as React from 'react';\n\nconst EMPTY_STATE = Object.freeze({});\n\nexport interface UseDataTableColumnReorderEvent {\n /**\n * The original browser event.\n */\n originalEvent: DragEvent;\n /**\n * Index of the column being dragged.\n */\n dragIndex: number;\n /**\n * Adjusted index where the column is dropped (accounting for before/after position).\n */\n dropIndex: number;\n}\n\nexport interface UseDataTableColumnReorderOptions {\n reorderableColumns?: boolean;\n onColumnReorder?: (event: UseDataTableColumnReorderEvent) => void;\n}\n\ntype DropSide = 'start' | 'end';\ntype DropPosition = -1 | 0 | 1; // -1 before target, 1 after target, 0 unset\ntype DropTargetNotify = (state: { side: DropSide } | null) => void;\n\nexport function useDataTableColumnReorder(options: UseDataTableColumnReorderOptions) {\n const { reorderableColumns = false } = options;\n\n const dragColumnIndex = React.useRef<number>(-1);\n const draggedElement = React.useRef<HTMLElement | null>(null);\n const dropColumnIndex = React.useRef<number>(-1);\n const dropPosition = React.useRef<DropPosition>(0);\n const indicatorUpRef = React.useRef<HTMLElement | null>(null);\n const indicatorDownRef = React.useRef<HTMLElement | null>(null);\n const rootRef = React.useRef<HTMLElement | null>(null);\n\n // Drop-target registry: each ColumnReorderTarget registers itself by column index.\n // Only the previously-active and newly-active target are notified per dragover,\n // so hover feedback scales independently of column count.\n const targets = React.useRef<Map<number, DropTargetNotify>>(new Map());\n const activeTargetIndex = React.useRef<number>(-1);\n const activeTargetSide = React.useRef<DropSide | null>(null);\n\n const registerDropTarget = React.useCallback((columnIndex: number, notify: DropTargetNotify) => {\n targets.current.set(columnIndex, notify);\n\n return () => {\n targets.current.delete(columnIndex);\n\n if (activeTargetIndex.current === columnIndex) {\n activeTargetIndex.current = -1;\n activeTargetSide.current = null;\n }\n };\n }, []);\n\n const setActiveDropTarget = React.useCallback((index: number, side: DropSide) => {\n const prev = activeTargetIndex.current;\n const prevSide = activeTargetSide.current;\n\n if (prev === index && prevSide === side) return;\n\n if (prev !== -1 && prev !== index) {\n targets.current.get(prev)?.(null);\n }\n\n targets.current.get(index)?.({ side });\n activeTargetIndex.current = index;\n activeTargetSide.current = side;\n }, []);\n\n const clearActiveDropTarget = React.useCallback(() => {\n const prev = activeTargetIndex.current;\n\n if (prev !== -1) {\n targets.current.get(prev)?.(null);\n activeTargetIndex.current = -1;\n activeTargetSide.current = null;\n }\n }, []);\n\n const onDragStart = React.useCallback(\n (event: React.DragEvent, columnIndex: number) => {\n if (!reorderableColumns) return;\n\n dragColumnIndex.current = columnIndex;\n draggedElement.current = event.currentTarget as HTMLElement;\n\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', String(columnIndex));\n },\n [reorderableColumns]\n );\n\n const onDragOver = React.useCallback(\n (event: React.DragEvent, columnIndex: number) => {\n if (!reorderableColumns || dragColumnIndex.current === -1) return;\n\n if (dragColumnIndex.current === columnIndex) return;\n\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n\n const th = event.currentTarget as HTMLElement;\n const rect = th.getBoundingClientRect();\n const side: DropSide = event.clientX > rect.left + rect.width / 2 ? 'end' : 'start';\n\n dropPosition.current = side === 'end' ? 1 : -1;\n dropColumnIndex.current = columnIndex;\n\n setActiveDropTarget(columnIndex, side);\n\n const indicatorUp = indicatorUpRef.current;\n const indicatorDown = indicatorDownRef.current;\n const root = rootRef.current;\n\n if (indicatorUp && indicatorDown && root) {\n const rootRect = root.getBoundingClientRect();\n const indicatorHeight = indicatorUp.offsetHeight;\n const indicatorWidth = indicatorUp.offsetWidth;\n const targetLeft = rect.left - rootRect.left;\n const x = side === 'end' ? targetLeft + rect.width - Math.ceil(indicatorWidth / 2) : targetLeft - Math.ceil(indicatorWidth / 2);\n\n indicatorUp.style.top = rect.top - rootRect.top - indicatorHeight + 1 + 'px';\n indicatorUp.style.left = x + 'px';\n indicatorDown.style.top = rect.top - rootRect.top + rect.height + 'px';\n indicatorDown.style.left = x + 'px';\n indicatorUp.style.display = 'block';\n indicatorDown.style.display = 'block';\n }\n },\n [reorderableColumns, setActiveDropTarget]\n );\n\n const onDragEnter = React.useCallback(\n (event: React.DragEvent, columnIndex: number) => {\n if (!reorderableColumns || dragColumnIndex.current === -1) return;\n\n event.preventDefault();\n dropColumnIndex.current = columnIndex;\n },\n [reorderableColumns]\n );\n\n const hideIndicators = React.useCallback(() => {\n if (indicatorUpRef.current) indicatorUpRef.current.style.display = 'none';\n if (indicatorDownRef.current) indicatorDownRef.current.style.display = 'none';\n }, []);\n\n const onDragLeave = React.useCallback(\n (_event: React.DragEvent) => {\n if (!reorderableColumns) return;\n // Hide happens in onDragEnd/onDrop; a sibling dragover would re-show it anyway.\n },\n [reorderableColumns]\n );\n\n const onDrop = React.useCallback(\n (event: React.DragEvent, columnIndex: number) => {\n if (!reorderableColumns || dragColumnIndex.current === -1) return;\n\n event.preventDefault();\n\n const dragIndex = dragColumnIndex.current;\n let dropIndex = columnIndex;\n const position = dropPosition.current;\n\n // Adjacent drop matching before/after is a no-op.\n let allowDrop = dragIndex !== dropIndex;\n\n if (allowDrop && ((dropIndex - dragIndex === 1 && position === -1) || (dropIndex - dragIndex === -1 && position === 1))) {\n allowDrop = false;\n }\n\n if (allowDrop) {\n if (dropIndex < dragIndex && position === 1) dropIndex++;\n\n if (dropIndex > dragIndex && position === -1) dropIndex--;\n\n options.onColumnReorder?.({\n originalEvent: event.nativeEvent,\n dragIndex,\n dropIndex\n });\n }\n\n hideIndicators();\n clearActiveDropTarget();\n dragColumnIndex.current = -1;\n dropColumnIndex.current = -1;\n dropPosition.current = 0;\n draggedElement.current = null;\n },\n [reorderableColumns, options.onColumnReorder, clearActiveDropTarget, hideIndicators]\n );\n\n const onDragEnd = React.useCallback(\n (_event: React.DragEvent) => {\n if (!reorderableColumns) return;\n\n hideIndicators();\n clearActiveDropTarget();\n dragColumnIndex.current = -1;\n dropColumnIndex.current = -1;\n dropPosition.current = 0;\n draggedElement.current = null;\n },\n [reorderableColumns, clearActiveDropTarget, hideIndicators]\n );\n\n const getColumnReorderHandleProps = React.useCallback(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'column-reorder',\n style: { cursor: 'grab', userSelect: 'none' as const } as React.CSSProperties\n }),\n []\n );\n\n const getColumnReorderIndicatorUpProps = React.useCallback(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'column-reorder-indicator-up',\n ref: (el: HTMLElement | null) => {\n indicatorUpRef.current = el;\n }\n }),\n []\n );\n\n const getColumnReorderIndicatorDownProps = React.useCallback(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'column-reorder-indicator-down',\n ref: (el: HTMLElement | null) => {\n indicatorDownRef.current = el;\n }\n }),\n []\n );\n\n const registerRoot = React.useCallback((el: HTMLElement | null) => {\n rootRef.current = el;\n }, []);\n\n const exposes = React.useMemo(\n () => ({\n onDragStart,\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n onDragEnd,\n registerDropTarget,\n getColumnReorderHandleProps,\n getColumnReorderIndicatorUpProps,\n getColumnReorderIndicatorDownProps\n }),\n [onDragStart, onDragOver, onDragEnter, onDragLeave, onDrop, onDragEnd, registerDropTarget, getColumnReorderHandleProps, getColumnReorderIndicatorUpProps, getColumnReorderIndicatorDownProps]\n );\n\n return {\n state: EMPTY_STATE,\n exposes,\n registerRoot\n };\n}\n","import type { ColumnResizeMode, UseDataTableColumnResizeEvent } from '@primereact/types/headless/datatable';\nimport * as React from 'react';\n\nconst EMPTY_STATE = Object.freeze({});\n\nexport interface UseDataTableColumnResizeOptions {\n resizableColumns?: boolean;\n columnResizeMode?: ColumnResizeMode;\n onColumnResizeEnd?: (event: UseDataTableColumnResizeEvent) => void;\n}\n\nconst MIN_COLUMN_WIDTH = 15;\n\ninterface DragState {\n columnIndex: number;\n pointerId: number;\n startClientX: number;\n containerLeft: number;\n initialScrollLeft: number;\n resizer: HTMLElement;\n headerCell: HTMLElement;\n nextHeaderCell: HTMLElement | null;\n headerCells: HTMLElement[];\n table: HTMLElement;\n tableContainer: HTMLElement;\n initialWidth: number;\n initialNextWidth: number;\n initialTableWidth: number;\n // Cached listener refs so we can removeEventListener the exact same function.\n onMove: (e: PointerEvent) => void;\n onEnd: (e: PointerEvent) => void;\n}\n\nexport function useDataTableColumnResize(options: UseDataTableColumnResizeOptions) {\n const { resizableColumns = false, columnResizeMode = 'fit' } = options;\n\n // Drag state in refs so pointermove doesn't re-render React.\n const dragRef = React.useRef<DragState | null>(null);\n\n // Indicator element is rendered by the styled layer and registered via registerIndicator.\n const indicatorRef = React.useRef<HTMLElement | null>(null);\n\n const registerIndicator = React.useCallback((el: HTMLElement | null) => {\n indicatorRef.current = el;\n }, []);\n\n const styleElementRef = React.useRef<HTMLStyleElement | null>(null);\n\n const writeWidthStylesheet = React.useCallback((table: HTMLElement, widths: number[]) => {\n if (typeof document === 'undefined') return;\n\n if (!styleElementRef.current) {\n const el = document.createElement('style');\n\n el.setAttribute('data-primereact-datatable-resize', '');\n document.head.appendChild(el);\n styleElementRef.current = el;\n }\n\n let tableId = table.getAttribute('data-resize-id');\n\n if (!tableId) {\n tableId = `dt-resize-${Math.random().toString(36).slice(2, 9)}`;\n table.setAttribute('data-resize-id', tableId);\n }\n\n const rules = widths\n .map((w, idx) => {\n const n = idx + 1;\n const selector = `table[data-resize-id=\"${tableId}\"]`;\n\n return `\n ${selector} > thead > tr > th:nth-child(${n}),\n ${selector} > tbody > tr > td:nth-child(${n}),\n ${selector} > tfoot > tr > td:nth-child(${n}) {\n width: ${w}px !important;\n max-width: ${w}px !important;\n }\n `;\n })\n .join('\\n');\n\n styleElementRef.current.innerHTML = rules;\n }, []);\n\n React.useEffect(() => {\n return () => {\n styleElementRef.current?.remove();\n styleElementRef.current = null;\n };\n }, []);\n\n // Live refs so listeners don't rebind on every render.\n const columnResizeModeRef = React.useRef(columnResizeMode);\n\n columnResizeModeRef.current = columnResizeMode;\n\n const onColumnResizeEndRef = React.useRef(options.onColumnResizeEnd);\n\n onColumnResizeEndRef.current = options.onColumnResizeEnd;\n\n const teardownDrag = React.useCallback(() => {\n const state = dragRef.current;\n\n if (!state) return;\n\n state.resizer.removeEventListener('pointermove', state.onMove);\n state.resizer.removeEventListener('pointerup', state.onEnd);\n state.resizer.removeEventListener('pointercancel', state.onEnd);\n\n if (state.resizer.hasPointerCapture(state.pointerId)) {\n state.resizer.releasePointerCapture(state.pointerId);\n }\n\n if (indicatorRef.current) {\n indicatorRef.current.style.display = 'none';\n indicatorRef.current.style.willChange = '';\n }\n\n document.body.style.removeProperty('cursor');\n document.body.style.removeProperty('user-select');\n\n dragRef.current = null;\n }, []);\n\n const applyFinalWidths = React.useCallback(\n (state: DragState, overrides: Record<number, number>, newTableWidth?: number) => {\n const widths = state.headerCells.map((cell, idx) => overrides[idx] ?? cell.offsetWidth);\n\n if (newTableWidth !== undefined) {\n state.table.style.width = `${newTableWidth}px`;\n state.table.style.minWidth = `${newTableWidth}px`;\n } else {\n const target = state.initialTableWidth;\n const sum = widths.reduce((s, w) => s + w, 0);\n const diff = target - sum;\n\n if (Math.abs(diff) > 0.01) {\n const fixIdx = widths.findIndex((_, idx) => overrides[idx] === undefined);\n\n if (fixIdx >= 0) widths[fixIdx] += diff;\n }\n }\n\n writeWidthStylesheet(state.table, widths);\n },\n [writeWidthStylesheet]\n );\n\n const onResizeStart = React.useCallback(\n (event: React.PointerEvent, columnIndex: number, headerCell: HTMLElement) => {\n if (!resizableColumns) return;\n\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n const table = headerCell.closest('table') as HTMLElement | null;\n\n if (!table) return;\n\n const tableContainer = (table.closest('[data-part=\"table-container\"]') as HTMLElement | null) ?? (table.parentElement as HTMLElement | null);\n\n if (!tableContainer) return;\n\n const resizer = event.currentTarget as HTMLElement;\n const headerCells = Array.from(table.querySelectorAll<HTMLElement>('thead th'));\n const nextHeaderCell = headerCells[columnIndex + 1] ?? null;\n\n const containerRect = tableContainer.getBoundingClientRect();\n const indicator = indicatorRef.current;\n\n // Indicator is optional; drag still works without it (no visual line).\n if (indicator) {\n const startLeft = event.clientX - containerRect.left + tableContainer.scrollLeft;\n\n indicator.style.top = '0px';\n indicator.style.left = '0px';\n indicator.style.height = `${tableContainer.clientHeight}px`;\n indicator.style.transform = `translateX(${startLeft}px)`;\n indicator.style.willChange = 'transform';\n indicator.style.display = 'block';\n }\n\n const onMove = (e: PointerEvent) => {\n const state = dragRef.current;\n\n if (!state || e.pointerId !== state.pointerId) return;\n\n const indicator = indicatorRef.current;\n\n if (!indicator) return;\n\n const leftInContainer = e.clientX - state.containerLeft + state.tableContainer.scrollLeft;\n\n indicator.style.transform = `translateX(${leftInContainer}px)`;\n };\n\n const onEnd = (e: PointerEvent) => {\n const state = dragRef.current;\n\n if (!state || e.pointerId !== state.pointerId) return;\n\n const delta = e.clientX - state.startClientX;\n const mode = columnResizeModeRef.current;\n const newWidth = state.initialWidth + delta;\n\n if (newWidth >= MIN_COLUMN_WIDTH) {\n if (mode === 'fit' && state.nextHeaderCell) {\n const maxDelta = state.initialNextWidth - MIN_COLUMN_WIDTH;\n const clampedDelta = Math.min(delta, maxDelta);\n const clampedNewWidth = state.initialWidth + clampedDelta;\n const clampedNextWidth = state.initialNextWidth - clampedDelta;\n\n if (clampedNewWidth >= MIN_COLUMN_WIDTH && clampedNextWidth >= MIN_COLUMN_WIDTH) {\n applyFinalWidths(state, {\n [state.columnIndex]: clampedNewWidth,\n [state.columnIndex + 1]: clampedNextWidth\n });\n\n onColumnResizeEndRef.current?.({\n originalEvent: e,\n columnIndex: state.columnIndex,\n delta: clampedDelta\n });\n }\n } else if (mode === 'expand') {\n const newTableWidth = state.initialTableWidth + delta;\n\n applyFinalWidths(state, { [state.columnIndex]: newWidth }, newTableWidth);\n\n onColumnResizeEndRef.current?.({\n originalEvent: e,\n columnIndex: state.columnIndex,\n delta\n });\n }\n }\n\n teardownDrag();\n };\n\n // Cache everything we need so drag handlers don't read the DOM.\n dragRef.current = {\n columnIndex,\n pointerId: event.pointerId,\n startClientX: event.clientX,\n containerLeft: containerRect.left,\n initialScrollLeft: tableContainer.scrollLeft,\n resizer,\n headerCell,\n nextHeaderCell,\n headerCells,\n table,\n tableContainer,\n initialWidth: headerCell.offsetWidth,\n initialNextWidth: nextHeaderCell?.offsetWidth ?? 0,\n initialTableWidth: columnResizeModeRef.current === 'fit' ? tableContainer.clientWidth : table.offsetWidth,\n onMove,\n onEnd\n };\n\n // Pointer capture keeps events on the resizer; no document listeners needed.\n resizer.setPointerCapture(event.pointerId);\n resizer.addEventListener('pointermove', onMove);\n resizer.addEventListener('pointerup', onEnd);\n resizer.addEventListener('pointercancel', onEnd);\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n },\n [resizableColumns, applyFinalWidths, teardownDrag]\n );\n\n React.useEffect(() => {\n return () => teardownDrag();\n }, [teardownDrag]);\n\n const getColumnResizerProps = React.useCallback(\n (columnIndex?: number) => {\n const handlePointerDown = (event: React.PointerEvent) => {\n const headerCell = (event.target as HTMLElement).closest('th') as (HTMLElement & { cellIndex: number }) | null;\n\n if (headerCell) {\n const idx = columnIndex ?? headerCell.cellIndex;\n\n onResizeStart(event, idx, headerCell);\n }\n };\n\n return {\n 'data-scope': 'datatable',\n 'data-part': 'column-resizer',\n style: { touchAction: 'none' } as React.CSSProperties,\n onPointerDown: handlePointerDown\n };\n },\n [onResizeStart]\n );\n\n const exposes = React.useMemo(\n () => ({\n onResizeStart,\n registerIndicator,\n getColumnResizerProps\n }),\n [onResizeStart, registerIndicator, getColumnResizerProps]\n );\n\n return {\n state: EMPTY_STATE,\n exposes\n };\n}\n","import type { UseDataTableCellEditEvent, DataTableEditMode, UseDataTableEditingEvent, UseDataTableRowEditEvent, EditingKeys } from '@primereact/types/headless/datatable';\nimport * as React from 'react';\n\nconst EMPTY_KEYS: EditingKeys = Object.freeze({});\n\nexport interface UseDataTableEditingOptions {\n editMode?: DataTableEditMode;\n editingKeys?: EditingKeys;\n defaultEditingKeys?: EditingKeys;\n onEditingKeysChange?: (event: UseDataTableEditingEvent) => void;\n onRowEditInit?: (event: UseDataTableRowEditEvent) => void;\n onRowEditSave?: (event: UseDataTableRowEditEvent) => void;\n onRowEditCancel?: (event: UseDataTableRowEditEvent) => void;\n onCellEditInit?: (event: { originalEvent: React.SyntheticEvent; field: string; rowIndex: number }) => void;\n onCellEditComplete?: (event: UseDataTableCellEditEvent) => void;\n onCellEditCancel?: (event: UseDataTableCellEditEvent) => void;\n}\n\nexport function useDataTableEditing(options: UseDataTableEditingOptions) {\n const { editMode } = options;\n\n const isControlled = options.editingKeys !== undefined;\n\n const [internalEditingKeys, setInternalEditingKeys] = React.useState<EditingKeys>(() => {\n return options.editingKeys ?? options.defaultEditingKeys ?? EMPTY_KEYS;\n });\n\n const editingKeys = isControlled ? (options.editingKeys ?? EMPTY_KEYS) : internalEditingKeys;\n\n React.useEffect(() => {\n if (isControlled) {\n setInternalEditingKeys(options.editingKeys ?? EMPTY_KEYS);\n }\n }, [isControlled, options.editingKeys]);\n\n // rowKey keeps the editor pinned when flat row order shifts (tree expand/collapse).\n const [editingCell, setEditingCell] = React.useState<{ rowIndex: number; field: string; rowKey?: string | number } | null>(null);\n\n // Row data snapshots keyed by row id, used to restore values on cancel.\n const editingMetaRef = React.useRef<Record<string, Record<string, unknown>>>({});\n\n const isEditing = React.useCallback(\n (key: string | number): boolean => {\n return editingKeys[String(key)] === true;\n },\n [editingKeys]\n );\n\n const startRowEdit = React.useCallback(\n (event: React.SyntheticEvent, key: string | number, rowData?: Record<string, unknown>, rowIndex?: number) => {\n if (editMode !== 'row') return;\n\n const stringKey = String(key);\n const newEditingKeys: EditingKeys = { ...editingKeys, [stringKey]: true };\n\n if (rowData) {\n editingMetaRef.current[stringKey] = { ...rowData };\n }\n\n if (!isControlled) {\n setInternalEditingKeys(newEditingKeys);\n }\n\n options.onEditingKeysChange?.({\n originalEvent: event,\n value: newEditingKeys\n });\n\n options.onRowEditInit?.({\n originalEvent: event,\n data: rowData ?? {},\n index: rowIndex ?? -1\n });\n },\n [editMode, editingKeys, isControlled, options.onEditingKeysChange, options.onRowEditInit]\n );\n\n const saveRowEdit = React.useCallback(\n (event: React.SyntheticEvent, key: string | number, rowData?: Record<string, unknown>, newData?: Record<string, unknown>, rowIndex?: number) => {\n if (editMode !== 'row') return;\n\n const stringKey = String(key);\n const newEditingKeys: EditingKeys = { ...editingKeys };\n\n delete newEditingKeys[stringKey];\n delete editingMetaRef.current[stringKey];\n\n if (!isControlled) {\n setInternalEditingKeys(newEditingKeys);\n }\n\n options.onEditingKeysChange?.({\n originalEvent: event,\n value: newEditingKeys\n });\n\n options.onRowEditSave?.({\n originalEvent: event,\n data: rowData ?? {},\n newData,\n index: rowIndex ?? -1\n });\n },\n [editMode, editingKeys, isControlled, options.onEditingKeysChange, options.onRowEditSave]\n );\n\n const cancelRowEdit = React.useCallback(\n (event: React.SyntheticEvent, key: string | number, rowData?: Record<string, unknown>, rowIndex?: number) => {\n if (editMode !== 'row') return;\n\n const stringKey = String(key);\n const newEditingKeys: EditingKeys = { ...editingKeys };\n\n delete newEditingKeys[stringKey];\n\n const originalData = editingMetaRef.current[stringKey];\n\n delete editingMetaRef.current[stringKey];\n\n if (!isControlled) {\n setInternalEditingKeys(newEditingKeys);\n }\n\n options.onEditingKeysChange?.({\n originalEvent: event,\n value: newEditingKeys\n });\n\n options.onRowEditCancel?.({\n originalEvent: event,\n data: originalData ?? rowData ?? {},\n index: rowIndex ?? -1\n });\n },\n [editMode, editingKeys, isControlled, options.onEditingKeysChange, options.onRowEditCancel]\n );\n\n const isCellEditing = React.useCallback(\n (rowIndex: number, field: string, rowKey?: string | number): boolean => {\n if (editMode !== 'cell' || !editingCell) return false;\n\n if (editingCell.field !== field) return false;\n\n // rowKey match survives flat-order shifts; fall back to index otherwise.\n if (rowKey !== undefined && editingCell.rowKey !== undefined) {\n return String(editingCell.rowKey) === String(rowKey);\n }\n\n return editingCell.rowIndex === rowIndex;\n },\n [editMode, editingCell]\n );\n\n const startCellEdit = React.useCallback(\n (event: React.SyntheticEvent, rowIndex: number, field: string, rowKey?: string | number) => {\n if (editMode !== 'cell') return;\n\n setEditingCell({ rowIndex, field, rowKey });\n options.onCellEditInit?.({ originalEvent: event, field, rowIndex });\n },\n [editMode, options.onCellEditInit]\n );\n\n const completeCellEdit = React.useCallback(\n (event: UseDataTableCellEditEvent): boolean => {\n if (editMode !== 'cell') return false;\n\n let prevented = false;\n const editEvent: UseDataTableCellEditEvent = {\n ...event,\n preventDefault: () => {\n prevented = true;\n }\n };\n\n options.onCellEditComplete?.(editEvent);\n\n if (!prevented) {\n setEditingCell(null);\n }\n\n return !prevented;\n },\n [editMode, options.onCellEditComplete]\n );\n\n const cancelCellEdit = React.useCallback(\n (event: React.SyntheticEvent, rowIndex: number, field: string) => {\n if (editMode !== 'cell') return;\n\n options.onCellEditCancel?.({\n originalEvent: event,\n rowData: {},\n newRowData: {},\n field,\n value: undefined,\n newValue: undefined,\n rowIndex,\n type: 'escape',\n preventDefault: () => {}\n });\n\n setEditingCell(null);\n },\n [editMode, options.onCellEditCancel]\n );\n\n const getCellEditorRootProps = React.useCallback(\n (params: { rowIndex: number; field: string; rowKey?: string | number; isEditing: boolean }) => ({\n 'data-scope': 'datatable',\n 'data-part': 'cell-editor',\n 'data-row-index': String(params.rowIndex),\n 'data-field': params.field,\n ...(params.rowKey !== undefined ? { 'data-row-key': String(params.rowKey) } : undefined),\n ...(params.isEditing ? { 'data-editing': '' } : undefined)\n }),\n []\n );\n\n const getRowEditorInitProps = React.useCallback(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'row-editor-init',\n type: 'button' as const,\n 'aria-label': 'Edit row'\n }),\n []\n );\n\n const getRowEditorSaveProps = React.useCallback(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'row-editor-save',\n type: 'button' as const,\n 'aria-label': 'Save row'\n }),\n []\n );\n\n const getRowEditorCancelProps = React.useCallback(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'row-editor-cancel',\n type: 'button' as const,\n 'aria-label': 'Cancel edit'\n }),\n []\n );\n\n // Exposes\n const exposes = React.useMemo(\n () => ({\n isEditing,\n startRowEdit,\n saveRowEdit,\n cancelRowEdit,\n startCellEdit,\n completeCellEdit,\n cancelCellEdit,\n isCellEditing,\n getCellEditorRootProps,\n getRowEditorInitProps,\n getRowEditorSaveProps,\n getRowEditorCancelProps\n }),\n [isEditing, startRowEdit, saveRowEdit, cancelRowEdit, startCellEdit, completeCellEdit, cancelCellEdit, isCellEditing, getCellEditorRootProps, getRowEditorInitProps, getRowEditorSaveProps, getRowEditorCancelProps]\n );\n\n const state = React.useMemo(() => ({ editingKeys, editingCell }), [editingKeys, editingCell]);\n\n return { state, exposes };\n}\n","import type { UseDataTableExpansionEvent, ExpandedKeys } from '@primereact/types/headless/datatable';\nimport * as React from 'react';\n\nconst EMPTY_KEYS: ExpandedKeys = Object.freeze({});\n\nexport interface UseDataTableExpansionOptions {\n expandedKeys?: ExpandedKeys;\n defaultExpandedKeys?: ExpandedKeys;\n onExpandedChange?: (event: UseDataTableExpansionEvent) => void;\n}\n\nexport function useDataTableExpansion(options: UseDataTableExpansionOptions) {\n // Controlled vs uncontrolled\n const isControlled = options.expandedKeys !== undefined;\n\n const [internalExpandedKeys, setInternalExpandedKeys] = React.useState<ExpandedKeys>(() => {\n return options.expandedKeys ?? options.defaultExpandedKeys ?? {};\n });\n\n const expandedKeys = isControlled ? (options.expandedKeys ?? EMPTY_KEYS) : internalExpandedKeys;\n\n // Sync internal state when controlled value changes\n React.useEffect(() => {\n if (isControlled) {\n setInternalExpandedKeys(options.expandedKeys ?? EMPTY_KEYS);\n }\n }, [isControlled, options.expandedKeys]);\n\n // Methods\n const isExpanded = React.useCallback(\n (key: string | number): boolean => {\n return expandedKeys[String(key)] === true;\n },\n [expandedKeys]\n );\n\n const toggleExpansion = React.useCallback(\n (event: React.SyntheticEvent, key: string | number) => {\n const stringKey = String(key);\n const newExpandedKeys: ExpandedKeys = { ...expandedKeys };\n\n if (newExpandedKeys[stringKey]) {\n delete newExpandedKeys[stringKey];\n } else {\n newExpandedKeys[stringKey] = true;\n }\n\n if (!isControlled) {\n setInternalExpandedKeys(newExpandedKeys);\n }\n\n options.onExpandedChange?.({\n originalEvent: event,\n value: newExpandedKeys\n });\n },\n [expandedKeys, isControlled, options.onExpandedChange]\n );\n\n const getRowToggleProps = React.useCallback(\n (rowKey: string | number | undefined, item?: Record<string, unknown> | null) => {\n const expanded = rowKey !== undefined ? isExpanded(rowKey) : false;\n const isTreeMode = item?._treeLevel !== undefined;\n const treeLevel = (item?._treeLevel as number | undefined) ?? 0;\n const hasChildren = (item?._treeHasChildren as boolean | undefined) ?? false;\n\n const onClick = (event: React.MouseEvent) => {\n if (rowKey !== undefined) toggleExpansion(event, rowKey);\n };\n\n if (isTreeMode && !hasChildren) {\n return {\n isSpacer: true as const,\n spacerProps: {\n 'data-scope': 'datatable',\n 'data-part': 'row-toggle-spacer',\n 'data-tree-level': treeLevel,\n style: {\n display: 'inline-block',\n marginInlineStart: `calc(var(--p-datatable-indent, 1rem) * ${treeLevel})`,\n width: 'var(--p-datatable-toggle-size, 2rem)',\n flexShrink: 0\n } as React.CSSProperties\n }\n };\n }\n\n const rootProps: Record<string, unknown> = {\n 'data-scope': 'datatable',\n 'data-part': 'row-toggle',\n type: 'button' as const,\n 'aria-expanded': expanded,\n 'aria-label': expanded ? 'Collapse row' : 'Expand row',\n onClick\n };\n\n if (isTreeMode) {\n rootProps['data-tree-level'] = treeLevel;\n rootProps.style = {\n marginInlineStart: `calc(var(--p-datatable-indent, 1rem) * ${treeLevel})`,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0\n } as React.CSSProperties;\n }\n\n return { isSpacer: false as const, rootProps, isExpanded: expanded };\n },\n [isExpanded, toggleExpansion]\n );\n\n // Exposes\n const exposes = React.useMemo(\n () => ({\n isExpanded,\n toggleExpansion,\n getRowToggleProps\n }),\n [isExpanded, toggleExpansion, getRowToggleProps]\n );\n\n const state = React.useMemo(() => ({ expandedKeys }), [expandedKeys]);\n\n return { state, exposes };\n}\n","import { resolveFieldData } from '@primeuix/utils';\nimport * as React from 'react';\n\nconst EMPTY_STATE = Object.freeze({});\n\nexport interface DataTableExportOptions {\n /**\n * Only export selected rows.\n */\n selectionOnly?: boolean;\n /**\n * Fields to export. If not provided, all fields from first row are used.\n */\n fields?: string[];\n /**\n * Column headers for export (maps field → header label).\n */\n headers?: Record<string, string>;\n /**\n * CSV separator character.\n * @default ','\n */\n separator?: string;\n /**\n * File name for download (without extension).\n * @default 'download'\n */\n fileName?: string;\n /**\n * Custom export function. When provided, it is called instead of the default CSV download.\n * Receives the resolved data array and fields list.\n */\n exportFunction?: (options: { data: Record<string, unknown>[]; fields: string[] }) => void;\n}\n\nexport interface UseDataTableExportOptions {\n data?: Record<string, unknown>[];\n dataKey?: string | null;\n selectedKeys?: Record<string, boolean>;\n}\n\nexport function useDataTableExport(options: UseDataTableExportOptions) {\n const exportCSV = React.useCallback(\n (exportOptions?: DataTableExportOptions) => {\n if (typeof document === 'undefined') return;\n\n const data = options.data ?? [];\n const separator = exportOptions?.separator ?? ',';\n const fileName = exportOptions?.fileName ?? 'download';\n\n let rows = data;\n\n // Filter to selected rows only\n if (exportOptions?.selectionOnly && options.selectedKeys && options.dataKey) {\n rows = data.filter((item) => {\n const key = String(item[options.dataKey!]);\n\n return options.selectedKeys![key];\n });\n }\n\n if (rows.length === 0) return;\n\n // Determine fields\n const fields = exportOptions?.fields ?? Object.keys(rows[0]);\n\n // Custom export function\n if (exportOptions?.exportFunction) {\n exportOptions.exportFunction({ data: rows, fields });\n\n return;\n }\n\n const headers = exportOptions?.headers;\n\n // Build CSV\n const csvLines: string[] = [];\n\n // Header line\n const headerLine = fields.map((field) => {\n const label = headers?.[field] ?? field;\n\n return `\"${String(label).replace(/\"/g, '\"\"')}\"`;\n });\n\n csvLines.push(headerLine.join(separator));\n\n // Data lines\n for (const row of rows) {\n const line = fields.map((field) => {\n const value = resolveFieldData(row, field);\n let str = value != null ? String(value) : '';\n\n // Prevent CSV injection\n if (str.length > 0 && /^[=+\\-@\\t\\r]/.test(str)) {\n str = `\\t${str}`;\n }\n\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n });\n\n csvLines.push(line.join(separator));\n }\n\n const csvContent = csvLines.join('\\n');\n\n // Browser-only; bail out under SSR.\n if (typeof document === 'undefined' || typeof URL === 'undefined' || typeof Blob === 'undefined') {\n return;\n }\n\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', `${fileName}.csv`);\n link.style.display = 'none';\n document.body.appendChild(link);\n\n try {\n link.click();\n } finally {\n // Guard removeChild in case the element was already detached (e.g. by a test harness).\n if (link.parentNode === document.body) document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n },\n [options.data, options.dataKey, options.selectedKeys]\n );\n\n const exposes = React.useMemo(\n () => ({\n exportCSV\n }),\n [exportCSV]\n );\n\n return {\n state: EMPTY_STATE,\n exposes\n };\n}\n","import { useFilter, type FilterRule } from '@primereact/hooks/use-filter';\nimport * as React from 'react';\n\n/**\n * Filter match mode types supported by DataTable.\n */\nexport const FilterMatchMode = {\n Contains: 'contains',\n NotContains: 'notContains',\n StartsWith: 'startsWith',\n EndsWith: 'endsWith',\n Equals: 'equals',\n NotEquals: 'notEquals',\n In: 'in',\n Between: 'between',\n Lt: 'lt',\n Lte: 'lte',\n Gt: 'gt',\n Gte: 'gte',\n DateIs: 'dateIs',\n DateIsNot: 'dateIsNot',\n DateBefore: 'dateBefore',\n DateAfter: 'dateAfter',\n Custom: 'custom'\n} as const;\n\nexport type FilterMatchMode = (typeof FilterMatchMode)[keyof typeof FilterMatchMode];\n\n/**\n * Filter operator types.\n */\nexport const FilterOperator = {\n And: 'and',\n Or: 'or'\n} as const;\n\nexport type FilterOperator = (typeof FilterOperator)[keyof typeof FilterOperator];\n\n/**\n * Defines filter metadata for a single column constraint.\n */\nexport interface FilterConstraint {\n value: unknown;\n matchMode: FilterMatchMode;\n}\n\n/**\n * Defines filter metadata for a column (single or multiple constraints).\n */\nexport interface ColumnFilterMeta {\n value?: unknown;\n matchMode?: FilterMatchMode;\n constraints?: FilterConstraint[];\n operator?: 'and' | 'or';\n}\n\n/**\n * Defines the complete filter metadata map.\n */\nexport type DataTableFilterMeta = Record<string, ColumnFilterMeta | unknown>;\n\n/**\n * Event fired when filters change.\n */\nexport interface UseDataTableFilterEvent {\n originalEvent: React.SyntheticEvent;\n filters: DataTableFilterMeta;\n}\n\nexport interface UseDataTableFilterOptions {\n data?: Record<string, unknown>[];\n lazy?: boolean;\n filters?: DataTableFilterMeta;\n defaultFilters?: DataTableFilterMeta;\n globalFilter?: string | null;\n globalFilterFields?: string[];\n filterDelay?: number;\n onFilter?: (event: UseDataTableFilterEvent) => void;\n}\n\nconst EMPTY_FILTERS: DataTableFilterMeta = Object.freeze({});\n\nexport function useDataTableFilter(options: UseDataTableFilterOptions) {\n const { data = [], lazy = false, globalFilterFields = [] } = options;\n\n const isControlled = options.filters !== undefined;\n const [internalFilters, setInternalFilters] = React.useState<DataTableFilterMeta>(options.defaultFilters ?? EMPTY_FILTERS);\n const currentFilters = isControlled ? (options.filters ?? EMPTY_FILTERS) : internalFilters;\n\n React.useEffect(() => {\n if (isControlled && options.filters) {\n setInternalFilters(options.filters);\n }\n }, [isControlled, options.filters]);\n\n const globalFilter = options.globalFilter ?? null;\n const filterDelay = options.filterDelay ?? 0;\n\n const [debouncedFilters, setDebouncedFilters] = React.useState<DataTableFilterMeta>(currentFilters);\n const [debouncedGlobalFilter, setDebouncedGlobalFilter] = React.useState<string | null>(globalFilter);\n\n React.useEffect(() => {\n if (filterDelay <= 0) {\n setDebouncedFilters(currentFilters);\n setDebouncedGlobalFilter(globalFilter);\n\n return;\n }\n\n const timeoutId = setTimeout(() => {\n setDebouncedFilters(currentFilters);\n setDebouncedGlobalFilter(globalFilter);\n }, filterDelay);\n\n return () => clearTimeout(timeoutId);\n }, [currentFilters, globalFilter, filterDelay]);\n\n const activeFilters = filterDelay > 0 ? debouncedFilters : currentFilters;\n const activeGlobalFilter = filterDelay > 0 ? debouncedGlobalFilter : globalFilter;\n\n const updateFilters = React.useCallback(\n (event: React.SyntheticEvent, newFilters: DataTableFilterMeta) => {\n if (!isControlled) {\n setInternalFilters(newFilters);\n }\n\n options.onFilter?.({ originalEvent: event, filters: newFilters });\n },\n [isControlled, options.onFilter]\n );\n\n const setFieldFilter = React.useCallback(\n (event: React.SyntheticEvent, field: string, meta: ColumnFilterMeta) => {\n const newFilters = { ...currentFilters, [field]: meta };\n\n updateFilters(event, newFilters);\n },\n [currentFilters, updateFilters]\n );\n\n const clearFieldFilter = React.useCallback(\n (event: React.SyntheticEvent, field: string) => {\n const existing = currentFilters[field];\n const newFilters = { ...currentFilters };\n\n if (existing && typeof existing === 'object' && existing !== null && 'constraints' in existing) {\n // Reset to single empty constraint, keeping operator\n const meta = existing as ColumnFilterMeta;\n\n newFilters[field] = {\n operator: meta.operator ?? 'and',\n constraints: [{ value: null, matchMode: (meta.constraints?.[0]?.matchMode ?? 'contains') as FilterMatchMode }]\n };\n } else if (existing && typeof existing === 'object' && existing !== null && 'matchMode' in existing) {\n // Reset value but keep matchMode\n newFilters[field] = { value: null, matchMode: (existing as ColumnFilterMeta).matchMode };\n } else {\n delete newFilters[field];\n }\n\n updateFilters(event, newFilters);\n },\n [currentFilters, updateFilters]\n );\n\n const clearAllFilters = React.useCallback(\n (event: React.SyntheticEvent) => {\n updateFilters(event, {});\n },\n [updateFilters]\n );\n\n const addConstraint = React.useCallback(\n (event: React.SyntheticEvent, field: string, defaultMatchMode: FilterMatchMode = 'contains') => {\n const existing = currentFilters[field];\n const newFilters = { ...currentFilters };\n\n if (existing && typeof existing === 'object' && existing !== null && 'constraints' in existing) {\n const meta = existing as ColumnFilterMeta;\n const newConstraints = [...(meta.constraints ?? []), { value: null, matchMode: defaultMatchMode }];\n\n newFilters[field] = { ...meta, constraints: newConstraints };\n } else {\n // Convert simple filter to constraint-based\n const currentValue = existing && typeof existing === 'object' && 'value' in existing ? (existing as ColumnFilterMeta).value : null;\n const currentMode = existing && typeof existing === 'object' && 'matchMode' in existing ? ((existing as ColumnFilterMeta).matchMode ?? 'contains') : 'contains';\n\n newFilters[field] = {\n operator: 'and',\n constraints: [\n { value: currentValue, matchMode: currentMode as FilterMatchMode },\n { value: null, matchMode: defaultMatchMode }\n ]\n };\n }\n\n updateFilters(event, newFilters);\n },\n [currentFilters, updateFilters]\n );\n\n const removeConstraint = React.useCallback(\n (event: React.SyntheticEvent, field: string, index: number) => {\n const existing = currentFilters[field];\n\n if (!existing || typeof existing !== 'object' || !('constraints' in existing)) return;\n\n const meta = existing as ColumnFilterMeta;\n const newConstraints = (meta.constraints ?? []).filter((_, i) => i !== index);\n\n if (newConstraints.length === 0) return; // Don't remove last constraint\n\n const newFilters = { ...currentFilters, [field]: { ...meta, constraints: newConstraints } };\n\n updateFilters(event, newFilters);\n },\n [currentFilters, updateFilters]\n );\n\n const setOperator = React.useCallback(\n (event: React.SyntheticEvent, field: string, operator: 'and' | 'or') => {\n const existing = currentFilters[field];\n const newFilters = { ...currentFilters };\n\n if (existing && typeof existing === 'object' && existing !== null && 'constraints' in existing) {\n newFilters[field] = { ...(existing as ColumnFilterMeta), operator };\n } else {\n // Convert simple filter to constraint-based with the operator\n const currentValue = existing && typeof existing === 'object' && 'value' in existing ? (existing as ColumnFilterMeta).value : null;\n const currentMode = existing && typeof existing === 'object' && 'matchMode' in existing ? ((existing as ColumnFilterMeta).matchMode ?? 'contains') : 'contains';\n\n newFilters[field] = {\n operator,\n constraints: [{ value: currentValue, matchMode: currentMode as FilterMatchMode }]\n };\n }\n\n updateFilters(event, newFilters);\n },\n [currentFilters, updateFilters]\n );\n\n const setConstraintValue = React.useCallback(\n (event: React.SyntheticEvent, field: string, index: number, value: unknown, matchMode?: FilterMatchMode) => {\n const existing = currentFilters[field];\n\n if (!existing || typeof existing !== 'object' || !('constraints' in existing)) return;\n\n const meta = existing as ColumnFilterMeta;\n const newConstraints = [...(meta.constraints ?? [])];\n\n if (index >= 0 && index < newConstraints.length) {\n newConstraints[index] = {\n value,\n matchMode: (matchMode ?? newConstraints[index].matchMode) as FilterMatchMode\n };\n }\n\n const newFilters = { ...currentFilters, [field]: { ...meta, constraints: newConstraints } };\n\n updateFilters(event, newFilters);\n },\n [currentFilters, updateFilters]\n );\n\n const setConstraintMatchMode = React.useCallback(\n (event: React.SyntheticEvent, field: string, index: number, matchMode: FilterMatchMode) => {\n const existing = currentFilters[field];\n\n if (!existing || typeof existing !== 'object' || !('constraints' in existing)) return;\n\n const meta = existing as ColumnFilterMeta;\n const newConstraints = [...(meta.constraints ?? [])];\n\n if (index >= 0 && index < newConstraints.length) {\n newConstraints[index] = { ...newConstraints[index], matchMode };\n }\n\n const newFilters = { ...currentFilters, [field]: { ...meta, constraints: newConstraints } };\n\n updateFilters(event, newFilters);\n },\n [currentFilters, updateFilters]\n );\n\n const hasFilterValue = React.useCallback(\n (field: string): boolean => {\n const meta = currentFilters[field];\n\n if (!meta) return false;\n\n if (typeof meta === 'object' && meta !== null && 'constraints' in meta) {\n const constraints = (meta as ColumnFilterMeta).constraints ?? [];\n\n return constraints.some((c) => c.value !== null && c.value !== undefined && c.value !== '');\n }\n\n if (typeof meta === 'object' && meta !== null && 'value' in meta) {\n return (meta as ColumnFilterMeta).value !== null && (meta as ColumnFilterMeta).value !== undefined && (meta as ColumnFilterMeta).value !== '';\n }\n\n return meta !== null && meta !== undefined && meta !== '';\n },\n [currentFilters]\n );\n\n const isFiltered = React.useCallback((): boolean => {\n if (globalFilter) return true;\n\n return Object.keys(currentFilters).some((field) => hasFilterValue(field));\n }, [currentFilters, globalFilter, hasFilterValue]);\n\n const getFieldFilterMeta = React.useCallback(\n (field: string): ColumnFilterMeta => {\n const meta = currentFilters[field];\n\n if (!meta) return { value: null, matchMode: 'contains' as FilterMatchMode };\n\n if (typeof meta === 'object' && meta !== null) {\n return meta as ColumnFilterMeta;\n }\n\n return { value: meta, matchMode: 'contains' as FilterMatchMode };\n },\n [currentFilters]\n );\n\n // Build rules from the DataTable map + optional global filter.\n const rules = React.useMemo<FilterRule<string>[]>(() => {\n const list: FilterRule<string>[] = [];\n\n for (const field of Object.keys(activeFilters)) {\n if (field === 'global') continue;\n\n const meta = activeFilters[field];\n\n if (!meta) continue;\n\n if (typeof meta === 'object' && meta !== null) {\n const columnMeta = meta as ColumnFilterMeta;\n\n if (columnMeta.constraints && columnMeta.constraints.length > 0) {\n list.push({\n field,\n operator: columnMeta.operator ?? 'and',\n constraints: columnMeta.constraints.map((c) => ({ value: c.value, matchMode: c.matchMode ?? 'contains' }))\n });\n continue;\n }\n\n if ('value' in columnMeta || 'matchMode' in columnMeta) {\n list.push({ field, value: columnMeta.value, matchMode: columnMeta.matchMode ?? 'contains' });\n continue;\n }\n }\n\n list.push({ field, value: meta, matchMode: 'contains' });\n }\n\n if (activeGlobalFilter && globalFilterFields.length > 0) {\n list.push({ field: globalFilterFields, value: activeGlobalFilter, matchMode: 'contains' });\n }\n\n return list;\n }, [activeFilters, activeGlobalFilter, globalFilterFields]);\n\n const filterResult = useFilter<Record<string, unknown>, string>({\n data,\n rules,\n lazy\n });\n\n const filteredData = filterResult.filteredData;\n\n const state = React.useMemo(() => ({ filters: currentFilters, globalFilter }), [currentFilters, globalFilter]);\n\n const getFilterRootProps = React.useCallback(\n (field: string, display: 'row' | 'menu' = 'row') => ({\n 'data-scope': 'datatable',\n 'data-part': 'filter',\n 'data-display': display,\n ...(hasFilterValue(field) ? { 'data-active': '' } : undefined)\n }),\n [hasFilterValue]\n );\n\n const exposes = React.useMemo(\n () => ({\n setFieldFilter,\n clearFieldFilter,\n clearAllFilters,\n addConstraint,\n removeConstraint,\n setOperator,\n setConstraintValue,\n setConstraintMatchMode,\n hasFilterValue,\n isFiltered,\n getFieldFilterMeta,\n getFilterRootProps\n }),\n [setFieldFilter, clearFieldFilter, clearAllFilters, addConstraint, removeConstraint, setOperator, setConstraintValue, setConstraintMatchMode, hasFilterValue, isFiltered, getFieldFilterMeta, getFilterRootProps]\n );\n\n return {\n filteredData,\n state,\n exposes\n };\n}\n","import type { RowGroupMeta } from '@primereact/types/headless/datatable';\nimport { resolveFieldData } from '@primeuix/utils';\nimport * as React from 'react';\n\nexport interface UseDataTableGroupingOptions {\n data: Record<string, unknown>[];\n groupField?: string;\n}\n\nexport function useDataTableGrouping(options: UseDataTableGroupingOptions) {\n const { data, groupField } = options;\n\n const groupMetaMap = React.useMemo(() => {\n if (!groupField) return undefined;\n\n const map = new Map<number, RowGroupMeta>();\n\n if (data.length === 0) return map;\n\n // Two-pass O(n): first pass collects group ranges, second pass fills metadata\n const groups: { start: number; end: number; value: unknown }[] = [];\n let currentGroupValue: unknown = undefined;\n let groupStart = 0;\n\n // Pass 1: identify group boundaries\n for (let i = 0; i < data.length; i++) {\n const rowGroupValue = resolveFieldData(data[i], groupField);\n\n if (i === 0) {\n currentGroupValue = rowGroupValue;\n groupStart = 0;\n } else if (rowGroupValue !== currentGroupValue) {\n groups.push({ start: groupStart, end: i - 1, value: currentGroupValue });\n currentGroupValue = rowGroupValue;\n groupStart = i;\n }\n }\n\n groups.push({ start: groupStart, end: data.length - 1, value: currentGroupValue });\n\n // Pass 2: fill map with complete metadata (O(n) total)\n for (let g = 0; g < groups.length; g++) {\n const group = groups[g];\n const groupCount = group.end - group.start + 1;\n\n for (let i = group.start; i <= group.end; i++) {\n map.set(i, {\n isGroupStart: i === group.start,\n isGroupEnd: i === group.end,\n groupValue: group.value,\n groupCount,\n groupIndex: g\n });\n }\n }\n\n return map;\n }, [data, groupField]);\n\n const exposes = React.useMemo(() => ({}), []);\n\n const state = React.useMemo(() => ({ groupMetaMap }), [groupMetaMap]);\n\n return { state, exposes };\n}\n","import type { UseDataTablePageEvent } from '@primereact/types/headless/datatable';\nimport * as React from 'react';\n\nexport interface UseDataTablePaginationOptions {\n data: Record<string, unknown>[];\n lazy?: boolean;\n totalRecords?: number;\n paginator?: boolean;\n page?: number;\n defaultPage?: number;\n rows?: number;\n defaultRows?: number;\n onPageChange?: (event: UseDataTablePageEvent) => void;\n}\n\nexport function useDataTablePagination(options: UseDataTablePaginationOptions) {\n const { data, lazy, paginator } = options;\n\n // Controlled vs uncontrolled\n const isControlledPage = options.page !== undefined;\n const isControlledRows = options.rows !== undefined;\n\n const [internalPage, setInternalPage] = React.useState<number>(options.defaultPage ?? 0);\n const [internalRows, setInternalRows] = React.useState<number>(options.defaultRows ?? 10);\n\n const currentPage = isControlledPage ? (options.page ?? 0) : internalPage;\n const currentRows = isControlledRows ? (options.rows ?? 10) : internalRows;\n\n // Compute pagination values\n const totalRecords = lazy ? (options.totalRecords ?? 0) : data.length;\n const pageCount = Math.max(1, Math.ceil(totalRecords / currentRows));\n const first = currentPage * currentRows;\n\n // Clamp page if it exceeds pageCount\n React.useEffect(() => {\n if (!isControlledPage && currentPage >= pageCount && pageCount > 0) {\n setInternalPage(pageCount - 1);\n }\n }, [pageCount, currentPage, isControlledPage]);\n\n // Paginated data for non-lazy mode\n const paginatedData = React.useMemo(() => {\n if (!paginator || lazy) return data;\n\n return data.slice(first, first + currentRows);\n }, [data, paginator, lazy, first, currentRows]);\n\n // Methods\n const onPageChange = React.useCallback(\n (event: React.SyntheticEvent, newPage: number) => {\n if (newPage < 0 || newPage >= pageCount) return;\n\n if (!isControlledPage) {\n setInternalPage(newPage);\n }\n\n const newFirst = newPage * currentRows;\n\n options.onPageChange?.({\n originalEvent: event,\n page: newPage,\n rows: currentRows,\n first: newFirst,\n pageCount\n });\n },\n [pageCount, currentRows, isControlledPage, options.onPageChange]\n );\n\n const onRowsChange = React.useCallback(\n (event: React.SyntheticEvent, newRows: number) => {\n if (newRows <= 0) return;\n\n if (!isControlledRows) {\n setInternalRows(newRows);\n }\n\n if (!isControlledPage) {\n setInternalPage(0);\n }\n\n const newPageCount = Math.max(1, Math.ceil(totalRecords / newRows));\n\n options.onPageChange?.({\n originalEvent: event,\n page: 0,\n rows: newRows,\n first: 0,\n pageCount: newPageCount\n });\n },\n [totalRecords, isControlledRows, isControlledPage, options.onPageChange]\n );\n\n // Exposes\n const exposes = React.useMemo(\n () => ({\n page: currentPage,\n rows: currentRows,\n first,\n pageCount,\n totalRecords,\n onPageChange,\n onRowsChange\n }),\n [currentPage, currentRows, first, pageCount, totalRecords, onPageChange, onRowsChange]\n );\n\n const state = React.useMemo(() => ({ page: currentPage, rows: currentRows, first, pageCount, totalRecords }), [currentPage, currentRows, first, pageCount, totalRecords]);\n\n return { paginatedData, state, exposes };\n}\n","import * as React from 'react';\n\nconst EMPTY_STATE = Object.freeze({});\n\nexport interface UseDataTableRowReorderEvent {\n /**\n * The original browser event.\n */\n originalEvent: DragEvent;\n /**\n * Index of the row being dragged (within the current page / processed slice).\n */\n dragIndex: number;\n /**\n * Adjusted index where the row is dropped.\n */\n dropIndex: number;\n /**\n * The reordered data array.\n */\n value: Record<string, unknown>[];\n}\n\nexport interface UseDataTableRowReorderOptions {\n data?: Record<string, unknown>[];\n reorderableRows?: boolean;\n onRowReorder?: (event: UseDataTableRowReorderEvent) => void;\n}\n\nconst DRAGPOINT_TOP = 'data-dragpoint-top';\nconst DRAGPOINT_BOTTOM = 'data-dragpoint-bottom';\n\nfunction clearDragpoint(row: HTMLElement | null | undefined) {\n if (!row) return;\n row.removeAttribute(DRAGPOINT_TOP);\n row.removeAttribute(DRAGPOINT_BOTTOM);\n}\n\nexport function useDataTableRowReorder(options: UseDataTableRowReorderOptions) {\n const { reorderableRows = false } = options;\n\n const dragRowIndex = React.useRef<number>(-1);\n // Final insertion index (already adjusted for above/below).\n const droppedRowIndex = React.useRef<number>(-1);\n // Drop indicator is rendered on the hovered row itself; works under virtual scrolling.\n const lastMarkedRow = React.useRef<HTMLElement | null>(null);\n\n const onDragStart = React.useCallback(\n (event: React.DragEvent, rowIndex: number) => {\n if (!reorderableRows) return;\n\n dragRowIndex.current = rowIndex;\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', String(rowIndex));\n },\n [reorderableRows]\n );\n\n const onDragOver = React.useCallback(\n (event: React.DragEvent, rowIndex: number) => {\n if (!reorderableRows || dragRowIndex.current === -1) return;\n if (dragRowIndex.current === rowIndex) return;\n\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n\n const rowElement = event.currentTarget as HTMLElement;\n const rect = rowElement.getBoundingClientRect();\n const midY = rect.top + rect.height / 2;\n\n if (lastMarkedRow.current && lastMarkedRow.current !== rowElement) {\n clearDragpoint(lastMarkedRow.current);\n }\n\n if (event.clientY < midY) {\n rowElement.setAttribute(DRAGPOINT_TOP, '');\n rowElement.removeAttribute(DRAGPOINT_BOTTOM);\n droppedRowIndex.current = rowIndex;\n } else {\n rowElement.setAttribute(DRAGPOINT_BOTTOM, '');\n rowElement.removeAttribute(DRAGPOINT_TOP);\n droppedRowIndex.current = rowIndex + 1;\n }\n\n lastMarkedRow.current = rowElement;\n },\n [reorderableRows]\n );\n\n const onDragLeave = React.useCallback(\n (event: React.DragEvent) => {\n if (!reorderableRows) return;\n\n const rowElement = event.currentTarget as HTMLElement;\n\n clearDragpoint(rowElement);\n // Release ref so we don't pin a detached node if the drag leaves without a drop.\n if (lastMarkedRow.current === rowElement) lastMarkedRow.current = null;\n },\n [reorderableRows]\n );\n\n const onDrop = React.useCallback(\n (event: React.DragEvent) => {\n if (!reorderableRows || dragRowIndex.current === -1) return;\n\n event.preventDefault();\n\n const data = options.data ?? [];\n const dragIndex = dragRowIndex.current;\n let dropIndex = droppedRowIndex.current;\n\n // Remove-then-insert shifts indexes by one when inserting past own position.\n if (dropIndex > dragIndex) dropIndex -= 1;\n\n if (dropIndex !== dragIndex && dropIndex >= 0 && dropIndex <= data.length) {\n const reordered = [...data];\n const [moved] = reordered.splice(dragIndex, 1);\n\n reordered.splice(dropIndex, 0, moved);\n\n options.onRowReorder?.({\n originalEvent: event.nativeEvent,\n dragIndex,\n dropIndex,\n value: reordered\n });\n }\n\n clearDragpoint(lastMarkedRow.current);\n lastMarkedRow.current = null;\n dragRowIndex.current = -1;\n droppedRowIndex.current = -1;\n },\n [reorderableRows, options.data, options.onRowReorder]\n );\n\n const onDragEnd = React.useCallback(() => {\n if (!reorderableRows) return;\n\n clearDragpoint(lastMarkedRow.current);\n lastMarkedRow.current = null;\n dragRowIndex.current = -1;\n droppedRowIndex.current = -1;\n }, [reorderableRows]);\n\n const handleHandlePointerDown = React.useCallback((event: React.PointerEvent) => {\n const row = (event.currentTarget as HTMLElement).closest('tr');\n\n if (row) row.setAttribute('data-drag-source', 'true');\n }, []);\n\n const handleHandlePointerUp = React.useCallback((event: React.PointerEvent) => {\n const row = (event.currentTarget as HTMLElement).closest('tr');\n\n if (row) row.removeAttribute('data-drag-source');\n }, []);\n\n const getRowReorderHandleProps = React.useCallback(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'row-reorder',\n style: { cursor: 'grab', userSelect: 'none' as const, touchAction: 'none' as const } as React.CSSProperties,\n onPointerDown: handleHandlePointerDown,\n onPointerUp: handleHandlePointerUp\n }),\n [handleHandlePointerDown, handleHandlePointerUp]\n );\n\n const exposes = React.useMemo(\n () => ({\n onDragStart,\n onDragOver,\n onDragEnter: onDragOver, // same behaviour for our purposes\n onDragLeave,\n onDrop,\n onDragEnd,\n getRowReorderHandleProps\n }),\n [onDragStart, onDragOver, onDragLeave, onDrop, onDragEnd, getRowReorderHandleProps]\n );\n\n return {\n state: EMPTY_STATE,\n exposes\n };\n}\n","import type { UseDataTableSelectionEvent, SelectionKeys } from '@primereact/types/headless/datatable';\nimport * as React from 'react';\n\nconst EMPTY_KEYS: SelectionKeys = Object.freeze({});\n\ninterface TreeNodeLike {\n key: string;\n children?: TreeNodeLike[];\n}\n\n// Collect all descendant keys of a node\nfunction getDescendantKeys(node: TreeNodeLike): string[] {\n const keys: string[] = [];\n\n if (node.children) {\n for (const child of node.children) {\n keys.push(child.key);\n keys.push(...getDescendantKeys(child));\n }\n }\n\n return keys;\n}\n\n// Find a node by key in the tree\nfunction findNode(nodes: TreeNodeLike[], key: string): TreeNodeLike | null {\n for (const node of nodes) {\n if (node.key === key) return node;\n\n if (node.children) {\n const found = findNode(node.children, key);\n\n if (found) return found;\n }\n }\n\n return null;\n}\n\n// Find all ancestor keys of a given key by walking the tree\nfunction getAncestorKeys(nodes: TreeNodeLike[], targetKey: string): string[] {\n const path: string[] = [];\n\n function walk(nodeList: TreeNodeLike[], trail: string[]): boolean {\n for (const node of nodeList) {\n if (node.key === targetKey) {\n path.push(...trail);\n\n return true;\n }\n\n if (node.children && walk(node.children, [...trail, node.key])) {\n return true;\n }\n }\n\n return false;\n }\n\n walk(nodes, []);\n\n return path;\n}\n\n// Check if ALL children (recursively) of a node are selected\nfunction areAllChildrenSelected(node: TreeNodeLike, selected: SelectionKeys): boolean {\n if (!node.children || node.children.length === 0) return true;\n\n return node.children.every((child) => selected[child.key] === true && areAllChildrenSelected(child, selected));\n}\n\nfunction hasAnyDescendantSelected(node: TreeNodeLike, selected: SelectionKeys): boolean {\n if (!node.children) return false;\n\n return node.children.some((child) => selected[child.key] === true || hasAnyDescendantSelected(child, selected));\n}\n\n// Walk ancestors closest-to-root, setting selected if all children selected, else clearing.\nfunction propagateUp(nodes: TreeNodeLike[], key: string, selected: SelectionKeys): void {\n const ancestors = getAncestorKeys(nodes, key);\n\n for (let i = ancestors.length - 1; i >= 0; i--) {\n const ancestorKey = ancestors[i];\n const ancestorNode = findNode(nodes, ancestorKey);\n\n if (ancestorNode && areAllChildrenSelected(ancestorNode, selected)) {\n selected[ancestorKey] = true;\n } else {\n delete selected[ancestorKey];\n }\n }\n}\n\nexport interface UseDataTableSelectionOptions {\n data: Record<string, unknown>[];\n rawTreeData?: Record<string, unknown>[];\n treeMode?: boolean;\n dataKey?: string | null;\n selectionMode?: 'single' | 'multiple' | null;\n metaKeySelection?: boolean;\n selectedKeys?: SelectionKeys;\n defaultSelectedKeys?: SelectionKeys;\n onSelectionChange?: (event: UseDataTableSelectionEvent) => void;\n}\n\nexport function useDataTableSelection(options: UseDataTableSelectionOptions) {\n const { data } = options;\n\n // Anchor for Shift+Click ranges; the last non-shift click.\n const anchorKeyRef = React.useRef<string | null>(null);\n\n const isControlled = options.selectedKeys !== undefined;\n\n const [internalSelectedKeys, setInternalSelectedKeys] = React.useState<SelectionKeys>(() => {\n return options.selectedKeys ?? options.defaultSelectedKeys ?? EMPTY_KEYS;\n });\n\n const selectedKeys = isControlled ? (options.selectedKeys ?? EMPTY_KEYS) : internalSelectedKeys;\n\n React.useEffect(() => {\n if (isControlled) {\n setInternalSelectedKeys(options.selectedKeys ?? EMPTY_KEYS);\n }\n }, [isControlled, options.selectedKeys]);\n\n const getRowKey = React.useCallback(\n (item: Record<string, unknown>, index: number): string | number => {\n if (options.dataKey && item) {\n return String(item[options.dataKey]);\n }\n\n return index;\n },\n [options.dataKey]\n );\n\n const isSelected = React.useCallback(\n (key: string | number): boolean => {\n return selectedKeys[String(key)] === true;\n },\n [selectedKeys]\n );\n\n const treeNodes = (options.treeMode ? options.rawTreeData : undefined) as TreeNodeLike[] | undefined;\n\n const rowKeyIndex = React.useMemo(() => {\n const map = new Map<string, number>();\n\n for (let i = 0; i < data.length; i++) map.set(String(getRowKey(data[i], i)), i);\n\n return map;\n }, [data, getRowKey]);\n\n const toggleSelection = React.useCallback(\n (event: React.SyntheticEvent, key: string | number, mode: 'checkbox' | 'radio' | 'single') => {\n const stringKey = String(key);\n let newSelectedKeys: SelectionKeys;\n // Checkbox-mode only; radio/single don't support ranges.\n let updateAnchor = true;\n\n if (mode === 'radio') {\n newSelectedKeys = { [stringKey]: true };\n } else if (mode === 'single') {\n newSelectedKeys = selectedKeys[stringKey] ? {} : { [stringKey]: true };\n } else {\n // Non-tree checkbox only; tree has its own cascade. ChangeEvent lacks shiftKey —\n // checkbox shift+click works only if caller forwards a mouse event.\n const shiftKey = (event as React.SyntheticEvent & { shiftKey?: boolean }).shiftKey === true;\n\n if (shiftKey && !treeNodes && anchorKeyRef.current !== null && anchorKeyRef.current !== stringKey) {\n const anchorKey = anchorKeyRef.current;\n const anchorIndex = rowKeyIndex.get(anchorKey) ?? -1;\n const currentIndex = rowKeyIndex.get(stringKey) ?? -1;\n\n if (anchorIndex >= 0 && currentIndex >= 0) {\n const start = Math.min(anchorIndex, currentIndex);\n const end = Math.max(anchorIndex, currentIndex);\n\n // Additive: shift+click on checkbox extends selection rather than replacing.\n newSelectedKeys = { ...selectedKeys };\n\n for (let i = start; i <= end; i++) {\n const rangeKey = String(getRowKey(data[i], i));\n\n newSelectedKeys[rangeKey] = true;\n }\n } else {\n newSelectedKeys = { ...selectedKeys, [stringKey]: true };\n }\n\n updateAnchor = false; // Shift+click keeps the anchor.\n } else {\n newSelectedKeys = { ...selectedKeys };\n const isSelecting = !newSelectedKeys[stringKey];\n\n if (isSelecting) {\n newSelectedKeys[stringKey] = true;\n } else {\n delete newSelectedKeys[stringKey];\n }\n\n if (treeNodes) {\n const node = findNode(treeNodes, stringKey);\n\n if (node) {\n const descendantKeys = getDescendantKeys(node);\n\n for (const dk of descendantKeys) {\n if (isSelecting) {\n newSelectedKeys[dk] = true;\n } else {\n delete newSelectedKeys[dk];\n }\n }\n }\n\n propagateUp(treeNodes, stringKey, newSelectedKeys);\n }\n }\n }\n\n if (updateAnchor && mode !== 'radio') {\n anchorKeyRef.current = stringKey;\n }\n\n if (!isControlled) {\n setInternalSelectedKeys(newSelectedKeys);\n }\n\n options.onSelectionChange?.({\n originalEvent: event,\n value: newSelectedKeys,\n type: mode === 'radio' ? 'radio' : mode === 'single' ? 'row' : 'checkbox'\n });\n },\n [data, getRowKey, selectedKeys, isControlled, options.onSelectionChange, treeNodes, rowKeyIndex]\n );\n\n const collectAllTreeKeys = React.useCallback((nodeList: TreeNodeLike[]): string[] => {\n const keys: string[] = [];\n\n for (const node of nodeList) {\n keys.push(node.key);\n\n if (node.children) {\n keys.push(...collectAllTreeKeys(node.children));\n }\n }\n\n return keys;\n }, []);\n\n const selectionSummary = React.useMemo(() => {\n if (treeNodes) {\n const allKeys = collectAllTreeKeys(treeNodes);\n\n if (allKeys.length === 0) return { all: false, some: false };\n\n const selectedCount = allKeys.reduce((n, key) => (selectedKeys[key] === true ? n + 1 : n), 0);\n\n return { all: selectedCount === allKeys.length, some: selectedCount > 0 && selectedCount < allKeys.length };\n }\n\n if (data.length === 0) return { all: false, some: false };\n\n let selectedCount = 0;\n\n for (let i = 0; i < data.length; i++) {\n const key = String(getRowKey(data[i], i));\n\n if (selectedKeys[key] === true) selectedCount++;\n }\n\n return { all: selectedCount === data.length, some: selectedCount > 0 && selectedCount < data.length };\n }, [data, treeNodes, selectedKeys, getRowKey, collectAllTreeKeys]);\n\n const isAllSelected = React.useCallback(() => selectionSummary.all, [selectionSummary]);\n const isSomeSelected = React.useCallback(() => selectionSummary.some, [selectionSummary]);\n\n const toggleAll = React.useCallback(\n (event: React.SyntheticEvent) => {\n let newSelectedKeys: SelectionKeys;\n\n if (isAllSelected()) {\n newSelectedKeys = {};\n } else {\n newSelectedKeys = {};\n\n if (treeNodes) {\n const allKeys = collectAllTreeKeys(treeNodes);\n\n for (const key of allKeys) {\n newSelectedKeys[key] = true;\n }\n } else {\n data.forEach((item, index) => {\n const key = String(getRowKey(item, index));\n\n newSelectedKeys[key] = true;\n });\n }\n }\n\n if (!isControlled) {\n setInternalSelectedKeys(newSelectedKeys);\n }\n\n options.onSelectionChange?.({\n originalEvent: event,\n value: newSelectedKeys,\n type: 'all'\n });\n },\n [data, treeNodes, isAllSelected, isControlled, getRowKey, collectAllTreeKeys, options.onSelectionChange]\n );\n\n const onRowClick = React.useCallback(\n (event: React.MouseEvent, key: string | number) => {\n const { selectionMode, metaKeySelection } = options;\n\n if (!selectionMode) return;\n\n const stringKey = String(key);\n const metaKey = event.metaKey || event.ctrlKey;\n const shiftKey = event.shiftKey;\n\n let newSelectedKeys: SelectionKeys;\n let updateAnchor = true;\n\n if (selectionMode === 'single') {\n newSelectedKeys = selectedKeys[stringKey] ? {} : { [stringKey]: true };\n } else if (metaKeySelection) {\n // multiple + metaKeySelection\n if (shiftKey && anchorKeyRef.current !== null && anchorKeyRef.current !== stringKey) {\n const anchorKey = anchorKeyRef.current;\n let anchorIndex = -1;\n let currentIndex = -1;\n\n for (let i = 0; i < data.length; i++) {\n const rowKey = String(getRowKey(data[i], i));\n\n if (rowKey === anchorKey) anchorIndex = i;\n if (rowKey === stringKey) currentIndex = i;\n if (anchorIndex >= 0 && currentIndex >= 0) break;\n }\n\n if (anchorIndex >= 0 && currentIndex >= 0) {\n const start = Math.min(anchorIndex, currentIndex);\n const end = Math.max(anchorIndex, currentIndex);\n\n // Ctrl+Shift extends; plain Shift replaces.\n newSelectedKeys = metaKey ? { ...selectedKeys } : {};\n\n for (let i = start; i <= end; i++) {\n const rangeKey = String(getRowKey(data[i], i));\n\n newSelectedKeys[rangeKey] = true;\n }\n } else {\n newSelectedKeys = { ...selectedKeys, [stringKey]: true };\n }\n\n updateAnchor = false;\n } else if (metaKey) {\n newSelectedKeys = { ...selectedKeys };\n\n if (newSelectedKeys[stringKey]) {\n delete newSelectedKeys[stringKey];\n } else {\n newSelectedKeys[stringKey] = true;\n }\n } else {\n newSelectedKeys = { [stringKey]: true };\n }\n } else {\n newSelectedKeys = { ...selectedKeys };\n\n if (newSelectedKeys[stringKey]) {\n delete newSelectedKeys[stringKey];\n } else {\n newSelectedKeys[stringKey] = true;\n }\n }\n\n if (updateAnchor) {\n anchorKeyRef.current = stringKey;\n }\n\n if (!isControlled) {\n setInternalSelectedKeys(newSelectedKeys);\n }\n\n options.onSelectionChange?.({\n originalEvent: event,\n value: newSelectedKeys,\n type: 'row'\n });\n },\n [data, getRowKey, selectedKeys, isControlled, options.selectionMode, options.metaKeySelection, options.onSelectionChange]\n );\n\n const isPartiallySelected = React.useCallback(\n (key: string | number): boolean => {\n if (!treeNodes) return false;\n\n const node = findNode(treeNodes, String(key));\n\n if (!node || !node.children || node.children.length === 0) return false;\n\n return !selectedKeys[String(key)] && hasAnyDescendantSelected(node, selectedKeys);\n },\n [treeNodes, selectedKeys]\n );\n\n const exposes = React.useMemo(\n () => ({\n isSelected,\n isPartiallySelected,\n toggleSelection,\n toggleAll,\n isAllSelected,\n isSomeSelected,\n onRowClick\n }),\n [isSelected, isPartiallySelected, toggleSelection, toggleAll, isAllSelected, isSomeSelected, onRowClick]\n );\n\n const state = React.useMemo(() => ({ selectedKeys }), [selectedKeys]);\n\n return { getRowKey, state, exposes };\n}\n","import type { UseDataTableSortEvent, SortMeta, SortOrder } from '@primereact/types/headless/datatable';\nimport * as React from 'react';\nimport { sortMultiple, sortSingle } from '../utils';\n\nexport interface UseDataTableSortOptions {\n data: Record<string, unknown>[];\n lazy?: boolean;\n sortField?: string;\n sortOrder?: SortOrder;\n defaultSortField?: string;\n defaultSortOrder?: SortOrder;\n multiSortMeta?: SortMeta[];\n defaultMultiSortMeta?: SortMeta[];\n removableSort?: boolean;\n nullSortOrder?: number;\n onSortChange?: (event: UseDataTableSortEvent) => void;\n}\n\nexport function useDataTableSort(options: UseDataTableSortOptions) {\n const { data, lazy } = options;\n\n const isSingleControlled = options.sortField !== undefined;\n const isMultiControlled = options.multiSortMeta !== undefined;\n\n const [internalSortField, setInternalSortField] = React.useState<string | undefined>(options.defaultSortField);\n const [internalSortOrder, setInternalSortOrder] = React.useState<SortOrder | undefined>(options.defaultSortOrder);\n const [internalMultiSortMeta, setInternalMultiSortMeta] = React.useState<SortMeta[] | undefined>(options.defaultMultiSortMeta);\n\n const currentSortField = isSingleControlled ? options.sortField : internalSortField;\n const currentSortOrder = isSingleControlled ? options.sortOrder : internalSortOrder;\n const currentMultiSortMeta = isMultiControlled ? options.multiSortMeta : internalMultiSortMeta;\n\n // Sort methods\n const isSorted = React.useCallback(\n (field: string): boolean => {\n if (currentMultiSortMeta && currentMultiSortMeta.length > 0) {\n return currentMultiSortMeta.some((meta) => meta.field === field);\n }\n\n return currentSortField === field && currentSortOrder !== 0;\n },\n [currentSortField, currentSortOrder, currentMultiSortMeta]\n );\n\n const getSortOrder = React.useCallback(\n (field: string): SortOrder => {\n if (currentMultiSortMeta && currentMultiSortMeta.length > 0) {\n const meta = currentMultiSortMeta.find((m) => m.field === field);\n\n return meta?.order ?? 0;\n }\n\n if (currentSortField === field) {\n return currentSortOrder ?? 0;\n }\n\n return 0;\n },\n [currentSortField, currentSortOrder, currentMultiSortMeta]\n );\n\n const getSortIndex = React.useCallback(\n (field: string): number => {\n if (currentMultiSortMeta && currentMultiSortMeta.length > 0) {\n return currentMultiSortMeta.findIndex((m) => m.field === field);\n }\n\n return -1;\n },\n [currentMultiSortMeta]\n );\n\n const onSort = React.useCallback(\n (event: React.SyntheticEvent, field: string, multiSort?: boolean) => {\n const currentOrder = getSortOrder(field);\n let newOrder: SortOrder;\n\n if (currentOrder === 0) {\n newOrder = 1;\n } else if (currentOrder === 1) {\n newOrder = -1;\n } else {\n newOrder = options.removableSort ? 0 : 1;\n }\n\n if (multiSort) {\n // Multi-sort: update multiSortMeta array\n let newMultiSortMeta = [...(currentMultiSortMeta ?? [])];\n const existingIndex = newMultiSortMeta.findIndex((m) => m.field === field);\n\n if (newOrder === 0) {\n // Remove from multi-sort\n if (existingIndex !== -1) {\n newMultiSortMeta.splice(existingIndex, 1);\n }\n } else if (existingIndex !== -1) {\n // Update order\n newMultiSortMeta[existingIndex] = { field, order: newOrder };\n } else {\n // Add to multi-sort\n newMultiSortMeta.push({ field, order: newOrder });\n }\n\n if (!isMultiControlled) {\n setInternalMultiSortMeta(newMultiSortMeta);\n }\n\n options.onSortChange?.({\n originalEvent: event,\n field,\n order: newOrder,\n multiSortMeta: newMultiSortMeta\n });\n } else {\n // Single-sort path also clears any multi-sort state.\n if (!isSingleControlled) {\n setInternalSortField(newOrder === 0 ? undefined : field);\n setInternalSortOrder(newOrder);\n }\n\n if (!isMultiControlled) {\n setInternalMultiSortMeta(undefined);\n }\n\n options.onSortChange?.({\n originalEvent: event,\n field,\n order: newOrder,\n multiSortMeta: undefined\n });\n }\n },\n [getSortOrder, options.removableSort, options.onSortChange, isSingleControlled, isMultiControlled, currentMultiSortMeta]\n );\n\n // Sorted data\n const nullSortOrder = options.nullSortOrder ?? 1;\n\n const sortedData = React.useMemo(() => {\n if (lazy) return data;\n\n // Multi-sort\n if (currentMultiSortMeta && currentMultiSortMeta.length > 0) {\n return sortMultiple(data, currentMultiSortMeta, nullSortOrder);\n }\n\n // Single sort\n if (currentSortField && currentSortOrder != null && currentSortOrder !== 0) {\n return sortSingle(data, currentSortField, currentSortOrder, nullSortOrder);\n }\n\n return data;\n }, [data, lazy, currentSortField, currentSortOrder, currentMultiSortMeta, nullSortOrder]);\n\n const getSortProps = React.useCallback(\n (field: string) => {\n const sorted = isSorted(field);\n const order = getSortOrder(field);\n const sortLabel = sorted ? (order === 1 ? 'ascending' : 'descending') : '';\n\n const handleClick = (event: React.MouseEvent | React.KeyboardEvent) => {\n if (!field) return;\n const multi = (event as React.MouseEvent).metaKey || (event as React.MouseEvent).ctrlKey;\n\n onSort(event, field, multi);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleClick(event);\n }\n };\n\n return {\n 'data-scope': 'datatable',\n 'data-part': 'sort',\n ...(sorted ? { 'data-sorted': '', 'data-sort-order': order === 1 ? 'asc' : 'desc' } : { 'data-unsorted': '' }),\n role: 'button' as const,\n tabIndex: 0,\n 'aria-label': `Sort by ${field}${sortLabel ? ` ${sortLabel}` : ''}`,\n 'aria-sort': sorted ? ((order === 1 ? 'ascending' : 'descending') as 'ascending' | 'descending') : ('none' as const),\n onClick: handleClick,\n onKeyDown: handleKeyDown\n };\n },\n [isSorted, getSortOrder, onSort]\n );\n\n // Exposes\n const exposes = React.useMemo(\n () => ({\n onSort,\n isSorted,\n getSortOrder,\n getSortIndex,\n getSortProps\n }),\n [onSort, isSorted, getSortOrder, getSortIndex, getSortProps]\n );\n\n const state = React.useMemo(() => ({ sortField: currentSortField, sortOrder: currentSortOrder, multiSortMeta: currentMultiSortMeta }), [currentSortField, currentSortOrder, currentMultiSortMeta]);\n\n return { sortedData, state, exposes };\n}\n","import type { SortOrder } from '@primereact/types/headless/datatable';\nimport { localeComparator, resolveFieldData, sort } from '@primeuix/utils';\n\nconst comparator = localeComparator() as (val1: unknown, val2: unknown) => number;\n\n/**\n * Compares two values for sorting.\n * Delegates to `@primeuix/utils` `sort` with a numeric-aware locale comparator.\n * @param nullSortOrder Determines where null/empty values are placed. 1 = nulls last (default), -1 = nulls first.\n */\nexport const compareValues = (valueA: unknown, valueB: unknown, order: SortOrder, nullSortOrder: number = 1): number => {\n return sort(valueA, valueB, order, comparator, nullSortOrder);\n};\n\n/**\n * Sorts data by a single field.\n * @param nullSortOrder Determines where null/empty values are placed. 1 = nulls last (default), -1 = nulls first.\n */\nexport const sortSingle = (data: Record<string, unknown>[], field: string, order: SortOrder, nullSortOrder: number = 1): Record<string, unknown>[] => {\n if (!field || order === 0) return data;\n\n return [...data].sort((a, b) => sort(resolveFieldData(a, field), resolveFieldData(b, field), order, comparator, nullSortOrder));\n};\n\n/**\n * Sorts data by multiple fields.\n * @param nullSortOrder Determines where null/empty values are placed. 1 = nulls last (default), -1 = nulls first.\n */\nexport const sortMultiple = (data: Record<string, unknown>[], multiSortMeta: { field: string; order: SortOrder }[], nullSortOrder: number = 1): Record<string, unknown>[] => {\n if (!multiSortMeta || multiSortMeta.length === 0) return data;\n\n return [...data].sort((a, b) => {\n for (const meta of multiSortMeta) {\n const result = sort(resolveFieldData(a, meta.field), resolveFieldData(b, meta.field), meta.order, comparator, nullSortOrder);\n\n if (result !== 0) return result;\n }\n\n return 0;\n });\n};\n","import { BUILT_IN_MATCHERS, getGlobalMatchers, type FilterMatcher } from '@primereact/hooks/use-filter';\nimport type { ExpandedKeys, SortMeta, SortOrder, TreeNode } from '@primereact/types/headless/datatable';\nimport { resolveFieldData } from '@primeuix/utils';\nimport * as React from 'react';\nimport { compareValues } from '../utils';\nimport type { ColumnFilterMeta, DataTableFilterMeta, FilterMatchMode } from './useDataTableFilter';\n\nfunction runMatcher(matchMode: string, value: unknown, filter: unknown, locale?: string): boolean {\n const matcher = (BUILT_IN_MATCHERS as unknown as Record<string, FilterMatcher>)[matchMode] ?? getGlobalMatchers()[matchMode];\n\n if (!matcher) return true;\n\n return matcher(value, filter, locale);\n}\n\n/** Maximum recursion depth for tree operations to prevent stack overflow. */\nconst MAX_TREE_DEPTH = 100;\n\nexport type { TreeNode };\n\nexport interface UseDataTableTreeOptions {\n data: Record<string, unknown>[];\n treeMode?: boolean;\n expandedKeys: ExpandedKeys;\n sortField?: string;\n sortOrder?: SortOrder;\n multiSortMeta?: SortMeta[];\n filters?: DataTableFilterMeta;\n globalFilter?: string | null;\n globalFilterFields?: string[];\n paginator?: boolean;\n page?: number;\n rows?: number;\n}\n\nfunction sortTreeNodes(nodes: TreeNode[], sortField: string, sortOrder: SortOrder, depth: number = 0): TreeNode[] {\n if (depth >= MAX_TREE_DEPTH) return nodes;\n\n const sorted = [...nodes].sort((a, b) => {\n const valA = a.data ? resolveFieldData(a.data as Record<string, unknown>, sortField) : undefined;\n const valB = b.data ? resolveFieldData(b.data as Record<string, unknown>, sortField) : undefined;\n\n return compareValues(valA, valB, sortOrder);\n });\n\n return sorted.map((node) => {\n if (node.children?.length) {\n return { ...node, children: sortTreeNodes(node.children, sortField, sortOrder, depth + 1) };\n }\n\n return node;\n });\n}\n\nfunction sortTreeNodesMulti(nodes: TreeNode[], multiSortMeta: SortMeta[], depth: number = 0): TreeNode[] {\n if (depth >= MAX_TREE_DEPTH) return nodes;\n\n const sorted = [...nodes].sort((a, b) => {\n for (const meta of multiSortMeta) {\n const valA = a.data ? resolveFieldData(a.data as Record<string, unknown>, meta.field) : undefined;\n const valB = b.data ? resolveFieldData(b.data as Record<string, unknown>, meta.field) : undefined;\n const result = compareValues(valA, valB, meta.order);\n\n if (result !== 0) return result;\n }\n\n return 0;\n });\n\n return sorted.map((node) => {\n if (node.children?.length) {\n return { ...node, children: sortTreeNodesMulti(node.children, multiSortMeta, depth + 1) };\n }\n\n return node;\n });\n}\n\nfunction matches(value: unknown, filterValue: unknown, matchMode: FilterMatchMode = 'contains'): boolean {\n return runMatcher(matchMode, value, filterValue);\n}\n\nfunction nodeMatchesFilters(nodeData: Record<string, unknown>, filters: DataTableFilterMeta, globalFilter: string | null, globalFilterFields: string[]): boolean {\n if (globalFilter && globalFilterFields.length > 0) {\n const globalMatch = globalFilterFields.some((field) => runMatcher('contains', resolveFieldData(nodeData, field), globalFilter));\n\n if (!globalMatch) return false;\n }\n\n const filterKeys = Object.keys(filters).filter((key) => key !== 'global');\n\n for (const field of filterKeys) {\n const meta = filters[field];\n\n if (!meta) continue;\n\n if (typeof meta === 'object' && meta !== null && 'constraints' in meta) {\n const columnMeta = meta as ColumnFilterMeta;\n const operator = columnMeta.operator ?? 'and';\n const constraints = columnMeta.constraints ?? [];\n\n if (constraints.length > 0) {\n const fieldValue = resolveFieldData(nodeData, field);\n\n if (operator === 'and') {\n const allMatch = constraints.every((c) => matches(fieldValue, c.value, c.matchMode));\n\n if (!allMatch) return false;\n } else {\n const anyMatch = constraints.some((c) => matches(fieldValue, c.value, c.matchMode));\n\n if (!anyMatch) return false;\n }\n }\n\n continue;\n }\n\n if (typeof meta === 'object' && meta !== null && 'value' in meta) {\n const columnMeta = meta as ColumnFilterMeta;\n const fieldValue = resolveFieldData(nodeData, field);\n\n if (!matches(fieldValue, columnMeta.value, columnMeta.matchMode)) return false;\n\n continue;\n }\n\n const fieldValue = resolveFieldData(nodeData, field);\n\n if (!matches(fieldValue, meta)) return false;\n }\n\n return true;\n}\n\n/**\n * Recursively filters tree nodes.\n * - If a node matches, include it with ALL its children (lenient mode).\n * - If a node doesn't match but a descendant does, include the node with filtered children.\n * - If neither node nor any descendant matches, exclude.\n */\nexport function filterTreeNodes(nodes: TreeNode[], filters: DataTableFilterMeta, globalFilter: string | null, globalFilterFields: string[], depth: number = 0): TreeNode[] {\n if (depth >= MAX_TREE_DEPTH) return [];\n\n const result: TreeNode[] = [];\n\n for (const node of nodes) {\n const nodeData = node.data ?? {};\n const selfMatches = nodeMatchesFilters(nodeData, filters, globalFilter, globalFilterFields);\n\n if (selfMatches) {\n // Include this node with ALL its children (lenient mode)\n result.push(node);\n } else if (node.children?.length) {\n // Check if any descendant matches\n const filteredChildren = filterTreeNodes(node.children, filters, globalFilter, globalFilterFields, depth + 1);\n\n if (filteredChildren.length > 0) {\n // Include node with only the filtered children\n result.push({ ...node, children: filteredChildren });\n }\n }\n }\n\n return result;\n}\n\nexport function hasActiveFilters(filters: DataTableFilterMeta, globalFilter: string | null): boolean {\n if (globalFilter) return true;\n\n const filterKeys = Object.keys(filters).filter((key) => key !== 'global');\n\n for (const field of filterKeys) {\n const meta = filters[field];\n\n if (!meta) continue;\n\n if (typeof meta === 'object' && meta !== null && 'constraints' in meta) {\n const constraints = (meta as ColumnFilterMeta).constraints ?? [];\n const hasValue = constraints.some((c) => c.value !== null && c.value !== undefined && c.value !== '');\n\n if (hasValue) return true;\n\n continue;\n }\n\n if (typeof meta === 'object' && meta !== null && 'value' in meta) {\n const val = (meta as ColumnFilterMeta).value;\n\n if (val !== null && val !== undefined && val !== '') return true;\n\n continue;\n }\n\n if (meta !== null && meta !== undefined && meta !== '') return true;\n }\n\n return false;\n}\n\nfunction flattenNodes(nodes: TreeNode[], expandedKeys: ExpandedKeys, level: number, parentKey: string | null): Record<string, unknown>[] {\n if (level >= MAX_TREE_DEPTH) return [];\n\n const rows: Record<string, unknown>[] = [];\n const setSize = nodes.length;\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const hasLoadedChildren = !!node.children?.length;\n // `leaf === false` flags a lazy node whose children haven't been loaded yet —\n // still expandable from the user's POV.\n const isExpandable = hasLoadedChildren || node.leaf === false;\n const isLeaf = node.leaf === true || (!hasLoadedChildren && node.leaf !== false);\n\n rows.push({\n ...(node.data ?? {}),\n key: node.key,\n data: node.data ?? {},\n children: node.children,\n _treeLevel: level,\n _treeHasChildren: isExpandable,\n _treeLeaf: isLeaf,\n _treeParentKey: parentKey,\n _treePosInSet: i + 1,\n _treeSetSize: setSize\n });\n\n if (hasLoadedChildren && expandedKeys[node.key]) {\n rows.push(...flattenNodes(node.children!, expandedKeys, level + 1, node.key));\n }\n }\n\n return rows;\n}\n\nexport function useDataTableTree(options: UseDataTableTreeOptions) {\n const { data, treeMode, expandedKeys, sortField, sortOrder, multiSortMeta, filters = {}, globalFilter = null, globalFilterFields = [], paginator = false, page = 0, rows = 10 } = options;\n\n const flattenedData = React.useMemo(() => {\n if (!treeMode) return data;\n\n let treeNodes = data as unknown as TreeNode[];\n\n // filter → sort → paginate roots → flatten with expanded children.\n if (hasActiveFilters(filters, globalFilter)) {\n treeNodes = filterTreeNodes(treeNodes, filters, globalFilter, globalFilterFields);\n }\n\n if (multiSortMeta && multiSortMeta.length > 0) {\n treeNodes = sortTreeNodesMulti(treeNodes, multiSortMeta);\n } else if (sortField && sortOrder != null && sortOrder !== 0) {\n treeNodes = sortTreeNodes(treeNodes, sortField, sortOrder);\n }\n\n if (paginator) {\n const first = page * rows;\n\n treeNodes = treeNodes.slice(first, first + rows);\n }\n\n return flattenNodes(treeNodes, expandedKeys, 0, null);\n }, [data, treeMode, expandedKeys, sortField, sortOrder, multiSortMeta, filters, globalFilter, globalFilterFields, paginator, page, rows]);\n\n // Root count after filter, before pagination.\n const totalRootNodes = React.useMemo(() => {\n if (!treeMode) return data.length;\n\n let treeNodes = data as unknown as TreeNode[];\n\n if (hasActiveFilters(filters, globalFilter)) {\n treeNodes = filterTreeNodes(treeNodes, filters, globalFilter, globalFilterFields);\n }\n\n return treeNodes.length;\n }, [data, treeMode, filters, globalFilter, globalFilterFields]);\n\n const state = React.useMemo(() => ({}), []);\n const exposes = React.useMemo(() => ({}), []);\n\n return {\n flattenedData,\n totalRootNodes,\n state,\n exposes\n };\n}\n","import type { ExpandedKeys, SelectionKeys } from '@primereact/types/headless/datatable';\nimport * as React from 'react';\n\nexport interface UseDataTableKeyboardOptions {\n data: Record<string, unknown>[];\n dataKey?: string | null;\n treeMode?: boolean;\n selectionMode?: 'single' | 'multiple' | null;\n selectedKeys?: SelectionKeys;\n expandedKeys?: ExpandedKeys;\n onToggleExpansion?: (event: React.SyntheticEvent, key: string | number) => void;\n onToggleSelection?: (event: React.SyntheticEvent, key: string | number, mode: 'checkbox' | 'radio' | 'single') => void;\n getRowKey?: (item: Record<string, unknown>, index: number) => string | number;\n}\n\nexport function useDataTableKeyboard(options: UseDataTableKeyboardOptions) {\n const { data, treeMode, selectionMode, expandedKeys = {}, onToggleExpansion, onToggleSelection, getRowKey } = options;\n\n const keyboardToggleMode: 'checkbox' | 'radio' | 'single' = selectionMode === 'single' ? 'single' : 'checkbox';\n\n const [focusedRowIndex, setFocusedRowIndex] = React.useState<number>(-1);\n\n const getRowTabIndex = React.useCallback(\n (index: number): number => {\n if (focusedRowIndex === -1) return index === 0 ? 0 : -1;\n\n return index === focusedRowIndex ? 0 : -1;\n },\n [focusedRowIndex]\n );\n\n /**\n * Focus the row at the given absolute data index.\n * Looks up the row via `data-index` — this stays accurate under virtualization because\n * windowed-in rows carry their true index rather than their DOM sibling position.\n * Falls back to DOM-order selector for pagination / non-virtual scenarios where\n * `data-index` matches the rendered position anyway.\n */\n const focusRow = React.useCallback((tbody: HTMLElement | null, index: number) => {\n if (!tbody) return;\n\n const byDataIndex = tbody.querySelector<HTMLElement>(`tr[data-scope=\"datatable\"][data-part=\"row\"][data-index=\"${index}\"]`);\n\n if (byDataIndex) {\n setFocusedRowIndex(index);\n byDataIndex.focus();\n\n return;\n }\n\n // Row is windowed out; update the index so the virtualizer can scroll and focus on next render.\n setFocusedRowIndex(index);\n }, []);\n\n const onRowKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLTableRowElement>, index: number) => {\n // Skip row navigation while focus is inside an editor / form control.\n const target = event.target as HTMLElement;\n\n if (target !== event.currentTarget) {\n const tag = target.tagName;\n\n if (tag === 'INPUT' || tag === 'SELECT' || tag === 'TEXTAREA' || target.isContentEditable) {\n return;\n }\n\n if (target.closest('[data-editing]')) {\n return;\n }\n }\n\n // Use data.length, not a DOM-children count, so ArrowDown still works when rows are virtualized.\n const rowCount = data.length;\n\n let handled = true;\n\n switch (event.key) {\n case 'ArrowDown': {\n const nextIndex = Math.min(index + 1, rowCount - 1);\n\n if (nextIndex !== index) {\n const tbody = (event.currentTarget as HTMLElement).closest('tbody');\n\n focusRow(tbody, nextIndex);\n\n if (event.shiftKey && onToggleSelection) {\n const item = data[nextIndex];\n const key = getRowKey?.(item, nextIndex);\n\n if (key !== undefined) {\n onToggleSelection(event, key, keyboardToggleMode);\n }\n }\n }\n\n break;\n }\n\n case 'ArrowUp': {\n const prevIndex = Math.max(index - 1, 0);\n\n if (prevIndex !== index) {\n const tbody = (event.currentTarget as HTMLElement).closest('tbody');\n\n focusRow(tbody, prevIndex);\n\n if (event.shiftKey && onToggleSelection) {\n const item = data[prevIndex];\n const key = getRowKey?.(item, prevIndex);\n\n if (key !== undefined) {\n onToggleSelection(event, key, keyboardToggleMode);\n }\n }\n }\n\n break;\n }\n\n case 'ArrowRight': {\n if (!treeMode) {\n handled = false;\n break;\n }\n\n const item = data[index];\n const key = getRowKey?.(item, index);\n const hasChildren = item?._treeHasChildren as boolean;\n const isExpanded = key !== undefined && expandedKeys[String(key)];\n\n if (hasChildren && !isExpanded && key !== undefined) {\n onToggleExpansion?.(event, key);\n } else if (isExpanded) {\n // First child = next flat row.\n const tbody = (event.currentTarget as HTMLElement).closest('tbody');\n\n focusRow(tbody, Math.min(index + 1, rowCount - 1));\n }\n\n break;\n }\n\n case 'ArrowLeft': {\n if (!treeMode) {\n handled = false;\n break;\n }\n\n const item2 = data[index];\n const key2 = getRowKey?.(item2, index);\n const hasChildren2 = item2?._treeHasChildren as boolean;\n const isExpanded2 = key2 !== undefined && expandedKeys[String(key2)];\n\n if (hasChildren2 && isExpanded2 && key2 !== undefined) {\n onToggleExpansion?.(event, key2);\n } else {\n const parentKey = item2?._treeParentKey as string | null;\n\n if (parentKey !== null) {\n const parentIndex = data.findIndex((row, i) => String(getRowKey?.(row, i)) === String(parentKey));\n\n if (parentIndex >= 0) {\n const tbody = (event.currentTarget as HTMLElement).closest('tbody');\n\n focusRow(tbody, parentIndex);\n }\n }\n }\n\n break;\n }\n\n case 'Home': {\n const tbody = (event.currentTarget as HTMLElement).closest('tbody');\n\n focusRow(tbody, 0);\n break;\n }\n\n case 'End': {\n const tbody = (event.currentTarget as HTMLElement).closest('tbody');\n\n focusRow(tbody, rowCount - 1);\n break;\n }\n\n case 'Enter':\n case ' ': {\n const target = event.target as HTMLElement;\n\n if (target.tagName === 'INPUT' || target.tagName === 'SELECT' || target.tagName === 'TEXTAREA' || target.tagName === 'BUTTON' || target.tagName === 'A' || target.isContentEditable) {\n handled = false;\n break;\n }\n\n if (onToggleSelection) {\n const item3 = data[index];\n const key3 = getRowKey?.(item3, index);\n\n if (key3 !== undefined) {\n onToggleSelection(event, key3, keyboardToggleMode);\n }\n }\n\n break;\n }\n\n default:\n handled = false;\n }\n\n if (handled) {\n event.preventDefault();\n }\n },\n [data, treeMode, expandedKeys, focusRow, onToggleExpansion, onToggleSelection, getRowKey, keyboardToggleMode]\n );\n\n const state = React.useMemo(() => ({ focusedRowIndex }), [focusedRowIndex]);\n\n const exposes = React.useMemo(\n () => ({\n getRowTabIndex,\n onRowKeyDown,\n focusRow\n }),\n [getRowTabIndex, onRowKeyDown, focusRow]\n );\n\n return { state, exposes };\n}\n"],"mappings":"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","names":["React","EMPTY_STATE","useDataTableColumnReorder","options","reorderableColumns","dragColumnIndex","draggedElement","dropColumnIndex","dropPosition","indicatorUpRef","indicatorDownRef","rootRef","targets","activeTargetIndex","activeTargetSide","registerDropTarget","columnIndex","notify","setActiveDropTarget","index","side","_a","_b","prev","prevSide","clearActiveDropTarget","onDragStart","event","onDragOver","rect","indicatorUp","indicatorDown","root","rootRect","indicatorHeight","indicatorWidth","targetLeft","x","onDragEnter","hideIndicators","onDragLeave","_event","onDrop","dragIndex","dropIndex","position","allowDrop","onDragEnd","getColumnReorderHandleProps","getColumnReorderIndicatorUpProps","el","getColumnReorderIndicatorDownProps","registerRoot","exposes","React","EMPTY_STATE","MIN_COLUMN_WIDTH","useDataTableColumnResize","options","resizableColumns","columnResizeMode","dragRef","indicatorRef","registerIndicator","el","styleElementRef","writeWidthStylesheet","table","widths","tableId","rules","w","idx","n","selector","_a","columnResizeModeRef","onColumnResizeEndRef","teardownDrag","state","applyFinalWidths","overrides","newTableWidth","cell","target","sum","s","diff","fixIdx","_","onResizeStart","event","columnIndex","headerCell","_b","_c","tableContainer","resizer","headerCells","nextHeaderCell","containerRect","indicator","startLeft","onMove","e","leftInContainer","onEnd","delta","mode","newWidth","maxDelta","clampedDelta","clampedNewWidth","clampedNextWidth","getColumnResizerProps","exposes","React","EMPTY_KEYS","useDataTableEditing","options","_a","editMode","isControlled","internalEditingKeys","setInternalEditingKeys","_b","editingKeys","editingCell","setEditingCell","editingMetaRef","isEditing","key","startRowEdit","event","rowData","rowIndex","stringKey","newEditingKeys","__spreadProps","__spreadValues","saveRowEdit","newData","cancelRowEdit","_c","originalData","isCellEditing","field","rowKey","startCellEdit","completeCellEdit","prevented","editEvent","cancelCellEdit","getCellEditorRootProps","params","getRowEditorInitProps","getRowEditorSaveProps","getRowEditorCancelProps","exposes","React","EMPTY_KEYS","useDataTableExpansion","options","_a","isControlled","internalExpandedKeys","setInternalExpandedKeys","_b","expandedKeys","isExpanded","key","toggleExpansion","event","stringKey","newExpandedKeys","__spreadValues","getRowToggleProps","rowKey","item","expanded","isTreeMode","treeLevel","hasChildren","onClick","rootProps","exposes","resolveFieldData","React","EMPTY_STATE","useDataTableExport","options","exportCSV","exportOptions","_a","_b","_c","_d","data","separator","fileName","rows","item","key","fields","headers","csvLines","headerLine","field","label","row","line","value","str","csvContent","blob","url","link","exposes","useFilter","React","FilterMatchMode","FilterOperator","EMPTY_FILTERS","useDataTableFilter","options","_a","_b","_c","_d","data","lazy","globalFilterFields","isControlled","internalFilters","setInternalFilters","currentFilters","globalFilter","filterDelay","debouncedFilters","setDebouncedFilters","debouncedGlobalFilter","setDebouncedGlobalFilter","timeoutId","activeFilters","activeGlobalFilter","updateFilters","event","newFilters","setFieldFilter","field","meta","__spreadProps","__spreadValues","clearFieldFilter","existing","clearAllFilters","addConstraint","defaultMatchMode","newConstraints","currentValue","currentMode","removeConstraint","index","_","i","setOperator","operator","setConstraintValue","value","matchMode","setConstraintMatchMode","hasFilterValue","c","isFiltered","getFieldFilterMeta","rules","list","columnMeta","filteredData","useFilter","state","getFilterRootProps","display","exposes","resolveFieldData","React","useDataTableGrouping","options","data","groupField","groupMetaMap","map","groups","currentGroupValue","groupStart","i","rowGroupValue","g","group","groupCount","exposes","React","useDataTablePagination","options","_a","_b","_c","_d","_e","data","lazy","paginator","isControlledPage","isControlledRows","internalPage","setInternalPage","internalRows","setInternalRows","currentPage","currentRows","totalRecords","pageCount","first","paginatedData","onPageChange","event","newPage","newFirst","onRowsChange","newRows","newPageCount","exposes","state","React","EMPTY_STATE","DRAGPOINT_TOP","DRAGPOINT_BOTTOM","clearDragpoint","row","useDataTableRowReorder","options","reorderableRows","dragRowIndex","droppedRowIndex","lastMarkedRow","onDragStart","event","rowIndex","onDragOver","rowElement","rect","midY","onDragLeave","onDrop","_a","_b","data","dragIndex","dropIndex","reordered","moved","onDragEnd","handleHandlePointerDown","handleHandlePointerUp","getRowReorderHandleProps","exposes","React","EMPTY_KEYS","getDescendantKeys","node","keys","child","findNode","nodes","key","found","getAncestorKeys","targetKey","path","walk","nodeList","trail","areAllChildrenSelected","selected","hasAnyDescendantSelected","propagateUp","ancestors","i","ancestorKey","ancestorNode","useDataTableSelection","options","_a","data","anchorKeyRef","isControlled","internalSelectedKeys","setInternalSelectedKeys","_b","selectedKeys","getRowKey","item","index","isSelected","treeNodes","rowKeyIndex","map","toggleSelection","event","mode","_c","stringKey","newSelectedKeys","updateAnchor","anchorKey","anchorIndex","currentIndex","start","end","__spreadValues","rangeKey","__spreadProps","isSelecting","descendantKeys","dk","collectAllTreeKeys","selectionSummary","allKeys","selectedCount","n","isAllSelected","isSomeSelected","toggleAll","onRowClick","selectionMode","metaKeySelection","metaKey","shiftKey","rowKey","isPartiallySelected","exposes","state","React","localeComparator","resolveFieldData","sort","comparator","compareValues","valueA","valueB","order","nullSortOrder","sortSingle","data","field","a","b","sortMultiple","multiSortMeta","meta","result","useDataTableSort","options","_a","data","lazy","isSingleControlled","isMultiControlled","internalSortField","setInternalSortField","internalSortOrder","setInternalSortOrder","internalMultiSortMeta","setInternalMultiSortMeta","currentSortField","currentSortOrder","currentMultiSortMeta","isSorted","field","meta","getSortOrder","m","getSortIndex","onSort","event","multiSort","_b","currentOrder","newOrder","newMultiSortMeta","existingIndex","nullSortOrder","sortedData","sortMultiple","sortSingle","getSortProps","sorted","order","sortLabel","handleClick","multi","handleKeyDown","__spreadProps","__spreadValues","exposes","state","BUILT_IN_MATCHERS","getGlobalMatchers","resolveFieldData","React","runMatcher","matchMode","value","filter","locale","_a","matcher","BUILT_IN_MATCHERS","getGlobalMatchers","MAX_TREE_DEPTH","sortTreeNodes","nodes","sortField","sortOrder","depth","a","b","valA","resolveFieldData","valB","compareValues","node","__spreadProps","__spreadValues","sortTreeNodesMulti","multiSortMeta","meta","result","matches","filterValue","nodeMatchesFilters","nodeData","filters","globalFilter","globalFilterFields","_b","field","filterKeys","key","columnMeta","operator","constraints","fieldValue","c","filterTreeNodes","filteredChildren","hasActiveFilters","val","flattenNodes","expandedKeys","level","parentKey","_c","rows","setSize","i","hasLoadedChildren","isExpandable","isLeaf","useDataTableTree","options","data","treeMode","paginator","page","flattenedData","treeNodes","first","totalRootNodes","state","exposes","React","useDataTableKeyboard","options","data","treeMode","selectionMode","expandedKeys","onToggleExpansion","onToggleSelection","getRowKey","keyboardToggleMode","focusedRowIndex","setFocusedRowIndex","getRowTabIndex","index","focusRow","tbody","byDataIndex","onRowKeyDown","event","target","tag","rowCount","handled","nextIndex","item","key","prevIndex","hasChildren","isExpanded","item2","key2","hasChildren2","isExpanded2","parentKey","parentIndex","row","i","item3","key3","state","exposes"]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface UseDataTableColumnReorderEvent {
|
|
3
|
+
/**
|
|
4
|
+
* The original browser event.
|
|
5
|
+
*/
|
|
6
|
+
originalEvent: DragEvent;
|
|
7
|
+
/**
|
|
8
|
+
* Index of the column being dragged.
|
|
9
|
+
*/
|
|
10
|
+
dragIndex: number;
|
|
11
|
+
/**
|
|
12
|
+
* Adjusted index where the column is dropped (accounting for before/after position).
|
|
13
|
+
*/
|
|
14
|
+
dropIndex: number;
|
|
15
|
+
}
|
|
16
|
+
export interface UseDataTableColumnReorderOptions {
|
|
17
|
+
reorderableColumns?: boolean;
|
|
18
|
+
onColumnReorder?: (event: UseDataTableColumnReorderEvent) => void;
|
|
19
|
+
}
|
|
20
|
+
type DropSide = 'start' | 'end';
|
|
21
|
+
type DropTargetNotify = (state: {
|
|
22
|
+
side: DropSide;
|
|
23
|
+
} | null) => void;
|
|
24
|
+
export declare function useDataTableColumnReorder(options: UseDataTableColumnReorderOptions): {
|
|
25
|
+
state: Readonly<{}>;
|
|
26
|
+
exposes: {
|
|
27
|
+
onDragStart: (event: React.DragEvent, columnIndex: number) => void;
|
|
28
|
+
onDragOver: (event: React.DragEvent, columnIndex: number) => void;
|
|
29
|
+
onDragEnter: (event: React.DragEvent, columnIndex: number) => void;
|
|
30
|
+
onDragLeave: (_event: React.DragEvent) => void;
|
|
31
|
+
onDrop: (event: React.DragEvent, columnIndex: number) => void;
|
|
32
|
+
onDragEnd: (_event: React.DragEvent) => void;
|
|
33
|
+
registerDropTarget: (columnIndex: number, notify: DropTargetNotify) => () => void;
|
|
34
|
+
getColumnReorderHandleProps: () => {
|
|
35
|
+
'data-scope': string;
|
|
36
|
+
'data-part': string;
|
|
37
|
+
style: React.CSSProperties;
|
|
38
|
+
};
|
|
39
|
+
getColumnReorderIndicatorUpProps: () => {
|
|
40
|
+
'data-scope': string;
|
|
41
|
+
'data-part': string;
|
|
42
|
+
ref: (el: HTMLElement | null) => void;
|
|
43
|
+
};
|
|
44
|
+
getColumnReorderIndicatorDownProps: () => {
|
|
45
|
+
'data-scope': string;
|
|
46
|
+
'data-part': string;
|
|
47
|
+
ref: (el: HTMLElement | null) => void;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
registerRoot: (el: HTMLElement | null) => void;
|
|
51
|
+
};
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ColumnResizeMode, UseDataTableColumnResizeEvent } from '@primereact/types/headless/datatable';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface UseDataTableColumnResizeOptions {
|
|
4
|
+
resizableColumns?: boolean;
|
|
5
|
+
columnResizeMode?: ColumnResizeMode;
|
|
6
|
+
onColumnResizeEnd?: (event: UseDataTableColumnResizeEvent) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function useDataTableColumnResize(options: UseDataTableColumnResizeOptions): {
|
|
9
|
+
state: Readonly<{}>;
|
|
10
|
+
exposes: {
|
|
11
|
+
onResizeStart: (event: React.PointerEvent, columnIndex: number, headerCell: HTMLElement) => void;
|
|
12
|
+
registerIndicator: (el: HTMLElement | null) => void;
|
|
13
|
+
getColumnResizerProps: (columnIndex?: number) => {
|
|
14
|
+
'data-scope': string;
|
|
15
|
+
'data-part': string;
|
|
16
|
+
style: React.CSSProperties;
|
|
17
|
+
onPointerDown: (event: React.PointerEvent) => void;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|