@servicetitan/anvil2 3.16.1 → 3.18.0

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 (395) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/dist/{AiMark-BfmK30vL.js → AiMark-Ca7WmL-9.js} +114 -33
  3. package/dist/AiMark-Ca7WmL-9.js.map +1 -0
  4. package/dist/AiMark.js +1 -1
  5. package/dist/{Alert-lLo1N7Tj.js → Alert-BOqBFMUV.js} +3 -3
  6. package/dist/{Alert-lLo1N7Tj.js.map → Alert-BOqBFMUV.js.map} +1 -1
  7. package/dist/Alert.js +1 -1
  8. package/dist/{Announcement-PfnsVVz1.js → Announcement-AN9HnhZ-.js} +2 -2
  9. package/dist/{Announcement-PfnsVVz1.js.map → Announcement-AN9HnhZ-.js.map} +1 -1
  10. package/dist/Announcement.js +1 -1
  11. package/dist/{AnvilProvider-DagOuc9c.js → AnvilProvider-BVTxXzoS.js} +3 -3
  12. package/dist/{AnvilProvider-DagOuc9c.js.map → AnvilProvider-BVTxXzoS.js.map} +1 -1
  13. package/dist/AnvilProvider.js +1 -1
  14. package/dist/{Breadcrumbs-RdL4Fvmu.js → Breadcrumbs-1MCqy-gU.js} +2 -2
  15. package/dist/{Breadcrumbs-RdL4Fvmu.js.map → Breadcrumbs-1MCqy-gU.js.map} +1 -1
  16. package/dist/Breadcrumbs.js +1 -1
  17. package/dist/{Button-Dn6-01xl.js → Button-B_E6ybA-.js} +3 -3
  18. package/dist/{Button-Dn6-01xl.js.map → Button-B_E6ybA-.js.map} +1 -1
  19. package/dist/Button.js +1 -1
  20. package/dist/{ButtonToggle-BSU8GBxr.js → ButtonToggle-D0eXySEM.js} +2 -2
  21. package/dist/{ButtonToggle-BSU8GBxr.js.map → ButtonToggle-D0eXySEM.js.map} +1 -1
  22. package/dist/ButtonToggle.js +1 -1
  23. package/dist/{luxon-wpz4A-OQ.js → Calendar-BcsuV4Xv.js} +1761 -3
  24. package/dist/Calendar-BcsuV4Xv.js.map +1 -0
  25. package/dist/{Calendar-DoLRAWLp.js → Calendar-oBRbQqnG.js} +2 -2
  26. package/dist/{Calendar-DoLRAWLp.js.map → Calendar-oBRbQqnG.js.map} +1 -1
  27. package/dist/Calendar.js +2 -2
  28. package/dist/{Checkbox-U-kuWhgc.js → Checkbox-BCaUzwF_.js} +2 -2
  29. package/dist/{Checkbox-U-kuWhgc.js.map → Checkbox-BCaUzwF_.js.map} +1 -1
  30. package/dist/{Checkbox-CVxbe-iN.js → Checkbox-BocPrjKC.js} +4 -4
  31. package/dist/{Checkbox-CVxbe-iN.js.map → Checkbox-BocPrjKC.js.map} +1 -1
  32. package/dist/Checkbox.js +1 -1
  33. package/dist/{Chip-2OydLs66.js → Chip-BWqgUX71.js} +11 -24
  34. package/dist/Chip-BWqgUX71.js.map +1 -0
  35. package/dist/Chip.js +1 -1
  36. package/dist/Combobox.js +1 -1
  37. package/dist/{DataTable-DIXP9-Bx.js → DataTableEditColumnsDrawer-C7OHRsJU.js} +1373 -289
  38. package/dist/DataTableEditColumnsDrawer-C7OHRsJU.js.map +1 -0
  39. package/dist/{DataTable.css → DataTableEditColumnsDrawer.css} +90 -33
  40. package/dist/{DateFieldRange-X2jdOTYY.js → DateFieldRange-BPcsS6TW.js} +6 -7
  41. package/dist/{DateFieldRange-X2jdOTYY.js.map → DateFieldRange-BPcsS6TW.js.map} +1 -1
  42. package/dist/DateFieldRange.js +1 -1
  43. package/dist/{DateFieldSingle-BJ16tpOz.js → DateFieldSingle-BRMhe0OM.js} +6 -7
  44. package/dist/{DateFieldSingle-BJ16tpOz.js.map → DateFieldSingle-BRMhe0OM.js.map} +1 -1
  45. package/dist/DateFieldSingle.js +1 -1
  46. package/dist/{DateFieldYearless-CMm8vtz_.js → DateFieldYearless-NOgDKzrJ.js} +6 -6
  47. package/dist/{DateFieldYearless-CMm8vtz_.js.map → DateFieldYearless-NOgDKzrJ.js.map} +1 -1
  48. package/dist/DateFieldYearless.js +1 -1
  49. package/dist/{DateFieldYearlessRange-BHHs-Z1Q.js → DateFieldYearlessRange-ChvypgXC.js} +5 -5
  50. package/dist/{DateFieldYearlessRange-BHHs-Z1Q.js.map → DateFieldYearlessRange-ChvypgXC.js.map} +1 -1
  51. package/dist/DateFieldYearlessRange.js +1 -1
  52. package/dist/{DaysOfTheWeek-BHXxs0Bo.js → DaysOfTheWeek-nYitIKnQ.js} +4 -4
  53. package/dist/{DaysOfTheWeek-BHXxs0Bo.js.map → DaysOfTheWeek-nYitIKnQ.js.map} +1 -1
  54. package/dist/DaysOfTheWeek.js +1 -1
  55. package/dist/Details-B2F3auTX.js +216 -0
  56. package/dist/Details-B2F3auTX.js.map +1 -0
  57. package/dist/{Details-BxqP-5vp.js → Details-DQ-_Mg4o.js} +3 -3
  58. package/dist/{Details-BxqP-5vp.js.map → Details-DQ-_Mg4o.js.map} +1 -1
  59. package/dist/Details.css +92 -68
  60. package/dist/Details.js +1 -1
  61. package/dist/Details2.css +137 -0
  62. package/dist/{Dialog-_tHqOsbr.js → Dialog-BgWoV2on.js} +10 -7
  63. package/dist/Dialog-BgWoV2on.js.map +1 -0
  64. package/dist/Dialog.js +1 -1
  65. package/dist/{DialogCancelButton-C0r8hJ8Z.js → DialogCancelButton-CplrFu69.js} +2 -2
  66. package/dist/{DialogCancelButton-C0r8hJ8Z.js.map → DialogCancelButton-CplrFu69.js.map} +1 -1
  67. package/dist/Dnd.js +2 -2
  68. package/dist/{DndHandleButton-BRlodkDO.js → DndHandleButton-BJqj2hc0.js} +6 -4
  69. package/dist/DndHandleButton-BJqj2hc0.js.map +1 -0
  70. package/dist/DndSort.js +2 -2
  71. package/dist/{Drawer-D-ThWNp0.js → Drawer-BVBLtGn_.js} +12 -9
  72. package/dist/Drawer-BVBLtGn_.js.map +1 -0
  73. package/dist/Drawer.js +1 -1
  74. package/dist/DrillDown.css +41 -34
  75. package/dist/DrillDown.js +1 -1
  76. package/dist/DrillDown.module-BFE5BcJB.js +28 -0
  77. package/dist/DrillDown.module-BFE5BcJB.js.map +1 -0
  78. package/dist/{EditCard-B6l2vhBS.js → EditCard-hivZDPZh.js} +3 -3
  79. package/dist/{EditCard-B6l2vhBS.js.map → EditCard-hivZDPZh.js.map} +1 -1
  80. package/dist/EditCard.js +1 -1
  81. package/dist/{FieldLabel-ThEmUiAq.js → FieldLabel-Cn559Brf.js} +8 -58
  82. package/dist/FieldLabel-Cn559Brf.js.map +1 -0
  83. package/dist/FieldLabel.css +1 -12
  84. package/dist/FieldLabel.js +1 -1
  85. package/dist/FieldMessage.js +1 -1
  86. package/dist/{FilterBar-CGsDg6Hy.js → FilterBar-COd38Ent.js} +7 -7
  87. package/dist/{FilterBar-CGsDg6Hy.js.map → FilterBar-COd38Ent.js.map} +1 -1
  88. package/dist/FilterBar.js +1 -1
  89. package/dist/InlineMarkdown-CL1tKR01.js +87 -0
  90. package/dist/InlineMarkdown-CL1tKR01.js.map +1 -0
  91. package/dist/InlineMarkdown.css +12 -0
  92. package/dist/{InputMask-BQigi5oW.js → InputMask-DICWdeiF.js} +3 -3
  93. package/dist/{InputMask-BQigi5oW.js.map → InputMask-DICWdeiF.js.map} +1 -1
  94. package/dist/InputMask.js +1 -1
  95. package/dist/{ListView-YJscfG4x.js → ListView-BeGBn5Vk.js} +87 -108
  96. package/dist/ListView-BeGBn5Vk.js.map +1 -0
  97. package/dist/ListView.js +1 -1
  98. package/dist/{Listbox-CD9ZptSZ.js → Listbox-n1CmJ2gh.js} +2 -2
  99. package/dist/{Listbox-CD9ZptSZ.js.map → Listbox-n1CmJ2gh.js.map} +1 -1
  100. package/dist/Listbox.js +1 -1
  101. package/dist/{Menu-Da2OEN0o.js → Menu-DqP7YQgE.js} +2 -2
  102. package/dist/{Menu-Da2OEN0o.js.map → Menu-DqP7YQgE.js.map} +1 -1
  103. package/dist/Menu.js +1 -1
  104. package/dist/{MenuFooter-D__gg92C.js → MenuFooter-Dzhv0EfD.js} +2 -2
  105. package/dist/{MenuFooter-D__gg92C.js.map → MenuFooter-Dzhv0EfD.js.map} +1 -1
  106. package/dist/MultiSelectField.js +1 -1
  107. package/dist/{MultiSelectFieldSync-Cq5sena6.js → MultiSelectFieldSync-CWsOdu-o.js} +45 -63
  108. package/dist/MultiSelectFieldSync-CWsOdu-o.js.map +1 -0
  109. package/dist/MultiSelectFieldSync.css +107 -69
  110. package/dist/MultiSelectMenu.js +1 -1
  111. package/dist/{MultiSelectMenuSync-BhNXsgAN.js → MultiSelectMenuSync-AVcf8ZUZ.js} +17 -30
  112. package/dist/MultiSelectMenuSync-AVcf8ZUZ.js.map +1 -0
  113. package/dist/{useNumberField-CXFYUZ_n.js → NumberField-DjOvcCa1.js} +251 -5
  114. package/dist/NumberField-DjOvcCa1.js.map +1 -0
  115. package/dist/NumberField.js +1 -1
  116. package/dist/{Page-ZSHNJs7z.js → Page-_dh-JesM.js} +134 -85
  117. package/dist/Page-_dh-JesM.js.map +1 -0
  118. package/dist/Page.css +85 -80
  119. package/dist/Page.js +1 -1
  120. package/dist/{Pagination-Bsl99RRI.js → Pagination-CsSpaTCs.js} +5 -5
  121. package/dist/{Pagination-Bsl99RRI.js.map → Pagination-CsSpaTCs.js.map} +1 -1
  122. package/dist/Pagination.js +1 -1
  123. package/dist/{Popover-CIh1CsoJ.js → Popover-CEKl0WY3.js} +4 -4
  124. package/dist/{Popover-CIh1CsoJ.js.map → Popover-CEKl0WY3.js.map} +1 -1
  125. package/dist/Popover.js +1 -1
  126. package/dist/{ProgressBar-zPKYv4Il.js → ProgressBar-ubCKKewC.js} +3 -3
  127. package/dist/{ProgressBar-zPKYv4Il.js.map → ProgressBar-ubCKKewC.js.map} +1 -1
  128. package/dist/ProgressBar.js +1 -1
  129. package/dist/{Radio-C1VnatcL.js → Radio-DkB6zFsS.js} +2 -2
  130. package/dist/{Radio-C1VnatcL.js.map → Radio-DkB6zFsS.js.map} +1 -1
  131. package/dist/{Radio-BYowelK2.js → Radio-q1Vp_ZQG.js} +4 -4
  132. package/dist/{Radio-BYowelK2.js.map → Radio-q1Vp_ZQG.js.map} +1 -1
  133. package/dist/Radio.js +1 -1
  134. package/dist/{RichTextEditor-DcAVqd2d.js → RichTextEditor-BHt6sWMA.js} +11 -11
  135. package/dist/{RichTextEditor-DcAVqd2d.js.map → RichTextEditor-BHt6sWMA.js.map} +1 -1
  136. package/dist/RichTextEditor.js +1 -1
  137. package/dist/{SavedFiltersButton-BLvi8j1T.js → SavedFiltersButton-Cl58iHZe.js} +10 -10
  138. package/dist/{SavedFiltersButton-BLvi8j1T.js.map → SavedFiltersButton-Cl58iHZe.js.map} +1 -1
  139. package/dist/SavedFiltersButton.js +1 -1
  140. package/dist/{SearchField-ChoNtw8w.js → SearchField-Bk-Ltu4v.js} +2 -2
  141. package/dist/{SearchField-ChoNtw8w.js.map → SearchField-Bk-Ltu4v.js.map} +1 -1
  142. package/dist/{SearchField-DX8hZyo2.js → SearchField-INVftpNM.js} +2 -2
  143. package/dist/{SearchField-DX8hZyo2.js.map → SearchField-INVftpNM.js.map} +1 -1
  144. package/dist/SearchField.js +1 -1
  145. package/dist/{SegmentedControl-BHVJmmTH.js → SegmentedControl-BCqWq65N.js} +3 -3
  146. package/dist/{SegmentedControl-BHVJmmTH.js.map → SegmentedControl-BCqWq65N.js.map} +1 -1
  147. package/dist/SegmentedControl.js +1 -1
  148. package/dist/{SelectCard-DrmMU_GD.js → SelectCard-DeAUW1bL.js} +3 -3
  149. package/dist/{SelectCard-DrmMU_GD.js.map → SelectCard-DeAUW1bL.js.map} +1 -1
  150. package/dist/SelectCard.js +1 -1
  151. package/dist/SelectField.js +1 -1
  152. package/dist/{SelectFieldLabel-BxsKvfqo.js → SelectFieldLabel-DaXwIFZj.js} +2 -2
  153. package/dist/{SelectFieldLabel-BxsKvfqo.js.map → SelectFieldLabel-DaXwIFZj.js.map} +1 -1
  154. package/dist/{SelectFieldSync-CeazN-gI.js → SelectFieldSync-DpZL4wDo.js} +48 -69
  155. package/dist/SelectFieldSync-DpZL4wDo.js.map +1 -0
  156. package/dist/SelectMenu.js +1 -1
  157. package/dist/{SelectMenuSync-CPpE6vUG.js → SelectMenuSync-Klna2oqs.js} +17 -36
  158. package/dist/SelectMenuSync-Klna2oqs.js.map +1 -0
  159. package/dist/{SelectOptions-BDAu_9dv.js → SelectOptions-DGYYFU8i.js} +2 -2
  160. package/dist/{SelectOptions-BDAu_9dv.js.map → SelectOptions-DGYYFU8i.js.map} +1 -1
  161. package/dist/{SelectTrigger-B4OUTO9S.js → SelectTrigger-DKY7rpZn.js} +2 -2
  162. package/dist/{SelectTrigger-B4OUTO9S.js.map → SelectTrigger-DKY7rpZn.js.map} +1 -1
  163. package/dist/SelectTrigger.js +1 -1
  164. package/dist/{SelectTriggerBase-BTWSaiQ-.js → SelectTriggerBase-DUYq_L-6.js} +6 -6
  165. package/dist/{SelectTriggerBase-BTWSaiQ-.js.map → SelectTriggerBase-DUYq_L-6.js.map} +1 -1
  166. package/dist/SelectTriggerBase.css +94 -56
  167. package/dist/SelectTriggerBase.module-C-NmZbg4.js +41 -0
  168. package/dist/SelectTriggerBase.module-C-NmZbg4.js.map +1 -0
  169. package/dist/{Stepper-l_P6VPOv.js → Stepper-D3SHXfX1.js} +3 -3
  170. package/dist/{Stepper-l_P6VPOv.js.map → Stepper-D3SHXfX1.js.map} +1 -1
  171. package/dist/Stepper.js +1 -1
  172. package/dist/{Switch-1iNdXTik.js → Switch-C9yQgF4w.js} +2 -2
  173. package/dist/{Switch-1iNdXTik.js.map → Switch-C9yQgF4w.js.map} +1 -1
  174. package/dist/Switch.js +1 -1
  175. package/dist/{Tab-DR5YYXkq.js → Tab-CXwVQ5-G.js} +11 -7
  176. package/dist/Tab-CXwVQ5-G.js.map +1 -0
  177. package/dist/Tab.js +1 -1
  178. package/dist/Table.js +1 -1
  179. package/dist/{Text-rihxXHSe.js → Text-D4SWT4u-.js} +2 -2
  180. package/dist/{Text-rihxXHSe.js.map → Text-D4SWT4u-.js.map} +1 -1
  181. package/dist/Text.js +1 -1
  182. package/dist/{TextField-vuS7xeo-.js → TextField-CKXSxube.js} +5 -5
  183. package/dist/{TextField-vuS7xeo-.js.map → TextField-CKXSxube.js.map} +1 -1
  184. package/dist/{TextField-Bxd-Qzoi.js → TextField-DmdT2k0w.js} +2 -2
  185. package/dist/{TextField-Bxd-Qzoi.js.map → TextField-DmdT2k0w.js.map} +1 -1
  186. package/dist/TextField.css +38 -23
  187. package/dist/TextField.js +1 -1
  188. package/dist/TextField.module-B3y6caP9.js +25 -0
  189. package/dist/TextField.module-B3y6caP9.js.map +1 -0
  190. package/dist/{Textarea-ppapJUwh.js → Textarea-Dv__veBJ.js} +11 -11
  191. package/dist/{Textarea-ppapJUwh.js.map → Textarea-Dv__veBJ.js.map} +1 -1
  192. package/dist/Textarea.css +26 -11
  193. package/dist/Textarea.js +1 -1
  194. package/dist/{ThemeProvider-DW-Mflv6.js → ThemeProvider-DS2aL89d.js} +2 -2
  195. package/dist/{ThemeProvider-DW-Mflv6.js.map → ThemeProvider-DS2aL89d.js.map} +1 -1
  196. package/dist/ThemeProvider.css +6 -4
  197. package/dist/ThemeProvider.js +1 -1
  198. package/dist/ThemeProvider.module-BkKwAw2f.js +8 -0
  199. package/dist/ThemeProvider.module-BkKwAw2f.js.map +1 -0
  200. package/dist/{TimeField-Hwt_oRbg.js → TimeField-De9qBimk.js} +49 -11
  201. package/dist/TimeField-De9qBimk.js.map +1 -0
  202. package/dist/TimeField.js +1 -1
  203. package/dist/{TimezoneMessage-BrKB_psP.js → TimezoneMessage-DEJX87S3.js} +2 -2
  204. package/dist/{TimezoneMessage-BrKB_psP.js.map → TimezoneMessage-DEJX87S3.js.map} +1 -1
  205. package/dist/Toast.js +2 -2
  206. package/dist/{Toaster-dVGVVcat.js → Toaster-BlwTxTLf.js} +2 -2
  207. package/dist/{Toaster-dVGVVcat.js.map → Toaster-BlwTxTLf.js.map} +1 -1
  208. package/dist/{Toaster-SqkX0Kes.js → Toaster-sO16N9b5.js} +26 -14
  209. package/dist/Toaster-sO16N9b5.js.map +1 -0
  210. package/dist/{Toolbar-DGHZpFi9.js → Toolbar-BhrHuIN7.js} +7 -7
  211. package/dist/{Toolbar-DGHZpFi9.js.map → Toolbar-BhrHuIN7.js.map} +1 -1
  212. package/dist/{Toolbar-CMulzswf.js → Toolbar-Buq2zze0.js} +6 -6
  213. package/dist/{Toolbar-CMulzswf.js.map → Toolbar-Buq2zze0.js.map} +1 -1
  214. package/dist/Toolbar.js +2 -2
  215. package/dist/{ToolbarButtonToggle-T8YnSJ5x.js → ToolbarButtonToggle-CNIaqVWl.js} +3 -3
  216. package/dist/{ToolbarButtonToggle-T8YnSJ5x.js.map → ToolbarButtonToggle-CNIaqVWl.js.map} +1 -1
  217. package/dist/{Tooltip-C_VcYS9P.js → Tooltip-CsTkZqMg.js} +3 -3
  218. package/dist/{Tooltip-C_VcYS9P.js.map → Tooltip-CsTkZqMg.js.map} +1 -1
  219. package/dist/Tooltip.js +1 -1
  220. package/dist/TreeSelectField.js +1 -1
  221. package/dist/{TreeSelectFieldSync-DT6uZ3Ca.js → TreeSelectFieldSync-B7w31kbz.js} +23 -23
  222. package/dist/{TreeSelectFieldSync-DT6uZ3Ca.js.map → TreeSelectFieldSync-B7w31kbz.js.map} +1 -1
  223. package/dist/TreeSelectFieldSync.css +57 -34
  224. package/dist/TreeSelectMenu.js +1 -1
  225. package/dist/{TreeSelectMenuSync-D2TvKxP-.js → TreeSelectMenuSync-EjxlvDZp.js} +5 -5
  226. package/dist/{TreeSelectMenuSync-D2TvKxP-.js.map → TreeSelectMenuSync-EjxlvDZp.js.map} +1 -1
  227. package/dist/{TypeaheadTextField-DgazozK7.js → TypeaheadTextField-DTOkaJda.js} +3 -3
  228. package/dist/{TypeaheadTextField-DgazozK7.js.map → TypeaheadTextField-DTOkaJda.js.map} +1 -1
  229. package/dist/TypeaheadTextField.js +1 -1
  230. package/dist/{YearlessDateInputWithPicker-Bc8a33D5.js → YearlessDateInputWithPicker-DJUQypnF.js} +4 -4
  231. package/dist/{YearlessDateInputWithPicker-Bc8a33D5.js.map → YearlessDateInputWithPicker-DJUQypnF.js.map} +1 -1
  232. package/dist/assets/icons/st/gnav_messages_active.svg +1 -0
  233. package/dist/assets/icons/st/gnav_messages_inactive.svg +1 -0
  234. package/dist/assets/icons/st.ts +2 -0
  235. package/dist/beta.js +19 -18
  236. package/dist/beta.js.map +1 -1
  237. package/dist/{bulkActionTypes-SukoplGV.js → bulkActionTypes-bznuvizE.js} +2 -2
  238. package/dist/{bulkActionTypes-SukoplGV.js.map → bulkActionTypes-bznuvizE.js.map} +1 -1
  239. package/dist/{filter-state-D3-SYfuy.js → filter-state-DxwL15y1.js} +25 -25
  240. package/dist/{filter-state-D3-SYfuy.js.map → filter-state-DxwL15y1.js.map} +1 -1
  241. package/dist/{index-C2dOrf4N.js → index-Bn56UnMm.js} +2 -2
  242. package/dist/{index-C2dOrf4N.js.map → index-Bn56UnMm.js.map} +1 -1
  243. package/dist/{index-Bldaza5t.js → index-CyN5oapA.js} +2 -2
  244. package/dist/{index-Bldaza5t.js.map → index-CyN5oapA.js.map} +1 -1
  245. package/dist/index-DfZCfS0S.js +36 -0
  246. package/dist/index-DfZCfS0S.js.map +1 -0
  247. package/dist/{index.esm-C2ZhC_8d.js → index.esm-CQXMoq5w.js} +2 -2
  248. package/dist/{index.esm-C2ZhC_8d.js.map → index.esm-CQXMoq5w.js.map} +1 -1
  249. package/dist/index.js +171 -127
  250. package/dist/index.js.map +1 -1
  251. package/dist/index2.css +78 -73
  252. package/dist/{portalScopeClassNames-DA28LrXe.js → portalScopeClassNames-CMdDYHE0.js} +2 -2
  253. package/dist/{portalScopeClassNames-DA28LrXe.js.map → portalScopeClassNames-CMdDYHE0.js.map} +1 -1
  254. package/dist/{react-ORV84FjM.js → react-CG1BUt2y.js} +5 -38
  255. package/dist/react-CG1BUt2y.js.map +1 -0
  256. package/dist/src/beta/components/Details/Details.d.ts +25 -0
  257. package/dist/src/beta/components/Details/DetailsSummary.d.ts +121 -0
  258. package/dist/src/beta/components/Details/index.d.ts +4 -0
  259. package/dist/src/beta/components/Details/internal/DetailsArrow.d.ts +11 -0
  260. package/dist/src/beta/components/Details/internal/DetailsSummaryCells.d.ts +5 -0
  261. package/dist/src/beta/components/Page/Page.d.ts +1 -0
  262. package/dist/src/beta/components/Page/PageSidebar.d.ts +12 -0
  263. package/dist/src/beta/components/Table/DataTable/DataTable.d.ts +31 -4
  264. package/dist/src/beta/components/Table/DataTable/DataTableEditColumnsDrawer.d.ts +18 -0
  265. package/dist/src/beta/components/Table/DataTable/index.d.ts +1 -0
  266. package/dist/src/beta/components/Table/DataTable/internal/DataTableAddRow.d.ts +11 -0
  267. package/dist/src/beta/components/Table/DataTable/internal/DataTableBulkActionBar.d.ts +23 -0
  268. package/dist/src/beta/components/Table/DataTable/internal/DataTableFilterToolbar.d.ts +12 -0
  269. package/dist/src/beta/components/Table/DataTable/internal/DataTablePagination.d.ts +3 -3
  270. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/EditColumnsDrawer.d.ts +29 -0
  271. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/columnLayout.d.ts +43 -0
  272. package/dist/src/beta/components/Table/DataTable/internal/columnEditing/toEditColumnsSection.d.ts +7 -0
  273. package/dist/src/beta/components/Table/DataTable/internal/context/tabbables/CellTabbablesQueue.d.ts +23 -0
  274. package/dist/src/beta/components/Table/DataTable/parts.d.ts +17 -0
  275. package/dist/src/beta/components/Table/DataTable/types.d.ts +256 -2
  276. package/dist/src/beta/components/Table/types.d.ts +6 -0
  277. package/dist/src/beta/components/deprecatedReexports/MultiSelectField.d.ts +4 -4
  278. package/dist/src/beta/components/deprecatedReexports/MultiSelectMenu.d.ts +4 -4
  279. package/dist/src/beta/components/deprecatedReexports/SelectField.d.ts +4 -4
  280. package/dist/src/beta/components/deprecatedReexports/SelectMenu.d.ts +4 -4
  281. package/dist/src/beta/components/index.d.ts +1 -0
  282. package/dist/src/components/DrillDown/DrillDownHeader.d.ts +11 -2
  283. package/dist/src/components/DrillDown/index.d.ts +1 -1
  284. package/dist/src/components/DrillDown/internal/DrillDownContext.d.ts +7 -2
  285. package/dist/src/components/DrillDown/internal/useDrillDownContextState.d.ts +6 -3
  286. package/dist/src/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
  287. package/dist/src/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
  288. package/dist/src/components/MultiSelectField/internal/types.d.ts +0 -1
  289. package/dist/src/components/Page/Page.d.ts +1 -0
  290. package/dist/src/components/Page/PageSidebar.d.ts +12 -0
  291. package/dist/src/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
  292. package/dist/src/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
  293. package/dist/src/hooks/usePrefersReducedMotion/index.d.ts +2 -0
  294. package/dist/src/hooks/usePrefersReducedMotion/prefersReducedMotion.d.ts +6 -0
  295. package/dist/src/hooks/usePrefersReducedMotion/useReducedMotion.d.ts +5 -0
  296. package/dist/src/internal/components/InlineMarkdown/InlineMarkdown.d.ts +8 -1
  297. package/dist/src/internal/components/InlineMarkdown/index.d.ts +1 -1
  298. package/dist/src/internal/components/Popover/Popover.d.ts +10 -5
  299. package/dist/src/internal/components/Popover/internal/verticalPlacement.d.ts +9 -0
  300. package/dist/src/internal/contexts/DisableConditionalUnmountWarningContext.d.ts +6 -0
  301. package/dist/src/internal/contexts/SuppressPanelSwapWarningContext.d.ts +13 -0
  302. package/dist/src/internal/functions/inlineMarkdown.d.ts +5 -2
  303. package/dist/src/internal/functions/stripInlineMarkdown.d.ts +4 -2
  304. package/dist/src/internal/hooks/index.d.ts +1 -0
  305. package/dist/src/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.d.ts +9 -1
  306. package/dist/src/internal/hooks/useSelectOrchestration.d.ts +0 -1
  307. package/dist/src/internal/hooks/useWarnOnConditionalUnmount/index.d.ts +1 -0
  308. package/dist/src/internal/hooks/useWarnOnConditionalUnmount/useWarnOnConditionalUnmount.d.ts +1 -0
  309. package/dist/src/internal/testing/keepMutationObserversAlive.d.ts +9 -0
  310. package/dist/src/internal/types/selectFieldInternalTypes.d.ts +0 -1
  311. package/dist/src/internal/utils/inlineMarkdownRegex.d.ts +5 -0
  312. package/dist/stripInlineMarkdown-BV12XXzl.js +35 -0
  313. package/dist/stripInlineMarkdown-BV12XXzl.js.map +1 -0
  314. package/dist/{syncFilterUtils-SMop8ckR.js → syncFilterUtils-BNbAB0jz.js} +110 -39
  315. package/dist/syncFilterUtils-BNbAB0jz.js.map +1 -0
  316. package/dist/token/core/component-variables.scss +52 -49
  317. package/dist/token/core/component.d.ts +2 -0
  318. package/dist/token/core/component.js +66 -49
  319. package/dist/token/core/component.scss +42 -40
  320. package/dist/token/core/semantic-variables.scss +2 -0
  321. package/dist/token/core/semantic.d.ts +1 -0
  322. package/dist/token/core/semantic.js +13 -0
  323. package/dist/token/core/semantic.scss +1 -0
  324. package/dist/token.js +82 -49
  325. package/dist/token.js.map +1 -1
  326. package/dist/{treeSync-B38r1dRQ.js → treeSync-BELsX1gY.js} +3 -3
  327. package/dist/{treeSync-B38r1dRQ.js.map → treeSync-BELsX1gY.js.map} +1 -1
  328. package/dist/{use-reduced-motion-yYB9Tb0D.js → use-reduced-motion-CUshwaEW.js} +2 -2
  329. package/dist/{use-reduced-motion-yYB9Tb0D.js.map → use-reduced-motion-CUshwaEW.js.map} +1 -1
  330. package/dist/{useDrillDownContext-D5_NjqY4.js → useDrillDownContext-BLDjyNEt.js} +2 -2
  331. package/dist/{useDrillDownContext-D5_NjqY4.js.map → useDrillDownContext-BLDjyNEt.js.map} +1 -1
  332. package/dist/{useDrilldown-BOeeNUsy.js → useDrilldown-B8pIhfWa.js} +55 -22
  333. package/dist/{useDrilldown-BOeeNUsy.js.map → useDrilldown-B8pIhfWa.js.map} +1 -1
  334. package/dist/{useInfiniteCombobox-ynkeFngn.js → useInfiniteCombobox-ZZalag0-.js} +4 -4
  335. package/dist/{useInfiniteCombobox-ynkeFngn.js.map → useInfiniteCombobox-ZZalag0-.js.map} +1 -1
  336. package/dist/{useInitialFocus-CGybEc6x.js → useInitialFocus-KdirjHEb.js} +51 -16
  337. package/dist/useInitialFocus-KdirjHEb.js.map +1 -0
  338. package/dist/{useInvalidateOnOptionsChange-BD2VBpbK.js → useInvalidateOnOptionsChange-ChrPmbtS.js} +6 -6
  339. package/dist/{useInvalidateOnOptionsChange-BD2VBpbK.js.map → useInvalidateOnOptionsChange-ChrPmbtS.js.map} +1 -1
  340. package/dist/{usePopoverTransitionStates-CDXCdyKa.js → usePopoverTransitionStates-B1opfxxn.js} +1 -2
  341. package/dist/{usePopoverTransitionStates-CDXCdyKa.js.map → usePopoverTransitionStates-B1opfxxn.js.map} +1 -1
  342. package/dist/{usePrefersReducedMotion-DR9B_D6w.js → usePrefersReducedMotion-BLoVFiJL.js} +11 -3
  343. package/dist/usePrefersReducedMotion-BLoVFiJL.js.map +1 -0
  344. package/dist/usePrefersReducedMotion.js +2 -1
  345. package/dist/usePrefersReducedMotion.js.map +1 -1
  346. package/dist/{utils-CM48ODEJ.js → utils-DwLrXpmt.js} +2 -2
  347. package/dist/{utils-CM48ODEJ.js.map → utils-DwLrXpmt.js.map} +1 -1
  348. package/package.json +4 -4
  349. package/dist/AiMark-BfmK30vL.js.map +0 -1
  350. package/dist/Calendar-IzXG1aJw.js +0 -1761
  351. package/dist/Calendar-IzXG1aJw.js.map +0 -1
  352. package/dist/Chip-2OydLs66.js.map +0 -1
  353. package/dist/DataTable-DIXP9-Bx.js.map +0 -1
  354. package/dist/Dialog-_tHqOsbr.js.map +0 -1
  355. package/dist/DndHandleButton-BRlodkDO.js.map +0 -1
  356. package/dist/Drawer-D-ThWNp0.js.map +0 -1
  357. package/dist/DrillDown.module-1VBKDZRA.js +0 -27
  358. package/dist/DrillDown.module-1VBKDZRA.js.map +0 -1
  359. package/dist/FieldLabel-ThEmUiAq.js.map +0 -1
  360. package/dist/Lato.css +0 -24
  361. package/dist/ListView-YJscfG4x.js.map +0 -1
  362. package/dist/MultiSelectFieldSync-Cq5sena6.js.map +0 -1
  363. package/dist/MultiSelectMenuSync-BhNXsgAN.js.map +0 -1
  364. package/dist/NumberField-CxmJx4gs.js +0 -252
  365. package/dist/NumberField-CxmJx4gs.js.map +0 -1
  366. package/dist/Page-ZSHNJs7z.js.map +0 -1
  367. package/dist/SelectFieldSync-CeazN-gI.js.map +0 -1
  368. package/dist/SelectMenuSync-CPpE6vUG.js.map +0 -1
  369. package/dist/SelectTriggerBase.module-Dt4-6YvC.js +0 -40
  370. package/dist/SelectTriggerBase.module-Dt4-6YvC.js.map +0 -1
  371. package/dist/Tab-DR5YYXkq.js.map +0 -1
  372. package/dist/TextField.module-DklyLNKz.js +0 -25
  373. package/dist/TextField.module-DklyLNKz.js.map +0 -1
  374. package/dist/ThemeProvider.module-B9qgsQ8S.js +0 -8
  375. package/dist/ThemeProvider.module-B9qgsQ8S.js.map +0 -1
  376. package/dist/TimeField-Hwt_oRbg.js.map +0 -1
  377. package/dist/Toaster-SqkX0Kes.js.map +0 -1
  378. package/dist/app-css.379821199ec8105f2efd.bundle.css +0 -57579
  379. package/dist/bugfix-71.1orion.css +0 -491
  380. package/dist/design-system.859a127fc3b66175f0f0.bundle.css +0 -34599
  381. package/dist/drag_indicator-BRHAPLSJ.js +0 -6
  382. package/dist/drag_indicator-BRHAPLSJ.js.map +0 -1
  383. package/dist/favicon.ico +0 -0
  384. package/dist/kendo-css.ed976099efbbcc8b0639.bundle.css +0 -20601
  385. package/dist/luxon-wpz4A-OQ.js.map +0 -1
  386. package/dist/main.e26f249642be9a4bd747.bundle.css +0 -50386
  387. package/dist/react-ORV84FjM.js.map +0 -1
  388. package/dist/stripInlineMarkdown-BhYLEiXu.js +0 -25
  389. package/dist/stripInlineMarkdown-BhYLEiXu.js.map +0 -1
  390. package/dist/sui.a9dc22e36a27b7ea1ee8.bundle.css +0 -41149
  391. package/dist/syncFilterUtils-SMop8ckR.js.map +0 -1
  392. package/dist/useInitialFocus-CGybEc6x.js.map +0 -1
  393. package/dist/useNumberField-CXFYUZ_n.js.map +0 -1
  394. package/dist/usePrefersReducedMotion-DR9B_D6w.js.map +0 -1
  395. package/dist/vite.svg +0 -1
