@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.
Files changed (592) hide show
  1. package/LICENSE.md +45 -0
  2. package/README.md +35 -0
  3. package/accordion/index.d.ts +3 -0
  4. package/accordion/index.mjs +1 -1
  5. package/accordion/index.mjs.map +1 -1
  6. package/accordion/useAccordion.d.ts +7 -6
  7. package/accordion/useAccordion.props.d.ts +2 -2
  8. package/accordion/useAccordionPanel.d.ts +46 -0
  9. package/accordion/useAccordionPanel.props.d.ts +2 -0
  10. package/animateonscroll/index.d.ts +1 -0
  11. package/animateonscroll/index.mjs +1 -1
  12. package/animateonscroll/index.mjs.map +1 -1
  13. package/animateonscroll/useAnimateOnScroll.d.ts +6 -1
  14. package/animateonscroll/useAnimateOnScroll.props.d.ts +2 -2
  15. package/autocomplete/index.d.ts +3 -0
  16. package/autocomplete/index.mjs +2 -0
  17. package/autocomplete/index.mjs.map +1 -0
  18. package/autocomplete/useAutoComplete.d.ts +198 -0
  19. package/autocomplete/useAutoComplete.props.d.ts +2 -0
  20. package/avatar/index.d.ts +1 -0
  21. package/avatar/index.mjs +1 -1
  22. package/avatar/index.mjs.map +1 -1
  23. package/avatar/useAvatar.d.ts +5 -1
  24. package/avatar/useAvatar.props.d.ts +2 -2
  25. package/avatargroup/index.d.ts +3 -0
  26. package/avatargroup/index.mjs +2 -0
  27. package/avatargroup/index.mjs.map +1 -0
  28. package/avatargroup/useAvatarGroup.d.ts +6 -0
  29. package/avatargroup/useAvatarGroup.props.d.ts +2 -0
  30. package/badge/index.d.ts +1 -0
  31. package/badge/index.mjs +1 -1
  32. package/badge/index.mjs.map +1 -1
  33. package/badge/useBadge.d.ts +7 -1
  34. package/badge/useBadge.props.d.ts +2 -2
  35. package/breadcrumb/index.d.ts +1 -0
  36. package/breadcrumb/index.mjs +1 -1
  37. package/breadcrumb/index.mjs.map +1 -1
  38. package/breadcrumb/useBreadcrumb.d.ts +18 -2
  39. package/breadcrumb/useBreadcrumb.props.d.ts +2 -2
  40. package/button/index.d.ts +1 -0
  41. package/button/index.mjs +1 -1
  42. package/button/index.mjs.map +1 -1
  43. package/button/useButton.d.ts +6 -1
  44. package/button/useButton.props.d.ts +2 -2
  45. package/card/index.d.ts +1 -0
  46. package/card/index.mjs +1 -1
  47. package/card/index.mjs.map +1 -1
  48. package/card/useCard.d.ts +6 -1
  49. package/card/useCard.props.d.ts +2 -2
  50. package/carousel/index.d.ts +1 -0
  51. package/carousel/index.mjs +1 -1
  52. package/carousel/index.mjs.map +1 -1
  53. package/carousel/useCarousel.d.ts +101 -5
  54. package/carousel/useCarousel.props.d.ts +2 -2
  55. package/checkbox/index.d.ts +1 -0
  56. package/checkbox/index.mjs +1 -1
  57. package/checkbox/index.mjs.map +1 -1
  58. package/checkbox/useCheckbox.d.ts +44 -3
  59. package/checkbox/useCheckbox.props.d.ts +2 -2
  60. package/checkboxgroup/index.d.ts +3 -0
  61. package/checkboxgroup/index.mjs +2 -0
  62. package/checkboxgroup/index.mjs.map +1 -0
  63. package/checkboxgroup/useCheckboxGroup.d.ts +11 -0
  64. package/checkboxgroup/useCheckboxGroup.props.d.ts +2 -0
  65. package/chip/index.d.ts +1 -0
  66. package/chip/index.mjs +1 -1
  67. package/chip/index.mjs.map +1 -1
  68. package/chip/useChip.d.ts +9 -3
  69. package/chip/useChip.props.d.ts +2 -2
  70. package/collapsible/index.d.ts +3 -0
  71. package/collapsible/index.mjs +2 -0
  72. package/collapsible/index.mjs.map +1 -0
  73. package/collapsible/useCollapsible.d.ts +33 -0
  74. package/collapsible/useCollapsible.props.d.ts +2 -0
  75. package/compare/index.d.ts +3 -0
  76. package/compare/index.mjs +2 -0
  77. package/compare/index.mjs.map +1 -0
  78. package/compare/useCompare.d.ts +2 -0
  79. package/compare/useCompare.props.d.ts +2 -0
  80. package/contextmenu/index.d.ts +1 -0
  81. package/contextmenu/index.mjs +1 -1
  82. package/contextmenu/index.mjs.map +1 -1
  83. package/contextmenu/submenu/index.d.ts +2 -0
  84. package/contextmenu/submenu/index.mjs +2 -0
  85. package/contextmenu/submenu/index.mjs.map +1 -0
  86. package/contextmenu/submenu/useContextMenuSubmenu.d.ts +121 -0
  87. package/contextmenu/submenu/useContextMenuSubmenu.props.d.ts +2 -0
  88. package/contextmenu/useContextMenu.d.ts +413 -1
  89. package/contextmenu/useContextMenu.props.d.ts +2 -2
  90. package/datatable/features/index.d.ts +28 -0
  91. package/datatable/features/index.mjs +11 -0
  92. package/datatable/features/index.mjs.map +1 -0
  93. package/datatable/features/useDataTableColumnReorder.d.ts +52 -0
  94. package/datatable/features/useDataTableColumnResize.d.ts +20 -0
  95. package/datatable/features/useDataTableEditing.d.ts +69 -0
  96. package/datatable/features/useDataTableExpansion.d.ts +32 -0
  97. package/datatable/features/useDataTableExport.d.ts +43 -0
  98. package/datatable/features/useDataTableFilter.d.ts +95 -0
  99. package/datatable/features/useDataTableGrouping.d.ts +11 -0
  100. package/datatable/features/useDataTableKeyboard.d.ts +23 -0
  101. package/datatable/features/useDataTablePagination.d.ts +32 -0
  102. package/datatable/features/useDataTableRowReorder.d.ts +42 -0
  103. package/datatable/features/useDataTableSelection.d.ts +28 -0
  104. package/datatable/features/useDataTableSort.d.ts +51 -0
  105. package/datatable/features/useDataTableTree.d.ts +31 -0
  106. package/datatable/index.d.ts +7 -0
  107. package/datatable/index.mjs +11 -0
  108. package/datatable/index.mjs.map +1 -0
  109. package/datatable/useDataTable.d.ts +237 -0
  110. package/datatable/useDataTable.props.d.ts +2 -0
  111. package/datatable/useDataTableRow.d.ts +30 -0
  112. package/datatable/useDataTableRow.props.d.ts +2 -0
  113. package/datatable/utils/compareValues.d.ts +20 -0
  114. package/datatable/utils/index.d.ts +1 -0
  115. package/datatable/utils/index.mjs +2 -0
  116. package/datatable/utils/index.mjs.map +1 -0
  117. package/dataview/index.d.ts +1 -0
  118. package/dataview/index.mjs +1 -1
  119. package/dataview/index.mjs.map +1 -1
  120. package/dataview/useDataView.d.ts +25 -1
  121. package/dataview/useDataView.props.d.ts +2 -2
  122. package/datepicker/index.d.ts +1 -0
  123. package/datepicker/index.mjs +1 -1
  124. package/datepicker/index.mjs.map +1 -1
  125. package/datepicker/useDatePicker.d.ts +2 -114
  126. package/datepicker/useDatePicker.props.d.ts +2 -2
  127. package/dialog/index.d.ts +1 -0
  128. package/dialog/index.mjs +1 -1
  129. package/dialog/index.mjs.map +1 -1
  130. package/dialog/useDialog.d.ts +274 -24
  131. package/dialog/useDialog.props.d.ts +2 -2
  132. package/divider/index.d.ts +1 -0
  133. package/divider/index.mjs +1 -1
  134. package/divider/index.mjs.map +1 -1
  135. package/divider/useDivider.d.ts +14 -1
  136. package/divider/useDivider.props.d.ts +2 -2
  137. package/dnd/index.d.ts +11 -0
  138. package/dnd/index.mjs +2 -0
  139. package/dnd/index.mjs.map +1 -0
  140. package/dnd/useDnd.d.ts +45 -0
  141. package/dnd/useDnd.props.d.ts +2 -0
  142. package/dnd/useDraggable.d.ts +14 -0
  143. package/dnd/useDraggable.props.d.ts +2 -0
  144. package/dnd/useDroppable.d.ts +11 -0
  145. package/dnd/useDroppable.props.d.ts +2 -0
  146. package/dnd/useSortable.d.ts +11 -0
  147. package/dnd/useSortable.props.d.ts +2 -0
  148. package/dnd/useSortableContainer.d.ts +24 -0
  149. package/dnd/useSortableContainer.props.d.ts +2 -0
  150. package/drawer/index.d.ts +1 -0
  151. package/drawer/index.mjs +1 -1
  152. package/drawer/index.mjs.map +1 -1
  153. package/drawer/useDrawer.d.ts +78 -16
  154. package/drawer/useDrawer.props.d.ts +2 -2
  155. package/fieldset/index.d.ts +1 -0
  156. package/fieldset/index.mjs +1 -1
  157. package/fieldset/index.mjs.map +1 -1
  158. package/fieldset/useFieldset.d.ts +80 -1
  159. package/fieldset/useFieldset.props.d.ts +2 -2
  160. package/fileupload/index.d.ts +1 -0
  161. package/fileupload/index.mjs +1 -1
  162. package/fileupload/index.mjs.map +1 -1
  163. package/fileupload/useFileUpload.d.ts +73 -4
  164. package/fileupload/useFileUpload.props.d.ts +2 -2
  165. package/floatlabel/index.d.ts +3 -0
  166. package/floatlabel/index.mjs +2 -0
  167. package/floatlabel/index.mjs.map +1 -0
  168. package/floatlabel/useFloatLabel.d.ts +6 -0
  169. package/floatlabel/useFloatLabel.props.d.ts +2 -0
  170. package/fluid/index.d.ts +1 -0
  171. package/fluid/index.mjs +1 -1
  172. package/fluid/index.mjs.map +1 -1
  173. package/fluid/useFluid.d.ts +6 -1
  174. package/fluid/useFluid.props.d.ts +2 -2
  175. package/focustrap/index.d.ts +1 -0
  176. package/focustrap/index.mjs +1 -1
  177. package/focustrap/index.mjs.map +1 -1
  178. package/focustrap/useFocusTrap.d.ts +16 -3
  179. package/focustrap/useFocusTrap.props.d.ts +2 -2
  180. package/gallery/index.d.ts +1 -0
  181. package/gallery/index.mjs +1 -1
  182. package/gallery/index.mjs.map +1 -1
  183. package/gallery/item/index.mjs +1 -1
  184. package/gallery/item/index.mjs.map +1 -1
  185. package/gallery/item/useGalleryItem.d.ts +17 -7
  186. package/gallery/item/useGalleryItem.props.d.ts +2 -2
  187. package/gallery/useGallery.d.ts +147 -6
  188. package/gallery/useGallery.props.d.ts +2 -2
  189. package/iconfield/index.d.ts +1 -0
  190. package/iconfield/index.mjs +1 -1
  191. package/iconfield/index.mjs.map +1 -1
  192. package/iconfield/useIconField.d.ts +6 -1
  193. package/iconfield/useIconField.props.d.ts +2 -2
  194. package/iftalabel/index.d.ts +3 -0
  195. package/iftalabel/index.mjs +2 -0
  196. package/iftalabel/index.mjs.map +1 -0
  197. package/iftalabel/useIftaLabel.d.ts +6 -0
  198. package/iftalabel/useIftaLabel.props.d.ts +2 -0
  199. package/inplace/index.d.ts +1 -0
  200. package/inplace/index.mjs +1 -1
  201. package/inplace/index.mjs.map +1 -1
  202. package/inplace/useInplace.d.ts +21 -2
  203. package/inplace/useInplace.props.d.ts +2 -2
  204. package/{colorpicker → inputcolor}/colorManager.d.ts +3 -2
  205. package/inputcolor/index.d.ts +4 -0
  206. package/inputcolor/index.mjs +2 -0
  207. package/inputcolor/index.mjs.map +1 -0
  208. package/inputcolor/useInputColor.d.ts +119 -0
  209. package/inputcolor/useInputColor.props.d.ts +2 -0
  210. package/inputgroup/index.d.ts +1 -0
  211. package/inputgroup/index.mjs +1 -1
  212. package/inputgroup/index.mjs.map +1 -1
  213. package/inputgroup/useInputGroup.d.ts +6 -1
  214. package/inputgroup/useInputGroup.props.d.ts +2 -2
  215. package/inputnumber/index.d.ts +1 -0
  216. package/inputnumber/index.mjs +1 -1
  217. package/inputnumber/index.mjs.map +1 -1
  218. package/inputnumber/useInputNumber.d.ts +55 -17
  219. package/inputnumber/useInputNumber.props.d.ts +2 -2
  220. package/inputotp/index.d.ts +1 -0
  221. package/inputotp/index.mjs +1 -1
  222. package/inputotp/index.mjs.map +1 -1
  223. package/inputotp/useInputOtp.d.ts +25 -6
  224. package/inputotp/useInputOtp.props.d.ts +2 -2
  225. package/inputpassword/index.d.ts +3 -0
  226. package/inputpassword/index.mjs +2 -0
  227. package/inputpassword/index.mjs.map +1 -0
  228. package/inputpassword/useInputPassword.d.ts +15 -0
  229. package/inputpassword/useInputPassword.props.d.ts +2 -0
  230. package/inputtags/index.d.ts +1 -0
  231. package/inputtags/index.mjs +1 -1
  232. package/inputtags/index.mjs.map +1 -1
  233. package/inputtags/useInputTags.d.ts +42 -12
  234. package/inputtags/useInputTags.props.d.ts +2 -2
  235. package/inputtext/index.d.ts +1 -0
  236. package/inputtext/index.mjs +1 -1
  237. package/inputtext/index.mjs.map +1 -1
  238. package/inputtext/useInputText.d.ts +8 -1
  239. package/inputtext/useInputText.props.d.ts +2 -2
  240. package/knob/index.d.ts +1 -0
  241. package/knob/index.mjs +1 -1
  242. package/knob/index.mjs.map +1 -1
  243. package/knob/useKnob.d.ts +51 -10
  244. package/knob/useKnob.props.d.ts +2 -2
  245. package/label/index.d.ts +1 -0
  246. package/label/index.mjs +1 -1
  247. package/label/index.mjs.map +1 -1
  248. package/label/useLabel.d.ts +6 -1
  249. package/label/useLabel.props.d.ts +2 -2
  250. package/listbox/index.d.ts +3 -0
  251. package/listbox/index.mjs +1 -1
  252. package/listbox/index.mjs.map +1 -1
  253. package/listbox/useListbox.d.ts +56 -18
  254. package/listbox/useListbox.props.d.ts +2 -2
  255. package/listbox/useListboxOption.d.ts +21 -0
  256. package/listbox/useListboxOption.props.d.ts +2 -0
  257. package/menu/checkboxitem/index.d.ts +2 -0
  258. package/menu/checkboxitem/index.mjs +2 -0
  259. package/menu/checkboxitem/index.mjs.map +1 -0
  260. package/menu/checkboxitem/useMenuCheckboxItem.d.ts +112 -0
  261. package/menu/checkboxitem/useMenuCheckboxItem.props.d.ts +2 -0
  262. package/menu/index.d.ts +1 -0
  263. package/menu/index.mjs +1 -1
  264. package/menu/index.mjs.map +1 -1
  265. package/menu/radioitem/index.d.ts +2 -0
  266. package/menu/radioitem/index.mjs +2 -0
  267. package/menu/radioitem/index.mjs.map +1 -0
  268. package/menu/radioitem/useMenuRadioItem.d.ts +106 -0
  269. package/menu/radioitem/useMenuRadioItem.props.d.ts +2 -0
  270. package/menu/submenu/index.d.ts +2 -0
  271. package/menu/submenu/index.mjs +2 -0
  272. package/menu/submenu/index.mjs.map +1 -0
  273. package/menu/submenu/useMenuSubmenu.d.ts +97 -0
  274. package/menu/submenu/useMenuSubmenu.props.d.ts +2 -0
  275. package/menu/useMenu.d.ts +215 -22
  276. package/menu/useMenu.props.d.ts +2 -2
  277. package/message/index.d.ts +1 -0
  278. package/message/index.mjs +1 -1
  279. package/message/index.mjs.map +1 -1
  280. package/message/useMessage.d.ts +13 -1
  281. package/message/useMessage.props.d.ts +2 -2
  282. package/metergroup/index.d.ts +1 -0
  283. package/metergroup/index.mjs +1 -1
  284. package/metergroup/index.mjs.map +1 -1
  285. package/metergroup/useMeterGroup.d.ts +36 -5
  286. package/metergroup/useMeterGroup.props.d.ts +2 -2
  287. package/navigationmenu/index.d.ts +3 -0
  288. package/navigationmenu/index.mjs +2 -0
  289. package/navigationmenu/index.mjs.map +1 -0
  290. package/navigationmenu/useNavigationMenu.d.ts +30 -0
  291. package/navigationmenu/useNavigationMenu.props.d.ts +2 -0
  292. package/orderlist/index.d.ts +3 -0
  293. package/orderlist/index.mjs +2 -0
  294. package/orderlist/index.mjs.map +1 -0
  295. package/orderlist/useOrderList.d.ts +73 -0
  296. package/orderlist/useOrderList.props.d.ts +2 -0
  297. package/organizationchart/index.d.ts +3 -0
  298. package/organizationchart/index.mjs +2 -0
  299. package/organizationchart/index.mjs.map +1 -0
  300. package/organizationchart/useOrganizationChart.d.ts +69 -0
  301. package/organizationchart/useOrganizationChart.props.d.ts +2 -0
  302. package/overlaybadge/index.d.ts +3 -0
  303. package/overlaybadge/index.mjs +2 -0
  304. package/overlaybadge/index.mjs.map +1 -0
  305. package/overlaybadge/useOverlayBadge.d.ts +1 -0
  306. package/overlaybadge/useOverlayBadge.props.d.ts +2 -0
  307. package/package.json +12 -15
  308. package/paginator/index.d.ts +1 -0
  309. package/paginator/index.mjs +1 -1
  310. package/paginator/index.mjs.map +1 -1
  311. package/paginator/usePaginator.d.ts +47 -1
  312. package/paginator/usePaginator.props.d.ts +2 -2
  313. package/panel/index.d.ts +1 -0
  314. package/panel/index.mjs +1 -1
  315. package/panel/index.mjs.map +1 -1
  316. package/panel/usePanel.d.ts +76 -8
  317. package/panel/usePanel.props.d.ts +2 -2
  318. package/picklist/index.d.ts +3 -0
  319. package/picklist/index.mjs +2 -0
  320. package/picklist/index.mjs.map +1 -0
  321. package/picklist/usePickList.d.ts +153 -0
  322. package/picklist/usePickList.props.d.ts +2 -0
  323. package/popover/index.d.ts +1 -0
  324. package/popover/index.mjs +1 -7
  325. package/popover/index.mjs.map +1 -1
  326. package/popover/usePopover.d.ts +65 -12
  327. package/popover/usePopover.props.d.ts +2 -2
  328. package/portal/index.d.ts +1 -0
  329. package/portal/index.mjs +1 -1
  330. package/portal/index.mjs.map +1 -1
  331. package/portal/usePortal.d.ts +4 -2
  332. package/portal/usePortal.props.d.ts +2 -2
  333. package/positioner/index.d.ts +3 -0
  334. package/positioner/index.mjs +2 -0
  335. package/positioner/index.mjs.map +1 -0
  336. package/positioner/usePositioner.anchor.d.ts +7 -0
  337. package/positioner/usePositioner.d.ts +11 -0
  338. package/positioner/usePositioner.fallback.d.ts +13 -0
  339. package/positioner/usePositioner.props.d.ts +2 -0
  340. package/positioner/usePositioner.utils.d.ts +21 -0
  341. package/progressbar/index.d.ts +1 -0
  342. package/progressbar/index.mjs +1 -1
  343. package/progressbar/index.mjs.map +1 -1
  344. package/progressbar/useProgressBar.d.ts +13 -1
  345. package/progressbar/useProgressBar.props.d.ts +2 -2
  346. package/progressspinner/index.d.ts +1 -0
  347. package/progressspinner/index.mjs +1 -1
  348. package/progressspinner/index.mjs.map +1 -1
  349. package/progressspinner/useProgressSpinner.d.ts +50 -1
  350. package/progressspinner/useProgressSpinner.props.d.ts +2 -2
  351. package/radiobutton/index.d.ts +1 -0
  352. package/radiobutton/index.mjs +1 -1
  353. package/radiobutton/index.mjs.map +1 -1
  354. package/radiobutton/useRadioButton.d.ts +41 -3
  355. package/radiobutton/useRadioButton.props.d.ts +2 -2
  356. package/radiobuttongroup/index.d.ts +3 -0
  357. package/radiobuttongroup/index.mjs +2 -0
  358. package/radiobuttongroup/index.mjs.map +1 -0
  359. package/radiobuttongroup/useRadioButtonGroup.d.ts +11 -0
  360. package/radiobuttongroup/useRadioButtonGroup.props.d.ts +2 -0
  361. package/rating/index.d.ts +3 -0
  362. package/rating/index.mjs +1 -1
  363. package/rating/index.mjs.map +1 -1
  364. package/rating/useRating.d.ts +46 -12
  365. package/rating/useRating.props.d.ts +2 -2
  366. package/rating/useRatingOption.d.ts +69 -0
  367. package/rating/useRatingOption.props.d.ts +2 -0
  368. package/scrollarea/index.d.ts +1 -0
  369. package/scrollarea/index.mjs +1 -1
  370. package/scrollarea/index.mjs.map +1 -1
  371. package/scrollarea/useScrollArea.d.ts +120 -15
  372. package/scrollarea/useScrollArea.props.d.ts +2 -2
  373. package/select/index.d.ts +3 -0
  374. package/select/index.mjs +2 -0
  375. package/select/index.mjs.map +1 -0
  376. package/select/useSelect.d.ts +190 -0
  377. package/select/useSelect.props.d.ts +2 -0
  378. package/select/useSelect.test.d.ts +1 -0
  379. package/sidebar/index.d.ts +7 -0
  380. package/sidebar/index.mjs +2 -0
  381. package/sidebar/index.mjs.map +1 -0
  382. package/sidebar/useSidebar.d.ts +117 -0
  383. package/sidebar/useSidebar.props.d.ts +2 -0
  384. package/sidebar/useSidebarLayout.d.ts +24 -0
  385. package/sidebar/useSidebarLayout.props.d.ts +2 -0
  386. package/sidebar/useSidebarMenuItem.d.ts +11 -0
  387. package/sidebar/useSidebarMenuItem.props.d.ts +2 -0
  388. package/skeleton/index.d.ts +1 -0
  389. package/skeleton/index.mjs +1 -1
  390. package/skeleton/index.mjs.map +1 -1
  391. package/skeleton/useSkeleton.d.ts +7 -1
  392. package/skeleton/useSkeleton.props.d.ts +2 -2
  393. package/slider/index.d.ts +1 -0
  394. package/slider/index.mjs +1 -1
  395. package/slider/index.mjs.map +1 -1
  396. package/slider/useSlider.d.ts +81 -48
  397. package/slider/useSlider.props.d.ts +2 -2
  398. package/speeddial/index.d.ts +1 -0
  399. package/speeddial/index.mjs +1 -1
  400. package/speeddial/index.mjs.map +1 -1
  401. package/speeddial/useSpeedDial.d.ts +89 -32
  402. package/speeddial/useSpeedDial.props.d.ts +2 -2
  403. package/splitter/index.d.ts +1 -0
  404. package/splitter/index.mjs +1 -1
  405. package/splitter/index.mjs.map +1 -1
  406. package/splitter/useSplitter.d.ts +57 -14
  407. package/splitter/useSplitter.props.d.ts +2 -2
  408. package/stepper/index.d.ts +1 -0
  409. package/stepper/index.mjs +1 -1
  410. package/stepper/index.mjs.map +1 -1
  411. package/stepper/useStepper.d.ts +47 -2
  412. package/stepper/useStepper.props.d.ts +2 -2
  413. package/styleclass/index.d.ts +1 -0
  414. package/styleclass/index.mjs +1 -1
  415. package/styleclass/index.mjs.map +1 -1
  416. package/styleclass/useStyleClass.d.ts +5 -1
  417. package/styleclass/useStyleClass.props.d.ts +2 -2
  418. package/tabs/index.d.ts +1 -0
  419. package/tabs/index.mjs +1 -1
  420. package/tabs/index.mjs.map +1 -1
  421. package/tabs/useTabs.d.ts +42 -3
  422. package/tabs/useTabs.props.d.ts +2 -2
  423. package/tag/index.d.ts +1 -0
  424. package/tag/index.mjs +1 -1
  425. package/tag/index.mjs.map +1 -1
  426. package/tag/useTag.d.ts +6 -1
  427. package/tag/useTag.props.d.ts +2 -2
  428. package/terminal/index.d.ts +1 -0
  429. package/terminal/index.mjs +1 -1
  430. package/terminal/index.mjs.map +1 -1
  431. package/terminal/useTerminal.d.ts +23 -2
  432. package/terminal/useTerminal.props.d.ts +2 -2
  433. package/textarea/index.d.ts +1 -0
  434. package/textarea/index.mjs +1 -1
  435. package/textarea/index.mjs.map +1 -1
  436. package/textarea/useTextarea.d.ts +9 -2
  437. package/textarea/useTextarea.props.d.ts +2 -2
  438. package/timeline/index.d.ts +1 -0
  439. package/timeline/index.mjs +1 -1
  440. package/timeline/index.mjs.map +1 -1
  441. package/timeline/useTimeline.d.ts +41 -1
  442. package/timeline/useTimeline.props.d.ts +2 -2
  443. package/toast/index.d.ts +1 -1
  444. package/toast/index.mjs +1 -1
  445. package/toast/index.mjs.map +1 -1
  446. package/toast/useToast.d.ts +85 -23
  447. package/toast/useToast.props.d.ts +2 -2
  448. package/toaster/ToastManager.d.ts +14 -0
  449. package/toaster/index.d.ts +4 -0
  450. package/toaster/index.mjs +2 -0
  451. package/toaster/index.mjs.map +1 -0
  452. package/toaster/useToaster.d.ts +50 -0
  453. package/toaster/useToaster.props.d.ts +2 -0
  454. package/togglebutton/index.d.ts +1 -0
  455. package/togglebutton/index.mjs +1 -1
  456. package/togglebutton/index.mjs.map +1 -1
  457. package/togglebutton/useToggleButton.d.ts +5 -3
  458. package/togglebutton/useToggleButton.props.d.ts +2 -2
  459. package/togglebuttongroup/index.d.ts +3 -0
  460. package/togglebuttongroup/index.mjs +2 -0
  461. package/togglebuttongroup/index.mjs.map +1 -0
  462. package/togglebuttongroup/useToggleButtonGroup.d.ts +17 -0
  463. package/togglebuttongroup/useToggleButtonGroup.props.d.ts +2 -0
  464. package/toggleswitch/index.d.ts +3 -0
  465. package/toggleswitch/index.mjs +2 -0
  466. package/toggleswitch/index.mjs.map +1 -0
  467. package/toggleswitch/useToggleSwitch.d.ts +48 -0
  468. package/toggleswitch/useToggleSwitch.props.d.ts +2 -0
  469. package/toolbar/index.d.ts +1 -0
  470. package/toolbar/index.mjs +1 -1
  471. package/toolbar/index.mjs.map +1 -1
  472. package/toolbar/useToolbar.d.ts +7 -1
  473. package/toolbar/useToolbar.props.d.ts +2 -2
  474. package/tooltip/index.d.ts +1 -0
  475. package/tooltip/index.mjs +1 -1
  476. package/tooltip/index.mjs.map +1 -1
  477. package/tooltip/useTooltip.d.ts +43 -24
  478. package/tooltip/useTooltip.props.d.ts +2 -2
  479. package/tooltipmanager/index.d.ts +2 -0
  480. package/tooltipmanager/index.mjs +2 -0
  481. package/tooltipmanager/index.mjs.map +1 -0
  482. package/tooltipmanager/useTooltipManager.d.ts +12 -0
  483. package/tooltipmanager/useTooltipManager.props.d.ts +2 -0
  484. package/tooltipmanager/useTooltipManager.test.d.ts +0 -0
  485. package/tree/TreeDragDropService.d.ts +13 -5
  486. package/tree/index.d.ts +7 -0
  487. package/tree/index.mjs +1 -1
  488. package/tree/index.mjs.map +1 -1
  489. package/tree/useTree.d.ts +96 -16
  490. package/tree/useTree.props.d.ts +2 -2
  491. package/tree/useTreeDragDrop.d.ts +24 -0
  492. package/tree/useTreeFlatten.d.ts +13 -0
  493. package/tree/useTreeKeyboard.d.ts +18 -0
  494. package/tree/useTreeNode.d.ts +45 -0
  495. package/tree/useTreeNode.props.d.ts +2 -0
  496. package/tree/useTreeSelection.d.ts +31 -0
  497. package/utils/itemKey.d.ts +10 -0
  498. package/LICENSE +0 -21
  499. package/colorpicker/index.d.ts +0 -3
  500. package/colorpicker/index.mjs +0 -2
  501. package/colorpicker/index.mjs.map +0 -1
  502. package/colorpicker/input/index.d.ts +0 -2
  503. package/colorpicker/input/index.mjs +0 -2
  504. package/colorpicker/input/index.mjs.map +0 -1
  505. package/colorpicker/input/useColorPickerInput.d.ts +0 -11
  506. package/colorpicker/input/useColorPickerInput.props.d.ts +0 -2
  507. package/colorpicker/slider/index.d.ts +0 -2
  508. package/colorpicker/slider/index.mjs +0 -2
  509. package/colorpicker/slider/index.mjs.map +0 -1
  510. package/colorpicker/slider/useColorPickerSlider.d.ts +0 -13
  511. package/colorpicker/slider/useColorPickerSlider.props.d.ts +0 -2
  512. package/colorpicker/useColorPicker.d.ts +0 -26
  513. package/colorpicker/useColorPicker.props.d.ts +0 -2
  514. package/commandmenu/index.d.ts +0 -2
  515. package/commandmenu/index.mjs +0 -2
  516. package/commandmenu/index.mjs.map +0 -1
  517. package/commandmenu/useCommandMenu.d.ts +0 -11
  518. package/commandmenu/useCommandMenu.props.d.ts +0 -2
  519. package/confirmdialog/index.d.ts +0 -2
  520. package/confirmdialog/index.mjs +0 -2
  521. package/confirmdialog/index.mjs.map +0 -1
  522. package/confirmdialog/useConfirmDialog.d.ts +0 -1
  523. package/confirmdialog/useConfirmDialog.props.d.ts +0 -2
  524. package/confirmpopup/index.d.ts +0 -2
  525. package/confirmpopup/index.mjs +0 -2
  526. package/confirmpopup/index.mjs.map +0 -1
  527. package/confirmpopup/useConfirmPopup.d.ts +0 -25
  528. package/confirmpopup/useConfirmPopup.props.d.ts +0 -2
  529. package/imagecompare/index.d.ts +0 -2
  530. package/imagecompare/index.mjs +0 -2
  531. package/imagecompare/index.mjs.map +0 -1
  532. package/imagecompare/useImageCompare.d.ts +0 -8
  533. package/imagecompare/useImageCompare.props.d.ts +0 -2
  534. package/menu/sub/index.d.ts +0 -2
  535. package/menu/sub/index.mjs +0 -2
  536. package/menu/sub/index.mjs.map +0 -1
  537. package/menu/sub/useMenuSub.d.ts +0 -19
  538. package/menu/sub/useMenuSub.props.d.ts +0 -2
  539. package/orgchart/index.d.ts +0 -2
  540. package/orgchart/index.mjs +0 -2
  541. package/orgchart/index.mjs.map +0 -1
  542. package/orgchart/useOrgChart.d.ts +0 -20
  543. package/orgchart/useOrgChart.props.d.ts +0 -2
  544. package/overlay/index.d.ts +0 -2
  545. package/overlay/index.mjs +0 -2
  546. package/overlay/index.mjs.map +0 -1
  547. package/overlay/useOverlay.d.ts +0 -16
  548. package/overlay/useOverlay.props.d.ts +0 -2
  549. package/password/index.d.ts +0 -2
  550. package/password/index.mjs +0 -2
  551. package/password/index.mjs.map +0 -1
  552. package/password/usePassword.d.ts +0 -35
  553. package/password/usePassword.props.d.ts +0 -2
  554. package/placer/index.d.ts +0 -2
  555. package/placer/index.mjs +0 -2
  556. package/placer/index.mjs.map +0 -1
  557. package/placer/usePlacer.d.ts +0 -12
  558. package/placer/usePlacer.props.d.ts +0 -2
  559. package/switch/index.d.ts +0 -2
  560. package/switch/index.mjs +0 -2
  561. package/switch/index.mjs.map +0 -1
  562. package/switch/useSwitch.d.ts +0 -7
  563. package/switch/useSwitch.props.d.ts +0 -2
  564. package/toast/item/index.css +0 -2
  565. package/toast/item/index.css.map +0 -1
  566. package/toast/item/index.d.ts +0 -2
  567. package/toast/item/index.mjs +0 -2
  568. package/toast/item/index.mjs.map +0 -1
  569. package/toast/item/useToastItem.d.ts +0 -25
  570. package/toast/item/useToastItem.props.d.ts +0 -2
  571. package/toast/toastStore.d.ts +0 -40
  572. package/tooltip/group/index.d.ts +0 -2
  573. package/tooltip/group/index.mjs +0 -2
  574. package/tooltip/group/index.mjs.map +0 -1
  575. package/tooltip/group/useTooltipGroup.d.ts +0 -9
  576. package/tooltip/group/useTooltipGroup.props.d.ts +0 -2
  577. /package/{colorpicker/input/useColorPickerInput.test.d.ts → autocomplete/useAutoComplete.test.d.ts} +0 -0
  578. /package/{colorpicker/slider/useColorPickerSlider.test.d.ts → checkboxgroup/useCheckboxGroup.test.d.ts} +0 -0
  579. /package/{colorpicker/useColorPicker.test.d.ts → collapsible/useCollapsible.test.d.ts} +0 -0
  580. /package/{commandmenu/useCommandMenu.test.d.ts → compare/useCompare.test.d.ts} +0 -0
  581. /package/{confirmdialog/useConfirmDialog.test.d.ts → floatlabel/useFloatLabel.test.d.ts} +0 -0
  582. /package/{confirmpopup/useConfirmPopup.test.d.ts → iftalabel/useIftaLabel.test.d.ts} +0 -0
  583. /package/{imagecompare/useImageCompare.test.d.ts → inputcolor/useInputColor.test.d.ts} +0 -0
  584. /package/{orgchart/useOrgChart.test.d.ts → inputpassword/useInputPassword.test.d.ts} +0 -0
  585. /package/{overlay/useOverlay.test.d.ts → navigationmenu/useNavigationMenu.test.d.ts} +0 -0
  586. /package/{password/usePassword.test.d.ts → organizationchart/useOrganizationChart.test.d.ts} +0 -0
  587. /package/{placer/usePlacer.test.d.ts → overlaybadge/useOverlayBadge.test.d.ts} +0 -0
  588. /package/{progressspinner/useProgressSpinner.test.d.ts → positioner/usePositioner.test.d.ts} +0 -0
  589. /package/{rating/useRating.test.d.ts → radiobuttongroup/useRadioButtonGroup.test.d.ts} +0 -0
  590. /package/{switch/useSwitch.test.d.ts → toaster/useToaster.test.d.ts} +0 -0
  591. /package/{toast/item/useToastItem.test.d.ts → togglebuttongroup/useToggleButtonGroup.test.d.ts} +0 -0
  592. /package/{tooltip/group/useTooltipGroup.test.d.ts → toggleswitch/useToggleSwitch.test.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/datatable/useDataTable.ts","../../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","../../src/datatable/useDataTable.props.ts","../../src/datatable/useDataTableRow.ts","../../src/datatable/useDataTableRow.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport * as React from 'react';\nimport { useDataTableColumnReorder } from './features/useDataTableColumnReorder';\nimport { useDataTableColumnResize } from './features/useDataTableColumnResize';\nimport { useDataTableEditing } from './features/useDataTableEditing';\nimport { useDataTableExpansion } from './features/useDataTableExpansion';\nimport { useDataTableExport } from './features/useDataTableExport';\nimport { useDataTableFilter } from './features/useDataTableFilter';\nimport { useDataTableGrouping } from './features/useDataTableGrouping';\nimport { useDataTablePagination } from './features/useDataTablePagination';\nimport { useDataTableRowReorder } from './features/useDataTableRowReorder';\nimport { useDataTableSelection } from './features/useDataTableSelection';\nimport { useDataTableSort } from './features/useDataTableSort';\nimport { filterTreeNodes, hasActiveFilters, useDataTableTree } from './features/useDataTableTree';\nimport { useDataTableKeyboard } from './features/useDataTableKeyboard';\nimport type { TreeNode } from './features/useDataTableTree';\nimport { defaultProps } from './useDataTable.props';\n\nexport const useDataTable = withHeadless({\n name: 'useDataTable',\n defaultProps,\n setup({ props }) {\n const rawData = (props.data ?? []) as Record<string, unknown>[];\n const isTreeMode = props.treeMode === true;\n\n // In tree mode the tree hook re-runs sort/filter; the flat hooks just track state.\n const effectiveLazy = isTreeMode || props.lazy;\n\n // Expansion must initialise before tree flatten.\n const expansion = useDataTableExpansion({\n expandedKeys: props.expandedKeys,\n defaultExpandedKeys: props.defaultExpandedKeys,\n onExpandedChange: props.onExpandedChange\n });\n\n const filter = useDataTableFilter({\n data: rawData,\n lazy: effectiveLazy,\n filters: props.filters,\n defaultFilters: props.defaultFilters,\n globalFilter: props.globalFilter,\n globalFilterFields: props.globalFilterFields,\n filterDelay: props.filterDelay,\n onFilter: props.onFilter\n });\n\n const sort = useDataTableSort({\n data: filter.filteredData,\n lazy: effectiveLazy,\n sortField: props.sortField,\n sortOrder: props.sortOrder,\n defaultSortField: props.defaultSortField,\n defaultSortOrder: props.defaultSortOrder,\n multiSortMeta: props.multiSortMeta,\n defaultMultiSortMeta: props.defaultMultiSortMeta,\n removableSort: props.removableSort,\n nullSortOrder: props.nullSortOrder,\n onSortChange: props.onSortChange\n });\n\n // Root-node count after filtering, used for tree-mode pagination.\n const treeTotalRootNodes = React.useMemo(() => {\n if (!isTreeMode) return 0;\n\n const treeNodes = rawData as unknown as TreeNode[];\n const filters = filter.state.filters ?? {};\n const gf = filter.state.globalFilter ?? null;\n const gfFields = props.globalFilterFields ?? [];\n\n if (hasActiveFilters(filters, gf)) {\n return filterTreeNodes(treeNodes, filters, gf, gfFields).length;\n }\n\n return treeNodes.length;\n }, [isTreeMode, rawData, filter.state.filters, filter.state.globalFilter, props.globalFilterFields]);\n\n // In tree mode the tree hook slices roots itself, so the paginator runs in lazy mode.\n const pagination = useDataTablePagination({\n data: sort.sortedData,\n lazy: isTreeMode ? true : props.lazy,\n totalRecords: isTreeMode ? treeTotalRootNodes : props.totalRecords,\n paginator: props.paginator,\n page: props.page,\n defaultPage: props.defaultPage,\n rows: props.rows,\n defaultRows: props.defaultRows,\n onPageChange: props.onPageChange\n });\n\n const tree = useDataTableTree({\n data: rawData,\n treeMode: isTreeMode,\n expandedKeys: expansion.state.expandedKeys,\n sortField: sort.state.sortField,\n sortOrder: sort.state.sortOrder,\n multiSortMeta: sort.state.multiSortMeta,\n filters: filter.state.filters,\n globalFilter: filter.state.globalFilter,\n globalFilterFields: props.globalFilterFields,\n paginator: props.paginator,\n page: pagination.state.page,\n rows: pagination.state.rows\n });\n\n const processedData = isTreeMode ? tree.flattenedData : sort.sortedData;\n\n const grouping = useDataTableGrouping({\n data: processedData,\n groupField: isTreeMode ? undefined : props.groupField\n });\n\n const selection = useDataTableSelection({\n data: processedData,\n rawTreeData: isTreeMode ? rawData : undefined,\n treeMode: isTreeMode,\n dataKey: props.dataKey,\n selectionMode: props.selectionMode,\n metaKeySelection: props.metaKeySelection,\n selectedKeys: props.selectedKeys,\n defaultSelectedKeys: props.defaultSelectedKeys,\n onSelectionChange: props.onSelectionChange\n });\n\n // Independent: Keyboard navigation\n const keyboard = useDataTableKeyboard({\n data: processedData,\n dataKey: props.dataKey,\n treeMode: isTreeMode,\n selectionMode: props.selectionMode,\n selectedKeys: selection.state.selectedKeys,\n expandedKeys: expansion.state.expandedKeys,\n onToggleExpansion: expansion.exposes.toggleExpansion,\n onToggleSelection: selection.exposes.toggleSelection,\n getRowKey: selection.getRowKey\n });\n\n const columnReorder = useDataTableColumnReorder({\n reorderableColumns: props.reorderableColumns,\n onColumnReorder: props.onColumnReorder\n });\n\n const columnResize = useDataTableColumnResize({\n resizableColumns: props.resizableColumns,\n columnResizeMode: props.columnResizeMode,\n onColumnResizeEnd: props.onColumnResizeEnd\n });\n\n const editing = useDataTableEditing({\n editMode: props.editMode,\n editingKeys: props.editingKeys,\n defaultEditingKeys: props.defaultEditingKeys,\n onEditingKeysChange: props.onEditingKeysChange,\n onRowEditInit: props.onRowEditInit,\n onRowEditSave: props.onRowEditSave,\n onRowEditCancel: props.onRowEditCancel,\n onCellEditInit: props.onCellEditInit,\n onCellEditComplete: props.onCellEditComplete,\n onCellEditCancel: props.onCellEditCancel\n });\n\n const rowReorder = useDataTableRowReorder({\n data: processedData,\n reorderableRows: props.reorderableRows,\n onRowReorder: props.onRowReorder\n });\n\n const exportData = useDataTableExport({\n data: processedData,\n dataKey: props.dataKey,\n selectedKeys: selection.state.selectedKeys\n });\n\n const prevLazyRef = React.useRef({\n first: -1,\n rows: -1,\n page: -1,\n sortField: undefined as string | undefined,\n sortOrder: undefined as number | undefined,\n multiSortMeta: undefined as unknown,\n filters: undefined as unknown,\n globalFilter: undefined as unknown as string | null\n });\n\n React.useEffect(() => {\n if (!props.lazy || !props.onLazyLoad) return;\n\n const prev = prevLazyRef.current;\n const current = {\n first: pagination.state.first,\n rows: pagination.state.rows,\n page: pagination.state.page,\n sortField: sort.state.sortField,\n sortOrder: sort.state.sortOrder,\n multiSortMeta: sort.state.multiSortMeta,\n filters: filter.state.filters,\n globalFilter: filter.state.globalFilter\n };\n\n const hasChanged =\n prev.first !== -1 &&\n (prev.first !== current.first ||\n prev.rows !== current.rows ||\n prev.page !== current.page ||\n prev.sortField !== current.sortField ||\n prev.sortOrder !== current.sortOrder ||\n prev.multiSortMeta !== current.multiSortMeta ||\n prev.filters !== current.filters ||\n prev.globalFilter !== current.globalFilter);\n\n if (hasChanged) {\n props.onLazyLoad(current);\n }\n\n prevLazyRef.current = current;\n }, [props.lazy, props.onLazyLoad, pagination.state.first, pagination.state.rows, pagination.state.page, sort.state.sortField, sort.state.sortOrder, sort.state.multiSortMeta, filter.state.filters, filter.state.globalFilter]);\n\n const paginatedData = isTreeMode ? processedData : pagination.paginatedData;\n const loading = props.loading ?? false;\n\n const state = React.useMemo(\n () => ({\n processedData,\n paginatedData,\n loading,\n ...sort.state,\n ...selection.state,\n ...pagination.state,\n ...expansion.state,\n ...grouping.state,\n ...editing.state,\n ...filter.state\n }),\n [processedData, paginatedData, loading, sort.state, selection.state, pagination.state, expansion.state, grouping.state, editing.state, filter.state]\n );\n\n const rootProps = React.useMemo(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'root',\n ref: columnReorder.registerRoot,\n ...(loading ? { 'data-loading': '' } : undefined),\n ...(props.rowHover ? { 'data-row-hover': '' } : undefined),\n ...(props.highlightOnSelect ? { 'data-highlight-on-select': '' } : undefined),\n ...(props.selectionMode ? { 'data-selection-mode': props.selectionMode } : undefined),\n ...(props.size ? { 'data-size': props.size } : undefined),\n ...(props.stripedRows ? { 'data-striped-rows': '' } : undefined),\n ...(props.showGridlines ? { 'data-show-gridlines': '' } : undefined),\n ...(props.scrollable ? { 'data-scrollable': '' } : undefined),\n ...(props.resizableColumns ? { 'data-resizable-columns': '' } : undefined)\n }),\n [loading, props.rowHover, props.highlightOnSelect, props.selectionMode, props.size, props.stripedRows, props.showGridlines, props.scrollable, props.resizableColumns, columnReorder.registerRoot]\n );\n\n const tableContainerProps = React.useMemo(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'table-container',\n style:\n props.scrollable && props.scrollHeight\n ? {\n maxHeight: props.scrollHeight === 'flex' ? undefined : props.scrollHeight,\n overflow: 'auto' as const,\n ...(props.scrollHeight === 'flex' ? { flex: '1 1 auto' } : undefined)\n }\n : ({ overflow: 'auto' } as React.CSSProperties)\n }),\n [props.scrollable, props.scrollHeight]\n );\n\n const tableProps = React.useMemo(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'table',\n role: (isTreeMode ? 'treegrid' : 'table') as 'table' | 'treegrid'\n }),\n [isTreeMode]\n );\n\n return {\n state,\n rootProps,\n tableContainerProps,\n tableProps,\n getRowKey: selection.getRowKey,\n sort: sort.exposes,\n selection: selection.exposes,\n pagination: pagination.exposes,\n expansion: expansion.exposes,\n columnReorder: columnReorder.exposes,\n columnResize: columnResize.exposes,\n editing: editing.exposes,\n filter: filter.exposes,\n rowReorder: rowReorder.exposes,\n exportData: exportData.exposes,\n keyboard: keyboard.exposes\n };\n }\n});\n","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","import type { UseDataTableProps } from '@primereact/types/headless/datatable';\n\nexport const defaultProps: UseDataTableProps = {\n data: [],\n dataKey: undefined,\n loading: false,\n lazy: false,\n totalRecords: undefined,\n scrollable: false,\n scrollHeight: undefined,\n sortField: undefined,\n sortOrder: undefined,\n defaultSortField: undefined,\n defaultSortOrder: undefined,\n multiSortMeta: undefined,\n defaultMultiSortMeta: undefined,\n onSortChange: undefined,\n removableSort: false,\n nullSortOrder: 1,\n selectionMode: null,\n metaKeySelection: false,\n selectedKeys: undefined,\n defaultSelectedKeys: undefined,\n onSelectionChange: undefined,\n page: undefined,\n defaultPage: 0,\n rows: undefined,\n defaultRows: 10,\n rowsPerPageOptions: undefined,\n paginator: false,\n onPageChange: undefined,\n expandedKeys: undefined,\n defaultExpandedKeys: undefined,\n onExpandedChange: undefined,\n groupField: undefined,\n reorderableColumns: false,\n onColumnReorder: undefined,\n resizableColumns: false,\n columnResizeMode: 'fit',\n onColumnResizeEnd: undefined,\n editMode: undefined,\n editingKeys: undefined,\n defaultEditingKeys: undefined,\n onEditingKeysChange: undefined,\n onRowEditInit: undefined,\n onRowEditSave: undefined,\n onRowEditCancel: undefined,\n onCellEditInit: undefined,\n onCellEditComplete: undefined,\n onCellEditCancel: undefined,\n filters: undefined,\n defaultFilters: undefined,\n globalFilter: null,\n globalFilterFields: undefined,\n filterDelay: 0,\n onFilter: undefined,\n reorderableRows: false,\n onRowReorder: undefined,\n rowClassName: undefined,\n onLazyLoad: undefined,\n onRowClick: undefined,\n onRowDoubleClick: undefined,\n onRowContextMenu: undefined,\n rowHover: false,\n highlightOnSelect: true,\n treeMode: false,\n size: undefined,\n stripedRows: false,\n showGridlines: false\n};\n","import { withHeadless } from '@primereact/core/headless';\nimport * as React from 'react';\nimport { defaultRowProps } from './useDataTableRow.props';\n\nconst INTERACTIVE_SELECTOR = 'input, button, a, [data-scope=\"radiobutton\"], [data-scope=\"checkbox\"], [role=\"checkbox\"], [role=\"radio\"]';\nconst EMPTY_STATE = Object.freeze({});\n\nexport const useDataTableRow = withHeadless({\n name: 'useDataTableRow',\n defaultProps: defaultRowProps,\n setup({ props }) {\n const index = props.index ?? 0;\n const item = props.item as Record<string, unknown> | undefined | null;\n const datatable = props.context;\n\n const rowKey = item ? datatable?.getRowKey?.(item, index) : undefined;\n const isSelected = rowKey !== undefined ? datatable?.selection?.isSelected(rowKey) : undefined;\n const isExpanded = rowKey !== undefined ? datatable?.expansion?.isExpanded(rowKey) : undefined;\n\n const treeLevel = (item?._treeLevel as number | undefined) ?? undefined;\n const treeHasChildren = (item?._treeHasChildren as boolean | undefined) ?? undefined;\n const treePosInSet = (item?._treePosInSet as number | undefined) ?? undefined;\n const treeSetSize = (item?._treeSetSize as number | undefined) ?? undefined;\n\n const tabIndex = datatable?.keyboard?.getRowTabIndex(index) ?? -1;\n const editMode = datatable?.inProps?.editMode;\n const reorderable = !!datatable?.inProps?.reorderableRows;\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLTableRowElement>) => {\n // Enter on focused row opens first editable cell (cell mode).\n if (event.key === 'Enter' && editMode === 'cell' && event.target === event.currentTarget) {\n const firstEditorTd = event.currentTarget.querySelector<HTMLElement>('td[data-editable-cell]');\n const firstEditor = firstEditorTd?.querySelector<HTMLElement>('[data-row-index][data-field]');\n\n if (firstEditor) {\n const targetRowIndex = Number(firstEditor.dataset.rowIndex);\n const targetField = firstEditor.dataset.field;\n\n if (!Number.isNaN(targetRowIndex) && targetField) {\n event.preventDefault();\n datatable?.editing?.startCellEdit(event, targetRowIndex, targetField, rowKey);\n\n return;\n }\n }\n }\n\n datatable?.keyboard?.onRowKeyDown(event, index);\n },\n [datatable?.keyboard, datatable?.editing, editMode, rowKey, index]\n );\n\n const onRowClickProp = datatable?.inProps?.onRowClick;\n const onRowDoubleClickProp = datatable?.inProps?.onRowDoubleClick;\n const onRowContextMenuProp = datatable?.inProps?.onRowContextMenu;\n\n const handleClick = React.useCallback(\n (event: React.MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (target.closest(INTERACTIVE_SELECTOR)) return;\n if (target.closest('td[data-editable-cell]')) return;\n\n if (item) {\n onRowClickProp?.({ originalEvent: event, data: item, index });\n }\n\n if (rowKey !== undefined) {\n datatable?.selection?.onRowClick(event, rowKey);\n }\n },\n [datatable?.selection, rowKey, onRowClickProp, item, index]\n );\n\n const handleDoubleClick = React.useCallback(\n (event: React.MouseEvent) => {\n if (!item || !onRowDoubleClickProp) return;\n const target = event.target as HTMLElement;\n\n if (target.closest(INTERACTIVE_SELECTOR)) return;\n\n onRowDoubleClickProp({ originalEvent: event, data: item, index });\n },\n [onRowDoubleClickProp, item, index]\n );\n\n const handleContextMenu = React.useCallback(\n (event: React.MouseEvent) => {\n if (!item || !onRowContextMenuProp) return;\n onRowContextMenuProp({ originalEvent: event, data: item, index });\n },\n [onRowContextMenuProp, item, index]\n );\n\n const rowReorderApi = datatable?.rowReorder;\n\n // Skip allocating drag handlers when row reorder is off.\n const dragHandlers = React.useMemo(() => {\n if (!reorderable || !rowReorderApi) return null;\n\n return {\n onDragStart: (event: React.DragEvent<HTMLTableRowElement>) => {\n if (event.currentTarget.getAttribute('data-drag-source') !== 'true') {\n event.preventDefault();\n\n return;\n }\n\n rowReorderApi.onDragStart(event, index);\n },\n onDragOver: (event: React.DragEvent<HTMLTableRowElement>) => rowReorderApi.onDragOver(event, index),\n onDragLeave: (event: React.DragEvent<HTMLTableRowElement>) => rowReorderApi.onDragLeave(event),\n onDrop: (event: React.DragEvent<HTMLTableRowElement>) => rowReorderApi.onDrop(event),\n onDragEnd: (event: React.DragEvent<HTMLTableRowElement>) => {\n event.currentTarget.removeAttribute('data-drag-source');\n rowReorderApi.onDragEnd();\n }\n };\n }, [reorderable, rowReorderApi, index]);\n\n const rowProps = React.useMemo(\n () => ({\n 'data-scope': 'datatable',\n 'data-part': 'row',\n 'data-index': index,\n role: 'row' as const,\n 'aria-rowindex': index + 1,\n tabIndex,\n onKeyDown: handleKeyDown,\n onClick: handleClick,\n ...(onRowDoubleClickProp ? { onDoubleClick: handleDoubleClick } : undefined),\n ...(onRowContextMenuProp ? { onContextMenu: handleContextMenu } : undefined),\n ...(isSelected !== undefined ? { 'aria-selected': isSelected } : undefined),\n ...(isSelected ? { 'data-selected': '' } : undefined),\n ...(treeLevel !== undefined ? { 'aria-level': treeLevel + 1 } : undefined),\n ...(treeHasChildren ? { 'aria-expanded': isExpanded } : undefined),\n ...(treePosInSet !== undefined ? { 'aria-posinset': treePosInSet } : undefined),\n ...(treeSetSize !== undefined ? { 'aria-setsize': treeSetSize } : undefined),\n ...(dragHandlers ? { draggable: true, ...dragHandlers } : undefined)\n }),\n [index, tabIndex, handleKeyDown, handleClick, onRowDoubleClickProp, onRowContextMenuProp, handleDoubleClick, handleContextMenu, isSelected, isExpanded, treeLevel, treeHasChildren, treePosInSet, treeSetSize, dragHandlers]\n );\n\n return {\n state: EMPTY_STATE,\n rowProps,\n isSelected,\n rowKey\n };\n }\n});\n","import type { UseDataTableRowProps } from '@primereact/types/headless/datatable';\n\nexport const defaultRowProps: UseDataTableRowProps = {\n item: undefined,\n index: 0,\n context: undefined\n};\n"],"mappings":"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","names":["withHeadless","React","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","defaultProps","useDataTable","withHeadless","defaultProps","props","_a","_b","rawData","isTreeMode","effectiveLazy","expansion","useDataTableExpansion","filter","useDataTableFilter","sort","useDataTableSort","treeTotalRootNodes","_c","treeNodes","filters","gf","gfFields","hasActiveFilters","filterTreeNodes","pagination","useDataTablePagination","tree","useDataTableTree","processedData","grouping","useDataTableGrouping","selection","useDataTableSelection","keyboard","useDataTableKeyboard","columnReorder","useDataTableColumnReorder","columnResize","useDataTableColumnResize","editing","useDataTableEditing","rowReorder","useDataTableRowReorder","exportData","useDataTableExport","prevLazyRef","prev","current","paginatedData","loading","state","__spreadValues","rootProps","tableContainerProps","tableProps","withHeadless","React","defaultRowProps","INTERACTIVE_SELECTOR","EMPTY_STATE","useDataTableRow","withHeadless","defaultRowProps","props","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","_l","_m","_n","_o","index","item","datatable","rowKey","isSelected","isExpanded","treeLevel","treeHasChildren","treePosInSet","treeSetSize","tabIndex","editMode","reorderable","handleKeyDown","event","firstEditorTd","firstEditor","targetRowIndex","targetField","onRowClickProp","onRowDoubleClickProp","onRowContextMenuProp","handleClick","target","handleDoubleClick","handleContextMenu","rowReorderApi","dragHandlers","rowProps","__spreadValues"]}