@payloadcms/ui 3.80.0-internal.21e9c47 → 3.80.0-internal.52ab774

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 (321) hide show
  1. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  2. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +53 -3
  3. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  4. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +541 -0
  5. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -0
  6. package/dist/elements/Combobox/index.d.ts.map +1 -1
  7. package/dist/elements/Combobox/index.js +1 -0
  8. package/dist/elements/Combobox/index.js.map +1 -1
  9. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -0
  10. package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/Column/index.js +5 -5
  11. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -0
  12. package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/Column/index.scss +1 -1
  13. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -0
  14. package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/ColumnItem/index.js +3 -3
  15. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -0
  16. package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/ColumnItem/index.scss +1 -1
  17. package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/index.d.ts +1 -1
  18. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -0
  19. package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/index.js +13 -10
  20. package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -0
  21. package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/types.d.ts +3 -0
  22. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -0
  23. package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -0
  24. package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -0
  25. package/dist/elements/{HierarchyButton → Hierarchy/DocHeaderButton}/index.js +6 -6
  26. package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -0
  27. package/dist/elements/Hierarchy/DocHeaderButton/index.server.d.ts.map +1 -0
  28. package/dist/elements/{HierarchyButton → Hierarchy/DocHeaderButton}/index.server.js +3 -3
  29. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js.map +1 -0
  30. package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.d.ts.map +1 -0
  31. package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.js.map +1 -0
  32. package/dist/elements/{HierarchyDrawer → Hierarchy}/Drawer/index.d.ts +3 -3
  33. package/dist/elements/Hierarchy/Drawer/index.d.ts.map +1 -0
  34. package/dist/elements/{HierarchyDrawer → Hierarchy}/Drawer/index.js +4 -2
  35. package/dist/elements/Hierarchy/Drawer/index.js.map +1 -0
  36. package/dist/elements/{HierarchyDrawer → Hierarchy/Drawer}/types.d.ts +4 -1
  37. package/dist/elements/Hierarchy/Drawer/types.d.ts.map +1 -0
  38. package/dist/elements/Hierarchy/Drawer/types.js.map +1 -0
  39. package/dist/elements/{HierarchyDrawer/index.d.ts → Hierarchy/Drawer/useHierarchyDrawer.d.ts} +1 -1
  40. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.d.ts.map +1 -0
  41. package/dist/elements/{HierarchyDrawer/index.js → Hierarchy/Drawer/useHierarchyDrawer.js} +10 -8
  42. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.js.map +1 -0
  43. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +1 -0
  44. package/dist/elements/{HierarchyField → Hierarchy/Field}/SelectedHierarchies.js +7 -16
  45. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -0
  46. package/dist/elements/{HierarchyField → Hierarchy/Field}/SelectedHierarchies.scss +1 -1
  47. package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -0
  48. package/dist/elements/{HierarchyField → Hierarchy/Field}/index.client.js +17 -29
  49. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -0
  50. package/dist/elements/{HierarchyField → Hierarchy/Field}/index.scss +1 -1
  51. package/dist/elements/Hierarchy/Field/index.server.d.ts.map +1 -0
  52. package/dist/elements/{HierarchyField → Hierarchy/Field}/index.server.js +2 -2
  53. package/dist/elements/Hierarchy/Field/index.server.js.map +1 -0
  54. package/dist/elements/Hierarchy/HydrateProvider/index.d.ts +4 -0
  55. package/dist/elements/Hierarchy/HydrateProvider/index.d.ts.map +1 -0
  56. package/dist/elements/Hierarchy/HydrateProvider/index.js +70 -0
  57. package/dist/elements/Hierarchy/HydrateProvider/index.js.map +1 -0
  58. package/dist/elements/{MoveMany → Hierarchy/MoveMany}/index.d.ts +3 -3
  59. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -0
  60. package/dist/elements/{MoveMany → Hierarchy/MoveMany}/index.js +10 -10
  61. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -0
  62. package/dist/elements/{MoveMany → Hierarchy/MoveMany}/index.scss +1 -1
  63. package/dist/elements/Hierarchy/Search/HierarchySearchInput.d.ts.map +1 -0
  64. package/dist/elements/{HierarchySearch → Hierarchy/Search}/HierarchySearchInput.js +5 -5
  65. package/dist/elements/Hierarchy/Search/HierarchySearchInput.js.map +1 -0
  66. package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.d.ts.map +1 -0
  67. package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.js.map +1 -0
  68. package/dist/elements/Hierarchy/Search/HierarchySearchResults.d.ts.map +1 -0
  69. package/dist/elements/{HierarchySearch → Hierarchy/Search}/HierarchySearchResults.js +2 -2
  70. package/dist/elements/Hierarchy/Search/HierarchySearchResults.js.map +1 -0
  71. package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -0
  72. package/dist/elements/{HierarchySearch → Hierarchy/Search}/index.js +2 -2
  73. package/dist/elements/Hierarchy/Search/index.js.map +1 -0
  74. package/dist/elements/{HierarchySearch → Hierarchy/Search}/index.scss +1 -1
  75. package/dist/elements/Hierarchy/Search/types.d.ts.map +1 -0
  76. package/dist/elements/Hierarchy/Search/types.js.map +1 -0
  77. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -0
  78. package/dist/elements/{HierarchySearch → Hierarchy/Search}/useHierarchySearch.js +2 -2
  79. package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -0
  80. package/dist/elements/{HierarchyTree → Hierarchy/Tree}/HierarchySidebarTab.d.ts +1 -0
  81. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -0
  82. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +194 -0
  83. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -0
  84. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -0
  85. package/dist/elements/{HierarchyTree → Hierarchy/Tree}/HierarchySidebarTab.server.js +20 -10
  86. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -0
  87. package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.d.ts.map +1 -0
  88. package/dist/elements/{Tree → Hierarchy/Tree}/LoadMore/LoadMoreButton.js +1 -1
  89. package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.js.map +1 -0
  90. package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts.map +1 -0
  91. package/dist/elements/{Tree → Hierarchy/Tree}/LoadMore/index.js +1 -1
  92. package/dist/elements/Hierarchy/Tree/LoadMore/index.js.map +1 -0
  93. package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts.map +1 -0
  94. package/dist/elements/Hierarchy/Tree/TreeConnector.js.map +1 -0
  95. package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts.map +1 -0
  96. package/dist/elements/Hierarchy/Tree/TreeFocusContext.js.map +1 -0
  97. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts +5 -0
  98. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -0
  99. package/dist/elements/{Tree → Hierarchy/Tree}/TreeNode/index.js +11 -4
  100. package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -0
  101. package/dist/elements/{Tree → Hierarchy/Tree}/TreeNode/index.scss +1 -1
  102. package/dist/elements/{HierarchyTree → Hierarchy/Tree}/index.d.ts +1 -0
  103. package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -0
  104. package/dist/elements/Hierarchy/Tree/index.js +305 -0
  105. package/dist/elements/Hierarchy/Tree/index.js.map +1 -0
  106. package/dist/elements/{Tree → Hierarchy/Tree}/index.scss +2 -5
  107. package/dist/elements/{Tree → Hierarchy/Tree}/types.d.ts +31 -22
  108. package/dist/elements/Hierarchy/Tree/types.d.ts.map +1 -0
  109. package/dist/elements/Hierarchy/Tree/types.js.map +1 -0
  110. package/dist/elements/Hierarchy/Tree/useChildren.d.ts +32 -0
  111. package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -0
  112. package/dist/elements/{Tree → Hierarchy/Tree}/useChildren.js +52 -32
  113. package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -0
  114. package/dist/elements/Link/index.d.ts.map +1 -1
  115. package/dist/elements/LoadMoreRow/index.js +1 -1
  116. package/dist/elements/LoadMoreRow/index.js.map +1 -1
  117. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  118. package/dist/elements/PublishButton/index.js +3 -1
  119. package/dist/elements/PublishButton/index.js.map +1 -1
  120. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  121. package/dist/elements/RelationshipTable/index.js +14 -9
  122. package/dist/elements/RelationshipTable/index.js.map +1 -1
  123. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +1 -1
  124. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
  125. package/dist/elements/Toasts/fieldErrors.d.ts +4 -0
  126. package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
  127. package/dist/elements/Toasts/fieldErrors.js +4 -2
  128. package/dist/elements/Toasts/fieldErrors.js.map +1 -1
  129. package/dist/elements/Toasts/fieldErrors.spec.js +46 -0
  130. package/dist/elements/Toasts/fieldErrors.spec.js.map +1 -0
  131. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  132. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +8 -6
  133. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  134. package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
  135. package/dist/elements/WhereBuilder/field-types.js +2 -5
  136. package/dist/elements/WhereBuilder/field-types.js.map +1 -1
  137. package/dist/exports/client/{DatePicker-CL2EGBVQ.js → DatePicker-T2DMDMM5.js} +2 -2
  138. package/dist/exports/client/chunk-WDZJLNNB.js +29 -0
  139. package/dist/exports/client/{chunk-SH42NW5R.js.map → chunk-WDZJLNNB.js.map} +4 -4
  140. package/dist/exports/client/index.d.ts +11 -15
  141. package/dist/exports/client/index.d.ts.map +1 -1
  142. package/dist/exports/client/index.js +26 -26
  143. package/dist/exports/client/index.js.map +4 -4
  144. package/dist/exports/rsc/index.d.ts +3 -3
  145. package/dist/exports/rsc/index.d.ts.map +1 -1
  146. package/dist/exports/rsc/index.js +3 -3
  147. package/dist/exports/rsc/index.js.map +1 -1
  148. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  149. package/dist/forms/Form/mergeServerFormState.js +101 -24
  150. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  151. package/dist/icons/TableView/index.d.ts +3 -0
  152. package/dist/icons/TableView/index.d.ts.map +1 -0
  153. package/dist/icons/TableView/index.js +16 -0
  154. package/dist/icons/TableView/index.js.map +1 -0
  155. package/dist/providers/Hierarchy/index.d.ts.map +1 -1
  156. package/dist/providers/Hierarchy/index.js +29 -8
  157. package/dist/providers/Hierarchy/index.js.map +1 -1
  158. package/dist/providers/Hierarchy/types.d.ts +10 -5
  159. package/dist/providers/Hierarchy/types.d.ts.map +1 -1
  160. package/dist/providers/Hierarchy/types.js.map +1 -1
  161. package/dist/providers/SidebarTabs/index.d.ts +19 -0
  162. package/dist/providers/SidebarTabs/index.d.ts.map +1 -0
  163. package/dist/providers/SidebarTabs/index.js +24 -0
  164. package/dist/providers/SidebarTabs/index.js.map +1 -0
  165. package/dist/styles.css +1 -1
  166. package/dist/views/Edit/index.d.ts.map +1 -1
  167. package/dist/views/Edit/index.js +12 -3
  168. package/dist/views/Edit/index.js.map +1 -1
  169. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -1
  170. package/dist/views/HierarchyList/DocumentListSelection/index.js +147 -86
  171. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
  172. package/dist/views/HierarchyList/HierarchyListHeader/index.js +7 -6
  173. package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -1
  174. package/dist/views/HierarchyList/HierarchyTable/index.d.ts +7 -3
  175. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
  176. package/dist/views/HierarchyList/HierarchyTable/index.js +19 -18
  177. package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
  178. package/dist/views/HierarchyList/index.d.ts.map +1 -1
  179. package/dist/views/HierarchyList/index.js +3 -1
  180. package/dist/views/HierarchyList/index.js.map +1 -1
  181. package/package.json +4 -4
  182. package/dist/elements/HierarchyButton/index.d.ts.map +0 -1
  183. package/dist/elements/HierarchyButton/index.js.map +0 -1
  184. package/dist/elements/HierarchyButton/index.server.d.ts.map +0 -1
  185. package/dist/elements/HierarchyButton/index.server.js.map +0 -1
  186. package/dist/elements/HierarchyColumnBrowser/Column/index.d.ts.map +0 -1
  187. package/dist/elements/HierarchyColumnBrowser/Column/index.js.map +0 -1
  188. package/dist/elements/HierarchyColumnBrowser/ColumnItem/index.d.ts.map +0 -1
  189. package/dist/elements/HierarchyColumnBrowser/ColumnItem/index.js.map +0 -1
  190. package/dist/elements/HierarchyColumnBrowser/index.d.ts.map +0 -1
  191. package/dist/elements/HierarchyColumnBrowser/index.js.map +0 -1
  192. package/dist/elements/HierarchyColumnBrowser/types.d.ts.map +0 -1
  193. package/dist/elements/HierarchyColumnBrowser/types.js.map +0 -1
  194. package/dist/elements/HierarchyDrawer/Drawer/index.d.ts.map +0 -1
  195. package/dist/elements/HierarchyDrawer/Drawer/index.js.map +0 -1
  196. package/dist/elements/HierarchyDrawer/fetchAncestorPath.d.ts.map +0 -1
  197. package/dist/elements/HierarchyDrawer/fetchAncestorPath.js.map +0 -1
  198. package/dist/elements/HierarchyDrawer/index.d.ts.map +0 -1
  199. package/dist/elements/HierarchyDrawer/index.js.map +0 -1
  200. package/dist/elements/HierarchyDrawer/types.d.ts.map +0 -1
  201. package/dist/elements/HierarchyDrawer/types.js.map +0 -1
  202. package/dist/elements/HierarchyField/SelectedHierarchies.d.ts.map +0 -1
  203. package/dist/elements/HierarchyField/SelectedHierarchies.js.map +0 -1
  204. package/dist/elements/HierarchyField/index.client.d.ts.map +0 -1
  205. package/dist/elements/HierarchyField/index.client.js.map +0 -1
  206. package/dist/elements/HierarchyField/index.server.d.ts.map +0 -1
  207. package/dist/elements/HierarchyField/index.server.js.map +0 -1
  208. package/dist/elements/HierarchySearch/HierarchySearchInput.d.ts.map +0 -1
  209. package/dist/elements/HierarchySearch/HierarchySearchInput.js.map +0 -1
  210. package/dist/elements/HierarchySearch/HierarchySearchResultItem.d.ts.map +0 -1
  211. package/dist/elements/HierarchySearch/HierarchySearchResultItem.js.map +0 -1
  212. package/dist/elements/HierarchySearch/HierarchySearchResults.d.ts.map +0 -1
  213. package/dist/elements/HierarchySearch/HierarchySearchResults.js.map +0 -1
  214. package/dist/elements/HierarchySearch/index.d.ts.map +0 -1
  215. package/dist/elements/HierarchySearch/index.js.map +0 -1
  216. package/dist/elements/HierarchySearch/types.d.ts.map +0 -1
  217. package/dist/elements/HierarchySearch/types.js.map +0 -1
  218. package/dist/elements/HierarchySearch/useHierarchySearch.d.ts.map +0 -1
  219. package/dist/elements/HierarchySearch/useHierarchySearch.js.map +0 -1
  220. package/dist/elements/HierarchyTree/HierarchySidebarTab.d.ts.map +0 -1
  221. package/dist/elements/HierarchyTree/HierarchySidebarTab.js +0 -156
  222. package/dist/elements/HierarchyTree/HierarchySidebarTab.js.map +0 -1
  223. package/dist/elements/HierarchyTree/HierarchySidebarTab.server.d.ts.map +0 -1
  224. package/dist/elements/HierarchyTree/HierarchySidebarTab.server.js.map +0 -1
  225. package/dist/elements/HierarchyTree/LoadMore/LoadMoreButton.d.ts.map +0 -1
  226. package/dist/elements/HierarchyTree/LoadMore/LoadMoreButton.js +0 -36
  227. package/dist/elements/HierarchyTree/LoadMore/LoadMoreButton.js.map +0 -1
  228. package/dist/elements/HierarchyTree/LoadMore/index.d.ts.map +0 -1
  229. package/dist/elements/HierarchyTree/LoadMore/index.js +0 -29
  230. package/dist/elements/HierarchyTree/LoadMore/index.js.map +0 -1
  231. package/dist/elements/HierarchyTree/LoadMore/index.scss +0 -26
  232. package/dist/elements/HierarchyTree/TreeConnector.d.ts.map +0 -1
  233. package/dist/elements/HierarchyTree/TreeConnector.js.map +0 -1
  234. package/dist/elements/HierarchyTree/TreeFocusContext.d.ts.map +0 -1
  235. package/dist/elements/HierarchyTree/TreeFocusContext.js.map +0 -1
  236. package/dist/elements/HierarchyTree/TreeNode/index.d.ts +0 -5
  237. package/dist/elements/HierarchyTree/TreeNode/index.d.ts.map +0 -1
  238. package/dist/elements/HierarchyTree/TreeNode/index.js +0 -201
  239. package/dist/elements/HierarchyTree/TreeNode/index.js.map +0 -1
  240. package/dist/elements/HierarchyTree/TreeNode/index.scss +0 -99
  241. package/dist/elements/HierarchyTree/index.d.ts.map +0 -1
  242. package/dist/elements/HierarchyTree/index.js +0 -64
  243. package/dist/elements/HierarchyTree/index.js.map +0 -1
  244. package/dist/elements/HierarchyTree/index.scss +0 -42
  245. package/dist/elements/HierarchyTree/types.d.ts +0 -55
  246. package/dist/elements/HierarchyTree/types.d.ts.map +0 -1
  247. package/dist/elements/HierarchyTree/types.js.map +0 -1
  248. package/dist/elements/HierarchyTree/useChildren.d.ts +0 -26
  249. package/dist/elements/HierarchyTree/useChildren.d.ts.map +0 -1
  250. package/dist/elements/HierarchyTree/useChildren.js +0 -150
  251. package/dist/elements/HierarchyTree/useChildren.js.map +0 -1
  252. package/dist/elements/HierarchyTree/useTreeState.d.ts +0 -9
  253. package/dist/elements/HierarchyTree/useTreeState.d.ts.map +0 -1
  254. package/dist/elements/HierarchyTree/useTreeState.js +0 -50
  255. package/dist/elements/HierarchyTree/useTreeState.js.map +0 -1
  256. package/dist/elements/HydrateHierarchyProvider/index.d.ts +0 -4
  257. package/dist/elements/HydrateHierarchyProvider/index.d.ts.map +0 -1
  258. package/dist/elements/HydrateHierarchyProvider/index.js +0 -67
  259. package/dist/elements/HydrateHierarchyProvider/index.js.map +0 -1
  260. package/dist/elements/MoveMany/index.d.ts.map +0 -1
  261. package/dist/elements/MoveMany/index.js.map +0 -1
  262. package/dist/elements/Tree/LoadMore/LoadMoreButton.d.ts +0 -8
  263. package/dist/elements/Tree/LoadMore/LoadMoreButton.d.ts.map +0 -1
  264. package/dist/elements/Tree/LoadMore/LoadMoreButton.js.map +0 -1
  265. package/dist/elements/Tree/LoadMore/index.d.ts +0 -12
  266. package/dist/elements/Tree/LoadMore/index.d.ts.map +0 -1
  267. package/dist/elements/Tree/LoadMore/index.js.map +0 -1
  268. package/dist/elements/Tree/TreeConnector.d.ts +0 -7
  269. package/dist/elements/Tree/TreeConnector.d.ts.map +0 -1
  270. package/dist/elements/Tree/TreeConnector.js +0 -23
  271. package/dist/elements/Tree/TreeConnector.js.map +0 -1
  272. package/dist/elements/Tree/TreeFocusContext.d.ts +0 -28
  273. package/dist/elements/Tree/TreeFocusContext.d.ts.map +0 -1
  274. package/dist/elements/Tree/TreeFocusContext.js +0 -140
  275. package/dist/elements/Tree/TreeFocusContext.js.map +0 -1
  276. package/dist/elements/Tree/TreeNode/index.d.ts +0 -5
  277. package/dist/elements/Tree/TreeNode/index.d.ts.map +0 -1
  278. package/dist/elements/Tree/TreeNode/index.js.map +0 -1
  279. package/dist/elements/Tree/index.d.ts +0 -5
  280. package/dist/elements/Tree/index.d.ts.map +0 -1
  281. package/dist/elements/Tree/index.js +0 -258
  282. package/dist/elements/Tree/index.js.map +0 -1
  283. package/dist/elements/Tree/types.d.ts.map +0 -1
  284. package/dist/elements/Tree/types.js +0 -2
  285. package/dist/elements/Tree/types.js.map +0 -1
  286. package/dist/elements/Tree/useChildren.d.ts +0 -25
  287. package/dist/elements/Tree/useChildren.d.ts.map +0 -1
  288. package/dist/elements/Tree/useChildren.js.map +0 -1
  289. package/dist/exports/client/chunk-SH42NW5R.js +0 -29
  290. /package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/Column/index.d.ts +0 -0
  291. /package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/ColumnItem/index.d.ts +0 -0
  292. /package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/index.scss +0 -0
  293. /package/dist/elements/{HierarchyColumnBrowser → Hierarchy/ColumnBrowser}/types.js +0 -0
  294. /package/dist/elements/{HierarchyButton → Hierarchy/DocHeaderButton}/index.d.ts +0 -0
  295. /package/dist/elements/{HierarchyButton → Hierarchy/DocHeaderButton}/index.scss +0 -0
  296. /package/dist/elements/{HierarchyButton → Hierarchy/DocHeaderButton}/index.server.d.ts +0 -0
  297. /package/dist/elements/{HierarchyDrawer → Hierarchy/Drawer}/fetchAncestorPath.d.ts +0 -0
  298. /package/dist/elements/{HierarchyDrawer → Hierarchy/Drawer}/fetchAncestorPath.js +0 -0
  299. /package/dist/elements/{HierarchyDrawer → Hierarchy}/Drawer/index.scss +0 -0
  300. /package/dist/elements/{HierarchyDrawer → Hierarchy/Drawer}/types.js +0 -0
  301. /package/dist/elements/{HierarchyField → Hierarchy/Field}/SelectedHierarchies.d.ts +0 -0
  302. /package/dist/elements/{HierarchyField → Hierarchy/Field}/index.client.d.ts +0 -0
  303. /package/dist/elements/{HierarchyField → Hierarchy/Field}/index.server.d.ts +0 -0
  304. /package/dist/elements/{HierarchySearch → Hierarchy/Search}/HierarchySearchInput.d.ts +0 -0
  305. /package/dist/elements/{HierarchySearch → Hierarchy/Search}/HierarchySearchResultItem.d.ts +0 -0
  306. /package/dist/elements/{HierarchySearch → Hierarchy/Search}/HierarchySearchResultItem.js +0 -0
  307. /package/dist/elements/{HierarchySearch → Hierarchy/Search}/HierarchySearchResults.d.ts +0 -0
  308. /package/dist/elements/{HierarchySearch → Hierarchy/Search}/index.d.ts +0 -0
  309. /package/dist/elements/{HierarchySearch → Hierarchy/Search}/types.d.ts +0 -0
  310. /package/dist/elements/{HierarchySearch → Hierarchy/Search}/types.js +0 -0
  311. /package/dist/elements/{HierarchySearch → Hierarchy/Search}/useHierarchySearch.d.ts +0 -0
  312. /package/dist/elements/{HierarchyTree → Hierarchy/Tree}/HierarchySidebarTab.server.d.ts +0 -0
  313. /package/dist/elements/{HierarchyTree → Hierarchy/Tree}/LoadMore/LoadMoreButton.d.ts +0 -0
  314. /package/dist/elements/{HierarchyTree → Hierarchy/Tree}/LoadMore/index.d.ts +0 -0
  315. /package/dist/elements/{Tree → Hierarchy/Tree}/LoadMore/index.scss +0 -0
  316. /package/dist/elements/{HierarchyTree → Hierarchy/Tree}/TreeConnector.d.ts +0 -0
  317. /package/dist/elements/{HierarchyTree → Hierarchy/Tree}/TreeConnector.js +0 -0
  318. /package/dist/elements/{HierarchyTree → Hierarchy/Tree}/TreeFocusContext.d.ts +0 -0
  319. /package/dist/elements/{HierarchyTree → Hierarchy/Tree}/TreeFocusContext.js +0 -0
  320. /package/dist/elements/{HierarchyTree → Hierarchy/Tree}/types.js +0 -0
  321. /package/dist/exports/client/{DatePicker-CL2EGBVQ.js.map → DatePicker-T2DMDMM5.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeFocusContext.js","names":["c","_c","createContext","use","useCallback","useEffect","useRef","useState","TreeFocusContext","undefined","TreeFocusProvider","children","focusedId","setFocusedId","itemsRef","Map","registerItem","item","current","set","id","unregisterItem","delete","moveFocus","direction","items","Array","from","values","length","sortedItems","filter","ref","sort","a","b","aElement","bElement","position","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","currentIndex","findIndex","nextIndex","Math","min","max","nextItem","focus","_jsx","value","useTreeFocus","context","Error","useFocusableItem","t0","$","type","isFocused","isFirstItemEver","t1","t2","t3","handleFocus","tabIndex","t4"],"sources":["../../../../src/elements/Hierarchy/Tree/TreeFocusContext.tsx"],"sourcesContent":["'use client'\n\nimport type React from 'react'\n\nimport { createContext, use, useCallback, useEffect, useRef, useState } from 'react'\n\ntype FocusableItem = {\n id: string\n ref: React.RefObject<HTMLElement>\n type: 'load-more' | 'node'\n}\n\ntype TreeFocusContextType = {\n focusedId: null | string\n moveFocus: (direction: 'down' | 'up') => void\n registerItem: (item: FocusableItem) => void\n setFocusedId: (id: null | string) => void\n unregisterItem: (id: string) => void\n}\n\nconst TreeFocusContext = createContext<TreeFocusContextType | undefined>(undefined)\n\nexport const TreeFocusProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [focusedId, setFocusedId] = useState<null | string>(null)\n const itemsRef = useRef<Map<string, FocusableItem>>(new Map())\n\n const registerItem = useCallback((item: FocusableItem) => {\n itemsRef.current.set(item.id, item)\n }, [])\n\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current.delete(id)\n }, [])\n\n const moveFocus = useCallback(\n (direction: 'down' | 'up') => {\n const items = Array.from(itemsRef.current.values())\n if (items.length === 0) {\n return\n }\n\n // Sort items by their DOM position to ensure correct navigation order\n const sortedItems = items\n .filter((item) => item.ref.current)\n .sort((a, b) => {\n const aElement = a.ref.current\n const bElement = b.ref.current\n if (!aElement || !bElement) {\n return 0\n }\n\n const position = aElement.compareDocumentPosition(bElement)\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1\n }\n return 0\n })\n\n const currentIndex = focusedId ? sortedItems.findIndex((item) => item.id === focusedId) : -1\n\n let nextIndex: number\n if (direction === 'down') {\n nextIndex = currentIndex === -1 ? 0 : Math.min(currentIndex + 1, sortedItems.length - 1)\n } else {\n nextIndex = Math.max(currentIndex - 1, 0)\n }\n\n const nextItem = sortedItems[nextIndex]\n if (nextItem && nextItem.ref.current) {\n nextItem.ref.current.focus()\n setFocusedId(nextItem.id)\n }\n },\n [focusedId],\n )\n\n return (\n <TreeFocusContext\n value={{\n focusedId,\n moveFocus,\n registerItem,\n setFocusedId,\n unregisterItem,\n }}\n >\n {children}\n </TreeFocusContext>\n )\n}\n\nexport const useTreeFocus = () => {\n const context = use(TreeFocusContext)\n if (!context) {\n throw new Error('useTreeFocus must be used within TreeFocusProvider')\n }\n return context\n}\n\nexport const useFocusableItem = ({\n id,\n type,\n ref,\n}: {\n id: string\n ref: React.RefObject<HTMLElement>\n type: 'load-more' | 'node'\n}) => {\n const { focusedId, registerItem, setFocusedId, unregisterItem } = useTreeFocus()\n const isFocused = focusedId === id\n const isFirstItemEver = focusedId === null\n\n useEffect(() => {\n registerItem({ id, type, ref })\n return () => {\n unregisterItem(id)\n }\n }, [id, ref, type, registerItem, unregisterItem])\n\n const handleFocus = useCallback(() => {\n setFocusedId(id)\n }, [id, setFocusedId])\n\n // Roving tabindex: focused item gets 0, first item (when nothing focused) gets 0, all others get -1\n const tabIndex = isFocused ? 0 : isFirstItemEver ? 0 : -1\n\n return {\n handleFocus,\n isFocused,\n tabIndex,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { TreeNodeProps } from '../types.js';
3
+ import './index.scss';
4
+ export declare const TreeNode: ({ allPossibleTypeValues, baseFilter, cache, collectionSlug, depth, expandedNodes, filterByCollections, limit, node, onSelect, onToggle, parentFieldName, selected, selectedNodeId, typeFieldName, useAsTitle, }: TreeNodeProps) => React.JSX.Element;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/Hierarchy/Tree/TreeNode/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAQhD,OAAO,cAAc,CAAA;AAqBrB,eAAO,MAAM,QAAQ,oNAiBlB,aAAa,sBAoMf,CAAA"}
@@ -2,9 +2,9 @@
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
4
  import React, { useCallback, useRef } from 'react';
5
- import { Spinner } from '../../../elements/Spinner/index.js';
6
- import { ChevronIcon } from '../../../icons/Chevron/index.js';
7
- import { useTranslation } from '../../../providers/Translation/index.js';
5
+ import { Spinner } from '../../../../elements/Spinner/index.js';
6
+ import { ChevronIcon } from '../../../../icons/Chevron/index.js';
7
+ import { useTranslation } from '../../../../providers/Translation/index.js';
8
8
  import { LoadMore } from '../LoadMore/index.js';
9
9
  import { useFocusableItem, useTreeFocus } from '../TreeFocusContext.js';
10
10
  import { useChildren } from '../useChildren.js';
@@ -25,6 +25,7 @@ const getDocumentTitle = (doc, useAsTitle) => {
25
25
  };
26
26
  export const TreeNode = ({
27
27
  allPossibleTypeValues,
28
+ baseFilter,
28
29
  cache,
29
30
  collectionSlug,
30
31
  depth = 0,
@@ -52,10 +53,12 @@ export const TreeNode = ({
52
53
  children,
53
54
  hasMore,
54
55
  isLoading,
56
+ load,
55
57
  loadMore: loadMoreFromHook,
56
58
  totalDocs
57
59
  } = useChildren({
58
60
  allPossibleTypeValues,
61
+ baseFilter,
59
62
  cache,
60
63
  collectionSlug,
61
64
  enabled: expanded,
@@ -96,10 +99,13 @@ export const TreeNode = ({
96
99
  const hasChildren = node.hasChildren === true || (expanded && children !== null ? children.length > 0 : true);
97
100
  const handleToggleClick = useCallback(e => {
98
101
  e.stopPropagation();
102
+ if (!expanded) {
103
+ void load();
104
+ }
99
105
  onToggle({
100
106
  id: node.id
101
107
  });
102
- }, [node.id, onToggle]);
108
+ }, [node.id, onToggle, expanded, load]);
103
109
  const handleSelectClick = useCallback(() => {
104
110
  onSelect?.({
105
111
  id: node.id
@@ -185,6 +191,7 @@ export const TreeNode = ({
185
191
  const childTitle = getDocumentTitle(child, useAsTitle);
186
192
  return /*#__PURE__*/_jsx(TreeNode, {
187
193
  allPossibleTypeValues: allPossibleTypeValues,
194
+ baseFilter: baseFilter,
188
195
  cache: cache,
189
196
  collectionSlug: collectionSlug,
190
197
  depth: depth + 1,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["React","useCallback","useRef","Spinner","ChevronIcon","useTranslation","LoadMore","useFocusableItem","useTreeFocus","useChildren","DEFAULT_TREE_LIMIT","baseClass","getDocumentTitle","doc","useAsTitle","docId","id","idStr","String","value","TreeNode","allPossibleTypeValues","baseFilter","cache","collectionSlug","depth","expandedNodes","filterByCollections","limit","node","onSelect","onToggle","parentFieldName","selected","selectedNodeId","typeFieldName","t","expanded","has","nodeRef","setFocusedId","children","hasMore","isLoading","load","loadMore","loadMoreFromHook","totalDocs","enabled","parentId","handleLoadMore","newDocs","length","firstNewDoc","handleFocus","isFocused","tabIndex","type","ref","useEffect","current","document","activeElement","focus","hasChildren","handleToggleClick","e","stopPropagation","handleSelectClick","handleKeyDown","key","preventDefault","_jsxs","undefined","className","onFocus","onKeyDown","role","style","filter","Boolean","join","_jsx","onClick","onMouseDown","direction","title","loadingText","size","_Fragment","map","child","childData","childId","childTitle","currentCount","onLoadMore"],"sources":["../../../../../src/elements/Hierarchy/Tree/TreeNode/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useRef } from 'react'\n\nimport type { TreeNodeProps } from '../types.js'\n\nimport { Spinner } from '../../../../elements/Spinner/index.js'\nimport { ChevronIcon } from '../../../../icons/Chevron/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { LoadMore } from '../LoadMore/index.js'\nimport { useFocusableItem, useTreeFocus } from '../TreeFocusContext.js'\nimport { useChildren } from '../useChildren.js'\nimport './index.scss'\n\nconst DEFAULT_TREE_LIMIT = 10\n\nconst baseClass = 'tree-node'\n\nconst getDocumentTitle = (doc: Record<string, unknown>, useAsTitle: string | undefined): string => {\n const docId: number | string = doc.id as number | string\n const idStr = typeof docId === 'number' ? String(docId) : docId\n\n if (!useAsTitle) {\n return idStr\n }\n\n const value = doc[useAsTitle]\n if (value && (typeof value === 'string' || typeof value === 'number')) {\n return String(value)\n }\n return idStr\n}\n\nexport const TreeNode = ({\n allPossibleTypeValues,\n baseFilter,\n cache,\n collectionSlug,\n depth = 0,\n expandedNodes,\n filterByCollections,\n limit = DEFAULT_TREE_LIMIT,\n node,\n onSelect,\n onToggle,\n parentFieldName,\n selected,\n selectedNodeId,\n typeFieldName,\n useAsTitle,\n}: TreeNodeProps) => {\n const { t } = useTranslation()\n const expanded = expandedNodes.has(node.id)\n const nodeRef = useRef<HTMLDivElement>(null)\n const { setFocusedId } = useTreeFocus()\n\n const {\n children,\n hasMore,\n isLoading,\n load,\n loadMore: loadMoreFromHook,\n totalDocs,\n } = useChildren({\n allPossibleTypeValues,\n baseFilter,\n cache,\n collectionSlug,\n enabled: expanded,\n filterByCollections,\n limit,\n parentFieldName,\n parentId: node.id,\n typeFieldName,\n useAsTitle,\n })\n\n const handleLoadMore = React.useCallback(async () => {\n const newDocs = await loadMoreFromHook()\n\n if (newDocs && newDocs.length > 0) {\n const firstNewDoc = newDocs[0]\n const docId: number | string = (firstNewDoc as { id: number | string }).id\n setFocusedId(`node-${docId}`)\n }\n }, [loadMoreFromHook, setFocusedId])\n\n const { handleFocus, isFocused, tabIndex } = useFocusableItem({\n id: `node-${node.id}`,\n type: 'node',\n ref: nodeRef,\n })\n\n // When focusedId points to this node, actually call .focus()\n React.useEffect(() => {\n if (isFocused && nodeRef.current && document.activeElement !== nodeRef.current) {\n nodeRef.current.focus()\n }\n }, [isFocused])\n\n // Determine if node has children:\n // - If explicitly set in data, use that\n // - If expanded and loaded, check the actual children\n // - Otherwise, assume it might have children (show chevron until proven otherwise)\n const hasChildren =\n node.hasChildren === true || (expanded && children !== null ? children.length > 0 : true)\n\n const handleToggleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n if (!expanded) {\n void load()\n }\n onToggle({ id: node.id })\n },\n [node.id, onToggle, expanded, load],\n )\n\n const handleSelectClick = useCallback(() => {\n onSelect?.({ id: node.id })\n }, [node.id, onSelect])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case ' ':\n case 'Enter':\n e.preventDefault()\n e.stopPropagation()\n handleSelectClick()\n break\n case 'ArrowLeft':\n e.preventDefault()\n e.stopPropagation()\n if (hasChildren && expanded) {\n onToggle({ id: node.id })\n }\n break\n case 'ArrowRight':\n e.preventDefault()\n e.stopPropagation()\n if (hasChildren && !expanded) {\n onToggle({ id: node.id })\n }\n break\n }\n },\n [hasChildren, expanded, handleSelectClick, onToggle, node.id],\n )\n\n return (\n <div\n aria-expanded={hasChildren ? expanded : undefined}\n aria-level={depth + 1}\n aria-selected={selected}\n className={baseClass}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n ref={nodeRef}\n role=\"treeitem\"\n style={{ '--tree-depth': depth } as React.CSSProperties}\n tabIndex={tabIndex}\n >\n <div\n className={[`${baseClass}__content`, selected && `${baseClass}__content--selected`]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${baseClass}__indicator`} />\n {hasChildren ? (\n <button\n aria-label={expanded ? t('general:collapse') : t('general:open')}\n className={`${baseClass}__toggle`}\n onClick={handleToggleClick}\n onMouseDown={(e) => e.preventDefault()}\n tabIndex={-1}\n type=\"button\"\n >\n <ChevronIcon direction={expanded ? 'down' : 'right'} />\n </button>\n ) : (\n <div className={`${baseClass}__toggle-spacer`} />\n )}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions -- keyboard handled by parent */}\n <span\n className={`${baseClass}__title`}\n onClick={handleSelectClick}\n onMouseDown={(e) => e.preventDefault()}\n title={node.title}\n >\n {node.title}\n </span>\n {isLoading && expanded && (\n <span className={`${baseClass}__loading`}>\n <Spinner loadingText={null} size=\"small\" />\n </span>\n )}\n </div>\n\n {expanded && children && children.length > 0 && (\n <>\n <div className={`${baseClass}__children`} role=\"group\">\n {children.map((child) => {\n const childData = child as { id: number | string }\n const childId = childData.id\n const childTitle = getDocumentTitle(child, useAsTitle)\n return (\n <TreeNode\n allPossibleTypeValues={allPossibleTypeValues}\n baseFilter={baseFilter}\n cache={cache}\n collectionSlug={collectionSlug}\n depth={depth + 1}\n expandedNodes={expandedNodes}\n filterByCollections={filterByCollections}\n key={String(childId)}\n limit={limit}\n node={{\n id: childId,\n hasChildren: true,\n title: childTitle,\n }}\n onSelect={onSelect}\n onToggle={onToggle}\n parentFieldName={parentFieldName}\n selected={String(childId) === String(selectedNodeId)}\n selectedNodeId={selectedNodeId}\n typeFieldName={typeFieldName}\n useAsTitle={useAsTitle}\n />\n )\n })}\n </div>\n {hasMore && (\n <LoadMore\n currentCount={children.length}\n depth={depth + 1}\n id={`load-more-${node.id}`}\n onLoadMore={handleLoadMore}\n totalDocs={totalDocs}\n />\n )}\n </>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- @import '../../../scss/styles.scss';
1
+ @import '../../../../scss/styles.scss';
2
2
 
3
3
  .tree-node {
4
4
  // Remove default focus outline from treeitem - we style the content instead
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
2
  import type { HierarchyTreeProps } from './types.js';
3
+ import './index.scss';
3
4
  export declare const HierarchyTree: React.FC<HierarchyTreeProps>;
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA8C,MAAM,OAAO,CAAA;AAElE,OAAO,KAAK,EAAkB,kBAAkB,EAAgB,MAAM,YAAY,CAAA;AAYlF,OAAO,cAAc,CAAA;AAkUrB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAMtD,CAAA"}
@@ -0,0 +1,305 @@
1
+ 'use client';
2
+
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ import { getTranslation } from '@payloadcms/translations';
5
+ import { useRouter } from 'next/navigation.js';
6
+ import { DEFAULT_HIERARCHY_TREE_LIMIT } from 'payload/shared';
7
+ import React, { useCallback, useId, useMemo, useRef } from 'react';
8
+ import { TagIcon } from '../../../icons/Tag/index.js';
9
+ import { useConfig } from '../../../providers/Config/index.js';
10
+ import { useHierarchy } from '../../../providers/Hierarchy/index.js';
11
+ import { useTranslation } from '../../../providers/Translation/index.js';
12
+ import { CreateDocumentButton } from '../../CreateDocumentButton/index.js';
13
+ import { DelayedSpinner } from '../../DelayedSpinner/index.js';
14
+ import { LoadMore } from './LoadMore/index.js';
15
+ import { TreeFocusProvider, useTreeFocus } from './TreeFocusContext.js';
16
+ import { TreeNode } from './TreeNode/index.js';
17
+ import { useChildren } from './useChildren.js';
18
+ import './index.scss';
19
+ const baseClass = 'tree';
20
+ const getDocumentTitle = (doc, useAsTitle) => {
21
+ const docId = doc.id;
22
+ const idStr = typeof docId === 'number' ? String(docId) : docId;
23
+ if (!useAsTitle) {
24
+ return idStr;
25
+ }
26
+ const value = doc[useAsTitle];
27
+ if (value && (typeof value === 'string' || typeof value === 'number')) {
28
+ return String(value);
29
+ }
30
+ return idStr;
31
+ };
32
+ const HierarchyTreeInner = ({
33
+ baseFilter,
34
+ collectionSlug,
35
+ filterByCollections,
36
+ icon,
37
+ initialData: initialDataProp,
38
+ initialExpandedNodes: initialExpandedNodesProp,
39
+ onNodeClick,
40
+ selectedNodeId,
41
+ useAsTitle: useAsTitleProp
42
+ }) => {
43
+ const {
44
+ moveFocus
45
+ } = useTreeFocus();
46
+ const router = useRouter();
47
+ const {
48
+ i18n,
49
+ t
50
+ } = useTranslation();
51
+ const {
52
+ getEntityConfig
53
+ } = useConfig();
54
+ const createDrawerSlug = `tree-create-${useId()}`;
55
+ const {
56
+ getExpandedNodesForCollection,
57
+ getTreeDataForCollection,
58
+ toggleNodeForCollection,
59
+ typeFieldName
60
+ } = useHierarchy();
61
+ const collectionConfig = getEntityConfig({
62
+ collectionSlug
63
+ });
64
+ const hierarchyConfig = collectionConfig.hierarchy && typeof collectionConfig.hierarchy === 'object' ? collectionConfig.hierarchy : undefined;
65
+ const parentFieldName = hierarchyConfig?.parentFieldName;
66
+ const treeLimit = hierarchyConfig?.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT;
67
+ const useAsTitle = useAsTitleProp ?? collectionConfig.admin?.useAsTitle;
68
+ const allPossibleTypeValues = useMemo(() => hierarchyConfig?.relatedCollections ? Object.keys(hierarchyConfig.relatedCollections) : undefined, [hierarchyConfig?.relatedCollections]);
69
+ const contextData = getTreeDataForCollection(collectionSlug);
70
+ const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : '';
71
+ const contextBaseFilterKey = contextData?.baseFilter ? JSON.stringify(contextData.baseFilter) : '';
72
+ const initialData = baseFilterKey === contextBaseFilterKey ? contextData ?? initialDataProp : initialDataProp;
73
+ // Tracks whether context has been seeded at least once since the last navigation.
74
+ // Resets when initialExpandedNodesProp changes (new array reference = navigation).
75
+ // Allows the memo to distinguish "not yet seeded" (fall back to prop) from
76
+ // "user collapsed all nodes" (trust empty context).
77
+ const contextSeededRef = useRef(false);
78
+ const lastInitialExpandedRef = useRef(initialExpandedNodesProp);
79
+ if (lastInitialExpandedRef.current !== initialExpandedNodesProp) {
80
+ lastInitialExpandedRef.current = initialExpandedNodesProp;
81
+ contextSeededRef.current = false;
82
+ }
83
+ const expandedNodes = useMemo(() => {
84
+ const contextExpanded = getExpandedNodesForCollection(collectionSlug);
85
+ if (contextExpanded.size > 0) {
86
+ contextSeededRef.current = true;
87
+ return contextExpanded;
88
+ }
89
+ if (contextSeededRef.current) {
90
+ // Context was seeded (had nodes since last navigation) — trust empty set as "all collapsed"
91
+ return contextExpanded;
92
+ }
93
+ return initialExpandedNodesProp ? new Set(initialExpandedNodesProp) : contextExpanded;
94
+ }, [collectionSlug, getExpandedNodesForCollection, initialExpandedNodesProp]);
95
+ const handleToggleNode = useCallback(({
96
+ id
97
+ }) => {
98
+ // Mark context as seeded so the memo never falls back to the prop after this interaction.
99
+ // Capture the previous value first — seeding is only needed on the very first interaction.
100
+ const wasSeeded = contextSeededRef.current;
101
+ contextSeededRef.current = true;
102
+ const contextExpanded_0 = getExpandedNodesForCollection(collectionSlug);
103
+ if (!wasSeeded && contextExpanded_0.size === 0 && initialExpandedNodesProp?.length) {
104
+ // Context not yet seeded. Seed it with all initial nodes, applying the toggle correctly:
105
+ // exclude the target if collapsing, include it if expanding.
106
+ const initialSet = new Set(initialExpandedNodesProp.map(String));
107
+ const isCurrentlyExpanded = initialSet.has(String(id));
108
+ for (const nodeId of initialExpandedNodesProp) {
109
+ if (!isCurrentlyExpanded || String(nodeId) !== String(id)) {
110
+ toggleNodeForCollection(collectionSlug, nodeId);
111
+ }
112
+ }
113
+ if (!isCurrentlyExpanded) {
114
+ toggleNodeForCollection(collectionSlug, id);
115
+ }
116
+ return;
117
+ }
118
+ toggleNodeForCollection(collectionSlug, id);
119
+ }, [collectionSlug, getExpandedNodesForCollection, initialExpandedNodesProp, toggleNodeForCollection]);
120
+ // Pre-populate cache with initialData synchronously before first render
121
+ const childrenCache = useRef(new Map());
122
+ const prevBaseFilterKeyRef = useRef(baseFilterKey);
123
+ if (prevBaseFilterKeyRef.current !== baseFilterKey) {
124
+ prevBaseFilterKeyRef.current = baseFilterKey;
125
+ childrenCache.current.clear();
126
+ }
127
+ useMemo(() => {
128
+ if (!initialData || initialData.docs.length === 0) {
129
+ return;
130
+ }
131
+ const docsByParent = new Map();
132
+ for (const doc of initialData.docs) {
133
+ const parentId = doc[parentFieldName] || 'null';
134
+ const parentKey = String(parentId);
135
+ if (!docsByParent.has(parentKey)) {
136
+ docsByParent.set(parentKey, []);
137
+ }
138
+ docsByParent.get(parentKey).push(doc);
139
+ }
140
+ const filterKey = filterByCollections?.length ? filterByCollections.slice().sort().join(',') : '';
141
+ for (const [parentKey_0, docs] of docsByParent) {
142
+ const cacheKey = `${collectionSlug}-${parentKey_0}-${filterKey}-${baseFilterKey}`;
143
+ const parentMeta = initialData.loadedParents[parentKey_0];
144
+ if (parentMeta) {
145
+ const loadedCount = parentMeta.loadedCount ?? docs.length;
146
+ childrenCache.current.set(cacheKey, {
147
+ children: docs,
148
+ hasMore: parentMeta.hasMore,
149
+ page: Math.ceil(loadedCount / treeLimit) || 1,
150
+ totalDocs: parentMeta.totalDocs
151
+ });
152
+ } else {
153
+ childrenCache.current.set(cacheKey, {
154
+ children: docs,
155
+ hasMore: false,
156
+ page: 1,
157
+ totalDocs: docs.length
158
+ });
159
+ }
160
+ }
161
+ }, [initialData, filterByCollections, parentFieldName, collectionSlug, treeLimit, baseFilterKey]);
162
+ const treeRef = useRef(null);
163
+ const {
164
+ children: rootNodes,
165
+ hasMore,
166
+ isLoading,
167
+ loadMore: loadMoreFromHook,
168
+ refresh,
169
+ totalDocs
170
+ } = useChildren({
171
+ allPossibleTypeValues,
172
+ baseFilter,
173
+ cache: childrenCache,
174
+ collectionSlug,
175
+ enabled: true,
176
+ filterByCollections,
177
+ initialData,
178
+ limit: treeLimit,
179
+ parentFieldName,
180
+ parentId: 'null',
181
+ typeFieldName,
182
+ useAsTitle
183
+ });
184
+ const handleLoadMore = useCallback(async () => {
185
+ await loadMoreFromHook();
186
+ }, [loadMoreFromHook]);
187
+ const handleNodeClick = useCallback(({
188
+ id: id_0
189
+ }) => {
190
+ onNodeClick?.({
191
+ id: id_0
192
+ });
193
+ }, [onNodeClick]);
194
+ const handleTreeKeyDown = useCallback(e => {
195
+ if (e.key === 'ArrowDown') {
196
+ e.preventDefault();
197
+ moveFocus('down');
198
+ } else if (e.key === 'ArrowUp') {
199
+ e.preventDefault();
200
+ moveFocus('up');
201
+ }
202
+ }, [moveFocus]);
203
+ if (isLoading && !rootNodes) {
204
+ return /*#__PURE__*/_jsx("div", {
205
+ className: baseClass,
206
+ children: /*#__PURE__*/_jsx(DelayedSpinner, {
207
+ baseClass: baseClass,
208
+ isLoading: true
209
+ })
210
+ });
211
+ }
212
+ if (!rootNodes || rootNodes.length === 0) {
213
+ const collectionLabel = getEntityConfig({
214
+ collectionSlug
215
+ });
216
+ return /*#__PURE__*/_jsx("div", {
217
+ className: baseClass,
218
+ children: /*#__PURE__*/_jsx(CreateDocumentButton, {
219
+ buttonStyle: "primary",
220
+ collections: [{
221
+ collectionSlug
222
+ }],
223
+ drawerSlug: createDrawerSlug,
224
+ label: t('general:createNewLabel', {
225
+ label: getTranslation(collectionLabel.labels.singular, i18n)
226
+ }),
227
+ onSave: async () => {
228
+ await refresh();
229
+ router.refresh();
230
+ }
231
+ })
232
+ });
233
+ }
234
+ const isAllSelected = selectedNodeId === null;
235
+ const handleAllClick = () => onNodeClick?.({
236
+ id: null
237
+ });
238
+ return /*#__PURE__*/_jsxs("div", {
239
+ className: baseClass,
240
+ onKeyDown: handleTreeKeyDown,
241
+ ref: treeRef,
242
+ role: "tree",
243
+ tabIndex: -1,
244
+ children: [/*#__PURE__*/_jsxs("div", {
245
+ "aria-selected": isAllSelected,
246
+ className: [`${baseClass}__all-option`, isAllSelected && `${baseClass}__all-option--selected`].filter(Boolean).join(' '),
247
+ onClick: handleAllClick,
248
+ onKeyDown: e_0 => {
249
+ if (e_0.key === 'Enter' || e_0.key === ' ') {
250
+ e_0.preventDefault();
251
+ handleAllClick();
252
+ }
253
+ },
254
+ role: "treeitem",
255
+ tabIndex: 0,
256
+ children: [icon || /*#__PURE__*/_jsx(TagIcon, {
257
+ color: "muted"
258
+ }), /*#__PURE__*/_jsxs("span", {
259
+ children: [t('general:all'), ' ', getTranslation(getEntityConfig({
260
+ collectionSlug
261
+ })?.labels?.plural, i18n)]
262
+ })]
263
+ }), rootNodes.map(node => {
264
+ const nodeId_0 = node.id;
265
+ const nodeIdStr = typeof nodeId_0 === 'number' ? String(nodeId_0) : nodeId_0;
266
+ const nodeTitle = getDocumentTitle(node, useAsTitle);
267
+ return /*#__PURE__*/_jsx(TreeNode, {
268
+ allPossibleTypeValues: allPossibleTypeValues,
269
+ baseFilter: baseFilter,
270
+ cache: childrenCache,
271
+ collectionSlug: collectionSlug,
272
+ depth: 0,
273
+ expandedNodes: expandedNodes,
274
+ filterByCollections: filterByCollections,
275
+ limit: treeLimit,
276
+ node: {
277
+ id: nodeId_0,
278
+ hasChildren: true,
279
+ title: nodeTitle
280
+ },
281
+ onSelect: handleNodeClick,
282
+ onToggle: handleToggleNode,
283
+ parentFieldName: parentFieldName,
284
+ selected: nodeIdStr === String(selectedNodeId),
285
+ selectedNodeId: selectedNodeId,
286
+ typeFieldName: typeFieldName,
287
+ useAsTitle: useAsTitle
288
+ }, nodeIdStr);
289
+ }), hasMore && /*#__PURE__*/_jsx(LoadMore, {
290
+ currentCount: rootNodes.length,
291
+ depth: 0,
292
+ id: "load-more-root",
293
+ onLoadMore: handleLoadMore,
294
+ totalDocs: totalDocs
295
+ })]
296
+ });
297
+ };
298
+ export const HierarchyTree = props => {
299
+ return /*#__PURE__*/_jsx(TreeFocusProvider, {
300
+ children: /*#__PURE__*/_jsx(HierarchyTreeInner, {
301
+ ...props
302
+ })
303
+ });
304
+ };
305
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["getTranslation","useRouter","DEFAULT_HIERARCHY_TREE_LIMIT","React","useCallback","useId","useMemo","useRef","TagIcon","useConfig","useHierarchy","useTranslation","CreateDocumentButton","DelayedSpinner","LoadMore","TreeFocusProvider","useTreeFocus","TreeNode","useChildren","baseClass","getDocumentTitle","doc","useAsTitle","docId","id","idStr","String","value","HierarchyTreeInner","baseFilter","collectionSlug","filterByCollections","icon","initialData","initialDataProp","initialExpandedNodes","initialExpandedNodesProp","onNodeClick","selectedNodeId","useAsTitleProp","moveFocus","router","i18n","t","getEntityConfig","createDrawerSlug","getExpandedNodesForCollection","getTreeDataForCollection","toggleNodeForCollection","typeFieldName","collectionConfig","hierarchyConfig","hierarchy","undefined","parentFieldName","treeLimit","admin","allPossibleTypeValues","relatedCollections","Object","keys","contextData","baseFilterKey","JSON","stringify","contextBaseFilterKey","contextSeededRef","lastInitialExpandedRef","current","expandedNodes","contextExpanded","size","Set","handleToggleNode","wasSeeded","length","initialSet","map","isCurrentlyExpanded","has","nodeId","childrenCache","Map","prevBaseFilterKeyRef","clear","docs","docsByParent","parentId","parentKey","set","get","push","filterKey","slice","sort","join","cacheKey","parentMeta","loadedParents","loadedCount","children","hasMore","page","Math","ceil","totalDocs","treeRef","rootNodes","isLoading","loadMore","loadMoreFromHook","refresh","cache","enabled","limit","handleLoadMore","handleNodeClick","handleTreeKeyDown","e","key","preventDefault","_jsx","className","collectionLabel","buttonStyle","collections","drawerSlug","label","labels","singular","onSave","isAllSelected","handleAllClick","_jsxs","onKeyDown","ref","role","tabIndex","filter","Boolean","onClick","color","plural","node","nodeIdStr","nodeTitle","depth","hasChildren","title","onSelect","onToggle","selected","currentCount","onLoadMore","HierarchyTree","props"],"sources":["../../../../src/elements/Hierarchy/Tree/index.tsx"],"sourcesContent":["'use client'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport { DEFAULT_HIERARCHY_TREE_LIMIT } from 'payload/shared'\nimport React, { useCallback, useId, useMemo, useRef } from 'react'\n\nimport type { CachedChildren, HierarchyTreeProps, TreeDocument } from './types.js'\n\nimport { TagIcon } from '../../../icons/Tag/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useHierarchy } from '../../../providers/Hierarchy/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { CreateDocumentButton } from '../../CreateDocumentButton/index.js'\nimport { DelayedSpinner } from '../../DelayedSpinner/index.js'\nimport { LoadMore } from './LoadMore/index.js'\nimport { TreeFocusProvider, useTreeFocus } from './TreeFocusContext.js'\nimport { TreeNode } from './TreeNode/index.js'\nimport { useChildren } from './useChildren.js'\nimport './index.scss'\n\nconst baseClass = 'tree'\n\nconst getDocumentTitle = (doc: TreeDocument, useAsTitle: string | undefined): string => {\n const docId: number | string = doc.id\n const idStr = typeof docId === 'number' ? String(docId) : docId\n\n if (!useAsTitle) {\n return idStr\n }\n\n const value = doc[useAsTitle]\n if (value && (typeof value === 'string' || typeof value === 'number')) {\n return String(value)\n }\n return idStr\n}\n\nconst HierarchyTreeInner: React.FC<HierarchyTreeProps> = ({\n baseFilter,\n collectionSlug,\n filterByCollections,\n icon,\n initialData: initialDataProp,\n initialExpandedNodes: initialExpandedNodesProp,\n onNodeClick,\n selectedNodeId,\n useAsTitle: useAsTitleProp,\n}) => {\n const { moveFocus } = useTreeFocus()\n const router = useRouter()\n const { i18n, t } = useTranslation()\n const { getEntityConfig } = useConfig()\n const createDrawerSlug = `tree-create-${useId()}`\n\n const {\n getExpandedNodesForCollection,\n getTreeDataForCollection,\n toggleNodeForCollection,\n typeFieldName,\n } = useHierarchy()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n const hierarchyConfig =\n collectionConfig.hierarchy && typeof collectionConfig.hierarchy === 'object'\n ? collectionConfig.hierarchy\n : undefined\n const parentFieldName = hierarchyConfig?.parentFieldName\n const treeLimit = hierarchyConfig?.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT\n const useAsTitle = useAsTitleProp ?? collectionConfig.admin?.useAsTitle\n\n const allPossibleTypeValues = useMemo(\n () =>\n hierarchyConfig?.relatedCollections\n ? Object.keys(hierarchyConfig.relatedCollections)\n : undefined,\n [hierarchyConfig?.relatedCollections],\n )\n\n const contextData = getTreeDataForCollection(collectionSlug)\n const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : ''\n const contextBaseFilterKey = contextData?.baseFilter ? JSON.stringify(contextData.baseFilter) : ''\n const initialData =\n baseFilterKey === contextBaseFilterKey ? (contextData ?? initialDataProp) : initialDataProp\n // Tracks whether context has been seeded at least once since the last navigation.\n // Resets when initialExpandedNodesProp changes (new array reference = navigation).\n // Allows the memo to distinguish \"not yet seeded\" (fall back to prop) from\n // \"user collapsed all nodes\" (trust empty context).\n const contextSeededRef = useRef(false)\n const lastInitialExpandedRef = useRef(initialExpandedNodesProp)\n if (lastInitialExpandedRef.current !== initialExpandedNodesProp) {\n lastInitialExpandedRef.current = initialExpandedNodesProp\n contextSeededRef.current = false\n }\n\n const expandedNodes = useMemo(() => {\n const contextExpanded = getExpandedNodesForCollection(collectionSlug)\n if (contextExpanded.size > 0) {\n contextSeededRef.current = true\n return contextExpanded\n }\n if (contextSeededRef.current) {\n // Context was seeded (had nodes since last navigation) — trust empty set as \"all collapsed\"\n return contextExpanded\n }\n return initialExpandedNodesProp ? new Set(initialExpandedNodesProp) : contextExpanded\n }, [collectionSlug, getExpandedNodesForCollection, initialExpandedNodesProp])\n\n const handleToggleNode = useCallback(\n ({ id }: { id: number | string }) => {\n // Mark context as seeded so the memo never falls back to the prop after this interaction.\n // Capture the previous value first — seeding is only needed on the very first interaction.\n const wasSeeded = contextSeededRef.current\n contextSeededRef.current = true\n const contextExpanded = getExpandedNodesForCollection(collectionSlug)\n if (!wasSeeded && contextExpanded.size === 0 && initialExpandedNodesProp?.length) {\n // Context not yet seeded. Seed it with all initial nodes, applying the toggle correctly:\n // exclude the target if collapsing, include it if expanding.\n const initialSet = new Set(initialExpandedNodesProp.map(String))\n const isCurrentlyExpanded = initialSet.has(String(id))\n for (const nodeId of initialExpandedNodesProp) {\n if (!isCurrentlyExpanded || String(nodeId) !== String(id)) {\n toggleNodeForCollection(collectionSlug, nodeId)\n }\n }\n if (!isCurrentlyExpanded) {\n toggleNodeForCollection(collectionSlug, id)\n }\n return\n }\n toggleNodeForCollection(collectionSlug, id)\n },\n [\n collectionSlug,\n getExpandedNodesForCollection,\n initialExpandedNodesProp,\n toggleNodeForCollection,\n ],\n )\n\n // Pre-populate cache with initialData synchronously before first render\n const childrenCache = useRef<Map<string, CachedChildren>>(new Map())\n\n const prevBaseFilterKeyRef = useRef(baseFilterKey)\n if (prevBaseFilterKeyRef.current !== baseFilterKey) {\n prevBaseFilterKeyRef.current = baseFilterKey\n childrenCache.current.clear()\n }\n\n useMemo(() => {\n if (!initialData || initialData.docs.length === 0) {\n return\n }\n\n const docsByParent = new Map<string, TreeDocument[]>()\n for (const doc of initialData.docs) {\n const parentId = doc[parentFieldName] || 'null'\n const parentKey = String(parentId)\n if (!docsByParent.has(parentKey)) {\n docsByParent.set(parentKey, [])\n }\n docsByParent.get(parentKey).push(doc)\n }\n\n const filterKey = filterByCollections?.length\n ? filterByCollections.slice().sort().join(',')\n : ''\n for (const [parentKey, docs] of docsByParent) {\n const cacheKey = `${collectionSlug}-${parentKey}-${filterKey}-${baseFilterKey}`\n const parentMeta = initialData.loadedParents[parentKey]\n\n if (parentMeta) {\n const loadedCount = parentMeta.loadedCount ?? docs.length\n childrenCache.current.set(cacheKey, {\n children: docs,\n hasMore: parentMeta.hasMore,\n page: Math.ceil(loadedCount / treeLimit) || 1,\n totalDocs: parentMeta.totalDocs,\n })\n } else {\n childrenCache.current.set(cacheKey, {\n children: docs,\n hasMore: false,\n page: 1,\n totalDocs: docs.length,\n })\n }\n }\n }, [initialData, filterByCollections, parentFieldName, collectionSlug, treeLimit, baseFilterKey])\n\n const treeRef = useRef<HTMLDivElement>(null)\n\n const {\n children: rootNodes,\n hasMore,\n isLoading,\n loadMore: loadMoreFromHook,\n refresh,\n totalDocs,\n } = useChildren({\n allPossibleTypeValues,\n baseFilter,\n cache: childrenCache,\n collectionSlug,\n enabled: true,\n filterByCollections,\n initialData,\n limit: treeLimit,\n parentFieldName,\n parentId: 'null',\n typeFieldName,\n useAsTitle,\n })\n\n const handleLoadMore = useCallback(async () => {\n await loadMoreFromHook()\n }, [loadMoreFromHook])\n\n const handleNodeClick = useCallback(\n ({ id }: { id: number | string }) => {\n onNodeClick?.({ id })\n },\n [onNodeClick],\n )\n\n const handleTreeKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n moveFocus('down')\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n moveFocus('up')\n }\n },\n [moveFocus],\n )\n\n if (isLoading && !rootNodes) {\n return (\n <div className={baseClass}>\n <DelayedSpinner baseClass={baseClass} isLoading={true} />\n </div>\n )\n }\n\n if (!rootNodes || rootNodes.length === 0) {\n const collectionLabel = getEntityConfig({ collectionSlug })\n return (\n <div className={baseClass}>\n <CreateDocumentButton\n buttonStyle=\"primary\"\n collections={[{ collectionSlug }]}\n drawerSlug={createDrawerSlug}\n label={t('general:createNewLabel', {\n label: getTranslation(collectionLabel.labels.singular, i18n),\n })}\n onSave={async () => {\n await refresh()\n router.refresh()\n }}\n />\n </div>\n )\n }\n\n const isAllSelected = selectedNodeId === null\n const handleAllClick = () => onNodeClick?.({ id: null })\n\n return (\n <div\n className={baseClass}\n onKeyDown={handleTreeKeyDown}\n ref={treeRef}\n role=\"tree\"\n tabIndex={-1}\n >\n <div\n aria-selected={isAllSelected}\n className={[\n `${baseClass}__all-option`,\n isAllSelected && `${baseClass}__all-option--selected`,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleAllClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleAllClick()\n }\n }}\n role=\"treeitem\"\n tabIndex={0}\n >\n {icon || <TagIcon color=\"muted\" />}\n <span>\n {t('general:all')}{' '}\n {getTranslation(getEntityConfig({ collectionSlug })?.labels?.plural, i18n)}\n </span>\n </div>\n {rootNodes.map((node) => {\n const nodeId: number | string = node.id\n const nodeIdStr = typeof nodeId === 'number' ? String(nodeId) : nodeId\n const nodeTitle = getDocumentTitle(node, useAsTitle)\n\n return (\n <TreeNode\n allPossibleTypeValues={allPossibleTypeValues}\n baseFilter={baseFilter}\n cache={childrenCache}\n collectionSlug={collectionSlug}\n depth={0}\n expandedNodes={expandedNodes}\n filterByCollections={filterByCollections}\n key={nodeIdStr}\n limit={treeLimit}\n node={{ id: nodeId, hasChildren: true, title: nodeTitle }}\n onSelect={handleNodeClick}\n onToggle={handleToggleNode}\n parentFieldName={parentFieldName}\n selected={nodeIdStr === String(selectedNodeId)}\n selectedNodeId={selectedNodeId}\n typeFieldName={typeFieldName}\n useAsTitle={useAsTitle}\n />\n )\n })}\n {hasMore && (\n <LoadMore\n currentCount={rootNodes.length}\n depth={0}\n id=\"load-more-root\"\n onLoadMore={handleLoadMore}\n totalDocs={totalDocs}\n />\n )}\n </div>\n )\n}\n\nexport const HierarchyTree: React.FC<HierarchyTreeProps> = (props) => {\n return (\n <TreeFocusProvider>\n <HierarchyTreeInner {...props} />\n </TreeFocusProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,10 @@
1
- @import '../../scss/styles.scss';
1
+ @import '../../../scss/styles.scss';
2
2
 
3
3
  .tree {
4
- // CSS variables for customization - defined once at the top level
5
4
  --tree-indent: 20px;
6
5
  --tree-chevron-width: 16px;
7
6
  --tree-chevron-spacing: 8px;
8
- --tree-node-padding-y: calc(var(--base) / 4); // 4px
7
+ --tree-node-padding-y: calc(var(--base) / 4);
9
8
  --tree-node-content-height: 24px;
10
9
  --tree-row-gap: 8px;
11
10
  --tree-font-size: 13px;
@@ -31,11 +30,9 @@
31
30
  &:hover {
32
31
  text-decoration: underline;
33
32
  }
34
-
35
33
  &:focus-visible {
36
34
  outline: var(--accessibility-outline);
37
35
  }
38
-
39
36
  &--selected {
40
37
  font-weight: 600;
41
38
  }
@@ -1,4 +1,32 @@
1
- import type { MutableRefObject, ReactNode } from 'react';
1
+ import type { TypeWithID, Where } from 'payload';
2
+ import type { ReactNode, RefObject } from 'react';
3
+ export type HierarchyDocument = {
4
+ [key: string]: unknown;
5
+ } & TypeWithID;
6
+ export type HierarchyInitialData = {
7
+ baseFilter?: null | Where;
8
+ docs: HierarchyDocument[];
9
+ loadedParents: Record<string, {
10
+ hasMore: boolean;
11
+ loadedCount?: number;
12
+ totalDocs: number;
13
+ }>;
14
+ };
15
+ export type HierarchyTreeProps = {
16
+ baseFilter?: null | Where;
17
+ collectionSlug: string;
18
+ filterByCollections?: string[];
19
+ icon?: ReactNode;
20
+ /** Initial data for first render (before context hydration). After hydration, context data takes precedence. */
21
+ initialData?: HierarchyInitialData | null;
22
+ /** Initial expanded nodes for first render (before context hydration). After hydration, context takes precedence. */
23
+ initialExpandedNodes?: (number | string)[];
24
+ onNodeClick?: ({ id }: {
25
+ id: null | number | string;
26
+ }) => void;
27
+ selectedNodeId?: null | number | string;
28
+ useAsTitle?: string;
29
+ };
2
30
  export type TreeDocument = {
3
31
  [key: string]: unknown;
4
32
  id: number | string;
@@ -14,7 +42,7 @@ export type CachedChildren = {
14
42
  page: number;
15
43
  totalDocs: number;
16
44
  };
17
- export type TreeCache = MutableRefObject<Map<string, CachedChildren>>;
45
+ export type TreeCache = RefObject<Map<string, CachedChildren>>;
18
46
  export type TreeInitialData = {
19
47
  docs: TreeDocument[];
20
48
  loadedParents: Record<string, {
@@ -23,28 +51,9 @@ export type TreeInitialData = {
23
51
  totalDocs: number;
24
52
  }>;
25
53
  };
26
- export type TreeProps = {
27
- allPossibleTypeValues?: string[];
28
- collectionSlug: string;
29
- expandedNodes: Set<number | string>;
30
- filterByCollections?: string[];
31
- icon?: ReactNode;
32
- initialData?: null | TreeInitialData;
33
- onNodeClick?: ({ id }: {
34
- id: null | number | string;
35
- }) => void;
36
- parentFieldName: string;
37
- selectedNodeId?: null | number | string;
38
- showAllOption?: boolean;
39
- toggleNode: ({ id }: {
40
- id: number | string;
41
- }) => void;
42
- treeLimit?: number;
43
- typeFieldName?: string;
44
- useAsTitle?: string;
45
- };
46
54
  export type TreeNodeProps = {
47
55
  allPossibleTypeValues?: string[];
56
+ baseFilter?: null | Where;
48
57
  cache: TreeCache;
49
58
  collectionSlug: string;
50
59
  depth: number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/elements/Hierarchy/Tree/types.ts"],"sourcesContent":["import type { TypeWithID, Where } from 'payload'\nimport type { ReactNode, RefObject } from 'react'\n\nexport type HierarchyDocument = {\n [key: string]: unknown\n} & TypeWithID\n\nexport type HierarchyInitialData = {\n baseFilter?: null | Where\n docs: HierarchyDocument[]\n // Metadata about what was loaded - keyed by parent ID ('null' for root)\n loadedParents: Record<string, { hasMore: boolean; loadedCount?: number; totalDocs: number }>\n}\n\nexport type HierarchyTreeProps = {\n baseFilter?: null | Where\n collectionSlug: string\n filterByCollections?: string[]\n icon?: ReactNode\n /** Initial data for first render (before context hydration). After hydration, context data takes precedence. */\n initialData?: HierarchyInitialData | null\n /** Initial expanded nodes for first render (before context hydration). After hydration, context takes precedence. */\n initialExpandedNodes?: (number | string)[]\n onNodeClick?: ({ id }: { id: null | number | string }) => void\n selectedNodeId?: null | number | string\n useAsTitle?: string\n}\n\n// Tree primitive types (used by TreeNode, useChildren, HierarchyTree)\n\nexport type TreeDocument = {\n [key: string]: unknown\n id: number | string\n}\n\nexport type TreeNodeData = {\n hasChildren: boolean\n id: number | string\n title: string\n}\n\nexport type CachedChildren = {\n children: TreeDocument[]\n hasMore: boolean\n page: number\n totalDocs: number\n}\n\nexport type TreeCache = RefObject<Map<string, CachedChildren>>\n\nexport type TreeInitialData = {\n docs: TreeDocument[]\n loadedParents: Record<string, { hasMore: boolean; loadedCount?: number; totalDocs: number }>\n}\n\nexport type TreeNodeProps = {\n allPossibleTypeValues?: string[]\n baseFilter?: null | Where\n cache: TreeCache\n collectionSlug: string\n depth: number\n expandedNodes: Set<number | string>\n filterByCollections?: string[]\n limit: number\n node: TreeNodeData\n onSelect?: ({ id }: { id: number | string }) => void\n onToggle: ({ id }: { id: number | string }) => void\n parentFieldName: string\n selected?: boolean\n selectedNodeId?: number | string\n typeFieldName?: null | string\n useAsTitle?: string\n}\n"],"mappings":"AAuDA","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import type { Where } from 'payload';
2
+ import type { TreeCache, TreeDocument, TreeInitialData } from './types.js';
3
+ type UseChildrenArgs = {
4
+ allPossibleTypeValues?: string[];
5
+ /** Base filter to apply to all queries (e.g., tenant filter) */
6
+ baseFilter?: null | Where;
7
+ cache?: TreeCache;
8
+ /** Pre-computed cache key to ensure consistency with cache population */
9
+ cacheKey?: string;
10
+ collectionSlug: string;
11
+ enabled?: boolean;
12
+ filterByCollections?: string[];
13
+ initialData?: null | TreeInitialData;
14
+ limit?: number;
15
+ parentFieldName: string;
16
+ parentId: number | string;
17
+ typeFieldName?: null | string;
18
+ useAsTitle?: string;
19
+ };
20
+ type UseChildrenReturn = {
21
+ children: null | TreeDocument[];
22
+ hasMore: boolean;
23
+ isLoading: boolean;
24
+ /** Explicitly load children. Safe to call multiple times — no-ops if already loaded. */
25
+ load: () => Promise<TreeDocument[]>;
26
+ loadMore: () => Promise<TreeDocument[]>;
27
+ refresh: () => Promise<TreeDocument[]>;
28
+ totalDocs: number;
29
+ };
30
+ export declare const useChildren: ({ allPossibleTypeValues, baseFilter, cache, cacheKey: cacheKeyProp, collectionSlug, enabled, filterByCollections, initialData, limit, parentFieldName, parentId, typeFieldName, useAsTitle, }: UseChildrenArgs) => UseChildrenReturn;
31
+ export {};
32
+ //# sourceMappingURL=useChildren.d.ts.map