@@ -1,8 +1,8 @@
1
1
  import { useState, useCallback, useRef, useEffect, useMemo, forwardRef } from 'react';
2
- import { i as isThenable, c as OptionRow, d as OptionRowSideContent, e as OptionCheckbox, f as OptionContentArea } from './useInvalidateOnOptionsChange-BD2VBpbK.js';
2
+ import { i as isThenable, c as OptionRow, d as OptionRowSideContent, e as OptionCheckbox, f as OptionContentArea } from './useInvalidateOnOptionsChange-ChrPmbtS.js';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
  import { S as Spinner } from './Spinner-B7tTWcP6.js';
5
- import { T as Text } from './Text-rihxXHSe.js';
5
+ import { T as Text } from './Text-D4SWT4u-.js';
6
6
  import { c as cx } from './index-De1g9FRV.js';
7
7
  import { C as COMMON_PART, A as ANV_PART_ATTR } from './anvParts-DFVq7-Cm.js';
8
8
  import { I as Icon } from './Icon-B5zwN7GD.js';
@@ -1499,4 +1499,4 @@ function toTreeSyncFilterFn(filter) {
1499
1499
  }
1500
1500
 
1501
1501
  export { PARTS as P, TreeContent as T, useTree as a, useTreeLazyCascade as b, applyChildCounts as c, defaultTreeSyncFilter as d, findNode as f, toTreeSyncFilterFn as t, useTreeLoader as u };
