@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
@@ -1,28 +1,47 @@
1
+ import type { InstantType } from '@primereact/types/headless/tooltip';
1
2
  import * as React from 'react';
2
- export declare const useTooltip: (inProps?: unknown) => import("@primereact/types/core").HeadlessInstance<import("@primereact/types/shared/tooltip").useTooltipProps, unknown, {
3
+ export declare const useTooltip: (inProps?: unknown) => import("@primereact/types/core").HeadlessInstance<import("@primereact/types/headless/tooltip").UseTooltipProps, unknown, {
3
4
  state: {
4
- visible: boolean;
5
- life: boolean;
6
- shouldAnimateOnEnter: boolean;
7
- shouldAnimateOnLeave: boolean;
5
+ open: boolean | undefined;
6
+ rendered: boolean;
7
+ anchorElement: HTMLElement | null;
8
+ positionerElement: HTMLDivElement | null;
9
+ popupElement: HTMLElement | null;
10
+ arrowElement: HTMLDivElement | null;
11
+ instantType: InstantType;
8
12
  };
9
- placer: import("@primereact/types/core").HeadlessInstance<import("@primereact/types/shared/placer").usePlacerProps, unknown, {
10
- state: {
11
- effectiveSide: import("@primereact/types/shared/placer").SideType | null | undefined;
12
- effectiveAlign: import("@primereact/types/shared/placer").AlignType | null | undefined;
13
- };
14
- containerRef: React.RefObject<unknown>;
15
- anchorRef: React.RefObject<unknown>;
16
- arrowRef: React.RefObject<unknown>;
17
- applyPlacement: () => void;
18
- }>;
19
- show: (forceInstant?: boolean) => void;
20
- hide: (forceInstant?: boolean) => void;
21
- onEnter: () => void;
22
- onBeforeEnter: () => void;
23
- onLeave: () => void;
24
- onContentAfterLeave: () => void;
25
- onContentEnter: () => void;
26
- onContentLeave: () => void;
27
- contentRef: React.RefObject<HTMLDivElement | null>;
13
+ popupRef: React.RefObject<HTMLElement | null>;
14
+ rootProps: {
15
+ 'data-instant'?: "focus" | "dismiss" | "delay" | undefined;
16
+ };
17
+ triggerProps: {
18
+ 'data-popup-open'?: "" | undefined;
19
+ 'data-scope': "tooltip";
20
+ 'data-part': "trigger";
21
+ ref: (node: HTMLElement | null) => void;
22
+ };
23
+ positionerProps: {
24
+ 'data-open'?: "" | undefined;
25
+ 'data-scope': "tooltip";
26
+ 'data-part': "positioner";
27
+ ref: (node: HTMLDivElement | null) => void;
28
+ };
29
+ popupProps: {
30
+ 'data-instant-type': InstantType;
31
+ 'data-instant'?: "" | undefined;
32
+ 'data-open'?: "" | undefined;
33
+ 'data-scope': "tooltip";
34
+ 'data-part': "popup";
35
+ ref: (node: HTMLElement | null) => void;
36
+ };
37
+ arrowProps: {
38
+ 'data-instant'?: "focus" | "dismiss" | "delay" | undefined;
39
+ 'data-open'?: "" | undefined;
40
+ 'data-scope': "tooltip";
41
+ 'data-part': "arrow";
42
+ ref: (node: HTMLDivElement | null) => void;
43
+ };
44
+ setRendered: React.Dispatch<React.SetStateAction<boolean>>;
45
+ onOpenComplete: () => void;
46
+ onCloseComplete: () => void;
28
47
  }>;
@@ -1,2 +1,2 @@
1
- import type { useTooltipProps } from '@primereact/types/shared/tooltip';
2
- export declare const defaultProps: useTooltipProps;
1
+ import type { UseTooltipProps } from '@primereact/types/headless/tooltip';
2
+ export declare const defaultProps: UseTooltipProps;
@@ -0,0 +1,2 @@
1
+ export * from './useTooltipManager';
2
+ export * from './useTooltipManager.props';
@@ -0,0 +1,2 @@
1
+ import{withHeadless as m}from"@primereact/core/headless";import*as t from"react";var c={openDelay:void 0,closeDelay:void 0,timeout:400};var I=m({name:"useTooltipManager",defaultProps:c,setup:({props:a})=>{let{openDelay:l,closeDelay:u,timeout:s=400}=a,r=t.useRef(null),o=t.useRef(null),e=t.useRef({isInstantPhase:!1,lastClosedTooltipId:null,currentOpenTooltipId:null,openDelay:l,closeDelay:u});e.current.openDelay=l,e.current.closeDelay=u;let i=t.useCallback((n,d)=>{e.current.currentOpenTooltipId=n,o.current=d,r.current&&(clearTimeout(r.current),r.current=null)},[]),p=t.useCallback(n=>{e.current.currentOpenTooltipId===n&&(e.current.currentOpenTooltipId=null),o.current=null,e.current.lastClosedTooltipId=n,e.current.isInstantPhase=!0,r.current&&clearTimeout(r.current),r.current=window.setTimeout(()=>{e.current.isInstantPhase=!1,e.current.lastClosedTooltipId=null,r.current=null},s)},[s]),f=t.useCallback(()=>{var n;(n=o.current)==null||n.call(o),o.current=null},[]);return t.useEffect(()=>()=>{r.current&&clearTimeout(r.current)},[]),{state:e.current,notifyOpen:i,notifyClose:p,closeCurrentTooltip:f}}});export{c as defaultProps,I as useTooltipManager};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tooltipmanager/useTooltipManager.ts","../../src/tooltipmanager/useTooltipManager.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport * as React from 'react';\nimport { defaultProps } from './useTooltipManager.props';\n\nexport const useTooltipManager = withHeadless({\n name: 'useTooltipManager',\n defaultProps,\n setup: ({ props }) => {\n const { openDelay, closeDelay, timeout = 400 } = props;\n const timeoutRef = React.useRef<number | null>(null);\n const currentCloseRef = React.useRef<(() => void) | null>(null);\n\n // Use a mutable ref object for state so that reads from event handlers\n // always see the latest values without waiting for a React re-render.\n const stateRef = React.useRef({\n isInstantPhase: false,\n lastClosedTooltipId: null as string | null,\n currentOpenTooltipId: null as string | null,\n openDelay,\n closeDelay\n });\n\n // Keep prop-derived values in sync\n stateRef.current.openDelay = openDelay;\n stateRef.current.closeDelay = closeDelay;\n\n const notifyOpen = React.useCallback((tooltipId: string, closeFn: () => void) => {\n stateRef.current.currentOpenTooltipId = tooltipId;\n currentCloseRef.current = closeFn;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n }, []);\n\n const notifyClose = React.useCallback(\n (tooltipId: string) => {\n if (stateRef.current.currentOpenTooltipId === tooltipId) {\n stateRef.current.currentOpenTooltipId = null;\n }\n\n currentCloseRef.current = null;\n stateRef.current.lastClosedTooltipId = tooltipId;\n stateRef.current.isInstantPhase = true;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = window.setTimeout(() => {\n stateRef.current.isInstantPhase = false;\n stateRef.current.lastClosedTooltipId = null;\n timeoutRef.current = null;\n }, timeout);\n },\n [timeout]\n );\n\n const closeCurrentTooltip = React.useCallback(() => {\n currentCloseRef.current?.();\n currentCloseRef.current = null;\n }, []);\n\n React.useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return {\n state: stateRef.current,\n notifyOpen,\n notifyClose,\n closeCurrentTooltip\n };\n }\n});\n","import type { UseTooltipManagerProps } from '@primereact/types/headless/tooltip';\n\nexport const defaultProps: UseTooltipManagerProps = {\n openDelay: undefined,\n closeDelay: undefined,\n timeout: 400\n};\n"],"mappings":"AAAA,OAAS,gBAAAA,MAAoB,4BAC7B,UAAYC,MAAW,QCChB,IAAMC,EAAuC,CAChD,UAAW,OACX,WAAY,OACZ,QAAS,GACb,EDFO,IAAMC,EAAoBC,EAAa,CAC1C,KAAM,oBACN,aAAAC,EACA,MAAO,CAAC,CAAE,MAAAC,CAAM,IAAM,CAClB,GAAM,CAAE,UAAAC,EAAW,WAAAC,EAAY,QAAAC,EAAU,GAAI,EAAIH,EAC3CI,EAAmB,SAAsB,IAAI,EAC7CC,EAAwB,SAA4B,IAAI,EAIxDC,EAAiB,SAAO,CAC1B,eAAgB,GAChB,oBAAqB,KACrB,qBAAsB,KACtB,UAAAL,EACA,WAAAC,CACJ,CAAC,EAGDI,EAAS,QAAQ,UAAYL,EAC7BK,EAAS,QAAQ,WAAaJ,EAE9B,IAAMK,EAAmB,cAAY,CAACC,EAAmBC,IAAwB,CAC7EH,EAAS,QAAQ,qBAAuBE,EACxCH,EAAgB,QAAUI,EAEtBL,EAAW,UACX,aAAaA,EAAW,OAAO,EAC/BA,EAAW,QAAU,KAE7B,EAAG,CAAC,CAAC,EAECM,EAAoB,cACrBF,GAAsB,CACfF,EAAS,QAAQ,uBAAyBE,IAC1CF,EAAS,QAAQ,qBAAuB,MAG5CD,EAAgB,QAAU,KAC1BC,EAAS,QAAQ,oBAAsBE,EACvCF,EAAS,QAAQ,eAAiB,GAE9BF,EAAW,SACX,aAAaA,EAAW,OAAO,EAGnCA,EAAW,QAAU,OAAO,WAAW,IAAM,CACzCE,EAAS,QAAQ,eAAiB,GAClCA,EAAS,QAAQ,oBAAsB,KACvCF,EAAW,QAAU,IACzB,EAAGD,CAAO,CACd,EACA,CAACA,CAAO,CACZ,EAEMQ,EAA4B,cAAY,IAAM,CA3D5D,IAAAC,GA4DYA,EAAAP,EAAgB,UAAhB,MAAAO,EAAA,KAAAP,GACAA,EAAgB,QAAU,IAC9B,EAAG,CAAC,CAAC,EAEL,OAAM,YAAU,IACL,IAAM,CACLD,EAAW,SACX,aAAaA,EAAW,OAAO,CAEvC,EACD,CAAC,CAAC,EAEE,CACH,MAAOE,EAAS,QAChB,WAAAC,EACA,YAAAG,EACA,oBAAAC,CACJ,CACJ,CACJ,CAAC","names":["withHeadless","React","defaultProps","useTooltipManager","withHeadless","defaultProps","props","openDelay","closeDelay","timeout","timeoutRef","currentCloseRef","stateRef","notifyOpen","tooltipId","closeFn","notifyClose","closeCurrentTooltip","_a"]}
@@ -0,0 +1,12 @@
1
+ export declare const useTooltipManager: (inProps?: unknown) => import("@primereact/types/core").HeadlessInstance<import("@primereact/types/headless/tooltip").UseTooltipManagerProps, unknown, {
2
+ state: {
3
+ isInstantPhase: boolean;
4
+ lastClosedTooltipId: string | null;
5
+ currentOpenTooltipId: string | null;
6
+ openDelay: number | undefined;
7
+ closeDelay: number | undefined;
8
+ };
9
+ notifyOpen: (tooltipId: string, closeFn: () => void) => void;
10
+ notifyClose: (tooltipId: string) => void;
11
+ closeCurrentTooltip: () => void;
12
+ }>;
@@ -0,0 +1,2 @@
1
+ import type { UseTooltipManagerProps } from '@primereact/types/headless/tooltip';
2
+ export declare const defaultProps: UseTooltipManagerProps;
File without changes
@@ -1,18 +1,26 @@
1
- import type { TreeNode } from '@primereact/types/shared/tree';
1
+ import type { TreeNodeData } from '@primereact/types/headless/tree';
2
+ /**
3
+ * Registered by the source tree at `startDrag`; the destination invokes it on a
4
+ * committed drop so the source can drop the node and fire its `onMove`.
5
+ */
6
+ export type SourceCommitHandler = (originalEvent: React.DragEvent) => void;
2
7
  type DragState = {
3
8
  isDragging: boolean;
4
- dragNode: TreeNode | null;
9
+ dragNode: TreeNodeData | null;
5
10
  dragScope: string | string[] | null;
6
- dragNodeSubNodes: TreeNode[] | null;
11
+ dragNodeSubNodes: TreeNodeData[] | null;
7
12
  dragNodeIndex: number | null;
8
13
  sourceTreeId: string | null;
14
+ /** Source-tree commit hook. Invoked by the destination tree on a successful drop. */
15
+ sourceCommit: SourceCommitHandler | null;
9
16
  };
10
17
  type DragEvent = {
11
- node: TreeNode;
18
+ node: TreeNodeData;
12
19
  scope?: string | string[] | null;
13
- subNodes?: TreeNode[];
20
+ subNodes?: TreeNodeData[];
14
21
  index?: number;
15
22
  sourceTreeId?: string;
23
+ sourceCommit?: SourceCommitHandler;
16
24
  };
17
25
  export declare const TreeDragDropService: {
18
26
  getDragState(): DragState;
package/tree/index.d.ts CHANGED
@@ -1,3 +1,10 @@
1
1
  export * from './useTree';
2
2
  export * from './useTree.props';
3
+ export * from './useTreeNode';
4
+ export * from './useTreeNode.props';
3
5
  export * from './TreeDragDropService';
6
+ export * from './useTreeFlatten';
7
+ export * from './useTreeSelection';
8
+ export * from './useTreeKeyboard';
9
+ export * from './useTreeDragDrop';
10
+ export type * from '@primereact/types/headless/tree';
package/tree/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var ve=Object.defineProperty,Ce=Object.defineProperties;var Me=Object.getOwnPropertyDescriptors;var Q=Object.getOwnPropertySymbols;var Re=Object.prototype.hasOwnProperty,Le=Object.prototype.propertyIsEnumerable;var Z=(r,o,c)=>o in r?ve(r,o,{enumerable:!0,configurable:!0,writable:!0,value:c}):r[o]=c,b=(r,o)=>{for(var c in o||(o={}))Re.call(o,c)&&Z(r,c,o[c]);if(Q)for(var c of Q(o))Le.call(o,c)&&Z(r,c,o[c]);return r},I=(r,o)=>Ce(r,Me(o));import{withHeadless as He}from"@primereact/core/headless";import{useControlledState as ee}from"@primereact/hooks/use-controlled-state";import{find as U,findSingle as Ie,focus as te,getAttribute as we,isPrintableCharacter as Ae}from"@primeuix/utils";import*as m from"react";var u={isDragging:!1,dragNode:null,dragScope:null,dragNodeSubNodes:null,dragNodeIndex:null,sourceTreeId:null},w=new Set,A=new Set,E={getDragState(){return u},startDrag(r){var o,c,S,D;u.isDragging=!0,u.dragNode=r.node,u.dragScope=(o=r.scope)!=null?o:null,u.dragNodeSubNodes=(c=r.subNodes)!=null?c:null,u.dragNodeIndex=(S=r.index)!=null?S:null,u.sourceTreeId=(D=r.sourceTreeId)!=null?D:null,w.forEach(C=>C(r))},stopDrag(r){u.isDragging=!1,u.dragNode=null,u.dragScope=null,u.dragNodeSubNodes=null,u.dragNodeIndex=null,u.sourceTreeId=null,A.forEach(o=>o(r))},onDragStart(r){return w.add(r),()=>w.delete(r)},onDragStop(r){return A.add(r),()=>A.delete(r)}};var $={value:[],expandedKeys:void 0,defaultExpandedKeys:void 0,selectionKeys:void 0,defaultSelectionKeys:void 0,selectionMode:void 0,metaKeySelection:!1,highlightOnSelect:!1,scrollHeight:void 0,draggableNodes:void 0,droppableNodes:void 0,draggableScope:void 0,droppableScope:void 0,validateDrop:!1,onExpandedChange:void 0,onSelectionChange:void 0,onToggle:void 0,onExpand:void 0,onCollapse:void 0,onClick:void 0,onSelect:void 0,onUnselect:void 0,onNodeDrop:void 0,onDragEnter:void 0,onDragLeave:void 0,onValueChange:void 0};var Ye=He({name:"useTree",defaultProps:$,setup({props:r,elementRef:o}){var q,G;let c=m.useRef((q=r.defaultExpandedKeys)!=null?q:{}),[S,D]=ee({value:r.expandedKeys,defaultValue:c.current,onChange:r.onExpandedChange}),C=m.useRef((G=r.defaultSelectionKeys)!=null?G:{}),[y,V]=ee({value:r.selectionKeys,defaultValue:C.current,onChange:r.onSelectionChange}),x=m.useRef(null),h=m.useRef(""),[ne,N]=m.useState(!1);m.useEffect(()=>{if(r.droppableNodes){let e=E.onDragStop(()=>{N(!1)});return()=>{e()}}},[r.droppableNodes]);let re={expandedKey:S,selectedKey:y,dragHover:ne},K=()=>r.value||[],le=(e,t,n,l,a)=>{if(!ye(e))return;let i=e.metaKey||e.ctrlKey;switch(e.code){case"Tab":se();break;case"ArrowDown":p(e);break;case"ArrowUp":ae(e);break;case"ArrowRight":oe(e,t,l,a);break;case"ArrowLeft":ie(e,t,n,l,a);break;case"Enter":case"NumpadEnter":case"Space":ce(e,t,l);break;default:!i&&Ae(e.key)&&be(e.key,t);break}},p=e=>{let t=e.target,n=t.getAttribute("data-pc-section")==="treetoggle"?t.closest('[role="treeitem"]'):t;if(!n)return;let l=n.children[1];if(l)T(n,l.children[0]);else if(n.nextElementSibling)T(n,n.nextElementSibling);else{let a=O(n);a&&T(n,a)}e.preventDefault()},ae=e=>{let t=e.target;if(t.previousElementSibling)T(t,t.previousElementSibling,W(t.previousElementSibling));else{let n=B(t);n&&T(t,n)}e.preventDefault()},oe=(e,t,n,l)=>{l||n||(e.currentTarget.tabIndex=-1,M(e,t),setTimeout(()=>{p(e)},0))},ie=(e,t,n,l,a)=>{if(n===0&&!l)return!1;if(l&&!a)return M(e,t),!1;let i=P(e.currentTarget);i&&T(e.currentTarget,i)},ce=(e,t,n)=>{ue(e,n),Y(e,t,!0),e.preventDefault()},se=()=>{de()},de=()=>{if(!o.current)return;let e=U(o.current,'[role="treeitem"]'),t=[...e].some(n=>n.getAttribute("aria-selected")==="true"||n.getAttribute("aria-checked")==="true");if([...e].forEach(n=>{n.tabIndex=-1}),t){let n=[...e].filter(l=>l.getAttribute("aria-selected")==="true"||l.getAttribute("aria-checked")==="true");n[0].tabIndex=0;return}[...e][0].tabIndex=0},ue=(e,t)=>{if(r.selectionMode!==null){let n=e.currentTarget.parentElement;if(!n)return;let l=[...U(n,'[role="treeitem"]')];e.currentTarget.tabIndex=t?-1:0,l.every(a=>a.tabIndex===-1)&&(l[0].tabIndex=0)}},T=(e,t,n)=>{e.tabIndex=-1,t.tabIndex=0,te(n||t)},P=e=>{let t=e.closest("ul");if(!t)return null;let n=t.closest("li");if(n){let l=Ie(n,"button");if(l&&l.style.visibility!=="hidden")return n;if(e.previousElementSibling)return P(e.previousElementSibling)}return null},O=e=>{let t=B(e);return t?t.nextElementSibling?t.nextElementSibling:O(t):null},W=e=>{let t=e.children[1];if(t){let n=t.children[t.children.length-1];return W(n)}else return e},B=e=>{let t=e.parentElement;if(!t)return null;let n=t.parentElement;return n&&we(n,"role")==="treeitem"?n:null},M=(e,t)=>{let n=S||{},l=t.key,a;n[l]?(a=b({},n),delete a[l],r.onCollapse&&r.onCollapse({originalEvent:e,node:t}),r.onToggle&&r.onToggle({originalEvent:e,node:t})):(a=I(b({},n),{[l]:!0}),r.onExpand&&r.onExpand({originalEvent:e,node:t}),r.onToggle&&r.onToggle({originalEvent:e,node:t})),D([a,{originalEvent:e,value:a}])},_=(e,t,n=!1)=>{if(r.selectionMode!=null){let a=(n?!1:r.metaKeySelection)?fe(e,t):ge(e,t);V([a,{originalEvent:e,value:a}]),r.onClick&&r.onClick({originalEvent:e,node:t})}},fe=(e,t)=>{let n=e.metaKey||e.ctrlKey,l=L(t),a={},i=y||{};return l&&n?(R()?a={}:(a=b({},i),delete a[t.key]),r.onUnselect&&r.onUnselect({originalEvent:e,node:t})):(R()?a={}:Ee()&&(a=n?b({},i):{}),a[t.key]=!0,r.onSelect&&r.onSelect({originalEvent:e,node:t})),a},ge=(e,t)=>{let n=L(t),l={},a=y||{},i=t.key;return R()?n?(l={},r.onUnselect&&r.onUnselect({originalEvent:e,node:t})):(l={[i]:!0},r.onSelect&&r.onSelect({originalEvent:e,node:t})):n?(l=b({},a),delete l[i],r.onUnselect&&r.onUnselect({originalEvent:e,node:t})):(l=I(b({},a),{[i]:!0}),r.onSelect&&r.onSelect({originalEvent:e,node:t})),l},R=()=>r.selectionMode==="single",Ee=()=>r.selectionMode==="multiple",X=()=>r.selectionMode==="checkbox",L=e=>{var n;return!r.selectionMode||!y?!1:X()?((n=y[e.key])==null?void 0:n.checked)===!0:y[e.key]===!0},Y=(e,t,n=!1)=>{X()?z(e,t):_(e,t,n)},z=(e,t)=>{var s;let l=b({},y||{}),a=t.key;if(!t)return;let f=!(((s=l[a])==null?void 0:s.checked)===!0);f?r.onUnselect&&r.onUnselect({originalEvent:e,node:t}):r.onSelect&&r.onSelect({originalEvent:e,node:t}),F(t,f,l);let g=H(K(),a);for(;g;)me(g,l),g=H(K(),g.key);V([l,{originalEvent:e,value:l}])},F=(e,t,n)=>{if(t&&e.selectable!==!1?n[e.key]={checked:!0,partialChecked:!1}:delete n[e.key],e.children&&e.children.length)for(let l of e.children)F(l,t,n)},me=(e,t)=>{var a,i;if(!e.children||e.children.length===0)return t;let n=0,l=!1;for(let f of e.children)(a=t[f.key])!=null&&a.checked?n++:(i=t[f.key])!=null&&i.partialChecked&&(l=!0);return n===e.children.length?t[e.key]={checked:!0,partialChecked:!1}:(delete t[e.key],(l||n>0&&n!==e.children.length)&&(t[e.key]={checked:!1,partialChecked:!0})),t},H=(e,t,n=null)=>{for(let l of e){if(l.key===t)return n;if(l.children){let a=H(l.children,t,l);if(a!==null)return a}}return null},be=(e,t)=>{var n,l;if(h.current=(h.current||"")+e,x.current&&clearTimeout(x.current),h.current){if(!o.current)return;let a=[...U(o.current,'[role="treeitem"]')],i=a.find(d=>d.getAttribute("data-node-key")===t.key);if(!i)return;let f=a.indexOf(i),g=h.current.toLowerCase(),s=null;for(let d=f+1;d<a.length;d++){let k=a[d];if((((n=k.textContent)==null?void 0:n.trim().toLowerCase())||"").startsWith(g)){s=k;break}}if(!s)for(let d=0;d<=f;d++){let k=a[d];if((((l=k.textContent)==null?void 0:l.trim().toLowerCase())||"").startsWith(g)){s=k;break}}s&&s!==i&&(a.forEach(d=>{d.tabIndex=-1}),s.tabIndex=0,te(s))}x.current=setTimeout(()=>{h.current="",x.current=null},500)},ye=e=>{let t=e.target,n=e.currentTarget;return n&&(n.isSameNode(t)||n.isSameNode(t.closest('[role="treeitem"]')))},Te=e=>{(e.code==="Enter"||e.code==="NumpadEnter")&&e.preventDefault()},Se=e=>{r.droppableNodes&&v()?e.dataTransfer.dropEffect="copy":e.dataTransfer.dropEffect="none",e.preventDefault()},he=e=>{let{dragNode:t,dragScope:n}=E.getDragState();r.droppableNodes&&v()&&(N(!0),r.onDragEnter&&r.onDragEnter({originalEvent:e,value:r.value||[],dragNode:t,dragNodeScope:n}))},Ne=e=>{if(r.droppableNodes){let t=e.currentTarget.getBoundingClientRect();if((e.clientX>=t.right||e.clientX<=t.left||e.clientY>=t.bottom||e.clientY<=t.top)&&(N(!1),r.onDragLeave)){let{dragNode:n,dragScope:l}=E.getDragState();r.onDragLeave({originalEvent:e,value:r.value||[],dragNode:n,dragNodeScope:l})}}},J=(e,t)=>{let{dragNodeSubNodes:n}=E.getDragState();n&&n.splice(t,1);let l=[...r.value||[],e];r.onValueChange&&r.onValueChange({value:l}),E.stopDrag({node:e})},ke=e=>{if(r.droppableNodes){e.preventDefault();let{dragNode:t,dragScope:n,dragNodeIndex:l}=E.getDragState();if(t&&v()){if(xe(n)){E.stopDrag({node:t}),N(!1);return}l!==null&&(r.validateDrop?r.onNodeDrop&&r.onNodeDrop({originalEvent:e,value:r.value||[],dragNode:t,dropNode:null,index:l,accept:()=>{J(t,l)}}):(r.onNodeDrop&&r.onNodeDrop({originalEvent:e,value:r.value||[],dragNode:t,dropNode:null,index:l}),J(t,l)))}}N(!1)},v=e=>{let{dragNode:t,dragScope:n}=E.getDragState();if(t)if(De(n)){let l=!0;return e&&t===e&&(l=!1),l}else return!1;else return!1},j=(e,t)=>{if(e===void 0&&t===void 0)return!0;if(e===void 0||t===void 0)return!1;if(typeof t=="string"){if(typeof e=="string")return e===t;if(Array.isArray(e))return e.indexOf(t)!==-1}else if(Array.isArray(t)){if(typeof e=="string")return t.indexOf(e)!==-1;if(Array.isArray(e)){for(let n of e)if(t.indexOf(n)!==-1)return!0;return!1}}return!1},De=e=>r.droppableScope===void 0?!0:j(e,r.droppableScope),xe=e=>j(e,r.draggableScope);return{state:re,getNodes:K,onKeyDown:le,onNodeToggle:M,onNodeClick:_,onClick:Y,onCheckboxChange:z,isNodeSelected:L,onFilterKeyUp:Te,onDragOver:Se,onDragEnter:he,onDragLeave:Ne,onDrop:ke,allowDrop:v,findNodeInfo:e=>{let t=1,n=0,l=0,a=(f,g)=>{for(let s=0;s<f.length;s++){let d=f[s];if(d.key===e)return t=g,n=s+1,l=f.length,!0;if(d.children&&a(d.children,g+1))return!0}return!1},i=K();return a(i,1),{level:t,posInSet:n,setSize:l}}}}});export{E as TreeDragDropService,$ as defaultProps,Ye as useTree};
1
+ var Ye=Object.defineProperty,je=Object.defineProperties;var Xe=Object.getOwnPropertyDescriptors;var Ke=Object.getOwnPropertySymbols;var $e=Object.prototype.hasOwnProperty,Ge=Object.prototype.propertyIsEnumerable;var Me=(t,e,a)=>e in t?Ye(t,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[e]=a,b=(t,e)=>{for(var a in e||(e={}))$e.call(e,a)&&Me(t,a,e[a]);if(Ke)for(var a of Ke(e))Ge.call(e,a)&&Me(t,a,e[a]);return t},q=(t,e)=>je(t,Xe(e));import{withHeadless as et}from"@primereact/core/headless";import{useControlledState as _e}from"@primereact/hooks/use-controlled-state";import*as w from"react";var Pe={value:void 0,expandedKeys:void 0,defaultExpandedKeys:void 0,selectionKeys:void 0,defaultSelectionKeys:void 0,selectionMode:void 0,metaKeySelection:!1,highlightOnSelect:!1,draggable:void 0,droppable:void 0,draggableScope:void 0,droppableScope:void 0,onExpandedChange:void 0,onSelectionChange:void 0,onToggle:void 0,onExpand:void 0,onCollapse:void 0,onClick:void 0,onSelect:void 0,onUnselect:void 0,onMove:void 0,validateMove:void 0,onFocusedKeyChange:void 0,loading:!1};import*as ge from"react";var _={isDragging:!1,dragNode:null,dragScope:null,dragNodeSubNodes:null,dragNodeIndex:null,sourceTreeId:null,sourceCommit:null},pe=new Set,ye=new Set,H={getDragState(){return _},startDrag(t){var e,a,r,T,v;_.isDragging=!0,_.dragNode=t.node,_.dragScope=(e=t.scope)!=null?e:null,_.dragNodeSubNodes=(a=t.subNodes)!=null?a:null,_.dragNodeIndex=(r=t.index)!=null?r:null,_.sourceTreeId=(T=t.sourceTreeId)!=null?T:null,_.sourceCommit=(v=t.sourceCommit)!=null?v:null,pe.forEach(M=>M(t))},stopDrag(t){_.isDragging=!1,_.dragNode=null,_.dragScope=null,_.dragNodeSubNodes=null,_.dragNodeIndex=null,_.sourceTreeId=null,_.sourceCommit=null,ye.forEach(e=>e(t))},onDragStart(t){return pe.add(t),()=>pe.delete(t)},onDragStop(t){return ye.add(t),()=>ye.delete(t)}};function Ie(t,e){if(t.key===e)return!0;if(!t.children||t.children.length===0)return!1;for(let a of t.children)if(Ie(a,e))return!0;return!1}function we({props:t,setDragHoverState:e,getNodes:a}){ge.useEffect(()=>{if(!t.droppable)return;let i=H.onDragStop(()=>{e(!1)});return()=>{i()}},[t.droppable,e]);let r=ge.useCallback(i=>{let{dragNode:f,dragScope:L}=H.getDragState();return!(!f||!Je(L,t.droppableScope)||i&&f===i)},[t.droppableScope]),T=i=>{t.droppable&&r()?i.dataTransfer.dropEffect="copy":i.dataTransfer.dropEffect="none",i.preventDefault()},v=i=>{t.droppable&&r()&&e(!0)},M=i=>{if(!t.droppable)return;let f=i.currentTarget.getBoundingClientRect();(i.clientX>=f.right||i.clientX<=f.left||i.clientY>=f.bottom||i.clientY<=f.top)&&e(!1)},u=(i,f,L)=>{let{sourceCommit:F}=H.getDragState(),I=t.value||[],Y=I.some(l=>Ie(l,f.key)),U=[...I,f],z={originalEvent:i,value:U,dragNode:f,dropNode:null,dropIndex:U.length-1,dropPosition:"inside"},B=()=>{var l;(l=t.onMove)==null||l.call(t,z),F&&!Y&&F(i),H.stopDrag({node:f})};if(t.validateMove){let l=t.validateMove(z);if(l instanceof Promise){l.then(g=>{g?B():H.stopDrag({node:f})});return}if(!l){H.stopDrag({node:f});return}}B()};return{allowDrop:r,onDragOver:T,onDragEnter:v,onDragLeave:M,onDrop:i=>{if(!t.droppable){e(!1);return}i.preventDefault();let{dragNode:f,dragScope:L,dragNodeIndex:F}=H.getDragState();if(f&&r()){if(Qe(L,t.draggableScope)){H.stopDrag({node:f}),e(!1);return}F!==null&&u(i,f,F)}e(!1)}}}function Ue(t,e){if(t==null&&e==null)return!0;if(t==null||e==null)return!1;if(typeof e=="string"){if(typeof t=="string")return t===e;if(Array.isArray(t))return t.indexOf(e)!==-1}else if(Array.isArray(e)){if(typeof t=="string")return e.indexOf(t)!==-1;if(Array.isArray(t)){for(let a of t)if(e.indexOf(a)!==-1)return!0;return!1}}return!1}function Je(t,e){return e==null?!0:Ue(t,e)}function Qe(t,e){return Ue(t,e)}function he(t,e,a,r,T,v){return{originalEvent:t,value:e,dragNode:a,dropNode:r,dropIndex:T,dropPosition:v}}import*as me from"react";function Ae(t){return me.useMemo(()=>{let e=new Map,a=[],r=(T,v,M)=>{var u;for(let k=0;k<T.length;k++){let i=T[k];e.set(i.key,{node:i,parentKey:v,level:M,posInSet:k+1,setSize:T.length}),a.push(i.key),(u=i.children)!=null&&u.length&&r(i.children,i.key,M+1)}};return r(t!=null?t:[],null,1),{nodeMap:e,flatOrder:a}},[t])}function He(t,e){return me.useMemo(()=>{let a=[],r=e!=null?e:{},T=v=>{var M;for(let u of v)a.push(u.key),r[u.key]===!0&&((M=u.children)!=null&&M.length)&&T(u.children)};return T(t!=null?t:[]),a},[t,e])}import{focus as Le,isPrintableCharacter as Ze}from"@primeuix/utils";import*as le from"react";var De=500;function Oe({props:t,elementRef:e,visibleKeys:a,findNodeByKey:r,onNodeToggle:T,onClick:v,setFocusedKey:M}){let u=le.useRef(null),k=le.useRef("");le.useEffect(()=>()=>{u.current&&(clearTimeout(u.current),u.current=null)},[]);let i=l=>{if(!e.current)return;let g=e.current.querySelector(`[role="treeitem"][data-node-key="${CSS.escape(l)}"]`);if(!g)return;e.current.querySelectorAll('[role="treeitem"]').forEach(P=>{P.tabIndex=-1}),g.tabIndex=0,Le(g)},f=(l,g)=>{var P,A;let E=(A=(P=a[l])!=null?P:g)!=null?A:null;E&&(M(E),i(E))},L=l=>{let g=a.indexOf(l);g===-1||g>=a.length-1||f(g+1)},F=l=>{let g=a.indexOf(l);g<=0||f(g-1)},I=()=>{a.length>0&&f(0)},Y=()=>{a.length>0&&f(a.length-1)},U=(l,g)=>{var V,C;if(k.current=(k.current||"")+l,u.current&&clearTimeout(u.current),!e.current){u.current=setTimeout(()=>{k.current="",u.current=null},De);return}let E=Array.from(e.current.querySelectorAll('[role="treeitem"]')),P=E.find(n=>n.getAttribute("data-node-key")===g.key);if(!P){u.current=setTimeout(()=>{k.current="",u.current=null},De);return}let A=E.indexOf(P),x=k.current.toLowerCase(),R=null;for(let n=A+1;n<E.length;n++){let o=E[n];if((((V=o.textContent)==null?void 0:V.trim().toLowerCase())||"").startsWith(x)){R=o;break}}if(!R)for(let n=0;n<=A;n++){let o=E[n];if((((C=o.textContent)==null?void 0:C.trim().toLowerCase())||"").startsWith(x)){R=o;break}}if(R&&R!==P){let n=R.getAttribute("data-node-key");n&&(M(n),E.forEach(o=>{o.tabIndex=-1}),R.tabIndex=0,Le(R))}u.current=setTimeout(()=>{k.current="",u.current=null},De)};return{onKeyDown:(l,g,E,P,A)=>{var C;let x=l.target,R=l.currentTarget;if(!R||!R.isSameNode(x)&&!R.isSameNode(x.closest('[role="treeitem"]')))return;let V=l.metaKey||l.ctrlKey;switch(l.code){case"ArrowDown":l.preventDefault(),L(g.key);break;case"ArrowUp":l.preventDefault(),F(g.key);break;case"ArrowRight":l.preventDefault(),!A&&!P?T(l,g):!A&&P&&L(g.key);break;case"ArrowLeft":if(l.preventDefault(),!A&&P)T(l,g);else{let n=a.indexOf(g.key);for(let o=n-1;o>=0;o--){let s=a[o],d=r(s);if((C=d==null?void 0:d.children)!=null&&C.length){M(s),i(s);break}}}break;case"Home":l.preventDefault(),I();break;case"End":l.preventDefault(),Y();break;case"Enter":case"NumpadEnter":case"Space":l.preventDefault(),v(l,g,!0);break;default:!V&&Ze(l.key)&&U(l.key,g);break}},onFilterKeyUp:l=>{(l.code==="Enter"||l.code==="NumpadEnter")&&l.preventDefault()}}}import*as J from"react";function Fe({props:t,selectedKeyState:e,setSelectedKeyState:a,getNodes:r,getVisibleKeys:T}){let v=()=>t.selectionMode==="single",M=()=>t.selectionMode==="multiple",u=()=>t.selectionMode==="checkbox",k=J.useCallback(n=>{var s;return!t.selectionMode||!e?!1:u()?((s=e[n.key])==null?void 0:s.checked)===!0:e[n.key]===!0},[t.selectionMode,e]),i=(n,o)=>{var s;(s=t.onSelect)==null||s.call(t,{originalEvent:n,node:o})},f=(n,o)=>{var s;(s=t.onUnselect)==null||s.call(t,{originalEvent:n,node:o})},L=(n,o)=>{let s=n.metaKey||n.ctrlKey,d=k(o),D=e||{},N={};return d&&s?(v()?N={}:(N=b({},D),delete N[o.key]),f(n,o)):(v()?N={}:M()&&(N=s?b({},D):{}),N[o.key]=!0,i(n,o)),N},F=(n,o)=>{let s=k(o),d=e||{},D=o.key,N={};return v()?s?(N={},f(n,o)):(N={[D]:!0},i(n,o)):s?(N=b({},d),delete N[D],f(n,o)):(N=q(b({},d),{[D]:!0}),i(n,o)),N},I=(n,o,s=!1)=>{var N;if(t.selectionMode==null||o.disabled===!0)return;let D=(s?!1:t.metaKeySelection)?L(n,o):F(n,o);a([D,{originalEvent:n,value:D}]),(N=t.onClick)==null||N.call(t,{originalEvent:n,node:o})},Y=(n,o,s)=>{var d;if(o&&n.disabled!==!0?s[n.key]={checked:!0,partialChecked:!1}:delete s[n.key],(d=n.children)!=null&&d.length)for(let D of n.children)Y(D,o,s)},U=(n,o)=>{var D,N;if(!n.children||n.children.length===0)return o;let s=0,d=!1;for(let j of n.children)(D=o[j.key])!=null&&D.checked?s++:(N=o[j.key])!=null&&N.partialChecked&&(d=!0);return s===n.children.length?o[n.key]={checked:!0,partialChecked:!1}:(delete o[n.key],(d||s>0&&s!==n.children.length)&&(o[n.key]={checked:!1,partialChecked:!0})),o},z=(n,o,s=null)=>{for(let d of n){if(d.key===o)return s;if(d.children){let D=z(d.children,o,d);if(D!==null)return D}}return null},B=(n,o)=>{var oe;if(!o||o.disabled===!0)return;let d=b({},e||{}),D=o.key,j=!(((oe=d[D])==null?void 0:oe.checked)===!0);j?i(n,o):f(n,o),Y(o,j,d);let Q=z(r(),D);for(;Q;)U(Q,d),Q=z(r(),Q.key);a([d,{originalEvent:n,value:d}])},l=(n,o,s=!1)=>{u()?B(n,o):I(n,o,s)},g=(n,o)=>{let s=o!=null?o:{};a([n,{originalEvent:s,value:n}])},E=J.useCallback(n=>{var o;return e?u()?((o=e[n])==null?void 0:o.checked)===!0:e[n]===!0:!1},[t.selectionMode,e]),P=J.useCallback(n=>{var o;return!e||!u()?!1:((o=e[n])==null?void 0:o.partialChecked)===!0},[t.selectionMode,e]),A=J.useMemo(()=>{let n=T();if(n.length===0||!e)return{all:!1,some:!1};let o=0;for(let s of n){let d=e[s];(u()?(d==null?void 0:d.checked)===!0:d===!0)&&o++}return{all:o===n.length,some:o>0&&o<n.length}},[T,e,t.selectionMode]),x=J.useCallback(()=>A.all,[A]),R=J.useCallback(()=>A.some,[A]),V=J.useCallback((n,o,s)=>{let d=r().length>0?Ve(r(),o):void 0;d&&(s==="checkbox"?B(n,d):s==="radio"?E(o)||g({[o]:!0},n):I(n,d,!0))},[r,E]),C=J.useCallback(n=>{let o=T(),s=x(),d={};if(!s)for(let D of o)d[D]=u()?{checked:!0,partialChecked:!1}:!0;g(d,n)},[T,x,t.selectionMode]);return{isNodeSelected:k,onNodeClick:I,onCheckboxChange:B,onClick:l,setSelectionKeys:g,isSelected:E,isPartiallySelected:P,isAllSelected:x,isSomeSelected:R,toggleSelection:V,toggleAll:C}}function Ve(t,e){for(let a of t){if(a.key===e)return a;if(a.children){let r=Ve(a.children,e);if(r)return r}}}var St=et({name:"useTree",defaultProps:Pe,setup({props:t,elementRef:e,id:a}){var de,ue;let r=w.useRef((de=t.defaultExpandedKeys)!=null?de:{}),[T,v]=_e({value:t.expandedKeys,defaultValue:r.current,onChange:t.onExpandedChange}),M=w.useRef((ue=t.defaultSelectionKeys)!=null?ue:{}),[u,k]=_e({value:t.selectionKeys,defaultValue:M.current,onChange:t.onSelectionChange}),[i,f]=w.useState(null),[L,F]=w.useState(!1),{nodeMap:I,flatOrder:Y}=Ae(t.value),U=He(t.value,T),z=U.length,B=w.useCallback(y=>{var S;return(S=I.get(y))==null?void 0:S.node},[I]),l=w.useCallback(y=>{let S=I.get(y);return S?{level:S.level,posInSet:S.posInSet,setSize:S.setSize,parentKey:S.parentKey}:{level:1,posInSet:1,setSize:1,parentKey:null}},[I]),g=w.useCallback(()=>t.value||[],[t.value]);w.useEffect(()=>{var y;i===null&&U.length>0?f(U[0]):i&&!I.has(i)&&f((y=U[0])!=null?y:null)},[U,i,I]);let E=w.useCallback(y=>{var S;f(y),(S=t.onFocusedKeyChange)==null||S.call(t,{value:y})},[t]),P=w.useRef(U);P.current=U;let A=w.useCallback(()=>P.current,[]),x=Fe({props:t,selectedKeyState:u,setSelectedKeyState:k,getNodes:g,getVisibleKeys:A}),R=(y,S)=>{var Z,re,ae,te;if(S.disabled===!0)return;let X=T||{},G=S.key,W;X[G]?(W=b({},X),delete W[G],(Z=t.onCollapse)==null||Z.call(t,{originalEvent:y,node:S}),(re=t.onToggle)==null||re.call(t,{originalEvent:y,node:S})):(W=q(b({},X),{[G]:!0}),(ae=t.onExpand)==null||ae.call(t,{originalEvent:y,node:S}),(te=t.onToggle)==null||te.call(t,{originalEvent:y,node:S})),v([W,{originalEvent:y,value:W}])},V=Oe({props:t,elementRef:e,visibleKeys:U,findNodeByKey:B,onNodeToggle:R,onClick:x.onClick,setFocusedKey:E}),C=we({props:t,setDragHoverState:F,getNodes:g}),n={expandedKey:T,selectedKey:u,focusedKey:i,dragHover:L},o=q(b({id:a,"data-scope":"tree","data-part":"root"},L&&{"data-dragover":""}),{onDragOver:C.onDragOver,onDragEnter:C.onDragEnter,onDragLeave:C.onDragLeave,onDrop:C.onDrop}),s={"data-scope":"tree","data-part":"filter",autoComplete:"off",onKeyUp:V.onFilterKeyUp},d={"data-scope":"tree","data-part":"loading",role:"status","aria-live":"polite"},D=w.useCallback(y=>{let S=y==null?void 0:y.key,X=S?(T||{})[S]===!0:!1,G=W=>{W.stopPropagation(),R(W,y)};return{"data-scope":"tree","data-part":"toggle",[X?"data-expanded":"data-collapsed"]:"",type:"button",tabIndex:-1,onClick:G}},[T]),N=w.useCallback(()=>({"data-scope":"tree","data-part":"toggle-spacer","aria-hidden":!0}),[]),j=w.useCallback(()=>({"data-scope":"tree","data-part":"toggle-indicator","aria-hidden":!0}),[]),Q=w.useCallback((y,S,X,G,W,Z,re,ae)=>{let te=i===(y==null?void 0:y.key),be=Te=>V.onKeyDown(Te,y,S,X,Z),fe=t.selectionMode==="checkbox";return q(b(b(b(b(b({role:"treeitem",tabIndex:te?0:-1,"aria-level":S,"aria-setsize":ae,"aria-posinset":re,"aria-expanded":Z?void 0:X,"aria-selected":t.selectionMode==="single"||t.selectionMode==="multiple"?!!W:void 0,"aria-checked":fe?G:void 0,"data-scope":"tree","data-part":"node","data-node-key":y==null?void 0:y.key},!Z&&{[X?"data-expanded":"data-collapsed"]:""}),(fe?G:W)&&{"data-selected":""}),Z&&{"data-leaf":""}),(y==null?void 0:y.disabled)===!0&&{"data-disabled":""}),te&&{"data-focused":""}),{onKeyDown:be})},[V,t.selectionMode,i]),oe=w.useCallback(()=>({"data-scope":"tree","data-part":"nodes",role:"tree"}),[]);return{state:n,nodeMap:I,flatOrder:Y,visibleKeys:U,visibleCount:z,findNodeByKey:B,findNodeInfo:l,getNodes:g,setFocusedKey:E,setSelectionKeys:x.setSelectionKeys,onKeyDown:V.onKeyDown,onNodeToggle:R,onNodeClick:x.onNodeClick,onClick:x.onClick,onCheckboxChange:x.onCheckboxChange,isNodeSelected:x.isNodeSelected,selection:{isSelected:x.isSelected,isPartiallySelected:x.isPartiallySelected,isAllSelected:x.isAllSelected,isSomeSelected:x.isSomeSelected,toggleSelection:x.toggleSelection,toggleAll:x.toggleAll},onFilterKeyUp:V.onFilterKeyUp,onDragOver:C.onDragOver,onDragEnter:C.onDragEnter,onDragLeave:C.onDragLeave,onDrop:C.onDrop,allowDrop:C.allowDrop,rootProps:o,getToggleProps:D,getToggleSpacerProps:N,getToggleIndicatorProps:j,getNodeProps:Q,filterProps:s,loadingProps:d,getNodesProps:oe}}});import{withHeadless as tt}from"@primereact/core/headless";import{getOuterHeight as nt,getOuterWidth as ot}from"@primeuix/utils";import*as ie from"react";var ze={node:void 0,index:void 0,context:void 0,parentContext:void 0,onMove:void 0};function Be(t,e){if(t.key===e)return!0;if(!t.children||t.children.length===0)return!1;for(let a of t.children)if(Be(a,e))return!0;return!1}var Pt=tt({name:"useTreeNode",defaultProps:ze,setup({props:t}){var Ne,Se,ke,Ee,xe,Ce,ve,Re;let e=t.context,a=t.parentContext,r=t.node,T=r==null?void 0:r.key,v=T?((Se=(Ne=e==null?void 0:e.state)==null?void 0:Ne.expandedKey)==null?void 0:Se[T])===!0:!1,M=r&&(ke=e==null?void 0:e.isNodeSelected(r))!=null?ke:!1,u=r?(Ee=r.leaf)!=null?Ee:!r.children||r.children.length===0:!0,k=!1,i=!1;if((e==null?void 0:e.props.selectionMode)==="checkbox"&&T&&((xe=e==null?void 0:e.state)!=null&&xe.selectedKey)){let c=e.state.selectedKey;k=((Ce=c[T])==null?void 0:Ce.checked)===!0,i=((ve=c[T])==null?void 0:ve.partialChecked)===!0}let f=1,L=1,F=1;if(e&&T){let c=e.findNodeInfo(T);f=c.level,L=c.posInSet,F=c.setSize}else if(t.index!==void 0){let c=a==null?void 0:a.node,p=c?c.children:e==null?void 0:e.getNodes();F=(p==null?void 0:p.length)||0,L=t.index+1}let[I,Y]=ie.useState(!1),[U,z]=ie.useState(!1),[B,l]=ie.useState(!1),[g,E]=ie.useState(!1),P=a==null?void 0:a.node,A=(P==null?void 0:P.children)||(e==null?void 0:e.getNodes())||[],x=(e==null?void 0:e.props.draggable)===!0,R=(r==null?void 0:r.draggable)!==!1&&x,V=H.getDragState(),C=(e==null?void 0:e.props.droppable)&&((Re=e==null?void 0:e.allowDrop)==null?void 0:Re.call(e,r)),n=(r==null?void 0:r.droppable)!==!1&&C,o=U&&C,s=B&&C,d=g&&n,D=o?"before":s?"after":"inside",N=(c,p)=>c.reduce((h,m)=>{if(m.key===p.key)return h;if(m.children&&m.children.length>0){let O=N(m.children,p);h.push(q(b({},m),{children:O}))}else h.push(m);return h},[]),j=(c,p,h,m)=>{let O=c.findIndex(K=>K.key===p);if(O!==-1){let K=[...c];return K.splice(O+m,0,h),K}return c.map(K=>K.children&&K.children.length>0?q(b({},K),{children:j(K.children,p,h,m)}):K)},Q=(c,p,h)=>c.map(m=>m.key===p?q(b({},m),{children:[...m.children||[],h]}):m.children&&m.children.length>0?q(b({},m),{children:Q(m.children,p,h)}):m),oe=()=>{var m;let c=V.dragNode,p=(e==null?void 0:e.getNodes())||[];if(!r||!c)return null;let h=N(p,c);return D==="before"?h=j(h,r.key,c,0):D==="after"?h=j(h,r.key,c,1):h=Q(h,r.key,c),{updated:h,dropIndex:(m=t.index)!=null?m:0}},de=c=>{var $;if(!R){c.preventDefault();return}c.stopPropagation(),c.dataTransfer.effectAllowed="all",c.dataTransfer.setData("text","data");let p=c.currentTarget,h=p.cloneNode(!0),m=h.querySelector('[data-part="toggle"]');p.setAttribute("data-dragging","true"),h.style.width=ot(p)+"px",h.style.height=nt(p)+"px",h.setAttribute("data-part","drag-image"),m&&(m.style.visibility="hidden"),document.body.appendChild(h),c.dataTransfer.setDragImage(h,0,0),setTimeout(()=>document.body.removeChild(h),0);let O=($=e==null?void 0:e.getNodes())!=null?$:[],K=se=>{var ne,ce;if(!r)return;let ee=N(O,r);(ce=e==null?void 0:(ne=e.props).onMove)==null||ce.call(ne,{originalEvent:se,value:ee,dragNode:r,dropNode:null,dropIndex:-1,dropPosition:"inside"})};H.startDrag({node:r,subNodes:A,index:t.index,scope:e==null?void 0:e.props.draggableScope,sourceCommit:K})},ue=c=>{if(C){c.dataTransfer.dropEffect="copy";let h=c.currentTarget.getBoundingClientRect(),m=c.clientY-h.top,O=m<h.height*.25,K=m>h.height*.75,$=!O&&!K&&!!n;O!==U&&z(O),K!==B&&l(K),$!==g&&E($)}else c.dataTransfer.dropEffect="none";e!=null&&e.props.droppable&&(c.preventDefault(),c.stopPropagation())},y=()=>{},S=()=>{z(!1),l(!1),E(!1)},X=c=>{var p;c.stopPropagation(),(p=c.currentTarget)==null||p.removeAttribute("data-dragging"),H.stopDrag({node:r})},G=(c,p,h)=>{var $,se,ee,ne,ce;let m=he(c,h,p,r,($=t.index)!=null?$:0,D),{sourceCommit:O}=H.getDragState(),K=((se=e==null?void 0:e.getNodes())!=null?se:[]).some(qe=>Be(qe,p.key));(ee=t.onMove)==null||ee.call(t,m),(ce=e==null?void 0:(ne=e.props).onMove)==null||ce.call(ne,m),O&&!K&&O(c)},W=c=>{var $;if(!C)return;c.preventDefault(),c.stopPropagation();let p=V.dragNode;if(!(D!=="inside"||n)||!p){z(!1),l(!1),E(!1);return}let m=e==null?void 0:e.props.validateMove,O=oe();if(!O){H.stopDrag({node:p});return}let K=()=>{G(c,p,O.updated),H.stopDrag({node:p})};if(m){let se=he(c,O.updated,p,r,($=t.index)!=null?$:0,D),ee=m(se);ee instanceof Promise?ee.then(ne=>{ne?K():H.stopDrag({node:p})}):ee?K():H.stopDrag({node:p})}else K();z(!1),l(!1),E(!1)},Z=c=>{e&&r&&r.disabled!==!0&&(e.onClick(c,r,I),I&&Y(!1))},re=()=>{Y(!0)},ae={expanded:v,selected:M,checked:k,partialChecked:i,leaf:u,level:f,posInSet:L,setSize:F,isNodeDropActive:!!d,isPrevDropPointActive:!!o,isNextDropPointActive:!!s,isDraggable:!!R,nodeTouched:I},te=e==null?void 0:e.getNodeProps(r,f,v,k,M,u,L,F),fe=(e==null?void 0:e.props.selectionMode)==="checkbox"?k:M,Te=!!(e!=null&&e.props.selectionMode&&(r==null?void 0:r.disabled)!==!0),We=q(b(b(b(b(b(b(b(b({"data-scope":"tree","data-part":"content",draggable:!!R},fe&&{"data-selected":""}),Te&&{"data-selectable":""}),!u&&{[v?"data-expanded":"data-collapsed"]:""}),u&&{"data-leaf":""}),k&&{"data-checked":""}),i&&{"data-partial-checked":""}),(r==null?void 0:r.disabled)===!0&&{"data-disabled":""}),d&&{"data-dragover":""}),{onDragStart:de,onDragOver:ue,onDragEnter:y,onDragLeave:S,onDragEnd:X,onDrop:W,onClick:Z,onTouchEnd:re});return{state:ae,parentNode:a,nodeProps:te,contentProps:We,dropPointProps:{"data-scope":"tree","data-part":"drop-point","aria-hidden":!0}}}});export{H as TreeDragDropService,he as buildMoveEvent,Pe as defaultProps,ze as defaultTreeNodeProps,St as useTree,Oe as useTreeKeyboard,Pt as useTreeNode,Ae as useTreeNodeMap,we as useTreeRootDragDrop,Fe as useTreeSelection,He as useTreeVisibleKeys};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tree/useTree.ts","../../src/tree/TreeDragDropService.ts","../../src/tree/useTree.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useControlledState } from '@primereact/hooks/use-controlled-state';\nimport type { TreeCheckboxSelectionKeys, TreeExpandedKeys, TreeNode, TreeSelectionKeys } from '@primereact/types/shared/tree';\nimport { find, findSingle, focus, getAttribute, isPrintableCharacter } from '@primeuix/utils';\nimport * as React from 'react';\nimport { TreeDragDropService } from './TreeDragDropService';\nimport { defaultProps } from './useTree.props';\n\nexport const useTree = withHeadless({\n name: 'useTree',\n defaultProps,\n setup({ props, elementRef }) {\n const defaultExpandedKeyRef = React.useRef(props.defaultExpandedKeys ?? {});\n const [expandedKeyState, setExpandedKeyState] = useControlledState({\n value: props.expandedKeys,\n defaultValue: defaultExpandedKeyRef.current,\n onChange: props.onExpandedChange\n });\n\n const defaultSelectedKeyRef = React.useRef(props.defaultSelectionKeys ?? {});\n const [selectedKeyState, setSelectedKeyState] = useControlledState({\n value: props.selectionKeys,\n defaultValue: defaultSelectedKeyRef.current,\n onChange: props.onSelectionChange\n });\n\n const searchTimeout = React.useRef<NodeJS.Timeout | null>(null);\n const searchValue = React.useRef<string>('');\n\n const [dragHoverState, setDragHoverState] = React.useState(false);\n\n React.useEffect(() => {\n if (props.droppableNodes) {\n const dragStopCleanup = TreeDragDropService.onDragStop(() => {\n setDragHoverState(false);\n });\n\n return () => {\n dragStopCleanup();\n };\n }\n }, [props.droppableNodes]);\n\n const state = {\n expandedKey: expandedKeyState,\n selectedKey: selectedKeyState,\n dragHover: dragHoverState\n };\n\n const getNodes = () => {\n return props.value || [];\n };\n\n const onKeyDown = (event: React.KeyboardEvent, node: TreeNode, level: number, expanded: boolean, leaf: boolean) => {\n if (!isSameNode(event)) return;\n\n const metaKey = event.metaKey || event.ctrlKey;\n\n switch (event.code) {\n case 'Tab':\n onTabKey();\n\n break;\n\n case 'ArrowDown':\n onArrowDown(event);\n\n break;\n\n case 'ArrowUp':\n onArrowUp(event);\n\n break;\n\n case 'ArrowRight':\n onArrowRight(event, node, expanded, leaf);\n\n break;\n\n case 'ArrowLeft':\n onArrowLeft(event, node, level, expanded, leaf);\n\n break;\n\n case 'Enter':\n case 'NumpadEnter':\n case 'Space':\n onEnterKey(event, node, expanded);\n\n break;\n\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n searchNodes(event.key, node);\n }\n\n break;\n }\n };\n\n const onArrowDown = (event: React.KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const nodeElement = target.getAttribute('data-pc-section') === 'treetoggle' ? target.closest('[role=\"treeitem\"]') : target;\n\n if (!nodeElement) return;\n\n const listElement = nodeElement.children[1];\n\n if (listElement) {\n focusRowChange(nodeElement, listElement.children[0]);\n } else {\n if (nodeElement.nextElementSibling) {\n focusRowChange(nodeElement, nodeElement.nextElementSibling);\n } else {\n const nextSiblingAncestor = findNextSiblingOfAncestor(nodeElement);\n\n if (nextSiblingAncestor) {\n focusRowChange(nodeElement, nextSiblingAncestor);\n }\n }\n }\n\n event.preventDefault();\n };\n\n const onArrowUp = (event: React.KeyboardEvent) => {\n const nodeElement = event.target as HTMLElement;\n\n if (nodeElement.previousElementSibling) {\n focusRowChange(nodeElement, nodeElement.previousElementSibling, findLastVisibleDescendant(nodeElement.previousElementSibling));\n } else {\n const parentNodeElement = getParentNodeElement(nodeElement);\n\n if (parentNodeElement) {\n focusRowChange(nodeElement, parentNodeElement);\n }\n }\n\n event.preventDefault();\n };\n\n const onArrowRight = (event: React.KeyboardEvent, node: TreeNode, expanded: boolean, leaf: boolean) => {\n if (leaf || expanded) return;\n\n (event.currentTarget as HTMLElement).tabIndex = -1;\n\n onNodeToggle(event, node);\n\n setTimeout(() => {\n onArrowDown(event);\n }, 0);\n };\n\n const onArrowLeft = (event: React.KeyboardEvent, node: TreeNode, level: number, expanded: boolean, leaf: boolean) => {\n if (level === 0 && !expanded) {\n return false;\n }\n\n if (expanded && !leaf) {\n onNodeToggle(event, node);\n\n return false;\n }\n\n const target = findBeforeClickableNode(event.currentTarget as HTMLElement);\n\n if (target) {\n focusRowChange(event.currentTarget as HTMLElement, target);\n }\n };\n\n const onEnterKey = (event: React.KeyboardEvent, node: TreeNode, expanded: boolean) => {\n setTabIndexForSelectionMode(event, expanded);\n onClick(event, node, true);\n\n event.preventDefault();\n };\n\n const onTabKey = () => {\n setAllNodesTabIndexes();\n };\n\n const setAllNodesTabIndexes = () => {\n if (!elementRef.current) return;\n\n const nodes = find(elementRef.current as HTMLElement, '[role=\"treeitem\"]');\n\n const hasSelectedNode = [...nodes].some((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');\n\n [...nodes].forEach((node) => {\n (node as HTMLElement).tabIndex = -1;\n });\n\n if (hasSelectedNode) {\n const selectedNodes = [...nodes].filter((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');\n\n (selectedNodes[0] as HTMLElement).tabIndex = 0;\n\n return;\n }\n\n ([...nodes][0] as HTMLElement).tabIndex = 0;\n };\n\n const setTabIndexForSelectionMode = (event: React.KeyboardEvent, expanded: boolean) => {\n if (props.selectionMode !== null) {\n const parentElement = (event.currentTarget as HTMLElement).parentElement;\n\n if (!parentElement) return;\n\n const elements = [...find(parentElement, '[role=\"treeitem\"]')];\n\n (event.currentTarget as HTMLElement).tabIndex = expanded ? -1 : 0;\n\n if (elements.every((element) => (element as HTMLElement).tabIndex === -1)) {\n (elements[0] as HTMLElement).tabIndex = 0;\n }\n }\n };\n\n const focusRowChange = (firstFocusableRow: Element, currentFocusedRow: Element, lastVisibleDescendant?: Element) => {\n (firstFocusableRow as HTMLElement).tabIndex = -1;\n (currentFocusedRow as HTMLElement).tabIndex = 0;\n\n focus((lastVisibleDescendant || currentFocusedRow) as HTMLElement);\n };\n\n const findBeforeClickableNode = (node: HTMLElement): Element | null => {\n const ulElement = node.closest('ul');\n\n if (!ulElement) return null;\n\n const parentListElement = ulElement.closest('li');\n\n if (parentListElement) {\n const prevNodeButton = findSingle(parentListElement, 'button');\n\n if (prevNodeButton && (prevNodeButton as HTMLElement).style.visibility !== 'hidden') {\n return parentListElement;\n }\n\n if (node.previousElementSibling) {\n return findBeforeClickableNode(node.previousElementSibling as HTMLElement);\n }\n }\n\n return null;\n };\n\n const findNextSiblingOfAncestor = (nodeElement: Element): Element | null => {\n const parentNodeElement = getParentNodeElement(nodeElement);\n\n if (parentNodeElement) {\n if (parentNodeElement.nextElementSibling) return parentNodeElement.nextElementSibling;\n else return findNextSiblingOfAncestor(parentNodeElement);\n } else {\n return null;\n }\n };\n\n const findLastVisibleDescendant = (nodeElement: Element): Element => {\n const childrenListElement = nodeElement.children[1];\n\n if (childrenListElement) {\n const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];\n\n return findLastVisibleDescendant(lastChildElement);\n } else {\n return nodeElement;\n }\n };\n\n const getParentNodeElement = (nodeElement: Element): Element | null => {\n const parentElement = nodeElement.parentElement;\n\n if (!parentElement) return null;\n\n const parentNodeElement = parentElement.parentElement;\n\n if (!parentNodeElement) return null;\n\n return getAttribute(parentNodeElement, 'role') === 'treeitem' ? parentNodeElement : null;\n };\n\n const onNodeToggle = (event: React.SyntheticEvent, node: TreeNode) => {\n const currentKeys = (expandedKeyState || {}) as TreeExpandedKeys;\n const nodeKey = node.key;\n let newValue: TreeExpandedKeys;\n\n if (currentKeys[nodeKey]) {\n newValue = { ...currentKeys };\n delete newValue[nodeKey];\n\n if (props.onCollapse) {\n props.onCollapse({\n originalEvent: event,\n node\n });\n }\n\n if (props.onToggle) {\n props.onToggle({\n originalEvent: event,\n node\n });\n }\n } else {\n newValue = { ...currentKeys, [nodeKey]: true };\n\n if (props.onExpand) {\n props.onExpand({\n originalEvent: event,\n node\n });\n }\n\n if (props.onToggle) {\n props.onToggle({\n originalEvent: event,\n node\n });\n }\n }\n\n setExpandedKeyState([\n newValue,\n {\n originalEvent: event,\n value: newValue\n }\n ]);\n };\n\n const onNodeClick = (event: React.MouseEvent | React.KeyboardEvent, node: TreeNode, nodeTouched = false) => {\n if (props.selectionMode != null) {\n const metaSelection = nodeTouched ? false : props.metaKeySelection;\n const newValue = metaSelection ? handleSelectionWithMetaKey(event, node) : handleSelectionWithoutMetaKey(event, node);\n\n setSelectedKeyState([\n newValue,\n {\n originalEvent: event,\n value: newValue\n }\n ]);\n\n if (props.onClick) {\n props.onClick({\n originalEvent: event,\n node\n });\n }\n }\n };\n\n const handleSelectionWithMetaKey = (event: React.MouseEvent | React.KeyboardEvent, node: TreeNode) => {\n const metaKey = (event as React.MouseEvent).metaKey || (event as React.KeyboardEvent).ctrlKey;\n const selected = isNodeSelected(node);\n let _selectionKeys: TreeSelectionKeys = {};\n const currentSelection = (selectedKeyState || {}) as TreeSelectionKeys;\n\n if (selected && metaKey) {\n if (isSingleSelectionMode()) {\n _selectionKeys = {};\n } else {\n _selectionKeys = { ...currentSelection };\n delete _selectionKeys[node.key];\n }\n\n if (props.onUnselect) {\n props.onUnselect({\n originalEvent: event,\n node\n });\n }\n } else {\n if (isSingleSelectionMode()) {\n _selectionKeys = {};\n } else if (isMultipleSelectionMode()) {\n _selectionKeys = !metaKey ? {} : { ...currentSelection };\n }\n\n _selectionKeys[node.key] = true;\n\n if (props.onSelect) {\n props.onSelect({\n originalEvent: event,\n node\n });\n }\n }\n\n return _selectionKeys;\n };\n\n const handleSelectionWithoutMetaKey = (event: React.MouseEvent | React.KeyboardEvent, node: TreeNode) => {\n const selected = isNodeSelected(node);\n let _selectionKeys: TreeSelectionKeys = {};\n const currentSelection = (selectedKeyState || {}) as TreeSelectionKeys;\n const nodeKey = node.key;\n\n if (isSingleSelectionMode()) {\n if (selected) {\n _selectionKeys = {};\n\n if (props.onUnselect) {\n props.onUnselect({\n originalEvent: event,\n node\n });\n }\n } else {\n _selectionKeys = { [nodeKey]: true };\n\n if (props.onSelect) {\n props.onSelect({\n originalEvent: event,\n node\n });\n }\n }\n } else {\n if (selected) {\n _selectionKeys = { ...currentSelection };\n delete _selectionKeys[nodeKey];\n\n if (props.onUnselect) {\n props.onUnselect({\n originalEvent: event,\n node\n });\n }\n } else {\n _selectionKeys = { ...currentSelection, [nodeKey]: true };\n\n if (props.onSelect) {\n props.onSelect({\n originalEvent: event,\n node\n });\n }\n }\n }\n\n return _selectionKeys;\n };\n\n const isSingleSelectionMode = () => {\n return props.selectionMode === 'single';\n };\n\n const isMultipleSelectionMode = () => {\n return props.selectionMode === 'multiple';\n };\n\n const isCheckboxSelectionMode = () => {\n return props.selectionMode === 'checkbox';\n };\n\n const isNodeSelected = (node: TreeNode) => {\n if (!props.selectionMode || !selectedKeyState) return false;\n\n if (isCheckboxSelectionMode()) {\n const checkboxKeys = selectedKeyState as TreeCheckboxSelectionKeys;\n\n return checkboxKeys[node.key]?.checked === true;\n }\n\n const keys = selectedKeyState as TreeSelectionKeys;\n\n return keys[node.key] === true;\n };\n\n const onClick = (event: React.MouseEvent | React.KeyboardEvent, node: TreeNode, nodeTouched = false) => {\n if (isCheckboxSelectionMode()) {\n onCheckboxChange(event, node);\n } else {\n onNodeClick(event, node, nodeTouched);\n }\n };\n\n const onCheckboxChange = (event: React.SyntheticEvent, node: TreeNode) => {\n const currentKeys = (selectedKeyState || {}) as TreeCheckboxSelectionKeys;\n const _selectionKeys = { ...currentKeys };\n const nodeKey = node.key;\n\n if (!node) return;\n\n const isChecked = _selectionKeys[nodeKey]?.checked === true;\n const newCheckState = !isChecked;\n\n if (newCheckState) {\n if (props.onUnselect) {\n props.onUnselect({\n originalEvent: event,\n node\n });\n }\n } else {\n if (props.onSelect) {\n props.onSelect({\n originalEvent: event,\n node\n });\n }\n }\n\n propagateDown(node, newCheckState, _selectionKeys);\n\n let parentNode = findParentNode(getNodes(), nodeKey);\n\n while (parentNode) {\n propagateUp(parentNode, _selectionKeys);\n parentNode = findParentNode(getNodes(), parentNode.key);\n }\n\n setSelectedKeyState([\n _selectionKeys,\n {\n originalEvent: event,\n value: _selectionKeys\n }\n ]);\n };\n\n const propagateDown = (node: TreeNode, check: boolean, selectionKeys: TreeCheckboxSelectionKeys) => {\n if (check && node.selectable !== false) {\n selectionKeys[node.key] = { checked: true, partialChecked: false };\n } else {\n delete selectionKeys[node.key];\n }\n\n if (node.children && node.children.length) {\n for (const child of node.children) {\n propagateDown(child, check, selectionKeys);\n }\n }\n };\n\n const propagateUp = (node: TreeNode, selectionKeys: TreeCheckboxSelectionKeys): TreeCheckboxSelectionKeys => {\n if (!node.children || node.children.length === 0) {\n return selectionKeys;\n }\n\n let checkedChildCount = 0;\n let childPartialSelected = false;\n\n for (const child of node.children) {\n if (selectionKeys[child.key]?.checked) {\n checkedChildCount++;\n } else if (selectionKeys[child.key]?.partialChecked) {\n childPartialSelected = true;\n }\n }\n\n if (checkedChildCount === node.children.length) {\n selectionKeys[node.key] = { checked: true, partialChecked: false };\n } else {\n delete selectionKeys[node.key];\n\n if (childPartialSelected || (checkedChildCount > 0 && checkedChildCount !== node.children.length)) {\n selectionKeys[node.key] = { checked: false, partialChecked: true };\n }\n }\n\n return selectionKeys;\n };\n\n const findParentNode = (nodes: TreeNode[], childKey: string, parent: TreeNode | null = null): TreeNode | null => {\n for (const node of nodes) {\n if (node.key === childKey) {\n return parent;\n }\n\n if (node.children) {\n const found = findParentNode(node.children, childKey, node);\n\n if (found !== null) return found;\n }\n }\n\n return null;\n };\n\n const searchNodes = (char: string, currentNode: TreeNode) => {\n searchValue.current = (searchValue.current || '') + char;\n\n if (searchTimeout.current) {\n clearTimeout(searchTimeout.current);\n }\n\n if (searchValue.current) {\n if (!elementRef.current) return;\n\n const allTreeItems = [...find(elementRef.current as HTMLElement, '[role=\"treeitem\"]')] as HTMLElement[];\n const currentNodeElement = allTreeItems.find((item) => item.getAttribute('data-node-key') === currentNode.key);\n\n if (!currentNodeElement) return;\n\n const currentIndex = allTreeItems.indexOf(currentNodeElement);\n const searchLower = searchValue.current.toLowerCase();\n let matchedElement: HTMLElement | null = null;\n\n for (let i = currentIndex + 1; i < allTreeItems.length; i++) {\n const item = allTreeItems[i];\n const label = item.textContent?.trim().toLowerCase() || '';\n\n if (label.startsWith(searchLower)) {\n matchedElement = item;\n break;\n }\n }\n\n if (!matchedElement) {\n for (let i = 0; i <= currentIndex; i++) {\n const item = allTreeItems[i];\n const label = item.textContent?.trim().toLowerCase() || '';\n\n if (label.startsWith(searchLower)) {\n matchedElement = item;\n break;\n }\n }\n }\n\n if (matchedElement && matchedElement !== currentNodeElement) {\n allTreeItems.forEach((item) => {\n item.tabIndex = -1;\n });\n\n matchedElement.tabIndex = 0;\n focus(matchedElement);\n }\n }\n\n searchTimeout.current = setTimeout(() => {\n searchValue.current = '';\n searchTimeout.current = null;\n }, 500);\n };\n\n const isSameNode = (event: React.KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n return currentTarget && (currentTarget.isSameNode(target as Node) || currentTarget.isSameNode(target.closest('[role=\"treeitem\"]') as Node));\n };\n\n const onFilterKeyUp = (event: React.KeyboardEvent) => {\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault();\n }\n };\n\n const onDragOver = (event: React.DragEvent) => {\n if (props.droppableNodes && allowDrop()) {\n event.dataTransfer.dropEffect = 'copy';\n } else {\n event.dataTransfer.dropEffect = 'none';\n }\n\n event.preventDefault();\n };\n\n const onDragEnter = (event: React.DragEvent) => {\n const { dragNode, dragScope } = TreeDragDropService.getDragState();\n\n if (props.droppableNodes && allowDrop()) {\n setDragHoverState(true);\n\n if (props.onDragEnter) {\n props.onDragEnter({\n originalEvent: event,\n value: props.value || [],\n dragNode,\n dragNodeScope: dragScope\n });\n }\n }\n };\n\n const onDragLeave = (event: React.DragEvent) => {\n if (props.droppableNodes) {\n const rect = event.currentTarget.getBoundingClientRect();\n\n if (event.clientX >= rect.right || event.clientX <= rect.left || event.clientY >= rect.bottom || event.clientY <= rect.top) {\n setDragHoverState(false);\n\n if (props.onDragLeave) {\n const { dragNode, dragScope } = TreeDragDropService.getDragState();\n\n props.onDragLeave({\n originalEvent: event,\n value: props.value || [],\n dragNode,\n dragNodeScope: dragScope\n });\n }\n }\n }\n };\n\n const processTreeDrop = (dragNode: TreeNode, dragNodeIndex: number) => {\n const { dragNodeSubNodes } = TreeDragDropService.getDragState();\n\n if (dragNodeSubNodes) {\n dragNodeSubNodes.splice(dragNodeIndex, 1);\n }\n\n const newValue = [...(props.value || []), dragNode];\n\n if (props.onValueChange) {\n props.onValueChange({\n value: newValue\n });\n }\n\n TreeDragDropService.stopDrag({\n node: dragNode\n });\n };\n\n const onDrop = (event: React.DragEvent) => {\n if (props.droppableNodes) {\n event.preventDefault();\n const { dragNode, dragScope, dragNodeIndex } = TreeDragDropService.getDragState();\n\n if (dragNode && allowDrop()) {\n if (isSameTreeScope(dragScope as string | string[])) {\n TreeDragDropService.stopDrag({\n node: dragNode\n });\n setDragHoverState(false);\n\n return;\n }\n\n if (dragNodeIndex !== null) {\n if (props.validateDrop) {\n if (props.onNodeDrop) {\n props.onNodeDrop({\n originalEvent: event,\n value: props.value || [],\n dragNode: dragNode,\n dropNode: null,\n index: dragNodeIndex,\n accept: () => {\n processTreeDrop(dragNode, dragNodeIndex);\n }\n });\n }\n } else {\n if (props.onNodeDrop) {\n props.onNodeDrop({\n originalEvent: event,\n value: props.value || [],\n dragNode: dragNode,\n dropNode: null,\n index: dragNodeIndex\n });\n }\n\n processTreeDrop(dragNode, dragNodeIndex);\n }\n }\n }\n }\n\n setDragHoverState(false);\n };\n\n const allowDrop = (dropNode?: TreeNode) => {\n const { dragNode, dragScope } = TreeDragDropService.getDragState();\n\n if (!dragNode) {\n return false;\n } else if (isValidDragScope(dragScope as string | string[])) {\n let allow = true;\n\n if (dropNode && dragNode === dropNode) {\n allow = false;\n }\n\n return allow;\n } else {\n return false;\n }\n };\n\n const hasCommonScope = (dragScope: string | string[] | undefined, dropScope: string | string[] | undefined) => {\n if (dragScope === undefined && dropScope === undefined) {\n return true;\n } else if (dragScope === undefined || dropScope === undefined) {\n return false;\n }\n\n if (typeof dropScope === 'string') {\n if (typeof dragScope === 'string') {\n return dragScope === dropScope;\n } else if (Array.isArray(dragScope)) {\n return dragScope.indexOf(dropScope) !== -1;\n }\n } else if (Array.isArray(dropScope)) {\n if (typeof dragScope === 'string') {\n return dropScope.indexOf(dragScope) !== -1;\n } else if (Array.isArray(dragScope)) {\n for (const ds of dragScope) {\n if (dropScope.indexOf(ds) !== -1) {\n return true;\n }\n }\n\n return false;\n }\n }\n\n return false;\n };\n\n const isValidDragScope = (dragScope: string | string[] | undefined) => {\n if (props.droppableScope === undefined) {\n return true;\n }\n\n return hasCommonScope(dragScope, props.droppableScope);\n };\n\n const isSameTreeScope = (dragScope: string | string[] | undefined) => {\n return hasCommonScope(dragScope, props.draggableScope);\n };\n\n const findNodeInfo = (nodeKey: string) => {\n let level = 1;\n let posInSet = 0;\n let setSize = 0;\n\n const findInNodes = (nodes: unknown[], currentLevel: number): boolean => {\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i] as { key: string; children?: unknown[] };\n\n if (node.key === nodeKey) {\n level = currentLevel;\n posInSet = i + 1;\n setSize = nodes.length;\n\n return true;\n }\n\n if (node.children) {\n if (findInNodes(node.children, currentLevel + 1)) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n const nodes = getNodes();\n\n findInNodes(nodes, 1);\n\n return { level, posInSet, setSize };\n };\n\n return {\n state,\n //methods\n getNodes,\n onKeyDown,\n onNodeToggle,\n onNodeClick,\n onClick,\n onCheckboxChange,\n isNodeSelected,\n onFilterKeyUp,\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n allowDrop,\n findNodeInfo\n };\n }\n});\n","import type { TreeNode } from '@primereact/types/shared/tree';\n\ntype DragState = {\n isDragging: boolean;\n dragNode: TreeNode | null;\n dragScope: string | string[] | null;\n dragNodeSubNodes: TreeNode[] | null;\n dragNodeIndex: number | null;\n sourceTreeId: string | null;\n};\n\ntype DragEvent = {\n node: TreeNode;\n scope?: string | string[] | null;\n subNodes?: TreeNode[];\n index?: number;\n sourceTreeId?: string;\n};\n\nconst dragState: DragState = {\n isDragging: false,\n dragNode: null,\n dragScope: null,\n dragNodeSubNodes: null,\n dragNodeIndex: null,\n sourceTreeId: null\n};\n\nconst dragStartHandlers = new Set<(event: DragEvent) => void>();\nconst dragStopHandlers = new Set<(event: DragEvent) => void>();\n\nexport const TreeDragDropService = {\n getDragState() {\n return dragState;\n },\n\n startDrag(event: DragEvent) {\n dragState.isDragging = true;\n dragState.dragNode = event.node;\n dragState.dragScope = event.scope ?? null;\n dragState.dragNodeSubNodes = event.subNodes ?? null;\n dragState.dragNodeIndex = event.index ?? null;\n dragState.sourceTreeId = event.sourceTreeId ?? null;\n\n dragStartHandlers.forEach((handler) => handler(event));\n },\n\n stopDrag(event: DragEvent) {\n dragState.isDragging = false;\n dragState.dragNode = null;\n dragState.dragScope = null;\n dragState.dragNodeSubNodes = null;\n dragState.dragNodeIndex = null;\n dragState.sourceTreeId = null;\n\n dragStopHandlers.forEach((handler) => handler(event));\n },\n\n onDragStart(handler: (event: DragEvent) => void) {\n dragStartHandlers.add(handler);\n\n return () => dragStartHandlers.delete(handler);\n },\n\n onDragStop(handler: (event: DragEvent) => void) {\n dragStopHandlers.add(handler);\n\n return () => dragStopHandlers.delete(handler);\n }\n};\n","import type { useTreeProps } from '@primereact/types/shared/tree';\n\nexport const defaultProps: useTreeProps = {\n value: [],\n expandedKeys: undefined,\n defaultExpandedKeys: undefined,\n selectionKeys: undefined,\n defaultSelectionKeys: undefined,\n selectionMode: undefined,\n metaKeySelection: false,\n highlightOnSelect: false,\n scrollHeight: undefined,\n draggableNodes: undefined,\n droppableNodes: undefined,\n draggableScope: undefined,\n droppableScope: undefined,\n validateDrop: false,\n onExpandedChange: undefined,\n onSelectionChange: undefined,\n onToggle: undefined,\n onExpand: undefined,\n onCollapse: undefined,\n onClick: undefined,\n onSelect: undefined,\n onUnselect: undefined,\n onNodeDrop: undefined,\n onDragEnter: undefined,\n onDragLeave: undefined,\n onValueChange: undefined\n};\n"],"mappings":"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","names":["withHeadless","useControlledState","find","findSingle","focus","getAttribute","isPrintableCharacter","React","dragState","dragStartHandlers","dragStopHandlers","TreeDragDropService","event","_a","_b","_c","_d","handler","defaultProps","useTree","withHeadless","defaultProps","props","elementRef","_a","_b","defaultExpandedKeyRef","expandedKeyState","setExpandedKeyState","useControlledState","defaultSelectedKeyRef","selectedKeyState","setSelectedKeyState","searchTimeout","searchValue","dragHoverState","setDragHoverState","dragStopCleanup","TreeDragDropService","state","getNodes","onKeyDown","event","node","level","expanded","leaf","isSameNode","metaKey","onTabKey","onArrowDown","onArrowUp","onArrowRight","onArrowLeft","onEnterKey","isPrintableCharacter","searchNodes","target","nodeElement","listElement","focusRowChange","nextSiblingAncestor","findNextSiblingOfAncestor","findLastVisibleDescendant","parentNodeElement","getParentNodeElement","onNodeToggle","findBeforeClickableNode","setTabIndexForSelectionMode","onClick","setAllNodesTabIndexes","nodes","find","hasSelectedNode","selectedNodes","parentElement","elements","element","firstFocusableRow","currentFocusedRow","lastVisibleDescendant","focus","ulElement","parentListElement","prevNodeButton","findSingle","childrenListElement","lastChildElement","getAttribute","currentKeys","nodeKey","newValue","__spreadValues","__spreadProps","onNodeClick","nodeTouched","handleSelectionWithMetaKey","handleSelectionWithoutMetaKey","selected","isNodeSelected","_selectionKeys","currentSelection","isSingleSelectionMode","isMultipleSelectionMode","isCheckboxSelectionMode","onCheckboxChange","newCheckState","propagateDown","parentNode","findParentNode","propagateUp","check","selectionKeys","child","checkedChildCount","childPartialSelected","childKey","parent","found","char","currentNode","allTreeItems","currentNodeElement","item","currentIndex","searchLower","matchedElement","i","currentTarget","onFilterKeyUp","onDragOver","allowDrop","onDragEnter","dragNode","dragScope","onDragLeave","rect","processTreeDrop","dragNodeIndex","dragNodeSubNodes","onDrop","isSameTreeScope","dropNode","isValidDragScope","allow","hasCommonScope","dropScope","ds","posInSet","setSize","findInNodes","currentLevel"]}
1
+ {"version":3,"sources":["../../src/tree/useTree.ts","../../src/tree/useTree.props.ts","../../src/tree/useTreeDragDrop.ts","../../src/tree/TreeDragDropService.ts","../../src/tree/useTreeFlatten.ts","../../src/tree/useTreeKeyboard.ts","../../src/tree/useTreeSelection.ts","../../src/tree/useTreeNode.ts","../../src/tree/useTreeNode.props.ts"],"sourcesContent":["import { withHeadless } from '@primereact/core/headless';\nimport { useControlledState } from '@primereact/hooks/use-controlled-state';\nimport type { TreeExpandedKeys, TreeNodeData, UseTreeFocusedKeyChangeEvent } from '@primereact/types/headless/tree';\nimport * as React from 'react';\nimport { defaultProps } from './useTree.props';\nimport { useTreeRootDragDrop } from './useTreeDragDrop';\nimport { useTreeNodeMap, useTreeVisibleKeys } from './useTreeFlatten';\nimport { useTreeKeyboard } from './useTreeKeyboard';\nimport { useTreeSelection } from './useTreeSelection';\n\nexport const useTree = withHeadless({\n name: 'useTree',\n defaultProps,\n setup({ props, elementRef, id }) {\n const defaultExpandedKeyRef = React.useRef(props.defaultExpandedKeys ?? {});\n const [expandedKeyState, setExpandedKeyState] = useControlledState({\n value: props.expandedKeys,\n defaultValue: defaultExpandedKeyRef.current,\n onChange: props.onExpandedChange\n });\n\n const defaultSelectedKeyRef = React.useRef(props.defaultSelectionKeys ?? {});\n const [selectedKeyState, setSelectedKeyState] = useControlledState({\n value: props.selectionKeys,\n defaultValue: defaultSelectedKeyRef.current,\n onChange: props.onSelectionChange\n });\n\n const [focusedKeyState, setFocusedKeyState] = React.useState<string | null>(null);\n const [dragHoverState, setDragHoverState] = React.useState(false);\n\n const { nodeMap, flatOrder } = useTreeNodeMap(props.value);\n const visibleKeys = useTreeVisibleKeys(props.value, expandedKeyState);\n const visibleCount = visibleKeys.length;\n\n const findNodeByKey = React.useCallback(\n (key: string): TreeNodeData | undefined => {\n return nodeMap.get(key)?.node;\n },\n [nodeMap]\n );\n\n const findNodeInfo = React.useCallback(\n (key: string) => {\n const entry = nodeMap.get(key);\n\n if (!entry) return { level: 1, posInSet: 1, setSize: 1, parentKey: null };\n\n return { level: entry.level, posInSet: entry.posInSet, setSize: entry.setSize, parentKey: entry.parentKey };\n },\n [nodeMap]\n );\n\n const getNodes = React.useCallback(() => props.value || [], [props.value]);\n\n React.useEffect(() => {\n if (focusedKeyState === null && visibleKeys.length > 0) {\n setFocusedKeyState(visibleKeys[0]);\n } else if (focusedKeyState && !nodeMap.has(focusedKeyState)) {\n setFocusedKeyState(visibleKeys[0] ?? null);\n }\n }, [visibleKeys, focusedKeyState, nodeMap]);\n\n const setFocusedKey = React.useCallback(\n (key: string | null) => {\n setFocusedKeyState(key);\n props.onFocusedKeyChange?.({ value: key } as UseTreeFocusedKeyChangeEvent);\n },\n [props]\n );\n\n const visibleKeysRef = React.useRef(visibleKeys);\n\n visibleKeysRef.current = visibleKeys;\n\n const getVisibleKeys = React.useCallback(() => visibleKeysRef.current, []);\n\n const selection = useTreeSelection({\n props,\n selectedKeyState,\n setSelectedKeyState,\n getNodes,\n getVisibleKeys\n });\n\n const onNodeToggle = (event: React.SyntheticEvent, node: TreeNodeData) => {\n if (node.disabled === true) return;\n\n const currentKeys = (expandedKeyState || {}) as TreeExpandedKeys;\n const nodeKey = node.key;\n let newValue: TreeExpandedKeys;\n\n if (currentKeys[nodeKey]) {\n newValue = { ...currentKeys };\n delete newValue[nodeKey];\n\n props.onCollapse?.({ originalEvent: event, node });\n props.onToggle?.({ originalEvent: event, node });\n } else {\n newValue = { ...currentKeys, [nodeKey]: true };\n\n props.onExpand?.({ originalEvent: event, node });\n props.onToggle?.({ originalEvent: event, node });\n }\n\n setExpandedKeyState([newValue, { originalEvent: event, value: newValue }]);\n };\n\n const keyboard = useTreeKeyboard({\n props,\n elementRef: elementRef as React.RefObject<HTMLElement | null>,\n visibleKeys,\n findNodeByKey,\n onNodeToggle,\n onClick: selection.onClick,\n setFocusedKey\n });\n\n const dragDrop = useTreeRootDragDrop({ props, setDragHoverState, getNodes });\n\n const state = {\n expandedKey: expandedKeyState,\n selectedKey: selectedKeyState,\n focusedKey: focusedKeyState,\n dragHover: dragHoverState\n };\n\n const rootProps = {\n id,\n 'data-scope': 'tree' as const,\n 'data-part': 'root' as const,\n ...(dragHoverState && { 'data-dragover': '' as const }),\n onDragOver: dragDrop.onDragOver,\n onDragEnter: dragDrop.onDragEnter,\n onDragLeave: dragDrop.onDragLeave,\n onDrop: dragDrop.onDrop\n };\n\n const filterProps = {\n 'data-scope': 'tree' as const,\n 'data-part': 'filter' as const,\n autoComplete: 'off' as const,\n onKeyUp: keyboard.onFilterKeyUp\n };\n\n const loadingProps = {\n 'data-scope': 'tree' as const,\n 'data-part': 'loading' as const,\n role: 'status' as const,\n 'aria-live': 'polite' as const\n };\n\n const getToggleProps = React.useCallback(\n (node: TreeNodeData) => {\n const nodeKey = node?.key;\n const expanded = nodeKey ? ((expandedKeyState || {}) as TreeExpandedKeys)[nodeKey] === true : false;\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n onNodeToggle(event, node);\n };\n\n return {\n 'data-scope': 'tree' as const,\n 'data-part': 'toggle' as const,\n [expanded ? 'data-expanded' : 'data-collapsed']: '',\n type: 'button' as const,\n tabIndex: -1 as const,\n onClick: handleClick\n };\n },\n [expandedKeyState]\n );\n\n const getToggleSpacerProps = React.useCallback(\n () => ({\n 'data-scope': 'tree' as const,\n 'data-part': 'toggle-spacer' as const,\n 'aria-hidden': true as const\n }),\n []\n );\n\n const getToggleIndicatorProps = React.useCallback(\n () => ({\n 'data-scope': 'tree' as const,\n 'data-part': 'toggle-indicator' as const,\n 'aria-hidden': true as const\n }),\n []\n );\n\n const getNodeProps = React.useCallback(\n (node: TreeNodeData, level: number, expanded: boolean, checked: boolean, selected: boolean, leaf: boolean, posInSet: number, setSize: number) => {\n const isFocused = focusedKeyState === node?.key;\n const handleKeyDown = (event: React.KeyboardEvent) => keyboard.onKeyDown(event, node, level, expanded, leaf);\n\n const isCheckbox = props.selectionMode === 'checkbox';\n\n return {\n role: 'treeitem' as const,\n tabIndex: isFocused ? 0 : -1,\n 'aria-level': level,\n 'aria-setsize': setSize,\n 'aria-posinset': posInSet,\n 'aria-expanded': leaf ? undefined : expanded,\n 'aria-selected': props.selectionMode === 'single' || props.selectionMode === 'multiple' ? !!selected : undefined,\n 'aria-checked': isCheckbox ? checked : undefined,\n 'data-scope': 'tree' as const,\n 'data-part': 'node' as const,\n 'data-node-key': node?.key,\n ...(!leaf && { [expanded ? 'data-expanded' : 'data-collapsed']: '' as const }),\n ...((isCheckbox ? checked : selected) && { 'data-selected': '' as const }),\n ...(leaf && { 'data-leaf': '' as const }),\n ...(node?.disabled === true && { 'data-disabled': '' as const }),\n ...(isFocused && { 'data-focused': '' as const }),\n onKeyDown: handleKeyDown\n };\n },\n [keyboard, props.selectionMode, focusedKeyState]\n );\n\n const getNodesProps = React.useCallback(() => {\n return {\n 'data-scope': 'tree' as const,\n 'data-part': 'nodes' as const,\n role: 'tree' as const\n };\n }, []);\n\n return {\n state,\n nodeMap,\n flatOrder,\n visibleKeys,\n visibleCount,\n findNodeByKey,\n findNodeInfo,\n getNodes,\n setFocusedKey,\n setSelectionKeys: selection.setSelectionKeys,\n onKeyDown: keyboard.onKeyDown,\n onNodeToggle,\n onNodeClick: selection.onNodeClick,\n onClick: selection.onClick,\n onCheckboxChange: selection.onCheckboxChange,\n isNodeSelected: selection.isNodeSelected,\n selection: {\n isSelected: selection.isSelected,\n isPartiallySelected: selection.isPartiallySelected,\n isAllSelected: selection.isAllSelected,\n isSomeSelected: selection.isSomeSelected,\n toggleSelection: selection.toggleSelection,\n toggleAll: selection.toggleAll\n },\n onFilterKeyUp: keyboard.onFilterKeyUp,\n onDragOver: dragDrop.onDragOver,\n onDragEnter: dragDrop.onDragEnter,\n onDragLeave: dragDrop.onDragLeave,\n onDrop: dragDrop.onDrop,\n allowDrop: dragDrop.allowDrop,\n rootProps,\n getToggleProps,\n getToggleSpacerProps,\n getToggleIndicatorProps,\n getNodeProps,\n filterProps,\n loadingProps,\n getNodesProps\n };\n }\n});\n","import type { UseTreeProps } from '@primereact/types/headless/tree';\n\nexport const defaultProps: UseTreeProps = {\n value: undefined,\n expandedKeys: undefined,\n defaultExpandedKeys: undefined,\n selectionKeys: undefined,\n defaultSelectionKeys: undefined,\n selectionMode: undefined,\n metaKeySelection: false,\n highlightOnSelect: false,\n draggable: undefined,\n droppable: undefined,\n draggableScope: undefined,\n droppableScope: undefined,\n onExpandedChange: undefined,\n onSelectionChange: undefined,\n onToggle: undefined,\n onExpand: undefined,\n onCollapse: undefined,\n onClick: undefined,\n onSelect: undefined,\n onUnselect: undefined,\n onMove: undefined,\n validateMove: undefined,\n onFocusedKeyChange: undefined,\n loading: false\n};\n","import type { TreeDropPosition, TreeNodeData, UseTreeMoveEvent, UseTreeProps } from '@primereact/types/headless/tree';\nimport * as React from 'react';\nimport { TreeDragDropService } from './TreeDragDropService';\n\nfunction rootContainsKey(node: TreeNodeData, key: string): boolean {\n if (node.key === key) return true;\n if (!node.children || node.children.length === 0) return false;\n\n for (const child of node.children) {\n if (rootContainsKey(child, key)) return true;\n }\n\n return false;\n}\n\nexport interface UseTreeDragDropDeps {\n props: UseTreeProps;\n setDragHoverState: (hover: boolean) => void;\n getNodes: () => TreeNodeData[];\n}\n\n/**\n * Root-level drag/drop handlers. Per-node logic lives in `useTreeNode`.\n * Commits a drop through a single `onMove` event; `validateMove` may return a\n * Promise and the move only fires when it resolves truthy.\n */\nexport function useTreeRootDragDrop({ props, setDragHoverState, getNodes }: UseTreeDragDropDeps) {\n React.useEffect(() => {\n if (!props.droppable) return;\n\n const cleanup = TreeDragDropService.onDragStop(() => {\n setDragHoverState(false);\n });\n\n return () => {\n cleanup();\n };\n }, [props.droppable, setDragHoverState]);\n\n const allowDrop = React.useCallback(\n (dropNode?: TreeNodeData) => {\n const { dragNode, dragScope } = TreeDragDropService.getDragState();\n\n if (!dragNode) return false;\n\n if (!isValidDragScope(dragScope, props.droppableScope)) return false;\n\n if (dropNode && dragNode === dropNode) return false;\n\n return true;\n },\n [props.droppableScope]\n );\n\n const onDragOver = (event: React.DragEvent) => {\n if (props.droppable && allowDrop()) {\n event.dataTransfer.dropEffect = 'copy';\n } else {\n event.dataTransfer.dropEffect = 'none';\n }\n\n event.preventDefault();\n };\n\n const onDragEnter = (_event: React.DragEvent) => {\n if (props.droppable && allowDrop()) {\n setDragHoverState(true);\n }\n };\n\n const onDragLeave = (event: React.DragEvent) => {\n if (!props.droppable) return;\n\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n if (event.clientX >= rect.right || event.clientX <= rect.left || event.clientY >= rect.bottom || event.clientY <= rect.top) {\n setDragHoverState(false);\n }\n };\n\n const commitRootDrop = (event: React.DragEvent, dragNode: TreeNodeData, _dragNodeIndex: number) => {\n const { sourceCommit } = TreeDragDropService.getDragState();\n const currentNodes = props.value || [];\n const sourceIsThisTree = currentNodes.some((root) => rootContainsKey(root, dragNode.key));\n\n const newValue = [...currentNodes, dragNode];\n\n const moveEvent: UseTreeMoveEvent = {\n originalEvent: event,\n value: newValue,\n dragNode,\n dropNode: null,\n dropIndex: newValue.length - 1,\n dropPosition: 'inside'\n };\n\n const fire = () => {\n props.onMove?.(moveEvent);\n if (sourceCommit && !sourceIsThisTree) sourceCommit(event);\n TreeDragDropService.stopDrag({ node: dragNode });\n };\n\n if (props.validateMove) {\n const result = props.validateMove(moveEvent);\n\n if (result instanceof Promise) {\n result.then((ok) => {\n if (ok) fire();\n else TreeDragDropService.stopDrag({ node: dragNode });\n });\n\n return;\n }\n\n if (!result) {\n TreeDragDropService.stopDrag({ node: dragNode });\n return;\n }\n }\n\n fire();\n };\n\n const onDrop = (event: React.DragEvent) => {\n if (!props.droppable) {\n setDragHoverState(false);\n return;\n }\n\n event.preventDefault();\n const { dragNode, dragScope, dragNodeIndex } = TreeDragDropService.getDragState();\n\n if (dragNode && allowDrop()) {\n if (isSameTreeScope(dragScope, props.draggableScope)) {\n TreeDragDropService.stopDrag({ node: dragNode });\n setDragHoverState(false);\n return;\n }\n\n if (dragNodeIndex !== null) {\n commitRootDrop(event, dragNode, dragNodeIndex);\n }\n }\n\n setDragHoverState(false);\n };\n\n return { allowDrop, onDragOver, onDragEnter, onDragLeave, onDrop };\n}\n\nfunction hasCommonScope(a: string | string[] | null | undefined, b: string | string[] | null | undefined): boolean {\n if (a == null && b == null) return true;\n if (a == null || b == null) return false;\n\n if (typeof b === 'string') {\n if (typeof a === 'string') return a === b;\n if (Array.isArray(a)) return a.indexOf(b) !== -1;\n } else if (Array.isArray(b)) {\n if (typeof a === 'string') return b.indexOf(a) !== -1;\n if (Array.isArray(a)) {\n for (const item of a) {\n if (b.indexOf(item) !== -1) return true;\n }\n\n return false;\n }\n }\n\n return false;\n}\n\nfunction isValidDragScope(dragScope: string | string[] | null | undefined, droppableScope: string | string[] | null | undefined): boolean {\n if (droppableScope == null) return true;\n return hasCommonScope(dragScope, droppableScope);\n}\n\nfunction isSameTreeScope(dragScope: string | string[] | null | undefined, draggableScope: string | string[] | null | undefined): boolean {\n return hasCommonScope(dragScope, draggableScope);\n}\n\n/**\n * Build a `UseTreeMoveEvent` for a node-level drop (with explicit position).\n * Re-used by `useTreeNode` when committing a drop on a non-root target.\n */\nexport function buildMoveEvent(originalEvent: React.DragEvent, value: TreeNodeData[], dragNode: TreeNodeData, dropNode: TreeNodeData, dropIndex: number, dropPosition: TreeDropPosition): UseTreeMoveEvent {\n return { originalEvent, value, dragNode, dropNode, dropIndex, dropPosition };\n}\n","import type { TreeNodeData } from '@primereact/types/headless/tree';\n\n/**\n * Registered by the source tree at `startDrag`; the destination invokes it on a\n * committed drop so the source can drop the node and fire its `onMove`.\n */\nexport type SourceCommitHandler = (originalEvent: React.DragEvent) => void;\n\ntype DragState = {\n isDragging: boolean;\n dragNode: TreeNodeData | null;\n dragScope: string | string[] | null;\n dragNodeSubNodes: TreeNodeData[] | null;\n dragNodeIndex: number | null;\n sourceTreeId: string | null;\n /** Source-tree commit hook. Invoked by the destination tree on a successful drop. */\n sourceCommit: SourceCommitHandler | null;\n};\n\ntype DragEvent = {\n node: TreeNodeData;\n scope?: string | string[] | null;\n subNodes?: TreeNodeData[];\n index?: number;\n sourceTreeId?: string;\n sourceCommit?: SourceCommitHandler;\n};\n\nconst dragState: DragState = {\n isDragging: false,\n dragNode: null,\n dragScope: null,\n dragNodeSubNodes: null,\n dragNodeIndex: null,\n sourceTreeId: null,\n sourceCommit: null\n};\n\nconst dragStartHandlers = new Set<(event: DragEvent) => void>();\nconst dragStopHandlers = new Set<(event: DragEvent) => void>();\n\nexport const TreeDragDropService = {\n getDragState() {\n return dragState;\n },\n\n startDrag(event: DragEvent) {\n dragState.isDragging = true;\n dragState.dragNode = event.node;\n dragState.dragScope = event.scope ?? null;\n dragState.dragNodeSubNodes = event.subNodes ?? null;\n dragState.dragNodeIndex = event.index ?? null;\n dragState.sourceTreeId = event.sourceTreeId ?? null;\n dragState.sourceCommit = event.sourceCommit ?? null;\n\n dragStartHandlers.forEach((handler) => handler(event));\n },\n\n stopDrag(event: DragEvent) {\n dragState.isDragging = false;\n dragState.dragNode = null;\n dragState.dragScope = null;\n dragState.dragNodeSubNodes = null;\n dragState.dragNodeIndex = null;\n dragState.sourceTreeId = null;\n dragState.sourceCommit = null;\n\n dragStopHandlers.forEach((handler) => handler(event));\n },\n\n onDragStart(handler: (event: DragEvent) => void) {\n dragStartHandlers.add(handler);\n\n return () => dragStartHandlers.delete(handler);\n },\n\n onDragStop(handler: (event: DragEvent) => void) {\n dragStopHandlers.add(handler);\n\n return () => dragStopHandlers.delete(handler);\n }\n};\n","import type { TreeExpandedKeys, TreeNodeData, TreeNodeEntry } from '@primereact/types/headless/tree';\nimport * as React from 'react';\n\n/**\n * Builds `nodeMap` (key → entry for O(1) lookup) and `flatOrder` (DFS keys).\n * Memoized on `value` reference.\n */\nexport function useTreeNodeMap(value: TreeNodeData[] | undefined) {\n return React.useMemo(() => {\n const map = new Map<string, TreeNodeEntry>();\n const flat: string[] = [];\n\n const walk = (nodes: TreeNodeData[], parentKey: string | null, level: number) => {\n for (let i = 0; i < nodes.length; i++) {\n const n = nodes[i];\n\n map.set(n.key, { node: n, parentKey, level, posInSet: i + 1, setSize: nodes.length });\n flat.push(n.key);\n\n if (n.children?.length) {\n walk(n.children, n.key, level + 1);\n }\n }\n };\n\n walk(value ?? [], null, 1);\n\n return { nodeMap: map, flatOrder: flat };\n }, [value]);\n}\n\n/**\n * DFS keys of the rows that are currently visible (ancestors all expanded).\n */\nexport function useTreeVisibleKeys(value: TreeNodeData[] | undefined, expandedKey: TreeExpandedKeys | undefined): string[] {\n return React.useMemo(() => {\n const result: string[] = [];\n const expanded = (expandedKey ?? {}) as TreeExpandedKeys;\n\n const walk = (nodes: TreeNodeData[]) => {\n for (const n of nodes) {\n result.push(n.key);\n if (expanded[n.key] === true && n.children?.length) {\n walk(n.children);\n }\n }\n };\n\n walk(value ?? []);\n\n return result;\n }, [value, expandedKey]);\n}\n","import type { TreeNodeData, UseTreeProps } from '@primereact/types/headless/tree';\nimport { focus, isPrintableCharacter } from '@primeuix/utils';\nimport * as React from 'react';\n\nexport interface UseTreeKeyboardDeps {\n props: UseTreeProps;\n elementRef: React.RefObject<HTMLElement | null>;\n visibleKeys: string[];\n findNodeByKey: (key: string) => TreeNodeData | undefined;\n onNodeToggle: (event: React.SyntheticEvent, node: TreeNodeData) => void;\n onClick: (event: React.MouseEvent | React.KeyboardEvent, node: TreeNodeData, nodeTouched?: boolean) => void;\n setFocusedKey: (key: string | null) => void;\n}\n\nconst TYPE_AHEAD_TIMEOUT = 500;\n\n/**\n * Keyboard navigation across `visibleKeys` plus printable-character type-ahead.\n */\nexport function useTreeKeyboard({ props, elementRef, visibleKeys, findNodeByKey, onNodeToggle, onClick, setFocusedKey }: UseTreeKeyboardDeps) {\n const searchTimeout = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const searchValue = React.useRef<string>('');\n\n React.useEffect(() => {\n return () => {\n if (searchTimeout.current) {\n clearTimeout(searchTimeout.current);\n searchTimeout.current = null;\n }\n };\n }, []);\n\n const focusNodeElement = (key: string) => {\n if (!elementRef.current) return;\n\n const el = elementRef.current.querySelector(`[role=\"treeitem\"][data-node-key=\"${CSS.escape(key)}\"]`) as HTMLElement | null;\n if (!el) return;\n\n const allItems = elementRef.current.querySelectorAll<HTMLElement>('[role=\"treeitem\"]');\n allItems.forEach((item) => {\n item.tabIndex = -1;\n });\n el.tabIndex = 0;\n focus(el);\n };\n\n const navigateToIndex = (idx: number, fallbackKey?: string) => {\n const key = visibleKeys[idx] ?? fallbackKey ?? null;\n if (!key) return;\n\n setFocusedKey(key);\n focusNodeElement(key);\n };\n\n const navigateNext = (currentKey: string) => {\n const idx = visibleKeys.indexOf(currentKey);\n if (idx === -1 || idx >= visibleKeys.length - 1) return;\n navigateToIndex(idx + 1);\n };\n\n const navigatePrev = (currentKey: string) => {\n const idx = visibleKeys.indexOf(currentKey);\n if (idx <= 0) return;\n navigateToIndex(idx - 1);\n };\n\n const navigateFirst = () => {\n if (visibleKeys.length > 0) navigateToIndex(0);\n };\n\n const navigateLast = () => {\n if (visibleKeys.length > 0) navigateToIndex(visibleKeys.length - 1);\n };\n\n const searchNodes = (char: string, currentNode: TreeNodeData) => {\n searchValue.current = (searchValue.current || '') + char;\n\n if (searchTimeout.current) {\n clearTimeout(searchTimeout.current);\n }\n\n if (!elementRef.current) {\n searchTimeout.current = setTimeout(() => {\n searchValue.current = '';\n searchTimeout.current = null;\n }, TYPE_AHEAD_TIMEOUT);\n return;\n }\n\n const allTreeItems = Array.from(elementRef.current.querySelectorAll<HTMLElement>('[role=\"treeitem\"]'));\n const currentElement = allTreeItems.find((item) => item.getAttribute('data-node-key') === currentNode.key);\n\n if (!currentElement) {\n searchTimeout.current = setTimeout(() => {\n searchValue.current = '';\n searchTimeout.current = null;\n }, TYPE_AHEAD_TIMEOUT);\n return;\n }\n\n const currentIndex = allTreeItems.indexOf(currentElement);\n const searchLower = searchValue.current.toLowerCase();\n let matched: HTMLElement | null = null;\n\n for (let i = currentIndex + 1; i < allTreeItems.length; i++) {\n const item = allTreeItems[i];\n const label = item.textContent?.trim().toLowerCase() || '';\n if (label.startsWith(searchLower)) {\n matched = item;\n break;\n }\n }\n\n if (!matched) {\n for (let i = 0; i <= currentIndex; i++) {\n const item = allTreeItems[i];\n const label = item.textContent?.trim().toLowerCase() || '';\n if (label.startsWith(searchLower)) {\n matched = item;\n break;\n }\n }\n }\n\n if (matched && matched !== currentElement) {\n const key = matched.getAttribute('data-node-key');\n if (key) {\n setFocusedKey(key);\n allTreeItems.forEach((item) => {\n item.tabIndex = -1;\n });\n matched.tabIndex = 0;\n focus(matched);\n }\n }\n\n searchTimeout.current = setTimeout(() => {\n searchValue.current = '';\n searchTimeout.current = null;\n }, TYPE_AHEAD_TIMEOUT);\n };\n\n const onKeyDown = (event: React.KeyboardEvent, node: TreeNodeData, _level: number, expanded: boolean, leaf: boolean) => {\n const target = event.target as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Only handle when the focused row is this treeitem\n if (!currentTarget || (!currentTarget.isSameNode(target) && !currentTarget.isSameNode(target.closest('[role=\"treeitem\"]') as Node | null))) {\n return;\n }\n\n const metaKey = event.metaKey || event.ctrlKey;\n\n switch (event.code) {\n case 'ArrowDown':\n event.preventDefault();\n navigateNext(node.key);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n navigatePrev(node.key);\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n if (!leaf && !expanded) {\n onNodeToggle(event, node);\n } else if (!leaf && expanded) {\n // Step into first child (next visible row)\n navigateNext(node.key);\n }\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n if (!leaf && expanded) {\n onNodeToggle(event, node);\n } else {\n // Step out to parent\n const idx = visibleKeys.indexOf(node.key);\n for (let i = idx - 1; i >= 0; i--) {\n const candidateKey = visibleKeys[i];\n const candidate = findNodeByKey(candidateKey);\n if (candidate?.children?.length) {\n setFocusedKey(candidateKey);\n focusNodeElement(candidateKey);\n break;\n }\n }\n }\n break;\n\n case 'Home':\n event.preventDefault();\n navigateFirst();\n break;\n\n case 'End':\n event.preventDefault();\n navigateLast();\n break;\n\n case 'Enter':\n case 'NumpadEnter':\n case 'Space':\n event.preventDefault();\n onClick(event, node, true);\n break;\n\n default:\n if (!metaKey && isPrintableCharacter(event.key)) {\n searchNodes(event.key, node);\n }\n break;\n }\n };\n\n const onFilterKeyUp = (event: React.KeyboardEvent) => {\n if (event.code === 'Enter' || event.code === 'NumpadEnter') {\n event.preventDefault();\n }\n };\n\n return { onKeyDown, onFilterKeyUp };\n}\n","import type { TreeCheckboxSelectionKeys, TreeNodeData, TreeSelectionKeys, UseTreeProps, UseTreeSelectEvent, UseTreeUnselectEvent } from '@primereact/types/headless/tree';\nimport * as React from 'react';\n\ntype SelectionSetter = (next: [TreeSelectionKeys | TreeCheckboxSelectionKeys, { originalEvent: React.SyntheticEvent; value: TreeSelectionKeys | TreeCheckboxSelectionKeys }]) => void;\n\nexport interface UseTreeSelectionDeps {\n props: UseTreeProps;\n selectedKeyState: TreeSelectionKeys | TreeCheckboxSelectionKeys | undefined;\n setSelectedKeyState: SelectionSetter;\n getNodes: () => TreeNodeData[];\n getVisibleKeys: () => string[];\n}\n\n/**\n * Selection state for single / multiple / checkbox modes, including the\n * up/down cascade used by checkbox tri-state.\n */\nexport function useTreeSelection({ props, selectedKeyState, setSelectedKeyState, getNodes, getVisibleKeys }: UseTreeSelectionDeps) {\n const isSingleSelectionMode = () => props.selectionMode === 'single';\n const isMultipleSelectionMode = () => props.selectionMode === 'multiple';\n const isCheckboxSelectionMode = () => props.selectionMode === 'checkbox';\n\n const isNodeSelected = React.useCallback(\n (node: TreeNodeData) => {\n if (!props.selectionMode || !selectedKeyState) return false;\n\n if (isCheckboxSelectionMode()) {\n const checkboxKeys = selectedKeyState as TreeCheckboxSelectionKeys;\n return checkboxKeys[node.key]?.checked === true;\n }\n\n const keys = selectedKeyState as TreeSelectionKeys;\n return keys[node.key] === true;\n },\n [props.selectionMode, selectedKeyState]\n );\n\n const fireSelect = (event: React.SyntheticEvent, node: TreeNodeData) => {\n props.onSelect?.({ originalEvent: event, node } as UseTreeSelectEvent);\n };\n\n const fireUnselect = (event: React.SyntheticEvent, node: TreeNodeData) => {\n props.onUnselect?.({ originalEvent: event, node } as UseTreeUnselectEvent);\n };\n\n const handleSelectionWithMetaKey = (event: React.MouseEvent | React.KeyboardEvent, node: TreeNodeData): TreeSelectionKeys => {\n const metaKey = (event as React.MouseEvent).metaKey || (event as React.KeyboardEvent).ctrlKey;\n const selected = isNodeSelected(node);\n const currentSelection = (selectedKeyState || {}) as TreeSelectionKeys;\n let _selectionKeys: TreeSelectionKeys = {};\n\n if (selected && metaKey) {\n if (isSingleSelectionMode()) {\n _selectionKeys = {};\n } else {\n _selectionKeys = { ...currentSelection };\n delete _selectionKeys[node.key];\n }\n\n fireUnselect(event, node);\n } else {\n if (isSingleSelectionMode()) {\n _selectionKeys = {};\n } else if (isMultipleSelectionMode()) {\n _selectionKeys = !metaKey ? {} : { ...currentSelection };\n }\n\n _selectionKeys[node.key] = true;\n fireSelect(event, node);\n }\n\n return _selectionKeys;\n };\n\n const handleSelectionWithoutMetaKey = (event: React.MouseEvent | React.KeyboardEvent, node: TreeNodeData): TreeSelectionKeys => {\n const selected = isNodeSelected(node);\n const currentSelection = (selectedKeyState || {}) as TreeSelectionKeys;\n const nodeKey = node.key;\n let _selectionKeys: TreeSelectionKeys = {};\n\n if (isSingleSelectionMode()) {\n if (selected) {\n _selectionKeys = {};\n fireUnselect(event, node);\n } else {\n _selectionKeys = { [nodeKey]: true };\n fireSelect(event, node);\n }\n } else {\n if (selected) {\n _selectionKeys = { ...currentSelection };\n delete _selectionKeys[nodeKey];\n fireUnselect(event, node);\n } else {\n _selectionKeys = { ...currentSelection, [nodeKey]: true };\n fireSelect(event, node);\n }\n }\n\n return _selectionKeys;\n };\n\n const onNodeClick = (event: React.MouseEvent | React.KeyboardEvent, node: TreeNodeData, nodeTouched = false) => {\n if (props.selectionMode == null) return;\n if (node.disabled === true) return;\n\n const metaSelection = nodeTouched ? false : props.metaKeySelection;\n const newValue = metaSelection ? handleSelectionWithMetaKey(event, node) : handleSelectionWithoutMetaKey(event, node);\n\n setSelectedKeyState([newValue, { originalEvent: event, value: newValue }]);\n\n props.onClick?.({ originalEvent: event, node });\n };\n\n const propagateDown = (node: TreeNodeData, check: boolean, selectionKeys: TreeCheckboxSelectionKeys) => {\n if (check && node.disabled !== true) {\n selectionKeys[node.key] = { checked: true, partialChecked: false };\n } else {\n delete selectionKeys[node.key];\n }\n\n if (node.children?.length) {\n for (const child of node.children) {\n propagateDown(child, check, selectionKeys);\n }\n }\n };\n\n const propagateUp = (node: TreeNodeData, selectionKeys: TreeCheckboxSelectionKeys): TreeCheckboxSelectionKeys => {\n if (!node.children || node.children.length === 0) return selectionKeys;\n\n let checkedChildCount = 0;\n let childPartialSelected = false;\n\n for (const child of node.children) {\n if (selectionKeys[child.key]?.checked) {\n checkedChildCount++;\n } else if (selectionKeys[child.key]?.partialChecked) {\n childPartialSelected = true;\n }\n }\n\n if (checkedChildCount === node.children.length) {\n selectionKeys[node.key] = { checked: true, partialChecked: false };\n } else {\n delete selectionKeys[node.key];\n\n if (childPartialSelected || (checkedChildCount > 0 && checkedChildCount !== node.children.length)) {\n selectionKeys[node.key] = { checked: false, partialChecked: true };\n }\n }\n\n return selectionKeys;\n };\n\n const findParentNode = (nodes: TreeNodeData[], childKey: string, parent: TreeNodeData | null = null): TreeNodeData | null => {\n for (const node of nodes) {\n if (node.key === childKey) return parent;\n\n if (node.children) {\n const found = findParentNode(node.children, childKey, node);\n if (found !== null) return found;\n }\n }\n\n return null;\n };\n\n const onCheckboxChange = (event: React.SyntheticEvent, node: TreeNodeData) => {\n if (!node || node.disabled === true) return;\n\n const currentKeys = (selectedKeyState || {}) as TreeCheckboxSelectionKeys;\n const _selectionKeys = { ...currentKeys };\n const nodeKey = node.key;\n\n const isChecked = _selectionKeys[nodeKey]?.checked === true;\n const newCheckState = !isChecked;\n\n if (newCheckState) {\n fireSelect(event, node);\n } else {\n fireUnselect(event, node);\n }\n\n propagateDown(node, newCheckState, _selectionKeys);\n\n let parentNode = findParentNode(getNodes(), nodeKey);\n\n while (parentNode) {\n propagateUp(parentNode, _selectionKeys);\n parentNode = findParentNode(getNodes(), parentNode.key);\n }\n\n setSelectedKeyState([_selectionKeys, { originalEvent: event, value: _selectionKeys }]);\n };\n\n const onClick = (event: React.MouseEvent | React.KeyboardEvent, node: TreeNodeData, nodeTouched = false) => {\n if (isCheckboxSelectionMode()) {\n onCheckboxChange(event, node);\n } else {\n onNodeClick(event, node, nodeTouched);\n }\n };\n\n const setSelectionKeys = (keys: TreeSelectionKeys | TreeCheckboxSelectionKeys, event?: React.SyntheticEvent) => {\n const originalEvent = event ?? ({} as React.SyntheticEvent);\n setSelectedKeyState([keys, { originalEvent, value: keys }]);\n };\n\n const isSelected = React.useCallback(\n (key: string): boolean => {\n if (!selectedKeyState) return false;\n\n if (isCheckboxSelectionMode()) {\n return (selectedKeyState as TreeCheckboxSelectionKeys)[key]?.checked === true;\n }\n\n return (selectedKeyState as TreeSelectionKeys)[key] === true;\n },\n [props.selectionMode, selectedKeyState]\n );\n\n const isPartiallySelected = React.useCallback(\n (key: string): boolean => {\n if (!selectedKeyState || !isCheckboxSelectionMode()) return false;\n\n return (selectedKeyState as TreeCheckboxSelectionKeys)[key]?.partialChecked === true;\n },\n [props.selectionMode, selectedKeyState]\n );\n\n const selectionSummary = React.useMemo(() => {\n const visibleKeys = getVisibleKeys();\n\n if (visibleKeys.length === 0 || !selectedKeyState) {\n return { all: false, some: false };\n }\n\n let selectedCount = 0;\n\n for (const key of visibleKeys) {\n const slice = (selectedKeyState as Record<string, unknown>)[key];\n const sel = isCheckboxSelectionMode() ? (slice as { checked?: boolean } | undefined)?.checked === true : slice === true;\n\n if (sel) selectedCount++;\n }\n\n return {\n all: selectedCount === visibleKeys.length,\n some: selectedCount > 0 && selectedCount < visibleKeys.length\n };\n }, [getVisibleKeys, selectedKeyState, props.selectionMode]);\n\n const isAllSelected = React.useCallback(() => selectionSummary.all, [selectionSummary]);\n const isSomeSelected = React.useCallback(() => selectionSummary.some, [selectionSummary]);\n\n const toggleSelection = React.useCallback(\n (event: React.SyntheticEvent, key: string, mode: 'checkbox' | 'radio' | 'single') => {\n const node = getNodes().length > 0 ? findNodeByKeyInTree(getNodes(), key) : undefined;\n\n if (!node) return;\n\n if (mode === 'checkbox') {\n onCheckboxChange(event, node);\n } else if (mode === 'radio') {\n if (!isSelected(key)) {\n setSelectionKeys({ [key]: true } as TreeSelectionKeys, event);\n }\n } else {\n onNodeClick(event as React.MouseEvent | React.KeyboardEvent, node, true);\n }\n },\n [getNodes, isSelected]\n );\n\n const toggleAll = React.useCallback(\n (event: React.SyntheticEvent) => {\n const visibleKeys = getVisibleKeys();\n const allSelected = isAllSelected();\n const next: Record<string, unknown> = {};\n\n if (!allSelected) {\n for (const key of visibleKeys) {\n next[key] = isCheckboxSelectionMode() ? { checked: true, partialChecked: false } : true;\n }\n }\n\n setSelectionKeys(next as TreeSelectionKeys | TreeCheckboxSelectionKeys, event);\n },\n [getVisibleKeys, isAllSelected, props.selectionMode]\n );\n\n return {\n isNodeSelected,\n onNodeClick,\n onCheckboxChange,\n onClick,\n setSelectionKeys,\n isSelected,\n isPartiallySelected,\n isAllSelected,\n isSomeSelected,\n toggleSelection,\n toggleAll\n };\n}\n\nfunction findNodeByKeyInTree(nodes: TreeNodeData[], key: string): TreeNodeData | undefined {\n for (const node of nodes) {\n if (node.key === key) return node;\n\n if (node.children) {\n const found = findNodeByKeyInTree(node.children, key);\n\n if (found) return found;\n }\n }\n\n return undefined;\n}\n","import { withHeadless } from '@primereact/core/headless';\nimport type { TreeDropPosition, TreeNodeData as TreeNodeType } from '@primereact/types/headless/tree';\nimport { getOuterHeight, getOuterWidth } from '@primeuix/utils';\nimport * as React from 'react';\nimport { TreeDragDropService } from './TreeDragDropService';\nimport { buildMoveEvent } from './useTreeDragDrop';\nimport { defaultTreeNodeProps } from './useTreeNode.props';\n\n/** Returns true when the subtree rooted at `node` contains a node with `key`. */\nfunction containsNodeByKey(node: TreeNodeType, key: string): boolean {\n if (node.key === key) return true;\n if (!node.children || node.children.length === 0) return false;\n\n for (const child of node.children) {\n if (containsNodeByKey(child, key)) return true;\n }\n\n return false;\n}\n\nexport const useTreeNode = withHeadless({\n name: 'useTreeNode',\n defaultProps: defaultTreeNodeProps,\n setup({ props }) {\n const tree = props.context;\n const parentNode = props.parentContext;\n const node = props.node;\n const nodeKey = node?.key;\n\n const expanded = nodeKey ? tree?.state?.expandedKey?.[nodeKey] === true : false;\n const selected = node ? (tree?.isNodeSelected(node) ?? false) : false;\n const leaf = node ? (node.leaf ?? (!node.children || node.children.length === 0)) : true;\n\n let checked = false;\n let partialChecked = false;\n\n if (tree?.props.selectionMode === 'checkbox' && nodeKey && tree?.state?.selectedKey) {\n const checkboxKeys = tree.state.selectedKey as Record<string, { checked: boolean; partialChecked: boolean }>;\n checked = checkboxKeys[nodeKey]?.checked === true;\n partialChecked = checkboxKeys[nodeKey]?.partialChecked === true;\n }\n\n let level = 1;\n let posInSet = 1;\n let setSize = 1;\n\n if (tree && nodeKey) {\n const info = tree.findNodeInfo(nodeKey);\n level = info.level;\n posInSet = info.posInSet;\n setSize = info.setSize;\n } else if (props.index !== undefined) {\n const parentData = (parentNode as { node?: TreeNodeType } | null | undefined)?.node;\n const siblings = parentData ? parentData.children : tree?.getNodes();\n setSize = siblings?.length || 0;\n posInSet = props.index + 1;\n }\n\n const [nodeTouched, setNodeTouched] = React.useState(false);\n const [isPrevDropPointHovered, setIsPrevDropPointHovered] = React.useState(false);\n const [isNextDropPointHovered, setIsNextDropPointHovered] = React.useState(false);\n const [isNodeDropHovered, setIsNodeDropHovered] = React.useState(false);\n\n const parentNodeData = (parentNode as { node?: TreeNodeType } | null | undefined)?.node;\n const subNodes = parentNodeData?.children || tree?.getNodes() || [];\n\n const isDraggable = tree?.props.draggable === true;\n const isNodeDraggable = node?.draggable !== false && isDraggable;\n\n const dragState = TreeDragDropService.getDragState();\n const isDroppable = tree?.props.droppable && tree?.allowDrop?.(node as TreeNodeType);\n const isNodeDroppable = node?.droppable !== false && isDroppable;\n\n const isPrevDropPointActive = isPrevDropPointHovered && isDroppable;\n const isNextDropPointActive = isNextDropPointHovered && isDroppable;\n const isNodeDropActive = isNodeDropHovered && isNodeDroppable;\n\n const dropPosition: TreeDropPosition = isPrevDropPointActive ? 'before' : isNextDropPointActive ? 'after' : 'inside';\n\n const removeNodeFromTree = (nodes: TreeNodeType[], nodeToRemove: TreeNodeType): TreeNodeType[] => {\n return nodes.reduce((acc: TreeNodeType[], n: TreeNodeType) => {\n if (n.key === nodeToRemove.key) return acc;\n\n if (n.children && n.children.length > 0) {\n const updatedChildren = removeNodeFromTree(n.children, nodeToRemove);\n acc.push({ ...n, children: updatedChildren });\n } else {\n acc.push(n);\n }\n\n return acc;\n }, []);\n };\n\n const insertNodeInSiblings = (nodes: TreeNodeType[], targetKey: string, nodeToInsert: TreeNodeType, offset: number): TreeNodeType[] => {\n const targetIndex = nodes.findIndex((n) => n.key === targetKey);\n\n if (targetIndex !== -1) {\n const newNodes = [...nodes];\n newNodes.splice(targetIndex + offset, 0, nodeToInsert);\n return newNodes;\n }\n\n return nodes.map((n) => {\n if (n.children && n.children.length > 0) {\n return { ...n, children: insertNodeInSiblings(n.children, targetKey, nodeToInsert, offset) };\n }\n\n return n;\n });\n };\n\n const addNodeAsChild = (nodes: TreeNodeType[], parentKey: string, nodeToInsert: TreeNodeType): TreeNodeType[] => {\n return nodes.map((n) => {\n if (n.key === parentKey) {\n return { ...n, children: [...(n.children || []), nodeToInsert] };\n }\n\n if (n.children && n.children.length > 0) {\n return { ...n, children: addNodeAsChild(n.children, parentKey, nodeToInsert) };\n }\n\n return n;\n });\n };\n\n const computeMoveResult = (): { updated: TreeNodeType[]; dropIndex: number } | null => {\n const dragNode = dragState.dragNode;\n const rootNodes = tree?.getNodes() || [];\n\n if (!node || !dragNode) return null;\n\n let updated = removeNodeFromTree(rootNodes, dragNode);\n\n if (dropPosition === 'before') {\n updated = insertNodeInSiblings(updated, node.key, dragNode, 0);\n } else if (dropPosition === 'after') {\n updated = insertNodeInSiblings(updated, node.key, dragNode, 1);\n } else {\n updated = addNodeAsChild(updated, node.key, dragNode);\n }\n\n return { updated, dropIndex: props.index ?? 0 };\n };\n\n const onNodeDragStart = (event: React.DragEvent) => {\n if (!isNodeDraggable) {\n event.preventDefault();\n return;\n }\n\n event.stopPropagation();\n event.dataTransfer.effectAllowed = 'all';\n event.dataTransfer.setData('text', 'data');\n\n const target = event.currentTarget as HTMLElement;\n const dragEl = target.cloneNode(true) as HTMLElement;\n const toggler = dragEl.querySelector('[data-part=\"toggle\"]') as HTMLElement | null;\n\n target.setAttribute('data-dragging', 'true');\n dragEl.style.width = getOuterWidth(target) + 'px';\n dragEl.style.height = getOuterHeight(target) + 'px';\n dragEl.setAttribute('data-part', 'drag-image');\n\n if (toggler) {\n toggler.style.visibility = 'hidden';\n }\n\n document.body.appendChild(dragEl);\n event.dataTransfer.setDragImage(dragEl, 0, 0);\n\n setTimeout(() => document.body.removeChild(dragEl), 0);\n\n // Lets the destination tree remove this node from our value on drop.\n const sourceTreeNodes = tree?.getNodes() ?? [];\n const sourceCommit = (originalEvent: React.DragEvent) => {\n if (!node) return;\n\n const updated = removeNodeFromTree(sourceTreeNodes as TreeNodeType[], node as TreeNodeType);\n\n tree?.props.onMove?.({\n originalEvent,\n value: updated,\n dragNode: node as TreeNodeType,\n dropNode: null,\n dropIndex: -1,\n dropPosition: 'inside'\n });\n };\n\n TreeDragDropService.startDrag({\n node: node as TreeNodeType,\n subNodes: subNodes as TreeNodeType[],\n index: props.index,\n scope: tree?.props.draggableScope,\n sourceCommit\n });\n };\n\n const onNodeDragOver = (event: React.DragEvent) => {\n if (isDroppable) {\n event.dataTransfer.dropEffect = 'copy';\n const nodeElement = event.currentTarget as HTMLElement;\n const rect = nodeElement.getBoundingClientRect();\n const y = event.clientY - rect.top;\n\n // dragover fires per mouse move; only set state that actually changed.\n const wantPrev = y < rect.height * 0.25;\n const wantNext = y > rect.height * 0.75;\n const wantInside = !wantPrev && !wantNext && !!isNodeDroppable;\n\n if (wantPrev !== isPrevDropPointHovered) setIsPrevDropPointHovered(wantPrev);\n if (wantNext !== isNextDropPointHovered) setIsNextDropPointHovered(wantNext);\n if (wantInside !== isNodeDropHovered) setIsNodeDropHovered(wantInside);\n } else {\n event.dataTransfer.dropEffect = 'none';\n }\n\n if (tree?.props.droppable) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n const onNodeDragEnter = () => {};\n\n const onNodeDragLeave = () => {\n setIsPrevDropPointHovered(false);\n setIsNextDropPointHovered(false);\n setIsNodeDropHovered(false);\n };\n\n const onNodeDragEnd = (event: React.DragEvent) => {\n event.stopPropagation();\n (event.currentTarget as HTMLElement)?.removeAttribute('data-dragging');\n\n TreeDragDropService.stopDrag({ node: node as TreeNodeType });\n };\n\n const fireMove = (event: React.DragEvent, dragNode: TreeNodeType, updated: TreeNodeType[]) => {\n const moveEvent = buildMoveEvent(event, updated, dragNode, node as TreeNodeType, props.index ?? 0, dropPosition);\n const { sourceCommit } = TreeDragDropService.getDragState();\n const sourceIsThisTree = (tree?.getNodes() ?? []).some((root) => containsNodeByKey(root, dragNode.key));\n\n props.onMove?.(moveEvent);\n tree?.props.onMove?.(moveEvent);\n\n // Cross-tree drop — tell the source to remove the node from its value.\n if (sourceCommit && !sourceIsThisTree) sourceCommit(event);\n };\n\n const onNodeDrop = (event: React.DragEvent) => {\n if (!isDroppable) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const dragNode = dragState.dragNode;\n const isValidDrop = dropPosition !== 'inside' || isNodeDroppable;\n\n if (!isValidDrop || !dragNode) {\n setIsPrevDropPointHovered(false);\n setIsNextDropPointHovered(false);\n setIsNodeDropHovered(false);\n return;\n }\n\n const validate = tree?.props.validateMove;\n const result = computeMoveResult();\n if (!result) {\n TreeDragDropService.stopDrag({ node: dragNode });\n return;\n }\n\n const commit = () => {\n fireMove(event, dragNode, result.updated);\n TreeDragDropService.stopDrag({ node: dragNode });\n };\n\n if (validate) {\n const preview = buildMoveEvent(event, result.updated, dragNode, node as TreeNodeType, props.index ?? 0, dropPosition);\n const validation = validate(preview);\n\n if (validation instanceof Promise) {\n validation.then((ok) => {\n if (ok) commit();\n else TreeDragDropService.stopDrag({ node: dragNode });\n });\n } else if (validation) {\n commit();\n } else {\n TreeDragDropService.stopDrag({ node: dragNode });\n }\n } else {\n commit();\n }\n\n setIsPrevDropPointHovered(false);\n setIsNextDropPointHovered(false);\n setIsNodeDropHovered(false);\n };\n\n const handleContentClick = (event: React.MouseEvent) => {\n if (tree && node && node.disabled !== true) {\n tree.onClick(event, node, nodeTouched);\n\n if (nodeTouched) {\n setNodeTouched(false);\n }\n }\n };\n\n const handleContentTouchEnd = () => {\n setNodeTouched(true);\n };\n\n const state = {\n expanded,\n selected,\n checked,\n partialChecked,\n leaf,\n level,\n posInSet,\n setSize,\n isNodeDropActive: !!isNodeDropActive,\n isPrevDropPointActive: !!isPrevDropPointActive,\n isNextDropPointActive: !!isNextDropPointActive,\n isDraggable: !!isNodeDraggable,\n nodeTouched\n };\n\n const nodeProps = tree?.getNodeProps(node as TreeNodeType, level, expanded, checked, selected, leaf, posInSet, setSize);\n\n const isCheckbox = tree?.props.selectionMode === 'checkbox';\n const isSelected = isCheckbox ? checked : selected;\n const isSelectable = !!(tree?.props.selectionMode && node?.disabled !== true);\n\n const contentProps = {\n 'data-scope': 'tree' as const,\n 'data-part': 'content' as const,\n draggable: !!isNodeDraggable,\n ...(isSelected && { 'data-selected': '' as const }),\n ...(isSelectable && { 'data-selectable': '' as const }),\n ...(!leaf && { [expanded ? 'data-expanded' : 'data-collapsed']: '' as const }),\n ...(leaf && { 'data-leaf': '' as const }),\n ...(checked && { 'data-checked': '' as const }),\n ...(partialChecked && { 'data-partial-checked': '' as const }),\n ...(node?.disabled === true && { 'data-disabled': '' as const }),\n ...(isNodeDropActive && { 'data-dragover': '' as const }),\n onDragStart: onNodeDragStart,\n onDragOver: onNodeDragOver,\n onDragEnter: onNodeDragEnter,\n onDragLeave: onNodeDragLeave,\n onDragEnd: onNodeDragEnd,\n onDrop: onNodeDrop,\n onClick: handleContentClick,\n onTouchEnd: handleContentTouchEnd\n };\n\n const dropPointProps = {\n 'data-scope': 'tree' as const,\n 'data-part': 'drop-point' as const,\n 'aria-hidden': true as const\n };\n\n return {\n state,\n parentNode,\n nodeProps,\n contentProps,\n dropPointProps\n };\n }\n});\n","import type { UseTreeNodeHookProps } from '@primereact/types/headless/tree';\n\nexport const defaultTreeNodeProps: UseTreeNodeHookProps = {\n node: undefined,\n index: undefined,\n context: undefined,\n parentContext: undefined,\n onMove: undefined\n};\n"],"mappings":"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","names":["withHeadless","useControlledState","React","defaultProps","React","dragState","dragStartHandlers","dragStopHandlers","TreeDragDropService","event","_a","_b","_c","_d","_e","handler","rootContainsKey","node","key","child","useTreeRootDragDrop","props","setDragHoverState","getNodes","cleanup","TreeDragDropService","allowDrop","dropNode","dragNode","dragScope","isValidDragScope","onDragOver","event","onDragEnter","_event","onDragLeave","rect","commitRootDrop","_dragNodeIndex","sourceCommit","currentNodes","sourceIsThisTree","root","newValue","moveEvent","fire","_a","result","ok","dragNodeIndex","isSameTreeScope","hasCommonScope","a","b","item","droppableScope","draggableScope","buildMoveEvent","originalEvent","value","dropIndex","dropPosition","React","useTreeNodeMap","value","map","flat","walk","nodes","parentKey","level","_a","i","n","useTreeVisibleKeys","expandedKey","result","expanded","focus","isPrintableCharacter","React","TYPE_AHEAD_TIMEOUT","useTreeKeyboard","props","elementRef","visibleKeys","findNodeByKey","onNodeToggle","onClick","setFocusedKey","searchTimeout","searchValue","focusNodeElement","key","el","item","navigateToIndex","idx","fallbackKey","_a","_b","navigateNext","currentKey","navigatePrev","navigateFirst","navigateLast","searchNodes","char","currentNode","allTreeItems","currentElement","currentIndex","searchLower","matched","i","event","node","_level","expanded","leaf","target","currentTarget","metaKey","candidateKey","candidate","React","useTreeSelection","props","selectedKeyState","setSelectedKeyState","getNodes","getVisibleKeys","isSingleSelectionMode","isMultipleSelectionMode","isCheckboxSelectionMode","isNodeSelected","node","_a","fireSelect","event","fireUnselect","handleSelectionWithMetaKey","metaKey","selected","currentSelection","_selectionKeys","__spreadValues","handleSelectionWithoutMetaKey","nodeKey","__spreadProps","onNodeClick","nodeTouched","newValue","propagateDown","check","selectionKeys","child","propagateUp","_b","checkedChildCount","childPartialSelected","findParentNode","nodes","childKey","parent","found","onCheckboxChange","newCheckState","parentNode","onClick","setSelectionKeys","keys","originalEvent","isSelected","key","isPartiallySelected","selectionSummary","visibleKeys","selectedCount","slice","isAllSelected","isSomeSelected","toggleSelection","mode","findNodeByKeyInTree","toggleAll","allSelected","next","useTree","withHeadless","defaultProps","props","elementRef","id","_a","_b","defaultExpandedKeyRef","expandedKeyState","setExpandedKeyState","useControlledState","defaultSelectedKeyRef","selectedKeyState","setSelectedKeyState","focusedKeyState","setFocusedKeyState","dragHoverState","setDragHoverState","nodeMap","flatOrder","useTreeNodeMap","visibleKeys","useTreeVisibleKeys","visibleCount","findNodeByKey","key","findNodeInfo","entry","getNodes","setFocusedKey","visibleKeysRef","getVisibleKeys","selection","useTreeSelection","onNodeToggle","event","node","_c","_d","currentKeys","nodeKey","newValue","__spreadValues","__spreadProps","keyboard","useTreeKeyboard","dragDrop","useTreeRootDragDrop","state","rootProps","filterProps","loadingProps","getToggleProps","expanded","handleClick","getToggleSpacerProps","getToggleIndicatorProps","getNodeProps","level","checked","selected","leaf","posInSet","setSize","isFocused","handleKeyDown","isCheckbox","getNodesProps","withHeadless","getOuterHeight","getOuterWidth","React","defaultTreeNodeProps","containsNodeByKey","node","key","child","useTreeNode","withHeadless","defaultTreeNodeProps","props","_a","_b","_c","_d","_e","_f","_g","_h","tree","parentNode","nodeKey","expanded","selected","leaf","checked","partialChecked","checkboxKeys","level","posInSet","setSize","info","parentData","siblings","nodeTouched","setNodeTouched","isPrevDropPointHovered","setIsPrevDropPointHovered","isNextDropPointHovered","setIsNextDropPointHovered","isNodeDropHovered","setIsNodeDropHovered","parentNodeData","subNodes","isDraggable","isNodeDraggable","dragState","TreeDragDropService","isDroppable","isNodeDroppable","isPrevDropPointActive","isNextDropPointActive","isNodeDropActive","dropPosition","removeNodeFromTree","nodes","nodeToRemove","acc","n","updatedChildren","__spreadProps","__spreadValues","insertNodeInSiblings","targetKey","nodeToInsert","offset","targetIndex","newNodes","addNodeAsChild","parentKey","computeMoveResult","dragNode","rootNodes","updated","onNodeDragStart","event","target","dragEl","toggler","getOuterWidth","getOuterHeight","sourceTreeNodes","sourceCommit","originalEvent","onNodeDragOver","rect","y","wantPrev","wantNext","wantInside","onNodeDragEnter","onNodeDragLeave","onNodeDragEnd","fireMove","moveEvent","buildMoveEvent","sourceIsThisTree","root","onNodeDrop","validate","result","commit","preview","validation","ok","handleContentClick","handleContentTouchEnd","state","nodeProps","isSelected","isSelectable","contentProps"]}