1502
- //# sourceMappingURL=treeSync-B38r1dRQ.js.map
1502
+ //# sourceMappingURL=treeSync-BELsX1gY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"treeSync-B38r1dRQ.js","sources":["../src/beta/components/TreeSelectField/parts.ts","../src/beta/components/TreeSelectField/internal/useTreeLoader.ts","../src/beta/components/TreeSelectField/internal/useTreeCascade.ts","../src/beta/components/TreeSelectField/internal/useTreeKeyboard.ts","../src/beta/components/TreeSelectField/internal/useTree.ts","../src/beta/components/TreeSelectField/internal/TreeRow.tsx","../src/beta/components/TreeSelectField/internal/TreePanel.tsx","../src/beta/components/TreeSelectField/internal/VirtualizedTreePanel.tsx","../src/beta/components/TreeSelectField/internal/TreeContent.tsx","../src/beta/components/TreeSelectField/internal/treeUtils.ts","../src/beta/components/TreeSelectField/internal/useTreeLazyCascade.ts","../src/beta/components/TreeSelectField/internal/treeSync.ts"],"sourcesContent":["import { COMMON_PART } from \"../../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for TreeSelectField's interactive sub-elements.\n *\n * Tree panels and rows own the tree-specific parts; shared option shells own\n * popover and dialog parts. Portaled parts cannot be scoped through the field\n * root, and repeated options also expose their node id through `data-id`.\n */\nexport const PARTS = {\n input: COMMON_PART.input,\n chip: COMMON_PART.chip,\n overflowChip: COMMON_PART.overflowChip,\n toggleButton: COMMON_PART.toggleButton,\n menu: COMMON_PART.menu,\n option: COMMON_PART.option,\n /** Branch expand/collapse control within a tree row. */\n expandToggle: \"expand-toggle\",\n} as const;\n","import { useState, useEffect, useRef, useCallback } from \"react\";\nimport type { TreeSelectFieldNode } from \"../types\";\nimport { isThenable } from \"../../../../internal/functions/isThenable\";\n\nexport type UseTreeLoaderOptions = {\n /** Loads roots/search results, or children when `parentNode` is supplied. */\n loadOptions: (\n searchValue: string,\n parentNode?: TreeSelectFieldNode,\n ) => TreeSelectFieldNode[] | Promise<TreeSelectFieldNode[]>;\n /** Configures both LRUs; each is enabled with at most 15 entries by default. */\n cache?: { enabled?: boolean; maxSize?: number };\n /** `\"auto\"` and `\"immediate\"` load on mount; `\"open\"` waits for first open. */\n initialLoad?: \"auto\" | \"immediate\" | \"open\";\n /** Search delay in milliseconds. Defaults to `200`. */\n debounceMs?: number;\n};\n\nexport type UseTreeLoaderReturn = {\n nodes: TreeSelectFieldNode[];\n /** Lazy-load ancestry retained across root/search replacements. */\n ancestry: Map<string | number, string | number>;\n isLoading: boolean;\n isLoadingChildren: Set<string | number>;\n loadChildren: (\n parentNode: TreeSelectFieldNode,\n ) => Promise<TreeSelectFieldNode[]>;\n /** Schedules a root/search load; `debounceMs={0}` runs immediately. */\n search: (searchValue: string) => void;\n clearCache: () => void;\n /** Clears both caches and reloads the current search without repopulating cache. */\n invalidate: () => void;\n /** Starts the deferred initial load, at most once. */\n onOpen: () => void;\n};\n\n/** Creates a Map-backed LRU capped at `maxSize`. */\nfunction createLruCache<K, V>(maxSize: number) {\n const map = new Map<K, V>();\n\n return {\n get(key: K): V | undefined {\n if (!map.has(key)) return undefined;\n // Reads refresh recency.\n const value = map.get(key)!;\n map.delete(key);\n map.set(key, value);\n return value;\n },\n set(key: K, value: V): void {\n if (map.has(key)) {\n map.delete(key);\n } else if (map.size >= maxSize) {\n const firstKey = map.keys().next().value;\n if (firstKey !== undefined) map.delete(firstKey);\n }\n map.set(key, value);\n },\n has(key: K): boolean {\n return map.has(key);\n },\n delete(key: K): void {\n map.delete(key);\n },\n clear(): void {\n map.clear();\n },\n };\n}\n\n/** Replaces one lazy branch's `children: null` with its loaded children. */\nfunction mergeChildren(\n nodes: TreeSelectFieldNode[],\n parentId: string | number,\n children: TreeSelectFieldNode[],\n): TreeSelectFieldNode[] {\n return nodes.map((node) => {\n if (node.id === parentId) {\n return { ...node, children };\n }\n if (node.children && node.children.length > 0) {\n return {\n ...node,\n children: mergeChildren(node.children, parentId, children),\n };\n }\n return node;\n });\n}\n\n/**\n * Loads and caches tree roots, search results, and lazy children.\n * Separate LRUs prevent search entries from evicting branch children.\n */\nexport function useTreeLoader(\n options: UseTreeLoaderOptions,\n): UseTreeLoaderReturn {\n const {\n loadOptions,\n cache: cacheConfig,\n initialLoad = \"auto\",\n debounceMs = 200,\n } = options;\n\n const cacheEnabled = cacheConfig?.enabled !== false;\n const cacheMaxSize = cacheConfig?.maxSize ?? 15;\n\n const [nodes, setNodes] = useState<TreeSelectFieldNode[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingChildren, setIsLoadingChildren] = useState<\n Set<string | number>\n >(new Set());\n\n // Durable childId → parentId map accumulated from every lazy-children load.\n // Outlives tree resets (search) and collapse, so a selected descendant under\n // a now-unloaded branch can still be attributed to its ancestors. Kept in\n // state (not just a ref) so check-state recomputes when ancestry grows.\n const [ancestry, setAncestry] = useState<\n Map<string | number, string | number>\n >(() => new Map());\n\n const recordAncestry = useCallback(\n (parentId: string | number, children: TreeSelectFieldNode[]) => {\n setAncestry((prev) => {\n let changed = false;\n const next = new Map(prev);\n for (const child of children) {\n if (next.get(child.id) !== parentId) {\n next.set(child.id, parentId);\n changed = true;\n }\n }\n return changed ? next : prev;\n });\n },\n [],\n );\n\n const hasOpenedRef = useRef(false);\n\n // Invalidation reloads the active query rather than the initial root.\n const currentSearchRef = useRef<string>(\"\");\n\n const searchCacheRef = useRef(\n createLruCache<string, TreeSelectFieldNode[]>(cacheMaxSize),\n );\n const childrenCacheRef = useRef(\n createLruCache<string | number, TreeSelectFieldNode[]>(cacheMaxSize),\n );\n\n // Loader callbacks stay stable while using the latest consumer function.\n const loadOptionsRef = useRef(loadOptions);\n loadOptionsRef.current = loadOptions;\n\n // Sequence tokens prevent older async results from replacing newer loads.\n const loadRootSeqRef = useRef(0);\n const loadChildrenSeqRef = useRef(new Map<string | number, number>());\n\n const loadRoot = useCallback(\n async (searchValue: string, bypassCache = false) => {\n currentSearchRef.current = searchValue;\n hasOpenedRef.current = true;\n const seq = ++loadRootSeqRef.current;\n const clearLoadingIfCurrent = () => {\n if (seq === loadRootSeqRef.current) {\n setIsLoading(false);\n }\n };\n\n const cached =\n !bypassCache && cacheEnabled\n ? searchCacheRef.current.get(searchValue)\n : undefined;\n if (cached !== undefined) {\n setNodes(cached);\n clearLoadingIfCurrent();\n return;\n }\n\n const resultOrPromise = loadOptionsRef.current(searchValue, undefined);\n\n const applyResult = (result: TreeSelectFieldNode[]) => {\n if (seq !== loadRootSeqRef.current) return;\n // Invalidation leaves cache empty for the next caller.\n if (!bypassCache && cacheEnabled) {\n searchCacheRef.current.set(searchValue, result);\n }\n setNodes(result);\n };\n\n if (!isThenable(resultOrPromise)) {\n applyResult(resultOrPromise);\n clearLoadingIfCurrent();\n return;\n }\n\n setIsLoading(true);\n try {\n const result = await resultOrPromise;\n applyResult(result);\n } finally {\n clearLoadingIfCurrent();\n }\n },\n [cacheEnabled],\n );\n\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const search = useCallback(\n (searchValue: string) => {\n if (debounceTimerRef.current !== null) {\n clearTimeout(debounceTimerRef.current);\n }\n if (debounceMs === 0) {\n void loadRoot(searchValue);\n } else {\n debounceTimerRef.current = setTimeout(() => {\n void loadRoot(searchValue);\n }, debounceMs);\n }\n },\n [loadRoot, debounceMs],\n );\n\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current !== null) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const loadChildren = useCallback(\n async (parentNode: TreeSelectFieldNode): Promise<TreeSelectFieldNode[]> => {\n const parentId = parentNode.id;\n const seq = (loadChildrenSeqRef.current.get(parentId) ?? 0) + 1;\n loadChildrenSeqRef.current.set(parentId, seq);\n\n const clearChildrenLoading = () => {\n setIsLoadingChildren((prev) => {\n if (!prev.has(parentId)) {\n return prev;\n }\n const next = new Set(prev);\n next.delete(parentId);\n return next;\n });\n };\n\n if (cacheEnabled) {\n const cached = childrenCacheRef.current.get(parentId);\n if (cached !== undefined) {\n // Search can replace the tree, so cached children must merge again.\n setNodes((prev) => mergeChildren(prev, parentId, cached));\n recordAncestry(parentId, cached);\n clearChildrenLoading();\n return cached;\n }\n }\n\n const resultOrPromise = loadOptionsRef.current(\"\", parentNode);\n\n const applyChildren = (result: TreeSelectFieldNode[]) => {\n if (loadChildrenSeqRef.current.get(parentId) !== seq) {\n return result;\n }\n if (cacheEnabled) {\n childrenCacheRef.current.set(parentId, result);\n }\n setNodes((prev) => mergeChildren(prev, parentId, result));\n recordAncestry(parentId, result);\n return result;\n };\n\n if (!isThenable(resultOrPromise)) {\n const applied = applyChildren(resultOrPromise);\n clearChildrenLoading();\n return applied;\n }\n\n setIsLoadingChildren((prev) => {\n const next = new Set(prev);\n next.add(parentId);\n return next;\n });\n\n try {\n const result = await resultOrPromise;\n return applyChildren(result);\n } finally {\n clearChildrenLoading();\n }\n },\n [cacheEnabled, recordAncestry],\n );\n\n const clearCache = useCallback(() => {\n searchCacheRef.current.clear();\n childrenCacheRef.current.clear();\n setAncestry((prev) => (prev.size === 0 ? prev : new Map()));\n }, []);\n\n const invalidate = useCallback(() => {\n searchCacheRef.current.clear();\n childrenCacheRef.current.clear();\n setAncestry((prev) => (prev.size === 0 ? prev : new Map()));\n void loadRoot(currentSearchRef.current, true);\n }, [loadRoot]);\n\n const onOpen = useCallback(() => {\n if (hasOpenedRef.current) return;\n hasOpenedRef.current = true;\n void loadRoot(\"\");\n }, [loadRoot]);\n\n useEffect(() => {\n if (initialLoad === \"immediate\" || initialLoad === \"auto\") {\n void loadRoot(\"\");\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n nodes,\n ancestry,\n isLoading,\n isLoadingChildren,\n loadChildren,\n search,\n clearCache,\n invalidate,\n onOpen,\n };\n}\n","import type {\n TreeSelectFieldNode,\n TreeSelectFieldValue,\n TreeSelectFieldValueConsistsOf,\n} from \"../types\";\nimport type { CheckState } from \"../../../../types\";\n\nexport type { CheckState };\n\n/** Indexes loaded nodes by id. */\nfunction buildNodeMap(\n nodes: TreeSelectFieldNode[],\n): Map<string | number, TreeSelectFieldNode> {\n const map = new Map<string | number, TreeSelectFieldNode>();\n const visit = (list: TreeSelectFieldNode[]) => {\n for (const node of list) {\n map.set(node.id, node);\n if (node.children) visit(node.children);\n }\n };\n visit(nodes);\n return map;\n}\n\n/**\n * Indexes loaded child-to-parent relationships for emitted selection paths.\n */\nfunction buildParentMap(\n nodes: TreeSelectFieldNode[],\n): Map<string | number, string | number> {\n const parents = new Map<string | number, string | number>();\n const visit = (list: TreeSelectFieldNode[], parentId?: string | number) => {\n for (const node of list) {\n if (parentId !== undefined) parents.set(node.id, parentId);\n if (node.children) visit(node.children, node.id);\n }\n };\n visit(nodes);\n return parents;\n}\n\n/**\n * Resolves root-to-parent ancestry, omitting `path` for root nodes.\n */\nfunction resolvePath(\n nodeId: string | number,\n parents: Map<string | number, string | number>,\n): (string | number)[] | undefined {\n const path: (string | number)[] = [];\n let current = parents.get(nodeId);\n const seen = new Set<string | number>();\n while (current !== undefined && !seen.has(current)) {\n seen.add(current);\n path.unshift(current);\n current = parents.get(current);\n }\n return path.length > 0 ? path : undefined;\n}\n\n/** Whether `children` is defined, including empty and unloaded branches. */\nfunction isBranch(node: TreeSelectFieldNode): boolean {\n return node.children !== undefined;\n}\n\n/**\n * Expands stored branch ids to non-disabled descendants before bottom-up\n * check-state aggregation.\n */\nfunction expandBranchIds(\n ids: Set<string | number>,\n nodes: TreeSelectFieldNode[],\n): Set<string | number> {\n const nodeMap = buildNodeMap(nodes);\n const expanded = new Set(ids);\n\n const addDescendants = (node: TreeSelectFieldNode): void => {\n if (node.disabled) return;\n expanded.add(node.id);\n if (node.children) {\n for (const child of node.children) {\n addDescendants(child);\n }\n }\n };\n\n for (const id of ids) {\n const node = nodeMap.get(id);\n if (node && isBranch(node)) {\n addDescendants(node);\n }\n }\n\n return expanded;\n}\n\n/**\n * Computes the visual check state for every node in the tree.\n *\n * Linked branches aggregate their non-disabled children. Lazy or filtered\n * branches cannot prove a fully checked state from incomplete children, so\n * they use their own selection and known orphan-ancestor paths. Accurate\n * partial filtering requires `childCount`.\n */\nexport function computeCheckStates(\n nodes: TreeSelectFieldNode[],\n value: TreeSelectFieldValue[],\n selectionMode: \"single\" | \"independent\" | \"linked\",\n valueConsistsOf: TreeSelectFieldValueConsistsOf,\n orphanAncestorIds: Set<string | number> = new Set(),\n): Map<string | number, CheckState> {\n const rawIds = new Set(value.map((v) => v.id));\n\n const checkedIdSet =\n selectionMode === \"linked\" &&\n (valueConsistsOf === \"BRANCH_PRIORITY\" || valueConsistsOf === \"ALL\")\n ? expandBranchIds(rawIds, nodes)\n : rawIds;\n const states = new Map<string | number, CheckState>();\n\n const computeNode = (node: TreeSelectFieldNode): CheckState => {\n if (\n selectionMode === \"independent\" ||\n selectionMode === \"single\" ||\n valueConsistsOf === \"BRANCH_ONLY\"\n ) {\n const state: CheckState = checkedIdSet.has(node.id)\n ? \"checked\"\n : \"unchecked\";\n states.set(node.id, state);\n if (node.children) {\n for (const child of node.children) {\n computeNode(child);\n }\n }\n return state;\n }\n\n const loadedChildren = Array.isArray(node.children) ? node.children : [];\n\n // Incomplete branches cannot aggregate an authoritative checked state.\n const isUnloaded = node.children === null;\n const isPartiallyLoaded =\n node.childCount !== undefined && loadedChildren.length < node.childCount;\n const underRepresented = isUnloaded || isPartiallyLoaded;\n\n if (loadedChildren.length === 0 && !underRepresented) {\n const state: CheckState = checkedIdSet.has(node.id)\n ? \"checked\"\n : \"unchecked\";\n states.set(node.id, state);\n return state;\n }\n\n const childStates = loadedChildren.map(computeNode);\n const hasAnyChecked = childStates.some(\n (s) => s === \"checked\" || s === \"indeterminate\",\n );\n\n if (underRepresented) {\n let state: CheckState;\n if (checkedIdSet.has(node.id)) {\n state = \"checked\";\n } else if (hasAnyChecked || orphanAncestorIds.has(node.id)) {\n state = \"indeterminate\";\n } else {\n state = \"unchecked\";\n }\n states.set(node.id, state);\n return state;\n }\n\n const enabledChildren = loadedChildren.filter((c) => !c.disabled);\n const enabledChildStates = enabledChildren.map(\n (c) => states.get(c.id) ?? \"unchecked\",\n );\n const disabledChildren = loadedChildren.filter((c) => c.disabled);\n const disabledChildStates = disabledChildren.map(\n (c) => states.get(c.id) ?? \"unchecked\",\n );\n\n const allEnabledChecked =\n enabledChildren.length === 0\n ? disabledChildStates.every((s) => s === \"checked\")\n : enabledChildStates.every((s) => s === \"checked\");\n\n let state: CheckState;\n if (\n allEnabledChecked &&\n (enabledChildren.length > 0 ||\n disabledChildStates.every((s) => s === \"checked\"))\n ) {\n state = \"checked\";\n } else if (hasAnyChecked) {\n state = \"indeterminate\";\n } else {\n state = \"unchecked\";\n }\n\n states.set(node.id, state);\n return state;\n };\n\n for (const node of nodes) {\n computeNode(node);\n }\n\n return states;\n}\n\n/**\n * Converts checked ids to controlled values according to the node-retention\n * strategy, including ancestry paths for restored lazy selections.\n */\nexport function computeValue(\n nodes: TreeSelectFieldNode[],\n checkedIds: Set<string | number>,\n valueConsistsOf: TreeSelectFieldValueConsistsOf,\n): TreeSelectFieldValue[] {\n const result: TreeSelectFieldValue[] = [];\n const included = new Set<string | number>();\n\n const allNonDisabledChildrenChecked = (\n node: TreeSelectFieldNode,\n ): boolean => {\n if (!node.children || node.children.length === 0) return false;\n const nonDisabled = node.children.filter((c) => !c.disabled);\n if (nonDisabled.length === 0) return false;\n return nonDisabled.every((c) => {\n if (!isBranch(c)) return checkedIds.has(c.id);\n return allNonDisabledChildrenChecked(c) || checkedIds.has(c.id);\n });\n };\n\n // Emitted paths preserve ancestor state before lazy branches reload.\n const toValue = (\n node: TreeSelectFieldNode,\n ancestors: (string | number)[],\n ): TreeSelectFieldValue => ({\n id: node.id,\n label: node.label,\n extra: node.extra,\n ...(node.disabled ? { disabled: true } : {}),\n ...(ancestors.length > 0 ? { path: [...ancestors] } : {}),\n });\n\n const visit = (\n node: TreeSelectFieldNode,\n ancestors: (string | number)[],\n ): void => {\n if (!checkedIds.has(node.id) && !isBranch(node)) {\n return;\n }\n const childAncestors = [...ancestors, node.id];\n\n switch (valueConsistsOf) {\n case \"ALL\": {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n if (node.children) {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n break;\n }\n\n case \"BRANCH_ONLY\": {\n if (isBranch(node)) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n if (node.children) {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n }\n break;\n }\n\n case \"LEAF_ONLY\": {\n if (!isBranch(node)) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n } else {\n if (node.children) {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n }\n break;\n }\n\n case \"LEAF_PRIORITY\": {\n if (!isBranch(node)) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n } else if (!node.children || node.children.length === 0) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n } else {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n break;\n }\n\n case \"BRANCH_PRIORITY\": {\n if (!isBranch(node)) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n } else {\n if (allNonDisabledChildrenChecked(node)) {\n if (!included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n if (node.children) {\n for (const child of node.children) {\n markDescendantsIncluded(child);\n }\n }\n }\n } else {\n if (node.children) {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n }\n }\n break;\n }\n }\n };\n\n /** Prevents descendants from duplicating a retained ancestor branch. */\n const markDescendantsIncluded = (node: TreeSelectFieldNode): void => {\n included.add(node.id);\n if (node.children) {\n for (const child of node.children) {\n markDescendantsIncluded(child);\n }\n }\n };\n\n for (const node of nodes) {\n visit(node, []);\n }\n\n return result;\n}\n\n/**\n * Toggles one node under the single, independent, or linked selection policy.\n * Linked toggles cascade through non-disabled descendants.\n */\nexport function toggleNodeSelection(\n nodes: TreeSelectFieldNode[],\n currentValue: TreeSelectFieldValue[],\n nodeId: string | number,\n selectionMode: \"single\" | \"independent\" | \"linked\",\n valueConsistsOf: TreeSelectFieldValueConsistsOf,\n): TreeSelectFieldValue[] {\n const nodeMap = buildNodeMap(nodes);\n const targetNode = nodeMap.get(nodeId);\n if (!targetNode) return currentValue;\n\n const currentCheckedIds = new Set(currentValue.map((v) => v.id));\n const isCurrentlySelected = currentCheckedIds.has(nodeId);\n\n const parentMap = buildParentMap(nodes);\n\n if (selectionMode === \"single\") {\n if (isCurrentlySelected) return [];\n const path = resolvePath(targetNode.id, parentMap);\n return [\n {\n id: targetNode.id,\n label: targetNode.label,\n extra: targetNode.extra,\n ...(targetNode.disabled ? { disabled: true } : {}),\n ...(path ? { path } : {}),\n },\n ];\n }\n\n if (selectionMode === \"independent\") {\n const next = new Set(currentCheckedIds);\n if (isCurrentlySelected) {\n next.delete(nodeId);\n } else {\n next.add(nodeId);\n }\n return buildValueFromIds(next, currentValue, nodeMap, parentMap);\n }\n\n // For linked mode we cannot rely solely on whether the nodeId is in the\n // value array because strategies like LEAF_PRIORITY never store branch ids.\n // Instead, derive the effective check state from computeCheckStates.\n const checkStates = computeCheckStates(\n nodes,\n currentValue,\n selectionMode,\n valueConsistsOf,\n );\n const currentCheckState = checkStates.get(nodeId) ?? \"unchecked\";\n const shouldDeselect =\n currentCheckState === \"checked\" || currentCheckState === \"indeterminate\";\n\n // Expand compact branch values before changing one linked subtree.\n const expandedIds =\n valueConsistsOf === \"BRANCH_PRIORITY\" || valueConsistsOf === \"ALL\"\n ? expandBranchIds(currentCheckedIds, nodes)\n : currentCheckedIds;\n const nextCheckedIds = new Set(expandedIds);\n\n if (shouldDeselect) {\n const idsToDeselect = getNonDisabledDescendantIds(targetNode);\n for (const id of idsToDeselect) {\n nextCheckedIds.delete(id);\n }\n } else {\n const idsToSelect = getNonDisabledDescendantIds(targetNode);\n for (const id of idsToSelect) {\n nextCheckedIds.add(id);\n }\n }\n\n if (valueConsistsOf !== \"BRANCH_ONLY\") {\n bubbleUpCheckedParents(nodes, nextCheckedIds);\n }\n\n const computed = computeValue(nodes, nextCheckedIds, valueConsistsOf);\n\n // `computeValue` only walks the currently-loaded tree, so during search (or\n // with lazy branches) it can't re-emit a previously-selected node that lives\n // outside the filtered/loaded subset. Carry those forward from currentValue\n // so toggling a visible node doesn't silently drop selections elsewhere.\n // Only entries whose nodes aren't present in `nodes` are eligible — anything\n // loaded was already handled (and possibly rolled up) by computeValue.\n const emittedIds = new Set(computed.map((v) => v.id));\n const carriedForward = currentValue.filter(\n (v) =>\n nextCheckedIds.has(v.id) && !emittedIds.has(v.id) && !nodeMap.has(v.id),\n );\n\n return [...computed, ...carriedForward];\n}\n\n/**\n * Adds fully checked parent branches from the bottom up.\n */\nfunction bubbleUpCheckedParents(\n nodes: TreeSelectFieldNode[],\n checkedIds: Set<string | number>,\n): void {\n const visit = (list: TreeSelectFieldNode[]): void => {\n for (const node of list) {\n if (node.children && node.children.length > 0) {\n visit(node.children);\n const nonDisabled = node.children.filter((c) => !c.disabled);\n if (\n nonDisabled.length > 0 &&\n nonDisabled.every((c) => checkedIds.has(c.id))\n ) {\n if (!node.disabled) checkedIds.add(node.id);\n } else {\n checkedIds.delete(node.id);\n }\n }\n }\n };\n visit(nodes);\n}\n\n/**\n * Collects a subtree until a disabled node blocks that branch.\n */\nfunction getNonDisabledDescendantIds(\n node: TreeSelectFieldNode,\n): (string | number)[] {\n if (node.disabled) return [];\n const result: (string | number)[] = [node.id];\n if (node.children) {\n for (const child of node.children) {\n result.push(...getNonDisabledDescendantIds(child));\n }\n }\n return result;\n}\n\n/**\n * Rebuilds independent values, preserving controlled entries before falling\n * back to loaded node data.\n */\nfunction buildValueFromIds(\n checkedIds: Set<string | number>,\n currentValue: TreeSelectFieldValue[],\n nodeMap: Map<string | number, TreeSelectFieldNode>,\n parentMap: Map<string | number, string | number>,\n): TreeSelectFieldValue[] {\n const existingMap = new Map(currentValue.map((v) => [v.id, v]));\n const result: TreeSelectFieldValue[] = [];\n for (const id of checkedIds) {\n const existing = existingMap.get(id);\n if (existing) {\n result.push(existing);\n } else {\n const node = nodeMap.get(id);\n if (node) {\n const path = resolvePath(node.id, parentMap);\n result.push({\n id: node.id,\n label: node.label,\n extra: node.extra,\n ...(node.disabled ? { disabled: true } : {}),\n ...(path ? { path } : {}),\n });\n }\n }\n }\n return result;\n}\n","import type { KeyboardEvent } from \"react\";\nimport type { VisibleNode } from \"./types\";\n\nexport type UseTreeKeyboardOptions = {\n visibleNodes: VisibleNode[];\n activeIndex: number;\n setActiveIndex: (index: number) => void;\n isExpanded: (id: string | number) => boolean;\n toggleExpand: (id: string | number) => void;\n toggleNode: (id: string | number) => void;\n};\n\n/**\n * Applies the WAI-ARIA tree keyboard pattern through `aria-activedescendant`.\n * Returns `false` when the input should retain an unhandled key, including\n * ArrowLeft or ArrowRight with no available tree action.\n */\nexport function handleTreeKeyDown(\n e: KeyboardEvent,\n options: UseTreeKeyboardOptions,\n): boolean {\n const {\n visibleNodes,\n activeIndex,\n setActiveIndex,\n isExpanded,\n toggleExpand,\n toggleNode,\n } = options;\n\n if (visibleNodes.length === 0) return false;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n if (activeIndex === -1) {\n setActiveIndex(0);\n } else {\n setActiveIndex(Math.min(activeIndex + 1, visibleNodes.length - 1));\n }\n return true;\n }\n\n case \"ArrowUp\": {\n e.preventDefault();\n if (activeIndex === -1) {\n setActiveIndex(visibleNodes.length - 1);\n } else {\n setActiveIndex(Math.max(activeIndex - 1, 0));\n }\n return true;\n }\n\n case \"ArrowRight\": {\n if (activeIndex === -1) return false;\n const rightNode = visibleNodes[activeIndex];\n if (!rightNode.isBranch) return false;\n if (!isExpanded(rightNode.node.id)) {\n e.preventDefault();\n toggleExpand(rightNode.node.id);\n return true;\n }\n const nextIndex = activeIndex + 1;\n if (nextIndex < visibleNodes.length) {\n e.preventDefault();\n setActiveIndex(nextIndex);\n return true;\n }\n return false;\n }\n\n case \"ArrowLeft\": {\n if (activeIndex === -1) return false;\n const leftNode = visibleNodes[activeIndex];\n if (leftNode.isBranch && isExpanded(leftNode.node.id)) {\n e.preventDefault();\n toggleExpand(leftNode.node.id);\n return true;\n }\n const currentDepth = leftNode.depth;\n if (currentDepth === 0) return false;\n for (let i = activeIndex - 1; i >= 0; i--) {\n if (visibleNodes[i].depth < currentDepth) {\n e.preventDefault();\n setActiveIndex(i);\n return true;\n }\n }\n return false;\n }\n\n case \"Home\": {\n e.preventDefault();\n setActiveIndex(0);\n return true;\n }\n\n case \"End\": {\n e.preventDefault();\n setActiveIndex(visibleNodes.length - 1);\n return true;\n }\n\n case \"Enter\": {\n if (activeIndex === -1) return false;\n e.preventDefault();\n const activeNode = visibleNodes[activeIndex];\n toggleNode(activeNode.node.id);\n return true;\n }\n\n default:\n return false;\n }\n}\n","import {\n useState,\n useMemo,\n useCallback,\n useRef,\n useEffect,\n type KeyboardEvent,\n} from \"react\";\nimport type {\n TreeSelectFieldNode,\n TreeSelectFieldValue,\n TreeSelectFieldValueConsistsOf,\n} from \"../types\";\nimport type { VisibleNode } from \"./types\";\nimport {\n computeCheckStates,\n toggleNodeSelection,\n type CheckState,\n} from \"./useTreeCascade\";\nimport { handleTreeKeyDown } from \"./useTreeKeyboard\";\n\nconst EMPTY_PLACEHOLDER_PREFIX = \"\\0__tsf_empty__\";\n\nexport type UseTreeOptions = {\n nodes: TreeSelectFieldNode[];\n value: TreeSelectFieldValue[];\n onSelectedOptionsChange: (nodes: TreeSelectFieldValue[]) => void;\n /** Selection and parent-child cascade policy. Defaults to `\"linked\"`. */\n selectionMode?: \"single\" | \"independent\" | \"linked\";\n valueConsistsOf?: TreeSelectFieldValueConsistsOf;\n /** Initial uncontrolled expansion depth. Defaults to `0`. */\n defaultExpandLevel?: number;\n expandedIds?: Set<string | number>;\n onExpandedIdsChange?: (ids: Set<string | number>) => void;\n searchValue?: string;\n /** Lazy-load child-to-parent relationships retained across tree replacements. */\n ancestry?: Map<string | number, string | number>;\n loadingChildrenIds?: Set<string | number>;\n};\n\n/** ARIA attributes generated for one visible tree item. */\nexport type TreeItemProps = {\n id: string;\n role: \"treeitem\";\n \"aria-level\": number;\n \"aria-setsize\": number;\n \"aria-posinset\": number;\n \"aria-expanded\"?: boolean;\n \"aria-selected\": boolean;\n};\n\n/** ARIA attributes generated for the tree container. */\nexport type TreeContainerProps = {\n role: \"tree\";\n \"aria-activedescendant\": string | undefined;\n \"aria-multiselectable\": boolean;\n};\n\nexport type UseTreeReturn = {\n nodes: TreeSelectFieldNode[];\n /** Depth-first rows after expansion and search filtering. */\n visibleNodes: VisibleNode[];\n getCheckState: (id: string | number) => CheckState;\n toggleNode: (id: string | number) => void;\n isExpanded: (id: string | number) => boolean;\n toggleExpand: (id: string | number) => void;\n expandAll: () => void;\n collapseAll: () => void;\n /** DOM id of the keyboard-active tree item. */\n activeDescendantId: string | undefined;\n setActiveNodeId: (id: string | number) => void;\n onKeyDown: (e: KeyboardEvent) => void;\n getTreeItemProps: (id: string | number) => TreeItemProps;\n treeProps: TreeContainerProps;\n};\n\n/** Collects loaded, empty, and unloaded branch ids. */\nfunction collectAllBranchIds(\n nodes: TreeSelectFieldNode[],\n): (string | number)[] {\n const result: (string | number)[] = [];\n const visit = (list: TreeSelectFieldNode[]) => {\n for (const node of list) {\n if (node.children !== undefined) {\n result.push(node.id);\n if (node.children) visit(node.children);\n }\n }\n };\n visit(nodes);\n return result;\n}\n\n/** Collects branch ids at depths below `defaultExpandLevel`. */\nfunction buildDefaultExpanded(\n nodes: TreeSelectFieldNode[],\n defaultExpandLevel: number,\n): Set<string | number> {\n const result = new Set<string | number>();\n const visit = (list: TreeSelectFieldNode[], depth: number) => {\n if (depth >= defaultExpandLevel) return;\n for (const node of list) {\n if (node.children !== undefined) {\n result.add(node.id);\n if (node.children) visit(node.children, depth + 1);\n }\n }\n };\n visit(nodes, 0);\n return result;\n}\n\nfunction isBranchNode(node: TreeSelectFieldNode): boolean {\n return node.children !== undefined;\n}\n\n/** Whether a node, its search text, or any descendant matches. */\nfunction nodeMatchesSearch(node: TreeSelectFieldNode, search: string): boolean {\n const labelMatch = node.label.toLowerCase().includes(search);\n const searchTextMatch = node.searchText\n ? node.searchText.toLowerCase().includes(search)\n : false;\n if (labelMatch || searchTextMatch) return true;\n if (node.children) {\n return node.children.some((child) => nodeMatchesSearch(child, search));\n }\n return false;\n}\n\n/**\n * Flattens expanded rows. Search applies a local substring filter to loaded\n * results and retains and expands ancestor paths to matches.\n */\nfunction flattenTree(\n nodes: TreeSelectFieldNode[],\n expandedIds: Set<string | number>,\n search: string | undefined,\n depth: number,\n): VisibleNode[] {\n const result: VisibleNode[] = [];\n\n for (const node of nodes) {\n const isBranch = isBranchNode(node);\n\n if (search !== undefined) {\n if (!nodeMatchesSearch(node, search)) continue;\n }\n\n const expanded = isBranch\n ? search !== undefined\n ? nodeMatchesSearch(node, search)\n : expandedIds.has(node.id)\n : false;\n\n result.push({\n node,\n depth,\n isExpanded: expanded,\n isBranch,\n isLoading: false,\n });\n\n if (isBranch && expanded) {\n if (node.children && node.children.length > 0) {\n result.push(\n ...flattenTree(node.children, expandedIds, search, depth + 1),\n );\n } else if (node.children && node.children.length === 0) {\n result.push({\n node: {\n id: `${EMPTY_PLACEHOLDER_PREFIX}${node.id}`,\n label: \"No items\",\n },\n depth: depth + 1,\n isExpanded: false,\n isBranch: false,\n isLoading: false,\n isEmptyPlaceholder: true,\n });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Manages expansion, selection, search visibility, keyboard navigation, and\n * ARIA state for a tree widget.\n */\nexport function useTree(options: UseTreeOptions): UseTreeReturn {\n const {\n nodes,\n value,\n onSelectedOptionsChange,\n selectionMode = \"linked\",\n valueConsistsOf = \"LEAF_PRIORITY\",\n defaultExpandLevel = 0,\n expandedIds: controlledExpandedIds,\n onExpandedIdsChange,\n searchValue,\n ancestry,\n loadingChildrenIds,\n } = options;\n\n const isControlled = controlledExpandedIds !== undefined;\n\n const [uncontrolledExpandedIds, setUncontrolledExpandedIds] = useState<\n Set<string | number>\n >(() => buildDefaultExpanded(nodes, defaultExpandLevel));\n\n // Async trees initialize empty, so apply the default when roots first arrive.\n const appliedDefaultExpandRef = useRef(nodes.length > 0);\n useEffect(() => {\n if (!appliedDefaultExpandRef.current && nodes.length > 0 && !isControlled) {\n appliedDefaultExpandRef.current = true;\n setUncontrolledExpandedIds(\n buildDefaultExpanded(nodes, defaultExpandLevel),\n );\n }\n }, [nodes, defaultExpandLevel, isControlled]);\n\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n\n const expandedIds = isControlled\n ? controlledExpandedIds\n : uncontrolledExpandedIds;\n\n const isExpanded = useCallback(\n (id: string | number): boolean => expandedIds.has(id),\n [expandedIds],\n );\n\n const setExpandedIds = useCallback(\n (next: Set<string | number>) => {\n if (isControlled) {\n onExpandedIdsChange?.(next);\n } else {\n setUncontrolledExpandedIds(next);\n }\n },\n [isControlled, onExpandedIdsChange],\n );\n\n const toggleExpand = useCallback(\n (id: string | number) => {\n const next = new Set(expandedIds);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n setExpandedIds(next);\n },\n [expandedIds, setExpandedIds],\n );\n\n const expandAll = useCallback(() => {\n const allBranchIds = collectAllBranchIds(nodes);\n setExpandedIds(new Set(allBranchIds));\n }, [nodes, setExpandedIds]);\n\n const collapseAll = useCallback(() => {\n setExpandedIds(new Set());\n }, [setExpandedIds]);\n\n const normalizedSearch = searchValue?.trim().toLowerCase() || undefined;\n\n const visibleNodes = useMemo<VisibleNode[]>(() => {\n const flat = flattenTree(nodes, expandedIds, normalizedSearch, 0);\n\n if (!loadingChildrenIds || loadingChildrenIds.size === 0) return flat;\n\n return flat.map((vn) =>\n loadingChildrenIds.has(vn.node.id) ? { ...vn, isLoading: true } : vn,\n );\n }, [nodes, expandedIds, normalizedSearch, loadingChildrenIds]);\n\n const visibleNodeMap = useMemo(() => {\n const map = new Map<string | number, VisibleNode>();\n for (const vn of visibleNodes) {\n map.set(vn.node.id, vn);\n }\n return map;\n }, [visibleNodes]);\n\n // ARIA positions reflect filtered siblings rather than the unfiltered tree.\n const visibleSiblingsMap = useMemo(() => {\n const map = new Map<\n string | number,\n { setSize: number; posInSet: number }\n >();\n\n type ParentKey = string | number | \"__root__\";\n const groups = new Map<ParentKey, (string | number)[]>();\n const parentStack: { id: string | number; depth: number }[] = [];\n\n for (const vn of visibleNodes) {\n if (vn.isEmptyPlaceholder) continue;\n\n while (\n parentStack.length > 0 &&\n parentStack[parentStack.length - 1].depth >= vn.depth\n ) {\n parentStack.pop();\n }\n\n const parentKey: ParentKey =\n parentStack.length > 0\n ? parentStack[parentStack.length - 1].id\n : \"__root__\";\n\n let group = groups.get(parentKey);\n if (!group) {\n group = [];\n groups.set(parentKey, group);\n }\n group.push(vn.node.id);\n\n if (vn.isBranch && vn.isExpanded) {\n parentStack.push({ id: vn.node.id, depth: vn.depth });\n }\n }\n\n for (const group of groups.values()) {\n for (let i = 0; i < group.length; i++) {\n map.set(group[i], { setSize: group.length, posInSet: i + 1 });\n }\n }\n\n return map;\n }, [visibleNodes]);\n\n // Attribute unloaded selections only to their known ancestor path so\n // unrelated lazy branches remain unchecked.\n const orphanAncestorIds = useMemo(() => {\n const loadedIds = new Set<string | number>();\n const collect = (list: TreeSelectFieldNode[]) => {\n for (const n of list) {\n loadedIds.add(n.id);\n if (n.children) collect(n.children);\n }\n };\n collect(nodes);\n\n const ancestors = new Set<string | number>();\n for (const v of value) {\n if (loadedIds.has(v.id)) continue;\n\n if (v.path && v.path.length > 0) {\n for (const ancestorId of v.path) ancestors.add(ancestorId);\n continue;\n }\n\n if (ancestry) {\n const seen = new Set<string | number>();\n let parent = ancestry.get(v.id);\n while (parent !== undefined && !seen.has(parent)) {\n seen.add(parent);\n ancestors.add(parent);\n parent = ancestry.get(parent);\n }\n }\n }\n return ancestors;\n }, [nodes, value, ancestry]);\n\n const checkStates = useMemo(\n () =>\n computeCheckStates(\n nodes,\n value,\n selectionMode,\n valueConsistsOf,\n orphanAncestorIds,\n ),\n [nodes, value, selectionMode, valueConsistsOf, orphanAncestorIds],\n );\n\n const getCheckState = useCallback(\n (id: string | number): CheckState => checkStates.get(id) ?? \"unchecked\",\n [checkStates],\n );\n\n const toggleNode = useCallback(\n (id: string | number) => {\n const newValue = toggleNodeSelection(\n nodes,\n value,\n id,\n selectionMode,\n valueConsistsOf,\n );\n onSelectedOptionsChange(newValue);\n },\n [nodes, value, selectionMode, valueConsistsOf, onSelectedOptionsChange],\n );\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent): boolean => {\n return handleTreeKeyDown(e, {\n visibleNodes,\n activeIndex,\n setActiveIndex,\n isExpanded,\n toggleExpand,\n toggleNode,\n });\n },\n [visibleNodes, activeIndex, isExpanded, toggleExpand, toggleNode],\n );\n\n const activeDescendantId =\n activeIndex >= 0 && activeIndex < visibleNodes.length\n ? `treeitem-${visibleNodes[activeIndex].node.id}`\n : undefined;\n\n const setActiveNodeId = useCallback(\n (id: string | number) => {\n const idx = visibleNodes.findIndex((vn) => vn.node.id === id);\n if (idx !== -1) setActiveIndex(idx);\n },\n [visibleNodes],\n );\n\n const getTreeItemProps = useCallback(\n (id: string | number): TreeItemProps => {\n const visibleNode = visibleNodeMap.get(id);\n const depth = visibleNode?.depth ?? 0;\n const isBranch = visibleNode?.isBranch ?? false;\n const expanded = isBranch\n ? (visibleNode?.isExpanded ?? isExpanded(id))\n : undefined;\n\n const siblingInfo = visibleSiblingsMap.get(id);\n const setSize = siblingInfo?.setSize ?? 1;\n const posInSet = siblingInfo?.posInSet ?? 1;\n\n const checkState = getCheckState(id);\n const isSelected = checkState === \"checked\";\n\n const props: TreeItemProps = {\n id: `treeitem-${id}`,\n role: \"treeitem\",\n \"aria-level\": depth + 1,\n \"aria-setsize\": setSize,\n \"aria-posinset\": posInSet,\n \"aria-selected\": isSelected,\n };\n\n if (isBranch) {\n props[\"aria-expanded\"] = expanded;\n }\n\n return props;\n },\n [visibleNodeMap, isExpanded, visibleSiblingsMap, getCheckState],\n );\n\n const treeProps = useMemo<TreeContainerProps>(\n () => ({\n role: \"tree\",\n \"aria-activedescendant\": activeDescendantId,\n \"aria-multiselectable\": selectionMode !== \"single\",\n }),\n [activeDescendantId, selectionMode],\n );\n\n return {\n nodes,\n visibleNodes,\n getCheckState,\n toggleNode,\n isExpanded,\n toggleExpand,\n expandAll,\n collapseAll,\n activeDescendantId,\n setActiveNodeId,\n onKeyDown,\n getTreeItemProps,\n treeProps,\n };\n}\n","import cx from \"classnames\";\nimport { Icon } from \"../../../../components/Icon\";\nimport { Spinner } from \"../../../../components/Spinner\";\nimport KeyboardArrowRight from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_right.svg\";\nimport KeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { TreeSelectFieldNode } from \"../types\";\nimport { PARTS } from \"../parts\";\nimport type { VisibleNode } from \"./types\";\nimport styles from \"./TreeRow.module.scss\";\nimport { Text } from \"../../../../components\";\nimport { OptionCheckbox } from \"../../../../internal/components/OptionCheckbox\";\nimport { OptionContentArea } from \"../../../../internal/components/OptionContentArea\";\nimport {\n OptionRow,\n OptionRowSideContent,\n} from \"../../../../internal/components/OptionRow\";\n\nconst INDENT_BASE = 16;\nconst INDENT_PER_DEPTH = 24;\nconst EXPAND_ICON_WIDTH = 32;\n\nexport type TreeRowProps = {\n visible: VisibleNode;\n /** Includes `\"loading\"` while a cascading selection awaits lazy descendants. */\n checkState: \"checked\" | \"unchecked\" | \"indeterminate\" | \"loading\";\n itemProps: Record<string, unknown>;\n /** Allows branch rows to select instead of only expand. Defaults to `true`. */\n branchesSelectable?: boolean;\n /** Allows leaf rows to select. Defaults to `true`. */\n leavesSelectable?: boolean;\n /** Allows branches with no children to select. Defaults to `true`. */\n emptyBranchesSelectable?: boolean;\n /** Preserves navigation and expansion while preventing selection. */\n readOnly?: boolean;\n isActive?: boolean;\n onToggleNode: (id: string | number) => void;\n onToggleExpand: (id: string | number) => void;\n onHover?: (id: string | number) => void;\n onLoadChildren?: (node: TreeSelectFieldNode) => void;\n depth: number;\n};\n\n/** Renders one indented tree row with selection and branch expansion controls. */\nexport function TreeRow({\n visible,\n checkState,\n itemProps,\n branchesSelectable = true,\n leavesSelectable = true,\n emptyBranchesSelectable = true,\n readOnly = false,\n isActive,\n onToggleNode,\n onToggleExpand,\n onHover,\n onLoadChildren,\n depth,\n}: TreeRowProps) {\n const { node, isExpanded, isBranch, isLoading, isEmptyPlaceholder } = visible;\n\n if (isEmptyPlaceholder) {\n return (\n <OptionRow\n disabled\n className={styles[\"tree-row\"]}\n style={{\n paddingInlineStart:\n INDENT_BASE + depth * INDENT_PER_DEPTH + EXPAND_ICON_WIDTH,\n }}\n >\n <span className={styles[\"label-container\"]}>\n <Text>{node.label}</Text>\n </span>\n </OptionRow>\n );\n }\n\n const isDisabled = node.disabled === true;\n const isEmptyBranch =\n isBranch && Array.isArray(node.children) && node.children.length === 0;\n const isSelectable = (() => {\n if (!isBranch) return leavesSelectable;\n if (!branchesSelectable) return false;\n if (isEmptyBranch && !emptyBranchesSelectable) return false;\n return true;\n })();\n\n const showExpandIcon = isBranch;\n const paddingInlineStart =\n INDENT_BASE +\n depth * INDENT_PER_DEPTH +\n (showExpandIcon ? 0 : EXPAND_ICON_WIDTH);\n const rowDisabled = readOnly || isDisabled || (!isSelectable && !isBranch);\n\n const expandNode = () => {\n onToggleExpand(node.id);\n if (node.children === null) onLoadChildren?.(node);\n };\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (isDisabled) return;\n expandNode();\n };\n\n const handleRowClick = () => {\n if (isDisabled) return;\n if (isBranch) {\n if (isSelectable) {\n onToggleNode(node.id);\n } else {\n expandNode();\n }\n } else if (isSelectable) {\n onToggleNode(node.id);\n }\n };\n\n let expandIconElement: React.ReactNode = null;\n if (showExpandIcon) {\n if (isLoading && checkState !== \"loading\") {\n expandIconElement = <Spinner size=\"small\" aria-hidden=\"true\" />;\n } else if (isExpanded) {\n expandIconElement = (\n <Icon svg={KeyboardArrowDown} size=\"small\" inherit aria-hidden=\"true\" />\n );\n } else {\n expandIconElement = (\n <Icon\n svg={KeyboardArrowRight}\n size=\"small\"\n inherit\n aria-hidden=\"true\"\n />\n );\n }\n }\n\n // Keep DOM focus on the combobox that owns aria-activedescendant.\n return (\n <OptionRow\n {...itemProps}\n {...{ [ANV_PART_ATTR]: PARTS.option }}\n data-id={node.id}\n disabled={rowDisabled}\n style={{ paddingInlineStart }}\n className={cx(styles[\"tree-row\"], {\n [styles[\"active\"]]: isActive,\n })}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => onHover?.(node.id)}\n onClick={handleRowClick}\n aria-disabled={rowDisabled || undefined}\n >\n {showExpandIcon && (\n <span\n className={styles[\"expand-icon\"]}\n {...{ [ANV_PART_ATTR]: PARTS.expandToggle }}\n onClick={handleExpandClick}\n aria-hidden=\"true\"\n >\n {expandIconElement}\n </span>\n )}\n {isSelectable && (\n <OptionRowSideContent>\n <OptionCheckbox checkState={checkState} />\n </OptionRowSideContent>\n )}\n <OptionContentArea label={node.label} content={node.content} />\n </OptionRow>\n );\n}\n","import { forwardRef } from \"react\";\nimport cx from \"classnames\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { TreeSelectFieldNode } from \"../types\";\nimport { PARTS } from \"../parts\";\nimport type { VisibleNode } from \"./types\";\nimport { TreeRow } from \"./TreeRow\";\nimport styles from \"./TreePanel.module.scss\";\n\nexport type TreePanelProps = {\n visibleNodes: VisibleNode[];\n getCheckState: (\n id: string | number,\n ) => \"checked\" | \"unchecked\" | \"indeterminate\" | \"loading\";\n toggleNode: (id: string | number) => void;\n toggleExpand: (id: string | number) => void;\n getTreeItemProps: (id: string | number) => Record<string, unknown>;\n treeProps: Record<string, unknown>;\n activeDescendantId: string | undefined;\n branchesSelectable?: boolean;\n leavesSelectable?: boolean;\n emptyBranchesSelectable?: boolean;\n readOnly?: boolean;\n onHover?: (id: string | number) => void;\n onLoadChildren?: (node: TreeSelectFieldNode) => void;\n};\n\n/** Renders every visible node in the tree panel. */\nexport const TreePanel = forwardRef<HTMLDivElement, TreePanelProps>(\n function TreePanelInner(\n {\n visibleNodes,\n getCheckState,\n toggleNode,\n toggleExpand,\n getTreeItemProps,\n treeProps,\n activeDescendantId,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly,\n onHover,\n onLoadChildren,\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n {...treeProps}\n {...{ [ANV_PART_ATTR]: PARTS.menu }}\n className={cx(styles.panel, treeProps.className)}\n >\n {visibleNodes.map((visible) => (\n <TreeRow\n key={visible.node.id}\n visible={visible}\n checkState={getCheckState(visible.node.id)}\n itemProps={getTreeItemProps(visible.node.id)}\n isActive={activeDescendantId === `treeitem-${visible.node.id}`}\n branchesSelectable={branchesSelectable}\n leavesSelectable={leavesSelectable}\n emptyBranchesSelectable={emptyBranchesSelectable}\n readOnly={readOnly}\n onToggleNode={toggleNode}\n onToggleExpand={toggleExpand}\n onHover={onHover}\n onLoadChildren={onLoadChildren}\n depth={visible.depth}\n />\n ))}\n </div>\n );\n },\n);\n\nTreePanel.displayName = \"TreePanel\";\n","import { forwardRef, useCallback, useRef } from \"react\";\nimport cx from \"classnames\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { TreeSelectFieldNode } from \"../types\";\nimport type { VisibleNode } from \"./types\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport { PARTS } from \"../parts\";\nimport { TreeRow } from \"./TreeRow\";\nimport styles from \"./TreePanel.module.scss\";\n\nconst EST_PADDING_BLOCK = 16;\nconst EST_LINE_HEIGHT = 18;\nconst EST_CHIP_ROW_HEIGHT = 28;\nconst EST_SIDE_CONTENT_HEIGHT = 40;\nconst EST_BASE_ROW_HEIGHT = EST_PADDING_BLOCK + EST_LINE_HEIGHT;\n\nfunction estimateTreeRowHeight(visible: VisibleNode): number {\n const content = visible.node.content;\n if (!content) return EST_BASE_ROW_HEIGHT;\n\n let contentHeight = EST_LINE_HEIGHT;\n if (content.description) contentHeight += EST_LINE_HEIGHT;\n if (content.chips?.length) contentHeight += EST_CHIP_ROW_HEIGHT;\n if (content.avatar || content.icon)\n contentHeight = Math.max(contentHeight, EST_SIDE_CONTENT_HEIGHT);\n\n return EST_PADDING_BLOCK + contentHeight;\n}\n\n/** Tree-panel props consumed by the windowed renderer. */\nexport type VirtualizedTreePanelProps = {\n visibleNodes: VisibleNode[];\n getCheckState: (\n id: string | number,\n ) => \"checked\" | \"unchecked\" | \"indeterminate\" | \"loading\";\n toggleNode: (id: string | number) => void;\n toggleExpand: (id: string | number) => void;\n getTreeItemProps: (id: string | number) => Record<string, unknown>;\n treeProps: Record<string, unknown>;\n activeDescendantId: string | undefined;\n branchesSelectable?: boolean;\n leavesSelectable?: boolean;\n emptyBranchesSelectable?: boolean;\n readOnly?: boolean;\n onHover?: (id: string | number) => void;\n onLoadChildren?: (node: TreeSelectFieldNode) => void;\n};\n\n/** Windowed tree panel that mounts only the rows near the viewport. */\nexport const VirtualizedTreePanel = forwardRef<\n HTMLDivElement,\n VirtualizedTreePanelProps\n>(function VirtualizedTreePanelInner(props, ref) {\n const {\n visibleNodes,\n getCheckState,\n toggleNode,\n toggleExpand,\n getTreeItemProps,\n treeProps,\n activeDescendantId,\n branchesSelectable = true,\n leavesSelectable = true,\n emptyBranchesSelectable = true,\n readOnly = false,\n onHover,\n onLoadChildren,\n } = props;\n\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const estimateSize = useCallback(\n (index: number) => estimateTreeRowHeight(visibleNodes[index]),\n [visibleNodes],\n );\n\n const virtualizer = useVirtualizer({\n count: visibleNodes.length,\n getScrollElement: () => scrollRef.current,\n estimateSize,\n overscan: 5,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <div\n ref={(node) => {\n scrollRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n {...treeProps}\n {...{ [ANV_PART_ATTR]: PARTS.menu }}\n className={cx(styles.panel, treeProps.className)}\n >\n <div\n style={{\n height: virtualizer.getTotalSize(),\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {virtualItems.map((virtualItem) => {\n const visible = visibleNodes[virtualItem.index];\n return (\n <div\n key={visible.node.id}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n <TreeRow\n visible={visible}\n checkState={getCheckState(visible.node.id)}\n itemProps={getTreeItemProps(visible.node.id)}\n isActive={activeDescendantId === `treeitem-${visible.node.id}`}\n branchesSelectable={branchesSelectable}\n leavesSelectable={leavesSelectable}\n emptyBranchesSelectable={emptyBranchesSelectable}\n readOnly={readOnly}\n onToggleNode={toggleNode}\n onToggleExpand={toggleExpand}\n onHover={onHover}\n onLoadChildren={onLoadChildren}\n depth={visible.depth}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n});\n","import { forwardRef } from \"react\";\nimport { Spinner } from \"../../../../components/Spinner\";\nimport { Text } from \"../../../../components/Text\";\nimport { TreePanel } from \"./TreePanel\";\nimport { VirtualizedTreePanel } from \"./VirtualizedTreePanel\";\nimport type { TreePanelProps } from \"./TreePanel\";\n\nexport type TreeContentProps = {\n /** Replaces the panel with its loading state. */\n loading: boolean;\n /** Replaces the panel with its no-match state. */\n hasNoVisibleNodes: boolean;\n /** Uses windowed rendering for the panel. */\n virtualize?: boolean;\n panelProps: TreePanelProps;\n};\n\n/**\n * Shared loading, empty, and tree-panel body for tree fields and menus.\n * Forwards its ref only when a panel is mounted.\n */\nexport const TreeContent = forwardRef<HTMLDivElement, TreeContentProps>(\n function TreeContent(\n { loading, hasNoVisibleNodes, virtualize, panelProps },\n ref,\n ) {\n if (loading) {\n return (\n <div\n style={{\n padding: \"var(--a2-spacing-200)\",\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n <Spinner size=\"medium\" />\n </div>\n );\n }\n if (hasNoVisibleNodes) {\n return (\n <div\n role=\"presentation\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"1rem\",\n textAlign: \"center\",\n }}\n >\n <Text subdued size=\"small\">\n No match found\n </Text>\n </div>\n );\n }\n return virtualize ? (\n <VirtualizedTreePanel ref={ref} {...panelProps} />\n ) : (\n <TreePanel ref={ref} {...panelProps} />\n );\n },\n);\n\nTreeContent.displayName = \"TreeContent\";\n","import type { TreeSelectFieldNode } from \"../types\";\n\n/** Finds the first node whose id strictly equals `id`. */\nexport function findNode(\n nodes: TreeSelectFieldNode[],\n id: string | number,\n): TreeSelectFieldNode | undefined {\n for (const node of nodes) {\n if (node.id === id) return node;\n if (node.children) {\n const found = findNode(node.children, id);\n if (found) return found;\n }\n }\n return undefined;\n}\n\n/** Whether this node or any descendant has `children: null`. */\nexport function hasUnloadedDescendants(node: TreeSelectFieldNode): boolean {\n if (node.children === null) return true;\n if (!node.children) return false;\n return node.children.some(hasUnloadedDescendants);\n}\n\n/**\n * Collects descendant branches with `children: null`, excluding `node` itself.\n */\nexport function findUnloadedDescendants(\n node: TreeSelectFieldNode,\n): TreeSelectFieldNode[] {\n const result: TreeSelectFieldNode[] = [];\n if (!node.children) return result;\n for (const child of node.children) {\n if (child.children === null) {\n result.push(child);\n } else if (child.children) {\n result.push(...findUnloadedDescendants(child));\n }\n }\n return result;\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { UseTreeReturn } from \"./useTree\";\nimport type { UseTreeLoaderReturn } from \"./useTreeLoader\";\nimport {\n findNode,\n findUnloadedDescendants,\n hasUnloadedDescendants,\n} from \"./treeUtils\";\n\nexport type UseTreeLazyCascadeOptions = {\n tree: UseTreeReturn;\n loader: UseTreeLoaderReturn;\n /** Calls `onCloseAfterSingleSelect` after a successful toggle when `true`. */\n isSingleSelect: boolean;\n branchesSelectable: boolean;\n leavesSelectable: boolean;\n emptyBranchesSelectable: boolean;\n /** Makes every selection attempt a no-op. */\n readOnly?: boolean;\n /** Runs after a successful single selection, including after lazy loading. */\n onCloseAfterSingleSelect?: () => void;\n};\n\nexport type UseTreeLazyCascadeReturn = {\n /** Applies selectability and loads incomplete subtrees before toggling. */\n handleToggleNode: (nodeId: string | number) => void;\n /** Original node awaiting lazy descendants, or `null`. */\n pendingToggleNodeId: string | number | null;\n /** Abandons an in-flight toggle without cancelling its network requests. */\n reset: () => void;\n};\n\n/**\n * Defers a cascading toggle until every lazy descendant is loaded.\n * Non-selectable branches expand; non-selectable leaves do nothing.\n */\nexport function useTreeLazyCascade(\n options: UseTreeLazyCascadeOptions,\n): UseTreeLazyCascadeReturn {\n const {\n tree,\n loader,\n isSingleSelect,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly = false,\n onCloseAfterSingleSelect,\n } = options;\n\n const pendingToggleRef = useRef<string | number | null>(null);\n const loadedForToggleRef = useRef(new Set<string | number>());\n const [pendingToggleNodeId, setPendingToggleNodeId] = useState<\n string | number | null\n >(null);\n\n useEffect(() => {\n if (pendingToggleRef.current === null) return;\n const nodeId = pendingToggleRef.current;\n const node = findNode(tree.nodes, nodeId);\n if (!node) return;\n\n if (node.children === null) return;\n\n if (loader.isLoadingChildren.size > 0) return;\n\n const unloaded = findUnloadedDescendants(node).filter(\n (n) => !loadedForToggleRef.current.has(n.id),\n );\n if (unloaded.length > 0) {\n for (const n of unloaded) {\n loadedForToggleRef.current.add(n.id);\n void loader.loadChildren(n);\n }\n return;\n }\n\n pendingToggleRef.current = null;\n loadedForToggleRef.current = new Set();\n setPendingToggleNodeId(null);\n tree.toggleNode(nodeId);\n if (isSingleSelect) {\n onCloseAfterSingleSelect?.();\n }\n }, [tree, isSingleSelect, onCloseAfterSingleSelect, loader]);\n\n const handleToggleNode = useCallback(\n (nodeId: string | number) => {\n if (readOnly) return;\n\n const node = findNode(tree.nodes, nodeId);\n if (!node) return;\n\n const isBranch = node.children !== undefined;\n const isEmptyBranch =\n isBranch && Array.isArray(node.children) && node.children.length === 0;\n const isNodeSelectable = isBranch\n ? branchesSelectable && (isEmptyBranch ? emptyBranchesSelectable : true)\n : leavesSelectable;\n\n if (!isNodeSelectable) {\n if (isBranch) {\n tree.toggleExpand(nodeId);\n if (node.children === null) {\n void loader.loadChildren(node);\n }\n }\n return;\n }\n\n if (hasUnloadedDescendants(node)) {\n pendingToggleRef.current = nodeId;\n loadedForToggleRef.current = new Set();\n setPendingToggleNodeId(nodeId);\n if (node.children === null) {\n loadedForToggleRef.current.add(node.id);\n void loader.loadChildren(node);\n } else {\n const unloaded = findUnloadedDescendants(node);\n for (const n of unloaded) {\n loadedForToggleRef.current.add(n.id);\n void loader.loadChildren(n);\n }\n }\n return;\n }\n\n tree.toggleNode(nodeId);\n if (isSingleSelect) {\n onCloseAfterSingleSelect?.();\n }\n },\n [\n tree,\n isSingleSelect,\n onCloseAfterSingleSelect,\n loader,\n readOnly,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n ],\n );\n\n const reset = useCallback(() => {\n pendingToggleRef.current = null;\n loadedForToggleRef.current = new Set();\n setPendingToggleNodeId(null);\n }, []);\n\n return { handleToggleNode, pendingToggleNodeId, reset };\n}\n","import { matchSorter, type MatchSorterOptions } from \"match-sorter\";\nimport type { TreeSelectFieldNode } from \"../types\";\n\n/**\n * Maps the complete static tree and search text to the tree passed to the field.\n */\nexport type TreeSyncFilterFn = (\n options: TreeSelectFieldNode[],\n searchValue: string,\n) => TreeSelectFieldNode[];\n\n/**\n * Adds missing immediate-child counts before filtering so a partial result\n * cannot make a branch appear fully selected.\n */\nexport function applyChildCounts(\n nodes: TreeSelectFieldNode[],\n): TreeSelectFieldNode[] {\n return nodes.map((node) => {\n if (!Array.isArray(node.children)) return node;\n\n const children = applyChildCounts(node.children);\n\n return {\n ...node,\n children,\n childCount: node.childCount ?? children.length,\n };\n });\n}\n\n/** Flattens a tree for match-sorter. */\nfunction flattenNodes(nodes: TreeSelectFieldNode[]): TreeSelectFieldNode[] {\n return nodes.flatMap((node) => [\n node,\n ...(node.children ? flattenNodes(node.children) : []),\n ]);\n}\n\n/** Keeps direct matches and their ancestor paths. */\nfunction pruneTree(\n nodes: TreeSelectFieldNode[],\n matchedIds: Set<string | number>,\n): TreeSelectFieldNode[] {\n const result: TreeSelectFieldNode[] = [];\n for (const node of nodes) {\n if (matchedIds.has(node.id)) {\n result.push(node);\n } else if (node.children && node.children.length > 0) {\n const filteredChildren = pruneTree(node.children, matchedIds);\n if (filteredChildren.length > 0) {\n result.push({ ...node, children: filteredChildren });\n }\n }\n }\n return result;\n}\n\n/** Matches `label` and `searchText` while preserving ancestors of matches. */\nexport function defaultTreeSyncFilter(\n nodes: TreeSelectFieldNode[],\n searchValue: string,\n): TreeSelectFieldNode[] {\n if (!searchValue) return nodes;\n\n const flat = flattenNodes(nodes);\n const matched = matchSorter(flat, searchValue, {\n keys: [\"label\", \"searchText\"],\n });\n const matchedIds = new Set(matched.map((n) => n.id));\n\n return pruneTree(nodes, matchedIds);\n}\n\n/**\n * Normalizes a custom filter or match-sorter options to {@link TreeSyncFilterFn}.\n * Option-object filters preserve ancestors; custom functions own their result.\n */\nexport function toTreeSyncFilterFn(\n filter: TreeSyncFilterFn | MatchSorterOptions<TreeSelectFieldNode>,\n): TreeSyncFilterFn {\n if (typeof filter === \"function\") return filter;\n\n return (nodes: TreeSelectFieldNode[], searchValue: string) => {\n if (!searchValue) return nodes;\n const flat = flattenNodes(nodes);\n const matched = matchSorter(flat, searchValue, filter);\n const matchedIds = new Set(matched.map((n) => n.id));\n return pruneTree(nodes, matchedIds);\n };\n}\n"],"names":["state","styles","KeyboardArrowDown","KeyboardArrowRight","TreeContent"],"mappings":"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"}
1
+ {"version":3,"file":"treeSync-BELsX1gY.js","sources":["../src/beta/components/TreeSelectField/parts.ts","../src/beta/components/TreeSelectField/internal/useTreeLoader.ts","../src/beta/components/TreeSelectField/internal/useTreeCascade.ts","../src/beta/components/TreeSelectField/internal/useTreeKeyboard.ts","../src/beta/components/TreeSelectField/internal/useTree.ts","../src/beta/components/TreeSelectField/internal/TreeRow.tsx","../src/beta/components/TreeSelectField/internal/TreePanel.tsx","../src/beta/components/TreeSelectField/internal/VirtualizedTreePanel.tsx","../src/beta/components/TreeSelectField/internal/TreeContent.tsx","../src/beta/components/TreeSelectField/internal/treeUtils.ts","../src/beta/components/TreeSelectField/internal/useTreeLazyCascade.ts","../src/beta/components/TreeSelectField/internal/treeSync.ts"],"sourcesContent":["import { COMMON_PART } from \"../../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for TreeSelectField's interactive sub-elements.\n *\n * Tree panels and rows own the tree-specific parts; shared option shells own\n * popover and dialog parts. Portaled parts cannot be scoped through the field\n * root, and repeated options also expose their node id through `data-id`.\n */\nexport const PARTS = {\n input: COMMON_PART.input,\n chip: COMMON_PART.chip,\n overflowChip: COMMON_PART.overflowChip,\n toggleButton: COMMON_PART.toggleButton,\n menu: COMMON_PART.menu,\n option: COMMON_PART.option,\n /** Branch expand/collapse control within a tree row. */\n expandToggle: \"expand-toggle\",\n} as const;\n","import { useState, useEffect, useRef, useCallback } from \"react\";\nimport type { TreeSelectFieldNode } from \"../types\";\nimport { isThenable } from \"../../../../internal/functions/isThenable\";\n\nexport type UseTreeLoaderOptions = {\n /** Loads roots/search results, or children when `parentNode` is supplied. */\n loadOptions: (\n searchValue: string,\n parentNode?: TreeSelectFieldNode,\n ) => TreeSelectFieldNode[] | Promise<TreeSelectFieldNode[]>;\n /** Configures both LRUs; each is enabled with at most 15 entries by default. */\n cache?: { enabled?: boolean; maxSize?: number };\n /** `\"auto\"` and `\"immediate\"` load on mount; `\"open\"` waits for first open. */\n initialLoad?: \"auto\" | \"immediate\" | \"open\";\n /** Search delay in milliseconds. Defaults to `200`. */\n debounceMs?: number;\n};\n\nexport type UseTreeLoaderReturn = {\n nodes: TreeSelectFieldNode[];\n /** Lazy-load ancestry retained across root/search replacements. */\n ancestry: Map<string | number, string | number>;\n isLoading: boolean;\n isLoadingChildren: Set<string | number>;\n loadChildren: (\n parentNode: TreeSelectFieldNode,\n ) => Promise<TreeSelectFieldNode[]>;\n /** Schedules a root/search load; `debounceMs={0}` runs immediately. */\n search: (searchValue: string) => void;\n clearCache: () => void;\n /** Clears both caches and reloads the current search without repopulating cache. */\n invalidate: () => void;\n /** Starts the deferred initial load, at most once. */\n onOpen: () => void;\n};\n\n/** Creates a Map-backed LRU capped at `maxSize`. */\nfunction createLruCache<K, V>(maxSize: number) {\n const map = new Map<K, V>();\n\n return {\n get(key: K): V | undefined {\n if (!map.has(key)) return undefined;\n // Reads refresh recency.\n const value = map.get(key)!;\n map.delete(key);\n map.set(key, value);\n return value;\n },\n set(key: K, value: V): void {\n if (map.has(key)) {\n map.delete(key);\n } else if (map.size >= maxSize) {\n const firstKey = map.keys().next().value;\n if (firstKey !== undefined) map.delete(firstKey);\n }\n map.set(key, value);\n },\n has(key: K): boolean {\n return map.has(key);\n },\n delete(key: K): void {\n map.delete(key);\n },\n clear(): void {\n map.clear();\n },\n };\n}\n\n/** Replaces one lazy branch's `children: null` with its loaded children. */\nfunction mergeChildren(\n nodes: TreeSelectFieldNode[],\n parentId: string | number,\n children: TreeSelectFieldNode[],\n): TreeSelectFieldNode[] {\n return nodes.map((node) => {\n if (node.id === parentId) {\n return { ...node, children };\n }\n if (node.children && node.children.length > 0) {\n return {\n ...node,\n children: mergeChildren(node.children, parentId, children),\n };\n }\n return node;\n });\n}\n\n/**\n * Loads and caches tree roots, search results, and lazy children.\n * Separate LRUs prevent search entries from evicting branch children.\n */\nexport function useTreeLoader(\n options: UseTreeLoaderOptions,\n): UseTreeLoaderReturn {\n const {\n loadOptions,\n cache: cacheConfig,\n initialLoad = \"auto\",\n debounceMs = 200,\n } = options;\n\n const cacheEnabled = cacheConfig?.enabled !== false;\n const cacheMaxSize = cacheConfig?.maxSize ?? 15;\n\n const [nodes, setNodes] = useState<TreeSelectFieldNode[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingChildren, setIsLoadingChildren] = useState<\n Set<string | number>\n >(new Set());\n\n // Durable childId → parentId map accumulated from every lazy-children load.\n // Outlives tree resets (search) and collapse, so a selected descendant under\n // a now-unloaded branch can still be attributed to its ancestors. Kept in\n // state (not just a ref) so check-state recomputes when ancestry grows.\n const [ancestry, setAncestry] = useState<\n Map<string | number, string | number>\n >(() => new Map());\n\n const recordAncestry = useCallback(\n (parentId: string | number, children: TreeSelectFieldNode[]) => {\n setAncestry((prev) => {\n let changed = false;\n const next = new Map(prev);\n for (const child of children) {\n if (next.get(child.id) !== parentId) {\n next.set(child.id, parentId);\n changed = true;\n }\n }\n return changed ? next : prev;\n });\n },\n [],\n );\n\n const hasOpenedRef = useRef(false);\n\n // Invalidation reloads the active query rather than the initial root.\n const currentSearchRef = useRef<string>(\"\");\n\n const searchCacheRef = useRef(\n createLruCache<string, TreeSelectFieldNode[]>(cacheMaxSize),\n );\n const childrenCacheRef = useRef(\n createLruCache<string | number, TreeSelectFieldNode[]>(cacheMaxSize),\n );\n\n // Loader callbacks stay stable while using the latest consumer function.\n const loadOptionsRef = useRef(loadOptions);\n loadOptionsRef.current = loadOptions;\n\n // Sequence tokens prevent older async results from replacing newer loads.\n const loadRootSeqRef = useRef(0);\n const loadChildrenSeqRef = useRef(new Map<string | number, number>());\n\n const loadRoot = useCallback(\n async (searchValue: string, bypassCache = false) => {\n currentSearchRef.current = searchValue;\n hasOpenedRef.current = true;\n const seq = ++loadRootSeqRef.current;\n const clearLoadingIfCurrent = () => {\n if (seq === loadRootSeqRef.current) {\n setIsLoading(false);\n }\n };\n\n const cached =\n !bypassCache && cacheEnabled\n ? searchCacheRef.current.get(searchValue)\n : undefined;\n if (cached !== undefined) {\n setNodes(cached);\n clearLoadingIfCurrent();\n return;\n }\n\n const resultOrPromise = loadOptionsRef.current(searchValue, undefined);\n\n const applyResult = (result: TreeSelectFieldNode[]) => {\n if (seq !== loadRootSeqRef.current) return;\n // Invalidation leaves cache empty for the next caller.\n if (!bypassCache && cacheEnabled) {\n searchCacheRef.current.set(searchValue, result);\n }\n setNodes(result);\n };\n\n if (!isThenable(resultOrPromise)) {\n applyResult(resultOrPromise);\n clearLoadingIfCurrent();\n return;\n }\n\n setIsLoading(true);\n try {\n const result = await resultOrPromise;\n applyResult(result);\n } finally {\n clearLoadingIfCurrent();\n }\n },\n [cacheEnabled],\n );\n\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const search = useCallback(\n (searchValue: string) => {\n if (debounceTimerRef.current !== null) {\n clearTimeout(debounceTimerRef.current);\n }\n if (debounceMs === 0) {\n void loadRoot(searchValue);\n } else {\n debounceTimerRef.current = setTimeout(() => {\n void loadRoot(searchValue);\n }, debounceMs);\n }\n },\n [loadRoot, debounceMs],\n );\n\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current !== null) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const loadChildren = useCallback(\n async (parentNode: TreeSelectFieldNode): Promise<TreeSelectFieldNode[]> => {\n const parentId = parentNode.id;\n const seq = (loadChildrenSeqRef.current.get(parentId) ?? 0) + 1;\n loadChildrenSeqRef.current.set(parentId, seq);\n\n const clearChildrenLoading = () => {\n setIsLoadingChildren((prev) => {\n if (!prev.has(parentId)) {\n return prev;\n }\n const next = new Set(prev);\n next.delete(parentId);\n return next;\n });\n };\n\n if (cacheEnabled) {\n const cached = childrenCacheRef.current.get(parentId);\n if (cached !== undefined) {\n // Search can replace the tree, so cached children must merge again.\n setNodes((prev) => mergeChildren(prev, parentId, cached));\n recordAncestry(parentId, cached);\n clearChildrenLoading();\n return cached;\n }\n }\n\n const resultOrPromise = loadOptionsRef.current(\"\", parentNode);\n\n const applyChildren = (result: TreeSelectFieldNode[]) => {\n if (loadChildrenSeqRef.current.get(parentId) !== seq) {\n return result;\n }\n if (cacheEnabled) {\n childrenCacheRef.current.set(parentId, result);\n }\n setNodes((prev) => mergeChildren(prev, parentId, result));\n recordAncestry(parentId, result);\n return result;\n };\n\n if (!isThenable(resultOrPromise)) {\n const applied = applyChildren(resultOrPromise);\n clearChildrenLoading();\n return applied;\n }\n\n setIsLoadingChildren((prev) => {\n const next = new Set(prev);\n next.add(parentId);\n return next;\n });\n\n try {\n const result = await resultOrPromise;\n return applyChildren(result);\n } finally {\n clearChildrenLoading();\n }\n },\n [cacheEnabled, recordAncestry],\n );\n\n const clearCache = useCallback(() => {\n searchCacheRef.current.clear();\n childrenCacheRef.current.clear();\n setAncestry((prev) => (prev.size === 0 ? prev : new Map()));\n }, []);\n\n const invalidate = useCallback(() => {\n searchCacheRef.current.clear();\n childrenCacheRef.current.clear();\n setAncestry((prev) => (prev.size === 0 ? prev : new Map()));\n void loadRoot(currentSearchRef.current, true);\n }, [loadRoot]);\n\n const onOpen = useCallback(() => {\n if (hasOpenedRef.current) return;\n hasOpenedRef.current = true;\n void loadRoot(\"\");\n }, [loadRoot]);\n\n useEffect(() => {\n if (initialLoad === \"immediate\" || initialLoad === \"auto\") {\n void loadRoot(\"\");\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n nodes,\n ancestry,\n isLoading,\n isLoadingChildren,\n loadChildren,\n search,\n clearCache,\n invalidate,\n onOpen,\n };\n}\n","import type {\n TreeSelectFieldNode,\n TreeSelectFieldValue,\n TreeSelectFieldValueConsistsOf,\n} from \"../types\";\nimport type { CheckState } from \"../../../../types\";\n\nexport type { CheckState };\n\n/** Indexes loaded nodes by id. */\nfunction buildNodeMap(\n nodes: TreeSelectFieldNode[],\n): Map<string | number, TreeSelectFieldNode> {\n const map = new Map<string | number, TreeSelectFieldNode>();\n const visit = (list: TreeSelectFieldNode[]) => {\n for (const node of list) {\n map.set(node.id, node);\n if (node.children) visit(node.children);\n }\n };\n visit(nodes);\n return map;\n}\n\n/**\n * Indexes loaded child-to-parent relationships for emitted selection paths.\n */\nfunction buildParentMap(\n nodes: TreeSelectFieldNode[],\n): Map<string | number, string | number> {\n const parents = new Map<string | number, string | number>();\n const visit = (list: TreeSelectFieldNode[], parentId?: string | number) => {\n for (const node of list) {\n if (parentId !== undefined) parents.set(node.id, parentId);\n if (node.children) visit(node.children, node.id);\n }\n };\n visit(nodes);\n return parents;\n}\n\n/**\n * Resolves root-to-parent ancestry, omitting `path` for root nodes.\n */\nfunction resolvePath(\n nodeId: string | number,\n parents: Map<string | number, string | number>,\n): (string | number)[] | undefined {\n const path: (string | number)[] = [];\n let current = parents.get(nodeId);\n const seen = new Set<string | number>();\n while (current !== undefined && !seen.has(current)) {\n seen.add(current);\n path.unshift(current);\n current = parents.get(current);\n }\n return path.length > 0 ? path : undefined;\n}\n\n/** Whether `children` is defined, including empty and unloaded branches. */\nfunction isBranch(node: TreeSelectFieldNode): boolean {\n return node.children !== undefined;\n}\n\n/**\n * Expands stored branch ids to non-disabled descendants before bottom-up\n * check-state aggregation.\n */\nfunction expandBranchIds(\n ids: Set<string | number>,\n nodes: TreeSelectFieldNode[],\n): Set<string | number> {\n const nodeMap = buildNodeMap(nodes);\n const expanded = new Set(ids);\n\n const addDescendants = (node: TreeSelectFieldNode): void => {\n if (node.disabled) return;\n expanded.add(node.id);\n if (node.children) {\n for (const child of node.children) {\n addDescendants(child);\n }\n }\n };\n\n for (const id of ids) {\n const node = nodeMap.get(id);\n if (node && isBranch(node)) {\n addDescendants(node);\n }\n }\n\n return expanded;\n}\n\n/**\n * Computes the visual check state for every node in the tree.\n *\n * Linked branches aggregate their non-disabled children. Lazy or filtered\n * branches cannot prove a fully checked state from incomplete children, so\n * they use their own selection and known orphan-ancestor paths. Accurate\n * partial filtering requires `childCount`.\n */\nexport function computeCheckStates(\n nodes: TreeSelectFieldNode[],\n value: TreeSelectFieldValue[],\n selectionMode: \"single\" | \"independent\" | \"linked\",\n valueConsistsOf: TreeSelectFieldValueConsistsOf,\n orphanAncestorIds: Set<string | number> = new Set(),\n): Map<string | number, CheckState> {\n const rawIds = new Set(value.map((v) => v.id));\n\n const checkedIdSet =\n selectionMode === \"linked\" &&\n (valueConsistsOf === \"BRANCH_PRIORITY\" || valueConsistsOf === \"ALL\")\n ? expandBranchIds(rawIds, nodes)\n : rawIds;\n const states = new Map<string | number, CheckState>();\n\n const computeNode = (node: TreeSelectFieldNode): CheckState => {\n if (\n selectionMode === \"independent\" ||\n selectionMode === \"single\" ||\n valueConsistsOf === \"BRANCH_ONLY\"\n ) {\n const state: CheckState = checkedIdSet.has(node.id)\n ? \"checked\"\n : \"unchecked\";\n states.set(node.id, state);\n if (node.children) {\n for (const child of node.children) {\n computeNode(child);\n }\n }\n return state;\n }\n\n const loadedChildren = Array.isArray(node.children) ? node.children : [];\n\n // Incomplete branches cannot aggregate an authoritative checked state.\n const isUnloaded = node.children === null;\n const isPartiallyLoaded =\n node.childCount !== undefined && loadedChildren.length < node.childCount;\n const underRepresented = isUnloaded || isPartiallyLoaded;\n\n if (loadedChildren.length === 0 && !underRepresented) {\n const state: CheckState = checkedIdSet.has(node.id)\n ? \"checked\"\n : \"unchecked\";\n states.set(node.id, state);\n return state;\n }\n\n const childStates = loadedChildren.map(computeNode);\n const hasAnyChecked = childStates.some(\n (s) => s === \"checked\" || s === \"indeterminate\",\n );\n\n if (underRepresented) {\n let state: CheckState;\n if (checkedIdSet.has(node.id)) {\n state = \"checked\";\n } else if (hasAnyChecked || orphanAncestorIds.has(node.id)) {\n state = \"indeterminate\";\n } else {\n state = \"unchecked\";\n }\n states.set(node.id, state);\n return state;\n }\n\n const enabledChildren = loadedChildren.filter((c) => !c.disabled);\n const enabledChildStates = enabledChildren.map(\n (c) => states.get(c.id) ?? \"unchecked\",\n );\n const disabledChildren = loadedChildren.filter((c) => c.disabled);\n const disabledChildStates = disabledChildren.map(\n (c) => states.get(c.id) ?? \"unchecked\",\n );\n\n const allEnabledChecked =\n enabledChildren.length === 0\n ? disabledChildStates.every((s) => s === \"checked\")\n : enabledChildStates.every((s) => s === \"checked\");\n\n let state: CheckState;\n if (\n allEnabledChecked &&\n (enabledChildren.length > 0 ||\n disabledChildStates.every((s) => s === \"checked\"))\n ) {\n state = \"checked\";\n } else if (hasAnyChecked) {\n state = \"indeterminate\";\n } else {\n state = \"unchecked\";\n }\n\n states.set(node.id, state);\n return state;\n };\n\n for (const node of nodes) {\n computeNode(node);\n }\n\n return states;\n}\n\n/**\n * Converts checked ids to controlled values according to the node-retention\n * strategy, including ancestry paths for restored lazy selections.\n */\nexport function computeValue(\n nodes: TreeSelectFieldNode[],\n checkedIds: Set<string | number>,\n valueConsistsOf: TreeSelectFieldValueConsistsOf,\n): TreeSelectFieldValue[] {\n const result: TreeSelectFieldValue[] = [];\n const included = new Set<string | number>();\n\n const allNonDisabledChildrenChecked = (\n node: TreeSelectFieldNode,\n ): boolean => {\n if (!node.children || node.children.length === 0) return false;\n const nonDisabled = node.children.filter((c) => !c.disabled);\n if (nonDisabled.length === 0) return false;\n return nonDisabled.every((c) => {\n if (!isBranch(c)) return checkedIds.has(c.id);\n return allNonDisabledChildrenChecked(c) || checkedIds.has(c.id);\n });\n };\n\n // Emitted paths preserve ancestor state before lazy branches reload.\n const toValue = (\n node: TreeSelectFieldNode,\n ancestors: (string | number)[],\n ): TreeSelectFieldValue => ({\n id: node.id,\n label: node.label,\n extra: node.extra,\n ...(node.disabled ? { disabled: true } : {}),\n ...(ancestors.length > 0 ? { path: [...ancestors] } : {}),\n });\n\n const visit = (\n node: TreeSelectFieldNode,\n ancestors: (string | number)[],\n ): void => {\n if (!checkedIds.has(node.id) && !isBranch(node)) {\n return;\n }\n const childAncestors = [...ancestors, node.id];\n\n switch (valueConsistsOf) {\n case \"ALL\": {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n if (node.children) {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n break;\n }\n\n case \"BRANCH_ONLY\": {\n if (isBranch(node)) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n if (node.children) {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n }\n break;\n }\n\n case \"LEAF_ONLY\": {\n if (!isBranch(node)) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n } else {\n if (node.children) {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n }\n break;\n }\n\n case \"LEAF_PRIORITY\": {\n if (!isBranch(node)) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n } else if (!node.children || node.children.length === 0) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n } else {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n break;\n }\n\n case \"BRANCH_PRIORITY\": {\n if (!isBranch(node)) {\n if (checkedIds.has(node.id) && !included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n }\n } else {\n if (allNonDisabledChildrenChecked(node)) {\n if (!included.has(node.id)) {\n included.add(node.id);\n result.push(toValue(node, ancestors));\n if (node.children) {\n for (const child of node.children) {\n markDescendantsIncluded(child);\n }\n }\n }\n } else {\n if (node.children) {\n for (const child of node.children) {\n visit(child, childAncestors);\n }\n }\n }\n }\n break;\n }\n }\n };\n\n /** Prevents descendants from duplicating a retained ancestor branch. */\n const markDescendantsIncluded = (node: TreeSelectFieldNode): void => {\n included.add(node.id);\n if (node.children) {\n for (const child of node.children) {\n markDescendantsIncluded(child);\n }\n }\n };\n\n for (const node of nodes) {\n visit(node, []);\n }\n\n return result;\n}\n\n/**\n * Toggles one node under the single, independent, or linked selection policy.\n * Linked toggles cascade through non-disabled descendants.\n */\nexport function toggleNodeSelection(\n nodes: TreeSelectFieldNode[],\n currentValue: TreeSelectFieldValue[],\n nodeId: string | number,\n selectionMode: \"single\" | \"independent\" | \"linked\",\n valueConsistsOf: TreeSelectFieldValueConsistsOf,\n): TreeSelectFieldValue[] {\n const nodeMap = buildNodeMap(nodes);\n const targetNode = nodeMap.get(nodeId);\n if (!targetNode) return currentValue;\n\n const currentCheckedIds = new Set(currentValue.map((v) => v.id));\n const isCurrentlySelected = currentCheckedIds.has(nodeId);\n\n const parentMap = buildParentMap(nodes);\n\n if (selectionMode === \"single\") {\n if (isCurrentlySelected) return [];\n const path = resolvePath(targetNode.id, parentMap);\n return [\n {\n id: targetNode.id,\n label: targetNode.label,\n extra: targetNode.extra,\n ...(targetNode.disabled ? { disabled: true } : {}),\n ...(path ? { path } : {}),\n },\n ];\n }\n\n if (selectionMode === \"independent\") {\n const next = new Set(currentCheckedIds);\n if (isCurrentlySelected) {\n next.delete(nodeId);\n } else {\n next.add(nodeId);\n }\n return buildValueFromIds(next, currentValue, nodeMap, parentMap);\n }\n\n // For linked mode we cannot rely solely on whether the nodeId is in the\n // value array because strategies like LEAF_PRIORITY never store branch ids.\n // Instead, derive the effective check state from computeCheckStates.\n const checkStates = computeCheckStates(\n nodes,\n currentValue,\n selectionMode,\n valueConsistsOf,\n );\n const currentCheckState = checkStates.get(nodeId) ?? \"unchecked\";\n const shouldDeselect =\n currentCheckState === \"checked\" || currentCheckState === \"indeterminate\";\n\n // Expand compact branch values before changing one linked subtree.\n const expandedIds =\n valueConsistsOf === \"BRANCH_PRIORITY\" || valueConsistsOf === \"ALL\"\n ? expandBranchIds(currentCheckedIds, nodes)\n : currentCheckedIds;\n const nextCheckedIds = new Set(expandedIds);\n\n if (shouldDeselect) {\n const idsToDeselect = getNonDisabledDescendantIds(targetNode);\n for (const id of idsToDeselect) {\n nextCheckedIds.delete(id);\n }\n } else {\n const idsToSelect = getNonDisabledDescendantIds(targetNode);\n for (const id of idsToSelect) {\n nextCheckedIds.add(id);\n }\n }\n\n if (valueConsistsOf !== \"BRANCH_ONLY\") {\n bubbleUpCheckedParents(nodes, nextCheckedIds);\n }\n\n const computed = computeValue(nodes, nextCheckedIds, valueConsistsOf);\n\n // `computeValue` only walks the currently-loaded tree, so during search (or\n // with lazy branches) it can't re-emit a previously-selected node that lives\n // outside the filtered/loaded subset. Carry those forward from currentValue\n // so toggling a visible node doesn't silently drop selections elsewhere.\n // Only entries whose nodes aren't present in `nodes` are eligible — anything\n // loaded was already handled (and possibly rolled up) by computeValue.\n const emittedIds = new Set(computed.map((v) => v.id));\n const carriedForward = currentValue.filter(\n (v) =>\n nextCheckedIds.has(v.id) && !emittedIds.has(v.id) && !nodeMap.has(v.id),\n );\n\n return [...computed, ...carriedForward];\n}\n\n/**\n * Adds fully checked parent branches from the bottom up.\n */\nfunction bubbleUpCheckedParents(\n nodes: TreeSelectFieldNode[],\n checkedIds: Set<string | number>,\n): void {\n const visit = (list: TreeSelectFieldNode[]): void => {\n for (const node of list) {\n if (node.children && node.children.length > 0) {\n visit(node.children);\n const nonDisabled = node.children.filter((c) => !c.disabled);\n if (\n nonDisabled.length > 0 &&\n nonDisabled.every((c) => checkedIds.has(c.id))\n ) {\n if (!node.disabled) checkedIds.add(node.id);\n } else {\n checkedIds.delete(node.id);\n }\n }\n }\n };\n visit(nodes);\n}\n\n/**\n * Collects a subtree until a disabled node blocks that branch.\n */\nfunction getNonDisabledDescendantIds(\n node: TreeSelectFieldNode,\n): (string | number)[] {\n if (node.disabled) return [];\n const result: (string | number)[] = [node.id];\n if (node.children) {\n for (const child of node.children) {\n result.push(...getNonDisabledDescendantIds(child));\n }\n }\n return result;\n}\n\n/**\n * Rebuilds independent values, preserving controlled entries before falling\n * back to loaded node data.\n */\nfunction buildValueFromIds(\n checkedIds: Set<string | number>,\n currentValue: TreeSelectFieldValue[],\n nodeMap: Map<string | number, TreeSelectFieldNode>,\n parentMap: Map<string | number, string | number>,\n): TreeSelectFieldValue[] {\n const existingMap = new Map(currentValue.map((v) => [v.id, v]));\n const result: TreeSelectFieldValue[] = [];\n for (const id of checkedIds) {\n const existing = existingMap.get(id);\n if (existing) {\n result.push(existing);\n } else {\n const node = nodeMap.get(id);\n if (node) {\n const path = resolvePath(node.id, parentMap);\n result.push({\n id: node.id,\n label: node.label,\n extra: node.extra,\n ...(node.disabled ? { disabled: true } : {}),\n ...(path ? { path } : {}),\n });\n }\n }\n }\n return result;\n}\n","import type { KeyboardEvent } from \"react\";\nimport type { VisibleNode } from \"./types\";\n\nexport type UseTreeKeyboardOptions = {\n visibleNodes: VisibleNode[];\n activeIndex: number;\n setActiveIndex: (index: number) => void;\n isExpanded: (id: string | number) => boolean;\n toggleExpand: (id: string | number) => void;\n toggleNode: (id: string | number) => void;\n};\n\n/**\n * Applies the WAI-ARIA tree keyboard pattern through `aria-activedescendant`.\n * Returns `false` when the input should retain an unhandled key, including\n * ArrowLeft or ArrowRight with no available tree action.\n */\nexport function handleTreeKeyDown(\n e: KeyboardEvent,\n options: UseTreeKeyboardOptions,\n): boolean {\n const {\n visibleNodes,\n activeIndex,\n setActiveIndex,\n isExpanded,\n toggleExpand,\n toggleNode,\n } = options;\n\n if (visibleNodes.length === 0) return false;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n if (activeIndex === -1) {\n setActiveIndex(0);\n } else {\n setActiveIndex(Math.min(activeIndex + 1, visibleNodes.length - 1));\n }\n return true;\n }\n\n case \"ArrowUp\": {\n e.preventDefault();\n if (activeIndex === -1) {\n setActiveIndex(visibleNodes.length - 1);\n } else {\n setActiveIndex(Math.max(activeIndex - 1, 0));\n }\n return true;\n }\n\n case \"ArrowRight\": {\n if (activeIndex === -1) return false;\n const rightNode = visibleNodes[activeIndex];\n if (!rightNode.isBranch) return false;\n if (!isExpanded(rightNode.node.id)) {\n e.preventDefault();\n toggleExpand(rightNode.node.id);\n return true;\n }\n const nextIndex = activeIndex + 1;\n if (nextIndex < visibleNodes.length) {\n e.preventDefault();\n setActiveIndex(nextIndex);\n return true;\n }\n return false;\n }\n\n case \"ArrowLeft\": {\n if (activeIndex === -1) return false;\n const leftNode = visibleNodes[activeIndex];\n if (leftNode.isBranch && isExpanded(leftNode.node.id)) {\n e.preventDefault();\n toggleExpand(leftNode.node.id);\n return true;\n }\n const currentDepth = leftNode.depth;\n if (currentDepth === 0) return false;\n for (let i = activeIndex - 1; i >= 0; i--) {\n if (visibleNodes[i].depth < currentDepth) {\n e.preventDefault();\n setActiveIndex(i);\n return true;\n }\n }\n return false;\n }\n\n case \"Home\": {\n e.preventDefault();\n setActiveIndex(0);\n return true;\n }\n\n case \"End\": {\n e.preventDefault();\n setActiveIndex(visibleNodes.length - 1);\n return true;\n }\n\n case \"Enter\": {\n if (activeIndex === -1) return false;\n e.preventDefault();\n const activeNode = visibleNodes[activeIndex];\n toggleNode(activeNode.node.id);\n return true;\n }\n\n default:\n return false;\n }\n}\n","import {\n useState,\n useMemo,\n useCallback,\n useRef,\n useEffect,\n type KeyboardEvent,\n} from \"react\";\nimport type {\n TreeSelectFieldNode,\n TreeSelectFieldValue,\n TreeSelectFieldValueConsistsOf,\n} from \"../types\";\nimport type { VisibleNode } from \"./types\";\nimport {\n computeCheckStates,\n toggleNodeSelection,\n type CheckState,\n} from \"./useTreeCascade\";\nimport { handleTreeKeyDown } from \"./useTreeKeyboard\";\n\nconst EMPTY_PLACEHOLDER_PREFIX = \"\\0__tsf_empty__\";\n\nexport type UseTreeOptions = {\n nodes: TreeSelectFieldNode[];\n value: TreeSelectFieldValue[];\n onSelectedOptionsChange: (nodes: TreeSelectFieldValue[]) => void;\n /** Selection and parent-child cascade policy. Defaults to `\"linked\"`. */\n selectionMode?: \"single\" | \"independent\" | \"linked\";\n valueConsistsOf?: TreeSelectFieldValueConsistsOf;\n /** Initial uncontrolled expansion depth. Defaults to `0`. */\n defaultExpandLevel?: number;\n expandedIds?: Set<string | number>;\n onExpandedIdsChange?: (ids: Set<string | number>) => void;\n searchValue?: string;\n /** Lazy-load child-to-parent relationships retained across tree replacements. */\n ancestry?: Map<string | number, string | number>;\n loadingChildrenIds?: Set<string | number>;\n};\n\n/** ARIA attributes generated for one visible tree item. */\nexport type TreeItemProps = {\n id: string;\n role: \"treeitem\";\n \"aria-level\": number;\n \"aria-setsize\": number;\n \"aria-posinset\": number;\n \"aria-expanded\"?: boolean;\n \"aria-selected\": boolean;\n};\n\n/** ARIA attributes generated for the tree container. */\nexport type TreeContainerProps = {\n role: \"tree\";\n \"aria-activedescendant\": string | undefined;\n \"aria-multiselectable\": boolean;\n};\n\nexport type UseTreeReturn = {\n nodes: TreeSelectFieldNode[];\n /** Depth-first rows after expansion and search filtering. */\n visibleNodes: VisibleNode[];\n getCheckState: (id: string | number) => CheckState;\n toggleNode: (id: string | number) => void;\n isExpanded: (id: string | number) => boolean;\n toggleExpand: (id: string | number) => void;\n expandAll: () => void;\n collapseAll: () => void;\n /** DOM id of the keyboard-active tree item. */\n activeDescendantId: string | undefined;\n setActiveNodeId: (id: string | number) => void;\n onKeyDown: (e: KeyboardEvent) => void;\n getTreeItemProps: (id: string | number) => TreeItemProps;\n treeProps: TreeContainerProps;\n};\n\n/** Collects loaded, empty, and unloaded branch ids. */\nfunction collectAllBranchIds(\n nodes: TreeSelectFieldNode[],\n): (string | number)[] {\n const result: (string | number)[] = [];\n const visit = (list: TreeSelectFieldNode[]) => {\n for (const node of list) {\n if (node.children !== undefined) {\n result.push(node.id);\n if (node.children) visit(node.children);\n }\n }\n };\n visit(nodes);\n return result;\n}\n\n/** Collects branch ids at depths below `defaultExpandLevel`. */\nfunction buildDefaultExpanded(\n nodes: TreeSelectFieldNode[],\n defaultExpandLevel: number,\n): Set<string | number> {\n const result = new Set<string | number>();\n const visit = (list: TreeSelectFieldNode[], depth: number) => {\n if (depth >= defaultExpandLevel) return;\n for (const node of list) {\n if (node.children !== undefined) {\n result.add(node.id);\n if (node.children) visit(node.children, depth + 1);\n }\n }\n };\n visit(nodes, 0);\n return result;\n}\n\nfunction isBranchNode(node: TreeSelectFieldNode): boolean {\n return node.children !== undefined;\n}\n\n/** Whether a node, its search text, or any descendant matches. */\nfunction nodeMatchesSearch(node: TreeSelectFieldNode, search: string): boolean {\n const labelMatch = node.label.toLowerCase().includes(search);\n const searchTextMatch = node.searchText\n ? node.searchText.toLowerCase().includes(search)\n : false;\n if (labelMatch || searchTextMatch) return true;\n if (node.children) {\n return node.children.some((child) => nodeMatchesSearch(child, search));\n }\n return false;\n}\n\n/**\n * Flattens expanded rows. Search applies a local substring filter to loaded\n * results and retains and expands ancestor paths to matches.\n */\nfunction flattenTree(\n nodes: TreeSelectFieldNode[],\n expandedIds: Set<string | number>,\n search: string | undefined,\n depth: number,\n): VisibleNode[] {\n const result: VisibleNode[] = [];\n\n for (const node of nodes) {\n const isBranch = isBranchNode(node);\n\n if (search !== undefined) {\n if (!nodeMatchesSearch(node, search)) continue;\n }\n\n const expanded = isBranch\n ? search !== undefined\n ? nodeMatchesSearch(node, search)\n : expandedIds.has(node.id)\n : false;\n\n result.push({\n node,\n depth,\n isExpanded: expanded,\n isBranch,\n isLoading: false,\n });\n\n if (isBranch && expanded) {\n if (node.children && node.children.length > 0) {\n result.push(\n ...flattenTree(node.children, expandedIds, search, depth + 1),\n );\n } else if (node.children && node.children.length === 0) {\n result.push({\n node: {\n id: `${EMPTY_PLACEHOLDER_PREFIX}${node.id}`,\n label: \"No items\",\n },\n depth: depth + 1,\n isExpanded: false,\n isBranch: false,\n isLoading: false,\n isEmptyPlaceholder: true,\n });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Manages expansion, selection, search visibility, keyboard navigation, and\n * ARIA state for a tree widget.\n */\nexport function useTree(options: UseTreeOptions): UseTreeReturn {\n const {\n nodes,\n value,\n onSelectedOptionsChange,\n selectionMode = \"linked\",\n valueConsistsOf = \"LEAF_PRIORITY\",\n defaultExpandLevel = 0,\n expandedIds: controlledExpandedIds,\n onExpandedIdsChange,\n searchValue,\n ancestry,\n loadingChildrenIds,\n } = options;\n\n const isControlled = controlledExpandedIds !== undefined;\n\n const [uncontrolledExpandedIds, setUncontrolledExpandedIds] = useState<\n Set<string | number>\n >(() => buildDefaultExpanded(nodes, defaultExpandLevel));\n\n // Async trees initialize empty, so apply the default when roots first arrive.\n const appliedDefaultExpandRef = useRef(nodes.length > 0);\n useEffect(() => {\n if (!appliedDefaultExpandRef.current && nodes.length > 0 && !isControlled) {\n appliedDefaultExpandRef.current = true;\n setUncontrolledExpandedIds(\n buildDefaultExpanded(nodes, defaultExpandLevel),\n );\n }\n }, [nodes, defaultExpandLevel, isControlled]);\n\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n\n const expandedIds = isControlled\n ? controlledExpandedIds\n : uncontrolledExpandedIds;\n\n const isExpanded = useCallback(\n (id: string | number): boolean => expandedIds.has(id),\n [expandedIds],\n );\n\n const setExpandedIds = useCallback(\n (next: Set<string | number>) => {\n if (isControlled) {\n onExpandedIdsChange?.(next);\n } else {\n setUncontrolledExpandedIds(next);\n }\n },\n [isControlled, onExpandedIdsChange],\n );\n\n const toggleExpand = useCallback(\n (id: string | number) => {\n const next = new Set(expandedIds);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n setExpandedIds(next);\n },\n [expandedIds, setExpandedIds],\n );\n\n const expandAll = useCallback(() => {\n const allBranchIds = collectAllBranchIds(nodes);\n setExpandedIds(new Set(allBranchIds));\n }, [nodes, setExpandedIds]);\n\n const collapseAll = useCallback(() => {\n setExpandedIds(new Set());\n }, [setExpandedIds]);\n\n const normalizedSearch = searchValue?.trim().toLowerCase() || undefined;\n\n const visibleNodes = useMemo<VisibleNode[]>(() => {\n const flat = flattenTree(nodes, expandedIds, normalizedSearch, 0);\n\n if (!loadingChildrenIds || loadingChildrenIds.size === 0) return flat;\n\n return flat.map((vn) =>\n loadingChildrenIds.has(vn.node.id) ? { ...vn, isLoading: true } : vn,\n );\n }, [nodes, expandedIds, normalizedSearch, loadingChildrenIds]);\n\n const visibleNodeMap = useMemo(() => {\n const map = new Map<string | number, VisibleNode>();\n for (const vn of visibleNodes) {\n map.set(vn.node.id, vn);\n }\n return map;\n }, [visibleNodes]);\n\n // ARIA positions reflect filtered siblings rather than the unfiltered tree.\n const visibleSiblingsMap = useMemo(() => {\n const map = new Map<\n string | number,\n { setSize: number; posInSet: number }\n >();\n\n type ParentKey = string | number | \"__root__\";\n const groups = new Map<ParentKey, (string | number)[]>();\n const parentStack: { id: string | number; depth: number }[] = [];\n\n for (const vn of visibleNodes) {\n if (vn.isEmptyPlaceholder) continue;\n\n while (\n parentStack.length > 0 &&\n parentStack[parentStack.length - 1].depth >= vn.depth\n ) {\n parentStack.pop();\n }\n\n const parentKey: ParentKey =\n parentStack.length > 0\n ? parentStack[parentStack.length - 1].id\n : \"__root__\";\n\n let group = groups.get(parentKey);\n if (!group) {\n group = [];\n groups.set(parentKey, group);\n }\n group.push(vn.node.id);\n\n if (vn.isBranch && vn.isExpanded) {\n parentStack.push({ id: vn.node.id, depth: vn.depth });\n }\n }\n\n for (const group of groups.values()) {\n for (let i = 0; i < group.length; i++) {\n map.set(group[i], { setSize: group.length, posInSet: i + 1 });\n }\n }\n\n return map;\n }, [visibleNodes]);\n\n // Attribute unloaded selections only to their known ancestor path so\n // unrelated lazy branches remain unchecked.\n const orphanAncestorIds = useMemo(() => {\n const loadedIds = new Set<string | number>();\n const collect = (list: TreeSelectFieldNode[]) => {\n for (const n of list) {\n loadedIds.add(n.id);\n if (n.children) collect(n.children);\n }\n };\n collect(nodes);\n\n const ancestors = new Set<string | number>();\n for (const v of value) {\n if (loadedIds.has(v.id)) continue;\n\n if (v.path && v.path.length > 0) {\n for (const ancestorId of v.path) ancestors.add(ancestorId);\n continue;\n }\n\n if (ancestry) {\n const seen = new Set<string | number>();\n let parent = ancestry.get(v.id);\n while (parent !== undefined && !seen.has(parent)) {\n seen.add(parent);\n ancestors.add(parent);\n parent = ancestry.get(parent);\n }\n }\n }\n return ancestors;\n }, [nodes, value, ancestry]);\n\n const checkStates = useMemo(\n () =>\n computeCheckStates(\n nodes,\n value,\n selectionMode,\n valueConsistsOf,\n orphanAncestorIds,\n ),\n [nodes, value, selectionMode, valueConsistsOf, orphanAncestorIds],\n );\n\n const getCheckState = useCallback(\n (id: string | number): CheckState => checkStates.get(id) ?? \"unchecked\",\n [checkStates],\n );\n\n const toggleNode = useCallback(\n (id: string | number) => {\n const newValue = toggleNodeSelection(\n nodes,\n value,\n id,\n selectionMode,\n valueConsistsOf,\n );\n onSelectedOptionsChange(newValue);\n },\n [nodes, value, selectionMode, valueConsistsOf, onSelectedOptionsChange],\n );\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent): boolean => {\n return handleTreeKeyDown(e, {\n visibleNodes,\n activeIndex,\n setActiveIndex,\n isExpanded,\n toggleExpand,\n toggleNode,\n });\n },\n [visibleNodes, activeIndex, isExpanded, toggleExpand, toggleNode],\n );\n\n const activeDescendantId =\n activeIndex >= 0 && activeIndex < visibleNodes.length\n ? `treeitem-${visibleNodes[activeIndex].node.id}`\n : undefined;\n\n const setActiveNodeId = useCallback(\n (id: string | number) => {\n const idx = visibleNodes.findIndex((vn) => vn.node.id === id);\n if (idx !== -1) setActiveIndex(idx);\n },\n [visibleNodes],\n );\n\n const getTreeItemProps = useCallback(\n (id: string | number): TreeItemProps => {\n const visibleNode = visibleNodeMap.get(id);\n const depth = visibleNode?.depth ?? 0;\n const isBranch = visibleNode?.isBranch ?? false;\n const expanded = isBranch\n ? (visibleNode?.isExpanded ?? isExpanded(id))\n : undefined;\n\n const siblingInfo = visibleSiblingsMap.get(id);\n const setSize = siblingInfo?.setSize ?? 1;\n const posInSet = siblingInfo?.posInSet ?? 1;\n\n const checkState = getCheckState(id);\n const isSelected = checkState === \"checked\";\n\n const props: TreeItemProps = {\n id: `treeitem-${id}`,\n role: \"treeitem\",\n \"aria-level\": depth + 1,\n \"aria-setsize\": setSize,\n \"aria-posinset\": posInSet,\n \"aria-selected\": isSelected,\n };\n\n if (isBranch) {\n props[\"aria-expanded\"] = expanded;\n }\n\n return props;\n },\n [visibleNodeMap, isExpanded, visibleSiblingsMap, getCheckState],\n );\n\n const treeProps = useMemo<TreeContainerProps>(\n () => ({\n role: \"tree\",\n \"aria-activedescendant\": activeDescendantId,\n \"aria-multiselectable\": selectionMode !== \"single\",\n }),\n [activeDescendantId, selectionMode],\n );\n\n return {\n nodes,\n visibleNodes,\n getCheckState,\n toggleNode,\n isExpanded,\n toggleExpand,\n expandAll,\n collapseAll,\n activeDescendantId,\n setActiveNodeId,\n onKeyDown,\n getTreeItemProps,\n treeProps,\n };\n}\n","import cx from \"classnames\";\nimport { Icon } from \"../../../../components/Icon\";\nimport { Spinner } from \"../../../../components/Spinner\";\nimport KeyboardArrowRight from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_right.svg\";\nimport KeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { TreeSelectFieldNode } from \"../types\";\nimport { PARTS } from \"../parts\";\nimport type { VisibleNode } from \"./types\";\nimport styles from \"./TreeRow.module.scss\";\nimport { Text } from \"../../../../components\";\nimport { OptionCheckbox } from \"../../../../internal/components/OptionCheckbox\";\nimport { OptionContentArea } from \"../../../../internal/components/OptionContentArea\";\nimport {\n OptionRow,\n OptionRowSideContent,\n} from \"../../../../internal/components/OptionRow\";\n\nconst INDENT_BASE = 16;\nconst INDENT_PER_DEPTH = 24;\nconst EXPAND_ICON_WIDTH = 32;\n\nexport type TreeRowProps = {\n visible: VisibleNode;\n /** Includes `\"loading\"` while a cascading selection awaits lazy descendants. */\n checkState: \"checked\" | \"unchecked\" | \"indeterminate\" | \"loading\";\n itemProps: Record<string, unknown>;\n /** Allows branch rows to select instead of only expand. Defaults to `true`. */\n branchesSelectable?: boolean;\n /** Allows leaf rows to select. Defaults to `true`. */\n leavesSelectable?: boolean;\n /** Allows branches with no children to select. Defaults to `true`. */\n emptyBranchesSelectable?: boolean;\n /** Preserves navigation and expansion while preventing selection. */\n readOnly?: boolean;\n isActive?: boolean;\n onToggleNode: (id: string | number) => void;\n onToggleExpand: (id: string | number) => void;\n onHover?: (id: string | number) => void;\n onLoadChildren?: (node: TreeSelectFieldNode) => void;\n depth: number;\n};\n\n/** Renders one indented tree row with selection and branch expansion controls. */\nexport function TreeRow({\n visible,\n checkState,\n itemProps,\n branchesSelectable = true,\n leavesSelectable = true,\n emptyBranchesSelectable = true,\n readOnly = false,\n isActive,\n onToggleNode,\n onToggleExpand,\n onHover,\n onLoadChildren,\n depth,\n}: TreeRowProps) {\n const { node, isExpanded, isBranch, isLoading, isEmptyPlaceholder } = visible;\n\n if (isEmptyPlaceholder) {\n return (\n <OptionRow\n disabled\n className={styles[\"tree-row\"]}\n style={{\n paddingInlineStart:\n INDENT_BASE + depth * INDENT_PER_DEPTH + EXPAND_ICON_WIDTH,\n }}\n >\n <span className={styles[\"label-container\"]}>\n <Text>{node.label}</Text>\n </span>\n </OptionRow>\n );\n }\n\n const isDisabled = node.disabled === true;\n const isEmptyBranch =\n isBranch && Array.isArray(node.children) && node.children.length === 0;\n const isSelectable = (() => {\n if (!isBranch) return leavesSelectable;\n if (!branchesSelectable) return false;\n if (isEmptyBranch && !emptyBranchesSelectable) return false;\n return true;\n })();\n\n const showExpandIcon = isBranch;\n const paddingInlineStart =\n INDENT_BASE +\n depth * INDENT_PER_DEPTH +\n (showExpandIcon ? 0 : EXPAND_ICON_WIDTH);\n const rowDisabled = readOnly || isDisabled || (!isSelectable && !isBranch);\n\n const expandNode = () => {\n onToggleExpand(node.id);\n if (node.children === null) onLoadChildren?.(node);\n };\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (isDisabled) return;\n expandNode();\n };\n\n const handleRowClick = () => {\n if (isDisabled) return;\n if (isBranch) {\n if (isSelectable) {\n onToggleNode(node.id);\n } else {\n expandNode();\n }\n } else if (isSelectable) {\n onToggleNode(node.id);\n }\n };\n\n let expandIconElement: React.ReactNode = null;\n if (showExpandIcon) {\n if (isLoading && checkState !== \"loading\") {\n expandIconElement = <Spinner size=\"small\" aria-hidden=\"true\" />;\n } else if (isExpanded) {\n expandIconElement = (\n <Icon svg={KeyboardArrowDown} size=\"small\" inherit aria-hidden=\"true\" />\n );\n } else {\n expandIconElement = (\n <Icon\n svg={KeyboardArrowRight}\n size=\"small\"\n inherit\n aria-hidden=\"true\"\n />\n );\n }\n }\n\n // Keep DOM focus on the combobox that owns aria-activedescendant.\n return (\n <OptionRow\n {...itemProps}\n {...{ [ANV_PART_ATTR]: PARTS.option }}\n data-id={node.id}\n disabled={rowDisabled}\n style={{ paddingInlineStart }}\n className={cx(styles[\"tree-row\"], {\n [styles[\"active\"]]: isActive,\n })}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => onHover?.(node.id)}\n onClick={handleRowClick}\n aria-disabled={rowDisabled || undefined}\n >\n {showExpandIcon && (\n <span\n className={styles[\"expand-icon\"]}\n {...{ [ANV_PART_ATTR]: PARTS.expandToggle }}\n onClick={handleExpandClick}\n aria-hidden=\"true\"\n >\n {expandIconElement}\n </span>\n )}\n {isSelectable && (\n <OptionRowSideContent>\n <OptionCheckbox checkState={checkState} />\n </OptionRowSideContent>\n )}\n <OptionContentArea label={node.label} content={node.content} />\n </OptionRow>\n );\n}\n","import { forwardRef } from \"react\";\nimport cx from \"classnames\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { TreeSelectFieldNode } from \"../types\";\nimport { PARTS } from \"../parts\";\nimport type { VisibleNode } from \"./types\";\nimport { TreeRow } from \"./TreeRow\";\nimport styles from \"./TreePanel.module.scss\";\n\nexport type TreePanelProps = {\n visibleNodes: VisibleNode[];\n getCheckState: (\n id: string | number,\n ) => \"checked\" | \"unchecked\" | \"indeterminate\" | \"loading\";\n toggleNode: (id: string | number) => void;\n toggleExpand: (id: string | number) => void;\n getTreeItemProps: (id: string | number) => Record<string, unknown>;\n treeProps: Record<string, unknown>;\n activeDescendantId: string | undefined;\n branchesSelectable?: boolean;\n leavesSelectable?: boolean;\n emptyBranchesSelectable?: boolean;\n readOnly?: boolean;\n onHover?: (id: string | number) => void;\n onLoadChildren?: (node: TreeSelectFieldNode) => void;\n};\n\n/** Renders every visible node in the tree panel. */\nexport const TreePanel = forwardRef<HTMLDivElement, TreePanelProps>(\n function TreePanelInner(\n {\n visibleNodes,\n getCheckState,\n toggleNode,\n toggleExpand,\n getTreeItemProps,\n treeProps,\n activeDescendantId,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly,\n onHover,\n onLoadChildren,\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n {...treeProps}\n {...{ [ANV_PART_ATTR]: PARTS.menu }}\n className={cx(styles.panel, treeProps.className)}\n >\n {visibleNodes.map((visible) => (\n <TreeRow\n key={visible.node.id}\n visible={visible}\n checkState={getCheckState(visible.node.id)}\n itemProps={getTreeItemProps(visible.node.id)}\n isActive={activeDescendantId === `treeitem-${visible.node.id}`}\n branchesSelectable={branchesSelectable}\n leavesSelectable={leavesSelectable}\n emptyBranchesSelectable={emptyBranchesSelectable}\n readOnly={readOnly}\n onToggleNode={toggleNode}\n onToggleExpand={toggleExpand}\n onHover={onHover}\n onLoadChildren={onLoadChildren}\n depth={visible.depth}\n />\n ))}\n </div>\n );\n },\n);\n\nTreePanel.displayName = \"TreePanel\";\n","import { forwardRef, useCallback, useRef } from \"react\";\nimport cx from \"classnames\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { TreeSelectFieldNode } from \"../types\";\nimport type { VisibleNode } from \"./types\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport { PARTS } from \"../parts\";\nimport { TreeRow } from \"./TreeRow\";\nimport styles from \"./TreePanel.module.scss\";\n\nconst EST_PADDING_BLOCK = 16;\nconst EST_LINE_HEIGHT = 18;\nconst EST_CHIP_ROW_HEIGHT = 28;\nconst EST_SIDE_CONTENT_HEIGHT = 40;\nconst EST_BASE_ROW_HEIGHT = EST_PADDING_BLOCK + EST_LINE_HEIGHT;\n\nfunction estimateTreeRowHeight(visible: VisibleNode): number {\n const content = visible.node.content;\n if (!content) return EST_BASE_ROW_HEIGHT;\n\n let contentHeight = EST_LINE_HEIGHT;\n if (content.description) contentHeight += EST_LINE_HEIGHT;\n if (content.chips?.length) contentHeight += EST_CHIP_ROW_HEIGHT;\n if (content.avatar || content.icon)\n contentHeight = Math.max(contentHeight, EST_SIDE_CONTENT_HEIGHT);\n\n return EST_PADDING_BLOCK + contentHeight;\n}\n\n/** Tree-panel props consumed by the windowed renderer. */\nexport type VirtualizedTreePanelProps = {\n visibleNodes: VisibleNode[];\n getCheckState: (\n id: string | number,\n ) => \"checked\" | \"unchecked\" | \"indeterminate\" | \"loading\";\n toggleNode: (id: string | number) => void;\n toggleExpand: (id: string | number) => void;\n getTreeItemProps: (id: string | number) => Record<string, unknown>;\n treeProps: Record<string, unknown>;\n activeDescendantId: string | undefined;\n branchesSelectable?: boolean;\n leavesSelectable?: boolean;\n emptyBranchesSelectable?: boolean;\n readOnly?: boolean;\n onHover?: (id: string | number) => void;\n onLoadChildren?: (node: TreeSelectFieldNode) => void;\n};\n\n/** Windowed tree panel that mounts only the rows near the viewport. */\nexport const VirtualizedTreePanel = forwardRef<\n HTMLDivElement,\n VirtualizedTreePanelProps\n>(function VirtualizedTreePanelInner(props, ref) {\n const {\n visibleNodes,\n getCheckState,\n toggleNode,\n toggleExpand,\n getTreeItemProps,\n treeProps,\n activeDescendantId,\n branchesSelectable = true,\n leavesSelectable = true,\n emptyBranchesSelectable = true,\n readOnly = false,\n onHover,\n onLoadChildren,\n } = props;\n\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const estimateSize = useCallback(\n (index: number) => estimateTreeRowHeight(visibleNodes[index]),\n [visibleNodes],\n );\n\n const virtualizer = useVirtualizer({\n count: visibleNodes.length,\n getScrollElement: () => scrollRef.current,\n estimateSize,\n overscan: 5,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n\n return (\n <div\n ref={(node) => {\n scrollRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n {...treeProps}\n {...{ [ANV_PART_ATTR]: PARTS.menu }}\n className={cx(styles.panel, treeProps.className)}\n >\n <div\n style={{\n height: virtualizer.getTotalSize(),\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {virtualItems.map((virtualItem) => {\n const visible = visibleNodes[virtualItem.index];\n return (\n <div\n key={visible.node.id}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n <TreeRow\n visible={visible}\n checkState={getCheckState(visible.node.id)}\n itemProps={getTreeItemProps(visible.node.id)}\n isActive={activeDescendantId === `treeitem-${visible.node.id}`}\n branchesSelectable={branchesSelectable}\n leavesSelectable={leavesSelectable}\n emptyBranchesSelectable={emptyBranchesSelectable}\n readOnly={readOnly}\n onToggleNode={toggleNode}\n onToggleExpand={toggleExpand}\n onHover={onHover}\n onLoadChildren={onLoadChildren}\n depth={visible.depth}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n});\n","import { forwardRef } from \"react\";\nimport { Spinner } from \"../../../../components/Spinner\";\nimport { Text } from \"../../../../components/Text\";\nimport { TreePanel } from \"./TreePanel\";\nimport { VirtualizedTreePanel } from \"./VirtualizedTreePanel\";\nimport type { TreePanelProps } from \"./TreePanel\";\n\nexport type TreeContentProps = {\n /** Replaces the panel with its loading state. */\n loading: boolean;\n /** Replaces the panel with its no-match state. */\n hasNoVisibleNodes: boolean;\n /** Uses windowed rendering for the panel. */\n virtualize?: boolean;\n panelProps: TreePanelProps;\n};\n\n/**\n * Shared loading, empty, and tree-panel body for tree fields and menus.\n * Forwards its ref only when a panel is mounted.\n */\nexport const TreeContent = forwardRef<HTMLDivElement, TreeContentProps>(\n function TreeContent(\n { loading, hasNoVisibleNodes, virtualize, panelProps },\n ref,\n ) {\n if (loading) {\n return (\n <div\n style={{\n padding: \"var(--a2-spacing-200)\",\n display: \"flex\",\n justifyContent: \"center\",\n }}\n >\n <Spinner size=\"medium\" />\n </div>\n );\n }\n if (hasNoVisibleNodes) {\n return (\n <div\n role=\"presentation\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"1rem\",\n textAlign: \"center\",\n }}\n >\n <Text subdued size=\"small\">\n No match found\n </Text>\n </div>\n );\n }\n return virtualize ? (\n <VirtualizedTreePanel ref={ref} {...panelProps} />\n ) : (\n <TreePanel ref={ref} {...panelProps} />\n );\n },\n);\n\nTreeContent.displayName = \"TreeContent\";\n","import type { TreeSelectFieldNode } from \"../types\";\n\n/** Finds the first node whose id strictly equals `id`. */\nexport function findNode(\n nodes: TreeSelectFieldNode[],\n id: string | number,\n): TreeSelectFieldNode | undefined {\n for (const node of nodes) {\n if (node.id === id) return node;\n if (node.children) {\n const found = findNode(node.children, id);\n if (found) return found;\n }\n }\n return undefined;\n}\n\n/** Whether this node or any descendant has `children: null`. */\nexport function hasUnloadedDescendants(node: TreeSelectFieldNode): boolean {\n if (node.children === null) return true;\n if (!node.children) return false;\n return node.children.some(hasUnloadedDescendants);\n}\n\n/**\n * Collects descendant branches with `children: null`, excluding `node` itself.\n */\nexport function findUnloadedDescendants(\n node: TreeSelectFieldNode,\n): TreeSelectFieldNode[] {\n const result: TreeSelectFieldNode[] = [];\n if (!node.children) return result;\n for (const child of node.children) {\n if (child.children === null) {\n result.push(child);\n } else if (child.children) {\n result.push(...findUnloadedDescendants(child));\n }\n }\n return result;\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { UseTreeReturn } from \"./useTree\";\nimport type { UseTreeLoaderReturn } from \"./useTreeLoader\";\nimport {\n findNode,\n findUnloadedDescendants,\n hasUnloadedDescendants,\n} from \"./treeUtils\";\n\nexport type UseTreeLazyCascadeOptions = {\n tree: UseTreeReturn;\n loader: UseTreeLoaderReturn;\n /** Calls `onCloseAfterSingleSelect` after a successful toggle when `true`. */\n isSingleSelect: boolean;\n branchesSelectable: boolean;\n leavesSelectable: boolean;\n emptyBranchesSelectable: boolean;\n /** Makes every selection attempt a no-op. */\n readOnly?: boolean;\n /** Runs after a successful single selection, including after lazy loading. */\n onCloseAfterSingleSelect?: () => void;\n};\n\nexport type UseTreeLazyCascadeReturn = {\n /** Applies selectability and loads incomplete subtrees before toggling. */\n handleToggleNode: (nodeId: string | number) => void;\n /** Original node awaiting lazy descendants, or `null`. */\n pendingToggleNodeId: string | number | null;\n /** Abandons an in-flight toggle without cancelling its network requests. */\n reset: () => void;\n};\n\n/**\n * Defers a cascading toggle until every lazy descendant is loaded.\n * Non-selectable branches expand; non-selectable leaves do nothing.\n */\nexport function useTreeLazyCascade(\n options: UseTreeLazyCascadeOptions,\n): UseTreeLazyCascadeReturn {\n const {\n tree,\n loader,\n isSingleSelect,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n readOnly = false,\n onCloseAfterSingleSelect,\n } = options;\n\n const pendingToggleRef = useRef<string | number | null>(null);\n const loadedForToggleRef = useRef(new Set<string | number>());\n const [pendingToggleNodeId, setPendingToggleNodeId] = useState<\n string | number | null\n >(null);\n\n useEffect(() => {\n if (pendingToggleRef.current === null) return;\n const nodeId = pendingToggleRef.current;\n const node = findNode(tree.nodes, nodeId);\n if (!node) return;\n\n if (node.children === null) return;\n\n if (loader.isLoadingChildren.size > 0) return;\n\n const unloaded = findUnloadedDescendants(node).filter(\n (n) => !loadedForToggleRef.current.has(n.id),\n );\n if (unloaded.length > 0) {\n for (const n of unloaded) {\n loadedForToggleRef.current.add(n.id);\n void loader.loadChildren(n);\n }\n return;\n }\n\n pendingToggleRef.current = null;\n loadedForToggleRef.current = new Set();\n setPendingToggleNodeId(null);\n tree.toggleNode(nodeId);\n if (isSingleSelect) {\n onCloseAfterSingleSelect?.();\n }\n }, [tree, isSingleSelect, onCloseAfterSingleSelect, loader]);\n\n const handleToggleNode = useCallback(\n (nodeId: string | number) => {\n if (readOnly) return;\n\n const node = findNode(tree.nodes, nodeId);\n if (!node) return;\n\n const isBranch = node.children !== undefined;\n const isEmptyBranch =\n isBranch && Array.isArray(node.children) && node.children.length === 0;\n const isNodeSelectable = isBranch\n ? branchesSelectable && (isEmptyBranch ? emptyBranchesSelectable : true)\n : leavesSelectable;\n\n if (!isNodeSelectable) {\n if (isBranch) {\n tree.toggleExpand(nodeId);\n if (node.children === null) {\n void loader.loadChildren(node);\n }\n }\n return;\n }\n\n if (hasUnloadedDescendants(node)) {\n pendingToggleRef.current = nodeId;\n loadedForToggleRef.current = new Set();\n setPendingToggleNodeId(nodeId);\n if (node.children === null) {\n loadedForToggleRef.current.add(node.id);\n void loader.loadChildren(node);\n } else {\n const unloaded = findUnloadedDescendants(node);\n for (const n of unloaded) {\n loadedForToggleRef.current.add(n.id);\n void loader.loadChildren(n);\n }\n }\n return;\n }\n\n tree.toggleNode(nodeId);\n if (isSingleSelect) {\n onCloseAfterSingleSelect?.();\n }\n },\n [\n tree,\n isSingleSelect,\n onCloseAfterSingleSelect,\n loader,\n readOnly,\n branchesSelectable,\n leavesSelectable,\n emptyBranchesSelectable,\n ],\n );\n\n const reset = useCallback(() => {\n pendingToggleRef.current = null;\n loadedForToggleRef.current = new Set();\n setPendingToggleNodeId(null);\n }, []);\n\n return { handleToggleNode, pendingToggleNodeId, reset };\n}\n","import { matchSorter, type MatchSorterOptions } from \"match-sorter\";\nimport type { TreeSelectFieldNode } from \"../types\";\n\n/**\n * Maps the complete static tree and search text to the tree passed to the field.\n */\nexport type TreeSyncFilterFn = (\n options: TreeSelectFieldNode[],\n searchValue: string,\n) => TreeSelectFieldNode[];\n\n/**\n * Adds missing immediate-child counts before filtering so a partial result\n * cannot make a branch appear fully selected.\n */\nexport function applyChildCounts(\n nodes: TreeSelectFieldNode[],\n): TreeSelectFieldNode[] {\n return nodes.map((node) => {\n if (!Array.isArray(node.children)) return node;\n\n const children = applyChildCounts(node.children);\n\n return {\n ...node,\n children,\n childCount: node.childCount ?? children.length,\n };\n });\n}\n\n/** Flattens a tree for match-sorter. */\nfunction flattenNodes(nodes: TreeSelectFieldNode[]): TreeSelectFieldNode[] {\n return nodes.flatMap((node) => [\n node,\n ...(node.children ? flattenNodes(node.children) : []),\n ]);\n}\n\n/** Keeps direct matches and their ancestor paths. */\nfunction pruneTree(\n nodes: TreeSelectFieldNode[],\n matchedIds: Set<string | number>,\n): TreeSelectFieldNode[] {\n const result: TreeSelectFieldNode[] = [];\n for (const node of nodes) {\n if (matchedIds.has(node.id)) {\n result.push(node);\n } else if (node.children && node.children.length > 0) {\n const filteredChildren = pruneTree(node.children, matchedIds);\n if (filteredChildren.length > 0) {\n result.push({ ...node, children: filteredChildren });\n }\n }\n }\n return result;\n}\n\n/** Matches `label` and `searchText` while preserving ancestors of matches. */\nexport function defaultTreeSyncFilter(\n nodes: TreeSelectFieldNode[],\n searchValue: string,\n): TreeSelectFieldNode[] {\n if (!searchValue) return nodes;\n\n const flat = flattenNodes(nodes);\n const matched = matchSorter(flat, searchValue, {\n keys: [\"label\", \"searchText\"],\n });\n const matchedIds = new Set(matched.map((n) => n.id));\n\n return pruneTree(nodes, matchedIds);\n}\n\n/**\n * Normalizes a custom filter or match-sorter options to {@link TreeSyncFilterFn}.\n * Option-object filters preserve ancestors; custom functions own their result.\n */\nexport function toTreeSyncFilterFn(\n filter: TreeSyncFilterFn | MatchSorterOptions<TreeSelectFieldNode>,\n): TreeSyncFilterFn {\n if (typeof filter === \"function\") return filter;\n\n return (nodes: TreeSelectFieldNode[], searchValue: string) => {\n if (!searchValue) return nodes;\n const flat = flattenNodes(nodes);\n const matched = matchSorter(flat, searchValue, filter);\n const matchedIds = new Set(matched.map((n) => n.id));\n return pruneTree(nodes, matchedIds);\n };\n}\n"],"names":["state","styles","KeyboardArrowDown","KeyboardArrowRight","TreeContent"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { useState } from 'react';
2
- import { h as hasReducedMotionListener, i as initPrefersReducedMotion, p as prefersReducedMotion, w as warnOnce } from './react-ORV84FjM.js';
2
+ import { h as hasReducedMotionListener, i as initPrefersReducedMotion, p as prefersReducedMotion, w as warnOnce } from './index-DfZCfS0S.js';
3
3
 
4
4
  /**
5
5
  * A hook that returns `true` if we should be using reduced motion based on the current device's Reduced Motion setting.
@@ -43,4 +43,4 @@ function useReducedMotion() {
43
43
  }
44
44
 
45
45
  export { useReducedMotion as u };
46
- //# sourceMappingURL=use-reduced-motion-yYB9Tb0D.js.map
46
+ //# sourceMappingURL=use-reduced-motion-CUshwaEW.js.map